<?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>77575</bug_id>
          
          <creation_ts>2012-02-01 14:28:05 -0800</creation_ts>
          <short_desc>[Texmap] Use glScissors for clipping in TextureMapperGL when possible</short_desc>
          <delta_ts>2012-02-01 18:42:39 -0800</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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ostap73</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>547372</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-01 14:28:05 -0800</bug_when>
    <thetext>Right now we use stencil for all clip operations in TextureMapperGL. Stencils are far more costly, especially on mobile devices, so the use of scissors can be a nice performance boost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547377</commentid>
    <comment_count>1</comment_count>
      <attachid>125017</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-01 14:36:11 -0800</bug_when>
    <thetext>Created attachment 125017
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547388</commentid>
    <comment_count>2</comment_count>
      <attachid>125017</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-01 14:52:51 -0800</bug_when>
    <thetext>Comment on attachment 125017
Patch

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

This looks good, but does the patch need to enable the scissor test for non-Qt ports as well?

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:452
&gt; +    glEnable(GL_SCISSOR_TEST);

Shouldn&apos;t this be enabled for non-Qt ports as well?

&gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:736
&gt; +    GLint viewport[4];
&gt; +    glGetIntegerv(GL_VIEWPORT, viewport);
&gt; +    glScissor(rect.x(), viewport[3] - rect.maxY(), rect.width(), rect.height());

I assume this is for handling flipped-Y situations here? Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547391</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-01 14:55:47 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 125017 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125017&amp;action=review
&gt; 
&gt; This looks good, but does the patch need to enable the scissor test for non-Qt ports as well?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:452
&gt; &gt; +    glEnable(GL_SCISSOR_TEST);
&gt; 
&gt; Shouldn&apos;t this be enabled for non-Qt ports as well?
Yes, I was not sure about whether other ports wanted to control it themselves, especially the part that disables the scissor test on exit. I don&apos;t mind putting this disable/enable code outside the #ifdef.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:736
&gt; &gt; +    GLint viewport[4];
&gt; &gt; +    glGetIntegerv(GL_VIEWPORT, viewport);
&gt; &gt; +    glScissor(rect.x(), viewport[3] - rect.maxY(), rect.width(), rect.height());
&gt; 
&gt; I assume this is for handling flipped-Y situations here? Nice!

