<?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>171410</bug_id>
          
          <creation_ts>2017-04-27 17:56:27 -0700</creation_ts>
          <short_desc>Unify how BitmapImage handles the availability of a decoded for large and animated images</short_desc>
          <delta_ts>2017-04-28 15:38:01 -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>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170640</blocked>
    
    <blocked>171016</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1302428</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-04-27 17:56:27 -0700</bug_when>
    <thetext>-- Do the following renaming:

ImageObserver::animationAdvanced() =&gt; ImageObserver::imageFrameAvailable()
CachedImage::CachedImageObserver::animationAdvanced() =&gt; CachedImage::CachedImageObserver::imageFrameAvailable()
CachedImage::animationAdvanced() =&gt; CachedImage::imageFrameAvailable()
CachedImageClient::newImageAnimationFrameAvailable() =&gt; CachedImageClient::imageFrameAvailable()
RenderElement::newImageAnimationFrameAvailable() =&gt; RenderElement::imageFrameAvailable()

-- Make BitmapImage calls ImageObserver::imageFrameAvailable() whenever a  frame is available regardless it is for an animated or for a large image.

-- The purpose of this change is to make it easy, from now on, to handle finishing the async decoding more easily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302430</commentid>
    <comment_count>1</comment_count>
      <attachid>308487</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-04-27 18:17:22 -0700</bug_when>
    <thetext>Created attachment 308487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302586</commentid>
    <comment_count>2</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-04-28 08:58:05 -0700</bug_when>
    <thetext>This is work towards https://bugs.webkit.org/show_bug.cgi?id=170640 and https://bugs.webkit.org/show_bug.cgi?id=171016.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302664</commentid>
    <comment_count>3</comment_count>
      <attachid>308487</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-04-28 10:53:11 -0700</bug_when>
    <thetext>Comment on attachment 308487
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Make BitmapImage calls ImageObserver::imageFrameAvailable() whenever a 

calls -&gt; call

&gt; Source/WebCore/loader/cache/CachedImageClient.h:43
&gt; +    virtual bool imageFrameAvailable(CachedImage&amp; image, bool, const IntRect* changeRect) { imageChanged(&amp;image, changeRect); return false; }

Please add a comment saying what the return value means, or return a self-explanatory enum.

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:414
&gt; +        imageObserver()-&gt;imageFrameAvailable(this, true);

boolean trap. Use an enum?

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:460
&gt; +        imageObserver()-&gt;imageFrameAvailable(this, false);

boolean trap.

&gt; Source/WebCore/rendering/RenderElement.cpp:1508
&gt; +    // Large images should repaint even if they are outside the viewport rectangle
&gt; +    // because they should be inside the TileCoverageRect.
&gt; +    if (shouldRepaint || (!isAnimating &amp;&amp; image.image() &amp;&amp; image.image()-&gt;isBitmapImage()))
&gt; +        imageChanged(&amp;image, changeRect);

This seems like a behavior change. Can it be tested?

&gt; Source/WebCore/svg/graphics/SVGImageClients.h:55
&gt; +        // If m_image-&gt;m_page is null, we&apos;re being destructed.

destructed -&gt; destroyed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302720</commentid>
    <comment_count>4</comment_count>
      <attachid>308577</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-04-28 12:45:59 -0700</bug_when>
    <thetext>Created attachment 308577
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302735</commentid>
    <comment_count>5</comment_count>
      <attachid>308584</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-04-28 13:05:28 -0700</bug_when>
    <thetext>Created attachment 308584
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302815</commentid>
    <comment_count>6</comment_count>
      <attachid>308487</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-04-28 15:15:16 -0700</bug_when>
    <thetext>Comment on attachment 308487
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        Make BitmapImage calls ImageObserver::imageFrameAvailable() whenever a 
&gt; 
&gt; calls -&gt; call

Fixed.

&gt;&gt; Source/WebCore/loader/cache/CachedImageClient.h:43
&gt;&gt; +    virtual bool imageFrameAvailable(CachedImage&amp; image, bool, const IntRect* changeRect) { imageChanged(&amp;image, changeRect); return false; }
&gt; 
&gt; Please add a comment saying what the return value means, or return a self-explanatory enum.

I added the enum class VisibleInViewportState { Unknown, Yes, No } in CachedImageClient.h. I made this function returns VisibleInViewportState. I replaced RenderElement::VisibleInViewportState with this enum class.

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:414
&gt;&gt; +        imageObserver()-&gt;imageFrameAvailable(this, true);
&gt; 
&gt; boolean trap. Use an enum?

I added enum class ImageAnimatingState { Yes, No } in ImageTypes and I made this function takes ImageAnimatingState instead of the bool isAnimating.

&gt;&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:460
&gt;&gt; +        imageObserver()-&gt;imageFrameAvailable(this, false);
&gt; 
&gt; boolean trap.

Ditto.

&gt;&gt; Source/WebCore/rendering/RenderElement.cpp:1508
&gt;&gt; +        imageChanged(&amp;image, changeRect);
&gt; 
&gt; This seems like a behavior change. Can it be tested?

You are right. This will be a behavior change for SVGImageClients in the case of non animating image. I fixed the condition to be not specific about BitmapImage.

&gt;&gt; Source/WebCore/svg/graphics/SVGImageClients.h:55
&gt;&gt; +        // If m_image-&gt;m_page is null, we&apos;re being destructed.
&gt; 
&gt; destructed -&gt; destroyed

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302833</commentid>
    <comment_count>7</comment_count>
      <attachid>308584</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-28 15:37:59 -0700</bug_when>
    <thetext>Comment on attachment 308584
Patch

Clearing flags on attachment: 308584

Committed r215952: &lt;http://trac.webkit.org/changeset/215952&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302834</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-28 15:38:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308487</attachid>
            <date>2017-04-27 18:17:22 -0700</date>
            <delta_ts>2017-04-28 12:45:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171410-20170427181722.patch</filename>
            <type>text/plain</type>
            <size>17749</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNTkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDE3LTA0LTI3ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgVW5pZnkgaG93
