<?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>111250</bug_id>
          
          <creation_ts>2013-03-02 03:09:48 -0800</creation_ts>
          <short_desc>AtomicHTMLToken should not be heap allocated or RefCounted</short_desc>
          <delta_ts>2013-03-08 11:17:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>111645</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rafaelw</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>845788</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-02 03:09:48 -0800</bug_when>
    <thetext>AtomicHTMLToken should not be heap allocated or RefCounted

This is done so that it can be saved on the HTMLElementStack, but it appears we only use this in 3 places:

/Users/eseidel/Projects/WebKit/Source/WebCore/html/parser/HTMLElementStack.cpp:
  291          return false;
  292      if (item-&gt;hasTagName(MathMLNames::annotation_xmlTag)) {
  293:         Attribute* encodingAttr = item-&gt;token()-&gt;getAttributeItem(MathMLNames::encodingAttr);
  294          if (encodingAttr) {
  295              const String&amp; encoding = encodingAttr-&gt;value();

/Users/eseidel/Projects/WebKit/Source/WebCore/html/parser/HTMLFormattingElementList.cpp:
  179      remainingCandidates.reserveInitialCapacity(candidates.size());
  180  
  181:     const Vector&lt;Attribute&gt;&amp; attributes = newItem-&gt;token()-&gt;attributes();
  182      for (size_t i = 0; i &lt; attributes.size(); ++i) {
  183          const Attribute&amp; attribute = attributes[i];
  ...
  190              ASSERT(newItem-&gt;localName() == candidate-&gt;localName() &amp;&amp; newItem-&gt;namespaceURI() == candidate-&gt;namespaceURI());
  191  
  192:             Attribute* candidateAttribute = candidate-&gt;token()-&gt;getAttributeItem(attribute.name());
  193              if (candidateAttribute &amp;&amp; candidateAttribute-&gt;value() == attribute.value())
  194                  remainingCandidates.append(candidate);

This just adds an extra malloc, and some complexity to AtomicHTMLToken we don&apos;t need, including the ability to clear it&apos;s externalCharacterBuffer pointers so we don&apos;t grab at memory after its freed.  See bug 111248.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850587</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-07 16:11:30 -0800</bug_when>
    <thetext>I believe this is the fastMalloc showing up as .6% of time profiling Parser/html-parser-threaded.html with bug 107236 applied:

Running Time	Self		Symbol Name
108.5ms    6.2%	108.5	 	WTF::fastMalloc(unsigned long)
12.1ms    0.6%	0.0	 	 WebCore::HTMLDocumentParser::processParsedChunkFromBackgroundParser(WTF::PassOwnPtr&lt;WebCore::HTMLDocumentParser::ParsedChunk&gt;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850966</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-08 00:54:09 -0800</bug_when>
    <thetext>Before:

RESULT Parser: html-parser-threaded: Time= 450.164849998 ms
median= 450.482999993 ms, stdev= 7.2381436538 ms, min= 436.084999994 ms, max= 464.968999964 ms
RESULT Parser: html-parser-threaded: JSHeap= 3522054.8 bytes
median= 3603242.0 bytes, stdev= 623535.479063 bytes, min= 2623588.0 bytes, max= 4378336.0 bytes
RESULT Parser: html-parser-threaded: Malloc= 53670691.6 bytes
median= 56351944.0 bytes, stdev= 11597207.0499 bytes, min= 36349272.0 bytes, max= 69981056.0 bytes

After:

RESULT Parser: html-parser-threaded: Time= 436.115300003 ms
median= 436.41600004 ms, stdev= 5.71435647554 ms, min= 427.160999971 ms, max= 446.753000026 ms
RESULT Parser: html-parser-threaded: JSHeap= 3548257.8 bytes
median= 3603324.0 bytes, stdev= 635649.475906 bytes, min= 2623588.0 bytes, max= 4509212.0 bytes
RESULT Parser: html-parser-threaded: Malloc= 54642561.6 bytes
median= 56337700.0 bytes, stdev= 11804768.9883 bytes, min= 36077416.0 bytes, max= 69851960.0 bytes

I makes it faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850971</commentid>
    <comment_count>3</comment_count>
      <attachid>192173</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-08 00:58:48 -0800</bug_when>
    <thetext>Created attachment 192173
Remove infinity mallocs from parsing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850975</commentid>
    <comment_count>4</comment_count>
      <attachid>192173</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-08 01:00:50 -0800</bug_when>
    <thetext>Comment on attachment 192173
Remove infinity mallocs from parsing

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

&gt; Source/WebCore/html/parser/HTMLConstructionSite.cpp:542
&gt; +    // NOTE: Moving from item -&gt; token -&gt; item copies the Attribute vector twice!

These mallocs do show up on the profile.  But there are *way* fewer of them than all the AtomicHTMLTokens we were mallocing before. :)

&gt; Source/WebCore/html/parser/HTMLStackItem.h:-211
&gt; -            // Create a fake token for a document fragment node. This looks ugly but required for performance
&gt; -            // because we want to use m_token-&gt;name() in localName(), hasLocalName() and hasTagName() without
&gt; -            // checking m_isDocumentFragmentNode flag.
&gt; -            m_token = AtomicHTMLToken::create(HTMLToken::StartTag, nullAtom);

It&apos;s possible I&apos;m subtly changing behavior here... or that this code wasn&apos;t actually doing what it thought it was doing.  The new code should still return nullAtom from localName() like the old code did. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851328</commentid>
    <comment_count>5</comment_count>
      <attachid>192173</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-08 10:51:49 -0800</bug_when>
    <thetext>Comment on attachment 192173
Remove infinity mallocs from parsing

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

&gt; Source/WebCore/html/parser/HTMLStackItem.h:227
&gt; +        , m_tokenAttributes(token-&gt;attributes())

If we were clever, we could probably swap the attributes in and out of this Vector.

&gt; Source/WebCore/html/parser/HTMLStackItem.h:237
&gt; +    AtomicString m_tokenLocalName;
&gt; +    Vector&lt;Attribute&gt; m_tokenAttributes;
&gt;      AtomicString m_namespaceURI;

The names m_tokenLocalName and m_namespaceURI aren&apos;t quite symmetric.  Maybe they&apos;re different subtly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851337</commentid>
    <comment_count>6</comment_count>
      <attachid>192173</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-08 11:07:37 -0800</bug_when>
    <thetext>Comment on attachment 192173
Remove infinity mallocs from parsing

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

&gt;&gt; Source/WebCore/html/parser/HTMLStackItem.h:227
&gt;&gt; +        , m_tokenAttributes(token-&gt;attributes())
&gt; 
&gt; If we were clever, we could probably swap the attributes in and out of this Vector.

Definitely something to explore. Will require changing the api contract with the token.

&gt;&gt; Source/WebCore/html/parser/HTMLStackItem.h:237
&gt;&gt;      AtomicString m_namespaceURI;
&gt; 
&gt; The names m_tokenLocalName and m_namespaceURI aren&apos;t quite symmetric.  Maybe they&apos;re different subtly?

Namespace comes from the context.  Token is only set for formatting elements iirc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851338</commentid>
    <comment_count>7</comment_count>
      <attachid>192173</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-08 11:09:05 -0800</bug_when>
    <thetext>Comment on attachment 192173
Remove infinity mallocs from parsing

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851345</commentid>
    <comment_count>8</comment_count>
      <attachid>192173</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-08 11:17:49 -0800</bug_when>
    <thetext>Comment on attachment 192173
Remove infinity mallocs from parsing

Clearing flags on attachment: 192173

Committed r145248: &lt;http://trac.webkit.org/changeset/145248&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851346</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-08 11:17:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192173</attachid>
            <date>2013-03-08 00:58:48 -0800</date>
            <delta_ts>2013-03-08 11:17:48 -0800</delta_ts>
            <desc>Remove infinity mallocs from parsing</desc>
            <filename>bug-111250-20130308005506.patch</filename>
            <type>text/plain</type>
            <size>24848</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJlOGYzYWE3YTUyMjVi
NDI0ZDYxYWU2NTg0YmIwYjk0NDc0Njc2My4uMzgwNjI2MmUyNzliZWE3ZTQwMDRhNWY1M2FkZjE5
MzM4NDdhZDBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEzLTAzLTA4ICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBBdG9taWNIVE1MVG9rZW4gc2hv
dWxkIG5vdCBiZSBoZWFwIGFsbG9jYXRlZCBvciBSZWZDb3VudGVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTEyNTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCB3YXMgY2xlYXJseSBhbiBvdmVyc2ln
aHQgb24gb3VyIHBhcnQgdG8gZXZlciBtYWtlIEF0b21pY0hUTUxUb2tlbiByZWYtY291bnRlZC4K
KyAgICAgICAgV2UgZG9uJ3QgbmVlZCB0aGUgYWN0dWFsICJ0b2tlbiIgc2F2ZWQsIGp1c3QgZW5v
dWdoIG9mIGl0IHRvIHJlY3JlYXRlIGEgZmFrZSB0b2tlbi4KKworICAgICAgICBUaGlzIHJlbW92
ZWQgbWFueSBtb3JlIG1hbGxvY3MgdGhhbiBJIHRob3VnaHQgaXQgd291bGQsIGZvciBhIG5pY2Ug
bGl0dGxlIHNwZWVkIHdpbi4KKyAgICAgICAgQmVmb3JlOgorICAgICAgICBtZWRpYW49IDQ1MC40
ODI5OTk5OTMgbXMsIHN0ZGV2PSA3LjIzODE0MzY1MzggbXMsIG1pbj0gNDM2LjA4NDk5OTk5NCBt
cywgbWF4PSA0NjQuOTY4OTk5OTY0IG1zCisgICAgICAgIEFmdGVyOgorICAgICAgICBtZWRpYW49
IDQzNi40MTYwMDAwNCBtcywgc3RkZXY9IDUuNzE0MzU2NDc1NTQgbXMsIG1pbj0gNDI3LjE2MDk5
OTk3MSBtcywgbWF4PSA0NDYuNzUzMDAwMDI2IG1zCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9B
dG9taWNIVE1MVG9rZW4uaDoKKyAgICAgICAgKEF0b21pY0hUTUxUb2tlbik6CisgICAgICAgICog
aHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbik6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6Y29uc3RydWN0VHJlZUZyb21IVE1MVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpjb25zdHJ1Y3RUcmVlRnJvbUNvbXBh
Y3RIVE1MVG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6aXNIVE1MSW50ZWdyYXRpb25Q
b2ludCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5n
RWxlbWVudExpc3Q6OnRyeVRvRW5zdXJlTm9haHNBcmtDb25kaXRpb25RdWlja2x5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmVuc3VyZU5vYWhzQXJrQ29u
ZGl0aW9uKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MU3RhY2tJdGVtLmg6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU3RhY2tJdGVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFN0YWNrSXRlbTo6bG9jYWxOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdGFja0l0ZW06
OmF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0YWNrSXRlbTo6Z2V0QXR0cmli
dXRlSXRlbSk6CisgICAgICAgIChIVE1MU3RhY2tJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTdGFja0l0ZW06Omhhc0xvY2FsTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3RhY2tJ
dGVtOjpoYXNUYWdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdGFja0l0ZW06OkhUTUxT
dGFja0l0ZW0pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlU3RhcnRUYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZUVuZFRhZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlUEVuZFRhZ0lmUElu
QnV0dG9uU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
U3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzRW5kVGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0VuZFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1
bHRGb3JCZWZvcmVIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6ZGVm
YXVsdEZvckJlZm9yZUhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpk
ZWZhdWx0Rm9ySW5IZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6ZGVm
YXVsdEZvckluSGVhZE5vc2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6ZGVmYXVsdEZvckFmdGVySGVhZCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvVGV4dERvY3Vt
ZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHREb2N1bWVudFBhcnNlcjo6aW5z
ZXJ0RmFrZVByZUVsZW1lbnQpOgorCiAyMDEzLTAzLTA3ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBkaXNwbGF5Om5vbmUgaWZyYW1lcyBzaG91bGQgbm90IGJ1aWxk
IHJlbmRlcmluZyB0cmVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
QXRvbWljSFRNTFRva2VuLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9BdG9taWNIVE1M
VG9rZW4uaAppbmRleCAxMzgzNzEwMDU1YzVlY2RkNGJkZTA0OGVmMzY5YWZmMWZlOTRlOGZmLi5h
NmQyMzdkMTg5NWRlMGFiNTNmOWY3MzE5OTAwNjQ2ZjE2NmJkZDI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9BdG9taWNIVE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9BdG9taWNIVE1MVG9rZW4uaApAQCAtMzQsMjcgKzM0LDkgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBdG9taWNIVE1MVG9rZW4gOiBwdWJsaWMgUmVm
Q291bnRlZDxBdG9taWNIVE1MVG9rZW4+IHsKK2NsYXNzIEF0b21pY0hUTUxUb2tlbiB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQXRvbWljSFRNTFRva2VuKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGNyZWF0ZShIVE1MVG9rZW4mIHRva2VuKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdG9taWNIVE1MVG9rZW4odG9rZW4p
KTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoVEhSRUFERURfSFRNTF9QQVJTRVIpCi0KLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGNyZWF0ZShjb25zdCBDb21wYWN0SFRNTFRv
a2VuJiB0b2tlbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXRvbWljSFRN
TFRva2VuKHRva2VuKSk7Ci0gICAgfQotCi0jZW5kaWYKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEF0b21pY0hUTUxUb2tlbj4gY3JlYXRlKEhUTUxUb2tlbjo6VHlwZSB0eXBlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzID0gVmVj
dG9yPEF0dHJpYnV0ZT4oKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXRv
bWljSFRNTFRva2VuKHR5cGUsIG5hbWUsIGF0dHJpYnV0ZXMpKTsKLSAgICB9CiAKICAgICBib29s
IGZvcmNlUXVpcmtzKCkgY29uc3QKICAgICB7CkBAIC0xMzcsMTQgKzExOSw2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fZG9jdHlwZURhdGEtPm1fc3lzdGVtSWRlbnRpZmllcjsKICAgICB9
CiAKLSAgICB2b2lkIGNsZWFyRXh0ZXJuYWxDaGFyYWN0ZXJzKCkKLSAgICB7Ci0gICAgICAgIG1f
ZXh0ZXJuYWxDaGFyYWN0ZXJzID0gMDsKLSAgICAgICAgbV9leHRlcm5hbENoYXJhY3RlcnNMZW5n
dGggPSAwOwotICAgICAgICBtX2lzQWxsOEJpdERhdGEgPSBmYWxzZTsKLSAgICB9Ci0KLXByaXZh
dGU6CiAgICAgZXhwbGljaXQgQXRvbWljSFRNTFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiAgICAg
ICAgIDogbV90eXBlKHRva2VuLnR5cGUoKSkKICAgICB7CkBAIC0yNDYsNiArMjIwLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgQVNTRVJUKHVzZXNOYW1lKCkpOwogICAgIH0KIAorcHJpdmF0ZToKICAg
ICBIVE1MVG9rZW46OlR5cGUgbV90eXBlOwogCiAgICAgdm9pZCBpbml0aWFsaXplQXR0cmlidXRl
cyhjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCmluZGV4
IGZlMDE4YjZiMWI3MTQwOWFkNmYxOGI3MmY1MjkyODIzZTgwNzYxODEuLjQ1M2UzODM1NTBlNTlm
MmE2MDM4MWNhNTFmOGIxYjA2ODQ2NGE0MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKQEAgLTUzOSwxMSArNTM5LDEzIEBA
IFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiogdG9rCiBQYXNzUmVmUHRyPEhUTUxTdGFja0l0ZW0+IEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oSFRNTFN0YWNrSXRl
bSogaXRlbSkKIHsKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudDsKKyAgICAvLyBOT1RFOiBN
b3ZpbmcgZnJvbSBpdGVtIC0+IHRva2VuIC0+IGl0ZW0gY29waWVzIHRoZSBBdHRyaWJ1dGUgdmVj
dG9yIHR3aWNlIQorICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuOjpTdGFy
dFRhZywgaXRlbS0+bG9jYWxOYW1lKCksIGl0ZW0tPmF0dHJpYnV0ZXMoKSk7CiAgICAgaWYgKGl0
ZW0tPm5hbWVzcGFjZVVSSSgpID09IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpCi0gICAg
ICAgIGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudChpdGVtLT50b2tlbigpKTsKKyAgICAgICAg
ZWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KCZmYWtlVG9rZW4pOwogICAgIGVsc2UKLSAgICAg
ICAgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoaXRlbS0+dG9rZW4oKSwgaXRlbS0+bmFtZXNwYWNl
VVJJKCkpOwotICAgIHJldHVybiBIVE1MU3RhY2tJdGVtOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNl
KCksIGl0ZW0tPnRva2VuKCksIGl0ZW0tPm5hbWVzcGFjZVVSSSgpKTsKKyAgICAgICAgZWxlbWVu
dCA9IGNyZWF0ZUVsZW1lbnQoJmZha2VUb2tlbiwgaXRlbS0+bmFtZXNwYWNlVVJJKCkpOworICAg
IHJldHVybiBIVE1MU3RhY2tJdGVtOjpjcmVhdGUoZWxlbWVudC5yZWxlYXNlKCksICZmYWtlVG9r
ZW4sIGl0ZW0tPm5hbWVzcGFjZVVSSSgpKTsKIH0KIAogYm9vbCBIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6aW5kZXhPZkZpcnN0VW5vcGVuRm9ybWF0dGluZ0VsZW1lbnQodW5zaWduZWQmIGZpcnN0VW5v
cGVuRWxlbWVudEluZGV4KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggNmVjMTY4NjJlYzY4YzYwZGU1NTU0ZTQ1OTIw
ZGZjYmNjNzgwNjUxMy4uMzk0MGU4OTU0YTA1MGU3OGVlM2U5ZGM1OGM2OWUzOTBkNjA3MTUwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwCkBAIC01NjQsNyArNTY0LDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tl
bml6ZXIoU3luY2hyb25vdXNNb2RlIG1vZGUpCiAKIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpj
b25zdHJ1Y3RUcmVlRnJvbUhUTUxUb2tlbihIVE1MVG9rZW4mIHJhd1Rva2VuKQogewotICAgIFJl
ZlB0cjxBdG9taWNIVE1MVG9rZW4+IHRva2VuID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUocmF3
VG9rZW4pOworICAgIEF0b21pY0hUTUxUb2tlbiB0b2tlbihyYXdUb2tlbik7CiAKICAgICAvLyBX
ZSBjbGVhciB0aGUgcmF3VG9rZW4gaW4gY2FzZSBjb25zdHJ1Y3RUcmVlRnJvbUF0b21pY1Rva2Vu
CiAgICAgLy8gc3luY2hyb25vdXNseSByZS1lbnRlcnMgdGhlIHBhcnNlci4gV2UgZG9uJ3QgY2xl
YXIgdGhlIHRva2VuIGltbWVkYXRlbHkKQEAgLTU3OSwxMyArNTc5LDcgQEAgdm9pZCBIVE1MRG9j
dW1lbnRQYXJzZXI6OmNvbnN0cnVjdFRyZWVGcm9tSFRNTFRva2VuKEhUTUxUb2tlbiYgcmF3VG9r
ZW4pCiAgICAgaWYgKHJhd1Rva2VuLnR5cGUoKSAhPSBIVE1MVG9rZW46OkNoYXJhY3RlcikKICAg
ICAgICAgcmF3VG9rZW4uY2xlYXIoKTsKIAotICAgIG1fdHJlZUJ1aWxkZXItPmNvbnN0cnVjdFRy
ZWUodG9rZW4uZ2V0KCkpOwotCi0gICAgLy8gQXRvbWljSFRNTFRva2VuIGtlZXBzIGEgcG9pbnRl
ciB0byB0aGUgSFRNTFRva2VuJ3MgYnVmZmVyIGluc3RlYWQKLSAgICAvLyBvZiBjb3B5aW5nIHRo
ZSBjaGFyYWN0ZXJzIGZvciBwZXJmb3JtYW5jZS4KLSAgICAvLyBDbGVhciB0aGUgZXh0ZXJuYWwg
Y2hhcmFjdGVycyBwb2ludGVyIGJlZm9yZSB0aGUgcmF3IHRva2VuIGlzIGNsZWFyZWQKLSAgICAv
LyB0byBtYWtlIHN1cmUgdGhhdCB3ZSB3b24ndCBoYXZlIGEgZGFuZ2xpbmcgcG9pbnRlci4KLSAg
ICB0b2tlbi0+Y2xlYXJFeHRlcm5hbENoYXJhY3RlcnMoKTsKKyAgICBtX3RyZWVCdWlsZGVyLT5j
b25zdHJ1Y3RUcmVlKCZ0b2tlbik7CiAKICAgICBpZiAoIXJhd1Rva2VuLmlzVW5pbml0aWFsaXpl
ZCgpKSB7CiAgICAgICAgIEFTU0VSVChyYXdUb2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpDaGFy
YWN0ZXIpOwpAQCAtNTk3LDkgKzU5MSw4IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpjb25z
dHJ1Y3RUcmVlRnJvbUhUTUxUb2tlbihIVE1MVG9rZW4mIHJhd1Rva2VuKQogCiB2b2lkIEhUTUxE
b2N1bWVudFBhcnNlcjo6Y29uc3RydWN0VHJlZUZyb21Db21wYWN0SFRNTFRva2VuKGNvbnN0IENv
bXBhY3RIVE1MVG9rZW4mIGNvbXBhY3RUb2tlbikKIHsKLSAgICBSZWZQdHI8QXRvbWljSFRNTFRv
a2VuPiB0b2tlbiA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKGNvbXBhY3RUb2tlbik7Ci0gICAg
bV90cmVlQnVpbGRlci0+Y29uc3RydWN0VHJlZSh0b2tlbi5nZXQoKSk7Ci0gICAgdG9rZW4tPmNs
ZWFyRXh0ZXJuYWxDaGFyYWN0ZXJzKCk7IC8vIFRoZSBjb21wYWN0IHRva2VuIGNvdWxkIGJlIGRl
c3Ryb3llZCBhbnkgdGltZSBhZnRlciB0aGlzIG1ldGhvZCByZXR1cm5zLgorICAgIEF0b21pY0hU
TUxUb2tlbiB0b2tlbihjb21wYWN0VG9rZW4pOworICAgIG1fdHJlZUJ1aWxkZXItPmNvbnN0cnVj
dFRyZWUoJnRva2VuKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCmluZGV4IDUwMDk3YWQ4Yjg2Mzc4MjFkYWYzNDIzYmE3
NGIyMmNlZjM3NTY3ZGIuLmUzYWE3OGViMzA1MjI2YmM4YTE5MDZlMjJkZTdmMzhiYmVjNjdhZGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2su
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3Bw
CkBAIC0yOTAsNyArMjkwLDcgQEAgYm9vbCBIVE1MRWxlbWVudFN0YWNrOjppc0hUTUxJbnRlZ3Jh
dGlvblBvaW50KEhUTUxTdGFja0l0ZW0qIGl0ZW0pCiAgICAgaWYgKCFpdGVtLT5pc0VsZW1lbnRO
b2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZShN
YXRoTUxOYW1lczo6YW5ub3RhdGlvbl94bWxUYWcpKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSogZW5j
b2RpbmdBdHRyID0gaXRlbS0+dG9rZW4oKS0+Z2V0QXR0cmlidXRlSXRlbShNYXRoTUxOYW1lczo6
ZW5jb2RpbmdBdHRyKTsKKyAgICAgICAgQXR0cmlidXRlKiBlbmNvZGluZ0F0dHIgPSBpdGVtLT5n
ZXRBdHRyaWJ1dGVJdGVtKE1hdGhNTE5hbWVzOjplbmNvZGluZ0F0dHIpOwogICAgICAgICBpZiAo
ZW5jb2RpbmdBdHRyKSB7CiAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGVuY29kaW5nID0gZW5j
b2RpbmdBdHRyLT52YWx1ZSgpOwogICAgICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNl
KGVuY29kaW5nLCAidGV4dC9odG1sIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKaW5kZXggYzNiOThmZWRlYzNi
ZmI3YjJkYzgzODViMmVjM2VlZGViZjgyNTRiNi4uNDI4M2Y2ZWI1NDdlZDY2N2QyYTFlNzNkNDFk
YzcyY2YwMGFmN2Y3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5jcHAKQEAgLTQwLDExICs0MCw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIC8vIE5vYWgncyBBcmsgb2YgRm9ybWF0dGluZyBFbGVtZW50cyBjYW4g
Zml0IHRocmVlIG9mIGVhY2ggZWxlbWVudC4KIHN0YXRpYyBjb25zdCBzaXplX3Qga05vYWhzQXJr
Q2FwYWNpdHkgPSAzOwogCi1zdGF0aWMgaW5saW5lIHNpemVfdCBhdHRyaWJ1dGVDb3VudChBdG9t
aWNIVE1MVG9rZW4qIHRva2VuKQotewotICAgIHJldHVybiB0b2tlbi0+YXR0cmlidXRlcygpLnNp
emUoKTsKLX0KLQogSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6SFRNTEZvcm1hdHRpbmdFbGVt
ZW50TGlzdCgpCiB7CiB9CkBAIC0xNDIsNyArMTM3LDcgQEAgdm9pZCBIVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0Ojp0cnlUb0Vuc3VyZU5vYWhzQXJrQ29uZGl0aW9uUXVpY2tseShIVE1MU3RhY2tJ
dGUKICAgICAvLyBvZiBhIHF1aWNrbHkgZW5zdXJpbmcgdGhlIGNvbmRpdGlvbi4KICAgICBWZWN0
b3I8SFRNTFN0YWNrSXRlbSosIDEwPiBjYW5kaWRhdGVzOwogCi0gICAgc2l6ZV90IG5ld0l0ZW1B
dHRyaWJ1dGVDb3VudCA9IGF0dHJpYnV0ZUNvdW50KG5ld0l0ZW0tPnRva2VuKCkpOworICAgIHNp
emVfdCBuZXdJdGVtQXR0cmlidXRlQ291bnQgPSBuZXdJdGVtLT5hdHRyaWJ1dGVzKCkuc2l6ZSgp
OwogCiAgICAgZm9yIChzaXplX3QgaSA9IG1fZW50cmllcy5zaXplKCk7IGk7ICkgewogICAgICAg
ICAtLWk7CkBAIC0xNTQsNyArMTQ5LDcgQEAgdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0
Ojp0cnlUb0Vuc3VyZU5vYWhzQXJrQ29uZGl0aW9uUXVpY2tseShIVE1MU3RhY2tJdGUKICAgICAg
ICAgSFRNTFN0YWNrSXRlbSogY2FuZGlkYXRlID0gZW50cnkuc3RhY2tJdGVtKCkuZ2V0KCk7CiAg
ICAgICAgIGlmIChuZXdJdGVtLT5sb2NhbE5hbWUoKSAhPSBjYW5kaWRhdGUtPmxvY2FsTmFtZSgp
IHx8IG5ld0l0ZW0tPm5hbWVzcGFjZVVSSSgpICE9IGNhbmRpZGF0ZS0+bmFtZXNwYWNlVVJJKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZUNvdW50KGNhbmRp
ZGF0ZS0+dG9rZW4oKSkgIT0gbmV3SXRlbUF0dHJpYnV0ZUNvdW50KQorICAgICAgICBpZiAoY2Fu
ZGlkYXRlLT5hdHRyaWJ1dGVzKCkuc2l6ZSgpICE9IG5ld0l0ZW1BdHRyaWJ1dGVDb3VudCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGNhbmRpZGF0
ZSk7CkBAIC0xNzgsNyArMTczLDcgQEAgdm9pZCBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0Ojpl
bnN1cmVOb2Foc0Fya0NvbmRpdGlvbihIVE1MU3RhY2tJdGVtKiBuZXdJdGVtKQogICAgIFZlY3Rv
cjxIVE1MU3RhY2tJdGVtKj4gcmVtYWluaW5nQ2FuZGlkYXRlczsKICAgICByZW1haW5pbmdDYW5k
aWRhdGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2FuZGlkYXRlcy5zaXplKCkpOwogCi0gICAg
Y29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMgPSBuZXdJdGVtLT50b2tlbigpLT5h
dHRyaWJ1dGVzKCk7CisgICAgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMgPSBu
ZXdJdGVtLT5hdHRyaWJ1dGVzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1
dGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0g
YXR0cmlidXRlc1tpXTsKIApAQCAtMTg2LDEwICsxODEsMTAgQEAgdm9pZCBIVE1MRm9ybWF0dGlu
Z0VsZW1lbnRMaXN0OjplbnN1cmVOb2Foc0Fya0NvbmRpdGlvbihIVE1MU3RhY2tJdGVtKiBuZXdJ
dGVtKQogICAgICAgICAgICAgSFRNTFN0YWNrSXRlbSogY2FuZGlkYXRlID0gY2FuZGlkYXRlc1tq
XTsKIAogICAgICAgICAgICAgLy8gVGhlc2UgcHJvcGVydGllcyBzaG91bGQgYWxyZWFkeSBoYXZl
IGJlZW4gY2hlY2tlZCBieSB0cnlUb0Vuc3VyZU5vYWhzQXJrQ29uZGl0aW9uUXVpY2tseS4KLSAg
ICAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVDb3VudChuZXdJdGVtLT50b2tlbigpKSA9PSBhdHRy
aWJ1dGVDb3VudChjYW5kaWRhdGUtPnRva2VuKCkpKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdJ
dGVtLT5hdHRyaWJ1dGVzKCkuc2l6ZSgpID09IGNhbmRpZGF0ZS0+YXR0cmlidXRlcygpLnNpemUo
KSk7CiAgICAgICAgICAgICBBU1NFUlQobmV3SXRlbS0+bG9jYWxOYW1lKCkgPT0gY2FuZGlkYXRl
LT5sb2NhbE5hbWUoKSAmJiBuZXdJdGVtLT5uYW1lc3BhY2VVUkkoKSA9PSBjYW5kaWRhdGUtPm5h
bWVzcGFjZVVSSSgpKTsKIAotICAgICAgICAgICAgQXR0cmlidXRlKiBjYW5kaWRhdGVBdHRyaWJ1
dGUgPSBjYW5kaWRhdGUtPnRva2VuKCktPmdldEF0dHJpYnV0ZUl0ZW0oYXR0cmlidXRlLm5hbWUo
KSk7CisgICAgICAgICAgICBBdHRyaWJ1dGUqIGNhbmRpZGF0ZUF0dHJpYnV0ZSA9IGNhbmRpZGF0
ZS0+Z2V0QXR0cmlidXRlSXRlbShhdHRyaWJ1dGUubmFtZSgpKTsKICAgICAgICAgICAgIGlmIChj
YW5kaWRhdGVBdHRyaWJ1dGUgJiYgY2FuZGlkYXRlQXR0cmlidXRlLT52YWx1ZSgpID09IGF0dHJp
YnV0ZS52YWx1ZSgpKQogICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NhbmRpZGF0ZXMuYXBwZW5k
KGNhbmRpZGF0ZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxTdGFja0l0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxT
dGFja0l0ZW0uaAppbmRleCAxYzJlYjQ5M2Y0MDI0M2IyYjFhNWMzNTYyZTNkMDgwNDIxNDI4YjMw
Li43NmRmNjQ2ODRhMmRkMDRjMGQ1MDcxNTc3NGJlYWFjY2JmYjBlYTA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU3RhY2tJdGVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFN0YWNrSXRlbS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICAvLyBVc2VkIGJ5IEhUTUxFbGVtZW50U3RhY2sgYW5kIEhUTUxGb3Jt
YXR0aW5nRWxlbWVudExpc3QuCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4g
Y3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxBdG9taWNI
VE1MVG9rZW4+IHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxO
YW1lczo6eGh0bWxOYW1lc3BhY2VVUkkpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFN0YWNr
SXRlbT4gY3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbm9kZSwgQXRvbWljSFRNTFRv
a2VuKiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBIVE1MTmFtZXM6
OnhodG1sTmFtZXNwYWNlVVJJKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBI
VE1MU3RhY2tJdGVtKG5vZGUsIHRva2VuLCBuYW1lc3BhY2VVUkkpKTsKICAgICB9CkBAIC02NSwx
MiArNjUsMTggQEAgcHVibGljOgogICAgIGJvb2wgaXNEb2N1bWVudEZyYWdtZW50Tm9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNEb2N1bWVudEZyYWdtZW50Tm9kZTsgfQogICAgIGJvb2wgaXNFbGVt
ZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuICFtX2lzRG9jdW1lbnRGcmFnbWVudE5vZGU7IH0KIAot
ICAgIEF0b21pY0hUTUxUb2tlbiogdG9rZW4oKSB7IHJldHVybiBtX3Rva2VuLmdldCgpOyB9CiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBjb25zdCB7IHJldHVybiBtX25h
bWVzcGFjZVVSSTsgfQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV90b2tlbi0+bmFtZSgpOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3Rva2VuTG9jYWxOYW1lOyB9CiAKLSAgICBib29sIGhh
c0xvY2FsTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdG9r
ZW4tPm5hbWUoKSA9PSBuYW1lOyB9Ci0gICAgYm9vbCBoYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdG9rZW4tPm5hbWUoKSA9PSBuYW1lLmxvY2Fs
TmFtZSgpICYmIG1fbmFtZXNwYWNlVVJJID09IG5hbWUubmFtZXNwYWNlVVJJKCk7IH0KKyAgICBj
b25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcygpIGNvbnN0IHsgQVNTRVJUKG1fdG9r
ZW5Mb2NhbE5hbWUpOyByZXR1cm4gbV90b2tlbkF0dHJpYnV0ZXM7IH0KKyAgICBBdHRyaWJ1dGUq
IGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3Rva2VuTG9jYWxOYW1lKTsKKyAgICAgICAgcmV0dXJuIGZp
bmRBdHRyaWJ1dGVJblZlY3RvcihtX3Rva2VuQXR0cmlidXRlcywgYXR0cmlidXRlTmFtZSk7Cisg
ICAgfQorCisgICAgYm9vbCBoYXNMb2NhbE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdCB7IHJldHVybiBtX3Rva2VuTG9jYWxOYW1lID09IG5hbWU7IH0KKyAgICBib29sIGhhc1Rh
Z05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV90b2tlbkxv
Y2FsTmFtZSA9PSBuYW1lLmxvY2FsTmFtZSgpICYmIG1fbmFtZXNwYWNlVVJJID09IG5hbWUubmFt
ZXNwYWNlVVJJKCk7IH0KIAogICAgIGJvb2wgY2F1c2VzRm9zdGVyUGFyZW50aW5nKCkKICAgICB7
CkBAIC0yMDUsMjQgKzIxMSwyMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgICAgIGNhc2UgSXRlbUZvckRvY3VtZW50RnJhZ21lbnROb2RlOgotICAgICAg
ICAgICAgLy8gQ3JlYXRlIGEgZmFrZSB0b2tlbiBmb3IgYSBkb2N1bWVudCBmcmFnbWVudCBub2Rl
LiBUaGlzIGxvb2tzIHVnbHkgYnV0IHJlcXVpcmVkIGZvciBwZXJmb3JtYW5jZQotICAgICAgICAg
ICAgLy8gYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSBtX3Rva2VuLT5uYW1lKCkgaW4gbG9jYWxOYW1l
KCksIGhhc0xvY2FsTmFtZSgpIGFuZCBoYXNUYWdOYW1lKCkgd2l0aG91dAotICAgICAgICAgICAg
Ly8gY2hlY2tpbmcgbV9pc0RvY3VtZW50RnJhZ21lbnROb2RlIGZsYWcuCi0gICAgICAgICAgICBt
X3Rva2VuID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuOjpTdGFydFRhZywgbnVs
bEF0b20pOwogICAgICAgICAgICAgbV9pc0RvY3VtZW50RnJhZ21lbnROb2RlID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEl0ZW1Gb3JDb250ZXh0RWxlbWVudDoKLSAg
ICAgICAgICAgIC8vIENyZWF0ZSBhIGZha2UgdG9rZW4gZm9yIGEgY29udGV4dCBlbGVtZW50IGZv
ciB0aGUgc2FtZSByZWFzb24gYXMgYWJvdmUuCi0gICAgICAgICAgICBtX3Rva2VuID0gQXRvbWlj
SFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuOjpTdGFydFRhZywgbV9ub2RlLT5sb2NhbE5hbWUo
KSk7CisgICAgICAgICAgICBtX3Rva2VuTG9jYWxOYW1lID0gbV9ub2RlLT5sb2NhbE5hbWUoKTsK
ICAgICAgICAgICAgIG1fbmFtZXNwYWNlVVJJID0gbV9ub2RlLT5uYW1lc3BhY2VVUkkoKTsKICAg
ICAgICAgICAgIG1faXNEb2N1bWVudEZyYWdtZW50Tm9kZSA9IGZhbHNlOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBIVE1MU3RhY2tJdGVtKFBhc3NSZWZQdHI8
Q29udGFpbmVyTm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxBdG9taWNIVE1MVG9rZW4+IHRva2VuLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSA9IEhUTUxOYW1lczo6eGh0bWxOYW1lc3Bh
Y2VVUkkpCisgICAgSFRNTFN0YWNrSXRlbShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IG5vZGUs
IEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJ
ID0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkKICAgICAgICAgOiBtX25vZGUobm9kZSkK
LSAgICAgICAgLCBtX3Rva2VuKHRva2VuKQorICAgICAgICAsIG1fdG9rZW5Mb2NhbE5hbWUodG9r
ZW4tPm5hbWUoKSkKKyAgICAgICAgLCBtX3Rva2VuQXR0cmlidXRlcyh0b2tlbi0+YXR0cmlidXRl
cygpKQogICAgICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKICAgICAgICAgLCBt
X2lzRG9jdW1lbnRGcmFnbWVudE5vZGUoZmFsc2UpCiAgICAgewpAQCAtMjMwLDcgKzIzMiw4IEBA
IHByaXZhdGU6CiAKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbV9ub2RlOwogCi0gICAgUmVm
UHRyPEF0b21pY0hUTUxUb2tlbj4gbV90b2tlbjsKKyAgICBBdG9taWNTdHJpbmcgbV90b2tlbkxv
Y2FsTmFtZTsKKyAgICBWZWN0b3I8QXR0cmlidXRlPiBtX3Rva2VuQXR0cmlidXRlczsKICAgICBB
dG9taWNTdHJpbmcgbV9uYW1lc3BhY2VVUkk7CiAgICAgYm9vbCBtX2lzRG9jdW1lbnRGcmFnbWVu
dE5vZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRy
ZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5jcHAKaW5kZXggNTVjMTEwZTY0YWE3NjYzZTUwYmNlZmUwOTQ1ZWYyYWFlMDA2ODljZS4uZjAw
NzJkNTAyN2MwZmEyYzE1NjFlOGI5MDMxZWZmZWNkNDNhNzdlYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC00MzMsMTQgKzQzMywxNCBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RvY3R5cGVUb2tlbihBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlU3RhcnRUYWcoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJp
YnV0ZXMpCiB7CiAgICAgLy8gRklYTUU6IFdlJ2xsIG5lZWQgYSBmYW5jaWVyIGNvbnZlcnNpb24g
dGhhbiBqdXN0ICJsb2NhbE5hbWUiIGZvciBTVkcvTWF0aE1MIHRhZ3MuCi0gICAgUmVmUHRyPEF0
b21pY0hUTUxUb2tlbj4gZmFrZVRva2VuID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRv
a2VuOjpTdGFydFRhZywgdGFnTmFtZS5sb2NhbE5hbWUoKSwgYXR0cmlidXRlcyk7Ci0gICAgcHJv
Y2Vzc1N0YXJ0VGFnKGZha2VUb2tlbi5nZXQoKSk7CisgICAgQXRvbWljSFRNTFRva2VuIGZha2VU
b2tlbihIVE1MVG9rZW46OlN0YXJ0VGFnLCB0YWdOYW1lLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVz
KTsKKyAgICBwcm9jZXNzU3RhcnRUYWcoJmZha2VUb2tlbik7CiB9CiAKIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzRmFrZUVuZFRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7
Ci0gICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZmFrZVRva2VuID0gQXRvbWljSFRNTFRva2Vu
OjpjcmVhdGUoSFRNTFRva2VuOjpFbmRUYWcsIHRhZ05hbWUpOwotICAgIHByb2Nlc3NFbmRUYWco
ZmFrZVRva2VuLmdldCgpKTsKKyAgICBBdG9taWNIVE1MVG9rZW4gZmFrZVRva2VuKEhUTUxUb2tl
bjo6RW5kVGFnLCB0YWdOYW1lKTsKKyAgICBwcm9jZXNzRW5kVGFnKCZmYWtlVG9rZW4pOwogfQog
CiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VFbmRUYWcoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSkKQEAgLTQ2MCw4ICs0NjAsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpCiB7CiAgICAgaWYgKCFtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPmluQnV0dG9uU2NvcGUocFRhZy5sb2NhbE5hbWUoKSkpCiAgICAgICAg
IHJldHVybjsKLSAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBlbmRQID0gQXRvbWljSFRNTFRv
a2VuOjpjcmVhdGUoSFRNTFRva2VuOjpFbmRUYWcsIHBUYWcubG9jYWxOYW1lKCkpOwotICAgIHBy
b2Nlc3NFbmRUYWcoZW5kUC5nZXQoKSk7CisgICAgQXRvbWljSFRNTFRva2VuIGVuZFAoSFRNTFRv
a2VuOjpFbmRUYWcsIHBUYWcubG9jYWxOYW1lKCkpOworICAgIHByb2Nlc3NFbmRUYWcoJmVuZFAp
OwogfQogCiBWZWN0b3I8QXR0cmlidXRlPiBIVE1MVHJlZUJ1aWxkZXI6OmF0dHJpYnV0ZXNGb3JJ
c2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKQEAgLTg5OCw4ICs4OTgsOCBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxU
b2tlbiogdG9rZW4pCiAgICAgfQogICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGdyb3VwVGFn
IHx8IHRva2VuLT5uYW1lKCkgPT0gb3B0aW9uVGFnKSB7CiAgICAgICAgIGlmIChtX3RyZWUuY3Vy
cmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxBdG9taWNIVE1MVG9rZW4+IGVuZE9wdGlvbiA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRl
KEhUTUxUb2tlbjo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAg
cHJvY2Vzc0VuZFRhZyhlbmRPcHRpb24uZ2V0KCkpOworICAgICAgICAgICAgQXRvbWljSFRNTFRv
a2VuIGVuZE9wdGlvbihIVE1MVG9rZW46OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgpKTsK
KyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoJmVuZE9wdGlvbik7CiAgICAgICAgIH0KICAgICAg
ICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAg
ICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CkBAIC0xMzY3LDggKzEzNjcsOCBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiog
dG9rZW4pCiAgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnCiAgICAgICAgICAg
ICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAg
IHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICAgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4g
ZW5kU2VsZWN0ID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuOjpFbmRUYWcsIHNl
bGVjdFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZFNlbGVj
dC5nZXQoKSk7CisgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kU2VsZWN0KEhUTUxUb2tl
bjo6RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkpOworICAgICAgICAgICAgcHJvY2Vzc0Vu
ZFRhZygmZW5kU2VsZWN0KTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEzODEsMjggKzEzODEsMjggQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGlvblRhZykgewog
ICAgICAgICAgICAgaWYgKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmhhc1RhZ05hbWUob3B0
aW9uVGFnKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGVuZE9w
dGlvbiA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlbjo6RW5kVGFnLCBvcHRpb25U
YWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kT3B0aW9u
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kT3B0aW9uKEhUTUxU
b2tlbjo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAgIHBy
b2Nlc3NFbmRUYWcoJmVuZE9wdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGdyb3VwVGFnKSB7CiAgICAgICAg
ICAgICBpZiAobV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShvcHRpb25UYWcp
KSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZW5kT3B0aW9uID0g
QXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuOjpFbmRUYWcsIG9wdGlvblRhZy5sb2Nh
bE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRpb24uZ2V0KCkp
OworICAgICAgICAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24oSFRNTFRva2VuOjpF
bmRUYWcsIG9wdGlvblRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0Vu
ZFRhZygmZW5kT3B0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtX3RyZWUu
Y3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSkgewotICAgICAgICAg
ICAgICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGVuZE9wdGdyb3VwID0gQXRvbWljSFRNTFRv
a2VuOjpjcmVhdGUoSFRNTFRva2VuOjpFbmRUYWcsIG9wdGdyb3VwVGFnLmxvY2FsTmFtZSgpKTsK
LSAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGdyb3VwLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kT3B0Z3JvdXAoSFRNTFRva2VuOjpFbmRUYWcs
IG9wdGdyb3VwVGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFn
KCZlbmRPcHRncm91cCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHNlbGVjdFRhZykgewogICAgICAgICAgICAgcGFyc2VF
cnJvcih0b2tlbik7Ci0gICAgICAgICAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBlbmRTZWxl
Y3QgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW46OkVuZFRhZywgc2VsZWN0VGFn
LmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0LmdldCgp
KTsKKyAgICAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRTZWxlY3QoSFRNTFRva2VuOjpFbmRU
YWcsIHNlbGVjdFRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKCZl
bmRTZWxlY3QpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0
b2tlbi0+bmFtZSgpID09IGlucHV0VGFnCkBAIC0xNDEzLDggKzE0MTMsOCBAQCB2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxBdG9taWNIVE1MVG9r
ZW4+IGVuZFNlbGVjdCA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlbjo6RW5kVGFn
LCBzZWxlY3RUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRT
ZWxlY3QuZ2V0KCkpOworICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZFNlbGVjdChIVE1M
VG9rZW46OkVuZFRhZywgc2VsZWN0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgIHByb2Nl
c3NFbmRUYWcoJmVuZFNlbGVjdCk7CiAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xODMwLDggKzE4MzAsOCBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi0+bmFtZSgp
ID09IGh0bWxUYWcpIHsKLSAgICAgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZW5kQm9keSA9
IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlbjo6RW5kVGFnLCBib2R5VGFnLmxvY2Fs
TmFtZSgpKTsKLSAgICAgICAgaWYgKHByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KGVuZEJvZHku
Z2V0KCkpKQorICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kQm9keShIVE1MVG9rZW46OkVuZFRh
ZywgYm9keVRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgIGlmIChwcm9jZXNzQm9keUVuZFRhZ0Zv
ckluQm9keSgmZW5kQm9keSkpCiAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyNDcsOCArMjI0Nyw4IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgICAg
ICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAg
IHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+aW5UYWJsZVNjb3BlKHRva2VuLT5uYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRy
PEF0b21pY0hUTUxUb2tlbj4gZW5kU2VsZWN0ID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRN
TFRva2VuOjpFbmRUYWcsIHNlbGVjdFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAg
cHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3QuZ2V0KCkpOworICAgICAgICAgICAgICAgIEF0b21pY0hU
TUxUb2tlbiBlbmRTZWxlY3QoSFRNTFRva2VuOjpFbmRUYWcsIHNlbGVjdFRhZy5sb2NhbE5hbWUo
KSk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZygmZW5kU2VsZWN0KTsKICAgICAgICAg
ICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHJldHVybjsKQEAgLTI2NDMsMzMgKzI2NDMsMzMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRl
ZmF1bHRGb3JJbml0aWFsKCkKIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JCZWZv
cmVIVE1MKCkKIHsKLSAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBzdGFydEhUTUwgPSBBdG9t
aWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBodG1sVGFnLmxvY2FsTmFt
ZSgpKTsKLSAgICBtX3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoc3RhcnRI
VE1MLmdldCgpKTsKKyAgICBBdG9taWNIVE1MVG9rZW4gc3RhcnRIVE1MKEhUTUxUb2tlbjo6U3Rh
cnRUYWcsIGh0bWxUYWcubG9jYWxOYW1lKCkpOworICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0
YXJ0VGFnQmVmb3JlSFRNTCgmc3RhcnRIVE1MKTsKICAgICBzZXRJbnNlcnRpb25Nb2RlKEJlZm9y
ZUhlYWRNb2RlKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JCZWZvcmVI
ZWFkKCkKIHsKLSAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBzdGFydEhlYWQgPSBBdG9taWNI
VE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBoZWFkVGFnLmxvY2FsTmFtZSgp
KTsKLSAgICBwcm9jZXNzU3RhcnRUYWcoc3RhcnRIZWFkLmdldCgpKTsKKyAgICBBdG9taWNIVE1M
VG9rZW4gc3RhcnRIZWFkKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGhlYWRUYWcubG9jYWxOYW1lKCkp
OworICAgIHByb2Nlc3NTdGFydFRhZygmc3RhcnRIZWFkKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OmRlZmF1bHRGb3JJbkhlYWQoKQogewotICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+
IGVuZEhlYWQgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW46OkVuZFRhZywgaGVh
ZFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgcHJvY2Vzc0VuZFRhZyhlbmRIZWFkLmdldCgpKTsKKyAg
ICBBdG9taWNIVE1MVG9rZW4gZW5kSGVhZChIVE1MVG9rZW46OkVuZFRhZywgaGVhZFRhZy5sb2Nh
bE5hbWUoKSk7CisgICAgcHJvY2Vzc0VuZFRhZygmZW5kSGVhZCk7CiB9CiAKIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5IZWFkTm9zY3JpcHQoKQogewotICAgIFJlZlB0cjxBdG9t
aWNIVE1MVG9rZW4+IGVuZE5vc2NyaXB0ID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRv
a2VuOjpFbmRUYWcsIG5vc2NyaXB0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzRW5kVGFn
KGVuZE5vc2NyaXB0LmdldCgpKTsKKyAgICBBdG9taWNIVE1MVG9rZW4gZW5kTm9zY3JpcHQoSFRN
TFRva2VuOjpFbmRUYWcsIG5vc2NyaXB0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICBwcm9jZXNzRW5k
VGFnKCZlbmROb3NjcmlwdCk7CiB9CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9y
QWZ0ZXJIZWFkKCkKIHsKLSAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBzdGFydEJvZHkgPSBB
dG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW46OlN0YXJ0VGFnLCBib2R5VGFnLmxvY2Fs
TmFtZSgpKTsKLSAgICBwcm9jZXNzU3RhcnRUYWcoc3RhcnRCb2R5LmdldCgpKTsKKyAgICBBdG9t
aWNIVE1MVG9rZW4gc3RhcnRCb2R5KEhUTUxUb2tlbjo6U3RhcnRUYWcsIGJvZHlUYWcubG9jYWxO
YW1lKCkpOworICAgIHByb2Nlc3NTdGFydFRhZygmc3RhcnRCb2R5KTsKICAgICBtX2ZyYW1lc2V0
T2sgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9U
ZXh0RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvVGV4dERv
Y3VtZW50UGFyc2VyLmNwcAppbmRleCA4MGRiNGE5ZGMwNWJhNDM1ODgxZTU2Y2EzMDFiZWQwNDg4
MzViNTA4Li5mNzlkZTRhMTlhNWIzZjQ0NTUzNzYyYjk5ODY4ZmNjZDUzMTg1MDllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5jcHAKQEAg
LTYwLDggKzYwLDggQEAgdm9pZCBUZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZha2VQcmVFbGVt
ZW50KCkKICAgICAvLyBkaXN0cnViaW5nIHRoZSBsaW5lL2NvbHVtbiBudW1iZXIgY2FsY3VsYXRp
b25zLgogICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7CiAgICAgYXR0cmlidXRlcy5h
cHBlbmQoQXR0cmlidXRlKHN0eWxlQXR0ciwgIndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUt
c3BhY2U6IHByZS13cmFwOyIpKTsKLSAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBmYWtlUHJl
ID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuOjpTdGFydFRhZywgcHJlVGFnLmxv
Y2FsTmFtZSgpLCBhdHRyaWJ1dGVzKTsKLSAgICB0cmVlQnVpbGRlcigpLT5jb25zdHJ1Y3RUcmVl
KGZha2VQcmUuZ2V0KCkpOworICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlUHJlKEhUTUxUb2tlbjo6
U3RhcnRUYWcsIHByZVRhZy5sb2NhbE5hbWUoKSwgYXR0cmlidXRlcyk7CisgICAgdHJlZUJ1aWxk
ZXIoKS0+Y29uc3RydWN0VHJlZSgmZmFrZVByZSk7CiAKICAgICAvLyBOb3JtYWxseSB3ZSB3b3Vs
ZCBza2lwIHRoZSBmaXJzdCBcbiBhZnRlciBhIDxwcmU+IGVsZW1lbnQsIGJ1dCB3ZSBkb24ndAog
ICAgIC8vIHdhbnQgdG8gc2tpcCB0aGUgZmlyc3QgXG4gZm9yIHRleHQgZG9jdW1lbnRzIQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>