<?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>113449</bug_id>
          
          <creation_ts>2013-03-27 15:34:25 -0700</creation_ts>
          <short_desc>[BlackBerry] Replace map{From,To}Transformed() with ViewportAccessor</short_desc>
          <delta_ts>2013-04-05 07:43:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit BlackBerry</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jakob Petsovits">jpetsovits</reporter>
          <assigned_to name="Jakob Petsovits">jpetsovits</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>anilsson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mifenton</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>864919</commentid>
    <comment_count>0</comment_count>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2013-03-27 15:34:25 -0700</bug_when>
    <thetext>The patch below removes the WebPage/BackingStoreClient family of coordinate transformation functions, which were widely disliked for their naming, with ViewportAccessor API that had previously been introduced for limited use cases. This takes care of the remaining call sites and leaves us with a single API to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864924</commentid>
    <comment_count>1</comment_count>
      <attachid>195418</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2013-03-27 15:37:26 -0700</bug_when>
    <thetext>Created attachment 195418
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865513</commentid>
    <comment_count>2</comment_count>
      <attachid>195418</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-03-28 08:02:42 -0700</bug_when>
    <thetext>Comment on attachment 195418
Patch

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

I really like this patch, great cleanup!

&gt; Source/WebKit/blackberry/Api/BackingStore.cpp:1246
&gt; +            : viewportAccessor-&gt;roundFromDocumentContents(viewportAccessor-&gt;documentContentsRect(), currentScale);

This looks like it&apos;s actually fixing a bug - before, transformedContentsSize() would be called, which always uses the saved scale. But the code is now updated to use the currentScale stored in the active geometry, which could be different.

&gt; Source/WebKit/blackberry/Api/WebPage.cpp:2895
&gt; +

What about IntPoint ViewportAccessor::roundedPixelContents(const FloatPoint&amp; point) const, which does exactly this?

&gt; Source/WebKit/blackberry/Api/WebPage.cpp:3897
&gt; +        IntPoint documentContentsPoint = m_webkitThreadViewportAccessor-&gt;documentContentsFromViewport(mouseEvent.position());

Just a quick observation - I really like how the viewport accessor uses the &quot;resultFromInput&quot; naming convention which make the code more readable instead of &quot;inputToResult&quot; which is kind of backwards.

&gt; Source/WebKit/blackberry/Api/WebPage.cpp:4472
&gt; +            const IntRect tRect = viewportAccessor-&gt;roundToDocumentFromPixelContents(WebCore::FloatRect(blockRect));

Whoa, I thought we didn&apos;t use &quot;const&quot; for locals in the WebKit code.

&gt; Source/WebKit/blackberry/Api/WebPage.cpp:4522
&gt; +    const FloatPoint topLeftPoint = newBlockRect.location();

Whoa, there&apos;s that const again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>865663</commentid>
    <comment_count>3</comment_count>
      <attachid>195418</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2013-03-28 11:37:22 -0700</bug_when>
    <thetext>Comment on attachment 195418
Patch

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

Thanks for the review, Arvid!

&gt;&gt; Source/WebKit/blackberry/Api/WebPage.cpp:2895
&gt;&gt; +
&gt; 
&gt; What about IntPoint ViewportAccessor::roundedPixelContents(const FloatPoint&amp; point) const, which does exactly this?

I was thinking about that, but the thing with roundedPixelContents() is really that we shouldn&apos;t apply it to a document coordinate offset. roundedDocumentContents() goes the other way and I didn&apos;t want to change the behavior in subtle ways (for the record, I don&apos;t think the rounding direction matters in this case) so I put the rounding in here directly to preserve the previous calculation without applying a &quot;wrong&quot; function to the point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869751</commentid>
    <comment_count>4</comment_count>
      <attachid>195418</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2013-04-05 07:07:41 -0700</bug_when>
    <thetext>Comment on attachment 195418
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869760</commentid>
    <comment_count>5</comment_count>
      <attachid>195418</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-05 07:43:42 -0700</bug_when>
    <thetext>Comment on attachment 195418
Patch

Clearing flags on attachment: 195418

Committed r147744: &lt;http://trac.webkit.org/changeset/147744&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869761</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-05 07:43:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195418</attachid>
            <date>2013-03-27 15:37:26 -0700</date>
            <delta_ts>2013-04-05 07:43:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113449-20130327183649.patch</filename>
            <type>text/plain</type>
            <size>60619</size>
            <attacher name="Jakob Petsovits">jpetsovits</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpp
