<?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>35389</bug_id>
          
          <creation_ts>2010-02-25 09:08:31 -0800</creation_ts>
          <short_desc>[Qt] GraphicsLayer: support reflections</short_desc>
          <delta_ts>2010-08-13 10:10:28 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>35382</dependson>
          <blocked>38744</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>hausmann</cc>
    
    <cc>jesus</cc>
    
    <cc>vestbo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>193751</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-02-25 09:08:31 -0800</bug_when>
    <thetext>LayoutTests/reflections should work in AC mode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196516</commentid>
    <comment_count>1</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2010-03-05 09:39:48 -0800</bug_when>
    <thetext>
Please follow the QtWebKit bug reporting guidelines when reporting bugs.

See http://trac.webkit.org/wiki/QtWebKitBugs

Specifically:

  - The &apos;QtWebKit&apos; component should be used for bugs/features in the public QtWebKit API layer, not to signify that the bug is specific to the Qt port of WebKit

    http://trac.webkit.org/wiki/QtWebKitBugs#Component</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200410</commentid>
    <comment_count>2</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-03-16 13:51:24 -0700</bug_when>
    <thetext>*** Bug 34762 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216615</commentid>
    <comment_count>3</comment_count>
      <attachid>54200</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-04-23 16:25:48 -0700</bug_when>
    <thetext>Created attachment 54200
initial reflection support in GraphicsLayerQt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218605</commentid>
    <comment_count>4</comment_count>
      <attachid>54200</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-04-28 13:40:01 -0700</bug_when>
    <thetext>Comment on attachment 54200
initial reflection support in GraphicsLayerQt


WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:562
 +              replica-&gt;m_replicaEffect.data()-&gt;setOpacity(m_layer-&gt;opacity());
Out of curiousity: Isn&apos;t m_replicaEffect-&gt;setOpacity much easier to read than m_replicaEffect.data()-&gt;setOpacity? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218609</commentid>
    <comment_count>5</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-04-28 13:51:28 -0700</bug_when>
    <thetext>hmmm... yes, for some reason I thought it was not supported, probably a brain lapse. Should I resubmit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219808</commentid>
    <comment_count>6</comment_count>
      <attachid>54866</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-05-02 03:22:43 -0700</bug_when>
    <thetext>Created attachment 54866
Revised documentation - all tests work with 4.7, though not all of them work with 4.6.

btw I can&apos;t use m_replicaEffect-&gt; instead of .data(). It just doesn&apos;t compile :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219816</commentid>
    <comment_count>7</comment_count>
      <attachid>54868</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-05-02 04:08:23 -0700</bug_when>
    <thetext>Created attachment 54868
Make sure the scene updates

The previous patch only worked on FullViewportUpdateMode. Now fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219817</commentid>
    <comment_count>8</comment_count>
      <attachid>54869</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-05-02 04:31:00 -0700</bug_when>
    <thetext>Created attachment 54869
correct upload...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224555</commentid>
    <comment_count>9</comment_count>
      <attachid>54869</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-05-12 05:53:02 -0700</bug_when>
    <thetext>Comment on attachment 54869
correct upload...

Big patch, first comments.

WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:56
 +  class ReplicaEffectQt : public QGraphicsEffect {
Why that name? Why not ReflectionEffectQt or so?

WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:61
 +      void renderMask(GraphicsLayer* layer, QPixmap&amp; pixmap, const QRectF&amp; boundingRect);
you can leave out layer and pixmap, that is redundant, according to the style guide

WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:62
 +      void draw(QPainter* painter);
same here

WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:66
 +      QRectF boundingRectFor(const QRectF&amp; sourceRect) const;
bounding rect for? 

WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:116
 +      bool isAncestorReplicated() const;
hasReplicatedAncestor() ?

WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:384
 +          if (scene())
This code here needs braces and its contents spans more than one non-logical line

WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:404
 +          return qobject_cast&lt;GraphicsLayerQtImpl*&gt;(m_layer-&gt;parent()-&gt;platformLayer()-&gt;toGraphicsObject())-&gt;isAncestorReplicated();
maybe we need some accessors for this? 

WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:1528
 +      // FIXME: use a smaller pixmap.
Maybe explain why</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224556</commentid>
    <comment_count>10</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-05-12 06:04:07 -0700</bug_when>
    <thetext>&gt;  +  class ReplicaEffectQt : public QGraphicsEffect {
&gt; Why that name? Why not ReflectionEffectQt or so?

because in GraphicsLayer.h it&apos;s called setReplicaLayer()... I don&apos;t mind changing it to reflection but I feel it doesn&apos;t really matter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226459</commentid>
    <comment_count>11</comment_count>
      <attachid>54869</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-05-16 02:29:11 -0700</bug_when>
    <thetext>Comment on attachment 54869
correct upload...

The current approach would be too slow on OpenGL due to the intermediate pixmaps. Researching other avenues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226880</commentid>
    <comment_count>12</comment_count>
      <attachid>56266</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-05-17 13:30:30 -0700</bug_when>
    <thetext>Created attachment 56266
Addressed Kenneth&apos;s comments and added some ChangeLog comments about OpenGL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232867</commentid>
    <comment_count>13</comment_count>
      <attachid>56266</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-06-01 11:28:39 -0700</bug_when>
    <thetext>Comment on attachment 56266
Addressed Kenneth&apos;s comments and added some ChangeLog comments about OpenGL 

Need to revise the patch, because it conflicts with other already-accepted patches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232917</commentid>
    <comment_count>14</comment_count>
      <attachid>57584</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-06-01 12:54:31 -0700</bug_when>
    <thetext>Created attachment 57584
Re-merged patch

I tested the new patch with all the compositing layout tests, it doesn&apos;t break anything and makes reflections work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232920</commentid>
    <comment_count>15</comment_count>
      <attachid>57585</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-06-01 12:56:33 -0700</bug_when>
    <thetext>Created attachment 57585
Had an extra line-break</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237559</commentid>
    <comment_count>16</comment_count>
      <attachid>57585</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-06-13 07:50:13 -0700</bug_when>
    <thetext>Comment on attachment 57585
Had an extra line-break

r+ with the below changes.

 604             if (m_layer-&gt;replicaLayer())
 605                 if (GraphicsLayerQtImpl* replica = toGraphicsLayerQtImpl(m_layer-&gt;replicaLayer()-&gt;platformLayer()))
 606                     replica-&gt;m_reflectionEffect.data()-&gt;updateGeometry();

This would need braces.WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:1130
 +  
unnecessary newline

WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:1209
 +          : QGraphicsEffect(parent)
too much indentation.

WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:1212
 +          , m_opacity(1)
Shouldnt this be 1.0?

1224     if (GraphicsLayer* maskLayer = layer-&gt;maskLayer())
 1225         if (QGraphicsItem* maskLayerImpl = maskLayer-&gt;nativeLayer()) {
 1226             QPainter maskPainter(&amp;pixmap);
 1227             maskPainter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
 1228             QStyleOptionGraphicsItem option;
 1229             option.exposedRect = option.rect = QRect(0, 0, boundingRect.width(), boundingRect.height());
 1230             maskLayerImpl-&gt;paint(&amp;maskPainter, &amp;option);
 1231         }

The above is missing braces as well. Maybe invert the logic and add an early return.


WebCore/platform/graphics/qt/GraphicsLayerQt.cpp:1258
 +      QPixmap intermediatePixmap(painter-&gt;device()-&gt;width(), painter-&gt;device()-&gt;height());
Isn&apos;t it better to get a handle of the device first, or is it implicitly shared?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240435</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-06-20 04:21:54 -0700</bug_when>
    <thetext>Assigning to Noam so he can land the patch with Kenneth&apos;s proposed changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264422</commentid>
    <comment_count>18</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-08-13 10:10:28 -0700</bug_when>
    <thetext>Not adding new features to GraphicsLayerQt. TextureMapper would be a replacement.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54200</attachid>
            <date>2010-04-23 16:25:48 -0700</date>
            <delta_ts>2010-05-02 04:31:00 -0700</delta_ts>
            <desc>initial reflection support in GraphicsLayerQt</desc>
            <filename>patch-35389-1.diff</filename>
            <type>text/plain</type>
            <size>19130</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Mzk4YTk5Zi4uZTBlNzk5MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzNyBAQAogMjAxMC0wNC0yMyAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gR3JhcGhpY3NMYXllcjogc3VwcG9ydCByZWZs
ZWN0aW9ucworCisgICAgICAgIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIHJlZmxlY3Rpb25zIGlu
IEdyYXBoaWNzTGF5ZXJRdC4KKyAgICAgICAgVGhpcyBpcyBkb25lIHdpdGggUUdyYXBoaWNzRWZm
ZWN0LCBhbmQgaW1wbGVtZW50cyB0aGUgR3JhcGhpY3NMYXllciBBUEkgdG8gZG8gc28uCisKKyAg
ICAgICAgU29tZSBvZiB0aGUgZWRnZSBjYXNlcywgbmFtZWx5IG5lc3RlZCByZWZsZWN0aW9ucyB3
aXRoIHRyYW5zZm9ybWF0aW9ucyBpbnNpZGUgdGhlbSwKKyAgICAgICAgYXJlIGRlZmVycmVkIHRv
IGEgbGF0ZXIgZml4LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNTM4OQorCisgICAgICAgIExheW91dCB0ZXN0cyB1bmRlciBjb21wb3NpdGluZy9y
ZWZsZWN0aW9ucywgZXhjZXB0IGZvciBuZXN0ZWQtcmVmbGVjdGlvbi1hbmNob3ItcG9pbnQgYW5k
CisgICAgICAgIG5lc3RlZC1yZWZsZWN0aW9uLWFuaW1hdGVkIG5vdyB3b3JrIGNvcnJlY3RseSBp
biB0aGUgUXQgcG9ydC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
TGF5ZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXNrRWZmZWN0UXQ6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVwbGljYUVmZmVjdFF0OjpSZXBsaWNhRWZmZWN0UXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVwbGljYUVmZmVjdFF0Ojpzb3VyY2VDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxpY2FFZmZlY3RRdDo6cmVuZGVyTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsaWNhRWZmZWN0UXQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGljYUVmZmVjdFF0
Ojp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsaWNhRWZmZWN0UXQ6OnNl
dE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclF0SW1wbDo6KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdEltcGw6OlN0YXRlOjpTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyUXRJbXBsOjpvcGFxdWVBcmVhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdEltcGw6OmZsdXNoQ2hhbmdlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyUXQ6OnNldFJlcGxpY2F0ZWRCeUxheWVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuaDoKKworMjAxMC0wNC0yMyAg
Tm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgogCiAgICAgICAgIFtRdF0gW1Bl
cmZvcm1hbmNlXSBHcmFwaGljc0xheWVyOiBjb25zdHJ1Y3RpbmcgdGhlIGxheWVycyB0YWtlcyB0
b28gbG9uZwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0xheWVyUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVy
UXQuY3BwCmluZGV4IGEzMWQwNDUuLjc1MGI0NTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAKQEAgLTQ2LDU1ICs0NiwzMyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIE1hc2sgZWZmZWN0IGlzIHRoZSBRR3JhcGhpY3NFZmZl
Y3QgaW1wbGVtZW50YXRpb24gb2YgQ1NTIC13ZWJraXQtbWFzay4KIGNsYXNzIE1hc2tFZmZlY3RR
dCA6IHB1YmxpYyBRR3JhcGhpY3NFZmZlY3QgeworICAgIFFfT0JKRUNUCiBwdWJsaWM6Ci0gICAg
TWFza0VmZmVjdFF0KFFPYmplY3QqIHBhcmVudCwgUUdyYXBoaWNzSXRlbSogbWFza0xheWVyKQot
ICAgICAgICAgICAgOiBRR3JhcGhpY3NFZmZlY3QocGFyZW50KQotICAgICAgICAgICAgLCBtX21h
c2tMYXllcihtYXNrTGF5ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZHJhdyhRUGFpbnRl
ciogcGFpbnRlcikKLSAgICB7Ci0gICAgICAgIC8vIHRoaXMgaXMgYSBtb2RpZmllZCBjbG9uZSBv
ZiBRR3JhcGhpY3NPcGFjaXR5RWZmZWN0LgotICAgICAgICAvLyBJdCdzIG1vcmUgZWZmaWNpZW50
IHRvIGRvIGl0IHRoaXMgd2F5IGJlY2F1c2UKLSAgICAgICAgLy8gKGEpIHdlIGRvbid0IG5lZWQg
dGhlIFFCcnVzaCBhYnN0cmFjdGlvbiAtIHdlIGFsd2F5cyBlbmQgdXAgdXNpbmcgUUdyYXBoaWNz
SXRlbTo6cGFpbnQgZnJvbSB0aGUgbWFzayBsYXllcgotICAgICAgICAvLyAoYikgUUdyYXBoaWNz
T3BhY2l0eUVmZmVjdCBkZXRhY2hlcyB0aGUgcGl4bWFwLCB3aGljaCBpcyBpbmVmZmljaWVudCBv
biBPcGVuR0wuCi0gICAgICAgIFFQaXhtYXAgbWFza1BpeG1hcChzb3VyY2VCb3VuZGluZ1JlY3Qo
KS50b0FsaWduZWRSZWN0KCkuc2l6ZSgpKTsKLQotICAgICAgICAvLyB3ZSBuZWVkIHRvIGRvIHRo
aXMgc28gdGhlIHBpeG1hcCB3b3VsZCBoYXZlIGhhc0FscGhhKCkKLSAgICAgICAgbWFza1BpeG1h
cC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIFFQYWludGVyIG1hc2tQYWludGVyKCZt
YXNrUGl4bWFwKTsKLSAgICAgICAgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtIG9wdGlvbjsKLSAg
ICAgICAgb3B0aW9uLmV4cG9zZWRSZWN0ID0gb3B0aW9uLnJlY3QgPSBtYXNrUGl4bWFwLnJlY3Qo
KTsKLSAgICAgICAgbWFza1BhaW50ZXIuc2V0UmVuZGVySGludHMocGFpbnRlci0+cmVuZGVySGlu
dHMoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fbWFza0xheWVyLT5wYWludCgmbWFza1BhaW50ZXIsICZv
cHRpb24sIDApOwotICAgICAgICBtYXNrUGFpbnRlci5lbmQoKTsKLSAgICAgICAgUVBvaW50IG9m
ZnNldDsKLSAgICAgICAgUVBpeG1hcCBzcmNQaXhtYXAgPSBzb3VyY2VQaXhtYXAoUXQ6OkxvZ2lj
YWxDb29yZGluYXRlcywgJm9mZnNldCwgUUdyYXBoaWNzRWZmZWN0OjpOb1BhZCk7Ci0KLSAgICAg
ICAgLy8gd2UgaGF2ZSB0byB1c2UgYW5vdGhlciBpbnRlcm1lZGlhdGUgcGl4bWFwLCB0byBtYWtl
IHN1cmUgdGhlIG1hc2sgYXBwbGllcyBvbmx5IHRvIHRoaXMgaXRlbQotICAgICAgICAvLyBhbmQg
ZG9lc24ndCBtb2RpZnkgcGl4ZWxzIGFscmVhZHkgcGFpbnRlZCBpbnRvIHRoaXMgcGFpbnQtZGV2
aWNlCi0gICAgICAgIFFQaXhtYXAgcGl4bWFwKHNyY1BpeG1hcC5zaXplKCkpOwotICAgICAgICBw
aXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotCi0gICAgICAgIGlmIChwaXhtYXAuaXNOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUVBhaW50ZXIgcGl4bWFwUGFpbnRl
cigmcGl4bWFwKTsKLSAgICAgICAgcGl4bWFwUGFpbnRlci5zZXRSZW5kZXJIaW50cyhwYWludGVy
LT5yZW5kZXJIaW50cygpKTsKLSAgICAgICAgcGl4bWFwUGFpbnRlci5zZXRDb21wb3NpdGlvbk1v
ZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOwotICAgICAgICAvLyBXZSB1c2Ug
ZHJhd1BpeG1hcCByYXRoZXIgdGhhbiBkZXRhY2hpbmcsIGJlY2F1c2UgaXQncyBtb3JlIGVmZmlj
aWVudCBvbiBPcGVuR0wKLSAgICAgICAgcGl4bWFwUGFpbnRlci5kcmF3UGl4bWFwKDAsIDAsIHNy
Y1BpeG1hcCk7Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWlu
dGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25Jbik7Ci0gICAgICAgIHBpeG1hcFBhaW50
ZXIuZHJhd1BpeG1hcCgwLCAwLCBtYXNrUGl4bWFwKTsKLSAgICAgICAgcGl4bWFwUGFpbnRlci5l
bmQoKTsKLSAgICAgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChvZmZzZXQsIHBpeG1hcCk7Ci0gICAg
fQotCisgICAgTWFza0VmZmVjdFF0KFFPYmplY3QqIHBhcmVudCwgUUdyYXBoaWNzSXRlbSogbWFz
a0xheWVyKTsKKyAgICB2b2lkIGRyYXcoUVBhaW50ZXIqIHBhaW50ZXIpOwogICAgIFFHcmFwaGlj
c0l0ZW0qIG1fbWFza0xheWVyOwogfTsKIAorLy8gUmVwbGljYUVmZmVjdFF0IGlzIHRoZSBRR3Jh
cGhpY3NFZmZlY3QgaW1wbGVtZW50YXRpb24gb2YgQ1NTIC13ZWJraXQtcmVmbGVjdGlvbi4KK2Ns
YXNzIFJlcGxpY2FFZmZlY3RRdCA6IHB1YmxpYyBRR3JhcGhpY3NFZmZlY3QgeworICAgIFFfT0JK
RUNUCitwdWJsaWM6CisgICAgUmVwbGljYUVmZmVjdFF0KFFPYmplY3QqIHBhcmVudCwgR3JhcGhp
Y3NMYXllciogcmVwbGljYUxheWVyLCBHcmFwaGljc0xheWVyKiByZXBsaWNhdGVkTGF5ZXIpOwor
CisgICAgdm9pZCByZW5kZXJNYXNrKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBRUGl4bWFwJiBwaXht
YXAsIGNvbnN0IFFSZWN0RiYgYm91bmRpbmdSZWN0KTsKKyAgICB2b2lkIGRyYXcoUVBhaW50ZXIq
IHBhaW50ZXIpOworICAgIHZvaWQgc2V0T3BhY2l0eShxcmVhbCBvcGFjaXR5KTsKKyAgICB2b2lk
IHNvdXJjZUNoYW5nZWQoQ2hhbmdlRmxhZ3MpOworICAgIHZvaWQgdXBkYXRlR2VvbWV0cnkoKTsK
KworICAgIEdyYXBoaWNzTGF5ZXIqIG1fcmVwbGljYUxheWVyOworICAgIEdyYXBoaWNzTGF5ZXIq
IG1fcmVwbGljYXRlZExheWVyOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fY29tcHV0ZWRU
cmFuc2Zvcm07CisgICAgcXJlYWwgbV9vcGFjaXR5OworfTsKKwogY2xhc3MgR3JhcGhpY3NMYXll
clF0SW1wbCA6IHB1YmxpYyBRR3JhcGhpY3NPYmplY3QgewogICAgIFFfT0JKRUNUCiAKQEAgLTEy
OCw4ICsxMDYsOSBAQCBwdWJsaWM6CiAgICAgICAgIENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlID0g
ICAoMUwgPDwgMTcpLAogICAgICAgICBEaXNwbGF5Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8
IDE4KSwKICAgICAgICAgQmFja2dyb3VuZENvbG9yQ2hhbmdlID0gICAgICgxTCA8PCAxOSksCisg
ICAgICAgIFJlcGxpY2FDaGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgMjApLAogCi0gICAgICAg
IERpc3RyaWJ1dGVzT3BhY2l0eUNoYW5nZSA9ICAoMUwgPDwgMjApCisgICAgICAgIERpc3RyaWJ1
dGVzT3BhY2l0eUNoYW5nZSA9ICAoMUwgPDwgMjEpCiAgICAgfTsKIAogICAgIC8vIHRoZSBjb21w
b3NpdG9yIGxldHMgdXMgc3BlY2lhbC1jYXNlIGltYWdlcyBhbmQgY29sb3JzLCBzbyB3ZSB0cnkg
dG8gZG8gc28KQEAgLTE4NSw2ICsxNjQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX3RyYW5zZm9y
bUFuaW1hdGlvblJ1bm5pbmc7CiAgICAgYm9vbCBtX29wYWNpdHlBbmltYXRpb25SdW5uaW5nOwog
ICAgIFFXZWFrUG9pbnRlcjxNYXNrRWZmZWN0UXQ+IG1fbWFza0VmZmVjdDsKKyAgICBRV2Vha1Bv
aW50ZXI8UmVwbGljYUVmZmVjdFF0PiBtX3JlcGxpY2FFZmZlY3Q7CiAKICAgICBzdHJ1Y3QgQ29u
dGVudERhdGEgewogICAgICAgICBRUGl4bWFwIHBpeG1hcDsKQEAgLTIxNyw3ICsxOTcsNiBAQCBw
dWJsaWM6CiAgICAgUVRpbWVyIG1fc3VzcGVuZFRpbWVyOwogCiAgICAgc3RydWN0IFN0YXRlIHsK
LSAgICAgICAgR3JhcGhpY3NMYXllciogbWFza0xheWVyOwogICAgICAgICBGbG9hdFBvaW50IHBv
czsKICAgICAgICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwogICAgICAgICBGbG9hdFNpemUg
c2l6ZTsKQEAgLTIzNyw5ICsyMTYsOSBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgYmFja2ZhY2VW
aXNpYmlsaXR5OiAxOwogICAgICAgICBib29sIGRpc3RyaWJ1dGVPcGFjaXR5OiAxOwogICAgICAg
ICBib29sIGFsaWduOiAyOwotICAgICAgICBTdGF0ZSgpOiBtYXNrTGF5ZXIoMCksIG9wYWNpdHko
MS5mKSwgcHJlc2VydmVzM0QoZmFsc2UpLCBtYXNrc1RvQm91bmRzKGZhbHNlKSwKLSAgICAgICAg
ICAgICAgICAgIGRyYXdzQ29udGVudChmYWxzZSksIGNvbnRlbnRzT3BhcXVlKGZhbHNlKSwgYmFj
a2ZhY2VWaXNpYmlsaXR5KGZhbHNlKSwKLSAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVPcGFj
aXR5KGZhbHNlKQorICAgICAgICBTdGF0ZSgpOiBvcGFjaXR5KDEuZiksIHByZXNlcnZlczNEKGZh
bHNlKSwgbWFza3NUb0JvdW5kcyhmYWxzZSksCisgICAgICAgICAgICAgICAgIGRyYXdzQ29udGVu
dChmYWxzZSksIGNvbnRlbnRzT3BhcXVlKGZhbHNlKSwgYmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNl
KSwKKyAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZU9wYWNpdHkoZmFsc2UpCiAgICAgICAgIHsK
ICAgICAgICAgfQogICAgIH0gbV9zdGF0ZTsKQEAgLTI4OCw3ICsyNjcsNiBAQCBHcmFwaGljc0xh
eWVyUXRJbXBsOjp+R3JhcGhpY3NMYXllclF0SW1wbCgpCiAjZW5kaWYKIH0KIAotCiBRUGl4bWFw
IEdyYXBoaWNzTGF5ZXJRdEltcGw6OnJlY2FjaGUoY29uc3QgUVJlZ2lvbiYgcmVnaW9uVG9VcGRh
dGUpCiB7CiAgICAgaWYgKCFtX2xheWVyLT5kcmF3c0NvbnRlbnQoKSkKQEAgLTM4MSw3ICszNTks
NyBAQCBib29sIEdyYXBoaWNzTGF5ZXJRdEltcGw6OmlzVHJhbnNmb3JtQW5pbWF0aW9uUnVubmlu
ZygpIGNvbnN0CiAKIFFQYWludGVyUGF0aCBHcmFwaGljc0xheWVyUXRJbXBsOjpvcGFxdWVBcmVh
KCkgY29uc3QKIHsKLSAgICBRUGFpbnRlclBhdGggcGFpbnRlclBhdGg7CisgICAgUVBhaW50ZXJQ
YXRoIHBhaW50ZXJQYXRoOyAgICAKICAgICAvLyB3ZSB0cnkgb3V0IGJlc3QgdG8gcmV0dXJuIHRo
ZSBvcGFxdWUgYXJlYSwgbWF5YmUgaXQgd2lsbCBoZWxwIGdyYXBoaWNzLXZpZXcgcmVuZGVyIGxl
c3MgaXRlbXMKICAgICBpZiAobV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IuaXNWYWxp
ZCgpICYmIG1fY3VycmVudENvbnRlbnQuYmFja2dyb3VuZENvbG9yLmFscGhhKCkgPT0gMHhmZikK
ICAgICAgICAgcGFpbnRlclBhdGguYWRkUmVjdChib3VuZGluZ1JlY3QoKSk7CkBAIC00OTEsMTMg
KzQ2OSwzNCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6OmZsdXNoQ2hhbmdlcyhib29sIHJl
Y3Vyc2l2ZSwgYm9vbCBmb3JjZVVwZGF0ZVRyYW5zZm9ybQogICAgICAgICAvLyB3ZSBjYW4ndCBw
YWludCBoZXJlLCBiZWNhdXNlIHdlIGRvbid0IGtub3cgaWYgdGhlIG1hc2sgbGF5ZXIKICAgICAg
ICAgLy8gaXRzZWxmIGlzIHJlYWR5Li4uIHdlJ2xsIGhhdmUgdG8gd2FpdCB0aWxsIHRoaXMgbGF5
ZXIgdHJpZXMgdG8gcGFpbnQKICAgICAgICAgc2V0RmxhZyhJdGVtQ2xpcHNDaGlsZHJlblRvU2hh
cGUsIG1fbGF5ZXItPm1hc2tMYXllcigpIHx8IG1fbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSk7Ci0g
ICAgICAgIHNldEdyYXBoaWNzRWZmZWN0KDApOwotICAgICAgICBpZiAobV9sYXllci0+bWFza0xh
eWVyKCkpIHsKLSAgICAgICAgICAgIGlmIChHcmFwaGljc0xheWVyUXRJbXBsKiBtYXNrID0gcW9i
amVjdF9jYXN0PEdyYXBoaWNzTGF5ZXJRdEltcGwqPihtX2xheWVyLT5tYXNrTGF5ZXIoKS0+cGxh
dGZvcm1MYXllcigpLT50b0dyYXBoaWNzT2JqZWN0KCkpKSB7Ci0gICAgICAgICAgICAgICAgbWFz
ay0+bV9tYXNrRWZmZWN0ID0gbmV3IE1hc2tFZmZlY3RRdCh0aGlzLCBtYXNrKTsKLSAgICAgICAg
ICAgICAgICBzZXRHcmFwaGljc0VmZmVjdChtYXNrLT5tX21hc2tFZmZlY3QuZGF0YSgpKTsKKyAg
ICAgICAgaWYgKG1fbGF5ZXItPmlzUmVwbGljYXRlZCgpKSB7CisgICAgICAgICAgICAvLyB0aGUg
cmVmbGVjdGlvbiBlZmZlY3QgaGFzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG1hc2tzLgorICAgICAg
ICAgICAgaWYgKGdyYXBoaWNzRWZmZWN0KCkpCisgICAgICAgICAgICAgICAgZ3JhcGhpY3NFZmZl
Y3QoKS0+dXBkYXRlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocW9iamVj
dF9jYXN0PE1hc2tFZmZlY3RRdCo+KGdyYXBoaWNzRWZmZWN0KCkpKQorICAgICAgICAgICAgICAg
IHNldEdyYXBoaWNzRWZmZWN0KDApOworICAgICAgICAgICAgaWYgKG1fbGF5ZXItPm1hc2tMYXll
cigpKSB7CisgICAgICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIG1hc2sgPSBx
b2JqZWN0X2Nhc3Q8R3JhcGhpY3NMYXllclF0SW1wbCo+KG1fbGF5ZXItPm1hc2tMYXllcigpLT5w
bGF0Zm9ybUxheWVyKCktPnRvR3JhcGhpY3NPYmplY3QoKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbWFzay0+bV9tYXNrRWZmZWN0ID0gbmV3IE1hc2tFZmZlY3RRdCh0aGlzLCBtYXNrKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2V0R3JhcGhpY3NFZmZlY3QobWFzay0+bV9tYXNrRWZmZWN0LmRh
dGEoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIFJlcGxpY2FDaGFuZ2UpIHsKKyAgICAgICAgLy8g
V2Ugb25seSB3YW50IHRvIGNsZWFyIGEgcmVwbGljYSBlZmZlY3QsIG5vdCBhIG1hc2sgZWZmZWN0
LgorICAgICAgICBpZiAocW9iamVjdF9jYXN0PFJlcGxpY2FFZmZlY3RRdCo+KGdyYXBoaWNzRWZm
ZWN0KCkpKQorICAgICAgICAgICAgc2V0R3JhcGhpY3NFZmZlY3QoMCk7CisgICAgICAgIGlmICht
X2xheWVyLT5yZXBsaWNhTGF5ZXIoKSkgeworICAgICAgICAgICAgR3JhcGhpY3NMYXllciogcmVw
bGljYUxheWVyID0gbV9sYXllci0+cmVwbGljYUxheWVyKCk7CisgICAgICAgICAgICBpZiAoR3Jh
cGhpY3NMYXllclF0SW1wbCogcmVwbGljYUltcGwgPSBxb2JqZWN0X2Nhc3Q8R3JhcGhpY3NMYXll
clF0SW1wbCo+KHJlcGxpY2FMYXllci0+cGxhdGZvcm1MYXllcigpLT50b0dyYXBoaWNzT2JqZWN0
KCkpKSB7CisgICAgICAgICAgICAgICAgcmVwbGljYUltcGwtPm1fcmVwbGljYUVmZmVjdCA9IG5l
dyBSZXBsaWNhRWZmZWN0UXQodGhpcywgcmVwbGljYUxheWVyLCBtX2xheWVyKTsKKyAgICAgICAg
ICAgICAgICBzZXRHcmFwaGljc0VmZmVjdChyZXBsaWNhSW1wbC0+bV9yZXBsaWNhRWZmZWN0LmRh
dGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgdXBkYXRlKCk7CiAgICAg
fQogCiAgICAgaWYgKChtX2NoYW5nZU1hc2sgJiBQb3NpdGlvbkNoYW5nZSkgJiYgKG1fbGF5ZXIt
PnBvc2l0aW9uKCkgIT0gbV9zdGF0ZS5wb3MpKQpAQCAtNTA3LDggKzUwNiwxMiBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJRdEltcGw6OmZsdXNoQ2hhbmdlcyhib29sIHJlY3Vyc2l2ZSwgYm9vbCBmb3Jj
ZVVwZGF0ZVRyYW5zZm9ybQogICAgICAgICBpZiAobV9sYXllci0+c2l6ZSgpICE9IG1fc3RhdGUu
c2l6ZSkgewogICAgICAgICAgICAgcHJlcGFyZUdlb21ldHJ5Q2hhbmdlKCk7CiAgICAgICAgICAg
ICBtX3NpemUgPSBRU2l6ZUYobV9sYXllci0+c2l6ZSgpLndpZHRoKCksIG1fbGF5ZXItPnNpemUo
KS5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAobV9sYXllci0+cmVwbGljYUxheWVyKCkpCisg
ICAgICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIHJlcGxpY2EgPSBxb2JqZWN0
X2Nhc3Q8R3JhcGhpY3NMYXllclF0SW1wbCo+KG1fbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wbGF0
Zm9ybUxheWVyKCktPnRvR3JhcGhpY3NPYmplY3QoKSkpCisgICAgICAgICAgICAgICAgICAgIHJl
cGxpY2EtPm1fcmVwbGljYUVmZmVjdC5kYXRhKCktPnVwZGF0ZUdlb21ldHJ5KCk7CiAgICAgICAg
IH0KICAgICB9CisKICAgICAvLyBGSVhNRTogdGhpcyBpcyBhIGhhY2ssIGR1ZSB0byBhIHByb2Jh
YmxlIFFHcmFwaGljc1NjZW5lIGJ1ZyB3aGVuIHJhcGlkbHkgbW9kaWZ5aW5nIHRoZSBwZXJzcGVj
dGl2ZQogICAgIC8vIGJ1dCB3aXRob3V0IHRoaXMgbGluZSB3ZSBnZXQgZ3JhcGhpYyBhcnRpZmFj
dHMKICAgICBpZiAoKG1fY2hhbmdlTWFzayAmIENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlKSAmJiBt
X3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtICE9IG1fbGF5ZXItPmNoaWxkcmVuVHJhbnNmb3JtKCkp
CkBAIC01NTQsOCArNTU3LDEzIEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFu
Z2VzKGJvb2wgcmVjdXJzaXZlLCBib29sIGZvcmNlVXBkYXRlVHJhbnNmb3JtCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoKG1fY2hhbmdlTWFzayAmIE9wYWNpdHlDaGFuZ2UpICYmIG1fc3Rh
dGUub3BhY2l0eSAhPSBtX2xheWVyLT5vcGFjaXR5KCkgJiYgIW1fb3BhY2l0eUFuaW1hdGlvblJ1
bm5pbmcpCi0gICAgICAgIHNldE9wYWNpdHkobV9sYXllci0+b3BhY2l0eSgpKTsKKyAgICBpZiAo
KG1fY2hhbmdlTWFzayAmIChPcGFjaXR5Q2hhbmdlIHwgUmVwbGljYUNoYW5nZSkgJiYgbV9zdGF0
ZS5vcGFjaXR5ICE9IG1fbGF5ZXItPm9wYWNpdHkoKSAmJiAhbV9vcGFjaXR5QW5pbWF0aW9uUnVu
bmluZykpIHsKKyAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIHJlcGxpY2EgPSBxb2Jq
ZWN0X2Nhc3Q8R3JhcGhpY3NMYXllclF0SW1wbCo+KG1fbGF5ZXItPnJlcGxpY2FMYXllcigpLT5w
bGF0Zm9ybUxheWVyKCktPnRvR3JhcGhpY3NPYmplY3QoKSkpIHsKKyAgICAgICAgICAgIHJlcGxp
Y2EtPm1fcmVwbGljYUVmZmVjdC5kYXRhKCktPnNldE9wYWNpdHkobV9sYXllci0+b3BhY2l0eSgp
KTsKKyAgICAgICAgICAgIHNldE9wYWNpdHkoMSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgc2V0T3BhY2l0eShtX2xheWVyLT5vcGFjaXR5KCkpOworICAgIH0KIAogICAgIGlmIChtX2No
YW5nZU1hc2sgJiBDb250ZW50c1JlY3RDaGFuZ2UpIHsKICAgICAgICAgY29uc3QgUVJlY3QgcmVj
dChtX2xheWVyLT5jb250ZW50c1JlY3QoKSk7CkBAIC01NzcsNiArNTg1LDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUsIGJvb2wgZm9yY2VV
cGRhdGVUcmFuc2Zvcm0KIAogICAgIGlmIChtX21hc2tFZmZlY3QpCiAgICAgICAgIG1fbWFza0Vm
ZmVjdC5kYXRhKCktPnVwZGF0ZSgpOworCiAgICAgZWxzZSBpZiAobV9jaGFuZ2VNYXNrICYgRGlz
cGxheUNoYW5nZSkgeyAgICAgICAgCiAgICAgICAgIC8vIFJlY2FjaGUgbm93OiBhbGwgdGhlIGNv
bnRlbnQgaXMgcmVhZHkgYW5kIHdlIGRvbid0IHdhbnQgdG8gd2FpdCB1bnRpbCB0aGUgcGFpbnQg
ZXZlbnQuCiAgICAgICAgIHJlY2FjaGUobV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1VwZGF0ZSk7
CkBAIC01OTAsNyArNTk5LDYgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5n
ZXMoYm9vbCByZWN1cnNpdmUsIGJvb2wgZm9yY2VVcGRhdGVUcmFuc2Zvcm0KICAgICAvLyBGSVhN
RTogdGhlIGZvbGxvd2luZyBmbGFncyBhcmUgY3VycmVudGx5IG5vdCBoYW5kbGVkLCBhcyB0aGV5
IGRvbid0IGhhdmUgYSBjbGVhciB0ZXN0IG9yIGFyZSBpbiBsb3cgcHJpb3JpdHkKICAgICAvLyBH
ZW9tZXRyeU9yaWVudGF0aW9uQ2hhbmdlLCBDb250ZW50c09yaWVudGF0aW9uQ2hhbmdlLCBCYWNr
ZmFjZVZpc2liaWxpdHlDaGFuZ2UsIENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlLCBQcmVzZXJ2ZXMz
RENoYW5nZQogCi0gICAgbV9zdGF0ZS5tYXNrTGF5ZXIgPSBtX2xheWVyLT5tYXNrTGF5ZXIoKTsK
ICAgICBtX3N0YXRlLnBvcyA9IG1fbGF5ZXItPnBvc2l0aW9uKCk7CiAgICAgbV9zdGF0ZS5hbmNo
b3JQb2ludCA9IG1fbGF5ZXItPmFuY2hvclBvaW50KCk7CiAgICAgbV9zdGF0ZS5zaXplID0gbV9s
YXllci0+c2l6ZSgpOwpAQCAtNjIyLDggKzYzMCwxMSBAQCBhZnRlckxheWVyQ2hhbmdlczoKICAg
ICAgICAgcmV0dXJuOyAgICAKIAogICAgIFFMaXN0PFFHcmFwaGljc0l0ZW0qPiBjaGlsZHJlbiA9
IGNoaWxkSXRlbXMoKTsKLSAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpCi0gICAgICAgIGNoaWxk
cmVuLmFwcGVuZChtX3N0YXRlLm1hc2tMYXllci0+cGxhdGZvcm1MYXllcigpKTsKKyAgICBpZiAo
bV9sYXllci0+bWFza0xheWVyKCkpCisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX2xheWVyLT5t
YXNrTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKKworICAgIGlmIChtX2xheWVyLT5yZXBsaWNh
TGF5ZXIoKSkKKyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fbGF5ZXItPnJlcGxpY2FMYXllcigp
LT5wbGF0Zm9ybUxheWVyKCkpOwogCiAgICAgZm9yIChRTGlzdDxRR3JhcGhpY3NJdGVtKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7
ICsraXQpIHsKICAgICAgICAgaWYgKFFHcmFwaGljc0l0ZW0qIGl0ZW0gPSAqaXQpCkBAIC05NDgs
NiArOTU5LDEzIEBAIGZsb2F0IEdyYXBoaWNzTGF5ZXJRdDo6YWNjdW11bGF0ZWRPcGFjaXR5KCkg
Y29uc3QKIH0KIAogLy8gcmVpbXAgZnJvbSBHcmFwaGljc0xheWVyLmgKK3ZvaWQgR3JhcGhpY3NM
YXllclF0OjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAg
ICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGljc0xheWVyUXRJbXBsOjpSZXBsaWNhQ2hhbmdl
KTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihsYXllcik7Cit9CisK
Ky8vIHJlaW1wIGZyb20gR3JhcGhpY3NMYXllci5oCiB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGUoKQogewogICAgIG1faW1wbC0+Zmx1c2hDaGFuZ2VzKCk7CkBAIC0x
MzY4LDYgKzEzODYsMTQ3IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0OjpyZXN1bWVBbmltYXRpb25z
KCkKICAgICB9CiB9CiAKK01hc2tFZmZlY3RRdDo6TWFza0VmZmVjdFF0KFFPYmplY3QqIHBhcmVu
dCwgUUdyYXBoaWNzSXRlbSogbWFza0xheWVyKQorICAgICAgICA6IFFHcmFwaGljc0VmZmVjdChw
YXJlbnQpCisgICAgICAgICwgbV9tYXNrTGF5ZXIobWFza0xheWVyKQoreworfQorCit2b2lkIE1h
c2tFZmZlY3RRdDo6ZHJhdyhRUGFpbnRlciogcGFpbnRlcikKK3sKKyAgICAvLyB0aGlzIGlzIGEg
bW9kaWZpZWQgY2xvbmUgb2YgUUdyYXBoaWNzT3BhY2l0eUVmZmVjdC4KKyAgICAvLyBJdCdzIG1v
cmUgZWZmaWNpZW50IHRvIGRvIGl0IHRoaXMgd2F5IGJlY2F1c2UKKyAgICAvLyAoYSkgd2UgZG9u
J3QgbmVlZCB0aGUgUUJydXNoIGFic3RyYWN0aW9uIC0gd2UgYWx3YXlzIGVuZCB1cCB1c2luZyBR
R3JhcGhpY3NJdGVtOjpwYWludCBmcm9tIHRoZSBtYXNrIGxheWVyCisgICAgLy8gKGIpIFFHcmFw
aGljc09wYWNpdHlFZmZlY3QgZGV0YWNoZXMgdGhlIHBpeG1hcCwgd2hpY2ggaXMgaW5lZmZpY2ll
bnQgb24gT3BlbkdMLgorICAgIFFQaXhtYXAgbWFza1BpeG1hcChzb3VyY2VCb3VuZGluZ1JlY3Qo
KS50b0FsaWduZWRSZWN0KCkuc2l6ZSgpKTsKKworICAgIGlmIChtYXNrUGl4bWFwLmlzTnVsbCgp
KSB7CisgICAgICAgIGRyYXdTb3VyY2UocGFpbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgc28gdGhlIHBpeG1hcCB3b3VsZCBoYXZlIGhh
c0FscGhhKCkKKyAgICBtYXNrUGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICBRUGFp
bnRlciBtYXNrUGFpbnRlcigmbWFza1BpeG1hcCk7CisgICAgUVN0eWxlT3B0aW9uR3JhcGhpY3NJ
dGVtIG9wdGlvbjsKKyAgICBvcHRpb24uZXhwb3NlZFJlY3QgPSBvcHRpb24ucmVjdCA9IG1hc2tQ
aXhtYXAucmVjdCgpOworICAgIG1hc2tQYWludGVyLnNldFJlbmRlckhpbnRzKHBhaW50ZXItPnJl
bmRlckhpbnRzKCksIHRydWUpOworICAgIG1fbWFza0xheWVyLT5wYWludCgmbWFza1BhaW50ZXIs
ICZvcHRpb24sIDApOworICAgIG1hc2tQYWludGVyLmVuZCgpOworICAgIFFQb2ludCBvZmZzZXQ7
CisgICAgUVBpeG1hcCBzcmNQaXhtYXAgPSBzb3VyY2VQaXhtYXAoUXQ6OkxvZ2ljYWxDb29yZGlu
YXRlcywgJm9mZnNldCwgUUdyYXBoaWNzRWZmZWN0OjpOb1BhZCk7CisKKyAgICAvLyB3ZSBoYXZl
IHRvIHVzZSBhbm90aGVyIGludGVybWVkaWF0ZSBwaXhtYXAsIHRvIG1ha2Ugc3VyZSB0aGUgbWFz
ayBhcHBsaWVzIG9ubHkgdG8gdGhpcyBpdGVtCisgICAgLy8gYW5kIGRvZXNuJ3QgbW9kaWZ5IHBp
eGVscyBhbHJlYWR5IHBhaW50ZWQgaW50byB0aGlzIHBhaW50LWRldmljZQorICAgIFFQaXhtYXAg
cGl4bWFwKHNyY1BpeG1hcC5zaXplKCkpOworICAgIHBpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVu
dCk7CisKKyAgICBpZiAocGl4bWFwLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBR
UGFpbnRlciBwaXhtYXBQYWludGVyKCZwaXhtYXApOworICAgIHBpeG1hcFBhaW50ZXIuc2V0UmVu
ZGVySGludHMocGFpbnRlci0+cmVuZGVySGludHMoKSk7CisgICAgcGl4bWFwUGFpbnRlci5zZXRD
b21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOworICAgIC8v
IFdlIHVzZSBkcmF3UGl4bWFwIHJhdGhlciB0aGFuIGRldGFjaGluZywgYmVjYXVzZSBpdCdzIG1v
cmUgZWZmaWNpZW50IG9uIE9wZW5HTAorICAgIHBpeG1hcFBhaW50ZXIuZHJhd1BpeG1hcCgwLCAw
LCBzcmNQaXhtYXApOworICAgIHBpeG1hcFBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWlu
dGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25Jbik7CisgICAgcGl4bWFwUGFpbnRlci5k
cmF3UGl4bWFwKDAsIDAsIG1hc2tQaXhtYXApOworICAgIHBpeG1hcFBhaW50ZXIuZW5kKCk7Cisg
ICAgcGFpbnRlci0+ZHJhd1BpeG1hcChvZmZzZXQsIHBpeG1hcCk7Cit9CisKK1JlcGxpY2FFZmZl
Y3RRdDo6UmVwbGljYUVmZmVjdFF0KFFPYmplY3QqIHBhcmVudCwgR3JhcGhpY3NMYXllciogcmVw
bGljYUxheWVyLCBHcmFwaGljc0xheWVyKiByZXBsaWNhdGVkTGF5ZXIpCisgICAgICAgIDogUUdy
YXBoaWNzRWZmZWN0KHBhcmVudCkKKyAgICAgICAgLCBtX3JlcGxpY2FMYXllcihyZXBsaWNhTGF5
ZXIpCisgICAgICAgICwgbV9yZXBsaWNhdGVkTGF5ZXIocmVwbGljYXRlZExheWVyKQorICAgICAg
ICAsIG1fb3BhY2l0eSgxKQoreworfQorCit2b2lkIFJlcGxpY2FFZmZlY3RRdDo6cmVuZGVyTWFz
ayhHcmFwaGljc0xheWVyKiBsYXllciwgUVBpeG1hcCYgcGl4bWFwLCBjb25zdCBRUmVjdEYmIGJv
dW5kaW5nUmVjdCkKK3sKKyAgICBpZiAoR3JhcGhpY3NMYXllciogbWFza0xheWVyID0gbGF5ZXIt
Pm1hc2tMYXllcigpKQorICAgICAgICBpZiAoUUdyYXBoaWNzSXRlbSogbWFza0xheWVySW1wbCA9
IG1hc2tMYXllci0+bmF0aXZlTGF5ZXIoKSkgeworICAgICAgICAgICAgUVBhaW50ZXIgbWFza1Bh
aW50ZXIoJnBpeG1hcCk7CisgICAgICAgICAgICBtYXNrUGFpbnRlci5zZXRDb21wb3NpdGlvbk1v
ZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0aW5hdGlvbkluKTsKKyAgICAgICAgICAg
IFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSBvcHRpb247CisgICAgICAgICAgICBvcHRpb24uZXhw
b3NlZFJlY3QgPSBvcHRpb24ucmVjdCA9IFFSZWN0KDAsIDAsIGJvdW5kaW5nUmVjdC53aWR0aCgp
LCBib3VuZGluZ1JlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgbWFza0xheWVySW1wbC0+cGFp
bnQoJm1hc2tQYWludGVyLCAmb3B0aW9uKTsKKyAgICAgICAgfQorfQorCit2b2lkIFJlcGxpY2FF
ZmZlY3RRdDo6ZHJhdyhRUGFpbnRlciogcGFpbnRlcikKK3sKKyAgICAvLyBGSVhNRTogbmVzdGVk
IHJlZmxlY3Rpb24gZG9uJ3QgYWx3YXlzIHdvcmsgYXMgZXhwZWN0ZWQsIHBvc3NpYmxlIGR1ZSB0
byBpc3N1ZXMgd2l0aCBRR3JhcGhpY3NFZmZlY3QuCisgICAgLy8gUmlnaHQgbm93IG9ubHkgc2lt
cGxlIHJlZmxlY3Rpb25zLCBpbmNsdWRpbmcgb3BhY2l0eSBhbmQgbWFza3MgYXJlIHN1cHBvcnRl
ZC4KKyAgICBpZiAoIW1fcmVwbGljYUxheWVyKSB7CisgICAgICAgIGRyYXdTb3VyY2UocGFpbnRl
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgUVJlY3RGIGJvdW5kaW5nUmVj
dCA9IHNvdXJjZUJvdW5kaW5nUmVjdCgpOworICAgIFFQb2ludCBvZmZzZXQ7CisgICAgUVBpeG1h
cCBvcmlnaW5hbCA9IHNvdXJjZVBpeG1hcChRdDo6TG9naWNhbENvb3JkaW5hdGVzLCAmb2Zmc2V0
LCBRR3JhcGhpY3NFZmZlY3Q6Ok5vUGFkKTsKKworICAgIC8vIFdlIGhhdmUgdG8gcmVuZGVyIHRo
ZSBtYXNrIG9uIHRoZSBzb3VyY2UgcGl4bWFwLCBiZWNhdXNlIGl0IGhhcyB0byBiZSByZWZsZWN0
ZWQuCisgICAgcmVuZGVyTWFzayhtX3JlcGxpY2F0ZWRMYXllciwgb3JpZ2luYWwsIGJvdW5kaW5n
UmVjdCk7CisgICAgUVBpeG1hcCByZXBsaWNhID0gb3JpZ2luYWw7CisKKyAgICAvLyBOb3cgd2Ug
cmVuZGVyIHRoZSBtYXNrIG9uIHRoZSBhY3R1YWwgcmVmbGVjdGlvbi4KKyAgICByZW5kZXJNYXNr
KG1fcmVwbGljYUxheWVyLCByZXBsaWNhLCBib3VuZGluZ1JlY3QpOworCisgICAgLy8gV2UgbmVl
ZCBhbiBpbnRlcm1lZGlhdGUgcGl4bWFwIHRvIGhhbmRsZSBvcGFjaXR5IGNvcnJlY3RseSAtIHRo
ZSBvcmlnaW5hbAorICAgIC8vIGFuZCB0aGUgcmVmbGVjdGlvbiBoYXZlIHRvIGJlIGJsZW5kZWQg
YmVmb3JlIHRoZSBvcGFjaXR5IGNvbWVzIGludG8gcGxheS4KKworICAgIC8vIEZJWE1FOiB1c2Ug
YSBzbWFsbGVyIHBpeG1hcC4KKyAgICBRUGl4bWFwIGludGVybWVkaWF0ZVBpeG1hcChwYWludGVy
LT5kZXZpY2UoKS0+d2lkdGgoKSwgcGFpbnRlci0+ZGV2aWNlKCktPmhlaWdodCgpKTsKKyAgICBp
bnRlcm1lZGlhdGVQaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgIFFQYWludGVyIGlu
dGVybWVkaWF0ZVBhaW50ZXIoJmludGVybWVkaWF0ZVBpeG1hcCk7CisgICAgaW50ZXJtZWRpYXRl
UGFpbnRlci5zZXRSZW5kZXJIaW50cyhwYWludGVyLT5yZW5kZXJIaW50cygpKTsKKyAgICBpbnRl
cm1lZGlhdGVQYWludGVyLnNldFRyYW5zZm9ybShwYWludGVyLT50cmFuc2Zvcm0oKSk7CisgICAg
aW50ZXJtZWRpYXRlUGFpbnRlci5kcmF3UGl4bWFwKG9mZnNldCwgb3JpZ2luYWwpOworICAgIGlu
dGVybWVkaWF0ZVBhaW50ZXIuc2V0VHJhbnNmb3JtKG1fY29tcHV0ZWRUcmFuc2Zvcm0sIHRydWUp
OworCisgICAgLy8gV2UgcGFpbnQgdGhlIHJlZmxlY3Rpb24gYmVoaW5kIHRoZSBvcmlnaW4uCisg
ICAgaW50ZXJtZWRpYXRlUGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBv
c2l0aW9uTW9kZV9EZXN0aW5hdGlvbk92ZXIpOworICAgIGludGVybWVkaWF0ZVBhaW50ZXIuZHJh
d1BpeG1hcChvZmZzZXQsIHJlcGxpY2EpOworICAgIGludGVybWVkaWF0ZVBhaW50ZXIuZW5kKCk7
CisgICAgcGFpbnRlci0+c2F2ZSgpOworCisgICAgLy8gVGhlIGVmZmVjdCB3YXMgYWxyZWFkeSBk
cmF3biB1c2luZyB0aGUgcGFpbnRlcidzIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4KKyAgICBwYWlu
dGVyLT5yZXNldFRyYW5zZm9ybSgpOworICAgIHBhaW50ZXItPnNldE9wYWNpdHkobV9vcGFjaXR5
KTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKDAsIDAsIGludGVybWVkaWF0ZVBpeG1hcCk7Cisg
ICAgcGFpbnRlci0+cmVzdG9yZSgpOworfQorCit2b2lkIFJlcGxpY2FFZmZlY3RRdDo6dXBkYXRl
R2VvbWV0cnkoKQoreworICAgIC8vIFdlIGJha2UgdGhlIGFuY2hvciwgdHJhbnNmb3JtYXRpb24g
YW5kIHJlcGxpY2F0ZWQgbGF5ZXIgcG9zaXRpb24gaW50byBtX2NvbXB1dGVkVHJhbnNmb3JtLgor
ICAgIGNvbnN0IHFyZWFsIGFuY2hvclggPSBtX3JlcGxpY2FMYXllci0+YW5jaG9yUG9pbnQoKS54
KCkgKiBtX3JlcGxpY2FMYXllci0+c2l6ZSgpLndpZHRoKCk7CisgICAgY29uc3QgcXJlYWwgYW5j
aG9yWSA9IG1fcmVwbGljYUxheWVyLT5hbmNob3JQb2ludCgpLnkoKSAqIG1fcmVwbGljYUxheWVy
LT5zaXplKCkuaGVpZ2h0KCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwor
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoYW5jaG9yWCwgYW5jaG9yWSkKKyAgICAgICAgLm11bHRM
ZWZ0KG1fcmVwbGljYUxheWVyLT50cmFuc2Zvcm0oKSkKKyAgICAgICAgLnRyYW5zbGF0ZSgtYW5j
aG9yWCwgLWFuY2hvclkpCisgICAgICAgIC50cmFuc2xhdGUobV9yZXBsaWNhTGF5ZXItPnJlcGxp
Y2F0ZWRMYXllclBvc2l0aW9uKCkueCgpLCBtX3JlcGxpY2FMYXllci0+cmVwbGljYXRlZExheWVy
UG9zaXRpb24oKS55KCkpOworICAgIG1fY29tcHV0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07Cisg
ICAgdXBkYXRlQm91bmRpbmdSZWN0KCk7Cit9CisKK3ZvaWQgUmVwbGljYUVmZmVjdFF0OjpzZXRP
cGFjaXR5KHFyZWFsIG9wYWNpdHkpCit7CisgICAgLy8gV2UgaGF2ZSB0byBtYW5hZ2Ugb3BhY2l0
eSBzZXBhcmF0ZWx5IGZyb20gUUdyYXBoaWNzVmlldywgYmVjYXVzZSBpbiB0aGlzIGNhc2UKKyAg
ICAvLyB0aGUgb3BhY2l0eSBoYXMgdG8gYmUgYXBwbGllZCBhZnRlciB0aGUgZWZmZWN0LgorICAg
IG1fb3BhY2l0eSA9IG9wYWNpdHk7CisgICAgdXBkYXRlKCk7Cit9CisKK3ZvaWQgUmVwbGljYUVm
ZmVjdFF0Ojpzb3VyY2VDaGFuZ2VkKENoYW5nZUZsYWdzKQoreworICAgIHVwZGF0ZUdlb21ldHJ5
KCk7Cit9CisKKwogI2VuZGlmIC8vIFFUX05PX0FOSU1BVElPTgogfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuaAppbmRleCA5ZTU4MzJmLi5kYmUz
YjI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5
ZXJRdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0
LmgKQEAgLTc5LDYgKzc5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXN0cmlidXRl
T3BhY2l0eShmbG9hdCk7CiAgICAgdmlydHVhbCBmbG9hdCBhY2N1bXVsYXRlZE9wYWNpdHkoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKTsKKyAgICB2b2lk
IHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsKIAogcHJpdmF0ZToKICAgICBP
d25QdHI8R3JhcGhpY3NMYXllclF0SW1wbD4gbV9pbXBsOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54866</attachid>
            <date>2010-05-02 03:22:43 -0700</date>
            <delta_ts>2010-05-02 04:31:00 -0700</delta_ts>
            <desc>Revised documentation - all tests work with 4.7, though not all of them work with 4.6.</desc>
            <filename>patch-35389-2.diff</filename>
            <type>text/plain</type>
            <size>17880</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjY1NmRjZC4uOWMzN2U2ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wNS0wMiAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gR3JhcGhpY3NMYXllcjogc3VwcG9ydCByZWZs
ZWN0aW9ucworCisgICAgICAgIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIHJlZmxlY3Rpb25zIGlu
IEdyYXBoaWNzTGF5ZXJRdC4KKyAgICAgICAgVGhpcyBpcyBkb25lIHdpdGggUUdyYXBoaWNzRWZm
ZWN0LCBhbmQgaW1wbGVtZW50cyB0aGUgR3JhcGhpY3NMYXllciBBUEkgdG8gZG8gc28uCisKKyAg
ICAgICAgU29tZSBvZiB0aGUgZWRnZSBjYXNlcywgbmFtZWx5IG5lc3RlZCByZWZsZWN0aW9ucyB3
aXRoIHRyYW5zZm9ybWF0aW9ucyBpbnNpZGUgdGhlbSwKKyAgICAgICAgYXJlIGRlZmVycmVkIHRv
IGEgbGF0ZXIgZml4LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNTM4OQorCisgICAgICAgIEFsbCBMYXlvdXQgdGVzdHMgdW5kZXIgY29tcG9zaXRp
bmcvcmVmbGVjdGlvbnMgd29yayB3aXRoIFF0IDQuNy4gV2l0aCBRdCA0LjYueCwKKyAgICAgICAg
bmVzdGVkLXJlZmxlY3Rpb24tYW5jaG9yLXBvaW50Lmh0bWwgZG9lc24ndCB3b3JrLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1hc2tFZmZlY3RRdDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsaWNh
RWZmZWN0UXQ6OlJlcGxpY2FFZmZlY3RRdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsaWNhRWZm
ZWN0UXQ6OnNvdXJjZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGljYUVmZmVjdFF0
OjpyZW5kZXJNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxpY2FFZmZlY3RRdDo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpSZXBsaWNhRWZmZWN0UXQ6OnVwZGF0ZUdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlcGxpY2FFZmZlY3RRdDo6c2V0T3BhY2l0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyUXRJbXBsOjopOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclF0SW1wbDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJRdEltcGw6Om9wYXF1ZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
clF0SW1wbDo6Zmx1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJR
dDo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzTGF5ZXJRdC5oOgorCiAyMDEwLTA1LTAyICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNo
YWVsbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERtaXRyeSBUaXRvdi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAppbmRl
eCBkZTc1ODFhLi5hY2VjNzc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0xheWVyUXQuY3BwCkBAIC00Myw1NSArNDMsMzMgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisvLyBNYXNrIGVmZmVjdCBpcyB0aGUgUUdyYXBoaWNzRWZmZWN0IGltcGxlbWVu
dGF0aW9uIG9mIENTUyAtd2Via2l0LW1hc2suCiBjbGFzcyBNYXNrRWZmZWN0UXQgOiBwdWJsaWMg
UUdyYXBoaWNzRWZmZWN0IHsKKyAgICBRX09CSkVDVAogcHVibGljOgotICAgIE1hc2tFZmZlY3RR
dChRT2JqZWN0KiBwYXJlbnQsIFFHcmFwaGljc0l0ZW0qIG1hc2tMYXllcikKLSAgICAgICAgICAg
IDogUUdyYXBoaWNzRWZmZWN0KHBhcmVudCkKLSAgICAgICAgICAgICwgbV9tYXNrTGF5ZXIobWFz
a0xheWVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGRyYXcoUVBhaW50ZXIqIHBhaW50ZXIp
Ci0gICAgewotICAgICAgICAvLyB0aGlzIGlzIGEgbW9kaWZpZWQgY2xvbmUgb2YgUUdyYXBoaWNz
T3BhY2l0eUVmZmVjdC4KLSAgICAgICAgLy8gSXQncyBtb3JlIGVmZmljaWVudCB0byBkbyBpdCB0
aGlzIHdheSBiZWNhdXNlCi0gICAgICAgIC8vIChhKSB3ZSBkb24ndCBuZWVkIHRoZSBRQnJ1c2gg
YWJzdHJhY3Rpb24gLSB3ZSBhbHdheXMgZW5kIHVwIHVzaW5nIFFHcmFwaGljc0l0ZW06OnBhaW50
IGZyb20gdGhlIG1hc2sgbGF5ZXIKLSAgICAgICAgLy8gKGIpIFFHcmFwaGljc09wYWNpdHlFZmZl
Y3QgZGV0YWNoZXMgdGhlIHBpeG1hcCwgd2hpY2ggaXMgaW5lZmZpY2llbnQgb24gT3BlbkdMLgot
ICAgICAgICBRUGl4bWFwIG1hc2tQaXhtYXAoc291cmNlQm91bmRpbmdSZWN0KCkudG9BbGlnbmVk
UmVjdCgpLnNpemUoKSk7Ci0KLSAgICAgICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIHNvIHRoZSBw
aXhtYXAgd291bGQgaGF2ZSBoYXNBbHBoYSgpCi0gICAgICAgIG1hc2tQaXhtYXAuZmlsbChRdDo6
dHJhbnNwYXJlbnQpOwotICAgICAgICBRUGFpbnRlciBtYXNrUGFpbnRlcigmbWFza1BpeG1hcCk7
Ci0gICAgICAgIFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSBvcHRpb247Ci0gICAgICAgIG9wdGlv
bi5leHBvc2VkUmVjdCA9IG9wdGlvbi5yZWN0ID0gbWFza1BpeG1hcC5yZWN0KCk7Ci0gICAgICAg
IG1hc2tQYWludGVyLnNldFJlbmRlckhpbnRzKHBhaW50ZXItPnJlbmRlckhpbnRzKCksIHRydWUp
OwotICAgICAgICBtX21hc2tMYXllci0+cGFpbnQoJm1hc2tQYWludGVyLCAmb3B0aW9uLCAwKTsK
LSAgICAgICAgbWFza1BhaW50ZXIuZW5kKCk7Ci0gICAgICAgIFFQb2ludCBvZmZzZXQ7Ci0gICAg
ICAgIFFQaXhtYXAgc3JjUGl4bWFwID0gc291cmNlUGl4bWFwKFF0OjpMb2dpY2FsQ29vcmRpbmF0
ZXMsICZvZmZzZXQsIFFHcmFwaGljc0VmZmVjdDo6Tm9QYWQpOwotCi0gICAgICAgIC8vIHdlIGhh
dmUgdG8gdXNlIGFub3RoZXIgaW50ZXJtZWRpYXRlIHBpeG1hcCwgdG8gbWFrZSBzdXJlIHRoZSBt
YXNrIGFwcGxpZXMgb25seSB0byB0aGlzIGl0ZW0KLSAgICAgICAgLy8gYW5kIGRvZXNuJ3QgbW9k
aWZ5IHBpeGVscyBhbHJlYWR5IHBhaW50ZWQgaW50byB0aGlzIHBhaW50LWRldmljZQotICAgICAg
ICBRUGl4bWFwIHBpeG1hcChzcmNQaXhtYXAuc2l6ZSgpKTsKLSAgICAgICAgcGl4bWFwLmZpbGwo
UXQ6OnRyYW5zcGFyZW50KTsKLQotICAgICAgICBpZiAocGl4bWFwLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIFFQYWludGVyIHBpeG1hcFBhaW50ZXIoJnBpeG1hcCk7
Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuc2V0UmVuZGVySGludHMocGFpbnRlci0+cmVuZGVySGlu
dHMoKSk7Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICAgICAgLy8gV2UgdXNlIGRyYXdQaXhtYXAg
cmF0aGVyIHRoYW4gZGV0YWNoaW5nLCBiZWNhdXNlIGl0J3MgbW9yZSBlZmZpY2llbnQgb24gT3Bl
bkdMCi0gICAgICAgIHBpeG1hcFBhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBzcmNQaXhtYXApOwot
ICAgICAgICBwaXhtYXBQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9z
aXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOwotICAgICAgICBwaXhtYXBQYWludGVyLmRyYXdQaXht
YXAoMCwgMCwgbWFza1BpeG1hcCk7Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuZW5kKCk7Ci0gICAg
ICAgIHBhaW50ZXItPmRyYXdQaXhtYXAob2Zmc2V0LCBwaXhtYXApOwotICAgIH0KLQorICAgIE1h
c2tFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIFFHcmFwaGljc0l0ZW0qIG1hc2tMYXllcik7Cisg
ICAgdm9pZCBkcmF3KFFQYWludGVyKiBwYWludGVyKTsKICAgICBRR3JhcGhpY3NJdGVtKiBtX21h
c2tMYXllcjsKIH07CiAKKy8vIFJlcGxpY2FFZmZlY3RRdCBpcyB0aGUgUUdyYXBoaWNzRWZmZWN0
IGltcGxlbWVudGF0aW9uIG9mIENTUyAtd2Via2l0LXJlZmxlY3Rpb24uCitjbGFzcyBSZXBsaWNh
RWZmZWN0UXQgOiBwdWJsaWMgUUdyYXBoaWNzRWZmZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGlj
OgorICAgIFJlcGxpY2FFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIEdyYXBoaWNzTGF5ZXIqIHJl
cGxpY2FMYXllciwgR3JhcGhpY3NMYXllciogcmVwbGljYXRlZExheWVyKTsKKworICAgIHZvaWQg
cmVuZGVyTWFzayhHcmFwaGljc0xheWVyKiBsYXllciwgUVBpeG1hcCYgcGl4bWFwLCBjb25zdCBR
UmVjdEYmIGJvdW5kaW5nUmVjdCk7CisgICAgdm9pZCBkcmF3KFFQYWludGVyKiBwYWludGVyKTsK
KyAgICB2b2lkIHNldE9wYWNpdHkocXJlYWwgb3BhY2l0eSk7CisgICAgdm9pZCBzb3VyY2VDaGFu
Z2VkKENoYW5nZUZsYWdzKTsKKyAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KCk7CisKKyAgICBHcmFw
aGljc0xheWVyKiBtX3JlcGxpY2FMYXllcjsKKyAgICBHcmFwaGljc0xheWVyKiBtX3JlcGxpY2F0
ZWRMYXllcjsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2NvbXB1dGVkVHJhbnNmb3JtOwor
ICAgIHFyZWFsIG1fb3BhY2l0eTsKK307CisKIGNsYXNzIEdyYXBoaWNzTGF5ZXJRdEltcGwgOiBw
dWJsaWMgUUdyYXBoaWNzT2JqZWN0IHsKICAgICBRX09CSkVDVAogCkBAIC0xMjUsOCArMTAzLDkg
QEAgcHVibGljOgogICAgICAgICBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSA9ICAgKDFMIDw8IDE3
KSwKICAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAxOCksCiAgICAg
ICAgIEJhY2tncm91bmRDb2xvckNoYW5nZSA9ICAgICAoMUwgPDwgMTkpLAorICAgICAgICBSZXBs
aWNhQ2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDIwKSwKIAotICAgICAgICBEaXN0cmlidXRl
c09wYWNpdHlDaGFuZ2UgPSAgKDFMIDw8IDIwKQorICAgICAgICBEaXN0cmlidXRlc09wYWNpdHlD
aGFuZ2UgPSAgKDFMIDw8IDIxKQogICAgIH07CiAKICAgICAvLyB0aGUgY29tcG9zaXRvciBsZXRz
IHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2UgdHJ5IHRvIGRvIHNvCkBA
IC0xODAsNiArMTU5LDcgQEAgcHVibGljOgogICAgIGJvb2wgbV90cmFuc2Zvcm1BbmltYXRpb25S
dW5uaW5nOwogICAgIGJvb2wgbV9vcGFjaXR5QW5pbWF0aW9uUnVubmluZzsKICAgICBRV2Vha1Bv
aW50ZXI8TWFza0VmZmVjdFF0PiBtX21hc2tFZmZlY3Q7CisgICAgUVdlYWtQb2ludGVyPFJlcGxp
Y2FFZmZlY3RRdD4gbV9yZXBsaWNhRWZmZWN0OwogCiAgICAgc3RydWN0IENvbnRlbnREYXRhIHsK
ICAgICAgICAgUVBpeG1hcCBwaXhtYXA7CkBAIC0yMTIsNyArMTkyLDYgQEAgcHVibGljOgogICAg
IFFUaW1lciBtX3N1c3BlbmRUaW1lcjsKIAogICAgIHN0cnVjdCBTdGF0ZSB7Ci0gICAgICAgIEdy
YXBoaWNzTGF5ZXIqIG1hc2tMYXllcjsKICAgICAgICAgRmxvYXRQb2ludCBwb3M7CiAgICAgICAg
IEZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKICAgICAgICAgRmxvYXRTaXplIHNpemU7CkBAIC0y
MzIsOSArMjExLDkgQEAgcHVibGljOgogICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJpbGl0eTog
MTsKICAgICAgICAgYm9vbCBkaXN0cmlidXRlT3BhY2l0eTogMTsKICAgICAgICAgYm9vbCBhbGln
bjogMjsKLSAgICAgICAgU3RhdGUoKTogbWFza0xheWVyKDApLCBvcGFjaXR5KDEuZiksIHByZXNl
cnZlczNEKGZhbHNlKSwgbWFza3NUb0JvdW5kcyhmYWxzZSksCi0gICAgICAgICAgICAgICAgICBk
cmF3c0NvbnRlbnQoZmFsc2UpLCBjb250ZW50c09wYXF1ZShmYWxzZSksIGJhY2tmYWNlVmlzaWJp
bGl0eShmYWxzZSksCi0gICAgICAgICAgICAgICAgICBkaXN0cmlidXRlT3BhY2l0eShmYWxzZSkK
KyAgICAgICAgU3RhdGUoKTogb3BhY2l0eSgxLmYpLCBwcmVzZXJ2ZXMzRChmYWxzZSksIG1hc2tz
VG9Cb3VuZHMoZmFsc2UpLAorICAgICAgICAgICAgICAgICBkcmF3c0NvbnRlbnQoZmFsc2UpLCBj
b250ZW50c09wYXF1ZShmYWxzZSksIGJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSksCisgICAgICAg
ICAgICAgICAgIGRpc3RyaWJ1dGVPcGFjaXR5KGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0K
ICAgICB9IG1fc3RhdGU7CkBAIC0yOTEsNyArMjcwLDYgQEAgY29uc3QgR3JhcGhpY3NMYXllclF0
SW1wbCogR3JhcGhpY3NMYXllclF0SW1wbDo6cm9vdExheWVyKCkgY29uc3QKIH0KIAogCi0KIFFQ
aXhtYXAgR3JhcGhpY3NMYXllclF0SW1wbDo6cmVjYWNoZShjb25zdCBRUmVnaW9uJiByZWdpb25U
b1VwZGF0ZSkKIHsKICAgICBpZiAoIW1fbGF5ZXItPmRyYXdzQ29udGVudCgpKQpAQCAtNTIzLDIx
ICs1MDEsNDYgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCBy
ZWN1cnNpdmUsIGJvb2wgZm9yY2VVcGRhdGVUcmFuc2Zvcm0KICAgICAgICAgLy8gd2UgY2FuJ3Qg
cGFpbnQgaGVyZSwgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGlmIHRoZSBtYXNrIGxheWVyCiAgICAg
ICAgIC8vIGl0c2VsZiBpcyByZWFkeS4uLiB3ZSdsbCBoYXZlIHRvIHdhaXQgdGlsbCB0aGlzIGxh
eWVyIHRyaWVzIHRvIHBhaW50CiAgICAgICAgIHNldEZsYWcoSXRlbUNsaXBzQ2hpbGRyZW5Ub1No
YXBlLCBtX2xheWVyLT5tYXNrTGF5ZXIoKSB8fCBtX2xheWVyLT5tYXNrc1RvQm91bmRzKCkpOwot
ICAgICAgICBzZXRHcmFwaGljc0VmZmVjdCgwKTsKLSAgICAgICAgaWYgKG1fbGF5ZXItPm1hc2tM
YXllcigpKSB7Ci0gICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXllclF0SW1wbCogbWFzayA9IHFv
YmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJbXBsKj4obV9sYXllci0+bWFza0xheWVyKCktPnBs
YXRmb3JtTGF5ZXIoKS0+dG9HcmFwaGljc09iamVjdCgpKSkgewotICAgICAgICAgICAgICAgIG1h
c2stPm1fbWFza0VmZmVjdCA9IG5ldyBNYXNrRWZmZWN0UXQodGhpcywgbWFzayk7Ci0gICAgICAg
ICAgICAgICAgc2V0R3JhcGhpY3NFZmZlY3QobWFzay0+bV9tYXNrRWZmZWN0LmRhdGEoKSk7Cisg
ICAgICAgIGlmIChtX2xheWVyLT5pc1JlcGxpY2F0ZWQoKSkgeworICAgICAgICAgICAgLy8gdGhl
IHJlZmxlY3Rpb24gZWZmZWN0IGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciBtYXNrcy4KKyAgICAg
ICAgICAgIGlmIChncmFwaGljc0VmZmVjdCgpKQorICAgICAgICAgICAgICAgIGdyYXBoaWNzRWZm
ZWN0KCktPnVwZGF0ZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHFvYmpl
Y3RfY2FzdDxNYXNrRWZmZWN0UXQqPihncmFwaGljc0VmZmVjdCgpKSkKKyAgICAgICAgICAgICAg
ICBzZXRHcmFwaGljc0VmZmVjdCgwKTsKKyAgICAgICAgICAgIGlmIChtX2xheWVyLT5tYXNrTGF5
ZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChHcmFwaGljc0xheWVyUXRJbXBsKiBtYXNrID0g
cW9iamVjdF9jYXN0PEdyYXBoaWNzTGF5ZXJRdEltcGwqPihtX2xheWVyLT5tYXNrTGF5ZXIoKS0+
cGxhdGZvcm1MYXllcigpLT50b0dyYXBoaWNzT2JqZWN0KCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1hc2stPm1fbWFza0VmZmVjdCA9IG5ldyBNYXNrRWZmZWN0UXQodGhpcywgbWFzayk7Cisg
ICAgICAgICAgICAgICAgICAgIHNldEdyYXBoaWNzRWZmZWN0KG1hc2stPm1fbWFza0VmZmVjdC5k
YXRhKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChtX2NoYW5nZU1hc2sgJiBSZXBsaWNhQ2hhbmdlKSB7CisgICAgICAgIC8v
IFdlIG9ubHkgd2FudCB0byBjbGVhciBhIHJlcGxpY2EgZWZmZWN0LCBub3QgYSBtYXNrIGVmZmVj
dC4KKyAgICAgICAgaWYgKHFvYmplY3RfY2FzdDxSZXBsaWNhRWZmZWN0UXQqPihncmFwaGljc0Vm
ZmVjdCgpKSkKKyAgICAgICAgICAgIHNldEdyYXBoaWNzRWZmZWN0KDApOworICAgICAgICBpZiAo
bV9sYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXIqIHJl
cGxpY2FMYXllciA9IG1fbGF5ZXItPnJlcGxpY2FMYXllcigpOworICAgICAgICAgICAgaWYgKEdy
YXBoaWNzTGF5ZXJRdEltcGwqIHJlcGxpY2FJbXBsID0gcW9iamVjdF9jYXN0PEdyYXBoaWNzTGF5
ZXJRdEltcGwqPihyZXBsaWNhTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+dG9HcmFwaGljc09iamVj
dCgpKSkgeworICAgICAgICAgICAgICAgIHJlcGxpY2FJbXBsLT5tX3JlcGxpY2FFZmZlY3QgPSBu
ZXcgUmVwbGljYUVmZmVjdFF0KHRoaXMsIHJlcGxpY2FMYXllciwgbV9sYXllcik7CisgICAgICAg
ICAgICAgICAgc2V0R3JhcGhpY3NFZmZlY3QocmVwbGljYUltcGwtPm1fcmVwbGljYUVmZmVjdC5k
YXRhKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHVwZGF0ZSgpOwogICAg
IH0KIAogICAgIGlmIChtX2NoYW5nZU1hc2sgJiBTaXplQ2hhbmdlKSB7CiAgICAgICAgIGlmICht
X2xheWVyLT5zaXplKCkgIT0gbV9zdGF0ZS5zaXplKSB7CiAgICAgICAgICAgICBwcmVwYXJlR2Vv
bWV0cnlDaGFuZ2UoKTsKICAgICAgICAgICAgIG1fc2l6ZSA9IFFTaXplRihtX2xheWVyLT5zaXpl
KCkud2lkdGgoKSwgbV9sYXllci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmICht
X2xheWVyLT5yZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXll
clF0SW1wbCogcmVwbGljYSA9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJbXBsKj4obV9s
YXllci0+cmVwbGljYUxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKS0+dG9HcmFwaGljc09iamVjdCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgcmVwbGljYS0+bV9yZXBsaWNhRWZmZWN0LmRhdGEoKS0+
dXBkYXRlR2VvbWV0cnkoKTsKICAgICAgICAgfQogICAgIH0KKwogICAgIC8vIEZJWE1FOiB0aGlz
IGlzIGEgaGFjaywgZHVlIHRvIGEgcHJvYmFibGUgUUdyYXBoaWNzU2NlbmUgYnVnIHdoZW4gcmFw
aWRseSBtb2RpZnlpbmcgdGhlIHBlcnNwZWN0aXZlCiAgICAgLy8gYnV0IHdpdGhvdXQgdGhpcyBs
aW5lIHdlIGdldCBncmFwaGljIGFydGlmYWN0cwogICAgIGlmICgobV9jaGFuZ2VNYXNrICYgQ2hp
bGRyZW5UcmFuc2Zvcm1DaGFuZ2UpICYmIG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0gIT0gbV9s
YXllci0+Y2hpbGRyZW5UcmFuc2Zvcm0oKSkKQEAgLTU4Myw4ICs1ODYsMTMgQEAgdm9pZCBHcmFw
aGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUsIGJvb2wgZm9yY2VV
cGRhdGVUcmFuc2Zvcm0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgobV9jaGFuZ2VNYXNr
ICYgT3BhY2l0eUNoYW5nZSkgJiYgbV9zdGF0ZS5vcGFjaXR5ICE9IG1fbGF5ZXItPm9wYWNpdHko
KSAmJiAhbV9vcGFjaXR5QW5pbWF0aW9uUnVubmluZykKLSAgICAgICAgc2V0T3BhY2l0eShtX2xh
eWVyLT5vcGFjaXR5KCkpOworICAgIGlmICgobV9jaGFuZ2VNYXNrICYgKE9wYWNpdHlDaGFuZ2Ug
fCBSZXBsaWNhQ2hhbmdlKSAmJiBtX3N0YXRlLm9wYWNpdHkgIT0gbV9sYXllci0+b3BhY2l0eSgp
ICYmICFtX29wYWNpdHlBbmltYXRpb25SdW5uaW5nKSkgeworICAgICAgICBpZiAoR3JhcGhpY3NM
YXllclF0SW1wbCogcmVwbGljYSA9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJbXBsKj4o
bV9sYXllci0+cmVwbGljYUxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKS0+dG9HcmFwaGljc09iamVj
dCgpKSkgeworICAgICAgICAgICAgcmVwbGljYS0+bV9yZXBsaWNhRWZmZWN0LmRhdGEoKS0+c2V0
T3BhY2l0eShtX2xheWVyLT5vcGFjaXR5KCkpOworICAgICAgICAgICAgc2V0T3BhY2l0eSgxKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzZXRPcGFjaXR5KG1fbGF5ZXItPm9wYWNpdHko
KSk7CisgICAgfQogCiAgICAgaWYgKG1fY2hhbmdlTWFzayAmIENvbnRlbnRzUmVjdENoYW5nZSkg
ewogICAgICAgICBjb25zdCBRUmVjdCByZWN0KG1fbGF5ZXItPmNvbnRlbnRzUmVjdCgpKTsKQEAg
LTYxNiw3ICs2MjQsNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6OmZsdXNoQ2hhbmdlcyhi
b29sIHJlY3Vyc2l2ZSwgYm9vbCBmb3JjZVVwZGF0ZVRyYW5zZm9ybQogICAgIGlmICgobV9jaGFu
Z2VNYXNrICYgQmFja2dyb3VuZENvbG9yQ2hhbmdlKSAmJiAobV9wZW5kaW5nQ29udGVudC5iYWNr
Z3JvdW5kQ29sb3IgIT0gbV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IpKQogICAgICAg
ICB1cGRhdGUoKTsKIAotICAgIG1fc3RhdGUubWFza0xheWVyID0gbV9sYXllci0+bWFza0xheWVy
KCk7CiAgICAgbV9zdGF0ZS5wb3MgPSBtX2xheWVyLT5wb3NpdGlvbigpOwogICAgIG1fc3RhdGUu
YW5jaG9yUG9pbnQgPSBtX2xheWVyLT5hbmNob3JQb2ludCgpOwogICAgIG1fc3RhdGUuc2l6ZSA9
IG1fbGF5ZXItPnNpemUoKTsKQEAgLTY0OCw4ICs2NTUsMTEgQEAgYWZ0ZXJMYXllckNoYW5nZXM6
CiAgICAgICAgIHJldHVybjsgICAgCiAKICAgICBRTGlzdDxRR3JhcGhpY3NJdGVtKj4gY2hpbGRy
ZW4gPSBjaGlsZEl0ZW1zKCk7Ci0gICAgaWYgKG1fc3RhdGUubWFza0xheWVyKQotICAgICAgICBj
aGlsZHJlbi5hcHBlbmQobV9zdGF0ZS5tYXNrTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAg
aWYgKG1fbGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICBjaGlsZHJlbi5hcHBlbmQobV9sYXll
ci0+bWFza0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CisKKyAgICBpZiAobV9sYXllci0+cmVw
bGljYUxheWVyKCkpCisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX2xheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKIAogICAgIGZvciAoUUxpc3Q8UUdyYXBoaWNzSXRlbSo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmVu
ZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChRR3JhcGhpY3NJdGVtKiBpdGVtID0gKml0KQpAQCAt
OTc0LDYgKzk4NCwxMyBAQCBmbG9hdCBHcmFwaGljc0xheWVyUXQ6OmFjY3VtdWxhdGVkT3BhY2l0
eSgpIGNvbnN0CiB9CiAKIC8vIHJlaW1wIGZyb20gR3JhcGhpY3NMYXllci5oCit2b2lkIEdyYXBo
aWNzTGF5ZXJRdDo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7
CisgICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2UoR3JhcGhpY3NMYXllclF0SW1wbDo6UmVwbGljYUNo
YW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOwor
fQorCisvLyByZWltcCBmcm9tIEdyYXBoaWNzTGF5ZXIuaAogdm9pZCBHcmFwaGljc0xheWVyUXQ6
OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkKIHsKICAgICBtX2ltcGwtPmZsdXNoQ2hhbmdlcygpOwpA
QCAtMTM5NSw2ICsxNDEyLDE0NiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cmVzdW1lQW5pbWF0
aW9ucygpCiAgICAgfQogfQogCitNYXNrRWZmZWN0UXQ6Ok1hc2tFZmZlY3RRdChRT2JqZWN0KiBw
YXJlbnQsIFFHcmFwaGljc0l0ZW0qIG1hc2tMYXllcikKKyAgICAgICAgOiBRR3JhcGhpY3NFZmZl
Y3QocGFyZW50KQorICAgICAgICAsIG1fbWFza0xheWVyKG1hc2tMYXllcikKK3sKK30KKwordm9p
ZCBNYXNrRWZmZWN0UXQ6OmRyYXcoUVBhaW50ZXIqIHBhaW50ZXIpCit7CisgICAgLy8gdGhpcyBp
cyBhIG1vZGlmaWVkIGNsb25lIG9mIFFHcmFwaGljc09wYWNpdHlFZmZlY3QuCisgICAgLy8gSXQn
cyBtb3JlIGVmZmljaWVudCB0byBkbyBpdCB0aGlzIHdheSBiZWNhdXNlCisgICAgLy8gKGEpIHdl
IGRvbid0IG5lZWQgdGhlIFFCcnVzaCBhYnN0cmFjdGlvbiAtIHdlIGFsd2F5cyBlbmQgdXAgdXNp
bmcgUUdyYXBoaWNzSXRlbTo6cGFpbnQgZnJvbSB0aGUgbWFzayBsYXllcgorICAgIC8vIChiKSBR
R3JhcGhpY3NPcGFjaXR5RWZmZWN0IGRldGFjaGVzIHRoZSBwaXhtYXAsIHdoaWNoIGlzIGluZWZm
aWNpZW50IG9uIE9wZW5HTC4KKyAgICBRUGl4bWFwIG1hc2tQaXhtYXAoc291cmNlQm91bmRpbmdS
ZWN0KCkudG9BbGlnbmVkUmVjdCgpLnNpemUoKSk7CisKKyAgICBpZiAobWFza1BpeG1hcC5pc051
bGwoKSkgeworICAgICAgICBkcmF3U291cmNlKHBhaW50ZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIHNvIHRoZSBwaXhtYXAgd291bGQgaGF2
ZSBoYXNBbHBoYSgpCisgICAgbWFza1BpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAg
UVBhaW50ZXIgbWFza1BhaW50ZXIoJm1hc2tQaXhtYXApOworICAgIFFTdHlsZU9wdGlvbkdyYXBo
aWNzSXRlbSBvcHRpb247CisgICAgb3B0aW9uLmV4cG9zZWRSZWN0ID0gb3B0aW9uLnJlY3QgPSBt
YXNrUGl4bWFwLnJlY3QoKTsKKyAgICBtYXNrUGFpbnRlci5zZXRSZW5kZXJIaW50cyhwYWludGVy
LT5yZW5kZXJIaW50cygpLCB0cnVlKTsKKyAgICBtX21hc2tMYXllci0+cGFpbnQoJm1hc2tQYWlu
dGVyLCAmb3B0aW9uLCAwKTsKKyAgICBtYXNrUGFpbnRlci5lbmQoKTsKKyAgICBRUG9pbnQgb2Zm
c2V0OworICAgIFFQaXhtYXAgc3JjUGl4bWFwID0gc291cmNlUGl4bWFwKFF0OjpMb2dpY2FsQ29v
cmRpbmF0ZXMsICZvZmZzZXQsIFFHcmFwaGljc0VmZmVjdDo6Tm9QYWQpOworCisgICAgLy8gd2Ug
aGF2ZSB0byB1c2UgYW5vdGhlciBpbnRlcm1lZGlhdGUgcGl4bWFwLCB0byBtYWtlIHN1cmUgdGhl
IG1hc2sgYXBwbGllcyBvbmx5IHRvIHRoaXMgaXRlbQorICAgIC8vIGFuZCBkb2Vzbid0IG1vZGlm
eSBwaXhlbHMgYWxyZWFkeSBwYWludGVkIGludG8gdGhpcyBwYWludC1kZXZpY2UKKyAgICBRUGl4
bWFwIHBpeG1hcChzcmNQaXhtYXAuc2l6ZSgpKTsKKyAgICBwaXhtYXAuZmlsbChRdDo6dHJhbnNw
YXJlbnQpOworCisgICAgaWYgKHBpeG1hcC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUVBhaW50ZXIgcGl4bWFwUGFpbnRlcigmcGl4bWFwKTsKKyAgICBwaXhtYXBQYWludGVyLnNl
dFJlbmRlckhpbnRzKHBhaW50ZXItPnJlbmRlckhpbnRzKCkpOworICAgIHBpeG1hcFBhaW50ZXIu
c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAg
ICAvLyBXZSB1c2UgZHJhd1BpeG1hcCByYXRoZXIgdGhhbiBkZXRhY2hpbmcsIGJlY2F1c2UgaXQn
cyBtb3JlIGVmZmljaWVudCBvbiBPcGVuR0wKKyAgICBwaXhtYXBQYWludGVyLmRyYXdQaXhtYXAo
MCwgMCwgc3JjUGl4bWFwKTsKKyAgICBwaXhtYXBQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShR
UGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOworICAgIHBpeG1hcFBhaW50
ZXIuZHJhd1BpeG1hcCgwLCAwLCBtYXNrUGl4bWFwKTsKKyAgICBwaXhtYXBQYWludGVyLmVuZCgp
OworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAob2Zmc2V0LCBwaXhtYXApOworfQorCitSZXBsaWNh
RWZmZWN0UXQ6OlJlcGxpY2FFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIEdyYXBoaWNzTGF5ZXIq
IHJlcGxpY2FMYXllciwgR3JhcGhpY3NMYXllciogcmVwbGljYXRlZExheWVyKQorICAgICAgICA6
IFFHcmFwaGljc0VmZmVjdChwYXJlbnQpCisgICAgICAgICwgbV9yZXBsaWNhTGF5ZXIocmVwbGlj
YUxheWVyKQorICAgICAgICAsIG1fcmVwbGljYXRlZExheWVyKHJlcGxpY2F0ZWRMYXllcikKKyAg
ICAgICAgLCBtX29wYWNpdHkoMSkKK3sKK30KKwordm9pZCBSZXBsaWNhRWZmZWN0UXQ6OnJlbmRl
ck1hc2soR3JhcGhpY3NMYXllciogbGF5ZXIsIFFQaXhtYXAmIHBpeG1hcCwgY29uc3QgUVJlY3RG
JiBib3VuZGluZ1JlY3QpCit7CisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIG1hc2tMYXllciA9IGxh
eWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgaWYgKFFHcmFwaGljc0l0ZW0qIG1hc2tMYXllcklt
cGwgPSBtYXNrTGF5ZXItPm5hdGl2ZUxheWVyKCkpIHsKKyAgICAgICAgICAgIFFQYWludGVyIG1h
c2tQYWludGVyKCZwaXhtYXApOworICAgICAgICAgICAgbWFza1BhaW50ZXIuc2V0Q29tcG9zaXRp
b25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25Jbik7CisgICAgICAg
ICAgICBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0gb3B0aW9uOworICAgICAgICAgICAgb3B0aW9u
LmV4cG9zZWRSZWN0ID0gb3B0aW9uLnJlY3QgPSBRUmVjdCgwLCAwLCBib3VuZGluZ1JlY3Qud2lk
dGgoKSwgYm91bmRpbmdSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIG1hc2tMYXllckltcGwt
PnBhaW50KCZtYXNrUGFpbnRlciwgJm9wdGlvbik7CisgICAgICAgIH0KK30KKwordm9pZCBSZXBs
aWNhRWZmZWN0UXQ6OmRyYXcoUVBhaW50ZXIqIHBhaW50ZXIpCit7CisgICAgLy8gSW4gUXQgNC42
LngsIG5lc3RlZCByZWZsZWN0aW9uIGRvbid0IGFsd2F5cyB3b3JrIGFzIGV4cGVjdGVkLCBwb3Nz
aWJsZSBkdWUgdG8gaXNzdWVzIHdpdGggUUdyYXBoaWNzRWZmZWN0IHRoYXQgd2VyZSBmaXhlZCBp
biA0LjcuCisgICAgaWYgKCFtX3JlcGxpY2FMYXllcikgeworICAgICAgICBkcmF3U291cmNlKHBh
aW50ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IFFSZWN0RiBib3VuZGlu
Z1JlY3QgPSBzb3VyY2VCb3VuZGluZ1JlY3QoKTsKKyAgICBRUG9pbnQgb2Zmc2V0OworICAgIFFQ
aXhtYXAgb3JpZ2luYWwgPSBzb3VyY2VQaXhtYXAoUXQ6OkxvZ2ljYWxDb29yZGluYXRlcywgJm9m
ZnNldCwgUUdyYXBoaWNzRWZmZWN0OjpOb1BhZCk7CisKKyAgICAvLyBXZSBoYXZlIHRvIHJlbmRl
ciB0aGUgbWFzayBvbiB0aGUgc291cmNlIHBpeG1hcCwgYmVjYXVzZSBpdCBoYXMgdG8gYmUgcmVm
bGVjdGVkLgorICAgIHJlbmRlck1hc2sobV9yZXBsaWNhdGVkTGF5ZXIsIG9yaWdpbmFsLCBib3Vu
ZGluZ1JlY3QpOworICAgIFFQaXhtYXAgcmVwbGljYSA9IG9yaWdpbmFsOworCisgICAgLy8gTm93
IHdlIHJlbmRlciB0aGUgbWFzayBvbiB0aGUgYWN0dWFsIHJlZmxlY3Rpb24uCisgICAgcmVuZGVy
TWFzayhtX3JlcGxpY2FMYXllciwgcmVwbGljYSwgYm91bmRpbmdSZWN0KTsKKworICAgIC8vIFdl
IG5lZWQgYW4gaW50ZXJtZWRpYXRlIHBpeG1hcCB0byBoYW5kbGUgb3BhY2l0eSBjb3JyZWN0bHkg
LSB0aGUgb3JpZ2luYWwKKyAgICAvLyBhbmQgdGhlIHJlZmxlY3Rpb24gaGF2ZSB0byBiZSBibGVu
ZGVkIGJlZm9yZSB0aGUgb3BhY2l0eSBjb21lcyBpbnRvIHBsYXkuCisKKyAgICAvLyBGSVhNRTog
dXNlIGEgc21hbGxlciBwaXhtYXAuCisgICAgUVBpeG1hcCBpbnRlcm1lZGlhdGVQaXhtYXAocGFp
bnRlci0+ZGV2aWNlKCktPndpZHRoKCksIHBhaW50ZXItPmRldmljZSgpLT5oZWlnaHQoKSk7Cisg
ICAgaW50ZXJtZWRpYXRlUGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICBRUGFpbnRl
ciBpbnRlcm1lZGlhdGVQYWludGVyKCZpbnRlcm1lZGlhdGVQaXhtYXApOworICAgIGludGVybWVk
aWF0ZVBhaW50ZXIuc2V0UmVuZGVySGludHMocGFpbnRlci0+cmVuZGVySGludHMoKSk7CisgICAg
aW50ZXJtZWRpYXRlUGFpbnRlci5zZXRUcmFuc2Zvcm0ocGFpbnRlci0+dHJhbnNmb3JtKCkpOwor
ICAgIGludGVybWVkaWF0ZVBhaW50ZXIuZHJhd1BpeG1hcChvZmZzZXQsIG9yaWdpbmFsKTsKKyAg
ICBpbnRlcm1lZGlhdGVQYWludGVyLnNldFRyYW5zZm9ybShtX2NvbXB1dGVkVHJhbnNmb3JtLCB0
cnVlKTsKKworICAgIC8vIFdlIHBhaW50IHRoZSByZWZsZWN0aW9uIGJlaGluZCB0aGUgb3JpZ2lu
LgorICAgIGludGVybWVkaWF0ZVBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpD
b21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25PdmVyKTsKKyAgICBpbnRlcm1lZGlhdGVQYWludGVy
LmRyYXdQaXhtYXAob2Zmc2V0LCByZXBsaWNhKTsKKyAgICBpbnRlcm1lZGlhdGVQYWludGVyLmVu
ZCgpOworICAgIHBhaW50ZXItPnNhdmUoKTsKKworICAgIC8vIFRoZSBlZmZlY3Qgd2FzIGFscmVh
ZHkgZHJhd24gdXNpbmcgdGhlIHBhaW50ZXIncyB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguCisgICAg
cGFpbnRlci0+cmVzZXRUcmFuc2Zvcm0oKTsKKyAgICBwYWludGVyLT5zZXRPcGFjaXR5KG1fb3Bh
Y2l0eSk7CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcCgwLCAwLCBpbnRlcm1lZGlhdGVQaXhtYXAp
OworICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKK30KKwordm9pZCBSZXBsaWNhRWZmZWN0UXQ6OnVw
ZGF0ZUdlb21ldHJ5KCkKK3sKKyAgICAvLyBXZSBiYWtlIHRoZSBhbmNob3IsIHRyYW5zZm9ybWF0
aW9uIGFuZCByZXBsaWNhdGVkIGxheWVyIHBvc2l0aW9uIGludG8gbV9jb21wdXRlZFRyYW5zZm9y
bS4KKyAgICBjb25zdCBxcmVhbCBhbmNob3JYID0gbV9yZXBsaWNhTGF5ZXItPmFuY2hvclBvaW50
KCkueCgpICogbV9yZXBsaWNhTGF5ZXItPnNpemUoKS53aWR0aCgpOworICAgIGNvbnN0IHFyZWFs
IGFuY2hvclkgPSBtX3JlcGxpY2FMYXllci0+YW5jaG9yUG9pbnQoKS55KCkgKiBtX3JlcGxpY2FM
YXllci0+c2l6ZSgpLmhlaWdodCgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9y
bTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGFuY2hvclgsIGFuY2hvclkpCisgICAgICAgIC5t
dWx0TGVmdChtX3JlcGxpY2FMYXllci0+dHJhbnNmb3JtKCkpCisgICAgICAgIC50cmFuc2xhdGUo
LWFuY2hvclgsIC1hbmNob3JZKQorICAgICAgICAudHJhbnNsYXRlKG1fcmVwbGljYUxheWVyLT5y
ZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpLngoKSwgbV9yZXBsaWNhTGF5ZXItPnJlcGxpY2F0ZWRM
YXllclBvc2l0aW9uKCkueSgpKTsKKyAgICBtX2NvbXB1dGVkVHJhbnNmb3JtID0gdHJhbnNmb3Jt
OworICAgIHVwZGF0ZUJvdW5kaW5nUmVjdCgpOworfQorCit2b2lkIFJlcGxpY2FFZmZlY3RRdDo6
c2V0T3BhY2l0eShxcmVhbCBvcGFjaXR5KQoreworICAgIC8vIFdlIGhhdmUgdG8gbWFuYWdlIG9w
YWNpdHkgc2VwYXJhdGVseSBmcm9tIFFHcmFwaGljc1ZpZXcsIGJlY2F1c2UgaW4gdGhpcyBjYXNl
CisgICAgLy8gdGhlIG9wYWNpdHkgaGFzIHRvIGJlIGFwcGxpZWQgYWZ0ZXIgdGhlIGVmZmVjdC4K
KyAgICBtX29wYWNpdHkgPSBvcGFjaXR5OworICAgIHVwZGF0ZSgpOworfQorCit2b2lkIFJlcGxp
Y2FFZmZlY3RRdDo6c291cmNlQ2hhbmdlZChDaGFuZ2VGbGFncykKK3sKKyAgICB1cGRhdGVHZW9t
ZXRyeSgpOworfQorCisKICNlbmRpZiAvLyBRVF9OT19BTklNQVRJT04KIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmgKaW5kZXggOWU1ODMyZi4u
ZGJlM2IyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0xheWVyUXQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5
ZXJRdC5oCkBAIC03OSw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzdHJp
YnV0ZU9wYWNpdHkoZmxvYXQpOwogICAgIHZpcnR1YWwgZmxvYXQgYWNjdW11bGF0ZWRPcGFjaXR5
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKCk7CisgICAg
dm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7CiAKIHByaXZhdGU6CiAg
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJRdEltcGw+IG1faW1wbDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54868</attachid>
            <date>2010-05-02 04:08:23 -0700</date>
            <delta_ts>2010-05-02 04:31:00 -0700</delta_ts>
            <desc>Make sure the scene updates</desc>
            <filename>patch-35389-2.diff</filename>
            <type>text/plain</type>
            <size>19621</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjY1NmRjZC4uOWMzN2U2ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wNS0wMiAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gR3JhcGhpY3NMYXllcjogc3VwcG9ydCByZWZs
ZWN0aW9ucworCisgICAgICAgIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIHJlZmxlY3Rpb25zIGlu
IEdyYXBoaWNzTGF5ZXJRdC4KKyAgICAgICAgVGhpcyBpcyBkb25lIHdpdGggUUdyYXBoaWNzRWZm
ZWN0LCBhbmQgaW1wbGVtZW50cyB0aGUgR3JhcGhpY3NMYXllciBBUEkgdG8gZG8gc28uCisKKyAg
ICAgICAgU29tZSBvZiB0aGUgZWRnZSBjYXNlcywgbmFtZWx5IG5lc3RlZCByZWZsZWN0aW9ucyB3
aXRoIHRyYW5zZm9ybWF0aW9ucyBpbnNpZGUgdGhlbSwKKyAgICAgICAgYXJlIGRlZmVycmVkIHRv
IGEgbGF0ZXIgZml4LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNTM4OQorCisgICAgICAgIEFsbCBMYXlvdXQgdGVzdHMgdW5kZXIgY29tcG9zaXRp
bmcvcmVmbGVjdGlvbnMgd29yayB3aXRoIFF0IDQuNy4gV2l0aCBRdCA0LjYueCwKKyAgICAgICAg
bmVzdGVkLXJlZmxlY3Rpb24tYW5jaG9yLXBvaW50Lmh0bWwgZG9lc24ndCB3b3JrLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1hc2tFZmZlY3RRdDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsaWNh
RWZmZWN0UXQ6OlJlcGxpY2FFZmZlY3RRdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsaWNhRWZm
ZWN0UXQ6OnNvdXJjZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGljYUVmZmVjdFF0
OjpyZW5kZXJNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxpY2FFZmZlY3RRdDo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpSZXBsaWNhRWZmZWN0UXQ6OnVwZGF0ZUdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlcGxpY2FFZmZlY3RRdDo6c2V0T3BhY2l0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyUXRJbXBsOjopOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclF0SW1wbDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJRdEltcGw6Om9wYXF1ZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
clF0SW1wbDo6Zmx1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJR
dDo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzTGF5ZXJRdC5oOgorCiAyMDEwLTA1LTAyICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNo
YWVsbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERtaXRyeSBUaXRvdi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAppbmRl
eCBkZTc1ODFhLi45ODY5MzA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0xheWVyUXQuY3BwCkBAIC00Myw1NSArNDMsMzQgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisvLyBNYXNrIGVmZmVjdCBpcyB0aGUgUUdyYXBoaWNzRWZmZWN0IGltcGxlbWVu
dGF0aW9uIG9mIENTUyAtd2Via2l0LW1hc2suCiBjbGFzcyBNYXNrRWZmZWN0UXQgOiBwdWJsaWMg
UUdyYXBoaWNzRWZmZWN0IHsKKyAgICBRX09CSkVDVAogcHVibGljOgotICAgIE1hc2tFZmZlY3RR
dChRT2JqZWN0KiBwYXJlbnQsIFFHcmFwaGljc0l0ZW0qIG1hc2tMYXllcikKLSAgICAgICAgICAg
IDogUUdyYXBoaWNzRWZmZWN0KHBhcmVudCkKLSAgICAgICAgICAgICwgbV9tYXNrTGF5ZXIobWFz
a0xheWVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGRyYXcoUVBhaW50ZXIqIHBhaW50ZXIp
Ci0gICAgewotICAgICAgICAvLyB0aGlzIGlzIGEgbW9kaWZpZWQgY2xvbmUgb2YgUUdyYXBoaWNz
T3BhY2l0eUVmZmVjdC4KLSAgICAgICAgLy8gSXQncyBtb3JlIGVmZmljaWVudCB0byBkbyBpdCB0
aGlzIHdheSBiZWNhdXNlCi0gICAgICAgIC8vIChhKSB3ZSBkb24ndCBuZWVkIHRoZSBRQnJ1c2gg
YWJzdHJhY3Rpb24gLSB3ZSBhbHdheXMgZW5kIHVwIHVzaW5nIFFHcmFwaGljc0l0ZW06OnBhaW50
IGZyb20gdGhlIG1hc2sgbGF5ZXIKLSAgICAgICAgLy8gKGIpIFFHcmFwaGljc09wYWNpdHlFZmZl
Y3QgZGV0YWNoZXMgdGhlIHBpeG1hcCwgd2hpY2ggaXMgaW5lZmZpY2llbnQgb24gT3BlbkdMLgot
ICAgICAgICBRUGl4bWFwIG1hc2tQaXhtYXAoc291cmNlQm91bmRpbmdSZWN0KCkudG9BbGlnbmVk
UmVjdCgpLnNpemUoKSk7Ci0KLSAgICAgICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIHNvIHRoZSBw
aXhtYXAgd291bGQgaGF2ZSBoYXNBbHBoYSgpCi0gICAgICAgIG1hc2tQaXhtYXAuZmlsbChRdDo6
dHJhbnNwYXJlbnQpOwotICAgICAgICBRUGFpbnRlciBtYXNrUGFpbnRlcigmbWFza1BpeG1hcCk7
Ci0gICAgICAgIFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSBvcHRpb247Ci0gICAgICAgIG9wdGlv
bi5leHBvc2VkUmVjdCA9IG9wdGlvbi5yZWN0ID0gbWFza1BpeG1hcC5yZWN0KCk7Ci0gICAgICAg
IG1hc2tQYWludGVyLnNldFJlbmRlckhpbnRzKHBhaW50ZXItPnJlbmRlckhpbnRzKCksIHRydWUp
OwotICAgICAgICBtX21hc2tMYXllci0+cGFpbnQoJm1hc2tQYWludGVyLCAmb3B0aW9uLCAwKTsK
LSAgICAgICAgbWFza1BhaW50ZXIuZW5kKCk7Ci0gICAgICAgIFFQb2ludCBvZmZzZXQ7Ci0gICAg
ICAgIFFQaXhtYXAgc3JjUGl4bWFwID0gc291cmNlUGl4bWFwKFF0OjpMb2dpY2FsQ29vcmRpbmF0
ZXMsICZvZmZzZXQsIFFHcmFwaGljc0VmZmVjdDo6Tm9QYWQpOwotCi0gICAgICAgIC8vIHdlIGhh
dmUgdG8gdXNlIGFub3RoZXIgaW50ZXJtZWRpYXRlIHBpeG1hcCwgdG8gbWFrZSBzdXJlIHRoZSBt
YXNrIGFwcGxpZXMgb25seSB0byB0aGlzIGl0ZW0KLSAgICAgICAgLy8gYW5kIGRvZXNuJ3QgbW9k
aWZ5IHBpeGVscyBhbHJlYWR5IHBhaW50ZWQgaW50byB0aGlzIHBhaW50LWRldmljZQotICAgICAg
ICBRUGl4bWFwIHBpeG1hcChzcmNQaXhtYXAuc2l6ZSgpKTsKLSAgICAgICAgcGl4bWFwLmZpbGwo
UXQ6OnRyYW5zcGFyZW50KTsKLQotICAgICAgICBpZiAocGl4bWFwLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIFFQYWludGVyIHBpeG1hcFBhaW50ZXIoJnBpeG1hcCk7
Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuc2V0UmVuZGVySGludHMocGFpbnRlci0+cmVuZGVySGlu
dHMoKSk7Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICAgICAgLy8gV2UgdXNlIGRyYXdQaXhtYXAg
cmF0aGVyIHRoYW4gZGV0YWNoaW5nLCBiZWNhdXNlIGl0J3MgbW9yZSBlZmZpY2llbnQgb24gT3Bl
bkdMCi0gICAgICAgIHBpeG1hcFBhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBzcmNQaXhtYXApOwot
ICAgICAgICBwaXhtYXBQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9z
aXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOwotICAgICAgICBwaXhtYXBQYWludGVyLmRyYXdQaXht
YXAoMCwgMCwgbWFza1BpeG1hcCk7Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuZW5kKCk7Ci0gICAg
ICAgIHBhaW50ZXItPmRyYXdQaXhtYXAob2Zmc2V0LCBwaXhtYXApOwotICAgIH0KLQorICAgIE1h
c2tFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIFFHcmFwaGljc0l0ZW0qIG1hc2tMYXllcik7Cisg
ICAgdm9pZCBkcmF3KFFQYWludGVyKiBwYWludGVyKTsKICAgICBRR3JhcGhpY3NJdGVtKiBtX21h
c2tMYXllcjsKIH07CiAKKy8vIFJlcGxpY2FFZmZlY3RRdCBpcyB0aGUgUUdyYXBoaWNzRWZmZWN0
IGltcGxlbWVudGF0aW9uIG9mIENTUyAtd2Via2l0LXJlZmxlY3Rpb24uCitjbGFzcyBSZXBsaWNh
RWZmZWN0UXQgOiBwdWJsaWMgUUdyYXBoaWNzRWZmZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGlj
OgorICAgIFJlcGxpY2FFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIEdyYXBoaWNzTGF5ZXIqIHJl
cGxpY2FMYXllciwgR3JhcGhpY3NMYXllciogcmVwbGljYXRlZExheWVyKTsKKworICAgIHZvaWQg
cmVuZGVyTWFzayhHcmFwaGljc0xheWVyKiBsYXllciwgUVBpeG1hcCYgcGl4bWFwLCBjb25zdCBR
UmVjdEYmIGJvdW5kaW5nUmVjdCk7CisgICAgdm9pZCBkcmF3KFFQYWludGVyKiBwYWludGVyKTsK
KyAgICB2b2lkIHNldE9wYWNpdHkocXJlYWwgb3BhY2l0eSk7CisgICAgdm9pZCBzb3VyY2VDaGFu
Z2VkKENoYW5nZUZsYWdzKTsKKyAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KCk7CisgICAgUVJlY3RG
IGJvdW5kaW5nUmVjdEZvcihjb25zdCBRUmVjdEYmIHNvdXJjZVJlY3QpIGNvbnN0OworCisgICAg
R3JhcGhpY3NMYXllciogbV9yZXBsaWNhTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllciogbV9yZXBs
aWNhdGVkTGF5ZXI7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jb21wdXRlZFRyYW5zZm9y
bTsKKyAgICBxcmVhbCBtX29wYWNpdHk7Cit9OworCiBjbGFzcyBHcmFwaGljc0xheWVyUXRJbXBs
IDogcHVibGljIFFHcmFwaGljc09iamVjdCB7CiAgICAgUV9PQkpFQ1QKIApAQCAtMTI1LDE0ICsx
MDQsMTYgQEAgcHVibGljOgogICAgICAgICBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSA9ICAgKDFM
IDw8IDE3KSwKICAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAxOCks
CiAgICAgICAgIEJhY2tncm91bmRDb2xvckNoYW5nZSA9ICAgICAoMUwgPDwgMTkpLAorICAgICAg
ICBSZXBsaWNhQ2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDIwKSwKIAotICAgICAgICBEaXN0
cmlidXRlc09wYWNpdHlDaGFuZ2UgPSAgKDFMIDw8IDIwKQorICAgICAgICBEaXN0cmlidXRlc09w
YWNpdHlDaGFuZ2UgPSAgKDFMIDw8IDIxKQogICAgIH07CiAKICAgICAvLyB0aGUgY29tcG9zaXRv
ciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2UgdHJ5IHRvIGRv
IHNvCiAgICAgZW51bSBTdGF0aWNDb250ZW50VHlwZSB7IEhUTUxDb250ZW50VHlwZSwgUGl4bWFw
Q29udGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5cGV9OwogCiAgICAg
Y29uc3QgR3JhcGhpY3NMYXllclF0SW1wbCogcm9vdExheWVyKCkgY29uc3Q7CisgICAgYm9vbCBp
c0FuY2VzdG9yUmVwbGljYXRlZCgpIGNvbnN0OwogCiAgICAgR3JhcGhpY3NMYXllclF0SW1wbChH
cmFwaGljc0xheWVyUXQqIG5ld0xheWVyKTsKICAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyUXRJ
bXBsKCk7CkBAIC0xODAsNiArMTYxLDcgQEAgcHVibGljOgogICAgIGJvb2wgbV90cmFuc2Zvcm1B
bmltYXRpb25SdW5uaW5nOwogICAgIGJvb2wgbV9vcGFjaXR5QW5pbWF0aW9uUnVubmluZzsKICAg
ICBRV2Vha1BvaW50ZXI8TWFza0VmZmVjdFF0PiBtX21hc2tFZmZlY3Q7CisgICAgUVdlYWtQb2lu
dGVyPFJlcGxpY2FFZmZlY3RRdD4gbV9yZXBsaWNhRWZmZWN0OwogCiAgICAgc3RydWN0IENvbnRl
bnREYXRhIHsKICAgICAgICAgUVBpeG1hcCBwaXhtYXA7CkBAIC0yMTIsNyArMTk0LDYgQEAgcHVi
bGljOgogICAgIFFUaW1lciBtX3N1c3BlbmRUaW1lcjsKIAogICAgIHN0cnVjdCBTdGF0ZSB7Ci0g
ICAgICAgIEdyYXBoaWNzTGF5ZXIqIG1hc2tMYXllcjsKICAgICAgICAgRmxvYXRQb2ludCBwb3M7
CiAgICAgICAgIEZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKICAgICAgICAgRmxvYXRTaXplIHNp
emU7CkBAIC0yMzIsOSArMjEzLDkgQEAgcHVibGljOgogICAgICAgICBib29sIGJhY2tmYWNlVmlz
aWJpbGl0eTogMTsKICAgICAgICAgYm9vbCBkaXN0cmlidXRlT3BhY2l0eTogMTsKICAgICAgICAg
Ym9vbCBhbGlnbjogMjsKLSAgICAgICAgU3RhdGUoKTogbWFza0xheWVyKDApLCBvcGFjaXR5KDEu
ZiksIHByZXNlcnZlczNEKGZhbHNlKSwgbWFza3NUb0JvdW5kcyhmYWxzZSksCi0gICAgICAgICAg
ICAgICAgICBkcmF3c0NvbnRlbnQoZmFsc2UpLCBjb250ZW50c09wYXF1ZShmYWxzZSksIGJhY2tm
YWNlVmlzaWJpbGl0eShmYWxzZSksCi0gICAgICAgICAgICAgICAgICBkaXN0cmlidXRlT3BhY2l0
eShmYWxzZSkKKyAgICAgICAgU3RhdGUoKTogb3BhY2l0eSgxLmYpLCBwcmVzZXJ2ZXMzRChmYWxz
ZSksIG1hc2tzVG9Cb3VuZHMoZmFsc2UpLAorICAgICAgICAgICAgICAgICBkcmF3c0NvbnRlbnQo
ZmFsc2UpLCBjb250ZW50c09wYXF1ZShmYWxzZSksIGJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSks
CisgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVPcGFjaXR5KGZhbHNlKQogICAgICAgICB7CiAg
ICAgICAgIH0KICAgICB9IG1fc3RhdGU7CkBAIC0yOTEsNyArMjcyLDYgQEAgY29uc3QgR3JhcGhp
Y3NMYXllclF0SW1wbCogR3JhcGhpY3NMYXllclF0SW1wbDo6cm9vdExheWVyKCkgY29uc3QKIH0K
IAogCi0KIFFQaXhtYXAgR3JhcGhpY3NMYXllclF0SW1wbDo6cmVjYWNoZShjb25zdCBRUmVnaW9u
JiByZWdpb25Ub1VwZGF0ZSkKIHsKICAgICBpZiAoIW1fbGF5ZXItPmRyYXdzQ29udGVudCgpKQpA
QCAtMzk5LDYgKzM3OSwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6OnVwZGF0ZVRyYW5z
Zm9ybSgpCiAKICAgICBzZXRUcmFuc2Zvcm0odHJhbnNmb3JtMkQpOwogCisgICAgLy8gRklYTUU6
IGZpbmQgdGhlIGNvcnJlY3QgYm91bmRpbmcgcmVjdCBmb3IgdGhlIGVmZmVjdCBpbnN0ZWFkIG9m
IGZvcmNpbmcgYSBzY2VuZSB1cGRhdGUuIFRoYXQncyBpcyBwcmV0dHkgdHJpY2t5IHNvIGZvciBu
b3cgd2Ugc3RheSB3aXRoIHRoZSBoYWNrLgorICAgIGlmIChpc0FuY2VzdG9yUmVwbGljYXRlZCgp
KQorICAgICAgICBpZiAoc2NlbmUoKSkKKyAgICAgICAgICAgIHNjZW5lKCktPnVwZGF0ZSgpOwor
CiAgICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzSXRlbSo+IGNoaWxkcmVuID0gY2hpbGRJdGVtcygp
OwogICAgIGZvciAoUUxpc3Q8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNo
aWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmVuZCgpOyArK2l0KQogICAgICAgICBpZiAo
R3JhcGhpY3NMYXllclF0SW1wbCogbGF5ZXI9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJ
bXBsKj4oKCppdCktPnRvR3JhcGhpY3NPYmplY3QoKSkpCkBAIC00MTEsNiArMzk2LDE1IEBAIHZv
aWQgR3JhcGhpY3NMYXllclF0SW1wbDo6c2V0QmFzZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgYmFzZVRyYW5zCiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiB9CiAKK2Jvb2wg
R3JhcGhpY3NMYXllclF0SW1wbDo6aXNBbmNlc3RvclJlcGxpY2F0ZWQoKSBjb25zdAoreworICAg
IGlmIChtX2xheWVyLT5pc1JlcGxpY2F0ZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKG1fbGF5ZXItPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gcW9iamVjdF9jYXN0PEdyYXBo
aWNzTGF5ZXJRdEltcGwqPihtX2xheWVyLT5wYXJlbnQoKS0+cGxhdGZvcm1MYXllcigpLT50b0dy
YXBoaWNzT2JqZWN0KCkpLT5pc0FuY2VzdG9yUmVwbGljYXRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwogUVBhaW50ZXJQYXRoIEdyYXBoaWNzTGF5ZXJRdEltcGw6Om9wYXF1ZUFyZWEoKSBj
b25zdAogewogICAgIFFQYWludGVyUGF0aCBwYWludGVyUGF0aDsKQEAgLTUyMywyMSArNTE3LDQ2
IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZl
LCBib29sIGZvcmNlVXBkYXRlVHJhbnNmb3JtCiAgICAgICAgIC8vIHdlIGNhbid0IHBhaW50IGhl
cmUsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGUgbWFzayBsYXllcgogICAgICAgICAvLyBp
dHNlbGYgaXMgcmVhZHkuLi4gd2UnbGwgaGF2ZSB0byB3YWl0IHRpbGwgdGhpcyBsYXllciB0cmll
cyB0byBwYWludAogICAgICAgICBzZXRGbGFnKEl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSwgbV9s
YXllci0+bWFza0xheWVyKCkgfHwgbV9sYXllci0+bWFza3NUb0JvdW5kcygpKTsKLSAgICAgICAg
c2V0R3JhcGhpY3NFZmZlY3QoMCk7Ci0gICAgICAgIGlmIChtX2xheWVyLT5tYXNrTGF5ZXIoKSkg
ewotICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIG1hc2sgPSBxb2JqZWN0X2Nh
c3Q8R3JhcGhpY3NMYXllclF0SW1wbCo+KG1fbGF5ZXItPm1hc2tMYXllcigpLT5wbGF0Zm9ybUxh
eWVyKCktPnRvR3JhcGhpY3NPYmplY3QoKSkpIHsKLSAgICAgICAgICAgICAgICBtYXNrLT5tX21h
c2tFZmZlY3QgPSBuZXcgTWFza0VmZmVjdFF0KHRoaXMsIG1hc2spOwotICAgICAgICAgICAgICAg
IHNldEdyYXBoaWNzRWZmZWN0KG1hc2stPm1fbWFza0VmZmVjdC5kYXRhKCkpOworICAgICAgICBp
ZiAobV9sYXllci0+aXNSZXBsaWNhdGVkKCkpIHsKKyAgICAgICAgICAgIC8vIHRoZSByZWZsZWN0
aW9uIGVmZmVjdCBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbWFza3MuCisgICAgICAgICAgICBp
ZiAoZ3JhcGhpY3NFZmZlY3QoKSkKKyAgICAgICAgICAgICAgICBncmFwaGljc0VmZmVjdCgpLT51
cGRhdGUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChxb2JqZWN0X2Nhc3Q8
TWFza0VmZmVjdFF0Kj4oZ3JhcGhpY3NFZmZlY3QoKSkpCisgICAgICAgICAgICAgICAgc2V0R3Jh
cGhpY3NFZmZlY3QoMCk7CisgICAgICAgICAgICBpZiAobV9sYXllci0+bWFza0xheWVyKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXllclF0SW1wbCogbWFzayA9IHFvYmplY3Rf
Y2FzdDxHcmFwaGljc0xheWVyUXRJbXBsKj4obV9sYXllci0+bWFza0xheWVyKCktPnBsYXRmb3Jt
TGF5ZXIoKS0+dG9HcmFwaGljc09iamVjdCgpKSkgeworICAgICAgICAgICAgICAgICAgICBtYXNr
LT5tX21hc2tFZmZlY3QgPSBuZXcgTWFza0VmZmVjdFF0KHRoaXMsIG1hc2spOworICAgICAgICAg
ICAgICAgICAgICBzZXRHcmFwaGljc0VmZmVjdChtYXNrLT5tX21hc2tFZmZlY3QuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobV9jaGFuZ2VNYXNrICYgUmVwbGljYUNoYW5nZSkgeworICAgICAgICAvLyBXZSBvbmx5
IHdhbnQgdG8gY2xlYXIgYSByZXBsaWNhIGVmZmVjdCwgbm90IGEgbWFzayBlZmZlY3QuCisgICAg
ICAgIGlmIChxb2JqZWN0X2Nhc3Q8UmVwbGljYUVmZmVjdFF0Kj4oZ3JhcGhpY3NFZmZlY3QoKSkp
CisgICAgICAgICAgICBzZXRHcmFwaGljc0VmZmVjdCgwKTsKKyAgICAgICAgaWYgKG1fbGF5ZXIt
PnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICBHcmFwaGljc0xheWVyKiByZXBsaWNhTGF5
ZXIgPSBtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKTsKKyAgICAgICAgICAgIGlmIChHcmFwaGljc0xh
eWVyUXRJbXBsKiByZXBsaWNhSW1wbCA9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJbXBs
Kj4ocmVwbGljYUxheWVyLT5wbGF0Zm9ybUxheWVyKCktPnRvR3JhcGhpY3NPYmplY3QoKSkpIHsK
KyAgICAgICAgICAgICAgICByZXBsaWNhSW1wbC0+bV9yZXBsaWNhRWZmZWN0ID0gbmV3IFJlcGxp
Y2FFZmZlY3RRdCh0aGlzLCByZXBsaWNhTGF5ZXIsIG1fbGF5ZXIpOworICAgICAgICAgICAgICAg
IHNldEdyYXBoaWNzRWZmZWN0KHJlcGxpY2FJbXBsLT5tX3JlcGxpY2FFZmZlY3QuZGF0YSgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICB1cGRhdGUoKTsKICAgICB9CiAKICAg
ICBpZiAobV9jaGFuZ2VNYXNrICYgU2l6ZUNoYW5nZSkgewogICAgICAgICBpZiAobV9sYXllci0+
c2l6ZSgpICE9IG1fc3RhdGUuc2l6ZSkgewogICAgICAgICAgICAgcHJlcGFyZUdlb21ldHJ5Q2hh
bmdlKCk7CiAgICAgICAgICAgICBtX3NpemUgPSBRU2l6ZUYobV9sYXllci0+c2l6ZSgpLndpZHRo
KCksIG1fbGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAobV9sYXllci0+
cmVwbGljYUxheWVyKCkpCisgICAgICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwq
IHJlcGxpY2EgPSBxb2JqZWN0X2Nhc3Q8R3JhcGhpY3NMYXllclF0SW1wbCo+KG1fbGF5ZXItPnJl
cGxpY2FMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPnRvR3JhcGhpY3NPYmplY3QoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHJlcGxpY2EtPm1fcmVwbGljYUVmZmVjdC5kYXRhKCktPnVwZGF0ZUdl
b21ldHJ5KCk7CiAgICAgICAgIH0KICAgICB9CisKICAgICAvLyBGSVhNRTogdGhpcyBpcyBhIGhh
Y2ssIGR1ZSB0byBhIHByb2JhYmxlIFFHcmFwaGljc1NjZW5lIGJ1ZyB3aGVuIHJhcGlkbHkgbW9k
aWZ5aW5nIHRoZSBwZXJzcGVjdGl2ZQogICAgIC8vIGJ1dCB3aXRob3V0IHRoaXMgbGluZSB3ZSBn
ZXQgZ3JhcGhpYyBhcnRpZmFjdHMKICAgICBpZiAoKG1fY2hhbmdlTWFzayAmIENoaWxkcmVuVHJh
bnNmb3JtQ2hhbmdlKSAmJiBtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtICE9IG1fbGF5ZXItPmNo
aWxkcmVuVHJhbnNmb3JtKCkpCkBAIC01ODMsOCArNjAyLDE0IEBAIHZvaWQgR3JhcGhpY3NMYXll
clF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlLCBib29sIGZvcmNlVXBkYXRlVHJh
bnNmb3JtCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoKG1fY2hhbmdlTWFzayAmIE9wYWNp
dHlDaGFuZ2UpICYmIG1fc3RhdGUub3BhY2l0eSAhPSBtX2xheWVyLT5vcGFjaXR5KCkgJiYgIW1f
b3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcpCi0gICAgICAgIHNldE9wYWNpdHkobV9sYXllci0+b3Bh
Y2l0eSgpKTsKKyAgICBpZiAoKG1fY2hhbmdlTWFzayAmIChPcGFjaXR5Q2hhbmdlIHwgUmVwbGlj
YUNoYW5nZSkgJiYgbV9zdGF0ZS5vcGFjaXR5ICE9IG1fbGF5ZXItPm9wYWNpdHkoKSAmJiAhbV9v
cGFjaXR5QW5pbWF0aW9uUnVubmluZykpIHsKKyAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdElt
cGwqIHJlcGxpY2EgPSBxb2JqZWN0X2Nhc3Q8R3JhcGhpY3NMYXllclF0SW1wbCo+KG1fbGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPnRvR3JhcGhpY3NPYmplY3QoKSkpIHsK
KyAgICAgICAgICAgIC8vIExheWVyIG9wYWNpdHkgYXBwbGllcyBhZnRlciByZWZsZWN0aW9uLCBz
byB3ZSBoYXZlIHRvIGxldCB0aGUgUmVwbGljYUVmZmVjdCBoYW5kbGUgdGhlIG9wYWNpdHkuCisg
ICAgICAgICAgICByZXBsaWNhLT5tX3JlcGxpY2FFZmZlY3QuZGF0YSgpLT5zZXRPcGFjaXR5KG1f
bGF5ZXItPm9wYWNpdHkoKSk7CisgICAgICAgICAgICBzZXRPcGFjaXR5KDEpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHNldE9wYWNpdHkobV9sYXllci0+b3BhY2l0eSgpKTsKKyAgICB9
CiAKICAgICBpZiAobV9jaGFuZ2VNYXNrICYgQ29udGVudHNSZWN0Q2hhbmdlKSB7CiAgICAgICAg
IGNvbnN0IFFSZWN0IHJlY3QobV9sYXllci0+Y29udGVudHNSZWN0KCkpOwpAQCAtNjE2LDcgKzY0
MSw2IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJz
aXZlLCBib29sIGZvcmNlVXBkYXRlVHJhbnNmb3JtCiAgICAgaWYgKChtX2NoYW5nZU1hc2sgJiBC
YWNrZ3JvdW5kQ29sb3JDaGFuZ2UpICYmIChtX3BlbmRpbmdDb250ZW50LmJhY2tncm91bmRDb2xv
ciAhPSBtX2N1cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvcikpCiAgICAgICAgIHVwZGF0ZSgp
OwogCi0gICAgbV9zdGF0ZS5tYXNrTGF5ZXIgPSBtX2xheWVyLT5tYXNrTGF5ZXIoKTsKICAgICBt
X3N0YXRlLnBvcyA9IG1fbGF5ZXItPnBvc2l0aW9uKCk7CiAgICAgbV9zdGF0ZS5hbmNob3JQb2lu
dCA9IG1fbGF5ZXItPmFuY2hvclBvaW50KCk7CiAgICAgbV9zdGF0ZS5zaXplID0gbV9sYXllci0+
c2l6ZSgpOwpAQCAtNjQ4LDggKzY3MiwxMSBAQCBhZnRlckxheWVyQ2hhbmdlczoKICAgICAgICAg
cmV0dXJuOyAgICAKIAogICAgIFFMaXN0PFFHcmFwaGljc0l0ZW0qPiBjaGlsZHJlbiA9IGNoaWxk
SXRlbXMoKTsKLSAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpCi0gICAgICAgIGNoaWxkcmVuLmFw
cGVuZChtX3N0YXRlLm1hc2tMYXllci0+cGxhdGZvcm1MYXllcigpKTsKKyAgICBpZiAobV9sYXll
ci0+bWFza0xheWVyKCkpCisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX2xheWVyLT5tYXNrTGF5
ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKKworICAgIGlmIChtX2xheWVyLT5yZXBsaWNhTGF5ZXIo
KSkKKyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wbGF0
Zm9ybUxheWVyKCkpOwogCiAgICAgZm9yIChRTGlzdDxRR3JhcGhpY3NJdGVtKj46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7ICsraXQp
IHsKICAgICAgICAgaWYgKFFHcmFwaGljc0l0ZW0qIGl0ZW0gPSAqaXQpCkBAIC05NzQsNiArMTAw
MSwxMyBAQCBmbG9hdCBHcmFwaGljc0xheWVyUXQ6OmFjY3VtdWxhdGVkT3BhY2l0eSgpIGNvbnN0
CiB9CiAKIC8vIHJlaW1wIGZyb20gR3JhcGhpY3NMYXllci5oCit2b2lkIEdyYXBoaWNzTGF5ZXJR
dDo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgbV9p
bXBsLT5ub3RpZnlDaGFuZ2UoR3JhcGhpY3NMYXllclF0SW1wbDo6UmVwbGljYUNoYW5nZSk7Cisg
ICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOworfQorCisvLyBy
ZWltcCBmcm9tIEdyYXBoaWNzTGF5ZXIuaAogdm9pZCBHcmFwaGljc0xheWVyUXQ6OnN5bmNDb21w
b3NpdGluZ1N0YXRlKCkKIHsKICAgICBtX2ltcGwtPmZsdXNoQ2hhbmdlcygpOwpAQCAtMTM5NSw2
ICsxNDI5LDE1MSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cmVzdW1lQW5pbWF0aW9ucygpCiAg
ICAgfQogfQogCitNYXNrRWZmZWN0UXQ6Ok1hc2tFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIFFH
cmFwaGljc0l0ZW0qIG1hc2tMYXllcikKKyAgICAgICAgOiBRR3JhcGhpY3NFZmZlY3QocGFyZW50
KQorICAgICAgICAsIG1fbWFza0xheWVyKG1hc2tMYXllcikKK3sKK30KKwordm9pZCBNYXNrRWZm
ZWN0UXQ6OmRyYXcoUVBhaW50ZXIqIHBhaW50ZXIpCit7CisgICAgLy8gdGhpcyBpcyBhIG1vZGlm
aWVkIGNsb25lIG9mIFFHcmFwaGljc09wYWNpdHlFZmZlY3QuCisgICAgLy8gSXQncyBtb3JlIGVm
ZmljaWVudCB0byBkbyBpdCB0aGlzIHdheSBiZWNhdXNlCisgICAgLy8gKGEpIHdlIGRvbid0IG5l
ZWQgdGhlIFFCcnVzaCBhYnN0cmFjdGlvbiAtIHdlIGFsd2F5cyBlbmQgdXAgdXNpbmcgUUdyYXBo
aWNzSXRlbTo6cGFpbnQgZnJvbSB0aGUgbWFzayBsYXllcgorICAgIC8vIChiKSBRR3JhcGhpY3NP
cGFjaXR5RWZmZWN0IGRldGFjaGVzIHRoZSBwaXhtYXAsIHdoaWNoIGlzIGluZWZmaWNpZW50IG9u
IE9wZW5HTC4KKyAgICBRUGl4bWFwIG1hc2tQaXhtYXAoc291cmNlQm91bmRpbmdSZWN0KCkudG9B
bGlnbmVkUmVjdCgpLnNpemUoKSk7CisKKyAgICBpZiAobWFza1BpeG1hcC5pc051bGwoKSkgewor
ICAgICAgICBkcmF3U291cmNlKHBhaW50ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIHNvIHRoZSBwaXhtYXAgd291bGQgaGF2ZSBoYXNBbHBo
YSgpCisgICAgbWFza1BpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgUVBhaW50ZXIg
bWFza1BhaW50ZXIoJm1hc2tQaXhtYXApOworICAgIFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSBv
cHRpb247CisgICAgb3B0aW9uLmV4cG9zZWRSZWN0ID0gb3B0aW9uLnJlY3QgPSBtYXNrUGl4bWFw
LnJlY3QoKTsKKyAgICBtYXNrUGFpbnRlci5zZXRSZW5kZXJIaW50cyhwYWludGVyLT5yZW5kZXJI
aW50cygpLCB0cnVlKTsKKyAgICBtX21hc2tMYXllci0+cGFpbnQoJm1hc2tQYWludGVyLCAmb3B0
aW9uLCAwKTsKKyAgICBtYXNrUGFpbnRlci5lbmQoKTsKKyAgICBRUG9pbnQgb2Zmc2V0OworICAg
IFFQaXhtYXAgc3JjUGl4bWFwID0gc291cmNlUGl4bWFwKFF0OjpMb2dpY2FsQ29vcmRpbmF0ZXMs
ICZvZmZzZXQsIFFHcmFwaGljc0VmZmVjdDo6Tm9QYWQpOworCisgICAgLy8gd2UgaGF2ZSB0byB1
c2UgYW5vdGhlciBpbnRlcm1lZGlhdGUgcGl4bWFwLCB0byBtYWtlIHN1cmUgdGhlIG1hc2sgYXBw
bGllcyBvbmx5IHRvIHRoaXMgaXRlbQorICAgIC8vIGFuZCBkb2Vzbid0IG1vZGlmeSBwaXhlbHMg
YWxyZWFkeSBwYWludGVkIGludG8gdGhpcyBwYWludC1kZXZpY2UKKyAgICBRUGl4bWFwIHBpeG1h
cChzcmNQaXhtYXAuc2l6ZSgpKTsKKyAgICBwaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwor
CisgICAgaWYgKHBpeG1hcC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVBhaW50
ZXIgcGl4bWFwUGFpbnRlcigmcGl4bWFwKTsKKyAgICBwaXhtYXBQYWludGVyLnNldFJlbmRlckhp
bnRzKHBhaW50ZXItPnJlbmRlckhpbnRzKCkpOworICAgIHBpeG1hcFBhaW50ZXIuc2V0Q29tcG9z
aXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAgICAvLyBXZSB1
c2UgZHJhd1BpeG1hcCByYXRoZXIgdGhhbiBkZXRhY2hpbmcsIGJlY2F1c2UgaXQncyBtb3JlIGVm
ZmljaWVudCBvbiBPcGVuR0wKKyAgICBwaXhtYXBQYWludGVyLmRyYXdQaXhtYXAoMCwgMCwgc3Jj
UGl4bWFwKTsKKyAgICBwaXhtYXBQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6
Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOworICAgIHBpeG1hcFBhaW50ZXIuZHJhd1Bp
eG1hcCgwLCAwLCBtYXNrUGl4bWFwKTsKKyAgICBwaXhtYXBQYWludGVyLmVuZCgpOworICAgIHBh
aW50ZXItPmRyYXdQaXhtYXAob2Zmc2V0LCBwaXhtYXApOworfQorCitSZXBsaWNhRWZmZWN0UXQ6
OlJlcGxpY2FFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIEdyYXBoaWNzTGF5ZXIqIHJlcGxpY2FM
YXllciwgR3JhcGhpY3NMYXllciogcmVwbGljYXRlZExheWVyKQorICAgICAgICA6IFFHcmFwaGlj
c0VmZmVjdChwYXJlbnQpCisgICAgICAgICwgbV9yZXBsaWNhTGF5ZXIocmVwbGljYUxheWVyKQor
ICAgICAgICAsIG1fcmVwbGljYXRlZExheWVyKHJlcGxpY2F0ZWRMYXllcikKKyAgICAgICAgLCBt
X29wYWNpdHkoMSkKK3sKK30KKworUVJlY3RGIFJlcGxpY2FFZmZlY3RRdDo6Ym91bmRpbmdSZWN0
Rm9yKGNvbnN0IFFSZWN0RiYgc291cmNlUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gc291cmNl
UmVjdCB8IG1fY29tcHV0ZWRUcmFuc2Zvcm0ubWFwUmVjdChzb3VyY2VSZWN0KTsKK30KKwordm9p
ZCBSZXBsaWNhRWZmZWN0UXQ6OnJlbmRlck1hc2soR3JhcGhpY3NMYXllciogbGF5ZXIsIFFQaXht
YXAmIHBpeG1hcCwgY29uc3QgUVJlY3RGJiBib3VuZGluZ1JlY3QpCit7CisgICAgaWYgKEdyYXBo
aWNzTGF5ZXIqIG1hc2tMYXllciA9IGxheWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgaWYgKFFH
cmFwaGljc0l0ZW0qIG1hc2tMYXllckltcGwgPSBtYXNrTGF5ZXItPm5hdGl2ZUxheWVyKCkpIHsK
KyAgICAgICAgICAgIFFQYWludGVyIG1hc2tQYWludGVyKCZwaXhtYXApOworICAgICAgICAgICAg
bWFza1BhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVf
RGVzdGluYXRpb25Jbik7CisgICAgICAgICAgICBRU3R5bGVPcHRpb25HcmFwaGljc0l0ZW0gb3B0
aW9uOworICAgICAgICAgICAgb3B0aW9uLmV4cG9zZWRSZWN0ID0gb3B0aW9uLnJlY3QgPSBRUmVj
dCgwLCAwLCBib3VuZGluZ1JlY3Qud2lkdGgoKSwgYm91bmRpbmdSZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgICAgIG1hc2tMYXllckltcGwtPnBhaW50KCZtYXNrUGFpbnRlciwgJm9wdGlvbik7Cisg
ICAgICAgIH0KK30KKwordm9pZCBSZXBsaWNhRWZmZWN0UXQ6OmRyYXcoUVBhaW50ZXIqIHBhaW50
ZXIpCit7CisgICAgLy8gSW4gUXQgNC42LngsIG5lc3RlZCByZWZsZWN0aW9uIGRvbid0IGFsd2F5
cyB3b3JrIGFzIGV4cGVjdGVkLCBwb3NzaWJsZSBkdWUgdG8gaXNzdWVzIHdpdGggUUdyYXBoaWNz
RWZmZWN0IHRoYXQgd2VyZSBmaXhlZCBpbiA0LjcuCisgICAgaWYgKCFtX3JlcGxpY2FMYXllcikg
eworICAgICAgICBkcmF3U291cmNlKHBhaW50ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNvbnN0IFFSZWN0RiBib3VuZGluZ1JlY3QgPSBzb3VyY2VCb3VuZGluZ1JlY3QoKTsKKyAg
ICBRUG9pbnQgb2Zmc2V0OworICAgIFFQaXhtYXAgb3JpZ2luYWwgPSBzb3VyY2VQaXhtYXAoUXQ6
OkxvZ2ljYWxDb29yZGluYXRlcywgJm9mZnNldCwgUUdyYXBoaWNzRWZmZWN0OjpOb1BhZCk7CisK
KyAgICAvLyBXZSBoYXZlIHRvIHJlbmRlciB0aGUgbWFzayBvbiB0aGUgc291cmNlIHBpeG1hcCwg
YmVjYXVzZSBpdCBoYXMgdG8gYmUgcmVmbGVjdGVkLgorICAgIHJlbmRlck1hc2sobV9yZXBsaWNh
dGVkTGF5ZXIsIG9yaWdpbmFsLCBib3VuZGluZ1JlY3QpOworICAgIFFQaXhtYXAgcmVwbGljYSA9
IG9yaWdpbmFsOworCisgICAgLy8gTm93IHdlIHJlbmRlciB0aGUgbWFzayBvbiB0aGUgYWN0dWFs
IHJlZmxlY3Rpb24uCisgICAgcmVuZGVyTWFzayhtX3JlcGxpY2FMYXllciwgcmVwbGljYSwgYm91
bmRpbmdSZWN0KTsKKworICAgIC8vIFdlIG5lZWQgYW4gaW50ZXJtZWRpYXRlIHBpeG1hcCB0byBo
YW5kbGUgb3BhY2l0eSBjb3JyZWN0bHkgLSB0aGUgb3JpZ2luYWwKKyAgICAvLyBhbmQgdGhlIHJl
ZmxlY3Rpb24gaGF2ZSB0byBiZSBibGVuZGVkIGJlZm9yZSB0aGUgb3BhY2l0eSBjb21lcyBpbnRv
IHBsYXkuCisKKyAgICAvLyBGSVhNRTogdXNlIGEgc21hbGxlciBwaXhtYXAuCisgICAgUVBpeG1h
cCBpbnRlcm1lZGlhdGVQaXhtYXAocGFpbnRlci0+ZGV2aWNlKCktPndpZHRoKCksIHBhaW50ZXIt
PmRldmljZSgpLT5oZWlnaHQoKSk7CisgICAgaW50ZXJtZWRpYXRlUGl4bWFwLmZpbGwoUXQ6OnRy
YW5zcGFyZW50KTsKKyAgICBRUGFpbnRlciBpbnRlcm1lZGlhdGVQYWludGVyKCZpbnRlcm1lZGlh
dGVQaXhtYXApOworICAgIGludGVybWVkaWF0ZVBhaW50ZXIuc2V0UmVuZGVySGludHMocGFpbnRl
ci0+cmVuZGVySGludHMoKSk7CisgICAgaW50ZXJtZWRpYXRlUGFpbnRlci5zZXRUcmFuc2Zvcm0o
cGFpbnRlci0+dHJhbnNmb3JtKCksIGZhbHNlKTsKKyAgICBpbnRlcm1lZGlhdGVQYWludGVyLmRy
YXdQaXhtYXAob2Zmc2V0LCBvcmlnaW5hbCk7CisgICAgaW50ZXJtZWRpYXRlUGFpbnRlci5zZXRU
cmFuc2Zvcm0obV9jb21wdXRlZFRyYW5zZm9ybSwgdHJ1ZSk7CisKKyAgICAvLyBXZSBwYWludCB0
aGUgcmVmbGVjdGlvbiBiZWhpbmQgdGhlIG9yaWdpbi4KKyAgICBpbnRlcm1lZGlhdGVQYWludGVy
LnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9u
T3Zlcik7CisgICAgaW50ZXJtZWRpYXRlUGFpbnRlci5kcmF3UGl4bWFwKG9mZnNldCwgcmVwbGlj
YSk7CisgICAgaW50ZXJtZWRpYXRlUGFpbnRlci5lbmQoKTsKKyAgICBwYWludGVyLT5zYXZlKCk7
CisKKyAgICAvLyBUaGUgZWZmZWN0IHdhcyBhbHJlYWR5IGRyYXduIHVzaW5nIHRoZSBwYWludGVy
J3MgdHJhbnNmb3JtYXRpb24gbWF0cml4LgorICAgIHBhaW50ZXItPnJlc2V0VHJhbnNmb3JtKCk7
CisgICAgcGFpbnRlci0+c2V0T3BhY2l0eShtX29wYWNpdHkpOworICAgIHBhaW50ZXItPmRyYXdQ
aXhtYXAoMCwgMCwgaW50ZXJtZWRpYXRlUGl4bWFwKTsKKyAgICBwYWludGVyLT5yZXN0b3JlKCk7
Cit9CisKK3ZvaWQgUmVwbGljYUVmZmVjdFF0Ojp1cGRhdGVHZW9tZXRyeSgpCit7CisgICAgLy8g
V2UgYmFrZSB0aGUgYW5jaG9yLCB0cmFuc2Zvcm1hdGlvbiBhbmQgcmVwbGljYXRlZCBsYXllciBw
b3NpdGlvbiBpbnRvIG1fY29tcHV0ZWRUcmFuc2Zvcm0uCisgICAgY29uc3QgcXJlYWwgYW5jaG9y
WCA9IG1fcmVwbGljYUxheWVyLT5hbmNob3JQb2ludCgpLngoKSAqIG1fcmVwbGljYUxheWVyLT5z
aXplKCkud2lkdGgoKTsKKyAgICBjb25zdCBxcmVhbCBhbmNob3JZID0gbV9yZXBsaWNhTGF5ZXIt
PmFuY2hvclBvaW50KCkueSgpICogbV9yZXBsaWNhTGF5ZXItPnNpemUoKS5oZWlnaHQoKTsKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0
ZShhbmNob3JYLCBhbmNob3JZKQorICAgICAgICAubXVsdExlZnQobV9yZXBsaWNhTGF5ZXItPnRy
YW5zZm9ybSgpKQorICAgICAgICAudHJhbnNsYXRlKC1hbmNob3JYLCAtYW5jaG9yWSkKKyAgICAg
ICAgLnRyYW5zbGF0ZShtX3JlcGxpY2FMYXllci0+cmVwbGljYXRlZExheWVyUG9zaXRpb24oKS54
KCksIG1fcmVwbGljYUxheWVyLT5yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpLnkoKSk7CisgICAg
bV9jb21wdXRlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICB1cGRhdGVCb3VuZGluZ1JlY3Qo
KTsKK30KKwordm9pZCBSZXBsaWNhRWZmZWN0UXQ6OnNldE9wYWNpdHkocXJlYWwgb3BhY2l0eSkK
K3sKKyAgICAvLyBXZSBoYXZlIHRvIG1hbmFnZSBvcGFjaXR5IHNlcGFyYXRlbHkgZnJvbSBRR3Jh
cGhpY3NWaWV3LCBiZWNhdXNlIGluIHRoaXMgY2FzZQorICAgIC8vIHRoZSBvcGFjaXR5IGhhcyB0
byBiZSBhcHBsaWVkIGFmdGVyIHRoZSBlZmZlY3QuCisgICAgbV9vcGFjaXR5ID0gb3BhY2l0eTsK
KyAgICB1cGRhdGUoKTsKK30KKwordm9pZCBSZXBsaWNhRWZmZWN0UXQ6OnNvdXJjZUNoYW5nZWQo
Q2hhbmdlRmxhZ3MpCit7CisgICAgdXBkYXRlR2VvbWV0cnkoKTsKK30KKworCiAjZW5kaWYgLy8g
UVRfTk9fQU5JTUFUSU9OCiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NMYXllclF0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzTGF5ZXJRdC5oCmluZGV4IDllNTgzMmYuLmRiZTNiMjUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuaApAQCAtNzksNiArNzksNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3RyaWJ1dGVPcGFjaXR5KGZsb2F0KTsKICAgICB2
aXJ0dWFsIGZsb2F0IGFjY3VtdWxhdGVkT3BhY2l0eSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpOworICAgIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIo
R3JhcGhpY3NMYXllciopOwogCiBwcml2YXRlOgogICAgIE93blB0cjxHcmFwaGljc0xheWVyUXRJ
bXBsPiBtX2ltcGw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54869</attachid>
            <date>2010-05-02 04:31:00 -0700</date>
            <delta_ts>2010-06-01 12:54:31 -0700</delta_ts>
            <desc>correct upload...</desc>
            <filename>patch-35389-2.diff</filename>
            <type>text/plain</type>
            <size>19659</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjY1NmRjZC4uOWMzN2U2ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wNS0wMiAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gR3JhcGhpY3NMYXllcjogc3VwcG9ydCByZWZs
ZWN0aW9ucworCisgICAgICAgIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIHJlZmxlY3Rpb25zIGlu
IEdyYXBoaWNzTGF5ZXJRdC4KKyAgICAgICAgVGhpcyBpcyBkb25lIHdpdGggUUdyYXBoaWNzRWZm
ZWN0LCBhbmQgaW1wbGVtZW50cyB0aGUgR3JhcGhpY3NMYXllciBBUEkgdG8gZG8gc28uCisKKyAg
ICAgICAgU29tZSBvZiB0aGUgZWRnZSBjYXNlcywgbmFtZWx5IG5lc3RlZCByZWZsZWN0aW9ucyB3
aXRoIHRyYW5zZm9ybWF0aW9ucyBpbnNpZGUgdGhlbSwKKyAgICAgICAgYXJlIGRlZmVycmVkIHRv
IGEgbGF0ZXIgZml4LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNTM4OQorCisgICAgICAgIEFsbCBMYXlvdXQgdGVzdHMgdW5kZXIgY29tcG9zaXRp
bmcvcmVmbGVjdGlvbnMgd29yayB3aXRoIFF0IDQuNy4gV2l0aCBRdCA0LjYueCwKKyAgICAgICAg
bmVzdGVkLXJlZmxlY3Rpb24tYW5jaG9yLXBvaW50Lmh0bWwgZG9lc24ndCB3b3JrLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1hc2tFZmZlY3RRdDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsaWNh
RWZmZWN0UXQ6OlJlcGxpY2FFZmZlY3RRdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsaWNhRWZm
ZWN0UXQ6OnNvdXJjZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGljYUVmZmVjdFF0
OjpyZW5kZXJNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxpY2FFZmZlY3RRdDo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpSZXBsaWNhRWZmZWN0UXQ6OnVwZGF0ZUdlb21ldHJ5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlcGxpY2FFZmZlY3RRdDo6c2V0T3BhY2l0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyUXRJbXBsOjopOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclF0SW1wbDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJRdEltcGw6Om9wYXF1ZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
clF0SW1wbDo6Zmx1c2hDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJR
dDo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzTGF5ZXJRdC5oOgorCiAyMDEwLTA1LTAyICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNo
YWVsbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERtaXRyeSBUaXRvdi4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAppbmRl
eCBkZTc1ODFhLi5kYWQxZjVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0xheWVyUXQuY3BwCkBAIC00Myw1NSArNDMsMzQgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisvLyBNYXNrIGVmZmVjdCBpcyB0aGUgUUdyYXBoaWNzRWZmZWN0IGltcGxlbWVu
dGF0aW9uIG9mIENTUyAtd2Via2l0LW1hc2suCiBjbGFzcyBNYXNrRWZmZWN0UXQgOiBwdWJsaWMg
UUdyYXBoaWNzRWZmZWN0IHsKKyAgICBRX09CSkVDVAogcHVibGljOgotICAgIE1hc2tFZmZlY3RR
dChRT2JqZWN0KiBwYXJlbnQsIFFHcmFwaGljc0l0ZW0qIG1hc2tMYXllcikKLSAgICAgICAgICAg
IDogUUdyYXBoaWNzRWZmZWN0KHBhcmVudCkKLSAgICAgICAgICAgICwgbV9tYXNrTGF5ZXIobWFz
a0xheWVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGRyYXcoUVBhaW50ZXIqIHBhaW50ZXIp
Ci0gICAgewotICAgICAgICAvLyB0aGlzIGlzIGEgbW9kaWZpZWQgY2xvbmUgb2YgUUdyYXBoaWNz
T3BhY2l0eUVmZmVjdC4KLSAgICAgICAgLy8gSXQncyBtb3JlIGVmZmljaWVudCB0byBkbyBpdCB0
aGlzIHdheSBiZWNhdXNlCi0gICAgICAgIC8vIChhKSB3ZSBkb24ndCBuZWVkIHRoZSBRQnJ1c2gg
YWJzdHJhY3Rpb24gLSB3ZSBhbHdheXMgZW5kIHVwIHVzaW5nIFFHcmFwaGljc0l0ZW06OnBhaW50
IGZyb20gdGhlIG1hc2sgbGF5ZXIKLSAgICAgICAgLy8gKGIpIFFHcmFwaGljc09wYWNpdHlFZmZl
Y3QgZGV0YWNoZXMgdGhlIHBpeG1hcCwgd2hpY2ggaXMgaW5lZmZpY2llbnQgb24gT3BlbkdMLgot
ICAgICAgICBRUGl4bWFwIG1hc2tQaXhtYXAoc291cmNlQm91bmRpbmdSZWN0KCkudG9BbGlnbmVk
UmVjdCgpLnNpemUoKSk7Ci0KLSAgICAgICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIHNvIHRoZSBw
aXhtYXAgd291bGQgaGF2ZSBoYXNBbHBoYSgpCi0gICAgICAgIG1hc2tQaXhtYXAuZmlsbChRdDo6
dHJhbnNwYXJlbnQpOwotICAgICAgICBRUGFpbnRlciBtYXNrUGFpbnRlcigmbWFza1BpeG1hcCk7
Ci0gICAgICAgIFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSBvcHRpb247Ci0gICAgICAgIG9wdGlv
bi5leHBvc2VkUmVjdCA9IG9wdGlvbi5yZWN0ID0gbWFza1BpeG1hcC5yZWN0KCk7Ci0gICAgICAg
IG1hc2tQYWludGVyLnNldFJlbmRlckhpbnRzKHBhaW50ZXItPnJlbmRlckhpbnRzKCksIHRydWUp
OwotICAgICAgICBtX21hc2tMYXllci0+cGFpbnQoJm1hc2tQYWludGVyLCAmb3B0aW9uLCAwKTsK
LSAgICAgICAgbWFza1BhaW50ZXIuZW5kKCk7Ci0gICAgICAgIFFQb2ludCBvZmZzZXQ7Ci0gICAg
ICAgIFFQaXhtYXAgc3JjUGl4bWFwID0gc291cmNlUGl4bWFwKFF0OjpMb2dpY2FsQ29vcmRpbmF0
ZXMsICZvZmZzZXQsIFFHcmFwaGljc0VmZmVjdDo6Tm9QYWQpOwotCi0gICAgICAgIC8vIHdlIGhh
dmUgdG8gdXNlIGFub3RoZXIgaW50ZXJtZWRpYXRlIHBpeG1hcCwgdG8gbWFrZSBzdXJlIHRoZSBt
YXNrIGFwcGxpZXMgb25seSB0byB0aGlzIGl0ZW0KLSAgICAgICAgLy8gYW5kIGRvZXNuJ3QgbW9k
aWZ5IHBpeGVscyBhbHJlYWR5IHBhaW50ZWQgaW50byB0aGlzIHBhaW50LWRldmljZQotICAgICAg
ICBRUGl4bWFwIHBpeG1hcChzcmNQaXhtYXAuc2l6ZSgpKTsKLSAgICAgICAgcGl4bWFwLmZpbGwo
UXQ6OnRyYW5zcGFyZW50KTsKLQotICAgICAgICBpZiAocGl4bWFwLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIFFQYWludGVyIHBpeG1hcFBhaW50ZXIoJnBpeG1hcCk7
Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuc2V0UmVuZGVySGludHMocGFpbnRlci0+cmVuZGVySGlu
dHMoKSk7Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICAgICAgLy8gV2UgdXNlIGRyYXdQaXhtYXAg
cmF0aGVyIHRoYW4gZGV0YWNoaW5nLCBiZWNhdXNlIGl0J3MgbW9yZSBlZmZpY2llbnQgb24gT3Bl
bkdMCi0gICAgICAgIHBpeG1hcFBhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBzcmNQaXhtYXApOwot
ICAgICAgICBwaXhtYXBQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9z
aXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOwotICAgICAgICBwaXhtYXBQYWludGVyLmRyYXdQaXht
YXAoMCwgMCwgbWFza1BpeG1hcCk7Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuZW5kKCk7Ci0gICAg
ICAgIHBhaW50ZXItPmRyYXdQaXhtYXAob2Zmc2V0LCBwaXhtYXApOwotICAgIH0KLQorICAgIE1h
c2tFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIFFHcmFwaGljc0l0ZW0qIG1hc2tMYXllcik7Cisg
ICAgdm9pZCBkcmF3KFFQYWludGVyKiBwYWludGVyKTsKICAgICBRR3JhcGhpY3NJdGVtKiBtX21h
c2tMYXllcjsKIH07CiAKKy8vIFJlcGxpY2FFZmZlY3RRdCBpcyB0aGUgUUdyYXBoaWNzRWZmZWN0
IGltcGxlbWVudGF0aW9uIG9mIENTUyAtd2Via2l0LXJlZmxlY3Rpb24uCitjbGFzcyBSZXBsaWNh
RWZmZWN0UXQgOiBwdWJsaWMgUUdyYXBoaWNzRWZmZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGlj
OgorICAgIFJlcGxpY2FFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIEdyYXBoaWNzTGF5ZXIqIHJl
cGxpY2FMYXllciwgR3JhcGhpY3NMYXllciogcmVwbGljYXRlZExheWVyKTsKKworICAgIHZvaWQg
cmVuZGVyTWFzayhHcmFwaGljc0xheWVyKiBsYXllciwgUVBpeG1hcCYgcGl4bWFwLCBjb25zdCBR
UmVjdEYmIGJvdW5kaW5nUmVjdCk7CisgICAgdm9pZCBkcmF3KFFQYWludGVyKiBwYWludGVyKTsK
KyAgICB2b2lkIHNldE9wYWNpdHkocXJlYWwgb3BhY2l0eSk7CisgICAgdm9pZCBzb3VyY2VDaGFu
Z2VkKENoYW5nZUZsYWdzKTsKKyAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KCk7CisgICAgUVJlY3RG
IGJvdW5kaW5nUmVjdEZvcihjb25zdCBRUmVjdEYmIHNvdXJjZVJlY3QpIGNvbnN0OworCisgICAg
R3JhcGhpY3NMYXllciogbV9yZXBsaWNhTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllciogbV9yZXBs
aWNhdGVkTGF5ZXI7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jb21wdXRlZFRyYW5zZm9y
bTsKKyAgICBxcmVhbCBtX29wYWNpdHk7Cit9OworCiBjbGFzcyBHcmFwaGljc0xheWVyUXRJbXBs
IDogcHVibGljIFFHcmFwaGljc09iamVjdCB7CiAgICAgUV9PQkpFQ1QKIApAQCAtMTI1LDE0ICsx
MDQsMTYgQEAgcHVibGljOgogICAgICAgICBDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSA9ICAgKDFM
IDw8IDE3KSwKICAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAxOCks
CiAgICAgICAgIEJhY2tncm91bmRDb2xvckNoYW5nZSA9ICAgICAoMUwgPDwgMTkpLAorICAgICAg
ICBSZXBsaWNhQ2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDIwKSwKIAotICAgICAgICBEaXN0
cmlidXRlc09wYWNpdHlDaGFuZ2UgPSAgKDFMIDw8IDIwKQorICAgICAgICBEaXN0cmlidXRlc09w
YWNpdHlDaGFuZ2UgPSAgKDFMIDw8IDIxKQogICAgIH07CiAKICAgICAvLyB0aGUgY29tcG9zaXRv
ciBsZXRzIHVzIHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2UgdHJ5IHRvIGRv
IHNvCiAgICAgZW51bSBTdGF0aWNDb250ZW50VHlwZSB7IEhUTUxDb250ZW50VHlwZSwgUGl4bWFw
Q29udGVudFR5cGUsIENvbG9yQ29udGVudFR5cGUsIE1lZGlhQ29udGVudFR5cGV9OwogCiAgICAg
Y29uc3QgR3JhcGhpY3NMYXllclF0SW1wbCogcm9vdExheWVyKCkgY29uc3Q7CisgICAgYm9vbCBp
c0FuY2VzdG9yUmVwbGljYXRlZCgpIGNvbnN0OwogCiAgICAgR3JhcGhpY3NMYXllclF0SW1wbChH
cmFwaGljc0xheWVyUXQqIG5ld0xheWVyKTsKICAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVyUXRJ
bXBsKCk7CkBAIC0xODAsNiArMTYxLDcgQEAgcHVibGljOgogICAgIGJvb2wgbV90cmFuc2Zvcm1B
bmltYXRpb25SdW5uaW5nOwogICAgIGJvb2wgbV9vcGFjaXR5QW5pbWF0aW9uUnVubmluZzsKICAg
ICBRV2Vha1BvaW50ZXI8TWFza0VmZmVjdFF0PiBtX21hc2tFZmZlY3Q7CisgICAgUVdlYWtQb2lu
dGVyPFJlcGxpY2FFZmZlY3RRdD4gbV9yZXBsaWNhRWZmZWN0OwogCiAgICAgc3RydWN0IENvbnRl
bnREYXRhIHsKICAgICAgICAgUVBpeG1hcCBwaXhtYXA7CkBAIC0yMTIsNyArMTk0LDYgQEAgcHVi
bGljOgogICAgIFFUaW1lciBtX3N1c3BlbmRUaW1lcjsKIAogICAgIHN0cnVjdCBTdGF0ZSB7Ci0g
ICAgICAgIEdyYXBoaWNzTGF5ZXIqIG1hc2tMYXllcjsKICAgICAgICAgRmxvYXRQb2ludCBwb3M7
CiAgICAgICAgIEZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKICAgICAgICAgRmxvYXRTaXplIHNp
emU7CkBAIC0yMzIsOSArMjEzLDkgQEAgcHVibGljOgogICAgICAgICBib29sIGJhY2tmYWNlVmlz
aWJpbGl0eTogMTsKICAgICAgICAgYm9vbCBkaXN0cmlidXRlT3BhY2l0eTogMTsKICAgICAgICAg
Ym9vbCBhbGlnbjogMjsKLSAgICAgICAgU3RhdGUoKTogbWFza0xheWVyKDApLCBvcGFjaXR5KDEu
ZiksIHByZXNlcnZlczNEKGZhbHNlKSwgbWFza3NUb0JvdW5kcyhmYWxzZSksCi0gICAgICAgICAg
ICAgICAgICBkcmF3c0NvbnRlbnQoZmFsc2UpLCBjb250ZW50c09wYXF1ZShmYWxzZSksIGJhY2tm
YWNlVmlzaWJpbGl0eShmYWxzZSksCi0gICAgICAgICAgICAgICAgICBkaXN0cmlidXRlT3BhY2l0
eShmYWxzZSkKKyAgICAgICAgU3RhdGUoKTogb3BhY2l0eSgxLmYpLCBwcmVzZXJ2ZXMzRChmYWxz
ZSksIG1hc2tzVG9Cb3VuZHMoZmFsc2UpLAorICAgICAgICAgICAgICAgICBkcmF3c0NvbnRlbnQo
ZmFsc2UpLCBjb250ZW50c09wYXF1ZShmYWxzZSksIGJhY2tmYWNlVmlzaWJpbGl0eShmYWxzZSks
CisgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVPcGFjaXR5KGZhbHNlKQogICAgICAgICB7CiAg
ICAgICAgIH0KICAgICB9IG1fc3RhdGU7CkBAIC0yOTEsNyArMjcyLDYgQEAgY29uc3QgR3JhcGhp
Y3NMYXllclF0SW1wbCogR3JhcGhpY3NMYXllclF0SW1wbDo6cm9vdExheWVyKCkgY29uc3QKIH0K
IAogCi0KIFFQaXhtYXAgR3JhcGhpY3NMYXllclF0SW1wbDo6cmVjYWNoZShjb25zdCBRUmVnaW9u
JiByZWdpb25Ub1VwZGF0ZSkKIHsKICAgICBpZiAoIW1fbGF5ZXItPmRyYXdzQ29udGVudCgpKQpA
QCAtMzk5LDYgKzM3OSwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6OnVwZGF0ZVRyYW5z
Zm9ybSgpCiAKICAgICBzZXRUcmFuc2Zvcm0odHJhbnNmb3JtMkQpOwogCisgICAgLy8gRklYTUU6
IGZpbmQgdGhlIGNvcnJlY3QgYm91bmRpbmcgcmVjdCBmb3IgdGhlIGVmZmVjdCBpbnN0ZWFkIG9m
IGZvcmNpbmcgYSBzY2VuZSB1cGRhdGUuIFRoYXQncyBpcyBwcmV0dHkgdHJpY2t5IHNvIGZvciBu
b3cgd2Ugc3RheSB3aXRoIHRoZSBoYWNrLgorICAgIGlmIChpc0FuY2VzdG9yUmVwbGljYXRlZCgp
KQorICAgICAgICBpZiAoc2NlbmUoKSkKKyAgICAgICAgICAgIHNjZW5lKCktPnVwZGF0ZSgpOwor
CiAgICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzSXRlbSo+IGNoaWxkcmVuID0gY2hpbGRJdGVtcygp
OwogICAgIGZvciAoUUxpc3Q8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNo
aWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVuLmVuZCgpOyArK2l0KQogICAgICAgICBpZiAo
R3JhcGhpY3NMYXllclF0SW1wbCogbGF5ZXI9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJ
bXBsKj4oKCppdCktPnRvR3JhcGhpY3NPYmplY3QoKSkpCkBAIC00MTEsNiArMzk2LDE1IEBAIHZv
aWQgR3JhcGhpY3NMYXllclF0SW1wbDo6c2V0QmFzZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgYmFzZVRyYW5zCiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiB9CiAKK2Jvb2wg
R3JhcGhpY3NMYXllclF0SW1wbDo6aXNBbmNlc3RvclJlcGxpY2F0ZWQoKSBjb25zdAoreworICAg
IGlmIChtX2xheWVyLT5pc1JlcGxpY2F0ZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKG1fbGF5ZXItPnBhcmVudCgpKQorICAgICAgICByZXR1cm4gcW9iamVjdF9jYXN0PEdyYXBo
aWNzTGF5ZXJRdEltcGwqPihtX2xheWVyLT5wYXJlbnQoKS0+cGxhdGZvcm1MYXllcigpLT50b0dy
YXBoaWNzT2JqZWN0KCkpLT5pc0FuY2VzdG9yUmVwbGljYXRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwogUVBhaW50ZXJQYXRoIEdyYXBoaWNzTGF5ZXJRdEltcGw6Om9wYXF1ZUFyZWEoKSBj
b25zdAogewogICAgIFFQYWludGVyUGF0aCBwYWludGVyUGF0aDsKQEAgLTUyMywyMSArNTE3LDQ2
IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZl
LCBib29sIGZvcmNlVXBkYXRlVHJhbnNmb3JtCiAgICAgICAgIC8vIHdlIGNhbid0IHBhaW50IGhl
cmUsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGUgbWFzayBsYXllcgogICAgICAgICAvLyBp
dHNlbGYgaXMgcmVhZHkuLi4gd2UnbGwgaGF2ZSB0byB3YWl0IHRpbGwgdGhpcyBsYXllciB0cmll
cyB0byBwYWludAogICAgICAgICBzZXRGbGFnKEl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSwgbV9s
YXllci0+bWFza0xheWVyKCkgfHwgbV9sYXllci0+bWFza3NUb0JvdW5kcygpKTsKLSAgICAgICAg
c2V0R3JhcGhpY3NFZmZlY3QoMCk7Ci0gICAgICAgIGlmIChtX2xheWVyLT5tYXNrTGF5ZXIoKSkg
ewotICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIG1hc2sgPSBxb2JqZWN0X2Nh
c3Q8R3JhcGhpY3NMYXllclF0SW1wbCo+KG1fbGF5ZXItPm1hc2tMYXllcigpLT5wbGF0Zm9ybUxh
eWVyKCktPnRvR3JhcGhpY3NPYmplY3QoKSkpIHsKLSAgICAgICAgICAgICAgICBtYXNrLT5tX21h
c2tFZmZlY3QgPSBuZXcgTWFza0VmZmVjdFF0KHRoaXMsIG1hc2spOwotICAgICAgICAgICAgICAg
IHNldEdyYXBoaWNzRWZmZWN0KG1hc2stPm1fbWFza0VmZmVjdC5kYXRhKCkpOworICAgICAgICBp
ZiAobV9sYXllci0+aXNSZXBsaWNhdGVkKCkpIHsKKyAgICAgICAgICAgIC8vIHRoZSByZWZsZWN0
aW9uIGVmZmVjdCBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbWFza3MuCisgICAgICAgICAgICBp
ZiAoZ3JhcGhpY3NFZmZlY3QoKSkKKyAgICAgICAgICAgICAgICBncmFwaGljc0VmZmVjdCgpLT51
cGRhdGUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChxb2JqZWN0X2Nhc3Q8
TWFza0VmZmVjdFF0Kj4oZ3JhcGhpY3NFZmZlY3QoKSkpCisgICAgICAgICAgICAgICAgc2V0R3Jh
cGhpY3NFZmZlY3QoMCk7CisgICAgICAgICAgICBpZiAobV9sYXllci0+bWFza0xheWVyKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXllclF0SW1wbCogbWFzayA9IHFvYmplY3Rf
Y2FzdDxHcmFwaGljc0xheWVyUXRJbXBsKj4obV9sYXllci0+bWFza0xheWVyKCktPnBsYXRmb3Jt
TGF5ZXIoKS0+dG9HcmFwaGljc09iamVjdCgpKSkgeworICAgICAgICAgICAgICAgICAgICBtYXNr
LT5tX21hc2tFZmZlY3QgPSBuZXcgTWFza0VmZmVjdFF0KHRoaXMsIG1hc2spOworICAgICAgICAg
ICAgICAgICAgICBzZXRHcmFwaGljc0VmZmVjdChtYXNrLT5tX21hc2tFZmZlY3QuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAobV9jaGFuZ2VNYXNrICYgUmVwbGljYUNoYW5nZSkgeworICAgICAgICAvLyBXZSBvbmx5
IHdhbnQgdG8gY2xlYXIgYSByZXBsaWNhIGVmZmVjdCwgbm90IGEgbWFzayBlZmZlY3QuCisgICAg
ICAgIGlmIChxb2JqZWN0X2Nhc3Q8UmVwbGljYUVmZmVjdFF0Kj4oZ3JhcGhpY3NFZmZlY3QoKSkp
CisgICAgICAgICAgICBzZXRHcmFwaGljc0VmZmVjdCgwKTsKKyAgICAgICAgaWYgKG1fbGF5ZXIt
PnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICBHcmFwaGljc0xheWVyKiByZXBsaWNhTGF5
ZXIgPSBtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKTsKKyAgICAgICAgICAgIGlmIChHcmFwaGljc0xh
eWVyUXRJbXBsKiByZXBsaWNhSW1wbCA9IHFvYmplY3RfY2FzdDxHcmFwaGljc0xheWVyUXRJbXBs
Kj4ocmVwbGljYUxheWVyLT5wbGF0Zm9ybUxheWVyKCktPnRvR3JhcGhpY3NPYmplY3QoKSkpIHsK
KyAgICAgICAgICAgICAgICByZXBsaWNhSW1wbC0+bV9yZXBsaWNhRWZmZWN0ID0gbmV3IFJlcGxp
Y2FFZmZlY3RRdCh0aGlzLCByZXBsaWNhTGF5ZXIsIG1fbGF5ZXIpOworICAgICAgICAgICAgICAg
IHNldEdyYXBoaWNzRWZmZWN0KHJlcGxpY2FJbXBsLT5tX3JlcGxpY2FFZmZlY3QuZGF0YSgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICB1cGRhdGUoKTsKICAgICB9CiAKICAg
ICBpZiAobV9jaGFuZ2VNYXNrICYgU2l6ZUNoYW5nZSkgewogICAgICAgICBpZiAobV9sYXllci0+
c2l6ZSgpICE9IG1fc3RhdGUuc2l6ZSkgewogICAgICAgICAgICAgcHJlcGFyZUdlb21ldHJ5Q2hh
bmdlKCk7CiAgICAgICAgICAgICBtX3NpemUgPSBRU2l6ZUYobV9sYXllci0+c2l6ZSgpLndpZHRo
KCksIG1fbGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAobV9sYXllci0+
cmVwbGljYUxheWVyKCkpCisgICAgICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwq
IHJlcGxpY2EgPSBxb2JqZWN0X2Nhc3Q8R3JhcGhpY3NMYXllclF0SW1wbCo+KG1fbGF5ZXItPnJl
cGxpY2FMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPnRvR3JhcGhpY3NPYmplY3QoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHJlcGxpY2EtPm1fcmVwbGljYUVmZmVjdC5kYXRhKCktPnVwZGF0ZUdl
b21ldHJ5KCk7CiAgICAgICAgIH0KICAgICB9CisKICAgICAvLyBGSVhNRTogdGhpcyBpcyBhIGhh
Y2ssIGR1ZSB0byBhIHByb2JhYmxlIFFHcmFwaGljc1NjZW5lIGJ1ZyB3aGVuIHJhcGlkbHkgbW9k
aWZ5aW5nIHRoZSBwZXJzcGVjdGl2ZQogICAgIC8vIGJ1dCB3aXRob3V0IHRoaXMgbGluZSB3ZSBn
ZXQgZ3JhcGhpYyBhcnRpZmFjdHMKICAgICBpZiAoKG1fY2hhbmdlTWFzayAmIENoaWxkcmVuVHJh
bnNmb3JtQ2hhbmdlKSAmJiBtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtICE9IG1fbGF5ZXItPmNo
aWxkcmVuVHJhbnNmb3JtKCkpCkBAIC01ODMsOCArNjAyLDE1IEBAIHZvaWQgR3JhcGhpY3NMYXll
clF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlLCBib29sIGZvcmNlVXBkYXRlVHJh
bnNmb3JtCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoKG1fY2hhbmdlTWFzayAmIE9wYWNp
dHlDaGFuZ2UpICYmIG1fc3RhdGUub3BhY2l0eSAhPSBtX2xheWVyLT5vcGFjaXR5KCkgJiYgIW1f
b3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcpCi0gICAgICAgIHNldE9wYWNpdHkobV9sYXllci0+b3Bh
Y2l0eSgpKTsKKyAgICBpZiAoKG1fY2hhbmdlTWFzayAmIChPcGFjaXR5Q2hhbmdlIHwgUmVwbGlj
YUNoYW5nZSkgJiYgbV9zdGF0ZS5vcGFjaXR5ICE9IG1fbGF5ZXItPm9wYWNpdHkoKSAmJiAhbV9v
cGFjaXR5QW5pbWF0aW9uUnVubmluZykpIHsKKyAgICAgICAgaWYgKG1fbGF5ZXItPnJlcGxpY2FM
YXllcigpKSB7CisgICAgICAgICAgICBHcmFwaGljc0xheWVyUXRJbXBsKiByZXBsaWNhID0gcW9i
amVjdF9jYXN0PEdyYXBoaWNzTGF5ZXJRdEltcGwqPihtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
cGxhdGZvcm1MYXllcigpLT50b0dyYXBoaWNzT2JqZWN0KCkpOworICAgICAgICAgICAgLy8gTGF5
ZXIgb3BhY2l0eSBhcHBsaWVzIGFmdGVyIHJlZmxlY3Rpb24sIHNvIHdlIGhhdmUgdG8gbGV0IHRo
ZSBSZXBsaWNhRWZmZWN0IGhhbmRsZSB0aGUgb3BhY2l0eS4KKyAgICAgICAgICAgIHJlcGxpY2Et
Pm1fcmVwbGljYUVmZmVjdC5kYXRhKCktPnNldE9wYWNpdHkobV9sYXllci0+b3BhY2l0eSgpKTsK
KyAgICAgICAgICAgIHNldE9wYWNpdHkoMSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
c2V0T3BhY2l0eShtX2xheWVyLT5vcGFjaXR5KCkpOworICAgIH0KIAogICAgIGlmIChtX2NoYW5n
ZU1hc2sgJiBDb250ZW50c1JlY3RDaGFuZ2UpIHsKICAgICAgICAgY29uc3QgUVJlY3QgcmVjdCht
X2xheWVyLT5jb250ZW50c1JlY3QoKSk7CkBAIC02MTYsNyArNjQyLDYgQEAgdm9pZCBHcmFwaGlj
c0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUsIGJvb2wgZm9yY2VVcGRh
dGVUcmFuc2Zvcm0KICAgICBpZiAoKG1fY2hhbmdlTWFzayAmIEJhY2tncm91bmRDb2xvckNoYW5n
ZSkgJiYgKG1fcGVuZGluZ0NvbnRlbnQuYmFja2dyb3VuZENvbG9yICE9IG1fY3VycmVudENvbnRl
bnQuYmFja2dyb3VuZENvbG9yKSkKICAgICAgICAgdXBkYXRlKCk7CiAKLSAgICBtX3N0YXRlLm1h
c2tMYXllciA9IG1fbGF5ZXItPm1hc2tMYXllcigpOwogICAgIG1fc3RhdGUucG9zID0gbV9sYXll
ci0+cG9zaXRpb24oKTsKICAgICBtX3N0YXRlLmFuY2hvclBvaW50ID0gbV9sYXllci0+YW5jaG9y
UG9pbnQoKTsKICAgICBtX3N0YXRlLnNpemUgPSBtX2xheWVyLT5zaXplKCk7CkBAIC02NDgsOCAr
NjczLDExIEBAIGFmdGVyTGF5ZXJDaGFuZ2VzOgogICAgICAgICByZXR1cm47ICAgIAogCiAgICAg
UUxpc3Q8UUdyYXBoaWNzSXRlbSo+IGNoaWxkcmVuID0gY2hpbGRJdGVtcygpOwotICAgIGlmICht
X3N0YXRlLm1hc2tMYXllcikKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fc3RhdGUubWFza0xh
eWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIGlmIChtX2xheWVyLT5tYXNrTGF5ZXIoKSkKKyAg
ICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fbGF5ZXItPm1hc2tMYXllcigpLT5wbGF0Zm9ybUxheWVy
KCkpOworCisgICAgaWYgKG1fbGF5ZXItPnJlcGxpY2FMYXllcigpKQorICAgICAgICBjaGlsZHJl
bi5hcHBlbmQobV9sYXllci0+cmVwbGljYUxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CiAKICAg
ICBmb3IgKFFMaXN0PFFHcmFwaGljc0l0ZW0qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJl
bi5iZWdpbigpOyBpdCAhPSBjaGlsZHJlbi5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoUUdy
YXBoaWNzSXRlbSogaXRlbSA9ICppdCkKQEAgLTk3NCw2ICsxMDAyLDEzIEBAIGZsb2F0IEdyYXBo
aWNzTGF5ZXJRdDo6YWNjdW11bGF0ZWRPcGFjaXR5KCkgY29uc3QKIH0KIAogLy8gcmVpbXAgZnJv
bSBHcmFwaGljc0xheWVyLmgKK3ZvaWQgR3JhcGhpY3NMYXllclF0OjpzZXRSZXBsaWNhdGVkQnlM
YXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShH
cmFwaGljc0xheWVyUXRJbXBsOjpSZXBsaWNhQ2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjpz
ZXRSZXBsaWNhdGVkQnlMYXllcihsYXllcik7Cit9CisKKy8vIHJlaW1wIGZyb20gR3JhcGhpY3NM
YXllci5oCiB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c3luY0NvbXBvc2l0aW5nU3RhdGUoKQogewog
ICAgIG1faW1wbC0+Zmx1c2hDaGFuZ2VzKCk7CkBAIC0xMzk1LDYgKzE0MzAsMTUxIEBAIHZvaWQg
R3JhcGhpY3NMYXllclF0OjpyZXN1bWVBbmltYXRpb25zKCkKICAgICB9CiB9CiAKK01hc2tFZmZl
Y3RRdDo6TWFza0VmZmVjdFF0KFFPYmplY3QqIHBhcmVudCwgUUdyYXBoaWNzSXRlbSogbWFza0xh
eWVyKQorICAgICAgICA6IFFHcmFwaGljc0VmZmVjdChwYXJlbnQpCisgICAgICAgICwgbV9tYXNr
TGF5ZXIobWFza0xheWVyKQoreworfQorCit2b2lkIE1hc2tFZmZlY3RRdDo6ZHJhdyhRUGFpbnRl
ciogcGFpbnRlcikKK3sKKyAgICAvLyB0aGlzIGlzIGEgbW9kaWZpZWQgY2xvbmUgb2YgUUdyYXBo
aWNzT3BhY2l0eUVmZmVjdC4KKyAgICAvLyBJdCdzIG1vcmUgZWZmaWNpZW50IHRvIGRvIGl0IHRo
aXMgd2F5IGJlY2F1c2UKKyAgICAvLyAoYSkgd2UgZG9uJ3QgbmVlZCB0aGUgUUJydXNoIGFic3Ry
YWN0aW9uIC0gd2UgYWx3YXlzIGVuZCB1cCB1c2luZyBRR3JhcGhpY3NJdGVtOjpwYWludCBmcm9t
IHRoZSBtYXNrIGxheWVyCisgICAgLy8gKGIpIFFHcmFwaGljc09wYWNpdHlFZmZlY3QgZGV0YWNo
ZXMgdGhlIHBpeG1hcCwgd2hpY2ggaXMgaW5lZmZpY2llbnQgb24gT3BlbkdMLgorICAgIFFQaXht
YXAgbWFza1BpeG1hcChzb3VyY2VCb3VuZGluZ1JlY3QoKS50b0FsaWduZWRSZWN0KCkuc2l6ZSgp
KTsKKworICAgIGlmIChtYXNrUGl4bWFwLmlzTnVsbCgpKSB7CisgICAgICAgIGRyYXdTb3VyY2Uo
cGFpbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyB3ZSBuZWVkIHRvIGRv
IHRoaXMgc28gdGhlIHBpeG1hcCB3b3VsZCBoYXZlIGhhc0FscGhhKCkKKyAgICBtYXNrUGl4bWFw
LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICBRUGFpbnRlciBtYXNrUGFpbnRlcigmbWFza1Bp
eG1hcCk7CisgICAgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtIG9wdGlvbjsKKyAgICBvcHRpb24u
ZXhwb3NlZFJlY3QgPSBvcHRpb24ucmVjdCA9IG1hc2tQaXhtYXAucmVjdCgpOworICAgIG1hc2tQ
YWludGVyLnNldFJlbmRlckhpbnRzKHBhaW50ZXItPnJlbmRlckhpbnRzKCksIHRydWUpOworICAg
IG1fbWFza0xheWVyLT5wYWludCgmbWFza1BhaW50ZXIsICZvcHRpb24sIDApOworICAgIG1hc2tQ
YWludGVyLmVuZCgpOworICAgIFFQb2ludCBvZmZzZXQ7CisgICAgUVBpeG1hcCBzcmNQaXhtYXAg
PSBzb3VyY2VQaXhtYXAoUXQ6OkxvZ2ljYWxDb29yZGluYXRlcywgJm9mZnNldCwgUUdyYXBoaWNz
RWZmZWN0OjpOb1BhZCk7CisKKyAgICAvLyB3ZSBoYXZlIHRvIHVzZSBhbm90aGVyIGludGVybWVk
aWF0ZSBwaXhtYXAsIHRvIG1ha2Ugc3VyZSB0aGUgbWFzayBhcHBsaWVzIG9ubHkgdG8gdGhpcyBp
dGVtCisgICAgLy8gYW5kIGRvZXNuJ3QgbW9kaWZ5IHBpeGVscyBhbHJlYWR5IHBhaW50ZWQgaW50
byB0aGlzIHBhaW50LWRldmljZQorICAgIFFQaXhtYXAgcGl4bWFwKHNyY1BpeG1hcC5zaXplKCkp
OworICAgIHBpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisKKyAgICBpZiAocGl4bWFwLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGFpbnRlciBwaXhtYXBQYWludGVyKCZw
aXhtYXApOworICAgIHBpeG1hcFBhaW50ZXIuc2V0UmVuZGVySGludHMocGFpbnRlci0+cmVuZGVy
SGludHMoKSk7CisgICAgcGl4bWFwUGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6
OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOworICAgIC8vIFdlIHVzZSBkcmF3UGl4bWFwIHJhdGhl
ciB0aGFuIGRldGFjaGluZywgYmVjYXVzZSBpdCdzIG1vcmUgZWZmaWNpZW50IG9uIE9wZW5HTAor
ICAgIHBpeG1hcFBhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBzcmNQaXhtYXApOworICAgIHBpeG1h
cFBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVz
dGluYXRpb25Jbik7CisgICAgcGl4bWFwUGFpbnRlci5kcmF3UGl4bWFwKDAsIDAsIG1hc2tQaXht
YXApOworICAgIHBpeG1hcFBhaW50ZXIuZW5kKCk7CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChv
ZmZzZXQsIHBpeG1hcCk7Cit9CisKK1JlcGxpY2FFZmZlY3RRdDo6UmVwbGljYUVmZmVjdFF0KFFP
YmplY3QqIHBhcmVudCwgR3JhcGhpY3NMYXllciogcmVwbGljYUxheWVyLCBHcmFwaGljc0xheWVy
KiByZXBsaWNhdGVkTGF5ZXIpCisgICAgICAgIDogUUdyYXBoaWNzRWZmZWN0KHBhcmVudCkKKyAg
ICAgICAgLCBtX3JlcGxpY2FMYXllcihyZXBsaWNhTGF5ZXIpCisgICAgICAgICwgbV9yZXBsaWNh
dGVkTGF5ZXIocmVwbGljYXRlZExheWVyKQorICAgICAgICAsIG1fb3BhY2l0eSgxKQoreworfQor
CitRUmVjdEYgUmVwbGljYUVmZmVjdFF0Ojpib3VuZGluZ1JlY3RGb3IoY29uc3QgUVJlY3RGJiBz
b3VyY2VSZWN0KSBjb25zdAoreworICAgIHJldHVybiBzb3VyY2VSZWN0IHwgbV9jb21wdXRlZFRy
YW5zZm9ybS5tYXBSZWN0KHNvdXJjZVJlY3QpOworfQorCit2b2lkIFJlcGxpY2FFZmZlY3RRdDo6
cmVuZGVyTWFzayhHcmFwaGljc0xheWVyKiBsYXllciwgUVBpeG1hcCYgcGl4bWFwLCBjb25zdCBR
UmVjdEYmIGJvdW5kaW5nUmVjdCkKK3sKKyAgICBpZiAoR3JhcGhpY3NMYXllciogbWFza0xheWVy
ID0gbGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICBpZiAoUUdyYXBoaWNzSXRlbSogbWFza0xh
eWVySW1wbCA9IG1hc2tMYXllci0+bmF0aXZlTGF5ZXIoKSkgeworICAgICAgICAgICAgUVBhaW50
ZXIgbWFza1BhaW50ZXIoJnBpeG1hcCk7CisgICAgICAgICAgICBtYXNrUGFpbnRlci5zZXRDb21w
b3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0aW5hdGlvbkluKTsKKyAg
ICAgICAgICAgIFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSBvcHRpb247CisgICAgICAgICAgICBv
cHRpb24uZXhwb3NlZFJlY3QgPSBvcHRpb24ucmVjdCA9IFFSZWN0KDAsIDAsIGJvdW5kaW5nUmVj
dC53aWR0aCgpLCBib3VuZGluZ1JlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgbWFza0xheWVy
SW1wbC0+cGFpbnQoJm1hc2tQYWludGVyLCAmb3B0aW9uKTsKKyAgICAgICAgfQorfQorCit2b2lk
IFJlcGxpY2FFZmZlY3RRdDo6ZHJhdyhRUGFpbnRlciogcGFpbnRlcikKK3sKKyAgICAvLyBJbiBR
dCA0LjYueCwgbmVzdGVkIHJlZmxlY3Rpb24gZG9uJ3QgYWx3YXlzIHdvcmsgYXMgZXhwZWN0ZWQs
IHBvc3NpYmxlIGR1ZSB0byBpc3N1ZXMgd2l0aCBRR3JhcGhpY3NFZmZlY3QgdGhhdCB3ZXJlIGZp
eGVkIGluIDQuNy4KKyAgICBpZiAoIW1fcmVwbGljYUxheWVyKSB7CisgICAgICAgIGRyYXdTb3Vy
Y2UocGFpbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgUVJlY3RGIGJv
dW5kaW5nUmVjdCA9IHNvdXJjZUJvdW5kaW5nUmVjdCgpOworICAgIFFQb2ludCBvZmZzZXQ7Cisg
ICAgUVBpeG1hcCBvcmlnaW5hbCA9IHNvdXJjZVBpeG1hcChRdDo6TG9naWNhbENvb3JkaW5hdGVz
LCAmb2Zmc2V0LCBRR3JhcGhpY3NFZmZlY3Q6Ok5vUGFkKTsKKworICAgIC8vIFdlIGhhdmUgdG8g
cmVuZGVyIHRoZSBtYXNrIG9uIHRoZSBzb3VyY2UgcGl4bWFwLCBiZWNhdXNlIGl0IGhhcyB0byBi
ZSByZWZsZWN0ZWQuCisgICAgcmVuZGVyTWFzayhtX3JlcGxpY2F0ZWRMYXllciwgb3JpZ2luYWws
IGJvdW5kaW5nUmVjdCk7CisgICAgUVBpeG1hcCByZXBsaWNhID0gb3JpZ2luYWw7CisKKyAgICAv
LyBOb3cgd2UgcmVuZGVyIHRoZSBtYXNrIG9uIHRoZSBhY3R1YWwgcmVmbGVjdGlvbi4KKyAgICBy
ZW5kZXJNYXNrKG1fcmVwbGljYUxheWVyLCByZXBsaWNhLCBib3VuZGluZ1JlY3QpOworCisgICAg
Ly8gV2UgbmVlZCBhbiBpbnRlcm1lZGlhdGUgcGl4bWFwIHRvIGhhbmRsZSBvcGFjaXR5IGNvcnJl
Y3RseSAtIHRoZSBvcmlnaW5hbAorICAgIC8vIGFuZCB0aGUgcmVmbGVjdGlvbiBoYXZlIHRvIGJl
IGJsZW5kZWQgYmVmb3JlIHRoZSBvcGFjaXR5IGNvbWVzIGludG8gcGxheS4KKworICAgIC8vIEZJ
WE1FOiB1c2UgYSBzbWFsbGVyIHBpeG1hcC4KKyAgICBRUGl4bWFwIGludGVybWVkaWF0ZVBpeG1h
cChwYWludGVyLT5kZXZpY2UoKS0+d2lkdGgoKSwgcGFpbnRlci0+ZGV2aWNlKCktPmhlaWdodCgp
KTsKKyAgICBpbnRlcm1lZGlhdGVQaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgIFFQ
YWludGVyIGludGVybWVkaWF0ZVBhaW50ZXIoJmludGVybWVkaWF0ZVBpeG1hcCk7CisgICAgaW50
ZXJtZWRpYXRlUGFpbnRlci5zZXRSZW5kZXJIaW50cyhwYWludGVyLT5yZW5kZXJIaW50cygpKTsK
KyAgICBpbnRlcm1lZGlhdGVQYWludGVyLnNldFRyYW5zZm9ybShwYWludGVyLT50cmFuc2Zvcm0o
KSwgZmFsc2UpOworICAgIGludGVybWVkaWF0ZVBhaW50ZXIuZHJhd1BpeG1hcChvZmZzZXQsIG9y
aWdpbmFsKTsKKyAgICBpbnRlcm1lZGlhdGVQYWludGVyLnNldFRyYW5zZm9ybShtX2NvbXB1dGVk
VHJhbnNmb3JtLCB0cnVlKTsKKworICAgIC8vIFdlIHBhaW50IHRoZSByZWZsZWN0aW9uIGJlaGlu
ZCB0aGUgb3JpZ2luLgorICAgIGludGVybWVkaWF0ZVBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2Rl
KFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25PdmVyKTsKKyAgICBpbnRlcm1l
ZGlhdGVQYWludGVyLmRyYXdQaXhtYXAob2Zmc2V0LCByZXBsaWNhKTsKKyAgICBpbnRlcm1lZGlh
dGVQYWludGVyLmVuZCgpOworICAgIHBhaW50ZXItPnNhdmUoKTsKKworICAgIC8vIFRoZSBlZmZl
Y3Qgd2FzIGFscmVhZHkgZHJhd24gdXNpbmcgdGhlIHBhaW50ZXIncyB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXguCisgICAgcGFpbnRlci0+cmVzZXRUcmFuc2Zvcm0oKTsKKyAgICBwYWludGVyLT5zZXRP
cGFjaXR5KG1fb3BhY2l0eSk7CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcCgwLCAwLCBpbnRlcm1l
ZGlhdGVQaXhtYXApOworICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKK30KKwordm9pZCBSZXBsaWNh
RWZmZWN0UXQ6OnVwZGF0ZUdlb21ldHJ5KCkKK3sKKyAgICAvLyBXZSBiYWtlIHRoZSBhbmNob3Is
IHRyYW5zZm9ybWF0aW9uIGFuZCByZXBsaWNhdGVkIGxheWVyIHBvc2l0aW9uIGludG8gbV9jb21w
dXRlZFRyYW5zZm9ybS4KKyAgICBjb25zdCBxcmVhbCBhbmNob3JYID0gbV9yZXBsaWNhTGF5ZXIt
PmFuY2hvclBvaW50KCkueCgpICogbV9yZXBsaWNhTGF5ZXItPnNpemUoKS53aWR0aCgpOworICAg
IGNvbnN0IHFyZWFsIGFuY2hvclkgPSBtX3JlcGxpY2FMYXllci0+YW5jaG9yUG9pbnQoKS55KCkg
KiBtX3JlcGxpY2FMYXllci0+c2l6ZSgpLmhlaWdodCgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGFuY2hvclgsIGFuY2hvclkp
CisgICAgICAgIC5tdWx0TGVmdChtX3JlcGxpY2FMYXllci0+dHJhbnNmb3JtKCkpCisgICAgICAg
IC50cmFuc2xhdGUoLWFuY2hvclgsIC1hbmNob3JZKQorICAgICAgICAudHJhbnNsYXRlKG1fcmVw
bGljYUxheWVyLT5yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpLngoKSwgbV9yZXBsaWNhTGF5ZXIt
PnJlcGxpY2F0ZWRMYXllclBvc2l0aW9uKCkueSgpKTsKKyAgICBtX2NvbXB1dGVkVHJhbnNmb3Jt
ID0gdHJhbnNmb3JtOworICAgIHVwZGF0ZUJvdW5kaW5nUmVjdCgpOworfQorCit2b2lkIFJlcGxp
Y2FFZmZlY3RRdDo6c2V0T3BhY2l0eShxcmVhbCBvcGFjaXR5KQoreworICAgIC8vIFdlIGhhdmUg
dG8gbWFuYWdlIG9wYWNpdHkgc2VwYXJhdGVseSBmcm9tIFFHcmFwaGljc1ZpZXcsIGJlY2F1c2Ug
aW4gdGhpcyBjYXNlCisgICAgLy8gdGhlIG9wYWNpdHkgaGFzIHRvIGJlIGFwcGxpZWQgYWZ0ZXIg
dGhlIGVmZmVjdC4KKyAgICBtX29wYWNpdHkgPSBvcGFjaXR5OworICAgIHVwZGF0ZSgpOworfQor
Cit2b2lkIFJlcGxpY2FFZmZlY3RRdDo6c291cmNlQ2hhbmdlZChDaGFuZ2VGbGFncykKK3sKKyAg
ICB1cGRhdGVHZW9tZXRyeSgpOworfQorCisKICNlbmRpZiAvLyBRVF9OT19BTklNQVRJT04KIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVy
UXQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmgKaW5k
ZXggOWU1ODMyZi4uZGJlM2IyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0xheWVyUXQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzTGF5ZXJRdC5oCkBAIC03OSw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGlzdHJpYnV0ZU9wYWNpdHkoZmxvYXQpOwogICAgIHZpcnR1YWwgZmxvYXQgYWNjdW11
bGF0ZWRPcGFjaXR5KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlKCk7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7CiAK
IHByaXZhdGU6CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJRdEltcGw+IG1faW1wbDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56266</attachid>
            <date>2010-05-17 13:30:30 -0700</date>
            <delta_ts>2010-06-01 12:54:31 -0700</delta_ts>
            <desc>Addressed Kenneth&apos;s comments and added some ChangeLog comments about OpenGL </desc>
            <filename>patch-35389-3.diff</filename>
            <type>text/plain</type>
            <size>21822</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjIxNzc5Yi4uYzUzOTFiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNS0xNyAgTm9hbSBSb3NlbnRo
YWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBHcmFwaGljc0xheWVyOiBzdXBwb3J0IHJlZmxl
Y3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NTM4OQorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHJlZmxlY3Rpb25zIGluIEdyYXBoaWNz
TGF5ZXJRdCwgYmFzZWQgb24gdGhlIHNldFJlcGxpY2FMYXllciBBUEksIHVzaW5nIFFHcmFwaGlj
c0VmZmVjdC4KKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIGNvcGllcyB0aGUgaW1hZ2VzIGFu
ZCBhcHBsaWVzIHRoZSBtYXNrcyBhbmQgdHJhbnNmb3JtYXRpb25zIGFjY29yZGluZworICAgICAg
ICB0byB0aGUgQ1NTIHJlZmxlY3Rpb24gc3BlYyBhbmQgdGhlIHdlYmtpdCBsYXlvdXQgdGVzdHMu
IE5vdGUgdGhhdCBzdXBwb3J0IGZvciBuZXN0ZWQtcmVmbGVjdGlvbi1hbmNob3ItcG9pbnQuaHRt
bCByZWxpZXMgb24gYQorICAgICAgICBidWcgaW4gUXQ6IGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5v
a2lhLmNvbS9icm93c2UvUVRCVUctMTA3NTYuCisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBp
cyBvcHRpbWl6ZWQgZm9yIHRoZSBRdCByYXN0ZXIgZW5naW5lLCBhbmQgY291bGQgYmUgZnVydGhl
ciBvcHRpbWl6ZWQgZm9yIE9wZW5HTC4KKworICAgICAgICBUZXN0cyBpbiBMYXlvdXRUZXN0cy9j
b21wb3NpdGluZy9yZWZsZWN0aW9ucyBub3cgd29yaworCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclF0SW1wbDo6KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdEltcGw6
OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0dyYXBoaWNzTGF5ZXJRdEltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclF0SW1wbDo6dXBkYXRlVHJhbnNmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdEltcGw6Omhhc1JlcGxpY2F0ZWRB
bmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENo
YW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclF0OjpzZXRSZXBsaWNhdGVk
QnlMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpNYXNrRWZmZWN0UXQ6Ok1hc2tFZmZlY3RRdCk6
CisgICAgICAgIChXZWJDb3JlOjpNYXNrRWZmZWN0UXQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVmbGVjdGlvbkVmZmVjdFF0OjpSZWZsZWN0aW9uRWZmZWN0UXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVmbGVjdGlvbkVmZmVjdFF0Ojpib3VuZGluZ1JlY3RGb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVmbGVjdGlvbkVmZmVjdFF0OjpyZW5kZXJNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlZmxlY3Rpb25FZmZlY3RRdDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpSZWZsZWN0aW9u
RWZmZWN0UXQ6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZmxlY3Rpb25F
ZmZlY3RRdDo6c2V0T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZWZsZWN0aW9uRWZmZWN0
UXQ6OnNvdXJjZUNoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzTGF5ZXJRdC5oOgorCiAyMDEwLTA1LTE2ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAKaW5kZXggYWFjMTE2NC4uYmMy
OTg0ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xh
eWVyUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXll
clF0LmNwcApAQCAtNDMsNTMgKzQzLDM0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8g
TWFzayBlZmZlY3QgaXMgdGhlIFFHcmFwaGljc0VmZmVjdCBpbXBsZW1lbnRhdGlvbiBvZiBDU1Mg
LXdlYmtpdC1tYXNrLgogY2xhc3MgTWFza0VmZmVjdFF0IDogcHVibGljIFFHcmFwaGljc0VmZmVj
dCB7CisgICAgUV9PQkpFQ1QKIHB1YmxpYzoKLSAgICBNYXNrRWZmZWN0UXQoUU9iamVjdCogcGFy
ZW50LCBRR3JhcGhpY3NJdGVtKiBtYXNrTGF5ZXIpCi0gICAgICAgICAgICA6IFFHcmFwaGljc0Vm
ZmVjdChwYXJlbnQpCi0gICAgICAgICAgICAsIG1fbWFza0xheWVyKG1hc2tMYXllcikKLSAgICB7
Ci0gICAgfQorICAgIE1hc2tFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIFFHcmFwaGljc0l0ZW0q
IG1hc2tMYXllcik7CisgICAgdm9pZCBkcmF3KFFQYWludGVyKiBwYWludGVyKTsKKyAgICBRR3Jh
cGhpY3NJdGVtKiBtX21hc2tMYXllcjsKK307CiAKLSAgICB2b2lkIGRyYXcoUVBhaW50ZXIqIHBh
aW50ZXIpCi0gICAgewotICAgICAgICAvLyB0aGlzIGlzIGEgbW9kaWZpZWQgY2xvbmUgb2YgUUdy
YXBoaWNzT3BhY2l0eUVmZmVjdC4KLSAgICAgICAgLy8gSXQncyBtb3JlIGVmZmljaWVudCB0byBk
byBpdCB0aGlzIHdheSBiZWNhdXNlCi0gICAgICAgIC8vIChhKSB3ZSBkb24ndCBuZWVkIHRoZSBR
QnJ1c2ggYWJzdHJhY3Rpb24gLSB3ZSBhbHdheXMgZW5kIHVwIHVzaW5nIFFHcmFwaGljc0l0ZW06
OnBhaW50IGZyb20gdGhlIG1hc2sgbGF5ZXIKLSAgICAgICAgLy8gKGIpIFFHcmFwaGljc09wYWNp
dHlFZmZlY3QgZGV0YWNoZXMgdGhlIHBpeG1hcCwgd2hpY2ggaXMgaW5lZmZpY2llbnQgb24gT3Bl
bkdMLgotICAgICAgICBRUGl4bWFwIG1hc2tQaXhtYXAoc291cmNlQm91bmRpbmdSZWN0KCkudG9B
bGlnbmVkUmVjdCgpLnNpemUoKSk7Ci0KLSAgICAgICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIHNv
IHRoZSBwaXhtYXAgd291bGQgaGF2ZSBoYXNBbHBoYSgpCi0gICAgICAgIG1hc2tQaXhtYXAuZmls
bChRdDo6dHJhbnNwYXJlbnQpOwotICAgICAgICBRUGFpbnRlciBtYXNrUGFpbnRlcigmbWFza1Bp
eG1hcCk7Ci0gICAgICAgIFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSBvcHRpb247Ci0gICAgICAg
IG9wdGlvbi5leHBvc2VkUmVjdCA9IG9wdGlvbi5yZWN0ID0gbWFza1BpeG1hcC5yZWN0KCk7Ci0g
ICAgICAgIG1hc2tQYWludGVyLnNldFJlbmRlckhpbnRzKHBhaW50ZXItPnJlbmRlckhpbnRzKCks
IHRydWUpOwotICAgICAgICBtX21hc2tMYXllci0+cGFpbnQoJm1hc2tQYWludGVyLCAmb3B0aW9u
LCAwKTsKLSAgICAgICAgbWFza1BhaW50ZXIuZW5kKCk7Ci0gICAgICAgIFFQb2ludCBvZmZzZXQ7
Ci0gICAgICAgIFFQaXhtYXAgc3JjUGl4bWFwID0gc291cmNlUGl4bWFwKFF0OjpMb2dpY2FsQ29v
cmRpbmF0ZXMsICZvZmZzZXQsIFFHcmFwaGljc0VmZmVjdDo6Tm9QYWQpOwotCi0gICAgICAgIC8v
IHdlIGhhdmUgdG8gdXNlIGFub3RoZXIgaW50ZXJtZWRpYXRlIHBpeG1hcCwgdG8gbWFrZSBzdXJl
IHRoZSBtYXNrIGFwcGxpZXMgb25seSB0byB0aGlzIGl0ZW0KLSAgICAgICAgLy8gYW5kIGRvZXNu
J3QgbW9kaWZ5IHBpeGVscyBhbHJlYWR5IHBhaW50ZWQgaW50byB0aGlzIHBhaW50LWRldmljZQot
ICAgICAgICBRUGl4bWFwIHBpeG1hcChzcmNQaXhtYXAuc2l6ZSgpKTsKLSAgICAgICAgcGl4bWFw
LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLQotICAgICAgICBpZiAocGl4bWFwLmlzTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuOworLy8gUmVmbGVjdGlvbkVmZmVjdFF0IGlzIHRoZSBRR3JhcGhp
Y3NFZmZlY3QgaW1wbGVtZW50YXRpb24gb2YgQ1NTIC13ZWJraXQtcmVmbGVjdGlvbi4KK2NsYXNz
IFJlZmxlY3Rpb25FZmZlY3RRdCA6IHB1YmxpYyBRR3JhcGhpY3NFZmZlY3QgeworICAgIFFfT0JK
RUNUCitwdWJsaWM6CisgICAgUmVmbGVjdGlvbkVmZmVjdFF0KFFPYmplY3QqIHBhcmVudCwgR3Jh
cGhpY3NMYXllciogcmVwbGljYUxheWVyLCBHcmFwaGljc0xheWVyKiByZXBsaWNhdGVkTGF5ZXIp
OwogCi0gICAgICAgIFFQYWludGVyIHBpeG1hcFBhaW50ZXIoJnBpeG1hcCk7Ci0gICAgICAgIHBp
eG1hcFBhaW50ZXIuc2V0UmVuZGVySGludHMocGFpbnRlci0+cmVuZGVySGludHMoKSk7Ci0gICAg
ICAgIHBpeG1hcFBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlv
bk1vZGVfU291cmNlKTsKLSAgICAgICAgLy8gV2UgdXNlIGRyYXdQaXhtYXAgcmF0aGVyIHRoYW4g
ZGV0YWNoaW5nLCBiZWNhdXNlIGl0J3MgbW9yZSBlZmZpY2llbnQgb24gT3BlbkdMCi0gICAgICAg
IHBpeG1hcFBhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBzcmNQaXhtYXApOwotICAgICAgICBwaXht
YXBQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rl
c3RpbmF0aW9uSW4pOwotICAgICAgICBwaXhtYXBQYWludGVyLmRyYXdQaXhtYXAoMCwgMCwgbWFz
a1BpeG1hcCk7Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuZW5kKCk7Ci0gICAgICAgIHBhaW50ZXIt
PmRyYXdQaXhtYXAob2Zmc2V0LCBwaXhtYXApOwotICAgIH0KKyAgICB2b2lkIHJlbmRlck1hc2so
R3JhcGhpY3NMYXllciosIFFQaXhtYXAmLCBjb25zdCBRUmVjdEYmIGJvdW5kaW5nUmVjdCk7Cisg
ICAgdm9pZCBzZXRPcGFjaXR5KHFyZWFsIG9wYWNpdHkpOwogCi0gICAgUUdyYXBoaWNzSXRlbSog
bV9tYXNrTGF5ZXI7CisgICAgLy8gUmVpbXAuIGZyb20gUUdyYXBoaWNzRWZmZWN0CisgICAgdm9p
ZCBzb3VyY2VDaGFuZ2VkKENoYW5nZUZsYWdzKTsKKyAgICB2b2lkIGRyYXcoUVBhaW50ZXIqKTsK
KyAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KCk7CisgICAgUVJlY3RGIGJvdW5kaW5nUmVjdEZvcihj
b25zdCBRUmVjdEYmIHNvdXJjZVJlY3QpIGNvbnN0OworCisgICAgR3JhcGhpY3NMYXllciogbV9y
ZXBsaWNhTGF5ZXI7CisgICAgR3JhcGhpY3NMYXllciogbV9yZXBsaWNhdGVkTGF5ZXI7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9jb21wdXRlZFRyYW5zZm9ybTsKKyAgICBxcmVhbCBtX29w
YWNpdHk7CiB9OwogCiBjbGFzcyBHcmFwaGljc0xheWVyUXRJbXBsIDogcHVibGljIFFHcmFwaGlj
c09iamVjdCB7CkBAIC0xMjYsNyArMTA3LDggQEAgcHVibGljOgogICAgICAgICBEaXNwbGF5Q2hh
bmdlID0gICAgICAgICAgICAgKDFMIDw8IDE4KSwKICAgICAgICAgQmFja2dyb3VuZENvbG9yQ2hh
bmdlID0gICAgICgxTCA8PCAxOSksCiAKLSAgICAgICAgRGlzdHJpYnV0ZXNPcGFjaXR5Q2hhbmdl
ID0gICgxTCA8PCAyMCkKKyAgICAgICAgUmVwbGljYUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8
PCAyMCksCisgICAgICAgIERpc3RyaWJ1dGVzT3BhY2l0eUNoYW5nZSA9ICAoMUwgPDwgMjEpCiAg
ICAgfTsKIAogICAgIC8vIHRoZSBjb21wb3NpdG9yIGxldHMgdXMgc3BlY2lhbC1jYXNlIGltYWdl
cyBhbmQgY29sb3JzLCBzbyB3ZSB0cnkgdG8gZG8gc28KQEAgLTE0Niw2ICsxMjgsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRCYXNlVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
Jik7CiAgICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsKIAorICAgIGJvb2wgaGFzUmVwbGljYXRl
ZEFuY2VzdG9yKCkgY29uc3Q7CisKICAgICAvLyBsZXQgdGhlIGNvbXBvc2l0b3ItQVBJIHRlbGwg
dXMgd2hpY2ggcHJvcGVydGllcyB3ZXJlIGNoYW5nZWQKICAgICB2b2lkIG5vdGlmeUNoYW5nZShD
aGFuZ2VNYXNrKTsKIApAQCAtMTgwLDYgKzE2NCw3IEBAIHB1YmxpYzoKICAgICBib29sIG1fdHJh
bnNmb3JtQW5pbWF0aW9uUnVubmluZzsKICAgICBib29sIG1fb3BhY2l0eUFuaW1hdGlvblJ1bm5p
bmc7CiAgICAgUVdlYWtQb2ludGVyPE1hc2tFZmZlY3RRdD4gbV9tYXNrRWZmZWN0OworICAgIFFX
ZWFrUG9pbnRlcjxSZWZsZWN0aW9uRWZmZWN0UXQ+IG1fcmVmbGVjdGlvbkVmZmVjdDsKIAogICAg
IHN0cnVjdCBDb250ZW50RGF0YSB7CiAgICAgICAgIFFQaXhtYXAgcGl4bWFwOwpAQCAtMjEyLDcg
KzE5Nyw2IEBAIHB1YmxpYzoKICAgICBRVGltZXIgbV9zdXNwZW5kVGltZXI7CiAKICAgICBzdHJ1
Y3QgU3RhdGUgewotICAgICAgICBHcmFwaGljc0xheWVyKiBtYXNrTGF5ZXI7CiAgICAgICAgIEZs
b2F0UG9pbnQgcG9zOwogICAgICAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CiAgICAgICAg
IEZsb2F0U2l6ZSBzaXplOwpAQCAtMjMyLDkgKzIxNiw5IEBAIHB1YmxpYzoKICAgICAgICAgYm9v
bCBiYWNrZmFjZVZpc2liaWxpdHk6IDE7CiAgICAgICAgIGJvb2wgZGlzdHJpYnV0ZU9wYWNpdHk6
IDE7CiAgICAgICAgIGJvb2wgYWxpZ246IDI7Ci0gICAgICAgIFN0YXRlKCk6IG1hc2tMYXllcigw
KSwgb3BhY2l0eSgxLmYpLCBwcmVzZXJ2ZXMzRChmYWxzZSksIG1hc2tzVG9Cb3VuZHMoZmFsc2Up
LAotICAgICAgICAgICAgICAgICAgZHJhd3NDb250ZW50KGZhbHNlKSwgY29udGVudHNPcGFxdWUo
ZmFsc2UpLCBiYWNrZmFjZVZpc2liaWxpdHkoZmFsc2UpLAotICAgICAgICAgICAgICAgICAgZGlz
dHJpYnV0ZU9wYWNpdHkoZmFsc2UpCisgICAgICAgIFN0YXRlKCk6IG9wYWNpdHkoMS5mKSwgcHJl
c2VydmVzM0QoZmFsc2UpLCBtYXNrc1RvQm91bmRzKGZhbHNlKSwKKyAgICAgICAgICAgICAgICAg
ZHJhd3NDb250ZW50KGZhbHNlKSwgY29udGVudHNPcGFxdWUoZmFsc2UpLCBiYWNrZmFjZVZpc2li
aWxpdHkoZmFsc2UpLAorICAgICAgICAgICAgICAgICBkaXN0cmlidXRlT3BhY2l0eShmYWxzZSkK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgfSBtX3N0YXRlOwpAQCAtMjQ4LDYgKzIzMiwxMSBA
QCBwdWJsaWM6CiAjZW5kaWYKIH07CiAKK3N0YXRpYyBpbmxpbmUgR3JhcGhpY3NMYXllclF0SW1w
bCogdG9HcmFwaGljc0xheWVyUXRJbXBsKFFHcmFwaGljc0l0ZW0qIGl0ZW0pCit7CisgICAgcmV0
dXJuIGl0ZW0gPyBxb2JqZWN0X2Nhc3Q8R3JhcGhpY3NMYXllclF0SW1wbCo+KGl0ZW0tPnRvR3Jh
cGhpY3NPYmplY3QoKSkgOiAwOworfQorCiBHcmFwaGljc0xheWVyUXRJbXBsOjpHcmFwaGljc0xh
eWVyUXRJbXBsKEdyYXBoaWNzTGF5ZXJRdCogbmV3TGF5ZXIpCiAgICAgOiBRR3JhcGhpY3NPYmpl
Y3QoMCkKICAgICAsIG1fbGF5ZXIobmV3TGF5ZXIpCkBAIC0yOTgsNyArMjg3LDYgQEAgY29uc3Qg
R3JhcGhpY3NMYXllclF0SW1wbCogR3JhcGhpY3NMYXllclF0SW1wbDo6cm9vdExheWVyKCkgY29u
c3QKIH0KIAogCi0KIFFQaXhtYXAgR3JhcGhpY3NMYXllclF0SW1wbDo6cmVjYWNoZShjb25zdCBR
UmVnaW9uJiByZWdpb25Ub1VwZGF0ZSkKIHsKICAgICBpZiAoIW1fbGF5ZXItPmRyYXdzQ29udGVu
dCgpKQpAQCAtMzQwLDcgKzMyOCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6dXBkYXRl
VHJhbnNmb3JtKCkKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtOwog
Ci0gICAgR3JhcGhpY3NMYXllclF0SW1wbCogcGFyZW50ID0gcW9iamVjdF9jYXN0PEdyYXBoaWNz
TGF5ZXJRdEltcGwqPihwYXJlbnRPYmplY3QoKSk7CisgICAgR3JhcGhpY3NMYXllclF0SW1wbCog
cGFyZW50ID0gdG9HcmFwaGljc0xheWVyUXRJbXBsKHBhcmVudE9iamVjdCgpKTsKIAogICAgIC8v
IHdlYmtpdCBoYXMgcmVsYXRpdmUtdG8tc2l6ZSBvcmlnaW5Qb2ludCwgZ3JhcGhpY3MtdmlldyBo
YXMgYSBwaXhlbCBvcmlnaW5Qb2ludCwgaGVyZSB3ZSBjb252ZXJ0CiAgICAgLy8gd2UgaGF2ZSB0
byBtYW5hZ2UgdGhpcyBvdXJzZWx2ZXMgYmVjYXVzZSBRR3JhcGhpY3NWaWV3J3MgdHJhbnNmb3Jt
T3JpZ2luIGlzIGluY29tcGF0aWJsZQpAQCAtMzk4LDkgKzM4NiwxNCBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJRdEltcGw6OnVwZGF0ZVRyYW5zZm9ybSgpCiAKICAgICBzZXRUcmFuc2Zvcm0odHJhbnNm
b3JtMkQpOwogCisgICAgLy8gRklYTUU6IGZpbmQgdGhlIGNvcnJlY3QgYm91bmRpbmcgcmVjdCBm
b3IgdGhlIGVmZmVjdCBpbnN0ZWFkIG9mIGZvcmNpbmcgYSBzY2VuZSB1cGRhdGUuIFRoYXQncyBp
cyBwcmV0dHkgdHJpY2t5IHNvIGZvciBub3cgd2Ugc3RheSB3aXRoIHRoZSBoYWNrLgorICAgIGlm
IChoYXNSZXBsaWNhdGVkQW5jZXN0b3IoKSkKKyAgICAgICAgaWYgKHNjZW5lKCkpCisgICAgICAg
ICAgICBzY2VuZSgpLT51cGRhdGUoKTsKKwogICAgIGNvbnN0IFFMaXN0PFFHcmFwaGljc0l0ZW0q
PiBjaGlsZHJlbiA9IGNoaWxkSXRlbXMoKTsKICAgICBmb3IgKFFMaXN0PFFHcmFwaGljc0l0ZW0q
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBjaGlsZHJlbi5l
bmQoKTsgKytpdCkKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIGxheWVyPSBxb2Jq
ZWN0X2Nhc3Q8R3JhcGhpY3NMYXllclF0SW1wbCo+KCgqaXQpLT50b0dyYXBoaWNzT2JqZWN0KCkp
KQorICAgICAgICBpZiAoR3JhcGhpY3NMYXllclF0SW1wbCogbGF5ZXI9IHRvR3JhcGhpY3NMYXll
clF0SW1wbCgqaXQpKQogICAgICAgICAgICAgbGF5ZXItPnVwZGF0ZVRyYW5zZm9ybSgpOwogfQog
CkBAIC00MTAsNiArNDAzLDE1IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6c2V0QmFzZVRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgYmFzZVRyYW5zCiAgICAgdXBkYXRl
VHJhbnNmb3JtKCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NMYXllclF0SW1wbDo6aGFzUmVwbGljYXRl
ZEFuY2VzdG9yKCkgY29uc3QKK3sKKyAgICBpZiAobV9sYXllci0+aXNSZXBsaWNhdGVkKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX2xheWVyLT5wYXJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIHRvR3JhcGhpY3NMYXllclF0SW1wbChtX2xheWVyLT5wYXJlbnQoKS0+cGxhdGZvcm1M
YXllcigpKS0+aGFzUmVwbGljYXRlZEFuY2VzdG9yKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CiBRUGFpbnRlclBhdGggR3JhcGhpY3NMYXllclF0SW1wbDo6b3BhcXVlQXJlYSgpIGNvbnN0CiB7
CiAgICAgUVBhaW50ZXJQYXRoIHBhaW50ZXJQYXRoOwpAQCAtNTE0LDcgKzUxNiw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlLCBib29sIGZv
cmNlVXBkYXRlVHJhbnNmb3JtCiAgICAgICAgICAgICAgICAgdy0+c2V0UGFyZW50SXRlbSh0aGlz
KTsKIAogICAgICAgICBmb3IgKFFTZXQ8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGNoaWxkcmVuVG9SZW1vdmUuYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW5Ub1JlbW92ZS5lbmQo
KTsgKytpdCkKLSAgICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXllclF0SW1wbCogdyA9IHFvYmpl
Y3RfY2FzdDxHcmFwaGljc0xheWVyUXRJbXBsKj4oKCppdCktPnRvR3JhcGhpY3NPYmplY3QoKSkp
CisgICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIHcgPSB0b0dyYXBoaWNzTGF5
ZXJRdEltcGwoKml0KSkKICAgICAgICAgICAgICAgICB3LT5zZXRQYXJlbnRJdGVtKDApOwogCiAg
ICAgICAgIC8vIGNoaWxkcmVuIGFyZSBvcmRlcmVkIGJ5IHotdmFsdWUsIGxldCBncmFwaGljcy12
aWV3IGtub3cuCkBAIC01MjcsMjEgKzUyOSw0NiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJRdEltcGw6
OmZsdXNoQ2hhbmdlcyhib29sIHJlY3Vyc2l2ZSwgYm9vbCBmb3JjZVVwZGF0ZVRyYW5zZm9ybQog
ICAgICAgICAvLyB3ZSBjYW4ndCBwYWludCBoZXJlLCBiZWNhdXNlIHdlIGRvbid0IGtub3cgaWYg
dGhlIG1hc2sgbGF5ZXIKICAgICAgICAgLy8gaXRzZWxmIGlzIHJlYWR5Li4uIHdlJ2xsIGhhdmUg
dG8gd2FpdCB0aWxsIHRoaXMgbGF5ZXIgdHJpZXMgdG8gcGFpbnQKICAgICAgICAgc2V0RmxhZyhJ
dGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUsIG1fbGF5ZXItPm1hc2tMYXllcigpIHx8IG1fbGF5ZXIt
Pm1hc2tzVG9Cb3VuZHMoKSk7Ci0gICAgICAgIHNldEdyYXBoaWNzRWZmZWN0KDApOwotICAgICAg
ICBpZiAobV9sYXllci0+bWFza0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlmIChHcmFwaGljc0xh
eWVyUXRJbXBsKiBtYXNrID0gcW9iamVjdF9jYXN0PEdyYXBoaWNzTGF5ZXJRdEltcGwqPihtX2xh
eWVyLT5tYXNrTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT50b0dyYXBoaWNzT2JqZWN0KCkpKSB7
Ci0gICAgICAgICAgICAgICAgbWFzay0+bV9tYXNrRWZmZWN0ID0gbmV3IE1hc2tFZmZlY3RRdCh0
aGlzLCBtYXNrKTsKLSAgICAgICAgICAgICAgICBzZXRHcmFwaGljc0VmZmVjdChtYXNrLT5tX21h
c2tFZmZlY3QuZGF0YSgpKTsKKyAgICAgICAgaWYgKG1fbGF5ZXItPmlzUmVwbGljYXRlZCgpKSB7
CisgICAgICAgICAgICAvLyB0aGUgcmVmbGVjdGlvbiBlZmZlY3QgaGFzIGJ1aWx0LWluIHN1cHBv
cnQgZm9yIG1hc2tzLgorICAgICAgICAgICAgaWYgKGdyYXBoaWNzRWZmZWN0KCkpCisgICAgICAg
ICAgICAgICAgZ3JhcGhpY3NFZmZlY3QoKS0+dXBkYXRlKCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAocW9iamVjdF9jYXN0PE1hc2tFZmZlY3RRdCo+KGdyYXBoaWNzRWZmZWN0
KCkpKQorICAgICAgICAgICAgICAgIHNldEdyYXBoaWNzRWZmZWN0KDApOworICAgICAgICAgICAg
aWYgKG1fbGF5ZXItPm1hc2tMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKEdyYXBoaWNz
TGF5ZXJRdEltcGwqIG1hc2sgPSB0b0dyYXBoaWNzTGF5ZXJRdEltcGwobV9sYXllci0+bWFza0xh
eWVyKCktPnBsYXRmb3JtTGF5ZXIoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWFzay0+bV9t
YXNrRWZmZWN0ID0gbmV3IE1hc2tFZmZlY3RRdCh0aGlzLCBtYXNrKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2V0R3JhcGhpY3NFZmZlY3QobWFzay0+bV9tYXNrRWZmZWN0LmRhdGEoKSk7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCisgICAgaWYg
KG1fY2hhbmdlTWFzayAmIFJlcGxpY2FDaGFuZ2UpIHsKKyAgICAgICAgLy8gV2Ugb25seSB3YW50
IHRvIGNsZWFyIGEgcmVwbGljYSBlZmZlY3QsIG5vdCBhIG1hc2sgZWZmZWN0LgorICAgICAgICBp
ZiAocW9iamVjdF9jYXN0PFJlZmxlY3Rpb25FZmZlY3RRdCo+KGdyYXBoaWNzRWZmZWN0KCkpKQor
ICAgICAgICAgICAgc2V0R3JhcGhpY3NFZmZlY3QoMCk7CisgICAgICAgIGlmIChtX2xheWVyLT5y
ZXBsaWNhTGF5ZXIoKSkgeworICAgICAgICAgICAgR3JhcGhpY3NMYXllciogcmVwbGljYUxheWVy
ID0gbV9sYXllci0+cmVwbGljYUxheWVyKCk7CisgICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXll
clF0SW1wbCogcmVwbGljYUltcGwgPSB0b0dyYXBoaWNzTGF5ZXJRdEltcGwocmVwbGljYUxheWVy
LT5wbGF0Zm9ybUxheWVyKCkpKSB7CisgICAgICAgICAgICAgICAgcmVwbGljYUltcGwtPm1fcmVm
bGVjdGlvbkVmZmVjdCA9IG5ldyBSZWZsZWN0aW9uRWZmZWN0UXQodGhpcywgcmVwbGljYUxheWVy
LCBtX2xheWVyKTsKKyAgICAgICAgICAgICAgICBzZXRHcmFwaGljc0VmZmVjdChyZXBsaWNhSW1w
bC0+bV9yZWZsZWN0aW9uRWZmZWN0LmRhdGEoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgdXBkYXRlKCk7CisgICAgfQorCiAgICAgaWYgKG1fY2hhbmdlTWFzayAmIFNpemVD
aGFuZ2UpIHsKICAgICAgICAgaWYgKG1fbGF5ZXItPnNpemUoKSAhPSBtX3N0YXRlLnNpemUpIHsK
ICAgICAgICAgICAgIHByZXBhcmVHZW9tZXRyeUNoYW5nZSgpOwogICAgICAgICAgICAgbV9zaXpl
ID0gUVNpemVGKG1fbGF5ZXItPnNpemUoKS53aWR0aCgpLCBtX2xheWVyLT5zaXplKCkuaGVpZ2h0
KCkpOworICAgICAgICAgICAgaWYgKG1fbGF5ZXItPnJlcGxpY2FMYXllcigpKQorICAgICAgICAg
ICAgICAgIGlmIChHcmFwaGljc0xheWVyUXRJbXBsKiByZXBsaWNhID0gdG9HcmFwaGljc0xheWVy
UXRJbXBsKG1fbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkpKQorICAgICAg
ICAgICAgICAgICAgICByZXBsaWNhLT5tX3JlZmxlY3Rpb25FZmZlY3QuZGF0YSgpLT51cGRhdGVH
ZW9tZXRyeSgpOwogICAgICAgICB9CiAgICAgfQorCiAgICAgLy8gRklYTUU6IHRoaXMgaXMgYSBo
YWNrLCBkdWUgdG8gYSBwcm9iYWJsZSBRR3JhcGhpY3NTY2VuZSBidWcgd2hlbiByYXBpZGx5IG1v
ZGlmeWluZyB0aGUgcGVyc3BlY3RpdmUKICAgICAvLyBidXQgd2l0aG91dCB0aGlzIGxpbmUgd2Ug
Z2V0IGdyYXBoaWMgYXJ0aWZhY3RzCiAgICAgaWYgKChtX2NoYW5nZU1hc2sgJiBDaGlsZHJlblRy
YW5zZm9ybUNoYW5nZSkgJiYgbV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSAhPSBtX2xheWVyLT5j
aGlsZHJlblRyYW5zZm9ybSgpKQpAQCAtNTk3LDggKzYyNCwxNSBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJRdEltcGw6OmZsdXNoQ2hhbmdlcyhib29sIHJlY3Vyc2l2ZSwgYm9vbCBmb3JjZVVwZGF0ZVRy
YW5zZm9ybQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKChtX2NoYW5nZU1hc2sgJiBPcGFj
aXR5Q2hhbmdlKSAmJiBtX3N0YXRlLm9wYWNpdHkgIT0gbV9sYXllci0+b3BhY2l0eSgpICYmICFt
X29wYWNpdHlBbmltYXRpb25SdW5uaW5nKQotICAgICAgICBzZXRPcGFjaXR5KG1fbGF5ZXItPm9w
YWNpdHkoKSk7CisgICAgaWYgKChtX2NoYW5nZU1hc2sgJiAoT3BhY2l0eUNoYW5nZSB8IFJlcGxp
Y2FDaGFuZ2UpICYmIG1fc3RhdGUub3BhY2l0eSAhPSBtX2xheWVyLT5vcGFjaXR5KCkgJiYgIW1f
b3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcpKSB7CisgICAgICAgIGlmIChtX2xheWVyLT5yZXBsaWNh
TGF5ZXIoKSkgeworICAgICAgICAgICAgR3JhcGhpY3NMYXllclF0SW1wbCogcmVwbGljYSA9IHRv
R3JhcGhpY3NMYXllclF0SW1wbChtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cGxhdGZvcm1MYXll
cigpKTsKKyAgICAgICAgICAgIC8vIExheWVyIG9wYWNpdHkgYXBwbGllcyBhZnRlciByZWZsZWN0
aW9uLCBzbyB3ZSBoYXZlIHRvIGxldCB0aGUgUmVmbGVjdGlvbkVmZmVjdCBoYW5kbGUgdGhlIG9w
YWNpdHkuCisgICAgICAgICAgICByZXBsaWNhLT5tX3JlZmxlY3Rpb25FZmZlY3QuZGF0YSgpLT5z
ZXRPcGFjaXR5KG1fbGF5ZXItPm9wYWNpdHkoKSk7CisgICAgICAgICAgICBzZXRPcGFjaXR5KDEp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNldE9wYWNpdHkobV9sYXllci0+b3BhY2l0
eSgpKTsKKyAgICB9CiAKICAgICBpZiAobV9jaGFuZ2VNYXNrICYgQ29udGVudHNSZWN0Q2hhbmdl
KSB7CiAgICAgICAgIGNvbnN0IFFSZWN0IHJlY3QobV9sYXllci0+Y29udGVudHNSZWN0KCkpOwpA
QCAtNjMyLDcgKzY2Niw2IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2Vz
KGJvb2wgcmVjdXJzaXZlLCBib29sIGZvcmNlVXBkYXRlVHJhbnNmb3JtCiAgICAgaWYgKChtX2No
YW5nZU1hc2sgJiBCYWNrZ3JvdW5kQ29sb3JDaGFuZ2UpICYmIChtX3BlbmRpbmdDb250ZW50LmJh
Y2tncm91bmRDb2xvciAhPSBtX2N1cnJlbnRDb250ZW50LmJhY2tncm91bmRDb2xvcikpCiAgICAg
ICAgIHVwZGF0ZSgpOwogCi0gICAgbV9zdGF0ZS5tYXNrTGF5ZXIgPSBtX2xheWVyLT5tYXNrTGF5
ZXIoKTsKICAgICBtX3N0YXRlLnBvcyA9IG1fbGF5ZXItPnBvc2l0aW9uKCk7CiAgICAgbV9zdGF0
ZS5hbmNob3JQb2ludCA9IG1fbGF5ZXItPmFuY2hvclBvaW50KCk7CiAgICAgbV9zdGF0ZS5zaXpl
ID0gbV9sYXllci0+c2l6ZSgpOwpAQCAtNjY0LDEyICs2OTcsMTUgQEAgYWZ0ZXJMYXllckNoYW5n
ZXM6CiAgICAgICAgIHJldHVybjsgICAgCiAKICAgICBRTGlzdDxRR3JhcGhpY3NJdGVtKj4gY2hp
bGRyZW4gPSBjaGlsZEl0ZW1zKCk7Ci0gICAgaWYgKG1fc3RhdGUubWFza0xheWVyKQotICAgICAg
ICBjaGlsZHJlbi5hcHBlbmQobV9zdGF0ZS5tYXNrTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Cisg
ICAgaWYgKG1fbGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICBjaGlsZHJlbi5hcHBlbmQobV9s
YXllci0+bWFza0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CisKKyAgICBpZiAobV9sYXllci0+
cmVwbGljYUxheWVyKCkpCisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX2xheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKIAogICAgIGZvciAoUUxpc3Q8UUdyYXBoaWNzSXRl
bSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNoaWxkcmVuLmJlZ2luKCk7IGl0ICE9IGNoaWxkcmVu
LmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChRR3JhcGhpY3NJdGVtKiBpdGVtID0gKml0KQot
ICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIGxheWVyID0gcW9iamVjdF9jYXN0
PEdyYXBoaWNzTGF5ZXJRdEltcGwqPihpdGVtLT50b0dyYXBoaWNzT2JqZWN0KCkpKQorICAgICAg
ICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIGxheWVyID0gdG9HcmFwaGljc0xheWVyUXRJ
bXBsKGl0ZW0pKQogICAgICAgICAgICAgICAgIGxheWVyLT5mbHVzaENoYW5nZXModHJ1ZSwgZm9y
Y2VVcGRhdGVUcmFuc2Zvcm0pOwogICAgIH0KIH0KQEAgLTEwMDcsNiArMTA0MywxMyBAQCBmbG9h
dCBHcmFwaGljc0xheWVyUXQ6OmFjY3VtdWxhdGVkT3BhY2l0eSgpIGNvbnN0CiB9CiAKIC8vIHJl
aW1wIGZyb20gR3JhcGhpY3NMYXllci5oCit2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6c2V0UmVwbGlj
YXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgbV9pbXBsLT5ub3RpZnlD
aGFuZ2UoR3JhcGhpY3NMYXllclF0SW1wbDo6UmVwbGljYUNoYW5nZSk7CisgICAgR3JhcGhpY3NM
YXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOworfQorCisvLyByZWltcCBmcm9tIEdy
YXBoaWNzTGF5ZXIuaAogdm9pZCBHcmFwaGljc0xheWVyUXQ6OnN5bmNDb21wb3NpdGluZ1N0YXRl
KCkKIHsKICAgICBtX2ltcGwtPmZsdXNoQ2hhbmdlcygpOwpAQCAtMTQyOCw2ICsxNDcxLDE1MyBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJRdDo6cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgfQogfQogCitN
YXNrRWZmZWN0UXQ6Ok1hc2tFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIFFHcmFwaGljc0l0ZW0q
IG1hc2tMYXllcikKKyAgICAgICAgOiBRR3JhcGhpY3NFZmZlY3QocGFyZW50KQorICAgICAgICAs
IG1fbWFza0xheWVyKG1hc2tMYXllcikKK3sKK30KKwordm9pZCBNYXNrRWZmZWN0UXQ6OmRyYXco
UVBhaW50ZXIqIHBhaW50ZXIpCit7CisgICAgLy8gdGhpcyBpcyBhIG1vZGlmaWVkIGNsb25lIG9m
IFFHcmFwaGljc09wYWNpdHlFZmZlY3QuCisgICAgLy8gSXQncyBtb3JlIGVmZmljaWVudCB0byBk
byBpdCB0aGlzIHdheSBiZWNhdXNlCisgICAgLy8gKGEpIHdlIGRvbid0IG5lZWQgdGhlIFFCcnVz
aCBhYnN0cmFjdGlvbiAtIHdlIGFsd2F5cyBlbmQgdXAgdXNpbmcgUUdyYXBoaWNzSXRlbTo6cGFp
bnQgZnJvbSB0aGUgbWFzayBsYXllcgorICAgIC8vIChiKSBRR3JhcGhpY3NPcGFjaXR5RWZmZWN0
IGRldGFjaGVzIHRoZSBwaXhtYXAsIHdoaWNoIGlzIGluZWZmaWNpZW50IG9uIE9wZW5HTC4KKyAg
ICBRUGl4bWFwIG1hc2tQaXhtYXAoc291cmNlQm91bmRpbmdSZWN0KCkudG9BbGlnbmVkUmVjdCgp
LnNpemUoKSk7CisKKyAgICBpZiAobWFza1BpeG1hcC5pc051bGwoKSkgeworICAgICAgICBkcmF3
U291cmNlKHBhaW50ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gd2UgbmVl
ZCB0byBkbyB0aGlzIHNvIHRoZSBwaXhtYXAgd291bGQgaGF2ZSBoYXNBbHBoYSgpCisgICAgbWFz
a1BpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgUVBhaW50ZXIgbWFza1BhaW50ZXIo
Jm1hc2tQaXhtYXApOworICAgIFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSBvcHRpb247CisgICAg
b3B0aW9uLmV4cG9zZWRSZWN0ID0gb3B0aW9uLnJlY3QgPSBtYXNrUGl4bWFwLnJlY3QoKTsKKyAg
ICBtYXNrUGFpbnRlci5zZXRSZW5kZXJIaW50cyhwYWludGVyLT5yZW5kZXJIaW50cygpLCB0cnVl
KTsKKyAgICBtX21hc2tMYXllci0+cGFpbnQoJm1hc2tQYWludGVyLCAmb3B0aW9uLCAwKTsKKyAg
ICBtYXNrUGFpbnRlci5lbmQoKTsKKyAgICBRUG9pbnQgb2Zmc2V0OworICAgIFFQaXhtYXAgc3Jj
UGl4bWFwID0gc291cmNlUGl4bWFwKFF0OjpMb2dpY2FsQ29vcmRpbmF0ZXMsICZvZmZzZXQsIFFH
cmFwaGljc0VmZmVjdDo6Tm9QYWQpOworCisgICAgLy8gd2UgaGF2ZSB0byB1c2UgYW5vdGhlciBp
bnRlcm1lZGlhdGUgcGl4bWFwLCB0byBtYWtlIHN1cmUgdGhlIG1hc2sgYXBwbGllcyBvbmx5IHRv
IHRoaXMgaXRlbQorICAgIC8vIGFuZCBkb2Vzbid0IG1vZGlmeSBwaXhlbHMgYWxyZWFkeSBwYWlu
dGVkIGludG8gdGhpcyBwYWludC1kZXZpY2UKKyAgICBRUGl4bWFwIHBpeG1hcChzcmNQaXhtYXAu
c2l6ZSgpKTsKKyAgICBwaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworCisgICAgaWYgKHBp
eG1hcC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVBhaW50ZXIgcGl4bWFwUGFp
bnRlcigmcGl4bWFwKTsKKyAgICBwaXhtYXBQYWludGVyLnNldFJlbmRlckhpbnRzKHBhaW50ZXIt
PnJlbmRlckhpbnRzKCkpOworICAgIHBpeG1hcFBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQ
YWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAgICAvLyBXZSB1c2UgZHJhd1BpeG1h
cCByYXRoZXIgdGhhbiBkZXRhY2hpbmcsIGJlY2F1c2UgaXQncyBtb3JlIGVmZmljaWVudCBvbiBP
cGVuR0wKKyAgICBwaXhtYXBQYWludGVyLmRyYXdQaXhtYXAoMCwgMCwgc3JjUGl4bWFwKTsKKyAg
ICBwaXhtYXBQYWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25N
b2RlX0Rlc3RpbmF0aW9uSW4pOworICAgIHBpeG1hcFBhaW50ZXIuZHJhd1BpeG1hcCgwLCAwLCBt
YXNrUGl4bWFwKTsKKyAgICBwaXhtYXBQYWludGVyLmVuZCgpOworICAgIHBhaW50ZXItPmRyYXdQ
aXhtYXAob2Zmc2V0LCBwaXhtYXApOworfQorCitSZWZsZWN0aW9uRWZmZWN0UXQ6OlJlZmxlY3Rp
b25FZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIEdyYXBoaWNzTGF5ZXIqIHJlcGxpY2FMYXllciwg
R3JhcGhpY3NMYXllciogcmVwbGljYXRlZExheWVyKQorICAgICAgICA6IFFHcmFwaGljc0VmZmVj
dChwYXJlbnQpCisgICAgICAgICwgbV9yZXBsaWNhTGF5ZXIocmVwbGljYUxheWVyKQorICAgICAg
ICAsIG1fcmVwbGljYXRlZExheWVyKHJlcGxpY2F0ZWRMYXllcikKKyAgICAgICAgLCBtX29wYWNp
dHkoMSkKK3sKK30KKworUVJlY3RGIFJlZmxlY3Rpb25FZmZlY3RRdDo6Ym91bmRpbmdSZWN0Rm9y
KGNvbnN0IFFSZWN0RiYgc291cmNlUmVjdCkgY29uc3QKK3sKKyAgICBjb25zdCBRUmVjdEYgcmVj
dCA9IHNvdXJjZVJlY3QgfCBtX2NvbXB1dGVkVHJhbnNmb3JtLm1hcFJlY3Qoc291cmNlUmVjdCk7
CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK3ZvaWQgUmVmbGVjdGlvbkVmZmVjdFF0OjpyZW5kZXJN
YXNrKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBRUGl4bWFwJiBwaXhtYXAsIGNvbnN0IFFSZWN0RiYg
Ym91bmRpbmdSZWN0KQoreworICAgIGlmIChHcmFwaGljc0xheWVyKiBtYXNrTGF5ZXIgPSBsYXll
ci0+bWFza0xheWVyKCkpCisgICAgICAgIGlmIChRR3JhcGhpY3NJdGVtKiBtYXNrTGF5ZXJJbXBs
ID0gbWFza0xheWVyLT5uYXRpdmVMYXllcigpKSB7CisgICAgICAgICAgICBRUGFpbnRlciBtYXNr
UGFpbnRlcigmcGl4bWFwKTsKKyAgICAgICAgICAgIG1hc2tQYWludGVyLnNldENvbXBvc2l0aW9u
TW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOworICAgICAgICAg
ICAgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtIG9wdGlvbjsKKyAgICAgICAgICAgIG9wdGlvbi5l
eHBvc2VkUmVjdCA9IG9wdGlvbi5yZWN0ID0gUVJlY3QoMCwgMCwgYm91bmRpbmdSZWN0LndpZHRo
KCksIGJvdW5kaW5nUmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICBtYXNrTGF5ZXJJbXBsLT5w
YWludCgmbWFza1BhaW50ZXIsICZvcHRpb24pOworICAgICAgICB9Cit9CisKK3ZvaWQgUmVmbGVj
dGlvbkVmZmVjdFF0OjpkcmF3KFFQYWludGVyKiBwYWludGVyKQoreworICAgIGlmICghbV9yZXBs
aWNhTGF5ZXIpIHsKKyAgICAgICAgZHJhd1NvdXJjZShwYWludGVyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjb25zdCBRUmVjdEYgYm91bmRpbmdSZWN0ID0gc291cmNlQm91bmRpbmdS
ZWN0KCk7CisgICAgUVBvaW50IG9mZnNldDsKKyAgICAvLyBGSVhNRTogVGhpcyB3b3VsZCBub3Qg
YWx3YXlzIHdvcmsgZm9yIG5lc3RlZCByZWZsZWN0aW9ucy4gU2VlIFFUQlVHLTEwNzU2OworICAg
IC8vIGhlbmNlIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL3JlZmxlY3Rpb25zL25lc3RlZC1yZWZs
ZWN0aW9uLWFuY2hvci1wb2ludC5odG1sIGRvZXNuJ3Qgd29yay4KKyAgICBRUGl4bWFwIG9yaWdp
bmFsID0gc291cmNlUGl4bWFwKFF0OjpMb2dpY2FsQ29vcmRpbmF0ZXMsICZvZmZzZXQsIFFHcmFw
aGljc0VmZmVjdDo6UGFkVG9FZmZlY3RpdmVCb3VuZGluZ1JlY3QpOworCisgICAgLy8gV2UgaGF2
ZSB0byByZW5kZXIgdGhlIG1hc2sgb24gdGhlIHNvdXJjZSBwaXhtYXAsIGJlY2F1c2UgaXQgc2hv
dWxkIGJlIHJlZmxlY3RlZCBhbG9uZyB3aXRoIHRoZSBjb250ZW50cy4KKyAgICByZW5kZXJNYXNr
KG1fcmVwbGljYXRlZExheWVyLCBvcmlnaW5hbCwgYm91bmRpbmdSZWN0KTsKKyAgICBRUGl4bWFw
IHJlcGxpY2EgPSBvcmlnaW5hbDsKKworICAgIC8vIE5vdyB3ZSByZW5kZXIgdGhlIHJlZmxlY3Rp
b24tbWFzay4KKyAgICByZW5kZXJNYXNrKG1fcmVwbGljYUxheWVyLCByZXBsaWNhLCBib3VuZGlu
Z1JlY3QpOworCisgICAgLy8gV2UgbmVlZCBhbiBpbnRlcm1lZGlhdGUgcGl4bWFwIHRvIGhhbmRs
ZSBvcGFjaXR5IGNvcnJlY3RseSAtIHRoZSBvcmlnaW5hbAorICAgIC8vIGFuZCB0aGUgcmVmbGVj
dGlvbiBoYXZlIHRvIGJlIGJsZW5kZWQgYmVmb3JlIHRoZSBvcGFjaXR5IGNvbWVzIGludG8gcGxh
eS4KKworICAgIC8vIEZJWE1FOiB3ZSBjYW4gcHJvYmFibHkgZG8gd2l0aCBhIG1pbmltYWwgcGl4
bWFwIHRoYXQgY2FuIGhvbGQgdGhlIHNvdXJjZSBhbmQgdGhlIHJlZmxlY3Rpb24uCisgICAgLy8g
QnV0IGZvciBub3cgd2UganVzdCB1c2UgYSBwaXhtYXAgdGhlIHNpemUgb2YgdGhlIHRhcmdldCBk
ZXZpY2UsIGZvciBzaW1wbGljaXR5LgorICAgIFFQaXhtYXAgaW50ZXJtZWRpYXRlUGl4bWFwKHBh
aW50ZXItPmRldmljZSgpLT53aWR0aCgpLCBwYWludGVyLT5kZXZpY2UoKS0+aGVpZ2h0KCkpOwor
ICAgIGludGVybWVkaWF0ZVBpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgUVBhaW50
ZXIgaW50ZXJtZWRpYXRlUGFpbnRlcigmaW50ZXJtZWRpYXRlUGl4bWFwKTsKKyAgICBpbnRlcm1l
ZGlhdGVQYWludGVyLnNldFRyYW5zZm9ybShwYWludGVyLT50cmFuc2Zvcm0oKSwgZmFsc2UpOwor
ICAgIGludGVybWVkaWF0ZVBhaW50ZXIuZHJhd1BpeG1hcChvZmZzZXQsIG9yaWdpbmFsKTsKKyAg
ICBpbnRlcm1lZGlhdGVQYWludGVyLnNldFRyYW5zZm9ybShtX2NvbXB1dGVkVHJhbnNmb3JtLCB0
cnVlKTsKKworICAgIC8vIFdlIHBhaW50IHRoZSByZWZsZWN0aW9uIGJlaGluZCB0aGUgb3JpZ2lu
LgorICAgIGludGVybWVkaWF0ZVBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpD
b21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25PdmVyKTsKKyAgICBpbnRlcm1lZGlhdGVQYWludGVy
LmRyYXdQaXhtYXAob2Zmc2V0LCByZXBsaWNhKTsKKyAgICBpbnRlcm1lZGlhdGVQYWludGVyLmVu
ZCgpOworICAgIHBhaW50ZXItPnNhdmUoKTsKKworICAgIC8vIFRoZSBlZmZlY3Qgd2FzIGFscmVh
ZHkgZHJhd24gdXNpbmcgdGhlIHBhaW50ZXIncyB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguCisgICAg
cGFpbnRlci0+cmVzZXRUcmFuc2Zvcm0oKTsKKyAgICBwYWludGVyLT5zZXRPcGFjaXR5KG1fb3Bh
Y2l0eSk7CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcCgwLCAwLCBpbnRlcm1lZGlhdGVQaXhtYXAp
OworICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKK30KKwordm9pZCBSZWZsZWN0aW9uRWZmZWN0UXQ6
OnVwZGF0ZUdlb21ldHJ5KCkKK3sKKyAgICAvLyBXZSBiYWtlIHRoZSBhbmNob3IsIHRyYW5zZm9y
bWF0aW9uIGFuZCByZXBsaWNhdGVkIGxheWVyIHBvc2l0aW9uIGludG8gbV9jb21wdXRlZFRyYW5z
Zm9ybS4KKyAgICBjb25zdCBxcmVhbCBhbmNob3JYID0gbV9yZXBsaWNhTGF5ZXItPmFuY2hvclBv
aW50KCkueCgpICogbV9yZXBsaWNhTGF5ZXItPnNpemUoKS53aWR0aCgpOworICAgIGNvbnN0IHFy
ZWFsIGFuY2hvclkgPSBtX3JlcGxpY2FMYXllci0+YW5jaG9yUG9pbnQoKS55KCkgKiBtX3JlcGxp
Y2FMYXllci0+c2l6ZSgpLmhlaWdodCgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5z
Zm9ybTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGFuY2hvclgsIGFuY2hvclkpCisgICAgICAg
IC5tdWx0TGVmdChtX3JlcGxpY2FMYXllci0+dHJhbnNmb3JtKCkpCisgICAgICAgIC50cmFuc2xh
dGUoLWFuY2hvclgsIC1hbmNob3JZKQorICAgICAgICAudHJhbnNsYXRlKG1fcmVwbGljYUxheWVy
LT5yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpLngoKSwgbV9yZXBsaWNhTGF5ZXItPnJlcGxpY2F0
ZWRMYXllclBvc2l0aW9uKCkueSgpKTsKKyAgICBtX2NvbXB1dGVkVHJhbnNmb3JtID0gdHJhbnNm
b3JtOworICAgIHVwZGF0ZUJvdW5kaW5nUmVjdCgpOworfQorCit2b2lkIFJlZmxlY3Rpb25FZmZl
Y3RRdDo6c2V0T3BhY2l0eShxcmVhbCBvcGFjaXR5KQoreworICAgIC8vIFdlIGhhdmUgdG8gbWFu
YWdlIG9wYWNpdHkgc2VwYXJhdGVseSBmcm9tIFFHcmFwaGljc1ZpZXcsIGJlY2F1c2UgaW4gdGhp
cyBjYXNlCisgICAgLy8gdGhlIG9wYWNpdHkgaGFzIHRvIGJlIGFwcGxpZWQgYWZ0ZXIgdGhlIGVm
ZmVjdC4KKyAgICBtX29wYWNpdHkgPSBvcGFjaXR5OworICAgIHVwZGF0ZSgpOworfQorCit2b2lk
IFJlZmxlY3Rpb25FZmZlY3RRdDo6c291cmNlQ2hhbmdlZChDaGFuZ2VGbGFncykKK3sKKyAgICB1
cGRhdGVHZW9tZXRyeSgpOworfQorCisKICNlbmRpZiAvLyBRVF9OT19BTklNQVRJT04KIH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmgKaW5kZXgg
NmRlNWE2ZS4uN2ZmNTEzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0xheWVyUXQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzTGF5ZXJRdC5oCkBAIC04Myw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZGlzdHJpYnV0ZU9wYWNpdHkoZmxvYXQpOwogICAgIHZpcnR1YWwgZmxvYXQgYWNjdW11bGF0
ZWRPcGFjaXR5KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRl
KCk7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7CiAKIHBy
aXZhdGU6CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJRdEltcGw+IG1faW1wbDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57584</attachid>
            <date>2010-06-01 12:54:31 -0700</date>
            <delta_ts>2010-06-01 12:56:33 -0700</delta_ts>
            <desc>Re-merged patch</desc>
            <filename>patch-35389-4.diff</filename>
            <type>text/plain</type>
            <size>20047</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDhkYTY0MS4uMjE4NGIxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMC0wNi0wMSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gR3JhcGhpY3NMYXllcjogc3VwcG9ydCByZWZs
ZWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzUzODkKKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciByZWZsZWN0aW9ucyBpbiBHcmFwaGlj
c0xheWVyUXQsIGJhc2VkIG9uIHRoZSBzZXRSZXBsaWNhTGF5ZXIgQVBJLCB1c2luZyBRR3JhcGhp
Y3NFZmZlY3QuCisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBjb3BpZXMgdGhlIGltYWdlcyBh
bmQgYXBwbGllcyB0aGUgbWFza3MgYW5kIHRyYW5zZm9ybWF0aW9ucyBhY2NvcmRpbmcKKyAgICAg
ICAgdG8gdGhlIENTUyByZWZsZWN0aW9uIHNwZWMgYW5kIHRoZSB3ZWJraXQgbGF5b3V0IHRlc3Rz
LiBOb3RlIHRoYXQgc29tZSBvZiB0aGUgZnJpbmdlIGxheW91dC10ZXN0cyBkb24ndAorICAgICAg
ICB1cGRhdGUgY29ycmVjdGx5IGR1ZSB0byBhIFF0IGJ1ZywgYnV0IHRoZSBtYWpvciB1c2UgY2Fz
ZXMgZm9yIHJlZmxlY3Rpb25zIHdvcmsgcHJvcGVybHkuCisKKyAgICAgICAgVGhlIGltcGxlbWVu
dGF0aW9uIGlzIG9wdGltaXplZCBmb3IgdGhlIFF0IHJhc3RlciBlbmdpbmUsIGFuZCBjb3VsZCBi
ZSBmdXJ0aGVyIG9wdGltaXplZCBmb3IgT3BlbkdMLUVTLAorICAgICAgICBhcyBpdCB1c2VzIGlt
YWdlIGNvcGllcyB3aGljaCBhcmUgbm90IG9wdGltaXplZCB3aXRoIHRoZSBRdCBPcGVuR0wgcGFp
bnQgZW5naW5lLgorCisgICAgICAgIFRlc3RzIGluIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL3Jl
ZmxlY3Rpb25zIG5vdyB3b3JrCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0xheWVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclF0SW1wbDo6
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdEltcGw6OnVwZGF0ZVRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyUXRJbXBsOjpoYXNSZXBsaWNhdGVk
QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hD
aGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdDo6c2V0UmVwbGljYXRl
ZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWFza0VmZmVjdFF0OjpNYXNrRWZmZWN0UXQp
OgorICAgICAgICAoV2ViQ29yZTo6TWFza0VmZmVjdFF0OjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlZmxlY3Rpb25FZmZlY3RRdDo6UmVmbGVjdGlvbkVmZmVjdFF0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZmxlY3Rpb25FZmZlY3RRdDo6Ym91bmRpbmdSZWN0Rm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZmxlY3Rpb25FZmZlY3RRdDo6cmVuZGVyTWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWZsZWN0aW9uRWZmZWN0UXQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6UmVmbGVjdGlv
bkVmZmVjdFF0Ojp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZWZsZWN0aW9u
RWZmZWN0UXQ6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVmbGVjdGlvbkVmZmVj
dFF0Ojpzb3VyY2VDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0xheWVyUXQuaDoKKwogMjAxMC0wNi0wMSAgQWRhbSBMYW5nbGV5ICA8YWdsQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAppbmRleCAxY2MyMWI4Li5l
NjM5YTYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
TGF5ZXJRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xh
eWVyUXQuY3BwCkBAIC00NCw2NCArNDQsMzYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lm
bmRlZiBRVF9OT19HUkFQSElDU0VGRkVDVAorLy8gTWFza0VmZmVjdFF0IGlzIHRoZSBRR3JhcGhp
Y3NFZmZlY3QgaW1wbGVtZW50YXRpb24gb2YgQ1NTIC13ZWJraXQtbWFzay4KIGNsYXNzIE1hc2tF
ZmZlY3RRdCA6IHB1YmxpYyBRR3JhcGhpY3NFZmZlY3QgeworICAgIFFfT0JKRUNUCiBwdWJsaWM6
Ci0gICAgTWFza0VmZmVjdFF0KFFPYmplY3QqIHBhcmVudCwgUUdyYXBoaWNzSXRlbSogbWFza0xh
eWVyKQotICAgICAgICA6IFFHcmFwaGljc0VmZmVjdChwYXJlbnQpCi0gICAgICAgICwgbV9tYXNr
TGF5ZXIobWFza0xheWVyKQotICAgIHsKLSAgICB9CisgICAgTWFza0VmZmVjdFF0KFFPYmplY3Qq
IHBhcmVudCwgUUdyYXBoaWNzSXRlbSogbWFza0xheWVyKTsKKyAgICB2b2lkIGRyYXcoUVBhaW50
ZXIqKTsKKyAgICBRR3JhcGhpY3NJdGVtKiBtX21hc2tMYXllcjsKK307CiAKLSAgICB2b2lkIGRy
YXcoUVBhaW50ZXIqIHBhaW50ZXIpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIGEgbW9kaWZp
ZWQgY2xvbmUgb2YgUUdyYXBoaWNzT3BhY2l0eUVmZmVjdC4KLSAgICAgICAgLy8gSXQncyBtb3Jl
IGVmZmljaWVudCB0byBkbyBpdCB0aGlzIHdheSBiZWNhdXNlOgotICAgICAgICAvLyAoYSkgV2Ug
ZG9uJ3QgbmVlZCB0aGUgUUJydXNoIGFic3RyYWN0aW9uIC0gd2UgYWx3YXlzIGVuZCB1cCB1c2lu
ZyBRR3JhcGhpY3NJdGVtOjpwYWludAotICAgICAgICAvLyAgICAgZnJvbSB0aGUgbWFzayBsYXll
ci4KLSAgICAgICAgLy8gKGIpIFFHcmFwaGljc09wYWNpdHlFZmZlY3QgZGV0YWNoZXMgdGhlIHBp
eG1hcCwgd2hpY2ggaXMgaW5lZmZpY2llbnQgb24gT3BlbkdMLgotICAgICAgICBjb25zdCBRU2l6
ZSBtYXNrU2l6ZSA9IHNvdXJjZUJvdW5kaW5nUmVjdCgpLnRvQWxpZ25lZFJlY3QoKS5zaXplKCk7
Ci0gICAgICAgIGlmICghbWFza1NpemUuaXNWYWxpZCgpIHx8IG1hc2tTaXplLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgZHJhd1NvdXJjZShwYWludGVyKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBRUGl4bWFwIG1hc2tQaXhtYXAobWFza1NpemUpOwotCi0gICAg
ICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyBzbyB0aGUgcGl4bWFwIHdvdWxkIGhhdmUgaGFzQWxw
aGEoKS4KLSAgICAgICAgbWFza1BpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAg
IFFQYWludGVyIG1hc2tQYWludGVyKCZtYXNrUGl4bWFwKTsKLSAgICAgICAgUVN0eWxlT3B0aW9u
R3JhcGhpY3NJdGVtIG9wdGlvbjsKLSAgICAgICAgb3B0aW9uLmV4cG9zZWRSZWN0ID0gb3B0aW9u
LnJlY3QgPSBtYXNrUGl4bWFwLnJlY3QoKTsKLSAgICAgICAgbWFza1BhaW50ZXIuc2V0UmVuZGVy
SGludHMocGFpbnRlci0+cmVuZGVySGludHMoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fbWFza0xheWVy
LT5wYWludCgmbWFza1BhaW50ZXIsICZvcHRpb24sIDApOwotICAgICAgICBtYXNrUGFpbnRlci5l
bmQoKTsKLQotICAgICAgICBRUG9pbnQgb2Zmc2V0OwotICAgICAgICBRUGl4bWFwIHNyY1BpeG1h
cCA9IHNvdXJjZVBpeG1hcChRdDo6TG9naWNhbENvb3JkaW5hdGVzLCAmb2Zmc2V0LCBRR3JhcGhp
Y3NFZmZlY3Q6Ok5vUGFkKTsKLQotICAgICAgICAvLyBXZSBoYXZlIHRvIHVzZSBhbm90aGVyIGlu
dGVybWVkaWF0ZSBwaXhtYXAsIHRvIG1ha2Ugc3VyZSB0aGUgbWFzayBhcHBsaWVzIG9ubHkgdG8g
dGhpcyBpdGVtCi0gICAgICAgIC8vIGFuZCBkb2Vzbid0IG1vZGlmeSBwaXhlbHMgYWxyZWFkeSBw
YWludGVkIGludG8gdGhpcyBwYWludC1kZXZpY2UuCi0gICAgICAgIFFQaXhtYXAgcGl4bWFwKHNy
Y1BpeG1hcC5zaXplKCkpOwotICAgICAgICBwaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwot
Ci0gICAgICAgIGlmIChwaXhtYXAuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm47CisvLyBS
ZWZsZWN0aW9uRWZmZWN0UXQgaXMgdGhlIFFHcmFwaGljc0VmZmVjdCBpbXBsZW1lbnRhdGlvbiBv
ZiBDU1MgLXdlYmtpdC1yZWZsZWN0aW9uLgorY2xhc3MgUmVmbGVjdGlvbkVmZmVjdFF0IDogcHVi
bGljIFFHcmFwaGljc0VmZmVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBSZWZsZWN0
aW9uRWZmZWN0UXQoUU9iamVjdCogcGFyZW50LCBHcmFwaGljc0xheWVyKiByZXBsaWNhTGF5ZXIs
IEdyYXBoaWNzTGF5ZXIqIHJlcGxpY2F0ZWRMYXllcik7CiAKLSAgICAgICAgUVBhaW50ZXIgcGl4
bWFwUGFpbnRlcigmcGl4bWFwKTsKKyAgICB2b2lkIHJlbmRlck1hc2soR3JhcGhpY3NMYXllcios
IFFQaXhtYXAmLCBjb25zdCBRUmVjdEYmIGJvdW5kaW5nUmVjdCk7CisgICAgdm9pZCBzZXRPcGFj
aXR5KHFyZWFsIG9wYWNpdHkpOwogCi0gICAgICAgIHBpeG1hcFBhaW50ZXIuc2V0UmVuZGVySGlu
dHMocGFpbnRlci0+cmVuZGVySGludHMoKSk7Ci0gICAgICAgIHBpeG1hcFBhaW50ZXIuc2V0Q29t
cG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKKyAgICAvLyBS
ZWltcC4gZnJvbSBRR3JhcGhpY3NFZmZlY3QKKyAgICB2b2lkIHNvdXJjZUNoYW5nZWQoQ2hhbmdl
RmxhZ3MpOworICAgIHZvaWQgZHJhdyhRUGFpbnRlciopOworICAgIHZvaWQgdXBkYXRlR2VvbWV0
cnkoKTsKKyAgICBRUmVjdEYgYm91bmRpbmdSZWN0Rm9yKGNvbnN0IFFSZWN0RiYgc291cmNlUmVj
dCkgY29uc3Q7CiAKLSAgICAgICAgLy8gV2UgdXNlIGRyYXdQaXhtYXAgcmF0aGVyIHRoYW4gZGV0
YWNoaW5nLCBiZWNhdXNlIGl0J3MgbW9yZSBlZmZpY2llbnQgb24gT3BlbkdMLgotICAgICAgICBw
aXhtYXBQYWludGVyLmRyYXdQaXhtYXAoMCwgMCwgc3JjUGl4bWFwKTsKLSAgICAgICAgcGl4bWFw
UGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0
aW5hdGlvbkluKTsKLSAgICAgICAgcGl4bWFwUGFpbnRlci5kcmF3UGl4bWFwKDAsIDAsIG1hc2tQ
aXhtYXApOworICAgIEdyYXBoaWNzTGF5ZXIqIG1fcmVwbGljYUxheWVyOworICAgIEdyYXBoaWNz
TGF5ZXIqIG1fcmVwbGljYXRlZExheWVyOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fY29t
cHV0ZWRUcmFuc2Zvcm07CisgICAgcXJlYWwgbV9vcGFjaXR5OworIH07CiAKLSAgICAgICAgcGl4
bWFwUGFpbnRlci5lbmQoKTsKLSAgICAgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChvZmZzZXQsIHBp
eG1hcCk7Ci0gICAgfQotCi0gICAgUUdyYXBoaWNzSXRlbSogbV9tYXNrTGF5ZXI7Ci19OwogI2Vu
ZGlmIC8vIFFUX05PX0dSQVBISUNTRUZGRUNUCiAKIGNsYXNzIEdyYXBoaWNzTGF5ZXJRdEltcGwg
OiBwdWJsaWMgUUdyYXBoaWNzT2JqZWN0IHsKQEAgLTEzOCwxMyArMTEwLDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAxOCksCiAgICAgICAg
IEJhY2tncm91bmRDb2xvckNoYW5nZSA9ICAgICAoMUwgPDwgMTkpLAogCi0gICAgICAgIERpc3Ry
aWJ1dGVzT3BhY2l0eUNoYW5nZSA9ICAoMUwgPDwgMjApCisgICAgICAgIERpc3RyaWJ1dGVzT3Bh
Y2l0eUNoYW5nZSA9ICAoMUwgPDwgMjApLAorICAgICAgICBSZXBsaWNhQ2hhbmdlICAgICAgICAg
ICAgPSAgKDFMIDw8IDIxKQogICAgIH07CiAKICAgICAvLyBUaGUgY29tcG9zaXRvciBsZXRzIHVz
IHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2UgdHJ5IHRvIGRvIHNvLgogICAg
IGVudW0gU3RhdGljQ29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5cGUsIFBpeG1hcENvbnRlbnRU
eXBlLCBDb2xvckNvbnRlbnRUeXBlLCBNZWRpYUNvbnRlbnRUeXBlLCBDYW52YXMzRENvbnRlbnRU
eXBlfTsKIAogICAgIGNvbnN0IEdyYXBoaWNzTGF5ZXJRdEltcGwqIHJvb3RMYXllcigpIGNvbnN0
OworICAgIGJvb2wgaGFzUmVwbGljYXRlZEFuY2VzdG9yKCkgY29uc3Q7CiAKICAgICBHcmFwaGlj
c0xheWVyUXRJbXBsKEdyYXBoaWNzTGF5ZXJRdCogbmV3TGF5ZXIpOwogICAgIHZpcnR1YWwgfkdy
YXBoaWNzTGF5ZXJRdEltcGwoKTsKQEAgLTE5NSw2ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBtX29wYWNpdHlBbmltYXRpb25SdW5uaW5nOwogI2lmbmRlZiBRVF9OT19HUkFQSElDU0VGRkVD
VAogICAgIFFXZWFrUG9pbnRlcjxNYXNrRWZmZWN0UXQ+IG1fbWFza0VmZmVjdDsKKyAgICBRV2Vh
a1BvaW50ZXI8UmVmbGVjdGlvbkVmZmVjdFF0PiBtX3JlZmxlY3Rpb25FZmZlY3Q7CiAjZW5kaWYK
IAogICAgIHN0cnVjdCBDb250ZW50RGF0YSB7CkBAIC00NDAsNiArNDE1LDEyIEBAIHZvaWQgR3Jh
cGhpY3NMYXllclF0SW1wbDo6dXBkYXRlVHJhbnNmb3JtKCkKIAogICAgIHNldFRyYW5zZm9ybSh0
cmFuc2Zvcm0yRCk7CiAKKyAgICAvLyBGSVhNRTogZmluZCB0aGUgY29ycmVjdCBib3VuZGluZyBy
ZWN0IGZvciB0aGUgZWZmZWN0IGluc3RlYWQgb2YgZm9yY2luZyBhIHNjZW5lIHVwZGF0ZS4KKyAg
ICAvLyBUaGF0J3MgaXMgcHJldHR5IHRyaWNreSBzbyBmb3Igbm93IHdlIHN0YXkgd2l0aCB0aGUg
aGFjay4KKyAgICBpZiAoaGFzUmVwbGljYXRlZEFuY2VzdG9yKCkpCisgICAgICAgIGlmIChzY2Vu
ZSgpKQorICAgICAgICAgICAgc2NlbmUoKS0+dXBkYXRlKCk7CisKICAgICBjb25zdCBRTGlzdDxR
R3JhcGhpY3NJdGVtKj4gY2hpbGRyZW4gPSBjaGlsZEl0ZW1zKCk7CiAgICAgUUxpc3Q8UUdyYXBo
aWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdDsKICAgICBmb3IgKGl0ID0gY2hpbGRyZW4uYmVn
aW4oKTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7ICsraXQpCkBAIC00NTMsNiArNDM0LDE3IEBAIHZv
aWQgR3JhcGhpY3NMYXllclF0SW1wbDo6c2V0QmFzZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgYmFzZVRyYW5zCiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiB9CiAKK2Jvb2wg
R3JhcGhpY3NMYXllclF0SW1wbDo6aGFzUmVwbGljYXRlZEFuY2VzdG9yKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9sYXllci0+aXNSZXBsaWNhdGVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChtX2xheWVyLT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHRvR3JhcGhpY3NMYXllclF0
SW1wbChtX2xheWVyLT5wYXJlbnQoKS0+cGxhdGZvcm1MYXllcigpKS0+aGFzUmVwbGljYXRlZEFu
Y2VzdG9yKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKKwogUVBhaW50ZXJQYXRoIEdyYXBo
aWNzTGF5ZXJRdEltcGw6Om9wYXF1ZUFyZWEoKSBjb25zdAogewogICAgIFFQYWludGVyUGF0aCBw
YWludGVyUGF0aDsKQEAgLTU3MCwyNSArNTYyLDUwIEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1w
bDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlLCBib29sIGZvcmNlVXBkYXRlVHJhbnNmb3Jt
CiAgICAgICAgIH0KICAgICB9CiAKKyNpZm5kZWYgUVRfTk9fR1JBUEhJQ1NFRkZFQ1QKICAgICBp
ZiAobV9jaGFuZ2VNYXNrICYgTWFza0xheWVyQ2hhbmdlKSB7CiAgICAgICAgIC8vIFdlIGNhbid0
IHBhaW50IGhlcmUsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGUgbWFzayBsYXllciBpdHNl
bGYgaXMgcmVhZHkuLi4gd2UnbGwgaGF2ZQogICAgICAgICAvLyB0byB3YWl0IHRpbGwgdGhpcyBs
YXllciB0cmllcyB0byBwYWludC4KICAgICAgICAgc2V0RmxhZyhJdGVtQ2xpcHNDaGlsZHJlblRv
U2hhcGUsIG1fbGF5ZXItPm1hc2tMYXllcigpIHx8IG1fbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSk7
Ci0jaWZuZGVmIFFUX05PX0dSQVBISUNTRUZGRUNUCi0gICAgICAgIHNldEdyYXBoaWNzRWZmZWN0
KDApOwotICAgICAgICBpZiAobV9sYXllci0+bWFza0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlm
IChHcmFwaGljc0xheWVyUXRJbXBsKiBtYXNrID0gdG9HcmFwaGljc0xheWVyUXRJbXBsKG1fbGF5
ZXItPm1hc2tMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgbWFz
ay0+bV9tYXNrRWZmZWN0ID0gbmV3IE1hc2tFZmZlY3RRdCh0aGlzLCBtYXNrKTsKLSAgICAgICAg
ICAgICAgICBzZXRHcmFwaGljc0VmZmVjdChtYXNrLT5tX21hc2tFZmZlY3QuZGF0YSgpKTsKKyAg
ICAgICAgaWYgKG1fbGF5ZXItPmlzUmVwbGljYXRlZCgpKSB7CisgICAgICAgICAgICAvLyB0aGUg
cmVmbGVjdGlvbiBlZmZlY3QgaGFzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG1hc2tzLgorICAgICAg
ICAgICAgaWYgKGdyYXBoaWNzRWZmZWN0KCkpCisgICAgICAgICAgICAgICAgZ3JhcGhpY3NFZmZl
Y3QoKS0+dXBkYXRlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocW9iamVj
dF9jYXN0PE1hc2tFZmZlY3RRdCo+KGdyYXBoaWNzRWZmZWN0KCkpKQorICAgICAgICAgICAgICAg
IHNldEdyYXBoaWNzRWZmZWN0KDApOworICAgICAgICAgICAgaWYgKG1fbGF5ZXItPm1hc2tMYXll
cigpKSB7CisgICAgICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIG1hc2sgPSB0
b0dyYXBoaWNzTGF5ZXJRdEltcGwobV9sYXllci0+bWFza0xheWVyKCktPnBsYXRmb3JtTGF5ZXIo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWFzay0+bV9tYXNrRWZmZWN0ID0gbmV3IE1hc2tF
ZmZlY3RRdCh0aGlzLCBtYXNrKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0R3JhcGhpY3NFZmZl
Y3QobWFzay0+bV9tYXNrRWZmZWN0LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAKKyAgICBpZiAobV9jaGFuZ2VNYXNr
ICYgUmVwbGljYUNoYW5nZSkgeworICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBjbGVhciBhIHJl
cGxpY2EgZWZmZWN0LCBub3QgYSBtYXNrIGVmZmVjdC4KKyAgICAgICAgaWYgKHFvYmplY3RfY2Fz
dDxSZWZsZWN0aW9uRWZmZWN0UXQqPihncmFwaGljc0VmZmVjdCgpKSkKKyAgICAgICAgICAgIHNl
dEdyYXBoaWNzRWZmZWN0KDApOworICAgICAgICBpZiAobV9sYXllci0+cmVwbGljYUxheWVyKCkp
IHsKKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXIqIHJlcGxpY2FMYXllciA9IG1fbGF5ZXItPnJl
cGxpY2FMYXllcigpOworICAgICAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIHJlcGxp
Y2FJbXBsID0gdG9HcmFwaGljc0xheWVyUXRJbXBsKHJlcGxpY2FMYXllci0+cGxhdGZvcm1MYXll
cigpKSkgeworICAgICAgICAgICAgICAgIHJlcGxpY2FJbXBsLT5tX3JlZmxlY3Rpb25FZmZlY3Qg
PSBuZXcgUmVmbGVjdGlvbkVmZmVjdFF0KHRoaXMsIHJlcGxpY2FMYXllciwgbV9sYXllcik7Cisg
ICAgICAgICAgICAgICAgc2V0R3JhcGhpY3NFZmZlY3QocmVwbGljYUltcGwtPm1fcmVmbGVjdGlv
bkVmZmVjdC5kYXRhKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHVwZGF0
ZSgpOworICAgIH0KKyNlbmRpZgorCisKICAgICBpZiAobV9jaGFuZ2VNYXNrICYgU2l6ZUNoYW5n
ZSkgewogICAgICAgICBpZiAobV9sYXllci0+c2l6ZSgpICE9IG1fc3RhdGUuc2l6ZSkgewogICAg
ICAgICAgICAgcHJlcGFyZUdlb21ldHJ5Q2hhbmdlKCk7CiAgICAgICAgICAgICBtX3NpemUgPSBR
U2l6ZUYobV9sYXllci0+c2l6ZSgpLndpZHRoKCksIG1fbGF5ZXItPnNpemUoKS5oZWlnaHQoKSk7
CisgICAgICAgICAgICBpZiAobV9sYXllci0+cmVwbGljYUxheWVyKCkpCisgICAgICAgICAgICAg
ICAgaWYgKEdyYXBoaWNzTGF5ZXJRdEltcGwqIHJlcGxpY2EgPSB0b0dyYXBoaWNzTGF5ZXJRdElt
cGwobV9sYXllci0+cmVwbGljYUxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSkpCisgICAgICAgICAg
ICAgICAgICAgIHJlcGxpY2EtPm1fcmVmbGVjdGlvbkVmZmVjdC5kYXRhKCktPnVwZGF0ZUdlb21l
dHJ5KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY0OCw4ICs2NjUsMTcgQEAgdm9pZCBHcmFw
aGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUsIGJvb2wgZm9yY2VV
cGRhdGVUcmFuc2Zvcm0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgobV9jaGFuZ2VNYXNr
ICYgT3BhY2l0eUNoYW5nZSkgJiYgbV9zdGF0ZS5vcGFjaXR5ICE9IG1fbGF5ZXItPm9wYWNpdHko
KSAmJiAhbV9vcGFjaXR5QW5pbWF0aW9uUnVubmluZykKLSAgICAgICAgc2V0T3BhY2l0eShtX2xh
eWVyLT5vcGFjaXR5KCkpOworICAgIGlmICgobV9jaGFuZ2VNYXNrICYgKE9wYWNpdHlDaGFuZ2Ug
fCBSZXBsaWNhQ2hhbmdlKSAmJiBtX3N0YXRlLm9wYWNpdHkgIT0gbV9sYXllci0+b3BhY2l0eSgp
ICYmICFtX29wYWNpdHlBbmltYXRpb25SdW5uaW5nKSkgeworI2lmbmRlZiBRVF9OT19HUkFQSElD
U0VGRkVDVAorICAgICAgICBpZiAobV9sYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAg
ICAgIEdyYXBoaWNzTGF5ZXJRdEltcGwqIHJlcGxpY2EgPSB0b0dyYXBoaWNzTGF5ZXJRdEltcGwo
bV9sYXllci0+cmVwbGljYUxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAgICAgICAv
LyBMYXllciBvcGFjaXR5IGFwcGxpZXMgYWZ0ZXIgcmVmbGVjdGlvbiwgc28gd2UgaGF2ZSB0byBs
ZXQgdGhlIFJlZmxlY3Rpb25FZmZlY3QgaGFuZGxlIHRoZSBvcGFjaXR5LgorICAgICAgICAgICAg
cmVwbGljYS0+bV9yZWZsZWN0aW9uRWZmZWN0LmRhdGEoKS0+c2V0T3BhY2l0eShtX2xheWVyLT5v
cGFjaXR5KCkpOworICAgICAgICAgICAgc2V0T3BhY2l0eSgxKTsKKyAgICAgICAgfSBlbHNlCisj
ZW5kaWYKKyAgICAgICAgICAgIHNldE9wYWNpdHkobV9sYXllci0+b3BhY2l0eSgpKTsKKyAgICB9
CiAKICAgICBpZiAobV9jaGFuZ2VNYXNrICYgQ29udGVudHNSZWN0Q2hhbmdlKSB7CiAgICAgICAg
IGNvbnN0IFFSZWN0IHJlY3QobV9sYXllci0+Y29udGVudHNSZWN0KCkpOwpAQCAtNjcwLDcgKzY5
Niw5IEBAIHZvaWQgR3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJz
aXZlLCBib29sIGZvcmNlVXBkYXRlVHJhbnNmb3JtCiAjaWZuZGVmIFFUX05PX0dSQVBISUNTRUZG
RUNUCiAgICAgaWYgKG1fbWFza0VmZmVjdCkKICAgICAgICAgbV9tYXNrRWZmZWN0LmRhdGEoKS0+
dXBkYXRlKCk7Ci0gICAgZWxzZSBpZiAobV9jaGFuZ2VNYXNrICYgRGlzcGxheUNoYW5nZSkgewor
ICAgIGVsc2UKKyNlbmRpZgorICAgIGlmIChtX2NoYW5nZU1hc2sgJiBEaXNwbGF5Q2hhbmdlKSB7
CiAgICAgICAgIC8vIFJlY2FjaGUgbm93OiBhbGwgdGhlIGNvbnRlbnQgaXMgcmVhZHkgYW5kIHdl
IGRvbid0IHdhbnQgdG8gd2FpdCB1bnRpbCB0aGUgcGFpbnQgZXZlbnQuCiAgICAgICAgIC8vIFdl
IG9ubHkgbmVlZCB0byBkbyB0aGlzIGZvciBIVE1MIGNvbnRlbnQsIHRoZXJlJ3Mgbm8gcG9pbnQg
aW4gY2FjaGluZyBkaXJlY3RseSBjb21wb3NpdGVkCiAgICAgICAgIC8vIGNvbnRlbnQgbGlrZSBp
bWFnZXMgb3Igc29saWQgcmVjdGFuZ2xlcy4KQEAgLTY3OSw3ICs3MDcsNiBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJRdEltcGw6OmZsdXNoQ2hhbmdlcyhib29sIHJlY3Vyc2l2ZSwgYm9vbCBmb3JjZVVw
ZGF0ZVRyYW5zZm9ybQogICAgICAgICB1cGRhdGUobV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1Vw
ZGF0ZS5ib3VuZGluZ1JlY3QoKSk7CiAgICAgICAgIG1fcGVuZGluZ0NvbnRlbnQucmVnaW9uVG9V
cGRhdGUgPSBRUmVnaW9uKCk7CiAgICAgfQotI2VuZGlmCiAKICAgICBpZiAoKG1fY2hhbmdlTWFz
ayAmIEJhY2tncm91bmRDb2xvckNoYW5nZSkKICAgICAgICAgJiYgKG1fcGVuZGluZ0NvbnRlbnQu
YmFja2dyb3VuZENvbG9yICE9IG1fY3VycmVudENvbnRlbnQuYmFja2dyb3VuZENvbG9yKSkKQEAg
LTcxNiw4ICs3NDMsMTEgQEAgYWZ0ZXJMYXllckNoYW5nZXM6CiAgICAgICAgIHJldHVybjsKIAog
ICAgIFFMaXN0PFFHcmFwaGljc0l0ZW0qPiBjaGlsZHJlbiA9IGNoaWxkSXRlbXMoKTsKLSAgICBp
ZiAobV9zdGF0ZS5tYXNrTGF5ZXIpCi0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX3N0YXRlLm1h
c2tMYXllci0+cGxhdGZvcm1MYXllcigpKTsKKyAgICBpZiAobV9sYXllci0+bWFza0xheWVyKCkp
CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChtX2xheWVyLT5tYXNrTGF5ZXIoKS0+cGxhdGZvcm1M
YXllcigpKTsKKworICAgIGlmIChtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgY2hp
bGRyZW4uYXBwZW5kKG1fbGF5ZXItPnJlcGxpY2FMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkpOwog
CiAgICAgUUxpc3Q8UUdyYXBoaWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdDsKICAgICBmb3Ig
KGl0ID0gY2hpbGRyZW4uYmVnaW4oKTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7ICsraXQpIHsKQEAg
LTEwOTIsNiArMTEyMiwxNSBAQCBmbG9hdCBHcmFwaGljc0xheWVyUXQ6OmFjY3VtdWxhdGVkT3Bh
Y2l0eSgpIGNvbnN0CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQorICovCit2b2lk
IEdyYXBoaWNzTGF5ZXJRdDo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5
ZXIpCit7CisgICAgbV9pbXBsLT5ub3RpZnlDaGFuZ2UoR3JhcGhpY3NMYXllclF0SW1wbDo6UmVw
bGljYUNoYW5nZSk7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5
ZXIpOworfQorCisKKy8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KIHZvaWQgR3JhcGhp
Y3NMYXllclF0OjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpCiB7CkBAIC0xMTEzLDYgKzExNTIsMTU5
IEBAIFBsYXRmb3JtTGF5ZXIqIEdyYXBoaWNzTGF5ZXJRdDo6cGxhdGZvcm1MYXllcigpIGNvbnN0
CiAgICAgcmV0dXJuIG1faW1wbC5nZXQoKTsKIH0KIAorI2lmbmRlZiBRVF9OT19HUkFQSElDU0VG
RkVDVAorTWFza0VmZmVjdFF0OjpNYXNrRWZmZWN0UXQoUU9iamVjdCogcGFyZW50LCBRR3JhcGhp
Y3NJdGVtKiBtYXNrTGF5ZXIpCisgICAgOiBRR3JhcGhpY3NFZmZlY3QocGFyZW50KQorICAgICwg
bV9tYXNrTGF5ZXIobWFza0xheWVyKQoreworfQorCit2b2lkIE1hc2tFZmZlY3RRdDo6ZHJhdyhR
UGFpbnRlciogcGFpbnRlcikKK3sKKyAgICAvLyBUaGlzIGlzIGEgbW9kaWZpZWQgY2xvbmUgb2Yg
UUdyYXBoaWNzT3BhY2l0eUVmZmVjdC4KKyAgICAvLyBJdCdzIG1vcmUgZWZmaWNpZW50IHRvIGRv
IGl0IHRoaXMgd2F5IGJlY2F1c2U6CisgICAgLy8gKGEpIFdlIGRvbid0IG5lZWQgdGhlIFFCcnVz
aCBhYnN0cmFjdGlvbiAtIHdlIGFsd2F5cyBlbmQgdXAgdXNpbmcgUUdyYXBoaWNzSXRlbTo6cGFp
bnQKKyAgICAvLyAgICAgZnJvbSB0aGUgbWFzayBsYXllci4KKyAgICAvLyAoYikgUUdyYXBoaWNz
T3BhY2l0eUVmZmVjdCBkZXRhY2hlcyB0aGUgcGl4bWFwLCB3aGljaCBpcyBpbmVmZmljaWVudCBv
biBPcGVuR0wuCisgICAgY29uc3QgUVNpemUgbWFza1NpemUgPSBzb3VyY2VCb3VuZGluZ1JlY3Qo
KS50b0FsaWduZWRSZWN0KCkuc2l6ZSgpOworICAgIGlmICghbWFza1NpemUuaXNWYWxpZCgpIHx8
IG1hc2tTaXplLmlzRW1wdHkoKSkgeworICAgICAgICBkcmF3U291cmNlKHBhaW50ZXIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFFQaXhtYXAgbWFza1BpeG1hcChtYXNrU2l6ZSk7CisK
KyAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgc28gdGhlIHBpeG1hcCB3b3VsZCBoYXZlIGhhc0Fs
cGhhKCkuCisgICAgbWFza1BpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgUVBhaW50
ZXIgbWFza1BhaW50ZXIoJm1hc2tQaXhtYXApOworICAgIFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRl
bSBvcHRpb247CisgICAgb3B0aW9uLmV4cG9zZWRSZWN0ID0gb3B0aW9uLnJlY3QgPSBtYXNrUGl4
bWFwLnJlY3QoKTsKKyAgICBtYXNrUGFpbnRlci5zZXRSZW5kZXJIaW50cyhwYWludGVyLT5yZW5k
ZXJIaW50cygpLCB0cnVlKTsKKyAgICBtX21hc2tMYXllci0+cGFpbnQoJm1hc2tQYWludGVyLCAm
b3B0aW9uLCAwKTsKKyAgICBtYXNrUGFpbnRlci5lbmQoKTsKKworICAgIFFQb2ludCBvZmZzZXQ7
CisgICAgUVBpeG1hcCBzcmNQaXhtYXAgPSBzb3VyY2VQaXhtYXAoUXQ6OkxvZ2ljYWxDb29yZGlu
YXRlcywgJm9mZnNldCwgUUdyYXBoaWNzRWZmZWN0OjpOb1BhZCk7CisKKyAgICAvLyBXZSBoYXZl
IHRvIHVzZSBhbm90aGVyIGludGVybWVkaWF0ZSBwaXhtYXAsIHRvIG1ha2Ugc3VyZSB0aGUgbWFz
ayBhcHBsaWVzIG9ubHkgdG8gdGhpcyBpdGVtCisgICAgLy8gYW5kIGRvZXNuJ3QgbW9kaWZ5IHBp
eGVscyBhbHJlYWR5IHBhaW50ZWQgaW50byB0aGlzIHBhaW50LWRldmljZS4KKyAgICBRUGl4bWFw
IHBpeG1hcChzcmNQaXhtYXAuc2l6ZSgpKTsKKyAgICBwaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJl
bnQpOworCisgICAgaWYgKHBpeG1hcC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UVBhaW50ZXIgcGl4bWFwUGFpbnRlcigmcGl4bWFwKTsKKworICAgIHBpeG1hcFBhaW50ZXIuc2V0
UmVuZGVySGludHMocGFpbnRlci0+cmVuZGVySGludHMoKSk7CisgICAgcGl4bWFwUGFpbnRlci5z
ZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOworCisg
ICAgLy8gV2UgdXNlIGRyYXdQaXhtYXAgcmF0aGVyIHRoYW4gZGV0YWNoaW5nLCBiZWNhdXNlIGl0
J3MgbW9yZSBlZmZpY2llbnQgb24gT3BlbkdMLgorICAgIHBpeG1hcFBhaW50ZXIuZHJhd1BpeG1h
cCgwLCAwLCBzcmNQaXhtYXApOworICAgIHBpeG1hcFBhaW50ZXIuc2V0Q29tcG9zaXRpb25Nb2Rl
KFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25Jbik7CisgICAgcGl4bWFwUGFp
bnRlci5kcmF3UGl4bWFwKDAsIDAsIG1hc2tQaXhtYXApOworCisgICAgcGl4bWFwUGFpbnRlci5l
bmQoKTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKG9mZnNldCwgcGl4bWFwKTsKK30KKworUmVm
bGVjdGlvbkVmZmVjdFF0OjpSZWZsZWN0aW9uRWZmZWN0UXQoUU9iamVjdCogcGFyZW50LCBHcmFw
aGljc0xheWVyKiByZXBsaWNhTGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHJlcGxpY2F0ZWRMYXllcikK
KyAgICAgICAgOiBRR3JhcGhpY3NFZmZlY3QocGFyZW50KQorICAgICAgICAsIG1fcmVwbGljYUxh
eWVyKHJlcGxpY2FMYXllcikKKyAgICAgICAgLCBtX3JlcGxpY2F0ZWRMYXllcihyZXBsaWNhdGVk
TGF5ZXIpCisgICAgICAgICwgbV9vcGFjaXR5KDEpCit7Cit9CisKK1FSZWN0RiBSZWZsZWN0aW9u
RWZmZWN0UXQ6OmJvdW5kaW5nUmVjdEZvcihjb25zdCBRUmVjdEYmIHNvdXJjZVJlY3QpIGNvbnN0
Cit7CisgICAgY29uc3QgUVJlY3RGIHJlY3QgPSBzb3VyY2VSZWN0IHwgbV9jb21wdXRlZFRyYW5z
Zm9ybS5tYXBSZWN0KHNvdXJjZVJlY3QpOworICAgIHJldHVybiByZWN0OworfQorCit2b2lkIFJl
ZmxlY3Rpb25FZmZlY3RRdDo6cmVuZGVyTWFzayhHcmFwaGljc0xheWVyKiBsYXllciwgUVBpeG1h
cCYgcGl4bWFwLCBjb25zdCBRUmVjdEYmIGJvdW5kaW5nUmVjdCkKK3sKKyAgICBpZiAoR3JhcGhp
Y3NMYXllciogbWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICBpZiAoUUdy
YXBoaWNzSXRlbSogbWFza0xheWVySW1wbCA9IG1hc2tMYXllci0+bmF0aXZlTGF5ZXIoKSkgewor
ICAgICAgICAgICAgUVBhaW50ZXIgbWFza1BhaW50ZXIoJnBpeG1hcCk7CisgICAgICAgICAgICBt
YXNrUGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9E
ZXN0aW5hdGlvbkluKTsKKyAgICAgICAgICAgIFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbSBvcHRp
b247CisgICAgICAgICAgICBvcHRpb24uZXhwb3NlZFJlY3QgPSBvcHRpb24ucmVjdCA9IFFSZWN0
KDAsIDAsIGJvdW5kaW5nUmVjdC53aWR0aCgpLCBib3VuZGluZ1JlY3QuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgbWFza0xheWVySW1wbC0+cGFpbnQoJm1hc2tQYWludGVyLCAmb3B0aW9uKTsKKyAg
ICAgICAgfQorfQorCit2b2lkIFJlZmxlY3Rpb25FZmZlY3RRdDo6ZHJhdyhRUGFpbnRlciogcGFp
bnRlcikKK3sKKyAgICBpZiAoIW1fcmVwbGljYUxheWVyKSB7CisgICAgICAgIGRyYXdTb3VyY2Uo
cGFpbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgUVJlY3RGIGJvdW5k
aW5nUmVjdCA9IHNvdXJjZUJvdW5kaW5nUmVjdCgpOworICAgIFFQb2ludCBvZmZzZXQ7CisgICAg
Ly8gRklYTUU6IFRoaXMgd291bGQgbm90IGFsd2F5cyB3b3JrIGZvciBuZXN0ZWQgcmVmbGVjdGlv
bnMuIFNlZSBRVEJVRy0xMDc1NjsKKyAgICAvLyBoZW5jZSBMYXlvdXRUZXN0cy9jb21wb3NpdGlu
Zy9yZWZsZWN0aW9ucy9uZXN0ZWQtcmVmbGVjdGlvbi1hbmNob3ItcG9pbnQuaHRtbCBkb2Vzbid0
IHdvcmsuCisgICAgUVBpeG1hcCBvcmlnaW5hbCA9IHNvdXJjZVBpeG1hcChRdDo6TG9naWNhbENv
b3JkaW5hdGVzLCAmb2Zmc2V0LCBRR3JhcGhpY3NFZmZlY3Q6OlBhZFRvRWZmZWN0aXZlQm91bmRp
bmdSZWN0KTsKKworICAgIC8vIFdlIGhhdmUgdG8gcmVuZGVyIHRoZSBtYXNrIG9uIHRoZSBzb3Vy
Y2UgcGl4bWFwLCBiZWNhdXNlIGl0IHNob3VsZCBiZSByZWZsZWN0ZWQgYWxvbmcgd2l0aCB0aGUg
Y29udGVudHMuCisgICAgcmVuZGVyTWFzayhtX3JlcGxpY2F0ZWRMYXllciwgb3JpZ2luYWwsIGJv
dW5kaW5nUmVjdCk7CisgICAgUVBpeG1hcCByZXBsaWNhID0gb3JpZ2luYWw7CisKKyAgICAvLyBO
b3cgd2UgcmVuZGVyIHRoZSByZWZsZWN0aW9uLW1hc2suCisgICAgcmVuZGVyTWFzayhtX3JlcGxp
Y2FMYXllciwgcmVwbGljYSwgYm91bmRpbmdSZWN0KTsKKworICAgIC8vIFdlIG5lZWQgYW4gaW50
ZXJtZWRpYXRlIHBpeG1hcCB0byBoYW5kbGUgb3BhY2l0eSBjb3JyZWN0bHkgLSB0aGUgb3JpZ2lu
YWwKKyAgICAvLyBhbmQgdGhlIHJlZmxlY3Rpb24gaGF2ZSB0byBiZSBibGVuZGVkIGJlZm9yZSB0
aGUgb3BhY2l0eSBjb21lcyBpbnRvIHBsYXkuCisKKyAgICAvLyBGSVhNRTogd2UgY2FuIHByb2Jh
Ymx5IGRvIHdpdGggYSBtaW5pbWFsIHBpeG1hcCB0aGF0IGNhbiBob2xkIHRoZSBzb3VyY2UgYW5k
IHRoZSByZWZsZWN0aW9uLgorICAgIC8vIEJ1dCBmb3Igbm93IHdlIGp1c3QgdXNlIGEgcGl4bWFw
IHRoZSBzaXplIG9mIHRoZSB0YXJnZXQgZGV2aWNlLCBmb3Igc2ltcGxpY2l0eS4KKyAgICBRUGl4
bWFwIGludGVybWVkaWF0ZVBpeG1hcChwYWludGVyLT5kZXZpY2UoKS0+d2lkdGgoKSwgcGFpbnRl
ci0+ZGV2aWNlKCktPmhlaWdodCgpKTsKKyAgICBpbnRlcm1lZGlhdGVQaXhtYXAuZmlsbChRdDo6
dHJhbnNwYXJlbnQpOworICAgIFFQYWludGVyIGludGVybWVkaWF0ZVBhaW50ZXIoJmludGVybWVk
aWF0ZVBpeG1hcCk7CisgICAgaW50ZXJtZWRpYXRlUGFpbnRlci5zZXRUcmFuc2Zvcm0ocGFpbnRl
ci0+dHJhbnNmb3JtKCksIGZhbHNlKTsKKyAgICBpbnRlcm1lZGlhdGVQYWludGVyLmRyYXdQaXht
YXAob2Zmc2V0LCBvcmlnaW5hbCk7CisgICAgaW50ZXJtZWRpYXRlUGFpbnRlci5zZXRUcmFuc2Zv
cm0obV9jb21wdXRlZFRyYW5zZm9ybSwgdHJ1ZSk7CisKKyAgICAvLyBXZSBwYWludCB0aGUgcmVm
bGVjdGlvbiBiZWhpbmQgdGhlIG9yaWdpbi4KKyAgICBpbnRlcm1lZGlhdGVQYWludGVyLnNldENv
bXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uT3Zlcik7
CisgICAgaW50ZXJtZWRpYXRlUGFpbnRlci5kcmF3UGl4bWFwKG9mZnNldCwgcmVwbGljYSk7Cisg
ICAgaW50ZXJtZWRpYXRlUGFpbnRlci5lbmQoKTsKKyAgICBwYWludGVyLT5zYXZlKCk7CisKKyAg
ICAvLyBUaGUgZWZmZWN0IHdhcyBhbHJlYWR5IGRyYXduIHVzaW5nIHRoZSBwYWludGVyJ3MgdHJh
bnNmb3JtYXRpb24gbWF0cml4LgorICAgIHBhaW50ZXItPnJlc2V0VHJhbnNmb3JtKCk7CisgICAg
cGFpbnRlci0+c2V0T3BhY2l0eShtX29wYWNpdHkpOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAo
MCwgMCwgaW50ZXJtZWRpYXRlUGl4bWFwKTsKKyAgICBwYWludGVyLT5yZXN0b3JlKCk7Cit9CisK
K3ZvaWQgUmVmbGVjdGlvbkVmZmVjdFF0Ojp1cGRhdGVHZW9tZXRyeSgpCit7CisgICAgLy8gV2Ug
YmFrZSB0aGUgYW5jaG9yLCB0cmFuc2Zvcm1hdGlvbiBhbmQgcmVwbGljYXRlZCBsYXllciBwb3Np
dGlvbiBpbnRvIG1fY29tcHV0ZWRUcmFuc2Zvcm0uCisgICAgY29uc3QgcXJlYWwgYW5jaG9yWCA9
IG1fcmVwbGljYUxheWVyLT5hbmNob3JQb2ludCgpLngoKSAqIG1fcmVwbGljYUxheWVyLT5zaXpl
KCkud2lkdGgoKTsKKyAgICBjb25zdCBxcmVhbCBhbmNob3JZID0gbV9yZXBsaWNhTGF5ZXItPmFu
Y2hvclBvaW50KCkueSgpICogbV9yZXBsaWNhTGF5ZXItPnNpemUoKS5oZWlnaHQoKTsKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShh
bmNob3JYLCBhbmNob3JZKQorICAgICAgICAubXVsdExlZnQobV9yZXBsaWNhTGF5ZXItPnRyYW5z
Zm9ybSgpKQorICAgICAgICAudHJhbnNsYXRlKC1hbmNob3JYLCAtYW5jaG9yWSkKKyAgICAgICAg
LnRyYW5zbGF0ZShtX3JlcGxpY2FMYXllci0+cmVwbGljYXRlZExheWVyUG9zaXRpb24oKS54KCks
IG1fcmVwbGljYUxheWVyLT5yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpLnkoKSk7CisgICAgbV9j
b21wdXRlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICB1cGRhdGVCb3VuZGluZ1JlY3QoKTsK
K30KKwordm9pZCBSZWZsZWN0aW9uRWZmZWN0UXQ6OnNldE9wYWNpdHkocXJlYWwgb3BhY2l0eSkK
K3sKKyAgICAvLyBXZSBoYXZlIHRvIG1hbmFnZSBvcGFjaXR5IHNlcGFyYXRlbHkgZnJvbSBRR3Jh
cGhpY3NWaWV3LCBiZWNhdXNlIGluIHRoaXMgY2FzZQorICAgIC8vIHRoZSBvcGFjaXR5IGhhcyB0
byBiZSBhcHBsaWVkIGFmdGVyIHRoZSBlZmZlY3QuCisgICAgbV9vcGFjaXR5ID0gb3BhY2l0eTsK
KyAgICB1cGRhdGUoKTsKK30KKwordm9pZCBSZWZsZWN0aW9uRWZmZWN0UXQ6OnNvdXJjZUNoYW5n
ZWQoQ2hhbmdlRmxhZ3MpCit7CisgICAgdXBkYXRlR2VvbWV0cnkoKTsKK30KKyNlbmRpZiAvLyBR
VF9OT19HUkFQSElDU0VGRkVDVAorCiAvLyBOb3cgd2Ugc3RhcnQgZGVhbGluZyB3aXRoIFdlYkNv
cmUgYW5pbWF0aW9ucyB0cmFuc2xhdGVkIHRvIFF0IGFuaW1hdGlvbnMKIAogdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzTGF5ZXJRdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVy
UXQuaAppbmRleCA2ZGU1YTZlLi5mMTcyMjYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmgKQEAgLTYzLDYgKzYzLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCBiKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSZXBsaWNh
dGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7CiAjaWZuZGVmIFFUX05PX0FOSU1BVElPTgogICAg
IHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25z
dCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGtleWZy
YW1lc05hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5p
bWF0aW9uc0ZvclByb3BlcnR5KEFuaW1hdGVkUHJvcGVydHlJRCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57585</attachid>
            <date>2010-06-01 12:56:33 -0700</date>
            <delta_ts>2010-08-13 10:02:21 -0700</delta_ts>
            <desc>Had an extra line-break</desc>
            <filename>patch-35389-4.diff</filename>
            <type>text/plain</type>
            <size>20043</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZDhkYTY0MS4uMjE4NGIxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxMC0wNi0wMSAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gR3JhcGhpY3NMYXllcjogc3VwcG9ydCByZWZs
ZWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzUzODkKKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciByZWZsZWN0aW9ucyBpbiBHcmFwaGlj
c0xheWVyUXQsIGJhc2VkIG9uIHRoZSBzZXRSZXBsaWNhTGF5ZXIgQVBJLCB1c2luZyBRR3JhcGhp
Y3NFZmZlY3QuCisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBjb3BpZXMgdGhlIGltYWdlcyBh
bmQgYXBwbGllcyB0aGUgbWFza3MgYW5kIHRyYW5zZm9ybWF0aW9ucyBhY2NvcmRpbmcKKyAgICAg
ICAgdG8gdGhlIENTUyByZWZsZWN0aW9uIHNwZWMgYW5kIHRoZSB3ZWJraXQgbGF5b3V0IHRlc3Rz
LiBOb3RlIHRoYXQgc29tZSBvZiB0aGUgZnJpbmdlIGxheW91dC10ZXN0cyBkb24ndAorICAgICAg
ICB1cGRhdGUgY29ycmVjdGx5IGR1ZSB0byBhIFF0IGJ1ZywgYnV0IHRoZSBtYWpvciB1c2UgY2Fz
ZXMgZm9yIHJlZmxlY3Rpb25zIHdvcmsgcHJvcGVybHkuCisKKyAgICAgICAgVGhlIGltcGxlbWVu
dGF0aW9uIGlzIG9wdGltaXplZCBmb3IgdGhlIFF0IHJhc3RlciBlbmdpbmUsIGFuZCBjb3VsZCBi
ZSBmdXJ0aGVyIG9wdGltaXplZCBmb3IgT3BlbkdMLUVTLAorICAgICAgICBhcyBpdCB1c2VzIGlt
YWdlIGNvcGllcyB3aGljaCBhcmUgbm90IG9wdGltaXplZCB3aXRoIHRoZSBRdCBPcGVuR0wgcGFp
bnQgZW5naW5lLgorCisgICAgICAgIFRlc3RzIGluIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL3Jl
ZmxlY3Rpb25zIG5vdyB3b3JrCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0xheWVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclF0SW1wbDo6
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdEltcGw6OnVwZGF0ZVRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyUXRJbXBsOjpoYXNSZXBsaWNhdGVk
QW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclF0SW1wbDo6Zmx1c2hD
aGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdDo6c2V0UmVwbGljYXRl
ZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWFza0VmZmVjdFF0OjpNYXNrRWZmZWN0UXQp
OgorICAgICAgICAoV2ViQ29yZTo6TWFza0VmZmVjdFF0OjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlZmxlY3Rpb25FZmZlY3RRdDo6UmVmbGVjdGlvbkVmZmVjdFF0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZmxlY3Rpb25FZmZlY3RRdDo6Ym91bmRpbmdSZWN0Rm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZmxlY3Rpb25FZmZlY3RRdDo6cmVuZGVyTWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWZsZWN0aW9uRWZmZWN0UXQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6UmVmbGVjdGlv
bkVmZmVjdFF0Ojp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZWZsZWN0aW9u
RWZmZWN0UXQ6OnNldE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVmbGVjdGlvbkVmZmVj
dFF0Ojpzb3VyY2VDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0xheWVyUXQuaDoKKwogMjAxMC0wNi0wMSAgQWRhbSBMYW5nbGV5ICA8YWdsQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAppbmRleCAxY2MyMWI4Li41
NzhjMThkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
TGF5ZXJRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xh
eWVyUXQuY3BwCkBAIC00NCw2NCArNDQsMzYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lm
bmRlZiBRVF9OT19HUkFQSElDU0VGRkVDVAorLy8gTWFza0VmZmVjdFF0IGlzIHRoZSBRR3JhcGhp
Y3NFZmZlY3QgaW1wbGVtZW50YXRpb24gb2YgQ1NTIC13ZWJraXQtbWFzay4KIGNsYXNzIE1hc2tF
ZmZlY3RRdCA6IHB1YmxpYyBRR3JhcGhpY3NFZmZlY3QgeworICAgIFFfT0JKRUNUCiBwdWJsaWM6
Ci0gICAgTWFza0VmZmVjdFF0KFFPYmplY3QqIHBhcmVudCwgUUdyYXBoaWNzSXRlbSogbWFza0xh
eWVyKQotICAgICAgICA6IFFHcmFwaGljc0VmZmVjdChwYXJlbnQpCi0gICAgICAgICwgbV9tYXNr
TGF5ZXIobWFza0xheWVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGRyYXcoUVBhaW50ZXIq
IHBhaW50ZXIpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIGEgbW9kaWZpZWQgY2xvbmUgb2Yg
UUdyYXBoaWNzT3BhY2l0eUVmZmVjdC4KLSAgICAgICAgLy8gSXQncyBtb3JlIGVmZmljaWVudCB0
byBkbyBpdCB0aGlzIHdheSBiZWNhdXNlOgotICAgICAgICAvLyAoYSkgV2UgZG9uJ3QgbmVlZCB0
aGUgUUJydXNoIGFic3RyYWN0aW9uIC0gd2UgYWx3YXlzIGVuZCB1cCB1c2luZyBRR3JhcGhpY3NJ
dGVtOjpwYWludAotICAgICAgICAvLyAgICAgZnJvbSB0aGUgbWFzayBsYXllci4KLSAgICAgICAg
Ly8gKGIpIFFHcmFwaGljc09wYWNpdHlFZmZlY3QgZGV0YWNoZXMgdGhlIHBpeG1hcCwgd2hpY2gg
aXMgaW5lZmZpY2llbnQgb24gT3BlbkdMLgotICAgICAgICBjb25zdCBRU2l6ZSBtYXNrU2l6ZSA9
IHNvdXJjZUJvdW5kaW5nUmVjdCgpLnRvQWxpZ25lZFJlY3QoKS5zaXplKCk7Ci0gICAgICAgIGlm
ICghbWFza1NpemUuaXNWYWxpZCgpIHx8IG1hc2tTaXplLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgZHJhd1NvdXJjZShwYWludGVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBRUGl4bWFwIG1hc2tQaXhtYXAobWFza1NpemUpOwotCi0gICAgICAgIC8vIFdlIG5l
ZWQgdG8gZG8gdGhpcyBzbyB0aGUgcGl4bWFwIHdvdWxkIGhhdmUgaGFzQWxwaGEoKS4KLSAgICAg
ICAgbWFza1BpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIFFQYWludGVyIG1h
c2tQYWludGVyKCZtYXNrUGl4bWFwKTsKLSAgICAgICAgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVt
IG9wdGlvbjsKLSAgICAgICAgb3B0aW9uLmV4cG9zZWRSZWN0ID0gb3B0aW9uLnJlY3QgPSBtYXNr
UGl4bWFwLnJlY3QoKTsKLSAgICAgICAgbWFza1BhaW50ZXIuc2V0UmVuZGVySGludHMocGFpbnRl
ci0+cmVuZGVySGludHMoKSwgdHJ1ZSk7Ci0gICAgICAgIG1fbWFza0xheWVyLT5wYWludCgmbWFz
a1BhaW50ZXIsICZvcHRpb24sIDApOwotICAgICAgICBtYXNrUGFpbnRlci5lbmQoKTsKLQotICAg
ICAgICBRUG9pbnQgb2Zmc2V0OwotICAgICAgICBRUGl4bWFwIHNyY1BpeG1hcCA9IHNvdXJjZVBp
eG1hcChRdDo6TG9naWNhbENvb3JkaW5hdGVzLCAmb2Zmc2V0LCBRR3JhcGhpY3NFZmZlY3Q6Ok5v
UGFkKTsKLQotICAgICAgICAvLyBXZSBoYXZlIHRvIHVzZSBhbm90aGVyIGludGVybWVkaWF0ZSBw
aXhtYXAsIHRvIG1ha2Ugc3VyZSB0aGUgbWFzayBhcHBsaWVzIG9ubHkgdG8gdGhpcyBpdGVtCi0g
ICAgICAgIC8vIGFuZCBkb2Vzbid0IG1vZGlmeSBwaXhlbHMgYWxyZWFkeSBwYWludGVkIGludG8g
dGhpcyBwYWludC1kZXZpY2UuCi0gICAgICAgIFFQaXhtYXAgcGl4bWFwKHNyY1BpeG1hcC5zaXpl
KCkpOwotICAgICAgICBwaXhtYXAuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotCi0gICAgICAgIGlm
IChwaXhtYXAuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgTWFza0VmZmVjdFF0
KFFPYmplY3QqIHBhcmVudCwgUUdyYXBoaWNzSXRlbSogbWFza0xheWVyKTsKKyAgICB2b2lkIGRy
YXcoUVBhaW50ZXIqKTsKKyAgICBRR3JhcGhpY3NJdGVtKiBtX21hc2tMYXllcjsKK307CiAKLSAg
ICAgICAgUVBhaW50ZXIgcGl4bWFwUGFpbnRlcigmcGl4bWFwKTsKKy8vIFJlZmxlY3Rpb25FZmZl
Y3RRdCBpcyB0aGUgUUdyYXBoaWNzRWZmZWN0IGltcGxlbWVudGF0aW9uIG9mIENTUyAtd2Via2l0
LXJlZmxlY3Rpb24uCitjbGFzcyBSZWZsZWN0aW9uRWZmZWN0UXQgOiBwdWJsaWMgUUdyYXBoaWNz
RWZmZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFJlZmxlY3Rpb25FZmZlY3RRdChR
T2JqZWN0KiBwYXJlbnQsIEdyYXBoaWNzTGF5ZXIqIHJlcGxpY2FMYXllciwgR3JhcGhpY3NMYXll
ciogcmVwbGljYXRlZExheWVyKTsKIAotICAgICAgICBwaXhtYXBQYWludGVyLnNldFJlbmRlckhp
bnRzKHBhaW50ZXItPnJlbmRlckhpbnRzKCkpOwotICAgICAgICBwaXhtYXBQYWludGVyLnNldENv
bXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7CisgICAgdm9p
ZCByZW5kZXJNYXNrKEdyYXBoaWNzTGF5ZXIqLCBRUGl4bWFwJiwgY29uc3QgUVJlY3RGJiBib3Vu
ZGluZ1JlY3QpOworICAgIHZvaWQgc2V0T3BhY2l0eShxcmVhbCBvcGFjaXR5KTsKIAotICAgICAg
ICAvLyBXZSB1c2UgZHJhd1BpeG1hcCByYXRoZXIgdGhhbiBkZXRhY2hpbmcsIGJlY2F1c2UgaXQn
cyBtb3JlIGVmZmljaWVudCBvbiBPcGVuR0wuCi0gICAgICAgIHBpeG1hcFBhaW50ZXIuZHJhd1Bp
eG1hcCgwLCAwLCBzcmNQaXhtYXApOwotICAgICAgICBwaXhtYXBQYWludGVyLnNldENvbXBvc2l0
aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uSW4pOwotICAgICAg
ICBwaXhtYXBQYWludGVyLmRyYXdQaXhtYXAoMCwgMCwgbWFza1BpeG1hcCk7CisgICAgLy8gUmVp
bXAuIGZyb20gUUdyYXBoaWNzRWZmZWN0CisgICAgdm9pZCBzb3VyY2VDaGFuZ2VkKENoYW5nZUZs
YWdzKTsKKyAgICB2b2lkIGRyYXcoUVBhaW50ZXIqKTsKKyAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5
KCk7CisgICAgUVJlY3RGIGJvdW5kaW5nUmVjdEZvcihjb25zdCBRUmVjdEYmIHNvdXJjZVJlY3Qp
IGNvbnN0OwogCi0gICAgICAgIHBpeG1hcFBhaW50ZXIuZW5kKCk7Ci0gICAgICAgIHBhaW50ZXIt
PmRyYXdQaXhtYXAob2Zmc2V0LCBwaXhtYXApOwotICAgIH0KKyAgICBHcmFwaGljc0xheWVyKiBt
X3JlcGxpY2FMYXllcjsKKyAgICBHcmFwaGljc0xheWVyKiBtX3JlcGxpY2F0ZWRMYXllcjsKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2NvbXB1dGVkVHJhbnNmb3JtOworICAgIHFyZWFsIG1f
b3BhY2l0eTsKKyB9OwogCi0gICAgUUdyYXBoaWNzSXRlbSogbV9tYXNrTGF5ZXI7Ci19OwogI2Vu
ZGlmIC8vIFFUX05PX0dSQVBISUNTRUZGRUNUCiAKIGNsYXNzIEdyYXBoaWNzTGF5ZXJRdEltcGwg
OiBwdWJsaWMgUUdyYXBoaWNzT2JqZWN0IHsKQEAgLTEzOCwxMyArMTEwLDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgRGlzcGxheUNoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCAxOCksCiAgICAgICAg
IEJhY2tncm91bmRDb2xvckNoYW5nZSA9ICAgICAoMUwgPDwgMTkpLAogCi0gICAgICAgIERpc3Ry
aWJ1dGVzT3BhY2l0eUNoYW5nZSA9ICAoMUwgPDwgMjApCisgICAgICAgIERpc3RyaWJ1dGVzT3Bh
Y2l0eUNoYW5nZSA9ICAoMUwgPDwgMjApLAorICAgICAgICBSZXBsaWNhQ2hhbmdlICAgICAgICAg
ICAgPSAgKDFMIDw8IDIxKQogICAgIH07CiAKICAgICAvLyBUaGUgY29tcG9zaXRvciBsZXRzIHVz
IHNwZWNpYWwtY2FzZSBpbWFnZXMgYW5kIGNvbG9ycywgc28gd2UgdHJ5IHRvIGRvIHNvLgogICAg
IGVudW0gU3RhdGljQ29udGVudFR5cGUgeyBIVE1MQ29udGVudFR5cGUsIFBpeG1hcENvbnRlbnRU
eXBlLCBDb2xvckNvbnRlbnRUeXBlLCBNZWRpYUNvbnRlbnRUeXBlLCBDYW52YXMzRENvbnRlbnRU
eXBlfTsKIAogICAgIGNvbnN0IEdyYXBoaWNzTGF5ZXJRdEltcGwqIHJvb3RMYXllcigpIGNvbnN0
OworICAgIGJvb2wgaGFzUmVwbGljYXRlZEFuY2VzdG9yKCkgY29uc3Q7CiAKICAgICBHcmFwaGlj
c0xheWVyUXRJbXBsKEdyYXBoaWNzTGF5ZXJRdCogbmV3TGF5ZXIpOwogICAgIHZpcnR1YWwgfkdy
YXBoaWNzTGF5ZXJRdEltcGwoKTsKQEAgLTE5NSw2ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBtX29wYWNpdHlBbmltYXRpb25SdW5uaW5nOwogI2lmbmRlZiBRVF9OT19HUkFQSElDU0VGRkVD
VAogICAgIFFXZWFrUG9pbnRlcjxNYXNrRWZmZWN0UXQ+IG1fbWFza0VmZmVjdDsKKyAgICBRV2Vh
a1BvaW50ZXI8UmVmbGVjdGlvbkVmZmVjdFF0PiBtX3JlZmxlY3Rpb25FZmZlY3Q7CiAjZW5kaWYK
IAogICAgIHN0cnVjdCBDb250ZW50RGF0YSB7CkBAIC00NDAsNiArNDE1LDEyIEBAIHZvaWQgR3Jh
cGhpY3NMYXllclF0SW1wbDo6dXBkYXRlVHJhbnNmb3JtKCkKIAogICAgIHNldFRyYW5zZm9ybSh0
cmFuc2Zvcm0yRCk7CiAKKyAgICAvLyBGSVhNRTogZmluZCB0aGUgY29ycmVjdCBib3VuZGluZyBy
ZWN0IGZvciB0aGUgZWZmZWN0IGluc3RlYWQgb2YgZm9yY2luZyBhIHNjZW5lIHVwZGF0ZS4KKyAg
ICAvLyBUaGF0J3MgaXMgcHJldHR5IHRyaWNreSBzbyBmb3Igbm93IHdlIHN0YXkgd2l0aCB0aGUg
aGFjay4KKyAgICBpZiAoaGFzUmVwbGljYXRlZEFuY2VzdG9yKCkpCisgICAgICAgIGlmIChzY2Vu
ZSgpKQorICAgICAgICAgICAgc2NlbmUoKS0+dXBkYXRlKCk7CisKICAgICBjb25zdCBRTGlzdDxR
R3JhcGhpY3NJdGVtKj4gY2hpbGRyZW4gPSBjaGlsZEl0ZW1zKCk7CiAgICAgUUxpc3Q8UUdyYXBo
aWNzSXRlbSo+Ojpjb25zdF9pdGVyYXRvciBpdDsKICAgICBmb3IgKGl0ID0gY2hpbGRyZW4uYmVn
aW4oKTsgaXQgIT0gY2hpbGRyZW4uZW5kKCk7ICsraXQpCkBAIC00NTMsNiArNDM0LDE1IEBAIHZv
aWQgR3JhcGhpY3NMYXllclF0SW1wbDo6c2V0QmFzZVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgYmFzZVRyYW5zCiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiB9CiAKK2Jvb2wg
R3JhcGhpY3NMYXllclF0SW1wbDo6aGFzUmVwbGljYXRlZEFuY2VzdG9yKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9sYXllci0+aXNSZXBsaWNhdGVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChtX2xheWVyLT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIHRvR3JhcGhpY3NMYXllclF0
SW1wbChtX2xheWVyLT5wYXJlbnQoKS0+cGxhdGZvcm1MYXllcigpKS0+aGFzUmVwbGljYXRlZEFu
Y2VzdG9yKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBRUGFpbnRlclBhdGggR3JhcGhpY3NM
YXllclF0SW1wbDo6b3BhcXVlQXJlYSgpIGNvbnN0CiB7CiAgICAgUVBhaW50ZXJQYXRoIHBhaW50
ZXJQYXRoOwpAQCAtNTcwLDI1ICs1NjAsNTAgQEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpm
bHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUsIGJvb2wgZm9yY2VVcGRhdGVUcmFuc2Zvcm0KICAg
ICAgICAgfQogICAgIH0KIAorI2lmbmRlZiBRVF9OT19HUkFQSElDU0VGRkVDVAogICAgIGlmICht
X2NoYW5nZU1hc2sgJiBNYXNrTGF5ZXJDaGFuZ2UpIHsKICAgICAgICAgLy8gV2UgY2FuJ3QgcGFp
bnQgaGVyZSwgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGlmIHRoZSBtYXNrIGxheWVyIGl0c2VsZiBp
cyByZWFkeS4uLiB3ZSdsbCBoYXZlCiAgICAgICAgIC8vIHRvIHdhaXQgdGlsbCB0aGlzIGxheWVy
IHRyaWVzIHRvIHBhaW50LgogICAgICAgICBzZXRGbGFnKEl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFw
ZSwgbV9sYXllci0+bWFza0xheWVyKCkgfHwgbV9sYXllci0+bWFza3NUb0JvdW5kcygpKTsKLSNp
Zm5kZWYgUVRfTk9fR1JBUEhJQ1NFRkZFQ1QKLSAgICAgICAgc2V0R3JhcGhpY3NFZmZlY3QoMCk7
Ci0gICAgICAgIGlmIChtX2xheWVyLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICAgICAgaWYgKEdy
YXBoaWNzTGF5ZXJRdEltcGwqIG1hc2sgPSB0b0dyYXBoaWNzTGF5ZXJRdEltcGwobV9sYXllci0+
bWFza0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSkpIHsKLSAgICAgICAgICAgICAgICBtYXNrLT5t
X21hc2tFZmZlY3QgPSBuZXcgTWFza0VmZmVjdFF0KHRoaXMsIG1hc2spOwotICAgICAgICAgICAg
ICAgIHNldEdyYXBoaWNzRWZmZWN0KG1hc2stPm1fbWFza0VmZmVjdC5kYXRhKCkpOworICAgICAg
ICBpZiAobV9sYXllci0+aXNSZXBsaWNhdGVkKCkpIHsKKyAgICAgICAgICAgIC8vIHRoZSByZWZs
ZWN0aW9uIGVmZmVjdCBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbWFza3MuCisgICAgICAgICAg
ICBpZiAoZ3JhcGhpY3NFZmZlY3QoKSkKKyAgICAgICAgICAgICAgICBncmFwaGljc0VmZmVjdCgp
LT51cGRhdGUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChxb2JqZWN0X2Nh
c3Q8TWFza0VmZmVjdFF0Kj4oZ3JhcGhpY3NFZmZlY3QoKSkpCisgICAgICAgICAgICAgICAgc2V0
R3JhcGhpY3NFZmZlY3QoMCk7CisgICAgICAgICAgICBpZiAobV9sYXllci0+bWFza0xheWVyKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXllclF0SW1wbCogbWFzayA9IHRvR3Jh
cGhpY3NMYXllclF0SW1wbChtX2xheWVyLT5tYXNrTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKSkg
eworICAgICAgICAgICAgICAgICAgICBtYXNrLT5tX21hc2tFZmZlY3QgPSBuZXcgTWFza0VmZmVj
dFF0KHRoaXMsIG1hc2spOworICAgICAgICAgICAgICAgICAgICBzZXRHcmFwaGljc0VmZmVjdCht
YXNrLT5tX21hc2tFZmZlY3QuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSNlbmRpZgogICAgIH0KIAorICAgIGlmIChtX2NoYW5nZU1hc2sgJiBS
ZXBsaWNhQ2hhbmdlKSB7CisgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIGNsZWFyIGEgcmVwbGlj
YSBlZmZlY3QsIG5vdCBhIG1hc2sgZWZmZWN0LgorICAgICAgICBpZiAocW9iamVjdF9jYXN0PFJl
ZmxlY3Rpb25FZmZlY3RRdCo+KGdyYXBoaWNzRWZmZWN0KCkpKQorICAgICAgICAgICAgc2V0R3Jh
cGhpY3NFZmZlY3QoMCk7CisgICAgICAgIGlmIChtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewor
ICAgICAgICAgICAgR3JhcGhpY3NMYXllciogcmVwbGljYUxheWVyID0gbV9sYXllci0+cmVwbGlj
YUxheWVyKCk7CisgICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXllclF0SW1wbCogcmVwbGljYUlt
cGwgPSB0b0dyYXBoaWNzTGF5ZXJRdEltcGwocmVwbGljYUxheWVyLT5wbGF0Zm9ybUxheWVyKCkp
KSB7CisgICAgICAgICAgICAgICAgcmVwbGljYUltcGwtPm1fcmVmbGVjdGlvbkVmZmVjdCA9IG5l
dyBSZWZsZWN0aW9uRWZmZWN0UXQodGhpcywgcmVwbGljYUxheWVyLCBtX2xheWVyKTsKKyAgICAg
ICAgICAgICAgICBzZXRHcmFwaGljc0VmZmVjdChyZXBsaWNhSW1wbC0+bV9yZWZsZWN0aW9uRWZm
ZWN0LmRhdGEoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlKCk7
CisgICAgfQorI2VuZGlmCisKKwogICAgIGlmIChtX2NoYW5nZU1hc2sgJiBTaXplQ2hhbmdlKSB7
CiAgICAgICAgIGlmIChtX2xheWVyLT5zaXplKCkgIT0gbV9zdGF0ZS5zaXplKSB7CiAgICAgICAg
ICAgICBwcmVwYXJlR2VvbWV0cnlDaGFuZ2UoKTsKICAgICAgICAgICAgIG1fc2l6ZSA9IFFTaXpl
RihtX2xheWVyLT5zaXplKCkud2lkdGgoKSwgbV9sYXllci0+c2l6ZSgpLmhlaWdodCgpKTsKKyAg
ICAgICAgICAgIGlmIChtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBp
ZiAoR3JhcGhpY3NMYXllclF0SW1wbCogcmVwbGljYSA9IHRvR3JhcGhpY3NMYXllclF0SW1wbCht
X2xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVwbGljYS0+bV9yZWZsZWN0aW9uRWZmZWN0LmRhdGEoKS0+dXBkYXRlR2VvbWV0cnko
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjQ4LDggKzY2MywxNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJRdEltcGw6OmZsdXNoQ2hhbmdlcyhib29sIHJlY3Vyc2l2ZSwgYm9vbCBmb3JjZVVwZGF0
ZVRyYW5zZm9ybQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKChtX2NoYW5nZU1hc2sgJiBP
cGFjaXR5Q2hhbmdlKSAmJiBtX3N0YXRlLm9wYWNpdHkgIT0gbV9sYXllci0+b3BhY2l0eSgpICYm
ICFtX29wYWNpdHlBbmltYXRpb25SdW5uaW5nKQotICAgICAgICBzZXRPcGFjaXR5KG1fbGF5ZXIt
Pm9wYWNpdHkoKSk7CisgICAgaWYgKChtX2NoYW5nZU1hc2sgJiAoT3BhY2l0eUNoYW5nZSB8IFJl
cGxpY2FDaGFuZ2UpICYmIG1fc3RhdGUub3BhY2l0eSAhPSBtX2xheWVyLT5vcGFjaXR5KCkgJiYg
IW1fb3BhY2l0eUFuaW1hdGlvblJ1bm5pbmcpKSB7CisjaWZuZGVmIFFUX05PX0dSQVBISUNTRUZG
RUNUCisgICAgICAgIGlmIChtX2xheWVyLT5yZXBsaWNhTGF5ZXIoKSkgeworICAgICAgICAgICAg
R3JhcGhpY3NMYXllclF0SW1wbCogcmVwbGljYSA9IHRvR3JhcGhpY3NMYXllclF0SW1wbChtX2xh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKKyAgICAgICAgICAgIC8vIExh
eWVyIG9wYWNpdHkgYXBwbGllcyBhZnRlciByZWZsZWN0aW9uLCBzbyB3ZSBoYXZlIHRvIGxldCB0
aGUgUmVmbGVjdGlvbkVmZmVjdCBoYW5kbGUgdGhlIG9wYWNpdHkuCisgICAgICAgICAgICByZXBs
aWNhLT5tX3JlZmxlY3Rpb25FZmZlY3QuZGF0YSgpLT5zZXRPcGFjaXR5KG1fbGF5ZXItPm9wYWNp
dHkoKSk7CisgICAgICAgICAgICBzZXRPcGFjaXR5KDEpOworICAgICAgICB9IGVsc2UKKyNlbmRp
ZgorICAgICAgICAgICAgc2V0T3BhY2l0eShtX2xheWVyLT5vcGFjaXR5KCkpOworICAgIH0KIAog
ICAgIGlmIChtX2NoYW5nZU1hc2sgJiBDb250ZW50c1JlY3RDaGFuZ2UpIHsKICAgICAgICAgY29u
c3QgUVJlY3QgcmVjdChtX2xheWVyLT5jb250ZW50c1JlY3QoKSk7CkBAIC02NzAsNyArNjk0LDkg
QEAgdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjpmbHVzaENoYW5nZXMoYm9vbCByZWN1cnNpdmUs
IGJvb2wgZm9yY2VVcGRhdGVUcmFuc2Zvcm0KICNpZm5kZWYgUVRfTk9fR1JBUEhJQ1NFRkZFQ1QK
ICAgICBpZiAobV9tYXNrRWZmZWN0KQogICAgICAgICBtX21hc2tFZmZlY3QuZGF0YSgpLT51cGRh
dGUoKTsKLSAgICBlbHNlIGlmIChtX2NoYW5nZU1hc2sgJiBEaXNwbGF5Q2hhbmdlKSB7CisgICAg
ZWxzZQorI2VuZGlmCisgICAgaWYgKG1fY2hhbmdlTWFzayAmIERpc3BsYXlDaGFuZ2UpIHsKICAg
ICAgICAgLy8gUmVjYWNoZSBub3c6IGFsbCB0aGUgY29udGVudCBpcyByZWFkeSBhbmQgd2UgZG9u
J3Qgd2FudCB0byB3YWl0IHVudGlsIHRoZSBwYWludCBldmVudC4KICAgICAgICAgLy8gV2Ugb25s
eSBuZWVkIHRvIGRvIHRoaXMgZm9yIEhUTUwgY29udGVudCwgdGhlcmUncyBubyBwb2ludCBpbiBj
YWNoaW5nIGRpcmVjdGx5IGNvbXBvc2l0ZWQKICAgICAgICAgLy8gY29udGVudCBsaWtlIGltYWdl
cyBvciBzb2xpZCByZWN0YW5nbGVzLgpAQCAtNjc5LDcgKzcwNSw2IEBAIHZvaWQgR3JhcGhpY3NM
YXllclF0SW1wbDo6Zmx1c2hDaGFuZ2VzKGJvb2wgcmVjdXJzaXZlLCBib29sIGZvcmNlVXBkYXRl
VHJhbnNmb3JtCiAgICAgICAgIHVwZGF0ZShtX3BlbmRpbmdDb250ZW50LnJlZ2lvblRvVXBkYXRl
LmJvdW5kaW5nUmVjdCgpKTsKICAgICAgICAgbV9wZW5kaW5nQ29udGVudC5yZWdpb25Ub1VwZGF0
ZSA9IFFSZWdpb24oKTsKICAgICB9Ci0jZW5kaWYKIAogICAgIGlmICgobV9jaGFuZ2VNYXNrICYg
QmFja2dyb3VuZENvbG9yQ2hhbmdlKQogICAgICAgICAmJiAobV9wZW5kaW5nQ29udGVudC5iYWNr
Z3JvdW5kQ29sb3IgIT0gbV9jdXJyZW50Q29udGVudC5iYWNrZ3JvdW5kQ29sb3IpKQpAQCAtNzE2
LDggKzc0MSwxMSBAQCBhZnRlckxheWVyQ2hhbmdlczoKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UUxpc3Q8UUdyYXBoaWNzSXRlbSo+IGNoaWxkcmVuID0gY2hpbGRJdGVtcygpOwotICAgIGlmICht
X3N0YXRlLm1hc2tMYXllcikKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fc3RhdGUubWFza0xh
eWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIGlmIChtX2xheWVyLT5tYXNrTGF5ZXIoKSkKKyAg
ICAgICAgY2hpbGRyZW4uYXBwZW5kKG1fbGF5ZXItPm1hc2tMYXllcigpLT5wbGF0Zm9ybUxheWVy
KCkpOworCisgICAgaWYgKG1fbGF5ZXItPnJlcGxpY2FMYXllcigpKQorICAgICAgICBjaGlsZHJl
bi5hcHBlbmQobV9sYXllci0+cmVwbGljYUxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CiAKICAg
ICBRTGlzdDxRR3JhcGhpY3NJdGVtKj46OmNvbnN0X2l0ZXJhdG9yIGl0OwogICAgIGZvciAoaXQg
PSBjaGlsZHJlbi5iZWdpbigpOyBpdCAhPSBjaGlsZHJlbi5lbmQoKTsgKytpdCkgewpAQCAtMTA5
Miw2ICsxMTIwLDE1IEBAIGZsb2F0IEdyYXBoaWNzTGF5ZXJRdDo6YWNjdW11bGF0ZWRPcGFjaXR5
KCkgY29uc3QKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCisgKi8KK3ZvaWQgR3Jh
cGhpY3NMYXllclF0OjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikK
K3sKKyAgICBtX2ltcGwtPm5vdGlmeUNoYW5nZShHcmFwaGljc0xheWVyUXRJbXBsOjpSZXBsaWNh
Q2hhbmdlKTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihsYXllcik7
Cit9CisKKworLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCiAqLwogdm9pZCBHcmFwaGljc0xh
eWVyUXQ6OnN5bmNDb21wb3NpdGluZ1N0YXRlKCkKIHsKQEAgLTExMTMsNiArMTE1MCwxNTkgQEAg
UGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllclF0OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKICAg
ICByZXR1cm4gbV9pbXBsLmdldCgpOwogfQogCisjaWZuZGVmIFFUX05PX0dSQVBISUNTRUZGRUNU
CitNYXNrRWZmZWN0UXQ6Ok1hc2tFZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIFFHcmFwaGljc0l0
ZW0qIG1hc2tMYXllcikKKyAgICA6IFFHcmFwaGljc0VmZmVjdChwYXJlbnQpCisgICAgLCBtX21h
c2tMYXllcihtYXNrTGF5ZXIpCit7Cit9CisKK3ZvaWQgTWFza0VmZmVjdFF0OjpkcmF3KFFQYWlu
dGVyKiBwYWludGVyKQoreworICAgIC8vIFRoaXMgaXMgYSBtb2RpZmllZCBjbG9uZSBvZiBRR3Jh
cGhpY3NPcGFjaXR5RWZmZWN0LgorICAgIC8vIEl0J3MgbW9yZSBlZmZpY2llbnQgdG8gZG8gaXQg
dGhpcyB3YXkgYmVjYXVzZToKKyAgICAvLyAoYSkgV2UgZG9uJ3QgbmVlZCB0aGUgUUJydXNoIGFi
c3RyYWN0aW9uIC0gd2UgYWx3YXlzIGVuZCB1cCB1c2luZyBRR3JhcGhpY3NJdGVtOjpwYWludAor
ICAgIC8vICAgICBmcm9tIHRoZSBtYXNrIGxheWVyLgorICAgIC8vIChiKSBRR3JhcGhpY3NPcGFj
aXR5RWZmZWN0IGRldGFjaGVzIHRoZSBwaXhtYXAsIHdoaWNoIGlzIGluZWZmaWNpZW50IG9uIE9w
ZW5HTC4KKyAgICBjb25zdCBRU2l6ZSBtYXNrU2l6ZSA9IHNvdXJjZUJvdW5kaW5nUmVjdCgpLnRv
QWxpZ25lZFJlY3QoKS5zaXplKCk7CisgICAgaWYgKCFtYXNrU2l6ZS5pc1ZhbGlkKCkgfHwgbWFz
a1NpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIGRyYXdTb3VyY2UocGFpbnRlcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUVBpeG1hcCBtYXNrUGl4bWFwKG1hc2tTaXplKTsKKworICAg
IC8vIFdlIG5lZWQgdG8gZG8gdGhpcyBzbyB0aGUgcGl4bWFwIHdvdWxkIGhhdmUgaGFzQWxwaGEo
KS4KKyAgICBtYXNrUGl4bWFwLmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICBRUGFpbnRlciBt
YXNrUGFpbnRlcigmbWFza1BpeG1hcCk7CisgICAgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtIG9w
dGlvbjsKKyAgICBvcHRpb24uZXhwb3NlZFJlY3QgPSBvcHRpb24ucmVjdCA9IG1hc2tQaXhtYXAu
cmVjdCgpOworICAgIG1hc2tQYWludGVyLnNldFJlbmRlckhpbnRzKHBhaW50ZXItPnJlbmRlckhp
bnRzKCksIHRydWUpOworICAgIG1fbWFza0xheWVyLT5wYWludCgmbWFza1BhaW50ZXIsICZvcHRp
b24sIDApOworICAgIG1hc2tQYWludGVyLmVuZCgpOworCisgICAgUVBvaW50IG9mZnNldDsKKyAg
ICBRUGl4bWFwIHNyY1BpeG1hcCA9IHNvdXJjZVBpeG1hcChRdDo6TG9naWNhbENvb3JkaW5hdGVz
LCAmb2Zmc2V0LCBRR3JhcGhpY3NFZmZlY3Q6Ok5vUGFkKTsKKworICAgIC8vIFdlIGhhdmUgdG8g
dXNlIGFub3RoZXIgaW50ZXJtZWRpYXRlIHBpeG1hcCwgdG8gbWFrZSBzdXJlIHRoZSBtYXNrIGFw
cGxpZXMgb25seSB0byB0aGlzIGl0ZW0KKyAgICAvLyBhbmQgZG9lc24ndCBtb2RpZnkgcGl4ZWxz
IGFscmVhZHkgcGFpbnRlZCBpbnRvIHRoaXMgcGFpbnQtZGV2aWNlLgorICAgIFFQaXhtYXAgcGl4
bWFwKHNyY1BpeG1hcC5zaXplKCkpOworICAgIHBpeG1hcC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7
CisKKyAgICBpZiAocGl4bWFwLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGFp
bnRlciBwaXhtYXBQYWludGVyKCZwaXhtYXApOworCisgICAgcGl4bWFwUGFpbnRlci5zZXRSZW5k
ZXJIaW50cyhwYWludGVyLT5yZW5kZXJIaW50cygpKTsKKyAgICBwaXhtYXBQYWludGVyLnNldENv
bXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7CisKKyAgICAv
LyBXZSB1c2UgZHJhd1BpeG1hcCByYXRoZXIgdGhhbiBkZXRhY2hpbmcsIGJlY2F1c2UgaXQncyBt
b3JlIGVmZmljaWVudCBvbiBPcGVuR0wuCisgICAgcGl4bWFwUGFpbnRlci5kcmF3UGl4bWFwKDAs
IDAsIHNyY1BpeG1hcCk7CisgICAgcGl4bWFwUGFpbnRlci5zZXRDb21wb3NpdGlvbk1vZGUoUVBh
aW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0aW5hdGlvbkluKTsKKyAgICBwaXhtYXBQYWludGVy
LmRyYXdQaXhtYXAoMCwgMCwgbWFza1BpeG1hcCk7CisKKyAgICBwaXhtYXBQYWludGVyLmVuZCgp
OworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAob2Zmc2V0LCBwaXhtYXApOworfQorCitSZWZsZWN0
aW9uRWZmZWN0UXQ6OlJlZmxlY3Rpb25FZmZlY3RRdChRT2JqZWN0KiBwYXJlbnQsIEdyYXBoaWNz
TGF5ZXIqIHJlcGxpY2FMYXllciwgR3JhcGhpY3NMYXllciogcmVwbGljYXRlZExheWVyKQorICAg
ICAgICA6IFFHcmFwaGljc0VmZmVjdChwYXJlbnQpCisgICAgICAgICwgbV9yZXBsaWNhTGF5ZXIo
cmVwbGljYUxheWVyKQorICAgICAgICAsIG1fcmVwbGljYXRlZExheWVyKHJlcGxpY2F0ZWRMYXll
cikKKyAgICAgICAgLCBtX29wYWNpdHkoMSkKK3sKK30KKworUVJlY3RGIFJlZmxlY3Rpb25FZmZl
Y3RRdDo6Ym91bmRpbmdSZWN0Rm9yKGNvbnN0IFFSZWN0RiYgc291cmNlUmVjdCkgY29uc3QKK3sK
KyAgICBjb25zdCBRUmVjdEYgcmVjdCA9IHNvdXJjZVJlY3QgfCBtX2NvbXB1dGVkVHJhbnNmb3Jt
Lm1hcFJlY3Qoc291cmNlUmVjdCk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK3ZvaWQgUmVmbGVj
dGlvbkVmZmVjdFF0OjpyZW5kZXJNYXNrKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBRUGl4bWFwJiBw
aXhtYXAsIGNvbnN0IFFSZWN0RiYgYm91bmRpbmdSZWN0KQoreworICAgIGlmIChHcmFwaGljc0xh
eWVyKiBtYXNrTGF5ZXIgPSBsYXllci0+bWFza0xheWVyKCkpCisgICAgICAgIGlmIChRR3JhcGhp
Y3NJdGVtKiBtYXNrTGF5ZXJJbXBsID0gbWFza0xheWVyLT5uYXRpdmVMYXllcigpKSB7CisgICAg
ICAgICAgICBRUGFpbnRlciBtYXNrUGFpbnRlcigmcGl4bWFwKTsKKyAgICAgICAgICAgIG1hc2tQ
YWludGVyLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3Rp
bmF0aW9uSW4pOworICAgICAgICAgICAgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtIG9wdGlvbjsK
KyAgICAgICAgICAgIG9wdGlvbi5leHBvc2VkUmVjdCA9IG9wdGlvbi5yZWN0ID0gUVJlY3QoMCwg
MCwgYm91bmRpbmdSZWN0LndpZHRoKCksIGJvdW5kaW5nUmVjdC5oZWlnaHQoKSk7CisgICAgICAg
ICAgICBtYXNrTGF5ZXJJbXBsLT5wYWludCgmbWFza1BhaW50ZXIsICZvcHRpb24pOworICAgICAg
ICB9Cit9CisKK3ZvaWQgUmVmbGVjdGlvbkVmZmVjdFF0OjpkcmF3KFFQYWludGVyKiBwYWludGVy
KQoreworICAgIGlmICghbV9yZXBsaWNhTGF5ZXIpIHsKKyAgICAgICAgZHJhd1NvdXJjZShwYWlu
dGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBRUmVjdEYgYm91bmRpbmdS
ZWN0ID0gc291cmNlQm91bmRpbmdSZWN0KCk7CisgICAgUVBvaW50IG9mZnNldDsKKyAgICAvLyBG
SVhNRTogVGhpcyB3b3VsZCBub3QgYWx3YXlzIHdvcmsgZm9yIG5lc3RlZCByZWZsZWN0aW9ucy4g
U2VlIFFUQlVHLTEwNzU2OworICAgIC8vIGhlbmNlIExheW91dFRlc3RzL2NvbXBvc2l0aW5nL3Jl
ZmxlY3Rpb25zL25lc3RlZC1yZWZsZWN0aW9uLWFuY2hvci1wb2ludC5odG1sIGRvZXNuJ3Qgd29y
ay4KKyAgICBRUGl4bWFwIG9yaWdpbmFsID0gc291cmNlUGl4bWFwKFF0OjpMb2dpY2FsQ29vcmRp
bmF0ZXMsICZvZmZzZXQsIFFHcmFwaGljc0VmZmVjdDo6UGFkVG9FZmZlY3RpdmVCb3VuZGluZ1Jl
Y3QpOworCisgICAgLy8gV2UgaGF2ZSB0byByZW5kZXIgdGhlIG1hc2sgb24gdGhlIHNvdXJjZSBw
aXhtYXAsIGJlY2F1c2UgaXQgc2hvdWxkIGJlIHJlZmxlY3RlZCBhbG9uZyB3aXRoIHRoZSBjb250
ZW50cy4KKyAgICByZW5kZXJNYXNrKG1fcmVwbGljYXRlZExheWVyLCBvcmlnaW5hbCwgYm91bmRp
bmdSZWN0KTsKKyAgICBRUGl4bWFwIHJlcGxpY2EgPSBvcmlnaW5hbDsKKworICAgIC8vIE5vdyB3
ZSByZW5kZXIgdGhlIHJlZmxlY3Rpb24tbWFzay4KKyAgICByZW5kZXJNYXNrKG1fcmVwbGljYUxh
eWVyLCByZXBsaWNhLCBib3VuZGluZ1JlY3QpOworCisgICAgLy8gV2UgbmVlZCBhbiBpbnRlcm1l
ZGlhdGUgcGl4bWFwIHRvIGhhbmRsZSBvcGFjaXR5IGNvcnJlY3RseSAtIHRoZSBvcmlnaW5hbAor
ICAgIC8vIGFuZCB0aGUgcmVmbGVjdGlvbiBoYXZlIHRvIGJlIGJsZW5kZWQgYmVmb3JlIHRoZSBv
cGFjaXR5IGNvbWVzIGludG8gcGxheS4KKworICAgIC8vIEZJWE1FOiB3ZSBjYW4gcHJvYmFibHkg
ZG8gd2l0aCBhIG1pbmltYWwgcGl4bWFwIHRoYXQgY2FuIGhvbGQgdGhlIHNvdXJjZSBhbmQgdGhl
IHJlZmxlY3Rpb24uCisgICAgLy8gQnV0IGZvciBub3cgd2UganVzdCB1c2UgYSBwaXhtYXAgdGhl
IHNpemUgb2YgdGhlIHRhcmdldCBkZXZpY2UsIGZvciBzaW1wbGljaXR5LgorICAgIFFQaXhtYXAg
aW50ZXJtZWRpYXRlUGl4bWFwKHBhaW50ZXItPmRldmljZSgpLT53aWR0aCgpLCBwYWludGVyLT5k
ZXZpY2UoKS0+aGVpZ2h0KCkpOworICAgIGludGVybWVkaWF0ZVBpeG1hcC5maWxsKFF0Ojp0cmFu
c3BhcmVudCk7CisgICAgUVBhaW50ZXIgaW50ZXJtZWRpYXRlUGFpbnRlcigmaW50ZXJtZWRpYXRl
UGl4bWFwKTsKKyAgICBpbnRlcm1lZGlhdGVQYWludGVyLnNldFRyYW5zZm9ybShwYWludGVyLT50
cmFuc2Zvcm0oKSwgZmFsc2UpOworICAgIGludGVybWVkaWF0ZVBhaW50ZXIuZHJhd1BpeG1hcChv
ZmZzZXQsIG9yaWdpbmFsKTsKKyAgICBpbnRlcm1lZGlhdGVQYWludGVyLnNldFRyYW5zZm9ybSht
X2NvbXB1dGVkVHJhbnNmb3JtLCB0cnVlKTsKKworICAgIC8vIFdlIHBhaW50IHRoZSByZWZsZWN0
aW9uIGJlaGluZCB0aGUgb3JpZ2luLgorICAgIGludGVybWVkaWF0ZVBhaW50ZXIuc2V0Q29tcG9z
aXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25PdmVyKTsKKyAg
ICBpbnRlcm1lZGlhdGVQYWludGVyLmRyYXdQaXhtYXAob2Zmc2V0LCByZXBsaWNhKTsKKyAgICBp
bnRlcm1lZGlhdGVQYWludGVyLmVuZCgpOworICAgIHBhaW50ZXItPnNhdmUoKTsKKworICAgIC8v
IFRoZSBlZmZlY3Qgd2FzIGFscmVhZHkgZHJhd24gdXNpbmcgdGhlIHBhaW50ZXIncyB0cmFuc2Zv
cm1hdGlvbiBtYXRyaXguCisgICAgcGFpbnRlci0+cmVzZXRUcmFuc2Zvcm0oKTsKKyAgICBwYWlu
dGVyLT5zZXRPcGFjaXR5KG1fb3BhY2l0eSk7CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcCgwLCAw
LCBpbnRlcm1lZGlhdGVQaXhtYXApOworICAgIHBhaW50ZXItPnJlc3RvcmUoKTsKK30KKwordm9p
ZCBSZWZsZWN0aW9uRWZmZWN0UXQ6OnVwZGF0ZUdlb21ldHJ5KCkKK3sKKyAgICAvLyBXZSBiYWtl
IHRoZSBhbmNob3IsIHRyYW5zZm9ybWF0aW9uIGFuZCByZXBsaWNhdGVkIGxheWVyIHBvc2l0aW9u
IGludG8gbV9jb21wdXRlZFRyYW5zZm9ybS4KKyAgICBjb25zdCBxcmVhbCBhbmNob3JYID0gbV9y
ZXBsaWNhTGF5ZXItPmFuY2hvclBvaW50KCkueCgpICogbV9yZXBsaWNhTGF5ZXItPnNpemUoKS53
aWR0aCgpOworICAgIGNvbnN0IHFyZWFsIGFuY2hvclkgPSBtX3JlcGxpY2FMYXllci0+YW5jaG9y
UG9pbnQoKS55KCkgKiBtX3JlcGxpY2FMYXllci0+c2l6ZSgpLmhlaWdodCgpOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKGFuY2hv
clgsIGFuY2hvclkpCisgICAgICAgIC5tdWx0TGVmdChtX3JlcGxpY2FMYXllci0+dHJhbnNmb3Jt
KCkpCisgICAgICAgIC50cmFuc2xhdGUoLWFuY2hvclgsIC1hbmNob3JZKQorICAgICAgICAudHJh
bnNsYXRlKG1fcmVwbGljYUxheWVyLT5yZXBsaWNhdGVkTGF5ZXJQb3NpdGlvbigpLngoKSwgbV9y
ZXBsaWNhTGF5ZXItPnJlcGxpY2F0ZWRMYXllclBvc2l0aW9uKCkueSgpKTsKKyAgICBtX2NvbXB1
dGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtOworICAgIHVwZGF0ZUJvdW5kaW5nUmVjdCgpOworfQor
Cit2b2lkIFJlZmxlY3Rpb25FZmZlY3RRdDo6c2V0T3BhY2l0eShxcmVhbCBvcGFjaXR5KQorewor
ICAgIC8vIFdlIGhhdmUgdG8gbWFuYWdlIG9wYWNpdHkgc2VwYXJhdGVseSBmcm9tIFFHcmFwaGlj
c1ZpZXcsIGJlY2F1c2UgaW4gdGhpcyBjYXNlCisgICAgLy8gdGhlIG9wYWNpdHkgaGFzIHRvIGJl
IGFwcGxpZWQgYWZ0ZXIgdGhlIGVmZmVjdC4KKyAgICBtX29wYWNpdHkgPSBvcGFjaXR5OworICAg
IHVwZGF0ZSgpOworfQorCit2b2lkIFJlZmxlY3Rpb25FZmZlY3RRdDo6c291cmNlQ2hhbmdlZChD
aGFuZ2VGbGFncykKK3sKKyAgICB1cGRhdGVHZW9tZXRyeSgpOworfQorI2VuZGlmIC8vIFFUX05P
X0dSQVBISUNTRUZGRUNUCisKIC8vIE5vdyB3ZSBzdGFydCBkZWFsaW5nIHdpdGggV2ViQ29yZSBh
bmltYXRpb25zIHRyYW5zbGF0ZWQgdG8gUXQgYW5pbWF0aW9ucwogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NM
YXllclF0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5o
CmluZGV4IDZkZTVhNmUuLmYxNzIyNjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0xheWVyUXQuaApAQCAtNjMsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1JlY3QoY29uc3QgSW50UmVjdCYgcik7CisgICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRC
eUxheWVyKEdyYXBoaWNzTGF5ZXIqKTsKICNpZm5kZWYgUVRfTk9fQU5JTUFUSU9OCiAgICAgdmly
dHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IElu
dFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYga2V5ZnJhbWVz
TmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRp
b25zRm9yUHJvcGVydHkoQW5pbWF0ZWRQcm9wZXJ0eUlEKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>