<?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>26902</bug_id>
          
          <creation_ts>2009-07-01 13:43:59 -0700</creation_ts>
          <short_desc>postMessage() spec now supports sending arrays of ports</short_desc>
          <delta_ts>2009-08-31 17:13:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>28460</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrew Wilson">atwilson</reporter>
          <assigned_to name="Andrew Wilson">atwilson</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>129357</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-07-01 13:43:59 -0700</bug_when>
    <thetext>Currently, the various flavors of postMessage (DOMWindow.postMessage, MessagePort.postMessage, Worker.postMessage, etc) take a single optional MessagePort argument which is passed to the destination via the MessageEvent.messagePort attribute.

The HTML5 spec has changed to allow passing an array of ports instead, and  renames MessageEvent.messagePort to MessageEvent.ports. This spec change didn&apos;t seem to generate much feedback one way or the other, so I&apos;m not certain whether it&apos;s going to stick (we&apos;re the first platform to support MessagePorts) but there&apos;s no technical reason not to implement it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141341</commentid>
    <comment_count>1</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-08-18 18:01:58 -0700</bug_when>
    <thetext>Splitting this bug into two parts - part 1 will get the WebCore infrastructure working with passing multiple ports around, and part 2 will hookup the JS bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141658</commentid>
    <comment_count>2</comment_count>
      <attachid>35162</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-08-19 17:25:33 -0700</bug_when>
    <thetext>Created attachment 35162
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141809</commentid>
    <comment_count>3</comment_count>
      <attachid>35162</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-20 22:51:45 -0700</bug_when>
    <thetext>Comment on attachment 35162
proposed patch

A few things to consider but nothing that couldn&apos;t get checked in.


&gt; diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
&gt; +2009-08-19  Drew Wilson  &lt;atwilson@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        postMessage() spec now supports sending arrays of ports
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=26902
&gt; +
&gt; +        Added OwnPtr to VectorTraits so we can store OwnPtrs in Vectors.

Nice.


In WebCore/ChangeLog
 &quot;No new tests, &quot; needs an indentation fix.


&gt; diff --git a/WebCore/dom/MessagePort.cpp b/WebCore/dom/MessagePort.cpp

&gt; +    // Passed-in ports passed validity checks, so we can disentangle them.
&gt; +    MessagePortChannelArray* result = new
MessagePortChannelArray(ports-&gt;size());

&quot;result&quot; seems as generic as &quot;i&quot; to me.  portArray?


&gt; +    for (unsigned int i = 0 ; i &lt; ports-&gt;size() ; ++i) {
&gt; +        OwnPtr&lt;MessagePortChannel&gt; channel = (*ports)[i]-&gt;disentangle(ec);
&gt; +        ASSERT(!ec);  // Can&apos;t generate exception here if passed above
checks.

One space before end of line comments.  Want to do a patch to cpp_style.py? :)



&gt;
&gt; +PassOwnPtr&lt;MessagePortArray&gt;
MessagePort::entanglePorts(ScriptExecutionContext&amp; context,
PassOwnPtr&lt;MessagePortChannelArray&gt; channels)
&gt; +    MessagePortArray* result = new MessagePortArray(channels-&gt;size());

Personal nit: &quot;result&quot;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35162</attachid>
            <date>2009-08-19 17:25:33 -0700</date>
            <delta_ts>2009-08-20 22:51:45 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>x</filename>
            <type>text/plain</type>
            <size>42148</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBhNjYyMTM5Li41OTAyOWU2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMDktMDgtMTkgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBwb3N0TWVzc2FnZSgp
