<?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>57049</bug_id>
          
          <creation_ts>2011-03-24 13:28:44 -0700</creation_ts>
          <short_desc>[Qt] QNetworkReplyHandler refactoring: signal sequence.</short_desc>
          <delta_ts>2011-03-30 16:41:00 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>57075</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Luiz Agostini">luiz</reporter>
          <assigned_to name="Luiz Agostini">luiz</assigned_to>
          <cc>abarth</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>373045</commentid>
    <comment_count>0</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2011-03-24 13:28:44 -0700</bug_when>
    <thetext>This is the first step in QNetworkReplyHandler. The main objective here is to create simple invariants: 

 1 - that the signals metadatachanged, readyRead and finished will come in this order.
 2 - that signals metadatachanged and finished will come for sure.

Having these invariants further simplifications will be possible and will come in future patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373052</commentid>
    <comment_count>1</comment_count>
      <attachid>86823</attachid>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2011-03-24 13:46:48 -0700</bug_when>
    <thetext>Created attachment 86823
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373061</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-03-24 13:56:29 -0700</bug_when>
    <thetext>Kling, Jocelyn can you have a look at this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373416</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-03-25 02:42:19 -0700</bug_when>
    <thetext>Could you give a bit of context? Which bugs is this fixing?

About the new enforced invariants:
 1 - that the signals metadatachanged, readyRead and finished will come in this order.
 2 - that signals metadatachanged and finished will come for sure.

In which case are they not met with the current code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373418</commentid>
    <comment_count>4</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2011-03-25 02:49:07 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Could you give a bit of context? Which bugs is this fixing?
&gt; 
&gt; About the new enforced invariants:
&gt;  1 - that the signals metadatachanged, readyRead and finished will come in this order.
&gt;  2 - that signals metadatachanged and finished will come for sure.
&gt; 
&gt; In which case are they not met with the current code?

The current code expects the signals to come in any sequence.

Slots forwardData() and finish() call sendResponseIfNeeded() and a flag named m_responseSent is kept to indicate if sendResponseIfNeeded() is been called for the second time.

All those slots (forwardData, finish and sendResponseIfNeeded) are connected to a QNetworkReply object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373424</commentid>
    <comment_count>5</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2011-03-25 03:05:55 -0700</bug_when>
    <thetext>This is a refactoring that will make further changes. I tried to provide patches that are easy to understand each one alone. But the whole refactoring is much larger.

Basically the strategy is to:

 1 - create a wrapper that will enforce the invariants that I need and will be the place to add further logic as mime sniffing. (bug 57049)
 2 - separate the &apos;deferred&apos; logic from the actual content processing logic. (bug 57075)
 3 - separate the logic for redirection from the logic for receive meta data. (bug 57083)
 4 - cleanup. (bug 57092)
 5 - create a separated class to be used in synchronous requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374475</commentid>
    <comment_count>6</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-03-28 07:37:17 -0700</bug_when>
    <thetext>Concerns:
- I&apos;m not sure why you need to disconnect and reconnect the reply at each signal received. This could have performance impacts, especially for readyRead.
- In QNetworkReplyWrapper::receiveMetaData, each time you will receive readyRead from the reply, you will do the mime type dance and emit metadataChanged. Doing it once the first time should be enough.
- The QNetworkReplyWrapper class name doesn&apos;t define much it&apos;s responsibility, though I can&apos;t find a better name myself so...

This whole refactoring is awesome but it moves more tiny networking bug fixes than it may look. I think it would be better not to get this in QtWebKit 2.2 unless of course there is a clear gain and we put additional efforts to test this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374674</commentid>
    <comment_count>7</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2011-03-28 12:26:14 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Concerns:
&gt; - I&apos;m not sure why you need to disconnect and reconnect the reply at each signal received. This could have performance impacts, especially for readyRead.

At construction time all signals from QNetworkReply are connected to receiveMetaData and they are disconnected as soon as the first one come. The slot receiveMetaData is not used form this point on. If needed, the signals from QNetworkReply will be connected to other slots. Specifically, readyRead signal form QNetworkReply will only trigger QNetworkReplyWrapper&apos;s own readyRead signal.

 214    connect(m_reply, SIGNAL(readyRead()), this, SIGNAL(readyRead()));
 215    connect(m_reply, SIGNAL(finished()), this, SLOT(receiveFinished()));

&gt; - In QNetworkReplyWrapper::receiveMetaData, each time you will receive readyRead from the reply, you will do the mime type dance and emit metadataChanged. Doing it once the first time should be enough.

The slot receiveMetaData is only be used to receive the first signal from QNetwrokReply. Signal metadataChanged is emitted only once. The mime type dance will only happen exactly once.

&gt; - The QNetworkReplyWrapper class name doesn&apos;t define much it&apos;s responsibility, though I can&apos;t find a better name myself so...
&gt; 
&gt; This whole refactoring is awesome but it moves more tiny networking bug fixes than it may look. I think it would be better not to get this in QtWebKit 2.2 unless of course there is a clear gain and we put additional efforts to test this code.

Ok, the whole refactoring may be too much for this time but this first patch was designed to be clearly sane and to prepare the way to mime sniffing integration. Please then consider integrating this patch alone for this first time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375210</commentid>
    <comment_count>8</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2011-03-29 05:31:42 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; At construction time all signals from QNetworkReply are connected to receiveMetaData and they are disconnected as soon as the first one come. The slot receiveMetaData is not used form this point on. If needed, the signals from QNetworkReply will be connected to other slots. Specifically, readyRead signal form QNetworkReply will only trigger QNetworkReplyWrapper&apos;s own readyRead signal.
&gt; 
&gt;  214    connect(m_reply, SIGNAL(readyRead()), this, SIGNAL(readyRead()));
&gt;  215    connect(m_reply, SIGNAL(finished()), this, SLOT(receiveFinished()));
&gt; 
&gt; &gt; - In QNetworkReplyWrapper::receiveMetaData, each time you will receive readyRead from the reply, you will do the mime type dance and emit metadataChanged. Doing it once the first time should be enough.
&gt; 
&gt; The slot receiveMetaData is only be used to receive the first signal from QNetwrokReply. Signal metadataChanged is emitted only once. The mime type dance will only happen exactly once.

Ahh, I missed that part, it makes more sense.
Please add a comment somewhere to highlight this.

&gt; 
&gt; Ok, the whole refactoring may be too much for this time but this first patch was designed to be clearly sane and to prepare the way to mime sniffing integration. Please then consider integrating this patch alone for this first time.

I have nothing against having it in trunk, as long as we are aware of the risk. In worst conditions we can revert it in the future branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375617</commentid>
    <comment_count>9</comment_count>
      <attachid>87382</attachid>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2011-03-29 11:54:07 -0700</bug_when>
    <thetext>Created attachment 87382
patch

adding the comments requested by Jocelyn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375767</commentid>
    <comment_count>10</comment_count>
      <attachid>87382</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-03-29 14:29:23 -0700</bug_when>
    <thetext>Comment on attachment 87382
patch

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

This is pretty readable and understandable

&gt; Source/WebCore/ChangeLog:11
&gt; +            2 - that signals metadatachanged and finished will will be called exactly once.

two will&apos;s there

&gt; Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:176
&gt; +    disconnect(reply, 0, this, 0);

Isn&apos;t there a disconnectAll or so?

&gt; Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:189
&gt; +    // this slot is only used to receive the first signal from the QNetworkReply object.

comments should start with capital - basically they should be real sentences

&gt; Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:207
&gt; +        // if not finished, connect to the slots that will be used from this point on.

same here

&gt; Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:209
&gt; +        connect(m_reply, SIGNAL(finished()), this, SLOT(receiveFinished()));

receive_d_Finished?

more webkit like, didReceiveFinished

&gt; Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:226
&gt; +    // disconnecting will make sure that nothing will happen after emiting finished signal.

Disco...*

after emitting (two t&apos;s) THE finished signal

&gt; Source/WebCore/platform/network/qt/QNetworkReplyHandler.h:48
&gt; +    QUrl redirectUrl() const { return m_redirectUrl; }

I think redirectionUrl would be more correct. or redirectionTargetUrl()

&gt; Source/WebCore/platform/network/qt/QNetworkReplyHandler.h:50
&gt; +    QString officialMimeType() const { return m_officialMimeType; }

I don&apos;t like the official part of the name? maybe &quot;advertisedMimeType&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375772</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-03-29 14:33:56 -0700</bug_when>
    <thetext>Have you tried measuring the performance impact of this change? I think it might be a good think to do, even though we think it won&apos;t affect it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376536</commentid>
    <comment_count>12</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2011-03-30 11:44:03 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Have you tried measuring the performance impact of this change? I think it might be a good think to do, even though we think it won&apos;t affect it.

I have made some only simple tests with QtTestBrowser in robot mode using a master build as reference. I did not see any differences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376589</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-30 12:26:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/82478 might have broken Leopard Intel Release (Tests)
The following tests are not passing:
canvas/philip/tests/2d.text.draw.align.center.html
fast/blockflow/broken-ideographic-font.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376779</commentid>
    <comment_count>14</comment_count>
    <who name="Luiz Agostini">luiz</who>
    <bug_when>2011-03-30 16:41:00 -0700</bug_when>
    <thetext>	M	Source/WebCore/ChangeLog
	M	Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
	M	Source/WebCore/platform/network/qt/QNetworkReplyHandler.h
Committed r82478</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86823</attachid>
            <date>2011-03-24 13:46:48 -0700</date>
            <delta_ts>2011-03-29 11:54:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Qt-QNetworkReplyHandler-refactoring-signal-sequence.patch</filename>
            <type>text/plain</type>
            <size>22146</size>
            <attacher name="Luiz Agostini">luiz</attacher>
            
              <data encoding="base64">RnJvbSBkMjJjZGZkZTg5NjAwNWIwODdjODY2N2E2NTVhZDBiNGRkYmJlMzAxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWl6IEFnb3N0aW5pIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFRodSwgMjQgTWFyIDIwMTEgMTc6NDU6NDAgLTAzMDAKU3ViamVjdDogW1BB
