<?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>20865</bug_id>
          
          <creation_ts>2008-09-15 16:22:16 -0700</creation_ts>
          <short_desc>Kill JSSVGLazyEventListener and cleanup event handling</short_desc>
          <delta_ts>2008-09-15 17:38:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>darin</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>91267</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-09-15 16:22:16 -0700</bug_when>
    <thetext>Kill JSSVGLazyEventListener, merge with JSLazyEventListener.

Cleanup all event handling related functions, rename &amp; generalize the functions (dispatchHTMLEvent, setHTMLWindowEventListener etc..)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91268</commentid>
    <comment_count>1</comment_count>
      <attachid>23450</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-09-15 16:22:59 -0700</bug_when>
    <thetext>Created attachment 23450
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91273</commentid>
    <comment_count>2</comment_count>
      <attachid>23450</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-15 16:46:44 -0700</bug_when>
    <thetext>Comment on attachment 23450
Initial patch

I&apos;m not really sure ForType and ForTypeAndAtrribute are really worth the extra characters.  I think they&apos;re probably just as clear w/o the extra typing.

I think it&apos;s strange that a bool flips between &quot;attached to a node&quot; and &quot;attached to the window&quot;.  That could also be a 2-value enum (and might be clearer that way).

Seems fine.  Certainly better than what we have today.  We&apos;ll probably go through another round of cleanup yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91274</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-09-15 16:52:41 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 23450 [edit])
&gt; I&apos;m not really sure ForType and ForTypeAndAtrribute are really worth the extra
&gt; characters.  I think they&apos;re probably just as clear w/o the extra typing.
I agree the name is weak, we should eventually find a nicer one, before landing. Though some extra characters should be preserved to differentiate between the DOM dispatchEvent/addEV/removeEV methods and our version.
&gt; 
&gt; I think it&apos;s strange that a bool flips between &quot;attached to a node&quot; and
&gt; &quot;attached to the window&quot;.  That could also be a 2-value enum (and might be
&gt; clearer that way).
Yeah, I should talk to Sam, about that.

&gt; Seems fine.  Certainly better than what we have today.  We&apos;ll probably go
&gt; through another round of cleanup yet.
Definately. Thanks for r+ :-)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91275</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-09-15 17:03:16 -0700</bug_when>
    <thetext>Landed in r36466.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91276</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-15 17:04:00 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; I&apos;m not really sure ForType and ForTypeAndAtrribute are really worth the extra
&gt; &gt; characters.  I think they&apos;re probably just as clear w/o the extra typing.
&gt;
&gt; I agree the name is weak, we should eventually find a nicer one, before
&gt; landing. Though some extra characters should be preserved to differentiate
&gt; between the DOM dispatchEvent/addEV/removeEV methods and our version.

Don&apos;t the extra arguments differentiate the function enough? Do we really need the different name? When function names get that long it starts to really hurt readability.

&gt; &gt; I think it&apos;s strange that a bool flips between &quot;attached to a node&quot; and
&gt; &gt; &quot;attached to the window&quot;. That could also be a 2-value enum (and might be
&gt; &gt; clearer that way).
&gt;
&gt; Yeah, I should talk to Sam, about that.

I think an enum would be better than a bool. But how about two separate functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91283</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-09-15 17:38:22 -0700</bug_when>
    <thetext>&gt; Don&apos;t the extra arguments differentiate the function enough? Do we really need
&gt; the different name? When function names get that long it starts to really hurt
&gt; readability.

The arguments are indeed sufficient to differentiate, I could prepare a new patch, if you like.
Proposal:
setEventListenerForType -&gt; setEventListener
setEventListenerForTypeAndAttribute -&gt; setEventListenerByAttribute
removeEventListenerForType -&gt; removeEventListener
eventListenerForType -&gt; getEventListener

I don&apos;t really like getEventListener, maybe retrieve/cached/whatever as prefix?
I&apos;m open for any suggestions.
 
&gt; &gt; &gt; I think it&apos;s strange that a bool flips between &quot;attached to a node&quot; and
&gt; &gt; &gt; &quot;attached to the window&quot;. That could also be a 2-value enum (and might be
&gt; &gt; &gt; clearer that way).
&gt; &gt;
&gt; &gt; Yeah, I should talk to Sam, about that.
&gt; 
&gt; I think an enum would be better than a bool. But how about two separate
&gt; functions?
That&apos;s definately possible, but we&apos;d need to store the enum anyways to differentiate between &quot;attached to node&quot; / &quot;attached to window&quot;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23450</attachid>
            <date>2008-09-15 16:22:59 -0700</date>
            <delta_ts>2008-09-15 16:46:44 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>PatchForEric.diff</filename>
            <type>text/plain</type>
            <size>96640</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjQ2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYyIEBACisyMDA4LTA5LTE1ICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUHJlcGFyZSBIVE1MU2NyaXB0RWxlbWVudCAmIFNWR1NjcmlwdEVsZW1lbnQgdW5pZmlj
