<?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>217709</bug_id>
          
          <creation_ts>2020-10-14 08:08:40 -0700</creation_ts>
          <short_desc>Make isUserScrollInProgress supporting more user scroll actions</short_desc>
          <delta_ts>2020-11-26 07:22:34 -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>Scrolling</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=218277</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="cathiechen">cathiechen</reporter>
          <assigned_to name="cathiechen">cathiechen</assigned_to>
          <cc>changseok</cc>
    
    <cc>clord</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1697715</commentid>
    <comment_count>0</comment_count>
    <who name="cathiechen">cathiechen</who>
    <bug_when>2020-10-14 08:08:40 -0700</bug_when>
    <thetext>Besides wheel actions, make isUserScrollInProgress support other scroll actions, like scrollbar, keyboard and dragging scroll actions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1697719</commentid>
    <comment_count>1</comment_count>
      <attachid>411325</attachid>
    <who name="cathiechen">cathiechen</who>
    <bug_when>2020-10-14 08:28:00 -0700</bug_when>
    <thetext>Created attachment 411325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698050</commentid>
    <comment_count>2</comment_count>
    <who name="cathiechen">cathiechen</who>
    <bug_when>2020-10-15 03:47:05 -0700</bug_when>
    <thetext>Hi Simon,

The user scroll animations are scatter. I wonder could we add an interface to get the status of user scroll.
`isUserScrollInProgress` has supported the wheel event, maybe we can extend it to other user actions too? Like, keyboard, scrollbar and dragging scroll.

As to test, there seems not an obvious case for it.

Please take a look at this, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698158</commentid>
    <comment_count>3</comment_count>
      <attachid>411325</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-10-15 10:10:18 -0700</bug_when>
    <thetext>Comment on attachment 411325
Patch

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

&gt; Source/WebCore/page/AutoscrollController.cpp:69
&gt; +    if (!renderbox)
&gt; +        return;
&gt; +    if (renderbox-&gt;isRenderView()) {
&gt; +        renderbox-&gt;view().frameView().scrollAnimator().setUserScrollInProgress(inProgress);
&gt; +        return;
&gt; +    }
&gt; +    if (renderbox-&gt;layer())
&gt; +        renderbox-&gt;layer()-&gt;scrollAnimator().setUserScrollInProgress(inProgress);
&gt; +}

Should this really call setUserScrollInProgress on both? We only ever scroll one thing at a time, so not sure if this is necessary. Also, what about all the overflow:scroll that might be between this renderBox and the view?

&gt; Source/WebCore/page/AutoscrollController.cpp:297
&gt; +    updateScrollActionState(m_autoscrollRenderer, true);

Unclear what &quot;true&quot; means here.

&gt; Source/WebCore/platform/ScrollAnimator.h:127
&gt; -    virtual bool isUserScrollInProgress() const { return false; }
&gt; +    void setUserScrollInProgress(bool);
&gt; +    virtual bool isUserScrollInProgress() const { return m_scrollActionsInProgress; }

Currently ScrollController has isUserScrollInProgress() (but ScrollAnimator has a virtual function, and ScrollAnimatorMac just overrides it to call its m_scrollController, which is confusing. But storing additional state in ScrollAnimator is now spreading state around in too many places. I think this needs a cleaner solution.

I&apos;ve never liked the ScrollAnimator/ScrollController split. Maybe it&apos;s time to decide on a good design for that.

&gt; Source/WebCore/platform/ScrollView.cpp:544
&gt; +    scrollAnimator().setUserScrollInProgress(true);

How do we know this is a user scroll here?

&gt; Source/WebCore/rendering/RenderLayer.cpp:4168
&gt; +    scrollAnimator().setUserScrollInProgress(true);

Do we know this is a user scroll here?

There&apos;s also ambiguity with ScrollableArea::currentScrollType(). What&apos;s the distinction between that and setUserScrollInProgress()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700182</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-21 08:09:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/70529241&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706836</commentid>
    <comment_count>5</comment_count>
      <attachid>411325</attachid>
    <who name="cathiechen">cathiechen</who>
    <bug_when>2020-11-12 06:36:41 -0800</bug_when>
    <thetext>Comment on attachment 411325
Patch

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

Hi Simon,
Sorry for the slow reply!
I made some twists of this patch. ScrollAnimator::isUserScrollInProgress() now can support scrollbar, drag select and keyboard scroll. For wheel scroll, it is not fully effective. I think we can support it after we finish the work in bug: 218277?

&gt;&gt; Source/WebCore/page/AutoscrollController.cpp:69
&gt;&gt; +}
&gt; 
&gt; Should this really call setUserScrollInProgress on both? We only ever scroll one thing at a time, so not sure if this is necessary. Also, what about all the overflow:scroll that might be between this renderBox and the view?

Ah, yes, I&apos;ll move the autoscroll check to RenderLayer::scrollRectToVisible().

&gt;&gt; Source/WebCore/page/AutoscrollController.cpp:297
&gt;&gt; +    updateScrollActionState(m_autoscrollRenderer, true);
&gt; 
&gt; Unclear what &quot;true&quot; means here.

Sorry, I&apos;ll add a clear name here.