bmRleCBmNjhlOWU2ZjcyNDMzYWNmYmQxOWMwNGI4MDY3YjY3NTc5NjBjZWE0Li4zNzZkMGQ2YWJh
OTcyYTk5OWE3Njc3NzNlMTIyNDBjYjBkYTk2YjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MiBAQAorMjAxMy0wMy0yOCAgSmFrb2IgUGV0c292aXRzICA8anBl
dHNvdml0c0BibGFja2JlcnJ5LmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gUmVwbGFjZSBt
YXB7RnJvbSxUb31UcmFuc2Zvcm1lZCgpIHdpdGggVmlld3BvcnRBY2Nlc3NvcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNDQ5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBX
ZWJQYWdlL0JhY2tpbmdTdG9yZUNsaWVudCBmYW1pbHkgb2YgY29vcmRpbmF0ZQorICAgICAgICB0
cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMsIHdoaWNoIHdlcmUgd2lkZWx5IGRpc2xpa2VkIGZvciB0
aGVpcgorICAgICAgICBuYW1pbmcsIHdpdGggVmlld3BvcnRBY2Nlc3NvciBBUEkgdGhhdCBoYWQg
cHJldmlvdXNseSBiZWVuCisgICAgICAgIGludHJvZHVjZWQgZm9yIGxpbWl0ZWQgdXNlIGNhc2Vz
LiBUaGlzIGNvbW1pdCB0YWtlcyBjYXJlIG9mIHRoZQorICAgICAgICByZW1haW5pbmcgY2FsbCBz
aXRlcyBhbmQgbGVhdmVzIHVzIHdpdGggYSBzaW5nbGUgQVBJIHRvIHVzZS4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG9ubHkgYSBjbGVhbi11cC9yZWZhY3RvciBvZiBleGlzdGluZyBjb2RlICYg
ZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIEFwaS9CYWNraW5nU3RvcmUuY3BwOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpyZXBhaW50KToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6c2xvd1Njcm9s
bCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnZp
c2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5n
U3RvcmVQcml2YXRlOjp1bmNsaXBwZWRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6YmxpdFZpc2libGVDb250ZW50
cyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OmV4
cGFuZGVkQ29udGVudHNTaXplKToKKyAgICAgICAgKiBBcGkvSW5SZWdpb25TY3JvbGxlci5jcHA6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpj
bGlwVG9SZWN0KToKKyAgICAgICAgKiBBcGkvV2ViUGFnZS5jcHA6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjppbml0KToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OnNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6Om1heGltdW1TY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpzZXRTY3Jv
bGxQb3NpdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRl
Ojp2aWV3cG9ydFNpemUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJp
dmF0ZTo6YWN0dWFsVmlzaWJsZVNpemUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlUHJpdmF0ZTo6bGF5b3V0RmluaXNoZWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlUHJpdmF0ZTo6bm90aWZ5VHJhbnNmb3JtZWRDb250ZW50c1NpemVDaGFuZ2Vk
KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OnVwZGF0ZUN1
cnNvcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpmb2N1
c05vZGVSZWN0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6
OmNvbnRleHROb2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZh
dGU6OmJsb2NrWm9vbVJlY3RGb3JOb2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViUGFnZVByaXZhdGU6Onpvb21BbmltYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6YmxvY2tab29tKToKKyAgICAgICAgKiBBcGkv
V2ViUGFnZV9wLmg6CisgICAgICAgIChXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAgICogV2ViS2l0
U3VwcG9ydC9CYWNraW5nU3RvcmVDbGllbnQuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpCYWNraW5nU3RvcmVDbGllbnQ6OnRyYW5zZm9ybWVkU2Nyb2xsUG9zaXRpb24pOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVDbGllbnQ6OnRyYW5zZm9ybWVk
TWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFj
a2luZ1N0b3JlQ2xpZW50OjphY3R1YWxWaXNpYmxlU2l6ZSk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZUNsaWVudDo6dHJhbnNmb3JtZWRBY3R1YWxWaXNpYmxlU2l6
ZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDbGllbnQuaDoKKyAgICAg
ICAgKEJhY2tpbmdTdG9yZUNsaWVudCk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GYXRGaW5n
ZXJzLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6ZmluZ2Vy
UmVjdEZvclBvaW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RmF0RmluZ2Vyczo6
RmF0RmluZ2Vycyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZhdEZpbmdlcnM6OmZp
bmRCZXN0UG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpGYXRGaW5nZXJzOjpm
aW5kSW50ZXJzZWN0aW5nUmVnaW9ucyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkZh
dEZpbmdlcnM6OmdldE5vZGVzRnJvbVJlY3QpOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvSW5S
ZWdpb25TY3JvbGxhYmxlQXJlYS5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oklu
UmVnaW9uU2Nyb2xsYWJsZUFyZWE6OkluUmVnaW9uU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAq
IFdlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6Oldl
YktpdDo6SW5wdXRIYW5kbGVyOjplbnN1cmVGb2N1c1RleHRFbGVtZW50VmlzaWJsZSk6CisgICAg
ICAgICogV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpzZW5kQ2xpY2tBdEZhdEZpbmdlcnNQ
b2ludCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlRvdWNoRXZlbnRIYW5kbGVyOjpo
YW5kbGVUb3VjaFBvaW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6VG91Y2hFdmVu
dEhhbmRsZXI6OmhhbmRsZUZhdEZpbmdlclByZXNzZWQpOgorICAgICAgICAqIFdlYktpdFN1cHBv
cnQvV2ViS2l0VGhyZWFkVmlld3BvcnRBY2Nlc3Nvci5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYktpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3I6OnBpeGVsQ29udGVudHNTaXpl
KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViS2l0VGhyZWFkVmlld3BvcnRBY2Nl
c3Nvcjo6cGl4ZWxTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYktpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3I6OmRvY3VtZW50Vmlld3BvcnRTaXplKToKKwog
MjAxMy0wMy0yNyAgSmFrb2IgUGV0c292aXRzICA8anBldHNvdml0c0BibGFja2JlcnJ5LmNvbT4K
IAogICAgICAgICBbQmxhY2tCZXJyeV0gRG9uJ3QgdXNlIFdlYktpdCB0aHJlYWQgc2NhbGUgaW5m
b3JtYXRpb24gaW4gV2ViUGFnZUNvbXBvc2l0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKaW5kZXggMWQ4MGE5OTRiMThlMTFlNzQ5MjEzOGYzMDM4
YmJhMzIxNWIwYzQ5ZS4uNjkzMjRhYzAwMzUyMDBlNGM5MTFhZmI0ZTdjYTY4ZWU4MzAzNWY0YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcApAQCAt
NDM2LDE2ICs0MzYsMTIgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZXBhaW50KGNvbnN0
IFBsYXRmb3JtOjpJbnRSZWN0JiB3aW5kb3dSZWN0LAogICAgICAvLyBOb3cgdGhpcyBtZXRob2Qg
d2lsbCBiZSBjYWxsZWQgZnJvbSBXZWJQYWdlUHJpdmF0ZTo6cmVwYWludCgpLgogCiAgICAgaWYg
KGNvbnRlbnRDaGFuZ2VkICYmICF3aW5kb3dSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBU
aGlzIHdpbmRvd1JlY3QgaXMgaW4gdW50cmFuc2Zvcm1lZCBjb29yZGluYXRlcyByZWxhdGl2ZSB0
byB0aGUgdmlld3BvcnQsIGJ1dAotICAgICAgICAvLyBpdCBuZWVkcyB0byBiZSB0cmFuc2Zvcm1l
ZCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgdHJhbnNmb3JtZWQgY29udGVudHMuCi0gICAg
ICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3QgPSBtX3dlYlBhZ2UtPmQtPm1hcFRvVHJhbnNmb3Jt
ZWQobV9jbGllbnQtPm1hcEZyb21WaWV3cG9ydFRvQ29udGVudHMod2luZG93UmVjdCkpOwotICAg
ICAgICByZWN0LmluZmxhdGUoMSAvKmR4Ki8sIDEgLypkeSovKTsgLy8gQWNjb3VudCBmb3IgYW50
aS1hbGlhc2luZyBvZiBwcmV2aW91cyByZW5kZXJpbmcgcnVucy4KKyAgICAgICAgLy8gVGhpcyB3
aW5kb3dSZWN0IGlzIGluIGRvY3VtZW50IGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB2aWV3
cG9ydCwKKyAgICAgICAgLy8gYnV0IHdlIG5lZWQgaXQgaW4gcGl4ZWwgY29udGVudHMgY29vcmRp
bmF0ZXMuCisgICAgICAgIGNvbnN0IFBsYXRmb3JtOjpWaWV3cG9ydEFjY2Vzc29yKiB2aWV3cG9y
dEFjY2Vzc29yID0gbV93ZWJQYWdlLT53ZWJraXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29yKCk7Cisg
ICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3QgPSB2aWV3cG9ydEFjY2Vzc29yLT5yb3VuZFRv
UGl4ZWxGcm9tRG9jdW1lbnRDb250ZW50cyh2aWV3cG9ydEFjY2Vzc29yLT5kb2N1bWVudENvbnRl
bnRzRnJvbVZpZXdwb3J0KHdpbmRvd1JlY3QpKTsKKyAgICAgICAgcmVjdC5pbnRlcnNlY3Qodmll
d3BvcnRBY2Nlc3Nvci0+cGl4ZWxDb250ZW50c1JlY3QoKSk7CiAKLSAgICAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIG5vdCBleHBsaWNpdGVseSBkZXBlbmQgb24gV2ViQ29yZTo6LgotICAgICAg
ICBXZWJDb3JlOjpJbnRSZWN0IHRtcFJlY3QgPSByZWN0OwotICAgICAgICBtX2NsaWVudC0+Y2xp
cFRvVHJhbnNmb3JtZWRDb250ZW50c1JlY3QodG1wUmVjdCk7Ci0KLSAgICAgICAgcmVjdCA9IHRt
cFJlY3Q7CiAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsK
IApAQCAtNDc1LDkgKzQ3MSwxMCBAQCB2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnNsb3dTY3Jv
bGwoY29uc3QgUGxhdGZvcm06OkludFNpemUmIGRlbHRhLCBjb25zdCBQbGF0ZgogCiAgICAgc2Ny
b2xsaW5nU3RhcnRlZEhlbHBlcihkZWx0YSk7CiAKLSAgICAvLyBUaGlzIHdpbmRvd1JlY3QgaXMg
aW4gdW50cmFuc2Zvcm1lZCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQsIGJ1
dAotICAgIC8vIGl0IG5lZWRzIHRvIGJlIHRyYW5zZm9ybWVkIGNvb3JkaW5hdGVzIHJlbGF0aXZl
IHRvIHRoZSB0cmFuc2Zvcm1lZCBjb250ZW50cy4KLSAgICBQbGF0Zm9ybTo6SW50UmVjdCByZWN0
ID0gbV93ZWJQYWdlLT5kLT5tYXBUb1RyYW5zZm9ybWVkKG1fY2xpZW50LT5tYXBGcm9tVmlld3Bv
cnRUb0NvbnRlbnRzKHdpbmRvd1JlY3QpKTsKKyAgICAvLyBUaGlzIHdpbmRvd1JlY3QgaXMgaW4g
ZG9jdW1lbnQgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0LAorICAgIC8vIGJ1
dCB3ZSBuZWVkIGl0IGluIHBpeGVsIGNvbnRlbnRzIGNvb3JkaW5hdGVzLgorICAgIGNvbnN0IFBs
YXRmb3JtOjpWaWV3cG9ydEFjY2Vzc29yKiB2aWV3cG9ydEFjY2Vzc29yID0gbV93ZWJQYWdlLT53
ZWJraXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29yKCk7CisgICAgY29uc3QgUGxhdGZvcm06OkludFJl
Y3QgcmVjdCA9IHZpZXdwb3J0QWNjZXNzb3ItPnJvdW5kVG9QaXhlbEZyb21Eb2N1bWVudENvbnRl
bnRzKHZpZXdwb3J0QWNjZXNzb3ItPmRvY3VtZW50Q29udGVudHNGcm9tVmlld3BvcnQod2luZG93
UmVjdCkpOwogCiAgICAgaWYgKGltbWVkaWF0ZSkKICAgICAgICAgcmVuZGVyQW5kQmxpdEltbWVk
aWF0ZWx5KHJlY3QpOwpAQCAtNTk0LDEzICs1OTEsMTYgQEAgUGxhdGZvcm06OkludFJlY3QgQmFj
a2luZ1N0b3JlUHJpdmF0ZTo6ZXhwYW5kZWRDb250ZW50c1JlY3QoKSBjb25zdAogCiBQbGF0Zm9y
bTo6SW50UmVjdCBCYWNraW5nU3RvcmVQcml2YXRlOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uKG1fY2xpZW50LT50cmFuc2Zvcm1lZFZpc2li
bGVDb250ZW50c1JlY3QoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRS
ZWN0KFBsYXRmb3JtOjpJbnRQb2ludCgwLCAwKSwgbV9jbGllbnQtPnRyYW5zZm9ybWVkQ29udGVu
dHNTaXplKCkpKTsKKyAgICBjb25zdCBQbGF0Zm9ybTo6Vmlld3BvcnRBY2Nlc3Nvciogdmlld3Bv
cnRBY2Nlc3NvciA9IG1fd2ViUGFnZS0+d2Via2l0VGhyZWFkVmlld3BvcnRBY2Nlc3NvcigpOwor
ICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlY3QgPSB2aWV3cG9ydEFjY2Vzc29yLT5waXhlbFZpZXdw
b3J0UmVjdCgpOworICAgIHJlY3QuaW50ZXJzZWN0KHZpZXdwb3J0QWNjZXNzb3ItPnBpeGVsQ29u
dGVudHNSZWN0KCkpOworICAgIHJldHVybiByZWN0OwogfQogCiBQbGF0Zm9ybTo6SW50UmVjdCBC
YWNraW5nU3RvcmVQcml2YXRlOjp1bmNsaXBwZWRWaXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9jbGllbnQtPnRyYW5zZm9ybWVkVmlzaWJsZUNvbnRlbnRzUmVjdCgp
OworICAgIGNvbnN0IFBsYXRmb3JtOjpWaWV3cG9ydEFjY2Vzc29yKiB2aWV3cG9ydEFjY2Vzc29y
ID0gbV93ZWJQYWdlLT53ZWJraXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29yKCk7CisgICAgcmV0dXJu
IHZpZXdwb3J0QWNjZXNzb3ItPnBpeGVsVmlld3BvcnRSZWN0KCk7CiB9CiAKIGJvb2wgQmFja2lu
Z1N0b3JlUHJpdmF0ZTo6c2hvdWxkTW92ZUxlZnQoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGJh
Y2tpbmdTdG9yZVJlY3QpIGNvbnN0CkBAIC0xMjQxLDcgKzEyNDEsOSBAQCB2b2lkIEJhY2tpbmdT
dG9yZVByaXZhdGU6OmJsaXRWaXNpYmxlQ29udGVudHMoYm9vbCBmb3JjZSkKICAgICAgICAgVGls
ZU1hcCBjdXJyZW50TWFwID0gZ2VvbWV0cnktPnRpbGVNYXAoKTsKICAgICAgICAgZG91YmxlIGN1
cnJlbnRTY2FsZSA9IGdlb21ldHJ5LT5zY2FsZSgpOwogCi0gICAgICAgIGNvbnN0IFBsYXRmb3Jt
OjpJbnRSZWN0IHRyYW5zZm9ybWVkQ29udGVudHNSZWN0ID0gUGxhdGZvcm06OkludFJlY3QoUGxh
dGZvcm06OkludFBvaW50KDAsIDApLCBtX2NsaWVudC0+dHJhbnNmb3JtZWRDb250ZW50c1NpemUo
KSk7CisgICAgICAgIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0IHRyYW5zZm9ybWVkQ29udGVudHNS
ZWN0ID0gY3VycmVudFNjYWxlID09IHZpZXdwb3J0QWNjZXNzb3ItPnNjYWxlKCkKKyAgICAgICAg
ICAgID8gdmlld3BvcnRBY2Nlc3Nvci0+cGl4ZWxDb250ZW50c1JlY3QoKQorICAgICAgICAgICAg
OiB2aWV3cG9ydEFjY2Vzc29yLT5yb3VuZEZyb21Eb2N1bWVudENvbnRlbnRzKHZpZXdwb3J0QWNj
ZXNzb3ItPmRvY3VtZW50Q29udGVudHNSZWN0KCksIGN1cnJlbnRTY2FsZSk7CiAKICAgICAgICAg
Ly8gRm9yIGJsaXR0aW5nIGJhY2tpbmdzdG9yZSB0aWxlcywgd2UgbmVlZCB0aGUgc3JjUmVjdCB0
byBiZSBzcGVjaWZpZWQKICAgICAgICAgLy8gaW4gYmFja2luZ3N0b3JlIHRpbGUgcGl4ZWwgY29v
cmRpbmF0ZXMuIElmIG91ciB2aWV3cG9ydCBhY2Nlc3NvciBpcwpAQCAtMTgwMSw3ICsxODAzLDgg
QEAgaW50IEJhY2tpbmdTdG9yZVByaXZhdGU6Om1pbmltdW1OdW1iZXJPZlRpbGVzSGlnaCgpIGNv
bnN0CiAKIFBsYXRmb3JtOjpJbnRTaXplIEJhY2tpbmdTdG9yZVByaXZhdGU6OmV4cGFuZGVkQ29u
dGVudHNTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jbGllbnQtPnRyYW5zZm9ybWVkQ29u
dGVudHNTaXplKCkuZXhwYW5kZWRUbyhtX2NsaWVudC0+dHJhbnNmb3JtZWRWaWV3cG9ydFNpemUo
KSk7CisgICAgY29uc3QgUGxhdGZvcm06OlZpZXdwb3J0QWNjZXNzb3IqIHZpZXdwb3J0QWNjZXNz
b3IgPSBtX3dlYlBhZ2UtPndlYmtpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3IoKTsKKyAgICByZXR1
cm4gbV9jbGllbnQtPnRyYW5zZm9ybWVkVmlld3BvcnRTaXplKCkuZXhwYW5kZWRUbyh2aWV3cG9y
dEFjY2Vzc29yLT5waXhlbENvbnRlbnRzU2l6ZSgpKTsKIH0KIAogaW50IEJhY2tpbmdTdG9yZVBy
aXZhdGU6OnRpbGVXaWR0aCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL0luUmVnaW9uU2Nyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9J
blJlZ2lvblNjcm9sbGVyLmNwcAppbmRleCA2ZDgxNzEzZWRiN2I0NDFjZTlhOGI5NTg5NjhiMTk4
ODU2Yzg4YWIzLi4wMjI2M2VmNTIwNzU4OTE2OTU1YTIxMGUwMjQyODE0ZTAyNTdmOTkzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3JvbGxlci5jcHAK
QEAgLTM1LDggKzM1LDExIEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkhhbmRsZXIuaCIKKyNpbmNsdWRlICJX
ZWJLaXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29yLmgiCiAjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCiAK
KyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1WaWV3cG9ydEFjY2Vzc29yLmg+CisKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7CkBAIC0yMDksMTIg
KzIxMiwxNCBAQCBXZWJDb3JlOjpJbnRSZWN0IEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpjbGlw
VG9SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaQogICAgIGlmICghbGF5ZXIpCiAgICAg
ICAgIHJldHVybiBjbGlwcGluZ1JlY3Q7CiAKKyAgICBjb25zdCBQbGF0Zm9ybTo6Vmlld3BvcnRB
Y2Nlc3Nvciogdmlld3BvcnRBY2Nlc3NvciA9IG1fd2ViUGFnZS0+bV93ZWJraXRUaHJlYWRWaWV3
cG9ydEFjY2Vzc29yOworCiAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5pc1JlbmRlclZpZXco
KSkgeyAvLyAjZG9jdW1lbnQgY2FzZQogICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB0b1JlbmRl
clZpZXcobGF5ZXItPnJlbmRlcmVyKCkpLT5mcmFtZVZpZXcoKTsKICAgICAgICAgQVNTRVJUKHZp
ZXcpOwogICAgICAgICBBU1NFUlQoY2FuU2Nyb2xsSW5uZXJGcmFtZSh2aWV3LT5mcmFtZSgpKSk7
CiAKLSAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBmcmFtZVdpbmRvd1JlY3QgPSBtX3dlYlBhZ2Ut
Pm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5nZXRSZWN1cnNpdmVWaXNpYmxlV2luZG93UmVj
dCh2aWV3KSk7CisgICAgICAgIFdlYkNvcmU6OkludFJlY3QgZnJhbWVXaW5kb3dSZWN0ID0gdmll
d3BvcnRBY2Nlc3Nvci0+cm91bmRUb1BpeGVsRnJvbURvY3VtZW50Q29udGVudHMoV2ViQ29yZTo6
RmxvYXRSZWN0KG1fd2ViUGFnZS0+Z2V0UmVjdXJzaXZlVmlzaWJsZVdpbmRvd1JlY3Qodmlldykp
KTsKICAgICAgICAgZnJhbWVXaW5kb3dSZWN0LmludGVyc2VjdChjbGlwcGluZ1JlY3QpOwogICAg
ICAgICByZXR1cm4gZnJhbWVXaW5kb3dSZWN0OwogICAgIH0KQEAgLTIyNiw3ICsyMzEsNyBAQCBX
ZWJDb3JlOjpJbnRSZWN0IEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpjbGlwVG9SZWN0KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGNsaQogICAgIC8vIFdlIHdhbnQgdGhlIHdpbmRvdyByZWN0IGlu
IHBpeGVsIHZpZXdwb3J0IGNvb3JkaW5hdGVzIGNsaXBwZWQgdG8gdGhlIGNsaXBwaW5nIHJlY3Qu
CiAgICAgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlV2luZG93UmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QoYm94LT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7CiAgICAgdmlzaWJsZVdpbmRv
d1JlY3QgPSBib3gtPmZyYW1lKCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyh2aXNpYmxlV2lu
ZG93UmVjdCk7Ci0gICAgdmlzaWJsZVdpbmRvd1JlY3QgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNm
b3JtZWQodmlzaWJsZVdpbmRvd1JlY3QpOworICAgIHZpc2libGVXaW5kb3dSZWN0ID0gdmlld3Bv
cnRBY2Nlc3Nvci0+cm91bmRUb1BpeGVsRnJvbURvY3VtZW50Q29udGVudHMoV2ViQ29yZTo6Rmxv
YXRSZWN0KHZpc2libGVXaW5kb3dSZWN0KSk7CiAgICAgdmlzaWJsZVdpbmRvd1JlY3QuaW50ZXJz
ZWN0KGNsaXBwaW5nUmVjdCk7CiAgICAgcmV0dXJuIHZpc2libGVXaW5kb3dSZWN0OwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKaW5kZXggZDM4ZmE1ZGIxOThhYjM2
ZGY2N2Y4OGJmYzhmMGQ1NzQ4OTc4MzBhNy4uOTJhY2IwNTdkNDAxMzFmYmQwZDJiODY4MTY0ZTk0
M2U2YzE4YTcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQ
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCkBA
IC0xNzUsNiArMTc1LDcgQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgogI2luY2x1ZGUgPFNo
YXJlZFBvaW50ZXIuaD4KKyNpbmNsdWRlIDxjbWF0aD4KICNpbmNsdWRlIDxzeXMva2V5Y29kZXMu
aD4KICNpbmNsdWRlIDx1bmljb2RlL3VzdHJpbmcuaD4gLy8gcGxhdGZvcm0gSUNVCiAKQEAgLTM4
Nyw3ICszODgsNyBAQCBXZWJQYWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUoV2ViUGFnZSogd2Vi
UGFnZSwgV2ViUGFnZUNsaWVudCogY2xpZW50LCBjb25zdCBJbgogICAgICwgbV90cmFuc2Zvcm1h
dGlvbk1hdHJpeChuZXcgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkKICAgICAsIG1fYmFja2luZ1N0
b3JlKDApIC8vIEluaXRpYWxpemVkIGJ5IGluaXQuCiAgICAgLCBtX2JhY2tpbmdTdG9yZUNsaWVu
dCgwKSAvLyBJbml0aWFsaXplZCBieSBpbml0LgotICAgICwgbV93ZWJraXRUaHJlYWRWaWV3cG9y
dEFjY2Vzc29yKDApIC8vIEluaXRpYWxpemVkIGJ5IGluaXQuCisgICAgLCBtX3dlYmtpdFRocmVh
ZFZpZXdwb3J0QWNjZXNzb3IobmV3IFdlYktpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3IodGhpcykp
CiAgICAgLCBtX2luUGFnZVNlYXJjaE1hbmFnZXIobmV3IEluUGFnZVNlYXJjaE1hbmFnZXIodGhp
cykpCiAgICAgLCBtX2lucHV0SGFuZGxlcihuZXcgSW5wdXRIYW5kbGVyKHRoaXMpKQogICAgICwg
bV9zZWxlY3Rpb25IYW5kbGVyKG5ldyBTZWxlY3Rpb25IYW5kbGVyKHRoaXMpKQpAQCAtNjI3LDgg
KzYyOCw2IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OmluaXQoY29uc3QgQmxhY2tCZXJyeTo6UGxh
dGZvcm06OlN0cmluZyYgcGFnZUdyb3VwTmFtZSkKICAgICAvLyBpcyBvd25lZCBieSBCYWNraW5n
U3RvcmVDbGllbnQgYW5kIHRoZW4gZGVsZXRlZCBieSBpdHMgZGVzdHJ1Y3Rvci4KICAgICBtX2Jh
Y2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3JlQ2xpZW50LT5iYWNraW5nU3RvcmUoKTsKIAotICAg
IG1fd2Via2l0VGhyZWFkVmlld3BvcnRBY2Nlc3NvciA9IG5ldyBXZWJLaXRUaHJlYWRWaWV3cG9y
dEFjY2Vzc29yKHRoaXMpOwotCiAgICAgYmxvY2tDbGlja1JhZGl1cyA9IGludChyb3VuZGYoMC4z
NSAqIFBsYXRmb3JtOjpHcmFwaGljczo6U2NyZWVuOjpwcmltYXJ5U2NyZWVuKCktPnBpeGVsc1Bl
ckluY2goMCkud2lkdGgoKSkpOyAvLyBUaGUgY2xpY2tlZCByZWN0YW5nbGUgYXJlYSBzaG91bGQg
YmUgYSBmaXhlZCB1bml0IG9mIG1lYXN1cmVtZW50LgogCiAgICAgbV9wYWdlLT5zZXR0aW5ncygp
LT5zZXREZWxlZ2F0ZVNlbGVjdGlvblBhaW50KHRydWUpOwpAQCAtMTMzMiwxNiArMTMzMSwyMyBA
QCB2b2lkIFdlYlBhZ2VQcml2YXRlOjpyZXF1ZXN0TGF5b3V0SWZOZWVkZWQoKSBjb25zdAogCiBJ
bnRQb2ludCBXZWJQYWdlUHJpdmF0ZTo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogeworICAgIGlm
ICghbV9iYWNraW5nU3RvcmVDbGllbnQpCisgICAgICAgIHJldHVybiBJbnRQb2ludCgpOworCiAg
ICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlQ2xpZW50LT5zY3JvbGxQb3NpdGlvbigpOwogfQogCiBJ
bnRQb2ludCBXZWJQYWdlUHJpdmF0ZTo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsK
KyAgICBpZiAoIW1fYmFja2luZ1N0b3JlQ2xpZW50KQorICAgICAgICByZXR1cm4gSW50UG9pbnQo
KTsKKwogICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZUNsaWVudC0+bWF4aW11bVNjcm9sbFBvc2l0
aW9uKCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0
IEludFBvaW50JiBwb3MpCiB7CisgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlQ2xpZW50KTsKICAg
ICBtX2JhY2tpbmdTdG9yZUNsaWVudC0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zKTsKIH0KIApAQCAt
MTQ0NiwxMiArMTQ1MiwxMiBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjpzZXRIYXNJblJlZ2lvblNj
cm9sbGFibGVBcmVhcyhib29sIGIpCiAKIEludFNpemUgV2ViUGFnZVByaXZhdGU6OnZpZXdwb3J0
U2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1hcEZyb21UcmFuc2Zvcm1lZCh0cmFuc2Zvcm1l
ZFZpZXdwb3J0U2l6ZSgpKTsKKyAgICByZXR1cm4gbV93ZWJraXRUaHJlYWRWaWV3cG9ydEFjY2Vz
c29yLT5yb3VuZFRvRG9jdW1lbnRGcm9tUGl4ZWxDb250ZW50cyhQbGF0Zm9ybTo6SW50UmVjdChQ
bGF0Zm9ybTo6SW50UG9pbnQ6Onplcm8oKSwgdHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKSkpLnNp
emUoKTsKIH0KIAogSW50U2l6ZSBXZWJQYWdlUHJpdmF0ZTo6YWN0dWFsVmlzaWJsZVNpemUoKSBj
b25zdAogewotICAgIHJldHVybiBtYXBGcm9tVHJhbnNmb3JtZWQodHJhbnNmb3JtZWRBY3R1YWxW
aXNpYmxlU2l6ZSgpKTsKKyAgICByZXR1cm4gbV93ZWJraXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29y
LT5kb2N1bWVudFZpZXdwb3J0U2l6ZSgpOwogfQogCiBib29sIFdlYlBhZ2VQcml2YXRlOjpoYXNW
aXJ0dWFsVmlld3BvcnQoKSBjb25zdApAQCAtMTYxMCwxMSArMTYxNiwxMSBAQCB2b2lkIFdlYlBh
Z2VQcml2YXRlOjpsYXlvdXRGaW5pc2hlZCgpCiAgICAgICAgICAgICAgICAgbm90aWZ5VHJhbnNm
b3JtZWRTY3JvbGxDaGFuZ2VkKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIElm
IHRoZSBjb250ZW50IHNpemUgaXMgdG9vIHNtYWxsLCB6b29tIGl0IHRvIGZpdCB0aGUgdmlld3Bv
cnQuCi0gICAgICAgICAgICBpZiAoKGxvYWRTdGF0ZSgpID09IEZpbmlzaGVkIHx8IGxvYWRTdGF0
ZSgpID09IENvbW1pdHRlZCkKLSAgICAgICAgICAgICAgICAmJiAodHJhbnNmb3JtZWRDb250ZW50
c1NpemUoKS53aWR0aCgpIDwgdHJhbnNmb3JtZWRBY3R1YWxWaXNpYmxlU2l6ZSgpLndpZHRoKCkg
fHwgdHJhbnNmb3JtZWRDb250ZW50c1NpemUoKS5oZWlnaHQoKSA8IHRyYW5zZm9ybWVkQWN0dWFs
VmlzaWJsZVNpemUoKS5oZWlnaHQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHpvb21BYm91dFBv
aW50KGluaXRpYWxTY2FsZSgpLCBuZXdTY3JvbGxQb3NpdGlvbik7CisgICAgICAgICAgICBjb25z
dCBQbGF0Zm9ybTo6SW50U2l6ZSBwaXhlbENvbnRlbnRzU2l6ZSA9IG1fd2Via2l0VGhyZWFkVmll
d3BvcnRBY2Nlc3Nvci0+cGl4ZWxDb250ZW50c1NpemUoKTsKIAorICAgICAgICAgICAgLy8gSWYg
dGhlIGNvbnRlbnQgc2l6ZSBpcyB0b28gc21hbGwsIHpvb20gaXQgdG8gZml0IHRoZSB2aWV3cG9y
dC4KKyAgICAgICAgICAgIGlmICgobG9hZFN0YXRlKCkgPT0gRmluaXNoZWQgfHwgbG9hZFN0YXRl
KCkgPT0gQ29tbWl0dGVkKSAmJiAocGl4ZWxDb250ZW50c1NpemUud2lkdGgoKSA8IG1fYWN0dWFs
VmlzaWJsZVdpZHRoIHx8IHBpeGVsQ29udGVudHNTaXplLmhlaWdodCgpIDwgbV9hY3R1YWxWaXNp
YmxlSGVpZ2h0KSkKKyAgICAgICAgICAgICAgICB6b29tQWJvdXRQb2ludChpbml0aWFsU2NhbGUo
KSwgbmV3U2Nyb2xsUG9zaXRpb24pOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTgyMCwxNDkg
KzE4MjYsNiBAQCBJbnRTaXplIFdlYlBhZ2VQcml2YXRlOjp0cmFuc2Zvcm1lZFZpZXdwb3J0U2l6
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTZXR0aW5nczo6aW5z
dGFuY2UoKS0+YXBwbGljYXRpb25TaXplKCk7CiB9CiAKLUludFJlY3QgV2ViUGFnZVByaXZhdGU6
OnRyYW5zZm9ybWVkVmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Ci17Ci0gICAgLy8gVXN1YWxs
eSB0aGlzIHdvdWxkIGJlIG1hcFRvVHJhbnNmb3JtZWQodmlzaWJsZUNvbnRlbnRzUmVjdCgpKSwg
YnV0Ci0gICAgLy8gdGhhdCByZXN1bHRzIGluIHJvdW5kaW5nIGVycm9ycyBiZWNhdXNlIHdlIGFs
cmVhZHkgc2V0IHRoZSBXZWJDb3JlCi0gICAgLy8gdmlld3BvcnQgc2l6ZSBmcm9tIG91ciBvcmln
aW5hbCB0cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgpLgotICAgIC8vIEluc3RlYWQsIHdlIG9ubHkg
dHJhbnNmb3JtIHRoZSBzY3JvbGwgcG9zaXRpb24gYW5kIHRha2UgdGhlCi0gICAgLy8gdmlld3Bv
cnQgc2l6ZSBhcyBpdCBpcywgd2hpY2ggZW5zdXJlcyB0aGF0IGUuZy4gYmxpdHRpbmcgb3BlcmF0
aW9ucwotICAgIC8vIGFsd2F5cyBjb3ZlciB0aGUgd2hvbGUgd2lkZ2V0L3NjcmVlbi4KLSAgICBy
ZXR1cm4gSW50UmVjdCh0cmFuc2Zvcm1lZFNjcm9sbFBvc2l0aW9uKCksIHRyYW5zZm9ybWVkVmll
d3BvcnRTaXplKCkpOwotfQotCi1JbnRTaXplIFdlYlBhZ2VQcml2YXRlOjp0cmFuc2Zvcm1lZENv
bnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgLy8gbWFwVG9UcmFuc2Zvcm1lZCgpIGZ1bmN0aW9u
cyB1c2UgdGhpcyBtZXRob2QgdG8gY3JvcCB0aGVpciByZXN1bHRzLAotICAgIC8vIHNvIHdlIGNh
bid0IG1ha2UgdXNlIG9mIHRoZW0gaGVyZS4gV2hpbGUgd2Ugd2FudCByb3VuZGluZyBpbnNpZGUg
cGFnZQotICAgIC8vIGJvdW5kYXJpZXMgdG8gZXh0ZW5kIHJlY3RhbmdsZXMgYW5kIHJvdW5kIHBv
aW50cywgd2UgbmVlZCB0byBjcm9wIHRoZQotICAgIC8vIGNvbnRlbnRzIHNpemUgdG8gdGhlIGZs
b29yZWQgdmFsdWVzIHNvIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGRpc3BsYXkKLSAgICAvLyBvciBy
ZXBvcnQgcG9pbnRzIHRoYXQgYXJlIG5vdCBmdWxseSBjb3ZlcmVkIGJ5IHRoZSBhY3R1YWwgZmxv
YXQtcG9pbnQKLSAgICAvLyBjb250ZW50cyByZWN0YW5nbGUuCi0gICAgY29uc3QgSW50U2l6ZSB1
bnRyYW5zZm9ybWVkQ29udGVudHNTaXplID0gY29udGVudHNTaXplKCk7Ci0gICAgY29uc3QgRmxv
YXRQb2ludCB0cmFuc2Zvcm1lZEJvdHRvbVJpZ2h0ID0gbV90cmFuc2Zvcm1hdGlvbk1hdHJpeC0+
bWFwUG9pbnQoCi0gICAgICAgIEZsb2F0UG9pbnQodW50cmFuc2Zvcm1lZENvbnRlbnRzU2l6ZS53
aWR0aCgpLCB1bnRyYW5zZm9ybWVkQ29udGVudHNTaXplLmhlaWdodCgpKSk7Ci0gICAgcmV0dXJu
IEludFNpemUoZmxvb3JmKHRyYW5zZm9ybWVkQm90dG9tUmlnaHQueCgpKSwgZmxvb3JmKHRyYW5z
Zm9ybWVkQm90dG9tUmlnaHQueSgpKSk7Ci19Ci0KLUludFBvaW50IFdlYlBhZ2VQcml2YXRlOjpt
YXBGcm9tQ29udGVudHNUb1ZpZXdwb3J0KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmVDbGllbnQtPm1hcEZyb21Db250ZW50c1RvVmlld3Bv
cnQocG9pbnQpOwotfQotCi1JbnRQb2ludCBXZWJQYWdlUHJpdmF0ZTo6bWFwRnJvbVZpZXdwb3J0
VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
YmFja2luZ1N0b3JlQ2xpZW50LT5tYXBGcm9tVmlld3BvcnRUb0NvbnRlbnRzKHBvaW50KTsKLX0K
LQotSW50UmVjdCBXZWJQYWdlUHJpdmF0ZTo6bWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZUNsaWVu
dC0+bWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChyZWN0KTsKLX0KLQotSW50UmVjdCBXZWJQYWdl
UHJpdmF0ZTo6bWFwRnJvbVZpZXdwb3J0VG9Db250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KSBj
b25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZUNsaWVudC0+bWFwRnJvbVZpZXdwb3J0
VG9Db250ZW50cyhyZWN0KTsKLX0KLQotSW50UG9pbnQgV2ViUGFnZVByaXZhdGU6Om1hcEZyb21U
cmFuc2Zvcm1lZENvbnRlbnRzVG9UcmFuc2Zvcm1lZFZpZXdwb3J0KGNvbnN0IEludFBvaW50JiBw
b2ludCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmVDbGllbnQtPm1hcEZyb21U
cmFuc2Zvcm1lZENvbnRlbnRzVG9UcmFuc2Zvcm1lZFZpZXdwb3J0KHBvaW50KTsKLX0KLQotSW50
UG9pbnQgV2ViUGFnZVByaXZhdGU6Om1hcEZyb21UcmFuc2Zvcm1lZFZpZXdwb3J0VG9UcmFuc2Zv
cm1lZENvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9iYWNraW5nU3RvcmVDbGllbnQtPm1hcEZyb21UcmFuc2Zvcm1lZFZpZXdwb3J0VG9UcmFuc2Zv
cm1lZENvbnRlbnRzKHBvaW50KTsKLX0KLQotSW50UmVjdCBXZWJQYWdlUHJpdmF0ZTo6bWFwRnJv
bVRyYW5zZm9ybWVkQ29udGVudHNUb1RyYW5zZm9ybWVkVmlld3BvcnQoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nU3RvcmVDbGllbnQtPm1hcEZyb21U
cmFuc2Zvcm1lZENvbnRlbnRzVG9UcmFuc2Zvcm1lZFZpZXdwb3J0KHJlY3QpOwotfQotCi1JbnRS
ZWN0IFdlYlBhZ2VQcml2YXRlOjptYXBGcm9tVHJhbnNmb3JtZWRWaWV3cG9ydFRvVHJhbnNmb3Jt
ZWRDb250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewotICAgIHJldHVybiBtX2Jh
Y2tpbmdTdG9yZUNsaWVudC0+bWFwRnJvbVRyYW5zZm9ybWVkVmlld3BvcnRUb1RyYW5zZm9ybWVk
Q29udGVudHMocmVjdCk7Ci19Ci0KLS8vIE5PVEU6IFBJWEVMIFJPVU5ESU5HIQotLy8gQWNjdXJh
dGUgYmFjay1hbmQtZm9ydGggcm91bmRpbmcgaXMgbm90IHBvc3NpYmxlIHdpdGggaW5mb3JtYXRp
b24gbG9zcwotLy8gYnkgaW50ZWdlciBwb2ludHMgYW5kIHNpemVzLCBzbyB3ZSBhbHdheXMgZXhw
YW5kIHRoZSByZXN1bHRpbmcgbWFwcGVkCi0vLyBmbG9hdCByZWN0YW5nbGVzIHRvIHRoZSBuZWFy
ZXN0IGludGVnZXIuIEZvciBwb2ludHMsIHdlIGFsd2F5cyB1c2UKLS8vIGZsb29yLXJvdW5kaW5n
IGluIG1hcFRvVHJhbnNmb3JtZWQoKSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY3JvcCB0bwot
Ly8gdGhlIChmbG9vcidkKSB0cmFuc2Zvcm1lZCBjb250ZW50cyBzaXplLgotc3RhdGljIGlubGlu
ZSBJbnRQb2ludCByb3VuZFRyYW5zZm9ybWVkUG9pbnQoY29uc3QgRmxvYXRQb2ludCAmcG9pbnQp
Ci17Ci0gICAgLy8gTWFwcyBieSByb3VuZGluZyBoYWxmIHRvd2FyZHMgemVyby4KLSAgICByZXR1
cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYocG9pbnQueCgpKSksIHN0YXRpY19j
YXN0PGludD4oZmxvb3JmKHBvaW50LnkoKSkpKTsKLX0KLQotc3RhdGljIGlubGluZSBJbnRQb2lu
dCByb3VuZFVudHJhbnNmb3JtZWRQb2ludChjb25zdCBGbG9hdFBvaW50ICZwb2ludCkKLXsKLSAg
ICAvLyBNYXBzIGJ5IHJvdW5kaW5nIGhhbGYgYXdheSBmcm9tIHplcm8uCi0gICAgcmV0dXJuIElu
dFBvaW50KHN0YXRpY19jYXN0PGludD4oY2VpbGYocG9pbnQueCgpKSksIHN0YXRpY19jYXN0PGlu
dD4oY2VpbGYocG9pbnQueSgpKSkpOwotfQotCi1JbnRQb2ludCBXZWJQYWdlUHJpdmF0ZTo6bWFw
VG9UcmFuc2Zvcm1lZChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHJvdW5kVHJhbnNmb3JtZWRQb2ludChtX3RyYW5zZm9ybWF0aW9uTWF0cml4LT5tYXBQb2ludChG
bG9hdFBvaW50KHBvaW50KSkpOwotfQotCi1GbG9hdFBvaW50IFdlYlBhZ2VQcml2YXRlOjptYXBU
b1RyYW5zZm9ybWVkRmxvYXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV90cmFuc2Zvcm1hdGlvbk1hdHJpeC0+bWFwUG9pbnQocG9pbnQpOwotfQot
Ci1JbnRQb2ludCBXZWJQYWdlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkKGNvbnN0IEludFBv
aW50JiBwb2ludCkgY29uc3QKLXsKLSAgICByZXR1cm4gcm91bmRVbnRyYW5zZm9ybWVkUG9pbnQo
bV90cmFuc2Zvcm1hdGlvbk1hdHJpeC0+aW52ZXJzZSgpLm1hcFBvaW50KEZsb2F0UG9pbnQocG9p
bnQpKSk7Ci19Ci0KLUZsb2F0UG9pbnQgV2ViUGFnZVByaXZhdGU6Om1hcEZyb21UcmFuc2Zvcm1l
ZEZsb2F0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fdHJhbnNmb3JtYXRpb25NYXRyaXgtPmludmVyc2UoKS5tYXBQb2ludChwb2ludCk7Ci19Ci0K
LUZsb2F0UmVjdCBXZWJQYWdlUHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkRmxvYXRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm1hdGlv
bk1hdHJpeC0+aW52ZXJzZSgpLm1hcFJlY3QocmVjdCk7Ci19Ci0KLUludFNpemUgV2ViUGFnZVBy
aXZhdGU6Om1hcFRvVHJhbnNmb3JtZWQoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWFwVG9UcmFuc2Zvcm1lZChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHNpemUp
KS5zaXplKCk7Ci19Ci0KLUludFNpemUgV2ViUGFnZVByaXZhdGU6Om1hcEZyb21UcmFuc2Zvcm1l
ZChjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAotewotICAgIHJldHVybiBtYXBGcm9tVHJhbnNm
b3JtZWQoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBzaXplKSkuc2l6ZSgpOwotfQotCi1JbnRS
ZWN0IFdlYlBhZ2VQcml2YXRlOjptYXBUb1RyYW5zZm9ybWVkKGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV90cmFuc2Zvcm1hdGlvbk1h
dHJpeC0+bWFwUmVjdChGbG9hdFJlY3QocmVjdCkpKTsKLX0KLQotLy8gVXNlIHRoaXMgaW4gY29u
anVuY3Rpb24gd2l0aCBtYXBUb1RyYW5zZm9ybWVkKEludFJlY3QpLCBpbiBtb3N0IGNhc2VzLgot
dm9pZCBXZWJQYWdlUHJpdmF0ZTo6Y2xpcFRvVHJhbnNmb3JtZWRDb250ZW50c1JlY3QoSW50UmVj
dCYgcmVjdCkgY29uc3QKLXsKLSAgICByZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHRyYW5zZm9ybWVkQ29udGVudHNTaXplKCkpKTsKLX0KLQotSW50UmVjdCBXZWJQYWdl
UHJpdmF0ZTo6bWFwRnJvbVRyYW5zZm9ybWVkKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV90cmFuc2Zvcm1hdGlvbk1hdHJpeC0+aW52
ZXJzZSgpLm1hcFJlY3QoRmxvYXRSZWN0KHJlY3QpKSk7Ci19Ci0KLWJvb2wgV2ViUGFnZVByaXZh
dGU6OnRyYW5zZm9ybWVkUG9pbnRFcXVhbHNVbnRyYW5zZm9ybWVkUG9pbnQoY29uc3QgSW50UG9p
bnQmIHRyYW5zZm9ybWVkUG9pbnQsIGNvbnN0IEludFBvaW50JiB1bnRyYW5zZm9ybWVkUG9pbnQp
Ci17Ci0gICAgLy8gU2NhbGluZyBkb3duIGlzIGFsd2F5cyBtb3JlIGFjY3VyYXRlIHRoYW4gc2Nh
bGluZyB1cC4KLSAgICBpZiAobV90cmFuc2Zvcm1hdGlvbk1hdHJpeC0+YSgpID4gMS4wKQotICAg
ICAgICByZXR1cm4gdHJhbnNmb3JtZWRQb2ludCA9PSBtYXBUb1RyYW5zZm9ybWVkKHVudHJhbnNm
b3JtZWRQb2ludCk7Ci0KLSAgICByZXR1cm4gbWFwRnJvbVRyYW5zZm9ybWVkKHRyYW5zZm9ybWVk
UG9pbnQpID09IHVudHJhbnNmb3JtZWRQb2ludDsKLX0KLQogdm9pZCBXZWJQYWdlUHJpdmF0ZTo6
bm90aWZ5VHJhbnNmb3JtQ2hhbmdlZCgpCiB7CiAgICAgbm90aWZ5VHJhbnNmb3JtZWRDb250ZW50
c1NpemVDaGFuZ2VkKCk7CkBAIC0xOTc2LDcgKzE4MzksNyBAQCB2b2lkIFdlYlBhZ2VQcml2YXRl
Ojpub3RpZnlUcmFuc2Zvcm1lZENvbnRlbnRzU2l6ZUNoYW5nZWQoKQogICAgIC8vIFdlIG1hcmsg
aGVyZSBhcyB0aGUgbGFzdCByZXBvcnRlZCBjb250ZW50IHNpemUgd2Ugc2VudCB0byB0aGUgY2xp
ZW50LgogICAgIG1fcHJldmlvdXNDb250ZW50c1NpemUgPSBjb250ZW50c1NpemUoKTsKIAotICAg
IGNvbnN0IEludFNpemUgc2l6ZSA9IHRyYW5zZm9ybWVkQ29udGVudHNTaXplKCk7CisgICAgY29u
c3QgSW50U2l6ZSBzaXplID0gbV93ZWJraXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29yLT5waXhlbENv
bnRlbnRzU2l6ZSgpOwogICAgIG1fYmFja2luZ1N0b3JlLT5kLT5jb250ZW50c1NpemVDaGFuZ2Vk
KHNpemUpOwogICAgIG1fY2xpZW50LT5jb250ZW50c1NpemVDaGFuZ2VkKCk7CiB9CkBAIC0yNDE3
LDEwICsyMjgwLDE1IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OnVwZGF0ZUN1cnNvcigpCiAgICAg
ICAgIG1fbGFzdE1vdXNlRXZlbnQuY3RybEtleSgpID8gMCA6IEtFWU1PRF9DVFJMIHwKICAgICAg
ICAgbV9sYXN0TW91c2VFdmVudC5hbHRLZXkoKSA/IDAgOiBLRVlNT0RfQUxUOwogCi0gICAgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06Ok1vdXNlRXZlbnQgZXZlbnQoYnV0dG9uTWFzaywgYnV0dG9uTWFz
aywgbWFwVG9UcmFuc2Zvcm1lZChtX2xhc3RNb3VzZUV2ZW50LnBvc2l0aW9uKCkpLCBtYXBUb1Ry
YW5zZm9ybWVkKG1fbGFzdE1vdXNlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSksIDAsIG1vZGlmaWVy
cywgIDApOworICAgIGNvbnN0IFBsYXRmb3JtOjpWaWV3cG9ydEFjY2Vzc29yKiB2aWV3cG9ydEFj
Y2Vzc29yID0gbV93ZWJraXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29yOworCisgICAgQmxhY2tCZXJy
eTo6UGxhdGZvcm06Ok1vdXNlRXZlbnQgZXZlbnQoYnV0dG9uTWFzaywgYnV0dG9uTWFzaywKKyAg
ICAgICAgdmlld3BvcnRBY2Nlc3Nvci0+cm91bmRUb1BpeGVsRnJvbURvY3VtZW50Q29udGVudHMo
V2ViQ29yZTo6RmxvYXRQb2ludChtX2xhc3RNb3VzZUV2ZW50LnBvc2l0aW9uKCkpKSwKKyAgICAg
ICAgdmlld3BvcnRBY2Nlc3Nvci0+cm91bmRUb1BpeGVsRnJvbURvY3VtZW50Q29udGVudHMoV2Vi
Q29yZTo6RmxvYXRQb2ludChtX2xhc3RNb3VzZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCkpKSwKKyAg
ICAgICAgMCwgbW9kaWZpZXJzLCAwKTsKIAogICAgIC8vIFdlIGhhdmUgYWRkZWQgZG9jdW1lbnQg
dmlld3BvcnQgcG9zaXRpb24gYW5kIGRvY3VtZW50IGNvbnRlbnQgcG9zaXRpb24gYXMgbWVtYmVy
cyBvZiB0aGUgbW91c2UgZXZlbnQuIFdoZW4gd2UgY3JlYXRlIHRoZSBldmVudCwgd2Ugc2hvdWxk
IGluaXRpYWxpemUgdGhlbSBhcyB3ZWxsLgotICAgIGV2ZW50LnBvcHVsYXRlRG9jdW1lbnRQb3Np
dGlvbihtX2xhc3RNb3VzZUV2ZW50LnBvc2l0aW9uKCksIG1hcEZyb21WaWV3cG9ydFRvQ29udGVu
dHMobV9sYXN0TW91c2VFdmVudC5wb3NpdGlvbigpKSk7CisgICAgZXZlbnQucG9wdWxhdGVEb2N1
bWVudFBvc2l0aW9uKG1fbGFzdE1vdXNlRXZlbnQucG9zaXRpb24oKSwgdmlld3BvcnRBY2Nlc3Nv
ci0+ZG9jdW1lbnRDb250ZW50c0Zyb21WaWV3cG9ydChtX2xhc3RNb3VzZUV2ZW50LnBvc2l0aW9u
KCkpKTsKIAogICAgIG1fd2ViUGFnZS0+bW91c2VFdmVudChldmVudCk7CiB9CkBAIC0yNjYyLDEw
ICsyNTMwLDEyIEBAIFBsYXRmb3JtOjpJbnRSZWN0IFdlYlBhZ2VQcml2YXRlOjpmb2N1c05vZGVS
ZWN0KCkKICAgICBpZiAoIWRvYyB8fCAhdmlldyB8fCB2aWV3LT5uZWVkc0xheW91dCgpKQogICAg
ICAgICByZXR1cm4gUGxhdGZvcm06OkludFJlY3QoKTsKIAorICAgIGNvbnN0IFBsYXRmb3JtOjpW
aWV3cG9ydEFjY2Vzc29yKiB2aWV3cG9ydEFjY2Vzc29yID0gbV93ZWJraXRUaHJlYWRWaWV3cG9y
dEFjY2Vzc29yOworCiAgICAgSW50UmVjdCBmb2N1c1JlY3QgPSByZWN0Rm9yTm9kZShkb2MtPmZv
Y3VzZWROb2RlKCkpOwogICAgIGZvY3VzUmVjdCA9IGFkanVzdFJlY3RPZmZzZXRGb3JGcmFtZU9m
ZnNldChmb2N1c1JlY3QsIGRvYy0+Zm9jdXNlZE5vZGUoKSk7Ci0gICAgZm9jdXNSZWN0ID0gbWFw
VG9UcmFuc2Zvcm1lZChmb2N1c1JlY3QpOwotICAgIGNsaXBUb1RyYW5zZm9ybWVkQ29udGVudHNS
ZWN0KGZvY3VzUmVjdCk7CisgICAgZm9jdXNSZWN0ID0gdmlld3BvcnRBY2Nlc3Nvci0+cm91bmRU
b1BpeGVsRnJvbURvY3VtZW50Q29udGVudHMoV2ViQ29yZTo6RmxvYXRSZWN0KGZvY3VzUmVjdCkp
OworICAgIGZvY3VzUmVjdC5pbnRlcnNlY3Qodmlld3BvcnRBY2Nlc3Nvci0+cGl4ZWxDb250ZW50
c1JlY3QoKSk7CiAgICAgcmV0dXJuIGZvY3VzUmVjdDsKIH0KIApAQCAtMjcwMiw3ICsyNTcyLDcg
QEAgUGFzc1JlZlB0cjxOb2RlPiBXZWJQYWdlUHJpdmF0ZTo6Y29udGV4dE5vZGUoVGFyZ2V0RGV0
ZWN0aW9uU3RyYXRlZ3kgc3RyYXRlZ3kpCiAgICAgaWYgKGlzVG91Y2hpbmcpCiAgICAgICAgIGNv
bnRlbnRQb3MgPSBsYXN0RmF0RmluZ2Vyc1Jlc3VsdC5hZGp1c3RlZFBvc2l0aW9uKCk7CiAgICAg
ZWxzZQotICAgICAgICBjb250ZW50UG9zID0gbWFwRnJvbVZpZXdwb3J0VG9Db250ZW50cyhtX2xh
c3RNb3VzZUV2ZW50LnBvc2l0aW9uKCkpOworICAgICAgICBjb250ZW50UG9zID0gbV93ZWJraXRU
aHJlYWRWaWV3cG9ydEFjY2Vzc29yLT5kb2N1bWVudENvbnRlbnRzRnJvbVZpZXdwb3J0KG1fbGFz
dE1vdXNlRXZlbnQucG9zaXRpb24oKSk7CiAKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGV2
ZW50SGFuZGxlci0+aGl0VGVzdFJlc3VsdEF0UG9pbnQoY29udGVudFBvcyk7CiAgICAgcmV0dXJu
IHJlc3VsdC5pbm5lck5vZGUoKTsKQEAgLTI5NzQsOSArMjg0NCwxMSBAQCBJbnRSZWN0IFdlYlBh
Z2VQcml2YXRlOjpibG9ja1pvb21SZWN0Rm9yTm9kZShOb2RlKiBub2RlKQogICAgICAgICB9CiAg
ICAgfQogCisgICAgY29uc3QgUGxhdGZvcm06OlZpZXdwb3J0QWNjZXNzb3IqIHZpZXdwb3J0QWNj
ZXNzb3IgPSBtX3dlYmtpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3I7CisKICAgICBibG9ja1JlY3Qg
PSBhZGp1c3RSZWN0T2Zmc2V0Rm9yRnJhbWVPZmZzZXQoYmxvY2tSZWN0LCBub2RlKTsKLSAgICBi
bG9ja1JlY3QgPSBtYXBUb1RyYW5zZm9ybWVkKGJsb2NrUmVjdCk7Ci0gICAgY2xpcFRvVHJhbnNm
b3JtZWRDb250ZW50c1JlY3QoYmxvY2tSZWN0KTsKKyAgICBibG9ja1JlY3QgPSB2aWV3cG9ydEFj
Y2Vzc29yLT5yb3VuZFRvUGl4ZWxGcm9tRG9jdW1lbnRDb250ZW50cyhXZWJDb3JlOjpGbG9hdFJl
Y3QoYmxvY2tSZWN0KSk7CisgICAgYmxvY2tSZWN0LmludGVyc2VjdCh2aWV3cG9ydEFjY2Vzc29y
LT5waXhlbENvbnRlbnRzUmVjdCgpKTsKIAogICAgIHJldHVybiBibG9ja1JlY3Q7CiB9CkBAIC0y
OTg4LDcgKzI4NjAsOSBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjp6b29tQW5pbWF0aW9uRmluaXNo
ZWQoZG91YmxlIGZpbmFsQW5pbWF0aW9uU2NhbGUsIGNvbnN0IFdlYgogICAgIGlmICghbV9tYWlu
RnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFBvaW50IGFuY2hvcihyb3VuZFVudHJh
bnNmb3JtZWRQb2ludChmaW5hbEFuaW1hdGlvbkRvY3VtZW50U2Nyb2xsUG9zaXRpb24pKTsKKyAg
ICBjb25zdCBQbGF0Zm9ybTo6Vmlld3BvcnRBY2Nlc3Nvciogdmlld3BvcnRBY2Nlc3NvciA9IG1f
d2Via2l0VGhyZWFkVmlld3BvcnRBY2Nlc3NvcjsKKworICAgIEludFBvaW50IGFuY2hvcih2aWV3
cG9ydEFjY2Vzc29yLT5yb3VuZGVkRG9jdW1lbnRDb250ZW50cyhmaW5hbEFuaW1hdGlvbkRvY3Vt
ZW50U2Nyb2xsUG9zaXRpb24pKTsKICAgICBib29sIHdpbGxVc2VUZXh0UmVmbG93ID0gZmFsc2U7
CiAKICNpZiBFTkFCTEUoVklFV1BPUlRfUkVGTE9XKQpAQCAtMzAxNSw5ICsyODg5LDE0IEBAIHZv
aWQgV2ViUGFnZVByaXZhdGU6Onpvb21BbmltYXRpb25GaW5pc2hlZChkb3VibGUgZmluYWxBbmlt
YXRpb25TY2FsZSwgY29uc3QgV2ViCiAjaWYgRU5BQkxFKFZJRVdQT1JUX1JFRkxPVykKICAgICBy
ZXF1ZXN0TGF5b3V0SWZOZWVkZWQoKTsKICAgICBpZiAod2lsbFVzZVRleHRSZWZsb3cgJiYgbV9z
aG91bGRSZWZsb3dCbG9jaykgeworICAgICAgICBQbGF0Zm9ybTo6SW50UG9pbnQgcm91bmRlZFJl
Zmxvd09mZnNldCgKKyAgICAgICAgICAgIHN0ZDo6Zmxvb3JmKG1fZmluYWxBbmltYXRpb25Eb2N1
bWVudFNjcm9sbFBvc2l0aW9uUmVmbG93T2Zmc2V0LngoKSksCisgICAgICAgICAgICBzdGQ6OmZs
b29yZihtX2ZpbmFsQW5pbWF0aW9uRG9jdW1lbnRTY3JvbGxQb3NpdGlvblJlZmxvd09mZnNldC55
KCkpKTsKKwogICAgICAgICBJbnRSZWN0IHJlZmxvd2VkUmVjdCA9IHJlY3RGb3JOb2RlKG1fY3Vy
cmVudEJsb2NrWm9vbUFkanVzdGVkTm9kZS5nZXQoKSk7CiAgICAgICAgIHJlZmxvd2VkUmVjdCA9
IGFkanVzdFJlY3RPZmZzZXRGb3JGcmFtZU9mZnNldChyZWZsb3dlZFJlY3QsIG1fY3VycmVudEJs
b2NrWm9vbUFkanVzdGVkTm9kZS5nZXQoKSk7Ci0gICAgICAgIHJlZmxvd2VkUmVjdC5tb3ZlKHJv
dW5kVHJhbnNmb3JtZWRQb2ludChtX2ZpbmFsQW5pbWF0aW9uRG9jdW1lbnRTY3JvbGxQb3NpdGlv
blJlZmxvd09mZnNldCkueCgpLCByb3VuZFRyYW5zZm9ybWVkUG9pbnQobV9maW5hbEFuaW1hdGlv
bkRvY3VtZW50U2Nyb2xsUG9zaXRpb25SZWZsb3dPZmZzZXQpLnkoKSk7CisgICAgICAgIHJlZmxv
d2VkUmVjdC5tb3ZlKHJvdW5kZWRSZWZsb3dPZmZzZXQueCgpLCByb3VuZGVkUmVmbG93T2Zmc2V0
LnkoKSk7CisKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fY3VycmVudEJsb2Nr
Wm9vbUFkanVzdGVkTm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgSW50UG9pbnQgdG9wTGVmdFBv
aW50KHJlZmxvd2VkUmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJl
bmRlcmVyLT5pc1RleHQoKSkgewpAQCAtNDAxNSw3ICszODk0LDggQEAgYm9vbCBXZWJQYWdlUHJp
dmF0ZTo6aGFuZGxlTW91c2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiAg
ICAgfQogCiAgICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0g
ZXZlbnRIYW5kbGVyLT5oaXRUZXN0UmVzdWx0QXRQb2ludChtYXBGcm9tVmlld3BvcnRUb0NvbnRl
bnRzKG1vdXNlRXZlbnQucG9zaXRpb24oKSkpOworICAgICAgICBJbnRQb2ludCBkb2N1bWVudENv
bnRlbnRzUG9pbnQgPSBtX3dlYmtpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3ItPmRvY3VtZW50Q29u
dGVudHNGcm9tVmlld3BvcnQobW91c2VFdmVudC5wb3NpdGlvbigpKTsKKyAgICAgICAgSGl0VGVz
dFJlc3VsdCByZXN1bHQgPSBldmVudEhhbmRsZXItPmhpdFRlc3RSZXN1bHRBdFBvaW50KGRvY3Vt
ZW50Q29udGVudHNQb2ludCk7CiAgICAgICAgIG5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAg
ICAgfQogCkBAIC00NTczLDEwICs0NDUzLDEzIEBAIGJvb2wgV2ViUGFnZTo6YmxvY2tab29tKGNv
bnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgZG9jdW1lbnRUYXJnZXRQb2ludCkKICAgICBjb25zdCBk
b3VibGUgbWFyZ2luID0gZW5kT2ZCbG9ja1pvb21Nb2RlID8gMCA6IGJsb2NrWm9vbU1hcmdpbiAq
IDIgKiBvbGRTY2FsZTsKICAgICBib29sIGlzRmlyc3Rab29tID0gZmFsc2U7CiAKKyAgICBjb25z
dCBQbGF0Zm9ybTo6Vmlld3BvcnRBY2Nlc3Nvciogdmlld3BvcnRBY2Nlc3NvciA9IHdlYmtpdFRo
cmVhZFZpZXdwb3J0QWNjZXNzb3IoKTsKKwogICAgIGlmIChlbmRPZkJsb2NrWm9vbU1vZGUpIHsK
ICAgICAgICAgLy8gRW5kIG9mIGJsb2NrIHpvb20gbW9kZQotICAgICAgICBJbnRSZWN0IHJlY3Qg
PSBkLT5ibG9ja1pvb21SZWN0Rm9yTm9kZShub2RlKTsKLSAgICAgICAgYmxvY2tSZWN0ID0gSW50
UmVjdCgwLCByZWN0LnkoKSwgZC0+dHJhbnNmb3JtZWRDb250ZW50c1NpemUoKS53aWR0aCgpLCBk
LT50cmFuc2Zvcm1lZENvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gcmVjdC55KCkpOworICAgICAg
ICBjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSBwaXhlbENvbnRlbnRzU2l6ZSA9IHZpZXdwb3J0QWNj
ZXNzb3ItPnBpeGVsQ29udGVudHNTaXplKCk7CisgICAgICAgIGNvbnN0IEludFJlY3QgcmVjdCA9
IGQtPmJsb2NrWm9vbVJlY3RGb3JOb2RlKG5vZGUpOworICAgICAgICBibG9ja1JlY3QgPSBJbnRS
ZWN0KDAsIHJlY3QueSgpLCBwaXhlbENvbnRlbnRzU2l6ZS53aWR0aCgpLCBwaXhlbENvbnRlbnRz
U2l6ZS5oZWlnaHQoKSAtIHJlY3QueSgpKTsKICAgICAgICAgZC0+bV9zaG91bGRSZWZsb3dCbG9j
ayA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFN0YXJ0L2NvbnRpbnVlIGJsb2Nr
IHpvb20gbW9kZQpAQCAtNDU4Niw3ICs0NDY5LDcgQEAgYm9vbCBXZWJQYWdlOjpibG9ja1pvb20o
Y29uc3QgUGxhdGZvcm06OkludFBvaW50JiBkb2N1bWVudFRhcmdldFBvaW50KQogICAgICAgICAv
LyBEb24ndCB1c2UgYSBibG9jayBpZiBpdCBpcyB0b28gY2xvc2UgdG8gdGhlIHNpemUgb2YgdGhl
IGFjdHVhbCBjb250ZW50cy4KICAgICAgICAgLy8gV2UgYWxsb3cgdGhpcyBmb3IgaW1hZ2VzIG9u
bHkgc28gdGhhdCB0aGV5IGNhbiBiZSB6b29tZWQgdGlnaHQgdG8gdGhlIHNjcmVlbi4KICAgICAg
ICAgaWYgKCFub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSkgewotICAgICAgICAg
ICAgSW50UmVjdCB0UmVjdCA9IGQtPm1hcEZyb21UcmFuc2Zvcm1lZChibG9ja1JlY3QpOworICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCB0UmVjdCA9IHZpZXdwb3J0QWNjZXNzb3ItPnJvdW5kVG9E
b2N1bWVudEZyb21QaXhlbENvbnRlbnRzKFdlYkNvcmU6OkZsb2F0UmVjdChibG9ja1JlY3QpKTsK
ICAgICAgICAgICAgIGludCBibG9ja0FyZWEgPSB0UmVjdC53aWR0aCgpICogdFJlY3QuaGVpZ2h0
KCk7CiAgICAgICAgICAgICBpbnQgcGFnZUFyZWEgPSBkLT5jb250ZW50c1NpemUoKS53aWR0aCgp
ICogZC0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCk7CiAgICAgICAgICAgICBkb3VibGUgYmxvY2tU
b1BhZ2VSYXRpbyA9IHN0YXRpY19jYXN0PGRvdWJsZT4ocGFnZUFyZWEgLSBibG9ja0FyZWEpIC8g
cGFnZUFyZWE7CkBAIC00NjI5LDE2ICs0NTEyLDE2IEBAIGJvb2wgV2ViUGFnZTo6YmxvY2tab29t
KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgZG9jdW1lbnRUYXJnZXRQb2ludCkKICNlbmRpZgog
CiAgICAgLy8gQWxpZ24gdGhlIHpvb21lZCBibG9jayBpbiB0aGUgc2NyZWVuLgotICAgIGRvdWJs
ZSBuZXdCbG9ja0hlaWdodCA9IGQtPm1hcEZyb21UcmFuc2Zvcm1lZChibG9ja1JlY3QpLmhlaWdo
dCgpOwotICAgIGRvdWJsZSBuZXdCbG9ja1dpZHRoID0gZC0+bWFwRnJvbVRyYW5zZm9ybWVkKGJs
b2NrUmVjdCkud2lkdGgoKTsKLSAgICBkb3VibGUgc2NhbGVkVmlld3BvcnRXaWR0aCA9IHN0YXRp
Y19jYXN0PGRvdWJsZT4oZC0+YWN0dWFsVmlzaWJsZVNpemUoKS53aWR0aCgpKSAqIG9sZFNjYWxl
IC8gbmV3U2NhbGU7Ci0gICAgZG91YmxlIHNjYWxlZFZpZXdwb3J0SGVpZ2h0ID0gc3RhdGljX2Nh
c3Q8ZG91YmxlPihkLT5hY3R1YWxWaXNpYmxlU2l6ZSgpLmhlaWdodCgpKSAqIG9sZFNjYWxlIC8g
bmV3U2NhbGU7Ci0gICAgZG91YmxlIGR4ID0gc3RkOjptYXgoMC4wLCAoc2NhbGVkVmlld3BvcnRX
aWR0aCAtIG5ld0Jsb2NrV2lkdGgpIC8gMi4wKTsKLSAgICBkb3VibGUgZHkgPSBzdGQ6Om1heCgw
LjAsIChzY2FsZWRWaWV3cG9ydEhlaWdodCAtIG5ld0Jsb2NrSGVpZ2h0KSAvIDIuMCk7Ci0KLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZC0+bV9jdXJyZW50QmxvY2tab29tQWRqdXN0ZWRO
b2RlLT5yZW5kZXJlcigpOworICAgIGNvbnN0IFBsYXRmb3JtOjpGbG9hdFJlY3QgbmV3QmxvY2tS
ZWN0ID0gdmlld3BvcnRBY2Nlc3Nvci0+ZG9jdW1lbnRGcm9tUGl4ZWxDb250ZW50cyhXZWJDb3Jl
OjpGbG9hdFJlY3QoYmxvY2tSZWN0KSk7CisgICAgZmxvYXQgc2NhbGVkVmlld3BvcnRXaWR0aCA9
IHN0YXRpY19jYXN0PGRvdWJsZT4oZC0+YWN0dWFsVmlzaWJsZVNpemUoKS53aWR0aCgpKSAqIG9s
ZFNjYWxlIC8gbmV3U2NhbGU7CisgICAgZmxvYXQgc2NhbGVkVmlld3BvcnRIZWlnaHQgPSBzdGF0
aWNfY2FzdDxkb3VibGU+KGQtPmFjdHVhbFZpc2libGVTaXplKCkuaGVpZ2h0KCkpICogb2xkU2Nh
bGUgLyBuZXdTY2FsZTsKKyAgICBmbG9hdCBkeCA9IHN0ZDo6bWF4KDAuMGYsIChzY2FsZWRWaWV3
cG9ydFdpZHRoIC0gbmV3QmxvY2tSZWN0LndpZHRoKCkpIC8gMi4wZik7CisgICAgZmxvYXQgZHkg
PSBzdGQ6Om1heCgwLjBmLCAoc2NhbGVkVmlld3BvcnRIZWlnaHQgLSBuZXdCbG9ja1JlY3QuaGVp
Z2h0KCkpIC8gMi4wZik7CisKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZC0+
bV9jdXJyZW50QmxvY2tab29tQWRqdXN0ZWROb2RlLT5yZW5kZXJlcigpOworICAgIGNvbnN0IEZs
b2F0UG9pbnQgdG9wTGVmdFBvaW50ID0gbmV3QmxvY2tSZWN0LmxvY2F0aW9uKCk7CiAgICAgRmxv
YXRQb2ludCBhbmNob3I7Ci0gICAgRmxvYXRQb2ludCB0b3BMZWZ0UG9pbnQoZC0+bWFwRnJvbVRy
YW5zZm9ybWVkKGJsb2NrUmVjdCkubG9jYXRpb24oKSk7CisKICAgICBpZiAocmVuZGVyZXIgJiYg
cmVuZGVyZXItPmlzVGV4dCgpKSB7CiAgICAgICAgIEVUZXh0QWxpZ24gdGV4dEFsaWduID0gcmVu
ZGVyZXItPnN0eWxlKCktPnRleHRBbGlnbigpOwogICAgICAgICBzd2l0Y2ggKHRleHRBbGlnbikg
ewpAQCAtNDY2OCw3ICs0NTUxLDcgQEAgYm9vbCBXZWJQYWdlOjpibG9ja1pvb20oY29uc3QgUGxh
dGZvcm06OkludFBvaW50JiBkb2N1bWVudFRhcmdldFBvaW50KQogCiAgICAgV2ViQ29yZTo6Rmxv
YXRQb2ludCBmaW5hbEFuaW1hdGlvbkRvY3VtZW50U2Nyb2xsUG9zaXRpb247CiAKLSAgICBpZiAo
bmV3QmxvY2tIZWlnaHQgPD0gc2NhbGVkVmlld3BvcnRIZWlnaHQpIHsKKyAgICBpZiAobmV3Qmxv
Y2tSZWN0LmhlaWdodCgpIDw9IHNjYWxlZFZpZXdwb3J0SGVpZ2h0KSB7CiAgICAgICAgIC8vIFRo
ZSBibG9jayBmaXRzIGluIHRoZSB2aWV3cG9ydCBzbyBjZW50ZXIgaXQuCiAgICAgICAgIGZpbmFs
QW5pbWF0aW9uRG9jdW1lbnRTY3JvbGxQb3NpdGlvbiA9IEZsb2F0UG9pbnQoYW5jaG9yLngoKSAt
IGR4LCBhbmNob3IueSgpIC0gZHkpOwogICAgIH0gZWxzZSB7CkBAIC00NzEzLDggKzQ1OTYsMTAg
QEAgYm9vbCBXZWJQYWdlOjpibG9ja1pvb20oY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBkb2N1
bWVudFRhcmdldFBvaW50KQogICAgIC8vIG9sZFNjYWxlIHdpdGggb25seSBhIG1hcmdpbmFsIGNo
YW5nZSBpbiBzY3JvbGwgcG9zaXRpb24uIElnbm9yZSBzY3JvbGwgZGlmZmVyZW5jZSBpbiB0aGUg
c3BlY2lhbCBjYXNlCiAgICAgLy8gdGhhdCB0aGUgem9vbSBsZXZlbCBpcyB0aGUgbWluaW11bVNj
YWxlLgogICAgIGlmICghZW5kT2ZCbG9ja1pvb21Nb2RlICYmIGFicyhuZXdTY2FsZSAtIG9sZFNj
YWxlKSAvIG9sZFNjYWxlIDwgbWluaW11bUV4cGFuZGluZ1JhdGlvKSB7Ci0gICAgICAgIGNvbnN0
IGRvdWJsZSBtaW5pbXVtRGlzcGxhY2VtZW50ID0gbWluaW11bUV4cGFuZGluZ1JhdGlvICogd2Vi
a2l0VGhyZWFkVmlld3BvcnRBY2Nlc3NvcigpLT5kb2N1bWVudFZpZXdwb3J0U2l6ZSgpLndpZHRo
KCk7Ci0gICAgICAgIGlmIChvbGRTY2FsZSA9PSBkLT5taW5pbXVtU2NhbGUoKSB8fCAoZGlzdGFu
Y2VCZXR3ZWVuUG9pbnRzKGQtPnNjcm9sbFBvc2l0aW9uKCksIHJvdW5kVW50cmFuc2Zvcm1lZFBv
aW50KGZpbmFsQW5pbWF0aW9uRG9jdW1lbnRTY3JvbGxQb3NpdGlvbikpIDwgbWluaW11bURpc3Bs
YWNlbWVudCAmJiBhYnMobmV3U2NhbGUgLSBvbGRTY2FsZSkgLyBvbGRTY2FsZSA8IDAuMTApKSB7
CisgICAgICAgIGNvbnN0IGRvdWJsZSBtaW5pbXVtRGlzcGxhY2VtZW50ID0gbWluaW11bUV4cGFu
ZGluZ1JhdGlvICogdmlld3BvcnRBY2Nlc3Nvci0+ZG9jdW1lbnRWaWV3cG9ydFNpemUoKS53aWR0
aCgpOworICAgICAgICBjb25zdCBpbnQgc2Nyb2xsUG9zaXRpb25EaXNwbGFjZW1lbnQgPSBkaXN0
YW5jZUJldHdlZW5Qb2ludHModmlld3BvcnRBY2Nlc3Nvci0+ZG9jdW1lbnRTY3JvbGxQb3NpdGlv
bigpLCB2aWV3cG9ydEFjY2Vzc29yLT5yb3VuZGVkRG9jdW1lbnRDb250ZW50cyhmaW5hbEFuaW1h
dGlvbkRvY3VtZW50U2Nyb2xsUG9zaXRpb24pKTsKKworICAgICAgICBpZiAob2xkU2NhbGUgPT0g
ZC0+bWluaW11bVNjYWxlKCkgfHwgKHNjcm9sbFBvc2l0aW9uRGlzcGxhY2VtZW50IDwgbWluaW11
bURpc3BsYWNlbWVudCAmJiBhYnMobmV3U2NhbGUgLSBvbGRTY2FsZSkgLyBvbGRTY2FsZSA8IDAu
MTApKSB7CiAgICAgICAgICAgICBpZiAoaXNGaXJzdFpvb20pIHsKICAgICAgICAgICAgICAgICBk
LT5yZXNldEJsb2NrWm9vbSgpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmggYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oCmluZGV4IDUwMjVmNWFlNzAwNDkxNmZm
OWJmZWFjMjg5NzUyODMwNzc2YWU0YzcuLjViMTk2ZmU2MzFkMDkzODhmMDA2ZjUyMTQ4MmM3MTlm
NjliMGJmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFn
ZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlX3AuaApAQCAt
MjY0LDMzICsyNjQsNiBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgdHJhbnNmb3Jt
ZWRNYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRTaXplIHRy
YW5zZm9ybWVkQWN0dWFsVmlzaWJsZVNpemUoKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRTaXpl
IHRyYW5zZm9ybWVkVmlld3BvcnRTaXplKCkgY29uc3Q7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCB0
cmFuc2Zvcm1lZFZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRT
aXplIHRyYW5zZm9ybWVkQ29udGVudHNTaXplKCkgY29uc3Q7Ci0KLSAgICAvLyBHZW5lcmljIGNv
bnZlcnNpb25zIG9mIHBvaW50cywgcmVjdHMsIHJlbGF0aXZlIHRvIGFuZCBmcm9tIGNvbnRlbnRz
IGFuZCB2aWV3cG9ydC4KLSAgICBXZWJDb3JlOjpJbnRQb2ludCBtYXBGcm9tQ29udGVudHNUb1Zp
ZXdwb3J0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgV2ViQ29yZTo6SW50
UG9pbnQgbWFwRnJvbVZpZXdwb3J0VG9Db250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
IGNvbnN0OwotICAgIFdlYkNvcmU6OkludFJlY3QgbWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgY29uc3Q7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtYXBG
cm9tVmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKLQot
ICAgIC8vIEdlbmVyaWMgY29udmVyc2lvbnMgb2YgcG9pbnRzLCByZWN0cywgcmVsYXRpdmUgdG8g
YW5kIGZyb20gdHJhbnNmb3JtZWQgY29udGVudHMgYW5kIHRyYW5zZm9ybWVkIHZpZXdwb3J0Lgot
ICAgIFdlYkNvcmU6OkludFBvaW50IG1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnRzVG9UcmFuc2Zv
cm1lZFZpZXdwb3J0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7Ci0gICAgV2ViQ29y
ZTo6SW50UG9pbnQgbWFwRnJvbVRyYW5zZm9ybWVkVmlld3BvcnRUb1RyYW5zZm9ybWVkQ29udGVu
dHMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0
IG1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnRzVG9UcmFuc2Zvcm1lZFZpZXdwb3J0KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcEZyb21UcmFu
c2Zvcm1lZFZpZXdwb3J0VG9UcmFuc2Zvcm1lZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSBjb25zdDsKLQotICAgIC8vIEdlbmVyaWMgY29udmVyc2lvbnMgb2YgcG9pbnRzLCByZWN0
cywgYW5kIHNpemVzIHRvIGFuZCBmcm9tIHRyYW5zZm9ybWVkIGNvb3JkaW5hdGVzLgotICAgIFdl
YkNvcmU6OkludFBvaW50IG1hcFRvVHJhbnNmb3JtZWQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KSBjb25zdDsKLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1hcFRvVHJhbnNmb3JtZWRGbG9hdFBv
aW50KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRQ
b2ludCBtYXBGcm9tVHJhbnNmb3JtZWQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsK
LSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1hcEZyb21UcmFuc2Zvcm1lZEZsb2F0UG9pbnQoY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIGNvbnN0OwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBt
YXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgY29u
c3Q7Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBtYXBUb1RyYW5zZm9ybWVkKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRTaXplIG1hcEZyb21UcmFuc2Zvcm1l
ZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgY29uc3Q7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBt
YXBUb1RyYW5zZm9ybWVkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKLSAgICB2b2lk
IGNsaXBUb1RyYW5zZm9ybWVkQ29udGVudHNSZWN0KFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsK
LSAgICBXZWJDb3JlOjpJbnRSZWN0IG1hcEZyb21UcmFuc2Zvcm1lZChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgY29uc3Q7Ci0gICAgYm9vbCB0cmFuc2Zvcm1lZFBvaW50RXF1YWxzVW50cmFuc2Zv
cm1lZFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB0cmFuc2Zvcm1lZFBvaW50LCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgdW50cmFuc2Zvcm1lZFBvaW50KTsKIAogICAgIC8vIE5vdGlm
aWNhdGlvbiBtZXRob2RzIHRoYXQgZGVsaXZlciBjaGFuZ2VzIHRvIHRoZSByZWFsIGdlb21ldHJ5
IG9mIHRoZSBkZXZpY2UgYXMgc3BlY2lmaWVkIGFib3ZlLgogICAgIHZvaWQgbm90aWZ5VHJhbnNm
b3JtQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvQmFja2luZ1N0b3JlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZUNsaWVudC5jcHAKaW5kZXggYzhmNjQ2MTVlZDFm
OTExZTJiYzZiMmY2MmVhMDdjNjE4NTc5NGUzNS4uYjk4Yzk1YmM3N2M4ZDg0MzA5YmIxNjIzZWRk
ODFmN2I2ZWI4ODhlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvQmFja2luZ1N0b3JlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDbGllbnQuY3BwCkBAIC0zMCw2ICszMCw4
IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCiAKKyNp
bmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1WaWV3cG9ydEFjY2Vzc29yLmg+CisKIC8vIEZJWE1F
OiBMZWF2aW5nIHRoZSBiZWxvdyBsaW5lcyBjb21tZW50ZWQgb3V0IGFzIGEgcmVmZXJlbmNlIGZv
ciB1cyB0byBzb29uIGJlIHN1cmUgaWYgd2UgbmVlZCB0aGVzZQogLy8gbWV0aG9kcyBhbmQgY2xh
c3MgdmFyaWFibGVzIGJlIG1vdmVkIGZyb20gV2ViUGFnZSB0byBCYWNraW5nU3RvcmVDbGllbnQu
CiAvLyBOb3RpZmljYXRpb24gbWV0aG9kcyB0aGF0IGRlbGl2ZXIgY2hhbmdlcyB0byB0aGUgcmVh
bCBnZW9tZXRyeSBvZiB0aGUgZGV2aWNlIGFzIHNwZWNpZmllZCBhYm92ZS4KQEAgLTczLDQxICs3
NSw2IEBAIEJhY2tpbmdTdG9yZUNsaWVudDo6fkJhY2tpbmdTdG9yZUNsaWVudCgpCiAgICAgbV9m
cmFtZSA9IDA7CiB9CiAKLUludFJlY3QgQmFja2luZ1N0b3JlQ2xpZW50OjphYnNvbHV0ZVJlY3Qo
KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
dmlld3BvcnRTaXplKCkpOwotCi0gICAgLy8gRklYTUU6IFNwZWVkIGl0IHVwIQotICAgIEZyYW1l
KiBmcmFtZSA9IG1fZnJhbWU7Ci0gICAgd2hpbGUgKGZyYW1lKSB7Ci0gICAgICAgIGlmIChFbGVt
ZW50KiBlbGVtZW50ID0gZnJhbWUtPm93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBkbyB7
Ci0gICAgICAgICAgICAgICAgcmVjdC5tb3ZlKGVsZW1lbnQtPm9mZnNldExlZnQoKSwgZWxlbWVu
dC0+b2Zmc2V0VG9wKCkpOwotICAgICAgICAgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50
LT5vZmZzZXRQYXJlbnQoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChmcmFtZSA9IGZy
YW1lLT50cmVlKCktPnBhcmVudCgpKSkKLSAgICAgICAgICAgIHJlY3QubW92ZSgoLWZyYW1lLT52
aWV3KCktPnNjcm9sbE9mZnNldCgpKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0K
LUludFJlY3QgQmFja2luZ1N0b3JlQ2xpZW50Ojp0cmFuc2Zvcm1lZEFic29sdXRlUmVjdCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+ZC0+bWFwVG9UcmFuc2Zvcm1lZChhYnNvbHV0
ZVJlY3QoKSk7Ci19Ci0KLUludFBvaW50IEJhY2tpbmdTdG9yZUNsaWVudDo6YWJzb2x1dGVMb2Nh
dGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFic29sdXRlUmVjdCgpLmxvY2F0aW9uKCk7Ci19
Ci0KLUludFBvaW50IEJhY2tpbmdTdG9yZUNsaWVudDo6dHJhbnNmb3JtZWRBYnNvbHV0ZUxvY2F0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5kLT5tYXBUb1RyYW5zZm9ybWVk
KHRyYW5zZm9ybWVkQWJzb2x1dGVSZWN0KCkpLmxvY2F0aW9uKCk7Ci19Ci0KIEludFBvaW50IEJh
Y2tpbmdTdG9yZUNsaWVudDo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVCht
X2ZyYW1lKTsKQEAgLTExOSw3ICs4Niw3IEBAIEludFBvaW50IEJhY2tpbmdTdG9yZUNsaWVudDo6
c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogCiBJbnRQb2ludCBCYWNraW5nU3RvcmVDbGllbnQ6OnRy
YW5zZm9ybWVkU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX3dlYlBhZ2Ut
PmQtPm1hcFRvVHJhbnNmb3JtZWQoc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgcmV0dXJuIG1fd2Vi
UGFnZS0+d2Via2l0VGhyZWFkVmlld3BvcnRBY2Nlc3NvcigpLT5waXhlbFNjcm9sbFBvc2l0aW9u
KCk7CiB9CiAKIHZvaWQgQmFja2luZ1N0b3JlQ2xpZW50OjpzZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBJbnRQb2ludCYgcG9zKQpAQCAtMTU0LDE4ICsxMjEsMTggQEAgSW50UG9pbnQgQmFja2luZ1N0
b3JlQ2xpZW50OjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogCiBJbnRQb2ludCBCYWNr
aW5nU3RvcmVDbGllbnQ6OnRyYW5zZm9ybWVkTWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5kLT5tYXBUb1RyYW5zZm9ybWVkKG1heGltdW1TY3Jv
bGxQb3NpdGlvbigpKTsKKyAgICByZXR1cm4gbV93ZWJQYWdlLT53ZWJraXRUaHJlYWRWaWV3cG9y
dEFjY2Vzc29yKCktPnJvdW5kVG9QaXhlbEZyb21Eb2N1bWVudENvbnRlbnRzKFdlYkNvcmU6OkZs
b2F0UG9pbnQobWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpKTsKIH0KIAogSW50U2l6ZSBCYWNraW5n
U3RvcmVDbGllbnQ6OmFjdHVhbFZpc2libGVTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV93
ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWQodHJhbnNmb3JtZWRBY3R1YWxWaXNpYmxlU2l6
ZSgpKTsKKyAgICByZXR1cm4gbV93ZWJQYWdlLT53ZWJraXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29y
KCktPmRvY3VtZW50Vmlld3BvcnRTaXplKCk7CiB9CiAKIEludFNpemUgQmFja2luZ1N0b3JlQ2xp
ZW50Ojp0cmFuc2Zvcm1lZEFjdHVhbFZpc2libGVTaXplKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aXNNYWluRnJhbWUoKSk7Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+ZC0+dHJhbnNmb3JtZWRBY3R1
YWxWaXNpYmxlU2l6ZSgpOworICAgIHJldHVybiBtX3dlYlBhZ2UtPndlYmtpdFRocmVhZFZpZXdw
b3J0QWNjZXNzb3IoKS0+cGl4ZWxWaWV3cG9ydFNpemUoKTsKIH0KIAogSW50U2l6ZSBCYWNraW5n
U3RvcmVDbGllbnQ6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0CkBAIC0xOTksMTkgKzE2Niw2IEBAIElu
dFJlY3QgQmFja2luZ1N0b3JlQ2xpZW50Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKICAg
ICByZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0OwogfQogCi1JbnRSZWN0IEJhY2tpbmdTdG9yZUNs
aWVudDo6dHJhbnNmb3JtZWRWaXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKLXsKLSAgICAvLyBV
c3VhbGx5IHRoaXMgd291bGQgYmUgbWFwVG9UcmFuc2Zvcm1lZCh2aXNpYmxlQ29udGVudHNSZWN0
KCkpLCBidXQKLSAgICAvLyB0aGF0IHJlc3VsdHMgaW4gcm91bmRpbmcgZXJyb3JzIGJlY2F1c2Ug
d2UgYWxyZWFkeSBzZXQgdGhlIFdlYkNvcmUKLSAgICAvLyB2aWV3cG9ydCBzaXplIGZyb20gb3Vy
IG9yaWdpbmFsIHRyYW5zZm9ybWVkVmlld3BvcnRTaXplKCkuCi0gICAgLy8gSW5zdGVhZCwgd2Ug
b25seSB0cmFuc2Zvcm0gdGhlIHNjcm9sbCBwb3NpdGlvbiBhbmQgdGFrZSB0aGUKLSAgICAvLyB2
aWV3cG9ydCBzaXplIGFzIGl0IGlzLCB3aGljaCBlbnN1cmVzIHRoYXQgZS5nLiBibGl0dGluZyBv
cGVyYXRpb25zCi0gICAgLy8gYWx3YXlzIGNvdmVyIHRoZSB3aG9sZSB3aWRnZXQvc2NyZWVuLgot
ICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCA9IEludFJlY3QodHJhbnNmb3JtZWRTY3Jv
bGxQb3NpdGlvbigpLCB0cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgpKTsKLSAgICBBU1NFUlQoaXNN
YWluRnJhbWUoKSk7Ci0gICAgcmV0dXJuIHZpc2libGVDb250ZW50c1JlY3Q7Ci19Ci0KIEludFNp
emUgQmFja2luZ1N0b3JlQ2xpZW50Ojpjb250ZW50c1NpemUoKSBjb25zdAogewogICAgIEFTU0VS
VChtX2ZyYW1lKTsKQEAgLTIyMSw3MCArMTc1LDYgQEAgSW50U2l6ZSBCYWNraW5nU3RvcmVDbGll
bnQ6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWUtPnZpZXcoKS0+Y29u
dGVudHNTaXplKCk7CiB9CiAKLUludFNpemUgQmFja2luZ1N0b3JlQ2xpZW50Ojp0cmFuc2Zvcm1l
ZENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgLy8gbWFwVG9UcmFuc2Zvcm1lZCgpIGZ1bmN0
aW9ucyB1c2UgdGhpcyBtZXRob2QgdG8gY3JvcCB0aGVpciByZXN1bHRzLAotICAgIC8vIHNvIHdl
IGNhbid0IG1ha2UgdXNlIG9mIHRoZW0gaGVyZS4gV2hpbGUgd2Ugd2FudCByb3VuZGluZyBpbnNp
ZGUgcGFnZQotICAgIC8vIGJvdW5kYXJpZXMgdG8gZXh0ZW5kIHJlY3RhbmdsZXMgYW5kIHJvdW5k
IHBvaW50cywgd2UgbmVlZCB0byBjcm9wIHRoZQotICAgIC8vIGNvbnRlbnRzIHNpemUgdG8gdGhl
IGZsb29yZWQgdmFsdWVzIHNvIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGRpc3BsYXkKLSAgICAvLyBv
ciByZXBvcnQgcG9pbnRzIHRoYXQgYXJlIG5vdCBmdWxseSBjb3ZlcmVkIGJ5IHRoZSBhY3R1YWwg
ZmxvYXQtcG9pbnQKLSAgICAvLyBjb250ZW50cyByZWN0YW5nbGUuCi0gICAgY29uc3QgSW50U2l6
ZSB1bnRyYW5zZm9ybWVkQ29udGVudHNTaXplID0gY29udGVudHNTaXplKCk7Ci0gICAgY29uc3Qg
RmxvYXRQb2ludCB0cmFuc2Zvcm1lZEJvdHRvbVJpZ2h0ID0gbV93ZWJQYWdlLT5kLT5tX3RyYW5z
Zm9ybWF0aW9uTWF0cml4LT5tYXBQb2ludCgKLSAgICAgICAgRmxvYXRQb2ludCh1bnRyYW5zZm9y
bWVkQ29udGVudHNTaXplLndpZHRoKCksIHVudHJhbnNmb3JtZWRDb250ZW50c1NpemUuaGVpZ2h0
KCkpKTsKLSAgICByZXR1cm4gSW50U2l6ZShmbG9vcmYodHJhbnNmb3JtZWRCb3R0b21SaWdodC54
KCkpLCBmbG9vcmYodHJhbnNmb3JtZWRCb3R0b21SaWdodC55KCkpKTsKLX0KLQotdm9pZCBCYWNr
aW5nU3RvcmVDbGllbnQ6OmNsaXBUb1RyYW5zZm9ybWVkQ29udGVudHNSZWN0KEludFJlY3QmIHJl
Y3QpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IE5lZWRzIHRvIHByb3BlciB0cmFuc2xhdGUgY29v
cmRpbmF0ZXMgaGVyZT8KLSAgICByZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIHRyYW5zZm9ybWVkQ29udGVudHNTaXplKCkpKTsKLX0KLQotSW50UG9pbnQgQmFja2luZ1N0
b3JlQ2xpZW50OjptYXBGcm9tQ29udGVudHNUb1ZpZXdwb3J0KGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKLXsKLSAgICBjb25zdCBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHRoaXMtPnNj
cm9sbFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSAtIHNjcm9sbFBv
c2l0aW9uLngoKSwgcG9pbnQueSgpIC0gc2Nyb2xsUG9zaXRpb24ueSgpKTsKLX0KLQotSW50UG9p
bnQgQmFja2luZ1N0b3JlQ2xpZW50OjptYXBGcm9tVmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0IElu
dFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBjb25zdCBJbnRQb2ludCBzY3JvbGxQb3NpdGlv
biA9IHRoaXMtPnNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50Lngo
KSArIHNjcm9sbFBvc2l0aW9uLngoKSwgcG9pbnQueSgpICsgc2Nyb2xsUG9zaXRpb24ueSgpKTsK
LX0KLQotSW50UmVjdCBCYWNraW5nU3RvcmVDbGllbnQ6Om1hcEZyb21Db250ZW50c1RvVmlld3Bv
cnQoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50UmVjdChtYXBG
cm9tQ29udGVudHNUb1ZpZXdwb3J0KHJlY3QubG9jYXRpb24oKSksIHJlY3Quc2l6ZSgpKTsKLX0K
LQotSW50UmVjdCBCYWNraW5nU3RvcmVDbGllbnQ6Om1hcEZyb21WaWV3cG9ydFRvQ29udGVudHMo
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50UmVjdChtYXBGcm9t
Vmlld3BvcnRUb0NvbnRlbnRzKHJlY3QubG9jYXRpb24oKSksIHJlY3Quc2l6ZSgpKTsKLX0KLQot
SW50UG9pbnQgQmFja2luZ1N0b3JlQ2xpZW50OjptYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1Rv
VHJhbnNmb3JtZWRWaWV3cG9ydChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAg
Y29uc3QgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSB0cmFuc2Zvcm1lZFNjcm9sbFBvc2l0aW9u
KCk7Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSAtIHNjcm9sbFBvc2l0aW9uLngoKSwg
cG9pbnQueSgpIC0gc2Nyb2xsUG9zaXRpb24ueSgpKTsKLX0KLQotSW50UG9pbnQgQmFja2luZ1N0
b3JlQ2xpZW50OjptYXBGcm9tVHJhbnNmb3JtZWRWaWV3cG9ydFRvVHJhbnNmb3JtZWRDb250ZW50
cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgY29uc3QgSW50UG9pbnQgc2Ny
b2xsUG9zaXRpb24gPSB0cmFuc2Zvcm1lZFNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIElu
dFBvaW50KHBvaW50LngoKSArIHNjcm9sbFBvc2l0aW9uLngoKSwgcG9pbnQueSgpICsgc2Nyb2xs
UG9zaXRpb24ueSgpKTsKLX0KLQotSW50UmVjdCBCYWNraW5nU3RvcmVDbGllbnQ6Om1hcEZyb21U
cmFuc2Zvcm1lZENvbnRlbnRzVG9UcmFuc2Zvcm1lZFZpZXdwb3J0KGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFJlY3QobWFwRnJvbVRyYW5zZm9ybWVkQ29udGVu
dHNUb1RyYW5zZm9ybWVkVmlld3BvcnQocmVjdC5sb2NhdGlvbigpKSwgcmVjdC5zaXplKCkpOwot
fQotCi1JbnRSZWN0IEJhY2tpbmdTdG9yZUNsaWVudDo6bWFwRnJvbVRyYW5zZm9ybWVkVmlld3Bv
cnRUb1RyYW5zZm9ybWVkQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSW50UmVjdChtYXBGcm9tVHJhbnNmb3JtZWRWaWV3cG9ydFRvVHJhbnNmb3JtZWRD
b250ZW50cyhyZWN0LmxvY2F0aW9uKCkpLCByZWN0LnNpemUoKSk7Ci19Ci0KIFdlYlBhZ2VQcml2
YXRlOjpMb2FkU3RhdGUgQmFja2luZ1N0b3JlQ2xpZW50Ojpsb2FkU3RhdGUoKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBEb2VzIGl0IG5lZWQgdG8gY2FsbCBXZWJQYWdlJ3M/CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9CYWNraW5nU3RvcmVDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9y
ZUNsaWVudC5oCmluZGV4IDQ5ZjIwNThkZTY1MWQ0MjJiZmU4YzI0ZDExZTU0ZmMxNWZlMTQ0Yzgu
LjkyNGNmNTZjZGM1NGQ4ZGQ2MjRiMGE5M2FhMjI2YzIwOGI5NzUxMGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9yZUNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0JhY2tpbmdTdG9y
ZUNsaWVudC5oCkBAIC00NiwxMSArNDYsNiBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6RnJhbWUq
IGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogICAgIGJvb2wgaXNNYWluRnJhbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lID09IG1fd2ViUGFnZS0+ZC0+bV9tYWluRnJhbWU7IH0K
IAotICAgIFdlYkNvcmU6OkludFBvaW50IGFic29sdXRlTG9jYXRpb24oKSBjb25zdDsKLSAgICBX
ZWJDb3JlOjpJbnRQb2ludCB0cmFuc2Zvcm1lZEFic29sdXRlTG9jYXRpb24oKSBjb25zdDsKLSAg
ICBXZWJDb3JlOjpJbnRSZWN0IGFic29sdXRlUmVjdCgpIGNvbnN0OwotICAgIFdlYkNvcmU6Oklu
dFJlY3QgdHJhbnNmb3JtZWRBYnNvbHV0ZVJlY3QoKSBjb25zdDsKLQogICAgIC8vIHNjcm9sbCBw
b3NpdGlvbiByZXR1cm5lZCBpcyBpbiB0cmFuc2Zvcm1lZCBjb29yZGluYXRlcwogICAgIFdlYkNv
cmU6OkludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7CiAgICAgV2ViQ29yZTo6SW50UG9p
bnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7CkBAIC02NywyNCArNjIsOCBAQCBwdWJs
aWM6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSB0cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgpIGNvbnN0
OwogCiAgICAgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7Ci0g
ICAgV2ViQ29yZTo6SW50UmVjdCB0cmFuc2Zvcm1lZFZpc2libGVDb250ZW50c1JlY3QoKSBjb25z
dDsKIAogICAgIFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplKCkgY29uc3Q7Ci0gICAgV2Vi
Q29yZTo6SW50U2l6ZSB0cmFuc2Zvcm1lZENvbnRlbnRzU2l6ZSgpIGNvbnN0OwotCi0gICAgLyog
R2VuZXJpYyBjb252ZXJzaW9ucyBvZiBwb2ludHMsIHJlY3RzLCByZWxhdGl2ZSB0byBhbmQgZnJv
bSBjb250ZW50cyBhbmQgdmlld3BvcnQqLwotICAgIFdlYkNvcmU6OkludFBvaW50IG1hcEZyb21D
b250ZW50c1RvVmlld3BvcnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKLSAgICBX
ZWJDb3JlOjpJbnRQb2ludCBtYXBGcm9tVmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JikgY29uc3Q7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtYXBGcm9tQ29udGVudHNU
b1ZpZXdwb3J0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1hcEZyb21WaWV3cG9ydFRvQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IGNvbnN0OwotCi0gICAgLyogR2VuZXJpYyBjb252ZXJzaW9ucyBvZiBwb2ludHMsIHJlY3RzLCBy
ZWxhdGl2ZSB0byBhbmQgZnJvbSB0cmFuc2Zvcm1lZCBjb250ZW50cyBhbmQgdHJhbnNmb3JtZWQg
dmlld3BvcnQqLwotICAgIFdlYkNvcmU6OkludFBvaW50IG1hcEZyb21UcmFuc2Zvcm1lZENvbnRl
bnRzVG9UcmFuc2Zvcm1lZFZpZXdwb3J0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgY29uc3Q7
Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgbWFwRnJvbVRyYW5zZm9ybWVkVmlld3BvcnRUb1RyYW5z
Zm9ybWVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKLSAgICBXZWJD
b3JlOjpJbnRSZWN0IG1hcEZyb21UcmFuc2Zvcm1lZENvbnRlbnRzVG9UcmFuc2Zvcm1lZFZpZXdw
b3J0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0
IG1hcEZyb21UcmFuc2Zvcm1lZFZpZXdwb3J0VG9UcmFuc2Zvcm1lZENvbnRlbnRzKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBjb25zdDsKLQotICAgIHZvaWQgY2xpcFRvVHJhbnNmb3JtZWRDb250
ZW50c1JlY3QoV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0OwogCiAgICAgYm9vbCBpc0xvYWRpbmco
KSBjb25zdDsKICAgICBXZWJQYWdlUHJpdmF0ZTo6TG9hZFN0YXRlIGxvYWRTdGF0ZSgpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvRmF0
RmluZ2Vycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GYXRG
aW5nZXJzLmNwcAppbmRleCBjNTFkZmY2MDA4YmRjNDY5NmU2NDg4OTE3YTEyMTIzZDk1NDAyMWNk
Li42YTZhODVmN2FkM2NhNGQ5N2UyNmFiMmM4YzJhYWY0YzA2Y2U1YWY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9GYXRGaW5nZXJzLmNwcApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgUmVz
ZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDEsNiArNDEsNyBA
QAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAi
VGV4dEJyZWFrSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJXZWJLaXRUaHJlYWRWaWV3cG9ydEFjY2Vz
c29yLmgiCiAjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCiAKICNpZiBERUJVR19GQVRfRklOR0VSUwpA
QCAtNjUsOCArNjYsMTAgQEAgSW50UG9pbnQgRmF0RmluZ2Vyczo6bV9kZWJ1Z0ZhdEZpbmdlckFk
anVzdGVkUG9zaXRpb247CiAKIEludFJlY3QgRmF0RmluZ2Vyczo6ZmluZ2VyUmVjdEZvclBvaW50
KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKKyAgICBjb25zdCBQbGF0Zm9ybTo6Vmll
d3BvcnRBY2Nlc3Nvciogdmlld3BvcnRBY2Nlc3NvciA9IG1fd2ViUGFnZS0+bV93ZWJraXRUaHJl
YWRWaWV3cG9ydEFjY2Vzc29yOworCiAgICAgdW5zaWduZWQgdG9wUGFkZGluZywgcmlnaHRQYWRk
aW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0UGFkZGluZzsKLSAgICBJbnRQb2ludCBjb250ZW50Vmll
d3BvcnRQb3MgPSBtX3dlYlBhZ2UtPm1hcEZyb21Db250ZW50c1RvVmlld3BvcnQocG9pbnQpOwor
ICAgIEludFBvaW50IGNvbnRlbnRWaWV3cG9ydFBvcyA9IHZpZXdwb3J0QWNjZXNzb3ItPmRvY3Vt
ZW50Vmlld3BvcnRGcm9tQ29udGVudHMocG9pbnQpOwogICAgIGdldEFkanVzdGVkUGFkZGluZ3Mo
Y29udGVudFZpZXdwb3J0UG9zLCB0b3BQYWRkaW5nLCByaWdodFBhZGRpbmcsIGJvdHRvbVBhZGRp
bmcsIGxlZnRQYWRkaW5nKTsKIAogICAgIHJldHVybiBIaXRUZXN0TG9jYXRpb246OnJlY3RGb3JQ
b2ludChwb2ludCwgdG9wUGFkZGluZywgcmlnaHRQYWRkaW5nLCBib3R0b21QYWRkaW5nLCBsZWZ0
UGFkZGluZyk7CkBAIC0xMzcsOSArMTQwLDExIEBAIEZhdEZpbmdlcnM6OkZhdEZpbmdlcnMoV2Vi
UGFnZVByaXZhdGUqIHdlYlBhZ2UsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjb250ZW50CiAg
ICAgQVNTRVJUKHdlYlBhZ2UpOwogCiAjaWYgREVCVUdfRkFUX0ZJTkdFUlMKKyAgICBjb25zdCBQ
bGF0Zm9ybTo6Vmlld3BvcnRBY2Nlc3Nvciogdmlld3BvcnRBY2Nlc3NvciA9IG1fd2ViUGFnZS0+
bV93ZWJraXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29yOworCiAgICAgbV9kZWJ1Z0ZhdEZpbmdlclJl
Y3QgPSBJbnRSZWN0KDAsIDAsIDAsIDApOwotICAgIG1fZGVidWdGYXRGaW5nZXJDbGlja1Bvc2l0
aW9uID0gbV93ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+bWFwRnJvbUNvbnRl
bnRzVG9WaWV3cG9ydChjb250ZW50UG9zKSk7Ci0gICAgbV9kZWJ1Z0ZhdEZpbmdlckFkanVzdGVk
UG9zaXRpb24gPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQobV93ZWJQYWdlLT5tYXBGcm9t
Q29udGVudHNUb1ZpZXdwb3J0KGNvbnRlbnRQb3MpKTsKKyAgICBtX2RlYnVnRmF0RmluZ2VyQ2xp
Y2tQb3NpdGlvbiA9IHZpZXdwb3J0QWNjZXNzb3ItPnBpeGVsVmlld3BvcnRGcm9tQ29udGVudHMo
dmlld3BvcnRBY2Nlc3Nvci0+cm91bmRUb1BpeGVsRnJvbURvY3VtZW50Q29udGVudHMoV2ViQ29y
ZTo6RmxvYXRQb2ludChjb250ZW50UG9zKSkpOworICAgIG1fZGVidWdGYXRGaW5nZXJBZGp1c3Rl
ZFBvc2l0aW9uID0gbV9kZWJ1Z0ZhdEZpbmdlckNsaWNrUG9zaXRpb247CiAjZW5kaWYKIH0KIApA
QCAtMjIzLDcgKzIyOCwxMCBAQCBjb25zdCBGYXRGaW5nZXJzUmVzdWx0IEZhdEZpbmdlcnM6OmZp
bmRCZXN0UG9pbnQoKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAjaWYgREVCVUdfRkFUX0ZJ
TkdFUlMKLSAgICBtX2RlYnVnRmF0RmluZ2VyQWRqdXN0ZWRQb3NpdGlvbiA9IG1fd2ViUGFnZS0+
bWFwVG9UcmFuc2Zvcm1lZChtX3dlYlBhZ2UtPm1hcEZyb21Db250ZW50c1RvVmlld3BvcnQobGFy
Z2VzdEludGVyc2VjdGlvblJlZ2lvbi5yZWN0cygpWzBdLmNlbnRlcigpKSk7CisgICAgY29uc3Qg
UGxhdGZvcm06OlZpZXdwb3J0QWNjZXNzb3IqIHZpZXdwb3J0QWNjZXNzb3IgPSBtX3dlYlBhZ2Ut
Pm1fd2Via2l0VGhyZWFkVmlld3BvcnRBY2Nlc3NvcjsKKworICAgIG1fZGVidWdGYXRGaW5nZXJB
ZGp1c3RlZFBvc2l0aW9uID0gdmlld3BvcnRBY2Nlc3Nvci0+cGl4ZWxWaWV3cG9ydEZyb21Db250
ZW50cygKKyAgICAgICAgdmlld3BvcnRBY2Nlc3Nvci0+cm91bmRUb1BpeGVsRnJvbURvY3VtZW50
Q29udGVudHMobGFyZ2VzdEludGVyc2VjdGlvblJlZ2lvbi5yZWN0cygpWzBdLmNlbnRlcigpKSk7
CiAjZW5kaWYKIAogICAgIHNldFN1Y2Nlc3NmdWxGYXRGaW5nZXJzUmVzdWx0KHJlc3VsdCwgYmVz
dE5vZGUsIGxhcmdlc3RJbnRlcnNlY3Rpb25SZWdpb24ucmVjdHMoKVswXS5jZW50ZXIoKSAvKmFk
anVzdGVkUG9zaXRpb24qLyk7CkBAIC0yOTAsMTMgKzI5OCwxNSBAQCBib29sIEZhdEZpbmdlcnM6
OmZpbmRJbnRlcnNlY3RpbmdSZWdpb25zKERvY3VtZW50KiBkb2N1bWVudCwgVmVjdG9yPEludGVy
c2VjdGluZwogICAgIGZyYW1lQ29udGVudFBvcyA9IFBsYXRmb3JtOjpwb2ludENsYW1wZWRUb1Jl
Y3QoZnJhbWVDb250ZW50UG9zLCB2aWV3cG9ydFJlY3QpOwogCiAjaWYgREVCVUdfRkFUX0ZJTkdF
UlMKLSAgICBJbnRSZWN0IGZpbmdlclJlY3QoZmluZ2VyUmVjdEZvclBvaW50KGZyYW1lQ29udGVu
dFBvcykpOwotICAgIFBsYXRmb3JtOjpJbnRSZWN0IHNjcmVlbkZpbmdlclJlY3QgPSBtX3dlYlBh
Z2UtPm1hcFRvVHJhbnNmb3JtZWQoZmluZ2VyUmVjdCk7CisgICAgY29uc3QgUGxhdGZvcm06OlZp
ZXdwb3J0QWNjZXNzb3IqIHZpZXdwb3J0QWNjZXNzb3IgPSBtX3dlYlBhZ2UtPm1fd2Via2l0VGhy
ZWFkVmlld3BvcnRBY2Nlc3NvcjsKKworICAgIFBsYXRmb3JtOjpJbnRSZWN0IGZpbmdlclJlY3Qo
ZmluZ2VyUmVjdEZvclBvaW50KGZyYW1lQ29udGVudFBvcykpOworICAgIFBsYXRmb3JtOjpJbnRS
ZWN0IHNjcmVlbkZpbmdlclJlY3QgPSB2aWV3cG9ydEFjY2Vzc29yLT5yb3VuZFRvUGl4ZWxGcm9t
RG9jdW1lbnRDb250ZW50cyhmaW5nZXJSZWN0KTsKICAgICBQbGF0Zm9ybTo6bG9nQWx3YXlzKFBs
YXRmb3JtOjpMb2dMZXZlbEluZm8sICJmYXQgZmluZ2VyIHJlY3Qgbm93ICVzIiwgc2NyZWVuRmlu
Z2VyUmVjdC50b1N0cmluZygpLmNfc3RyKCkpOwogCiAgICAgLy8gb25seSByZWNvcmQgdGhlIGZp
cnN0IGZpbmdlciByZWN0CiAgICAgaWYgKGRvY3VtZW50ID09IG1fd2ViUGFnZS0+bV9tYWluRnJh
bWUtPmRvY3VtZW50KCkpCi0gICAgICAgIG1fZGVidWdGYXRGaW5nZXJSZWN0ID0gbV93ZWJQYWdl
LT5tYXBUb1RyYW5zZm9ybWVkKG1fd2ViUGFnZS0+bWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChm
aW5nZXJSZWN0KSk7CisgICAgICAgIG1fZGVidWdGYXRGaW5nZXJSZWN0ID0gdmlld3BvcnRBY2Nl
c3Nvci0+cGl4ZWxWaWV3cG9ydEZyb21Db250ZW50cyhzY3JlZW5GaW5nZXJSZWN0KTsKICNlbmRp
ZgogCiAgICAgYm9vbCBmb3VuZE9uZSA9IGZhbHNlOwpAQCAtNDU3LDggKzQ2NywxMCBAQCB2b2lk
IEZhdEZpbmdlcnM6OmdldEFkanVzdGVkUGFkZGluZ3MoY29uc3QgSW50UG9pbnQmIGNvbnRlbnRW
aWV3cG9ydFBvcywgdW5zaWduZQogCiB2b2lkIEZhdEZpbmdlcnM6OmdldE5vZGVzRnJvbVJlY3Qo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBJbnRQb2ludCYgY29udGVudFBvcywgTGlzdEhhc2hT
ZXQ8UmVmUHRyPE5vZGU+ID4mIGludGVyc2VjdGVkTm9kZXMpCiB7CisgICAgY29uc3QgUGxhdGZv
cm06OlZpZXdwb3J0QWNjZXNzb3IqIHZpZXdwb3J0QWNjZXNzb3IgPSBtX3dlYlBhZ2UtPm1fd2Vi
a2l0VGhyZWFkVmlld3BvcnRBY2Nlc3NvcjsKKwogICAgIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHJp
Z2h0UGFkZGluZywgYm90dG9tUGFkZGluZywgbGVmdFBhZGRpbmc7Ci0gICAgSW50UG9pbnQgY29u
dGVudFZpZXdwb3J0UG9zID0gbV93ZWJQYWdlLT5tYXBGcm9tQ29udGVudHNUb1ZpZXdwb3J0KG1f
Y29udGVudFBvcyk7CisgICAgSW50UG9pbnQgY29udGVudFZpZXdwb3J0UG9zID0gdmlld3BvcnRB
Y2Nlc3Nvci0+ZG9jdW1lbnRWaWV3cG9ydEZyb21Db250ZW50cyhtX2NvbnRlbnRQb3MpOwogICAg
IC8vIERvIG5vdCBhbGxvdyBmYXQgZmluZ2VycyBkZXRlY3QgYW55dGhpbmcgbm90IHZpc2libGUo
aWUgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQpCiAgICAgZ2V0QWRqdXN0ZWRQYWRkaW5ncyhjb250
ZW50Vmlld3BvcnRQb3MsIHRvcFBhZGRpbmcsIHJpZ2h0UGFkZGluZywgYm90dG9tUGFkZGluZywg
bGVmdFBhZGRpbmcpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2Vi
S2l0U3VwcG9ydC9JblJlZ2lvblNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDk5
ZWNjYjM1YjdkMGExOTI0YjY3YTE5Mzk2YTIzM2FhYWQwY2UzMzMuLjA5Mzk1NTFkYjVmM2RjODE2
YWFkNjcyNTFmYzE0MTA1YmZhZGMxOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0luUmVnaW9uU2Nyb2xsYWJsZUFyZWEu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yOSw4ICsyOSwxMSBAQAogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJXZWJLaXRUaHJlYWRWaWV3cG9y
dEFjY2Vzc29yLmgiCiAjaW5jbHVkZSAiV2ViUGFnZV9wLmgiCiAKKyNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1WaWV3cG9ydEFjY2Vzc29yLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7CkBAIC03OSw5ICs4MiwxMCBAQCBJblJlZ2lvblNj
cm9sbGFibGVBcmVhOjpJblJlZ2lvblNjcm9sbGFibGVBcmVhKFdlYlBhZ2VQcml2YXRlKiB3ZWJQ
YWdlLCBSZW5kZXJMYQogICAgICAgICBGcmFtZSogZnJhbWUgPSB2aWV3LT5mcmFtZSgpOwogICAg
ICAgICBBU1NFUlRfVU5VU0VEKGZyYW1lLCBmcmFtZSk7CiAKLSAgICAgICAgbV9zY3JvbGxQb3Np
dGlvbiA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZCh2aWV3LT5zY3JvbGxQb3NpdGlvbigp
KTsKLSAgICAgICAgbV9jb250ZW50c1NpemUgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQo
dmlldy0+Y29udGVudHNTaXplKCkpOwotICAgICAgICBtX3ZpZXdwb3J0U2l6ZSA9IG1fd2ViUGFn
ZS0+bWFwVG9UcmFuc2Zvcm1lZCh2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFy
ZWE6OkV4Y2x1ZGVTY3JvbGxiYXJzKSkuc2l6ZSgpOworICAgICAgICBjb25zdCBQbGF0Zm9ybTo6
Vmlld3BvcnRBY2Nlc3Nvciogdmlld3BvcnRBY2Nlc3NvciA9IG1fd2ViUGFnZS0+bV93ZWJraXRU
aHJlYWRWaWV3cG9ydEFjY2Vzc29yOworICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gdmlld3Bv
cnRBY2Nlc3Nvci0+cm91bmRUb1BpeGVsRnJvbURvY3VtZW50Q29udGVudHMoV2ViQ29yZTo6Rmxv
YXRQb2ludCh2aWV3LT5zY3JvbGxQb3NpdGlvbigpKSk7CisgICAgICAgIG1fY29udGVudHNTaXpl
ID0gdmlld3BvcnRBY2Nlc3Nvci0+cm91bmRUb1BpeGVsRnJvbURvY3VtZW50Q29udGVudHMoUGxh
dGZvcm06OkZsb2F0UmVjdChQbGF0Zm9ybTo6RmxvYXRQb2ludDo6emVybygpLCBXZWJDb3JlOjpG
bG9hdFNpemUodmlldy0+Y29udGVudHNTaXplKCkpKSkuc2l6ZSgpOworICAgICAgICBtX3ZpZXdw
b3J0U2l6ZSA9IHZpZXdwb3J0QWNjZXNzb3ItPnJvdW5kVG9QaXhlbEZyb21Eb2N1bWVudENvbnRl
bnRzKFdlYkNvcmU6OkZsb2F0UmVjdCh2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJs
ZUFyZWE6OkV4Y2x1ZGVTY3JvbGxiYXJzKSkpLnNpemUoKTsKICAgICAgICAgbV9kb2N1bWVudFZp
ZXdwb3J0UmVjdCA9IHZpZXctPmZyYW1lUmVjdCgpOwogCiAgICAgICAgIG1fc2Nyb2xsc0hvcml6
b250YWxseSA9IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA+IHZpZXctPnZpc2libGVXaWR0aCgpOwpA
QCAtMTAyLDEwICsxMDYsMTIgQEAgSW5SZWdpb25TY3JvbGxhYmxlQXJlYTo6SW5SZWdpb25TY3Jv
bGxhYmxlQXJlYShXZWJQYWdlUHJpdmF0ZSogd2ViUGFnZSwgUmVuZGVyTGEKICAgICAgICAgQVNT
RVJUKGJveCk7CiAgICAgICAgIEFTU0VSVChJblJlZ2lvblNjcm9sbGVyUHJpdmF0ZTo6Y2FuU2Ny
b2xsUmVuZGVyQm94KGJveCkpOwogCisgICAgICAgIGNvbnN0IFBsYXRmb3JtOjpWaWV3cG9ydEFj
Y2Vzc29yKiB2aWV3cG9ydEFjY2Vzc29yID0gbV93ZWJQYWdlLT5tX3dlYmtpdFRocmVhZFZpZXdw
b3J0QWNjZXNzb3I7CiAgICAgICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9IHN0
YXRpY19jYXN0PFNjcm9sbGFibGVBcmVhKj4obV9sYXllcik7Ci0gICAgICAgIG1fc2Nyb2xsUG9z
aXRpb24gPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQoc2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bFBvc2l0aW9uKCkpOwotICAgICAgICBtX2NvbnRlbnRzU2l6ZSA9IG1fd2ViUGFnZS0+bWFwVG9U
cmFuc2Zvcm1lZChzY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkpOwotICAgICAgICBtX3Zp
ZXdwb3J0U2l6ZSA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZChzY3JvbGxhYmxlQXJlYS0+
dmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpFeGNsdWRlU2Nyb2xsYmFycykpLnNp
emUoKTsKKworICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gdmlld3BvcnRBY2Nlc3Nvci0+cm91
bmRUb1BpeGVsRnJvbURvY3VtZW50Q29udGVudHMoV2ViQ29yZTo6RmxvYXRQb2ludChzY3JvbGxh
YmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSkpOworICAgICAgICBtX2NvbnRlbnRzU2l6ZSA9IHZp
ZXdwb3J0QWNjZXNzb3ItPnJvdW5kVG9QaXhlbEZyb21Eb2N1bWVudENvbnRlbnRzKFBsYXRmb3Jt
OjpGbG9hdFJlY3QoUGxhdGZvcm06OkZsb2F0UG9pbnQ6Onplcm8oKSwgV2ViQ29yZTo6RmxvYXRT
aXplKHNjcm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKSkpKS5zaXplKCk7CisgICAgICAgIG1f
dmlld3BvcnRTaXplID0gdmlld3BvcnRBY2Nlc3Nvci0+cm91bmRUb1BpeGVsRnJvbURvY3VtZW50
Q29udGVudHMoV2ViQ29yZTo6RmxvYXRSZWN0KHNjcm9sbGFibGVBcmVhLT52aXNpYmxlQ29udGVu
dFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkV4Y2x1ZGVTY3JvbGxiYXJzKSkpLnNpemUoKTsKICAgICAg
ICAgbV9kb2N1bWVudFZpZXdwb3J0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoYm94LT5hYnNvbHV0
ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSk7CiAKICAgICAgICAgbV9zY3JvbGxzSG9yaXpvbnRhbGx5
ID0gYm94LT5zY3JvbGxXaWR0aCgpICE9IGJveC0+Y2xpZW50V2lkdGgoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9JbnB1dEhhbmRsZXIuY3Bw
CmluZGV4IDY5OTg5ZjgxMzcxZmU3NTA3OTMwMTA0MmRkMjU3MWI5MmFjYWFlYzguLjRiNjZiMWFm
YjVhNDVkYWQzYjliOTRmOGJhYTZlYTQxN2UwYjVjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L0lucHV0SGFuZGxlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvSW5wdXRIYW5kbGVyLmNwcApAQCAtNjIs
NiArNjIsNyBAQAogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVQ
b3NpdGlvbi5oIgogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgorI2luY2x1ZGUgIldlYktpdFRo
cmVhZFZpZXdwb3J0QWNjZXNzb3IuaCIKICNpbmNsdWRlICJXZWJQYWdlQ2xpZW50LmgiCiAjaW5j
bHVkZSAiV2ViUGFnZV9wLmgiCiAjaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIKQEAgLTczLDYgKzc0
LDcgQEAKICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KICNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1TY3JlZW4uaD4KICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1TZXR0
aW5ncy5oPgorI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPHN5cy9rZXljb2Rlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTM2Nyw3ICsxMzY5LDggQEAgdm9pZCBJ
bnB1dEhhbmRsZXI6OmVuc3VyZUZvY3VzVGV4dEVsZW1lbnRWaXNpYmxlKENhcmV0U2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlKQogICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcGFkZGluZyBiYWNrIGZy
b20gdHJhbnNmb3JtZWQgdG8gZW5zdXJlIGEgY29uc2lzdGVudCBwYWRkaW5nIHJlZ2FyZGxlc3Mg
b2YKICAgICAgICAgICAgIC8vIHpvb20gbGV2ZWwgYXMgY29udHJvbHMgZG8gbm90IHpvb20uCiAg
ICAgICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNfZm9jdXNSZWN0UGFkZGluZ1NpemUgPSBHcmFw
aGljczo6U2NyZWVuOjpwcmltYXJ5U2NyZWVuKCktPmhlaWdodEluTU1Ub1BpeGVscygzKTsKLSAg
ICAgICAgICAgIHNlbGVjdGlvbkZvY3VzUmVjdC5pbmZsYXRlKG1fd2ViUGFnZS0+bWFwRnJvbVRy
YW5zZm9ybWVkKFdlYkNvcmU6OkludFNpemUoMCwgc19mb2N1c1JlY3RQYWRkaW5nU2l6ZSkpLmhl
aWdodCgpKTsKKyAgICAgICAgICAgIGNvbnN0IFBsYXRmb3JtOjpWaWV3cG9ydEFjY2Vzc29yKiB2
aWV3cG9ydEFjY2Vzc29yID0gbV93ZWJQYWdlLT5tX3dlYmtpdFRocmVhZFZpZXdwb3J0QWNjZXNz
b3I7CisgICAgICAgICAgICBzZWxlY3Rpb25Gb2N1c1JlY3QuaW5mbGF0ZShzdGQ6OmNlaWxmKHZp
ZXdwb3J0QWNjZXNzb3ItPmRvY3VtZW50RnJvbVBpeGVsQ29udGVudHMoUGxhdGZvcm06OkZsb2F0
U2l6ZSgwLCBzX2ZvY3VzUmVjdFBhZGRpbmdTaXplKSkuaGVpZ2h0KCkpKTsKIAogICAgICAgICAg
ICAgV2ViQ29yZTo6SW50UmVjdCByZXZlYWxSZWN0KGxheWVyLT5nZXRSZWN0VG9FeHBvc2UoYWN0
dWFsU2NyZWVuUmVjdCwgc2VsZWN0aW9uRm9jdXNSZWN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsU2Ny
b2xsQWxpZ25tZW50LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktp
dFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYktpdFN1cHBvcnQvVG91Y2hFdmVudEhhbmRsZXIuY3BwCmluZGV4IDJlNzJhMThhZjVkYzUw
NDYwYWNiNzA4ZDhkOGI4ZTM1YTE3YmM3ZmYuLmMxMzBhODRjODVlNDhlMWQyYTc5Y2IzNmUyYWFl
NDQ0OWE5ZmZjNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRT
dXBwb3J0L1RvdWNoRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViS2l0U3VwcG9ydC9Ub3VjaEV2ZW50SGFuZGxlci5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
LCAyMDEyLCAyMDEzIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0LDkgKzQ0LDExIEBACiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9u
SGFuZGxlci5oIgorI2luY2x1ZGUgIldlYktpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3IuaCIKICNp
bmNsdWRlICJXZWJQYWdlX3AuaCIKICNpbmNsdWRlICJXZWJUYXBIaWdobGlnaHQuaCIKIAorI2lu
Y2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybVZpZXdwb3J0QWNjZXNzb3IuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTg5LDcgKzkx
LDExIEBAIHZvaWQgVG91Y2hFdmVudEhhbmRsZXI6OnNlbmRDbGlja0F0RmF0RmluZ2Vyc1BvaW50
KHVuc2lnbmVkIG1vZGlmaWVycykKICAgICBib29sIGN0cmxBY3RpdmUgPSBtb2RpZmllcnMgJiBL
RVlNT0RfQ1RSTDsKIAogICAgIGhhbmRsZUZhdEZpbmdlclByZXNzZWQoc2hpZnRBY3RpdmUsIGFs
dEFjdGl2ZSwgY3RybEFjdGl2ZSk7Ci0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IG1vdXNlUmVsZWFz
ZShtX3dlYlBhZ2UtPm1hcEZyb21Db250ZW50c1RvVmlld3BvcnQobV9sYXN0RmF0RmluZ2Vyc1Jl
c3VsdC5hZGp1c3RlZFBvc2l0aW9uKCkpLCBtX2xhc3RTY3JlZW5Qb2ludCwgUGxhdGZvcm1FdmVu
dDo6TW91c2VSZWxlYXNlZCwgMSwgTGVmdEJ1dHRvbiwgc2hpZnRBY3RpdmUsIGN0cmxBY3RpdmUs
IGFsdEFjdGl2ZSwgVG91Y2hTY3JlZW4pOworCisgICAgY29uc3QgUGxhdGZvcm06OlZpZXdwb3J0
QWNjZXNzb3IqIHZpZXdwb3J0QWNjZXNzb3IgPSBtX3dlYlBhZ2UtPm1fd2Via2l0VGhyZWFkVmll
d3BvcnRBY2Nlc3NvcjsKKyAgICBJbnRQb2ludCBkb2N1bWVudFZpZXdwb3J0QWRqdXN0ZWRQb3Np
dGlvbiA9IHZpZXdwb3J0QWNjZXNzb3ItPmRvY3VtZW50Vmlld3BvcnRGcm9tQ29udGVudHMobV9s
YXN0RmF0RmluZ2Vyc1Jlc3VsdC5hZGp1c3RlZFBvc2l0aW9uKCkpOworICAgIFBsYXRmb3JtTW91
c2VFdmVudCBtb3VzZVJlbGVhc2UoZG9jdW1lbnRWaWV3cG9ydEFkanVzdGVkUG9zaXRpb24sIG1f
bGFzdFNjcmVlblBvaW50LCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVJlbGVhc2VkLCAxLCBMZWZ0QnV0
dG9uLCBzaGlmdEFjdGl2ZSwgY3RybEFjdGl2ZSwgYWx0QWN0aXZlLCBUb3VjaFNjcmVlbik7CisK
ICAgICBtX3dlYlBhZ2UtPmhhbmRsZU1vdXNlRXZlbnQobW91c2VSZWxlYXNlKTsKIH0KIApAQCAt
MTM4LDEzICsxNDQsMTUgQEAgdm9pZCBUb3VjaEV2ZW50SGFuZGxlcjo6aGFuZGxlVG91Y2hQb2lu
dChjb25zdCBQbGF0Zm9ybTo6VG91Y2hQb2ludCYgcG9pbnQsIHVuc2kKICAgICAgICAgICAgIG1f
d2ViUGFnZS0+bV90YXBIaWdobGlnaHQtPmhpZGUoKTsKICAgICAgICAgICAgIG1fd2ViUGFnZS0+
bV9zZWxlY3Rpb25IaWdobGlnaHQtPmhpZGUoKTsKIAotICAgICAgICAgICAgSW50UG9pbnQgYWRq
dXN0ZWRQb2ludCA9IG1fd2ViUGFnZS0+bWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChtX2xhc3RG
YXRGaW5nZXJzUmVzdWx0LmFkanVzdGVkUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBQbGF0Zm9y
bU1vdXNlRXZlbnQgbW91c2VFdmVudChhZGp1c3RlZFBvaW50LCBtX2xhc3RTY3JlZW5Qb2ludCwg
UGxhdGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZCwgMSwgTGVmdEJ1dHRvbiwgc2hpZnRBY3RpdmUs
IGN0cmxBY3RpdmUsIGFsdEFjdGl2ZSwgVG91Y2hTY3JlZW4pOworICAgICAgICAgICAgY29uc3Qg
UGxhdGZvcm06OlZpZXdwb3J0QWNjZXNzb3IqIHZpZXdwb3J0QWNjZXNzb3IgPSBtX3dlYlBhZ2Ut
Pm1fd2Via2l0VGhyZWFkVmlld3BvcnRBY2Nlc3NvcjsKKyAgICAgICAgICAgIEludFBvaW50IGRv
Y3VtZW50Vmlld3BvcnRBZGp1c3RlZFBvc2l0aW9uID0gdmlld3BvcnRBY2Nlc3Nvci0+ZG9jdW1l
bnRWaWV3cG9ydEZyb21Db250ZW50cyhtX2xhc3RGYXRGaW5nZXJzUmVzdWx0LmFkanVzdGVkUG9z
aXRpb24oKSk7CisgICAgICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VFdmVudChkb2N1
bWVudFZpZXdwb3J0QWRqdXN0ZWRQb3NpdGlvbiwgbV9sYXN0U2NyZWVuUG9pbnQsIFBsYXRmb3Jt
RXZlbnQ6Ok1vdXNlUmVsZWFzZWQsIDEsIExlZnRCdXR0b24sIHNoaWZ0QWN0aXZlLCBjdHJsQWN0
aXZlLCBhbHRBY3RpdmUsIFRvdWNoU2NyZWVuKTsKIAogICAgICAgICAgICAgbV93ZWJQYWdlLT5o
YW5kbGVNb3VzZUV2ZW50KG1vdXNlRXZlbnQpOwogCiAgICAgICAgICAgICBpZiAobV9zaG91bGRS
ZXF1ZXN0U3BlbGxDaGVja09wdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBJbnRQb2ludCBwaXhl
bFBvc2l0aW9uUmVsYXRpdmVUb1ZpZXdwb3J0ID0gbV93ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVk
KGFkanVzdGVkUG9pbnQpOworICAgICAgICAgICAgICAgIEludFBvaW50IHBpeGVsUG9zaXRpb25S
ZWxhdGl2ZVRvVmlld3BvcnQgPSB2aWV3cG9ydEFjY2Vzc29yLT5waXhlbFZpZXdwb3J0RnJvbUNv
bnRlbnRzKAorICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydEFjY2Vzc29yLT5yb3VuZFRvUGl4
ZWxGcm9tRG9jdW1lbnRDb250ZW50cyhXZWJDb3JlOjpGbG9hdFBvaW50KG1fbGFzdEZhdEZpbmdl
cnNSZXN1bHQuYWRqdXN0ZWRQb3NpdGlvbigpKSkpOwogICAgICAgICAgICAgICAgIEludFNpemUg
c2NyZWVuT2Zmc2V0KG1fbGFzdFNjcmVlblBvaW50IC0gcGl4ZWxQb3NpdGlvblJlbGF0aXZlVG9W
aWV3cG9ydCk7CiAgICAgICAgICAgICAgICAgbV93ZWJQYWdlLT5tX2lucHV0SGFuZGxlci0+cmVx
dWVzdFNwZWxsaW5nQ2hlY2tpbmdPcHRpb25zKG1fc3BlbGxDaGVja09wdGlvblJlcXVlc3QsIHNj
cmVlbk9mZnNldCk7CiAgICAgICAgICAgICAgICAgbV9zaG91bGRSZXF1ZXN0U3BlbGxDaGVja09w
dGlvbnMgPSBmYWxzZTsKQEAgLTE3MSwxMiArMTc5LDE1IEBAIHZvaWQgVG91Y2hFdmVudEhhbmRs
ZXI6OmhhbmRsZVRvdWNoUG9pbnQoY29uc3QgUGxhdGZvcm06OlRvdWNoUG9pbnQmIHBvaW50LCB1
bnNpCiAKIHZvaWQgVG91Y2hFdmVudEhhbmRsZXI6OmhhbmRsZUZhdEZpbmdlclByZXNzZWQoYm9v
bCBzaGlmdEFjdGl2ZSwgYm9vbCBhbHRBY3RpdmUsIGJvb2wgY3RybEFjdGl2ZSkKIHsKKyAgICBj
b25zdCBQbGF0Zm9ybTo6Vmlld3BvcnRBY2Nlc3Nvciogdmlld3BvcnRBY2Nlc3NvciA9IG1fd2Vi
UGFnZS0+bV93ZWJraXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29yOworICAgIEludFBvaW50IGRvY3Vt
ZW50Vmlld3BvcnRBZGp1c3RlZFBvc2l0aW9uID0gdmlld3BvcnRBY2Nlc3Nvci0+ZG9jdW1lbnRW
aWV3cG9ydEZyb21Db250ZW50cyhtX2xhc3RGYXRGaW5nZXJzUmVzdWx0LmFkanVzdGVkUG9zaXRp
b24oKSk7CisKICAgICAvLyBGaXJzdCB1cGRhdGUgdGhlIG1vdXNlIHBvc2l0aW9uIHdpdGggYSBN
b3VzZU1vdmVkIGV2ZW50LgotICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZU1vdmVFdmVudCht
X3dlYlBhZ2UtPm1hcEZyb21Db250ZW50c1RvVmlld3BvcnQobV9sYXN0RmF0RmluZ2Vyc1Jlc3Vs
dC5hZGp1c3RlZFBvc2l0aW9uKCkpLCBtX2xhc3RTY3JlZW5Qb2ludCwgUGxhdGZvcm1FdmVudDo6
TW91c2VNb3ZlZCwgMCwgTGVmdEJ1dHRvbiwgc2hpZnRBY3RpdmUsIGN0cmxBY3RpdmUsIGFsdEFj
dGl2ZSwgVG91Y2hTY3JlZW4pOworICAgIFBsYXRmb3JtTW91c2VFdmVudCBtb3VzZU1vdmVFdmVu
dChkb2N1bWVudFZpZXdwb3J0QWRqdXN0ZWRQb3NpdGlvbiwgbV9sYXN0U2NyZWVuUG9pbnQsIFBs
YXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIDAsIExlZnRCdXR0b24sIHNoaWZ0QWN0aXZlLCBjdHJs
QWN0aXZlLCBhbHRBY3RpdmUsIFRvdWNoU2NyZWVuKTsKICAgICBtX3dlYlBhZ2UtPmhhbmRsZU1v
dXNlRXZlbnQobW91c2VNb3ZlRXZlbnQpOwogCiAgICAgLy8gVGhlbiBzZW5kIHRoZSBNb3VzZVBy
ZXNzZWQgZXZlbnQuCi0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IG1vdXNlUHJlc3NlZEV2ZW50KG1f
d2ViUGFnZS0+bWFwRnJvbUNvbnRlbnRzVG9WaWV3cG9ydChtX2xhc3RGYXRGaW5nZXJzUmVzdWx0
LmFkanVzdGVkUG9zaXRpb24oKSksIG1fbGFzdFNjcmVlblBvaW50LCBQbGF0Zm9ybUV2ZW50OjpN
b3VzZVByZXNzZWQsIDEsIExlZnRCdXR0b24sIHNoaWZ0QWN0aXZlLCBjdHJsQWN0aXZlLCBhbHRB
Y3RpdmUsIFRvdWNoU2NyZWVuKTsKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgbW91c2VQcmVzc2Vk
RXZlbnQoZG9jdW1lbnRWaWV3cG9ydEFkanVzdGVkUG9zaXRpb24sIG1fbGFzdFNjcmVlblBvaW50
LCBQbGF0Zm9ybUV2ZW50OjpNb3VzZVByZXNzZWQsIDEsIExlZnRCdXR0b24sIHNoaWZ0QWN0aXZl
LCBjdHJsQWN0aXZlLCBhbHRBY3RpdmUsIFRvdWNoU2NyZWVuKTsKICAgICBtX3dlYlBhZ2UtPmhh
bmRsZU1vdXNlRXZlbnQobW91c2VQcmVzc2VkRXZlbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9XZWJLaXRUaHJlYWRWaWV3cG9ydEFj
Y2Vzc29yLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1dlYktp
dFRocmVhZFZpZXdwb3J0QWNjZXNzb3IuY3BwCmluZGV4IDVkODI5M2IxOTA5NTIwMjI0ODk1Zjc4
MDU3ZTY5OTVkOWMzYjc3ZGMuLmQ3YzAxZDQ1YzQ0ODhkMzQwMjI5MTQ4MmJlZDMzODM0OTU5ZDEx
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJLaXRTdXBwb3J0L1dl
YktpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9XZWJLaXRTdXBwb3J0L1dlYktpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3IuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
MyBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0yNyw3ICsyNywxNyBAQCBJbnRTaXplIFdlYktpdFRo
cmVhZFZpZXdwb3J0QWNjZXNzb3I6OnBpeGVsQ29udGVudHNTaXplKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoUGxhdGZvcm06OndlYktpdFRocmVhZE1lc3NhZ2VDbGllbnQoKS0+aXNDdXJyZW50VGhy
ZWFkKCkpOwogCi0gICAgcmV0dXJuIG1fd2ViUGFnZVByaXZhdGUtPnRyYW5zZm9ybWVkQ29udGVu
dHNTaXplKCk7CisgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gc2NhbGUoKTsKKworICAgIGlmIChz
Y2FsZUZhY3RvciAhPSAxLjApIHsKKyAgICAgICAgLy8gUm91bmQgZG93biB0byBhdm9pZCBzaG93
aW5nIHBhcnRpYWxseSByZW5kZXJlZCBwaXhlbHMuCisgICAgICAgIEludFNpemUgc2l6ZSA9IGRv
Y3VtZW50Q29udGVudHNTaXplKCk7CisgICAgICAgIHJldHVybiBJbnRTaXplKAorICAgICAgICAg
ICAgZmxvb3JmKHNpemUud2lkdGgoKSAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgICAgIGZsb29y
ZihzaXplLmhlaWdodCgpICogc2NhbGVGYWN0b3IpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZG9j
dW1lbnRDb250ZW50c1NpemUoKTsKIH0KIAogSW50U2l6ZSBXZWJLaXRUaHJlYWRWaWV3cG9ydEFj
Y2Vzc29yOjpkb2N1bWVudENvbnRlbnRzU2l6ZSgpIGNvbnN0CkBAIC00MSw3ICs1MSw3IEBAIElu
dFBvaW50IFdlYktpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3I6OnBpeGVsU2Nyb2xsUG9zaXRpb24o
KSBjb25zdAogewogICAgIEFTU0VSVChQbGF0Zm9ybTo6d2ViS2l0VGhyZWFkTWVzc2FnZUNsaWVu
dCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CiAKLSAgICByZXR1cm4gbV93ZWJQYWdlUHJpdmF0ZS0+
dHJhbnNmb3JtZWRTY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVybiByb3VuZFRvUGl4ZWxGcm9t
RG9jdW1lbnRDb250ZW50cyhkb2N1bWVudFNjcm9sbFBvc2l0aW9uKCkpOwogfQogCiBJbnRQb2lu
dCBXZWJLaXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29yOjpkb2N1bWVudFNjcm9sbFBvc2l0aW9uKCkg
Y29uc3QKQEAgLTYyLDcgKzcyLDcgQEAgSW50U2l6ZSBXZWJLaXRUaHJlYWRWaWV3cG9ydEFjY2Vz
c29yOjpkb2N1bWVudFZpZXdwb3J0U2l6ZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKFBsYXRmb3Jt
Ojp3ZWJLaXRUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmlzQ3VycmVudFRocmVhZCgpKTsKIAotICAg
IHJldHVybiBtX3dlYlBhZ2VQcml2YXRlLT5hY3R1YWxWaXNpYmxlU2l6ZSgpOworICAgIHJldHVy
biByb3VuZFRvRG9jdW1lbnRGcm9tUGl4ZWxDb250ZW50cyhwaXhlbFZpZXdwb3J0UmVjdCgpKS5z
aXplKCk7CiB9CiAKIEludFBvaW50IFdlYktpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3I6OmRlc3Rp
bmF0aW9uU3VyZmFjZU9mZnNldCgpIGNvbnN0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>