VENIXSBbUXRdIFFOZXR3b3JrUmVwbHlIYW5kbGVyIHJlZmFjdG9yaW5nOiBzaWduYWwgc2VxdWVu
Y2UuCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcwNDkKClJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBRTmV0d29y
a1JlcGx5SGFuZGxlci4gVGhlIG1haW4gb2JqZWN0aXZlIGhlcmUgaXMgdG8gY3JlYXRlIHNpbXBs
ZSBpbnZhcmlhbnRzOgoKICAgIDEgLSB0aGF0IHRoZSBzaWduYWxzIG1ldGFkYXRhY2hhbmdlZCwg
cmVhZHlSZWFkIGFuZCBmaW5pc2hlZCB3aWxsIGNvbWUgaW4gdGhpcyBvcmRlci4KICAgIDIgLSB0
aGF0IHNpZ25hbHMgbWV0YWRhdGFjaGFuZ2VkIGFuZCBmaW5pc2hlZCB3aWxsIHdpbGwgYmUgY2Fs
bGVkIGV4YWN0bHkgb25jZS4KCkhhdmluZyB0aGVzZSBpbnZhcmlhbnRzIGZ1cnRoZXIgc2ltcGxp
ZmljYXRpb25zIHdpbGwgYmUgcG9zc2libGUgYW5kIHdpbGwgY29tZSBpbiBmdXR1cmUgcGF0Y2hl
cy4KCkNsYXNzIFFOZXR3b3JrUmVwbHlXcmFwcGVyIHdhcyBjcmVhdGVkIHRvIGhhbmRsZSBRTmV0
d29ya1JlcGx5IG9iamVjdC4gVG8gY29ubmVjdCB0byB0aGUgc2lnbmFscyBvZiBpdAppbnN0ZWFk
IG9mIGNvbm5lY3RpbmcgdG8gdGhlIHNpZ25hbHMgb2YgUU5ldHdvcmtSZXBseSBpcyB3aGF0IGd1
YXJhbnRlZXMgdGhlIHNlcXVlbmNlIG9mIHRoZSBzaWduYWxzLgpRTmV0d29ya1JlcGx5V3JhcHBl
ciB3aWxsIGJlIHVzZWQgaW4gZnV0dXJlIHRvIHBlcmZvcm0gbWltZSB0eXBlIHNuaWZmaW5nIGJl
Zm9yZSBzZW5kaW5nCm1ldGFkYXRhY2hhbmdlZCBzaWduYWwuCgoqIHBsYXRmb3JtL25ldHdvcmsv
cXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwOgooV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBw
ZXI6OlFOZXR3b3JrUmVwbHlXcmFwcGVyKToKKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlXcmFwcGVy
Ojp+UU5ldHdvcmtSZXBseVdyYXBwZXIpOgooV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBwZXI6
OnJlbGVhc2UpOgooV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBwZXI6OnJlc2V0Q29ubmVjdGlv
bnMpOgooV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBwZXI6OnJlY2VpdmVNZXRhRGF0YSk6CihX
ZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVjZWl2ZUZpbmlzaGVkKToKKFdlYkNvcmU6
OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpRTmV0d29ya1JlcGx5SGFuZGxlcik6CihXZWJDb3JlOjpR
TmV0d29ya1JlcGx5SGFuZGxlcjo6cmVzZXRTdGF0ZSk6CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5
SGFuZGxlcjo6cmVsZWFzZSk6CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6ZmluaXNo
KToKKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzZW5kUmVzcG9uc2VJZk5lZWRlZCk6
CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVkaXJlY3QpOgooV2ViQ29yZTo6UU5l
dHdvcmtSZXBseUhhbmRsZXI6OmZvcndhcmREYXRhKToKKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlI
YW5kbGVyOjpzZW5kTmV0d29ya1JlcXVlc3QpOgooV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRs
ZXI6OnN0YXJ0KToKKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmg6
CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVwbHkpOgooV2ViQ29yZTo6UU5ldHdv
cmtSZXBseVdyYXBwZXI6OnJlZGlyZWN0VXJsKToKKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlXcmFw
cGVyOjplbmNvZGluZyk6CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6b2ZmaWNpYWxN
aW1lVHlwZSk6CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVwbHkpOgotLS0KIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0MiAr
KysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAgICB8
ICAyMDIgKysrKysrKysrKysrKystLS0tLS0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3
b3JrUmVwbHlIYW5kbGVyLmggICAgIHwgICAzOCArKysrLQogMyBmaWxlcyBjaGFuZ2VkLCAyMTcg
aW5zZXJ0aW9ucygrKSwgNjUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDFiMjlmMDcuLmJi
ZjI0ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMS0wMy0yNCAgTHVpeiBBZ29z
dGluaSAgPGx1aXouYWdvc3RpbmlAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFOZXR3b3JrUmVwbHlIYW5kbGVyIHJl
ZmFjdG9yaW5nOiBzaWduYWwgc2VxdWVuY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NzA0OQorCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0
ZXAgaW4gUU5ldHdvcmtSZXBseUhhbmRsZXIuIFRoZSBtYWluIG9iamVjdGl2ZSBoZXJlIGlzIHRv
IGNyZWF0ZSBzaW1wbGUgaW52YXJpYW50czoKKworICAgICAgICAgICAgMSAtIHRoYXQgdGhlIHNp
Z25hbHMgbWV0YWRhdGFjaGFuZ2VkLCByZWFkeVJlYWQgYW5kIGZpbmlzaGVkIHdpbGwgY29tZSBp
biB0aGlzIG9yZGVyLgorICAgICAgICAgICAgMiAtIHRoYXQgc2lnbmFscyBtZXRhZGF0YWNoYW5n
ZWQgYW5kIGZpbmlzaGVkIHdpbGwgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlLgorCisgICAg
ICAgIEhhdmluZyB0aGVzZSBpbnZhcmlhbnRzIGZ1cnRoZXIgc2ltcGxpZmljYXRpb25zIHdpbGwg
YmUgcG9zc2libGUgYW5kIHdpbGwgY29tZSBpbiBmdXR1cmUgcGF0Y2hlcy4KKworICAgICAgICBD
bGFzcyBRTmV0d29ya1JlcGx5V3JhcHBlciB3YXMgY3JlYXRlZCB0byBoYW5kbGUgUU5ldHdvcmtS
ZXBseSBvYmplY3QuIFRvIGNvbm5lY3QgdG8gdGhlIHNpZ25hbHMgb2YgaXQKKyAgICAgICAgaW5z
dGVhZCBvZiBjb25uZWN0aW5nIHRvIHRoZSBzaWduYWxzIG9mIFFOZXR3b3JrUmVwbHkgaXMgd2hh
dCBndWFyYW50ZWVzIHRoZSBzZXF1ZW5jZSBvZiB0aGUgc2lnbmFscy4KKyAgICAgICAgUU5ldHdv
cmtSZXBseVdyYXBwZXIgd2lsbCBiZSB1c2VkIGluIGZ1dHVyZSB0byBwZXJmb3JtIG1pbWUgdHlw
ZSBzbmlmZmluZyBiZWZvcmUgc2VuZGluZworICAgICAgICBtZXRhZGF0YWNoYW5nZWQgc2lnbmFs
LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6UU5ldHdvcmtSZXBs
eVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBwZXI6On5RTmV0
d29ya1JlcGx5V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBl
cjo6cmVsZWFzZSk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVz
ZXRDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6
cmVjZWl2ZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlXcmFwcGVy
OjpyZWNlaXZlRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRs
ZXI6OlFOZXR3b3JrUmVwbHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVw
bHlIYW5kbGVyOjpyZXNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlI
YW5kbGVyOjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVy
OjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI6OnNlbmRS
ZXNwb25zZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVy
OjpyZWRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6Zm9y
d2FyZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI6OnNlbmRO
ZXR3b3JrUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6
c3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRs
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlXcmFwcGVyOjpyZXBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVkaXJlY3RVcmwpOgorICAg
ICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBwZXI6OmVuY29kaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlXcmFwcGVyOjpvZmZpY2lhbE1pbWVUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpyZXBseSk6CisKIDIwMTEtMDMtMjQg
IEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxl
ci5jcHAKaW5kZXggYzJiZjE2My4uNmViZjFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAKQEAg
LTE0OSw2ICsxNDksNzggQEAgYm9vbCBGb3JtRGF0YUlPRGV2aWNlOjppc1NlcXVlbnRpYWwoKSBj
b25zdAogICAgIHJldHVybiB0cnVlOwogfQogCitRTmV0d29ya1JlcGx5V3JhcHBlcjo6UU5ldHdv
cmtSZXBseVdyYXBwZXIoUU5ldHdvcmtSZXBseSogcmVwbHksIFFPYmplY3QqIHBhcmVudCkKKyAg
ICA6IFFPYmplY3QocGFyZW50KQorICAgICwgbV9yZXBseShyZXBseSkKK3sKKyAgICBRX0FTU0VS
VChtX3JlcGx5KTsKKworICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKG1ldGFEYXRhQ2hhbmdl
ZCgpKSwgdGhpcywgU0xPVChyZWNlaXZlTWV0YURhdGEoKSkpOworICAgIGNvbm5lY3QobV9yZXBs
eSwgU0lHTkFMKHJlYWR5UmVhZCgpKSwgdGhpcywgU0xPVChyZWNlaXZlTWV0YURhdGEoKSkpOwor
ICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKGZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKHJlY2Vp
dmVNZXRhRGF0YSgpKSk7CisKKyAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTCh1cGxvYWRQcm9n
cmVzcyhxaW50NjQsIHFpbnQ2NCkpLCB0aGlzLCBTSUdOQUwodXBsb2FkUHJvZ3Jlc3MocWludDY0
LCBxaW50NjQpKSk7Cit9CisKK1FOZXR3b3JrUmVwbHlXcmFwcGVyOjp+UU5ldHdvcmtSZXBseVdy
YXBwZXIoKQoreworICAgIGlmIChtX3JlcGx5KQorICAgICAgICBtX3JlcGx5LT5kZWxldGVMYXRl
cigpOworfQorCitRTmV0d29ya1JlcGx5KiBRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVsZWFzZSgp
Cit7CisgICAgaWYgKCFtX3JlcGx5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFFOZXR3b3Jr
UmVwbHkqIHJlcGx5ID0gbV9yZXBseTsKKyAgICBtX3JlcGx5ID0gMDsKKyAgICBkaXNjb25uZWN0
KHJlcGx5LCAwLCB0aGlzLCAwKTsKKyAgICByZXBseS0+c2V0UGFyZW50KDApOworICAgIHJldHVy
biByZXBseTsKK30KKwordm9pZCBRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVzZXRDb25uZWN0aW9u
cygpCit7CisgICAgZGlzY29ubmVjdChtX3JlcGx5LCAwLCB0aGlzLCAwKTsKKyAgICBRQ29yZUFw
cGxpY2F0aW9uOjpyZW1vdmVQb3N0ZWRFdmVudHModGhpcywgUUV2ZW50OjpNZXRhQ2FsbCk7Cit9
CisKK3ZvaWQgUU5ldHdvcmtSZXBseVdyYXBwZXI6OnJlY2VpdmVNZXRhRGF0YSgpCit7CisgICAg
cmVzZXRDb25uZWN0aW9ucygpOworCisgICAgbV9yZWRpcmVjdFVybCA9IG1fcmVwbHktPmF0dHJp
YnV0ZShRTmV0d29ya1JlcXVlc3Q6OlJlZGlyZWN0aW9uVGFyZ2V0QXR0cmlidXRlKS50b1VybCgp
OworICAgIGlmIChtX3JlZGlyZWN0VXJsLmlzVmFsaWQoKSkgeworICAgICAgICBlbWl0IG1ldGFE
YXRhQ2hhbmdlZCgpOworICAgICAgICBlbWl0IGZpbmlzaGVkKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBXVEY6OlN0cmluZyBjb250ZW50VHlwZSA9IG1fcmVwbHktPmhlYWRlcihR
TmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRUeXBlSGVhZGVyKS50b1N0cmluZygpOworICAgIG1fZW5j
b2RpbmcgPSBleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpOworICAgIG1f
b2ZmaWNpYWxNaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29udGVudFR5
cGUpOworCisgICAgZW1pdCBtZXRhRGF0YUNoYW5nZWQoKTsKKworICAgIGlmIChtX3JlcGx5LT5i
eXRlc0F2YWlsYWJsZSgpKQorICAgICAgICBlbWl0IHJlYWR5UmVhZCgpOworCisgICAgaWYgKG1f
cmVwbHktPmlzRmluaXNoZWQoKSkgeworICAgICAgICBlbWl0IGZpbmlzaGVkKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTChyZWFkeVJlYWQo
KSksIHRoaXMsIFNJR05BTChyZWFkeVJlYWQoKSkpOworICAgIGNvbm5lY3QobV9yZXBseSwgU0lH
TkFMKGZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKHJlY2VpdmVGaW5pc2hlZCgpKSk7Cit9CisKK3Zv
aWQgUU5ldHdvcmtSZXBseVdyYXBwZXI6OnJlY2VpdmVGaW5pc2hlZCgpCit7CisgICAgcmVzZXRD
b25uZWN0aW9ucygpOworICAgIGVtaXQgZmluaXNoZWQoKTsKK30KKwogU3RyaW5nIFFOZXR3b3Jr
UmVwbHlIYW5kbGVyOjpodHRwTWV0aG9kKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fbWV0aG9k
KSB7CkBAIC0xNzIsNyArMjQ0LDcgQEAgU3RyaW5nIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpodHRw
TWV0aG9kKCkgY29uc3QKIAogUU5ldHdvcmtSZXBseUhhbmRsZXI6OlFOZXR3b3JrUmVwbHlIYW5k
bGVyKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIExvYWRUeXBlIGxvYWRUeXBlLCBib29sIGRlZmVy
cmVkKQogICAgIDogUU9iamVjdCgwKQotICAgICwgbV9yZXBseSgwKQorICAgICwgbV9yZXBseVdy
YXBwZXIoMCkKICAgICAsIG1fcmVzb3VyY2VIYW5kbGUoaGFuZGxlKQogICAgICwgbV9sb2FkVHlw
ZShsb2FkVHlwZSkKICAgICAsIG1fZGVmZXJyZWQoZGVmZXJyZWQpCkBAIC0yMTUsOSArMjg3LDkg
QEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVzZXRTdGF0ZSgpCiAgICAgbV9jYWxsU2Vu
ZFJlc3BvbnNlSWZOZWVkZWRPblJlc3VtZSA9IGZhbHNlOwogICAgIG1fY2FsbEZvcndhcmREYXRh
T25SZXN1bWUgPSBmYWxzZTsKIAotICAgIGlmIChtX3JlcGx5KSB7Ci0gICAgICAgIG1fcmVwbHkt
PmRlbGV0ZUxhdGVyKCk7Ci0gICAgICAgIG1fcmVwbHkgPSAwOworICAgIGlmIChtX3JlcGx5V3Jh
cHBlcikgeworICAgICAgICBkZWxldGUgbV9yZXBseVdyYXBwZXI7CisgICAgICAgIG1fcmVwbHlX
cmFwcGVyID0gMDsKICAgICB9CiB9CiAKQEAgLTI2MSwxMyArMzMzLDEyIEBAIHZvaWQgUU5ldHdv
cmtSZXBseUhhbmRsZXI6OmFib3J0KCkKIAogUU5ldHdvcmtSZXBseSogUU5ldHdvcmtSZXBseUhh
bmRsZXI6OnJlbGVhc2UoKQogewotICAgIGlmICghbV9yZXBseSkKKyAgICBpZiAoIW1fcmVwbHlX
cmFwcGVyKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFFOZXR3b3JrUmVwbHkqIHJlcGx5ID0g
bV9yZXBseTsKLSAgICBtX3JlcGx5ID0gMDsKLSAgICBkaXNjb25uZWN0KHJlcGx5LCAwLCB0aGlz
LCAwKTsKLSAgICByZXBseS0+c2V0UGFyZW50KDApOworICAgIFFOZXR3b3JrUmVwbHkqIHJlcGx5
ID0gbV9yZXBseVdyYXBwZXItPnJlbGVhc2UoKTsKKyAgICBkZWxldGUgbV9yZXBseVdyYXBwZXI7
CisgICAgbV9yZXBseVdyYXBwZXIgPSAwOwogICAgIHJldHVybiByZXBseTsKIH0KIApAQCAtMjky
LDcgKzM2Myw3IEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OmZpbmlzaCgpCiAgICAgaWYg
KG1fZGVmZXJyZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9yZXBseSkKKyAgICBp
ZiAoIW1fcmVwbHlXcmFwcGVyIHx8ICFtX3JlcGx5V3JhcHBlci0+cmVwbHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc2VuZFJlc3BvbnNlSWZOZWVkZWQoKTsKQEAgLTMwMiw4ICszNzMsOCBA
QCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpmaW5pc2goKQogCiAgICAgUmVzb3VyY2VIYW5k
bGVDbGllbnQqIGNsaWVudCA9IG1fcmVzb3VyY2VIYW5kbGUtPmNsaWVudCgpOwogICAgIGlmICgh
Y2xpZW50KSB7Ci0gICAgICAgIG1fcmVwbHktPmRlbGV0ZUxhdGVyKCk7Ci0gICAgICAgIG1fcmVw
bHkgPSAwOworICAgICAgICBkZWxldGUgbV9yZXBseVdyYXBwZXI7CisgICAgICAgIG1fcmVwbHlX
cmFwcGVyID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzEzLDI0ICszODQsMjQg
QEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6ZmluaXNoKCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghbV9yZXBseS0+ZXJyb3IoKSB8fCBzaG91bGRJZ25vcmVIdHRwRXJy
b3IobV9yZXBseSwgbV9yZXNwb25zZUNvbnRhaW5zRGF0YSkpCisgICAgaWYgKCFtX3JlcGx5V3Jh
cHBlci0+cmVwbHkoKS0+ZXJyb3IoKSB8fCBzaG91bGRJZ25vcmVIdHRwRXJyb3IobV9yZXBseVdy
YXBwZXItPnJlcGx5KCksIG1fcmVzcG9uc2VDb250YWluc0RhdGEpKQogICAgICAgICBjbGllbnQt
PmRpZEZpbmlzaExvYWRpbmcobV9yZXNvdXJjZUhhbmRsZSwgMCk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIFFVcmwgdXJsID0gbV9yZXBseS0+dXJsKCk7Ci0gICAgICAgIGludCBodHRwU3RhdHVzQ29k
ZSA9IG1fcmVwbHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0
cmlidXRlKS50b0ludCgpOworICAgICAgICBRVXJsIHVybCA9IG1fcmVwbHlXcmFwcGVyLT5yZXBs
eSgpLT51cmwoKTsKKyAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gbV9yZXBseVdyYXBwZXIt
PnJlcGx5KCktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmli
dXRlKS50b0ludCgpOwogCiAgICAgICAgIGlmIChodHRwU3RhdHVzQ29kZSkgewotICAgICAgICAg
ICAgUmVzb3VyY2VFcnJvciBlcnJvcigiSFRUUCIsIGh0dHBTdGF0dXNDb2RlLCB1cmwudG9TdHJp
bmcoKSwgbV9yZXBseS0+YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFJlYXNvblBocmFz
ZUF0dHJpYnV0ZSkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9y
KCJIVFRQIiwgaHR0cFN0YXR1c0NvZGUsIHVybC50b1N0cmluZygpLCBtX3JlcGx5V3JhcHBlci0+
cmVwbHkoKS0+YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFJlYXNvblBocmFzZUF0dHJp
YnV0ZSkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBjbGllbnQtPmRpZEZhaWwobV9yZXNvdXJj
ZUhhbmRsZSwgZXJyb3IpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUmVzb3VyY2VF
cnJvciBlcnJvcigiUXROZXR3b3JrIiwgbV9yZXBseS0+ZXJyb3IoKSwgdXJsLnRvU3RyaW5nKCks
IG1fcmVwbHktPmVycm9yU3RyaW5nKCkpOworICAgICAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJv
cigiUXROZXR3b3JrIiwgbV9yZXBseVdyYXBwZXItPnJlcGx5KCktPmVycm9yKCksIHVybC50b1N0
cmluZygpLCBtX3JlcGx5V3JhcHBlci0+cmVwbHkoKS0+ZXJyb3JTdHJpbmcoKSk7CiAgICAgICAg
ICAgICBjbGllbnQtPmRpZEZhaWwobV9yZXNvdXJjZUhhbmRsZSwgZXJyb3IpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKG1fcmVwbHkpIHsKLSAgICAgICAgbV9yZXBseS0+ZGVsZXRlTGF0
ZXIoKTsKLSAgICAgICAgbV9yZXBseSA9IDA7CisgICAgaWYgKG1fcmVwbHlXcmFwcGVyKSB7Cisg
ICAgICAgIGRlbGV0ZSBtX3JlcGx5V3JhcHBlcjsKKyAgICAgICAgbV9yZXBseVdyYXBwZXIgPSAw
OwogICAgIH0KIH0KIApAQCAtMzQyLDEwICs0MTMsMTAgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFu
ZGxlcjo6c2VuZFJlc3BvbnNlSWZOZWVkZWQoKQogICAgIGlmIChtX2RlZmVycmVkKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIW1fcmVwbHkpCisgICAgaWYgKCFtX3JlcGx5V3JhcHBlciB8
fCAhbV9yZXBseVdyYXBwZXItPnJlcGx5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X3JlcGx5LT5lcnJvcigpICYmICFzaG91bGRJZ25vcmVIdHRwRXJyb3IobV9yZXBseSwgbV9yZXNw
b25zZUNvbnRhaW5zRGF0YSkpCisgICAgaWYgKG1fcmVwbHlXcmFwcGVyLT5yZXBseSgpLT5lcnJv
cigpICYmICFzaG91bGRJZ25vcmVIdHRwRXJyb3IobV9yZXBseVdyYXBwZXItPnJlcGx5KCksIG1f
cmVzcG9uc2VDb250YWluc0RhdGEpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAod2FzQWJv
cnRlZCgpKQpAQCAtMzU5LDE4ICs0MzAsMTggQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6
c2VuZFJlc3BvbnNlSWZOZWVkZWQoKQogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm47
CiAKLSAgICBXVEY6OlN0cmluZyBjb250ZW50VHlwZSA9IG1fcmVwbHktPmhlYWRlcihRTmV0d29y
a1JlcXVlc3Q6OkNvbnRlbnRUeXBlSGVhZGVyKS50b1N0cmluZygpOworICAgIFdURjo6U3RyaW5n
IGNvbnRlbnRUeXBlID0gbV9yZXBseVdyYXBwZXItPnJlcGx5KCktPmhlYWRlcihRTmV0d29ya1Jl
cXVlc3Q6OkNvbnRlbnRUeXBlSGVhZGVyKS50b1N0cmluZygpOwogICAgIFdURjo6U3RyaW5nIGVu
Y29kaW5nID0gZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKGNvbnRlbnRUeXBlKTsKICAgICBX
VEY6OlN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29udGVu
dFR5cGUpOwogCiAgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBsZXQn
cyB0cnkgdG8gZ3Vlc3MgZnJvbSB0aGUgZXh0ZW5zaW9uCi0gICAgICAgIG1pbWVUeXBlID0gTUlN
RVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKG1fcmVwbHktPnVybCgpLnBhdGgoKSk7
CisgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRo
KG1fcmVwbHlXcmFwcGVyLT5yZXBseSgpLT51cmwoKS5wYXRoKCkpOwogICAgIH0KIAotICAgIEtV
UkwgdXJsKG1fcmVwbHktPnVybCgpKTsKKyAgICBLVVJMIHVybChtX3JlcGx5V3JhcHBlci0+cmVw
bHkoKS0+dXJsKCkpOwogICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UodXJsLCBtaW1lVHlw
ZS5sb3dlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yZXBseS0+aGVhZGVy
KFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudExlbmd0aEhlYWRlcikudG9Mb25nTG9uZygpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yZXBseVdyYXBwZXItPnJlcGx5KCktPmhlYWRl
cihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRMZW5ndGhIZWFkZXIpLnRvTG9uZ0xvbmcoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCBTdHJpbmcoKSk7CiAKICAgICBp
ZiAodXJsLmlzTG9jYWxGaWxlKCkpIHsKQEAgLTM3OSwxMCArNDUwLDEwIEBAIHZvaWQgUU5ldHdv
cmtSZXBseUhhbmRsZXI6OnNlbmRSZXNwb25zZUlmTmVlZGVkKCkKICAgICB9CiAKICAgICAvLyBU
aGUgc3RhdHVzIGNvZGUgaXMgZXF1YWwgdG8gMCBmb3IgcHJvdG9jb2xzIG5vdCBpbiB0aGUgSFRU
UCBmYW1pbHkuCi0gICAgaW50IHN0YXR1c0NvZGUgPSBtX3JlcGx5LT5hdHRyaWJ1dGUoUU5ldHdv
cmtSZXF1ZXN0OjpIdHRwU3RhdHVzQ29kZUF0dHJpYnV0ZSkudG9JbnQoKTsKKyAgICBpbnQgc3Rh
dHVzQ29kZSA9IG1fcmVwbHlXcmFwcGVyLT5yZXBseSgpLT5hdHRyaWJ1dGUoUU5ldHdvcmtSZXF1
ZXN0OjpIdHRwU3RhdHVzQ29kZUF0dHJpYnV0ZSkudG9JbnQoKTsKIAogICAgIGlmICh1cmwucHJv
dG9jb2xJbkhUVFBGYW1pbHkoKSkgewotICAgICAgICBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUg
PSBmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW9uKFFTdHJpbmc6OmZyb21Bc2NpaSht
X3JlcGx5LT5yYXdIZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb24iKSkpOworICAgICAgICBTdHJp
bmcgc3VnZ2VzdGVkRmlsZW5hbWUgPSBmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW9u
KFFTdHJpbmc6OmZyb21Bc2NpaShtX3JlcGx5V3JhcHBlci0+cmVwbHkoKS0+cmF3SGVhZGVyKCJD
b250ZW50LURpc3Bvc2l0aW9uIikpKTsKIAogICAgICAgICBpZiAoIXN1Z2dlc3RlZEZpbGVuYW1l
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKHN1
Z2dlc3RlZEZpbGVuYW1lKTsKQEAgLTM5MCwxNCArNDYxLDE0IEBAIHZvaWQgUU5ldHdvcmtSZXBs
eUhhbmRsZXI6OnNlbmRSZXNwb25zZUlmTmVlZGVkKCkKICAgICAgICAgICAgIHJlc3BvbnNlLnNl
dFN1Z2dlc3RlZEZpbGVuYW1lKHVybC5sYXN0UGF0aENvbXBvbmVudCgpKTsKIAogICAgICAgICBy
ZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShzdGF0dXNDb2RlKTsKLSAgICAgICAgcmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c1RleHQobV9yZXBseS0+YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0
cFJlYXNvblBocmFzZUF0dHJpYnV0ZSkudG9CeXRlQXJyYXkoKS5jb25zdERhdGEoKSk7CisgICAg
ICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KG1fcmVwbHlXcmFwcGVyLT5yZXBseSgpLT5h
dHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpIdHRwUmVhc29uUGhyYXNlQXR0cmlidXRlKS50b0J5
dGVBcnJheSgpLmNvbnN0RGF0YSgpKTsKIAogICAgICAgICAvLyBBZGQgcmVtYWluaW5nIGhlYWRl
cnMuCi0gICAgICAgIGZvcmVhY2ggKGNvbnN0IFFOZXR3b3JrUmVwbHk6OlJhd0hlYWRlclBhaXIm
IHBhaXIsIG1fcmVwbHktPnJhd0hlYWRlclBhaXJzKCkpCisgICAgICAgIGZvcmVhY2ggKGNvbnN0
IFFOZXR3b3JrUmVwbHk6OlJhd0hlYWRlclBhaXImIHBhaXIsIG1fcmVwbHlXcmFwcGVyLT5yZXBs
eSgpLT5yYXdIZWFkZXJQYWlycygpKQogICAgICAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRl
ckZpZWxkKFFTdHJpbmc6OmZyb21Bc2NpaShwYWlyLmZpcnN0KSwgUVN0cmluZzo6ZnJvbUFzY2lp
KHBhaXIuc2Vjb25kKSk7CiAgICAgfQogCi0gICAgUVVybCByZWRpcmVjdGlvbiA9IG1fcmVwbHkt
PmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6OlJlZGlyZWN0aW9uVGFyZ2V0QXR0cmlidXRlKS50
b1VybCgpOworICAgIFFVcmwgcmVkaXJlY3Rpb24gPSBtX3JlcGx5V3JhcHBlci0+cmVwbHkoKS0+
YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6UmVkaXJlY3Rpb25UYXJnZXRBdHRyaWJ1dGUpLnRv
VXJsKCk7CiAgICAgaWYgKHJlZGlyZWN0aW9uLmlzVmFsaWQoKSkgewogICAgICAgICByZWRpcmVj
dChyZXNwb25zZSwgcmVkaXJlY3Rpb24pOwogICAgICAgICByZXR1cm47CkBAIC00MDgsMTIgKzQ3
OSwxMiBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzZW5kUmVzcG9uc2VJZk5lZWRlZCgp
CiAKIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnJlZGlyZWN0KFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBjb25zdCBRVXJsJiByZWRpcmVjdGlvbikKIHsKLSAgICBRVXJsIG5ld1VybCA9
IG1fcmVwbHktPnVybCgpLnJlc29sdmVkKHJlZGlyZWN0aW9uKTsKKyAgICBRVXJsIG5ld1VybCA9
IG1fcmVwbHlXcmFwcGVyLT5yZXBseSgpLT51cmwoKS5yZXNvbHZlZChyZWRpcmVjdGlvbik7CiAK
ICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gbV9yZXNvdXJjZUhhbmRsZS0+Y2xp
ZW50KCk7CiAgICAgQVNTRVJUKGNsaWVudCk7CiAKLSAgICBpbnQgc3RhdHVzQ29kZSA9IG1fcmVw
bHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlKS50
b0ludCgpOworICAgIGludCBzdGF0dXNDb2RlID0gbV9yZXBseVdyYXBwZXItPnJlcGx5KCktPmF0
dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlKS50b0ludCgp
OwogCiAgICAgbV9yZWRpcmVjdGlvblRyaWVzLS07CiAgICAgaWYgKCFtX3JlZGlyZWN0aW9uVHJp
ZXMpIHsKQEAgLTQ1OSw3ICs1MzAsNyBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpmb3J3
YXJkRGF0YSgpCiAgICAgaWYgKG1fZGVmZXJyZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX3JlcGx5LT5ieXRlc0F2YWlsYWJsZSgpKQorICAgIGlmIChtX3JlcGx5V3JhcHBlci0+cmVw
bHkoKS0+Ynl0ZXNBdmFpbGFibGUoKSkKICAgICAgICAgbV9yZXNwb25zZUNvbnRhaW5zRGF0YSA9
IHRydWU7CiAKICAgICBzZW5kUmVzcG9uc2VJZk5lZWRlZCgpOwpAQCAtNDcxLDcgKzU0Miw3IEBA
IHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OmZvcndhcmREYXRhKCkKICAgICBpZiAod2FzQWJv
cnRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBRQnl0ZUFycmF5IGRhdGEgPSBtX3JlcGx5
LT5yZWFkKG1fcmVwbHktPmJ5dGVzQXZhaWxhYmxlKCkpOworICAgIFFCeXRlQXJyYXkgZGF0YSA9
IG1fcmVwbHlXcmFwcGVyLT5yZXBseSgpLT5yZWFkKG1fcmVwbHlXcmFwcGVyLT5yZXBseSgpLT5i
eXRlc0F2YWlsYWJsZSgpKTsKIAogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBt
X3Jlc291cmNlSGFuZGxlLT5jbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKQEAgLTQ5NiwxMSAr
NTY3LDggQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6dXBsb2FkUHJvZ3Jlc3MocWludDY0
IGJ5dGVzU2VudCwgcWludDY0IGJ5dGVzVG90YWwpCiAgICAgY2xpZW50LT5kaWRTZW5kRGF0YSht
X3Jlc291cmNlSGFuZGxlLCBieXRlc1NlbnQsIGJ5dGVzVG90YWwpOwogfQogCi12b2lkIFFOZXR3
b3JrUmVwbHlIYW5kbGVyOjpzdGFydCgpCitRTmV0d29ya1JlcGx5KiBRTmV0d29ya1JlcGx5SGFu
ZGxlcjo6c2VuZE5ldHdvcmtSZXF1ZXN0KCkKIHsKLSAgICBBU1NFUlQoIW1faGFzU3RhcnRlZCk7
Ci0gICAgbV9oYXNTdGFydGVkID0gdHJ1ZTsKLQogICAgIGlmIChtX2xvYWRUeXBlID09IFN5bmNo
cm9ub3VzTG9hZCkKICAgICAgICAgbV9yZXF1ZXN0LnNldEF0dHJpYnV0ZShnU3luY2hyb25vdXNO
ZXR3b3JrUmVxdWVzdEF0dHJpYnV0ZSwgdHJ1ZSk7CiAKQEAgLTUxMSw3ICs1NzksNyBAQCB2b2lk
IFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzdGFydCgpCiAgICAgICAgIG1hbmFnZXIgPSBkLT5tX2Nv
bnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCk7CiAKICAgICBpZiAoIW1hbmFnZXIpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBjb25zdCBRVXJsIHVybCA9IG1f
cmVxdWVzdC51cmwoKTsKICAgICBjb25zdCBRU3RyaW5nIHNjaGVtZSA9IHVybC5zY2hlbWUoKTsK
QEAgLTUyNCw1OSArNTkyLDY3IEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnN0YXJ0KCkK
IAogICAgIHN3aXRjaCAobV9tZXRob2QpIHsKICAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01h
bmFnZXI6OkdldE9wZXJhdGlvbjoKLSAgICAgICAgICAgIG1fcmVwbHkgPSBtYW5hZ2VyLT5nZXQo
bV9yZXF1ZXN0KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1hbmFn
ZXItPmdldChtX3JlcXVlc3QpOwogICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6
UG9zdE9wZXJhdGlvbjogewotICAgICAgICAgICAgRm9ybURhdGFJT0RldmljZSogcG9zdERldmlj
ZSA9IG5ldyBGb3JtRGF0YUlPRGV2aWNlKGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCkpOyAK
KyAgICAgICAgICAgIEZvcm1EYXRhSU9EZXZpY2UqIHBvc3REZXZpY2UgPSBuZXcgRm9ybURhdGFJ
T0RldmljZShkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpKTsKICAgICAgICAgICAgIC8vIFdl
IG1heSBiZSB1cGxvYWRpbmcgZmlsZXMgc28gcHJldmVudCBRTlIgZnJvbSBidWZmZXJpbmcgZGF0
YQogICAgICAgICAgICAgbV9yZXF1ZXN0LnNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRl
bnRMZW5ndGhIZWFkZXIsIHBvc3REZXZpY2UtPmdldEZvcm1EYXRhU2l6ZSgpKTsKICAgICAgICAg
ICAgIG1fcmVxdWVzdC5zZXRBdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpEb05vdEJ1ZmZlclVw
bG9hZERhdGFBdHRyaWJ1dGUsIFFWYXJpYW50KHRydWUpKTsKLSAgICAgICAgICAgIG1fcmVwbHkg
PSBtYW5hZ2VyLT5wb3N0KG1fcmVxdWVzdCwgcG9zdERldmljZSk7Ci0gICAgICAgICAgICBwb3N0
RGV2aWNlLT5zZXRQYXJlbnQobV9yZXBseSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIFFOZXR3b3JrUmVwbHkqIHJlc3VsdCA9IG1hbmFnZXItPnBvc3QobV9yZXF1ZXN0LCBwb3N0
RGV2aWNlKTsKKyAgICAgICAgICAgIHBvc3REZXZpY2UtPnNldFBhcmVudChyZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICBjYXNlIFFOZXR3b3Jr
QWNjZXNzTWFuYWdlcjo6SGVhZE9wZXJhdGlvbjoKLSAgICAgICAgICAgIG1fcmVwbHkgPSBtYW5h
Z2VyLT5oZWFkKG1fcmVxdWVzdCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBtYW5hZ2VyLT5oZWFkKG1fcmVxdWVzdCk7CiAgICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nl
c3NNYW5hZ2VyOjpQdXRPcGVyYXRpb246IHsKLSAgICAgICAgICAgIEZvcm1EYXRhSU9EZXZpY2Uq
IHB1dERldmljZSA9IG5ldyBGb3JtRGF0YUlPRGV2aWNlKGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBC
b2R5KCkpOyAKKyAgICAgICAgICAgIEZvcm1EYXRhSU9EZXZpY2UqIHB1dERldmljZSA9IG5ldyBG
b3JtRGF0YUlPRGV2aWNlKGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCkpOwogICAgICAgICAg
ICAgLy8gV2UgbWF5IGJlIHVwbG9hZGluZyBmaWxlcyBzbyBwcmV2ZW50IFFOUiBmcm9tIGJ1ZmZl
cmluZyBkYXRhCiAgICAgICAgICAgICBtX3JlcXVlc3Quc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVz
dDo6Q29udGVudExlbmd0aEhlYWRlciwgcHV0RGV2aWNlLT5nZXRGb3JtRGF0YVNpemUoKSk7CiAg
ICAgICAgICAgICBtX3JlcXVlc3Quc2V0QXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6RG9Ob3RC
dWZmZXJVcGxvYWREYXRhQXR0cmlidXRlLCBRVmFyaWFudCh0cnVlKSk7Ci0gICAgICAgICAgICBt
X3JlcGx5ID0gbWFuYWdlci0+cHV0KG1fcmVxdWVzdCwgcHV0RGV2aWNlKTsKLSAgICAgICAgICAg
IHB1dERldmljZS0+c2V0UGFyZW50KG1fcmVwbHkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBRTmV0d29ya1JlcGx5KiByZXN1bHQgPSBtYW5hZ2VyLT5wdXQobV9yZXF1ZXN0LCBw
dXREZXZpY2UpOworICAgICAgICAgICAgcHV0RGV2aWNlLT5zZXRQYXJlbnQocmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBRTmV0d29y
a0FjY2Vzc01hbmFnZXI6OkRlbGV0ZU9wZXJhdGlvbjogewotICAgICAgICAgICAgbV9yZXBseSA9
IG1hbmFnZXItPmRlbGV0ZVJlc291cmNlKG1fcmVxdWVzdCk7Ci0gICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyLT5kZWxldGVSZXNvdXJjZShtX3JlcXVlc3QpOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpDdXN0b21PcGVy
YXRpb246Ci0gICAgICAgICAgICBtX3JlcGx5ID0gbWFuYWdlci0+c2VuZEN1c3RvbVJlcXVlc3Qo
bV9yZXF1ZXN0LCBtX3Jlc291cmNlSGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCku
bGF0aW4xKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJu
IG1hbmFnZXItPnNlbmRDdXN0b21SZXF1ZXN0KG1fcmVxdWVzdCwgbV9yZXNvdXJjZUhhbmRsZS0+
Zmlyc3RSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpLmxhdGluMSgpLmRhdGEoKSk7CiAgICAgICAgIGNh
c2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpVbmtub3duT3BlcmF0aW9uOgogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUU5ldHdvcmtSZXBseUhh
bmRsZXI6OnN0YXJ0KCkKK3sKKyAgICBBU1NFUlQoIW1faGFzU3RhcnRlZCk7CisgICAgbV9oYXNT
dGFydGVkID0gdHJ1ZTsKKworICAgIFFOZXR3b3JrUmVwbHkqIHJlcGx5ID0gc2VuZE5ldHdvcmtS
ZXF1ZXN0KCk7CisgICAgaWYgKCFyZXBseSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV9yZXBs
eS0+c2V0UGFyZW50KHRoaXMpOworICAgIG1fcmVwbHlXcmFwcGVyID0gbmV3IFFOZXR3b3JrUmVw
bHlXcmFwcGVyKHJlcGx5LCB0aGlzKTsKIAotICAgIGlmIChtX2xvYWRUeXBlID09IFN5bmNocm9u
b3VzTG9hZCAmJiBtX3JlcGx5LT5pc0ZpbmlzaGVkKCkpIHsKKyAgICBpZiAobV9sb2FkVHlwZSA9
PSBTeW5jaHJvbm91c0xvYWQgJiYgbV9yZXBseVdyYXBwZXItPnJlcGx5KCktPmlzRmluaXNoZWQo
KSkgewogICAgICAgICAvLyBJZiBzdXBwb3J0ZWQsIGEgc3luY2hyb25vdXMgcmVxdWVzdCB3aWxs
IGJlIGZpbmlzaGVkIGF0IHRoaXMgcG9pbnQsIG5vIG5lZWQgdG8gaG9vayB1cCB0aGUgc2lnbmFs
cy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFM
KGZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKGZpbmlzaCgpKSk7CisgICAgY29ubmVjdChtX3JlcGx5
V3JhcHBlciwgU0lHTkFMKGZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKGZpbmlzaCgpKSk7CiAKICAg
ICAvLyBGb3IgaHR0cChzKSB3ZSBrbm93IHRoYXQgdGhlIGhlYWRlcnMgYXJlIGNvbXBsZXRlIHVw
b24gbWV0YURhdGFDaGFuZ2VkKCkgZW1pc3Npb24sIHNvIHdlCiAgICAgLy8gY2FuIHNlbmQgdGhl
IHJlc3BvbnNlIGFzIGVhcmx5IGFzIHBvc3NpYmxlCisgICAgY29uc3QgUVN0cmluZyBzY2hlbWUg
PSBtX3JlcXVlc3QudXJsKCkuc2NoZW1lKCk7CiAgICAgaWYgKHNjaGVtZSA9PSBRTGF0aW4xU3Ry
aW5nKCJodHRwIikgfHwgc2NoZW1lID09IFFMYXRpbjFTdHJpbmcoImh0dHBzIikpCi0gICAgICAg
IGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKG1ldGFEYXRhQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChz
ZW5kUmVzcG9uc2VJZk5lZWRlZCgpKSk7CisgICAgICAgIGNvbm5lY3QobV9yZXBseVdyYXBwZXIs
IFNJR05BTChtZXRhRGF0YUNoYW5nZWQoKSksIHRoaXMsIFNMT1Qoc2VuZFJlc3BvbnNlSWZOZWVk
ZWQoKSkpOwogCi0gICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwocmVhZHlSZWFkKCkpLCB0aGlz
LCBTTE9UKGZvcndhcmREYXRhKCkpKTsKKyAgICBjb25uZWN0KG1fcmVwbHlXcmFwcGVyLCBTSUdO
QUwocmVhZHlSZWFkKCkpLCB0aGlzLCBTTE9UKGZvcndhcmREYXRhKCkpKTsKIAogICAgIGlmICht
X3Jlc291cmNlSGFuZGxlLT5maXJzdFJlcXVlc3QoKS5yZXBvcnRVcGxvYWRQcm9ncmVzcygpKQot
ICAgICAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTCh1cGxvYWRQcm9ncmVzcyhxaW50NjQsIHFp
bnQ2NCkpLCB0aGlzLCBTTE9UKHVwbG9hZFByb2dyZXNzKHFpbnQ2NCwgcWludDY0KSkpOworICAg
ICAgICBjb25uZWN0KG1fcmVwbHlXcmFwcGVyLCBTSUdOQUwodXBsb2FkUHJvZ3Jlc3MocWludDY0
LCBxaW50NjQpKSwgdGhpcywgU0xPVCh1cGxvYWRQcm9ncmVzcyhxaW50NjQsIHFpbnQ2NCkpKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9R
TmV0d29ya1JlcGx5SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9x
dC9RTmV0d29ya1JlcGx5SGFuZGxlci5oCmluZGV4IGVjMmFhYjYuLjRiMjAzMjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVw
bHlIYW5kbGVyLmgKQEAgLTM2LDYgKzM2LDM5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IFJlc291cmNlSGFuZGxlOwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAorY2xhc3MgUU5ldHdv
cmtSZXBseVdyYXBwZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoK
KyAgICBRTmV0d29ya1JlcGx5V3JhcHBlcihRTmV0d29ya1JlcGx5KiwgUU9iamVjdCogcGFyZW50
ID0gMCk7CisgICAgflFOZXR3b3JrUmVwbHlXcmFwcGVyKCk7CisKKyAgICBRTmV0d29ya1JlcGx5
KiByZXBseSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbHk7IH0KKyAgICBRTmV0d29ya1JlcGx5KiBy
ZWxlYXNlKCk7CisKKyAgICBRVXJsIHJlZGlyZWN0VXJsKCkgY29uc3QgeyByZXR1cm4gbV9yZWRp
cmVjdFVybDsgfQorICAgIFFTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29k
aW5nOyB9CisgICAgUVN0cmluZyBvZmZpY2lhbE1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9v
ZmZpY2lhbE1pbWVUeXBlOyB9CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGZpbmlzaGVkKCk7Cisg
ICAgdm9pZCBtZXRhRGF0YUNoYW5nZWQoKTsKKyAgICB2b2lkIHJlYWR5UmVhZCgpOworICAgIHZv
aWQgdXBsb2FkUHJvZ3Jlc3MocWludDY0IGJ5dGVzU2VudCwgcWludDY0IGJ5dGVzVG90YWwpOwor
Citwcml2YXRlIFFfU0xPVFM6CisgICAgdm9pZCByZWNlaXZlTWV0YURhdGEoKTsKKyAgICB2b2lk
IHJlY2VpdmVGaW5pc2hlZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgcmVzZXRDb25uZWN0aW9u
cygpOworCisgICAgUU5ldHdvcmtSZXBseSogbV9yZXBseTsKKyAgICBRVXJsIG1fcmVkaXJlY3RV
cmw7CisKKyAgICBRU3RyaW5nIG1fZW5jb2Rpbmc7CisgICAgUVN0cmluZyBtX29mZmljaWFsTWlt
ZVR5cGU7Cit9OworCiBjbGFzcyBRTmV0d29ya1JlcGx5SGFuZGxlciA6IHB1YmxpYyBRT2JqZWN0
CiB7CiAgICAgUV9PQkpFQ1QKQEAgLTQ4LDcgKzgxLDcgQEAgcHVibGljOgogICAgIFFOZXR3b3Jr
UmVwbHlIYW5kbGVyKFJlc291cmNlSGFuZGxlKiwgTG9hZFR5cGUsIGJvb2wgZGVmZXJyZWQgPSBm
YWxzZSk7CiAgICAgdm9pZCBzZXRMb2FkaW5nRGVmZXJyZWQoYm9vbCk7CiAKLSAgICBRTmV0d29y
a1JlcGx5KiByZXBseSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbHk7IH0KKyAgICBRTmV0d29ya1Jl
cGx5KiByZXBseSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbHlXcmFwcGVyID8gbV9yZXBseVdyYXBw
ZXItPnJlcGx5KCkgOiAwOyB9CiAKICAgICB2b2lkIGFib3J0KCk7CiAKQEAgLTY3LDggKzEwMCw5
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXN1bWVEZWZlcnJlZExvYWQoKTsKICAgICB2b2lkIHJl
ZGlyZWN0KFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBRVXJsJik7CiAgICAgYm9vbCB3YXNBYm9y
dGVkKCkgY29uc3QgeyByZXR1cm4gIW1fcmVzb3VyY2VIYW5kbGU7IH0KKyAgICBRTmV0d29ya1Jl
cGx5KiBzZW5kTmV0d29ya1JlcXVlc3QoKTsKIAotICAgIFFOZXR3b3JrUmVwbHkqIG1fcmVwbHk7
CisgICAgUU5ldHdvcmtSZXBseVdyYXBwZXIqIG1fcmVwbHlXcmFwcGVyOwogICAgIFJlc291cmNl
SGFuZGxlKiBtX3Jlc291cmNlSGFuZGxlOwogICAgIGJvb2wgbV9yZWRpcmVjdGVkOwogICAgIGJv
b2wgbV9yZXNwb25zZVNlbnQ7Ci0tIAoxLjcuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87382</attachid>
            <date>2011-03-29 11:54:07 -0700</date>
            <delta_ts>2011-03-29 14:29:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Qt-QNetworkReplyHandler-refactoring-signal-sequence.patch</filename>
            <type>text/plain</type>
            <size>22443</size>
            <attacher name="Luiz Agostini">luiz</attacher>
            
              <data encoding="base64">RnJvbSA4MTA2Nzg4ZTBhMDk0NGM3YWNhZTQ5NTJjYjQ1Y2U5MmJmODJhMTk0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBMdWl6IEFnb3N0aW5pIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFRodSwgMjQgTWFyIDIwMTEgMTc6NDU6NDAgLTAzMDAKU3ViamVjdDogW1BB
