<?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>153748</bug_id>
          
          <creation_ts>2016-02-01 09:53:17 -0800</creation_ts>
          <short_desc>CSP: Support checking content security policy without a script execution context</short_desc>
          <delta_ts>2016-04-22 16:09:39 -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>WebCore Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>156079</blocked>
    
    <blocked>156935</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aestes</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mkwst</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1160899</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-01 09:53:17 -0800</bug_when>
    <thetext>We should support instantiating a ContentSecurityPolicy object for checking a content security policy without a script execution context. This is a step towards checking the CSP of a web worker for redirected script and XHR loads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160900</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-02-01 09:53:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/24439149&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160902</commentid>
    <comment_count>2</comment_count>
      <attachid>270395</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-01 09:55:44 -0800</bug_when>
    <thetext>Created attachment 270395
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160904</commentid>
    <comment_count>3</comment_count>
      <attachid>270396</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-01 09:59:53 -0800</bug_when>
    <thetext>Created attachment 270396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160905</commentid>
    <comment_count>4</comment_count>
      <attachid>270395</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-01 10:04:13 -0800</bug_when>
    <thetext>Comment on attachment 270395
Patch

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

So all of this refactoring for workers results in no behavior change? I have a few comments.

&gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:242
&gt; +            return m_policy-&gt;protocolMatchesSelf(url);

What guarantees m_policy is non-null?

&gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:1328
&gt; +    SecurityOrigin* securityOrigin = scriptExecutionContext.securityOrigin();
&gt; +    ASSERT(securityOrigin);

Why does ScriptExecutionContext::securityOrigin return a pointer instead of a reference? Can it ever be null? Why can’t it be null here?

I would like the local variable to be a reference. One way to do that is:

    ASSERT(scriptExecutionContext.securityOrigin());
    auto&amp; securityOrigin = *scriptExecutionContext.securityOrigin();

&gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:1623
&gt; +    if (!m_scriptExecutionContext || !is&lt;Document&gt;(*m_scriptExecutionContext))

Can write this more simply:

    if (!is&lt;Document&gt;(m_scriptExecutionContext))

Also, once we know it’s a Document it seems the rest of the function should use document, not m_scriptExecutionContext.

&gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:1680
&gt; +        PingLoader::sendViolationReport(*frame, m_scriptExecutionContext-&gt;completeURL(url), report.copyRef());

Should be document.completeURL, right?

&gt; Source/WebCore/page/csp/ContentSecurityPolicy.h:32
&gt; +#include &quot;SecurityContext.h&quot;

Not good to require even more includes. Can we do something to keep this to a minimum?

&gt; Source/WebCore/page/csp/ContentSecurityPolicy.h:34
&gt;  #include &lt;wtf/RefCounted.h&gt;

Don’t need this. Also don’t need the WTFString.h include if we are including URL.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160971</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-01 12:36:19 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 270395 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270395&amp;action=review
&gt; 
&gt; So all of this refactoring for workers results in no behavior change? 

Correct. I&apos;ll add a remark in the ChangeLog to state that there is no behavior change.

&gt; 
&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:242
&gt; &gt; +            return m_policy-&gt;protocolMatchesSelf(url);
&gt; 
&gt; What guarantees m_policy is non-null?
&gt;

Notice that m_policy is a pointer to a ContentSecurityPolicy object. A CSPSource is always initialized with a non-null pointer to the ContentSecurityPolicy object that created it and only a ContentSecurityPolicy object can create a CSPSource because the  declaration/definition of class CSPSource is in ContentSecurityPolicy.cpp.

I plan to change the classes CSPSource, CSPSourceList, CSPDirective, MediaListDirective, CSPDirectiveList from taking a pointer to a ContentSecurityPolicy object to taking a reference to a ContentSecurityPolicy to make it clear that their member field m_policy is never null. Unless you feel that we should incorporate such a change in this patch, I suggest that we defer such a this change to a subsequent patch to keep the patch focused on the refactoring necessary to separate out the script execution context.
 
&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:1328
&gt; &gt; +    SecurityOrigin* securityOrigin = scriptExecutionContext.securityOrigin();
&gt; &gt; +    ASSERT(securityOrigin);
&gt; 
&gt; Why does ScriptExecutionContext::securityOrigin return a pointer instead of
&gt; a reference?

