<?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>154473</bug_id>
          
          <creation_ts>2016-02-19 14:39:16 -0800</creation_ts>
          <short_desc>Implement downloads with NetworkSession</short_desc>
          <delta_ts>2016-03-25 10:12:21 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>beidson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1166561</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-19 14:39:16 -0800</bug_when>
    <thetext>Implement downloads with NetworkSession</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166562</commentid>
    <comment_count>1</comment_count>
      <attachid>271804</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-19 14:39:36 -0800</bug_when>
    <thetext>Created attachment 271804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166563</commentid>
    <comment_count>2</comment_count>
      <attachid>271804</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-19 14:40:00 -0800</bug_when>
    <thetext>Comment on attachment 271804
Patch

first patch is WIP.  Something is still wrong :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167453</commentid>
    <comment_count>3</comment_count>
      <attachid>272031</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-23 10:20:25 -0800</bug_when>
    <thetext>Created attachment 272031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167460</commentid>
    <comment_count>4</comment_count>
      <attachid>272031</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-23 10:42:17 -0800</bug_when>
    <thetext>Comment on attachment 272031
Patch

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

Mostly looks fine, but there&apos;s a bit of an anti-pattern here I think should be cleaned up instead of landed as-is

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:128
&gt; -    client().willPerformHTTPRedirection(redirectResponse, request, completionHandler);
&gt; +    if (client())
&gt; +        client()-&gt;willPerformHTTPRedirection(redirectResponse, request, completionHandler);

Inside NetworkDataTask, you can access m_client directly instead of calling client(), right?

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:104
&gt; +    if (auto* networkDataTask = _session-&gt;dataTaskForIdentifier(task.taskIdentifier)) {
&gt; +        if (auto* client = networkDataTask-&gt;client())
&gt; +            client-&gt;didSendData(totalBytesSent, totalBytesExpectedToSend);
&gt; +    }

This is a pattern repeated multiple times in this patch - The URLSession delegate null checking the data task&apos;s client.

Instead, I think it should just always call a method in NetworkDataTask, which then null checks its own client. e.g.
if (auto* networkDataTask = _session-&gt;dataTaskForIdentifier(task.taskIdentifier))
    networkDataTask-&gt;client().didSendData(totalBytesSent, totalBytesExpectedToSend);

...becomes...

if (auto* networkDataTask = _session-&gt;dataTaskForIdentifier(task.taskIdentifier))
    networkDataTask-&gt;didSendData(totalBytesSent, totalBytesExpectedToSend);

And then NetworkDataTask::didSendData(...) just null checks m_client at the start.