Well, we have to do this somewhere or nothing will appear on the screen :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547420</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-01 15:16:59 -0800</bug_when>
    <thetext>(In reply to comment #3)

&gt; Yes, I was not sure about whether other ports wanted to control it themselves, especially the part that disables the scissor test on exit. I don&apos;t mind putting this disable/enable code outside the #ifdef.

I think it could be more general by using glIsEnabled beforehand and then restoring the previous value. I don&apos;t think this would properly handle cases where the context already had a scissored region before calling into the texture mapper, but I&apos;m not sure if that&apos;s an interesting usecase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547460</commentid>
    <comment_count>5</comment_count>
      <attachid>125037</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-01 16:08:19 -0800</bug_when>
    <thetext>Created attachment 125037
Patch

Added glIsEnabled in beginPainting, and made some of it cross-platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547509</commentid>
    <comment_count>6</comment_count>
      <attachid>125049</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-01 17:17:16 -0800</bug_when>
    <thetext>Created attachment 125049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547568</commentid>
    <comment_count>7</comment_count>
      <attachid>125049</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-01 18:42:31 -0800</bug_when>
    <thetext>Comment on attachment 125049
Patch

Clearing flags on attachment: 125049

Committed r106524: &lt;http://trac.webkit.org/changeset/106524&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547570</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-01 18:42:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125017</attachid>
            <date>2012-02-01 14:36:11 -0800</date>
            <delta_ts>2012-02-01 16:08:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>15209</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNDJlOWFkLi44ZjEyOGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTItMDItMDEgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbVGV4bWFwXSBVc2UgZ2xTY2lzc29ycyBmb3IgY2xpcHBpbmcgaW4gVGV4
dHVyZU1hcHBlckdMIHdoZW4gcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc3NTc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFpbnRhaW4gYSBjbGlwcGluZyBzdGFjaywgdGhhdCBoZWxwcyB1
cyB1c2Ugc3RlbmNpbHMgaW4gY29uanVuY3Rpb24gd2l0aCBzY2lzc29ycy4KKyAgICAgICAgV2Ug
YXBwbHkgc2Npc3NvcnMgd2hlbiB0aGUgY2xpcCByZWdpb24gaXMgcmVjdGFsaW5lYXIsIGFuZCBz
dGVuY2lsIHdoZW4gaXQncyBub3QuCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlcyBzbyBu
byBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OlNoYXJlZEdMRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjplbmRTY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmVu
ZENsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTCk6CisKIDIwMTItMDEtMzEgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1RleG1h
cF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8gdXNlIEltYWdlQnVmZmVycyB3aGVuIHBv
c3NpYmxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCAyZmRmMWU1Li5iOTVhYjY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1h
cHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjM4LDggKzIzOCwxMCBAQCBzdHJ1Y3QgVGV4dHVyZU1h
cHBlckdMRGF0YSB7CiAgICAgICAgIFByb2dyYW1JbmZvIHByb2dyYW1zW1Byb2dyYW1Db3VudF07
CiAKICAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKKyAgICAgICAgVmVjdG9yPEludFJlY3Q+IGNs
aXBTdGFjazsKIAotICAgICAgICBTaGFyZWRHTERhdGEoR0xDb250ZXh0IGdsQ29udGV4dCkgOiBz
dGVuY2lsSW5kZXgoMSkKKyAgICAgICAgU2hhcmVkR0xEYXRhKEdMQ29udGV4dCBnbENvbnRleHQp
CisgICAgICAgICAgICA6IHN0ZW5jaWxJbmRleCgxKQogICAgICAgICB7CiAgICAgICAgICAgICBn
bENvbnRleHREYXRhTWFwKCkuYWRkKGdsQ29udGV4dCwgdGhpcyk7CiAgICAgICAgICAgICBpbml0
aWFsaXplU2hhZGVycygpOwpAQCAtNDQwLDEwICs0NDIsMTQgQEAgdm9pZCBUZXh0dXJlTWFwcGVy
R0xEYXRhOjpTaGFyZWRHTERhdGE6OmluaXRpYWxpemVTaGFkZXJzKCkKIHZvaWQgVGV4dHVyZU1h
cHBlckdMOjpiZWdpblBhaW50aW5nKCkKIHsKICNpZiBQTEFURk9STShRVCkKKyAgICAvLyBNYWtl
IHN1cmUgdGhhdCBubyBHTCBlcnJvciBjb2RlIHN0YXlzIGZyb20gcHJldmlvdXMgUXQgb3BlcmF0
aW9ucy4KKyAgICBnbEdldEVycm9yKCk7CisKICAgICBpZiAoIWluaXRpYWxpemVPcGVuR0xTaGlt
cygpKQogICAgICAgICByZXR1cm47CiAKICAgICBnbEdldEludGVnZXJ2KEdMX0NVUlJFTlRfUFJP
R1JBTSwgJm1fZGF0YS0+cHJldmlvdXNQcm9ncmFtKTsKKyAgICBnbEVuYWJsZShHTF9TQ0lTU09S
X1RFU1QpOwogICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAgUVBhaW50ZXIqIHBhaW50ZXIg
PSBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICBwYWludGVyLT5zYXZlKCk7
CkBAIC00NTksNiArNDY1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmco
KQogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKIHsKICNpZiBQTEFURk9STShR
VCkKKyAgICBnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKICAgICBnbENsZWFyU3RlbmNpbCgx
KTsKICAgICBnbENsZWFyKEdMX1NURU5DSUxfQlVGRkVSX0JJVCk7CiAgICAgZ2xVc2VQcm9ncmFt
KG1fZGF0YS0+cHJldmlvdXNQcm9ncmFtKTsKQEAgLTU0MCw2ICs1NDcsNyBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgYm9vbCBvcGFxdWUsIGNv
bnN0IEZsb2F0U2l6ZQogICAgIH0KIAogICAgIEdMX0NNRChnbERpc2FibGUoR0xfREVQVEhfVEVT
VCkpCisKICAgICBHTF9DTUQoZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCkpCiAg
ICAgR0xfQ01EKGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW1JbmZvLnZlcnRleEF0
dHJpYikpCiB9CkBAIC02NjgsNyArNjc2LDYgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmJpbmQo
KQogICAgIGdsU3RlbmNpbEZ1bmMoc3RlbmNpbEluZGV4ID4gMSA/IEdMX0dFUVVBTCA6IEdMX0FM
V0FZUywgc3RlbmNpbEluZGV4IC0gMSwgc3RlbmNpbEluZGV4IC0gMSk7CiAgICAgR0xfQ01EKGds
Vmlld3BvcnQoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpCiAgICAgbV90
ZXh0dXJlTWFwcGVyLT5kYXRhKCkucHJvamVjdGlvbk1hdHJpeCA9IGNyZWF0ZVByb2plY3Rpb25N
YXRyaXgoc2l6ZSgpLCBmYWxzZSk7Ci0gICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CiB9
CiAKIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpkZXN0cm95KCkKQEAgLTcxNCwxNCArNzIxLDYwIEBA
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlICpzdXJmYWNl
UG9pbnRlcikKICAgICAgICAgR0xfQ01EKGdsU3RlbmNpbEZ1bmMoZGF0YSgpLnNoYXJlZEdMRGF0
YSgpLnN0ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6IEdMX0FMV0FZUywgZGF0YSgpLnNoYXJl
ZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEsIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2ls
SW5kZXggLSAxKSkKICAgICAgICAgR0xfQ01EKGdsU3RlbmNpbE9wKEdMX0tFRVAsIEdMX0tFRVAs
IEdMX0tFRVApKQogICAgICAgICBHTF9DTUQoZ2xWaWV3cG9ydCgwLCAwLCB2aWV3cG9ydFNpemUu
d2lkdGgoKSwgdmlld3BvcnRTaXplLmhlaWdodCgpKSkKKyAgICAgICAgZGF0YSgpLnNoYXJlZEdM
RGF0YSgpLmNsaXBTdGFjay5hcHBlbmQoSW50UmVjdChJbnRQb2ludDo6emVybygpLCB2aWV3cG9y
dFNpemUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHN1cmZhY2UtPmJpbmQoKTsK
KyAgICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YWNrLmFwcGVuZChJbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIHN1cmZhY2UtPnNpemUoKSkpOworfQorCitzdGF0aWMgdm9pZCBzY2lzc29y
Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEdMaW50IHZpZXdwb3J0WzRdOworICAg
IGdsR2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsIHZpZXdwb3J0KTsKKyAgICBnbFNjaXNzb3IocmVj
dC54KCksIHZpZXdwb3J0WzNdIC0gcmVjdC5tYXhZKCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JDbGlwKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCkKK3sKKyAgICBGbG9hdFF1YWQgcXVhZCA9IG1vZGVsVmlld01hdHJpeC5wcm9q
ZWN0UXVhZCh0YXJnZXRSZWN0KTsKKyAgICBJbnRSZWN0IHJlY3QgPSBxdWFkLmVuY2xvc2luZ0Jv
dW5kaW5nQm94KCk7CisKKyAgICAvLyBPbmx5IHVzZSBzY2lzc29ycyBvbiByZWN0aWxpbmVhciBj
bGlwcy4KKyAgICBpZiAoIXF1YWQuaXNSZWN0aWxpbmVhcigpIHx8IHJlY3QuaXNFbXB0eSgpKSB7
CisgICAgICAgIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5jbGlwU3RhY2suYXBwZW5kKEludFJlY3Qo
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJbnRlcnNlY3Qgd2l0
aCBwcmV2aW91cyBjbGlwLgorICAgIGlmICghZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBTdGFj
ay5pc0VtcHR5KCkpCisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRhdGEoKS5zaGFyZWRHTERhdGEo
KS5jbGlwU3RhY2subGFzdCgpKTsKKworICAgIHNjaXNzb3JDbGlwKHJlY3QpOworICAgIGRhdGEo
KS5zaGFyZWRHTERhdGEoKS5jbGlwU3RhY2suYXBwZW5kKHJlY3QpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlckdMOjplbmRTY2lzc29yQ2xpcCgpCit7CisgICAg
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgQVNTRVJU
KCFkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YWNrLmlzRW1wdHkoKSk7CisKKyAgICBJbnRS
ZWN0IHJlY3QgPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YWNrLmxhc3QoKTsKKyAgICBp
ZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNjaXNzb3JD
bGlwKHJlY3QpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6
YmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkKIHsKKyAgICBpZiAoYmVnaW5TY2lzc29yQ2xpcCht
b2RlbFZpZXdNYXRyaXgsIHRhcmdldFJlY3QpKQorICAgICAgICByZXR1cm47CisKICAgICBUZXh0
dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OlNoYWRlclByb2dyYW1JbmRleCBwcm9ncmFt
ID0gVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpDbGlwUHJvZ3JhbTsKICAgICBj
b25zdCBUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OlByb2dyYW1JbmZvJiBwcm9n
cmFtSW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5wcm9ncmFtc1twcm9ncmFtXTsKICAgICBH
TF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW1JbmZvLmlkKSkKQEAgLTc1OSw4ICs4MTIsMTYgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbW9kZWxWaWV3TWF0cml4LCBjb24KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZENsaXAo
KQogeworICAgIGlmIChlbmRTY2lzc29yQ2xpcCgpKQorICAgICAgICByZXR1cm47CisKICAgICBk
YXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4ID4+PSAxOwotICAgIGdsU3RlbmNpbEZ1
bmMoZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6IEdM
X0FMV0FZUywgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEsIGRhdGEoKS5z
aGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggLSAxKTsKKyAgICBnbFN0ZW5jaWxGdW5jKGRhdGEo
KS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMs
IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggLSAxLCBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkuc3RlbmNpbEluZGV4IC0gMSk7ICAgIAorCisgICAgLy8gQWZ0ZXIgd2UndmUgY2xlYXJl
ZCB0aGUgbGFzdCBub24tcmVjdGFsaW5lYXIgY2xpcCwgd2UgZGlzYWJsZSB0aGUgc3RlbmNpbCB0
ZXN0LgorICAgIGlmIChkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4ID09IDEpCisg
ICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSkKKwogfQogCiBQYXNzUmVm
UHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1h
cHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmgKaW5kZXggZTQ2YjhhOC4uNjQxZTVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaApA
QCAtNDIsOSArNDIsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXdUZXh0dXJlKGNv
bnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJl
KTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHR1cmUodWludDMyX3QgdGV4dHVyZSwgYm9vbCBv
cGFxdWUsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgQml0bWFwVGV4dHVyZSogbWFza1Rl
eHR1cmUsIGJvb2wgZmxpcCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRTdXJmYWNlKEJpdG1hcFRl
eHR1cmUqIHN1cmZhY2UpOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5QYWludGluZygpOwogICAgIHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpOworICAgIHZpcnR1
YWwgdm9pZCBiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9h
dFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgZW5kQ2xpcCgpOwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiB0eXBlKCkgY29uc3Q7CkBAIC01Niw2ICs1Niw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEFjY2VsZXJhdGlvbk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIE9wZW5H
TE1vZGU7IH0KIAogcHJpdmF0ZToKKyAgICBib29sIGJlZ2luU2Npc3NvckNsaXAoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBib29sIGVuZFNjaXNz
b3JDbGlwKCk7CiAgICAgaW5saW5lIFRleHR1cmVNYXBwZXJHTERhdGEmIGRhdGEoKSB7IHJldHVy
biAqbV9kYXRhOyB9CiAgICAgVGV4dHVyZU1hcHBlckdMRGF0YSogbV9kYXRhOwogICAgIEdyYXBo
aWNzQ29udGV4dCogbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDYyNjhkNzMuLjQwNTA1YTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMi0wMi0wMSAgTm8nYW0gUm9zZW50aGFsICA8
bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtUZXhtYXBdIFVzZSBnbFNjaXNz
b3JzIGZvciBjbGlwcGluZyBpbiBUZXh0dXJlTWFwcGVyR0wgd2hlbiBwb3NzaWJsZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc1NzUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnN0ZWFkIG9mIGFwcGx5
aW5nIHRoZSBzY2lzc29yIGNsaXAgaW4gUVF1aWNrV2ViUGFnZSwgd2UgdHJpY2tsZSBpdCBkb3du
IHRvCisgICAgICAgIFRleHR1cmVNYXBwZXJHTCwgYW5kIGFwcGx5IGl0IHRoZXJlIGFzIHBhcnQg
b2YgYmVnaW5DbGlwKCkuIEFsbCBkaXJlY3QgR0wgb3BlcmF0aW9ucyBhcmUKKyAgICAgICAgbm93
IGNsZWFuZWQgb3V0IG9mIFFRdWlja1dlYlBhZ2UuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OnBh
aW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5OjpwYWludFRvQ3VycmVu
dEdMQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnBhaW50VG9DdXJyZW50
R0xDb250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaDoK
KyAgICAgICAgKERyYXdpbmdBcmVhUHJveHlJbXBsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5
ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgIChMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorCiAyMDEy
LTAxLTMxICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAg
ICAgICAgW1F0XVtUZXhtYXBdIFJlZmFjdG9yIFRleHR1cmVNYXBwZXIgQVBJIHRvIHVzZSBJbWFn
ZUJ1ZmZlcnMgd2hlbiBwb3NzaWJsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCmluZGV4IDY5NzZmODcuLjIwNmJhMjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcApAQCAt
MTI0LDIzICsxMjQsNyBAQCB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVu
dEdMQ29udGV4dCgpCiAgICAgaWYgKCFkcmF3aW5nQXJlYSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gTWFrZSBzdXJlIHRoYXQgbm8gR0wgZXJyb3IgY29kZSBzdGF5cyBmcm9tIHByZXZpb3Vz
IFFUIG9wZXJhdGlvbnMuCi0gICAgZ2xHZXRFcnJvcigpOwotCi0gICAgZ2xFbmFibGUoR0xfU0NJ
U1NPUl9URVNUKTsKLSAgICBBU1NFUlQoIWdsR2V0RXJyb3IoKSk7Ci0gICAgY29uc3QgaW50IGxl
ZnQgPSBjbGlwUmVjdC5sZWZ0KCk7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gY2xpcFJlY3Qud2lk
dGgoKTsKLSAgICBjb25zdCBpbnQgYm90dG9tID0gcS0+Y2FudmFzKCktPmhlaWdodCgpIC0gKGNs
aXBSZWN0LmJvdHRvbSgpICsgMSk7Ci0gICAgY29uc3QgaW50IGhlaWdodCA9IGNsaXBSZWN0Lmhl
aWdodCgpOwotCi0gICAgZ2xTY2lzc29yKGxlZnQsIGJvdHRvbSwgd2lkdGgsIGhlaWdodCk7Ci0g
ICAgQVNTRVJUKCFnbEdldEVycm9yKCkpOwotCi0gICAgZHJhd2luZ0FyZWEtPnBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KHRyYW5zZm9ybSwgb3BhY2l0eSk7Ci0KLSAgICBnbERpc2FibGUoR0xfU0NJ
U1NPUl9URVNUKTsKLSAgICBBU1NFUlQoIWdsR2V0RXJyb3IoKSk7CisgICAgZHJhd2luZ0FyZWEt
PnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybSwgb3BhY2l0eSwgY2xpcFJlY3QpOwog
fQogCiBzdHJ1Y3QgUGFnZVByb3h5TWF0ZXJpYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuaAppbmRleCBhYzcxMWY2Li42MTdjMTc1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKQEAgLTg4LDcgKzg4LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkg
Y29uc3QgeyByZXR1cm4gY29udGVudHNSZWN0KCk7IH0KICAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFJlY3QgY29udGVudHNSZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzQmFja2luZ1N0
b3JlUmVhZHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50
VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
ZmxvYXQgb3BhY2l0eSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludExheWVyVHJlZShC
YWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KSB7IH0KICAgICBMYXllclRyZWVI
b3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVl
SG9zdFByb3h5LmdldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IDBlM2JkYjYuLjI0YTVhZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcApAQCAtMzY2
LDEwICszNjYsMTAgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6cGFpbnRMYXllclRyZWUo
QmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dAogICAgICAgICBtX2xheWVyVHJl
ZUhvc3RQcm94eS0+cGFpbnRUb0dyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKIH0KIAotdm9pZCBE
cmF3aW5nQXJlYVByb3h5SW1wbDo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKK3ZvaWQgRHJhd2luZ0FyZWFQ
cm94eUltcGw6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCiB7
CiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUhvc3RQ
cm94eS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQobWF0cml4LCBvcGFjaXR5KTsKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0UHJveHktPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KG1hdHJpeCwgb3Bh
Y2l0eSwgY2xpcFJlY3QpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKaW5kZXggMjJmOTdhNS4uNWZjZjI0YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKQEAgLTgw
LDcgKzgwLDcgQEAgcHJpdmF0ZToKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0
KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50TGF5ZXJUcmVlKEJhY2tpbmdTdG9yZTo6UGxh
dGZvcm1HcmFwaGljc0NvbnRleHQpOwogICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQ
cm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAppbmRleCBmNWFmYTk2Li40Yzk3MTg3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCkBAIC01Miw3ICs1
Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJ
RCk7CiAgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEKTsKICAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNz
YWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwotICAgIHZvaWQgcGFpbnRUb0N1cnJl
bnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCk7
CisgICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2
b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCk7CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRWaXNp
YmxlQ29udGVudHNSZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJv
eHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5
UXQuY3BwCmluZGV4IDg4N2I4M2MuLmFmZDM3MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtMTY3LDcgKzE2Nyw3
IEBAIExheWVyVHJlZUhvc3RQcm94eTo6fkxheWVyVHJlZUhvc3RQcm94eSgpCiB9CiAKIC8vIFRo
aXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmVlbnRyYW50Lgotdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHkpCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQg
b3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBpZiAoIW1fdGV4dHVy
ZU1hcHBlcikKICAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRl
KFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwpAQCAtMTg2LDYgKzE4Niw3IEBAIHZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0CiAgICAgbm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBw
ZXIuZ2V0KCkpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOwogICAgIG1f
dGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdp
bkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3QpOwogCiAgICAgaWYgKGN1cnJl
bnRSb290TGF5ZXItPm9wYWNpdHkoKSAhPSBvcGFjaXR5IHx8IGN1cnJlbnRSb290TGF5ZXItPnRy
YW5zZm9ybSgpICE9IG1hdHJpeCkgewogICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRPcGFj
aXR5KG9wYWNpdHkpOwpAQCAtMTk0LDYgKzE5NSw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
CiAgICAgfQogCiAgICAgbm9kZS0+cGFpbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZENs
aXAoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CiAKICAgICBpZiAobm9k
ZS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125037</attachid>
            <date>2012-02-01 16:08:19 -0800</date>
            <delta_ts>2012-02-01 17:17:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>16224</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNDJlOWFkLi44ZjEyOGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTItMDItMDEgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbVGV4bWFwXSBVc2UgZ2xTY2lzc29ycyBmb3IgY2xpcHBpbmcgaW4gVGV4
dHVyZU1hcHBlckdMIHdoZW4gcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc3NTc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFpbnRhaW4gYSBjbGlwcGluZyBzdGFjaywgdGhhdCBoZWxwcyB1
cyB1c2Ugc3RlbmNpbHMgaW4gY29uanVuY3Rpb24gd2l0aCBzY2lzc29ycy4KKyAgICAgICAgV2Ug
YXBwbHkgc2Npc3NvcnMgd2hlbiB0aGUgY2xpcCByZWdpb24gaXMgcmVjdGFsaW5lYXIsIGFuZCBz
dGVuY2lsIHdoZW4gaXQncyBub3QuCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlcyBzbyBu
byBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmNwcDoKKyAgICAgICAgKFNoYXJlZEdMRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OlNoYXJlZEdMRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpzY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjplbmRTY2lzc29yQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyR0w6OmJlZ2luQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmVu
ZENsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVy
R0wuaDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJHTCk6CisKIDIwMTItMDEtMzEgIE5vJ2FtIFJv
c2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1RleG1h
cF0gUmVmYWN0b3IgVGV4dHVyZU1hcHBlciBBUEkgdG8gdXNlIEltYWdlQnVmZmVycyB3aGVuIHBv
c3NpYmxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCAyZmRmMWU1Li5hNzlmNDZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1h
cHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
VGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMjM4LDggKzIzOCwxMCBAQCBzdHJ1Y3QgVGV4dHVyZU1h
cHBlckdMRGF0YSB7CiAgICAgICAgIFByb2dyYW1JbmZvIHByb2dyYW1zW1Byb2dyYW1Db3VudF07
CiAKICAgICAgICAgaW50IHN0ZW5jaWxJbmRleDsKKyAgICAgICAgVmVjdG9yPEludFJlY3Q+IGNs
aXBTdGFjazsKIAotICAgICAgICBTaGFyZWRHTERhdGEoR0xDb250ZXh0IGdsQ29udGV4dCkgOiBz
dGVuY2lsSW5kZXgoMSkKKyAgICAgICAgU2hhcmVkR0xEYXRhKEdMQ29udGV4dCBnbENvbnRleHQp
CisgICAgICAgICAgICA6IHN0ZW5jaWxJbmRleCgxKQogICAgICAgICB7CiAgICAgICAgICAgICBn
bENvbnRleHREYXRhTWFwKCkuYWRkKGdsQ29udGV4dCwgdGhpcyk7CiAgICAgICAgICAgICBpbml0
aWFsaXplU2hhZGVycygpOwpAQCAtMjcwLDEyICsyNzIsMTUgQEAgc3RydWN0IFRleHR1cmVNYXBw
ZXJHTERhdGEgewogCiAgICAgVGV4dHVyZU1hcHBlckdMRGF0YSgpCiAgICAgICAgIDogY3VycmVu
dFByb2dyYW0oU2hhcmVkR0xEYXRhOjpOb1Byb2dyYW0pCisgICAgICAgICwgcHJldmlvdXNQcm9n
cmFtKDApCisgICAgICAgICwgcHJldmlvdXNTY2lzc29yU3RhdGUoMCkKICAgICAgICAgLCBtX3No
YXJlZEdMRGF0YShUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFy
ZWRHTERhdGEoKSkKICAgICB7IH0KIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rp
b25NYXRyaXg7CiAgICAgaW50IGN1cnJlbnRQcm9ncmFtOwotICAgIGludCBwcmV2aW91c1Byb2dy
YW07CisgICAgR0xpbnQgcHJldmlvdXNQcm9ncmFtOworICAgIEdMaW50IHByZXZpb3VzU2Npc3Nv
clN0YXRlOwogICAgIEdMaW50IHZpZXdwb3J0WzRdOwogICAgIFJlZlB0cjxTaGFyZWRHTERhdGE+
IG1fc2hhcmVkR0xEYXRhOwogfTsKQEAgLTQzOSwyOSArNDQ0LDQxIEBAIHZvaWQgVGV4dHVyZU1h
cHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjppbml0aWFsaXplU2hhZGVycygpCiAKIHZvaWQgVGV4
dHVyZU1hcHBlckdMOjpiZWdpblBhaW50aW5nKCkKIHsKLSNpZiBQTEFURk9STShRVCkKKyAgICAv
LyBNYWtlIHN1cmUgdGhhdCBubyBHTCBlcnJvciBjb2RlIHN0YXlzIGZyb20gcHJldmlvdXMgUXQg
b3BlcmF0aW9ucy4KKyAgICBnbEdldEVycm9yKCk7CisKICAgICBpZiAoIWluaXRpYWxpemVPcGVu
R0xTaGltcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBnbEdldEludGVnZXJ2KEdMX0NVUlJF
TlRfUFJPR1JBTSwgJm1fZGF0YS0+cHJldmlvdXNQcm9ncmFtKTsKKworICAgIGdsR2V0SW50ZWdl
cnYoR0xfQ1VSUkVOVF9QUk9HUkFNLCAmZGF0YSgpLnByZXZpb3VzUHJvZ3JhbSk7CisgICAgZGF0
YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlID0gZ2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsK
KworICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisjaWYgUExBVEZPUk0oUVQpCiAgICAg
aWYgKG1fY29udGV4dCkgewogICAgICAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgIHBhaW50ZXItPnNhdmUoKTsKICAgICAgICAgcGFp
bnRlci0+YmVnaW5OYXRpdmVQYWludGluZygpOwogICAgIH0KKyNlbmRpZgogICAgIGdsQ2xlYXJT
dGVuY2lsKDApOwogICAgIGdsQ2xlYXIoR0xfU1RFTkNJTF9CVUZGRVJfQklUKTsKICAgICBnbEdl
dEludGVnZXJ2KEdMX1ZJRVdQT1JULCBkYXRhKCkudmlld3BvcnQpOwogICAgIGJpbmRTdXJmYWNl
KDApOwotI2VuZGlmCiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiB7
Ci0jaWYgUExBVEZPUk0oUVQpCiAgICAgZ2xDbGVhclN0ZW5jaWwoMSk7CiAgICAgZ2xDbGVhcihH
TF9TVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGdsVXNlUHJvZ3JhbShtX2RhdGEtPnByZXZpb3Vz
UHJvZ3JhbSk7CisgICAgaWYgKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JTdGF0ZSkKKyAgICAgICAg
Z2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBlbHNlCisgICAgICAgIGdsRGlzYWJsZShH
TF9TQ0lTU09SX1RFU1QpOworCisjaWYgUExBVEZPUk0oUVQpCiAgICAgaWYgKCFtX2NvbnRleHQp
CiAgICAgICAgIHJldHVybjsKICAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7CkBAIC01NDAsNiArNTU3LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGJvb2wgb3BhcXVlLCBjb25zdCBGbG9hdFNp
emUKICAgICB9CiAKICAgICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpKQorCiAgICAg
R0xfQ01EKGdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQogICAgIEdMX0NNRChn
bERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtSW5mby52ZXJ0ZXhBdHRyaWIpKQogfQpA
QCAtNjY4LDcgKzY4Niw2IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kKCkKICAgICBnbFN0
ZW5jaWxGdW5jKHN0ZW5jaWxJbmRleCA+IDEgPyBHTF9HRVFVQUwgOiBHTF9BTFdBWVMsIHN0ZW5j
aWxJbmRleCAtIDEsIHN0ZW5jaWxJbmRleCAtIDEpOwogICAgIEdMX0NNRChnbFZpZXdwb3J0KDAs
IDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKQogICAgIG1fdGV4dHVyZU1hcHBl
ci0+ZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHNpemUo
KSwgZmFsc2UpOwotICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwogfQogCiB2b2lkIEJp
dG1hcFRleHR1cmVHTDo6ZGVzdHJveSgpCkBAIC03MTQsMTQgKzczMSw2MCBAQCB2b2lkIFRleHR1
cmVNYXBwZXJHTDo6YmluZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCiAg
ICAgICAgIEdMX0NNRChnbFN0ZW5jaWxGdW5jKGRhdGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2ls
SW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5z
dGVuY2lsSW5kZXggLSAxLCBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4IC0gMSkp
CiAgICAgICAgIEdMX0NNRChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9LRUVQKSkK
ICAgICAgICAgR0xfQ01EKGdsVmlld3BvcnQoMCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZp
ZXdwb3J0U2l6ZS5oZWlnaHQoKSkpCisgICAgICAgIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5jbGlw
U3RhY2suYXBwZW5kKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgdmlld3BvcnRTaXplKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBzdXJmYWNlLT5iaW5kKCk7CisgICAgZGF0YSgp
LnNoYXJlZEdMRGF0YSgpLmNsaXBTdGFjay5hcHBlbmQoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBzdXJmYWNlLT5zaXplKCkpKTsKK30KKworc3RhdGljIHZvaWQgc2Npc3NvckNsaXAoY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBHTGludCB2aWV3cG9ydFs0XTsKKyAgICBnbEdldEludGVn
ZXJ2KEdMX1ZJRVdQT1JULCB2aWV3cG9ydCk7CisgICAgZ2xTY2lzc29yKHJlY3QueCgpLCB2aWV3
cG9ydFszXSAtIHJlY3QubWF4WSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworfQor
Citib29sIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5TY2lzc29yQ2xpcChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qp
Cit7CisgICAgRmxvYXRRdWFkIHF1YWQgPSBtb2RlbFZpZXdNYXRyaXgucHJvamVjdFF1YWQodGFy
Z2V0UmVjdCk7CisgICAgSW50UmVjdCByZWN0ID0gcXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
OworCisgICAgLy8gT25seSB1c2Ugc2Npc3NvcnMgb24gcmVjdGlsaW5lYXIgY2xpcHMuCisgICAg
aWYgKCFxdWFkLmlzUmVjdGlsaW5lYXIoKSB8fCByZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBk
YXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YWNrLmFwcGVuZChJbnRSZWN0KCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSW50ZXJzZWN0IHdpdGggcHJldmlvdXMg
Y2xpcC4KKyAgICBpZiAoIWRhdGEoKS5zaGFyZWRHTERhdGEoKS5jbGlwU3RhY2suaXNFbXB0eSgp
KQorICAgICAgICByZWN0LmludGVyc2VjdChkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YWNr
Lmxhc3QoKSk7CisKKyAgICBzY2lzc29yQ2xpcChyZWN0KTsKKyAgICBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkuY2xpcFN0YWNrLmFwcGVuZChyZWN0KTsKKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFRleHR1cmVNYXBwZXJHTDo6ZW5kU2Npc3NvckNsaXAoKQoreworICAgIGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS5jbGlwU3RhY2sucmVtb3ZlTGFzdCgpOworICAgIEFTU0VSVCghZGF0YSgpLnNo
YXJlZEdMRGF0YSgpLmNsaXBTdGFjay5pc0VtcHR5KCkpOworCisgICAgSW50UmVjdCByZWN0ID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBTdGFjay5sYXN0KCk7CisgICAgaWYgKHJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzY2lzc29yQ2xpcChyZWN0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldFJlY3QpCiB7CisgICAgaWYgKGJlZ2luU2Npc3NvckNsaXAobW9kZWxWaWV3TWF0
cml4LCB0YXJnZXRSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgVGV4dHVyZU1hcHBlckdM
RGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFkZXJQcm9ncmFtSW5kZXggcHJvZ3JhbSA9IFRleHR1cmVN
YXBwZXJHTERhdGE6OlNoYXJlZEdMRGF0YTo6Q2xpcFByb2dyYW07CiAgICAgY29uc3QgVGV4dHVy
ZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBk
YXRhKCkuc2hhcmVkR0xEYXRhKCkucHJvZ3JhbXNbcHJvZ3JhbV07CiAgICAgR0xfQ01EKGdsVXNl
UHJvZ3JhbShwcm9ncmFtSW5mby5pZCkpCkBAIC03NTksOCArODIyLDE2IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmll
d01hdHJpeCwgY29uCiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRDbGlwKCkKIHsKKyAgICBp
ZiAoZW5kU2Npc3NvckNsaXAoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZGF0YSgpLnNoYXJl
ZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCA+Pj0gMTsKLSAgICBnbFN0ZW5jaWxGdW5jKGRhdGEoKS5z
aGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdBWVMsIGRh
dGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggLSAxLCBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkuc3RlbmNpbEluZGV4IC0gMSk7CisgICAgZ2xTdGVuY2lsRnVuYyhkYXRhKCkuc2hhcmVkR0xE
YXRhKCkuc3RlbmNpbEluZGV4ID4gMSA/IEdMX0VRVUFMIDogR0xfQUxXQVlTLCBkYXRhKCkuc2hh
cmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4IC0gMSwgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5j
aWxJbmRleCAtIDEpOyAgICAKKworICAgIC8vIEFmdGVyIHdlJ3ZlIGNsZWFyZWQgdGhlIGxhc3Qg
bm9uLXJlY3RhbGluZWFyIGNsaXAsIHdlIGRpc2FibGUgdGhlIHN0ZW5jaWwgdGVzdC4KKyAgICBp
ZiAoZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCA9PSAxKQorICAgICAgICBHTF9D
TUQoZ2xEaXNhYmxlKEdMX1NURU5DSUxfVEVTVCkpCisKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZVRleHR1cmUoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5o
CmluZGV4IGU0NmI4YTguLjY0MWU1ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTQyLDkgKzQy
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBU
ZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBm
bG9hdCBvcGFjaXR5LCBjb25zdCBCaXRtYXBUZXh0dXJlKiBtYXNrVGV4dHVyZSk7CiAgICAgdmly
dHVhbCB2b2lkIGRyYXdUZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGJvb2wgb3BhcXVlLCBjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0dXJlLCBib29s
IGZsaXApOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJm
YWNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmco
KTsKICAgICB2aXJ0dWFsIHZvaWQgZW5kUGFpbnRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAg
ICAgdmlydHVhbCB2b2lkIGVuZENsaXAoKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogdHlwZSgp
IGNvbnN0OwpAQCAtNTYsNiArNTYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBBY2NlbGVyYXRp
b25Nb2RlIGFjY2VsZXJhdGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBPcGVuR0xNb2RlOyB9CiAK
IHByaXZhdGU6CisgICAgYm9vbCBiZWdpblNjaXNzb3JDbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgYm9vbCBlbmRTY2lzc29yQ2xpcCgpOwog
ICAgIGlubGluZSBUZXh0dXJlTWFwcGVyR0xEYXRhJiBkYXRhKCkgeyByZXR1cm4gKm1fZGF0YTsg
fQogICAgIFRleHR1cmVNYXBwZXJHTERhdGEqIG1fZGF0YTsKICAgICBHcmFwaGljc0NvbnRleHQq
IG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2MjY4ZDczLi40MDUwNWEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTItMDItMDEgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50
aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbVGV4bWFwXSBVc2UgZ2xTY2lzc29ycyBmb3IgY2xp
cHBpbmcgaW4gVGV4dHVyZU1hcHBlckdMIHdoZW4gcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NTc1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVhZCBvZiBhcHBseWluZyB0aGUgc2Np
c3NvciBjbGlwIGluIFFRdWlja1dlYlBhZ2UsIHdlIHRyaWNrbGUgaXQgZG93biB0bworICAgICAg
ICBUZXh0dXJlTWFwcGVyR0wsIGFuZCBhcHBseSBpdCB0aGVyZSBhcyBwYXJ0IG9mIGJlZ2luQ2xp
cCgpLiBBbGwgZGlyZWN0IEdMIG9wZXJhdGlvbnMgYXJlCisgICAgICAgIG5vdyBjbGVhbmVkIG91
dCBvZiBRUXVpY2tXZWJQYWdlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVu
dEdMQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaDoKKyAg
ICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6
CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmg6CisgICAgICAgIChE
cmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQ
cm94eS5oOgorICAgICAgICAoTGF5ZXJUcmVlSG9zdFByb3h5KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKwogMjAxMi0wMS0zMSAgTm8n
YW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF1b
VGV4bWFwXSBSZWZhY3RvciBUZXh0dXJlTWFwcGVyIEFQSSB0byB1c2UgSW1hZ2VCdWZmZXJzIHdo
ZW4gcG9zc2libGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJwYWdlLmNwcAppbmRleCA2OTc2Zjg3Li4yMDZiYTI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKQEAgLTEyNCwyMyArMTI0
LDcgQEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQo
KQogICAgIGlmICghZHJhd2luZ0FyZWEpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IG5vIEdMIGVycm9yIGNvZGUgc3RheXMgZnJvbSBwcmV2aW91cyBRVCBvcGVyYXRp
b25zLgotICAgIGdsR2V0RXJyb3IoKTsKLQotICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7
Ci0gICAgQVNTRVJUKCFnbEdldEVycm9yKCkpOwotICAgIGNvbnN0IGludCBsZWZ0ID0gY2xpcFJl
Y3QubGVmdCgpOwotICAgIGNvbnN0IGludCB3aWR0aCA9IGNsaXBSZWN0LndpZHRoKCk7Ci0gICAg
Y29uc3QgaW50IGJvdHRvbSA9IHEtPmNhbnZhcygpLT5oZWlnaHQoKSAtIChjbGlwUmVjdC5ib3R0
b20oKSArIDEpOwotICAgIGNvbnN0IGludCBoZWlnaHQgPSBjbGlwUmVjdC5oZWlnaHQoKTsKLQot
ICAgIGdsU2Npc3NvcihsZWZ0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQpOwotICAgIEFTU0VSVCgh
Z2xHZXRFcnJvcigpKTsKLQotICAgIGRyYXdpbmdBcmVhLT5wYWludFRvQ3VycmVudEdMQ29udGV4
dCh0cmFuc2Zvcm0sIG9wYWNpdHkpOwotCi0gICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7
Ci0gICAgQVNTRVJUKCFnbEdldEVycm9yKCkpOworICAgIGRyYXdpbmdBcmVhLT5wYWludFRvQ3Vy
cmVudEdMQ29udGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHksIGNsaXBSZWN0KTsKIH0KIAogc3RydWN0
IFBhZ2VQcm94eU1hdGVyaWFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmgKaW5kZXggYWM3MTFmNi4uNjE3YzE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIGNvbnRlbnRzUmVjdCgpOyB9CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnRl
bnRzUmVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tpbmdTdG9yZVJlYWR5KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvQ3VycmVudEdM
Q29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNp
dHkpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRMYXllclRyZWUoQmFja2luZ1N0b3Jl
OjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkgeyB9CiAgICAgTGF5ZXJUcmVlSG9zdFByb3h5KiBs
YXllclRyZWVIb3N0UHJveHkoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUhvc3RQcm94eS5n
ZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmNwcAppbmRleCAwZTNiZGI2Li4yNGE1YWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKQEAgLTM2NiwxMCArMzY2LDEw
IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OnBhaW50TGF5ZXJUcmVlKEJhY2tpbmdTdG9y
ZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQKICAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkt
PnBhaW50VG9HcmFwaGljc0NvbnRleHQoY29udGV4dCk7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFQ
cm94eUltcGw6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpw
YWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewogICAgIGlmICht
X2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnBhaW50
VG9DdXJyZW50R0xDb250ZXh0KG1hdHJpeCwgb3BhY2l0eSk7CisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdFByb3h5LT5wYWludFRvQ3VycmVudEdMQ29udGV4dChtYXRyaXgsIG9wYWNpdHksIGNsaXBS
ZWN0KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5oCmluZGV4IDIyZjk3YTUuLjVmY2YyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCkBAIC04MCw3ICs4MCw3IEBA
IHByaXZhdGU6CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgdmlydHVhbCB2b2lk
IHNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2
aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOworICAgIHZpcnR1YWwg
dm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAg
IHZpcnR1YWwgdm9pZCBwYWludExheWVyVHJlZShCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KTsKICAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5LmgKaW5kZXggZjVhZmE5Ni4uNGM5NzE4NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApAQCAtNTIsNyArNTIsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOwogICAgIHZv
aWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CiAgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0
KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQpOworICAgIHZvaWQg
cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBwYWludFRv
R3JhcGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwog
ICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRz
UmVjdEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAppbmRl
eCA4ODdiODNjLi5hZmQzNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBMYXllclRy
ZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJveHkoKQogfQogCiAvLyBUaGlzIGZ1bmN0aW9u
IG5lZWRzIHRvIGJlIHJlZW50cmFudC4KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRv
Q3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9h
dCBvcGFjaXR5KQordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250
ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNv
bnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCiAg
ICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFw
cGVyOjpPcGVuR0xNb2RlKTsKQEAgLTE4Niw2ICsxODYsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQ
cm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdAogICAgIG5vZGUtPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsK
ICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKICAgICBtX3RleHR1cmVNYXBw
ZXItPmJpbmRTdXJmYWNlKDApOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5z
Zm9ybWF0aW9uTWF0cml4KCksIGNsaXBSZWN0KTsKIAogICAgIGlmIChjdXJyZW50Um9vdExheWVy
LT5vcGFjaXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAh
PSBtYXRyaXgpIHsKICAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5
KTsKQEAgLTE5NCw2ICsxOTUsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdAogICAgIH0KIAog
ICAgIG5vZGUtPnBhaW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7CiAgICAg
bV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwogCiAgICAgaWYgKG5vZGUtPmRlc2NlbmRh
bnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpIHsK
</data>
<flag name="review"
          id="126448"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125049</attachid>
            <date>2012-02-01 17:17:16 -0800</date>
            <delta_ts>2012-02-01 18:42:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>15337</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYTlkNDk5Li5kMzdlYWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTItMDItMDEgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbVGV4bWFwXSBVc2UgZ2xTY2lzc29ycyBmb3IgY2xpcHBpbmcgaW4gVGV4
dHVyZU1hcHBlckdMIHdoZW4gcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc3NTc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJv
Ymluc29uLgorCisgICAgICAgIE1haW50YWluIGEgY2xpcHBpbmcgc3RhY2ssIHRoYXQgaGVscHMg
dXMgdXNlIHN0ZW5jaWxzIGluIGNvbmp1bmN0aW9uIHdpdGggc2Npc3NvcnMuCisgICAgICAgIFdl
IGFwcGx5IHNjaXNzb3JzIHdoZW4gdGhlIGNsaXAgcmVnaW9uIGlzIHJlY3RhbGluZWFyLCBhbmQg
c3RlbmNpbCB3aGVuIGl0J3Mgbm90LgorCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZXMgc28g
bm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1
cmVNYXBwZXJHTC5jcHA6CisgICAgICAgIChTaGFyZWRHTERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpTaGFyZWRHTERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmJpbmRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6c2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckdMOjpiZWdpblNjaXNzb3JDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJHTDo6ZW5kU2Npc3NvckNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjpiZWdpbkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpl
bmRDbGlwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBl
ckdMLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyR0wpOgorCiAyMDEyLTAyLTAxICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQ29yZSBwYXJ0IG9mIDxyZGFy
Oi8vcHJvYmxlbS8xMDQ0MjY2Mz4gUGFnaW5hdGVkIGRpc3BsYXkgZG9lcyBub3QgcmVzcGVjdCBw
YWdlLWJyZWFrLXtiZWZvcmUsYWZ0ZXJ9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IGRlMDQx
YmYuLmRkZmY2MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0yMzgsOCArMjM4LDEwIEBA
IHN0cnVjdCBUZXh0dXJlTWFwcGVyR0xEYXRhIHsKICAgICAgICAgUHJvZ3JhbUluZm8gcHJvZ3Jh
bXNbUHJvZ3JhbUNvdW50XTsKIAogICAgICAgICBpbnQgc3RlbmNpbEluZGV4OworICAgICAgICBW
ZWN0b3I8SW50UmVjdD4gY2xpcFN0YWNrOwogCi0gICAgICAgIFNoYXJlZEdMRGF0YShHTENvbnRl
eHQgZ2xDb250ZXh0KSA6IHN0ZW5jaWxJbmRleCgxKQorICAgICAgICBTaGFyZWRHTERhdGEoR0xD
b250ZXh0IGdsQ29udGV4dCkKKyAgICAgICAgICAgIDogc3RlbmNpbEluZGV4KDEpCiAgICAgICAg
IHsKICAgICAgICAgICAgIGdsQ29udGV4dERhdGFNYXAoKS5hZGQoZ2xDb250ZXh0LCB0aGlzKTsK
ICAgICAgICAgICAgIGluaXRpYWxpemVTaGFkZXJzKCk7CkBAIC0zMjEsMTIgKzMyMywxNSBAQCBz
dHJ1Y3QgVGV4dHVyZU1hcHBlckdMRGF0YSB7CiAKICAgICBUZXh0dXJlTWFwcGVyR0xEYXRhKCkK
ICAgICAgICAgOiBjdXJyZW50UHJvZ3JhbShTaGFyZWRHTERhdGE6Ok5vUHJvZ3JhbSkKKyAgICAg
ICAgLCBwcmV2aW91c1Byb2dyYW0oMCkKKyAgICAgICAgLCBwcmV2aW91c1NjaXNzb3JTdGF0ZSgw
KQogICAgICAgICAsIG1fc2hhcmVkR0xEYXRhKFRleHR1cmVNYXBwZXJHTERhdGE6OlNoYXJlZEdM
RGF0YTo6Y3VycmVudFNoYXJlZEdMRGF0YSgpKQogICAgIHsgfQogCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBpbnQgY3VycmVudFByb2dyYW07Ci0gICAg
aW50IHByZXZpb3VzUHJvZ3JhbTsKKyAgICBHTGludCBwcmV2aW91c1Byb2dyYW07CisgICAgR0xp
bnQgcHJldmlvdXNTY2lzc29yU3RhdGU7CiAgICAgUmVmUHRyPFNoYXJlZEdMRGF0YT4gbV9zaGFy
ZWRHTERhdGE7CiB9OwogCkBAIC01MjAsMjggKzUyNSw0MCBAQCB2b2lkIFRleHR1cmVNYXBwZXJH
TERhdGE6OlNoYXJlZEdMRGF0YTo6aW5pdGlhbGl6ZVNoYWRlcnMoKQogCiB2b2lkIFRleHR1cmVN
YXBwZXJHTDo6YmVnaW5QYWludGluZygpCiB7Ci0jaWYgUExBVEZPUk0oUVQpCisgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgbm8gR0wgZXJyb3IgY29kZSBzdGF5cyBmcm9tIHByZXZpb3VzIG9wZXJhdGlv
bnMuCisgICAgZ2xHZXRFcnJvcigpOworCiAgICAgaWYgKCFpbml0aWFsaXplT3BlbkdMU2hpbXMo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ2xHZXRJbnRlZ2VydihHTF9DVVJSRU5UX1BST0dS
QU0sICZtX2RhdGEtPnByZXZpb3VzUHJvZ3JhbSk7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9DVVJS
RU5UX1BST0dSQU0sICZkYXRhKCkucHJldmlvdXNQcm9ncmFtKTsKKyAgICBkYXRhKCkucHJldmlv
dXNTY2lzc29yU3RhdGUgPSBnbElzRW5hYmxlZChHTF9TQ0lTU09SX1RFU1QpOworCisgICAgZ2xF
bmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyNpZiBQTEFURk9STShRVCkKICAgICBpZiAobV9jb250
ZXh0KSB7CiAgICAgICAgIFFQYWludGVyKiBwYWludGVyID0gbV9jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKICAgICAgICAgcGFpbnRlci0+c2F2ZSgpOwogICAgICAgICBwYWludGVyLT5iZWdp
bk5hdGl2ZVBhaW50aW5nKCk7CiAgICAgfQorI2VuZGlmCiAgICAgZ2xDbGVhclN0ZW5jaWwoMCk7
CiAgICAgZ2xDbGVhcihHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpOwogICAgIGJpbmRTdXJmYWNlKDAp
OwotI2VuZGlmCiB9CiAKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjplbmRQYWludGluZygpCiB7Ci0j
aWYgUExBVEZPUk0oUVQpCiAgICAgZ2xDbGVhclN0ZW5jaWwoMSk7CiAgICAgZ2xDbGVhcihHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQpOwotICAgIGdsVXNlUHJvZ3JhbShtX2RhdGEtPnByZXZpb3VzUHJv
Z3JhbSk7CisgICAgZ2xVc2VQcm9ncmFtKGRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOworCisgICAg
aWYgKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JTdGF0ZSkKKyAgICAgICAgZ2xFbmFibGUoR0xfU0NJ
U1NPUl9URVNUKTsKKyAgICBlbHNlCisgICAgICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1Qp
OworCisjaWYgUExBVEZPUk0oUVQpCiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKICAgICBRUGFpbnRlciogcGFpbnRlciA9IG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CkBAIC02MjAsNiArNjM3LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlKHVp
bnQzMl90IHRleHR1cmUsIGJvb2wgb3BhcXVlLCBjb25zdCBGbG9hdFNpemUKICAgICB9CiAKICAg
ICBHTF9DTUQoZ2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpKQorCiAgICAgR0xfQ01EKGdsRHJhd0Fy
cmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpKQogICAgIEdMX0NNRChnbERpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtSW5mby52ZXJ0ZXhBdHRyaWIpKQogfQpAQCAtODE1LDcgKzgzMyw2
IEBAIHZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kKCkKICAgICBnbFN0ZW5jaWxGdW5jKHN0ZW5j
aWxJbmRleCA+IDEgPyBHTF9HRVFVQUwgOiBHTF9BTFdBWVMsIHN0ZW5jaWxJbmRleCAtIDEsIHN0
ZW5jaWxJbmRleCAtIDEpOwogICAgIEdMX0NNRChnbFZpZXdwb3J0KDAsIDAsIHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpKQogICAgIG1fdGV4dHVyZU1hcHBlci0+ZGF0YSgpLnByb2pl
Y3Rpb25NYXRyaXggPSBjcmVhdGVQcm9qZWN0aW9uTWF0cml4KHNpemUoKSwgZmFsc2UpOwotICAg
IGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwogfQogCiB2b2lkIEJpdG1hcFRleHR1cmVHTDo6
ZGVzdHJveSgpCkBAIC04NjAsMTQgKzg3Nyw1OCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6Ymlu
ZFN1cmZhY2UoQml0bWFwVGV4dHVyZSAqc3VyZmFjZVBvaW50ZXIpCiAgICAgICAgIEdMX0NNRChn
bFN0ZW5jaWxGdW5jKGRhdGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggPiAxID8gR0xf
RVFVQUwgOiBHTF9BTFdBWVMsIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggLSAx
LCBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4IC0gMSkpCiAgICAgICAgIEdMX0NN
RChnbFN0ZW5jaWxPcChHTF9LRUVQLCBHTF9LRUVQLCBHTF9LRUVQKSkKICAgICAgICAgR0xfQ01E
KGdsVmlld3BvcnQoMCwgMCwgdmlld3BvcnRTaXplKCkud2lkdGgoKSwgdmlld3BvcnRTaXplKCku
aGVpZ2h0KCkpKQorICAgICAgICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YWNrLmFwcGVu
ZChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHZpZXdwb3J0U2l6ZSgpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBzdXJmYWNlLT5iaW5kKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNj
aXNzb3JDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgR0xpbnQgdmlld3BvcnRbNF07
CisgICAgZ2xHZXRJbnRlZ2VydihHTF9WSUVXUE9SVCwgdmlld3BvcnQpOworICAgIGdsU2Npc3Nv
cihyZWN0LngoKSwgdmlld3BvcnRbM10gLSByZWN0Lm1heFkoKSwgcmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKK30KKworYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luU2Npc3NvckNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0KQoreworICAgIEZsb2F0UXVhZCBxdWFkID0gbW9kZWxWaWV3TWF0cml4
LnByb2plY3RRdWFkKHRhcmdldFJlY3QpOworICAgIEludFJlY3QgcmVjdCA9IHF1YWQuZW5jbG9z
aW5nQm91bmRpbmdCb3goKTsKKworICAgIC8vIE9ubHkgdXNlIHNjaXNzb3JzIG9uIHJlY3RpbGlu
ZWFyIGNsaXBzLgorICAgIGlmICghcXVhZC5pc1JlY3RpbGluZWFyKCkgfHwgcmVjdC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBTdGFjay5hcHBlbmQoSW50
UmVjdCgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEludGVyc2Vj
dCB3aXRoIHByZXZpb3VzIGNsaXAuCisgICAgaWYgKCFkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xp
cFN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmVjdC5pbnRlcnNlY3QoZGF0YSgpLnNoYXJlZEdM
RGF0YSgpLmNsaXBTdGFjay5sYXN0KCkpOworCisgICAgc2Npc3NvckNsaXAocmVjdCk7CisgICAg
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmNsaXBTdGFjay5hcHBlbmQocmVjdCk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmVuZFNjaXNzb3JDbGlwKCkKK3sK
KyAgICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuY2xpcFN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICBB
U1NFUlQoIWRhdGEoKS5zaGFyZWRHTERhdGEoKS5jbGlwU3RhY2suaXNFbXB0eSgpKTsKKworICAg
IEludFJlY3QgcmVjdCA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5jbGlwU3RhY2subGFzdCgpOwor
ICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2Np
c3NvckNsaXAocmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgVGV4dHVyZU1hcHBl
ckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJp
eCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KQogeworICAgIGlmIChiZWdpblNjaXNzb3JD
bGlwKG1vZGVsVmlld01hdHJpeCwgdGFyZ2V0UmVjdCkpCisgICAgICAgIHJldHVybjsKICAgICBU
ZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OlNoYWRlclByb2dyYW1JbmRleCBwcm9n
cmFtID0gVGV4dHVyZU1hcHBlckdMRGF0YTo6U2hhcmVkR0xEYXRhOjpDbGlwUHJvZ3JhbTsKICAg
ICBjb25zdCBUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OlByb2dyYW1JbmZvJiBw
cm9ncmFtSW5mbyA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5wcm9ncmFtc1twcm9ncmFtXTsKICAg
ICBHTF9DTUQoZ2xVc2VQcm9ncmFtKHByb2dyYW1JbmZvLmlkKSkKQEAgLTkwNSw4ICs5NjYsMTYg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2luQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbW9kZWxWaWV3TWF0cml4LCBjb24KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZENs
aXAoKQogeworICAgIGlmIChlbmRTY2lzc29yQ2xpcCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4ID4+PSAxOwotICAgIGdsU3RlbmNp
bEZ1bmMoZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCA+IDEgPyBHTF9FUVVBTCA6
IEdMX0FMV0FZUywgZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnN0ZW5jaWxJbmRleCAtIDEsIGRhdGEo
KS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggLSAxKTsKKyAgICBnbFN0ZW5jaWxGdW5jKGRh
dGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggPiAxID8gR0xfRVFVQUwgOiBHTF9BTFdB
WVMsIGRhdGEoKS5zaGFyZWRHTERhdGEoKS5zdGVuY2lsSW5kZXggLSAxLCBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkuc3RlbmNpbEluZGV4IC0gMSk7ICAgIAorCisgICAgLy8gQWZ0ZXIgd2UndmUgY2xl
YXJlZCB0aGUgbGFzdCBub24tcmVjdGFsaW5lYXIgY2xpcCwgd2UgZGlzYWJsZSB0aGUgc3RlbmNp
bCB0ZXN0LgorICAgIGlmIChkYXRhKCkuc2hhcmVkR0xEYXRhKCkuc3RlbmNpbEluZGV4ID09IDEp
CisgICAgICAgIEdMX0NNRChnbERpc2FibGUoR0xfU1RFTkNJTF9URVNUKSkKKwogfQogCiBQYXNz
UmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4dHVy
ZU1hcHBlckdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmgKaW5kZXggZGQyZTFhNy4uMWI0MTE4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL1RleHR1cmVNYXBwZXJHTC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFwcGVyR0wu
aApAQCAtNTUsNiArNTUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzT3BlbkdMQmFj
a2VkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiBwcml2YXRlOgorICAgIGJvb2wgYmVnaW5T
Y2lzc29yQ2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIGJvb2wgZW5kU2Npc3NvckNsaXAoKTsKICAgICBpbmxpbmUgVGV4dHVyZU1hcHBlckdM
RGF0YSYgZGF0YSgpIHsgcmV0dXJuICptX2RhdGE7IH0KICAgICBUZXh0dXJlTWFwcGVyR0xEYXRh
KiBtX2RhdGE7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBtX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ZDRiY2E5Yy4uNjVjYzUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTAyLTAx
ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAg
W1RleG1hcF0gVXNlIGdsU2Npc3NvcnMgZm9yIGNsaXBwaW5nIGluIFRleHR1cmVNYXBwZXJHTCB3
aGVuIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03NzU3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KKworICAg
ICAgICBJbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBzY2lzc29yIGNsaXAgaW4gUVF1aWNrV2ViUGFn
ZSwgd2UgdHJpY2tsZSBpdCBkb3duIHRvCisgICAgICAgIFRleHR1cmVNYXBwZXJHTCwgYW5kIGFw
cGx5IGl0IHRoZXJlIGFzIHBhcnQgb2YgYmVnaW5DbGlwKCkuIEFsbCBkaXJlY3QgR0wgb3BlcmF0
aW9ucyBhcmUKKyAgICAgICAgbm93IGNsZWFuZWQgb3V0IG9mIFFRdWlja1dlYlBhZ2UuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAgICAoUVF1
aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJl
YVByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHlJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94
eUltcGw6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eUltcGwuaDoKKyAgICAgICAgKERyYXdpbmdBcmVhUHJveHlJbXBsKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgIChMYXllclRy
ZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlR
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJl
bnRHTENvbnRleHQpOgorCiAyMDEyLTAyLTAxICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5j
b20+CiAKICAgICAgICAgV2ViS2l0MiBwYXJ0IG9mIDxyZGFyOi8vcHJvYmxlbS8xMDQ0MjY2Mz4g
UGFnaW5hdGVkIGRpc3BsYXkgZG9lcyBub3QgcmVzcGVjdCBwYWdlLWJyZWFrLXtiZWZvcmUsYWZ0
ZXJ9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdl
LmNwcAppbmRleCA2OTc2Zjg3Li4yMDZiYTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKQEAgLTEyNCwyMyArMTI0LDcgQEAgdm9p
ZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKQogICAgIGlm
ICghZHJhd2luZ0FyZWEpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IG5vIEdMIGVycm9yIGNvZGUgc3RheXMgZnJvbSBwcmV2aW91cyBRVCBvcGVyYXRpb25zLgotICAg
IGdsR2V0RXJyb3IoKTsKLQotICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgQVNT
RVJUKCFnbEdldEVycm9yKCkpOwotICAgIGNvbnN0IGludCBsZWZ0ID0gY2xpcFJlY3QubGVmdCgp
OwotICAgIGNvbnN0IGludCB3aWR0aCA9IGNsaXBSZWN0LndpZHRoKCk7Ci0gICAgY29uc3QgaW50
IGJvdHRvbSA9IHEtPmNhbnZhcygpLT5oZWlnaHQoKSAtIChjbGlwUmVjdC5ib3R0b20oKSArIDEp
OwotICAgIGNvbnN0IGludCBoZWlnaHQgPSBjbGlwUmVjdC5oZWlnaHQoKTsKLQotICAgIGdsU2Np
c3NvcihsZWZ0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQpOwotICAgIEFTU0VSVCghZ2xHZXRFcnJv
cigpKTsKLQotICAgIGRyYXdpbmdBcmVhLT5wYWludFRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zv
cm0sIG9wYWNpdHkpOwotCi0gICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgQVNT
RVJUKCFnbEdldEVycm9yKCkpOworICAgIGRyYXdpbmdBcmVhLT5wYWludFRvQ3VycmVudEdMQ29u
dGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHksIGNsaXBSZWN0KTsKIH0KIAogc3RydWN0IFBhZ2VQcm94
eU1hdGVyaWFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgK
aW5kZXggYWM3MTFmNi4uNjE3YzE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eS5oCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRl
bnRzUmVjdCgpOyB9CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVjdCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tpbmdTdG9yZVJlYWR5KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRMYXllclRyZWUoQmFja2luZ1N0b3JlOjpQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCkgeyB9CiAgICAgTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVI
b3N0UHJveHkoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUhvc3RQcm94eS5nZXQoKTsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUlt
cGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNw
cAppbmRleCAwZTNiZGI2Li4yNGE1YWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKQEAgLTM2NiwxMCArMzY2LDEwIEBAIHZvaWQg
RHJhd2luZ0FyZWFQcm94eUltcGw6OnBhaW50TGF5ZXJUcmVlKEJhY2tpbmdTdG9yZTo6UGxhdGZv
cm1HcmFwaGljc0NvbnRleHQKICAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnBhaW50VG9H
cmFwaGljc0NvbnRleHQoY29udGV4dCk7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6
OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgsIGZsb2F0IG9wYWNpdHkpCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpwYWludFRvQ3Vy
cmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewogICAgIGlmIChtX2xheWVyVHJl
ZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnBhaW50VG9DdXJyZW50
R0xDb250ZXh0KG1hdHJpeCwgb3BhY2l0eSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5
LT5wYWludFRvQ3VycmVudEdMQ29udGV4dChtYXRyaXgsIG9wYWNpdHksIGNsaXBSZWN0KTsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
SW1wbC5oCmluZGV4IDIyZjk3YTUuLjVmY2YyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oCkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6
CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2li
bGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNpYmxlQ29u
dGVudHNSZWN0LCBmbG9hdCBzY2FsZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAg
IHZpcnR1YWwgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwg
dm9pZCBwYWludExheWVyVHJlZShCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KTsKICAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciopOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFBy
b3h5LmgKaW5kZXggZjVhZmE5Ni4uNGM5NzE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOwogICAgIHZvaWQgc2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKTsKLSAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQpOworICAgIHZvaWQgcGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdm9pZCBwYWludFRvR3JhcGhpY3ND
b250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwogICAgIHZvaWQg
cHVyZ2VHTFJlc291cmNlcygpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNj
YWxlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAppbmRleCAxZjYwNjVl
Li44OTY5YmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJU
cmVlSG9zdFByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXll
clRyZWVIb3N0UHJveHlRdC5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQCBMYXllclRyZWVIb3N0UHJv
eHk6On5MYXllclRyZWVIb3N0UHJveHkoKQogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRv
IGJlIHJlZW50cmFudC4KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdM
Q29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5
KQordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0
UmVjdCYgY2xpcFJlY3QpCiB7CiAgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCiAgICAgICAgIG1f
dGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlKCk7CkBAIC0xOTAsNiArMTkw
LDcgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXQKICAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVy
KG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50
aW5nKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKKyAgICBtX3RleHR1
cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjbGlwUmVjdCk7CiAK
ICAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3BhY2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVu
dFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KSB7CiAgICAgICAgIGN1cnJlbnRSb290
TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CkBAIC0xOTgsNiArMTk5LDcgQEAgdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXQKICAgICB9CiAKICAgICBub2RlLT5wYWludCgpOworICAgIG1fdGV4dHVy
ZU1hcHBlci0+ZW5kQ2xpcCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsK
IAogICAgIGlmIChub2RlLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygp
KSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>