IEJpdG1hcEltYWdlIGhhbmRsZXMgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGRlY29kZWQgZm9yIGxh
cmdlIGFuZCBhbmltYXRlZCBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MTQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlbmFtZSBzb21lIGZ1bmN0aW9ucyB3aGljaCBhcmUgcmVsYXRlZCB0
byBhbmltYXRpb24gZnJhbWUgYXZhaWxhYmlsaXR5LgorICAgICAgICBNYWtlIEJpdG1hcEltYWdl
IGNhbGxzIEltYWdlT2JzZXJ2ZXI6OmltYWdlRnJhbWVBdmFpbGFibGUoKSB3aGVuZXZlciBhIAor
ICAgICAgICBmcmFtZSBpcyBhdmFpbGFibGUgcmVnYXJkbGVzcyBpdCBpcyBmb3IgYW4gYW5pbWF0
ZWQgb3IgZm9yIGEgbGFyZ2UgaW1hZ2UuCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVk
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlT2Jz
ZXJ2ZXI6OmltYWdlRnJhbWVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1h
Z2U6OmltYWdlRnJhbWVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6
OnVzZXNJbWFnZUNvbnRhaW5lclNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkSW1hZ2U6OmltYWdlSGFzUmVsYXRpdmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2VPYnNlcnZlcjo6YW5pbWF0aW9u
QWR2YW5jZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmFuaW1h
dGlvbkFkdmFuY2VkKTogRGVsZXRlZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlQ2xpZW50OjppbWFnZUZyYW1lQXZhaWxhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlQ2xpZW50OjpuZXdJbWFnZUFuaW1hdGlvbkZyYW1l
QXZhaWxhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJ
bWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbWFnZUZyYW1lQXZh
aWxhYmxlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmV3RnJhbWVO
YXRpdmVJbWFnZUF2YWlsYWJsZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjppbWFnZUZyYW1lQXZhaWxhYmxlQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bmV3RnJhbWVOYXRpdmVJbWFnZUF2YWlsYWJs
ZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lQ2FjaGU6OmNhY2hlQXN5
bmNGcmFtZU5hdGl2ZUltYWdlQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VPYnNlcnZlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnNob3VsZFJlcGFpbnRJblZpc2libGVS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmltYWdlRnJhbWVBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVwYWludEZvclBhdXNlZElt
YWdlQW5pbWF0aW9uc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFJlcGFpbnRG
b3JJbWFnZUFuaW1hdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVt
ZW50OjpuZXdJbWFnZUFuaW1hdGlvbkZyYW1lQXZhaWxhYmxlKTogRGVsZXRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJ
bWFnZUNsaWVudHMuaDoKKwogMjAxNy0wNC0yNyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBXS1VJRGVsZWdhdGVQcml2YXRlIG5lZWRzIGEgaG9vayB0
byB2ZW5kIGRhdGEgdXNlZCB0byBpbml0aWFsaXplIGl0ZW0gcHJvdmlkZXJzIGZvciBkYXRhIGlu
dGVyYWN0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5jcHAJKHJldmlzaW9uIDIxNTkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOSwzMCArMjM5LDYgQEAgdm9pZCBD
YWNoZWRJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZUZvclJlbgogICAgIG1fc3ZnSW1hZ2VDYWNoZS0+
c2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKHJlbmRlcmVyLCBjb250YWluZXJTaXplLCBjb250
YWluZXJab29tKTsKIH0KIAotYm9vbCBDYWNoZWRJbWFnZTo6dXNlc0ltYWdlQ29udGFpbmVyU2l6
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIHJldHVybiBtX2ltYWdlLT51
c2VzQ29udGFpbmVyU2l6ZSgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENhY2hl
ZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdAotewotICAgIGlmIChtX2ltYWdl
KQotICAgICAgICByZXR1cm4gbV9pbWFnZS0+aGFzUmVsYXRpdmVXaWR0aCgpOwotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIENhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZlSGVpZ2h0
KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2UtPmhh
c1JlbGF0aXZlSGVpZ2h0KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIExheW91dFNpemUg
Q2FjaGVkSW1hZ2U6OmltYWdlU2l6ZUZvclJlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyLCBTaXplVHlwZSBzaXplVHlwZSkKIHsKICAgICBpZiAo
IW1faW1hZ2UpCkBAIC0zNjYsMTAgKzM0MiwxMCBAQCB2b2lkIENhY2hlZEltYWdlOjpDYWNoZWRJ
bWFnZU9ic2VydmVyOjpkCiAgICAgICAgIGNhY2hlZEltYWdlLT5kaWREcmF3KGltYWdlKTsKIH0K
IAotdm9pZCBDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2VPYnNlcnZlcjo6YW5pbWF0aW9uQWR2YW5j
ZWQoY29uc3QgSW1hZ2UqIGltYWdlKQordm9pZCBDYWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2VPYnNl
cnZlcjo6aW1hZ2VGcmFtZUF2YWlsYWJsZShjb25zdCBJbWFnZSogaW1hZ2UsIGJvb2wgaXNBbmlt
YXRpbmcsIGNvbnN0IEludFJlY3QqIGNoYW5nZVJlY3QpCiB7CiAgICAgZm9yIChhdXRvIGNhY2hl
ZEltYWdlIDogbV9jYWNoZWRJbWFnZXMpCi0gICAgICAgIGNhY2hlZEltYWdlLT5hbmltYXRpb25B
ZHZhbmNlZChpbWFnZSk7CisgICAgICAgIGNhY2hlZEltYWdlLT5pbWFnZUZyYW1lQXZhaWxhYmxl
KGltYWdlLCBpc0FuaW1hdGluZywgY2hhbmdlUmVjdCk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6
OkNhY2hlZEltYWdlT2JzZXJ2ZXI6OmNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqIGltYWdlLCBj
b25zdCBJbnRSZWN0KiByZWN0KQpAQCAtNTIxLDIyICs0OTcsMjAgQEAgdm9pZCBDYWNoZWRJbWFn
ZTo6ZGlkRHJhdyhjb25zdCBJbWFnZSogaQogICAgIENhY2hlZFJlc291cmNlOjpkaWRBY2Nlc3NE
ZWNvZGVkRGF0YSh0aW1lU3RhbXApOwogfQogCi12b2lkIENhY2hlZEltYWdlOjphbmltYXRpb25B
ZHZhbmNlZChjb25zdCBJbWFnZSogaW1hZ2UpCit2b2lkIENhY2hlZEltYWdlOjppbWFnZUZyYW1l
QXZhaWxhYmxlKGNvbnN0IEltYWdlKiBpbWFnZSwgYm9vbCBpc0FuaW1hdGluZywgY29uc3QgSW50
UmVjdCogY2hhbmdlUmVjdCkKIHsKICAgICBpZiAoIWltYWdlIHx8IGltYWdlICE9IG1faW1hZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgc2hvdWxkUGF1c2VBbmltYXRpb24gPSB0cnVl
OwotCiAgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXI8Q2FjaGVkSW1hZ2VDbGllbnQ+IGNs
aWVudFdhbGtlcihtX2NsaWVudHMpOworICAgIGJvb2wgdmlzaWJsZSA9IGZhbHNlOworCiAgICAg
d2hpbGUgKENhY2hlZEltYWdlQ2xpZW50KiBjbGllbnQgPSBjbGllbnRXYWxrZXIubmV4dCgpKSB7
Ci0gICAgICAgIGJvb2wgY2FuUGF1c2UgPSBmYWxzZTsKLSAgICAgICAgY2xpZW50LT5uZXdJbWFn
ZUFuaW1hdGlvbkZyYW1lQXZhaWxhYmxlKCp0aGlzLCBjYW5QYXVzZSk7Ci0gICAgICAgIGlmICgh
Y2FuUGF1c2UpCi0gICAgICAgICAgICBzaG91bGRQYXVzZUFuaW1hdGlvbiA9IGZhbHNlOworICAg
ICAgICBpZiAoY2xpZW50LT5pbWFnZUZyYW1lQXZhaWxhYmxlKCp0aGlzLCBpc0FuaW1hdGluZywg
Y2hhbmdlUmVjdCkpCisgICAgICAgICAgICB2aXNpYmxlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBp
ZiAoc2hvdWxkUGF1c2VBbmltYXRpb24pCisgICAgaWYgKCF2aXNpYmxlICYmIGlzQW5pbWF0aW5n
KQogICAgICAgICBtX2ltYWdlLT5zdG9wQW5pbWF0aW9uKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oCShyZXZpc2lvbiAyMTU5MDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNjQsOSArNjQsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5SZW5kZXIoY29uc3QgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIGZsb2F0IG11bHRpcGxpZXIpIHsgcmV0dXJuICFlcnJvck9jY3Vy
cmVkKCkgJiYgIWltYWdlU2l6ZUZvclJlbmRlcmVyKHJlbmRlcmVyLCBtdWx0aXBsaWVyKS5pc0Vt
cHR5KCk7IH0KIAogICAgIHZvaWQgc2V0Q29udGFpbmVyU2l6ZUZvclJlbmRlcmVyKGNvbnN0IENh
Y2hlZEltYWdlQ2xpZW50KiwgY29uc3QgTGF5b3V0U2l6ZSYsIGZsb2F0KTsKLSAgICBib29sIHVz
ZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdDsKLSAgICBib29sIGltYWdlSGFzUmVsYXRpdmVX
aWR0aCgpIGNvbnN0OwotICAgIGJvb2wgaW1hZ2VIYXNSZWxhdGl2ZUhlaWdodCgpIGNvbnN0Owor
ICAgIGJvb2wgdXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2Ug
JiYgbV9pbWFnZS0+dXNlc0NvbnRhaW5lclNpemUoKTsgfQorICAgIGJvb2wgaW1hZ2VIYXNSZWxh
dGl2ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSAmJiBtX2ltYWdlLT5oYXNSZWxhdGl2
ZVdpZHRoKCk7IH0KKyAgICBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlICYmIG1faW1hZ2UtPmhhc1JlbGF0aXZlSGVpZ2h0KCk7IH0KIAogICAgIHZv
aWQgYWRkRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbmlz
aExvYWRpbmcoU2hhcmVkQnVmZmVyKikgb3ZlcnJpZGU7CkBAIC0xMzEsNyArMTMxLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgdm9pZCBkZWNvZGVkU2l6ZUNoYW5nZWQoY29uc3QgSW1hZ2UqLCBsb25n
IGxvbmcgZGVsdGEpIGZpbmFsOwogICAgICAgICB2b2lkIGRpZERyYXcoY29uc3QgSW1hZ2UqKSBm
aW5hbDsKIAotICAgICAgICB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKikgZmlu
YWw7CisgICAgICAgIHZvaWQgaW1hZ2VGcmFtZUF2YWlsYWJsZShjb25zdCBJbWFnZSosIGJvb2wg
aXNBbmltYXRpbmcsIGNvbnN0IEludFJlY3QqIGNoYW5nZVJlY3QgPSBudWxscHRyKSBmaW5hbDsK
ICAgICAgICAgdm9pZCBjaGFuZ2VkSW5SZWN0KGNvbnN0IEltYWdlKiwgY29uc3QgSW50UmVjdCop
IGZpbmFsOwogCiAgICAgICAgIFZlY3RvcjxDYWNoZWRJbWFnZSo+IG1fY2FjaGVkSW1hZ2VzOwpA
QCAtMTM5LDcgKzEzOSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRlY29kZWRTaXplQ2hhbmdl
ZChjb25zdCBJbWFnZSosIGxvbmcgbG9uZyBkZWx0YSk7CiAgICAgdm9pZCBkaWREcmF3KGNvbnN0
IEltYWdlKik7Ci0gICAgdm9pZCBhbmltYXRpb25BZHZhbmNlZChjb25zdCBJbWFnZSopOworICAg
IHZvaWQgaW1hZ2VGcmFtZUF2YWlsYWJsZShjb25zdCBJbWFnZSosIGJvb2wgaXNBbmltYXRpbmcs
IGNvbnN0IEludFJlY3QqIGNoYW5nZVJlY3QgPSBudWxscHRyKTsKICAgICB2b2lkIGNoYW5nZWRJ
blJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0Kik7CiAKICAgICB2b2lkIGFkZEluY3Jl
bWVudGFsRGF0YUJ1ZmZlcihTaGFyZWRCdWZmZXImKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRJbWFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZUNsaWVudC5oCShyZXZpc2lvbiAyMTU5MDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGltYWdl
Q2hhbmdlZChDYWNoZWRJbWFnZSosIGNvbnN0IEludFJlY3QqID0gbnVsbHB0cikgeyB9CiAKICAg
ICAvLyBDYWxsZWQgd2hlbiBHSUYgYW5pbWF0aW9uIHByb2dyZXNzZXMuCi0gICAgdmlydHVhbCB2
b2lkIG5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUoQ2FjaGVkSW1hZ2UmIGltYWdlLCBi
b29sJiBjYW5QYXVzZSkgeyBpbWFnZUNoYW5nZWQoJmltYWdlKTsgY2FuUGF1c2UgPSB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIGltYWdlRnJhbWVBdmFpbGFibGUoQ2FjaGVkSW1hZ2UmIGltYWdl
LCBib29sLCBjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0KSB7IGltYWdlQ2hhbmdlZCgmaW1hZ2Us
IGNoYW5nZVJlY3QpOyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1v
dmVDYWNoZWRJbWFnZUNsaWVudChDYWNoZWRJbWFnZSYpIHsgfQogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHJldmlzaW9u
IDIxNTkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExLDcgKzQxMSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6
OmludGVybmFsQWR2YW5jZUFuaW1hdGkKICAgICBkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2Fy
eShmYWxzZSk7CiAKICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2Vy
dmVyKCktPmFuaW1hdGlvbkFkdmFuY2VkKHRoaXMpOworICAgICAgICBpbWFnZU9ic2VydmVyKCkt
PmltYWdlRnJhbWVBdmFpbGFibGUodGhpcywgdHJ1ZSk7CiAKICAgICBMT0coSW1hZ2VzLCAiQml0
bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFttX2N1cnJlbnRGcmFtZSA9ICVsZF0iLCBfX0ZV
TkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fY3Vy
cmVudEZyYW1lKTsKIH0KQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpyZXNl
dEFuaW1hdGlvbigpCiAgICAgZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkodHJ1ZSk7CiB9
CiAKLXZvaWQgQml0bWFwSW1hZ2U6Om5ld0ZyYW1lTmF0aXZlSW1hZ2VBdmFpbGFibGVBdEluZGV4
KHNpemVfdCBpbmRleCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmltYWdlRnJhbWVBdmFpbGFibGVBdElu
ZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwogICAgIExPRyhJ
bWFnZXMsICJCaXRtYXBJbWFnZTo6JXMgLSAlcCAtIHVybDogJXMgW3JlcXVlc3RlZCBmcmFtZSAl
bGQgaXMgbm93IGF2YWlsYWJsZV0iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIGluZGV4KTsKQEAgLTQ1Nyw3ICs0NTcsNyBAQCB2b2lkIEJp
dG1hcEltYWdlOjpuZXdGcmFtZU5hdGl2ZUltYWdlQXZhCiAgICAgICAgICAgICBMT0coSW1hZ2Vz
LCAiQml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtlYXJseUZyYW1lQ291bnQgPSAlbGQg
bmV4dEZyYW1lID0gJWxkXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgKyttX2Vhcmx5RnJhbWVDb3VudCwgaW5kZXgpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIEFTU0VSVChpbmRleCA9PSBtX2N1cnJlbnRGcmFtZSAmJiAhbV9jdXJyZW50
RnJhbWUpOwotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmNoYW5nZWRJblJlY3QodGhpcywgbnVs
bHB0cik7CisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+aW1hZ2VGcmFtZUF2YWlsYWJsZSh0aGlz
LCBmYWxzZSk7CiAgICAgICAgIAogICAgICAgICBpZiAobV9zb3VyY2UuaXNBc3luY0RlY29kaW5n
UXVldWVJZGxlKCkpCiAgICAgICAgICAgICBtX3NvdXJjZS5zdG9wQXN5bmNEZWNvZGluZ1F1ZXVl
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmgJKHJldmlzaW9uIDIxNTkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgLy8gYXV0b21hdGljYWxseSBwYXVzZSBvbmNlIGFsbCBvYnNlcnZlcnMgbm8g
bG9uZ2VyIHdhbnQgdG8gcmVuZGVyIHRoZSBpbWFnZSBhbnl3aGVyZS4KICAgICB2b2lkIHN0b3BB
bmltYXRpb24oKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc2V0QW5pbWF0aW9uKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBuZXdGcmFtZU5hdGl2ZUltYWdlQXZhaWxhYmxlQXRJbmRleChzaXplX3QpIG92
ZXJyaWRlOworICAgIHZvaWQgaW1hZ2VGcmFtZUF2YWlsYWJsZUF0SW5kZXgoc2l6ZV90KSBvdmVy
cmlkZTsKIAogICAgIC8vIEhhbmRsZSBwbGF0Zm9ybS1zcGVjaWZpYyBkYXRhCiAgICAgdm9pZCBp
bnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDIxNTkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0QW5pbWF0aW9uKCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHN0b3BBbmltYXRpb24oKSB7fQogICAgIHZpcnR1YWwgdm9pZCByZXNldEFuaW1hdGlv
bigpIHt9Ci0gICAgdmlydHVhbCB2b2lkIG5ld0ZyYW1lTmF0aXZlSW1hZ2VBdmFpbGFibGVBdElu
ZGV4KHNpemVfdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGltYWdlRnJhbWVBdmFpbGFibGVBdElu
ZGV4KHNpemVfdCkgeyB9CiAgICAgdmlydHVhbCBib29sIGlzQW5pbWF0aW5nKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAKICAgICAvLyBUeXBpY2FsbHkgdGhlIENhY2hlZEltYWdlIHRo
YXQgb3ducyB1cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
RnJhbWVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAkocmV2aXNpb24gMjE1OTA0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgSW1hZ2VGcmFtZUNhY2hlOjpjYWNoZUFzeW5jRnJh
bWVOYXQKIAogICAgIC8vIE5vdGlmeSB0aGUgaW1hZ2Ugd2l0aCB0aGUgcmVhZGluZXNzIG9mIHRo
ZSBuZXcgZnJhbWUgTmF0aXZlSW1hZ2UuCiAgICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIG1faW1h
Z2UtPm5ld0ZyYW1lTmF0aXZlSW1hZ2VBdmFpbGFibGVBdEluZGV4KGluZGV4KTsKKyAgICAgICAg
bV9pbWFnZS0+aW1hZ2VGcmFtZUF2YWlsYWJsZUF0SW5kZXgoaW5kZXgpOwogfQogCiBSZWY8V29y
a1F1ZXVlPiBJbWFnZUZyYW1lQ2FjaGU6OmRlY29kaW5nUXVldWUoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAkocmV2aXNpb24g
MjE1OTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBkaWREcmF3KGNvbnN0IEltYWdlKikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGFu
aW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbWFn
ZUZyYW1lQXZhaWxhYmxlKGNvbnN0IEltYWdlKiwgYm9vbCBpc0FuaW1hdGluZywgY29uc3QgSW50
UmVjdCogY2hhbmdlUmVjdCA9IG51bGxwdHIpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2hhbmdl
ZEluUmVjdChjb25zdCBJbWFnZSosIGNvbnN0IEludFJlY3QqIGNoYW5nZVJlY3QgPSBudWxscHRy
KSA9IDA7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCShyZXZpc2lvbiAyMTU5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MzMsMzAgKzE0MzMsMjkgQEAgYm9v
bCBSZW5kZXJFbGVtZW50OjptYXlDYXVzZVJlcGFpbnRJbnNpZAogICAgIHJldHVybiB2aXNpYmxl
UmVjdC5pbnRlcnNlY3RzKGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dS
ZWN0KCkpKTsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkUmVwYWludEZvckltYWdlQW5pbWF0aW9u
KGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCkKK2Jvb2wgUmVuZGVyRWxlbWVudDo6c2hvdWxkUmVwYWludEluVmlzaWJsZVJlY3QoY29uc3Qg
SW50UmVjdCYgdmlzaWJsZVJlY3QpIGNvbnN0CiB7Ci0gICAgY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gcmVuZGVyZXIuZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRE9NT2Jq
ZWN0c0FyZVN1c3BlbmRlZCgpKQorICAgIGlmIChkb2N1bWVudCgpLmFjdGl2ZURPTU9iamVjdHNB
cmVTdXNwZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChyZW5kZXJlci5z
dHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgIGlmIChzdHlsZSgpLnZpc2liaWxp
dHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHJlbmRlcmVy
LnZpZXcoKS5mcmFtZVZpZXcoKS5pc09mZnNjcmVlbigpKQorICAgIGlmICh2aWV3KCkuZnJhbWVW
aWV3KCkuaXNPZmZzY3JlZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gVXNl
IGJhY2tncm91bmQgcmVjdCBpZiB3ZSBhcmUgdGhlIHJvb3Qgb3IgaWYgd2UgYXJlIHRoZSBib2R5
IGFuZCB0aGUgYmFja2dyb3VuZCBpcyBwcm9wYWdhdGVkIHRvIHRoZSByb290LgogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIG92ZXJseSBjb25zZXJ2YXRpdmUgYXMgdGhlIGltYWdlIG1heSBub3QgYmUg
YSBiYWNrZ3JvdW5kLWltYWdlLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgbm90CiAgICAgLy8gYmUg
cHJvcGFnYXRlZCB0byB0aGUgcm9vdC4gQXQgdGhpcyBwb2ludCwgd2UgdW5mb3J0dW5hdGVseSBk
b24ndCBoYXZlIGFjY2VzcyB0byB0aGUgaW1hZ2UgYW55bW9yZSBzbyB3ZQogICAgIC8vIGNhbiBu
byBsb25nZXIgY2hlY2sgaWYgaXQgaXMgYSBiYWNrZ3JvdW5kIGltYWdlLgotICAgIGJvb2wgYmFj
a2dyb3VuZElzUGFpbnRlZEJ5Um9vdCA9IHJlbmRlcmVyLmlzRG9jdW1lbnRFbGVtZW50UmVuZGVy
ZXIoKTsKLSAgICBpZiAocmVuZGVyZXIuaXNCb2R5KCkpIHsKLSAgICAgICAgYXV0byYgcm9vdFJl
bmRlcmVyID0gKnJlbmRlcmVyLnBhcmVudCgpOyAvLyBJZiA8Ym9keT4gaGFzIGEgcmVuZGVyZXIg
dGhlbiA8aHRtbD4gZG9lcyB0b28uCisgICAgYm9vbCBiYWNrZ3JvdW5kSXNQYWludGVkQnlSb290
ID0gaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpOworICAgIGlmIChpc0JvZHkoKSkgeworICAg
ICAgICBhdXRvJiByb290UmVuZGVyZXIgPSAqcGFyZW50KCk7IC8vIElmIDxib2R5PiBoYXMgYSBy
ZW5kZXJlciB0aGVuIDxodG1sPiBkb2VzIHRvby4KICAgICAgICAgQVNTRVJUKHJvb3RSZW5kZXJl
ci5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpOwogICAgICAgICBBU1NFUlQoaXM8SFRNTEh0
bWxFbGVtZW50Pihyb290UmVuZGVyZXIuZWxlbWVudCgpKSk7CiAgICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgc2hhcmUgYm9keSBiYWNrZ3JvdW5kIHByb3BhZ2F0aW9uIGNvZGUuCiAgICAgICAgIGJh
Y2tncm91bmRJc1BhaW50ZWRCeVJvb3QgPSAhcm9vdFJlbmRlcmVyLmhhc0JhY2tncm91bmQoKTsK
IAogICAgIH0KLSAgICBMYXlvdXRSZWN0IGJhY2tncm91bmRQYWludGluZ1JlY3QgPSBiYWNrZ3Jv
dW5kSXNQYWludGVkQnlSb290ID8gcmVuZGVyZXIudmlldygpLmJhY2tncm91bmRSZWN0KCkgOiBy
ZW5kZXJlci5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKKyAgICBMYXlvdXRSZWN0IGJh
Y2tncm91bmRQYWludGluZ1JlY3QgPSBiYWNrZ3JvdW5kSXNQYWludGVkQnlSb290ID8gdmlldygp
LmJhY2tncm91bmRSZWN0KCkgOiBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKICAgICBp
ZiAoIXZpc2libGVSZWN0LmludGVyc2VjdHMoZW5jbG9zaW5nSW50UmVjdChiYWNrZ3JvdW5kUGFp
bnRpbmdSZWN0KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTQ5NCwxNiArMTQ5Mywy
MSBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OnZpc2libGVJblZpZXdwb3J0U3RhCiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgUmVuZGVyRWxlbWVudDo6bmV3SW1hZ2VBbmltYXRp
b25GcmFtZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYgaW1hZ2UsIGJvb2wmIGNhblBhdXNlKQorYm9v
bCBSZW5kZXJFbGVtZW50OjppbWFnZUZyYW1lQXZhaWxhYmxlKENhY2hlZEltYWdlJiBpbWFnZSwg
Ym9vbCBpc0FuaW1hdGluZywgY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCkKIHsKICAgICBhdXRv
JiBmcmFtZVZpZXcgPSB2aWV3KCkuZnJhbWVWaWV3KCk7CiAgICAgYXV0byB2aXNpYmxlUmVjdCA9
IGZyYW1lVmlldy53aW5kb3dUb0NvbnRlbnRzKGZyYW1lVmlldy53aW5kb3dDbGlwUmVjdCgpKTsK
LSAgICBpZiAoIXNob3VsZFJlcGFpbnRGb3JJbWFnZUFuaW1hdGlvbigqdGhpcywgdmlzaWJsZVJl
Y3QpKSB7CisgICAgYm9vbCBzaG91bGRSZXBhaW50ID0gc2hvdWxkUmVwYWludEluVmlzaWJsZVJl
Y3QodmlzaWJsZVJlY3QpOworCisgICAgaWYgKCFzaG91bGRSZXBhaW50ICYmIGlzQW5pbWF0aW5n
KQogICAgICAgICB2aWV3KCkuYWRkUmVuZGVyZXJXaXRoUGF1c2VkSW1hZ2VBbmltYXRpb25zKCp0
aGlzLCBpbWFnZSk7Ci0gICAgICAgIGNhblBhdXNlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpbWFnZUNoYW5nZWQoJmltYWdlKTsKKworICAgIC8vIExhcmdlIGltYWdlcyBz
aG91bGQgcmVwYWludCBldmVuIGlmIHRoZXkgYXJlIG91dHNpZGUgdGhlIHZpZXdwb3J0IHJlY3Rh
bmdsZQorICAgIC8vIGJlY2F1c2UgdGhleSBzaG91bGQgYmUgaW5zaWRlIHRoZSBUaWxlQ292ZXJh
Z2VSZWN0LgorICAgIGlmIChzaG91bGRSZXBhaW50IHx8ICghaXNBbmltYXRpbmcgJiYgaW1hZ2Uu
aW1hZ2UoKSAmJiBpbWFnZS5pbWFnZSgpLT5pc0JpdG1hcEltYWdlKCkpKQorICAgICAgICBpbWFn
ZUNoYW5nZWQoJmltYWdlLCBjaGFuZ2VSZWN0KTsKKworICAgIHJldHVybiBzaG91bGRSZXBhaW50
OwogfQogCiB2b2lkIFJlbmRlckVsZW1lbnQ6OmRpZFJlbW92ZUNhY2hlZEltYWdlQ2xpZW50KENh
Y2hlZEltYWdlJiBjYWNoZWRJbWFnZSkKQEAgLTE1MTUsNyArMTUxOSw3IEBAIHZvaWQgUmVuZGVy
RWxlbWVudDo6ZGlkUmVtb3ZlQ2FjaGVkSW1hZ2UKIGJvb2wgUmVuZGVyRWxlbWVudDo6cmVwYWlu
dEZvclBhdXNlZEltYWdlQW5pbWF0aW9uc0lmTmVlZGVkKGNvbnN0IEludFJlY3QmIHZpc2libGVS
ZWN0LCBDYWNoZWRJbWFnZSYgY2FjaGVkSW1hZ2UpCiB7CiAgICAgQVNTRVJUKG1faGFzUGF1c2Vk
SW1hZ2VBbmltYXRpb25zKTsKLSAgICBpZiAoIXNob3VsZFJlcGFpbnRGb3JJbWFnZUFuaW1hdGlv
bigqdGhpcywgdmlzaWJsZVJlY3QpKQorICAgIGlmICghc2hvdWxkUmVwYWludEluVmlzaWJsZVJl
Y3QodmlzaWJsZVJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXBhaW50KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHJldmlzaW9u
IDIxNTkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGJvcmRl
ckltYWdlSXNMb2FkZWRBbmRDYW5CZVJlbmRlcmVkKCkgY29uc3Q7CiAgICAgYm9vbCBtYXlDYXVz
ZVJlcGFpbnRJbnNpZGVWaWV3cG9ydChjb25zdCBJbnRSZWN0KiB2aXNpYmxlUmVjdCA9IG51bGxw
dHIpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkUmVwYWludEluVmlzaWJsZVJlY3QoY29uc3QgSW50
UmVjdCYgdmlzaWJsZVJlY3QpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMg
cmVuZGVyZXIgcmVxdWlyZXMgYSBuZXcgc3RhY2tpbmcgY29udGV4dC4KICAgICBzdGF0aWMgYm9v
bCBjcmVhdGVzR3JvdXBGb3JTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYpOwpAQCAtMzE4LDcgKzMx
OSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBjb21wdXRl
Rmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKICAgICB2b2lkIGludmFsaWRhdGVDYWNoZWRGaXJzdExp
bmVTdHlsZSgpOwogCi0gICAgdm9pZCBuZXdJbWFnZUFuaW1hdGlvbkZyYW1lQXZhaWxhYmxlKENh
Y2hlZEltYWdlJiwgYm9vbCYgY2FuUGF1c2UpIGZpbmFsOworICAgIGJvb2wgaW1hZ2VGcmFtZUF2
YWlsYWJsZShDYWNoZWRJbWFnZSYsIGJvb2wgaXNBbmltYXRpbmcsIGNvbnN0IEludFJlY3QqIGNo
YW5nZVJlY3QpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVtb3ZlQ2FjaGVkSW1hZ2VDbGllbnQoQ2Fj
aGVkSW1hZ2UmKSBmaW5hbDsKIAogICAgIGJvb2wgZ2V0TGVhZGluZ0Nvcm5lcihGbG9hdFBvaW50
JiBvdXRwdXQsIGJvb2wmIGluc2lkZUZpeGVkKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDbGllbnRzLmgJKHJldmlzaW9uIDIxNTkwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNsaWVudHMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaW52YWxpZGF0
ZUNvbnRlbnRzQW5kUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgcikgZmluYWwKICAgICB7Ci0gICAg
ICAgIC8vIElmIG1faW1hZ2UtPm1fcGFnZSBpcyBudWxsLCB3ZSdyZSBiZWluZyBkZXN0cnVjdGVk
LCBkb24ndCBmaXJlIGNoYW5nZWRJblJlY3QoKSBpbiB0aGF0IGNhc2UuCisgICAgICAgIC8vIElm
IG1faW1hZ2UtPm1fcGFnZSBpcyBudWxsLCB3ZSdyZSBiZWluZyBkZXN0cnVjdGVkLgogICAgICAg
ICBpZiAoIW1faW1hZ2UgfHwgIW1faW1hZ2UtPm1fcGFnZSkKICAgICAgICAgICAgIHJldHVybjsK
IApAQCAtNjAsMTAgKzYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFpbWFnZU9ic2VydmVy
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmIChtX2ltYWdlLT5pc0FuaW1hdGlu
ZygpKQotICAgICAgICAgICAgaW1hZ2VPYnNlcnZlci0+YW5pbWF0aW9uQWR2YW5jZWQobV9pbWFn
ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGltYWdlT2JzZXJ2ZXItPmNoYW5nZWRJblJl
Y3QobV9pbWFnZSwgJnIpOworICAgICAgICBpbWFnZU9ic2VydmVyLT5pbWFnZUZyYW1lQXZhaWxh
YmxlKG1faW1hZ2UsIG1faW1hZ2UtPmlzQW5pbWF0aW5nKCksICZyKTsKICAgICB9CiAgICAgCiAg
ICAgU1ZHSW1hZ2UqIG1faW1hZ2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308577</attachid>
            <date>2017-04-28 12:45:59 -0700</date>
            <delta_ts>2017-04-28 13:05:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171410-20170428124558.patch</filename>
            <type>text/plain</type>
            <size>23352</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNTkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE3LTA0LTI4ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgVW5pZnkgaG93
