<?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>101640</bug_id>
          
          <creation_ts>2012-11-08 13:43:47 -0800</creation_ts>
          <short_desc>Have NetworkProcess do the actual loading of subresources</short_desc>
          <delta_ts>2020-04-20 20:16: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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>98537</blocked>
    
    <blocked>210779</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>japhet</cc>
    
    <cc>koivisto</cc>
    
    <cc>levin+threading</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>762139</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-11-08 13:43:47 -0800</bug_when>
    <thetext>Have NetworkProcess do the actual loading of subresources

For this first run it just buffers up the entire resource until it&apos;s done loading and hands it to the WebProcess in one chunk.

We&apos;ll have to do many things such as notify the WebProcess progressively, handle authentication, etc etc.  Those are separable tasks on top of this first patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762153</commentid>
    <comment_count>1</comment_count>
      <attachid>173114</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-11-08 14:00:58 -0800</bug_when>
    <thetext>Created attachment 173114
Patch v1 - Do basic subresource loading

Laced with FIXMEs and obviously with much of the task ahead, this patch at least gets actual networking happening in the NetworkProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762157</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 14:04:20 -0800</bug_when>
    <thetext>Attachment 173114 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebKit2/NetworkProcess/NetworkRequest.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/Shared/ShareableResource.cpp:34:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762165</commentid>
    <comment_count>3</comment_count>
      <attachid>173114</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 14:19:19 -0800</bug_when>
    <thetext>Comment on attachment 173114
Patch v1 - Do basic subresource loading

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

&gt; Source/WebKit2/ChangeLog:8
&gt; +        Additional information of the change such as approach, rationale. Please add per-function descriptions below (OOPS!).

OOPS.

&gt; Source/WebKit2/ChangeLog:65
&gt; +        Add an implementation of WebCore::ResourceBuffer that wraps a ShareableResource instead of a SharedBuffer:

Hmm, it&apos;s very much not cool that we still have an m_sharedBuffer data member.

&gt; Source/WebKit2/Shared/ShareableResource.cpp:34
&gt; +ShareableResource::Handle::Handle()
&gt; +{}

Braces go on separate lines.

&gt; Source/WebKit2/Shared/ShareableResource.cpp:61
&gt; +    // Create the shared memory.

Does this comment help? I&apos;m not sure if it&apos;s accurate.

&gt; Source/WebKit2/Shared/ShareableResource.cpp:75
&gt; +    ASSERT(m_sharedMemory);
&gt; +    ASSERT(m_offset + m_size &lt;= m_sharedMemory-&gt;size());

Should these checks be made in production builds, too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762178</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-11-08 14:29:19 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 173114 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=173114&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:8
&gt; &gt; +        Additional information of the change such as approach, rationale. Please add per-function descriptions below (OOPS!).
&gt; 
&gt; OOPS.
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:65
&gt; &gt; +        Add an implementation of WebCore::ResourceBuffer that wraps a ShareableResource instead of a SharedBuffer:
&gt; 
&gt; Hmm, it&apos;s very much not cool that we still have an m_sharedBuffer data member.

Agreed.  Can be unraveled separately.
&gt; 
&gt; &gt; Source/WebKit2/Shared/ShareableResource.cpp:34
&gt; &gt; +ShareableResource::Handle::Handle()
&gt; &gt; +{}
&gt; 
&gt; Braces go on separate lines.

You and Style-bot agree!

&gt; 
&gt; &gt; Source/WebKit2/Shared/ShareableResource.cpp:61
&gt; &gt; +    // Create the shared memory.
&gt; 
&gt; Does this comment help? I&apos;m not sure if it&apos;s accurate.

Leftovers.  Removed.

&gt; &gt; Source/WebKit2/Shared/ShareableResource.cpp:75
&gt; &gt; +    ASSERT(m_sharedMemory);
&gt; &gt; +    ASSERT(m_offset + m_size &lt;= m_sharedMemory-&gt;size());
&gt; 
&gt; Should these checks be made in production builds, too?

Added a fixe with a reasonable course of action (assume the other process is compromised and kill it)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762220</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-11-08 15:05:46 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/133957</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173114</attachid>
            <date>2012-11-08 14:00:58 -0800</date>
            <delta_ts>2012-11-08 14:19:19 -0800</delta_ts>
            <desc>Patch v1 - Do basic subresource loading</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>59623</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhYTg5OGY1Li40Y2Q0OGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTItMTEtMDggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIEhhdmUgTmV0d29ya1Byb2Nlc3MgZG8gdGhlIGFjdHVhbCBsb2FkaW5nIG9mIHN1YnJlc291
cmNlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MTY0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoTm8gY2hhbmdlIGluIGJlaGF2aW9yIGluIGFueSBjb25maWd1cmF0aW9uIHdl
IHRlc3QuKQorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogbG9hZGVyL1Jl
c291cmNlQnVmZmVyLmg6IFZpcnR1YWxpemUgYSBmZXcgbWV0aG9kcyBmb3IgcG9ydHMgdG8gb3Zl
cnJpZGUuCisKIDIwMTItMTEtMDggIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW0NhbnZhc10gVUkgaXRlcmF0aW9uczogaW1h
Z2Ugb24gdGhlIHRvcCwgYXV0byByZXBsYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggYjY4NzE4
NS4uYTVmMjM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTI3MywxMCArMjczLDE2IEBAIF9f
Wk43V2ViQ29yZTlGcmFtZVZpZXcxN3NldFRyYWNrc1JlcGFpbnRzRWIKIF9fWk43V2ViQ29yZTlG
cmFtZVZpZXcyMHJlc2V0VHJhY2tlZFJlcGFpbnRzRXYKIF9fWk43V2ViQ29yZTE0UGx1Z2luRG9j
dW1lbnQxMnBsdWdpbldpZGdldEV2CiBfX1pON1dlYkNvcmUxNFJlc291cmNlQnVmZmVyMTJjcmVh
dGVOU0RhdGFFdgorX19aTjdXZWJDb3JlMTRSZXNvdXJjZUJ1ZmZlcjZhcHBlbmRFUEtjagorX19a
TjdXZWJDb3JlMTRSZXNvdXJjZUJ1ZmZlckMxRVBLY2kKK19fWk43V2ViQ29yZTE0UmVzb3VyY2VC
dWZmZXJDMUV2CitfX1pON1dlYkNvcmUxNFJlc291cmNlQnVmZmVyQzJFdgogX19aTjdXZWJDb3Jl
MTRSZXNvdXJjZUJ1ZmZlckQxRXYKK19fWk43V2ViQ29yZTE0UmVzb3VyY2VCdWZmZXJEMkV2CiBf
X1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjBmb3JjZUNvbnRlbnRTbmlmZmluZ0V2CiBfX1pO
N1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMjZzeW5jaHJvbm91c0xvYWRSdW5Mb29wTW9kZUV2CiBf
X1pON1dlYkNvcmUxNFJlc291cmNlSGFuZGxlMzVjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdl
U2Vzc2lvbkVQSzEwX19DRlN0cmluZworX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTZjcmVh
dGVFUE5TXzE3TmV0d29ya2luZ0NvbnRleHRFUktOU18xNVJlc291cmNlUmVxdWVzdEVQTlNfMjBS
ZXNvdXJjZUhhbmRsZUNsaWVudEViYgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjEzc2V0
SWRlbnRpZmllckVtCiBfX1pON1dlYkNvcmUxNFJlc291cmNlTG9hZGVyMTRjYW5jZWxsZWRFcnJv
ckV2CiBfX1pON1dlYkNvcmUxNFNjaGVtZVJlZ2lzdHJ5MjRyZWdpc3RlclVSTFNjaGVtZUFzTG9j
YWxFUktOM1dURjZTdHJpbmdFCkBAIC0xMjQ0LDYgKzEyNTAsNyBAQCBfX1pOSzdXZWJDb3JlMTRJ
bnNlcnRpb25Qb2ludDhpc0FjdGl2ZUV2CiBfX1pOSzdXZWJDb3JlMTRSZW5kZXJMaXN0SXRlbTEw
bWFya2VyVGV4dEV2CiBfX1pOSzdXZWJDb3JlMTRSZXNvdXJjZUJ1ZmZlcjRkYXRhRXYKIF9fWk5L
N1dlYkNvcmUxNFJlc291cmNlQnVmZmVyNHNpemVFdgorX19aTks3V2ViQ29yZTE0UmVzb3VyY2VC
dWZmZXI3aXNFbXB0eUV2CiBfX1pOSzdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTEwY29ubmVjdGlv
bkV2CiBfX1pOSzdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjExZnJhbWVMb2FkZXJFdgogX19aTks3
V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWExNHNjcm9sbEFuaW1hdG9yRXYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlQnVmZmVyLmgKaW5kZXggNmRjMmRjNy4uYjgwOWE0MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKQEAgLTQ4LDEwICs0OCwxMCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UmVzb3VyY2VCdWZmZXI+IGNyZWF0ZShjb25zdCBjaGFyKiBk
YXRhLCBpbnQgc2l6ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJlc291cmNlQnVmZmVyKGRhdGEs
IHNpemUpKTsgfQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlc291cmNlQnVmZmVyPiBhZG9wdFNo
YXJlZEJ1ZmZlcihQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmVkKSB7IHJldHVybiBzaGFy
ZWQgPyBhZG9wdFJlZihuZXcgUmVzb3VyY2VCdWZmZXIoc2hhcmVkKSkgOiAwOyB9CiAKLSAgICB+
UmVzb3VyY2VCdWZmZXIoKTsKKyAgICB2aXJ0dWFsIH5SZXNvdXJjZUJ1ZmZlcigpOwogCi0gICAg
Y29uc3QgY2hhciogZGF0YSgpIGNvbnN0OwotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IHNpemUoKSBjb25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKIAogICAgIHZvaWQgYXBw
ZW5kKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CkBAIC03OSwxMSArNzksMTMgQEAgcHVibGljOgog
CiAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAK
LXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgUmVzb3VyY2VCdWZmZXIoKTsKKworcHJpdmF0ZToK
ICAgICBSZXNvdXJjZUJ1ZmZlcihjb25zdCBjaGFyKiwgaW50KTsKICAgICBSZXNvdXJjZUJ1ZmZl
cihQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOwotICAgIAorCiAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gbV9zaGFyZWRCdWZmZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggM2RjNmZiYy4uMjA4M2Q2
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDEyLTExLTA4ICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBIYXZlIE5ldHdvcmtQcm9jZXNzIGRvIHRo
ZSBhY3R1YWwgbG9hZGluZyBvZiBzdWJyZXNvdXJjZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE2NDAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBj
aGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlv
biBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBQcm9qZWN0IGZpbGUgc3R1
ZmY6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAg
ICAgIEFkZCBhIG5ldyBMb2dnaW5nIGNoYW5uZWwgZm9yIHNjaGVkdWxpbmcgc28gdGhlIG9uZSBm
b3IgbG9hZGluZyBjYW4gYmUgc2VwYXJhdGU6CisgICAgICAgICogUGxhdGZvcm0vTG9nZ2luZy5j
cHA6CisgICAgICAgICogUGxhdGZvcm0vTG9nZ2luZy5oOgorCisgICAgICAgIEFkZCBhbiBlbmhh
bmNlbWVudCBGSVhNRToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6SG9zdFJlY29yZDo6cmVtb3ZlKToKKworICAgICAgICBOZXR3b3Jr
UmVxdWVzdCBub3cgZGVyaXZlcyBmcm9tIFJlc291cmNlSGFuZGxlQ2xpZW50IGFuZCBkb2VzIGFj
dHVhbCBsb2FkaW5nLCBtZXNzYWdpbmcgV2ViUHJvY2VzcyBhcyBpdCBkb2VzOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1JlcXVlc3Q6Ok5ldHdvcmtSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jl
cXVlc3Q6On5OZXR3b3JrUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXF1ZXN0
OjpzdGFydCk6CisgICAgICAgIChXZWJLaXQ6OnJlcXVlc3RzVG9TdG9wTXV0ZXgpOgorICAgICAg
ICAoV2ViS2l0OjpyZXF1ZXN0c1RvU3RvcCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXF1
ZXN0OjpzY2hlZHVsZVN0b3BPbk1haW5UaHJlYWQpOiBTdG9wCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtSZXF1ZXN0OjpwZXJmb3JtU3RvcHMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVx
dWVzdDo6c3RvcCk6IERvZXMgTmV0d29ya1JlcXVlc3QgY2xlYW51cCB0aGF0IGhhcHBlbnMgbm8g
bWF0dGVyIHRoZSBzdGF0ZSBvZiB0aGUgbmV0d29yayBsb2FkLgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUmVxdWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1JlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jl
cXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVxdWVz
dDo6ZGlkRmFpbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVlc3QuaDoK
KworICAgICAgICBDaGFuZ2Ugc29tZSBsb2dnaW5nIGFuZCBub3cgaW52YWxpZCBhc3NlcnRzLCBh
cyB3ZWxsIGFzIHN0YXJ0aW5nIHJlcXVlc3RzIGluLXByb2Nlc3MgaW5zdGVhZCBvZiByZWx5aW5n
IG9uIFdlYlByb2Nlc3M6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnNjaGVkdWxlTmV0d29ya1JlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjphZGRMb2FkSW5Qcm9ncmVzcyk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRJZGVudGlmaWVy
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NP
cmlnaW5SZWRpcmVjdFJlY2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0Zvckhvc3Qp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVT
Y2hlZHVsZWRMb2FkSWRlbnRpZmllcnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZVJlbW92ZUxvYWRJZGVudGlmaWVyKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6CisgICAgICAg
IChOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKToKKworICAgICAgICBBZGQgYSAiU2hhcmVh
YmxlUmVzb3VyY2UiIHdoaWNoIGluY2x1ZGVzIGEgU2hhcmVkTWVtb3J5IGJsb2NrLCBhbiBvZmZz
ZXQgaW50byB0aGF0IGJsb2NrLCBhbmQgYSBzaXplOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFi
bGVSZXNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVSZXNvdXJj
ZTo6SGFuZGxlOjpIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVSZXNvdXJjZTo6
SGFuZGxlOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVSZXNvdXJjZTo6SGFu
ZGxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlUmVzb3VyY2U6OlNoYXJlYWJsZVJlc291cmNl
KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlUmVzb3VyY2U6On5TaGFyZWFibGVSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGVIYW5kbGUpOgor
ICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVSZXNvdXJjZTo6ZGF0YSk6CisgICAgICAgIChXZWJL
aXQ6OlNoYXJlYWJsZVJlc291cmNlOjpzaXplKToKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVhYmxl
UmVzb3VyY2UuaDogCisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGU6
OmlzTnVsbCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGU6OnNp
emUpOgorCisgICAgICAgIEFkZCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBXZWJDb3JlOjpSZXNvdXJj
ZUJ1ZmZlciB0aGF0IHdyYXBzIGEgU2hhcmVhYmxlUmVzb3VyY2UgaW5zdGVhZCBvZiBhIFNoYXJl
ZEJ1ZmZlcjoKKyAgICAgICAgKiBTaGFyZWQvV2ViUmVzb3VyY2VCdWZmZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUJ1ZmZlcjo6V2ViUmVzb3VyY2VCdWZmZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUJ1ZmZlcjo6fldlYlJlc291cmNlQnVmZmVyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VCdWZmZXI6OmRhdGEpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUJ1ZmZlcjo6c2l6ZSk6CisgICAgICAgICogU2hhcmVkL1dlYlJlc291cmNlQnVm
ZmVyLmg6CisgICAgICAgIChXZWJSZXNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlQnVmZmVyOjpjcmVhdGUpOgorCisgICAgICAgIEFkZCBtZXNzYWdpbmcgdGhhdCBy
ZXNwb25kcyB0byByZXNvdXJjZSBsb2FkIGV2ZW50cyBmcm9tIHRoZSBOZXR3b3JrUHJvY2VzcyBh
bmQgcGFzc2VzIHRoZW0gdG8gdGhlIHNjaGVkdWxlcjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkRmFpbFJlc291cmNlTG9h
ZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24ubWVzc2FnZXMuaW46CisKKyAgICAgICAgVGFrZXMgcmVzb3VyY2UgbG9hZCBldmVudHMgcGFz
c2VkIGZyb20gdGhlIE5ldHdvcmtQcm9jZXNzIGFuZCBoYW5kcyB0aGVtIG9mZiBkaXJlY3RseSB0
byBXZWJDb3JlIFJlc291cmNlTG9hZGVyczoKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQpOiBVcGRhdGUgc29tZSBsb2dnaW5nLgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmFkZE1haW5SZXNvdXJjZUxv
YWQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZW1vdmUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
Ojpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmRpZFJlY2VpdmVSZXNw
b25zZSk6IENhbGwgdGhyb3VnaCB0byBSZXNvdXJjZUxvYWRlci4KKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpkaWRSZWNlaXZlUmVzb3VyY2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpkaWRGYWlsUmVzb3VyY2VM
b2FkKTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9h
ZFNjaGVkdWxlci5oOgorCiAyMDEyLTExLTA4ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNt
YW5uQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdIEZpeCBidWlsZCB3aXRob3V0IFdlYktpdDEK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3Bw
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5jcHAKaW5kZXggMzJi
YTU5Ni4uOWQ3OGQ0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
SG9zdFJlY29yZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvSG9zdFJl
Y29yZC5jcHAKQEAgLTY1LDYgKzY1LDkgQEAgdm9pZCBIb3N0UmVjb3JkOjphZGRMb2FkSW5Qcm9n
cmVzcyhSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCiAKIHZvaWQgSG9zdFJlY29y
ZDo6cmVtb3ZlKFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllcikKIHsKKyAgICAvLyBG
SVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBEdWUgdG8gSVBDIHJhY2UgY29uZGl0aW9ucywgaXQncyBw
b3NzaWJsZSB0aGlzIEhvc3RSZWNvcmQgd2lsbCBiZSBhc2tlZCB0byByZW1vdmUgdGhlIHNhbWUg
aWRlbnRpZmVyIHR3aWNlLgorICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8ga25vdyB0aGUgaWRl
bnRpZmllciBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIHRyZWF0IGl0IGFzIGEgbm8tb3Au
CisKICAgICBpZiAobV9yZXF1ZXN0c0xvYWRpbmcuY29udGFpbnMoaWRlbnRpZmllcikpIHsKICAg
ICAgICAgbV9yZXF1ZXN0c0xvYWRpbmcucmVtb3ZlKGlkZW50aWZpZXIpOwogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVx
dWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVxdWVzdC5j
cHAKaW5kZXggNzllNzRjZi4uMzI0NDY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtSZXF1ZXN0LmNwcApAQCAtMjgsNyArMjgsMTggQEAKIAogI2lmIEVO
QUJMRShORVRXT1JLX1BST0NFU1MpCiAKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
cy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSAiUmVtb3RlTmV0d29ya2luZ0NvbnRleHQu
aCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlQnVmZmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMzcsMTUgKzQ4LDg1IEBAIE5ldHdvcmtSZXF1ZXN0
OjpOZXR3b3JrUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFJlc291cmNlCiAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fY29ubmVj
dGlvbihjb25uZWN0aW9uKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgY29u
bmVjdGlvbi0+cmVnaXN0ZXJPYnNlcnZlcih0aGlzKTsKIH0KIAogTmV0d29ya1JlcXVlc3Q6On5O
ZXR3b3JrUmVxdWVzdCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIGlm
IChtX2Nvbm5lY3Rpb24pCiAgICAgICAgIG1fY29ubmVjdGlvbi0+dW5yZWdpc3Rlck9ic2VydmVy
KHRoaXMpOwogfQogCit2b2lkIE5ldHdvcmtSZXF1ZXN0OjpzdGFydCgpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEV4cGxpY2l0IHJlZigpIGJhbGFuY2VkIGJ5IGEg
ZGVyZWYoKSBpbiBOZXR3b3JrUmVxdWVzdDo6c3RvcCgpCisgICAgcmVmKCk7CisgICAgCisgICAg
Ly8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogQ3JlYXRlIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0
IHdpdGggYWN0dWFsIHNldHRpbmdzLgorICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSBSZW1vdGVO
ZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGZhbHNlLCBmYWxzZSk7CisKKyAgICAvLyBGSVhNRSAo
TmV0d29ya1Byb2Nlc3MpOiBQYXNzIGFuIGFjdHVhbCB2YWx1ZSBmb3Igc2hvdWxkQ29udGVudFNu
aWZmIChYTUxIdHRwUmVxdWVzdCBuZWVkcyB0aGF0KS4KKyAgICBtX2hhbmRsZSA9IFJlc291cmNl
SGFuZGxlOjpjcmVhdGUobV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgbV9yZXF1ZXN0LCB0aGlz
LCBmYWxzZSwgZmFsc2UpOworfQorCitzdGF0aWMgYm9vbCBzdG9wUmVxdWVzdHNDYWxsZWQgPSBm
YWxzZTsKKworc3RhdGljIE11dGV4JiByZXF1ZXN0c1RvU3RvcE11dGV4KCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKE11dGV4LCBtdXRleCwgKCkpOworICAgIHJldHVybiBtdXRleDsKK30K
Kworc3RhdGljIEhhc2hTZXQ8TmV0d29ya1JlcXVlc3QqPiYgcmVxdWVzdHNUb1N0b3AoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxOZXR3b3JrUmVxdWVzdCo+LCByZXF1ZXN0
cywgKCkpOworICAgIHJldHVybiByZXF1ZXN0czsKK30KKwordm9pZCBOZXR3b3JrUmVxdWVzdDo6
c2NoZWR1bGVTdG9wT25NYWluVGhyZWFkKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIocmVx
dWVzdHNUb1N0b3BNdXRleCgpKTsKKworICAgIHJlcXVlc3RzVG9TdG9wKCkuYWRkKHRoaXMpOwor
ICAgIGlmICghc3RvcFJlcXVlc3RzQ2FsbGVkKSB7CisgICAgICAgIHN0b3BSZXF1ZXN0c0NhbGxl
ZCA9IHRydWU7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoTmV0d29ya1JlcXVlc3Q6OnBlcmZv
cm1TdG9wcywgMCk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtSZXF1ZXN0OjpwZXJmb3JtU3Rv
cHModm9pZCopCit7CisgICAgQVNTRVJUKHN0b3BSZXF1ZXN0c0NhbGxlZCk7CisKKyAgICBWZWN0
b3I8TmV0d29ya1JlcXVlc3QqPiByZXF1ZXN0czsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihyZXF1ZXN0c1RvU3RvcE11dGV4KCkpOworICAgICAgICBjb3B5VG9WZWN0b3IocmVx
dWVzdHNUb1N0b3AoKSwgcmVxdWVzdHMpOworICAgICAgICByZXF1ZXN0c1RvU3RvcCgpLmNsZWFy
KCk7CisgICAgICAgIHN0b3BSZXF1ZXN0c0NhbGxlZCA9IGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcXVlc3RzLnNpemUoKTsgKytpKQorICAgICAgICBy
ZXF1ZXN0c1tpXS0+c3RvcCgpOworfQorCit2b2lkIE5ldHdvcmtSZXF1ZXN0OjpzdG9wKCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gUmVtb3ZlIHRoaXMgbG9hZCBp
ZGVudGlmaWVyIHNvb24gc28gd2UgY2FuIHN0YXJ0IG1vcmUgbmV0d29yayByZXF1ZXN0cy4KKyAg
ICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigp
LnNjaGVkdWxlUmVtb3ZlTG9hZElkZW50aWZpZXIobV9pZGVudGlmaWVyKTsKKyAgICAKKyAgICAv
LyBFeHBsaWNpdCBkZXJlZigpIGJhbGFuY2VkIGJ5IGEgcmVmKCkgaW4gTmV0d29ya1JlcXVlc3Q6
OnN0b3AoKQorICAgIC8vIFRoaXMgbWlnaHQgY2F1c2UgdGhlIE5ldHdvcmtSZXF1ZXN0IHRvIGJl
IGRlc3Ryb3llZCBhbmQgdGhlcmVmb3JlIHdlIGRvIGl0IGxhc3QuCisgICAgZGVyZWYoKTsKK30K
Kwogdm9pZCBOZXR3b3JrUmVxdWVzdDo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0RpZENsb3NlKE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uKQogewogICAgIEFTU0VSVF9B
UkcoY29ubmVjdGlvbiwgY29ubmVjdGlvbiA9PSBtX2Nvbm5lY3Rpb24uZ2V0KCkpOwpAQCAtNTMs
NiArMTM0LDUyIEBAIHZvaWQgTmV0d29ya1JlcXVlc3Q6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NE
aWRDbG9zZShOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzCiAgICAgbV9jb25uZWN0aW9uID0g
MDsKIH0KIAordm9pZCBOZXR3b3JrUmVxdWVzdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNl
SGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgLy8gRklY
TUUgKE5ldHdvcmtQcm9jZXNzKTogQ2FjaGUgdGhlIHJlc3BvbnNlLgorICAgIGNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MoKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb246OkRpZFJlY2VpdmVSZXNwb25zZShtX2lkZW50aWZpZXIsIHJlc3BvbnNlKSwg
MCk7Cit9CisKK3ZvaWQgTmV0d29ya1JlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IC8qZW5jb2RlZERhdGFMZW5n
dGgqLykKK3sKKyAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBXZSBoYXZlIHRvIHByb2dy
ZXNzaXZlbHkgbm90aWZ5IHRoZSBXZWJQcm9jZXNzIGFzIGRhdGEgaXMgcmVjZWl2ZWQuCisgICAg
aWYgKCFtX2J1ZmZlcikKKyAgICAgICAgbV9idWZmZXIgPSBSZXNvdXJjZUJ1ZmZlcjo6Y3JlYXRl
KCk7CisgICAgbV9idWZmZXItPmFwcGVuZChkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIE5ldHdv
cmtSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlz
aFRpbWUpCit7CisgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogQ3VycmVudGx5IHRoaXMg
Y2FsbGJhY2sgY2FuIGNvbWUgaW4gb24gYSBub24tbWFpbiB0aHJlYWQuCisgICAgLy8gVGhpcyBp
cyBva2F5IGZvciBub3cgc2luY2UgcmVzb3VyY2UgYnVmZmVycyBhcmUgcGVyLU5ldHdvcmtSZXF1
ZXN0LgorICAgIC8vIE9uY2Ugd2UgbWFuYWdlIG1lbW9yeSBpbiBhbiBhY3R1YWwgbWVtb3J5IGNh
Y2hlIHRoYXQgYWxzbyBpbmNsdWRlcyBTaGFyZWRNZW1vcnkgYmxvY2tzIHRoaXMgd2lsbCBnZXQg
Y29tcGxpY2F0ZWQuCisgICAgLy8gTWF5YmUgd2Ugc2hvdWxkIG1hcnNoYWxsIGl0IHRvIHRoZSBt
YWluIHRocmVhZD8KKworICAgIFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUgaGFuZGxlOworCisg
ICAgaWYgKG1fYnVmZmVyICYmIG1fYnVmZmVyLT5zaXplKCkpIHsKKyAgICAgICAgLy8gRklYTUUg
KE5ldHdvcmtQcm9jZXNzKTogV2Ugc2hvdWxkbid0IGJlIGNyZWF0aW5nIHRoaXMgU2hhcmVkTWVt
b3J5IG9uIGRlbWFuZCBoZXJlLgorICAgICAgICAvLyBTaGFyZWRNZW1vcnkgYmxvY2tzIG5lZWQg
dG8gYmUgbWFuYWdlZCBhcyBwYXJ0IG9mIHRoZSBjYWNoZSBiYWNraW5nIHN0b3JlLgorICAgICAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNyZWF0
ZShtX2J1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KHNoYXJlZEJ1ZmZlci0+ZGF0YSgp
LCBtX2J1ZmZlci0+ZGF0YSgpLCBtX2J1ZmZlci0+c2l6ZSgpKTsKKworICAgICAgICBSZWZQdHI8
U2hhcmVhYmxlUmVzb3VyY2U+IHNoYXJlYWJsZVJlc291cmNlID0gU2hhcmVhYmxlUmVzb3VyY2U6
OmNyZWF0ZShzaGFyZWRCdWZmZXIucmVsZWFzZSgpLCAwLCBtX2J1ZmZlci0+c2l6ZSgpKTsKKwor
ICAgICAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBIYW5kbGUgZXJyb3JzIGZyb20gY3Jl
YXRlSGFuZGxlKCk7CisgICAgICAgIGlmICghc2hhcmVhYmxlUmVzb3VyY2UtPmNyZWF0ZUhhbmRs
ZShoYW5kbGUpKQorICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGhhbmRs
ZSB0byBzaGFyZWFibGUgcmVzb3VyY2UgbWVtb3J5XG4iKTsKKyAgICB9CisKKyAgICBjb25uZWN0
aW9uVG9XZWJQcm9jZXNzKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uOjpEaWRSZWNlaXZlUmVzb3VyY2UobV9pZGVudGlmaWVyLCBoYW5kbGUs
IGZpbmlzaFRpbWUpLCAwKTsKKyAgICBzY2hlZHVsZVN0b3BPbk1haW5UaHJlYWQoKTsKK30KKwor
dm9pZCBOZXR3b3JrUmVxdWVzdDo6ZGlkRmFpbChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MoKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb246OkRpZEZhaWxSZXNvdXJjZUxvYWQobV9pZGVudGlmaWVyLCBlcnJvciksIDApOwor
ICAgIHNjaGVkdWxlU3RvcE9uTWFpblRocmVhZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKIAogI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVxdWVzdC5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVlc3QuaAppbmRleCA2ODNlODMyLi5jOGMzZTJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVxdWVz
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXF1ZXN0LmgK
QEAgLTI5LDEzICsyOSwyMCBAQAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiAKICNpbmNs
dWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VIYW5kbGVDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVz
dC5oPgogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZUJ1ZmZlcjsKK2NsYXNz
IFJlc291cmNlSGFuZGxlOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ7CiB0eXBlZGVmIHVpbnQ2NF90IFJlc291cmNlTG9hZElkZW50aWZp
ZXI7CiAKLWNsYXNzIE5ldHdvcmtSZXF1ZXN0IDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Jl
cXVlc3Q+LCBwdWJsaWMgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NPYnNlcnZlciB7Citj
bGFzcyBOZXR3b3JrUmVxdWVzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtSZXF1ZXN0Piwg
cHVibGljIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzT2JzZXJ2ZXIsIHB1YmxpYyBXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxO
ZXR3b3JrUmVxdWVzdD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyogY29ubmVjdGlvbikKICAgICB7CkBAIC00NCwxOSArNTEsNzEgQEAgcHVi
bGljOgogICAgIAogICAgIH5OZXR3b3JrUmVxdWVzdCgpOwogCi0gICAgdm9pZCBjb25uZWN0aW9u
VG9XZWJQcm9jZXNzRGlkQ2xvc2UoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqKTsKKyAg
ICB2b2lkIHN0YXJ0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdGlvblRvV2ViUHJvY2Vz
c0RpZENsb3NlKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKikgT1ZFUlJJREU7CiAgICAg
CiAgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKCkgeyByZXR1cm4gbV9pZGVu
dGlmaWVyOyB9CiAgICAgCiAgICAgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MoKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KIAorICAg
IC8vIFJlc291cmNlSGFuZGxlQ2xpZW50IG1ldGhvZHMKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNl
bmRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNl
Ki8pIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZSosIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25l
ZCBsb25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQqLykgT1ZFUlJJREUgeyB9CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZURhdGEoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwg
aW50LCBpbnQgLyplbmNvZGVkRGF0YUxlbmd0aCovKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29u
c3QgY2hhciosIGludCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBkb3VibGUgLypmaW5pc2hUaW1lKi8pIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCB3YXNCbG9ja2VkKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKikgT1ZFUlJJREUgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIGNhbm5vdFNob3dVUkwoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqKSBP
VkVSUklERSB7IH0KKyNpZiBIQVZFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQorICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RhdGFBcnJheSgpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhQXJyYXkoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGUqLCBDRkFycmF5UmVmKSBPVkVSUklERSB7IH0KKyNlbmRpZgorICAgIHZpcnR1YWwg
dm9pZCB3aWxsQ2FjaGVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIFdlYkNvcmU6
OkNhY2hlU3RvcmFnZVBvbGljeSYpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSopIE9WRVJSSURF
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIGRp
ZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwg
Y29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBPVkVSUklERSB7IH0KKyNp
ZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorICAgIHZpcnR1YWwgYm9vbCBj
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlKiwgY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJikgT1ZFUlJJREUgeyByZXR1cm4g
ZmFsc2U7IH0KKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJikgT1ZFUlJJREUgeyB9CisjaWYgUExBVEZPUk0oTUFDKQorI2lmIFVTRShDRk5FVFdP
UkspCisgICAgdmlydHVhbCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIHdpbGxDYWNoZVJlc3BvbnNl
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiByZXNwb25z
ZSkgT1ZFUlJJREUgeyByZXR1cm4gcmVzcG9uc2U7IH0KKyNlbHNlCisgICAgdmlydHVhbCBOU0Nh
Y2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2UqIHJlc3BvbnNlKSBPVkVSUklERSB7IHJldHVybiByZXNw
b25zZTsgfQorI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHdpbGxTdG9wQnVmZmVyaW5nRGF0YShX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQpIE9WRVJSSURFIHsgfQor
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENGTkVU
V09SSykKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2FjaGVSZXNwb25zZShXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZSosIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpIE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKEJMT0IpCisgICAgdmlydHVhbCBXZWJDb3JlOjpB
c3luY0ZpbGVTdHJlYW0qIGNyZWF0ZUFzeW5jRmlsZVN0cmVhbShXZWJDb3JlOjpGaWxlU3RyZWFt
Q2xpZW50KikgT1ZFUlJJREUgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAg
TmV0d29ya1JlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VM
b2FkSWRlbnRpZmllciwgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqKTsKIAorICAgIHZv
aWQgc2NoZWR1bGVTdG9wT25NYWluVGhyZWFkKCk7CisgICAgc3RhdGljIHZvaWQgcGVyZm9ybVN0
b3BzKHZvaWQqKTsKKworICAgIHZvaWQgc3RvcCgpOworCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0IG1fcmVxdWVzdDsKICAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIG1faWRlbnRpZmll
cjsKIAorICAgIFJlZlB0cjxSZW1vdGVOZXR3b3JraW5nQ29udGV4dD4gbV9uZXR3b3JraW5nQ29u
dGV4dDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOworCiAg
ICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247CisK
KyAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBSZXNwb25zZSBkYXRhIGxpZmV0aW1lIHNo
b3VsZCBiZSBtYW5hZ2VkIG91dHNpZGUgTmV0d29ya1JlcXVlc3QuCisgICAgUmVmUHRyPFdlYkNv
cmU6OlJlc291cmNlQnVmZmVyPiBtX2J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZFNjaGVkdWxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAppbmRleCBjY2MzZDc2Li5iY2M1ZTQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzY29u
bmVjdGlvbk1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1JlcXVlc3QuaCIKKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShORVRXT1JLX1BST0NFU1MpCkBAIC00MSw3ICs0Miw3IEBAIFJlc291cmNlTG9hZElk
ZW50aWZpZXIgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVOZXR3b3JrUmVx
dWVzdChjb25zCiB7ICAgIAogICAgIFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllciA9
ICsrc19jdXJyZW50UmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKIAotICAgIExPRyhOZXR3b3JrLCAi
KE5ldHdvcmtQcm9jZXNzKSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZU5l
dHdvcmtSZXF1ZXN0IHJlc291cmNlICVsbHUgJyVzJyIsIGlkZW50aWZpZXIsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAi
KE5ldHdvcmtQcm9jZXNzKSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZU5l
dHdvcmtSZXF1ZXN0IHJlc291cmNlICVsbHUgJyVzJyIsIGlkZW50aWZpZXIsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBIb3N0UmVjb3JkKiBob3N0ID0gaG9z
dEZvclVSTChyZXF1ZXN0LnVybCgpLCBDcmVhdGVJZk5vdEZvdW5kKTsKICAgICBib29sIGhhZFJl
cXVlc3RzID0gaG9zdC0+aGFzUmVxdWVzdHMoKTsKQEAgLTYzLDcgKzY0LDcgQEAgUmVzb3VyY2VM
b2FkSWRlbnRpZmllciBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjphZGRMb2FkSW5Qcm9n
cmVzcyhjb25zdCBXZWIKIHsKICAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSArK3NfY3VycmVudFJlc291cmNlTG9hZElkZW50aWZpZXI7CiAKLSAgICBMT0coTmV0d29yaywg
IihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6YWRkTG9hZElu
UHJvZ3Jlc3MgcmVzb3VyY2UgJWxsdSB3aXRoIHVybCAnJXMnIiwgaWRlbnRpZmllciwgdXJsLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhOZXR3b3JrU2NoZWR1bGluZywgIihOZXR3
b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6YWRkTG9hZEluUHJvZ3Jl
c3MgcmVzb3VyY2UgJWxsdSB3aXRoIHVybCAnJXMnIiwgaWRlbnRpZmllciwgdXJsLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgSG9zdFJlY29yZCogaG9zdCA9IGhvc3RGb3JVUkwodXJs
LCBDcmVhdGVJZk5vdEZvdW5kKTsKICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhpZGVudGlm
aWVyKTsKQEAgLTkwLDEyICs5MSwxNiBAQCBIb3N0UmVjb3JkKiBOZXR3b3JrUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpob3N0Rm9yVVJMKGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgQwogCiB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRJZGVudGlmaWVyKFJlc291
cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllcikKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogICAgIEFTU0VSVChpZGVudGlmaWVyKTsKIAotICAgIExPRyhOZXR3b3JrLCAiKE5ldHdv
cmtQcm9jZXNzKSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVMb2FkSWRlbnRp
ZmllciByZW1vdmluZyBsb2FkIGlkZW50aWZpZXIgJWxsdSIsIGlkZW50aWZpZXIpOworICAgIExP
RyhOZXR3b3JrU2NoZWR1bGluZywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlcjo6cmVtb3ZlTG9hZElkZW50aWZpZXIgcmVtb3ZpbmcgbG9hZCBpZGVudGlmaWVy
ICVsbHUiLCBpZGVudGlmaWVyKTsKIAogICAgIEhvc3RSZWNvcmQqIGhvc3QgPSBtX2lkZW50aWZp
ZXJzLnRha2UoaWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKGhvc3QpOworICAgIAorICAgIC8vIER1
ZSB0byBhIHJhY2UgY29uZGl0aW9uIHRoZSBXZWJQcm9jZXNzIG1pZ2h0IGhhdmUgbWVzc2FnZWQg
dGhlIE5ldHdvcmtQcm9jZXNzIHRvIHJlbW92ZSB0aGlzIGlkZW50aWZpZXIKKyAgICAvLyBhZnRl
ciB0aGUgTmV0d29ya1Byb2Nlc3MgaGFzIGFscmVhZHkgcmVtb3ZlZCBpdCBpbnRlcm5hbGx5Lgor
ICAgIC8vIEluIHRoaXMgc2l0dWF0aW9uIHdlIG1pZ2h0IG5vdCBoYXZlIGEgSG9zdFJlY29yZCB0
byBjbGVhbiB1cC4KICAgICBpZiAoaG9zdCkKICAgICAgICAgaG9zdC0+cmVtb3ZlKGlkZW50aWZp
ZXIpOwogCkBAIC0xMDQsNyArMTA5LDggQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpyZW1vdmVMb2FkSWRlbnRpZmllcihSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGkKIAogdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2
ZWQoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpLVVJM
JiByZWRpcmVjdFVSTCkKIHsKLSAgICBMT0coTmV0d29yaywgIihOZXR3b3JrUHJvY2VzcykgTmV0
d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkIHJl
c291cmNlICVsbHUgcmVkaXJlY3RlZCB0byAnJXMnIiwgaWRlbnRpZmllciwgcmVkaXJlY3RVUkwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZCByZXNvdXJjZSAlbGx1
IHJlZGlyZWN0ZWQgdG8gJyVzJyIsIGlkZW50aWZpZXIsIHJlZGlyZWN0VVJMLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwogCiAgICAgSG9zdFJlY29yZCogb2xkSG9zdCA9IG1faWRlbnRpZmllcnMu
Z2V0KGlkZW50aWZpZXIpOwogICAgIEhvc3RSZWNvcmQqIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJl
ZGlyZWN0VVJMLCBDcmVhdGVJZk5vdEZvdW5kKTsKQEAgLTEyNCw3ICsxMzAsNyBAQCB2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNl
TG9hZFByaW9yaXR5IG1pbgogICAgIGlmIChtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgTE9HKE5ldHdvcmssICIoTmV0d29ya1Byb2Nlc3MpIE5l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzIFNlcnZpbmcg
cmVxdWVzdHMgZm9yIHVwIHRvICVpIGhvc3RzIiwgbV9ob3N0cy5zaXplKCkpOworICAgIExPRyhO
ZXR3b3JrU2NoZWR1bGluZywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMgU2VydmluZyByZXF1ZXN0cyBmb3IgdXAgdG8g
JWkgaG9zdHMiLCBtX2hvc3RzLnNpemUoKSk7CiAKICAgICBtX3JlcXVlc3RUaW1lci5zdG9wKCk7
CiAgICAgCkBAIC0xNDYsNyArMTUyLDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW4KIAogdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0Zvckhv
c3QoSG9zdFJlY29yZCogaG9zdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5
KQogewotICAgIExPRyhOZXR3b3JrLCAiTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2Vy
dmVQZW5kaW5nUmVxdWVzdHMgSG9zdCBuYW1lPSclcyciLCBob3N0LT5uYW1lKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiTmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMgSG9zdCBuYW1lPSclcyciLCBob3N0LT5uYW1l
KCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBmb3IgKGludCBwcmlvcml0eSA9IFJlc291cmNlTG9h
ZFByaW9yaXR5SGlnaGVzdDsgcHJpb3JpdHkgPj0gbWluaW11bVByaW9yaXR5OyAtLXByaW9yaXR5
KSB7CiAgICAgICAgIEhvc3RSZWNvcmQ6OlJlcXVlc3RRdWV1ZSYgcmVxdWVzdHNQZW5kaW5nID0g
aG9zdC0+cmVxdWVzdHNQZW5kaW5nKFJlc291cmNlTG9hZFByaW9yaXR5KHByaW9yaXR5KSk7CkBA
IC0xNzgsOCArMTg0LDggQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2
ZVBlbmRpbmdSZXF1ZXN0c0Zvckhvc3QoSG9zdFJlY29yZCogaG9zdCwKIAogICAgICAgICAgICAg
cmVxdWVzdHNQZW5kaW5nLnJlbW92ZUZpcnN0KCk7CiAgICAgICAgICAgICBob3N0LT5hZGRMb2Fk
SW5Qcm9ncmVzcyhyZXF1ZXN0LT5pZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICByZXF1ZXN0LT5jb25uZWN0aW9uVG9XZWJQcm9jZXNzKCktPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpTdGFydFJlc291cmNlTG9hZChy
ZXF1ZXN0LT5pZGVudGlmaWVyKCkpLCAwKTsKKworICAgICAgICAgICAgcmVxdWVzdC0+c3RhcnQo
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIwMCw2ICsyMDYsNDMgQEAgdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMoKQogICAgICAgICBz
Y2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKK3N0YXRpYyBib29sIHJlbW92ZVNj
aGVkdWxlZExvYWRJZGVudGlmaWVyc0NhbGxlZCA9IGZhbHNlOworCit2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZVNjaGVkdWxlZExvYWRJZGVudGlmaWVycyh2b2lkKiBj
b250ZXh0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKHJlbW92
ZVNjaGVkdWxlZExvYWRJZGVudGlmaWVyc0NhbGxlZCk7CisKKyAgICBOZXR3b3JrUmVzb3VyY2VM
b2FkU2NoZWR1bGVyKiBzY2hlZHVsZXIgPSBzdGF0aWNfY2FzdDxOZXR3b3JrUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKj4oY29udGV4dCk7CisgICAgc2NoZWR1bGVyLT5yZW1vdmVTY2hlZHVsZWRMb2Fk
SWRlbnRpZmllcnMoKTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpy
ZW1vdmVTY2hlZHVsZWRMb2FkSWRlbnRpZmllcnMoKQoreworICAgIFZlY3RvcjxSZXNvdXJjZUxv
YWRJZGVudGlmaWVyPiBpZGVudGlmaWVyczsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2lkZW50aWZpZXJzVG9SZW1vdmVNdXRleCk7CisgICAgICAgIGNvcHlUb1ZlY3Rvciht
X2lkZW50aWZpZXJzVG9SZW1vdmUsIGlkZW50aWZpZXJzKTsKKyAgICAgICAgbV9pZGVudGlmaWVy
c1RvUmVtb3ZlLmNsZWFyKCk7CisgICAgICAgIHJlbW92ZVNjaGVkdWxlZExvYWRJZGVudGlmaWVy
c0NhbGxlZCA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGlkZW50aWZpZXJzLnNpemUoKTsgKytpKQorICAgICAgICByZW1vdmVMb2FkSWRlbnRpZmllcihp
ZGVudGlmaWVyc1tpXSk7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2NoZWR1bGVSZW1vdmVMb2FkSWRlbnRpZmllcihSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50
aWZpZXIpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faWRlbnRpZmllcnNUb1JlbW92ZU11
dGV4KTsKKyAgICAKKyAgICBtX2lkZW50aWZpZXJzVG9SZW1vdmUuYWRkKGlkZW50aWZpZXIpOwor
ICAgIAorICAgIGlmICghcmVtb3ZlU2NoZWR1bGVkTG9hZElkZW50aWZpZXJzQ2FsbGVkKSB7Cisg
ICAgICAgIHJlbW92ZVNjaGVkdWxlZExvYWRJZGVudGlmaWVyc0NhbGxlZCA9IHRydWU7CisgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3Zl
U2NoZWR1bGVkTG9hZElkZW50aWZpZXJzLCB0aGlzKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuaAppbmRleCBhMTZhMzg4Li4wZjk4ZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVx
dWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIApAQCAtNTIsNiArNTMsOSBAQCBw
dWJsaWM6CiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBXZWJQcm9jZXNzIHdoZW4gYSBSZXNvdXJjZUxv
YWRlciBpcyBiZWluZyBjbGVhbmVkIHVwLgogICAgIHZvaWQgcmVtb3ZlTG9hZElkZW50aWZpZXIo
UmVzb3VyY2VMb2FkSWRlbnRpZmllcik7CiAKKyAgICAvLyBDYWxsZWQgd2l0aGluIHRoZSBOZXR3
b3JrUHJvY2VzcyBvbiBhIGJhY2tncm91bmQgdGhyZWFkIHdoZW4gYSByZXNvdXJjZSBsb2FkIGhh
cyBmaW5pc2hlZC4KKyAgICB2b2lkIHNjaGVkdWxlUmVtb3ZlTG9hZElkZW50aWZpZXIoUmVzb3Vy
Y2VMb2FkSWRlbnRpZmllcik7CisKICAgICB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZl
ZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZWRpcmVjdFVS
TCk7CiAgICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQ
cmlvcml0eSA9IFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdyk7CiAgICAgdm9p
ZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7CkBAIC03Miw2ICs3Niw5IEBAIHByaXZhdGU6CiAK
ICAgICB1bnNpZ25lZCBwbGF0Zm9ybUluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3Vu
dFBlckhvc3QoKTsKIAorICAgIHN0YXRpYyB2b2lkIHJlbW92ZVNjaGVkdWxlZExvYWRJZGVudGlm
aWVycyh2b2lkKiBjb250ZXh0KTsKKyAgICB2b2lkIHJlbW92ZVNjaGVkdWxlZExvYWRJZGVudGlm
aWVycygpOworCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSG9zdFJlY29yZCosIFN0cmlu
Z0hhc2g+IEhvc3RNYXA7CiAgICAgSG9zdE1hcCBtX2hvc3RzOwogCkBAIC04NCw2ICs5MSw5IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQ7CiAKICAgICBXZWJD
b3JlOjpUaW1lcjxOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyPiBtX3JlcXVlc3RUaW1lcjsK
KyAgICAKKyAgICBNdXRleCBtX2lkZW50aWZpZXJzVG9SZW1vdmVNdXRleDsKKyAgICBIYXNoU2V0
PFJlc291cmNlTG9hZElkZW50aWZpZXI+IG1faWRlbnRpZmllcnNUb1JlbW92ZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
TG9nZ2luZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcAppbmRleCA2
Y2QwNGI5Li5hZTlkMGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dn
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcApAQCAtMzEs
MTQgKzMxLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XVEZMb2dDaGFubmVsIExvZ1Nl
c3Npb25TdGF0ZSA9IHsgMHgwMDAwMDAwMSwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0NoYW5u
ZWxPZmYgfTsKLVdURkxvZ0NoYW5uZWwgTG9nQ29udGV4dE1lbnUgID0geyAweDAwMDAwMDAyLCAi
V2ViS2l0MkxvZ0xldmVsIiwgV1RGTG9nQ2hhbm5lbE9mZiB9OwotV1RGTG9nQ2hhbm5lbCBMb2dU
ZXh0SW5wdXQgICAgPSB7IDB4MDAwMDAwMDQsICJXZWJLaXQyTG9nTGV2ZWwiLCBXVEZMb2dDaGFu
bmVsT2ZmIH07Ci1XVEZMb2dDaGFubmVsIExvZ1ZpZXcgICAgICAgICA9IHsgMHgwMDAwMDAwOCwg
IldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0NoYW5uZWxPZmYgfTsKLVdURkxvZ0NoYW5uZWwgTG9n
SWNvbkRhdGFiYXNlID0geyAweDAwMDAwMDEwLCAiV2ViS2l0MkxvZ0xldmVsIiwgV1RGTG9nQ2hh
bm5lbE9mZiB9OwotV1RGTG9nQ2hhbm5lbCBMb2dLZXlIYW5kbGluZyAgPSB7IDB4MDAwMDAwMjAs
ICJXZWJLaXQyTG9nTGV2ZWwiLCBXVEZMb2dDaGFubmVsT2ZmIH07Ci1XVEZMb2dDaGFubmVsIExv
Z1BsdWdpbnMgICAgICA9IHsgMHgwMDAwMDA0MCwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0No
YW5uZWxPZmYgfTsKLVdURkxvZ0NoYW5uZWwgTG9nTmV0d29yayAgICAgID0geyAweDAwMDAwMDgw
LCAiV2ViS2l0MkxvZ0xldmVsIiwgV1RGTG9nQ2hhbm5lbE9mZiB9OworV1RGTG9nQ2hhbm5lbCBM
b2dTZXNzaW9uU3RhdGUgICAgICA9IHsgMHgwMDAwMDAwMSwgIldlYktpdDJMb2dMZXZlbCIsIFdU
RkxvZ0NoYW5uZWxPZmYgfTsKK1dURkxvZ0NoYW5uZWwgTG9nQ29udGV4dE1lbnUgICAgICAgPSB7
IDB4MDAwMDAwMDIsICJXZWJLaXQyTG9nTGV2ZWwiLCBXVEZMb2dDaGFubmVsT2ZmIH07CitXVEZM
b2dDaGFubmVsIExvZ1RleHRJbnB1dCAgICAgICAgID0geyAweDAwMDAwMDA0LCAiV2ViS2l0Mkxv
Z0xldmVsIiwgV1RGTG9nQ2hhbm5lbE9mZiB9OworV1RGTG9nQ2hhbm5lbCBMb2dWaWV3ICAgICAg
ICAgICAgICA9IHsgMHgwMDAwMDAwOCwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0NoYW5uZWxP
ZmYgfTsKK1dURkxvZ0NoYW5uZWwgTG9nSWNvbkRhdGFiYXNlICAgICAgPSB7IDB4MDAwMDAwMTAs
ICJXZWJLaXQyTG9nTGV2ZWwiLCBXVEZMb2dDaGFubmVsT2ZmIH07CitXVEZMb2dDaGFubmVsIExv
Z0tleUhhbmRsaW5nICAgICAgID0geyAweDAwMDAwMDIwLCAiV2ViS2l0MkxvZ0xldmVsIiwgV1RG
TG9nQ2hhbm5lbE9mZiB9OworV1RGTG9nQ2hhbm5lbCBMb2dQbHVnaW5zICAgICAgICAgICA9IHsg
MHgwMDAwMDA0MCwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0NoYW5uZWxPZmYgfTsKK1dURkxv
Z0NoYW5uZWwgTG9nTmV0d29yayAgICAgICAgICAgPSB7IDB4MDAwMDAwODAsICJXZWJLaXQyTG9n
TGV2ZWwiLCBXVEZMb2dDaGFubmVsT2ZmIH07CitXVEZMb2dDaGFubmVsIExvZ05ldHdvcmtTY2hl
ZHVsaW5nID0geyAweDAwMDAwMTAwLCAiV2ViS2l0MkxvZ0xldmVsIiwgV1RGTG9nQ2hhbm5lbE9m
ZiB9OwogCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JN
KFFUKSAmJiAhUExBVEZPUk0oRUZMKQogdm9pZCBpbml0aWFsaXplTG9nQ2hhbm5lbChXVEZMb2dD
aGFubmVsKiBjaGFubmVsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9n
Z2luZy5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oCmluZGV4IGNhOTk4YzIu
LjhhMThlYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgKQEAgLTQ1LDYgKzQ1LDcgQEAg
ZXh0ZXJuIFdURkxvZ0NoYW5uZWwgTG9nU2Vzc2lvblN0YXRlOwogZXh0ZXJuIFdURkxvZ0NoYW5u
ZWwgTG9nVGV4dElucHV0OwogZXh0ZXJuIFdURkxvZ0NoYW5uZWwgTG9nVmlldzsKIGV4dGVybiBX
VEZMb2dDaGFubmVsIExvZ05ldHdvcms7CitleHRlcm4gV1RGTG9nQ2hhbm5lbCBMb2dOZXR3b3Jr
U2NoZWR1bGluZzsKIAogdm9pZCBpbml0aWFsaXplTG9nQ2hhbm5lbChXVEZMb2dDaGFubmVsKik7
CiB2b2lkIGluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5KHZvaWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOGMxOWQxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIK
KworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitT
aGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlOjpIYW5kbGUoKQore30KKwordm9pZCBTaGFyZWFibGVS
ZXNvdXJjZTo6SGFuZGxlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9oYW5kbGU7CisgICAgZW5jb2RlciA8PCBtX29m
ZnNldDsKKyAgICBlbmNvZGVyIDw8IG1fc2l6ZTsKK30KKworYm9vbCBTaGFyZWFibGVSZXNvdXJj
ZTo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5k
bGUmIGhhbmRsZSkKK3sKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUubV9oYW5kbGUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxl
Lm1fb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlKGhhbmRsZS5tX3NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisgICAgCitQYXNzUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBTaGFyZWFibGVSZXNv
dXJjZTo6Y3JlYXRlKFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnksIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNo
YXJlYWJsZVJlc291cmNlKHNoYXJlZE1lbW9yeSwgb2Zmc2V0LCBzaXplKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUoY29uc3Qg
SGFuZGxlJiBoYW5kbGUpCit7CisgICAgLy8gQ3JlYXRlIHRoZSBzaGFyZWQgbWVtb3J5LgorICAg
IFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRl
KGhhbmRsZS5tX2hhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgaWYgKCFzaGFy
ZWRNZW1vcnkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNyZWF0ZShzaGFyZWRN
ZW1vcnkucmVsZWFzZSgpLCBoYW5kbGUubV9vZmZzZXQsIGhhbmRsZS5tX3NpemUpOworfQorCitT
aGFyZWFibGVSZXNvdXJjZTo6U2hhcmVhYmxlUmVzb3VyY2UoUGFzc1JlZlB0cjxTaGFyZWRNZW1v
cnk+IHNoYXJlZE1lbW9yeSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBzaXplKQorICAgIDog
bV9zaGFyZWRNZW1vcnkoc2hhcmVkTWVtb3J5KQorICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAg
ICwgbV9zaXplKHNpemUpCit7CisgICAgQVNTRVJUKG1fc2hhcmVkTWVtb3J5KTsKKyAgICBBU1NF
UlQobV9vZmZzZXQgKyBtX3NpemUgPD0gbV9zaGFyZWRNZW1vcnktPnNpemUoKSk7Cit9CisKK1No
YXJlYWJsZVJlc291cmNlOjp+U2hhcmVhYmxlUmVzb3VyY2UoKQoreworfQorCitib29sIFNoYXJl
YWJsZVJlc291cmNlOjpjcmVhdGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaWYgKCFt
X3NoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZS5tX2hhbmRsZSwgU2hhcmVkTWVtb3J5
OjpSZWFkT25seSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhhbmRsZS5tX29mZnNl
dCA9IG1fb2Zmc2V0OworICAgIGhhbmRsZS5tX3NpemUgPSBtX3NpemU7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworY29uc3QgY2hhciogU2hhcmVhYmxlUmVzb3VyY2U6OmRhdGEoKSBjb25zdAor
eworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9zaGFyZWRNZW1vcnktPmRh
dGEoKSkgKyBtX29mZnNldDsKK30KKwordW5zaWduZWQgU2hhcmVhYmxlUmVzb3VyY2U6OnNpemUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3NpemU7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJj
ZS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmMGU0YwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oCkBAIC0wLDAgKzEsODQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXJlYWJsZVJlc291cmNlX2gKKyNkZWZpbmUgU2hhcmVh
YmxlUmVzb3VyY2VfaAorCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisKKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK2NsYXNzIFNoYXJlYWJs
ZVJlc291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVhYmxlUmVzb3VyY2U+IHsKK3B1Ymxp
YzoKKworICAgIGNsYXNzIEhhbmRsZSB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhh
bmRsZSk7CisgICAgcHVibGljOgorICAgICAgICBIYW5kbGUoKTsKKworICAgICAgICBib29sIGlz
TnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmlzTnVsbCgpOyB9CisgICAgICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgICAgICB2b2lkIGVuY29k
ZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIEhhbmRsZSYpOworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlYWJsZVJlc291cmNlOworCisgICAgICAgIG11
dGFibGUgU2hhcmVkTWVtb3J5OjpIYW5kbGUgbV9oYW5kbGU7CisgICAgICAgIHVuc2lnbmVkIG1f
b2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgfTsKKworICAgIC8vIENyZWF0
ZSBhIHNoYXJlYWJsZSBiaXRtYXAgdGhhdCB1c2VzIG1hbGxvY2VkIG1lbW9yeS4KKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gY3JlYXRlKFBhc3NSZWZQdHI8U2hhcmVk
TWVtb3J5PiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBzaXplKTsKKworICAgIC8vIENyZWF0
ZSBhIHNoYXJlYWJsZSBiaXRtYXAgZnJvbSBhIGhhbmRsZS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTaGFyZWFibGVSZXNvdXJjZT4gY3JlYXRlKGNvbnN0IEhhbmRsZSYpOworCisgICAgLy8gQ3Jl
YXRlIGEgaGFuZGxlLgorICAgIGJvb2wgY3JlYXRlSGFuZGxlKEhhbmRsZSYpOworCisgICAgflNo
YXJlYWJsZVJlc291cmNlKCk7CisKKyAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBTaGFyZWFibGVSZXNv
dXJjZShQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4sIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
c2l6ZSk7CisKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsKKworICAg
IHVuc2lnbmVkIG1fb2Zmc2V0OworICAgIHVuc2lnbmVkIG1fc2l6ZTsgICAgCit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFNoYXJlYWJsZVJlc291cmNlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZXNvdXJjZUJ1ZmZlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUmVzb3VyY2VCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjRkZjExMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViUmVzb3VyY2VCdWZmZXIuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VCdWZmZXIu
aCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViUmVzb3VyY2VCdWZmZXI6OldlYlJlc291cmNl
QnVmZmVyKFBhc3NSZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+IHJlc291cmNlKQorICAgIDogbV9y
ZXNvdXJjZShyZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQobV9yZXNvdXJjZSk7Cit9CisKK1dlYlJl
c291cmNlQnVmZmVyOjp+V2ViUmVzb3VyY2VCdWZmZXIoKQoreworfQorCitjb25zdCBjaGFyKiBX
ZWJSZXNvdXJjZUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KG1fcmVzb3VyY2UtPmRhdGEoKSk7Cit9CisKK3Vuc2lnbmVkIFdl
YlJlc291cmNlQnVmZmVyOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXNvdXJjZS0+
c2l6ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJSZXNvdXJjZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYlJlc291cmNlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MGM3N2U5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJSZXNv
dXJjZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlJl
c291cmNlQnVmZmVyX2gKKyNkZWZpbmUgV2ViUmVzb3VyY2VCdWZmZXJfaAorCisjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
U2hhcmVhYmxlUmVzb3VyY2U7CisKK2NsYXNzIFdlYlJlc291cmNlQnVmZmVyIDogcHVibGljIFdl
YkNvcmU6OlJlc291cmNlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJSZXNvdXJjZUJ1ZmZlcj4gY3JlYXRlKFBhc3NSZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+IHJl
c291cmNlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgV2ViUmVzb3VyY2VCdWZmZXIocmVzb3VyY2Up
KTsgfQorCisgICAgdmlydHVhbCB+V2ViUmVzb3VyY2VCdWZmZXIoKSBPVkVSUklERTsKKworICAg
IHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIFdlYlJlc291
cmNlQnVmZmVyKFBhc3NSZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+KTsKKworICAgIFJlZlB0cjxT
aGFyZWFibGVSZXNvdXJjZT4gbV9yZXNvdXJjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViUmVzb3VyY2VCdWZmZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDcyMTZjNGIuLmRkYjkzZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTM3Nyw2ICszNzcsMTAgQEAKIAkJNTExRjhBN0YxMzhCNDZGRTAwQTk1RjQ0IC8qIFNl
Y0l0ZW1TaGltTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTExRjhBN0QxMzhCNDZGRTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTWV0aG9kcy5o
ICovOyB9OwogCQk1MTFGOEE4MDEzOEI0NkZFMDBBOTVGNDQgLyogU2VjSXRlbVNoaW1NZXRob2Rz
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjhB
N0UxMzhCNDZGRTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTWV0aG9kcy5tbSAqLzsgfTsKIAkJNTEx
RjhBODExMzhCNDg1RDAwQTk1RjQ0IC8qIFdlYlByb2Nlc3NTaGltLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjhBNzgxMzhCNDYwOTAwQTk1RjQ0
IC8qIFdlYlByb2Nlc3NTaGltLm1tICovOyB9OworCQk1MTIxNzQ2MDE2NEMyMEUzMDAzN0E1QzEg
LyogU2hhcmVhYmxlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEyMTc0NUUxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291
cmNlLmNwcCAqLzsgfTsKKwkJNTEyMTc0NjExNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJl
c291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTIxNzQ1RjE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuaCAqLzsgfTsKKwkJ
NTEyMTc0NjQxNjRDMjEzNzAwMzdBNUMxIC8qIFdlYlJlc291cmNlQnVmZmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjE3NDYyMTY0QzIxMzcw
MDM3QTVDMSAvKiBXZWJSZXNvdXJjZUJ1ZmZlci5jcHAgKi87IH07CisJCTUxMjE3NDY1MTY0QzIx
MzcwMDM3QTVDMSAvKiBXZWJSZXNvdXJjZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyMTc0NjMxNjRDMjEzNzAwMzdBNUMxIC8qIFdlYlJl
c291cmNlQnVmZmVyLmggKi87IH07CiAJCTUxMjNDRjFCMTMzRDI2MEEwMDU2RjgwMCAvKiBXS0lj
b25EYXRhYmFzZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMjNDRjE5MTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmNwcCAq
LzsgfTsKIAkJNTEyM0NGMUMxMzNEMjYwQTAwNTZGODAwIC8qIFdLSWNvbkRhdGFiYXNlQ0cuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjNDRjFBMTMz
RDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEyOTM1RDcxMjg4RDE5NDAwQTRCNjk1IC8q
IFdlYkNvbnRleHRNZW51SXRlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTI5MzVENTEyODhEMTk0MDBBNEI2OTUgLyogV2ViQ29udGV4dE1lbnVJ
dGVtLmNwcCAqLzsgfTsKQEAgLTE1OTMsNiArMTU5NywxMCBAQAogCQk1MTFGOEE3ODEzOEI0NjA5
MDBBOTVGNDQgLyogV2ViUHJvY2Vzc1NoaW0ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJQcm9jZXNzU2hpbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTExRjhBN0QxMzhCNDZGRTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTWV0aG9kcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWNJdGVtU2hpbU1ldGhvZHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRjhBN0UxMzhCNDZGRTAwQTk1RjQ0IC8qIFNl
Y0l0ZW1TaGltTWV0aG9kcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNlY0l0ZW1TaGltTWV0aG9kcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTEyMTc0NUUxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlYWJsZVJlc291cmNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEyMTc0NUYxNjRDMjBFMzAwMzdBNUMxIC8qIFNo
YXJlYWJsZVJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJl
YWJsZVJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMjE3NDYyMTY0
QzIxMzcwMDM3QTVDMSAvKiBXZWJSZXNvdXJjZUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxMjE3NDYzMTY0QzIxMzcwMDM3QTVDMSAvKiBXZWJSZXNvdXJjZUJ1
ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJSZXNvdXJjZUJ1ZmZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTIzQ0YxOTEzM0QyNjBBMDA1NkY4
MDAgLyogV0tJY29uRGF0YWJhc2VDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBXS0ljb25EYXRhYmFzZUNHLmNwcDsgcGF0aCA9IGNnL1dLSWNvbkRhdGFiYXNlQ0cu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTIzQ0YxQTEzM0QyNjBBMDA1NkY4
MDAgLyogV0tJY29uRGF0YWJhc2VDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXS0ljb25EYXRhYmFzZUNHLmg7IHBhdGggPSBjZy9XS0ljb25EYXRhYmFzZUNHLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMjkzNUQ1MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJD
b250ZXh0TWVudUl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29udGV4dE1lbnVJdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3
NDAsNiArMjc0OCw4IEBACiAJCQkJNTE4RDJDQzkxMkQ1MURGQjAwM0JCOTNCIC8qIFNlc3Npb25T
dGF0ZS5oICovLAogCQkJCTFBNjQyMEUyMTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRt
YXAuY3BwICovLAogCQkJCTFBNjQyMEUzMTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRt
YXAuaCAqLywKKwkJCQk1MTIxNzQ1RTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3Vy
Y2UuY3BwICovLAorCQkJCTUxMjE3NDVGMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNv
dXJjZS5oICovLAogCQkJCTUyNzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0
YS5jcHAgKi8sCiAJCQkJNTI3MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRh
LmggKi8sCiAJCQkJQkNCRDNDM0ExMjVCRkE3QTAwRDJDMjlGIC8qIFN0cmluZ1BhaXJWZWN0b3Iu
aCAqLywKQEAgLTI4MDQsNiArMjgxNCw4IEBACiAJCQkJMzc5NDg0MDIxNTBDMzUwNjAwRTUyQ0U5
IC8qIFdlYlJlbmRlckxheWVyLmggKi8sCiAJCQkJMzc2MDg4MUMxNTA0MTNFOTAwRkM4MkM3IC8q
IFdlYlJlbmRlck9iamVjdC5jcHAgKi8sCiAJCQkJMzc2MDg4MUQxNTA0MTNFOTAwRkM4MkM3IC8q
IFdlYlJlbmRlck9iamVjdC5oICovLAorCQkJCTUxMjE3NDYyMTY0QzIxMzcwMDM3QTVDMSAvKiBX
ZWJSZXNvdXJjZUJ1ZmZlci5jcHAgKi8sCisJCQkJNTEyMTc0NjMxNjRDMjEzNzAwMzdBNUMxIC8q
IFdlYlJlc291cmNlQnVmZmVyLmggKi8sCiAJCQkJRjYzNDQ0NTUxMkE4ODVDODAwMDYxMkQ4IC8q
IFdlYlNlY3VyaXR5T3JpZ2luLmggKi8sCiAJCQkJQTcyRDVEN0YxMjM2Q0JBODAwQTg4QjE1IC8q
IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oICovLAogCQkJCUJDRjA0QzhFMTFGRjlGNkUwMEY4
NkE1OCAvKiBXZWJTdHJpbmcuaCAqLywKQEAgLTQ4NjEsNiArNDg3Myw4IEBACiAJCQkJMUFCMTZB
RTIxNjQ4NjU2RDAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBQjE2QUVBMTY0QjNBODgwMDI5MEQ2MiAvKiBSZW1vdGVMYXll
clRyZWVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUIxNkFFRTE2NEI0MUU0MDAy
OTBENjIgLyogUmVtb3RlR3JhcGhpY3NMYXllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTEyMTc0
NjExNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MTIxNzQ2NTE2NEMyMTM3MDAzN0E1QzEgLyogV2ViUmVzb3VyY2VCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtNTgwMCw2ICs1ODE0LDggQEAKIAkJCQk5RjRGNTk0NjE2NDhCQThFMDA0
OTNCN0UgLyogTmV0d29ya1Byb2Nlc3NNYW5hZ2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUFCMTZBRTkxNjRCM0E4ODAwMjkwRDYyIC8qIFJlbW90ZUxheWVyVHJlZUNvbnRyb2xsZXIubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxQUIxNkFFRDE2NEI0MUU0MDAyOTBENjIgLyogUmVtb3RlR3Jh
cGhpY3NMYXllci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxMjE3NDYwMTY0QzIwRTMwMDM3QTVD
MSAvKiBTaGFyZWFibGVSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTIxNzQ2NDE2
NEMyMTM3MDAzN0E1QzEgLyogV2ViUmVzb3VyY2VCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDEwZDY3MjIuLjY5ZTMwNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC0yNyw5ICsyNywxMyBAQAogI2luY2x1ZGUgIk5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1
ZGUgIldlYlJlc291cmNlQnVmZmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUJ1ZmZl
ci5oPgogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIAordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246
Ok5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVy
IGNvbm5lY3Rpb25JZGVudGlmaWVyKQpAQCAtNjYsMTEgKzcwLDI5IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiosIENvCiB7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpzdGFydFJl
c291cmNlTG9hZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyIHJlc291cmNlTG9hZElkZW50aWZpZXIp
Cit2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291
cmNlTG9hZElkZW50aWZpZXIgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKCkuc3RhcnRSZXNvdXJjZUxvYWQocmVzb3VyY2VMb2FkSWRlbnRpZmll
cik7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCku
ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc291cmNlTG9hZElkZW50aWZpZXIsIHJlc3BvbnNlKTsKIH0K
Kwordm9pZCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVSZXNvdXJjZShSZXNv
dXJjZUxvYWRJZGVudGlmaWVyIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFNoYXJlYWJs
ZVJlc291cmNlOjpIYW5kbGUmIGhhbmRsZSwgZG91YmxlIGZpbmlzaFRpbWUpCit7CisgICAgUmVm
UHRyPFJlc291cmNlQnVmZmVyPiByZXNvdXJjZUJ1ZmZlcjsKKworICAgIFJlZlB0cjxTaGFyZWFi
bGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKGhhbmRsZSk7
CisgICAgaWYgKHJlc291cmNlKQorICAgICAgICByZXNvdXJjZUJ1ZmZlciA9IFdlYlJlc291cmNl
QnVmZmVyOjpjcmVhdGUocmVzb3VyY2UucmVsZWFzZSgpKTsKKyAgICBlbHNlCisgICAgICAgIHJl
c291cmNlQnVmZmVyID0gUmVzb3VyY2VCdWZmZXI6OmNyZWF0ZSgpOwogICAgIAorICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLndlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLmRpZFJlY2VpdmVSZXNv
dXJjZShyZXNvdXJjZUxvYWRJZGVudGlmaWVyLCAqcmVzb3VyY2VCdWZmZXIsIGZpbmlzaFRpbWUp
OworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkRmFpbFJlc291cmNlTG9h
ZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKQoreworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlJlc291
cmNlTG9hZFNjaGVkdWxlcigpLmRpZEZhaWxSZXNvdXJjZUxvYWQocmVzb3VyY2VMb2FkSWRlbnRp
ZmllciwgZXJyb3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVO
QUJMRShORVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgKaW5kZXggNmQ2YTk4
Zi4uYWZhNDBkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaApAQCAtMjcsMTEgKzI3LDE3IEBA
CiAjZGVmaW5lIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbl9oCiAKICNpbmNsdWRlICJDb25uZWN0
aW9uLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVzb3VyY2VF
cnJvcjsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiB0eXBlZGVmIHVpbnQ2NF90IFJlc291cmNlTG9hZElkZW50aWZpZXI7CkBAIC01Nyw3ICs2Myw5
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25NZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJ
UEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAKLSAgICB2b2lkIHN0YXJ0UmVzb3VyY2VMb2FkKFJlc291
cmNlTG9hZElkZW50aWZpZXIpOworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNl
TG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2
b2lkIGRpZFJlY2VpdmVSZXNvdXJjZShSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBTaGFy
ZWFibGVSZXNvdXJjZTo6SGFuZGxlJiwgZG91YmxlIGZpbmlzaFRpbWUpOworICAgIHZvaWQgZGlk
RmFpbFJlc291cmNlTG9hZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yJik7CiAKICAgICAvLyBUaGUgY29ubmVjdGlvbiBmcm9tIHRoZSB3ZWIgcHJv
Y2VzcyB0byB0aGUgbmV0d29yayBwcm9jZXNzLgogICAgIFJlZlB0cjxDb3JlSVBDOjpDb25uZWN0
aW9uPiBtX2Nvbm5lY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbgppbmRleCA2OWFlYWJiLi4wYzE2OGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24ubWVzc2FnZXMuaW4KQEAgLTI0LDkgKzI0LDEwIEBACiAKIG1lc3NhZ2VzIC0+IE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbiB7CiAKLSAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBU
aGlzIG1lc3NhZ2UgaXMgZm9yIHRoZSBOZXR3b3JrUHJvY2VzcyB0byB0ZWxsIHRoZSBXZWJQcm9j
ZXNzIHRvIHN0YXJ0IGEgbG9hZC4KLSAgICAvLyBPbmNlIHRoZSBOZXR3b3JrUHJvY2VzcyBpcyBk
b2luZyB0aGUgbG9hZGluZyBpdHNlbGYgdGhlbiB3ZSBzaG91bGQgcmVtb3ZlIGl0LgotICAgIFN0
YXJ0UmVzb3VyY2VMb2FkKHVpbnQ2NF90IHJlc291cmNlTG9hZElkZW50aWZpZXIpCisgICAgLy8g
RklYTUUgKE5ldHdvcmtQcm9jZXNzKTogV2UnbGwgbmVlZCBtdWNoIG1vcmUgZ3JhbnVsYXJpdHkg
Zm9yIHJlc3BvbnNlIG1lc3NhZ2VzLgorICAgIERpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBy
ZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
KQorICAgIERpZFJlY2VpdmVSZXNvdXJjZSh1aW50NjRfdCByZXNvdXJjZUxvYWRJZGVudGlmaWVy
LCBXZWJLaXQ6OlNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUgcmVzb3VyY2UsIGRvdWJsZSBmaW5p
c2hUaW1lKQorICAgIERpZEZhaWxSZXNvdXJjZUxvYWQodWludDY0X3QgcmVzb3VyY2VMb2FkSWRl
bnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvcikKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShORVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IGRl
ZjYwZTQuLmJmMTRmMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0
d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWVMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1YnJlc291cmNlTG9hZGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNzIsNyArNzMsNyBAQCBQYXNz
UmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNjaGVkdWxlUGx1Z2luUwogCiB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2No
ZWR1bGVMb2FkKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VMb2FkUHJp
b3JpdHkgcHJpb3JpdHkpCiB7Ci0gICAgTE9HKE5ldHdvcmssICIoV2ViUHJvY2VzcykgV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQsIHVybCAnJXMnIHByaW9yaXR5ICVpIiwg
cmVzb3VyY2VMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHByaW9yaXR5KTsK
KyAgICBMT0coTmV0d29ya1NjaGVkdWxpbmcsICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQsIHVybCAnJXMnIHByaW9yaXR5ICVpIiwgcmVzb3VyY2VM
b2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHByaW9yaXR5KTsKIAogICAgIEFT
U0VSVChyZXNvdXJjZUxvYWRlcik7CiAgICAgQVNTRVJUKHByaW9yaXR5ICE9IFJlc291cmNlTG9h
ZFByaW9yaXR5VW5yZXNvbHZlZCk7CkBAIC0xMDcsNyArMTA4LDcgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2Fk
ZXIsIFJlc28KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmFkZE1haW5SZXNvdXJj
ZUxvYWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewotICAgIExPRyhOZXR3b3Jr
LCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6YWRkTWFpblJlc291cmNl
TG9hZCwgdXJsICclcyciLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6YWRkTWFpblJlc291cmNlTG9hZCwgdXJsICclcyciLCByZXNvdXJj
ZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBSZXNvdXJjZUxv
YWRJZGVudGlmaWVyIGlkZW50aWZpZXI7CiAKQEAgLTEyNCw3ICsxMjUsNyBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6YWRkTWFpblJlc291cmNlTG9hZChSZXNvdXJjZUxvYWRlciog
cmVzb3VyY2VMb2FkZQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZShSZXNv
dXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCiB7CiAgICAgQVNTRVJUKHJlc291cmNlTG9hZGVy
KTsKLSAgICBMT0coTmV0d29yaywgIihXZWJQcm9jZXNzKSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnJlbW92ZSwgdXJsICclcyciLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgTE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlByb2Nlc3MpIFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlLCB1cmwgJyVzJyIsIHJlc291cmNlTG9hZGVy
LT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIC8vIEZJWE1FIChOZXR3b3Jr
UHJvY2Vzcyk6IEl0J3MgcG9zc2libGUgZm9yIGEgcmVzb3VyY2VMb2FkZXIgdG8gYmUgcmVtb3Zl
ZCBiZWZvcmUgaXQgZXZlciBzdGFydGVkLAogICAgIC8vIG1lYW5pbmcgYmVmb3JlIGl0IGV2ZW4g
aGFzIGFuIGlkZW50aWZpZXIuCkBAIC0xMzcsNiArMTM4LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCisgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTog
V2Ugc2hvdWxkIG9ubHkgdGVsbCB0aGUgTmV0d29ya1Byb2Nlc3MgdG8gcmVtb3ZlIGxvYWQgaWRl
bnRpZmllcnMgZm9yIFJlc291cmNlTG9hZGVycyB0aGF0IHdlcmUgbmV2ZXIgc3RhcnRlZC4KKyAg
ICAvLyBJZiBhIHJlc291cmNlIGxvYWQgd2FzIGFjdHVhbGx5IHN0YXJ0ZWQgd2l0aGluIHRoZSBO
ZXR3b3JrUHJvY2VzcyB0aGVuIHRoZSBOZXR3b3JrUHJvY2VzcyBoYW5kbGVzIGNsZWFyaW5nIG91
dCB0aGUgaWRlbnRpZmllci4KICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVj
dGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpSZW1vdmVMb2FkSWRlbnRpZmllcihpZGVudGlmaWVyKSwgMCk7CiAgICAgCiAg
ICAgQVNTRVJUKG1fcGVuZGluZ1Jlc291cmNlTG9hZGVycy5jb250YWlucyhpZGVudGlmaWVyKSB8
fCBtX2FjdGl2ZVJlc291cmNlTG9hZGVycy5jb250YWlucyhpZGVudGlmaWVyKSk7CkBAIC0xNDYs
NyArMTQ5LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZShSZXNvdXJj
ZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
Ojpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9h
ZGVyLCBjb25zdCBLVVJMJiByZWRpcmVjdFVSTCkKIHsKLSAgICBMT0coTmV0d29yaywgIihXZWJQ
cm9jZXNzKSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNl
aXZlZC4gRnJvbSAnJXMnIHRvICclcyciLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgcmVkaXJlY3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
TE9HKE5ldHdvcmtTY2hlZHVsaW5nLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkLiBGcm9tICclcycgdG8gJyVzJyIsIHJl
c291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCByZWRpcmVjdFVSTC5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7CiAg
ICAgQVNTRVJUKHJlc291cmNlTG9hZGVyLT5pZGVudGlmaWVyKCkpOwpAQCAtMTU5LDcgKzE2Miw3
IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVj
ZWl2ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291CiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJp
b3JpdHkpCiB7Ci0gICAgTE9HKE5ldHdvcmssICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyIpOworICAgIExPRyhOZXR3b3JrU2NoZWR1
bGluZywgIihXZWJQcm9jZXNzKSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGlu
Z1JlcXVlc3RzIik7CiAgICAgCiAgICAgLy8gSWYgdGhpcyBXZWJQcm9jZXNzIGhhcyBpdHMgb3du
IHJlcXVlc3Qgc3VzcGVuc2lvbiBjb3VudCB0aGVuIHdlIGRvbid0IGV2ZW4KICAgICAvLyBoYXZl
IHRvIGJvdGhlciBtZXNzYWdpbmcgdGhlIE5ldHdvcmtQcm9jZXNzLgpAQCAtMTg5LDIzICsxOTIs
NDAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldFNlcmlhbExvYWRpbmdFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVj
dGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6U2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoZW5hYmxlZCksIE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQ6
OlJlcGx5KCksIDApOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c3RhcnRS
ZXNvdXJjZUxvYWQoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKQordm9pZCBXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUxvYWRJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQogewotICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gbV9wZW5kaW5nUmVz
b3VyY2VMb2FkZXJzLnRha2UoaWRlbnRpZmllcik7Ci0gICAgCi0gICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzEyNTk2NzYxPiBhbmQgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDA3OTIKLSAgICAvLyBUaGVy
ZSBpcyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBXZWJQcm9jZXNzIG1pZ2h0IHRlbGwgdGhl
IE5ldHdvcmtQcm9jZXNzIHRvIHJlbW92ZSBhIHJlc291cmNlIGxvYWQgaWRlbnRpZmllcgotICAg
IC8vIGF0IHRoZSB2ZXJ5IHRpbWUgdGhlIE5ldHdvcmtQcm9jZXNzIGlzIHRlbGxpbmcgdGhlIFdl
YlByb2Nlc3MgdG8gc3RhcnQgdGhhdCBwYXJ0aWN1bGFyIGxvYWQuCi0gICAgLy8gV2UnZCBsaWtl
IHRvIHJlbW92ZSB0aGF0IHJhY2UgY29uZGl0aW9uIGJ1dCBpdCBtYWtlcyBzZW5zZSBmb3IgcmVs
ZWFzZSBidWlsZHMgdG8gZG8gYW4gZWFybHkgcmV0dXJuLgorICAgIFJlZlB0cjxSZXNvdXJjZUxv
YWRlcj4gbG9hZGVyID0gbV9wZW5kaW5nUmVzb3VyY2VMb2FkZXJzLmdldChpZGVudGlmaWVyKTsK
ICAgICBBU1NFUlQobG9hZGVyKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuOwor
CisgICAgTE9HKE5ldHdvcmssICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpkaWRSZWNlaXZlUmVzcG9uc2UgZm9yICclcyciLCBsb2FkZXItPnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworICAgIGxvYWRlci0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsK
K30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmRpZFJlY2VpdmVSZXNvdXJjZShS
ZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlQnVmZmVyJiBi
dWZmZXIsIGRvdWJsZSBmaW5pc2hUaW1lKQoreyAgICAKKyAgICBSZWZQdHI8UmVzb3VyY2VMb2Fk
ZXI+IGxvYWRlciA9IG1fcGVuZGluZ1Jlc291cmNlTG9hZGVycy5nZXQoaWRlbnRpZmllcik7Cisg
ICAgQVNTRVJUKGxvYWRlcik7CisKKyAgICBMT0coTmV0d29yaywgIihXZWJQcm9jZXNzKSBXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmRpZFJlY2VpdmVSZXNvdXJjZSBmb3IgJyVzJyIsIGxvYWRl
ci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgCi0gICAgTE9HKE5ldHdvcmss
ICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdGFydFJlc291cmNlTG9h
ZCBzdGFydGluZyBsb2FkIGZvciAnJXMnIiwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAvLyBPbmx5IHNlbmQgZGF0YSB0byB0aGUgZGlkUmVjZWl2ZURhdGEgY2Fs
bGJhY2sgaWYgaXQgZXhpc3RzLgorICAgIGlmICghYnVmZmVyLmlzRW1wdHkoKSkgeworICAgICAg
ICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBHaXZlIFJlc291cmNlTG9hZGVyIHRoZSBhYmls
aXR5IHRvIHRha2UgUmVzb3VyY2VCdWZmZXIgYXJndW1lbnRzLgorICAgICAgICAvLyBUaGF0IHdp
bGwgYWxsb3cgdXMgdG8gcGFzcyBpdCBhbG9uZyB0byBDYWNoZWRSZXNvdXJjZXMgYW5kIGFsbG93
IHRoZW0gdG8gaGFuZyBvbiB0byB0aGUgc2hhcmVkIG1lbW9yeSBiZWhpbmQgdGhlIHNjZW5lcy4K
KyAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZlRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihidWZmZXIuZGF0YSgpKSwgYnVmZmVyLnNpemUoKSwgLTEgLyogZW5jb2RlZERhdGFMZW5n
dGggKi8sIHRydWUpOworICAgIH0KKworICAgIGxvYWRlci0+ZGlkRmluaXNoTG9hZGluZyhmaW5p
c2hUaW1lKTsKK30KIAotICAgIG1fYWN0aXZlUmVzb3VyY2VMb2FkZXJzLnNldChpZGVudGlmaWVy
LCBsb2FkZXIpOwordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmRpZEZhaWxSZXNvdXJj
ZUxvYWQoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRl
ciA9IG1fcGVuZGluZ1Jlc291cmNlTG9hZGVycy5nZXQoaWRlbnRpZmllcik7CisgICAgQVNTRVJU
KGxvYWRlcik7CiAKLSAgICBzdGFydFJlc291cmNlTG9hZGVyKGxvYWRlci5nZXQoKSk7CisgICAg
TE9HKE5ldHdvcmssICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpkaWRG
YWlsUmVzb3VyY2VMb2FkIGZvciAnJXMnIiwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAKKyAgICBsb2FkZXItPmRpZEZhaWwoZXJyb3IpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0
d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAppbmRleCA0MjI0MjdiLi5mYWEy
YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCkBAIC01NywxMyArNTcsMTIgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wpIE9WRVJS
SURFOwogCisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VMb2FkSWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZvaWQgZGlkUmVjZWl2
ZVJlc291cmNlKFJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
QnVmZmVyJiwgZG91YmxlIGZpbmlzaFRpbWUpOworICAgIHZvaWQgZGlkRmFpbFJlc291cmNlTG9h
ZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7
CisKIHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZUxvYWQoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
ZXIqLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSk7Ci0KLSAgICAvLyBOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24gZ2V0cyB0byB0ZWxsIGxvYWRzIHRvIGFjdHVhbGx5IHN0YXJ0LgotICAg
IC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IE9uY2UgYWN0dWFsIGxvYWRpbmcgdGFrZXMgcGxh
Y2UgaW4gdGhlIE5ldHdvcmtQcm9jZXNzIHdlIHdvbid0IG5lZWQgdGhpcy4KLSAgICBmcmllbmQg
Y2xhc3MgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOwotICAgIHZvaWQgc3RhcnRSZXNvdXJjZUxv
YWQoUmVzb3VyY2VMb2FkSWRlbnRpZmllcik7CiAgICAgCiAgICAgdHlwZWRlZiBIYXNoTWFwPHVu
c2lnbmVkIGxvbmcsIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcj4gPiBSZXNvdXJjZUxv
YWRlck1hcDsKICAgICBSZXNvdXJjZUxvYWRlck1hcCBtX3BlbmRpbmdSZXNvdXJjZUxvYWRlcnM7
Cg==
</data>
<flag name="review"
          id="187693"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>