<?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>174641</bug_id>
          
          <creation_ts>2017-07-18 12:40:16 -0700</creation_ts>
          <short_desc>[Curl] Move detail implementation from ResourceHandle to ResourceHandleInternal</short_desc>
          <delta_ts>2017-07-18 15:05:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>117300</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>galpeter</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1330066</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-18 12:40:16 -0700</bug_when>
    <thetext>When moving stuff from ResourceHandleManager to ResourceHandle on https://bugs.webkit.org/show_bug.cgi?id=173630, still there&apos;re many violation remains between ResourceHandle and ResourceHandleInternal classes. Many of implementation detail should be move to ResourceHandleInternal to improve build speed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330076</commentid>
    <comment_count>1</comment_count>
      <attachid>315824</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-18 13:04:20 -0700</bug_when>
    <thetext>Created attachment 315824
PATCH

Just moved to hide implementation from public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330110</commentid>
    <comment_count>2</comment_count>
      <attachid>315824</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-18 14:05:16 -0700</bug_when>
    <thetext>Comment on attachment 315824
PATCH

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

I don&apos;t think ResourceHandleInternal should&apos;ve ever been separated from ResourceHandle.  They should&apos;ve been one class.

Keep in mind, the end goal is to have all this networking code work with the NetworkDataTask abstraction.  Carlos Garcia did something similar with lib soup in these bugs, which were very heavily based on the asynchronous ResourceHandle work.
https://bugs.webkit.org/show_bug.cgi?id=163597
https://bugs.webkit.org/show_bug.cgi?id=163777
https://bugs.webkit.org/show_bug.cgi?id=163939

&gt; Source/WebCore/platform/network/ResourceHandleInternal.h:92
&gt; +        , m_handle { loader }

Ideally a ResourceHandleInternal wouldn&apos;t need to store a pointer to its ResourceHandle, but whatevs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330127</commentid>
    <comment_count>3</comment_count>
      <attachid>315824</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-18 14:34:04 -0700</bug_when>
    <thetext>Comment on attachment 315824
PATCH

Clearing flags on attachment: 315824

Committed r219630: &lt;http://trac.webkit.org/changeset/219630&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330128</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-18 14:34:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330142</commentid>
    <comment_count>5</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-18 15:05:24 -0700</bug_when>
    <thetext>&gt; I don&apos;t think ResourceHandleInternal should&apos;ve ever been separated from
&gt; ResourceHandle.  They should&apos;ve been one class.

Again, please think this to improve the speed of further implementation. Build time it currently issue for productivity.


&gt; Keep in mind, the end goal is to have all this networking code work with the
&gt; NetworkDataTask abstraction.  Carlos Garcia did something similar with lib
&gt; soup in these bugs, which were very heavily based on the asynchronous
&gt; ResourceHandle work.
&gt; https://bugs.webkit.org/show_bug.cgi?id=163597
&gt; https://bugs.webkit.org/show_bug.cgi?id=163777
&gt; https://bugs.webkit.org/show_bug.cgi?id=163939

I&apos;ll check them. 

&gt; &gt; Source/WebCore/platform/network/ResourceHandleInternal.h:92
&gt; &gt; +        , m_handle { loader }
&gt; 
&gt; Ideally a ResourceHandleInternal wouldn&apos;t need to store a pointer to its
&gt; ResourceHandle, but whatevs.

Thanks for understanding. We remove that pretty soon.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315824</attachid>
            <date>2017-07-18 13:04:20 -0700</date>
            <delta_ts>2017-07-18 14:34:04 -0700</delta_ts>
            <desc>PATCH</desc>
            <filename>174641-2.diff</filename>
            <type>text/plain</type>
            <size>40295</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhZTRhNDViZjUyMi4uMDZlODY5OTNkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAxNy0wNy0xOCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIE1vdmUgZGV0YWlsIGltcGxlbWVudGF0aW9uIGZyb20g