IEJpdG1hcEltYWdlIGhhbmRsZXMgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGRlY29kZWQgZm9yIGxh
cmdlIGFuZCBhbmltYXRlZCBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MTQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNl
ci4KKworICAgICAgICBSZW5hbWUgc29tZSBmdW5jdGlvbnMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8g
YW5pbWF0aW9uIGZyYW1lIGF2YWlsYWJpbGl0eS4KKyAgICAgICAgTWFrZSBCaXRtYXBJbWFnZSBj
YWxsIEltYWdlT2JzZXJ2ZXI6OmltYWdlRnJhbWVBdmFpbGFibGUoKSB3aGVuZXZlciBhIAorICAg
ICAgICBmcmFtZSBpcyBhdmFpbGFibGUgcmVnYXJkbGVzcyBpdCBpcyBmb3IgYW4gYW5pbWF0ZWQg
b3IgZm9yIGEgbGFyZ2UgaW1hZ2UuCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6aXNWaXNpYmxlSW5WaWV3
cG9ydCk6CisgICAgICAgICogaHRtbC9NZWRpYUVsZW1lbnRTZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRWxlbWVudFNlc3Npb246OmF1dG9wbGF5UGVybWl0dGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzTWFpbkNvbnRlbnRGb3JQdXJwb3Nlc09mQXV0b3BsYXkpOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRJbWFnZTo6Q2FjaGVkSW1hZ2VPYnNlcnZlcjo6aW1hZ2VGcmFtZUF2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2VGcmFtZUF2YWlsYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZl
SGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpDYWNoZWRJ
bWFnZU9ic2VydmVyOjphbmltYXRpb25BZHZhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRJbWFnZTo6YW5pbWF0aW9uQWR2YW5jZWQpOiBEZWxldGVkLgorICAgICAgICAq
IGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2VDbGllbnQ6Omlt
YWdlRnJhbWVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2VDbGllbnQ6
Om5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjppbnRlcm5hbEFkdmFuY2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OmltYWdlRnJhbWVBdmFpbGFibGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpuZXdGcmFtZU5hdGl2ZUltYWdlQXZhaWxhYmxlQXRJbmRleCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Omlt
YWdlRnJhbWVBdmFpbGFibGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuZXdG
cmFtZU5hdGl2ZUltYWdlQXZhaWxhYmxlQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6Y2FjaGVBc3luY0ZyYW1lTmF0aXZlSW1hZ2VBdEluZGV4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VUeXBlcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OlJlbmRlckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c2hvdWxkUmVwYWludEluVmlzaWJs
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6aW1hZ2VGcmFtZUF2YWls
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZXBhaW50Rm9yUGF1c2Vk
SW1hZ2VBbmltYXRpb25zSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkUmVwYWlu
dEZvckltYWdlQW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6Om5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6dXBkYXRlVmlzaWJsZVZp
ZXdwb3J0UmVjdCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2xpZW50cy5oOgor
CiAyMDE3LTA0LTI4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V2ViR1BVXSBMYWJlbCBNVExDb21tYW5kUXVldWVzIHdpdGggYSBwcmVmaXggZm9yIGludGVybmFs
IHRlbGVtZXRyeQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyMTU5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDEwLDcgKzc0MTAsNyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnJlc2V0UGxheWJhY2tTZXNzCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzVmlz
aWJsZUluVmlld3BvcnQoKSBjb25zdAogewogICAgIGF1dG8gcmVuZGVyZXIgPSB0aGlzLT5yZW5k
ZXJlcigpOwotICAgIHJldHVybiByZW5kZXJlciAmJiByZW5kZXJlci0+dmlzaWJsZUluVmlld3Bv
cnRTdGF0ZSgpID09IFJlbmRlckVsZW1lbnQ6OlZpc2libGVJblZpZXdwb3J0OworICAgIHJldHVy
biByZW5kZXJlciAmJiByZW5kZXJlci0+dmlzaWJsZUluVmlld3BvcnRTdGF0ZSgpID09IFZpc2li
bGVJblZpZXdwb3J0U3RhdGU6OlllczsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRh
dGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL01l
ZGlhRWxlbWVudFNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
TWVkaWFFbGVtZW50U2Vzc2lvbi5jcHAJKHJldmlzaW9uIDIxNTkwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3
ICsyMDksNyBAQCBib29sIE1lZGlhRWxlbWVudFNlc3Npb246OmF1dG9wbGF5UGVybWl0CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAocmVuZGVyZXItPnZpZXcoKS5mcmFtZVZpZXcoKS5p
c09mZnNjcmVlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHJlbmRlcmVyLT52
aXNpYmxlSW5WaWV3cG9ydFN0YXRlKCkgIT0gUmVuZGVyRWxlbWVudDo6VmlzaWJsZUluVmlld3Bv
cnQpCisgICAgaWYgKHJlbmRlcmVyLT52aXNpYmxlSW5WaWV3cG9ydFN0YXRlKCkgIT0gVmlzaWJs
ZUluVmlld3BvcnRTdGF0ZTo6WWVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC02NjIsNyArNjYyLDcgQEAgc3RhdGljIGJvb2wgaXNNYWluQ29udGVudEZv
clB1cnBvc2VzT2ZBdQogICAgIC8vIHRoZXkgYXJlIHNjcm9sbGVkIG9mZiB0aGUgcGFnZS4KICAg
ICBpZiAocmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXItPnZpc2libGVJblZpZXdwb3J0U3RhdGUo
KSAhPSBSZW5kZXJFbGVtZW50OjpWaXNpYmxlSW5WaWV3cG9ydCAmJiAhZWxlbWVudC5pc1BsYXlp
bmcoKSkKKyAgICBpZiAocmVuZGVyZXItPnZpc2libGVJblZpZXdwb3J0U3RhdGUoKSAhPSBWaXNp
YmxlSW5WaWV3cG9ydFN0YXRlOjpZZXMgJiYgIWVsZW1lbnQuaXNQbGF5aW5nKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIE1haW4gY29udGVudCBlbGVtZW50cyBtdXN0IGJlIGlu
IHRoZSBtYWluIGZyYW1lLgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAyMTU5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksMzAgKzIzOSw2IEBA
IHZvaWQgQ2FjaGVkSW1hZ2U6OnNldENvbnRhaW5lclNpemVGb3JSZW4KICAgICBtX3N2Z0ltYWdl
Q2FjaGUtPnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihyZW5kZXJlciwgY29udGFpbmVyU2l6
ZSwgY29udGFpbmVyWm9vbSk7CiB9CiAKLWJvb2wgQ2FjaGVkSW1hZ2U6OnVzZXNJbWFnZUNvbnRh
aW5lclNpemUoKSBjb25zdAotewotICAgIGlmIChtX2ltYWdlKQotICAgICAgICByZXR1cm4gbV9p
bWFnZS0+dXNlc0NvbnRhaW5lclNpemUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QKLXsKLSAgICBpZiAo
bV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKTsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2
ZUhlaWdodCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIHJldHVybiBtX2lt
YWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBMYXlv
dXRTaXplIENhY2hlZEltYWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllciwgU2l6ZVR5cGUgc2l6ZVR5cGUpCiB7CiAg
ICAgaWYgKCFtX2ltYWdlKQpAQCAtMzY2LDEwICszNDIsMTAgQEAgdm9pZCBDYWNoZWRJbWFnZTo6
Q2FjaGVkSW1hZ2VPYnNlcnZlcjo6ZAogICAgICAgICBjYWNoZWRJbWFnZS0+ZGlkRHJhdyhpbWFn
ZSk7CiB9CiAKLXZvaWQgQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlT2JzZXJ2ZXI6OmFuaW1hdGlv
bkFkdmFuY2VkKGNvbnN0IEltYWdlKiBpbWFnZSkKK3ZvaWQgQ2FjaGVkSW1hZ2U6OkNhY2hlZElt
YWdlT2JzZXJ2ZXI6OmltYWdlRnJhbWVBdmFpbGFibGUoY29uc3QgSW1hZ2UqIGltYWdlLCBJbWFn
ZUFuaW1hdGluZ1N0YXRlIGFuaW1hdGluZ1N0YXRlLCBjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0
KQogewogICAgIGZvciAoYXV0byBjYWNoZWRJbWFnZSA6IG1fY2FjaGVkSW1hZ2VzKQotICAgICAg
ICBjYWNoZWRJbWFnZS0+YW5pbWF0aW9uQWR2YW5jZWQoaW1hZ2UpOworICAgICAgICBjYWNoZWRJ
bWFnZS0+aW1hZ2VGcmFtZUF2YWlsYWJsZShpbWFnZSwgYW5pbWF0aW5nU3RhdGUsIGNoYW5nZVJl
Y3QpOwogfQogCiB2b2lkIENhY2hlZEltYWdlOjpDYWNoZWRJbWFnZU9ic2VydmVyOjpjaGFuZ2Vk
SW5SZWN0KGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCogcmVjdCkKQEAgLTUyMSwy
MiArNDk3LDIwIEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmRpZERyYXcoY29uc3QgSW1hZ2UqIGkKICAg
ICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWNjZXNzRGVjb2RlZERhdGEodGltZVN0YW1wKTsKIH0KIAot
dm9pZCBDYWNoZWRJbWFnZTo6YW5pbWF0aW9uQWR2YW5jZWQoY29uc3QgSW1hZ2UqIGltYWdlKQor
dm9pZCBDYWNoZWRJbWFnZTo6aW1hZ2VGcmFtZUF2YWlsYWJsZShjb25zdCBJbWFnZSogaW1hZ2Us
IEltYWdlQW5pbWF0aW5nU3RhdGUgYW5pbWF0aW5nU3RhdGUsIGNvbnN0IEludFJlY3QqIGNoYW5n
ZVJlY3QpCiB7CiAgICAgaWYgKCFpbWFnZSB8fCBpbWFnZSAhPSBtX2ltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBib29sIHNob3VsZFBhdXNlQW5pbWF0aW9uID0gdHJ1ZTsKLQogICAgIENh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZEltYWdlQ2xpZW50PiBjbGllbnRXYWxrZXIo
bV9jbGllbnRzKTsKKyAgICBWaXNpYmxlSW5WaWV3cG9ydFN0YXRlIHZpc2libGVTdGF0ZSA9IFZp
c2libGVJblZpZXdwb3J0U3RhdGU6Ok5vOworCiAgICAgd2hpbGUgKENhY2hlZEltYWdlQ2xpZW50
KiBjbGllbnQgPSBjbGllbnRXYWxrZXIubmV4dCgpKSB7Ci0gICAgICAgIGJvb2wgY2FuUGF1c2Ug
PSBmYWxzZTsKLSAgICAgICAgY2xpZW50LT5uZXdJbWFnZUFuaW1hdGlvbkZyYW1lQXZhaWxhYmxl
KCp0aGlzLCBjYW5QYXVzZSk7Ci0gICAgICAgIGlmICghY2FuUGF1c2UpCi0gICAgICAgICAgICBz
aG91bGRQYXVzZUFuaW1hdGlvbiA9IGZhbHNlOworICAgICAgICBpZiAoY2xpZW50LT5pbWFnZUZy
YW1lQXZhaWxhYmxlKCp0aGlzLCBhbmltYXRpbmdTdGF0ZSwgY2hhbmdlUmVjdCkgPT0gVmlzaWJs
ZUluVmlld3BvcnRTdGF0ZTo6WWVzKQorICAgICAgICAgICAgdmlzaWJsZVN0YXRlID0gVmlzaWJs
ZUluVmlld3BvcnRTdGF0ZTo6WWVzOwogICAgIH0KIAotICAgIGlmIChzaG91bGRQYXVzZUFuaW1h
dGlvbikKKyAgICBpZiAodmlzaWJsZVN0YXRlID09IFZpc2libGVJblZpZXdwb3J0U3RhdGU6Ok5v
ICYmIGFuaW1hdGluZ1N0YXRlID09IEltYWdlQW5pbWF0aW5nU3RhdGU6OlllcykKICAgICAgICAg
bV9pbWFnZS0+c3RvcEFuaW1hdGlvbigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMjE1OTA0KQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkgKzY0
LDkgQEAgcHVibGljOgogICAgIGJvb2wgY2FuUmVuZGVyKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyKSB7IHJldHVybiAhZXJyb3JPY2N1cnJlZCgpICYmICFp
bWFnZVNpemVGb3JSZW5kZXJlcihyZW5kZXJlciwgbXVsdGlwbGllcikuaXNFbXB0eSgpOyB9CiAK
ICAgICB2b2lkIHNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihjb25zdCBDYWNoZWRJbWFnZUNs
aWVudCosIGNvbnN0IExheW91dFNpemUmLCBmbG9hdCk7Ci0gICAgYm9vbCB1c2VzSW1hZ2VDb250
YWluZXJTaXplKCkgY29uc3Q7Ci0gICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25z
dDsKLSAgICBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKKyAgICBib29sIHVz
ZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlICYmIG1faW1hZ2Ut
PnVzZXNDb250YWluZXJTaXplKCk7IH0KKyAgICBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgJiYgbV9pbWFnZS0+aGFzUmVsYXRpdmVXaWR0aCgpOyB9
CisgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZSAmJiBtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpOyB9CiAKICAgICB2b2lkIGFkZERhdGFC
dWZmZXIoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNo
YXJlZEJ1ZmZlciopIG92ZXJyaWRlOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHZvaWQgZGVjb2RlZFNpemVDaGFuZ2VkKGNvbnN0IEltYWdlKiwgbG9uZyBsb25nIGRlbHRh
KSBmaW5hbDsKICAgICAgICAgdm9pZCBkaWREcmF3KGNvbnN0IEltYWdlKikgZmluYWw7CiAKLSAg
ICAgICAgdm9pZCBhbmltYXRpb25BZHZhbmNlZChjb25zdCBJbWFnZSopIGZpbmFsOworICAgICAg
ICB2b2lkIGltYWdlRnJhbWVBdmFpbGFibGUoY29uc3QgSW1hZ2UqLCBJbWFnZUFuaW1hdGluZ1N0
YXRlLCBjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0ID0gbnVsbHB0cikgZmluYWw7CiAgICAgICAg
IHZvaWQgY2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSosIGNvbnN0IEludFJlY3QqKSBmaW5hbDsK
IAogICAgICAgICBWZWN0b3I8Q2FjaGVkSW1hZ2UqPiBtX2NhY2hlZEltYWdlczsKQEAgLTEzOSw3
ICsxMzksNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkZWNvZGVkU2l6ZUNoYW5nZWQoY29uc3Qg
SW1hZ2UqLCBsb25nIGxvbmcgZGVsdGEpOwogICAgIHZvaWQgZGlkRHJhdyhjb25zdCBJbWFnZSop
OwotICAgIHZvaWQgYW5pbWF0aW9uQWR2YW5jZWQoY29uc3QgSW1hZ2UqKTsKKyAgICB2b2lkIGlt
YWdlRnJhbWVBdmFpbGFibGUoY29uc3QgSW1hZ2UqLCBJbWFnZUFuaW1hdGluZ1N0YXRlLCBjb25z
dCBJbnRSZWN0KiBjaGFuZ2VSZWN0ID0gbnVsbHB0cik7CiAgICAgdm9pZCBjaGFuZ2VkSW5SZWN0
KGNvbnN0IEltYWdlKiwgY29uc3QgSW50UmVjdCopOwogCiAgICAgdm9pZCBhZGRJbmNyZW1lbnRh
bERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaAkocmV2aXNpb24gMjE1OTA0KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDEyICsyMywxNSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkltYWdlVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDYWNoZWRJbWFnZTsKIGNsYXNzIEludFJlY3Q7CiAKK2VudW0gY2xh
c3MgVmlzaWJsZUluVmlld3BvcnRTdGF0ZSB7IFVua25vd24sIFllcywgTm8gfTsKKwogY2xhc3Mg
Q2FjaGVkSW1hZ2VDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVibGlj
OgogICAgIHZpcnR1YWwgfkNhY2hlZEltYWdlQ2xpZW50KCkgeyB9CkBAIC00MCw3ICs0Myw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29u
c3QgSW50UmVjdCogPSBudWxscHRyKSB7IH0KIAogICAgIC8vIENhbGxlZCB3aGVuIEdJRiBhbmlt
YXRpb24gcHJvZ3Jlc3Nlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbmV3SW1hZ2VBbmltYXRpb25GcmFt
ZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYgaW1hZ2UsIGJvb2wmIGNhblBhdXNlKSB7IGltYWdlQ2hh
bmdlZCgmaW1hZ2UpOyBjYW5QYXVzZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIFZpc2libGVJblZp
ZXdwb3J0U3RhdGUgaW1hZ2VGcmFtZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYgaW1hZ2UsIEltYWdl
QW5pbWF0aW5nU3RhdGUsIGNvbnN0IEludFJlY3QqIGNoYW5nZVJlY3QpIHsgaW1hZ2VDaGFuZ2Vk
KCZpbWFnZSwgY2hhbmdlUmVjdCk7IHJldHVybiBWaXNpYmxlSW5WaWV3cG9ydFN0YXRlOjpObzsg
fQogCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZUNhY2hlZEltYWdlQ2xpZW50KENhY2hlZElt
YWdlJikgeyB9CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjE1OTA0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTEs
NyArNDExLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aQogICAg
IGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KGZhbHNlKTsKIAogICAgIGlmIChpbWFnZU9i
c2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+YW5pbWF0aW9uQWR2YW5jZWQodGhp
cyk7CisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+aW1hZ2VGcmFtZUF2YWlsYWJsZSh0aGlzLCBJ
bWFnZUFuaW1hdGluZ1N0YXRlOjpZZXMpOwogCiAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdl
OjolcyAtICVwIC0gdXJsOiAlcyBbbV9jdXJyZW50RnJhbWUgPSAlbGRdIiwgX19GVU5DVElPTl9f
LCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX2N1cnJlbnRGcmFt
ZSk7CiB9CkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6cmVzZXRBbmltYXRp
b24oKQogICAgIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KHRydWUpOwogfQogCi12b2lk
IEJpdG1hcEltYWdlOjpuZXdGcmFtZU5hdGl2ZUltYWdlQXZhaWxhYmxlQXRJbmRleChzaXplX3Qg
aW5kZXgpCit2b2lkIEJpdG1hcEltYWdlOjppbWFnZUZyYW1lQXZhaWxhYmxlQXRJbmRleChzaXpl
X3QgaW5kZXgpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKICAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtyZXF1ZXN0ZWQgZnJhbWUgJWxkIGlzIG5v
dyBhdmFpbGFibGVdIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCBpbmRleCk7CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6bmV3RnJhbWVOYXRpdmVJbWFnZUF2YQogICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1h
cEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyBbZWFybHlGcmFtZUNvdW50ID0gJWxkIG5leHRGcmFt
ZSA9ICVsZF0iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksICsrbV9lYXJseUZyYW1lQ291bnQsIGluZGV4KTsKICAgICB9IGVsc2UgewogICAg
ICAgICBBU1NFUlQoaW5kZXggPT0gbV9jdXJyZW50RnJhbWUgJiYgIW1fY3VycmVudEZyYW1lKTsK
LSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5jaGFuZ2VkSW5SZWN0KHRoaXMsIG51bGxwdHIpOwor
ICAgICAgICBpbWFnZU9ic2VydmVyKCktPmltYWdlRnJhbWVBdmFpbGFibGUodGhpcywgSW1hZ2VB
bmltYXRpbmdTdGF0ZTo6Tm8pOwogICAgICAgICAKICAgICAgICAgaWYgKG1fc291cmNlLmlzQXN5
bmNEZWNvZGluZ1F1ZXVlSWRsZSgpKQogICAgICAgICAgICAgbV9zb3VyY2Uuc3RvcEFzeW5jRGVj
b2RpbmdRdWV1ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCShyZXZpc2lvbiAyMTU5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0
LDcgQEAgcHJvdGVjdGVkOgogICAgIC8vIGF1dG9tYXRpY2FsbHkgcGF1c2Ugb25jZSBhbGwgb2Jz
ZXJ2ZXJzIG5vIGxvbmdlciB3YW50IHRvIHJlbmRlciB0aGUgaW1hZ2UgYW55d2hlcmUuCiAgICAg
dm9pZCBzdG9wQW5pbWF0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXNldEFuaW1hdGlvbigp
IG92ZXJyaWRlOwotICAgIHZvaWQgbmV3RnJhbWVOYXRpdmVJbWFnZUF2YWlsYWJsZUF0SW5kZXgo
c2l6ZV90KSBvdmVycmlkZTsKKyAgICB2b2lkIGltYWdlRnJhbWVBdmFpbGFibGVBdEluZGV4KHNp
emVfdCkgb3ZlcnJpZGU7CiAKICAgICAvLyBIYW5kbGUgcGxhdGZvcm0tc3BlY2lmaWMgZGF0YQog
ICAgIHZvaWQgaW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZpc2lvbiAyMTU5MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyAr
MTMzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydEFuaW1hdGlvbigpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzdG9wQW5pbWF0aW9uKCkge30KICAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXRBbmltYXRpb24oKSB7fQotICAgIHZpcnR1YWwgdm9pZCBuZXdGcmFtZU5hdGl2ZUltYWdlQXZh
aWxhYmxlQXRJbmRleChzaXplX3QpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpbWFnZUZyYW1lQXZh
aWxhYmxlQXRJbmRleChzaXplX3QpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0FuaW1hdGluZygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgLy8gVHlwaWNhbGx5IHRoZSBDYWNo
ZWRJbWFnZSB0aGF0IG93bnMgdXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAJKHJldmlzaW9uIDIxNTkwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIEltYWdlRnJhbWVDYWNoZTo6Y2Fj
aGVBc3luY0ZyYW1lTmF0CiAKICAgICAvLyBOb3RpZnkgdGhlIGltYWdlIHdpdGggdGhlIHJlYWRp
bmVzcyBvZiB0aGUgbmV3IGZyYW1lIE5hdGl2ZUltYWdlLgogICAgIGlmIChtX2ltYWdlKQotICAg
ICAgICBtX2ltYWdlLT5uZXdGcmFtZU5hdGl2ZUltYWdlQXZhaWxhYmxlQXRJbmRleChpbmRleCk7
CisgICAgICAgIG1faW1hZ2UtPmltYWdlRnJhbWVBdmFpbGFibGVBdEluZGV4KGluZGV4KTsKIH0K
IAogUmVmPFdvcmtRdWV1ZT4gSW1hZ2VGcmFtZUNhY2hlOjpkZWNvZGluZ1F1ZXVlKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgJ
KHJldmlzaW9uIDIxNTkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlT2JzZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBJ
bWFnZU9ic2VydmVyX2gKICNkZWZpbmUgSW1hZ2VPYnNlcnZlcl9oCiAKKyNpbmNsdWRlICJJbWFn
ZVR5cGVzLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2U7CkBAIC00Myw3
ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaWREcmF3KGNvbnN0IEltYWdl
KikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdl
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbWFnZUZyYW1lQXZhaWxhYmxlKGNvbnN0IEltYWdl
KiwgSW1hZ2VBbmltYXRpbmdTdGF0ZSwgY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCA9IG51bGxw
dHIpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSosIGNv
bnN0IEludFJlY3QqIGNoYW5nZVJlY3QgPSBudWxscHRyKSA9IDA7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVR5cGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VUeXBlcy5oCShyZXZpc2lvbiAy
MTU5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVR5cGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDkgQEAgZW51bSBjbGFzcyBHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbiB7CiAgICAgQXBwbGllZCwKICAgICBJZ25vcmVkCiB9OwotICAgIAorCitl
bnVtIGNsYXNzIEltYWdlQW5pbWF0aW5nU3RhdGUgeyBZZXMsIE5vIH07CisKIGVudW0gY2xhc3Mg
RW5jb2RlZERhdGFTdGF0dXMgewogICAgIEVycm9yLAogICAgIFVua25vd24sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMTU5MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBpbmxpbmUgUmVuZGVyRWxlbWVudDo6UmVuZGVyRWxl
bWVudChDb250CiAgICAgLCBtX3JlbmRlckJsb2NrRmxvd0hhc01hcmt1cFRydW5jYXRpb24oZmFs
c2UpCiAgICAgLCBtX3JlbmRlckJsb2NrRmxvd0xpbmVMYXlvdXRQYXRoKFJlbmRlckJsb2NrRmxv
dzo6VW5kZXRlcm1pbmVkUGF0aCkKICAgICAsIG1faXNSZWdpc3RlcmVkRm9yVmlzaWJsZUluVmll
d3BvcnRDYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fdmlzaWJsZUluVmlld3BvcnRTdGF0ZShWaXNp
YmlsaXR5VW5rbm93bikKKyAgICAsIG1fdmlzaWJsZUluVmlld3BvcnRTdGF0ZShWaXNpYmxlSW5W
aWV3cG9ydFN0YXRlOjpVbmtub3duKQogICAgICwgbV9maXJzdENoaWxkKG51bGxwdHIpCiAgICAg
LCBtX2xhc3RDaGlsZChudWxscHRyKQogICAgICwgbV9zdHlsZShXVEZNb3ZlKHN0eWxlKSkKQEAg
LTE0MzMsMzAgKzE0MzMsMzAgQEAgYm9vbCBSZW5kZXJFbGVtZW50OjptYXlDYXVzZVJlcGFpbnRJ
bnNpZAogICAgIHJldHVybiB2aXNpYmxlUmVjdC5pbnRlcnNlY3RzKGVuY2xvc2luZ0ludFJlY3Qo
YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpKTsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxk
UmVwYWludEZvckltYWdlQW5pbWF0aW9uKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkKK2Jvb2wgUmVuZGVyRWxlbWVudDo6c2hvdWxkUmVw
YWludEluVmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpIGNvbnN0CiB7Ci0g
ICAgY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50ID0gcmVuZGVyZXIuZG9jdW1lbnQoKTsKLSAgICBp
ZiAoZG9jdW1lbnQuYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKQorICAgIGlmIChkb2N1
bWVudCgpLmFjdGl2ZURPTU9iamVjdHNBcmVTdXNwZW5kZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQor
ICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5pc09mZnNjcmVlbigp
KQorICAgIGlmICh2aWV3KCkuZnJhbWVWaWV3KCkuaXNPZmZzY3JlZW4oKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gVXNlIGJhY2tncm91bmQgcmVjdCBpZiB3ZSBhcmUgdGhlIHJv
b3Qgb3IgaWYgd2UgYXJlIHRoZSBib2R5IGFuZCB0aGUgYmFja2dyb3VuZCBpcyBwcm9wYWdhdGVk
IHRvIHRoZSByb290LgogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG92ZXJseSBjb25zZXJ2YXRpdmUg
YXMgdGhlIGltYWdlIG1heSBub3QgYmUgYSBiYWNrZ3JvdW5kLWltYWdlLCBpbiB3aGljaCBjYXNl
IGl0IHdpbGwgbm90CiAgICAgLy8gYmUgcHJvcGFnYXRlZCB0byB0aGUgcm9vdC4gQXQgdGhpcyBw
b2ludCwgd2UgdW5mb3J0dW5hdGVseSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgaW1hZ2UgYW55
bW9yZSBzbyB3ZQogICAgIC8vIGNhbiBubyBsb25nZXIgY2hlY2sgaWYgaXQgaXMgYSBiYWNrZ3Jv
dW5kIGltYWdlLgotICAgIGJvb2wgYmFja2dyb3VuZElzUGFpbnRlZEJ5Um9vdCA9IHJlbmRlcmVy
LmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKTsKLSAgICBpZiAocmVuZGVyZXIuaXNCb2R5KCkp
IHsKLSAgICAgICAgYXV0byYgcm9vdFJlbmRlcmVyID0gKnJlbmRlcmVyLnBhcmVudCgpOyAvLyBJ
ZiA8Ym9keT4gaGFzIGEgcmVuZGVyZXIgdGhlbiA8aHRtbD4gZG9lcyB0b28uCisgICAgYm9vbCBi
YWNrZ3JvdW5kSXNQYWludGVkQnlSb290ID0gaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpOwor
ICAgIGlmIChpc0JvZHkoKSkgeworICAgICAgICBhdXRvJiByb290UmVuZGVyZXIgPSAqcGFyZW50
KCk7IC8vIElmIDxib2R5PiBoYXMgYSByZW5kZXJlciB0aGVuIDxodG1sPiBkb2VzIHRvby4KICAg
ICAgICAgQVNTRVJUKHJvb3RSZW5kZXJlci5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpOwog
ICAgICAgICBBU1NFUlQoaXM8SFRNTEh0bWxFbGVtZW50Pihyb290UmVuZGVyZXIuZWxlbWVudCgp
KSk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgc2hhcmUgYm9keSBiYWNrZ3JvdW5kIHByb3Bh
Z2F0aW9uIGNvZGUuCiAgICAgICAgIGJhY2tncm91bmRJc1BhaW50ZWRCeVJvb3QgPSAhcm9vdFJl
bmRlcmVyLmhhc0JhY2tncm91bmQoKTsKIAogICAgIH0KLSAgICBMYXlvdXRSZWN0IGJhY2tncm91
bmRQYWludGluZ1JlY3QgPSBiYWNrZ3JvdW5kSXNQYWludGVkQnlSb290ID8gcmVuZGVyZXIudmll
dygpLmJhY2tncm91bmRSZWN0KCkgOiByZW5kZXJlci5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1Jl
Y3QoKTsKKworICAgIExheW91dFJlY3QgYmFja2dyb3VuZFBhaW50aW5nUmVjdCA9IGJhY2tncm91
bmRJc1BhaW50ZWRCeVJvb3QgPyB2aWV3KCkuYmFja2dyb3VuZFJlY3QoKSA6IGFic29sdXRlQ2xp
cHBlZE92ZXJmbG93UmVjdCgpOwogICAgIGlmICghdmlzaWJsZVJlY3QuaW50ZXJzZWN0cyhlbmNs
b3NpbmdJbnRSZWN0KGJhY2tncm91bmRQYWludGluZ1JlY3QpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkBAIC0xNDk0LDE2ICsxNDk0LDIxIEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6dmlzaWJs
ZUluVmlld3BvcnRTdGEKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZW5k
ZXJFbGVtZW50OjpuZXdJbWFnZUFuaW1hdGlvbkZyYW1lQXZhaWxhYmxlKENhY2hlZEltYWdlJiBp
bWFnZSwgYm9vbCYgY2FuUGF1c2UpCitWaXNpYmxlSW5WaWV3cG9ydFN0YXRlIFJlbmRlckVsZW1l
bnQ6OmltYWdlRnJhbWVBdmFpbGFibGUoQ2FjaGVkSW1hZ2UmIGltYWdlLCBJbWFnZUFuaW1hdGlu
Z1N0YXRlIGFuaW1hdGluZ1N0YXRlLCBjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0KQogewogICAg
IGF1dG8mIGZyYW1lVmlldyA9IHZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICBhdXRvIHZpc2libGVS
ZWN0ID0gZnJhbWVWaWV3LndpbmRvd1RvQ29udGVudHMoZnJhbWVWaWV3LndpbmRvd0NsaXBSZWN0
KCkpOwotICAgIGlmICghc2hvdWxkUmVwYWludEZvckltYWdlQW5pbWF0aW9uKCp0aGlzLCB2aXNp
YmxlUmVjdCkpIHsKKyAgICBib29sIHNob3VsZFJlcGFpbnQgPSBzaG91bGRSZXBhaW50SW5WaXNp
YmxlUmVjdCh2aXNpYmxlUmVjdCk7CisKKyAgICBpZiAoIXNob3VsZFJlcGFpbnQgJiYgYW5pbWF0
aW5nU3RhdGUgPT0gSW1hZ2VBbmltYXRpbmdTdGF0ZTo6WWVzKQogICAgICAgICB2aWV3KCkuYWRk
UmVuZGVyZXJXaXRoUGF1c2VkSW1hZ2VBbmltYXRpb25zKCp0aGlzLCBpbWFnZSk7Ci0gICAgICAg
IGNhblBhdXNlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbWFnZUNoYW5n
ZWQoJmltYWdlKTsKKworICAgIC8vIFN0YXRpYyBpbWFnZXMgc2hvdWxkIHJlcGFpbnQgZXZlbiBp
ZiB0aGV5IGFyZSBvdXRzaWRlIHRoZSB2aWV3cG9ydCByZWN0YW5nbGUKKyAgICAvLyBiZWNhdXNl
IHRoZXkgc2hvdWxkIGJlIGluc2lkZSB0aGUgVGlsZUNvdmVyYWdlUmVjdC4KKyAgICBpZiAoc2hv
dWxkUmVwYWludCB8fCBhbmltYXRpbmdTdGF0ZSA9PSBJbWFnZUFuaW1hdGluZ1N0YXRlOjpObykK
KyAgICAgICAgaW1hZ2VDaGFuZ2VkKCZpbWFnZSwgY2hhbmdlUmVjdCk7CisKKyAgICByZXR1cm4g
c2hvdWxkUmVwYWludCA/IFZpc2libGVJblZpZXdwb3J0U3RhdGU6OlllcyA6IFZpc2libGVJblZp
ZXdwb3J0U3RhdGU6Ok5vOwogfQogCiB2b2lkIFJlbmRlckVsZW1lbnQ6OmRpZFJlbW92ZUNhY2hl
ZEltYWdlQ2xpZW50KENhY2hlZEltYWdlJiBjYWNoZWRJbWFnZSkKQEAgLTE1MTUsNyArMTUyMCw3
IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6ZGlkUmVtb3ZlQ2FjaGVkSW1hZ2UKIGJvb2wgUmVuZGVy
RWxlbWVudDo6cmVwYWludEZvclBhdXNlZEltYWdlQW5pbWF0aW9uc0lmTmVlZGVkKGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0LCBDYWNoZWRJbWFnZSYgY2FjaGVkSW1hZ2UpCiB7CiAgICAgQVNT
RVJUKG1faGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zKTsKLSAgICBpZiAoIXNob3VsZFJlcGFpbnRG
b3JJbWFnZUFuaW1hdGlvbigqdGhpcywgdmlzaWJsZVJlY3QpKQorICAgIGlmICghc2hvdWxkUmVw
YWludEluVmlzaWJsZVJlY3QodmlzaWJsZVJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICByZXBhaW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmgJKHJldmlzaW9uIDIxNTkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsNyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGJvcmRlckltYWdlSXNMb2FkZWRBbmRDYW5CZVJlbmRlcmVkKCkgY29uc3Q7CiAg
ICAgYm9vbCBtYXlDYXVzZVJlcGFpbnRJbnNpZGVWaWV3cG9ydChjb25zdCBJbnRSZWN0KiB2aXNp
YmxlUmVjdCA9IG51bGxwdHIpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkUmVwYWludEluVmlzaWJs
ZVJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoaXMgcmVuZGVyZXIgcmVxdWlyZXMgYSBuZXcgc3RhY2tpbmcgY29udGV4dC4K
ICAgICBzdGF0aWMgYm9vbCBjcmVhdGVzR3JvdXBGb3JTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYp
OwpAQCAtMTg3LDExICsxODgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlckZvclZpc2li
bGVJblZpZXdwb3J0Q2FsbGJhY2soKTsKICAgICB2b2lkIHVucmVnaXN0ZXJGb3JWaXNpYmxlSW5W
aWV3cG9ydENhbGxiYWNrKCk7CiAKLSAgICBlbnVtIFZpc2libGVJblZpZXdwb3J0U3RhdGUgewot
ICAgICAgICBWaXNpYmlsaXR5VW5rbm93biwKLSAgICAgICAgVmlzaWJsZUluVmlld3BvcnQsCi0g
ICAgICAgIE5vdFZpc2libGVJblZpZXdwb3J0LAotICAgIH07CiAgICAgVmlzaWJsZUluVmlld3Bv
cnRTdGF0ZSB2aXNpYmxlSW5WaWV3cG9ydFN0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8VmlzaWJsZUluVmlld3BvcnRTdGF0ZT4obV92aXNpYmxlSW5WaWV3cG9ydFN0YXRlKTsgfQog
ICAgIHZvaWQgc2V0VmlzaWJsZUluVmlld3BvcnRTdGF0ZShWaXNpYmxlSW5WaWV3cG9ydFN0YXRl
KTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaWJsZUluVmlld3BvcnRTdGF0ZUNoYW5nZWQoKTsKQEAg
LTMxOCw3ICszMTQsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gY29tcHV0ZUZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2Fj
aGVkRmlyc3RMaW5lU3R5bGUoKTsKIAotICAgIHZvaWQgbmV3SW1hZ2VBbmltYXRpb25GcmFtZUF2
YWlsYWJsZShDYWNoZWRJbWFnZSYsIGJvb2wmIGNhblBhdXNlKSBmaW5hbDsKKyAgICBWaXNpYmxl
SW5WaWV3cG9ydFN0YXRlIGltYWdlRnJhbWVBdmFpbGFibGUoQ2FjaGVkSW1hZ2UmLCBJbWFnZUFu
aW1hdGluZ1N0YXRlLCBjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0KSBmaW5hbDsKICAgICB2b2lk
IGRpZFJlbW92ZUNhY2hlZEltYWdlQ2xpZW50KENhY2hlZEltYWdlJikgZmluYWw7CiAKICAgICBi
b29sIGdldExlYWRpbmdDb3JuZXIoRmxvYXRQb2ludCYgb3V0cHV0LCBib29sJiBpbnNpZGVGaXhl
ZCkgY29uc3Q7CkBAIC0zNDgsNyArMzQ0LDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3Jl
bmRlckJsb2NrRmxvd0xpbmVMYXlvdXRQYXRoIDogMjsKIAogICAgIHVuc2lnbmVkIG1faXNSZWdp
c3RlcmVkRm9yVmlzaWJsZUluVmlld3BvcnRDYWxsYmFjayA6IDE7Ci0gICAgdW5zaWduZWQgbV92
aXNpYmxlSW5WaWV3cG9ydFN0YXRlIDogMjsKKworICAgIFZpc2libGVJblZpZXdwb3J0U3RhdGUg
bV92aXNpYmxlSW5WaWV3cG9ydFN0YXRlOwogCiAgICAgUmVuZGVyT2JqZWN0KiBtX2ZpcnN0Q2hp
bGQ7CiAgICAgUmVuZGVyT2JqZWN0KiBtX2xhc3RDaGlsZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDIxNTkwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5MCw3ICsx
MzkwLDcgQEAgdm9pZCBSZW5kZXJWaWV3Ojp1cGRhdGVWaXNpYmxlVmlld3BvcnRSZQogICAgIHJl
c3VtZVBhdXNlZEltYWdlQW5pbWF0aW9uc0lmTmVlZGVkKHZpc2libGVSZWN0KTsKIAogICAgIGZv
ciAoYXV0byogcmVuZGVyZXIgOiBtX3Zpc2libGVJblZpZXdwb3J0UmVuZGVyZXJzKSB7Ci0gICAg
ICAgIGF1dG8gc3RhdGUgPSB2aXNpYmxlUmVjdC5pbnRlcnNlY3RzKGVuY2xvc2luZ0ludFJlY3Qo
cmVuZGVyZXItPmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKSkgPyBSZW5kZXJFbGVtZW50
OjpWaXNpYmxlSW5WaWV3cG9ydCA6IFJlbmRlckVsZW1lbnQ6Ok5vdFZpc2libGVJblZpZXdwb3J0
OworICAgICAgICBhdXRvIHN0YXRlID0gdmlzaWJsZVJlY3QuaW50ZXJzZWN0cyhlbmNsb3NpbmdJ
bnRSZWN0KHJlbmRlcmVyLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSkpID8gVmlzaWJs
ZUluVmlld3BvcnRTdGF0ZTo6WWVzIDogVmlzaWJsZUluVmlld3BvcnRTdGF0ZTo6Tm87CiAgICAg
ICAgIHJlbmRlcmVyLT5zZXRWaXNpYmxlSW5WaWV3cG9ydFN0YXRlKHN0YXRlKTsKICAgICB9CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VDbGllbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2xpZW50cy5o
CShyZXZpc2lvbiAyMTU5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2VDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGludmFsaWRhdGVDb250ZW50c0FuZFJvb3RWaWV3KGNvbnN0IEludFJlY3Qm
IHIpIGZpbmFsCiAgICAgewotICAgICAgICAvLyBJZiBtX2ltYWdlLT5tX3BhZ2UgaXMgbnVsbCwg
d2UncmUgYmVpbmcgZGVzdHJ1Y3RlZCwgZG9uJ3QgZmlyZSBjaGFuZ2VkSW5SZWN0KCkgaW4gdGhh
dCBjYXNlLgorICAgICAgICAvLyBJZiBtX2ltYWdlLT5tX3BhZ2UgaXMgbnVsbCwgd2UncmUgYmVp
bmcgZGVzdHJveWVkLgogICAgICAgICBpZiAoIW1faW1hZ2UgfHwgIW1faW1hZ2UtPm1fcGFnZSkK
ICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNjAsMTAgKzYwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgaWYgKCFpbWFnZU9ic2VydmVyKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlm
IChtX2ltYWdlLT5pc0FuaW1hdGluZygpKQotICAgICAgICAgICAgaW1hZ2VPYnNlcnZlci0+YW5p
bWF0aW9uQWR2YW5jZWQobV9pbWFnZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGltYWdl
T2JzZXJ2ZXItPmNoYW5nZWRJblJlY3QobV9pbWFnZSwgJnIpOworICAgICAgICBpbWFnZU9ic2Vy
dmVyLT5pbWFnZUZyYW1lQXZhaWxhYmxlKG1faW1hZ2UsIG1faW1hZ2UtPmlzQW5pbWF0aW5nKCkg
PyBJbWFnZUFuaW1hdGluZ1N0YXRlOjpZZXMgOiBJbWFnZUFuaW1hdGluZ1N0YXRlOjpObywgJnIp
OwogICAgIH0KICAgICAKICAgICBTVkdJbWFnZSogbV9pbWFnZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308584</attachid>
            <date>2017-04-28 13:05:28 -0700</date>
            <delta_ts>2017-04-28 15:37:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171410-20170428130528.patch</filename>
            <type>text/plain</type>
            <size>23458</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNTkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE3LTA0LTI4ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgVW5pZnkgaG93
