<?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>152589</bug_id>
          
          <creation_ts>2015-12-29 12:29:20 -0800</creation_ts>
          <short_desc>Remove ScrollView::scrollOffset() in preparation for scrollOffset vs. scrollPosition clarification</short_desc>
          <delta_ts>2015-12-29 16:50:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>bdakin</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1151559</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-12-29 12:29:20 -0800</bug_when>
    <thetext>Remove ScrollView::scrollOffset() in preparation for scrollOffset vs. scrollPosition clarification</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151560</commentid>
    <comment_count>1</comment_count>
      <attachid>267989</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-12-29 12:31:49 -0800</bug_when>
    <thetext>Created attachment 267989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151564</commentid>
    <comment_count>2</comment_count>
      <attachid>267992</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-12-29 13:52:33 -0800</bug_when>
    <thetext>Created attachment 267992
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151565</commentid>
    <comment_count>3</comment_count>
      <attachid>267992</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-12-29 14:05:50 -0800</bug_when>
    <thetext>Comment on attachment 267992
Patch

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

&gt; Source/WebCore/page/FrameView.cpp:2170
&gt; +    IntPoint newPosition = scrollPosition();
&gt; +    if (oldPosition != newPosition) {
&gt;          updateLayerPositionsAfterScrolling();
&gt;          if (frame().settings().acceleratedCompositingForFixedPositionEnabled())
&gt;              updateCompositingLayersAfterScrolling();
&gt; -        IntPoint newPosition = scrollPosition();
&gt; -        scrollAnimator().setCurrentPosition(scrollPosition());
&gt; +        scrollAnimator().setCurrentPosition(newPosition);

This subtly changes the logic of this function such that if updateLayerPositionsAfterScrolling() or updateCompositingLayersAfterScrolling() can affect scrollPosition(), the new current position will be different.  Are you confident they cannot?

&gt; Source/WebCore/svg/SVGSVGElement.cpp:419
&gt; +                LayoutPoint scrollOffset = view-&gt;scrollPosition();

Given that you are now using a position here, it might make sense to rename the local variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151567</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-12-29 16:21:35 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 267992 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=267992&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/FrameView.cpp:2170
&gt; &gt; +    IntPoint newPosition = scrollPosition();
&gt; &gt; +    if (oldPosition != newPosition) {
&gt; &gt;          updateLayerPositionsAfterScrolling();
&gt; &gt;          if (frame().settings().acceleratedCompositingForFixedPositionEnabled())
&gt; &gt;              updateCompositingLayersAfterScrolling();
&gt; &gt; -        IntPoint newPosition = scrollPosition();
&gt; &gt; -        scrollAnimator().setCurrentPosition(scrollPosition());
&gt; &gt; +        scrollAnimator().setCurrentPosition(newPosition);
&gt; 
&gt; This subtly changes the logic of this function such that if
&gt; updateLayerPositionsAfterScrolling() or
&gt; updateCompositingLayersAfterScrolling() can affect scrollPosition(), the new
&gt; current position will be different.  Are you confident they cannot?

I am!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151570</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-12-29 16:50:20 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/194438</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267989</attachid>
            <date>2015-12-29 12:31:49 -0800</date>
            <delta_ts>2015-12-29 13:52:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152589-20151229123114.patch</filename>
            <type>text/plain</type>
            <size>36260</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTVmOTVmN2ExN2ZiNGMw
Zjg1MWNiNmQxNTlmMGQ5ZmM4YzVkZDM1NS4uNmY2Zjg2YWY5MzFiOWU1MDI4MzE5ZmM2NmJhZGMz
ODBiYTAxZTg2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDE1LTEyLTI5ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBTY3Jv
bGxWaWV3OjpzY3JvbGxPZmZzZXQoKSBpbiBwcmVwYXJhdGlvbiBmb3Igc2Nyb2xsT2Zmc2V0IHZz
LiBzY3JvbGxQb3NpdGlvbiBjbGFyaWZpY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI1ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50IGNvZGUgdXNlcyBzY3JvbGxPZmZzZXQgdnMu
IHNjcm9sbFBvc2l0aW9uIGludGVyY2hhbmdlYWJseSwgYW5kIGNvbmZ1c2luZ2x5LgorICAgICAg
ICBMb25nZXIgdGVybSwgSSBwbGFuIHRvIG1ha2UgInNjcm9sbFBvc2l0aW9uIiBiZSB0aGUgdmFs
dWUgdGhhdCBpcyByZWxhdGl2ZSB0byB0aGUgCisgICAgICAgIGNvbnRlbnRzLCBpLmUuIGFmZmVj
dGVkIGJ5IHNjcm9sbE9yaWdpbiwgYW5kICJzY3JvbGxPZmZzZXQiIGJlIHRoZSB6ZXJvLWJhc2Vk
IHZhbHVlCisgICAgICAgIHRoYXQncyB1c2VkIHRvIHNldCBzY3JvbGxiYXIgdmFsdWVzLgorICAg
ICAgICAKKyAgICAgICAgVG8gcHJlcGFyZSBmb3IgdGhpcywgcmVtb3ZlIFNjcm9sbFZpZXc6OnNj
cm9sbE9mZnNldCgpLCB3aGljaCBpcyBqdXN0IHRoZQorICAgICAgICBzY3JvbGxQb3NpdGlvbiBh
cyBhbiBJbnRTaXplLgorICAgICAgICAKKyAgICAgICAgQWRkIHNvbWUgdHlwZWRlZnMgaW4gU2Ny
b2xsYWJsZUFyZWEsIHdoaWNoIHdpbGwgc2xvd2x5IHByb3BhZ2F0ZSB0aHJvdWdoIHRoZQorICAg
ICAgICBjb2RlIGFzIHBvc2l0aW9uIHZzLiBvZmZzZXQgaXMgY2xhcmlmaWVkLgorCisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGVudHNRdWFkVG9Db29yZGluYXRlU3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ck92ZXJsYXk6OmhpZ2hsaWdodFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6bG9jYWxQb2ludFRv
Um9vdCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRSZXNwZWN0aW5nQ3VzdG9tRml4ZWRQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRvcENvbnRlbnRJbnNldERpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFkZFRyYWNrZWRSZXBhaW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFNj
cm9sbFBpbm5pbmdCZWhhdmlvcik6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhblNj
cm9sbEluRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJlY3RUb0Fic29sdXRlQ29vcmRp
bmF0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyTW9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3OjptYXhpbXVtU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OmFkanVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6ZG9jdW1lbnRTY3JvbGxPZmZzZXRSZWxhdGl2ZVRvVmlld09yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpkb2N1bWVudFNjcm9sbE9mZnNldFJlbGF0aXZl
VG9TY3JvbGxhYmxlQXJlYU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpz
ZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVT
Y3JvbGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnJvb3RWaWV3VG9Ub3Rh
bENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldEZyYW1lUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT3JpZ2luKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpj
b252ZXJ0Q2hpbGRUb1NlbGYpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udmVy
dFNlbGZUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbE9mZnNl
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhckludHJ1c2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1pbmltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjdWxhdGVBdXRvc2Ny
b2xsRGlyZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6Om1heGltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KToKKyAgICAg
ICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVt
ZW50Ojpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybSk6CisKIDIwMTUtMTItMjggIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggV2lu
ZG93cyBidWlsZCwgb3N0ZW5zaWJseSBhZnRlciByMTk0NDI0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGYzNmNj
MTlmZTlhZWI4MTZlNTExYjk3NDEyOWRiYWI4ODQzYmY3NzMuLjQ3NjFkZjZlMDlhMWY2NDA1OTJl
Mzg4ZDQ2OTQ4MDZmOGE0MmI1NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxNS0x
Mi0yOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmUgU2Nyb2xsVmlldzo6c2Nyb2xsT2Zmc2V0KCkgaW4gcHJlcGFyYXRpb24gZm9yIHNjcm9s
bE9mZnNldCB2cy4gc2Nyb2xsUG9zaXRpb24gY2xhcmlmaWNhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNTg5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudCBjb2RlIHVzZXMgc2Nyb2xs
T2Zmc2V0IHZzLiBzY3JvbGxQb3NpdGlvbiBpbnRlcmNoYW5nZWFibHksIGFuZCBjb25mdXNpbmds
eS4KKyAgICAgICAgTG9uZ2VyIHRlcm0sIEkgcGxhbiB0byBtYWtlICJzY3JvbGxQb3NpdGlvbiIg
YmUgdGhlIHZhbHVlIHRoYXQgaXMgcmVsYXRpdmUgdG8gdGhlIAorICAgICAgICBjb250ZW50cywg
aS5lLiBhZmZlY3RlZCBieSBzY3JvbGxPcmlnaW4sIGFuZCAic2Nyb2xsT2Zmc2V0IiBiZSB0aGUg
emVyby1iYXNlZCB2YWx1ZQorICAgICAgICB0aGF0J3MgdXNlZCB0byBzZXQgc2Nyb2xsYmFyIHZh
bHVlcy4KKyAgICAgICAgCisgICAgICAgIFRvIHByZXBhcmUgZm9yIHRoaXMsIHJlbW92ZSBTY3Jv
bGxWaWV3OjpzY3JvbGxPZmZzZXQoKSwgd2hpY2ggaXMganVzdCB0aGUKKyAgICAgICAgc2Nyb2xs
UG9zaXRpb24gYXMgYW4gSW50U2l6ZS4KKyAgICAgICAgCisgICAgICAgIEFkZCBzb21lIHR5cGVk
ZWZzIGluIFNjcm9sbGFibGVBcmVhLCB3aGljaCB3aWxsIHNsb3dseSBwcm9wYWdhdGUgdGhyb3Vn
aCB0aGUKKyAgICAgICAgY29kZSBhcyBwb3NpdGlvbiB2cy4gb2Zmc2V0IGlzIGNsYXJpZmllZC4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlOjpyZW5kZXJlZEltYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL0Rl
cHJlY2F0ZWRQREZQbHVnaW4uaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL0Rl
cHJlY2F0ZWRQREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2Nyb2xs
UG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1pbmltdW1TY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWF4aW11bVNjcm9sbFBvc2l0aW9u
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZTo6c2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNjcm9sbE1haW5G
cmFtZUlmTm90QXRNYXhTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnVwZGF0ZU1haW5GcmFtZVNjcm9sbE9mZnNldFBpbm5pbmcpOgorCiAyMDE1LTEyLTI1ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIG1vdmluZyBsb2NhbCBv
YmplY3RzIGluIHJldHVybiBzdGF0ZW1lbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggMDc0NzIxZGY3NDNmZmUwYzk4MWQ0YWZkMDYzYTFh
MDljYjdiNjI1Zi4uODZiMDVmOTY0Y2M1OTRjMzc4YTBhNzM5ZWRmZmM3YTJkMTkyMzA5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtNzIs
NyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjb250ZW50c1F1YWRUb0Nvb3JkaW5hdGVTeXN0ZW0oY29u
c3QgRnJhbWVWaWV3KiBtYWluVmlldywgY29uc3QgRnJhbQogICAgIHF1YWQuc2V0UDQodmlldy0+
Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnA0KCkpKSk7CiAKICAgICBp
ZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBJbnNwZWN0b3JPdmVybGF5OjpDb29yZGluYXRlU3lzdGVt
OjpWaWV3KQotICAgICAgICBxdWFkICs9IG1haW5WaWV3LT5zY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgcXVhZCArPSB0b0ludFNpemUobWFpblZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOwogfQogCiBz
dGF0aWMgdm9pZCBjb250ZW50c1F1YWRUb1BhZ2UoY29uc3QgRnJhbWVWaWV3KiBtYWluVmlldywg
Y29uc3QgRnJhbWVWaWV3KiB2aWV3LCBGbG9hdFF1YWQmIHF1YWQpCkBAIC0yNzgsNyArMjc4LDcg
QEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHROb2RlKE5vZGUqIG5vZGUsIGNvbnN0
IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2gKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxp
Z2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiBxdWFkLCBjb25zdCBIaWdobGlnaHRD
b25maWcmIGhpZ2hsaWdodENvbmZpZykKIHsKICAgICBpZiAoaGlnaGxpZ2h0Q29uZmlnLnVzZVBh
Z2VDb29yZGluYXRlcykKLSAgICAgICAgKnF1YWQgLT0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXco
KS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgICpxdWFkIC09IHRvSW50U2l6ZShtX3BhZ2UubWFp
bkZyYW1lKCkudmlldygpLT5zY3JvbGxQb3NpdGlvbigpKTsKIAogICAgIG1fcXVhZEhpZ2hsaWdo
dENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZzsKICAgICBtX2hpZ2hsaWdodFF1YWQgPSBXVEY6Om1v
dmUocXVhZCk7CkBAIC01OTQsNyArNTk0LDcgQEAgc3RhdGljIEZsb2F0UG9pbnQgbG9jYWxQb2lu
dFRvUm9vdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBGcmFtZVZpZXcqIG1haW4KIHsK
ICAgICBGbG9hdFBvaW50IHJlc3VsdCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUocG9pbnQp
OwogICAgIHJlc3VsdCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQo
cmVzdWx0KSk7Ci0gICAgcmVzdWx0ICs9IG1haW5WaWV3LT5zY3JvbGxPZmZzZXQoKTsKKyAgICBy
ZXN1bHQgKz0gdG9JbnRTaXplKG1haW5WaWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNWQ0Mzc1NWYx
MmU0N2Q3YWQ4NTYyMjhjNmQwOGU2MmRkNjQyNDA4Zi4uN2FmM2Y0YzYxN2E3ZWM5MDk2MTJiZWZk
YTc1OGU2ZWJiODA5N2ZhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTA4OSw3
ICsxMDg5LDcgQEAgTGF5b3V0UmVjdCBGcmFtZVZpZXc6OmZpeGVkU2Nyb2xsYWJsZUFyZWFCb3Vu
ZHNJbmZsYXRlZEZvclNjcm9sbGluZyhjb25zdCBMYXlvdXQKIExheW91dFNpemUgRnJhbWVWaWV3
OjpzY3JvbGxPZmZzZXRSZXNwZWN0aW5nQ3VzdG9tRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7CiAj
aWYgUExBVEZPUk0oSU9TKQotICAgIHJldHVybiB1c2VDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0
UmVjdCgpID8gY3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKS5sb2NhdGlvbigpIC0gTGF5
b3V0UG9pbnQoKSA6IHNjcm9sbE9mZnNldCgpOworICAgIHJldHVybiB1c2VDdXN0b21GaXhlZFBv
c2l0aW9uTGF5b3V0UmVjdCgpID8gY3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKS5sb2Nh
dGlvbigpIC0gTGF5b3V0UG9pbnQoKSA6IHRvTGF5b3V0U2l6ZShzY3JvbGxQb3NpdGlvbigpKTsK
ICNlbHNlCiAgICAgcmV0dXJuIHNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKTsKICNlbmRp
ZgpAQCAtMTEzOCw3ICsxMTM4LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnRvcENvbnRlbnRJbnNldERp
ZENoYW5nZShmbG9hdCBuZXdUb3BDb250ZW50SW5zZXQpCiAgICAgCiAgICAgbGF5b3V0KCk7CiAK
LSAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKKyAgICB1cGRhdGVTY3JvbGxi
YXJzKHNjcm9sbFBvc2l0aW9uKCkpOwogICAgIGlmIChyZW5kZXJWaWV3LT51c2VzQ29tcG9zaXRp
bmcoKSkKICAgICAgICAgcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpLmZyYW1lVmlld0RpZENoYW5n
ZVNpemUoKTsKIApAQCAtMjM4Niw3ICsyMzg2LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmFkZFRyYWNr
ZWRSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IHI7Ci0gICAgcmVwYWludFJlY3QubW92ZSgtc2Nyb2xs
T2Zmc2V0KCkpOworICAgIHJlcGFpbnRSZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CiAg
ICAgbV90cmFja2VkUmVwYWludFJlY3RzLmFwcGVuZChyZXBhaW50UmVjdCk7CiB9CiAKQEAgLTM0
NzksMTAgKzM0NzksOSBAQCBib29sIEZyYW1lVmlldzo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25N
YWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKIAogdm9pZCBGcmFtZVZpZXc6
OnNjcm9sbFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNldCkKIHsKLSAgICBMYXlvdXRTaXplIG9m
ZnNldCA9IHNjcm9sbE9mZnNldCgpOwogICAgIEludFBvaW50IG9sZFBvc2l0aW9uID0gc2Nyb2xs
UG9zaXRpb24oKTsKICAgICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwotICAgIGlm
IChvZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgaWYgKG9sZFBvc2l0aW9uICE9IHNjcm9s
bFBvc2l0aW9uKCkpCiAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZChvbGRQb3NpdGlvbiwg
c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CiB9CkBAIC00
NTg3LDExICs0NTg2LDEwIEBAIGJvb2wgRnJhbWVWaWV3Ojp3aGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKICNlbmRpZgogCiAgICAgaWYgKGRlbGVnYXRlc1Nj
cm9sbGluZygpKSB7Ci0gICAgICAgIEludFNpemUgb2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0g
ICAgICAgIEludFBvaW50IG9sZFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAg
SW50U2l6ZSBuZXdPZmZzZXQgPSBJbnRTaXplKG9mZnNldC53aWR0aCgpIC0gd2hlZWxFdmVudC5k
ZWx0YVgoKSwgb2Zmc2V0LmhlaWdodCgpIC0gd2hlZWxFdmVudC5kZWx0YVkoKSk7Ci0gICAgICAg
IGlmIChvZmZzZXQgIT0gbmV3T2Zmc2V0KSB7Ci0gICAgICAgICAgICBTY3JvbGxWaWV3OjpzY3Jv
bGxUbyhuZXdPZmZzZXQpOworICAgICAgICBTY3JvbGxQb3NpdGlvbiBvbGRQb3NpdGlvbiA9IHNj
cm9sbFBvc2l0aW9uKCk7CisgICAgICAgIFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gb2xk
UG9zaXRpb24gLSBJbnRTaXplKHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZ
KCkpOworICAgICAgICBpZiAob2xkUG9zaXRpb24gIT0gbmV3UG9zaXRpb24pIHsKKyAgICAgICAg
ICAgIFNjcm9sbFZpZXc6OnNjcm9sbFRvKHRvSW50U2l6ZShuZXdQb3NpdGlvbikpOwogICAgICAg
ICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKG9sZFBvc2l0aW9uLCBzY3JvbGxQb3NpdGlvbigp
KTsKICAgICAgICAgICAgIGRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogICAgICAgICB9CkBAIC00
Nzk2LDcgKzQ3OTQsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9y
KFNjcm9sbFBpbm5pbmdCZWhhdmlvciBwaW5uaW5nKQogICAgICAgICAgICAgc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPnNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihwaW5uaW5nKTsKICAgICB9CiAgICAg
Ci0gICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7CisgICAgdXBkYXRlU2Nyb2xs
YmFycyhzY3JvbGxQb3NpdGlvbigpKTsKIH0KIAogU2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1l
bnRzIEZyYW1lVmlldzo6c2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCmluZGV4IGIxYjUwNDU3ZDdlYjdhMmVjMTZiNThlNDJmM2YwOTQw
MWM2M2E2ZjEuLjIyY2NkNDkyMzMwNTVjMzc5YTMzMTExYTQyZTlmMTk5YzNiNDc3ZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaApAQCAtMjQyLDggKzI0Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbGluZygpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgSW50
UG9pbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVz
cygpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50UG9pbnQg
bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFNjcm9sbFBvc2l0aW9uIG1pbmltdW1TY3Jv
bGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
U2Nyb2xsUG9zaXRpb24gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIHZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZXN1bWVWaXNpYmxlSW1hZ2VBbmltYXRpb25zSW5jbHVkaW5nU3ViZnJhbWVzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCmluZGV4IDcyYjAwOGY3ODMy
OTM5NDk3ZTEwMjBjMjA0ZWRkZTZjZjA1NTIxMWIuLjFlNTc1NGY1NzQ2YThjOThjNWQ0ZDQxMTRl
NGU5MzQ4MmZlZmQ0OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5h
dmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24u
Y3BwCkBAIC00ODMsMTggKzQ4MywxOSBAQCBib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKGNvbnN0
IEZyYW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAgIGlmICgoZGlyZWN0
aW9uID09IEZvY3VzRGlyZWN0aW9uVXAgfHwgZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRG93
bikgJiYgIFNjcm9sbGJhckFsd2F5c09mZiA9PSB2ZXJ0aWNhbE1vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBMYXlvdXRTaXplIHNpemUgPSBmcmFtZS0+dmlldygpLT50b3RhbENvbnRl
bnRzU2l6ZSgpOwotICAgIExheW91dFNpemUgb2Zmc2V0ID0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xs
T2Zmc2V0KCk7CisgICAgTGF5b3V0UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBmcmFtZS0+dmlldygp
LT5zY3JvbGxQb3NpdGlvbigpOwogICAgIExheW91dFJlY3QgcmVjdCA9IGZyYW1lLT52aWV3KCkt
PnVub2JzY3VyZWRDb250ZW50UmVjdEluY2x1ZGluZ1Njcm9sbGJhcnMoKTsKIAorICAgIC8vIEZJ
WE1FOiB3cm9uZyBpbiBSVEwgZG9jdW1lbnRzLgogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6Ci0gICAgICAgIHJldHVybiBvZmZzZXQud2lkdGgo
KSA+IDA7CisgICAgICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbi54KCkgPiAwOwogICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25VcDoKLSAgICAgICAgcmV0dXJuIG9mZnNldC5oZWlnaHQoKSA+IDA7Cisg
ICAgICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbi55KCkgPiAwOwogICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25SaWdodDoKLSAgICAgICAgcmV0dXJuIHJlY3Qud2lkdGgoKSArIG9mZnNldC53aWR0aCgp
IDwgc2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gcmVjdC53aWR0aCgpICsgc2Nyb2xsUG9z
aXRpb24ueCgpIDwgc2l6ZS53aWR0aCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgot
ICAgICAgICByZXR1cm4gcmVjdC5oZWlnaHQoKSArIG9mZnNldC5oZWlnaHQoKSA8IHNpemUuaGVp
Z2h0KCk7CisgICAgICAgIHJldHVybiByZWN0LmhlaWdodCgpICsgc2Nyb2xsUG9zaXRpb24ueSgp
IDwgc2l6ZS5oZWlnaHQoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTEwLDcgKzUxMSw3IEBAIHN0YXRpYyBM
YXlvdXRSZWN0IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUqIGluaXRpYWxGcmFtZSwg
Y29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgcmVjdC5t
b3ZlKGVsZW1lbnQtPm9mZnNldExlZnQoKSwgZWxlbWVudC0+b2Zmc2V0VG9wKCkpOwogICAgICAg
ICAgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LT5vZmZzZXRQYXJlbnQoKSkpOwotICAg
ICAgICAgICAgcmVjdC5tb3ZlKCgtZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIHJlY3QubW92ZUJ5KCgtZnJhbWUtPnZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKSkp
OwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmNwcAppbmRleCBmMjMwMTE4Mzc5YWQ0ZDM3YjgxZmM2NWU2NTU0YzA1ZDI2
MDkwN2Q0Li5jYmNhMjVkMWIyODUxY2QwZWIzNjM1MTNlNmExNGEyZTMyNTQ0ZDQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQg
U2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyTW9kZXMoU2Nyb2xsYmFyTW9kZSBob3Jpem9udGFsTW9k
ZSwgU2Nyb2xsYmFyTW9kZSB2CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHBs
YXRmb3JtU2V0U2Nyb2xsYmFyTW9kZXMoKTsKICAgICBlbHNlCi0gICAgICAgIHVwZGF0ZVNjcm9s
bGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOworICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbFBv
c2l0aW9uKCkpOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbGJhck1vZGVzKFNjcm9sbGJh
ck1vZGUmIGhvcml6b250YWxNb2RlLCBTY3JvbGxiYXJNb2RlJiB2ZXJ0aWNhbE1vZGUpIGNvbnN0
CkBAIC0zNjYsNyArMzY2LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjphdmFpbGFibGVDb250ZW50U2l6
ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChyZWFzb24gIT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xs
YmFyc0NoYW5nZWQpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOwor
ICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbFBvc2l0aW9uKCkpOwogfQogCiBJbnRTaXpl
IFNjcm9sbFZpZXc6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0CkBAIC0zODIsMjMgKzM4MiwyMyBAQCB2
b2lkIFNjcm9sbFZpZXc6OnNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQog
ICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAgICBwbGF0Zm9ybVNldENvbnRlbnRzU2l6
ZSgpOwogICAgIGVsc2UKLSAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7
CisgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgdXBkYXRl
T3ZlcmhhbmdBcmVhcygpOwogfQogCi1JbnRQb2ludCBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xs
UG9zaXRpb24oKSBjb25zdAorU2Nyb2xsUG9zaXRpb24gU2Nyb2xsVmlldzo6bWF4aW11bVNjcm9s
bFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KGNvbnRlbnRz
V2lkdGgoKSAtIHZpc2libGVXaWR0aCgpIC0gc2Nyb2xsT3JpZ2luKCkueCgpLCB0b3RhbENvbnRl
bnRzU2l6ZSgpLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpIC0gc2Nyb2xsT3JpZ2luKCkueSgp
KTsKICAgICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKICAgICByZXR1cm4g
bWF4aW11bU9mZnNldDsKIH0KIAotSW50UG9pbnQgU2Nyb2xsVmlldzo6bWluaW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKK1Njcm9sbFBvc2l0aW9uIFNjcm9sbFZpZXc6Om1pbmltdW1TY3JvbGxQ
b3NpdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEludFBvaW50KC1zY3JvbGxPcmlnaW4oKS54
KCksIC1zY3JvbGxPcmlnaW4oKS55KCkpOwogfQogCi1JbnRQb2ludCBTY3JvbGxWaWV3OjphZGp1
c3RTY3JvbGxQb3NpdGlvbldpdGhpblJhbmdlKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb2ludCkg
Y29uc3QKK1Njcm9sbFBvc2l0aW9uIFNjcm9sbFZpZXc6OmFkanVzdFNjcm9sbFBvc2l0aW9uV2l0
aGluUmFuZ2UoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHNjcm9sbFBvaW50KSBjb25zdAogewogICAg
IGlmICghY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKICAgICAgICAgcmV0dXJu
IHNjcm9sbFBvaW50OwpAQCAtNDA4LDcgKzQwOCw3IEBAIEludFBvaW50IFNjcm9sbFZpZXc6OmFk
anVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2UoY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50
CiAKIEludFNpemUgU2Nyb2xsVmlldzo6ZG9jdW1lbnRTY3JvbGxPZmZzZXRSZWxhdGl2ZVRvVmll
d09yaWdpbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpIC0gSW50U2l6ZSgw
LCBoZWFkZXJIZWlnaHQoKSArIHRvcENvbnRlbnRJbnNldChUb3BDb250ZW50SW5zZXRUeXBlOjpX
ZWJDb3JlT3JQbGF0Zm9ybUNvbnRlbnRJbnNldCkpOworICAgIHJldHVybiB0b0ludFNpemUoc2Ny
b2xsUG9zaXRpb24oKSkgLSBJbnRTaXplKDAsIGhlYWRlckhlaWdodCgpICsgdG9wQ29udGVudElu
c2V0KFRvcENvbnRlbnRJbnNldFR5cGU6OldlYkNvcmVPclBsYXRmb3JtQ29udGVudEluc2V0KSk7
CiB9CiAKIEludFBvaW50IFNjcm9sbFZpZXc6OmRvY3VtZW50U2Nyb2xsUG9zaXRpb25SZWxhdGl2
ZVRvVmlld09yaWdpbigpIGNvbnN0CkBAIC00MTksNyArNDE5LDcgQEAgSW50UG9pbnQgU2Nyb2xs
Vmlldzo6ZG9jdW1lbnRTY3JvbGxQb3NpdGlvblJlbGF0aXZlVG9WaWV3T3JpZ2luKCkgY29uc3QK
IAogSW50U2l6ZSBTY3JvbGxWaWV3Ojpkb2N1bWVudFNjcm9sbE9mZnNldFJlbGF0aXZlVG9TY3Jv
bGxhYmxlQXJlYU9yaWdpbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpIC0g
SW50U2l6ZSgwLCBoZWFkZXJIZWlnaHQoKSk7CisgICAgcmV0dXJuIHRvSW50U2l6ZShzY3JvbGxQ
b3NpdGlvbigpKSAtIEludFNpemUoMCwgaGVhZGVySGVpZ2h0KCkpOwogfQogCiBpbnQgU2Nyb2xs
Vmlldzo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QK
QEAgLTUyOSwyNSArNTI5LDI1IEBAIGludCBTY3JvbGxWaWV3OjpzY3JvbGxQb3NpdGlvbihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBTY3JvbGxW
aWV3OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9pbnQpCit2b2lk
IFNjcm9sbFZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBzY3Jv
bGxQb3NpdGlvbikKIHsKICAgICBpZiAocHJvaGliaXRzU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7Ci0gICAgICAgIHBsYXRmb3JtU2V0
U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9pbnQpOworICAgICAgICBwbGF0Zm9ybVNldFNjcm9sbFBv
c2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIElu
dFBvaW50IG5ld1Njcm9sbFBvc2l0aW9uID0gIWRlbGVnYXRlc1Njcm9sbGluZygpID8gYWRqdXN0
U2Nyb2xsUG9zaXRpb25XaXRoaW5SYW5nZShzY3JvbGxQb2ludCkgOiBzY3JvbGxQb2ludDsKKyAg
ICBJbnRQb2ludCBuZXdTY3JvbGxQb3NpdGlvbiA9ICFkZWxlZ2F0ZXNTY3JvbGxpbmcoKSA/IGFk
anVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2Uoc2Nyb2xsUG9zaXRpb24pIDogc2Nyb2xsUG9z
aXRpb247CiAKLSAgICBpZiAoKCFkZWxlZ2F0ZXNTY3JvbGxpbmcoKSB8fCAhaW5Qcm9ncmFtbWF0
aWNTY3JvbGwoKSkgJiYgbmV3U2Nyb2xsUG9zaXRpb24gPT0gc2Nyb2xsUG9zaXRpb24oKSkKKyAg
ICBpZiAoKCFkZWxlZ2F0ZXNTY3JvbGxpbmcoKSB8fCAhaW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSkg
JiYgbmV3U2Nyb2xsUG9zaXRpb24gPT0gdGhpcy0+c2Nyb2xsUG9zaXRpb24oKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShuZXdTY3JvbGxQ
b3NpdGlvbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZVNjcm9sbGJhcnMoSW50U2l6
ZShuZXdTY3JvbGxQb3NpdGlvbi54KCksIG5ld1Njcm9sbFBvc2l0aW9uLnkoKSkpOworICAgIHVw
ZGF0ZVNjcm9sbGJhcnMobmV3U2Nyb2xsUG9zaXRpb24pOwogfQogCiBib29sIFNjcm9sbFZpZXc6
OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSkKQEAgLTU4Miw3ICs1ODIsNyBAQCBJbnRTaXplIFNjcm9sbFZpZXc6Om92ZXJoYW5n
QW1vdW50KCkgY29uc3QKICAgICByZXR1cm4gc3RyZXRjaDsKIH0KIAotdm9pZCBTY3JvbGxWaWV3
Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpCit2b2lkIFNj
cm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgU2Nyb2xsUG9zaXRpb24mIGRlc2lyZWRQ
b3NpdGlvbikKIHsKICAgICBpZiAobV9pblVwZGF0ZVNjcm9sbGJhcnMgfHwgcHJvaGliaXRzU2Ny
b2xsaW5nKCkgfHwgcGxhdGZvcm1XaWRnZXQoKSB8fCBkZWxlZ2F0ZXNTY3JvbGxpbmcoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNjkzLDcgKzY5Myw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRl
U2Nyb2xsYmFycyhjb25zdCBJbnRTaXplJiBkZXNpcmVkT2Zmc2V0KQogICAgICAgICAgICAgICAg
IC8vIFRoZSBsYXlvdXQgd2l0aCB0aGUgbmV3IHNjcm9sbCBzdGF0ZSBoYWQgbm8gaW1wYWN0IG9u
CiAgICAgICAgICAgICAgICAgLy8gdGhlIGRvY3VtZW50J3Mgb3ZlcmFsbCBzaXplLCBzbyB1cGRh
dGVTY3JvbGxiYXJzIGRpZG4ndCBnZXQgY2FsbGVkLgogICAgICAgICAgICAgICAgIC8vIFJlY3Vy
IG1hbnVhbGx5LgotICAgICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoZGVzaXJlZE9mZnNl
dCk7CisgICAgICAgICAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhkZXNpcmVkUG9zaXRpb24pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbV91cGRhdGVTY3JvbGxiYXJzUGFzcy0tOwogICAg
ICAgICB9CkBAIC03NjAsNyArNzYwLDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxi
YXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpCiAgICAgICAgICAgICBpbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyUmVjdChvbGRTY3JvbGxDb3JuZXJSZWN0KTsKICAgICB9CiAKLSAgICBJbnRQ
b2ludCBhZGp1c3RlZFNjcm9sbFBvc2l0aW9uID0gSW50UG9pbnQoZGVzaXJlZE9mZnNldCk7Cisg
ICAgSW50UG9pbnQgYWRqdXN0ZWRTY3JvbGxQb3NpdGlvbiA9IGRlc2lyZWRQb3NpdGlvbjsKICAg
ICBpZiAoIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSkKICAgICAgICAgYWRqdXN0ZWRTY3JvbGxQ
b3NpdGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2UoYWRqdXN0ZWRTY3JvbGxQ
b3NpdGlvbik7CiAKQEAgLTkyMiw3ICs5MjIsNyBAQCBJbnRQb2ludCBTY3JvbGxWaWV3Ojpyb290
Vmlld1RvVG90YWxDb250ZW50cyhjb25zdCBJbnRQb2ludCYgcm9vdFZpZXdQb2ludCkgY29ucwog
CiAgICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21Sb290Vmlldyhyb290Vmlld1Bv
aW50KTsKICAgICAvLyBMaWtlIHJvb3RWaWV3VG9Db250ZW50cygpLCBidXQgaWdub3JlcyBoZWFk
ZXJIZWlnaHQuCi0gICAgcmV0dXJuIHZpZXdQb2ludCArIHNjcm9sbE9mZnNldCgpIC0gSW50U2l6
ZSgwLCB0b3BDb250ZW50SW5zZXQoVG9wQ29udGVudEluc2V0VHlwZTo6V2ViQ29yZU9yUGxhdGZv
cm1Db250ZW50SW5zZXQpKTsKKyAgICByZXR1cm4gdmlld1BvaW50ICsgdG9JbnRTaXplKHNjcm9s
bFBvc2l0aW9uKCkpIC0gSW50U2l6ZSgwLCB0b3BDb250ZW50SW5zZXQoVG9wQ29udGVudEluc2V0
VHlwZTo6V2ViQ29yZU9yUGxhdGZvcm1Db250ZW50SW5zZXQpKTsKIH0KIAogSW50UmVjdCBTY3Jv
bGxWaWV3Ojpjb250ZW50c1RvUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgY29udGVudHNSZWN0KSBj
b25zdApAQCAtMTAzNyw3ICsxMDM3LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpzZXRGcmFtZVJlY3Qo
Y29uc3QgSW50UmVjdCYgbmV3UmVjdCkKICAgICBXaWRnZXQ6OnNldEZyYW1lUmVjdChuZXdSZWN0
KTsKICAgICBmcmFtZVJlY3RzQ2hhbmdlZCgpOwogCi0gICAgdXBkYXRlU2Nyb2xsYmFycyhzY3Jv
bGxPZmZzZXQoKSk7CisgICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxQb3NpdGlvbigpKTsKICAg
ICAKICAgICBpZiAoIW1fdXNlRml4ZWRMYXlvdXQgJiYgb2xkUmVjdC5zaXplKCkgIT0gbmV3UmVj
dC5zaXplKCkpCiAgICAgICAgIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVT
aXplQ2hhbmdlUmVhc29uOjpBcmVhU2l6ZUNoYW5nZWQpOwpAQCAtMTE1NSw3ICsxMTU1LDcgQEAg
dm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoU2Nyb2xsYmFyU3R5bGUgbmV3
U3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUKICAgICBpZiAoIWZvcmNlVXBkYXRlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKKyAgICB1cGRh
dGVTY3JvbGxiYXJzKHNjcm9sbFBvc2l0aW9uKCkpOwogICAgIHBvc2l0aW9uU2Nyb2xsYmFyTGF5
ZXJzKCk7CiB9CiAKQEAgLTE0ODAsNyArMTQ4MCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Ny
b2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGJvb2wgdXBkYXRlUG9zaXRpb25BdEFs
CiAgICAgCiAgICAgLy8gVXBkYXRlIGlmIHRoZSBzY3JvbGwgb3JpZ2luIGNoYW5nZXMsIHNpbmNl
IG91ciBwb3NpdGlvbiB3aWxsIGJlIGRpZmZlcmVudCBpZiB0aGUgY29udGVudCBzaXplIGRpZCBu
b3QgY2hhbmdlLgogICAgIGlmICh1cGRhdGVQb3NpdGlvbkF0QWxsICYmIHVwZGF0ZVBvc2l0aW9u
U3luY2hyb25vdXNseSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7
CisgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsUG9zaXRpb24oKSk7CiB9CiAKIHZvaWQg
U2Nyb2xsVmlldzo6c3R5bGVEaWRDaGFuZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCmluZGV4IGY0NmUwMTdmYzVjMmVmN2U3MTgyYTM3MTAwYmQzZTQ3NjFiMDAwMmUuLjg1YTA0
ZTdjNzFiMDk2NTZjM2QwYjNlZmQxOWM4MDQ5OWVjZGIxMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgKQEAgLTIyNSwxMiArMjI1LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmKTsKIAogICAgIC8vIEZ1bmN0aW9u
cyBmb3IgcXVlcnlpbmcgdGhlIGN1cnJlbnQgc2Nyb2xsZWQgcG9zaXRpb24gKGJvdGggYXMgYSBw
b2ludCwgYSBzaXplLCBvciBhcyBpbmRpdmlkdWFsIFggYW5kIFkgdmFsdWVzKS4KLSAgICB2aXJ0
dWFsIEludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdmlz
aWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpLmxvY2F0aW9uKCk7
IH0KLSAgICBJbnRTaXplIHNjcm9sbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHRvSW50U2l6ZSh2
aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkubG9jYXRpb24o
KSk7IH0gLy8gR2V0cyB0aGUgc2Nyb2xsZWQgcG9zaXRpb24gYXMgYW4gSW50U2l6ZS4gQ29udmVu
aWVudCBmb3IgYWRkaW5nIHRvIG90aGVyIHNpemVzLgotICAgIHZpcnR1YWwgSW50UG9pbnQgbWF4
aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7IC8vIFRoZSBtYXhpbXVtIHBvc2l0
aW9uIHdlIGNhbiBiZSBzY3JvbGxlZCB0by4KLSAgICB2aXJ0dWFsIEludFBvaW50IG1pbmltdW1T
Y3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOyAvLyBUaGUgbWluaW11bSBwb3NpdGlvbiB3
ZSBjYW4gYmUgc2Nyb2xsZWQgdG8uCisgICAgdmlydHVhbCBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdChMZWdh
Y3lJT1NEb2N1bWVudFZpc2libGVSZWN0KS5sb2NhdGlvbigpOyB9CisKKyAgICB2aXJ0dWFsIFNj
cm9sbFBvc2l0aW9uIG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOyAvLyBU
aGUgbWF4aW11bSBwb3NpdGlvbiB3ZSBjYW4gYmUgc2Nyb2xsZWQgdG8uCisgICAgdmlydHVhbCBT
Y3JvbGxQb3NpdGlvbiBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsgLy8g
VGhlIG1pbmltdW0gcG9zaXRpb24gd2UgY2FuIGJlIHNjcm9sbGVkIHRvLgorCiAgICAgLy8gQWRq
dXN0IHRoZSBwYXNzZWQgaW4gc2Nyb2xsIHBvc2l0aW9uIHRvIGtlZXAgaXQgYmV0d2VlbiB0aGUg
bWluaW11bSBhbmQgbWF4aW11bSBwb3NpdGlvbnMuCi0gICAgSW50UG9pbnQgYWRqdXN0U2Nyb2xs
UG9zaXRpb25XaXRoaW5SYW5nZShjb25zdCBJbnRQb2ludCYpIGNvbnN0OyAKKyAgICBTY3JvbGxQ
b3NpdGlvbiBhZGp1c3RTY3JvbGxQb3NpdGlvbldpdGhpblJhbmdlKGNvbnN0IFNjcm9sbFBvc2l0
aW9uJikgY29uc3Q7CiAgICAgaW50IHNjcm9sbFgoKSBjb25zdCB7IHJldHVybiBzY3JvbGxQb3Np
dGlvbigpLngoKTsgfQogICAgIGludCBzY3JvbGxZKCkgY29uc3QgeyByZXR1cm4gc2Nyb2xsUG9z
aXRpb24oKS55KCk7IH0KIApAQCAtMjY3LDcgKzI2OCw3IEBAIHB1YmxpYzoKICAgICBJbnRQb2lu
dCBjYWNoZWRTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2Nyb2xsUG9z
aXRpb247IH0KIAogICAgIC8vIEZ1bmN0aW9ucyBmb3Igc2Nyb2xsaW5nIHRoZSB2aWV3LgotICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwogICAg
IHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgcykgeyByZXR1cm4gc2V0U2Nyb2xsUG9zaXRp
b24oc2Nyb2xsUG9zaXRpb24oKSArIHMpOyB9CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNjcm9s
bHMgYnkgbGluZXMsIHBhZ2VzIG9yIHBpeGVscy4KQEAgLTMzMSw3ICszMzIsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBJbnRQb2ludCBuZXdQb2ludCA9IHBvaW50OwogICAgICAgICBpZiAo
IWlzU2Nyb2xsVmlld1Njcm9sbGJhcihjaGlsZCkpCi0gICAgICAgICAgICBuZXdQb2ludCA9IHBv
aW50IC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgICAgICBuZXdQb2ludCA9IHBvaW50IC0gdG9J
bnRTaXplKHNjcm9sbFBvc2l0aW9uKCkpOwogICAgICAgICBuZXdQb2ludC5tb3ZlQnkoY2hpbGQt
PmxvY2F0aW9uKCkpOwogICAgICAgICByZXR1cm4gbmV3UG9pbnQ7CiAgICAgfQpAQCAtMzQwLDcg
KzM0MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEludFBvaW50IG5ld1BvaW50ID0gcG9p
bnQ7CiAgICAgICAgIGlmICghaXNTY3JvbGxWaWV3U2Nyb2xsYmFyKGNoaWxkKSkKLSAgICAgICAg
ICAgIG5ld1BvaW50ID0gcG9pbnQgKyBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgIG5ld1Bv
aW50ID0gcG9pbnQgKyB0b0ludFNpemUoc2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgICAgIG5ld1Bv
aW50Lm1vdmVCeSgtY2hpbGQtPmxvY2F0aW9uKCkpOwogICAgICAgICByZXR1cm4gbmV3UG9pbnQ7
CiAgICAgfQpAQCAtNDA5LDcgKzQxMCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
aXNGbGlwcGVkRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gQ2Fs
bGVkIHRvIHVwZGF0ZSB0aGUgc2Nyb2xsYmFycyB0byBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlIHN0
YXRlIG9mIHRoZSB2aWV3LgotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycyhjb25zdCBJbnRTaXpl
JiBkZXNpcmVkT2Zmc2V0KTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgU2Nyb2xs
UG9zaXRpb24mIGRlc2lyZWRQb3NpdGlvbik7CiAKICAgICBmbG9hdCBwbGF0Zm9ybVRvcENvbnRl
bnRJbnNldCgpIGNvbnN0OwogICAgIHZvaWQgcGxhdGZvcm1TZXRUb3BDb250ZW50SW5zZXQoZmxv
YXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDNi
Y2MyNWRjODU2MGY1NjVjNTA3MTE4ZTk3ODkzNDIzYjhkYzBmMmMuLmJlNWFmYTdiNDA2MGFiNjkw
MDU4OWIwYzZkYWNlMmU1MjU0NTZhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxhYmxlQXJlYS5jcHAKQEAgLTUxOCwyNCArNTE4LDI2IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6
OmlzUGlubmVkVmVydGljYWxseUluRGlyZWN0aW9uKGludCB2ZXJ0aWNhbFNjcm9sbERlbHRhKSBj
b25zCiAKIEludFNpemUgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhckludHJ1c2lvbigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEludFNpemUoCisgICAgcmV0dXJuIHsKICAgICAgICAgdmVydGljYWxT
Y3JvbGxiYXIoKSA/IHZlcnRpY2FsU2Nyb2xsYmFyKCktPm9jY3VwaWVkV2lkdGgoKSA6IDAsCi0g
ICAgICAgIGhvcml6b250YWxTY3JvbGxiYXIoKSA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+b2Nj
dXBpZWRIZWlnaHQoKSA6IDApOworICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyKCkgPyBob3Jp
em9udGFsU2Nyb2xsYmFyKCktPm9jY3VwaWVkSGVpZ2h0KCkgOiAwCisgICAgfTsKIH0KIAotSW50
UG9pbnQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK1Njcm9sbFBvc2l0
aW9uIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7CisgICAgLy8gRklY
TUU6IFRoaXMgcmVsYXRpb25zaGlwIHNlZW1zIHRvIGJlIGludmVydGVkLiBTY3JvbGxiYXJzIHNo
b3VsZCBiZSAndmlldycsIG5vdCAnbW9kZWwnLCBhbmQgc2hvdWxkIGdldCB0aGVpciB2YWx1ZXMg
ZnJvbSB1cy4KICAgICBpbnQgeCA9IGhvcml6b250YWxTY3JvbGxiYXIoKSA/IGhvcml6b250YWxT
Y3JvbGxiYXIoKS0+dmFsdWUoKSA6IDA7CiAgICAgaW50IHkgPSB2ZXJ0aWNhbFNjcm9sbGJhcigp
ID8gdmVydGljYWxTY3JvbGxiYXIoKS0+dmFsdWUoKSA6IDA7CiAgICAgcmV0dXJuIEludFBvaW50
KHgsIHkpOwogfQogCi1JbnRQb2ludCBTY3JvbGxhYmxlQXJlYTo6bWluaW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3QKK1Njcm9sbFBvc2l0aW9uIFNjcm9sbGFibGVBcmVhOjptaW5pbXVtU2Nyb2xs
UG9zaXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBJbnRQb2ludCgpOwogfQogCi1JbnRQb2lu
dCBTY3JvbGxhYmxlQXJlYTo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK1Njcm9sbFBv
c2l0aW9uIFNjcm9sbGFibGVBcmVhOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewog
ICAgIHJldHVybiBJbnRQb2ludCh0b3RhbENvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSB2aXNpYmxl
V2lkdGgoKSwgdG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRleCBiZTIwYjY0
OGU2NWNlN2ZkM2FkMDFkODYwOTE3MzA2ZjM3NTM0OTNmLi43ZmRhZmEzYzYwMjIwZTA1ZDhjYTE3
YjZjMmZhODMwM2NmMDU2ZDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmgKQEAgLTQxLDYgKzQxLDExIEBAIGNsYXNzIFNjcm9sbEFuaW1hdG9yOwogY2xhc3MgR3Jh
cGhpY3NMYXllcjsKIGNsYXNzIFRpbGVkQmFja2luZzsKIAorLy8gc2Nyb2xsUG9zaXRpb24gaXMg
aW4gY29udGVudCBjb29yZGluYXRlcyAoMCwwIGlzIGF0IHNjcm9sbE9yaWdpbiksIHNvIG1heSBo
YXZlIG5lZ2F0aXZlIGNvbXBvbmVudHMuCit0eXBlZGVmIEludFBvaW50IFNjcm9sbFBvc2l0aW9u
OworLy8gc2Nyb2xsT2Zmc2V0KCkgaXMgdGhlIHZhbHVlIHVzZWQgYnkgc2Nyb2xsYmFycyAobWlu
IGlzIDAsMCksIGFuZCBzaG91bGQgbmV2ZXIgaGF2ZSBuZWdhdGl2ZSBjb21wb25lbnRzLgordHlw
ZWRlZiBJbnRQb2ludCBTY3JvbGxPZmZzZXQ7CisKIGNsYXNzIFNjcm9sbGFibGVBcmVhIHsKIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CkBAIC0xNzksOSArMTg0LDEw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICB2aXJ0dWFsIEludFBvaW50IHNjcm9s
bFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9z
aXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlv
bigpIGNvbnN0OworICAgIHZpcnR1YWwgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFNjcm9sbFBvc2l0aW9uIG1pbmltdW1TY3JvbGxQb3NpdGlvbigp
IGNvbnN0OworICAgIHZpcnR1YWwgU2Nyb2xsUG9zaXRpb24gbWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkgY29uc3Q7CisKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGJvb2wgc2Nyb2xsZWRUb1Rv
cCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgYm9vbCBzY3JvbGxlZFRvQm90
dG9tKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBib29sIHNjcm9sbGVkVG9M
ZWZ0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGMx
MWUxMGUwNmIxZjU3MzRjMTI2ZDNkNWRkY2Y3NjA1YmZkMmQzYjIuLjA2NzM1MTliZTM1ZTJhZWU5
N2Q4MDIzYjM2MmY5YTI1ZWNhODhiNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCkBAIC05MTksNyArOTE5LDcgQEAgYm9vbCBSZW5kZXJCb3g6OmNhbkF1dG9zY3JvbGwo
KSBjb25zdAogSW50U2l6ZSBSZW5kZXJCb3g6OmNhbGN1bGF0ZUF1dG9zY3JvbGxEaXJlY3Rpb24o
Y29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KSBjb25zdAogewogICAgIEludFJlY3QgYm94KGFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwotICAgIGJveC5tb3ZlKHZpZXcoKS5mcmFtZVZpZXco
KS5zY3JvbGxPZmZzZXQoKSk7CisgICAgYm94Lm1vdmVCeSh2aWV3KCkuZnJhbWVWaWV3KCkuc2Ny
b2xsUG9zaXRpb24oKSk7CiAgICAgSW50UmVjdCB3aW5kb3dCb3ggPSB2aWV3KCkuZnJhbWVWaWV3
KCkuY29udGVudHNUb1dpbmRvdyhib3gpOwogCiAgICAgSW50UG9pbnQgd2luZG93QXV0b3Njcm9s
bFBvaW50ID0gd2luZG93UG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAppbmRleCBlOGRlYTYzZTgzNjBmOTQ1Y2I5M2EwYjQ5OWZjNTAxN2YyODgxYTJkLi4wZmEz
NGYwMDNlM2Q5MTgxMjMzMDVhZjI2NjFmZmI2YzZjNTc3YWQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI3NDAsMTcgKzI3NDAsMTcgQEAgaW50IFJlbmRl
ckxheWVyOjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKICAgICBy
ZXR1cm4gMDsKIH0KIAotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKCkgY29u
c3QKK1Njcm9sbFBvc2l0aW9uIFJlbmRlckxheWVyOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KTsKKyAgICByZXR1cm4gU2Nyb2xs
UG9zaXRpb24obV9zY3JvbGxPZmZzZXQpOwogfQogCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6bWlu
aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK1Njcm9sbFBvc2l0aW9uIFJlbmRlckxheWVyOjpt
aW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIHJldHVybiAtc2Nyb2xsT3JpZ2lu
KCk7CiB9CiAKLUludFBvaW50IFJlbmRlckxheWVyOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBj
b25zdAorU2Nyb2xsUG9zaXRpb24gUmVuZGVyTGF5ZXI6Om1heGltdW1TY3JvbGxQb3NpdGlvbigp
IGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IG1fc2Nyb2xsU2l6ZSBtYXkgbm90IGJlIHVwLXRvLWRh
dGUgaWYgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgaXMgdHJ1ZS4KICAgICByZXR1cm4gLXNjcm9s
bE9yaWdpbigpICsgcm91bmRlZEludFNpemUobV9zY3JvbGxTaXplKSAtIHZpc2libGVDb250ZW50
UmVjdEluY2x1ZGluZ1Njcm9sbGJhcnMoQ29udGVudHNWaXNpYmxlUmVjdCkuc2l6ZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCBhNzczZWNiNmY3N2IyMmYwOTVl
NzYyMjJjMmQyOWY0ODM5NmI4YWQ5Li42NjQ0OTJkNDAxNGYyMjAwYTJjMTM5Y2U2Y2VlZjI3Mzgw
MzVhMDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtODY0LDkg
Kzg2NCw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVu
dGF0aW9uKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0
KGNvbnN0IEludFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgSW50UG9pbnQgbWluaW11bVNj
cm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBtYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFNjcm9sbFBv
c2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTY3Jv
bGxQb3NpdGlvbiBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFNjcm9sbFBvc2l0aW9uIG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNp
YmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250ZW50UmVjdEJlaGF2
aW9yKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIEludFNpemUgdmlzaWJsZVNpemUoKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3Qg
b3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4
IGNjOWI4Y2U0MmM0OTcxNTEzMTc0YmI4ZTkwYjQ1NmJlMDRjZmVlM2MuLmY5OWVkNGU4MzFmMGI4
ZTJlYjhiMDRhMzY5MTYyN2ViNzM0ZDU2YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuY3BwCkBAIC0zNTAsNyArMzUwLDcgQEAgYm9vbCBSZW5kZXJXaWRnZXQ6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXMKICAgICAgICAgUmVuZGVyVmlldyYgY2hpbGRSb290ID0gKmNoaWxkRnJhbWVWaWV3LnJlbmRl
clZpZXcoKTsKIAogICAgICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11
bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwotICAgICAgICBMYXlvdXRQb2ludCBjb250ZW50T2Zm
c2V0ID0gTGF5b3V0UG9pbnQoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9w
KCkgKyBwYWRkaW5nVG9wKCkpIC0gY2hpbGRGcmFtZVZpZXcuc2Nyb2xsT2Zmc2V0KCk7CisgICAg
ICAgIExheW91dFBvaW50IGNvbnRlbnRPZmZzZXQgPSBMYXlvdXRQb2ludChib3JkZXJMZWZ0KCkg
KyBwYWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSkgLSB0b0ludFNpemUo
Y2hpbGRGcmFtZVZpZXcuc2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgICAgIEhpdFRlc3RMb2NhdGlv
biBuZXdIaXRUZXN0TG9jYXRpb24obG9jYXRpb25JbkNvbnRhaW5lciwgLWFkanVzdGVkTG9jYXRp
b24gLSBjb250ZW50T2Zmc2V0KTsKICAgICAgICAgSGl0VGVzdFJlcXVlc3QgbmV3SGl0VGVzdFJl
cXVlc3QocmVxdWVzdC50eXBlKCkgfCBIaXRUZXN0UmVxdWVzdDo6Q2hpbGRGcmFtZUhpdFRlc3Qp
OwogICAgICAgICBIaXRUZXN0UmVzdWx0IGNoaWxkRnJhbWVSZXN1bHQobmV3SGl0VGVzdExvY2F0
aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAppbmRleCA2MmU5ZGQxMTUyN2Fh
M2ZjYTA0YTAwNjExMmMwZWJkNDhjZWU5MDU5Li4xNjgzNjg3ZDQ1MWFjNDU5NTIzYWJiNDVmMjMw
NWJiZTEzZDllYTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCkBAIC00MTYs
OSArNDE2LDkgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OmxvY2FsQ29vcmRpbmF0
ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2MKIAogICAgICAgICAgICAgLy8gUmVz
cGVjdCBzY3JvbGwgb2Zmc2V0LgogICAgICAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGRv
Y3VtZW50KCkudmlldygpKSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZz
ZXQgPSB2aWV3LT5zY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQu
c2NhbGUoem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgt
c2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAg
ICAgICAgIExheW91dFBvaW50IHNjcm9sbE9mZnNldCA9IHZpZXctPnNjcm9sbFBvc2l0aW9uKCk7
CisgICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0LnNjYWxlKHpvb21GYWN0b3IsIHpvb21GYWN0
b3IpOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLXNjcm9sbE9mZnNldC54
KCksIC1zY3JvbGxPZmZzZXQueSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9N
L0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKaW5kZXgg
NjVmYmU3M2I1ZmY3YmZiYTdlMjAyNDRmOGIyM2MyYTgxYmUyYzc1Mi4uOGE5NDUxNDliOGU5Yjgy
NDJkZDM1NmQ0MjIzOTJjYzQ0MTUwZTdjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0
ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCBQYXNzUmVmUHRyPFdl
YkltYWdlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpyZW5kZXJlZEltYWdlKFNuYXBzaG90
T3B0aW9ucyBvcAogICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHNjYWxlRmFj
dG9yLCBzY2FsZUZhY3RvcikpOwogCiAgICAgcGFpbnRSZWN0Lm1vdmUoZnJhbWVWaWV3LT5mcmFt
ZVJlY3QoKS54KCksIGZyYW1lVmlldy0+ZnJhbWVSZWN0KCkueSgpKTsKLSAgICBwYWludFJlY3Qu
bW92ZSgtZnJhbWVWaWV3LT5zY3JvbGxPZmZzZXQoKSk7CisgICAgcGFpbnRSZWN0Lm1vdmVCeSgt
ZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC0+dHJh
bnNsYXRlKC1wYWludFJlY3QueCgpLCAtcGFpbnRSZWN0LnkoKSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvRGVwcmVjYXRlZFBERlBsdWdpbi5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1
Z2luLmgKaW5kZXggZDI1NWEyZmJlMjBmZTMwMDMzOTMzOGVkZjQxNjA2NWFlNTYzZDUwOC4uZDI5
YWM5NDY0MmE5YWI5Y2U4N2UyOTU3Njg5NjJmMzNhMzBjMmVmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1
Z2luLmgKQEAgLTE5Nyw5ICsxOTcsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbENvcm5lclZp
c2libGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgaW50
IHNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3Jv
bGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6U2Nyb2xsUG9zaXRpb24gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxQb3NpdGlvbiBtYXhpbXVtU2Nyb2xs
UG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUg
dmlzaWJsZVNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NpemU7IH0KICAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9wZGZEb2N1bWVudFNpemU7IH0KICAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciog
aG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faG9yaXpvbnRh
bFNjcm9sbGJhci5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tCmluZGV4IDEwNGI3ZDcx
YjdlNTRjMDMzNmI3YTZmNzhhMDJhM2Q4NmViOGYwY2EuLjk0Njc0NTkzY2UyYjE2ZDQxYmRjMzFk
MDA4M2E1NTFjNGMzN2ZjMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvRGVwcmVjYXRlZFBERlBsdWdpbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4ubW0KQEAgLTc4MywxNyAr
NzgzLDE3IEBAIGludCBQREZQbHVnaW46OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xs
YmFyKSBjb25zdAogICAgIHJldHVybiAwOwogfQogCi1JbnRQb2ludCBQREZQbHVnaW46OnNjcm9s
bFBvc2l0aW9uKCkgY29uc3QKK1Njcm9sbFBvc2l0aW9uIFBERlBsdWdpbjo6c2Nyb2xsUG9zaXRp
b24oKSBjb25zdAogewogICAgIHJldHVybiBJbnRQb2ludChtX3Njcm9sbE9mZnNldC53aWR0aCgp
LCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7CiB9CiAKLUludFBvaW50IFBERlBsdWdpbjo6bWlu
aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK1Njcm9sbFBvc2l0aW9uIFBERlBsdWdpbjo6bWlu
aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gSW50UG9pbnQoKTsKIH0K
IAotSW50UG9pbnQgUERGUGx1Z2luOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAorU2Ny
b2xsUG9zaXRpb24gUERGUGx1Z2luOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewog
ICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggZWMw
NWJhYWZjMzEzMjJlMTIxOTFiYWFmY2QwN2ZmMDhjZTAyOGJhZC4uOTE1MzBhNzZlOTA1MjZjMmE0
MDE0Y2JhYTZmNGMzZWEwZjhkZmFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC01NjgsNyArNTY4LDcgQEAgSW50U2l6ZSBXZWJGcmFt
ZTo6c2Nyb2xsT2Zmc2V0KCkgY29uc3QKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBJ
bnRTaXplKCk7CiAKLSAgICByZXR1cm4gdmlldy0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgcmV0dXJu
IHRvSW50U2l6ZSh2aWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKIH0KIAogYm9vbCBXZWJGcmFtZTo6
aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggY2VlNzIyZGQ0YzYxZDVhNWMxYTkxNjZhM2Q1
MGJlZGNjOTk0YjA3Zi4uOGQ5YWY4YTA4NTk4ZDY3NjBiZDMxZmQ2ODhlYzNiZDM0ZDM3OTEyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAt
MTMxNiw4ICsxMzE2LDggQEAgdm9pZCBXZWJQYWdlOjpzY3JvbGxNYWluRnJhbWVJZk5vdEF0TWF4
U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2UKIHsKICAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOwogCi0gICAgSW50UG9p
bnQgc2Nyb2xsUG9zaXRpb24gPSBmcmFtZVZpZXctPnNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgSW50
UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uID0gZnJhbWVWaWV3LT5tYXhpbXVtU2Nyb2xsUG9z
aXRpb24oKTsKKyAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy0+
c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBTY3JvbGxQb3NpdGlvbiBtYXhpbXVtU2Nyb2xsUG9zaXRp
b24gPSBmcmFtZVZpZXctPm1heGltdW1TY3JvbGxQb3NpdGlvbigpOwogCiAgICAgLy8gSWYgdGhl
IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIGluIGEgZGlyZWN0aW9uIGlzIHRoZSBtYXggc2Nyb2xs
IHBvc2l0aW9uIAogICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gc2Nyb2xsIGF0IGFsbC4KQEAgLTM1
MDQsOSArMzUwNCw5IEBAIHZvaWQgV2ViUGFnZTo6YWRkTUlNRVR5cGVXaXRoQ3VzdG9tQ29udGVu
dFByb3ZpZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB2b2lkIFdlYlBhZ2U6OnVwZGF0ZU1h
aW5GcmFtZVNjcm9sbE9mZnNldFBpbm5pbmcoKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCk7Ci0gICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBmcmFtZS52aWV3
KCktPnNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgSW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9u
ID0gZnJhbWUudmlldygpLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKLSAgICBJbnRQb2ludCBt
aW5pbXVtU2Nyb2xsUG9zaXRpb24gPSBmcmFtZS52aWV3KCktPm1pbmltdW1TY3JvbGxQb3NpdGlv
bigpOworICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0gZnJhbWUudmlldygpLT5z
Y3JvbGxQb3NpdGlvbigpOworICAgIFNjcm9sbFBvc2l0aW9uIG1heGltdW1TY3JvbGxQb3NpdGlv
biA9IGZyYW1lLnZpZXcoKS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgU2Nyb2xsUG9z
aXRpb24gbWluaW11bVNjcm9sbFBvc2l0aW9uID0gZnJhbWUudmlldygpLT5taW5pbXVtU2Nyb2xs
UG9zaXRpb24oKTsKIAogICAgIGJvb2wgaXNQaW5uZWRUb0xlZnRTaWRlID0gKHNjcm9sbFBvc2l0
aW9uLngoKSA8PSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24ueCgpKTsKICAgICBib29sIGlzUGlubmVk
VG9SaWdodFNpZGUgPSAoc2Nyb2xsUG9zaXRpb24ueCgpID49IG1heGltdW1TY3JvbGxQb3NpdGlv
bi54KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267992</attachid>
            <date>2015-12-29 13:52:33 -0800</date>
            <delta_ts>2015-12-29 14:05:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152589-20151229135158.patch</filename>
            <type>text/plain</type>
            <size>40039</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk0NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTVmOTVmN2ExN2ZiNGMw
Zjg1MWNiNmQxNTlmMGQ5ZmM4YzVkZDM1NS4uNmY2Zjg2YWY5MzFiOWU1MDI4MzE5ZmM2NmJhZGMz
ODBiYTAxZTg2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDE1LTEyLTI5ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBTY3Jv
bGxWaWV3OjpzY3JvbGxPZmZzZXQoKSBpbiBwcmVwYXJhdGlvbiBmb3Igc2Nyb2xsT2Zmc2V0IHZz
LiBzY3JvbGxQb3NpdGlvbiBjbGFyaWZpY2F0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI1ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50IGNvZGUgdXNlcyBzY3JvbGxPZmZzZXQgdnMu
IHNjcm9sbFBvc2l0aW9uIGludGVyY2hhbmdlYWJseSwgYW5kIGNvbmZ1c2luZ2x5LgorICAgICAg
ICBMb25nZXIgdGVybSwgSSBwbGFuIHRvIG1ha2UgInNjcm9sbFBvc2l0aW9uIiBiZSB0aGUgdmFs
dWUgdGhhdCBpcyByZWxhdGl2ZSB0byB0aGUgCisgICAgICAgIGNvbnRlbnRzLCBpLmUuIGFmZmVj
dGVkIGJ5IHNjcm9sbE9yaWdpbiwgYW5kICJzY3JvbGxPZmZzZXQiIGJlIHRoZSB6ZXJvLWJhc2Vk
IHZhbHVlCisgICAgICAgIHRoYXQncyB1c2VkIHRvIHNldCBzY3JvbGxiYXIgdmFsdWVzLgorICAg
ICAgICAKKyAgICAgICAgVG8gcHJlcGFyZSBmb3IgdGhpcywgcmVtb3ZlIFNjcm9sbFZpZXc6OnNj
cm9sbE9mZnNldCgpLCB3aGljaCBpcyBqdXN0IHRoZQorICAgICAgICBzY3JvbGxQb3NpdGlvbiBh
cyBhbiBJbnRTaXplLgorICAgICAgICAKKyAgICAgICAgQWRkIHNvbWUgdHlwZWRlZnMgaW4gU2Ny
b2xsYWJsZUFyZWEsIHdoaWNoIHdpbGwgc2xvd2x5IHByb3BhZ2F0ZSB0aHJvdWdoIHRoZQorICAg
ICAgICBjb2RlIGFzIHBvc2l0aW9uIHZzLiBvZmZzZXQgaXMgY2xhcmlmaWVkLgorCisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGVudHNRdWFkVG9Db29yZGluYXRlU3lzdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ck92ZXJsYXk6OmhpZ2hsaWdodFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6bG9jYWxQb2ludFRv
Um9vdCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVWaWV3OjpzY3JvbGxPZmZzZXRSZXNwZWN0aW5nQ3VzdG9tRml4ZWRQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRvcENvbnRlbnRJbnNldERpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFkZFRyYWNrZWRSZXBhaW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6d2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFNj
cm9sbFBpbm5pbmdCZWhhdmlvcik6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhblNj
cm9sbEluRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJlY3RUb0Fic29sdXRlQ29vcmRp
bmF0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyTW9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3OjptYXhpbXVtU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OmFkanVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6ZG9jdW1lbnRTY3JvbGxPZmZzZXRSZWxhdGl2ZVRvVmlld09yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpkb2N1bWVudFNjcm9sbE9mZnNldFJlbGF0aXZl
VG9TY3JvbGxhYmxlQXJlYU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpz
ZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVT
Y3JvbGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnJvb3RWaWV3VG9Ub3Rh
bENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldEZyYW1lUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT3JpZ2luKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpj
b252ZXJ0Q2hpbGRUb1NlbGYpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udmVy
dFNlbGZUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbE9mZnNl
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhckludHJ1c2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6Om1pbmltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjdWxhdGVBdXRvc2Ny
b2xsRGlyZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6Om1heGltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6Om5vZGVBdFBvaW50KToKKyAgICAg
ICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVt
ZW50Ojpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybSk6CisKIDIwMTUtMTItMjggIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggV2lu
ZG93cyBidWlsZCwgb3N0ZW5zaWJseSBhZnRlciByMTk0NDI0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGYzNmNj
MTlmZTlhZWI4MTZlNTExYjk3NDEyOWRiYWI4ODQzYmY3NzMuLjQ3NjFkZjZlMDlhMWY2NDA1OTJl
Mzg4ZDQ2OTQ4MDZmOGE0MmI1NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxNS0x
Mi0yOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmUgU2Nyb2xsVmlldzo6c2Nyb2xsT2Zmc2V0KCkgaW4gcHJlcGFyYXRpb24gZm9yIHNjcm9s
bE9mZnNldCB2cy4gc2Nyb2xsUG9zaXRpb24gY2xhcmlmaWNhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNTg5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudCBjb2RlIHVzZXMgc2Nyb2xs
T2Zmc2V0IHZzLiBzY3JvbGxQb3NpdGlvbiBpbnRlcmNoYW5nZWFibHksIGFuZCBjb25mdXNpbmds
eS4KKyAgICAgICAgTG9uZ2VyIHRlcm0sIEkgcGxhbiB0byBtYWtlICJzY3JvbGxQb3NpdGlvbiIg
YmUgdGhlIHZhbHVlIHRoYXQgaXMgcmVsYXRpdmUgdG8gdGhlIAorICAgICAgICBjb250ZW50cywg
aS5lLiBhZmZlY3RlZCBieSBzY3JvbGxPcmlnaW4sIGFuZCAic2Nyb2xsT2Zmc2V0IiBiZSB0aGUg
emVyby1iYXNlZCB2YWx1ZQorICAgICAgICB0aGF0J3MgdXNlZCB0byBzZXQgc2Nyb2xsYmFyIHZh
bHVlcy4KKyAgICAgICAgCisgICAgICAgIFRvIHByZXBhcmUgZm9yIHRoaXMsIHJlbW92ZSBTY3Jv
bGxWaWV3OjpzY3JvbGxPZmZzZXQoKSwgd2hpY2ggaXMganVzdCB0aGUKKyAgICAgICAgc2Nyb2xs
UG9zaXRpb24gYXMgYW4gSW50U2l6ZS4KKyAgICAgICAgCisgICAgICAgIEFkZCBzb21lIHR5cGVk
ZWZzIGluIFNjcm9sbGFibGVBcmVhLCB3aGljaCB3aWxsIHNsb3dseSBwcm9wYWdhdGUgdGhyb3Vn
aCB0aGUKKyAgICAgICAgY29kZSBhcyBwb3NpdGlvbiB2cy4gb2Zmc2V0IGlzIGNsYXJpZmllZC4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFu
ZGxlOjpyZW5kZXJlZEltYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL0Rl
cHJlY2F0ZWRQREZQbHVnaW4uaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL0Rl
cHJlY2F0ZWRQREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2Nyb2xs
UG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1pbmltdW1TY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWF4aW11bVNjcm9sbFBvc2l0aW9u
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJGcmFtZTo6c2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNjcm9sbE1haW5G
cmFtZUlmTm90QXRNYXhTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnVwZGF0ZU1haW5GcmFtZVNjcm9sbE9mZnNldFBpbm5pbmcpOgorCiAyMDE1LTEyLTI1ICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIG1vdmluZyBsb2NhbCBv
YmplY3RzIGluIHJldHVybiBzdGF0ZW1lbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggMDc0NzIxZGY3NDNmZmUwYzk4MWQ0YWZkMDYzYTFh
MDljYjdiNjI1Zi4uODZiMDVmOTY0Y2M1OTRjMzc4YTBhNzM5ZWRmZmM3YTJkMTkyMzA5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtNzIs
NyArNzIsNyBAQCBzdGF0aWMgdm9pZCBjb250ZW50c1F1YWRUb0Nvb3JkaW5hdGVTeXN0ZW0oY29u
c3QgRnJhbWVWaWV3KiBtYWluVmlldywgY29uc3QgRnJhbQogICAgIHF1YWQuc2V0UDQodmlldy0+
Y29udGVudHNUb1Jvb3RWaWV3KHJvdW5kZWRJbnRQb2ludChxdWFkLnA0KCkpKSk7CiAKICAgICBp
ZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBJbnNwZWN0b3JPdmVybGF5OjpDb29yZGluYXRlU3lzdGVt
OjpWaWV3KQotICAgICAgICBxdWFkICs9IG1haW5WaWV3LT5zY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgcXVhZCArPSB0b0ludFNpemUobWFpblZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOwogfQogCiBz
dGF0aWMgdm9pZCBjb250ZW50c1F1YWRUb1BhZ2UoY29uc3QgRnJhbWVWaWV3KiBtYWluVmlldywg
Y29uc3QgRnJhbWVWaWV3KiB2aWV3LCBGbG9hdFF1YWQmIHF1YWQpCkBAIC0yNzgsNyArMjc4LDcg
QEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpoaWdobGlnaHROb2RlKE5vZGUqIG5vZGUsIGNvbnN0
IEhpZ2hsaWdodENvbmZpZyYgaGlnaGxpZ2gKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6aGlnaGxp
Z2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiBxdWFkLCBjb25zdCBIaWdobGlnaHRD
b25maWcmIGhpZ2hsaWdodENvbmZpZykKIHsKICAgICBpZiAoaGlnaGxpZ2h0Q29uZmlnLnVzZVBh
Z2VDb29yZGluYXRlcykKLSAgICAgICAgKnF1YWQgLT0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXco
KS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgICpxdWFkIC09IHRvSW50U2l6ZShtX3BhZ2UubWFp
bkZyYW1lKCkudmlldygpLT5zY3JvbGxQb3NpdGlvbigpKTsKIAogICAgIG1fcXVhZEhpZ2hsaWdo
dENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZzsKICAgICBtX2hpZ2hsaWdodFF1YWQgPSBXVEY6Om1v
dmUocXVhZCk7CkBAIC01OTQsNyArNTk0LDcgQEAgc3RhdGljIEZsb2F0UG9pbnQgbG9jYWxQb2lu
dFRvUm9vdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBGcmFtZVZpZXcqIG1haW4KIHsK
ICAgICBGbG9hdFBvaW50IHJlc3VsdCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUocG9pbnQp
OwogICAgIHJlc3VsdCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhyb3VuZGVkSW50UG9pbnQo
cmVzdWx0KSk7Ci0gICAgcmVzdWx0ICs9IG1haW5WaWV3LT5zY3JvbGxPZmZzZXQoKTsKKyAgICBy
ZXN1bHQgKz0gdG9JbnRTaXplKG1haW5WaWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNWQ0Mzc1NWYx
MmU0N2Q3YWQ4NTYyMjhjNmQwOGU2MmRkNjQyNDA4Zi4uOTkyM2RiNzhhYWI4MGM5MGI0Zjc3YTcz
YTIwOWVlYmUxNGUzMjY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTA4OSw3
ICsxMDg5LDcgQEAgTGF5b3V0UmVjdCBGcmFtZVZpZXc6OmZpeGVkU2Nyb2xsYWJsZUFyZWFCb3Vu
ZHNJbmZsYXRlZEZvclNjcm9sbGluZyhjb25zdCBMYXlvdXQKIExheW91dFNpemUgRnJhbWVWaWV3
OjpzY3JvbGxPZmZzZXRSZXNwZWN0aW5nQ3VzdG9tRml4ZWRQb3NpdGlvbigpIGNvbnN0CiB7CiAj
aWYgUExBVEZPUk0oSU9TKQotICAgIHJldHVybiB1c2VDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0
UmVjdCgpID8gY3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKS5sb2NhdGlvbigpIC0gTGF5
b3V0UG9pbnQoKSA6IHNjcm9sbE9mZnNldCgpOworICAgIHJldHVybiB1c2VDdXN0b21GaXhlZFBv
c2l0aW9uTGF5b3V0UmVjdCgpID8gY3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoKS5sb2Nh
dGlvbigpIC0gTGF5b3V0UG9pbnQoKSA6IHRvTGF5b3V0U2l6ZShzY3JvbGxQb3NpdGlvbigpKTsK
ICNlbHNlCiAgICAgcmV0dXJuIHNjcm9sbE9mZnNldEZvckZpeGVkUG9zaXRpb24oKTsKICNlbmRp
ZgpAQCAtMTEzOCw3ICsxMTM4LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnRvcENvbnRlbnRJbnNldERp
ZENoYW5nZShmbG9hdCBuZXdUb3BDb250ZW50SW5zZXQpCiAgICAgCiAgICAgbGF5b3V0KCk7CiAK
LSAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKKyAgICB1cGRhdGVTY3JvbGxi
YXJzKHNjcm9sbFBvc2l0aW9uKCkpOwogICAgIGlmIChyZW5kZXJWaWV3LT51c2VzQ29tcG9zaXRp
bmcoKSkKICAgICAgICAgcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpLmZyYW1lVmlld0RpZENoYW5n
ZVNpemUoKTsKIApAQCAtMjE2MCwyMCArMjE2MCwxOSBAQCB2b2lkIEZyYW1lVmlldzo6c2V0Rml4
ZWRWaXNpYmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KQog
ICAgICAgICB2aXNpYmxlQ29udGVudFNpemVEaWRDaGFuZ2UgPSB0cnVlOwogICAgIH0KIAotICAg
IEludFNpemUgb2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CiAgICAgSW50UG9pbnQgb2xkUG9zaXRp
b24gPSBzY3JvbGxQb3NpdGlvbigpOwogICAgIFNjcm9sbFZpZXc6OnNldEZpeGVkVmlzaWJsZUNv
bnRlbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCk7Ci0gICAgaWYgKG9mZnNldCAhPSBzY3JvbGxP
ZmZzZXQoKSkgeworICAgIEludFBvaW50IG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsK
KyAgICBpZiAob2xkUG9zaXRpb24gIT0gbmV3UG9zaXRpb24pIHsKICAgICAgICAgdXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpOwogICAgICAgICBpZiAoZnJhbWUoKS5zZXR0aW5n
cygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKQogICAg
ICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbGluZygpOwotICAgICAg
ICBJbnRQb2ludCBuZXdQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgIHNjcm9s
bEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkpOworICAgICAg
ICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbihuZXdQb3NpdGlvbik7CiAgICAg
ICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZChvbGRQb3NpdGlvbiwgbmV3UG9zaXRpb24pOwogICAg
IH0KICAgICBpZiAodmlzaWJsZUNvbnRlbnRTaXplRGlkQ2hhbmdlKSB7CiAgICAgICAgIC8vIFVw
ZGF0ZSB0aGUgc2Nyb2xsLWJhcnMgdG8gY2FsY3VsYXRlIG5ldyBwYWdlLXN0ZXAgc2l6ZS4KLSAg
ICAgICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7CisgICAgICAgIHVwZGF0ZVNj
cm9sbGJhcnMoc2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgfQogICAgIGRpZENoYW5nZVNjcm9sbE9m
ZnNldCgpOwogfQpAQCAtMjM4Niw3ICsyMzg1LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmFkZFRyYWNr
ZWRSZXBhaW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IHI7Ci0gICAgcmVwYWludFJlY3QubW92ZSgtc2Nyb2xs
T2Zmc2V0KCkpOworICAgIHJlcGFpbnRSZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CiAg
ICAgbV90cmFja2VkUmVwYWludFJlY3RzLmFwcGVuZChyZXBhaW50UmVjdCk7CiB9CiAKQEAgLTM0
NzksMTAgKzM0NzgsOSBAQCBib29sIEZyYW1lVmlldzo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25N
YWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKIAogdm9pZCBGcmFtZVZpZXc6
OnNjcm9sbFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNldCkKIHsKLSAgICBMYXlvdXRTaXplIG9m
ZnNldCA9IHNjcm9sbE9mZnNldCgpOwogICAgIEludFBvaW50IG9sZFBvc2l0aW9uID0gc2Nyb2xs
UG9zaXRpb24oKTsKICAgICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwotICAgIGlm
IChvZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgaWYgKG9sZFBvc2l0aW9uICE9IHNjcm9s
bFBvc2l0aW9uKCkpCiAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZChvbGRQb3NpdGlvbiwg
c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CiB9CkBAIC00
NTg3LDExICs0NTg1LDEwIEBAIGJvb2wgRnJhbWVWaWV3Ojp3aGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKICNlbmRpZgogCiAgICAgaWYgKGRlbGVnYXRlc1Nj
cm9sbGluZygpKSB7Ci0gICAgICAgIEludFNpemUgb2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0g
ICAgICAgIEludFBvaW50IG9sZFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAg
SW50U2l6ZSBuZXdPZmZzZXQgPSBJbnRTaXplKG9mZnNldC53aWR0aCgpIC0gd2hlZWxFdmVudC5k
ZWx0YVgoKSwgb2Zmc2V0LmhlaWdodCgpIC0gd2hlZWxFdmVudC5kZWx0YVkoKSk7Ci0gICAgICAg
IGlmIChvZmZzZXQgIT0gbmV3T2Zmc2V0KSB7Ci0gICAgICAgICAgICBTY3JvbGxWaWV3OjpzY3Jv
bGxUbyhuZXdPZmZzZXQpOworICAgICAgICBTY3JvbGxQb3NpdGlvbiBvbGRQb3NpdGlvbiA9IHNj
cm9sbFBvc2l0aW9uKCk7CisgICAgICAgIFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gb2xk
UG9zaXRpb24gLSBJbnRTaXplKHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZ
KCkpOworICAgICAgICBpZiAob2xkUG9zaXRpb24gIT0gbmV3UG9zaXRpb24pIHsKKyAgICAgICAg
ICAgIFNjcm9sbFZpZXc6OnNjcm9sbFRvKHRvSW50U2l6ZShuZXdQb3NpdGlvbikpOwogICAgICAg
ICAgICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKG9sZFBvc2l0aW9uLCBzY3JvbGxQb3NpdGlvbigp
KTsKICAgICAgICAgICAgIGRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogICAgICAgICB9CkBAIC00
Nzk2LDcgKzQ3OTMsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9y
KFNjcm9sbFBpbm5pbmdCZWhhdmlvciBwaW5uaW5nKQogICAgICAgICAgICAgc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPnNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihwaW5uaW5nKTsKICAgICB9CiAgICAg
Ci0gICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7CisgICAgdXBkYXRlU2Nyb2xs
YmFycyhzY3JvbGxQb3NpdGlvbigpKTsKIH0KIAogU2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1l
bnRzIEZyYW1lVmlldzo6c2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCmluZGV4IGIxYjUwNDU3ZDdlYjdhMmVjMTZiNThlNDJmM2YwOTQw
MWM2M2E2ZjEuLjIyY2NkNDkyMzMwNTVjMzc5YTMzMTExYTQyZTlmMTk5YzNiNDc3ZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaApAQCAtMjQyLDggKzI0Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbGluZygpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgSW50
UG9pbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVz
cygpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50UG9pbnQg
bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFNjcm9sbFBvc2l0aW9uIG1pbmltdW1TY3Jv
bGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
U2Nyb2xsUG9zaXRpb24gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIHZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZXN1bWVWaXNpYmxlSW1hZ2VBbmltYXRpb25zSW5jbHVkaW5nU3ViZnJhbWVzKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCmluZGV4IDcyYjAwOGY3ODMy
OTM5NDk3ZTEwMjBjMjA0ZWRkZTZjZjA1NTIxMWIuLjFlNTc1NGY1NzQ2YThjOThjNWQ0ZDQxMTRl
NGU5MzQ4MmZlZmQ0OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5h
dmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24u
Y3BwCkBAIC00ODMsMTggKzQ4MywxOSBAQCBib29sIGNhblNjcm9sbEluRGlyZWN0aW9uKGNvbnN0
IEZyYW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAgIGlmICgoZGlyZWN0
aW9uID09IEZvY3VzRGlyZWN0aW9uVXAgfHwgZGlyZWN0aW9uID09IEZvY3VzRGlyZWN0aW9uRG93
bikgJiYgIFNjcm9sbGJhckFsd2F5c09mZiA9PSB2ZXJ0aWNhbE1vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBMYXlvdXRTaXplIHNpemUgPSBmcmFtZS0+dmlldygpLT50b3RhbENvbnRl
bnRzU2l6ZSgpOwotICAgIExheW91dFNpemUgb2Zmc2V0ID0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xs
T2Zmc2V0KCk7CisgICAgTGF5b3V0UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBmcmFtZS0+dmlldygp
LT5zY3JvbGxQb3NpdGlvbigpOwogICAgIExheW91dFJlY3QgcmVjdCA9IGZyYW1lLT52aWV3KCkt
PnVub2JzY3VyZWRDb250ZW50UmVjdEluY2x1ZGluZ1Njcm9sbGJhcnMoKTsKIAorICAgIC8vIEZJ
WE1FOiB3cm9uZyBpbiBSVEwgZG9jdW1lbnRzLgogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6Ci0gICAgICAgIHJldHVybiBvZmZzZXQud2lkdGgo
KSA+IDA7CisgICAgICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbi54KCkgPiAwOwogICAgIGNhc2Ug
Rm9jdXNEaXJlY3Rpb25VcDoKLSAgICAgICAgcmV0dXJuIG9mZnNldC5oZWlnaHQoKSA+IDA7Cisg
ICAgICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbi55KCkgPiAwOwogICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25SaWdodDoKLSAgICAgICAgcmV0dXJuIHJlY3Qud2lkdGgoKSArIG9mZnNldC53aWR0aCgp
IDwgc2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gcmVjdC53aWR0aCgpICsgc2Nyb2xsUG9z
aXRpb24ueCgpIDwgc2l6ZS53aWR0aCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgot
ICAgICAgICByZXR1cm4gcmVjdC5oZWlnaHQoKSArIG9mZnNldC5oZWlnaHQoKSA8IHNpemUuaGVp
Z2h0KCk7CisgICAgICAgIHJldHVybiByZWN0LmhlaWdodCgpICsgc2Nyb2xsUG9zaXRpb24ueSgp
IDwgc2l6ZS5oZWlnaHQoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTEwLDcgKzUxMSw3IEBAIHN0YXRpYyBM
YXlvdXRSZWN0IHJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUqIGluaXRpYWxGcmFtZSwg
Y29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgcmVjdC5t
b3ZlKGVsZW1lbnQtPm9mZnNldExlZnQoKSwgZWxlbWVudC0+b2Zmc2V0VG9wKCkpOwogICAgICAg
ICAgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LT5vZmZzZXRQYXJlbnQoKSkpOwotICAg
ICAgICAgICAgcmVjdC5tb3ZlKCgtZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIHJlY3QubW92ZUJ5KCgtZnJhbWUtPnZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKSkp
OwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmNwcAppbmRleCBmMjMwMTE4Mzc5YWQ0ZDM3YjgxZmM2NWU2NTU0YzA1ZDI2
MDkwN2Q0Li5jYmNhMjVkMWIyODUxY2QwZWIzNjM1MTNlNmExNGEyZTMyNTQ0ZDQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQg
U2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyTW9kZXMoU2Nyb2xsYmFyTW9kZSBob3Jpem9udGFsTW9k
ZSwgU2Nyb2xsYmFyTW9kZSB2CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHBs
YXRmb3JtU2V0U2Nyb2xsYmFyTW9kZXMoKTsKICAgICBlbHNlCi0gICAgICAgIHVwZGF0ZVNjcm9s
bGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOworICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbFBv
c2l0aW9uKCkpOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbGJhck1vZGVzKFNjcm9sbGJh
ck1vZGUmIGhvcml6b250YWxNb2RlLCBTY3JvbGxiYXJNb2RlJiB2ZXJ0aWNhbE1vZGUpIGNvbnN0
CkBAIC0zNjYsNyArMzY2LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjphdmFpbGFibGVDb250ZW50U2l6
ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChyZWFzb24gIT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xs
YmFyc0NoYW5nZWQpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsT2Zmc2V0KCkpOwor
ICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbFBvc2l0aW9uKCkpOwogfQogCiBJbnRTaXpl
IFNjcm9sbFZpZXc6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0CkBAIC0zODIsMjMgKzM4MiwyMyBAQCB2
b2lkIFNjcm9sbFZpZXc6OnNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQog
ICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAgICBwbGF0Zm9ybVNldENvbnRlbnRzU2l6
ZSgpOwogICAgIGVsc2UKLSAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7
CisgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgdXBkYXRl
T3ZlcmhhbmdBcmVhcygpOwogfQogCi1JbnRQb2ludCBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xs
UG9zaXRpb24oKSBjb25zdAorU2Nyb2xsUG9zaXRpb24gU2Nyb2xsVmlldzo6bWF4aW11bVNjcm9s
bFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KGNvbnRlbnRz
V2lkdGgoKSAtIHZpc2libGVXaWR0aCgpIC0gc2Nyb2xsT3JpZ2luKCkueCgpLCB0b3RhbENvbnRl
bnRzU2l6ZSgpLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpIC0gc2Nyb2xsT3JpZ2luKCkueSgp
KTsKICAgICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKICAgICByZXR1cm4g
bWF4aW11bU9mZnNldDsKIH0KIAotSW50UG9pbnQgU2Nyb2xsVmlldzo6bWluaW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKK1Njcm9sbFBvc2l0aW9uIFNjcm9sbFZpZXc6Om1pbmltdW1TY3JvbGxQ
b3NpdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEludFBvaW50KC1zY3JvbGxPcmlnaW4oKS54
KCksIC1zY3JvbGxPcmlnaW4oKS55KCkpOwogfQogCi1JbnRQb2ludCBTY3JvbGxWaWV3OjphZGp1
c3RTY3JvbGxQb3NpdGlvbldpdGhpblJhbmdlKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb2ludCkg
Y29uc3QKK1Njcm9sbFBvc2l0aW9uIFNjcm9sbFZpZXc6OmFkanVzdFNjcm9sbFBvc2l0aW9uV2l0
aGluUmFuZ2UoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHNjcm9sbFBvaW50KSBjb25zdAogewogICAg
IGlmICghY29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKICAgICAgICAgcmV0dXJu
IHNjcm9sbFBvaW50OwpAQCAtNDA4LDcgKzQwOCw3IEBAIEludFBvaW50IFNjcm9sbFZpZXc6OmFk
anVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2UoY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50
CiAKIEludFNpemUgU2Nyb2xsVmlldzo6ZG9jdW1lbnRTY3JvbGxPZmZzZXRSZWxhdGl2ZVRvVmll
d09yaWdpbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpIC0gSW50U2l6ZSgw
LCBoZWFkZXJIZWlnaHQoKSArIHRvcENvbnRlbnRJbnNldChUb3BDb250ZW50SW5zZXRUeXBlOjpX
ZWJDb3JlT3JQbGF0Zm9ybUNvbnRlbnRJbnNldCkpOworICAgIHJldHVybiB0b0ludFNpemUoc2Ny
b2xsUG9zaXRpb24oKSkgLSBJbnRTaXplKDAsIGhlYWRlckhlaWdodCgpICsgdG9wQ29udGVudElu
c2V0KFRvcENvbnRlbnRJbnNldFR5cGU6OldlYkNvcmVPclBsYXRmb3JtQ29udGVudEluc2V0KSk7
CiB9CiAKIEludFBvaW50IFNjcm9sbFZpZXc6OmRvY3VtZW50U2Nyb2xsUG9zaXRpb25SZWxhdGl2
ZVRvVmlld09yaWdpbigpIGNvbnN0CkBAIC00MTksNyArNDE5LDcgQEAgSW50UG9pbnQgU2Nyb2xs
Vmlldzo6ZG9jdW1lbnRTY3JvbGxQb3NpdGlvblJlbGF0aXZlVG9WaWV3T3JpZ2luKCkgY29uc3QK
IAogSW50U2l6ZSBTY3JvbGxWaWV3Ojpkb2N1bWVudFNjcm9sbE9mZnNldFJlbGF0aXZlVG9TY3Jv
bGxhYmxlQXJlYU9yaWdpbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpIC0g
SW50U2l6ZSgwLCBoZWFkZXJIZWlnaHQoKSk7CisgICAgcmV0dXJuIHRvSW50U2l6ZShzY3JvbGxQ
b3NpdGlvbigpKSAtIEludFNpemUoMCwgaGVhZGVySGVpZ2h0KCkpOwogfQogCiBpbnQgU2Nyb2xs
Vmlldzo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QK
QEAgLTUyOSwyNSArNTI5LDI1IEBAIGludCBTY3JvbGxWaWV3OjpzY3JvbGxQb3NpdGlvbihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBTY3JvbGxW
aWV3OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9pbnQpCit2b2lk
IFNjcm9sbFZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBzY3Jv
bGxQb3NpdGlvbikKIHsKICAgICBpZiAocHJvaGliaXRzU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKSB7Ci0gICAgICAgIHBsYXRmb3JtU2V0
U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9pbnQpOworICAgICAgICBwbGF0Zm9ybVNldFNjcm9sbFBv
c2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIElu
dFBvaW50IG5ld1Njcm9sbFBvc2l0aW9uID0gIWRlbGVnYXRlc1Njcm9sbGluZygpID8gYWRqdXN0
U2Nyb2xsUG9zaXRpb25XaXRoaW5SYW5nZShzY3JvbGxQb2ludCkgOiBzY3JvbGxQb2ludDsKKyAg
ICBJbnRQb2ludCBuZXdTY3JvbGxQb3NpdGlvbiA9ICFkZWxlZ2F0ZXNTY3JvbGxpbmcoKSA/IGFk
anVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2Uoc2Nyb2xsUG9zaXRpb24pIDogc2Nyb2xsUG9z
aXRpb247CiAKLSAgICBpZiAoKCFkZWxlZ2F0ZXNTY3JvbGxpbmcoKSB8fCAhaW5Qcm9ncmFtbWF0
aWNTY3JvbGwoKSkgJiYgbmV3U2Nyb2xsUG9zaXRpb24gPT0gc2Nyb2xsUG9zaXRpb24oKSkKKyAg
ICBpZiAoKCFkZWxlZ2F0ZXNTY3JvbGxpbmcoKSB8fCAhaW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSkg
JiYgbmV3U2Nyb2xsUG9zaXRpb24gPT0gdGhpcy0+c2Nyb2xsUG9zaXRpb24oKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShuZXdTY3JvbGxQ
b3NpdGlvbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZVNjcm9sbGJhcnMoSW50U2l6
ZShuZXdTY3JvbGxQb3NpdGlvbi54KCksIG5ld1Njcm9sbFBvc2l0aW9uLnkoKSkpOworICAgIHVw
ZGF0ZVNjcm9sbGJhcnMobmV3U2Nyb2xsUG9zaXRpb24pOwogfQogCiBib29sIFNjcm9sbFZpZXc6
OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSkKQEAgLTU4Miw3ICs1ODIsNyBAQCBJbnRTaXplIFNjcm9sbFZpZXc6Om92ZXJoYW5n
QW1vdW50KCkgY29uc3QKICAgICByZXR1cm4gc3RyZXRjaDsKIH0KIAotdm9pZCBTY3JvbGxWaWV3
Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpCit2b2lkIFNj
cm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgU2Nyb2xsUG9zaXRpb24mIGRlc2lyZWRQ
b3NpdGlvbikKIHsKICAgICBpZiAobV9pblVwZGF0ZVNjcm9sbGJhcnMgfHwgcHJvaGliaXRzU2Ny
b2xsaW5nKCkgfHwgcGxhdGZvcm1XaWRnZXQoKSB8fCBkZWxlZ2F0ZXNTY3JvbGxpbmcoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNjkzLDcgKzY5Myw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRl
U2Nyb2xsYmFycyhjb25zdCBJbnRTaXplJiBkZXNpcmVkT2Zmc2V0KQogICAgICAgICAgICAgICAg
IC8vIFRoZSBsYXlvdXQgd2l0aCB0aGUgbmV3IHNjcm9sbCBzdGF0ZSBoYWQgbm8gaW1wYWN0IG9u
CiAgICAgICAgICAgICAgICAgLy8gdGhlIGRvY3VtZW50J3Mgb3ZlcmFsbCBzaXplLCBzbyB1cGRh
dGVTY3JvbGxiYXJzIGRpZG4ndCBnZXQgY2FsbGVkLgogICAgICAgICAgICAgICAgIC8vIFJlY3Vy
IG1hbnVhbGx5LgotICAgICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoZGVzaXJlZE9mZnNl
dCk7CisgICAgICAgICAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhkZXNpcmVkUG9zaXRpb24pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbV91cGRhdGVTY3JvbGxiYXJzUGFzcy0tOwogICAg
ICAgICB9CkBAIC03NjAsNyArNzYwLDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxi
YXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpCiAgICAgICAgICAgICBpbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyUmVjdChvbGRTY3JvbGxDb3JuZXJSZWN0KTsKICAgICB9CiAKLSAgICBJbnRQ
b2ludCBhZGp1c3RlZFNjcm9sbFBvc2l0aW9uID0gSW50UG9pbnQoZGVzaXJlZE9mZnNldCk7Cisg
ICAgSW50UG9pbnQgYWRqdXN0ZWRTY3JvbGxQb3NpdGlvbiA9IGRlc2lyZWRQb3NpdGlvbjsKICAg
ICBpZiAoIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSkKICAgICAgICAgYWRqdXN0ZWRTY3JvbGxQ
b3NpdGlvbiA9IGFkanVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2UoYWRqdXN0ZWRTY3JvbGxQ
b3NpdGlvbik7CiAKQEAgLTkyMiw3ICs5MjIsNyBAQCBJbnRQb2ludCBTY3JvbGxWaWV3Ojpyb290
Vmlld1RvVG90YWxDb250ZW50cyhjb25zdCBJbnRQb2ludCYgcm9vdFZpZXdQb2ludCkgY29ucwog
CiAgICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21Sb290Vmlldyhyb290Vmlld1Bv
aW50KTsKICAgICAvLyBMaWtlIHJvb3RWaWV3VG9Db250ZW50cygpLCBidXQgaWdub3JlcyBoZWFk
ZXJIZWlnaHQuCi0gICAgcmV0dXJuIHZpZXdQb2ludCArIHNjcm9sbE9mZnNldCgpIC0gSW50U2l6
ZSgwLCB0b3BDb250ZW50SW5zZXQoVG9wQ29udGVudEluc2V0VHlwZTo6V2ViQ29yZU9yUGxhdGZv
cm1Db250ZW50SW5zZXQpKTsKKyAgICByZXR1cm4gdmlld1BvaW50ICsgdG9JbnRTaXplKHNjcm9s
bFBvc2l0aW9uKCkpIC0gSW50U2l6ZSgwLCB0b3BDb250ZW50SW5zZXQoVG9wQ29udGVudEluc2V0
VHlwZTo6V2ViQ29yZU9yUGxhdGZvcm1Db250ZW50SW5zZXQpKTsKIH0KIAogSW50UmVjdCBTY3Jv
bGxWaWV3Ojpjb250ZW50c1RvUm9vdFZpZXcoY29uc3QgSW50UmVjdCYgY29udGVudHNSZWN0KSBj
b25zdApAQCAtMTAzNyw3ICsxMDM3LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpzZXRGcmFtZVJlY3Qo
Y29uc3QgSW50UmVjdCYgbmV3UmVjdCkKICAgICBXaWRnZXQ6OnNldEZyYW1lUmVjdChuZXdSZWN0
KTsKICAgICBmcmFtZVJlY3RzQ2hhbmdlZCgpOwogCi0gICAgdXBkYXRlU2Nyb2xsYmFycyhzY3Jv
bGxPZmZzZXQoKSk7CisgICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxQb3NpdGlvbigpKTsKICAg
ICAKICAgICBpZiAoIW1fdXNlRml4ZWRMYXlvdXQgJiYgb2xkUmVjdC5zaXplKCkgIT0gbmV3UmVj
dC5zaXplKCkpCiAgICAgICAgIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVT
aXplQ2hhbmdlUmVhc29uOjpBcmVhU2l6ZUNoYW5nZWQpOwpAQCAtMTE1NSw3ICsxMTU1LDcgQEAg
dm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoU2Nyb2xsYmFyU3R5bGUgbmV3
U3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUKICAgICBpZiAoIWZvcmNlVXBkYXRlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICB1cGRhdGVTY3JvbGxiYXJzKHNjcm9sbE9mZnNldCgpKTsKKyAgICB1cGRh
dGVTY3JvbGxiYXJzKHNjcm9sbFBvc2l0aW9uKCkpOwogICAgIHBvc2l0aW9uU2Nyb2xsYmFyTGF5
ZXJzKCk7CiB9CiAKQEAgLTE0ODAsNyArMTQ4MCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Ny
b2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGJvb2wgdXBkYXRlUG9zaXRpb25BdEFs
CiAgICAgCiAgICAgLy8gVXBkYXRlIGlmIHRoZSBzY3JvbGwgb3JpZ2luIGNoYW5nZXMsIHNpbmNl
IG91ciBwb3NpdGlvbiB3aWxsIGJlIGRpZmZlcmVudCBpZiB0aGUgY29udGVudCBzaXplIGRpZCBu
b3QgY2hhbmdlLgogICAgIGlmICh1cGRhdGVQb3NpdGlvbkF0QWxsICYmIHVwZGF0ZVBvc2l0aW9u
U3luY2hyb25vdXNseSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhzY3JvbGxPZmZzZXQoKSk7
CisgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoc2Nyb2xsUG9zaXRpb24oKSk7CiB9CiAKIHZvaWQg
U2Nyb2xsVmlldzo6c3R5bGVEaWRDaGFuZ2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCmluZGV4IGY0NmUwMTdmYzVjMmVmN2U3MTgyYTM3MTAwYmQzZTQ3NjFiMDAwMmUuLjg1YTA0
ZTdjNzFiMDk2NTZjM2QwYjNlZmQxOWM4MDQ5OWVjZGIxMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgKQEAgLTIyNSwxMiArMjI1LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmKTsKIAogICAgIC8vIEZ1bmN0aW9u
cyBmb3IgcXVlcnlpbmcgdGhlIGN1cnJlbnQgc2Nyb2xsZWQgcG9zaXRpb24gKGJvdGggYXMgYSBw
b2ludCwgYSBzaXplLCBvciBhcyBpbmRpdmlkdWFsIFggYW5kIFkgdmFsdWVzKS4KLSAgICB2aXJ0
dWFsIEludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdmlz
aWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpLmxvY2F0aW9uKCk7
IH0KLSAgICBJbnRTaXplIHNjcm9sbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHRvSW50U2l6ZSh2
aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkubG9jYXRpb24o
KSk7IH0gLy8gR2V0cyB0aGUgc2Nyb2xsZWQgcG9zaXRpb24gYXMgYW4gSW50U2l6ZS4gQ29udmVu
aWVudCBmb3IgYWRkaW5nIHRvIG90aGVyIHNpemVzLgotICAgIHZpcnR1YWwgSW50UG9pbnQgbWF4
aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7IC8vIFRoZSBtYXhpbXVtIHBvc2l0
aW9uIHdlIGNhbiBiZSBzY3JvbGxlZCB0by4KLSAgICB2aXJ0dWFsIEludFBvaW50IG1pbmltdW1T
Y3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOyAvLyBUaGUgbWluaW11bSBwb3NpdGlvbiB3
ZSBjYW4gYmUgc2Nyb2xsZWQgdG8uCisgICAgdmlydHVhbCBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHZpc2libGVDb250ZW50UmVjdChMZWdh
Y3lJT1NEb2N1bWVudFZpc2libGVSZWN0KS5sb2NhdGlvbigpOyB9CisKKyAgICB2aXJ0dWFsIFNj
cm9sbFBvc2l0aW9uIG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOyAvLyBU
aGUgbWF4aW11bSBwb3NpdGlvbiB3ZSBjYW4gYmUgc2Nyb2xsZWQgdG8uCisgICAgdmlydHVhbCBT
Y3JvbGxQb3NpdGlvbiBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsgLy8g
VGhlIG1pbmltdW0gcG9zaXRpb24gd2UgY2FuIGJlIHNjcm9sbGVkIHRvLgorCiAgICAgLy8gQWRq
dXN0IHRoZSBwYXNzZWQgaW4gc2Nyb2xsIHBvc2l0aW9uIHRvIGtlZXAgaXQgYmV0d2VlbiB0aGUg
bWluaW11bSBhbmQgbWF4aW11bSBwb3NpdGlvbnMuCi0gICAgSW50UG9pbnQgYWRqdXN0U2Nyb2xs
UG9zaXRpb25XaXRoaW5SYW5nZShjb25zdCBJbnRQb2ludCYpIGNvbnN0OyAKKyAgICBTY3JvbGxQ
b3NpdGlvbiBhZGp1c3RTY3JvbGxQb3NpdGlvbldpdGhpblJhbmdlKGNvbnN0IFNjcm9sbFBvc2l0
aW9uJikgY29uc3Q7CiAgICAgaW50IHNjcm9sbFgoKSBjb25zdCB7IHJldHVybiBzY3JvbGxQb3Np
dGlvbigpLngoKTsgfQogICAgIGludCBzY3JvbGxZKCkgY29uc3QgeyByZXR1cm4gc2Nyb2xsUG9z
aXRpb24oKS55KCk7IH0KIApAQCAtMjY3LDcgKzI2OCw3IEBAIHB1YmxpYzoKICAgICBJbnRQb2lu
dCBjYWNoZWRTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2Nyb2xsUG9z
aXRpb247IH0KIAogICAgIC8vIEZ1bmN0aW9ucyBmb3Igc2Nyb2xsaW5nIHRoZSB2aWV3LgotICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwogICAg
IHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgcykgeyByZXR1cm4gc2V0U2Nyb2xsUG9zaXRp
b24oc2Nyb2xsUG9zaXRpb24oKSArIHMpOyB9CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHNjcm9s
bHMgYnkgbGluZXMsIHBhZ2VzIG9yIHBpeGVscy4KQEAgLTMzMSw3ICszMzIsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBJbnRQb2ludCBuZXdQb2ludCA9IHBvaW50OwogICAgICAgICBpZiAo
IWlzU2Nyb2xsVmlld1Njcm9sbGJhcihjaGlsZCkpCi0gICAgICAgICAgICBuZXdQb2ludCA9IHBv
aW50IC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgICAgICBuZXdQb2ludCA9IHBvaW50IC0gdG9J
bnRTaXplKHNjcm9sbFBvc2l0aW9uKCkpOwogICAgICAgICBuZXdQb2ludC5tb3ZlQnkoY2hpbGQt
PmxvY2F0aW9uKCkpOwogICAgICAgICByZXR1cm4gbmV3UG9pbnQ7CiAgICAgfQpAQCAtMzQwLDcg
KzM0MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEludFBvaW50IG5ld1BvaW50ID0gcG9p
bnQ7CiAgICAgICAgIGlmICghaXNTY3JvbGxWaWV3U2Nyb2xsYmFyKGNoaWxkKSkKLSAgICAgICAg
ICAgIG5ld1BvaW50ID0gcG9pbnQgKyBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgIG5ld1Bv
aW50ID0gcG9pbnQgKyB0b0ludFNpemUoc2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgICAgIG5ld1Bv
aW50Lm1vdmVCeSgtY2hpbGQtPmxvY2F0aW9uKCkpOwogICAgICAgICByZXR1cm4gbmV3UG9pbnQ7
CiAgICAgfQpAQCAtNDA5LDcgKzQxMCw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
aXNGbGlwcGVkRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gQ2Fs
bGVkIHRvIHVwZGF0ZSB0aGUgc2Nyb2xsYmFycyB0byBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlIHN0
YXRlIG9mIHRoZSB2aWV3LgotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycyhjb25zdCBJbnRTaXpl
JiBkZXNpcmVkT2Zmc2V0KTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgU2Nyb2xs
UG9zaXRpb24mIGRlc2lyZWRQb3NpdGlvbik7CiAKICAgICBmbG9hdCBwbGF0Zm9ybVRvcENvbnRl
bnRJbnNldCgpIGNvbnN0OwogICAgIHZvaWQgcGxhdGZvcm1TZXRUb3BDb250ZW50SW5zZXQoZmxv
YXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDNi
Y2MyNWRjODU2MGY1NjVjNTA3MTE4ZTk3ODkzNDIzYjhkYzBmMmMuLmJlNWFmYTdiNDA2MGFiNjkw
MDU4OWIwYzZkYWNlMmU1MjU0NTZhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxhYmxlQXJlYS5jcHAKQEAgLTUxOCwyNCArNTE4LDI2IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6
OmlzUGlubmVkVmVydGljYWxseUluRGlyZWN0aW9uKGludCB2ZXJ0aWNhbFNjcm9sbERlbHRhKSBj
b25zCiAKIEludFNpemUgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhckludHJ1c2lvbigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIEludFNpemUoCisgICAgcmV0dXJuIHsKICAgICAgICAgdmVydGljYWxT
Y3JvbGxiYXIoKSA/IHZlcnRpY2FsU2Nyb2xsYmFyKCktPm9jY3VwaWVkV2lkdGgoKSA6IDAsCi0g
ICAgICAgIGhvcml6b250YWxTY3JvbGxiYXIoKSA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+b2Nj
dXBpZWRIZWlnaHQoKSA6IDApOworICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyKCkgPyBob3Jp
em9udGFsU2Nyb2xsYmFyKCktPm9jY3VwaWVkSGVpZ2h0KCkgOiAwCisgICAgfTsKIH0KIAotSW50
UG9pbnQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK1Njcm9sbFBvc2l0
aW9uIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7CisgICAgLy8gRklY
TUU6IFRoaXMgcmVsYXRpb25zaGlwIHNlZW1zIHRvIGJlIGludmVydGVkLiBTY3JvbGxiYXJzIHNo
b3VsZCBiZSAndmlldycsIG5vdCAnbW9kZWwnLCBhbmQgc2hvdWxkIGdldCB0aGVpciB2YWx1ZXMg
ZnJvbSB1cy4KICAgICBpbnQgeCA9IGhvcml6b250YWxTY3JvbGxiYXIoKSA/IGhvcml6b250YWxT
Y3JvbGxiYXIoKS0+dmFsdWUoKSA6IDA7CiAgICAgaW50IHkgPSB2ZXJ0aWNhbFNjcm9sbGJhcigp
ID8gdmVydGljYWxTY3JvbGxiYXIoKS0+dmFsdWUoKSA6IDA7CiAgICAgcmV0dXJuIEludFBvaW50
KHgsIHkpOwogfQogCi1JbnRQb2ludCBTY3JvbGxhYmxlQXJlYTo6bWluaW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3QKK1Njcm9sbFBvc2l0aW9uIFNjcm9sbGFibGVBcmVhOjptaW5pbXVtU2Nyb2xs
UG9zaXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBJbnRQb2ludCgpOwogfQogCi1JbnRQb2lu
dCBTY3JvbGxhYmxlQXJlYTo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK1Njcm9sbFBv
c2l0aW9uIFNjcm9sbGFibGVBcmVhOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewog
ICAgIHJldHVybiBJbnRQb2ludCh0b3RhbENvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSB2aXNpYmxl
V2lkdGgoKSwgdG90YWxDb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRleCBiZTIwYjY0
OGU2NWNlN2ZkM2FkMDFkODYwOTE3MzA2ZjM3NTM0OTNmLi43ZmRhZmEzYzYwMjIwZTA1ZDhjYTE3
YjZjMmZhODMwM2NmMDU2ZDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVB
cmVhLmgKQEAgLTQxLDYgKzQxLDExIEBAIGNsYXNzIFNjcm9sbEFuaW1hdG9yOwogY2xhc3MgR3Jh
cGhpY3NMYXllcjsKIGNsYXNzIFRpbGVkQmFja2luZzsKIAorLy8gc2Nyb2xsUG9zaXRpb24gaXMg
aW4gY29udGVudCBjb29yZGluYXRlcyAoMCwwIGlzIGF0IHNjcm9sbE9yaWdpbiksIHNvIG1heSBo
YXZlIG5lZ2F0aXZlIGNvbXBvbmVudHMuCit0eXBlZGVmIEludFBvaW50IFNjcm9sbFBvc2l0aW9u
OworLy8gc2Nyb2xsT2Zmc2V0KCkgaXMgdGhlIHZhbHVlIHVzZWQgYnkgc2Nyb2xsYmFycyAobWlu
IGlzIDAsMCksIGFuZCBzaG91bGQgbmV2ZXIgaGF2ZSBuZWdhdGl2ZSBjb21wb25lbnRzLgordHlw
ZWRlZiBJbnRQb2ludCBTY3JvbGxPZmZzZXQ7CisKIGNsYXNzIFNjcm9sbGFibGVBcmVhIHsKIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CkBAIC0xNzksOSArMTg0LDEw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICB2aXJ0dWFsIEludFBvaW50IHNjcm9s
bFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9z
aXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlv
bigpIGNvbnN0OworICAgIHZpcnR1YWwgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFNjcm9sbFBvc2l0aW9uIG1pbmltdW1TY3JvbGxQb3NpdGlvbigp
IGNvbnN0OworICAgIHZpcnR1YWwgU2Nyb2xsUG9zaXRpb24gbWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkgY29uc3Q7CisKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIGJvb2wgc2Nyb2xsZWRUb1Rv
cCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgYm9vbCBzY3JvbGxlZFRvQm90
dG9tKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBib29sIHNjcm9sbGVkVG9M
ZWZ0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGMx
MWUxMGUwNmIxZjU3MzRjMTI2ZDNkNWRkY2Y3NjA1YmZkMmQzYjIuLjA2NzM1MTliZTM1ZTJhZWU5
N2Q4MDIzYjM2MmY5YTI1ZWNhODhiNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCkBAIC05MTksNyArOTE5LDcgQEAgYm9vbCBSZW5kZXJCb3g6OmNhbkF1dG9zY3JvbGwo
KSBjb25zdAogSW50U2l6ZSBSZW5kZXJCb3g6OmNhbGN1bGF0ZUF1dG9zY3JvbGxEaXJlY3Rpb24o
Y29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KSBjb25zdAogewogICAgIEludFJlY3QgYm94KGFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwotICAgIGJveC5tb3ZlKHZpZXcoKS5mcmFtZVZpZXco
KS5zY3JvbGxPZmZzZXQoKSk7CisgICAgYm94Lm1vdmVCeSh2aWV3KCkuZnJhbWVWaWV3KCkuc2Ny
b2xsUG9zaXRpb24oKSk7CiAgICAgSW50UmVjdCB3aW5kb3dCb3ggPSB2aWV3KCkuZnJhbWVWaWV3
KCkuY29udGVudHNUb1dpbmRvdyhib3gpOwogCiAgICAgSW50UG9pbnQgd2luZG93QXV0b3Njcm9s
bFBvaW50ID0gd2luZG93UG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAppbmRleCBlOGRlYTYzZTgzNjBmOTQ1Y2I5M2EwYjQ5OWZjNTAxN2YyODgxYTJkLi4wZmEz
NGYwMDNlM2Q5MTgxMjMzMDVhZjI2NjFmZmI2YzZjNTc3YWQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI3NDAsMTcgKzI3NDAsMTcgQEAgaW50IFJlbmRl
ckxheWVyOjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKICAgICBy
ZXR1cm4gMDsKIH0KIAotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKCkgY29u
c3QKK1Njcm9sbFBvc2l0aW9uIFJlbmRlckxheWVyOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KTsKKyAgICByZXR1cm4gU2Nyb2xs
UG9zaXRpb24obV9zY3JvbGxPZmZzZXQpOwogfQogCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6bWlu
aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK1Njcm9sbFBvc2l0aW9uIFJlbmRlckxheWVyOjpt
aW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIHJldHVybiAtc2Nyb2xsT3JpZ2lu
KCk7CiB9CiAKLUludFBvaW50IFJlbmRlckxheWVyOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBj
b25zdAorU2Nyb2xsUG9zaXRpb24gUmVuZGVyTGF5ZXI6Om1heGltdW1TY3JvbGxQb3NpdGlvbigp
IGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IG1fc2Nyb2xsU2l6ZSBtYXkgbm90IGJlIHVwLXRvLWRh
dGUgaWYgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgaXMgdHJ1ZS4KICAgICByZXR1cm4gLXNjcm9s
bE9yaWdpbigpICsgcm91bmRlZEludFNpemUobV9zY3JvbGxTaXplKSAtIHZpc2libGVDb250ZW50
UmVjdEluY2x1ZGluZ1Njcm9sbGJhcnMoQ29udGVudHNWaXNpYmxlUmVjdCkuc2l6ZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCBhNzczZWNiNmY3N2IyMmYwOTVl
NzYyMjJjMmQyOWY0ODM5NmI4YWQ5Li42NjQ0OTJkNDAxNGYyMjAwYTJjMTM5Y2U2Y2VlZjI3Mzgw
MzVhMDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtODY0LDkg
Kzg2NCw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVu
dGF0aW9uKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0
KGNvbnN0IEludFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgSW50UG9pbnQgbWluaW11bVNj
cm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBtYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFNjcm9sbFBv
c2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTY3Jv
bGxQb3NpdGlvbiBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFNjcm9sbFBvc2l0aW9uIG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNp
YmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250ZW50UmVjdEJlaGF2
aW9yKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIEludFNpemUgdmlzaWJsZVNpemUoKSBj
b25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3Qg
b3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4
IGNjOWI4Y2U0MmM0OTcxNTEzMTc0YmI4ZTkwYjQ1NmJlMDRjZmVlM2MuLmY5OWVkNGU4MzFmMGI4
ZTJlYjhiMDRhMzY5MTYyN2ViNzM0ZDU2YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuY3BwCkBAIC0zNTAsNyArMzUwLDcgQEAgYm9vbCBSZW5kZXJXaWRnZXQ6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXMKICAgICAgICAgUmVuZGVyVmlldyYgY2hpbGRSb290ID0gKmNoaWxkRnJhbWVWaWV3LnJlbmRl
clZpZXcoKTsKIAogICAgICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11
bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpOwotICAgICAgICBMYXlvdXRQb2ludCBjb250ZW50T2Zm
c2V0ID0gTGF5b3V0UG9pbnQoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYm9yZGVyVG9w
KCkgKyBwYWRkaW5nVG9wKCkpIC0gY2hpbGRGcmFtZVZpZXcuc2Nyb2xsT2Zmc2V0KCk7CisgICAg
ICAgIExheW91dFBvaW50IGNvbnRlbnRPZmZzZXQgPSBMYXlvdXRQb2ludChib3JkZXJMZWZ0KCkg
KyBwYWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSkgLSB0b0ludFNpemUo
Y2hpbGRGcmFtZVZpZXcuc2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgICAgIEhpdFRlc3RMb2NhdGlv
biBuZXdIaXRUZXN0TG9jYXRpb24obG9jYXRpb25JbkNvbnRhaW5lciwgLWFkanVzdGVkTG9jYXRp
b24gLSBjb250ZW50T2Zmc2V0KTsKICAgICAgICAgSGl0VGVzdFJlcXVlc3QgbmV3SGl0VGVzdFJl
cXVlc3QocmVxdWVzdC50eXBlKCkgfCBIaXRUZXN0UmVxdWVzdDo6Q2hpbGRGcmFtZUhpdFRlc3Qp
OwogICAgICAgICBIaXRUZXN0UmVzdWx0IGNoaWxkRnJhbWVSZXN1bHQobmV3SGl0VGVzdExvY2F0
aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAppbmRleCA2MmU5ZGQxMTUyN2Fh
M2ZjYTA0YTAwNjExMmMwZWJkNDhjZWU5MDU5Li4xNjgzNjg3ZDQ1MWFjNDU5NTIzYWJiNDVmMjMw
NWJiZTEzZDllYTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCkBAIC00MTYs
OSArNDE2LDkgQEAgQWZmaW5lVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OmxvY2FsQ29vcmRpbmF0
ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2MKIAogICAgICAgICAgICAgLy8gUmVz
cGVjdCBzY3JvbGwgb2Zmc2V0LgogICAgICAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGRv
Y3VtZW50KCkudmlldygpKSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZz
ZXQgPSB2aWV3LT5zY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQu
c2NhbGUoem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgt
c2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAg
ICAgICAgIExheW91dFBvaW50IHNjcm9sbE9mZnNldCA9IHZpZXctPnNjcm9sbFBvc2l0aW9uKCk7
CisgICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0LnNjYWxlKHpvb21GYWN0b3IsIHpvb21GYWN0
b3IpOworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLXNjcm9sbE9mZnNldC54
KCksIC1zY3JvbGxPZmZzZXQueSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJL
aXQvd2luL1dlYkZyYW1lLmNwcAppbmRleCBjZWIxOGRjMzAzNDE1OWQ3ODE5ZmZjNTkyNmY2MDA5
ZGQxNGZiMzgyLi5jYTliMGUwM2QyY2E2ODJhOGNkOTg0ZWE4MzU0OGUwOTMwOGMyMzYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC93aW4vV2ViRnJhbWUuY3BwCkBAIC05MDEsNyArOTAxLDcgQEAgSFJFU1VMVCBXZWJGcmFtZTo6
c2Nyb2xsT2Zmc2V0KF9PdXRfIFNJWkUqIG9mZnNldCkKICAgICBpZiAoIXZpZXcpCiAgICAgICAg
IHJldHVybiBFX0ZBSUw7CiAKLSAgICAqb2Zmc2V0ID0gdmlldy0+c2Nyb2xsT2Zmc2V0KCk7Cisg
ICAgKm9mZnNldCA9IHRvSW50U2l6ZSh2aWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICByZXR1
cm4gU19PSzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAppbmRleCA4YTBhYjIzMWY1ZWJhNTJjZDE2
YzVkNTZkMDhkYmNjNGQ5ZjBmZTI2Li4xNThmYzU2MDgwNGY1M2ExMTBkNDljOTU0NGIwOTBhNzVk
OTFmMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcApAQCAtMzc4OSw3ICszNzg5LDcgQEAgSFJFU1VM
VCBXZWJWaWV3OjpyZWN0c0ZvclRleHRNYXRjaGVzKF9DT01fT3V0cHRyX29wdF8gSUVudW1UZXh0
TWF0Y2hlcyoqIHBtYXRjaGUKICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1l
LT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gZnJhbWUt
PnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgICAgICBWZWN0b3I8RmxvYXRS
ZWN0PiBmcmFtZVJlY3RzID0gZG9jdW1lbnQtPm1hcmtlcnMoKS5yZW5kZXJlZFJlY3RzRm9yTWFy
a2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKLSAgICAgICAgICAgIEludFBvaW50IGZy
YW1lT2Zmc2V0KC1mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKS53aWR0aCgpLCAtZnJhbWUt
PnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0KCkpOworICAgICAgICAgICAgSW50UG9pbnQg
ZnJhbWVPZmZzZXQgPSAtZnJhbWUtPnZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKTsKICAgICAgICAg
ICAgIGZyYW1lT2Zmc2V0ID0gZnJhbWUtPnZpZXcoKS0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRv
dyhmcmFtZU9mZnNldCk7CiAKICAgICAgICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+OjppdGVyYXRv
ciBlbmQgPSBmcmFtZVJlY3RzLmVuZCgpOwpAQCAtMzgzNSw3ICszODM1LDcgQEAgSFJFU1VMVCBX
ZWJWaWV3OjpzZWxlY3Rpb25SZWN0KF9Jbm91dF8gUkVDVCogcmMpCiAKICAgICBJbnRSZWN0IGly
ID0gZW5jbG9zaW5nSW50UmVjdChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25Cb3VuZHMoKSk7
CiAgICAgaXIgPSBmcmFtZS52aWV3KCktPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coaXIpOwot
ICAgIGlyLm1vdmUoLWZyYW1lLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkud2lkdGgoKSwgLWZyYW1l
LnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0KCkpOworICAgIGlyLm1vdmVCeSgtZnJhbWUu
dmlldygpLT5zY3JvbGxQb3NpdGlvbigpKTsKIAogICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2
aWNlU2NhbGVGYWN0b3IoKTsKICAgICByYy0+bGVmdCA9IGlyLngoKSAqIHNjYWxlRmFjdG9yOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00v
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRleCA2
NWZiZTczYjVmZjdiZmJhN2UyMDI0NGY4YjIzYzJhODFiZTJjNzUyLi44YTk0NTE0OWI4ZTliODI0
MmRkMzU2ZDQyMjM5MmNjNDQxNTBlN2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIFBhc3NSZWZQdHI8V2Vi
SW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RP
cHRpb25zIG9wCiAgICAgZ3JhcGhpY3NDb250ZXh0LT5zY2FsZShGbG9hdFNpemUoc2NhbGVGYWN0
b3IsIHNjYWxlRmFjdG9yKSk7CiAKICAgICBwYWludFJlY3QubW92ZShmcmFtZVZpZXctPmZyYW1l
UmVjdCgpLngoKSwgZnJhbWVWaWV3LT5mcmFtZVJlY3QoKS55KCkpOwotICAgIHBhaW50UmVjdC5t
b3ZlKC1mcmFtZVZpZXctPnNjcm9sbE9mZnNldCgpKTsKKyAgICBwYWludFJlY3QubW92ZUJ5KC1m
cmFtZVZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOwogCiAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFu
c2xhdGUoLXBhaW50UmVjdC54KCksIC1wYWludFJlY3QueSgpKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVn
aW4uaAppbmRleCBkMjU1YTJmYmUyMGZlMzAwMzM5MzM4ZWRmNDE2MDY1YWU1NjNkNTA4Li5kMjlh
Yzk0NjQyYTlhYjljZTg3ZTI5NTc2ODk2MmYzM2EzMGMyZWYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVn
aW4uaApAQCAtMTk3LDkgKzE5Nyw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzQWN0
aXZlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29ybmVyVmlz
aWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBpbnQg
c2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFyKikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtYXhpbXVtU2Ny
b2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9s
bFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBX
ZWJDb3JlOjpTY3JvbGxQb3NpdGlvbiBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbFBvc2l0aW9uIG1heGltdW1TY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSB2
aXNpYmxlU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX3BkZkRvY3VtZW50U2l6ZTsgfQogICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiBo
b3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL0RlcHJlY2F0ZWRQREZQbHVnaW4ubW0KaW5kZXggMTA0YjdkNzFi
N2U1NGMwMzM2YjdhNmY3OGEwMmEzZDg2ZWI4ZjBjYS4uOTQ2NzQ1OTNjZTJiMTZkNDFiZGMzMWQw
MDgzYTU1MWM0YzM3ZmMxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9EZXByZWNhdGVkUERGUGx1Z2luLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvRGVwcmVjYXRlZFBERlBsdWdpbi5tbQpAQCAtNzgzLDE3ICs3
ODMsMTcgQEAgaW50IFBERlBsdWdpbjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxi
YXIpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLUludFBvaW50IFBERlBsdWdpbjo6c2Nyb2xs
UG9zaXRpb24oKSBjb25zdAorU2Nyb2xsUG9zaXRpb24gUERGUGx1Z2luOjpzY3JvbGxQb3NpdGlv
bigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCks
IG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKIH0KIAotSW50UG9pbnQgUERGUGx1Z2luOjptaW5p
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAorU2Nyb2xsUG9zaXRpb24gUERGUGx1Z2luOjptaW5p
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBJbnRQb2ludCgpOwogfQog
Ci1JbnRQb2ludCBQREZQbHVnaW46Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0CitTY3Jv
bGxQb3NpdGlvbiBQREZQbHVnaW46Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7CiAg
ICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAppbmRleCBlYzA1
YmFhZmMzMTMyMmUxMjE5MWJhYWZjZDA3ZmYwOGNlMDI4YmFkLi45MTUzMGE3NmU5MDUyNmMyYTQw
MTRjYmFhNmY0YzNlYTBmOGRmYWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAgLTU2OCw3ICs1NjgsNyBAQCBJbnRTaXplIFdlYkZyYW1l
OjpzY3JvbGxPZmZzZXQoKSBjb25zdAogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIElu
dFNpemUoKTsKIAotICAgIHJldHVybiB2aWV3LT5zY3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4g
dG9JbnRTaXplKHZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOwogfQogCiBib29sIFdlYkZyYW1lOjpo
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBjZWU3MjJkZDRjNjFkNWE1YzFhOTE2NmEzZDUw
YmVkY2M5OTRiMDdmLi44ZDlhZjhhMDg1OThkNjc2MGJkMzFmZDY4OGVjM2JkMzRkMzc5MTJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0x
MzE2LDggKzEzMTYsOCBAQCB2b2lkIFdlYlBhZ2U6OnNjcm9sbE1haW5GcmFtZUlmTm90QXRNYXhT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZzZQogewogICAgIEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCk7CiAKLSAgICBJbnRQb2lu
dCBzY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICBJbnRQ
b2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24gPSBmcmFtZVZpZXctPm1heGltdW1TY3JvbGxQb3Np
dGlvbigpOworICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0gZnJhbWVWaWV3LT5z
Y3JvbGxQb3NpdGlvbigpOworICAgIFNjcm9sbFBvc2l0aW9uIG1heGltdW1TY3JvbGxQb3NpdGlv
biA9IGZyYW1lVmlldy0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7CiAKICAgICAvLyBJZiB0aGUg
Y3VycmVudCBzY3JvbGwgcG9zaXRpb24gaW4gYSBkaXJlY3Rpb24gaXMgdGhlIG1heCBzY3JvbGwg
cG9zaXRpb24gCiAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBzY3JvbGwgYXQgYWxsLgpAQCAtMzUw
NCw5ICszNTA0LDkgQEAgdm9pZCBXZWJQYWdlOjphZGRNSU1FVHlwZVdpdGhDdXN0b21Db250ZW50
UHJvdmlkZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHZvaWQgV2ViUGFnZTo6dXBkYXRlTWFp
bkZyYW1lU2Nyb2xsT2Zmc2V0UGlubmluZygpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdl
LT5tYWluRnJhbWUoKTsKLSAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IGZyYW1lLnZpZXco
KS0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24g
PSBmcmFtZS52aWV3KCktPm1heGltdW1TY3JvbGxQb3NpdGlvbigpOwotICAgIEludFBvaW50IG1p
bmltdW1TY3JvbGxQb3NpdGlvbiA9IGZyYW1lLnZpZXcoKS0+bWluaW11bVNjcm9sbFBvc2l0aW9u
KCk7CisgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24gPSBmcmFtZS52aWV3KCktPnNj
cm9sbFBvc2l0aW9uKCk7CisgICAgU2Nyb2xsUG9zaXRpb24gbWF4aW11bVNjcm9sbFBvc2l0aW9u
ID0gZnJhbWUudmlldygpLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICBTY3JvbGxQb3Np
dGlvbiBtaW5pbXVtU2Nyb2xsUG9zaXRpb24gPSBmcmFtZS52aWV3KCktPm1pbmltdW1TY3JvbGxQ
b3NpdGlvbigpOwogCiAgICAgYm9vbCBpc1Bpbm5lZFRvTGVmdFNpZGUgPSAoc2Nyb2xsUG9zaXRp
b24ueCgpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlvbi54KCkpOwogICAgIGJvb2wgaXNQaW5uZWRU
b1JpZ2h0U2lkZSA9IChzY3JvbGxQb3NpdGlvbi54KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9u
LngoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KaW5kZXggMzg3MmQwOTg4Mjg2YzZkMjZjYTQ0YWUxN2VjZGYzNDgwMzExZjJl
MS4uZmFlMjdhZDdhMzZlMDZkOGE4ZDRhNDc5MDE5MTQ5ZDE3Y2FhNWY2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAt
MjU4NSw3ICsyNTg1LDcgQEAgdm9pZCBXZWJQYWdlOjpkeW5hbWljVmlld3BvcnRTaXplVXBkYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgbWluaW11bUxheW91dFNpemUsIGNvbnMKICAgICBJbnRTaXplIG9s
ZENvbnRlbnRTaXplID0gZnJhbWVWaWV3LmNvbnRlbnRzU2l6ZSgpOwogICAgIGZsb2F0IG9sZFBh
Z2VTY2FsZUZhY3RvciA9IG1fcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7CiAKLSAgICBtX2R5bmFt
aWNTaXplVXBkYXRlSGlzdG9yeS5hZGQoc3RkOjptYWtlX3BhaXIob2xkQ29udGVudFNpemUsIG9s
ZFBhZ2VTY2FsZUZhY3RvciksIEludFBvaW50KGZyYW1lVmlldy5zY3JvbGxPZmZzZXQoKSkpOwor
ICAgIG1fZHluYW1pY1NpemVVcGRhdGVIaXN0b3J5LmFkZChzdGQ6Om1ha2VfcGFpcihvbGRDb250
ZW50U2l6ZSwgb2xkUGFnZVNjYWxlRmFjdG9yKSwgZnJhbWVWaWV3LnNjcm9sbFBvc2l0aW9uKCkp
OwogCiAgICAgUmVmUHRyPE5vZGU+IG9sZE5vZGVBdENlbnRlcjsKICAgICBkb3VibGUgdmlzaWJs
ZUhvcml6b250YWxGcmFjdGlvbiA9IDE7Cg==
</data>
<flag name="review"
          id="292955"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>