VENIXSBbUXRdIFFOZXR3b3JrUmVwbHlIYW5kbGVyIHJlZmFjdG9yaW5nOiBzaWduYWwgc2VxdWVu
Y2UuCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTcwNDkKClJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBRTmV0d29y
a1JlcGx5SGFuZGxlci4gVGhlIG1haW4gb2JqZWN0aXZlIGhlcmUgaXMgdG8gY3JlYXRlIHNpbXBs
ZSBpbnZhcmlhbnRzOgoKICAgIDEgLSB0aGF0IHRoZSBzaWduYWxzIG1ldGFkYXRhY2hhbmdlZCwg
cmVhZHlSZWFkIGFuZCBmaW5pc2hlZCB3aWxsIGNvbWUgaW4gdGhpcyBvcmRlci4KICAgIDIgLSB0
aGF0IHNpZ25hbHMgbWV0YWRhdGFjaGFuZ2VkIGFuZCBmaW5pc2hlZCB3aWxsIHdpbGwgYmUgY2Fs
bGVkIGV4YWN0bHkgb25jZS4KCkhhdmluZyB0aGVzZSBpbnZhcmlhbnRzIGZ1cnRoZXIgc2ltcGxp
ZmljYXRpb25zIHdpbGwgYmUgcG9zc2libGUgYW5kIHdpbGwgY29tZSBpbiBmdXR1cmUgcGF0Y2hl
cy4KCkNsYXNzIFFOZXR3b3JrUmVwbHlXcmFwcGVyIHdhcyBjcmVhdGVkIHRvIGhhbmRsZSBRTmV0
d29ya1JlcGx5IG9iamVjdC4gVG8gY29ubmVjdCB0byB0aGUgc2lnbmFscyBvZiBpdAppbnN0ZWFk
IG9mIGNvbm5lY3RpbmcgdG8gdGhlIHNpZ25hbHMgb2YgUU5ldHdvcmtSZXBseSBpcyB3aGF0IGd1
YXJhbnRlZXMgdGhlIHNlcXVlbmNlIG9mIHRoZSBzaWduYWxzLgpRTmV0d29ya1JlcGx5V3JhcHBl
ciB3aWxsIGJlIHVzZWQgaW4gZnV0dXJlIHRvIHBlcmZvcm0gbWltZSB0eXBlIHNuaWZmaW5nIGJl
Zm9yZSBzZW5kaW5nCm1ldGFkYXRhY2hhbmdlZCBzaWduYWwuCgoqIHBsYXRmb3JtL25ldHdvcmsv
cXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwOgooV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBw
ZXI6OlFOZXR3b3JrUmVwbHlXcmFwcGVyKToKKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlXcmFwcGVy
Ojp+UU5ldHdvcmtSZXBseVdyYXBwZXIpOgooV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBwZXI6
OnJlbGVhc2UpOgooV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBwZXI6OnJlc2V0Q29ubmVjdGlv
bnMpOgooV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBwZXI6OnJlY2VpdmVNZXRhRGF0YSk6CihX
ZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVjZWl2ZUZpbmlzaGVkKToKKFdlYkNvcmU6
OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpRTmV0d29ya1JlcGx5SGFuZGxlcik6CihXZWJDb3JlOjpR
TmV0d29ya1JlcGx5SGFuZGxlcjo6cmVzZXRTdGF0ZSk6CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5
SGFuZGxlcjo6cmVsZWFzZSk6CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6ZmluaXNo
KToKKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzZW5kUmVzcG9uc2VJZk5lZWRlZCk6
CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVkaXJlY3QpOgooV2ViQ29yZTo6UU5l
dHdvcmtSZXBseUhhbmRsZXI6OmZvcndhcmREYXRhKToKKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlI
YW5kbGVyOjpzZW5kTmV0d29ya1JlcXVlc3QpOgooV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRs
ZXI6OnN0YXJ0KToKKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmg6
CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVwbHkpOgooV2ViQ29yZTo6UU5ldHdv
cmtSZXBseVdyYXBwZXI6OnJlZGlyZWN0VXJsKToKKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlXcmFw
cGVyOjplbmNvZGluZyk6CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6b2ZmaWNpYWxN
aW1lVHlwZSk6CihXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVwbHkpOgotLS0KIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0MiAr
KysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAgICB8
ICAyMDkgKysrKysrKysrKysrKystLS0tLS0KIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3
b3JrUmVwbHlIYW5kbGVyLmggICAgIHwgICAzOCArKysrLQogMyBmaWxlcyBjaGFuZ2VkLCAyMjQg
aW5zZXJ0aW9ucygrKSwgNjUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGZjNDJmNmMuLjk2
YmUwM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMS0wMy0yNCAgTHVpeiBBZ29z
dGluaSAgPGx1aXouYWdvc3RpbmlAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFOZXR3b3JrUmVwbHlIYW5kbGVyIHJl
ZmFjdG9yaW5nOiBzaWduYWwgc2VxdWVuY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NzA0OQorCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHN0
ZXAgaW4gUU5ldHdvcmtSZXBseUhhbmRsZXIuIFRoZSBtYWluIG9iamVjdGl2ZSBoZXJlIGlzIHRv
IGNyZWF0ZSBzaW1wbGUgaW52YXJpYW50czoKKworICAgICAgICAgICAgMSAtIHRoYXQgdGhlIHNp
Z25hbHMgbWV0YWRhdGFjaGFuZ2VkLCByZWFkeVJlYWQgYW5kIGZpbmlzaGVkIHdpbGwgY29tZSBp
biB0aGlzIG9yZGVyLgorICAgICAgICAgICAgMiAtIHRoYXQgc2lnbmFscyBtZXRhZGF0YWNoYW5n
ZWQgYW5kIGZpbmlzaGVkIHdpbGwgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlLgorCisgICAg
ICAgIEhhdmluZyB0aGVzZSBpbnZhcmlhbnRzIGZ1cnRoZXIgc2ltcGxpZmljYXRpb25zIHdpbGwg
YmUgcG9zc2libGUgYW5kIHdpbGwgY29tZSBpbiBmdXR1cmUgcGF0Y2hlcy4KKworICAgICAgICBD
bGFzcyBRTmV0d29ya1JlcGx5V3JhcHBlciB3YXMgY3JlYXRlZCB0byBoYW5kbGUgUU5ldHdvcmtS
ZXBseSBvYmplY3QuIFRvIGNvbm5lY3QgdG8gdGhlIHNpZ25hbHMgb2YgaXQKKyAgICAgICAgaW5z
dGVhZCBvZiBjb25uZWN0aW5nIHRvIHRoZSBzaWduYWxzIG9mIFFOZXR3b3JrUmVwbHkgaXMgd2hh
dCBndWFyYW50ZWVzIHRoZSBzZXF1ZW5jZSBvZiB0aGUgc2lnbmFscy4KKyAgICAgICAgUU5ldHdv
cmtSZXBseVdyYXBwZXIgd2lsbCBiZSB1c2VkIGluIGZ1dHVyZSB0byBwZXJmb3JtIG1pbWUgdHlw
ZSBzbmlmZmluZyBiZWZvcmUgc2VuZGluZworICAgICAgICBtZXRhZGF0YWNoYW5nZWQgc2lnbmFs
LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6UU5ldHdvcmtSZXBs
eVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBwZXI6On5RTmV0
d29ya1JlcGx5V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBl
cjo6cmVsZWFzZSk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVz
ZXRDb25uZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6
cmVjZWl2ZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlXcmFwcGVy
OjpyZWNlaXZlRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRs
ZXI6OlFOZXR3b3JrUmVwbHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVw
bHlIYW5kbGVyOjpyZXNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlI
YW5kbGVyOjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVy
OjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI6OnNlbmRS
ZXNwb25zZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVy
OjpyZWRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6Zm9y
d2FyZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI6OnNlbmRO
ZXR3b3JrUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6
c3RhcnQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRs
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlXcmFwcGVyOjpyZXBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVkaXJlY3RVcmwpOgorICAg
ICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseVdyYXBwZXI6OmVuY29kaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlXcmFwcGVyOjpvZmZpY2lhbE1pbWVUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpyZXBseSk6CisKIDIwMTEtMDMtMjkg
IExlbyBZYW5nICA8bGVvLnlhbmdAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAKaW5kZXggZTcx
N2U1OC4uMjhjNGU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAKQEAgLTE0OSw2ICsxNDksODUg
QEAgYm9vbCBGb3JtRGF0YUlPRGV2aWNlOjppc1NlcXVlbnRpYWwoKSBjb25zdAogICAgIHJldHVy
biB0cnVlOwogfQogCitRTmV0d29ya1JlcGx5V3JhcHBlcjo6UU5ldHdvcmtSZXBseVdyYXBwZXIo
UU5ldHdvcmtSZXBseSogcmVwbHksIFFPYmplY3QqIHBhcmVudCkKKyAgICA6IFFPYmplY3QocGFy
ZW50KQorICAgICwgbV9yZXBseShyZXBseSkKK3sKKyAgICBRX0FTU0VSVChtX3JlcGx5KTsKKwor
ICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKG1ldGFEYXRhQ2hhbmdlZCgpKSwgdGhpcywgU0xP
VChyZWNlaXZlTWV0YURhdGEoKSkpOworICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKHJlYWR5
UmVhZCgpKSwgdGhpcywgU0xPVChyZWNlaXZlTWV0YURhdGEoKSkpOworICAgIGNvbm5lY3QobV9y
ZXBseSwgU0lHTkFMKGZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKHJlY2VpdmVNZXRhRGF0YSgpKSk7
Cit9CisKK1FOZXR3b3JrUmVwbHlXcmFwcGVyOjp+UU5ldHdvcmtSZXBseVdyYXBwZXIoKQorewor
ICAgIGlmIChtX3JlcGx5KQorICAgICAgICBtX3JlcGx5LT5kZWxldGVMYXRlcigpOworfQorCitR
TmV0d29ya1JlcGx5KiBRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVsZWFzZSgpCit7CisgICAgaWYg
KCFtX3JlcGx5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFFOZXR3b3JrUmVwbHkqIHJlcGx5
ID0gbV9yZXBseTsKKyAgICBtX3JlcGx5ID0gMDsKKyAgICBkaXNjb25uZWN0KHJlcGx5LCAwLCB0
aGlzLCAwKTsKKyAgICByZXBseS0+c2V0UGFyZW50KDApOworICAgIHJldHVybiByZXBseTsKK30K
Kwordm9pZCBRTmV0d29ya1JlcGx5V3JhcHBlcjo6cmVzZXRDb25uZWN0aW9ucygpCit7CisgICAg
ZGlzY29ubmVjdChtX3JlcGx5LCAwLCB0aGlzLCAwKTsKKyAgICBRQ29yZUFwcGxpY2F0aW9uOjpy
ZW1vdmVQb3N0ZWRFdmVudHModGhpcywgUUV2ZW50OjpNZXRhQ2FsbCk7Cit9CisKK3ZvaWQgUU5l
dHdvcmtSZXBseVdyYXBwZXI6OnJlY2VpdmVNZXRhRGF0YSgpCit7CisgICAgLy8gdGhpcyBzbG90
IGlzIG9ubHkgdXNlZCB0byByZWNlaXZlIHRoZSBmaXJzdCBzaWduYWwgZnJvbSB0aGUgUU5ldHdv
cmtSZXBseSBvYmplY3QuCisgICAgcmVzZXRDb25uZWN0aW9ucygpOworCisgICAgbV9yZWRpcmVj
dFVybCA9IG1fcmVwbHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6OlJlZGlyZWN0aW9uVGFy
Z2V0QXR0cmlidXRlKS50b1VybCgpOworICAgIGlmIChtX3JlZGlyZWN0VXJsLmlzVmFsaWQoKSkg
eworICAgICAgICBlbWl0IG1ldGFEYXRhQ2hhbmdlZCgpOworICAgICAgICBlbWl0IGZpbmlzaGVk
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBXVEY6OlN0cmluZyBjb250ZW50VHlw
ZSA9IG1fcmVwbHktPmhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRUeXBlSGVhZGVyKS50
b1N0cmluZygpOworICAgIG1fZW5jb2RpbmcgPSBleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUo
Y29udGVudFR5cGUpOworICAgIG1fb2ZmaWNpYWxNaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZy
b21NZWRpYVR5cGUoY29udGVudFR5cGUpOworCisgICAgYm9vbCBoYXNEYXRhID0gbV9yZXBseS0+
Ynl0ZXNBdmFpbGFibGUoKTsKKyAgICBib29sIGlzRmluaXNoZWQgPSBtX3JlcGx5LT5pc0Zpbmlz
aGVkKCk7CisKKyAgICBpZiAoIWlzRmluaXNoZWQpIHsKKyAgICAgICAgLy8gaWYgbm90IGZpbmlz
aGVkLCBjb25uZWN0IHRvIHRoZSBzbG90cyB0aGF0IHdpbGwgYmUgdXNlZCBmcm9tIHRoaXMgcG9p
bnQgb24uCisgICAgICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKHJlYWR5UmVhZCgpKSwgdGhp
cywgU0lHTkFMKHJlYWR5UmVhZCgpKSk7CisgICAgICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFM
KGZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKHJlY2VpdmVGaW5pc2hlZCgpKSk7CisgICAgfQorCisg
ICAgZW1pdCBtZXRhRGF0YUNoYW5nZWQoKTsKKworICAgIGlmIChoYXNEYXRhKQorICAgICAgICBl
bWl0IHJlYWR5UmVhZCgpOworCisgICAgaWYgKGlzRmluaXNoZWQpIHsKKyAgICAgICAgZW1pdCBm
aW5pc2hlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCit9CisKK3ZvaWQgUU5ldHdvcmtS
ZXBseVdyYXBwZXI6OnJlY2VpdmVGaW5pc2hlZCgpCit7CisgICAgLy8gZGlzY29ubmVjdGluZyB3
aWxsIG1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgd2lsbCBoYXBwZW4gYWZ0ZXIgZW1pdGluZyBmaW5p
c2hlZCBzaWduYWwuCisgICAgcmVzZXRDb25uZWN0aW9ucygpOworICAgIGVtaXQgZmluaXNoZWQo
KTsKK30KKwogU3RyaW5nIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpodHRwTWV0aG9kKCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKG1fbWV0aG9kKSB7CkBAIC0xNzIsNyArMjUxLDcgQEAgU3RyaW5nIFFO
ZXR3b3JrUmVwbHlIYW5kbGVyOjpodHRwTWV0aG9kKCkgY29uc3QKIAogUU5ldHdvcmtSZXBseUhh
bmRsZXI6OlFOZXR3b3JrUmVwbHlIYW5kbGVyKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIExvYWRU
eXBlIGxvYWRUeXBlLCBib29sIGRlZmVycmVkKQogICAgIDogUU9iamVjdCgwKQotICAgICwgbV9y
ZXBseSgwKQorICAgICwgbV9yZXBseVdyYXBwZXIoMCkKICAgICAsIG1fcmVzb3VyY2VIYW5kbGUo
aGFuZGxlKQogICAgICwgbV9sb2FkVHlwZShsb2FkVHlwZSkKICAgICAsIG1fZGVmZXJyZWQoZGVm
ZXJyZWQpCkBAIC0yMTUsOSArMjk0LDkgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVz
ZXRTdGF0ZSgpCiAgICAgbV9jYWxsU2VuZFJlc3BvbnNlSWZOZWVkZWRPblJlc3VtZSA9IGZhbHNl
OwogICAgIG1fY2FsbEZvcndhcmREYXRhT25SZXN1bWUgPSBmYWxzZTsKIAotICAgIGlmIChtX3Jl
cGx5KSB7Ci0gICAgICAgIG1fcmVwbHktPmRlbGV0ZUxhdGVyKCk7Ci0gICAgICAgIG1fcmVwbHkg
PSAwOworICAgIGlmIChtX3JlcGx5V3JhcHBlcikgeworICAgICAgICBtX3JlcGx5V3JhcHBlci0+
ZGVsZXRlTGF0ZXIoKTsKKyAgICAgICAgbV9yZXBseVdyYXBwZXIgPSAwOwogICAgIH0KIH0KIApA
QCAtMjYxLDEzICszNDAsMTIgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6YWJvcnQoKQog
CiBRTmV0d29ya1JlcGx5KiBRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVsZWFzZSgpCiB7Ci0gICAg
aWYgKCFtX3JlcGx5KQorICAgIGlmICghbV9yZXBseVdyYXBwZXIpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgUU5ldHdvcmtSZXBseSogcmVwbHkgPSBtX3JlcGx5OwotICAgIG1fcmVwbHkgPSAw
OwotICAgIGRpc2Nvbm5lY3QocmVwbHksIDAsIHRoaXMsIDApOwotICAgIHJlcGx5LT5zZXRQYXJl
bnQoMCk7CisgICAgUU5ldHdvcmtSZXBseSogcmVwbHkgPSBtX3JlcGx5V3JhcHBlci0+cmVsZWFz
ZSgpOworICAgIG1fcmVwbHlXcmFwcGVyLT5kZWxldGVMYXRlcigpOworICAgIG1fcmVwbHlXcmFw
cGVyID0gMDsKICAgICByZXR1cm4gcmVwbHk7CiB9CiAKQEAgLTI5Miw3ICszNzAsNyBAQCB2b2lk
IFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpmaW5pc2goKQogICAgIGlmIChtX2RlZmVycmVkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fcmVwbHkpCisgICAgaWYgKCFtX3JlcGx5V3JhcHBl
ciB8fCAhbV9yZXBseVdyYXBwZXItPnJlcGx5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNl
bmRSZXNwb25zZUlmTmVlZGVkKCk7CkBAIC0zMDIsOCArMzgwLDggQEAgdm9pZCBRTmV0d29ya1Jl
cGx5SGFuZGxlcjo6ZmluaXNoKCkKIAogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQg
PSBtX3Jlc291cmNlSGFuZGxlLT5jbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkgewotICAgICAg
ICBtX3JlcGx5LT5kZWxldGVMYXRlcigpOwotICAgICAgICBtX3JlcGx5ID0gMDsKKyAgICAgICAg
bV9yZXBseVdyYXBwZXItPmRlbGV0ZUxhdGVyKCk7CisgICAgICAgIG1fcmVwbHlXcmFwcGVyID0g
MDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzEzLDI0ICszOTEsMjQgQEAgdm9pZCBR
TmV0d29ya1JlcGx5SGFuZGxlcjo6ZmluaXNoKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmICghbV9yZXBseS0+ZXJyb3IoKSB8fCBzaG91bGRJZ25vcmVIdHRwRXJyb3IobV9yZXBs
eSwgbV9yZXNwb25zZUNvbnRhaW5zRGF0YSkpCisgICAgaWYgKCFtX3JlcGx5V3JhcHBlci0+cmVw
bHkoKS0+ZXJyb3IoKSB8fCBzaG91bGRJZ25vcmVIdHRwRXJyb3IobV9yZXBseVdyYXBwZXItPnJl
cGx5KCksIG1fcmVzcG9uc2VDb250YWluc0RhdGEpKQogICAgICAgICBjbGllbnQtPmRpZEZpbmlz
aExvYWRpbmcobV9yZXNvdXJjZUhhbmRsZSwgMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFFVcmwg
dXJsID0gbV9yZXBseS0+dXJsKCk7Ci0gICAgICAgIGludCBodHRwU3RhdHVzQ29kZSA9IG1fcmVw
bHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlKS50
b0ludCgpOworICAgICAgICBRVXJsIHVybCA9IG1fcmVwbHlXcmFwcGVyLT5yZXBseSgpLT51cmwo
KTsKKyAgICAgICAgaW50IGh0dHBTdGF0dXNDb2RlID0gbV9yZXBseVdyYXBwZXItPnJlcGx5KCkt
PmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlKS50b0lu
dCgpOwogCiAgICAgICAgIGlmIChodHRwU3RhdHVzQ29kZSkgewotICAgICAgICAgICAgUmVzb3Vy
Y2VFcnJvciBlcnJvcigiSFRUUCIsIGh0dHBTdGF0dXNDb2RlLCB1cmwudG9TdHJpbmcoKSwgbV9y
ZXBseS0+YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFJlYXNvblBocmFzZUF0dHJpYnV0
ZSkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yKCJIVFRQIiwg
aHR0cFN0YXR1c0NvZGUsIHVybC50b1N0cmluZygpLCBtX3JlcGx5V3JhcHBlci0+cmVwbHkoKS0+
YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFJlYXNvblBocmFzZUF0dHJpYnV0ZSkudG9T
dHJpbmcoKSk7CiAgICAgICAgICAgICBjbGllbnQtPmRpZEZhaWwobV9yZXNvdXJjZUhhbmRsZSwg
ZXJyb3IpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJv
cigiUXROZXR3b3JrIiwgbV9yZXBseS0+ZXJyb3IoKSwgdXJsLnRvU3RyaW5nKCksIG1fcmVwbHkt
PmVycm9yU3RyaW5nKCkpOworICAgICAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcigiUXROZXR3
b3JrIiwgbV9yZXBseVdyYXBwZXItPnJlcGx5KCktPmVycm9yKCksIHVybC50b1N0cmluZygpLCBt
X3JlcGx5V3JhcHBlci0+cmVwbHkoKS0+ZXJyb3JTdHJpbmcoKSk7CiAgICAgICAgICAgICBjbGll
bnQtPmRpZEZhaWwobV9yZXNvdXJjZUhhbmRsZSwgZXJyb3IpOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKG1fcmVwbHkpIHsKLSAgICAgICAgbV9yZXBseS0+ZGVsZXRlTGF0ZXIoKTsKLSAg
ICAgICAgbV9yZXBseSA9IDA7CisgICAgaWYgKG1fcmVwbHlXcmFwcGVyKSB7CisgICAgICAgIG1f
cmVwbHlXcmFwcGVyLT5kZWxldGVMYXRlcigpOworICAgICAgICBtX3JlcGx5V3JhcHBlciA9IDA7
CiAgICAgfQogfQogCkBAIC0zNDIsMTAgKzQyMCwxMCBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5k
bGVyOjpzZW5kUmVzcG9uc2VJZk5lZWRlZCgpCiAgICAgaWYgKG1fZGVmZXJyZWQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9yZXBseSkKKyAgICBpZiAoIW1fcmVwbHlXcmFwcGVyIHx8
ICFtX3JlcGx5V3JhcHBlci0+cmVwbHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
cmVwbHktPmVycm9yKCkgJiYgIXNob3VsZElnbm9yZUh0dHBFcnJvcihtX3JlcGx5LCBtX3Jlc3Bv
bnNlQ29udGFpbnNEYXRhKSkKKyAgICBpZiAobV9yZXBseVdyYXBwZXItPnJlcGx5KCktPmVycm9y
KCkgJiYgIXNob3VsZElnbm9yZUh0dHBFcnJvcihtX3JlcGx5V3JhcHBlci0+cmVwbHkoKSwgbV9y
ZXNwb25zZUNvbnRhaW5zRGF0YSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICh3YXNBYm9y
dGVkKCkpCkBAIC0zNTksMTggKzQzNywxOCBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpz
ZW5kUmVzcG9uc2VJZk5lZWRlZCgpCiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFdURjo6U3RyaW5nIGNvbnRlbnRUeXBlID0gbV9yZXBseS0+aGVhZGVyKFFOZXR3b3Jr
UmVxdWVzdDo6Q29udGVudFR5cGVIZWFkZXIpLnRvU3RyaW5nKCk7CisgICAgV1RGOjpTdHJpbmcg
Y29udGVudFR5cGUgPSBtX3JlcGx5V3JhcHBlci0+cmVwbHkoKS0+aGVhZGVyKFFOZXR3b3JrUmVx
dWVzdDo6Q29udGVudFR5cGVIZWFkZXIpLnRvU3RyaW5nKCk7CiAgICAgV1RGOjpTdHJpbmcgZW5j
b2RpbmcgPSBleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpOwogICAgIFdU
Rjo6U3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShjb250ZW50
VHlwZSk7CiAKICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGxldCdz
IHRyeSB0byBndWVzcyBmcm9tIHRoZSBleHRlbnNpb24KLSAgICAgICAgbWltZVR5cGUgPSBNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgobV9yZXBseS0+dXJsKCkucGF0aCgpKTsK
KyAgICAgICAgbWltZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgo
bV9yZXBseVdyYXBwZXItPnJlcGx5KCktPnVybCgpLnBhdGgoKSk7CiAgICAgfQogCi0gICAgS1VS
TCB1cmwobV9yZXBseS0+dXJsKCkpOworICAgIEtVUkwgdXJsKG1fcmVwbHlXcmFwcGVyLT5yZXBs
eSgpLT51cmwoKSk7CiAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSh1cmwsIG1pbWVUeXBl
Lmxvd2VyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3JlcGx5LT5oZWFkZXIo
UU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50TGVuZ3RoSGVhZGVyKS50b0xvbmdMb25nKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3JlcGx5V3JhcHBlci0+cmVwbHkoKS0+aGVhZGVy
KFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudExlbmd0aEhlYWRlcikudG9Mb25nTG9uZygpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsIFN0cmluZygpKTsKIAogICAgIGlm
ICh1cmwuaXNMb2NhbEZpbGUoKSkgewpAQCAtMzc5LDEwICs0NTcsMTAgQEAgdm9pZCBRTmV0d29y
a1JlcGx5SGFuZGxlcjo6c2VuZFJlc3BvbnNlSWZOZWVkZWQoKQogICAgIH0KIAogICAgIC8vIFRo
ZSBzdGF0dXMgY29kZSBpcyBlcXVhbCB0byAwIGZvciBwcm90b2NvbHMgbm90IGluIHRoZSBIVFRQ
IGZhbWlseS4KLSAgICBpbnQgc3RhdHVzQ29kZSA9IG1fcmVwbHktPmF0dHJpYnV0ZShRTmV0d29y
a1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlKS50b0ludCgpOworICAgIGludCBzdGF0
dXNDb2RlID0gbV9yZXBseVdyYXBwZXItPnJlcGx5KCktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVl
c3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlKS50b0ludCgpOwogCiAgICAgaWYgKHVybC5wcm90
b2NvbEluSFRUUEZhbWlseSgpKSB7Ci0gICAgICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSA9
IGZpbGVuYW1lRnJvbUhUVFBDb250ZW50RGlzcG9zaXRpb24oUVN0cmluZzo6ZnJvbUxhdGluMSht
X3JlcGx5LT5yYXdIZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb24iKSkpOworICAgICAgICBTdHJp
bmcgc3VnZ2VzdGVkRmlsZW5hbWUgPSBmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW9u
KFFTdHJpbmc6OmZyb21MYXRpbjEobV9yZXBseVdyYXBwZXItPnJlcGx5KCktPnJhd0hlYWRlcigi
Q29udGVudC1EaXNwb3NpdGlvbiIpKSk7CiAKICAgICAgICAgaWYgKCFzdWdnZXN0ZWRGaWxlbmFt
ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXNwb25zZS5zZXRTdWdnZXN0ZWRGaWxlbmFtZShz
dWdnZXN0ZWRGaWxlbmFtZSk7CkBAIC0zOTAsMTQgKzQ2OCwxNCBAQCB2b2lkIFFOZXR3b3JrUmVw
bHlIYW5kbGVyOjpzZW5kUmVzcG9uc2VJZk5lZWRlZCgpCiAgICAgICAgICAgICByZXNwb25zZS5z
ZXRTdWdnZXN0ZWRGaWxlbmFtZSh1cmwubGFzdFBhdGhDb21wb25lbnQoKSk7CiAKICAgICAgICAg
cmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoc3RhdHVzQ29kZSk7Ci0gICAgICAgIHJlc3BvbnNl
LnNldEhUVFBTdGF0dXNUZXh0KG1fcmVwbHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0
dHBSZWFzb25QaHJhc2VBdHRyaWJ1dGUpLnRvQnl0ZUFycmF5KCkuY29uc3REYXRhKCkpOworICAg
ICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChtX3JlcGx5V3JhcHBlci0+cmVwbHkoKS0+
YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFJlYXNvblBocmFzZUF0dHJpYnV0ZSkudG9C
eXRlQXJyYXkoKS5jb25zdERhdGEoKSk7CiAKICAgICAgICAgLy8gQWRkIHJlbWFpbmluZyBoZWFk
ZXJzLgotICAgICAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya1JlcGx5OjpSYXdIZWFkZXJQYWly
JiBwYWlyLCBtX3JlcGx5LT5yYXdIZWFkZXJQYWlycygpKQorICAgICAgICBmb3JlYWNoIChjb25z
dCBRTmV0d29ya1JlcGx5OjpSYXdIZWFkZXJQYWlyJiBwYWlyLCBtX3JlcGx5V3JhcHBlci0+cmVw
bHkoKS0+cmF3SGVhZGVyUGFpcnMoKSkKICAgICAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFk
ZXJGaWVsZChRU3RyaW5nOjpmcm9tTGF0aW4xKHBhaXIuZmlyc3QpLCBRU3RyaW5nOjpmcm9tTGF0
aW4xKHBhaXIuc2Vjb25kKSk7CiAgICAgfQogCi0gICAgUVVybCByZWRpcmVjdGlvbiA9IG1fcmVw
bHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6OlJlZGlyZWN0aW9uVGFyZ2V0QXR0cmlidXRl
KS50b1VybCgpOworICAgIFFVcmwgcmVkaXJlY3Rpb24gPSBtX3JlcGx5V3JhcHBlci0+cmVwbHko
KS0+YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6UmVkaXJlY3Rpb25UYXJnZXRBdHRyaWJ1dGUp
LnRvVXJsKCk7CiAgICAgaWYgKHJlZGlyZWN0aW9uLmlzVmFsaWQoKSkgewogICAgICAgICByZWRp
cmVjdChyZXNwb25zZSwgcmVkaXJlY3Rpb24pOwogICAgICAgICByZXR1cm47CkBAIC00MDgsMTIg
KzQ4NiwxMiBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzZW5kUmVzcG9uc2VJZk5lZWRl
ZCgpCiAKIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnJlZGlyZWN0KFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBjb25zdCBRVXJsJiByZWRpcmVjdGlvbikKIHsKLSAgICBRVXJsIG5ld1Vy
bCA9IG1fcmVwbHktPnVybCgpLnJlc29sdmVkKHJlZGlyZWN0aW9uKTsKKyAgICBRVXJsIG5ld1Vy
bCA9IG1fcmVwbHlXcmFwcGVyLT5yZXBseSgpLT51cmwoKS5yZXNvbHZlZChyZWRpcmVjdGlvbik7
CiAKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gbV9yZXNvdXJjZUhhbmRsZS0+
Y2xpZW50KCk7CiAgICAgQVNTRVJUKGNsaWVudCk7CiAKLSAgICBpbnQgc3RhdHVzQ29kZSA9IG1f
cmVwbHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRl
KS50b0ludCgpOworICAgIGludCBzdGF0dXNDb2RlID0gbV9yZXBseVdyYXBwZXItPnJlcGx5KCkt
PmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlKS50b0lu
dCgpOwogCiAgICAgbV9yZWRpcmVjdGlvblRyaWVzLS07CiAgICAgaWYgKCFtX3JlZGlyZWN0aW9u
VHJpZXMpIHsKQEAgLTQ1OSw3ICs1MzcsNyBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpm
b3J3YXJkRGF0YSgpCiAgICAgaWYgKG1fZGVmZXJyZWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX3JlcGx5LT5ieXRlc0F2YWlsYWJsZSgpKQorICAgIGlmIChtX3JlcGx5V3JhcHBlci0+
cmVwbHkoKS0+Ynl0ZXNBdmFpbGFibGUoKSkKICAgICAgICAgbV9yZXNwb25zZUNvbnRhaW5zRGF0
YSA9IHRydWU7CiAKICAgICBzZW5kUmVzcG9uc2VJZk5lZWRlZCgpOwpAQCAtNDcxLDcgKzU0OSw3
IEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OmZvcndhcmREYXRhKCkKICAgICBpZiAod2Fz
QWJvcnRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBRQnl0ZUFycmF5IGRhdGEgPSBtX3Jl
cGx5LT5yZWFkKG1fcmVwbHktPmJ5dGVzQXZhaWxhYmxlKCkpOworICAgIFFCeXRlQXJyYXkgZGF0
YSA9IG1fcmVwbHlXcmFwcGVyLT5yZXBseSgpLT5yZWFkKG1fcmVwbHlXcmFwcGVyLT5yZXBseSgp
LT5ieXRlc0F2YWlsYWJsZSgpKTsKIAogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQg
PSBtX3Jlc291cmNlSGFuZGxlLT5jbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKQEAgLTQ5Niwx
MSArNTc0LDggQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6dXBsb2FkUHJvZ3Jlc3MocWlu
dDY0IGJ5dGVzU2VudCwgcWludDY0IGJ5dGVzVG90YWwpCiAgICAgY2xpZW50LT5kaWRTZW5kRGF0
YShtX3Jlc291cmNlSGFuZGxlLCBieXRlc1NlbnQsIGJ5dGVzVG90YWwpOwogfQogCi12b2lkIFFO
ZXR3b3JrUmVwbHlIYW5kbGVyOjpzdGFydCgpCitRTmV0d29ya1JlcGx5KiBRTmV0d29ya1JlcGx5
SGFuZGxlcjo6c2VuZE5ldHdvcmtSZXF1ZXN0KCkKIHsKLSAgICBBU1NFUlQoIW1faGFzU3RhcnRl
ZCk7Ci0gICAgbV9oYXNTdGFydGVkID0gdHJ1ZTsKLQogICAgIGlmIChtX2xvYWRUeXBlID09IFN5
bmNocm9ub3VzTG9hZCkKICAgICAgICAgbV9yZXF1ZXN0LnNldEF0dHJpYnV0ZShnU3luY2hyb25v
dXNOZXR3b3JrUmVxdWVzdEF0dHJpYnV0ZSwgdHJ1ZSk7CiAKQEAgLTUxMSw3ICs1ODYsNyBAQCB2
b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzdGFydCgpCiAgICAgICAgIG1hbmFnZXIgPSBkLT5t
X2NvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCk7CiAKICAgICBpZiAoIW1hbmFnZXIpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBjb25zdCBRVXJsIHVybCA9
IG1fcmVxdWVzdC51cmwoKTsKICAgICBjb25zdCBRU3RyaW5nIHNjaGVtZSA9IHVybC5zY2hlbWUo
KTsKQEAgLTUyNCw1OSArNTk5LDY3IEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnN0YXJ0
KCkKIAogICAgIHN3aXRjaCAobV9tZXRob2QpIHsKICAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vz
c01hbmFnZXI6OkdldE9wZXJhdGlvbjoKLSAgICAgICAgICAgIG1fcmVwbHkgPSBtYW5hZ2VyLT5n
ZXQobV9yZXF1ZXN0KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1h
bmFnZXItPmdldChtX3JlcXVlc3QpOwogICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdl
cjo6UG9zdE9wZXJhdGlvbjogewotICAgICAgICAgICAgRm9ybURhdGFJT0RldmljZSogcG9zdERl
dmljZSA9IG5ldyBGb3JtRGF0YUlPRGV2aWNlKGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCkp
OyAKKyAgICAgICAgICAgIEZvcm1EYXRhSU9EZXZpY2UqIHBvc3REZXZpY2UgPSBuZXcgRm9ybURh
dGFJT0RldmljZShkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpKTsKICAgICAgICAgICAgIC8v
IFdlIG1heSBiZSB1cGxvYWRpbmcgZmlsZXMgc28gcHJldmVudCBRTlIgZnJvbSBidWZmZXJpbmcg
ZGF0YQogICAgICAgICAgICAgbV9yZXF1ZXN0LnNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNv
bnRlbnRMZW5ndGhIZWFkZXIsIHBvc3REZXZpY2UtPmdldEZvcm1EYXRhU2l6ZSgpKTsKICAgICAg
ICAgICAgIG1fcmVxdWVzdC5zZXRBdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpEb05vdEJ1ZmZl
clVwbG9hZERhdGFBdHRyaWJ1dGUsIFFWYXJpYW50KHRydWUpKTsKLSAgICAgICAgICAgIG1fcmVw
bHkgPSBtYW5hZ2VyLT5wb3N0KG1fcmVxdWVzdCwgcG9zdERldmljZSk7Ci0gICAgICAgICAgICBw
b3N0RGV2aWNlLT5zZXRQYXJlbnQobV9yZXBseSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIFFOZXR3b3JrUmVwbHkqIHJlc3VsdCA9IG1hbmFnZXItPnBvc3QobV9yZXF1ZXN0LCBw
b3N0RGV2aWNlKTsKKyAgICAgICAgICAgIHBvc3REZXZpY2UtPnNldFBhcmVudChyZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICBjYXNlIFFOZXR3
b3JrQWNjZXNzTWFuYWdlcjo6SGVhZE9wZXJhdGlvbjoKLSAgICAgICAgICAgIG1fcmVwbHkgPSBt
YW5hZ2VyLT5oZWFkKG1fcmVxdWVzdCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBtYW5hZ2VyLT5oZWFkKG1fcmVxdWVzdCk7CiAgICAgICAgIGNhc2UgUU5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyOjpQdXRPcGVyYXRpb246IHsKLSAgICAgICAgICAgIEZvcm1EYXRhSU9EZXZp
Y2UqIHB1dERldmljZSA9IG5ldyBGb3JtRGF0YUlPRGV2aWNlKGQtPm1fZmlyc3RSZXF1ZXN0Lmh0
dHBCb2R5KCkpOyAKKyAgICAgICAgICAgIEZvcm1EYXRhSU9EZXZpY2UqIHB1dERldmljZSA9IG5l
dyBGb3JtRGF0YUlPRGV2aWNlKGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCkpOwogICAgICAg
ICAgICAgLy8gV2UgbWF5IGJlIHVwbG9hZGluZyBmaWxlcyBzbyBwcmV2ZW50IFFOUiBmcm9tIGJ1
ZmZlcmluZyBkYXRhCiAgICAgICAgICAgICBtX3JlcXVlc3Quc2V0SGVhZGVyKFFOZXR3b3JrUmVx
dWVzdDo6Q29udGVudExlbmd0aEhlYWRlciwgcHV0RGV2aWNlLT5nZXRGb3JtRGF0YVNpemUoKSk7
CiAgICAgICAgICAgICBtX3JlcXVlc3Quc2V0QXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6RG9O
b3RCdWZmZXJVcGxvYWREYXRhQXR0cmlidXRlLCBRVmFyaWFudCh0cnVlKSk7Ci0gICAgICAgICAg
ICBtX3JlcGx5ID0gbWFuYWdlci0+cHV0KG1fcmVxdWVzdCwgcHV0RGV2aWNlKTsKLSAgICAgICAg
ICAgIHB1dERldmljZS0+c2V0UGFyZW50KG1fcmVwbHkpOwotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBRTmV0d29ya1JlcGx5KiByZXN1bHQgPSBtYW5hZ2VyLT5wdXQobV9yZXF1ZXN0
LCBwdXREZXZpY2UpOworICAgICAgICAgICAgcHV0RGV2aWNlLT5zZXRQYXJlbnQocmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBRTmV0
d29ya0FjY2Vzc01hbmFnZXI6OkRlbGV0ZU9wZXJhdGlvbjogewotICAgICAgICAgICAgbV9yZXBs
eSA9IG1hbmFnZXItPmRlbGV0ZVJlc291cmNlKG1fcmVxdWVzdCk7Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyLT5kZWxldGVSZXNvdXJjZShtX3JlcXVlc3Qp
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpDdXN0b21P
cGVyYXRpb246Ci0gICAgICAgICAgICBtX3JlcGx5ID0gbWFuYWdlci0+c2VuZEN1c3RvbVJlcXVl
c3QobV9yZXF1ZXN0LCBtX3Jlc291cmNlSGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9k
KCkubGF0aW4xKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIG1hbmFnZXItPnNlbmRDdXN0b21SZXF1ZXN0KG1fcmVxdWVzdCwgbV9yZXNvdXJjZUhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpLmxhdGluMSgpLmRhdGEoKSk7CiAgICAgICAg
IGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpVbmtub3duT3BlcmF0aW9uOgogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUU5ldHdvcmtSZXBs
eUhhbmRsZXI6OnN0YXJ0KCkKK3sKKyAgICBBU1NFUlQoIW1faGFzU3RhcnRlZCk7CisgICAgbV9o
YXNTdGFydGVkID0gdHJ1ZTsKKworICAgIFFOZXR3b3JrUmVwbHkqIHJlcGx5ID0gc2VuZE5ldHdv
cmtSZXF1ZXN0KCk7CisgICAgaWYgKCFyZXBseSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV9y
ZXBseS0+c2V0UGFyZW50KHRoaXMpOworICAgIG1fcmVwbHlXcmFwcGVyID0gbmV3IFFOZXR3b3Jr
UmVwbHlXcmFwcGVyKHJlcGx5LCB0aGlzKTsKIAotICAgIGlmIChtX2xvYWRUeXBlID09IFN5bmNo
cm9ub3VzTG9hZCAmJiBtX3JlcGx5LT5pc0ZpbmlzaGVkKCkpIHsKKyAgICBpZiAobV9sb2FkVHlw
ZSA9PSBTeW5jaHJvbm91c0xvYWQgJiYgbV9yZXBseVdyYXBwZXItPnJlcGx5KCktPmlzRmluaXNo
ZWQoKSkgewogICAgICAgICAvLyBJZiBzdXBwb3J0ZWQsIGEgc3luY2hyb25vdXMgcmVxdWVzdCB3
aWxsIGJlIGZpbmlzaGVkIGF0IHRoaXMgcG9pbnQsIG5vIG5lZWQgdG8gaG9vayB1cCB0aGUgc2ln
bmFscy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbm5lY3QobV9yZXBseSwgU0lH
TkFMKGZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKGZpbmlzaCgpKSk7CisgICAgY29ubmVjdChtX3Jl
cGx5V3JhcHBlciwgU0lHTkFMKGZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKGZpbmlzaCgpKSk7CiAK
ICAgICAvLyBGb3IgaHR0cChzKSB3ZSBrbm93IHRoYXQgdGhlIGhlYWRlcnMgYXJlIGNvbXBsZXRl
IHVwb24gbWV0YURhdGFDaGFuZ2VkKCkgZW1pc3Npb24sIHNvIHdlCiAgICAgLy8gY2FuIHNlbmQg
dGhlIHJlc3BvbnNlIGFzIGVhcmx5IGFzIHBvc3NpYmxlCisgICAgY29uc3QgUVN0cmluZyBzY2hl
bWUgPSBtX3JlcXVlc3QudXJsKCkuc2NoZW1lKCk7CiAgICAgaWYgKHNjaGVtZSA9PSBRTGF0aW4x
U3RyaW5nKCJodHRwIikgfHwgc2NoZW1lID09IFFMYXRpbjFTdHJpbmcoImh0dHBzIikpCi0gICAg
ICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKG1ldGFEYXRhQ2hhbmdlZCgpKSwgdGhpcywgU0xP
VChzZW5kUmVzcG9uc2VJZk5lZWRlZCgpKSk7CisgICAgICAgIGNvbm5lY3QobV9yZXBseVdyYXBw
ZXIsIFNJR05BTChtZXRhRGF0YUNoYW5nZWQoKSksIHRoaXMsIFNMT1Qoc2VuZFJlc3BvbnNlSWZO
ZWVkZWQoKSkpOwogCi0gICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwocmVhZHlSZWFkKCkpLCB0
aGlzLCBTTE9UKGZvcndhcmREYXRhKCkpKTsKKyAgICBjb25uZWN0KG1fcmVwbHlXcmFwcGVyLCBT
SUdOQUwocmVhZHlSZWFkKCkpLCB0aGlzLCBTTE9UKGZvcndhcmREYXRhKCkpKTsKIAogICAgIGlm
IChtX3Jlc291cmNlSGFuZGxlLT5maXJzdFJlcXVlc3QoKS5yZXBvcnRVcGxvYWRQcm9ncmVzcygp
KQotICAgICAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTCh1cGxvYWRQcm9ncmVzcyhxaW50NjQs
IHFpbnQ2NCkpLCB0aGlzLCBTTE9UKHVwbG9hZFByb2dyZXNzKHFpbnQ2NCwgcWludDY0KSkpOwor
ICAgICAgICBjb25uZWN0KG1fcmVwbHlXcmFwcGVyLT5yZXBseSgpLCBTSUdOQUwodXBsb2FkUHJv
Z3Jlc3MocWludDY0LCBxaW50NjQpKSwgdGhpcywgU0xPVCh1cGxvYWRQcm9ncmVzcyhxaW50NjQs
IHFpbnQ2NCkpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5oCmluZGV4IGVjMmFhYjYuLjRiMjAz
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdv
cmtSZXBseUhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0
L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmgKQEAgLTM2LDYgKzM2LDM5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFJlc291cmNlSGFuZGxlOwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIAor
Y2xhc3MgUU5ldHdvcmtSZXBseVdyYXBwZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpF
Q1QKK3B1YmxpYzoKKyAgICBRTmV0d29ya1JlcGx5V3JhcHBlcihRTmV0d29ya1JlcGx5KiwgUU9i
amVjdCogcGFyZW50ID0gMCk7CisgICAgflFOZXR3b3JrUmVwbHlXcmFwcGVyKCk7CisKKyAgICBR
TmV0d29ya1JlcGx5KiByZXBseSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbHk7IH0KKyAgICBRTmV0
d29ya1JlcGx5KiByZWxlYXNlKCk7CisKKyAgICBRVXJsIHJlZGlyZWN0VXJsKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWRpcmVjdFVybDsgfQorICAgIFFTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2VuY29kaW5nOyB9CisgICAgUVN0cmluZyBvZmZpY2lhbE1pbWVUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9vZmZpY2lhbE1pbWVUeXBlOyB9CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGZp
bmlzaGVkKCk7CisgICAgdm9pZCBtZXRhRGF0YUNoYW5nZWQoKTsKKyAgICB2b2lkIHJlYWR5UmVh
ZCgpOworICAgIHZvaWQgdXBsb2FkUHJvZ3Jlc3MocWludDY0IGJ5dGVzU2VudCwgcWludDY0IGJ5
dGVzVG90YWwpOworCitwcml2YXRlIFFfU0xPVFM6CisgICAgdm9pZCByZWNlaXZlTWV0YURhdGEo
KTsKKyAgICB2b2lkIHJlY2VpdmVGaW5pc2hlZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgcmVz
ZXRDb25uZWN0aW9ucygpOworCisgICAgUU5ldHdvcmtSZXBseSogbV9yZXBseTsKKyAgICBRVXJs
IG1fcmVkaXJlY3RVcmw7CisKKyAgICBRU3RyaW5nIG1fZW5jb2Rpbmc7CisgICAgUVN0cmluZyBt
X29mZmljaWFsTWltZVR5cGU7Cit9OworCiBjbGFzcyBRTmV0d29ya1JlcGx5SGFuZGxlciA6IHB1
YmxpYyBRT2JqZWN0CiB7CiAgICAgUV9PQkpFQ1QKQEAgLTQ4LDcgKzgxLDcgQEAgcHVibGljOgog
ICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKFJlc291cmNlSGFuZGxlKiwgTG9hZFR5cGUsIGJvb2wg
ZGVmZXJyZWQgPSBmYWxzZSk7CiAgICAgdm9pZCBzZXRMb2FkaW5nRGVmZXJyZWQoYm9vbCk7CiAK
LSAgICBRTmV0d29ya1JlcGx5KiByZXBseSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbHk7IH0KKyAg
ICBRTmV0d29ya1JlcGx5KiByZXBseSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbHlXcmFwcGVyID8g
bV9yZXBseVdyYXBwZXItPnJlcGx5KCkgOiAwOyB9CiAKICAgICB2b2lkIGFib3J0KCk7CiAKQEAg
LTY3LDggKzEwMCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXN1bWVEZWZlcnJlZExvYWQoKTsK
ICAgICB2b2lkIHJlZGlyZWN0KFJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBRVXJsJik7CiAgICAg
Ym9vbCB3YXNBYm9ydGVkKCkgY29uc3QgeyByZXR1cm4gIW1fcmVzb3VyY2VIYW5kbGU7IH0KKyAg
ICBRTmV0d29ya1JlcGx5KiBzZW5kTmV0d29ya1JlcXVlc3QoKTsKIAotICAgIFFOZXR3b3JrUmVw
bHkqIG1fcmVwbHk7CisgICAgUU5ldHdvcmtSZXBseVdyYXBwZXIqIG1fcmVwbHlXcmFwcGVyOwog
ICAgIFJlc291cmNlSGFuZGxlKiBtX3Jlc291cmNlSGFuZGxlOwogICAgIGJvb2wgbV9yZWRpcmVj
dGVkOwogICAgIGJvb2wgbV9yZXNwb25zZVNlbnQ7Ci0tIAoxLjcuMQoK
</data>
<flag name="review"
          id="79811"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
      

    </bug>

</bugzilla>