<?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>123794</bug_id>
          
          <creation_ts>2013-11-05 01:56:08 -0800</creation_ts>
          <short_desc>HTMLCollection should not be NodeList</short_desc>
          <delta_ts>2014-02-06 08:30:17 -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>DOM</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>947083</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-05 01:56:08 -0800</bug_when>
    <thetext>HTMLContainer and NodeList are unrelated types in DOM yet our HTMLContainer inherits NodeList for code sharing reasons. While some code does get shared the types are sufficiently different that this results in lots of unnecessary branches, complexity and general awkwardness. Code sharing can be better achieved by other means than inheritance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947087</commentid>
    <comment_count>1</comment_count>
      <attachid>216016</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-05 02:12:02 -0800</bug_when>
    <thetext>Created attachment 216016
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947091</commentid>
    <comment_count>2</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-05 02:16:11 -0800</bug_when>
    <thetext>and by HTMLContainer I mean HTMLCollection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947092</commentid>
    <comment_count>3</comment_count>
      <attachid>216016</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-11-05 02:19:02 -0800</bug_when>
    <thetext>Comment on attachment 216016
patch

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

&gt; Source/WebCore/dom/Document.cpp:502
&gt; +    for (unsigned i = 0; i &lt; WTF_ARRAY_LENGTH(m_nodeListAndCollectionCounts); i++)

++i LOL

&gt; Source/WebCore/dom/Document.cpp:592
&gt; +    for (unsigned i = 0; i &lt; WTF_ARRAY_LENGTH(m_nodeListAndCollectionCounts); i++)

Ditto.

&gt; Source/WebCore/dom/Document.cpp:3361
&gt; +void Document::registerNodeList(LiveNodeList* list)

LiveNodeList&amp;

&gt; Source/WebCore/dom/Document.cpp:3368
&gt; +void Document::unregisterNodeList(LiveNodeList* list)

LiveNodeList&amp;

&gt; Source/WebCore/dom/Document.cpp:3377
&gt; +void Document::registerCollection(HTMLCollection* list)

HTMLCollection&amp;
Also &apos;list&apos;?