YXRpb24sIGFuZCB1bmlmaWNhdGlvbiBvZiBldmVudCBoYW5kbGluZy4KKworICAgICAgICBTZXZl
cmFsIHJlbmFtZXM6CisgICAgICAgIGRpc3BhdGNoSFRNTEV2ZW50IC0+IGRpc3BhdGNoRXZlbnRG
b3JUeXBlCisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyIC0+IHNldEV2ZW50TGlzdGVuZXJG
b3JUeXBlCisgICAgICAgIGdldEhUTUxFdmVudExpc3RlbmVyIC0+IGV2ZW50TGlzdGVuZXJGb3JU
eXBlCisgICAgICAgIHJlbW92ZUhUTUxFdmVudExpc3RlbmVyIC0+IHJlbW92ZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlCisgICAgICAgIGpzSFRNTEV2ZW50TGlzdGVuZXJzIC0+IGpzRXZlbnRMaXN0ZW5l
cnNBdHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlcworICAgICAgICBqc1VucHJvdGVjdGVkSFRNTEV2
ZW50TGlzdGVuZXJzIC0+IGpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyc0F0dGFjaGVkVG9FdmVu
dFRhcmdldE5vZGVzCisgICAgICAgIGlzSFRNTEV2ZW50TGlzdGVuZXIgLT4gaXNBdHRhY2hlZFRv
RXZlbnRUYXJnZXROb2RlCisKKyAgICAgICAgU2ltaWxhciByZW5hbWVzIGZvciB0aGUgZGlzcGF0
Y2gvZ2V0L3NldC8qV2luZG93KkV2ZW50IGZ1bmN0aW9ucy4KKyAgICAgICAgS2lsbCBKU1NWR0xh
enlFdmVudExpc3RlbmVyIGFuZCBtZXJnZSB3aXRoIEpTTGF6eUV2ZW50TGlzdGVuZXIuCisKKyAg
ICAgICAgTW9zdCBpbXBvcnRhbnQgY2hhbmdlOiBSZW5hbWUgc2V0SFRNTEV2ZW50TGlzdGVuZXIg
dG8gc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUsCisgICAgICAgIGFmZmVjdHMg
bW9zdCBmaWxlcyBpbiBodG1sLywgdGhvdWdoIHRoZXJlJ3Mgbm8gcmVhc29uIHRoaXMgZnVuY3Rp
b24gc2hvdWxkIGJlIEhUTUwgc3BlY2lmaWMuCisKKyAgICAgICAgTm8gZnVuY3Rpb25hbCBjaGFu
Z2VzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6On5K
U0RPTVdpbmRvd0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpzZXRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmdldExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6ZmluZEpTRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmZpbmRPckNyZWF0ZUpTRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OmZpbmRKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jh
c2U6OmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6anNFdmVudExpc3RlbmVyc0F0dGFjaGVkVG9FdmVudFRh
cmdldE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6anNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXJzQXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZXMpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Fic3RyYWN0RXZlbnRMaXN0
ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SlNBYnN0cmFjdEV2ZW50TGlz
dGVuZXI6OmlzQXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI6On5KU1VucHJvdGVj
dGVkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OkpT
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6On5KU0V2
ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5lcjo6SlNM
YXp5RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpldmVudFBhcmFtZXRlck5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldE5vZGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQWJzdHJhY3RFdmVu
dExpc3RlbmVyOjpKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlz
dGVuZXI6Oik6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVyOjpjcmVhdGUp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpzZXRMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6Z2V0TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTU1ZHTGF6eUV2ZW50TGlzdGVuZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTU1ZHTGF6eUV2ZW50TGlzdGVuZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmNyZWF0ZUhUTUxFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6Y3JlYXRlU1ZHRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBkb20vRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldEZvY3VzZWROb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpoYW5kbGVXaW5kb3dFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6c2V0V2luZG93RXZlbnRMaXN0ZW5lckZvclR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OndpbmRvd0V2ZW50TGlzdGVuZXJGb3JUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyRm9yVHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkV2luZG93RXZlbnRMaXN0ZW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aGFzV2luZG93RXZlbnRMaXN0ZW5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlUGVuZGluZ0ZyYW1lQmVmb3JlVW5sb2Fk
RXZlbnRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3JlYXRlRXZlbnRMaXN0
ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0V2luZG93RXZlbnRMaXN0ZW5l
ckZvclR5cGVBbmRBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAg
ICAqIGRvbS9FdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpFdmVudExpc3RlbmVy
Ojppc0F0dGFjaGVkVG9FdmVudFRhcmdldE5vZGUpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdl
dE5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEZv
Y3VzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEJs
dXJFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoRXZl
bnRGb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6cmVtb3ZlRXZl
bnRMaXN0ZW5lckZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpz
ZXRFdmVudExpc3RlbmVyRm9yVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5v
ZGU6OnNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50VGFyZ2V0Tm9kZTo6ZXZlbnRMaXN0ZW5lckZvclR5cGUpOgorICAgICAgICAqIGRv
bS9FdmVudFRhcmdldE5vZGUuaDoKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTFRva2VuaXplcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAq
IGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudCk6CisgICAgICAgICogaHRt
bC9IVE1MQm9keUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MQnV0dG9uRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxFbGVtZW50OjpjaGVja0RURCk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpvbkNoYW5nZSk6CisgICAgICAgICogaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
OjpwcmVwYXJlU3VibWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAqIGh0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRnJhbWVTZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICog
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VMb2FkZXI6OmRpc3BhdGNoTG9h
ZEV2ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6b25TZWFyY2gpOgorICAgICAgICAqIGh0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVt
ZW50Ojphc3luY0V2ZW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50Ojpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
UGxheWVyTmV0d29ya1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OnNlZWspOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5
ZXJUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp3aWxs
U2F2ZVRvQ2FjaGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTY3JpcHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hMb2FkRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCk6CisgICAgICAgICog
aHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MVG9rZW5pemVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAg
ICAgKiBwYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcik6CisgICAg
ICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpjYW5Nb3VzZURvd25TdGFydFNlbGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmNhbk1vdXNlRHJhZ0V4dGVuZFNlbGVjdCk6CisgICAgICAgICogcGFnZS9GcmFtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VuZFNjcm9sbEV2ZW50KToKKyAgICAgICAg
KiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV0d29ya1N0YXRlQ2hhbmdlZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6
OnNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
Y3BwOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaDoKKyAgICAgICAgKiBz
dmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpmaW5pc2hQYXJz
aW5nQ2hpbGRyZW4pOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6CisgICAgICAgICogc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50Lmg6CisKIDIw
MDgtMDktMTUgIERhdmlkIFNtaXRoICA8Y2F0ZmlzaC5tYW5AZ21haWwuY29tPgogCiAgICAgICAg
ICJKdXN0IGRvIGl0IidkIGJ5IE1hcmsgUm93ZQpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNjQ1OSkK
KysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI4NDQsOCArMjg0
NCw2IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JXCQodG9wX3NyY2RpcikvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycwogCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAotCVdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5jcHAgXAotCVdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZH
TGVuZ3RoQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3Rv
bS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQT0RUeXBlV3JhcHBlci5oIFwKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBy
bwkocmV2aXNpb24gMzY0NTkpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDI3LDcgKzE0MjcsNiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsK
ICAgICAgICAgY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIFwKICAgICAgICAgcmVuZGVyaW5n
L1NWR1JlbmRlclN0eWxlLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9TVkdSZW5kZXJTdHlsZURl
ZnMuY3BwIFwKLSAgICAgICAgYmluZGluZ3MvanMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5jcHAg
XAogICAgICAgICBzdmcvU1ZHWm9vbUV2ZW50LmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9Qb2lu
dGVyRXZlbnRzSGl0UnVsZXMuY3BwIFwKICAgICAgICAgc3ZnL0ZpbHRlckVmZmVjdC5jcHAgXApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAzNjQ1OSkK
KysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkK
QEAgLTEzMTE3LDE0ICsxMzExNyw2IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8Rmls
ZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1NWR0xhenlFdmVudExpc3Rl
bmVyLmNwcCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1NWR0xhenlFdmVudExpc3RlbmVyLmgiDQotCQkJCQk+
DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNcSlNTVkdMZW5ndGhDdXN0b20uY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDM2
NDU5KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTI3OTksOCArMjc5OSw2IEBACiAJCUIyMDExMTA3MEFCNzc0MDUwMERCMEU2
OCAvKiBKU1NWR0FFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIyMDExMTA1MEFCNzc0MDUwMERCMEU2OCAvKiBKU1NWR0FFbGVtZW50LmNw
cCAqLzsgfTsKIAkJQjIwMTExMDgwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMDExMTA2MEFC
Nzc0MDUwMERCMEU2OCAvKiBKU1NWR0FFbGVtZW50LmggKi87IH07CiAJCUIyMTEyN0E2MEIzMTg2
NzcwMDA5QkU1MyAvKiBKU1NWR1BPRFR5cGVXcmFwcGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjExMjdBNTBCMzE4Njc3MDAwOUJFNTMgLyogSlNT
VkdQT0RUeXBlV3JhcHBlci5oICovOyB9OwotCQlCMjIyNzdCMTBEMDBCRURDMDA3MUI3ODIgLyog
SlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCMjIyNzdBRjBEMDBCRURDMDA3MUI3ODIgLyogSlNTVkdMYXp5RXZl
bnRMaXN0ZW5lci5jcHAgKi87IH07Ci0JCUIyMjI3N0IyMEQwMEJFREMwMDcxQjc4MiAvKiBKU1NW
R0xhenlFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjIyNzdCMDBEMDBCRURDMDA3MUI3ODIgLyogSlNTVkdMYXp5RXZlbnRMaXN0
ZW5lci5oICovOyB9OwogCQlCMjIyNzk2MjBEMDBCRjIyMDA3MUI3ODIgLyogQ29sb3JEaXN0YW5j
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIy
NzdDQjBEMDBCRjFGMDA3MUI3ODIgLyogQ29sb3JEaXN0YW5jZS5jcHAgKi87IH07CiAJCUIyMjI3
OTYzMEQwMEJGMjIwMDcxQjc4MiAvKiBDb2xvckRpc3RhbmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyNzdDQzBEMDBCRjFGMDA3MUI3ODIgLyog
Q29sb3JEaXN0YW5jZS5oICovOyB9OwogCQlCMjIyNzk2NDBEMDBCRjIyMDA3MUI3ODIgLyogR3Jh
ZGllbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjIyNzdDRDBEMDBCRjFGMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmgg
Ki87IH07CkBAIC03MDg4LDggKzcwODYsNiBAQAogCQlCMjAxMTEwNTBBQjc3NDA1MDBEQjBFNjgg
LyogSlNTVkdBRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNTVkdBRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyMDEx
MTA2MEFCNzc0MDUwMERCMEU2OCAvKiBKU1NWR0FFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1NWR0FFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyMTEyN0E1MEIzMTg2NzcwMDA5QkU1MyAvKiBKU1NWR1BPRFR5cGVXcmFwcGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR1BPRFR5cGVXcmFwcGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyMjI3N0FGMEQwMEJFREMwMDcxQjc4MiAv
KiBKU1NWR0xhenlFdmVudExpc3RlbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1NWR0xhenlFdmVudExpc3RlbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQjIyMjc3QjAwRDAwQkVEQzAwNzFCNzgyIC8qIEpTU1ZHTGF6eUV2ZW50TGlz
dGVuZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHTGF6eUV2ZW50
TGlzdGVuZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjIyMjc3Q0IwRDAwQkYx
RjAwNzFCNzgyIC8qIENvbG9yRGlzdGFuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvbG9yRGlzdGFuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMjIyNzdDQzBEMDBCRjFGMDA3MUI3ODIgLyogQ29sb3JEaXN0YW5jZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29sb3JEaXN0YW5jZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMjIyNzdDRDBEMDBCRjFGMDA3MUI3ODIgLyogR3JhZGllbnRBdHRy
aWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFkaWVudEF0dHJp
YnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTE3LDggKzEyNTEzLDYg
QEAKIAkJCQlDMDkxNTg4OTBEQjQyMDkyMDBFNTVBRjQgLyogSlNRdWFyYW50aW5lZE9iamVjdFdy
YXBwZXIuaCAqLywKIAkJCQlCQzM0NTI0MTBEN0UwMEVBMDAxNjU3NEEgLyogSlNSR0JDb2xvci5j
cHAgKi8sCiAJCQkJQkMzNDUyNDIwRDdFMDBFQTAwMTY1NzRBIC8qIEpTUkdCQ29sb3IuaCAqLywK
LQkJCQlCMjIyNzdBRjBEMDBCRURDMDA3MUI3ODIgLyogSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5j
cHAgKi8sCi0JCQkJQjIyMjc3QjAwRDAwQkVEQzAwNzFCNzgyIC8qIEpTU1ZHTGF6eUV2ZW50TGlz
dGVuZXIuaCAqLywKIAkJCQlCMjExMjdBNTBCMzE4Njc3MDAwOUJFNTMgLyogSlNTVkdQT0RUeXBl
V3JhcHBlci5oICovLAogCQkJCUJDMzQ4QkU3MERCODAzNTQwMDRBQkFCOSAvKiBKU1hNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3IuY3BwICovLAogCQkJCUJDMzQ4QkU4MERCODAzNTQwMDRBQkFCOSAv
KiBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuaCAqLywKQEAgLTE0NzU4LDcgKzE0NzUyLDYg
QEAKIAkJCQlCMkZBM0Q5QjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdHRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjJGQTNEOUQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHR3JhZGllbnRF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q5RjBBQjc1QTZGMDAwRTVBQzQgLyog
SlNTVkdJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUIyMjI3N0IyMEQwMEJFREMw
MDcxQjc4MiAvKiBKU1NWR0xhenlFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkZBM0RBMTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdMZW5ndGguaCBpbiBIZWFkZXJzICovLAog
CQkJCUIyRkEzREEzMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0xlbmd0aExpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyRkEzREE3MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0xpbmVFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTE2NjAxLDcgKzE2NTk0LDYgQEAKIAkJCQlCMkZBM0Q5QTBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdHRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkZBM0Q5QzBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdHcmFkaWVudEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjJGQTNEOUUwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHSW1hZ2VFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyMjI3N0IxMEQwMEJFREMwMDcxQjc4MiAvKiBK
U1NWR0xhenlFdmVudExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzREEwMEFC
NzVBNkYwMDBFNUFDNCAvKiBKU1NWR0xlbmd0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZB
M0RBMjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdMZW5ndGhMaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyRkEzREE2MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0xpbmVFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNw
cAkocmV2aXNpb24gMzY0NTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiwxMyArMjMyLDEzIEBAIEpTRE9NV2luZG93QmFz
ZTo6fkpTRE9NV2luZG93QmFzZSgpCiAgICAgY2xlYXJBbGxUaW1lb3V0cygpOwogCiAgICAgLy8g
Q2xlYXIgYW55IGJhY2twb2ludGVycyB0byB0aGUgd2luZG93Ci0KICAgICBMaXN0ZW5lcnNNYXA6
Oml0ZXJhdG9yIGkyID0gZCgpLT5qc0V2ZW50TGlzdGVuZXJzLmJlZ2luKCk7CiAgICAgTGlzdGVu
ZXJzTWFwOjppdGVyYXRvciBlMiA9IGQoKS0+anNFdmVudExpc3RlbmVycy5lbmQoKTsKICAgICBm
b3IgKDsgaTIgIT0gZTI7ICsraTIpCiAgICAgICAgIGkyLT5zZWNvbmQtPmNsZWFyV2luZG93KCk7
Ci0gICAgaTIgPSBkKCktPmpzSFRNTEV2ZW50TGlzdGVuZXJzLmJlZ2luKCk7Ci0gICAgZTIgPSBk
KCktPmpzSFRNTEV2ZW50TGlzdGVuZXJzLmVuZCgpOworCisgICAgaTIgPSBkKCktPmpzRXZlbnRM
aXN0ZW5lcnNBdHRhY2hlZFRvRXZlbnRUYXJnZXROb2Rlcy5iZWdpbigpOworICAgIGUyID0gZCgp
LT5qc0V2ZW50TGlzdGVuZXJzQXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZXMuZW5kKCk7CiAgICAg
Zm9yICg7IGkyICE9IGUyOyArK2kyKQogICAgICAgICBpMi0+c2Vjb25kLT5jbGVhcldpbmRvdygp
OwogCkBAIC0yNDYsOCArMjQ2LDkgQEAgSlNET01XaW5kb3dCYXNlOjp+SlNET01XaW5kb3dCYXNl
KCkKICAgICBVbnByb3RlY3RlZExpc3RlbmVyc01hcDo6aXRlcmF0b3IgZTEgPSBkKCktPmpzVW5w
cm90ZWN0ZWRFdmVudExpc3RlbmVycy5lbmQoKTsKICAgICBmb3IgKDsgaTEgIT0gZTE7ICsraTEp
CiAgICAgICAgIGkxLT5zZWNvbmQtPmNsZWFyV2luZG93KCk7Ci0gICAgaTEgPSBkKCktPmpzVW5w
cm90ZWN0ZWRIVE1MRXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsKLSAgICBlMSA9IGQoKS0+anNVbnBy
b3RlY3RlZEhUTUxFdmVudExpc3RlbmVycy5lbmQoKTsKKworICAgIGkxID0gZCgpLT5qc1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcnNBdHRhY2hlZFRvRXZlbnRUYXJnZXROb2Rlcy5iZWdpbigpOwor
ICAgIGUxID0gZCgpLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnNBdHRhY2hlZFRvRXZlbnRU
YXJnZXROb2Rlcy5lbmQoKTsKICAgICBmb3IgKDsgaTEgIT0gZTE7ICsraTEpCiAgICAgICAgIGkx
LT5zZWNvbmQtPmNsZWFyV2luZG93KCk7CiB9CkBAIC04MzksNyArODQwLDcgQEAgdm9pZCBKU0RP
TVdpbmRvd0Jhc2U6OnNldExpc3RlbmVyKEV4ZWNTdAogICAgIGlmICghZG9jKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBkb2MtPnNldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwg
ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKGV4ZWMsIGZ1bmMsIHRydWUpKTsKKyAgICBkb2Mt
PnNldFdpbmRvd0V2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50VHlwZSwgZmluZE9yQ3JlYXRlSlNF
dmVudExpc3RlbmVyKGV4ZWMsIGZ1bmMsIHRydWUpKTsKIH0KIAogSlNWYWx1ZSogSlNET01XaW5k
b3dCYXNlOjpnZXRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlKSBjb25zdApAQCAtODQ5LDU1ICs4NTAsNTIgQEAgSlNWYWx1ZSogSlNET01XaW5k
b3dCYXNlOjpnZXRMaXN0ZW5lcihFeAogICAgIGlmICghZG9jKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gZG9jLT5nZXRIVE1M
V2luZG93RXZlbnRMaXN0ZW5lcihldmVudFR5cGUpOworICAgIEV2ZW50TGlzdGVuZXIqIGxpc3Rl
bmVyID0gZG9jLT53aW5kb3dFdmVudExpc3RlbmVyRm9yVHlwZShldmVudFR5cGUpOwogICAgIGlm
IChsaXN0ZW5lciAmJiBzdGF0aWNfY2FzdDxKU0V2ZW50TGlzdGVuZXIqPihsaXN0ZW5lciktPmxp
c3RlbmVyT2JqKCkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0V2ZW50TGlzdGVuZXIq
PihsaXN0ZW5lciktPmxpc3RlbmVyT2JqKCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwogfQogCi1K
U0V2ZW50TGlzdGVuZXIqIEpTRE9NV2luZG93QmFzZTo6ZmluZEpTRXZlbnRMaXN0ZW5lcihKU1Zh
bHVlKiB2YWwsIGJvb2wgaHRtbCkKK0pTRXZlbnRMaXN0ZW5lciogSlNET01XaW5kb3dCYXNlOjpm
aW5kSlNFdmVudExpc3RlbmVyKEpTVmFsdWUqIHZhbCwgYm9vbCBhdHRhY2hlZFRvRXZlbnRUYXJn
ZXROb2RlKQogewogICAgIGlmICghdmFsLT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsK
ICAgICBKU09iamVjdCogb2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2YWwpOwotICAg
IExpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gaHRtbCA/IGQoKS0+anNIVE1MRXZlbnRMaXN0ZW5l
cnMgOiBkKCktPmpzRXZlbnRMaXN0ZW5lcnM7CisgICAgTGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMg
PSBhdHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlID8gZCgpLT5qc0V2ZW50TGlzdGVuZXJzQXR0YWNo
ZWRUb0V2ZW50VGFyZ2V0Tm9kZXMgOiBkKCktPmpzRXZlbnRMaXN0ZW5lcnM7CiAgICAgcmV0dXJu
IGxpc3RlbmVycy5nZXQob2JqZWN0KTsKIH0KIAotUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVuZXI+
IEpTRE9NV2luZG93QmFzZTo6ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSogdmFsLCBib29sIGh0bWwpCitQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5l
cj4gSlNET01XaW5kb3dCYXNlOjpmaW5kT3JDcmVhdGVKU0V2ZW50TGlzdGVuZXIoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wgYXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZSkKIHsK
LSAgICBKU0V2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gZmluZEpTRXZlbnRMaXN0ZW5lcih2YWws
IGh0bWwpOwotICAgIGlmIChsaXN0ZW5lcikKKyAgICBpZiAoSlNFdmVudExpc3RlbmVyKiBsaXN0
ZW5lciA9IGZpbmRKU0V2ZW50TGlzdGVuZXIodmFsLCBhdHRhY2hlZFRvRXZlbnRUYXJnZXROb2Rl
KSkKICAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwogCiAgICAgaWYgKCF2YWwtPmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiAwOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxK
U09iamVjdCo+KHZhbCk7CiAKLSAgICAvLyBOb3RlIHRoYXQgdGhlIEpTRXZlbnRMaXN0ZW5lciBj
b25zdHJ1Y3RvciBhZGRzIGl0IHRvIG91ciBqc0V2ZW50TGlzdGVuZXJzIGxpc3QKLSAgICByZXR1
cm4gSlNFdmVudExpc3RlbmVyOjpjcmVhdGUob2JqZWN0LCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRv
dyo+KHRoaXMpLCBodG1sKS5nZXQoKTsKKyAgICAvLyBUaGUgSlNFdmVudExpc3RlbmVyIGNvbnN0
cnVjdG9yIGFkZHMgaXQgdG8gb3VyIGpzRXZlbnRMaXN0ZW5lcnMgbWFwLgorICAgIHJldHVybiBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxKU09iamVjdCo+KHZhbCksIHN0YXRp
Y19jYXN0PEpTRE9NV2luZG93Kj4odGhpcyksIGF0dGFjaGVkVG9FdmVudFRhcmdldE5vZGUpLmdl
dCgpOwogfQogCi1KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogSlNET01XaW5kb3dCYXNlOjpm
aW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2
YWwsIGJvb2wgaHRtbCkKK0pTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBKU0RPTVdpbmRvd0Jh
c2U6OmZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUqIHZhbCwgYm9vbCBhdHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlKQogewogICAgIGlmICghdmFs
LT5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBKU09iamVjdCogb2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2YWwpOwotICAgIFVucHJvdGVjdGVkTGlzdGVuZXJzTWFw
JiBsaXN0ZW5lcnMgPSBodG1sID8gZCgpLT5qc1VucHJvdGVjdGVkSFRNTEV2ZW50TGlzdGVuZXJz
IDogZCgpLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnM7Ci0gICAgcmV0dXJuIGxpc3RlbmVy
cy5nZXQob2JqZWN0KTsKKworICAgIFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMg
PSBhdHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlID8gZCgpLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcnNBdHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlcyA6IGQoKS0+anNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXJzOworICAgIHJldHVybiBsaXN0ZW5lcnMuZ2V0KHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4odmFsKSk7CiB9CiAKLVBhc3NSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IEpT
RE9NV2luZG93QmFzZTo6ZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wgaHRtbCkKK1Bhc3NSZWZQdHI8SlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXI+IEpTRE9NV2luZG93QmFzZTo6ZmluZE9yQ3JlYXRlSlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWwsIGJvb2wg
YXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZSkKIHsKLSAgICBKU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIgPSBmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoZXhlYywgdmFs
LCBodG1sKTsKLSAgICBpZiAobGlzdGVuZXIpCisgICAgaWYgKEpTVW5wcm90ZWN0ZWRFdmVudExp
c3RlbmVyKiBsaXN0ZW5lciA9IGZpbmRKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCB2
YWwsIGF0dGFjaGVkVG9FdmVudFRhcmdldE5vZGUpKQogICAgICAgICByZXR1cm4gbGlzdGVuZXI7
CisKICAgICBpZiAoIXZhbC0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNP
YmplY3QqIG9iamVjdCA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsKTsKIAogICAgIC8vIFRo
ZSBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciBjb25zdHJ1Y3RvciBhZGRzIGl0IHRvIG91ciBq
c1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMgbWFwLgotICAgIHJldHVybiBKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKG9iamVjdCwgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3cqPih0
aGlzKSwgaHRtbCkuZ2V0KCk7CisgICAgcmV0dXJuIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
OjpjcmVhdGUoc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2YWwpLCBzdGF0aWNfY2FzdDxKU0RPTVdp
bmRvdyo+KHRoaXMpLCBhdHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlKS5nZXQoKTsKIH0KIAogdm9p
ZCBKU0RPTVdpbmRvd0Jhc2U6OmNsZWFySGVscGVyT2JqZWN0UHJvcGVydGllcygpCkBAIC0xMzIy
LDkgKzEzMjAsOSBAQCBKU0RPTVdpbmRvd0Jhc2U6Okxpc3RlbmVyc01hcCYgSlNET01XaW5kCiAg
ICAgcmV0dXJuIGQoKS0+anNFdmVudExpc3RlbmVyczsKIH0KIAotSlNET01XaW5kb3dCYXNlOjpM
aXN0ZW5lcnNNYXAmIEpTRE9NV2luZG93QmFzZTo6anNIVE1MRXZlbnRMaXN0ZW5lcnMoKQorSlNE
T01XaW5kb3dCYXNlOjpMaXN0ZW5lcnNNYXAmIEpTRE9NV2luZG93QmFzZTo6anNFdmVudExpc3Rl
bmVyc0F0dGFjaGVkVG9FdmVudFRhcmdldE5vZGVzKCkKIHsKLSAgICByZXR1cm4gZCgpLT5qc0hU
TUxFdmVudExpc3RlbmVyczsKKyAgICByZXR1cm4gZCgpLT5qc0V2ZW50TGlzdGVuZXJzQXR0YWNo
ZWRUb0V2ZW50VGFyZ2V0Tm9kZXM7CiB9CiAKIEpTRE9NV2luZG93QmFzZTo6VW5wcm90ZWN0ZWRM
aXN0ZW5lcnNNYXAmIEpTRE9NV2luZG93QmFzZTo6anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJz
KCkKQEAgLTEzMzIsOSArMTMzMCw5IEBAIEpTRE9NV2luZG93QmFzZTo6VW5wcm90ZWN0ZWRMaXN0
ZW5lcnNNYXAKICAgICByZXR1cm4gZCgpLT5qc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnM7CiB9
CiAKLUpTRE9NV2luZG93QmFzZTo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIEpTRE9NV2luZG93
QmFzZTo6anNVbnByb3RlY3RlZEhUTUxFdmVudExpc3RlbmVycygpCitKU0RPTVdpbmRvd0Jhc2U6
OlVucHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBKU0RPTVdpbmRvd0Jhc2U6OmpzVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyc0F0dGFjaGVkVG9FdmVudFRhcmdldE5vZGVzKCkKIHsKLSAgICByZXR1cm4g
ZCgpLT5qc1VucHJvdGVjdGVkSFRNTEV2ZW50TGlzdGVuZXJzOworICAgIHJldHVybiBkKCktPmpz
VW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyc0F0dGFjaGVkVG9FdmVudFRhcmdldE5vZGVzOwogfQog
CiB2b2lkIERPTVdpbmRvd1RpbWVyOjpmaXJlZCgpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmgJKHJldmlzaW9uIDM2NDU5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTYgKzc4LDE2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0aW1lckZpcmVkKERPTVdpbmRvd1RpbWVyKik7
CiAKICAgICAgICAgLy8gRmluZHMgYSB3cmFwcGVyIG9mIGEgSlMgRXZlbnRMaXN0ZW5lciwgcmV0
dXJucyAwIGlmIG5vIGV4aXN0aW5nIG9uZS4KLSAgICAgICAgSlNFdmVudExpc3RlbmVyKiBmaW5k
SlNFdmVudExpc3RlbmVyKEpTQzo6SlNWYWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsKKyAgICAg
ICAgSlNFdmVudExpc3RlbmVyKiBmaW5kSlNFdmVudExpc3RlbmVyKEpTQzo6SlNWYWx1ZSosIGJv
b2wgYXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZSA9IGZhbHNlKTsKIAogICAgICAgICAvLyBGaW5k
cyBvciBjcmVhdGVzIGEgd3JhcHBlciBvZiBhIEpTIEV2ZW50TGlzdGVuZXIuIEpTIEV2ZW50TGlz
dGVuZXIgb2JqZWN0IGlzIEdDLXByb3RlY3RlZC4KLSAgICAgICAgUGFzc1JlZlB0cjxKU0V2ZW50
TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxKU0V2
ZW50TGlzdGVuZXI+IGZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSosIGJvb2wgYXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZSA9IGZhbHNlKTsK
IAogICAgICAgICAvLyBGaW5kcyBhIHdyYXBwZXIgb2YgYSBHQy11bnByb3RlY3RlZCBKUyBFdmVu
dExpc3RlbmVyLCByZXR1cm5zIDAgaWYgbm8gZXhpc3Rpbmcgb25lLgotICAgICAgICBKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lciogZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiwgYm9vbCBodG1sID0gZmFsc2UpOworICAgICAgICBK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKiwgYm9vbCBhdHRhY2hlZFRvRXZlbnRUYXJn
ZXROb2RlID0gZmFsc2UpOwogCiAgICAgICAgIC8vIEZpbmRzIG9yIGNyZWF0ZXMgYSB3cmFwcGVy
IG9mIGEgSlMgRXZlbnRMaXN0ZW5lci4gSlMgRXZlbnRMaXN0ZW5lciBvYmplY3QgaXMgKk5PVCog
R0MtcHJvdGVjdGVkLgotICAgICAgICBQYXNzUmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3Rl
bmVyPiBmaW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSosIGJvb2wgaHRtbCA9IGZhbHNlKTsKKyAgICAgICAgUGFzc1JlZlB0
cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gZmluZE9yQ3JlYXRlSlNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUqLCBib29sIGF0dGFjaGVk
VG9FdmVudFRhcmdldE5vZGUgPSBmYWxzZSk7CiAKICAgICAgICAgdm9pZCBjbGVhcigpOwogCkBA
IC0xMDEsOSArMTAxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8SlNDOjpKU09iamVjdCosIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4gVW5wcm90
ZWN0ZWRMaXN0ZW5lcnNNYXA7CiAKICAgICAgICAgTGlzdGVuZXJzTWFwJiBqc0V2ZW50TGlzdGVu
ZXJzKCk7Ci0gICAgICAgIExpc3RlbmVyc01hcCYganNIVE1MRXZlbnRMaXN0ZW5lcnMoKTsKKyAg
ICAgICAgTGlzdGVuZXJzTWFwJiBqc0V2ZW50TGlzdGVuZXJzQXR0YWNoZWRUb0V2ZW50VGFyZ2V0
Tm9kZXMoKTsKICAgICAgICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIGpzVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVycygpOwotICAgICAgICBVbnByb3RlY3RlZExpc3RlbmVyc01hcCYganNVbnBy
b3RlY3RlZEhUTUxFdmVudExpc3RlbmVycygpOworICAgICAgICBVbnByb3RlY3RlZExpc3RlbmVy
c01hcCYganNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzQXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9k
ZXMoKTsKIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87CkBAIC0xNTUsOSArMTU1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAgICAgUmVmUHRyPERPTVdpbmRvdz4gaW1wbDsKIAogICAgICAgICAgICAgSlNET01X
aW5kb3dCYXNlOjpMaXN0ZW5lcnNNYXAganNFdmVudExpc3RlbmVyczsKLSAgICAgICAgICAgIEpT
RE9NV2luZG93QmFzZTo6TGlzdGVuZXJzTWFwIGpzSFRNTEV2ZW50TGlzdGVuZXJzOworICAgICAg
ICAgICAgSlNET01XaW5kb3dCYXNlOjpMaXN0ZW5lcnNNYXAganNFdmVudExpc3RlbmVyc0F0dGFj
aGVkVG9FdmVudFRhcmdldE5vZGVzOwogICAgICAgICAgICAgSlNET01XaW5kb3dCYXNlOjpVbnBy
b3RlY3RlZExpc3RlbmVyc01hcCBqc1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnM7Ci0gICAgICAg
ICAgICBKU0RPTVdpbmRvd0Jhc2U6OlVucHJvdGVjdGVkTGlzdGVuZXJzTWFwIGpzVW5wcm90ZWN0
ZWRIVE1MRXZlbnRMaXN0ZW5lcnM7CisgICAgICAgICAgICBKU0RPTVdpbmRvd0Jhc2U6OlVucHJv
dGVjdGVkTGlzdGVuZXJzTWFwIGpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyc0F0dGFjaGVkVG9F
dmVudFRhcmdldE5vZGVzOwogICAgICAgICAgICAgRXZlbnQqIGV2dDsKICAgICAgICAgICAgIEpT
Qzo6SlNWYWx1ZSoqIHJldHVyblZhbHVlU2xvdDsKICAgICAgICAgICAgIEpTRE9NV2luZG93U2hl
bGwqIHNoZWxsOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAko
cmV2aXNpb24gMzY0NTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIEpTQWJzdHJhY3RFdmVu
dExpc3RlbmVyOjpoYW5kbGVFdmVuCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKCFy
ZXR2YWwtPmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgZXZlbnQtPnN0b3Jlc1Jlc3VsdEFzU3RyaW5n
KCkpCiAgICAgICAgICAgICAgICAgZXZlbnQtPnN0b3JlUmVzdWx0KHJldHZhbC0+dG9TdHJpbmco
ZXhlYykpOwotICAgICAgICAgICAgaWYgKG1faXNIVE1MKSB7CisgICAgICAgICAgICBpZiAobV9p
c0F0dGFjaGVkVG9FdmVudFRhcmdldE5vZGUpIHsKICAgICAgICAgICAgICAgICBib29sIHJldHZh
bGJvb2w7CiAgICAgICAgICAgICAgICAgaWYgKHJldHZhbC0+Z2V0Qm9vbGVhbihyZXR2YWxib29s
KSAmJiAhcmV0dmFsYm9vbCkKICAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnByZXZlbnREZWZh
dWx0KCk7CkBAIC0xMTcsMjEgKzExNywyMSBAQCB2b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVy
OjpoYW5kbGVFdmVuCiAgICAgfQogfQogCi1ib29sIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpp
c0hUTUxFdmVudExpc3RlbmVyKCkgY29uc3QKK2Jvb2wgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6
OmlzQXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faXNI
VE1MOworICAgIHJldHVybiBtX2lzQXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZTsKIH0KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6SlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXIoSlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTVdpbmRvdyogd2luZG93
LCBib29sIGlzSFRNTCkKLSAgICA6IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGlzSFRNTCkKK0pT
VW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihKU09i
amVjdCogbGlzdGVuZXIsIEpTRE9NV2luZG93KiB3aW5kb3csIGJvb2wgaXNBdHRhY2hlZFRvRXZl
bnRUYXJnZXROb2RlKQorICAgIDogSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIoaXNBdHRhY2hlZFRv
RXZlbnRUYXJnZXROb2RlKQogICAgICwgbV9saXN0ZW5lcihsaXN0ZW5lcikKICAgICAsIG1fd2lu
ZG93KHdpbmRvdykKIHsKICAgICBpZiAobV9saXN0ZW5lcikgewotICAgICAgICBKU0RPTVdpbmRv
dzo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IGlzSFRNTAotICAgICAgICAg
ICAgPyB3aW5kb3ctPmpzVW5wcm90ZWN0ZWRIVE1MRXZlbnRMaXN0ZW5lcnMoKSA6IHdpbmRvdy0+
anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzKCk7CisgICAgICAgIEpTRE9NV2luZG93OjpVbnBy
b3RlY3RlZExpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gaXNBdHRhY2hlZFRvRXZlbnRUYXJnZXRO
b2RlCisgICAgICAgICAgICA/IHdpbmRvdy0+anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzQXR0
YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZXMoKSA6IHdpbmRvdy0+anNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXJzKCk7CiAgICAgICAgIGxpc3RlbmVycy5zZXQobV9saXN0ZW5lciwgdGhpcyk7CiAgICAg
fQogfQpAQCAtMTM5LDggKzEzOSw4IEBAIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjpKU1Vu
cHJvdGVjdGUKIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyOjp+SlNVbnByb3RlY3RlZEV2ZW50
TGlzdGVuZXIoKQogewogICAgIGlmIChtX2xpc3RlbmVyICYmIG1fd2luZG93KSB7Ci0gICAgICAg
IEpTRE9NV2luZG93OjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gaXNIVE1M
RXZlbnRMaXN0ZW5lcigpCi0gICAgICAgICAgICA/IG1fd2luZG93LT5qc1VucHJvdGVjdGVkSFRN
TEV2ZW50TGlzdGVuZXJzKCkgOiBtX3dpbmRvdy0+anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJz
KCk7CisgICAgICAgIEpTRE9NV2luZG93OjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYgbGlzdGVu
ZXJzID0gaXNBdHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlKCkKKyAgICAgICAgICAgID8gbV93aW5k
b3ctPmpzVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyc0F0dGFjaGVkVG9FdmVudFRhcmdldE5vZGVz
KCkgOiBtX3dpbmRvdy0+anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzKCk7CiAgICAgICAgIGxp
c3RlbmVycy5yZW1vdmUobV9saXN0ZW5lcik7CiAgICAgfQogfQpAQCAtMTcyLDE0ICsxNzIsMTQg
QEAgc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyIGV2ZW50TAogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLUpTRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyKEpTT2JqZWN0KiBs
aXN0ZW5lciwgSlNET01XaW5kb3cqIHdpbmRvdywgYm9vbCBpc0hUTUwpCi0gICAgOiBKU0Fic3Ry
YWN0RXZlbnRMaXN0ZW5lcihpc0hUTUwpCitKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0ZW5l
cihKU09iamVjdCogbGlzdGVuZXIsIEpTRE9NV2luZG93KiB3aW5kb3csIGJvb2wgaXNBdHRhY2hl
ZFRvRXZlbnRUYXJnZXROb2RlKQorICAgIDogSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIoaXNBdHRh
Y2hlZFRvRXZlbnRUYXJnZXROb2RlKQogICAgICwgbV9saXN0ZW5lcihsaXN0ZW5lcikKICAgICAs
IG1fd2luZG93KHdpbmRvdykKIHsKICAgICBpZiAobV9saXN0ZW5lcikgewotICAgICAgICBKU0RP
TVdpbmRvdzo6TGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0hUTUwKLSAgICAgICAgICAgID8g
bV93aW5kb3ctPmpzSFRNTEV2ZW50TGlzdGVuZXJzKCkgOiBtX3dpbmRvdy0+anNFdmVudExpc3Rl
bmVycygpOworICAgICAgICBKU0RPTVdpbmRvdzo6TGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBp
c0F0dGFjaGVkVG9FdmVudFRhcmdldE5vZGUKKyAgICAgICAgICAgID8gbV93aW5kb3ctPmpzRXZl
bnRMaXN0ZW5lcnNBdHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlcygpIDogbV93aW5kb3ctPmpzRXZl
bnRMaXN0ZW5lcnMoKTsKICAgICAgICAgbGlzdGVuZXJzLnNldChtX2xpc3RlbmVyLCB0aGlzKTsK
ICAgICB9CiAjaWZuZGVmIE5ERUJVRwpAQCAtMTkwLDggKzE5MCw4IEBAIEpTRXZlbnRMaXN0ZW5l
cjo6SlNFdmVudExpc3RlbmVyKEpTT2JqZWMKIEpTRXZlbnRMaXN0ZW5lcjo6fkpTRXZlbnRMaXN0
ZW5lcigpCiB7CiAgICAgaWYgKG1fbGlzdGVuZXIgJiYgbV93aW5kb3cpIHsKLSAgICAgICAgSlNE
T01XaW5kb3c6Okxpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gaXNIVE1MRXZlbnRMaXN0ZW5lcigp
Ci0gICAgICAgICAgICA/IG1fd2luZG93LT5qc0hUTUxFdmVudExpc3RlbmVycygpIDogbV93aW5k
b3ctPmpzRXZlbnRMaXN0ZW5lcnMoKTsKKyAgICAgICAgSlNET01XaW5kb3c6Okxpc3RlbmVyc01h
cCYgbGlzdGVuZXJzID0gaXNBdHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlKCkKKyAgICAgICAgICAg
ID8gbV93aW5kb3ctPmpzRXZlbnRMaXN0ZW5lcnNBdHRhY2hlZFRvRXZlbnRUYXJnZXROb2Rlcygp
IDogbV93aW5kb3ctPmpzRXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgICAgbGlzdGVuZXJzLnJlbW92
ZShtX2xpc3RlbmVyKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjE2LDEzICsyMTYsMTQg
QEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmNsZWFyV2luZG93KCkKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1KU0xhenlFdmVudExpc3RlbmVyOjpKU0xhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIEpTRE9NV2luZG93KiB3aW5k
b3csIE5vZGUqIG5vZGUsIGludCBsaW5lTnVtYmVyKQorSlNMYXp5RXZlbnRMaXN0ZW5lcjo6SlNM
YXp5RXZlbnRMaXN0ZW5lcihMYXp5RXZlbnRMaXN0ZW5lclR5cGUgdHlwZSwgY29uc3QgU3RyaW5n
JiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgSlNET01XaW5kb3cqIHdpbmRvdywg
Tm9kZSogbm9kZSwgaW50IGxpbmVOdW1iZXIpCiAgICAgOiBKU0V2ZW50TGlzdGVuZXIoMCwgd2lu
ZG93LCB0cnVlKQogICAgICwgbV9mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQogICAgICwgbV9j
b2RlKGNvZGUpCiAgICAgLCBtX3BhcnNlZChmYWxzZSkKICAgICAsIG1fbGluZU51bWJlcihsaW5l
TnVtYmVyKQogICAgICwgbV9vcmlnaW5hbE5vZGUobm9kZSkKKyAgICAsIG1fdHlwZSh0eXBlKQog
ewogICAgIC8vIFdlIGRvbid0IHJldGFpbiB0aGUgb3JpZ2luYWwgbm9kZSBiZWNhdXNlIHdlIGFz
c3VtZSBpdAogICAgIC8vIHdpbGwgc3RheSBhbGl2ZSBhcyBsb25nIGFzIHRoaXMgaGFuZGxlciBv
YmplY3QgaXMgYXJvdW5kCkBAIC0yNDIsMTAgKzI0MywyNCBAQCBKU09iamVjdCogSlNMYXp5RXZl
bnRMaXN0ZW5lcjo6bGlzdGVuZXJPCiAgICAgcmV0dXJuIG1fbGlzdGVuZXI7CiB9CiAKLUpTVmFs
dWUqIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmV2ZW50UGFyYW1ldGVyTmFtZSgpIGNvbnN0CisvLyBI
ZWxwZXIgZnVuY3Rpb24KK2lubGluZSBKU1ZhbHVlKiBldmVudFBhcmFtZXRlck5hbWUoSlNMYXp5
RXZlbnRMaXN0ZW5lcjo6TGF6eUV2ZW50TGlzdGVuZXJUeXBlIHR5cGUsIEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBzdGF0aWMgUHJvdGVjdGVkUHRyPEpTVmFsdWU+IGV2ZW50U3RyaW5nID0ganNO
b250cml2aWFsU3RyaW5nKHdpbmRvdygpLT5nbG9iYWxFeGVjKCksICJldmVudCIpOwotICAgIHJl
dHVybiBldmVudFN0cmluZy5nZXQoKTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEpT
TGF6eUV2ZW50TGlzdGVuZXI6OkhUTUxMYXp5RXZlbnRMaXN0ZW5lcjogeworICAgICAgICBzdGF0
aWMgUHJvdGVjdGVkUHRyPEpTVmFsdWU+IGh0bWxFdmVudFN0cmluZyA9IGpzU3RyaW5nKGV4ZWMs
ICJldmVudCIpOworICAgICAgICByZXR1cm4gaHRtbEV2ZW50U3RyaW5nLmdldCgpOworICAgIH0K
KyNpZiBFTkFCTEUoU1ZHKQorICAgIGNhc2UgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6U1ZHTGF6eUV2
ZW50TGlzdGVuZXI6IHsKKyAgICAgICAgc3RhdGljIFByb3RlY3RlZFB0cjxKU1ZhbHVlPiBzdmdF
dmVudFN0cmluZyA9IGpzU3RyaW5nKGV4ZWMsICJldnQiKTsKKyAgICAgICAgcmV0dXJuIHN2Z0V2
ZW50U3RyaW5nLmdldCgpOworICAgIH0KKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
CiB9CiAKIHZvaWQgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKCkgY29uc3QKQEAgLTI2
Niw3ICsyODEsNyBAQCB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSgpIGNvCiAK
ICAgICBBcmdMaXN0IGFyZ3M7CiAgICAgVVN0cmluZyBzb3VyY2VVUkwoZnJhbWUtPmxvYWRlcigp
LT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgYXJncy5hcHBlbmQoZXZlbnRQYXJhbWV0ZXJOYW1lKCkp
OworICAgIGFyZ3MuYXBwZW5kKGV2ZW50UGFyYW1ldGVyTmFtZShtX3R5cGUsIGV4ZWMpKTsKICAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZyhleGVjLCBtX2NvZGUpKTsKIAogICAgIC8vIEZJWE1FOiBQ
YXNzaW5nIHRoZSBkb2N1bWVudCdzIFVSTCB0byBjb25zdHJ1Y3QgaXMgbm90IGFsd2F5cyBjb3Jy
ZWN0LCBzaW5jZSB0aGlzIGV2ZW50IGxpc3RlbmVyIG1pZ2h0CkBAIC0yOTcsMTUgKzMxMiwxNSBA
QCB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSgpIGNvCiAgICAgbV9jb2RlID0g
U3RyaW5nKCk7CiAKICAgICBpZiAobV9saXN0ZW5lcikgewotICAgICAgICBKU0RPTVdpbmRvdzo6
TGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0hUTUxFdmVudExpc3RlbmVyKCkKLSAgICAgICAg
ICAgID8gd2luZG93KCktPmpzSFRNTEV2ZW50TGlzdGVuZXJzKCkgOiB3aW5kb3coKS0+anNFdmVu
dExpc3RlbmVycygpOworICAgICAgICBKU0RPTVdpbmRvdzo6TGlzdGVuZXJzTWFwJiBsaXN0ZW5l
cnMgPSBpc0F0dGFjaGVkVG9FdmVudFRhcmdldE5vZGUoKQorICAgICAgICAgICAgPyB3aW5kb3co
KS0+anNFdmVudExpc3RlbmVyc0F0dGFjaGVkVG9FdmVudFRhcmdldE5vZGVzKCkgOiB3aW5kb3co
KS0+anNFdmVudExpc3RlbmVycygpOwogICAgICAgICBsaXN0ZW5lcnMuc2V0KG1fbGlzdGVuZXIs
IGNvbnN0X2Nhc3Q8SlNMYXp5RXZlbnRMaXN0ZW5lcio+KHRoaXMpKTsKICAgICB9CiB9CiAKIEpT
VmFsdWUqIGdldE5vZGVFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0Tm9kZSogbiwgY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUpCiB7Ci0gICAgaWYgKEpTQWJzdHJhY3RFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKj4obi0+Z2V0
SFRNTEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlKSkpIHsKKyAgICBpZiAoSlNBYnN0cmFjdEV2ZW50
TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIq
PihuLT5ldmVudExpc3RlbmVyRm9yVHlwZShldmVudFR5cGUpKSkgewogICAgICAgICBpZiAoSlNW
YWx1ZSogb2JqID0gbGlzdGVuZXItPmxpc3RlbmVyT2JqKCkpCiAgICAgICAgICAgICByZXR1cm4g
b2JqOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAkocmV2
aXNpb24gMzY0NTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMywyNSArMzMsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewog
ICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50KiwgYm9v
bCBpc1dpbmRvd0V2ZW50KTsKLSAgICAgICAgdmlydHVhbCBib29sIGlzSFRNTEV2ZW50TGlzdGVu
ZXIoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGlzQXR0YWNoZWRUb0V2ZW50VGFyZ2V0
Tm9kZSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyT2Jq
KCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIEpTRE9NV2luZG93KiB3aW5kb3coKSBjb25z
dCA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTQWJzdHJhY3RFdmVudExpc3RlbmVy
KGJvb2wgaXNIVE1MKQotICAgICAgICAgICAgOiBtX2lzSFRNTChpc0hUTUwpCisgICAgICAgIEpT
QWJzdHJhY3RFdmVudExpc3RlbmVyKGJvb2wgaXNBdHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlKQor
ICAgICAgICAgICAgOiBtX2lzQXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZShpc0F0dGFjaGVkVG9F
dmVudFRhcmdldE5vZGUpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgYm9vbCBtX2lzSFRNTDsKKyAgICAgICAgYm9vbCBtX2lzQXR0YWNoZWRUb0V2ZW50VGFy
Z2V0Tm9kZTsKICAgICB9OwogCiAgICAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIg
OiBwdWJsaWMgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXI+IGNyZWF0ZShKU0M6
OkpTT2JqZWN0KiBsaXN0ZW5lciwgSlNET01XaW5kb3cqIHdpbmRvdywgYm9vbCBpc0hUTUwpCisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBjcmVh
dGUoSlNDOjpKU09iamVjdCogbGlzdGVuZXIsIEpTRE9NV2luZG93KiB3aW5kb3csIGJvb2wgaXNB
dHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGxpc3RlbmVyLCB3aW5kb3cs
IGlzSFRNTCkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgd2luZG93LCBpc0F0dGFjaGVkVG9FdmVudFRhcmdldE5v
ZGUpKTsKICAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5KU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcigpOwogCkBAIC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBtYXJrKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcihKU0M6OkpTT2JqZWN0KiBsaXN0ZW5lciwgSlNET01XaW5kb3cqLCBib29sIGlzSFRN
TCk7CisgICAgICAgIEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGxp
c3RlbmVyLCBKU0RPTVdpbmRvdyosIGJvb2wgaXNBdHRhY2hlZFRvRXZlbnRUYXJnZXROb2RlKTsK
IAogICAgICAgICBKU0M6OkpTT2JqZWN0KiBtX2xpc3RlbmVyOwogICAgICAgICBKU0RPTVdpbmRv
dyogbV93aW5kb3c7CkBAIC02OSw5ICs2OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIEpTRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lciB7
CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVuZXI+
IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBsaXN0ZW5lciwgSlNET01XaW5kb3cqIHdpbmRvdywgYm9v
bCBpc0hUTUwpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gY3Jl
YXRlKEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTVdpbmRvdyogd2luZG93LCBib29sIGlz
QXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBKU0V2ZW50TGlzdGVuZXIobGlzdGVuZXIsIHdpbmRvdywgaXNIVE1MKSk7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTRXZlbnRMaXN0ZW5lcihsaXN0ZW5l
ciwgd2luZG93LCBpc0F0dGFjaGVkVG9FdmVudFRhcmdldE5vZGUpKTsKICAgICAgICAgfQogICAg
ICAgICB2aXJ0dWFsIH5KU0V2ZW50TGlzdGVuZXIoKTsKIApAQCAtODAsNyArODAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2xlYXJXaW5kb3coKTsKIAogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgSlNFdmVudExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyLCBK
U0RPTVdpbmRvdyosIGJvb2wgaXNIVE1MKTsKKyAgICAgICAgSlNFdmVudExpc3RlbmVyKEpTQzo6
SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTVdpbmRvdyosIGJvb2wgaXNBdHRhY2hlZFRvRXZlbnRU
YXJnZXROb2RlKTsKIAogICAgICAgICBtdXRhYmxlIEpTQzo6UHJvdGVjdGVkUHRyPEpTQzo6SlNP
YmplY3Q+IG1fbGlzdGVuZXI7CiAKQEAgLTkwLDE3ICs5MCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBKU0xhenlFdmVudExpc3RlbmVyIDogcHVibGljIEpTRXZlbnRMaXN0
ZW5lciB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0xhenlFdmVu
dExpc3RlbmVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmlu
ZyYgY29kZSwgSlNET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgaW50IGxpbmVOdW1iZXIp
CisgICAgICAgIGVudW0gTGF6eUV2ZW50TGlzdGVuZXJUeXBlIHsKKyAgICAgICAgICAgIEhUTUxM
YXp5RXZlbnRMaXN0ZW5lcgorI2lmIEVOQUJMRShTVkcpCisgICAgICAgICAgICAsIFNWR0xhenlF
dmVudExpc3RlbmVyCisjZW5kaWYKKyAgICAgICAgfTsKKworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxKU0xhenlFdmVudExpc3RlbmVyPiBjcmVhdGUoTGF6eUV2ZW50TGlzdGVuZXJUeXBlIHR5
cGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIEpTRE9N
V2luZG93KiB3aW5kb3csIE5vZGUqIG5vZGUsIGludCBsaW5lTnVtYmVyKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTTGF6eUV2ZW50TGlzdGVuZXIoZnVuY3Rp
b25OYW1lLCBjb2RlLCB3aW5kb3csIG5vZGUsIGxpbmVOdW1iZXIpKTsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSlNMYXp5RXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jdGlvbk5hbWUs
IGNvZGUsIHdpbmRvdywgbm9kZSwgbGluZU51bWJlcikpOwogICAgICAgICB9CiAgICAgICAgIHZp
cnR1YWwgSlNDOjpKU09iamVjdCogbGlzdGVuZXJPYmooKSBjb25zdDsKIAogICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgSlNMYXp5RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBKU0RPTVdpbmRvdyosIE5vZGUqLCBpbnQgbGluZU51bWJl
cik7CisgICAgICAgIEpTTGF6eUV2ZW50TGlzdGVuZXIoTGF6eUV2ZW50TGlzdGVuZXJUeXBlIHR5
cGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIEpTRE9N
V2luZG93KiwgTm9kZSosIGludCBsaW5lTnVtYmVyKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IHZpcnR1YWwgSlNDOjpKU1ZhbHVlKiBldmVudFBhcmFtZXRlck5hbWUoKSBjb25zdDsKICAgICAg
ICAgdm9pZCBwYXJzZUNvZGUoKSBjb25zdDsKIAogICAgICAgICBtdXRhYmxlIFN0cmluZyBtX2Z1
bmN0aW9uTmFtZTsKQEAgLTEwOCw2ICsxMTQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIG11dGFibGUgYm9vbCBtX3BhcnNlZDsKICAgICAgICAgaW50IG1fbGluZU51bWJlcjsKICAg
ICAgICAgTm9kZSogbV9vcmlnaW5hbE5vZGU7CisKKyAgICAgICAgTGF6eUV2ZW50TGlzdGVuZXJU
eXBlIG1fdHlwZTsKICAgICB9OwogCiAgICAgSlNDOjpKU1ZhbHVlKiBnZXROb2RlRXZlbnRMaXN0
ZW5lcihOb2RlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9uIDM2NDU5KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDEyICs0NSwxMiBAQCB2b2lkIEpTRXZlbnRUYXJnZXROb2RlOjpzZXRMaXN0ZW5lcihF
eGVjCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOwog
ICAgIGlmIChmcmFtZSkKLSAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChpbXBsKCkpLT5zZXRI
VE1MRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIHRvSlNET01XaW5kb3coZnJhbWUpLT5maW5kT3JD
cmVhdGVKU0V2ZW50TGlzdGVuZXIoZXhlYywgZnVuYywgdHJ1ZSkpOworICAgICAgICBFdmVudFRh
cmdldE5vZGVDYXN0KGltcGwoKSktPnNldEV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50VHlwZSwg
dG9KU0RPTVdpbmRvdyhmcmFtZSktPmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihleGVjLCBm
dW5jLCB0cnVlKSk7CiB9CiAKIEpTVmFsdWUqIEpTRXZlbnRUYXJnZXROb2RlOjpnZXRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKIHsKLSAgICBFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lciA9IEV2ZW50VGFyZ2V0Tm9kZUNhc3QoaW1wbCgpKS0+Z2V0SFRNTEV2ZW50
TGlzdGVuZXIoZXZlbnRUeXBlKTsKKyAgICBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IEV2ZW50
VGFyZ2V0Tm9kZUNhc3QoaW1wbCgpKS0+ZXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRUeXBlKTsK
ICAgICBKU0V2ZW50TGlzdGVuZXIqIGpzTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU0V2ZW50TGlz
dGVuZXIqPihsaXN0ZW5lcik7CiAgICAgaWYgKGpzTGlzdGVuZXIgJiYganNMaXN0ZW5lci0+bGlz
dGVuZXJPYmooKSkKICAgICAgICAgcmV0dXJuIGpzTGlzdGVuZXItPmxpc3RlbmVyT2JqKCk7Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGF6eUV2ZW50TGlzdGVuZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5jcHAJ
KHJldmlzaW9uIDM2NDU5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xhenlFdmVudExp
c3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICAgICAgICAgICAgICAgICAgCi0g
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0Ci0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2lmIEVOQUJMRShTVkcpCi0KLSNpbmNsdWRlICJKU1NWR0xhenlFdmVudExp
c3RlbmVyLmgiCi0KLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgotCi11c2luZyBuYW1lc3BhY2Ug
SlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpTU1ZHTGF6eUV2ZW50TGlzdGVuZXI6OkpT
U1ZHTGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0
cmluZyYgY29kZSwgSlNET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgaW50IGxpbmVOdW1i
ZXIpCi0gICAgOiBKU0xhenlFdmVudExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwgY29kZSwgd2luZG93
LCBub2RlLCBsaW5lTnVtYmVyKQotewotfQotCi1KU1ZhbHVlKiBKU1NWR0xhenlFdmVudExpc3Rl
bmVyOjpldmVudFBhcmFtZXRlck5hbWUoKSBjb25zdAotewotICAgIHN0YXRpYyBQcm90ZWN0ZWRQ
dHI8SlNWYWx1ZT4gZXZlbnRTdHJpbmcgPSBqc05vbnRyaXZpYWxTdHJpbmcod2luZG93KCktPmds
b2JhbEV4ZWMoKSwgImV2dCIpOwotICAgIHJldHVybiBldmVudFN0cmluZy5nZXQoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAz
NjQ1OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIEpTU1ZH
TGF6eUV2ZW50TGlzdGVuZXJfaAotI2RlZmluZSBKU1NWR0xhenlFdmVudExpc3RlbmVyX2gKLQot
I2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgotCi0jaWYgRU5BQkxFKFNWRykKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgSlNTVkdMYXp5RXZlbnRMaXN0ZW5lciA6IHB1Ymxp
YyBKU0xhenlFdmVudExpc3RlbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEpTU1ZHTGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBKU0RPTVdpbmRvdyogd2luZG93LCBOb2RlKiBu
b2RlLCBpbnQgbGluZU51bWJlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBKU1NWR0xhenlFdmVudExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwgY29kZSwgd2luZG93
LCBub2RlLCBsaW5lTnVtYmVyKSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IEpTU1ZHTGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0
IFN0cmluZyYgY29kZSwgSlNET01XaW5kb3cqLCBOb2RlKiwgaW50IGxpbmVOdW1iZXIpOwotCi0g
ICAgICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlKiBldmVudFBhcmFtZXRlck5hbWUoKSBjb25zdDsK
LSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQotCi0jZW5kaWYgLy8gSlNTVkdMYXp5RXZlbnRMaXN0ZW5lcl9oCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM2NDU5KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
MTAgKzQ5LDYgQEAKICNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgogI2VuZGlmCiAKLSNp
ZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUgIkpTU1ZHTGF6eUV2ZW50TGlzdGVuZXIuaCIKLSNlbmRp
ZgotCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OkV2ZW50
TmFtZXM7CiAKQEAgLTE1MCw3ICsxNDYsNyBAQCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IFNj
cmlwdENvbnRyb2xsCiB7CiAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7CiAgICAgSlNMb2NrIGxv
Y2soZmFsc2UpOwotICAgIHJldHVybiBKU0xhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoZnVuY3Rp
b25OYW1lLCBjb2RlLCBtX3dpbmRvd1NoZWxsLT53aW5kb3coKSwgbm9kZSwgbV9oYW5kbGVyTGlu
ZW5vKTsKKyAgICByZXR1cm4gSlNMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKEpTTGF6eUV2ZW50
TGlzdGVuZXI6OkhUTUxMYXp5RXZlbnRMaXN0ZW5lciwgZnVuY3Rpb25OYW1lLCBjb2RlLCBtX3dp
bmRvd1NoZWxsLT53aW5kb3coKSwgbm9kZSwgbV9oYW5kbGVyTGluZW5vKTsKIH0KIAogI2lmIEVO
QUJMRShTVkcpCkBAIC0xNTgsNyArMTU0LDcgQEAgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBT
Y3JpcHRDb250cm9sbAogewogICAgIGluaXRTY3JpcHRJZk5lZWRlZCgpOwogICAgIEpTTG9jayBs
b2NrKGZhbHNlKTsKLSAgICByZXR1cm4gSlNTVkdMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGZ1
bmN0aW9uTmFtZSwgY29kZSwgbV93aW5kb3dTaGVsbC0+d2luZG93KCksIG5vZGUsIG1faGFuZGxl
ckxpbmVubyk7CisgICAgcmV0dXJuIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShKU0xhenlF
dmVudExpc3RlbmVyOjpTVkdMYXp5RXZlbnRMaXN0ZW5lciwgZnVuY3Rpb25OYW1lLCBjb2RlLCBt
X3dpbmRvd1NoZWxsLT53aW5kb3coKSwgbm9kZSwgbV9oYW5kbGVyTGluZW5vKTsKIH0KICNlbmRp
ZgogCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzNjQ1OSkKKysrIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxOSw5ICsyNDE5LDkgQEAgYm9vbCBEb2N1bWVu
dDo6c2V0Rm9jdXNlZE5vZGUoUGFzc1JlZlB0cgogICAgICAgICBvbGRGb2N1c2VkTm9kZS0+c2V0
Rm9jdXMoZmFsc2UpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAvLyBEaXNwYXRjaCBhIGNo
YW5nZSBldmVudCBmb3IgdGV4dCBmaWVsZHMgb3IgdGV4dGFyZWFzIHRoYXQgaGF2ZSBiZWVuIGVk
aXRlZAotICAgICAgICBSZW5kZXJPYmplY3QgKnIgPSBzdGF0aWNfY2FzdDxSZW5kZXJPYmplY3Qq
PihvbGRGb2N1c2VkTm9kZS5nZXQoKS0+cmVuZGVyZXIoKSk7CisgICAgICAgIFJlbmRlck9iamVj
dCogciA9IHN0YXRpY19jYXN0PFJlbmRlck9iamVjdCo+KG9sZEZvY3VzZWROb2RlLmdldCgpLT5y
ZW5kZXJlcigpKTsKICAgICAgICAgaWYgKHIgJiYgKHItPmlzVGV4dEFyZWEoKSB8fCByLT5pc1Rl
eHRGaWVsZCgpKSAmJiByLT5pc0VkaXRlZCgpKSB7Ci0gICAgICAgICAgICBFdmVudFRhcmdldE5v
ZGVDYXN0KG9sZEZvY3VzZWROb2RlLmdldCgpKS0+ZGlzcGF0Y2hIVE1MRXZlbnQoY2hhbmdlRXZl
bnQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qob2xkRm9j
dXNlZE5vZGUuZ2V0KCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShjaGFuZ2VFdmVudCwgdHJ1ZSwg
ZmFsc2UpOwogICAgICAgICAgICAgaWYgKChyID0gc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4o
b2xkRm9jdXNlZE5vZGUuZ2V0KCktPnJlbmRlcmVyKCkpKSkKICAgICAgICAgICAgICAgICByLT5z
ZXRFZGl0ZWQoZmFsc2UpOwogICAgICAgICB9CkBAIC0yNjUyLDcgKzI2NTIsNyBAQCBDU1NTdHls
ZURlY2xhcmF0aW9uKiBEb2N1bWVudDo6Z2V0T3ZlcnJpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgRG9jdW1lbnQ6OmhhbmRsZVdpbmRvd0V2ZW50KEV2ZW50ICpldnQsIGJvb2wgdXNlQ2FwdHVy
ZSkKK3ZvaWQgRG9jdW1lbnQ6OmhhbmRsZVdpbmRvd0V2ZW50KEV2ZW50KiBldnQsIGJvb2wgdXNl
Q2FwdHVyZSkKIHsKICAgICBpZiAobV93aW5kb3dFdmVudExpc3RlbmVycy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI2NjYsMjkgKzI2NjYsMjkgQEAgdm9pZCBEb2N1bWVudDo6aGFu
ZGxlV2luZG93RXZlbnQoRXZlbnQgKgogICAgICAgICAgICAgKCppdCktPmxpc3RlbmVyKCktPmhh
bmRsZUV2ZW50KGV2dCwgdHJ1ZSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OnNldEhUTUxXaW5kb3dF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGxpc3RlbmVyKQordm9pZCBEb2N1bWVudDo6c2V0V2luZG93RXZlbnRMaXN0
ZW5lckZvclR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIpCiB7CiAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGl0IHdl
IGRvbid0IHdhbnQgcmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lciB0byBkZWxldGUgaXQKLSAgICBy
ZW1vdmVIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihldmVudFR5cGUpOworICAgIHJlbW92ZVdpbmRv
d0V2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50VHlwZSk7CiAgICAgaWYgKGxpc3RlbmVyKQogICAg
ICAgICBhZGRXaW5kb3dFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTsK
IH0KIAotRXZlbnRMaXN0ZW5lciAqRG9jdW1lbnQ6OmdldEhUTUxXaW5kb3dFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQorRXZlbnRMaXN0ZW5lciogRG9jdW1lbnQ6
OndpbmRvd0V2ZW50TGlzdGVuZXJGb3JUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
KQogewogICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3IgaXQgPSBtX3dp
bmRvd0V2ZW50TGlzdGVuZXJzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fd2luZG93RXZl
bnRMaXN0ZW5lcnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5ldmVudFR5cGUo
KSA9PSBldmVudFR5cGUgJiYgKCppdCktPmxpc3RlbmVyKCktPmlzSFRNTEV2ZW50TGlzdGVuZXIo
KSkKKyAgICAgICAgaWYgKCgqaXQpLT5ldmVudFR5cGUoKSA9PSBldmVudFR5cGUgJiYgKCppdCkt
Pmxpc3RlbmVyKCktPmlzQXR0YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZSgpKQogICAgICAgICAgICAg
cmV0dXJuICgqaXQpLT5saXN0ZW5lcigpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotdm9p
ZCBEb2N1bWVudDo6cmVtb3ZlSFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUpCit2b2lkIERvY3VtZW50OjpyZW1vdmVXaW5kb3dFdmVudExpc3RlbmVy
Rm9yVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKIHsKICAgICBSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lckxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV93aW5kb3dFdmVudExpc3RlbmVycy5i
ZWdpbigpOwogICAgIGZvciAoOyBpdCAhPSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLmVuZCgpOyAr
K2l0KSB7Ci0gICAgICAgIGlmICgoKml0KS0+ZXZlbnRUeXBlKCkgPT0gZXZlbnRUeXBlICYmICgq
aXQpLT5saXN0ZW5lcigpLT5pc0hUTUxFdmVudExpc3RlbmVyKCkpIHsKKyAgICAgICAgaWYgKCgq
aXQpLT5ldmVudFR5cGUoKSA9PSBldmVudFR5cGUgJiYgKCppdCktPmxpc3RlbmVyKCktPmlzQXR0
YWNoZWRUb0V2ZW50VGFyZ2V0Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09
IHVubG9hZEV2ZW50KQogICAgICAgICAgICAgICAgIHJlbW92ZVBlbmRpbmdGcmFtZVVubG9hZEV2
ZW50Q291bnQoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBiZWZvcmV1bmxv
YWRFdmVudCkKQEAgLTI2OTksNyArMjY5OSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92ZUhUTUxX
aW5kb3dFdmVudExpc3QKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZFdpbmRvd0V2ZW50
TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3ZvaWQgRG9jdW1lbnQ6OmFkZFdp
bmRvd0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAgICBpZiAo
ZXZlbnRUeXBlID09IHVubG9hZEV2ZW50KQogICAgICAgICBhZGRQZW5kaW5nRnJhbWVVbmxvYWRF
dmVudENvdW50KCk7CkBAIC0yNzI3LDEzICsyNzI3LDEyIEBAIHZvaWQgRG9jdW1lbnQ6OnJlbW92
ZVdpbmRvd0V2ZW50TGlzdGVuZXIKICAgICB9CiB9CiAKLWJvb2wgRG9jdW1lbnQ6Omhhc1dpbmRv
d0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUpCitib29sIERvY3Vt
ZW50OjpoYXNXaW5kb3dFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
KQogewogICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3IgaXQgPSBtX3dp
bmRvd0V2ZW50TGlzdGVuZXJzLmJlZ2luKCk7CiAgICAgZm9yICg7IGl0ICE9IG1fd2luZG93RXZl
bnRMaXN0ZW5lcnMuZW5kKCk7ICsraXQpCi0gICAgICAgIGlmICgoKml0KS0+ZXZlbnRUeXBlKCkg
PT0gZXZlbnRUeXBlKSB7CisgICAgICAgIGlmICgoKml0KS0+ZXZlbnRUeXBlKCkgPT0gZXZlbnRU
eXBlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKQEAgLTI3NTUsMjQgKzI3NTQsMzAgQEAgdm9pZCBEb2N1bWVudDo6YWRkUGVuZGlu
Z0ZyYW1lQmVmb3JlVW5sbwogICAgICAgICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmFkZFBl
bmRpbmdGcmFtZUJlZm9yZVVubG9hZEV2ZW50Q291bnQoKTsKIH0KIAotICAgIHZvaWQgRG9jdW1l
bnQ6OnJlbW92ZVBlbmRpbmdGcmFtZUJlZm9yZVVubG9hZEV2ZW50Q291bnQoKSAKK3ZvaWQgRG9j
dW1lbnQ6OnJlbW92ZVBlbmRpbmdGcmFtZUJlZm9yZVVubG9hZEV2ZW50Q291bnQoKSAKIHsKICAg
ICBpZiAobV9mcmFtZSkKICAgICAgICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnJlbW92ZVBl
bmRpbmdGcmFtZUJlZm9yZVVubG9hZEV2ZW50Q291bnQoKTsKIH0KIAotUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBEb2N1bWVudDo6Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5n
JiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgTm9kZSAqbm9kZSkKK1Bhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gRG9jdW1lbnQ6OmNyZWF0ZUV2ZW50TGlzdGVuZXIoY29uc3QgU3Ry
aW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgTm9kZSogbm9kZSkKIHsKLSAg
ICBpZiAoRnJhbWUqIGZybSA9IGZyYW1lKCkpCi0gICAgICAgIGlmIChmcm0tPnNjcmlwdCgpLT5p
c0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmcm0tPnNjcmlwdCgpLT5jcmVhdGVIVE1M
RXZlbnRIYW5kbGVyKGZ1bmN0aW9uTmFtZSwgY29kZSwgbm9kZSk7Ci0gICAgcmV0dXJuIDA7Cisg
ICAgRnJhbWUqIGZybSA9IGZyYW1lKCk7CisgICAgaWYgKCFmcm0gfHwgIWZybS0+c2NyaXB0KCkt
PmlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworI2lmIEVOQUJMRShTVkcpCisgICAg
aWYgKG5vZGUgPyBub2RlLT5pc1NWR0VsZW1lbnQoKSA6IGlzU1ZHRG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZybS0+c2NyaXB0KCktPmNyZWF0ZVNWR0V2ZW50SGFuZGxlcihmdW5jdGlvbk5h
bWUsIGNvZGUsIG5vZGUpOworI2VuZGlmCisKKyAgICAvLyBXZSBtYXkgd2FudCB0byB0cmVhdCBj
b21wb3VuZCBkb2N1bWVudCBldmVudCBoYW5kbGVycyBpbiBhIGRpZmZlcmVudCB3YXksIGluIGZ1
dHVyZS4KKyAgICByZXR1cm4gZnJtLT5zY3JpcHQoKS0+Y3JlYXRlSFRNTEV2ZW50SGFuZGxlcihm
dW5jdGlvbk5hbWUsIGNvZGUsIG5vZGUpOwogfQogCi12b2lkIERvY3VtZW50OjpzZXRIVE1MV2lu
ZG93RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgQXR0cmlidXRl
KiBhdHRyKQordm9pZCBEb2N1bWVudDo6c2V0V2luZG93RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEF0dHJpYnV0ZSogYXR0cikK
IHsKLSAgICBzZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihldmVudFR5cGUsCi0gICAgICAgIGNy
ZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBhdHRyLT52
YWx1ZSgpLCAwKSk7CisgICAgc2V0V2luZG93RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRUeXBl
LCBjcmVhdGVFdmVudExpc3RlbmVyKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBhdHRyLT52
YWx1ZSgpLCAwKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OmRpc3BhdGNoSW1hZ2VMb2FkRXZlbnRT
b29uKEhUTUxJbWFnZUxvYWRlciAqaW1hZ2UpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDM2NDU5KQor
KysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUzLDExICs1NTMs
MTEgQEAgcHVibGljOgogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGdldE92ZXJyaWRlU3R5bGUo
RWxlbWVudCosIGNvbnN0IFN0cmluZyYgcHNldWRvRWx0KTsKIAogICAgIHZvaWQgaGFuZGxlV2lu
ZG93RXZlbnQoRXZlbnQqLCBib29sIHVzZUNhcHR1cmUpOwotICAgIHZvaWQgc2V0SFRNTFdpbmRv
d0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4pOwotICAgIEV2ZW50TGlzdGVuZXIqIGdldEhUTUxXaW5kb3dFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlKTsKLSAgICB2b2lkIHJlbW92ZUhU
TUxXaW5kb3dFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlKTsKKyAg
ICB2b2lkIHNldFdpbmRvd0V2ZW50TGlzdGVuZXJGb3JUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKKyAgICBFdmVudExpc3RlbmVy
KiB3aW5kb3dFdmVudExpc3RlbmVyRm9yVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSk7CisgICAgdm9pZCByZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyRm9yVHlwZShjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSk7CiAKLSAgICB2b2lkIHNldEhUTUxXaW5kb3dFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBBdHRyaWJ1dGUqKTsKKyAgICB2b2lk
IHNldFdpbmRvd0V2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBBdHRyaWJ1dGUqKTsKIAogICAgIHZvaWQgYWRkV2luZG93RXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICB2b2lkIHJlbW92ZVdpbmRvd0V2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29s
IHVzZUNhcHR1cmUpOwpAQCAtNTY4LDggKzU2OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFBl
bmRpbmdGcmFtZUJlZm9yZVVubG9hZEV2ZW50Q291bnQoKTsKICAgICB2b2lkIHJlbW92ZVBlbmRp
bmdGcmFtZUJlZm9yZVVubG9hZEV2ZW50Q291bnQoKTsKIAotICAgIFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gY3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFN0cmluZyYgY29kZSwgTm9kZSopOwotICAgIAorICAgIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gY3JlYXRlRXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBOb2RlKik7CisKICAgICAvKioKICAgICAgKiBTZWFyY2hl
cyB0aHJvdWdoIHRoZSBkb2N1bWVudCwgc3RhcnRpbmcgZnJvbSBmcm9tTm9kZSwgZm9yIHRoZSBu
ZXh0IHNlbGVjdGFibGUgZWxlbWVudCB0aGF0IGNvbWVzIGFmdGVyIGZyb21Ob2RlLgogICAgICAq
IFRoZSBvcmRlciBmb2xsb3dlZCBpcyBhcyBzcGVjaWZpZWQgaW4gc2VjdGlvbiAxNy4xMS4xIG9m
IHRoZSBIVE1MNCBzcGVjLCB3aGljaCBpcyBlbGVtZW50cyB3aXRoIHRhYiBpbmRleGVzCkluZGV4
OiBXZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAzNjQ1OSkKKysrIFdlYkNvcmUvZG9tL0V2ZW50TGlz
dGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5FdmVudExpc3RlbmVyKCkgeyB9CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wgaXNXaW5kb3dFdmVu
dCA9IGZhbHNlKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFdmVudExpc3RlbmVy
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzQXR0YWNo
ZWRUb0V2ZW50VGFyZ2V0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgfTsKIAog
fQpJbmRleDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCShyZXZpc2lvbiAzNjQ1OSkKKysrIFdlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OCwxNSArMzc4
LDE1IEBAIGJvb2wgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaFdlYktpdFRyYW4KIAogdm9pZCBF
dmVudFRhcmdldE5vZGU6OmRpc3BhdGNoRm9jdXNFdmVudCgpCiB7Ci0gICAgZGlzcGF0Y2hIVE1M
RXZlbnQoZm9jdXNFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9yVHlw
ZShmb2N1c0V2ZW50LCBmYWxzZSwgZmFsc2UpOwogfQogCiB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6
ZGlzcGF0Y2hCbHVyRXZlbnQoKQogewotICAgIGRpc3BhdGNoSFRNTEV2ZW50KGJsdXJFdmVudCwg
ZmFsc2UsIGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShibHVyRXZlbnQsIGZhbHNl
LCBmYWxzZSk7CiB9CiAKLWJvb2wgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEhUTUxFdmVudChj
b25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2Fu
Y2VsYWJsZUFyZykKK2Jvb2wgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEV2ZW50Rm9yVHlwZShj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2Fu
Y2VsYWJsZUFyZykKIHsKICAgICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC00MDksMTQgKzQwOSwxNCBAQCB2b2lkIEV2ZW50
VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hTdG9yYWdlRXZlCiAjZW5kaWYKIH0KIAotdm9pZCBFdmVudFRh
cmdldE5vZGU6OnJlbW92ZUhUTUxFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZl
bnRUeXBlKQordm9pZCBFdmVudFRhcmdldE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogewogICAgIGlmICghbV9yZWdkTGlzdGVu
ZXJzKSAvLyBub3RoaW5nIHRvIHJlbW92ZQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJdGVyYXRvciBlbmQgPSBtX3JlZ2RMaXN0ZW5lcnMt
PmVuZCgpOwogICAgIGZvciAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJdGVyYXRvciBp
dCA9IG1fcmVnZExpc3RlbmVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBp
ZiAoKCppdCktPmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSAmJiAoKml0KS0+bGlzdGVuZXIoKS0+
aXNIVE1MRXZlbnRMaXN0ZW5lcigpKSB7CisgICAgICAgIGlmICgoKml0KS0+ZXZlbnRUeXBlKCkg
PT0gZXZlbnRUeXBlICYmICgqaXQpLT5saXN0ZW5lcigpLT5pc0F0dGFjaGVkVG9FdmVudFRhcmdl
dE5vZGUoKSkgewogICAgICAgICAgICAgaXQgPSBtX3JlZ2RMaXN0ZW5lcnMtPnJlbW92ZShpdCk7
CiAgICAgICAgICAgICAvLyByZW1vdmVkIGxhc3QKICAgICAgICAgICAgIGlmIChtX3JlZ2RMaXN0
ZW5lcnMtPmlzRW1wdHkoKSAmJiAhaW5Eb2N1bWVudCgpKQpAQCAtNDI1LDIyICs0MjUsMjcgQEAg
dm9pZCBFdmVudFRhcmdldE5vZGU6OnJlbW92ZUhUTUxFdmVudExpcwogICAgICAgICB9CiB9CiAK
LXZvaWQgRXZlbnRUYXJnZXROb2RlOjpzZXRIVE1MRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcgJmV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikKK3Zv
aWQgRXZlbnRUYXJnZXROb2RlOjpzZXRFdmVudExpc3RlbmVyRm9yVHlwZShjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lcikKIHsK
LSAgICAvLyBJbiBjYXNlIHdlIGFyZSB0aGUgb25seSBvbmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0
byBpdCwgd2UgZG9uJ3Qgd2FudCByZW1vdmVIVE1MRXZlbnRMaXN0ZW5lciB0byBkZXN0cm95IGl0
LgotICAgIHJlbW92ZUhUTUxFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7CisgICAgLy8gSW4gY2Fz
ZSB3ZSBhcmUgdGhlIG9ubHkgb25lIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gaXQsIHdlIGRvbid0
IHdhbnQgcmVtb3ZlRXZlbnRMaXN0ZW5lckZvclR5cGUgdG8gZGVzdHJveSBpdC4KKyAgICByZW1v
dmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudFR5cGUpOwogICAgIGlmIChsaXN0ZW5lcikKICAg
ICAgICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7CiB9CiAK
LUV2ZW50TGlzdGVuZXIgKkV2ZW50VGFyZ2V0Tm9kZTo6Z2V0SFRNTEV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUpCit2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6c2V0RXZl
bnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZShldmVu
dFR5cGUsIGRvY3VtZW50KCktPmNyZWF0ZUV2ZW50TGlzdGVuZXIoYXR0ci0+bG9jYWxOYW1lKCku
c3RyaW5nKCksIGF0dHItPnZhbHVlKCksIHRoaXMpKTsKK30KKworRXZlbnRMaXN0ZW5lciogRXZl
bnRUYXJnZXROb2RlOjpldmVudExpc3RlbmVyRm9yVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSkKIHsKICAgICBpZiAoIW1fcmVnZExpc3RlbmVycykKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgCiAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjpJdGVyYXRvciBlbmQgPSBt
X3JlZ2RMaXN0ZW5lcnMtPmVuZCgpOwogICAgIGZvciAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJM
aXN0OjpJdGVyYXRvciBpdCA9IG1fcmVnZExpc3RlbmVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBpZiAoKCppdCktPmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSAmJiAoKml0
KS0+bGlzdGVuZXIoKS0+aXNIVE1MRXZlbnRMaXN0ZW5lcigpKQorICAgICAgICBpZiAoKCppdCkt
PmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSAmJiAoKml0KS0+bGlzdGVuZXIoKS0+aXNBdHRhY2hl
ZFRvRXZlbnRUYXJnZXROb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gKCppdCktPmxpc3RlbmVy
KCk7CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAkocmV2aXNpb24g
MzY0NTkpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiAgICAgICAgICAgKEMpIDIwMDcs
IDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTMwLDYgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBBdHRyaWJ1dGU7CiBjbGFzcyBGcmFtZTsKIAogY2xhc3MgRXZlbnRUYXJnZXROb2RlIDogcHVi
bGljIE5vZGUsCkBAIC00NiwxMCArNDcsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJiwgYm9vbCB0ZW1w
RXZlbnQgPSBmYWxzZSk7CiAgICAgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwogCi0g
ICAgdm9pZCBzZXRIVE1MRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7Ci0gICAgdm9pZCByZW1vdmVIVE1MRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7Ci0gICAgYm9vbCBkaXNwYXRj
aEhUTUxFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGUs
IGJvb2wgY2FuY2VsYWJsZSk7Ci0gICAgRXZlbnRMaXN0ZW5lciogZ2V0SFRNTEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOworICAgIHZvaWQgc2V0RXZlbnRMaXN0
ZW5lckZvclR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4pOworICAgIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1
dGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEF0dHJpYnV0ZSopOworICAgIHZvaWQg
cmVtb3ZlRXZlbnRMaXN0ZW5lckZvclR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUp
OworICAgIGJvb2wgZGlzcGF0Y2hFdmVudEZvclR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUpOworICAgIEV2ZW50TGlzdGVu
ZXIqIGV2ZW50TGlzdGVuZXJGb3JUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsK
IAogICAgIGJvb2wgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpOwogICAgIHZvaWQgZGlz
cGF0Y2hXaW5kb3dFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CkluZGV4OiBXZWJDb3JlL2RvbS9Y
TUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5j
cHAJKHJldmlzaW9uIDM2NDU5KQorKysgV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUyNywxMCArMTUyNywxMCBAQCB2b2lkIFhNTFRva2VuaXplcjo6bm90
aWZ5RmluaXNoZWQoQ2FjaGVkCiAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsKICAgICAKICAgICBp
ZiAoZXJyb3JPY2N1cnJlZCkgCi0gICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoZS5nZXQoKSkt
PmRpc3BhdGNoSFRNTEV2ZW50KGVycm9yRXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgRXZl
bnRUYXJnZXROb2RlQ2FzdChlLmdldCgpKS0+ZGlzcGF0Y2hFdmVudEZvclR5cGUoZXJyb3JFdmVu
dCwgdHJ1ZSwgZmFsc2UpOwogICAgIGVsc2UgewogICAgICAgICBtX3ZpZXctPmZyYW1lKCktPmxv
YWRlcigpLT5leGVjdXRlU2NyaXB0KGNhY2hlZFNjcmlwdFVybCwgMSwgc2NyaXB0U291cmNlKTsK
LSAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChlLmdldCgpKS0+ZGlzcGF0Y2hIVE1MRXZlbnQo
bG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGUu
Z2V0KCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAg
ICAgfQogICAgIAogICAgIG1fc2NyaXB0RWxlbWVudCA9IDA7CkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM2NDU5KQorKysgV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIzLDcgKzEyMyw3IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21l
bnQKICAgICAKICAgICBOb2RlKiBzaGFkb3dBbmNlc3Rvck5vZGUgPSBlZGl0YWJsZVJvb3QtPnNo
YWRvd0FuY2VzdG9yTm9kZSgpOwogICAgIAotICAgIGlmICghZWRpdGFibGVSb290LT5nZXRIVE1M
RXZlbnRMaXN0ZW5lcih3ZWJraXRCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCkgJiYKKyAgICBpZiAo
IWVkaXRhYmxlUm9vdC0+ZXZlbnRMaXN0ZW5lckZvclR5cGUod2Via2l0QmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQpICYmCiAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgY2hlY2tzIG9uY2Ug
dGV4dGFyZWFzIGFuZCB0ZXh0ZmllbGRzIGFjdHVhbGx5IHJlZ2lzdGVyIGFuIGV2ZW50IGhhbmRs
ZXIuCiAgICAgICAgICEoc2hhZG93QW5jZXN0b3JOb2RlICYmIHNoYWRvd0FuY2VzdG9yTm9kZS0+
cmVuZGVyZXIoKSAmJiBzaGFkb3dBbmNlc3Rvck5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dEZpZWxk
KCkpICYmCiAgICAgICAgICEoc2hhZG93QW5jZXN0b3JOb2RlICYmIHNoYWRvd0FuY2VzdG9yTm9k
ZS0+cmVuZGVyZXIoKSAmJiBzaGFkb3dBbmNlc3Rvck5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dEFy
ZWEoKSkgJiYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNjQ1OSkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzAsMjUgKzEzMCwyNSBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
CiAgICAgICAgIAogICAgICAgICBpZiAoYXR0YWNoZWQoKSkKICAgICAgICAgICAgIGRvY3VtZW50
KCktPnJlY2FsY1N0eWxlKEZvcmNlKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bmxvYWRBdHRyKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldEhUTUxXaW5kb3dFdmVudExpc3Rl
bmVyKGxvYWRFdmVudCwgYXR0cik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25i
ZWZvcmV1bmxvYWRBdHRyKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldEhUTUxXaW5kb3dFdmVu
dExpc3RlbmVyKGJlZm9yZXVubG9hZEV2ZW50LCBhdHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0SFRNTFdp
bmRvd0V2ZW50TGlzdGVuZXIodW5sb2FkRXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uYmx1ckF0dHIpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0SFRNTFdp
bmRvd0V2ZW50TGlzdGVuZXIoYmx1ckV2ZW50LCBhdHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBvbmZvY3VzQXR0cikgewotICAgICAgICBkb2N1bWVudCgpLT5zZXRIVE1MV2lu
ZG93RXZlbnRMaXN0ZW5lcihmb2N1c0V2ZW50LCBhdHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBvbnJlc2l6ZUF0dHIpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0SFRNTFdp
bmRvd0V2ZW50TGlzdGVuZXIocmVzaXplRXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uc2Nyb2xsQXR0cikgewotICAgICAgICBkb2N1bWVudCgpLT5zZXRIVE1M
V2luZG93RXZlbnRMaXN0ZW5lcihzY3JvbGxFdmVudCwgYXR0cik7Ci0gICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gb25zdG9yYWdlQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG9ubG9hZEF0dHIpCisgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0V2ZW50TGlz
dGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGxvYWRFdmVudCwgYXR0cik7CisgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG9uYmVmb3JldW5sb2FkQXR0cikKKyAgICAgICAgZG9jdW1lbnQoKS0+
c2V0V2luZG93RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoYmVmb3JldW5sb2FkRXZl
bnQsIGF0dHIpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpCisg
ICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0V2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmli
dXRlKHVubG9hZEV2ZW50LCBhdHRyKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25i
bHVyQXR0cikKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93RXZlbnRMaXN0ZW5lckZvclR5
cGVBbmRBdHRyaWJ1dGUoYmx1ckV2ZW50LCBhdHRyKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25mb2N1c0F0dHIpCisgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0V2ZW50TGlz
dGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGZvY3VzRXZlbnQsIGF0dHIpOworICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbnJlc2l6ZUF0dHIpCisgICAgICAgIGRvY3VtZW50KCktPnNldFdp
bmRvd0V2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHJlc2l6ZUV2ZW50LCBhdHRyKTsK
KyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zY3JvbGxBdHRyKQorICAgICAgICBkb2N1
bWVudCgpLT5zZXRXaW5kb3dFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShzY3JvbGxF
dmVudCwgYXR0cik7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc3RvcmFnZUF0dHIp
IHsKICAgICAgICAgLy8gVGhlIEhUTUw1IHNwZWMgY3VycmVudGx5IHNwZWNpZmllcyB0aGF0IHN0
b3JhZ2UgZXZlbnRzIGFyZSBmaXJlZCBvbmx5IGF0IHRoZSBib2R5IGVsZW1lbnQgb2YKICAgICAg
ICAgLy8gYW4gSFRNTERvY3VtZW50LCB3aGljaCBpcyB3aHkgdGhlIG9uc3RvcmFnZSBhdHRyaWJ1
dGUgZGlmZmVycyBmcm9tIHRoZSBvbmVzIGJlZm9yZSBpdC4KICAgICAgICAgLy8gVGhlIHNwZWMg
bWlnaHQgY2hhbmdlIG9uIHRoaXMsIGFuZCB0aGVuIHNvIHNob3VsZCB3ZSEKLSAgICAgICAgc2V0
SFRNTEV2ZW50TGlzdGVuZXIoc3RvcmFnZUV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRM
aXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoc3RvcmFnZUV2ZW50LCBhdHRyKTsKICAgICB9IGVs
c2UKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNjQ1OSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDkg
Kzg4LDkgQEAgdm9pZCBIVE1MQnV0dG9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAg
ICAvLyBEb24ndCBtYXAgJ2FsaWduJyBhdHRyaWJ1dGUuICBUaGlzIG1hdGNoZXMgd2hhdCBGaXJl
Zm94IGFuZCBJRSBkbywgYnV0IG5vdCBPcGVyYS4KICAgICAgICAgLy8gU2VlIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDcxCiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gb25mb2N1c0F0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoZm9j
dXNFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmli
dXRlKGZvY3VzRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
Ymx1ckF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmx1ckV2ZW50LCBhdHRy
KTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoYmx1ckV2ZW50
LCBhdHRyKTsKICAgICB9IGVsc2UKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlz
aW9uIDM2NDU5KQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU4LDc1ICsxNTgsNzUgQEAgdm9pZCBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTQogICAgIH0KIC8vIHN0YW5kYXJkIGV2ZW50cwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmNsaWNrQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihjbGlj
a0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1
dGUoY2xpY2tFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25j
b250ZXh0bWVudUF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY29udGV4dG1l
bnVFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmli
dXRlKGNvbnRleHRtZW51RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG9uZGJsY2xpY2tBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGRibGNs
aWNrRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShkYmxjbGlja0V2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbm1vdXNlZG93bkF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobW91c2Vk
b3duRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShtb3VzZWRvd25FdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gb25tb3VzZW1vdmVBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKG1vdXNl
bW92ZUV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRy
aWJ1dGUobW91c2Vtb3ZlRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG9ubW91c2VvdXRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKG1vdXNl
b3V0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShtb3VzZW91dEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbm1vdXNlb3ZlckF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobW91c2Vv
dmVyRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShtb3VzZW92ZXJFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gb25tb3VzZXVwQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihtb3VzZXVw
RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0
ZShtb3VzZXVwRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
bW91c2V3aGVlbEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobW91c2V3aGVl
bEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1
dGUobW91c2V3aGVlbEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbmZvY3VzQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihmb2N1c0V2ZW50
LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZm9j
dXNFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25ibHVyQXR0
cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihibHVyRXZlbnQsIGF0dHIpOworICAg
ICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShibHVyRXZlbnQsIGF0dHIp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ua2V5ZG93bkF0dHIpIHsKLSAgICAg
ICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoa2V5ZG93bkV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0
RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoa2V5ZG93bkV2ZW50LCBhdHRyKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmtleXByZXNzQXR0cikgewotICAgICAgICBz
ZXRIVE1MRXZlbnRMaXN0ZW5lcihrZXlwcmVzc0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0RXZl
bnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoa2V5cHJlc3NFdmVudCwgYXR0cik7CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25rZXl1cEF0dHIpIHsKLSAgICAgICAgc2V0SFRN
TEV2ZW50TGlzdGVuZXIoa2V5dXBFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGtleXVwRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG9uc2Nyb2xsQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0
ZW5lcihzY3JvbGxFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBl
QW5kQXR0cmlidXRlKHNjcm9sbEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmJlZm9yZWN1dEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIo
YmVmb3JlY3V0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFu
ZEF0dHJpYnV0ZShiZWZvcmVjdXRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gb25jdXRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGN1dEV2
ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUo
Y3V0RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmVmb3Jl
Y29weUF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmVmb3JlY29weUV2ZW50
LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoYmVm
b3JlY29weUV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNv
cHlBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGNvcHlFdmVudCwgYXR0cik7
CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGNvcHlFdmVudCwg
YXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmVwYXN0ZUF0dHIp
IHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmVmb3JlcGFzdGVFdmVudCwgYXR0cik7
CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGJlZm9yZXBhc3Rl
RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ucGFzdGVBdHRy
KSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHBhc3RlRXZlbnQsIGF0dHIpOworICAg
ICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShwYXN0ZUV2ZW50LCBhdHRy
KTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyYWdlbnRlckF0dHIpIHsKLSAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoZHJhZ2VudGVyRXZlbnQsIGF0dHIpOworICAgICAg
ICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShkcmFnZW50ZXJFdmVudCwgYXR0
cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25kcmFnb3ZlckF0dHIpIHsKLSAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoZHJhZ292ZXJFdmVudCwgYXR0cik7CisgICAgICAg
IHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGRyYWdvdmVyRXZlbnQsIGF0dHIp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZHJhZ2xlYXZlQXR0cikgewotICAg
ICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihkcmFnbGVhdmVFdmVudCwgYXR0cik7CisgICAgICAg
IHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGRyYWdsZWF2ZUV2ZW50LCBhdHRy
KTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyb3BBdHRyKSB7Ci0gICAgICAg
IHNldEhUTUxFdmVudExpc3RlbmVyKGRyb3BFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50
TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGRyb3BFdmVudCwgYXR0cik7CiAgICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gb25kcmFnc3RhcnRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxF
dmVudExpc3RlbmVyKGRyYWdzdGFydEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0
ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZHJhZ3N0YXJ0RXZlbnQsIGF0dHIpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZHJhZ0F0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50
TGlzdGVuZXIoZHJhZ0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5
cGVBbmRBdHRyaWJ1dGUoZHJhZ0V2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmRyYWdlbmRBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGRy
YWdlbmRFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKGRyYWdlbmRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gb25zZWxlY3RzdGFydEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoc2Vs
ZWN0c3RhcnRFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5k
QXR0cmlidXRlKHNlbGVjdHN0YXJ0RXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG9uc3VibWl0QXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihz
dWJtaXRFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKHN1Ym1pdEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbmVycm9yQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihlcnJvckV2ZW50
LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXJy
b3JFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb253ZWJraXRh
bmltYXRpb25zdGFydEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIod2Via2l0
QW5pbWF0aW9uU3RhcnRFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JU
eXBlQW5kQXR0cmlidXRlKHdlYmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQsIGF0dHIpOwogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ud2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uQXR0cikg
ewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcih3ZWJraXRBbmltYXRpb25JdGVyYXRpb25F
dmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRl
KHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBvbndlYmtpdGFuaW1hdGlvbmVuZEF0dHIpIHsKLSAgICAgICAgc2V0SFRN
TEV2ZW50TGlzdGVuZXIod2Via2l0QW5pbWF0aW9uRW5kRXZlbnQsIGF0dHIpOworICAgICAgICBz
ZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZSh3ZWJraXRBbmltYXRpb25FbmRFdmVu
dCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb253ZWJraXR0cmFuc2l0
aW9uZW5kQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcih3ZWJraXRUcmFuc2l0
aW9uRW5kRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZSh3ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQsIGF0dHIpOwogICAgIH0KIH0KIApAQCAt
OTczLDEyICs5NzMsNiBAQCBib29sIEhUTUxFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBu
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBpbkVpdGhlclRhZ0xpc3QobmV3Q2hp
bGQpOwogfQotCi12b2lkIEhUTUxFbGVtZW50OjpzZXRIVE1MRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgQXR0cmlidXRlKiBhdHRyKQotewotICAgIEVsZW1lbnQ6
OnNldEhUTUxFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwKLSAgICAgICAgZG9jdW1lbnQoKS0+Y3Jl
YXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIGF0dHItPnZh
bHVlKCksIHRoaXMpKTsKLX0KICAgICAKIGJvb2wgSFRNTEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVk
ZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQogewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHJldmlzaW9uIDM2
NDU5KQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk4
LDggKzk4LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGluQmxvY2tUYWdMaXN0KGNvbnN0
IE5vZGUqKTsKICAgICBzdGF0aWMgYm9vbCBpc1JlY29nbml6ZWRUYWdOYW1lKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKIAotICAgIHZvaWQgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIEF0dHJpYnV0ZSopOwotCiAgICAgdmlydHVhbCBib29sIHJlbmRl
cmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNjQ1OSkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYx
LDcgKzE2MSw3IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0TmFtZShjb24KIAog
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpvbkNoYW5nZSgpCiB7Ci0gICAgZGlzcGF0Y2hI
VE1MRXZlbnQoY2hhbmdlRXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9y
VHlwZShjaGFuZ2VFdmVudCwgdHJ1ZSwgZmFsc2UpOwogfQogCiBib29sIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzNjQ1OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNTksNyArMzU5LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnBy
ZXBhcmVTdWJtaXQoRXZlbgogICAgIG1faW5zdWJtaXQgPSB0cnVlOwogICAgIG1fZG9pbmdzdWJt
aXQgPSBmYWxzZTsKIAotICAgIGlmIChkaXNwYXRjaEhUTUxFdmVudChzdWJtaXRFdmVudCwgdHJ1
ZSwgdHJ1ZSkgJiYgIW1fZG9pbmdzdWJtaXQpCisgICAgaWYgKGRpc3BhdGNoRXZlbnRGb3JUeXBl
KHN1Ym1pdEV2ZW50LCB0cnVlLCB0cnVlKSAmJiAhbV9kb2luZ3N1Ym1pdCkKICAgICAgICAgbV9k
b2luZ3N1Ym1pdCA9IHRydWU7CiAKICAgICBtX2luc3VibWl0ID0gZmFsc2U7CkBAIC01MTQsNyAr
NTE0LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnJlc2V0KCkKIAogICAgIC8vICMjIyBET00y
IGxhYmVscyB0aGlzIGV2ZW50IGFzIG5vdCBjYW5jZWxhYmxlLCBob3dldmVyCiAgICAgLy8gY29t
bW9uIGJyb3dzZXJzKCBzaWNrISApIGFsbG93IGl0IGJlIGNhbmNlbGxlZC4KLSAgICBpZiAoICFk
aXNwYXRjaEhUTUxFdmVudChyZXNldEV2ZW50LHRydWUsIHRydWUpICkgeworICAgIGlmICggIWRp
c3BhdGNoRXZlbnRGb3JUeXBlKHJlc2V0RXZlbnQsdHJ1ZSwgdHJ1ZSkgKSB7CiAgICAgICAgIG1f
aW5yZXNldCA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTUxLDkgKzU1MSw5
IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZvckNhY2hlQ2FsbGJhY2tzKHRo
aXMpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc3VibWl0QXR0cikKLSAgICAg
ICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoc3VibWl0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRF
dmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShzdWJtaXRFdmVudCwgYXR0cik7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ucmVzZXRBdHRyKQotICAgICAgICBzZXRIVE1MRXZl
bnRMaXN0ZW5lcihyZXNldEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZv
clR5cGVBbmRBdHRyaWJ1dGUocmVzZXRFdmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG5hbWVBdHRyKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFt
ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1l
bnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJh
c2UuY3BwCShyZXZpc2lvbiAzNjQ1OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSwxMCArMTQxLDEwIEBAIHZvaWQgSFRNTEZy
YW1lRWxlbWVudEJhc2U6OnBhcnNlTWFwcGVkQXQKICAgICAgICAgaWYgKGNvbnRlbnRGcmFtZSgp
KQogICAgICAgICAgICAgY29udGVudEZyYW1lKCktPnNldEluVmlld1NvdXJjZU1vZGUodmlld1Nv
dXJjZU1vZGUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0cikg
ewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQsIGF0dHIpOworICAgICAg
ICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShsb2FkRXZlbnQsIGF0dHIpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmVmb3JldW5sb2FkQXR0cikgewogICAg
ICAgICAvLyBGSVhNRTogc2hvdWxkIDxmcmFtZT4gZWxlbWVudHMgaGF2ZSBiZWZvcmV1bmxvYWQg
aGFuZGxlcnM/Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGJlZm9yZXVubG9hZEV2ZW50
LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoYmVm
b3JldW5sb2FkRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRnJhbWVPd25l
ckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRnJhbWVTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMzY0NTkpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiwxMSArMTI2LDEx
IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHQKICAgICAgICAgICAg
IG1fYm9yZGVyQ29sb3JTZXQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb25sb2FkQXR0cikgewotICAgICAgICBkb2N1bWVudCgpLT5zZXRIVE1MV2lu
ZG93RXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQsIGF0dHIpOworICAgICAgICBkb2N1bWVudCgpLT5z
ZXRXaW5kb3dFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShsb2FkRXZlbnQsIGF0dHIp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmVmb3JldW5sb2FkQXR0cikgewot
ICAgICAgICBkb2N1bWVudCgpLT5zZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihiZWZvcmV1bmxv
YWRFdmVudCwgYXR0cik7CisgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0V2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGJlZm9yZXVubG9hZEV2ZW50LCBhdHRyKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpIHsKLSAgICAgICAgZG9jdW1lbnQo
KS0+c2V0SFRNTFdpbmRvd0V2ZW50TGlzdGVuZXIodW5sb2FkRXZlbnQsIGF0dHIpOworICAgICAg
ICBkb2N1bWVudCgpLT5zZXRXaW5kb3dFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZSh1
bmxvYWRFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDM2NDU5KQorKysgV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsOSArMTIyLDkgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gaXNtYXBBdHRy
KQogICAgICAgICBpc21hcCA9IHRydWU7CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gb25hYm9y
dEF0dHIpCi0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGFib3J0RXZlbnQsIGF0dHIpOwor
ICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShhYm9ydEV2ZW50LCBh
dHRyKTsKICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBvbmxvYWRBdHRyKQotICAgICAgICBzZXRI
VE1MRXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3Rl
bmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShsb2FkRXZlbnQsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0
dHJOYW1lID09IGNvbXBvc2l0ZUF0dHIpIHsKICAgICAgICAgaWYgKCFwYXJzZUNvbXBvc2l0ZU9w
ZXJhdG9yKGF0dHItPnZhbHVlKCksIG1fY29tcG9zaXRlT3BlcmF0b3IpKQogICAgICAgICAgICAg
bV9jb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXI7CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMzY0NTkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElt
YWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgSFRN
TEltYWdlTG9hZGVyOjpkaXNwYXRjaExvYWRFdmVudCgKIHsKICAgICBpZiAoIWhhdmVGaXJlZExv
YWRFdmVudCgpICYmIGltYWdlKCkpIHsKICAgICAgICAgc2V0SGF2ZUZpcmVkTG9hZEV2ZW50KHRy
dWUpOwotICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoSFRNTEV2ZW50KGltYWdlKCktPmVycm9y
T2NjdXJyZWQoKSA/IGVycm9yRXZlbnQgOiBsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAg
ICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hFdmVudEZvclR5cGUoaW1hZ2UoKS0+ZXJyb3JPY2N1cnJl
ZCgpID8gZXJyb3JFdmVudCA6IGxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiB9CiAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM2NDU5KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjUsMjAg
KzY2NSwyMCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAg
ICAgIGlmIChyZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRycygpKQogICAgICAgICAgICAgYWRkQ1NT
TGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5SGVpZ2h0LCBhdHRyLT52YWx1ZSgpKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmZvY3VzQXR0cikgewotICAgICAgICBzZXRIVE1MRXZl
bnRMaXN0ZW5lcihmb2N1c0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZv
clR5cGVBbmRBdHRyaWJ1dGUoZm9jdXNFdmVudCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb25ibHVyQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihi
bHVyRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShibHVyRXZlbnQsIGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
c2VsZWN0QXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihzZWxlY3RFdmVudCwg
YXR0cik7CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHNlbGVj
dEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNoYW5nZUF0
dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY2hhbmdlRXZlbnQsIGF0dHIpOwor
ICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShjaGFuZ2VFdmVudCwg
YXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25pbnB1dEF0dHIpIHsKLSAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoaW5wdXRFdmVudCwgYXR0cik7CisgICAgICAgIHNl
dEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGlucHV0RXZlbnQsIGF0dHIpOwogICAg
IH0KICAgICAvLyBTZWFyY2ggZmllbGQgYW5kIHNsaWRlciBhdHRyaWJ1dGVzIGFsbCBqdXN0IGNh
dXNlIHVwZGF0ZUZyb21FbGVtZW50IHRvIGJlIGNhbGxlZCB0aHJvdWdoIHN0eWxlCiAgICAgLy8g
cmVjYWxjaW5nLgogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNlYXJjaEF0dHIpIHsK
LSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoc2VhcmNoRXZlbnQsIGF0dHIpOworICAgICAg
ICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShzZWFyY2hFdmVudCwgYXR0cik7
CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVzdWx0c0F0dHIpIHsKICAgICAgICAg
aW50IG9sZFJlc3VsdHMgPSBtX21heFJlc3VsdHM7CiAgICAgICAgIG1fbWF4UmVzdWx0cyA9ICFh
dHRyLT5pc051bGwoKSA/IG1pbihhdHRyLT52YWx1ZSgpLnRvSW50KCksIG1heFNhdmVkUmVzdWx0
cykgOiAtMTsKQEAgLTEwNDIsNyArMTA0Miw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0
VmFsdWVGcm9tUmVuZGUKICAgICBzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcigpOwogCiAgICAgLy8g
RmlyZSB0aGUgImlucHV0IiBET00gZXZlbnQuCi0gICAgZGlzcGF0Y2hIVE1MRXZlbnQoaW5wdXRF
dmVudCwgdHJ1ZSwgZmFsc2UpOworICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGlucHV0RXZlbnQs
IHRydWUsIGZhbHNlKTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzdG9yZXNWYWx1ZVNl
cGFyYXRlRnJvbUF0dHJpYnV0ZSgpIGNvbnN0CkBAIC0xNTgwLDcgKzE1ODAsNyBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6Om9uU2VhcmNoKCkKICAgICBBU1NFUlQoaXNTZWFyY2hGaWVsZCgpKTsK
ICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRy
b2wqPihyZW5kZXJlcigpKS0+c3RvcFNlYXJjaEV2ZW50VGltZXIoKTsKLSAgICBkaXNwYXRjaEhU
TUxFdmVudChzZWFyY2hFdmVudCwgdHJ1ZSwgZmFsc2UpOworICAgIGRpc3BhdGNoRXZlbnRGb3JU
eXBlKHNlYXJjaEV2ZW50LCB0cnVlLCBmYWxzZSk7CiB9CiAKIFNlbGVjdGlvbiBIVE1MSW5wdXRF
bGVtZW50OjpzZWxlY3Rpb24oKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkocmV2aXNpb24gMzY0NTkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OmFzeW5jRXZlbnRUaW1lckZpCiAgICAgbV9hc3luY0V2ZW50c1RvRGlzcGF0Y2guc3dhcChhc3lu
Y0V2ZW50c1RvRGlzcGF0Y2gpOwogICAgIHVuc2lnbmVkIGNvdW50ID0gYXN5bmNFdmVudHNUb0Rp
c3BhdGNoLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY291bnQ7ICsrbikK
LSAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQoYXN5bmNFdmVudHNUb0Rpc3BhdGNoW25dLCBmYWxz
ZSwgdHJ1ZSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGFzeW5jRXZlbnRzVG9EaXNw
YXRjaFtuXSwgZmFsc2UsIHRydWUpOwogfQogCiBTdHJpbmcgc2VyaWFsaXplVGltZU9mZnNldChm
bG9hdCB0aW1lKQpAQCAtMzAyLDcgKzMwMiw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9h
ZChFeGNlcHRpb25Db2QKICAgICAgICAgICAgIG1fcGxheWVyLT5zZWVrKDApOwogICAgICAgICB9
CiAgICAgICAgIG1fY3VycmVudExvb3AgPSAwOwotICAgICAgICBkaXNwYXRjaEhUTUxFdmVudChl
bXB0aWVkRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUo
ZW1wdGllZEV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIGlmIChtX2xvYWROZXN0aW5nTGV2
ZWwgPCBtX3Rlcm1pbmF0ZUxvYWRCZWxvd05lc3RpbmdMZXZlbCkKICAgICAgICAgICAgIGdvdG8g
ZW5kOwogICAgIH0KQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1l
ZGlhUGxheWVyTmV0d29yCiAgICAgICAgIGlmIChpc1ZpZGVvKCkpCiAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50Kj4odGhpcyktPnVwZGF0ZVBvc3RlckltYWdlKCk7CiAK
LSAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQoZW1wdGllZEV2ZW50LCBmYWxzZSwgdHJ1ZSk7Cisg
ICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGVtcHRpZWRFdmVudCwgZmFsc2UsIHRydWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMzg4LDExICszODgsMTEgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllck5ldHdvcgogICAgICAgICBtX3BsYXllci0+c2Vl
ayhlZmZlY3RpdmVTdGFydCgpKTsKICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBMT0FERURfTUVU
QURBVEE7CiAgICAgICAgIAotICAgICAgICBkaXNwYXRjaEhUTUxFdmVudChkdXJhdGlvbmNoYW5n
ZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGR1cmF0
aW9uY2hhbmdlRXZlbnQsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgaWYgKG1fbG9hZE5lc3RpbmdM
ZXZlbCA8IG1fdGVybWluYXRlTG9hZEJlbG93TmVzdGluZ0xldmVsKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQobG9hZGVkbWV0YWRhdGFF
dmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShsb2FkZWRt
ZXRhZGF0YUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIGlmIChtX2xvYWROZXN0aW5nTGV2
ZWwgPCBtX3Rlcm1pbmF0ZUxvYWRCZWxvd05lc3RpbmdMZXZlbCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC00MTQsMTEgKzQxNCwxMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1l
ZGlhUGxheWVyTmV0d29yCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJWaWRlbyo+KHJl
bmRlcmVyKCkpLT52aWRlb1NpemVDaGFuZ2VkKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGRpc3BhdGNoSFRNTEV2ZW50KGxvYWRlZGZpcnN0ZnJhbWVFdmVudCwgZmFsc2UsIHRydWUp
OworICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShsb2FkZWRmaXJzdGZyYW1lRXZlbnQsIGZh
bHNlLCB0cnVlKTsKICAgICAgICAgaWYgKG1fbG9hZE5lc3RpbmdMZXZlbCA8IG1fdGVybWluYXRl
TG9hZEJlbG93TmVzdGluZ0xldmVsKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAg
ICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQoY2Fuc2hvd2N1cnJlbnRmcmFtZUV2ZW50LCBmYWxzZSwg
dHJ1ZSk7CisgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGNhbnNob3djdXJyZW50ZnJhbWVF
dmVudCwgZmFsc2UsIHRydWUpOwogICAgICAgICBpZiAobV9sb2FkTmVzdGluZ0xldmVsIDwgbV90
ZXJtaW5hdGVMb2FkQmVsb3dOZXN0aW5nTGV2ZWwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNDU1LDI1ICs0NTUsMjUgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0
YXRlKFJlYQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHN0YXRlID09IERBVEFfVU5B
VkFJTEFCTEUpIHsKLSAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQoZGF0YXVuYXZhaWxhYmxlRXZl
bnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZGF0YXVuYXZh
aWxhYmxlRXZlbnQsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgaWYgKHdhc0FjdGl2ZWx5UGxheWlu
ZykgewotICAgICAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQodGltZXVwZGF0ZUV2ZW50LCBmYWxz
ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBkaXNwYXRjaEhUTUxFdmVudCh3YWl0aW5nRXZlbnQsIGZh
bHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKHRpbWV1cGRhdGVF
dmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUod2Fp
dGluZ0V2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHN0YXRl
ID09IENBTl9TSE9XX0NVUlJFTlRfRlJBTUUpIHsKICAgICAgICAgaWYgKG1fbG9hZGVkRmlyc3RG
cmFtZSkKLSAgICAgICAgICAgIGRpc3BhdGNoSFRNTEV2ZW50KGNhbnNob3djdXJyZW50ZnJhbWVF
dmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoY2Fu
c2hvd2N1cnJlbnRmcmFtZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIGlmICh3YXNBY3Rp
dmVseVBsYXlpbmcpIHsKLSAgICAgICAgICAgIGRpc3BhdGNoSFRNTEV2ZW50KHRpbWV1cGRhdGVF
dmVudCwgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQod2FpdGlu
Z0V2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZSh0
aW1ldXBkYXRlRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGRpc3BhdGNoRXZlbnRG
b3JUeXBlKHdhaXRpbmdFdmVudCwgZmFsc2UsIHRydWUpOwogICAgICAgICB9CiAgICAgfSBlbHNl
IGlmIChzdGF0ZSA9PSBDQU5fUExBWSkgewotICAgICAgICBkaXNwYXRjaEhUTUxFdmVudChjYW5w
bGF5RXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoY2Fu
cGxheUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBDQU5fUExB
WV9USFJPVUdIKSB7Ci0gICAgICAgIGRpc3BhdGNoSFRNTEV2ZW50KGNhbnBsYXl0aHJvdWdoRXZl
bnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoY2FucGxheXRo
cm91Z2hFdmVudCwgZmFsc2UsIHRydWUpOwogICAgICAgICBpZiAobV9hdXRvcGxheWluZyAmJiBt
X3BhdXNlZCAmJiBhdXRvcGxheSgpKSB7CiAgICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOwot
ICAgICAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQocGxheUV2ZW50LCBmYWxzZSwgdHJ1ZSk7Cisg
ICAgICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShwbGF5RXZlbnQsIGZhbHNlLCB0cnVlKTsK
ICAgICAgICAgfQogICAgIH0KICAgICB1cGRhdGVQbGF5U3RhdGUoKTsKQEAgLTU0MSw3ICs1NDEs
NyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlZWsoZmxvYXQgdGltZSwgCiAgICAgbV9zZWVr
aW5nID0gdHJ1ZTsKICAgICAKICAgICAvLyA5Ci0gICAgZGlzcGF0Y2hIVE1MRXZlbnQodGltZXVw
ZGF0ZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUodGltZXVw
ZGF0ZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgCiAgICAgLy8gMTAKICAgICAvLyBBcyBzb29u
IGFzIHRoZSB1c2VyIGFnZW50IGhhcyBlc3RhYmxpc2hlZCB3aGV0aGVyIG9yIG5vdCB0aGUgbWVk
aWEgZGF0YSBmb3IgdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlvbiBpcyBhdmFpbGFibGUsIApAQCAt
ODgyLDEyICs4ODIsMTIgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllclRpbWVD
aAogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICBzZWVrKGVmZmVjdGl2ZUxvb3BT
dGFydCgpLCBlYyk7CiAgICAgICAgIG1fY3VycmVudExvb3ArKzsKLSAgICAgICAgZGlzcGF0Y2hI
VE1MRXZlbnQodGltZXVwZGF0ZUV2ZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGRpc3BhdGNo
RXZlbnRGb3JUeXBlKHRpbWV1cGRhdGVFdmVudCwgZmFsc2UsIHRydWUpOwogICAgIH0KICAgICAK
ICAgICBpZiAobV9jdXJyZW50TG9vcCA9PSBwbGF5Q291bnQoKSAtIDEgJiYgY3VycmVudFRpbWUo
KSA+PSBlZmZlY3RpdmVFbmQoKSkgewotICAgICAgICBkaXNwYXRjaEhUTUxFdmVudCh0aW1ldXBk
YXRlRXZlbnQsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgZGlzcGF0Y2hIVE1MRXZlbnQoZW5kZWRF
dmVudCwgZmFsc2UsIHRydWUpOworICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZSh0aW1ldXBk
YXRlRXZlbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZW5k
ZWRFdmVudCwgZmFsc2UsIHRydWUpOwogICAgIH0KIAogICAgIHVwZGF0ZVBsYXlTdGF0ZSgpOwpA
QCAtMTAxNCw3ICsxMDE0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp3aWxsU2F2ZVRvQ2Fj
aGUoKQogICAgICAgICBpZiAobV9uZXR3b3JrU3RhdGUgPj0gTE9BRElORykgewogICAgICAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBFTVBUWTsKICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IERB
VEFfVU5BVkFJTEFCTEU7Ci0gICAgICAgICAgICBkaXNwYXRjaEhUTUxFdmVudChlbXB0aWVkRXZl
bnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGVtcHRp
ZWRFdmVudCwgZmFsc2UsIHRydWUpOwogICAgICAgICB9CiAgICAgfQogICAgIG1faW5QYWdlQ2Fj
aGUgPSB0cnVlOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAz
NjQ1OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaQogICAgICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgICBtX25lZWRXaWRnZXRVcGRh
dGUgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubG9hZEF0dHIpIHsK
LSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobG9hZEV2ZW50LCBhdHRyKTsKKyAgICAgICAg
c2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUobG9hZEV2ZW50LCBhdHRyKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgewogICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIG5ld05hbWUgPSBhdHRyLT52YWx1ZSgpOwogICAgICAgICBpZiAoaXNEb2NO
YW1lZEl0ZW0oKSAmJiBpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQo
KSkgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNjQ1OSkK
KysrIFdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDcgKzcxLDcgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQog
ICAgIGlmIChhdHRyTmFtZSA9PSBzcmNBdHRyKQogICAgICAgICBoYW5kbGVTb3VyY2VBdHRyaWJ1
dGUobV9kYXRhLCBhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBvbmxv
YWRBdHRyKQotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihsb2FkRXZlbnQsIGF0dHIpOwor
ICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShsb2FkRXZlbnQsIGF0
dHIpOwogICAgIGVsc2UKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogfQpAQCAtMjExLDE1ICsyMTEsMTUgQEAgU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50
OjpsYW5ndWFnZUF0dHJpYgogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobGFuZ3VhZ2VBdHRy
KS5zdHJpbmcoKTsKIH0KLQorIAogdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6ZGlzcGF0Y2hMb2Fk
RXZlbnQoKQogewotICAgIGRpc3BhdGNoSFRNTEV2ZW50KGxvYWRFdmVudCwgZmFsc2UsIGZhbHNl
KTsKKyAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZShsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiB9
CiAKIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCgpCiB7Ci0gICAg
ZGlzcGF0Y2hIVE1MRXZlbnQoZXJyb3JFdmVudCwgdHJ1ZSwgZmFsc2UpOworICAgIGRpc3BhdGNo
RXZlbnRGb3JUeXBlKGVycm9yRXZlbnQsIHRydWUsIGZhbHNlKTsKIH0KIAogfQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNjQ1OSkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NCwxMSArMzc0LDEx
IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgLy8g
RG9uJ3QgbWFwICdhbGlnbicgYXR0cmlidXRlLiAgVGhpcyBtYXRjaGVzIHdoYXQgRmlyZWZveCwg
T3BlcmEgYW5kIElFIGRvLgogICAgICAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIwNzIKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmZv
Y3VzQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihmb2N1c0V2ZW50LCBhdHRy
KTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZm9jdXNFdmVu
dCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25ibHVyQXR0cikgewot
ICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihibHVyRXZlbnQsIGF0dHIpOworICAgICAgICBz
ZXRFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShibHVyRXZlbnQsIGF0dHIpOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uY2hhbmdlQXR0cikgewotICAgICAgICBzZXRI
VE1MRXZlbnRMaXN0ZW5lcihjaGFuZ2VFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50TGlz
dGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGNoYW5nZUV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UK
ICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAzNjQ1OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY4LDEzICsxNjgsMTMgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dAogICAgICAgICAvLyBEb24ndCBtYXAgJ2FsaWduJyBhdHRyaWJ1
dGUuICBUaGlzIG1hdGNoZXMgd2hhdCBGaXJlZm94LCBPcGVyYSBhbmQgSUUgZG8uCiAgICAgICAg
IC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDc1CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25mb2N1c0F0dHIpCi0gICAgICAgIHNldEhUTUxF
dmVudExpc3RlbmVyKGZvY3VzRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShmb2N1c0V2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb25ibHVyQXR0cikKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmx1
ckV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1
dGUoYmx1ckV2ZW50LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxl
Y3RBdHRyKQotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihzZWxlY3RFdmVudCwgYXR0cik7
CisgICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHNlbGVjdEV2ZW50
LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jaGFuZ2VBdHRyKQotICAg
ICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihjaGFuZ2VFdmVudCwgYXR0cik7CisgICAgICAgIHNl
dEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGNoYW5nZUV2ZW50LCBhdHRyKTsKICAg
ICBlbHNlCiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkocmV2aXNp
b24gMzY0NTkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMDIsMTEgKzIwMDIsMTEgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpub3RpZnlGaW5p
c2hlZChDYWNoZQogI2VuZGlmCiAKICAgICAgICAgaWYgKGVycm9yT2NjdXJyZWQpCi0gICAgICAg
ICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4uZ2V0KCkpLT5kaXNwYXRjaEhUTUxFdmVudChlcnJv
ckV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4u
Z2V0KCkpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShlcnJvckV2ZW50LCB0cnVlLCBmYWxzZSk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVt
ZW50Kj4obi5nZXQoKSktPnNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSkKICAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gc2NyaXB0RXhlY3V0aW9uKHNjcmlwdFNvdXJjZSwgbV9zdGF0ZSwgY2Fj
aGVkU2NyaXB0VXJsKTsKLSAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qobi5nZXQoKSkt
PmRpc3BhdGNoSFRNTEV2ZW50KGxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAg
IEV2ZW50VGFyZ2V0Tm9kZUNhc3Qobi5nZXQoKSktPmRpc3BhdGNoRXZlbnRGb3JUeXBlKGxvYWRF
dmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBzdGF0ZSBv
ZiBwZW5kaW5nU2NyaXB0cy5pc0VtcHR5KCkgY2FuIGNoYW5nZSBpbnNpZGUgdGhlIHNjcmlwdEV4
ZWN1dGlvbigpCkluZGV4OiBXZWJDb3JlL3BhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCShyZXZpc2lvbiAzNjQ1OSkKKysrIFdlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk0LDcgKzQ5NCw3IEBAIEVsZW1lbnQqIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1vdXMKICAgICAKICAgICAvLyBGSVhNRTogRG8gdGhl
IGNvbnRpbnVhdGlvbiBzZWFyY2ggbGlrZSBhbmNob3JFbGVtZW50IGRvZXMKICAgICBmb3IgKEV2
ZW50VGFyZ2V0Tm9kZSogZWx0ID0gc3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXROb2RlKj4obm9kZSk7
IGVsdDsgZWx0ID0gc3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXROb2RlKj4oZWx0LT5wYXJlbnROb2Rl
KCkpKSB7Ci0gICAgICAgIGlmIChlbHQtPmdldEhUTUxFdmVudExpc3RlbmVyKGNsaWNrRXZlbnQp
IHx8IGVsdC0+Z2V0SFRNTEV2ZW50TGlzdGVuZXIobW91c2Vkb3duRXZlbnQpIHx8IGVsdC0+Z2V0
SFRNTEV2ZW50TGlzdGVuZXIobW91c2V1cEV2ZW50KSkKKyAgICAgICAgaWYgKGVsdC0+ZXZlbnRM
aXN0ZW5lckZvclR5cGUoY2xpY2tFdmVudCkgfHwgZWx0LT5ldmVudExpc3RlbmVyRm9yVHlwZSht
b3VzZWRvd25FdmVudCkgfHwgZWx0LT5ldmVudExpc3RlbmVyRm9yVHlwZShtb3VzZXVwRXZlbnQp
KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihlbHQpOwogICAgIH0K
ICAgICAKSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAzNjQ1OSkKKysrIFdlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgyLDcgKzE1ODIs
NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6Y2FuTW91c2VEb3duU3RhcnRTZWxlCiAgICAgICAgICAg
ICAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5vZGUtPnJlbmRlcmVyKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgICAgCiAgICAgICAgIGlmIChOb2RlKiBub2RlID0gY3Vy
ci0+ZWxlbWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qobm9k
ZSktPmRpc3BhdGNoSFRNTEV2ZW50KHNlbGVjdHN0YXJ0RXZlbnQsIHRydWUsIHRydWUpOworICAg
ICAgICAgICAgcmV0dXJuIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qobm9kZSktPmRpc3BhdGNoRXZlbnRG
b3JUeXBlKHNlbGVjdHN0YXJ0RXZlbnQsIHRydWUsIHRydWUpOwogICAgIAogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMTU5NCw3ICsxNTk0LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmNhbk1vdXNl
RHJhZ0V4dGVuZFNlbAogICAgICAgICAgICAgCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIg
PSBub2RlLT5yZW5kZXJlcigpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpICAgIAogICAg
ICAgICBpZiAoTm9kZSogbm9kZSA9IGN1cnItPmVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVy
biBFdmVudFRhcmdldE5vZGVDYXN0KG5vZGUpLT5kaXNwYXRjaEhUTUxFdmVudChzZWxlY3RzdGFy
dEV2ZW50LCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBFdmVudFRhcmdldE5vZGVD
YXN0KG5vZGUpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShzZWxlY3RzdGFydEV2ZW50LCB0cnVlLCB0
cnVlKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMzY0
NTkpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzg4LDcg
KzEzODgsNyBAQCB2b2lkIEZyYW1lOjpzZW5kU2Nyb2xsRXZlbnQoKQogICAgIERvY3VtZW50KiBk
b2MgPSBkb2N1bWVudCgpOwogICAgIGlmICghZG9jKQogICAgICAgICByZXR1cm47Ci0gICAgZG9j
LT5kaXNwYXRjaEhUTUxFdmVudChzY3JvbGxFdmVudCwgdHJ1ZSwgZmFsc2UpOworICAgIGRvYy0+
ZGlzcGF0Y2hFdmVudEZvclR5cGUoc2Nyb2xsRXZlbnQsIHRydWUsIGZhbHNlKTsKIH0KIAogdm9p
ZCBGcmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBEb2N1bWVudCAqZG9jdW1lbnQp
CkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCShyZXZpc2lvbiAzNjQ1OSkKKysrIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBzdGF0aWMgdm9pZCBuZXR3b3JrU3RhdGVDaGFu
Z2VkKCkKICAgICAgICAgaWYgKCFldmVudFRhcmdldCkKICAgICAgICAgICAgIGV2ZW50VGFyZ2V0
ID0gZG9jdW1lbnQ7CiAgICAgICAgIAotICAgICAgICBldmVudFRhcmdldC0+ZGlzcGF0Y2hIVE1M
RXZlbnQoZXZlbnROYW1lLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBldmVudFRhcmdldC0+ZGlz
cGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lLCBmYWxzZSwgZmFsc2UpOwogICAgIH0KIH0KICAg
ICAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAzNjQ1OSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzYsNyArNTM2LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xs
YgogICAgICAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OwogICAgICAgICByZXBhaW50KCk7
CiAgICAgICAgIC8vIEZpcmUgdGhlIHNjcm9sbCBET00gZXZlbnQuCi0gICAgICAgIEV2ZW50VGFy
Z2V0Tm9kZUNhc3Qobm9kZSgpKS0+ZGlzcGF0Y2hIVE1MRXZlbnQoc2Nyb2xsRXZlbnQsIGZhbHNl
LCBmYWxzZSk7CisgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3Qobm9kZSgpKS0+ZGlzcGF0Y2hF
dmVudEZvclR5cGUoc2Nyb2xsRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogfQogCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiAzNjQ1OSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODg1LDcgKzg4NSw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVjdGlvbkNo
YW5nZWQKICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpLT5j
YWNoZVNlbGVjdGlvbihzZWxlY3Rpb25TdGFydCgpLCBzZWxlY3Rpb25FbmQoKSk7CiAgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgIGlmIChmcmFtZS0+
c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSAmJiB1c2VyVHJpZ2dlcmVkKQotICAgICAgICAgICAgZWxl
bWVudC0+ZGlzcGF0Y2hIVE1MRXZlbnQoc2VsZWN0RXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICAg
ICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnRGb3JUeXBlKHNlbGVjdEV2ZW50LCB0cnVlLCBm
YWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmF1dG9zY3JvbGwoKQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAzNjQ1OSkKKysrIFdl
YkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDE0ICs1Miw2IEBAIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6flNWR0RvY3VtZW50RXh0ZW4KICAg
ICBkZWxldGVBbGxWYWx1ZXMobV9lbGVtZW50SW5zdGFuY2VzKTsKIH0KIAotUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmNyZWF0ZVNWR0V2ZW50TGlzdGVu
ZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgTm9kZSAq
bm9kZSkKLXsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9kb2MtPmZyYW1lKCkpCi0gICAgICAg
IGlmIChmcmFtZS0+c2NyaXB0KCktPmlzRW5hYmxlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZy
YW1lLT5zY3JpcHQoKS0+Y3JlYXRlU1ZHRXZlbnRIYW5kbGVyKGZ1bmN0aW9uTmFtZSwgY29kZSwg
bm9kZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjph
ZGRUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgbV90aW1lQ29u
dGFpbmVycy5hZGQoZWxlbWVudCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVu
c2lvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
aAkocmV2aXNpb24gMzY0NTkpCisrKyBXZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsNiBAQCBwdWJsaWM6CiAgICAgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zKERvY3VtZW50Kik7CiAgICAgflNWR0RvY3VtZW50RXh0ZW5zaW9ucygpOwog
ICAgIAotICAgIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gY3JlYXRlU1ZHRXZlbnRMaXN0ZW5l
cihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBOb2RlKik7
Ci0gICAgCiAgICAgdm9pZCBhZGRUaW1lQ29udGFpbmVyKFNWR1NWR0VsZW1lbnQqKTsKICAgICB2
b2lkIHJlbW92ZVRpbWVDb250YWluZXIoU1ZHU1ZHRWxlbWVudCopOwogICAgIApJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5jcHAJKHJldmlzaW9uIDM2NDU5KQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMSwzNSArMTExLDI5IEBAIFNWR0VsZW1lbnQqIFNWR0VsZW1l
bnQ6OnZpZXdwb3J0RWxlbWVudCgKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBTVkdFbGVtZW50
OjphZGRTVkdFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25z
dCBBdHRyaWJ1dGUqIGF0dHIpCi17Ci0gICAgRWxlbWVudDo6c2V0SFRNTEV2ZW50TGlzdGVuZXIo
ZXZlbnRUeXBlLCBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPgotICAgICAgICBj
cmVhdGVTVkdFdmVudExpc3RlbmVyKGF0dHItPmxvY2FsTmFtZSgpLnN0cmluZygpLCBhdHRyLT52
YWx1ZSgpLCB0aGlzKSk7Ci19Ci0KIHZvaWQgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIC8vIHN0YW5kYXJkIGV2ZW50cwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0cikKLSAgICAgICAgYWRkU1ZHRXZlbnRMaXN0
ZW5lcihsb2FkRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3RlbmVyRm9yVHlwZUFu
ZEF0dHJpYnV0ZShsb2FkRXZlbnQsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbmNsaWNrQXR0cikKLSAgICAgICAgYWRkU1ZHRXZlbnRMaXN0ZW5lcihjbGlja0V2ZW50LCBh
dHRyKTsKKyAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoY2xpY2tF
dmVudCwgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2Vkb3duQXR0
cikKLSAgICAgICAgYWRkU1ZHRXZlbnRMaXN0ZW5lcihtb3VzZWRvd25FdmVudCwgYXR0cik7Cisg
ICAgICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1vdXNlZG93bkV2ZW50
LCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZW1vdmVBdHRyKQot
ICAgICAgICBhZGRTVkdFdmVudExpc3RlbmVyKG1vdXNlbW92ZUV2ZW50LCBhdHRyKTsKKyAgICAg
ICAgc2V0RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUobW91c2Vtb3ZlRXZlbnQsIGF0
dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbm1vdXNlb3V0QXR0cikKLSAgICAg
ICAgYWRkU1ZHRXZlbnRMaXN0ZW5lcihtb3VzZW91dEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0
RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUobW91c2VvdXRFdmVudCwgYXR0cik7CiAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2VvdmVyQXR0cikKLSAgICAgICAgYWRk
U1ZHRXZlbnRMaXN0ZW5lcihtb3VzZW92ZXJFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2ZW50
TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKG1vdXNlb3ZlckV2ZW50LCBhdHRyKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZXVwQXR0cikKLSAgICAgICAgYWRkU1ZHRXZl
bnRMaXN0ZW5lcihtb3VzZXVwRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShtb3VzZXVwRXZlbnQsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b25mb2N1c2luQXR0cikKLSAgICAgICAgYWRkU1ZHRXZl
bnRMaXN0ZW5lcihET01Gb2N1c0luRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRFdmVudExpc3Rl
bmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShET01Gb2N1c0luRXZlbnQsIGF0dHIpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b25mb2N1c291dEF0dHIpCi0gICAgICAgIGFk
ZFNWR0V2ZW50TGlzdGVuZXIoRE9NRm9jdXNPdXRFdmVudCwgYXR0cik7CisgICAgICAgIHNldEV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKERPTUZvY3VzT3V0RXZlbnQsIGF0dHIpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b25hY3RpdmF0ZUF0dHIpCi0g
ICAgICAgIGFkZFNWR0V2ZW50TGlzdGVuZXIoRE9NQWN0aXZhdGVFdmVudCwgYXR0cik7CisgICAg
ICAgIHNldEV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKERPTUFjdGl2YXRlRXZlbnQs
IGF0dHIpOwogICAgIGVsc2UKICAgICAgICAgU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CiB9CkBAIC0xOTIsNiArMTg2LDggQEAgdm9pZCBTVkdFbGVtZW50OjpzZW5k
U1ZHTG9hZEV2ZW50SWZQb3NzaQogCiB2b2lkIFNWR0VsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGls
ZHJlbigpCiB7CisgICAgU3R5bGVkRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisK
ICAgICAvLyBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKSBpcyBjYWxsZWQgd2hlbiB0aGUgY2xvc2Ug
dGFnIGlzIHJlYWNoZWQgZm9yIGFuIGVsZW1lbnQgKGUuZy4gPC9zdmc+KQogICAgIC8vIHdlIHNl
bmQgU1ZHTG9hZCBldmVudHMgaGVyZSBpZiB3ZSBjYW4sIG90aGVyd2lzZSB0aGV5J2xsIGJlIHNl
bnQgd2hlbiBhbnkgcmVxdWlyZWQgbG9hZHMgZmluaXNoCiAgICAgc2VuZFNWR0xvYWRFdmVudElm
UG9zc2libGUoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDM2NDU5KQorKysgV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGFk
ZFNWR0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IEF0
dHJpYnV0ZSopOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGF2ZUxvYWRlZFJlcXVpcmVkUmVzb3Vy
Y2VzKCk7CiAKICAgICAgICAgTm9kZSogbV9zaGFkb3dQYXJlbnQ7CkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVt
ZW50LmNwcAkocmV2aXNpb24gMzY0NTkpCisrKyBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDMzICsyMDcsMzIgQEAgdm9pZCBTVkdTVkdFbGVtZW50
OjpzZXRDdXJyZW50VHJhbnNsYXRlKAogICAgICAgICBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5y
ZXBhaW50KCk7CiB9CiAKLXZvaWQgU1ZHU1ZHRWxlbWVudDo6YWRkU1ZHV2luZG93RXZlbnRMaXN0
ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgQXR0cmlidXRlKiBhdHRy
KQotewotICAgIC8vIEZJWE1FOiBOb25lIG9mIHRoZXNlIHNob3VsZCBiZSB3aW5kb3cgZXZlbnRz
IGxvbmcgdGVybS4KLSAgICAvLyBPbmNlIHdlIHByb3BlcnRseSBzdXBwb3J0IFNWR0xvYWQsIGV0
Yy4KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBkb2N1bWVudCgpLT5hY2Nl
c3NTVkdFeHRlbnNpb25zKCktPgotICAgICAgICBjcmVhdGVTVkdFdmVudExpc3RlbmVyKGF0dHIt
PmxvY2FsTmFtZSgpLnN0cmluZygpLCBhdHRyLT52YWx1ZSgpLCB0aGlzKTsKLSAgICBkb2N1bWVu
dCgpLT5zZXRIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLnJlbGVh
c2UoKSk7Ci19Ci0KIHZvaWQgU1ZHU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmICghbmVhcmVzdFZpZXdwb3J0RWxlbWVudCgp
KSB7CisgICAgICAgIGJvb2wgc2V0TGlzdGVuZXIgPSB0cnVlOworCiAgICAgICAgIC8vIE9ubHkg
aGFuZGxlIGV2ZW50cyBpZiB3ZSdyZSB0aGUgb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnQKICAgICAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpCi0gICAgICAgICAgICBhZGRTVkdX
aW5kb3dFdmVudExpc3RlbmVyKHVubG9hZEV2ZW50LCBhdHRyKTsKLSAgICAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG9uYWJvcnRBdHRyKQotICAgICAgICAgICAgYWRkU1ZHV2luZG93RXZl
bnRMaXN0ZW5lcihhYm9ydEV2ZW50LCBhdHRyKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG9uZXJyb3JBdHRyKQotICAgICAgICAgICAgYWRkU1ZHV2luZG93RXZlbnRMaXN0ZW5l
cihlcnJvckV2ZW50LCBhdHRyKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0V2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHVubG9hZEV2ZW50LCBhdHRyKTsKICAgICAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ucmVzaXplQXR0cikKLSAgICAgICAgICAgIGFk
ZFNWR1dpbmRvd0V2ZW50TGlzdGVuZXIocmVzaXplRXZlbnQsIGF0dHIpOworICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+c2V0V2luZG93RXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUocmVz
aXplRXZlbnQsIGF0dHIpOwogICAgICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zY3Jv
bGxBdHRyKQotICAgICAgICAgICAgYWRkU1ZHV2luZG93RXZlbnRMaXN0ZW5lcihzY3JvbGxFdmVu
dCwgYXR0cik7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShzY3JvbGxFdmVudCwgYXR0cik7CiAgICAgICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b256b29tQXR0cikKLSAgICAgICAgICAgIGFkZFNW
R1dpbmRvd0V2ZW50TGlzdGVuZXIoem9vbUV2ZW50LCBhdHRyKTsKKyAgICAgICAgICAgIGRvY3Vt
ZW50KCktPnNldFdpbmRvd0V2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKHpvb21FdmVu
dCwgYXR0cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldExpc3RlbmVyID0gZmFsc2U7
CisgCisgICAgICAgIGlmIChzZXRMaXN0ZW5lcikKKyAgICAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCisKKyAgICBpZiAoYXR0
ci0+bmFtZSgpID09IG9uYWJvcnRBdHRyKQorICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dF
dmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShhYm9ydEV2ZW50LCBhdHRyKTsKKyAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lcnJvckF0dHIpCisgICAgICAgIGRvY3VtZW50KCkt
PnNldFdpbmRvd0V2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGVycm9yRXZlbnQsIGF0
dHIpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCiAgICAg
ICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVXaWR0aCwgYXR0ci0+dmFsdWUo
KSkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCiAgICAg
ICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKExlbmd0aE1vZGVIZWlnaHQsIGF0dHItPnZhbHVl
KCkpKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHJldmlzaW9uIDM2NDU5KQorKysgV2ViQ29yZS9z
dmcvU1ZHU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsOCArMTQ1LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKICAgICAgICAgYm9vbCBpc091dGVybW9zdFNWRygpIGNvbnN0OwogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBhZGRTVkdXaW5kb3dFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBBdHRyaWJ1dGUqIGF0dHIpOyAgIAotCiAg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdTVkdFbGVtZW50LCBTVkdO
YW1lczo6c3ZnVGFnU3RyaW5nLCBTVkdOYW1lczo6eEF0dHJTdHJpbmcsIFNWR0xlbmd0aCwgWCwg
eCkKICAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1NWR0VsZW1lbnQs
IFNWR05hbWVzOjpzdmdUYWdTdHJpbmcsIFNWR05hbWVzOjp5QXR0clN0cmluZywgU1ZHTGVuZ3Ro
LCBZLCB5KQogICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHU1ZHRWxl
bWVudCwgU1ZHTmFtZXM6OnN2Z1RhZ1N0cmluZywgU1ZHTmFtZXM6OndpZHRoQXR0clN0cmluZywg
U1ZHTGVuZ3RoLCBXaWR0aCwgd2lkdGgpCg==
</data>
<flag name="review"
          id="10469"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>