IHNwZWMgbm93IHN1cHBvcnRzIHNlbmRpbmcgYXJyYXlzIG9mIHBvcnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjkwMgorCisgICAgICAgIEFkZGVk
IE93blB0ciB0byBWZWN0b3JUcmFpdHMgc28gd2UgY2FuIHN0b3JlIE93blB0cnMgaW4gVmVjdG9y
cy4KKworICAgICAgICAqIHd0Zi9WZWN0b3JUcmFpdHMuaDoKKwogMjAwOS0wNy0zMSAgSGFyYWxk
IEZlcm5lbmdlbCAgPGhhcmFsZC5mZXJuZW5nZWxAbm9raWEuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1Zl
Y3RvclRyYWl0cy5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3RvclRyYWl0cy5oCmluZGV4IDc5
NzRiOWEuLmViNGMyNzkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3JUcmFp
dHMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yVHJhaXRzLmgKQEAgLTIxLDYgKzIx
LDcgQEAKICNpZm5kZWYgV1RGX1ZlY3RvclRyYWl0c19oCiAjZGVmaW5lIFdURl9WZWN0b3JUcmFp
dHNfaAogCisjaW5jbHVkZSAiT3duUHRyLmgiCiAjaW5jbHVkZSAiUmVmUHRyLmgiCiAjaW5jbHVk
ZSAiVHlwZVRyYWl0cy5oIgogI2luY2x1ZGUgPHV0aWxpdHk+CkBAIC03MSwxMSArNzIsMTQgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkNvbXBhcmVXaXRo
TWVtY21wID0gdHJ1ZTsKICAgICB9OwogCi0gICAgLy8gd2Uga25vdyBSZWZQdHIgaXMgc2ltcGxl
IGVub3VnaCB0aGF0IGluaXRpYWxpemluZyB0byAwIGFuZCBtb3Zpbmcgd2l0aCBtZW1jcHkKKyAg
ICAvLyB3ZSBrbm93IE93blB0ciBhbmQgUmVmUHRyIGFyZSBzaW1wbGUgZW5vdWdoIHRoYXQgaW5p
dGlhbGl6aW5nIHRvIDAgYW5kIG1vdmluZyB3aXRoIG1lbWNweQogICAgIC8vIChhbmQgdGhlbiBu
b3QgZGVzdHJ1Y3RpbmcgdGhlIG9yaWdpbmFsKSB3aWxsIHRvdGFsbHkgd29yawogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFA+CiAgICAgc3RydWN0IFZlY3RvclRyYWl0czxSZWZQdHI8UD4gPiA6IFNp
bXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsgfTsKLSAgICAKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFA+CisgICAgc3RydWN0IFZlY3RvclRyYWl0czxPd25QdHI8UD4gPiA6IFNpbXBsZUNsYXNzVmVj
dG9yVHJhaXRzIHsgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+CiAgICAgc3RydWN0IFZl
Y3RvclRyYWl0czxzdGQ6OmF1dG9fcHRyPFA+ID4gOiBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7
IH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggNzU3MzdiNi4uMDcwZjJiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAwOS0wOC0xOSAgRHJldyBX
aWxzb24gIDxhdHdpbHNvbkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIHBvc3RNZXNzYWdlKCkgc3BlYyBub3cgc3VwcG9ydHMgc2Vu
ZGluZyBhcnJheXMgb2YgcG9ydHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI2OTAyCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3Igc2VuZGluZyBt
dWx0aXBsZSBwb3J0cyBhdCBvbmNlIHZpYSBwb3N0TWVzc2FnZSgpLiBKUyBiaW5kaW5ncyB3aWxs
IGJlIHVwZGF0ZWQgaW4gYW4gdXBjb21pbmcgcGF0Y2guCisKKyAgICAgICBObyBuZXcgdGVzdHMs
IHNpbmNlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpcyBub3QgZXhwb3NlZCB2aWEgbmV3IEpTIGJp
bmRpbmdzIHlldCwgc28gdGhlIG9sZCB0ZXN0cyBzdWZmaWNlLgorCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBNYXJrIE1lc3NhZ2VQb3J0Lmgg
YW5kIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oIGFzIHByaXZhdGUgc2luY2UgdGhleSBhcmUgdXNlZCBi
eSBXZWJLaXQgbm93LgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuY3BwOgorICAgICAgICBV
cGRhdGVkIEFQSXMgdG8gc3VwcG9ydCBwYXNzaW5nIE1lc3NhZ2VQb3J0QXJyYXlzLgorICAgICAg
ICAoV2ViQ29yZTo6TWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVzc2FnZUV2ZW50Ojppbml0TWVzc2FnZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
c3NhZ2VFdmVudDo6bWVzc2FnZVBvcnQpOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgTm93IGFj
Y2VwdHMgYSBNZXNzYWdlUG9ydEFycmF5IHBhcmFtZXRlciBpbnN0ZWFkIG9mIGEgc2luZ2xlIE1l
c3NhZ2VQb3J0LgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUV2ZW50Ojpwb3J0cyk6CisgICAg
ICAgICogZG9tL01lc3NhZ2VQb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0
Ojpwb3N0TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hN
ZXNzYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGVQb3J0
cyk6CisgICAgICAgIEFkZGVkIG5ldyBzdGF0aWMgZnVuY3Rpb24gdG8gZXh0cmFjdCBhIE1lc3Nh
Z2VQb3J0Q2hhbm5lbEFycmF5IGZyb20gYSBNZXNzYWdlUG9ydEFycmF5LgorICAgICAgICAoV2Vi
Q29yZTo6TWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMpOgorICAgICAgICBBZGRlZCBuZXcgc3Rh
dGljIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgTWVzc2FnZVBvcnRBcnJheSAoZW50YW5nbGVkIHBv
cnRzKSBmcm9tIGEgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkuCisgICAgICAgICogZG9tL01lc3Nh
Z2VQb3J0Lmg6CisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHA6CisgICAgICAg
IEV2ZW50RGF0YSBub3cgY29udGFpbnMgYSBNZXNzYWdlUG9ydENoYW5uZWxBcnJheSBmaWVsZCBp
bnN0ZWFkIG9mIGEgc2luZ2xlIE1lc3NhZ2VQb3J0Q2hhbm5lbC4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE6OkV2ZW50RGF0YSk6CisgICAgICAgICog
ZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5oOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRD
aGFubmVsOjpFdmVudERhdGE6OmNoYW5uZWxzKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQb3N0TWVzc2FnZVRpbWVyOjpQb3N0TWVzc2FnZVRpbWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RNZXNzYWdlVGltZXI6OmV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVdpbmRvdzo6cG9zdE1lc3NhZ2UpOgorICAgICAgICBOb3cgYWNjZXB0cyBh
IE1lc3NhZ2VQb3J0QXJyYXkgcGFyYW1ldGVyIGluc3RlYWQgb2YgYSBzaW5nbGUgTWVzc2FnZVBv
cnQuCisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaDoKKyAgICAgICAgKiB3b3JrZXJzL0RlZGlj
YXRlZFdvcmtlckNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVkaWNhdGVkV29ya2Vy
Q29udGV4dDo6cG9zdE1lc3NhZ2UpOgorICAgICAgICBOb3cgYWNjZXB0cyBhIE1lc3NhZ2VQb3J0
QXJyYXkgcGFyYW1ldGVyIGluc3RlYWQgb2YgYSBzaW5nbGUgTWVzc2FnZVBvcnQuCisgICAgICAg
IChXZWJDb3JlOjpEZWRpY2F0ZWRXb3JrZXJDb250ZXh0OjpkaXNwYXRjaE1lc3NhZ2UpOgorICAg
ICAgICAqIHdvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oOgorICAgICAgICAqIHdvcmtl
cnMvV29ya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6cG9zdE1lc3NhZ2UpOgor
ICAgICAgICBOb3cgYWNjZXB0cyBhIE1lc3NhZ2VQb3J0QXJyYXkgcGFyYW1ldGVyIGluc3RlYWQg
b2YgYSBzaW5nbGUgTWVzc2FnZVBvcnQuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6OmRpc3Bh
dGNoTWVzc2FnZSk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXIuaDoKKyAgICAgICAgKiB3b3Jr
ZXJzL1dvcmtlckNvbnRleHRQcm94eS5oOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuY3BwOgorICAgICAgICBVcGRhdGVkIFdvcmtlck9iamVjdFByb3h5IGFuZCBXb3Jr
ZXJDb250ZXh0UHJveHkgQVBJIGltcGxlbWVudGF0aW9ucyB0byBzdXBwb3J0IHNlbmRpbmcgbXVs
dGlwbGUgTWVzc2FnZVBvcnRzLgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRl
eHRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdvcmtlckNvbnRleHRU
YXNrOjpNZXNzYWdlV29ya2VyQ29udGV4dFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2Fn
ZVdvcmtlckNvbnRleHRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNZXNz
YWdlV29ya2VyVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VXb3JrZXJU
YXNrOjpNZXNzYWdlV29ya2VyVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlV29ya2Vy
VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJv
eHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
TWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KToKKyAgICAgICAgKiB3
b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5Lmg6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJP
YmplY3RQcm94eS5oOgorICAgICAgICBVcGRhdGVkIFdvcmtlck9iamVjdFByb3h5IGFuZCBXb3Jr
ZXJDb250ZXh0UHJveHkgQVBJcyB0byBzdXBwb3J0IHNlbmRpbmcgbXVsdGlwbGUgTWVzc2FnZVBv
cnRzLgorCiAyMDA5LTA4LTE0ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDNmNjAwZS4uNGU5MzJlNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY5Nyw3ICs2OTcsNyBAQAog
CQk0MUEzRDU4RTEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQTNENThDMTAx
QzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwICovOyB9OwogCQk0MUEz
RDU4RjEwMUMxNTJEMDAzMTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUEzRDU4RDEwMUMxNTJEMDAz
MTZEMDcgLyogRGVkaWNhdGVkV29ya2VyVGhyZWFkLmggKi87IH07CiAJCTQxQkY3MDBCMEZFODZG
NDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFCRjcwMDkwRkU4NkY0OTAwNUU4REVDIC8qIE1l
c3NhZ2VQb3J0Q2hhbm5lbC5jcHAgKi87IH07Ci0JCTQxQkY3MDBDMEZFODZGNDkwMDVFOERFQyAv
KiBNZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQxQkY3MDBBMEZFODZGNDkwMDVFOERFQyAvKiBNZXNzYWdlUG9ydENoYW5u
ZWwuaCAqLzsgfTsKKwkJNDFCRjcwMEMwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hh
bm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFC
RjcwMEEwRkU4NkY0OTAwNUU4REVDIC8qIE1lc3NhZ2VQb3J0Q2hhbm5lbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxQkY3MDBGMEZFODZGNjEw
MDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUJGNzAwRDBGRTg2RjYxMDA1RThERUMg
LyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwICovOyB9OwogCQk0MUJGNzAxMDBGRTg2
RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQkY3MDBFMEZFODZGNjEwMDVFOERF
QyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oICovOyB9OwogCQk0MUM3NjBCMTBFREUw
M0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00
NDM4LDcgKzQ0MzgsNyBAQAogCQlFMUE2NDNGRDBFQzA5N0EwMDA3Nzk2NjggLyogV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUE2NDNGQzBFQzA5N0EwMDA3Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5jcHAgKi87IH07CiAJCUUxQUNBRjRDMEU3OTFBQUYwMDg3RDEyQiAvKiBET01NZXNzYWdlUG9y
dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQUNB
RjRBMEU3OTFBQUYwMDg3RDEyQiAvKiBET01NZXNzYWdlUG9ydC5tbSAqLzsgfTsKIAkJRTFBQ0FG
NEQwRTc5MUFBRjAwODdEMTJCIC8qIERPTU1lc3NhZ2VQb3J0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUFDQUY0QjBFNzkxQUFGMDA4N0QxMkIgLyog
RE9NTWVzc2FnZVBvcnQuaCAqLzsgfTsKLQkJRTFBREVDQkYwRTc2QUNGMTAwNEExQTVFIC8qIE1l
c3NhZ2VQb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUFERUNCRDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaCAqLzsgfTsKKwkJRTFB
REVDQkYwRTc2QUNGMTAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUFERUNCRDBFNzZBQ0YxMDA0QTFBNUUgLyog
TWVzc2FnZVBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFMUFERUNDMDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBREVDQkUwRTc2QUNG
MTAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0LmNwcCAqLzsgfTsKIAkJRTFBREVDQ0UwRTc2QUQ4QjAw
NEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMUFERUNDQzBFNzZBRDhCMDA0QTFBNUUgLyogTWVzc2FnZUNoYW5u
ZWwuaCAqLzsgfTsKIAkJRTFBREVDQ0YwRTc2QUQ4QjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQURF
Q0NEMEU3NkFEOEIwMDRBMUE1RSAvKiBNZXNzYWdlQ2hhbm5lbC5jcHAgKi87IH07CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwIGIvV2ViQ29yZS9kb20vTWVzc2FnZUV2
ZW50LmNwcAppbmRleCBhMGFmMzJkLi4xMjY4YTA0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9N
ZXNzYWdlRXZlbnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKQEAgLTM3
LDEzICszNywxMyBAQCBNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudCgpCiB7CiB9CiAKLU1lc3Nh
Z2VFdmVudDo6TWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBv
cmlnaW4sIGNvbnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIFBhc3NSZWZQdHI8RE9NV2luZG93PiBz
b3VyY2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IG1lc3NhZ2VQb3J0KQorTWVzc2FnZUV2ZW50
OjpNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSwg
UGFzc093blB0cjxNZXNzYWdlUG9ydEFycmF5PiBwb3J0cykKICAgICA6IEV2ZW50KGV2ZW50TmFt
ZXMoKS5tZXNzYWdlRXZlbnQsIGZhbHNlLCB0cnVlKQogICAgICwgbV9kYXRhKGRhdGEpCiAgICAg
LCBtX29yaWdpbihvcmlnaW4pCiAgICAgLCBtX2xhc3RFdmVudElkKGxhc3RFdmVudElkKQogICAg
ICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9tZXNzYWdlUG9ydChtZXNzYWdlUG9ydCkKKyAg
ICAsIG1fcG9ydHMocG9ydHMpCiB7CiB9CiAKQEAgLTUxLDcgKzUxLDcgQEAgTWVzc2FnZUV2ZW50
Ojp+TWVzc2FnZUV2ZW50KCkKIHsKIH0KIAotdm9pZCBNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdl
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5j
ZWxhYmxlLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBT
dHJpbmcmIGxhc3RFdmVudElkLCBET01XaW5kb3cqIHNvdXJjZSwgTWVzc2FnZVBvcnQqIG1lc3Nh
Z2VQb3J0KQordm9pZCBNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJp
bmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGxhc3RFdmVudElk
LCBET01XaW5kb3cqIHNvdXJjZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydEFycmF5PiBwb3J0cykK
IHsKICAgICBpZiAoZGlzcGF0Y2hlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02Miw3ICs2Miwy
NiBAQCB2b2lkIE1lc3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBibwogICAgIG1fb3JpZ2luID0gb3JpZ2luOwogICAg
IG1fbGFzdEV2ZW50SWQgPSBsYXN0RXZlbnRJZDsKICAgICBtX3NvdXJjZSA9IHNvdXJjZTsKLSAg
ICBtX21lc3NhZ2VQb3J0ID0gbWVzc2FnZVBvcnQ7CisgICAgbV9wb3J0cyA9IHBvcnRzOworfQor
CisvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSB1cGRhdGUgdGhlIEpTIGJpbmRpbmdzIChi
dWcgIzI4NDYwKS4KK01lc3NhZ2VQb3J0KiBNZXNzYWdlRXZlbnQ6Om1lc3NhZ2VQb3J0KCkKK3sK
KyAgICBpZiAoIW1fcG9ydHMpCisgICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChtX3BvcnRz
LT5zaXplKCkgPT0gMSk7CisgICAgcmV0dXJuICgqbV9wb3J0cylbMF0uZ2V0KCk7Cit9CisKK3Zv
aWQgTWVzc2FnZUV2ZW50Ojppbml0TWVzc2FnZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgU3RyaW5nJiBkYXRhLCBj
b25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgRE9NV2luZG93
KiBzb3VyY2UsIE1lc3NhZ2VQb3J0KiBwb3J0KQoreworICAgIE1lc3NhZ2VQb3J0QXJyYXkqIHBv
cnRzID0gMDsKKyAgICBpZiAocG9ydCkgeworICAgICAgICBwb3J0cyA9IG5ldyBNZXNzYWdlUG9y
dEFycmF5KCk7CisgICAgICAgIHBvcnRzLT5hcHBlbmQocG9ydCk7CisgICAgfQorICAgIGluaXRN
ZXNzYWdlRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCBkYXRhLCBvcmlnaW4sIGxh
c3RFdmVudElkLCBzb3VyY2UsIHBvcnRzKTsKIH0KIAogYm9vbCBNZXNzYWdlRXZlbnQ6OmlzTWVz
c2FnZUV2ZW50KCkgY29uc3QgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQu
aCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCmluZGV4IDg3YTY3NDUuLjExYTM0MGEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCisrKyBiL1dlYkNvcmUvZG9tL01l
c3NhZ2VFdmVudC5oCkBAIC00MSwzMSArNDEsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VFdmVudCk7CiAg
ICAgICAgIH0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBs
YXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSwgUGFzc1JlZlB0cjxNZXNz
YWdlUG9ydD4gbWVzc2FnZVBvcnQpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VF
dmVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIFBhc3NSZWZQdHI8RE9NV2luZG93PiBzb3VyY2UsIFBh
c3NPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZUV2ZW50KGRhdGEsIG9yaWdpbiwgbGFzdEV2ZW50
SWQsIHNvdXJjZSwgbWVzc2FnZVBvcnQpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTWVzc2FnZUV2ZW50KGRhdGEsIG9yaWdpbiwgbGFzdEV2ZW50SWQsIHNvdXJjZSwgcG9ydHMp
KTsKICAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5NZXNzYWdlRXZlbnQoKTsKIAotICAgICAg
ICB2b2lkIGluaXRNZXNzYWdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNh
bkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmlu
ZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGxhc3RFdmVudElkLCBET01XaW5kb3cqIHNvdXJjZSwg
TWVzc2FnZVBvcnQqKTsKLSAgICAgICAgCisgICAgICAgIHZvaWQgaW5pdE1lc3NhZ2VFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUs
IGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYg
bGFzdEV2ZW50SWQsIERPTVdpbmRvdyogc291cmNlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0QXJy
YXk+KTsKKwogICAgICAgICBjb25zdCBTdHJpbmcmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGE7IH0KICAgICAgICAgY29uc3QgU3RyaW5nJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbjsgfQogICAgICAgICBjb25zdCBTdHJpbmcmIGxhc3RFdmVudElkKCkgY29uc3QgeyByZXR1
cm4gbV9sYXN0RXZlbnRJZDsgfQogICAgICAgICBET01XaW5kb3cqIHNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc291cmNlLmdldCgpOyB9Ci0gICAgICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9y
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVzc2FnZVBvcnQuZ2V0KCk7IH0KLSAgICAgICAgCisgICAg
ICAgIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkmIHBvcnRzKCkgY29uc3QgeyByZXR1cm4gKihtX3Bv
cnRzLmdldCgpKTsgfQorCisgICAgICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyB3aGVuIHdlIHVw
ZGF0ZSB0aGUgSlMgYmluZGluZ3MgKGJ1ZyAjMjg0NjApCisgICAgICAgIE1lc3NhZ2VQb3J0KiBt
ZXNzYWdlUG9ydCgpOworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSB1cGRh
dGUgdGhlIEpTIGJpbmRpbmdzIChidWcgIzI4NDYwKQorICAgICAgICB2b2lkIGluaXRNZXNzYWdl
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5j
ZWxhYmxlLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBT
dHJpbmcmIGxhc3RFdmVudElkLCBET01XaW5kb3cqIHNvdXJjZSwgTWVzc2FnZVBvcnQqKTsKKwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNZXNzYWdlRXZlbnQoKSBjb25zdDsKIAotICAgIHByaXZh
dGU6ICAgIAorICAgIHByaXZhdGU6CiAgICAgICAgIE1lc3NhZ2VFdmVudCgpOwotICAgICAgICBN
ZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29u
c3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSwgUGFz
c1JlZlB0cjxNZXNzYWdlUG9ydD4gbWVzc2FnZVBvcnQpOworICAgICAgICBNZXNzYWdlRXZlbnQo
Y29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBs
YXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSwgUGFzc093blB0cjxNZXNz
YWdlUG9ydEFycmF5Pik7CiAKICAgICAgICAgU3RyaW5nIG1fZGF0YTsKICAgICAgICAgU3RyaW5n
IG1fb3JpZ2luOwogICAgICAgICBTdHJpbmcgbV9sYXN0RXZlbnRJZDsKICAgICAgICAgUmVmUHRy
PERPTVdpbmRvdz4gbV9zb3VyY2U7Ci0gICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbV9tZXNz
YWdlUG9ydDsKKyAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IG1fcG9ydHM7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVz
c2FnZVBvcnQuY3BwIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCmluZGV4IDlmM2U0ZDIu
LmE2MDUzYTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAorKysgYi9X
ZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKQEAgLTU1LDI4ICs1NSw0MSBAQCBNZXNzYWdlUG9y
dDo6fk1lc3NhZ2VQb3J0KCkKICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kZXN0
cm95ZWRNZXNzYWdlUG9ydCh0aGlzKTsKIH0KIAorLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4g
d2UgdXBkYXRlIHRoZSBKUyBiaW5kaW5ncyAoYnVnICMyODQ2MCkuCit2b2lkIE1lc3NhZ2VQb3J0
Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBwb3J0LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzOworICAgIGlm
IChwb3J0KQorICAgICAgICBwb3J0cy5hcHBlbmQocG9ydCk7CisgICAgcG9zdE1lc3NhZ2UobWVz
c2FnZSwgJnBvcnRzLCBlYyk7Cit9CisKIHZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgcG9zdE1lc3Nh
Z2UobWVzc2FnZSwgMCwgZWMpOworICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UsIHN0YXRpY19jYXN0
PE1lc3NhZ2VQb3J0QXJyYXkqPigwKSwgZWMpOwogfQogCi12b2lkIE1lc3NhZ2VQb3J0Ojpwb3N0
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBkYXRhUG9ydCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit2b2lkIE1lc3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkqIHBvcnRzLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBpZiAoIW1fZW50YW5nbGVkQ2hhbm5lbCkKICAgICAgICAgcmV0dXJuOwog
ICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCi0gICAgT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbD4gY2hhbm5lbDsKLSAgICBpZiAoZGF0YVBvcnQpIHsKLSAgICAgICAgaWYg
KGRhdGFQb3J0ID09IHRoaXMgfHwgbV9lbnRhbmdsZWRDaGFubmVsLT5pc0Nvbm5lY3RlZFRvKGRh
dGFQb3J0KSkgewotICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxz
OworICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgY29ubmVjdGVkIHRvIGFueSBvZiB0aGUgcGFz
c2VkLWluIHBvcnRzLgorICAgIGlmIChwb3J0cykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHBvcnRzLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTWVzc2FnZVBv
cnQqIGRhdGFQb3J0ID0gKCpwb3J0cylbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoZGF0YVBv
cnQgPT0gdGhpcyB8fCBtX2VudGFuZ2xlZENoYW5uZWwtPmlzQ29ubmVjdGVkVG8oZGF0YVBvcnQp
KSB7CisgICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgY2hhbm5lbCA9
IGRhdGFQb3J0LT5kaXNlbnRhbmdsZShlYyk7CisgICAgICAgIGNoYW5uZWxzID0gTWVzc2FnZVBv
cnQ6OmRpc2VudGFuZ2xlUG9ydHMocG9ydHMsIGVjKTsKICAgICAgICAgaWYgKGVjKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2VudGFuZ2xlZENoYW5uZWwtPnBvc3RNZXNzYWdl
VG9SZW1vdGUoTWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE6OmNyZWF0ZShtZXNzYWdlLCBj
aGFubmVsLnJlbGVhc2UoKSkpOworICAgIG1fZW50YW5nbGVkQ2hhbm5lbC0+cG9zdE1lc3NhZ2VU
b1JlbW90ZShNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YTo6Y3JlYXRlKG1lc3NhZ2UsIGNo
YW5uZWxzLnJlbGVhc2UoKSkpOwogfQogCiBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4g
TWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlKEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTU1LDE0ICsx
NjgsOCBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpkaXNwYXRjaE1lc3NhZ2VzKCkKIAogICAgIE93blB0
cjxNZXNzYWdlUG9ydENoYW5uZWw6OkV2ZW50RGF0YT4gZXZlbnREYXRhOwogICAgIHdoaWxlICht
X2VudGFuZ2xlZENoYW5uZWwgJiYgbV9lbnRhbmdsZWRDaGFubmVsLT50cnlHZXRNZXNzYWdlRnJv
bVJlbW90ZShldmVudERhdGEpKSB7Ci0gICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydDsK
LSAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCA9IGV2ZW50RGF0YS0+
Y2hhbm5lbCgpOwotICAgICAgICBpZiAoY2hhbm5lbCkgewotICAgICAgICAgICAgLy8gVGhlIHJl
bW90ZSBzaWRlIHNlbnQgb3ZlciBhIE1lc3NhZ2VQb3J0Q2hhbm5lbCwgc28gY3JlYXRlIGEgTWVz
c2FnZVBvcnQgdG8gd3JhcCBpdC4KLSAgICAgICAgICAgIHBvcnQgPSBNZXNzYWdlUG9ydDo6Y3Jl
YXRlKCptX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgICAgICAgICAgcG9ydC0+ZW50YW5n
bGUoY2hhbm5lbC5yZWxlYXNlKCkpOwotICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxFdmVudD4g
ZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUoZXZlbnREYXRhLT5tZXNzYWdlKCksICIiLCAiIiwg
MCwgcG9ydC5yZWxlYXNlKCkpOworICAgICAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9y
dHMgPSBNZXNzYWdlUG9ydDo6ZW50YW5nbGVQb3J0cygqbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBldmVudERhdGEtPmNoYW5uZWxzKCkpOworICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IE1l
c3NhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50RGF0YS0+bWVzc2FnZSgpLCAiIiwgIiIsIDAsIHBvcnRz
LnJlbGVhc2UoKSk7CiAKICAgICAgICAgaWYgKG1fb25NZXNzYWdlTGlzdGVuZXIpIHsKICAgICAg
ICAgICAgIGV2dC0+c2V0VGFyZ2V0KHRoaXMpOwpAQCAtMjQ1LDQgKzI1Miw0NiBAQCBNZXNzYWdl
UG9ydCogTWVzc2FnZVBvcnQ6OmxvY2FsbHlFbnRhbmdsZWRQb3J0KCkKICAgICByZXR1cm4gbV9l
bnRhbmdsZWRDaGFubmVsID8gbV9lbnRhbmdsZWRDaGFubmVsLT5sb2NhbGx5RW50YW5nbGVkUG9y
dChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIDogMDsKIH0KIAorUGFzc093blB0cjxNZXNzYWdl
UG9ydENoYW5uZWxBcnJheT4gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMoY29uc3QgTWVz
c2FnZVBvcnRBcnJheSogcG9ydHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghcG9y
dHMgfHwgIXBvcnRzLT5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gSGFzaFNl
dCB1c2VkIHRvIGVmZmljaWVudGx5IGNoZWNrIGZvciBkdXBsaWNhdGVzIGluIHRoZSBwYXNzZWQt
aW4gYXJyYXkuCisgICAgSGFzaFNldDxNZXNzYWdlUG9ydCo+IHBvcnRTZXQ7CisKKyAgICAvLyBX
YWxrIHRoZSBpbmNvbWluZyBhcnJheSAtIGlmIHRoZXJlIGFyZSBhbnkgZHVwbGljYXRlIHBvcnRz
LCBvciBudWxsIHBvcnRzIG9yIGNsb25lZCBwb3J0cywgdGhyb3cgYW4gZXJyb3IgKHBlciBzZWN0
aW9uIDguMy4zIG9mIHRoZSBIVE1MNSBzcGVjKS4KKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHBvcnRzLT5zaXplKCk7ICsraSkgeworICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCA9
ICgqcG9ydHMpW2ldLmdldCgpOworICAgICAgICBpZiAoIXBvcnQgfHwgIXBvcnQtPmlzRW50YW5n
bGVkKCkgfHwgcG9ydFNldC5jb250YWlucyhwb3J0KSkgeworICAgICAgICAgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAg
IHBvcnRTZXQuYWRkKHBvcnQpOworICAgIH0KKworICAgIC8vIFBhc3NlZC1pbiBwb3J0cyBwYXNz
ZWQgdmFsaWRpdHkgY2hlY2tzLCBzbyB3ZSBjYW4gZGlzZW50YW5nbGUgdGhlbS4KKyAgICBNZXNz
YWdlUG9ydENoYW5uZWxBcnJheSogcmVzdWx0ID0gbmV3IE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5
KHBvcnRzLT5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwIDsgaSA8IHBvcnRz
LT5zaXplKCkgOyArK2kpIHsKKyAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hh
bm5lbCA9ICgqcG9ydHMpW2ldLT5kaXNlbnRhbmdsZShlYyk7CisgICAgICAgIEFTU0VSVCghZWMp
OyAgLy8gQ2FuJ3QgZ2VuZXJhdGUgZXhjZXB0aW9uIGhlcmUgaWYgcGFzc2VkIGFib3ZlIGNoZWNr
cy4KKyAgICAgICAgKCpyZXN1bHQpW2ldID0gY2hhbm5lbC5yZWxlYXNlKCk7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1Bhc3NPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gTWVzc2Fn
ZVBvcnQ6OmVudGFuZ2xlUG9ydHMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgUGFz
c093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCit7CisgICAgaWYgKCFj
aGFubmVscyB8fCAhY2hhbm5lbHMtPnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBN
ZXNzYWdlUG9ydEFycmF5KiByZXN1bHQgPSBuZXcgTWVzc2FnZVBvcnRBcnJheShjaGFubmVscy0+
c2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNoYW5uZWxzLT5zaXpl
KCk7ICsraSkgeworICAgICAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQgPSBNZXNzYWdlUG9y
dDo6Y3JlYXRlKGNvbnRleHQpOworICAgICAgICBwb3J0LT5lbnRhbmdsZSgoKmNoYW5uZWxzKVtp
XS5yZWxlYXNlKCkpOworICAgICAgICAoKnJlc3VsdClbaV0gPSBwb3J0LnJlbGVhc2UoKTsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQ
b3J0LmgKaW5kZXggZjQxNmI5Yi4uY2ViYmNmYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTWVz
c2FnZVBvcnQuaAorKysgYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCkBAIC00NCwyMiArNDQs
MzggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEF0b21pY1N0cmluZ0ltcGw7CiAg
ICAgY2xhc3MgRXZlbnQ7CiAgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgTWVzc2FnZVBvcnQ7
CiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBjbGFzcyBTdHJpbmc7CiAK
KyAgICAvLyBUaGUgb3ZlcndoZWxtaW5nbHkgY29tbW9uIGNhc2UgaXMgc2VuZGluZyBhIHNpbmds
ZSBwb3J0LCBzbyBoYW5kbGUgdGhhdCBlZmZpY2llbnRseSB3aXRoIGFuIGlubGluZSBidWZmZXIg
b2Ygc2l6ZSAxLgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4sIDE+IE1l
c3NhZ2VQb3J0QXJyYXk7CisKICAgICBjbGFzcyBNZXNzYWdlUG9ydCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPE1lc3NhZ2VQb3J0PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE1l
c3NhZ2VQb3J0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKTsgfQogICAgICAgICB+TWVzc2FnZVBv
cnQoKTsKIAogICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
RXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAg
ICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gd2UgdXBkYXRlIHRoZSBKUyBiaW5kaW5ncyAo
YnVnICMyODQ2MCkuCiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBNZXNzYWdlUG9ydCosIEV4Y2VwdGlvbkNvZGUmKTsKKwogICAgICAgICB2b2lkIHN0YXJ0
KCk7CiAgICAgICAgIHZvaWQgY2xvc2UoKTsKIAogICAgICAgICB2b2lkIGVudGFuZ2xlKFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPik7CiAgICAgICAgIFBhc3NPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsPiBkaXNlbnRhbmdsZShFeGNlcHRpb25Db2RlJik7CiAKKyAgICAgICAgLy8gRGlz
ZW50YW5nbGUgYW4gYXJyYXkgb2YgcG9ydHMsIHJldHVybmluZyB0aGUgZW50YW5nbGVkIGNoYW5u
ZWxzLgorICAgICAgICAvLyBQZXIgc2VjdGlvbiA4LjMuMyBvZiB0aGUgSFRNTDUgc3BlYywgZ2Vu
ZXJhdGVzIGFuIElOVkFMSURfU1RBVEVfRVJSIGV4Y2VwdGlvbiBpZiBhbnkgb2YgdGhlIHBhc3Nl
ZCBwb3J0cyBhcmUgbnVsbCBvciBub3QgZW50YW5nbGVkLgorICAgICAgICAvLyBSZXR1cm5zIDAg
aWYgdGhlcmUgaXMgYW4gZXhjZXB0aW9uLCBvciBpZiB0aGUgcGFzc2VkLWluIGFycmF5IGlzIDAv
ZW1wdHkuCisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5
PiBkaXNlbnRhbmdsZVBvcnRzKGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkqLCBFeGNlcHRpb25Db2Rl
Jik7CisKKyAgICAgICAgLy8gRW50YW5nbGVzIGFuIGFycmF5IG9mIGNoYW5uZWxzLCByZXR1cm5p
bmcgYW4gYXJyYXkgb2YgTWVzc2FnZVBvcnRzIGluIG1hdGNoaW5nIG9yZGVyLgorICAgICAgICAv
LyBSZXR1cm5zIDAgaWYgdGhlIHBhc3NlZCBhcnJheSBpcyAwL2VtcHR5LgorICAgICAgICBzdGF0
aWMgUGFzc093blB0cjxNZXNzYWdlUG9ydEFycmF5PiBlbnRhbmdsZVBvcnRzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5Pik7CisKICAg
ICAgICAgdm9pZCBtZXNzYWdlQXZhaWxhYmxlKCk7CiAgICAgICAgIGJvb2wgc3RhcnRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnRlZDsgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9NZXNz
YWdlUG9ydENoYW5uZWwuY3BwIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVsLmNwcApp
bmRleCAwNTEzNGMwLi4zNGIyY2U3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9y
dENoYW5uZWwuY3BwCisrKyBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKQEAg
LTMzLDE0ICszMywxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAKLVBhc3NPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRh
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hh
bm5lbD4gY2hhbm5lbCkKK1Bhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+
IE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKIHsKLSAg
ICByZXR1cm4gbmV3IEV2ZW50RGF0YShtZXNzYWdlLCBjaGFubmVsKTsKKyAgICByZXR1cm4gbmV3
IEV2ZW50RGF0YShtZXNzYWdlLCBjaGFubmVscyk7CiB9CiAKLU1lc3NhZ2VQb3J0Q2hhbm5lbDo6
RXZlbnREYXRhOjpFdmVudERhdGEoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzT3duUHRyPE1l
c3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCkKK01lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRh
OjpFdmVudERhdGEoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0
Q2hhbm5lbEFycmF5PiBjaGFubmVscykKICAgICA6IG1fbWVzc2FnZShtZXNzYWdlLmNvcHkoKSkK
LSAgICAsIG1fY2hhbm5lbChjaGFubmVsKQorICAgICwgbV9jaGFubmVscyhjaGFubmVscykKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVsLmggYi9XZWJD
b3JlL2RvbS9NZXNzYWdlUG9ydENoYW5uZWwuaAppbmRleCA5M2IyMjRiLi40YWNmZTdmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydENoYW5uZWwuaAorKysgYi9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydENoYW5uZWwuaApAQCAtNDIsMTAgKzQyLDE0IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBNZXNzYWdlUG9ydDsKKyAgICBjbGFzcyBNZXNzYWdlUG9ydENo
YW5uZWw7CiAgICAgY2xhc3MgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw7CiAgICAgY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBjbGFzcyBTdHJpbmc7CiAKKyAgICAvLyBUaGUg
b3ZlcndoZWxtaW5nbHkgY29tbW9uIGNhc2UgaXMgc2VuZGluZyBhIHNpbmdsZSBwb3J0LCBzbyBo
YW5kbGUgdGhhdCBlZmZpY2llbnRseSB3aXRoIGFuIGlubGluZSBidWZmZXIgb2Ygc2l6ZSAxLgor
ICAgIHR5cGVkZWYgVmVjdG9yPE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+LCAxPiBNZXNzYWdl
UG9ydENoYW5uZWxBcnJheTsKKwogICAgIC8vIE1lc3NhZ2VQb3J0Q2hhbm5lbCBpcyBhIHBsYXRm
b3JtLWluZGVwZW5kZW50IGludGVyZmFjZSB0byB0aGUgcmVtb3RlIHNpZGUgb2YgYSBtZXNzYWdl
IGNoYW5uZWwuCiAgICAgLy8gSXQgYWN0cyBhcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBwbGF0Zm9y
bS1kZXBlbmRlbnQgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwgaW1wbGVtZW50YXRpb24gd2hp
Y2ggZW5zdXJlcyB0aGF0IHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgY2xvc2UoKSBtZXRob2QgaXMg
aW52b2tlZCBiZWZvcmUgZGVzdHJ1Y3Rpb24uCiAgICAgY2xhc3MgTWVzc2FnZVBvcnRDaGFubmVs
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKQEAgLTczLDE1ICs3NywxNSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgY2xhc3MgRXZlbnREYXRhIHsKICAgICAgICAgcHVibGljOgotICAg
ICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8RXZlbnREYXRhPiBjcmVhdGUoY29uc3QgU3RyaW5n
JiwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+KTsKKyAgICAgICAgICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEV2ZW50RGF0YT4gY3JlYXRlKGNvbnN0IFN0cmluZyYsIFBhc3NPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsQXJyYXk+KTsKIAogICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKCkgeyByZXR1cm4gbV9tZXNzYWdlOyB9Ci0gICAgICAgICAgICBQYXNzT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbD4gY2hhbm5lbCgpIHsgcmV0dXJuIG1fY2hhbm5lbC5yZWxlYXNlKCk7IH0K
KyAgICAgICAgICAgIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxz
KCkgeyByZXR1cm4gbV9jaGFubmVscy5yZWxlYXNlKCk7IH0KIAogICAgICAgICBwcml2YXRlOgot
ICAgICAgICAgICAgRXZlbnREYXRhKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxN
ZXNzYWdlUG9ydENoYW5uZWw+KTsKKyAgICAgICAgICAgIEV2ZW50RGF0YShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+KTsKICAgICAgICAg
ICAgIFN0cmluZyBtX21lc3NhZ2U7Ci0gICAgICAgICAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFu
bmVsPiBtX2NoYW5uZWw7CisgICAgICAgICAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJy
YXk+IG1fY2hhbm5lbHM7CiAgICAgICAgIH07CiAKICAgICAgICAgLy8gU2VuZHMgYSBtZXNzYWdl
IGFuZCBvcHRpb25hbCBjbG9uZWQgcG9ydCB0byB0aGUgcmVtb3RlIHBvcnQuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3Bw
CmluZGV4IGRkZDhjMDMuLmQxYjAyNDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC05MSwyNCArOTEsMjAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQb3N0TWVzc2FnZVRpbWVyIDogcHVibGlj
IFRpbWVyQmFzZSB7CiBwdWJsaWM6Ci0gICAgUG9zdE1lc3NhZ2VUaW1lcihET01XaW5kb3cqIHdp
bmRvdywgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZU9yaWdpbiwg
UGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWw+IGNoYW5uZWwsIFNlY3VyaXR5T3JpZ2luKiB0YXJnZXRPcmlnaW4pCisgICAgUG9zdE1lc3Nh
Z2VUaW1lcihET01XaW5kb3cqIHdpbmRvdywgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBT
dHJpbmcmIHNvdXJjZU9yaWdpbiwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSwgUGFzc093
blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMsIFNlY3VyaXR5T3JpZ2luKiB0
YXJnZXRPcmlnaW4pCiAgICAgICAgIDogbV93aW5kb3cod2luZG93KQogICAgICAgICAsIG1fbWVz
c2FnZShtZXNzYWdlKQogICAgICAgICAsIG1fb3JpZ2luKHNvdXJjZU9yaWdpbikKICAgICAgICAg
LCBtX3NvdXJjZShzb3VyY2UpCi0gICAgICAgICwgbV9jaGFubmVsKGNoYW5uZWwpCisgICAgICAg
ICwgbV9jaGFubmVscyhjaGFubmVscykKICAgICAgICAgLCBtX3RhcmdldE9yaWdpbih0YXJnZXRP
cmlnaW4pCiAgICAgewogICAgIH0KIAogICAgIFBhc3NSZWZQdHI8TWVzc2FnZUV2ZW50PiBldmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgUmVmUHRy
PE1lc3NhZ2VQb3J0PiBtZXNzYWdlUG9ydDsKLSAgICAgICAgaWYgKG1fY2hhbm5lbCkgewotICAg
ICAgICAgICAgbWVzc2FnZVBvcnQgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKCpjb250ZXh0KTsKLSAg
ICAgICAgICAgIG1lc3NhZ2VQb3J0LT5lbnRhbmdsZShtX2NoYW5uZWwucmVsZWFzZSgpKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gTWVzc2FnZUV2ZW50OjpjcmVhdGUobV9tZXNzYWdlLCBt
X29yaWdpbiwgIiIsIG1fc291cmNlLCBtZXNzYWdlUG9ydC5yZWxlYXNlKCkpOworICAgICAgICBP
d25QdHI8TWVzc2FnZVBvcnRBcnJheT4gbWVzc2FnZVBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFu
Z2xlUG9ydHMoKmNvbnRleHQsIG1fY2hhbm5lbHMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJu
IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1fbWVzc2FnZSwgbV9vcmlnaW4sICIiLCBtX3NvdXJjZSwg
bWVzc2FnZVBvcnRzLnJlbGVhc2UoKSk7CiAgICAgfQogICAgIFNlY3VyaXR5T3JpZ2luKiB0YXJn
ZXRPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3RhcmdldE9yaWdpbi5nZXQoKTsgfQogCkBAIC0x
MjIsNyArMTE4LDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9tZXNzYWdlOwogICAgIFN0cmlu
ZyBtX29yaWdpbjsKICAgICBSZWZQdHI8RE9NV2luZG93PiBtX3NvdXJjZTsKLSAgICBPd25QdHI8
TWVzc2FnZVBvcnRDaGFubmVsPiBtX2NoYW5uZWw7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hh
bm5lbEFycmF5PiBtX2NoYW5uZWxzOwogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV90YXJn
ZXRPcmlnaW47CiB9OwogCkBAIC02MjMsNyArNjE5LDE1IEBAIE5vdGlmaWNhdGlvbkNlbnRlciog
RE9NV2luZG93Ojp3ZWJraXROb3RpZmljYXRpb25zKCkgY29uc3QKIH0KICNlbmRpZgogCi12b2lk
IERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdlUG9y
dCogbWVzc2FnZVBvcnQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0T3JpZ2luLCBET01XaW5kb3cqIHNv
dXJjZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdlUG9ydCogcG9ydCwgY29uc3QgU3RyaW5nJiB0YXJn
ZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBN
ZXNzYWdlUG9ydEFycmF5IHBvcnRzOworICAgIGlmIChwb3J0KQorICAgICAgICBwb3J0cy5hcHBl
bmQocG9ydCk7CisgICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgJnBvcnRzLCB0YXJnZXRPcmlnaW4s
IHNvdXJjZSwgZWMpOworfQorCit2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5KiBwb3J0cywgY29uc3QgU3RyaW5n
JiB0YXJnZXRPcmlnaW4sIERPTVdpbmRvdyogc291cmNlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTYzOSw5ICs2NDMsNyBAQCB2
b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdl
UG9ydCogbWVzc2FnZVBvcnQsIGNvbgogICAgICAgICB9CiAgICAgfQogCi0gICAgT3duUHRyPE1l
c3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbDsKLSAgICBpZiAobWVzc2FnZVBvcnQpCi0gICAgICAg
IGNoYW5uZWwgPSBtZXNzYWdlUG9ydC0+ZGlzZW50YW5nbGUoZWMpOworICAgIE93blB0cjxNZXNz
YWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGVQ
b3J0cyhwb3J0cywgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwogCkBAIC02NTMs
NyArNjU1LDcgQEAgdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0LCBjb24KICAgICBTdHJpbmcgc291cmNlT3Jp
Z2luID0gc291cmNlRG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCk7CiAKICAg
ICAvLyBTY2hlZHVsZSB0aGUgbWVzc2FnZS4KLSAgICBQb3N0TWVzc2FnZVRpbWVyKiB0aW1lciA9
IG5ldyBQb3N0TWVzc2FnZVRpbWVyKHRoaXMsIG1lc3NhZ2UsIHNvdXJjZU9yaWdpbiwgc291cmNl
LCBjaGFubmVsLnJlbGVhc2UoKSwgdGFyZ2V0LmdldCgpKTsKKyAgICBQb3N0TWVzc2FnZVRpbWVy
KiB0aW1lciA9IG5ldyBQb3N0TWVzc2FnZVRpbWVyKHRoaXMsIG1lc3NhZ2UsIHNvdXJjZU9yaWdp
biwgc291cmNlLCBjaGFubmVscy5yZWxlYXNlKCksIHRhcmdldC5nZXQoKSk7CiAgICAgdGltZXIt
PnN0YXJ0T25lU2hvdCgwKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5oIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCmluZGV4IDFjNzEyMjEuLjAxYzJhZmMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC01Myw3ICs1NCw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBIaXN0b3J5OwogICAgIGNsYXNzIExvY2F0aW9uOwogICAgIGNsYXNz
IE1lZGlhOwotICAgIGNsYXNzIE1lc3NhZ2VQb3J0OwogICAgIGNsYXNzIE5hdmlnYXRvcjsKICAg
ICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKQEAgLTIwNyw2ICsy
MDcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE5vdGlmaWNhdGlvbkNlbnRlciog
d2Via2l0Tm90aWZpY2F0aW9ucygpIGNvbnN0OwogI2VuZGlmCiAKKyAgICAgICAgdm9pZCBwb3N0
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkqLCBj
b25zdCBTdHJpbmcmIHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gd2UgdXBkYXRlIHRoZSBK
UyBiaW5kaW5ncyAoYnVnICMyODQ2MCkuCiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdlUG9ydCosIGNvbnN0IFN0cmluZyYgdGFyZ2V0T3JpZ2lu
LCBET01XaW5kb3cqIHNvdXJjZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICB2b2lkIHBvc3RN
ZXNzYWdlVGltZXJGaXJlZChQb3N0TWVzc2FnZVRpbWVyKik7CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcCBiL1dlYkNvcmUvd29ya2Vycy9E
ZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcAppbmRleCA2ZTVhMzE3Li4xZDI0NTQ3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5jcHAKKysrIGIvV2Vi
Q29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwCkBAIC00NiwyNyArNDYsMzYg
QEAgRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6RGVkaWNhdGVkV29ya2VyQ29udGV4dChjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdXMKIHsKIH0KIAorLy8gRklYTUU6IHJlbW92ZSB0aGlz
IHdoZW4gd2UgdXBkYXRlIHRoZSBKUyBiaW5kaW5ncyAoYnVnICMyODQ2MCkuCit2b2lkIERlZGlj
YXRlZFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVz
c2FnZVBvcnQqIHBvcnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIE1lc3NhZ2VQb3J0QXJy
YXkgcG9ydHM7CisgICAgaWYgKHBvcnQpCisgICAgICAgIHBvcnRzLmFwcGVuZChwb3J0KTsKKyAg
ICBwb3N0TWVzc2FnZShtZXNzYWdlLCAmcG9ydHMsIGVjKTsKK30KKwogdm9pZCBEZWRpY2F0ZWRX
b3JrZXJDb250ZXh0Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UsIDAsIGVjKTsKKyAgICBwb3N0
TWVzc2FnZShtZXNzYWdlLCBzdGF0aWNfY2FzdDxNZXNzYWdlUG9ydEFycmF5Kj4oMCksIGVjKTsK
IH0KIAotdm9pZCBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBwb3J0LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
RGVkaWNhdGVkV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBjb25zdCBNZXNzYWdlUG9ydEFycmF5KiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgaWYgKGlzQ2xvc2luZygpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gRGlzZW50YW5nbGUg
dGhlIHBvcnQgaW4gcHJlcGFyYXRpb24gZm9yIHNlbmRpbmcgaXQgdG8gdGhlIHJlbW90ZSBjb250
ZXh0LgotICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwgPSBwb3J0ID8gcG9y
dC0+ZGlzZW50YW5nbGUoZWMpIDogMDsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJy
YXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMocG9ydHMsIGVjKTsK
ICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKLSAgICB0aHJlYWQoKS0+d29ya2VyT2JqZWN0
UHJveHkoKS5wb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KG1lc3NhZ2UsIGNoYW5uZWwucmVsZWFz
ZSgpKTsKKyAgICB0aHJlYWQoKS0+d29ya2VyT2JqZWN0UHJveHkoKS5wb3N0TWVzc2FnZVRvV29y
a2VyT2JqZWN0KG1lc3NhZ2UsIGNoYW5uZWxzLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgRGVkaWNh
dGVkV29ya2VyQ29udGV4dDo6ZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
UGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCkKK3ZvaWQgRGVkaWNhdGVkV29ya2VyQ29udGV4
dDo6ZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNz
YWdlUG9ydEFycmF5PiBwb3J0cykKIHsKICAgICAvLyBTaW5jZSBjbG9zZSgpIHN0b3BzIHRoZSB0
aHJlYWQgZXZlbnQgbG9vcCwgdGhpcyBzaG91bGQgbm90IGV2ZXIgZ2V0IGNhbGxlZCB3aGlsZSBj
bG9zaW5nLgogICAgIEFTU0VSVCghaXNDbG9zaW5nKCkpOwotICAgIFJlZlB0cjxFdmVudD4gZXZ0
ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVzc2FnZSwgIiIsICIiLCAwLCBwb3J0KTsKKyAgICBS
ZWZQdHI8RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKG1lc3NhZ2UsICIiLCAiIiwg
MCwgcG9ydHMpOwogCiAgICAgaWYgKG1fb25tZXNzYWdlTGlzdGVuZXIuZ2V0KCkpIHsKICAgICAg
ICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvRGVk
aWNhdGVkV29ya2VyQ29udGV4dC5oIGIvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNv
bnRleHQuaAppbmRleCBiZTliZTBiLi5jMjIyYTY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtl
cnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0
ZWRXb3JrZXJDb250ZXh0LmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShXT1JLRVJT
KQogCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU1LDExICs1NiwxMyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgICAgIHZpcnR1YWwgRGVkaWNhdGVk
V29ya2VyQ29udGV4dCogdG9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0KCkgeyByZXR1cm4gdGhpczsg
fQogICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmLCBjb25zdCBNZXNzYWdl
UG9ydEFycmF5KiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRo
aXMgd2hlbiB3ZSB1cGRhdGUgdGhlIEpTIGJpbmRpbmdzIChidWcgIzI4NDYwKS4KICAgICAgICAg
dm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmLCBNZXNzYWdlUG9ydCosIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICAgICAgdm9pZCBzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyKSB7IG1fb25tZXNzYWdlTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9
CiAgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fb25t
ZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KIAotICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZShj
b25zdCBTdHJpbmcmLCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0Pik7CisgICAgICAgIHZvaWQgZGlz
cGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4p
OwogCiAgICAgICAgIERlZGljYXRlZFdvcmtlclRocmVhZCogdGhyZWFkKCk7CiAgICAgcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwIGIvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlci5jcHAKaW5kZXggYTkwNjEzNC4uNDEzMzIyNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlci5jcHAKKysrIGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAKQEAg
LTY5LDE4ICs2OSwyNyBAQCBXb3JrZXI6On5Xb3JrZXIoKQogICAgIG1fY29udGV4dFByb3h5LT53
b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKIH0KIAorLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4g
d2UgdXBkYXRlIHRoZSBKUyBiaW5kaW5ncyAoYnVnICMyODQ2MCkuCit2b2lkIFdvcmtlcjo6cG9z
dE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNzYWdlUG9ydCogcG9ydCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0czsKKyAgICBpZiAocG9y
dCkKKyAgICAgICAgcG9ydHMuYXBwZW5kKHBvcnQpOworICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2Us
ICZwb3J0cywgZWMpOworfQorCiB2b2lkIFdvcmtlcjo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBwb3N0TWVzc2FnZShtZXNzYWdl
LCAwLCBlYyk7CisgICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgc3RhdGljX2Nhc3Q8TWVzc2FnZVBv
cnRBcnJheSo+KDApLCBlYyk7CiB9CiAKLXZvaWQgV29ya2VyOjpwb3N0TWVzc2FnZShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit2b2lkIFdvcmtlcjo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25z
dCBNZXNzYWdlUG9ydEFycmF5KiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgLy8g
RGlzZW50YW5nbGUgdGhlIHBvcnQgaW4gcHJlcGFyYXRpb24gZm9yIHNlbmRpbmcgaXQgdG8gdGhl
IHJlbW90ZSBjb250ZXh0LgotICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwg
PSBtZXNzYWdlUG9ydCA/IG1lc3NhZ2VQb3J0LT5kaXNlbnRhbmdsZShlYykgOiAwOworICAgIE93
blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlz
ZW50YW5nbGVQb3J0cyhwb3J0cywgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dFByb3h5LT5wb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChtZXNzYWdlLCBj
aGFubmVsLnJlbGVhc2UoKSk7CisgICAgbV9jb250ZXh0UHJveHktPnBvc3RNZXNzYWdlVG9Xb3Jr
ZXJDb250ZXh0KG1lc3NhZ2UsIGNoYW5uZWxzLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgV29ya2Vy
Ojp0ZXJtaW5hdGUoKQpAQCAtMTE2LDkgKzEyNSw5IEBAIHZvaWQgV29ya2VyOjpub3RpZnlGaW5p
c2hlZCgpCiAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CiB9CiAKLXZvaWQgV29ya2Vy
OjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPE1lc3Nh
Z2VQb3J0PiBwb3J0KQordm9pZCBXb3JrZXI6OmRpc3BhdGNoTWVzc2FnZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMpCiB7Ci0gICAgUmVm
UHRyPEV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShtZXNzYWdlLCAiIiwgIiIsIDAs
IHBvcnQpOworICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobWVz
c2FnZSwgIiIsICIiLCAwLCBwb3J0cyk7CiAKICAgICBpZiAobV9vbk1lc3NhZ2VMaXN0ZW5lci5n
ZXQoKSkgewogICAgICAgICBldnQtPnNldFRhcmdldCh0aGlzKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXIuaCBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuaAppbmRleCA2NmE4
YWU5Li44YjljY2ZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmgKKysrIGIv
V2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQXRv
bWljU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJF
dmVudFRhcmdldC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiV29ya2Vy
U2NyaXB0TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC01NywxMSArNTgsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIFdvcmtlciogdG9Xb3JrZXIoKSB7IHJldHVybiB0aGlzOyB9CiAK
ICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiwgTWVzc2FnZVBvcnQqLCBF
eGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiwg
Y29uc3QgTWVzc2FnZVBvcnRBcnJheSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgLy8gRklY
TUU6IHJlbW92ZSB0aGlzIHdoZW4gd2UgdXBkYXRlIHRoZSBKUyBiaW5kaW5ncyAoYnVnICMyODQ2
MCkuCisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBNZXNz
YWdlUG9ydCosIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgICAgICB2b2lkIHRlcm1pbmF0ZSgpOwog
Ci0gICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8
TWVzc2FnZVBvcnQ+KTsKKyAgICAgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5n
JiwgUGFzc093blB0cjxNZXNzYWdlUG9ydEFycmF5Pik7CiAgICAgICAgIHZvaWQgZGlzcGF0Y2hF
cnJvckV2ZW50KCk7CiAKICAgICAgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaCBiL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaAppbmRleCBmNDI1MjdlLi5kNTU0NTJlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dFByb3h5LmgKKysrIGIvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oCkBAIC0zMywxMiArMzMsMTIgQEAKIAog
I2lmIEVOQUJMRShXT1JLRVJTKQogCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBL
VVJMOwotICAgIGNsYXNzIE1lc3NhZ2VQb3J0Q2hhbm5lbDsKICAgICBjbGFzcyBTdHJpbmc7CiAg
ICAgY2xhc3MgV29ya2VyOwogCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpID0gMDsKIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgU3Ry
aW5nJiwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+KSA9IDA7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmLCBQYXNzT3du
UHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PikgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
TWVzc2FnaW5nUHJveHkuY3BwCmluZGV4IDFkYWMyOGUuLjVjNmVjYzIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKKysrIGIvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcApAQCAtNDQsMTUgKzQ0LDE1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrIDogcHVibGljIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8TWVzc2FnZVdvcmtlckNvbnRleHRUYXNrPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNr
KG1lc3NhZ2UsIGNoYW5uZWwpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdl
V29ya2VyQ29udGV4dFRhc2sobWVzc2FnZSwgY2hhbm5lbHMpKTsKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFz
c093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwpCisgICAgTWVzc2FnZVdvcmtlckNv
bnRleHRUYXNrKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENo
YW5uZWxBcnJheT4gY2hhbm5lbHMpCiAgICAgICAgIDogbV9tZXNzYWdlKG1lc3NhZ2UuY29weSgp
KQotICAgICAgICAsIG1fY2hhbm5lbChjaGFubmVsKQorICAgICAgICAsIG1fY2hhbm5lbHMoY2hh
bm5lbHMpCiAgICAgewogICAgIH0KIApAQCAtNjAsMzEgKzYwLDI3IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBBU1NFUlQoc2NyaXB0Q29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwogICAg
ICAgICBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8RGVkaWNh
dGVkV29ya2VyQ29udGV4dCo+KHNjcmlwdENvbnRleHQpOwotICAgICAgICBSZWZQdHI8TWVzc2Fn
ZVBvcnQ+IHBvcnQ7Ci0gICAgICAgIGlmIChtX2NoYW5uZWwpIHsKLSAgICAgICAgICAgIHBvcnQg
PSBNZXNzYWdlUG9ydDo6Y3JlYXRlKCpzY3JpcHRDb250ZXh0KTsKLSAgICAgICAgICAgIHBvcnQt
PmVudGFuZ2xlKG1fY2hhbm5lbC5yZWxlYXNlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRl
eHQtPmRpc3BhdGNoTWVzc2FnZShtX21lc3NhZ2UsIHBvcnQucmVsZWFzZSgpKTsKKyAgICAgICAg
T3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9y
dHMoKnNjcmlwdENvbnRleHQsIG1fY2hhbm5lbHMucmVsZWFzZSgpKTsKKyAgICAgICAgY29udGV4
dC0+ZGlzcGF0Y2hNZXNzYWdlKG1fbWVzc2FnZSwgcG9ydHMucmVsZWFzZSgpKTsKICAgICAgICAg
Y29udGV4dC0+dGhyZWFkKCktPndvcmtlck9iamVjdFByb3h5KCkuY29uZmlybU1lc3NhZ2VGcm9t
V29ya2VyT2JqZWN0KGNvbnRleHQtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKTsKICAgICB9CiAKIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fbWVzc2FnZTsKLSAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFu
bmVsPiBtX2NoYW5uZWw7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX2No
YW5uZWxzOwogfTsKIAogY2xhc3MgTWVzc2FnZVdvcmtlclRhc2sgOiBwdWJsaWMgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWVz
c2FnZVdvcmtlclRhc2s+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NPd25QdHI8
TWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2Fn
aW5nUHJveHkpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVzc2FnZVdvcmtlclRhc2s+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJy
YXk+IGNoYW5uZWxzLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VXb3JrZXJUYXNrKG1lc3NhZ2Us
IGNoYW5uZWwsIG1lc3NhZ2luZ1Byb3h5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TWVzc2FnZVdvcmtlclRhc2sobWVzc2FnZSwgY2hhbm5lbHMsIG1lc3NhZ2luZ1Byb3h5KSk7CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIE1lc3NhZ2VXb3JrZXJUYXNrKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwsIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKKyAgICBNZXNzYWdlV29ya2VyVGFzayhjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5u
ZWxzLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCiAgICAgICAgIDogbV9t
ZXNzYWdlKG1lc3NhZ2UuY29weSgpKQotICAgICAgICAsIG1fY2hhbm5lbChjaGFubmVsKQorICAg
ICAgICAsIG1fY2hhbm5lbHMoY2hhbm5lbHMpCiAgICAgICAgICwgbV9tZXNzYWdpbmdQcm94eSht
ZXNzYWdpbmdQcm94eSkKICAgICB7CiAgICAgfQpAQCAtOTUsMTcgKzkxLDEzIEBAIHByaXZhdGU6
CiAgICAgICAgIGlmICghd29ya2VyT2JqZWN0IHx8IG1fbWVzc2FnaW5nUHJveHktPmFza2VkVG9U
ZXJtaW5hdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZWZQdHI8TWVzc2Fn
ZVBvcnQ+IHBvcnQ7Ci0gICAgICAgIGlmIChtX2NoYW5uZWwpIHsKLSAgICAgICAgICAgIHBvcnQg
PSBNZXNzYWdlUG9ydDo6Y3JlYXRlKCpzY3JpcHRDb250ZXh0KTsKLSAgICAgICAgICAgIHBvcnQt
PmVudGFuZ2xlKG1fY2hhbm5lbC5yZWxlYXNlKCkpOwotICAgICAgICB9Ci0gICAgICAgIHdvcmtl
ck9iamVjdC0+ZGlzcGF0Y2hNZXNzYWdlKG1fbWVzc2FnZSwgcG9ydC5yZWxlYXNlKCkpOworICAg
ICAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPSBNZXNzYWdlUG9ydDo6ZW50YW5n
bGVQb3J0cygqc2NyaXB0Q29udGV4dCwgbV9jaGFubmVscy5yZWxlYXNlKCkpOworICAgICAgICB3
b3JrZXJPYmplY3QtPmRpc3BhdGNoTWVzc2FnZShtX21lc3NhZ2UsIHBvcnRzLnJlbGVhc2UoKSk7
CiAgICAgfQogCiBwcml2YXRlOgogICAgIFN0cmluZyBtX21lc3NhZ2U7Ci0gICAgT3duUHRyPE1l
c3NhZ2VQb3J0Q2hhbm5lbD4gbV9jaGFubmVsOworICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheT4gbV9jaGFubmVsczsKICAgICBXb3JrZXJNZXNzYWdpbmdQcm94eSogbV9tZXNzYWdp
bmdQcm94eTsKIH07CiAKQEAgLTIyNSwyMSArMjE3LDIxIEBAIHZvaWQgV29ya2VyTWVzc2FnaW5n
UHJveHk6OnN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0
cmluCiAgICAgdGhyZWFkLT5zdGFydCgpOwogfQogCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5
Ojpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093
blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwpCit2b2lkIFdvcmtlck1lc3NhZ2luZ1By
b3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFz
c093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCiB7Ci0gICAgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhNZXNzYWdlV29ya2VyVGFzazo6Y3JlYXRlKG1l
c3NhZ2UsIGNoYW5uZWwsIHRoaXMpKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBv
c3RUYXNrKE1lc3NhZ2VXb3JrZXJUYXNrOjpjcmVhdGUobWVzc2FnZSwgY2hhbm5lbHMucmVsZWFz
ZSgpLCB0aGlzKSk7CiB9CiAKLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdl
VG9Xb3JrZXJDb250ZXh0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdl
UG9ydENoYW5uZWw+IGNoYW5uZWwpCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVz
c2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQogewogICAgIGlmIChtX2Fza2VkVG9UZXJt
aW5hdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3dvcmtlclRocmVhZCkgewogICAg
ICAgICArK21fdW5jb25maXJtZWRNZXNzYWdlQ291bnQ7Ci0gICAgICAgIG1fd29ya2VyVGhyZWFk
LT5ydW5Mb29wKCkucG9zdFRhc2soTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUobWVz
c2FnZSwgY2hhbm5lbCkpOworICAgICAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RU
YXNrKE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzazo6Y3JlYXRlKG1lc3NhZ2UsIGNoYW5uZWxzLnJl
bGVhc2UoKSkpOwogICAgIH0gZWxzZQotICAgICAgICBtX3F1ZXVlZEVhcmx5VGFza3MuYXBwZW5k
KE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzazo6Y3JlYXRlKG1lc3NhZ2UsIGNoYW5uZWwpKTsKKyAg
ICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFwcGVuZChNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6
OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVscy5yZWxlYXNlKCkpKTsKIH0KIAogdm9pZCBXb3JrZXJN
ZXNzYWdpbmdQcm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmggYi9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaAppbmRleCA4NDFmYzlhLi5kZDMwOWQ1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaAorKysg
Yi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaApAQCAtNDIsNyArNDIsNiBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRGVkaWNhdGVkV29ya2VyVGhyZWFk
OwotICAgIGNsYXNzIE1lc3NhZ2VQb3J0Q2hhbm5lbDsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBXb3JrZXI7CkBAIC01NSwx
MyArNTQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyAoT25seSB1c2UgdGhl
c2UgbWV0aG9kcyBpbiB0aGUgd29ya2VyIG9iamVjdCB0aHJlYWQuKQogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3Ry
aW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBw
b3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmLCBQYXNzT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbD4pOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtl
ckNvbnRleHQoY29uc3QgU3RyaW5nJiwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eT4pOwogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKIAogICAgICAgICAv
LyBJbXBsZW1lbnRhdGlvbnMgb2YgV29ya2VyT2JqZWN0UHJveHkuCiAgICAgICAgIC8vIChPbmx5
IHVzZSB0aGVzZSBtZXRob2RzIGluIHRoZSB3b3JrZXIgY29udGV4dCB0aHJlYWQuKQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmLCBQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4pOworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9z
dE1lc3NhZ2VUb1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmLCBQYXNzT3duUHRyPE1lc3NhZ2VQ
b3J0Q2hhbm5lbEFycmF5Pik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9X
b3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29s
ZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlRGVzdGluYXRpb24sIE1lc3NhZ2VTb3VyY2Us
IE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxp
bmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sIGhhc1BlbmRpbmdBY3Rpdml0eSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT2JqZWN0UHJveHkuaCBiL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oCmluZGV4IDU4NmU3YTAuLjc3YTdkN2QgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oCisrKyBiL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oCkBAIC0zNCw3ICszNCw3IEBACiAjaWYgRU5B
QkxFKFdPUktFUlMpCiAKICNpbmNsdWRlICJXb3JrZXJSZXBvcnRpbmdQcm94eS5oIgotCisjaW5j
bHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAvLyBBIHByb3h5IHRvIHRhbGsgdG8gdGhlIHdvcmtlciBvYmplY3QuCiAgICAgY2xhc3MgV29y
a2VyT2JqZWN0UHJveHkgOiBwdWJsaWMgV29ya2VyUmVwb3J0aW5nUHJveHkgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoY29uc3Qg
U3RyaW5nJiwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+KSA9IDA7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYsIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+KSA9IDA7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wg
aGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7Cg==
</data>
<flag name="review"
          id="19353"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="19397"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>