&gt; Source/WebCore/dom/Document.cpp:3386
&gt; +{

HTMLCollection&amp;
Also &apos;list&apos;?

&gt; Source/WebCore/dom/Document.h:704
&gt; +    bool shouldInvalidateNodeListAndCollectionCaches(const QualifiedName* attrName = 0) const;

nullptr

&gt; Source/WebCore/dom/LiveNodeList.cpp:43
&gt; +inline bool isMatchingElement(const NodeListType*, Element*);

So

&gt; Source/WebCore/dom/LiveNodeList.cpp:45
&gt; +template &lt;&gt; inline bool isMatchingElement(const LiveNodeList* nodeList, Element* element)

many

&gt; Source/WebCore/dom/LiveNodeList.cpp:50
&gt; +template &lt;&gt; inline bool isMatchingElement(const HTMLTagNodeList* nodeList, Element* element)

pointers

&gt; Source/WebCore/dom/LiveNodeList.cpp:55
&gt; +template &lt;&gt; inline bool isMatchingElement(const ClassNodeList* nodeList, Element* element)

everywhere :|

&gt; Source/WebCore/dom/LiveNodeList.cpp:67
&gt; +    return 0;

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947093</commentid>
    <comment_count>4</comment_count>
      <attachid>216016</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-05 02:25:44 -0800</bug_when>
    <thetext>Comment on attachment 216016
patch

Attachment 216016 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/19638999</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947095</commentid>
    <comment_count>5</comment_count>
      <attachid>216016</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-11-05 02:28:36 -0800</bug_when>
    <thetext>Comment on attachment 216016
patch

We shouldn&apos;t do this at least until we move getElementsByTagName, etc… off of NodeList.  That was the whole point in creating this mess in the first place.  Sorry for leaving the mess but let me finish the transition first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947096</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-11-05 02:32:35 -0800</bug_when>
    <thetext>Namely, I&apos;m referring to https://bugs.webkit.org/show_bug.cgi?id=110611.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947105</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-11-05 04:09:59 -0800</bug_when>
    <thetext>Antti and I had some discussions on IRC.  Antti intends to land this patch and then re-share code for the caches and I&apos;ll implement the transition once he finished that work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947112</commentid>
    <comment_count>8</comment_count>
      <attachid>216016</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-11-05 04:41:51 -0800</bug_when>
    <thetext>Comment on attachment 216016
patch

Sure go ahead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947149</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-11-05 07:00:53 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/158663 broke the build everywhere ... :-/

Are you working on the fix or do you need any help?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947154</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-05 07:21:17 -0800</bug_when>
    <thetext>was fixed in https://trac.webkit.org/r158665</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947155</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-11-05 07:22:55 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; was fixed in https://trac.webkit.org/r158665

No, it wasn&apos;t. Windows, EFL and GTK build is still broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947156</commentid>
    <comment_count>12</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-11-05 07:24:08 -0800</bug_when>
    <thetext>maybe http://trac.webkit.org/changeset/158667 ... let&apos;s see</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216016</attachid>
            <date>2013-11-05 02:12:02 -0800</date>
            <delta_ts>2013-11-05 04:41:51 -0800</delta_ts>
            <desc>patch</desc>
            <filename>livenodelist-split-3.patch</filename>
            <type>text/plain</type>
            <size>83359</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4NiBAQAorMjAxMy0xMS0wNSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSFRNTENvbnRhaW5lciBzaG91
bGQgbm90IGJlIE5vZGVMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjM3OTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBIVE1MQ29udGFpbmVyIGFuZCBOb2RlTGlzdCBhcmUgdW5yZWxhdGVkIHR5cGVz
IGluIERPTSB5ZXQgb3VyIEhUTUxDb250YWluZXIgaW5oZXJpdHMgTm9kZUxpc3QKKyAgICAgICAg
Zm9yIGNvZGUgc2hhcmluZyByZWFzb25zLiBXaGlsZSBzb21lIGNvZGUgZG9lcyBnZXQgc2hhcmVk
IHRoZSB0eXBlcyBhcmUgc3VmZmljaWVudGx5IGRpZmZlcmVudCAKKyAgICAgICAgdGhhdCB0aGlz
IHJlc3VsdHMgaW4gbG90cyBvZiB1bm5lY2Vzc2FyeSBicmFuY2hlcywgY29tcGxleGl0eSBhbmQg
Z2VuZXJhbCBhd2t3YXJkbmVzcy4gQ29kZSBzaGFyaW5nIAorICAgICAgICBjYW4gYmUgYmV0dGVy
IGFjaGlldmVkIGJ5IG1lYW5zIG90aGVyIHRoYW4gaW5oZXJpdGFuY2UuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHBhdGNoIHNwbGl0cyBIVE1MQ29udGFpbmVyIGZyb20gTm9kZUxpc3QuCisKKyAg
ICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpzZXRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIGRv
bS9DbGFzc05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNzTm9kZUxpc3Q6On5D
bGFzc05vZGVMaXN0KToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGFpbmVyTm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGFpbmVyTm9kZTo6Z2V0RWxlbWVudHNCeU5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFpbmVyTm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250YWluZXJOb2RlOjpyYWRpb05vZGVMaXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50Ojp+RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnJlZ2lzdGVyTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVucmVn
aXN0ZXJOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVnaXN0ZXJDb2xs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1bnJlZ2lzdGVyQ29sbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZW5zdXJlQ2FjaGVkQ29sbGVjdGlvbik6
CisgICAgICAgIAorICAgICAgICAgICAgQWRkIHNlcGFyYXRlIGZ1bmN0aW9ucyBhbmQgbWFwIGZv
ciByZWdpc3RlcmluZyBIVE1MQ29sbGVjdGlvbnMuCisKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjphbGwpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OndpbmRvd05hbWVkSXRlbXMp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyk6CisgICAg
ICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjplbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpjYWNoZWRIVE1MQ29sbGVjdGlvbik6CisgICAgICAgICogZG9tL0xpdmVOb2Rl
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3Q6OnJvb3ROb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzTWF0Y2hpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okxp
dmVOb2RlTGlzdDo6aXRlcmF0ZUZvclByZXZpb3VzRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpMaXZlTm9kZUxpc3Q6Oml0ZW1CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RNYXRj
aGluZ0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dE1hdGNoaW5nRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjp0cmF2ZXJzZU1hdGNoaW5nRWxlbWVudHNGb3J3YXJkVG9PZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVMaXN0Ojp0cmF2ZXJzZUxpdmVOb2RlTGlzdEZp
cnN0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3Q6OnRyYXZlcnNlTGl2
ZU5vZGVMaXN0Rm9yd2FyZFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpdmVOb2RlTGlz
dDo6aXNMYXN0SXRlbUNsb3NlclRoYW5MYXN0T3JDYWNoZWRJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxpdmVOb2RlTGlzdDo6aXNGaXJzdEl0ZW1DbG9zZXJUaGFuQ2FjaGVkSXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpM
aXZlTm9kZUxpc3Q6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVMaXN0OjplbGVt
ZW50QmVmb3JlT3JBZnRlckNhY2hlZEVsZW1lbnQpOgorICAgICAgICAKKyAgICAgICAgICAgIFRo
aXMgY29kZSB1c2VkIHRvIGxpdmUgaW4gSFRNTENvbGxlY3Rpb24uY3BwLiBDb3B5LXBhc3RlIGhl
cmUgYW5kIHJlbW92ZSBhbGwgYnJhbmNoZXMgbm90IG5lZWRlZCBmb3IgTm9kZUxpc3RzLgorCisg
ICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3Q6OmludmFsaWRhdGVDYWNoZSk6CisgICAgICAg
IAorICAgICAgICAgICAgTm9kZUxpc3RzIGhhdmUgbm8gbmFtZSBjYWNoZXMuCisKKyAgICAgICAg
KiBkb20vTGl2ZU5vZGVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3Q6Okxp
dmVOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3Q6On5MaXZlTm9kZUxp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVMaXN0Ojppc1Jvb3RlZEF0RG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVMaXN0Ojp0eXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxpdmVOb2RlTGlzdDo6aW52YWxpZGF0ZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6Okxp
dmVOb2RlTGlzdDo6c2V0Q2FjaGVkRWxlbWVudCk6CisgICAgICAgIAorICAgICAgICAgICAgTWVy
Z2UgTGl2ZU5vZGVMaXN0QmFzZSBhbmQgTGl2ZU5vZGVMaXN0LgorICAgICAgICAgICAgUmVtb3Zl
IGZpZWxkcyBhbmQgY29kZSBzdXBwb3J0aW5nIEhUTUxDb2xsZWN0aW9uLgorCisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRJbnZhbGlkYXRlVHlwZU9uQXR0cmlidXRlQ2hhbmdlKToKKyAgICAgICAg
CisgICAgICAgICAgICBNb3ZlIHRvIGdsb2JhbCBzY29wZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2Vk
IGJvdGggSFRNTENvbGxlY3Rpb25zIGFuZCBMaXZlTm9kZUxpc3RzLgorCisgICAgICAgICogZG9t
L05hbWVOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lTm9kZUxpc3Q6On5OYW1l
Tm9kZUxpc3QpOgorICAgICAgICAqIGRvbS9OYW1lTm9kZUxpc3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5hbWVOb2RlTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzaG91bGRJbnZhbGlkYXRlTm9kZUxpc3RDYWNoZXNGb3JBdHRyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzaG91bGRJbnZhbGlkYXRlTm9kZUxpc3RBbmRDb2xs
ZWN0aW9uQ2FjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbnZhbGlkYXRlTm9k
ZUxpc3RBbmRDb2xsZWN0aW9uQ2FjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmludmFs
aWRhdGVOb2RlTGlzdEFuZENvbGxlY3Rpb25DYWNoZXNJbkFuY2VzdG9ycyk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyk6CisgICAgICAgICog
ZG9tL05vZGUuaDoKKyAgICAgICAgKiBkb20vTm9kZVJhcmVEYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoQXRvbWljTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVXaXRoUXVhbGlmaWVkTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRkQ2FjaGVkQ29sbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6Y2FjaGVkQ29sbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6cmVtb3ZlQ2FjaGVXaXRo
QXRvbWljTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6cmVtb3Zl
Q2FjaGVXaXRoTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6cmVt
b3ZlQ2FjaGVkQ29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0
YTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6YWRvcHRE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdHNOb2RlRGF0YTo6bmFtZWRDb2xs
ZWN0aW9uS2V5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpuYW1lZE5v
ZGVMaXN0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpkZWxldGVU
aGlzQW5kVXBkYXRlTm9kZVJhcmVEYXRhSWZBYm91dFRvUmVtb3ZlTGFzdExpc3QpOgorICAgICAg
ICAKKyAgICAgICAgICAgIEFkZCBzZXBhcmF0ZSBjYWNoZSBmb3IgSFRNTENvbGxlY3Rpb25zLgor
CisgICAgICAgICogZG9tL1RhZ05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05v
ZGVMaXN0OjpUYWdOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpUYWdOb2RlTGlzdDo6flRh
Z05vZGVMaXN0KToKKyAgICAgICAgKiBkb20vVGFnTm9kZUxpc3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlRhZ05vZGVMaXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhZ05vZGVM
aXN0OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvQ29sbGVjdGlvblR5cGUuaDoKKyAgICAgICAg
CisgICAgICAgICAgICBSZW1vdmUgTm9kZUxpc3QgdHlwZXMuCisKKyAgICAgICAgKiBodG1sL0hU
TUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZE9ubHlJbmNsdWRlRGly
ZWN0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6cm9vdFR5cGVGcm9tQ29sbGVjdGlvblR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6aW52YWxpZGF0aW9uVHlwZUV4Y2x1ZGluZ0lkQW5kTmFt
ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OkhUTUxDb2xs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp+SFRNTENvbGxlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OnJvb3ROb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzTWF0Y2hpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
b2xsZWN0aW9uOjppdGVyYXRlRm9yUHJldmlvdXNFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDb2xsZWN0aW9uOjppdGVtQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0TWF0
Y2hpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om5leHRNYXRjaGluZ0VsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6dHJhdmVyc2VNYXRjaGluZ0VsZW1lbnRzRm9yd2FyZFRvT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppc0xhc3RJdGVtQ2xvc2VyVGhh
bkxhc3RPckNhY2hlZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Omlz
Rmlyc3RJdGVtQ2xvc2VyVGhhbkNhY2hlZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENv
bGxlY3Rpb246OnNldENhY2hlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxl
Y3Rpb246Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aXRlbSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6ZWxlbWVudEJlZm9yZU9yQWZ0ZXJD
YWNoZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp0cmF2ZXJz
ZUZpcnN0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dHJhdmVy
c2VOZXh0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dHJhdmVy
c2VGb3J3YXJkVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246Omlu
dmFsaWRhdGVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aW52YWxp
ZGF0ZUlkTmFtZUNhY2hlTWFwcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6
bmFtZWRJdGVtKToKKyAgICAgICAgCisgICAgICAgICAgICBSZW1vdmUgTm9kZUxpc3Qgc3BlY2lm
aWMgYnJhbmNoZXMgYW5kIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIExpdmVOb2RlTGlzdEJhc2Ug
ZnVuY3Rpb25zIGFyZSBub3cgSFRNTENvbGxlY3Rpb24gZnVuY3Rpb25zLgorCisgICAgICAgICog
aHRtbC9IVE1MQ29sbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246
OmlzUm9vdGVkQXREb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6
aW52YWxpZGF0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6b3duZXJOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppbnZhbGlkYXRlQ2FjaGUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmRvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDb2xsZWN0aW9uOjpvdmVycmlkZXNJdGVtQWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbGxlY3Rpb246OmlzRWxlbWVudENhY2hlVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbGxlY3Rpb246OmNhY2hlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxl
Y3Rpb246OmNhY2hlZEVsZW1lbnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxl
Y3Rpb246OmlzTGVuZ3RoQ2FjaGVWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVj
dGlvbjo6Y2FjaGVkTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpz
ZXRMZW5ndGhDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6c2V0Q2Fj
aGVkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aXNJdGVtUmVm
RWxlbWVudHNDYWNoZVZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpz
ZXRJdGVtUmVmRWxlbWVudHNDYWNoZVZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xs
ZWN0aW9uOjpyb290VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6aGFz
TmFtZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpzZXRIYXNOYW1l
Q2FjaGUpOgorICAgICAgICAKKyAgICAgICAgICAgIENvcHktcGFzdGUgZnVuY3Rpb25zIGFuZCBm
aWVsZHMgZnJvbSBmb3JtZXIgTGl2ZU5vZGVMaXN0QmFzZS4KKworICAgICAgICAqIGh0bWwvSFRN
TE5hbWVDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlv
bjo6fkhUTUxOYW1lQ29sbGVjdGlvbik6CisgICAgICAgICogaHRtbC9MYWJlbGFibGVFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxhYmVsYWJsZUVsZW1lbnQ6OmxhYmVscyk6CisgICAg
ICAgICogaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYWJlbHNO
b2RlTGlzdDo6fkxhYmVsc05vZGVMaXN0KToKKyAgICAgICAgKiBodG1sL0xhYmVsc05vZGVMaXN0
Lmg6CisgICAgICAgICogaHRtbC9SYWRpb05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJhZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVMaXN0KToKKyAgICAgICAgKiBodG1sL1JhZGlvTm9k
ZUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6OmNyZWF0ZSk6CisKIDIw
MTMtMTEtMDUgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAg
ICAgICBbQ1NTXSBFbmFibGUgY3NzLWltYWdlLW9yaWVudGF0aW9uIG9uIEVGTCBhbmQgR1RLIHBv
cnRzLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAkocmV2aXNpb24gMTU4NjU5KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0F0dHIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9p
ZCBBdHRyOjpzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIAogICAgIGNyZWF0ZVRleHRDaGls
ZCgpOwogICAgIG1faWdub3JlQ2hpbGRyZW5DaGFuZ2VkLS07CiAKLSAgICBpbnZhbGlkYXRlTm9k
ZUxpc3RDYWNoZXNJbkFuY2VzdG9ycygmbV9uYW1lLCBtX2VsZW1lbnQpOworICAgIGludmFsaWRh
dGVOb2RlTGlzdEFuZENvbGxlY3Rpb25DYWNoZXNJbkFuY2VzdG9ycygmbV9uYW1lLCBtX2VsZW1l
bnQpOwogfQogCiB2b2lkIEF0dHI6OnNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmKQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgQXR0cjo6Y2hpbGRyZW5D
aGFuZ2VkKGNvbnN0IENoaWxkQ2gKICAgICBpZiAobV9pZ25vcmVDaGlsZHJlbkNoYW5nZWQgPiAw
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnZhbGlkYXRlTm9kZUxpc3RDYWNoZXNJbkFuY2Vz
dG9ycygmcXVhbGlmaWVkTmFtZSgpLCBtX2VsZW1lbnQpOworICAgIGludmFsaWRhdGVOb2RlTGlz
dEFuZENvbGxlY3Rpb25DYWNoZXNJbkFuY2VzdG9ycygmcXVhbGlmaWVkTmFtZSgpLCBtX2VsZW1l
bnQpOwogCiAgICAgU3RyaW5nQnVpbGRlciB2YWx1ZUJ1aWxkZXI7CiAgICAgVGV4dE5vZGVUcmF2
ZXJzYWw6OmFwcGVuZENvbnRlbnRzKHRoaXMsIHZhbHVlQnVpbGRlcik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0NsYXNzTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAxNTg2NTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcg
QEAgQ2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdChDb250YWluZXJObwogCiBDbGFzc05vZGVM
aXN0Ojp+Q2xhc3NOb2RlTGlzdCgpCiB7Ci0gICAgb3duZXJOb2RlKCkubm9kZUxpc3RzKCktPnJl
bW92ZUNhY2hlV2l0aE5hbWUodGhpcywgQ2xhc3NOb2RlTGlzdFR5cGUsIG1fb3JpZ2luYWxDbGFz
c05hbWVzKTsKKyAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoTmFt
ZSh0aGlzLCBtX29yaWdpbmFsQ2xhc3NOYW1lcyk7CiB9IAogCiBib29sIENsYXNzTm9kZUxpc3Q6
Om5vZGVNYXRjaGVzKEVsZW1lbnQqIHRlc3ROb2RlKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMTU4NjU5KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzYsNyArODM2LDcgQEAg
dm9pZCBDb250YWluZXJOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY29ucwogICAgIGRvY3VtZW50KCku
aW5jRE9NVHJlZVZlcnNpb24oKTsKICAgICBpZiAoY2hhbmdlLnNvdXJjZSA9PSBDaGlsZENoYW5n
ZVNvdXJjZUFQSSAmJiBjaGFuZ2UudHlwZSAhPSBUZXh0Q2hhbmdlZCkKICAgICAgICAgZG9jdW1l
bnQoKS51cGRhdGVSYW5nZXNBZnRlckNoaWxkcmVuQ2hhbmdlZCgqdGhpcyk7Ci0gICAgaW52YWxp
ZGF0ZU5vZGVMaXN0Q2FjaGVzSW5BbmNlc3RvcnMoKTsKKyAgICBpbnZhbGlkYXRlTm9kZUxpc3RB
bmRDb2xsZWN0aW9uQ2FjaGVzSW5BbmNlc3RvcnMoKTsKIH0KIAogaW5saW5lIHN0YXRpYyB2b2lk
IGNsb25lQ2hpbGROb2Rlc0F2b2lkaW5nRGVsZXRlQnV0dG9uKENvbnRhaW5lck5vZGUqIHBhcmVu
dCwgQ29udGFpbmVyTm9kZSogY2xvbmVkUGFyZW50LCBIVE1MRWxlbWVudCogZGVsZXRlQnV0dG9u
Q29udGFpbmVyRWxlbWVudCkKQEAgLTExMjcsOCArMTEyNyw4IEBAIFBhc3NSZWZQdHI8Tm9kZUxp
c3Q+IENvbnRhaW5lck5vZGU6OmdldEUKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoZG9j
dW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEo
KS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPEhUTUxUYWdOb2RlTGlz
dD4oKnRoaXMsIEhUTUxUYWdOb2RlTGlzdFR5cGUsIGxvY2FsTmFtZSk7Ci0gICAgcmV0dXJuIGVu
c3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxU
YWdOb2RlTGlzdD4oKnRoaXMsIFRhZ05vZGVMaXN0VHlwZSwgbG9jYWxOYW1lKTsKKyAgICAgICAg
cmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVXaXRoQXRv
bWljTmFtZTxIVE1MVGFnTm9kZUxpc3Q+KCp0aGlzLCBMaXZlTm9kZUxpc3Q6OkhUTUxUYWdOb2Rl
TGlzdFR5cGUsIGxvY2FsTmFtZSk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJl
Tm9kZUxpc3RzKCkuYWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxUYWdOb2RlTGlzdD4oKnRoaXMsIExp
dmVOb2RlTGlzdDo6VGFnTm9kZUxpc3RUeXBlLCBsb2NhbE5hbWUpOwogfQogCiBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBDb250YWluZXJOb2RlOjpnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkK
QEAgLTExNDQsMTggKzExNDQsMTggQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gQ29udGFpbmVyTm9k
ZTo6Z2V0RQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBDb250YWluZXJOb2RlOjpnZXRFbGVtZW50
c0J5TmFtZShjb25zdCBTdHJpbmcmIGVsZW1lbnROYW1lKQogewotICAgIHJldHVybiBlbnN1cmVS
YXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hlV2l0aEF0b21pY05hbWU8TmFtZU5v
ZGVMaXN0PigqdGhpcywgTmFtZU5vZGVMaXN0VHlwZSwgZWxlbWVudE5hbWUpOworICAgIHJldHVy
biBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hlV2l0aEF0b21pY05h
bWU8TmFtZU5vZGVMaXN0PigqdGhpcywgTGl2ZU5vZGVMaXN0OjpOYW1lTm9kZUxpc3RUeXBlLCBl
bGVtZW50TmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IENvbnRhaW5lck5vZGU6Omdl
dEVsZW1lbnRzQnlDbGFzc05hbWUoY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKQogewotICAgIHJl
dHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hlV2l0aE5hbWU8
Q2xhc3NOb2RlTGlzdD4oKnRoaXMsIENsYXNzTm9kZUxpc3RUeXBlLCBjbGFzc05hbWVzKTsKKyAg
ICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZVdpdGhO
YW1lPENsYXNzTm9kZUxpc3Q+KCp0aGlzLCBMaXZlTm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3RUeXBl
LCBjbGFzc05hbWVzKTsKIH0KIAogUGFzc1JlZlB0cjxSYWRpb05vZGVMaXN0PiBDb250YWluZXJO
b2RlOjpyYWRpb05vZGVMaXN0KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBBU1NF
UlQoaGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm1UYWcpIHx8IGhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpmaWVsZHNldFRhZykpOwotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVM
aXN0cygpLmFkZENhY2hlV2l0aEF0b21pY05hbWU8UmFkaW9Ob2RlTGlzdD4oKnRoaXMsIFJhZGlv
Tm9kZUxpc3RUeXBlLCBuYW1lKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVO
b2RlTGlzdHMoKS5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPFJhZGlvTm9kZUxpc3Q+KCp0aGlzLCBM
aXZlTm9kZUxpc3Q6OlJhZGlvTm9kZUxpc3RUeXBlLCBuYW1lKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNTg2NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OTksOCArNDk5LDggQEAgRG9jdW1lbnQ6OkRvY3VtZW50KEZyYW1lKiBmcmFtZSwgY29uc3QgVQog
ICAgIGluaXRTZWN1cml0eUNvbnRleHQoKTsKICAgICBpbml0RE5TUHJlZmV0Y2goKTsKIAotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKG1fbm9kZUxpc3RDb3Vu
dHMpOyBpKyspCi0gICAgICAgIG1fbm9kZUxpc3RDb3VudHNbaV0gPSAwOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKG1fbm9kZUxpc3RBbmRDb2xsZWN0aW9u
Q291bnRzKTsgaSsrKQorICAgICAgICBtX25vZGVMaXN0QW5kQ29sbGVjdGlvbkNvdW50c1tpXSA9
IDA7CiAKICAgICBJbnNwZWN0b3JDb3VudGVyczo6aW5jcmVtZW50Q291bnRlcihJbnNwZWN0b3JD
b3VudGVyczo6RG9jdW1lbnRDb3VudGVyKTsKIH0KQEAgLTU4Nyw5ICs1ODcsMTAgQEAgRG9jdW1l
bnQ6On5Eb2N1bWVudCgpCiAgICAgICAgIGNsZWFyUmFyZURhdGEoKTsKIAogICAgIEFTU0VSVCgh
bV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5zaXplKCkpOworICAgIEFTU0VSVCghbV9jb2xs
ZWN0aW9uc0ludmFsaWRhdGVkQXREb2N1bWVudC5zaXplKCkpOwogCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgobV9ub2RlTGlzdENvdW50cyk7IGkrKykKLSAg
ICAgICAgQVNTRVJUKCFtX25vZGVMaXN0Q291bnRzW2ldKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChtX25vZGVMaXN0QW5kQ29sbGVjdGlvbkNvdW50cyk7
IGkrKykKKyAgICAgICAgQVNTRVJUKCFtX25vZGVMaXN0QW5kQ29sbGVjdGlvbkNvdW50c1tpXSk7
CiAKICAgICBjbGVhckRvY3VtZW50U2NvcGUoKTsKIApAQCAtMzM1NywyNiArMzM1OCw0MCBAQCB2
b2lkIERvY3VtZW50OjpzZXRDU1NUYXJnZXQoRWxlbWVudCogbikKICAgICAgICAgbi0+ZGlkQWZm
ZWN0U2VsZWN0b3IoQWZmZWN0ZWRTZWxlY3RvclRhcmdldCk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6
OnJlZ2lzdGVyTm9kZUxpc3QoTGl2ZU5vZGVMaXN0QmFzZSogbGlzdCkKK3ZvaWQgRG9jdW1lbnQ6
OnJlZ2lzdGVyTm9kZUxpc3QoTGl2ZU5vZGVMaXN0KiBsaXN0KQogewotICAgIGlmIChsaXN0LT5o
YXNJZE5hbWVDYWNoZSgpKQotICAgICAgICBtX25vZGVMaXN0Q291bnRzW0ludmFsaWRhdGVPbklk
TmFtZUF0dHJDaGFuZ2VdKys7Ci0gICAgbV9ub2RlTGlzdENvdW50c1tsaXN0LT5pbnZhbGlkYXRp
b25UeXBlKCldKys7CisgICAgbV9ub2RlTGlzdEFuZENvbGxlY3Rpb25Db3VudHNbbGlzdC0+aW52
YWxpZGF0aW9uVHlwZSgpXSsrOwogICAgIGlmIChsaXN0LT5pc1Jvb3RlZEF0RG9jdW1lbnQoKSkK
ICAgICAgICAgbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5hZGQobGlzdCk7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OnVucmVnaXN0ZXJOb2RlTGlzdChMaXZlTm9kZUxpc3RCYXNlKiBsaXN0KQor
dm9pZCBEb2N1bWVudDo6dW5yZWdpc3Rlck5vZGVMaXN0KExpdmVOb2RlTGlzdCogbGlzdCkKIHsK
LSAgICBpZiAobGlzdC0+aGFzSWROYW1lQ2FjaGUoKSkKLSAgICAgICAgbV9ub2RlTGlzdENvdW50
c1tJbnZhbGlkYXRlT25JZE5hbWVBdHRyQ2hhbmdlXS0tOwotICAgIG1fbm9kZUxpc3RDb3VudHNb
bGlzdC0+aW52YWxpZGF0aW9uVHlwZSgpXS0tOworICAgIG1fbm9kZUxpc3RBbmRDb2xsZWN0aW9u
Q291bnRzW2xpc3QtPmludmFsaWRhdGlvblR5cGUoKV0tLTsKICAgICBpZiAobGlzdC0+aXNSb290
ZWRBdERvY3VtZW50KCkpIHsKICAgICAgICAgQVNTRVJUKG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9j
dW1lbnQuY29udGFpbnMobGlzdCkpOwogICAgICAgICBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3Vt
ZW50LnJlbW92ZShsaXN0KTsKICAgICB9CiB9CiAKK3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyQ29s
bGVjdGlvbihIVE1MQ29sbGVjdGlvbiogbGlzdCkKK3sKKyAgICBtX25vZGVMaXN0QW5kQ29sbGVj
dGlvbkNvdW50c1tJbnZhbGlkYXRlT25JZE5hbWVBdHRyQ2hhbmdlXSsrOworICAgIG1fbm9kZUxp
c3RBbmRDb2xsZWN0aW9uQ291bnRzW2xpc3QtPmludmFsaWRhdGlvblR5cGUoKV0rKzsKKyAgICBp
ZiAobGlzdC0+aXNSb290ZWRBdERvY3VtZW50KCkpCisgICAgICAgIG1fY29sbGVjdGlvbnNJbnZh
bGlkYXRlZEF0RG9jdW1lbnQuYWRkKGxpc3QpOworfQorCit2b2lkIERvY3VtZW50Ojp1bnJlZ2lz
dGVyQ29sbGVjdGlvbihIVE1MQ29sbGVjdGlvbiogbGlzdCkKK3sKKyAgICBtX25vZGVMaXN0QW5k
Q29sbGVjdGlvbkNvdW50c1tJbnZhbGlkYXRlT25JZE5hbWVBdHRyQ2hhbmdlXS0tOworICAgIG1f
bm9kZUxpc3RBbmRDb2xsZWN0aW9uQ291bnRzW2xpc3QtPmludmFsaWRhdGlvblR5cGUoKV0tLTsK
KyAgICBpZiAobGlzdC0+aXNSb290ZWRBdERvY3VtZW50KCkpIHsKKyAgICAgICAgQVNTRVJUKG1f
Y29sbGVjdGlvbnNJbnZhbGlkYXRlZEF0RG9jdW1lbnQuY29udGFpbnMobGlzdCkpOworICAgICAg
ICBtX2NvbGxlY3Rpb25zSW52YWxpZGF0ZWRBdERvY3VtZW50LnJlbW92ZShsaXN0KTsKKyAgICB9
Cit9CisKIHZvaWQgRG9jdW1lbnQ6OmF0dGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqIG5p
KQogewogICAgIG1fbm9kZUl0ZXJhdG9ycy5hZGQobmkpOwpAQCAtNDI2NCw3ICs0Mjc5LDcgQEAg
Ym9vbCBEb2N1bWVudDo6aGFzU1ZHUm9vdE5vZGUoKSBjb25zdAogCiBQYXNzUmVmUHRyPEhUTUxD
b2xsZWN0aW9uPiBEb2N1bWVudDo6ZW5zdXJlQ2FjaGVkQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlw
ZSB0eXBlKQogewotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygp
LmFkZENhY2hlV2l0aEF0b21pY05hbWU8SFRNTENvbGxlY3Rpb24+KCp0aGlzLCB0eXBlKTsKKyAg
ICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZWRDb2xs
ZWN0aW9uPEhUTUxDb2xsZWN0aW9uPigqdGhpcywgdHlwZSk7CiB9CiAKIFBhc3NSZWZQdHI8SFRN
TENvbGxlY3Rpb24+IERvY3VtZW50OjppbWFnZXMoKQpAQCAtNDMxMCwxNyArNDMyNSwxNyBAQCBQ
YXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6YW5jCiAKIFBhc3NSZWZQdHI8SFRN
TENvbGxlY3Rpb24+IERvY3VtZW50OjphbGwoKQogewotICAgIHJldHVybiBlbnN1cmVSYXJlRGF0
YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hlV2l0aEF0b21pY05hbWU8SFRNTEFsbENvbGxl
Y3Rpb24+KCp0aGlzLCBEb2NBbGwpOworICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3Vy
ZU5vZGVMaXN0cygpLmFkZENhY2hlZENvbGxlY3Rpb248SFRNTEFsbENvbGxlY3Rpb24+KCp0aGlz
LCBEb2NBbGwpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6d2lu
ZG93TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIGVu
c3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxX
aW5kb3dOYW1lQ29sbGVjdGlvbj4oKnRoaXMsIFdpbmRvd05hbWVkSXRlbXMsIG5hbWUpOworICAg
IHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hlZENvbGxl
Y3Rpb248V2luZG93TmFtZUNvbGxlY3Rpb24+KCp0aGlzLCBXaW5kb3dOYW1lZEl0ZW1zLCBuYW1l
KTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmRvY3VtZW50TmFt
ZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIGVuc3VyZVJh
cmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxEb2N1bWVu
dE5hbWVDb2xsZWN0aW9uPigqdGhpcywgRG9jdW1lbnROYW1lZEl0ZW1zLCBuYW1lKTsKKyAgICBy
ZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRDYWNoZWRDb2xsZWN0
aW9uPERvY3VtZW50TmFtZUNvbGxlY3Rpb24+KCp0aGlzLCBEb2N1bWVudE5hbWVkSXRlbXMsIG5h
bWUpOwogfQogCiB2b2lkIERvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmcoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgJKHJldmlzaW9uIDE1ODY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDcgQEAgY2xhc3MgSGl0VGVzdFJl
c3VsdDsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgTGF5b3V0UG9pbnQ7CiBjbGFzcyBMYXlvdXRS
ZWN0OwotY2xhc3MgTGl2ZU5vZGVMaXN0QmFzZTsKK2NsYXNzIExpdmVOb2RlTGlzdDsKIGNsYXNz
IEpTTm9kZTsKIGNsYXNzIExvY2FsZTsKIGNsYXNzIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcjsKQEAg
LTY5NywxMCArNjk3LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHN0eWxlUmVjYWxjVGltZXJGaXJl
ZChUaW1lcjxEb2N1bWVudD4qKTsKICAgICB2b2lkIG9wdGltaXplZFN0eWxlU2hlZXRVcGRhdGVU
aW1lckZpcmVkKFRpbWVyPERvY3VtZW50PiopOwogCi0gICAgdm9pZCByZWdpc3Rlck5vZGVMaXN0
KExpdmVOb2RlTGlzdEJhc2UqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJOb2RlTGlzdChMaXZlTm9k
ZUxpc3RCYXNlKik7Ci0gICAgYm9vbCBzaG91bGRJbnZhbGlkYXRlTm9kZUxpc3RDYWNoZXMoY29u
c3QgUXVhbGlmaWVkTmFtZSogYXR0ck5hbWUgPSAwKSBjb25zdDsKLSAgICB2b2lkIGludmFsaWRh
dGVOb2RlTGlzdENhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSk7CisgICAgdm9p
ZCByZWdpc3Rlck5vZGVMaXN0KExpdmVOb2RlTGlzdCopOworICAgIHZvaWQgdW5yZWdpc3Rlck5v
ZGVMaXN0KExpdmVOb2RlTGlzdCopOworICAgIHZvaWQgcmVnaXN0ZXJDb2xsZWN0aW9uKEhUTUxD
b2xsZWN0aW9uKik7CisgICAgdm9pZCB1bnJlZ2lzdGVyQ29sbGVjdGlvbihIVE1MQ29sbGVjdGlv
biopOworICAgIGJvb2wgc2hvdWxkSW52YWxpZGF0ZU5vZGVMaXN0QW5kQ29sbGVjdGlvbkNhY2hl
cyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSA9IDApIGNvbnN0OworICAgIHZvaWQgaW52
YWxpZGF0ZU5vZGVMaXN0QW5kQ29sbGVjdGlvbkNhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBh
dHRyTmFtZSk7CiAKICAgICB2b2lkIGF0dGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqKTsK
ICAgICB2b2lkIGRldGFjaE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3IqKTsKQEAgLTE0MTUsOCAr
MTQxNywxMCBAQCBwcml2YXRlOgogCiAgICAgSW5oZXJpdGVkQm9vbCBtX2Rlc2lnbk1vZGU7CiAK
LSAgICBIYXNoU2V0PExpdmVOb2RlTGlzdEJhc2UqPiBtX2xpc3RzSW52YWxpZGF0ZWRBdERvY3Vt
ZW50OwotICAgIHVuc2lnbmVkIG1fbm9kZUxpc3RDb3VudHNbbnVtTm9kZUxpc3RJbnZhbGlkYXRp
b25UeXBlc107CisgICAgSGFzaFNldDxMaXZlTm9kZUxpc3QqPiBtX2xpc3RzSW52YWxpZGF0ZWRB
dERvY3VtZW50OworICAgIEhhc2hTZXQ8SFRNTENvbGxlY3Rpb24qPiBtX2NvbGxlY3Rpb25zSW52
YWxpZGF0ZWRBdERvY3VtZW50OworCisgICAgdW5zaWduZWQgbV9ub2RlTGlzdEFuZENvbGxlY3Rp
b25Db3VudHNbbnVtTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlc107CiAKICAgICBSZWZQdHI8WFBh
dGhFdmFsdWF0b3I+IG1feHBhdGhFdmFsdWF0b3I7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE1ODY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwOSw3ICsxMTA5LDcgQEAgdm9pZCBFbGVtZW50OjphdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YQogICAgICAgICBzaG91bGRJbnZhbGlkYXRlU3R5bGUgfD0gdGVz
dFNob3VsZEludmFsaWRhdGVTdHlsZSAmJiBpc0luU2hhZG93VHJlZSgpOwogCiAKLSAgICBpbnZh
bGlkYXRlTm9kZUxpc3RDYWNoZXNJbkFuY2VzdG9ycygmbmFtZSwgdGhpcyk7CisgICAgaW52YWxp
ZGF0ZU5vZGVMaXN0QW5kQ29sbGVjdGlvbkNhY2hlc0luQW5jZXN0b3JzKCZuYW1lLCB0aGlzKTsK
IAogICAgIC8vIElmIHRoZXJlIGlzIGN1cnJlbnRseSBubyBTdHlsZVJlc29sdmVyLCB3ZSBjYW4n
dCBiZSBzdXJlIHRoYXQgdGhpcyBhdHRyaWJ1dGUgY2hhbmdlIHdvbid0IGFmZmVjdCBzdHlsZS4K
ICAgICBzaG91bGRJbnZhbGlkYXRlU3R5bGUgfD0gIXN0eWxlUmVzb2x2ZXI7CkBAIC0yOTQ5LDE5
ICsyOTQ5LDE5IEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEVsZW1lbnQ6OmVuc3UKIAog
ICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKICAgICBpZiAodHlwZSA9PSBU
YWJsZVJvd3MpIHsKLSAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxp
c3RzKCkuYWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4odG9I
VE1MVGFibGVFbGVtZW50KCp0aGlzKSwgdHlwZSk7CisgICAgICAgIHJldHVybiBlbnN1cmVSYXJl
RGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hlZENvbGxlY3Rpb248SFRNTFRhYmxlUm93
c0NvbGxlY3Rpb24+KHRvSFRNTFRhYmxlRWxlbWVudCgqdGhpcyksIHR5cGUpOwogICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBTZWxlY3RPcHRpb25zKSB7Ci0gICAgICAgIHJldHVybiBlbnN1cmVSYXJl
RGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hlV2l0aEF0b21pY05hbWU8SFRNTE9wdGlv
bnNDb2xsZWN0aW9uPih0b0hUTUxTZWxlY3RFbGVtZW50KCp0aGlzKSwgdHlwZSk7CisgICAgICAg
IHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hlZENvbGxl
Y3Rpb248SFRNTE9wdGlvbnNDb2xsZWN0aW9uPih0b0hUTUxTZWxlY3RFbGVtZW50KCp0aGlzKSwg
dHlwZSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IEZvcm1Db250cm9scykgewogICAgICAgICBB
U1NFUlQoaGFzVGFnTmFtZShmb3JtVGFnKSB8fCBoYXNUYWdOYW1lKGZpZWxkc2V0VGFnKSk7Ci0g
ICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygpLmFkZENhY2hl
V2l0aEF0b21pY05hbWU8SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24+KCp0aGlzLCB0eXBlKTsK
KyAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2Fj
aGVkQ29sbGVjdGlvbjxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbj4oKnRoaXMsIHR5cGUpOwog
ICAgIH0KLSAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5hZGRD
YWNoZVdpdGhBdG9taWNOYW1lPEhUTUxDb2xsZWN0aW9uPigqdGhpcywgdHlwZSk7CisgICAgcmV0
dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9kZUxpc3RzKCkuYWRkQ2FjaGVkQ29sbGVjdGlv
bjxIVE1MQ29sbGVjdGlvbj4oKnRoaXMsIHR5cGUpOwogfQogCiBIVE1MQ29sbGVjdGlvbiogRWxl
bWVudDo6Y2FjaGVkSFRNTENvbGxlY3Rpb24oQ29sbGVjdGlvblR5cGUgdHlwZSkKIHsKLSAgICBy
ZXR1cm4gaGFzUmFyZURhdGEoKSAmJiByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSA/IHJhcmVEYXRh
KCktPm5vZGVMaXN0cygpLT5jYWNoZVdpdGhBdG9taWNOYW1lPEhUTUxDb2xsZWN0aW9uPih0eXBl
KSA6IDA7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+bm9kZUxpc3Rz
KCkgPyByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKS0+Y2FjaGVkQ29sbGVjdGlvbjxIVE1MQ29sbGVj
dGlvbj4odHlwZSkgOiAwOwogfQogCiBJbnRTaXplIEVsZW1lbnQ6OnNhdmVkTGF5ZXJTY3JvbGxP
ZmZzZXQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAJKHJldmlz
aW9uIDE1ODY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywxMiArMjMsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJMaXZlTm9kZUxpc3QuaCIKIAorI2luY2x1ZGUgIkNsYXNzTm9kZUxpc3QuaCIKICNpbmNs
dWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudFRyYXZlcnNhbC5oIgogI2luY2x1ZGUg
IkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiVGFnTm9kZUxpc3QuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1Db250YWluZXJOb2RlJiBMaXZlTm9kZUxpc3RCYXNlOjpyb290Tm9kZSgp
IGNvbnN0CitDb250YWluZXJOb2RlJiBMaXZlTm9kZUxpc3Q6OnJvb3ROb2RlKCkgY29uc3QKIHsK
ICAgICBpZiAoaXNSb290ZWRBdERvY3VtZW50KCkgJiYgb3duZXJOb2RlKCkuaW5Eb2N1bWVudCgp
KQogICAgICAgICByZXR1cm4gb3duZXJOb2RlKCkuZG9jdW1lbnQoKTsKQEAgLTM2LDI4ICszOSwx
OTAgQEAgQ29udGFpbmVyTm9kZSYgTGl2ZU5vZGVMaXN0QmFzZTo6cm9vdE5vZAogICAgIHJldHVy
biBvd25lck5vZGUoKTsKIH0KIAotdm9pZCBMaXZlTm9kZUxpc3RCYXNlOjppbnZhbGlkYXRlQ2Fj
aGUoKSBjb25zdAordGVtcGxhdGUgPGNsYXNzIE5vZGVMaXN0VHlwZT4KK2lubGluZSBib29sIGlz
TWF0Y2hpbmdFbGVtZW50KGNvbnN0IE5vZGVMaXN0VHlwZSosIEVsZW1lbnQqKTsKKwordGVtcGxh
dGUgPD4gaW5saW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQoY29uc3QgTGl2ZU5vZGVMaXN0KiBu
b2RlTGlzdCwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gbm9kZUxpc3QtPm5vZGVN
YXRjaGVzKGVsZW1lbnQpOworfQorCit0ZW1wbGF0ZSA8PiBpbmxpbmUgYm9vbCBpc01hdGNoaW5n
RWxlbWVudChjb25zdCBIVE1MVGFnTm9kZUxpc3QqIG5vZGVMaXN0LCBFbGVtZW50KiBlbGVtZW50
KQoreworICAgIHJldHVybiBub2RlTGlzdC0+bm9kZU1hdGNoZXNJbmxpbmVkKGVsZW1lbnQpOwor
fQorCit0ZW1wbGF0ZSA8PiBpbmxpbmUgYm9vbCBpc01hdGNoaW5nRWxlbWVudChjb25zdCBDbGFz
c05vZGVMaXN0KiBub2RlTGlzdCwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gbm9k
ZUxpc3QtPm5vZGVNYXRjaGVzSW5saW5lZChlbGVtZW50KTsKK30KKworQUxXQVlTX0lOTElORSBF
bGVtZW50KiBMaXZlTm9kZUxpc3Q6Oml0ZXJhdGVGb3JQcmV2aW91c0VsZW1lbnQoRWxlbWVudCog
Y3VycmVudCkgY29uc3QKK3sKKyAgICBDb250YWluZXJOb2RlJiByb290Tm9kZSA9IHRoaXMtPnJv
b3ROb2RlKCk7CisgICAgZm9yICg7IGN1cnJlbnQ7IGN1cnJlbnQgPSBFbGVtZW50VHJhdmVyc2Fs
OjpwcmV2aW91cyhjdXJyZW50LCAmcm9vdE5vZGUpKSB7CisgICAgICAgIGlmIChpc01hdGNoaW5n
RWxlbWVudChzdGF0aWNfY2FzdDxjb25zdCBMaXZlTm9kZUxpc3QqPih0aGlzKSwgY3VycmVudCkp
CisgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
K0FMV0FZU19JTkxJTkUgRWxlbWVudCogTGl2ZU5vZGVMaXN0OjppdGVtQmVmb3JlKEVsZW1lbnQq
IHByZXZpb3VzKSBjb25zdAoreworICAgIEVsZW1lbnQqIGN1cnJlbnQ7CisgICAgaWYgKExJS0VM
WSghIXByZXZpb3VzKSkgLy8gV2l0aG91dCB0aGlzIExJS0VMWSwgbGVuZ3RoKCkgYW5kIGl0ZW0o
KSBjYW4gYmUgMTAlIHNsb3dlci4KKyAgICAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6
OnByZXZpb3VzKHByZXZpb3VzLCAmcm9vdE5vZGUoKSk7CisgICAgZWxzZQorICAgICAgICBjdXJy
ZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bGFzdFdpdGhpbigmcm9vdE5vZGUoKSk7CisKKyAgICBy
ZXR1cm4gaXRlcmF0ZUZvclByZXZpb3VzRWxlbWVudChjdXJyZW50KTsKK30KKwordGVtcGxhdGUg
PGNsYXNzIE5vZGVMaXN0VHlwZT4KK2lubGluZSBFbGVtZW50KiBmaXJzdE1hdGNoaW5nRWxlbWVu
dChjb25zdCBOb2RlTGlzdFR5cGUqIG5vZGVMaXN0LCBDb250YWluZXJOb2RlKiByb290KQorewor
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihyb290
KTsKKyAgICB3aGlsZSAoZWxlbWVudCAmJiAhaXNNYXRjaGluZ0VsZW1lbnQobm9kZUxpc3QsIGVs
ZW1lbnQpKQorICAgICAgICBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50
LCByb290KTsKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKwordGVtcGxhdGUgPGNsYXNzIE5vZGVM
aXN0VHlwZT4KK2lubGluZSBFbGVtZW50KiBuZXh0TWF0Y2hpbmdFbGVtZW50KGNvbnN0IE5vZGVM
aXN0VHlwZSogbm9kZUxpc3QsIEVsZW1lbnQqIGN1cnJlbnQsIENvbnRhaW5lck5vZGUqIHJvb3Qp
Cit7CisgICAgZG8geworICAgICAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChj
dXJyZW50LCByb290KTsKKyAgICB9IHdoaWxlIChjdXJyZW50ICYmICFpc01hdGNoaW5nRWxlbWVu
dChub2RlTGlzdCwgY3VycmVudCkpOworICAgIHJldHVybiBjdXJyZW50OworfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgTm9kZUxpc3RUeXBlPgoraW5saW5lIEVsZW1lbnQqIHRyYXZlcnNlTWF0Y2hpbmdF
bGVtZW50c0ZvcndhcmRUb09mZnNldChjb25zdCBOb2RlTGlzdFR5cGUqIG5vZGVMaXN0LCB1bnNp
Z25lZCBvZmZzZXQsIEVsZW1lbnQqIGN1cnJlbnRFbGVtZW50LCB1bnNpZ25lZCYgY3VycmVudE9m
ZnNldCwgQ29udGFpbmVyTm9kZSogcm9vdCkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KTsKKyAgICB3aGlsZSAoKGN1cnJlbnRF
bGVtZW50ID0gbmV4dE1hdGNoaW5nRWxlbWVudChub2RlTGlzdCwgY3VycmVudEVsZW1lbnQsIHJv
b3QpKSkgeworICAgICAgICBpZiAoKytjdXJyZW50T2Zmc2V0ID09IG9mZnNldCkKKyAgICAgICAg
ICAgIHJldHVybiBjdXJyZW50RWxlbWVudDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2lu
bGluZSBFbGVtZW50KiBMaXZlTm9kZUxpc3Q6OnRyYXZlcnNlTGl2ZU5vZGVMaXN0Rmlyc3RFbGVt
ZW50KENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUoKSA9PSBIVE1M
VGFnTm9kZUxpc3RUeXBlKQorICAgICAgICByZXR1cm4gZmlyc3RNYXRjaGluZ0VsZW1lbnQoc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTFRhZ05vZGVMaXN0Kj4odGhpcyksIHJvb3QpOworICAgIGlmICh0
eXBlKCkgPT0gQ2xhc3NOb2RlTGlzdFR5cGUpCisgICAgICAgIHJldHVybiBmaXJzdE1hdGNoaW5n
RWxlbWVudChzdGF0aWNfY2FzdDxjb25zdCBDbGFzc05vZGVMaXN0Kj4odGhpcyksIHJvb3QpOwor
ICAgIHJldHVybiBmaXJzdE1hdGNoaW5nRWxlbWVudChzdGF0aWNfY2FzdDxjb25zdCBMaXZlTm9k
ZUxpc3QqPih0aGlzKSwgcm9vdCk7Cit9CisKK2lubGluZSBFbGVtZW50KiBMaXZlTm9kZUxpc3Q6
OnRyYXZlcnNlTGl2ZU5vZGVMaXN0Rm9yd2FyZFRvT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCwgRWxl
bWVudCogY3VycmVudEVsZW1lbnQsIHVuc2lnbmVkJiBjdXJyZW50T2Zmc2V0LCBDb250YWluZXJO
b2RlKiByb290KSBjb25zdAoreworICAgIGlmICh0eXBlKCkgPT0gSFRNTFRhZ05vZGVMaXN0VHlw
ZSkKKyAgICAgICAgcmV0dXJuIHRyYXZlcnNlTWF0Y2hpbmdFbGVtZW50c0ZvcndhcmRUb09mZnNl
dChzdGF0aWNfY2FzdDxjb25zdCBIVE1MVGFnTm9kZUxpc3QqPih0aGlzKSwgb2Zmc2V0LCBjdXJy
ZW50RWxlbWVudCwgY3VycmVudE9mZnNldCwgcm9vdCk7CisgICAgaWYgKHR5cGUoKSA9PSBDbGFz
c05vZGVMaXN0VHlwZSkKKyAgICAgICAgcmV0dXJuIHRyYXZlcnNlTWF0Y2hpbmdFbGVtZW50c0Zv
cndhcmRUb09mZnNldChzdGF0aWNfY2FzdDxjb25zdCBDbGFzc05vZGVMaXN0Kj4odGhpcyksIG9m
ZnNldCwgY3VycmVudEVsZW1lbnQsIGN1cnJlbnRPZmZzZXQsIHJvb3QpOworICAgIHJldHVybiB0
cmF2ZXJzZU1hdGNoaW5nRWxlbWVudHNGb3J3YXJkVG9PZmZzZXQoc3RhdGljX2Nhc3Q8Y29uc3Qg
TGl2ZU5vZGVMaXN0Kj4odGhpcyksIG9mZnNldCwgY3VycmVudEVsZW1lbnQsIGN1cnJlbnRPZmZz
ZXQsIHJvb3QpOworfQorCitib29sIEFMV0FZU19JTkxJTkUgTGl2ZU5vZGVMaXN0Ojppc0xhc3RJ
dGVtQ2xvc2VyVGhhbkxhc3RPckNhY2hlZEl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdAorewor
ICAgIEFTU0VSVChpc0xlbmd0aENhY2hlVmFsaWQoKSk7CisgICAgdW5zaWduZWQgZGlzdGFuY2VG
cm9tTGFzdEl0ZW0gPSBjYWNoZWRMZW5ndGgoKSAtIG9mZnNldDsKKyAgICBpZiAoIWlzRWxlbWVu
dENhY2hlVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGRpc3RhbmNlRnJvbUxhc3RJdGVtIDwgb2Zm
c2V0OworCisgICAgcmV0dXJuIGNhY2hlZEVsZW1lbnRPZmZzZXQoKSA8IG9mZnNldCAmJiBkaXN0
YW5jZUZyb21MYXN0SXRlbSA8IG9mZnNldCAtIGNhY2hlZEVsZW1lbnRPZmZzZXQoKTsKK30KKyAg
ICAKK2Jvb2wgQUxXQVlTX0lOTElORSBMaXZlTm9kZUxpc3Q6OmlzRmlyc3RJdGVtQ2xvc2VyVGhh
bkNhY2hlZEl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdAoreworICAgIEFTU0VSVChpc0VsZW1l
bnRDYWNoZVZhbGlkKCkpOworICAgIGlmIChjYWNoZWRFbGVtZW50T2Zmc2V0KCkgPCBvZmZzZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIGRpc3RhbmNlRnJvbUNhY2hl
ZEl0ZW0gPSBjYWNoZWRFbGVtZW50T2Zmc2V0KCkgLSBvZmZzZXQ7CisgICAgcmV0dXJuIG9mZnNl
dCA8IGRpc3RhbmNlRnJvbUNhY2hlZEl0ZW07Cit9CisKK3Vuc2lnbmVkIExpdmVOb2RlTGlzdDo6
bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoaXNMZW5ndGhDYWNoZVZhbGlkKCkpCisgICAgICAg
IHJldHVybiBjYWNoZWRMZW5ndGgoKTsKKworICAgIGl0ZW0oVUlOVF9NQVgpOworICAgIEFTU0VS
VChpc0xlbmd0aENhY2hlVmFsaWQoKSk7CisgICAgCisgICAgcmV0dXJuIGNhY2hlZExlbmd0aCgp
OworfQorCisvLyBGSVhNRTogSXQgaXMgc2lsbHkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGlu
IEhUTUxDb2xsZWN0aW9uLmNwcC4KK05vZGUqIExpdmVOb2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBv
ZmZzZXQpIGNvbnN0Cit7CisgICAgaWYgKGlzRWxlbWVudENhY2hlVmFsaWQoKSAmJiBjYWNoZWRF
bGVtZW50T2Zmc2V0KCkgPT0gb2Zmc2V0KQorICAgICAgICByZXR1cm4gY2FjaGVkRWxlbWVudCgp
OworCisgICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCgpICYmIGNhY2hlZExlbmd0aCgpIDw9IG9m
ZnNldCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBDb250YWluZXJOb2RlJiByb290ID0gcm9v
dE5vZGUoKTsKKworICAgIGlmIChpc0xlbmd0aENhY2hlVmFsaWQoKSAmJiBpc0xhc3RJdGVtQ2xv
c2VyVGhhbkxhc3RPckNhY2hlZEl0ZW0ob2Zmc2V0KSkgeworICAgICAgICBFbGVtZW50KiBsYXN0
SXRlbSA9IGl0ZW1CZWZvcmUoMCk7CisgICAgICAgIEFTU0VSVChsYXN0SXRlbSk7CisgICAgICAg
IHNldENhY2hlZEVsZW1lbnQoKmxhc3RJdGVtLCBjYWNoZWRMZW5ndGgoKSAtIDEpOworICAgIH0g
ZWxzZSBpZiAoIWlzRWxlbWVudENhY2hlVmFsaWQoKSB8fCBpc0ZpcnN0SXRlbUNsb3NlclRoYW5D
YWNoZWRJdGVtKG9mZnNldCkpIHsKKyAgICAgICAgRWxlbWVudCogZmlyc3RJdGVtID0gdHJhdmVy
c2VMaXZlTm9kZUxpc3RGaXJzdEVsZW1lbnQoJnJvb3QpOworICAgICAgICBpZiAoIWZpcnN0SXRl
bSkgeworICAgICAgICAgICAgc2V0TGVuZ3RoQ2FjaGUoMCk7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgICAgICBzZXRDYWNoZWRFbGVtZW50KCpmaXJzdEl0ZW0sIDApOwor
ICAgICAgICBBU1NFUlQoIWNhY2hlZEVsZW1lbnRPZmZzZXQoKSk7CisgICAgfQorCisgICAgaWYg
KGNhY2hlZEVsZW1lbnRPZmZzZXQoKSA9PSBvZmZzZXQpCisgICAgICAgIHJldHVybiBjYWNoZWRF
bGVtZW50KCk7CisKKyAgICByZXR1cm4gZWxlbWVudEJlZm9yZU9yQWZ0ZXJDYWNoZWRFbGVtZW50
KG9mZnNldCwgJnJvb3QpOworfQorCitpbmxpbmUgRWxlbWVudCogTGl2ZU5vZGVMaXN0OjplbGVt
ZW50QmVmb3JlT3JBZnRlckNhY2hlZEVsZW1lbnQodW5zaWduZWQgb2Zmc2V0LCBDb250YWluZXJO
b2RlKiByb290KSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQgPSBjYWNoZWRF
bGVtZW50T2Zmc2V0KCk7CisgICAgRWxlbWVudCogY3VycmVudEl0ZW0gPSBjYWNoZWRFbGVtZW50
KCk7CisgICAgQVNTRVJUKGN1cnJlbnRJdGVtKTsKKyAgICBBU1NFUlQoY3VycmVudE9mZnNldCAh
PSBvZmZzZXQpOworCisgICAgaWYgKG9mZnNldCA8IGNhY2hlZEVsZW1lbnRPZmZzZXQoKSkgewor
ICAgICAgICB3aGlsZSAoKGN1cnJlbnRJdGVtID0gaXRlbUJlZm9yZShjdXJyZW50SXRlbSkpKSB7
CisgICAgICAgICAgICBBU1NFUlQoY3VycmVudE9mZnNldCk7CisgICAgICAgICAgICBjdXJyZW50
T2Zmc2V0LS07CisgICAgICAgICAgICBpZiAoY3VycmVudE9mZnNldCA9PSBvZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICBzZXRDYWNoZWRFbGVtZW50KCpjdXJyZW50SXRlbSwgY3VycmVudE9mZnNl
dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBjdXJyZW50SXRlbSA9IHRyYXZlcnNlTGl2ZU5vZGVMaXN0Rm9yd2Fy
ZFRvT2Zmc2V0KG9mZnNldCwgY3VycmVudEl0ZW0sIGN1cnJlbnRPZmZzZXQsIHJvb3QpOworCisg
ICAgaWYgKCFjdXJyZW50SXRlbSkgeworICAgICAgICAvLyBEaWQgbm90IGZpbmQgdGhlIGl0ZW0u
IE9uIHBsdXMgc2lkZSwgd2Ugbm93IGtub3cgdGhlIGxlbmd0aC4KKyAgICAgICAgc2V0TGVuZ3Ro
Q2FjaGUoY3VycmVudE9mZnNldCArIDEpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
c2V0Q2FjaGVkRWxlbWVudCgqY3VycmVudEl0ZW0sIGN1cnJlbnRPZmZzZXQpOworICAgIHJldHVy
biBjdXJyZW50SXRlbTsKK30KKwordm9pZCBMaXZlTm9kZUxpc3Q6OmludmFsaWRhdGVDYWNoZSgp
IGNvbnN0CiB7CiAgICAgbV9jYWNoZWRFbGVtZW50ID0gbnVsbHB0cjsKICAgICBtX2lzTGVuZ3Ro
Q2FjaGVWYWxpZCA9IGZhbHNlOwogICAgIG1faXNFbGVtZW50Q2FjaGVWYWxpZCA9IGZhbHNlOwot
ICAgIG1faXNOYW1lQ2FjaGVWYWxpZCA9IGZhbHNlOwotICAgIG1faXNJdGVtUmVmRWxlbWVudHND
YWNoZVZhbGlkID0gZmFsc2U7Ci0gICAgaWYgKGlzTm9kZUxpc3QodHlwZSgpKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY29uc3QgSFRNTENvbGxlY3Rpb24qIGNhY2hlQmFzZSA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxDb2xsZWN0aW9uKj4odGhpcyk7Ci0gICAgY2FjaGVCYXNlLT5tX2lkQ2Fj
aGUuY2xlYXIoKTsKLSAgICBjYWNoZUJhc2UtPm1fbmFtZUNhY2hlLmNsZWFyKCk7Ci0gICAgY2Fj
aGVCYXNlLT5tX2NhY2hlZEVsZW1lbnRzQXJyYXlPZmZzZXQgPSAwOwotfQotCi12b2lkIExpdmVO
b2RlTGlzdEJhc2U6OmludmFsaWRhdGVJZE5hbWVDYWNoZU1hcHMoKSBjb25zdAotewotICAgIEFT
U0VSVChoYXNJZE5hbWVDYWNoZSgpKTsKLSAgICBjb25zdCBIVE1MQ29sbGVjdGlvbiogY2FjaGVC
YXNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTENvbGxlY3Rpb24qPih0aGlzKTsKLSAgICBjYWNo
ZUJhc2UtPm1faWRDYWNoZS5jbGVhcigpOwotICAgIGNhY2hlQmFzZS0+bV9uYW1lQ2FjaGUuY2xl
YXIoKTsKIH0KIAogTm9kZSogTGl2ZU5vZGVMaXN0OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3Ry
aW5nJiBlbGVtZW50SWQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5oCShy
ZXZpc2lvbiAxNTg2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDQwICszNyw0MSBAQCBjbGFzcyBFbGVtZW50OwogCiBlbnVtIE5v
ZGVMaXN0Um9vdFR5cGUgewogICAgIE5vZGVMaXN0SXNSb290ZWRBdE5vZGUsCi0gICAgTm9kZUxp
c3RJc1Jvb3RlZEF0RG9jdW1lbnQsCi0gICAgTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1lbnRJZk93
bmVySGFzSXRlbXJlZkF0dHIsCisgICAgTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1lbnQKIH07CiAK
LWNsYXNzIExpdmVOb2RlTGlzdEJhc2UgOiBwdWJsaWMgTm9kZUxpc3Qgeworc3RhdGljIGJvb2wg
c2hvdWxkSW52YWxpZGF0ZVR5cGVPbkF0dHJpYnV0ZUNoYW5nZShOb2RlTGlzdEludmFsaWRhdGlv
blR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKworY2xhc3MgTGl2ZU5vZGVMaXN0IDogcHVi
bGljIE5vZGVMaXN0IHsKIHB1YmxpYzoKLSAgICBlbnVtIEl0ZW1BZnRlck92ZXJyaWRlVHlwZSB7
Ci0gICAgICAgIE92ZXJyaWRlc0l0ZW1BZnRlciwKLSAgICAgICAgRG9lc05vdE92ZXJyaWRlSXRl
bUFmdGVyLAorICAgIGVudW0gVHlwZSB7CisgICAgICAgIENsYXNzTm9kZUxpc3RUeXBlLAorICAg
ICAgICBOYW1lTm9kZUxpc3RUeXBlLAorICAgICAgICBUYWdOb2RlTGlzdFR5cGUsCisgICAgICAg
IEhUTUxUYWdOb2RlTGlzdFR5cGUsCisgICAgICAgIFJhZGlvTm9kZUxpc3RUeXBlLAorICAgICAg
ICBMYWJlbHNOb2RlTGlzdFR5cGUsCiAgICAgfTsKIAotICAgIExpdmVOb2RlTGlzdEJhc2UoQ29u
dGFpbmVyTm9kZSYgb3duZXJOb2RlLCBOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlLCBOb2RlTGlz
dEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSwKLSAgICAgICAgYm9vbCBzaG91bGRP
bmx5SW5jbHVkZURpcmVjdENoaWxkcmVuLCBDb2xsZWN0aW9uVHlwZSBjb2xsZWN0aW9uVHlwZSwg
SXRlbUFmdGVyT3ZlcnJpZGVUeXBlIGl0ZW1BZnRlck92ZXJyaWRlVHlwZSkKKyAgICBMaXZlTm9k
ZUxpc3QoQ29udGFpbmVyTm9kZSYgb3duZXJOb2RlLCBUeXBlIHR5cGUsIE5vZGVMaXN0SW52YWxp
ZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlLCBOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlID0g
Tm9kZUxpc3RJc1Jvb3RlZEF0Tm9kZSkKICAgICAgICAgOiBtX293bmVyTm9kZShvd25lck5vZGUp
CiAgICAgICAgICwgbV9jYWNoZWRFbGVtZW50KG51bGxwdHIpCiAgICAgICAgICwgbV9pc0xlbmd0
aENhY2hlVmFsaWQoZmFsc2UpCiAgICAgICAgICwgbV9pc0VsZW1lbnRDYWNoZVZhbGlkKGZhbHNl
KQogICAgICAgICAsIG1fcm9vdFR5cGUocm9vdFR5cGUpCiAgICAgICAgICwgbV9pbnZhbGlkYXRp
b25UeXBlKGludmFsaWRhdGlvblR5cGUpCi0gICAgICAgICwgbV9zaG91bGRPbmx5SW5jbHVkZURp
cmVjdENoaWxkcmVuKHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4pCi0gICAgICAgICwg
bV9pc05hbWVDYWNoZVZhbGlkKGZhbHNlKQotICAgICAgICAsIG1fY29sbGVjdGlvblR5cGUoY29s
bGVjdGlvblR5cGUpCi0gICAgICAgICwgbV9vdmVycmlkZXNJdGVtQWZ0ZXIoaXRlbUFmdGVyT3Zl
cnJpZGVUeXBlID09IE92ZXJyaWRlc0l0ZW1BZnRlcikKLSAgICAgICAgLCBtX2lzSXRlbVJlZkVs
ZW1lbnRzQ2FjaGVWYWxpZChmYWxzZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX3Jvb3RUeXBlID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyb290VHlw
ZSkpOwogICAgICAgICBBU1NFUlQobV9pbnZhbGlkYXRpb25UeXBlID09IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpbnZhbGlkYXRpb25UeXBlKSk7Ci0gICAgICAgIEFTU0VSVChtX2NvbGxlY3Rpb25U
eXBlID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2xsZWN0aW9uVHlwZSkpOwotICAgICAgICBB
U1NFUlQoIW1fb3ZlcnJpZGVzSXRlbUFmdGVyIHx8ICFpc05vZGVMaXN0KGNvbGxlY3Rpb25UeXBl
KSk7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUp
KTsKIAogICAgICAgICBkb2N1bWVudCgpLnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7CiAgICAgfQor
ICAgIHZpcnR1YWwgTm9kZSogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3QgPSAw
OwogCi0gICAgdmlydHVhbCB+TGl2ZU5vZGVMaXN0QmFzZSgpCisgICAgdmlydHVhbCB+TGl2ZU5v
ZGVMaXN0KCkKICAgICB7CiAgICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3Rlck5vZGVMaXN0KHRo
aXMpOwogICAgIH0KQEAgLTc5LDI3ICs4MCwyMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5z
aWduZWQgb2Zmc2V0KSBjb25zdCBPVkVSUklERTsKIAotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBo
YXNJZE5hbWVDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICFpc05vZGVMaXN0KHR5cGUoKSk7IH0KLSAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNSb290ZWRBdERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9yb290VHlwZSA9PSBOb2RlTGlzdElzUm9vdGVkQXREb2N1bWVudCB8fCBtX3Jvb3RUeXBlID09
IE5vZGVMaXN0SXNSb290ZWRBdERvY3VtZW50SWZPd25lckhhc0l0ZW1yZWZBdHRyOyB9CisgICAg
QUxXQVlTX0lOTElORSBib29sIGlzUm9vdGVkQXREb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
cm9vdFR5cGUgPT0gTm9kZUxpc3RJc1Jvb3RlZEF0RG9jdW1lbnQ7IH0KICAgICBBTFdBWVNfSU5M
SU5FIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlPihtX2ludmFsaWRhdGlv
blR5cGUpOyB9Ci0gICAgQUxXQVlTX0lOTElORSBDb2xsZWN0aW9uVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sbGVjdGlvblR5cGU+KG1fY29sbGVjdGlvblR5cGUpOyB9
CisgICAgQUxXQVlTX0lOTElORSBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxUeXBlPihtX3R5cGUpOyB9CiAgICAgQ29udGFpbmVyTm9kZSYgb3duZXJOb2RlKCkgY29uc3Qg
eyByZXR1cm4gY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4obV9vd25lck5vZGUuZ2V0KCkpOyB9
CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGludmFsaWRhdGVDYWNoZShjb25zdCBRdWFsaWZpZWRO
YW1lKiBhdHRyTmFtZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghYXR0ck5hbWUgfHwgc2hv
dWxkSW52YWxpZGF0ZVR5cGVPbkF0dHJpYnV0ZUNoYW5nZShpbnZhbGlkYXRpb25UeXBlKCksICph
dHRyTmFtZSkpCiAgICAgICAgICAgICBpbnZhbGlkYXRlQ2FjaGUoKTsKLSAgICAgICAgZWxzZSBp
ZiAoaGFzSWROYW1lQ2FjaGUoKSAmJiAoKmF0dHJOYW1lID09IEhUTUxOYW1lczo6aWRBdHRyIHx8
ICphdHRyTmFtZSA9PSBIVE1MTmFtZXM6Om5hbWVBdHRyKSkKLSAgICAgICAgICAgIGludmFsaWRh
dGVJZE5hbWVDYWNoZU1hcHMoKTsKICAgICB9CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGUoKSBj
b25zdDsKLSAgICB2b2lkIGludmFsaWRhdGVJZE5hbWVDYWNoZU1hcHMoKSBjb25zdDsKLQotICAg
IHN0YXRpYyBib29sIHNob3VsZEludmFsaWRhdGVUeXBlT25BdHRyaWJ1dGVDaGFuZ2UoTm9kZUxp
c3RJbnZhbGlkYXRpb25UeXBlLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKIHByb3RlY3RlZDoK
ICAgICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVyTm9kZS0+ZG9j
dW1lbnQoKTsgfQogICAgIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlKCkgY29uc3Q7Ci0gICAgYm9v
bCBvdmVycmlkZXNJdGVtQWZ0ZXIoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlc0l0ZW1BZnRl
cjsgfQogCiAgICAgQUxXQVlTX0lOTElORSBib29sIGlzRWxlbWVudENhY2hlVmFsaWQoKSBjb25z
dCB7IHJldHVybiBtX2lzRWxlbWVudENhY2hlVmFsaWQ7IH0KICAgICBBTFdBWVNfSU5MSU5FIEVs
ZW1lbnQqIGNhY2hlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEVsZW1lbnQ7IH0K
QEAgLTExOCwxOSArMTEyLDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9jYWNoZWRFbGVtZW50
T2Zmc2V0ID0gb2Zmc2V0OwogICAgICAgICBtX2lzRWxlbWVudENhY2hlVmFsaWQgPSB0cnVlOwog
ICAgIH0KLSAgICB2b2lkIHNldENhY2hlZEVsZW1lbnQoRWxlbWVudCYsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgZWxlbWVudHNBcnJheU9mZnNldCkgY29uc3Q7Ci0KLSAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgaXNJdGVtUmVmRWxlbWVudHNDYWNoZVZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
c0l0ZW1SZWZFbGVtZW50c0NhY2hlVmFsaWQ7IH0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
SXRlbVJlZkVsZW1lbnRzQ2FjaGVWYWxpZCgpIGNvbnN0IHsgbV9pc0l0ZW1SZWZFbGVtZW50c0Nh
Y2hlVmFsaWQgPSB0cnVlOyB9CiAKICAgICBBTFdBWVNfSU5MSU5FIE5vZGVMaXN0Um9vdFR5cGUg
cm9vdFR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb2RlTGlzdFJvb3RUeXBlPiht
X3Jvb3RUeXBlKTsgfQogCi0gICAgYm9vbCBoYXNOYW1lQ2FjaGUoKSBjb25zdCB7IHJldHVybiBt
X2lzTmFtZUNhY2hlVmFsaWQ7IH0KLSAgICB2b2lkIHNldEhhc05hbWVDYWNoZSgpIGNvbnN0IHsg
bV9pc05hbWVDYWNoZVZhbGlkID0gdHJ1ZTsgfQotCi0gICAgYm9vbCBzaG91bGRPbmx5SW5jbHVk
ZURpcmVjdENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRPbmx5SW5jbHVkZURpcmVj
dENoaWxkcmVuOyB9Ci0KIHByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzTGl2ZU5vZGVMaXN0
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgRWxlbWVudCogZWxlbWVu
dEJlZm9yZU9yQWZ0ZXJDYWNoZWRFbGVtZW50KHVuc2lnbmVkIG9mZnNldCwgQ29udGFpbmVyTm9k
ZSogcm9vdCkgY29uc3Q7CiAgICAgRWxlbWVudCogdHJhdmVyc2VMaXZlTm9kZUxpc3RGaXJzdEVs
ZW1lbnQoQ29udGFpbmVyTm9kZSogcm9vdCkgY29uc3Q7CiAgICAgRWxlbWVudCogdHJhdmVyc2VM
aXZlTm9kZUxpc3RGb3J3YXJkVG9PZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBFbGVtZW50KiBjdXJy
ZW50RWxlbWVudCwgdW5zaWduZWQmIGN1cnJlbnRPZmZzZXQsIENvbnRhaW5lck5vZGUqIHJvb3Qp
IGNvbnN0OwpAQCAtMTQ3LDE2ICsxMzQsMTAgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIHVuc2ln
bmVkIG1faXNFbGVtZW50Q2FjaGVWYWxpZCA6IDE7CiAgICAgY29uc3QgdW5zaWduZWQgbV9yb290
VHlwZSA6IDI7CiAgICAgY29uc3QgdW5zaWduZWQgbV9pbnZhbGlkYXRpb25UeXBlIDogNDsKLSAg
ICBjb25zdCB1bnNpZ25lZCBtX3Nob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4gOiAxOwot
Ci0gICAgLy8gRnJvbSBIVE1MQ29sbGVjdGlvbgotICAgIG11dGFibGUgdW5zaWduZWQgbV9pc05h
bWVDYWNoZVZhbGlkIDogMTsKLSAgICBjb25zdCB1bnNpZ25lZCBtX2NvbGxlY3Rpb25UeXBlIDog
NTsKLSAgICBjb25zdCB1bnNpZ25lZCBtX292ZXJyaWRlc0l0ZW1BZnRlciA6IDE7Ci0gICAgbXV0
YWJsZSB1bnNpZ25lZCBtX2lzSXRlbVJlZkVsZW1lbnRzQ2FjaGVWYWxpZCA6IDE7CisgICAgY29u
c3QgdW5zaWduZWQgbV90eXBlIDogNTsKIH07CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBMaXZlTm9k
ZUxpc3RCYXNlOjpzaG91bGRJbnZhbGlkYXRlVHlwZU9uQXR0cmlidXRlQ2hhbmdlKE5vZGVMaXN0
SW52YWxpZGF0aW9uVHlwZSB0eXBlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK0FM
V0FZU19JTkxJTkUgYm9vbCBzaG91bGRJbnZhbGlkYXRlVHlwZU9uQXR0cmlidXRlQ2hhbmdlKE5v
ZGVMaXN0SW52YWxpZGF0aW9uVHlwZSB0eXBlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEludmFsaWRhdGVPbkNsYXNzQXR0
ckNoYW5nZToKQEAgLTE4MCwxOSArMTYxLDYgQEAgQUxXQVlTX0lOTElORSBib29sIExpdmVOb2Rl
TGlzdEJhc2U6OnNobwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotY2xhc3MgTGl2ZU5vZGVMaXN0
IDogcHVibGljIExpdmVOb2RlTGlzdEJhc2UgewotcHVibGljOgotICAgIExpdmVOb2RlTGlzdChD
b250YWluZXJOb2RlJiBvd25lck5vZGUsIENvbGxlY3Rpb25UeXBlIGNvbGxlY3Rpb25UeXBlLCBO
b2RlTGlzdEludmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSwgTm9kZUxpc3RSb290VHlw
ZSByb290VHlwZSA9IE5vZGVMaXN0SXNSb290ZWRBdE5vZGUpCi0gICAgICAgIDogTGl2ZU5vZGVM
aXN0QmFzZShvd25lck5vZGUsIHJvb3RUeXBlLCBpbnZhbGlkYXRpb25UeXBlLCAvKnNob3VsZE9u
bHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4qLyBmYWxzZSwgY29sbGVjdGlvblR5cGUsIERvZXNOb3RP
dmVycmlkZUl0ZW1BZnRlcikKLSAgICB7IH0KLQotICAgIHZpcnR1YWwgTm9kZSogbmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBu
b2RlTWF0Y2hlcyhFbGVtZW50KikgY29uc3QgPSAwOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwg
Ym9vbCBpc0xpdmVOb2RlTGlzdCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KLX07
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIExpdmVOb2RlTGlzdF9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAkocmV2aXNpb24gMTU4NjU5KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDcgQEAgTmFtZU5vZGVMaXN0OjpOYW1lTm9kZUxpc3QoQ29udGFpbmVyTm9kZQogCiBO
YW1lTm9kZUxpc3Q6On5OYW1lTm9kZUxpc3QoKQogewotICAgIG93bmVyTm9kZSgpLm5vZGVMaXN0
cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9taWNOYW1lKHRoaXMsIE5hbWVOb2RlTGlzdFR5cGUsIG1f
bmFtZSk7CisgICAgb3duZXJOb2RlKCkubm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21p
Y05hbWUodGhpcywgbV9uYW1lKTsKIH0gCiAKIGJvb2wgTmFtZU5vZGVMaXN0Ojpub2RlTWF0Y2hl
cyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1l
Tm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0
LmgJKHJldmlzaW9uIDE1ODY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAv
LyBOb2RlTGlzdCB3aGljaCBsaXN0cyBhbGwgTm9kZXMgaW4gYSBFbGVtZW50IHdpdGggYSBnaXZl
biAibmFtZSIgYXR0cmlidXRlCiBjbGFzcyBOYW1lTm9kZUxpc3QgOiBwdWJsaWMgTGl2ZU5vZGVM
aXN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxOYW1lTm9kZUxpc3Q+IGNyZWF0
ZShDb250YWluZXJOb2RlJiByb290Tm9kZSwgQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5hbWVOb2RlTGlzdD4gY3Jl
YXRlKENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBUeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBOYW1l
Tm9kZUxpc3RUeXBlKTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOYW1lTm9kZUxpc3Qo
cm9vdE5vZGUsIG5hbWUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDE1ODY1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQAogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZsb3dUaHJlYWRD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTENvbGxl
Y3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCkBAIC02ODksNyArNjkwLDcg
QEAgdW5zaWduZWQgTm9kZTo6bm9kZUluZGV4KCkgY29uc3QKIHRlbXBsYXRlPHVuc2lnbmVkIHR5
cGU+CiBib29sIHNob3VsZEludmFsaWRhdGVOb2RlTGlzdENhY2hlc0ZvckF0dHIoY29uc3QgdW5z
aWduZWQgbm9kZUxpc3RDb3VudHNbXSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7
Ci0gICAgaWYgKG5vZGVMaXN0Q291bnRzW3R5cGVdICYmIExpdmVOb2RlTGlzdEJhc2U6OnNob3Vs
ZEludmFsaWRhdGVUeXBlT25BdHRyaWJ1dGVDaGFuZ2Uoc3RhdGljX2Nhc3Q8Tm9kZUxpc3RJbnZh
bGlkYXRpb25UeXBlPih0eXBlKSwgYXR0ck5hbWUpKQorICAgIGlmIChub2RlTGlzdENvdW50c1t0
eXBlXSAmJiBzaG91bGRJbnZhbGlkYXRlVHlwZU9uQXR0cmlidXRlQ2hhbmdlKHN0YXRpY19jYXN0
PE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZT4odHlwZSksIGF0dHJOYW1lKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgcmV0dXJuIHNob3VsZEludmFsaWRhdGVOb2RlTGlzdENhY2hlc0ZvckF0
dHI8dHlwZSArIDE+KG5vZGVMaXN0Q291bnRzLCBhdHRyTmFtZSk7CiB9CkBAIC03MDAsMjcgKzcw
MSwyOCBAQCBib29sIHNob3VsZEludmFsaWRhdGVOb2RlTGlzdENhY2hlc0ZvckF0CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIERvY3VtZW50OjpzaG91bGRJbnZhbGlkYXRlTm9kZUxpc3RD
YWNoZXMoY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0ck5hbWUpIGNvbnN0Citib29sIERvY3VtZW50
OjpzaG91bGRJbnZhbGlkYXRlTm9kZUxpc3RBbmRDb2xsZWN0aW9uQ2FjaGVzKGNvbnN0IFF1YWxp
ZmllZE5hbWUqIGF0dHJOYW1lKSBjb25zdAogewogICAgIGlmIChhdHRyTmFtZSkKLSAgICAgICAg
cmV0dXJuIHNob3VsZEludmFsaWRhdGVOb2RlTGlzdENhY2hlc0ZvckF0dHI8RG9Ob3RJbnZhbGlk
YXRlT25BdHRyaWJ1dGVDaGFuZ2VzICsgMT4obV9ub2RlTGlzdENvdW50cywgKmF0dHJOYW1lKTsK
KyAgICAgICAgcmV0dXJuIHNob3VsZEludmFsaWRhdGVOb2RlTGlzdENhY2hlc0ZvckF0dHI8RG9O
b3RJbnZhbGlkYXRlT25BdHRyaWJ1dGVDaGFuZ2VzICsgMT4obV9ub2RlTGlzdEFuZENvbGxlY3Rp
b25Db3VudHMsICphdHRyTmFtZSk7CiAKICAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IG51
bU5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZXM7IHR5cGUrKykgewotICAgICAgICBpZiAobV9ub2Rl
TGlzdENvdW50c1t0eXBlXSkKKyAgICAgICAgaWYgKG1fbm9kZUxpc3RBbmRDb2xsZWN0aW9uQ291
bnRzW3R5cGVdKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIERvY3VtZW50OjppbnZhbGlkYXRlTm9kZUxpc3RDYWNoZXMoY29u
c3QgUXVhbGlmaWVkTmFtZSogYXR0ck5hbWUpCit2b2lkIERvY3VtZW50OjppbnZhbGlkYXRlTm9k
ZUxpc3RBbmRDb2xsZWN0aW9uQ2FjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lKQog
ewotICAgIEhhc2hTZXQ8TGl2ZU5vZGVMaXN0QmFzZSo+OjppdGVyYXRvciBlbmQgPSBtX2xpc3Rz
SW52YWxpZGF0ZWRBdERvY3VtZW50LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxMaXZlTm9kZUxp
c3RCYXNlKj46Oml0ZXJhdG9yIGl0ID0gbV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgZm9yIChIYXNoU2V0PExpdmVOb2RlTGlzdCo+Ojpp
dGVyYXRvciBpdCA9IG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQuYmVnaW4oKSwgZW5kID0g
bV9saXN0c0ludmFsaWRhdGVkQXREb2N1bWVudC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICAoKml0KS0+aW52YWxpZGF0ZUNhY2hlKGF0dHJOYW1lKTsKKyAgICBmb3IgKEhhc2hTZXQ8
SFRNTENvbGxlY3Rpb24qPjo6aXRlcmF0b3IgaXQgPSBtX2NvbGxlY3Rpb25zSW52YWxpZGF0ZWRB
dERvY3VtZW50LmJlZ2luKCksIGVuZCA9IG1fY29sbGVjdGlvbnNJbnZhbGlkYXRlZEF0RG9jdW1l
bnQuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPmludmFsaWRhdGVDYWNo
ZShhdHRyTmFtZSk7CiB9CiAKLXZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0Q2FjaGVzSW5B
bmNlc3RvcnMoY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0ck5hbWUsIEVsZW1lbnQqIGF0dHJpYnV0
ZU93bmVyRWxlbWVudCkKK3ZvaWQgTm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0QW5kQ29sbGVjdGlv
bkNhY2hlc0luQW5jZXN0b3JzKGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJOYW1lLCBFbGVtZW50
KiBhdHRyaWJ1dGVPd25lckVsZW1lbnQpCiB7CiAgICAgaWYgKGhhc1JhcmVEYXRhKCkgJiYgKCFh
dHRyTmFtZSB8fCBpc0F0dHJpYnV0ZU5vZGUoKSkpIHsKICAgICAgICAgaWYgKE5vZGVMaXN0c05v
ZGVEYXRhKiBsaXN0cyA9IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpKQpAQCAtNzMxLDEwICs3MzMs
MTAgQEAgdm9pZCBOb2RlOjppbnZhbGlkYXRlTm9kZUxpc3RDYWNoZXNJbkFuYwogICAgIGlmIChh
dHRyTmFtZSAmJiAhYXR0cmlidXRlT3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoIWRvY3VtZW50KCkuc2hvdWxkSW52YWxpZGF0ZU5vZGVMaXN0Q2FjaGVzKGF0dHJOYW1l
KSkKKyAgICBpZiAoIWRvY3VtZW50KCkuc2hvdWxkSW52YWxpZGF0ZU5vZGVMaXN0QW5kQ29sbGVj
dGlvbkNhY2hlcyhhdHRyTmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRvY3VtZW50KCku
aW52YWxpZGF0ZU5vZGVMaXN0Q2FjaGVzKGF0dHJOYW1lKTsKKyAgICBkb2N1bWVudCgpLmludmFs
aWRhdGVOb2RlTGlzdEFuZENvbGxlY3Rpb25DYWNoZXMoYXR0ck5hbWUpOwogCiAgICAgZm9yIChO
b2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAg
ICAgICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCkBAIC0xNjcyLDE5ICsxNjc0LDE5IEBAIHZv
aWQgTm9kZTo6c2hvd1RyZWVGb3JUaGlzQWNyb3NzRnJhbWUoKSAKIAogdm9pZCBOb2RlTGlzdHNO
b2RlRGF0YTo6aW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSkK
IHsKLSAgICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDo6Y29uc3RfaXRlcmF0b3IgYXRvbWlj
TmFtZUNhY2hlRW5kID0gbV9hdG9taWNOYW1lQ2FjaGVzLmVuZCgpOwotICAgIGZvciAoTm9kZUxp
c3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1lQ2Fj
aGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsgKytpdCkKKyAgICBmb3IgKGF1
dG8gaXQgPSBtX2F0b21pY05hbWVDYWNoZXMuYmVnaW4oKSwgZW5kID0gbV9hdG9taWNOYW1lQ2Fj
aGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0
ZUNhY2hlKGF0dHJOYW1lKTsKKworICAgIGZvciAoYXV0byBpdCA9IG1fbmFtZUNhY2hlcy5iZWdp
bigpLCBlbmQgPSBtX25hbWVDYWNoZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAg
aXQtPnZhbHVlLT5pbnZhbGlkYXRlQ2FjaGUoYXR0ck5hbWUpOwogCi0gICAgTm9kZUxpc3ROYW1l
Q2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5hbWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQo
KTsKLSAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
bmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7ICsraXQpCisgICAgZm9yIChh
dXRvIGl0ID0gbV9jYWNoZWRDb2xsZWN0aW9ucy5iZWdpbigpLCBlbmQgPSBtX2NhY2hlZENvbGxl
Y3Rpb25zLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGl0LT52YWx1ZS0+aW52YWxp
ZGF0ZUNhY2hlKGF0dHJOYW1lKTsKIAogICAgIGlmIChhdHRyTmFtZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgVGFnTm9kZUxpc3RDYWNoZU5TOjppdGVyYXRvciB0YWdDYWNoZUVuZCA9IG1fdGFn
Tm9kZUxpc3RDYWNoZU5TLmVuZCgpOwotICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZU5TOjppdGVy
YXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRhZ0NhY2hlRW5k
OyArK2l0KQorICAgIGZvciAoYXV0byBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCks
IGVuZCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAg
ICAgIGl0LT52YWx1ZS0+aW52YWxpZGF0ZUNhY2hlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAko
cmV2aXNpb24gMTU4NjU5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dUcmVlRm9yVGhp
c0Fjcm9zc0ZyYW1lKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZvaWQgaW52YWxpZGF0ZU5vZGVM
aXN0Q2FjaGVzSW5BbmNlc3RvcnMoY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0ck5hbWUgPSAwLCBF
bGVtZW50KiBhdHRyaWJ1dGVPd25lckVsZW1lbnQgPSAwKTsKKyAgICB2b2lkIGludmFsaWRhdGVO
b2RlTGlzdEFuZENvbGxlY3Rpb25DYWNoZXNJbkFuY2VzdG9ycyhjb25zdCBRdWFsaWZpZWROYW1l
KiBhdHRyTmFtZSA9IDAsIEVsZW1lbnQqIGF0dHJpYnV0ZU93bmVyRWxlbWVudCA9IDApOwogICAg
IE5vZGVMaXN0c05vZGVEYXRhKiBub2RlTGlzdHMoKTsKICAgICB2b2lkIGNsZWFyTm9kZUxpc3Rz
KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgJKHJldmlzaW9uIDE1ODY1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsNyArMjMsOSBAQAogI2RlZmluZSBOb2RlUmFyZURhdGFfaAogCiAjaW5jbHVkZSAiQ2hpbGRO
b2RlTGlzdC5oIgorI2luY2x1ZGUgIkNsYXNzTm9kZUxpc3QuaCIKICNpbmNsdWRlICJET01TZXR0
YWJsZVRva2VuTGlzdC5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTGl2ZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTXV0YXRp
b25PYnNlcnZlci5oIgpAQCAtMTAxLDc5ICsxMDMsOTEgQEAgcHVibGljOgogICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IERlZmF1bHRIYXNo
PFN0cmluZ1R5cGU+OjpIYXNoOjpzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZDsKICAgICB9
OwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBBdG9taWNT
dHJpbmc+LCBMaXZlTm9kZUxpc3RCYXNlKiwgTm9kZUxpc3RDYWNoZU1hcEVudHJ5SGFzaDxBdG9t
aWNTdHJpbmc+PiBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDsKLSAgICB0eXBlZGVmIEhhc2hN
YXA8c3RkOjpwYWlyPHVuc2lnbmVkIGNoYXIsIFN0cmluZz4sIExpdmVOb2RlTGlzdEJhc2UqLCBO
b2RlTGlzdENhY2hlTWFwRW50cnlIYXNoPFN0cmluZz4+IE5vZGVMaXN0TmFtZUNhY2hlTWFwOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbWljU3RyaW5n
PiwgTGl2ZU5vZGVMaXN0KiwgTm9kZUxpc3RDYWNoZU1hcEVudHJ5SGFzaDxBdG9taWNTdHJpbmc+
PiBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8c3RkOjpw
YWlyPHVuc2lnbmVkIGNoYXIsIFN0cmluZz4sIExpdmVOb2RlTGlzdCosIE5vZGVMaXN0Q2FjaGVN
YXBFbnRyeUhhc2g8U3RyaW5nPj4gTm9kZUxpc3ROYW1lQ2FjaGVNYXA7CisgICAgdHlwZWRlZiBI
YXNoTWFwPHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBBdG9taWNTdHJpbmc+LCBIVE1MQ29sbGVj
dGlvbiosIE5vZGVMaXN0Q2FjaGVNYXBFbnRyeUhhc2g8QXRvbWljU3RyaW5nPj4gQ29sbGVjdGlv
bkNhY2hlTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxRdWFsaWZpZWROYW1lLCBUYWdOb2RlTGlz
dCo+IFRhZ05vZGVMaXN0Q2FjaGVOUzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIENvbnRhaW5lclR5cGU+Ci0gICAgUGFzc1JlZlB0cjxUPiBhZGRDYWNoZVdpdGhBdG9taWNO
YW1lKENvbnRhaW5lclR5cGUmIGNvbnRhaW5lciwgQ29sbGVjdGlvblR5cGUgY29sbGVjdGlvblR5
cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKKyAgICBQYXNzUmVmUHRyPFQ+IGFkZENhY2hl
V2l0aEF0b21pY05hbWUoQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBMaXZlTm9kZUxpc3Q6OlR5
cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogICAgIHsKLSAgICAgICAgTm9kZUxp
c3RBdG9taWNOYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2F0b21pY05hbWVDYWNo
ZXMuYWRkKG5hbWVkTm9kZUxpc3RLZXkoY29sbGVjdGlvblR5cGUsIG5hbWUpLCBudWxscHRyKTsK
KyAgICAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBt
X2F0b21pY05hbWVDYWNoZXMuYWRkKG5hbWVkTm9kZUxpc3RLZXkodHlwZSwgbmFtZSksIG51bGxw
dHIpOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQogICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKTsKIAotICAgICAgICBSZWZQ
dHI8VD4gbGlzdCA9IFQ6OmNyZWF0ZShjb250YWluZXIsIGNvbGxlY3Rpb25UeXBlLCBuYW1lKTsK
KyAgICAgICAgUmVmUHRyPFQ+IGxpc3QgPSBUOjpjcmVhdGUoY29udGFpbmVyLCB0eXBlLCBuYW1l
KTsKICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgICAg
IHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5j
dGlvbiBzaG91bGQgYmUgcmVuYW1lZCBzaW5jZSBpdCBkb2Vzbid0IGhhdmUgYW4gYXRvbWljIG5h
bWUuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KLSAg
ICBQYXNzUmVmUHRyPFQ+IGFkZENhY2hlV2l0aEF0b21pY05hbWUoQ29udGFpbmVyVHlwZSYgY29u
dGFpbmVyLCBDb2xsZWN0aW9uVHlwZSBjb2xsZWN0aW9uVHlwZSkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIFBhc3NSZWZQdHI8VD4gYWRkQ2FjaGVXaXRoTmFtZShDb250YWluZXJOb2Rl
JiBub2RlLCBMaXZlTm9kZUxpc3Q6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQogICAg
IHsKLSAgICAgICAgTm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSBtX2F0b21pY05hbWVDYWNoZXMuYWRkKG5hbWVkTm9kZUxpc3RLZXkoY29sbGVjdGlvblR5cGUs
IHN0YXJBdG9tKSwgbnVsbHB0cik7CisgICAgICAgIE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpBZGRS
ZXN1bHQgcmVzdWx0ID0gbV9uYW1lQ2FjaGVzLmFkZChuYW1lZE5vZGVMaXN0S2V5KHR5cGUsIG5h
bWUpLCBudWxscHRyKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4ocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSk7CiAKLSAg
ICAgICAgUmVmUHRyPFQ+IGxpc3QgPSBUOjpjcmVhdGUoY29udGFpbmVyLCBjb2xsZWN0aW9uVHlw
ZSk7CisgICAgICAgIFJlZlB0cjxUPiBsaXN0ID0gVDo6Y3JlYXRlKG5vZGUsIG5hbWUpOwogICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsKICAgICAgICAgcmV0dXJu
IGxpc3QucmVsZWFzZSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
VCogY2FjaGVXaXRoQXRvbWljTmFtZShDb2xsZWN0aW9uVHlwZSBjb2xsZWN0aW9uVHlwZSkKKyAg
ICBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PiBhZGRDYWNoZVdpdGhRdWFsaWZpZWROYW1lKENvbnRh
aW5lck5vZGUmIG5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUKj4obV9hdG9taWNOYW1lQ2FjaGVzLmdldChuYW1lZE5vZGVMaXN0S2V5KGNvbGxlY3Rpb25U
eXBlLCBzdGFyQXRvbSkpKTsKKyAgICAgICAgUXVhbGlmaWVkTmFtZSBuYW1lKG51bGxBdG9tLCBs
b2NhbE5hbWUsIG5hbWVzcGFjZVVSSSk7CisgICAgICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmFkZChuYW1lLCBudWxscHRyKTsK
KyAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgIFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9
IFRhZ05vZGVMaXN0OjpjcmVhdGUobm9kZSwgbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOworICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5nZXQoKTsKKyAgICAgICAgcmV0dXJu
IGxpc3QucmVsZWFzZSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
UGFzc1JlZlB0cjxUPiBhZGRDYWNoZVdpdGhOYW1lKENvbnRhaW5lck5vZGUmIG5vZGUsIENvbGxl
Y3Rpb25UeXBlIGNvbGxlY3Rpb25UeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KKyAgICBQYXNzUmVmUHRyPFQ+
IGFkZENhY2hlZENvbGxlY3Rpb24oQ29udGFpbmVyVHlwZSYgY29udGFpbmVyLCBDb2xsZWN0aW9u
VHlwZSBjb2xsZWN0aW9uVHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogICAgIHsKLSAg
ICAgICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX25hbWVDYWNo
ZXMuYWRkKG5hbWVkTm9kZUxpc3RLZXkoY29sbGVjdGlvblR5cGUsIG5hbWUpLCBudWxscHRyKTsK
KyAgICAgICAgQ29sbGVjdGlvbkNhY2hlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jYWNoZWRD
b2xsZWN0aW9ucy5hZGQobmFtZWRDb2xsZWN0aW9uS2V5KGNvbGxlY3Rpb25UeXBlLCBuYW1lKSwg
bnVsbHB0cik7CiAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwogCi0gICAgICAg
IFJlZlB0cjxUPiBsaXN0ID0gVDo6Y3JlYXRlKG5vZGUsIG5hbWUpOworICAgICAgICBSZWZQdHI8
VD4gbGlzdCA9IFQ6OmNyZWF0ZShjb250YWluZXIsIGNvbGxlY3Rpb25UeXBlLCBuYW1lKTsKICAg
ICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgICAgIHJldHVy
biBsaXN0LnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0PiBh
ZGRDYWNoZVdpdGhRdWFsaWZpZWROYW1lKENvbnRhaW5lck5vZGUmIG5vZGUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb250YWluZXJUeXBlPgorICAgIFBhc3NS
ZWZQdHI8VD4gYWRkQ2FjaGVkQ29sbGVjdGlvbihDb250YWluZXJUeXBlJiBjb250YWluZXIsIENv
bGxlY3Rpb25UeXBlIGNvbGxlY3Rpb25UeXBlKQogICAgIHsKLSAgICAgICAgUXVhbGlmaWVkTmFt
ZSBuYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgIFRhZ05v
ZGVMaXN0Q2FjaGVOUzo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmFk
ZChuYW1lLCBudWxscHRyKTsKKyAgICAgICAgQ29sbGVjdGlvbkNhY2hlTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gbV9jYWNoZWRDb2xsZWN0aW9ucy5hZGQobmFtZWRDb2xsZWN0aW9uS2V5KGNvbGxl
Y3Rpb25UeXBlLCBzdGFyQXRvbSksIG51bGxwdHIpOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpOwog
Ci0gICAgICAgIFJlZlB0cjxUYWdOb2RlTGlzdD4gbGlzdCA9IFRhZ05vZGVMaXN0OjpjcmVhdGUo
bm9kZSwgbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOworICAgICAgICBSZWZQdHI8VD4gbGlzdCA9
IFQ6OmNyZWF0ZShjb250YWluZXIsIGNvbGxlY3Rpb25UeXBlKTsKICAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IGxpc3QuZ2V0KCk7CiAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2Uo
KTsKICAgICB9CiAKLSAgICB2b2lkIHJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUoTGl2ZU5vZGVM
aXN0QmFzZSogbGlzdCwgQ29sbGVjdGlvblR5cGUgY29sbGVjdGlvblR5cGUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSA9IHN0YXJBdG9tKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
VCogY2FjaGVkQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSBjb2xsZWN0aW9uVHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9jYWNoZWRDb2xsZWN0aW9ucy5nZXQo
bmFtZWRDb2xsZWN0aW9uS2V5KGNvbGxlY3Rpb25UeXBlLCBzdGFyQXRvbSkpKTsKKyAgICB9CisK
KyAgICB2b2lkIHJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUoTGl2ZU5vZGVMaXN0KiBsaXN0LCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBzdGFyQXRvbSkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChsaXN0ID09IG1fYXRvbWljTmFtZUNhY2hlcy5nZXQobmFtZWROb2RlTGlzdEtleShjb2xsZWN0
aW9uVHlwZSwgbmFtZSkpKTsKKyAgICAgICAgQVNTRVJUKGxpc3QgPT0gbV9hdG9taWNOYW1lQ2Fj
aGVzLmdldChuYW1lZE5vZGVMaXN0S2V5KGxpc3QtPnR5cGUoKSwgbmFtZSkpKTsKICAgICAgICAg
aWYgKGRlbGV0ZVRoaXNBbmRVcGRhdGVOb2RlUmFyZURhdGFJZkFib3V0VG9SZW1vdmVMYXN0TGlz
dChsaXN0LT5vd25lck5vZGUoKSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fYXRv
bWljTmFtZUNhY2hlcy5yZW1vdmUobmFtZWROb2RlTGlzdEtleShjb2xsZWN0aW9uVHlwZSwgbmFt
ZSkpOworICAgICAgICBtX2F0b21pY05hbWVDYWNoZXMucmVtb3ZlKG5hbWVkTm9kZUxpc3RLZXko
bGlzdC0+dHlwZSgpLCBuYW1lKSk7CiAgICAgfQogCi0gICAgdm9pZCByZW1vdmVDYWNoZVdpdGhO
YW1lKExpdmVOb2RlTGlzdEJhc2UqIGxpc3QsIENvbGxlY3Rpb25UeXBlIGNvbGxlY3Rpb25UeXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgdm9pZCByZW1vdmVDYWNoZVdpdGhOYW1lKExpdmVO
b2RlTGlzdCogbGlzdCwgY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KGxpc3QgPT0gbV9uYW1lQ2FjaGVzLmdldChuYW1lZE5vZGVMaXN0S2V5KGNvbGxlY3Rpb25UeXBl
LCBuYW1lKSkpOworICAgICAgICBBU1NFUlQobGlzdCA9PSBtX25hbWVDYWNoZXMuZ2V0KG5hbWVk
Tm9kZUxpc3RLZXkobGlzdC0+dHlwZSgpLCBuYW1lKSkpOwogICAgICAgICBpZiAoZGVsZXRlVGhp
c0FuZFVwZGF0ZU5vZGVSYXJlRGF0YUlmQWJvdXRUb1JlbW92ZUxhc3RMaXN0KGxpc3QtPm93bmVy
Tm9kZSgpKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9uYW1lQ2FjaGVzLnJlbW92
ZShuYW1lZE5vZGVMaXN0S2V5KGNvbGxlY3Rpb25UeXBlLCBuYW1lKSk7CisgICAgICAgIG1fbmFt
ZUNhY2hlcy5yZW1vdmUobmFtZWROb2RlTGlzdEtleShsaXN0LT50eXBlKCksIG5hbWUpKTsKICAg
ICB9CiAKICAgICB2b2lkIHJlbW92ZUNhY2hlV2l0aFF1YWxpZmllZE5hbWUoTGl2ZU5vZGVMaXN0
KiBsaXN0LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbE5hbWUpCkBAIC0xODUsNiArMTk5LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV90
YWdOb2RlTGlzdENhY2hlTlMucmVtb3ZlKG5hbWUpOwogICAgIH0KIAorICAgIHZvaWQgcmVtb3Zl
Q2FjaGVkQ29sbGVjdGlvbihIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lID0gc3RhckF0b20pCisgICAgeworICAgICAgICBBU1NFUlQoY29sbGVjdGlv
biA9PSBtX2NhY2hlZENvbGxlY3Rpb25zLmdldChuYW1lZENvbGxlY3Rpb25LZXkoY29sbGVjdGlv
bi0+dHlwZSgpLCBuYW1lKSkpOworICAgICAgICBpZiAoZGVsZXRlVGhpc0FuZFVwZGF0ZU5vZGVS
YXJlRGF0YUlmQWJvdXRUb1JlbW92ZUxhc3RMaXN0KGNvbGxlY3Rpb24tPm93bmVyTm9kZSgpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9jYWNoZWRDb2xsZWN0aW9ucy5yZW1vdmUo
bmFtZWRDb2xsZWN0aW9uS2V5KGNvbGxlY3Rpb24tPnR5cGUoKSwgbmFtZSkpOworICAgIH0KKwog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBjcmVhdGUoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7CkBAIC0xOTMs
NyArMjE1LDcgQEAgcHVibGljOgogICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlcyhjb25zdCBRdWFs
aWZpZWROYW1lKiBhdHRyTmFtZSA9IDApOwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gbV9hdG9taWNOYW1lQ2FjaGVzLmlzRW1wdHkoKSAmJiBtX25hbWVD
YWNoZXMuaXNFbXB0eSgpICYmIG1fdGFnTm9kZUxpc3RDYWNoZU5TLmlzRW1wdHkoKTsKKyAgICAg
ICAgcmV0dXJuIG1fYXRvbWljTmFtZUNhY2hlcy5pc0VtcHR5KCkgJiYgbV9uYW1lQ2FjaGVzLmlz
RW1wdHkoKSAmJiBtX2NhY2hlZENvbGxlY3Rpb25zLmlzRW1wdHkoKSAmJiBtX3RhZ05vZGVMaXN0
Q2FjaGVOUy5pc0VtcHR5KCk7CiAgICAgfQogCiAgICAgdm9pZCBhZG9wdFRyZWVTY29wZSgpCkBA
IC0yMDYsMjcgKzIyOCwzMCBAQCBwdWJsaWM6CiAgICAgICAgIGludmFsaWRhdGVDYWNoZXMoKTsK
IAogICAgICAgICBpZiAob2xkRG9jdW1lbnQgIT0gbmV3RG9jdW1lbnQpIHsKLSAgICAgICAgICAg
IE5vZGVMaXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBhdG9taWNOYW1lQ2Fj
aGVFbmQgPSBtX2F0b21pY05hbWVDYWNoZXMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKE5vZGVM
aXN0QXRvbWljTmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXRvbWljTmFtZUNh
Y2hlcy5iZWdpbigpOyBpdCAhPSBhdG9taWNOYW1lQ2FjaGVFbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgICAgICBMaXZlTm9kZUxpc3RCYXNlKiBsaXN0ID0gaXQtPnZhbHVlOworICAgICAgICAgICAg
Zm9yIChhdXRvIGl0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmJlZ2luKCksIGVuZCA9IG1fYXRvbWlj
TmFtZUNhY2hlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgTGl2
ZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIG9sZERvY3VtZW50
LT51bnJlZ2lzdGVyTm9kZUxpc3QobGlzdCk7CiAgICAgICAgICAgICAgICAgbmV3RG9jdW1lbnQt
PnJlZ2lzdGVyTm9kZUxpc3QobGlzdCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIE5v
ZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25zdF9pdGVyYXRvciBuYW1lQ2FjaGVFbmQgPSBtX25hbWVD
YWNoZXMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKE5vZGVMaXN0TmFtZUNhY2hlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fbmFtZUNhY2hlcy5iZWdpbigpOyBpdCAhPSBuYW1lQ2FjaGVFbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgICAgICBMaXZlTm9kZUxpc3RCYXNlKiBsaXN0ID0gaXQtPnZh
bHVlOworICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9uYW1lQ2FjaGVzLmJlZ2luKCksIGVu
ZCA9IG1fbmFtZUNhY2hlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAg
ICAgTGl2ZU5vZGVMaXN0KiBsaXN0ID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgICAgIG9sZERv
Y3VtZW50LT51bnJlZ2lzdGVyTm9kZUxpc3QobGlzdCk7CiAgICAgICAgICAgICAgICAgbmV3RG9j
dW1lbnQtPnJlZ2lzdGVyTm9kZUxpc3QobGlzdCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIFRhZ05vZGVMaXN0Q2FjaGVOUzo6Y29uc3RfaXRlcmF0b3IgdGFnRW5kID0gbV90YWdOb2Rl
TGlzdENhY2hlTlMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKFRhZ05vZGVMaXN0Q2FjaGVOUzo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5iZWdpbigpOyBpdCAhPSB0
YWdFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBMaXZlTm9kZUxpc3RCYXNlKiBsaXN0ID0g
aXQtPnZhbHVlOworICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gbV90YWdOb2RlTGlzdENhY2hl
TlMuYmVnaW4oKSwgZW5kID0gbV90YWdOb2RlTGlzdENhY2hlTlMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAgICAgICAgIExpdmVOb2RlTGlzdCogbGlzdCA9IGl0LT52YWx1ZTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWxpc3QtPmlzUm9vdGVkQXREb2N1bWVudCgpKTsKICAg
ICAgICAgICAgICAgICBvbGREb2N1bWVudC0+dW5yZWdpc3Rlck5vZGVMaXN0KGxpc3QpOwogICAg
ICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rlck5vZGVMaXN0KGxpc3QpOwogICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX2NhY2hlZENvbGxlY3Rpb25z
LmJlZ2luKCksIGVuZCA9IG1fY2FjaGVkQ29sbGVjdGlvbnMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgICAgIEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gaXQtPnZh
bHVlOworICAgICAgICAgICAgICAgIG9sZERvY3VtZW50LT51bnJlZ2lzdGVyQ29sbGVjdGlvbihj
b2xsZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJDb2xsZWN0
aW9uKGNvbGxlY3Rpb24pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0y
MzYsMTIgKzI2MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAsIG1fZW1wdHlDaGlsZE5vZGVMaXN0
KG51bGxwdHIpCiAgICAgeyB9CiAKLSAgICBzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbWlj
U3RyaW5nPiBuYW1lZE5vZGVMaXN0S2V5KENvbGxlY3Rpb25UeXBlIHR5cGUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSkKKyAgICBzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbWljU3RyaW5n
PiBuYW1lZENvbGxlY3Rpb25LZXkoQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKQogICAgIHsKICAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFy
LCBBdG9taWNTdHJpbmc+KHR5cGUsIG5hbWUpOwogICAgIH0KIAotICAgIHN0ZDo6cGFpcjx1bnNp
Z25lZCBjaGFyLCBTdHJpbmc+IG5hbWVkTm9kZUxpc3RLZXkoQ29sbGVjdGlvblR5cGUgdHlwZSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBTdHJpbmc+
IG5hbWVkTm9kZUxpc3RLZXkoTGl2ZU5vZGVMaXN0OjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYg
bmFtZSkKICAgICB7CiAgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgU3Ry
aW5nPih0eXBlLCBuYW1lKTsKICAgICB9CkBAIC0yNTUsNiArMjgwLDcgQEAgcHJpdmF0ZToKICAg
ICBOb2RlTGlzdEF0b21pY05hbWVDYWNoZU1hcCBtX2F0b21pY05hbWVDYWNoZXM7CiAgICAgTm9k
ZUxpc3ROYW1lQ2FjaGVNYXAgbV9uYW1lQ2FjaGVzOwogICAgIFRhZ05vZGVMaXN0Q2FjaGVOUyBt
X3RhZ05vZGVMaXN0Q2FjaGVOUzsKKyAgICBDb2xsZWN0aW9uQ2FjaGVNYXAgbV9jYWNoZWRDb2xs
ZWN0aW9uczsKIH07CiAKIGNsYXNzIE5vZGVNdXRhdGlvbk9ic2VydmVyRGF0YSB7CkBAIC0zMTks
NyArMzQ1LDggQEAgcHJpdmF0ZToKIGlubGluZSBib29sIE5vZGVMaXN0c05vZGVEYXRhOjpkZWxl
dGVUaGlzQW5kVXBkYXRlTm9kZVJhcmVEYXRhSWZBYm91dFRvUmVtb3ZlTGFzdExpc3QoTm9kZSYg
b3duZXJOb2RlKQogewogICAgIEFTU0VSVChvd25lck5vZGUubm9kZUxpc3RzKCkgPT0gdGhpcyk7
Ci0gICAgaWYgKChtX2NoaWxkTm9kZUxpc3QgPyAxIDogMCkgKyAobV9lbXB0eUNoaWxkTm9kZUxp
c3QgPyAxIDogMCkgKyBtX2F0b21pY05hbWVDYWNoZXMuc2l6ZSgpICsgbV9uYW1lQ2FjaGVzLnNp
emUoKSArIG1fdGFnTm9kZUxpc3RDYWNoZU5TLnNpemUoKSAhPSAxKQorICAgIGlmICgobV9jaGls
ZE5vZGVMaXN0ID8gMSA6IDApICsgKG1fZW1wdHlDaGlsZE5vZGVMaXN0ID8gMSA6IDApICsgbV9h
dG9taWNOYW1lQ2FjaGVzLnNpemUoKSArIG1fbmFtZUNhY2hlcy5zaXplKCkKKyAgICAgICAgKyBt
X3RhZ05vZGVMaXN0Q2FjaGVOUy5zaXplKCkgKyBtX2NhY2hlZENvbGxlY3Rpb25zLnNpemUoKSAh
PSAxKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgb3duZXJOb2RlLmNsZWFyTm9kZUxpc3Rz
KCk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5jcHAJ
KHJldmlzaW9uIDE1ODY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1UYWdOb2RlTGlzdDo6VGFnTm9kZUxpc3QoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIENvbGxl
Y3Rpb25UeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKK1RhZ05vZGVMaXN0OjpUYWdOb2RlTGlzdChDb250YWlu
ZXJOb2RlJiByb290Tm9kZSwgVHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFj
ZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCiAgICAgOiBMaXZlTm9kZUxpc3Qo
cm9vdE5vZGUsIHR5cGUsIERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlcykKICAgICAs
IG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKICAgICAsIG1fbG9jYWxOYW1lKGxvY2FsTmFt
ZSkKQEAgLTM5LDcgKzM5LDcgQEAgVGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KENvbnRhaW5lck5v
ZGUmIAogVGFnTm9kZUxpc3Q6On5UYWdOb2RlTGlzdCgpCiB7CiAgICAgaWYgKG1fbmFtZXNwYWNl
VVJJID09IHN0YXJBdG9tKQotICAgICAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMoKS0+cmVtb3Zl
Q2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCB0eXBlKCksIG1fbG9jYWxOYW1lKTsKKyAgICAgICAg
b3duZXJOb2RlKCkubm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUodGhpcywg
bV9sb2NhbE5hbWUpOwogICAgIGVsc2UKICAgICAgICAgb3duZXJOb2RlKCkubm9kZUxpc3RzKCkt
PnJlbW92ZUNhY2hlV2l0aFF1YWxpZmllZE5hbWUodGhpcywgbV9uYW1lc3BhY2VVUkksIG1fbG9j
YWxOYW1lKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5oCShyZXZpc2lvbiAxNTg2
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFn
Tm9kZUxpc3Qocm9vdE5vZGUsIFRhZ05vZGVMaXN0VHlwZSwgbmFtZXNwYWNlVVJJLCBsb2NhbE5h
bWUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4gY3JlYXRl
KENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsTmFtZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUYWdOb2RlTGlzdD4g
Y3JlYXRlKENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBUeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lKQogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBl
ID09IFRhZ05vZGVMaXN0VHlwZSk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGFnTm9k
ZUxpc3Qocm9vdE5vZGUsIFRhZ05vZGVMaXN0VHlwZSwgc3RhckF0b20sIGxvY2FsTmFtZSkpOwpA
QCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+VGFnTm9kZUxpc3QoKTsKIAog
cHJvdGVjdGVkOgotICAgIFRhZ05vZGVMaXN0KENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBDb2xs
ZWN0aW9uVHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lKTsKKyAgICBUYWdOb2RlTGlzdChDb250YWluZXJOb2RlJiByb290
Tm9kZSwgVHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lKTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhFbGVt
ZW50KikgY29uc3QgT1ZFUlJJREU7CiAKQEAgLTU4LDcgKzU4LDcgQEAgcHJvdGVjdGVkOgogCiBj
bGFzcyBIVE1MVGFnTm9kZUxpc3QgOiBwdWJsaWMgVGFnTm9kZUxpc3QgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxUYWdOb2RlTGlzdD4gY3JlYXRlKENvbnRhaW5lck5vZGUm
IHJvb3ROb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
TmFtZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MVGFnTm9kZUxpc3Q+IGNyZWF0ZShDb250
YWluZXJOb2RlJiByb290Tm9kZSwgVHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
TmFtZSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBIVE1MVGFn
Tm9kZUxpc3RUeXBlKTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MVGFnTm9kZUxp
c3Qocm9vdE5vZGUsIGxvY2FsTmFtZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9Db2xs
ZWN0aW9uVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sbGVjdGlv
blR5cGUuaAkocmV2aXNpb24gMTU4NjU5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Db2xsZWN0
aW9uVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwyNCArNTAsOSBAQCBlbnVtIENvbGxlY3Rp
b25UeXBlIHsKICAgICBTZWxlY3RlZE9wdGlvbnMsCiAgICAgRGF0YUxpc3RPcHRpb25zLAogICAg
IE1hcEFyZWFzLAotICAgIEZvcm1Db250cm9scywKLQotICAgIC8vIExpdmUgTm9kZUxpc3QuCi0g
ICAgQ2xhc3NOb2RlTGlzdFR5cGUsCi0gICAgTmFtZU5vZGVMaXN0VHlwZSwKLSAgICBUYWdOb2Rl
TGlzdFR5cGUsCi0gICAgSFRNTFRhZ05vZGVMaXN0VHlwZSwKLSAgICBSYWRpb05vZGVMaXN0VHlw
ZSwKLSAgICBMYWJlbHNOb2RlTGlzdFR5cGUsCisgICAgRm9ybUNvbnRyb2xzCiB9OwogCi1zdGF0
aWMgY29uc3QgQ29sbGVjdGlvblR5cGUgRmlyc3ROb2RlTGlzdFR5cGUgPSBDbGFzc05vZGVMaXN0
VHlwZTsKLQotaW5saW5lIGJvb2wgaXNOb2RlTGlzdChDb2xsZWN0aW9uVHlwZSB0eXBlKQotewot
ICAgIHJldHVybiB0eXBlID49IEZpcnN0Tm9kZUxpc3RUeXBlOwotfQotCiB9IC8vIG5hbWVzcGFj
ZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCShy
ZXZpc2lvbiAxNTg2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTQgKzIzLDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKIAotI2luY2x1ZGUgIkNsYXNzTm9kZUxpc3Qu
aCIKICNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT3B0aW9u
RWxlbWVudC5oIgotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRh
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYyLDEzICs2MCw2IEBAIHN0YXRpYyBib29s
IHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGQKICAgICBjYXNlIFRTZWN0aW9uUm93czoKICAg
ICBjYXNlIFRhYmxlVEJvZGllczoKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDbGFz
c05vZGVMaXN0VHlwZToKLSAgICBjYXNlIE5hbWVOb2RlTGlzdFR5cGU6Ci0gICAgY2FzZSBUYWdO
b2RlTGlzdFR5cGU6Ci0gICAgY2FzZSBIVE1MVGFnTm9kZUxpc3RUeXBlOgotICAgIGNhc2UgUmFk
aW9Ob2RlTGlzdFR5cGU6Ci0gICAgY2FzZSBMYWJlbHNOb2RlTGlzdFR5cGU6Ci0gICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7
CkBAIC05OSwxMyArOTAsNiBAQCBzdGF0aWMgTm9kZUxpc3RSb290VHlwZSByb290VHlwZUZyb21D
b2xsCiAgICAgY2FzZSBEYXRhTGlzdE9wdGlvbnM6CiAgICAgY2FzZSBNYXBBcmVhczoKICAgICAg
ICAgcmV0dXJuIE5vZGVMaXN0SXNSb290ZWRBdE5vZGU7Ci0gICAgY2FzZSBDbGFzc05vZGVMaXN0
VHlwZToKLSAgICBjYXNlIE5hbWVOb2RlTGlzdFR5cGU6Ci0gICAgY2FzZSBUYWdOb2RlTGlzdFR5
cGU6Ci0gICAgY2FzZSBIVE1MVGFnTm9kZUxpc3RUeXBlOgotICAgIGNhc2UgUmFkaW9Ob2RlTGlz
dFR5cGU6Ci0gICAgY2FzZSBMYWJlbHNOb2RlTGlzdFR5cGU6Ci0gICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gTm9kZUxpc3RJc1Jvb3Rl
ZEF0Tm9kZTsKQEAgLTE0MiwyMiArMTI2LDI5IEBAIHN0YXRpYyBOb2RlTGlzdEludmFsaWRhdGlv
blR5cGUgaW52YWxpZGEKICAgICAgICAgcmV0dXJuIEludmFsaWRhdGVPbklkTmFtZUF0dHJDaGFu
Z2U7CiAgICAgY2FzZSBGb3JtQ29udHJvbHM6CiAgICAgICAgIHJldHVybiBJbnZhbGlkYXRlRm9y
Rm9ybUNvbnRyb2xzOwotICAgIGNhc2UgQ2xhc3NOb2RlTGlzdFR5cGU6Ci0gICAgY2FzZSBOYW1l
Tm9kZUxpc3RUeXBlOgotICAgIGNhc2UgVGFnTm9kZUxpc3RUeXBlOgotICAgIGNhc2UgSFRNTFRh
Z05vZGVMaXN0VHlwZToKLSAgICBjYXNlIFJhZGlvTm9kZUxpc3RUeXBlOgotICAgIGNhc2UgTGFi
ZWxzTm9kZUxpc3RUeXBlOgotICAgICAgICBicmVhazsKICAgICB9CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgcmV0dXJuIERvTm90SW52YWxpZGF0ZU9uQXR0cmlidXRlQ2hhbmdlczsK
IH0KIAogSFRNTENvbGxlY3Rpb246OkhUTUxDb2xsZWN0aW9uKENvbnRhaW5lck5vZGUmIG93bmVy
Tm9kZSwgQ29sbGVjdGlvblR5cGUgdHlwZSwgSXRlbUFmdGVyT3ZlcnJpZGVUeXBlIGl0ZW1BZnRl
ck92ZXJyaWRlVHlwZSkKLSAgICA6IExpdmVOb2RlTGlzdEJhc2Uob3duZXJOb2RlLCByb290VHlw
ZUZyb21Db2xsZWN0aW9uVHlwZSh0eXBlKSwgaW52YWxpZGF0aW9uVHlwZUV4Y2x1ZGluZ0lkQW5k
TmFtZUF0dHJpYnV0ZXModHlwZSksCi0gICAgICAgIFdlYkNvcmU6OnNob3VsZE9ubHlJbmNsdWRl
RGlyZWN0Q2hpbGRyZW4odHlwZSksIHR5cGUsIGl0ZW1BZnRlck92ZXJyaWRlVHlwZSkKLXsKKyAg
ICA6IG1fb3duZXJOb2RlKG93bmVyTm9kZSkKKyAgICAsIG1fY2FjaGVkRWxlbWVudChudWxscHRy
KQorICAgICwgbV9pc0xlbmd0aENhY2hlVmFsaWQoZmFsc2UpCisgICAgLCBtX2lzRWxlbWVudENh
Y2hlVmFsaWQoZmFsc2UpCisgICAgLCBtX3Jvb3RUeXBlKHJvb3RUeXBlRnJvbUNvbGxlY3Rpb25U
eXBlKHR5cGUpKQorICAgICwgbV9pbnZhbGlkYXRpb25UeXBlKGludmFsaWRhdGlvblR5cGVFeGNs
dWRpbmdJZEFuZE5hbWVBdHRyaWJ1dGVzKHR5cGUpKQorICAgICwgbV9zaG91bGRPbmx5SW5jbHVk
ZURpcmVjdENoaWxkcmVuKHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4odHlwZSkpCisg
ICAgLCBtX2lzTmFtZUNhY2hlVmFsaWQoZmFsc2UpCisgICAgLCBtX2NvbGxlY3Rpb25UeXBlKHR5
cGUpCisgICAgLCBtX292ZXJyaWRlc0l0ZW1BZnRlcihpdGVtQWZ0ZXJPdmVycmlkZVR5cGUgPT0g
T3ZlcnJpZGVzSXRlbUFmdGVyKQorICAgICwgbV9pc0l0ZW1SZWZFbGVtZW50c0NhY2hlVmFsaWQo
ZmFsc2UpCit7CisgICAgQVNTRVJUKG1fcm9vdFR5cGUgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHJvb3RUeXBlRnJvbUNvbGxlY3Rpb25UeXBlKHR5cGUpKSk7CisgICAgQVNTRVJUKG1faW52YWxp
ZGF0aW9uVHlwZSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW52YWxpZGF0aW9uVHlwZUV4Y2x1
ZGluZ0lkQW5kTmFtZUF0dHJpYnV0ZXModHlwZSkpKTsKKyAgICBBU1NFUlQobV9jb2xsZWN0aW9u
VHlwZSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSkpOworCisgICAgZG9jdW1lbnQoKS5y
ZWdpc3RlckNvbGxlY3Rpb24odGhpcyk7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+
IEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUoQ29udGFpbmVyTm9kZSYgYmFzZSwgQ29sbGVjdGlvblR5
cGUgdHlwZSkKQEAgLTE2NywxNSArMTU4LDIxIEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+
IEhUTUxDb2xsZWN0aW8KIAogSFRNTENvbGxlY3Rpb246On5IVE1MQ29sbGVjdGlvbigpCiB7Cisg
ICAgZG9jdW1lbnQoKS51bnJlZ2lzdGVyQ29sbGVjdGlvbih0aGlzKTsKICAgICAvLyBIVE1MTmFt
ZUNvbGxlY3Rpb24gcmVtb3ZlcyBjYWNoZSBieSBpdHNlbGYuCiAgICAgaWYgKHR5cGUoKSAhPSBX
aW5kb3dOYW1lZEl0ZW1zICYmIHR5cGUoKSAhPSBEb2N1bWVudE5hbWVkSXRlbXMpCi0gICAgICAg
IG93bmVyTm9kZSgpLm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9taWNOYW1lKHRoaXMs
IHR5cGUoKSk7CisgICAgICAgIG93bmVyTm9kZSgpLm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZWRD
b2xsZWN0aW9uKHRoaXMpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgTm9kZUxpc3RUeXBlPgotaW5s
aW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQoY29uc3QgTm9kZUxpc3RUeXBlKiwgRWxlbWVudCop
OworQ29udGFpbmVyTm9kZSYgSFRNTENvbGxlY3Rpb246OnJvb3ROb2RlKCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNSb290ZWRBdERvY3VtZW50KCkgJiYgb3duZXJOb2RlKCkuaW5Eb2N1bWVudCgpKQor
ICAgICAgICByZXR1cm4gb3duZXJOb2RlKCkuZG9jdW1lbnQoKTsKKworICAgIHJldHVybiBvd25l
ck5vZGUoKTsKK30KIAotdGVtcGxhdGUgPD4gaW5saW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQo
Y29uc3QgSFRNTENvbGxlY3Rpb24qIGh0bWxDb2xsZWN0aW9uLCBFbGVtZW50KiBlbGVtZW50KQor
dGVtcGxhdGUgaW5saW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQoY29uc3QgSFRNTENvbGxlY3Rp
b24qIGh0bWxDb2xsZWN0aW9uLCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIENvbGxlY3Rpb25U
eXBlIHR5cGUgPSBodG1sQ29sbGVjdGlvbi0+dHlwZSgpOwogICAgIGlmICghZWxlbWVudC0+aXNI
VE1MRWxlbWVudCgpICYmICEodHlwZSA9PSBEb2NBbGwgfHwgdHlwZSA9PSBOb2RlQ2hpbGRyZW4g
fHwgdHlwZSA9PSBXaW5kb3dOYW1lZEl0ZW1zKSkKQEAgLTIyNCwzMiArMjIxLDEyIEBAIHRlbXBs
YXRlIDw+IGlubGluZSBib29sIGlzTWF0Y2hpbmdFbGVtZW4KICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFdpbmRvd05hbWVDb2xsZWN0aW9uKj4oaHRtbENvbGxlY3Rpb24pLT5ub2Rl
TWF0Y2hlcyhlbGVtZW50KTsKICAgICBjYXNlIEZvcm1Db250cm9sczoKICAgICBjYXNlIFRhYmxl
Um93czoKLSAgICBjYXNlIENsYXNzTm9kZUxpc3RUeXBlOgotICAgIGNhc2UgTmFtZU5vZGVMaXN0
VHlwZToKLSAgICBjYXNlIFRhZ05vZGVMaXN0VHlwZToKLSAgICBjYXNlIEhUTUxUYWdOb2RlTGlz
dFR5cGU6Ci0gICAgY2FzZSBSYWRpb05vZGVMaXN0VHlwZToKLSAgICBjYXNlIExhYmVsc05vZGVM
aXN0VHlwZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwog
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXRlbXBsYXRlIDw+IGlubGluZSBib29sIGlzTWF0Y2hpbmdFbGVtZW50KGNvbnN0IExpdmVOb2Rl
TGlzdCogbm9kZUxpc3QsIEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgcmV0dXJuIG5vZGVMaXN0
LT5ub2RlTWF0Y2hlcyhlbGVtZW50KTsKLX0KLQotdGVtcGxhdGUgPD4gaW5saW5lIGJvb2wgaXNN
YXRjaGluZ0VsZW1lbnQoY29uc3QgSFRNTFRhZ05vZGVMaXN0KiBub2RlTGlzdCwgRWxlbWVudCog
ZWxlbWVudCkKLXsKLSAgICByZXR1cm4gbm9kZUxpc3QtPm5vZGVNYXRjaGVzSW5saW5lZChlbGVt
ZW50KTsKLX0KLQotdGVtcGxhdGUgPD4gaW5saW5lIGJvb2wgaXNNYXRjaGluZ0VsZW1lbnQoY29u
c3QgQ2xhc3NOb2RlTGlzdCogbm9kZUxpc3QsIEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgcmV0
dXJuIG5vZGVMaXN0LT5ub2RlTWF0Y2hlc0lubGluZWQoZWxlbWVudCk7Ci19Ci0KIHN0YXRpYyBF
bGVtZW50KiBwcmV2aW91c0VsZW1lbnQoQ29udGFpbmVyTm9kZSYgYmFzZSwgRWxlbWVudCogcHJl
dmlvdXMsIGJvb2wgb25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbikKIHsKICAgICByZXR1cm4gb25s
eUluY2x1ZGVEaXJlY3RDaGlsZHJlbiA/IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGlu
ZyhwcmV2aW91cykgOiBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91cyhwcmV2aW91cywgJmJhc2Up
OwpAQCAtMjYwLDg2ICsyMzcsNTUgQEAgc3RhdGljIEVsZW1lbnQqIGxhc3RFbGVtZW50KENvbnRh
aW5lck5vZAogICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuID8gRWxlbWVudFRy
YXZlcnNhbDo6bGFzdENoaWxkKCZyb290Tm9kZSkgOiBFbGVtZW50VHJhdmVyc2FsOjpsYXN0V2l0
aGluKCZyb290Tm9kZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgRWxlbWVudCogTGl2ZU5vZGVMaXN0
QmFzZTo6aXRlcmF0ZUZvclByZXZpb3VzRWxlbWVudChFbGVtZW50KiBjdXJyZW50KSBjb25zdAor
QUxXQVlTX0lOTElORSBFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6aXRlcmF0ZUZvclByZXZpb3Vz
RWxlbWVudChFbGVtZW50KiBjdXJyZW50KSBjb25zdAogewotICAgIGJvb2wgb25seUluY2x1ZGVE
aXJlY3RDaGlsZHJlbiA9IHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4oKTsKLSAgICBD
b2xsZWN0aW9uVHlwZSBjb2xsZWN0aW9uVHlwZSA9IHR5cGUoKTsKKyAgICBib29sIG9ubHlJbmNs
dWRlRGlyZWN0Q2hpbGRyZW4gPSBtX3Nob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW47CiAg
ICAgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUgPSB0aGlzLT5yb290Tm9kZSgpOwogICAgIGZvciAo
OyBjdXJyZW50OyBjdXJyZW50ID0gcHJldmlvdXNFbGVtZW50KHJvb3ROb2RlLCBjdXJyZW50LCBv
bmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKSkgewotICAgICAgICBpZiAoaXNOb2RlTGlzdChjb2xs
ZWN0aW9uVHlwZSkpIHsKLSAgICAgICAgICAgIGlmIChpc01hdGNoaW5nRWxlbWVudChzdGF0aWNf
Y2FzdDxjb25zdCBMaXZlTm9kZUxpc3QqPih0aGlzKSwgY3VycmVudCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNN
YXRjaGluZ0VsZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTENvbGxlY3Rpb24qPih0aGlzKSwg
Y3VycmVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKGlzTWF0Y2hpbmdFbGVtZW50KHRoaXMsIGN1cnJlbnQpKQorICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnQ7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi1BTFdBWVNfSU5MSU5F
IEVsZW1lbnQqIExpdmVOb2RlTGlzdEJhc2U6Oml0ZW1CZWZvcmUoRWxlbWVudCogcHJldmlvdXMp
IGNvbnN0CitBTFdBWVNfSU5MSU5FIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjppdGVtQmVmb3Jl
KEVsZW1lbnQqIHByZXZpb3VzKSBjb25zdAogewogICAgIEVsZW1lbnQqIGN1cnJlbnQ7CiAgICAg
aWYgKExJS0VMWSghIXByZXZpb3VzKSkgLy8gV2l0aG91dCB0aGlzIExJS0VMWSwgbGVuZ3RoKCkg
YW5kIGl0ZW0oKSBjYW4gYmUgMTAlIHNsb3dlci4KLSAgICAgICAgY3VycmVudCA9IHByZXZpb3Vz
RWxlbWVudChyb290Tm9kZSgpLCBwcmV2aW91cywgc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGls
ZHJlbigpKTsKKyAgICAgICAgY3VycmVudCA9IHByZXZpb3VzRWxlbWVudChyb290Tm9kZSgpLCBw
cmV2aW91cywgbV9zaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKTsKICAgICBlbHNlCi0g
ICAgICAgIGN1cnJlbnQgPSBsYXN0RWxlbWVudChyb290Tm9kZSgpLCBzaG91bGRPbmx5SW5jbHVk
ZURpcmVjdENoaWxkcmVuKCkpOworICAgICAgICBjdXJyZW50ID0gbGFzdEVsZW1lbnQocm9vdE5v
ZGUoKSwgbV9zaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKTsKIAogICAgIHJldHVybiBp
dGVyYXRlRm9yUHJldmlvdXNFbGVtZW50KGN1cnJlbnQpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3Mg
Tm9kZUxpc3RUeXBlPgotaW5saW5lIEVsZW1lbnQqIGZpcnN0TWF0Y2hpbmdFbGVtZW50KGNvbnN0
IE5vZGVMaXN0VHlwZSogbm9kZUxpc3QsIENvbnRhaW5lck5vZGUqIHJvb3QpCitpbmxpbmUgRWxl
bWVudCogZmlyc3RNYXRjaGluZ0VsZW1lbnQoY29uc3QgSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rp
b24sIENvbnRhaW5lck5vZGUqIHJvb3QpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IEVsZW1l
bnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHJvb3QpOwotICAgIHdoaWxlIChlbGVtZW50ICYmICFp
c01hdGNoaW5nRWxlbWVudChub2RlTGlzdCwgZWxlbWVudCkpCisgICAgd2hpbGUgKGVsZW1lbnQg
JiYgIWlzTWF0Y2hpbmdFbGVtZW50KGNvbGxlY3Rpb24sIGVsZW1lbnQpKQogICAgICAgICBlbGVt
ZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCByb290KTsKICAgICByZXR1cm4g
ZWxlbWVudDsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIE5vZGVMaXN0VHlwZT4KLWlubGluZSBFbGVt
ZW50KiBuZXh0TWF0Y2hpbmdFbGVtZW50KGNvbnN0IE5vZGVMaXN0VHlwZSogbm9kZUxpc3QsIEVs
ZW1lbnQqIGN1cnJlbnQsIENvbnRhaW5lck5vZGUqIHJvb3QpCitpbmxpbmUgRWxlbWVudCogbmV4
dE1hdGNoaW5nRWxlbWVudChjb25zdCBIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgRWxlbWVu
dCogY3VycmVudCwgQ29udGFpbmVyTm9kZSogcm9vdCkKIHsKICAgICBkbyB7CiAgICAgICAgIGN1
cnJlbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGN1cnJlbnQsIHJvb3QpOwotICAgIH0gd2hp
bGUgKGN1cnJlbnQgJiYgIWlzTWF0Y2hpbmdFbGVtZW50KG5vZGVMaXN0LCBjdXJyZW50KSk7Cisg
ICAgfSB3aGlsZSAoY3VycmVudCAmJiAhaXNNYXRjaGluZ0VsZW1lbnQoY29sbGVjdGlvbiwgY3Vy
cmVudCkpOwogICAgIHJldHVybiBjdXJyZW50OwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgTm9kZUxp
c3RUeXBlPgotaW5saW5lIEVsZW1lbnQqIHRyYXZlcnNlTWF0Y2hpbmdFbGVtZW50c0ZvcndhcmRU
b09mZnNldChjb25zdCBOb2RlTGlzdFR5cGUqIG5vZGVMaXN0LCB1bnNpZ25lZCBvZmZzZXQsIEVs
ZW1lbnQqIGN1cnJlbnRFbGVtZW50LCB1bnNpZ25lZCYgY3VycmVudE9mZnNldCwgQ29udGFpbmVy
Tm9kZSogcm9vdCkKK2lubGluZSBFbGVtZW50KiB0cmF2ZXJzZU1hdGNoaW5nRWxlbWVudHNGb3J3
YXJkVG9PZmZzZXQoY29uc3QgSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIHVuc2lnbmVkIG9m
ZnNldCwgRWxlbWVudCogY3VycmVudEVsZW1lbnQsIHVuc2lnbmVkJiBjdXJyZW50T2Zmc2V0LCBD
b250YWluZXJOb2RlKiByb290KQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpOwotICAgIHdoaWxlICgoY3VycmVudEVsZW1lbnQg
PSBuZXh0TWF0Y2hpbmdFbGVtZW50KG5vZGVMaXN0LCBjdXJyZW50RWxlbWVudCwgcm9vdCkpKSB7
CisgICAgd2hpbGUgKChjdXJyZW50RWxlbWVudCA9IG5leHRNYXRjaGluZ0VsZW1lbnQoY29sbGVj
dGlvbiwgY3VycmVudEVsZW1lbnQsIHJvb3QpKSkgewogICAgICAgICBpZiAoKytjdXJyZW50T2Zm
c2V0ID09IG9mZnNldCkKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RWxlbWVudDsKICAgICB9
CiAgICAgcmV0dXJuIDA7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBpbiBMaXZlTm9k
ZUxpc3QKLWlubGluZSBFbGVtZW50KiBMaXZlTm9kZUxpc3RCYXNlOjp0cmF2ZXJzZUxpdmVOb2Rl
TGlzdEZpcnN0RWxlbWVudChDb250YWluZXJOb2RlKiByb290KSBjb25zdAotewotICAgIEFTU0VS
VChpc05vZGVMaXN0KHR5cGUoKSkpOwotICAgIGlmICh0eXBlKCkgPT0gSFRNTFRhZ05vZGVMaXN0
VHlwZSkKLSAgICAgICAgcmV0dXJuIGZpcnN0TWF0Y2hpbmdFbGVtZW50KHN0YXRpY19jYXN0PGNv
bnN0IEhUTUxUYWdOb2RlTGlzdCo+KHRoaXMpLCByb290KTsKLSAgICBpZiAodHlwZSgpID09IENs
YXNzTm9kZUxpc3RUeXBlKQotICAgICAgICByZXR1cm4gZmlyc3RNYXRjaGluZ0VsZW1lbnQoc3Rh
dGljX2Nhc3Q8Y29uc3QgQ2xhc3NOb2RlTGlzdCo+KHRoaXMpLCByb290KTsKLSAgICByZXR1cm4g
Zmlyc3RNYXRjaGluZ0VsZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3QgTGl2ZU5vZGVMaXN0Kj4odGhp
cyksIHJvb3QpOwotfQotCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgaW4gTGl2ZU5vZGVMaXN0
Ci1pbmxpbmUgRWxlbWVudCogTGl2ZU5vZGVMaXN0QmFzZTo6dHJhdmVyc2VMaXZlTm9kZUxpc3RG
b3J3YXJkVG9PZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBFbGVtZW50KiBjdXJyZW50RWxlbWVudCwg
dW5zaWduZWQmIGN1cnJlbnRPZmZzZXQsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKGlzTm9kZUxpc3QodHlwZSgpKSk7Ci0gICAgaWYgKHR5cGUoKSA9PSBIVE1MVGFn
Tm9kZUxpc3RUeXBlKQotICAgICAgICByZXR1cm4gdHJhdmVyc2VNYXRjaGluZ0VsZW1lbnRzRm9y
d2FyZFRvT2Zmc2V0KHN0YXRpY19jYXN0PGNvbnN0IEhUTUxUYWdOb2RlTGlzdCo+KHRoaXMpLCBv
ZmZzZXQsIGN1cnJlbnRFbGVtZW50LCBjdXJyZW50T2Zmc2V0LCByb290KTsKLSAgICBpZiAodHlw
ZSgpID09IENsYXNzTm9kZUxpc3RUeXBlKQotICAgICAgICByZXR1cm4gdHJhdmVyc2VNYXRjaGlu
Z0VsZW1lbnRzRm9yd2FyZFRvT2Zmc2V0KHN0YXRpY19jYXN0PGNvbnN0IENsYXNzTm9kZUxpc3Qq
Pih0aGlzKSwgb2Zmc2V0LCBjdXJyZW50RWxlbWVudCwgY3VycmVudE9mZnNldCwgcm9vdCk7Ci0g
ICAgcmV0dXJuIHRyYXZlcnNlTWF0Y2hpbmdFbGVtZW50c0ZvcndhcmRUb09mZnNldChzdGF0aWNf
Y2FzdDxjb25zdCBMaXZlTm9kZUxpc3QqPih0aGlzKSwgb2Zmc2V0LCBjdXJyZW50RWxlbWVudCwg
Y3VycmVudE9mZnNldCwgcm9vdCk7Ci19Ci0KLWJvb2wgQUxXQVlTX0lOTElORSBMaXZlTm9kZUxp
c3RCYXNlOjppc0xhc3RJdGVtQ2xvc2VyVGhhbkxhc3RPckNhY2hlZEl0ZW0odW5zaWduZWQgb2Zm
c2V0KSBjb25zdAorYm9vbCBBTFdBWVNfSU5MSU5FIEhUTUxDb2xsZWN0aW9uOjppc0xhc3RJdGVt
Q2xvc2VyVGhhbkxhc3RPckNhY2hlZEl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdAogewogICAg
IEFTU0VSVChpc0xlbmd0aENhY2hlVmFsaWQoKSk7CiAgICAgdW5zaWduZWQgZGlzdGFuY2VGcm9t
TGFzdEl0ZW0gPSBjYWNoZWRMZW5ndGgoKSAtIG9mZnNldDsKQEAgLTM0OSw3ICsyOTUsNyBAQCBi
b29sIEFMV0FZU19JTkxJTkUgTGl2ZU5vZGVMaXN0QmFzZTo6aXNMCiAgICAgcmV0dXJuIGNhY2hl
ZEVsZW1lbnRPZmZzZXQoKSA8IG9mZnNldCAmJiBkaXN0YW5jZUZyb21MYXN0SXRlbSA8IG9mZnNl
dCAtIGNhY2hlZEVsZW1lbnRPZmZzZXQoKTsKIH0KICAgICAKLWJvb2wgQUxXQVlTX0lOTElORSBM
aXZlTm9kZUxpc3RCYXNlOjppc0ZpcnN0SXRlbUNsb3NlclRoYW5DYWNoZWRJdGVtKHVuc2lnbmVk
IG9mZnNldCkgY29uc3QKK2Jvb2wgQUxXQVlTX0lOTElORSBIVE1MQ29sbGVjdGlvbjo6aXNGaXJz
dEl0ZW1DbG9zZXJUaGFuQ2FjaGVkSXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGlzRWxlbWVudENhY2hlVmFsaWQoKSk7CiAgICAgaWYgKGNhY2hlZEVsZW1lbnRPZmZz
ZXQoKSA8IG9mZnNldCkKQEAgLTM1OSw3ICszMDUsNyBAQCBib29sIEFMV0FZU19JTkxJTkUgTGl2
ZU5vZGVMaXN0QmFzZTo6aXNGCiAgICAgcmV0dXJuIG9mZnNldCA8IGRpc3RhbmNlRnJvbUNhY2hl
ZEl0ZW07CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBMaXZlTm9kZUxpc3RCYXNlOjpzZXRDYWNo
ZWRFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgZWxl
bWVudHNBcnJheU9mZnNldCkgY29uc3QKK0FMV0FZU19JTkxJTkUgdm9pZCBIVE1MQ29sbGVjdGlv
bjo6c2V0Q2FjaGVkRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGVsZW1lbnRzQXJyYXlPZmZzZXQpIGNvbnN0CiB7CiAgICAgc2V0Q2FjaGVkRWxlbWVu
dChlbGVtZW50LCBvZmZzZXQpOwogICAgIGlmIChvdmVycmlkZXNJdGVtQWZ0ZXIoKSkKQEAgLTM2
OCw3ICszMTQsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTGl2ZU5vZGVMaXN0QmFzZTo6c2V0CiAg
ICAgQVNTRVJUKG92ZXJyaWRlc0l0ZW1BZnRlcigpIHx8ICFlbGVtZW50c0FycmF5T2Zmc2V0KTsK
IH0KIAotdW5zaWduZWQgTGl2ZU5vZGVMaXN0QmFzZTo6bGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVk
IEhUTUxDb2xsZWN0aW9uOjpsZW5ndGgoKSBjb25zdAogewogICAgIGlmIChpc0xlbmd0aENhY2hl
VmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGNhY2hlZExlbmd0aCgpOwpAQCAtMzgwLDcgKzMyNiw3
IEBAIHVuc2lnbmVkIExpdmVOb2RlTGlzdEJhc2U6Omxlbmd0aCgpIGNvbnMKIH0KIAogLy8gRklY
TUU6IEl0IGlzIHNpbGx5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBIVE1MQ29sbGVjdGlv
bi5jcHAuCi1Ob2RlKiBMaXZlTm9kZUxpc3RCYXNlOjppdGVtKHVuc2lnbmVkIG9mZnNldCkgY29u
c3QKK05vZGUqIEhUTUxDb2xsZWN0aW9uOjppdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsK
ICAgICBpZiAoaXNFbGVtZW50Q2FjaGVWYWxpZCgpICYmIGNhY2hlZEVsZW1lbnRPZmZzZXQoKSA9
PSBvZmZzZXQpCiAgICAgICAgIHJldHVybiBjYWNoZWRFbGVtZW50KCk7CkBAIC0zOTYsMTEgKzM0
Miw3IEBAIE5vZGUqIExpdmVOb2RlTGlzdEJhc2U6Oml0ZW0odW5zaWduZWQgb2YKICAgICAgICAg
c2V0Q2FjaGVkRWxlbWVudCgqbGFzdEl0ZW0sIGNhY2hlZExlbmd0aCgpIC0gMSwgMCk7CiAgICAg
fSBlbHNlIGlmICghaXNFbGVtZW50Q2FjaGVWYWxpZCgpIHx8IGlzRmlyc3RJdGVtQ2xvc2VyVGhh
bkNhY2hlZEl0ZW0ob2Zmc2V0KSB8fCAob3ZlcnJpZGVzSXRlbUFmdGVyKCkgJiYgb2Zmc2V0IDwg
Y2FjaGVkRWxlbWVudE9mZnNldCgpKSkgewogICAgICAgICB1bnNpZ25lZCBvZmZzZXRJbkFycmF5
ID0gMDsKLSAgICAgICAgRWxlbWVudCogZmlyc3RJdGVtOwotICAgICAgICBpZiAoaXNOb2RlTGlz
dCh0eXBlKCkpKQotICAgICAgICAgICAgZmlyc3RJdGVtID0gdHJhdmVyc2VMaXZlTm9kZUxpc3RG
aXJzdEVsZW1lbnQoJnJvb3QpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmaXJzdEl0ZW0g
PSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MQ29sbGVjdGlvbio+KHRoaXMpLT50cmF2ZXJzZUZpcnN0
RWxlbWVudChvZmZzZXRJbkFycmF5LCAmcm9vdCk7CisgICAgICAgIEVsZW1lbnQqIGZpcnN0SXRl
bSA9IHRyYXZlcnNlRmlyc3RFbGVtZW50KG9mZnNldEluQXJyYXksICZyb290KTsKIAogICAgICAg
ICBpZiAoIWZpcnN0SXRlbSkgewogICAgICAgICAgICAgc2V0TGVuZ3RoQ2FjaGUoMCk7CkBAIC00
MTYsNyArMzU4LDcgQEAgTm9kZSogTGl2ZU5vZGVMaXN0QmFzZTo6aXRlbSh1bnNpZ25lZCBvZgog
ICAgIHJldHVybiBlbGVtZW50QmVmb3JlT3JBZnRlckNhY2hlZEVsZW1lbnQob2Zmc2V0LCAmcm9v
dCk7CiB9CiAKLWlubGluZSBFbGVtZW50KiBMaXZlTm9kZUxpc3RCYXNlOjplbGVtZW50QmVmb3Jl
T3JBZnRlckNhY2hlZEVsZW1lbnQodW5zaWduZWQgb2Zmc2V0LCBDb250YWluZXJOb2RlKiByb290
KSBjb25zdAoraW5saW5lIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjplbGVtZW50QmVmb3JlT3JB
ZnRlckNhY2hlZEVsZW1lbnQodW5zaWduZWQgb2Zmc2V0LCBDb250YWluZXJOb2RlKiByb290KSBj
b25zdAogewogICAgIHVuc2lnbmVkIGN1cnJlbnRPZmZzZXQgPSBjYWNoZWRFbGVtZW50T2Zmc2V0
KCk7CiAgICAgRWxlbWVudCogY3VycmVudEl0ZW0gPSBjYWNoZWRFbGVtZW50KCk7CkBAIC00Mzgs
MTAgKzM4MCw3IEBAIGlubGluZSBFbGVtZW50KiBMaXZlTm9kZUxpc3RCYXNlOjplbGVtZW4KICAg
ICB9CiAKICAgICB1bnNpZ25lZCBvZmZzZXRJbkFycmF5ID0gMDsKLSAgICBpZiAoaXNOb2RlTGlz
dCh0eXBlKCkpKQotICAgICAgICBjdXJyZW50SXRlbSA9IHRyYXZlcnNlTGl2ZU5vZGVMaXN0Rm9y
d2FyZFRvT2Zmc2V0KG9mZnNldCwgY3VycmVudEl0ZW0sIGN1cnJlbnRPZmZzZXQsIHJvb3QpOwot
ICAgIGVsc2UKLSAgICAgICAgY3VycmVudEl0ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MQ29s
bGVjdGlvbio+KHRoaXMpLT50cmF2ZXJzZUZvcndhcmRUb09mZnNldChvZmZzZXQsIGN1cnJlbnRJ
dGVtLCBjdXJyZW50T2Zmc2V0LCBvZmZzZXRJbkFycmF5LCByb290KTsKKyAgICBjdXJyZW50SXRl
bSA9IHRyYXZlcnNlRm9yd2FyZFRvT2Zmc2V0KG9mZnNldCwgY3VycmVudEl0ZW0sIGN1cnJlbnRP
ZmZzZXQsIG9mZnNldEluQXJyYXksIHJvb3QpOwogCiAgICAgaWYgKCFjdXJyZW50SXRlbSkgewog
ICAgICAgICAvLyBEaWQgbm90IGZpbmQgdGhlIGl0ZW0uIE9uIHBsdXMgc2lkZSwgd2Ugbm93IGtu
b3cgdGhlIGxlbmd0aC4KQEAgLTQ5Miw3ICs0MzEsNyBAQCBpbmxpbmUgRWxlbWVudCogSFRNTENv
bGxlY3Rpb246OnRyYXZlcnNlCiAgICAgaWYgKG92ZXJyaWRlc0l0ZW1BZnRlcigpKQogICAgICAg
ICByZXR1cm4gdmlydHVhbEl0ZW1BZnRlcihvZmZzZXRJbkFycmF5LCAwKTsKICAgICBBU1NFUlQo
IW9mZnNldEluQXJyYXkpOwotICAgIGlmIChzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVu
KCkpCisgICAgaWYgKG1fc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbikKICAgICAgICAg
cmV0dXJuIGZpcnN0TWF0Y2hpbmdDaGlsZEVsZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTENv
bGxlY3Rpb24qPih0aGlzKSwgcm9vdCk7CiAgICAgcmV0dXJuIGZpcnN0TWF0Y2hpbmdFbGVtZW50
KHN0YXRpY19jYXN0PGNvbnN0IEhUTUxDb2xsZWN0aW9uKj4odGhpcyksIHJvb3QpOwogfQpAQCAt
NTAyLDcgKzQ0MSw3IEBAIGlubGluZSBFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6dHJhdmVyc2UK
ICAgICBpZiAob3ZlcnJpZGVzSXRlbUFmdGVyKCkpCiAgICAgICAgIHJldHVybiB2aXJ0dWFsSXRl
bUFmdGVyKG9mZnNldEluQXJyYXksIHByZXZpb3VzKTsKICAgICBBU1NFUlQoIW9mZnNldEluQXJy
YXkpOwotICAgIGlmIChzaG91bGRPbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKCkpCisgICAgaWYg
KG1fc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbikKICAgICAgICAgcmV0dXJuIG5leHRN
YXRjaGluZ1NpYmxpbmdFbGVtZW50KHRoaXMsIHByZXZpb3VzKTsKICAgICByZXR1cm4gbmV4dE1h
dGNoaW5nRWxlbWVudCh0aGlzLCBwcmV2aW91cywgcm9vdCk7CiB9CkBAIC01MTgsNyArNDU3LDcg
QEAgaW5saW5lIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjp0cmF2ZXJzZQogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoc2hvdWxkT25seUluY2x1ZGVEaXJlY3RD
aGlsZHJlbigpKSB7CisgICAgaWYgKG1fc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbikg
ewogICAgICAgICB3aGlsZSAoKGN1cnJlbnRFbGVtZW50ID0gbmV4dE1hdGNoaW5nU2libGluZ0Vs
ZW1lbnQodGhpcywgY3VycmVudEVsZW1lbnQpKSkgewogICAgICAgICAgICAgaWYgKCsrY3VycmVu
dE9mZnNldCA9PSBvZmZzZXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50
OwpAQCAtNTI4LDYgKzQ2NywyNCBAQCBpbmxpbmUgRWxlbWVudCogSFRNTENvbGxlY3Rpb246OnRy
YXZlcnNlCiAgICAgcmV0dXJuIHRyYXZlcnNlTWF0Y2hpbmdFbGVtZW50c0ZvcndhcmRUb09mZnNl
dCh0aGlzLCBvZmZzZXQsIGN1cnJlbnRFbGVtZW50LCBjdXJyZW50T2Zmc2V0LCByb290KTsKIH0K
IAordm9pZCBIVE1MQ29sbGVjdGlvbjo6aW52YWxpZGF0ZUNhY2hlKCkgY29uc3QKK3sKKyAgICBt
X2NhY2hlZEVsZW1lbnQgPSBudWxscHRyOworICAgIG1faXNMZW5ndGhDYWNoZVZhbGlkID0gZmFs
c2U7CisgICAgbV9pc0VsZW1lbnRDYWNoZVZhbGlkID0gZmFsc2U7CisgICAgbV9pc05hbWVDYWNo
ZVZhbGlkID0gZmFsc2U7CisgICAgbV9pc0l0ZW1SZWZFbGVtZW50c0NhY2hlVmFsaWQgPSBmYWxz
ZTsKKyAgICBtX2lkQ2FjaGUuY2xlYXIoKTsKKyAgICBtX25hbWVDYWNoZS5jbGVhcigpOworICAg
IG1fY2FjaGVkRWxlbWVudHNBcnJheU9mZnNldCA9IDA7Cit9CisKK3ZvaWQgSFRNTENvbGxlY3Rp
b246OmludmFsaWRhdGVJZE5hbWVDYWNoZU1hcHMoKSBjb25zdAoreworICAgIG1faWRDYWNoZS5j
bGVhcigpOworICAgIG1fbmFtZUNhY2hlLmNsZWFyKCk7Cit9CisKIE5vZGUqIEhUTUxDb2xsZWN0
aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewogICAgIC8v
IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vd29ya3Nob3AvYXV0aG9yL2RodG1sL3JlZmVyZW5j
ZS9tZXRob2RzL25hbWVkaXRlbS5hc3AKQEAgLTU1Nyw3ICs1MTQsNyBAQCBOb2RlKiBIVE1MQ29s
bGVjdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0CiAKICAgICAgICAgaWYgKGNhbmRpZGF0ZQogICAg
ICAgICAgICAgJiYgaXNNYXRjaGluZ0VsZW1lbnQodGhpcywgY2FuZGlkYXRlKQotICAgICAgICAg
ICAgJiYgKHNob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4oKSA/IGNhbmRpZGF0ZS0+cGFy
ZW50Tm9kZSgpID09ICZyb290IDogY2FuZGlkYXRlLT5pc0Rlc2NlbmRhbnRPZigmcm9vdCkpKQor
ICAgICAgICAgICAgJiYgKG1fc2hvdWxkT25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbiA/IGNhbmRp
ZGF0ZS0+cGFyZW50Tm9kZSgpID09ICZyb290IDogY2FuZGlkYXRlLT5pc0Rlc2NlbmRhbnRPZigm
cm9vdCkpKQogICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDE1ODY1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiAr
MjQsOSBAQAogI2RlZmluZSBIVE1MQ29sbGVjdGlvbl9oCiAKICNpbmNsdWRlICJDb2xsZWN0aW9u
VHlwZS5oIgorI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkxpdmVOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0z
MiwxMyArMzUsMjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBIVE1MQ29sbGVj
dGlvbiA6IHB1YmxpYyBMaXZlTm9kZUxpc3RCYXNlIHsKK2NsYXNzIEVsZW1lbnQ7CisKK2NsYXNz
IEhUTUxDb2xsZWN0aW9uIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50
ZWQ8SFRNTENvbGxlY3Rpb24+IHsKIHB1YmxpYzoKKyAgICBlbnVtIEl0ZW1BZnRlck92ZXJyaWRl
VHlwZSB7CisgICAgICAgIE92ZXJyaWRlc0l0ZW1BZnRlciwKKyAgICAgICAgRG9lc05vdE92ZXJy
aWRlSXRlbUFmdGVyLAorICAgIH07CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQ29sbGVj
dGlvbj4gY3JlYXRlKENvbnRhaW5lck5vZGUmIGJhc2UsIENvbGxlY3Rpb25UeXBlKTsKICAgICB2
aXJ0dWFsIH5IVE1MQ29sbGVjdGlvbigpOwogCiAgICAgLy8gRE9NIEFQSQotICAgIHZpcnR1YWwg
Tm9kZSogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgT1ZFUlJJREU7
CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgTm9kZSogaXRlbSh1bnNpZ25lZCBv
ZmZzZXQpIGNvbnN0OworICAgIHZpcnR1YWwgTm9kZSogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gdGFncyhjb25zdCBT
dHJpbmcmKTsKIAogICAgIC8vIE5vbi1ET00gQVBJCkBAIC02Niw2ICs3OCwyMCBAQCBwdWJsaWM6
CiAgICAgRWxlbWVudCogdHJhdmVyc2VGaXJzdEVsZW1lbnQodW5zaWduZWQmIG9mZnNldEluQXJy
YXksIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0OwogICAgIEVsZW1lbnQqIHRyYXZlcnNlRm9y
d2FyZFRvT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCwgRWxlbWVudCogY3VycmVudEVsZW1lbnQsIHVu
c2lnbmVkJiBjdXJyZW50T2Zmc2V0LCB1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgQ29udGFpbmVy
Tm9kZSogcm9vdCkgY29uc3Q7CiAKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNSb290ZWRBdERv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9yb290VHlwZSA9PSBOb2RlTGlzdElzUm9vdGVkQXRE
b2N1bWVudDsgfQorICAgIEFMV0FZU19JTkxJTkUgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGlu
dmFsaWRhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxOb2RlTGlzdEludmFs
aWRhdGlvblR5cGU+KG1faW52YWxpZGF0aW9uVHlwZSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIENv
bGxlY3Rpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2xsZWN0aW9u
VHlwZT4obV9jb2xsZWN0aW9uVHlwZSk7IH0KKyAgICBDb250YWluZXJOb2RlJiBvd25lck5vZGUo
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihtX293bmVyTm9kZS5n
ZXQoKSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW52YWxpZGF0ZUNhY2hlKGNvbnN0IFF1
YWxpZmllZE5hbWUqIGF0dHJOYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFhdHRyTmFt
ZSB8fCBzaG91bGRJbnZhbGlkYXRlVHlwZU9uQXR0cmlidXRlQ2hhbmdlKGludmFsaWRhdGlvblR5
cGUoKSwgKmF0dHJOYW1lKSkKKyAgICAgICAgICAgIGludmFsaWRhdGVDYWNoZSgpOworICAgICAg
ICBlbHNlIGlmICgqYXR0ck5hbWUgPT0gSFRNTE5hbWVzOjppZEF0dHIgfHwgKmF0dHJOYW1lID09
IEhUTUxOYW1lczo6bmFtZUF0dHIpCisgICAgICAgICAgICBpbnZhbGlkYXRlSWROYW1lQ2FjaGVN
YXBzKCk7CisgICAgfQorICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlKCkgY29uc3Q7CisgICAgdm9p
ZCBpbnZhbGlkYXRlSWROYW1lQ2FjaGVNYXBzKCkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBI
VE1MQ29sbGVjdGlvbihDb250YWluZXJOb2RlJiBiYXNlLCBDb2xsZWN0aW9uVHlwZSwgSXRlbUFm
dGVyT3ZlcnJpZGVUeXBlKTsKIApAQCAtNzcsMTggKzEwMyw2NyBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBhcHBlbmRJZENhY2hlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRWxlbWVudCogZWxl
bWVudCkgY29uc3QgeyBhcHBlbmQobV9pZENhY2hlLCBuYW1lLCBlbGVtZW50KTsgfQogICAgIHZv
aWQgYXBwZW5kTmFtZUNhY2hlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRWxlbWVudCogZWxl
bWVudCkgY29uc3QgeyBhcHBlbmQobV9uYW1lQ2FjaGUsIG5hbWUsIGVsZW1lbnQpOyB9CiAKKyAg
ICBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX293bmVyTm9kZS0+ZG9jdW1l
bnQoKTsgfQorICAgIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlKCkgY29uc3Q7CisgICAgYm9vbCBv
dmVycmlkZXNJdGVtQWZ0ZXIoKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRlc0l0ZW1BZnRlcjsg
fQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzRWxlbWVudENhY2hlVmFsaWQoKSBjb25zdCB7
IHJldHVybiBtX2lzRWxlbWVudENhY2hlVmFsaWQ7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEVsZW1l
bnQqIGNhY2hlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZEVsZW1lbnQ7IH0KKyAg
ICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNhY2hlZEVsZW1lbnRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2NhY2hlZEVsZW1lbnRPZmZzZXQ7IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c0xlbmd0aENhY2hlVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzTGVuZ3RoQ2FjaGVWYWxpZDsg
fQorICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2FjaGVkTGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9jYWNoZWRMZW5ndGg7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0TGVuZ3RoQ2Fj
aGUodW5zaWduZWQgbGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9jYWNoZWRMZW5ndGgg
PSBsZW5ndGg7CisgICAgICAgIG1faXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICB9Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldENhY2hlZEVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwg
dW5zaWduZWQgb2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgbV9jYWNoZWRFbGVtZW50ID0g
JmVsZW1lbnQ7CisgICAgICAgIG1fY2FjaGVkRWxlbWVudE9mZnNldCA9IG9mZnNldDsKKyAgICAg
ICAgbV9pc0VsZW1lbnRDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICB9CisgICAgdm9pZCBzZXRDYWNo
ZWRFbGVtZW50KEVsZW1lbnQmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGVsZW1lbnRzQXJy
YXlPZmZzZXQpIGNvbnN0OworCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzSXRlbVJlZkVsZW1l
bnRzQ2FjaGVWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNJdGVtUmVmRWxlbWVudHNDYWNoZVZh
bGlkOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEl0ZW1SZWZFbGVtZW50c0NhY2hlVmFs
aWQoKSBjb25zdCB7IG1faXNJdGVtUmVmRWxlbWVudHNDYWNoZVZhbGlkID0gdHJ1ZTsgfQorCisg
ICAgQUxXQVlTX0lOTElORSBOb2RlTGlzdFJvb3RUeXBlIHJvb3RUeXBlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Tm9kZUxpc3RSb290VHlwZT4obV9yb290VHlwZSk7IH0KKworICAgIGJv
b2wgaGFzTmFtZUNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV9pc05hbWVDYWNoZVZhbGlkOyB9Cisg
ICAgdm9pZCBzZXRIYXNOYW1lQ2FjaGUoKSBjb25zdCB7IG1faXNOYW1lQ2FjaGVWYWxpZCA9IHRy
dWU7IH0KKwogcHJpdmF0ZToKICAgICBFbGVtZW50KiB0cmF2ZXJzZU5leHRFbGVtZW50KHVuc2ln
bmVkJiBvZmZzZXRJbkFycmF5LCBFbGVtZW50KiBwcmV2aW91cywgQ29udGFpbmVyTm9kZSogcm9v
dCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNMaXZlTm9kZUxpc3QoKSBjb25zdCBPVkVS
UklERSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gdHJ1ZTsgfQotCiAgICAgc3RhdGlj
IHZvaWQgYXBwZW5kKE5vZGVDYWNoZU1hcCYsIGNvbnN0IEF0b21pY1N0cmluZyYsIEVsZW1lbnQq
KTsKIAorICAgIEVsZW1lbnQqIGVsZW1lbnRCZWZvcmVPckFmdGVyQ2FjaGVkRWxlbWVudCh1bnNp
Z25lZCBvZmZzZXQsIENvbnRhaW5lck5vZGUqIHJvb3QpIGNvbnN0OworICAgIGJvb2wgaXNMYXN0
SXRlbUNsb3NlclRoYW5MYXN0T3JDYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7Cisg
ICAgYm9vbCBpc0ZpcnN0SXRlbUNsb3NlclRoYW5DYWNoZWRJdGVtKHVuc2lnbmVkIG9mZnNldCkg
Y29uc3Q7CisgICAgRWxlbWVudCogaXRlcmF0ZUZvclByZXZpb3VzRWxlbWVudChFbGVtZW50KiBj
dXJyZW50KSBjb25zdDsKKyAgICBFbGVtZW50KiBpdGVtQmVmb3JlKEVsZW1lbnQqIHByZXZpb3Vz
SXRlbSkgY29uc3Q7CisKKyAgICBSZWY8Q29udGFpbmVyTm9kZT4gbV9vd25lck5vZGU7CisgICAg
bXV0YWJsZSBFbGVtZW50KiBtX2NhY2hlZEVsZW1lbnQ7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBt
X2NhY2hlZExlbmd0aDsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY2FjaGVkRWxlbWVudE9mZnNl
dDsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1faXNMZW5ndGhDYWNoZVZhbGlkIDogMTsKKyAgICBt
dXRhYmxlIHVuc2lnbmVkIG1faXNFbGVtZW50Q2FjaGVWYWxpZCA6IDE7CisgICAgY29uc3QgdW5z
aWduZWQgbV9yb290VHlwZSA6IDI7CisgICAgY29uc3QgdW5zaWduZWQgbV9pbnZhbGlkYXRpb25U
eXBlIDogNDsKKyAgICBjb25zdCB1bnNpZ25lZCBtX3Nob3VsZE9ubHlJbmNsdWRlRGlyZWN0Q2hp
bGRyZW4gOiAxOworCisgICAgLy8gRnJvbSBIVE1MQ29sbGVjdGlvbgorICAgIG11dGFibGUgdW5z
aWduZWQgbV9pc05hbWVDYWNoZVZhbGlkIDogMTsKKyAgICBjb25zdCB1bnNpZ25lZCBtX2NvbGxl
Y3Rpb25UeXBlIDogNTsKKyAgICBjb25zdCB1bnNpZ25lZCBtX292ZXJyaWRlc0l0ZW1BZnRlciA6
IDE7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2lzSXRlbVJlZkVsZW1lbnRzQ2FjaGVWYWxpZCA6
IDE7CisKICAgICBtdXRhYmxlIE5vZGVDYWNoZU1hcCBtX2lkQ2FjaGU7CiAgICAgbXV0YWJsZSBO
b2RlQ2FjaGVNYXAgbV9uYW1lQ2FjaGU7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2NhY2hlZEVs
ZW1lbnRzQXJyYXlPZmZzZXQ7Ci0KLSAgICBmcmllbmQgY2xhc3MgTGl2ZU5vZGVMaXN0QmFzZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1l
Q29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFt
ZUNvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNTg2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
SFRNTE5hbWVDb2xsZWN0aW9uOjp+SFRNTE5hbWVDb2xsZWN0aW9uKAogewogICAgIEFTU0VSVCh0
eXBlKCkgPT0gV2luZG93TmFtZWRJdGVtcyB8fCB0eXBlKCkgPT0gRG9jdW1lbnROYW1lZEl0ZW1z
KTsKIAotICAgIGRvY3VtZW50KCkubm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21pY05h
bWUodGhpcywgdHlwZSgpLCBtX25hbWUpOworICAgIGRvY3VtZW50KCkubm9kZUxpc3RzKCktPnJl
bW92ZUNhY2hlZENvbGxlY3Rpb24odGhpcywgbV9uYW1lKTsKIH0KIAogYm9vbCBXaW5kb3dOYW1l
Q29sbGVjdGlvbjo6bm9kZU1hdGNoZXNJZk5hbWVBdHRyaWJ1dGVNYXRjaChFbGVtZW50KiBlbGVt
ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbGFibGVFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNTg2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsYWJsZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IExh
YmVsYWJsZUVsZW1lbnQ6OmwKICAgICBpZiAoIXN1cHBvcnRMYWJlbHMoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS5lbnN1cmVOb2RlTGlzdHMoKS5h
ZGRDYWNoZVdpdGhBdG9taWNOYW1lPExhYmVsc05vZGVMaXN0PigqdGhpcywgTGFiZWxzTm9kZUxp
c3RUeXBlLCBzdGFyQXRvbSk7CisgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCkuZW5zdXJlTm9k
ZUxpc3RzKCkuYWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxMYWJlbHNOb2RlTGlzdD4oKnRoaXMsIExp
dmVOb2RlTGlzdDo6TGFiZWxzTm9kZUxpc3RUeXBlLCBzdGFyQXRvbSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYmNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuY3Bw
CShyZXZpc2lvbiAxNTg2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBMYWJlbHNOb2RlTGlzdDo6TGFi
ZWxzTm9kZUxpc3QoTGFiZWxhYmxlCiAKIExhYmVsc05vZGVMaXN0Ojp+TGFiZWxzTm9kZUxpc3Qo
KQogewotICAgIG93bmVyTm9kZSgpLm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9taWNO
YW1lKHRoaXMsIExhYmVsc05vZGVMaXN0VHlwZSwgc3RhckF0b20pOworICAgIG93bmVyTm9kZSgp
Lm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9taWNOYW1lKHRoaXMsIHN0YXJBdG9tKTsK
IH0gCiAgICAgCiBib29sIExhYmVsc05vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0
Tm9kZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmgJKHJldmlz
aW9uIDE1ODY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IExhYmVsc05vZGVMaXN0IEZJTkFMIDogcHVibGljIExpdmVOb2RlTGlzdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWY8TGFiZWxzTm9kZUxpc3Q+IGNyZWF0ZShMYWJlbGFibGVFbGVtZW50
JiBmb3JOb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJpbmcmKQorICAg
IHN0YXRpYyBQYXNzUmVmPExhYmVsc05vZGVMaXN0PiBjcmVhdGUoTGFiZWxhYmxlRWxlbWVudCYg
Zm9yTm9kZSwgVHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJpbmcmKQogICAgIHsKICAgICAgICAg
QVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IExhYmVsc05vZGVMaXN0VHlwZSk7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IExhYmVsc05vZGVMaXN0KGZvck5vZGUpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcAkocmV2aXNpb24gMTU4NjU5KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsNyBAQCBSYWRpb05vZGVMaXN0OjpSYWRpb05vZGVMaXN0KENvbnRhaW5lck5vCiAKIFJh
ZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVMaXN0KCkKIHsKLSAgICBvd25lck5vZGUoKS5ub2RlTGlz
dHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCBSYWRpb05vZGVMaXN0VHlwZSwg
bV9uYW1lKTsKKyAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRv
bWljTmFtZSh0aGlzLCBtX25hbWUpOwogfQogCiBzdGF0aWMgaW5saW5lIEhUTUxJbnB1dEVsZW1l
bnQqIHRvUmFkaW9CdXR0b25JbnB1dEVsZW1lbnQoTm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvUmFkaW9Ob2RlTGlzdC5oCShyZXZpc2lvbiAxNTg2NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL1JhZGlvTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJhZGlvTm9kZUxpc3QgOiBwdWJsaWMgTGl2ZU5v
ZGVMaXN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSYWRpb05vZGVMaXN0PiBj
cmVhdGUoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIENvbGxlY3Rpb25UeXBlIHR5cGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSYWRpb05vZGVMaXN0
PiBjcmVhdGUoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIFR5cGUgdHlwZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lKQogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09
IFJhZGlvTm9kZUxpc3RUeXBlKTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSYWRpb05v
ZGVMaXN0KHJvb3ROb2RlLCBuYW1lKSk7Cg==
</data>
<flag name="review"
          id="238906"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="238895"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>