&gt;&gt; Source/WebCore/platform/ScrollAnimator.h:127
&gt;&gt; +    virtual bool isUserScrollInProgress() const { return m_scrollActionsInProgress; }
&gt; 
&gt; Currently ScrollController has isUserScrollInProgress() (but ScrollAnimator has a virtual function, and ScrollAnimatorMac just overrides it to call its m_scrollController, which is confusing. But storing additional state in ScrollAnimator is now spreading state around in too many places. I think this needs a cleaner solution.
&gt; 
&gt; I&apos;ve never liked the ScrollAnimator/ScrollController split. Maybe it&apos;s time to decide on a good design for that.

Yeah, the state of ScrollAnimator only indicates user scroll actions&apos; statuses, but not the wheel scroll&apos;s.
I wanted to reuse the wheel scroll status in ScrollController. After moving the common interfaces from ScrollController to ScrollAnimator (in bug 218277), we can make it support wheel scroll too.

&gt;&gt; Source/WebCore/platform/ScrollView.cpp:544
&gt;&gt; +    scrollAnimator().setUserScrollInProgress(true);
&gt; 
&gt; How do we know this is a user scroll here?

I think it is a frameview keyboard scroll here. I&apos;ll add a scrolltype check here.

&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:4168
&gt;&gt; +    scrollAnimator().setUserScrollInProgress(true);
&gt; 
&gt; Do we know this is a user scroll here?
&gt; 
&gt; There&apos;s also ambiguity with ScrollableArea::currentScrollType(). What&apos;s the distinction between that and setUserScrollInProgress()?

Like ScrollView::scroll, I try to handle the overflow element keyboard command scroll here. Element::scrollByLines and Element::scrollByPages also can call here, but it seems they are deprecated.

Yeah, we treat each command as a user scroll action here, so the status of isUserScrollInProgress for keyboard scrolls seems the same as ScrollType. As for other user scroll, it&apos;s different, isUserScrollInProgress() indicates whether the user scroll action or user scroll animation is in progress. For the programmatic smooth scroll, it can start the animator at first, then stops if it is interrupted by a scroll with ScrollType::User. But for programmatic instant scroll, it can not know if the user scroll is in progress, this will be needed by &quot;scrollend&quot; event, for only one scrollend event should be fired when scrolls combined. With isUserScrollInProgress, it can stop smooth scroll animation at the very beginning and provide a way for programmatic instant scroll to figure out if it should fire a &quot;scrollend&quot; event or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710171</commentid>
    <comment_count>6</comment_count>
      <attachid>414903</attachid>
    <who name="cathiechen">cathiechen</who>
    <bug_when>2020-11-26 07:22:34 -0800</bug_when>
    <thetext>Created attachment 414903
WIP-patch

Needs to support isUserscrollInProgress for wheel event scrolling after refactoring done in 218277</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411325</attachid>
            <date>2020-10-14 08:28:00 -0700</date>
            <delta_ts>2020-11-26 07:22:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217709-20201014232758.patch</filename>
            <type>text/plain</type>
            <size>9638</size>
            <attacher name="cathiechen">cathiechen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NDU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQzZGZkYmMxODg5Mjlk
NGI1OTliNjY5MzRkYzdkZDQ0YTk4MzFhMS4uMTE2MGIyZWE3NTMxNzY4MTMyNzhmZGNmMmM5YWFk
Nzk1MDYyNGNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIwLTEwLTE0ICBDYXRo
aWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIGlzVXNlclNj
cm9sbEluUHJvZ3Jlc3Mgc3VwcG9ydCBtb3JlIHVzZXIgc2Nyb2xsIGFjdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzcwOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBpc1VzZXJT
Y3JvbGxJblByb2dyZXNzIGlzIG9ubHkgc3VwcG9ydCB3aGVlbCBzY3JvbGwgYWN0aW9uLiBUaGlz
IHBhdGNoIHRyeXMgdG8gbWFrZSBpdAorICAgICAgICBzdXBwb3J0IHNjcm9sbGJhciwga2V5Ym9h
cmQgYW5kIGRyYWdnaW5nIHNjcm9sbCBhY3Rpb25zLgorCisgICAgICAgICogcGFnZS9BdXRvc2Ny
b2xsQ29udHJvbGxlci5jcHA6IFVwZGF0ZSBpc1VzZXJTY3JvbGxJblByb2dyZXNzIGZvciBkcmFn
Z2luZyBzY3JvbGwuCisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVTY3JvbGxBY3Rpb25TdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdXRvc2Nyb2xsQ29udHJvbGxlcjo6c3RvcEF1dG9zY3JvbGxU
aW1lcik6CisgICAgICAgIChXZWJDb3JlOjpBdXRvc2Nyb2xsQ29udHJvbGxlcjo6c3RhcnRBdXRv
c2Nyb2xsVGltZXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzZXRVc2VyU2Nyb2xsSW5Qcm9ncmVzcyk6
IENhbmNlbCBwcm9ncmFtbWF0aWMgc2Nyb2xsIGFuaW1hdGlvbiBpZiB1c2VyIHNjcm9sbCBzdGFy
dHMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVz
cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGwpOiBVcGRhdGUgc3RhdHVzIGZvciBGcmFtZVZpZXcg
a2V5Ym9hcmQgc2Nyb2xsLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6IFVwZGF0
ZSBzdGF0dXMgZm9yIHNjcm9sbGJhciBzY3JvbGwuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXI6Om1vdXNlVXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZURvd24pOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNvbnN0KTog
SWYgd2hlZWwgc2Nyb2xsIGlzIG5vdCBpbiBwcm9ncmVzcywgdHJ5IHRvIGNoZWNrIG90aGVycy4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnNjcm9sbCk6IFVwZGF0ZSBzdGF0dXMgZm9yIFJlbmRlckxheWVyIGtleWJv
YXJkIHNjcm9sbC4KKwogMjAyMC0xMC0xNCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtMRkNdIFVzZSB0aGUgdGVybSBvdmVycmlkZGVuIGluc3RlYWQgb2Ygb3Zl
cnJpZGUgdG8gaW5kaWNhdGUgcHJpb3JpdHkgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
QXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwCmluZGV4IGZhMmE3N2E4MDg5NDc0ZDgyNWYyMzEyNTIx
YTY4OGUwOGVhYTM0MTYuLmRiY2Y1NzM3YTIxMWQzYjAwYTc1OTYyNjQwZGY1NDNiM2FkN2ZmMWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQXV0b3Njcm9sbENvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwCkBAIC0z
NCw3ICszNCw5IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1
ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogCkBAIC01NCw2ICs1Niwx
OCBAQCBzdGF0aWMgRnJhbWUqIGdldE1haW5GcmFtZShGcmFtZSogZnJhbWUpCiB9CiAjZW5kaWYK
IAorc3RhdGljIHZvaWQgdXBkYXRlU2Nyb2xsQWN0aW9uU3RhdGUoUmVuZGVyQm94KiByZW5kZXJi
b3gsIGJvb2wgaW5Qcm9ncmVzcykKK3sKKyAgICBpZiAoIXJlbmRlcmJveCkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChyZW5kZXJib3gtPmlzUmVuZGVyVmlldygpKSB7CisgICAgICAgIHJlbmRl
cmJveC0+dmlldygpLmZyYW1lVmlldygpLnNjcm9sbEFuaW1hdG9yKCkuc2V0VXNlclNjcm9sbElu
UHJvZ3Jlc3MoaW5Qcm9ncmVzcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHJl
bmRlcmJveC0+bGF5ZXIoKSkKKyAgICAgICAgcmVuZGVyYm94LT5sYXllcigpLT5zY3JvbGxBbmlt
YXRvcigpLnNldFVzZXJTY3JvbGxJblByb2dyZXNzKGluUHJvZ3Jlc3MpOworfQorCiBBdXRvc2Ny
b2xsQ29udHJvbGxlcjo6QXV0b3Njcm9sbENvbnRyb2xsZXIoKQogICAgIDogbV9hdXRvc2Nyb2xs
VGltZXIoKnRoaXMsICZBdXRvc2Nyb2xsQ29udHJvbGxlcjo6YXV0b3Njcm9sbFRpbWVyRmlyZWQp
CiAgICAgLCBtX2F1dG9zY3JvbGxSZW5kZXJlcihudWxscHRyKQpAQCAtOTMsNiArMTA3LDggQEAg
dm9pZCBBdXRvc2Nyb2xsQ29udHJvbGxlcjo6c3RvcEF1dG9zY3JvbGxUaW1lcihib29sIHJlbmRl
cmVySXNCZWluZ0Rlc3Ryb3llZCkKICAgICBpZiAoIXNjcm9sbGFibGUpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIHVwZGF0ZVNjcm9sbEFjdGlvblN0YXRlKG1fYXV0b3Njcm9sbFJlbmRlcmVyLCBm
YWxzZSk7CisKICAgICBGcmFtZSYgZnJhbWUgPSBzY3JvbGxhYmxlLT5mcmFtZSgpOwogICAgIGlm
IChhdXRvc2Nyb2xsSW5Qcm9ncmVzcygpICYmIGZyYW1lLmV2ZW50SGFuZGxlcigpLm1vdXNlRG93
bldhc0luU3ViZnJhbWUoKSkgewogICAgICAgICBpZiAoYXV0byBzdWJmcmFtZSA9IGZyYW1lLmV2
ZW50SGFuZGxlcigpLnN1YmZyYW1lRm9yVGFyZ2V0Tm9kZShmcmFtZS5ldmVudEhhbmRsZXIoKS5t
b3VzZVByZXNzTm9kZSgpKSkKQEAgLTI3OCw2ICsyOTQsNyBAQCB2b2lkIEF1dG9zY3JvbGxDb250
cm9sbGVyOjphdXRvc2Nyb2xsVGltZXJGaXJlZCgpCiAKIHZvaWQgQXV0b3Njcm9sbENvbnRyb2xs
ZXI6OnN0YXJ0QXV0b3Njcm9sbFRpbWVyKCkKIHsKKyAgICB1cGRhdGVTY3JvbGxBY3Rpb25TdGF0
ZShtX2F1dG9zY3JvbGxSZW5kZXJlciwgdHJ1ZSk7CiAgICAgbV9hdXRvc2Nyb2xsVGltZXIuc3Rh
cnRSZXBlYXRpbmcoYXV0b3Njcm9sbEludGVydmFsKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCmluZGV4IGY1OTYyZmYxMDViNjM2YWRmMTQ4MWFlNDc1
ZmZhNjE3NDk5NzQ4NjAuLjc5MTliN2I4M2E3YzYzMzk2NDcwOWQ5NGU0MWM0MzRmZWRhYTBlNjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKQEAgLTMxMyw0
ICszMTMsMTEgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJh
cihTY3JvbGxiYXIqKQogICAgIG1fYW5pbWF0aW9uUHJvZ3JhbW1hdGljU2Nyb2xsLT51cGRhdGVW
aXNpYmxlTGVuZ3RocygpOwogfQogCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRVc2VyU2Nyb2xs
SW5Qcm9ncmVzcyhib29sIGluUHJvZ3Jlc3MpCit7CisgICAgbV9zY3JvbGxBY3Rpb25zSW5Qcm9n
cmVzcyA9IGluUHJvZ3Jlc3M7CisgICAgaWYgKG1fc2Nyb2xsQWN0aW9uc0luUHJvZ3Jlc3MpCisg
ICAgICAgIGNhbmNlbEFuaW1hdGlvbnMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKaW5kZXggZWYzOThmMDcxMWI5
MTg0NTJlOWI5YWJhMmQ0MTA3ZDM1OTAyMzZiMi4uMjk4OTk1MDlkMDFiNzlmMzY3Yjg0YTA4YTU3
NTAxOTQ5ZjJlMmJmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5o
CkBAIC0xMjMsNyArMTIzLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUNv
bnRlbnRBcmVhU2Nyb2xsZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgeyBVTlVTRURfUEFSQU0o
ZGVsdGEpOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhi
b29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIG1fc2Nyb2xsQWN0aW9uc0luUHJvZ3Jlc3M7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNS
dWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
CkBAIC0xNjYsNiArMTY3LDggQEAgcHJvdGVjdGVkOgogICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50
UG9zaXRpb247CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2FuaW1h
dGlvblByb2dyYW1tYXRpY1Njcm9sbDsKKworICAgIGJvb2wgbV9zY3JvbGxBY3Rpb25zSW5Qcm9n
cmVzcyB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCmluZGV4IGRhY2FhZDUwMGZkNzI3MTczYmQ5NDA0M2Vl
MzI0Mzk0Yzc5Y2YxNzAuLmM1ODQzY2ZhZWFmZWZlNTJjN2MxYzg0NjU4NTA3MzM4N2I0M2VmYzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCkBAIC01NDEsMTAgKzU0MSwx
MCBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0
aW9uJiBzY3JvbGxQb3NpdGlvbiwgU2Nyb2xsQwogCiBib29sIFNjcm9sbFZpZXc6OnNjcm9sbChT
Y3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkK
IHsKLSAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtU2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotCi0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgc2Nyb2xsQW5pbWF0b3IoKS5z
ZXRVc2VyU2Nyb2xsSW5Qcm9ncmVzcyh0cnVlKTsKKyAgICBib29sIHJlc3VsdCA9IHBsYXRmb3Jt
V2lkZ2V0KCkgPyBwbGF0Zm9ybVNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSA6IFNjcm9s
bGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgc2Nyb2xsQW5p
bWF0b3IoKS5zZXRVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhmYWxzZSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogYm9vbCBTY3JvbGxWaWV3Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCmluZGV4IGE2YjU4MDczODk5NDYyNmM5NzVhNmM3Mjkw
YjAzNDFmMWZiZWM1OTQuLjEyM2E0NTg4NTNlZmM4YWVmMGFlMDg5NzQzY2I4MWYzZDM5YWM2NWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcApAQCAtMzU2LDYgKzM1Niw3IEBA
IGJvb2wgU2Nyb2xsYmFyOjptb3VzZUV4aXRlZCgpCiAKIGJvb2wgU2Nyb2xsYmFyOjptb3VzZVVw
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKIHsKKyAgICBtX3Njcm9sbGFi
bGVBcmVhLnNjcm9sbEFuaW1hdG9yKCkuc2V0VXNlclNjcm9sbEluUHJvZ3Jlc3MoZmFsc2UpOwog
ICAgIHNldFByZXNzZWRQYXJ0KE5vUGFydCk7CiAgICAgbV9wcmVzc2VkUG9zID0gMDsKICAgICBt
X2RyYWdnaW5nRG9jdW1lbnQgPSBmYWxzZTsKQEAgLTM4NCw2ICszODUsNyBAQCBib29sIFNjcm9s
bGJhcjo6bW91c2VEb3duKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogCiAgICAgaW50
IHByZXNzZWRQb3NpdGlvbiA9IChvcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIg
PyBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvc2l0aW9uKCkpLngoKSA6IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueSgpKTsKICAgICBpZiAoYWN0
aW9uID09IFNjcm9sbGJhckJ1dHRvblByZXNzQWN0aW9uOjpDZW50ZXJPblRodW1iKSB7CisgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3IoKS5zZXRVc2VyU2Nyb2xsSW5Qcm9n
cmVzcyh0cnVlKTsKICAgICAgICAgc2V0SG92ZXJlZFBhcnQoVGh1bWJQYXJ0KTsKICAgICAgICAg
c2V0UHJlc3NlZFBhcnQoVGh1bWJQYXJ0KTsKICAgICAgICAgbV9kcmFnT3JpZ2luID0gbV9jdXJy
ZW50UG9zOwpAQCAtMzk5LDggKzQwMSwxMCBAQCBib29sIFNjcm9sbGJhcjo6bW91c2VEb3duKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogICAgIGlmIChhY3Rpb24gPT0gU2Nyb2xsYmFy
QnV0dG9uUHJlc3NBY3Rpb246OlN0YXJ0RHJhZykKICAgICAgICAgbV9kcmFnT3JpZ2luID0gbV9j
dXJyZW50UG9zOwogCi0gICAgaWYgKGFjdGlvbiA9PSBTY3JvbGxiYXJCdXR0b25QcmVzc0FjdGlv
bjo6U2Nyb2xsKQorICAgIGlmIChhY3Rpb24gPT0gU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb246
OlNjcm9sbCkgeworICAgICAgICBtX3Njcm9sbGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yKCkuc2V0
VXNlclNjcm9sbEluUHJvZ3Jlc3ModHJ1ZSk7CiAgICAgICAgIGF1dG9zY3JvbGxQcmVzc2VkUGFy
dCh0aGVtZSgpLmluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpKTsKKyAgICB9CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbQppbmRleCAwOWQ4MDU4YjViMjU2YmM1YjRjOWJhOWQ0YWIzYTFlNTVjNzRm
ZDFhLi4yMzUxOTBiOGU3NDJhNDU4NWNmMGFiYTc4MzkzZDc5MGEyMmVjMmIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCkBAIC04NTcs
NyArODU3LDkgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbiwKIAogYm9vbCBTY3JvbGxBbmltYXRv
ck1hYzo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc2Ny
b2xsQ29udHJvbGxlci5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7CisgICAgaWYgKG1fc2Nyb2xs
Q29udHJvbGxlci5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOwog
fQogCiBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDgwNTUyY2Iw
ZTg0MmM5MWMzNWI2N2I2YmI1NzZiNjc0ZjQ4ZGQ4ZjEuLjQ4YmZmZTM1ZmUxOTJiZGRiZTRlODlk
ODQwZTZiNmU3OTU5NDBiMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcApAQCAtNDE2NSw3ICs0MTY1LDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVy
Zmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmCiAKIGJv
b2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKIHsKLSAgICByZXR1cm4g
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KTsKKyAgICBzY3JvbGxBbmltYXRvcigpLnNldFVzZXJTY3JvbGxJblByb2dyZXNzKHRydWUpOwor
ICAgIGJvb2wgcmVzdWx0ID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICBzY3JvbGxBbmltYXRvcigpLnNldFVzZXJTY3JvbGxJ
blByb2dyZXNzKGZhbHNlKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFJlbmRlckxh
eWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QsIGNvbnN0IExheW91dFNpemUmIHN1YnBpeGVsT2Zmc2V0LCBPcHRpb25TZXQ8UGFp
bnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290
LCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+IHBhaW50RmxhZ3MsIFNlY3VyaXR5T3JpZ2luUGFp
bnRQb2xpY3kgcGFpbnRQb2xpY3ksIEV2ZW50UmVnaW9uQ29udGV4dCogZXZlbnRSZWdpb25Db250
ZXh0KQo=
</data>
<flag name="review"
          id="427615"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414903</attachid>
            <date>2020-11-26 07:22:34 -0800</date>
            <delta_ts>2020-11-26 07:22:34 -0800</delta_ts>
            <desc>WIP-patch</desc>
            <filename>isUserscrollInProgress.diff</filename>
            <type>text/plain</type>
            <size>25427</size>
            <attacher name="cathiechen">cathiechen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzc29tLXZpZXcvdXNlci1zY3JvbGwtaW50ZXJydXB0cy1zbW9vdGgtc2Nyb2xsLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzc29tLXZpZXcvdXNlci1zY3JvbGwtaW50ZXJydXB0cy1zbW9vdGgtc2Nyb2xsLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45MTgxOGU3OGExCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3Nzb20tdmlldy91c2VyLXNjcm9sbC1pbnRlcnJ1cHRzLXNtb290aC1zY3JvbGwt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIFBhZ2UgbG9hZGVkCitQQVNTIEFi
b3J0aW5nIGFuIG9uZ29pbmcgc21vb3RoIHNjcm9sbGluZyBvbiBhbiBlbGVtZW50IHdoZW4gdGhl
cmUncyBrZXlib2FyZCBzY3JvbGwKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nzb20tdmlldy91c2VyLXNjcm9sbC1pbnRlcnJ1
cHRzLXNtb290aC1zY3JvbGwuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzc29tLXZpZXcvdXNlci1zY3JvbGwtaW50ZXJydXB0cy1zbW9vdGgt
c2Nyb2xsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYzgxOWRl
ZDRlZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzc29tLXZpZXcvdXNlci1zY3JvbGwtaW50ZXJydXB0cy1zbW9vdGgt
c2Nyb2xsLmh0bWwKQEAgLTAsMCArMSw3NSBAQAorPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxl
ZD10cnVlIF0gLS0+Cis8dGl0bGU+VGVzdGluZyBzY3JvbGwtYmVoYXZpb3I6IHNtb290aCBhbmQg
dXNlciBzY3JvbGxzIG9uIHRoZSByb290IG9mIHRoZSBtYWluIGZyYW1lPC90aXRsZT4KKzxtZXRh
IG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciIC8+Cis8bGluayByZWw9ImhlbHAiIGhyZWY9
Imh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS12aWV3LyNjb25jZXB0LXNtb290aC1zY3Jv
bGwiPgorPHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGRyaXZlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0ZHJpdmVyLWFjdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii9yZXNvdXJjZXMvdGVzdGRyaXZlci12ZW5kb3IuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InN1cHBvcnQvc2Nyb2xsLWJlaGF2aW9yLmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KKyAg
ICBib2R5IHsKKyAgICAgICAgbWFyZ2luOiAwOworICAgIH0KKworICAgIC5hdXRvQmVoYXZpb3Ig
eworICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IGF1dG87CisgICAgfQorCisgICAgLnNtb290aEJl
aGF2aW9yIHsKKyAgICAgICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7CisgICAgfQorPC9zdHls
ZT4KKzxkaXYgaWQ9ImxvZyI+Cis8L2Rpdj4KKzxkaXYgaWQ9InBhZ2VDb250ZW50IiBzdHlsZT0i
cG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IDA7Ij4KKyAgICA8ZGl2IGlkPSJlbGVt
ZW50VG9SZXZlYWwiCisgICAgICAgIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IGRpc3BsYXk6
IGlubGluZS1ibG9jazsgd2lkdGg6IDEwcHg7IGhlaWdodDogMTVweDsgYmFja2dyb3VuZDogYmxh
Y2s7Ij48L2Rpdj4KKzwvZGl2PgorPHNjcmlwdD4KK3ZhciBwYWdlTG9hZGVkID0gYXN5bmNfdGVz
dCgiUGFnZSBsb2FkZWQiKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgcGFnZUxv
YWRlZC5zdGVwX2Z1bmNfZG9uZShmdW5jdGlvbiAoKSB7CisgICAgdmFyIHNjcm9sbGluZ0VsZW1l
bnQsIHN0eWxlZEVsZW1lbnQsIGVsZW1lbnRUb1JldmVhbFRvcDsKKyAgICBzY3JvbGxpbmdFbGVt
ZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDsKKyAgICBzdHlsZWRFbGVtZW50ID0gZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50OworICAgIHBhZ2VDb250ZW50LnN0eWxlLndpZHRoID0gKDEw
ICsgd2luZG93LmlubmVyV2lkdGgpICogNSArICJweCI7CisgICAgcGFnZUNvbnRlbnQuc3R5bGUu
aGVpZ2h0ID0gKDIwICsgd2luZG93LmlubmVySGVpZ2h0KSAqIDYgKyAicHgiOworICAgIGVsZW1l
bnRUb1JldmVhbFRvcCA9ICgyMCArIHdpbmRvdy5pbm5lckhlaWdodCkgKiA0OworICAgIGVsZW1l
bnRUb1JldmVhbC5zdHlsZS50b3AgPSBlbGVtZW50VG9SZXZlYWxUb3AgKyAicHgiOworCisgICAg
cHJvbWlzZV90ZXN0KCgpID0+IHsKKyAgICAgICAgcmVzZXRTY3JvbGwoc2Nyb2xsaW5nRWxlbWVu
dCk7CisgICAgICAgIHNldFNjcm9sbEJlaGF2aW9yKHN0eWxlZEVsZW1lbnQsICJzbW9vdGhCZWhh
dmlvciIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVm
dCwgMCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMoc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3As
IDApOworCisgICAgICAgIHNjcm9sbE5vZGUoc2Nyb2xsaW5nRWxlbWVudCwgInNjcm9sbCIsICJz
bW9vdGgiLCAwLCBlbGVtZW50VG9SZXZlYWxUb3ApOworICAgICAgICBhc3NlcnRfbGVzc190aGFu
KHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wLCBlbGVtZW50VG9SZXZlYWxUb3AsICJTbW9vdGgg
c2Nyb2xsIHNob3VsZG4ndCByZWFjaCB0aGUgZGVzdGluYXRpb24gaW1tZWRpYXRlbHkuIik7Cisg
ICAgICAgIC8vIFNlbmQgUklHSFQga2V5IHRvIHNjcm9sbGluZ0VsZW1lbnQuIEl0IHNob3VsZCBz
dG9wIHRoZSBzbW9vdGggc2Nyb2xsaW5nIGFuZCB0cmlnZ2VyIGFub3RoZXIgc2Nyb2xsaW5nLgor
ICAgICAgICB3aW5kb3cudGVzdF9kcml2ZXIuc2VuZF9rZXlzKHNjcm9sbGluZ0VsZW1lbnQsICdc
dWUwMTQnKTsKKworICAgICAgICByZXR1cm4gd2FpdEZvclNjcm9sbEVuZChzY3JvbGxpbmdFbGVt
ZW50KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgIGFzc2VydF9sZXNzX3RoYW4oc2Nyb2xsaW5n
RWxlbWVudC5zY3JvbGxUb3AsIGVsZW1lbnRUb1JldmVhbFRvcCwgIlRoZSB2ZXJ0aWNhbCBzbW9v
dGggc2Nyb2xsIHNob3VsZCBiZSBpbnRlcnJ1cHRlZC4iKTsKKyAgICAgICAgICAgIGFzc2VydF9n
cmVhdGVyX3RoYW4oc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0LCAwLCAiUklHSFQga2V5IHNo
b3VsZCB0cmlnZ2VyIGEgaG9yaXpvbnRhbCBzY3JvbGwuIik7CisgICAgICAgIH0pOworICAgIH0s
ICJBYm9ydGluZyBhIHNtb290aCBzY3JvbGwgd2l0aCBhIGtleWJvYXJkIGV2ZW50IHRoYXQgY2F1
c2VzIGFub3RoZXIgc2Nyb2xsIik7CisKKyAgICBwcm9taXNlX3Rlc3QoKCkgPT4geworICAgICAg
ICByZXNldFNjcm9sbChzY3JvbGxpbmdFbGVtZW50KTsKKyAgICAgICAgc2V0U2Nyb2xsQmVoYXZp
b3Ioc3R5bGVkRWxlbWVudCwgInNtb290aEJlaGF2aW9yIik7CisgICAgICAgIGFzc2VydF9lcXVh
bHMoc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0LCAwKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFs
cyhzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCwgMCk7CisKKyAgICAgICAgc2Nyb2xsTm9kZShz
Y3JvbGxpbmdFbGVtZW50LCAic2Nyb2xsIiwgInNtb290aCIsIDAsIGVsZW1lbnRUb1JldmVhbFRv
cCk7CisgICAgICAgIGFzc2VydF9sZXNzX3RoYW4oc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3As
IGVsZW1lbnRUb1JldmVhbFRvcCwgIlNtb290aCBzY3JvbGwgc2hvdWxkbid0IHJlYWNoIHRoZSBk
ZXN0aW5hdGlvbiBpbW1lZGlhdGVseS4iKTsKKyAgICAgICAgLy8gU2VuZCBMRUZUIGtleSB0byBz
Y3JvbGxpbmdFbGVtZW50LiBJdCBzaG91bGQgc3RvcCB0aGUgc21vb3RoIHNjcm9sbGluZyBhbmQg
bm90IHRyaWdnZXIgb3RoZXIgc2Nyb2xsaW5nLgorICAgICAgICB3aW5kb3cudGVzdF9kcml2ZXIu
c2VuZF9rZXlzKHNjcm9sbGluZ0VsZW1lbnQsICdcdWUwMTInKTsKKworICAgICAgICByZXR1cm4g
d2FpdEZvclNjcm9sbEVuZChzY3JvbGxpbmdFbGVtZW50KS50aGVuKCgpID0+IHsKKyAgICAgICAg
ICAgIGFzc2VydF9sZXNzX3RoYW4oc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AsIGVsZW1lbnRU
b1JldmVhbFRvcCwgIlRoZSB2ZXJ0aWNhbCBzbW9vdGggc2Nyb2xsIHNob3VsZCBiZSBpbnRlcnJ1
cHRlZC4iKTsKKyAgICAgICAgICAgIGFzc2VydF9lcXVhbHMoc2Nyb2xsaW5nRWxlbWVudC5zY3Jv
bGxMZWZ0LCAwLCAiTEVGVCBrZXkgZG9lc24ndCB0cmlnZ2VyIGhvcml6b250YWwgc2Nyb2xsIGJl
Y2F1c2UgdGhlIHNjcm9sbCBwb3NpdGlvbiBpcyBhbHJlYWR5IGF0IHRoZSBzY3JvbGwgbGltaXQu
Iik7CisgICAgICAgIH0pOworICAgIH0sICJBYm9ydGluZyBhIHNtb290aCBzY3JvbGwgd2l0aCBh
IGtleWJvYXJkIGV2ZW50IHRoYXQgZG9lcyBub3QgY2F1c2VzIGFub3RoZXIgc2Nyb2xsIik7Cit9
KSk7Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmZjQwNmY3ZjFkLi5iY2JlZWFlNmJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMjAtMTEtMjYgIENhdGhpZSBDaGVuICA8Y2F0aGll
Y2hlbkBpZ2FsaWEuY29tPgorCisgICAgICAgIE1ha2UgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyBz
dXBwb3J0aW5nIG1vcmUgdXNlciBzY3JvbGwgYWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3NzA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCBTY3JvbGxBbmltYXRvcjo6aXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcyBvbmx5IHN1cHBvcnRzIHdoZWVsIGV2ZW50IHNjcm9sbGluZywg
YW5kIGRlcGVuZGluZyBvbiAKKyAgICAgICAgQXV0b3Njcm9sbENvbnRyb2xsZXIsIGl0J3MgZWZm
ZWN0aXZlIG9ubHkgd2hlbiBDU1NfU0NST0xMX1NOQVAgb3IgUlVCQkVSX0JBTkRJTkcgaXMgZW5h
YmxlZC4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlIFNjcm9sbEFuaW1hdG9yOjppc1VzZXJTY3Jv
bGxJblByb2dyZXNzIHN1cHBvcnRpbmcgc2Nyb2xsYmFyLCBkcmFnZ2luZyBzZWxlY3QgYW5kIGtl
eWJvYXJkIHNjcm9sbGluZy4KKyAgICAgICAgRm9yIHNjcm9sbGJhciBzY3JvbGxpbmcsIGlmIGNs
aWNraW5nIG9yIHByZXNzaW5nIHNjcm9sbGJhciB0cmlnZ2VyIHNjcm9sbGxpbmcsIGl0IHN0YXJ0
cyBmcm9tIG1vdXNlRG93bgorICAgICAgICBhbmQgZW5kcyBpbiBtb3VzZVVwLiBJZiBtb3Zpbmcg
dGhlIHRodW1iIHBhcnQsIGl0IHN0YXJ0cyBmcm9tIG1vdXNlTW92ZWQgYW5kIGVuZHMgaW4gbW91
c2VVcC4KKyAgICAgICAgRm9yIGRyYWcgc2VsZWN0IHNjcm9sbGluZywgaXQgdXNlcyBSZW5kZXJM
YXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZSB0byBzY3JvbGwgZGlmZmVyZW50IGxheWVycy4KKyAg
ICAgICAgRm9yIGVhY2ggbGF5ZXIsIGl0IHN0YXJ0cyBmcm9tIHNjcm9sbFJlY3RUb1Zpc2libGUg
YW5kIHdoZW4gYXV0b3Njcm9sbCB0aW1lciBzdG9wcywgaXQgdHJhdmVyc2VzIGFsbCB0aGUgbGF5
ZXJzIGFuZCByZXNldCB0aGUgc3RhdGUuCisgICAgICAgIEZvciBrZXlib2FyZCBzY3JvbGxpbmcs
IGZvciBlYWNoIGNvbW1hbmQgaXQgcGVyZm9ybXMgYW4gaW5zdGFudCBzY3JvbGwsIHRoZSBzdGF0
ZSB3aWxsIGJlIHJlc2V0IGZvciBlYWNoIGNvbW1hbmQuCisKKyAgICAgICAgVGVzdDogaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nzb20tdmlldy91c2VyLXNjcm9sbC1pbnRl
cnJ1cHRzLXNtb290aC1zY3JvbGwuaHRtbAorCisgICAgICAgICogcGFnZS9BdXRvc2Nyb2xsQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRvc2Nyb2xsQ29udHJvbGxlcjo6d2ls
bFN0b3BBdXRvc2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9zY3JvbGxDb250cm9sbGVy
OjpzdG9wQXV0b3Njcm9sbFRpbWVyKToKKyAgICAgICAgKiBwYWdlL0F1dG9zY3JvbGxDb250cm9s
bGVyLmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnVwZGF0ZVVz
ZXJTY3JvbGxTdGF0dXMpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6U2Nyb2xsQW5pbWF0b3I6OmlzVXNlclNj
cm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFR5cGVzLmg6
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjpzY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjp1cGRhdGVVc2VyU2Nyb2xsU3Rh
dHVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNl
TW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZVVwKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhcjo6bW91c2VEb3duKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1h
Yzo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OndpbGxTdG9wQXV0b3Nj
cm9sbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0
U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJl
Y3RUb1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OndpbGxTdG9wQXV0
b3Njcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKwogMjAyMC0xMS0yNSAgQ2F0aGllIENoZW4g
IDxjYXRoaWVjaGVuQGlnYWxpYS5jb20+CiAKICAgICAgICAgVGhlIHNjcm9sbC1iZWhhdmlvcjpz
bW9vdGggZWxlbWVudCBjYW4ndCBzY3JvbGwgd2hlbiBkcmFnIHNlbGVjdCBhY3Rpb24gY3Jvc3Nl
cyBmcmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQXV0b3Njcm9sbENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9BdXRvc2Nyb2xsQ29udHJvbGxlci5jcHAK
aW5kZXggZmEyYTc3YTgwOC4uOGViNWVlMjM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9BdXRvc2Nyb2xsQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9B
dXRvc2Nyb2xsQ29udHJvbGxlci5jcHAKQEAgLTg0LDggKzg0LDIzIEBAIHZvaWQgQXV0b3Njcm9s
bENvbnRyb2xsZXI6OnN0YXJ0QXV0b3Njcm9sbEZvclNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogICAgIHN0YXJ0QXV0b3Njcm9sbFRpbWVyKCk7CiB9CiAKK3ZvaWQgQXV0b3Njcm9s
bENvbnRyb2xsZXI6OndpbGxTdG9wQXV0b3Njcm9sbCgpIHsKKyAgICBpZiAoIW1fYXV0b3Njcm9s
bFJlbmRlcmVyIHx8ICFtX2F1dG9zY3JvbGxUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBzd2l0Y2ggKG1fYXV0b3Njcm9sbFR5cGUpIHsKKyAgICBjYXNlIEF1dG9zY3Jv
bGxGb3JEcmFnQW5kRHJvcDoKKyAgICBjYXNlIEF1dG9zY3JvbGxGb3JTZWxlY3Rpb246CisgICAg
ICAgIG1fYXV0b3Njcm9sbFJlbmRlcmVyLT53aWxsU3RvcEF1dG9zY3JvbGwoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB2b2lkIEF1
dG9zY3JvbGxDb250cm9sbGVyOjpzdG9wQXV0b3Njcm9sbFRpbWVyKGJvb2wgcmVuZGVyZXJJc0Jl
aW5nRGVzdHJveWVkKQogeworICAgIHdpbGxTdG9wQXV0b3Njcm9sbCgpOwogICAgIFJlbmRlckJv
eCogc2Nyb2xsYWJsZSA9IG1fYXV0b3Njcm9sbFJlbmRlcmVyOwogICAgIG1fYXV0b3Njcm9sbFRp
bWVyLnN0b3AoKTsKICAgICBtX2F1dG9zY3JvbGxSZW5kZXJlciA9IG51bGxwdHI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0F1dG9zY3JvbGxDb250cm9sbGVyLmgKaW5kZXggNzEzNjBiYTQ0ZC4uNWRi
MzEwZGYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9BdXRvc2Nyb2xsQ29udHJv
bGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQXV0b3Njcm9sbENvbnRyb2xsZXIuaApA
QCAtNTksNiArNTksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwYW5TY3JvbGxJblByb2dyZXNzKCkg
Y29uc3Q7CiAgICAgdm9pZCBzdGFydEF1dG9zY3JvbGxGb3JTZWxlY3Rpb24oUmVuZGVyT2JqZWN0
Kik7CiAgICAgdm9pZCBzdG9wQXV0b3Njcm9sbFRpbWVyKGJvb2wgcmVuZGVyZXJJc0JlaW5nRGVz
dHJveWVkID0gZmFsc2UpOworICAgIHZvaWQgd2lsbFN0b3BBdXRvc2Nyb2xsKCk7CiAgICAgdm9p
ZCB1cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKICAgICB2b2lkIHVwZGF0ZURyYWdBbmREcm9w
KE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IEludFBvaW50JiBldmVudFBvc2l0aW9uLCBXYWxsVGlt
ZSBldmVudFRpbWUpOwogI2lmIEVOQUJMRShQQU5fU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCmluZGV4IDMwNThkOTFkZTYuLjBmODY1ODQ5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKQEAgLTIzMjYsNyArMjMyNiw3IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRTY3Jv
bGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgc2Nyb2xsUG9zaXRpb24sIFNjcm9sbENs
CiAgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpOwogICAgIGlmIChwYWdlICYmIHBhZ2Ut
PmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCiAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0
V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2UtPndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKLSAg
ICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKKyAgICBpZiAoYW5pbWF0ZWQg
PT0gQW5pbWF0ZWRTY3JvbGw6OlllcyAmJiAhaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpKQogICAg
ICAgICBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uKSwgY3VycmVudFNjcm9sbFR5cGUoKSwgY2xhbXBpbmcpOwogICAgIGVs
c2UKICAgICAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24s
IGNsYW1waW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcApp
bmRleCBkYWUyN2RmM2QyLi43MzQyYTk2MzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuY3BwCkBAIC0zMjQsNCArMzI0LDEzIEBAIHZvaWQgU2Nyb2xsQW5pbWF0
b3I6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikKICAgICBtX2FuaW1hdGlv
blByb2dyYW1tYXRpY1Njcm9sbC0+dXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKIH0KIAordm9pZCBT
Y3JvbGxBbmltYXRvcjo6dXBkYXRlVXNlclNjcm9sbFN0YXR1cyhVc2VyU2Nyb2xsU3RhdHVzIHN0
YXR1cykKK3sKKyAgICBpZiAobV91c2VyU2Nyb2xsU3RhdHVzID09IHN0YXR1cykKKyAgICAgICAg
cmV0dXJuOworICAgIG1fdXNlclNjcm9sbFN0YXR1cyA9IHN0YXR1czsKKyAgICBpZiAobV91c2Vy
U2Nyb2xsU3RhdHVzICE9IFVzZXJTY3JvbGxTdGF0dXM6OlVzZXJTY3JvbGxOb3RJblByb2dyZXNz
KQorICAgICAgICBjYW5jZWxBbmltYXRpb25zKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCmluZGV4IDU5ZmNjNGQ0
NDkuLmFmOGU1ODQwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
aApAQCAtMTI0LDcgKzEyNCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlD
b250ZW50QXJlYVNjcm9sbGVkKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgVU5VU0VEX1BBUkFN
KGRlbHRhKTsgfQogCi0gICAgdmlydHVhbCBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1VzZXJTY3JvbGxJblBy
b2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU2Nyb2xsU3RhdHVzICE9IFVzZXJTY3JvbGxT
dGF0dXM6OlVzZXJTY3JvbGxOb3RJblByb2dyZXNzOyB9CiAgICAgdmlydHVhbCBib29sIGlzUnVi
YmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApA
QCAtMTU0LDYgKzE1NCw3IEBAIHB1YmxpYzoKICAgICBMYXlvdXRTaXplIHNjcm9sbEV4dGVudCgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIEZsb2F0U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdCBvdmVy
cmlkZTsKICNlbmRpZgorICAgIHZvaWQgdXBkYXRlVXNlclNjcm9sbFN0YXR1cyhVc2VyU2Nyb2xs
U3RhdHVzKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQb3NpdGlvbkNo
YW5nZWQoY29uc3QgRmxvYXRTaXplJiBkZWx0YSk7CkBAIC0xNjcsNiArMTY4LDggQEAgcHJvdGVj
dGVkOgogICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50UG9zaXRpb247CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2Nyb2xsQW5pbWF0aW9uPiBtX2FuaW1hdGlvblByb2dyYW1tYXRpY1Njcm9sbDsKKwor
ICAgIFVzZXJTY3JvbGxTdGF0dXMgbV91c2VyU2Nyb2xsU3RhdHVzIHsgVXNlclNjcm9sbFN0YXR1
czo6VXNlclNjcm9sbE5vdEluUHJvZ3Jlc3MgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVzLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxUeXBlcy5oCmluZGV4IDUzZjA3M2M2NjYuLmY2
OTUzOTM4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFR5cGVz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaApAQCAtMjQzLDYg
KzI0MywxNCBAQCBlbnVtIGNsYXNzIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3IgOiB1aW50OF90
IHsKICAgICBTdGF0aW9uYXJ5CiB9OwogCitlbnVtIGNsYXNzIFVzZXJTY3JvbGxTdGF0dXMgOiB1
aW50OF90IHsKKyAgICBVc2VyU2Nyb2xsTm90SW5Qcm9ncmVzcywKKyAgICBXaGVlbFNjcm9sbElu
UHJvZ3Jlc3MsCisgICAgU2Nyb2xsQmFyU2Nyb2xsSW5Qcm9ncmVzcywKKyAgICBBdXRvU2Nyb2xs
SW5Qcm9ncmVzcywKKyAgICBPdGhlclVzZXJTY3JvbGxJblByb2dyZXNzLAorfTsKKwogdXNpbmcg
U2Nyb2xsYmFyQ29udHJvbFN0YXRlID0gdW5zaWduZWQ7CiB1c2luZyBTY3JvbGxiYXJDb250cm9s
UGFydE1hc2sgPSB1bnNpZ25lZDsKIHVzaW5nIFNjcm9sbGluZ05vZGVJRCA9IHVpbnQ2NF90Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAppbmRleCBkYWNhYWQ1MDBmLi4yYWVm
ZjZmMGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcApAQCAtNTQxLDEw
ICs1NDEsMTIgQEAgdm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3Jv
bGxQb3NpdGlvbiYgc2Nyb2xsUG9zaXRpb24sIFNjcm9sbEMKIAogYm9vbCBTY3JvbGxWaWV3Ojpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCiB7Ci0gICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybiBwbGF0
Zm9ybVNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLQotICAgIHJldHVybiBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgIGlmIChjdXJyZW50
U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpCisgICAgICAgIHNjcm9sbEFuaW1hdG9y
KCkudXBkYXRlVXNlclNjcm9sbFN0YXR1cyhVc2VyU2Nyb2xsU3RhdHVzOjpPdGhlclVzZXJTY3Jv
bGxJblByb2dyZXNzKTsKKyAgICBib29sIHJlc3VsdCA9IHBsYXRmb3JtV2lkZ2V0KCkgPyBwbGF0
Zm9ybVNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSA6IFNjcm9sbGFibGVBcmVhOjpzY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgaWYgKGN1cnJlbnRTY3JvbGxUeXBlKCkg
PT0gU2Nyb2xsVHlwZTo6VXNlcikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS51cGRhdGVVc2Vy
U2Nyb2xsU3RhdHVzKFVzZXJTY3JvbGxTdGF0dXM6OlVzZXJTY3JvbGxOb3RJblByb2dyZXNzKTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBib29sIFNjcm9sbFZpZXc6OmxvZ2ljYWxTY3JvbGwo
U2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFy
ZWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4
IGFkNDczMjlhZTAuLjExYzkzYmNiYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxhYmxlQXJlYS5jcHAKQEAgLTgyMCw2ICs4MjAsMTIgQEAgdm9pZCBTY3JvbGxhYmxlQXJlYTo6
Y29tcHV0ZVNjcm9sbGJhclZhbHVlQW5kT3ZlcmhhbmcoZmxvYXQgY3VycmVudFBvc2l0aW9uLCBm
bG8KICAgICB9CiB9CiAKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVVzZXJTY3JvbGxTdGF0
dXMoVXNlclNjcm9sbFN0YXR1cyBzdGF0dXMpCit7CisgICAgaWYgKGF1dG8qIGFuaW1hdG9yID0g
ZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICBhbmltYXRvci0+dXBkYXRlVXNlclNj
cm9sbFN0YXR1cyhzdGF0dXMpOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCiB7CiAgICAgdHMg
PDwgc2Nyb2xsYWJsZUFyZWEuZGVidWdEZXNjcmlwdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmgKaW5kZXggNDM4M2I3NmNhZi4uYjYzNDA3ODRmNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCkBAIC0zNTMsNiArMzUzLDggQEAg
cHVibGljOgogICAgIAogICAgIHZpcnR1YWwgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25z
dCA9IDA7CiAKKyAgICB2b2lkIHVwZGF0ZVVzZXJTY3JvbGxTdGF0dXMoVXNlclNjcm9sbFN0YXR1
cyk7CisKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBTY3JvbGxhYmxlQXJlYSgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNjcm9sbGFibGVBcmVhKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCBhNmI1ODA3Mzg5Li41ODdjMTExOGEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKQEAgLTMwNiw2ICszMDYsOCBAQCB2b2lk
IFNjcm9sbGJhcjo6c2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyUGFydCBwYXJ0KQogYm9vbCBTY3Jv
bGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAg
aWYgKG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KSB7CisgICAgICAgIGlmIChhdXRvKiBhbmlt
YXRvciA9IG1fc2Nyb2xsYWJsZUFyZWEuZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAg
ICAgICAgYW5pbWF0b3ItPnVwZGF0ZVVzZXJTY3JvbGxTdGF0dXMoVXNlclNjcm9sbFN0YXR1czo6
U2Nyb2xsQmFyU2Nyb2xsSW5Qcm9ncmVzcyk7CiAgICAgICAgIGlmICh0aGVtZSgpLnNob3VsZFNu
YXBCYWNrVG9EcmFnT3JpZ2luKCp0aGlzLCBldnQpKQogICAgICAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYS5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRhdGlvbiwgbV9kcmFn
T3JpZ2luKTsKICAgICAgICAgZWxzZSB7CkBAIC0zNTYsNiArMzU4LDggQEAgYm9vbCBTY3JvbGxi
YXI6Om1vdXNlRXhpdGVkKCkKIAogYm9vbCBTY3JvbGxiYXI6Om1vdXNlVXAoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogeworICAgIGlmIChhdXRvKiBhbmltYXRvciA9IG1f
c2Nyb2xsYWJsZUFyZWEuZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICBhbmltYXRv
ci0+dXBkYXRlVXNlclNjcm9sbFN0YXR1cyhVc2VyU2Nyb2xsU3RhdHVzOjpVc2VyU2Nyb2xsTm90
SW5Qcm9ncmVzcyk7CiAgICAgc2V0UHJlc3NlZFBhcnQoTm9QYXJ0KTsKICAgICBtX3ByZXNzZWRQ
b3MgPSAwOwogICAgIG1fZHJhZ2dpbmdEb2N1bWVudCA9IGZhbHNlOwpAQCAtMzg0LDYgKzM4OCw4
IEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZURvd24oY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBl
dnQpCiAKICAgICBpbnQgcHJlc3NlZFBvc2l0aW9uID0gKG9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhciA/IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24o
KSkueCgpIDogY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKS55KCkp
OwogICAgIGlmIChhY3Rpb24gPT0gU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb246OkNlbnRlck9u
VGh1bWIpIHsKKyAgICAgICAgaWYgKGF1dG8qIGFuaW1hdG9yID0gbV9zY3JvbGxhYmxlQXJlYS5l
eGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgICAgICBhbmltYXRvci0+dXBkYXRlVXNl
clNjcm9sbFN0YXR1cyhVc2VyU2Nyb2xsU3RhdHVzOjpTY3JvbGxCYXJTY3JvbGxJblByb2dyZXNz
KTsKICAgICAgICAgc2V0SG92ZXJlZFBhcnQoVGh1bWJQYXJ0KTsKICAgICAgICAgc2V0UHJlc3Nl
ZFBhcnQoVGh1bWJQYXJ0KTsKICAgICAgICAgbV9kcmFnT3JpZ2luID0gbV9jdXJyZW50UG9zOwpA
QCAtMzk5LDggKzQwNSwxMSBAQCBib29sIFNjcm9sbGJhcjo6bW91c2VEb3duKGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgZXZ0KQogICAgIGlmIChhY3Rpb24gPT0gU2Nyb2xsYmFyQnV0dG9uUHJl
c3NBY3Rpb246OlN0YXJ0RHJhZykKICAgICAgICAgbV9kcmFnT3JpZ2luID0gbV9jdXJyZW50UG9z
OwogCi0gICAgaWYgKGFjdGlvbiA9PSBTY3JvbGxiYXJCdXR0b25QcmVzc0FjdGlvbjo6U2Nyb2xs
KQorICAgIGlmIChhY3Rpb24gPT0gU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb246OlNjcm9sbCkg
eworICAgICAgICBpZiAoYXV0byogYW5pbWF0b3IgPSBtX3Njcm9sbGFibGVBcmVhLmV4aXN0aW5n
U2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgICAgIGFuaW1hdG9yLT51cGRhdGVVc2VyU2Nyb2xs
U3RhdHVzKFVzZXJTY3JvbGxTdGF0dXM6OlNjcm9sbEJhclNjcm9sbEluUHJvZ3Jlc3MpOwogICAg
ICAgICBhdXRvc2Nyb2xsUHJlc3NlZFBhcnQodGhlbWUoKS5pbml0aWFsQXV0b3Njcm9sbFRpbWVy
RGVsYXkoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KaW5kZXggY2Q4YzM2ZDI3ZS4u
YTYxZTI0OGQ5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bEFuaW1hdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbQpAQCAtODU3LDcgKzg1Nyw5IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6
OmltbWVkaWF0ZVNjcm9sbFRvUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24s
CiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25z
dAogewotICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIuaXNVc2VyU2Nyb2xsSW5Qcm9ncmVz
cygpOworICAgIGlmIChtX3Njcm9sbENvbnRyb2xsZXIuaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmlzVXNl
clNjcm9sbEluUHJvZ3Jlc3MoKTsKIH0KIAogYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6aXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCmluZGV4IDMwN2Y5YjJjN2YuLjIyNmUzMmQ0ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCkBAIC05OTUsNiArOTk1LDEyIEBAIFJlbmRlckJveCogUmVuZGVyQm94
OjpmaW5kQXV0b3Njcm9sbGFibGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICByZXR1cm4g
aXM8UmVuZGVyQm94PihyZW5kZXJlcikgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKSA6
IG51bGxwdHI7CiB9CiAKK3ZvaWQgUmVuZGVyQm94Ojp3aWxsU3RvcEF1dG9zY3JvbGwoKQorewor
ICAgIGlmIChsYXllcigpKQorICAgICAgICBsYXllcigpLT53aWxsU3RvcEF1dG9zY3JvbGwoKTsK
K30KKwogdm9pZCBSZW5kZXJCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgc291cmNlKQog
ewogICAgIGlmIChsYXllcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4
IDNjZDgwYmNkMDcuLjA5YzhlZmE4ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgKQEAgLTQ3Miw2ICs0NzIsNyBAQCBvdmVycmlkZTsKICAgICBib29sIGNhbkF1dG9zY3JvbGwo
KSBjb25zdDsKICAgICBJbnRTaXplIGNhbGN1bGF0ZUF1dG9zY3JvbGxEaXJlY3Rpb24oY29uc3Qg
SW50UG9pbnQmIHdpbmRvd1BvaW50KSBjb25zdDsKICAgICBzdGF0aWMgUmVuZGVyQm94KiBmaW5k
QXV0b3Njcm9sbGFibGUoUmVuZGVyT2JqZWN0Kik7CisgICAgdm9pZCB3aWxsU3RvcEF1dG9zY3Jv
bGwoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcEF1dG9zY3JvbGwoKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcGFuU2Nyb2xsKGNvbnN0IEludFBvaW50Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDdkMWVkNGU2NGUuLmZhN2Q1MDBmN2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjYxNCw3ICsyNjE0LDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcKIAogdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsUG9z
aXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsK
LSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKKyAgICBpZiAoYW5pbWF0
ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcyAmJiAhaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpKQog
ICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0
aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwogICAgIGVsc2UKICAgICAgICAg
c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xs
VHlwZSwgY2xhbXBpbmcpOwpAQCAtMjgyNyw4ICsyODI3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wg
aW5zaWQKIAogICAgIGF1dG8gc2hvdWxkVXNlQW5pbWF0ZWRTY3JvbGwgPSBbXShFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyYgb3B0aW9ucykKICAgICB7
Ci0gICAgICAgIGJvb2wgdXNlQW5pbWF0ZWRTY3JvbGxpbmcgPSBvcHRpb25zLmlzUGVyZm9ybWlu
Z0F1dG9zY3JvbGwgIT0gSXNQZXJmb3JtaW5nQXV0b3Njcm9sbDo6WWVzCi0gICAgICAgICAgICAm
JiBlbGVtZW50ICYmIHVzZVNtb290aFNjcm9sbGluZyhvcHRpb25zLmJlaGF2aW9yLCBlbGVtZW50
KTsKKyAgICAgICAgYm9vbCB1c2VBbmltYXRlZFNjcm9sbGluZyA9IGVsZW1lbnQgJiYgdXNlU21v
b3RoU2Nyb2xsaW5nKGJlaGF2aW9yLCBlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHVzZUFuaW1h
dGVkU2Nyb2xsaW5nID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsK
ICAgICB9OwogCkBAIC0yODU0LDYgKzI4NTMsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxS
ZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAog
CiAgICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxP
ZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVj
dCkubG9jYXRpb24oKSkpOwogICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3Jv
bGxPZmZzZXQoKSB8fCBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhh
dmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zLmlz
UGVyZm9ybWluZ0F1dG9zY3JvbGwgPT0gSXNQZXJmb3JtaW5nQXV0b3Njcm9sbDo6WWVzKQorICAg
ICAgICAgICAgICAgIHVwZGF0ZVVzZXJTY3JvbGxTdGF0dXMoVXNlclNjcm9sbFN0YXR1czo6QXV0
b1Njcm9sbEluUHJvZ3Jlc3MpOworCiAgICAgICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xs
T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgICAgICBhdXRvIGFuaW1hdGVkID0gc2hv
dWxkVXNlQW5pbWF0ZWRTY3JvbGwoYm94LT5lbGVtZW50KCksIG9wdGlvbnMpOwogICAgICAgICAg
ICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3Jv
bGxPZmZzZXQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkLCBhbmltYXRlZCk7CkBAIC0yODgyLDYgKzI4ODQsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpz
Y3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBp
bnNpZAogCiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBleHBvc2VSZWN0ID0gZ2V0UmVjdFRv
RXhwb3NlKHZpZXdSZWN0LCBuZXdSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9w
dGlvbnMuYWxpZ25ZKTsKIAorICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmlzUGVyZm9ybWlu
Z0F1dG9zY3JvbGwgPT0gSXNQZXJmb3JtaW5nQXV0b3Njcm9sbDo6WWVzKQorICAgICAgICAgICAg
ICAgICAgICBmcmFtZVZpZXcudXBkYXRlVXNlclNjcm9sbFN0YXR1cyhVc2VyU2Nyb2xsU3RhdHVz
OjpBdXRvU2Nyb2xsSW5Qcm9ncmVzcyk7CisKICAgICAgICAgICAgICAgICBJbnRQb2ludCBzY3Jv
bGxQb3NpdGlvbihyb3VuZGVkSW50UG9pbnQoZXhwb3NlUmVjdC5sb2NhdGlvbigpKSk7CiAgICAg
ICAgICAgICAgICAgLy8gQWRqdXN0IG9mZnNldHMgaWYgdGhleSdyZSBvdXRzaWRlIG9mIHRoZSBh
bGxvd2FibGUgcmFuZ2UuCiAgICAgICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQ
b3NpdGlvbi5jb25zdHJhaW5lZEJldHdlZW4oSW50UG9pbnQoKSwgSW50UG9pbnQoZnJhbWVWaWV3
LmNvbnRlbnRzU2l6ZSgpKSk7CkBAIC0yOTMxLDYgKzI5MzYsOSBAQCB2b2lkIFJlbmRlckxheWVy
OjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9v
bCBpbnNpZAogICAgICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhw
b3NlKHZpZXdSZWN0LCB0YXJnZXRSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9w
dGlvbnMuYWxpZ25ZKTsKICAgICAgICAgICAgIC8vIEF2b2lkIHNjcm9sbGluZyB0byB0aGUgcm91
bmRlZCB2YWx1ZSBvZiByZXZlYWxSZWN0LmxvY2F0aW9uKCkgaWYgd2UgZG9uJ3QgYWN0dWFsbHkg
bmVlZCB0byBzY3JvbGwKICAgICAgICAgICAgIGlmIChyZXZlYWxSZWN0ICE9IHZpZXdSZWN0KSB7
CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaXNQZXJmb3JtaW5nQXV0b3Njcm9sbCA9PSBJ
c1BlcmZvcm1pbmdBdXRvc2Nyb2xsOjpZZXMpCisgICAgICAgICAgICAgICAgICAgIGZyYW1lVmll
dy51cGRhdGVVc2VyU2Nyb2xsU3RhdHVzKFVzZXJTY3JvbGxTdGF0dXM6OkF1dG9TY3JvbGxJblBy
b2dyZXNzKTsKKwogICAgICAgICAgICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsUG9z
aXRpb24gPSByb3VuZGVkSW50UG9pbnQocmV2ZWFsUmVjdC5sb2NhdGlvbigpKS5jb25zdHJhaW5l
ZEJldHdlZW4obWluU2Nyb2xsUG9zaXRpb24sIG1heFNjcm9sbFBvc2l0aW9uKTsKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHVzZSBkb2N1bWVudCgpLT5zY3JvbGxpbmdFbGVt
ZW50KCk/CiAgICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDUwNTkKQEAgLTMwNzcsNiArMzA4NSwyOCBAQCB2b2lkIFJlbmRlckxh
eWVyOjphdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbkluV2luZG93KQogICAgIHNj
cm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0UmVjdChjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiwgTGF5
b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Ny
b2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
VG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcywgU2Ny
b2xsQmVoYXZpb3I6OkF1dG8sIElzUGVyZm9ybWluZ0F1dG9zY3JvbGw6OlllcyB9KTsKIH0KIAor
dm9pZCBSZW5kZXJMYXllcjo6d2lsbFN0b3BBdXRvc2Nyb2xsKCkKK3sKKyAgICBhdXRvKiBsYXll
ciA9IHRoaXM7CisgICAgYXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxv
Y2tMYXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICB3aGlsZSAobGF5
ZXIpIHsKKyAgICAgICAgbGF5ZXItPnVwZGF0ZVVzZXJTY3JvbGxTdGF0dXMoVXNlclNjcm9sbFN0
YXR1czo6VXNlclNjcm9sbE5vdEluUHJvZ3Jlc3MpOworCisgICAgICAgIHBhcmVudExheWVyID0g
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKmxheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmll
czo6Tm8pOworICAgICAgICBpZiAoIXBhcmVudExheWVyKSB7CisgICAgICAgICAgICBGcmFtZVZp
ZXcmIGZyYW1lVmlldyA9IGxheWVyLT5yZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKKyAg
ICAgICAgICAgIGZyYW1lVmlldy51cGRhdGVVc2VyU2Nyb2xsU3RhdHVzKFVzZXJTY3JvbGxTdGF0
dXM6OlVzZXJTY3JvbGxOb3RJblByb2dyZXNzKTsKKworICAgICAgICAgICAgSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSBsYXllci0+cmVuZGVyZXIoKS5kb2N1bWVudCgpLm93
bmVyRWxlbWVudCgpOworICAgICAgICAgICAgaWYgKG93bmVyRWxlbWVudCAmJiBvd25lckVsZW1l
bnQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nTGF5
ZXIgPSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpCisgICAgICAg
ICAgICAgICAgICAgIHBhcmVudExheWVyID0gZW5jbG9zaW5nTGF5ZXItPmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsYXllciA9IHBh
cmVudExheWVyOworICAgIH0KK30KKwogYm9vbCBSZW5kZXJMYXllcjo6Y2FuUmVzaXplKCkgY29u
c3QKIHsKICAgICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8aWZyYW1lPiBiZWNhdXNl
IHRoZXkgbmV2ZXIgaGF2ZQpAQCAtNDIxMCw3ICs0MjQwLDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXI6
OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50
UG9pbnQmCiAKIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKIHsK
LSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKTsKKyAgICBpZiAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBl
OjpVc2VyKQorICAgICAgICBzY3JvbGxBbmltYXRvcigpLnVwZGF0ZVVzZXJTY3JvbGxTdGF0dXMo
VXNlclNjcm9sbFN0YXR1czo6T3RoZXJVc2VyU2Nyb2xsSW5Qcm9ncmVzcyk7CisgICAgYm9vbCBy
ZXN1bHQgPSBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpOworICAgIGlmIChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVz
ZXIpCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkudXBkYXRlVXNlclNjcm9sbFN0YXR1cyhVc2Vy
U2Nyb2xsU3RhdHVzOjpVc2VyU2Nyb2xsTm90SW5Qcm9ncmVzcyk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhl
bE9mZnNldCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9i
amVjdCogc3VidHJlZVBhaW50Um9vdCwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZs
YWdzLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNv
bnRleHQqIGV2ZW50UmVnaW9uQ29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgKaW5kZXggM2ZlNzU4ZDJjOS4uMzQzMjExOTJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKQEAgLTUzOCw2ICs1MzgsNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyID0gMSk7CiAgICAgdm9pZCBhdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50Jik7CisgICAgdm9p
ZCB3aWxsU3RvcEF1dG9zY3JvbGwoKTsKIAogICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7CiAg
ICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgTGF5b3V0U2l6
ZSYpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>