Notice that ScriptExecutionContext inherits from SecurityContext, which defines member function securityOrigin(). We should look to make SecurityContext::securityOrigin() return a reference as it is a programmer error/correctness issue that a SecurityContext does not have a SecurityOrigin. From my understanding the design of having SecurityContext::securityOrigin() return a nullptr falls out from the concept of an &quot;empty&quot; SecurityOrigin (see bug #72250 that helped move us farther away from this concept) and the current design of SecurityContext not taking a SecurityOriginPolicy/SecurityOrigin on instantiation. A caller must explicitly call SecurityContext::setSecurityOriginPolicy() to pass a SecurityOriginPolicy that owns a SecurityOrigin.

&gt; Can it ever be null?

In theory, it can be null and its nullity represents a programmer error/correctness issue of failing to initialize it. In practice it is not null and its nullity would manifest itself in the crashing of many layout tests.

&gt; Why can’t it be null here?

It can be null if a ContentSecurityPolicy is constructed before a SecurityOrigin is set on the passed ScriptExecutionContext (say, lines 74 and 75 of WorkerGlobalScope.cpp are swapped in attachment #270396). Maybe we should prevent this as opposed to using a run-time assertion?

I chose a run-time assertion since failing to initialize a SecurityOrigin would lead to many layout tests crashing, including CSP tests, because we access SecurityContext::securityOrigin() without checking if it is null throughout the codebase.

Additional remarks:

One way to fix this without changing the design of SecurityContext is to have ContentSecurityPolicy constructor take both a reference to a ScriptExecutionContext and a reference to a SecurityOrigin. Another way, is to have the a single constructor that takes a reference to a SecurityOrigin and expose a member functions that takes a ScriptExecutionContext or a new interface, say ContentSecurityPolicyDelegate, that only exposes the functionality of ScriptExecutionContext that is needed by ContentSecurityPolicy: logging, disabling of JavaScript eval() and operator eval, URL completion, and applying of Document sandbox properties.

&gt; I would like the local variable to be a reference. One way to do that is:
&gt; 
&gt;     ASSERT(scriptExecutionContext.securityOrigin());
&gt;     auto&amp; securityOrigin = *scriptExecutionContext.securityOrigin();
&gt; 

Will fix.

&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:1623
&gt; &gt; +    if (!m_scriptExecutionContext || !is&lt;Document&gt;(*m_scriptExecutionContext))
&gt; 
&gt; Can write this more simply:
&gt; 
&gt;     if (!is&lt;Document&gt;(m_scriptExecutionContext))
&gt; 
&gt; Also, once we know it’s a Document it seems the rest of the function should
&gt; use document, not m_scriptExecutionContext.
&gt; 

Will fix.

&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:1680
&gt; &gt; +        PingLoader::sendViolationReport(*frame, m_scriptExecutionContext-&gt;completeURL(url), report.copyRef());
&gt; 
&gt; Should be document.completeURL, right?
&gt; 

Yes. Will fix.

&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicy.h:32
&gt; &gt; +#include &quot;SecurityContext.h&quot;
&gt; 
&gt; Not good to require even more includes. Can we do something to keep this to
&gt; a minimum?
&gt; 

Notice that I include this header to get the definition of the enum SandboxFlags and the enumeration value SandboxNone.

One way to avoid including this header here is to revert the removal of the SandboxFlags typedef from this file and default initialize m_sandboxFlags to SandboxNone in the constructor.

&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicy.h:34
&gt; &gt;  #include &lt;wtf/RefCounted.h&gt;
&gt; 
&gt; Don’t need this. Also don’t need the WTFString.h include if we are including
&gt; URL.h.

Will remove RefCounted.h and WTFString.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161187</commentid>
    <comment_count>6</comment_count>
      <attachid>270466</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-01 20:49:29 -0800</bug_when>
    <thetext>Created attachment 270466
Patch

Updated patch based on Darin Adler&apos;s feedback. I changed the added overloaded ContentSecurityPolicy constructor to take a SecurityOrigin as opposed to a URL since this will better align with its future use in DocumentThreadableLoader. I also chose to incorporate many pointer-to-reference conversions in this patch as opposed to doing such conversions in another patch. Let me know if it is preferred to do such changes in a separate bug/patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161188</commentid>
    <comment_count>7</comment_count>
      <attachid>270467</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-01 20:55:17 -0800</bug_when>
    <thetext>Created attachment 270467
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161276</commentid>
    <comment_count>8</comment_count>
      <attachid>270467</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-02 08:37:21 -0800</bug_when>
    <thetext>Comment on attachment 270467
Patch

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

Looks like iOS EWS is broken. We should get someone to fix it.

&gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:1204
&gt;          if (urlBegin &lt; position) {
&gt;              String url = String(urlBegin, position - urlBegin);
&gt; -            m_reportURIs.append(m_policy-&gt;completeURL(url));
&gt; +            m_reportURIs.append(url);
&gt;          }

I think this would read better without the local variable. In fact, I think it should say:

    m_reportURIs.append(value.substring(urlBegin, position - urlBegin));

That will optimize the case where the entire string is a single URL to not copy the string at all.

&gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:1402
&gt; +    ASSERT(m_scriptExecutionContext);
&gt; +    if (!m_lastPolicyEvalDisabledErrorMessage.isNull())
&gt; +        m_scriptExecutionContext-&gt;disableEval(m_lastPolicyEvalDisabledErrorMessage);
&gt; +
&gt; +    if (m_sandboxFlags != SandboxNone &amp;&amp; is&lt;Document&gt;(m_scriptExecutionContext))
&gt; +        m_scriptExecutionContext-&gt;enforceSandboxFlags(m_sandboxFlags);

Paragraphing here is slightly peculiar. I would suggest adding or removing a blank line so this is either 3 paragraphs or 1 paragraph, rather than 2.

&gt; Source/WebCore/page/csp/ContentSecurityPolicy.h:107
&gt; +    // The following functions are used by internal data structures to callback into this object when parsing, validating,

The verb would be &quot;call back&quot;; &quot;callback&quot; is a noun.

&gt; Source/WebCore/workers/WorkerGlobalScope.cpp:75
&gt; +    setContentSecurityPolicy(std::make_unique&lt;ContentSecurityPolicy&gt;(*static_cast&lt;ScriptExecutionContext*&gt;(this)));

I don’t understand why the static_cast is needed here. Wouldn’t *this work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161294</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-02 09:49:01 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:1204
&gt; &gt;          if (urlBegin &lt; position) {
&gt; &gt;              String url = String(urlBegin, position - urlBegin);
&gt; &gt; -            m_reportURIs.append(m_policy-&gt;completeURL(url));
&gt; &gt; +            m_reportURIs.append(url);
&gt; &gt;          }
&gt; 
&gt; I think this would read better without the local variable. In fact, I think
&gt; it should say:
&gt; 
&gt;     m_reportURIs.append(value.substring(urlBegin, position - urlBegin));
&gt; 
&gt; That will optimize the case where the entire string is a single URL to not
&gt; copy the string at all.
&gt; 

I will write this as:

m_reportURIs.append(value.substring(urlBegin - characters, position - urlBegin));

because urlBegin - characters represents an index position (since urlBegin is a pointer).

&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicy.cpp:1402
&gt; &gt; +    ASSERT(m_scriptExecutionContext);
&gt; &gt; +    if (!m_lastPolicyEvalDisabledErrorMessage.isNull())
&gt; &gt; +        m_scriptExecutionContext-&gt;disableEval(m_lastPolicyEvalDisabledErrorMessage);
&gt; &gt; +
&gt; &gt; +    if (m_sandboxFlags != SandboxNone &amp;&amp; is&lt;Document&gt;(m_scriptExecutionContext))
&gt; &gt; +        m_scriptExecutionContext-&gt;enforceSandboxFlags(m_sandboxFlags);
&gt; 
&gt; Paragraphing here is slightly peculiar. I would suggest adding or removing a
&gt; blank line so this is either 3 paragraphs or 1 paragraph, rather than 2.
&gt; 

Will remove the blank line between paragraph 1 and paragraph 2 so that there is exactly 1 paragraph.

&gt; &gt; Source/WebCore/page/csp/ContentSecurityPolicy.h:107
&gt; &gt; +    // The following functions are used by internal data structures to callback into this object when parsing, validating,
&gt; 
&gt; The verb would be &quot;call back&quot;; &quot;callback&quot; is a noun.
&gt; 

Will substitute &quot;call back&quot; for &quot;callback&quot;.

&gt; &gt; Source/WebCore/workers/WorkerGlobalScope.cpp:75
&gt; &gt; +    setContentSecurityPolicy(std::make_unique&lt;ContentSecurityPolicy&gt;(*static_cast&lt;ScriptExecutionContext*&gt;(this)));
&gt; 
&gt; I don’t understand why the static_cast is needed here.

Will remove the static_cast as it is not needed.

&gt; Wouldn’t *this work?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161297</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-02 09:57:47 -0800</bug_when>
    <thetext>Committed r196012: &lt;http://trac.webkit.org/changeset/196012&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270395</attachid>
            <date>2016-02-01 09:55:44 -0800</date>
            <delta_ts>2016-02-01 09:59:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153748-20160201095519.patch</filename>
            <type>text/plain</type>
            <size>29619</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1OTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzYxODYzOWY2NDkzNzMw
YTY1MDQ0ZmYwMWYxZDIwZWZiZjlkMmY5ZC4uYWEwMjA5ZDkwYTczNDBmNGJjZWY5NjRjNmE3OGNi
NjQzN2I4OGM4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE2LTAyLTAxICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBDU1A6IFN1cHBvcnQgY2hl
Y2tpbmcgY29udGVudCBzZWN1cml0eSBwb2xpY3kgd2l0aG91dCBhIHNjcmlwdCBleGVjdXRpb24g
Y29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUzNzQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDQzOTE0OT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUb3dhcmRzIGNoZWNraW5nIGEgV2Vi
IFdvcmtlcidzIGNvbnRlbnQgc2VjdXJpdHkgcG9saWN5IGFnYWluc3QgYSByZWRpcmVjdGVkIHdv
cmtlcgorICAgICAgICBzY3JpcHQgbG9hZCBvciByZWRpcmVjdGVkIFhIUiByZXF1ZXN0IGZvciBh
biBYSFIgcmVxdWVzdCBpbml0aWF0ZWQgZnJvbSBpdCwgd2Ugc2hvdWxkCisgICAgICAgIHN1cHBv
cnQgaW5zdGFudGlhdGluZyBhIENvbnRlbnRTZWN1cml0eVBvbGljeSBvYmplY3Qgd2l0aG91dCBh
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQpOiBQYXNzIHx0
aGlzfCBhcyBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGFzIGEgcG9pbnRlci4KKyAgICAgICAgKiBw
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NQ
U291cmNlOjpzY2hlbWVNYXRjaGVzKTogTW92ZSBsb2dpYyBmb3IgY2hlY2tpbmcgdGhlIHByb3Rv
Y29sIG9mIHNvdXJjZSAic2VsZiIgZnJvbQorICAgICAgICBoZXJlIHRvIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6cHJvdG9jb2xNYXRjaGVzU2VsZigpIGJlY2F1c2Ugd2UgbWF5IG5vdCBoYXZlIGEg
c2VjdXJpdHkgb3JpZ2luCisgICAgICAgIGlmIENvbnRlbnRTZWN1cml0eVBvbGljeSB3YXMgaW5p
dGlhdGVkIHdpdGhvdXQgYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG9iamVjdC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6OmFsbG93U2VsZik6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NQU291cmNlTGlzdDo6Q1NQU291cmNlTGlzdCk6IFJlbW92ZSBmaWVsZHMgZnJvbSBt
ZW1iZXIgaW5pdGlhbGl6YXRpb24gbGlzdCB0aGF0IGNhbgorICAgICAgICBiZSBpbml0aWFsaXpl
ZCB1c2luZyBDKysxMSBpbi1jbGFzcyBpbml0aWFsaXphdGlvbiBzeW50YXguCisgICAgICAgIChX
ZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjptYXRjaGVzKTogQ2FsbCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OnVybE1hdGNoZXNTZWxmKCkgdG8gbWF0Y2ggdGhlCisgICAgICAgIGVmZmVjdGl2ZSBVUkwg
YWdhaW5zdCB0aGUgVVJMIG9mIHNvdXJjZSAic2VsZiIuCisgICAgICAgIChXZWJDb3JlOjpDU1BT
b3VyY2VMaXN0OjpwYXJzZVNvdXJjZSk6IFNpbXBsaWZ5IGNvZGUgYnkgc2V0dGluZyBpbnRlcm5h
bCBtZW1iZXIgZmllbGRzIGRpcmVjdGx5CisgICAgICAgIGluc3RlYWQgb2YgdmlhIG1lbWJlciBm
dW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VMaXN0RGlyZWN0aXZlOjphbGxvd3Mp
OiBXcml0ZSBpbiB0ZXJtcyBvZiBDU1BTb3VyY2VMaXN0OjphbGxvd1NlbGYoKSBiZWNhdXNlIHdl
CisgICAgICAgIG1heSBub3QgaGF2ZSBhIHNlY3VyaXR5IG9yaWdpbiB0byBnZXQgYSBVUkwgZnJv
bSBpZiBDb250ZW50U2VjdXJpdHlQb2xpY3kgd2FzIGluaXRpYXRlZCB3aXRob3V0CisgICAgICAg
IGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBvYmplY3QuCisgICAgICAgIChXZWJDb3JlOjpDU1BE
aXJlY3RpdmVMaXN0OjpyZXBvcnRVUklzKTogQ2hhbmdlIHJldHVybiB0eXBlIGZyb20gVmVjdG9y
PFVSTD4gdG8gVmVjdG9yPFN0cmluZz4KKyAgICAgICAgVGhlIGNhbGxlciB3aWxsIGNvbnZlcnQg
dGhlIHN0cmluZ3MgdG8gVVJMcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHNjcmlwdCBleGVjdXRpb24g
Y29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVwb3J0
VVJJKTogU3RvcmUgdGhlIHJlcG9ydCBVUkkgYXMgYSBzdHJpbmcgaW5zdGVhZCBvZiBhIFVSTAor
ICAgICAgICBiZWNhdXNlIHdlIG1heSBub3QgaGF2ZSBhIHNlY3VyaXR5IG9yaWdpbiB0byBjb21w
dXRlIHRoZSBhYnNvbHV0ZSBVUkwgaWYgQ29udGVudFNlY3VyaXR5UG9saWN5CisgICAgICAgIHdh
cyBpbml0aWF0ZWQgd2l0aG91dCBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgb2JqZWN0LgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpDb250ZW50U2VjdXJpdHlQb2xp
Y3kpOiBNb2RpZmllZCB0byB0YWtlIHRoZSBTY3JpcHRFeGVjdXRpb25PYmplY3QKKyAgICAgICAg
YXMgYSByZWZlcmVuY2UgYW5kIGNvbXB1dGUgdGhlIENTUFNvdXJjZSBvYmplY3QgZm9yICJzZWxm
IiBhbmQgY2FjaGUgdGhlIHByb3RvY29sIGZvciAic2VsZiIuIFJlbW92ZWQKKyAgICAgICAgZmll
bGQgbV9vdmVycmlkZUlubGluZVN0eWxlQWxsb3dlZCBmcm9tIHRoZSBtZW1iZXIgaW5pdGlhbGl6
YXRpb24gbGlzdCBhbmQgdXNlZCBDKysxMSBpbi1jbGFzcworICAgICAgICBpbml0aWFsaXphdGlv
biBzeW50YXggdG8gaW5pdGlhbGl6ZSBpdC4gQWRkZWQgb3ZlcmxvYWRlZCBjb25zdHJ1Y3RvciB0
aGF0IHRha2VzIGEgVVJMIG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0
eVBvbGljeTo6ZGlkUmVjZWl2ZUhlYWRlcik6IFN0b3JlIHRoZSBldmFsIGRpc2FibGVkIGVycm9y
IG1lc3NhZ2UgZm9yCisgICAgICAgIHRoZSBsYXN0IHBhcnNlZCBwb2xpY3kgaW4gYSBtZW1iZXIg
ZmllbGQgaW5zdGVhZCBvZiB1c2luZyBpdCBhcyBwYXJ0IG9mIGRpc2FibGluZyBldmFsIGV4ZWN1
dGlvbgorICAgICAgICBvbiB0aGUgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IGJlY2F1c2Ugd2Ug
bWF5IG5vdCBoYXZlIHN1Y2ggYSBjb250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNl
Y3VyaXR5UG9saWN5OjphcHBseVBvbGljeVRvU2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6IEFwcGxp
ZXMgdGhlIGNvbnRlbnQgc2VjdXJpdHkKKyAgICAgICAgcG9saWN5IGV2YWwgYW5kIHNhbmRib3gg
cmVzdHJpY3Rpb25zIHRvIHRoZSBzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuCisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OnVybE1hdGNoZXNTZWxmKTogTWF0Y2ggdGhl
IHNwZWNpZmllZCBVUkwgYWdhaW5zdCB0aGUgVVJMIGZvcgorICAgICAgICBzb3VyY2UgInNlbGYi
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojpwcm90b2NvbE1hdGNo
ZXNTZWxmKTogTWF0Y2ggdGhlIHByb3RvY29sIG9mIHRoZSBzcGVjaWZpZWQgVVJMCisgICAgICAg
IGFnYWluc3QgdGhlIHByb3RvY29sIGZvciBzb3VyY2UgInNlbGYiLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpnYXRoZXJSZXBvcnRVUklzKTogTW9kaWZpZWQgdG8g
dXNlIHRoZSBzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQKKyAgICAgICAgdG8gY29tcHV0ZSB0aGUg
YWJzb2x1dGUgVVJMIGZvciBlYWNoIHJlcG9ydCBVUkkuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydFZpb2xhdGlvbik6IEJhaWwgb3V0IGlmIHdlIGRvIG5v
dCBoYXZlIGEgc2NyaXB0IGV4ZWN1dGlvbgorICAgICAgICBjb250ZXh0LgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojpsb2dUb0NvbnNvbGUpOiBPbmx5IGxvZyB0byB0
aGUgY29uc29sZSBpZiB3ZSBoYXZlIGEgc2NyaXB0CisgICAgICAgIGV4ZWN1dGlvbiBjb250ZXh0
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRCbG9ja2Vk
U2NyaXB0RXhlY3V0aW9uVG9JbnNwZWN0b3IpOiBPbmx5IHJlcG9ydCBibG9ja2VkCisgICAgICAg
IHNjcmlwdCBleGVjdXRpb24gdG8gdGhlIFdlYiBJbnNwZWN0b3IgaWYgd2UgaGF2ZSBhIHNjcmlw
dCBleGVjdXRpb24gY29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6OmFk
ZFNvdXJjZVNlbGYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlTGlzdDo6
YWRkU291cmNlU3Rhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0
OjphZGRTb3VyY2VVbnNhZmVJbmxpbmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQ
U291cmNlTGlzdDo6YWRkU291cmNlVW5zYWZlRXZhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpnYXRoZXJSZXBvcnRVUklzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6c2VjdXJpdHlPcmlnaW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojp1cmwpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojpjb21wbGV0ZVVS
TCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmVu
Zm9yY2VTYW5kYm94RmxhZ3MpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5
OjplbmZvcmNlU2FuZGJveEZsYWdzKTogQWNjdW11bGF0ZXMgdGhlIHBhcnNlZCBzYW5kYm94IGZs
YWdzLiBXZQorICAgICAgICB3aWxsIGFwcGx5IHRoZSBzYW5kYm94IGZsYWdzIGluIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6YXBwbHlQb2xpY3lUb1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS4KKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Oldvcmtlckdsb2JhbFNjb3BlOjpXb3JrZXJHbG9iYWxTY29wZSk6IFN3YXAgdGhlIG9yZGVyIG9m
IENvbnRlbnRTZWN1cml0eVBvbGljeSBhbmQgU2VjdXJpdHlPcmlnaW5Qb2xpY3kKKyAgICAgICAg
Y3JlYXRpb24gc3VjaCB0aGF0IHdlIGNyZWF0ZSBTZWN1cml0eU9yaWdpblBvbGljeSBhbmQgU2Vj
dXJpdHlPcmlnaW4gb2JqZWN0cyBiZWZvcmUgY3JlYXRpbmcgYSBDb250ZW50U2VjdXJpdHlQb2xp
Y3kKKyAgICAgICAgb2JqZWN0IGFzIENvbnRlbnRTZWN1cml0eVBvbGljeSBkZXBlbmRzIG9uIHRo
ZSBleGlzdGVuY2Ugb2YgYSBTZWN1cml0eU9yaWdpbiB3aGVuIGluc3RhbnRpYXRlZCB3aXRoIGEg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KKwogMjAxNi0wMS0yOCAgRGFuaWVsIEJhdGVzICA8ZGFi
YXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQ1NQOiBBbGxvdyBXZWIgV29ya2VycyBpbml0aWF0
ZWQgZnJvbSBhbiBpc29sYXRlZCB3b3JsZCB0byBieXBhc3MgdGhlIG1haW4gd29ybGQgQ29udGVu
dCBTZWN1cml0eSBQb2xpY3kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDExNTkxZDdlZDQ2
NzBmNWY3OTJmM2VhZGE4MWYxOWJlYTU1MzhjYWQuLjVjNWE1MjliZjRjNzM0NWZmNGQ2ODQxN2My
NTZiY2Q3OTkzMDdlN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNTEyOCw3ICs1MTI4
LDcgQEAgdm9pZCBEb2N1bWVudDo6aW5pdFNlY3VyaXR5Q29udGV4dCgpCiAgICAgICAgIC8vIFRo
aXMgY2FuIG9jY3VyIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCgp
LgogICAgICAgICBzZXRDb29raWVVUkwoVVJMKFBhcnNlZFVSTFN0cmluZywgZW1wdHlTdHJpbmco
KSkpOwogICAgICAgICBzZXRTZWN1cml0eU9yaWdpblBvbGljeShTZWN1cml0eU9yaWdpblBvbGlj
eTo6Y3JlYXRlKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVVbmlxdWUoKSkpOwotICAgICAgICBzZXRD
b250ZW50U2VjdXJpdHlQb2xpY3koc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50U2VjdXJpdHlQb2xp
Y3k+KHRoaXMpKTsKKyAgICAgICAgc2V0Q29udGVudFNlY3VyaXR5UG9saWN5KHN0ZDo6bWFrZV91
bmlxdWU8Q29udGVudFNlY3VyaXR5UG9saWN5PigqdGhpcykpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC01MTQxLDcgKzUxNDEsNyBAQCB2b2lkIERvY3VtZW50Ojppbml0U2VjdXJpdHlD
b250ZXh0KCkKICAgICAgICAgYXBwbHlDb250ZW50RGlzcG9zaXRpb25BdHRhY2htZW50U2FuZGJv
eCgpOwogCiAgICAgc2V0U2VjdXJpdHlPcmlnaW5Qb2xpY3koU2VjdXJpdHlPcmlnaW5Qb2xpY3k6
OmNyZWF0ZShpc1NhbmRib3hlZChTYW5kYm94T3JpZ2luKSA/IFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGVVbmlxdWUoKSA6IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobV91cmwpKSk7Ci0gICAgc2V0Q29u
dGVudFNlY3VyaXR5UG9saWN5KHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudFNlY3VyaXR5UG9saWN5
Pih0aGlzKSk7CisgICAgc2V0Q29udGVudFNlY3VyaXR5UG9saWN5KHN0ZDo6bWFrZV91bmlxdWU8
Q29udGVudFNlY3VyaXR5UG9saWN5PigqdGhpcykpOwogCiAgICAgaWYgKFNldHRpbmdzKiBzZXR0
aW5ncyA9IHRoaXMtPnNldHRpbmdzKCkpIHsKICAgICAgICAgaWYgKCFzZXR0aW5ncy0+d2ViU2Vj
dXJpdHlFbmFibGVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3kuY3BwCmluZGV4IDdiMmJhZmZiODcwODUyYTIxZjE0ZTUzZTc1NzVhNTYx
YTQ5MDg2YzkuLjU0Njc1YmU0ZDIzYzY3MmQzY2M1N2YwZjdkMTVkN2E4MTMyMThjYTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcApA
QCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNp
bmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIK
LSNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIgogI2luY2x1ZGUgIlRleHRF
bmNvZGluZy5oIgpAQCAtMjM5LDE0ICsyMzgsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJv
b2wgc2NoZW1lTWF0Y2hlcyhjb25zdCBVUkwmIHVybCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlm
IChtX3NjaGVtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFN0cmluZyBwcm90ZWN0ZWRSZXNv
dXJjZVNjaGVtZShtX3BvbGljeS0+c2VjdXJpdHlPcmlnaW4oKS0+cHJvdG9jb2woKSk7Ci0jaWYg
RU5BQkxFKENTUF9ORVhUKQotICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHByb3RlY3RlZFJlc291cmNlU2NoZW1lLCAiaHR0cCIpKQotICAgICAgICAgICAgICAg
IHJldHVybiB1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpOwotI2VuZGlmCi0gICAgICAgICAg
ICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2woKSwgcHJvdGVjdGVk
UmVzb3VyY2VTY2hlbWUpOwotICAgICAgICB9CisgICAgICAgIGlmIChtX3NjaGVtZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gbV9wb2xpY3ktPnByb3RvY29sTWF0Y2hlc1NlbGYodXJs
KTsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCks
IG1fc2NoZW1lKTsKICAgICB9CiAKQEAgLTMxMSw2ICszMDQsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBtYXRjaGVzKGNvbnN0IFVSTCYpOwogICAgIGJvb2wgYWxsb3dJbmxpbmUoKSBjb25zdCB7IHJl
dHVybiBtX2FsbG93SW5saW5lOyB9CiAgICAgYm9vbCBhbGxvd0V2YWwoKSBjb25zdCB7IHJldHVy
biBtX2FsbG93RXZhbDsgfQorICAgIGJvb2wgYWxsb3dTZWxmKCkgY29uc3QgeyByZXR1cm4gbV9h
bGxvd1NlbGY7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlKGNvbnN0IFVDaGFyKiBiZWdp
biwgY29uc3QgVUNoYXIqIGVuZCk7CkBAIC0zMjEsMjUgKzMxNSwxOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgcGFyc2VQb3J0KGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgaW50
JiBwb3J0LCBib29sJiBwb3J0SGFzV2lsZGNhcmQpOwogICAgIGJvb2wgcGFyc2VQYXRoKGNvbnN0
IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBwYXRoKTsKIAotICAgIHZv
aWQgYWRkU291cmNlU2VsZigpOwotICAgIHZvaWQgYWRkU291cmNlU3RhcigpOwotICAgIHZvaWQg
YWRkU291cmNlVW5zYWZlSW5saW5lKCk7Ci0gICAgdm9pZCBhZGRTb3VyY2VVbnNhZmVFdmFsKCk7
Ci0KICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIG1fcG9saWN5OwogICAgIFZlY3RvcjxDU1BT
b3VyY2U+IG1fbGlzdDsKICAgICBTdHJpbmcgbV9kaXJlY3RpdmVOYW1lOwotICAgIGJvb2wgbV9h
bGxvd1N0YXI7Ci0gICAgYm9vbCBtX2FsbG93SW5saW5lOwotICAgIGJvb2wgbV9hbGxvd0V2YWw7
CisgICAgYm9vbCBtX2FsbG93U2VsZiB7IGZhbHNlIH07CisgICAgYm9vbCBtX2FsbG93U3RhciB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2FsbG93SW5saW5lIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
YWxsb3dFdmFsIHsgZmFsc2UgfTsKIH07CiAKIENTUFNvdXJjZUxpc3Q6OkNTUFNvdXJjZUxpc3Qo
Q29udGVudFNlY3VyaXR5UG9saWN5KiBwb2xpY3ksIGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFt
ZSkKICAgICA6IG1fcG9saWN5KHBvbGljeSkKICAgICAsIG1fZGlyZWN0aXZlTmFtZShkaXJlY3Rp
dmVOYW1lKQotICAgICwgbV9hbGxvd1N0YXIoZmFsc2UpCi0gICAgLCBtX2FsbG93SW5saW5lKGZh
bHNlKQotICAgICwgbV9hbGxvd0V2YWwoZmFsc2UpCiB7CiB9CiAKQEAgLTM1OSw2ICszNDYsOSBA
QCBib29sIENTUFNvdXJjZUxpc3Q6Om1hdGNoZXMoY29uc3QgVVJMJiB1cmwpCiAKICAgICBVUkwg
ZWZmZWN0aXZlVVJMID0gU2VjdXJpdHlPcmlnaW46OnNob3VsZFVzZUlubmVyVVJMKHVybCkgPyBT
ZWN1cml0eU9yaWdpbjo6ZXh0cmFjdElubmVyVVJMKHVybCkgOiB1cmw7CiAKKyAgICBpZiAobV9h
bGxvd1NlbGYgJiYgbV9wb2xpY3ktPnVybE1hdGNoZXNTZWxmKGVmZmVjdGl2ZVVSTCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fbGlzdCkgewogICAg
ICAgICBpZiAoZW50cnkubWF0Y2hlcyhlZmZlY3RpdmVVUkwpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC00MTYsMjIgKzQwNiwyMiBAQCBib29sIENTUFNvdXJjZUxpc3Q6OnBhcnNlU291
cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzYwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZW5kIC0gYmVnaW4gPT0gMSAmJiAqYmVnaW4g
PT0gJyonKSB7Ci0gICAgICAgIGFkZFNvdXJjZVN0YXIoKTsKKyAgICAgICAgbV9hbGxvd1N0YXIg
PSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2luLCAiJ3NlbGYnIikpIHsKLSAg
ICAgICAgYWRkU291cmNlU2VsZigpOworICAgICAgICBtX2FsbG93U2VsZiA9IHRydWU7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICIndW5zYWZlLWlubGluZSciKSkgewotICAgICAg
ICBhZGRTb3VyY2VVbnNhZmVJbmxpbmUoKTsKKyAgICAgICAgbV9hbGxvd0lubGluZSA9IHRydWU7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICIndW5zYWZlLWV2YWwnIikpIHsKLSAg
ICAgICAgYWRkU291cmNlVW5zYWZlRXZhbCgpOworICAgICAgICBtX2FsbG93RXZhbCA9IHRydWU7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjMxLDI2ICs2MjEsNiBAQCBib29s
IENTUFNvdXJjZUxpc3Q6OnBhcnNlUG9ydChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQsIGludCYgcG9ydCwgYgogICAgIHJldHVybiBvazsKIH0KIAotdm9pZCBDU1BTb3VyY2VM
aXN0OjphZGRTb3VyY2VTZWxmKCkKLXsKLSAgICBtX2xpc3QuYXBwZW5kKENTUFNvdXJjZShtX3Bv
bGljeSwgbV9wb2xpY3ktPnNlY3VyaXR5T3JpZ2luKCktPnByb3RvY29sKCksIG1fcG9saWN5LT5z
ZWN1cml0eU9yaWdpbigpLT5ob3N0KCksIG1fcG9saWN5LT5zZWN1cml0eU9yaWdpbigpLT5wb3J0
KCksIFN0cmluZygpLCBmYWxzZSwgZmFsc2UpKTsKLX0KLQotdm9pZCBDU1BTb3VyY2VMaXN0Ojph
ZGRTb3VyY2VTdGFyKCkKLXsKLSAgICBtX2FsbG93U3RhciA9IHRydWU7Ci19Ci0KLXZvaWQgQ1NQ
U291cmNlTGlzdDo6YWRkU291cmNlVW5zYWZlSW5saW5lKCkKLXsKLSAgICBtX2FsbG93SW5saW5l
ID0gdHJ1ZTsKLX0KLQotdm9pZCBDU1BTb3VyY2VMaXN0OjphZGRTb3VyY2VVbnNhZmVFdmFsKCkK
LXsKLSAgICBtX2FsbG93RXZhbCA9IHRydWU7Ci19Ci0KIGNsYXNzIENTUERpcmVjdGl2ZSB7CiBw
dWJsaWM6CiAgICAgQ1NQRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5KiBwb2xpY3kpCkBAIC03NTksNyArNzI5LDEw
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgYWxsb3dzKGNvbnN0IFVSTCYgdXJsKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fc291cmNlTGlzdC5tYXRjaGVzKHVybC5pc0VtcHR5KCkgPyBwb2xpY3ko
KS0+dXJsKCkgOiB1cmwpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGludmVzdGlnYXRl
IHJldHVybmluZyBmYWxzZSBmb3IgYW4gZW1wdHkgVVJMLgorICAgICAgICBpZiAodXJsLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiBtX3NvdXJjZUxpc3QuYWxsb3dTZWxmKCk7CisgICAg
ICAgIHJldHVybiBtX3NvdXJjZUxpc3QubWF0Y2hlcyh1cmwpOwogICAgIH0KIAogICAgIGJvb2wg
YWxsb3dJbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUxpc3QuYWxsb3dJbmxpbmUoKTsg
fQpAQCAtNzk2LDExICs3NjksMTAgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dGb3JtQWN0aW9u
KGNvbnN0IFVSTCYsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25z
dDsKICAgICBib29sIGFsbG93QmFzZVVSSShjb25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7CiAKLSAgICB2b2lkIGdhdGhlclJlcG9ydFVSSXMo
RE9NU3RyaW5nTGlzdCYpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgZXZhbERpc2FibGVkRXJy
b3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2U7IH0K
ICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uIHJlZmxl
Y3RlZFhTU0Rpc3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZWZsZWN0ZWRYU1NEaXNwb3Np
dGlvbjsgfQogICAgIGJvb2wgaXNSZXBvcnRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9yZXBvcnRP
bmx5OyB9Ci0gICAgY29uc3QgVmVjdG9yPFVSTD4mIHJlcG9ydFVSSXMoKSBjb25zdCB7IHJldHVy
biBtX3JlcG9ydFVSSXM7IH0KKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVwb3J0VVJJcygp
IGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0VVJJczsgfQogCiBwcml2YXRlOgogICAgIHZvaWQgcGFy
c2UoY29uc3QgU3RyaW5nJik7CkBAIC04NTUsNyArODI3LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8U291cmNlTGlzdERpcmVjdGl2ZT4gbV9zY3JpcHRTcmM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFNvdXJjZUxpc3REaXJlY3RpdmU+IG1fc3R5bGVTcmM7CiAKLSAgICBWZWN0b3I8
VVJMPiBtX3JlcG9ydFVSSXM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9yZXBvcnRVUklzOwogCiAg
ICAgU3RyaW5nIG1fZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlOwogfTsKQEAgLTExMTQsMTIgKzEw
ODYsNiBAQCBib29sIENTUERpcmVjdGl2ZUxpc3Q6OmFsbG93Q29ubmVjdFRvU291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb250ZW50U2VjdXJpdHlQb2xpYwogICAgICAgICAobV9yZXBvcnRPbmx5IHx8
IGNoZWNrU291cmNlKG9wZXJhdGl2ZURpcmVjdGl2ZShtX2Nvbm5lY3RTcmMuZ2V0KCkpLCB1cmwp
KTsKIH0KIAotdm9pZCBDU1BEaXJlY3RpdmVMaXN0OjpnYXRoZXJSZXBvcnRVUklzKERPTVN0cmlu
Z0xpc3QmIGxpc3QpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiB1cmkgOiBtX3JlcG9ydFVSSXMp
Ci0gICAgICAgIGxpc3QuYXBwZW5kKHVyaS5zdHJpbmcoKSk7Ci19Ci0KIGJvb2wgQ1NQRGlyZWN0
aXZlTGlzdDo6YWxsb3dGb3JtQWN0aW9uKGNvbnN0IFVSTCYgdXJsLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHJlcG9ydGluZ1N0YXR1cyA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0
YXR1czo6U2VuZFJlcG9ydCA/CkBAIC0xMjM2LDcgKzEyMDIsNyBAQCB2b2lkIENTUERpcmVjdGl2
ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIAogICAgICAgICBpZiAodXJsQmVnaW4gPCBwb3NpdGlvbikgewogICAgICAgICAgICAg
U3RyaW5nIHVybCA9IFN0cmluZyh1cmxCZWdpbiwgcG9zaXRpb24gLSB1cmxCZWdpbik7Ci0gICAg
ICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKG1fcG9saWN5LT5jb21wbGV0ZVVSTCh1cmwpKTsK
KyAgICAgICAgICAgIG1fcmVwb3J0VVJJcy5hcHBlbmQodXJsKTsKICAgICAgICAgfQogICAgIH0K
IH0KQEAgLTEzNTUsMTAgKzEzMjEsMjAgQEAgdm9pZCBDU1BEaXJlY3RpdmVMaXN0OjphZGREaXJl
Y3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICBt
X3BvbGljeS0+cmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUobmFtZSk7CiB9CiAKLUNvbnRlbnRT
ZWN1cml0eVBvbGljeTo6Q29udGVudFNlY3VyaXR5UG9saWN5KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCi0gICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAsIG1fb3ZlcnJpZGVJbmxpbmVTdHlsZUFs
bG93ZWQoZmFsc2UpCitDb250ZW50U2VjdXJpdHlQb2xpY3k6OkNvbnRlbnRTZWN1cml0eVBvbGlj
eShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgIDog
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KCZzY3JpcHRFeGVjdXRpb25Db250ZXh0KQoreworICAg
IFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBBU1NFUlQoc2VjdXJpdHlPcmlnaW4pOworICAgIG1fc2Vs
ZlNvdXJjZVByb3RvY29sID0gc2VjdXJpdHlPcmlnaW4tPnByb3RvY29sKCk7CisgICAgbV9zZWxm
U291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1BTb3VyY2U+KHRoaXMsIG1fc2VsZlNvdXJjZVBy
b3RvY29sLCBzZWN1cml0eU9yaWdpbi0+aG9zdCgpLCBzZWN1cml0eU9yaWdpbi0+cG9ydCgpLCBl
bXB0eVN0cmluZygpLCBmYWxzZSwgZmFsc2UpOworfQorCitDb250ZW50U2VjdXJpdHlQb2xpY3k6
OkNvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBVUkwmIHVybCkKIHsKKyAgICBSZWY8U2VjdXJp
dHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpOwor
ICAgIG1fc2VsZlNvdXJjZVByb3RvY29sID0gc2VjdXJpdHlPcmlnaW4tPnByb3RvY29sKCk7Cisg
ICAgbV9zZWxmU291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1BTb3VyY2U+KHRoaXMsIG1fc2Vs
ZlNvdXJjZVByb3RvY29sLCBzZWN1cml0eU9yaWdpbi0+aG9zdCgpLCBzZWN1cml0eU9yaWdpbi0+
cG9ydCgpLCBlbXB0eVN0cmluZygpLCBmYWxzZSwgZmFsc2UpOwogfQogCiBDb250ZW50U2VjdXJp
dHlQb2xpY3k6On5Db250ZW50U2VjdXJpdHlQb2xpY3koKQpAQCAtMTQwMyw3ICsxMzc5LDcgQEAg
dm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZFJlY2VpdmVIZWFkZXIoY29uc3QgU3RyaW5n
JiBoZWFkZXIsIENvbnRlbnRTZWN1cmkKICAgICAgICAgLy8gICAgICAgIF4gICAgICAgICAgICAg
ICAgICBeCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVMaXN0PiBwb2xpY3kg
PSBDU1BEaXJlY3RpdmVMaXN0OjpjcmVhdGUodGhpcywgU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAt
IGJlZ2luKSwgdHlwZSk7CiAgICAgICAgIGlmICghcG9saWN5LT5hbGxvd0V2YWwoMCwgQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlN1cHByZXNzUmVwb3J0KSkKLSAgICAg
ICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGlzYWJsZUV2YWwocG9saWN5LT5ldmFs
RGlzYWJsZWRFcnJvck1lc3NhZ2UoKSk7CisgICAgICAgICAgICBtX2xhc3RQb2xpY3lFdmFsRGlz
YWJsZWRFcnJvck1lc3NhZ2UgPSBwb2xpY3ktPmV2YWxEaXNhYmxlZEVycm9yTWVzc2FnZSgpOwog
CiAgICAgICAgIG1fcG9saWNpZXMuYXBwZW5kKHBvbGljeS5yZWxlYXNlKCkpOwogCkBAIC0xNDEy
LDYgKzEzODgsMTkgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZFJlY2VpdmVIZWFk
ZXIoY29uc3QgU3RyaW5nJiBoZWFkZXIsIENvbnRlbnRTZWN1cmkKICAgICAgICAgc2tpcEV4YWN0
bHkocG9zaXRpb24sIGVuZCwgJywnKTsKICAgICAgICAgYmVnaW4gPSBwb3NpdGlvbjsKICAgICB9
CisKKyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICBhcHBseVBvbGlj
eVRvU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCit2b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6YXBwbHlQb2xpY3lUb1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQoreworICAgIEFTU0VS
VChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgIGlmICghbV9sYXN0UG9saWN5RXZhbERp
c2FibGVkRXJyb3JNZXNzYWdlLmlzTnVsbCgpKQorICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmRpc2FibGVFdmFsKG1fbGFzdFBvbGljeUV2YWxEaXNhYmxlZEVycm9yTWVzc2FnZSk7
CisKKyAgICBpZiAobV9zYW5kYm94RmxhZ3MgIT0gU2FuZGJveE5vbmUgJiYgaXM8RG9jdW1lbnQ+
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+ZW5mb3JjZVNhbmRib3hGbGFncyhtX3NhbmRib3hGbGFncyk7CiB9CiAKIHZvaWQgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpzZXRPdmVycmlkZUFsbG93SW5saW5lU3R5bGUoYm9vbCB2YWx1
ZSkKQEAgLTE0MTksNiArMTQwOCwyMCBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6c2V0
T3ZlcnJpZGVBbGxvd0lubGluZVN0eWxlKGJvb2wgdmFsdWUpCiAgICAgbV9vdmVycmlkZUlubGlu
ZVN0eWxlQWxsb3dlZCA9IHZhbHVlOwogfQogCitib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6
dXJsTWF0Y2hlc1NlbGYoY29uc3QgVVJMJiB1cmwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Vs
ZlNvdXJjZS0+bWF0Y2hlcyh1cmwpOworfQorCitib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6
cHJvdG9jb2xNYXRjaGVzU2VsZihjb25zdCBVUkwmIHVybCkgY29uc3QKK3sKKyNpZiBFTkFCTEUo
Q1NQX05FWFQpCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1fc2VsZlNv
dXJjZVByb3RvY29sLCAiaHR0cCIpKQorICAgICAgICByZXR1cm4gdXJsLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKTsKKyNlbmRpZgorICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVy
bC5wcm90b2NvbCgpLCBtX3NlbGZTb3VyY2VQcm90b2NvbCk7Cit9CisKIHRlbXBsYXRlPGJvb2wg
KENTUERpcmVjdGl2ZUxpc3Q6OiphbGxvd2VkKShDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9y
dGluZ1N0YXR1cykgY29uc3Q+CiBib29sIGlzQWxsb3dlZEJ5QWxsKGNvbnN0IENTUERpcmVjdGl2
ZUxpc3RWZWN0b3ImIHBvbGljaWVzLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0
YXR1cyByZXBvcnRpbmdTdGF0dXMpCiB7CkBAIC0xNTc0LDI4ICsxNTc3LDExIEBAIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTRGlzcG9zaXRpb24gQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpyZWZsZWN0ZWRYCiAKIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpnYXRoZXJSZXBv
cnRVUklzKERPTVN0cmluZ0xpc3QmIGxpc3QpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRvJiBwb2xp
Y3kgOiBtX3BvbGljaWVzKQotICAgICAgICBwb2xpY3ktPmdhdGhlclJlcG9ydFVSSXMobGlzdCk7
Ci19Ci0KLVNlY3VyaXR5T3JpZ2luKiBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnNlY3VyaXR5T3Jp
Z2luKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1
cml0eU9yaWdpbigpOwotfQotCi1jb25zdCBVUkwmIENvbnRlbnRTZWN1cml0eVBvbGljeTo6dXJs
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT51cmwoKTsK
LX0KLQotVVJMIENvbnRlbnRTZWN1cml0eVBvbGljeTo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5n
JiB1cmwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Y29t
cGxldGVVUkwodXJsKTsKLX0KLQotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmVuZm9yY2VT
YW5kYm94RmxhZ3MoU2FuZGJveEZsYWdzIG1hc2spIGNvbnN0Ci17Ci0gICAgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5lbmZvcmNlU2FuZGJveEZsYWdzKG1hc2spOworICAgIEFTU0VSVChtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgIGZvciAoYXV0byYgcG9saWN5IDogbV9wb2xpY2ll
cykgeworICAgICAgICBmb3IgKGF1dG8mIHVybCA6IHBvbGljeS0+cmVwb3J0VVJJcygpKQorICAg
ICAgICAgICAgbGlzdC5hcHBlbmQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5jb21wbGV0ZVVS
TCh1cmwpLnN0cmluZygpKTsKKyAgICB9CiB9CiAKIHN0YXRpYyBTdHJpbmcgc3RyaXBVUkxGb3JV
c2VJblJlcG9ydChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFVSTCYgdXJsKQpAQCAtMTYyOSwx
MiArMTYxNSwxMiBAQCBzdGF0aWMgdm9pZCBnYXRoZXJTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2
ZW50RGF0YShTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50SQogfQogI2VuZGlmCiAKLXZvaWQg
Q29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5nJiBkaXJl
Y3RpdmVUZXh0LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSwgY29uc3QgU3RyaW5n
JiBjb25zb2xlTWVzc2FnZSwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBjb25zdCBWZWN0b3I8VVJM
PiYgcmVwb3J0VVJJcywgY29uc3QgU3RyaW5nJiBoZWFkZXIsIGNvbnN0IFN0cmluZyYgY29udGV4
dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlKSBjb25zdAordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydFZpb2xh
dGlvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQsIGNvbnN0IFN0cmluZyYgZWZmZWN0aXZl
RGlyZWN0aXZlLCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBVUkwmIGJsb2Nr
ZWRVUkwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXBvcnRVUklzLCBjb25zdCBTdHJpbmcmIGhl
YWRlciwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXIm
IGNvbnRleHRMaW5lLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpIGNvbnN0CiB7CiAgICAgbG9nVG9D
b25zb2xlKGNvbnNvbGVNZXNzYWdlLCBjb250ZXh0VVJMLCBjb250ZXh0TGluZSwgc3RhdGUpOwog
CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgc2VuZGluZyByZXBvcnRzIGZyb20gd29ya2VyLgotICAg
IGlmICghaXM8RG9jdW1lbnQ+KCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQorICAgIGlmICgh
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0IHx8ICFpczxEb2N1bWVudD4oKm1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKQEAgLTE2OTEs
NyArMTY3Nyw3IEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRWaW9sYXRpb24o
Y29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0LCBjb25zdCBTCiAgICAgUmVmUHRyPEZvcm1EYXRh
PiByZXBvcnQgPSBGb3JtRGF0YTo6Y3JlYXRlKHJlcG9ydE9iamVjdC0+dG9KU09OU3RyaW5nKCku
dXRmOCgpKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgdXJsIDogcmVwb3J0VVJJcykKLSAgICAg
ICAgUGluZ0xvYWRlcjo6c2VuZFZpb2xhdGlvblJlcG9ydCgqZnJhbWUsIHVybCwgcmVwb3J0LmNv
cHlSZWYoKSk7CisgICAgICAgIFBpbmdMb2FkZXI6OnNlbmRWaW9sYXRpb25SZXBvcnQoKmZyYW1l
LCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCksIHJlcG9ydC5jb3B5
UmVmKCkpOwogfQogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVwb3J0VW5zdXBwb3J0
ZWREaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMTc3NSwxMiArMTc2MSwx
NCBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVwb3J0TWlzc2luZ1JlcG9ydFVSSShj
b25zdCBTdHJpbmcmIHBvbGljeSkgY29uc3QKIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5Ojps
b2dUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGNvbnRleHRV
UkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE0
MzE3PiBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmxvZ1RvQ29uc29sZSBzaG91bGQgaW5jbHVkZSBh
IGNvbHVtbiBudW1iZXIKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtZXNz
YWdlLCBjb250ZXh0VVJMLCBjb250ZXh0TGluZS5vbmVCYXNlZEludCgpLCAwLCBzdGF0ZSk7Cisg
ICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVz
c2FnZUxldmVsOjpFcnJvciwgbWVzc2FnZSwgY29udGV4dFVSTCwgY29udGV4dExpbmUub25lQmFz
ZWRJbnQoKSwgMCwgc3RhdGUpOwogfQogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVw
b3J0QmxvY2tlZFNjcmlwdEV4ZWN1dGlvblRvSW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgZGlyZWN0
aXZlVGV4dCkgY29uc3QKIHsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEV4
ZWN1dGlvbkJsb2NrZWRCeUNTUChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGRpcmVjdGl2ZVRl
eHQpOworICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6c2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgZGlyZWN0aXZlVGV4dCk7CiB9CiAKIGJvb2wgQ29udGVudFNlY3VyaXR5
UG9saWN5OjpleHBlcmltZW50YWxGZWF0dXJlc0VuYWJsZWQoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuaAppbmRleCBhYjNjYjM0MmI4
NTQ1YjVhMTFlZjZmMTI3MWI1MjlkNjlmNzgyNmUzLi4yYTEzNDdmZjZhMTRhNzllNjA2MzM0MDE2
ZmEwZTI5OTg2Njk5Zjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250
ZW50U2VjdXJpdHlQb2xpY3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3kuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1
cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUg
IlNjcmlwdFN0YXRlLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlDb250ZXh0LmgiCiAjaW5jbHVkZSA8
bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtNDIsMjYgKzQzLDIxIEBAIGNsYXNzIE9yZGluYWxOdW1iZXI7CiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIENTUERpcmVjdGl2ZUxpc3Q7CitjbGFzcyBDU1BTb3VyY2U7CiBj
bGFzcyBET01TdHJpbmdMaXN0OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLWNsYXNz
IFNlY3VyaXR5T3JpZ2luOwogCi10eXBlZGVmIGludCBTYW5kYm94RmxhZ3M7CiB0eXBlZGVmIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlTGlzdD4+IENTUERpcmVjdGl2ZUxpc3RW
ZWN0b3I7CiAKIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeSB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29udGVudFNlY3VyaXR5UG9saWN5
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBleHBsaWNpdCBDb250ZW50U2VjdXJpdHlQ
b2xpY3koU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOworICAgIGV4cGxpY2l0IENvbnRlbnRTZWN1
cml0eVBvbGljeShjb25zdCBVUkwmKTsKICAgICB+Q29udGVudFNlY3VyaXR5UG9saWN5KCk7CiAK
ICAgICB2b2lkIGNvcHlTdGF0ZUZyb20oY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5Kik7CiAK
LSAgICBlbnVtIGNsYXNzIFJlcG9ydGluZ1N0YXR1cyB7Ci0gICAgICAgIFNlbmRSZXBvcnQsCi0g
ICAgICAgIFN1cHByZXNzUmVwb3J0Ci0gICAgfTsKLQogICAgIC8vIEJlIHN1cmUgdG8gdXBkYXRl
IHRoZSBiZWhhdmlvciBvZiBYU1NBdWRpdG9yOjpjb21iaW5lWFNTUHJvdGVjdGlvbkhlYWRlckFu
ZENTUCB3aGVuZXZlciB5b3UgY2hhbmdlIHRoaXMgZW51bSdzIGNvbnRlbnQgb3Igb3JkZXJpbmcu
CiAgICAgZW51bSBSZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiB7CiAgICAgICAgIFJlZmxlY3RlZFhT
U1Vuc2V0ID0gMCwKQEAgLTcwLDE4ICs2NiwyMiBAQCBwdWJsaWM6CiAgICAgICAgIEZpbHRlclJl
ZmxlY3RlZFhTUywKICAgICAgICAgQmxvY2tSZWZsZWN0ZWRYU1MKICAgICB9OworICAgIFJlZmxl
Y3RlZFhTU0Rpc3Bvc2l0aW9uIHJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uKCkgY29uc3Q7CiAKICAg
ICBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMgcmVzcG9uc2VIZWFkZXJzKCkg
Y29uc3Q7CiAgICAgdm9pZCBkaWRSZWNlaXZlSGVhZGVycyhjb25zdCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lSZXNwb25zZUhlYWRlcnMmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVIZWFkZXIoY29uc3Qg
U3RyaW5nJiwgQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZSk7CiAKKyAgICBlbnVtIGNs
YXNzIFJlcG9ydGluZ1N0YXR1cyB7CisgICAgICAgIFNlbmRSZXBvcnQsCisgICAgICAgIFN1cHBy
ZXNzUmVwb3J0CisgICAgfTsKICAgICBib29sIGFsbG93SmF2YVNjcmlwdFVSTHMoY29uc3QgU3Ry
aW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBi
b29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRp
bmdTdGF0dXM6OlNlbmRSZXBvcnQpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dJbmxpbmVFdmVudEhh
bmRsZXJzKGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVy
JiBjb250ZXh0TGluZSwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNl
LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyA9IENvbnRlbnRTZWN1cml0
eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KSBjb25zdDsKICAgICBib29sIGFs
bG93SW5saW5lU2NyaXB0KGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRp
bmFsTnVtYmVyJiBjb250ZXh0TGluZSwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGlj
eSA9IGZhbHNlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyA9IENvbnRl
bnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KSBjb25zdDsKICAg
ICBib29sIGFsbG93SW5saW5lU3R5bGUoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBX
VEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3Vy
aXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVz
ID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpIGNv
bnN0OwogICAgIGJvb2wgYWxsb3dFdmFsKEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIsIGJvb2wg
b3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpSZXBvcnRpbmdTdGF0dXMgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0
YXR1czo6U2VuZFJlcG9ydCkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd1BsdWdpblR5cGUoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHR5cGVBdHRyaWJ1dGUsIGNvbnN0IFVSTCYsIGJv
b2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgQ29udGVudFNlY3VyaXR5
UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGlu
Z1N0YXR1czo6U2VuZFJlcG9ydCkgY29uc3Q7Ci0KICAgICBib29sIGFsbG93U2NyaXB0RnJvbVNv
dXJjZShjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFs
c2UsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzID0gQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpIGNvbnN0OwogICAgIGJvb2wg
YWxsb3dPYmplY3RGcm9tU291cmNlKGNvbnN0IFVSTCYsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2Vj
dXJpdHlQb2xpY3kgPSBmYWxzZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0
dXMgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCkg
Y29uc3Q7CiAgICAgYm9vbCBhbGxvd0NoaWxkRnJhbWVGcm9tU291cmNlKGNvbnN0IFVSTCYsIGJv
b2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgQ29udGVudFNlY3VyaXR5
UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGlu
Z1N0YXR1czo6U2VuZFJlcG9ydCkgY29uc3Q7CkBAIC05Myw0MiArOTMsNTkgQEAgcHVibGljOgog
ICAgIGJvb2wgYWxsb3dGb3JtQWN0aW9uKGNvbnN0IFVSTCYsIGJvb2wgb3ZlcnJpZGVDb250ZW50
U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdT
dGF0dXMgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9y
dCkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd0Jhc2VVUkkoY29uc3QgVVJMJiwgYm9vbCBvdmVycmlk
ZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJl
cG9ydGluZ1N0YXR1cyA9IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpT
ZW5kUmVwb3J0KSBjb25zdDsKIAotICAgIFJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uIHJlZmxlY3Rl
ZFhTU0Rpc3Bvc2l0aW9uKCkgY29uc3Q7Ci0KICAgICB2b2lkIHNldE92ZXJyaWRlQWxsb3dJbmxp
bmVTdHlsZShib29sKTsKIAogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKwogICAgIHZvaWQg
Z2F0aGVyUmVwb3J0VVJJcyhET01TdHJpbmdMaXN0JikgY29uc3Q7CiAKKyAgICBTdHJpbmcgZXZh
bERpc2FibGVkRXJyb3JNZXNzYWdlKCkgY29uc3Q7CisKKyAgICBib29sIGV4cGVyaW1lbnRhbEZl
YXR1cmVzRW5hYmxlZCgpIGNvbnN0OworCisgICAgc3RhdGljIGJvb2wgc2hvdWxkQnlwYXNzTWFp
bldvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKKwor
ICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IGludGVybmFsIGRhdGEg
c3RydWN0dXJlcyB0byBjYWxsYmFjayBpbnRvIHRoaXMgb2JqZWN0IHdoZW4gcGFyc2luZywgdmFs
aWRhdGluZywKKyAgICAvLyBhbmQgYXBwbHlpbmcgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeS4K
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhlIHZhcmlvdXMgZGlyZWN0aXZlcyBzZXJ2
ZSBvbmx5IGFzIHN0YXRlIHN0b3JlcyBmb3IgdGhlIHBhcnNlZCBwb2xpY3kgYW5kIHJlbW92ZSB0
aGVzZSBmdW5jdGlvbnMuCisgICAgLy8gVGhpcyBjbGFzcyBzaG91bGQgdHJhdmVyc2UgdGhlIGRp
cmVjdGl2ZXMsIHZhbGlkYXRpbmcgdGhlIHBvbGljeSwgYW5kIGFwcGx5aW5nIGl0IHRvIHRoZSBz
Y3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuCisKKyAgICAvLyBVc2VkIGJ5IE1lZGlhTGlzdERpcmVj
dGl2ZQorICAgIHZvaWQgcmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKGNvbnN0IFN0cmluZyYpIGNv
bnN0OworCisgICAgLy8gVXNlZCBieSBDU1BTb3VyY2VMaXN0CiAgICAgdm9pZCByZXBvcnREaXJl
Y3RpdmVBc1NvdXJjZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVOYW1lLCBjb25z
dCBTdHJpbmcmIHNvdXJjZUV4cHJlc3Npb24pIGNvbnN0OworICAgIHZvaWQgcmVwb3J0SW52YWxp
ZFBhdGhDaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVOYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBjb25zdCBjaGFyKSBjb25zdDsKKyAgICB2b2lkIHJlcG9ydEludmFsaWRTb3VyY2VF
eHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2UpIGNvbnN0OworICAgIGJvb2wgdXJsTWF0Y2hlc1NlbGYoY29uc3QgVVJMJikgY29uc3Q7CisK
KyAgICAvLyBVc2VkIGJ5IENTUERpcmVjdGl2ZUxpc3QKICAgICB2b2lkIHJlcG9ydER1cGxpY2F0
ZURpcmVjdGl2ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2b2lkIHJlcG9ydEludmFsaWRE
aXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZU5hbWUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpIGNvbnN0OwotICAgIHZvaWQgcmVwb3J0SW52YWxpZFBhdGhDaGFyYWN0
ZXIoY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBjaGFyKSBjb25zdDsKLSAgICB2b2lkIHJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhjb25zdCBT
dHJpbmcmKSBjb25zdDsKICAgICB2b2lkIHJlcG9ydEludmFsaWRTYW5kYm94RmxhZ3MoY29uc3Qg
U3RyaW5nJikgY29uc3Q7Ci0gICAgdm9pZCByZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lvbihj
b25zdCBTdHJpbmcmIGRpcmVjdGl2ZU5hbWUsIGNvbnN0IFN0cmluZyYgc291cmNlKSBjb25zdDsK
ICAgICB2b2lkIHJlcG9ydEludmFsaWRSZWZsZWN0ZWRYU1MoY29uc3QgU3RyaW5nJikgY29uc3Q7
CiAgICAgdm9pZCByZXBvcnRNaXNzaW5nUmVwb3J0VVJJKGNvbnN0IFN0cmluZyYpIGNvbnN0Owog
ICAgIHZvaWQgcmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoY29uc3QgU3RyaW5nJikgY29uc3Q7
Ci0gICAgdm9pZCByZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0LCBj
b25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVz
c2FnZSwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBjb25zdCBWZWN0b3I8VVJMPiYgcmVwb3J0VVJJ
cywgY29uc3QgU3RyaW5nJiBoZWFkZXIsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCA9IFN0cmlu
ZygpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lID0gV1RGOjpPcmRpbmFs
TnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBKU0M6OkV4ZWNTdGF0ZSogPSBudWxscHRyKSBjb25zdDsK
LQotICAgIHZvaWQgcmVwb3J0QmxvY2tlZFNjcmlwdEV4ZWN1dGlvblRvSW5zcGVjdG9yKGNvbnN0
IFN0cmluZyYgZGlyZWN0aXZlVGV4dCkgY29uc3Q7CisgICAgdm9pZCByZXBvcnRWaW9sYXRpb24o
Y29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVj
dGl2ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgVVJMJiBibG9ja2VkVVJM
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVwb3J0VVJJcywgY29uc3QgU3RyaW5nJiBoZWFkZXIs
IGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCA9IFN0cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxO
dW1iZXImIGNvbnRleHRMaW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBK
U0M6OkV4ZWNTdGF0ZSogPSBudWxscHRyKSBjb25zdDsKIAotICAgIGNvbnN0IFVSTCYgdXJsKCkg
Y29uc3Q7Ci0gICAgVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgIFNl
Y3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0OwogICAgIHZvaWQgZW5mb3JjZVNh
bmRib3hGbGFncyhTYW5kYm94RmxhZ3MpIGNvbnN0OwotICAgIFN0cmluZyBldmFsRGlzYWJsZWRF
cnJvck1lc3NhZ2UoKSBjb25zdDsKKyAgICB2b2lkIHJlcG9ydEJsb2NrZWRTY3JpcHRFeGVjdXRp
b25Ub0luc3BlY3Rvcihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpIGNvbnN0OworICAgIHZv
aWQgZW5mb3JjZVNhbmRib3hGbGFncyhTYW5kYm94RmxhZ3Mgc2FuZGJveEZsYWdzKSB7IG1fc2Fu
ZGJveEZsYWdzIHw9IHNhbmRib3hGbGFnczsgfQogCi0gICAgYm9vbCBleHBlcmltZW50YWxGZWF0
dXJlc0VuYWJsZWQoKSBjb25zdDsKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRCeXBhc3NNYWluV29y
bGRDb250ZW50U2VjdXJpdHlQb2xpY3koU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOworICAgIC8v
IFVzZWQgYnkgQ1NQU291cmNlCisgICAgYm9vbCBwcm90b2NvbE1hdGNoZXNTZWxmKGNvbnN0IFVS
TCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZvaWQgbG9nVG9Db25zb2xlKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMID0gU3RyaW5nKCksIGNvbnN0IFdU
Rjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUgPSBXVEY6Ok9yZGluYWxOdW1iZXI6OmJlZm9y
ZUZpcnN0KCksIEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIpIGNvbnN0OworICAgIHZvaWQgYXBw
bHlQb2xpY3lUb1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIAotICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBib29sIG1fb3ZlcnJpZGVJ
bmxpbmVTdHlsZUFsbG93ZWQ7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0IHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1BTb3Vy
Y2U+IG1fc2VsZlNvdXJjZTsKKyAgICBTdHJpbmcgbV9zZWxmU291cmNlUHJvdG9jb2w7CiAgICAg
Q1NQRGlyZWN0aXZlTGlzdFZlY3RvciBtX3BvbGljaWVzOworICAgIFN0cmluZyBtX2xhc3RQb2xp
Y3lFdmFsRGlzYWJsZWRFcnJvck1lc3NhZ2U7CisgICAgU2FuZGJveEZsYWdzIG1fc2FuZGJveEZs
YWdzIHsgU2FuZGJveE5vbmUgfTsKKyAgICBib29sIG1fb3ZlcnJpZGVJbmxpbmVTdHlsZUFsbG93
ZWQgeyBmYWxzZSB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckds
b2JhbFNjb3BlLmNwcAppbmRleCBkZmVkMjVkZWUzODdkM2I3YWI2OGQ4OGYwYzhmZDI1NmYxZjkw
NWUyLi5hMDc1ZmIwYWZmYzFlOGZiMWE5NmY3NTUzMTdiYjE4NjhiNjFlNGQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcApAQCAtNzEsOCArNzEsOCBA
QCBXb3JrZXJHbG9iYWxTY29wZTo6V29ya2VyR2xvYmFsU2NvcGUoY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgdXNlckFnZW50LCBXbwogICAgICwgbV9ldmVudFF1ZXVlKCp0aGlzKQogICAg
ICwgbV90b3BPcmlnaW4odG9wT3JpZ2luKQogewotICAgIHNldENvbnRlbnRTZWN1cml0eVBvbGlj
eShzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRTZWN1cml0eVBvbGljeT4odGhpcykpOwogICAgIHNl
dFNlY3VyaXR5T3JpZ2luUG9saWN5KFNlY3VyaXR5T3JpZ2luUG9saWN5OjpjcmVhdGUoU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZSh1cmwpKSk7CisgICAgc2V0Q29udGVudFNlY3VyaXR5UG9saWN5KHN0
ZDo6bWFrZV91bmlxdWU8Q29udGVudFNlY3VyaXR5UG9saWN5PigqdGhpcykpOwogfQogCiBXb3Jr
ZXJHbG9iYWxTY29wZTo6fldvcmtlckdsb2JhbFNjb3BlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270396</attachid>
            <date>2016-02-01 09:59:53 -0800</date>
            <delta_ts>2016-02-01 20:49:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153748-20160201095929.patch</filename>
            <type>text/plain</type>
            <size>29443</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1OTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmFhZjRhNjQ3ZDRiMDA4
ZDUwMWUxNTNmZTRhMDM1MjVhM2QzYjBkNy4uMTVmNTgwNDBhOWIzNTgwMWRhN2ViY2NiNzJlYTVm
NGU3YTY4ZmFlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE2LTAyLTAxICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBDU1A6IFN1cHBvcnQgY2hl
Y2tpbmcgY29udGVudCBzZWN1cml0eSBwb2xpY3kgd2l0aG91dCBhIHNjcmlwdCBleGVjdXRpb24g
Y29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUzNzQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDQzOTE0OT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUb3dhcmRzIGNoZWNraW5nIGEgV2Vi
IFdvcmtlcidzIGNvbnRlbnQgc2VjdXJpdHkgcG9saWN5IGFnYWluc3QgYSByZWRpcmVjdGVkIHdv
cmtlcgorICAgICAgICBzY3JpcHQgbG9hZCBvciByZWRpcmVjdGVkIFhIUiByZXF1ZXN0IGZvciBh
biBYSFIgcmVxdWVzdCBpbml0aWF0ZWQgZnJvbSBpdCwgd2Ugc2hvdWxkCisgICAgICAgIHN1cHBv
cnQgaW5zdGFudGlhdGluZyBhIENvbnRlbnRTZWN1cml0eVBvbGljeSBvYmplY3Qgd2l0aG91dCBh
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQpOiBQYXNzIHx0
aGlzfCBhcyBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGFzIGEgcG9pbnRlci4KKyAgICAgICAgKiBw
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NQ
U291cmNlOjpzY2hlbWVNYXRjaGVzKTogTW92ZSBsb2dpYyBmb3IgY2hlY2tpbmcgdGhlIHByb3Rv
Y29sIG9mIHNvdXJjZSAic2VsZiIgZnJvbQorICAgICAgICBoZXJlIHRvIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6cHJvdG9jb2xNYXRjaGVzU2VsZigpIGJlY2F1c2Ugd2UgbWF5IG5vdCBoYXZlIGEg
c2VjdXJpdHkgb3JpZ2luCisgICAgICAgIGlmIENvbnRlbnRTZWN1cml0eVBvbGljeSB3YXMgaW5p
dGlhdGVkIHdpdGhvdXQgYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG9iamVjdC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6OmFsbG93U2VsZik6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NQU291cmNlTGlzdDo6Q1NQU291cmNlTGlzdCk6IFJlbW92ZSBmaWVsZHMgZnJvbSBt
ZW1iZXIgaW5pdGlhbGl6YXRpb24gbGlzdCB0aGF0IGNhbgorICAgICAgICBiZSBpbml0aWFsaXpl
ZCB1c2luZyBDKysxMSBpbi1jbGFzcyBpbml0aWFsaXphdGlvbiBzeW50YXguCisgICAgICAgIChX
ZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjptYXRjaGVzKTogQ2FsbCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OnVybE1hdGNoZXNTZWxmKCkgdG8gbWF0Y2ggdGhlCisgICAgICAgIGVmZmVjdGl2ZSBVUkwg
YWdhaW5zdCB0aGUgVVJMIG9mIHNvdXJjZSAic2VsZiIuCisgICAgICAgIChXZWJDb3JlOjpDU1BT
b3VyY2VMaXN0OjpwYXJzZVNvdXJjZSk6IFNpbXBsaWZ5IGNvZGUgYnkgc2V0dGluZyBpbnRlcm5h
bCBtZW1iZXIgZmllbGRzIGRpcmVjdGx5CisgICAgICAgIGluc3RlYWQgb2YgdmlhIG1lbWJlciBm
dW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VMaXN0RGlyZWN0aXZlOjphbGxvd3Mp
OiBXcml0ZSBpbiB0ZXJtcyBvZiBDU1BTb3VyY2VMaXN0OjphbGxvd1NlbGYoKSBiZWNhdXNlIHdl
CisgICAgICAgIG1heSBub3QgaGF2ZSBhIHNlY3VyaXR5IG9yaWdpbiB0byBnZXQgYSBVUkwgZnJv
bSBpZiBDb250ZW50U2VjdXJpdHlQb2xpY3kgd2FzIGluaXRpYXRlZCB3aXRob3V0CisgICAgICAg
IGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBvYmplY3QuCisgICAgICAgIChXZWJDb3JlOjpDU1BE
aXJlY3RpdmVMaXN0OjpyZXBvcnRVUklzKTogQ2hhbmdlIHJldHVybiB0eXBlIGZyb20gVmVjdG9y
PFVSTD4gdG8gVmVjdG9yPFN0cmluZz4KKyAgICAgICAgVGhlIGNhbGxlciB3aWxsIGNvbnZlcnQg
dGhlIHN0cmluZ3MgdG8gVVJMcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHNjcmlwdCBleGVjdXRpb24g
Y29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVwb3J0
VVJJKTogU3RvcmUgdGhlIHJlcG9ydCBVUkkgYXMgYSBzdHJpbmcgaW5zdGVhZCBvZiBhIFVSTAor
ICAgICAgICBiZWNhdXNlIHdlIG1heSBub3QgaGF2ZSBhIHNlY3VyaXR5IG9yaWdpbiB0byBjb21w
dXRlIHRoZSBhYnNvbHV0ZSBVUkwgaWYgQ29udGVudFNlY3VyaXR5UG9saWN5CisgICAgICAgIHdh
cyBpbml0aWF0ZWQgd2l0aG91dCBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgb2JqZWN0LgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpDb250ZW50U2VjdXJpdHlQb2xp
Y3kpOiBNb2RpZmllZCB0byB0YWtlIHRoZSBTY3JpcHRFeGVjdXRpb25PYmplY3QKKyAgICAgICAg
YXMgYSByZWZlcmVuY2UgYW5kIGNvbXB1dGUgdGhlIENTUFNvdXJjZSBvYmplY3QgZm9yICJzZWxm
IiBhbmQgY2FjaGUgdGhlIHByb3RvY29sIGZvciAic2VsZiIuIFJlbW92ZWQKKyAgICAgICAgZmll
bGQgbV9vdmVycmlkZUlubGluZVN0eWxlQWxsb3dlZCBmcm9tIHRoZSBtZW1iZXIgaW5pdGlhbGl6
YXRpb24gbGlzdCBhbmQgdXNlZCBDKysxMSBpbi1jbGFzcworICAgICAgICBpbml0aWFsaXphdGlv
biBzeW50YXggdG8gaW5pdGlhbGl6ZSBpdC4gQWRkZWQgb3ZlcmxvYWRlZCBjb25zdHJ1Y3RvciB0
aGF0IHRha2VzIGEgVVJMIG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0
eVBvbGljeTo6ZGlkUmVjZWl2ZUhlYWRlcik6IFN0b3JlIHRoZSBldmFsIGRpc2FibGVkIGVycm9y
IG1lc3NhZ2UgZm9yCisgICAgICAgIHRoZSBsYXN0IHBhcnNlZCBwb2xpY3kgaW4gYSBtZW1iZXIg
ZmllbGQgaW5zdGVhZCBvZiB1c2luZyBpdCBhcyBwYXJ0IG9mIGRpc2FibGluZyBldmFsIGV4ZWN1
dGlvbgorICAgICAgICBvbiB0aGUgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IGJlY2F1c2Ugd2Ug
bWF5IG5vdCBoYXZlIHN1Y2ggYSBjb250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNl
Y3VyaXR5UG9saWN5OjphcHBseVBvbGljeVRvU2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6IEFwcGxp
ZXMgdGhlIGNvbnRlbnQgc2VjdXJpdHkKKyAgICAgICAgcG9saWN5IGV2YWwgYW5kIHNhbmRib3gg
cmVzdHJpY3Rpb25zIHRvIHRoZSBzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuCisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OnVybE1hdGNoZXNTZWxmKTogTWF0Y2ggdGhl
IHNwZWNpZmllZCBVUkwgYWdhaW5zdCB0aGUgVVJMIGZvcgorICAgICAgICBzb3VyY2UgInNlbGYi
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojpwcm90b2NvbE1hdGNo
ZXNTZWxmKTogTWF0Y2ggdGhlIHByb3RvY29sIG9mIHRoZSBzcGVjaWZpZWQgVVJMCisgICAgICAg
IGFnYWluc3QgdGhlIHByb3RvY29sIGZvciBzb3VyY2UgInNlbGYiLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpnYXRoZXJSZXBvcnRVUklzKTogTW9kaWZpZWQgdG8g
dXNlIHRoZSBzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQKKyAgICAgICAgdG8gY29tcHV0ZSB0aGUg
YWJzb2x1dGUgVVJMIGZvciBlYWNoIHJlcG9ydCBVUkkuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydFZpb2xhdGlvbik6IEJhaWwgb3V0IGlmIHdlIGRvIG5v
dCBoYXZlIGEgc2NyaXB0IGV4ZWN1dGlvbgorICAgICAgICBjb250ZXh0LgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojpsb2dUb0NvbnNvbGUpOiBPbmx5IGxvZyB0byB0
aGUgY29uc29sZSBpZiB3ZSBoYXZlIGEgc2NyaXB0CisgICAgICAgIGV4ZWN1dGlvbiBjb250ZXh0
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRCbG9ja2Vk
U2NyaXB0RXhlY3V0aW9uVG9JbnNwZWN0b3IpOiBPbmx5IHJlcG9ydCBibG9ja2VkCisgICAgICAg
IHNjcmlwdCBleGVjdXRpb24gdG8gdGhlIFdlYiBJbnNwZWN0b3IgaWYgd2UgaGF2ZSBhIHNjcmlw
dCBleGVjdXRpb24gY29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6OmFk
ZFNvdXJjZVNlbGYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlTGlzdDo6
YWRkU291cmNlU3Rhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0
OjphZGRTb3VyY2VVbnNhZmVJbmxpbmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQ
U291cmNlTGlzdDo6YWRkU291cmNlVW5zYWZlRXZhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpnYXRoZXJSZXBvcnRVUklzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6c2VjdXJpdHlPcmlnaW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojp1cmwpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojpjb21wbGV0ZVVS
TCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmVu
Zm9yY2VTYW5kYm94RmxhZ3MpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRT
ZWN1cml0eVBvbGljeS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5
OjplbmZvcmNlU2FuZGJveEZsYWdzKTogQWNjdW11bGF0ZXMgdGhlIHBhcnNlZCBzYW5kYm94IGZs
YWdzLiBXZQorICAgICAgICB3aWxsIGFwcGx5IHRoZSBzYW5kYm94IGZsYWdzIGluIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6YXBwbHlQb2xpY3lUb1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS4KKyAg
ICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Oldvcmtlckdsb2JhbFNjb3BlOjpXb3JrZXJHbG9iYWxTY29wZSk6IFN3YXAgdGhlIG9yZGVyIG9m
IENvbnRlbnRTZWN1cml0eVBvbGljeSBhbmQgU2VjdXJpdHlPcmlnaW5Qb2xpY3kKKyAgICAgICAg
Y3JlYXRpb24gc3VjaCB0aGF0IHdlIGNyZWF0ZSBTZWN1cml0eU9yaWdpblBvbGljeSBhbmQgU2Vj
dXJpdHlPcmlnaW4gb2JqZWN0cyBiZWZvcmUgY3JlYXRpbmcgYSBDb250ZW50U2VjdXJpdHlQb2xp
Y3kKKyAgICAgICAgb2JqZWN0IGFzIENvbnRlbnRTZWN1cml0eVBvbGljeSBkZXBlbmRzIG9uIHRo
ZSBleGlzdGVuY2Ugb2YgYSBTZWN1cml0eU9yaWdpbiB3aGVuIGluc3RhbnRpYXRlZCB3aXRoIGEg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC4KKwogMjAxNi0wMi0wMSAgRGFuIEJlcm5zdGVpbiAgPG1p
dHpAYXBwbGUuY29tPgogCiAgICAgICAgIFRyaWVkIHRvIGZpeCBhIGJ1aWxkIGFmdGVyIHIxOTU4
OTkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAxMTU5MWQ3ZWQ0NjcwZjVmNzkyZjNlYWRh
ODFmMTliZWE1NTM4Y2FkLi41YzVhNTI5YmY0YzczNDVmZjRkNjg0MTdjMjU2YmNkNzk5MzA3ZTdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTUxMjgsNyArNTEyOCw3IEBAIHZvaWQgRG9j
dW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQoKQogICAgICAgICAvLyBUaGlzIGNhbiBvY2N1ciB2
aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoKS4KICAgICAgICAgc2V0
Q29va2llVVJMKFVSTChQYXJzZWRVUkxTdHJpbmcsIGVtcHR5U3RyaW5nKCkpKTsKICAgICAgICAg
c2V0U2VjdXJpdHlPcmlnaW5Qb2xpY3koU2VjdXJpdHlPcmlnaW5Qb2xpY3k6OmNyZWF0ZShTZWN1
cml0eU9yaWdpbjo6Y3JlYXRlVW5pcXVlKCkpKTsKLSAgICAgICAgc2V0Q29udGVudFNlY3VyaXR5
UG9saWN5KHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudFNlY3VyaXR5UG9saWN5Pih0aGlzKSk7Cisg
ICAgICAgIHNldENvbnRlbnRTZWN1cml0eVBvbGljeShzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRT
ZWN1cml0eVBvbGljeT4oKnRoaXMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTE0
MSw3ICs1MTQxLDcgQEAgdm9pZCBEb2N1bWVudDo6aW5pdFNlY3VyaXR5Q29udGV4dCgpCiAgICAg
ICAgIGFwcGx5Q29udGVudERpc3Bvc2l0aW9uQXR0YWNobWVudFNhbmRib3goKTsKIAogICAgIHNl
dFNlY3VyaXR5T3JpZ2luUG9saWN5KFNlY3VyaXR5T3JpZ2luUG9saWN5OjpjcmVhdGUoaXNTYW5k
Ym94ZWQoU2FuZGJveE9yaWdpbikgPyBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlVW5pcXVlKCkgOiBT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1fdXJsKSkpOwotICAgIHNldENvbnRlbnRTZWN1cml0eVBv
bGljeShzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRTZWN1cml0eVBvbGljeT4odGhpcykpOworICAg
IHNldENvbnRlbnRTZWN1cml0eVBvbGljeShzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRTZWN1cml0
eVBvbGljeT4oKnRoaXMpKTsKIAogICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSB0aGlzLT5z
ZXR0aW5ncygpKSB7CiAgICAgICAgIGlmICghc2V0dGluZ3MtPndlYlNlY3VyaXR5RW5hYmxlZCgp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
LmNwcAppbmRleCA1OTY1ZGJmZjc1YjBmNzkyZWUzZjU3MDBhYzRkMjI5ZDM3YmY4MTQxLi44N2E1
NDY0OGY2NGUxYzIxN2MyZTZkOTlmOGNlMGE1MTM0NWNkNjg0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKQEAgLTM4LDcgKzM4LDYg
QEAKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1l
UmVnaXN0cnkuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2Ny
aXB0U3RhdGUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKQEAg
LTIzOCwxNCArMjM3LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIHNjaGVtZU1hdGNo
ZXMoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAobV9zY2hlbWUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJvdGVjdGVkUmVzb3VyY2VTY2hlbWUobV9w
b2xpY3ktPnNlY3VyaXR5T3JpZ2luKCktPnByb3RvY29sKCkpOwotI2lmIEVOQUJMRShDU1BfTkVY
VCkKLSAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90ZWN0
ZWRSZXNvdXJjZVNjaGVtZSwgImh0dHAiKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnBy
b3RvY29sSXNJbkhUVFBGYW1pbHkoKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIGVxdWFs
SWdub3JpbmdBU0NJSUNhc2UodXJsLnByb3RvY29sKCksIHByb3RlY3RlZFJlc291cmNlU2NoZW1l
KTsKLSAgICAgICAgfQorICAgICAgICBpZiAobV9zY2hlbWUuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuIG1fcG9saWN5LT5wcm90b2NvbE1hdGNoZXNTZWxmKHVybCk7CiAgICAgICAgIHJl
dHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVybC5wcm90b2NvbCgpLCBtX3NjaGVtZSk7CiAg
ICAgfQogCkBAIC0zMTAsNiArMzAzLDcgQEAgcHVibGljOgogICAgIGJvb2wgbWF0Y2hlcyhjb25z
dCBVUkwmKTsKICAgICBib29sIGFsbG93SW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0lu
bGluZTsgfQogICAgIGJvb2wgYWxsb3dFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0V2YWw7
IH0KKyAgICBib29sIGFsbG93U2VsZigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTZWxmOyB9CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFy
KiBlbmQpOwpAQCAtMzIwLDI1ICszMTQsMTggQEAgcHJpdmF0ZToKICAgICBib29sIHBhcnNlUG9y
dChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIGludCYgcG9ydCwgYm9vbCYg
cG9ydEhhc1dpbGRjYXJkKTsKICAgICBib29sIHBhcnNlUGF0aChjb25zdCBVQ2hhciogYmVnaW4s
IGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgcGF0aCk7CiAKLSAgICB2b2lkIGFkZFNvdXJjZVNl
bGYoKTsKLSAgICB2b2lkIGFkZFNvdXJjZVN0YXIoKTsKLSAgICB2b2lkIGFkZFNvdXJjZVVuc2Fm
ZUlubGluZSgpOwotICAgIHZvaWQgYWRkU291cmNlVW5zYWZlRXZhbCgpOwotCiAgICAgQ29udGVu
dFNlY3VyaXR5UG9saWN5KiBtX3BvbGljeTsKICAgICBWZWN0b3I8Q1NQU291cmNlPiBtX2xpc3Q7
CiAgICAgU3RyaW5nIG1fZGlyZWN0aXZlTmFtZTsKLSAgICBib29sIG1fYWxsb3dTdGFyOwotICAg
IGJvb2wgbV9hbGxvd0lubGluZTsKLSAgICBib29sIG1fYWxsb3dFdmFsOworICAgIGJvb2wgbV9h
bGxvd1NlbGYgeyBmYWxzZSB9OworICAgIGJvb2wgbV9hbGxvd1N0YXIgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9hbGxvd0lubGluZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2FsbG93RXZhbCB7IGZh
bHNlIH07CiB9OwogCiBDU1BTb3VyY2VMaXN0OjpDU1BTb3VyY2VMaXN0KENvbnRlbnRTZWN1cml0
eVBvbGljeSogcG9saWN5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZU5hbWUpCiAgICAgOiBtX3Bv
bGljeShwb2xpY3kpCiAgICAgLCBtX2RpcmVjdGl2ZU5hbWUoZGlyZWN0aXZlTmFtZSkKLSAgICAs
IG1fYWxsb3dTdGFyKGZhbHNlKQotICAgICwgbV9hbGxvd0lubGluZShmYWxzZSkKLSAgICAsIG1f
YWxsb3dFdmFsKGZhbHNlKQogewogfQogCkBAIC0zNTgsNiArMzQ1LDkgQEAgYm9vbCBDU1BTb3Vy
Y2VMaXN0OjptYXRjaGVzKGNvbnN0IFVSTCYgdXJsKQogCiAgICAgVVJMIGVmZmVjdGl2ZVVSTCA9
IFNlY3VyaXR5T3JpZ2luOjpzaG91bGRVc2VJbm5lclVSTCh1cmwpID8gU2VjdXJpdHlPcmlnaW46
OmV4dHJhY3RJbm5lclVSTCh1cmwpIDogdXJsOwogCisgICAgaWYgKG1fYWxsb3dTZWxmICYmIG1f
cG9saWN5LT51cmxNYXRjaGVzU2VsZihlZmZlY3RpdmVVUkwpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKwogICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2xpc3QpIHsKICAgICAgICAgaWYgKGVudHJ5
Lm1hdGNoZXMoZWZmZWN0aXZlVVJMKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDE1
LDIyICs0MDUsMjIgQEAgYm9vbCBDU1BTb3VyY2VMaXN0OjpwYXJzZVNvdXJjZShjb25zdCBVQ2hh
ciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgc2MKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2luID09ICcqJykgewotICAg
ICAgICBhZGRTb3VyY2VTdGFyKCk7CisgICAgICAgIG1fYWxsb3dTdGFyID0gdHJ1ZTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIidzZWxmJyIpKSB7Ci0gICAgICAgIGFkZFNvdXJj
ZVNlbGYoKTsKKyAgICAgICAgbV9hbGxvd1NlbGYgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4s
IGVuZCAtIGJlZ2luLCAiJ3Vuc2FmZS1pbmxpbmUnIikpIHsKLSAgICAgICAgYWRkU291cmNlVW5z
YWZlSW5saW5lKCk7CisgICAgICAgIG1fYWxsb3dJbmxpbmUgPSB0cnVlOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
YmVnaW4sIGVuZCAtIGJlZ2luLCAiJ3Vuc2FmZS1ldmFsJyIpKSB7Ci0gICAgICAgIGFkZFNvdXJj
ZVVuc2FmZUV2YWwoKTsKKyAgICAgICAgbV9hbGxvd0V2YWwgPSB0cnVlOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTYzMCwyNiArNjIwLDYgQEAgYm9vbCBDU1BTb3VyY2VMaXN0
OjpwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBpbnQmIHBv
cnQsIGIKICAgICByZXR1cm4gb2s7CiB9CiAKLXZvaWQgQ1NQU291cmNlTGlzdDo6YWRkU291cmNl
U2VsZigpCi17Ci0gICAgbV9saXN0LmFwcGVuZChDU1BTb3VyY2UobV9wb2xpY3ksIG1fcG9saWN5
LT5zZWN1cml0eU9yaWdpbigpLT5wcm90b2NvbCgpLCBtX3BvbGljeS0+c2VjdXJpdHlPcmlnaW4o
KS0+aG9zdCgpLCBtX3BvbGljeS0+c2VjdXJpdHlPcmlnaW4oKS0+cG9ydCgpLCBTdHJpbmcoKSwg
ZmFsc2UsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgQ1NQU291cmNlTGlzdDo6YWRkU291cmNlU3Rhcigp
Ci17Ci0gICAgbV9hbGxvd1N0YXIgPSB0cnVlOwotfQotCi12b2lkIENTUFNvdXJjZUxpc3Q6OmFk
ZFNvdXJjZVVuc2FmZUlubGluZSgpCi17Ci0gICAgbV9hbGxvd0lubGluZSA9IHRydWU7Ci19Ci0K
LXZvaWQgQ1NQU291cmNlTGlzdDo6YWRkU291cmNlVW5zYWZlRXZhbCgpCi17Ci0gICAgbV9hbGxv
d0V2YWwgPSB0cnVlOwotfQotCiBjbGFzcyBDU1BEaXJlY3RpdmUgewogcHVibGljOgogICAgIENT
UERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIENvbnRl
bnRTZWN1cml0eVBvbGljeSogcG9saWN5KQpAQCAtNzU4LDcgKzcyOCwxMCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGFsbG93cyhjb25zdCBVUkwmIHVybCkKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X3NvdXJjZUxpc3QubWF0Y2hlcyh1cmwuaXNFbXB0eSgpID8gcG9saWN5KCktPnVybCgpIDogdXJs
KTsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSByZXR1cm5pbmcgZmFs
c2UgZm9yIGFuIGVtcHR5IFVSTC4KKyAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gbV9zb3VyY2VMaXN0LmFsbG93U2VsZigpOworICAgICAgICByZXR1cm4gbV9z
b3VyY2VMaXN0Lm1hdGNoZXModXJsKTsKICAgICB9CiAKICAgICBib29sIGFsbG93SW5saW5lKCkg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2VMaXN0LmFsbG93SW5saW5lKCk7IH0KQEAgLTc5NSwxMSAr
NzY4LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGFsbG93Rm9ybUFjdGlvbihjb25zdCBVUkwmLCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7CiAgICAgYm9vbCBh
bGxvd0Jhc2VVUkkoY29uc3QgVVJMJiwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdT
dGF0dXMpIGNvbnN0OwogCi0gICAgdm9pZCBnYXRoZXJSZXBvcnRVUklzKERPTVN0cmluZ0xpc3Qm
KSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcmIGV2YWxEaXNhYmxlZEVycm9yTWVzc2FnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlOyB9CiAgICAgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpSZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiByZWZsZWN0ZWRYU1NEaXNwb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVmbGVjdGVkWFNTRGlzcG9zaXRpb247IH0KICAgICBi
b29sIGlzUmVwb3J0T25seSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0T25seTsgfQotICAgIGNv
bnN0IFZlY3RvcjxVUkw+JiByZXBvcnRVUklzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBvcnRVUklz
OyB9CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcG9ydFVSSXMoKSBjb25zdCB7IHJldHVy
biBtX3JlcG9ydFVSSXM7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlKGNvbnN0IFN0cmlu
ZyYpOwpAQCAtODU0LDcgKzgyNiw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNv
dXJjZUxpc3REaXJlY3RpdmU+IG1fc2NyaXB0U3JjOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3Vy
Y2VMaXN0RGlyZWN0aXZlPiBtX3N0eWxlU3JjOwogCi0gICAgVmVjdG9yPFVSTD4gbV9yZXBvcnRV
UklzOworICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVwb3J0VVJJczsKIAogICAgIFN0cmluZyBtX2V2
YWxEaXNhYmxlZEVycm9yTWVzc2FnZTsKIH07CkBAIC0xMTEzLDEyICsxMDg1LDYgQEAgYm9vbCBD
U1BEaXJlY3RpdmVMaXN0OjphbGxvd0Nvbm5lY3RUb1NvdXJjZShjb25zdCBVUkwmIHVybCwgQ29u
dGVudFNlY3VyaXR5UG9saWMKICAgICAgICAgKG1fcmVwb3J0T25seSB8fCBjaGVja1NvdXJjZShv
cGVyYXRpdmVEaXJlY3RpdmUobV9jb25uZWN0U3JjLmdldCgpKSwgdXJsKSk7CiB9CiAKLXZvaWQg
Q1NQRGlyZWN0aXZlTGlzdDo6Z2F0aGVyUmVwb3J0VVJJcyhET01TdHJpbmdMaXN0JiBsaXN0KSBj
b25zdAotewotICAgIGZvciAoYXV0byYgdXJpIDogbV9yZXBvcnRVUklzKQotICAgICAgICBsaXN0
LmFwcGVuZCh1cmkuc3RyaW5nKCkpOwotfQotCiBib29sIENTUERpcmVjdGl2ZUxpc3Q6OmFsbG93
Rm9ybUFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRp
bmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAogewogICAgIHJldHVybiByZXBvcnRpbmdT
dGF0dXMgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBv
cnQgPwpAQCAtMTIzNSw3ICsxMjAxLDcgQEAgdm9pZCBDU1BEaXJlY3RpdmVMaXN0OjpwYXJzZVJl
cG9ydFVSSShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKICAgICAg
ICAgaWYgKHVybEJlZ2luIDwgcG9zaXRpb24pIHsKICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBT
dHJpbmcodXJsQmVnaW4sIHBvc2l0aW9uIC0gdXJsQmVnaW4pOwotICAgICAgICAgICAgbV9yZXBv
cnRVUklzLmFwcGVuZChtX3BvbGljeS0+Y29tcGxldGVVUkwodXJsKSk7CisgICAgICAgICAgICBt
X3JlcG9ydFVSSXMuYXBwZW5kKHVybCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xMzU0LDEw
ICsxMzIwLDIwIEBAIHZvaWQgQ1NQRGlyZWN0aXZlTGlzdDo6YWRkRGlyZWN0aXZlKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgbV9wb2xpY3ktPnJlcG9y
dFVuc3VwcG9ydGVkRGlyZWN0aXZlKG5hbWUpOwogfQogCi1Db250ZW50U2VjdXJpdHlQb2xpY3k6
OkNvbnRlbnRTZWN1cml0eVBvbGljeShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpCi0gICAgLCBtX292ZXJyaWRlSW5saW5lU3R5bGVBbGxvd2VkKGZhbHNlKQor
Q29udGVudFNlY3VyaXR5UG9saWN5OjpDb250ZW50U2VjdXJpdHlQb2xpY3koU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICA6IG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgmc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKK3sKKyAgICBTZWN1cml0eU9yaWdp
biogc2VjdXJpdHlPcmlnaW4gPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0LnNlY3VyaXR5T3JpZ2lu
KCk7CisgICAgQVNTRVJUKHNlY3VyaXR5T3JpZ2luKTsKKyAgICBtX3NlbGZTb3VyY2VQcm90b2Nv
bCA9IHNlY3VyaXR5T3JpZ2luLT5wcm90b2NvbCgpOworICAgIG1fc2VsZlNvdXJjZSA9IHN0ZDo6
bWFrZV91bmlxdWU8Q1NQU291cmNlPih0aGlzLCBtX3NlbGZTb3VyY2VQcm90b2NvbCwgc2VjdXJp
dHlPcmlnaW4tPmhvc3QoKSwgc2VjdXJpdHlPcmlnaW4tPnBvcnQoKSwgZW1wdHlTdHJpbmcoKSwg
ZmFsc2UsIGZhbHNlKTsKK30KKworQ29udGVudFNlY3VyaXR5UG9saWN5OjpDb250ZW50U2VjdXJp
dHlQb2xpY3koY29uc3QgVVJMJiB1cmwpCiB7CisgICAgUmVmPFNlY3VyaXR5T3JpZ2luPiBzZWN1
cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKKyAgICBtX3NlbGZTb3Vy
Y2VQcm90b2NvbCA9IHNlY3VyaXR5T3JpZ2luLT5wcm90b2NvbCgpOworICAgIG1fc2VsZlNvdXJj
ZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NQU291cmNlPih0aGlzLCBtX3NlbGZTb3VyY2VQcm90b2Nv
bCwgc2VjdXJpdHlPcmlnaW4tPmhvc3QoKSwgc2VjdXJpdHlPcmlnaW4tPnBvcnQoKSwgZW1wdHlT
dHJpbmcoKSwgZmFsc2UsIGZhbHNlKTsKIH0KIAogQ29udGVudFNlY3VyaXR5UG9saWN5Ojp+Q29u
dGVudFNlY3VyaXR5UG9saWN5KCkKQEAgLTE0MDIsNyArMTM3OCw3IEBAIHZvaWQgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpkaWRSZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyLCBDb250
ZW50U2VjdXJpCiAgICAgICAgIC8vICAgICAgICBeICAgICAgICAgICAgICAgICAgXgogICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlTGlzdD4gcG9saWN5ID0gQ1NQRGlyZWN0aXZl
TGlzdDo6Y3JlYXRlKHRoaXMsIFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbiksIHR5cGUp
OwogICAgICAgICBpZiAoIXBvbGljeS0+YWxsb3dFdmFsKDAsIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6UmVwb3J0aW5nU3RhdHVzOjpTdXBwcmVzc1JlcG9ydCkpCi0gICAgICAgICAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmRpc2FibGVFdmFsKHBvbGljeS0+ZXZhbERpc2FibGVkRXJyb3JN
ZXNzYWdlKCkpOworICAgICAgICAgICAgbV9sYXN0UG9saWN5RXZhbERpc2FibGVkRXJyb3JNZXNz
YWdlID0gcG9saWN5LT5ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKTsKIAogICAgICAgICBtX3Bv
bGljaWVzLmFwcGVuZChwb2xpY3kucmVsZWFzZSgpKTsKIApAQCAtMTQxMSw2ICsxMzg3LDE5IEBA
IHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRSZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmlu
ZyYgaGVhZGVyLCBDb250ZW50U2VjdXJpCiAgICAgICAgIHNraXBFeGFjdGx5KHBvc2l0aW9uLCBl
bmQsICcsJyk7CiAgICAgICAgIGJlZ2luID0gcG9zaXRpb247CiAgICAgfQorCisgICAgaWYgKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgYXBwbHlQb2xpY3lUb1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKK30KKwordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFwcGx5UG9s
aWN5VG9TY3JpcHRFeGVjdXRpb25Db250ZXh0KCkKK3sKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKKyAgICBpZiAoIW1fbGFzdFBvbGljeUV2YWxEaXNhYmxlZEVycm9yTWVz
c2FnZS5pc051bGwoKSkKKyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kaXNhYmxl
RXZhbChtX2xhc3RQb2xpY3lFdmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UpOworCisgICAgaWYgKG1f
c2FuZGJveEZsYWdzICE9IFNhbmRib3hOb25lICYmIGlzPERvY3VtZW50PihtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpKQorICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmVuZm9yY2VT
YW5kYm94RmxhZ3MobV9zYW5kYm94RmxhZ3MpOwogfQogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6c2V0T3ZlcnJpZGVBbGxvd0lubGluZVN0eWxlKGJvb2wgdmFsdWUpCkBAIC0xNDE4LDYg
KzE0MDcsMjAgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnNldE92ZXJyaWRlQWxsb3dJ
bmxpbmVTdHlsZShib29sIHZhbHVlKQogICAgIG1fb3ZlcnJpZGVJbmxpbmVTdHlsZUFsbG93ZWQg
PSB2YWx1ZTsKIH0KIAorYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnVybE1hdGNoZXNTZWxm
KGNvbnN0IFVSTCYgdXJsKSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGZTb3VyY2UtPm1hdGNo
ZXModXJsKTsKK30KKworYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnByb3RvY29sTWF0Y2hl
c1NlbGYoY29uc3QgVVJMJiB1cmwpIGNvbnN0Cit7CisjaWYgRU5BQkxFKENTUF9ORVhUKQorICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtX3NlbGZTb3VyY2VQcm90b2NvbCwg
Imh0dHAiKSkKKyAgICAgICAgcmV0dXJuIHVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCk7Cisj
ZW5kaWYKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2woKSwg
bV9zZWxmU291cmNlUHJvdG9jb2wpOworfQorCiB0ZW1wbGF0ZTxib29sIChDU1BEaXJlY3RpdmVM
aXN0OjoqYWxsb3dlZCkoQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNv
bnN0PgogYm9vbCBpc0FsbG93ZWRCeUFsbChjb25zdCBDU1BEaXJlY3RpdmVMaXN0VmVjdG9yJiBw
b2xpY2llcywgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5n
U3RhdHVzKQogewpAQCAtMTU3MywyOCArMTU3NiwxMSBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVmbGVjdGVk
WAogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6Z2F0aGVyUmVwb3J0VVJJcyhET01TdHJp
bmdMaXN0JiBsaXN0KSBjb25zdAogewotICAgIGZvciAoYXV0byYgcG9saWN5IDogbV9wb2xpY2ll
cykKLSAgICAgICAgcG9saWN5LT5nYXRoZXJSZXBvcnRVUklzKGxpc3QpOwotfQotCi1TZWN1cml0
eU9yaWdpbiogQ29udGVudFNlY3VyaXR5UG9saWN5OjpzZWN1cml0eU9yaWdpbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsK
LX0KLQotY29uc3QgVVJMJiBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnVybCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+dXJsKCk7Ci19Ci0KLVVSTCBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAot
ewotICAgIHJldHVybiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCk7
Ci19Ci0KLXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjplbmZvcmNlU2FuZGJveEZsYWdzKFNh
bmRib3hGbGFncyBtYXNrKSBjb25zdAotewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
ZW5mb3JjZVNhbmRib3hGbGFncyhtYXNrKTsKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0KTsKKyAgICBmb3IgKGF1dG8mIHBvbGljeSA6IG1fcG9saWNpZXMpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiB1cmwgOiBwb2xpY3ktPnJlcG9ydFVSSXMoKSkKKyAgICAgICAgICAgIGxpc3Qu
YXBwZW5kKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+Y29tcGxldGVVUkwodXJsKS5zdHJpbmco
KSk7CisgICAgfQogfQogCiBzdGF0aWMgU3RyaW5nIHN0cmlwVVJMRm9yVXNlSW5SZXBvcnQoRG9j
dW1lbnQmIGRvY3VtZW50LCBjb25zdCBVUkwmIHVybCkKQEAgLTE2MjgsMTIgKzE2MTQsMTIgQEAg
c3RhdGljIHZvaWQgZ2F0aGVyU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudERhdGEoU2VjdXJp
dHlQb2xpY3lWaW9sYXRpb25FdmVudEkKIH0KICNlbmRpZgogCi12b2lkIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6cmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCwgY29u
c3QgU3RyaW5nJiBlZmZlY3RpdmVEaXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3Nh
Z2UsIGNvbnN0IFVSTCYgYmxvY2tlZFVSTCwgY29uc3QgVmVjdG9yPFVSTD4mIHJlcG9ydFVSSXMs
IGNvbnN0IFN0cmluZyYgaGVhZGVyLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdU
Rjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkgY29u
c3QKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRWaW9sYXRpb24oY29uc3QgU3Ry
aW5nJiBkaXJlY3RpdmVUZXh0LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSwgY29u
c3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcmVwb3J0VVJJcywgY29uc3QgU3RyaW5nJiBoZWFkZXIsIGNvbnN0IFN0
cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwg
SlNDOjpFeGVjU3RhdGUqIHN0YXRlKSBjb25zdAogewogICAgIGxvZ1RvQ29uc29sZShjb25zb2xl
TWVzc2FnZSwgY29udGV4dFVSTCwgY29udGV4dExpbmUsIHN0YXRlKTsKIAogICAgIC8vIEZJWE1F
OiBTdXBwb3J0IHNlbmRpbmcgcmVwb3J0cyBmcm9tIHdvcmtlci4KLSAgICBpZiAoIWlzPERvY3Vt
ZW50PigqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KSkKKyAgICBpZiAoIW1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCB8fCAhaXM8RG9jdW1lbnQ+KCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CkBAIC0xNjkwLDcgKzE2NzYsNyBAQCB2
b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYg
ZGlyZWN0aXZlVGV4dCwgY29uc3QgUwogICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVwb3J0ID0gRm9y
bURhdGE6OmNyZWF0ZShyZXBvcnRPYmplY3QtPnRvSlNPTlN0cmluZygpLnV0ZjgoKSk7CiAKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHVybCA6IHJlcG9ydFVSSXMpCi0gICAgICAgIFBpbmdMb2FkZXI6
OnNlbmRWaW9sYXRpb25SZXBvcnQoKmZyYW1lLCB1cmwsIHJlcG9ydC5jb3B5UmVmKCkpOworICAg
ICAgICBQaW5nTG9hZGVyOjpzZW5kVmlvbGF0aW9uUmVwb3J0KCpmcmFtZSwgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5jb21wbGV0ZVVSTCh1cmwpLCByZXBvcnQuY29weVJlZigpKTsKIH0KIAog
dm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3QKQEAgLTE3NzQsMTIgKzE3NjAsMTQgQEAgdm9pZCBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydE1pc3NpbmdSZXBvcnRVUkkoY29uc3QgU3RyaW5nJiBw
b2xpY3kpIGNvbnN0CiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6bG9nVG9Db25zb2xlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6
Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpIGNvbnN0
CiB7CiAgICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNDMxNz4gQ29udGVudFNl
Y3VyaXR5UG9saWN5Ojpsb2dUb0NvbnNvbGUgc2hvdWxkIGluY2x1ZGUgYSBjb2x1bW4gbnVtYmVy
Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwgbWVzc2FnZSwgY29udGV4dFVS
TCwgY29udGV4dExpbmUub25lQmFzZWRJbnQoKSwgMCwgc3RhdGUpOworICAgIGlmIChtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRk
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsIG1lc3NhZ2UsIGNvbnRleHRVUkwsIGNvbnRleHRMaW5lLm9uZUJhc2VkSW50KCksIDAsIHN0
YXRlKTsKIH0KIAogdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydEJsb2NrZWRTY3Jp
cHRFeGVjdXRpb25Ub0luc3BlY3Rvcihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpIGNvbnN0
CiB7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRFeGVjdXRpb25CbG9ja2Vk
QnlDU1AobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBkaXJlY3RpdmVUZXh0KTsKKyAgICBpZiAo
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OnNjcmlwdEV4ZWN1dGlvbkJsb2NrZWRCeUNTUChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IGRpcmVjdGl2ZVRleHQpOwogfQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6ZXhwZXJp
bWVudGFsRmVhdHVyZXNFbmFibGVkKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9j
c3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmgKaW5kZXggYWIzY2IzNDJiODU0NWI1YTExZWY2ZjEy
NzFiNTI5ZDY5Zjc4MjZlMy4uMmExMzQ3ZmY2YTE0YTc5ZTYwNjMzNDAxNmZhMGUyOTk4NjY5OWY4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNw
b25zZUhlYWRlcnMuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5o
IgorI2luY2x1ZGUgIlNlY3VyaXR5Q29udGV4dC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQyLDI2
ICs0MywyMSBAQCBjbGFzcyBPcmRpbmFsTnVtYmVyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDU1BEaXJlY3RpdmVMaXN0OworY2xhc3MgQ1NQU291cmNlOwogY2xhc3MgRE9NU3RyaW5n
TGlzdDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci1jbGFzcyBTZWN1cml0eU9yaWdp
bjsKIAotdHlwZWRlZiBpbnQgU2FuZGJveEZsYWdzOwogdHlwZWRlZiBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPENTUERpcmVjdGl2ZUxpc3Q+PiBDU1BEaXJlY3RpdmVMaXN0VmVjdG9yOwogCiBjbGFz
cyBDb250ZW50U2VjdXJpdHlQb2xpY3kgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIGV4cGxpY2l0IENvbnRlbnRTZWN1cml0eVBvbGljeShTY3JpcHRFeGVjdXRp
b25Db250ZXh0Kik7CisgICAgZXhwbGljaXQgQ29udGVudFNlY3VyaXR5UG9saWN5KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmKTsKKyAgICBleHBsaWNpdCBDb250ZW50U2VjdXJpdHlQb2xpY3koY29u
c3QgVVJMJik7CiAgICAgfkNvbnRlbnRTZWN1cml0eVBvbGljeSgpOwogCiAgICAgdm9pZCBjb3B5
U3RhdGVGcm9tKGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSopOwogCi0gICAgZW51bSBjbGFz
cyBSZXBvcnRpbmdTdGF0dXMgewotICAgICAgICBTZW5kUmVwb3J0LAotICAgICAgICBTdXBwcmVz
c1JlcG9ydAotICAgIH07Ci0KICAgICAvLyBCZSBzdXJlIHRvIHVwZGF0ZSB0aGUgYmVoYXZpb3Ig
b2YgWFNTQXVkaXRvcjo6Y29tYmluZVhTU1Byb3RlY3Rpb25IZWFkZXJBbmRDU1Agd2hlbmV2ZXIg
eW91IGNoYW5nZSB0aGlzIGVudW0ncyBjb250ZW50IG9yIG9yZGVyaW5nLgogICAgIGVudW0gUmVm
bGVjdGVkWFNTRGlzcG9zaXRpb24gewogICAgICAgICBSZWZsZWN0ZWRYU1NVbnNldCA9IDAsCkBA
IC03MCwxOCArNjYsMjIgQEAgcHVibGljOgogICAgICAgICBGaWx0ZXJSZWZsZWN0ZWRYU1MsCiAg
ICAgICAgIEJsb2NrUmVmbGVjdGVkWFNTCiAgICAgfTsKKyAgICBSZWZsZWN0ZWRYU1NEaXNwb3Np
dGlvbiByZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbigpIGNvbnN0OwogCiAgICAgQ29udGVudFNlY3Vy
aXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIHJlc3BvbnNlSGVhZGVycygpIGNvbnN0OwogICAgIHZv
aWQgZGlkUmVjZWl2ZUhlYWRlcnMoY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VI
ZWFkZXJzJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmluZyYsIENvbnRl
bnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUpOwogCisgICAgZW51bSBjbGFzcyBSZXBvcnRpbmdT
dGF0dXMgeworICAgICAgICBTZW5kUmVwb3J0LAorICAgICAgICBTdXBwcmVzc1JlcG9ydAorICAg
IH07CiAgICAgYm9vbCBhbGxvd0phdmFTY3JpcHRVUkxzKGNvbnN0IFN0cmluZyYgY29udGV4dFVS
TCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgYm9vbCBvdmVycmlkZUNv
bnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9y
dGluZ1N0YXR1cyA9IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5k
UmVwb3J0KSBjb25zdDsKICAgICBib29sIGFsbG93SW5saW5lRXZlbnRIYW5kbGVycyhjb25zdCBT
dHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUs
IGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9y
dGluZ1N0YXR1czo6U2VuZFJlcG9ydCkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd0lubGluZVNjcmlw
dChjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29u
dGV4dExpbmUsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgPSBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd0lu
bGluZVN0eWxlKGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVt
YmVyJiBjb250ZXh0TGluZSwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZh
bHNlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyA9IENvbnRlbnRTZWN1
cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KSBjb25zdDsKICAgICBib29s
IGFsbG93RXZhbChKU0M6OkV4ZWNTdGF0ZSogPSBudWxscHRyLCBib29sIG92ZXJyaWRlQ29udGVu
dFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5n
U3RhdHVzID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBv
cnQpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dQbHVnaW5UeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiB0eXBlQXR0cmlidXRlLCBjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29u
dGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0
aW5nU3RhdHVzID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRS
ZXBvcnQpIGNvbnN0OwotCiAgICAgYm9vbCBhbGxvd1NjcmlwdEZyb21Tb3VyY2UoY29uc3QgVVJM
JiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyA9IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVw
b3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KSBjb25zdDsKICAgICBib29sIGFsbG93T2JqZWN0RnJv
bVNvdXJjZShjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0g
ZmFsc2UsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzID0gQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpIGNvbnN0OwogICAgIGJv
b2wgYWxsb3dDaGlsZEZyYW1lRnJvbVNvdXJjZShjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29u
dGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0
aW5nU3RhdHVzID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRS
ZXBvcnQpIGNvbnN0OwpAQCAtOTMsNDIgKzkzLDU5IEBAIHB1YmxpYzoKICAgICBib29sIGFsbG93
Rm9ybUFjdGlvbihjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5
ID0gZmFsc2UsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzID0gQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpIGNvbnN0OwogICAg
IGJvb2wgYWxsb3dCYXNlVVJJKGNvbnN0IFVSTCYsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJp
dHlQb2xpY3kgPSBmYWxzZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMg
PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCkgY29u
c3Q7CiAKLSAgICBSZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiByZWZsZWN0ZWRYU1NEaXNwb3NpdGlv
bigpIGNvbnN0OwotCiAgICAgdm9pZCBzZXRPdmVycmlkZUFsbG93SW5saW5lU3R5bGUoYm9vbCk7
CiAKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisKICAgICB2b2lkIGdhdGhlclJlcG9ydFVS
SXMoRE9NU3RyaW5nTGlzdCYpIGNvbnN0OwogCisgICAgU3RyaW5nIGV2YWxEaXNhYmxlZEVycm9y
TWVzc2FnZSgpIGNvbnN0OworCisgICAgYm9vbCBleHBlcmltZW50YWxGZWF0dXJlc0VuYWJsZWQo
KSBjb25zdDsKKworICAgIHN0YXRpYyBib29sIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRT
ZWN1cml0eVBvbGljeShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CisKKyAgICAvLyBUaGUgZm9s
bG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCBieSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdG8g
Y2FsbGJhY2sgaW50byB0aGlzIG9iamVjdCB3aGVuIHBhcnNpbmcsIHZhbGlkYXRpbmcsCisgICAg
Ly8gYW5kIGFwcGx5aW5nIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kuCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBtYWtlIHRoZSB2YXJpb3VzIGRpcmVjdGl2ZXMgc2VydmUgb25seSBhcyBzdGF0
ZSBzdG9yZXMgZm9yIHRoZSBwYXJzZWQgcG9saWN5IGFuZCByZW1vdmUgdGhlc2UgZnVuY3Rpb25z
LgorICAgIC8vIFRoaXMgY2xhc3Mgc2hvdWxkIHRyYXZlcnNlIHRoZSBkaXJlY3RpdmVzLCB2YWxp
ZGF0aW5nIHRoZSBwb2xpY3ksIGFuZCBhcHBseWluZyBpdCB0byB0aGUgc2NyaXB0IGV4ZWN1dGlv
biBjb250ZXh0LgorCisgICAgLy8gVXNlZCBieSBNZWRpYUxpc3REaXJlY3RpdmUKKyAgICB2b2lk
IHJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhjb25zdCBTdHJpbmcmKSBjb25zdDsKKworICAgIC8v
IFVzZWQgYnkgQ1NQU291cmNlTGlzdAogICAgIHZvaWQgcmVwb3J0RGlyZWN0aXZlQXNTb3VyY2VF
eHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VFeHByZXNzaW9uKSBjb25zdDsKKyAgICB2b2lkIHJlcG9ydEludmFsaWRQYXRoQ2hhcmFjdGVy
KGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3Qg
Y2hhcikgY29uc3Q7CisgICAgdm9pZCByZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lvbihjb25z
dCBTdHJpbmcmIGRpcmVjdGl2ZU5hbWUsIGNvbnN0IFN0cmluZyYgc291cmNlKSBjb25zdDsKKyAg
ICBib29sIHVybE1hdGNoZXNTZWxmKGNvbnN0IFVSTCYpIGNvbnN0OworCisgICAgLy8gVXNlZCBi
eSBDU1BEaXJlY3RpdmVMaXN0CiAgICAgdm9pZCByZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUoY29u
c3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdm9pZCByZXBvcnRJbnZhbGlkRGlyZWN0aXZlVmFsdWVD
aGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KSBjb25zdDsKLSAgICB2b2lkIHJlcG9ydEludmFsaWRQYXRoQ2hhcmFjdGVyKGNvbnN0IFN0cmlu
ZyYgZGlyZWN0aXZlTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgY2hhcikgY29uc3Q7
Ci0gICAgdm9pZCByZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoY29uc3QgU3RyaW5nJikgY29uc3Q7
CiAgICAgdm9pZCByZXBvcnRJbnZhbGlkU2FuZGJveEZsYWdzKGNvbnN0IFN0cmluZyYpIGNvbnN0
OwotICAgIHZvaWQgcmVwb3J0SW52YWxpZFNvdXJjZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBk
aXJlY3RpdmVOYW1lLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkgY29uc3Q7CiAgICAgdm9pZCByZXBv
cnRJbnZhbGlkUmVmbGVjdGVkWFNTKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcmVw
b3J0TWlzc2luZ1JlcG9ydFVSSShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2b2lkIHJlcG9y
dFVuc3VwcG9ydGVkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgIHZvaWQgcmVw
b3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCwgY29uc3QgU3RyaW5nJiBl
ZmZlY3RpdmVEaXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IFVS
TCYgYmxvY2tlZFVSTCwgY29uc3QgVmVjdG9yPFVSTD4mIHJlcG9ydFVSSXMsIGNvbnN0IFN0cmlu
ZyYgaGVhZGVyLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwgPSBTdHJpbmcoKSwgY29uc3QgV1RG
OjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSA9IFdURjo6T3JkaW5hbE51bWJlcjo6YmVmb3Jl
Rmlyc3QoKSwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0cikgY29uc3Q7Ci0KLSAgICB2b2lkIHJl
cG9ydEJsb2NrZWRTY3JpcHRFeGVjdXRpb25Ub0luc3BlY3Rvcihjb25zdCBTdHJpbmcmIGRpcmVj
dGl2ZVRleHQpIGNvbnN0OworICAgIHZvaWQgcmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYg
ZGlyZWN0aXZlVGV4dCwgY29uc3QgU3RyaW5nJiBlZmZlY3RpdmVEaXJlY3RpdmUsIGNvbnN0IFN0
cmluZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IFVSTCYgYmxvY2tlZFVSTCwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHJlcG9ydFVSSXMsIGNvbnN0IFN0cmluZyYgaGVhZGVyLCBjb25zdCBTdHJpbmcm
IGNvbnRleHRVUkwgPSBTdHJpbmcoKSwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0
TGluZSA9IFdURjo6T3JkaW5hbE51bWJlcjo6YmVmb3JlRmlyc3QoKSwgSlNDOjpFeGVjU3RhdGUq
ID0gbnVsbHB0cikgY29uc3Q7CiAKLSAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0OwotICAgIFVS
TCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICBTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKICAgICB2b2lkIGVuZm9yY2VTYW5kYm94RmxhZ3MoU2Fu
ZGJveEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCkg
Y29uc3Q7CisgICAgdm9pZCByZXBvcnRCbG9ja2VkU2NyaXB0RXhlY3V0aW9uVG9JbnNwZWN0b3Io
Y29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0KSBjb25zdDsKKyAgICB2b2lkIGVuZm9yY2VTYW5k
Ym94RmxhZ3MoU2FuZGJveEZsYWdzIHNhbmRib3hGbGFncykgeyBtX3NhbmRib3hGbGFncyB8PSBz
YW5kYm94RmxhZ3M7IH0KIAotICAgIGJvb2wgZXhwZXJpbWVudGFsRmVhdHVyZXNFbmFibGVkKCkg
Y29uc3Q7Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkQnlwYXNzTWFpbldvcmxkQ29udGVudFNlY3Vy
aXR5UG9saWN5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAgICAvLyBVc2VkIGJ5IENTUFNv
dXJjZQorICAgIGJvb2wgcHJvdG9jb2xNYXRjaGVzU2VsZihjb25zdCBVUkwmKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICB2b2lkIGxvZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgY29udGV4dFVSTCA9IFN0cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1i
ZXImIGNvbnRleHRMaW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBKU0M6
OkV4ZWNTdGF0ZSogPSBudWxscHRyKSBjb25zdDsKKyAgICB2b2lkIGFwcGx5UG9saWN5VG9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0gICAgYm9vbCBtX292ZXJyaWRlSW5saW5lU3R5bGVBbGxv
d2VkOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NQU291cmNlPiBtX3NlbGZTb3Vy
Y2U7CisgICAgU3RyaW5nIG1fc2VsZlNvdXJjZVByb3RvY29sOwogICAgIENTUERpcmVjdGl2ZUxp
c3RWZWN0b3IgbV9wb2xpY2llczsKKyAgICBTdHJpbmcgbV9sYXN0UG9saWN5RXZhbERpc2FibGVk
RXJyb3JNZXNzYWdlOworICAgIFNhbmRib3hGbGFncyBtX3NhbmRib3hGbGFncyB7IFNhbmRib3hO
b25lIH07CisgICAgYm9vbCBtX292ZXJyaWRlSW5saW5lU3R5bGVBbGxvd2VkIHsgZmFsc2UgfTsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAK
aW5kZXggYzZmY2YyZGRjNjBmNWQ0MjY3M2ViOGIyZmU2ZjRlZGU5ZGMzYzI0MS4uNmM1ZGNlYTEw
MTk5ODM3N2VlMTZiY2M5ZmZmMzY3YWEzMjU2YTcyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKQEAgLTcyLDYgKzcyLDcgQEAgV29ya2VyR2xvYmFs
U2NvcGU6Oldvcmtlckdsb2JhbFNjb3BlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVz
ZXJBZ2VudCwgV28KICAgICAsIG1fdG9wT3JpZ2luKHRvcE9yaWdpbikKIHsKICAgICBzZXRTZWN1
cml0eU9yaWdpblBvbGljeShTZWN1cml0eU9yaWdpblBvbGljeTo6Y3JlYXRlKFNlY3VyaXR5T3Jp
Z2luOjpjcmVhdGUodXJsKSkpOworICAgIHNldENvbnRlbnRTZWN1cml0eVBvbGljeShzdGQ6Om1h
a2VfdW5pcXVlPENvbnRlbnRTZWN1cml0eVBvbGljeT4oKnRoaXMpKTsKIH0KIAogV29ya2VyR2xv
YmFsU2NvcGU6On5Xb3JrZXJHbG9iYWxTY29wZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270466</attachid>
            <date>2016-02-01 20:49:29 -0800</date>
            <delta_ts>2016-02-01 20:55:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153748-20160201204904.patch</filename>
            <type>text/plain</type>
            <size>47471</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1OTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmFhZjRhNjQ3ZDRiMDA4
ZDUwMWUxNTNmZTRhMDM1MjVhM2QzYjBkNy4uNDJlNjQ3M2MwMDU3ODVlZjg5NTI3NTYwYWU5YTlh
YTkwZTc1OTk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAxNi0wMi0wMSAgRGFu
aWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgQ1NQOiBTdXBwb3J0IGNo
ZWNraW5nIGNvbnRlbnQgc2VjdXJpdHkgcG9saWN5IHdpdGhvdXQgYSBzY3JpcHQgZXhlY3V0aW9u
IGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1Mzc0OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQ0MzkxNDk+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG93YXJkcyBjaGVja2luZyBhIFdl
YiBXb3JrZXIncyBjb250ZW50IHNlY3VyaXR5IHBvbGljeSBhZ2FpbnN0IGEgcmVkaXJlY3RlZCB3
b3JrZXIKKyAgICAgICAgc2NyaXB0IGxvYWQgb3IgcmVkaXJlY3RlZCBYSFIgcmVxdWVzdCBmb3Ig
YW4gWEhSIHJlcXVlc3QgaW5pdGlhdGVkIGZyb20gaXQsIHdlIHNob3VsZAorICAgICAgICBzdXBw
b3J0IGluc3RhbnRpYXRpbmcgYSBDb250ZW50U2VjdXJpdHlQb2xpY3kgb2JqZWN0IHdpdGhvdXQg
YSBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorCisgICAgICAgIE5vIGZ1bmN0aW9uYWxpdHkgd2Fz
IGNoYW5nZWQuIFNvLCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQpOiBQYXNz
IHx0aGlzfCBhcyBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGFzIGEgcG9pbnRlci4KKyAgICAgICAg
KiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwOiBSZW1vdmUgZXh0cmFuZW91cyBp
bmNsdWRlcyBTY3JpcHRTdGF0ZS5oLCBUZXh0RW5jb2RpbmcuaCwKKyAgICAgICAgYW5kIFVSTC5o
IGFzIHRoZXkgYXJlIGluY2x1ZGVkIGJ5IENvbnRlbnRTZWN1cml0eVBvbGljeS5oLCBGb3JtRGF0
YUxpc3QuaCBhbmQgRm9ybURhdGEuaCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAoV2ViQ29yZTo6
Q1NQU291cmNlOjpDU1BTb3VyY2UpOiBUYWtlIGEgY29uc3RhbnQgcmVmZXJlbmNlIHRvIGEgQ29u
dGVudFNlY3VyaXR5UG9saWN5IGluc3RlYWQKKyAgICAgICAgb2YgYSBwb2ludGVyIHNpbmNlIHdl
IG5ldmVyIGV4cGVjdGVkIGEgbnVsbCBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291
cmNlOjpzY2hlbWVNYXRjaGVzKTogTW92ZSBsb2dpYyBmb3IgY2hlY2tpbmcgdGhlIHByb3RvY29s
IG9mIHNvdXJjZSAic2VsZiIKKyAgICAgICAgZnJvbSBoZXJlIHRvIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6cHJvdG9jb2xNYXRjaGVzU2VsZigpIGJlY2F1c2Ugd2UgbWF5IG5vdCBoYXZlIGEgc2Vj
dXJpdHkKKyAgICAgICAgb3JpZ2luIGlmIENvbnRlbnRTZWN1cml0eVBvbGljeSB3YXMgaW5pdGlh
dGVkIHdpdGhvdXQgYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG9iamVjdC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTUFNvdXJjZUxpc3Q6OmFsbG93U2VsZik6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NQU291cmNlTGlzdDo6Q1NQU291cmNlTGlzdCk6IFRha2UgYSBjb25zdGFudCByZWZlcmVu
Y2UgdG8gYSBDb250ZW50U2VjdXJpdHlQb2xpY3kKKyAgICAgICAgaW5zdGVhZCBvZiBhIHBvaW50
ZXIgc2luY2Ugd2UgbmV2ZXIgZXhwZWN0ZWQgYSBudWxsIHBvaW50ZXIuIFJlbW92ZSBmaWVsZHMg
ZnJvbSBtZW1iZXIKKyAgICAgICAgaW5pdGlhbGl6YXRpb24gbGlzdCB0aGF0IGNhbiBiZSBpbml0
aWFsaXplZCB1c2luZyBDKysxMSBpbi1jbGFzcyBpbml0aWFsaXphdGlvbiBzeW50YXguCisgICAg
ICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjptYXRjaGVzKTogQ2FsbCBDb250ZW50U2VjdXJp
dHlQb2xpY3k6OnVybE1hdGNoZXNTZWxmKCkgdG8gbWF0Y2ggdGhlCisgICAgICAgIGVmZmVjdGl2
ZSBVUkwgYWdhaW5zdCB0aGUgVVJMIG9mIHNvdXJjZSAic2VsZiIuCisgICAgICAgIChXZWJDb3Jl
OjpDU1BTb3VyY2VMaXN0OjpwYXJzZSk6IFVwZGF0ZSBjb2RlIGFzIG5lY2Vzc2FyeSBub3cgdGhh
dCBtX3BvbGljeSBpcyBhIHJlZmVyZW5jZQorICAgICAgICBpbnN0ZWFkIG9mIGEgcG9pbnRlci4K
KyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6OnBhcnNlU291cmNlKTogU2ltcGxpZnkg
Y29kZSBieSBzZXR0aW5nIGludGVybmFsIG1lbWJlciBmaWVsZHMgZGlyZWN0bHkKKyAgICAgICAg
aW5zdGVhZCBvZiB2aWEgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNTUFNv
dXJjZUxpc3Q6OnBhcnNlUGF0aCk6IFVwZGF0ZSBjb2RlIGFzIG5lY2Vzc2FyeSBub3cgdGhhdCBt
X3BvbGljeSBpcyBhIHJlZmVyZW5jZQorICAgICAgICBpbnN0ZWFkIG9mIGEgcG9pbnRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZTo6Q1NQRGlyZWN0aXZlKTogVGFrZSBhIGNvbnN0
YW50IHJlZmVyZW5jZSB0byBhIENvbnRlbnRTZWN1cml0eVBvbGljeQorICAgICAgICBpbnN0ZWFk
IG9mIGEgcG9pbnRlciBzaW5jZSB3ZSBuZXZlciBleHBlY3RlZCBhIG51bGwgcG9pbnRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZTo6cG9saWN5KTogUmV0dXJuIGEgcmVmZXJlbmNl
IHRvIGEgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5LgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFMaXN0RGlyZWN0aXZlOjpNZWRpYUxpc3REaXJlY3RpdmUpOiBUYWtlIGEgY29uc3RhbnQgcmVm
ZXJlbmNlIHRvIGEgQ29udGVudFNlY3VyaXR5UG9saWN5CisgICAgICAgIGluc3RlYWQgb2YgYSBw
b2ludGVyIHNpbmNlIHdlIG5ldmVyIGV4cGVjdGVkIGEgbnVsbCBwb2ludGVyLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFMaXN0RGlyZWN0aXZlOjpwYXJzZSk6IFVwZGF0ZSBjb2RlIGFzIG5lY2Vz
c2FyeSBub3cgdGhhdCBtX3BvbGljeSBpcyBhIHJlZmVyZW5jZQorICAgICAgICBpbnN0ZWFkIG9m
IGEgcG9pbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUxpc3REaXJlY3RpdmU6OlNvdXJj
ZUxpc3REaXJlY3RpdmUpOiBUYWtlIGEgY29uc3RhbnQgcmVmZXJlbmNlIHRvIGEgQ29udGVudFNl
Y3VyaXR5UG9saWN5CisgICAgICAgIGluc3RlYWQgb2YgYSBwb2ludGVyIHNpbmNlIHdlIG5ldmVy
IGV4cGVjdGVkIGEgbnVsbCBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlTGlzdERp
cmVjdGl2ZTo6YWxsb3dzKTogV3JpdGUgaW4gdGVybXMgb2YgQ1NQU291cmNlTGlzdDo6YWxsb3dT
ZWxmKCkgYmVjYXVzZSB3ZQorICAgICAgICBtYXkgbm90IGhhdmUgYSBzZWN1cml0eSBvcmlnaW4g
dG8gZ2V0IGEgVVJMIGZyb20gaWYgQ29udGVudFNlY3VyaXR5UG9saWN5IHdhcyBpbml0aWF0ZWQg
d2l0aG91dAorICAgICAgICBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgb2JqZWN0LgorICAgICAg
ICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZlTGlzdDo6cmVwb3J0VVJJcyk6IENoYW5nZSByZXR1cm4g
dHlwZSBmcm9tIFZlY3RvcjxVUkw+IHRvIFZlY3RvcjxTdHJpbmc+CisgICAgICAgIFRoZSBjYWxs
ZXIgd2lsbCBjb252ZXJ0IHRoZSBzdHJpbmdzIHRvIFVSTHMgd2l0aCByZXNwZWN0IHRvIHRoZSBz
Y3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVM
aXN0OjpwYXJzZVJlcG9ydFVSSSk6IFN0b3JlIHRoZSByZXBvcnQgVVJJIGFzIGEgc3RyaW5nIGlu
c3RlYWQgb2YgYSBVUkwKKyAgICAgICAgYmVjYXVzZSB3ZSBtYXkgbm90IGhhdmUgYSBzZWN1cml0
eSBvcmlnaW4gdG8gY29tcHV0ZSB0aGUgYWJzb2x1dGUgVVJMIGlmIENvbnRlbnRTZWN1cml0eVBv
bGljeQorICAgICAgICB3YXMgaW5pdGlhdGVkIHdpdGhvdXQgYSBTY3JpcHRFeGVjdXRpb25Db250
ZXh0IG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OkNTUERpcmVj
dGl2ZUxpc3QpOiBUYWtlIGEgcmVmZXJlbmNlIHRvIGEgQ29udGVudFNlY3VyaXR5UG9saWN5Cisg
ICAgICAgIGluc3RlYWQgb2YgYSBwb2ludGVyIHNpbmNlIHdlIG5ldmVyIGV4cGVjdGVkIGEgbnVs
bCBwb2ludGVyLiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdGFrZSBhIGNvbnN0CisgICAgICAgIHJl
ZmVyZW5jZSB0byBhIENvbnRlbnRTZWN1cml0eVBvbGljeSwgYnV0IENvbnRlbnRTZWN1cml0eVBv
bGljeTo6YXBwbHlTYW5kYm94UG9saWN5KCkgbmVlZHMgdG8gc2V0CisgICAgICAgIHN0YXRlIG9u
IENvbnRlbnRTZWN1cml0eVBvbGljeSA6KAorICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZl
TGlzdDo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0
OjpyZXBvcnRWaW9sYXRpb24pOiBVcGRhdGUgY29kZSBhcyBuZWNlc3Nhcnkgbm93IHRoYXQgbV9w
b2xpY3kgaXMgYSByZWZlcmVuY2UKKyAgICAgICAgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisgICAg
ICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpjaGVja0V2YWxBbmRSZXBvcnRWaW9sYXRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OmNoZWNrSW5s
aW5lQW5kUmVwb3J0VmlvbGF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJl
Y3RpdmVMaXN0OjpwYXJzZURpcmVjdGl2ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NQ
RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBvcnRVUkkpOiBTdG9yZSB0aGUgcmVwb3J0IFVSSSBhcyBh
IHN0cmluZyBpbnN0ZWFkIG9mIGEgVVJMCisgICAgICAgIGJlY2F1c2Ugd2UgbWF5IG5vdCBoYXZl
IGEgc2VjdXJpdHkgb3JpZ2luIHRvIGNvbXB1dGUgdGhlIGFic29sdXRlIFVSTCBpZiBDb250ZW50
U2VjdXJpdHlQb2xpY3kKKyAgICAgICAgd2FzIGluaXRpYXRlZCB3aXRob3V0IGEgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBvYmplY3QuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0
OjpzZXRDU1BEaXJlY3RpdmUpOiBVcGRhdGUgY29kZSBhcyBuZWNlc3Nhcnkgbm93IHRoYXQgbV9w
b2xpY3kgaXMgYSByZWZlcmVuY2UKKyAgICAgICAgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisgICAg
ICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQb2xpY3kpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVmbGVjdGVkWFNT
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjphZGREaXJlY3Rp
dmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6Q29u
dGVudFNlY3VyaXR5UG9saWN5KTogTW9kaWZpZWQgdG8gdGFrZSB0aGUgU2NyaXB0RXhlY3V0aW9u
T2JqZWN0CisgICAgICAgIGFzIGEgcmVmZXJlbmNlIGFuZCBjb21wdXRlIHRoZSBDU1BTb3VyY2Ug
b2JqZWN0IGZvciAic2VsZiIgYW5kIGNhY2hlIHRoZSBwcm90b2NvbCBmb3IgInNlbGYiLiBSZW1v
dmVkCisgICAgICAgIGZpZWxkIG1fb3ZlcnJpZGVJbmxpbmVTdHlsZUFsbG93ZWQgZnJvbSB0aGUg
bWVtYmVyIGluaXRpYWxpemF0aW9uIGxpc3QgYW5kIHVzZWQgQysrMTEgaW4tY2xhc3MKKyAgICAg
ICAgaW5pdGlhbGl6YXRpb24gc3ludGF4IHRvIGluaXRpYWxpemUgaXQuIEFkZGVkIG92ZXJsb2Fk
ZWQgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIFNlY3VyaXR5T3JpZ2luIG9iamVjdC4KKyAgICAg
ICAgV2UgYXJlIG5vdCBtYWtpbmcgdXNlIG9mIHRoaXMgb3ZlcmxvYWRlZCBjb25zdHJ1Y3RvciBh
dCB0aGlzIHRpbWUuIFdlIHdpbGwgaW4gYSBzdWJzZXF1ZW50IHBhdGNoLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRSZWNlaXZlSGVhZGVyKTogU3RvcmUgdGhl
IGV2YWwgZGlzYWJsZWQgZXJyb3IgbWVzc2FnZSBmb3IKKyAgICAgICAgdGhlIGxhc3QgcGFyc2Vk
IHBvbGljeSBpbiBhIG1lbWJlciBmaWVsZCBpbnN0ZWFkIG9mIHVzaW5nIGl0IGFzIHBhcnQgb2Yg
ZGlzYWJsaW5nIGV2YWwgZXhlY3V0aW9uCisgICAgICAgIG9uIHRoZSBzY3JpcHQgZXhlY3V0aW9u
IGNvbnRleHQgYmVjYXVzZSB3ZSBtYXkgbm90IGhhdmUgc3VjaCBhIGNvbnRleHQuCisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFwcGx5UG9saWN5VG9TY3JpcHRFeGVj
dXRpb25Db250ZXh0KTogQXBwbGllcyB0aGUgY29udGVudCBzZWN1cml0eQorICAgICAgICBwb2xp
Y3kgZXZhbCBhbmQgc2FuZGJveCByZXN0cmljdGlvbnMgdG8gdGhlIHNjcmlwdCBleGVjdXRpb24g
Y29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6dXJsTWF0
Y2hlc1NlbGYpOiBNYXRjaCB0aGUgc3BlY2lmaWVkIFVSTCBhZ2FpbnN0IHRoZSBVUkwgZm9yCisg
ICAgICAgIHNvdXJjZSAic2VsZiIuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OnByb3RvY29sTWF0Y2hlc1NlbGYpOiBNYXRjaCB0aGUgcHJvdG9jb2wgb2YgdGhlIHNw
ZWNpZmllZCBVUkwKKyAgICAgICAgYWdhaW5zdCB0aGUgcHJvdG9jb2wgZm9yIHNvdXJjZSAic2Vs
ZiIuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmdhdGhlclJlcG9y
dFVSSXMpOiBNb2RpZmllZCB0byB1c2UgdGhlIHNjcmlwdCBleGVjdXRpb24gY29udGV4dAorICAg
ICAgICB0byBjb21wdXRlIHRoZSBhYnNvbHV0ZSBVUkwgZm9yIGVhY2ggcmVwb3J0IFVSSS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVwb3J0VmlvbGF0aW9uKTog
QmFpbCBvdXQgaWYgd2UgZG8gbm90IGhhdmUgYSBzY3JpcHQgZXhlY3V0aW9uCisgICAgICAgIGNv
bnRleHQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmxvZ1RvQ29u
c29sZSk6IE9ubHkgbG9nIHRvIHRoZSBjb25zb2xlIGlmIHdlIGhhdmUgYSBzY3JpcHQKKyAgICAg
ICAgZXhlY3V0aW9uIGNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OnJlcG9ydEJsb2NrZWRTY3JpcHRFeGVjdXRpb25Ub0luc3BlY3Rvcik6IE9ubHkgcmVw
b3J0IGJsb2NrZWQKKyAgICAgICAgc2NyaXB0IGV4ZWN1dGlvbiB0byB0aGUgV2ViIEluc3BlY3Rv
ciBpZiB3ZSBoYXZlIGEgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgorICAgICAgICAoV2ViQ29y
ZTo6Q1NQU291cmNlTGlzdDo6YWRkU291cmNlU2VsZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1BTb3VyY2VMaXN0OjphZGRTb3VyY2VTdGFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTUFNvdXJjZUxpc3Q6OmFkZFNvdXJjZVVuc2FmZUlubGluZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjphZGRTb3VyY2VVbnNhZmVFdmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OmdhdGhlclJlcG9ydFVS
SXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojpz
ZWN1cml0eU9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJp
dHlQb2xpY3k6OnVybCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJp
dHlQb2xpY3k6OmNvbXBsZXRlVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWN1cml0eVBvbGljeTo6ZW5mb3JjZVNhbmRib3hGbGFncyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5Lmg6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50U2VjdXJpdHlQb2xpY3k6OmVuZm9yY2VTYW5kYm94RmxhZ3MpOiBBY2N1bXVsYXRlcyB0
aGUgcGFyc2VkIHNhbmRib3ggZmxhZ3MuIFdlCisgICAgICAgIHdpbGwgYXBwbHkgdGhlIHNhbmRi
b3ggZmxhZ3MgaW4gQ29udGVudFNlY3VyaXR5UG9saWN5OjphcHBseVBvbGljeVRvU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyR2xvYmFsU2NvcGU6Oldvcmtlckdsb2JhbFNjb3Bl
KTogSW5zdGFudGlhdGUgQ29udGVudFNlY3VyaXR5UG9saWN5LgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyR2xvYmFsU2NvcGU6OmFwcGx5Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFk
ZXJzKTogTW92ZSBpbnN0YW50aWF0aW9uIG9mCisgICAgICAgIENvbnRlbnRTZWN1cml0eVBvbGlj
eSBmcm9tIGhlcmUgdG8gY29uc3RydWN0b3IuCisKIDIwMTYtMDItMDEgIERhbiBCZXJuc3RlaW4g
IDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBUcmllZCB0byBmaXggYSBidWlsZCBhZnRlciBy
MTk1ODk5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMTE1OTFkN2VkNDY3MGY1Zjc5MmYz
ZWFkYTgxZjE5YmVhNTUzOGNhZC4uNWM1YTUyOWJmNGM3MzQ1ZmY0ZDY4NDE3YzI1NmJjZDc5OTMw
N2U3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01MTI4LDcgKzUxMjgsNyBAQCB2b2lk
IERvY3VtZW50Ojppbml0U2VjdXJpdHlDb250ZXh0KCkKICAgICAgICAgLy8gVGhpcyBjYW4gb2Nj
dXIgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KCkuCiAgICAgICAg
IHNldENvb2tpZVVSTChVUkwoUGFyc2VkVVJMU3RyaW5nLCBlbXB0eVN0cmluZygpKSk7CiAgICAg
ICAgIHNldFNlY3VyaXR5T3JpZ2luUG9saWN5KFNlY3VyaXR5T3JpZ2luUG9saWN5OjpjcmVhdGUo
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZVVuaXF1ZSgpKSk7Ci0gICAgICAgIHNldENvbnRlbnRTZWN1
cml0eVBvbGljeShzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRTZWN1cml0eVBvbGljeT4odGhpcykp
OworICAgICAgICBzZXRDb250ZW50U2VjdXJpdHlQb2xpY3koc3RkOjptYWtlX3VuaXF1ZTxDb250
ZW50U2VjdXJpdHlQb2xpY3k+KCp0aGlzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTUxNDEsNyArNTE0MSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQoKQog
ICAgICAgICBhcHBseUNvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnRTYW5kYm94KCk7CiAKICAg
ICBzZXRTZWN1cml0eU9yaWdpblBvbGljeShTZWN1cml0eU9yaWdpblBvbGljeTo6Y3JlYXRlKGlz
U2FuZGJveGVkKFNhbmRib3hPcmlnaW4pID8gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZVVuaXF1ZSgp
IDogU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtX3VybCkpKTsKLSAgICBzZXRDb250ZW50U2VjdXJp
dHlQb2xpY3koc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50U2VjdXJpdHlQb2xpY3k+KHRoaXMpKTsK
KyAgICBzZXRDb250ZW50U2VjdXJpdHlQb2xpY3koc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50U2Vj
dXJpdHlQb2xpY3k+KCp0aGlzKSk7CiAKICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gdGhp
cy0+c2V0dGluZ3MoKSkgewogICAgICAgICBpZiAoIXNldHRpbmdzLT53ZWJTZWN1cml0eUVuYWJs
ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeS5jcHAKaW5kZXggNTk2NWRiZmY3NWIwZjc5MmVlM2Y1NzAwYWM0ZDIyOWQzN2JmODE0MS4u
NTQxZDA4NjZiMjUxMjdlNzAwNDIxMTdhOGY2N2M5MjdlOWI1Y2RiNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0zOCwxMSAr
MzgsOCBAQAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJT
Y2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRl
ICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5o
IgotI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+CiAjaW5jbHVkZSA8aW5z
cGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KQEAgLTIxNSw3ICsyMTIsNyBAQCBzdGF0
aWMgYm9vbCBpc1NvdXJjZUxpc3ROb25lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGNsYXNzIENT
UFNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgQ1NQU291cmNlKENvbnRlbnRTZWN1cml0eVBvbGljeSog
cG9saWN5LCBjb25zdCBTdHJpbmcmIHNjaGVtZSwgY29uc3QgU3RyaW5nJiBob3N0LCBpbnQgcG9y
dCwgY29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCBwb3J0SGFz
V2lsZGNhcmQpCisgICAgQ1NQU291cmNlKGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgcG9s
aWN5LCBjb25zdCBTdHJpbmcmIHNjaGVtZSwgY29uc3QgU3RyaW5nJiBob3N0LCBpbnQgcG9ydCwg
Y29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCBwb3J0SGFzV2ls
ZGNhcmQpCiAgICAgICAgIDogbV9wb2xpY3kocG9saWN5KQogICAgICAgICAsIG1fc2NoZW1lKHNj
aGVtZSkKICAgICAgICAgLCBtX2hvc3QoaG9zdCkKQEAgLTIzOCwxNCArMjM1LDggQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBib29sIHNjaGVtZU1hdGNoZXMoY29uc3QgVVJMJiB1cmwpIGNvbnN0
CiAgICAgewotICAgICAgICBpZiAobV9zY2hlbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgcHJvdGVjdGVkUmVzb3VyY2VTY2hlbWUobV9wb2xpY3ktPnNlY3VyaXR5T3JpZ2luKCkt
PnByb3RvY29sKCkpOwotI2lmIEVOQUJMRShDU1BfTkVYVCkKLSAgICAgICAgICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90ZWN0ZWRSZXNvdXJjZVNjaGVtZSwgImh0dHAi
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKTsK
LSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodXJsLnBy
b3RvY29sKCksIHByb3RlY3RlZFJlc291cmNlU2NoZW1lKTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAobV9zY2hlbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fcG9saWN5LnByb3Rv
Y29sTWF0Y2hlc1NlbGYodXJsKTsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UodXJsLnByb3RvY29sKCksIG1fc2NoZW1lKTsKICAgICB9CiAKQEAgLTI5Miw3ICsyODMsNyBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBpc1NjaGVtZU9ubHkoKSBjb25zdCB7IHJldHVybiBtX2hv
c3QuaXNFbXB0eSgpOyB9CiAKLSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIG1fcG9saWN5Owor
ICAgIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgbV9wb2xpY3k7CiAgICAgU3RyaW5nIG1f
c2NoZW1lOwogICAgIFN0cmluZyBtX2hvc3Q7CiAgICAgaW50IG1fcG9ydDsKQEAgLTMwNCwxMiAr
Mjk1LDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIENTUFNvdXJjZUxpc3QgewogcHVibGljOgotICAg
IENTUFNvdXJjZUxpc3QoQ29udGVudFNlY3VyaXR5UG9saWN5KiwgY29uc3QgU3RyaW5nJiBkaXJl
Y3RpdmVOYW1lKTsKKyAgICBDU1BTb3VyY2VMaXN0KGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGlj
eSYsIGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSk7CiAKICAgICB2b2lkIHBhcnNlKGNvbnN0
IFN0cmluZyYpOwogICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBVUkwmKTsKICAgICBib29sIGFsbG93
SW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0lubGluZTsgfQogICAgIGJvb2wgYWxsb3dF
dmFsKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0V2YWw7IH0KKyAgICBib29sIGFsbG93U2VsZigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTZWxmOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBwYXJz
ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOwpAQCAtMzIwLDI1ICszMTIs
MTggQEAgcHJpdmF0ZToKICAgICBib29sIHBhcnNlUG9ydChjb25zdCBVQ2hhciogYmVnaW4sIGNv
bnN0IFVDaGFyKiBlbmQsIGludCYgcG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKICAgICBi
b29sIHBhcnNlUGF0aChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmlu
ZyYgcGF0aCk7CiAKLSAgICB2b2lkIGFkZFNvdXJjZVNlbGYoKTsKLSAgICB2b2lkIGFkZFNvdXJj
ZVN0YXIoKTsKLSAgICB2b2lkIGFkZFNvdXJjZVVuc2FmZUlubGluZSgpOwotICAgIHZvaWQgYWRk
U291cmNlVW5zYWZlRXZhbCgpOwotCi0gICAgQ29udGVudFNlY3VyaXR5UG9saWN5KiBtX3BvbGlj
eTsKKyAgICBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIG1fcG9saWN5OwogICAgIFZlY3Rv
cjxDU1BTb3VyY2U+IG1fbGlzdDsKICAgICBTdHJpbmcgbV9kaXJlY3RpdmVOYW1lOwotICAgIGJv
b2wgbV9hbGxvd1N0YXI7Ci0gICAgYm9vbCBtX2FsbG93SW5saW5lOwotICAgIGJvb2wgbV9hbGxv
d0V2YWw7CisgICAgYm9vbCBtX2FsbG93U2VsZiB7IGZhbHNlIH07CisgICAgYm9vbCBtX2FsbG93
U3RhciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2FsbG93SW5saW5lIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fYWxsb3dFdmFsIHsgZmFsc2UgfTsKIH07CiAKLUNTUFNvdXJjZUxpc3Q6OkNTUFNvdXJj
ZUxpc3QoQ29udGVudFNlY3VyaXR5UG9saWN5KiBwb2xpY3ksIGNvbnN0IFN0cmluZyYgZGlyZWN0
aXZlTmFtZSkKK0NTUFNvdXJjZUxpc3Q6OkNTUFNvdXJjZUxpc3QoY29uc3QgQ29udGVudFNlY3Vy
aXR5UG9saWN5JiBwb2xpY3ksIGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSkKICAgICA6IG1f
cG9saWN5KHBvbGljeSkKICAgICAsIG1fZGlyZWN0aXZlTmFtZShkaXJlY3RpdmVOYW1lKQotICAg
ICwgbV9hbGxvd1N0YXIoZmFsc2UpCi0gICAgLCBtX2FsbG93SW5saW5lKGZhbHNlKQotICAgICwg
bV9hbGxvd0V2YWwoZmFsc2UpCiB7CiB9CiAKQEAgLTM1OCw2ICszNDMsOSBAQCBib29sIENTUFNv
dXJjZUxpc3Q6Om1hdGNoZXMoY29uc3QgVVJMJiB1cmwpCiAKICAgICBVUkwgZWZmZWN0aXZlVVJM
ID0gU2VjdXJpdHlPcmlnaW46OnNob3VsZFVzZUlubmVyVVJMKHVybCkgPyBTZWN1cml0eU9yaWdp
bjo6ZXh0cmFjdElubmVyVVJMKHVybCkgOiB1cmw7CiAKKyAgICBpZiAobV9hbGxvd1NlbGYgJiYg
bV9wb2xpY3kudXJsTWF0Y2hlc1NlbGYoZWZmZWN0aXZlVVJMKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9saXN0KSB7CiAgICAgICAgIGlmIChlbnRy
eS5tYXRjaGVzKGVmZmVjdGl2ZVVSTCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5
MywxMCArMzgxLDEwIEBAIHZvaWQgQ1NQU291cmNlTGlzdDo6cGFyc2UoY29uc3QgVUNoYXIqIGJl
Z2luLCBjb25zdCBVQ2hhciogZW5kKQogICAgICAgICAgICAgaWYgKHNjaGVtZS5pc0VtcHR5KCkg
JiYgaG9zdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBpZiAoaXNEaXJlY3RpdmVOYW1lKGhvc3QpKQotICAgICAgICAgICAgICAgIG1fcG9saWN5LT5y
ZXBvcnREaXJlY3RpdmVBc1NvdXJjZUV4cHJlc3Npb24obV9kaXJlY3RpdmVOYW1lLCBob3N0KTsK
KyAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnREaXJlY3RpdmVBc1NvdXJjZUV4cHJlc3Np
b24obV9kaXJlY3RpdmVOYW1lLCBob3N0KTsKICAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQoQ1NQ
U291cmNlKG1fcG9saWN5LCBzY2hlbWUsIGhvc3QsIHBvcnQsIHBhdGgsIGhvc3RIYXNXaWxkY2Fy
ZCwgcG9ydEhhc1dpbGRjYXJkKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9wb2xp
Y3ktPnJlcG9ydEludmFsaWRTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZlTmFtZSwgU3RyaW5n
KGJlZ2luU291cmNlLCBwb3NpdGlvbiAtIGJlZ2luU291cmNlKSk7CisgICAgICAgICAgICBtX3Bv
bGljeS5yZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lvbihtX2RpcmVjdGl2ZU5hbWUsIFN0cmlu
ZyhiZWdpblNvdXJjZSwgcG9zaXRpb24gLSBiZWdpblNvdXJjZSkpOwogCiAgICAgICAgIEFTU0VS
VChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNwYWNlKCpwb3NpdGlvbikpOwogICAgICB9CkBA
IC00MTUsMjIgKzQwMywyMiBAQCBib29sIENTUFNvdXJjZUxpc3Q6OnBhcnNlU291cmNlKGNvbnN0
IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzYwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoZW5kIC0gYmVnaW4gPT0gMSAmJiAqYmVnaW4gPT0gJyonKSB7
Ci0gICAgICAgIGFkZFNvdXJjZVN0YXIoKTsKKyAgICAgICAgbV9hbGxvd1N0YXIgPSB0cnVlOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2luLCAiJ3NlbGYnIikpIHsKLSAgICAgICAgYWRk
U291cmNlU2VsZigpOworICAgICAgICBtX2FsbG93U2VsZiA9IHRydWU7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShi
ZWdpbiwgZW5kIC0gYmVnaW4sICIndW5zYWZlLWlubGluZSciKSkgewotICAgICAgICBhZGRTb3Vy
Y2VVbnNhZmVJbmxpbmUoKTsKKyAgICAgICAgbV9hbGxvd0lubGluZSA9IHRydWU7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICIndW5zYWZlLWV2YWwnIikpIHsKLSAgICAgICAgYWRk
U291cmNlVW5zYWZlRXZhbCgpOworICAgICAgICBtX2FsbG93RXZhbCA9IHRydWU7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTkwLDcgKzU3OCw3IEBAIGJvb2wgQ1NQU291cmNl
TGlzdDo6cGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3Ry
aW5nJiBwYXRoCiAgICAgLy8gcGF0aC90by9maWxlLmpzP3F1ZXJ5PXN0cmluZyB8fCBwYXRoL3Rv
L2ZpbGUuanMjYW5jaG9yCiAgICAgLy8gICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBeCiAgICAgaWYgKHBvc2l0aW9uIDwgZW5kKQotICAgICAgICBtX3BvbGlj
eS0+cmVwb3J0SW52YWxpZFBhdGhDaGFyYWN0ZXIobV9kaXJlY3RpdmVOYW1lLCBTdHJpbmcoYmVn
aW4sIGVuZCAtIGJlZ2luKSwgKnBvc2l0aW9uKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52
YWxpZFBhdGhDaGFyYWN0ZXIobV9kaXJlY3RpdmVOYW1lLCBTdHJpbmcoYmVnaW4sIGVuZCAtIGJl
Z2luKSwgKnBvc2l0aW9uKTsKIAogICAgIHBhdGggPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMo
U3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7CiAKQEAgLTYzMCwyOSArNjE4LDkgQEAg
Ym9vbCBDU1BTb3VyY2VMaXN0OjpwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBV
Q2hhciogZW5kLCBpbnQmIHBvcnQsIGIKICAgICByZXR1cm4gb2s7CiB9CiAKLXZvaWQgQ1NQU291
cmNlTGlzdDo6YWRkU291cmNlU2VsZigpCi17Ci0gICAgbV9saXN0LmFwcGVuZChDU1BTb3VyY2Uo
bV9wb2xpY3ksIG1fcG9saWN5LT5zZWN1cml0eU9yaWdpbigpLT5wcm90b2NvbCgpLCBtX3BvbGlj
eS0+c2VjdXJpdHlPcmlnaW4oKS0+aG9zdCgpLCBtX3BvbGljeS0+c2VjdXJpdHlPcmlnaW4oKS0+
cG9ydCgpLCBTdHJpbmcoKSwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgQ1NQU291cmNlTGlz
dDo6YWRkU291cmNlU3RhcigpCi17Ci0gICAgbV9hbGxvd1N0YXIgPSB0cnVlOwotfQotCi12b2lk
IENTUFNvdXJjZUxpc3Q6OmFkZFNvdXJjZVVuc2FmZUlubGluZSgpCi17Ci0gICAgbV9hbGxvd0lu
bGluZSA9IHRydWU7Ci19Ci0KLXZvaWQgQ1NQU291cmNlTGlzdDo6YWRkU291cmNlVW5zYWZlRXZh
bCgpCi17Ci0gICAgbV9hbGxvd0V2YWwgPSB0cnVlOwotfQotCiBjbGFzcyBDU1BEaXJlY3RpdmUg
ewogcHVibGljOgotICAgIENTUERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIENvbnRlbnRTZWN1cml0eVBvbGljeSogcG9saWN5KQorICAgIENTUERpcmVj
dGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IENvbnRl
bnRTZWN1cml0eVBvbGljeSYgcG9saWN5KQogICAgICAgICA6IG1fbmFtZShuYW1lKQogICAgICAg
ICAsIG1fdGV4dChuYW1lICsgJyAnICsgdmFsdWUpCiAgICAgICAgICwgbV9wb2xpY3kocG9saWN5
KQpAQCAtNjYyLDE3ICs2MzAsMTcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgdGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgY29uc3QgQ29udGVu
dFNlY3VyaXR5UG9saWN5KiBwb2xpY3koKSBjb25zdCB7IHJldHVybiBtX3BvbGljeTsgfQorICAg
IGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgcG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9w
b2xpY3k7IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX3Rl
eHQ7Ci0gICAgQ29udGVudFNlY3VyaXR5UG9saWN5KiBtX3BvbGljeTsKKyAgICBjb25zdCBDb250
ZW50U2VjdXJpdHlQb2xpY3kmIG1fcG9saWN5OwogfTsKIAogY2xhc3MgTWVkaWFMaXN0RGlyZWN0
aXZlIDogcHVibGljIENTUERpcmVjdGl2ZSB7CiBwdWJsaWM6Ci0gICAgTWVkaWFMaXN0RGlyZWN0
aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5KiBwb2xpY3kpCisgICAgTWVkaWFMaXN0RGlyZWN0aXZlKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBw
b2xpY3kpCiAgICAgICAgIDogQ1NQRGlyZWN0aXZlKG5hbWUsIHZhbHVlLCBwb2xpY3kpCiAgICAg
ewogICAgICAgICBwYXJzZSh2YWx1ZSk7CkBAIC02OTMsNyArNjYxLDcgQEAgcHJpdmF0ZToKIAog
ICAgICAgICAvLyAncGx1Z2luLXR5cGVzIF9fX187JyBPUiAncGx1Z2luLXR5cGVzOycKICAgICAg
ICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcG9saWN5KCktPnJlcG9ydElu
dmFsaWRQbHVnaW5UeXBlcyh2YWx1ZSk7CisgICAgICAgICAgICBwb2xpY3koKS5yZXBvcnRJbnZh
bGlkUGx1Z2luVHlwZXModmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
QEAgLTcwOSw3ICs2NzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYmVnaW4gPSBwb3NpdGlv
bjsKICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHk8aXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBv
c2l0aW9uLCBlbmQpKSB7CiAgICAgICAgICAgICAgICAgc2tpcFdoaWxlPGlzTm90QVNDSUlTcGFj
ZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICAgICAgcG9saWN5KCktPnJlcG9ydEludmFs
aWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAgICAgICAg
ICAgICAgICBwb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBw
b3NpdGlvbiAtIGJlZ2luKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBza2lwV2hpbGU8aXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9u
LCBlbmQpOwpAQCAtNzE4LDcgKzY4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyAgICAg
IF4KICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJy8nKSkgewog
ICAgICAgICAgICAgICAgIHNraXBXaGlsZTxpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQp
OwotICAgICAgICAgICAgICAgIHBvbGljeSgpLT5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3Ry
aW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgcG9saWN5KCku
cmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikp
OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC03MjYsNyAr
Njk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vICAgICAgIF4KICAgICAgICAgICAgIGlm
ICghc2tpcEV4YWN0bHk8aXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKSB7CiAg
ICAgICAgICAgICAgICAgc2tpcFdoaWxlPGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
Ci0gICAgICAgICAgICAgICAgcG9saWN5KCktPnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJp
bmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBwb2xpY3koKS5y
ZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBz
a2lwV2hpbGU8aXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwpAQCAtNzM1LDcg
KzcwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyAgICAgICAgICAgIF4gICAgICAgICAg
ICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICBeCiAgICAgICAgICAgICBpZiAocG9zaXRp
b24gPCBlbmQgJiYgaXNOb3RBU0NJSVNwYWNlKCpwb3NpdGlvbikpIHsKICAgICAgICAgICAgICAg
ICBza2lwV2hpbGU8aXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAg
ICAgICBwb2xpY3koKS0+cmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9z
aXRpb24gLSBiZWdpbikpOworICAgICAgICAgICAgICAgIHBvbGljeSgpLnJlcG9ydEludmFsaWRQ
bHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fcGx1Z2luVHlwZXMu
YWRkKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwpAQCAtNzQ5LDcgKzcxNyw3IEBA
IHByaXZhdGU6CiAKIGNsYXNzIFNvdXJjZUxpc3REaXJlY3RpdmUgOiBwdWJsaWMgQ1NQRGlyZWN0
aXZlIHsKIHB1YmxpYzoKLSAgICBTb3VyY2VMaXN0RGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5KiBwb2xpY3kpCisg
ICAgU291cmNlTGlzdERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgcG9saWN5KQogICAgICAgICA6IENT
UERpcmVjdGl2ZShuYW1lLCB2YWx1ZSwgcG9saWN5KQogICAgICAgICAsIG1fc291cmNlTGlzdChw
b2xpY3ksIG5hbWUpCiAgICAgewpAQCAtNzU4LDcgKzcyNiwxMCBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGFsbG93cyhjb25zdCBVUkwmIHVybCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3NvdXJj
ZUxpc3QubWF0Y2hlcyh1cmwuaXNFbXB0eSgpID8gcG9saWN5KCktPnVybCgpIDogdXJsKTsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSByZXR1cm5pbmcgZmFsc2UgZm9y
IGFuIGVtcHR5IFVSTC4KKyAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gbV9zb3VyY2VMaXN0LmFsbG93U2VsZigpOworICAgICAgICByZXR1cm4gbV9zb3VyY2VM
aXN0Lm1hdGNoZXModXJsKTsKICAgICB9CiAKICAgICBib29sIGFsbG93SW5saW5lKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VMaXN0LmFsbG93SW5saW5lKCk7IH0KQEAgLTc3MSw4ICs3NDIsOCBA
QCBwcml2YXRlOgogY2xhc3MgQ1NQRGlyZWN0aXZlTGlzdCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3Rp
dmVMaXN0PiBjcmVhdGUoQ29udGVudFNlY3VyaXR5UG9saWN5KiwgY29uc3QgU3RyaW5nJiwgQ29u
dGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZSk7Ci0gICAgQ1NQRGlyZWN0aXZlTGlzdChDb250
ZW50U2VjdXJpdHlQb2xpY3kqLCBDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXJUeXBlKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZUxpc3Q+IGNyZWF0ZShDb250ZW50
U2VjdXJpdHlQb2xpY3kmLCBjb25zdCBTdHJpbmcmLCBDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFk
ZXJUeXBlKTsKKyAgICBDU1BEaXJlY3RpdmVMaXN0KENvbnRlbnRTZWN1cml0eVBvbGljeSYsIENv
bnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUpOwogCiAgICAgY29uc3QgU3RyaW5nJiBoZWFk
ZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcjsgfQogICAgIENvbnRlbnRTZWN1cml0eVBvbGlj
eUhlYWRlclR5cGUgaGVhZGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVyVHlwZTsgfQpA
QCAtNzk1LDExICs3NjYsMTAgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dGb3JtQWN0aW9uKGNv
bnN0IFVSTCYsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdDsK
ICAgICBib29sIGFsbG93QmFzZVVSSShjb25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7CiAKLSAgICB2b2lkIGdhdGhlclJlcG9ydFVSSXMoRE9N
U3RyaW5nTGlzdCYpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgZXZhbERpc2FibGVkRXJyb3JN
ZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2U7IH0KICAg
ICBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uIHJlZmxlY3Rl
ZFhTU0Rpc3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlv
bjsgfQogICAgIGJvb2wgaXNSZXBvcnRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9yZXBvcnRPbmx5
OyB9Ci0gICAgY29uc3QgVmVjdG9yPFVSTD4mIHJlcG9ydFVSSXMoKSBjb25zdCB7IHJldHVybiBt
X3JlcG9ydFVSSXM7IH0KKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVwb3J0VVJJcygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwb3J0VVJJczsgfQogCiBwcml2YXRlOgogICAgIHZvaWQgcGFyc2Uo
Y29uc3QgU3RyaW5nJik7CkBAIC04MzIsNyArODAyLDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
ZGVueUlmRW5mb3JjaW5nUG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9yZXBvcnRPbmx5OyB9CiAK
LSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIG1fcG9saWN5OworICAgIC8vIEZJWE1FOiBNYWtl
IHRoaXMgYSBjb25zdCByZWZlcmVuY2Ugb25jZSB3ZSB0ZWFjaCBhcHBseVNhbmRib3hQb2xpY3ko
KSB0byBzdG9yZSBpdHMgcG9saWN5IGFzIG9wcG9zZWQgdG8gYXBwbHlpbmcgaXQgZGlyZWN0bHkg
b250byBDb250ZW50U2VjdXJpdHlQb2xpY3kuCisgICAgQ29udGVudFNlY3VyaXR5UG9saWN5JiBt
X3BvbGljeTsKIAogICAgIFN0cmluZyBtX2hlYWRlcjsKICAgICBDb250ZW50U2VjdXJpdHlQb2xp
Y3lIZWFkZXJUeXBlIG1faGVhZGVyVHlwZTsKQEAgLTg1NCwxMiArODI1LDEyIEBAIHByaXZhdGU6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUxpc3REaXJlY3RpdmU+IG1fc2NyaXB0U3JjOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VMaXN0RGlyZWN0aXZlPiBtX3N0eWxlU3JjOwogCi0g
ICAgVmVjdG9yPFVSTD4gbV9yZXBvcnRVUklzOworICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVwb3J0
VVJJczsKIAogICAgIFN0cmluZyBtX2V2YWxEaXNhYmxlZEVycm9yTWVzc2FnZTsKIH07CiAKLUNT
UERpcmVjdGl2ZUxpc3Q6OkNTUERpcmVjdGl2ZUxpc3QoQ29udGVudFNlY3VyaXR5UG9saWN5KiBw
b2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUgdHlwZSkKK0NTUERpcmVjdGl2
ZUxpc3Q6OkNTUERpcmVjdGl2ZUxpc3QoQ29udGVudFNlY3VyaXR5UG9saWN5JiBwb2xpY3ksIENv
bnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUgdHlwZSkKICAgICA6IG1fcG9saWN5KHBvbGlj
eSkKICAgICAsIG1faGVhZGVyVHlwZSh0eXBlKQogICAgICwgbV9yZXBvcnRPbmx5KGZhbHNlKQpA
QCAtODY5LDcgKzg0MCw3IEBAIENTUERpcmVjdGl2ZUxpc3Q6OkNTUERpcmVjdGl2ZUxpc3QoQ29u
dGVudFNlY3VyaXR5UG9saWN5KiBwb2xpY3ksIENvbnRlbnRTZWN1cml0CiAgICAgbV9yZXBvcnRP
bmx5ID0gKHR5cGUgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZTo6UmVwb3J0IHx8
IHR5cGUgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZTo6UHJlZml4ZWRSZXBvcnQp
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlTGlzdD4gQ1NQRGlyZWN0aXZlTGlz
dDo6Y3JlYXRlKENvbnRlbnRTZWN1cml0eVBvbGljeSogcG9saWN5LCBjb25zdCBTdHJpbmcmIGhl
YWRlciwgQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZSB0eXBlKQorc3RkOjp1bmlxdWVf
cHRyPENTUERpcmVjdGl2ZUxpc3Q+IENTUERpcmVjdGl2ZUxpc3Q6OmNyZWF0ZShDb250ZW50U2Vj
dXJpdHlQb2xpY3kmIHBvbGljeSwgY29uc3QgU3RyaW5nJiBoZWFkZXIsIENvbnRlbnRTZWN1cml0
eVBvbGljeUhlYWRlclR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGRpcmVjdGl2ZXMgPSBzdGQ6Om1h
a2VfdW5pcXVlPENTUERpcmVjdGl2ZUxpc3Q+KHBvbGljeSwgdHlwZSk7CiAgICAgZGlyZWN0aXZl
cy0+cGFyc2UoaGVhZGVyKTsKQEAgLTg4MCw3ICs4NTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQ
RGlyZWN0aXZlTGlzdD4gQ1NQRGlyZWN0aXZlTGlzdDo6Y3JlYXRlKENvbnRlbnRTZWN1cml0eVBv
bGljeQogICAgIH0KIAogICAgIGlmIChkaXJlY3RpdmVzLT5pc1JlcG9ydE9ubHkoKSAmJiBkaXJl
Y3RpdmVzLT5yZXBvcnRVUklzKCkuaXNFbXB0eSgpKQotICAgICAgICBwb2xpY3ktPnJlcG9ydE1p
c3NpbmdSZXBvcnRVUkkoaGVhZGVyKTsKKyAgICAgICAgcG9saWN5LnJlcG9ydE1pc3NpbmdSZXBv
cnRVUkkoaGVhZGVyKTsKIAogICAgIHJldHVybiBkaXJlY3RpdmVzOwogfQpAQCAtODg4LDcgKzg1
OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVMaXN0PiBDU1BEaXJlY3RpdmVMaXN0
OjpjcmVhdGUoQ29udGVudFNlY3VyaXR5UG9saWN5CiB2b2lkIENTUERpcmVjdGl2ZUxpc3Q6OnJl
cG9ydFZpb2xhdGlvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQsIGNvbnN0IFN0cmluZyYg
ZWZmZWN0aXZlRGlyZWN0aXZlLCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBV
UkwmIGJsb2NrZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRp
bmFsTnVtYmVyJiBjb250ZXh0TGluZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlKSBjb25zdAogewog
ICAgIFN0cmluZyBtZXNzYWdlID0gbV9yZXBvcnRPbmx5ID8gIltSZXBvcnQgT25seV0gIiArIGNv
bnNvbGVNZXNzYWdlIDogY29uc29sZU1lc3NhZ2U7Ci0gICAgbV9wb2xpY3ktPnJlcG9ydFZpb2xh
dGlvbihkaXJlY3RpdmVUZXh0LCBlZmZlY3RpdmVEaXJlY3RpdmUsIG1lc3NhZ2UsIGJsb2NrZWRV
UkwsIG1fcmVwb3J0VVJJcywgbV9oZWFkZXIsIGNvbnRleHRVUkwsIGNvbnRleHRMaW5lLCBzdGF0
ZSk7CisgICAgbV9wb2xpY3kucmVwb3J0VmlvbGF0aW9uKGRpcmVjdGl2ZVRleHQsIGVmZmVjdGl2
ZURpcmVjdGl2ZSwgbWVzc2FnZSwgYmxvY2tlZFVSTCwgbV9yZXBvcnRVUklzLCBtX2hlYWRlciwg
Y29udGV4dFVSTCwgY29udGV4dExpbmUsIHN0YXRlKTsKIH0KIAogYm9vbCBDU1BEaXJlY3RpdmVM
aXN0OjpjaGVja0V2YWwoU291cmNlTGlzdERpcmVjdGl2ZSogZGlyZWN0aXZlKSBjb25zdApAQCAt
OTMxLDcgKzkwMiw3IEBAIGJvb2wgQ1NQRGlyZWN0aXZlTGlzdDo6Y2hlY2tFdmFsQW5kUmVwb3J0
VmlvbGF0aW9uKFNvdXJjZUxpc3REaXJlY3RpdmUqIGRpcmVjdGl2CiAKICAgICByZXBvcnRWaW9s
YXRpb24oZGlyZWN0aXZlLT50ZXh0KCksIHNjcmlwdFNyYywgY29uc29sZU1lc3NhZ2UgKyAiXCIi
ICsgZGlyZWN0aXZlLT50ZXh0KCkgKyAiXCIuIiArIHN1ZmZpeCArICJcbiIsIFVSTCgpLCBjb250
ZXh0VVJMLCBjb250ZXh0TGluZSwgc3RhdGUpOwogICAgIGlmICghbV9yZXBvcnRPbmx5KSB7Ci0g
ICAgICAgIG1fcG9saWN5LT5yZXBvcnRCbG9ja2VkU2NyaXB0RXhlY3V0aW9uVG9JbnNwZWN0b3Io
ZGlyZWN0aXZlLT50ZXh0KCkpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRCbG9ja2VkU2NyaXB0
RXhlY3V0aW9uVG9JbnNwZWN0b3IoZGlyZWN0aXZlLT50ZXh0KCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtOTYzLDcgKzkzNCw3IEBAIGJvb2wg
Q1NQRGlyZWN0aXZlTGlzdDo6Y2hlY2tJbmxpbmVBbmRSZXBvcnRWaW9sYXRpb24oU291cmNlTGlz
dERpcmVjdGl2ZSogZGlyZWN0CiAKICAgICBpZiAoIW1fcmVwb3J0T25seSkgewogICAgICAgICBp
ZiAoaXNTY3JpcHQpCi0gICAgICAgICAgICBtX3BvbGljeS0+cmVwb3J0QmxvY2tlZFNjcmlwdEV4
ZWN1dGlvblRvSW5zcGVjdG9yKGRpcmVjdGl2ZS0+dGV4dCgpKTsKKyAgICAgICAgICAgIG1fcG9s
aWN5LnJlcG9ydEJsb2NrZWRTY3JpcHRFeGVjdXRpb25Ub0luc3BlY3RvcihkaXJlY3RpdmUtPnRl
eHQoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBA
IC0xMTEzLDEyICsxMDg0LDYgQEAgYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjphbGxvd0Nvbm5lY3RU
b1NvdXJjZShjb25zdCBVUkwmIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWMKICAgICAgICAgKG1f
cmVwb3J0T25seSB8fCBjaGVja1NvdXJjZShvcGVyYXRpdmVEaXJlY3RpdmUobV9jb25uZWN0U3Jj
LmdldCgpKSwgdXJsKSk7CiB9CiAKLXZvaWQgQ1NQRGlyZWN0aXZlTGlzdDo6Z2F0aGVyUmVwb3J0
VVJJcyhET01TdHJpbmdMaXN0JiBsaXN0KSBjb25zdAotewotICAgIGZvciAoYXV0byYgdXJpIDog
bV9yZXBvcnRVUklzKQotICAgICAgICBsaXN0LmFwcGVuZCh1cmkuc3RyaW5nKCkpOwotfQotCiBi
b29sIENTUERpcmVjdGl2ZUxpc3Q6OmFsbG93Rm9ybUFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25z
dAogewogICAgIHJldHVybiByZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5
OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQgPwpAQCAtMTE4Myw3ICsxMTQ4LDcgQEAgYm9v
bCBDU1BEaXJlY3RpdmVMaXN0OjpwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hhciogYmVnaW4sIGNv
bnN0IFVDaGFyKiBlbmQsIFN0cmkKICAgICAvLyBUaGUgZGlyZWN0aXZlLW5hbWUgbXVzdCBiZSBu
b24tZW1wdHkuCiAgICAgaWYgKG5hbWVCZWdpbiA9PSBwb3NpdGlvbikgewogICAgICAgICBza2lw
V2hpbGU8aXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgbV9wb2xpY3kt
PnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0g
bmFtZUJlZ2luKSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZl
KFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJlZ2luKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKQEAgLTExOTQsNyArMTE1OSw3IEBAIGJvb2wgQ1NQRGlyZWN0aXZl
TGlzdDo6cGFyc2VEaXJlY3RpdmUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
LCBTdHJpCiAKICAgICBpZiAoIXNraXBFeGFjdGx5PGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVu
ZCkpIHsKICAgICAgICAgc2tpcFdoaWxlPGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
Ci0gICAgICAgIG1fcG9saWN5LT5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFt
ZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdpbikpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRV
bnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdp
bikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMjA0LDcgKzExNjksNyBA
QCBib29sIENTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBiZWdp
biwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaQogICAgIHNraXBXaGlsZTxpc0RpcmVjdGl2ZVZhbHVl
Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKIAogICAgIGlmIChwb3NpdGlvbiAhPSBlbmQpIHsK
LSAgICAgICAgbV9wb2xpY3ktPnJlcG9ydEludmFsaWREaXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcihu
YW1lLCBTdHJpbmcodmFsdWVCZWdpbiwgZW5kIC0gdmFsdWVCZWdpbikpOworICAgICAgICBtX3Bv
bGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIobmFtZSwgU3RyaW5nKHZh
bHVlQmVnaW4sIGVuZCAtIHZhbHVlQmVnaW4pKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApAQCAtMTIxOSw3ICsxMTg0LDcgQEAgYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjpwYXJzZURp
cmVjdGl2ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmkKIHZvaWQg
Q1NQRGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBvcnRVUkkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogewogICAgIGlmICghbV9yZXBvcnRVUklzLmlzRW1wdHkoKSkgewot
ICAgICAgICBtX3BvbGljeS0+cmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAg
ICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTEyMzUsNyArMTIwMCw3IEBAIHZvaWQgQ1NQRGlyZWN0aXZlTGlzdDo6
cGFyc2VSZXBvcnRVUkkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQog
CiAgICAgICAgIGlmICh1cmxCZWdpbiA8IHBvc2l0aW9uKSB7CiAgICAgICAgICAgICBTdHJpbmcg
dXJsID0gU3RyaW5nKHVybEJlZ2luLCBwb3NpdGlvbiAtIHVybEJlZ2luKTsKLSAgICAgICAgICAg
IG1fcmVwb3J0VVJJcy5hcHBlbmQobV9wb2xpY3ktPmNvbXBsZXRlVVJMKHVybCkpOworICAgICAg
ICAgICAgbV9yZXBvcnRVUklzLmFwcGVuZCh1cmwpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
MTI0NSw3ICsxMjEwLDcgQEAgdGVtcGxhdGU8Y2xhc3MgQ1NQRGlyZWN0aXZlVHlwZT4KIHZvaWQg
Q1NQRGlyZWN0aXZlTGlzdDo6c2V0Q1NQRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+JiBkaXJl
Y3RpdmUpCiB7CiAgICAgaWYgKGRpcmVjdGl2ZSkgewotICAgICAgICBtX3BvbGljeS0+cmVwb3J0
RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNh
dGVEaXJlY3RpdmUobmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZGlyZWN0aXZl
ID0gc3RkOjptYWtlX3VuaXF1ZTxDU1BEaXJlY3RpdmVUeXBlPihuYW1lLCB2YWx1ZSwgbV9wb2xp
Y3kpOwpAQCAtMTI1NCwyNyArMTIxOSwyNyBAQCB2b2lkIENTUERpcmVjdGl2ZUxpc3Q6OnNldENT
UERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsCiB2b2lk
IENTUERpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgc2FuZGJveFBvbGljeSkKIHsKICAgICBpZiAobV9oYXZlU2FuZGJveFBv
bGljeSkgewotICAgICAgICBtX3BvbGljeS0+cmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUp
OworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgbV9oYXZlU2FuZGJveFBvbGljeSA9IHRydWU7CiAgICAg
U3RyaW5nIGludmFsaWRUb2tlbnM7Ci0gICAgbV9wb2xpY3ktPmVuZm9yY2VTYW5kYm94RmxhZ3Mo
U2VjdXJpdHlDb250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koc2FuZGJveFBvbGljeSwgaW52YWxp
ZFRva2VucykpOworICAgIG1fcG9saWN5LmVuZm9yY2VTYW5kYm94RmxhZ3MoU2VjdXJpdHlDb250
ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koc2FuZGJveFBvbGljeSwgaW52YWxpZFRva2VucykpOwog
ICAgIGlmICghaW52YWxpZFRva2Vucy5pc051bGwoKSkKLSAgICAgICAgbV9wb2xpY3ktPnJlcG9y
dEludmFsaWRTYW5kYm94RmxhZ3MoaW52YWxpZFRva2Vucyk7CisgICAgICAgIG1fcG9saWN5LnJl
cG9ydEludmFsaWRTYW5kYm94RmxhZ3MoaW52YWxpZFRva2Vucyk7CiB9CiAKIHZvaWQgQ1NQRGly
ZWN0aXZlTGlzdDo6cGFyc2VSZWZsZWN0ZWRYU1MoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQogewogICAgIGlmIChtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uICE9IENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTVW5zZXQpIHsKLSAgICAgICAgbV9wb2xp
Y3ktPnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAgbV9wb2xpY3kucmVw
b3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOwogICAgICAgICBtX3JlZmxlY3RlZFhTU0Rpc3Bv
c2l0aW9uID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWZsZWN0ZWRYU1NJbnZhbGlkOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAg
ICBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWZs
ZWN0ZWRYU1NJbnZhbGlkOwotICAgICAgICBtX3BvbGljeS0+cmVwb3J0SW52YWxpZFJlZmxlY3Rl
ZFhTUyh2YWx1ZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRSZWZsZWN0ZWRYU1Mo
dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjk2LDcgKzEyNjEsNyBAQCB2
b2lkIENTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVmbGVjdGVkWFNTKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZQogICAgICAgICBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9u
ID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpCbG9ja1JlZmxlY3RlZFhTUzsKICAgICBlbHNlIHsK
ICAgICAgICAgbV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiA9IENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6UmVmbGVjdGVkWFNTSW52YWxpZDsKLSAgICAgICAgbV9wb2xpY3ktPnJlcG9ydEludmFsaWRS
ZWZsZWN0ZWRYU1ModmFsdWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUmVmbGVj
dGVkWFNTKHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTMwNyw3ICsxMjcy
LDcgQEAgdm9pZCBDU1BEaXJlY3RpdmVMaXN0OjpwYXJzZVJlZmxlY3RlZFhTUyhjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUKICAgICAvLyB2YWx1ZTEgdmFsdWUyCiAgICAg
Ly8gICAgICAgIF4KICAgICBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uID0gQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpSZWZsZWN0ZWRYU1NJbnZhbGlkOwotICAgIG1fcG9saWN5LT5yZXBvcnRJbnZh
bGlkUmVmbGVjdGVkWFNTKHZhbHVlKTsKKyAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUmVmbGVj
dGVkWFNTKHZhbHVlKTsKIH0KIAogdm9pZCBDU1BEaXJlY3RpdmVMaXN0OjphZGREaXJlY3RpdmUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtMTM1MSwxMyArMTMx
NiwyNCBAQCB2b2lkIENTUERpcmVjdGl2ZUxpc3Q6OmFkZERpcmVjdGl2ZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgfQogI2VuZGlmCiAgICAgZWxzZQotICAg
ICAgICBtX3BvbGljeS0+cmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUobmFtZSk7CisgICAgICAg
IG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKG5hbWUpOworfQorCitDb250ZW50
U2VjdXJpdHlQb2xpY3k6OkNvbnRlbnRTZWN1cml0eVBvbGljeShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCZzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICwgbV9zYW5kYm94RmxhZ3MoU2FuZGJv
eE5vbmUpCit7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuc2VjdXJpdHlPcmln
aW4oKSk7CisgICAgYXV0byYgc2VjdXJpdHlPcmlnaW4gPSAqc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5zZWN1cml0eU9yaWdpbigpOworICAgIG1fc2VsZlNvdXJjZVByb3RvY29sID0gc2VjdXJpdHlP
cmlnaW4ucHJvdG9jb2woKTsKKyAgICBtX3NlbGZTb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENT
UFNvdXJjZT4oKnRoaXMsIG1fc2VsZlNvdXJjZVByb3RvY29sLCBzZWN1cml0eU9yaWdpbi5ob3N0
KCksIHNlY3VyaXR5T3JpZ2luLnBvcnQoKSwgZW1wdHlTdHJpbmcoKSwgZmFsc2UsIGZhbHNlKTsK
IH0KIAotQ29udGVudFNlY3VyaXR5UG9saWN5OjpDb250ZW50U2VjdXJpdHlQb2xpY3koU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICA6IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICwgbV9vdmVycmlk
ZUlubGluZVN0eWxlQWxsb3dlZChmYWxzZSkKK0NvbnRlbnRTZWN1cml0eVBvbGljeTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5KGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbikKKyAg
ICA6IG1fc2FuZGJveEZsYWdzKFNhbmRib3hOb25lKQogeworICAgIG1fc2VsZlNvdXJjZVByb3Rv
Y29sID0gc2VjdXJpdHlPcmlnaW4ucHJvdG9jb2woKTsKKyAgICBtX3NlbGZTb3VyY2UgPSBzdGQ6
Om1ha2VfdW5pcXVlPENTUFNvdXJjZT4oKnRoaXMsIG1fc2VsZlNvdXJjZVByb3RvY29sLCBzZWN1
cml0eU9yaWdpbi5ob3N0KCksIHNlY3VyaXR5T3JpZ2luLnBvcnQoKSwgZW1wdHlTdHJpbmcoKSwg
ZmFsc2UsIGZhbHNlKTsKIH0KIAogQ29udGVudFNlY3VyaXR5UG9saWN5Ojp+Q29udGVudFNlY3Vy
aXR5UG9saWN5KCkKQEAgLTE0MDAsOSArMTM3Niw5IEBAIHZvaWQgQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpkaWRSZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyLCBDb250ZW50U2VjdXJp
CiAKICAgICAgICAgLy8gaGVhZGVyMSxoZWFkZXIyIE9SIGhlYWRlcjEKICAgICAgICAgLy8gICAg
ICAgIF4gICAgICAgICAgICAgICAgICBeCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJl
Y3RpdmVMaXN0PiBwb2xpY3kgPSBDU1BEaXJlY3RpdmVMaXN0OjpjcmVhdGUodGhpcywgU3RyaW5n
KGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSwgdHlwZSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDU1BEaXJlY3RpdmVMaXN0PiBwb2xpY3kgPSBDU1BEaXJlY3RpdmVMaXN0OjpjcmVhdGUoKnRo
aXMsIFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbiksIHR5cGUpOwogICAgICAgICBpZiAo
IXBvbGljeS0+YWxsb3dFdmFsKDAsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3Rh
dHVzOjpTdXBwcmVzc1JlcG9ydCkpCi0gICAgICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmRpc2FibGVFdmFsKHBvbGljeS0+ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCkpOworICAg
ICAgICAgICAgbV9sYXN0UG9saWN5RXZhbERpc2FibGVkRXJyb3JNZXNzYWdlID0gcG9saWN5LT5l
dmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKTsKIAogICAgICAgICBtX3BvbGljaWVzLmFwcGVuZChw
b2xpY3kucmVsZWFzZSgpKTsKIApAQCAtMTQxMSw2ICsxMzg3LDE5IEBAIHZvaWQgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpkaWRSZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyLCBDb250
ZW50U2VjdXJpCiAgICAgICAgIHNraXBFeGFjdGx5KHBvc2l0aW9uLCBlbmQsICcsJyk7CiAgICAg
ICAgIGJlZ2luID0gcG9zaXRpb247CiAgICAgfQorCisgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCkKKyAgICAgICAgYXBwbHlQb2xpY3lUb1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
K30KKwordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFwcGx5UG9saWN5VG9TY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkKK3sKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
KyAgICBpZiAoIW1fbGFzdFBvbGljeUV2YWxEaXNhYmxlZEVycm9yTWVzc2FnZS5pc051bGwoKSkK
KyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kaXNhYmxlRXZhbChtX2xhc3RQb2xp
Y3lFdmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UpOworCisgICAgaWYgKG1fc2FuZGJveEZsYWdzICE9
IFNhbmRib3hOb25lICYmIGlzPERvY3VtZW50PihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQor
ICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmVuZm9yY2VTYW5kYm94RmxhZ3MobV9z
YW5kYm94RmxhZ3MpOwogfQogCiB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6c2V0T3ZlcnJp
ZGVBbGxvd0lubGluZVN0eWxlKGJvb2wgdmFsdWUpCkBAIC0xNDE4LDYgKzE0MDcsMjAgQEAgdm9p
ZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnNldE92ZXJyaWRlQWxsb3dJbmxpbmVTdHlsZShib29s
IHZhbHVlKQogICAgIG1fb3ZlcnJpZGVJbmxpbmVTdHlsZUFsbG93ZWQgPSB2YWx1ZTsKIH0KIAor
Ym9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnVybE1hdGNoZXNTZWxmKGNvbnN0IFVSTCYgdXJs
KSBjb25zdAoreworICAgIHJldHVybiBtX3NlbGZTb3VyY2UtPm1hdGNoZXModXJsKTsKK30KKwor
Ym9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnByb3RvY29sTWF0Y2hlc1NlbGYoY29uc3QgVVJM
JiB1cmwpIGNvbnN0Cit7CisjaWYgRU5BQkxFKENTUF9ORVhUKQorICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShtX3NlbGZTb3VyY2VQcm90b2NvbCwgImh0dHAiKSkKKyAgICAg
ICAgcmV0dXJuIHVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCk7CisjZW5kaWYKKyAgICByZXR1
cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2woKSwgbV9zZWxmU291cmNlUHJv
dG9jb2wpOworfQorCiB0ZW1wbGF0ZTxib29sIChDU1BEaXJlY3RpdmVMaXN0OjoqYWxsb3dlZCko
Q29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0PgogYm9vbCBpc0Fs
bG93ZWRCeUFsbChjb25zdCBDU1BEaXJlY3RpdmVMaXN0VmVjdG9yJiBwb2xpY2llcywgQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKQogewpAQCAt
MTU3MywyOCArMTU3NiwxMSBAQCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZmxlY3RlZFhTU0Rp
c3Bvc2l0aW9uIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVmbGVjdGVkWAogCiB2b2lkIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6Z2F0aGVyUmVwb3J0VVJJcyhET01TdHJpbmdMaXN0JiBsaXN0KSBj
b25zdAogewotICAgIGZvciAoYXV0byYgcG9saWN5IDogbV9wb2xpY2llcykKLSAgICAgICAgcG9s
aWN5LT5nYXRoZXJSZXBvcnRVUklzKGxpc3QpOwotfQotCi1TZWN1cml0eU9yaWdpbiogQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpzZWN1cml0eU9yaWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKTsKLX0KLQotY29uc3QgVVJM
JiBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnVybCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+dXJsKCk7Ci19Ci0KLVVSTCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAotewotICAgIHJldHVybiBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCk7Ci19Ci0KLXZvaWQgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjplbmZvcmNlU2FuZGJveEZsYWdzKFNhbmRib3hGbGFncyBtYXNr
KSBjb25zdAotewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZW5mb3JjZVNhbmRib3hG
bGFncyhtYXNrKTsKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICBm
b3IgKGF1dG8mIHBvbGljeSA6IG1fcG9saWNpZXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiB1cmwg
OiBwb2xpY3ktPnJlcG9ydFVSSXMoKSkKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+Y29tcGxldGVVUkwodXJsKS5zdHJpbmcoKSk7CisgICAgfQogfQog
CiBzdGF0aWMgU3RyaW5nIHN0cmlwVVJMRm9yVXNlSW5SZXBvcnQoRG9jdW1lbnQmIGRvY3VtZW50
LCBjb25zdCBVUkwmIHVybCkKQEAgLTE2MjgsMTIgKzE2MTQsMTIgQEAgc3RhdGljIHZvaWQgZ2F0
aGVyU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudERhdGEoU2VjdXJpdHlQb2xpY3lWaW9sYXRp
b25FdmVudEkKIH0KICNlbmRpZgogCi12b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVwb3J0
VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCwgY29uc3QgU3RyaW5nJiBlZmZl
Y3RpdmVEaXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIGNvbnN0IFVSTCYg
YmxvY2tlZFVSTCwgY29uc3QgVmVjdG9yPFVSTD4mIHJlcG9ydFVSSXMsIGNvbnN0IFN0cmluZyYg
aGVhZGVyLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJl
ciYgY29udGV4dExpbmUsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkgY29uc3QKK3ZvaWQgQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpyZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVU
ZXh0LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSwgY29uc3QgU3RyaW5nJiBjb25z
b2xlTWVzc2FnZSwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cmVwb3J0VVJJcywgY29uc3QgU3RyaW5nJiBoZWFkZXIsIGNvbnN0IFN0cmluZyYgY29udGV4dFVS
TCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgSlNDOjpFeGVjU3RhdGUq
IHN0YXRlKSBjb25zdAogewogICAgIGxvZ1RvQ29uc29sZShjb25zb2xlTWVzc2FnZSwgY29udGV4
dFVSTCwgY29udGV4dExpbmUsIHN0YXRlKTsKIAogICAgIC8vIEZJWE1FOiBTdXBwb3J0IHNlbmRp
bmcgcmVwb3J0cyBmcm9tIHdvcmtlci4KLSAgICBpZiAoIWlzPERvY3VtZW50PigqbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0KSkKKyAgICBpZiAoIWlzPERvY3VtZW50PihtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpKQogICAgICAgICByZXR1cm47CiAKICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4oKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CkBAIC0xNjkwLDcg
KzE2NzYsNyBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVwb3J0VmlvbGF0aW9uKGNv
bnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCwgY29uc3QgUwogICAgIFJlZlB0cjxGb3JtRGF0YT4g
cmVwb3J0ID0gRm9ybURhdGE6OmNyZWF0ZShyZXBvcnRPYmplY3QtPnRvSlNPTlN0cmluZygpLnV0
ZjgoKSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHVybCA6IHJlcG9ydFVSSXMpCi0gICAgICAg
IFBpbmdMb2FkZXI6OnNlbmRWaW9sYXRpb25SZXBvcnQoKmZyYW1lLCB1cmwsIHJlcG9ydC5jb3B5
UmVmKCkpOworICAgICAgICBQaW5nTG9hZGVyOjpzZW5kVmlvbGF0aW9uUmVwb3J0KCpmcmFtZSwg
ZG9jdW1lbnQuY29tcGxldGVVUkwodXJsKSwgcmVwb3J0LmNvcHlSZWYoKSk7CiB9CiAKIHZvaWQg
Q29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShjb25zdCBT
dHJpbmcmIG5hbWUpIGNvbnN0CkBAIC0xNzc0LDEyICsxNzYwLDE0IEBAIHZvaWQgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpyZXBvcnRNaXNzaW5nUmVwb3J0VVJJKGNvbnN0IFN0cmluZyYgcG9saWN5
KSBjb25zdAogdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmxvZ1RvQ29uc29sZShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRp
bmFsTnVtYmVyJiBjb250ZXh0TGluZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTQzMTc+IENvbnRlbnRTZWN1cml0
eVBvbGljeTo6bG9nVG9Db25zb2xlIHNob3VsZCBpbmNsdWRlIGEgY29sdW1uIG51bWJlcgotICAg
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1lc3NhZ2UsIGNvbnRleHRVUkwsIGNv
bnRleHRMaW5lLm9uZUJhc2VkSW50KCksIDAsIHN0YXRlKTsKKyAgICBpZiAobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KQorICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmFkZENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBt
ZXNzYWdlLCBjb250ZXh0VVJMLCBjb250ZXh0TGluZS5vbmVCYXNlZEludCgpLCAwLCBzdGF0ZSk7
CiB9CiAKIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRCbG9ja2VkU2NyaXB0RXhl
Y3V0aW9uVG9JbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0KSBjb25zdAogewot
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQ
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZGlyZWN0aXZlVGV4dCk7CisgICAgaWYgKG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpz
Y3JpcHRFeGVjdXRpb25CbG9ja2VkQnlDU1AobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBkaXJl
Y3RpdmVUZXh0KTsKIH0KIAogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmV4cGVyaW1lbnRh
bEZlYXR1cmVzRW5hYmxlZCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeS5oCmluZGV4IGFiM2NiMzQyYjg1NDViNWExMWVmNmYxMjcxYjUy
OWQ2OWY3ODI2ZTMuLmM5NjlhM2U3MTg1MmVkOWFlOGQ4Yzk4OTg1MTI1NGU4N2RmNjUwZjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEz
ICsyOCw5IEBACiAjZGVmaW5lIENvbnRlbnRTZWN1cml0eVBvbGljeV9oCiAKICNpbmNsdWRlICJD
b250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuaCIKLSNpbmNsdWRlICJVUkwuaCIK
ICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0UG9zaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdURiB7CiBjbGFzcyBPcmRpbmFsTnVtYmVyOwpAQCAtNDIsMjYgKzM5LDI0IEBA
IGNsYXNzIE9yZGluYWxOdW1iZXI7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTUERp
cmVjdGl2ZUxpc3Q7CitjbGFzcyBDU1BTb3VyY2U7CiBjbGFzcyBET01TdHJpbmdMaXN0OwogY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOworY2xhc3Mg
VVJMOwogCi10eXBlZGVmIGludCBTYW5kYm94RmxhZ3M7CiB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8Q1NQRGlyZWN0aXZlTGlzdD4+IENTUERpcmVjdGl2ZUxpc3RWZWN0b3I7Cit0eXBl
ZGVmIGludCBTYW5kYm94RmxhZ3M7CiAKIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeSB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29udGVu
dFNlY3VyaXR5UG9saWN5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBleHBsaWNpdCBD
b250ZW50U2VjdXJpdHlQb2xpY3koU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOworICAgIGV4cGxp
Y2l0IENvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBTZWN1cml0eU9yaWdpbiYpOwogICAgIH5D
b250ZW50U2VjdXJpdHlQb2xpY3koKTsKIAogICAgIHZvaWQgY29weVN0YXRlRnJvbShjb25zdCBD
b250ZW50U2VjdXJpdHlQb2xpY3kqKTsKIAotICAgIGVudW0gY2xhc3MgUmVwb3J0aW5nU3RhdHVz
IHsKLSAgICAgICAgU2VuZFJlcG9ydCwKLSAgICAgICAgU3VwcHJlc3NSZXBvcnQKLSAgICB9Owot
CiAgICAgLy8gQmUgc3VyZSB0byB1cGRhdGUgdGhlIGJlaGF2aW9yIG9mIFhTU0F1ZGl0b3I6OmNv
bWJpbmVYU1NQcm90ZWN0aW9uSGVhZGVyQW5kQ1NQIHdoZW5ldmVyIHlvdSBjaGFuZ2UgdGhpcyBl
bnVtJ3MgY29udGVudCBvciBvcmRlcmluZy4KICAgICBlbnVtIFJlZmxlY3RlZFhTU0Rpc3Bvc2l0
aW9uIHsKICAgICAgICAgUmVmbGVjdGVkWFNTVW5zZXQgPSAwLApAQCAtNzAsMTggKzY1LDIyIEBA
IHB1YmxpYzoKICAgICAgICAgRmlsdGVyUmVmbGVjdGVkWFNTLAogICAgICAgICBCbG9ja1JlZmxl
Y3RlZFhTUwogICAgIH07CisgICAgUmVmbGVjdGVkWFNTRGlzcG9zaXRpb24gcmVmbGVjdGVkWFNT
RGlzcG9zaXRpb24oKSBjb25zdDsKIAogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNl
SGVhZGVycyByZXNwb25zZUhlYWRlcnMoKSBjb25zdDsKICAgICB2b2lkIGRpZFJlY2VpdmVIZWFk
ZXJzKGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyYpOwogICAgIHZv
aWQgZGlkUmVjZWl2ZUhlYWRlcihjb25zdCBTdHJpbmcmLCBDb250ZW50U2VjdXJpdHlQb2xpY3lI
ZWFkZXJUeXBlKTsKIAorICAgIGVudW0gY2xhc3MgUmVwb3J0aW5nU3RhdHVzIHsKKyAgICAgICAg
U2VuZFJlcG9ydCwKKyAgICAgICAgU3VwcHJlc3NSZXBvcnQKKyAgICB9OwogICAgIGJvb2wgYWxs
b3dKYXZhU2NyaXB0VVJMcyhjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3Jk
aW5hbE51bWJlciYgY29udGV4dExpbmUsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSBmYWxzZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgPSBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCkgY29uc3Q7CiAg
ICAgYm9vbCBhbGxvd0lubGluZUV2ZW50SGFuZGxlcnMoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJM
LCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBib29sIG92ZXJyaWRlQ29u
dGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0
aW5nU3RhdHVzID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRS
ZXBvcnQpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dJbmxpbmVTY3JpcHQoY29uc3QgU3RyaW5nJiBj
b250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBib29sIG92
ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6UmVwb3J0aW5nU3RhdHVzID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0
dXM6OlNlbmRSZXBvcnQpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dJbmxpbmVTdHlsZShjb25zdCBT
dHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUs
IGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9y
dGluZ1N0YXR1czo6U2VuZFJlcG9ydCkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd0V2YWwoSlNDOjpF
eGVjU3RhdGUqID0gbnVsbHB0ciwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9
IGZhbHNlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyA9IENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KSBjb25zdDsKICAgICBi
b29sIGFsbG93UGx1Z2luVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdHlw
ZUF0dHJpYnV0ZSwgY29uc3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGlj
eSA9IGZhbHNlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyA9IENvbnRl
bnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KSBjb25zdDsKLQog
ICAgIGJvb2wgYWxsb3dTY3JpcHRGcm9tU291cmNlKGNvbnN0IFVSTCYsIGJvb2wgb3ZlcnJpZGVD
b250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBv
cnRpbmdTdGF0dXMgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2Vu
ZFJlcG9ydCkgY29uc3Q7CiAgICAgYm9vbCBhbGxvd09iamVjdEZyb21Tb3VyY2UoY29uc3QgVVJM
JiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyA9IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVw
b3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KSBjb25zdDsKICAgICBib29sIGFsbG93Q2hpbGRGcmFt
ZUZyb21Tb3VyY2UoY29uc3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGlj
eSA9IGZhbHNlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyA9IENvbnRl
bnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KSBjb25zdDsKQEAg
LTkzLDQyICs5Miw1NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd0Zvcm1BY3Rpb24oY29uc3Qg
VVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyA9IENvbnRlbnRTZWN1cml0eVBvbGljeTo6
UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KSBjb25zdDsKICAgICBib29sIGFsbG93QmFzZVVS
SShjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2Us
IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzID0gQ29udGVudFNlY3VyaXR5
UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpIGNvbnN0OwogCi0gICAgUmVmbGVj
dGVkWFNTRGlzcG9zaXRpb24gcmVmbGVjdGVkWFNTRGlzcG9zaXRpb24oKSBjb25zdDsKLQogICAg
IHZvaWQgc2V0T3ZlcnJpZGVBbGxvd0lubGluZVN0eWxlKGJvb2wpOwogCiAgICAgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0OworCiAgICAgdm9pZCBnYXRoZXJSZXBvcnRVUklzKERPTVN0cmluZ0xpc3Qm
KSBjb25zdDsKIAorICAgIFN0cmluZyBldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKSBjb25zdDsK
KworICAgIGJvb2wgZXhwZXJpbWVudGFsRmVhdHVyZXNFbmFibGVkKCkgY29uc3Q7CisKKyAgICBz
dGF0aWMgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3koU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYpOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMg
YXJlIHVzZWQgYnkgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIGNhbGxiYWNrIGludG8gdGhp
cyBvYmplY3Qgd2hlbiBwYXJzaW5nLCB2YWxpZGF0aW5nLAorICAgIC8vIGFuZCBhcHBseWluZyBh
IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5LgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0
aGUgdmFyaW91cyBkaXJlY3RpdmVzIHNlcnZlIG9ubHkgYXMgc3RhdGUgc3RvcmVzIGZvciB0aGUg
cGFyc2VkIHBvbGljeSBhbmQgcmVtb3ZlIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAvLyBUaGlzIGNs
YXNzIHNob3VsZCB0cmF2ZXJzZSB0aGUgZGlyZWN0aXZlcywgdmFsaWRhdGluZyB0aGUgcG9saWN5
LCBhbmQgYXBwbHlpbmcgaXQgdG8gdGhlIHNjcmlwdCBleGVjdXRpb24gY29udGV4dC4KKworICAg
IC8vIFVzZWQgYnkgTWVkaWFMaXN0RGlyZWN0aXZlCisgICAgdm9pZCByZXBvcnRJbnZhbGlkUGx1
Z2luVHlwZXMoY29uc3QgU3RyaW5nJikgY29uc3Q7CisKKyAgICAvLyBVc2VkIGJ5IENTUFNvdXJj
ZUxpc3QKICAgICB2b2lkIHJlcG9ydERpcmVjdGl2ZUFzU291cmNlRXhwcmVzc2lvbihjb25zdCBT
dHJpbmcmIGRpcmVjdGl2ZU5hbWUsIGNvbnN0IFN0cmluZyYgc291cmNlRXhwcmVzc2lvbikgY29u
c3Q7CisgICAgdm9pZCByZXBvcnRJbnZhbGlkUGF0aENoYXJhY3Rlcihjb25zdCBTdHJpbmcmIGRp
cmVjdGl2ZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IGNoYXIpIGNvbnN0OworICAg
IHZvaWQgcmVwb3J0SW52YWxpZFNvdXJjZUV4cHJlc3Npb24oY29uc3QgU3RyaW5nJiBkaXJlY3Rp
dmVOYW1lLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkgY29uc3Q7CisgICAgYm9vbCB1cmxNYXRjaGVz
U2VsZihjb25zdCBVUkwmKSBjb25zdDsKKworICAgIC8vIFVzZWQgYnkgQ1NQRGlyZWN0aXZlTGlz
dAogICAgIHZvaWQgcmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYpIGNvbnN0
OwogICAgIHZvaWQgcmVwb3J0SW52YWxpZERpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKGNvbnN0IFN0
cmluZyYgZGlyZWN0aXZlTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgY29uc3Q7Ci0gICAgdm9p
ZCByZXBvcnRJbnZhbGlkUGF0aENoYXJhY3Rlcihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZU5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IGNoYXIpIGNvbnN0OwotICAgIHZvaWQgcmVwb3J0
SW52YWxpZFBsdWdpblR5cGVzKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcmVwb3J0
SW52YWxpZFNhbmRib3hGbGFncyhjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2b2lkIHJlcG9y
dEludmFsaWRTb3VyY2VFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2UpIGNvbnN0OwogICAgIHZvaWQgcmVwb3J0SW52YWxpZFJlZmxlY3Rl
ZFhTUyhjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2b2lkIHJlcG9ydE1pc3NpbmdSZXBvcnRV
UkkoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdm9pZCByZXBvcnRVbnN1cHBvcnRlZERpcmVj
dGl2ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2b2lkIHJlcG9ydFZpb2xhdGlvbihjb25z
dCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQsIGNvbnN0IFN0cmluZyYgZWZmZWN0aXZlRGlyZWN0aXZl
LCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBVUkwmIGJsb2NrZWRVUkwsIGNv
bnN0IFZlY3RvcjxVUkw+JiByZXBvcnRVUklzLCBjb25zdCBTdHJpbmcmIGhlYWRlciwgY29uc3Qg
U3RyaW5nJiBjb250ZXh0VVJMID0gU3RyaW5nKCksIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYg
Y29udGV4dExpbmUgPSBXVEY6Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCksIEpTQzo6RXhl
Y1N0YXRlKiA9IG51bGxwdHIpIGNvbnN0OwotCisgICAgdm9pZCByZXBvcnRWaW9sYXRpb24oY29u
c3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2
ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcmVwb3J0VVJJcywgY29uc3QgU3RyaW5nJiBoZWFkZXIsIGNv
bnN0IFN0cmluZyYgY29udGV4dFVSTCA9IFN0cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1i
ZXImIGNvbnRleHRMaW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBKU0M6
OkV4ZWNTdGF0ZSogPSBudWxscHRyKSBjb25zdDsKICAgICB2b2lkIHJlcG9ydEJsb2NrZWRTY3Jp
cHRFeGVjdXRpb25Ub0luc3BlY3Rvcihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpIGNvbnN0
OworICAgIHZvaWQgZW5mb3JjZVNhbmRib3hGbGFncyhTYW5kYm94RmxhZ3Mgc2FuZGJveEZsYWdz
KSB7IG1fc2FuZGJveEZsYWdzIHw9IHNhbmRib3hGbGFnczsgfQogCi0gICAgY29uc3QgVVJMJiB1
cmwoKSBjb25zdDsKLSAgICBVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0g
ICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7Ci0gICAgdm9pZCBlbmZv
cmNlU2FuZGJveEZsYWdzKFNhbmRib3hGbGFncykgY29uc3Q7Ci0gICAgU3RyaW5nIGV2YWxEaXNh
YmxlZEVycm9yTWVzc2FnZSgpIGNvbnN0OwotCi0gICAgYm9vbCBleHBlcmltZW50YWxGZWF0dXJl
c0VuYWJsZWQoKSBjb25zdDsKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRD
b250ZW50U2VjdXJpdHlQb2xpY3koU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOworICAgIC8vIFVz
ZWQgYnkgQ1NQU291cmNlCisgICAgYm9vbCBwcm90b2NvbE1hdGNoZXNTZWxmKGNvbnN0IFVSTCYp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZvaWQgbG9nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMID0gU3RyaW5nKCksIGNvbnN0IFdURjo6
T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUgPSBXVEY6Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZp
cnN0KCksIEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIpIGNvbnN0OworICAgIHZvaWQgYXBwbHlQ
b2xpY3lUb1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBib29sIG1fb3ZlcnJpZGVJbmxp
bmVTdHlsZUFsbG93ZWQ7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0IHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1BTb3VyY2U+
IG1fc2VsZlNvdXJjZTsKKyAgICBTdHJpbmcgbV9zZWxmU291cmNlUHJvdG9jb2w7CiAgICAgQ1NQ
RGlyZWN0aXZlTGlzdFZlY3RvciBtX3BvbGljaWVzOworICAgIFN0cmluZyBtX2xhc3RQb2xpY3lF
dmFsRGlzYWJsZWRFcnJvck1lc3NhZ2U7CisgICAgU2FuZGJveEZsYWdzIG1fc2FuZGJveEZsYWdz
OworICAgIGJvb2wgbV9vdmVycmlkZUlubGluZVN0eWxlQWxsb3dlZCB7IGZhbHNlIH07CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3Bl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCmluZGV4
IGM2ZmNmMmRkYzYwZjVkNDI2NzNlYjhiMmZlNmY0ZWRlOWRjM2MyNDEuLjYwZTk5YTc2YmFhMGJh
ZGM4ZjRlMzBiNDA0YWZiMzVkNjMyZDFhYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyR2xvYmFsU2NvcGUuY3BwCkBAIC03Miw2ICs3Miw3IEBAIFdvcmtlckdsb2JhbFNjb3Bl
OjpXb3JrZXJHbG9iYWxTY29wZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdl
bnQsIFdvCiAgICAgLCBtX3RvcE9yaWdpbih0b3BPcmlnaW4pCiB7CiAgICAgc2V0U2VjdXJpdHlP
cmlnaW5Qb2xpY3koU2VjdXJpdHlPcmlnaW5Qb2xpY3k6OmNyZWF0ZShTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKHVybCkpKTsKKyAgICBzZXRDb250ZW50U2VjdXJpdHlQb2xpY3koc3RkOjptYWtlX3Vu
aXF1ZTxDb250ZW50U2VjdXJpdHlQb2xpY3k+KCpzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kj4odGhpcykpKTsKIH0KIAogV29ya2VyR2xvYmFsU2NvcGU6On5Xb3JrZXJHbG9iYWxT
Y29wZSgpCkBAIC04Nyw3ICs4OCw2IEBAIFdvcmtlckdsb2JhbFNjb3BlOjp+V29ya2VyR2xvYmFs
U2NvcGUoKQogCiB2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjphcHBseUNvbnRlbnRTZWN1cml0eVBv
bGljeVJlc3BvbnNlSGVhZGVycyhjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhl
YWRlcnMmIGNvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycykKIHsKLSAgICBzZXRD
b250ZW50U2VjdXJpdHlQb2xpY3koc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50U2VjdXJpdHlQb2xp
Y3k+KHRoaXMpKTsKICAgICBjb250ZW50U2VjdXJpdHlQb2xpY3koKS0+ZGlkUmVjZWl2ZUhlYWRl
cnMoY29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270467</attachid>
            <date>2016-02-01 20:55:17 -0800</date>
            <delta_ts>2016-02-02 08:37:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153748-20160201205453.patch</filename>
            <type>text/plain</type>
            <size>48247</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1OTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmFhZjRhNjQ3ZDRiMDA4
ZDUwMWUxNTNmZTRhMDM1MjVhM2QzYjBkNy4uNDJlNjQ3M2MwMDU3ODVlZjg5NTI3NTYwYWU5YTlh
YTkwZTc1OTk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAxNi0wMi0wMSAgRGFu
aWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgQ1NQOiBTdXBwb3J0IGNo
ZWNraW5nIGNvbnRlbnQgc2VjdXJpdHkgcG9saWN5IHdpdGhvdXQgYSBzY3JpcHQgZXhlY3V0aW9u
IGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1Mzc0OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQ0MzkxNDk+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVG93YXJkcyBjaGVja2luZyBhIFdl
YiBXb3JrZXIncyBjb250ZW50IHNlY3VyaXR5IHBvbGljeSBhZ2FpbnN0IGEgcmVkaXJlY3RlZCB3
b3JrZXIKKyAgICAgICAgc2NyaXB0IGxvYWQgb3IgcmVkaXJlY3RlZCBYSFIgcmVxdWVzdCBmb3Ig
YW4gWEhSIHJlcXVlc3QgaW5pdGlhdGVkIGZyb20gaXQsIHdlIHNob3VsZAorICAgICAgICBzdXBw
b3J0IGluc3RhbnRpYXRpbmcgYSBDb250ZW50U2VjdXJpdHlQb2xpY3kgb2JqZWN0IHdpdGhvdXQg
YSBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorCisgICAgICAgIE5vIGZ1bmN0aW9uYWxpdHkgd2Fz
IGNoYW5nZWQuIFNvLCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQpOiBQYXNz
IHx0aGlzfCBhcyBhIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGFzIGEgcG9pbnRlci4KKyAgICAgICAg
KiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwOiBSZW1vdmUgZXh0cmFuZW91cyBp
bmNsdWRlcyBTY3JpcHRTdGF0ZS5oLCBUZXh0RW5jb2RpbmcuaCwKKyAgICAgICAgYW5kIFVSTC5o
IGFzIHRoZXkgYXJlIGluY2x1ZGVkIGJ5IENvbnRlbnRTZWN1cml0eVBvbGljeS5oLCBGb3JtRGF0
YUxpc3QuaCBhbmQgRm9ybURhdGEuaCwgcmVzcGVjdGl2ZWx5LgorICAgICAgICAoV2ViQ29yZTo6
Q1NQU291cmNlOjpDU1BTb3VyY2UpOiBUYWtlIGEgY29uc3RhbnQgcmVmZXJlbmNlIHRvIGEgQ29u
dGVudFNlY3VyaXR5UG9saWN5IGluc3RlYWQKKyAgICAgICAgb2YgYSBwb2ludGVyIHNpbmNlIHdl
IG5ldmVyIGV4cGVjdGVkIGEgbnVsbCBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291
cmNlOjpzY2hlbWVNYXRjaGVzKTogTW92ZSBsb2dpYyBmb3IgY2hlY2tpbmcgdGhlIHByb3RvY29s
IG9mIHNvdXJjZSAic2VsZiIKKyAgICAgICAgZnJvbSBoZXJlIHRvIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6cHJvdG9jb2xNYXRjaGVzU2VsZigpIGJlY2F1c2Ugd2UgbWF5IG5vdCBoYXZlIGEgc2Vj
dXJpdHkKKyAgICAgICAgb3JpZ2luIGlmIENvbnRlbnRTZWN1cml0eVBvbGljeSB3YXMgaW5pdGlh
dGVkIHdpdGhvdXQgYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IG9iamVjdC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTUFNvdXJjZUxpc3Q6OmFsbG93U2VsZik6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NQU291cmNlTGlzdDo6Q1NQU291cmNlTGlzdCk6IFRha2UgYSBjb25zdGFudCByZWZlcmVu
Y2UgdG8gYSBDb250ZW50U2VjdXJpdHlQb2xpY3kKKyAgICAgICAgaW5zdGVhZCBvZiBhIHBvaW50
ZXIgc2luY2Ugd2UgbmV2ZXIgZXhwZWN0ZWQgYSBudWxsIHBvaW50ZXIuIFJlbW92ZSBmaWVsZHMg
ZnJvbSBtZW1iZXIKKyAgICAgICAgaW5pdGlhbGl6YXRpb24gbGlzdCB0aGF0IGNhbiBiZSBpbml0
aWFsaXplZCB1c2luZyBDKysxMSBpbi1jbGFzcyBpbml0aWFsaXphdGlvbiBzeW50YXguCisgICAg
ICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjptYXRjaGVzKTogQ2FsbCBDb250ZW50U2VjdXJp
dHlQb2xpY3k6OnVybE1hdGNoZXNTZWxmKCkgdG8gbWF0Y2ggdGhlCisgICAgICAgIGVmZmVjdGl2
ZSBVUkwgYWdhaW5zdCB0aGUgVVJMIG9mIHNvdXJjZSAic2VsZiIuCisgICAgICAgIChXZWJDb3Jl
OjpDU1BTb3VyY2VMaXN0OjpwYXJzZSk6IFVwZGF0ZSBjb2RlIGFzIG5lY2Vzc2FyeSBub3cgdGhh
dCBtX3BvbGljeSBpcyBhIHJlZmVyZW5jZQorICAgICAgICBpbnN0ZWFkIG9mIGEgcG9pbnRlci4K
KyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6OnBhcnNlU291cmNlKTogU2ltcGxpZnkg
Y29kZSBieSBzZXR0aW5nIGludGVybmFsIG1lbWJlciBmaWVsZHMgZGlyZWN0bHkKKyAgICAgICAg
aW5zdGVhZCBvZiB2aWEgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNTUFNv
dXJjZUxpc3Q6OnBhcnNlUGF0aCk6IFVwZGF0ZSBjb2RlIGFzIG5lY2Vzc2FyeSBub3cgdGhhdCBt
X3BvbGljeSBpcyBhIHJlZmVyZW5jZQorICAgICAgICBpbnN0ZWFkIG9mIGEgcG9pbnRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZTo6Q1NQRGlyZWN0aXZlKTogVGFrZSBhIGNvbnN0
YW50IHJlZmVyZW5jZSB0byBhIENvbnRlbnRTZWN1cml0eVBvbGljeQorICAgICAgICBpbnN0ZWFk
IG9mIGEgcG9pbnRlciBzaW5jZSB3ZSBuZXZlciBleHBlY3RlZCBhIG51bGwgcG9pbnRlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZTo6cG9saWN5KTogUmV0dXJuIGEgcmVmZXJlbmNl
IHRvIGEgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5LgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFMaXN0RGlyZWN0aXZlOjpNZWRpYUxpc3REaXJlY3RpdmUpOiBUYWtlIGEgY29uc3RhbnQgcmVm
ZXJlbmNlIHRvIGEgQ29udGVudFNlY3VyaXR5UG9saWN5CisgICAgICAgIGluc3RlYWQgb2YgYSBw
b2ludGVyIHNpbmNlIHdlIG5ldmVyIGV4cGVjdGVkIGEgbnVsbCBwb2ludGVyLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFMaXN0RGlyZWN0aXZlOjpwYXJzZSk6IFVwZGF0ZSBjb2RlIGFzIG5lY2Vz
c2FyeSBub3cgdGhhdCBtX3BvbGljeSBpcyBhIHJlZmVyZW5jZQorICAgICAgICBpbnN0ZWFkIG9m
IGEgcG9pbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUxpc3REaXJlY3RpdmU6OlNvdXJj
ZUxpc3REaXJlY3RpdmUpOiBUYWtlIGEgY29uc3RhbnQgcmVmZXJlbmNlIHRvIGEgQ29udGVudFNl
Y3VyaXR5UG9saWN5CisgICAgICAgIGluc3RlYWQgb2YgYSBwb2ludGVyIHNpbmNlIHdlIG5ldmVy
IGV4cGVjdGVkIGEgbnVsbCBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlTGlzdERp
cmVjdGl2ZTo6YWxsb3dzKTogV3JpdGUgaW4gdGVybXMgb2YgQ1NQU291cmNlTGlzdDo6YWxsb3dT
ZWxmKCkgYmVjYXVzZSB3ZQorICAgICAgICBtYXkgbm90IGhhdmUgYSBzZWN1cml0eSBvcmlnaW4g
dG8gZ2V0IGEgVVJMIGZyb20gaWYgQ29udGVudFNlY3VyaXR5UG9saWN5IHdhcyBpbml0aWF0ZWQg
d2l0aG91dAorICAgICAgICBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgb2JqZWN0LgorICAgICAg
ICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZlTGlzdDo6cmVwb3J0VVJJcyk6IENoYW5nZSByZXR1cm4g
dHlwZSBmcm9tIFZlY3RvcjxVUkw+IHRvIFZlY3RvcjxTdHJpbmc+CisgICAgICAgIFRoZSBjYWxs
ZXIgd2lsbCBjb252ZXJ0IHRoZSBzdHJpbmdzIHRvIFVSTHMgd2l0aCByZXNwZWN0IHRvIHRoZSBz
Y3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVM
aXN0OjpwYXJzZVJlcG9ydFVSSSk6IFN0b3JlIHRoZSByZXBvcnQgVVJJIGFzIGEgc3RyaW5nIGlu
c3RlYWQgb2YgYSBVUkwKKyAgICAgICAgYmVjYXVzZSB3ZSBtYXkgbm90IGhhdmUgYSBzZWN1cml0
eSBvcmlnaW4gdG8gY29tcHV0ZSB0aGUgYWJzb2x1dGUgVVJMIGlmIENvbnRlbnRTZWN1cml0eVBv
bGljeQorICAgICAgICB3YXMgaW5pdGlhdGVkIHdpdGhvdXQgYSBTY3JpcHRFeGVjdXRpb25Db250
ZXh0IG9iamVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OkNTUERpcmVj
dGl2ZUxpc3QpOiBUYWtlIGEgcmVmZXJlbmNlIHRvIGEgQ29udGVudFNlY3VyaXR5UG9saWN5Cisg
ICAgICAgIGluc3RlYWQgb2YgYSBwb2ludGVyIHNpbmNlIHdlIG5ldmVyIGV4cGVjdGVkIGEgbnVs
bCBwb2ludGVyLiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdGFrZSBhIGNvbnN0CisgICAgICAgIHJl
ZmVyZW5jZSB0byBhIENvbnRlbnRTZWN1cml0eVBvbGljeSwgYnV0IENvbnRlbnRTZWN1cml0eVBv
bGljeTo6YXBwbHlTYW5kYm94UG9saWN5KCkgbmVlZHMgdG8gc2V0CisgICAgICAgIHN0YXRlIG9u
IENvbnRlbnRTZWN1cml0eVBvbGljeSA6KAorICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZl
TGlzdDo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0
OjpyZXBvcnRWaW9sYXRpb24pOiBVcGRhdGUgY29kZSBhcyBuZWNlc3Nhcnkgbm93IHRoYXQgbV9w
b2xpY3kgaXMgYSByZWZlcmVuY2UKKyAgICAgICAgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisgICAg
ICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpjaGVja0V2YWxBbmRSZXBvcnRWaW9sYXRp
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OmNoZWNrSW5s
aW5lQW5kUmVwb3J0VmlvbGF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJl
Y3RpdmVMaXN0OjpwYXJzZURpcmVjdGl2ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q1NQ
RGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBvcnRVUkkpOiBTdG9yZSB0aGUgcmVwb3J0IFVSSSBhcyBh
IHN0cmluZyBpbnN0ZWFkIG9mIGEgVVJMCisgICAgICAgIGJlY2F1c2Ugd2UgbWF5IG5vdCBoYXZl
IGEgc2VjdXJpdHkgb3JpZ2luIHRvIGNvbXB1dGUgdGhlIGFic29sdXRlIFVSTCBpZiBDb250ZW50
U2VjdXJpdHlQb2xpY3kKKyAgICAgICAgd2FzIGluaXRpYXRlZCB3aXRob3V0IGEgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCBvYmplY3QuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0
OjpzZXRDU1BEaXJlY3RpdmUpOiBVcGRhdGUgY29kZSBhcyBuZWNlc3Nhcnkgbm93IHRoYXQgbV9w
b2xpY3kgaXMgYSByZWZlcmVuY2UKKyAgICAgICAgaW5zdGVhZCBvZiBhIHBvaW50ZXIuCisgICAg
ICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQb2xpY3kpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVmbGVjdGVkWFNT
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjphZGREaXJlY3Rp
dmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6Q29u
dGVudFNlY3VyaXR5UG9saWN5KTogTW9kaWZpZWQgdG8gdGFrZSB0aGUgU2NyaXB0RXhlY3V0aW9u
T2JqZWN0CisgICAgICAgIGFzIGEgcmVmZXJlbmNlIGFuZCBjb21wdXRlIHRoZSBDU1BTb3VyY2Ug
b2JqZWN0IGZvciAic2VsZiIgYW5kIGNhY2hlIHRoZSBwcm90b2NvbCBmb3IgInNlbGYiLiBSZW1v
dmVkCisgICAgICAgIGZpZWxkIG1fb3ZlcnJpZGVJbmxpbmVTdHlsZUFsbG93ZWQgZnJvbSB0aGUg
bWVtYmVyIGluaXRpYWxpemF0aW9uIGxpc3QgYW5kIHVzZWQgQysrMTEgaW4tY2xhc3MKKyAgICAg
ICAgaW5pdGlhbGl6YXRpb24gc3ludGF4IHRvIGluaXRpYWxpemUgaXQuIEFkZGVkIG92ZXJsb2Fk
ZWQgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIFNlY3VyaXR5T3JpZ2luIG9iamVjdC4KKyAgICAg
ICAgV2UgYXJlIG5vdCBtYWtpbmcgdXNlIG9mIHRoaXMgb3ZlcmxvYWRlZCBjb25zdHJ1Y3RvciBh
dCB0aGlzIHRpbWUuIFdlIHdpbGwgaW4gYSBzdWJzZXF1ZW50IHBhdGNoLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjpkaWRSZWNlaXZlSGVhZGVyKTogU3RvcmUgdGhl
IGV2YWwgZGlzYWJsZWQgZXJyb3IgbWVzc2FnZSBmb3IKKyAgICAgICAgdGhlIGxhc3QgcGFyc2Vk
IHBvbGljeSBpbiBhIG1lbWJlciBmaWVsZCBpbnN0ZWFkIG9mIHVzaW5nIGl0IGFzIHBhcnQgb2Yg
ZGlzYWJsaW5nIGV2YWwgZXhlY3V0aW9uCisgICAgICAgIG9uIHRoZSBzY3JpcHQgZXhlY3V0aW9u
IGNvbnRleHQgYmVjYXVzZSB3ZSBtYXkgbm90IGhhdmUgc3VjaCBhIGNvbnRleHQuCisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFwcGx5UG9saWN5VG9TY3JpcHRFeGVj
dXRpb25Db250ZXh0KTogQXBwbGllcyB0aGUgY29udGVudCBzZWN1cml0eQorICAgICAgICBwb2xp
Y3kgZXZhbCBhbmQgc2FuZGJveCByZXN0cmljdGlvbnMgdG8gdGhlIHNjcmlwdCBleGVjdXRpb24g
Y29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6dXJsTWF0
Y2hlc1NlbGYpOiBNYXRjaCB0aGUgc3BlY2lmaWVkIFVSTCBhZ2FpbnN0IHRoZSBVUkwgZm9yCisg
ICAgICAgIHNvdXJjZSAic2VsZiIuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OnByb3RvY29sTWF0Y2hlc1NlbGYpOiBNYXRjaCB0aGUgcHJvdG9jb2wgb2YgdGhlIHNw
ZWNpZmllZCBVUkwKKyAgICAgICAgYWdhaW5zdCB0aGUgcHJvdG9jb2wgZm9yIHNvdXJjZSAic2Vs
ZiIuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmdhdGhlclJlcG9y
dFVSSXMpOiBNb2RpZmllZCB0byB1c2UgdGhlIHNjcmlwdCBleGVjdXRpb24gY29udGV4dAorICAg
ICAgICB0byBjb21wdXRlIHRoZSBhYnNvbHV0ZSBVUkwgZm9yIGVhY2ggcmVwb3J0IFVSSS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6cmVwb3J0VmlvbGF0aW9uKTog
QmFpbCBvdXQgaWYgd2UgZG8gbm90IGhhdmUgYSBzY3JpcHQgZXhlY3V0aW9uCisgICAgICAgIGNv
bnRleHQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmxvZ1RvQ29u
c29sZSk6IE9ubHkgbG9nIHRvIHRoZSBjb25zb2xlIGlmIHdlIGhhdmUgYSBzY3JpcHQKKyAgICAg
ICAgZXhlY3V0aW9uIGNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OnJlcG9ydEJsb2NrZWRTY3JpcHRFeGVjdXRpb25Ub0luc3BlY3Rvcik6IE9ubHkgcmVw
b3J0IGJsb2NrZWQKKyAgICAgICAgc2NyaXB0IGV4ZWN1dGlvbiB0byB0aGUgV2ViIEluc3BlY3Rv
ciBpZiB3ZSBoYXZlIGEgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgorICAgICAgICAoV2ViQ29y
ZTo6Q1NQU291cmNlTGlzdDo6YWRkU291cmNlU2VsZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1BTb3VyY2VMaXN0OjphZGRTb3VyY2VTdGFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTUFNvdXJjZUxpc3Q6OmFkZFNvdXJjZVVuc2FmZUlubGluZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjphZGRTb3VyY2VVbnNhZmVFdmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OmdhdGhlclJlcG9ydFVS
SXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojpz
ZWN1cml0eU9yaWdpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJp
dHlQb2xpY3k6OnVybCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJp
dHlQb2xpY3k6OmNvbXBsZXRlVVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWN1cml0eVBvbGljeTo6ZW5mb3JjZVNhbmRib3hGbGFncyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5Lmg6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50U2VjdXJpdHlQb2xpY3k6OmVuZm9yY2VTYW5kYm94RmxhZ3MpOiBBY2N1bXVsYXRlcyB0
aGUgcGFyc2VkIHNhbmRib3ggZmxhZ3MuIFdlCisgICAgICAgIHdpbGwgYXBwbHkgdGhlIHNhbmRi
b3ggZmxhZ3MgaW4gQ29udGVudFNlY3VyaXR5UG9saWN5OjphcHBseVBvbGljeVRvU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyR2xvYmFsU2NvcGU6Oldvcmtlckdsb2JhbFNjb3Bl
KTogSW5zdGFudGlhdGUgQ29udGVudFNlY3VyaXR5UG9saWN5LgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyR2xvYmFsU2NvcGU6OmFwcGx5Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFk
ZXJzKTogTW92ZSBpbnN0YW50aWF0aW9uIG9mCisgICAgICAgIENvbnRlbnRTZWN1cml0eVBvbGlj
eSBmcm9tIGhlcmUgdG8gY29uc3RydWN0b3IuCisKIDIwMTYtMDItMDEgIERhbiBCZXJuc3RlaW4g
IDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBUcmllZCB0byBmaXggYSBidWlsZCBhZnRlciBy
MTk1ODk5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggMTE1OTFkN2VkNDY3MGY1Zjc5MmYz
ZWFkYTgxZjE5YmVhNTUzOGNhZC4uNWM1YTUyOWJmNGM3MzQ1ZmY0ZDY4NDE3YzI1NmJjZDc5OTMw
N2U3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01MTI4LDcgKzUxMjgsNyBAQCB2b2lk
IERvY3VtZW50Ojppbml0U2VjdXJpdHlDb250ZXh0KCkKICAgICAgICAgLy8gVGhpcyBjYW4gb2Nj
dXIgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KCkuCiAgICAgICAg
IHNldENvb2tpZVVSTChVUkwoUGFyc2VkVVJMU3RyaW5nLCBlbXB0eVN0cmluZygpKSk7CiAgICAg
ICAgIHNldFNlY3VyaXR5T3JpZ2luUG9saWN5KFNlY3VyaXR5T3JpZ2luUG9saWN5OjpjcmVhdGUo
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZVVuaXF1ZSgpKSk7Ci0gICAgICAgIHNldENvbnRlbnRTZWN1
cml0eVBvbGljeShzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRTZWN1cml0eVBvbGljeT4odGhpcykp
OworICAgICAgICBzZXRDb250ZW50U2VjdXJpdHlQb2xpY3koc3RkOjptYWtlX3VuaXF1ZTxDb250
ZW50U2VjdXJpdHlQb2xpY3k+KCp0aGlzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTUxNDEsNyArNTE0MSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmluaXRTZWN1cml0eUNvbnRleHQoKQog
ICAgICAgICBhcHBseUNvbnRlbnREaXNwb3NpdGlvbkF0dGFjaG1lbnRTYW5kYm94KCk7CiAKICAg
ICBzZXRTZWN1cml0eU9yaWdpblBvbGljeShTZWN1cml0eU9yaWdpblBvbGljeTo6Y3JlYXRlKGlz
U2FuZGJveGVkKFNhbmRib3hPcmlnaW4pID8gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZVVuaXF1ZSgp
IDogU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtX3VybCkpKTsKLSAgICBzZXRDb250ZW50U2VjdXJp
dHlQb2xpY3koc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50U2VjdXJpdHlQb2xpY3k+KHRoaXMpKTsK
KyAgICBzZXRDb250ZW50U2VjdXJpdHlQb2xpY3koc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50U2Vj
dXJpdHlQb2xpY3k+KCp0aGlzKSk7CiAKICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gdGhp
cy0+c2V0dGluZ3MoKSkgewogICAgICAgICBpZiAoIXNldHRpbmdzLT53ZWJTZWN1cml0eUVuYWJs
ZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeS5jcHAKaW5kZXggNTk2NWRiZmY3NWIwZjc5MmVlM2Y1NzAwYWM0ZDIyOWQzN2JmODE0MS4u
OThlNWVkNjY1NjM0ODVjODM5MWJlN2I3MDVmMTMxNmU0ODMzNjBjYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0zOCwxMSAr
MzgsOCBAQAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJT
Y2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKLSNpbmNsdWRl
ICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5o
IgotI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+CiAjaW5jbHVkZSA8aW5z
cGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KQEAgLTIxNSw3ICsyMTIsNyBAQCBzdGF0
aWMgYm9vbCBpc1NvdXJjZUxpc3ROb25lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGNsYXNzIENT
UFNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgQ1NQU291cmNlKENvbnRlbnRTZWN1cml0eVBvbGljeSog
cG9saWN5LCBjb25zdCBTdHJpbmcmIHNjaGVtZSwgY29uc3QgU3RyaW5nJiBob3N0LCBpbnQgcG9y
dCwgY29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCBwb3J0SGFz
V2lsZGNhcmQpCisgICAgQ1NQU291cmNlKGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgcG9s
aWN5LCBjb25zdCBTdHJpbmcmIHNjaGVtZSwgY29uc3QgU3RyaW5nJiBob3N0LCBpbnQgcG9ydCwg
Y29uc3QgU3RyaW5nJiBwYXRoLCBib29sIGhvc3RIYXNXaWxkY2FyZCwgYm9vbCBwb3J0SGFzV2ls
ZGNhcmQpCiAgICAgICAgIDogbV9wb2xpY3kocG9saWN5KQogICAgICAgICAsIG1fc2NoZW1lKHNj
aGVtZSkKICAgICAgICAgLCBtX2hvc3QoaG9zdCkKQEAgLTIzOCwxNCArMjM1LDggQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBib29sIHNjaGVtZU1hdGNoZXMoY29uc3QgVVJMJiB1cmwpIGNvbnN0
CiAgICAgewotICAgICAgICBpZiAobV9zY2hlbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgcHJvdGVjdGVkUmVzb3VyY2VTY2hlbWUobV9wb2xpY3ktPnNlY3VyaXR5T3JpZ2luKCkt
PnByb3RvY29sKCkpOwotI2lmIEVOQUJMRShDU1BfTkVYVCkKLSAgICAgICAgICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShwcm90ZWN0ZWRSZXNvdXJjZVNjaGVtZSwgImh0dHAi
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKTsK
LSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodXJsLnBy
b3RvY29sKCksIHByb3RlY3RlZFJlc291cmNlU2NoZW1lKTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAobV9zY2hlbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fcG9saWN5LnByb3Rv
Y29sTWF0Y2hlc1NlbGYodXJsKTsKICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UodXJsLnByb3RvY29sKCksIG1fc2NoZW1lKTsKICAgICB9CiAKQEAgLTI5Miw3ICsyODMsNyBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBpc1NjaGVtZU9ubHkoKSBjb25zdCB7IHJldHVybiBtX2hv
c3QuaXNFbXB0eSgpOyB9CiAKLSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIG1fcG9saWN5Owor
ICAgIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgbV9wb2xpY3k7CiAgICAgU3RyaW5nIG1f
c2NoZW1lOwogICAgIFN0cmluZyBtX2hvc3Q7CiAgICAgaW50IG1fcG9ydDsKQEAgLTMwNCwxMiAr
Mjk1LDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIENTUFNvdXJjZUxpc3QgewogcHVibGljOgotICAg
IENTUFNvdXJjZUxpc3QoQ29udGVudFNlY3VyaXR5UG9saWN5KiwgY29uc3QgU3RyaW5nJiBkaXJl
Y3RpdmVOYW1lKTsKKyAgICBDU1BTb3VyY2VMaXN0KGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGlj
eSYsIGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSk7CiAKICAgICB2b2lkIHBhcnNlKGNvbnN0
IFN0cmluZyYpOwogICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBVUkwmKTsKICAgICBib29sIGFsbG93
SW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0lubGluZTsgfQogICAgIGJvb2wgYWxsb3dF
dmFsKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0V2YWw7IH0KKyAgICBib29sIGFsbG93U2VsZigp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTZWxmOyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBwYXJz
ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQpOwpAQCAtMzIwLDI1ICszMTIs
MTggQEAgcHJpdmF0ZToKICAgICBib29sIHBhcnNlUG9ydChjb25zdCBVQ2hhciogYmVnaW4sIGNv
bnN0IFVDaGFyKiBlbmQsIGludCYgcG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKICAgICBi
b29sIHBhcnNlUGF0aChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmlu
ZyYgcGF0aCk7CiAKLSAgICB2b2lkIGFkZFNvdXJjZVNlbGYoKTsKLSAgICB2b2lkIGFkZFNvdXJj
ZVN0YXIoKTsKLSAgICB2b2lkIGFkZFNvdXJjZVVuc2FmZUlubGluZSgpOwotICAgIHZvaWQgYWRk
U291cmNlVW5zYWZlRXZhbCgpOwotCi0gICAgQ29udGVudFNlY3VyaXR5UG9saWN5KiBtX3BvbGlj
eTsKKyAgICBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIG1fcG9saWN5OwogICAgIFZlY3Rv
cjxDU1BTb3VyY2U+IG1fbGlzdDsKICAgICBTdHJpbmcgbV9kaXJlY3RpdmVOYW1lOwotICAgIGJv
b2wgbV9hbGxvd1N0YXI7Ci0gICAgYm9vbCBtX2FsbG93SW5saW5lOwotICAgIGJvb2wgbV9hbGxv
d0V2YWw7CisgICAgYm9vbCBtX2FsbG93U2VsZiB7IGZhbHNlIH07CisgICAgYm9vbCBtX2FsbG93
U3RhciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2FsbG93SW5saW5lIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1fYWxsb3dFdmFsIHsgZmFsc2UgfTsKIH07CiAKLUNTUFNvdXJjZUxpc3Q6OkNTUFNvdXJj
ZUxpc3QoQ29udGVudFNlY3VyaXR5UG9saWN5KiBwb2xpY3ksIGNvbnN0IFN0cmluZyYgZGlyZWN0
aXZlTmFtZSkKK0NTUFNvdXJjZUxpc3Q6OkNTUFNvdXJjZUxpc3QoY29uc3QgQ29udGVudFNlY3Vy
aXR5UG9saWN5JiBwb2xpY3ksIGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSkKICAgICA6IG1f
cG9saWN5KHBvbGljeSkKICAgICAsIG1fZGlyZWN0aXZlTmFtZShkaXJlY3RpdmVOYW1lKQotICAg
ICwgbV9hbGxvd1N0YXIoZmFsc2UpCi0gICAgLCBtX2FsbG93SW5saW5lKGZhbHNlKQotICAgICwg
bV9hbGxvd0V2YWwoZmFsc2UpCiB7CiB9CiAKQEAgLTM1OCw2ICszNDMsOSBAQCBib29sIENTUFNv
dXJjZUxpc3Q6Om1hdGNoZXMoY29uc3QgVVJMJiB1cmwpCiAKICAgICBVUkwgZWZmZWN0aXZlVVJM
ID0gU2VjdXJpdHlPcmlnaW46OnNob3VsZFVzZUlubmVyVVJMKHVybCkgPyBTZWN1cml0eU9yaWdp
bjo6ZXh0cmFjdElubmVyVVJMKHVybCkgOiB1cmw7CiAKKyAgICBpZiAobV9hbGxvd1NlbGYgJiYg
bV9wb2xpY3kudXJsTWF0Y2hlc1NlbGYoZWZmZWN0aXZlVVJMKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9saXN0KSB7CiAgICAgICAgIGlmIChlbnRy
eS5tYXRjaGVzKGVmZmVjdGl2ZVVSTCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5
MywxMCArMzgxLDEwIEBAIHZvaWQgQ1NQU291cmNlTGlzdDo6cGFyc2UoY29uc3QgVUNoYXIqIGJl
Z2luLCBjb25zdCBVQ2hhciogZW5kKQogICAgICAgICAgICAgaWYgKHNjaGVtZS5pc0VtcHR5KCkg
JiYgaG9zdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBpZiAoaXNEaXJlY3RpdmVOYW1lKGhvc3QpKQotICAgICAgICAgICAgICAgIG1fcG9saWN5LT5y
ZXBvcnREaXJlY3RpdmVBc1NvdXJjZUV4cHJlc3Npb24obV9kaXJlY3RpdmVOYW1lLCBob3N0KTsK
KyAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnREaXJlY3RpdmVBc1NvdXJjZUV4cHJlc3Np
b24obV9kaXJlY3RpdmVOYW1lLCBob3N0KTsKICAgICAgICAgICAgIG1fbGlzdC5hcHBlbmQoQ1NQ
U291cmNlKG1fcG9saWN5LCBzY2hlbWUsIGhvc3QsIHBvcnQsIHBhdGgsIGhvc3RIYXNXaWxkY2Fy
ZCwgcG9ydEhhc1dpbGRjYXJkKSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9wb2xp
Y3ktPnJlcG9ydEludmFsaWRTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZlTmFtZSwgU3RyaW5n
KGJlZ2luU291cmNlLCBwb3NpdGlvbiAtIGJlZ2luU291cmNlKSk7CisgICAgICAgICAgICBtX3Bv
bGljeS5yZXBvcnRJbnZhbGlkU291cmNlRXhwcmVzc2lvbihtX2RpcmVjdGl2ZU5hbWUsIFN0cmlu
ZyhiZWdpblNvdXJjZSwgcG9zaXRpb24gLSBiZWdpblNvdXJjZSkpOwogCiAgICAgICAgIEFTU0VS
VChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNwYWNlKCpwb3NpdGlvbikpOwogICAgICB9CkBA
IC00MTUsMjIgKzQwMywyMiBAQCBib29sIENTUFNvdXJjZUxpc3Q6OnBhcnNlU291cmNlKGNvbnN0
IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzYwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoZW5kIC0gYmVnaW4gPT0gMSAmJiAqYmVnaW4gPT0gJyonKSB7
Ci0gICAgICAgIGFkZFNvdXJjZVN0YXIoKTsKKyAgICAgICAgbV9hbGxvd1N0YXIgPSB0cnVlOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2luLCAiJ3NlbGYnIikpIHsKLSAgICAgICAgYWRk
U291cmNlU2VsZigpOworICAgICAgICBtX2FsbG93U2VsZiA9IHRydWU7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShi
ZWdpbiwgZW5kIC0gYmVnaW4sICIndW5zYWZlLWlubGluZSciKSkgewotICAgICAgICBhZGRTb3Vy
Y2VVbnNhZmVJbmxpbmUoKTsKKyAgICAgICAgbV9hbGxvd0lubGluZSA9IHRydWU7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICIndW5zYWZlLWV2YWwnIikpIHsKLSAgICAgICAgYWRk
U291cmNlVW5zYWZlRXZhbCgpOworICAgICAgICBtX2FsbG93RXZhbCA9IHRydWU7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTkwLDcgKzU3OCw3IEBAIGJvb2wgQ1NQU291cmNl
TGlzdDo6cGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3Ry
aW5nJiBwYXRoCiAgICAgLy8gcGF0aC90by9maWxlLmpzP3F1ZXJ5PXN0cmluZyB8fCBwYXRoL3Rv
L2ZpbGUuanMjYW5jaG9yCiAgICAgLy8gICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBeCiAgICAgaWYgKHBvc2l0aW9uIDwgZW5kKQotICAgICAgICBtX3BvbGlj
eS0+cmVwb3J0SW52YWxpZFBhdGhDaGFyYWN0ZXIobV9kaXJlY3RpdmVOYW1lLCBTdHJpbmcoYmVn
aW4sIGVuZCAtIGJlZ2luKSwgKnBvc2l0aW9uKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52
YWxpZFBhdGhDaGFyYWN0ZXIobV9kaXJlY3RpdmVOYW1lLCBTdHJpbmcoYmVnaW4sIGVuZCAtIGJl
Z2luKSwgKnBvc2l0aW9uKTsKIAogICAgIHBhdGggPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMo
U3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7CiAKQEAgLTYzMCwyOSArNjE4LDkgQEAg
Ym9vbCBDU1BTb3VyY2VMaXN0OjpwYXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBV
Q2hhciogZW5kLCBpbnQmIHBvcnQsIGIKICAgICByZXR1cm4gb2s7CiB9CiAKLXZvaWQgQ1NQU291
cmNlTGlzdDo6YWRkU291cmNlU2VsZigpCi17Ci0gICAgbV9saXN0LmFwcGVuZChDU1BTb3VyY2Uo
bV9wb2xpY3ksIG1fcG9saWN5LT5zZWN1cml0eU9yaWdpbigpLT5wcm90b2NvbCgpLCBtX3BvbGlj
eS0+c2VjdXJpdHlPcmlnaW4oKS0+aG9zdCgpLCBtX3BvbGljeS0+c2VjdXJpdHlPcmlnaW4oKS0+
cG9ydCgpLCBTdHJpbmcoKSwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgQ1NQU291cmNlTGlz
dDo6YWRkU291cmNlU3RhcigpCi17Ci0gICAgbV9hbGxvd1N0YXIgPSB0cnVlOwotfQotCi12b2lk
IENTUFNvdXJjZUxpc3Q6OmFkZFNvdXJjZVVuc2FmZUlubGluZSgpCi17Ci0gICAgbV9hbGxvd0lu
bGluZSA9IHRydWU7Ci19Ci0KLXZvaWQgQ1NQU291cmNlTGlzdDo6YWRkU291cmNlVW5zYWZlRXZh
bCgpCi17Ci0gICAgbV9hbGxvd0V2YWwgPSB0cnVlOwotfQotCiBjbGFzcyBDU1BEaXJlY3RpdmUg
ewogcHVibGljOgotICAgIENTUERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIENvbnRlbnRTZWN1cml0eVBvbGljeSogcG9saWN5KQorICAgIENTUERpcmVj
dGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IENvbnRl
bnRTZWN1cml0eVBvbGljeSYgcG9saWN5KQogICAgICAgICA6IG1fbmFtZShuYW1lKQogICAgICAg
ICAsIG1fdGV4dChuYW1lICsgJyAnICsgdmFsdWUpCiAgICAgICAgICwgbV9wb2xpY3kocG9saWN5
KQpAQCAtNjYyLDE3ICs2MzAsMTcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgdGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgY29uc3QgQ29udGVu
dFNlY3VyaXR5UG9saWN5KiBwb2xpY3koKSBjb25zdCB7IHJldHVybiBtX3BvbGljeTsgfQorICAg
IGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgcG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9w
b2xpY3k7IH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX3Rl
eHQ7Ci0gICAgQ29udGVudFNlY3VyaXR5UG9saWN5KiBtX3BvbGljeTsKKyAgICBjb25zdCBDb250
ZW50U2VjdXJpdHlQb2xpY3kmIG1fcG9saWN5OwogfTsKIAogY2xhc3MgTWVkaWFMaXN0RGlyZWN0
aXZlIDogcHVibGljIENTUERpcmVjdGl2ZSB7CiBwdWJsaWM6Ci0gICAgTWVkaWFMaXN0RGlyZWN0
aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5KiBwb2xpY3kpCisgICAgTWVkaWFMaXN0RGlyZWN0aXZlKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBw
b2xpY3kpCiAgICAgICAgIDogQ1NQRGlyZWN0aXZlKG5hbWUsIHZhbHVlLCBwb2xpY3kpCiAgICAg
ewogICAgICAgICBwYXJzZSh2YWx1ZSk7CkBAIC02OTMsNyArNjYxLDcgQEAgcHJpdmF0ZToKIAog
ICAgICAgICAvLyAncGx1Z2luLXR5cGVzIF9fX187JyBPUiAncGx1Z2luLXR5cGVzOycKICAgICAg
ICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcG9saWN5KCktPnJlcG9ydElu
dmFsaWRQbHVnaW5UeXBlcyh2YWx1ZSk7CisgICAgICAgICAgICBwb2xpY3koKS5yZXBvcnRJbnZh
bGlkUGx1Z2luVHlwZXModmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
QEAgLTcwOSw3ICs2NzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYmVnaW4gPSBwb3NpdGlv
bjsKICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHk8aXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBv
c2l0aW9uLCBlbmQpKSB7CiAgICAgICAgICAgICAgICAgc2tpcFdoaWxlPGlzTm90QVNDSUlTcGFj
ZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICAgICAgcG9saWN5KCktPnJlcG9ydEludmFs
aWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAgICAgICAg
ICAgICAgICBwb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBw
b3NpdGlvbiAtIGJlZ2luKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBza2lwV2hpbGU8aXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9u
LCBlbmQpOwpAQCAtNzE4LDcgKzY4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyAgICAg
IF4KICAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJy8nKSkgewog
ICAgICAgICAgICAgICAgIHNraXBXaGlsZTxpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQp
OwotICAgICAgICAgICAgICAgIHBvbGljeSgpLT5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3Ry
aW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgcG9saWN5KCku
cmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikp
OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC03MjYsNyAr
Njk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vICAgICAgIF4KICAgICAgICAgICAgIGlm
ICghc2tpcEV4YWN0bHk8aXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKSB7CiAg
ICAgICAgICAgICAgICAgc2tpcFdoaWxlPGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
Ci0gICAgICAgICAgICAgICAgcG9saWN5KCktPnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJp
bmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAgICAgICAgICAgICAgICBwb2xpY3koKS5y
ZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBz
a2lwV2hpbGU8aXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOwpAQCAtNzM1LDcg
KzcwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyAgICAgICAgICAgIF4gICAgICAgICAg
ICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICBeCiAgICAgICAgICAgICBpZiAocG9zaXRp
b24gPCBlbmQgJiYgaXNOb3RBU0NJSVNwYWNlKCpwb3NpdGlvbikpIHsKICAgICAgICAgICAgICAg
ICBza2lwV2hpbGU8aXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAg
ICAgICBwb2xpY3koKS0+cmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9z
aXRpb24gLSBiZWdpbikpOworICAgICAgICAgICAgICAgIHBvbGljeSgpLnJlcG9ydEludmFsaWRQ
bHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fcGx1Z2luVHlwZXMu
YWRkKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOwpAQCAtNzQ5LDcgKzcxNyw3IEBA
IHByaXZhdGU6CiAKIGNsYXNzIFNvdXJjZUxpc3REaXJlY3RpdmUgOiBwdWJsaWMgQ1NQRGlyZWN0
aXZlIHsKIHB1YmxpYzoKLSAgICBTb3VyY2VMaXN0RGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5KiBwb2xpY3kpCisg
ICAgU291cmNlTGlzdERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgcG9saWN5KQogICAgICAgICA6IENT
UERpcmVjdGl2ZShuYW1lLCB2YWx1ZSwgcG9saWN5KQogICAgICAgICAsIG1fc291cmNlTGlzdChw
b2xpY3ksIG5hbWUpCiAgICAgewpAQCAtNzU4LDcgKzcyNiwxMCBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGFsbG93cyhjb25zdCBVUkwmIHVybCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3NvdXJj
ZUxpc3QubWF0Y2hlcyh1cmwuaXNFbXB0eSgpID8gcG9saWN5KCktPnVybCgpIDogdXJsKTsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSByZXR1cm5pbmcgZmFsc2UgZm9y
IGFuIGVtcHR5IFVSTC4KKyAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gbV9zb3VyY2VMaXN0LmFsbG93U2VsZigpOworICAgICAgICByZXR1cm4gbV9zb3VyY2VM
aXN0Lm1hdGNoZXModXJsKTsKICAgICB9CiAKICAgICBib29sIGFsbG93SW5saW5lKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VMaXN0LmFsbG93SW5saW5lKCk7IH0KQEAgLTc3MSw4ICs3NDIsOCBA
QCBwcml2YXRlOgogY2xhc3MgQ1NQRGlyZWN0aXZlTGlzdCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3Rp
dmVMaXN0PiBjcmVhdGUoQ29udGVudFNlY3VyaXR5UG9saWN5KiwgY29uc3QgU3RyaW5nJiwgQ29u
dGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZSk7Ci0gICAgQ1NQRGlyZWN0aXZlTGlzdChDb250
ZW50U2VjdXJpdHlQb2xpY3kqLCBDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXJUeXBlKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZUxpc3Q+IGNyZWF0ZShDb250ZW50
U2VjdXJpdHlQb2xpY3kmLCBjb25zdCBTdHJpbmcmLCBDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFk
ZXJUeXBlKTsKKyAgICBDU1BEaXJlY3RpdmVMaXN0KENvbnRlbnRTZWN1cml0eVBvbGljeSYsIENv
bnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUpOwogCiAgICAgY29uc3QgU3RyaW5nJiBoZWFk
ZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcjsgfQogICAgIENvbnRlbnRTZWN1cml0eVBvbGlj
eUhlYWRlclR5cGUgaGVhZGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVyVHlwZTsgfQpA
QCAtNzk1LDExICs3NjYsMTAgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dGb3JtQWN0aW9uKGNv
bnN0IFVSTCYsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdDsK
ICAgICBib29sIGFsbG93QmFzZVVSSShjb25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7CiAKLSAgICB2b2lkIGdhdGhlclJlcG9ydFVSSXMoRE9N
U3RyaW5nTGlzdCYpIGNvbnN0OwogICAgIGNvbnN0IFN0cmluZyYgZXZhbERpc2FibGVkRXJyb3JN
ZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2U7IH0KICAg
ICBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uIHJlZmxlY3Rl
ZFhTU0Rpc3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlv
bjsgfQogICAgIGJvb2wgaXNSZXBvcnRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9yZXBvcnRPbmx5
OyB9Ci0gICAgY29uc3QgVmVjdG9yPFVSTD4mIHJlcG9ydFVSSXMoKSBjb25zdCB7IHJldHVybiBt
X3JlcG9ydFVSSXM7IH0KKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVwb3J0VVJJcygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwb3J0VVJJczsgfQogCiBwcml2YXRlOgogICAgIHZvaWQgcGFyc2Uo
Y29uc3QgU3RyaW5nJik7CkBAIC04MzIsNyArODAyLDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
ZGVueUlmRW5mb3JjaW5nUG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9yZXBvcnRPbmx5OyB9CiAK
LSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIG1fcG9saWN5OworICAgIC8vIEZJWE1FOiBNYWtl
IHRoaXMgYSBjb25zdCByZWZlcmVuY2Ugb25jZSB3ZSB0ZWFjaCBhcHBseVNhbmRib3hQb2xpY3ko
KSB0byBzdG9yZSBpdHMgcG9saWN5IGFzIG9wcG9zZWQgdG8gYXBwbHlpbmcgaXQgZGlyZWN0bHkg
b250byBDb250ZW50U2VjdXJpdHlQb2xpY3kuCisgICAgQ29udGVudFNlY3VyaXR5UG9saWN5JiBt
X3BvbGljeTsKIAogICAgIFN0cmluZyBtX2hlYWRlcjsKICAgICBDb250ZW50U2VjdXJpdHlQb2xp
Y3lIZWFkZXJUeXBlIG1faGVhZGVyVHlwZTsKQEAgLTg1NCwxMiArODI1LDEyIEBAIHByaXZhdGU6
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUxpc3REaXJlY3RpdmU+IG1fc2NyaXB0U3JjOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VMaXN0RGlyZWN0aXZlPiBtX3N0eWxlU3JjOwogCi0g
ICAgVmVjdG9yPFVSTD4gbV9yZXBvcnRVUklzOworICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVwb3J0
VVJJczsKIAogICAgIFN0cmluZyBtX2V2YWxEaXNhYmxlZEVycm9yTWVzc2FnZTsKIH07CiAKLUNT
UERpcmVjdGl2ZUxpc3Q6OkNTUERpcmVjdGl2ZUxpc3QoQ29udGVudFNlY3VyaXR5UG9saWN5KiBw
b2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUgdHlwZSkKK0NTUERpcmVjdGl2
ZUxpc3Q6OkNTUERpcmVjdGl2ZUxpc3QoQ29udGVudFNlY3VyaXR5UG9saWN5JiBwb2xpY3ksIENv
bnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUgdHlwZSkKICAgICA6IG1fcG9saWN5KHBvbGlj
eSkKICAgICAsIG1faGVhZGVyVHlwZSh0eXBlKQogICAgICwgbV9yZXBvcnRPbmx5KGZhbHNlKQpA
QCAtODY5LDcgKzg0MCw3IEBAIENTUERpcmVjdGl2ZUxpc3Q6OkNTUERpcmVjdGl2ZUxpc3QoQ29u
dGVudFNlY3VyaXR5UG9saWN5KiBwb2xpY3ksIENvbnRlbnRTZWN1cml0CiAgICAgbV9yZXBvcnRP
bmx5ID0gKHR5cGUgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZTo6UmVwb3J0IHx8
IHR5cGUgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZTo6UHJlZml4ZWRSZXBvcnQp
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlTGlzdD4gQ1NQRGlyZWN0aXZlTGlz
dDo6Y3JlYXRlKENvbnRlbnRTZWN1cml0eVBvbGljeSogcG9saWN5LCBjb25zdCBTdHJpbmcmIGhl
YWRlciwgQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyVHlwZSB0eXBlKQorc3RkOjp1bmlxdWVf
cHRyPENTUERpcmVjdGl2ZUxpc3Q+IENTUERpcmVjdGl2ZUxpc3Q6OmNyZWF0ZShDb250ZW50U2Vj
dXJpdHlQb2xpY3kmIHBvbGljeSwgY29uc3QgU3RyaW5nJiBoZWFkZXIsIENvbnRlbnRTZWN1cml0
eVBvbGljeUhlYWRlclR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGRpcmVjdGl2ZXMgPSBzdGQ6Om1h
a2VfdW5pcXVlPENTUERpcmVjdGl2ZUxpc3Q+KHBvbGljeSwgdHlwZSk7CiAgICAgZGlyZWN0aXZl
cy0+cGFyc2UoaGVhZGVyKTsKQEAgLTg4MCw3ICs4NTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQ
RGlyZWN0aXZlTGlzdD4gQ1NQRGlyZWN0aXZlTGlzdDo6Y3JlYXRlKENvbnRlbnRTZWN1cml0eVBv
bGljeQogICAgIH0KIAogICAgIGlmIChkaXJlY3RpdmVzLT5pc1JlcG9ydE9ubHkoKSAmJiBkaXJl
Y3RpdmVzLT5yZXBvcnRVUklzKCkuaXNFbXB0eSgpKQotICAgICAgICBwb2xpY3ktPnJlcG9ydE1p
c3NpbmdSZXBvcnRVUkkoaGVhZGVyKTsKKyAgICAgICAgcG9saWN5LnJlcG9ydE1pc3NpbmdSZXBv
cnRVUkkoaGVhZGVyKTsKIAogICAgIHJldHVybiBkaXJlY3RpdmVzOwogfQpAQCAtODg4LDcgKzg1
OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVMaXN0PiBDU1BEaXJlY3RpdmVMaXN0
OjpjcmVhdGUoQ29udGVudFNlY3VyaXR5UG9saWN5CiB2b2lkIENTUERpcmVjdGl2ZUxpc3Q6OnJl
cG9ydFZpb2xhdGlvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQsIGNvbnN0IFN0cmluZyYg
ZWZmZWN0aXZlRGlyZWN0aXZlLCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBV
UkwmIGJsb2NrZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRp
bmFsTnVtYmVyJiBjb250ZXh0TGluZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlKSBjb25zdAogewog
ICAgIFN0cmluZyBtZXNzYWdlID0gbV9yZXBvcnRPbmx5ID8gIltSZXBvcnQgT25seV0gIiArIGNv
bnNvbGVNZXNzYWdlIDogY29uc29sZU1lc3NhZ2U7Ci0gICAgbV9wb2xpY3ktPnJlcG9ydFZpb2xh
dGlvbihkaXJlY3RpdmVUZXh0LCBlZmZlY3RpdmVEaXJlY3RpdmUsIG1lc3NhZ2UsIGJsb2NrZWRV
UkwsIG1fcmVwb3J0VVJJcywgbV9oZWFkZXIsIGNvbnRleHRVUkwsIGNvbnRleHRMaW5lLCBzdGF0
ZSk7CisgICAgbV9wb2xpY3kucmVwb3J0VmlvbGF0aW9uKGRpcmVjdGl2ZVRleHQsIGVmZmVjdGl2
ZURpcmVjdGl2ZSwgbWVzc2FnZSwgYmxvY2tlZFVSTCwgbV9yZXBvcnRVUklzLCBtX2hlYWRlciwg
Y29udGV4dFVSTCwgY29udGV4dExpbmUsIHN0YXRlKTsKIH0KIAogYm9vbCBDU1BEaXJlY3RpdmVM
aXN0OjpjaGVja0V2YWwoU291cmNlTGlzdERpcmVjdGl2ZSogZGlyZWN0aXZlKSBjb25zdApAQCAt
OTMxLDcgKzkwMiw3IEBAIGJvb2wgQ1NQRGlyZWN0aXZlTGlzdDo6Y2hlY2tFdmFsQW5kUmVwb3J0
VmlvbGF0aW9uKFNvdXJjZUxpc3REaXJlY3RpdmUqIGRpcmVjdGl2CiAKICAgICByZXBvcnRWaW9s
YXRpb24oZGlyZWN0aXZlLT50ZXh0KCksIHNjcmlwdFNyYywgY29uc29sZU1lc3NhZ2UgKyAiXCIi
ICsgZGlyZWN0aXZlLT50ZXh0KCkgKyAiXCIuIiArIHN1ZmZpeCArICJcbiIsIFVSTCgpLCBjb250
ZXh0VVJMLCBjb250ZXh0TGluZSwgc3RhdGUpOwogICAgIGlmICghbV9yZXBvcnRPbmx5KSB7Ci0g
ICAgICAgIG1fcG9saWN5LT5yZXBvcnRCbG9ja2VkU2NyaXB0RXhlY3V0aW9uVG9JbnNwZWN0b3Io
ZGlyZWN0aXZlLT50ZXh0KCkpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRCbG9ja2VkU2NyaXB0
RXhlY3V0aW9uVG9JbnNwZWN0b3IoZGlyZWN0aXZlLT50ZXh0KCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtOTYzLDcgKzkzNCw3IEBAIGJvb2wg
Q1NQRGlyZWN0aXZlTGlzdDo6Y2hlY2tJbmxpbmVBbmRSZXBvcnRWaW9sYXRpb24oU291cmNlTGlz
dERpcmVjdGl2ZSogZGlyZWN0CiAKICAgICBpZiAoIW1fcmVwb3J0T25seSkgewogICAgICAgICBp
ZiAoaXNTY3JpcHQpCi0gICAgICAgICAgICBtX3BvbGljeS0+cmVwb3J0QmxvY2tlZFNjcmlwdEV4
ZWN1dGlvblRvSW5zcGVjdG9yKGRpcmVjdGl2ZS0+dGV4dCgpKTsKKyAgICAgICAgICAgIG1fcG9s
aWN5LnJlcG9ydEJsb2NrZWRTY3JpcHRFeGVjdXRpb25Ub0luc3BlY3RvcihkaXJlY3RpdmUtPnRl
eHQoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBA
IC0xMTEzLDEyICsxMDg0LDYgQEAgYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjphbGxvd0Nvbm5lY3RU
b1NvdXJjZShjb25zdCBVUkwmIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWMKICAgICAgICAgKG1f
cmVwb3J0T25seSB8fCBjaGVja1NvdXJjZShvcGVyYXRpdmVEaXJlY3RpdmUobV9jb25uZWN0U3Jj
LmdldCgpKSwgdXJsKSk7CiB9CiAKLXZvaWQgQ1NQRGlyZWN0aXZlTGlzdDo6Z2F0aGVyUmVwb3J0
VVJJcyhET01TdHJpbmdMaXN0JiBsaXN0KSBjb25zdAotewotICAgIGZvciAoYXV0byYgdXJpIDog
bV9yZXBvcnRVUklzKQotICAgICAgICBsaXN0LmFwcGVuZCh1cmkuc3RyaW5nKCkpOwotfQotCiBi
b29sIENTUERpcmVjdGl2ZUxpc3Q6OmFsbG93Rm9ybUFjdGlvbihjb25zdCBVUkwmIHVybCwgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25z
dAogewogICAgIHJldHVybiByZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5
OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQgPwpAQCAtMTE4Myw3ICsxMTQ4LDcgQEAgYm9v
bCBDU1BEaXJlY3RpdmVMaXN0OjpwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hhciogYmVnaW4sIGNv
bnN0IFVDaGFyKiBlbmQsIFN0cmkKICAgICAvLyBUaGUgZGlyZWN0aXZlLW5hbWUgbXVzdCBiZSBu
b24tZW1wdHkuCiAgICAgaWYgKG5hbWVCZWdpbiA9PSBwb3NpdGlvbikgewogICAgICAgICBza2lw
V2hpbGU8aXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgbV9wb2xpY3kt
PnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0g
bmFtZUJlZ2luKSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZl
KFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJlZ2luKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKQEAgLTExOTQsNyArMTE1OSw3IEBAIGJvb2wgQ1NQRGlyZWN0aXZl
TGlzdDo6cGFyc2VEaXJlY3RpdmUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5k
LCBTdHJpCiAKICAgICBpZiAoIXNraXBFeGFjdGx5PGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVu
ZCkpIHsKICAgICAgICAgc2tpcFdoaWxlPGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
Ci0gICAgICAgIG1fcG9saWN5LT5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFt
ZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdpbikpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRV
bnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlvbiAtIG5hbWVCZWdp
bikpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMjA0LDcgKzExNjksNyBA
QCBib29sIENTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBiZWdp
biwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaQogICAgIHNraXBXaGlsZTxpc0RpcmVjdGl2ZVZhbHVl
Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKIAogICAgIGlmIChwb3NpdGlvbiAhPSBlbmQpIHsK
LSAgICAgICAgbV9wb2xpY3ktPnJlcG9ydEludmFsaWREaXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcihu
YW1lLCBTdHJpbmcodmFsdWVCZWdpbiwgZW5kIC0gdmFsdWVCZWdpbikpOworICAgICAgICBtX3Bv
bGljeS5yZXBvcnRJbnZhbGlkRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIobmFtZSwgU3RyaW5nKHZh
bHVlQmVnaW4sIGVuZCAtIHZhbHVlQmVnaW4pKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApAQCAtMTIxOSw3ICsxMTg0LDcgQEAgYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjpwYXJzZURp
cmVjdGl2ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmkKIHZvaWQg
Q1NQRGlyZWN0aXZlTGlzdDo6cGFyc2VSZXBvcnRVUkkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogewogICAgIGlmICghbV9yZXBvcnRVUklzLmlzRW1wdHkoKSkgewot
ICAgICAgICBtX3BvbGljeS0+cmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAg
ICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTEyMzUsNyArMTIwMCw3IEBAIHZvaWQgQ1NQRGlyZWN0aXZlTGlzdDo6
cGFyc2VSZXBvcnRVUkkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQog
CiAgICAgICAgIGlmICh1cmxCZWdpbiA8IHBvc2l0aW9uKSB7CiAgICAgICAgICAgICBTdHJpbmcg
dXJsID0gU3RyaW5nKHVybEJlZ2luLCBwb3NpdGlvbiAtIHVybEJlZ2luKTsKLSAgICAgICAgICAg
IG1fcmVwb3J0VVJJcy5hcHBlbmQobV9wb2xpY3ktPmNvbXBsZXRlVVJMKHVybCkpOworICAgICAg
ICAgICAgbV9yZXBvcnRVUklzLmFwcGVuZCh1cmwpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
MTI0NSw3ICsxMjEwLDcgQEAgdGVtcGxhdGU8Y2xhc3MgQ1NQRGlyZWN0aXZlVHlwZT4KIHZvaWQg
Q1NQRGlyZWN0aXZlTGlzdDo6c2V0Q1NQRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+JiBkaXJl
Y3RpdmUpCiB7CiAgICAgaWYgKGRpcmVjdGl2ZSkgewotICAgICAgICBtX3BvbGljeS0+cmVwb3J0
RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNh
dGVEaXJlY3RpdmUobmFtZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZGlyZWN0aXZl
ID0gc3RkOjptYWtlX3VuaXF1ZTxDU1BEaXJlY3RpdmVUeXBlPihuYW1lLCB2YWx1ZSwgbV9wb2xp
Y3kpOwpAQCAtMTI1NCwyNyArMTIxOSwyNyBAQCB2b2lkIENTUERpcmVjdGl2ZUxpc3Q6OnNldENT
UERpcmVjdGl2ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsCiB2b2lk
IENTUERpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgc2FuZGJveFBvbGljeSkKIHsKICAgICBpZiAobV9oYXZlU2FuZGJveFBv
bGljeSkgewotICAgICAgICBtX3BvbGljeS0+cmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUp
OworICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNhdGVEaXJlY3RpdmUobmFtZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgbV9oYXZlU2FuZGJveFBvbGljeSA9IHRydWU7CiAgICAg
U3RyaW5nIGludmFsaWRUb2tlbnM7Ci0gICAgbV9wb2xpY3ktPmVuZm9yY2VTYW5kYm94RmxhZ3Mo
U2VjdXJpdHlDb250ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koc2FuZGJveFBvbGljeSwgaW52YWxp
ZFRva2VucykpOworICAgIG1fcG9saWN5LmVuZm9yY2VTYW5kYm94RmxhZ3MoU2VjdXJpdHlDb250
ZXh0OjpwYXJzZVNhbmRib3hQb2xpY3koc2FuZGJveFBvbGljeSwgaW52YWxpZFRva2VucykpOwog
ICAgIGlmICghaW52YWxpZFRva2Vucy5pc051bGwoKSkKLSAgICAgICAgbV9wb2xpY3ktPnJlcG9y
dEludmFsaWRTYW5kYm94RmxhZ3MoaW52YWxpZFRva2Vucyk7CisgICAgICAgIG1fcG9saWN5LnJl
cG9ydEludmFsaWRTYW5kYm94RmxhZ3MoaW52YWxpZFRva2Vucyk7CiB9CiAKIHZvaWQgQ1NQRGly
ZWN0aXZlTGlzdDo6cGFyc2VSZWZsZWN0ZWRYU1MoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQogewogICAgIGlmIChtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uICE9IENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTVW5zZXQpIHsKLSAgICAgICAgbV9wb2xp
Y3ktPnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAgbV9wb2xpY3kucmVw
b3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOwogICAgICAgICBtX3JlZmxlY3RlZFhTU0Rpc3Bv
c2l0aW9uID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWZsZWN0ZWRYU1NJbnZhbGlkOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAg
ICBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWZs
ZWN0ZWRYU1NJbnZhbGlkOwotICAgICAgICBtX3BvbGljeS0+cmVwb3J0SW52YWxpZFJlZmxlY3Rl
ZFhTUyh2YWx1ZSk7CisgICAgICAgIG1fcG9saWN5LnJlcG9ydEludmFsaWRSZWZsZWN0ZWRYU1Mo
dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjk2LDcgKzEyNjEsNyBAQCB2
b2lkIENTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVmbGVjdGVkWFNTKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZQogICAgICAgICBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9u
ID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpCbG9ja1JlZmxlY3RlZFhTUzsKICAgICBlbHNlIHsK
ICAgICAgICAgbV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiA9IENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6UmVmbGVjdGVkWFNTSW52YWxpZDsKLSAgICAgICAgbV9wb2xpY3ktPnJlcG9ydEludmFsaWRS
ZWZsZWN0ZWRYU1ModmFsdWUpOworICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUmVmbGVj
dGVkWFNTKHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTMwNyw3ICsxMjcy
LDcgQEAgdm9pZCBDU1BEaXJlY3RpdmVMaXN0OjpwYXJzZVJlZmxlY3RlZFhTUyhjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUKICAgICAvLyB2YWx1ZTEgdmFsdWUyCiAgICAg
Ly8gICAgICAgIF4KICAgICBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uID0gQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpSZWZsZWN0ZWRYU1NJbnZhbGlkOwotICAgIG1fcG9saWN5LT5yZXBvcnRJbnZh
bGlkUmVmbGVjdGVkWFNTKHZhbHVlKTsKKyAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUmVmbGVj
dGVkWFNTKHZhbHVlKTsKIH0KIAogdm9pZCBDU1BEaXJlY3RpdmVMaXN0OjphZGREaXJlY3RpdmUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtMTMzNyw3ICsxMzAy
LDcgQEAgdm9pZCBDU1BEaXJlY3RpdmVMaXN0OjphZGREaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKG5hbWUsIHJlcG9ydFVSSSkpCiAgICAgICAgIHBhcnNlUmVwb3J0VVJJKG5h
bWUsIHZhbHVlKTsKICNpZiBFTkFCTEUoQ1NQX05FWFQpCi0gICAgZWxzZSBpZiAobV9wb2xpY3kt
PmV4cGVyaW1lbnRhbEZlYXR1cmVzRW5hYmxlZCgpKSB7CisgICAgZWxzZSBpZiAobV9wb2xpY3ku
ZXhwZXJpbWVudGFsRmVhdHVyZXNFbmFibGVkKCkpIHsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIGJhc2VVUkkpKQogICAgICAgICAgICAgc2V0Q1NQRGly
ZWN0aXZlPFNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2Jhc2VVUkkpOwogICAg
ICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBmb3JtQWN0
aW9uKSkKQEAgLTEzNDcsMTcgKzEzMTIsMjggQEAgdm9pZCBDU1BEaXJlY3RpdmVMaXN0OjphZGRE
aXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
ICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCByZWZsZWN0ZWRY
U1MpKQogICAgICAgICAgICAgcGFyc2VSZWZsZWN0ZWRYU1MobmFtZSwgdmFsdWUpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX3BvbGljeS0+cmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUo
bmFtZSk7CisgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShu
YW1lKTsKICAgICB9CiAjZW5kaWYKICAgICBlbHNlCi0gICAgICAgIG1fcG9saWN5LT5yZXBvcnRV
bnN1cHBvcnRlZERpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0VW5zdXBw
b3J0ZWREaXJlY3RpdmUobmFtZSk7Cit9CisKK0NvbnRlbnRTZWN1cml0eVBvbGljeTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoJnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCisgICAgLCBtX3NhbmRib3hGbGFncyhTYW5kYm94Tm9uZSkKK3sKKyAgICBBU1NFUlQo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBhdXRvJiBzZWN1
cml0eU9yaWdpbiA9ICpzY3JpcHRFeGVjdXRpb25Db250ZXh0LnNlY3VyaXR5T3JpZ2luKCk7Cisg
ICAgbV9zZWxmU291cmNlUHJvdG9jb2wgPSBzZWN1cml0eU9yaWdpbi5wcm90b2NvbCgpOworICAg
IG1fc2VsZlNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NQU291cmNlPigqdGhpcywgbV9zZWxm
U291cmNlUHJvdG9jb2wsIHNlY3VyaXR5T3JpZ2luLmhvc3QoKSwgc2VjdXJpdHlPcmlnaW4ucG9y
dCgpLCBlbXB0eVN0cmluZygpLCBmYWxzZSwgZmFsc2UpOwogfQogCi1Db250ZW50U2VjdXJpdHlQ
b2xpY3k6OkNvbnRlbnRTZWN1cml0eVBvbGljeShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpCi0gICAgLCBtX292ZXJyaWRlSW5saW5lU3R5bGVBbGxvd2VkKGZh
bHNlKQorQ29udGVudFNlY3VyaXR5UG9saWN5OjpDb250ZW50U2VjdXJpdHlQb2xpY3koY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luKQorICAgIDogbV9zYW5kYm94RmxhZ3MoU2Fu
ZGJveE5vbmUpCiB7CisgICAgbV9zZWxmU291cmNlUHJvdG9jb2wgPSBzZWN1cml0eU9yaWdpbi5w
cm90b2NvbCgpOworICAgIG1fc2VsZlNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NQU291cmNl
PigqdGhpcywgbV9zZWxmU291cmNlUHJvdG9jb2wsIHNlY3VyaXR5T3JpZ2luLmhvc3QoKSwgc2Vj
dXJpdHlPcmlnaW4ucG9ydCgpLCBlbXB0eVN0cmluZygpLCBmYWxzZSwgZmFsc2UpOwogfQogCiBD
b250ZW50U2VjdXJpdHlQb2xpY3k6On5Db250ZW50U2VjdXJpdHlQb2xpY3koKQpAQCAtMTQwMCw5
ICsxMzc2LDkgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZFJlY2VpdmVIZWFkZXIo
Y29uc3QgU3RyaW5nJiBoZWFkZXIsIENvbnRlbnRTZWN1cmkKIAogICAgICAgICAvLyBoZWFkZXIx
LGhlYWRlcjIgT1IgaGVhZGVyMQogICAgICAgICAvLyAgICAgICAgXiAgICAgICAgICAgICAgICAg
IF4KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZUxpc3Q+IHBvbGljeSA9IENT
UERpcmVjdGl2ZUxpc3Q6OmNyZWF0ZSh0aGlzLCBTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVn
aW4pLCB0eXBlKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZUxpc3Q+IHBv
bGljeSA9IENTUERpcmVjdGl2ZUxpc3Q6OmNyZWF0ZSgqdGhpcywgU3RyaW5nKGJlZ2luLCBwb3Np
dGlvbiAtIGJlZ2luKSwgdHlwZSk7CiAgICAgICAgIGlmICghcG9saWN5LT5hbGxvd0V2YWwoMCwg
Q29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlN1cHByZXNzUmVwb3J0KSkK
LSAgICAgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGlzYWJsZUV2YWwocG9saWN5
LT5ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKSk7CisgICAgICAgICAgICBtX2xhc3RQb2xpY3lF
dmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UgPSBwb2xpY3ktPmV2YWxEaXNhYmxlZEVycm9yTWVzc2Fn
ZSgpOwogCiAgICAgICAgIG1fcG9saWNpZXMuYXBwZW5kKHBvbGljeS5yZWxlYXNlKCkpOwogCkBA
IC0xNDExLDYgKzEzODcsMTkgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZFJlY2Vp
dmVIZWFkZXIoY29uc3QgU3RyaW5nJiBoZWFkZXIsIENvbnRlbnRTZWN1cmkKICAgICAgICAgc2tp
cEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJywnKTsKICAgICAgICAgYmVnaW4gPSBwb3NpdGlvbjsK
ICAgICB9CisKKyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICBhcHBs
eVBvbGljeVRvU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCit2b2lkIENvbnRlbnRTZWN1
cml0eVBvbGljeTo6YXBwbHlQb2xpY3lUb1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKQoreworICAg
IEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgIGlmICghbV9sYXN0UG9saWN5
RXZhbERpc2FibGVkRXJyb3JNZXNzYWdlLmlzTnVsbCgpKQorICAgICAgICBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmRpc2FibGVFdmFsKG1fbGFzdFBvbGljeUV2YWxEaXNhYmxlZEVycm9yTWVz
c2FnZSk7CisKKyAgICBpZiAobV9zYW5kYm94RmxhZ3MgIT0gU2FuZGJveE5vbmUgJiYgaXM8RG9j
dW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCisgICAgICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+ZW5mb3JjZVNhbmRib3hGbGFncyhtX3NhbmRib3hGbGFncyk7CiB9CiAKIHZv
aWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpzZXRPdmVycmlkZUFsbG93SW5saW5lU3R5bGUoYm9v
bCB2YWx1ZSkKQEAgLTE0MTgsNiArMTQwNywyMCBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6c2V0T3ZlcnJpZGVBbGxvd0lubGluZVN0eWxlKGJvb2wgdmFsdWUpCiAgICAgbV9vdmVycmlk
ZUlubGluZVN0eWxlQWxsb3dlZCA9IHZhbHVlOwogfQogCitib29sIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6dXJsTWF0Y2hlc1NlbGYoY29uc3QgVVJMJiB1cmwpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc2VsZlNvdXJjZS0+bWF0Y2hlcyh1cmwpOworfQorCitib29sIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6cHJvdG9jb2xNYXRjaGVzU2VsZihjb25zdCBVUkwmIHVybCkgY29uc3QKK3sKKyNpZiBF
TkFCTEUoQ1NQX05FWFQpCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1f
c2VsZlNvdXJjZVByb3RvY29sLCAiaHR0cCIpKQorICAgICAgICByZXR1cm4gdXJsLnByb3RvY29s
SXNJbkhUVFBGYW1pbHkoKTsKKyNlbmRpZgorICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKHVybC5wcm90b2NvbCgpLCBtX3NlbGZTb3VyY2VQcm90b2NvbCk7Cit9CisKIHRlbXBsYXRl
PGJvb2wgKENTUERpcmVjdGl2ZUxpc3Q6OiphbGxvd2VkKShDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q+CiBib29sIGlzQWxsb3dlZEJ5QWxsKGNvbnN0IENTUERp
cmVjdGl2ZUxpc3RWZWN0b3ImIHBvbGljaWVzLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9y
dGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpCiB7CkBAIC0xNTczLDI4ICsxNTc2LDExIEBAIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTRGlzcG9zaXRpb24gQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpyZWZsZWN0ZWRYCiAKIHZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpnYXRo
ZXJSZXBvcnRVUklzKERPTVN0cmluZ0xpc3QmIGxpc3QpIGNvbnN0CiB7Ci0gICAgZm9yIChhdXRv
JiBwb2xpY3kgOiBtX3BvbGljaWVzKQotICAgICAgICBwb2xpY3ktPmdhdGhlclJlcG9ydFVSSXMo
bGlzdCk7Ci19Ci0KLVNlY3VyaXR5T3JpZ2luKiBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnNlY3Vy
aXR5T3JpZ2luKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5zZWN1cml0eU9yaWdpbigpOwotfQotCi1jb25zdCBVUkwmIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6dXJsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT51
cmwoKTsKLX0KLQotVVJMIENvbnRlbnRTZWN1cml0eVBvbGljeTo6Y29tcGxldGVVUkwoY29uc3Qg
U3RyaW5nJiB1cmwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+Y29tcGxldGVVUkwodXJsKTsKLX0KLQotdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmVu
Zm9yY2VTYW5kYm94RmxhZ3MoU2FuZGJveEZsYWdzIG1hc2spIGNvbnN0Ci17Ci0gICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5lbmZvcmNlU2FuZGJveEZsYWdzKG1hc2spOworICAgIEFTU0VS
VChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgIGZvciAoYXV0byYgcG9saWN5IDogbV9w
b2xpY2llcykgeworICAgICAgICBmb3IgKGF1dG8mIHVybCA6IHBvbGljeS0+cmVwb3J0VVJJcygp
KQorICAgICAgICAgICAgbGlzdC5hcHBlbmQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5jb21w
bGV0ZVVSTCh1cmwpLnN0cmluZygpKTsKKyAgICB9CiB9CiAKIHN0YXRpYyBTdHJpbmcgc3RyaXBV
UkxGb3JVc2VJblJlcG9ydChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFVSTCYgdXJsKQpAQCAt
MTYyOCwxMiArMTYxNCwxMiBAQCBzdGF0aWMgdm9pZCBnYXRoZXJTZWN1cml0eVBvbGljeVZpb2xh
dGlvbkV2ZW50RGF0YShTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50SQogfQogI2VuZGlmCiAK
LXZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5n
JiBkaXJlY3RpdmVUZXh0LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSwgY29uc3Qg
U3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgVVJMJiBibG9ja2VkVVJMLCBjb25zdCBWZWN0
b3I8VVJMPiYgcmVwb3J0VVJJcywgY29uc3QgU3RyaW5nJiBoZWFkZXIsIGNvbnN0IFN0cmluZyYg
Y29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgSlNDOjpF
eGVjU3RhdGUqIHN0YXRlKSBjb25zdAordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9y
dFZpb2xhdGlvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQsIGNvbnN0IFN0cmluZyYgZWZm
ZWN0aXZlRGlyZWN0aXZlLCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBVUkwm
IGJsb2NrZWRVUkwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXBvcnRVUklzLCBjb25zdCBTdHJp
bmcmIGhlYWRlciwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxO
dW1iZXImIGNvbnRleHRMaW5lLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpIGNvbnN0CiB7CiAgICAg
bG9nVG9Db25zb2xlKGNvbnNvbGVNZXNzYWdlLCBjb250ZXh0VVJMLCBjb250ZXh0TGluZSwgc3Rh
dGUpOwogCiAgICAgLy8gRklYTUU6IFN1cHBvcnQgc2VuZGluZyByZXBvcnRzIGZyb20gd29ya2Vy
LgotICAgIGlmICghaXM8RG9jdW1lbnQ+KCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKQorICAg
IGlmICghaXM8RG9jdW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KTsKQEAgLTE2OTAsNyArMTY3Niw3IEBAIHZvaWQgQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpyZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVU
ZXh0LCBjb25zdCBTCiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXBvcnQgPSBGb3JtRGF0YTo6Y3Jl
YXRlKHJlcG9ydE9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpKTsKIAogICAgIGZvciAoY29u
c3QgYXV0byYgdXJsIDogcmVwb3J0VVJJcykKLSAgICAgICAgUGluZ0xvYWRlcjo6c2VuZFZpb2xh
dGlvblJlcG9ydCgqZnJhbWUsIHVybCwgcmVwb3J0LmNvcHlSZWYoKSk7CisgICAgICAgIFBpbmdM
b2FkZXI6OnNlbmRWaW9sYXRpb25SZXBvcnQoKmZyYW1lLCBkb2N1bWVudC5jb21wbGV0ZVVSTCh1
cmwpLCByZXBvcnQuY29weVJlZigpKTsKIH0KIAogdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKQEAg
LTE3NzQsMTIgKzE3NjAsMTQgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OnJlcG9ydE1p
c3NpbmdSZXBvcnRVUkkoY29uc3QgU3RyaW5nJiBwb2xpY3kpIGNvbnN0CiB2b2lkIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6bG9nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5l
LCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IDxodHRwOi8v
d2Via2l0Lm9yZy9iLzExNDMxNz4gQ29udGVudFNlY3VyaXR5UG9saWN5Ojpsb2dUb0NvbnNvbGUg
c2hvdWxkIGluY2x1ZGUgYSBjb2x1bW4gbnVtYmVyCi0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxl
dmVsOjpFcnJvciwgbWVzc2FnZSwgY29udGV4dFVSTCwgY29udGV4dExpbmUub25lQmFzZWRJbnQo
KSwgMCwgc3RhdGUpOworICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAg
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1lc3NhZ2UsIGNvbnRleHRVUkwsIGNv
bnRleHRMaW5lLm9uZUJhc2VkSW50KCksIDAsIHN0YXRlKTsKIH0KIAogdm9pZCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OnJlcG9ydEJsb2NrZWRTY3JpcHRFeGVjdXRpb25Ub0luc3BlY3Rvcihjb25z
dCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpIGNvbnN0CiB7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlDU1AobV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBkaXJlY3RpdmVUZXh0KTsKKyAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQor
ICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEV4ZWN1dGlvbkJsb2NrZWRC
eUNTUChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGRpcmVjdGl2ZVRleHQpOwogfQogCiBib29s
IENvbnRlbnRTZWN1cml0eVBvbGljeTo6ZXhwZXJpbWVudGFsRmVhdHVyZXNFbmFibGVkKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmgK
aW5kZXggYWIzY2IzNDJiODU0NWI1YTExZWY2ZjEyNzFiNTI5ZDY5Zjc4MjZlMy4uYzk2OWEzZTcx
ODUyZWQ5YWU4ZDhjOTg5ODUxMjU0ZTg3ZGY2NTBmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTMgKzI4LDkgQEAKICNkZWZpbmUgQ29u
dGVudFNlY3VyaXR5UG9saWN5X2gKIAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeVJl
c3BvbnNlSGVhZGVycy5oIgotI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRl
LmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNz
IE9yZGluYWxOdW1iZXI7CkBAIC00MiwyNiArMzksMjQgQEAgY2xhc3MgT3JkaW5hbE51bWJlcjsK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NQRGlyZWN0aXZlTGlzdDsKK2NsYXNzIENT
UFNvdXJjZTsKIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBVUkw7CiAKLXR5cGVkZWYgaW50IFNh
bmRib3hGbGFnczsKIHR5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDU1BEaXJlY3RpdmVM
aXN0Pj4gQ1NQRGlyZWN0aXZlTGlzdFZlY3RvcjsKK3R5cGVkZWYgaW50IFNhbmRib3hGbGFnczsK
IAogY2xhc3MgQ29udGVudFNlY3VyaXR5UG9saWN5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDb250ZW50U2VjdXJpdHlQb2xpY3koU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopOworICAgIGV4cGxpY2l0IENvbnRlbnRTZWN1cml0eVBvbGljeShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CisgICAgZXhwbGljaXQgQ29udGVudFNlY3VyaXR5UG9s
aWN5KGNvbnN0IFNlY3VyaXR5T3JpZ2luJik7CiAgICAgfkNvbnRlbnRTZWN1cml0eVBvbGljeSgp
OwogCiAgICAgdm9pZCBjb3B5U3RhdGVGcm9tKGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSop
OwogCi0gICAgZW51bSBjbGFzcyBSZXBvcnRpbmdTdGF0dXMgewotICAgICAgICBTZW5kUmVwb3J0
LAotICAgICAgICBTdXBwcmVzc1JlcG9ydAotICAgIH07Ci0KICAgICAvLyBCZSBzdXJlIHRvIHVw
ZGF0ZSB0aGUgYmVoYXZpb3Igb2YgWFNTQXVkaXRvcjo6Y29tYmluZVhTU1Byb3RlY3Rpb25IZWFk
ZXJBbmRDU1Agd2hlbmV2ZXIgeW91IGNoYW5nZSB0aGlzIGVudW0ncyBjb250ZW50IG9yIG9yZGVy
aW5nLgogICAgIGVudW0gUmVmbGVjdGVkWFNTRGlzcG9zaXRpb24gewogICAgICAgICBSZWZsZWN0
ZWRYU1NVbnNldCA9IDAsCkBAIC03MCwxOCArNjUsMjIgQEAgcHVibGljOgogICAgICAgICBGaWx0
ZXJSZWZsZWN0ZWRYU1MsCiAgICAgICAgIEJsb2NrUmVmbGVjdGVkWFNTCiAgICAgfTsKKyAgICBS
ZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiByZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbigpIGNvbnN0Owog
CiAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzIHJlc3BvbnNlSGVhZGVy
cygpIGNvbnN0OwogICAgIHZvaWQgZGlkUmVjZWl2ZUhlYWRlcnMoY29uc3QgQ29udGVudFNlY3Vy
aXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlSGVhZGVyKGNv
bnN0IFN0cmluZyYsIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUpOwogCisgICAgZW51
bSBjbGFzcyBSZXBvcnRpbmdTdGF0dXMgeworICAgICAgICBTZW5kUmVwb3J0LAorICAgICAgICBT
dXBwcmVzc1JlcG9ydAorICAgIH07CiAgICAgYm9vbCBhbGxvd0phdmFTY3JpcHRVUkxzKGNvbnN0
IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGlu
ZSwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9IGZhbHNlLCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyA9IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVw
b3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KSBjb25zdDsKICAgICBib29sIGFsbG93SW5saW5lRXZl
bnRIYW5kbGVycyhjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51
bWJlciYgY29udGV4dExpbmUsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBm
YWxzZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgPSBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCkgY29uc3Q7CiAgICAgYm9v
bCBhbGxvd0lubGluZVNjcmlwdChjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6
T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQ
b2xpY3kgPSBmYWxzZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgPSBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCkgY29uc3Q7
CiAgICAgYm9vbCBhbGxvd0lubGluZVN0eWxlKGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29u
c3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgYm9vbCBvdmVycmlkZUNvbnRlbnRT
ZWN1cml0eVBvbGljeSA9IGZhbHNlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0
YXR1cyA9IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0
KSBjb25zdDsKICAgICBib29sIGFsbG93RXZhbChKU0M6OkV4ZWNTdGF0ZSogPSBudWxscHRyLCBi
b29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRp
bmdTdGF0dXM6OlNlbmRSZXBvcnQpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dQbHVnaW5UeXBlKGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB0eXBlQXR0cmlidXRlLCBjb25zdCBVUkwm
LCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1
cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBv
cnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpIGNvbnN0OwotCiAgICAgYm9vbCBhbGxvd1NjcmlwdEZy
b21Tb3VyY2UoY29uc3QgVVJMJiwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9
IGZhbHNlLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyA9IENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KSBjb25zdDsKICAgICBi
b29sIGFsbG93T2JqZWN0RnJvbVNvdXJjZShjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29udGVu
dFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5n
U3RhdHVzID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBv
cnQpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dDaGlsZEZyYW1lRnJvbVNvdXJjZShjb25zdCBVUkwm
LCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1
cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBv
cnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpIGNvbnN0OwpAQCAtOTMsNDIgKzkyLDU3IEBAIHB1Ymxp
YzoKICAgICBib29sIGFsbG93Rm9ybUFjdGlvbihjb25zdCBVUkwmLCBib29sIG92ZXJyaWRlQ29u
dGVudFNlY3VyaXR5UG9saWN5ID0gZmFsc2UsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0
aW5nU3RhdHVzID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRS
ZXBvcnQpIGNvbnN0OwogICAgIGJvb2wgYWxsb3dCYXNlVVJJKGNvbnN0IFVSTCYsIGJvb2wgb3Zl
cnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZSwgQ29udGVudFNlY3VyaXR5UG9saWN5
OjpSZXBvcnRpbmdTdGF0dXMgPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1
czo6U2VuZFJlcG9ydCkgY29uc3Q7CiAKLSAgICBSZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiByZWZs
ZWN0ZWRYU1NEaXNwb3NpdGlvbigpIGNvbnN0OwotCiAgICAgdm9pZCBzZXRPdmVycmlkZUFsbG93
SW5saW5lU3R5bGUoYm9vbCk7CiAKICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisKICAgICB2
b2lkIGdhdGhlclJlcG9ydFVSSXMoRE9NU3RyaW5nTGlzdCYpIGNvbnN0OwogCisgICAgU3RyaW5n
IGV2YWxEaXNhYmxlZEVycm9yTWVzc2FnZSgpIGNvbnN0OworCisgICAgYm9vbCBleHBlcmltZW50
YWxGZWF0dXJlc0VuYWJsZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBib29sIHNob3VsZEJ5cGFz
c01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7
CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCBieSBpbnRlcm5hbCBk
YXRhIHN0cnVjdHVyZXMgdG8gY2FsbGJhY2sgaW50byB0aGlzIG9iamVjdCB3aGVuIHBhcnNpbmcs
IHZhbGlkYXRpbmcsCisgICAgLy8gYW5kIGFwcGx5aW5nIGEgQ29udGVudCBTZWN1cml0eSBQb2xp
Y3kuCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoZSB2YXJpb3VzIGRpcmVjdGl2ZXMg
c2VydmUgb25seSBhcyBzdGF0ZSBzdG9yZXMgZm9yIHRoZSBwYXJzZWQgcG9saWN5IGFuZCByZW1v
dmUgdGhlc2UgZnVuY3Rpb25zLgorICAgIC8vIFRoaXMgY2xhc3Mgc2hvdWxkIHRyYXZlcnNlIHRo
ZSBkaXJlY3RpdmVzLCB2YWxpZGF0aW5nIHRoZSBwb2xpY3ksIGFuZCBhcHBseWluZyBpdCB0byB0
aGUgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgorCisgICAgLy8gVXNlZCBieSBNZWRpYUxpc3RE
aXJlY3RpdmUKKyAgICB2b2lkIHJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhjb25zdCBTdHJpbmcm
KSBjb25zdDsKKworICAgIC8vIFVzZWQgYnkgQ1NQU291cmNlTGlzdAogICAgIHZvaWQgcmVwb3J0
RGlyZWN0aXZlQXNTb3VyY2VFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VFeHByZXNzaW9uKSBjb25zdDsKKyAgICB2b2lkIHJlcG9ydElu
dmFsaWRQYXRoQ2hhcmFjdGVyKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgY29uc3QgY2hhcikgY29uc3Q7CisgICAgdm9pZCByZXBvcnRJbnZhbGlkU291
cmNlRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZU5hbWUsIGNvbnN0IFN0cmluZyYg
c291cmNlKSBjb25zdDsKKyAgICBib29sIHVybE1hdGNoZXNTZWxmKGNvbnN0IFVSTCYpIGNvbnN0
OworCisgICAgLy8gVXNlZCBieSBDU1BEaXJlY3RpdmVMaXN0CiAgICAgdm9pZCByZXBvcnREdXBs
aWNhdGVEaXJlY3RpdmUoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdm9pZCByZXBvcnRJbnZh
bGlkRGlyZWN0aXZlVmFsdWVDaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVOYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKSBjb25zdDsKLSAgICB2b2lkIHJlcG9ydEludmFsaWRQYXRoQ2hh
cmFjdGVyKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
Y29uc3QgY2hhcikgY29uc3Q7Ci0gICAgdm9pZCByZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoY29u
c3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdm9pZCByZXBvcnRJbnZhbGlkU2FuZGJveEZsYWdzKGNv
bnN0IFN0cmluZyYpIGNvbnN0OwotICAgIHZvaWQgcmVwb3J0SW52YWxpZFNvdXJjZUV4cHJlc3Np
b24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVOYW1lLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkgY29u
c3Q7CiAgICAgdm9pZCByZXBvcnRJbnZhbGlkUmVmbGVjdGVkWFNTKGNvbnN0IFN0cmluZyYpIGNv
bnN0OwogICAgIHZvaWQgcmVwb3J0TWlzc2luZ1JlcG9ydFVSSShjb25zdCBTdHJpbmcmKSBjb25z
dDsKICAgICB2b2lkIHJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYpIGNv
bnN0OwotICAgIHZvaWQgcmVwb3J0VmlvbGF0aW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4
dCwgY29uc3QgU3RyaW5nJiBlZmZlY3RpdmVEaXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgY29uc29s
ZU1lc3NhZ2UsIGNvbnN0IFVSTCYgYmxvY2tlZFVSTCwgY29uc3QgVmVjdG9yPFVSTD4mIHJlcG9y
dFVSSXMsIGNvbnN0IFN0cmluZyYgaGVhZGVyLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwgPSBT
dHJpbmcoKSwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSA9IFdURjo6T3Jk
aW5hbE51bWJlcjo6YmVmb3JlRmlyc3QoKSwgSlNDOjpFeGVjU3RhdGUqID0gbnVsbHB0cikgY29u
c3Q7Ci0KKyAgICB2b2lkIHJlcG9ydFZpb2xhdGlvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRl
eHQsIGNvbnN0IFN0cmluZyYgZWZmZWN0aXZlRGlyZWN0aXZlLCBjb25zdCBTdHJpbmcmIGNvbnNv
bGVNZXNzYWdlLCBjb25zdCBVUkwmIGJsb2NrZWRVUkwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBy
ZXBvcnRVUklzLCBjb25zdCBTdHJpbmcmIGhlYWRlciwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJM
ID0gU3RyaW5nKCksIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUgPSBXVEY6
Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCksIEpTQzo6RXhlY1N0YXRlKiA9IG51bGxwdHIp
IGNvbnN0OwogICAgIHZvaWQgcmVwb3J0QmxvY2tlZFNjcmlwdEV4ZWN1dGlvblRvSW5zcGVjdG9y
KGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCkgY29uc3Q7CisgICAgdm9pZCBlbmZvcmNlU2Fu
ZGJveEZsYWdzKFNhbmRib3hGbGFncyBzYW5kYm94RmxhZ3MpIHsgbV9zYW5kYm94RmxhZ3MgfD0g
c2FuZGJveEZsYWdzOyB9CiAKLSAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0OwotICAgIFVSTCBj
b21wbGV0ZVVSTChjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICBTZWN1cml0eU9yaWdpbiogc2Vj
dXJpdHlPcmlnaW4oKSBjb25zdDsKLSAgICB2b2lkIGVuZm9yY2VTYW5kYm94RmxhZ3MoU2FuZGJv
eEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCkgY29u
c3Q7Ci0KLSAgICBib29sIGV4cGVyaW1lbnRhbEZlYXR1cmVzRW5hYmxlZCgpIGNvbnN0OwotICAg
IHN0YXRpYyBib29sIHNob3VsZEJ5cGFzc01haW5Xb3JsZENvbnRlbnRTZWN1cml0eVBvbGljeShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CisgICAgLy8gVXNlZCBieSBDU1BTb3VyY2UKKyAgICBi
b29sIHByb3RvY29sTWF0Y2hlc1NlbGYoY29uc3QgVVJMJikgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBsb2dUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IGNvbnRleHRVUkwgPSBTdHJpbmcoKSwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0
TGluZSA9IFdURjo6T3JkaW5hbE51bWJlcjo6YmVmb3JlRmlyc3QoKSwgSlNDOjpFeGVjU3RhdGUq
ID0gbnVsbHB0cikgY29uc3Q7CisgICAgdm9pZCBhcHBseVBvbGljeVRvU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0OwotICAgIGJvb2wgbV9vdmVycmlkZUlubGluZVN0eWxlQWxsb3dlZDsKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgeyBudWxscHRy
IH07CisgICAgc3RkOjp1bmlxdWVfcHRyPENTUFNvdXJjZT4gbV9zZWxmU291cmNlOworICAgIFN0
cmluZyBtX3NlbGZTb3VyY2VQcm90b2NvbDsKICAgICBDU1BEaXJlY3RpdmVMaXN0VmVjdG9yIG1f
cG9saWNpZXM7CisgICAgU3RyaW5nIG1fbGFzdFBvbGljeUV2YWxEaXNhYmxlZEVycm9yTWVzc2Fn
ZTsKKyAgICBTYW5kYm94RmxhZ3MgbV9zYW5kYm94RmxhZ3M7CisgICAgYm9vbCBtX292ZXJyaWRl
SW5saW5lU3R5bGVBbGxvd2VkIHsgZmFsc2UgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKaW5kZXggYzZmY2YyZGRjNjBmNWQ0MjY3M2Vi
OGIyZmU2ZjRlZGU5ZGMzYzI0MS4uNjBlOTlhNzZiYWEwYmFkYzhmNGUzMGI0MDRhZmIzNWQ2MzJk
MWFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29w
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAK
QEAgLTcyLDYgKzcyLDcgQEAgV29ya2VyR2xvYmFsU2NvcGU6Oldvcmtlckdsb2JhbFNjb3BlKGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgV28KICAgICAsIG1fdG9wT3Jp
Z2luKHRvcE9yaWdpbikKIHsKICAgICBzZXRTZWN1cml0eU9yaWdpblBvbGljeShTZWN1cml0eU9y
aWdpblBvbGljeTo6Y3JlYXRlKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKSkpOworICAgIHNl
dENvbnRlbnRTZWN1cml0eVBvbGljeShzdGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRTZWN1cml0eVBv
bGljeT4oKnN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqPih0aGlzKSkpOwogfQog
CiBXb3JrZXJHbG9iYWxTY29wZTo6fldvcmtlckdsb2JhbFNjb3BlKCkKQEAgLTg3LDcgKzg4LDYg
QEAgV29ya2VyR2xvYmFsU2NvcGU6On5Xb3JrZXJHbG9iYWxTY29wZSgpCiAKIHZvaWQgV29ya2Vy
R2xvYmFsU2NvcGU6OmFwcGx5Q29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzKGNv
bnN0IENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycyYgY29udGVudFNlY3VyaXR5
UG9saWN5UmVzcG9uc2VIZWFkZXJzKQogewotICAgIHNldENvbnRlbnRTZWN1cml0eVBvbGljeShz
dGQ6Om1ha2VfdW5pcXVlPENvbnRlbnRTZWN1cml0eVBvbGljeT4odGhpcykpOwogICAgIGNvbnRl
bnRTZWN1cml0eVBvbGljeSgpLT5kaWRSZWNlaXZlSGVhZGVycyhjb250ZW50U2VjdXJpdHlQb2xp
Y3lSZXNwb25zZUhlYWRlcnMpOwogfQogCg==
</data>
<flag name="review"
          id="295300"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>