IEJpdG1hcEltYWdlIGhhbmRsZXMgdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGRlY29kZWQgZm9yIGxh
cmdlIGFuZCBhbmltYXRlZCBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MTQxMAorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNl
ci4KKworICAgICAgICBSZW5hbWUgc29tZSBmdW5jdGlvbnMgd2hpY2ggYXJlIHJlbGF0ZWQgdG8g
YW5pbWF0aW9uIGZyYW1lIGF2YWlsYWJpbGl0eS4KKyAgICAgICAgTWFrZSBCaXRtYXBJbWFnZSBj
YWxsIEltYWdlT2JzZXJ2ZXI6OmltYWdlRnJhbWVBdmFpbGFibGUoKSB3aGVuZXZlciBhIAorICAg
ICAgICBmcmFtZSBpcyBhdmFpbGFibGUgcmVnYXJkbGVzcyBpdCBpcyBmb3IgYW4gYW5pbWF0ZWQg
b3IgZm9yIGEgbGFyZ2UgaW1hZ2UuCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6aXNWaXNpYmxlSW5WaWV3
cG9ydCk6CisgICAgICAgICogaHRtbC9NZWRpYUVsZW1lbnRTZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhRWxlbWVudFNlc3Npb246OmF1dG9wbGF5UGVybWl0dGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzTWFpbkNvbnRlbnRGb3JQdXJwb3Nlc09mQXV0b3BsYXkpOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRJbWFnZTo6Q2FjaGVkSW1hZ2VPYnNlcnZlcjo6aW1hZ2VGcmFtZUF2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2VGcmFtZUF2YWlsYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppbWFnZUhhc1JlbGF0aXZl
SGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpDYWNoZWRJ
bWFnZU9ic2VydmVyOjphbmltYXRpb25BZHZhbmNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRJbWFnZTo6YW5pbWF0aW9uQWR2YW5jZWQpOiBEZWxldGVkLgorICAgICAgICAq
IGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2VDbGllbnQ6Omlt
YWdlRnJhbWVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2VDbGllbnQ6
Om5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjppbnRlcm5hbEFkdmFuY2VBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OmltYWdlRnJhbWVBdmFpbGFibGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpuZXdGcmFtZU5hdGl2ZUltYWdlQXZhaWxhYmxlQXRJbmRleCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Omlt
YWdlRnJhbWVBdmFpbGFibGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuZXdG
cmFtZU5hdGl2ZUltYWdlQXZhaWxhYmxlQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVDYWNoZTo6Y2FjaGVBc3luY0ZyYW1lTmF0aXZlSW1hZ2VBdEluZGV4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VUeXBlcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OlJlbmRlckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c2hvdWxkUmVwYWludEluVmlzaWJs
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6aW1hZ2VGcmFtZUF2YWls
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZXBhaW50Rm9yUGF1c2Vk
SW1hZ2VBbmltYXRpb25zSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkUmVwYWlu
dEZvckltYWdlQW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6Om5ld0ltYWdlQW5pbWF0aW9uRnJhbWVBdmFpbGFibGUpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6dXBkYXRlVmlzaWJsZVZp
ZXdwb3J0UmVjdCk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2xpZW50cy5oOgor
CiAyMDE3LTA0LTI4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBb
V2ViR1BVXSBMYWJlbCBNVExDb21tYW5kUXVldWVzIHdpdGggYSBwcmVmaXggZm9yIGludGVybmFs
IHRlbGVtZXRyeQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyMTU5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDEwLDcgKzc0MTAsNyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnJlc2V0UGxheWJhY2tTZXNzCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzVmlz
aWJsZUluVmlld3BvcnQoKSBjb25zdAogewogICAgIGF1dG8gcmVuZGVyZXIgPSB0aGlzLT5yZW5k
ZXJlcigpOwotICAgIHJldHVybiByZW5kZXJlciAmJiByZW5kZXJlci0+dmlzaWJsZUluVmlld3Bv
cnRTdGF0ZSgpID09IFJlbmRlckVsZW1lbnQ6OlZpc2libGVJblZpZXdwb3J0OworICAgIHJldHVy
biByZW5kZXJlciAmJiByZW5kZXJlci0+dmlzaWJsZUluVmlld3BvcnRTdGF0ZSgpID09IFZpc2li
bGVJblZpZXdwb3J0U3RhdGU6OlllczsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRh
dGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL01l
ZGlhRWxlbWVudFNlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
TWVkaWFFbGVtZW50U2Vzc2lvbi5jcHAJKHJldmlzaW9uIDIxNTkwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3
ICsyMDksNyBAQCBib29sIE1lZGlhRWxlbWVudFNlc3Npb246OmF1dG9wbGF5UGVybWl0CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAocmVuZGVyZXItPnZpZXcoKS5mcmFtZVZpZXcoKS5p
c09mZnNjcmVlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHJlbmRlcmVyLT52
aXNpYmxlSW5WaWV3cG9ydFN0YXRlKCkgIT0gUmVuZGVyRWxlbWVudDo6VmlzaWJsZUluVmlld3Bv
cnQpCisgICAgaWYgKHJlbmRlcmVyLT52aXNpYmxlSW5WaWV3cG9ydFN0YXRlKCkgIT0gVmlzaWJs
ZUluVmlld3BvcnRTdGF0ZTo6WWVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC02NjIsNyArNjYyLDcgQEAgc3RhdGljIGJvb2wgaXNNYWluQ29udGVudEZv
clB1cnBvc2VzT2ZBdQogICAgIC8vIHRoZXkgYXJlIHNjcm9sbGVkIG9mZiB0aGUgcGFnZS4KICAg
ICBpZiAocmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXItPnZpc2libGVJblZpZXdwb3J0U3RhdGUo
KSAhPSBSZW5kZXJFbGVtZW50OjpWaXNpYmxlSW5WaWV3cG9ydCAmJiAhZWxlbWVudC5pc1BsYXlp
bmcoKSkKKyAgICBpZiAocmVuZGVyZXItPnZpc2libGVJblZpZXdwb3J0U3RhdGUoKSAhPSBWaXNp
YmxlSW5WaWV3cG9ydFN0YXRlOjpZZXMgJiYgIWVsZW1lbnQuaXNQbGF5aW5nKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIE1haW4gY29udGVudCBlbGVtZW50cyBtdXN0IGJlIGlu
IHRoZSBtYWluIGZyYW1lLgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAyMTU5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksMzAgKzIzOSw2IEBA
IHZvaWQgQ2FjaGVkSW1hZ2U6OnNldENvbnRhaW5lclNpemVGb3JSZW4KICAgICBtX3N2Z0ltYWdl
Q2FjaGUtPnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihyZW5kZXJlciwgY29udGFpbmVyU2l6
ZSwgY29udGFpbmVyWm9vbSk7CiB9CiAKLWJvb2wgQ2FjaGVkSW1hZ2U6OnVzZXNJbWFnZUNvbnRh
aW5lclNpemUoKSBjb25zdAotewotICAgIGlmIChtX2ltYWdlKQotICAgICAgICByZXR1cm4gbV9p
bWFnZS0+dXNlc0NvbnRhaW5lclNpemUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QKLXsKLSAgICBpZiAo
bV9pbWFnZSkKLSAgICAgICAgcmV0dXJuIG1faW1hZ2UtPmhhc1JlbGF0aXZlV2lkdGgoKTsKLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDYWNoZWRJbWFnZTo6aW1hZ2VIYXNSZWxhdGl2
ZUhlaWdodCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIHJldHVybiBtX2lt
YWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBMYXlv
dXRTaXplIENhY2hlZEltYWdlOjppbWFnZVNpemVGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgZmxvYXQgbXVsdGlwbGllciwgU2l6ZVR5cGUgc2l6ZVR5cGUpCiB7CiAg
ICAgaWYgKCFtX2ltYWdlKQpAQCAtMzY2LDEwICszNDIsMTAgQEAgdm9pZCBDYWNoZWRJbWFnZTo6
Q2FjaGVkSW1hZ2VPYnNlcnZlcjo6ZAogICAgICAgICBjYWNoZWRJbWFnZS0+ZGlkRHJhdyhpbWFn
ZSk7CiB9CiAKLXZvaWQgQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlT2JzZXJ2ZXI6OmFuaW1hdGlv
bkFkdmFuY2VkKGNvbnN0IEltYWdlKiBpbWFnZSkKK3ZvaWQgQ2FjaGVkSW1hZ2U6OkNhY2hlZElt
YWdlT2JzZXJ2ZXI6OmltYWdlRnJhbWVBdmFpbGFibGUoY29uc3QgSW1hZ2UqIGltYWdlLCBJbWFn
ZUFuaW1hdGluZ1N0YXRlIGFuaW1hdGluZ1N0YXRlLCBjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0
KQogewogICAgIGZvciAoYXV0byBjYWNoZWRJbWFnZSA6IG1fY2FjaGVkSW1hZ2VzKQotICAgICAg
ICBjYWNoZWRJbWFnZS0+YW5pbWF0aW9uQWR2YW5jZWQoaW1hZ2UpOworICAgICAgICBjYWNoZWRJ
bWFnZS0+aW1hZ2VGcmFtZUF2YWlsYWJsZShpbWFnZSwgYW5pbWF0aW5nU3RhdGUsIGNoYW5nZVJl
Y3QpOwogfQogCiB2b2lkIENhY2hlZEltYWdlOjpDYWNoZWRJbWFnZU9ic2VydmVyOjpjaGFuZ2Vk
SW5SZWN0KGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCogcmVjdCkKQEAgLTUyMSwy
MiArNDk3LDIwIEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmRpZERyYXcoY29uc3QgSW1hZ2UqIGkKICAg
ICBDYWNoZWRSZXNvdXJjZTo6ZGlkQWNjZXNzRGVjb2RlZERhdGEodGltZVN0YW1wKTsKIH0KIAot
dm9pZCBDYWNoZWRJbWFnZTo6YW5pbWF0aW9uQWR2YW5jZWQoY29uc3QgSW1hZ2UqIGltYWdlKQor
dm9pZCBDYWNoZWRJbWFnZTo6aW1hZ2VGcmFtZUF2YWlsYWJsZShjb25zdCBJbWFnZSogaW1hZ2Us
IEltYWdlQW5pbWF0aW5nU3RhdGUgYW5pbWF0aW5nU3RhdGUsIGNvbnN0IEludFJlY3QqIGNoYW5n
ZVJlY3QpCiB7CiAgICAgaWYgKCFpbWFnZSB8fCBpbWFnZSAhPSBtX2ltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBib29sIHNob3VsZFBhdXNlQW5pbWF0aW9uID0gdHJ1ZTsKLQogICAgIENh
Y2hlZFJlc291cmNlQ2xpZW50V2Fsa2VyPENhY2hlZEltYWdlQ2xpZW50PiBjbGllbnRXYWxrZXIo
bV9jbGllbnRzKTsKKyAgICBWaXNpYmxlSW5WaWV3cG9ydFN0YXRlIHZpc2libGVTdGF0ZSA9IFZp
c2libGVJblZpZXdwb3J0U3RhdGU6Ok5vOworCiAgICAgd2hpbGUgKENhY2hlZEltYWdlQ2xpZW50
KiBjbGllbnQgPSBjbGllbnRXYWxrZXIubmV4dCgpKSB7Ci0gICAgICAgIGJvb2wgY2FuUGF1c2Ug
PSBmYWxzZTsKLSAgICAgICAgY2xpZW50LT5uZXdJbWFnZUFuaW1hdGlvbkZyYW1lQXZhaWxhYmxl
KCp0aGlzLCBjYW5QYXVzZSk7Ci0gICAgICAgIGlmICghY2FuUGF1c2UpCi0gICAgICAgICAgICBz
aG91bGRQYXVzZUFuaW1hdGlvbiA9IGZhbHNlOworICAgICAgICBpZiAoY2xpZW50LT5pbWFnZUZy
YW1lQXZhaWxhYmxlKCp0aGlzLCBhbmltYXRpbmdTdGF0ZSwgY2hhbmdlUmVjdCkgPT0gVmlzaWJs
ZUluVmlld3BvcnRTdGF0ZTo6WWVzKQorICAgICAgICAgICAgdmlzaWJsZVN0YXRlID0gVmlzaWJs
ZUluVmlld3BvcnRTdGF0ZTo6WWVzOwogICAgIH0KIAotICAgIGlmIChzaG91bGRQYXVzZUFuaW1h
dGlvbikKKyAgICBpZiAodmlzaWJsZVN0YXRlID09IFZpc2libGVJblZpZXdwb3J0U3RhdGU6Ok5v
ICYmIGFuaW1hdGluZ1N0YXRlID09IEltYWdlQW5pbWF0aW5nU3RhdGU6OlllcykKICAgICAgICAg
bV9pbWFnZS0+c3RvcEFuaW1hdGlvbigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMjE1OTA0KQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkgKzY0
LDkgQEAgcHVibGljOgogICAgIGJvb2wgY2FuUmVuZGVyKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyLCBmbG9hdCBtdWx0aXBsaWVyKSB7IHJldHVybiAhZXJyb3JPY2N1cnJlZCgpICYmICFp
bWFnZVNpemVGb3JSZW5kZXJlcihyZW5kZXJlciwgbXVsdGlwbGllcikuaXNFbXB0eSgpOyB9CiAK
ICAgICB2b2lkIHNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihjb25zdCBDYWNoZWRJbWFnZUNs
aWVudCosIGNvbnN0IExheW91dFNpemUmLCBmbG9hdCk7Ci0gICAgYm9vbCB1c2VzSW1hZ2VDb250
YWluZXJTaXplKCkgY29uc3Q7Ci0gICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlV2lkdGgoKSBjb25z
dDsKLSAgICBib29sIGltYWdlSGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdDsKKyAgICBib29sIHVz
ZXNJbWFnZUNvbnRhaW5lclNpemUoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlICYmIG1faW1hZ2Ut
PnVzZXNDb250YWluZXJTaXplKCk7IH0KKyAgICBib29sIGltYWdlSGFzUmVsYXRpdmVXaWR0aCgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgJiYgbV9pbWFnZS0+aGFzUmVsYXRpdmVXaWR0aCgpOyB9
CisgICAgYm9vbCBpbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZSAmJiBtX2ltYWdlLT5oYXNSZWxhdGl2ZUhlaWdodCgpOyB9CiAKICAgICB2b2lkIGFkZERhdGFC
dWZmZXIoU2hhcmVkQnVmZmVyJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaW5pc2hMb2FkaW5nKFNo
YXJlZEJ1ZmZlciopIG92ZXJyaWRlOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHZvaWQgZGVjb2RlZFNpemVDaGFuZ2VkKGNvbnN0IEltYWdlKiwgbG9uZyBsb25nIGRlbHRh
KSBmaW5hbDsKICAgICAgICAgdm9pZCBkaWREcmF3KGNvbnN0IEltYWdlKikgZmluYWw7CiAKLSAg
ICAgICAgdm9pZCBhbmltYXRpb25BZHZhbmNlZChjb25zdCBJbWFnZSopIGZpbmFsOworICAgICAg
ICB2b2lkIGltYWdlRnJhbWVBdmFpbGFibGUoY29uc3QgSW1hZ2UqLCBJbWFnZUFuaW1hdGluZ1N0
YXRlLCBjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0ID0gbnVsbHB0cikgZmluYWw7CiAgICAgICAg
IHZvaWQgY2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSosIGNvbnN0IEludFJlY3QqKSBmaW5hbDsK
IAogICAgICAgICBWZWN0b3I8Q2FjaGVkSW1hZ2UqPiBtX2NhY2hlZEltYWdlczsKQEAgLTEzOSw3
ICsxMzksNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkZWNvZGVkU2l6ZUNoYW5nZWQoY29uc3Qg
SW1hZ2UqLCBsb25nIGxvbmcgZGVsdGEpOwogICAgIHZvaWQgZGlkRHJhdyhjb25zdCBJbWFnZSop
OwotICAgIHZvaWQgYW5pbWF0aW9uQWR2YW5jZWQoY29uc3QgSW1hZ2UqKTsKKyAgICB2b2lkIGlt
YWdlRnJhbWVBdmFpbGFibGUoY29uc3QgSW1hZ2UqLCBJbWFnZUFuaW1hdGluZ1N0YXRlLCBjb25z
dCBJbnRSZWN0KiBjaGFuZ2VSZWN0ID0gbnVsbHB0cik7CiAgICAgdm9pZCBjaGFuZ2VkSW5SZWN0
KGNvbnN0IEltYWdlKiwgY29uc3QgSW50UmVjdCopOwogCiAgICAgdm9pZCBhZGRJbmNyZW1lbnRh
bERhdGFCdWZmZXIoU2hhcmVkQnVmZmVyJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2VDbGllbnQuaAkocmV2aXNpb24gMjE1OTA0KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDEyICsyMywxNSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkltYWdlVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDYWNoZWRJbWFnZTsKIGNsYXNzIEludFJlY3Q7CiAKK2VudW0gY2xh
c3MgVmlzaWJsZUluVmlld3BvcnRTdGF0ZSB7IFVua25vd24sIFllcywgTm8gfTsKKwogY2xhc3Mg
Q2FjaGVkSW1hZ2VDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVibGlj
OgogICAgIHZpcnR1YWwgfkNhY2hlZEltYWdlQ2xpZW50KCkgeyB9CkBAIC00MCw3ICs0Myw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29u
c3QgSW50UmVjdCogPSBudWxscHRyKSB7IH0KIAogICAgIC8vIENhbGxlZCB3aGVuIEdJRiBhbmlt
YXRpb24gcHJvZ3Jlc3Nlcy4KLSAgICB2aXJ0dWFsIHZvaWQgbmV3SW1hZ2VBbmltYXRpb25GcmFt
ZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYgaW1hZ2UsIGJvb2wmIGNhblBhdXNlKSB7IGltYWdlQ2hh
bmdlZCgmaW1hZ2UpOyBjYW5QYXVzZSA9IHRydWU7IH0KKyAgICB2aXJ0dWFsIFZpc2libGVJblZp
ZXdwb3J0U3RhdGUgaW1hZ2VGcmFtZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYgaW1hZ2UsIEltYWdl
QW5pbWF0aW5nU3RhdGUsIGNvbnN0IEludFJlY3QqIGNoYW5nZVJlY3QpIHsgaW1hZ2VDaGFuZ2Vk
KCZpbWFnZSwgY2hhbmdlUmVjdCk7IHJldHVybiBWaXNpYmxlSW5WaWV3cG9ydFN0YXRlOjpObzsg
fQogCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZUNhY2hlZEltYWdlQ2xpZW50KENhY2hlZElt
YWdlJikgeyB9CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjE1OTA0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTEs
NyArNDExLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6aW50ZXJuYWxBZHZhbmNlQW5pbWF0aQogICAg
IGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KGZhbHNlKTsKIAogICAgIGlmIChpbWFnZU9i
c2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+YW5pbWF0aW9uQWR2YW5jZWQodGhp
cyk7CisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+aW1hZ2VGcmFtZUF2YWlsYWJsZSh0aGlzLCBJ
bWFnZUFuaW1hdGluZ1N0YXRlOjpZZXMpOwogCiAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdl
OjolcyAtICVwIC0gdXJsOiAlcyBbbV9jdXJyZW50RnJhbWUgPSAlbGRdIiwgX19GVU5DVElPTl9f
LCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX2N1cnJlbnRGcmFt
ZSk7CiB9CkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6cmVzZXRBbmltYXRp
b24oKQogICAgIGRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KHRydWUpOwogfQogCi12b2lk
IEJpdG1hcEltYWdlOjpuZXdGcmFtZU5hdGl2ZUltYWdlQXZhaWxhYmxlQXRJbmRleChzaXplX3Qg
aW5kZXgpCit2b2lkIEJpdG1hcEltYWdlOjppbWFnZUZyYW1lQXZhaWxhYmxlQXRJbmRleChzaXpl
X3QgaW5kZXgpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKICAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2U6OiVzIC0gJXAgLSB1cmw6ICVzIFtyZXF1ZXN0ZWQgZnJhbWUgJWxkIGlzIG5v
dyBhdmFpbGFibGVdIiwgX19GVU5DVElPTl9fLCB0aGlzLCBzb3VyY2VVUkwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCBpbmRleCk7CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6bmV3RnJhbWVOYXRpdmVJbWFnZUF2YQogICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1h
cEltYWdlOjolcyAtICVwIC0gdXJsOiAlcyBbZWFybHlGcmFtZUNvdW50ID0gJWxkIG5leHRGcmFt
ZSA9ICVsZF0iLCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksICsrbV9lYXJseUZyYW1lQ291bnQsIGluZGV4KTsKICAgICB9IGVsc2UgewogICAg
ICAgICBBU1NFUlQoaW5kZXggPT0gbV9jdXJyZW50RnJhbWUgJiYgIW1fY3VycmVudEZyYW1lKTsK
LSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5jaGFuZ2VkSW5SZWN0KHRoaXMsIG51bGxwdHIpOwor
ICAgICAgICBpbWFnZU9ic2VydmVyKCktPmltYWdlRnJhbWVBdmFpbGFibGUodGhpcywgSW1hZ2VB
bmltYXRpbmdTdGF0ZTo6Tm8pOwogICAgICAgICAKICAgICAgICAgaWYgKG1fc291cmNlLmlzQXN5
bmNEZWNvZGluZ1F1ZXVlSWRsZSgpKQogICAgICAgICAgICAgbV9zb3VyY2Uuc3RvcEFzeW5jRGVj
b2RpbmdRdWV1ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCShyZXZpc2lvbiAyMTU5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0
LDcgQEAgcHJvdGVjdGVkOgogICAgIC8vIGF1dG9tYXRpY2FsbHkgcGF1c2Ugb25jZSBhbGwgb2Jz
ZXJ2ZXJzIG5vIGxvbmdlciB3YW50IHRvIHJlbmRlciB0aGUgaW1hZ2UgYW55d2hlcmUuCiAgICAg
dm9pZCBzdG9wQW5pbWF0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXNldEFuaW1hdGlvbigp
IG92ZXJyaWRlOwotICAgIHZvaWQgbmV3RnJhbWVOYXRpdmVJbWFnZUF2YWlsYWJsZUF0SW5kZXgo
c2l6ZV90KSBvdmVycmlkZTsKKyAgICB2b2lkIGltYWdlRnJhbWVBdmFpbGFibGVBdEluZGV4KHNp
emVfdCkgb3ZlcnJpZGU7CiAKICAgICAvLyBIYW5kbGUgcGxhdGZvcm0tc3BlY2lmaWMgZGF0YQog
ICAgIHZvaWQgaW52YWxpZGF0ZVBsYXRmb3JtRGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCShyZXZpc2lvbiAyMTU5MDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyAr
MTMzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydEFuaW1hdGlvbigpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzdG9wQW5pbWF0aW9uKCkge30KICAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXRBbmltYXRpb24oKSB7fQotICAgIHZpcnR1YWwgdm9pZCBuZXdGcmFtZU5hdGl2ZUltYWdlQXZh
aWxhYmxlQXRJbmRleChzaXplX3QpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpbWFnZUZyYW1lQXZh
aWxhYmxlQXRJbmRleChzaXplX3QpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0FuaW1hdGluZygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgLy8gVHlwaWNhbGx5IHRoZSBDYWNo
ZWRJbWFnZSB0aGF0IG93bnMgdXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAJKHJldmlzaW9uIDIxNTkwNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVDYWNoZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIEltYWdlRnJhbWVDYWNoZTo6Y2Fj
aGVBc3luY0ZyYW1lTmF0CiAKICAgICAvLyBOb3RpZnkgdGhlIGltYWdlIHdpdGggdGhlIHJlYWRp
bmVzcyBvZiB0aGUgbmV3IGZyYW1lIE5hdGl2ZUltYWdlLgogICAgIGlmIChtX2ltYWdlKQotICAg
ICAgICBtX2ltYWdlLT5uZXdGcmFtZU5hdGl2ZUltYWdlQXZhaWxhYmxlQXRJbmRleChpbmRleCk7
CisgICAgICAgIG1faW1hZ2UtPmltYWdlRnJhbWVBdmFpbGFibGVBdEluZGV4KGluZGV4KTsKIH0K
IAogUmVmPFdvcmtRdWV1ZT4gSW1hZ2VGcmFtZUNhY2hlOjpkZWNvZGluZ1F1ZXVlKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgJ
KHJldmlzaW9uIDIxNTkwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlT2JzZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBJ
bWFnZU9ic2VydmVyX2gKICNkZWZpbmUgSW1hZ2VPYnNlcnZlcl9oCiAKKyNpbmNsdWRlICJJbWFn
ZVR5cGVzLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2U7CkBAIC00Myw3
ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaWREcmF3KGNvbnN0IEltYWdl
KikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdl
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbWFnZUZyYW1lQXZhaWxhYmxlKGNvbnN0IEltYWdl
KiwgSW1hZ2VBbmltYXRpbmdTdGF0ZSwgY29uc3QgSW50UmVjdCogY2hhbmdlUmVjdCA9IG51bGxw
dHIpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSosIGNv
bnN0IEludFJlY3QqIGNoYW5nZVJlY3QgPSBudWxscHRyKSA9IDA7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVR5cGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VUeXBlcy5oCShyZXZpc2lvbiAy
MTU5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVR5cGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDkgQEAgZW51bSBjbGFzcyBHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbiB7CiAgICAgQXBwbGllZCwKICAgICBJZ25vcmVkCiB9OwotICAgIAorCitl
bnVtIGNsYXNzIEltYWdlQW5pbWF0aW5nU3RhdGUgeyBZZXMsIE5vIH07CisKIGVudW0gY2xhc3Mg
RW5jb2RlZERhdGFTdGF0dXMgewogICAgIEVycm9yLAogICAgIFVua25vd24sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMTU5MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBpbmxpbmUgUmVuZGVyRWxlbWVudDo6UmVuZGVyRWxl
bWVudChDb250CiAgICAgLCBtX3JlbmRlckJsb2NrRmxvd0hhc01hcmt1cFRydW5jYXRpb24oZmFs
c2UpCiAgICAgLCBtX3JlbmRlckJsb2NrRmxvd0xpbmVMYXlvdXRQYXRoKFJlbmRlckJsb2NrRmxv
dzo6VW5kZXRlcm1pbmVkUGF0aCkKICAgICAsIG1faXNSZWdpc3RlcmVkRm9yVmlzaWJsZUluVmll
d3BvcnRDYWxsYmFjayhmYWxzZSkKLSAgICAsIG1fdmlzaWJsZUluVmlld3BvcnRTdGF0ZShWaXNp
YmlsaXR5VW5rbm93bikKKyAgICAsIG1fdmlzaWJsZUluVmlld3BvcnRTdGF0ZShzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oVmlzaWJsZUluVmlld3BvcnRTdGF0ZTo6VW5rbm93bikpCiAgICAgLCBtX2Zp
cnN0Q2hpbGQobnVsbHB0cikKICAgICAsIG1fbGFzdENoaWxkKG51bGxwdHIpCiAgICAgLCBtX3N0
eWxlKFdURk1vdmUoc3R5bGUpKQpAQCAtMTQzMywzMCArMTQzMywzMCBAQCBib29sIFJlbmRlckVs
ZW1lbnQ6Om1heUNhdXNlUmVwYWludEluc2lkCiAgICAgcmV0dXJuIHZpc2libGVSZWN0LmludGVy
c2VjdHMoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSkpOwog
fQogCi1zdGF0aWMgYm9vbCBzaG91bGRSZXBhaW50Rm9ySW1hZ2VBbmltYXRpb24oY29uc3QgUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KQorYm9vbCBS
ZW5kZXJFbGVtZW50OjpzaG91bGRSZXBhaW50SW5WaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB2
aXNpYmxlUmVjdCkgY29uc3QKIHsKLSAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQgPSByZW5k
ZXJlci5kb2N1bWVudCgpOwotICAgIGlmIChkb2N1bWVudC5hY3RpdmVET01PYmplY3RzQXJlU3Vz
cGVuZGVkKCkpCisgICAgaWYgKGRvY3VtZW50KCkuYWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRl
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkudmlz
aWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgaWYgKHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXIudmlldygpLmZy
YW1lVmlldygpLmlzT2Zmc2NyZWVuKCkpCisgICAgaWYgKHZpZXcoKS5mcmFtZVZpZXcoKS5pc09m
ZnNjcmVlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBVc2UgYmFja2dyb3Vu
ZCByZWN0IGlmIHdlIGFyZSB0aGUgcm9vdCBvciBpZiB3ZSBhcmUgdGhlIGJvZHkgYW5kIHRoZSBi
YWNrZ3JvdW5kIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIHJvb3QuCiAgICAgLy8gRklYTUU6IFRoaXMg
aXMgb3Zlcmx5IGNvbnNlcnZhdGl2ZSBhcyB0aGUgaW1hZ2UgbWF5IG5vdCBiZSBhIGJhY2tncm91
bmQtaW1hZ2UsIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBub3QKICAgICAvLyBiZSBwcm9wYWdhdGVk
IHRvIHRoZSByb290LiBBdCB0aGlzIHBvaW50LCB3ZSB1bmZvcnR1bmF0ZWx5IGRvbid0IGhhdmUg
YWNjZXNzIHRvIHRoZSBpbWFnZSBhbnltb3JlIHNvIHdlCiAgICAgLy8gY2FuIG5vIGxvbmdlciBj
aGVjayBpZiBpdCBpcyBhIGJhY2tncm91bmQgaW1hZ2UuCi0gICAgYm9vbCBiYWNrZ3JvdW5kSXNQ
YWludGVkQnlSb290ID0gcmVuZGVyZXIuaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpOwotICAg
IGlmIChyZW5kZXJlci5pc0JvZHkoKSkgewotICAgICAgICBhdXRvJiByb290UmVuZGVyZXIgPSAq
cmVuZGVyZXIucGFyZW50KCk7IC8vIElmIDxib2R5PiBoYXMgYSByZW5kZXJlciB0aGVuIDxodG1s
PiBkb2VzIHRvby4KKyAgICBib29sIGJhY2tncm91bmRJc1BhaW50ZWRCeVJvb3QgPSBpc0RvY3Vt
ZW50RWxlbWVudFJlbmRlcmVyKCk7CisgICAgaWYgKGlzQm9keSgpKSB7CisgICAgICAgIGF1dG8m
IHJvb3RSZW5kZXJlciA9ICpwYXJlbnQoKTsgLy8gSWYgPGJvZHk+IGhhcyBhIHJlbmRlcmVyIHRo
ZW4gPGh0bWw+IGRvZXMgdG9vLgogICAgICAgICBBU1NFUlQocm9vdFJlbmRlcmVyLmlzRG9jdW1l
bnRFbGVtZW50UmVuZGVyZXIoKSk7CiAgICAgICAgIEFTU0VSVChpczxIVE1MSHRtbEVsZW1lbnQ+
KHJvb3RSZW5kZXJlci5lbGVtZW50KCkpKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBzaGFy
ZSBib2R5IGJhY2tncm91bmQgcHJvcGFnYXRpb24gY29kZS4KICAgICAgICAgYmFja2dyb3VuZElz
UGFpbnRlZEJ5Um9vdCA9ICFyb290UmVuZGVyZXIuaGFzQmFja2dyb3VuZCgpOwogCiAgICAgfQot
ICAgIExheW91dFJlY3QgYmFja2dyb3VuZFBhaW50aW5nUmVjdCA9IGJhY2tncm91bmRJc1BhaW50
ZWRCeVJvb3QgPyByZW5kZXJlci52aWV3KCkuYmFja2dyb3VuZFJlY3QoKSA6IHJlbmRlcmVyLmFi
c29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOworCisgICAgTGF5b3V0UmVjdCBiYWNrZ3JvdW5k
UGFpbnRpbmdSZWN0ID0gYmFja2dyb3VuZElzUGFpbnRlZEJ5Um9vdCA/IHZpZXcoKS5iYWNrZ3Jv
dW5kUmVjdCgpIDogYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CiAgICAgaWYgKCF2aXNp
YmxlUmVjdC5pbnRlcnNlY3RzKGVuY2xvc2luZ0ludFJlY3QoYmFja2dyb3VuZFBhaW50aW5nUmVj
dCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE0ODMsOSArMTQ4Myw5IEBAIHZvaWQg
UmVuZGVyRWxlbWVudDo6dW5yZWdpc3RlckZvclZpc2libGUKIAogdm9pZCBSZW5kZXJFbGVtZW50
OjpzZXRWaXNpYmxlSW5WaWV3cG9ydFN0YXRlKFZpc2libGVJblZpZXdwb3J0U3RhdGUgc3RhdGUp
CiB7Ci0gICAgaWYgKHN0YXRlID09IG1fdmlzaWJsZUluVmlld3BvcnRTdGF0ZSkKKyAgICBpZiAo
c3RhdGUgPT0gdmlzaWJsZUluVmlld3BvcnRTdGF0ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
bV92aXNpYmxlSW5WaWV3cG9ydFN0YXRlID0gc3RhdGU7CisgICAgbV92aXNpYmxlSW5WaWV3cG9y
dFN0YXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlKTsKICAgICB2aXNpYmxlSW5WaWV3
cG9ydFN0YXRlQ2hhbmdlZCgpOwogfQogCkBAIC0xNDk0LDE2ICsxNDk0LDIxIEBAIHZvaWQgUmVu
ZGVyRWxlbWVudDo6dmlzaWJsZUluVmlld3BvcnRTdGEKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotdm9pZCBSZW5kZXJFbGVtZW50OjpuZXdJbWFnZUFuaW1hdGlvbkZyYW1lQXZhaWxh
YmxlKENhY2hlZEltYWdlJiBpbWFnZSwgYm9vbCYgY2FuUGF1c2UpCitWaXNpYmxlSW5WaWV3cG9y
dFN0YXRlIFJlbmRlckVsZW1lbnQ6OmltYWdlRnJhbWVBdmFpbGFibGUoQ2FjaGVkSW1hZ2UmIGlt
YWdlLCBJbWFnZUFuaW1hdGluZ1N0YXRlIGFuaW1hdGluZ1N0YXRlLCBjb25zdCBJbnRSZWN0KiBj
aGFuZ2VSZWN0KQogewogICAgIGF1dG8mIGZyYW1lVmlldyA9IHZpZXcoKS5mcmFtZVZpZXcoKTsK
ICAgICBhdXRvIHZpc2libGVSZWN0ID0gZnJhbWVWaWV3LndpbmRvd1RvQ29udGVudHMoZnJhbWVW
aWV3LndpbmRvd0NsaXBSZWN0KCkpOwotICAgIGlmICghc2hvdWxkUmVwYWludEZvckltYWdlQW5p
bWF0aW9uKCp0aGlzLCB2aXNpYmxlUmVjdCkpIHsKKyAgICBib29sIHNob3VsZFJlcGFpbnQgPSBz
aG91bGRSZXBhaW50SW5WaXNpYmxlUmVjdCh2aXNpYmxlUmVjdCk7CisKKyAgICBpZiAoIXNob3Vs
ZFJlcGFpbnQgJiYgYW5pbWF0aW5nU3RhdGUgPT0gSW1hZ2VBbmltYXRpbmdTdGF0ZTo6WWVzKQog
ICAgICAgICB2aWV3KCkuYWRkUmVuZGVyZXJXaXRoUGF1c2VkSW1hZ2VBbmltYXRpb25zKCp0aGlz
LCBpbWFnZSk7Ci0gICAgICAgIGNhblBhdXNlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpbWFnZUNoYW5nZWQoJmltYWdlKTsKKworICAgIC8vIFN0YXRpYyBpbWFnZXMgc2hv
dWxkIHJlcGFpbnQgZXZlbiBpZiB0aGV5IGFyZSBvdXRzaWRlIHRoZSB2aWV3cG9ydCByZWN0YW5n
bGUKKyAgICAvLyBiZWNhdXNlIHRoZXkgc2hvdWxkIGJlIGluc2lkZSB0aGUgVGlsZUNvdmVyYWdl
UmVjdC4KKyAgICBpZiAoc2hvdWxkUmVwYWludCB8fCBhbmltYXRpbmdTdGF0ZSA9PSBJbWFnZUFu
aW1hdGluZ1N0YXRlOjpObykKKyAgICAgICAgaW1hZ2VDaGFuZ2VkKCZpbWFnZSwgY2hhbmdlUmVj
dCk7CisKKyAgICByZXR1cm4gc2hvdWxkUmVwYWludCA/IFZpc2libGVJblZpZXdwb3J0U3RhdGU6
OlllcyA6IFZpc2libGVJblZpZXdwb3J0U3RhdGU6Ok5vOwogfQogCiB2b2lkIFJlbmRlckVsZW1l
bnQ6OmRpZFJlbW92ZUNhY2hlZEltYWdlQ2xpZW50KENhY2hlZEltYWdlJiBjYWNoZWRJbWFnZSkK
QEAgLTE1MTUsNyArMTUyMCw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6ZGlkUmVtb3ZlQ2FjaGVk
SW1hZ2UKIGJvb2wgUmVuZGVyRWxlbWVudDo6cmVwYWludEZvclBhdXNlZEltYWdlQW5pbWF0aW9u
c0lmTmVlZGVkKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBDYWNoZWRJbWFnZSYgY2FjaGVk
SW1hZ2UpCiB7CiAgICAgQVNTRVJUKG1faGFzUGF1c2VkSW1hZ2VBbmltYXRpb25zKTsKLSAgICBp
ZiAoIXNob3VsZFJlcGFpbnRGb3JJbWFnZUFuaW1hdGlvbigqdGhpcywgdmlzaWJsZVJlY3QpKQor
ICAgIGlmICghc2hvdWxkUmVwYWludEluVmlzaWJsZVJlY3QodmlzaWJsZVJlY3QpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICByZXBhaW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHJldmlzaW9uIDIxNTkwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsx
MzgsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGJvcmRlckltYWdlSXNMb2FkZWRBbmRDYW5CZVJl
bmRlcmVkKCkgY29uc3Q7CiAgICAgYm9vbCBtYXlDYXVzZVJlcGFpbnRJbnNpZGVWaWV3cG9ydChj
b25zdCBJbnRSZWN0KiB2aXNpYmxlUmVjdCA9IG51bGxwdHIpIGNvbnN0OworICAgIGJvb2wgc2hv
dWxkUmVwYWludEluVmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpIGNvbnN0
OwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcmVuZGVyZXIgcmVxdWlyZXMgYSBuZXcg
c3RhY2tpbmcgY29udGV4dC4KICAgICBzdGF0aWMgYm9vbCBjcmVhdGVzR3JvdXBGb3JTdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYpOwpAQCAtMTg3LDExICsxODgsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZWdpc3RlckZvclZpc2libGVJblZpZXdwb3J0Q2FsbGJhY2soKTsKICAgICB2b2lkIHVucmVn
aXN0ZXJGb3JWaXNpYmxlSW5WaWV3cG9ydENhbGxiYWNrKCk7CiAKLSAgICBlbnVtIFZpc2libGVJ
blZpZXdwb3J0U3RhdGUgewotICAgICAgICBWaXNpYmlsaXR5VW5rbm93biwKLSAgICAgICAgVmlz
aWJsZUluVmlld3BvcnQsCi0gICAgICAgIE5vdFZpc2libGVJblZpZXdwb3J0LAotICAgIH07CiAg
ICAgVmlzaWJsZUluVmlld3BvcnRTdGF0ZSB2aXNpYmxlSW5WaWV3cG9ydFN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8VmlzaWJsZUluVmlld3BvcnRTdGF0ZT4obV92aXNpYmxlSW5W
aWV3cG9ydFN0YXRlKTsgfQogICAgIHZvaWQgc2V0VmlzaWJsZUluVmlld3BvcnRTdGF0ZShWaXNp
YmxlSW5WaWV3cG9ydFN0YXRlKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaWJsZUluVmlld3BvcnRT
dGF0ZUNoYW5nZWQoKTsKQEAgLTMxOCw3ICszMTQsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gY29tcHV0ZUZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CiAgICAg
dm9pZCBpbnZhbGlkYXRlQ2FjaGVkRmlyc3RMaW5lU3R5bGUoKTsKIAotICAgIHZvaWQgbmV3SW1h
Z2VBbmltYXRpb25GcmFtZUF2YWlsYWJsZShDYWNoZWRJbWFnZSYsIGJvb2wmIGNhblBhdXNlKSBm
aW5hbDsKKyAgICBWaXNpYmxlSW5WaWV3cG9ydFN0YXRlIGltYWdlRnJhbWVBdmFpbGFibGUoQ2Fj
aGVkSW1hZ2UmLCBJbWFnZUFuaW1hdGluZ1N0YXRlLCBjb25zdCBJbnRSZWN0KiBjaGFuZ2VSZWN0
KSBmaW5hbDsKICAgICB2b2lkIGRpZFJlbW92ZUNhY2hlZEltYWdlQ2xpZW50KENhY2hlZEltYWdl
JikgZmluYWw7CiAKICAgICBib29sIGdldExlYWRpbmdDb3JuZXIoRmxvYXRQb2ludCYgb3V0cHV0
LCBib29sJiBpbnNpZGVGaXhlZCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiAyMTU5MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTAsNyArMTM5MCw3IEBA
IHZvaWQgUmVuZGVyVmlldzo6dXBkYXRlVmlzaWJsZVZpZXdwb3J0UmUKICAgICByZXN1bWVQYXVz
ZWRJbWFnZUFuaW1hdGlvbnNJZk5lZWRlZCh2aXNpYmxlUmVjdCk7CiAKICAgICBmb3IgKGF1dG8q
IHJlbmRlcmVyIDogbV92aXNpYmxlSW5WaWV3cG9ydFJlbmRlcmVycykgewotICAgICAgICBhdXRv
IHN0YXRlID0gdmlzaWJsZVJlY3QuaW50ZXJzZWN0cyhlbmNsb3NpbmdJbnRSZWN0KHJlbmRlcmVy
LT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSkpID8gUmVuZGVyRWxlbWVudDo6VmlzaWJs
ZUluVmlld3BvcnQgOiBSZW5kZXJFbGVtZW50OjpOb3RWaXNpYmxlSW5WaWV3cG9ydDsKKyAgICAg
ICAgYXV0byBzdGF0ZSA9IHZpc2libGVSZWN0LmludGVyc2VjdHMoZW5jbG9zaW5nSW50UmVjdChy
ZW5kZXJlci0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpKSA/IFZpc2libGVJblZpZXdw
b3J0U3RhdGU6OlllcyA6IFZpc2libGVJblZpZXdwb3J0U3RhdGU6Ok5vOwogICAgICAgICByZW5k
ZXJlci0+c2V0VmlzaWJsZUluVmlld3BvcnRTdGF0ZShzdGF0ZSk7CiAgICAgfQogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2xpZW50cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUNsaWVudHMuaAkocmV2aXNp
b24gMjE1OTA0KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlQ2xpZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBpbnZhbGlkYXRlQ29udGVudHNBbmRSb290Vmlldyhjb25zdCBJbnRSZWN0JiByKSBmaW5h
bAogICAgIHsKLSAgICAgICAgLy8gSWYgbV9pbWFnZS0+bV9wYWdlIGlzIG51bGwsIHdlJ3JlIGJl
aW5nIGRlc3RydWN0ZWQsIGRvbid0IGZpcmUgY2hhbmdlZEluUmVjdCgpIGluIHRoYXQgY2FzZS4K
KyAgICAgICAgLy8gSWYgbV9pbWFnZS0+bV9wYWdlIGlzIG51bGwsIHdlJ3JlIGJlaW5nIGRlc3Ry
b3llZC4KICAgICAgICAgaWYgKCFtX2ltYWdlIHx8ICFtX2ltYWdlLT5tX3BhZ2UpCiAgICAgICAg
ICAgICByZXR1cm47CiAKQEAgLTYwLDEwICs2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICgh
aW1hZ2VPYnNlcnZlcikKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAobV9pbWFn
ZS0+aXNBbmltYXRpbmcoKSkKLSAgICAgICAgICAgIGltYWdlT2JzZXJ2ZXItPmFuaW1hdGlvbkFk
dmFuY2VkKG1faW1hZ2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbWFnZU9ic2VydmVy
LT5jaGFuZ2VkSW5SZWN0KG1faW1hZ2UsICZyKTsKKyAgICAgICAgaW1hZ2VPYnNlcnZlci0+aW1h
Z2VGcmFtZUF2YWlsYWJsZShtX2ltYWdlLCBtX2ltYWdlLT5pc0FuaW1hdGluZygpID8gSW1hZ2VB
bmltYXRpbmdTdGF0ZTo6WWVzIDogSW1hZ2VBbmltYXRpbmdTdGF0ZTo6Tm8sICZyKTsKICAgICB9
CiAgICAgCiAgICAgU1ZHSW1hZ2UqIG1faW1hZ2U7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>