UmVzb3VyY2VIYW5kbGUgdG8gUmVzb3VyY2VIYW5kbGVJbnRlcm5hbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NjQxCisKKyAgICAgICAgQWZ0ZXIg
bW92aW5nIHN0dWZmIGZyb20gUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIHRvIFJlc291cmNlSGFuZGxl
IG9uIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcz
NjMwLCBzdGlsbCB0aGVyZSdyZSBtYW55IHZpb2xhdGlvbgorICAgICAgICByZW1haW5zIGJldHdl
ZW4gUmVzb3VyY2VIYW5kbGUgYW5kIFJlc291cmNlSGFuZGxlSW50ZXJuYWwgY2xhc3Nlcy4KKyAg
ICAgICAgTWFueSBvZiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgc2hvdWxkIGJlIG1vdmUgdG8gUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbAorICAgICAgICB0byBpbXByb3ZlIGJ1aWxkIHNwZWVkLgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbDo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVy
bmFsOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJu
YWw6OmFwcGx5QXV0aGVudGljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6c2V0dXBQVVQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbDo6c2V0dXBQT1NUKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50
ZXJuYWw6OnNldHVwRm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZUludGVybmFsOjpkaWRGaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUlu
dGVybmFsOjpjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6aGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6d2lsbFByZXBhcmVTZW5k
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRSZWNl
aXZlSGVhZGVyTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFs
OjpkaWRSZWNlaXZlQWxsSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZUludGVybmFsOjpkaWRSZWNlaXZlQ29udGVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGVJbnRlcm5hbDo6cmVhZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlSW50ZXJuYWw6OmhlYWRlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OndyaXRlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaXNwYXRjaFN5bmNocm9u
b3VzSm9iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmhhbmRs
ZURhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmluaXRpYWxpemUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmFwcGx5QXV0aGVu
dGljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNl
dHVwUFVUKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXR1
cFBPU1QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldHVw
Rm9ybURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRp
ZEZpbmlzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlk
RmFpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y2FsY3Vs
YXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbFByZXBhcmVTZW5kRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUhlYWRlckxp
bmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2Vp
dmVBbGxIZWFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
OjpkaWRSZWNlaXZlQ29udGVudERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGU6OnJlYWRDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6aGVhZGVyQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OndyaXRlQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpc3BhdGNoU3luY2hyb25vdXNKb2IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwpOiBEZWxldGVk
LgorCiAyMDE3LTA3LTE4ICBNYXR0IExld2lzICA8amxld2lzM0BhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIxOTYxMC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCAyMDY5MzEwMzUzZi4uMTIz
ZWE1YTJhNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmgKQEAgLTY4LDExICs2OCw2IEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRU
UENvb2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7CiB0eXBlZGVmIGNvbnN0IHN0
cnVjdCBfX0NGVVJMU3RvcmFnZVNlc3Npb24qIENGVVJMU3RvcmFnZVNlc3Npb25SZWY7CiAjZW5k
aWYKIAotI2lmIFVTRShDVVJMKQotI2luY2x1ZGUgIkN1cmxKb2JNYW5hZ2VyLmgiCi0jaW5jbHVk
ZSA8d3RmL0xvY2suaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFNjaGVkdWxl
UGFpcjsKIH0KQEAgLTI4Nyw0MSArMjgyLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRpbWVvdXRG
aXJlZCgpOwogI2VuZGlmCiAKLSNpZiBVU0UoQ1VSTCkKLSAgICBDdXJsSm9iVGlja2V0IG1fam9i
OwotCi0gICAgVmVjdG9yPGNoYXI+IG1fcmVjZWl2ZWRCdWZmZXI7Ci0gICAgTG9jayBtX3JlY2Vp
dmVkQnVmZmVyTXV0ZXg7Ci0KLSAgICB2b2lkIGluaXRpYWxpemUoKTsKLSAgICB2b2lkIGFwcGx5
QXV0aGVudGljYXRpb24oKTsKLSAgICB2b2lkIHNldHVwUE9TVCgpOwotICAgIHZvaWQgc2V0dXBQ
VVQoKTsKLSAgICB2b2lkIHNldHVwRm9ybURhdGEoYm9vbCBpc1Bvc3RSZXF1ZXN0KTsKLQotICAg
IHZvaWQgZGlkRmluaXNoKCk7Ci0gICAgdm9pZCBkaWRGYWlsKCk7Ci0KLSAgICBzaXplX3Qgd2ls
bFByZXBhcmVTZW5kRGF0YShjaGFyKiBwdHIsIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1i
ZXJPZkJsb2Nrcyk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlSGVhZGVyTGluZShjb25zdCBTdHJpbmcm
IGhlYWRlcik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlQWxsSGVhZGVycyhsb25nIGh0dHBDb2RlLCBs
b25nIGxvbmcgY29udGVudExlbmd0aCk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlQ29udGVudERhdGEo
KTsKLQotICAgIHZvaWQgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoKTsKLQotICAgIHN0YXRp
YyBzaXplX3QgcmVhZENhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90
IG51bWJlck9mQmxvY2tzLCB2b2lkKiBkYXRhKTsKLSAgICBzdGF0aWMgc2l6ZV90IGhlYWRlckNh
bGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tz
LCB2b2lkKiBkYXRhKTsKLSAgICBzdGF0aWMgc2l6ZV90IHdyaXRlQ2FsbGJhY2soY2hhciogcHRy
LCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MsIHZvaWQqIGRhdGEpOwot
Ci0gICAgdm9pZCBkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCk7Ci0gICAgdm9pZCBoYW5kbGVEYXRh
VVJMKCk7Ci0KLSNpZiBFTkFCTEUoV0VCX1RJTUlORykKLSAgICB2b2lkIGNhbGN1bGF0ZVdlYlRp
bWluZ0luZm9ybWF0aW9ucygpOwotI2VuZGlmCi0KLSNlbmRpZgotCiAgICAgZnJpZW5kIGNsYXNz
IFJlc291cmNlSGFuZGxlSW50ZXJuYWw7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlSGFu
ZGxlSW50ZXJuYWw+IGQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAppbmRleCAwOWFmNzUxYzA2OS4uOWUy
ZGFjMDY0ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00NCw4ICs0NCwxMCBAQAogCiAjaWYgVVNF
KENVUkwpCiAjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKKyNpbmNsdWRlICJDdXJsSm9iTWFuYWdl
ci5oIgogI2luY2x1ZGUgIkZvcm1EYXRhU3RyZWFtQ3VybC5oIgogI2luY2x1ZGUgIk11bHRpcGFy
dEhhbmRsZS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjZW5kaWYKIAogI2lmIFVTRShTT1VQ
KQpAQCAtODcsNyArODksOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jdXJyZW50UmVxdWVzdChy
ZXF1ZXN0KQogI2VuZGlmCiAjaWYgVVNFKENVUkwpCi0gICAgICAgICwgbV9mb3JtRGF0YVN0cmVh
bShsb2FkZXIpCisgICAgICAgICwgbV9oYW5kbGUgeyBsb2FkZXIgfQorICAgICAgICAsIG1fZm9y
bURhdGFTdHJlYW0geyBsb2FkZXIgfQogI2VuZGlmCiAjaWYgVVNFKFNPVVApCiAgICAgICAgICwg
bV90aW1lb3V0U291cmNlKFJ1bkxvb3A6Om1haW4oKSwgbG9hZGVyLCAmUmVzb3VyY2VIYW5kbGU6
OnRpbWVvdXRGaXJlZCkKQEAgLTEzNyw2ICsxNDAsNyBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRy
PENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IG1fc3RvcmFnZVNlc3Npb247CiAjZW5kaWYKICNpZiBV
U0UoQ1VSTCkKKyAgICBSZXNvdXJjZUhhbmRsZSogbV9oYW5kbGU7CiAgICAgQ3VybEhhbmRsZSBt
X2N1cmxIYW5kbGU7CiAKICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CkBAIC0xNDks
NyArMTUzLDQwIEBAIHB1YmxpYzoKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxNdWx0aXBhcnRIYW5k
bGU+IG1fbXVsdGlwYXJ0SGFuZGxlOwogICAgIGJvb2wgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhl
YWRlcnMgeyBmYWxzZSB9OworICAgIEN1cmxKb2JUaWNrZXQgbV9qb2IgeyBudWxscHRyIH07CisK
KyAgICBWZWN0b3I8Y2hhcj4gbV9yZWNlaXZlZEJ1ZmZlcjsKKyAgICBMb2NrIG1fcmVjZWl2ZWRC
dWZmZXJNdXRleDsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgYXBwbHlBdXRo
ZW50aWNhdGlvbigpOworICAgIHZvaWQgc2V0dXBQT1NUKCk7CisgICAgdm9pZCBzZXR1cFBVVCgp
OworICAgIHZvaWQgc2V0dXBGb3JtRGF0YShib29sIGlzUG9zdFJlcXVlc3QpOworCisgICAgdm9p
ZCBkaWRGaW5pc2goKTsKKyAgICB2b2lkIGRpZEZhaWwoKTsKKworICAgIHNpemVfdCB3aWxsUHJl
cGFyZVNlbmREYXRhKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9m
QmxvY2tzKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVIZWFkZXJMaW5lKGNvbnN0IFN0cmluZyYgaGVh
ZGVyKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVBbGxIZWFkZXJzKGxvbmcgaHR0cENvZGUsIGxvbmcg
bG9uZyBjb250ZW50TGVuZ3RoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVDb250ZW50RGF0YSgpOwor
CisgICAgdm9pZCBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSgpOworCisgICAgc3RhdGljIHNp
emVfdCByZWFkQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVt
YmVyT2ZCbG9ja3MsIHZvaWQqIGRhdGEpOworICAgIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJh
Y2soY2hhciogcHRyLCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MsIHZv
aWQqIGRhdGEpOworICAgIHN0YXRpYyBzaXplX3Qgd3JpdGVDYWxsYmFjayhjaGFyKiBwdHIsIHNp
emVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCogZGF0YSk7CisKKyAg
ICB2b2lkIGRpc3BhdGNoU3luY2hyb25vdXNKb2IoKTsKKyAgICB2b2lkIGhhbmRsZURhdGFVUkwo
KTsKKworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIHZvaWQgY2FsY3VsYXRlV2ViVGltaW5n
SW5mb3JtYXRpb25zKCk7CiAjZW5kaWYKKworI2VuZGlmCisKICNpZiBVU0UoU09VUCkKICAgICBT
b3VwTmV0d29ya1Nlc3Npb24qIG1fc2Vzc2lvbiB7IG51bGxwdHIgfTsKICAgICBHUmVmUHRyPFNv
dXBNZXNzYWdlPiBtX3NvdXBNZXNzYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAppbmRleCBlNjMz
MjIzOTQzMi4uMTIxNmM1ODFlMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCkBAIC00OSw3ICs0
OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJl
c291cmNlSGFuZGxlSW50ZXJuYWwoKQogewotCiB9CiAKIFJlc291cmNlSGFuZGxlOjp+UmVzb3Vy
Y2VIYW5kbGUoKQpAQCAtNjgsMjUgKzY3LDI1IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0
KCkKICAgICBpZiAoZC0+bV9jb250ZXh0ICYmICFkLT5tX2NvbnRleHQtPmlzVmFsaWQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW5pdGlhbGl6ZSgpOworICAgIGQtPmluaXRpYWxp
emUoKTsKIAotICAgIG1fam9iID0gQ3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbigpLmFkZChkLT5t
X2N1cmxIYW5kbGUsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKEN1cmxK
b2JSZXN1bHQgcmVzdWx0KSB7CisgICAgZC0+bV9qb2IgPSBDdXJsSm9iTWFuYWdlcjo6c2luZ2xl
dG9uKCkuYWRkKGQtPm1fY3VybEhhbmRsZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKV0oQ3VybEpvYlJlc3VsdCByZXN1bHQpIHsKICAgICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKIAogICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgICAgICBjYXNlIEN1cmxK
b2JSZXN1bHQ6OkRvbmU6Ci0gICAgICAgICAgICBkaWRGaW5pc2goKTsKKyAgICAgICAgICAgIGQt
PmRpZEZpbmlzaCgpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDdXJsSm9i
UmVzdWx0OjpFcnJvcjoKLSAgICAgICAgICAgIGRpZEZhaWwoKTsKKyAgICAgICAgICAgIGQtPmRp
ZEZhaWwoKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ3VybEpvYlJlc3Vs
dDo6Q2FuY2VsbGVkOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9KTsKLSAg
ICBBU1NFUlQobV9qb2IpOworICAgIEFTU0VSVChkLT5tX2pvYik7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTk0LDE5ICs5MywxOCBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydCgpCiB2
b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQogewogICAgIGQtPm1fY2FuY2VsbGVkID0gdHJ1
ZTsKLSAgICBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuY2FuY2VsKG1fam9iKTsKKyAgICBD
dXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuY2FuY2VsKGQtPm1fam9iKTsKIH0KIAotdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6aW5pdGlhbGl6ZSgpCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6
OmluaXRpYWxpemUoKQogewogICAgIEN1cmxDb250ZXh0JiBjb250ZXh0ID0gQ3VybENvbnRleHQ6
OnNpbmdsZXRvbigpOwogCi0gICAgVVJMIHVybCA9IGZpcnN0UmVxdWVzdCgpLnVybCgpOworICAg
IFVSTCB1cmwgPSBtX2ZpcnN0UmVxdWVzdC51cmwoKTsKIAogICAgIC8vIFJlbW92ZSBhbnkgZnJh
Z21lbnQgcGFydCwgb3RoZXJ3aXNlIGN1cmwgd2lsbCBzZW5kIGl0IGFzIHBhcnQgb2YgdGhlIHJl
cXVlc3QuCiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogCi0gICAgUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbCogZCA9IGdldEludGVybmFsKCk7CiAgICAgU3RyaW5nIHVybFN0cmlu
ZyA9IHVybC5zdHJpbmcoKTsKIAogICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkgewpAQCAtMTE3
LDEyMCArMTE1LDExNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjppbml0aWFsaXplKCkKICAgICAg
ICAgICAgIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKICAgICAgICAgfQogICAgICAgICAvLyBE
ZXRlcm1pbmUgdGhlIE1JTUUgdHlwZSBiYXNlZCBvbiB0aGUgcGF0aC4KLSAgICAgICAgZC0+bV9y
ZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgo
dXJsKSk7CisgICAgICAgIG1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoTUlNRVR5cGVSZWdpc3RyeTo6
Z2V0TUlNRVR5cGVGb3JQYXRoKHVybCkpOwogICAgIH0KIAotICAgIGlmIChkLT5tX2RlZmVyc0xv
YWRpbmcpIHsKLSAgICAgICAgQ1VSTGNvZGUgZXJyb3IgPSBkLT5tX2N1cmxIYW5kbGUucGF1c2Uo
Q1VSTFBBVVNFX0FMTCk7CisgICAgaWYgKG1fZGVmZXJzTG9hZGluZykgeworICAgICAgICBDVVJM
Y29kZSBlcnJvciA9IG1fY3VybEhhbmRsZS5wYXVzZShDVVJMUEFVU0VfQUxMKTsKICAgICAgICAg
Ly8gSWYgd2UgZGlkIG5vdCBwYXVzZSB0aGUgaGFuZGxlLCB3ZSB3b3VsZCBBU1NFUlQgaW4gdGhl
CiAgICAgICAgIC8vIGhlYWRlciBjYWxsYmFjay4gU28ganVzdCBhc3NlcnQgaGVyZS4KICAgICAg
ICAgQVNTRVJUX1VOVVNFRChlcnJvciwgZXJyb3IgPT0gQ1VSTEVfT0spOwogICAgIH0KIAogI2lm
bmRlZiBOREVCVUcKLSAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlVmVyYm9zZUlmVXNlZCgpOwot
ICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVTdGRFcnJJZlVzZWQoKTsKKyAgICBtX2N1cmxIYW5k
bGUuZW5hYmxlVmVyYm9zZUlmVXNlZCgpOworICAgIG1fY3VybEhhbmRsZS5lbmFibGVTdGRFcnJJ
ZlVzZWQoKTsKICNlbmRpZgogCi0gICAgZC0+bV9jdXJsSGFuZGxlLnNldFNzbFZlcmlmeVBlZXIo
Q3VybEhhbmRsZTo6VmVyaWZ5UGVlckVuYWJsZSk7Ci0gICAgZC0+bV9jdXJsSGFuZGxlLnNldFNz
bFZlcmlmeUhvc3QoQ3VybEhhbmRsZTo6VmVyaWZ5SG9zdFN0cmljdE5hbWVDaGVjayk7Ci0gICAg
ZC0+bV9jdXJsSGFuZGxlLnNldFByaXZhdGVEYXRhKHRoaXMpOwotICAgIGQtPm1fY3VybEhhbmRs
ZS5zZXRXcml0ZUNhbGxiYWNrRnVuY3Rpb24od3JpdGVDYWxsYmFjaywgdGhpcyk7Ci0gICAgZC0+
bV9jdXJsSGFuZGxlLnNldEhlYWRlckNhbGxiYWNrRnVuY3Rpb24oaGVhZGVyQ2FsbGJhY2ssIHRo
aXMpOwotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVBdXRvUmVmZXJlcigpOwotICAgIGQtPm1f
Y3VybEhhbmRsZS5lbmFibGVGb2xsb3dMb2NhdGlvbigpOwotICAgIGQtPm1fY3VybEhhbmRsZS5l
bmFibGVIdHRwQXV0aGVudGljYXRpb24oQ1VSTEFVVEhfQU5ZKTsKLSAgICBkLT5tX2N1cmxIYW5k
bGUuZW5hYmxlU2hhcmVIYW5kbGUoKTsKLSAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlVGltZW91
dCgpOwotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVBbGxvd2VkUHJvdG9jb2xzKCk7Ci0gICAg
c2V0U1NMQ2xpZW50Q2VydGlmaWNhdGUodGhpcyk7CisgICAgbV9jdXJsSGFuZGxlLnNldFNzbFZl
cmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlckVuYWJsZSk7CisgICAgbV9jdXJsSGFuZGxl
LnNldFNzbFZlcmlmeUhvc3QoQ3VybEhhbmRsZTo6VmVyaWZ5SG9zdFN0cmljdE5hbWVDaGVjayk7
CisgICAgbV9jdXJsSGFuZGxlLnNldFByaXZhdGVEYXRhKHRoaXMpOworICAgIG1fY3VybEhhbmRs
ZS5zZXRXcml0ZUNhbGxiYWNrRnVuY3Rpb24od3JpdGVDYWxsYmFjaywgdGhpcyk7CisgICAgbV9j
dXJsSGFuZGxlLnNldEhlYWRlckNhbGxiYWNrRnVuY3Rpb24oaGVhZGVyQ2FsbGJhY2ssIHRoaXMp
OworICAgIG1fY3VybEhhbmRsZS5lbmFibGVBdXRvUmVmZXJlcigpOworICAgIG1fY3VybEhhbmRs
ZS5lbmFibGVGb2xsb3dMb2NhdGlvbigpOworICAgIG1fY3VybEhhbmRsZS5lbmFibGVIdHRwQXV0
aGVudGljYXRpb24oQ1VSTEFVVEhfQU5ZKTsKKyAgICBtX2N1cmxIYW5kbGUuZW5hYmxlU2hhcmVI
YW5kbGUoKTsKKyAgICBtX2N1cmxIYW5kbGUuZW5hYmxlVGltZW91dCgpOworICAgIG1fY3VybEhh
bmRsZS5lbmFibGVBbGxvd2VkUHJvdG9jb2xzKCk7CisgICAgc2V0U1NMQ2xpZW50Q2VydGlmaWNh
dGUobV9oYW5kbGUpOwogCiAgICAgaWYgKEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zaG91bGRJ
Z25vcmVTU0xFcnJvcnMoKSkKLSAgICAgICAgZC0+bV9jdXJsSGFuZGxlLnNldFNzbFZlcmlmeVBl
ZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlckRpc2FibGUpOworICAgICAgICBtX2N1cmxIYW5kbGUu
c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyRGlzYWJsZSk7CiAgICAgZWxz
ZQotICAgICAgICBzZXRTU0xWZXJpZnlPcHRpb25zKHRoaXMpOworICAgICAgICBzZXRTU0xWZXJp
ZnlPcHRpb25zKG1faGFuZGxlKTsKIAotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVDQUluZm9J
ZkV4aXN0cygpOworICAgIG1fY3VybEhhbmRsZS5lbmFibGVDQUluZm9JZkV4aXN0cygpOwogCi0g
ICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUFjY2VwdEVuY29kaW5nKCk7Ci0gICAgZC0+bV9jdXJs
SGFuZGxlLnNldFVybCh1cmxTdHJpbmcpOwotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVDb29r
aWVKYXJJZkV4aXN0cygpOworICAgIG1fY3VybEhhbmRsZS5lbmFibGVBY2NlcHRFbmNvZGluZygp
OworICAgIG1fY3VybEhhbmRsZS5zZXRVcmwodXJsU3RyaW5nKTsKKyAgICBtX2N1cmxIYW5kbGUu
ZW5hYmxlQ29va2llSmFySWZFeGlzdHMoKTsKIAotICAgIGlmIChmaXJzdFJlcXVlc3QoKS5odHRw
SGVhZGVyRmllbGRzKCkuc2l6ZSgpKSB7Ci0gICAgICAgIGF1dG8gY3VzdG9tSGVhZGVycyA9IGZp
cnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsKKyAgICBpZiAobV9maXJzdFJlcXVlc3Qu
aHR0cEhlYWRlckZpZWxkcygpLnNpemUoKSkgeworICAgICAgICBhdXRvIGN1c3RvbUhlYWRlcnMg
PSBtX2ZpcnN0UmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CiAgICAgICAgIGF1dG8mIGNhY2hl
ID0gQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKTsKIAogICAgICAgICBib29sIGhhc0Nh
Y2hlSGVhZGVycyA9IGN1c3RvbUhlYWRlcnMuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTW9k
aWZpZWRTaW5jZSkgfHwgY3VzdG9tSGVhZGVycy5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6SWZO
b25lTWF0Y2gpOwogICAgICAgICBpZiAoIWhhc0NhY2hlSGVhZGVycyAmJiBjYWNoZS5pc0NhY2hl
ZCh1cmwpKSB7Ci0gICAgICAgICAgICBjYWNoZS5hZGRDYWNoZUVudHJ5Q2xpZW50KHVybCwgdGhp
cyk7CisgICAgICAgICAgICBjYWNoZS5hZGRDYWNoZUVudHJ5Q2xpZW50KHVybCwgbV9oYW5kbGUp
OwogCiAgICAgICAgICAgICAvLyBhcHBlbmQgYWRkaXRpb25hbCBjYWNoZSBpbmZvcm1hdGlvbgog
ICAgICAgICAgICAgZm9yIChhdXRvIGVudHJ5IDogY2FjaGUucmVxdWVzdEhlYWRlcnModXJsKSkK
ICAgICAgICAgICAgICAgICBjdXN0b21IZWFkZXJzLnNldChlbnRyeS5rZXksIGVudHJ5LnZhbHVl
KTsKIAotICAgICAgICAgICAgZC0+bV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSB0cnVl
OworICAgICAgICAgICAgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSB0cnVlOwogICAg
ICAgICB9CiAKLSAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmFwcGVuZFJlcXVlc3RIZWFkZXJzKGN1
c3RvbUhlYWRlcnMpOworICAgICAgICBtX2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVzdEhlYWRlcnMo
Y3VzdG9tSGVhZGVycyk7CiAgICAgfQogCi0gICAgU3RyaW5nIG1ldGhvZCA9IGZpcnN0UmVxdWVz
dCgpLmh0dHBNZXRob2QoKTsKKyAgICBTdHJpbmcgbWV0aG9kID0gbV9maXJzdFJlcXVlc3QuaHR0
cE1ldGhvZCgpOwogICAgIGlmICgiR0VUIiA9PSBtZXRob2QpCi0gICAgICAgIGQtPm1fY3VybEhh
bmRsZS5lbmFibGVIdHRwR2V0UmVxdWVzdCgpOworICAgICAgICBtX2N1cmxIYW5kbGUuZW5hYmxl
SHR0cEdldFJlcXVlc3QoKTsKICAgICBlbHNlIGlmICgiUE9TVCIgPT0gbWV0aG9kKQogICAgICAg
ICBzZXR1cFBPU1QoKTsKICAgICBlbHNlIGlmICgiUFVUIiA9PSBtZXRob2QpCiAgICAgICAgIHNl
dHVwUFVUKCk7CiAgICAgZWxzZSBpZiAoIkhFQUQiID09IG1ldGhvZCkKLSAgICAgICAgZC0+bV9j
dXJsSGFuZGxlLmVuYWJsZUh0dHBIZWFkUmVxdWVzdCgpOworICAgICAgICBtX2N1cmxIYW5kbGUu
ZW5hYmxlSHR0cEhlYWRSZXF1ZXN0KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGQtPm1fY3VybEhh
bmRsZS5zZXRIdHRwQ3VzdG9tUmVxdWVzdChtZXRob2QpOworICAgICAgICBtX2N1cmxIYW5kbGUu
c2V0SHR0cEN1c3RvbVJlcXVlc3QobWV0aG9kKTsKICAgICAgICAgc2V0dXBQVVQoKTsKICAgICB9
CiAKLSAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlUmVxdWVzdEhlYWRlcnMoKTsKKyAgICBtX2N1
cmxIYW5kbGUuZW5hYmxlUmVxdWVzdEhlYWRlcnMoKTsKIAogICAgIGFwcGx5QXV0aGVudGljYXRp
b24oKTsKIAotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVQcm94eUlmRXhpc3RzKCk7CisgICAg
bV9jdXJsSGFuZGxlLmVuYWJsZVByb3h5SWZFeGlzdHMoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhh
bmRsZTo6YXBwbHlBdXRoZW50aWNhdGlvbigpCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6
OmFwcGx5QXV0aGVudGljYXRpb24oKQogewotICAgIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCA9
IGZpcnN0UmVxdWVzdCgpOwogICAgIC8vIG1fdXNlci9tX3Bhc3MgYXJlIGNyZWRlbnRpYWxzIGdp
dmVuIG1hbnVhbGx5LCBmb3IgaW5zdGFuY2UsIGJ5IHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIFhN
TEh0dHBSZXF1ZXN0Lm9wZW4oKS4KLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gZ2V0
SW50ZXJuYWwoKTsKKyAgICBTdHJpbmcgcGFydGl0aW9uID0gbV9maXJzdFJlcXVlc3QuY2FjaGVQ
YXJ0aXRpb24oKTsKIAotICAgIFN0cmluZyBwYXJ0aXRpb24gPSByZXF1ZXN0LmNhY2hlUGFydGl0
aW9uKCk7Ci0KLSAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkgewotICAgICAg
ICBpZiAoZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bhc3MuaXNFbXB0eSgpKSB7CisgICAg
aWYgKG1faGFuZGxlLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpKSB7CisgICAgICAgIGlm
IChtX3VzZXIuaXNFbXB0eSgpICYmIG1fcGFzcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8v
IDxyZGFyOi8vcHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhz
IG9mIHRob3NlIHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNh
dGlvbiwgCiAgICAgICAgICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVt
cHRpdmVseSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSAgICAgICAgICAgIGQtPm1faW5pdGlh
bENyZWRlbnRpYWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdl
KCkuZ2V0KHBhcnRpdGlvbiwgcmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBtX2luaXRpYWxD
cmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgp
LmdldChwYXJ0aXRpb24sIG1fZmlyc3RSZXF1ZXN0LnVybCgpKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90ZWN0aW9uIHNwYWNlIGtu
b3duIGZvciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxzCiAgICAgICAgICAgICAv
LyBiZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1w
bGVtZW50IGxvZ291dCBieSBzZW5kaW5nIGFuCiAgICAgICAgICAgICAvLyBYTUxIdHRwUmVxdWVz
dCB3aXRoIGtub3duIGluY29ycmVjdCBjcmVkZW50aWFscywgYW5kIGFib3J0aW5nIGl0IGltbWVk
aWF0ZWx5IChzbyB0aGF0CiAgICAgICAgICAgICAvLyBhbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cg
ZG9lc24ndCBwb3AgdXApLgotICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRD
cmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRpb24sIENyZWRlbnRpYWwoZC0+bV91c2VyLCBk
LT5tX3Bhc3MsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCByZXF1ZXN0LnVybCgpKTsKKyAg
ICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5z
ZXQocGFydGl0aW9uLCBDcmVkZW50aWFsKG1fdXNlciwgbV9wYXNzLCBDcmVkZW50aWFsUGVyc2lz
dGVuY2VOb25lKSwgbV9maXJzdFJlcXVlc3QudXJsKCkpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgU3RyaW5nIHVzZXIgPSBkLT5tX3VzZXI7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gZC0+bV9w
YXNzOworICAgIFN0cmluZyB1c2VyID0gbV91c2VyOworICAgIFN0cmluZyBwYXNzd29yZCA9IG1f
cGFzczsKIAotICAgIGlmICghZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgdXNlciA9IGQtPm1faW5pdGlhbENyZWRlbnRpYWwudXNlcigpOwotICAgICAgICBwYXNz
d29yZCA9IGQtPm1faW5pdGlhbENyZWRlbnRpYWwucGFzc3dvcmQoKTsKLSAgICAgICAgZC0+bV9j
dXJsSGFuZGxlLmVuYWJsZUh0dHBBdXRoZW50aWNhdGlvbihDVVJMQVVUSF9CQVNJQyk7CisgICAg
aWYgKCFtX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgeworICAgICAgICB1c2VyID0gbV9p
bml0aWFsQ3JlZGVudGlhbC51c2VyKCk7CisgICAgICAgIHBhc3N3b3JkID0gbV9pbml0aWFsQ3Jl
ZGVudGlhbC5wYXNzd29yZCgpOworICAgICAgICBtX2N1cmxIYW5kbGUuZW5hYmxlSHR0cEF1dGhl
bnRpY2F0aW9uKENVUkxBVVRIX0JBU0lDKTsKICAgICB9CiAKICAgICAvLyBJdCBzZWVtcyB3ZSBu
ZWVkIHRvIHNldCBDVVJMT1BUX1VTRVJQV0QgZXZlbiBpZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQg
aXMgZW1wdHkuCiAgICAgLy8gT3RoZXJ3aXNlIGNVUkwgd2lsbCBub3QgYXV0b21hdGljYWxseSBj
b250aW51ZSB3aXRoIGEgbmV3IHJlcXVlc3QgYWZ0ZXIgYSA0MDEgcmVzcG9uc2UuCiAKICAgICAv
LyBjdXJsIENVUkxPUFRfVVNFUlBXRCBleHBlY3RzIHVzZXJuYW1lOnBhc3N3b3JkCi0gICAgZC0+
bV9jdXJsSGFuZGxlLnNldEh0dHBBdXRoVXNlclBhc3ModXNlciwgcGFzc3dvcmQpOworICAgIG1f
Y3VybEhhbmRsZS5zZXRIdHRwQXV0aFVzZXJQYXNzKHVzZXIsIHBhc3N3b3JkKTsKIH0KIAogc3Rh
dGljIGlubGluZSBzaXplX3QgZ2V0Rm9ybUVsZW1lbnRzQ291bnQoUmVzb3VyY2VIYW5kbGUqIGpv
YikKQEAgLTI0OCw0NSArMjQzLDQ1IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGdldEZvcm1FbGVt
ZW50c0NvdW50KFJlc291cmNlSGFuZGxlKiBqb2IpCiAgICAgcmV0dXJuIHNpemU7CiB9CiAKLXZv
aWQgUmVzb3VyY2VIYW5kbGU6OnNldHVwUFVUKCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bDo6c2V0dXBQVVQoKQogewotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVIdHRwUHV0UmVxdWVz
dCgpOworICAgIG1fY3VybEhhbmRsZS5lbmFibGVIdHRwUHV0UmVxdWVzdCgpOwogCiAgICAgLy8g
RGlzYWJsZSB0aGUgRXhwZWN0OiAxMDAgY29udGludWUgaGVhZGVyCi0gICAgZC0+bV9jdXJsSGFu
ZGxlLmFwcGVuZFJlcXVlc3RIZWFkZXIoIkV4cGVjdDoiKTsKKyAgICBtX2N1cmxIYW5kbGUuYXBw
ZW5kUmVxdWVzdEhlYWRlcigiRXhwZWN0OiIpOwogCi0gICAgc2l6ZV90IG51bUVsZW1lbnRzID0g
Z2V0Rm9ybUVsZW1lbnRzQ291bnQodGhpcyk7CisgICAgc2l6ZV90IG51bUVsZW1lbnRzID0gZ2V0
Rm9ybUVsZW1lbnRzQ291bnQobV9oYW5kbGUpOwogICAgIGlmICghbnVtRWxlbWVudHMpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHNldHVwRm9ybURhdGEoZmFsc2UpOwogfQogCi12b2lkIFJlc291
cmNlSGFuZGxlOjpzZXR1cFBPU1QoKQordm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpzZXR1
cFBPU1QoKQogewotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVIdHRwUG9zdFJlcXVlc3QoKTsK
KyAgICBtX2N1cmxIYW5kbGUuZW5hYmxlSHR0cFBvc3RSZXF1ZXN0KCk7CiAKLSAgICBzaXplX3Qg
bnVtRWxlbWVudHMgPSBnZXRGb3JtRWxlbWVudHNDb3VudCh0aGlzKTsKKyAgICBzaXplX3QgbnVt
RWxlbWVudHMgPSBnZXRGb3JtRWxlbWVudHNDb3VudChtX2hhbmRsZSk7CiAgICAgaWYgKCFudW1F
bGVtZW50cykKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRG8gbm90IHN0cmVhbSBmb3Igc2lt
cGxlIFBPU1QgZGF0YQogICAgIGlmIChudW1FbGVtZW50cyA9PSAxKSB7Ci0gICAgICAgIGZpcnN0
UmVxdWVzdCgpLmh0dHBCb2R5KCktPmZsYXR0ZW4oZC0+bV9wb3N0Qnl0ZXMpOwotICAgICAgICBp
ZiAoZC0+bV9wb3N0Qnl0ZXMuc2l6ZSgpKQotICAgICAgICAgICAgZC0+bV9jdXJsSGFuZGxlLnNl
dFBvc3RGaWVsZHMoZC0+bV9wb3N0Qnl0ZXMuZGF0YSgpLCBkLT5tX3Bvc3RCeXRlcy5zaXplKCkp
OworICAgICAgICBtX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpLT5mbGF0dGVuKG1fcG9zdEJ5dGVz
KTsKKyAgICAgICAgaWYgKG1fcG9zdEJ5dGVzLnNpemUoKSkKKyAgICAgICAgICAgIG1fY3VybEhh
bmRsZS5zZXRQb3N0RmllbGRzKG1fcG9zdEJ5dGVzLmRhdGEoKSwgbV9wb3N0Qnl0ZXMuc2l6ZSgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHNldHVwRm9ybURhdGEodHJ1ZSk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldHVwRm9ybURhdGEoYm9vbCBpc1Bvc3RSZXF1ZXN0
KQordm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpzZXR1cEZvcm1EYXRhKGJvb2wgaXNQb3N0
UmVxdWVzdCkKIHsKLSAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBlbGVtZW50cyA9IGZpcnN0
UmVxdWVzdCgpLmh0dHBCb2R5KCktPmVsZW1lbnRzKCk7CisgICAgVmVjdG9yPEZvcm1EYXRhRWxl
bWVudD4gZWxlbWVudHMgPSBtX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpLT5lbGVtZW50cygpOwog
ICAgIHNpemVfdCBudW1FbGVtZW50cyA9IGVsZW1lbnRzLnNpemUoKTsKIAotICAgIHN0YXRpYyBj
b25zdCBsb25nIGxvbmcgbWF4Q3VybE9mZlQgPSBkLT5tX2N1cmxIYW5kbGUubWF4Q3VybE9mZlQo
KTsKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIG1heEN1cmxPZmZUID0gbV9jdXJsSGFuZGxl
Lm1heEN1cmxPZmZUKCk7CiAKICAgICAvLyBPYnRhaW4gdGhlIHRvdGFsIHNpemUgb2YgdGhlIGZv
cm0gZGF0YQogICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IDA7CkBAIC0zMTIsMTUgKzMwNywxNSBAQCB2
b2lkIFJlc291cmNlSGFuZGxlOjpzZXR1cEZvcm1EYXRhKGJvb2wgaXNQb3N0UmVxdWVzdCkKIAog
ICAgIC8vIGNVUkwgZ3Vlc3NlcyB0aGF0IHdlIHdhbnQgY2h1bmtlZCBlbmNvZGluZyBhcyBsb25n
IGFzIHdlIHNwZWNpZnkgdGhlIGhlYWRlcgogICAgIGlmIChjaHVua2VkVHJhbnNmZXIpCi0gICAg
ICAgIGQtPm1fY3VybEhhbmRsZS5hcHBlbmRSZXF1ZXN0SGVhZGVyKCJUcmFuc2Zlci1FbmNvZGlu
ZzogY2h1bmtlZCIpOworICAgICAgICBtX2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVzdEhlYWRlcigi
VHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKGlz
UG9zdFJlcXVlc3QpCi0gICAgICAgICAgICBkLT5tX2N1cmxIYW5kbGUuc2V0UG9zdEZpZWxkTGFy
Z2Uoc2l6ZSk7CisgICAgICAgICAgICBtX2N1cmxIYW5kbGUuc2V0UG9zdEZpZWxkTGFyZ2Uoc2l6
ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGQtPm1fY3VybEhhbmRsZS5zZXRJbkZpbGVT
aXplTGFyZ2Uoc2l6ZSk7CisgICAgICAgICAgICBtX2N1cmxIYW5kbGUuc2V0SW5GaWxlU2l6ZUxh
cmdlKHNpemUpOwogICAgIH0KIAotICAgIGQtPm1fY3VybEhhbmRsZS5zZXRSZWFkQ2FsbGJhY2tG
dW5jdGlvbihyZWFkQ2FsbGJhY2ssIHRoaXMpOworICAgIG1fY3VybEhhbmRsZS5zZXRSZWFkQ2Fs
bGJhY2tGdW5jdGlvbihyZWFkQ2FsbGJhY2ssIHRoaXMpOwogfQogCiAjaWYgT1MoV0lORE9XUykK
QEAgLTM3MSw0NCArMzY2LDQ0IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVm
ZXJzTG9hZGluZyhib29sIGRlZmVycykKICAgICAgICAgfQogICAgIH07CiAKLSAgICBpZiAobV9q
b2IpIHsKKyAgICBpZiAoZC0+bV9qb2IpIHsKICAgICAgICAgQ3VybEpvYk1hbmFnZXI6OnNpbmds
ZXRvbigpLmNhbGxPbkpvYlRocmVhZChXVEZNb3ZlKGFjdGlvbikpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGFjdGlvbigpOwogICAgIH0KIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkRmlu
aXNoKCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkRmluaXNoKCkKIHsKICNpZiBF
TkFCTEUoV0VCX1RJTUlORykKICAgICBjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMoKTsK
ICNlbmRpZgotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICBpZiAobV9jYW5jZWxsZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghZC0+bV9yZXNwb25zZS5yZXNwb25zZUZpcmVkKCkp
IHsKKyAgICBpZiAoIW1fcmVzcG9uc2UucmVzcG9uc2VGaXJlZCgpKSB7CiAgICAgICAgIGhhbmRs
ZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAg
ICAgICAgaWYgKG1fY2FuY2VsbGVkKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChkLT5tX211bHRpcGFydEhhbmRsZSkKLSAgICAgICAgZC0+bV9tdWx0aXBhcnRIYW5kbGUt
PmNvbnRlbnRFbmRlZCgpOworICAgIGlmIChtX211bHRpcGFydEhhbmRsZSkKKyAgICAgICAgbV9t
dWx0aXBhcnRIYW5kbGUtPmNvbnRlbnRFbmRlZCgpOwogCiAgICAgaWYgKGNsaWVudCgpKSB7Ci0g
ICAgICAgIGNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOwotICAgICAgICBDdXJsQ2Fj
aGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZpbmlzaExvYWRpbmcoKnRoaXMpOworICAgICAg
ICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSk7CisgICAgICAgIEN1cmxDYWNo
ZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkRmluaXNoTG9hZGluZygqbV9oYW5kbGUpOwogICAg
IH0KIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkRmFpbCgpCit2b2lkIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6OmRpZEZhaWwoKQogewotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICBp
ZiAobV9jYW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICBVUkwgdXJsID0gZC0+bV9jdXJs
SGFuZGxlLmdldEVmZmVjdGl2ZVVSTCgpOworICAgIFVSTCB1cmwgPSBtX2N1cmxIYW5kbGUuZ2V0
RWZmZWN0aXZlVVJMKCk7CiAgICAgaWYgKGNsaWVudCgpKSB7Ci0gICAgICAgIGNsaWVudCgpLT5k
aWRGYWlsKHRoaXMsIFJlc291cmNlRXJyb3IoZC0+bV9jdXJsSGFuZGxlLCBkLT5tX3NzbEVycm9y
cykpOwotICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZhaWwoKnRo
aXMpOworICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbChtX2hhbmRsZSwgUmVzb3VyY2VFcnJvciht
X2N1cmxIYW5kbGUsIG1fc3NsRXJyb3JzKSk7CisgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6Omdl
dEluc3RhbmNlKCkuZGlkRmFpbCgqbV9oYW5kbGUpOwogICAgIH0KIH0KIApAQCAtNTI2LDMwICs1
MjEsMzAgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24o
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQogfQogCiAjaWYgRU5BQkxFKFdFQl9USU1J
TkcpCi12b2lkIFJlc291cmNlSGFuZGxlOjpjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMo
KQordm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1h
dGlvbnMoKQogewogICAgIGRvdWJsZSBwcmVUcmFuc2ZlclRpbWUgPSAwOwogICAgIGRvdWJsZSBk
bnNsb29rdXBUaW1lID0gMDsKICAgICBkb3VibGUgY29ubmVjdFRpbWUgPSAwOwogICAgIGRvdWJs
ZSBhcHBDb25uZWN0VGltZSA9IDA7CiAKLSAgICBkLT5tX2N1cmxIYW5kbGUuZ2V0VGltZXMocHJl
VHJhbnNmZXJUaW1lLCBkbnNsb29rdXBUaW1lLCBjb25uZWN0VGltZSwgYXBwQ29ubmVjdFRpbWUp
OworICAgIG1fY3VybEhhbmRsZS5nZXRUaW1lcyhwcmVUcmFuc2ZlclRpbWUsIGRuc2xvb2t1cFRp
bWUsIGNvbm5lY3RUaW1lLCBhcHBDb25uZWN0VGltZSk7CiAKLSAgICBkLT5tX3Jlc3BvbnNlLmRl
cHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoKS5kb21haW5Mb29rdXBTdGFydCA9IFNlY29uZHMo
MCk7Ci0gICAgZC0+bV9yZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKCkuZG9t
YWluTG9va3VwRW5kID0gU2Vjb25kcyhkbnNsb29rdXBUaW1lKTsKKyAgICBtX3Jlc3BvbnNlLmRl
cHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoKS5kb21haW5Mb29rdXBTdGFydCA9IFNlY29uZHMo
MCk7CisgICAgbV9yZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKCkuZG9tYWlu
TG9va3VwRW5kID0gU2Vjb25kcyhkbnNsb29rdXBUaW1lKTsKIAotICAgIGQtPm1fcmVzcG9uc2Uu
ZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcygpLmNvbm5lY3RTdGFydCA9IFNlY29uZHMoZG5z
bG9va3VwVGltZSk7Ci0gICAgZC0+bV9yZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRy
aWNzKCkuY29ubmVjdEVuZCA9IFNlY29uZHMoY29ubmVjdFRpbWUpOworICAgIG1fcmVzcG9uc2Uu
ZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcygpLmNvbm5lY3RTdGFydCA9IFNlY29uZHMoZG5z
bG9va3VwVGltZSk7CisgICAgbV9yZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNz
KCkuY29ubmVjdEVuZCA9IFNlY29uZHMoY29ubmVjdFRpbWUpOwogCi0gICAgZC0+bV9yZXNwb25z
ZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKCkucmVxdWVzdFN0YXJ0ID0gU2Vjb25kcyhj
b25uZWN0VGltZSk7Ci0gICAgZC0+bV9yZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRy
aWNzKCkucmVzcG9uc2VTdGFydCA9IFNlY29uZHMocHJlVHJhbnNmZXJUaW1lKTsKKyAgICBtX3Jl
c3BvbnNlLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoKS5yZXF1ZXN0U3RhcnQgPSBTZWNv
bmRzKGNvbm5lY3RUaW1lKTsKKyAgICBtX3Jlc3BvbnNlLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1l
dHJpY3MoKS5yZXNwb25zZVN0YXJ0ID0gU2Vjb25kcyhwcmVUcmFuc2ZlclRpbWUpOwogCiAgICAg
aWYgKGFwcENvbm5lY3RUaW1lKQotICAgICAgICBkLT5tX3Jlc3BvbnNlLmRlcHJlY2F0ZWROZXR3
b3JrTG9hZE1ldHJpY3MoKS5zZWN1cmVDb25uZWN0aW9uU3RhcnQgPSBTZWNvbmRzKGNvbm5lY3RU
aW1lKTsKKyAgICAgICAgbV9yZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKCku
c2VjdXJlQ29ubmVjdGlvblN0YXJ0ID0gU2Vjb25kcyhjb25uZWN0VGltZSk7CiB9CiAjZW5kaWYK
IAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoKQordm9p
ZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSgpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtNTU4LDEyICs1NTMsMTIgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoKQogICAgIC8vIHdo
aWNoIG1lYW5zIHRoZSBSZXNvdXJjZUxvYWRlcidzIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4g
dGhlIFVSTC4KICAgICAvLyBSdW4gdGhlIGNvZGUgaGVyZSBmb3IgbG9jYWwgZmlsZXMgdG8gcmVz
b2x2ZSB0aGUgaXNzdWUuCiAgICAgLy8gVE9ETzogU2VlIGlmIHRoZXJlIGlzIGEgYmV0dGVyIGFw
cHJvYWNoIGZvciBoYW5kbGluZyB0aGlzLgotICAgIFVSTCB1cmwgPSBkLT5tX2N1cmxIYW5kbGUu
Z2V0RWZmZWN0aXZlVVJMKCk7CisgICAgVVJMIHVybCA9IG1fY3VybEhhbmRsZS5nZXRFZmZlY3Rp
dmVVUkwoKTsKICAgICBBU1NFUlQodXJsLmlzVmFsaWQoKSk7Ci0gICAgZC0+bV9yZXNwb25zZS5z
ZXRVUkwodXJsKTsKKyAgICBtX3Jlc3BvbnNlLnNldFVSTCh1cmwpOwogICAgIGlmIChjbGllbnQo
KSkKLSAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCBSZXNvdXJjZVJl
c3BvbnNlKGQtPm1fcmVzcG9uc2UpKTsKLSAgICBkLT5tX3Jlc3BvbnNlLnNldFJlc3BvbnNlRmly
ZWQodHJ1ZSk7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UobV9oYW5kbGUs
IFJlc291cmNlUmVzcG9uc2UobV9yZXNwb25zZSkpOworICAgIG1fcmVzcG9uc2Uuc2V0UmVzcG9u
c2VGaXJlZCh0cnVlKTsKIH0KIAogaW5saW5lIHN0YXRpYyBib29sIGlzSHR0cEluZm8oaW50IHN0
YXR1c0NvZGUpCkBAIC02OTAsMTYgKzY4NSwxNiBAQCBzdGF0aWMgYm9vbCBnZXRQcm90ZWN0aW9u
U3BhY2UoUmVzb3VyY2VIYW5kbGUqIGpvYiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1zaXplX3QgUmVzb3VyY2VIYW5kbGU6OndpbGxQcmVwYXJl
U2VuZERhdGEoY2hhciogcHRyLCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9j
a3MpCitzaXplX3QgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6d2lsbFByZXBhcmVTZW5kRGF0YShj
aGFyKiBwdHIsIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2NrcykKIHsKLSAg
ICBpZiAoIWQtPm1fZm9ybURhdGFTdHJlYW0uaGFzTW9yZUVsZW1lbnRzKCkpCisgICAgaWYgKCFt
X2Zvcm1EYXRhU3RyZWFtLmhhc01vcmVFbGVtZW50cygpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIHNpemVfdCBzaXplID0gZC0+bV9mb3JtRGF0YVN0cmVhbS5yZWFkKHB0ciwgYmxvY2tTaXpl
LCBudW1iZXJPZkJsb2Nrcyk7CisgICAgc2l6ZV90IHNpemUgPSBtX2Zvcm1EYXRhU3RyZWFtLnJl
YWQocHRyLCBibG9ja1NpemUsIG51bWJlck9mQmxvY2tzKTsKIAogICAgIC8vIFNvbWV0aGluZyB3
ZW50IHdyb25nIHNvIGNhbmNlbCB0aGUgam9iLgogICAgIGlmICghc2l6ZSkgewotICAgICAgICBj
YW5jZWwoKTsKKyAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKQEAgLTcwNywxNyArNzAyLDE3IEBAIHNpemVfdCBSZXNvdXJjZUhhbmRsZTo6d2ls
bFByZXBhcmVTZW5kRGF0YShjaGFyKiBwdHIsIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBuCiAK
IH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUhlYWRlckxpbmUoY29uc3QgU3Ry
aW5nJiBoZWFkZXIpCit2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZFJlY2VpdmVIZWFk
ZXJMaW5lKGNvbnN0IFN0cmluZyYgaGVhZGVyKQogewotICAgIGludCBzcGxpdFBvcyA9IGhlYWRl
ci5maW5kKCI6Iik7Ci0gICAgaWYgKHNwbGl0UG9zICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIFN0
cmluZyBrZXkgPSBoZWFkZXIubGVmdChzcGxpdFBvcykuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAg
ICAgIFN0cmluZyB2YWx1ZSA9IGhlYWRlci5zdWJzdHJpbmcoc3BsaXRQb3MgKyAxKS5zdHJpcFdo
aXRlU3BhY2UoKTsKKyAgICBhdXRvIHNwbGl0UG9zaXRpb24gPSBoZWFkZXIuZmluZCgiOiIpOwor
ICAgIGlmIChzcGxpdFBvc2l0aW9uICE9IG5vdEZvdW5kKSB7CisgICAgICAgIFN0cmluZyBrZXkg
PSBoZWFkZXIubGVmdChzcGxpdFBvc2l0aW9uKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAg
U3RyaW5nIHZhbHVlID0gaGVhZGVyLnN1YnN0cmluZyhzcGxpdFBvc2l0aW9uICsgMSkuc3RyaXBX
aGl0ZVNwYWNlKCk7CiAKICAgICAgICAgaWYgKGlzQXBwZW5kYWJsZUhlYWRlcihrZXkpKQotICAg
ICAgICAgICAgZC0+bV9yZXNwb25zZS5hZGRIVFRQSGVhZGVyRmllbGQoa2V5LCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3BvbnNlLmFkZEhUVFBIZWFkZXJGaWVsZChrZXksIHZhbHVlKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQo
a2V5LCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChr
ZXksIHZhbHVlKTsKICAgICB9IGVsc2UgaWYgKGhlYWRlci5zdGFydHNXaXRoKCJIVFRQIiwgZmFs
c2UpKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHJlc3BvbnNl
LgogICAgICAgICAvLyBFeHRyYWN0IHRoZSBodHRwIHN0YXR1cyB0ZXh0IGZyb20gdGhpcy4KQEAg
LTcyNiw3ICs3MjEsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlSGVhZGVyTGlu
ZShjb25zdCBTdHJpbmcmIGhlYWRlcikKICAgICAgICAgLy8gY3VybCB3aWxsIGZvbGxvdyB0aGUg
cmVkaXJlY3Rpb25zIGludGVybmFsbHkuIFRodXMgdGhpcyBoZWFkZXIgY2FsbGJhY2sKICAgICAg
ICAgLy8gd2lsbCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uZSB0aW1lIHdpdGggdGhlIGxpbmUgc3Rh
cnRpbmcgIkhUVFAiIGZvciBvbmUgam9iLgogICAgICAgICBsb25nIGh0dHBDb2RlID0gMDsKLSAg
ICAgICAgZC0+bV9jdXJsSGFuZGxlLmdldFJlc3BvbnNlQ29kZShodHRwQ29kZSk7CisgICAgICAg
IG1fY3VybEhhbmRsZS5nZXRSZXNwb25zZUNvZGUoaHR0cENvZGUpOwogCiAgICAgICAgIFN0cmlu
ZyBodHRwQ29kZVN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGh0dHBDb2RlKTsKICAgICAgICAgaW50
IHN0YXR1c0NvZGVQb3MgPSBoZWFkZXIuZmluZChodHRwQ29kZVN0cmluZyk7CkBAIC03MzQsODAg
KzcyOSw4MCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlSGVhZGVyTGluZShjb25z
dCBTdHJpbmcmIGhlYWRlcikKICAgICAgICAgaWYgKHN0YXR1c0NvZGVQb3MgIT0gbm90Rm91bmQp
IHsKICAgICAgICAgICAgIC8vIFRoZSBzdGF0dXMgdGV4dCBpcyBhZnRlciB0aGUgc3RhdHVzIGNv
ZGUuCiAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gaGVhZGVyLnN1YnN0cmluZyhzdGF0dXND
b2RlUG9zICsgaHR0cENvZGVTdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgZC0+bV9yZXNw
b25zZS5zZXRIVFRQU3RhdHVzVGV4dChzdGF0dXMuc3RyaXBXaGl0ZVNwYWNlKCkpOworICAgICAg
ICAgICAgbV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChzdGF0dXMuc3RyaXBXaGl0ZVNwYWNl
KCkpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNl
aXZlQWxsSGVhZGVycyhsb25nIGh0dHBDb2RlLCBsb25nIGxvbmcgY29udGVudExlbmd0aCkKK3Zv
aWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZUFsbEhlYWRlcnMobG9uZyBodHRw
Q29kZSwgbG9uZyBsb25nIGNvbnRlbnRMZW5ndGgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIAotICAgIGQtPm1fcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGNvbnRl
bnRMZW5ndGgpOworICAgIG1fcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGNvbnRl
bnRMZW5ndGgpOwogCi0gICAgZC0+bV9yZXNwb25zZS5zZXRVUkwoZC0+bV9jdXJsSGFuZGxlLmdl
dEVmZmVjdGl2ZVVSTCgpKTsKKyAgICBtX3Jlc3BvbnNlLnNldFVSTChtX2N1cmxIYW5kbGUuZ2V0
RWZmZWN0aXZlVVJMKCkpOwogCi0gICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSho
dHRwQ29kZSk7Ci0gICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVG
cm9tTWVkaWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1l
OjpDb250ZW50VHlwZSkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOwotICAgIGQtPm1fcmVz
cG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoZC0+
bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkp
OworICAgIG1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoaHR0cENvZGUpOworICAgIG1fcmVz
cG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtX3Jlc3BvbnNl
Lmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKS5jb252ZXJ0VG9B
U0NJSUxvd2VyY2FzZSgpKTsKKyAgICBtX3Jlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoZXh0
cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpKTsKIAotICAgIGlmIChkLT5tX3Jlc3BvbnNlLmlzTXVs
dGlwYXJ0KCkpIHsKKyAgICBpZiAobV9yZXNwb25zZS5pc011bHRpcGFydCgpKSB7CiAgICAgICAg
IFN0cmluZyBib3VuZGFyeTsKLSAgICAgICAgYm9vbCBwYXJzZWQgPSBNdWx0aXBhcnRIYW5kbGU6
OmV4dHJhY3RCb3VuZGFyeShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVy
TmFtZTo6Q29udGVudFR5cGUpLCBib3VuZGFyeSk7CisgICAgICAgIGJvb2wgcGFyc2VkID0gTXVs
dGlwYXJ0SGFuZGxlOjpleHRyYWN0Qm91bmRhcnkobV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSwgYm91bmRhcnkpOwogICAgICAgICBpZiAocGFy
c2VkKQotICAgICAgICAgICAgZC0+bV9tdWx0aXBhcnRIYW5kbGUgPSBzdGQ6Om1ha2VfdW5pcXVl
PE11bHRpcGFydEhhbmRsZT4odGhpcywgYm91bmRhcnkpOworICAgICAgICAgICAgbV9tdWx0aXBh
cnRIYW5kbGUgPSBzdGQ6Om1ha2VfdW5pcXVlPE11bHRpcGFydEhhbmRsZT4obV9oYW5kbGUsIGJv
dW5kYXJ5KTsKICAgICB9CiAKICAgICAvLyBIVFRQIHJlZGlyZWN0aW9uCiAgICAgaWYgKGlzSHR0
cFJlZGlyZWN0KGh0dHBDb2RlKSkgewotICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSBkLT5tX3Jl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pOworICAgICAg
ICBTdHJpbmcgbG9jYXRpb24gPSBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVy
TmFtZTo6TG9jYXRpb24pOwogICAgICAgICBpZiAoIWxvY2F0aW9uLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgVVJMIG5ld1VSTCA9IFVSTChmaXJzdFJlcXVlc3QoKS51cmwoKSwgbG9jYXRpb24p
OworICAgICAgICAgICAgVVJMIG5ld1VSTCA9IFVSTChtX2ZpcnN0UmVxdWVzdC51cmwoKSwgbG9j
YXRpb24pOwogCi0gICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVkaXJlY3RlZFJlcXVlc3Qg
PSBmaXJzdFJlcXVlc3QoKTsKKyAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZWRpcmVjdGVk
UmVxdWVzdCA9IG1fZmlyc3RSZXF1ZXN0OwogICAgICAgICAgICAgcmVkaXJlY3RlZFJlcXVlc3Qu
c2V0VVJMKG5ld1VSTCk7Ci0gICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlID0g
ZC0+bV9yZXNwb25zZTsKKyAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UgPSBt
X3Jlc3BvbnNlOwogICAgICAgICAgICAgaWYgKGNsaWVudCgpKQotICAgICAgICAgICAgICAgIGNs
aWVudCgpLT53aWxsU2VuZFJlcXVlc3QodGhpcywgV1RGTW92ZShyZWRpcmVjdGVkUmVxdWVzdCks
IFdURk1vdmUocmVzcG9uc2UpKTsKKyAgICAgICAgICAgICAgICBjbGllbnQoKS0+d2lsbFNlbmRS
ZXF1ZXN0KG1faGFuZGxlLCBXVEZNb3ZlKHJlZGlyZWN0ZWRSZXF1ZXN0KSwgV1RGTW92ZShyZXNw
b25zZSkpOwogCi0gICAgICAgICAgICBmaXJzdFJlcXVlc3QoKS5zZXRVUkwobmV3VVJMKTsKKyAg
ICAgICAgICAgIG1fZmlyc3RSZXF1ZXN0LnNldFVSTChuZXdVUkwpOwogCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGlzSHR0cEF1dGhlbnRpY2F0aW9uKGh0
dHBDb2RlKSkgewogICAgICAgICBQcm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlOwotICAg
ICAgICBpZiAoZ2V0UHJvdGVjdGlvblNwYWNlKHRoaXMsIGQtPm1fcmVzcG9uc2UsIHByb3RlY3Rp
b25TcGFjZSkpIHsKKyAgICAgICAgaWYgKGdldFByb3RlY3Rpb25TcGFjZShtX2hhbmRsZSwgbV9y
ZXNwb25zZSwgcHJvdGVjdGlvblNwYWNlKSkgewogICAgICAgICAgICAgQ3JlZGVudGlhbCBjcmVk
ZW50aWFsOwotICAgICAgICAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlKHBy
b3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCwgZC0+bV9hdXRoRmFpbHVyZUNvdW50LCBkLT5tX3Jl
c3BvbnNlLCBSZXNvdXJjZUVycm9yKCkpOwotICAgICAgICAgICAgY2hhbGxlbmdlLnNldEF1dGhl
bnRpY2F0aW9uQ2xpZW50KHRoaXMpOwotICAgICAgICAgICAgdGhpcy0+ZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7Ci0gICAgICAgICAgICBkLT5tX2F1dGhGYWls
dXJlQ291bnQrKzsKKyAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5n
ZShwcm90ZWN0aW9uU3BhY2UsIGNyZWRlbnRpYWwsIG1fYXV0aEZhaWx1cmVDb3VudCwgbV9yZXNw
b25zZSwgUmVzb3VyY2VFcnJvcigpKTsKKyAgICAgICAgICAgIGNoYWxsZW5nZS5zZXRBdXRoZW50
aWNhdGlvbkNsaWVudChtX2hhbmRsZSk7CisgICAgICAgICAgICBtX2hhbmRsZS0+ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7CisgICAgICAgICAgICBtX2F1dGhG
YWlsdXJlQ291bnQrKzsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIGlmIChjbGllbnQoKSkgewogICAgICAgICBpZiAoaXNIdHRwTm90TW9kaWZpZWQoaHR0cENv
ZGUpKSB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybCA9IGZpcnN0UmVxdWVzdCgpLnVy
bCgpLnN0cmluZygpOwotICAgICAgICAgICAgaWYgKEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3Rh
bmNlKCkuZ2V0Q2FjaGVkUmVzcG9uc2UodXJsLCBkLT5tX3Jlc3BvbnNlKSkgewotICAgICAgICAg
ICAgICAgIGlmIChkLT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycykgewotICAgICAgICAg
ICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoIk9LIik7CisgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIHVybCA9IG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygp
OworICAgICAgICAgICAgaWYgKEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZ2V0Q2Fj
aGVkUmVzcG9uc2UodXJsLCBtX3Jlc3BvbnNlKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2Fk
ZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycykgeworICAgICAgICAgICAgICAgICAgICBtX3Jlc3Bv
bnNlLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7CisgICAgICAgICAgICAgICAgICAgIG1fcmVzcG9u
c2Uuc2V0SFRUUFN0YXR1c1RleHQoIk9LIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0gICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhp
cywgUmVzb3VyY2VSZXNwb25zZShkLT5tX3Jlc3BvbnNlKSk7Ci0gICAgICAgIEN1cmxDYWNoZU1h
bmFnZXI6OmdldEluc3RhbmNlKCkuZGlkUmVjZWl2ZVJlc3BvbnNlKCp0aGlzLCBkLT5tX3Jlc3Bv
bnNlKTsKKyAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZShtX2hhbmRsZSwgUmVz
b3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlKSk7CisgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6Omdl
dEluc3RhbmNlKCkuZGlkUmVjZWl2ZVJlc3BvbnNlKCptX2hhbmRsZSwgbV9yZXNwb25zZSk7CiAg
ICAgfQogCi0gICAgZC0+bV9yZXNwb25zZS5zZXRSZXNwb25zZUZpcmVkKHRydWUpOworICAgIG1f
cmVzcG9uc2Uuc2V0UmVzcG9uc2VGaXJlZCh0cnVlKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6ZGlkUmVjZWl2ZUNvbnRlbnREYXRhKCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6
ZGlkUmVjZWl2ZUNvbnRlbnREYXRhKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
Ci0gICAgaWYgKCFkLT5tX3Jlc3BvbnNlLnJlc3BvbnNlRmlyZWQoKSkKKyAgICBpZiAoIW1fcmVz
cG9uc2UucmVzcG9uc2VGaXJlZCgpKQogICAgICAgICBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25z
ZSgpOwogCiAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKQEAgLTgxOSwxMSArODE0LDExIEBAIHZv
aWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVDb250ZW50RGF0YSgpCiAgICAgY2hhciogcHRy
ID0gYnVmZmVyLmJlZ2luKCk7CiAgICAgc2l6ZV90IHNpemUgPSBidWZmZXIuc2l6ZSgpOwogCi0g
ICAgaWYgKGQtPm1fbXVsdGlwYXJ0SGFuZGxlKQotICAgICAgICBkLT5tX211bHRpcGFydEhhbmRs
ZS0+Y29udGVudFJlY2VpdmVkKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBzaXplKTsK
KyAgICBpZiAobV9tdWx0aXBhcnRIYW5kbGUpCisgICAgICAgIG1fbXVsdGlwYXJ0SGFuZGxlLT5j
b250ZW50UmVjZWl2ZWQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHB0ciksIHNpemUpOwogICAg
IGVsc2UgaWYgKGNsaWVudCgpKSB7Ci0gICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0
aGlzLCBwdHIsIHNpemUsIDApOwotICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5j
ZSgpLmRpZFJlY2VpdmVEYXRhKCp0aGlzLCBwdHIsIHNpemUpOworICAgICAgICBjbGllbnQoKS0+
ZGlkUmVjZWl2ZURhdGEobV9oYW5kbGUsIHB0ciwgc2l6ZSwgMCk7CisgICAgICAgIEN1cmxDYWNo
ZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkUmVjZWl2ZURhdGEoKm1faGFuZGxlLCBwdHIsIHNp
emUpOwogICAgIH0KIH0KIApAQCAtODMxLDEyICs4MjYsMTEgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6ZGlkUmVjZWl2ZUNvbnRlbnREYXRhKCkKIEl0ZXJhdGUgdGhyb3VnaCBGb3JtRGF0YSBlbGVt
ZW50cyBhbmQgdXBsb2FkIGZpbGVzLgogQ2FyZWZ1bGx5IHJlc3BlY3QgdGhlIGdpdmVuIGJ1ZmZl
ciBzaXplIGFuZCBmaWxsIHRoZSByZXN0IG9mIHRoZSBkYXRhIGF0IHRoZSBuZXh0IGNhbGxzLgog
Ki8KLXNpemVfdCBSZXNvdXJjZUhhbmRsZTo6cmVhZENhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90
IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKK3NpemVfdCBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsOjpyZWFkQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1i
LCB2b2lkKiBkYXRhKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgUmVz
b3VyY2VIYW5kbGUqIGpvYiA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZGF0YSk7Ci0g
ICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBS
ZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCo+KGRhdGEpOwogCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQogICAgICAgICByZXR1cm4g
MDsKQEAgLTg0Nyw3ICs4NDEsNyBAQCBzaXplX3QgUmVzb3VyY2VIYW5kbGU6OnJlYWRDYWxsYmFj
ayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqCiAgICAgaWYgKCFz
aXplIHx8ICFubWVtYikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gam9iLT53aWxs
UHJlcGFyZVNlbmREYXRhKHB0ciwgc2l6ZSwgbm1lbWIpOworICAgIHJldHVybiBkLT53aWxsUHJl
cGFyZVNlbmREYXRhKHB0ciwgc2l6ZSwgbm1lbWIpOwogfQogCiAvKgpAQCAtODU5LDEyICs4NTMs
MTMgQEAgc2l6ZV90IFJlc291cmNlSGFuZGxlOjpyZWFkQ2FsbGJhY2soY2hhciogcHRyLCBzaXpl
X3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKgogKiB1cGRhdGUgdGhlIFJlc291cmNlUmVzcG9u
c2UgYW5kIHRoZW4gc2VuZCBpdCBhd2F5LgogKgogKi8KLXNpemVfdCBSZXNvdXJjZUhhbmRsZTo6
aGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lk
KiBkYXRhKQorc2l6ZV90IFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmhlYWRlckNhbGxiYWNrKGNo
YXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKIHsKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0
aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGRhdGEpOwotICAgIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCog
ZCA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlSW50ZXJuYWwqPihkYXRhKTsKKyAgICBSZXNv
dXJjZUhhbmRsZSogam9iID0gZC0+bV9oYW5kbGU7CisKICAgICBpZiAoZC0+bV9jYW5jZWxsZWQp
CiAgICAgICAgIHJldHVybiAwOwogCkBAIC04OTksMjMgKzg5NCwyNCBAQCBzaXplX3QgUmVzb3Vy
Y2VIYW5kbGU6OmhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBu
bWVtYiwgdm9pZAogICAgICAgICBsb25nIGxvbmcgY29udGVudExlbmd0aCA9IDA7CiAgICAgICAg
IGQtPm1fY3VybEhhbmRsZS5nZXRDb250ZW50TGVuZ2h0RG93bmxvYWQoY29udGVudExlbmd0aCk7
CiAKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbam9iID0gUmVmUHRyPFJlc291cmNlSGFuZGxl
Pihqb2IpLCBodHRwQ29kZSwgY29udGVudExlbmd0aF0gewotICAgICAgICAgICAgaWYgKCFqb2It
PmQtPm1fY2FuY2VsbGVkKQotICAgICAgICAgICAgICAgIGpvYi0+ZGlkUmVjZWl2ZUFsbEhlYWRl
cnMoaHR0cENvZGUsIGNvbnRlbnRMZW5ndGgpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtq
b2IgPSBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+KGpvYiksIGQsIGh0dHBDb2RlLCBjb250ZW50TGVu
Z3RoXSB7CisgICAgICAgICAgICBpZiAoIWQtPm1fY2FuY2VsbGVkKQorICAgICAgICAgICAgICAg
IGQtPmRpZFJlY2VpdmVBbGxIZWFkZXJzKGh0dHBDb2RlLCBjb250ZW50TGVuZ3RoKTsKICAgICAg
ICAgfSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGpvYi0+ZGlkUmVjZWl2ZUhlYWRlckxpbmUoaGVh
ZGVyKTsKKyAgICAgICAgZC0+ZGlkUmVjZWl2ZUhlYWRlckxpbmUoaGVhZGVyKTsKIAogICAgIHJl
dHVybiB0b3RhbFNpemU7CiB9CiAKIC8vIGNhbGxlZCB3aXRoIGRhdGEgYWZ0ZXIgYWxsIGhlYWRl
cnMgaGF2ZSBiZWVuIHByb2Nlc3NlZCB2aWEgaGVhZGVyQ2FsbGJhY2sKLXNpemVfdCBSZXNvdXJj
ZUhhbmRsZTo6d3JpdGVDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1l
bWIsIHZvaWQqIGRhdGEpCitzaXplX3QgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6d3JpdGVDYWxs
YmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCiB7
CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKLSAgICBSZXNvdXJjZUhhbmRsZSogam9i
ID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihkYXRhKTsKLSAgICBSZXNvdXJjZUhhbmRs
ZUludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOworICAgIFJlc291cmNlSGFuZGxlSW50
ZXJuYWwqIGQgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZUludGVybmFsKj4oZGF0YSk7Cisg
ICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IGQtPm1faGFuZGxlOworCiAgICAgaWYgKGQtPm1fY2Fu
Y2VsbGVkKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtOTM0LDE4ICs5MzAsMTggQEAgc2l6ZV90
IFJlc291cmNlSGFuZGxlOjp3cml0ZUNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNp
emVfdCBubWVtYiwgdm9pZCoKIAogICAgIGJvb2wgc2hvdWxkQ2FsbCB7IGZhbHNlIH07CiAgICAg
ewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihqb2ItPm1fcmVjZWl2ZWRCdWZmZXJNdXRleCk7
CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGQtPm1fcmVjZWl2ZWRCdWZmZXJNdXRleCk7CiAg
ICAgICAgIAotICAgICAgICBpZiAoam9iLT5tX3JlY2VpdmVkQnVmZmVyLmlzRW1wdHkoKSkKKyAg
ICAgICAgaWYgKGQtPm1fcmVjZWl2ZWRCdWZmZXIuaXNFbXB0eSgpKQogICAgICAgICAgICAgc2hv
dWxkQ2FsbCA9IHRydWU7CiAgICAgICAgIAotICAgICAgICBqb2ItPm1fcmVjZWl2ZWRCdWZmZXIu
YXBwZW5kKHB0ciwgdG90YWxTaXplKTsKKyAgICAgICAgZC0+bV9yZWNlaXZlZEJ1ZmZlci5hcHBl
bmQocHRyLCB0b3RhbFNpemUpOwogICAgIH0KIAogICAgIGlmIChzaG91bGRDYWxsKSB7Ci0gICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoW2pvYiA9IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4oam9iKV0g
ewotICAgICAgICAgICAgaWYgKCFqb2ItPmQtPm1fY2FuY2VsbGVkKQotICAgICAgICAgICAgICAg
IGpvYi0+ZGlkUmVjZWl2ZUNvbnRlbnREYXRhKCk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
W2pvYiA9IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4oam9iKSwgZF0geworICAgICAgICAgICAgaWYg
KCFkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICBkLT5kaWRSZWNlaXZlQ29udGVudERh
dGEoKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC05NjEsMzMgKzk1NywzMSBAQCB2b2lkIFJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleAogICAgIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50IGNsaWVudDsKICAg
ICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhh
bmRsZShjb250ZXh0LCByZXF1ZXN0LCAmY2xpZW50LCBmYWxzZSwgZmFsc2UpKTsKIAotICAgIGhh
bmRsZS5nZXQoKS0+ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpOworICAgIGhhbmRsZS0+ZC0+ZGlz
cGF0Y2hTeW5jaHJvbm91c0pvYigpOwogCiAgICAgZXJyb3IgPSBjbGllbnQuZXJyb3IoKTsKICAg
ICBkYXRhLnN3YXAoY2xpZW50Lm11dGFibGVEYXRhKCkpOwogICAgIHJlc3BvbnNlID0gY2xpZW50
LnJlc3BvbnNlKCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpc3BhdGNoU3luY2hyb25v
dXNKb2IoKQordm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaXNwYXRjaFN5bmNocm9ub3Vz
Sm9iKCkKIHsKLSAgICBVUkwga3VybCA9IGZpcnN0UmVxdWVzdCgpLnVybCgpOworICAgIFVSTCBr
dXJsID0gbV9maXJzdFJlcXVlc3QudXJsKCk7CiAKICAgICBpZiAoa3VybC5wcm90b2NvbElzRGF0
YSgpKSB7CiAgICAgICAgIGhhbmRsZURhdGFVUkwoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBnZXRJbnRlcm5hbCgpOwotCiAgICAg
Ly8gSWYgZGVmZXJzTG9hZGluZyBpcyB0cnVlIGFuZCB3ZSBjYWxsIGN1cmxfZWFzeV9wZXJmb3Jt
CiAgICAgLy8gb24gYSBwYXVzZWQgaGFuZGxlLCBsaWJjVVJMIHdvdWxkIGRvIHRoZSB0cmFuc2Zl
cnQgYW55d2F5CiAgICAgLy8gYW5kIHdlIHdvdWxkIGFzc2VydCBzbyBmb3JjZSBkZWZlcnNMb2Fk
aW5nIHRvIGJlIGZhbHNlLgotICAgIGQtPm1fZGVmZXJzTG9hZGluZyA9IGZhbHNlOworICAgIG1f
ZGVmZXJzTG9hZGluZyA9IGZhbHNlOwogCiAgICAgaW5pdGlhbGl6ZSgpOwogCiAgICAgLy8gY3Vy
bF9lYXN5X3BlcmZvcm0gYmxvY2tzIHVudGlsIHRoZSB0cmFuc2ZlcnQgaXMgZmluaXNoZWQuCi0g
ICAgQ1VSTGNvZGUgcmV0ID0gZC0+bV9jdXJsSGFuZGxlLnBlcmZvcm0oKTsKKyAgICBDVVJMY29k
ZSByZXQgPSBtX2N1cmxIYW5kbGUucGVyZm9ybSgpOwogCiAjaWYgRU5BQkxFKFdFQl9USU1JTkcp
CiAgICAgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKCk7CkBAIC05OTUsMjIgKzk4OSwy
MiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCkKIAogICAg
IGlmIChjbGllbnQoKSkgewogICAgICAgICBpZiAocmV0ICE9IENVUkxFX09LKQotICAgICAgICAg
ICAgY2xpZW50KCktPmRpZEZhaWwodGhpcywgUmVzb3VyY2VFcnJvcihkLT5tX2N1cmxIYW5kbGUs
IGQtPm1fc3NsRXJyb3JzKSk7CisgICAgICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbChtX2hhbmRs
ZSwgUmVzb3VyY2VFcnJvcihtX2N1cmxIYW5kbGUsIG1fc3NsRXJyb3JzKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgUmVzb3Vy
Y2VSZXNwb25zZShkLT5tX3Jlc3BvbnNlKSk7CisgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlKG1faGFuZGxlLCBSZXNvdXJjZVJlc3BvbnNlKG1fcmVzcG9uc2UpKTsKICAg
ICB9CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwoKQordm9pZCBSZXNv
dXJjZUhhbmRsZUludGVybmFsOjpoYW5kbGVEYXRhVVJMKCkKIHsKLSAgICBBU1NFUlQoZmlyc3RS
ZXF1ZXN0KCkudXJsKCkucHJvdG9jb2xJc0RhdGEoKSk7Ci0gICAgU3RyaW5nIHVybCA9IGZpcnN0
UmVxdWVzdCgpLnVybCgpLnN0cmluZygpOworICAgIEFTU0VSVChtX2ZpcnN0UmVxdWVzdC51cmwo
KS5wcm90b2NvbElzRGF0YSgpKTsKKyAgICBTdHJpbmcgdXJsID0gbV9maXJzdFJlcXVlc3QudXJs
KCkuc3RyaW5nKCk7CiAKICAgICBBU1NFUlQoY2xpZW50KCkpOwogCiAgICAgaW50IGluZGV4ID0g
dXJsLmZpbmQoJywnKTsKICAgICBpZiAoaW5kZXggPT0gLTEpIHsKLSAgICAgICAgY2xpZW50KCkt
PmNhbm5vdFNob3dVUkwodGhpcyk7CisgICAgICAgIGNsaWVudCgpLT5jYW5ub3RTaG93VVJMKG1f
aGFuZGxlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAzMywzMyArMTAyNywzMyBA
QCB2b2lkIFJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKCkKICAgICBSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlOwogICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKG1pbWVUeXBlKTsKICAgICBy
ZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGNoYXJzZXQpOwotICAgIHJlc3BvbnNlLnNldFVS
TChmaXJzdFJlcXVlc3QoKS51cmwoKSk7CisgICAgcmVzcG9uc2Uuc2V0VVJMKG1fZmlyc3RSZXF1
ZXN0LnVybCgpKTsKIAogICAgIGlmIChiYXNlNjQpIHsKICAgICAgICAgZGF0YSA9IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyhkYXRhKTsKLSAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVSZXNw
b25zZSh0aGlzLCBXVEZNb3ZlKHJlc3BvbnNlKSk7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNl
aXZlUmVzcG9uc2UobV9oYW5kbGUsIFdURk1vdmUocmVzcG9uc2UpKTsKIAogICAgICAgICAvLyBk
aWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgog
ICAgICAgICBpZiAoY2xpZW50KCkpIHsKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7CiAg
ICAgICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRhdGEsIG91dCwgQmFzZTY0SWdub3JlU3BhY2Vz
QW5kTmV3TGluZXMpICYmIG91dC5zaXplKCkgPiAwKQotICAgICAgICAgICAgICAgIGNsaWVudCgp
LT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpLCAwKTsKKyAgICAg
ICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEobV9oYW5kbGUsIG91dC5kYXRhKCks
IG91dC5zaXplKCksIDApOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgVGV4dEVu
Y29kaW5nIGVuY29kaW5nKGNoYXJzZXQpOwogICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKGRhdGEsIGVuY29kaW5nKTsKLSAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVS
ZXNwb25zZSh0aGlzLCBXVEZNb3ZlKHJlc3BvbnNlKSk7CisgICAgICAgIGNsaWVudCgpLT5kaWRS
ZWNlaXZlUmVzcG9uc2UobV9oYW5kbGUsIFdURk1vdmUocmVzcG9uc2UpKTsKIAogICAgICAgICAv
LyBkaWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVk
LgogICAgICAgICBpZiAoY2xpZW50KCkpIHsKICAgICAgICAgICAgIENTdHJpbmcgZW5jb2RlZERh
dGEgPSBlbmNvZGluZy5lbmNvZGUoZGF0YSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFi
bGVzKTsKICAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5sZW5ndGgoKSkKLSAgICAgICAgICAg
ICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEodGhpcywgZW5jb2RlZERhdGEuZGF0YSgpLCBl
bmNvZGVkRGF0YS5sZW5ndGgoKSwgMCk7CisgICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZFJl
Y2VpdmVEYXRhKG1faGFuZGxlLCBlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLmxlbmd0
aCgpLCAwKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAg
Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcodGhpcyk7CisgICAgICAgIGNsaWVudCgpLT5kaWRG
aW5pc2hMb2FkaW5nKG1faGFuZGxlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>