That would make a lot of code easier to read (and write!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167472</commentid>
    <comment_count>5</comment_count>
      <attachid>272034</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-23 11:01:03 -0800</bug_when>
    <thetext>Created attachment 272034
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167478</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-23 11:13:32 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/196984</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177994</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-25 10:12:21 -0700</bug_when>
    <thetext>Removed unused capture in r198672.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271804</attachid>
            <date>2016-02-19 14:39:36 -0800</date>
            <delta_ts>2016-02-23 10:20:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154473-20160219143917.patch</filename>
            <type>text/plain</type>
            <size>19672</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjgzNSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE2LTAyLTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGRvd25sb2FkcyB3aXRoIE5ldHdvcmtTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ0NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjp+RG93bmxvYWQpOgorICAgICAgICAo
V2ViS2l0OjpEb3dubG9hZDo6ZGlkU3RhcnQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZC5oOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6ZG93bmxvYWRJ
RCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6Y29udGludWVXaWxsU2VuZFJl
cXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1hbmFnZXI6OndpbGxGaW5kUGVuZGlu
Z0Rvd25sb2FkTG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1hbmFnZXI6OmNv
bnRpbnVlRmluZFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRNYW5hZ2VyOjpjb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtEYXRhVGFzay5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRh
c2s6OnNldFBlbmRpbmdEb3dubG9hZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6Y29udmVydFRhc2tUb0Rv
d25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OnNldFBlbmRpbmdEb3dubG9h
ZElEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZU5l
dHdvcmtTZXNzaW9uKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjb250aW51ZVdpbGxTZW5kUmVx
dWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmaW5kUGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y29udGludWVG
aW5kUGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2Nv
YS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2sp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpmaW5kUGVuZGluZ0Rvd25sb2FkTG9j
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3du
bG9hZExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjp0cnlQYXNz
d29yZEJhc2VkQXV0aGVudGljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRh
c2s6OmN1cnJlbnRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpj
YW5jZWwpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29j
b2EubW06CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRh
dGFUYXNrOmRpZEJlY29tZURvd25sb2FkVGFzazpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5
OjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAgIChXZWJL
aXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1l
QXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5OjpkaWRDcmVhdGVEZXN0aW5h
dGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluOgor
CiAyMDE2LTAyLTE5ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBF
bmhhbmNlIEVkaXRvclN0YXRlIHRvIGluY2x1ZGUgVHlwaW5nQXR0cmlidXRlcywgYWxpZ25tZW50
LCBhbmQgY29sb3IKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtEYXRhVGFzay5oCShyZXZpc2lvbiAxOTY3NzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
OCBAQAogI2lmbmRlZiBOZXR3b3JrRGF0YVRhc2tfaAogI2RlZmluZSBOZXR3b3JrRGF0YVRhc2tf
aAogCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNp
b24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlSGFuZGxlVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
TG9hZGVyT3B0aW9ucy5oPgpAQCAtMTEwLDYgKzExMiw5IEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKCFtX3BlbmRpbmdEb3dubG9hZCk7CiAgICAgICAgIG1fcGVuZGluZ0Rvd25sb2FkID0gJnBl
bmRpbmdEb3dubG9hZDsKICAgICB9CisgICAgdm9pZCBmaW5kUGVuZGluZ0Rvd25sb2FkTG9jYXRp
b24oUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxv
YWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmKTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgY3VycmVudFJlcXVlc3Qo
KTsKICAgICBib29sIHRyeVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsK
ICAgICB2b2lkIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0
aW9uSGFuZGxlcik7CiAgICAgCkBAIC0xMzUsNiArMTQwLDcgQEAgcHJpdmF0ZToKICAgICBTdHJp
bmcgbV9sYXN0SFRUUE1ldGhvZDsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9maXJz
dFJlcXVlc3Q7CiAgICAgYm9vbCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVk
aXJlY3Q7CisgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+
IG1fdGFzazsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0xvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkLmNwcAkocmV2aXNpb24gMTk2NzcyKQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMTMgKzE2
MywxNCBAQCB2b2lkIE5ldHdvcmtMb2FkOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0CiAKIHZvaWQg
TmV0d29ya0xvYWQ6OmNvbnZlcnRUYXNrVG9Eb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQp
CiB7CisgICAgaWYgKCFtX3Rhc2spCisgICAgICAgIHJldHVybjsKKwogICAgIG1fdGFzay0+c2V0
UGVuZGluZ0Rvd25sb2FkSUQoZG93bmxvYWRJRCk7CiAgICAgCiAgICAgQVNTRVJUKG1fcmVzcG9u
c2VDb21wbGV0aW9uSGFuZGxlcik7Ci0gICAgaWYgKG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxl
cikgewotICAgICAgICBtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIoUG9saWN5RG93bmxvYWQp
OwotICAgICAgICBtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIgPSBudWxscHRyOwotICAgIH0K
KyAgICBpZiAobV9yZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICBtX3Rhc2stPmZp
bmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihXVEZNb3ZlKG1fcmVzcG9uc2VDb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiB2b2lkIE5ldHdvcmtMb2FkOjpzZXRQZW5kaW5nRG93bmxvYWRJRChEb3du
bG9hZElEIGRvd25sb2FkSUQpCkBAIC0yMTgsNyArMjE5LDcgQEAgdm9pZCBOZXR3b3JrTG9hZDo6
ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0dwogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgaWYgKG1fdGFzayAmJiBtX3Rhc2stPnBlbmRpbmdEb3dubG9hZElEKCkuZG93bmxvYWRJRCgp
KQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lEb3dubG9hZCk7CisgICAgICAgIG1f
dGFzay0+ZmluZFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbXBsZXRpb25IYW5kbGVyKTsKICAg
ICBlbHNlIGlmIChzaGFyZWREaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpID09IE5ldHdvcmtM
b2FkQ2xpZW50OjpTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzKQogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lVc2UpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9u
IDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkF1dGhlbnRp
Y2F0aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaCIKQEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgog
I2luY2x1ZGUgIlN0YXRpc3RpY3NEYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5o
IgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3NQb29sTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvRE5TLmg+CkBAIC00NjIsNiArNDY0LDIwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNv
bnRpbnVlV2lsbFNlbmRSZXEKIHsKICAgICBkb3dubG9hZE1hbmFnZXIoKS5jb250aW51ZVdpbGxT
ZW5kUmVxdWVzdChkb3dubG9hZElELCByZXF1ZXN0KTsKIH0KKwordm9pZCBOZXR3b3JrUHJvY2Vz
czo6ZmluZFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKE5ldHdvcmtEYXRhVGFzayYgbmV0d29ya0Rh
dGFUYXNrLCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRs
ZXIgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgdWludDY0X3QgZGVzdGluYXRpb25JRCA9IG5l
dHdvcmtEYXRhVGFzay5wZW5kaW5nRG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKTsKKyAgICBkb3du
bG9hZFByb3h5Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRT
dGFydChuZXR3b3JrRGF0YVRhc2suY3VycmVudFJlcXVlc3QoKSksIGRlc3RpbmF0aW9uSUQpOwor
ICAgIAorICAgIGRvd25sb2FkTWFuYWdlcigpLndpbGxGaW5kUGVuZGluZ0Rvd25sb2FkTG9jYXRp
b24obmV0d29ya0RhdGFUYXNrLCBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgZG93bmxvYWRQcm94
eUNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6RGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhuZXR3b3JrRGF0YVRhc2sucGVuZGluZ0Rv
d25sb2FkSUQoKSwgc3VnZ2VzdGVkRmlsZW5hbWUpLCBkZXN0aW5hdGlvbklEKTsKK30KKyAgICAK
K3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvbnRpbnVlRmluZFBlbmRpbmdEb3dubG9hZExvY2F0aW9u
KERvd25sb2FkSUQgZG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0aW9uLCBjb25zdCBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCit7CisgICAgZG93bmxv
YWRNYW5hZ2VyKCkuY29udGludWVGaW5kUGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oZG93bmxvYWRJ
RCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOworfQogI2VuZGlmCiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnNldENhY2hlTW9kZWwodWludDMyX3QgY20pCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9u
IDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBEb3dubG9hZElEOwogY2xhc3MgQ2VydGlmaWNhdGVJbmZvOwogY2xh
c3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CkBAIC05OSw2
ICsxMDAsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJIU1RTQ2FjaGUoV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2lu
dCBtb2RpZmllZFNpbmNlKTsKICNlbmRpZgogCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAg
ICB2b2lkIGZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihOZXR3b3JrRGF0YVRhc2smLCBTdHJp
bmcgc3VnZ2VzdGVkRmlsZW5hbWUsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIpOworI2VuZGlm
CisgICAgCiAgICAgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0ZToK
QEAgLTE1Nyw2ICsxNjIsNyBAQCBwcml2YXRlOgogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAg
ICAgdm9pZCBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoRG93
bmxvYWRJRCwgYm9vbCBjYW5BdXRoZW50aWNhdGUpOwogICAgIHZvaWQgY29udGludWVXaWxsU2Vu
ZFJlcXVlc3QoRG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Cisg
ICAgdm9pZCBjb250aW51ZUZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihEb3dubG9hZElELCBT
dHJpbmcgZGVzdGluYXRpb24sIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSk7CiAjZW5kaWYKICAgICB2b2lkIHNldENhY2hlTW9kZWwodWludDMy
X3QpOwogICAgIHZvaWQgYWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYsIGNvbnN0IFN0cmluZyYgaG9zdCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTk2NzcyKQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDcgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZQogI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgQ29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlKFdlYktpdDo6RG93bmxvYWRJRCBkb3dubG9hZElELCBib29sIGNhbkF1
dGhlbnRpY2F0ZSkKICAgICBDb250aW51ZVdpbGxTZW5kUmVxdWVzdChXZWJLaXQ6OkRvd25sb2Fk
SUQgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QpCisgICAgQ29u
dGludWVGaW5kUGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oV2ViS2l0OjpEb3dubG9hZElEIGRvd25s
b2FkSUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKICNlbmRpZgogCiAgICAgU2V0UHJvY2Vzc1N1cHBy
ZXNzaW9uRW5hYmxlZChib29sIGZsYWcpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJKHJldmlzaW9uIDE5Njc3MikK
KysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDEyICs2Niw3IEBAIERvd25sb2FkOjp+RG93bmxvYWQoKQog
ICAgIG1fZG93bmxvYWRNYW5hZ2VyLmRpZERlc3Ryb3lEb3dubG9hZCgpOwogfQogCi0jaWYgVVNF
KE5FVFdPUktfU0VTU0lPTikKLXZvaWQgRG93bmxvYWQ6OmRpZFN0YXJ0KGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpE
aWRTdGFydChyZXF1ZXN0KSk7Ci19Ci0jZWxzZQorI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQog
dm9pZCBEb3dubG9hZDo6ZGlkU3RhcnQoKQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRvd25sb2Fk
UHJveHk6OkRpZFN0YXJ0KG1fcmVxdWVzdCkpOwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgJKHJldmlzaW9uIDE5Njc3MikK
KysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Myw5ICs5Myw3IEBAIHB1YmxpYzoKIAogICAgIERvd25sb2FkSUQg
ZG93bmxvYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZG93bmxvYWRJRDsgfQogCi0jaWYgVVNFKE5F
VFdPUktfU0VTU0lPTikKLSAgICB2b2lkIGRpZFN0YXJ0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYpOwotI2Vsc2UKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICB2b2lkIGRp
ZFN0YXJ0KCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkTWFuYWdlci5jcHAJKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OSw2ICs4OSwyNSBAQCB2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udGludWVXaWxsU2Vu
ZFJlCiAgICAgaWYgKHBlbmRpbmdEb3dubG9hZCkKICAgICAgICAgcGVuZGluZ0Rvd25sb2FkLT5j
b250aW51ZVdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0KTsKIH0KKwordm9pZCBEb3dubG9hZE1hbmFn
ZXI6OndpbGxGaW5kUGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oTmV0d29ya0RhdGFUYXNrJiBuZXR3
b3JrRGF0YVRhc2ssIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Rvd25sb2Fkc1dhaXRpbmdGb3JMb2NhdGlvbi5z
ZXQobmV0d29ya0RhdGFUYXNrLnBlbmRpbmdEb3dubG9hZElEKCksIHN0ZDo6bWFrZV9wYWlyPFJl
ZlB0cjxOZXR3b3JrRGF0YVRhc2s+LCBSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyPigmbmV0d29y
a0RhdGFUYXNrLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgRG93bmxvYWRN
YW5hZ2VyOjpjb250aW51ZUZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihEb3dubG9hZElEIGRv
d25sb2FkSUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQoreworICAgIGF1dG8gcGFpciA9IG1fZG93bmxv
YWRzV2FpdGluZ0ZvckxvY2F0aW9uLnRha2UoZG93bmxvYWRJRCk7CisgICAgYXV0byBuZXR3b3Jr
RGF0YVRhc2sgPSBwYWlyLmZpcnN0OworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBwYWly
LnNlY29uZDsKKyAgICBpZiAoIW5ldHdvcmtEYXRhVGFzayB8fCAhY29tcGxldGlvbkhhbmRsZXIp
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbmV0d29ya0RhdGFUYXNrLT5zZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihkZXN0aW5h
dGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoUG9s
aWN5RG93bmxvYWQpOworfQogI2Vsc2UKIHZvaWQgRG93bmxvYWRNYW5hZ2VyOjpjb252ZXJ0SGFu
ZGxlVG9Eb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQsIFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5oCShyZXZpc2lvbiAxOTY3NzIp
CisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5h
Z2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgRG93bmxvYWRN
YW5hZ2VyX2gKIAogI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0
YVRhc2suaCIKICNpbmNsdWRlICJQZW5kaW5nRG93bmxvYWQuaCIKICNpbmNsdWRlICJTYW5kYm94
RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgpAQCAtNzUs
NiArNzYsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBlbmRpbmdEb3dubG9hZD4g
ZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2soRG93bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERv
d25sb2FkPiYmKTsKICAgICB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZShEb3dubG9hZElELCBib29sIGNhbkF1dGhlbnRpY2F0ZSk7CiAgICAgdm9pZCBj
b250aW51ZVdpbGxTZW5kUmVxdWVzdChEb3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmKTsKKyAgICB2b2lkIHdpbGxGaW5kUGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oTmV0
d29ya0RhdGFUYXNrJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBjb250
aW51ZUZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihEb3dubG9hZElELCBTdHJpbmcgZGVzdGlu
YXRpb24sIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpOwogI2Vsc2UKICAgICB2b2lk
IGNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKERvd25sb2FkSUQsIFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpOwogI2VuZGlmCkBAIC05OSw2ICsxMDIsNyBAQCBwcml2YXRlOgogICAg
IENsaWVudCYgbV9jbGllbnQ7CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBIYXNoTWFw
PERvd25sb2FkSUQsIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRG93bmxvYWQ+PiBtX3BlbmRpbmdE
b3dubG9hZHM7CisgICAgSGFzaE1hcDxEb3dubG9hZElELCBzdGQ6OnBhaXI8UmVmUHRyPE5ldHdv
cmtEYXRhVGFzaz4sIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXI+PiBtX2Rvd25sb2Fkc1dhaXRp
bmdGb3JMb2NhdGlvbjsKICNlbmRpZgogICAgIEhhc2hNYXA8RG93bmxvYWRJRCwgc3RkOjp1bmlx
dWVfcHRyPERvd25sb2FkPj4gbV9kb3dubG9hZHM7CiB9OwpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EubW0JKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSAr
MjgsMTkgQEAKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKKyNpbXBvcnQgIkRvd25sb2Fk
UHJveHlNZXNzYWdlcy5oIgorI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbXBvcnQgIldl
YkNvcmVBcmd1bWVudENvZGVycy5oIgogI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogCisv
LyBGSVhNRTogTW92ZSB0aGlzIHRvIENGTmV0d29ya1NQSS5oLgorQGludGVyZmFjZSBOU1VSTFNl
c3Npb25UYXNrICgpCitAcHJvcGVydHkgKHJlYWR3cml0ZSwgY29weSkgTlNTdHJpbmcgKl9wYXRo
VG9Eb3dubG9hZFRhc2tGaWxlOworQGVuZAorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogTmV0d29y
a0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdv
cmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0b3Jl
ZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVu
dFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCkBA
IC0xNDYsNiArMTU0LDIxIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJl
ZCgKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5maW5k
UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKnRoaXMsIG1fdGFzay5nZXQoKS5yZXNwb25zZS5zdWdn
ZXN0ZWRGaWxlbmFtZSwgY29tcGxldGlvbkhhbmRsZXIpOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFzazo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVu
YW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpCit7CisgICAgQVNTRVJUKCFtX3NhbmRib3hFeHRlbnNpb24pOworICAgIG1fc2FuZGJveEV4
dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
KTsKKyAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKQorICAgICAgICBtX3NhbmRib3hFeHRlbnNp
b24tPmNvbnN1bWUoKTsKKworICAgIG1fdGFzay5nZXQoKS5fcGF0aFRvRG93bmxvYWRUYXNrRmls
ZSA9IGZpbGVuYW1lOworfQorCiBib29sIE5ldHdvcmtEYXRhVGFzazo6dHJ5UGFzc3dvcmRCYXNl
ZEF1dGhlbnRpY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBj
aGFsbGVuZ2UsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGlmICghY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLmlzUGFzc3dvcmRCYXNlZCgp
KQpAQCAtMTY2LDYgKzE4OSwxMSBAQCBib29sIE5ldHdvcmtEYXRhVGFzazo6dHJ5UGFzc3dvcmRC
YXNlZEF1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qg
TmV0d29ya0RhdGFUYXNrOjpjdXJyZW50UmVxdWVzdCgpCit7CisgICAgcmV0dXJuIFttX3Rhc2sg
Y3VycmVudFJlcXVlc3RdOworfQorCiB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2FuY2VsKCkKIHsK
ICAgICBbbV90YXNrIGNhbmNlbF07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0JKHJldmlzaW9u
IDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtT
ZXNzaW9uQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4Myw3ICsxODMsNiBAQCAtICh2b2lk
KVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAgICAgICAgIGF1dG8gZG93bmxvYWRJ
RCA9IG5ldHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKICAgICAgICAgYXV0byYg
ZG93bmxvYWRNYW5hZ2VyID0gV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93
bmxvYWRNYW5hZ2VyKCk7CiAgICAgICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdlYktpdDo6RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgZG93bmxvYWRJRCk7Ci0gICAgICAg
IGRvd25sb2FkLT5kaWRTdGFydChbZG93bmxvYWRUYXNrIGN1cnJlbnRSZXF1ZXN0XSk7CiAgICAg
ICAgIGRvd25sb2FkLT5kaWRSZWNlaXZlUmVzcG9uc2UoW2Rvd25sb2FkVGFzayByZXNwb25zZV0p
OwogICAgICAgICBhdXRvIHBlbmRpbmdEb3dubG9hZCA9IGRvd25sb2FkTWFuYWdlci5kYXRhVGFz
a0JlY2FtZURvd25sb2FkVGFzayhkb3dubG9hZElELCBXVEZNb3ZlKGRvd25sb2FkKSk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5LmNwcAkocmV2aXNpb24gMTk2NzcyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4
MywyNSBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0CiAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0aW5hdGlvbiwgU2FuZGJveEV4dGVu
c2lvbjo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKIH0KIAorI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCit2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9uV2l0
aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoRG93bmxvYWRJRCBkb3dubG9hZElELCBjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQoreworICAgIGJvb2wgYWxsb3dPdmVyd3JpdGUgPSBmYWxz
ZTsKKyAgICAKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgp
LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKG1fcHJvY2Vzc1Bvb2wuZ2V0
KCksIHRoaXMsIHN1Z2dlc3RlZEZpbGVuYW1lLCBhbGxvd092ZXJ3cml0ZSk7CisgICAgCisgICAg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CisgICAgaWYg
KCFkZXN0aW5hdGlvbi5pc051bGwoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpSZWFkV3JpdGUsIHNhbmRib3hF
eHRlbnNpb25IYW5kbGUpOworICAgIAorICAgIGlmIChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3
b3JrUHJvY2VzcyA9IG1fcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCisgICAgICAgIG5l
dHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpDb250aW51ZUZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihkb3dubG9hZElELCBkZXN0aW5h
dGlvbiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOworfQorI2VuZGlmCisKIHZvaWQgRG93
bmxvYWRQcm94eTo6ZGlkQ3JlYXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQogewog
ICAgIGlmICghbV9wcm9jZXNzUG9vbCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWRQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5oCShyZXZpc2lvbiAxOTY3NzIpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgRG93bmxvYWRJRDsKIGNsYXNzIERvd25sb2FkUHJveHlN
YXA7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKQEAgLTg5LDYg
KzkwLDcgQEAgcHJpdmF0ZToKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZvaWQgY2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjb25zdCBXZWJDb3JlOjpQcm90ZWN0
aW9uU3BhY2UmKTsKICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlZGlyZWN0UmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgdm9pZCBkZWNpZGVEZXN0aW5hdGlvbldpdGhT
dWdnZXN0ZWRGaWxlbmFtZUFzeW5jKERvd25sb2FkSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZW5hbWUpOwogI2VuZGlmCiAKICAgICBEb3dubG9hZFByb3h5TWFwJiBtX2Rvd25sb2FkUHJv
eHlNYXA7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxOTY3NzIpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAgbWVzc2FnZXMgLT4gRG93bmxv
YWRQcm94eSB7CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBXaWxsU2VuZFJlcXVlc3Qo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlZGlyZWN0UmVxdWVzdCwgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSByZWRpcmVjdFJlc3BvbnNlKSk7CiAgICAgQ2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZShXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNl
KQorICAgIERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoV2ViS2l0
OjpEb3dubG9hZElEIGRvd25sb2FkSUQsIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSkKICNlbmRp
ZgogCiAgICAgRGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVz
cG9uc2UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272031</attachid>
            <date>2016-02-23 10:20:25 -0800</date>
            <delta_ts>2016-02-23 11:00:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154473-20160223102007.patch</filename>
            <type>text/plain</type>
            <size>34683</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Njk4MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDE2LTAyLTIzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGRvd25sb2FkcyB3aXRoIE5ldHdvcmtTZXNzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ0NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjp+RG93bmxvYWQpOgorICAgICAgICAo
V2ViS2l0OjpEb3dubG9hZDo6ZGlkU3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6
c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAo
V2ViS2l0OjpEb3dubG9hZDo6ZGlkQ3JlYXRlRGVzdGluYXRpb24pOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9h
ZDo6ZG93bmxvYWRJRCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpzZXRTYW5kYm94RXh0
ZW5zaW9uKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5h
Z2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyOjpzdGFydERvd25sb2Fk
KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRNYW5hZ2VyOjpkYXRhVGFza0JlY2FtZURvd25s
b2FkVGFzayk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6Y29udGludWVDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWRNYW5hZ2VyOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkTWFuYWdlcjo6d2lsbEZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6Y29udGludWVGaW5kUGVuZGluZ0Rvd25sb2Fk
TG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1hbmFnZXI6OmNvbnZlcnRIYW5k
bGVUb0Rvd25sb2FkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWRNYW5hZ2VyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmg6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xpZW50KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpjbGVhckNsaWVudCk6CisgICAgICAgIE5ldHdvcmtEYXRh
VGFza3MgY2FuIG5vdyBvdXRsaXZlIHRoZWlyIGNsaWVudCwgc28gd2UgbmVlZCB0byBtYWtlIGNs
aWVudCBhIHBvaW50ZXIKKyAgICAgICAgd2l0aCB0aGUgYWJpbGl0eSB0byBiZSBudWxsZWQgZnJv
bSB0aGUgY2xpZW50J3MgZGVzdHJ1Y3Rvci4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFU
YXNrOjpwZW5kaW5nRG93bmxvYWRJRCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
azo6cGVuZGluZ0Rvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpz
ZXRQZW5kaW5nRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnBl
bmRpbmdEb3dubG9hZExvY2F0aW9uKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
TG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjp+TmV0d29ya0xvYWQpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6Y29udmVydFRhc2tUb0Rvd25sb2FkKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OnNldFBlbmRpbmdEb3dubG9hZElEKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZU5ldHdvcmtTZXNzaW9u
KToKKyAgICAgICAgRG9uJ3QgY2FsbCB0aGUgZGlkUmVjZWl2ZVJlc3BvbnNlIGNvbXBsZXRpb24g
aGFuZGxlciBpbW1lZGlhdGVseSB3aGVuIHdlIGtub3cgd2UgYXJlCisgICAgICAgIGdvaW5nIHRv
IHR1cm4gdGhlIGxvYWQgaW50byBhIGRvd25sb2FkLiAgSW5zdGVhZCwgc2F2ZSB0aGUgY29tcGxl
dGlvbiBoYW5kbGVyIHVudGlsCisgICAgICAgIGFmdGVyIHdlIGhhdmUgZGV0ZXJtaW5lZCB0aGUg
ZG93bmxvYWQgZGVzdGluYXRpb24gYW5kIHNldCBpdCBpbiB0aGUgTmV0d29ya0RhdGFUYXNrLgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjb250aW51ZUZpbmRQZW5kaW5nRG93bmxv
YWRMb2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzZXRDYWNoZU1v
ZGVsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNjaGVkdWxlRmFpbHVyZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZmFpbHVyZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2s6OmZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnRyeVBhc3N3b3JkQmFzZWRBdXRo
ZW50aWNhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6dHJhbnNmZXJT
YW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFzazo6Y3VycmVudFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6
OmNhbmNlbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25D
b2NvYS5tbToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246
dGFzazpkaWRTZW5kQm9keURhdGE6dG90YWxCeXRlc1NlbnQ6dG90YWxCeXRlc0V4cGVjdGVkVG9T
ZW5kOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjp0
YXNrOndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6Y29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOnRh
c2s6ZGlkUmVjZWl2ZUNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1b
V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazpkaWRDb21wbGV0ZVdpdGhF
cnJvcjpdKToKKyAgICAgICAgVGhpcyBkZWxlZ2F0ZSBjYWxsYmFjayBpcyB1c2VkIGZvciBkb3du
bG9hZHMsIHRvby4KKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Np
b246ZGF0YVRhc2s6ZGlkUmVjZWl2ZVJlc3BvbnNlOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAg
ICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgVVJMU2Vzc2lvbjpkYXRhVGFzazpkaWRS
ZWNlaXZlRGF0YTpdKToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNl
c3Npb246ZG93bmxvYWRUYXNrOmRpZEZpbmlzaERvd25sb2FkaW5nVG9VUkw6XSk6CisgICAgICAg
ICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBVUkxTZXNzaW9uOmRhdGFUYXNrOmRpZEJlY29t
ZURvd25sb2FkVGFzazpdKToKKyAgICAgICAgQ2FsbCBkaWRDcmVhdGVEZXN0aW5hdGlvbiBub3cs
IHdoaWNoIGlzIGFmdGVyIHRoZSBmaWxlIGhhcyBiZWVuIG9wZW5lZCBvbiB0aGUgZGlzay4KKyAg
ICAgICAgQSBEb3dubG9hZFByb3h5OjpEaWRTdGFydCBtZXNzYWdlIGlzIG5vdyBzZW50IGZyb20g
TmV0d29ya1Byb2Nlc3M6OmZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbiBiZWZvcmUKKyAgICAg
ICAgd2UgYXNrIHRoZSBVSVByb2Nlc3Mgd2hlcmUgdGhlIGRvd25sb2FkIHNob3VsZCBlbmQgdXAg
b24gZGlzay4KKyAgICAgICAgTnVsbCBjaGVjayB0aGUgTmV0d29ya0RhdGFUYXNrJ3MgY2xpZW50
IGJlZm9yZSB1c2luZyBpdCBiZWNhdXNlIGl0IGlzIG5vdyBhIHBvaW50ZXIgdGhhdCBjb3VsZCBi
ZSBudWxsLiAKKyAgICAgICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZFByb3h5OjpzaG91bGREZWNvZGVTb3VyY2VEYXRh
T2ZNSU1FVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRlY2lkZURlc3Rp
bmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpEb3du
bG9hZFByb3h5OjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAg
ICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OmRpZENyZWF0ZURlc3RpbmF0aW9uKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgIEltcGxl
bWVudCBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jIGluIHRoZSBV
SVByb2Nlc3MuCisKIDIwMTYtMDItMjMgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAK
ICAgICAgICAgQ29ubmVjdCBXZWJBdXRvbWF0aW9uU2Vzc2lvbiB0byBpdHMgYmFja2VuZCBkaXNw
YXRjaGVyIGFzIGlmIGl0IHdlcmUgYW4gYWdlbnQgYW5kIGFkZCBzdHViIGltcGxlbWVudGF0aW9u
cwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFU
YXNrLmgJKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtEYXRhVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIE5ldHdvcmtEYXRhVGFza19oCiAjZGVmaW5lIE5ldHdvcmtEYXRhVGFza19oCiAKKyNpbmNs
dWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5
cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZVR5cGVzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KQEAgLTQ5LDYgKzUwLDcgQEAgY2xh
c3MgU2hhcmVkQnVmZmVyOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgRG93bmxvYWQ7
CiBjbGFzcyBOZXR3b3JrU2Vzc2lvbjsKIGNsYXNzIFBlbmRpbmdEb3dubG9hZDsKIApAQCAtOTUs
NyArOTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgfk5ldHdvcmtEYXRhVGFzaygpOwogICAgIAot
ICAgIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0K
KyAgICBOZXR3b3JrRGF0YVRhc2tDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9
CisgICAgdm9pZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSBudWxscHRyOyB9CiAgICAgCiAg
ICAgRG93bmxvYWRJRCBwZW5kaW5nRG93bmxvYWRJRCgpIHsgcmV0dXJuIG1fcGVuZGluZ0Rvd25s
b2FkSUQ7IH0KICAgICBQZW5kaW5nRG93bmxvYWQqIHBlbmRpbmdEb3dubG9hZCgpIHsgcmV0dXJu
IG1fcGVuZGluZ0Rvd25sb2FkOyB9CkBAIC0xMTAsOCArMTEzLDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgQVNTRVJUKCFtX3BlbmRpbmdEb3dubG9hZCk7CiAgICAgICAgIG1fcGVuZGluZ0Rvd25sb2Fk
ID0gJnBlbmRpbmdEb3dubG9hZDsKICAgICB9CisgICAgdm9pZCBmaW5kUGVuZGluZ0Rvd25sb2Fk
TG9jYXRpb24oUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBzZXRQZW5kaW5n
RG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmKTsKKyAgICBjb25zdCBTdHJpbmcmIHBlbmRpbmdEb3dubG9hZExvY2F0
aW9uKCkgeyByZXR1cm4gbV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsgfQorICAgIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCBjdXJyZW50UmVxdWVzdCgpOwogICAgIGJvb2wgdHJ5UGFzc3dvcmRC
YXNlZEF1dGhlbnRpY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQ
UmVkaXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYmLCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIHRy
YW5zZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoRG93bmxvYWQmKTsKICAgICAKIHByaXZh
dGU6CiAgICAgTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNr
Q2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRD
bGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKQEAgLTEyNywxNCArMTM1LDE2IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUpOwogICAgIAog
ICAgIE5ldHdvcmtTZXNzaW9uJiBtX3Nlc3Npb247Ci0gICAgTmV0d29ya0RhdGFUYXNrQ2xpZW50
JiBtX2NsaWVudDsKKyAgICBOZXR3b3JrRGF0YVRhc2tDbGllbnQqIG1fY2xpZW50OwogICAgIFBl
bmRpbmdEb3dubG9hZCogbV9wZW5kaW5nRG93bmxvYWQgeyBudWxscHRyIH07CiAgICAgRG93bmxv
YWRJRCBtX3BlbmRpbmdEb3dubG9hZElEOwogICAgIFN0cmluZyBtX3VzZXI7CiAgICAgU3RyaW5n
IG1fcGFzc3dvcmQ7CiAgICAgU3RyaW5nIG1fbGFzdEhUVFBNZXRob2Q7CisgICAgU3RyaW5nIG1f
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb247CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1f
Zmlyc3RSZXF1ZXN0OwogICAgIGJvb2wgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0OworICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBtX3NhbmRib3hFeHRlbnNp
b247CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFU
YXNrPiBtX3Rhc2s7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZC5jcHAJKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiAr
NzEsOCBAQCBOZXR3b3JrTG9hZDo6fk5ldHdvcmtMb2FkKCkKICNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQogICAgIGlmIChtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIG1fcmVz
cG9uc2VDb21wbGV0aW9uSGFuZGxlcihQb2xpY3lJZ25vcmUpOworICAgIGlmIChtX3Rhc2spCisg
ICAgICAgIG1fdGFzay0+Y2xlYXJDbGllbnQoKTsKICNlbmRpZgogICAgIGlmIChtX2hhbmRsZSkK
ICAgICAgICAgbV9oYW5kbGUtPmNsZWFyQ2xpZW50KCk7CkBAIC0xNjMsMTMgKzE2NSwxNCBAQCB2
b2lkIE5ldHdvcmtMb2FkOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0CiAKIHZvaWQgTmV0d29ya0xv
YWQ6OmNvbnZlcnRUYXNrVG9Eb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQpCiB7CisgICAg
aWYgKCFtX3Rhc2spCisgICAgICAgIHJldHVybjsKKwogICAgIG1fdGFzay0+c2V0UGVuZGluZ0Rv
d25sb2FkSUQoZG93bmxvYWRJRCk7CiAgICAgCiAgICAgQVNTRVJUKG1fcmVzcG9uc2VDb21wbGV0
aW9uSGFuZGxlcik7Ci0gICAgaWYgKG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcikgewotICAg
ICAgICBtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIoUG9saWN5RG93bmxvYWQpOwotICAgICAg
ICBtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIgPSBudWxscHRyOwotICAgIH0KKyAgICBpZiAo
bV9yZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICBtX3Rhc2stPmZpbmRQZW5kaW5n
RG93bmxvYWRMb2NhdGlvbihXVEZNb3ZlKG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIE5ldHdvcmtMb2FkOjpzZXRQZW5kaW5nRG93bmxvYWRJRChEb3dubG9hZElEIGRv
d25sb2FkSUQpCkBAIC0yMTgsNyArMjIxLDcgQEAgdm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlTmV0dwogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKG1f
dGFzayAmJiBtX3Rhc2stPnBlbmRpbmdEb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKQotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lEb3dubG9hZCk7CisgICAgICAgIG1fdGFzay0+Zmlu
ZFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBlbHNlIGlm
IChzaGFyZWREaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpID09IE5ldHdvcmtMb2FkQ2xpZW50
OjpTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzKQogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihQb2xpY3lVc2UpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDE5Njc3MikK
KysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFu
YWdlci5oIgogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIK
QEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgogI2luY2x1ZGUg
IlN0YXRpc3RpY3NEYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5oIgorI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRE5T
Lmg+CkBAIC00NjIsNiArNDY0LDIwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvbnRpbnVlV2ls
bFNlbmRSZXEKIHsKICAgICBkb3dubG9hZE1hbmFnZXIoKS5jb250aW51ZVdpbGxTZW5kUmVxdWVz
dChkb3dubG9hZElELCByZXF1ZXN0KTsKIH0KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmluZFBl
bmRpbmdEb3dubG9hZExvY2F0aW9uKE5ldHdvcmtEYXRhVGFzayYgbmV0d29ya0RhdGFUYXNrLCBT
dHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgdWludDY0X3QgZGVzdGluYXRpb25JRCA9IG5ldHdvcmtEYXRh
VGFzay5wZW5kaW5nRG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKTsKKyAgICBkb3dubG9hZFByb3h5
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRTdGFydChuZXR3
b3JrRGF0YVRhc2suY3VycmVudFJlcXVlc3QoKSksIGRlc3RpbmF0aW9uSUQpOworICAgIAorICAg
IGRvd25sb2FkTWFuYWdlcigpLndpbGxEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihu
ZXR3b3JrRGF0YVRhc2ssIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBkb3dubG9hZFByb3h5Q29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEZWNpZGVEZXN0aW5hdGlv
bldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jKG5ldHdvcmtEYXRhVGFzay5wZW5kaW5nRG93bmxv
YWRJRCgpLCBzdWdnZXN0ZWRGaWxlbmFtZSksIGRlc3RpbmF0aW9uSUQpOworfQorICAgIAordm9p
ZCBOZXR3b3JrUHJvY2Vzczo6Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlv
bihEb3dubG9hZElEIGRvd25sb2FkSUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQoreworICAgIGRvd25s
b2FkTWFuYWdlcigpLmNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93
bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOworfQogI2VuZGlm
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldENhY2hlTW9kZWwodWludDMyX3QgY20pCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJl
dmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBEb3dubG9hZElEOwogY2xhc3MgQ2VydGlmaWNhdGVJbmZv
OwogY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CkBA
IC05OSw2ICsxMDAsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJIU1RTQ2FjaGUoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGlt
ZV9wb2ludCBtb2RpZmllZFNpbmNlKTsKICNlbmRpZgogCisjaWYgVVNFKE5FVFdPUktfU0VTU0lP
TikKKyAgICB2b2lkIGZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihOZXR3b3JrRGF0YVRhc2sm
LCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIpOwor
I2VuZGlmCisgICAgCiAgICAgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmKTsKIAogcHJp
dmF0ZToKQEAgLTE1Nyw2ICsxNjIsNyBAQCBwcml2YXRlOgogI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCiAgICAgdm9pZCBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UoRG93bmxvYWRJRCwgYm9vbCBjYW5BdXRoZW50aWNhdGUpOwogICAgIHZvaWQgY29udGludWVX
aWxsU2VuZFJlcXVlc3QoRG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Jik7CisgICAgdm9pZCBjb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKERv
d25sb2FkSUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgogICAgIHZvaWQgc2V0Q2FjaGVN
b2RlbCh1aW50MzJfdCk7CiAgICAgdm9pZCBhbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiwgY29uc3QgU3RyaW5nJiBob3N0
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxOTY3NzIpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtNDcsNiArNDcsNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lS
ZWNlaXZlCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBDb250aW51ZUNhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoV2ViS2l0OjpEb3dubG9hZElEIGRvd25sb2FkSUQs
IGJvb2wgY2FuQXV0aGVudGljYXRlKQogICAgIENvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdlYktp
dDo6RG93bmxvYWRJRCBkb3dubG9hZElELCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVz
dCkKKyAgICBDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKFdlYktpdDo6
RG93bmxvYWRJRCBkb3dubG9hZElELCBTdHJpbmcgZGVzdGluYXRpb24sIFdlYktpdDo6U2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCiAjZW5kaWYKIAogICAg
IFNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoYm9vbCBmbGFnKQpJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCShy
ZXZpc2lvbiAxOTY3NzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMiArNjYsNyBAQCBEb3dubG9h
ZDo6fkRvd25sb2FkKCkKICAgICBtX2Rvd25sb2FkTWFuYWdlci5kaWREZXN0cm95RG93bmxvYWQo
KTsKIH0KIAotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi12b2lkIERvd25sb2FkOjpkaWRTdGFy
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6
RG93bmxvYWRQcm94eTo6RGlkU3RhcnQocmVxdWVzdCkpOwotfQotI2Vsc2UKKyNpZiAhVVNFKE5F
VFdPUktfU0VTU0lPTikKIHZvaWQgRG93bmxvYWQ6OmRpZFN0YXJ0KCkKIHsKICAgICBzZW5kKE1l
c3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRTdGFydChtX3JlcXVlc3QpKTsKQEAgLTEwNCw2ICs5
OSw3IEBAIGJvb2wgRG93bmxvYWQ6OnNob3VsZERlY29kZVNvdXJjZURhdGFPZk0KICAgICByZXR1
cm4gcmVzdWx0OwogfQogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiBTdHJpbmcgRG93bmxv
YWQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlKQogewogICAgIFN0cmluZyBkZXN0aW5hdGlv
bjsKQEAgLTExNyw2ICsxMTMsNyBAQCBTdHJpbmcgRG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0aW9u
V2l0aFN1CiAKICAgICByZXR1cm4gZGVzdGluYXRpb247CiB9CisjZW5kaWYKIAogdm9pZCBEb3du
bG9hZDo6ZGlkQ3JlYXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQogewpJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
LmgJKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw5ICs4Miw3IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIH5Eb3dubG9hZCgpOwogCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikg
JiYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBkYXRhVGFza0RpZEJlY29tZURvd25sb2FkVGFz
ayhjb25zdCBOZXR3b3JrU2Vzc2lvbiYsIFJldGFpblB0cjxOU1VSTFNlc3Npb25Eb3dubG9hZFRh
c2s+JiYpOwotI2Vsc2UKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICB2b2lkIHN0YXJ0
KCk7CiAgICAgdm9pZCBzdGFydFdpdGhIYW5kbGUoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CiAjZW5kaWYKQEAgLTk0LDcgKzkyLDcg
QEAgcHVibGljOgogICAgIERvd25sb2FkSUQgZG93bmxvYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZG93bmxvYWRJRDsgfQogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICB2b2lkIGRpZFN0
YXJ0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgc2V0U2FuZGJv
eEV4dGVuc2lvbihSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4mJiBzYW5kYm94RXh0ZW5zaW9uKSB7
IG1fc2FuZGJveEV4dGVuc2lvbiA9IFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbik7IH0KICNlbHNl
CiAgICAgdm9pZCBkaWRTdGFydCgpOwogICAgIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CkBAIC0x
MDIsNyArMTAwLDkgQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKHVp
bnQ2NF90IGxlbmd0aCk7CiAgICAgYm9vbCBzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKICAg
ICBTdHJpbmcgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgYm9vbCYgYWxsb3dPdmVyd3JpdGUpOworI2VuZGlmCiAgICAgdm9pZCBk
aWRDcmVhdGVEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIHZvaWQgZGlkRmlu
aXNoKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURpZEZpbmlzaCgpOwpJbmRleDogU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFu
YWdlci5jcHAJKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwx
MyArNjUsMTggQEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OnN0YXJ0RG93bmxvYWQoU2VzcwogfQog
CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLXN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRG93bmxv
YWQ+IERvd25sb2FkTWFuYWdlcjo6ZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2soRG93bmxvYWRJ
RCBkb3dubG9hZElELCBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWQ+JiYgZG93bmxvYWQpCitzdGQ6
OnBhaXI8UmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4sIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRG93
bmxvYWQ+PiBEb3dubG9hZE1hbmFnZXI6OmRhdGFUYXNrQmVjYW1lRG93bmxvYWRUYXNrKERvd25s
b2FkSUQgZG93bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkPiYmIGRvd25sb2FkKQog
ewogICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBkb3dubG9hZHMgc3RhcnRlZCB3aXRoIHN0YXJ0
RG93bmxvYWQsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiBudWxscHRyLgogICAgIGF1dG8gcGVu
ZGluZ0Rvd25sb2FkID0gbV9wZW5kaW5nRG93bmxvYWRzLnRha2UoZG93bmxvYWRJRCk7CiAKKyAg
ICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgZG93bmxvYWRzIHN0YXJ0ZWQgd2l0aCBjb252ZXJ0VGFz
a1RvRG93bmxvYWQsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiBudWxscHRyLgorICAgIGF1dG8g
ZG93bmxvYWRBZnRlckxvY2F0aW9uRGVjaWRlZCA9IG1fZG93bmxvYWRzQWZ0ZXJEZXN0aW5hdGlv
bkRlY2lkZWQudGFrZShkb3dubG9hZElEKTsKKyAgICAKKyAgICBBU1NFUlQoISFwZW5kaW5nRG93
bmxvYWQgIT0gISFkb3dubG9hZEFmdGVyTG9jYXRpb25EZWNpZGVkKTsKKyAgICAKICAgICBtX2Rv
d25sb2Fkcy5hZGQoZG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOwotICAgIHJldHVybiBw
ZW5kaW5nRG93bmxvYWQ7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoZG93bmxv
YWRBZnRlckxvY2F0aW9uRGVjaWRlZCksIFdURk1vdmUocGVuZGluZ0Rvd25sb2FkKSk7CiB9CiAg
ICAgCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlKERvd25sb2FkSUQgZG93bmxvYWRJRCwgYm9vbCBjYW5BdXRoZW50aWNh
dGUpCkBAIC04OSw2ICs5NCwyOCBAQCB2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udGludWVXaWxs
U2VuZFJlCiAgICAgaWYgKHBlbmRpbmdEb3dubG9hZCkKICAgICAgICAgcGVuZGluZ0Rvd25sb2Fk
LT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0KTsKIH0KKwordm9pZCBEb3dubG9hZE1h
bmFnZXI6OndpbGxEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihOZXR3b3JrRGF0YVRh
c2smIG5ldHdvcmtEYXRhVGFzaywgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZG93bmxvYWRzV2FpdGluZ0ZvckRl
c3RpbmF0aW9uLnNldChuZXR3b3JrRGF0YVRhc2sucGVuZGluZ0Rvd25sb2FkSUQoKSwgc3RkOjpt
YWtlX3BhaXI8UmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4sIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRs
ZXI+KCZuZXR3b3JrRGF0YVRhc2ssIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CisgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKK30KKwordm9p
ZCBEb3dubG9hZE1hbmFnZXI6OmNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRp
b24oRG93bmxvYWRJRCBkb3dubG9hZElELCBTdHJpbmcgZGVzdGluYXRpb24sIGNvbnN0IFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKK3sKKyAgICBhdXRv
IHBhaXIgPSBtX2Rvd25sb2Fkc1dhaXRpbmdGb3JEZXN0aW5hdGlvbi50YWtlKGRvd25sb2FkSUQp
OworICAgIGF1dG8gbmV0d29ya0RhdGFUYXNrID0gcGFpci5maXJzdDsKKyAgICBhdXRvIGNvbXBs
ZXRpb25IYW5kbGVyID0gcGFpci5zZWNvbmQ7CisgICAgaWYgKCFuZXR3b3JrRGF0YVRhc2sgfHwg
IWNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG5ldHdvcmtEYXRhVGFzay0+c2V0UGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24oZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOworICAgIGNv
bXBsZXRpb25IYW5kbGVyKFBvbGljeURvd25sb2FkKTsKKyAgICAKKyAgICBBU1NFUlQoIW1fZG93
bmxvYWRzQWZ0ZXJEZXN0aW5hdGlvbkRlY2lkZWQuY29udGFpbnMoZG93bmxvYWRJRCkpOworICAg
IG1fZG93bmxvYWRzQWZ0ZXJEZXN0aW5hdGlvbkRlY2lkZWQuc2V0KGRvd25sb2FkSUQsIG5ldHdv
cmtEYXRhVGFzayk7Cit9CiAjZWxzZQogdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnZlcnRIYW5k
bGVUb0Rvd25sb2FkKERvd25sb2FkSUQgZG93bmxvYWRJRCwgUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgJKHJldmlzaW9uIDE5Njc3MikK
KysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFn
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBEb3dubG9hZE1h
bmFnZXJfaAogCiAjaW5jbHVkZSAiRG93bmxvYWRJRC5oIgorI2luY2x1ZGUgIk5ldHdvcmtEYXRh
VGFzay5oIgogI2luY2x1ZGUgIlBlbmRpbmdEb3dubG9hZC5oIgogI2luY2x1ZGUgIlNhbmRib3hF
eHRlbnNpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC03Miw5
ICs3MywxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0YXJ0RG93bmxvYWQoV2ViQ29yZTo6U2Vz
c2lvbklELCBEb3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRG93bmxv
YWQ+IGRhdGFUYXNrQmVjYW1lRG93bmxvYWRUYXNrKERvd25sb2FkSUQsIHN0ZDo6dW5pcXVlX3B0
cjxEb3dubG9hZD4mJik7CisgICAgc3RkOjpwYWlyPFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+LCBz
dGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ0Rvd25sb2FkPj4gZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRh
c2soRG93bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkPiYmKTsKICAgICB2b2lkIGNv
bnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShEb3dubG9hZElELCBi
b29sIGNhbkF1dGhlbnRpY2F0ZSk7CiAgICAgdm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChE
b3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHdp
bGxEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihOZXR3b3JrRGF0YVRhc2smLCBSZXNw
b25zZUNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIGNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rv
d25sb2FkRGVzdGluYXRpb24oRG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0aW9uLCBjb25zdCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICNlbHNlCiAgICAgdm9pZCBjb252ZXJ0SGFuZGxl
VG9Eb3dubG9hZChEb3dubG9hZElELCBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
KTsKICNlbmRpZgpAQCAtOTksNiArMTAyLDggQEAgcHJpdmF0ZToKICAgICBDbGllbnQmIG1fY2xp
ZW50OwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBz
dGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ0Rvd25sb2FkPj4gbV9wZW5kaW5nRG93bmxvYWRzOworICAg
IEhhc2hNYXA8RG93bmxvYWRJRCwgc3RkOjpwYWlyPFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+LCBS
ZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyPj4gbV9kb3dubG9hZHNXYWl0aW5nRm9yRGVzdGluYXRp
b247CisgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPj4gbV9k
b3dubG9hZHNBZnRlckRlc3RpbmF0aW9uRGVjaWRlZDsKICNlbmRpZgogICAgIEhhc2hNYXA8RG93
bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkPj4gbV9kb3dubG9hZHM7CiB9OwpJbmRl
eDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCwxNyArMjgsMjUgQEAKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAK
KyNpbXBvcnQgIkRvd25sb2FkLmgiCisjaW1wb3J0ICJEb3dubG9hZFByb3h5TWVzc2FnZXMuaCIK
KyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKICNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ0ZOZXR3b3JrU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVx
dWVzdC5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KIAorQGludGVyZmFjZSBOU1VSTFNl
c3Npb25UYXNrICgpCitAcHJvcGVydHkgKHJlYWR3cml0ZSwgY29weSkgTlNTdHJpbmcgKl9wYXRo
VG9Eb3dubG9hZFRhc2tGaWxlOworQGVuZAorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogTmV0d29y
a0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdv
cmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0b3Jl
ZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVu
dFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCiAg
ICAgOiBtX2ZhaWx1cmVUaW1lcigqdGhpcywgJk5ldHdvcmtEYXRhVGFzazo6ZmFpbHVyZVRpbWVy
RmlyZWQpCiAgICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKLSAgICAsIG1fY2xpZW50KGNsaWVudCkK
KyAgICAsIG1fY2xpZW50KCZjbGllbnQpCiAgICAgLCBtX2xhc3RIVFRQTWV0aG9kKHJlcXVlc3RX
aXRoQ3JlZGVudGlhbHMuaHR0cE1ldGhvZCgpKQogICAgICwgbV9maXJzdFJlcXVlc3QocmVxdWVz
dFdpdGhDcmVkZW50aWFscykKICAgICAsIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdChzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQpAQCAt
MTE2LDcgKzEyNCw4IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjp3aWxsUGVyZm9ybUhUVFBSZWQK
ICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBPcmlnaW4oKTsKICAgICB9CiAgICAgCi0gICAgY2xp
ZW50KCkud2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24ocmVkaXJlY3RSZXNwb25zZSwgcmVxdWVz
dCwgY29tcGxldGlvbkhhbmRsZXIpOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50
KCktPndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKHJlZGlyZWN0UmVzcG9uc2UsIHJlcXVlc3Qs
IGNvbXBsZXRpb25IYW5kbGVyKTsKIH0KICAgICAKIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpzY2hl
ZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUgdHlwZSkKQEAgLTEzMywxMSArMTQyLDEzIEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCgKICAgICBzd2l0Y2ggKG1fc2NoZWR1
bGVkRmFpbHVyZVR5cGUpIHsKICAgICBjYXNlIEJsb2NrZWRGYWlsdXJlOgogICAgICAgICBtX3Nj
aGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOwotICAgICAgICBjbGllbnQoKS53YXNCbG9j
a2VkKCk7CisgICAgICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgICAgIGNsaWVudCgpLT53YXNC
bG9ja2VkKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJlOgog
ICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOwotICAgICAgICBjbGll
bnQoKS5jYW5ub3RTaG93VVJMKCk7CisgICAgICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgICAg
IGNsaWVudCgpLT5jYW5ub3RTaG93VVJMKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIE5v
RmFpbHVyZToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNDYsNiArMTU3LDIy
IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCgKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmZpbmRQZW5kaW5nRG93
bmxvYWRMb2NhdGlvbihSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5maW5kUGVuZGluZ0Rvd25sb2Fk
TG9jYXRpb24oKnRoaXMsIG1fdGFzay5nZXQoKS5yZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZSwg
Y29tcGxldGlvbkhhbmRsZXIpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2V0UGVuZGlu
Z0Rvd25sb2FkTG9jYXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCit7CisgICAgQVNT
RVJUKCFtX3NhbmRib3hFeHRlbnNpb24pOworICAgIG1fc2FuZGJveEV4dGVuc2lvbiA9IFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZShzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBpZiAobV9z
YW5kYm94RXh0ZW5zaW9uKQorICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24tPmNvbnN1bWUoKTsK
KworICAgIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsKKyAgICBtX3Rhc2su
Z2V0KCkuX3BhdGhUb0Rvd25sb2FkVGFza0ZpbGUgPSBmaWxlbmFtZTsKK30KKwogYm9vbCBOZXR3
b3JrRGF0YVRhc2s6OnRyeVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDaGFsbGVuZ2VDb21wbGV0aW9u
SGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWNoYWxsZW5nZS5wcm90ZWN0
aW9uU3BhY2UoKS5pc1Bhc3N3b3JkQmFzZWQoKSkKQEAgLTE2Niw2ICsxOTMsMTYgQEAgYm9vbCBO
ZXR3b3JrRGF0YVRhc2s6OnRyeVBhc3N3b3JkQmFzZWRBdQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxv
YWQoRG93bmxvYWQmIGRvd25sb2FkKQoreworICAgIGRvd25sb2FkLnNldFNhbmRib3hFeHRlbnNp
b24oV1RGTW92ZShtX3NhbmRib3hFeHRlbnNpb24pKTsKK30KKworV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0IE5ldHdvcmtEYXRhVGFzazo6Y3VycmVudFJlcXVlc3QoKQoreworICAgIHJldHVybiBb
bV90YXNrIGN1cnJlbnRSZXF1ZXN0XTsKK30KKwogdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNhbmNl
bCgpCiB7CiAgICAgW21fdGFzayBjYW5jZWxdOwpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCShy
ZXZpc2lvbiAxOTY3NzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrU2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIAogI2ltcG9ydCAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
LmgiCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0ICJEb3dubG9hZC5oIgogI2lt
cG9ydCAiTmV0d29ya0xvYWQuaCIKICNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzLmgiCkBAIC05Nyw4
ICs5OCwxMCBAQCAtIChpZClpbml0V2l0aE5ldHdvcmtTZXNzaW9uOihXZWJLaXQ6Ok5lCiAKIC0g
KHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiB0YXNrOihOU1VSTFNlc3Np
b25UYXNrICopdGFzayBkaWRTZW5kQm9keURhdGE6KGludDY0X3QpYnl0ZXNTZW50IHRvdGFsQnl0
ZXNTZW50OihpbnQ2NF90KXRvdGFsQnl0ZXNTZW50IHRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZDoo
aW50NjRfdCl0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQKIHsKLSAgICBpZiAoYXV0byogbmV0d29y
a0RhdGFUYXNrID0gX3Nlc3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRhc2tJZGVu
dGlmaWVyKSkKLSAgICAgICAgbmV0d29ya0RhdGFUYXNrLT5jbGllbnQoKS5kaWRTZW5kRGF0YSh0
b3RhbEJ5dGVzU2VudCwgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKTsKKyAgICBpZiAoYXV0byog
bmV0d29ya0RhdGFUYXNrID0gX3Nlc3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcih0YXNrLnRh
c2tJZGVudGlmaWVyKSkgeworICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbmV0d29ya0RhdGFU
YXNrLT5jbGllbnQoKSkKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkU2VuZERhdGEodG90YWxCeXRl
c1NlbnQsIHRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZCk7CisgICAgfQogfQogCiAtICh2b2lkKVVS
TFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAq
KXRhc2sgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb246KE5TSFRUUFVSTFJlc3BvbnNlICopcmVz
cG9uc2UgbmV3UmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoTlNVUkxSZXF1ZXN0ICopKWNvbXBsZXRpb25IYW5kbGVyCkBAIC0xMjUsMTQg
KzEyOCwyMCBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAgICAg
ICAgIGlmIChuZXR3b3JrRGF0YVRhc2stPnRyeVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbihj
aGFsbGVuZ2UsIGNoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCi0gICAgICAgIG5ldHdvcmtEYXRhVGFzay0+Y2xpZW50KCkuZGlkUmVjZWl2
ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIGNoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICAg
ICAgaWYgKGF1dG8qIGNsaWVudCA9IG5ldHdvcmtEYXRhVGFzay0+Y2xpZW50KCkpCisgICAgICAg
ICAgICBjbGllbnQtPmRpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCBjaGFsbGVuZ2VDb21w
bGV0aW9uSGFuZGxlcik7CiAgICAgfQogfQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vz
c2lvbiAqKXNlc3Npb24gdGFzazooTlNVUkxTZXNzaW9uVGFzayAqKXRhc2sgZGlkQ29tcGxldGVX
aXRoRXJyb3I6KE5TRXJyb3IgKillcnJvcgogewotICAgIGlmIChhdXRvKiBuZXR3b3JrRGF0YVRh
c2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlmaWVyKHRhc2sudGFza0lkZW50aWZpZXIp
KQotICAgICAgICBuZXR3b3JrRGF0YVRhc2stPmNsaWVudCgpLmRpZENvbXBsZXRlV2l0aEVycm9y
KGVycm9yKTsKKyAgICBpZiAoYXV0byogbmV0d29ya0RhdGFUYXNrID0gX3Nlc3Npb24tPmRhdGFU
YXNrRm9ySWRlbnRpZmllcih0YXNrLnRhc2tJZGVudGlmaWVyKSkgeworICAgICAgICBpZiAoYXV0
byogY2xpZW50ID0gbmV0d29ya0RhdGFUYXNrLT5jbGllbnQoKSkKKyAgICAgICAgICAgIGNsaWVu
dC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworICAgIH0gZWxzZSBpZiAoYXV0byogZG93
bmxvYWQgPSBXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1hbmFn
ZXIoKS5kb3dubG9hZChfc2Vzc2lvbi0+ZG93bmxvYWRJRCh0YXNrLnRhc2tJZGVudGlmaWVyKSkp
IHsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwoZXJy
b3IsIHsgfSk7IC8vIEZJWE1FOiBHaXZlIHNvbWUgYWN0dWFsIGRhdGEgaGVyZSBmb3IgcmVzdW1p
bmcuCisgICAgfQogfQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Np
b24gZGF0YVRhc2s6KE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2sgZGlkUmVjZWl2ZVJl
c3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2UgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKE5TVVJMU2Vzc2lvblJlc3BvbnNlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pKWNvbXBsZXRp
b25IYW5kbGVyCkBAIC0xNDIsMjMgKzE1MSwyNiBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJM
U2Vzc2lvbiAqKXNlc3NpCiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzb3Vy
Y2VSZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgIGNvcHlUaW1pbmdEYXRhKFtkYXRhVGFzayBf
dGltaW5nRGF0YV0sIHJlc291cmNlUmVzcG9uc2UucmVzb3VyY2VMb2FkVGltaW5nKCkpOwogICAg
ICAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IEJsb2NrX2NvcHkoY29tcGxldGlvbkhh
bmRsZXIpOwotICAgICAgICBuZXR3b3JrRGF0YVRhc2stPmNsaWVudCgpLmRpZFJlY2VpdmVSZXNw
b25zZU5ldHdvcmtTZXNzaW9uKHJlc291cmNlUmVzcG9uc2UsIFtjb21wbGV0aW9uSGFuZGxlckNv
cHldKFdlYkNvcmU6OlBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24pIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyQ29weSh0b05TVVJMU2Vzc2lvblJlc3BvbnNlRGlzcG9zaXRpb24ocG9s
aWN5QWN0aW9uKSk7Ci0gICAgICAgICAgICBCbG9ja19yZWxlYXNlKGNvbXBsZXRpb25IYW5kbGVy
Q29weSk7Ci0gICAgICAgIH0pOworICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbmV0d29ya0Rh
dGFUYXNrLT5jbGllbnQoKSkgeworICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9u
c2VOZXR3b3JrU2Vzc2lvbihyZXNvdXJjZVJlc3BvbnNlLCBbY29tcGxldGlvbkhhbmRsZXJDb3B5
LCByZXNvdXJjZVJlc3BvbnNlXShXZWJDb3JlOjpQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uKSB7
CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJDb3B5KHRvTlNVUkxTZXNzaW9uUmVz
cG9uc2VEaXNwb3NpdGlvbihwb2xpY3lBY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBCbG9ja19y
ZWxlYXNlKGNvbXBsZXRpb25IYW5kbGVyQ29weSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQogICAgIH0KIH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9u
IGRhdGFUYXNrOihOU1VSTFNlc3Npb25EYXRhVGFzayAqKWRhdGFUYXNrIGRpZFJlY2VpdmVEYXRh
OihOU0RhdGEgKilkYXRhCiB7Ci0gICAgaWYgKGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IF9zZXNz
aW9uLT5kYXRhVGFza0ZvcklkZW50aWZpZXIoZGF0YVRhc2sudGFza0lkZW50aWZpZXIpKQotICAg
ICAgICBuZXR3b3JrRGF0YVRhc2stPmNsaWVudCgpLmRpZFJlY2VpdmVEYXRhKFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShkYXRhKSk7CisgICAgaWYgKGF1dG8qIG5ldHdvcmtEYXRh
VGFzayA9IF9zZXNzaW9uLT5kYXRhVGFza0ZvcklkZW50aWZpZXIoZGF0YVRhc2sudGFza0lkZW50
aWZpZXIpKSB7CisgICAgICAgIGlmIChhdXRvKiBjbGllbnQgPSBuZXR3b3JrRGF0YVRhc2stPmNs
aWVudCgpKQorICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI6OndyYXBOU0RhdGEoZGF0YSkpOworICAgIH0KIH0KIAogLSAodm9pZClVUkxTZXNz
aW9uOihOU1VSTFNlc3Npb24gKilzZXNzaW9uIGRvd25sb2FkVGFzazooTlNVUkxTZXNzaW9uRG93
bmxvYWRUYXNrICopZG93bmxvYWRUYXNrIGRpZEZpbmlzaERvd25sb2FkaW5nVG9VUkw6KE5TVVJM
ICopbG9jYXRpb24KIHsKICAgICBhdXRvIGRvd25sb2FkSUQgPSBfc2Vzc2lvbi0+dGFrZURvd25s
b2FkSUQoW2Rvd25sb2FkVGFzayB0YXNrSWRlbnRpZmllcl0pOwotICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgaWYgKGF1dG8qIGRvd25sb2FkID0gV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQoZG93bmxvYWRJRCkpCiAgICAgICAg
IGRvd25sb2FkLT5kaWRGaW5pc2goKTsKIH0KQEAgLTE4MywxMSArMTk1LDE0IEBAIC0gKHZvaWQp
VVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2kKICAgICAgICAgYXV0byBkb3dubG9hZElE
ID0gbmV0d29ya0RhdGFUYXNrLT5wZW5kaW5nRG93bmxvYWRJRCgpOwogICAgICAgICBhdXRvJiBk
b3dubG9hZE1hbmFnZXIgPSBXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3du
bG9hZE1hbmFnZXIoKTsKICAgICAgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8
V2ViS2l0OjpEb3dubG9hZD4oZG93bmxvYWRNYW5hZ2VyLCBkb3dubG9hZElEKTsKLSAgICAgICAg
ZG93bmxvYWQtPmRpZFN0YXJ0KFtkb3dubG9hZFRhc2sgY3VycmVudFJlcXVlc3RdKTsKKyAgICAg
ICAgbmV0d29ya0RhdGFUYXNrLT50cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKCpk
b3dubG9hZCk7CisgICAgICAgIEFTU0VSVChXZWJDb3JlOjpmaWxlRXhpc3RzKG5ldHdvcmtEYXRh
VGFzay0+cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSkpOworICAgICAgICBkb3dubG9hZC0+ZGlk
Q3JlYXRlRGVzdGluYXRpb24obmV0d29ya0RhdGFUYXNrLT5wZW5kaW5nRG93bmxvYWRMb2NhdGlv
bigpKTsKICAgICAgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVSZXNwb25zZShbZG93bmxvYWRUYXNr
IHJlc3BvbnNlXSk7CiAgICAgICAgIGF1dG8gcGVuZGluZ0Rvd25sb2FkID0gZG93bmxvYWRNYW5h
Z2VyLmRhdGFUYXNrQmVjYW1lRG93bmxvYWRUYXNrKGRvd25sb2FkSUQsIFdURk1vdmUoZG93bmxv
YWQpKTsKLQotICAgICAgICBuZXR3b3JrRGF0YVRhc2stPmNsaWVudCgpLmRpZEJlY29tZURvd25s
b2FkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoYXV0byogY2xpZW50ID0gbmV0d29ya0RhdGFU
YXNrLT5jbGllbnQoKSkKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkQmVjb21lRG93bmxvYWQoKTsK
IAogICAgICAgICBfc2Vzc2lvbi0+YWRkRG93bmxvYWRJRChbZG93bmxvYWRUYXNrIHRhc2tJZGVu
dGlmaWVyXSwgZG93bmxvYWRJRCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCShyZXZpc2lvbiAxOTY3
NzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vz
c01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlICJXZWJQ
cm90ZWN0aW9uU3BhY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTE3MCw2ICsxNzEsMjQgQEAgdm9pZCBEb3dubG9hZFByb3h5OjpzaG91bGREZWNvZGVT
b3VyY2VEYQogICAgIHJlc3VsdCA9IG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuc2hv
dWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUobV9wcm9jZXNzUG9vbC5nZXQoKSwgdGhpcywg
bWltZVR5cGUpOwogfQogCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKK3ZvaWQgRG93bmxvYWRQ
cm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhEb3dubG9h
ZElEIGRvd25sb2FkSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCit7CisgICAg
Ym9vbCBhbGxvd092ZXJ3cml0ZSA9IGZhbHNlOworICAgIAorICAgIGlmICghbV9wcm9jZXNzUG9v
bCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cmluZyBkZXN0aW5hdGlvbiA9IG1fcHJv
Y2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVk
RmlsZW5hbWUobV9wcm9jZXNzUG9vbC5nZXQoKSwgdGhpcywgc3VnZ2VzdGVkRmlsZW5hbWUsIGFs
bG93T3ZlcndyaXRlKTsKKyAgICAKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQorICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZGVzdGluYXRpb24sIFNhbmRib3hFeHRl
bnNpb246OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CisgICAgCisgICAgaWYg
KE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+bmV0
d29ya1Byb2Nlc3MoKSkKKyAgICAgICAgbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2Fk
RGVzdGluYXRpb24oZG93bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpLCAwKTsKK30KKyNlbHNlCiB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9u
V2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIFN0cmluZyYgZGVz
dGluYXRpb24sIGJvb2wmIGFsbG93T3ZlcndyaXRlLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCiB7CiAgICAgYWxsb3dPdmVyd3JpdGUgPSBmYWxzZTsK
QEAgLTE4Miw2ICsyMDEsNyBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRlY2lkZURlc3RpbmF0aW9u
V2l0CiAgICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKICAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlKGRlc3RpbmF0aW9uLCBTYW5kYm94RXh0ZW5zaW9uOjpSZWFkV3Jp
dGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogfQorI2VuZGlmCiAKIHZvaWQgRG93bmxvYWRQ
cm94eTo6ZGlkQ3JlYXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQogewpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5
LmgJKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIGNsYXNz
IFJlc291cmNlUmVzcG9uc2U7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBEb3dubG9h
ZElEOwogY2xhc3MgRG93bmxvYWRQcm94eU1hcDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNz
IFdlYlByb2Nlc3NQb29sOwpAQCAtODEsNyArODIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2
b2lkIGRpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IGxlbmd0aCk7CiAgICAgdm9pZCBzaG91bGREZWNv
ZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sJiByZXN1
bHQpOworI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZvaWQgZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgU3RyaW5nJiBk
ZXN0aW5hdGlvbiwgYm9vbCYgYWxsb3dPdmVyd3JpdGUsIFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CisjZW5kaWYKICAgICB2b2lkIGRpZENyZWF0ZURl
c3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAgICAgdm9pZCBkaWRGaW5pc2goKTsKICAg
ICB2b2lkIGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0YSk7CkBAIC04OSw2ICs5Miw3IEBAIHByaXZhdGU6CiAj
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICB2b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UoY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJik7CiAgICAgdm9p
ZCB3aWxsU2VuZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZWRpcmVj
dFJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UpOworICAgIHZvaWQgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3lu
YyhEb3dubG9hZElELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKTsKICNlbmRpZgog
CiAgICAgRG93bmxvYWRQcm94eU1hcCYgbV9kb3dubG9hZFByb3h5TWFwOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTk2NzcyKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwxMiArMjYsMTUgQEAgbWVzc2FnZXMgLT4gRG93bmxvYWRQcm94eSB7CiAjaWYgVVNF
KE5FVFdPUktfU0VTU0lPTikKICAgICBXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0IHJlZGlyZWN0UmVxdWVzdCwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZWRpcmVj
dFJlc3BvbnNlKSk7CiAgICAgQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShX
ZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlKQorICAgIERlY2lkZURlc3Rp
bmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQXN5bmMoV2ViS2l0OjpEb3dubG9hZElEIGRvd25s
b2FkSUQsIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSkKICNlbmRpZgogCiAgICAgRGlkUmVjZWl2
ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UpCiAgICAgRGlkUmVj
ZWl2ZURhdGEodWludDY0X3QgbGVuZ3RoKQogICAgIFNob3VsZERlY29kZVNvdXJjZURhdGFPZk1J
TUVUeXBlKFN0cmluZyBtaW1lVHlwZSkgLT4gKGJvb2wgcmVzdWx0KQorI2lmICFVU0UoTkVUV09S
S19TRVNTSU9OKQogICAgIERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFN0
cmluZyBmaWxlbmFtZSkgLT4gKFN0cmluZyBkZXN0aW5hdGlvbiwgYm9vbCBhbGxvd092ZXJ3cml0
ZSwgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSkKKyNlbmRpZgogICAgIERpZENyZWF0ZURlc3RpbmF0aW9uKFN0cmluZyBwYXRoKQogICAgIERp
ZEZpbmlzaCgpCiAgICAgRGlkRmFpbChXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCBJUEM6
OkRhdGFSZWZlcmVuY2UgcmVzdW1lRGF0YSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272034</attachid>
            <date>2016-02-23 11:01:03 -0800</date>
            <delta_ts>2016-02-23 11:10:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154473-20160223110045.patch</filename>
            <type>text/plain</type>
            <size>36125</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Njk4MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxNi0wMi0yMyAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEltcGxlbWVu
dCBkb3dubG9hZHMgd2l0aCBOZXR3b3JrU2Vzc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6fkRvd25sb2FkKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWQ6OmRpZFN0YXJ0KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6
OnNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlKToKKyAgICAgICAgKFdlYktpdDo6RG93
bmxvYWQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWQ6OmRpZENyZWF0ZURlc3RpbmF0aW9uKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxv
YWQ6OmRvd25sb2FkSUQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6c2V0U2FuZGJveEV4
dGVuc2lvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6c3RhcnREb3dubG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6ZGF0YVRhc2tCZWNhbWVEb3du
bG9hZFRhc2spOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZE1hbmFnZXI6OmNvbnRpbnVlQ2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkTWFuYWdlcjo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0
OjpEb3dubG9hZE1hbmFnZXI6OndpbGxEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6Y29udGludWVEZWNpZGVQZW5kaW5n
RG93bmxvYWREZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkTWFuYWdlcjo6
Y29udmVydEhhbmRsZVRvRG93bmxvYWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hbmFnZXIuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
RGF0YVRhc2suaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpjbGVhckNsaWVu
dCk6CisKKyAgICAgICAgTmV0d29ya0RhdGFUYXNrcyBjYW4gbm93IG91dGxpdmUgdGhlaXIgY2xp
ZW50LCBzbyB3ZSBuZWVkIHRvIG1ha2UgY2xpZW50IGEgcG9pbnRlcgorICAgICAgICB3aXRoIHRo
ZSBhYmlsaXR5IHRvIGJlIG51bGxlZCBmcm9tIHRoZSBjbGllbnQncyBkZXN0cnVjdG9yLgorCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVuZGluZ0Rvd25sb2FkSUQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnBlbmRpbmdEb3dubG9hZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rvd25sb2FkKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpwZW5kaW5nRG93bmxvYWRMb2NhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtMb2FkOjp+TmV0d29ya0xvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6Y29u
dmVydFRhc2tUb0Rvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OnNldFBl
bmRpbmdEb3dubG9hZElEKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmRpZFJlY2Vp
dmVSZXNwb25zZU5ldHdvcmtTZXNzaW9uKToKKworICAgICAgICBEb24ndCBjYWxsIHRoZSBkaWRS
ZWNlaXZlUmVzcG9uc2UgY29tcGxldGlvbiBoYW5kbGVyIGltbWVkaWF0ZWx5IHdoZW4gd2Uga25v
dyB3ZSBhcmUKKyAgICAgICAgZ29pbmcgdG8gdHVybiB0aGUgbG9hZCBpbnRvIGEgZG93bmxvYWQu
ICBJbnN0ZWFkLCBzYXZlIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIgdW50aWwKKyAgICAgICAgYWZ0
ZXIgd2UgaGF2ZSBkZXRlcm1pbmVkIHRoZSBkb3dubG9hZCBkZXN0aW5hdGlvbiBhbmQgc2V0IGl0
IGluIHRoZSBOZXR3b3JrRGF0YVRhc2suCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpjb250aW51
ZVdpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpmaW5k
UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpzZXRDYWNoZU1vZGVsKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtEYXRhVGFza0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6
Ok5ldHdvcmtEYXRhVGFzayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6fk5l
dHdvcmtEYXRhVGFzayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlkU2Vu
ZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVDaGFs
bGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZENvbXBsZXRlV2l0
aEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVEYXRh
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRCZWNvbWVEb3dubG9hZCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6d2lsbFBlcmZvcm1IVFRQUmVkaXJl
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNjaGVkdWxlRmFpbHVy
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZmFpbHVyZVRpbWVyRmlyZWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmZpbmRQZW5kaW5nRG93bmxvYWRM
b2NhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rv
d25sb2FkTG9jYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnRyeVBh
c3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFzazo6dHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y3VycmVudFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6OmNhbmNlbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVn
YXRlIFVSTFNlc3Npb246dGFzazpkaWRTZW5kQm9keURhdGE6dG90YWxCeXRlc1NlbnQ6dG90YWxC
eXRlc0V4cGVjdGVkVG9TZW5kOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGUgVVJMU2Vzc2lvbjp0YXNrOndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uOm5ld1JlcXVlc3Q6
Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0
ZSBVUkxTZXNzaW9uOnRhc2s6ZGlkUmVjZWl2ZUNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjpd
KToKKyAgICAgICAgKC1bV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246dGFzazpk
aWRDb21wbGV0ZVdpdGhFcnJvcjpdKToKKyAgICAgICAgCisgICAgICAgIFRoaXMgZGVsZWdhdGUg
Y2FsbGJhY2sgaXMgdXNlZCBmb3IgZG93bmxvYWRzLCB0b28uCisKKyAgICAgICAgKC1bV0tOZXR3
b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZGF0YVRhc2s6ZGlkUmVjZWl2ZVJlc3BvbnNl
OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGUgVVJMU2Vzc2lvbjpkYXRhVGFzazpkaWRSZWNlaXZlRGF0YTpdKToKKyAgICAgICAgKC1bV0tO
ZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIFVSTFNlc3Npb246ZG93bmxvYWRUYXNrOmRpZEZpbmlzaERv
d25sb2FkaW5nVG9VUkw6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBV
UkxTZXNzaW9uOmRhdGFUYXNrOmRpZEJlY29tZURvd25sb2FkVGFzazpdKToKKyAgICAgICAgCisg
ICAgICAgIENhbGwgZGlkQ3JlYXRlRGVzdGluYXRpb24gbm93LCB3aGljaCBpcyBhZnRlciB0aGUg
ZmlsZSBoYXMgYmVlbiBvcGVuZWQgb24gdGhlIGRpc2suCisgICAgICAgIEEgRG93bmxvYWRQcm94
eTo6RGlkU3RhcnQgbWVzc2FnZSBpcyBub3cgc2VudCBmcm9tIE5ldHdvcmtQcm9jZXNzOjpmaW5k
UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gYmVmb3JlCisgICAgICAgIHdlIGFzayB0aGUgVUlQcm9j
ZXNzIHdoZXJlIHRoZSBkb3dubG9hZCBzaG91bGQgZW5kIHVwIG9uIGRpc2suCisgICAgICAgIE51
bGwgY2hlY2sgdGhlIE5ldHdvcmtEYXRhVGFzaydzIGNsaWVudCBiZWZvcmUgdXNpbmcgaXQgYmVj
YXVzZSBpdCBpcyBub3cgYSBwb2ludGVyIHRoYXQgY291bGQgYmUgbnVsbC4gCisgICAgICAgIAor
ICAgICAgICAqIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkRvd25sb2FkUHJveHk6OnNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBl
KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRo
U3VnZ2VzdGVkRmlsZW5hbWVBc3luYyk6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkUHJveHk6
OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAgKFdlYktp
dDo6RG93bmxvYWRQcm94eTo6ZGlkQ3JlYXRlRGVzdGluYXRpb24pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Eb3du
bG9hZHMvRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbjoKKwogMjAxNi0wMi0yMyAgQnJpYW4gQnVy
ZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb25uZWN0IFdlYkF1dG9tYXRpb25TZXNz
aW9uIHRvIGl0cyBiYWNrZW5kIGRpc3BhdGNoZXIgYXMgaWYgaXQgd2VyZSBhbiBhZ2VudCBhbmQg
YWRkIHN0dWIgaW1wbGVtZW50YXRpb25zCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrRGF0YVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAkocmV2aXNpb24gMTk2NzcyKQorKysgU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgTmV0d29ya0RhdGFUYXNrX2gKICNkZWZpbmUgTmV0
d29ya0RhdGFUYXNrX2gKIAorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
SGFuZGxlVHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyT3B0aW9ucy5o
PgpAQCAtNDksNiArNTAsNyBAQCBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCitjbGFzcyBEb3dubG9hZDsKIGNsYXNzIE5ldHdvcmtTZXNzaW9uOwogY2xhc3MgUGVu
ZGluZ0Rvd25sb2FkOwogCkBAIC05NSw3ICs5NywxNCBAQCBwdWJsaWM6CiAgICAgCiAgICAgfk5l
dHdvcmtEYXRhVGFzaygpOwogICAgIAotICAgIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50
KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICB2b2lkIGRpZFNlbmREYXRhKHVpbnQ2NF90IHRv
dGFsQnl0ZXNTZW50LCB1aW50NjRfdCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQpOworICAgIHZv
aWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIGRpZENvbXBsZXRl
V2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgUmVzcG9uc2VD
b21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShSZWZQdHI8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPiYmKTsKKyAgICB2b2lkIGRpZEJlY29tZURvd25sb2FkKCk7CisgICAg
CisgICAgdm9pZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSBudWxscHRyOyB9CiAgICAgCiAg
ICAgRG93bmxvYWRJRCBwZW5kaW5nRG93bmxvYWRJRCgpIHsgcmV0dXJuIG1fcGVuZGluZ0Rvd25s
b2FkSUQ7IH0KICAgICBQZW5kaW5nRG93bmxvYWQqIHBlbmRpbmdEb3dubG9hZCgpIHsgcmV0dXJu
IG1fcGVuZGluZ0Rvd25sb2FkOyB9CkBAIC0xMTAsOCArMTE5LDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgQVNTRVJUKCFtX3BlbmRpbmdEb3dubG9hZCk7CiAgICAgICAgIG1fcGVuZGluZ0Rvd25sb2Fk
ID0gJnBlbmRpbmdEb3dubG9hZDsKICAgICB9CisgICAgdm9pZCBmaW5kUGVuZGluZ0Rvd25sb2Fk
TG9jYXRpb24oUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBzZXRQZW5kaW5n
RG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmKTsKKyAgICBjb25zdCBTdHJpbmcmIHBlbmRpbmdEb3dubG9hZExvY2F0
aW9uKCkgeyByZXR1cm4gbV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsgfQorICAgIFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCBjdXJyZW50UmVxdWVzdCgpOwogICAgIGJvb2wgdHJ5UGFzc3dvcmRC
YXNlZEF1dGhlbnRpY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQ
UmVkaXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYmLCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIHRy
YW5zZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoRG93bmxvYWQmKTsKICAgICAKIHByaXZh
dGU6CiAgICAgTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNr
Q2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRD
bGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKQEAgLTEyNywxNCArMTQxLDE2IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUpOwogICAgIAog
ICAgIE5ldHdvcmtTZXNzaW9uJiBtX3Nlc3Npb247Ci0gICAgTmV0d29ya0RhdGFUYXNrQ2xpZW50
JiBtX2NsaWVudDsKKyAgICBOZXR3b3JrRGF0YVRhc2tDbGllbnQqIG1fY2xpZW50OwogICAgIFBl
bmRpbmdEb3dubG9hZCogbV9wZW5kaW5nRG93bmxvYWQgeyBudWxscHRyIH07CiAgICAgRG93bmxv
YWRJRCBtX3BlbmRpbmdEb3dubG9hZElEOwogICAgIFN0cmluZyBtX3VzZXI7CiAgICAgU3RyaW5n
IG1fcGFzc3dvcmQ7CiAgICAgU3RyaW5nIG1fbGFzdEhUVFBNZXRob2Q7CisgICAgU3RyaW5nIG1f
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb247CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1f
Zmlyc3RSZXF1ZXN0OwogICAgIGJvb2wgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0OworICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBtX3NhbmRib3hFeHRlbnNp
b247CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFU
YXNrPiBtX3Rhc2s7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZC5jcHAJKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiAr
NzEsOCBAQCBOZXR3b3JrTG9hZDo6fk5ldHdvcmtMb2FkKCkKICNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQogICAgIGlmIChtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIG1fcmVz
cG9uc2VDb21wbGV0aW9uSGFuZGxlcihQb2xpY3lJZ25vcmUpOworICAgIGlmIChtX3Rhc2spCisg
ICAgICAgIG1fdGFzay0+Y2xlYXJDbGllbnQoKTsKICNlbmRpZgogICAgIGlmIChtX2hhbmRsZSkK
ICAgICAgICAgbV9oYW5kbGUtPmNsZWFyQ2xpZW50KCk7CkBAIC0xNjMsMTMgKzE2NSwxNCBAQCB2
b2lkIE5ldHdvcmtMb2FkOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0CiAKIHZvaWQgTmV0d29ya0xv
YWQ6OmNvbnZlcnRUYXNrVG9Eb3dubG9hZChEb3dubG9hZElEIGRvd25sb2FkSUQpCiB7CisgICAg
aWYgKCFtX3Rhc2spCisgICAgICAgIHJldHVybjsKKwogICAgIG1fdGFzay0+c2V0UGVuZGluZ0Rv
d25sb2FkSUQoZG93bmxvYWRJRCk7CiAgICAgCiAgICAgQVNTRVJUKG1fcmVzcG9uc2VDb21wbGV0
aW9uSGFuZGxlcik7Ci0gICAgaWYgKG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcikgewotICAg
ICAgICBtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIoUG9saWN5RG93bmxvYWQpOwotICAgICAg
ICBtX3Jlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIgPSBudWxscHRyOwotICAgIH0KKyAgICBpZiAo
bV9yZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICBtX3Rhc2stPmZpbmRQZW5kaW5n
RG93bmxvYWRMb2NhdGlvbihXVEZNb3ZlKG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIE5ldHdvcmtMb2FkOjpzZXRQZW5kaW5nRG93bmxvYWRJRChEb3dubG9hZElEIGRv
d25sb2FkSUQpCkBAIC0yMTgsNyArMjIxLDcgQEAgdm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlTmV0dwogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKG1f
dGFzayAmJiBtX3Rhc2stPnBlbmRpbmdEb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKQotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lEb3dubG9hZCk7CisgICAgICAgIG1fdGFzay0+Zmlu
ZFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBlbHNlIGlm
IChzaGFyZWREaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpID09IE5ldHdvcmtMb2FkQ2xpZW50
OjpTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzKQogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihQb2xpY3lVc2UpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDE5Njc3MikK
KysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFu
YWdlci5oIgogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIK
QEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgogI2luY2x1ZGUg
IlN0YXRpc3RpY3NEYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5oIgorI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRE5T
Lmg+CkBAIC00NjIsNiArNDY0LDIwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNvbnRpbnVlV2ls
bFNlbmRSZXEKIHsKICAgICBkb3dubG9hZE1hbmFnZXIoKS5jb250aW51ZVdpbGxTZW5kUmVxdWVz
dChkb3dubG9hZElELCByZXF1ZXN0KTsKIH0KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6ZmluZFBl
bmRpbmdEb3dubG9hZExvY2F0aW9uKE5ldHdvcmtEYXRhVGFzayYgbmV0d29ya0RhdGFUYXNrLCBT
dHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgdWludDY0X3QgZGVzdGluYXRpb25JRCA9IG5ldHdvcmtEYXRh
VGFzay5wZW5kaW5nRG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKTsKKyAgICBkb3dubG9hZFByb3h5
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRTdGFydChuZXR3
b3JrRGF0YVRhc2suY3VycmVudFJlcXVlc3QoKSksIGRlc3RpbmF0aW9uSUQpOworICAgIAorICAg
IGRvd25sb2FkTWFuYWdlcigpLndpbGxEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihu
ZXR3b3JrRGF0YVRhc2ssIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBkb3dubG9hZFByb3h5Q29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEZWNpZGVEZXN0aW5hdGlv
bldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFzeW5jKG5ldHdvcmtEYXRhVGFzay5wZW5kaW5nRG93bmxv
YWRJRCgpLCBzdWdnZXN0ZWRGaWxlbmFtZSksIGRlc3RpbmF0aW9uSUQpOworfQorICAgIAordm9p
ZCBOZXR3b3JrUHJvY2Vzczo6Y29udGludWVEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlv
bihEb3dubG9hZElEIGRvd25sb2FkSUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQoreworICAgIGRvd25s
b2FkTWFuYWdlcigpLmNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRpb24oZG93
bmxvYWRJRCwgZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOworfQogI2VuZGlm
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldENhY2hlTW9kZWwodWludDMyX3QgY20pCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJl
dmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBEb3dubG9hZElEOwogY2xhc3MgQ2VydGlmaWNhdGVJbmZv
OwogY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CkBA
IC05OSw2ICsxMDAsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJIU1RTQ2FjaGUoV2ViQ29y
ZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGlt
ZV9wb2ludCBtb2RpZmllZFNpbmNlKTsKICNlbmRpZgogCisjaWYgVVNFKE5FVFdPUktfU0VTU0lP
TikKKyAgICB2b2lkIGZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihOZXR3b3JrRGF0YVRhc2sm
LCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIpOwor
I2VuZGlmCisgICAgCiAgICAgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmKTsKIAogcHJp
dmF0ZToKQEAgLTE1Nyw2ICsxNjIsNyBAQCBwcml2YXRlOgogI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCiAgICAgdm9pZCBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UoRG93bmxvYWRJRCwgYm9vbCBjYW5BdXRoZW50aWNhdGUpOwogICAgIHZvaWQgY29udGludWVX
aWxsU2VuZFJlcXVlc3QoRG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Jik7CisgICAgdm9pZCBjb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKERv
d25sb2FkSUQsIFN0cmluZyBkZXN0aW5hdGlvbiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKICNlbmRpZgogICAgIHZvaWQgc2V0Q2FjaGVN
b2RlbCh1aW50MzJfdCk7CiAgICAgdm9pZCBhbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QoY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiwgY29uc3QgU3RyaW5nJiBob3N0
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxOTY3NzIpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtNDcsNiArNDcsNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lS
ZWNlaXZlCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBDb250aW51ZUNhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoV2ViS2l0OjpEb3dubG9hZElEIGRvd25sb2FkSUQs
IGJvb2wgY2FuQXV0aGVudGljYXRlKQogICAgIENvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdlYktp
dDo6RG93bmxvYWRJRCBkb3dubG9hZElELCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVz
dCkKKyAgICBDb250aW51ZURlY2lkZVBlbmRpbmdEb3dubG9hZERlc3RpbmF0aW9uKFdlYktpdDo6
RG93bmxvYWRJRCBkb3dubG9hZElELCBTdHJpbmcgZGVzdGluYXRpb24sIFdlYktpdDo6U2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCiAjZW5kaWYKIAogICAg
IFNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoYm9vbCBmbGFnKQpJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCShy
ZXZpc2lvbiAxOTY3NzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMiArNjYsNyBAQCBEb3dubG9h
ZDo6fkRvd25sb2FkKCkKICAgICBtX2Rvd25sb2FkTWFuYWdlci5kaWREZXN0cm95RG93bmxvYWQo
KTsKIH0KIAotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi12b2lkIERvd25sb2FkOjpkaWRTdGFy
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6
RG93bmxvYWRQcm94eTo6RGlkU3RhcnQocmVxdWVzdCkpOwotfQotI2Vsc2UKKyNpZiAhVVNFKE5F
VFdPUktfU0VTU0lPTikKIHZvaWQgRG93bmxvYWQ6OmRpZFN0YXJ0KCkKIHsKICAgICBzZW5kKE1l
c3NhZ2VzOjpEb3dubG9hZFByb3h5OjpEaWRTdGFydChtX3JlcXVlc3QpKTsKQEAgLTEwNCw2ICs5
OSw3IEBAIGJvb2wgRG93bmxvYWQ6OnNob3VsZERlY29kZVNvdXJjZURhdGFPZk0KICAgICByZXR1
cm4gcmVzdWx0OwogfQogCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiBTdHJpbmcgRG93bmxv
YWQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlKQogewogICAgIFN0cmluZyBkZXN0aW5hdGlv
bjsKQEAgLTExNyw2ICsxMTMsNyBAQCBTdHJpbmcgRG93bmxvYWQ6OmRlY2lkZURlc3RpbmF0aW9u
V2l0aFN1CiAKICAgICByZXR1cm4gZGVzdGluYXRpb247CiB9CisjZW5kaWYKIAogdm9pZCBEb3du
bG9hZDo6ZGlkQ3JlYXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQogewpJbmRleDog
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
LmgJKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw5ICs4Miw3IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIH5Eb3dubG9hZCgpOwogCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikg
JiYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBkYXRhVGFza0RpZEJlY29tZURvd25sb2FkVGFz
ayhjb25zdCBOZXR3b3JrU2Vzc2lvbiYsIFJldGFpblB0cjxOU1VSTFNlc3Npb25Eb3dubG9hZFRh
c2s+JiYpOwotI2Vsc2UKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICB2b2lkIHN0YXJ0
KCk7CiAgICAgdm9pZCBzdGFydFdpdGhIYW5kbGUoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CiAjZW5kaWYKQEAgLTk0LDcgKzkyLDcg
QEAgcHVibGljOgogICAgIERvd25sb2FkSUQgZG93bmxvYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZG93bmxvYWRJRDsgfQogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICB2b2lkIGRpZFN0
YXJ0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgc2V0U2FuZGJv
eEV4dGVuc2lvbihSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4mJiBzYW5kYm94RXh0ZW5zaW9uKSB7
IG1fc2FuZGJveEV4dGVuc2lvbiA9IFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbik7IH0KICNlbHNl
CiAgICAgdm9pZCBkaWRTdGFydCgpOwogICAgIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CkBAIC0x
MDIsNyArMTAwLDkgQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKHVp
bnQ2NF90IGxlbmd0aCk7CiAgICAgYm9vbCBzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKICAg
ICBTdHJpbmcgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgYm9vbCYgYWxsb3dPdmVyd3JpdGUpOworI2VuZGlmCiAgICAgdm9pZCBk
aWRDcmVhdGVEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIHZvaWQgZGlkRmlu
aXNoKCk7CiAgICAgdm9pZCBwbGF0Zm9ybURpZEZpbmlzaCgpOwpJbmRleDogU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkTWFu
YWdlci5jcHAJKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwx
MyArNjUsMTggQEAgdm9pZCBEb3dubG9hZE1hbmFnZXI6OnN0YXJ0RG93bmxvYWQoU2VzcwogfQog
CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLXN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRG93bmxv
YWQ+IERvd25sb2FkTWFuYWdlcjo6ZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2soRG93bmxvYWRJ
RCBkb3dubG9hZElELCBzdGQ6OnVuaXF1ZV9wdHI8RG93bmxvYWQ+JiYgZG93bmxvYWQpCitzdGQ6
OnBhaXI8UmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4sIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRG93
bmxvYWQ+PiBEb3dubG9hZE1hbmFnZXI6OmRhdGFUYXNrQmVjYW1lRG93bmxvYWRUYXNrKERvd25s
b2FkSUQgZG93bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkPiYmIGRvd25sb2FkKQog
ewogICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBkb3dubG9hZHMgc3RhcnRlZCB3aXRoIHN0YXJ0
RG93bmxvYWQsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiBudWxscHRyLgogICAgIGF1dG8gcGVu
ZGluZ0Rvd25sb2FkID0gbV9wZW5kaW5nRG93bmxvYWRzLnRha2UoZG93bmxvYWRJRCk7CiAKKyAg
ICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgZG93bmxvYWRzIHN0YXJ0ZWQgd2l0aCBjb252ZXJ0VGFz
a1RvRG93bmxvYWQsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiBudWxscHRyLgorICAgIGF1dG8g
ZG93bmxvYWRBZnRlckxvY2F0aW9uRGVjaWRlZCA9IG1fZG93bmxvYWRzQWZ0ZXJEZXN0aW5hdGlv
bkRlY2lkZWQudGFrZShkb3dubG9hZElEKTsKKyAgICAKKyAgICBBU1NFUlQoISFwZW5kaW5nRG93
bmxvYWQgIT0gISFkb3dubG9hZEFmdGVyTG9jYXRpb25EZWNpZGVkKTsKKyAgICAKICAgICBtX2Rv
d25sb2Fkcy5hZGQoZG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOwotICAgIHJldHVybiBw
ZW5kaW5nRG93bmxvYWQ7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoZG93bmxv
YWRBZnRlckxvY2F0aW9uRGVjaWRlZCksIFdURk1vdmUocGVuZGluZ0Rvd25sb2FkKSk7CiB9CiAg
ICAgCiB2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlKERvd25sb2FkSUQgZG93bmxvYWRJRCwgYm9vbCBjYW5BdXRoZW50aWNh
dGUpCkBAIC04OSw2ICs5NCwyOCBAQCB2b2lkIERvd25sb2FkTWFuYWdlcjo6Y29udGludWVXaWxs
U2VuZFJlCiAgICAgaWYgKHBlbmRpbmdEb3dubG9hZCkKICAgICAgICAgcGVuZGluZ0Rvd25sb2Fk
LT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0KTsKIH0KKwordm9pZCBEb3dubG9hZE1h
bmFnZXI6OndpbGxEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihOZXR3b3JrRGF0YVRh
c2smIG5ldHdvcmtEYXRhVGFzaywgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZG93bmxvYWRzV2FpdGluZ0ZvckRl
c3RpbmF0aW9uLnNldChuZXR3b3JrRGF0YVRhc2sucGVuZGluZ0Rvd25sb2FkSUQoKSwgc3RkOjpt
YWtlX3BhaXI8UmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4sIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRs
ZXI+KCZuZXR3b3JrRGF0YVRhc2ssIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CisgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKK30KKwordm9p
ZCBEb3dubG9hZE1hbmFnZXI6OmNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rvd25sb2FkRGVzdGluYXRp
b24oRG93bmxvYWRJRCBkb3dubG9hZElELCBTdHJpbmcgZGVzdGluYXRpb24sIGNvbnN0IFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKK3sKKyAgICBhdXRv
IHBhaXIgPSBtX2Rvd25sb2Fkc1dhaXRpbmdGb3JEZXN0aW5hdGlvbi50YWtlKGRvd25sb2FkSUQp
OworICAgIGF1dG8gbmV0d29ya0RhdGFUYXNrID0gcGFpci5maXJzdDsKKyAgICBhdXRvIGNvbXBs
ZXRpb25IYW5kbGVyID0gcGFpci5zZWNvbmQ7CisgICAgaWYgKCFuZXR3b3JrRGF0YVRhc2sgfHwg
IWNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG5ldHdvcmtEYXRhVGFzay0+c2V0UGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24oZGVzdGluYXRpb24sIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOworICAgIGNv
bXBsZXRpb25IYW5kbGVyKFBvbGljeURvd25sb2FkKTsKKyAgICAKKyAgICBBU1NFUlQoIW1fZG93
bmxvYWRzQWZ0ZXJEZXN0aW5hdGlvbkRlY2lkZWQuY29udGFpbnMoZG93bmxvYWRJRCkpOworICAg
IG1fZG93bmxvYWRzQWZ0ZXJEZXN0aW5hdGlvbkRlY2lkZWQuc2V0KGRvd25sb2FkSUQsIG5ldHdv
cmtEYXRhVGFzayk7Cit9CiAjZWxzZQogdm9pZCBEb3dubG9hZE1hbmFnZXI6OmNvbnZlcnRIYW5k
bGVUb0Rvd25sb2FkKERvd25sb2FkSUQgZG93bmxvYWRJRCwgUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZE1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRNYW5hZ2VyLmgJKHJldmlzaW9uIDE5Njc3MikK
KysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZE1hbmFn
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBEb3dubG9hZE1h
bmFnZXJfaAogCiAjaW5jbHVkZSAiRG93bmxvYWRJRC5oIgorI2luY2x1ZGUgIk5ldHdvcmtEYXRh
VGFzay5oIgogI2luY2x1ZGUgIlBlbmRpbmdEb3dubG9hZC5oIgogI2luY2x1ZGUgIlNhbmRib3hF
eHRlbnNpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC03Miw5
ICs3MywxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0YXJ0RG93bmxvYWQoV2ViQ29yZTo6U2Vz
c2lvbklELCBEb3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxQZW5kaW5nRG93bmxv
YWQ+IGRhdGFUYXNrQmVjYW1lRG93bmxvYWRUYXNrKERvd25sb2FkSUQsIHN0ZDo6dW5pcXVlX3B0
cjxEb3dubG9hZD4mJik7CisgICAgc3RkOjpwYWlyPFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+LCBz
dGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ0Rvd25sb2FkPj4gZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRh
c2soRG93bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkPiYmKTsKICAgICB2b2lkIGNv
bnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShEb3dubG9hZElELCBi
b29sIGNhbkF1dGhlbnRpY2F0ZSk7CiAgICAgdm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChE
b3dubG9hZElELCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHdp
bGxEZWNpZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihOZXR3b3JrRGF0YVRhc2smLCBSZXNw
b25zZUNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIGNvbnRpbnVlRGVjaWRlUGVuZGluZ0Rv
d25sb2FkRGVzdGluYXRpb24oRG93bmxvYWRJRCwgU3RyaW5nIGRlc3RpbmF0aW9uLCBjb25zdCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKICNlbHNlCiAgICAgdm9pZCBjb252ZXJ0SGFuZGxl
VG9Eb3dubG9hZChEb3dubG9hZElELCBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
KTsKICNlbmRpZgpAQCAtOTksNiArMTAyLDggQEAgcHJpdmF0ZToKICAgICBDbGllbnQmIG1fY2xp
ZW50OwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgSGFzaE1hcDxEb3dubG9hZElELCBz
dGQ6OnVuaXF1ZV9wdHI8UGVuZGluZ0Rvd25sb2FkPj4gbV9wZW5kaW5nRG93bmxvYWRzOworICAg
IEhhc2hNYXA8RG93bmxvYWRJRCwgc3RkOjpwYWlyPFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+LCBS
ZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyPj4gbV9kb3dubG9hZHNXYWl0aW5nRm9yRGVzdGluYXRp
b247CisgICAgSGFzaE1hcDxEb3dubG9hZElELCBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPj4gbV9k
b3dubG9hZHNBZnRlckRlc3RpbmF0aW9uRGVjaWRlZDsKICNlbmRpZgogICAgIEhhc2hNYXA8RG93
bmxvYWRJRCwgc3RkOjp1bmlxdWVfcHRyPERvd25sb2FkPj4gbV9kb3dubG9hZHM7CiB9OwpJbmRl
eDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya0RhdGFUYXNrQ29jb2EubW0JKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCwxNyArMjgsMjUgQEAKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAK
KyNpbXBvcnQgIkRvd25sb2FkLmgiCisjaW1wb3J0ICJEb3dubG9hZFByb3h5TWVzc2FnZXMuaCIK
KyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKICNpbXBvcnQgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ0ZOZXR3b3JrU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVx
dWVzdC5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KIAorQGludGVyZmFjZSBOU1VSTFNl
c3Npb25UYXNrICgpCitAcHJvcGVydHkgKHJlYWR3cml0ZSwgY29weSkgTlNTdHJpbmcgKl9wYXRo
VG9Eb3dubG9hZFRhc2tGaWxlOworQGVuZAorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogTmV0d29y
a0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdv
cmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0b3Jl
ZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVu
dFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCiAg
ICAgOiBtX2ZhaWx1cmVUaW1lcigqdGhpcywgJk5ldHdvcmtEYXRhVGFzazo6ZmFpbHVyZVRpbWVy
RmlyZWQpCiAgICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKLSAgICAsIG1fY2xpZW50KGNsaWVudCkK
KyAgICAsIG1fY2xpZW50KCZjbGllbnQpCiAgICAgLCBtX2xhc3RIVFRQTWV0aG9kKHJlcXVlc3RX
aXRoQ3JlZGVudGlhbHMuaHR0cE1ldGhvZCgpKQogICAgICwgbV9maXJzdFJlcXVlc3QocmVxdWVz
dFdpdGhDcmVkZW50aWFscykKICAgICAsIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdChzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQpAQCAt
ODYsNiArOTQsNDIgQEAgTmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKICAgICB9
CiB9CiAKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3RhbEJ5
dGVzU2VudCwgdWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKQoreworICAgIGlmICht
X2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKHRvdGFsQnl0ZXNTZW50LCB0
b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlk
UmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQ2hhbGxl
bmdlKGNoYWxsZW5nZSwgY29tcGxldGlvbkhhbmRsZXIpOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFzazo6ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYg
ZXJyb3IpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxl
dGVXaXRoRXJyb3IoZXJyb3IpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNw
b25zZUNvbXBsZXRpb25IYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmIChtX2Ns
aWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZU5ldHdvcmtTZXNzaW9u
KHJlc3BvbnNlLCBjb21wbGV0aW9uSGFuZGxlcik7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
OjpkaWRSZWNlaXZlRGF0YShSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGRhdGEpCit7
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoV1RG
TW92ZShkYXRhKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRCZWNvbWVEb3dubG9h
ZCgpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQmVjb21lRG93
bmxvYWQoKTsKK30KKwogdm9pZCBOZXR3b3JrRGF0YVRhc2s6OndpbGxQZXJmb3JtSFRUUFJlZGly
ZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2Us
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFJlZGlyZWN0Q29tcGxldGlvbkhh
bmRsZXIgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKHJlZGlyZWN0UmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSA9PSAzMDcgfHwgcmVkaXJlY3RSZXNwb25zZS5odHRwU3RhdHVzQ29kZSgp
ID09IDMwOCkgewpAQCAtMTE2LDcgKzE2MCw4IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjp3aWxs
UGVyZm9ybUhUVFBSZWQKICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBPcmlnaW4oKTsKICAgICB9
CiAgICAgCi0gICAgY2xpZW50KCkud2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24ocmVkaXJlY3RS
ZXNwb25zZSwgcmVxdWVzdCwgY29tcGxldGlvbkhhbmRsZXIpOworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKHJlZGlyZWN0UmVz
cG9uc2UsIHJlcXVlc3QsIGNvbXBsZXRpb25IYW5kbGVyKTsKIH0KICAgICAKIHZvaWQgTmV0d29y
a0RhdGFUYXNrOjpzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUgdHlwZSkKQEAgLTEzMywxMSAr
MTc4LDEzIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCgKICAgICBz
d2l0Y2ggKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUpIHsKICAgICBjYXNlIEJsb2NrZWRGYWlsdXJl
OgogICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOwotICAgICAgICBj
bGllbnQoKS53YXNCbG9ja2VkKCk7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAg
IG1fY2xpZW50LT53YXNCbG9ja2VkKCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEludmFs
aWRVUkxGYWlsdXJlOgogICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJl
OwotICAgICAgICBjbGllbnQoKS5jYW5ub3RTaG93VVJMKCk7CisgICAgICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5jYW5ub3RTaG93VVJMKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIE5vRmFpbHVyZToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC0xNDYsNiArMTkzLDIyIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJl
ZCgKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmZpbmRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5maW5k
UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKnRoaXMsIG1fdGFzay5nZXQoKS5yZXNwb25zZS5zdWdn
ZXN0ZWRGaWxlbmFtZSwgY29tcGxldGlvbkhhbmRsZXIpOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFzazo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVu
YW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpCit7CisgICAgQVNTRVJUKCFtX3NhbmRib3hFeHRlbnNpb24pOworICAgIG1fc2FuZGJveEV4
dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
KTsKKyAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKQorICAgICAgICBtX3NhbmRib3hFeHRlbnNp
b24tPmNvbnN1bWUoKTsKKworICAgIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFt
ZTsKKyAgICBtX3Rhc2suZ2V0KCkuX3BhdGhUb0Rvd25sb2FkVGFza0ZpbGUgPSBmaWxlbmFtZTsK
K30KKwogYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnRyeVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlv
bihjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDaGFs
bGVuZ2VDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWNo
YWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKS5pc1Bhc3N3b3JkQmFzZWQoKSkKQEAgLTE2Niw2ICsy
MjksMTYgQEAgYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnRyeVBhc3N3b3JkQmFzZWRBdQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRyYW5zZmVyU2FuZGJveEV4
dGVuc2lvblRvRG93bmxvYWQoRG93bmxvYWQmIGRvd25sb2FkKQoreworICAgIGRvd25sb2FkLnNl
dFNhbmRib3hFeHRlbnNpb24oV1RGTW92ZShtX3NhbmRib3hFeHRlbnNpb24pKTsKK30KKworV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0IE5ldHdvcmtEYXRhVGFzazo6Y3VycmVudFJlcXVlc3QoKQor
eworICAgIHJldHVybiBbbV90YXNrIGN1cnJlbnRSZXF1ZXN0XTsKK30KKwogdm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmNhbmNlbCgpCiB7CiAgICAgW21fdGFzayBjYW5jZWxdOwpJbmRleDogU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vz
c2lvbkNvY29hLm1tCShyZXZpc2lvbiAxOTY3NzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIAogI2ltcG9ydCAiQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyLmgiCisjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0ICJE
b3dubG9hZC5oIgogI2ltcG9ydCAiTmV0d29ya0xvYWQuaCIKICNpbXBvcnQgIk5ldHdvcmtQcm9j
ZXNzLmgiCkBAIC05OCw3ICs5OSw3IEBAIC0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdl
YktpdDo6TmUKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lvbiB0YXNr
OihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRTZW5kQm9keURhdGE6KGludDY0X3QpYnl0ZXNT
ZW50IHRvdGFsQnl0ZXNTZW50OihpbnQ2NF90KXRvdGFsQnl0ZXNTZW50IHRvdGFsQnl0ZXNFeHBl
Y3RlZFRvU2VuZDooaW50NjRfdCl0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQKIHsKICAgICBpZiAo
YXV0byogbmV0d29ya0RhdGFUYXNrID0gX3Nlc3Npb24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcih0
YXNrLnRhc2tJZGVudGlmaWVyKSkKLSAgICAgICAgbmV0d29ya0RhdGFUYXNrLT5jbGllbnQoKS5k
aWRTZW5kRGF0YSh0b3RhbEJ5dGVzU2VudCwgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKTsKKyAg
ICAgICAgbmV0d29ya0RhdGFUYXNrLT5kaWRTZW5kRGF0YSh0b3RhbEJ5dGVzU2VudCwgdG90YWxC
eXRlc0V4cGVjdGVkVG9TZW5kKTsKIH0KIAogLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Np
b24gKilzZXNzaW9uIHRhc2s6KE5TVVJMU2Vzc2lvblRhc2sgKil0YXNrIHdpbGxQZXJmb3JtSFRU
UFJlZGlyZWN0aW9uOihOU0hUVFBVUkxSZXNwb25zZSAqKXJlc3BvbnNlIG5ld1JlcXVlc3Q6KE5T
VVJMUmVxdWVzdCAqKXJlcXVlc3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TVVJMUmVx
dWVzdCAqKSljb21wbGV0aW9uSGFuZGxlcgpAQCAtMTI1LDE0ICsxMjYsMTggQEAgLSAodm9pZClV
UkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogICAgICAgICBpZiAobmV0d29ya0RhdGFU
YXNrLT50cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY2hhbGxlbmdlLCBjaGFsbGVuZ2VD
b21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAg
ICBuZXR3b3JrRGF0YVRhc2stPmNsaWVudCgpLmRpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdl
LCBjaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlcik7CisgICAgICAgIG5ldHdvcmtEYXRhVGFzay0+
ZGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIGNoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVy
KTsKICAgICB9CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc2Vzc2lv
biB0YXNrOihOU1VSTFNlc3Npb25UYXNrICopdGFzayBkaWRDb21wbGV0ZVdpdGhFcnJvcjooTlNF
cnJvciAqKWVycm9yCiB7CiAgICAgaWYgKGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IF9zZXNzaW9u
LT5kYXRhVGFza0ZvcklkZW50aWZpZXIodGFzay50YXNrSWRlbnRpZmllcikpCi0gICAgICAgIG5l
dHdvcmtEYXRhVGFzay0+Y2xpZW50KCkuZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworICAg
ICAgICBuZXR3b3JrRGF0YVRhc2stPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yKTsKKyAgICBl
bHNlIGlmIChhdXRvKiBkb3dubG9hZCA9IFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRv
bigpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKF9zZXNzaW9uLT5kb3dubG9hZElEKHRhc2su
dGFza0lkZW50aWZpZXIpKSkgeworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBkb3du
bG9hZC0+ZGlkRmFpbChlcnJvciwgeyB9KTsgLy8gRklYTUU6IEdpdmUgc29tZSBhY3R1YWwgZGF0
YSBoZXJlIGZvciByZXN1bWluZy4KKyAgICB9CiB9CiAKIC0gKHZvaWQpVVJMU2Vzc2lvbjooTlNV
UkxTZXNzaW9uICopc2Vzc2lvbiBkYXRhVGFzazooTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilkYXRh
VGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZSBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoTlNVUkxTZXNzaW9uUmVzcG9uc2VEaXNwb3NpdGlvbiBkaXNw
b3NpdGlvbikpY29tcGxldGlvbkhhbmRsZXIKQEAgLTE0Miw3ICsxNDcsNyBAQCAtICh2b2lkKVVS
TFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3NpCiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UgcmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSk7CiAgICAgICAgIGNvcHlUaW1pbmdE
YXRhKFtkYXRhVGFzayBfdGltaW5nRGF0YV0sIHJlc291cmNlUmVzcG9uc2UucmVzb3VyY2VMb2Fk
VGltaW5nKCkpOwogICAgICAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IEJsb2NrX2Nv
cHkoY29tcGxldGlvbkhhbmRsZXIpOwotICAgICAgICBuZXR3b3JrRGF0YVRhc2stPmNsaWVudCgp
LmRpZFJlY2VpdmVSZXNwb25zZU5ldHdvcmtTZXNzaW9uKHJlc291cmNlUmVzcG9uc2UsIFtjb21w
bGV0aW9uSGFuZGxlckNvcHldKFdlYkNvcmU6OlBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24pIHsK
KyAgICAgICAgbmV0d29ya0RhdGFUYXNrLT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzb3VyY2VSZXNw
b25zZSwgW2NvbXBsZXRpb25IYW5kbGVyQ29weSwgcmVzb3VyY2VSZXNwb25zZV0oV2ViQ29yZTo6
UG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbikgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXJDb3B5KHRvTlNVUkxTZXNzaW9uUmVzcG9uc2VEaXNwb3NpdGlvbihwb2xpY3lBY3Rpb24pKTsK
ICAgICAgICAgICAgIEJsb2NrX3JlbGVhc2UoY29tcGxldGlvbkhhbmRsZXJDb3B5KTsKICAgICAg
ICAgfSk7CkBAIC0xNTIsMTMgKzE1NywxMiBAQCAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vz
c2lvbiAqKXNlc3NpCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24g
ZGF0YVRhc2s6KE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2sgZGlkUmVjZWl2ZURhdGE6
KE5TRGF0YSAqKWRhdGEKIHsKICAgICBpZiAoYXV0byogbmV0d29ya0RhdGFUYXNrID0gX3Nlc3Np
b24tPmRhdGFUYXNrRm9ySWRlbnRpZmllcihkYXRhVGFzay50YXNrSWRlbnRpZmllcikpCi0gICAg
ICAgIG5ldHdvcmtEYXRhVGFzay0+Y2xpZW50KCkuZGlkUmVjZWl2ZURhdGEoV2ViQ29yZTo6U2hh
cmVkQnVmZmVyOjp3cmFwTlNEYXRhKGRhdGEpKTsKKyAgICAgICAgbmV0d29ya0RhdGFUYXNrLT5k
aWRSZWNlaXZlRGF0YShXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoZGF0YSkpOwog
fQogCiAtICh2b2lkKVVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXNlc3Npb24gZG93bmxvYWRU
YXNrOihOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sgKilkb3dubG9hZFRhc2sgZGlkRmluaXNoRG93
bmxvYWRpbmdUb1VSTDooTlNVUkwgKilsb2NhdGlvbgogewogICAgIGF1dG8gZG93bmxvYWRJRCA9
IF9zZXNzaW9uLT50YWtlRG93bmxvYWRJRChbZG93bmxvYWRUYXNrIHRhc2tJZGVudGlmaWVyXSk7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBpZiAoYXV0byogZG93bmxvYWQgPSBXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChk
b3dubG9hZElEKSkKICAgICAgICAgZG93bmxvYWQtPmRpZEZpbmlzaCgpOwogfQpAQCAtMTgzLDEx
ICsxODcsMTMgQEAgLSAodm9pZClVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzZXNzaQogICAg
ICAgICBhdXRvIGRvd25sb2FkSUQgPSBuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZElE
KCk7CiAgICAgICAgIGF1dG8mIGRvd25sb2FkTWFuYWdlciA9IFdlYktpdDo6TmV0d29ya1Byb2Nl
c3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpOwogICAgICAgICBhdXRvIGRvd25sb2Fk
ID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OkRvd25sb2FkPihkb3dubG9hZE1hbmFnZXIsIGRv
d25sb2FkSUQpOwotICAgICAgICBkb3dubG9hZC0+ZGlkU3RhcnQoW2Rvd25sb2FkVGFzayBjdXJy
ZW50UmVxdWVzdF0pOworICAgICAgICBuZXR3b3JrRGF0YVRhc2stPnRyYW5zZmVyU2FuZGJveEV4
dGVuc2lvblRvRG93bmxvYWQoKmRvd25sb2FkKTsKKyAgICAgICAgQVNTRVJUKFdlYkNvcmU6OmZp
bGVFeGlzdHMobmV0d29ya0RhdGFUYXNrLT5wZW5kaW5nRG93bmxvYWRMb2NhdGlvbigpKSk7Cisg
ICAgICAgIGRvd25sb2FkLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihuZXR3b3JrRGF0YVRhc2stPnBl
bmRpbmdEb3dubG9hZExvY2F0aW9uKCkpOwogICAgICAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZVJl
c3BvbnNlKFtkb3dubG9hZFRhc2sgcmVzcG9uc2VdKTsKICAgICAgICAgYXV0byBwZW5kaW5nRG93
bmxvYWQgPSBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2soZG93bmxv
YWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOwogCi0gICAgICAgIG5ldHdvcmtEYXRhVGFzay0+Y2xp
ZW50KCkuZGlkQmVjb21lRG93bmxvYWQoKTsKKyAgICAgICAgbmV0d29ya0RhdGFUYXNrLT5kaWRC
ZWNvbWVEb3dubG9hZCgpOwogCiAgICAgICAgIF9zZXNzaW9uLT5hZGREb3dubG9hZElEKFtkb3du
bG9hZFRhc2sgdGFza0lkZW50aWZpZXJdLCBkb3dubG9hZElEKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHAJKHJldmlzaW9uIDE5Njc3MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Eb3dubG9h
ZHMvRG93bmxvYWRQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNp
bmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5o
IgogI2luY2x1ZGUgIldlYlByb3RlY3Rpb25TcGFjZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmls
ZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTcwLDYgKzE3MSwyNCBAQCB2b2lkIERvd25sb2FkUHJv
eHk6OnNob3VsZERlY29kZVNvdXJjZURhCiAgICAgcmVzdWx0ID0gbV9wcm9jZXNzUG9vbC0+ZG93
bmxvYWRDbGllbnQoKS5zaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShtX3Byb2Nlc3NQ
b29sLmdldCgpLCB0aGlzLCBtaW1lVHlwZSk7CiB9CiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQordm9pZCBEb3dubG9hZFByb3h5OjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZUFzeW5jKERvd25sb2FkSUQgZG93bmxvYWRJRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlbmFtZSkKK3sKKyAgICBib29sIGFsbG93T3ZlcndyaXRlID0gZmFsc2U7CisgICAgCisgICAg
aWYgKCFtX3Byb2Nlc3NQb29sKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RyaW5nIGRl
c3RpbmF0aW9uID0gbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5h
dGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShtX3Byb2Nlc3NQb29sLmdldCgpLCB0aGlzLCBzdWdn
ZXN0ZWRGaWxlbmFtZSwgYWxsb3dPdmVyd3JpdGUpOworICAgIAorICAgIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOworICAgIGlmICghZGVzdGluYXRpb24u
aXNOdWxsKCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShkZXN0aW5h
dGlvbiwgU2FuZGJveEV4dGVuc2lvbjo6UmVhZFdyaXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
KTsKKyAgICAKKyAgICBpZiAoTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MgPSBt
X3Byb2Nlc3NQb29sLT5uZXR3b3JrUHJvY2VzcygpKQorICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6Q29udGludWVEZWNp
ZGVQZW5kaW5nRG93bmxvYWREZXN0aW5hdGlvbihkb3dubG9hZElELCBkZXN0aW5hdGlvbiwgc2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZSksIDApOworfQorI2Vsc2UKIHZvaWQgRG93bmxvYWRQcm94eTo6
ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSwgU3RyaW5nJiBkZXN0aW5hdGlvbiwgYm9vbCYgYWxsb3dPdmVyd3JpdGUsIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKIHsKICAgICBhbGxvd092
ZXJ3cml0ZSA9IGZhbHNlOwpAQCAtMTgyLDYgKzIwMSw3IEBAIHZvaWQgRG93bmxvYWRQcm94eTo6
ZGVjaWRlRGVzdGluYXRpb25XaXQKICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZGVzdGluYXRpb24sIFNhbmRib3hF
eHRlbnNpb246OlJlYWRXcml0ZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSk7CiB9CisjZW5kaWYK
IAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRDcmVhdGVEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcm
IHBhdGgpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkUHJveHkuaAkocmV2aXNpb24gMTk2NzcyKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDcgQEAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKK2NsYXNzIERvd25sb2FkSUQ7CiBjbGFzcyBEb3dubG9hZFByb3h5TWFwOwogY2xhc3MgV2Vi
UGFnZVByb3h5OwogY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CkBAIC04MSw3ICs4Miw5IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEodWludDY0X3QgbGVuZ3RoKTsKICAg
ICB2b2lkIHNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGJvb2wmIHJlc3VsdCk7CisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgdm9p
ZCBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZp
bGVuYW1lLCBTdHJpbmcmIGRlc3RpbmF0aW9uLCBib29sJiBhbGxvd092ZXJ3cml0ZSwgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKKyNlbmRpZgogICAg
IHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICB2b2lk
IGRpZEZpbmlzaCgpOwogICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKQEAgLTg5LDYgKzky
LDcgQEAgcHJpdmF0ZToKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHZvaWQgY2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9u
U3BhY2UmKTsKICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlZGlyZWN0UmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgdm9pZCBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdn
ZXN0ZWRGaWxlbmFtZUFzeW5jKERvd25sb2FkSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmls
ZW5hbWUpOwogI2VuZGlmCiAKICAgICBEb3dubG9hZFByb3h5TWFwJiBtX2Rvd25sb2FkUHJveHlN
YXA7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxOTY3NzIpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMu
aW4JKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxNSBAQCBtZXNzYWdlcyAtPiBEb3dubG9h
ZFByb3h5IHsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIFdpbGxTZW5kUmVxdWVzdChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVkaXJlY3RSZXF1ZXN0LCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlIHJlZGlyZWN0UmVzcG9uc2UpKTsKICAgICBDYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlKFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2Up
CisgICAgRGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWVBc3luYyhXZWJLaXQ6
OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKQogI2VuZGlm
CiAKICAgICBEaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNw
b25zZSkKICAgICBEaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBsZW5ndGgpCiAgICAgU2hvdWxkRGVj
b2RlU291cmNlRGF0YU9mTUlNRVR5cGUoU3RyaW5nIG1pbWVUeXBlKSAtPiAoYm9vbCByZXN1bHQp
CisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgRGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUoU3RyaW5nIGZpbGVuYW1lKSAtPiAoU3RyaW5nIGRlc3RpbmF0aW9uLCBi
b29sIGFsbG93T3ZlcndyaXRlLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKQorI2VuZGlmCiAgICAgRGlkQ3JlYXRlRGVzdGluYXRpb24oU3Ry
aW5nIHBhdGgpCiAgICAgRGlkRmluaXNoKCkKICAgICBEaWRGYWlsKFdlYkNvcmU6OlJlc291cmNl
RXJyb3IgZXJyb3IsIElQQzo6RGF0YVJlZmVyZW5jZSByZXN1bWVEYXRhKQo=
</data>
<flag name="review"
          id="296839"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>