<?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>195094</bug_id>
          
          <creation_ts>2019-02-27 03:22:19 -0800</creation_ts>
          <short_desc>[CoordinatedGraphics] Unify all LayerTreeHost classes</short_desc>
          <delta_ts>2019-02-28 08:46:45 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1510408</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-27 03:22:19 -0800</bug_when>
    <thetext>There&apos;s no reason to have 3 classes, since currently LayerTreeHost is only used by coordinated graphics based ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510409</commentid>
    <comment_count>1</comment_count>
      <attachid>363083</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-27 03:24:04 -0800</bug_when>
    <thetext>Created attachment 363083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510411</commentid>
    <comment_count>2</comment_count>
      <attachid>363085</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-27 04:12:43 -0800</bug_when>
    <thetext>Created attachment 363085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510412</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-27 04:15:07 -0800</bug_when>
    <thetext>Attachment 363085 did not pass style-queue:


ERROR: Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.cpp:122:  Tab found; better to use spaces  [whitespace/tab] [1]
ERROR: Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.cpp:299:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/WebProcess/WebPage/AcceleratedDrawingArea.cpp:311:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:142:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:151:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:161:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:167:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:191:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:305:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/WebProcess/WebPage/WebPage.cpp:6377:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/UIProcess/gtk/WaylandCompositor.cpp:150:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/UIProcess/gtk/WaylandCompositor.cpp:155:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/UIProcess/gtk/WaylandCompositor.cpp:345:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/UIProcess/gtk/WaylandCompositor.cpp:559:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 14 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510413</commentid>
    <comment_count>4</comment_count>
      <attachid>363085</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-27 04:45:34 -0800</bug_when>
    <thetext>Comment on attachment 363085
Patch

Oops, wrong patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510414</commentid>
    <comment_count>5</comment_count>
      <attachid>363086</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-27 04:49:08 -0800</bug_when>
    <thetext>Created attachment 363086
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510427</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-27 06:01:51 -0800</bug_when>
    <thetext>I don&apos;t understand the windows build failure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510507</commentid>
    <comment_count>7</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2019-02-27 11:01:51 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #6)
&gt; I don&apos;t understand the windows build failure

I&apos;ll take a look at it now. Just a heads up we&apos;re working on enabling coordinated graphics in https://bugs.webkit.org/show_bug.cgi?id=186364 and there&apos;s also the matter of https://bugs.webkit.org/show_bug.cgi?id=186444</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510548</commentid>
    <comment_count>8</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2019-02-27 11:58:36 -0800</bug_when>
    <thetext>LayerTreeHost has a #if USE(COORDINATED_GRAPHICS_THREADED) around it. That&apos;s not enabled on WinCairo currently. As mentioned we&apos;re working through that on a different bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510715</commentid>
    <comment_count>9</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2019-02-27 17:07:41 -0800</bug_when>
    <thetext>Carlos and Zan one thing about this patch I have a feeling about is that GTK is going to break without OpenGL support.

https://github.com/WebKit/webkit/blob/master/Source/cmake/OptionsGTK.cmake#L293-L327

So you might also want to check that out before it lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510735</commentid>
    <comment_count>10</comment_count>
      <attachid>363086</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-02-27 17:29:51 -0800</bug_when>
    <thetext>Comment on attachment 363086
Patch

Thank you for giving us heads-up about WinCairo issue. I&apos;m going to look into it today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510773</commentid>
    <comment_count>11</comment_count>
      <attachid>363180</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-02-27 19:05:41 -0800</bug_when>
    <thetext>Created attachment 363180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510775</commentid>
    <comment_count>12</comment_count>
      <attachid>363180</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-02-27 19:11:02 -0800</bug_when>
    <thetext>Comment on attachment 363180
Patch

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

&gt; Source/WebKit/ChangeLog:3
&gt; +        [CoordinatedGraphics] Unify all LayerTreeHost classes

Why don&apos;t you unify AcceleratedDrawingArea and DrawingAreaImpl?
DrawingAreaImpl should be renamed to DrawingAreaTextureMapper, then DrawingAreaCoordinatedGraphics after WinCairo will switch to CoordinatedGraphics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510882</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-28 02:02:01 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #11)
&gt; Created attachment 363180 [details]
&gt; Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510893</commentid>
    <comment_count>14</comment_count>
      <attachid>363216</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-28 03:50:44 -0800</bug_when>
    <thetext>Created attachment 363216
Patch for landing

This should also fix the GTK build with OpenGL disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510894</commentid>
    <comment_count>15</comment_count>
      <attachid>363217</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-28 04:26:22 -0800</bug_when>
    <thetext>Created attachment 363217
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510897</commentid>
    <comment_count>16</comment_count>
      <attachid>363218</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-28 04:36:51 -0800</bug_when>
    <thetext>Created attachment 363218
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510903</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-28 05:17:52 -0800</bug_when>
    <thetext>Committed r242199: &lt;https://trac.webkit.org/changeset/242199&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510930</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-02-28 08:46:45 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #12)
&gt; Comment on attachment 363180 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=363180&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:3
&gt; &gt; +        [CoordinatedGraphics] Unify all LayerTreeHost classes
&gt; 
&gt; Why don&apos;t you unify AcceleratedDrawingArea and DrawingAreaImpl?
&gt; DrawingAreaImpl should be renamed to DrawingAreaTextureMapper, then
&gt; DrawingAreaCoordinatedGraphics after WinCairo will switch to
&gt; CoordinatedGraphics.

Sure, see https://bugs.webkit.org/show_bug.cgi?id=195167 But I used DrawingAreaCoordinatedGraphics directly.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363083</attachid>
            <date>2019-02-27 03:24:04 -0800</date>
            <delta_ts>2019-02-27 04:12:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-layer-tree-host.diff</filename>
            <type>text/plain</type>
            <size>55334</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZGE2YmQ1YmUxNDEuLmU5ZTI4YzkxYTJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDYzIEBACisyMDE5LTAyLTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbQ29vcmRpbmF0ZWRHcmFwaGljc10gVW5pZnkgYWxsIExheWVyVHJl
ZUhvc3QgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk1MDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlcmUncyBubyByZWFzb24gdG8gaGF2ZSAzIGNsYXNzZXMsIHNpbmNlIGN1cnJlbnRs
eSBMYXllclRyZWVIb3N0IGlzIG9ubHkgdXNlZCBieSBjb29yZGluYXRlZCBncmFwaGljcyBiYXNl
ZAorICAgICAgICBwb3J0cy4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmV4aXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZU5vdyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9U
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAuCisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0Ojp+TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNl
dExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmZvcmNl
UmVwYWludEFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENo
YW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb250ZW50c1NpemVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxh
eVJlZnJlc2hNb25pdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkRmx1
c2hSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb21taXRTY2Vu
ZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZnJhbWVDb21wbGV0ZSk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6Om5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JD
b21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmRpZERlc3Ryb3lH
TENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojp3aWxsUmVuZGVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpkaWRSZW5kZXJGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0
b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5
UmVmcmVzaE1vbml0b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpy
ZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNldE5lZWRzRGlzcGxheUlu
UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmg6IFJl
bW92ZWQuCisKIDIwMTktMDItMjYgIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5j
b20+IGFuZCBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbV1BFXSBBZGQgQVBJIGZvciB3ZWJ2aWV3IGJhY2tncm91bmQgY29sb3IgY29uZmlndXJh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMGE1MzM1YTNjZjguLjRjYjgwNGQwZWYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTgxLDExICs4MSw5IEBAIGxpc3QoQVBQRU5E
IFdlYktpdF9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2lu
Z0FyZWEuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAotICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKLSAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
Y3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9X
ZWJQYWdlV2luLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBi
L1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggZWExYmY5N2Y4OTMuLjkxZjhjNDll
MzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0dUSy50eHQKQEAgLTQwMywxMiArNDAzLDEwIEBAIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAogCiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKIFdlYlByb2Nlc3MvV2Vi
UGFnZS9BY2NlbGVyYXRlZFN1cmZhY2UuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9y
LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCitXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dAppbmRl
eCA5Yzk1OGJmM2UwMi4uNTQwNWYyNDNmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291
cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dApAQCAtMjQzLDEx
ICsyNDMsOSBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dwZS9XZWJQb3B1cE1lbnVXUEUu
Y3BwCiAKIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAKLVdlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAotV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwCitXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVI
b3N0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3N0cmVhbWVyL1dlYlBhZ2VHU3RyZWFtZXIu
Y3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKaW5kZXggMzA0ZGI4ODg1MTYuLmM2OTgyNjc1YzU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRl
ZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9B
Y2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcApAQCAtNjYsMjQgKzY2LDYgQEAgQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYShXZWJQYWdlJiB3ZWJQYWdlLCBjb25z
dCBXZWJQYWdlQ3IKICAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0RGV2aWNlU2NhbGVGYWN0
b3IocGFyYW1ldGVycy5kZXZpY2VTY2FsZUZhY3Rvcik7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1faXNQYWludGluZ0Vu
YWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXko
KTsKLX0KLQotdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3Qo
cmVjdCk7Ci19Ci0KIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2Nyb2xsKGNvbnN0IElu
dFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIGlm
ICghbV9pc1BhaW50aW5nRW5hYmxlZCkKQEAgLTM0MywxOCArMzI1LDE0IEBAIHZvaWQgQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShHcmFwaGlj
c0xheWVyKiBncmFwCiAKICAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7CiAgICAgaWYgKG1f
cHJldmlvdXNMYXllclRyZWVIb3N0KSB7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQog
ICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBXVEZNb3ZlKG1fcHJldmlvdXNMYXllclRyZWVIb3N0
KTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRJc0Rpc2NhcmRhYmxlKGZhbHNlKTsKICAg
ICAgICAgaWYgKCFtX2lzUGFpbnRpbmdTdXNwZW5kZWQpCiAgICAgICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnJlc3VtZVJlbmRlcmluZygpOwogICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlU3RhdGVJ
c0Zyb3plbikKICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkKHRydWUpOwotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0jZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBMYXllclRy
ZWVIb3N0OjpjcmVhdGUobV93ZWJQYWdlKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxMYXllclRyZWVIb3N0PihtX3dlYlBhZ2UpOwogCiAgICAgICAgIGlmICgh
bV9sYXllclRyZWVIb3N0KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDE2ICszNzEsMTIg
QEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGVOb3coKQogICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3RvcCgpOwogICAgIG1fd2Fu
dHNUb0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOwogCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQogICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwogICAgIG1f
cHJldmlvdXNMYXllclRyZWVIb3N0ID0gV1RGTW92ZShtX2xheWVyVHJlZUhvc3QpOwogICAgIG1f
cHJldmlvdXNMYXllclRyZWVIb3N0LT5zZXRJc0Rpc2NhcmRhYmxlKHRydWUpOwogICAgIG1fcHJl
dmlvdXNMYXllclRyZWVIb3N0LT5wYXVzZVJlbmRlcmluZygpOwogICAgIG1fcHJldmlvdXNMYXll
clRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoZmFsc2UpOwogICAgIG1f
ZGlzY2FyZFByZXZpb3VzTGF5ZXJUcmVlSG9zdFRpbWVyLnN0YXJ0T25lU2hvdCg1X3MpOwotI2Vs
c2UKLSAgICBtX2xheWVyVHJlZUhvc3QgPSBudWxscHRyOwotI2VuZGlmCiB9CiAKIHZvaWQgQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZGlzY2FyZFByZXZpb3VzTGF5ZXJUcmVlSG9zdCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdp
bmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERy
YXdpbmdBcmVhLmgKaW5kZXggZjdlZjlmNmY1MzUuLjUzZTgzZGZjYzRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5n
QXJlYS5oCkBAIC00MCw4ICs0MCw2IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIC8vIERy
YXdpbmdBcmVhCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0
TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihib29sKSBvdmVycmlkZTsKICAgICBib29sIGxheWVyVHJl
ZVN0YXRlSXNGcm96ZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xheWVyVHJlZVN0YXRl
SXNGcm96ZW47IH0KQEAgLTEyOCw5ICsxMjYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgUnVuTG9vcDo6
VGltZXI8QWNjZWxlcmF0ZWREcmF3aW5nQXJlYT4gbV9leGl0Q29tcG9zaXRpbmdUaW1lcjsKIAog
ICAgIC8vIFRoZSBsYXllciB0cmVlIGhvc3QgdGhhdCBoYW5kbGVzIGFjY2VsZXJhdGVkIGNvbXBv
c2l0aW5nLgotICAgIFJlZlB0cjxMYXllclRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CisgICAg
c3RkOjp1bmlxdWVfcHRyPExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAotICAgIFJl
ZlB0cjxMYXllclRyZWVIb3N0PiBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8TGF5ZXJUcmVlSG9zdD4gbV9wcmV2aW91c0xheWVyVHJlZUhvc3Q7CiAgICAgUnVu
TG9vcDo6VGltZXI8QWNjZWxlcmF0ZWREcmF3aW5nQXJlYT4gbV9kaXNjYXJkUHJldmlvdXNMYXll
clRyZWVIb3N0VGltZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDkzYjdhMmRkZTcyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QuaCIKLQotI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCi0jaW5j
bHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KLQotI2lmIFVTRShHTElC
X0VWRU5UX0xPT1ApCi0jaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5Lmg+
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotUmVmPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpjcmVhdGUoV2ViUGFnZSYgd2ViUGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Qod2ViUGFnZSkpOwotfQotCi1Db29yZGluYXRlZExheWVy
VHJlZUhvc3Q6On5Db29yZGluYXRlZExheWVyVHJlZUhvc3QoKQotewotfQotCi1Db29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlJiB3ZWJQYWdl
KQotICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQotICAgICwgbV9jb29yZGluYXRvcih3ZWJQ
YWdlLmNvcmVQYWdlKCksICp0aGlzKQotICAgICwgbV9sYXllckZsdXNoVGltZXIoUnVuTG9vcDo6
bWFpbigpLCB0aGlzLCAmQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJG
aXJlZCkKLXsKLSNpZiBVU0UoR0xJQl9FVkVOVF9MT09QKQotICAgIG1fbGF5ZXJGbHVzaFRpbWVy
LnNldFByaW9yaXR5KFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6TGF5ZXJGbHVzaFRpbWVyKTsKLSAg
ICBtX2xheWVyRmx1c2hUaW1lci5zZXROYW1lKCJbV2ViS2l0XSBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3QiKTsKLSNlbmRpZgotICAgIG1fY29vcmRpbmF0b3IuY3JlYXRlUm9vdExheWVyKG1fd2Vi
UGFnZS5zaXplKCkpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUxheWVyRmx1c2goKQotewotICAgIGlmICgh
bV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fc2NoZWR1bGVkV2hpbGVXYWl0
aW5nRm9yUmVuZGVyZXIgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX2xheWVyRmx1c2hUaW1l
ci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKLXsKLSAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9w
KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaWV3T3ZlcmxheVJv
b3RMYXllcihHcmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikKLXsKLSAgICBMYXll
clRyZWVIb3N0OjpzZXRWaWV3T3ZlcmxheVJvb3RMYXllcih2aWV3T3ZlcmxheVJvb3RMYXllcik7
Ci0gICAgbV9jb29yZGluYXRvci5zZXRWaWV3T3ZlcmxheVJvb3RMYXllcih2aWV3T3ZlcmxheVJv
b3RMYXllcik7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRSb290Q29t
cG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIG1fY29v
cmRpbmF0b3Iuc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBjYW5jZWxQ
ZW5kaW5nTGF5ZXJGbHVzaCgpOwotCi0gICAgbV9jb29yZGluYXRvci5pbnZhbGlkYXRlKCk7Ci0g
ICAgTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkKLXsKLSAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBm
b3IgcnVubmluZyBsYXlvdXQgdGVzdHMuIFNpbmNlIGluIHRoaXMgY2FzZSB3ZSBhcmUgbm90IHdh
aXRpbmcgZm9yIGEgVUlQcm9jZXNzIHRvIHJlcGx5IG5pY2VseS4KLSAgICAvLyBJbnN0ZWFkIHdl
IGFyZSBqdXN0IHRyaWdnZXJpbmcgZm9yY2VSZXBhaW50LiBCdXQgd2Ugc3RpbGwgd2FudCB0byBo
YXZlIHRoZSBzY3JpcHRlZCBhbmltYXRpb24gY2FsbGJhY2tzIGJlaW5nIGV4ZWN1dGVkLgotICAg
IG1fY29vcmRpbmF0b3Iuc3luY0Rpc3BsYXlTdGF0ZSgpOwotCi0gICAgLy8gV2UgbmVlZCB0byBz
Y2hlZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhlIGZvcmNlZCBwYWludCBtaWdodCBj
YW5jZWwgYSBsYXRlciBleHBlY3RlZCBmbHVzaC4KLSAgICAvLyBUaGlzIGlzIGFsaWduZWQgd2l0
aCBMYXllclRyZWVIb3N0Q0EuCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0KLSAgICBpZiAo
bV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb29yZGlu
YXRvci5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKLX0KLQotYm9vbCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKLXsK
LSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLQotICAgIC8vIFdlIHdhbnQgYSBjbGVhbiByZXBh
aW50LCBtZWFuaW5nIHRoYXQgaWYgd2UncmUgY3VycmVudGx5IHdhaXRpbmcgZm9yIHRoZSByZW5k
ZXJlcgotICAgIC8vIHRvIGZpbmlzaCBhbiB1cGRhdGUsIHdlJ2xsIGhhdmUgdG8gc2NoZWR1bGUg
YW5vdGhlciBmbHVzaCB3aGVuIGl0J3MgZG9uZS4KLSAgICBBU1NFUlQoIW1fZm9yY2VSZXBhaW50
QXN5bmMuY2FsbGJhY2tJRCk7Ci0gICAgbV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEID0g
T3B0aW9uYWxDYWxsYmFja0lEKGNhbGxiYWNrSUQpOwotICAgIG1fZm9yY2VSZXBhaW50QXN5bmMu
bmVlZHNGcmVzaEZsdXNoID0gbV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlcjsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNpemVE
aWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICBtX2Nvb3JkaW5hdG9yLnNp
emVEaWRDaGFuZ2UobmV3U2l6ZSk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX2Nvb3JkaW5hdG9yLnNldFZpc2libGVDb250ZW50
c1JlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUoYm9vbCBmb3JjZVJlcGFpbnQpCi17
Ci0gICAgbV9pc1dhaXRpbmdGb3JSZW5kZXJlciA9IGZhbHNlOwotICAgIGJvb2wgc2NoZWR1bGVk
V2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fc2NoZWR1bGVkV2hpbGVX
YWl0aW5nRm9yUmVuZGVyZXIsIGZhbHNlKTsKLSAgICBtX2Nvb3JkaW5hdG9yLnJlbmRlck5leHRG
cmFtZSgpOwotCi0gICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCkgewotICAg
ICAgICAvLyBJZiB0aGUgYXN5bmNocm9ub3VzIGZvcmNlLXJlcGFpbnQgbmVlZHMgYSBzZXBhcmF0
ZSBmcmVzaCBmbHVzaCwgaXQgd2FzIGR1ZSB0bwotICAgICAgICAvLyB0aGUgZm9yY2UtcmVwYWlu
dCByZXF1ZXN0IGJlaW5nIHJlZ2lzdGVyZWQgd2hpbGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
IHdhcwotICAgICAgICAvLyB3YWl0aW5nIGZvciB0aGUgcmVuZGVyZXIgdG8gZmluaXNoIGFuIHVw
ZGF0ZS4KLSAgICAgICAgQVNTRVJUKCFtX2ZvcmNlUmVwYWludEFzeW5jLm5lZWRzRnJlc2hGbHVz
aCB8fCBzY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlcik7Ci0KLSAgICAgICAgLy8gRXhl
Y3V0ZSB0aGUgY2FsbGJhY2sgaWYgYW5vdGhlciBsYXllciBmbHVzaCBhbmQgdGhlIHN1YnNlcXVl
bnQgc3RhdGUgdXBkYXRlCi0gICAgICAgIC8vIGFyZW4ndCBuZWVkZWQuIElmIHRoZXkgYXJlLCB0
aGUgY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoaXMgZnVuY3Rpb24KLSAgICAgICAg
Ly8gaXMgY2FsbGVkIGFmdGVyIHRoZSBuZXh0IHVwZGF0ZS4KLSAgICAgICAgaWYgKCFtX2ZvcmNl
UmVwYWludEFzeW5jLm5lZWRzRnJlc2hGbHVzaCkgewotICAgICAgICAgICAgbV93ZWJQYWdlLnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5
bmMuY2FsbGJhY2tJRC5jYWxsYmFja0lEKCkpKTsKLSAgICAgICAgICAgIG1fZm9yY2VSZXBhaW50
QXN5bmMuY2FsbGJhY2tJRCA9IE9wdGlvbmFsQ2FsbGJhY2tJRCgpOwotICAgICAgICB9Ci0gICAg
ICAgIG1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoID0gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaWYgKHNjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyIHx8IG1fbGF5ZXJGbHVz
aFRpbWVyLmlzQWN0aXZlKCkgfHwgZm9yY2VSZXBhaW50KSB7Ci0gICAgICAgIG1fbGF5ZXJGbHVz
aFRpbWVyLnN0b3AoKTsKLSAgICAgICAgaWYgKGZvcmNlUmVwYWludCkKLSAgICAgICAgICAgIG1f
Y29vcmRpbmF0b3IuZm9yY2VGcmFtZVN5bmMoKTsKLSAgICAgICAgbGF5ZXJGbHVzaFRpbWVyRmly
ZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRGbHVz
aFJvb3RMYXllcihjb25zdCBGbG9hdFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKLXsKLSAgICAv
LyBCZWNhdXNlIG91ciB2aWV3LXJlbGF0aXZlIG92ZXJsYXkgcm9vdCBsYXllciBpcyBub3QgYXR0
YWNoZWQgdG8gdGhlIEZyYW1lVmlldydzIEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBm
bHVzaCBpdCBtYW51YWxseS4KLSAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKLSAgICAg
ICAgbV92aWV3T3ZlcmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVD
b250ZW50UmVjdCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZs
dXNoVGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV9pc1dhaXRpbmdG
b3JSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb29yZGluYXRvci5zeW5jRGlz
cGxheVN0YXRlKCk7Ci0gICAgbV93ZWJQYWdlLmZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRl
KCk7Ci0gICAgbV93ZWJQYWdlLndpbGxEaXNwbGF5UGFnZSgpOwotCi0gICAgaWYgKCFtX2lzVmFs
aWQgfHwgIW1fY29vcmRpbmF0b3Iucm9vdENvbXBvc2l0aW5nTGF5ZXIoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gSWYgYSBmb3JjZS1yZXBhaW50IGNhbGxiYWNrIHdhcyByZWdpc3RlcmVk
LCB3ZSBzaG91bGQgZm9yY2UgYSAnZnJhbWUgc3luYycgdGhhdAotICAgIC8vIHdpbGwgZ3VhcmFu
dGVlIHVzIGEgY2FsbCB0byByZW5kZXJOZXh0RnJhbWUoKSBvbmNlIHRoZSB1cGRhdGUgaXMgY29t
cGxldGUuCi0gICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCkKLSAgICAgICAg
bV9jb29yZGluYXRvci5mb3JjZUZyYW1lU3luYygpOwotCi0gICAgYm9vbCBkaWRTeW5jID0gbV9j
b29yZGluYXRvci5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKLQotICAgIGlmIChtX25vdGlm
eUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCAmJiBkaWRTeW5jKSB7Ci0gICAgICAgIG1fd2ViUGFn
ZS5kcmF3aW5nQXJlYSgpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOwotICAgICAgICBtX25v
dGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKLXsKLSAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0g
dHJ1ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoTGF5ZXJzQW5k
Rm9yY2VSZXBhaW50KCkKLXsKLSAgICBtX2Nvb3JkaW5hdG9yLmZvcmNlRnJhbWVTeW5jKCk7Ci0g
ICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQotewotICAgIG1fY29vcmRpbmF0
b3IuZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci0gICAgbV93ZWJQYWdlLmNvcmVQ
YWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9y
KCk7Ci19Ci0KLUdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKLXsKLSAgICByZXR1cm4gJm1fY29vcmRpbmF0b3I7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCi17
Ci0gICAgaWYgKG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNo
b3QoMV9zICogbV9jb29yZGluYXRvci5uZXh0QW5pbWF0aW9uU2VydmljZVRpbWUoKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTk3NDUzMTU0Yy4uMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDky
ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICAgIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55
IDEwMCwgSW5jLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0X2gKLSNkZWZp
bmUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0X2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKLQotI2luY2x1ZGUgIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJM
YXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCi0jaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3NM
YXllckZhY3Rvcnk7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwot
Ci1jbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwg
cHVibGljIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAotewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBjcmVhdGUoV2ViUGFnZSYpOwotICAg
IHZpcnR1YWwgfkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
ZXhwbGljaXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UmKTsKLQotICAgIHZvaWQg
c2NoZWR1bGVMYXllckZsdXNoKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5
ZXJGbHVzaCgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwotICAgIHZvaWQgaW52YWxpZGF0ZSgpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBmb3JjZVJlcGFpbnQoKSBvdmVycmlkZTsKLSAgICBib29sIGZv
cmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2l6ZURpZENo
YW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAg
dm9pZCByZW5kZXJOZXh0RnJhbWUoYm9vbCk7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVy
RmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2No
ZWR1bGVBbmltYXRpb24oKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0Vmlld092ZXJsYXlSb290
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwotCi0gICAgLy8gQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Ci0gICAgdm9pZCBkaWRGbHVzaFJvb3RMYXllcihjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkgb3ZlcnJpZGUgeyBzY2hlZHVsZUxheWVyRmx1c2go
KTsgfTsKLSAgICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZsdXNoTGF5ZXJzQW5kRm9y
Y2VSZXBhaW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZCgp
OwotCi0gICAgQ29tcG9zaXRpbmdDb29yZGluYXRvciBtX2Nvb3JkaW5hdG9yOwotICAgIGJvb2wg
bV9pc1dhaXRpbmdGb3JSZW5kZXJlciB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3NjaGVkdWxlZFdo
aWxlV2FpdGluZ0ZvclJlbmRlcmVyIHsgZmFsc2UgfTsKLSAgICBzdHJ1Y3QgewotICAgICAgICBP
cHRpb25hbENhbGxiYWNrSUQgY2FsbGJhY2tJRDsKLSAgICAgICAgYm9vbCBuZWVkc0ZyZXNoRmx1
c2ggeyBmYWxzZSB9OwotICAgIH0gbV9mb3JjZVJlcGFpbnRBc3luYzsKLSAgICBSdW5Mb29wOjpU
aW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwCnNpbWlsYXJp
dHkgaW5kZXggNTMlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3Bw
CnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDEwMGZjNjRhNjE5Li5mNmE1OWM1YjE5YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVI
b3N0LmNwcApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICogQ29weXJpZ2h0IChDKSAyMDEy
IENvbXBhbnkgMTAwLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE5IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI3LDE0ICsyNywyMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3QuaCIKIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJF
QURFRCkKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpIHx8IFVTRShURVhU
VVJFX01BUFBFUikKIAotI2luY2x1ZGUgIkFjY2VsZXJhdGVkU3VyZmFjZS5oIgorI2luY2x1ZGUg
IkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQ
cm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xs
ZXIuaD4KKworI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCisjaW5jbHVkZSA8d3RmL2dsaWIvUnVu
TG9vcFNvdXJjZVByaW9yaXR5Lmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ2LDIxICs1MiwyMSBAQCBzdGF0aWMgY29uc3QgUGxh
dGZvcm1EaXNwbGF5SUQgY29tcG9zaXRpbmdEaXNwbGF5SUQgPSAxOwogc3RhdGljIGNvbnN0IFBs
YXRmb3JtRGlzcGxheUlEIGNvbXBvc2l0aW5nRGlzcGxheUlEID0gcHJpbWFyeURpc3BsYXlJRDsK
ICNlbmRpZgogCi1SZWY8VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IFRocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUoV2ViUGFnZSYgd2ViUGFnZSkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCh3
ZWJQYWdlKSk7Ci19Ci0KLVRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp+VGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoKQotewotfQotCi1UaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYg
d2ViUGFnZSkKLSAgICA6IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorTGF5ZXJU
cmVlSG9zdDo6TGF5ZXJUcmVlSG9zdChXZWJQYWdlJiB3ZWJQYWdlKQorICAgIDogbV93ZWJQYWdl
KHdlYlBhZ2UpCisgICAgLCBtX2Nvb3JkaW5hdG9yKHdlYlBhZ2UuY29yZVBhZ2UoKSwgKnRoaXMp
CiAgICAgLCBtX2NvbXBvc2l0b3JDbGllbnQoKnRoaXMpCiAgICAgLCBtX3N1cmZhY2UoQWNjZWxl
cmF0ZWRTdXJmYWNlOjpjcmVhdGUod2ViUGFnZSwgKnRoaXMpKQogICAgICwgbV92aWV3cG9ydENv
bnRyb2xsZXIod2ViUGFnZS5zaXplKCkpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcihSdW5Mb29w
OjptYWluKCksIHRoaXMsICZMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKIHsK
KyNpZiBVU0UoR0xJQl9FVkVOVF9MT09QKQorICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnNldFByaW9y
aXR5KFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6TGF5ZXJGbHVzaFRpbWVyKTsKKyAgICBtX2xheWVy
Rmx1c2hUaW1lci5zZXROYW1lKCJbV2ViS2l0XSBMYXllclRyZWVIb3N0Iik7CisjZW5kaWYKKyAg
ICBtX2Nvb3JkaW5hdG9yLmNyZWF0ZVJvb3RMYXllcihtX3dlYlBhZ2Uuc2l6ZSgpKTsKKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKKwogICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1f
d2ViUGFnZS5tYWluRnJhbWVWaWV3KCkpIHsKICAgICAgICAgYXV0byBjb250ZW50c1NpemUgPSBm
cmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpOwogICAgICAgICBpZiAoIWNvbnRlbnRzU2l6ZS5pc0Vt
cHR5KCkpCkBAIC04Nyw3MCArOTMsOTYgQEAgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlAKICAgICBk
aWRDaGFuZ2VWaWV3cG9ydCgpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjppbnZhbGlkYXRlKCkKK0xheWVyVHJlZUhvc3Q6On5MYXllclRyZWVIb3N0KCkKIHsK
LSAgICBtX2NvbXBvc2l0b3ItPmludmFsaWRhdGUoKTsKLSAgICBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmludmFsaWRhdGUoKTsKLSAgICBtX3N1cmZhY2UgPSBudWxscHRyOworICAgIEFTU0VS
VCghbV9pc1ZhbGlkKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Zm9yY2VSZXBhaW50KCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCiB7Ci0gICAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKTsKLSAgICBtX2NvbXBvc2l0b3ItPmZvcmNl
UmVwYWludCgpOwotfQorICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9PSBs
YXllckZsdXNoaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIFRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmcmFtZUNvbXBsZXRlKCkKLXsKLSAgICBtX2NvbXBvc2l0
b3ItPmZyYW1lQ29tcGxldGUoKTsKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9
IGxheWVyRmx1c2hpbmdFbmFibGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkKSB7CisgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKIH0KIAotdm9pZCBUaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRv
clVwZGF0ZSgpCit2b2lkIExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCiB7Ci0g
ICAgLy8gRmx1c2ggbGF5ZXJzIHRvIGNhdXNlIGEgcmVwYWludC4gSWYgbV9pc1dhaXRpbmdGb3JS
ZW5kZXJlciB3YXMgdHJ1ZSBhdCB0aGlzIHBvaW50LCB0aGUgbGF5ZXIKLSAgICAvLyBmbHVzaCB3
b24ndCBkbyBhbnl0aGluZywgYnV0IHRoYXQgbWVhbnMgdGhlcmUncyBhIHBhaW50aW5nIG9uZ29p
bmcgdGhhdCB3aWxsIHNlbmQgdGhlCi0gICAgLy8gZGlzcGxheSByZWZyZXNoIG5vdGlmaWNhdGlv
biB3aGVuIGl0J3MgZG9uZS4KLSAgICBmbHVzaExheWVyc0FuZEZvcmNlUmVwYWludCgpOworICAg
IGlmICghbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKSB7CisgICAgICAgIG1fc2NoZWR1bGVkV2hp
bGVXYWl0aW5nRm9yUmVuZGVyZXIgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVyRmx1
c2hUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6aGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wgaGFz
QmVlblJlc2NoZWR1bGVkKQordm9pZCBMYXllclRyZWVIb3N0OjpjYW5jZWxQZW5kaW5nTGF5ZXJG
bHVzaCgpCiB7Ci0gICAgLy8gQ2FsbCByZW5kZXJOZXh0RnJhbWUuIElmIGhhc0JlZW5SZXNjaGVk
dWxlZCBpcyB0cnVlLCB0aGUgbGF5ZXIgZmx1c2ggd2lsbCBmb3JjZSBhIHJlcGFpbnQKLSAgICAv
LyB0aGF0IHdpbGwgY2F1c2UgdGhlIGRpc3BsYXkgcmVmcmVzaCBub3RpZmljYXRpb24gdG8gY29t
ZS4KLSAgICByZW5kZXJOZXh0RnJhbWUoaGFzQmVlblJlc2NoZWR1bGVkKTsKLSAgICBtX2NvbXBv
c2l0b3ItPmhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOworICAgIG1fbGF5ZXJG
bHVzaFRpbWVyLnN0b3AoKTsKIH0KIAotdWludDY0X3QgVGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6Om5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpCit2b2lkIExheWVy
VHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKCkKIHsKLSAgICBpZiAoIW1fc3VyZmFjZSkK
LSAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQ7CisgICAgaWYgKG1f
aXNTdXNwZW5kZWQgfHwgbV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9zdXJmYWNlLT5pbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIG1fc3VyZmFjZS0+d2lu
ZG93KCk7CisgICAgbV9jb29yZGluYXRvci5zeW5jRGlzcGxheVN0YXRlKCk7CisgICAgbV93ZWJQ
YWdlLmZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRlKCk7CisgICAgbV93ZWJQYWdlLndpbGxE
aXNwbGF5UGFnZSgpOworCisgICAgaWYgKCFtX2lzVmFsaWQgfHwgIW1fY29vcmRpbmF0b3Iucm9v
dENvbXBvc2l0aW5nTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgYSBmb3Jj
ZS1yZXBhaW50IGNhbGxiYWNrIHdhcyByZWdpc3RlcmVkLCB3ZSBzaG91bGQgZm9yY2UgYSAnZnJh
bWUgc3luYycgdGhhdAorICAgIC8vIHdpbGwgZ3VhcmFudGVlIHVzIGEgY2FsbCB0byByZW5kZXJO
ZXh0RnJhbWUoKSBvbmNlIHRoZSB1cGRhdGUgaXMgY29tcGxldGUuCisgICAgaWYgKG1fZm9yY2VS
ZXBhaW50QXN5bmMuY2FsbGJhY2tJRCkKKyAgICAgICAgbV9jb29yZGluYXRvci5mb3JjZUZyYW1l
U3luYygpOworCisgICAgYm9vbCBkaWRTeW5jID0gbV9jb29yZGluYXRvci5mbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMoKTsKKworICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVz
aCAmJiBkaWRTeW5jKSB7CisgICAgICAgIG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgpLT5sYXllckhv
c3REaWRGbHVzaExheWVycygpOworICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJG
bHVzaCA9IGZhbHNlOworICAgIH0KIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6ZGlkRGVzdHJveUdMQ29udGV4dCgpCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldFJv
b3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7Ci0gICAg
aWYgKG1fc3VyZmFjZSkKLSAgICAgICAgbV9zdXJmYWNlLT5maW5hbGl6ZSgpOworICAgIG1fY29v
cmRpbmF0b3Iuc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiB9CiAKLXZv
aWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OndpbGxSZW5kZXJGcmFtZSgpCit2
b2lkIExheWVyVHJlZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKEdyYXBoaWNzTGF5ZXIq
IHZpZXdPdmVybGF5Um9vdExheWVyKQogewotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1f
c3VyZmFjZS0+d2lsbFJlbmRlckZyYW1lKCk7CisgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9
IHZpZXdPdmVybGF5Um9vdExheWVyOworICAgIG1fY29vcmRpbmF0b3Iuc2V0Vmlld092ZXJsYXlS
b290TGF5ZXIodmlld092ZXJsYXlSb290TGF5ZXIpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpkaWRSZW5kZXJGcmFtZSgpCit2b2lkIExheWVyVHJlZUhvc3Q6
OmludmFsaWRhdGUoKQogewotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1fc3VyZmFjZS0+
ZGlkUmVuZGVyRnJhbWUoKTsKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKKworICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisKKyAgICBtX2Nvb3Jk
aW5hdG9yLmludmFsaWRhdGUoKTsKKyAgICBtX2NvbXBvc2l0b3ItPmludmFsaWRhdGUoKTsKKyAg
ICBtX3N1cmZhY2UgPSBudWxscHRyOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVj
dCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2Uu
bWFpbkZyYW1lVmlldygpOworICAgIGF1dG8qIGZyYW1lVmlldyA9IG1fd2ViUGFnZS5tYWluRnJh
bWVWaWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcgfHwgIWZyYW1lVmlldy0+ZGVsZWdhdGVzU2Ny
b2xsaW5nKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTYxLDMwICsxOTMsMzMgQEAgdm9pZCBU
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRl
bnRzKGNvbnN0IEludFJlY3QKICAgICAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKIH0KIAotdm9p
ZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29udGVudHNTaXplQ2hhbmdlZChj
b25zdCBJbnRTaXplJiBuZXdTaXplKQordm9pZCBMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQo
KQogewotICAgIG1fdmlld3BvcnRDb250cm9sbGVyLmRpZENoYW5nZUNvbnRlbnRzU2l6ZShuZXdT
aXplKTsKLSAgICBpZiAobV9pc0Rpc2NhcmRhYmxlKQotICAgICAgICBtX2Rpc2NhcmRhYmxlU3lu
Y0FjdGlvbnMuYWRkKERpc2NhcmRhYmxlU3luY0FjdGlvbnM6OlVwZGF0ZVZpZXdwb3J0KTsKLSAg
ICBlbHNlCi0gICAgICAgIGRpZENoYW5nZVZpZXdwb3J0KCk7CisgICAgLy8gVGhpcyBpcyBuZWNl
c3NhcnkgZm9yIHJ1bm5pbmcgbGF5b3V0IHRlc3RzLiBTaW5jZSBpbiB0aGlzIGNhc2Ugd2UgYXJl
IG5vdCB3YWl0aW5nIGZvciBhIFVJUHJvY2VzcyB0byByZXBseSBuaWNlbHkuCisgICAgLy8gSW5z
dGVhZCB3ZSBhcmUganVzdCB0cmlnZ2VyaW5nIGZvcmNlUmVwYWludC4gQnV0IHdlIHN0aWxsIHdh
bnQgdG8gaGF2ZSB0aGUgc2NyaXB0ZWQgYW5pbWF0aW9uIGNhbGxiYWNrcyBiZWluZyBleGVjdXRl
ZC4KKyAgICBtX2Nvb3JkaW5hdG9yLnN5bmNEaXNwbGF5U3RhdGUoKTsKKworICAgIC8vIFdlIG5l
ZWQgdG8gc2NoZWR1bGUgYW5vdGhlciBmbHVzaCwgb3RoZXJ3aXNlIHRoZSBmb3JjZWQgcGFpbnQg
bWlnaHQgY2FuY2VsIGEgbGF0ZXIgZXhwZWN0ZWQgZmx1c2guCisgICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7CisKKyAgICBpZiAoIW1faXNXYWl0aW5nRm9yUmVuZGVyZXIpCisgICAgICAgIG1fY29v
cmRpbmF0b3IuZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgbV9jb21wb3NpdG9yLT5m
b3JjZVJlcGFpbnQoKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6
Zm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewotICAgIGlmIChtX2lz
RGlzY2FyZGFibGUpIHsKLSAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNj
YXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTY2FsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAobV9zdXJmYWNlICYmIG1fc3VyZmFjZS0+aG9zdFJlc2l6ZShtX3dlYlBhZ2Uu
c2l6ZSgpKSkKLSAgICAgICAgbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCA9IG1fc3VyZmFj
ZS0+c3VyZmFjZUlEKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiAKLSAgICBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwotICAg
IG1fY29tcG9zaXRvci0+c2V0U2NhbGVGYWN0b3IobV93ZWJQYWdlLmRldmljZVNjYWxlRmFjdG9y
KCkgKiBtX3ZpZXdwb3J0Q29udHJvbGxlci5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgLy8gV2Ug
d2FudCBhIGNsZWFuIHJlcGFpbnQsIG1lYW5pbmcgdGhhdCBpZiB3ZSdyZSBjdXJyZW50bHkgd2Fp
dGluZyBmb3IgdGhlIHJlbmRlcmVyCisgICAgLy8gdG8gZmluaXNoIGFuIHVwZGF0ZSwgd2UnbGwg
aGF2ZSB0byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoIHdoZW4gaXQncyBkb25lLgorICAgIEFTU0VS
VCghbV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKTsKKyAgICBtX2ZvcmNlUmVwYWludEFz
eW5jLmNhbGxiYWNrSUQgPSBPcHRpb25hbENhbGxiYWNrSUQoY2FsbGJhY2tJRCk7CisgICAgbV9m
b3JjZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBtX3NjaGVkdWxlZFdoaWxlV2FpdGlu
Z0ZvclJlbmRlcmVyOworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUpCit2
b2lkIExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsK
ICAgICBpZiAobV9pc0Rpc2NhcmRhYmxlKSB7CiAgICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0
aW9ucy5hZGQoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlU2l6ZSk7CkBAIC0xOTUsNyAr
MjMwLDkgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENo
YW5nZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmIChtX3N1cmZhY2UgJiYgbV9zdXJmYWNl
LT5ob3N0UmVzaXplKHNpemUpKQogICAgICAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElE
ID0gbV9zdXJmYWNlLT5zdXJmYWNlSUQoKTsKIAotICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2l6ZURpZENoYW5nZShzaXplKTsKKyAgICBtX2Nvb3JkaW5hdG9yLnNpemVEaWRDaGFuZ2Uo
c2l6ZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisKICAgICBtX3ZpZXdwb3J0Q29udHJv
bGxlci5kaWRDaGFuZ2VWaWV3cG9ydFNpemUoc2l6ZSk7CiAgICAgSW50U2l6ZSBzY2FsZWRTaXpl
KHNpemUpOwogICAgIHNjYWxlZFNpemUuc2NhbGUobV93ZWJQYWdlLmRldmljZVNjYWxlRmFjdG9y
KCkpOwpAQCAtMjAzLDI1ICsyNDAsNDEgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGRpZENoYW5n
ZVZpZXdwb3J0KCk7CiB9CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhWaWV3cG9ydEF0dHJpYnV0ZXMmJiBhdHRyKQor
dm9pZCBMYXllclRyZWVIb3N0OjpwYXVzZVJlbmRlcmluZygpCiB7Ci0gICAgbV92aWV3cG9ydENv
bnRyb2xsZXIuZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdURk1vdmUoYXR0cikpOworICAg
IG1faXNTdXNwZW5kZWQgPSB0cnVlOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnJlc3VtZVJl
bmRlcmluZygpCit7CisgICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworfQorCitHcmFwaGljc0xheWVyRmFjdG9yeSogTGF5ZXJUcmVlSG9zdDo6Z3Jh
cGhpY3NMYXllckZhY3RvcnkoKQoreworICAgIHJldHVybiAmbV9jb29yZGluYXRvcjsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0Ojpjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG5l
d1NpemUpCit7CisgICAgbV92aWV3cG9ydENvbnRyb2xsZXIuZGlkQ2hhbmdlQ29udGVudHNTaXpl
KG5ld1NpemUpOwogICAgIGlmIChtX2lzRGlzY2FyZGFibGUpCiAgICAgICAgIG1fZGlzY2FyZGFi
bGVTeW5jQWN0aW9ucy5hZGQoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlVmlld3BvcnQp
OwogICAgIGVsc2UKICAgICAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKIH0KIAotI2lmIFBMQVRG
T1JNKEdUSykgJiYgUExBVEZPUk0oWDExKSAmJiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9X
SU5ET1cpCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXROYXRpdmVT
dXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QgaGFuZGxlKQordm9pZCBMYXllclRy
ZWVIb3N0OjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoVmlld3BvcnRBdHRyaWJ1dGVzJiYg
YXR0cikKIHsKLSAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElEID0gaGFuZGxlOwotICAg
IG1fY29tcG9zaXRvci0+c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKGhhbmRs
ZSk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgbV92aWV3cG9ydENvbnRyb2xsZXIu
ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdURk1vdmUoYXR0cikpOworICAgIGlmIChtX2lz
RGlzY2FyZGFibGUpCisgICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5hZGQoRGlzY2Fy
ZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlVmlld3BvcnQpOworICAgIGVsc2UKKyAgICAgICAgZGlk
Q2hhbmdlVmlld3BvcnQoKTsKIH0KLSNlbmRpZgogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpkaWRDaGFuZ2VWaWV3cG9ydCgpCit2b2lkIExheWVyVHJlZUhvc3Q6OmRp
ZENoYW5nZVZpZXdwb3J0KCkKIHsKICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QobV92aWV3cG9y
dENvbnRyb2xsZXIudmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKICAgICBpZiAodmlzaWJsZVJlY3Qu
aXNFbXB0eSgpKQpAQCAtMjM4LDcgKzI5MSw4IEBAIHZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0KCkKICAgICBpZiAoc2Nyb2xsYmFyICYmICFz
Y3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAgICAgICB2aXNpYmxlUmVjdC5leHBh
bmQoMCwgc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CiAKLSAgICBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnNldFZpc2libGVDb250ZW50c1JlY3QodmlzaWJsZVJlY3QpOworICAgIG1fY29vcmRpbmF0
b3Iuc2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlUmVjdCk7CisgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7CiAKICAgICBmbG9hdCBwYWdlU2NhbGUgPSBtX3ZpZXdwb3J0Q29udHJvbGxlci5w
YWdlU2NhbGVGYWN0b3IoKTsKICAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHJvdW5kZWRJ
bnRQb2ludCh2aXNpYmxlUmVjdC5sb2NhdGlvbigpKTsKQEAgLTI1NiwxMyArMzEwLDcgQEAgdm9p
ZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQoKQog
ICAgIH0KIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0
U2NlbmVTdGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQotewotICAg
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2NlbmVTdGF0ZShzdGF0ZSk7Ci0gICAg
bV9jb21wb3NpdG9yLT51cGRhdGVTY2VuZVN0YXRlKHN0YXRlKTsKLX0KLQotdm9pZCBUaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJsZShib29sIGRpc2NhcmRh
YmxlKQordm9pZCBMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKGJvb2wgZGlzY2FyZGFi
bGUpCiB7CiAgICAgbV9pc0Rpc2NhcmRhYmxlID0gZGlzY2FyZGFibGU7CiAgICAgaWYgKG1faXNE
aXNjYXJkYWJsZSkgewpAQCAtMjg4LDEzICszMzYsMTI5IEBAIHZvaWQgVGhyZWFkZWRDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnNldElzRGlzY2FyZGFibGUoYm9vbCBkaXNjYXJkYWJsZSkKICAg
ICAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKIH0KIAorI2lmIFBMQVRGT1JNKEdUSykgJiYgUExB
VEZPUk0oWDExKSAmJiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCit2b2lkIExh
eWVyVHJlZUhvc3Q6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRf
dCBoYW5kbGUpCit7CisgICAgbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCA9IGhhbmRsZTsK
KyAgICBtX2NvbXBvc2l0b3ItPnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyho
YW5kbGUpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
bV9pc0Rpc2NhcmRhYmxlKSB7CisgICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5hZGQo
RGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlU2NhbGUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1fc3VyZmFjZSAmJiBtX3N1cmZhY2UtPmhvc3RSZXNpemUobV93ZWJQ
YWdlLnNpemUoKSkpCisgICAgICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBtX3N1
cmZhY2UtPnN1cmZhY2VJRCgpOworCisgICAgbV9jb29yZGluYXRvci5kZXZpY2VPclBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWQoKTsKKyAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBtX2NvbXBvc2l0
b3ItPnNldFNjYWxlRmFjdG9yKG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpICogbV92aWV3
cG9ydENvbnRyb2xsZXIucGFnZVNjYWxlRmFjdG9yKCkpOworfQorCiAjaWYgVVNFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLVJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5
UmVmcmVzaE1vbml0b3I+IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQorUmVmUHRy
PERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxheVJlZnJl
c2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKIHsKICAgICByZXR1cm4gbV9j
b21wb3NpdG9yLT5kaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlEKTsKIH0KICNlbmRpZgog
Cit2b2lkIExheWVyVHJlZUhvc3Q6OmRpZEZsdXNoUm9vdExheWVyKGNvbnN0IEZsb2F0UmVjdCYg
dmlzaWJsZUNvbnRlbnRSZWN0KQoreworICAgIC8vIEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRpdmUg
b3ZlcmxheSByb290IGxheWVyIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgRnJhbWVWaWV3J3MgR3Jh
cGhpY3NMYXllciB0cmVlLCB3ZSBuZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgorICAgIGlmICht
X3ZpZXdPdmVybGF5Um9vdExheWVyKQorICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5m
bHVzaENvbXBvc2l0aW5nU3RhdGUodmlzaWJsZUNvbnRlbnRSZWN0KTsKK30KKwordm9pZCBMYXll
clRyZWVIb3N0Ojpjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0
ZSYgc3RhdGUpCit7CisgICAgbV9pc1dhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7CisgICAgbV9j
b21wb3NpdG9yLT51cGRhdGVTY2VuZVN0YXRlKHN0YXRlKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0OjpmcmFtZUNvbXBsZXRlKCkKK3sKKyAgICBtX2NvbXBvc2l0b3ItPmZyYW1lQ29tcGxldGUo
KTsKK30KKwordWludDY0X3QgTGF5ZXJUcmVlSG9zdDo6bmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKCkKK3sKKyAgICBpZiAoIW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG1fbGF5
ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQ7CisKKyAgICBtX3N1cmZhY2UtPmluaXRpYWxpemUoKTsK
KyAgICByZXR1cm4gbV9zdXJmYWNlLT53aW5kb3coKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
OjpkaWREZXN0cm95R0xDb250ZXh0KCkKK3sKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBt
X3N1cmZhY2UtPmZpbmFsaXplKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6d2lsbFJlbmRl
ckZyYW1lKCkKK3sKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPndpbGxS
ZW5kZXJGcmFtZSgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmRpZFJlbmRlckZyYW1lKCkK
K3sKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPmRpZFJlbmRlckZyYW1l
KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6cmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRv
clVwZGF0ZSgpCit7CisgICAgLy8gRmx1c2ggbGF5ZXJzIHRvIGNhdXNlIGEgcmVwYWludC4gSWYg
bV9pc1dhaXRpbmdGb3JSZW5kZXJlciB3YXMgdHJ1ZSBhdCB0aGlzIHBvaW50LCB0aGUgbGF5ZXIK
KyAgICAvLyBmbHVzaCB3b24ndCBkbyBhbnl0aGluZywgYnV0IHRoYXQgbWVhbnMgdGhlcmUncyBh
IHBhaW50aW5nIG9uZ29pbmcgdGhhdCB3aWxsIHNlbmQgdGhlCisgICAgLy8gZGlzcGxheSByZWZy
ZXNoIG5vdGlmaWNhdGlvbiB3aGVuIGl0J3MgZG9uZS4KKyAgICBtX2Nvb3JkaW5hdG9yLmZvcmNl
RnJhbWVTeW5jKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlSG9zdDo6aGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wgaGFzQmVlblJl
c2NoZWR1bGVkKQoreworICAgIC8vIENhbGwgcmVuZGVyTmV4dEZyYW1lLiBJZiBoYXNCZWVuUmVz
Y2hlZHVsZWQgaXMgdHJ1ZSwgdGhlIGxheWVyIGZsdXNoIHdpbGwgZm9yY2UgYSByZXBhaW50Cisg
ICAgLy8gdGhhdCB3aWxsIGNhdXNlIHRoZSBkaXNwbGF5IHJlZnJlc2ggbm90aWZpY2F0aW9uIHRv
IGNvbWUuCisgICAgcmVuZGVyTmV4dEZyYW1lKGhhc0JlZW5SZXNjaGVkdWxlZCk7CisgICAgbV9j
b21wb3NpdG9yLT5oYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoKTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUoYm9vbCBmb3JjZVJlcGFpbnQpCit7Cisg
ICAgbV9pc1dhaXRpbmdGb3JSZW5kZXJlciA9IGZhbHNlOworICAgIGJvb2wgc2NoZWR1bGVkV2hp
bGVXYWl0aW5nRm9yUmVuZGVyZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fc2NoZWR1bGVkV2hpbGVXYWl0
aW5nRm9yUmVuZGVyZXIsIGZhbHNlKTsKKyAgICBtX2Nvb3JkaW5hdG9yLnJlbmRlck5leHRGcmFt
ZSgpOworCisgICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCkgeworICAgICAg
ICAvLyBJZiB0aGUgYXN5bmNocm9ub3VzIGZvcmNlLXJlcGFpbnQgbmVlZHMgYSBzZXBhcmF0ZSBm
cmVzaCBmbHVzaCwgaXQgd2FzIGR1ZSB0bworICAgICAgICAvLyB0aGUgZm9yY2UtcmVwYWludCBy
ZXF1ZXN0IGJlaW5nIHJlZ2lzdGVyZWQgd2hpbGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHdh
cworICAgICAgICAvLyB3YWl0aW5nIGZvciB0aGUgcmVuZGVyZXIgdG8gZmluaXNoIGFuIHVwZGF0
ZS4KKyAgICAgICAgQVNTRVJUKCFtX2ZvcmNlUmVwYWludEFzeW5jLm5lZWRzRnJlc2hGbHVzaCB8
fCBzY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlcik7CisKKyAgICAgICAgLy8gRXhlY3V0
ZSB0aGUgY2FsbGJhY2sgaWYgYW5vdGhlciBsYXllciBmbHVzaCBhbmQgdGhlIHN1YnNlcXVlbnQg
c3RhdGUgdXBkYXRlCisgICAgICAgIC8vIGFyZW4ndCBuZWVkZWQuIElmIHRoZXkgYXJlLCB0aGUg
Y2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgLy8g
aXMgY2FsbGVkIGFmdGVyIHRoZSBuZXh0IHVwZGF0ZS4KKyAgICAgICAgaWYgKCFtX2ZvcmNlUmVw
YWludEFzeW5jLm5lZWRzRnJlc2hGbHVzaCkgeworICAgICAgICAgICAgbV93ZWJQYWdlLnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmMu
Y2FsbGJhY2tJRC5jYWxsYmFja0lEKCkpKTsKKyAgICAgICAgICAgIG1fZm9yY2VSZXBhaW50QXN5
bmMuY2FsbGJhY2tJRCA9IE9wdGlvbmFsQ2FsbGJhY2tJRCgpOworICAgICAgICB9CisgICAgICAg
IG1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoID0gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKHNjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyIHx8IG1fbGF5ZXJGbHVzaFRp
bWVyLmlzQWN0aXZlKCkgfHwgZm9yY2VSZXBhaW50KSB7CisgICAgICAgIG1fbGF5ZXJGbHVzaFRp
bWVyLnN0b3AoKTsKKyAgICAgICAgaWYgKGZvcmNlUmVwYWludCkKKyAgICAgICAgICAgIG1fY29v
cmRpbmF0b3IuZm9yY2VGcmFtZVN5bmMoKTsKKyAgICAgICAgbGF5ZXJGbHVzaFRpbWVyRmlyZWQo
KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykg
fHwgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVIb3N0LmgKc2ltaWxhcml0eSBpbmRleCA2MCUKcmVuYW1lIGZyb20g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaAppbmRl
eCAyMjg3NjE2MmU2OS4uYTUzMDI5OGRmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaApAQCAtMSw3ICsxLDYgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4KLSAqIENvcHly
aWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2Fs
aWEgUy5MLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw1NCArMjYsOTkg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFE
RUQpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKSB8fCBVU0UoVEVYVFVS
RV9NQVBQRVIpCiAKICNpbmNsdWRlICJBY2NlbGVyYXRlZFN1cmZhY2UuaCIKLSNpbmNsdWRlICJD
b29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJDYWxsYmFja0lELmgiCisjaW5j
bHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRvci5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRl
eHQuaCIKKyNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNsdWRlICJTaW1wbGVW
aWV3cG9ydENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUaHJlYWRlZENvbXBvc2l0b3IuaCIKICNp
bmNsdWRlICJUaHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1TY3JlZW4uaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRSZWN0OworY2xhc3Mg
SW50U2l6ZTsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CitjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9y
eTsKIHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGU7CitzdHJ1Y3QgVmlld3BvcnRBdHRy
aWJ1dGVzOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZTsKIAotY2xh
c3MgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QgZmluYWwgOiBwdWJsaWMgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LCBwdWJsaWMgQWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQgewor
Y2xhc3MgTGF5ZXJUcmVlSG9zdCBmaW5hbCA6IHB1YmxpYyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpDbGllbnQsIHB1YmxpYyBBY2NlbGVyYXRlZFN1cmZhY2U6OkNsaWVudCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxUaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKFdlYlBhZ2UmKTsKLSAgICB2aXJ0dWFsIH5UaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpOworICAgIGV4cGxpY2l0IExheWVyVHJlZUhv
c3QoV2ViUGFnZSYpOworICAgIH5MYXllclRyZWVIb3N0KCk7CiAKLXByaXZhdGU6Ci0gICAgZXhw
bGljaXQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYpOworICAgIGNv
bnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyVHJlZUNvbnRleHQ7IH0KKyAgICB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZChib29sKTsKKyAgICB2b2lkIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExh
eWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpIHsgbV9ub3RpZnlB
ZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7
IH0KKworICAgIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdm9pZCBjYW5jZWxQZW5k
aW5nTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0Vmlld092ZXJsYXlSb290TGF5ZXIoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9p
ZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwor
ICAgIHZvaWQgZm9yY2VSZXBhaW50KCk7CisgICAgYm9vbCBmb3JjZVJlcGFpbnRBc3luYyhDYWxs
YmFja0lEKTsKKyAgICB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
bmV3U2l6ZSk7CiAKLSAgICB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNpemVEaWRD
aGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwYXVzZVJlbmRl
cmluZygpOworICAgIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCk7CiAKLSAgICB2b2lkIGNvbnRlbnRz
U2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYm
KSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NM
YXllckZhY3RvcnkoKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJyaWRlOworICAgIHZv
aWQgY29udGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdm9p
ZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVz
JiYpOwogCi0gICAgdm9pZCBmb3JjZVJlcGFpbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldElz
RGlzY2FyZGFibGUoYm9vbCk7CiAKLSAgICB2b2lkIHNldElzRGlzY2FyZGFibGUoYm9vbCkgb3Zl
cnJpZGU7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBQTEFURk9STShHVEspCisgICAg
dm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QpOworI2Vu
ZGlmCisKKyAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogCi0jaWYg
UExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShYMTEpICYmICAhVVNFKFJFRElSRUNURURfWENPTVBP
U0lURV9XSU5ET1cpCi0gICAgdm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRp
bmcodWludDY0X3QpIG92ZXJyaWRlOworI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9E
SVNQTEFZX01PTklUT1IpCisgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRv
cj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlE
KTsKICNlbmRpZgogCitwcml2YXRlOgorICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsK
KyAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0KCk7CisgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUo
Ym9vbCk7CisKKyAgICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQKKyAgICB2b2lk
IGRpZEZsdXNoUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRl
bnRSZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKSBvdmVycmlk
ZSB7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9OworICAgIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShj
b25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlkZTsKKworICAg
IC8vIEFjY2VsZXJhdGVkU3VyZmFjZTo6Q2xpZW50CisgICAgdm9pZCBmcmFtZUNvbXBsZXRlKCkg
b3ZlcnJpZGU7CisKKyAgICB1aW50NjRfdCBuYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRp
bmcoKTsKKyAgICB2b2lkIGRpZERlc3Ryb3lHTENvbnRleHQoKTsKKyAgICB2b2lkIHdpbGxSZW5k
ZXJGcmFtZSgpOworICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKKyAgICB2b2lkIHJlcXVlc3RE
aXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoKTsKKyAgICB2b2lkIGhhbmRsZURpc3BsYXlSZWZy
ZXNoTW9uaXRvclVwZGF0ZShib29sKTsKKwogICAgIGNsYXNzIENvbXBvc2l0b3JDbGllbnQgZmlu
YWwgOiBwdWJsaWMgVGhyZWFkZWRDb21wb3NpdG9yOjpDbGllbnQsIHB1YmxpYyBUaHJlYWRlZERp
c3BsYXlSZWZyZXNoTW9uaXRvcjo6Q2xpZW50ICB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENvbXBvc2l0b3JDbGllbnQpOwogICAgIHB1YmxpYzoKLSAgICAgICAgQ29tcG9zaXRvckNs
aWVudChUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCYgbGF5ZXJUcmVlSG9zdCkKKyAg
ICAgICAgQ29tcG9zaXRvckNsaWVudChMYXllclRyZWVIb3N0JiBsYXllclRyZWVIb3N0KQogICAg
ICAgICAgICAgOiBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKICAgICAgICAgewogICAg
ICAgICB9CkBAIC0xMTYsNDUgKzE2MCw0MCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9sYXll
clRyZWVIb3N0LmhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZShoYXNCZWVuUmVzY2hl
ZHVsZWQpOwogICAgICAgICB9CiAKLSAgICAgICAgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJl
ZUhvc3QmIG1fbGF5ZXJUcmVlSG9zdDsKKyAgICAgICAgTGF5ZXJUcmVlSG9zdCYgbV9sYXllclRy
ZWVIb3N0OwogICAgIH07CiAKLSAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0KCk7Ci0KLSAgICAv
LyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQKLSAgICB2b2lkIGRpZEZsdXNoUm9vdExh
eWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY29t
bWl0U2NlbmVTdGF0ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBv
dmVycmlkZTsKLQotI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklU
T1IpCi0gICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlz
cGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBvdmVycmlkZTsK
LSNlbmRpZgotCi0gICAgLy8gQWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQKLSAgICB2b2lkIGZy
YW1lQ29tcGxldGUoKSBvdmVycmlkZTsKLQotICAgIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5k
bGVGb3JDb21wb3NpdGluZygpOwotICAgIHZvaWQgZGlkRGVzdHJveUdMQ29udGV4dCgpOwotICAg
IHZvaWQgd2lsbFJlbmRlckZyYW1lKCk7Ci0gICAgdm9pZCBkaWRSZW5kZXJGcmFtZSgpOwotICAg
IHZvaWQgcmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOwotICAgIHZvaWQgaGFu
ZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wpOwotCiAgICAgZW51bSBjbGFzcyBE
aXNjYXJkYWJsZVN5bmNBY3Rpb25zIHsKICAgICAgICAgVXBkYXRlU2l6ZSA9IDEgPDwgMSwKICAg
ICAgICAgVXBkYXRlVmlld3BvcnQgPSAxIDw8IDIsCiAgICAgICAgIFVwZGF0ZVNjYWxlID0gMSA8
PCAzCiAgICAgfTsKIAotICAgIENvbXBvc2l0b3JDbGllbnQgbV9jb21wb3NpdG9yQ2xpZW50Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2NlbGVyYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKLSAgICBS
ZWZQdHI8VGhyZWFkZWRDb21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7Ci0gICAgU2ltcGxlVmlld3Bv
cnRDb250cm9sbGVyIG1fdmlld3BvcnRDb250cm9sbGVyOworICAgIFdlYlBhZ2UmIG1fd2ViUGFn
ZTsKKyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKKyAgICBib29sIG1f
bGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9ub3RpZnlB
ZnRlclNjaGVkdWxlZExheWVyRmx1c2ggeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1N1c3BlbmRl
ZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07CisgICAgYm9vbCBtX2lz
V2FpdGluZ0ZvclJlbmRlcmVyIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2NoZWR1bGVkV2hpbGVX
YWl0aW5nRm9yUmVuZGVyZXIgeyBmYWxzZSB9OwogICAgIGZsb2F0IG1fbGFzdFBhZ2VTY2FsZUZh
Y3RvciB7IDEgfTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RTY3JvbGxQb3NpdGlvbjsK
ICAgICBib29sIG1faXNEaXNjYXJkYWJsZSB7IGZhbHNlIH07CiAgICAgT3B0aW9uU2V0PERpc2Nh
cmRhYmxlU3luY0FjdGlvbnM+IG1fZGlzY2FyZGFibGVTeW5jQWN0aW9uczsKKyAgICBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiBtX3ZpZXdPdmVybGF5Um9vdExheWVyIHsgbnVsbHB0ciB9OworICAg
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3IgbV9jb29yZGluYXRvcjsKKyAgICBDb21wb3NpdG9yQ2xp
ZW50IG1fY29tcG9zaXRvckNsaWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZWxlcmF0ZWRT
dXJmYWNlPiBtX3N1cmZhY2U7CisgICAgUmVmUHRyPFRocmVhZGVkQ29tcG9zaXRvcj4gbV9jb21w
b3NpdG9yOworICAgIFNpbXBsZVZpZXdwb3J0Q29udHJvbGxlciBtX3ZpZXdwb3J0Q29udHJvbGxl
cjsKKyAgICBzdHJ1Y3QgeworICAgICAgICBPcHRpb25hbENhbGxiYWNrSUQgY2FsbGJhY2tJRDsK
KyAgICAgICAgYm9vbCBuZWVkc0ZyZXNoRmx1c2ggeyBmYWxzZSB9OworICAgIH0gbV9mb3JjZVJl
cGFpbnRBc3luYzsKKyAgICBSdW5Mb29wOjpUaW1lcjxMYXllclRyZWVIb3N0PiBtX2xheWVyRmx1
c2hUaW1lcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9H
UkFQSElDU19USFJFQURFRCkgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKaW5kZXggNDRl
YjJkYjY2OTguLjYzZDUxNWFlOTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKQEAgLTYxLDcgKzYxLDYgQEAgdm9pZCBE
cmF3aW5nQXJlYUltcGw6OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgaWYgKG1fbGF5ZXJUcmVl
SG9zdCkgewogICAgICAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpOwotICAgICAg
ICBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtNzIsNyArNzEsNiBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKG1fbGF5
ZXJUcmVlSG9zdCkgewogICAgICAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpOwot
ICAgICAgICBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QocmVj
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDcyN2ZiMGM2Y2JiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKLQotI2luY2x1ZGUgIkxheWVy
VHJlZUhvc3QuaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKLSNp
bmNsdWRlICJUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJlZlB0cjxMYXll
clRyZWVIb3N0PiBMYXllclRyZWVIb3N0OjpjcmVhdGUoV2ViUGFnZSYgd2ViUGFnZSkKLXsKLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi0gICAgcmV0dXJuIFRocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUod2ViUGFnZSk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTSh3ZWJQYWdlKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgotfQotCi1M
YXllclRyZWVIb3N0OjpMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2UpCi0gICAgOiBtX3dl
YlBhZ2Uod2ViUGFnZSkKLXsKLX0KLQotTGF5ZXJUcmVlSG9zdDo6fkxheWVyVHJlZUhvc3QoKQot
ewotICAgIEFTU0VSVCghbV9pc1ZhbGlkKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0OjpzZXRM
YXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKLXsK
LSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0Vu
YWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7Ci0KLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQpIHsKLSAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lk
IExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKCkKLXsKLSAgICBtX2lzU3VzcGVuZGVkID0g
dHJ1ZTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0OjpyZXN1bWVSZW5kZXJpbmcoKQotewotICAg
IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9pc1ZhbGlk
KTsKLSAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBF
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjMzk4Mjk5ZTYuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBMYXllclRyZWVIb3N0X2gKLSNkZWZpbmUgTGF5ZXJUcmVlSG9zdF9oCi0KLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKLQotI2luY2x1ZGUgIkNh
bGxiYWNrSUQuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
U2NyZWVuLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIElQQyB7Ci1jbGFz
cyBDb25uZWN0aW9uOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0Owot
Y2xhc3MgSW50U2l6ZTsKLWNsYXNzIEdyYXBoaWNzTGF5ZXI7Ci1jbGFzcyBHcmFwaGljc0xheWVy
RmFjdG9yeTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi1zdHJ1Y3Qg
Vmlld3BvcnRBdHRyaWJ1dGVzOwotI2VuZGlmCi19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBXZWJQYWdlOwotCi1jbGFzcyBMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8
TGF5ZXJUcmVlSG9zdD4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8TGF5ZXJUcmVlSG9z
dD4gY3JlYXRlKFdlYlBhZ2UmKTsKLSAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0KCk7Ci0KLSAg
ICBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9sYXllclRyZWVDb250ZXh0OyB9Ci0gICAgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGlu
Z0VuYWJsZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVs
ZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7IG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZs
dXNoOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KCkgeyB9OwotICAgIHZpcnR1YWwgdm9p
ZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29u
dGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9y
Y2VSZXBhaW50KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBmb3JjZVJlcGFpbnRBc3luYyhDYWxs
YmFja0lEKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzaXplRGlkQ2hhbmdl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBwYXVzZVJlbmRlcmluZygpOwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKTsK
LQotICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5
ZXJGYWN0b3J5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTX1RIUkVBREVEKQotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZp
ZXdwb3J0QXR0cmlidXRlcyhXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmJikgeyB9OwotI2Vu
ZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgdmlydHVhbCB2b2lkIHNj
aGVkdWxlQW5pbWF0aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0Rpc2NhcmRhYmxl
KGJvb2wpIHsgfTsKLSNlbmRpZgotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBQTEFU
Rk9STShHVEspCi0gICAgdmlydHVhbCB2b2lkIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21w
b3NpdGluZyh1aW50NjRfdCkgeyB9OwotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKLSAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgPSAwOwotI2VuZGlmCi0KLSNpZiBVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNv
cmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSB7IHJldHVybiBudWxscHRyOyB9Ci0jZW5kaWYKLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikgeyBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0g
dmlld092ZXJsYXlSb290TGF5ZXI7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IExheWVy
VHJlZUhvc3QoV2ViUGFnZSYpOwotCi0gICAgV2ViUGFnZSYgbV93ZWJQYWdlOwotICAgIExheWVy
VHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9sYXllckZsdXNoU2No
ZWR1bGluZ0VuYWJsZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsK
LSAgICBib29sIG1faXNWYWxpZCB7IHRydWUgfTsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiBtX3ZpZXdPdmVybGF5Um9vdExheWVyIHsgbnVsbHB0ciB9OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShU
RVhUVVJFX01BUFBFUikKLQotI2VuZGlmIC8vIExheWVyVHJlZUhvc3RfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363085</attachid>
            <date>2019-02-27 04:12:43 -0800</date>
            <delta_ts>2019-02-27 04:45:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-layer-tree-host.diff</filename>
            <type>text/plain</type>
            <size>61341</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZGE2YmQ1YmUxNDEuLmU5ZTI4YzkxYTJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDYzIEBACisyMDE5LTAyLTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbQ29vcmRpbmF0ZWRHcmFwaGljc10gVW5pZnkgYWxsIExheWVyVHJl
ZUhvc3QgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk1MDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlcmUncyBubyByZWFzb24gdG8gaGF2ZSAzIGNsYXNzZXMsIHNpbmNlIGN1cnJlbnRs
eSBMYXllclRyZWVIb3N0IGlzIG9ubHkgdXNlZCBieSBjb29yZGluYXRlZCBncmFwaGljcyBiYXNl
ZAorICAgICAgICBwb3J0cy4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmV4aXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZU5vdyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9U
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAuCisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0Ojp+TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNl
dExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmZvcmNl
UmVwYWludEFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENo
YW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb250ZW50c1NpemVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxh
eVJlZnJlc2hNb25pdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkRmx1
c2hSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb21taXRTY2Vu
ZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZnJhbWVDb21wbGV0ZSk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6Om5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JD
b21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmRpZERlc3Ryb3lH
TENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojp3aWxsUmVuZGVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpkaWRSZW5kZXJGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0
b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5
UmVmcmVzaE1vbml0b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpy
ZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNldE5lZWRzRGlzcGxheUlu
UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmg6IFJl
bW92ZWQuCisKIDIwMTktMDItMjYgIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5j
b20+IGFuZCBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbV1BFXSBBZGQgQVBJIGZvciB3ZWJ2aWV3IGJhY2tncm91bmQgY29sb3IgY29uZmlndXJh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMGE1MzM1YTNjZjguLjRjYjgwNGQwZWYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTgxLDExICs4MSw5IEBAIGxpc3QoQVBQRU5E
IFdlYktpdF9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2lu
Z0FyZWEuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAotICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKLSAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
Y3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9X
ZWJQYWdlV2luLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9y
L1RocmVhZGVkQ29tcG9zaXRvci5jcHAKaW5kZXggODA1ZjIzMzBjY2YuLjBmM2YzMGViMzZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVh
ZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29t
cG9zaXRvci5jcHAKQEAgLTQyLDYgKzQyLDkgQEAKICNpbmNsdWRlIDxHTC9nbC5oPgogI2VuZGlm
CiAKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKwogbmFtZXNw
YWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMTM2LDYgKzEzOSw3
IEBAIHZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjpzZXRTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSkK
IHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2F0dHJpYnV0ZXMubG9jayk7CiAgICAgbV9hdHRy
aWJ1dGVzLnNjYWxlRmFjdG9yID0gc2NhbGU7CisgICAgcHJpbnRmICgiREJHOiBbJWRdIFRocmVh
ZGVkQ29tcG9zaXRvcjo6c2V0U2NhbGVGYWN0b3JcbiIsIGdldHBpZCgpKTsKICAgICBtX2NvbXBv
c2l0aW5nUnVuTG9vcC0+c2NoZWR1bGVVcGRhdGUoKTsKIH0KIApAQCAtMTQ0LDYgKzE0OCw3IEBA
IHZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24sIGZsb2F0CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9hdHRyaWJ1
dGVzLmxvY2spOwogICAgIG1fYXR0cmlidXRlcy5zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0
aW9uOwogICAgIG1fYXR0cmlidXRlcy5zY2FsZUZhY3RvciA9IHNjYWxlOworICAgIHByaW50ZiAo
IkRCRzogWyVkXSBUaHJlYWRlZENvbXBvc2l0b3I6OnNldFNjcm9sbFBvc2l0aW9uXG4iLCBnZXRw
aWQoKSk7CiAgICAgbV9jb21wb3NpdGluZ1J1bkxvb3AtPnNjaGVkdWxlVXBkYXRlKCk7CiB9CiAK
QEAgLTE1MywxMSArMTU4LDEzIEBAIHZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjpzZXRWaWV3cG9y
dFNpemUoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBmbG9hdCBzY2FsCiAgICAgbV9hdHRy
aWJ1dGVzLnZpZXdwb3J0U2l6ZSA9IHZpZXdwb3J0U2l6ZTsKICAgICBtX2F0dHJpYnV0ZXMuc2Nh
bGVGYWN0b3IgPSBzY2FsZTsKICAgICBtX2F0dHJpYnV0ZXMubmVlZHNSZXNpemUgPSB0cnVlOwor
ICAgIHByaW50ZiAoIkRCRzogWyVkXSBUaHJlYWRlZENvbXBvc2l0b3I6OnNldFZpZXdwb3J0U2l6
ZVxuIiwgZ2V0cGlkKCkpOwogICAgIG1fY29tcG9zaXRpbmdSdW5Mb29wLT5zY2hlZHVsZVVwZGF0
ZSgpOwogfQogCiB2b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6dXBkYXRlVmlld3BvcnQoKQogewor
ICAgIHByaW50ZiAoIkRCRzogWyVkXSBUaHJlYWRlZENvbXBvc2l0b3I6OnVwZGF0ZVZpZXdwb3J0
XG4iLCBnZXRwaWQoKSk7CiAgICAgbV9jb21wb3NpdGluZ1J1bkxvb3AtPnNjaGVkdWxlVXBkYXRl
KCk7CiB9CiAKQEAgLTE4MSw2ICsxODgsNyBAQCB2b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6cmVu
ZGVyTGF5ZXJUcmVlKCkKICAgICBpZiAoIW1fY29udGV4dCB8fCAhbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgcHJpbnRmICgiREJHOiBbJWRd
IFRocmVhZGVkQ29tcG9zaXRvcjo6cmVuZGVyTGF5ZXJUcmVlXG4iLCBnZXRwaWQoKSk7CiAgICAg
bV9jbGllbnQud2lsbFJlbmRlckZyYW1lKCk7CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUgc2NlbmUg
YXR0cmlidXRlcyBpbiBhIHRocmVhZC1zYWZlIG1hbm5lci4KQEAgLTI5NCw2ICszMDIsNyBAQCB2
b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6c2NlbmVVcGRhdGVGaW5pc2hlZCgpCiAKIHZvaWQgVGhy
ZWFkZWRDb21wb3NpdG9yOjp1cGRhdGVTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZSYgc3RhdGUpCiB7CisgICAgcHJpbnRmICgiREJHOiBbJWRdIFRocmVhZGVkQ29tcG9z
aXRvcjo6dXBkYXRlU2NlbmVTdGF0ZVxuIiwgZ2V0cGlkKCkpOwogICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fYXR0cmlidXRlcy5sb2NrKTsKICAgICBtX2F0dHJpYnV0ZXMuc3RhdGVzLmFwcGVuZChz
dGF0ZSk7CiAgICAgbV9jb21wb3NpdGluZ1J1bkxvb3AtPnNjaGVkdWxlVXBkYXRlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzR1RLLnR4dAppbmRleCBlYTFiZjk3Zjg5My4uOTFmOGM0OWUzMGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RL
LnR4dApAQCAtNDAzLDEyICs0MDMsMTAgQEAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3Vw
L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCiAKIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2Nl
bGVyYXRlZERyYXdpbmdBcmVhLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3Vy
ZmFjZS5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAogV2ViUHJvY2Vz
cy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwCiAKIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCi1X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKK1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwCiAKIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYUltcGwuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50
eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CmluZGV4IDljOTU4YmYzZTAyLi41NDA1
ZjI0M2ZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dAorKysgYi9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CkBAIC0yNDMsMTEgKzI0Myw5IEBAIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvd3BlL1dlYlBvcHVwTWVudVdQRS5jcHAKIAogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNj
ZWxlcmF0ZWRTdXJmYWNlLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3Bw
CiAKIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29v
cmRpbmF0b3IuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKK1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwCiAKIFdlYlByb2Nl
c3MvV2ViUGFnZS9nc3RyZWFtZXIvV2ViUGFnZUdTdHJlYW1lci5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dheWxhbmRDb21wb3NpdG9yLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRvci5jcHAKaW5kZXggZGM4ZDUz
Y2FmYmIuLjRjOGUzZDM0OGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9n
dGsvV2F5bGFuZENvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9XYXlsYW5kQ29tcG9zaXRvci5jcHAKQEAgLTE0NywxMCArMTQ3LDEyIEBAIEludFNpemUgV2F5
bGFuZENvbXBvc2l0b3I6OkJ1ZmZlcjo6c2l6ZSgpIGNvbnN0CiBXYXlsYW5kQ29tcG9zaXRvcjo6
U3VyZmFjZTo6U3VyZmFjZSgpCiAgICAgOiBtX2ltYWdlKEVHTF9OT19JTUFHRV9LSFIpCiB7Cisg
ICAgcHJpbnRmICgiREJHOiBbJXBdIFN1cmZhY2UoKVxuIiwgdGhpcyk7CiB9CiAKIFdheWxhbmRD
b21wb3NpdG9yOjpTdXJmYWNlOjp+U3VyZmFjZSgpCiB7CisgICAgcHJpbnRmICgiREJHOiBbJXBd
IH5TdXJmYWNlKClcbiIsIHRoaXMpOwogICAgIHNldFdlYlBhZ2UobnVsbHB0cik7CiAKICAgICAv
LyBEZXN0cm95IHBlbmRpbmcgZnJhbWUgY2FsbGJhY2tzLgpAQCAtMzQwLDYgKzM0Miw3IEBAIHN0
YXRpYyBjb25zdCBzdHJ1Y3Qgd2xfc3VyZmFjZV9pbnRlcmZhY2Ugc3VyZmFjZUludGVyZmFjZSA9
IHsKICAgICBbXShzdHJ1Y3Qgd2xfY2xpZW50KiBjbGllbnQsIHN0cnVjdCB3bF9yZXNvdXJjZSog
cmVzb3VyY2UpCiAgICAgewogICAgICAgICBhdXRvKiBzdXJmYWNlID0gc3RhdGljX2Nhc3Q8V2F5
bGFuZENvbXBvc2l0b3I6OlN1cmZhY2UqPih3bF9yZXNvdXJjZV9nZXRfdXNlcl9kYXRhKHJlc291
cmNlKSk7CisgICAgICAgIHByaW50ZiAoIkRCRzogY29tbWl0OiAlcFxuIiwgc3VyZmFjZSk7CiAg
ICAgICAgIGlmICghc3VyZmFjZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgc3VyZmFj
ZS0+Y29tbWl0KCk7CkBAIC01NTAsOSArNTUzLDEzIEBAIGJvb2wgV2F5bGFuZENvbXBvc2l0b3I6
OmdldFRleHR1cmUoV2ViUGFnZVByb3h5JiB3ZWJQYWdlLCB1bnNpZ25lZCYgdGV4dHVyZSwgSW50
CiB2b2lkIFdheWxhbmRDb21wb3NpdG9yOjpiaW5kU3VyZmFjZVRvV2ViUGFnZShXYXlsYW5kQ29t
cG9zaXRvcjo6U3VyZmFjZSogc3VyZmFjZSwgdWludDY0X3QgcGFnZUlEKQogewogICAgIFdlYlBh
Z2VQcm94eSogd2ViUGFnZSA9IG51bGxwdHI7Ci0gICAgZm9yIChhdXRvKiBwYWdlIDogbV9wYWdl
TWFwLmtleXMoKSkgewotICAgICAgICBpZiAocGFnZS0+cGFnZUlEKCkgPT0gcGFnZUlEKSB7Ci0g
ICAgICAgICAgICB3ZWJQYWdlID0gcGFnZTsKKyAgICBmb3IgKGF1dG8gaXQgOiBtX3BhZ2VNYXAp
IHsKKyAgICAgICAgaWYgKGl0LmtleS0+cGFnZUlEKCkgPT0gcGFnZUlEKSB7CisgICAgICAgICAg
ICBpZiAoaXQudmFsdWUpIHsKKyAgICAgICAgICAgICAgICBwcmludGYgKCJEQkc6IGFscmVhZHkg
aGF2ZSBhIHN1cmZhY2UgZm9yIHBhZ2VcbiIpOworICAgICAgICAgICAgICAgIGl0LnZhbHVlLT5z
ZXRXZWJQYWdlKG51bGxwdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2ViUGFnZSA9
IGl0LmtleTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdp
bmdBcmVhLmNwcAppbmRleCAzMDRkYjg4ODUxNi4uNzQ0OTgzOTYxMDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2lu
Z0FyZWEuY3BwCkBAIC02NiwyNCArNjYsNiBAQCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpBY2Nl
bGVyYXRlZERyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VDcgogICAg
IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5zZXREZXZpY2VTY2FsZUZhY3RvcihwYXJhbWV0ZXJzLmRl
dmljZVNjYWxlRmFjdG9yKTsKIH0KIAotdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXRO
ZWVkc0Rpc3BsYXkoKQotewotICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5zZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSgpOwotfQotCi12b2lkIEFj
Y2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQotewotICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheUluUmVjdChyZWN0KTsKLX0KLQogdm9p
ZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVj
dCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAgaWYgKCFtX2lzUGFpbnRpbmdF
bmFibGVkKQpAQCAtMTExLDYgKzkzLDkgQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpz
ZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wgaXNGcm96ZW4pCiAKIHZvaWQgQWNjZWxlcmF0
ZWREcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50KCkKIHsKKyAgICBpZiAobV9sYXllclRyZWVTdGF0
ZUlzRnJvemVuKQorICAgICAgICByZXR1cm47CisKICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIAog
ICAgIG1fd2ViUGFnZS5sYXlvdXRJZk5lZWRlZCgpOwpAQCAtMTMzLDYgKzExOCw4IEBAIHZvaWQg
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50KCkKIAogYm9vbCBBY2NlbGVyYXRl
ZERyYXdpbmdBcmVhOjpmb3JjZVJlcGFpbnRBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7
CisgICAgaWYgKG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbikKKwlyZXR1cm4gZmFsc2U7CiAgICAg
cmV0dXJuIG1fbGF5ZXJUcmVlSG9zdCAmJiBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVwYWludEFz
eW5jKGNhbGxiYWNrSUQpOwogfQogCkBAIC0xOTEsNiArMTc4LDggQEAgdm9pZCBBY2NlbGVyYXRl
ZERyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWUKIHsKICAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsKIAorICAgIC8vIEZJWE1F
OiBjaGVjayBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4KKwogICAgIC8vIEZJWE1FOiBJbnN0ZWFk
IG9mIHVzaW5nIG5lc3RlZCBpZiBzdGF0ZW1lbnRzLCB3ZSBzaG91bGQga2VlcCBhIGNvbXBvc2l0
aW5nIHN0YXRlCiAgICAgLy8gZW51bSBpbiB0aGUgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYSBvYmpl
Y3QgYW5kIGhhdmUgYSBjaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nU3RhdGUgZnVuY3Rpb24K
ICAgICAvLyB0aGF0IHRha2VzIHRoZSBuZXcgc3RhdGUuCkBAIC0zMDcsNiArMjk2LDggQEAgdm9p
ZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzdXNwZW5kUGFpbnRpbmcoKQogewogICAgIEFTU0VS
VCghbV9pc1BhaW50aW5nU3VzcGVuZGVkKTsKIAorICAgIHByaW50ZiAoIkRCRzogQWNjZWxlcmF0
ZWREcmF3aW5nQXJlYTo6c3VzcGVuZFBhaW50aW5nXG4iKTsKKwogICAgIGlmIChtX2xheWVyVHJl
ZUhvc3QpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGF1c2VSZW5kZXJpbmcoKTsKIApAQCAt
MzE3LDYgKzMwOCw3IEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c3VzcGVuZFBhaW50
aW5nKCkKIAogdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpyZXN1bWVQYWludGluZygpCiB7
CisgICAgcHJpbnRmICgiREJHOiBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpyZXN1bWVQYWludGlu
Z1xuIik7CiAgICAgaWYgKCFtX2lzUGFpbnRpbmdTdXNwZW5kZWQpIHsKICAgICAgICAgLy8gRklY
TUU6IFdlIGNhbiBnZXQgYSBjYWxsIHRvIHJlc3VtZVBhaW50aW5nIHdoZW4gcGFpbnRpbmcgaXMg
bm90IHN1c3BlbmRlZC4KICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gc2VuZGluZyBhIHN5
bmNocm9ub3VzIG1lc3NhZ2UgdG8gY3JlYXRlIGEgbmV3IHBhZ2UuIFNlZSA8cmRhcjovL3Byb2Js
ZW0vODk3NjUzMT4uCkBAIC0zNDMsMTggKzMzNSwxNCBAQCB2b2lkIEFjY2VsZXJhdGVkRHJhd2lu
Z0FyZWE6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoR3JhcGhpY3NMYXllciogZ3Jh
cAogCiAgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOwogICAgIGlmIChtX3ByZXZpb3VzTGF5
ZXJUcmVlSG9zdCkgewotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICAgICAgbV9s
YXllclRyZWVIb3N0ID0gV1RGTW92ZShtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdCk7CiAgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0SXNEaXNjYXJkYWJsZShmYWxzZSk7CiAgICAgICAgIGlmICgh
bV9pc1BhaW50aW5nU3VzcGVuZGVkKQogICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yZXN1
bWVSZW5kZXJpbmcoKTsKICAgICAgICAgaWYgKCFtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4pCiAg
ICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxl
ZCh0cnVlKTsKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0ID0gTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlKG1fd2ViUGFnZSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdCA9IHN0ZDo6bWFrZV91bmlx
dWU8TGF5ZXJUcmVlSG9zdD4obV93ZWJQYWdlKTsKIAogICAgICAgICBpZiAoIW1fbGF5ZXJUcmVl
SG9zdCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM5MywxNiArMzgxLDEyIEBAIHZvaWQgQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlTm93KCkK
ICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLnN0b3AoKTsKICAgICBtX3dhbnRzVG9FeGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUgPSBmYWxzZTsKIAotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKICAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsKICAgICBtX3ByZXZpb3VzTGF5
ZXJUcmVlSG9zdCA9IFdURk1vdmUobV9sYXllclRyZWVIb3N0KTsKICAgICBtX3ByZXZpb3VzTGF5
ZXJUcmVlSG9zdC0+c2V0SXNEaXNjYXJkYWJsZSh0cnVlKTsKICAgICBtX3ByZXZpb3VzTGF5ZXJU
cmVlSG9zdC0+cGF1c2VSZW5kZXJpbmcoKTsKICAgICBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdC0+
c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGZhbHNlKTsKICAgICBtX2Rpc2NhcmRQcmV2
aW91c0xheWVyVHJlZUhvc3RUaW1lci5zdGFydE9uZVNob3QoNV9zKTsKLSNlbHNlCi0gICAgbV9s
YXllclRyZWVIb3N0ID0gbnVsbHB0cjsKLSNlbmRpZgogfQogCiB2b2lkIEFjY2VsZXJhdGVkRHJh
d2luZ0FyZWE6OmRpc2NhcmRQcmV2aW91c0xheWVyVHJlZUhvc3QoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5o
CmluZGV4IGY3ZWY5ZjZmNTM1Li40MzM3MTcwYTc4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaApAQCAt
NDAsOCArNDAsOCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICAvLyBEcmF3aW5nQXJlYQot
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGUgeyB9OworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZSB7IH07CiAgICAgdm9pZCBz
Y3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2Nyb2xsRGVsdGEpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TGF5ZXJUcmVlU3Rh
dGVJc0Zyb3plbihib29sKSBvdmVycmlkZTsKICAgICBib29sIGxheWVyVHJlZVN0YXRlSXNGcm96
ZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW47IH0K
QEAgLTEyOCw5ICsxMjgsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgUnVuTG9vcDo6VGltZXI8QWNjZWxl
cmF0ZWREcmF3aW5nQXJlYT4gbV9leGl0Q29tcG9zaXRpbmdUaW1lcjsKIAogICAgIC8vIFRoZSBs
YXllciB0cmVlIGhvc3QgdGhhdCBoYW5kbGVzIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLgotICAg
IFJlZlB0cjxMYXllclRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CisgICAgc3RkOjp1bmlxdWVf
cHRyPExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAotICAgIFJlZlB0cjxMYXllclRy
ZWVIb3N0PiBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5
ZXJUcmVlSG9zdD4gbV9wcmV2aW91c0xheWVyVHJlZUhvc3Q7CiAgICAgUnVuTG9vcDo6VGltZXI8
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYT4gbV9kaXNjYXJkUHJldmlvdXNMYXllclRyZWVIb3N0VGlt
ZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYjdhMmRk
ZTcyLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChDKSAy
MDEyIENvbXBhbnkgMTAwLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVy
VHJlZUhvc3QuaCIKLQotI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCi0jaW5jbHVkZSAiV2ViUGFn
ZS5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KLQotI2lmIFVTRShHTElCX0VWRU5UX0xPT1Ap
Ci0jaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5Lmg+Ci0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotUmVmPENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdD4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUoV2Vi
UGFnZSYgd2ViUGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Qod2ViUGFnZSkpOwotfQotCi1Db29yZGluYXRlZExheWVyVHJlZUhvc3Q6On5D
b29yZGluYXRlZExheWVyVHJlZUhvc3QoKQotewotfQotCi1Db29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlJiB3ZWJQYWdlKQotICAgIDogTGF5
ZXJUcmVlSG9zdCh3ZWJQYWdlKQotICAgICwgbV9jb29yZGluYXRvcih3ZWJQYWdlLmNvcmVQYWdl
KCksICp0aGlzKQotICAgICwgbV9sYXllckZsdXNoVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlz
LCAmQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKLXsKLSNp
ZiBVU0UoR0xJQl9FVkVOVF9MT09QKQotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnNldFByaW9yaXR5
KFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6TGF5ZXJGbHVzaFRpbWVyKTsKLSAgICBtX2xheWVyRmx1
c2hUaW1lci5zZXROYW1lKCJbV2ViS2l0XSBDb29yZGluYXRlZExheWVyVHJlZUhvc3QiKTsKLSNl
bmRpZgotICAgIG1fY29vcmRpbmF0b3IuY3JlYXRlUm9vdExheWVyKG1fd2ViUGFnZS5zaXplKCkp
OwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzY2hlZHVsZUxheWVyRmx1c2goKQotewotICAgIGlmICghbV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzV2FpdGlu
Z0ZvclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVy
ZXIgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2xheWVyRmx1
c2hUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNo
b3QoMF9zKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCkKLXsKLSAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaWV3T3ZlcmxheVJvb3RMYXllcihHcmFw
aGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikKLXsKLSAgICBMYXllclRyZWVIb3N0Ojpz
ZXRWaWV3T3ZlcmxheVJvb3RMYXllcih2aWV3T3ZlcmxheVJvb3RMYXllcik7Ci0gICAgbV9jb29y
ZGluYXRvci5zZXRWaWV3T3ZlcmxheVJvb3RMYXllcih2aWV3T3ZlcmxheVJvb3RMYXllcik7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXll
cihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIG1fY29vcmRpbmF0b3Iuc2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBjYW5jZWxQZW5kaW5nTGF5ZXJG
bHVzaCgpOwotCi0gICAgbV9jb29yZGluYXRvci5pbnZhbGlkYXRlKCk7Ci0gICAgTGF5ZXJUcmVl
SG9zdDo6aW52YWxpZGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Zm9yY2VSZXBhaW50KCkKLXsKLSAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcnVubmluZyBs
YXlvdXQgdGVzdHMuIFNpbmNlIGluIHRoaXMgY2FzZSB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGEg
VUlQcm9jZXNzIHRvIHJlcGx5IG5pY2VseS4KLSAgICAvLyBJbnN0ZWFkIHdlIGFyZSBqdXN0IHRy
aWdnZXJpbmcgZm9yY2VSZXBhaW50LiBCdXQgd2Ugc3RpbGwgd2FudCB0byBoYXZlIHRoZSBzY3Jp
cHRlZCBhbmltYXRpb24gY2FsbGJhY2tzIGJlaW5nIGV4ZWN1dGVkLgotICAgIG1fY29vcmRpbmF0
b3Iuc3luY0Rpc3BsYXlTdGF0ZSgpOwotCi0gICAgLy8gV2UgbmVlZCB0byBzY2hlZHVsZSBhbm90
aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhlIGZvcmNlZCBwYWludCBtaWdodCBjYW5jZWwgYSBsYXRl
ciBleHBlY3RlZCBmbHVzaC4KLSAgICAvLyBUaGlzIGlzIGFsaWduZWQgd2l0aCBMYXllclRyZWVI
b3N0Q0EuCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0KLSAgICBpZiAobV9pc1dhaXRpbmdG
b3JSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb29yZGluYXRvci5mbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMoKTsKLX0KLQotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKLXsKLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKLQotICAgIC8vIFdlIHdhbnQgYSBjbGVhbiByZXBhaW50LCBtZWFuaW5n
IHRoYXQgaWYgd2UncmUgY3VycmVudGx5IHdhaXRpbmcgZm9yIHRoZSByZW5kZXJlcgotICAgIC8v
IHRvIGZpbmlzaCBhbiB1cGRhdGUsIHdlJ2xsIGhhdmUgdG8gc2NoZWR1bGUgYW5vdGhlciBmbHVz
aCB3aGVuIGl0J3MgZG9uZS4KLSAgICBBU1NFUlQoIW1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJh
Y2tJRCk7Ci0gICAgbV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEID0gT3B0aW9uYWxDYWxs
YmFja0lEKGNhbGxiYWNrSUQpOwotICAgIG1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZs
dXNoID0gbV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlcjsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2UoY29u
c3QgSW50U2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICBtX2Nvb3JkaW5hdG9yLnNpemVEaWRDaGFuZ2Uo
bmV3U2l6ZSk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBtX2Nvb3JkaW5hdG9yLnNldFZpc2libGVDb250ZW50c1JlY3QocmVjdCk7
Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUoYm9vbCBmb3JjZVJlcGFpbnQpCi17Ci0gICAgbV9pc1dh
aXRpbmdGb3JSZW5kZXJlciA9IGZhbHNlOwotICAgIGJvb2wgc2NoZWR1bGVkV2hpbGVXYWl0aW5n
Rm9yUmVuZGVyZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVu
ZGVyZXIsIGZhbHNlKTsKLSAgICBtX2Nvb3JkaW5hdG9yLnJlbmRlck5leHRGcmFtZSgpOwotCi0g
ICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCkgewotICAgICAgICAvLyBJZiB0
aGUgYXN5bmNocm9ub3VzIGZvcmNlLXJlcGFpbnQgbmVlZHMgYSBzZXBhcmF0ZSBmcmVzaCBmbHVz
aCwgaXQgd2FzIGR1ZSB0bwotICAgICAgICAvLyB0aGUgZm9yY2UtcmVwYWludCByZXF1ZXN0IGJl
aW5nIHJlZ2lzdGVyZWQgd2hpbGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHdhcwotICAgICAg
ICAvLyB3YWl0aW5nIGZvciB0aGUgcmVuZGVyZXIgdG8gZmluaXNoIGFuIHVwZGF0ZS4KLSAgICAg
ICAgQVNTRVJUKCFtX2ZvcmNlUmVwYWludEFzeW5jLm5lZWRzRnJlc2hGbHVzaCB8fCBzY2hlZHVs
ZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlcik7Ci0KLSAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY2Fs
bGJhY2sgaWYgYW5vdGhlciBsYXllciBmbHVzaCBhbmQgdGhlIHN1YnNlcXVlbnQgc3RhdGUgdXBk
YXRlCi0gICAgICAgIC8vIGFyZW4ndCBuZWVkZWQuIElmIHRoZXkgYXJlLCB0aGUgY2FsbGJhY2sg
d2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoaXMgZnVuY3Rpb24KLSAgICAgICAgLy8gaXMgY2FsbGVk
IGFmdGVyIHRoZSBuZXh0IHVwZGF0ZS4KLSAgICAgICAgaWYgKCFtX2ZvcmNlUmVwYWludEFzeW5j
Lm5lZWRzRnJlc2hGbHVzaCkgewotICAgICAgICAgICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJ
RC5jYWxsYmFja0lEKCkpKTsKLSAgICAgICAgICAgIG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJh
Y2tJRCA9IE9wdGlvbmFsQ2FsbGJhY2tJRCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fZm9yY2VS
ZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHNj
aGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyIHx8IG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0
aXZlKCkgfHwgZm9yY2VSZXBhaW50KSB7Ci0gICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3Ao
KTsKLSAgICAgICAgaWYgKGZvcmNlUmVwYWludCkKLSAgICAgICAgICAgIG1fY29vcmRpbmF0b3Iu
Zm9yY2VGcmFtZVN5bmMoKTsKLSAgICAgICAgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKLSAgICB9
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRGbHVzaFJvb3RMYXllcihj
b25zdCBGbG9hdFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkKLXsKLSAgICAvLyBCZWNhdXNlIG91
ciB2aWV3LXJlbGF0aXZlIG92ZXJsYXkgcm9vdCBsYXllciBpcyBub3QgYXR0YWNoZWQgdG8gdGhl
IEZyYW1lVmlldydzIEdyYXBoaWNzTGF5ZXIgdHJlZSwgd2UgbmVlZCB0byBmbHVzaCBpdCBtYW51
YWxseS4KLSAgICBpZiAobV92aWV3T3ZlcmxheVJvb3RMYXllcikKLSAgICAgICAgbV92aWV3T3Zl
cmxheVJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHZpc2libGVDb250ZW50UmVjdCk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJl
ZCgpCi17Ci0gICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV9pc1dhaXRpbmdGb3JSZW5kZXJlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb29yZGluYXRvci5zeW5jRGlzcGxheVN0YXRlKCk7
Ci0gICAgbV93ZWJQYWdlLmZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRlKCk7Ci0gICAgbV93
ZWJQYWdlLndpbGxEaXNwbGF5UGFnZSgpOwotCi0gICAgaWYgKCFtX2lzVmFsaWQgfHwgIW1fY29v
cmRpbmF0b3Iucm9vdENvbXBvc2l0aW5nTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gSWYgYSBmb3JjZS1yZXBhaW50IGNhbGxiYWNrIHdhcyByZWdpc3RlcmVkLCB3ZSBzaG91bGQg
Zm9yY2UgYSAnZnJhbWUgc3luYycgdGhhdAotICAgIC8vIHdpbGwgZ3VhcmFudGVlIHVzIGEgY2Fs
bCB0byByZW5kZXJOZXh0RnJhbWUoKSBvbmNlIHRoZSB1cGRhdGUgaXMgY29tcGxldGUuCi0gICAg
aWYgKG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCkKLSAgICAgICAgbV9jb29yZGluYXRv
ci5mb3JjZUZyYW1lU3luYygpOwotCi0gICAgYm9vbCBkaWRTeW5jID0gbV9jb29yZGluYXRvci5m
bHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKLQotICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaCAmJiBkaWRTeW5jKSB7Ci0gICAgICAgIG1fd2ViUGFnZS5kcmF3aW5nQXJl
YSgpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOwotICAgICAgICBtX25vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0
YXRlJiBzdGF0ZSkKLXsKLSAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gdHJ1ZTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoTGF5ZXJzQW5kRm9yY2VSZXBhaW50
KCkKLXsKLSAgICBtX2Nvb3JkaW5hdG9yLmZvcmNlRnJhbWVTeW5jKCk7Ci0gICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VP
clBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQotewotICAgIG1fY29vcmRpbmF0b3IuZGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci0gICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCk7Ci19Ci0KLUdy
YXBoaWNzTGF5ZXJGYWN0b3J5KiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNzTGF5
ZXJGYWN0b3J5KCkKLXsKLSAgICByZXR1cm4gJm1fY29vcmRpbmF0b3I7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCi17Ci0gICAgaWYgKG1f
aXNXYWl0aW5nRm9yUmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2xheWVy
Rmx1c2hUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKLSAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QoMV9zICogbV9j
b29yZGluYXRvci5uZXh0QW5pbWF0aW9uU2VydmljZVRpbWUoKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTk3NDUzMTU0Yy4uMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8q
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICAgIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSov
Ci0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0X2gKLSNkZWZpbmUgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0X2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2lu
Y2x1ZGUgIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0
LmgiCi0jaW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCi0jaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3NMYXllckZhY3Rvcnk7
Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgcHVibGljIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAotewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0PiBjcmVhdGUoV2ViUGFnZSYpOwotICAgIHZpcnR1YWwgfkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UmKTsKLQotICAgIHZvaWQgc2NoZWR1bGVMYXll
ckZsdXNoKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopIG92ZXJyaWRlOwotICAgIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBmb3JjZVJlcGFpbnQoKSBvdmVycmlkZTsKLSAgICBib29sIGZvcmNlUmVwYWludEFz
eW5jKENhbGxiYWNrSUQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldFZpc2libGVD
b250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCByZW5kZXJO
ZXh0RnJhbWUoYm9vbCk7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3Jh
cGhpY3NMYXllckZhY3RvcnkoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2NoZWR1bGVBbmltYXRp
b24oKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0Vmlld092ZXJsYXlSb290TGF5ZXIoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwotCi0gICAgLy8gQ29tcG9zaXRpbmdDb29yZGlu
YXRvcjo6Q2xpZW50Ci0gICAgdm9pZCBkaWRGbHVzaFJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBub3RpZnlG
bHVzaFJlcXVpcmVkKCkgb3ZlcnJpZGUgeyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfTsKLSAgICB2
b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0
YXRlJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZsdXNoTGF5ZXJzQW5kRm9yY2VSZXBhaW50KCk7
Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZCgpOwotCi0gICAgQ29t
cG9zaXRpbmdDb29yZGluYXRvciBtX2Nvb3JkaW5hdG9yOwotICAgIGJvb2wgbV9pc1dhaXRpbmdG
b3JSZW5kZXJlciB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3NjaGVkdWxlZFdoaWxlV2FpdGluZ0Zv
clJlbmRlcmVyIHsgZmFsc2UgfTsKLSAgICBzdHJ1Y3QgewotICAgICAgICBPcHRpb25hbENhbGxi
YWNrSUQgY2FsbGJhY2tJRDsKLSAgICAgICAgYm9vbCBuZWVkc0ZyZXNoRmx1c2ggeyBmYWxzZSB9
OwotICAgIH0gbV9mb3JjZVJlcGFpbnRBc3luYzsKLSAgICBSdW5Mb29wOjpUaW1lcjxDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNlbmRp
ZiAvLyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwCnNpbWlsYXJpdHkgaW5kZXggNTMl
CnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCnJlbmFtZSB0byBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUhvc3QuY3BwCmluZGV4IDEwMGZjNjRhNjE5Li40YzZmM2UzOWZhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcApAQCAt
Miw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAw
LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE5IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI3LDE0ICsyNywyMCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgIkxheWVyVHJl
ZUhvc3QuaCIKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKIAotI2lu
Y2x1ZGUgIkFjY2VsZXJhdGVkU3VyZmFjZS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KKworI2lmIFVTRShH
TElCX0VWRU5UX0xPT1ApCisjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5
Lmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKQEAgLTQ2LDIxICs1MiwyMSBAQCBzdGF0aWMgY29uc3QgUGxhdGZvcm1EaXNwbGF5SUQgY29t
cG9zaXRpbmdEaXNwbGF5SUQgPSAxOwogc3RhdGljIGNvbnN0IFBsYXRmb3JtRGlzcGxheUlEIGNv
bXBvc2l0aW5nRGlzcGxheUlEID0gcHJpbWFyeURpc3BsYXlJRDsKICNlbmRpZgogCi1SZWY8VGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjcmVhdGUoV2ViUGFnZSYgd2ViUGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKSk7Ci19Ci0KLVRo
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp+VGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3QoKQotewotfQotCi1UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6VGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYgd2ViUGFnZSkKLSAgICA6IENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorTGF5ZXJUcmVlSG9zdDo6TGF5ZXJUcmVl
SG9zdChXZWJQYWdlJiB3ZWJQYWdlKQorICAgIDogbV93ZWJQYWdlKHdlYlBhZ2UpCisgICAgLCBt
X2Nvb3JkaW5hdG9yKHdlYlBhZ2UuY29yZVBhZ2UoKSwgKnRoaXMpCiAgICAgLCBtX2NvbXBvc2l0
b3JDbGllbnQoKnRoaXMpCiAgICAgLCBtX3N1cmZhY2UoQWNjZWxlcmF0ZWRTdXJmYWNlOjpjcmVh
dGUod2ViUGFnZSwgKnRoaXMpKQogICAgICwgbV92aWV3cG9ydENvbnRyb2xsZXIod2ViUGFnZS5z
aXplKCkpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZM
YXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKIHsKKyNpZiBVU0UoR0xJQl9FVkVO
VF9MT09QKQorICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnNldFByaW9yaXR5KFJ1bkxvb3BTb3VyY2VQ
cmlvcml0eTo6TGF5ZXJGbHVzaFRpbWVyKTsKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zZXROYW1l
KCJbV2ViS2l0XSBMYXllclRyZWVIb3N0Iik7CisjZW5kaWYKKyAgICBtX2Nvb3JkaW5hdG9yLmNy
ZWF0ZVJvb3RMYXllcihtX3dlYlBhZ2Uuc2l6ZSgpKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKKwogICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fd2ViUGFnZS5tYWluRnJhbWVW
aWV3KCkpIHsKICAgICAgICAgYXV0byBjb250ZW50c1NpemUgPSBmcmFtZVZpZXctPmNvbnRlbnRz
U2l6ZSgpOwogICAgICAgICBpZiAoIWNvbnRlbnRzU2l6ZS5pc0VtcHR5KCkpCkBAIC04Nyw3MCAr
OTMsOTYgQEAgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OlRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlAKICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgp
OwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRl
KCkKK0xheWVyVHJlZUhvc3Q6On5MYXllclRyZWVIb3N0KCkKIHsKLSAgICBtX2NvbXBvc2l0b3It
PmludmFsaWRhdGUoKTsKLSAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUo
KTsKLSAgICBtX3N1cmZhY2UgPSBudWxscHRyOworICAgIEFTU0VSVCghbV9pc1ZhbGlkKTsKIH0K
IAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkK
K3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wg
bGF5ZXJGbHVzaGluZ0VuYWJsZWQpCiB7Ci0gICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpm
b3JjZVJlcGFpbnQoKTsKLSAgICBtX2NvbXBvc2l0b3ItPmZvcmNlUmVwYWludCgpOwotfQorICAg
IGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxl
ZCkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpmcmFtZUNvbXBsZXRlKCkKLXsKLSAgICBtX2NvbXBvc2l0b3ItPmZyYW1lQ29tcGxldGUo
KTsKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxheWVyRmx1c2hpbmdFbmFi
bGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKSB7CisgICAgICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2Fu
Y2VsUGVuZGluZ0xheWVyRmx1c2goKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6cmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpCit2b2lkIExh
eWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCiB7Ci0gICAgLy8gRmx1c2ggbGF5ZXJz
IHRvIGNhdXNlIGEgcmVwYWludC4gSWYgbV9pc1dhaXRpbmdGb3JSZW5kZXJlciB3YXMgdHJ1ZSBh
dCB0aGlzIHBvaW50LCB0aGUgbGF5ZXIKLSAgICAvLyBmbHVzaCB3b24ndCBkbyBhbnl0aGluZywg
YnV0IHRoYXQgbWVhbnMgdGhlcmUncyBhIHBhaW50aW5nIG9uZ29pbmcgdGhhdCB3aWxsIHNlbmQg
dGhlCi0gICAgLy8gZGlzcGxheSByZWZyZXNoIG5vdGlmaWNhdGlvbiB3aGVuIGl0J3MgZG9uZS4K
LSAgICBmbHVzaExheWVyc0FuZEZvcmNlUmVwYWludCgpOworICAgIGlmICghbV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2lzV2FpdGlu
Z0ZvclJlbmRlcmVyKSB7CisgICAgICAgIG1fc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVy
ZXIgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2xheWVyRmx1
c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNo
b3QoMF9zKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aGFu
ZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wgaGFzQmVlblJlc2NoZWR1bGVkKQor
dm9pZCBMYXllclRyZWVIb3N0OjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCiB7Ci0gICAgLy8g
Q2FsbCByZW5kZXJOZXh0RnJhbWUuIElmIGhhc0JlZW5SZXNjaGVkdWxlZCBpcyB0cnVlLCB0aGUg
bGF5ZXIgZmx1c2ggd2lsbCBmb3JjZSBhIHJlcGFpbnQKLSAgICAvLyB0aGF0IHdpbGwgY2F1c2Ug
dGhlIGRpc3BsYXkgcmVmcmVzaCBub3RpZmljYXRpb24gdG8gY29tZS4KLSAgICByZW5kZXJOZXh0
RnJhbWUoaGFzQmVlblJlc2NoZWR1bGVkKTsKLSAgICBtX2NvbXBvc2l0b3ItPmhhbmRsZURpc3Bs
YXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsK
IH0KIAotdWludDY0X3QgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5hdGl2ZVN1
cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpCit2b2lkIExheWVyVHJlZUhvc3Q6OmxheWVyRmx1
c2hUaW1lckZpcmVkKCkKIHsKLSAgICBpZiAoIW1fc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1f
bGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQ7CisgICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV9p
c1dhaXRpbmdGb3JSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zdXJmYWNlLT5p
bml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIG1fc3VyZmFjZS0+d2luZG93KCk7CisgICAgbV9jb29y
ZGluYXRvci5zeW5jRGlzcGxheVN0YXRlKCk7CisgICAgbV93ZWJQYWdlLmZsdXNoUGVuZGluZ0Vk
aXRvclN0YXRlVXBkYXRlKCk7CisgICAgbV93ZWJQYWdlLndpbGxEaXNwbGF5UGFnZSgpOworCisg
ICAgaWYgKCFtX2lzVmFsaWQgfHwgIW1fY29vcmRpbmF0b3Iucm9vdENvbXBvc2l0aW5nTGF5ZXIo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgYSBmb3JjZS1yZXBhaW50IGNhbGxiYWNr
IHdhcyByZWdpc3RlcmVkLCB3ZSBzaG91bGQgZm9yY2UgYSAnZnJhbWUgc3luYycgdGhhdAorICAg
IC8vIHdpbGwgZ3VhcmFudGVlIHVzIGEgY2FsbCB0byByZW5kZXJOZXh0RnJhbWUoKSBvbmNlIHRo
ZSB1cGRhdGUgaXMgY29tcGxldGUuCisgICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJh
Y2tJRCkKKyAgICAgICAgbV9jb29yZGluYXRvci5mb3JjZUZyYW1lU3luYygpOworCisgICAgYm9v
bCBkaWRTeW5jID0gbV9jb29yZGluYXRvci5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKwor
ICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCAmJiBkaWRTeW5jKSB7Cisg
ICAgICAgIG1fd2ViUGFnZS5kcmF3aW5nQXJlYSgpLT5sYXllckhvc3REaWRGbHVzaExheWVycygp
OworICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworICAg
IH0KIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkRGVzdHJv
eUdMQ29udGV4dCgpCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldFJvb3RDb21wb3NpdGluZ0xheWVy
KEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAg
ICAgICAgbV9zdXJmYWNlLT5maW5hbGl6ZSgpOworICAgIG1fY29vcmRpbmF0b3Iuc2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7CiB9CiAKLXZvaWQgVGhyZWFkZWRDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OndpbGxSZW5kZXJGcmFtZSgpCit2b2lkIExheWVyVHJlZUhvc3Q6
OnNldFZpZXdPdmVybGF5Um9vdExheWVyKEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExh
eWVyKQogewotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1fc3VyZmFjZS0+d2lsbFJlbmRl
ckZyYW1lKCk7CisgICAgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9IHZpZXdPdmVybGF5Um9vdExh
eWVyOworICAgIG1fY29vcmRpbmF0b3Iuc2V0Vmlld092ZXJsYXlSb290TGF5ZXIodmlld092ZXJs
YXlSb290TGF5ZXIpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpkaWRSZW5kZXJGcmFtZSgpCit2b2lkIExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQogewot
ICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1fc3VyZmFjZS0+ZGlkUmVuZGVyRnJhbWUoKTsK
KyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKworICAgIGNh
bmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisKKyAgICBtX2Nvb3JkaW5hdG9yLmludmFsaWRhdGUo
KTsKKyAgICBtX2NvbXBvc2l0b3ItPmludmFsaWRhdGUoKTsKKyAgICBtX3N1cmZhY2UgPSBudWxs
cHRyOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY3JvbGxO
b25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgTGF5ZXJUcmVl
SG9zdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UubWFpbkZyYW1lVmlldygpOwor
ICAgIGF1dG8qIGZyYW1lVmlldyA9IG1fd2ViUGFnZS5tYWluRnJhbWVWaWV3KCk7CiAgICAgaWYg
KCFmcmFtZVZpZXcgfHwgIWZyYW1lVmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMTYxLDMwICsxOTMsMzMgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IEludFJlY3QK
ICAgICAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y29udGVudHNTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJiBuZXdT
aXplKQordm9pZCBMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKQogewotICAgIG1fdmlld3Bv
cnRDb250cm9sbGVyLmRpZENoYW5nZUNvbnRlbnRzU2l6ZShuZXdTaXplKTsKLSAgICBpZiAobV9p
c0Rpc2NhcmRhYmxlKQotICAgICAgICBtX2Rpc2NhcmRhYmxlU3luY0FjdGlvbnMuYWRkKERpc2Nh
cmRhYmxlU3luY0FjdGlvbnM6OlVwZGF0ZVZpZXdwb3J0KTsKLSAgICBlbHNlCi0gICAgICAgIGRp
ZENoYW5nZVZpZXdwb3J0KCk7CisgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHJ1bm5pbmcg
bGF5b3V0IHRlc3RzLiBTaW5jZSBpbiB0aGlzIGNhc2Ugd2UgYXJlIG5vdCB3YWl0aW5nIGZvciBh
IFVJUHJvY2VzcyB0byByZXBseSBuaWNlbHkuCisgICAgLy8gSW5zdGVhZCB3ZSBhcmUganVzdCB0
cmlnZ2VyaW5nIGZvcmNlUmVwYWludC4gQnV0IHdlIHN0aWxsIHdhbnQgdG8gaGF2ZSB0aGUgc2Ny
aXB0ZWQgYW5pbWF0aW9uIGNhbGxiYWNrcyBiZWluZyBleGVjdXRlZC4KKyAgICBtX2Nvb3JkaW5h
dG9yLnN5bmNEaXNwbGF5U3RhdGUoKTsKKworICAgIC8vIFdlIG5lZWQgdG8gc2NoZWR1bGUgYW5v
dGhlciBmbHVzaCwgb3RoZXJ3aXNlIHRoZSBmb3JjZWQgcGFpbnQgbWlnaHQgY2FuY2VsIGEgbGF0
ZXIgZXhwZWN0ZWQgZmx1c2guCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisKKyAgICBpZiAo
IW1faXNXYWl0aW5nRm9yUmVuZGVyZXIpCisgICAgICAgIG1fY29vcmRpbmF0b3IuZmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgbV9jb21wb3NpdG9yLT5mb3JjZVJlcGFpbnQoKTsKIH0K
IAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2Nh
bGVGYWN0b3JDaGFuZ2VkKCkKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmMo
Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewotICAgIGlmIChtX2lzRGlzY2FyZGFibGUpIHsKLSAg
ICAgICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25z
OjpVcGRhdGVTY2FsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zdXJm
YWNlICYmIG1fc3VyZmFjZS0+aG9zdFJlc2l6ZShtX3dlYlBhZ2Uuc2l6ZSgpKSkKLSAgICAgICAg
bV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCA9IG1fc3VyZmFjZS0+c3VyZmFjZUlEKCk7Cisg
ICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiAKLSAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwotICAgIG1fY29tcG9zaXRvci0+c2V0
U2NhbGVGYWN0b3IobV93ZWJQYWdlLmRldmljZVNjYWxlRmFjdG9yKCkgKiBtX3ZpZXdwb3J0Q29u
dHJvbGxlci5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgLy8gV2Ugd2FudCBhIGNsZWFuIHJlcGFp
bnQsIG1lYW5pbmcgdGhhdCBpZiB3ZSdyZSBjdXJyZW50bHkgd2FpdGluZyBmb3IgdGhlIHJlbmRl
cmVyCisgICAgLy8gdG8gZmluaXNoIGFuIHVwZGF0ZSwgd2UnbGwgaGF2ZSB0byBzY2hlZHVsZSBh
bm90aGVyIGZsdXNoIHdoZW4gaXQncyBkb25lLgorICAgIEFTU0VSVCghbV9mb3JjZVJlcGFpbnRB
c3luYy5jYWxsYmFja0lEKTsKKyAgICBtX2ZvcmNlUmVwYWludEFzeW5jLmNhbGxiYWNrSUQgPSBP
cHRpb25hbENhbGxiYWNrSUQoY2FsbGJhY2tJRCk7CisgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5u
ZWVkc0ZyZXNoRmx1c2ggPSBtX3NjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyOworICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lkIExheWVyVHJlZUhvc3Q6
OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAobV9pc0Rpc2Nh
cmRhYmxlKSB7CiAgICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5hZGQoRGlzY2FyZGFi
bGVTeW5jQWN0aW9uczo6VXBkYXRlU2l6ZSk7CkBAIC0xOTUsNyArMjMwLDkgQEAgdm9pZCBUaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXpl
JiBzaXplKQogICAgIGlmIChtX3N1cmZhY2UgJiYgbV9zdXJmYWNlLT5ob3N0UmVzaXplKHNpemUp
KQogICAgICAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElEID0gbV9zdXJmYWNlLT5zdXJm
YWNlSUQoKTsKIAotICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShz
aXplKTsKKyAgICBtX2Nvb3JkaW5hdG9yLnNpemVEaWRDaGFuZ2Uoc2l6ZSk7CisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7CisKICAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFuZ2VWaWV3
cG9ydFNpemUoc2l6ZSk7CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplKHNpemUpOwogICAgIHNjYWxl
ZFNpemUuc2NhbGUobV93ZWJQYWdlLmRldmljZVNjYWxlRmFjdG9yKCkpOwpAQCAtMjAzLDI1ICsy
NDAsNDEgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENo
YW5nZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGRpZENoYW5nZVZpZXdwb3J0KCk7CiB9CiAK
LXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0
QXR0cmlidXRlcyhWaWV3cG9ydEF0dHJpYnV0ZXMmJiBhdHRyKQordm9pZCBMYXllclRyZWVIb3N0
OjpwYXVzZVJlbmRlcmluZygpCiB7Ci0gICAgbV92aWV3cG9ydENvbnRyb2xsZXIuZGlkQ2hhbmdl
Vmlld3BvcnRBdHRyaWJ1dGVzKFdURk1vdmUoYXR0cikpOworICAgIG1faXNTdXNwZW5kZWQgPSB0
cnVlOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnJlc3VtZVJlbmRlcmluZygpCit7CisgICAg
bV9pc1N1c3BlbmRlZCA9IGZhbHNlOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitH
cmFwaGljc0xheWVyRmFjdG9yeSogTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3Rvcnko
KQoreworICAgIHJldHVybiAmbV9jb29yZGluYXRvcjsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
Ojpjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAgbV92
aWV3cG9ydENvbnRyb2xsZXIuZGlkQ2hhbmdlQ29udGVudHNTaXplKG5ld1NpemUpOwogICAgIGlm
IChtX2lzRGlzY2FyZGFibGUpCiAgICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5hZGQo
RGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlVmlld3BvcnQpOwogICAgIGVsc2UKICAgICAg
ICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKIH0KIAotI2lmIFBMQVRGT1JNKEdUSykgJiYgUExBVEZP
Uk0oWDExKSAmJiAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi12b2lkIFRocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29t
cG9zaXRpbmcodWludDY0X3QgaGFuZGxlKQordm9pZCBMYXllclRyZWVIb3N0OjpkaWRDaGFuZ2VW
aWV3cG9ydEF0dHJpYnV0ZXMoVmlld3BvcnRBdHRyaWJ1dGVzJiYgYXR0cikKIHsKLSAgICBtX2xh
eWVyVHJlZUNvbnRleHQuY29udGV4dElEID0gaGFuZGxlOwotICAgIG1fY29tcG9zaXRvci0+c2V0
TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKGhhbmRsZSk7Ci0gICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7CisgICAgbV92aWV3cG9ydENvbnRyb2xsZXIuZGlkQ2hhbmdlVmlld3BvcnRB
dHRyaWJ1dGVzKFdURk1vdmUoYXR0cikpOworICAgIGlmIChtX2lzRGlzY2FyZGFibGUpCisgICAg
ICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5hZGQoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6
VXBkYXRlVmlld3BvcnQpOworICAgIGVsc2UKKyAgICAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsK
IH0KLSNlbmRpZgogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRD
aGFuZ2VWaWV3cG9ydCgpCit2b2lkIExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0KCkK
IHsKICAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QobV92aWV3cG9ydENvbnRyb2xsZXIudmlzaWJs
ZUNvbnRlbnRzUmVjdCgpKTsKICAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpKQpAQCAtMjM4
LDcgKzI5MSw4IEBAIHZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZENo
YW5nZVZpZXdwb3J0KCkKICAgICBpZiAoc2Nyb2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpKQogICAgICAgICB2aXNpYmxlUmVjdC5leHBhbmQoMCwgc2Nyb2xsYmFyLT5o
ZWlnaHQoKSk7CiAKLSAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250
ZW50c1JlY3QodmlzaWJsZVJlY3QpOworICAgIG1fY29vcmRpbmF0b3Iuc2V0VmlzaWJsZUNvbnRl
bnRzUmVjdCh2aXNpYmxlUmVjdCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CiAKICAgICBm
bG9hdCBwYWdlU2NhbGUgPSBtX3ZpZXdwb3J0Q29udHJvbGxlci5wYWdlU2NhbGVGYWN0b3IoKTsK
ICAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHJvdW5kZWRJbnRQb2ludCh2aXNpYmxlUmVj
dC5sb2NhdGlvbigpKTsKQEAgLTI1NiwxMyArMzEwLDcgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQoKQogICAgIH0KIH0KIAotdm9pZCBU
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2NlbmVTdGF0ZShjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQotewotICAgIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y29tbWl0U2NlbmVTdGF0ZShzdGF0ZSk7Ci0gICAgbV9jb21wb3NpdG9yLT51cGRh
dGVTY2VuZVN0YXRlKHN0YXRlKTsKLX0KLQotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJsZShib29sIGRpc2NhcmRhYmxlKQordm9pZCBMYXllclRy
ZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKGJvb2wgZGlzY2FyZGFibGUpCiB7CiAgICAgbV9pc0Rp
c2NhcmRhYmxlID0gZGlzY2FyZGFibGU7CiAgICAgaWYgKG1faXNEaXNjYXJkYWJsZSkgewpAQCAt
Mjg4LDEzICszMzYsMTI5IEBAIHZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNldElzRGlzY2FyZGFibGUoYm9vbCBkaXNjYXJkYWJsZSkKICAgICAgICAgZGlkQ2hhbmdlVmll
d3BvcnQoKTsKIH0KIAorI2lmIFBMQVRGT1JNKEdUSykgJiYgUExBVEZPUk0oWDExKSAmJiAhVVNF
KFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldE5h
dGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCBoYW5kbGUpCit7CisgICAg
bV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCA9IGhhbmRsZTsKKyAgICBtX2NvbXBvc2l0b3It
PnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyhoYW5kbGUpOworICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9pc0Rpc2NhcmRhYmxlKSB7
CisgICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5hZGQoRGlzY2FyZGFibGVTeW5jQWN0
aW9uczo6VXBkYXRlU2NhbGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
c3VyZmFjZSAmJiBtX3N1cmZhY2UtPmhvc3RSZXNpemUobV93ZWJQYWdlLnNpemUoKSkpCisgICAg
ICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBtX3N1cmZhY2UtPnN1cmZhY2VJRCgp
OworCisgICAgbV9jb29yZGluYXRvci5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsK
KyAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hh
bmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBtX2NvbXBvc2l0b3ItPnNldFNjYWxlRmFjdG9y
KG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpICogbV92aWV3cG9ydENvbnRyb2xsZXIucGFn
ZVNjYWxlRmFjdG9yKCkpOworfQorCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJ
U1BMQVlfTU9OSVRPUikKLVJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFRo
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQorUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9u
aXRvcj4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3Jt
RGlzcGxheUlEIGRpc3BsYXlJRCkKIHsKICAgICByZXR1cm4gbV9jb21wb3NpdG9yLT5kaXNwbGF5
UmVmcmVzaE1vbml0b3IoZGlzcGxheUlEKTsKIH0KICNlbmRpZgogCit2b2lkIExheWVyVHJlZUhv
c3Q6OmRpZEZsdXNoUm9vdExheWVyKGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0
KQoreworICAgIC8vIEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRpdmUgb3ZlcmxheSByb290IGxheWVy
IGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NMYXllciB0cmVlLCB3
ZSBuZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgorICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExh
eWVyKQorICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3Rh
dGUodmlzaWJsZUNvbnRlbnRSZWN0KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0Ojpjb21taXRT
Y2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCit7CisgICAg
bV9pc1dhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7CisgICAgbV9jb21wb3NpdG9yLT51cGRhdGVT
Y2VuZVN0YXRlKHN0YXRlKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpmcmFtZUNvbXBsZXRl
KCkKK3sKKyAgICBtX2NvbXBvc2l0b3ItPmZyYW1lQ29tcGxldGUoKTsKK30KKwordWludDY0X3Qg
TGF5ZXJUcmVlSG9zdDo6bmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCkKK3sKKyAg
ICBpZiAoIW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250
ZXh0SUQ7CisKKyAgICBtX3N1cmZhY2UtPmluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gbV9zdXJm
YWNlLT53aW5kb3coKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpkaWREZXN0cm95R0xDb250
ZXh0KCkKK3sKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPmZpbmFsaXpl
KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6d2lsbFJlbmRlckZyYW1lKCkKK3sKKyAgICBp
ZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPndpbGxSZW5kZXJGcmFtZSgpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3Q6OmRpZFJlbmRlckZyYW1lKCkKK3sKKyAgICBpZiAobV9zdXJm
YWNlKQorICAgICAgICBtX3N1cmZhY2UtPmRpZFJlbmRlckZyYW1lKCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6cmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpCit7CisgICAg
Ly8gRmx1c2ggbGF5ZXJzIHRvIGNhdXNlIGEgcmVwYWludC4gSWYgbV9pc1dhaXRpbmdGb3JSZW5k
ZXJlciB3YXMgdHJ1ZSBhdCB0aGlzIHBvaW50LCB0aGUgbGF5ZXIKKyAgICAvLyBmbHVzaCB3b24n
dCBkbyBhbnl0aGluZywgYnV0IHRoYXQgbWVhbnMgdGhlcmUncyBhIHBhaW50aW5nIG9uZ29pbmcg
dGhhdCB3aWxsIHNlbmQgdGhlCisgICAgLy8gZGlzcGxheSByZWZyZXNoIG5vdGlmaWNhdGlvbiB3
aGVuIGl0J3MgZG9uZS4KKyAgICBtX2Nvb3JkaW5hdG9yLmZvcmNlRnJhbWVTeW5jKCk7CisgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6aGFuZGxlRGlz
cGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wgaGFzQmVlblJlc2NoZWR1bGVkKQoreworICAg
IC8vIENhbGwgcmVuZGVyTmV4dEZyYW1lLiBJZiBoYXNCZWVuUmVzY2hlZHVsZWQgaXMgdHJ1ZSwg
dGhlIGxheWVyIGZsdXNoIHdpbGwgZm9yY2UgYSByZXBhaW50CisgICAgLy8gdGhhdCB3aWxsIGNh
dXNlIHRoZSBkaXNwbGF5IHJlZnJlc2ggbm90aWZpY2F0aW9uIHRvIGNvbWUuCisgICAgcmVuZGVy
TmV4dEZyYW1lKGhhc0JlZW5SZXNjaGVkdWxlZCk7CisgICAgbV9jb21wb3NpdG9yLT5oYW5kbGVE
aXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0Ojpy
ZW5kZXJOZXh0RnJhbWUoYm9vbCBmb3JjZVJlcGFpbnQpCit7CisgICAgbV9pc1dhaXRpbmdGb3JS
ZW5kZXJlciA9IGZhbHNlOworICAgIGJvb2wgc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVy
ZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIsIGZh
bHNlKTsKKyAgICBtX2Nvb3JkaW5hdG9yLnJlbmRlck5leHRGcmFtZSgpOworCisgICAgaWYgKG1f
Zm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCkgeworICAgICAgICAvLyBJZiB0aGUgYXN5bmNo
cm9ub3VzIGZvcmNlLXJlcGFpbnQgbmVlZHMgYSBzZXBhcmF0ZSBmcmVzaCBmbHVzaCwgaXQgd2Fz
IGR1ZSB0bworICAgICAgICAvLyB0aGUgZm9yY2UtcmVwYWludCByZXF1ZXN0IGJlaW5nIHJlZ2lz
dGVyZWQgd2hpbGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHdhcworICAgICAgICAvLyB3YWl0
aW5nIGZvciB0aGUgcmVuZGVyZXIgdG8gZmluaXNoIGFuIHVwZGF0ZS4KKyAgICAgICAgQVNTRVJU
KCFtX2ZvcmNlUmVwYWludEFzeW5jLm5lZWRzRnJlc2hGbHVzaCB8fCBzY2hlZHVsZWRXaGlsZVdh
aXRpbmdGb3JSZW5kZXJlcik7CisKKyAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY2FsbGJhY2sgaWYg
YW5vdGhlciBsYXllciBmbHVzaCBhbmQgdGhlIHN1YnNlcXVlbnQgc3RhdGUgdXBkYXRlCisgICAg
ICAgIC8vIGFyZW4ndCBuZWVkZWQuIElmIHRoZXkgYXJlLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBl
eGVjdXRlZCB3aGVuIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgLy8gaXMgY2FsbGVkIGFmdGVyIHRo
ZSBuZXh0IHVwZGF0ZS4KKyAgICAgICAgaWYgKCFtX2ZvcmNlUmVwYWludEFzeW5jLm5lZWRzRnJl
c2hGbHVzaCkgeworICAgICAgICAgICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRC5jYWxsYmFj
a0lEKCkpKTsKKyAgICAgICAgICAgIG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCA9IE9w
dGlvbmFsQ2FsbGJhY2tJRCgpOworICAgICAgICB9CisgICAgICAgIG1fZm9yY2VSZXBhaW50QXN5
bmMubmVlZHNGcmVzaEZsdXNoID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHNjaGVkdWxlZFdo
aWxlV2FpdGluZ0ZvclJlbmRlcmVyIHx8IG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkgfHwg
Zm9yY2VSZXBhaW50KSB7CisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKKyAgICAg
ICAgaWYgKGZvcmNlUmVwYWludCkKKyAgICAgICAgICAgIG1fY29vcmRpbmF0b3IuZm9yY2VGcmFt
ZVN5bmMoKTsKKyAgICAgICAgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsKKyAgICB9Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0
LmgKc2ltaWxhcml0eSBpbmRleCA2MSUKcmVuYW1lIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5oCnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaAppbmRleCAyMjg3NjE2MmU2OS4uMjBjZGE2
MDAyNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUhvc3QuaApAQCAtMSw3ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEg
Uy5MLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw1MSArMjksOTYgQEAKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1NfVEhSRUFERUQpCiAKICNpbmNsdWRlICJBY2NlbGVyYXRlZFN1cmZhY2UuaCIK
LSNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJDYWxsYmFj
a0lELmgiCisjaW5jbHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRvci5oIgorI2luY2x1ZGUgIkxh
eWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKICNpbmNs
dWRlICJTaW1wbGVWaWV3cG9ydENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUaHJlYWRlZENvbXBv
c2l0b3IuaCIKICNpbmNsdWRlICJUaHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRS
ZWN0OworY2xhc3MgSW50U2l6ZTsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CitjbGFzcyBHcmFwaGlj
c0xheWVyRmFjdG9yeTsKIHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGU7CitzdHJ1Y3Qg
Vmlld3BvcnRBdHRyaWJ1dGVzOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2Vi
UGFnZTsKIAotY2xhc3MgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QgZmluYWwgOiBw
dWJsaWMgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LCBwdWJsaWMgQWNjZWxlcmF0ZWRTdXJmYWNl
OjpDbGllbnQgeworY2xhc3MgTGF5ZXJUcmVlSG9zdCBmaW5hbCA6IHB1YmxpYyBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpDbGllbnQsIHB1YmxpYyBBY2NlbGVyYXRlZFN1cmZhY2U6OkNsaWVudCB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxU
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKFdlYlBhZ2UmKTsKLSAgICB2
aXJ0dWFsIH5UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpOworICAgIGV4cGxpY2l0
IExheWVyVHJlZUhvc3QoV2ViUGFnZSYpOworICAgIH5MYXllclRyZWVIb3N0KCk7CiAKLXByaXZh
dGU6Ci0gICAgZXhwbGljaXQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFn
ZSYpOworICAgIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSBjb25z
dCB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0KKyAgICB2b2lkIHNldExheWVyRmx1c2hT
Y2hlZHVsaW5nRW5hYmxlZChib29sKTsKKyAgICB2b2lkIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4
dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gp
IHsgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2g7IH0KKworICAgIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdm9p
ZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5n
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0Vmlld092ZXJsYXlS
b290TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgaW52YWxpZGF0ZSgp
OworCisgICAgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIHZvaWQgZm9yY2VSZXBhaW50KCk7CisgICAgYm9vbCBmb3JjZVJlcGFp
bnRBc3luYyhDYWxsYmFja0lEKTsKKyAgICB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgbmV3U2l6ZSk7CiAKLSAgICB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0KSBvdmVycmlkZTsKLSAgICB2
b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwYXVzZVJlbmRlcmluZygpOworICAgIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCk7CiAKLSAgICB2
b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0
QXR0cmlidXRlcyYmKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9y
eSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJy
aWRlOworICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXpl
Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3Bv
cnRBdHRyaWJ1dGVzJiYpOwogCi0gICAgdm9pZCBmb3JjZVJlcGFpbnQoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldElzRGlzY2FyZGFibGUoYm9vbCk7CiAKLSAgICB2b2lkIHNldElzRGlzY2FyZGFi
bGUoYm9vbCkgb3ZlcnJpZGU7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBQTEFURk9S
TShHVEspCisgICAgdm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWlu
dDY0X3QpOworI2VuZGlmCisKKyAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpOwogCi0jaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShYMTEpICYmICAhVVNFKFJFRElS
RUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgdm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxl
Rm9yQ29tcG9zaXRpbmcodWludDY0X3QpIG92ZXJyaWRlOworI2lmIFVTRShSRVFVRVNUX0FOSU1B
VElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCisgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlS
ZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRm
b3JtRGlzcGxheUlEKTsKICNlbmRpZgogCitwcml2YXRlOgorICAgIHZvaWQgbGF5ZXJGbHVzaFRp
bWVyRmlyZWQoKTsKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0KCk7CisgICAgdm9pZCByZW5k
ZXJOZXh0RnJhbWUoYm9vbCk7CisKKyAgICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGll
bnQKKyAgICB2b2lkIGRpZEZsdXNoUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYg
dmlzaWJsZUNvbnRlbnRSZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWly
ZWQoKSBvdmVycmlkZSB7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9OworICAgIHZvaWQgY29tbWl0
U2NlbmVTdGF0ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVy
cmlkZTsKKworICAgIC8vIEFjY2VsZXJhdGVkU3VyZmFjZTo6Q2xpZW50CisgICAgdm9pZCBmcmFt
ZUNvbXBsZXRlKCkgb3ZlcnJpZGU7CisKKyAgICB1aW50NjRfdCBuYXRpdmVTdXJmYWNlSGFuZGxl
Rm9yQ29tcG9zaXRpbmcoKTsKKyAgICB2b2lkIGRpZERlc3Ryb3lHTENvbnRleHQoKTsKKyAgICB2
b2lkIHdpbGxSZW5kZXJGcmFtZSgpOworICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKKyAgICB2
b2lkIHJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoKTsKKyAgICB2b2lkIGhhbmRs
ZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZShib29sKTsKKwogICAgIGNsYXNzIENvbXBvc2l0
b3JDbGllbnQgZmluYWwgOiBwdWJsaWMgVGhyZWFkZWRDb21wb3NpdG9yOjpDbGllbnQsIHB1Ymxp
YyBUaHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6Q2xpZW50ICB7CiAgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbXBvc2l0b3JDbGllbnQpOwogICAgIHB1YmxpYzoKLSAgICAgICAg
Q29tcG9zaXRvckNsaWVudChUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCYgbGF5ZXJU
cmVlSG9zdCkKKyAgICAgICAgQ29tcG9zaXRvckNsaWVudChMYXllclRyZWVIb3N0JiBsYXllclRy
ZWVIb3N0KQogICAgICAgICAgICAgOiBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKICAg
ICAgICAgewogICAgICAgICB9CkBAIC0xMTYsNDMgKzE2MCwzOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9sYXllclRyZWVIb3N0LmhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSho
YXNCZWVuUmVzY2hlZHVsZWQpOwogICAgICAgICB9CiAKLSAgICAgICAgVGhyZWFkZWRDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QmIG1fbGF5ZXJUcmVlSG9zdDsKKyAgICAgICAgTGF5ZXJUcmVlSG9z
dCYgbV9sYXllclRyZWVIb3N0OwogICAgIH07CiAKLSAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0
KCk7Ci0KLSAgICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQKLSAgICB2b2lkIGRp
ZEZsdXNoUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlIHsgfQot
ICAgIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzU3RhdGUmKSBvdmVycmlkZTsKLQotI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9E
SVNQTEFZX01PTklUT1IpCi0gICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRv
cj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlE
KSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgLy8gQWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQK
LSAgICB2b2lkIGZyYW1lQ29tcGxldGUoKSBvdmVycmlkZTsKLQotICAgIHVpbnQ2NF90IG5hdGl2
ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpOwotICAgIHZvaWQgZGlkRGVzdHJveUdMQ29u
dGV4dCgpOwotICAgIHZvaWQgd2lsbFJlbmRlckZyYW1lKCk7Ci0gICAgdm9pZCBkaWRSZW5kZXJG
cmFtZSgpOwotICAgIHZvaWQgcmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOwot
ICAgIHZvaWQgaGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wpOwotCiAgICAg
ZW51bSBjbGFzcyBEaXNjYXJkYWJsZVN5bmNBY3Rpb25zIHsKICAgICAgICAgVXBkYXRlU2l6ZSA9
IDEgPDwgMSwKICAgICAgICAgVXBkYXRlVmlld3BvcnQgPSAxIDw8IDIsCiAgICAgICAgIFVwZGF0
ZVNjYWxlID0gMSA8PCAzCiAgICAgfTsKIAotICAgIENvbXBvc2l0b3JDbGllbnQgbV9jb21wb3Np
dG9yQ2xpZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2NlbGVyYXRlZFN1cmZhY2U+IG1fc3Vy
ZmFjZTsKLSAgICBSZWZQdHI8VGhyZWFkZWRDb21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7Ci0gICAg
U2ltcGxlVmlld3BvcnRDb250cm9sbGVyIG1fdmlld3BvcnRDb250cm9sbGVyOworICAgIFdlYlBh
Z2UmIG1fd2ViUGFnZTsKKyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsK
KyAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkIHsgdHJ1ZSB9OworICAgIGJv
b2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggeyBmYWxzZSB9OworICAgIGJvb2wg
bV9pc1N1c3BlbmRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Cisg
ICAgYm9vbCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2No
ZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIgeyBmYWxzZSB9OwogICAgIGZsb2F0IG1fbGFz
dFBhZ2VTY2FsZUZhY3RvciB7IDEgfTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RTY3Jv
bGxQb3NpdGlvbjsKICAgICBib29sIG1faXNEaXNjYXJkYWJsZSB7IGZhbHNlIH07CiAgICAgT3B0
aW9uU2V0PERpc2NhcmRhYmxlU3luY0FjdGlvbnM+IG1fZGlzY2FyZGFibGVTeW5jQWN0aW9uczsK
KyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3ZpZXdPdmVybGF5Um9vdExheWVyIHsgbnVs
bHB0ciB9OworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IgbV9jb29yZGluYXRvcjsKKyAgICBD
b21wb3NpdG9yQ2xpZW50IG1fY29tcG9zaXRvckNsaWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QWNjZWxlcmF0ZWRTdXJmYWNlPiBtX3N1cmZhY2U7CisgICAgUmVmUHRyPFRocmVhZGVkQ29tcG9z
aXRvcj4gbV9jb21wb3NpdG9yOworICAgIFNpbXBsZVZpZXdwb3J0Q29udHJvbGxlciBtX3ZpZXdw
b3J0Q29udHJvbGxlcjsKKyAgICBzdHJ1Y3QgeworICAgICAgICBPcHRpb25hbENhbGxiYWNrSUQg
Y2FsbGJhY2tJRDsKKyAgICAgICAgYm9vbCBuZWVkc0ZyZXNoRmx1c2ggeyBmYWxzZSB9OworICAg
IH0gbV9mb3JjZVJlcGFpbnRBc3luYzsKKyAgICBSdW5Mb29wOjpUaW1lcjxMYXllclRyZWVIb3N0
PiBtX2xheWVyRmx1c2hUaW1lcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAK
aW5kZXggNDRlYjJkYjY2OTguLjYzZDUxNWFlOTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKQEAgLTYxLDcgKzYxLDYg
QEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdCkgewogICAgICAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkp
OwotICAgICAgICBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXkoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzIsNyArNzEsNiBAQCB2b2lkIERyYXdpbmdBcmVh
SW1wbDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
aWYgKG1fbGF5ZXJUcmVlSG9zdCkgewogICAgICAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0Vt
cHR5KCkpOwotICAgICAgICBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXlJ
blJlY3QocmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDcyN2ZiMGM2Y2JiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKLQotI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3QuaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJF
QURFRCkKLSNpbmNsdWRlICJUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgotI2Vu
ZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJl
ZlB0cjxMYXllclRyZWVIb3N0PiBMYXllclRyZWVIb3N0OjpjcmVhdGUoV2ViUGFnZSYgd2ViUGFn
ZSkKLXsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi0gICAgcmV0dXJu
IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUod2ViUGFnZSk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTSh3ZWJQYWdlKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRp
ZgotfQotCi1MYXllclRyZWVIb3N0OjpMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2UpCi0g
ICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKLXsKLX0KLQotTGF5ZXJUcmVlSG9zdDo6fkxheWVyVHJl
ZUhvc3QoKQotewotICAgIEFTU0VSVCghbV9pc1ZhbGlkKTsKLX0KLQotdm9pZCBMYXllclRyZWVI
b3N0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5h
YmxlZCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJG
bHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7Ci0KLSAgICBpZiAobV9sYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwot
fQotCi12b2lkIExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKCkKLXsKLSAgICBtX2lzU3Vz
cGVuZGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0OjpyZXN1bWVSZW5kZXJpbmco
KQotewotICAgIG1faXNTdXNwZW5kZWQgPSBmYWxzZTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBBU1NFUlQo
bV9pc1ZhbGlkKTsKLSAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhU
VVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUhvc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjMzk4Mjk5ZTYuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUhvc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBMYXllclRyZWVIb3N0X2gKLSNkZWZpbmUgTGF5ZXJUcmVlSG9zdF9oCi0KLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKLQotI2lu
Y2x1ZGUgIkNhbGxiYWNrSUQuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtU2NyZWVuLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIElQ
QyB7Ci1jbGFzcyBDb25uZWN0aW9uOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJ
bnRSZWN0OwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIEdyYXBoaWNzTGF5ZXI7Ci1jbGFzcyBHcmFw
aGljc0xheWVyRmFjdG9yeTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQp
Ci1zdHJ1Y3QgVmlld3BvcnRBdHRyaWJ1dGVzOwotI2VuZGlmCi19Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBMYXllclRyZWVIb3N0IDogcHVibGljIFJl
ZkNvdW50ZWQ8TGF5ZXJUcmVlSG9zdD4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8TGF5
ZXJUcmVlSG9zdD4gY3JlYXRlKFdlYlBhZ2UmKTsKLSAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0
KCk7Ci0KLSAgICBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9Ci0gICAgdm9pZCBzZXRMYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5l
eHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
KSB7IG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdmlydHVh
bCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KCkgeyB9OwotICAgIHZp
cnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxOb25Db21w
b3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfTsKLSAgICB2aXJ0dWFs
IHZvaWQgZm9yY2VSZXBhaW50KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBmb3JjZVJlcGFpbnRB
c3luYyhDYWxsYmFja0lEKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzaXpl
RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpID0gMDsKLQotICAgIHZp
cnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpOwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5k
ZXJpbmcoKTsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdy
YXBoaWNzTGF5ZXJGYWN0b3J5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NpemVD
aGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmJikg
eyB9OwotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgdmlydHVh
bCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJc0Rp
c2NhcmRhYmxlKGJvb2wpIHsgfTsKLSNlbmRpZgotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KSAmJiBQTEFURk9STShHVEspCi0gICAgdmlydHVhbCB2b2lkIHNldE5hdGl2ZVN1cmZhY2VIYW5k
bGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCkgeyB9OwotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKLSAgICB2aXJ0dWFsIHZvaWQg
ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgPSAwOwotI2VuZGlmCi0KLSNpZiBVU0Uo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIHZpcnR1YWwgUmVm
UHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hN
b25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSB7IHJldHVybiBudWxscHRyOyB9Ci0j
ZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikgeyBtX3ZpZXdPdmVybGF5Um9v
dExheWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxp
Y2l0IExheWVyVHJlZUhvc3QoV2ViUGFnZSYpOwotCi0gICAgV2ViUGFnZSYgbV93ZWJQYWdlOwot
ICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBtX25vdGlmeUFmdGVy
U2NoZWR1bGVkTGF5ZXJGbHVzaCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1faXNWYWxpZCB7IHRydWUgfTsKLSAgICBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiBtX3ZpZXdPdmVybGF5Um9vdExheWVyIHsgbnVsbHB0ciB9OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
IHx8IFVTRShURVhUVVJFX01BUFBFUikKLQotI2VuZGlmIC8vIExheWVyVHJlZUhvc3RfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA2YWIzYTMw
MjdhNC4uYmU5OThjNTFiZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCkBAIC02MzUwLDYgKzYzNTAsNyBAQCB2b2lkIFdlYlBhZ2U6OnVybFNjaGVt
ZVRhc2tEaWRDb21wbGV0ZSh1aW50NjRfdCBoYW5kbGVySWRlbnRpZmllciwgdWludDY0X3QgdGFz
awogCiB2b2lkIFdlYlBhZ2U6OnNldElzU3VzcGVuZGVkKGJvb2wgc3VzcGVuZGVkKQogeworICAg
IHByaW50ZiAoIkRCRzogWyVkXSBXZWJQYWdlOjpzZXRJc1N1c3BlbmRlZCAlcyAtPiAlc1xuIiwg
Z2V0cGlkKCksIG1faXNTdXNwZW5kZWQgPyAieWVzIiA6ICJubyIsIHN1c3BlbmRlZCA/ICJ5ZXMi
IDogIm5vIik7CiAgICAgaWYgKG1faXNTdXNwZW5kZWQgPT0gc3VzcGVuZGVkKQogICAgICAgICBy
ZXR1cm47CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363086</attachid>
            <date>2019-02-27 04:49:08 -0800</date>
            <delta_ts>2019-02-27 19:05:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-layer-tree-host.diff</filename>
            <type>text/plain</type>
            <size>55126</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZGE2YmQ1YmUxNDEuLmU5ZTI4YzkxYTJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDYzIEBACisyMDE5LTAyLTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbQ29vcmRpbmF0ZWRHcmFwaGljc10gVW5pZnkgYWxsIExheWVyVHJl
ZUhvc3QgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk1MDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlcmUncyBubyByZWFzb24gdG8gaGF2ZSAzIGNsYXNzZXMsIHNpbmNlIGN1cnJlbnRs
eSBMYXllclRyZWVIb3N0IGlzIG9ubHkgdXNlZCBieSBjb29yZGluYXRlZCBncmFwaGljcyBiYXNl
ZAorICAgICAgICBwb3J0cy4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmV4aXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZU5vdyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9U
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAuCisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0Ojp+TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNl
dExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmZvcmNl
UmVwYWludEFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENo
YW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb250ZW50c1NpemVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxh
eVJlZnJlc2hNb25pdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkRmx1
c2hSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb21taXRTY2Vu
ZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZnJhbWVDb21wbGV0ZSk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6Om5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JD
b21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmRpZERlc3Ryb3lH
TENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojp3aWxsUmVuZGVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpkaWRSZW5kZXJGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0
b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5
UmVmcmVzaE1vbml0b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpy
ZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNldE5lZWRzRGlzcGxheUlu
UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmg6IFJl
bW92ZWQuCisKIDIwMTktMDItMjYgIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5j
b20+IGFuZCBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbV1BFXSBBZGQgQVBJIGZvciB3ZWJ2aWV3IGJhY2tncm91bmQgY29sb3IgY29uZmlndXJh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMGE1MzM1YTNjZjguLjRjYjgwNGQwZWYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTgxLDExICs4MSw5IEBAIGxpc3QoQVBQRU5E
IFdlYktpdF9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2lu
Z0FyZWEuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAotICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKLSAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
Y3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9X
ZWJQYWdlV2luLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBi
L1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggZWExYmY5N2Y4OTMuLjkxZjhjNDll
MzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0dUSy50eHQKQEAgLTQwMywxMiArNDAzLDEwIEBAIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAogCiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKIFdlYlByb2Nlc3MvV2Vi
UGFnZS9BY2NlbGVyYXRlZFN1cmZhY2UuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9y
LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGlu
Z0Nvb3JkaW5hdG9yLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCitXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dAppbmRl
eCA5Yzk1OGJmM2UwMi4uNTQwNWYyNDNmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291
cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dApAQCAtMjQzLDEx
ICsyNDMsOSBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dwZS9XZWJQb3B1cE1lbnVXUEUu
Y3BwCiAKIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAKLVdlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAotV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwCitXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVI
b3N0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3N0cmVhbWVyL1dlYlBhZ2VHU3RyZWFtZXIu
Y3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKaW5kZXggMzA0ZGI4ODg1MTYuLmM2OTgyNjc1YzU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRl
ZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9B
Y2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcApAQCAtNjYsMjQgKzY2LDYgQEAgQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYShXZWJQYWdlJiB3ZWJQYWdlLCBjb25z
dCBXZWJQYWdlQ3IKICAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0RGV2aWNlU2NhbGVGYWN0
b3IocGFyYW1ldGVycy5kZXZpY2VTY2FsZUZhY3Rvcik7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBpZiAoIW1faXNQYWludGluZ0Vu
YWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXko
KTsKLX0KLQotdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3Qo
cmVjdCk7Ci19Ci0KIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2Nyb2xsKGNvbnN0IElu
dFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIGlm
ICghbV9pc1BhaW50aW5nRW5hYmxlZCkKQEAgLTM0MywxOCArMzI1LDE0IEBAIHZvaWQgQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShHcmFwaGlj
c0xheWVyKiBncmFwCiAKICAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7CiAgICAgaWYgKG1f
cHJldmlvdXNMYXllclRyZWVIb3N0KSB7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQog
ICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBXVEZNb3ZlKG1fcHJldmlvdXNMYXllclRyZWVIb3N0
KTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRJc0Rpc2NhcmRhYmxlKGZhbHNlKTsKICAg
ICAgICAgaWYgKCFtX2lzUGFpbnRpbmdTdXNwZW5kZWQpCiAgICAgICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnJlc3VtZVJlbmRlcmluZygpOwogICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlU3RhdGVJ
c0Zyb3plbikKICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TGF5ZXJGbHVzaFNjaGVk
dWxpbmdFbmFibGVkKHRydWUpOwotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0jZW5kaWYKICAgICB9IGVsc2UgewotICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBMYXllclRy
ZWVIb3N0OjpjcmVhdGUobV93ZWJQYWdlKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxMYXllclRyZWVIb3N0PihtX3dlYlBhZ2UpOwogCiAgICAgICAgIGlmICgh
bV9sYXllclRyZWVIb3N0KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzkzLDE2ICszNzEsMTIg
QEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGVOb3coKQogICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3RvcCgpOwogICAgIG1fd2Fu
dHNUb0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOwogCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQogICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwogICAgIG1f
cHJldmlvdXNMYXllclRyZWVIb3N0ID0gV1RGTW92ZShtX2xheWVyVHJlZUhvc3QpOwogICAgIG1f
cHJldmlvdXNMYXllclRyZWVIb3N0LT5zZXRJc0Rpc2NhcmRhYmxlKHRydWUpOwogICAgIG1fcHJl
dmlvdXNMYXllclRyZWVIb3N0LT5wYXVzZVJlbmRlcmluZygpOwogICAgIG1fcHJldmlvdXNMYXll
clRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoZmFsc2UpOwogICAgIG1f
ZGlzY2FyZFByZXZpb3VzTGF5ZXJUcmVlSG9zdFRpbWVyLnN0YXJ0T25lU2hvdCg1X3MpOwotI2Vs
c2UKLSAgICBtX2xheWVyVHJlZUhvc3QgPSBudWxscHRyOwotI2VuZGlmCiB9CiAKIHZvaWQgQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZGlzY2FyZFByZXZpb3VzTGF5ZXJUcmVlSG9zdCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdp
bmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERy
YXdpbmdBcmVhLmgKaW5kZXggZjdlZjlmNmY1MzUuLjQzMzcxNzBhNzhjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5n
QXJlYS5oCkBAIC00MCw4ICs0MCw4IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIC8vIERy
YXdpbmdBcmVhCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZSB7IH07CisgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlIHsgfTsK
ICAgICB2b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRM
YXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wpIG92ZXJyaWRlOwogICAgIGJvb2wgbGF5ZXJUcmVl
U3RhdGVJc0Zyb3plbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbGF5ZXJUcmVlU3RhdGVJ
c0Zyb3plbjsgfQpAQCAtMTI4LDkgKzEyOCw5IEBAIHByb3RlY3RlZDoKICAgICBSdW5Mb29wOjpU
aW1lcjxBY2NlbGVyYXRlZERyYXdpbmdBcmVhPiBtX2V4aXRDb21wb3NpdGluZ1RpbWVyOwogCiAg
ICAgLy8gVGhlIGxheWVyIHRyZWUgaG9zdCB0aGF0IGhhbmRsZXMgYWNjZWxlcmF0ZWQgY29tcG9z
aXRpbmcuCi0gICAgUmVmUHRyPExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OwogCi0gICAgUmVm
UHRyPExheWVyVHJlZUhvc3Q+IG1fcHJldmlvdXNMYXllclRyZWVIb3N0OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxMYXllclRyZWVIb3N0PiBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdDsKICAgICBSdW5M
b29wOjpUaW1lcjxBY2NlbGVyYXRlZERyYXdpbmdBcmVhPiBtX2Rpc2NhcmRQcmV2aW91c0xheWVy
VHJlZUhvc3RUaW1lcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTNiN2EyZGRlNzIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgotCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKLSNpbmNs
dWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgotCi0jaWYgVVNFKEdMSUJf
RVZFTlRfTE9PUCkKLSNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4K
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci1SZWY8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNyZWF0ZShXZWJQYWdlJiB3ZWJQYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKSk7Ci19Ci0KLUNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpCi17Ci19Ci0KLUNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2Up
Ci0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0gICAgLCBtX2Nvb3JkaW5hdG9yKHdlYlBh
Z2UuY29yZVBhZ2UoKSwgKnRoaXMpCi0gICAgLCBtX2xheWVyRmx1c2hUaW1lcihSdW5Mb29wOjpt
YWluKCksIHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZp
cmVkKQotewotI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCi0gICAgbV9sYXllckZsdXNoVGltZXIu
c2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpMYXllckZsdXNoVGltZXIpOwotICAg
IG1fbGF5ZXJGbHVzaFRpbWVyLnNldE5hbWUoIltXZWJLaXRdIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdCIpOwotI2VuZGlmCi0gICAgbV9jb29yZGluYXRvci5jcmVhdGVSb290TGF5ZXIobV93ZWJQ
YWdlLnNpemUoKSk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYgKCFt
X2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpIHsKLSAgICAgICAgbV9zY2hlZHVsZWRXaGlsZVdhaXRp
bmdGb3JSZW5kZXJlciA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQotewotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3Ao
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9v
dExheWVyKEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKQotewotICAgIExheWVy
VHJlZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKHZpZXdPdmVybGF5Um9vdExheWVyKTsK
LSAgICBtX2Nvb3JkaW5hdG9yLnNldFZpZXdPdmVybGF5Um9vdExheWVyKHZpZXdPdmVybGF5Um9v
dExheWVyKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFJvb3RDb21w
b3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAgbV9jb29y
ZGluYXRvci5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xheWVyKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQotewotICAgIGNhbmNlbFBl
bmRpbmdMYXllckZsdXNoKCk7Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLmludmFsaWRhdGUoKTsKLSAg
ICBMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKQotewotICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZv
ciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNlIHdlIGFyZSBub3Qgd2Fp
dGluZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5LgotICAgIC8vIEluc3RlYWQgd2Ug
YXJlIGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBzdGlsbCB3YW50IHRvIGhh
dmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcgZXhlY3V0ZWQuCi0gICAg
bV9jb29yZGluYXRvci5zeW5jRGlzcGxheVN0YXRlKCk7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHNj
aGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUgZm9yY2VkIHBhaW50IG1pZ2h0IGNh
bmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgotICAgIC8vIFRoaXMgaXMgYWxpZ25lZCB3aXRo
IExheWVyVHJlZUhvc3RDQS4KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLQotICAgIGlmICht
X2lzV2FpdGluZ0ZvclJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Nvb3JkaW5h
dG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotfQotCi1ib29sIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQotewot
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotCi0gICAgLy8gV2Ugd2FudCBhIGNsZWFuIHJlcGFp
bnQsIG1lYW5pbmcgdGhhdCBpZiB3ZSdyZSBjdXJyZW50bHkgd2FpdGluZyBmb3IgdGhlIHJlbmRl
cmVyCi0gICAgLy8gdG8gZmluaXNoIGFuIHVwZGF0ZSwgd2UnbGwgaGF2ZSB0byBzY2hlZHVsZSBh
bm90aGVyIGZsdXNoIHdoZW4gaXQncyBkb25lLgotICAgIEFTU0VSVCghbV9mb3JjZVJlcGFpbnRB
c3luYy5jYWxsYmFja0lEKTsKLSAgICBtX2ZvcmNlUmVwYWludEFzeW5jLmNhbGxiYWNrSUQgPSBP
cHRpb25hbENhbGxiYWNrSUQoY2FsbGJhY2tJRCk7Ci0gICAgbV9mb3JjZVJlcGFpbnRBc3luYy5u
ZWVkc0ZyZXNoRmx1c2ggPSBtX3NjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURp
ZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQotewotICAgIG1fY29vcmRpbmF0b3Iuc2l6
ZURpZENoYW5nZShuZXdTaXplKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fY29vcmRpbmF0b3Iuc2V0VmlzaWJsZUNvbnRlbnRz
UmVjdChyZWN0KTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZShib29sIGZvcmNlUmVwYWludCkKLXsK
LSAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7Ci0gICAgYm9vbCBzY2hlZHVsZWRX
aGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHN0ZDo6ZXhjaGFuZ2UobV9zY2hlZHVsZWRXaGlsZVdh
aXRpbmdGb3JSZW5kZXJlciwgZmFsc2UpOwotICAgIG1fY29vcmRpbmF0b3IucmVuZGVyTmV4dEZy
YW1lKCk7Ci0KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKSB7Ci0gICAg
ICAgIC8vIElmIHRoZSBhc3luY2hyb25vdXMgZm9yY2UtcmVwYWludCBuZWVkcyBhIHNlcGFyYXRl
IGZyZXNoIGZsdXNoLCBpdCB3YXMgZHVlIHRvCi0gICAgICAgIC8vIHRoZSBmb3JjZS1yZXBhaW50
IHJlcXVlc3QgYmVpbmcgcmVnaXN0ZXJlZCB3aGlsZSBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qg
d2FzCi0gICAgICAgIC8vIHdhaXRpbmcgZm9yIHRoZSByZW5kZXJlciB0byBmaW5pc2ggYW4gdXBk
YXRlLgotICAgICAgICBBU1NFUlQoIW1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNo
IHx8IHNjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyKTsKLQotICAgICAgICAvLyBFeGVj
dXRlIHRoZSBjYWxsYmFjayBpZiBhbm90aGVyIGxheWVyIGZsdXNoIGFuZCB0aGUgc3Vic2VxdWVu
dCBzdGF0ZSB1cGRhdGUKLSAgICAgICAgLy8gYXJlbid0IG5lZWRlZC4gSWYgdGhleSBhcmUsIHRo
ZSBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhpcyBmdW5jdGlvbgotICAgICAgICAv
LyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG5leHQgdXBkYXRlLgotICAgICAgICBpZiAoIW1fZm9yY2VS
ZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoKSB7Ci0gICAgICAgICAgICBtX3dlYlBhZ2Uuc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJlcGFpbnRBc3lu
Yy5jYWxsYmFja0lELmNhbGxiYWNrSUQoKSkpOwotICAgICAgICAgICAgbV9mb3JjZVJlcGFpbnRB
c3luYy5jYWxsYmFja0lEID0gT3B0aW9uYWxDYWxsYmFja0lEKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9mb3JjZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAoc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIgfHwgbV9sYXllckZsdXNo
VGltZXIuaXNBY3RpdmUoKSB8fCBmb3JjZVJlcGFpbnQpIHsKLSAgICAgICAgbV9sYXllckZsdXNo
VGltZXIuc3RvcCgpOwotICAgICAgICBpZiAoZm9yY2VSZXBhaW50KQotICAgICAgICAgICAgbV9j
b29yZGluYXRvci5mb3JjZUZyYW1lU3luYygpOwotICAgICAgICBsYXllckZsdXNoVGltZXJGaXJl
ZCgpOwotICAgIH0KLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZEZsdXNo
Um9vdExheWVyKGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KQotewotICAgIC8v
IEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRpdmUgb3ZlcmxheSByb290IGxheWVyIGlzIG5vdCBhdHRh
Y2hlZCB0byB0aGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NMYXllciB0cmVlLCB3ZSBuZWVkIHRvIGZs
dXNoIGl0IG1hbnVhbGx5LgotICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExheWVyKQotICAgICAg
ICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUodmlzaWJsZUNv
bnRlbnRSZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyRmx1
c2hUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX2lzV2FpdGluZ0Zv
clJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLnN5bmNEaXNw
bGF5U3RhdGUoKTsKLSAgICBtX3dlYlBhZ2UuZmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUo
KTsKLSAgICBtX3dlYlBhZ2Uud2lsbERpc3BsYXlQYWdlKCk7Ci0KLSAgICBpZiAoIW1faXNWYWxp
ZCB8fCAhbV9jb29yZGluYXRvci5yb290Q29tcG9zaXRpbmdMYXllcigpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBJZiBhIGZvcmNlLXJlcGFpbnQgY2FsbGJhY2sgd2FzIHJlZ2lzdGVyZWQs
IHdlIHNob3VsZCBmb3JjZSBhICdmcmFtZSBzeW5jJyB0aGF0Ci0gICAgLy8gd2lsbCBndWFyYW50
ZWUgdXMgYSBjYWxsIHRvIHJlbmRlck5leHRGcmFtZSgpIG9uY2UgdGhlIHVwZGF0ZSBpcyBjb21w
bGV0ZS4KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKQotICAgICAgICBt
X2Nvb3JkaW5hdG9yLmZvcmNlRnJhbWVTeW5jKCk7Ci0KLSAgICBib29sIGRpZFN5bmMgPSBtX2Nv
b3JkaW5hdG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotCi0gICAgaWYgKG1fbm90aWZ5
QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoICYmIGRpZFN5bmMpIHsKLSAgICAgICAgbV93ZWJQYWdl
LmRyYXdpbmdBcmVhKCktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Ci0gICAgICAgIG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2NlbmVTdGF0ZShjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQotewotICAgIG1faXNXYWl0aW5nRm9yUmVuZGVyZXIgPSB0
cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hMYXllcnNBbmRG
b3JjZVJlcGFpbnQoKQotewotICAgIG1fY29vcmRpbmF0b3IuZm9yY2VGcmFtZVN5bmMoKTsKLSAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCi17Ci0gICAgbV9jb29yZGluYXRv
ci5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKLSAgICBtX3dlYlBhZ2UuY29yZVBh
Z2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3Io
KTsKLX0KLQotR3JhcGhpY3NMYXllckZhY3RvcnkqIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Z3JhcGhpY3NMYXllckZhY3RvcnkoKQotewotICAgIHJldHVybiAmbV9jb29yZGluYXRvcjsKLX0K
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKCkKLXsK
LSAgICBpZiAobV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hv
dCgxX3MgKiBtX2Nvb3JkaW5hdG9yLm5leHRBbmltYXRpb25TZXJ2aWNlVGltZSgpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOTc0NTMxNTRjLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIg
KzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gICAgQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkg
MTAwLCBJbmMuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2lmbmRlZiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RfaAotI2RlZmlu
ZSBDb29yZGluYXRlZExheWVyVHJlZUhvc3RfaAotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotCi0jaW5jbHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRvci5oIgotI2luY2x1ZGUgIkxh
eWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQuaCIKLSNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBHcmFwaGljc0xh
eWVyRmFjdG9yeTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0K
LWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBw
dWJsaWMgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Ci17Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IGNyZWF0ZShXZWJQYWdlJik7Ci0gICAg
dmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KCk7Ci0KLXByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYpOwotCi0gICAgdm9pZCBz
Y2hlZHVsZUxheWVyRmx1c2goKSBvdmVycmlkZTsKLSAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXll
ckZsdXNoKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbnZhbGlkYXRlKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGZvcmNlUmVwYWludCgpIG92ZXJyaWRlOwotICAgIGJvb2wgZm9y
Y2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaXplRGlkQ2hh
bmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpIG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2
b2lkIHJlbmRlck5leHRGcmFtZShib29sKTsKLQotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJG
YWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzY2hl
ZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRWaWV3T3ZlcmxheVJvb3RM
YXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0KLSAgICAvLyBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQKLSAgICB2b2lkIGRpZEZsdXNoUm9vdExheWVyKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KSBvdmVycmlkZTsKLSAgICB2
b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKSBvdmVycmlkZSB7IHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OyB9OwotICAgIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmx1c2hMYXllcnNBbmRGb3Jj
ZVJlcGFpbnQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKCk7
Ci0KLSAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIG1fY29vcmRpbmF0b3I7Ci0gICAgYm9vbCBt
X2lzV2FpdGluZ0ZvclJlbmRlcmVyIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2NoZWR1bGVkV2hp
bGVXYWl0aW5nRm9yUmVuZGVyZXIgeyBmYWxzZSB9OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIE9w
dGlvbmFsQ2FsbGJhY2tJRCBjYWxsYmFja0lEOwotICAgICAgICBib29sIG5lZWRzRnJlc2hGbHVz
aCB7IGZhbHNlIH07Ci0gICAgfSBtX2ZvcmNlUmVwYWludEFzeW5jOwotICAgIFJ1bkxvb3A6OlRp
bWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9sYXllckZsdXNoVGltZXI7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKc2ltaWxhcml0
eSBpbmRleCA1MyUKcmVuYW1lIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAK
cmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMTAwZmM2NGE2MTkuLjRjNmYzZTM5ZmFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhv
c3QuY3BwCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
Q29tcGFueSAxMDAsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTkgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsMTQgKzI3LDIwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgiCisjaW5jbHVk
ZSAiTGF5ZXJUcmVlSG9zdC5oIgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVB
REVEKQogCi0jaW5jbHVkZSAiQWNjZWxlcmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVkZSAiRHJhd2lu
Z0FyZWEuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVz
c2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgor
CisjaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkKKyNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291
cmNlUHJpb3JpdHkuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwpAQCAtNDYsMjEgKzUyLDIxIEBAIHN0YXRpYyBjb25zdCBQbGF0Zm9ybURp
c3BsYXlJRCBjb21wb3NpdGluZ0Rpc3BsYXlJRCA9IDE7CiBzdGF0aWMgY29uc3QgUGxhdGZvcm1E
aXNwbGF5SUQgY29tcG9zaXRpbmdEaXNwbGF5SUQgPSBwcmltYXJ5RGlzcGxheUlEOwogI2VuZGlm
CiAKLVJlZjxUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gVGhyZWFkZWRDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdlJiB3ZWJQYWdlKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KHdlYlBhZ2Up
KTsKLX0KLQotVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6On5UaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdCgpCi17Ci19Ci0KLVRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlJiB3ZWJQYWdl
KQotICAgIDogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KHdlYlBhZ2UpCitMYXllclRyZWVIb3N0
OjpMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFn
ZSkKKyAgICAsIG1fY29vcmRpbmF0b3Iod2ViUGFnZS5jb3JlUGFnZSgpLCAqdGhpcykKICAgICAs
IG1fY29tcG9zaXRvckNsaWVudCgqdGhpcykKICAgICAsIG1fc3VyZmFjZShBY2NlbGVyYXRlZFN1
cmZhY2U6OmNyZWF0ZSh3ZWJQYWdlLCAqdGhpcykpCiAgICAgLCBtX3ZpZXdwb3J0Q29udHJvbGxl
cih3ZWJQYWdlLnNpemUoKSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJkxheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKQogeworI2lmIFVT
RShHTElCX0VWRU5UX0xPT1ApCisgICAgbV9sYXllckZsdXNoVGltZXIuc2V0UHJpb3JpdHkoUnVu
TG9vcFNvdXJjZVByaW9yaXR5OjpMYXllckZsdXNoVGltZXIpOworICAgIG1fbGF5ZXJGbHVzaFRp
bWVyLnNldE5hbWUoIltXZWJLaXRdIExheWVyVHJlZUhvc3QiKTsKKyNlbmRpZgorICAgIG1fY29v
cmRpbmF0b3IuY3JlYXRlUm9vdExheWVyKG1fd2ViUGFnZS5zaXplKCkpOworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworCiAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdl
Lm1haW5GcmFtZVZpZXcoKSkgewogICAgICAgICBhdXRvIGNvbnRlbnRzU2l6ZSA9IGZyYW1lVmll
dy0+Y29udGVudHNTaXplKCk7CiAgICAgICAgIGlmICghY29udGVudHNTaXplLmlzRW1wdHkoKSkK
QEAgLTg3LDcwICs5Myw5NiBAQCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6VGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYgd2ViUAogICAgIGRpZENoYW5n
ZVZpZXdwb3J0KCk7CiB9CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmludmFsaWRhdGUoKQorTGF5ZXJUcmVlSG9zdDo6fkxheWVyVHJlZUhvc3QoKQogewotICAgIG1f
Y29tcG9zaXRvci0+aW52YWxpZGF0ZSgpOwotICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
aW52YWxpZGF0ZSgpOwotICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7CisgICAgQVNTRVJUKCFtX2lz
VmFsaWQpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3Jj
ZVJlcGFpbnQoKQordm9pZCBMYXllclRyZWVIb3N0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKIHsKLSAgICBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmZvcmNlUmVwYWludCgpOwotICAgIG1fY29tcG9zaXRvci0+Zm9yY2VSZXBhaW50
KCk7Ci19CisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1
c2hpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmZyYW1lQ29tcGxldGUoKQotewotICAgIG1fY29tcG9zaXRvci0+ZnJh
bWVDb21wbGV0ZSgpOworICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJG
bHVzaGluZ0VuYWJsZWQ7CisKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQp
IHsKKyAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwogfQogCi12b2lkIFRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZXF1ZXN0RGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRl
KCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVMYXllckZsdXNoKCkKIHsKLSAgICAvLyBG
bHVzaCBsYXllcnMgdG8gY2F1c2UgYSByZXBhaW50LiBJZiBtX2lzV2FpdGluZ0ZvclJlbmRlcmVy
IHdhcyB0cnVlIGF0IHRoaXMgcG9pbnQsIHRoZSBsYXllcgotICAgIC8vIGZsdXNoIHdvbid0IGRv
IGFueXRoaW5nLCBidXQgdGhhdCBtZWFucyB0aGVyZSdzIGEgcGFpbnRpbmcgb25nb2luZyB0aGF0
IHdpbGwgc2VuZCB0aGUKLSAgICAvLyBkaXNwbGF5IHJlZnJlc2ggbm90aWZpY2F0aW9uIHdoZW4g
aXQncyBkb25lLgotICAgIGZsdXNoTGF5ZXJzQW5kRm9yY2VSZXBhaW50KCk7CisgICAgaWYgKCFt
X2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpIHsKKyAgICAgICAgbV9zY2hlZHVsZWRXaGlsZVdhaXRp
bmdGb3JSZW5kZXJlciA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9vbCBoYXNCZWVuUmVz
Y2hlZHVsZWQpCit2b2lkIExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkK
IHsKLSAgICAvLyBDYWxsIHJlbmRlck5leHRGcmFtZS4gSWYgaGFzQmVlblJlc2NoZWR1bGVkIGlz
IHRydWUsIHRoZSBsYXllciBmbHVzaCB3aWxsIGZvcmNlIGEgcmVwYWludAotICAgIC8vIHRoYXQg
d2lsbCBjYXVzZSB0aGUgZGlzcGxheSByZWZyZXNoIG5vdGlmaWNhdGlvbiB0byBjb21lLgotICAg
IHJlbmRlck5leHRGcmFtZShoYXNCZWVuUmVzY2hlZHVsZWQpOwotICAgIG1fY29tcG9zaXRvci0+
aGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKCk7CisgICAgbV9sYXllckZsdXNoVGlt
ZXIuc3RvcCgpOwogfQogCi11aW50NjRfdCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6bmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCkKK3ZvaWQgTGF5ZXJUcmVlSG9z
dDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKQogewotICAgIGlmICghbV9zdXJmYWNlKQotICAgICAg
ICByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRDsKKyAgICBpZiAobV9pc1N1c3Bl
bmRlZCB8fCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKQorICAgICAgICByZXR1cm47CiAKLSAgICBt
X3N1cmZhY2UtPmluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gbV9zdXJmYWNlLT53aW5kb3coKTsK
KyAgICBtX2Nvb3JkaW5hdG9yLnN5bmNEaXNwbGF5U3RhdGUoKTsKKyAgICBtX3dlYlBhZ2UuZmx1
c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUoKTsKKyAgICBtX3dlYlBhZ2Uud2lsbERpc3BsYXlQ
YWdlKCk7CisKKyAgICBpZiAoIW1faXNWYWxpZCB8fCAhbV9jb29yZGluYXRvci5yb290Q29tcG9z
aXRpbmdMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiBhIGZvcmNlLXJlcGFp
bnQgY2FsbGJhY2sgd2FzIHJlZ2lzdGVyZWQsIHdlIHNob3VsZCBmb3JjZSBhICdmcmFtZSBzeW5j
JyB0aGF0CisgICAgLy8gd2lsbCBndWFyYW50ZWUgdXMgYSBjYWxsIHRvIHJlbmRlck5leHRGcmFt
ZSgpIG9uY2UgdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KKyAgICBpZiAobV9mb3JjZVJlcGFpbnRB
c3luYy5jYWxsYmFja0lEKQorICAgICAgICBtX2Nvb3JkaW5hdG9yLmZvcmNlRnJhbWVTeW5jKCk7
CisKKyAgICBib29sIGRpZFN5bmMgPSBtX2Nvb3JkaW5hdG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpOworCisgICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoICYmIGRp
ZFN5bmMpIHsKKyAgICAgICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVhKCktPmxheWVySG9zdERpZEZs
dXNoTGF5ZXJzKCk7CisgICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0g
ZmFsc2U7CisgICAgfQogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpkaWREZXN0cm95R0xDb250ZXh0KCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKIHsKLSAgICBpZiAobV9z
dXJmYWNlKQotICAgICAgICBtX3N1cmZhY2UtPmZpbmFsaXplKCk7CisgICAgbV9jb29yZGluYXRv
ci5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xheWVyKTsKIH0KIAotdm9pZCBUaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6d2lsbFJlbmRlckZyYW1lKCkKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6c2V0Vmlld092ZXJsYXlSb290TGF5ZXIoR3JhcGhpY3NMYXllciogdmlld092
ZXJsYXlSb290TGF5ZXIpCiB7Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgbV9zdXJmYWNl
LT53aWxsUmVuZGVyRnJhbWUoKTsKKyAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyID0gdmlld092
ZXJsYXlSb290TGF5ZXI7CisgICAgbV9jb29yZGluYXRvci5zZXRWaWV3T3ZlcmxheVJvb3RMYXll
cih2aWV3T3ZlcmxheVJvb3RMYXllcik7CiB9CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmRpZFJlbmRlckZyYW1lKCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6aW52YWxp
ZGF0ZSgpCiB7Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgbV9zdXJmYWNlLT5kaWRSZW5k
ZXJGcmFtZSgpOworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgIG1faXNWYWxpZCA9IGZhbHNl
OworCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKworICAgIG1fY29vcmRpbmF0b3Iu
aW52YWxpZGF0ZSgpOworICAgIG1fY29tcG9zaXRvci0+aW52YWxpZGF0ZSgpOworICAgIG1fc3Vy
ZmFjZSA9IG51bGxwdHI7CiB9CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KQordm9p
ZCBMYXllclRyZWVIb3N0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fd2ViUGFnZS5tYWluRnJh
bWVWaWV3KCk7CisgICAgYXV0byogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLm1haW5GcmFtZVZpZXco
KTsKICAgICBpZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVWaWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmco
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNjEsMzAgKzE5MywzMyBAQCB2b2lkIFRocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29u
c3QgSW50UmVjdAogICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQogCi12b2lkIFRocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IElu
dFNpemUmIG5ld1NpemUpCit2b2lkIExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludCgpCiB7Ci0g
ICAgbV92aWV3cG9ydENvbnRyb2xsZXIuZGlkQ2hhbmdlQ29udGVudHNTaXplKG5ld1NpemUpOwot
ICAgIGlmIChtX2lzRGlzY2FyZGFibGUpCi0gICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9u
cy5hZGQoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlVmlld3BvcnQpOwotICAgIGVsc2UK
LSAgICAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKKyAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBm
b3IgcnVubmluZyBsYXlvdXQgdGVzdHMuIFNpbmNlIGluIHRoaXMgY2FzZSB3ZSBhcmUgbm90IHdh
aXRpbmcgZm9yIGEgVUlQcm9jZXNzIHRvIHJlcGx5IG5pY2VseS4KKyAgICAvLyBJbnN0ZWFkIHdl
IGFyZSBqdXN0IHRyaWdnZXJpbmcgZm9yY2VSZXBhaW50LiBCdXQgd2Ugc3RpbGwgd2FudCB0byBo
YXZlIHRoZSBzY3JpcHRlZCBhbmltYXRpb24gY2FsbGJhY2tzIGJlaW5nIGV4ZWN1dGVkLgorICAg
IG1fY29vcmRpbmF0b3Iuc3luY0Rpc3BsYXlTdGF0ZSgpOworCisgICAgLy8gV2UgbmVlZCB0byBz
Y2hlZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhlIGZvcmNlZCBwYWludCBtaWdodCBj
YW5jZWwgYSBsYXRlciBleHBlY3RlZCBmbHVzaC4KKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
KworICAgIGlmICghbV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKKyAgICAgICAgbV9jb29yZGluYXRv
ci5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICBtX2NvbXBvc2l0b3ItPmZvcmNlUmVw
YWludCgpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZp
Y2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQorYm9vbCBMYXllclRyZWVIb3N0Ojpmb3JjZVJl
cGFpbnRBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7Ci0gICAgaWYgKG1faXNEaXNjYXJk
YWJsZSkgewotICAgICAgICBtX2Rpc2NhcmRhYmxlU3luY0FjdGlvbnMuYWRkKERpc2NhcmRhYmxl
U3luY0FjdGlvbnM6OlVwZGF0ZVNjYWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChtX3N1cmZhY2UgJiYgbV9zdXJmYWNlLT5ob3N0UmVzaXplKG1fd2ViUGFnZS5zaXplKCkp
KQotICAgICAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElEID0gbV9zdXJmYWNlLT5zdXJm
YWNlSUQoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIAotICAgIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci0gICAgbV9jb21w
b3NpdG9yLT5zZXRTY2FsZUZhY3RvcihtX3dlYlBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSAqIG1f
dmlld3BvcnRDb250cm9sbGVyLnBhZ2VTY2FsZUZhY3RvcigpKTsKKyAgICAvLyBXZSB3YW50IGEg
Y2xlYW4gcmVwYWludCwgbWVhbmluZyB0aGF0IGlmIHdlJ3JlIGN1cnJlbnRseSB3YWl0aW5nIGZv
ciB0aGUgcmVuZGVyZXIKKyAgICAvLyB0byBmaW5pc2ggYW4gdXBkYXRlLCB3ZSdsbCBoYXZlIHRv
IHNjaGVkdWxlIGFub3RoZXIgZmx1c2ggd2hlbiBpdCdzIGRvbmUuCisgICAgQVNTRVJUKCFtX2Zv
cmNlUmVwYWludEFzeW5jLmNhbGxiYWNrSUQpOworICAgIG1fZm9yY2VSZXBhaW50QXN5bmMuY2Fs
bGJhY2tJRCA9IE9wdGlvbmFsQ2FsbGJhY2tJRChjYWxsYmFja0lEKTsKKyAgICBtX2ZvcmNlUmVw
YWludEFzeW5jLm5lZWRzRnJlc2hGbHVzaCA9IG1fc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVu
ZGVyZXI7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGlm
IChtX2lzRGlzY2FyZGFibGUpIHsKICAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmFk
ZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTaXplKTsKQEAgLTE5NSw3ICsyMzAsOSBA
QCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNv
bnN0IEludFNpemUmIHNpemUpCiAgICAgaWYgKG1fc3VyZmFjZSAmJiBtX3N1cmZhY2UtPmhvc3RS
ZXNpemUoc2l6ZSkpCiAgICAgICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBtX3N1
cmZhY2UtPnN1cmZhY2VJRCgpOwogCi0gICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXpl
RGlkQ2hhbmdlKHNpemUpOworICAgIG1fY29vcmRpbmF0b3Iuc2l6ZURpZENoYW5nZShzaXplKTsK
KyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKwogICAgIG1fdmlld3BvcnRDb250cm9sbGVyLmRp
ZENoYW5nZVZpZXdwb3J0U2l6ZShzaXplKTsKICAgICBJbnRTaXplIHNjYWxlZFNpemUoc2l6ZSk7
CiAgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3dlYlBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CkBA
IC0yMDMsMjUgKzI0MCw0MSBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgZGlkQ2hhbmdlVmlld3Bv
cnQoKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hh
bmdlVmlld3BvcnRBdHRyaWJ1dGVzKFZpZXdwb3J0QXR0cmlidXRlcyYmIGF0dHIpCit2b2lkIExh
eWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKCkKIHsKLSAgICBtX3ZpZXdwb3J0Q29udHJvbGxl
ci5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV1RGTW92ZShhdHRyKSk7CisgICAgbV9pc1N1
c3BlbmRlZCA9IHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVuZGVyaW5n
KCkKK3sKKyAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7CisgICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7Cit9CisKK0dyYXBoaWNzTGF5ZXJGYWN0b3J5KiBMYXllclRyZWVIb3N0OjpncmFwaGljc0xh
eWVyRmFjdG9yeSgpCit7CisgICAgcmV0dXJuICZtX2Nvb3JkaW5hdG9yOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3Q6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkK
K3sKKyAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFuZ2VDb250ZW50c1NpemUobmV3U2l6
ZSk7CiAgICAgaWYgKG1faXNEaXNjYXJkYWJsZSkKICAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNB
Y3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVWaWV3cG9ydCk7CiAgICAg
ZWxzZQogICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQogCi0jaWYgUExBVEZPUk0oR1RL
KSAmJiBQTEFURk9STShYMTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykK
LXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldE5hdGl2ZVN1cmZhY2VI
YW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCBoYW5kbGUpCit2b2lkIExheWVyVHJlZUhvc3Q6
OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhWaWV3cG9ydEF0dHJpYnV0ZXMmJiBhdHRyKQog
ewotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBoYW5kbGU7Ci0gICAgbV9jb21w
b3NpdG9yLT5zZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoaGFuZGxlKTsKLSAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFu
Z2VWaWV3cG9ydEF0dHJpYnV0ZXMoV1RGTW92ZShhdHRyKSk7CisgICAgaWYgKG1faXNEaXNjYXJk
YWJsZSkKKyAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5
bmNBY3Rpb25zOjpVcGRhdGVWaWV3cG9ydCk7CisgICAgZWxzZQorICAgICAgICBkaWRDaGFuZ2VW
aWV3cG9ydCgpOwogfQotI2VuZGlmCiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0KCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdl
Vmlld3BvcnQoKQogewogICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdChtX3ZpZXdwb3J0Q29udHJv
bGxlci52aXNpYmxlQ29udGVudHNSZWN0KCkpOwogICAgIGlmICh2aXNpYmxlUmVjdC5pc0VtcHR5
KCkpCkBAIC0yMzgsNyArMjkxLDggQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQoKQogICAgIGlmIChzY3JvbGxiYXIgJiYgIXNjcm9sbGJh
ci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHZpc2libGVSZWN0LmV4cGFuZCgwLCBz
Y3JvbGxiYXItPmhlaWdodCgpKTsKIAotICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlUmVjdCk7CisgICAgbV9jb29yZGluYXRvci5zZXRW
aXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVSZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKIAogICAgIGZsb2F0IHBhZ2VTY2FsZSA9IG1fdmlld3BvcnRDb250cm9sbGVyLnBhZ2VTY2Fs
ZUZhY3RvcigpOwogICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0gcm91bmRlZEludFBvaW50
KHZpc2libGVSZWN0LmxvY2F0aW9uKCkpOwpAQCAtMjU2LDEzICszMTAsNyBAQCB2b2lkIFRocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRDaGFuZ2VWaWV3cG9ydCgpCiAgICAgfQog
fQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRTY2VuZVN0
YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCi17Ci0gICAgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRTY2VuZVN0YXRlKHN0YXRlKTsKLSAgICBtX2NvbXBv
c2l0b3ItPnVwZGF0ZVNjZW5lU3RhdGUoc3RhdGUpOwotfQotCi12b2lkIFRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKGJvb2wgZGlzY2FyZGFibGUpCit2
b2lkIExheWVyVHJlZUhvc3Q6OnNldElzRGlzY2FyZGFibGUoYm9vbCBkaXNjYXJkYWJsZSkKIHsK
ICAgICBtX2lzRGlzY2FyZGFibGUgPSBkaXNjYXJkYWJsZTsKICAgICBpZiAobV9pc0Rpc2NhcmRh
YmxlKSB7CkBAIC0yODgsMTMgKzMzNiwxMjkgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJsZShib29sIGRpc2NhcmRhYmxlKQogICAgICAgICBk
aWRDaGFuZ2VWaWV3cG9ydCgpOwogfQogCisjaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShY
MTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKK3ZvaWQgTGF5ZXJUcmVl
SG9zdDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90IGhhbmRs
ZSkKK3sKKyAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElEID0gaGFuZGxlOworICAgIG1f
Y29tcG9zaXRvci0+c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKGhhbmRsZSk7
CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisjZW5kaWYKKwordm9pZCBMYXllclRyZWVI
b3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQoreworICAgIGlmIChtX2lzRGlz
Y2FyZGFibGUpIHsKKyAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJk
YWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTY2FsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9zdXJmYWNlICYmIG1fc3VyZmFjZS0+aG9zdFJlc2l6ZShtX3dlYlBhZ2Uuc2l6
ZSgpKSkKKyAgICAgICAgbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRCA9IG1fc3VyZmFjZS0+
c3VyZmFjZUlEKCk7CisKKyAgICBtX2Nvb3JkaW5hdG9yLmRldmljZU9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZCgpOworICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xs
ZXIoKS5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOworICAgIG1fY29tcG9zaXRvci0+c2V0
U2NhbGVGYWN0b3IobV93ZWJQYWdlLmRldmljZVNjYWxlRmFjdG9yKCkgKiBtX3ZpZXdwb3J0Q29u
dHJvbGxlci5wYWdlU2NhbGVGYWN0b3IoKSk7Cit9CisKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNo
TW9uaXRvcj4gVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZURpc3BsYXlS
ZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCitSZWZQdHI8RGlzcGxh
eVJlZnJlc2hNb25pdG9yPiBMYXllclRyZWVIb3N0OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogewogICAgIHJldHVybiBtX2NvbXBvc2l0
b3ItPmRpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpOwogfQogI2VuZGlmCiAKK3ZvaWQg
TGF5ZXJUcmVlSG9zdDo6ZGlkRmx1c2hSb290TGF5ZXIoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxl
Q29udGVudFJlY3QpCit7CisgICAgLy8gQmVjYXVzZSBvdXIgdmlldy1yZWxhdGl2ZSBvdmVybGF5
IHJvb3QgbGF5ZXIgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBGcmFtZVZpZXcncyBHcmFwaGljc0xh
eWVyIHRyZWUsIHdlIG5lZWQgdG8gZmx1c2ggaXQgbWFudWFsbHkuCisgICAgaWYgKG1fdmlld092
ZXJsYXlSb290TGF5ZXIpCisgICAgICAgIG1fdmlld092ZXJsYXlSb290TGF5ZXItPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZSh2aXNpYmxlQ29udGVudFJlY3QpOworfQorCit2b2lkIExheWVyVHJlZUhv
c3Q6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0
ZSkKK3sKKyAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gdHJ1ZTsKKyAgICBtX2NvbXBvc2l0
b3ItPnVwZGF0ZVNjZW5lU3RhdGUoc3RhdGUpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmZy
YW1lQ29tcGxldGUoKQoreworICAgIG1fY29tcG9zaXRvci0+ZnJhbWVDb21wbGV0ZSgpOworfQor
Cit1aW50NjRfdCBMYXllclRyZWVIb3N0OjpuYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRp
bmcoKQoreworICAgIGlmICghbV9zdXJmYWNlKQorICAgICAgICByZXR1cm4gbV9sYXllclRyZWVD
b250ZXh0LmNvbnRleHRJRDsKKworICAgIG1fc3VyZmFjZS0+aW5pdGlhbGl6ZSgpOworICAgIHJl
dHVybiBtX3N1cmZhY2UtPndpbmRvdygpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmRpZERl
c3Ryb3lHTENvbnRleHQoKQoreworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fc3VyZmFj
ZS0+ZmluYWxpemUoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0Ojp3aWxsUmVuZGVyRnJhbWUo
KQoreworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fc3VyZmFjZS0+d2lsbFJlbmRlckZy
YW1lKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGlkUmVuZGVyRnJhbWUoKQoreworICAg
IGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fc3VyZmFjZS0+ZGlkUmVuZGVyRnJhbWUoKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0OjpyZXF1ZXN0RGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRl
KCkKK3sKKyAgICAvLyBGbHVzaCBsYXllcnMgdG8gY2F1c2UgYSByZXBhaW50LiBJZiBtX2lzV2Fp
dGluZ0ZvclJlbmRlcmVyIHdhcyB0cnVlIGF0IHRoaXMgcG9pbnQsIHRoZSBsYXllcgorICAgIC8v
IGZsdXNoIHdvbid0IGRvIGFueXRoaW5nLCBidXQgdGhhdCBtZWFucyB0aGVyZSdzIGEgcGFpbnRp
bmcgb25nb2luZyB0aGF0IHdpbGwgc2VuZCB0aGUKKyAgICAvLyBkaXNwbGF5IHJlZnJlc2ggbm90
aWZpY2F0aW9uIHdoZW4gaXQncyBkb25lLgorICAgIG1fY29vcmRpbmF0b3IuZm9yY2VGcmFtZVN5
bmMoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
OjpoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9vbCBoYXNCZWVuUmVzY2hlZHVs
ZWQpCit7CisgICAgLy8gQ2FsbCByZW5kZXJOZXh0RnJhbWUuIElmIGhhc0JlZW5SZXNjaGVkdWxl
ZCBpcyB0cnVlLCB0aGUgbGF5ZXIgZmx1c2ggd2lsbCBmb3JjZSBhIHJlcGFpbnQKKyAgICAvLyB0
aGF0IHdpbGwgY2F1c2UgdGhlIGRpc3BsYXkgcmVmcmVzaCBub3RpZmljYXRpb24gdG8gY29tZS4K
KyAgICByZW5kZXJOZXh0RnJhbWUoaGFzQmVlblJlc2NoZWR1bGVkKTsKKyAgICBtX2NvbXBvc2l0
b3ItPmhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZShib29sIGZvcmNlUmVwYWludCkKK3sKKyAgICBtX2lz
V2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7CisgICAgYm9vbCBzY2hlZHVsZWRXaGlsZVdhaXRp
bmdGb3JSZW5kZXJlciA9IHN0ZDo6ZXhjaGFuZ2UobV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JS
ZW5kZXJlciwgZmFsc2UpOworICAgIG1fY29vcmRpbmF0b3IucmVuZGVyTmV4dEZyYW1lKCk7CisK
KyAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKSB7CisgICAgICAgIC8vIElm
IHRoZSBhc3luY2hyb25vdXMgZm9yY2UtcmVwYWludCBuZWVkcyBhIHNlcGFyYXRlIGZyZXNoIGZs
dXNoLCBpdCB3YXMgZHVlIHRvCisgICAgICAgIC8vIHRoZSBmb3JjZS1yZXBhaW50IHJlcXVlc3Qg
YmVpbmcgcmVnaXN0ZXJlZCB3aGlsZSBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgd2FzCisgICAg
ICAgIC8vIHdhaXRpbmcgZm9yIHRoZSByZW5kZXJlciB0byBmaW5pc2ggYW4gdXBkYXRlLgorICAg
ICAgICBBU1NFUlQoIW1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoIHx8IHNjaGVk
dWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyKTsKKworICAgICAgICAvLyBFeGVjdXRlIHRoZSBj
YWxsYmFjayBpZiBhbm90aGVyIGxheWVyIGZsdXNoIGFuZCB0aGUgc3Vic2VxdWVudCBzdGF0ZSB1
cGRhdGUKKyAgICAgICAgLy8gYXJlbid0IG5lZWRlZC4gSWYgdGhleSBhcmUsIHRoZSBjYWxsYmFj
ayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhpcyBmdW5jdGlvbgorICAgICAgICAvLyBpcyBjYWxs
ZWQgYWZ0ZXIgdGhlIG5leHQgdXBkYXRlLgorICAgICAgICBpZiAoIW1fZm9yY2VSZXBhaW50QXN5
bmMubmVlZHNGcmVzaEZsdXNoKSB7CisgICAgICAgICAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFj
a0lELmNhbGxiYWNrSUQoKSkpOworICAgICAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5jYWxs
YmFja0lEID0gT3B0aW9uYWxDYWxsYmFja0lEKCk7CisgICAgICAgIH0KKyAgICAgICAgbV9mb3Jj
ZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
c2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIgfHwgbV9sYXllckZsdXNoVGltZXIuaXNB
Y3RpdmUoKSB8fCBmb3JjZVJlcGFpbnQpIHsKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3Rv
cCgpOworICAgICAgICBpZiAoZm9yY2VSZXBhaW50KQorICAgICAgICAgICAgbV9jb29yZGluYXRv
ci5mb3JjZUZyYW1lU3luYygpOworICAgICAgICBsYXllckZsdXNoVGltZXJGaXJlZCgpOworICAg
IH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUhvc3QuaApzaW1pbGFyaXR5IGluZGV4IDYxJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDIyODc2MTYy
ZTY5Li4yMGNkYTYwMDI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlSG9zdC5oCkBAIC0xLDcgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAy
MDE0IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5IElnYWxpYSBTLkwuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDUxICsyOSw5NiBAQAogI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKIAogI2luY2x1ZGUgIkFjY2VsZXJhdGVk
U3VyZmFjZS5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1
ZGUgIkNhbGxiYWNrSUQuaCIKKyNpbmNsdWRlICJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgiCisj
aW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJ
RC5oIgogI2luY2x1ZGUgIlNpbXBsZVZpZXdwb3J0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRo
cmVhZGVkQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlRocmVhZGVkRGlzcGxheVJlZnJlc2hNb25p
dG9yLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsK
K2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOwogY2xhc3MgR3JhcGhpY3NMYXllcjsKK2Ns
YXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Owogc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0
ZTsKK3N0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBXZWJQYWdlOwogCi1jbGFzcyBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBmaW5hbCA6IHB1YmxpYyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QsIHB1YmxpYyBBY2NlbGVy
YXRlZFN1cmZhY2U6OkNsaWVudCB7CitjbGFzcyBMYXllclRyZWVIb3N0IGZpbmFsIDogcHVibGlj
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCwgcHVibGljIEFjY2VsZXJhdGVkU3VyZmFj
ZTo6Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBjcmVhdGUoV2ViUGFn
ZSYpOwotICAgIHZpcnR1YWwgflRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KCk7Cisg
ICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdChXZWJQYWdlJik7CisgICAgfkxheWVyVHJlZUhvc3Qo
KTsKIAotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdChXZWJQYWdlJik7CisgICAgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZvaWQgc2V0
TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkTm90
aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaCkgeyBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IG5vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsgfQorCisgICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2go
KTsKKyAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisgICAgdm9pZCBzZXRSb290
Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRW
aWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBp
bnZhbGlkYXRlKCk7CisKKyAgICB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICBib29s
IGZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpOworICAgIHZvaWQgc2l6ZURpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKIAotICAgIHZvaWQgc2Nyb2xsTm9uQ29t
cG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7CisgICAgdm9pZCByZXN1bWVSZW5kZXJpbmco
KTsKIAotICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXpl
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29y
ZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpOwogCi0gICAgdm9pZCBpbnZhbGlk
YXRlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmKTsKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmJik7CiAKLSAgICB2b2lkIGZvcmNlUmVwYWludCgpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0SXNEaXNjYXJkYWJsZShib29sKTsKIAotICAgIHZvaWQgc2V0
SXNEaXNjYXJkYWJsZShib29sKSBvdmVycmlkZTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
ICYmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21w
b3NpdGluZyh1aW50NjRfdCk7CisjZW5kaWYKKworICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkKCk7CiAKLSNpZiBQTEFURk9STShHVEspICYmIFBMQVRGT1JNKFgxMSkgJiYg
ICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLSAgICB2b2lkIHNldE5hdGl2ZVN1
cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCkgb3ZlcnJpZGU7CisjaWYgVVNFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2Vi
Q29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpOwogI2VuZGlmCiAKK3ByaXZhdGU6CisgICAgdm9pZCBs
YXllckZsdXNoVGltZXJGaXJlZCgpOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnQoKTsKKyAg
ICB2b2lkIHJlbmRlck5leHRGcmFtZShib29sKTsKKworICAgIC8vIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OkNsaWVudAorICAgIHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpIG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5
Rmx1c2hSZXF1aXJlZCgpIG92ZXJyaWRlIHsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH07CisgICAg
dm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZSYpIG92ZXJyaWRlOworCisgICAgLy8gQWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQKKyAg
ICB2b2lkIGZyYW1lQ29tcGxldGUoKSBvdmVycmlkZTsKKworICAgIHVpbnQ2NF90IG5hdGl2ZVN1
cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpOworICAgIHZvaWQgZGlkRGVzdHJveUdMQ29udGV4
dCgpOworICAgIHZvaWQgd2lsbFJlbmRlckZyYW1lKCk7CisgICAgdm9pZCBkaWRSZW5kZXJGcmFt
ZSgpOworICAgIHZvaWQgcmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOworICAg
IHZvaWQgaGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wpOworCiAgICAgY2xh
c3MgQ29tcG9zaXRvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBUaHJlYWRlZENvbXBvc2l0b3I6OkNs
aWVudCwgcHVibGljIFRocmVhZGVkRGlzcGxheVJlZnJlc2hNb25pdG9yOjpDbGllbnQgIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcG9zaXRvckNsaWVudCk7CiAgICAgcHVibGlj
OgotICAgICAgICBDb21wb3NpdG9yQ2xpZW50KFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0JiBsYXllclRyZWVIb3N0KQorICAgICAgICBDb21wb3NpdG9yQ2xpZW50KExheWVyVHJlZUhv
c3QmIGxheWVyVHJlZUhvc3QpCiAgICAgICAgICAgICA6IG1fbGF5ZXJUcmVlSG9zdChsYXllclRy
ZWVIb3N0KQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTExNiw0MyArMTYwLDM4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QuaGFuZGxlRGlzcGxheVJlZnJlc2hNb25p
dG9yVXBkYXRlKGhhc0JlZW5SZXNjaGVkdWxlZCk7CiAgICAgICAgIH0KIAotICAgICAgICBUaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCYgbV9sYXllclRyZWVIb3N0OworICAgICAgICBM
YXllclRyZWVIb3N0JiBtX2xheWVyVHJlZUhvc3Q7CiAgICAgfTsKIAotICAgIHZvaWQgZGlkQ2hh
bmdlVmlld3BvcnQoKTsKLQotICAgIC8vIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAot
ICAgIHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3Zl
cnJpZGUgeyB9Ci0gICAgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZSYpIG92ZXJyaWRlOwotCi0jaWYgVVNFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZv
cm1EaXNwbGF5SUQpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICAvLyBBY2NlbGVyYXRlZFN1cmZh
Y2U6OkNsaWVudAotICAgIHZvaWQgZnJhbWVDb21wbGV0ZSgpIG92ZXJyaWRlOwotCi0gICAgdWlu
dDY0X3QgbmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCk7Ci0gICAgdm9pZCBkaWRE
ZXN0cm95R0xDb250ZXh0KCk7Ci0gICAgdm9pZCB3aWxsUmVuZGVyRnJhbWUoKTsKLSAgICB2b2lk
IGRpZFJlbmRlckZyYW1lKCk7Ci0gICAgdm9pZCByZXF1ZXN0RGlzcGxheVJlZnJlc2hNb25pdG9y
VXBkYXRlKCk7Ci0gICAgdm9pZCBoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9v
bCk7Ci0KICAgICBlbnVtIGNsYXNzIERpc2NhcmRhYmxlU3luY0FjdGlvbnMgewogICAgICAgICBV
cGRhdGVTaXplID0gMSA8PCAxLAogICAgICAgICBVcGRhdGVWaWV3cG9ydCA9IDEgPDwgMiwKICAg
ICAgICAgVXBkYXRlU2NhbGUgPSAxIDw8IDMKICAgICB9OwogCi0gICAgQ29tcG9zaXRvckNsaWVu
dCBtX2NvbXBvc2l0b3JDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2VsZXJhdGVkU3Vy
ZmFjZT4gbV9zdXJmYWNlOwotICAgIFJlZlB0cjxUaHJlYWRlZENvbXBvc2l0b3I+IG1fY29tcG9z
aXRvcjsKLSAgICBTaW1wbGVWaWV3cG9ydENvbnRyb2xsZXIgbV92aWV3cG9ydENvbnRyb2xsZXI7
CisgICAgV2ViUGFnZSYgbV93ZWJQYWdlOworICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRy
ZWVDb250ZXh0OworICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgeyB0cnVl
IH07CisgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNWYWxpZCB7
IHRydWUgfTsKKyAgICBib29sIG1faXNXYWl0aW5nRm9yUmVuZGVyZXIgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciB7IGZhbHNlIH07CiAgICAg
ZmxvYXQgbV9sYXN0UGFnZVNjYWxlRmFjdG9yIHsgMSB9OwogICAgIFdlYkNvcmU6OkludFBvaW50
IG1fbGFzdFNjcm9sbFBvc2l0aW9uOwogICAgIGJvb2wgbV9pc0Rpc2NhcmRhYmxlIHsgZmFsc2Ug
fTsKICAgICBPcHRpb25TZXQ8RGlzY2FyZGFibGVTeW5jQWN0aW9ucz4gbV9kaXNjYXJkYWJsZVN5
bmNBY3Rpb25zOworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmlld092ZXJsYXlSb290
TGF5ZXIgeyBudWxscHRyIH07CisgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvciBtX2Nvb3JkaW5h
dG9yOworICAgIENvbXBvc2l0b3JDbGllbnQgbV9jb21wb3NpdG9yQ2xpZW50OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxBY2NlbGVyYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKKyAgICBSZWZQdHI8VGhy
ZWFkZWRDb21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7CisgICAgU2ltcGxlVmlld3BvcnRDb250cm9s
bGVyIG1fdmlld3BvcnRDb250cm9sbGVyOworICAgIHN0cnVjdCB7CisgICAgICAgIE9wdGlvbmFs
Q2FsbGJhY2tJRCBjYWxsYmFja0lEOworICAgICAgICBib29sIG5lZWRzRnJlc2hGbHVzaCB7IGZh
bHNlIH07CisgICAgfSBtX2ZvcmNlUmVwYWludEFzeW5jOworICAgIFJ1bkxvb3A6OlRpbWVyPExh
eWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmNwcAppbmRleCA0NGViMmRiNjY5OC4uNjNkNTE1YWU5MGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcApAQCAt
NjEsNyArNjEsNiBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6c2V0TmVlZHNEaXNwbGF5KCkKIHsK
ICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgIEFTU0VSVChtX2RpcnR5UmVnaW9u
LmlzRW1wdHkoKSk7Ci0gICAgICAgIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNldE5lZWRzRGlz
cGxheSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03Miw3ICs3MSw2IEBAIHZvaWQg
RHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgIEFTU0VSVChtX2RpcnR5
UmVnaW9uLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3ZmIwYzZjYmIuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVS
KQotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTX1RIUkVBREVEKQotI2luY2x1ZGUgIlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQ
YWdlJiB3ZWJQYWdlKQotewotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkK
LSAgICByZXR1cm4gVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZSh3ZWJQ
YWdlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHdlYlBhZ2UpOwotICAgIHJldHVybiBudWxs
cHRyOwotI2VuZGlmCi19Ci0KLUxheWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3QoV2ViUGFnZSYg
d2ViUGFnZSkKLSAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotewotfQotCi1MYXllclRyZWVIb3N0
Ojp+TGF5ZXJUcmVlSG9zdCgpCi17Ci0gICAgQVNTRVJUKCFtX2lzVmFsaWQpOwotfQotCi12b2lk
IExheWVyVHJlZUhvc3Q6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVy
Rmx1c2hpbmdFbmFibGVkKQotewotICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxl
ZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKLQotICAgIGlm
IChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgewotICAgICAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbmNlbFBlbmRpbmdMYXll
ckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdDo6cGF1c2VSZW5kZXJpbmcoKQotewot
ICAgIG1faXNTdXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIExheWVyVHJlZUhvc3Q6OnJlc3Vt
ZVJlbmRlcmluZygpCi17Ci0gICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwotICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQotewot
ICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1faXNWYWxpZCA9IGZhbHNlOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykg
fHwgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2Mz
OTgyOTllNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlSG9zdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIExheWVyVHJlZUhvc3RfaAotI2RlZmluZSBMYXllclRyZWVI
b3N0X2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQ
UEVSKQotCi0jaW5jbHVkZSAiQ2FsbGJhY2tJRC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRl
eHQuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1u
YW1lc3BhY2UgSVBDIHsKLWNsYXNzIENvbm5lY3Rpb247Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgR3JhcGhpY3NMYXllcjsK
LWNsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5OwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
U19USFJFQURFRCkKLXN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7Ci0jZW5kaWYKLX0KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIExheWVyVHJlZUhvc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclRyZWVIb3N0PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZlB0cjxMYXllclRyZWVIb3N0PiBjcmVhdGUoV2ViUGFnZSYpOwotICAgIHZpcnR1YWwgfkxh
eWVyVHJlZUhvc3QoKTsKLQotICAgIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0KLSAgICB2b2lkIHNl
dExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldFNob3VsZE5v
dGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2gpIHsgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3RpZnlB
ZnRlclNjaGVkdWxlZExheWVyRmx1c2g7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxh
eWVyRmx1c2goKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNo
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoKSB7
IH07Ci0gICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5
SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIHNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9Owot
ICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGZv
cmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkgPSAw
OwotCi0gICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7Ci0gICAgdmlydHVhbCB2b2lk
IHJlc3VtZVJlbmRlcmluZygpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
RmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0KLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi0gICAgdmlydHVhbCB2b2lkIGNv
bnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIHsgfTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0QXR0
cmlidXRlcyYmKSB7IH07Ci0jZW5kaWYKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldElzRGlzY2FyZGFibGUoYm9vbCkgeyB9OwotI2VuZGlmCi0KLSNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKEdUSykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmF0aXZl
U3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KSB7IH07Ci0jZW5kaWYKLQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIHZp
cnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSA9IDA7Ci0jZW5kaWYK
LQotI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAg
dmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNw
bGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIHsgcmV0dXJuIG51
bGxwdHI7IH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldFZpZXdPdmVybGF5Um9vdExh
eWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKSB7IG1fdmll
d092ZXJsYXlSb290TGF5ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXllcjsgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdChXZWJQYWdlJik7Ci0KLSAgICBXZWJQYWdlJiBt
X3dlYlBhZ2U7Ci0gICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Ci0gICAg
Ym9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCB7IHRydWUgfTsKLSAgICBib29sIG1f
bm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNT
dXNwZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1ZhbGlkIHsgdHJ1ZSB9OwotICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmlld092ZXJsYXlSb290TGF5ZXIgeyBudWxscHRyIH07
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQotCi0jZW5kaWYgLy8gTGF5ZXJUcmVl
SG9zdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363180</attachid>
            <date>2019-02-27 19:05:41 -0800</date>
            <delta_ts>2019-02-28 03:50:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195094-20190228120540.patch</filename>
            <type>text/plain</type>
            <size>76318</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkzZDk4Mzg0MzMwOTQ0YmFl
MzU2MTMxNjk3NTFiYmIxZmIyY2I2MDIuLjNhZDBmNzFmNWZkNDc3ZjQ4YjhmYWJhMTI0ZWVkMGJm
OGU1ZDBkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTktMDItMjcgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtDb29yZGluYXRl
ZEdyYXBoaWNzXSBVbmlmeSBhbGwgTGF5ZXJUcmVlSG9zdCBjbGFzc2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTUwOTQKKworICAgICAgICBSZXZp
ZXdlZCBieSDFvWFuIERvYmVyxaFlay4KKworICAgICAgICBUaGVyZSdzIG5vIHJlYXNvbiB0byBo
YXZlIDMgY2xhc3Nlcywgc2luY2UgY3VycmVudGx5IExheWVyVHJlZUhvc3QgaXMgb25seSB1c2Vk
IGJ5IGNvb3JkaW5hdGVkIGdyYXBoaWNzIGJhc2VkCisgICAgICAgIHBvcnRzLgorCisgICAgICAg
ICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAg
ICogU291cmNlc1dQRS50eHQ6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJh
dGVkRHJhd2luZ0FyZWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdB
cmVhOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlTm93
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lmg6IFJl
bW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlSG9zdC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmNwcC4KKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6TGF5ZXJUcmVlSG9zdCk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6On5MYXllclRyZWVIb3N0KToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVMYXllckZsdXNoKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2gp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNldFJvb3RDb21wb3NpdGluZ0xheWVy
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0Vmlld092ZXJsYXlSb290TGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmMpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdDo6cGF1c2VSZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0OjpyZXN1bWVSZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpn
cmFwaGljc0xheWVyRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmNv
bnRlbnRzU2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpkaWRD
aGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
OjpkaWRDaGFuZ2VWaWV3cG9ydCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNl
dElzRGlzY2FyZGFibGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXROYXRp
dmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0OjpkaWRGbHVzaFJvb3RMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3Q6OmNvbW1pdFNjZW5lU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0OjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdDo6bmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdDo6ZGlkRGVzdHJveUdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3Q6OndpbGxSZW5kZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3Q6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dDo6cmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3Q6OmhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oLgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
cmF3aW5nQXJlYUltcGw6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhSW1wbDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQYWdlL3dp
bi9MYXllclRyZWVIb3N0Lmg6IEFkZGVkLgorCiAyMDE5LTAyLTI3ICBCcmVudCBGdWxnaGFtICA8
YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT046IENyYXNoIGJlbmVhdGgg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGluZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1X
aW4uY21ha2UKaW5kZXggMGE1MzM1YTNjZjg3Y2Y3N2FmNTY2MWM0NGQzOWQ4MTcwMmFjMTA1MS4u
NjRmMzVlOGQ1OTY5NDE5NTEyMmU0MWM1ODFmODVjYjBkODNlZDU2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
V2luLmNtYWtlCkBAIC04MSwxMSArODEsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZFN1cmZhY2UuY3BwCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJU
cmVlSG9zdC5jcHAKLQotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAotICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJJbnNwZWN0b3JVSVdp
bi5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYlBhZ2VXaW4uY3BwCkBAIC0xMDcs
OCArMTAyLDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtXRUJLSVRfRElSfS9QbGF0Zm9ybS9jbGFzc2lmaWVyIgogICAgICIke1dFQktJVF9ESVJ9L1Bs
dWdpblByb2Nlc3Mvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC9BUEkvYy93aW4iCi0g
ICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCi0gICAgIiR7V0VC
S0lUX0RJUn0vU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yIgog
ICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC9QbHVnaW5zL3dpbiIKICAgICAiJHtXRUJLSVRfRElS
fS9TaGFyZWQvdW5peCIKICAgICAiJHtXRUJLSVRfRElSfS9TaGFyZWQvd2luIgpAQCAtMTIzLDcg
KzExNiw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7
V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvd2luL0RPTSIKICAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL3dpbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L3dpbiIKLSAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcyIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNz
L1dlYlBhZ2Uvd2luIgogICAgICIke1dFQktJVF9ESVJ9L3dpbiIKICkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0
CmluZGV4IGVhMWJmOTdmODkzMTI3MjdjZTkyMmMxYTBjZTRjMjBmMjMzNDZjY2IuLjkxZjhjNDll
MzBkZGNjMTQ4MGFiNGEyOTAzNDIzODk5YjFiMzI1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dApAQCAt
NDAzLDEyICs0MDMsMTAgQEAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQuY3BwCiAKIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERy
YXdpbmdBcmVhLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAK
LVdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdl
L1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwCiAKIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCi1XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3Bw
Ci1XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5jcHAKK1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUhvc3QuY3BwCiAKIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0CmluZGV4IDljOTU4YmYzZTAyMTQ3ZTVmMjFhY2U5MDcz
YWMyNGQ1MjhlNGQzMTguLjU0MDVmMjQzZmM3N2Q3N2E2NDU5YWU0YzQ3Y2ZmMWFmMWRmNTlkZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzV1BFLnR4dApAQCAtMjQzLDExICsyNDMsOSBAQCBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L3dwZS9XZWJQb3B1cE1lbnVXUEUuY3BwCiAKIFdlYlByb2Nlc3MvV2ViUGFnZS9B
Y2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVk
U3VyZmFjZS5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9y
LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCitXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBh
Z2UvZ3N0cmVhbWVyL1dlYlBhZ2VHU3RyZWFtZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAK
aW5kZXggMzA0ZGI4ODg1MTZmODc5YTM5M2I5MThjNWRjMDViNzEyMTFkZTY0Ny4uNjQ3NWJlMDE5
MzI0ZjA1MmZhNTRiNWUzNGJlNGNlN2I2ZTQ0MTE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAK
QEAgLTY2LDI0ICs2Niw2IEBAIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OkFjY2VsZXJhdGVkRHJh
d2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3QgV2ViUGFnZUNyCiAgICAgbV93ZWJQYWdl
LmNvcmVQYWdlKCktPnNldERldmljZVNjYWxlRmFjdG9yKHBhcmFtZXRlcnMuZGV2aWNlU2NhbGVG
YWN0b3IpOwogfQogCi12b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNldE5lZWRzRGlzcGxh
eSgpCi17Ci0gICAgaWYgKCFtX2lzUGFpbnRpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KCk7Ci19Ci0KLXZvaWQgQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKCFtX2lzUGFpbnRpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5vbkNvbXBv
c2l0ZWRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KHJlY3QpOwotfQotCiB2b2lkIEFjY2VsZXJh
dGVkRHJhd2luZ0FyZWE6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJ
bnRTaXplJiBzY3JvbGxEZWx0YSkKIHsKICAgICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQpCkBA
IC0zNDMsMTkgKzMyNSwxOSBAQCB2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoR3JhcGhpY3NMYXllciogZ3JhcAogCiAgICAgQVNTRVJU
KCFtX2xheWVyVHJlZUhvc3QpOwogICAgIGlmIChtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdCkgewot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICAgICAgbV9sYXllclRyZWVIb3N0ID0g
V1RGTW92ZShtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdCk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+c2V0SXNEaXNjYXJkYWJsZShmYWxzZSk7CiAgICAgICAgIGlmICghbV9pc1BhaW50aW5nU3Vz
cGVuZGVkKQogICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yZXN1bWVSZW5kZXJpbmcoKTsK
ICAgICAgICAgaWYgKCFtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4pCiAgICAgICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKTsKKyAgICB9
IGVsc2UgeworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0ID0gc3RkOjptYWtlX3VuaXF1ZTxMYXllclRyZWVIb3N0PihtX3dlYlBh
Z2UpOwogI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdCA9IG51bGxwdHI7CiAjZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBtX2xh
eWVyVHJlZUhvc3QgPSBMYXllclRyZWVIb3N0OjpjcmVhdGUobV93ZWJQYWdlKTsKLQorICAgICAg
ICAKICAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCiAgICAgICAgICAgICByZXR1cm47CiAK
QEAgLTM5MywxNiArMzc1LDEyIEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlTm93KCkKICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVy
LnN0b3AoKTsKICAgICBtX3dhbnRzVG9FeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUgPSBm
YWxzZTsKIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBBU1NFUlQobV9sYXll
clRyZWVIb3N0KTsKICAgICBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdCA9IFdURk1vdmUobV9sYXll
clRyZWVIb3N0KTsKICAgICBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdC0+c2V0SXNEaXNjYXJkYWJs
ZSh0cnVlKTsKICAgICBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdC0+cGF1c2VSZW5kZXJpbmcoKTsK
ICAgICBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9zdC0+c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkKGZhbHNlKTsKICAgICBtX2Rpc2NhcmRQcmV2aW91c0xheWVyVHJlZUhvc3RUaW1lci5zdGFy
dE9uZVNob3QoNV9zKTsKLSNlbHNlCi0gICAgbV9sYXllclRyZWVIb3N0ID0gbnVsbHB0cjsKLSNl
bmRpZgogfQogCiB2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmRpc2NhcmRQcmV2aW91c0xh
eWVyVHJlZUhvc3QoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCmluZGV4IGY3ZWY5ZjZmNTM1Nzg4YTNkZDkz
Mzc5MWQ0Nzg3MDlhYTAwMjNlZWIuLjQzMzcxNzBhNzhjYWEzMWQyZTU2NDk2MGQ2ZTZhNDUyODhh
MzZmNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmgKQEAgLTQwLDggKzQwLDggQEAgcHVibGljOgogCiBw
cm90ZWN0ZWQ6CiAgICAgLy8gRHJhd2luZ0FyZWEKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRl
IHsgfTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jikgb3ZlcnJpZGUgeyB9OwogICAgIHZvaWQgc2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhKSBvdmVy
cmlkZTsKICAgICB2b2lkIHNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4oYm9vbCkgb3ZlcnJpZGU7
CiAgICAgYm9vbCBsYXllclRyZWVTdGF0ZUlzRnJvemVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuOyB9CkBAIC0xMjgsOSArMTI4LDkgQEAgcHJvdGVj
dGVkOgogICAgIFJ1bkxvb3A6OlRpbWVyPEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE+IG1fZXhpdENv
bXBvc2l0aW5nVGltZXI7CiAKICAgICAvLyBUaGUgbGF5ZXIgdHJlZSBob3N0IHRoYXQgaGFuZGxl
cyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZy4KLSAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdD4gbV9s
YXllclRyZWVIb3N0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXllclRyZWVIb3N0PiBtX2xheWVy
VHJlZUhvc3Q7CiAKLSAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdD4gbV9wcmV2aW91c0xheWVyVHJl
ZUhvc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPExheWVyVHJlZUhvc3Q+IG1fcHJldmlvdXNMYXll
clRyZWVIb3N0OwogICAgIFJ1bkxvb3A6OlRpbWVyPEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE+IG1f
ZGlzY2FyZFByZXZpb3VzTGF5ZXJUcmVlSG9zdFRpbWVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2I3YTJkZGU3MmM0NTJlNDc4YjMyNjY4NzM5NTJhYmE1
YWExODc1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgotCi0jaW5jbHVkZSAi
RHJhd2luZ0FyZWEuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVBy
b3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxl
ci5oPgotCi0jaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkKLSNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5M
b29wU291cmNlUHJpb3JpdHkuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1SZWY8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdlJiB3ZWJQYWdlKQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKSk7Ci19
Ci0KLUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgp
Ci17Ci19Ci0KLUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0KFdlYlBhZ2UmIHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0gICAg
LCBtX2Nvb3JkaW5hdG9yKHdlYlBhZ2UuY29yZVBhZ2UoKSwgKnRoaXMpCi0gICAgLCBtX2xheWVy
Rmx1c2hUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKQotewotI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCi0g
ICAgbV9sYXllckZsdXNoVGltZXIuc2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpM
YXllckZsdXNoVGltZXIpOwotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnNldE5hbWUoIltXZWJLaXRd
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCIpOwotI2VuZGlmCi0gICAgbV9jb29yZGluYXRvci5j
cmVhdGVSb290TGF5ZXIobV93ZWJQYWdlLnNpemUoKSk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1
c2goKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5ZXJG
bHVzaCgpCi17Ci0gICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpIHsKLSAgICAgICAg
bV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAg
ICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQotewotICAgIG1f
bGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9v
dExheWVyKQotewotICAgIExheWVyVHJlZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKHZp
ZXdPdmVybGF5Um9vdExheWVyKTsKLSAgICBtX2Nvb3JkaW5hdG9yLnNldFZpZXdPdmVybGF5Um9v
dExheWVyKHZpZXdPdmVybGF5Um9vdExheWVyKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIpCi17Ci0gICAgbV9jb29yZGluYXRvci5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFw
aGljc0xheWVyKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRh
dGUoKQotewotICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0KLSAgICBtX2Nvb3JkaW5h
dG9yLmludmFsaWRhdGUoKTsKLSAgICBMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKQotewotICAgIC8v
IFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhp
cyBjYXNlIHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5
LgotICAgIC8vIEluc3RlYWQgd2UgYXJlIGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1
dCB3ZSBzdGlsbCB3YW50IHRvIGhhdmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3Mg
YmVpbmcgZXhlY3V0ZWQuCi0gICAgbV9jb29yZGluYXRvci5zeW5jRGlzcGxheVN0YXRlKCk7Ci0K
LSAgICAvLyBXZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUg
Zm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgotICAgIC8v
IFRoaXMgaXMgYWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RDQS4KLSAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKLQotICAgIGlmIChtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotfQot
Ci1ib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQotewotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotCi0gICAgLy8g
V2Ugd2FudCBhIGNsZWFuIHJlcGFpbnQsIG1lYW5pbmcgdGhhdCBpZiB3ZSdyZSBjdXJyZW50bHkg
d2FpdGluZyBmb3IgdGhlIHJlbmRlcmVyCi0gICAgLy8gdG8gZmluaXNoIGFuIHVwZGF0ZSwgd2Un
bGwgaGF2ZSB0byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoIHdoZW4gaXQncyBkb25lLgotICAgIEFT
U0VSVCghbV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKTsKLSAgICBtX2ZvcmNlUmVwYWlu
dEFzeW5jLmNhbGxiYWNrSUQgPSBPcHRpb25hbENhbGxiYWNrSUQoY2FsbGJhY2tJRCk7Ci0gICAg
bV9mb3JjZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBtX3NjaGVkdWxlZFdoaWxlV2Fp
dGluZ0ZvclJlbmRlcmVyOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQotewot
ICAgIG1fY29vcmRpbmF0b3Iuc2l6ZURpZENoYW5nZShuZXdTaXplKTsKLSAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2li
bGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fY29vcmRpbmF0
b3Iuc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0KTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZShi
b29sIGZvcmNlUmVwYWludCkKLXsKLSAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7
Ci0gICAgYm9vbCBzY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHN0ZDo6ZXhjaGFu
Z2UobV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciwgZmFsc2UpOwotICAgIG1fY29v
cmRpbmF0b3IucmVuZGVyTmV4dEZyYW1lKCk7Ci0KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3lu
Yy5jYWxsYmFja0lEKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhc3luY2hyb25vdXMgZm9yY2UtcmVw
YWludCBuZWVkcyBhIHNlcGFyYXRlIGZyZXNoIGZsdXNoLCBpdCB3YXMgZHVlIHRvCi0gICAgICAg
IC8vIHRoZSBmb3JjZS1yZXBhaW50IHJlcXVlc3QgYmVpbmcgcmVnaXN0ZXJlZCB3aGlsZSBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Qgd2FzCi0gICAgICAgIC8vIHdhaXRpbmcgZm9yIHRoZSByZW5k
ZXJlciB0byBmaW5pc2ggYW4gdXBkYXRlLgotICAgICAgICBBU1NFUlQoIW1fZm9yY2VSZXBhaW50
QXN5bmMubmVlZHNGcmVzaEZsdXNoIHx8IHNjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVy
KTsKLQotICAgICAgICAvLyBFeGVjdXRlIHRoZSBjYWxsYmFjayBpZiBhbm90aGVyIGxheWVyIGZs
dXNoIGFuZCB0aGUgc3Vic2VxdWVudCBzdGF0ZSB1cGRhdGUKLSAgICAgICAgLy8gYXJlbid0IG5l
ZWRlZC4gSWYgdGhleSBhcmUsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhp
cyBmdW5jdGlvbgotICAgICAgICAvLyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG5leHQgdXBkYXRlLgot
ICAgICAgICBpZiAoIW1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoKSB7Ci0gICAg
ICAgICAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJh
Y2sobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lELmNhbGxiYWNrSUQoKSkpOwotICAgICAg
ICAgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEID0gT3B0aW9uYWxDYWxsYmFja0lE
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1
c2ggPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVu
ZGVyZXIgfHwgbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSB8fCBmb3JjZVJlcGFpbnQpIHsK
LSAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOwotICAgICAgICBpZiAoZm9yY2VSZXBh
aW50KQotICAgICAgICAgICAgbV9jb29yZGluYXRvci5mb3JjZUZyYW1lU3luYygpOwotICAgICAg
ICBsYXllckZsdXNoVGltZXJGaXJlZCgpOwotICAgIH0KLX0KLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmRpZEZsdXNoUm9vdExheWVyKGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNv
bnRlbnRSZWN0KQotewotICAgIC8vIEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRpdmUgb3ZlcmxheSBy
b290IGxheWVyIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NMYXll
ciB0cmVlLCB3ZSBuZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgotICAgIGlmIChtX3ZpZXdPdmVy
bGF5Um9vdExheWVyKQotICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVzaENvbXBv
c2l0aW5nU3RhdGUodmlzaWJsZUNvbnRlbnRSZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAobV9pc1N1c3Bl
bmRlZCB8fCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2Nvb3JkaW5hdG9yLnN5bmNEaXNwbGF5U3RhdGUoKTsKLSAgICBtX3dlYlBhZ2UuZmx1c2hQZW5k
aW5nRWRpdG9yU3RhdGVVcGRhdGUoKTsKLSAgICBtX3dlYlBhZ2Uud2lsbERpc3BsYXlQYWdlKCk7
Ci0KLSAgICBpZiAoIW1faXNWYWxpZCB8fCAhbV9jb29yZGluYXRvci5yb290Q29tcG9zaXRpbmdM
YXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiBhIGZvcmNlLXJlcGFpbnQgY2Fs
bGJhY2sgd2FzIHJlZ2lzdGVyZWQsIHdlIHNob3VsZCBmb3JjZSBhICdmcmFtZSBzeW5jJyB0aGF0
Ci0gICAgLy8gd2lsbCBndWFyYW50ZWUgdXMgYSBjYWxsIHRvIHJlbmRlck5leHRGcmFtZSgpIG9u
Y2UgdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5j
YWxsYmFja0lEKQotICAgICAgICBtX2Nvb3JkaW5hdG9yLmZvcmNlRnJhbWVTeW5jKCk7Ci0KLSAg
ICBib29sIGRpZFN5bmMgPSBtX2Nvb3JkaW5hdG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygp
OwotCi0gICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoICYmIGRpZFN5bmMp
IHsKLSAgICAgICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVhKCktPmxheWVySG9zdERpZEZsdXNoTGF5
ZXJzKCk7Ci0gICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7
Ci0gICAgfQotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2NlbmVT
dGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQotewotICAgIG1faXNX
YWl0aW5nRm9yUmVuZGVyZXIgPSB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Zmx1c2hMYXllcnNBbmRGb3JjZVJlcGFpbnQoKQotewotICAgIG1fY29vcmRpbmF0b3Iu
Zm9yY2VGcmFtZVN5bmMoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgp
Ci17Ci0gICAgbV9jb29yZGluYXRvci5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsK
LSAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hh
bmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKLX0KLQotR3JhcGhpY3NMYXllckZhY3RvcnkqIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQotewotICAgIHJldHVy
biAmbV9jb29yZGluYXRvcjsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNj
aGVkdWxlQW5pbWF0aW9uKCkKLXsKLSAgICBpZiAobV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIG1fbGF5ZXJG
bHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgxX3MgKiBtX2Nvb3JkaW5hdG9yLm5leHRBbmltYXRpb25T
ZXJ2aWNlVGltZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYgLy8gVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGVhOTc0NTMxNTRjNjczOWZjN2RlOTg0NmZmMWYxMzgzZmM1N2Y1ZDkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAor
KysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICAgIENvcHly
aWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0X2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0X2gKLQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkNvbXBvc2l0aW5nQ29vcmRp
bmF0b3IuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiT3B0aW9uYWxD
YWxsYmFja0lELmgiCi0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotY2xhc3MgR3JhcGhpY3NMYXllckZhY3Rvcnk7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBw
dWJsaWMgTGF5ZXJUcmVlSG9zdCwgcHVibGljIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVu
dAotewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBj
cmVhdGUoV2ViUGFnZSYpOwotICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdl
YlBhZ2UmKTsKLQotICAgIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwotICAg
IHZvaWQgaW52YWxpZGF0ZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBmb3JjZVJlcGFpbnQoKSBv
dmVycmlkZTsKLSAgICBib29sIGZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpIG92ZXJyaWRl
OwotICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXpl
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoYm9vbCk7Ci0KLSAgICBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgc2V0Vmlld092ZXJsYXlSb290TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJy
aWRlOwotCi0gICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Ci0gICAgdm9pZCBk
aWRGbHVzaFJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50
UmVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkgb3ZlcnJpZGUg
eyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfTsKLSAgICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29u
c3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIGZsdXNoTGF5ZXJzQW5kRm9yY2VSZXBhaW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBs
YXllckZsdXNoVGltZXJGaXJlZCgpOwotCi0gICAgQ29tcG9zaXRpbmdDb29yZGluYXRvciBtX2Nv
b3JkaW5hdG9yOwotICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JSZW5kZXJlciB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX3NjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyIHsgZmFsc2UgfTsKLSAg
ICBzdHJ1Y3QgewotICAgICAgICBPcHRpb25hbENhbGxiYWNrSUQgY2FsbGJhY2tJRDsKLSAgICAg
ICAgYm9vbCBuZWVkc0ZyZXNoRmx1c2ggeyBmYWxzZSB9OwotICAgIH0gbV9mb3JjZVJlcGFpbnRB
c3luYzsKLSAgICBSdW5Mb29wOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fbGF5
ZXJGbHVzaFRpbWVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNGM2ZjNlMzlmYWUzN2U5YjMyNWY5ODFmOTM1YjMyMWY4NzFhNWViNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTAsMCArMSw0NjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTkgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
U19USFJFQURFRCkKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KKworI2lmIFVTRShHTElCX0VWRU5UX0xPT1Ap
CisjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5Lmg+CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIGNv
bnN0IFBsYXRmb3JtRGlzcGxheUlEIHByaW1hcnlEaXNwbGF5SUQgPSAwOworI2lmIFBMQVRGT1JN
KEdUSykKK3N0YXRpYyBjb25zdCBQbGF0Zm9ybURpc3BsYXlJRCBjb21wb3NpdGluZ0Rpc3BsYXlJ
RCA9IDE7CisjZWxzZQorc3RhdGljIGNvbnN0IFBsYXRmb3JtRGlzcGxheUlEIGNvbXBvc2l0aW5n
RGlzcGxheUlEID0gcHJpbWFyeURpc3BsYXlJRDsKKyNlbmRpZgorCitMYXllclRyZWVIb3N0OjpM
YXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2UpCisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkK
KyAgICAsIG1fY29vcmRpbmF0b3Iod2ViUGFnZS5jb3JlUGFnZSgpLCAqdGhpcykKKyAgICAsIG1f
Y29tcG9zaXRvckNsaWVudCgqdGhpcykKKyAgICAsIG1fc3VyZmFjZShBY2NlbGVyYXRlZFN1cmZh
Y2U6OmNyZWF0ZSh3ZWJQYWdlLCAqdGhpcykpCisgICAgLCBtX3ZpZXdwb3J0Q29udHJvbGxlcih3
ZWJQYWdlLnNpemUoKSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwg
dGhpcywgJkxheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKQoreworI2lmIFVTRShH
TElCX0VWRU5UX0xPT1ApCisgICAgbV9sYXllckZsdXNoVGltZXIuc2V0UHJpb3JpdHkoUnVuTG9v
cFNvdXJjZVByaW9yaXR5OjpMYXllckZsdXNoVGltZXIpOworICAgIG1fbGF5ZXJGbHVzaFRpbWVy
LnNldE5hbWUoIltXZWJLaXRdIExheWVyVHJlZUhvc3QiKTsKKyNlbmRpZgorICAgIG1fY29vcmRp
bmF0b3IuY3JlYXRlUm9vdExheWVyKG1fd2ViUGFnZS5zaXplKCkpOworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworCisgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLm1h
aW5GcmFtZVZpZXcoKSkgeworICAgICAgICBhdXRvIGNvbnRlbnRzU2l6ZSA9IGZyYW1lVmlldy0+
Y29udGVudHNTaXplKCk7CisgICAgICAgIGlmICghY29udGVudHNTaXplLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIG1fdmlld3BvcnRDb250cm9sbGVyLmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb250
ZW50c1NpemUpOworICAgIH0KKworICAgIEludFNpemUgc2NhbGVkU2l6ZShtX3dlYlBhZ2Uuc2l6
ZSgpKTsKKyAgICBzY2FsZWRTaXplLnNjYWxlKG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3Rvcigp
KTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IG1fd2ViUGFnZS5kZXZpY2VTY2FsZUZhY3Rvcigp
ICogbV92aWV3cG9ydENvbnRyb2xsZXIucGFnZVNjYWxlRmFjdG9yKCk7CisKKyAgICBpZiAobV9z
dXJmYWNlKSB7CisgICAgICAgIFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgcGFpbnRGbGFncyA9
IDA7CisKKyAgICAgICAgaWYgKG1fc3VyZmFjZS0+c2hvdWxkUGFpbnRNaXJyb3JlZCgpKQorICAg
ICAgICAgICAgcGFpbnRGbGFncyB8PSBUZXh0dXJlTWFwcGVyOjpQYWludGluZ01pcnJvcmVkOwor
CisgICAgICAgIG1fY29tcG9zaXRvciA9IFRocmVhZGVkQ29tcG9zaXRvcjo6Y3JlYXRlKG1fY29t
cG9zaXRvckNsaWVudCwgbV9jb21wb3NpdG9yQ2xpZW50LCBjb21wb3NpdGluZ0Rpc3BsYXlJRCwg
c2NhbGVkU2l6ZSwgc2NhbGVGYWN0b3IsIFRocmVhZGVkQ29tcG9zaXRvcjo6U2hvdWxkRG9GcmFt
ZVN5bmM6OlllcywgcGFpbnRGbGFncyk7CisgICAgICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250
ZXh0SUQgPSBtX3N1cmZhY2UtPnN1cmZhY2VJRCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2Nv
bXBvc2l0b3IgPSBUaHJlYWRlZENvbXBvc2l0b3I6OmNyZWF0ZShtX2NvbXBvc2l0b3JDbGllbnQs
IG1fY29tcG9zaXRvckNsaWVudCwgY29tcG9zaXRpbmdEaXNwbGF5SUQsIHNjYWxlZFNpemUsIHNj
YWxlRmFjdG9yKTsKKworICAgIG1fd2ViUGFnZS53aW5kb3dTY3JlZW5EaWRDaGFuZ2UoY29tcG9z
aXRpbmdEaXNwbGF5SUQpOworCisgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKK30KKworTGF5ZXJU
cmVlSG9zdDo6fkxheWVyVHJlZUhvc3QoKQoreworICAgIEFTU0VSVCghbV9pc1ZhbGlkKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9v
bCBsYXllckZsdXNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGlu
Z0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7CisK
KyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKKyAgICAgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYW5jZWxQZW5k
aW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5ZXJG
bHVzaCgpCit7CisgICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpIHsKKyAgICAgICAg
bV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hU
aW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmly
ZWQoKQoreworICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1faXNXYWl0aW5nRm9yUmVuZGVyZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fY29vcmRpbmF0b3Iuc3luY0Rpc3BsYXlTdGF0ZSgp
OworICAgIG1fd2ViUGFnZS5mbHVzaFBlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0ZSgpOworICAgIG1f
d2ViUGFnZS53aWxsRGlzcGxheVBhZ2UoKTsKKworICAgIGlmICghbV9pc1ZhbGlkIHx8ICFtX2Nv
b3JkaW5hdG9yLnJvb3RDb21wb3NpdGluZ0xheWVyKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIElmIGEgZm9yY2UtcmVwYWludCBjYWxsYmFjayB3YXMgcmVnaXN0ZXJlZCwgd2Ugc2hvdWxk
IGZvcmNlIGEgJ2ZyYW1lIHN5bmMnIHRoYXQKKyAgICAvLyB3aWxsIGd1YXJhbnRlZSB1cyBhIGNh
bGwgdG8gcmVuZGVyTmV4dEZyYW1lKCkgb25jZSB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlLgorICAg
IGlmIChtX2ZvcmNlUmVwYWludEFzeW5jLmNhbGxiYWNrSUQpCisgICAgICAgIG1fY29vcmRpbmF0
b3IuZm9yY2VGcmFtZVN5bmMoKTsKKworICAgIGJvb2wgZGlkU3luYyA9IG1fY29vcmRpbmF0b3Iu
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisKKyAgICBpZiAobV9ub3RpZnlBZnRlclNjaGVk
dWxlZExheWVyRmx1c2ggJiYgZGlkU3luYykgeworICAgICAgICBtX3dlYlBhZ2UuZHJhd2luZ0Fy
ZWEoKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKKyAgICAgICAgbV9ub3RpZnlBZnRlclNj
aGVkdWxlZExheWVyRmx1c2ggPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikK
K3sKKyAgICBtX2Nvb3JkaW5hdG9yLnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGdyYXBoaWNzTGF5
ZXIpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKEdy
YXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKQoreworICAgIG1fdmlld092ZXJsYXlS
b290TGF5ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXllcjsKKyAgICBtX2Nvb3JkaW5hdG9yLnNldFZp
ZXdPdmVybGF5Um9vdExheWVyKHZpZXdPdmVybGF5Um9vdExheWVyKTsKK30KKwordm9pZCBMYXll
clRyZWVIb3N0OjppbnZhbGlkYXRlKCkKK3sKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBt
X2lzVmFsaWQgPSBmYWxzZTsKKworICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisKKyAg
ICBtX2Nvb3JkaW5hdG9yLmludmFsaWRhdGUoKTsKKyAgICBtX2NvbXBvc2l0b3ItPmludmFsaWRh
dGUoKTsKKyAgICBtX3N1cmZhY2UgPSBudWxscHRyOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6
OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IGF1dG8qIGZyYW1lVmlldyA9IG1fd2ViUGFnZS5tYWluRnJhbWVWaWV3KCk7CisgICAgaWYgKCFm
cmFtZVZpZXcgfHwgIWZyYW1lVmlldy0+ZGVsZWdhdGVzU2Nyb2xsaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fdmlld3BvcnRDb250cm9sbGVyLmRpZFNjcm9sbChyZWN0LmxvY2F0aW9u
KCkpOworICAgIGlmIChtX2lzRGlzY2FyZGFibGUpCisgICAgICAgIG1fZGlzY2FyZGFibGVTeW5j
QWN0aW9ucy5hZGQoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlVmlld3BvcnQpOworICAg
IGVsc2UKKyAgICAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0Ojpmb3JjZVJlcGFpbnQoKQoreworICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBydW5u
aW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNlIHdlIGFyZSBub3Qgd2FpdGluZyBm
b3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5LgorICAgIC8vIEluc3RlYWQgd2UgYXJlIGp1
c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBzdGlsbCB3YW50IHRvIGhhdmUgdGhl
IHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcgZXhlY3V0ZWQuCisgICAgbV9jb29y
ZGluYXRvci5zeW5jRGlzcGxheVN0YXRlKCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIHNjaGVkdWxl
IGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUgZm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNlbCBh
IGxhdGVyIGV4cGVjdGVkIGZsdXNoLgorICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworCisgICAg
aWYgKCFtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKQorICAgICAgICBtX2Nvb3JkaW5hdG9yLmZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlcygpOworICAgIG1fY29tcG9zaXRvci0+Zm9yY2VSZXBhaW50KCk7
Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCBj
YWxsYmFja0lEKQoreworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworCisgICAgLy8gV2Ugd2Fu
dCBhIGNsZWFuIHJlcGFpbnQsIG1lYW5pbmcgdGhhdCBpZiB3ZSdyZSBjdXJyZW50bHkgd2FpdGlu
ZyBmb3IgdGhlIHJlbmRlcmVyCisgICAgLy8gdG8gZmluaXNoIGFuIHVwZGF0ZSwgd2UnbGwgaGF2
ZSB0byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoIHdoZW4gaXQncyBkb25lLgorICAgIEFTU0VSVCgh
bV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKTsKKyAgICBtX2ZvcmNlUmVwYWludEFzeW5j
LmNhbGxiYWNrSUQgPSBPcHRpb25hbENhbGxiYWNrSUQoY2FsbGJhY2tJRCk7CisgICAgbV9mb3Jj
ZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBtX3NjaGVkdWxlZFdoaWxlV2FpdGluZ0Zv
clJlbmRlcmVyOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNp
emVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9pc0Rpc2NhcmRh
YmxlKSB7CisgICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5hZGQoRGlzY2FyZGFibGVT
eW5jQWN0aW9uczo6VXBkYXRlU2l6ZSk7CisgICAgICAgIG1fdmlld3BvcnRDb250cm9sbGVyLmRp
ZENoYW5nZVZpZXdwb3J0U2l6ZShzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtX3N1cmZhY2UgJiYgbV9zdXJmYWNlLT5ob3N0UmVzaXplKHNpemUpKQorICAgICAgICBt
X2xheWVyVHJlZUNvbnRleHQuY29udGV4dElEID0gbV9zdXJmYWNlLT5zdXJmYWNlSUQoKTsKKwor
ICAgIG1fY29vcmRpbmF0b3Iuc2l6ZURpZENoYW5nZShzaXplKTsKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKKworICAgIG1fdmlld3BvcnRDb250cm9sbGVyLmRpZENoYW5nZVZpZXdwb3J0U2l6
ZShzaXplKTsKKyAgICBJbnRTaXplIHNjYWxlZFNpemUoc2l6ZSk7CisgICAgc2NhbGVkU2l6ZS5z
Y2FsZShtX3dlYlBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgbV9jb21wb3NpdG9yLT5z
ZXRWaWV3cG9ydFNpemUoc2NhbGVkU2l6ZSwgbV93ZWJQYWdlLmRldmljZVNjYWxlRmFjdG9yKCkg
KiBtX3ZpZXdwb3J0Q29udHJvbGxlci5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgZGlkQ2hhbmdl
Vmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpwYXVzZVJlbmRlcmluZygpCit7
CisgICAgbV9pc1N1c3BlbmRlZCA9IHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6cmVz
dW1lUmVuZGVyaW5nKCkKK3sKKyAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7CisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7Cit9CisKK0dyYXBoaWNzTGF5ZXJGYWN0b3J5KiBMYXllclRyZWVIb3N0
OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCit7CisgICAgcmV0dXJuICZtX2Nvb3JkaW5hdG9yOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6
ZSYgbmV3U2l6ZSkKK3sKKyAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFuZ2VDb250ZW50
c1NpemUobmV3U2l6ZSk7CisgICAgaWYgKG1faXNEaXNjYXJkYWJsZSkKKyAgICAgICAgbV9kaXNj
YXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVWaWV3
cG9ydCk7CisgICAgZWxzZQorICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhWaWV3cG9ydEF0dHJp
YnV0ZXMmJiBhdHRyKQoreworICAgIG1fdmlld3BvcnRDb250cm9sbGVyLmRpZENoYW5nZVZpZXdw
b3J0QXR0cmlidXRlcyhXVEZNb3ZlKGF0dHIpKTsKKyAgICBpZiAobV9pc0Rpc2NhcmRhYmxlKQor
ICAgICAgICBtX2Rpc2NhcmRhYmxlU3luY0FjdGlvbnMuYWRkKERpc2NhcmRhYmxlU3luY0FjdGlv
bnM6OlVwZGF0ZVZpZXdwb3J0KTsKKyAgICBlbHNlCisgICAgICAgIGRpZENoYW5nZVZpZXdwb3J0
KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQoKQoreworICAg
IEZsb2F0UmVjdCB2aXNpYmxlUmVjdChtX3ZpZXdwb3J0Q29udHJvbGxlci52aXNpYmxlQ29udGVu
dHNSZWN0KCkpOworICAgIGlmICh2aXNpYmxlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFdoZW4gdXNpbmcgbm9uIG92ZXJsYXkgc2Nyb2xsYmFycywgdGhlIGNvbnRl
bnRzIHNpemUgZG9lc24ndCBpbmNsdWRlIHRoZSBzY3JvbGxiYXJzLCBidXQgd2UgbmVlZCB0byBp
bmNsdWRlIHRoZW0KKyAgICAvLyBpbiB0aGUgdmlzaWJsZSBhcmVhIHVzZWQgYnkgdGhlIGNvbXBv
c2l0b3IgdG8gZW5zdXJlIHRoYXQgdGhlIHNjcm9sbGJhciBsYXllcnMgYXJlIGFsc28gdXBkYXRl
ZC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MDQ1MC4KKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+bWFpbkZy
YW1lKCkudmlldygpOworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gdmlldy0+dmVydGljYWxT
Y3JvbGxiYXIoKTsKKyAgICBpZiAoc2Nyb2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNj
cm9sbGJhcigpKQorICAgICAgICB2aXNpYmxlUmVjdC5leHBhbmQoc2Nyb2xsYmFyLT53aWR0aCgp
LCAwKTsKKyAgICBzY3JvbGxiYXIgPSB2aWV3LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAg
aWYgKHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKKyAgICAg
ICAgdmlzaWJsZVJlY3QuZXhwYW5kKDAsIHNjcm9sbGJhci0+aGVpZ2h0KCkpOworCisgICAgbV9j
b29yZGluYXRvci5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVSZWN0KTsKKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKKworICAgIGZsb2F0IHBhZ2VTY2FsZSA9IG1fdmlld3BvcnRDb250
cm9sbGVyLnBhZ2VTY2FsZUZhY3RvcigpOworICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uID0g
cm91bmRlZEludFBvaW50KHZpc2libGVSZWN0LmxvY2F0aW9uKCkpOworICAgIGlmIChtX2xhc3RT
Y3JvbGxQb3NpdGlvbiAhPSBzY3JvbGxQb3NpdGlvbikgeworICAgICAgICBtX2xhc3RTY3JvbGxQ
b3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOworICAgICAgICBtX2NvbXBvc2l0b3ItPnNldFNjcm9s
bFBvc2l0aW9uKG1fbGFzdFNjcm9sbFBvc2l0aW9uLCBtX3dlYlBhZ2UuZGV2aWNlU2NhbGVGYWN0
b3IoKSAqIHBhZ2VTY2FsZSk7CisKKyAgICAgICAgaWYgKCF2aWV3LT51c2VGaXhlZExheW91dCgp
KQorICAgICAgICAgICAgdmlldy0+bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKG1fbGFzdFNj
cm9sbFBvc2l0aW9uKTsKKyAgICB9CisKKyAgICBpZiAobV9sYXN0UGFnZVNjYWxlRmFjdG9yICE9
IHBhZ2VTY2FsZSkgeworICAgICAgICBtX2xhc3RQYWdlU2NhbGVGYWN0b3IgPSBwYWdlU2NhbGU7
CisgICAgICAgIG1fd2ViUGFnZS5zY2FsZVBhZ2UocGFnZVNjYWxlLCBtX2xhc3RTY3JvbGxQb3Np
dGlvbik7CisgICAgfQorfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldElzRGlzY2FyZGFibGUo
Ym9vbCBkaXNjYXJkYWJsZSkKK3sKKyAgICBtX2lzRGlzY2FyZGFibGUgPSBkaXNjYXJkYWJsZTsK
KyAgICBpZiAobV9pc0Rpc2NhcmRhYmxlKSB7CisgICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0
aW9ucyA9IE9wdGlvblNldDxEaXNjYXJkYWJsZVN5bmNBY3Rpb25zPigpOworICAgICAgICBtX3dl
YlBhZ2Uud2luZG93U2NyZWVuRGlkQ2hhbmdlKHByaW1hcnlEaXNwbGF5SUQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fd2ViUGFnZS53aW5kb3dTY3JlZW5EaWRDaGFuZ2UoY29tcG9z
aXRpbmdEaXNwbGF5SUQpOworCisgICAgaWYgKG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Rpc2NhcmRhYmxlU3luY0FjdGlv
bnMuY29udGFpbnMoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlU2l6ZSkpIHsKKyAgICAg
ICAgLy8gU2l6ZSBjaGFuZ2VzIGFscmVhZHkgc2V0cyB0aGUgc2NhbGUgZmFjdG9yIGFuZCB1cGRh
dGVzIHRoZSB2aWV3cG9ydC4KKyAgICAgICAgc2l6ZURpZENoYW5nZShtX3dlYlBhZ2Uuc2l6ZSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2Rpc2NhcmRhYmxlU3luY0Fj
dGlvbnMuY29udGFpbnMoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlU2NhbGUpKQorICAg
ICAgICBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKKworICAgIGlmIChtX2Rpc2Nh
cmRhYmxlU3luY0FjdGlvbnMuY29udGFpbnMoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRl
Vmlld3BvcnQpKQorICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOworfQorCisjaWYgUExBVEZP
Uk0oR1RLKSAmJiBQTEFURk9STShYMTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJ
TkRPVykKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBv
c2l0aW5nKHVpbnQ2NF90IGhhbmRsZSkKK3sKKyAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4
dElEID0gaGFuZGxlOworICAgIG1fY29tcG9zaXRvci0+c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZv
ckNvbXBvc2l0aW5nKGhhbmRsZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisjZW5k
aWYKKwordm9pZCBMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KQoreworICAgIGlmIChtX2lzRGlzY2FyZGFibGUpIHsKKyAgICAgICAgbV9kaXNjYXJkYWJsZVN5
bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTY2FsZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zdXJmYWNlICYmIG1fc3VyZmFjZS0+aG9z
dFJlc2l6ZShtX3dlYlBhZ2Uuc2l6ZSgpKSkKKyAgICAgICAgbV9sYXllclRyZWVDb250ZXh0LmNv
bnRleHRJRCA9IG1fc3VyZmFjZS0+c3VyZmFjZUlEKCk7CisKKyAgICBtX2Nvb3JkaW5hdG9yLmRl
dmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgp
LT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOwor
ICAgIG1fY29tcG9zaXRvci0+c2V0U2NhbGVGYWN0b3IobV93ZWJQYWdlLmRldmljZVNjYWxlRmFj
dG9yKCkgKiBtX3ZpZXdwb3J0Q29udHJvbGxlci5wYWdlU2NhbGVGYWN0b3IoKSk7Cit9CisKKyNp
ZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQorUmVmUHRyPERp
c3BsYXlSZWZyZXNoTW9uaXRvcj4gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hN
b25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKK3sKKyAgICByZXR1cm4gbV9jb21w
b3NpdG9yLT5kaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlEKTsKK30KKyNlbmRpZgorCit2
b2lkIExheWVyVHJlZUhvc3Q6OmRpZEZsdXNoUm9vdExheWVyKGNvbnN0IEZsb2F0UmVjdCYgdmlz
aWJsZUNvbnRlbnRSZWN0KQoreworICAgIC8vIEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRpdmUgb3Zl
cmxheSByb290IGxheWVyIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgRnJhbWVWaWV3J3MgR3JhcGhp
Y3NMYXllciB0cmVlLCB3ZSBuZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgorICAgIGlmIChtX3Zp
ZXdPdmVybGF5Um9vdExheWVyKQorICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVz
aENvbXBvc2l0aW5nU3RhdGUodmlzaWJsZUNvbnRlbnRSZWN0KTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0Ojpjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYg
c3RhdGUpCit7CisgICAgbV9pc1dhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7CisgICAgbV9jb21w
b3NpdG9yLT51cGRhdGVTY2VuZVN0YXRlKHN0YXRlKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
OjpmcmFtZUNvbXBsZXRlKCkKK3sKKyAgICBtX2NvbXBvc2l0b3ItPmZyYW1lQ29tcGxldGUoKTsK
K30KKwordWludDY0X3QgTGF5ZXJUcmVlSG9zdDo6bmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBv
c2l0aW5nKCkKK3sKKyAgICBpZiAoIW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJU
cmVlQ29udGV4dC5jb250ZXh0SUQ7CisKKyAgICBtX3N1cmZhY2UtPmluaXRpYWxpemUoKTsKKyAg
ICByZXR1cm4gbV9zdXJmYWNlLT53aW5kb3coKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0Ojpk
aWREZXN0cm95R0xDb250ZXh0KCkKK3sKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1
cmZhY2UtPmZpbmFsaXplKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6d2lsbFJlbmRlckZy
YW1lKCkKK3sKKyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPndpbGxSZW5k
ZXJGcmFtZSgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmRpZFJlbmRlckZyYW1lKCkKK3sK
KyAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICBtX3N1cmZhY2UtPmRpZFJlbmRlckZyYW1lKCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6cmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVw
ZGF0ZSgpCit7CisgICAgLy8gRmx1c2ggbGF5ZXJzIHRvIGNhdXNlIGEgcmVwYWludC4gSWYgbV9p
c1dhaXRpbmdGb3JSZW5kZXJlciB3YXMgdHJ1ZSBhdCB0aGlzIHBvaW50LCB0aGUgbGF5ZXIKKyAg
ICAvLyBmbHVzaCB3b24ndCBkbyBhbnl0aGluZywgYnV0IHRoYXQgbWVhbnMgdGhlcmUncyBhIHBh
aW50aW5nIG9uZ29pbmcgdGhhdCB3aWxsIHNlbmQgdGhlCisgICAgLy8gZGlzcGxheSByZWZyZXNo
IG5vdGlmaWNhdGlvbiB3aGVuIGl0J3MgZG9uZS4KKyAgICBtX2Nvb3JkaW5hdG9yLmZvcmNlRnJh
bWVTeW5jKCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdDo6aGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wgaGFzQmVlblJlc2No
ZWR1bGVkKQoreworICAgIC8vIENhbGwgcmVuZGVyTmV4dEZyYW1lLiBJZiBoYXNCZWVuUmVzY2hl
ZHVsZWQgaXMgdHJ1ZSwgdGhlIGxheWVyIGZsdXNoIHdpbGwgZm9yY2UgYSByZXBhaW50CisgICAg
Ly8gdGhhdCB3aWxsIGNhdXNlIHRoZSBkaXNwbGF5IHJlZnJlc2ggbm90aWZpY2F0aW9uIHRvIGNv
bWUuCisgICAgcmVuZGVyTmV4dEZyYW1lKGhhc0JlZW5SZXNjaGVkdWxlZCk7CisgICAgbV9jb21w
b3NpdG9yLT5oYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoKTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUoYm9vbCBmb3JjZVJlcGFpbnQpCit7CisgICAg
bV9pc1dhaXRpbmdGb3JSZW5kZXJlciA9IGZhbHNlOworICAgIGJvb2wgc2NoZWR1bGVkV2hpbGVX
YWl0aW5nRm9yUmVuZGVyZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fc2NoZWR1bGVkV2hpbGVXYWl0aW5n
Rm9yUmVuZGVyZXIsIGZhbHNlKTsKKyAgICBtX2Nvb3JkaW5hdG9yLnJlbmRlck5leHRGcmFtZSgp
OworCisgICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCkgeworICAgICAgICAv
LyBJZiB0aGUgYXN5bmNocm9ub3VzIGZvcmNlLXJlcGFpbnQgbmVlZHMgYSBzZXBhcmF0ZSBmcmVz
aCBmbHVzaCwgaXQgd2FzIGR1ZSB0bworICAgICAgICAvLyB0aGUgZm9yY2UtcmVwYWludCByZXF1
ZXN0IGJlaW5nIHJlZ2lzdGVyZWQgd2hpbGUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHdhcwor
ICAgICAgICAvLyB3YWl0aW5nIGZvciB0aGUgcmVuZGVyZXIgdG8gZmluaXNoIGFuIHVwZGF0ZS4K
KyAgICAgICAgQVNTRVJUKCFtX2ZvcmNlUmVwYWludEFzeW5jLm5lZWRzRnJlc2hGbHVzaCB8fCBz
Y2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlcik7CisKKyAgICAgICAgLy8gRXhlY3V0ZSB0
aGUgY2FsbGJhY2sgaWYgYW5vdGhlciBsYXllciBmbHVzaCBhbmQgdGhlIHN1YnNlcXVlbnQgc3Rh
dGUgdXBkYXRlCisgICAgICAgIC8vIGFyZW4ndCBuZWVkZWQuIElmIHRoZXkgYXJlLCB0aGUgY2Fs
bGJhY2sgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgLy8gaXMg
Y2FsbGVkIGFmdGVyIHRoZSBuZXh0IHVwZGF0ZS4KKyAgICAgICAgaWYgKCFtX2ZvcmNlUmVwYWlu
dEFzeW5jLm5lZWRzRnJlc2hGbHVzaCkgeworICAgICAgICAgICAgbV93ZWJQYWdlLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmMuY2Fs
bGJhY2tJRC5jYWxsYmFja0lEKCkpKTsKKyAgICAgICAgICAgIG1fZm9yY2VSZXBhaW50QXN5bmMu
Y2FsbGJhY2tJRCA9IE9wdGlvbmFsQ2FsbGJhY2tJRCgpOworICAgICAgICB9CisgICAgICAgIG1f
Zm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoID0gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKHNjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyIHx8IG1fbGF5ZXJGbHVzaFRpbWVy
LmlzQWN0aXZlKCkgfHwgZm9yY2VSZXBhaW50KSB7CisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVy
LnN0b3AoKTsKKyAgICAgICAgaWYgKGZvcmNlUmVwYWludCkKKyAgICAgICAgICAgIG1fY29vcmRp
bmF0b3IuZm9yY2VGcmFtZVN5bmMoKTsKKyAgICAgICAgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoKTsK
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yMGNkYTYwMDI1ZWVhODJiMzFmMmVlYjBlM2NkMzg2MDYxMjBiMTU5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmgKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE5IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorCisjaW5jbHVkZSAiQWNj
ZWxlcmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVkZSAiQ2FsbGJhY2tJRC5oIgorI2luY2x1ZGUgIkNv
bXBvc2l0aW5nQ29vcmRpbmF0b3IuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisj
aW5jbHVkZSAiT3B0aW9uYWxDYWxsYmFja0lELmgiCisjaW5jbHVkZSAiU2ltcGxlVmlld3BvcnRD
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkZWRDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAi
VGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3IuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtU2NyZWVuLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0
aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBHcmFwaGljc0xheWVyOwor
Y2xhc3MgR3JhcGhpY3NMYXllckZhY3Rvcnk7CitzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0
YXRlOworc3RydWN0IFZpZXdwb3J0QXR0cmlidXRlczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIExheWVyVHJlZUhvc3QgZmluYWwgOiBwdWJsaWMg
Q29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50LCBwdWJsaWMgQWNjZWxlcmF0ZWRTdXJmYWNl
OjpDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4
cGxpY2l0IExheWVyVHJlZUhvc3QoV2ViUGFnZSYpOworICAgIH5MYXllclRyZWVIb3N0KCk7CisK
KyAgICBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9CisgICAgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hl
ZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7IG1f
bm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXll
ckZsdXNoOyB9CisKKyAgICB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgY2Fu
Y2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVy
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHNldFZpZXdPdmVybGF5Um9vdExh
eWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKwor
ICAgIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKyAgICB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIGJvb2wgZm9yY2VSZXBhaW50QXN5
bmMoQ2FsbGJhY2tJRCk7CisgICAgdm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIG5ld1NpemUpOworCisgICAgdm9pZCBwYXVzZVJlbmRlcmluZygpOworICAgIHZvaWQg
cmVzdW1lUmVuZGVyaW5nKCk7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSog
Z3JhcGhpY3NMYXllckZhY3RvcnkoKTsKKworICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJp
YnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYpOworCisgICAgdm9pZCBzZXRJc0Rp
c2NhcmRhYmxlKGJvb2wpOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBQTEFURk9S
TShHVEspCisgICAgdm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWlu
dDY0X3QpOworI2VuZGlmCisKKyAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpOworCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikK
KyAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5
UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpOworI2VuZGlmCisKK3By
aXZhdGU6CisgICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZCgpOworICAgIHZvaWQgZGlkQ2hh
bmdlVmlld3BvcnQoKTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZShib29sKTsKKworICAgIC8v
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAorICAgIHZvaWQgZGlkRmx1c2hSb290TGF5
ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpIG92ZXJyaWRl
OworICAgIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpIG92ZXJyaWRlIHsgc2NoZWR1bGVMYXll
ckZsdXNoKCk7IH07CisgICAgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpIG92ZXJyaWRlOworCisgICAgLy8gQWNjZWxlcmF0ZWRT
dXJmYWNlOjpDbGllbnQKKyAgICB2b2lkIGZyYW1lQ29tcGxldGUoKSBvdmVycmlkZTsKKworICAg
IHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpOworICAgIHZvaWQg
ZGlkRGVzdHJveUdMQ29udGV4dCgpOworICAgIHZvaWQgd2lsbFJlbmRlckZyYW1lKCk7CisgICAg
dm9pZCBkaWRSZW5kZXJGcmFtZSgpOworICAgIHZvaWQgcmVxdWVzdERpc3BsYXlSZWZyZXNoTW9u
aXRvclVwZGF0ZSgpOworICAgIHZvaWQgaGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRl
KGJvb2wpOworCisgICAgY2xhc3MgQ29tcG9zaXRvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBUaHJl
YWRlZENvbXBvc2l0b3I6OkNsaWVudCwgcHVibGljIFRocmVhZGVkRGlzcGxheVJlZnJlc2hNb25p
dG9yOjpDbGllbnQgIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcG9zaXRvckNs
aWVudCk7CisgICAgcHVibGljOgorICAgICAgICBDb21wb3NpdG9yQ2xpZW50KExheWVyVHJlZUhv
c3QmIGxheWVyVHJlZUhvc3QpCisgICAgICAgICAgICA6IG1fbGF5ZXJUcmVlSG9zdChsYXllclRy
ZWVIb3N0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVp
bnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3QubmF0aXZlU3VyZmFjZUhh
bmRsZUZvckNvbXBvc2l0aW5nKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGRpZERlc3Ry
b3lHTENvbnRleHQoKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBtX2xheWVyVHJl
ZUhvc3QuZGlkRGVzdHJveUdMQ29udGV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBy
ZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC5tX3N1cmZhY2UpCisgICAgICAgICAgICAgICAgbV9sYXll
clRyZWVIb3N0Lm1fc3VyZmFjZS0+Y2xpZW50UmVzaXplKHNpemUpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCB3aWxsUmVuZGVyRnJhbWUoKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2xheWVyVHJlZUhvc3Qud2lsbFJlbmRlckZyYW1lKCk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9sYXllclRyZWVIb3N0LmRpZFJlbmRlckZyYW1lKCk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoKSBvdmVycmlkZQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QucmVxdWVzdERpc3BsYXlSZWZyZXNo
TW9uaXRvclVwZGF0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBoYW5kbGVEaXNwbGF5
UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9vbCBoYXNCZWVuUmVzY2hlZHVsZWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5oYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JV
cGRhdGUoaGFzQmVlblJlc2NoZWR1bGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIExheWVyVHJl
ZUhvc3QmIG1fbGF5ZXJUcmVlSG9zdDsKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBEaXNjYXJk
YWJsZVN5bmNBY3Rpb25zIHsKKyAgICAgICAgVXBkYXRlU2l6ZSA9IDEgPDwgMSwKKyAgICAgICAg
VXBkYXRlVmlld3BvcnQgPSAxIDw8IDIsCisgICAgICAgIFVwZGF0ZVNjYWxlID0gMSA8PCAzCisg
ICAgfTsKKworICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKKyAgICBMYXllclRyZWVDb250ZXh0IG1f
bGF5ZXJUcmVlQ29udGV4dDsKKyAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
IHsgdHJ1ZSB9OworICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc1N1c3BlbmRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lz
VmFsaWQgeyB0cnVlIH07CisgICAgYm9vbCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyIHsgZmFsc2Ug
fTsKKyAgICBib29sIG1fc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIgeyBmYWxzZSB9
OworICAgIGZsb2F0IG1fbGFzdFBhZ2VTY2FsZUZhY3RvciB7IDEgfTsKKyAgICBXZWJDb3JlOjpJ
bnRQb2ludCBtX2xhc3RTY3JvbGxQb3NpdGlvbjsKKyAgICBib29sIG1faXNEaXNjYXJkYWJsZSB7
IGZhbHNlIH07CisgICAgT3B0aW9uU2V0PERpc2NhcmRhYmxlU3luY0FjdGlvbnM+IG1fZGlzY2Fy
ZGFibGVTeW5jQWN0aW9uczsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3ZpZXdPdmVy
bGF5Um9vdExheWVyIHsgbnVsbHB0ciB9OworICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IgbV9j
b29yZGluYXRvcjsKKyAgICBDb21wb3NpdG9yQ2xpZW50IG1fY29tcG9zaXRvckNsaWVudDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZWxlcmF0ZWRTdXJmYWNlPiBtX3N1cmZhY2U7CisgICAgUmVm
UHRyPFRocmVhZGVkQ29tcG9zaXRvcj4gbV9jb21wb3NpdG9yOworICAgIFNpbXBsZVZpZXdwb3J0
Q29udHJvbGxlciBtX3ZpZXdwb3J0Q29udHJvbGxlcjsKKyAgICBzdHJ1Y3QgeworICAgICAgICBP
cHRpb25hbENhbGxiYWNrSUQgY2FsbGJhY2tJRDsKKyAgICAgICAgYm9vbCBuZWVkc0ZyZXNoRmx1
c2ggeyBmYWxzZSB9OworICAgIH0gbV9mb3JjZVJlcGFpbnRBc3luYzsKKyAgICBSdW5Mb29wOjpU
aW1lcjxMYXllclRyZWVIb3N0PiBtX2xheWVyRmx1c2hUaW1lcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVE
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MTAwZmM2NGE2MTk5MjVkMWE0MmE3NzYyYzU1ODQwYzU2MDdmMTk2Mi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKLQotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDU19USFJFQURFRCkKLQotI2luY2x1ZGUgIkFjY2VsZXJhdGVkU3VyZmFjZS5o
IgotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotc3RhdGljIGNvbnN0IFBsYXRmb3JtRGlzcGxheUlEIHByaW1h
cnlEaXNwbGF5SUQgPSAwOwotI2lmIFBMQVRGT1JNKEdUSykKLXN0YXRpYyBjb25zdCBQbGF0Zm9y
bURpc3BsYXlJRCBjb21wb3NpdGluZ0Rpc3BsYXlJRCA9IDE7Ci0jZWxzZQotc3RhdGljIGNvbnN0
IFBsYXRmb3JtRGlzcGxheUlEIGNvbXBvc2l0aW5nRGlzcGxheUlEID0gcHJpbWFyeURpc3BsYXlJ
RDsKLSNlbmRpZgotCi1SZWY8VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IFRocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUoV2ViUGFnZSYgd2ViUGFnZSkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCh3ZWJQYWdlKSk7Ci19Ci0KLVRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp+VGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoKQotewotfQotCi1UaHJlYWRlZENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFn
ZSYgd2ViUGFnZSkKLSAgICA6IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQotICAg
ICwgbV9jb21wb3NpdG9yQ2xpZW50KCp0aGlzKQotICAgICwgbV9zdXJmYWNlKEFjY2VsZXJhdGVk
U3VyZmFjZTo6Y3JlYXRlKHdlYlBhZ2UsICp0aGlzKSkKLSAgICAsIG1fdmlld3BvcnRDb250cm9s
bGVyKHdlYlBhZ2Uuc2l6ZSgpKQotewotICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1f
d2ViUGFnZS5tYWluRnJhbWVWaWV3KCkpIHsKLSAgICAgICAgYXV0byBjb250ZW50c1NpemUgPSBm
cmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpOwotICAgICAgICBpZiAoIWNvbnRlbnRzU2l6ZS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFuZ2VDb250ZW50
c1NpemUoY29udGVudHNTaXplKTsKLSAgICB9Ci0KLSAgICBJbnRTaXplIHNjYWxlZFNpemUobV93
ZWJQYWdlLnNpemUoKSk7Ci0gICAgc2NhbGVkU2l6ZS5zY2FsZShtX3dlYlBhZ2UuZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7Ci0gICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBtX3dlYlBhZ2UuZGV2aWNlU2Nh
bGVGYWN0b3IoKSAqIG1fdmlld3BvcnRDb250cm9sbGVyLnBhZ2VTY2FsZUZhY3RvcigpOwotCi0g
ICAgaWYgKG1fc3VyZmFjZSkgewotICAgICAgICBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIHBh
aW50RmxhZ3MgPSAwOwotCi0gICAgICAgIGlmIChtX3N1cmZhY2UtPnNob3VsZFBhaW50TWlycm9y
ZWQoKSkKLSAgICAgICAgICAgIHBhaW50RmxhZ3MgfD0gVGV4dHVyZU1hcHBlcjo6UGFpbnRpbmdN
aXJyb3JlZDsKLQotICAgICAgICBtX2NvbXBvc2l0b3IgPSBUaHJlYWRlZENvbXBvc2l0b3I6OmNy
ZWF0ZShtX2NvbXBvc2l0b3JDbGllbnQsIG1fY29tcG9zaXRvckNsaWVudCwgY29tcG9zaXRpbmdE
aXNwbGF5SUQsIHNjYWxlZFNpemUsIHNjYWxlRmFjdG9yLCBUaHJlYWRlZENvbXBvc2l0b3I6OlNo
b3VsZERvRnJhbWVTeW5jOjpZZXMsIHBhaW50RmxhZ3MpOwotICAgICAgICBtX2xheWVyVHJlZUNv
bnRleHQuY29udGV4dElEID0gbV9zdXJmYWNlLT5zdXJmYWNlSUQoKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgbV9jb21wb3NpdG9yID0gVGhyZWFkZWRDb21wb3NpdG9yOjpjcmVhdGUobV9jb21wb3Np
dG9yQ2xpZW50LCBtX2NvbXBvc2l0b3JDbGllbnQsIGNvbXBvc2l0aW5nRGlzcGxheUlELCBzY2Fs
ZWRTaXplLCBzY2FsZUZhY3Rvcik7Ci0KLSAgICBtX3dlYlBhZ2Uud2luZG93U2NyZWVuRGlkQ2hh
bmdlKGNvbXBvc2l0aW5nRGlzcGxheUlEKTsKLQotICAgIGRpZENoYW5nZVZpZXdwb3J0KCk7Ci19
Ci0KLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQot
ewotICAgIG1fY29tcG9zaXRvci0+aW52YWxpZGF0ZSgpOwotICAgIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6aW52YWxpZGF0ZSgpOwotICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Ci19Ci0KLXZv
aWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludCgpCi17Ci0g
ICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKTsKLSAgICBtX2NvbXBv
c2l0b3ItPmZvcmNlUmVwYWludCgpOwotfQotCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpmcmFtZUNvbXBsZXRlKCkKLXsKLSAgICBtX2NvbXBvc2l0b3ItPmZyYW1lQ29t
cGxldGUoKTsKLX0KLQotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVx
dWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpCi17Ci0gICAgLy8gRmx1c2ggbGF5ZXJz
IHRvIGNhdXNlIGEgcmVwYWludC4gSWYgbV9pc1dhaXRpbmdGb3JSZW5kZXJlciB3YXMgdHJ1ZSBh
dCB0aGlzIHBvaW50LCB0aGUgbGF5ZXIKLSAgICAvLyBmbHVzaCB3b24ndCBkbyBhbnl0aGluZywg
YnV0IHRoYXQgbWVhbnMgdGhlcmUncyBhIHBhaW50aW5nIG9uZ29pbmcgdGhhdCB3aWxsIHNlbmQg
dGhlCi0gICAgLy8gZGlzcGxheSByZWZyZXNoIG5vdGlmaWNhdGlvbiB3aGVuIGl0J3MgZG9uZS4K
LSAgICBmbHVzaExheWVyc0FuZEZvcmNlUmVwYWludCgpOwotfQotCi12b2lkIFRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUo
Ym9vbCBoYXNCZWVuUmVzY2hlZHVsZWQpCi17Ci0gICAgLy8gQ2FsbCByZW5kZXJOZXh0RnJhbWUu
IElmIGhhc0JlZW5SZXNjaGVkdWxlZCBpcyB0cnVlLCB0aGUgbGF5ZXIgZmx1c2ggd2lsbCBmb3Jj
ZSBhIHJlcGFpbnQKLSAgICAvLyB0aGF0IHdpbGwgY2F1c2UgdGhlIGRpc3BsYXkgcmVmcmVzaCBu
b3RpZmljYXRpb24gdG8gY29tZS4KLSAgICByZW5kZXJOZXh0RnJhbWUoaGFzQmVlblJlc2NoZWR1
bGVkKTsKLSAgICBtX2NvbXBvc2l0b3ItPmhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0
ZSgpOwotfQotCi11aW50NjRfdCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCkKLXsKLSAgICBpZiAoIW1fc3VyZmFjZSkK
LSAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQ7Ci0KLSAgICBtX3N1
cmZhY2UtPmluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gbV9zdXJmYWNlLT53aW5kb3coKTsKLX0K
LQotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkRGVzdHJveUdMQ29u
dGV4dCgpCi17Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgbV9zdXJmYWNlLT5maW5hbGl6
ZSgpOwotfQotCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp3aWxsUmVu
ZGVyRnJhbWUoKQotewotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1fc3VyZmFjZS0+d2ls
bFJlbmRlckZyYW1lKCk7Ci19Ci0KLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmRpZFJlbmRlckZyYW1lKCkKLXsKLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICBtX3N1
cmZhY2UtPmRpZFJlbmRlckZyYW1lKCk7Ci19Ci0KLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLm1haW5GcmFtZVZp
ZXcoKTsKLSAgICBpZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVWaWV3LT5kZWxlZ2F0ZXNTY3JvbGxp
bmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV92aWV3cG9ydENvbnRyb2xsZXIuZGlkU2Ny
b2xsKHJlY3QubG9jYXRpb24oKSk7Ci0gICAgaWYgKG1faXNEaXNjYXJkYWJsZSkKLSAgICAgICAg
bV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRh
dGVWaWV3cG9ydCk7Ci0gICAgZWxzZQotICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwotfQot
Ci12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb250ZW50c1NpemVDaGFu
Z2VkKGNvbnN0IEludFNpemUmIG5ld1NpemUpCi17Ci0gICAgbV92aWV3cG9ydENvbnRyb2xsZXIu
ZGlkQ2hhbmdlQ29udGVudHNTaXplKG5ld1NpemUpOwotICAgIGlmIChtX2lzRGlzY2FyZGFibGUp
Ci0gICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5hZGQoRGlzY2FyZGFibGVTeW5jQWN0
aW9uczo6VXBkYXRlVmlld3BvcnQpOwotICAgIGVsc2UKLSAgICAgICAgZGlkQ2hhbmdlVmlld3Bv
cnQoKTsKLX0KLQotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKLXsKLSAgICBpZiAobV9pc0Rpc2NhcmRhYmxlKSB7
Ci0gICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5hZGQoRGlzY2FyZGFibGVTeW5jQWN0
aW9uczo6VXBkYXRlU2NhbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1f
c3VyZmFjZSAmJiBtX3N1cmZhY2UtPmhvc3RSZXNpemUobV93ZWJQYWdlLnNpemUoKSkpCi0gICAg
ICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBtX3N1cmZhY2UtPnN1cmZhY2VJRCgp
OwotCi0gICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWQoKTsKLSAgICBtX2NvbXBvc2l0b3ItPnNldFNjYWxlRmFjdG9yKG1fd2ViUGFnZS5k
ZXZpY2VTY2FsZUZhY3RvcigpICogbV92aWV3cG9ydENvbnRyb2xsZXIucGFnZVNjYWxlRmFjdG9y
KCkpOwotfQotCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlk
Q2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKG1faXNEaXNjYXJkYWJsZSkg
ewotICAgICAgICBtX2Rpc2NhcmRhYmxlU3luY0FjdGlvbnMuYWRkKERpc2NhcmRhYmxlU3luY0Fj
dGlvbnM6OlVwZGF0ZVNpemUpOwotICAgICAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFu
Z2VWaWV3cG9ydFNpemUoc2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
bV9zdXJmYWNlICYmIG1fc3VyZmFjZS0+aG9zdFJlc2l6ZShzaXplKSkKLSAgICAgICAgbV9sYXll
clRyZWVDb250ZXh0LmNvbnRleHRJRCA9IG1fc3VyZmFjZS0+c3VyZmFjZUlEKCk7Ci0KLSAgICBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2Uoc2l6ZSk7Ci0gICAgbV92aWV3
cG9ydENvbnRyb2xsZXIuZGlkQ2hhbmdlVmlld3BvcnRTaXplKHNpemUpOwotICAgIEludFNpemUg
c2NhbGVkU2l6ZShzaXplKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fd2ViUGFnZS5kZXZpY2VT
Y2FsZUZhY3RvcigpKTsKLSAgICBtX2NvbXBvc2l0b3ItPnNldFZpZXdwb3J0U2l6ZShzY2FsZWRT
aXplLCBtX3dlYlBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSAqIG1fdmlld3BvcnRDb250cm9sbGVy
LnBhZ2VTY2FsZUZhY3RvcigpKTsKLSAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwotfQotCi12b2lk
IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJp
YnV0ZXMoVmlld3BvcnRBdHRyaWJ1dGVzJiYgYXR0cikKLXsKLSAgICBtX3ZpZXdwb3J0Q29udHJv
bGxlci5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV1RGTW92ZShhdHRyKSk7Ci0gICAgaWYg
KG1faXNEaXNjYXJkYWJsZSkKLSAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmFkZChE
aXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVWaWV3cG9ydCk7Ci0gICAgZWxzZQotICAgICAg
ICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwotfQotCi0jaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9S
TShYMTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLXZvaWQgVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21w
b3NpdGluZyh1aW50NjRfdCBoYW5kbGUpCi17Ci0gICAgbV9sYXllclRyZWVDb250ZXh0LmNvbnRl
eHRJRCA9IGhhbmRsZTsKLSAgICBtX2NvbXBvc2l0b3ItPnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVG
b3JDb21wb3NpdGluZyhoYW5kbGUpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotI2Vu
ZGlmCi0KLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZp
ZXdwb3J0KCkKLXsKLSAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3QobV92aWV3cG9ydENvbnRyb2xs
ZXIudmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKLSAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXaGVuIHVzaW5nIG5vbiBvdmVybGF5IHNjcm9s
bGJhcnMsIHRoZSBjb250ZW50cyBzaXplIGRvZXNuJ3QgaW5jbHVkZSB0aGUgc2Nyb2xsYmFycywg
YnV0IHdlIG5lZWQgdG8gaW5jbHVkZSB0aGVtCi0gICAgLy8gaW4gdGhlIHZpc2libGUgYXJlYSB1
c2VkIGJ5IHRoZSBjb21wb3NpdG9yIHRvIGVuc3VyZSB0aGF0IHRoZSBzY3JvbGxiYXIgbGF5ZXJz
IGFyZSBhbHNvIHVwZGF0ZWQuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjA0NTAuCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gbV93ZWJQYWdlLmNv
cmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9
IHZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgaWYgKHNjcm9sbGJhciAmJiAhc2Nyb2xs
YmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkKLSAgICAgICAgdmlzaWJsZVJlY3QuZXhwYW5kKHNj
cm9sbGJhci0+d2lkdGgoKSwgMCk7Ci0gICAgc2Nyb2xsYmFyID0gdmlldy0+aG9yaXpvbnRhbFNj
cm9sbGJhcigpOwotICAgIGlmIChzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkpCi0gICAgICAgIHZpc2libGVSZWN0LmV4cGFuZCgwLCBzY3JvbGxiYXItPmhlaWdo
dCgpKTsKLQotICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRz
UmVjdCh2aXNpYmxlUmVjdCk7Ci0KLSAgICBmbG9hdCBwYWdlU2NhbGUgPSBtX3ZpZXdwb3J0Q29u
dHJvbGxlci5wYWdlU2NhbGVGYWN0b3IoKTsKLSAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbiA9
IHJvdW5kZWRJbnRQb2ludCh2aXNpYmxlUmVjdC5sb2NhdGlvbigpKTsKLSAgICBpZiAobV9sYXN0
U2Nyb2xsUG9zaXRpb24gIT0gc2Nyb2xsUG9zaXRpb24pIHsKLSAgICAgICAgbV9sYXN0U2Nyb2xs
UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKLSAgICAgICAgbV9jb21wb3NpdG9yLT5zZXRTY3Jv
bGxQb3NpdGlvbihtX2xhc3RTY3JvbGxQb3NpdGlvbiwgbV93ZWJQYWdlLmRldmljZVNjYWxlRmFj
dG9yKCkgKiBwYWdlU2NhbGUpOwotCi0gICAgICAgIGlmICghdmlldy0+dXNlRml4ZWRMYXlvdXQo
KSkKLSAgICAgICAgICAgIHZpZXctPm5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZChtX2xhc3RT
Y3JvbGxQb3NpdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKG1fbGFzdFBhZ2VTY2FsZUZhY3RvciAh
PSBwYWdlU2NhbGUpIHsKLSAgICAgICAgbV9sYXN0UGFnZVNjYWxlRmFjdG9yID0gcGFnZVNjYWxl
OwotICAgICAgICBtX3dlYlBhZ2Uuc2NhbGVQYWdlKHBhZ2VTY2FsZSwgbV9sYXN0U2Nyb2xsUG9z
aXRpb24pOwotICAgIH0KLX0KLQotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Y29tbWl0U2NlbmVTdGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRl
KQotewotICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2NlbmVTdGF0ZShzdGF0
ZSk7Ci0gICAgbV9jb21wb3NpdG9yLT51cGRhdGVTY2VuZVN0YXRlKHN0YXRlKTsKLX0KLQotdm9p
ZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJsZShib29s
IGRpc2NhcmRhYmxlKQotewotICAgIG1faXNEaXNjYXJkYWJsZSA9IGRpc2NhcmRhYmxlOwotICAg
IGlmIChtX2lzRGlzY2FyZGFibGUpIHsKLSAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25z
ID0gT3B0aW9uU2V0PERpc2NhcmRhYmxlU3luY0FjdGlvbnM+KCk7Ci0gICAgICAgIG1fd2ViUGFn
ZS53aW5kb3dTY3JlZW5EaWRDaGFuZ2UocHJpbWFyeURpc3BsYXlJRCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV93ZWJQYWdlLndpbmRvd1NjcmVlbkRpZENoYW5nZShjb21wb3NpdGlu
Z0Rpc3BsYXlJRCk7Ci0KLSAgICBpZiAobV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5j
b250YWlucyhEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTaXplKSkgewotICAgICAgICAv
LyBTaXplIGNoYW5nZXMgYWxyZWFkeSBzZXRzIHRoZSBzY2FsZSBmYWN0b3IgYW5kIHVwZGF0ZXMg
dGhlIHZpZXdwb3J0LgotICAgICAgICBzaXplRGlkQ2hhbmdlKG1fd2ViUGFnZS5zaXplKCkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fZGlzY2FyZGFibGVTeW5jQWN0aW9u
cy5jb250YWlucyhEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTY2FsZSkpCi0gICAgICAg
IGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwotCi0gICAgaWYgKG1fZGlzY2FyZGFi
bGVTeW5jQWN0aW9ucy5jb250YWlucyhEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVWaWV3
cG9ydCkpCi0gICAgICAgIGRpZENoYW5nZVZpZXdwb3J0KCk7Ci19Ci0KLSNpZiBVU0UoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotUmVmUHRyPFdlYkNvcmU6OkRpc3Bs
YXlSZWZyZXNoTW9uaXRvcj4gVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0
ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCi17Ci0g
ICAgcmV0dXJuIG1fY29tcG9zaXRvci0+ZGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7
Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDIyODc2MTYyZTY5NzdiODc2YWYxZWFhMjBkYjg4YzllY2Y0Yjk2N2IuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4KLSAqIENv
cHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKLQotI2luY2x1ZGUgIkFjY2Vs
ZXJhdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgot
I2luY2x1ZGUgIlNpbXBsZVZpZXdwb3J0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlRocmVhZGVk
Q29tcG9zaXRvci5oIgotI2luY2x1ZGUgIlRocmVhZGVkRGlzcGxheVJlZnJlc2hNb25pdG9yLmgi
Ci0jaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0xheWVyOwotc3RydWN0IENvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBh
Z2U7Ci0KLWNsYXNzIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGZpbmFsIDogcHVi
bGljIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCwgcHVibGljIEFjY2VsZXJhdGVkU3VyZmFjZTo6
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0PiBjcmVhdGUoV2ViUGFnZSYpOwotICAgIHZpcnR1YWwgflRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0KCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYpOwotCi0gICAgdm9pZCBzY3JvbGxOb25D
b21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGludmFsaWRh
dGUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZm9yY2VSZXBhaW50KCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIHNldElzRGlzY2FyZGFibGUoYm9vbCkgb3ZlcnJpZGU7Ci0KLSNpZiBQTEFURk9STShH
VEspICYmIFBMQVRGT1JNKFgxMSkgJiYgICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRP
VykKLSAgICB2b2lkIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRf
dCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIGNsYXNzIENvbXBvc2l0b3JDbGllbnQgZmluYWwg
OiBwdWJsaWMgVGhyZWFkZWRDb21wb3NpdG9yOjpDbGllbnQsIHB1YmxpYyBUaHJlYWRlZERpc3Bs
YXlSZWZyZXNoTW9uaXRvcjo6Q2xpZW50ICB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENvbXBvc2l0b3JDbGllbnQpOwotICAgIHB1YmxpYzoKLSAgICAgICAgQ29tcG9zaXRvckNsaWVu
dChUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCYgbGF5ZXJUcmVlSG9zdCkKLSAgICAg
ICAgICAgIDogbV9sYXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdWludDY0X3QgbmF0aXZlU3VyZmFjZUhhbmRs
ZUZvckNvbXBvc2l0aW5nKCkgb3ZlcnJpZGUKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1fbGF5ZXJUcmVlSG9zdC5uYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgZGlkRGVzdHJveUdMQ29udGV4dCgpIG92ZXJyaWRlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5kaWREZXN0cm95R0xDb250ZXh0
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlc2l6ZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0Lm1f
c3VyZmFjZSkKLSAgICAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QubV9zdXJmYWNlLT5jbGll
bnRSZXNpemUoc2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdpbGxSZW5kZXJGcmFt
ZSgpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC53aWxs
UmVuZGVyRnJhbWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUo
KSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QuZGlkUmVu
ZGVyRnJhbWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcmVxdWVzdERpc3BsYXlSZWZy
ZXNoTW9uaXRvclVwZGF0ZSgpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC5yZXF1ZXN0RGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIGhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZShib29s
IGhhc0JlZW5SZXNjaGVkdWxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9sYXllclRyZWVI
b3N0LmhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZShoYXNCZWVuUmVzY2hlZHVsZWQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Qm
IG1fbGF5ZXJUcmVlSG9zdDsKLSAgICB9OwotCi0gICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydCgp
OwotCi0gICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Ci0gICAgdm9pZCBkaWRG
bHVzaFJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZSB7IH0KLSAg
ICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlJikgb3ZlcnJpZGU7Ci0KLSNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElT
UExBWV9NT05JVE9SKQotICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+
IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkg
b3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIC8vIEFjY2VsZXJhdGVkU3VyZmFjZTo6Q2xpZW50Ci0g
ICAgdm9pZCBmcmFtZUNvbXBsZXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICB1aW50NjRfdCBuYXRpdmVT
dXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoKTsKLSAgICB2b2lkIGRpZERlc3Ryb3lHTENvbnRl
eHQoKTsKLSAgICB2b2lkIHdpbGxSZW5kZXJGcmFtZSgpOwotICAgIHZvaWQgZGlkUmVuZGVyRnJh
bWUoKTsKLSAgICB2b2lkIHJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoKTsKLSAg
ICB2b2lkIGhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZShib29sKTsKLQotICAgIGVu
dW0gY2xhc3MgRGlzY2FyZGFibGVTeW5jQWN0aW9ucyB7Ci0gICAgICAgIFVwZGF0ZVNpemUgPSAx
IDw8IDEsCi0gICAgICAgIFVwZGF0ZVZpZXdwb3J0ID0gMSA8PCAyLAotICAgICAgICBVcGRhdGVT
Y2FsZSA9IDEgPDwgMwotICAgIH07Ci0KLSAgICBDb21wb3NpdG9yQ2xpZW50IG1fY29tcG9zaXRv
ckNsaWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZWxlcmF0ZWRTdXJmYWNlPiBtX3N1cmZh
Y2U7Ci0gICAgUmVmUHRyPFRocmVhZGVkQ29tcG9zaXRvcj4gbV9jb21wb3NpdG9yOwotICAgIFNp
bXBsZVZpZXdwb3J0Q29udHJvbGxlciBtX3ZpZXdwb3J0Q29udHJvbGxlcjsKLSAgICBmbG9hdCBt
X2xhc3RQYWdlU2NhbGVGYWN0b3IgeyAxIH07Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgbV9sYXN0
U2Nyb2xsUG9zaXRpb247Ci0gICAgYm9vbCBtX2lzRGlzY2FyZGFibGUgeyBmYWxzZSB9OwotICAg
IE9wdGlvblNldDxEaXNjYXJkYWJsZVN5bmNBY3Rpb25zPiBtX2Rpc2NhcmRhYmxlU3luY0FjdGlv
bnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDU19USFJFQURFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCmluZGV4IDQ0ZWIyZGI2Njk4MGE0YzkzMGVm
MDJlNTc3YjQ2N2JiZDVkZDU1YWEuLjYzZDUxNWFlOTBkNTEzZjdjYWZmZTAxYzEzZmNlNTk1ZGIz
MjM5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWFJbXBsLmNwcApAQCAtNjEsNyArNjEsNiBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6
c2V0TmVlZHNEaXNwbGF5KCkKIHsKICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAg
IEFTU0VSVChtX2RpcnR5UmVnaW9uLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFjY2VsZXJhdGVkRHJh
d2luZ0FyZWE6OnNldE5lZWRzRGlzcGxheSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC03Miw3ICs3MSw2IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAg
ICAgICAgIEFTU0VSVChtX2RpcnR5UmVnaW9uLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFjY2VsZXJh
dGVkRHJhd2luZ0FyZWE6OnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3ZmIwYzZj
YmJlYzg4NTJjZWE5YTI0NzBmYjBhNmZlZWQ2NzFhYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
IHx8IFVTRShURVhUVVJFX01BUFBFUikKLQotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKLSNpbmNsdWRlICJUaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVJlZlB0cjxMYXllclRyZWVIb3N0PiBMYXll
clRyZWVIb3N0OjpjcmVhdGUoV2ViUGFnZSYgd2ViUGFnZSkKLXsKLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1NfVEhSRUFERUQpCi0gICAgcmV0dXJuIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpjcmVhdGUod2ViUGFnZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh3ZWJQ
YWdlKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgotfQotCi1MYXllclRyZWVIb3N0OjpM
YXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2UpCi0gICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkK
LXsKLX0KLQotTGF5ZXJUcmVlSG9zdDo6fkxheWVyVHJlZUhvc3QoKQotewotICAgIEFTU0VSVCgh
bV9pc1ZhbGlkKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0OjpzZXRMYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVz
aGluZ0VuYWJsZWQ7Ci0KLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsK
LSAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3Q6
OnBhdXNlUmVuZGVyaW5nKCkKLXsKLSAgICBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsKLX0KLQotdm9p
ZCBMYXllclRyZWVIb3N0OjpyZXN1bWVSZW5kZXJpbmcoKQotewotICAgIG1faXNTdXNwZW5kZWQg
PSBmYWxzZTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVI
b3N0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBtX2lzVmFs
aWQgPSBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpIHx8IFVTRShURVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTNjMzk4Mjk5ZTZjZjVjZTY2ZWJhMGMzMWI2NDI5MDBkODdkNjJi
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTGF5ZXJUcmVlSG9z
dF9oCi0jZGVmaW5lIExheWVyVHJlZUhvc3RfaAotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKSB8fCBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KLSNpbmNsdWRlICJDYWxsYmFja0lELmgiCi0j
aW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgQ29ubmVjdGlvbjsK
LX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEludFNpemU7
Ci1jbGFzcyBHcmFwaGljc0xheWVyOwotY2xhc3MgR3JhcGhpY3NMYXllckZhY3Rvcnk7Ci0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotc3RydWN0IFZpZXdwb3J0QXR0cmli
dXRlczsKLSNlbmRpZgotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZTsK
LQotY2xhc3MgTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyVHJlZUhvc3Q+
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPExheWVyVHJlZUhvc3Q+IGNyZWF0ZShXZWJQ
YWdlJik7Ci0gICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdCgpOwotCi0gICAgY29uc3QgTGF5ZXJU
cmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVl
Q29udGV4dDsgfQotICAgIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wp
OwotICAgIHZvaWQgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChi
b29sIG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkgeyBtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaCA9IG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJvb3RD
b21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVk
Q29udGVudHNOZWVkRGlzcGxheSgpIHsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9z
aXRlZENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsg
fTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgZm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCkgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBuZXdTaXplKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJp
bmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCk7Ci0KLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIHsg
cmV0dXJuIG51bGxwdHI7IH0KLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURF
RCkKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJikgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0
ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYpIHsgfTsKLSNlbmRpZgotCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlv
bigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SXNEaXNjYXJkYWJsZShib29sKSB7IH07Ci0j
ZW5kaWYKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgUExBVEZPUk0oR1RLKQotICAg
IHZpcnR1YWwgdm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0
X3QpIHsgfTsKLSNlbmRpZgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0Uo
VEVYVFVSRV9NQVBQRVIpCi0gICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZCgpID0gMDsKLSNlbmRpZgotCi0jaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
X0RJU1BMQVlfTU9OSVRPUikKLSAgICB2aXJ0dWFsIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVm
cmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9y
bURpc3BsYXlJRCkgeyByZXR1cm4gbnVsbHB0cjsgfQotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Vmlld092ZXJsYXlSb290TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogdmlld092
ZXJsYXlSb290TGF5ZXIpIHsgbV92aWV3T3ZlcmxheVJvb3RMYXllciA9IHZpZXdPdmVybGF5Um9v
dExheWVyOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0KFdlYlBh
Z2UmKTsKLQotICAgIFdlYlBhZ2UmIG1fd2ViUGFnZTsKLSAgICBMYXllclRyZWVDb250ZXh0IG1f
bGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
IHsgdHJ1ZSB9OwotICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggeyBm
YWxzZSB9OwotICAgIGJvb2wgbV9pc1N1c3BlbmRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lz
VmFsaWQgeyB0cnVlIH07Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV92aWV3T3Zlcmxh
eVJvb3RMYXllciB7IG51bGxwdHIgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSB8fCBVU0UoVEVYVFVSRV9NQVBQRVIp
Ci0KLSNlbmRpZiAvLyBMYXllclRyZWVIb3N0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS93aW4vTGF5ZXJUcmVlSG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiZGZlOTFi
YjBkOTg2YzQ3NjEyMTI0ZDI1ZGI4MDdiODQwOGVkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS93aW4vTGF5ZXJUcmVlSG9zdC5oCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxs
YmFja0lELmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7
CitjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKK3N0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7
Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBMYXll
clRyZWVIb3N0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBMYXllclRyZWVIb3N0KFdlYlBhZ2UmKSB7IH0KKworICAgIGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUNv
bnRleHQ7IH0KKyAgICB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKSB7
IH0KKyAgICB2b2lkIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2go
Ym9vbCkgeyB9CisKKyAgICB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpIHsgfQorICAgIHZvaWQg
Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKSB7IH0KKyAgICB2b2lkIHNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2b2lkIHNldFZpZXdPdmVy
bGF5Um9vdExheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2b2lkIGludmFs
aWRhdGUoKSB7IH0KKworICAgIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2b2lkIGZvcmNlUmVwYWludCgpIHsgfQorICAg
IGJvb2wgZm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCkgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIHsgfQorCisgICAg
dm9pZCBwYXVzZVJlbmRlcmluZygpIHsgfQorICAgIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyB9
CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3Rv
cnkoKSB7IHJldHVybiBudWxscHRyOyB9CisKKyAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIHsgfQorICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRB
dHRyaWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYmKSB7IH0KKworICAgIHZvaWQg
c2V0SXNEaXNjYXJkYWJsZShib29sKSB7IH0KKyAgICB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCgpIHsgfQorCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BM
QVlfTU9OSVRPUikKKyAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBj
cmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIHsg
cmV0dXJuIG51bGxwdHI7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIExheWVyVHJlZUNvbnRl
eHQgbV9sYXllclRyZWVDb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363216</attachid>
            <date>2019-02-28 03:50:44 -0800</date>
            <delta_ts>2019-02-28 04:26:22 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk2-layer-tree-host.diff</filename>
            <type>text/plain</type>
            <size>64075</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggODc1ZTQxOWE2YjUuLjg2ZGJjOTBjNWNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDY0IEBACisyMDE5LTAyLTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbQ29vcmRpbmF0ZWRHcmFwaGljc10gVW5pZnkgYWxsIExheWVyVHJl
ZUhvc3QgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk1MDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgxb1hbiBEb2JlcsWhZWsuCisKKyAg
ICAgICAgVGhlcmUncyBubyByZWFzb24gdG8gaGF2ZSAzIGNsYXNzZXMsIHNpbmNlIGN1cnJlbnRs
eSBMYXllclRyZWVIb3N0IGlzIG9ubHkgdXNlZCBieSBjb29yZGluYXRlZCBncmFwaGljcyBiYXNl
ZAorICAgICAgICBwb3J0cy4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmV4aXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZU5vdyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9U
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAuCisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0Ojp+TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNl
dExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmZvcmNl
UmVwYWludEFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENo
YW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb250ZW50c1NpemVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxh
eVJlZnJlc2hNb25pdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkRmx1
c2hSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb21taXRTY2Vu
ZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZnJhbWVDb21wbGV0ZSk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6Om5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JD
b21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmRpZERlc3Ryb3lH
TENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojp3aWxsUmVuZGVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpkaWRSZW5kZXJGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0
b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5
UmVmcmVzaE1vbml0b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpy
ZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNldE5lZWRzRGlzcGxheUlu
UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmg6IFJl
bW92ZWQuCisgICAgICAgICogV2ViUGFnZS93aW4vTGF5ZXJUcmVlSG9zdC5oOiBBZGRlZC4KKwog
MjAxOS0wMi0yOCAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtXZWIgR1BVXSBFbmFibGUgV2ViIEdQVSBvbmx5IG9uIDY0LWJpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4u
Y21ha2UKaW5kZXggMGE1MzM1YTNjZjguLjY0ZjM1ZThkNTk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4u
Y21ha2UKQEAgLTgxLDExICs4MSw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWFJbXBsLmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmNwcAotCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCi0gICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwCiAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2luL1dlYkluc3BlY3RvclVJV2luLmNw
cAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViUGFnZVdpbi5jcHAKQEAgLTEwNyw4ICsx
MDIsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dF
QktJVF9ESVJ9L1BsYXRmb3JtL2NsYXNzaWZpZXIiCiAgICAgIiR7V0VCS0lUX0RJUn0vUGx1Z2lu
UHJvY2Vzcy93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vU2hhcmVkL0FQSS9jL3dpbiIKLSAgICAi
JHtXRUJLSVRfRElSfS9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcyIKLSAgICAiJHtXRUJLSVRf
RElSfS9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IiCiAgICAg
IiR7V0VCS0lUX0RJUn0vU2hhcmVkL1BsdWdpbnMvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1No
YXJlZC91bml4IgogICAgICIke1dFQktJVF9ESVJ9L1NoYXJlZC93aW4iCkBAIC0xMjMsNyArMTE2
LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJL
SVRfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS93aW4vRE9NIgogICAgICIke1dF
QktJVF9ESVJ9L1dlYlByb2Nlc3Mvd2luIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvd2luIgotICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2Vi
UGFnZS93aW4iCiAgICAgIiR7V0VCS0lUX0RJUn0vd2luIgogKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhy
ZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkRGlzcGxheVJlZnJlc2hN
b25pdG9yLmgKaW5kZXggNDg3ZTY2MDc0ZjIuLjViMjJiYmZmYTA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9U
aHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmgKQEAgLTI1LDkgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpICYmIFVTRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlSZWZy
ZXNoTW9uaXRvci5oPgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKSAm
JiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQogI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5k
ZXggZWExYmY5N2Y4OTMuLjkxZjhjNDllMzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKQEAgLTQwMywx
MiArNDAzLDEwIEBAIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5n
QXJlYS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZFN1cmZhY2UuY3BwCi1XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3
R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAotV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAotV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuY3BwCitXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVIb3N0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNw
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzV1BFLnR4dAppbmRleCA5Yzk1OGJmM2UwMi4uNTQwNWYyNDNmYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYktpdC9T
b3VyY2VzV1BFLnR4dApAQCAtMjQzLDExICsyNDMsOSBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3dwZS9XZWJQb3B1cE1lbnVXUEUuY3BwCiAKIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVy
YXRlZERyYXdpbmdBcmVhLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFj
ZS5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAot
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCitXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3N0
cmVhbWVyL1dlYlBhZ2VHU3RyZWFtZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKaW5kZXgg
MzA0ZGI4ODg1MTYuLjY0NzViZTAxOTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcApAQCAtNjYs
MjQgKzY2LDYgQEAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6QWNjZWxlcmF0ZWREcmF3aW5nQXJl
YShXZWJQYWdlJiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlQ3IKICAgICBtX3dlYlBhZ2UuY29yZVBh
Z2UoKS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IocGFyYW1ldGVycy5kZXZpY2VTY2FsZUZhY3Rvcik7
CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5KCkKLXsK
LSAgICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9z
aXRlZENvbnRlbnRzTmVlZERpc3BsYXkoKTsKLX0KLQotdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdB
cmVhOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBp
ZiAoIW1faXNQYWludGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2xh
eWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENv
bnRlbnRzTmVlZERpc3BsYXlJblJlY3QocmVjdCk7Ci19Ci0KIHZvaWQgQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYTo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUm
IHNjcm9sbERlbHRhKQogewogICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKQEAgLTM0Mywx
OSArMzI1LDE5IEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZShHcmFwaGljc0xheWVyKiBncmFwCiAKICAgICBBU1NFUlQoIW1fbGF5
ZXJUcmVlSG9zdCk7CiAgICAgaWYgKG1fcHJldmlvdXNMYXllclRyZWVIb3N0KSB7Ci0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBXVEZNb3Zl
KG1fcHJldmlvdXNMYXllclRyZWVIb3N0KTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRJ
c0Rpc2NhcmRhYmxlKGZhbHNlKTsKICAgICAgICAgaWYgKCFtX2lzUGFpbnRpbmdTdXNwZW5kZWQp
CiAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJlc3VtZVJlbmRlcmluZygpOwogICAgICAg
ICBpZiAoIW1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbikKICAgICAgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUpOworICAgIH0gZWxzZSB7
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorICAgICAgICBtX2xheWVy
VHJlZUhvc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPExheWVyVHJlZUhvc3Q+KG1fd2ViUGFnZSk7CiAj
ZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0ID0gbnVsbHB0cjsKICNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbGF5ZXJUcmVl
SG9zdCA9IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShtX3dlYlBhZ2UpOwotCisgICAgICAgIAogICAg
ICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMzkz
LDE2ICszNzUsMTIgQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGVOb3coKQogICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3RvcCgp
OwogICAgIG1fd2FudHNUb0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOwog
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIEFTU0VSVChtX2xheWVyVHJlZUhv
c3QpOwogICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0ID0gV1RGTW92ZShtX2xheWVyVHJlZUhv
c3QpOwogICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5zZXRJc0Rpc2NhcmRhYmxlKHRydWUp
OwogICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5wYXVzZVJlbmRlcmluZygpOwogICAgIG1f
cHJldmlvdXNMYXllclRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoZmFs
c2UpOwogICAgIG1fZGlzY2FyZFByZXZpb3VzTGF5ZXJUcmVlSG9zdFRpbWVyLnN0YXJ0T25lU2hv
dCg1X3MpOwotI2Vsc2UKLSAgICBtX2xheWVyVHJlZUhvc3QgPSBudWxscHRyOwotI2VuZGlmCiB9
CiAKIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZGlzY2FyZFByZXZpb3VzTGF5ZXJUcmVl
SG9zdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2Nl
bGVyYXRlZERyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9B
Y2NlbGVyYXRlZERyYXdpbmdBcmVhLmgKaW5kZXggZjdlZjlmNmY1MzUuLjQzMzcxNzBhNzhjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERy
YXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYS5oCkBAIC00MCw4ICs0MCw4IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVk
OgogICAgIC8vIERyYXdpbmdBcmVhCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZSB7IH07Cisg
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92
ZXJyaWRlIHsgfTsKICAgICB2b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3Jv
bGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wpIG92ZXJyaWRlOwogICAgIGJv
b2wgbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbGF5
ZXJUcmVlU3RhdGVJc0Zyb3plbjsgfQpAQCAtMTI4LDkgKzEyOCw5IEBAIHByb3RlY3RlZDoKICAg
ICBSdW5Mb29wOjpUaW1lcjxBY2NlbGVyYXRlZERyYXdpbmdBcmVhPiBtX2V4aXRDb21wb3NpdGlu
Z1RpbWVyOwogCiAgICAgLy8gVGhlIGxheWVyIHRyZWUgaG9zdCB0aGF0IGhhbmRsZXMgYWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcuCi0gICAgUmVmUHRyPExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVl
SG9zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0
OwogCi0gICAgUmVmUHRyPExheWVyVHJlZUhvc3Q+IG1fcHJldmlvdXNMYXllclRyZWVIb3N0Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXllclRyZWVIb3N0PiBtX3ByZXZpb3VzTGF5ZXJUcmVlSG9z
dDsKICAgICBSdW5Mb29wOjpUaW1lcjxBY2NlbGVyYXRlZERyYXdpbmdBcmVhPiBtX2Rpc2NhcmRQ
cmV2aW91c0xheWVyVHJlZUhvc3RUaW1lcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTNiN2EyZGRlNzIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgotCi0jaW5jbHVkZSAiRHJhd2luZ0Fy
ZWEuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgotCi0j
aWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkKLSNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNl
UHJpb3JpdHkuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1SZWY8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdlJiB3ZWJQYWdlKQotewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKSk7Ci19Ci0KLUNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpCi17Ci19Ci0K
LUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBh
Z2UmIHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0gICAgLCBtX2Nvb3Jk
aW5hdG9yKHdlYlBhZ2UuY29yZVBhZ2UoKSwgKnRoaXMpCi0gICAgLCBtX2xheWVyRmx1c2hUaW1l
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVy
Rmx1c2hUaW1lckZpcmVkKQotewotI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCi0gICAgbV9sYXll
ckZsdXNoVGltZXIuc2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpMYXllckZsdXNo
VGltZXIpOwotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnNldE5hbWUoIltXZWJLaXRdIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdCIpOwotI2VuZGlmCi0gICAgbV9jb29yZGluYXRvci5jcmVhdGVSb290
TGF5ZXIobV93ZWJQYWdlLnNpemUoKSk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCi17
Ci0gICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpIHsKLSAgICAgICAgbV9zY2hlZHVs
ZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fbGF5
ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQotewotICAgIG1fbGF5ZXJGbHVz
aFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZp
ZXdPdmVybGF5Um9vdExheWVyKEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKQot
ewotICAgIExheWVyVHJlZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKHZpZXdPdmVybGF5
Um9vdExheWVyKTsKLSAgICBtX2Nvb3JkaW5hdG9yLnNldFZpZXdPdmVybGF5Um9vdExheWVyKHZp
ZXdPdmVybGF5Um9vdExheWVyKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCi17
Ci0gICAgbV9jb29yZGluYXRvci5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xheWVy
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQotewot
ICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLmludmFs
aWRhdGUoKTsKLSAgICBMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKQotewotICAgIC8vIFRoaXMgaXMg
bmVjZXNzYXJ5IGZvciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNlIHdl
IGFyZSBub3Qgd2FpdGluZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5LgotICAgIC8v
IEluc3RlYWQgd2UgYXJlIGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBzdGls
bCB3YW50IHRvIGhhdmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcgZXhl
Y3V0ZWQuCi0gICAgbV9jb29yZGluYXRvci5zeW5jRGlzcGxheVN0YXRlKCk7Ci0KLSAgICAvLyBX
ZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUgZm9yY2VkIHBh
aW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgotICAgIC8vIFRoaXMgaXMg
YWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RDQS4KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
LQotICAgIGlmIChtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2Nvb3JkaW5hdG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotfQotCi1ib29sIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCBjYWxs
YmFja0lEKQotewotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotCi0gICAgLy8gV2Ugd2FudCBh
IGNsZWFuIHJlcGFpbnQsIG1lYW5pbmcgdGhhdCBpZiB3ZSdyZSBjdXJyZW50bHkgd2FpdGluZyBm
b3IgdGhlIHJlbmRlcmVyCi0gICAgLy8gdG8gZmluaXNoIGFuIHVwZGF0ZSwgd2UnbGwgaGF2ZSB0
byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoIHdoZW4gaXQncyBkb25lLgotICAgIEFTU0VSVCghbV9m
b3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKTsKLSAgICBtX2ZvcmNlUmVwYWludEFzeW5jLmNh
bGxiYWNrSUQgPSBPcHRpb25hbENhbGxiYWNrSUQoY2FsbGJhY2tJRCk7Ci0gICAgbV9mb3JjZVJl
cGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBtX3NjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJl
bmRlcmVyOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQotewotICAgIG1fY29v
cmRpbmF0b3Iuc2l6ZURpZENoYW5nZShuZXdTaXplKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fY29vcmRpbmF0b3Iuc2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdChyZWN0KTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZShib29sIGZvcmNl
UmVwYWludCkKLXsKLSAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7Ci0gICAgYm9v
bCBzY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHN0ZDo6ZXhjaGFuZ2UobV9zY2hl
ZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciwgZmFsc2UpOwotICAgIG1fY29vcmRpbmF0b3Iu
cmVuZGVyTmV4dEZyYW1lKCk7Ci0KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFj
a0lEKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhc3luY2hyb25vdXMgZm9yY2UtcmVwYWludCBuZWVk
cyBhIHNlcGFyYXRlIGZyZXNoIGZsdXNoLCBpdCB3YXMgZHVlIHRvCi0gICAgICAgIC8vIHRoZSBm
b3JjZS1yZXBhaW50IHJlcXVlc3QgYmVpbmcgcmVnaXN0ZXJlZCB3aGlsZSBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Qgd2FzCi0gICAgICAgIC8vIHdhaXRpbmcgZm9yIHRoZSByZW5kZXJlciB0byBm
aW5pc2ggYW4gdXBkYXRlLgotICAgICAgICBBU1NFUlQoIW1fZm9yY2VSZXBhaW50QXN5bmMubmVl
ZHNGcmVzaEZsdXNoIHx8IHNjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyKTsKLQotICAg
ICAgICAvLyBFeGVjdXRlIHRoZSBjYWxsYmFjayBpZiBhbm90aGVyIGxheWVyIGZsdXNoIGFuZCB0
aGUgc3Vic2VxdWVudCBzdGF0ZSB1cGRhdGUKLSAgICAgICAgLy8gYXJlbid0IG5lZWRlZC4gSWYg
dGhleSBhcmUsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhpcyBmdW5jdGlv
bgotICAgICAgICAvLyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG5leHQgdXBkYXRlLgotICAgICAgICBp
ZiAoIW1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoKSB7Ci0gICAgICAgICAgICBt
X3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3Jj
ZVJlcGFpbnRBc3luYy5jYWxsYmFja0lELmNhbGxiYWNrSUQoKSkpOwotICAgICAgICAgICAgbV9m
b3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEID0gT3B0aW9uYWxDYWxsYmFja0lEKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAoc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIgfHwg
bV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSB8fCBmb3JjZVJlcGFpbnQpIHsKLSAgICAgICAg
bV9sYXllckZsdXNoVGltZXIuc3RvcCgpOwotICAgICAgICBpZiAoZm9yY2VSZXBhaW50KQotICAg
ICAgICAgICAgbV9jb29yZGluYXRvci5mb3JjZUZyYW1lU3luYygpOwotICAgICAgICBsYXllckZs
dXNoVGltZXJGaXJlZCgpOwotICAgIH0KLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmRpZEZsdXNoUm9vdExheWVyKGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0
KQotewotICAgIC8vIEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRpdmUgb3ZlcmxheSByb290IGxheWVy
IGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NMYXllciB0cmVlLCB3
ZSBuZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgotICAgIGlmIChtX3ZpZXdPdmVybGF5Um9vdExh
eWVyKQotICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3Rh
dGUodmlzaWJsZUNvbnRlbnRSZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBt
X2lzV2FpdGluZ0ZvclJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Nvb3JkaW5h
dG9yLnN5bmNEaXNwbGF5U3RhdGUoKTsKLSAgICBtX3dlYlBhZ2UuZmx1c2hQZW5kaW5nRWRpdG9y
U3RhdGVVcGRhdGUoKTsKLSAgICBtX3dlYlBhZ2Uud2lsbERpc3BsYXlQYWdlKCk7Ci0KLSAgICBp
ZiAoIW1faXNWYWxpZCB8fCAhbV9jb29yZGluYXRvci5yb290Q29tcG9zaXRpbmdMYXllcigpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiBhIGZvcmNlLXJlcGFpbnQgY2FsbGJhY2sgd2Fz
IHJlZ2lzdGVyZWQsIHdlIHNob3VsZCBmb3JjZSBhICdmcmFtZSBzeW5jJyB0aGF0Ci0gICAgLy8g
d2lsbCBndWFyYW50ZWUgdXMgYSBjYWxsIHRvIHJlbmRlck5leHRGcmFtZSgpIG9uY2UgdGhlIHVw
ZGF0ZSBpcyBjb21wbGV0ZS4KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lE
KQotICAgICAgICBtX2Nvb3JkaW5hdG9yLmZvcmNlRnJhbWVTeW5jKCk7Ci0KLSAgICBib29sIGRp
ZFN5bmMgPSBtX2Nvb3JkaW5hdG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotCi0gICAg
aWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoICYmIGRpZFN5bmMpIHsKLSAgICAg
ICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVhKCktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Ci0g
ICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7Ci0gICAgfQot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2NlbmVTdGF0ZShjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQotewotICAgIG1faXNXYWl0aW5nRm9y
UmVuZGVyZXIgPSB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1
c2hMYXllcnNBbmRGb3JjZVJlcGFpbnQoKQotewotICAgIG1fY29vcmRpbmF0b3IuZm9yY2VGcmFt
ZVN5bmMoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCi17Ci0gICAg
bV9jb29yZGluYXRvci5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKLSAgICBtX3dl
YlBhZ2UuY29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRGV2aWNl
U2NhbGVGYWN0b3IoKTsKLX0KLQotR3JhcGhpY3NMYXllckZhY3RvcnkqIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQotewotICAgIHJldHVybiAmbV9jb29y
ZGluYXRvcjsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5p
bWF0aW9uKCkKLXsKLSAgICBpZiAobV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIG1fbGF5ZXJGbHVzaFRpbWVy
LnN0YXJ0T25lU2hvdCgxX3MgKiBtX2Nvb3JkaW5hdG9yLm5leHRBbmltYXRpb25TZXJ2aWNlVGlt
ZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOTc0NTMx
NTRjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyAvZGV2L251
bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gICAgQ29weXJpZ2h0IChDKSAy
MDEzIENvbXBhbnkgMTAwLCBJbmMuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RfaAotI2RlZmluZSBDb29yZGluYXRlZExheWVyVHJlZUhvc3RfaAotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRvci5oIgot
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNrSUQu
aCIKLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBHcmFwaGljc0xheWVyRmFjdG9yeTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNz
IFdlYlBhZ2U7Ci0KLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBMYXll
clRyZWVIb3N0LCBwdWJsaWMgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Ci17Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IGNyZWF0ZShXZWJQ
YWdlJik7Ci0gICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KCk7Ci0KLXByb3Rl
Y3RlZDoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYpOwot
Ci0gICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKSBvdmVycmlkZTsKLSAgICB2b2lkIGNhbmNl
bFBlbmRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9zaXRp
bmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbnZh
bGlkYXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZvcmNlUmVwYWludCgpIG92ZXJyaWRlOwot
ICAgIGJvb2wgZm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKTsKLSAgICB2b2lkIHJlbmRlck5leHRGcmFtZShib29sKTsKLQotICAgIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRWaWV3
T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0KLSAg
ICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQKLSAgICB2b2lkIGRpZEZsdXNoUm9v
dExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKSBvdmVycmlkZSB7IHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOyB9OwotICAgIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShjb25zdCBXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmx1c2hM
YXllcnNBbmRGb3JjZVJlcGFpbnQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxheWVyRmx1c2hU
aW1lckZpcmVkKCk7Ci0KLSAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIG1fY29vcmRpbmF0b3I7
Ci0gICAgYm9vbCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyIHsgZmFsc2UgfTsKLSAgICBib29sIG1f
c2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIgeyBmYWxzZSB9OwotICAgIHN0cnVjdCB7
Ci0gICAgICAgIE9wdGlvbmFsQ2FsbGJhY2tJRCBjYWxsYmFja0lEOwotICAgICAgICBib29sIG5l
ZWRzRnJlc2hGbHVzaCB7IGZhbHNlIH07Ci0gICAgfSBtX2ZvcmNlUmVwYWludEFzeW5jOwotICAg
IFJ1bkxvb3A6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9sYXllckZsdXNoVGlt
ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5j
cHAKc2ltaWxhcml0eSBpbmRleCA1MyUKcmVuYW1lIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMTAwZmM2NGE2MTkuLmVh
YTA4ZDdhN2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2Fs
aWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgSWdhbGlhIFMuTC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTQgKzI3LDIwIEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTX1RIUkVBREVEKQogCi0jaW5jbHVkZSAiQWNjZWxlcmF0ZWRTdXJmYWNlLmgiCisjaW5j
bHVkZSAiRHJhd2luZ0FyZWEuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5oPgorCisjaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkKKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDYsMjEgKzUyLDIxIEBAIHN0YXRpYyBjb25z
dCBQbGF0Zm9ybURpc3BsYXlJRCBjb21wb3NpdGluZ0Rpc3BsYXlJRCA9IDE7CiBzdGF0aWMgY29u
c3QgUGxhdGZvcm1EaXNwbGF5SUQgY29tcG9zaXRpbmdEaXNwbGF5SUQgPSBwcmltYXJ5RGlzcGxh
eUlEOwogI2VuZGlmCiAKLVJlZjxUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gVGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdlJiB3ZWJQYWdlKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0KHdlYlBhZ2UpKTsKLX0KLQotVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6On5U
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpCi17Ci19Ci0KLVRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQ
YWdlJiB3ZWJQYWdlKQotICAgIDogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KHdlYlBhZ2UpCitM
YXllclRyZWVIb3N0OjpMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2UpCisgICAgOiBtX3dl
YlBhZ2Uod2ViUGFnZSkKKyAgICAsIG1fY29vcmRpbmF0b3Iod2ViUGFnZS5jb3JlUGFnZSgpLCAq
dGhpcykKICAgICAsIG1fY29tcG9zaXRvckNsaWVudCgqdGhpcykKICAgICAsIG1fc3VyZmFjZShB
Y2NlbGVyYXRlZFN1cmZhY2U6OmNyZWF0ZSh3ZWJQYWdlLCAqdGhpcykpCiAgICAgLCBtX3ZpZXdw
b3J0Q29udHJvbGxlcih3ZWJQYWdlLnNpemUoKSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKFJ1
bkxvb3A6Om1haW4oKSwgdGhpcywgJkxheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVk
KQogeworI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCisgICAgbV9sYXllckZsdXNoVGltZXIuc2V0
UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpMYXllckZsdXNoVGltZXIpOworICAgIG1f
bGF5ZXJGbHVzaFRpbWVyLnNldE5hbWUoIltXZWJLaXRdIExheWVyVHJlZUhvc3QiKTsKKyNlbmRp
ZgorICAgIG1fY29vcmRpbmF0b3IuY3JlYXRlUm9vdExheWVyKG1fd2ViUGFnZS5zaXplKCkpOwor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworCiAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKSkgewogICAgICAgICBhdXRvIGNvbnRlbnRzU2l6
ZSA9IGZyYW1lVmlldy0+Y29udGVudHNTaXplKCk7CiAgICAgICAgIGlmICghY29udGVudHNTaXpl
LmlzRW1wdHkoKSkKQEAgLTg3LDcwICs5MywxMDEgQEAgVGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlAK
ICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKK0xheWVyVHJlZUhvc3Q6On5MYXllclRyZWVIb3N0
KCkKIHsKLSAgICBtX2NvbXBvc2l0b3ItPmludmFsaWRhdGUoKTsKLSAgICBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKTsKLSAgICBtX3N1cmZhY2UgPSBudWxscHRyOworICAg
IEFTU0VSVCghbV9pc1ZhbGlkKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCiB7Ci0gICAgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKTsKLSAgICBtX2NvbXBvc2l0b3It
PmZvcmNlUmVwYWludCgpOworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9
PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKKworICAgIGlmICht
X2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgeworICAgICAgICBzY2hlZHVsZUxheWVyRmx1
c2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbmNlbFBlbmRpbmdMYXllckZs
dXNoKCk7CiB9CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZyYW1l
Q29tcGxldGUoKQordm9pZCBMYXllclRyZWVIb3N0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRT
Y2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQog
ewotICAgIG1fY29tcG9zaXRvci0+ZnJhbWVDb21wbGV0ZSgpOworICAgIG1fbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwogfQog
Ci12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZXF1ZXN0RGlzcGxheVJl
ZnJlc2hNb25pdG9yVXBkYXRlKCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVMYXllckZs
dXNoKCkKIHsKLSAgICAvLyBGbHVzaCBsYXllcnMgdG8gY2F1c2UgYSByZXBhaW50LiBJZiBtX2lz
V2FpdGluZ0ZvclJlbmRlcmVyIHdhcyB0cnVlIGF0IHRoaXMgcG9pbnQsIHRoZSBsYXllcgotICAg
IC8vIGZsdXNoIHdvbid0IGRvIGFueXRoaW5nLCBidXQgdGhhdCBtZWFucyB0aGVyZSdzIGEgcGFp
bnRpbmcgb25nb2luZyB0aGF0IHdpbGwgc2VuZCB0aGUKLSAgICAvLyBkaXNwbGF5IHJlZnJlc2gg
bm90aWZpY2F0aW9uIHdoZW4gaXQncyBkb25lLgotICAgIGZsdXNoTGF5ZXJzQW5kRm9yY2VSZXBh
aW50KCk7CisgICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpIHsKKyAgICAgICAgbV9z
Y2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAg
IG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi12b2lkIFRocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRh
dGUoYm9vbCBoYXNCZWVuUmVzY2hlZHVsZWQpCit2b2lkIExheWVyVHJlZUhvc3Q6OmNhbmNlbFBl
bmRpbmdMYXllckZsdXNoKCkKIHsKLSAgICAvLyBDYWxsIHJlbmRlck5leHRGcmFtZS4gSWYgaGFz
QmVlblJlc2NoZWR1bGVkIGlzIHRydWUsIHRoZSBsYXllciBmbHVzaCB3aWxsIGZvcmNlIGEgcmVw
YWludAotICAgIC8vIHRoYXQgd2lsbCBjYXVzZSB0aGUgZGlzcGxheSByZWZyZXNoIG5vdGlmaWNh
dGlvbiB0byBjb21lLgotICAgIHJlbmRlck5leHRGcmFtZShoYXNCZWVuUmVzY2hlZHVsZWQpOwot
ICAgIG1fY29tcG9zaXRvci0+aGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKCk7Cisg
ICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOwogfQogCi11aW50NjRfdCBUaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6bmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCkK
K3ZvaWQgTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKQogewotICAgIGlmICgh
bV9zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRDsK
KyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKQorICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3N1cmZhY2UtPmluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gbV9z
dXJmYWNlLT53aW5kb3coKTsKKyAgICBtX2Nvb3JkaW5hdG9yLnN5bmNEaXNwbGF5U3RhdGUoKTsK
KyAgICBtX3dlYlBhZ2UuZmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUoKTsKKyAgICBtX3dl
YlBhZ2Uud2lsbERpc3BsYXlQYWdlKCk7CisKKyAgICBpZiAoIW1faXNWYWxpZCB8fCAhbV9jb29y
ZGluYXRvci5yb290Q29tcG9zaXRpbmdMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBJZiBhIGZvcmNlLXJlcGFpbnQgY2FsbGJhY2sgd2FzIHJlZ2lzdGVyZWQsIHdlIHNob3VsZCBm
b3JjZSBhICdmcmFtZSBzeW5jJyB0aGF0CisgICAgLy8gd2lsbCBndWFyYW50ZWUgdXMgYSBjYWxs
IHRvIHJlbmRlck5leHRGcmFtZSgpIG9uY2UgdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KKyAgICBp
ZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKQorICAgICAgICBtX2Nvb3JkaW5hdG9y
LmZvcmNlRnJhbWVTeW5jKCk7CisKKyAgICBib29sIGRpZFN5bmMgPSBtX2Nvb3JkaW5hdG9yLmZs
dXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworCisgICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoICYmIGRpZFN5bmMpIHsKKyAgICAgICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVh
KCktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7CisgICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hl
ZHVsZWRMYXllckZsdXNoID0gZmFsc2U7CisgICAgfQogfQogCi12b2lkIFRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpkaWREZXN0cm95R0xDb250ZXh0KCkKK3ZvaWQgTGF5ZXJUcmVl
SG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
cikKIHsKLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICBtX3N1cmZhY2UtPmZpbmFsaXplKCk7
CisgICAgbV9jb29yZGluYXRvci5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xheWVy
KTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6d2lsbFJlbmRl
ckZyYW1lKCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld092ZXJsYXlSb290TGF5ZXIoR3Jh
cGhpY3NMYXllciogdmlld092ZXJsYXlSb290TGF5ZXIpCiB7Ci0gICAgaWYgKG1fc3VyZmFjZSkK
LSAgICAgICAgbV9zdXJmYWNlLT53aWxsUmVuZGVyRnJhbWUoKTsKKyAgICBtX3ZpZXdPdmVybGF5
Um9vdExheWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgbV9jb29yZGluYXRvci5zZXRW
aWV3T3ZlcmxheVJvb3RMYXllcih2aWV3T3ZlcmxheVJvb3RMYXllcik7CiB9CiAKLXZvaWQgVGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFJlbmRlckZyYW1lKCkKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAg
bV9zdXJmYWNlLT5kaWRSZW5kZXJGcmFtZSgpOworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAg
IG1faXNWYWxpZCA9IGZhbHNlOworCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKwor
ICAgIG1fY29vcmRpbmF0b3IuaW52YWxpZGF0ZSgpOworICAgIG1fY29tcG9zaXRvci0+aW52YWxp
ZGF0ZSgpOworICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7CiB9CiAKLXZvaWQgVGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBJ
bnRSZWN0JiByZWN0KQordm9pZCBMYXllclRyZWVIb3N0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29u
dGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IG1fd2ViUGFnZS5tYWluRnJhbWVWaWV3KCk7CisgICAgYXV0byogZnJhbWVWaWV3ID0gbV93ZWJQ
YWdlLm1haW5GcmFtZVZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVWaWV3LT5k
ZWxlZ2F0ZXNTY3JvbGxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNjEsMzAgKzE5OCwz
MyBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY3JvbGxOb25Db21w
b3NpdGVkQ29udGVudHMoY29uc3QgSW50UmVjdAogICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgp
OwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb250ZW50c1Np
emVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit2b2lkIExheWVyVHJlZUhvc3Q6OmZv
cmNlUmVwYWludCgpCiB7Ci0gICAgbV92aWV3cG9ydENvbnRyb2xsZXIuZGlkQ2hhbmdlQ29udGVu
dHNTaXplKG5ld1NpemUpOwotICAgIGlmIChtX2lzRGlzY2FyZGFibGUpCi0gICAgICAgIG1fZGlz
Y2FyZGFibGVTeW5jQWN0aW9ucy5hZGQoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRlVmll
d3BvcnQpOwotICAgIGVsc2UKLSAgICAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKKyAgICAvLyBU
aGlzIGlzIG5lY2Vzc2FyeSBmb3IgcnVubmluZyBsYXlvdXQgdGVzdHMuIFNpbmNlIGluIHRoaXMg
Y2FzZSB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGEgVUlQcm9jZXNzIHRvIHJlcGx5IG5pY2VseS4K
KyAgICAvLyBJbnN0ZWFkIHdlIGFyZSBqdXN0IHRyaWdnZXJpbmcgZm9yY2VSZXBhaW50LiBCdXQg
d2Ugc3RpbGwgd2FudCB0byBoYXZlIHRoZSBzY3JpcHRlZCBhbmltYXRpb24gY2FsbGJhY2tzIGJl
aW5nIGV4ZWN1dGVkLgorICAgIG1fY29vcmRpbmF0b3Iuc3luY0Rpc3BsYXlTdGF0ZSgpOworCisg
ICAgLy8gV2UgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhlIGZv
cmNlZCBwYWludCBtaWdodCBjYW5jZWwgYSBsYXRlciBleHBlY3RlZCBmbHVzaC4KKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKKworICAgIGlmICghbV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKKyAg
ICAgICAgbV9jb29yZGluYXRvci5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICBtX2Nv
bXBvc2l0b3ItPmZvcmNlUmVwYWludCgpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQorYm9vbCBMYXll
clRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7Ci0g
ICAgaWYgKG1faXNEaXNjYXJkYWJsZSkgewotICAgICAgICBtX2Rpc2NhcmRhYmxlU3luY0FjdGlv
bnMuYWRkKERpc2NhcmRhYmxlU3luY0FjdGlvbnM6OlVwZGF0ZVNjYWxlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChtX3N1cmZhY2UgJiYgbV9zdXJmYWNlLT5ob3N0UmVzaXpl
KG1fd2ViUGFnZS5zaXplKCkpKQotICAgICAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElE
ID0gbV9zdXJmYWNlLT5zdXJmYWNlSUQoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIAot
ICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkKCk7Ci0gICAgbV9jb21wb3NpdG9yLT5zZXRTY2FsZUZhY3RvcihtX3dlYlBhZ2UuZGV2aWNl
U2NhbGVGYWN0b3IoKSAqIG1fdmlld3BvcnRDb250cm9sbGVyLnBhZ2VTY2FsZUZhY3RvcigpKTsK
KyAgICAvLyBXZSB3YW50IGEgY2xlYW4gcmVwYWludCwgbWVhbmluZyB0aGF0IGlmIHdlJ3JlIGN1
cnJlbnRseSB3YWl0aW5nIGZvciB0aGUgcmVuZGVyZXIKKyAgICAvLyB0byBmaW5pc2ggYW4gdXBk
YXRlLCB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2ggd2hlbiBpdCdzIGRvbmUu
CisgICAgQVNTRVJUKCFtX2ZvcmNlUmVwYWludEFzeW5jLmNhbGxiYWNrSUQpOworICAgIG1fZm9y
Y2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCA9IE9wdGlvbmFsQ2FsbGJhY2tJRChjYWxsYmFja0lE
KTsKKyAgICBtX2ZvcmNlUmVwYWludEFzeW5jLm5lZWRzRnJlc2hGbHVzaCA9IG1fc2NoZWR1bGVk
V2hpbGVXYWl0aW5nRm9yUmVuZGVyZXI7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXpl
JiBzaXplKQogewogICAgIGlmIChtX2lzRGlzY2FyZGFibGUpIHsKICAgICAgICAgbV9kaXNjYXJk
YWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTaXplKTsK
QEAgLTE5NSw3ICsyMzUsOSBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgaWYgKG1fc3VyZmFjZSAm
JiBtX3N1cmZhY2UtPmhvc3RSZXNpemUoc2l6ZSkpCiAgICAgICAgIG1fbGF5ZXJUcmVlQ29udGV4
dC5jb250ZXh0SUQgPSBtX3N1cmZhY2UtPnN1cmZhY2VJRCgpOwogCi0gICAgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKHNpemUpOworICAgIG1fY29vcmRpbmF0b3Iuc2l6
ZURpZENoYW5nZShzaXplKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKwogICAgIG1fdmll
d3BvcnRDb250cm9sbGVyLmRpZENoYW5nZVZpZXdwb3J0U2l6ZShzaXplKTsKICAgICBJbnRTaXpl
IHNjYWxlZFNpemUoc2l6ZSk7CiAgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3dlYlBhZ2UuZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CkBAIC0yMDMsMjUgKzI0NSw0MSBAQCB2b2lkIFRocmVhZGVkQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUpCiAg
ICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFZpZXdwb3J0QXR0cmlidXRl
cyYmIGF0dHIpCit2b2lkIExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKCkKIHsKLSAgICBt
X3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV1RGTW92ZShh
dHRyKSk7CisgICAgbV9pc1N1c3BlbmRlZCA9IHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9z
dDo6cmVzdW1lUmVuZGVyaW5nKCkKK3sKKyAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7CisgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK0dyYXBoaWNzTGF5ZXJGYWN0b3J5KiBMYXllclRy
ZWVIb3N0OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCit7CisgICAgcmV0dXJuICZtX2Nvb3JkaW5h
dG9yOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3Qg
SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFuZ2VD
b250ZW50c1NpemUobmV3U2l6ZSk7CiAgICAgaWYgKG1faXNEaXNjYXJkYWJsZSkKICAgICAgICAg
bV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRh
dGVWaWV3cG9ydCk7CiAgICAgZWxzZQogICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQog
Ci0jaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShYMTEpICYmICFVU0UoUkVESVJFQ1RFRF9Y
Q09NUE9TSVRFX1dJTkRPVykKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCBoYW5kbGUpCit2
b2lkIExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhWaWV3cG9ydEF0
dHJpYnV0ZXMmJiBhdHRyKQogewotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBo
YW5kbGU7Ci0gICAgbV9jb21wb3NpdG9yLT5zZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9z
aXRpbmcoaGFuZGxlKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBtX3ZpZXdwb3J0
Q29udHJvbGxlci5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV1RGTW92ZShhdHRyKSk7Cisg
ICAgaWYgKG1faXNEaXNjYXJkYWJsZSkKKyAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25z
LmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVWaWV3cG9ydCk7CisgICAgZWxzZQor
ICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQotI2VuZGlmCiAKLXZvaWQgVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0KCkKK3ZvaWQgTGF5ZXJU
cmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQoKQogewogICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVj
dChtX3ZpZXdwb3J0Q29udHJvbGxlci52aXNpYmxlQ29udGVudHNSZWN0KCkpOwogICAgIGlmICh2
aXNpYmxlUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzgsNyArMjk2LDggQEAgdm9pZCBUaHJlYWRlZENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQoKQogICAgIGlmIChzY3Jv
bGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHZpc2li
bGVSZWN0LmV4cGFuZCgwLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKIAotICAgIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlUmVjdCk7CisgICAg
bV9jb29yZGluYXRvci5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVSZWN0KTsKKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKIAogICAgIGZsb2F0IHBhZ2VTY2FsZSA9IG1fdmlld3BvcnRD
b250cm9sbGVyLnBhZ2VTY2FsZUZhY3RvcigpOwogICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9u
ID0gcm91bmRlZEludFBvaW50KHZpc2libGVSZWN0LmxvY2F0aW9uKCkpOwpAQCAtMjU2LDEzICsz
MTUsNyBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRDaGFuZ2VW
aWV3cG9ydCgpCiAgICAgfQogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0Ojpjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3Rh
dGUpCi17Ci0gICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRTY2VuZVN0YXRlKHN0
YXRlKTsKLSAgICBtX2NvbXBvc2l0b3ItPnVwZGF0ZVNjZW5lU3RhdGUoc3RhdGUpOwotfQotCi12
b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKGJv
b2wgZGlzY2FyZGFibGUpCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldElzRGlzY2FyZGFibGUoYm9v
bCBkaXNjYXJkYWJsZSkKIHsKICAgICBtX2lzRGlzY2FyZGFibGUgPSBkaXNjYXJkYWJsZTsKICAg
ICBpZiAobV9pc0Rpc2NhcmRhYmxlKSB7CkBAIC0yODgsMTMgKzM0MSwxMjkgQEAgdm9pZCBUaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJsZShib29sIGRpc2Nh
cmRhYmxlKQogICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQogCisjaWYgUExBVEZPUk0o
R1RLKSAmJiBQTEFURk9STShYMTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRP
VykKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0
aW5nKHVpbnQ2NF90IGhhbmRsZSkKK3sKKyAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4dElE
ID0gaGFuZGxlOworICAgIG1fY29tcG9zaXRvci0+c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKGhhbmRsZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisjZW5kaWYK
Kwordm9pZCBMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQor
eworICAgIGlmIChtX2lzRGlzY2FyZGFibGUpIHsKKyAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNB
Y3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTY2FsZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zdXJmYWNlICYmIG1fc3VyZmFjZS0+aG9zdFJl
c2l6ZShtX3dlYlBhZ2Uuc2l6ZSgpKSkKKyAgICAgICAgbV9sYXllclRyZWVDb250ZXh0LmNvbnRl
eHRJRCA9IG1fc3VyZmFjZS0+c3VyZmFjZUlEKCk7CisKKyAgICBtX2Nvb3JkaW5hdG9yLmRldmlj
ZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOworICAg
IG1fY29tcG9zaXRvci0+c2V0U2NhbGVGYWN0b3IobV93ZWJQYWdlLmRldmljZVNjYWxlRmFjdG9y
KCkgKiBtX3ZpZXdwb3J0Q29udHJvbGxlci5wYWdlU2NhbGVGYWN0b3IoKSk7Cit9CisKICNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotUmVmUHRyPFdlYkNv
cmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5
SUQpCitSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBMYXllclRyZWVIb3N0OjpjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogewogICAg
IHJldHVybiBtX2NvbXBvc2l0b3ItPmRpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpOwog
fQogI2VuZGlmCiAKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGlkRmx1c2hSb290TGF5ZXIoY29uc3Qg
RmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpCit7CisgICAgLy8gQmVjYXVzZSBvdXIgdmll
dy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBGcmFt
ZVZpZXcncyBHcmFwaGljc0xheWVyIHRyZWUsIHdlIG5lZWQgdG8gZmx1c2ggaXQgbWFudWFsbHku
CisgICAgaWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIpCisgICAgICAgIG1fdmlld092ZXJsYXlS
b290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh2aXNpYmxlQ29udGVudFJlY3QpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3Q6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gdHJ1
ZTsKKyAgICBtX2NvbXBvc2l0b3ItPnVwZGF0ZVNjZW5lU3RhdGUoc3RhdGUpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3Q6OmZyYW1lQ29tcGxldGUoKQoreworICAgIG1fY29tcG9zaXRvci0+ZnJh
bWVDb21wbGV0ZSgpOworfQorCit1aW50NjRfdCBMYXllclRyZWVIb3N0OjpuYXRpdmVTdXJmYWNl
SGFuZGxlRm9yQ29tcG9zaXRpbmcoKQoreworICAgIGlmICghbV9zdXJmYWNlKQorICAgICAgICBy
ZXR1cm4gbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRDsKKworICAgIG1fc3VyZmFjZS0+aW5p
dGlhbGl6ZSgpOworICAgIHJldHVybiBtX3N1cmZhY2UtPndpbmRvdygpOworfQorCit2b2lkIExh
eWVyVHJlZUhvc3Q6OmRpZERlc3Ryb3lHTENvbnRleHQoKQoreworICAgIGlmIChtX3N1cmZhY2Up
CisgICAgICAgIG1fc3VyZmFjZS0+ZmluYWxpemUoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
Ojp3aWxsUmVuZGVyRnJhbWUoKQoreworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fc3Vy
ZmFjZS0+d2lsbFJlbmRlckZyYW1lKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGlkUmVu
ZGVyRnJhbWUoKQoreworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fc3VyZmFjZS0+ZGlk
UmVuZGVyRnJhbWUoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpyZXF1ZXN0RGlzcGxheVJl
ZnJlc2hNb25pdG9yVXBkYXRlKCkKK3sKKyAgICAvLyBGbHVzaCBsYXllcnMgdG8gY2F1c2UgYSBy
ZXBhaW50LiBJZiBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyIHdhcyB0cnVlIGF0IHRoaXMgcG9pbnQs
IHRoZSBsYXllcgorICAgIC8vIGZsdXNoIHdvbid0IGRvIGFueXRoaW5nLCBidXQgdGhhdCBtZWFu
cyB0aGVyZSdzIGEgcGFpbnRpbmcgb25nb2luZyB0aGF0IHdpbGwgc2VuZCB0aGUKKyAgICAvLyBk
aXNwbGF5IHJlZnJlc2ggbm90aWZpY2F0aW9uIHdoZW4gaXQncyBkb25lLgorICAgIG1fY29vcmRp
bmF0b3IuZm9yY2VGcmFtZVN5bmMoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwor
dm9pZCBMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9v
bCBoYXNCZWVuUmVzY2hlZHVsZWQpCit7CisgICAgLy8gQ2FsbCByZW5kZXJOZXh0RnJhbWUuIElm
IGhhc0JlZW5SZXNjaGVkdWxlZCBpcyB0cnVlLCB0aGUgbGF5ZXIgZmx1c2ggd2lsbCBmb3JjZSBh
IHJlcGFpbnQKKyAgICAvLyB0aGF0IHdpbGwgY2F1c2UgdGhlIGRpc3BsYXkgcmVmcmVzaCBub3Rp
ZmljYXRpb24gdG8gY29tZS4KKyAgICByZW5kZXJOZXh0RnJhbWUoaGFzQmVlblJlc2NoZWR1bGVk
KTsKKyAgICBtX2NvbXBvc2l0b3ItPmhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZShib29sIGZvcmNlUmVw
YWludCkKK3sKKyAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7CisgICAgYm9vbCBz
Y2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHN0ZDo6ZXhjaGFuZ2UobV9zY2hlZHVs
ZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciwgZmFsc2UpOworICAgIG1fY29vcmRpbmF0b3IucmVu
ZGVyTmV4dEZyYW1lKCk7CisKKyAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lE
KSB7CisgICAgICAgIC8vIElmIHRoZSBhc3luY2hyb25vdXMgZm9yY2UtcmVwYWludCBuZWVkcyBh
IHNlcGFyYXRlIGZyZXNoIGZsdXNoLCBpdCB3YXMgZHVlIHRvCisgICAgICAgIC8vIHRoZSBmb3Jj
ZS1yZXBhaW50IHJlcXVlc3QgYmVpbmcgcmVnaXN0ZXJlZCB3aGlsZSBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Qgd2FzCisgICAgICAgIC8vIHdhaXRpbmcgZm9yIHRoZSByZW5kZXJlciB0byBmaW5p
c2ggYW4gdXBkYXRlLgorICAgICAgICBBU1NFUlQoIW1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNG
cmVzaEZsdXNoIHx8IHNjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyKTsKKworICAgICAg
ICAvLyBFeGVjdXRlIHRoZSBjYWxsYmFjayBpZiBhbm90aGVyIGxheWVyIGZsdXNoIGFuZCB0aGUg
c3Vic2VxdWVudCBzdGF0ZSB1cGRhdGUKKyAgICAgICAgLy8gYXJlbid0IG5lZWRlZC4gSWYgdGhl
eSBhcmUsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhpcyBmdW5jdGlvbgor
ICAgICAgICAvLyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG5leHQgdXBkYXRlLgorICAgICAgICBpZiAo
IW1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoKSB7CisgICAgICAgICAgICBtX3dl
YlBhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJl
cGFpbnRBc3luYy5jYWxsYmFja0lELmNhbGxiYWNrSUQoKSkpOworICAgICAgICAgICAgbV9mb3Jj
ZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEID0gT3B0aW9uYWxDYWxsYmFja0lEKCk7CisgICAgICAg
IH0KKyAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIgfHwgbV9s
YXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSB8fCBmb3JjZVJlcGFpbnQpIHsKKyAgICAgICAgbV9s
YXllckZsdXNoVGltZXIuc3RvcCgpOworICAgICAgICBpZiAoZm9yY2VSZXBhaW50KQorICAgICAg
ICAgICAgbV9jb29yZGluYXRvci5mb3JjZUZyYW1lU3luYygpOworICAgICAgICBsYXllckZsdXNo
VGltZXJGaXJlZCgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRp
ZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlSG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NDVh
M2EzZTdmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5oCkBAIC0wLDAgKzEsMjI5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFjY2VsZXJhdGVkU3VyZmFjZS5oIgorI2luY2x1ZGUg
IkNhbGxiYWNrSUQuaCIKKyNpbmNsdWRlICJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgiCisjaW5j
bHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJRC5o
IgorI2luY2x1ZGUgIlNpbXBsZVZpZXdwb3J0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlRocmVh
ZGVkQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlRocmVhZGVkRGlzcGxheVJlZnJlc2hNb25pdG9y
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRT
aXplOworY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Owor
c3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZTsKK3N0cnVjdCBWaWV3cG9ydEF0dHJpYnV0
ZXM7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBM
YXllclRyZWVIb3N0CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorICAg
IGZpbmFsIDogcHVibGljIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCwgcHVibGljIEFj
Y2VsZXJhdGVkU3VyZmFjZTo6Q2xpZW50CisjZW5kaWYKK3sKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0KFdlYlBhZ2UmKTsK
KyAgICB+TGF5ZXJUcmVlSG9zdCgpOworCisgICAgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5
ZXJUcmVlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAg
IHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQgc2V0
U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKTsKKworICAgIHZv
aWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVz
aCgpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopOworICAgIHZvaWQgc2V0Vmlld092ZXJsYXlSb290TGF5ZXIoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopOworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9pZCBzY3JvbGxOb25D
b21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZm9y
Y2VSZXBhaW50KCk7CisgICAgYm9vbCBmb3JjZVJlcGFpbnRBc3luYyhDYWxsYmFja0lEKTsKKyAg
ICB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7CisK
KyAgICB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7CisgICAgdm9pZCByZXN1bWVSZW5kZXJpbmcoKTsK
KworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9y
eSgpOworCisgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKTsKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJDb3JlOjpWaWV3
cG9ydEF0dHJpYnV0ZXMmJik7CisKKyAgICB2b2lkIHNldElzRGlzY2FyZGFibGUoYm9vbCk7CisK
KyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHNl
dE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCk7CisjZW5kaWYKKwor
ICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisKKyNpZiBVU0UoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQorICAgIFJlZlB0cjxXZWJDb3Jl
OjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJD
b3JlOjpQbGF0Zm9ybURpc3BsYXlJRCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisgICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJl
ZCgpOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnQoKTsKKyAgICB2b2lkIHJlbmRlck5leHRG
cmFtZShib29sKTsKKworICAgIC8vIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAorICAg
IHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxl
Q29udGVudFJlY3QpIG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpIG92
ZXJyaWRlIHsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH07CisgICAgdm9pZCBjb21taXRTY2VuZVN0
YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpIG92ZXJyaWRlOwor
CisgICAgLy8gQWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQKKyAgICB2b2lkIGZyYW1lQ29tcGxl
dGUoKSBvdmVycmlkZTsKKworICAgIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21w
b3NpdGluZygpOworICAgIHZvaWQgZGlkRGVzdHJveUdMQ29udGV4dCgpOworICAgIHZvaWQgd2ls
bFJlbmRlckZyYW1lKCk7CisgICAgdm9pZCBkaWRSZW5kZXJGcmFtZSgpOworICAgIHZvaWQgcmVx
dWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOworICAgIHZvaWQgaGFuZGxlRGlzcGxh
eVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wpOworCisgICAgY2xhc3MgQ29tcG9zaXRvckNsaWVu
dCBmaW5hbCA6IHB1YmxpYyBUaHJlYWRlZENvbXBvc2l0b3I6OkNsaWVudCwgcHVibGljIFRocmVh
ZGVkRGlzcGxheVJlZnJlc2hNb25pdG9yOjpDbGllbnQgIHsKKyAgICAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ29tcG9zaXRvckNsaWVudCk7CisgICAgcHVibGljOgorICAgICAgICBDb21wb3Np
dG9yQ2xpZW50KExheWVyVHJlZUhvc3QmIGxheWVyVHJlZUhvc3QpCisgICAgICAgICAgICA6IG1f
bGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3Np
dGluZygpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2xheWVyVHJl
ZUhvc3QubmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGRpZERlc3Ryb3lHTENvbnRleHQoKSBvdmVycmlkZQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QuZGlkRGVzdHJveUdMQ29udGV4dCgpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC5tX3N1cmZhY2UpCisg
ICAgICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0Lm1fc3VyZmFjZS0+Y2xpZW50UmVzaXplKHNp
emUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB3aWxsUmVuZGVyRnJhbWUoKSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3Qud2lsbFJlbmRlckZyYW1l
KCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCkgb3ZlcnJpZGUK
KyAgICAgICAgeworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LmRpZFJlbmRlckZyYW1lKCk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0b3JV
cGRhdGUoKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3Qu
cmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9vbCBoYXNCZWVuUmVz
Y2hlZHVsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5oYW5kbGVE
aXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoaGFzQmVlblJlc2NoZWR1bGVkKTsKKyAgICAgICAg
fQorCisgICAgICAgIExheWVyVHJlZUhvc3QmIG1fbGF5ZXJUcmVlSG9zdDsKKyAgICB9OworCisg
ICAgZW51bSBjbGFzcyBEaXNjYXJkYWJsZVN5bmNBY3Rpb25zIHsKKyAgICAgICAgVXBkYXRlU2l6
ZSA9IDEgPDwgMSwKKyAgICAgICAgVXBkYXRlVmlld3BvcnQgPSAxIDw8IDIsCisgICAgICAgIFVw
ZGF0ZVNjYWxlID0gMSA8PCAzCisgICAgfTsKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1NfVEhSRUFERUQpCisKKyAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7CisgICAgTGF5ZXJUcmVl
Q29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
X1RIUkVBREVEKQorICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgeyB0cnVl
IH07CisgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNWYWxpZCB7
IHRydWUgfTsKKyAgICBib29sIG1faXNXYWl0aW5nRm9yUmVuZGVyZXIgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciB7IGZhbHNlIH07CisgICAg
ZmxvYXQgbV9sYXN0UGFnZVNjYWxlRmFjdG9yIHsgMSB9OworICAgIFdlYkNvcmU6OkludFBvaW50
IG1fbGFzdFNjcm9sbFBvc2l0aW9uOworICAgIGJvb2wgbV9pc0Rpc2NhcmRhYmxlIHsgZmFsc2Ug
fTsKKyAgICBPcHRpb25TZXQ8RGlzY2FyZGFibGVTeW5jQWN0aW9ucz4gbV9kaXNjYXJkYWJsZVN5
bmNBY3Rpb25zOworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmlld092ZXJsYXlSb290
TGF5ZXIgeyBudWxscHRyIH07CisgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvciBtX2Nvb3JkaW5h
dG9yOworICAgIENvbXBvc2l0b3JDbGllbnQgbV9jb21wb3NpdG9yQ2xpZW50OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxBY2NlbGVyYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKKyAgICBSZWZQdHI8VGhy
ZWFkZWRDb21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7CisgICAgU2ltcGxlVmlld3BvcnRDb250cm9s
bGVyIG1fdmlld3BvcnRDb250cm9sbGVyOworICAgIHN0cnVjdCB7CisgICAgICAgIE9wdGlvbmFs
Q2FsbGJhY2tJRCBjYWxsYmFja0lEOworICAgICAgICBib29sIG5lZWRzRnJlc2hGbHVzaCB7IGZh
bHNlIH07CisgICAgfSBtX2ZvcmNlUmVwYWludEFzeW5jOworICAgIFJ1bkxvb3A6OlRpbWVyPExh
eWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOworI2VuZGlmIC8vIFVTRShDT09SRElOQVRF
RF9HUkFQSElDU19USFJFQURFRCkKK307CisKKyNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
X1RIUkVBREVEKQoraW5saW5lIExheWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3QoV2ViUGFnZSYg
d2ViUGFnZSkgOiBtX3dlYlBhZ2Uod2ViUGFnZSkgeyB9CitpbmxpbmUgTGF5ZXJUcmVlSG9zdDo6
fkxheWVyVHJlZUhvc3QoKSB7IH0KK2lubGluZSB2b2lkIExheWVyVHJlZUhvc3Q6OnNldExheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKSB7IH0KK2lubGluZSB2b2lkIExheWVyVHJlZUhv
c3Q6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCkgeyB9
CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0OjpzY2hlZHVsZUxheWVyRmx1c2goKSB7IH0KK2lu
bGluZSB2b2lkIExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkgeyB9Citp
bmxpbmUgdm9pZCBMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgeyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0OjpzZXRWaWV3
T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9CitpbmxpbmUgdm9p
ZCBMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkgeyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVI
b3N0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IHsgfQoraW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkgeyB9Citpbmxp
bmUgYm9vbCBMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyhDYWxsYmFja0lEKSB7IHJl
dHVybiBmYWxzZTsgfQoraW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJikgeyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0Ojpw
YXVzZVJlbmRlcmluZygpIHsgfQoraW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVu
ZGVyaW5nKCkgeyB9CitpbmxpbmUgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIExheWVy
VHJlZUhvc3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQoraW5s
aW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6Y29udGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJikgeyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0OjpkaWRDaGFuZ2VWaWV3
cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYpIHsgfQoraW5saW5l
IHZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJsZShib29sKSB7IH0KK2lubGluZSB2
b2lkIExheWVyVHJlZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIHsgfQor
I2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCitpbmxpbmUg
UmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSB7IHJl
dHVybiBudWxscHRyOyB9CisjZW5kaWYKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI4NzYx
NjJlNjkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaAor
KysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJp
Z2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdh
bGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1NfVEhSRUFERUQpCi0KLSNpbmNsdWRlICJBY2NlbGVyYXRlZFN1cmZhY2UuaCIKLSNp
bmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJTaW1wbGVWaWV3
cG9ydENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJUaHJlYWRlZENvbXBvc2l0b3IuaCIKLSNpbmNs
dWRlICJUaHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9PcHRp
b25TZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3NDb250ZXh0Owot
Y2xhc3MgR3JhcGhpY3NMYXllcjsKLXN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGU7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBUaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBmaW5hbCA6IHB1YmxpYyBDb29yZGluYXRlZExheWVy
VHJlZUhvc3QsIHB1YmxpYyBBY2NlbGVyYXRlZFN1cmZhY2U6OkNsaWVudCB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKFdl
YlBhZ2UmKTsKLSAgICB2aXJ0dWFsIH5UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgp
OwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0KFdlYlBhZ2UmKTsKLQotICAgIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgc2l6
ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
ZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY29u
dGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1
dGVzJiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGZvcmNlUmVwYWludCgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRJc0Rpc2NhcmRh
YmxlKGJvb2wpIG92ZXJyaWRlOwotCi0jaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShYMTEp
ICYmICAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgdm9pZCBzZXROYXRp
dmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QpIG92ZXJyaWRlOwotI2VuZGlm
Ci0KLSAgICBjbGFzcyBDb21wb3NpdG9yQ2xpZW50IGZpbmFsIDogcHVibGljIFRocmVhZGVkQ29t
cG9zaXRvcjo6Q2xpZW50LCBwdWJsaWMgVGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3I6OkNs
aWVudCAgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21wb3NpdG9yQ2xpZW50KTsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIENvbXBvc2l0b3JDbGllbnQoVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QmIGxheWVyVHJlZUhvc3QpCi0gICAgICAgICAgICA6IG1fbGF5ZXJUcmVl
SG9zdChsYXllclRyZWVIb3N0KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpIG92
ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3QubmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIGRpZERlc3Ryb3lHTENvbnRleHQoKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2xheWVyVHJlZUhvc3QuZGlkRGVzdHJveUdMQ29udGV4dCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC5tX3N1cmZhY2UpCi0gICAgICAgICAg
ICAgICAgbV9sYXllclRyZWVIb3N0Lm1fc3VyZmFjZS0+Y2xpZW50UmVzaXplKHNpemUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCB3aWxsUmVuZGVyRnJhbWUoKSBvdmVycmlkZQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3Qud2lsbFJlbmRlckZyYW1lKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCkgb3ZlcnJpZGUKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LmRpZFJlbmRlckZyYW1lKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoKSBv
dmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QucmVxdWVzdERp
c3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBo
YW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9vbCBoYXNCZWVuUmVzY2hlZHVsZWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5oYW5kbGVEaXNwbGF5UmVm
cmVzaE1vbml0b3JVcGRhdGUoaGFzQmVlblJlc2NoZWR1bGVkKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0JiBtX2xheWVyVHJlZUhvc3Q7Ci0g
ICAgfTsKLQotICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnQoKTsKLQotICAgIC8vIENvbXBvc2l0
aW5nQ29vcmRpbmF0b3I6OkNsaWVudAotICAgIHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBjb21taXRTY2VuZVN0
YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpIG92ZXJyaWRlOwot
Ci0jaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVz
aE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIG92ZXJyaWRlOwotI2VuZGlmCi0K
LSAgICAvLyBBY2NlbGVyYXRlZFN1cmZhY2U6OkNsaWVudAotICAgIHZvaWQgZnJhbWVDb21wbGV0
ZSgpIG92ZXJyaWRlOwotCi0gICAgdWludDY0X3QgbmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBv
c2l0aW5nKCk7Ci0gICAgdm9pZCBkaWREZXN0cm95R0xDb250ZXh0KCk7Ci0gICAgdm9pZCB3aWxs
UmVuZGVyRnJhbWUoKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7Ci0gICAgdm9pZCByZXF1
ZXN0RGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKCk7Ci0gICAgdm9pZCBoYW5kbGVEaXNwbGF5
UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9vbCk7Ci0KLSAgICBlbnVtIGNsYXNzIERpc2NhcmRhYmxl
U3luY0FjdGlvbnMgewotICAgICAgICBVcGRhdGVTaXplID0gMSA8PCAxLAotICAgICAgICBVcGRh
dGVWaWV3cG9ydCA9IDEgPDwgMiwKLSAgICAgICAgVXBkYXRlU2NhbGUgPSAxIDw8IDMKLSAgICB9
OwotCi0gICAgQ29tcG9zaXRvckNsaWVudCBtX2NvbXBvc2l0b3JDbGllbnQ7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEFjY2VsZXJhdGVkU3VyZmFjZT4gbV9zdXJmYWNlOwotICAgIFJlZlB0cjxUaHJl
YWRlZENvbXBvc2l0b3I+IG1fY29tcG9zaXRvcjsKLSAgICBTaW1wbGVWaWV3cG9ydENvbnRyb2xs
ZXIgbV92aWV3cG9ydENvbnRyb2xsZXI7Ci0gICAgZmxvYXQgbV9sYXN0UGFnZVNjYWxlRmFjdG9y
IHsgMSB9OwotICAgIFdlYkNvcmU6OkludFBvaW50IG1fbGFzdFNjcm9sbFBvc2l0aW9uOwotICAg
IGJvb2wgbV9pc0Rpc2NhcmRhYmxlIHsgZmFsc2UgfTsKLSAgICBPcHRpb25TZXQ8RGlzY2FyZGFi
bGVTeW5jQWN0aW9ucz4gbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFE
RUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmNwcAppbmRleCA0NGViMmRiNjY5OC4uNjNkNTE1YWU5MGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcApAQCAt
NjEsNyArNjEsNiBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6c2V0TmVlZHNEaXNwbGF5KCkKIHsK
ICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgIEFTU0VSVChtX2RpcnR5UmVnaW9u
LmlzRW1wdHkoKSk7Ci0gICAgICAgIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNldE5lZWRzRGlz
cGxheSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03Miw3ICs3MSw2IEBAIHZvaWQg
RHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgIEFTU0VSVChtX2RpcnR5
UmVnaW9uLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3ZmIwYzZjYmIuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVS
KQotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTX1RIUkVBREVEKQotI2luY2x1ZGUgIlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQ
YWdlJiB3ZWJQYWdlKQotewotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkK
LSAgICByZXR1cm4gVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZSh3ZWJQ
YWdlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHdlYlBhZ2UpOwotICAgIHJldHVybiBudWxs
cHRyOwotI2VuZGlmCi19Ci0KLUxheWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3QoV2ViUGFnZSYg
d2ViUGFnZSkKLSAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotewotfQotCi1MYXllclRyZWVIb3N0
Ojp+TGF5ZXJUcmVlSG9zdCgpCi17Ci0gICAgQVNTRVJUKCFtX2lzVmFsaWQpOwotfQotCi12b2lk
IExheWVyVHJlZUhvc3Q6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVy
Rmx1c2hpbmdFbmFibGVkKQotewotICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxl
ZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKLQotICAgIGlm
IChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgewotICAgICAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbmNlbFBlbmRpbmdMYXll
ckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdDo6cGF1c2VSZW5kZXJpbmcoKQotewot
ICAgIG1faXNTdXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIExheWVyVHJlZUhvc3Q6OnJlc3Vt
ZVJlbmRlcmluZygpCi17Ci0gICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwotICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQotewot
ICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1faXNWYWxpZCA9IGZhbHNlOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykg
fHwgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2Mz
OTgyOTllNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlSG9zdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIExheWVyVHJlZUhvc3RfaAotI2RlZmluZSBMYXllclRyZWVI
b3N0X2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQ
UEVSKQotCi0jaW5jbHVkZSAiQ2FsbGJhY2tJRC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRl
eHQuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1u
YW1lc3BhY2UgSVBDIHsKLWNsYXNzIENvbm5lY3Rpb247Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgR3JhcGhpY3NMYXllcjsK
LWNsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5OwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
U19USFJFQURFRCkKLXN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7Ci0jZW5kaWYKLX0KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIExheWVyVHJlZUhvc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclRyZWVIb3N0PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZlB0cjxMYXllclRyZWVIb3N0PiBjcmVhdGUoV2ViUGFnZSYpOwotICAgIHZpcnR1YWwgfkxh
eWVyVHJlZUhvc3QoKTsKLQotICAgIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0KLSAgICB2b2lkIHNl
dExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldFNob3VsZE5v
dGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2gpIHsgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3RpZnlB
ZnRlclNjaGVkdWxlZExheWVyRmx1c2g7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxh
eWVyRmx1c2goKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNo
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoKSB7
IH07Ci0gICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5
SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIHNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9Owot
ICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGZv
cmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkgPSAw
OwotCi0gICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7Ci0gICAgdmlydHVhbCB2b2lk
IHJlc3VtZVJlbmRlcmluZygpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
RmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0KLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi0gICAgdmlydHVhbCB2b2lkIGNv
bnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIHsgfTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0QXR0
cmlidXRlcyYmKSB7IH07Ci0jZW5kaWYKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldElzRGlzY2FyZGFibGUoYm9vbCkgeyB9OwotI2VuZGlmCi0KLSNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKEdUSykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmF0aXZl
U3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KSB7IH07Ci0jZW5kaWYKLQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIHZp
cnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSA9IDA7Ci0jZW5kaWYK
LQotI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAg
dmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNw
bGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIHsgcmV0dXJuIG51
bGxwdHI7IH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldFZpZXdPdmVybGF5Um9vdExh
eWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKSB7IG1fdmll
d092ZXJsYXlSb290TGF5ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXllcjsgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdChXZWJQYWdlJik7Ci0KLSAgICBXZWJQYWdlJiBt
X3dlYlBhZ2U7Ci0gICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Ci0gICAg
Ym9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCB7IHRydWUgfTsKLSAgICBib29sIG1f
bm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNT
dXNwZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1ZhbGlkIHsgdHJ1ZSB9OwotICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmlld092ZXJsYXlSb290TGF5ZXIgeyBudWxscHRyIH07
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQotCi0jZW5kaWYgLy8gTGF5ZXJUcmVl
SG9zdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363217</attachid>
            <date>2019-02-28 04:26:22 -0800</date>
            <delta_ts>2019-02-28 04:36:51 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk2-layer-tree-host.diff</filename>
            <type>text/plain</type>
            <size>62596</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggODc1ZTQxOWE2YjUuLjg2ZGJjOTBjNWNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDY0IEBACisyMDE5LTAyLTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbQ29vcmRpbmF0ZWRHcmFwaGljc10gVW5pZnkgYWxsIExheWVyVHJl
ZUhvc3QgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk1MDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgxb1hbiBEb2JlcsWhZWsuCisKKyAg
ICAgICAgVGhlcmUncyBubyByZWFzb24gdG8gaGF2ZSAzIGNsYXNzZXMsIHNpbmNlIGN1cnJlbnRs
eSBMYXllclRyZWVIb3N0IGlzIG9ubHkgdXNlZCBieSBjb29yZGluYXRlZCBncmFwaGljcyBiYXNl
ZAorICAgICAgICBwb3J0cy4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmV4aXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZU5vdyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9U
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAuCisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0Ojp+TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNl
dExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmZvcmNl
UmVwYWludEFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENo
YW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb250ZW50c1NpemVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxh
eVJlZnJlc2hNb25pdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkRmx1
c2hSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb21taXRTY2Vu
ZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZnJhbWVDb21wbGV0ZSk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6Om5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JD
b21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmRpZERlc3Ryb3lH
TENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojp3aWxsUmVuZGVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpkaWRSZW5kZXJGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0
b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5
UmVmcmVzaE1vbml0b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpy
ZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNldE5lZWRzRGlzcGxheUlu
UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmg6IFJl
bW92ZWQuCisgICAgICAgICogV2ViUGFnZS93aW4vTGF5ZXJUcmVlSG9zdC5oOiBBZGRlZC4KKwog
MjAxOS0wMi0yOCAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtXZWIgR1BVXSBFbmFibGUgV2ViIEdQVSBvbmx5IG9uIDY0LWJpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3Iv
VGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkRGlzcGxheVJlZnJl
c2hNb25pdG9yLmgKaW5kZXggNDg3ZTY2MDc0ZjIuLjViMjJiYmZmYTA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRv
ci9UaHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkRGlzcGxh
eVJlZnJlc2hNb25pdG9yLmgKQEAgLTI1LDkgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpICYmIFVTRShSRVFVRVNUX0FOSU1B
VElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlS
ZWZyZXNoTW9uaXRvci5oPgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVE
KSAmJiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQogI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQK
aW5kZXggZWExYmY5N2Y4OTMuLjkxZjhjNDllMzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKQEAgLTQw
MywxMiArNDAzLDEwIEBAIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZFN1cmZhY2UuY3BwCi1X
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9W
aWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAotV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAot
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwCitXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBs
LmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0IGIvU291cmNl
L1dlYktpdC9Tb3VyY2VzV1BFLnR4dAppbmRleCA5Yzk1OGJmM2UwMi4uNTQwNWYyNDNmYzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysrIGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzV1BFLnR4dApAQCAtMjQzLDExICsyNDMsOSBAQCBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L3dwZS9XZWJQb3B1cE1lbnVXUEUuY3BwCiAKIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2Nl
bGVyYXRlZERyYXdpbmdBcmVhLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3Vy
ZmFjZS5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNw
cAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCitXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3N0cmVhbWVyL1dlYlBhZ2VHU3RyZWFtZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKaW5k
ZXggMzA0ZGI4ODg1MTYuLjY0NzViZTAxOTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcApAQCAt
NjYsMjQgKzY2LDYgQEAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6QWNjZWxlcmF0ZWREcmF3aW5n
QXJlYShXZWJQYWdlJiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlQ3IKICAgICBtX3dlYlBhZ2UuY29y
ZVBhZ2UoKS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IocGFyYW1ldGVycy5kZXZpY2VTY2FsZUZhY3Rv
cik7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5KCkK
LXsKLSAgICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29t
cG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoKTsKLX0KLQotdm9pZCBBY2NlbGVyYXRlZERyYXdp
bmdBcmVhOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRl
ZENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QocmVjdCk7Ci19Ci0KIHZvaWQgQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhKQogewogICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKQEAgLTM0
MywxOSArMzI1LDE5IEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShHcmFwaGljc0xheWVyKiBncmFwCiAKICAgICBBU1NFUlQoIW1f
bGF5ZXJUcmVlSG9zdCk7CiAgICAgaWYgKG1fcHJldmlvdXNMYXllclRyZWVIb3N0KSB7Ci0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBXVEZN
b3ZlKG1fcHJldmlvdXNMYXllclRyZWVIb3N0KTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXRJc0Rpc2NhcmRhYmxlKGZhbHNlKTsKICAgICAgICAgaWYgKCFtX2lzUGFpbnRpbmdTdXNwZW5k
ZWQpCiAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJlc3VtZVJlbmRlcmluZygpOwogICAg
ICAgICBpZiAoIW1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbikKICAgICAgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUpOworICAgIH0gZWxz
ZSB7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorICAgICAgICBtX2xh
eWVyVHJlZUhvc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPExheWVyVHJlZUhvc3Q+KG1fd2ViUGFnZSk7
CiAjZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0ID0gbnVsbHB0cjsKICNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fbGF5ZXJU
cmVlSG9zdCA9IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShtX3dlYlBhZ2UpOwotCisgICAgICAgIAog
ICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAt
MzkzLDE2ICszNzUsMTIgQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpleGl0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGVOb3coKQogICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3Rv
cCgpOwogICAgIG1fd2FudHNUb0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSA9IGZhbHNl
OwogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIEFTU0VSVChtX2xheWVyVHJl
ZUhvc3QpOwogICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0ID0gV1RGTW92ZShtX2xheWVyVHJl
ZUhvc3QpOwogICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5zZXRJc0Rpc2NhcmRhYmxlKHRy
dWUpOwogICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5wYXVzZVJlbmRlcmluZygpOwogICAg
IG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQo
ZmFsc2UpOwogICAgIG1fZGlzY2FyZFByZXZpb3VzTGF5ZXJUcmVlSG9zdFRpbWVyLnN0YXJ0T25l
U2hvdCg1X3MpOwotI2Vsc2UKLSAgICBtX2xheWVyVHJlZUhvc3QgPSBudWxscHRyOwotI2VuZGlm
CiB9CiAKIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZGlzY2FyZFByZXZpb3VzTGF5ZXJU
cmVlSG9zdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9B
Y2NlbGVyYXRlZERyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmgKaW5kZXggZjdlZjlmNmY1MzUuLjQzMzcxNzBhNzhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRl
ZERyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYS5oCkBAIC00MCw4ICs0MCw4IEBAIHB1YmxpYzoKIAogcHJvdGVj
dGVkOgogICAgIC8vIERyYXdpbmdBcmVhCi0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVycmlkZSB7IH07
CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IG92ZXJyaWRlIHsgfTsKICAgICB2b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBz
Y3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wpIG92ZXJyaWRlOwogICAg
IGJvb2wgbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
bGF5ZXJUcmVlU3RhdGVJc0Zyb3plbjsgfQpAQCAtMTI4LDkgKzEyOCw5IEBAIHByb3RlY3RlZDoK
ICAgICBSdW5Mb29wOjpUaW1lcjxBY2NlbGVyYXRlZERyYXdpbmdBcmVhPiBtX2V4aXRDb21wb3Np
dGluZ1RpbWVyOwogCiAgICAgLy8gVGhlIGxheWVyIHRyZWUgaG9zdCB0aGF0IGhhbmRsZXMgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcuCi0gICAgUmVmUHRyPExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJU
cmVlSG9zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVI
b3N0OwogCi0gICAgUmVmUHRyPExheWVyVHJlZUhvc3Q+IG1fcHJldmlvdXNMYXllclRyZWVIb3N0
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXllclRyZWVIb3N0PiBtX3ByZXZpb3VzTGF5ZXJUcmVl
SG9zdDsKICAgICBSdW5Mb29wOjpUaW1lcjxBY2NlbGVyYXRlZERyYXdpbmdBcmVhPiBtX2Rpc2Nh
cmRQcmV2aW91c0xheWVyVHJlZUhvc3RUaW1lcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOTNiN2EyZGRlNzIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
I2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgotCi0jaW5jbHVkZSAiRHJhd2lu
Z0FyZWEuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVz
c2FnZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJvbGxlci5oPgot
Ci0jaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkKLSNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291
cmNlUHJpb3JpdHkuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1SZWY8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdlJiB3ZWJQYWdlKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKSk7Ci19Ci0KLUNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpCi17Ci19
Ci0KLUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdl
YlBhZ2UmIHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0gICAgLCBtX2Nv
b3JkaW5hdG9yKHdlYlBhZ2UuY29yZVBhZ2UoKSwgKnRoaXMpCi0gICAgLCBtX2xheWVyRmx1c2hU
aW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Omxh
eWVyRmx1c2hUaW1lckZpcmVkKQotewotI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCi0gICAgbV9s
YXllckZsdXNoVGltZXIuc2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpMYXllckZs
dXNoVGltZXIpOwotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnNldE5hbWUoIltXZWJLaXRdIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdCIpOwotI2VuZGlmCi0gICAgbV9jb29yZGluYXRvci5jcmVhdGVS
b290TGF5ZXIobV93ZWJQYWdlLnNpemUoKSk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCgp
Ci17Ci0gICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpIHsKLSAgICAgICAgbV9zY2hl
ZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1f
bGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQotewotICAgIG1fbGF5ZXJG
bHVzaFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNl
dFZpZXdPdmVybGF5Um9vdExheWVyKEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVy
KQotewotICAgIExheWVyVHJlZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKHZpZXdPdmVy
bGF5Um9vdExheWVyKTsKLSAgICBtX2Nvb3JkaW5hdG9yLnNldFZpZXdPdmVybGF5Um9vdExheWVy
KHZpZXdPdmVybGF5Um9vdExheWVyKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIp
Ci17Ci0gICAgbV9jb29yZGluYXRvci5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xh
eWVyKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQot
ewotICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLmlu
dmFsaWRhdGUoKTsKLSAgICBMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKQotewotICAgIC8vIFRoaXMg
aXMgbmVjZXNzYXJ5IGZvciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNl
IHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5LgotICAg
IC8vIEluc3RlYWQgd2UgYXJlIGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBz
dGlsbCB3YW50IHRvIGhhdmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcg
ZXhlY3V0ZWQuCi0gICAgbV9jb29yZGluYXRvci5zeW5jRGlzcGxheVN0YXRlKCk7Ci0KLSAgICAv
LyBXZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUgZm9yY2Vk
IHBhaW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgotICAgIC8vIFRoaXMg
aXMgYWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RDQS4KLSAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKLQotICAgIGlmIChtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2Nvb3JkaW5hdG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotfQotCi1ib29s
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCBj
YWxsYmFja0lEKQotewotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotCi0gICAgLy8gV2Ugd2Fu
dCBhIGNsZWFuIHJlcGFpbnQsIG1lYW5pbmcgdGhhdCBpZiB3ZSdyZSBjdXJyZW50bHkgd2FpdGlu
ZyBmb3IgdGhlIHJlbmRlcmVyCi0gICAgLy8gdG8gZmluaXNoIGFuIHVwZGF0ZSwgd2UnbGwgaGF2
ZSB0byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoIHdoZW4gaXQncyBkb25lLgotICAgIEFTU0VSVCgh
bV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKTsKLSAgICBtX2ZvcmNlUmVwYWludEFzeW5j
LmNhbGxiYWNrSUQgPSBPcHRpb25hbENhbGxiYWNrSUQoY2FsbGJhY2tJRCk7Ci0gICAgbV9mb3Jj
ZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBtX3NjaGVkdWxlZFdoaWxlV2FpdGluZ0Zv
clJlbmRlcmVyOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQotewotICAgIG1f
Y29vcmRpbmF0b3Iuc2l6ZURpZENoYW5nZShuZXdTaXplKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1
c2goKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250
ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fY29vcmRpbmF0b3Iuc2V0
VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0KTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZShib29sIGZv
cmNlUmVwYWludCkKLXsKLSAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7Ci0gICAg
Ym9vbCBzY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHN0ZDo6ZXhjaGFuZ2UobV9z
Y2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciwgZmFsc2UpOwotICAgIG1fY29vcmRpbmF0
b3IucmVuZGVyTmV4dEZyYW1lKCk7Ci0KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxs
YmFja0lEKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhc3luY2hyb25vdXMgZm9yY2UtcmVwYWludCBu
ZWVkcyBhIHNlcGFyYXRlIGZyZXNoIGZsdXNoLCBpdCB3YXMgZHVlIHRvCi0gICAgICAgIC8vIHRo
ZSBmb3JjZS1yZXBhaW50IHJlcXVlc3QgYmVpbmcgcmVnaXN0ZXJlZCB3aGlsZSBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Qgd2FzCi0gICAgICAgIC8vIHdhaXRpbmcgZm9yIHRoZSByZW5kZXJlciB0
byBmaW5pc2ggYW4gdXBkYXRlLgotICAgICAgICBBU1NFUlQoIW1fZm9yY2VSZXBhaW50QXN5bmMu
bmVlZHNGcmVzaEZsdXNoIHx8IHNjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyKTsKLQot
ICAgICAgICAvLyBFeGVjdXRlIHRoZSBjYWxsYmFjayBpZiBhbm90aGVyIGxheWVyIGZsdXNoIGFu
ZCB0aGUgc3Vic2VxdWVudCBzdGF0ZSB1cGRhdGUKLSAgICAgICAgLy8gYXJlbid0IG5lZWRlZC4g
SWYgdGhleSBhcmUsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhpcyBmdW5j
dGlvbgotICAgICAgICAvLyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG5leHQgdXBkYXRlLgotICAgICAg
ICBpZiAoIW1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoKSB7Ci0gICAgICAgICAg
ICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9m
b3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lELmNhbGxiYWNrSUQoKSkpOwotICAgICAgICAgICAg
bV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEID0gT3B0aW9uYWxDYWxsYmFja0lEKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIg
fHwgbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSB8fCBmb3JjZVJlcGFpbnQpIHsKLSAgICAg
ICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOwotICAgICAgICBpZiAoZm9yY2VSZXBhaW50KQot
ICAgICAgICAgICAgbV9jb29yZGluYXRvci5mb3JjZUZyYW1lU3luYygpOwotICAgICAgICBsYXll
ckZsdXNoVGltZXJGaXJlZCgpOwotICAgIH0KLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmRpZEZsdXNoUm9vdExheWVyKGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRS
ZWN0KQotewotICAgIC8vIEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRpdmUgb3ZlcmxheSByb290IGxh
eWVyIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NMYXllciB0cmVl
LCB3ZSBuZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgotICAgIGlmIChtX3ZpZXdPdmVybGF5Um9v
dExheWVyKQotICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGUodmlzaWJsZUNvbnRlbnRSZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAobV9pc1N1c3BlbmRlZCB8
fCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Nvb3Jk
aW5hdG9yLnN5bmNEaXNwbGF5U3RhdGUoKTsKLSAgICBtX3dlYlBhZ2UuZmx1c2hQZW5kaW5nRWRp
dG9yU3RhdGVVcGRhdGUoKTsKLSAgICBtX3dlYlBhZ2Uud2lsbERpc3BsYXlQYWdlKCk7Ci0KLSAg
ICBpZiAoIW1faXNWYWxpZCB8fCAhbV9jb29yZGluYXRvci5yb290Q29tcG9zaXRpbmdMYXllcigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiBhIGZvcmNlLXJlcGFpbnQgY2FsbGJhY2sg
d2FzIHJlZ2lzdGVyZWQsIHdlIHNob3VsZCBmb3JjZSBhICdmcmFtZSBzeW5jJyB0aGF0Ci0gICAg
Ly8gd2lsbCBndWFyYW50ZWUgdXMgYSBjYWxsIHRvIHJlbmRlck5leHRGcmFtZSgpIG9uY2UgdGhl
IHVwZGF0ZSBpcyBjb21wbGV0ZS4KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFj
a0lEKQotICAgICAgICBtX2Nvb3JkaW5hdG9yLmZvcmNlRnJhbWVTeW5jKCk7Ci0KLSAgICBib29s
IGRpZFN5bmMgPSBtX2Nvb3JkaW5hdG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotCi0g
ICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoICYmIGRpZFN5bmMpIHsKLSAg
ICAgICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVhKCktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7
Ci0gICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7Ci0gICAg
fQotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2NlbmVTdGF0ZShj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQotewotICAgIG1faXNXYWl0aW5n
Rm9yUmVuZGVyZXIgPSB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Zmx1c2hMYXllcnNBbmRGb3JjZVJlcGFpbnQoKQotewotICAgIG1fY29vcmRpbmF0b3IuZm9yY2VG
cmFtZVN5bmMoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCi17Ci0g
ICAgbV9jb29yZGluYXRvci5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKLSAgICBt
X3dlYlBhZ2UuY29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRGV2
aWNlU2NhbGVGYWN0b3IoKTsKLX0KLQotR3JhcGhpY3NMYXllckZhY3RvcnkqIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQotewotICAgIHJldHVybiAmbV9j
b29yZGluYXRvcjsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxl
QW5pbWF0aW9uKCkKLXsKLSAgICBpZiAobV9pc1dhaXRpbmdGb3JSZW5kZXJlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIG1fbGF5ZXJGbHVzaFRp
bWVyLnN0YXJ0T25lU2hvdCgxX3MgKiBtX2Nvb3JkaW5hdG9yLm5leHRBbmltYXRpb25TZXJ2aWNl
VGltZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYgLy8gVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOTc0
NTMxNTRjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyAvZGV2
L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gICAgQ29weXJpZ2h0IChD
KSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RfaAotI2RlZmluZSBDb29yZGluYXRlZExheWVyVHJlZUhvc3RfaAotCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiQ29tcG9zaXRpbmdDb29yZGluYXRvci5o
IgotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJPcHRpb25hbENhbGxiYWNr
SUQuaCIKLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBM
YXllclRyZWVIb3N0LCBwdWJsaWMgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50Ci17Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IGNyZWF0ZShX
ZWJQYWdlJik7Ci0gICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KCk7Ci0KLXBy
b3RlY3RlZDoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYp
OwotCi0gICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKSBvdmVycmlkZTsKLSAgICB2b2lkIGNh
bmNlbFBlbmRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9z
aXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBp
bnZhbGlkYXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZvcmNlUmVwYWludCgpIG92ZXJyaWRl
OwotICAgIGJvb2wgZm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKTsKLSAgICB2b2lkIHJlbmRlck5leHRGcmFtZShib29sKTsKLQotICAgIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRW
aWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0K
LSAgICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQKLSAgICB2b2lkIGRpZEZsdXNo
Um9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KSBv
dmVycmlkZTsKLSAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKSBvdmVycmlkZSB7IHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOyB9OwotICAgIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShjb25zdCBXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmx1
c2hMYXllcnNBbmRGb3JjZVJlcGFpbnQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGxheWVyRmx1
c2hUaW1lckZpcmVkKCk7Ci0KLSAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIG1fY29vcmRpbmF0
b3I7Ci0gICAgYm9vbCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyIHsgZmFsc2UgfTsKLSAgICBib29s
IG1fc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIgeyBmYWxzZSB9OwotICAgIHN0cnVj
dCB7Ci0gICAgICAgIE9wdGlvbmFsQ2FsbGJhY2tJRCBjYWxsYmFja0lEOwotICAgICAgICBib29s
IG5lZWRzRnJlc2hGbHVzaCB7IGZhbHNlIH07Ci0gICAgfSBtX2ZvcmNlUmVwYWludEFzeW5jOwot
ICAgIFJ1bkxvb3A6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9sYXllckZsdXNo
VGltZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9z
dC5jcHAKc2ltaWxhcml0eSBpbmRleCA1MyUKcmVuYW1lIGZyb20gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMTAwZmM2NGE2MTku
LmVhYTA4ZDdhN2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBJ
Z2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgSWdhbGlhIFMuTC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTQgKzI3LDIwIEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgogCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTX1RIUkVBREVEKQogCi0jaW5jbHVkZSAiQWNjZWxlcmF0ZWRTdXJmYWNlLmgiCisj
aW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAi
V2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5
Q29udHJvbGxlci5oPgorCisjaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkKKyNpbmNsdWRlIDx3dGYv
Z2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDYsMjEgKzUyLDIxIEBAIHN0YXRpYyBj
b25zdCBQbGF0Zm9ybURpc3BsYXlJRCBjb21wb3NpdGluZ0Rpc3BsYXlJRCA9IDE7CiBzdGF0aWMg
Y29uc3QgUGxhdGZvcm1EaXNwbGF5SUQgY29tcG9zaXRpbmdEaXNwbGF5SUQgPSBwcmltYXJ5RGlz
cGxheUlEOwogI2VuZGlmCiAKLVJlZjxUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4g
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdlJiB3ZWJQYWdl
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0KHdlYlBhZ2UpKTsKLX0KLQotVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
On5UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpCi17Ci19Ci0KLVRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChX
ZWJQYWdlJiB3ZWJQYWdlKQotICAgIDogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KHdlYlBhZ2Up
CitMYXllclRyZWVIb3N0OjpMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2UpCisgICAgOiBt
X3dlYlBhZ2Uod2ViUGFnZSkKKyAgICAsIG1fY29vcmRpbmF0b3Iod2ViUGFnZS5jb3JlUGFnZSgp
LCAqdGhpcykKICAgICAsIG1fY29tcG9zaXRvckNsaWVudCgqdGhpcykKICAgICAsIG1fc3VyZmFj
ZShBY2NlbGVyYXRlZFN1cmZhY2U6OmNyZWF0ZSh3ZWJQYWdlLCAqdGhpcykpCiAgICAgLCBtX3Zp
ZXdwb3J0Q29udHJvbGxlcih3ZWJQYWdlLnNpemUoKSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVy
KFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkxheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZp
cmVkKQogeworI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCisgICAgbV9sYXllckZsdXNoVGltZXIu
c2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpMYXllckZsdXNoVGltZXIpOworICAg
IG1fbGF5ZXJGbHVzaFRpbWVyLnNldE5hbWUoIltXZWJLaXRdIExheWVyVHJlZUhvc3QiKTsKKyNl
bmRpZgorICAgIG1fY29vcmRpbmF0b3IuY3JlYXRlUm9vdExheWVyKG1fd2ViUGFnZS5zaXplKCkp
OworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworCiAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKSkgewogICAgICAgICBhdXRvIGNvbnRlbnRz
U2l6ZSA9IGZyYW1lVmlldy0+Y29udGVudHNTaXplKCk7CiAgICAgICAgIGlmICghY29udGVudHNT
aXplLmlzRW1wdHkoKSkKQEAgLTg3LDcwICs5MywxMDEgQEAgVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdl
YlAKICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKK0xheWVyVHJlZUhvc3Q6On5MYXllclRyZWVI
b3N0KCkKIHsKLSAgICBtX2NvbXBvc2l0b3ItPmludmFsaWRhdGUoKTsKLSAgICBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKTsKLSAgICBtX3N1cmZhY2UgPSBudWxscHRyOwor
ICAgIEFTU0VSVCghbV9pc1ZhbGlkKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJG
bHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCiB7Ci0gICAg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKTsKLSAgICBtX2NvbXBvc2l0
b3ItPmZvcmNlUmVwYWludCgpOworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxl
ZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKKworICAgIGlm
IChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgeworICAgICAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbmNlbFBlbmRpbmdMYXll
ckZsdXNoKCk7CiB9CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZy
YW1lQ29tcGxldGUoKQordm9pZCBMYXllclRyZWVIb3N0OjpzZXRTaG91bGROb3RpZnlBZnRlck5l
eHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
KQogewotICAgIG1fY29tcG9zaXRvci0+ZnJhbWVDb21wbGV0ZSgpOworICAgIG1fbm90aWZ5QWZ0
ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwog
fQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZXF1ZXN0RGlzcGxh
eVJlZnJlc2hNb25pdG9yVXBkYXRlKCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVMYXll
ckZsdXNoKCkKIHsKLSAgICAvLyBGbHVzaCBsYXllcnMgdG8gY2F1c2UgYSByZXBhaW50LiBJZiBt
X2lzV2FpdGluZ0ZvclJlbmRlcmVyIHdhcyB0cnVlIGF0IHRoaXMgcG9pbnQsIHRoZSBsYXllcgot
ICAgIC8vIGZsdXNoIHdvbid0IGRvIGFueXRoaW5nLCBidXQgdGhhdCBtZWFucyB0aGVyZSdzIGEg
cGFpbnRpbmcgb25nb2luZyB0aGF0IHdpbGwgc2VuZCB0aGUKLSAgICAvLyBkaXNwbGF5IHJlZnJl
c2ggbm90aWZpY2F0aW9uIHdoZW4gaXQncyBkb25lLgotICAgIGZsdXNoTGF5ZXJzQW5kRm9yY2VS
ZXBhaW50KCk7CisgICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpIHsKKyAgICAgICAg
bV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi12b2lkIFRocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JV
cGRhdGUoYm9vbCBoYXNCZWVuUmVzY2hlZHVsZWQpCit2b2lkIExheWVyVHJlZUhvc3Q6OmNhbmNl
bFBlbmRpbmdMYXllckZsdXNoKCkKIHsKLSAgICAvLyBDYWxsIHJlbmRlck5leHRGcmFtZS4gSWYg
aGFzQmVlblJlc2NoZWR1bGVkIGlzIHRydWUsIHRoZSBsYXllciBmbHVzaCB3aWxsIGZvcmNlIGEg
cmVwYWludAotICAgIC8vIHRoYXQgd2lsbCBjYXVzZSB0aGUgZGlzcGxheSByZWZyZXNoIG5vdGlm
aWNhdGlvbiB0byBjb21lLgotICAgIHJlbmRlck5leHRGcmFtZShoYXNCZWVuUmVzY2hlZHVsZWQp
OwotICAgIG1fY29tcG9zaXRvci0+aGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKCk7
CisgICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOwogfQogCi11aW50NjRfdCBUaHJlYWRlZENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5n
KCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKQogewotICAgIGlm
ICghbV9zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJ
RDsKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKQorICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3N1cmZhY2UtPmluaXRpYWxpemUoKTsKLSAgICByZXR1cm4g
bV9zdXJmYWNlLT53aW5kb3coKTsKKyAgICBtX2Nvb3JkaW5hdG9yLnN5bmNEaXNwbGF5U3RhdGUo
KTsKKyAgICBtX3dlYlBhZ2UuZmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUoKTsKKyAgICBt
X3dlYlBhZ2Uud2lsbERpc3BsYXlQYWdlKCk7CisKKyAgICBpZiAoIW1faXNWYWxpZCB8fCAhbV9j
b29yZGluYXRvci5yb290Q29tcG9zaXRpbmdMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBJZiBhIGZvcmNlLXJlcGFpbnQgY2FsbGJhY2sgd2FzIHJlZ2lzdGVyZWQsIHdlIHNob3Vs
ZCBmb3JjZSBhICdmcmFtZSBzeW5jJyB0aGF0CisgICAgLy8gd2lsbCBndWFyYW50ZWUgdXMgYSBj
YWxsIHRvIHJlbmRlck5leHRGcmFtZSgpIG9uY2UgdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KKyAg
ICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKQorICAgICAgICBtX2Nvb3JkaW5h
dG9yLmZvcmNlRnJhbWVTeW5jKCk7CisKKyAgICBib29sIGRpZFN5bmMgPSBtX2Nvb3JkaW5hdG9y
LmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworCisgICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hl
ZHVsZWRMYXllckZsdXNoICYmIGRpZFN5bmMpIHsKKyAgICAgICAgbV93ZWJQYWdlLmRyYXdpbmdB
cmVhKCktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7CisgICAgICAgIG1fbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7CisgICAgfQogfQogCi12b2lkIFRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWREZXN0cm95R0xDb250ZXh0KCkKK3ZvaWQgTGF5ZXJU
cmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NM
YXllcikKIHsKLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICBtX3N1cmZhY2UtPmZpbmFsaXpl
KCk7CisgICAgbV9jb29yZGluYXRvci5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xh
eWVyKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6d2lsbFJl
bmRlckZyYW1lKCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld092ZXJsYXlSb290TGF5ZXIo
R3JhcGhpY3NMYXllciogdmlld092ZXJsYXlSb290TGF5ZXIpCiB7Ci0gICAgaWYgKG1fc3VyZmFj
ZSkKLSAgICAgICAgbV9zdXJmYWNlLT53aWxsUmVuZGVyRnJhbWUoKTsKKyAgICBtX3ZpZXdPdmVy
bGF5Um9vdExheWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgbV9jb29yZGluYXRvci5z
ZXRWaWV3T3ZlcmxheVJvb3RMYXllcih2aWV3T3ZlcmxheVJvb3RMYXllcik7CiB9CiAKLXZvaWQg
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFJlbmRlckZyYW1lKCkKK3ZvaWQg
TGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAg
ICAgbV9zdXJmYWNlLT5kaWRSZW5kZXJGcmFtZSgpOworICAgIEFTU0VSVChtX2lzVmFsaWQpOwor
ICAgIG1faXNWYWxpZCA9IGZhbHNlOworCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsK
KworICAgIG1fY29vcmRpbmF0b3IuaW52YWxpZGF0ZSgpOworICAgIG1fY29tcG9zaXRvci0+aW52
YWxpZGF0ZSgpOworICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7CiB9CiAKLXZvaWQgVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25z
dCBJbnRSZWN0JiByZWN0KQordm9pZCBMYXllclRyZWVIb3N0OjpzY3JvbGxOb25Db21wb3NpdGVk
Q29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IG1fd2ViUGFnZS5tYWluRnJhbWVWaWV3KCk7CisgICAgYXV0byogZnJhbWVWaWV3ID0gbV93
ZWJQYWdlLm1haW5GcmFtZVZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldyB8fCAhZnJhbWVWaWV3
LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNjEsMzAgKzE5
OCwzMyBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY3JvbGxOb25D
b21wb3NpdGVkQ29udGVudHMoY29uc3QgSW50UmVjdAogICAgICAgICBkaWRDaGFuZ2VWaWV3cG9y
dCgpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb250ZW50
c1NpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit2b2lkIExheWVyVHJlZUhvc3Q6
OmZvcmNlUmVwYWludCgpCiB7Ci0gICAgbV92aWV3cG9ydENvbnRyb2xsZXIuZGlkQ2hhbmdlQ29u
dGVudHNTaXplKG5ld1NpemUpOwotICAgIGlmIChtX2lzRGlzY2FyZGFibGUpCi0gICAgICAgIG1f
ZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5hZGQoRGlzY2FyZGFibGVTeW5jQWN0aW9uczo6VXBkYXRl
Vmlld3BvcnQpOwotICAgIGVsc2UKLSAgICAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKKyAgICAv
LyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcnVubmluZyBsYXlvdXQgdGVzdHMuIFNpbmNlIGluIHRo
aXMgY2FzZSB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGEgVUlQcm9jZXNzIHRvIHJlcGx5IG5pY2Vs
eS4KKyAgICAvLyBJbnN0ZWFkIHdlIGFyZSBqdXN0IHRyaWdnZXJpbmcgZm9yY2VSZXBhaW50LiBC
dXQgd2Ugc3RpbGwgd2FudCB0byBoYXZlIHRoZSBzY3JpcHRlZCBhbmltYXRpb24gY2FsbGJhY2tz
IGJlaW5nIGV4ZWN1dGVkLgorICAgIG1fY29vcmRpbmF0b3Iuc3luY0Rpc3BsYXlTdGF0ZSgpOwor
CisgICAgLy8gV2UgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhl
IGZvcmNlZCBwYWludCBtaWdodCBjYW5jZWwgYSBsYXRlciBleHBlY3RlZCBmbHVzaC4KKyAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKKworICAgIGlmICghbV9pc1dhaXRpbmdGb3JSZW5kZXJlcikK
KyAgICAgICAgbV9jb29yZGluYXRvci5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAgICBt
X2NvbXBvc2l0b3ItPmZvcmNlUmVwYWludCgpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQorYm9vbCBM
YXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7
Ci0gICAgaWYgKG1faXNEaXNjYXJkYWJsZSkgewotICAgICAgICBtX2Rpc2NhcmRhYmxlU3luY0Fj
dGlvbnMuYWRkKERpc2NhcmRhYmxlU3luY0FjdGlvbnM6OlVwZGF0ZVNjYWxlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3N1cmZhY2UgJiYgbV9zdXJmYWNlLT5ob3N0UmVz
aXplKG1fd2ViUGFnZS5zaXplKCkpKQotICAgICAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4
dElEID0gbV9zdXJmYWNlLT5zdXJmYWNlSUQoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
IAotICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkKCk7Ci0gICAgbV9jb21wb3NpdG9yLT5zZXRTY2FsZUZhY3RvcihtX3dlYlBhZ2UuZGV2
aWNlU2NhbGVGYWN0b3IoKSAqIG1fdmlld3BvcnRDb250cm9sbGVyLnBhZ2VTY2FsZUZhY3Rvcigp
KTsKKyAgICAvLyBXZSB3YW50IGEgY2xlYW4gcmVwYWludCwgbWVhbmluZyB0aGF0IGlmIHdlJ3Jl
IGN1cnJlbnRseSB3YWl0aW5nIGZvciB0aGUgcmVuZGVyZXIKKyAgICAvLyB0byBmaW5pc2ggYW4g
dXBkYXRlLCB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2ggd2hlbiBpdCdzIGRv
bmUuCisgICAgQVNTRVJUKCFtX2ZvcmNlUmVwYWludEFzeW5jLmNhbGxiYWNrSUQpOworICAgIG1f
Zm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCA9IE9wdGlvbmFsQ2FsbGJhY2tJRChjYWxsYmFj
a0lEKTsKKyAgICBtX2ZvcmNlUmVwYWludEFzeW5jLm5lZWRzRnJlc2hGbHVzaCA9IG1fc2NoZWR1
bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXI7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRT
aXplJiBzaXplKQogewogICAgIGlmIChtX2lzRGlzY2FyZGFibGUpIHsKICAgICAgICAgbV9kaXNj
YXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTaXpl
KTsKQEAgLTE5NSw3ICsyMzUsOSBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgaWYgKG1fc3VyZmFj
ZSAmJiBtX3N1cmZhY2UtPmhvc3RSZXNpemUoc2l6ZSkpCiAgICAgICAgIG1fbGF5ZXJUcmVlQ29u
dGV4dC5jb250ZXh0SUQgPSBtX3N1cmZhY2UtPnN1cmZhY2VJRCgpOwogCi0gICAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKHNpemUpOworICAgIG1fY29vcmRpbmF0b3Iu
c2l6ZURpZENoYW5nZShzaXplKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKwogICAgIG1f
dmlld3BvcnRDb250cm9sbGVyLmRpZENoYW5nZVZpZXdwb3J0U2l6ZShzaXplKTsKICAgICBJbnRT
aXplIHNjYWxlZFNpemUoc2l6ZSk7CiAgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3dlYlBhZ2UuZGV2
aWNlU2NhbGVGYWN0b3IoKSk7CkBAIC0yMDMsMjUgKzI0NSw0MSBAQCB2b2lkIFRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUp
CiAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFZpZXdwb3J0QXR0cmli
dXRlcyYmIGF0dHIpCit2b2lkIExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKCkKIHsKLSAg
ICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV1RGTW92
ZShhdHRyKSk7CisgICAgbV9pc1N1c3BlbmRlZCA9IHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdDo6cmVzdW1lUmVuZGVyaW5nKCkKK3sKKyAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7Cisg
ICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK0dyYXBoaWNzTGF5ZXJGYWN0b3J5KiBMYXll
clRyZWVIb3N0OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCit7CisgICAgcmV0dXJuICZtX2Nvb3Jk
aW5hdG9yOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmNvbnRlbnRzU2l6ZUNoYW5nZWQoY29u
c3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFu
Z2VDb250ZW50c1NpemUobmV3U2l6ZSk7CiAgICAgaWYgKG1faXNEaXNjYXJkYWJsZSkKICAgICAg
ICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpV
cGRhdGVWaWV3cG9ydCk7CiAgICAgZWxzZQogICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwog
fQogCi0jaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShYMTEpICYmICFVU0UoUkVESVJFQ1RF
RF9YQ09NUE9TSVRFX1dJTkRPVykKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCBoYW5kbGUp
Cit2b2lkIExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhWaWV3cG9y
dEF0dHJpYnV0ZXMmJiBhdHRyKQogewotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQg
PSBoYW5kbGU7Ci0gICAgbV9jb21wb3NpdG9yLT5zZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29t
cG9zaXRpbmcoaGFuZGxlKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBtX3ZpZXdw
b3J0Q29udHJvbGxlci5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV1RGTW92ZShhdHRyKSk7
CisgICAgaWYgKG1faXNEaXNjYXJkYWJsZSkKKyAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rp
b25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVWaWV3cG9ydCk7CisgICAgZWxz
ZQorICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQotI2VuZGlmCiAKLXZvaWQgVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0KCkKK3ZvaWQgTGF5
ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQoKQogewogICAgIEZsb2F0UmVjdCB2aXNpYmxl
UmVjdChtX3ZpZXdwb3J0Q29udHJvbGxlci52aXNpYmxlQ29udGVudHNSZWN0KCkpOwogICAgIGlm
ICh2aXNpYmxlUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzgsNyArMjk2LDggQEAgdm9pZCBUaHJlYWRl
ZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQoKQogICAgIGlmIChz
Y3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAgICAgICAgIHZp
c2libGVSZWN0LmV4cGFuZCgwLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKIAotICAgIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlUmVjdCk7Cisg
ICAgbV9jb29yZGluYXRvci5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVSZWN0KTsKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIAogICAgIGZsb2F0IHBhZ2VTY2FsZSA9IG1fdmlld3Bv
cnRDb250cm9sbGVyLnBhZ2VTY2FsZUZhY3RvcigpOwogICAgIEludFBvaW50IHNjcm9sbFBvc2l0
aW9uID0gcm91bmRlZEludFBvaW50KHZpc2libGVSZWN0LmxvY2F0aW9uKCkpOwpAQCAtMjU2LDEz
ICszMTUsNyBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRDaGFu
Z2VWaWV3cG9ydCgpCiAgICAgfQogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Ojpjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYg
c3RhdGUpCi17Ci0gICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRTY2VuZVN0YXRl
KHN0YXRlKTsKLSAgICBtX2NvbXBvc2l0b3ItPnVwZGF0ZVNjZW5lU3RhdGUoc3RhdGUpOwotfQot
Ci12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxl
KGJvb2wgZGlzY2FyZGFibGUpCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldElzRGlzY2FyZGFibGUo
Ym9vbCBkaXNjYXJkYWJsZSkKIHsKICAgICBtX2lzRGlzY2FyZGFibGUgPSBkaXNjYXJkYWJsZTsK
ICAgICBpZiAobV9pc0Rpc2NhcmRhYmxlKSB7CkBAIC0yODgsMTMgKzM0MSwxMjkgQEAgdm9pZCBU
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJsZShib29sIGRp
c2NhcmRhYmxlKQogICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQogCisjaWYgUExBVEZP
Uk0oR1RLKSAmJiBQTEFURk9STShYMTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJ
TkRPVykKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBv
c2l0aW5nKHVpbnQ2NF90IGhhbmRsZSkKK3sKKyAgICBtX2xheWVyVHJlZUNvbnRleHQuY29udGV4
dElEID0gaGFuZGxlOworICAgIG1fY29tcG9zaXRvci0+c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZv
ckNvbXBvc2l0aW5nKGhhbmRsZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisjZW5k
aWYKKwordm9pZCBMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KQoreworICAgIGlmIChtX2lzRGlzY2FyZGFibGUpIHsKKyAgICAgICAgbV9kaXNjYXJkYWJsZVN5
bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTY2FsZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zdXJmYWNlICYmIG1fc3VyZmFjZS0+aG9z
dFJlc2l6ZShtX3dlYlBhZ2Uuc2l6ZSgpKSkKKyAgICAgICAgbV9sYXllclRyZWVDb250ZXh0LmNv
bnRleHRJRCA9IG1fc3VyZmFjZS0+c3VyZmFjZUlEKCk7CisKKyAgICBtX2Nvb3JkaW5hdG9yLmRl
dmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgp
LT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOwor
ICAgIG1fY29tcG9zaXRvci0+c2V0U2NhbGVGYWN0b3IobV93ZWJQYWdlLmRldmljZVNjYWxlRmFj
dG9yKCkgKiBtX3ZpZXdwb3J0Q29udHJvbGxlci5wYWdlU2NhbGVGYWN0b3IoKSk7Cit9CisKICNp
ZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotUmVmUHRyPFdl
YkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNw
bGF5SUQpCitSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBMYXllclRyZWVIb3N0OjpjcmVh
dGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogewog
ICAgIHJldHVybiBtX2NvbXBvc2l0b3ItPmRpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQp
OwogfQogI2VuZGlmCiAKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGlkRmx1c2hSb290TGF5ZXIoY29u
c3QgRmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpCit7CisgICAgLy8gQmVjYXVzZSBvdXIg
dmlldy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBG
cmFtZVZpZXcncyBHcmFwaGljc0xheWVyIHRyZWUsIHdlIG5lZWQgdG8gZmx1c2ggaXQgbWFudWFs
bHkuCisgICAgaWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIpCisgICAgICAgIG1fdmlld092ZXJs
YXlSb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh2aXNpYmxlQ29udGVudFJlY3QpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0g
dHJ1ZTsKKyAgICBtX2NvbXBvc2l0b3ItPnVwZGF0ZVNjZW5lU3RhdGUoc3RhdGUpOworfQorCit2
b2lkIExheWVyVHJlZUhvc3Q6OmZyYW1lQ29tcGxldGUoKQoreworICAgIG1fY29tcG9zaXRvci0+
ZnJhbWVDb21wbGV0ZSgpOworfQorCit1aW50NjRfdCBMYXllclRyZWVIb3N0OjpuYXRpdmVTdXJm
YWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoKQoreworICAgIGlmICghbV9zdXJmYWNlKQorICAgICAg
ICByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRDsKKworICAgIG1fc3VyZmFjZS0+
aW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBtX3N1cmZhY2UtPndpbmRvdygpOworfQorCit2b2lk
IExheWVyVHJlZUhvc3Q6OmRpZERlc3Ryb3lHTENvbnRleHQoKQoreworICAgIGlmIChtX3N1cmZh
Y2UpCisgICAgICAgIG1fc3VyZmFjZS0+ZmluYWxpemUoKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0Ojp3aWxsUmVuZGVyRnJhbWUoKQoreworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1f
c3VyZmFjZS0+d2lsbFJlbmRlckZyYW1lKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGlk
UmVuZGVyRnJhbWUoKQoreworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fc3VyZmFjZS0+
ZGlkUmVuZGVyRnJhbWUoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpyZXF1ZXN0RGlzcGxh
eVJlZnJlc2hNb25pdG9yVXBkYXRlKCkKK3sKKyAgICAvLyBGbHVzaCBsYXllcnMgdG8gY2F1c2Ug
YSByZXBhaW50LiBJZiBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyIHdhcyB0cnVlIGF0IHRoaXMgcG9p
bnQsIHRoZSBsYXllcgorICAgIC8vIGZsdXNoIHdvbid0IGRvIGFueXRoaW5nLCBidXQgdGhhdCBt
ZWFucyB0aGVyZSdzIGEgcGFpbnRpbmcgb25nb2luZyB0aGF0IHdpbGwgc2VuZCB0aGUKKyAgICAv
LyBkaXNwbGF5IHJlZnJlc2ggbm90aWZpY2F0aW9uIHdoZW4gaXQncyBkb25lLgorICAgIG1fY29v
cmRpbmF0b3IuZm9yY2VGcmFtZVN5bmMoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30K
Kwordm9pZCBMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUo
Ym9vbCBoYXNCZWVuUmVzY2hlZHVsZWQpCit7CisgICAgLy8gQ2FsbCByZW5kZXJOZXh0RnJhbWUu
IElmIGhhc0JlZW5SZXNjaGVkdWxlZCBpcyB0cnVlLCB0aGUgbGF5ZXIgZmx1c2ggd2lsbCBmb3Jj
ZSBhIHJlcGFpbnQKKyAgICAvLyB0aGF0IHdpbGwgY2F1c2UgdGhlIGRpc3BsYXkgcmVmcmVzaCBu
b3RpZmljYXRpb24gdG8gY29tZS4KKyAgICByZW5kZXJOZXh0RnJhbWUoaGFzQmVlblJlc2NoZWR1
bGVkKTsKKyAgICBtX2NvbXBvc2l0b3ItPmhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0
ZSgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZShib29sIGZvcmNl
UmVwYWludCkKK3sKKyAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7CisgICAgYm9v
bCBzY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHN0ZDo6ZXhjaGFuZ2UobV9zY2hl
ZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciwgZmFsc2UpOworICAgIG1fY29vcmRpbmF0b3Iu
cmVuZGVyTmV4dEZyYW1lKCk7CisKKyAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFj
a0lEKSB7CisgICAgICAgIC8vIElmIHRoZSBhc3luY2hyb25vdXMgZm9yY2UtcmVwYWludCBuZWVk
cyBhIHNlcGFyYXRlIGZyZXNoIGZsdXNoLCBpdCB3YXMgZHVlIHRvCisgICAgICAgIC8vIHRoZSBm
b3JjZS1yZXBhaW50IHJlcXVlc3QgYmVpbmcgcmVnaXN0ZXJlZCB3aGlsZSBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Qgd2FzCisgICAgICAgIC8vIHdhaXRpbmcgZm9yIHRoZSByZW5kZXJlciB0byBm
aW5pc2ggYW4gdXBkYXRlLgorICAgICAgICBBU1NFUlQoIW1fZm9yY2VSZXBhaW50QXN5bmMubmVl
ZHNGcmVzaEZsdXNoIHx8IHNjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVyKTsKKworICAg
ICAgICAvLyBFeGVjdXRlIHRoZSBjYWxsYmFjayBpZiBhbm90aGVyIGxheWVyIGZsdXNoIGFuZCB0
aGUgc3Vic2VxdWVudCBzdGF0ZSB1cGRhdGUKKyAgICAgICAgLy8gYXJlbid0IG5lZWRlZC4gSWYg
dGhleSBhcmUsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhpcyBmdW5jdGlv
bgorICAgICAgICAvLyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG5leHQgdXBkYXRlLgorICAgICAgICBp
ZiAoIW1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoKSB7CisgICAgICAgICAgICBt
X3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3Jj
ZVJlcGFpbnRBc3luYy5jYWxsYmFja0lELmNhbGxiYWNrSUQoKSkpOworICAgICAgICAgICAgbV9m
b3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEID0gT3B0aW9uYWxDYWxsYmFja0lEKCk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIgfHwg
bV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSB8fCBmb3JjZVJlcGFpbnQpIHsKKyAgICAgICAg
bV9sYXllckZsdXNoVGltZXIuc3RvcCgpOworICAgICAgICBpZiAoZm9yY2VSZXBhaW50KQorICAg
ICAgICAgICAgbV9jb29yZGluYXRvci5mb3JjZUZyYW1lU3luYygpOworICAgICAgICBsYXllckZs
dXNoVGltZXJGaXJlZCgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3Qu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlSG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45
NDVhM2EzZTdmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5oCkBAIC0wLDAgKzEsMjI5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFjY2VsZXJhdGVkU3VyZmFjZS5oIgorI2luY2x1
ZGUgIkNhbGxiYWNrSUQuaCIKKyNpbmNsdWRlICJDb21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgiCisj
aW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIk9wdGlvbmFsQ2FsbGJhY2tJ
RC5oIgorI2luY2x1ZGUgIlNpbXBsZVZpZXdwb3J0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlRo
cmVhZGVkQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlRocmVhZGVkRGlzcGxheVJlZnJlc2hNb25p
dG9yLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJ
bnRTaXplOworY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5
Oworc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZTsKK3N0cnVjdCBWaWV3cG9ydEF0dHJp
YnV0ZXM7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworCitjbGFz
cyBMYXllclRyZWVIb3N0CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQor
ICAgIGZpbmFsIDogcHVibGljIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCwgcHVibGlj
IEFjY2VsZXJhdGVkU3VyZmFjZTo6Q2xpZW50CisjZW5kaWYKK3sKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0KFdlYlBhZ2Um
KTsKKyAgICB+TGF5ZXJUcmVlSG9zdCgpOworCisgICAgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYg
bGF5ZXJUcmVlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQor
ICAgIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOworICAgIHZvaWQg
c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKTsKKworICAg
IHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJG
bHVzaCgpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopOworICAgIHZvaWQgc2V0Vmlld092ZXJsYXlSb290TGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopOworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9pZCBzY3JvbGxO
b25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQg
Zm9yY2VSZXBhaW50KCk7CisgICAgYm9vbCBmb3JjZVJlcGFpbnRBc3luYyhDYWxsYmFja0lEKTsK
KyAgICB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7
CisKKyAgICB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7CisgICAgdm9pZCByZXN1bWVSZW5kZXJpbmco
KTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFj
dG9yeSgpOworCisgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmKTsKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJDb3JlOjpW
aWV3cG9ydEF0dHJpYnV0ZXMmJik7CisKKyAgICB2b2lkIHNldElzRGlzY2FyZGFibGUoYm9vbCk7
CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lk
IHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCk7CisjZW5kaWYK
KworICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisKKyNpZiBVU0Uo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQorICAgIFJlZlB0cjxXZWJD
b3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihX
ZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisgICAgdm9pZCBsYXllckZsdXNoVGltZXJG
aXJlZCgpOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnQoKTsKKyAgICB2b2lkIHJlbmRlck5l
eHRGcmFtZShib29sKTsKKworICAgIC8vIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAor
ICAgIHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNp
YmxlQ29udGVudFJlY3QpIG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgp
IG92ZXJyaWRlIHsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH07CisgICAgdm9pZCBjb21taXRTY2Vu
ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpIG92ZXJyaWRl
OworCisgICAgLy8gQWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQKKyAgICB2b2lkIGZyYW1lQ29t
cGxldGUoKSBvdmVycmlkZTsKKworICAgIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JD
b21wb3NpdGluZygpOworICAgIHZvaWQgZGlkRGVzdHJveUdMQ29udGV4dCgpOworICAgIHZvaWQg
d2lsbFJlbmRlckZyYW1lKCk7CisgICAgdm9pZCBkaWRSZW5kZXJGcmFtZSgpOworICAgIHZvaWQg
cmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOworICAgIHZvaWQgaGFuZGxlRGlz
cGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wpOworCisgICAgY2xhc3MgQ29tcG9zaXRvckNs
aWVudCBmaW5hbCA6IHB1YmxpYyBUaHJlYWRlZENvbXBvc2l0b3I6OkNsaWVudCwgcHVibGljIFRo
cmVhZGVkRGlzcGxheVJlZnJlc2hNb25pdG9yOjpDbGllbnQgIHsKKyAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ29tcG9zaXRvckNsaWVudCk7CisgICAgcHVibGljOgorICAgICAgICBDb21w
b3NpdG9yQ2xpZW50KExheWVyVHJlZUhvc3QmIGxheWVyVHJlZUhvc3QpCisgICAgICAgICAgICA6
IG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21w
b3NpdGluZygpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2xheWVy
VHJlZUhvc3QubmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGRpZERlc3Ryb3lHTENvbnRleHQoKSBvdmVycmlkZQorICAgICAgICB7
CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QuZGlkRGVzdHJveUdMQ29udGV4dCgpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC5tX3N1cmZhY2Up
CisgICAgICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0Lm1fc3VyZmFjZS0+Y2xpZW50UmVzaXpl
KHNpemUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB3aWxsUmVuZGVyRnJhbWUoKSBvdmVy
cmlkZQorICAgICAgICB7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3Qud2lsbFJlbmRlckZy
YW1lKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCkgb3ZlcnJp
ZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LmRpZFJlbmRlckZyYW1l
KCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0
b3JVcGRhdGUoKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhv
c3QucmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9vbCBoYXNCZWVu
UmVzY2hlZHVsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5oYW5k
bGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoaGFzQmVlblJlc2NoZWR1bGVkKTsKKyAgICAg
ICAgfQorCisgICAgICAgIExheWVyVHJlZUhvc3QmIG1fbGF5ZXJUcmVlSG9zdDsKKyAgICB9Owor
CisgICAgZW51bSBjbGFzcyBEaXNjYXJkYWJsZVN5bmNBY3Rpb25zIHsKKyAgICAgICAgVXBkYXRl
U2l6ZSA9IDEgPDwgMSwKKyAgICAgICAgVXBkYXRlVmlld3BvcnQgPSAxIDw8IDIsCisgICAgICAg
IFVwZGF0ZVNjYWxlID0gMSA8PCAzCisgICAgfTsKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1NfVEhSRUFERUQpCisKKyAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7CisgICAgTGF5ZXJU
cmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTX1RIUkVBREVEKQorICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgeyB0
cnVlIH07CisgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNWYWxp
ZCB7IHRydWUgfTsKKyAgICBib29sIG1faXNXYWl0aW5nRm9yUmVuZGVyZXIgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciB7IGZhbHNlIH07Cisg
ICAgZmxvYXQgbV9sYXN0UGFnZVNjYWxlRmFjdG9yIHsgMSB9OworICAgIFdlYkNvcmU6OkludFBv
aW50IG1fbGFzdFNjcm9sbFBvc2l0aW9uOworICAgIGJvb2wgbV9pc0Rpc2NhcmRhYmxlIHsgZmFs
c2UgfTsKKyAgICBPcHRpb25TZXQ8RGlzY2FyZGFibGVTeW5jQWN0aW9ucz4gbV9kaXNjYXJkYWJs
ZVN5bmNBY3Rpb25zOworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmlld092ZXJsYXlS
b290TGF5ZXIgeyBudWxscHRyIH07CisgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvciBtX2Nvb3Jk
aW5hdG9yOworICAgIENvbXBvc2l0b3JDbGllbnQgbV9jb21wb3NpdG9yQ2xpZW50OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxBY2NlbGVyYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKKyAgICBSZWZQdHI8
VGhyZWFkZWRDb21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7CisgICAgU2ltcGxlVmlld3BvcnRDb250
cm9sbGVyIG1fdmlld3BvcnRDb250cm9sbGVyOworICAgIHN0cnVjdCB7CisgICAgICAgIE9wdGlv
bmFsQ2FsbGJhY2tJRCBjYWxsYmFja0lEOworICAgICAgICBib29sIG5lZWRzRnJlc2hGbHVzaCB7
IGZhbHNlIH07CisgICAgfSBtX2ZvcmNlUmVwYWludEFzeW5jOworICAgIFJ1bkxvb3A6OlRpbWVy
PExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOworI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDU19USFJFQURFRCkKK307CisKKyNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTX1RIUkVBREVEKQoraW5saW5lIExheWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3QoV2ViUGFn
ZSYgd2ViUGFnZSkgOiBtX3dlYlBhZ2Uod2ViUGFnZSkgeyB9CitpbmxpbmUgTGF5ZXJUcmVlSG9z
dDo6fkxheWVyVHJlZUhvc3QoKSB7IH0KK2lubGluZSB2b2lkIExheWVyVHJlZUhvc3Q6OnNldExh
eWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKSB7IH0KK2lubGluZSB2b2lkIExheWVyVHJl
ZUhvc3Q6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCkg
eyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0OjpzY2hlZHVsZUxheWVyRmx1c2goKSB7IH0K
K2lubGluZSB2b2lkIExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkgeyB9
CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyKikgeyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0OjpzZXRW
aWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9CitpbmxpbmUg
dm9pZCBMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkgeyB9CitpbmxpbmUgdm9pZCBMYXllclRy
ZWVIb3N0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIHsgfQoraW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkgeyB9Citp
bmxpbmUgYm9vbCBMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyhDYWxsYmFja0lEKSB7
IHJldHVybiBmYWxzZTsgfQoraW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5n
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgeyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0
OjpwYXVzZVJlbmRlcmluZygpIHsgfQoraW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6cmVzdW1l
UmVuZGVyaW5nKCkgeyB9CitpbmxpbmUgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIExh
eWVyVHJlZUhvc3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQor
aW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6Y29udGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJD
b3JlOjpJbnRTaXplJikgeyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0OjpkaWRDaGFuZ2VW
aWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYpIHsgfQoraW5s
aW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJsZShib29sKSB7IH0KK2lubGlu
ZSB2b2lkIExheWVyVHJlZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIHsg
fQorI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCitpbmxp
bmUgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gTGF5ZXJUcmVlSG9zdDo6
Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSB7
IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI4
NzYxNjJlNjkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Qu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29w
eXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
SWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1NfVEhSRUFERUQpCi0KLSNpbmNsdWRlICJBY2NlbGVyYXRlZFN1cmZhY2UuaCIK
LSNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJTaW1wbGVW
aWV3cG9ydENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJUaHJlYWRlZENvbXBvc2l0b3IuaCIKLSNp
bmNsdWRlICJUaHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9P
cHRpb25TZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwotY2xhc3MgR3JhcGhpY3NMYXllcjsKLXN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGU7
Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBUaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBmaW5hbCA6IHB1YmxpYyBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QsIHB1YmxpYyBBY2NlbGVyYXRlZFN1cmZhY2U6OkNsaWVudCB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gY3JlYXRl
KFdlYlBhZ2UmKTsKLSAgICB2aXJ0dWFsIH5UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCgpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0KFdlYlBhZ2UmKTsKLQotICAgIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRz
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
Y29udGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRy
aWJ1dGVzJiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGZvcmNlUmVwYWludCgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRJc0Rpc2Nh
cmRhYmxlKGJvb2wpIG92ZXJyaWRlOwotCi0jaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShY
MTEpICYmICAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAgdm9pZCBzZXRO
YXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QpIG92ZXJyaWRlOwotI2Vu
ZGlmCi0KLSAgICBjbGFzcyBDb21wb3NpdG9yQ2xpZW50IGZpbmFsIDogcHVibGljIFRocmVhZGVk
Q29tcG9zaXRvcjo6Q2xpZW50LCBwdWJsaWMgVGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3I6
OkNsaWVudCAgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21wb3NpdG9yQ2xpZW50
KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENvbXBvc2l0b3JDbGllbnQoVGhyZWFkZWRDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QmIGxheWVyVHJlZUhvc3QpCi0gICAgICAgICAgICA6IG1fbGF5ZXJU
cmVlSG9zdChsYXllclRyZWVIb3N0KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygp
IG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3Qu
bmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGRpZERlc3Ryb3lHTENvbnRleHQoKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtX2xheWVyVHJlZUhvc3QuZGlkRGVzdHJveUdMQ29udGV4dCgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC5tX3N1cmZhY2UpCi0gICAgICAg
ICAgICAgICAgbV9sYXllclRyZWVIb3N0Lm1fc3VyZmFjZS0+Y2xpZW50UmVzaXplKHNpemUpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3aWxsUmVuZGVyRnJhbWUoKSBvdmVycmlkZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3Qud2lsbFJlbmRlckZyYW1lKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCkgb3ZlcnJpZGUKLSAgICAg
ICAgewotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LmRpZFJlbmRlckZyYW1lKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIHJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUo
KSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QucmVxdWVz
dERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9vbCBoYXNCZWVuUmVzY2hlZHVs
ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5oYW5kbGVEaXNwbGF5
UmVmcmVzaE1vbml0b3JVcGRhdGUoaGFzQmVlblJlc2NoZWR1bGVkKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0JiBtX2xheWVyVHJlZUhvc3Q7
Ci0gICAgfTsKLQotICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnQoKTsKLQotICAgIC8vIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAotICAgIHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBjb21taXRTY2Vu
ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpIG92ZXJyaWRl
OwotCi0jaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVm
cmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIG92ZXJyaWRlOwotI2VuZGlm
Ci0KLSAgICAvLyBBY2NlbGVyYXRlZFN1cmZhY2U6OkNsaWVudAotICAgIHZvaWQgZnJhbWVDb21w
bGV0ZSgpIG92ZXJyaWRlOwotCi0gICAgdWludDY0X3QgbmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKCk7Ci0gICAgdm9pZCBkaWREZXN0cm95R0xDb250ZXh0KCk7Ci0gICAgdm9pZCB3
aWxsUmVuZGVyRnJhbWUoKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7Ci0gICAgdm9pZCBy
ZXF1ZXN0RGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKCk7Ci0gICAgdm9pZCBoYW5kbGVEaXNw
bGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9vbCk7Ci0KLSAgICBlbnVtIGNsYXNzIERpc2NhcmRh
YmxlU3luY0FjdGlvbnMgewotICAgICAgICBVcGRhdGVTaXplID0gMSA8PCAxLAotICAgICAgICBV
cGRhdGVWaWV3cG9ydCA9IDEgPDwgMiwKLSAgICAgICAgVXBkYXRlU2NhbGUgPSAxIDw8IDMKLSAg
ICB9OwotCi0gICAgQ29tcG9zaXRvckNsaWVudCBtX2NvbXBvc2l0b3JDbGllbnQ7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEFjY2VsZXJhdGVkU3VyZmFjZT4gbV9zdXJmYWNlOwotICAgIFJlZlB0cjxU
aHJlYWRlZENvbXBvc2l0b3I+IG1fY29tcG9zaXRvcjsKLSAgICBTaW1wbGVWaWV3cG9ydENvbnRy
b2xsZXIgbV92aWV3cG9ydENvbnRyb2xsZXI7Ci0gICAgZmxvYXQgbV9sYXN0UGFnZVNjYWxlRmFj
dG9yIHsgMSB9OwotICAgIFdlYkNvcmU6OkludFBvaW50IG1fbGFzdFNjcm9sbFBvc2l0aW9uOwot
ICAgIGJvb2wgbV9pc0Rpc2NhcmRhYmxlIHsgZmFsc2UgfTsKLSAgICBPcHRpb25TZXQ8RGlzY2Fy
ZGFibGVTeW5jQWN0aW9ucz4gbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhS
RUFERUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWFJbXBsLmNwcAppbmRleCA0NGViMmRiNjY5OC4uNjNkNTE1YWU5MGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcApA
QCAtNjEsNyArNjEsNiBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6c2V0TmVlZHNEaXNwbGF5KCkK
IHsKICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgIEFTU0VSVChtX2RpcnR5UmVn
aW9uLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNldE5lZWRz
RGlzcGxheSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03Miw3ICs3MSw2IEBAIHZv
aWQgRHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgIEFTU0VSVChtX2Rp
cnR5UmVnaW9uLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNl
dE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3ZmIwYzZjYmIuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQ
UEVSKQotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTX1RIUkVBREVEKQotI2luY2x1ZGUgIlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShX
ZWJQYWdlJiB3ZWJQYWdlKQotewotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURF
RCkKLSAgICByZXR1cm4gVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZSh3
ZWJQYWdlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHdlYlBhZ2UpOwotICAgIHJldHVybiBu
dWxscHRyOwotI2VuZGlmCi19Ci0KLUxheWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3QoV2ViUGFn
ZSYgd2ViUGFnZSkKLSAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotewotfQotCi1MYXllclRyZWVI
b3N0Ojp+TGF5ZXJUcmVlSG9zdCgpCi17Ci0gICAgQVNTRVJUKCFtX2lzVmFsaWQpOwotfQotCi12
b2lkIExheWVyVHJlZUhvc3Q6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxh
eWVyRmx1c2hpbmdFbmFibGVkKQotewotICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9s
YXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsKLQotICAg
IGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgewotICAgICAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbmNlbFBlbmRpbmdM
YXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdDo6cGF1c2VSZW5kZXJpbmcoKQot
ewotICAgIG1faXNTdXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIExheWVyVHJlZUhvc3Q6OnJl
c3VtZVJlbmRlcmluZygpCi17Ci0gICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwotICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQot
ewotICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1faXNWYWxpZCA9IGZhbHNlOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
M2MzOTgyOTllNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExheWVyVHJlZUhvc3RfaAotI2RlZmluZSBMYXllclRy
ZWVIb3N0X2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVf
TUFQUEVSKQotCi0jaW5jbHVkZSAiQ2FsbGJhY2tJRC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNv
bnRleHQuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIENvbm5lY3Rpb247Ci19Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgR3JhcGhpY3NMYXll
cjsKLWNsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5OwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDU19USFJFQURFRCkKLXN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7Ci0jZW5kaWYKLX0KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIExheWVyVHJlZUhv
c3QgOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclRyZWVIb3N0PiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZlB0cjxMYXllclRyZWVIb3N0PiBjcmVhdGUoV2ViUGFnZSYpOwotICAgIHZpcnR1YWwg
fkxheWVyVHJlZUhvc3QoKTsKLQotICAgIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJl
ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0KLSAgICB2b2lk
IHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldFNob3Vs
ZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVk
dWxlZExheWVyRmx1c2gpIHsgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3Rp
ZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUxheWVyRmx1c2goKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZs
dXNoKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXko
KSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNw
bGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH07Ci0gICAgdmlydHVhbCB2b2lk
IHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9
OwotICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7Ci0gICAgdmlydHVhbCB2
b2lkIHJlc3VtZVJlbmRlcmluZygpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0K
LSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi0gICAgdmlydHVhbCB2b2lk
IGNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIHsgfTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6OlZpZXdwb3J0
QXR0cmlidXRlcyYmKSB7IH07Ci0jZW5kaWYKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHNldElzRGlzY2FyZGFibGUoYm9vbCkgeyB9OwotI2VuZGlmCi0KLSNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKEdUSykKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KSB7IH07Ci0jZW5kaWYKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAg
IHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSA9IDA7Ci0jZW5k
aWYKLQotI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0g
ICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIHsgcmV0dXJu
IG51bGxwdHI7IH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldFZpZXdPdmVybGF5Um9v
dExheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKSB7IG1f
dmlld092ZXJsYXlSb290TGF5ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXllcjsgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdChXZWJQYWdlJik7Ci0KLSAgICBXZWJQYWdl
JiBtX3dlYlBhZ2U7Ci0gICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Ci0g
ICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCB7IHRydWUgfTsKLSAgICBib29s
IG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoIHsgZmFsc2UgfTsKLSAgICBib29sIG1f
aXNTdXNwZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1ZhbGlkIHsgdHJ1ZSB9OwotICAg
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmlld092ZXJsYXlSb290TGF5ZXIgeyBudWxscHRy
IH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQotCi0jZW5kaWYgLy8gTGF5ZXJU
cmVlSG9zdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363218</attachid>
            <date>2019-02-28 04:36:51 -0800</date>
            <delta_ts>2019-02-28 04:36:51 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk2-layer-tree-host.diff</filename>
            <type>text/plain</type>
            <size>63403</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggODc1ZTQxOWE2YjUuLjg2ZGJjOTBjNWNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDY0IEBACisyMDE5LTAyLTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbQ29vcmRpbmF0ZWRHcmFwaGljc10gVW5pZnkgYWxsIExheWVyVHJl
ZUhvc3QgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk1MDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgxb1hbiBEb2JlcsWhZWsuCisKKyAg
ICAgICAgVGhlcmUncyBubyByZWFzb24gdG8gaGF2ZSAzIGNsYXNzZXMsIHNpbmNlIGN1cnJlbnRs
eSBMYXllclRyZWVIb3N0IGlzIG9ubHkgdXNlZCBieSBjb29yZGluYXRlZCBncmFwaGljcyBiYXNl
ZAorICAgICAgICBwb3J0cy4KKworICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmV4aXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZU5vdyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9U
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAuCisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0Ojp+TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNl
dExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3Q6OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmZvcmNl
UmVwYWludEFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENo
YW5nZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVuZGVyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb250ZW50c1NpemVDaGFuZ2VkKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlRGlzcGxh
eVJlZnJlc2hNb25pdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZGlkRmx1
c2hSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpjb21taXRTY2Vu
ZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6ZnJhbWVDb21wbGV0ZSk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6Om5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JD
b21wb3NpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmRpZERlc3Ryb3lH
TENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojp3aWxsUmVuZGVyRnJh
bWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpkaWRSZW5kZXJGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OnJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0
b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5
UmVmcmVzaE1vbml0b3JVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0Ojpy
ZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3Bs
YXkpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNldE5lZWRzRGlzcGxheUlu
UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0Lmg6IFJl
bW92ZWQuCisgICAgICAgICogV2ViUGFnZS93aW4vTGF5ZXJUcmVlSG9zdC5oOiBBZGRlZC4KKwog
MjAxOS0wMi0yOCAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtXZWIgR1BVXSBFbmFibGUgV2ViIEdQVSBvbmx5IG9uIDY0LWJpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4u
Y21ha2UKaW5kZXggMGE1MzM1YTNjZjguLjRjYjgwNGQwZWYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4u
Y21ha2UKQEAgLTgxLDExICs4MSw5IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWFJbXBsLmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCi0gICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlSG9zdC5jcHAKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS93aW4vV2ViSW5zcGVjdG9yVUlX
aW4uY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNv
bXBvc2l0b3IvVGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkRGlz
cGxheVJlZnJlc2hNb25pdG9yLmgKaW5kZXggNDg3ZTY2MDc0ZjIuLjViMjJiYmZmYTA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVk
Y29tcG9zaXRvci9UaHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVh
ZGVkRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKQEAgLTI1LDkgKzI1LDkgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpICYmIFVTRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0KICNpbmNsdWRlIDxXZWJDb3Jl
L0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oPgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
X1RIUkVBREVEKSAmJiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9S
KQogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNl
c0dUSy50eHQKaW5kZXggZWExYmY5N2Y4OTMuLjkxZjhjNDllMzBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50
eHQKQEAgLTQwMywxMiArNDAzLDEwIEBAIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9X
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZFN1cmZh
Y2UuY3BwCi1XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKIFdlYlByb2Nlc3Mv
V2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAogCiBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAotV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCitXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWFJbXBsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNXUEUudHh0
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dAppbmRleCA5Yzk1OGJmM2UwMi4uNTQwNWYy
NDNmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysrIGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dApAQCAtMjQzLDExICsyNDMsOSBAQCBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L3dwZS9XZWJQb3B1cE1lbnVXUEUuY3BwCiAKIFdlYlByb2Nlc3MvV2Vi
UGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2Vs
ZXJhdGVkU3VyZmFjZS5jcHAKLVdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAog
CiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3Jk
aW5hdG9yLmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LmNwcAotV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCitXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAogCiBXZWJQcm9jZXNz
L1dlYlBhZ2UvZ3N0cmVhbWVyL1dlYlBhZ2VHU3RyZWFtZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YS5jcHAKaW5kZXggMzA0ZGI4ODg1MTYuLjY0NzViZTAxOTMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVh
LmNwcApAQCAtNjYsMjQgKzY2LDYgQEAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6QWNjZWxlcmF0
ZWREcmF3aW5nQXJlYShXZWJQYWdlJiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlQ3IKICAgICBtX3dl
YlBhZ2UuY29yZVBhZ2UoKS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IocGFyYW1ldGVycy5kZXZpY2VT
Y2FsZUZhY3Rvcik7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2V0TmVlZHNE
aXNwbGF5KCkKLXsKLSAgICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoKTsKLX0KLQotdm9pZCBBY2NlbGVy
YXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9u
Q29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QocmVjdCk7Ci19Ci0KIHZvaWQgQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNv
bnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxl
ZCkKQEAgLTM0MywxOSArMzI1LDE5IEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50
ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShHcmFwaGljc0xheWVyKiBncmFwCiAKICAgICBB
U1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7CiAgICAgaWYgKG1fcHJldmlvdXNMYXllclRyZWVIb3N0
KSB7Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgICAgICBtX2xheWVyVHJlZUhv
c3QgPSBXVEZNb3ZlKG1fcHJldmlvdXNMYXllclRyZWVIb3N0KTsKICAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5zZXRJc0Rpc2NhcmRhYmxlKGZhbHNlKTsKICAgICAgICAgaWYgKCFtX2lzUGFpbnRp
bmdTdXNwZW5kZWQpCiAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJlc3VtZVJlbmRlcmlu
ZygpOwogICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbikKICAgICAgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUpOwor
ICAgIH0gZWxzZSB7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorICAg
ICAgICBtX2xheWVyVHJlZUhvc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPExheWVyVHJlZUhvc3Q+KG1f
d2ViUGFnZSk7CiAjZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0ID0gbnVsbHB0cjsKICNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1fbGF5ZXJUcmVlSG9zdCA9IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShtX3dlYlBhZ2UpOwotCisg
ICAgICAgIAogICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKICAgICAgICAgICAgIHJldHVy
bjsKIApAQCAtMzkzLDE2ICszNzUsMTIgQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVOb3coKQogICAgIG1fZXhpdENvbXBvc2l0aW5n
VGltZXIuc3RvcCgpOwogICAgIG1fd2FudHNUb0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSA9IGZhbHNlOwogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIEFTU0VSVCht
X2xheWVyVHJlZUhvc3QpOwogICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0ID0gV1RGTW92ZSht
X2xheWVyVHJlZUhvc3QpOwogICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5zZXRJc0Rpc2Nh
cmRhYmxlKHRydWUpOwogICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5wYXVzZVJlbmRlcmlu
ZygpOwogICAgIG1fcHJldmlvdXNMYXllclRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGlu
Z0VuYWJsZWQoZmFsc2UpOwogICAgIG1fZGlzY2FyZFByZXZpb3VzTGF5ZXJUcmVlSG9zdFRpbWVy
LnN0YXJ0T25lU2hvdCg1X3MpOwotI2Vsc2UKLSAgICBtX2xheWVyVHJlZUhvc3QgPSBudWxscHRy
OwotI2VuZGlmCiB9CiAKIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZGlzY2FyZFByZXZp
b3VzTGF5ZXJUcmVlSG9zdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmgKaW5kZXggZjdlZjlmNmY1MzUuLjQz
MzcxNzBhNzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9B
Y2NlbGVyYXRlZERyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCkBAIC00MCw4ICs0MCw4IEBAIHB1YmxpYzoK
IAogcHJvdGVjdGVkOgogICAgIC8vIERyYXdpbmdBcmVhCi0gICAgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBvdmVy
cmlkZSB7IH07CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIG92ZXJyaWRlIHsgfTsKICAgICB2b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wpIG92ZXJy
aWRlOwogICAgIGJvb2wgbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbjsgfQpAQCAtMTI4LDkgKzEyOCw5IEBAIHBy
b3RlY3RlZDoKICAgICBSdW5Mb29wOjpUaW1lcjxBY2NlbGVyYXRlZERyYXdpbmdBcmVhPiBtX2V4
aXRDb21wb3NpdGluZ1RpbWVyOwogCiAgICAgLy8gVGhlIGxheWVyIHRyZWUgaG9zdCB0aGF0IGhh
bmRsZXMgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcuCi0gICAgUmVmUHRyPExheWVyVHJlZUhvc3Q+
IG1fbGF5ZXJUcmVlSG9zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJUcmVlSG9zdD4gbV9s
YXllclRyZWVIb3N0OwogCi0gICAgUmVmUHRyPExheWVyVHJlZUhvc3Q+IG1fcHJldmlvdXNMYXll
clRyZWVIb3N0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXllclRyZWVIb3N0PiBtX3ByZXZpb3Vz
TGF5ZXJUcmVlSG9zdDsKICAgICBSdW5Mb29wOjpUaW1lcjxBY2NlbGVyYXRlZERyYXdpbmdBcmVh
PiBtX2Rpc2NhcmRQcmV2aW91c0xheWVyVHJlZUhvc3RUaW1lcjsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNiN2EyZGRlNzIuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgotCi0jaW5jbHVk
ZSAiRHJhd2luZ0FyZWEuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFn
ZVByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29udHJv
bGxlci5oPgotCi0jaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkKLSNpbmNsdWRlIDx3dGYvZ2xpYi9S
dW5Mb29wU291cmNlUHJpb3JpdHkuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1SZWY8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdlJiB3ZWJQYWdlKQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKSk7
Ci19Ci0KLUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCgpCi17Ci19Ci0KLUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0g
ICAgLCBtX2Nvb3JkaW5hdG9yKHdlYlBhZ2UuY29yZVBhZ2UoKSwgKnRoaXMpCi0gICAgLCBtX2xh
eWVyRmx1c2hUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKQotewotI2lmIFVTRShHTElCX0VWRU5UX0xPT1Ap
Ci0gICAgbV9sYXllckZsdXNoVGltZXIuc2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5
OjpMYXllckZsdXNoVGltZXIpOwotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnNldE5hbWUoIltXZWJL
aXRdIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCIpOwotI2VuZGlmCi0gICAgbV9jb29yZGluYXRv
ci5jcmVhdGVSb290TGF5ZXIobV93ZWJQYWdlLnNpemUoKSk7Ci0KLSAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5
ZXJGbHVzaCgpCi17Ci0gICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpIHsKLSAgICAg
ICAgbV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0g
ICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQotewotICAg
IG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVyKEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5
Um9vdExheWVyKQotewotICAgIExheWVyVHJlZUhvc3Q6OnNldFZpZXdPdmVybGF5Um9vdExheWVy
KHZpZXdPdmVybGF5Um9vdExheWVyKTsKLSAgICBtX2Nvb3JkaW5hdG9yLnNldFZpZXdPdmVybGF5
Um9vdExheWVyKHZpZXdPdmVybGF5Um9vdExheWVyKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIpCi17Ci0gICAgbV9jb29yZGluYXRvci5zZXRSb290Q29tcG9zaXRpbmdMYXllcihn
cmFwaGljc0xheWVyKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFs
aWRhdGUoKQotewotICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0KLSAgICBtX2Nvb3Jk
aW5hdG9yLmludmFsaWRhdGUoKTsKLSAgICBMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKQotewotICAg
IC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4g
dGhpcyBjYXNlIHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmlj
ZWx5LgotICAgIC8vIEluc3RlYWQgd2UgYXJlIGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQu
IEJ1dCB3ZSBzdGlsbCB3YW50IHRvIGhhdmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFj
a3MgYmVpbmcgZXhlY3V0ZWQuCi0gICAgbV9jb29yZGluYXRvci5zeW5jRGlzcGxheVN0YXRlKCk7
Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0
aGUgZm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgotICAg
IC8vIFRoaXMgaXMgYWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RDQS4KLSAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKLQotICAgIGlmIChtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwot
fQotCi1ib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmMoQ2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQotewotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotCi0gICAg
Ly8gV2Ugd2FudCBhIGNsZWFuIHJlcGFpbnQsIG1lYW5pbmcgdGhhdCBpZiB3ZSdyZSBjdXJyZW50
bHkgd2FpdGluZyBmb3IgdGhlIHJlbmRlcmVyCi0gICAgLy8gdG8gZmluaXNoIGFuIHVwZGF0ZSwg
d2UnbGwgaGF2ZSB0byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoIHdoZW4gaXQncyBkb25lLgotICAg
IEFTU0VSVCghbV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKTsKLSAgICBtX2ZvcmNlUmVw
YWludEFzeW5jLmNhbGxiYWNrSUQgPSBPcHRpb25hbENhbGxiYWNrSUQoY2FsbGJhY2tJRCk7Ci0g
ICAgbV9mb3JjZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1c2ggPSBtX3NjaGVkdWxlZFdoaWxl
V2FpdGluZ0ZvclJlbmRlcmVyOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQot
ewotICAgIG1fY29vcmRpbmF0b3Iuc2l6ZURpZENoYW5nZShuZXdTaXplKTsKLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fY29vcmRp
bmF0b3Iuc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0KTsKLSAgICBzY2hlZHVsZUxheWVyRmx1
c2goKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFt
ZShib29sIGZvcmNlUmVwYWludCkKLXsKLSAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFs
c2U7Ci0gICAgYm9vbCBzY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHN0ZDo6ZXhj
aGFuZ2UobV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciwgZmFsc2UpOwotICAgIG1f
Y29vcmRpbmF0b3IucmVuZGVyTmV4dEZyYW1lKCk7Ci0KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRB
c3luYy5jYWxsYmFja0lEKSB7Ci0gICAgICAgIC8vIElmIHRoZSBhc3luY2hyb25vdXMgZm9yY2Ut
cmVwYWludCBuZWVkcyBhIHNlcGFyYXRlIGZyZXNoIGZsdXNoLCBpdCB3YXMgZHVlIHRvCi0gICAg
ICAgIC8vIHRoZSBmb3JjZS1yZXBhaW50IHJlcXVlc3QgYmVpbmcgcmVnaXN0ZXJlZCB3aGlsZSBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Qgd2FzCi0gICAgICAgIC8vIHdhaXRpbmcgZm9yIHRoZSBy
ZW5kZXJlciB0byBmaW5pc2ggYW4gdXBkYXRlLgotICAgICAgICBBU1NFUlQoIW1fZm9yY2VSZXBh
aW50QXN5bmMubmVlZHNGcmVzaEZsdXNoIHx8IHNjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRl
cmVyKTsKLQotICAgICAgICAvLyBFeGVjdXRlIHRoZSBjYWxsYmFjayBpZiBhbm90aGVyIGxheWVy
IGZsdXNoIGFuZCB0aGUgc3Vic2VxdWVudCBzdGF0ZSB1cGRhdGUKLSAgICAgICAgLy8gYXJlbid0
IG5lZWRlZC4gSWYgdGhleSBhcmUsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4g
dGhpcyBmdW5jdGlvbgotICAgICAgICAvLyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG5leHQgdXBkYXRl
LgotICAgICAgICBpZiAoIW1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoKSB7Ci0g
ICAgICAgICAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2Fs
bGJhY2sobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lELmNhbGxiYWNrSUQoKSkpOwotICAg
ICAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEID0gT3B0aW9uYWxDYWxsYmFj
a0lEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNo
Rmx1c2ggPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9y
UmVuZGVyZXIgfHwgbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSB8fCBmb3JjZVJlcGFpbnQp
IHsKLSAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOwotICAgICAgICBpZiAoZm9yY2VS
ZXBhaW50KQotICAgICAgICAgICAgbV9jb29yZGluYXRvci5mb3JjZUZyYW1lU3luYygpOwotICAg
ICAgICBsYXllckZsdXNoVGltZXJGaXJlZCgpOwotICAgIH0KLX0KLQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmRpZEZsdXNoUm9vdExheWVyKGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJs
ZUNvbnRlbnRSZWN0KQotewotICAgIC8vIEJlY2F1c2Ugb3VyIHZpZXctcmVsYXRpdmUgb3Zlcmxh
eSByb290IGxheWVyIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgRnJhbWVWaWV3J3MgR3JhcGhpY3NM
YXllciB0cmVlLCB3ZSBuZWVkIHRvIGZsdXNoIGl0IG1hbnVhbGx5LgotICAgIGlmIChtX3ZpZXdP
dmVybGF5Um9vdExheWVyKQotICAgICAgICBtX3ZpZXdPdmVybGF5Um9vdExheWVyLT5mbHVzaENv
bXBvc2l0aW5nU3RhdGUodmlzaWJsZUNvbnRlbnRSZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAobV9pc1N1
c3BlbmRlZCB8fCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2Nvb3JkaW5hdG9yLnN5bmNEaXNwbGF5U3RhdGUoKTsKLSAgICBtX3dlYlBhZ2UuZmx1c2hQ
ZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUoKTsKLSAgICBtX3dlYlBhZ2Uud2lsbERpc3BsYXlQYWdl
KCk7Ci0KLSAgICBpZiAoIW1faXNWYWxpZCB8fCAhbV9jb29yZGluYXRvci5yb290Q29tcG9zaXRp
bmdMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiBhIGZvcmNlLXJlcGFpbnQg
Y2FsbGJhY2sgd2FzIHJlZ2lzdGVyZWQsIHdlIHNob3VsZCBmb3JjZSBhICdmcmFtZSBzeW5jJyB0
aGF0Ci0gICAgLy8gd2lsbCBndWFyYW50ZWUgdXMgYSBjYWxsIHRvIHJlbmRlck5leHRGcmFtZSgp
IG9uY2UgdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3lu
Yy5jYWxsYmFja0lEKQotICAgICAgICBtX2Nvb3JkaW5hdG9yLmZvcmNlRnJhbWVTeW5jKCk7Ci0K
LSAgICBib29sIGRpZFN5bmMgPSBtX2Nvb3JkaW5hdG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cygpOwotCi0gICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoICYmIGRpZFN5
bmMpIHsKLSAgICAgICAgbV93ZWJQYWdlLmRyYXdpbmdBcmVhKCktPmxheWVySG9zdERpZEZsdXNo
TGF5ZXJzKCk7Ci0gICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFs
c2U7Ci0gICAgfQotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2Nl
bmVTdGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQotewotICAgIG1f
aXNXYWl0aW5nRm9yUmVuZGVyZXIgPSB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Zmx1c2hMYXllcnNBbmRGb3JjZVJlcGFpbnQoKQotewotICAgIG1fY29vcmRpbmF0
b3IuZm9yY2VGcmFtZVN5bmMoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpCi17Ci0gICAgbV9jb29yZGluYXRvci5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KTsKLSAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlk
Q2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKLX0KLQotR3JhcGhpY3NMYXllckZhY3RvcnkqIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQotewotICAgIHJl
dHVybiAmbV9jb29yZGluYXRvcjsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNjaGVkdWxlQW5pbWF0aW9uKCkKLXsKLSAgICBpZiAobV9pc1dhaXRpbmdGb3JSZW5kZXJlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIG1fbGF5
ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgxX3MgKiBtX2Nvb3JkaW5hdG9yLm5leHRBbmltYXRp
b25TZXJ2aWNlVGltZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYgLy8g
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3QuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGVhOTc0NTMxNTRjLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5o
CisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RfaAotI2RlZmluZSBDb29yZGluYXRlZExheWVyVHJlZUhvc3RfaAotCi0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiQ29tcG9zaXRpbmdDb29y
ZGluYXRvci5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJPcHRpb25h
bENhbGxiYWNrSUQuaCIKLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci1jbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKLX0KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCA6
IHB1YmxpYyBMYXllclRyZWVIb3N0LCBwdWJsaWMgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xp
ZW50Ci17Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+
IGNyZWF0ZShXZWJQYWdlJik7Ci0gICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
KCk7Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qo
V2ViUGFnZSYpOwotCi0gICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRS
b290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBpbnZhbGlkYXRlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZvcmNlUmVwYWludCgp
IG92ZXJyaWRlOwotICAgIGJvb2wgZm9yY2VSZXBhaW50QXN5bmMoQ2FsbGJhY2tJRCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1Np
emUpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHJlbmRlck5leHRGcmFtZShib29sKTsKLQotICAg
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBzZXRWaWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3Zl
cnJpZGU7Ci0KLSAgICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQKLSAgICB2b2lk
IGRpZEZsdXNoUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRl
bnRSZWN0KSBvdmVycmlkZTsKLSAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKSBvdmVycmlk
ZSB7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9OwotICAgIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShj
b25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgZmx1c2hMYXllcnNBbmRGb3JjZVJlcGFpbnQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IGxheWVyRmx1c2hUaW1lckZpcmVkKCk7Ci0KLSAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIG1f
Y29vcmRpbmF0b3I7Ci0gICAgYm9vbCBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyIHsgZmFsc2UgfTsK
LSAgICBib29sIG1fc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXIgeyBmYWxzZSB9Owot
ICAgIHN0cnVjdCB7Ci0gICAgICAgIE9wdGlvbmFsQ2FsbGJhY2tJRCBjYWxsYmFja0lEOwotICAg
ICAgICBib29sIG5lZWRzRnJlc2hGbHVzaCB7IGZhbHNlIH07Ci0gICAgfSBtX2ZvcmNlUmVwYWlu
dEFzeW5jOwotICAgIFJ1bkxvb3A6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9s
YXllckZsdXNoVGltZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlSG9zdC5jcHAKc2ltaWxhcml0eSBpbmRleCA1MyUKcmVuYW1lIGZyb20gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggMTAw
ZmM2NGE2MTkuLmVhYTA4ZDdhN2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcyku
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgSWdhbGlhIFMu
TC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTQgKzI3LDIwIEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgogCiAjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQogCi0jaW5jbHVkZSAiQWNjZWxlcmF0ZWRTdXJm
YWNlLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCisj
aW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Bh
Z2VPdmVybGF5Q29udHJvbGxlci5oPgorCisjaWYgVVNFKEdMSUJfRVZFTlRfTE9PUCkKKyNpbmNs
dWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KKyNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDYsMjEgKzUyLDIxIEBA
IHN0YXRpYyBjb25zdCBQbGF0Zm9ybURpc3BsYXlJRCBjb21wb3NpdGluZ0Rpc3BsYXlJRCA9IDE7
CiBzdGF0aWMgY29uc3QgUGxhdGZvcm1EaXNwbGF5SUQgY29tcG9zaXRpbmdEaXNwbGF5SUQgPSBw
cmltYXJ5RGlzcGxheUlEOwogI2VuZGlmCiAKLVJlZjxUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdD4gVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZShXZWJQYWdl
JiB3ZWJQYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0KHdlYlBhZ2UpKTsKLX0KLQotVGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6On5UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpCi17Ci19Ci0KLVRo
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdChXZWJQYWdlJiB3ZWJQYWdlKQotICAgIDogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
KHdlYlBhZ2UpCitMYXllclRyZWVIb3N0OjpMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlBhZ2Up
CisgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkKKyAgICAsIG1fY29vcmRpbmF0b3Iod2ViUGFnZS5j
b3JlUGFnZSgpLCAqdGhpcykKICAgICAsIG1fY29tcG9zaXRvckNsaWVudCgqdGhpcykKICAgICAs
IG1fc3VyZmFjZShBY2NlbGVyYXRlZFN1cmZhY2U6OmNyZWF0ZSh3ZWJQYWdlLCAqdGhpcykpCiAg
ICAgLCBtX3ZpZXdwb3J0Q29udHJvbGxlcih3ZWJQYWdlLnNpemUoKSkKKyAgICAsIG1fbGF5ZXJG
bHVzaFRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkxheWVyVHJlZUhvc3Q6OmxheWVyRmx1
c2hUaW1lckZpcmVkKQogeworI2lmIFVTRShHTElCX0VWRU5UX0xPT1ApCisgICAgbV9sYXllckZs
dXNoVGltZXIuc2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpMYXllckZsdXNoVGlt
ZXIpOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnNldE5hbWUoIltXZWJLaXRdIExheWVyVHJlZUhv
c3QiKTsKKyNlbmRpZgorICAgIG1fY29vcmRpbmF0b3IuY3JlYXRlUm9vdExheWVyKG1fd2ViUGFn
ZS5zaXplKCkpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworCiAgICAgaWYgKEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKSkgewogICAgICAgICBhdXRv
IGNvbnRlbnRzU2l6ZSA9IGZyYW1lVmlldy0+Y29udGVudHNTaXplKCk7CiAgICAgICAgIGlmICgh
Y29udGVudHNTaXplLmlzRW1wdHkoKSkKQEAgLTg3LDcwICs5MywxMDEgQEAgVGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdl
YlBhZ2UmIHdlYlAKICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQogCi12b2lkIFRocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKK0xheWVyVHJlZUhvc3Q6On5M
YXllclRyZWVIb3N0KCkKIHsKLSAgICBtX2NvbXBvc2l0b3ItPmludmFsaWRhdGUoKTsKLSAgICBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKTsKLSAgICBtX3N1cmZhY2UgPSBu
dWxscHRyOworICAgIEFTU0VSVCghbV9pc1ZhbGlkKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6
c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQp
CiB7Ci0gICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQoKTsKLSAgICBt
X2NvbXBvc2l0b3ItPmZvcmNlUmVwYWludCgpOworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVs
aW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxlZDsK
KworICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgeworICAgICAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbmNlbFBl
bmRpbmdMYXllckZsdXNoKCk7CiB9CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmZyYW1lQ29tcGxldGUoKQordm9pZCBMYXllclRyZWVIb3N0OjpzZXRTaG91bGROb3Rp
ZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRM
YXllckZsdXNoKQogewotICAgIG1fY29tcG9zaXRvci0+ZnJhbWVDb21wbGV0ZSgpOworICAgIG1f
bm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXll
ckZsdXNoOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZXF1
ZXN0RGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2No
ZWR1bGVMYXllckZsdXNoKCkKIHsKLSAgICAvLyBGbHVzaCBsYXllcnMgdG8gY2F1c2UgYSByZXBh
aW50LiBJZiBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyIHdhcyB0cnVlIGF0IHRoaXMgcG9pbnQsIHRo
ZSBsYXllcgotICAgIC8vIGZsdXNoIHdvbid0IGRvIGFueXRoaW5nLCBidXQgdGhhdCBtZWFucyB0
aGVyZSdzIGEgcGFpbnRpbmcgb25nb2luZyB0aGF0IHdpbGwgc2VuZCB0aGUKLSAgICAvLyBkaXNw
bGF5IHJlZnJlc2ggbm90aWZpY2F0aW9uIHdoZW4gaXQncyBkb25lLgotICAgIGZsdXNoTGF5ZXJz
QW5kRm9yY2VSZXBhaW50KCk7CisgICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faXNXYWl0aW5nRm9yUmVuZGVyZXIpIHsK
KyAgICAgICAgbV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHRydWU7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi12
b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5UmVmcmVz
aE1vbml0b3JVcGRhdGUoYm9vbCBoYXNCZWVuUmVzY2hlZHVsZWQpCit2b2lkIExheWVyVHJlZUhv
c3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkKIHsKLSAgICAvLyBDYWxsIHJlbmRlck5leHRG
cmFtZS4gSWYgaGFzQmVlblJlc2NoZWR1bGVkIGlzIHRydWUsIHRoZSBsYXllciBmbHVzaCB3aWxs
IGZvcmNlIGEgcmVwYWludAotICAgIC8vIHRoYXQgd2lsbCBjYXVzZSB0aGUgZGlzcGxheSByZWZy
ZXNoIG5vdGlmaWNhdGlvbiB0byBjb21lLgotICAgIHJlbmRlck5leHRGcmFtZShoYXNCZWVuUmVz
Y2hlZHVsZWQpOwotICAgIG1fY29tcG9zaXRvci0+aGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9y
VXBkYXRlKCk7CisgICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOwogfQogCi11aW50NjRfdCBU
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoKQog
ewotICAgIGlmICghbV9zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0
LmNvbnRleHRJRDsKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX2lzV2FpdGluZ0ZvclJlbmRl
cmVyKQorICAgICAgICByZXR1cm47CiAKLSAgICBtX3N1cmZhY2UtPmluaXRpYWxpemUoKTsKLSAg
ICByZXR1cm4gbV9zdXJmYWNlLT53aW5kb3coKTsKKyAgICBtX2Nvb3JkaW5hdG9yLnN5bmNEaXNw
bGF5U3RhdGUoKTsKKyAgICBtX3dlYlBhZ2UuZmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUo
KTsKKyAgICBtX3dlYlBhZ2Uud2lsbERpc3BsYXlQYWdlKCk7CisKKyAgICBpZiAoIW1faXNWYWxp
ZCB8fCAhbV9jb29yZGluYXRvci5yb290Q29tcG9zaXRpbmdMYXllcigpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBJZiBhIGZvcmNlLXJlcGFpbnQgY2FsbGJhY2sgd2FzIHJlZ2lzdGVyZWQs
IHdlIHNob3VsZCBmb3JjZSBhICdmcmFtZSBzeW5jJyB0aGF0CisgICAgLy8gd2lsbCBndWFyYW50
ZWUgdXMgYSBjYWxsIHRvIHJlbmRlck5leHRGcmFtZSgpIG9uY2UgdGhlIHVwZGF0ZSBpcyBjb21w
bGV0ZS4KKyAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKQorICAgICAgICBt
X2Nvb3JkaW5hdG9yLmZvcmNlRnJhbWVTeW5jKCk7CisKKyAgICBib29sIGRpZFN5bmMgPSBtX2Nv
b3JkaW5hdG9yLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworCisgICAgaWYgKG1fbm90aWZ5
QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoICYmIGRpZFN5bmMpIHsKKyAgICAgICAgbV93ZWJQYWdl
LmRyYXdpbmdBcmVhKCktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7CisgICAgICAgIG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7CisgICAgfQogfQogCi12b2lkIFRo
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWREZXN0cm95R0xDb250ZXh0KCkKK3Zv
aWQgTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllcikKIHsKLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAgICBtX3N1cmZhY2Ut
PmZpbmFsaXplKCk7CisgICAgbV9jb29yZGluYXRvci5zZXRSb290Q29tcG9zaXRpbmdMYXllcihn
cmFwaGljc0xheWVyKTsKIH0KIAotdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6d2lsbFJlbmRlckZyYW1lKCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld092ZXJsYXlS
b290TGF5ZXIoR3JhcGhpY3NMYXllciogdmlld092ZXJsYXlSb290TGF5ZXIpCiB7Ci0gICAgaWYg
KG1fc3VyZmFjZSkKLSAgICAgICAgbV9zdXJmYWNlLT53aWxsUmVuZGVyRnJhbWUoKTsKKyAgICBt
X3ZpZXdPdmVybGF5Um9vdExheWVyID0gdmlld092ZXJsYXlSb290TGF5ZXI7CisgICAgbV9jb29y
ZGluYXRvci5zZXRWaWV3T3ZlcmxheVJvb3RMYXllcih2aWV3T3ZlcmxheVJvb3RMYXllcik7CiB9
CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFJlbmRlckZyYW1l
KCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgaWYgKG1fc3VyZmFj
ZSkKLSAgICAgICAgbV9zdXJmYWNlLT5kaWRSZW5kZXJGcmFtZSgpOworICAgIEFTU0VSVChtX2lz
VmFsaWQpOworICAgIG1faXNWYWxpZCA9IGZhbHNlOworCisgICAgY2FuY2VsUGVuZGluZ0xheWVy
Rmx1c2goKTsKKworICAgIG1fY29vcmRpbmF0b3IuaW52YWxpZGF0ZSgpOworICAgIG1fY29tcG9z
aXRvci0+aW52YWxpZGF0ZSgpOworICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7CiB9CiAKLXZvaWQg
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250
ZW50cyhjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBMYXllclRyZWVIb3N0OjpzY3JvbGxOb25D
b21wb3NpdGVkQ29udGVudHMoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IG1fd2ViUGFnZS5tYWluRnJhbWVWaWV3KCk7CisgICAgYXV0byogZnJhbWVW
aWV3ID0gbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldyB8fCAh
ZnJhbWVWaWV3LT5kZWxlZ2F0ZXNTY3JvbGxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0x
NjEsMzAgKzE5OCwzMyBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
Y3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgSW50UmVjdAogICAgICAgICBkaWRDaGFu
Z2VWaWV3cG9ydCgpOwogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Ojpjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit2b2lkIExheWVy
VHJlZUhvc3Q6OmZvcmNlUmVwYWludCgpCiB7Ci0gICAgbV92aWV3cG9ydENvbnRyb2xsZXIuZGlk
Q2hhbmdlQ29udGVudHNTaXplKG5ld1NpemUpOwotICAgIGlmIChtX2lzRGlzY2FyZGFibGUpCi0g
ICAgICAgIG1fZGlzY2FyZGFibGVTeW5jQWN0aW9ucy5hZGQoRGlzY2FyZGFibGVTeW5jQWN0aW9u
czo6VXBkYXRlVmlld3BvcnQpOwotICAgIGVsc2UKLSAgICAgICAgZGlkQ2hhbmdlVmlld3BvcnQo
KTsKKyAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcnVubmluZyBsYXlvdXQgdGVzdHMuIFNp
bmNlIGluIHRoaXMgY2FzZSB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGEgVUlQcm9jZXNzIHRvIHJl
cGx5IG5pY2VseS4KKyAgICAvLyBJbnN0ZWFkIHdlIGFyZSBqdXN0IHRyaWdnZXJpbmcgZm9yY2VS
ZXBhaW50LiBCdXQgd2Ugc3RpbGwgd2FudCB0byBoYXZlIHRoZSBzY3JpcHRlZCBhbmltYXRpb24g
Y2FsbGJhY2tzIGJlaW5nIGV4ZWN1dGVkLgorICAgIG1fY29vcmRpbmF0b3Iuc3luY0Rpc3BsYXlT
dGF0ZSgpOworCisgICAgLy8gV2UgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhl
cndpc2UgdGhlIGZvcmNlZCBwYWludCBtaWdodCBjYW5jZWwgYSBsYXRlciBleHBlY3RlZCBmbHVz
aC4KKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKworICAgIGlmICghbV9pc1dhaXRpbmdGb3JS
ZW5kZXJlcikKKyAgICAgICAgbV9jb29yZGluYXRvci5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXMo
KTsKKyAgICBtX2NvbXBvc2l0b3ItPmZvcmNlUmVwYWludCgpOwogfQogCi12b2lkIFRocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KQorYm9vbCBMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyhDYWxsYmFja0lEIGNhbGxi
YWNrSUQpCiB7Ci0gICAgaWYgKG1faXNEaXNjYXJkYWJsZSkgewotICAgICAgICBtX2Rpc2NhcmRh
YmxlU3luY0FjdGlvbnMuYWRkKERpc2NhcmRhYmxlU3luY0FjdGlvbnM6OlVwZGF0ZVNjYWxlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3N1cmZhY2UgJiYgbV9zdXJmYWNl
LT5ob3N0UmVzaXplKG1fd2ViUGFnZS5zaXplKCkpKQotICAgICAgICBtX2xheWVyVHJlZUNvbnRl
eHQuY29udGV4dElEID0gbV9zdXJmYWNlLT5zdXJmYWNlSUQoKTsKKyAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKIAotICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlT3JQYWdlU2Nh
bGVGYWN0b3JDaGFuZ2VkKCk7Ci0gICAgbV9jb21wb3NpdG9yLT5zZXRTY2FsZUZhY3RvcihtX3dl
YlBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSAqIG1fdmlld3BvcnRDb250cm9sbGVyLnBhZ2VTY2Fs
ZUZhY3RvcigpKTsKKyAgICAvLyBXZSB3YW50IGEgY2xlYW4gcmVwYWludCwgbWVhbmluZyB0aGF0
IGlmIHdlJ3JlIGN1cnJlbnRseSB3YWl0aW5nIGZvciB0aGUgcmVuZGVyZXIKKyAgICAvLyB0byBm
aW5pc2ggYW4gdXBkYXRlLCB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2ggd2hl
biBpdCdzIGRvbmUuCisgICAgQVNTRVJUKCFtX2ZvcmNlUmVwYWludEFzeW5jLmNhbGxiYWNrSUQp
OworICAgIG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCA9IE9wdGlvbmFsQ2FsbGJhY2tJ
RChjYWxsYmFja0lEKTsKKyAgICBtX2ZvcmNlUmVwYWludEFzeW5jLm5lZWRzRnJlc2hGbHVzaCA9
IG1fc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVuZGVyZXI7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNpemVEaWRDaGFuZ2Uo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZShj
b25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGlmIChtX2lzRGlzY2FyZGFibGUpIHsKICAgICAg
ICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpV
cGRhdGVTaXplKTsKQEAgLTE5NSw3ICsyMzUsOSBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgaWYg
KG1fc3VyZmFjZSAmJiBtX3N1cmZhY2UtPmhvc3RSZXNpemUoc2l6ZSkpCiAgICAgICAgIG1fbGF5
ZXJUcmVlQ29udGV4dC5jb250ZXh0SUQgPSBtX3N1cmZhY2UtPnN1cmZhY2VJRCgpOwogCi0gICAg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKHNpemUpOworICAgIG1fY29v
cmRpbmF0b3Iuc2l6ZURpZENoYW5nZShzaXplKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
KwogICAgIG1fdmlld3BvcnRDb250cm9sbGVyLmRpZENoYW5nZVZpZXdwb3J0U2l6ZShzaXplKTsK
ICAgICBJbnRTaXplIHNjYWxlZFNpemUoc2l6ZSk7CiAgICAgc2NhbGVkU2l6ZS5zY2FsZShtX3dl
YlBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CkBAIC0yMDMsMjUgKzI0NSw0MSBAQCB2b2lkIFRo
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNp
emUmIHNpemUpCiAgICAgZGlkQ2hhbmdlVmlld3BvcnQoKTsKIH0KIAotdm9pZCBUaHJlYWRlZENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFZpZXdw
b3J0QXR0cmlidXRlcyYmIGF0dHIpCit2b2lkIExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5n
KCkKIHsKLSAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0
ZXMoV1RGTW92ZShhdHRyKSk7CisgICAgbV9pc1N1c3BlbmRlZCA9IHRydWU7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlSG9zdDo6cmVzdW1lUmVuZGVyaW5nKCkKK3sKKyAgICBtX2lzU3VzcGVuZGVkID0g
ZmFsc2U7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK0dyYXBoaWNzTGF5ZXJGYWN0
b3J5KiBMYXllclRyZWVIb3N0OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCit7CisgICAgcmV0dXJu
ICZtX2Nvb3JkaW5hdG9yOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmNvbnRlbnRzU2l6ZUNo
YW5nZWQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBtX3ZpZXdwb3J0Q29udHJvbGxl
ci5kaWRDaGFuZ2VDb250ZW50c1NpemUobmV3U2l6ZSk7CiAgICAgaWYgKG1faXNEaXNjYXJkYWJs
ZSkKICAgICAgICAgbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNB
Y3Rpb25zOjpVcGRhdGVWaWV3cG9ydCk7CiAgICAgZWxzZQogICAgICAgICBkaWRDaGFuZ2VWaWV3
cG9ydCgpOwogfQogCi0jaWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShYMTEpICYmICFVU0Uo
UkVESVJFQ1RFRF9YQ09NUE9TSVRFX1dJTkRPVykKLXZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRf
dCBoYW5kbGUpCit2b2lkIExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRl
cyhWaWV3cG9ydEF0dHJpYnV0ZXMmJiBhdHRyKQogewotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5j
b250ZXh0SUQgPSBoYW5kbGU7Ci0gICAgbV9jb21wb3NpdG9yLT5zZXROYXRpdmVTdXJmYWNlSGFu
ZGxlRm9yQ29tcG9zaXRpbmcoaGFuZGxlKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAg
ICBtX3ZpZXdwb3J0Q29udHJvbGxlci5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV1RGTW92
ZShhdHRyKSk7CisgICAgaWYgKG1faXNEaXNjYXJkYWJsZSkKKyAgICAgICAgbV9kaXNjYXJkYWJs
ZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVWaWV3cG9ydCk7
CisgICAgZWxzZQorICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQotI2VuZGlmCiAKLXZv
aWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZENoYW5nZVZpZXdwb3J0KCkK
K3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQoKQogewogICAgIEZsb2F0UmVj
dCB2aXNpYmxlUmVjdChtX3ZpZXdwb3J0Q29udHJvbGxlci52aXNpYmxlQ29udGVudHNSZWN0KCkp
OwogICAgIGlmICh2aXNpYmxlUmVjdC5pc0VtcHR5KCkpCkBAIC0yMzgsNyArMjk2LDggQEAgdm9p
ZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkQ2hhbmdlVmlld3BvcnQoKQog
ICAgIGlmIChzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpCiAg
ICAgICAgIHZpc2libGVSZWN0LmV4cGFuZCgwLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKIAotICAg
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxl
UmVjdCk7CisgICAgbV9jb29yZGluYXRvci5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVS
ZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKIAogICAgIGZsb2F0IHBhZ2VTY2FsZSA9
IG1fdmlld3BvcnRDb250cm9sbGVyLnBhZ2VTY2FsZUZhY3RvcigpOwogICAgIEludFBvaW50IHNj
cm9sbFBvc2l0aW9uID0gcm91bmRlZEludFBvaW50KHZpc2libGVSZWN0LmxvY2F0aW9uKCkpOwpA
QCAtMjU2LDEzICszMTUsNyBAQCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpkaWRDaGFuZ2VWaWV3cG9ydCgpCiAgICAgfQogfQogCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojpjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZSYgc3RhdGUpCi17Ci0gICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRT
Y2VuZVN0YXRlKHN0YXRlKTsKLSAgICBtX2NvbXBvc2l0b3ItPnVwZGF0ZVNjZW5lU3RhdGUoc3Rh
dGUpOwotfQotCi12b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRJc0Rp
c2NhcmRhYmxlKGJvb2wgZGlzY2FyZGFibGUpCit2b2lkIExheWVyVHJlZUhvc3Q6OnNldElzRGlz
Y2FyZGFibGUoYm9vbCBkaXNjYXJkYWJsZSkKIHsKICAgICBtX2lzRGlzY2FyZGFibGUgPSBkaXNj
YXJkYWJsZTsKICAgICBpZiAobV9pc0Rpc2NhcmRhYmxlKSB7CkBAIC0yODgsMTMgKzM0MSwxMjkg
QEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJs
ZShib29sIGRpc2NhcmRhYmxlKQogICAgICAgICBkaWRDaGFuZ2VWaWV3cG9ydCgpOwogfQogCisj
aWYgUExBVEZPUk0oR1RLKSAmJiBQTEFURk9STShYMTEpICYmICFVU0UoUkVESVJFQ1RFRF9YQ09N
UE9TSVRFX1dJTkRPVykKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0TmF0aXZlU3VyZmFjZUhhbmRs
ZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90IGhhbmRsZSkKK3sKKyAgICBtX2xheWVyVHJlZUNvbnRl
eHQuY29udGV4dElEID0gaGFuZGxlOworICAgIG1fY29tcG9zaXRvci0+c2V0TmF0aXZlU3VyZmFj
ZUhhbmRsZUZvckNvbXBvc2l0aW5nKGhhbmRsZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Cit9CisjZW5kaWYKKwordm9pZCBMYXllclRyZWVIb3N0OjpkZXZpY2VPclBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWQoKQoreworICAgIGlmIChtX2lzRGlzY2FyZGFibGUpIHsKKyAgICAgICAgbV9kaXNj
YXJkYWJsZVN5bmNBY3Rpb25zLmFkZChEaXNjYXJkYWJsZVN5bmNBY3Rpb25zOjpVcGRhdGVTY2Fs
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zdXJmYWNlICYmIG1fc3Vy
ZmFjZS0+aG9zdFJlc2l6ZShtX3dlYlBhZ2Uuc2l6ZSgpKSkKKyAgICAgICAgbV9sYXllclRyZWVD
b250ZXh0LmNvbnRleHRJRCA9IG1fc3VyZmFjZS0+c3VyZmFjZUlEKCk7CisKKyAgICBtX2Nvb3Jk
aW5hdG9yLmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworICAgIG1fd2ViUGFnZS5j
b3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZh
Y3RvcigpOworICAgIG1fY29tcG9zaXRvci0+c2V0U2NhbGVGYWN0b3IobV93ZWJQYWdlLmRldmlj
ZVNjYWxlRmFjdG9yKCkgKiBtX3ZpZXdwb3J0Q29udHJvbGxlci5wYWdlU2NhbGVGYWN0b3IoKSk7
Cit9CisKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQot
UmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3Bs
YXlJRCBkaXNwbGF5SUQpCitSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBMYXllclRyZWVI
b3N0OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxh
eUlEKQogewogICAgIHJldHVybiBtX2NvbXBvc2l0b3ItPmRpc3BsYXlSZWZyZXNoTW9uaXRvcihk
aXNwbGF5SUQpOwogfQogI2VuZGlmCiAKK3ZvaWQgTGF5ZXJUcmVlSG9zdDo6ZGlkRmx1c2hSb290
TGF5ZXIoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpCit7CisgICAgLy8gQmVj
YXVzZSBvdXIgdmlldy1yZWxhdGl2ZSBvdmVybGF5IHJvb3QgbGF5ZXIgaXMgbm90IGF0dGFjaGVk
IHRvIHRoZSBGcmFtZVZpZXcncyBHcmFwaGljc0xheWVyIHRyZWUsIHdlIG5lZWQgdG8gZmx1c2gg
aXQgbWFudWFsbHkuCisgICAgaWYgKG1fdmlld092ZXJsYXlSb290TGF5ZXIpCisgICAgICAgIG1f
dmlld092ZXJsYXlSb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSh2aXNpYmxlQ29udGVu
dFJlY3QpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBtX2lzV2FpdGluZ0ZvclJl
bmRlcmVyID0gdHJ1ZTsKKyAgICBtX2NvbXBvc2l0b3ItPnVwZGF0ZVNjZW5lU3RhdGUoc3RhdGUp
OworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmZyYW1lQ29tcGxldGUoKQoreworICAgIG1fY29t
cG9zaXRvci0+ZnJhbWVDb21wbGV0ZSgpOworfQorCit1aW50NjRfdCBMYXllclRyZWVIb3N0Ojpu
YXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoKQoreworICAgIGlmICghbV9zdXJmYWNl
KQorICAgICAgICByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0LmNvbnRleHRJRDsKKworICAgIG1f
c3VyZmFjZS0+aW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBtX3N1cmZhY2UtPndpbmRvdygpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3Q6OmRpZERlc3Ryb3lHTENvbnRleHQoKQoreworICAgIGlm
IChtX3N1cmZhY2UpCisgICAgICAgIG1fc3VyZmFjZS0+ZmluYWxpemUoKTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0Ojp3aWxsUmVuZGVyRnJhbWUoKQoreworICAgIGlmIChtX3N1cmZhY2UpCisg
ICAgICAgIG1fc3VyZmFjZS0+d2lsbFJlbmRlckZyYW1lKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
SG9zdDo6ZGlkUmVuZGVyRnJhbWUoKQoreworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1f
c3VyZmFjZS0+ZGlkUmVuZGVyRnJhbWUoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpyZXF1
ZXN0RGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKCkKK3sKKyAgICAvLyBGbHVzaCBsYXllcnMg
dG8gY2F1c2UgYSByZXBhaW50LiBJZiBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyIHdhcyB0cnVlIGF0
IHRoaXMgcG9pbnQsIHRoZSBsYXllcgorICAgIC8vIGZsdXNoIHdvbid0IGRvIGFueXRoaW5nLCBi
dXQgdGhhdCBtZWFucyB0aGVyZSdzIGEgcGFpbnRpbmcgb25nb2luZyB0aGF0IHdpbGwgc2VuZCB0
aGUKKyAgICAvLyBkaXNwbGF5IHJlZnJlc2ggbm90aWZpY2F0aW9uIHdoZW4gaXQncyBkb25lLgor
ICAgIG1fY29vcmRpbmF0b3IuZm9yY2VGcmFtZVN5bmMoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1
c2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0
b3JVcGRhdGUoYm9vbCBoYXNCZWVuUmVzY2hlZHVsZWQpCit7CisgICAgLy8gQ2FsbCByZW5kZXJO
ZXh0RnJhbWUuIElmIGhhc0JlZW5SZXNjaGVkdWxlZCBpcyB0cnVlLCB0aGUgbGF5ZXIgZmx1c2gg
d2lsbCBmb3JjZSBhIHJlcGFpbnQKKyAgICAvLyB0aGF0IHdpbGwgY2F1c2UgdGhlIGRpc3BsYXkg
cmVmcmVzaCBub3RpZmljYXRpb24gdG8gY29tZS4KKyAgICByZW5kZXJOZXh0RnJhbWUoaGFzQmVl
blJlc2NoZWR1bGVkKTsKKyAgICBtX2NvbXBvc2l0b3ItPmhhbmRsZURpc3BsYXlSZWZyZXNoTW9u
aXRvclVwZGF0ZSgpOworfQorCit2b2lkIExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZShi
b29sIGZvcmNlUmVwYWludCkKK3sKKyAgICBtX2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7
CisgICAgYm9vbCBzY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciA9IHN0ZDo6ZXhjaGFu
Z2UobV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciwgZmFsc2UpOworICAgIG1fY29v
cmRpbmF0b3IucmVuZGVyTmV4dEZyYW1lKCk7CisKKyAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3lu
Yy5jYWxsYmFja0lEKSB7CisgICAgICAgIC8vIElmIHRoZSBhc3luY2hyb25vdXMgZm9yY2UtcmVw
YWludCBuZWVkcyBhIHNlcGFyYXRlIGZyZXNoIGZsdXNoLCBpdCB3YXMgZHVlIHRvCisgICAgICAg
IC8vIHRoZSBmb3JjZS1yZXBhaW50IHJlcXVlc3QgYmVpbmcgcmVnaXN0ZXJlZCB3aGlsZSBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Qgd2FzCisgICAgICAgIC8vIHdhaXRpbmcgZm9yIHRoZSByZW5k
ZXJlciB0byBmaW5pc2ggYW4gdXBkYXRlLgorICAgICAgICBBU1NFUlQoIW1fZm9yY2VSZXBhaW50
QXN5bmMubmVlZHNGcmVzaEZsdXNoIHx8IHNjaGVkdWxlZFdoaWxlV2FpdGluZ0ZvclJlbmRlcmVy
KTsKKworICAgICAgICAvLyBFeGVjdXRlIHRoZSBjYWxsYmFjayBpZiBhbm90aGVyIGxheWVyIGZs
dXNoIGFuZCB0aGUgc3Vic2VxdWVudCBzdGF0ZSB1cGRhdGUKKyAgICAgICAgLy8gYXJlbid0IG5l
ZWRlZC4gSWYgdGhleSBhcmUsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhp
cyBmdW5jdGlvbgorICAgICAgICAvLyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG5leHQgdXBkYXRlLgor
ICAgICAgICBpZiAoIW1fZm9yY2VSZXBhaW50QXN5bmMubmVlZHNGcmVzaEZsdXNoKSB7CisgICAg
ICAgICAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJh
Y2sobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lELmNhbGxiYWNrSUQoKSkpOworICAgICAg
ICAgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEID0gT3B0aW9uYWxDYWxsYmFja0lE
KCk7CisgICAgICAgIH0KKyAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luYy5uZWVkc0ZyZXNoRmx1
c2ggPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2NoZWR1bGVkV2hpbGVXYWl0aW5nRm9yUmVu
ZGVyZXIgfHwgbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSB8fCBmb3JjZVJlcGFpbnQpIHsK
KyAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOworICAgICAgICBpZiAoZm9yY2VSZXBh
aW50KQorICAgICAgICAgICAgbV9jb29yZGluYXRvci5mb3JjZUZyYW1lU3luYygpOworICAgICAg
ICBsYXllckZsdXNoVGltZXJGaXJlZCgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi45NDVhM2EzZTdmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlSG9zdC5oCkBAIC0w
LDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFjY2VsZXJhdGVkU3VyZmFjZS5o
IgorI2luY2x1ZGUgIkNhbGxiYWNrSUQuaCIKKyNpbmNsdWRlICJDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIk9wdGlvbmFs
Q2FsbGJhY2tJRC5oIgorI2luY2x1ZGUgIlNpbXBsZVZpZXdwb3J0Q29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIlRocmVhZGVkQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlRocmVhZGVkRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEludFJlY3Q7
CitjbGFzcyBJbnRTaXplOworY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIEdyYXBoaWNzTGF5
ZXJGYWN0b3J5Oworc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZTsKK3N0cnVjdCBWaWV3
cG9ydEF0dHJpYnV0ZXM7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdl
OworCitjbGFzcyBMYXllclRyZWVIb3N0CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RI
UkVBREVEKQorICAgIGZpbmFsIDogcHVibGljIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVu
dCwgcHVibGljIEFjY2VsZXJhdGVkU3VyZmFjZTo6Q2xpZW50CisjZW5kaWYKK3sKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBMYXllclRyZWVIb3N0
KFdlYlBhZ2UmKTsKKyAgICB+TGF5ZXJUcmVlSG9zdCgpOworCisgICAgY29uc3QgTGF5ZXJUcmVl
Q29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29u
dGV4dDsgfQorICAgIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOwor
ICAgIHZvaWQgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29s
KTsKKworICAgIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdm9pZCBjYW5jZWxQZW5k
aW5nTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0Vmlld092ZXJsYXlSb290TGF5ZXIoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9p
ZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwor
ICAgIHZvaWQgZm9yY2VSZXBhaW50KCk7CisgICAgYm9vbCBmb3JjZVJlcGFpbnRBc3luYyhDYWxs
YmFja0lEKTsKKyAgICB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
bmV3U2l6ZSk7CisKKyAgICB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7CisgICAgdm9pZCByZXN1bWVS
ZW5kZXJpbmcoKTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGlj
c0xheWVyRmFjdG9yeSgpOworCisgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKTsKKyAgICB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhX
ZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmJik7CisKKyAgICB2b2lkIHNldElzRGlzY2FyZGFi
bGUoYm9vbCk7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKEdUSykK
KyAgICB2b2lkIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCk7
CisjZW5kaWYKKworICAgIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisK
KyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQorICAgIFJl
ZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNo
TW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCk7CisjZW5kaWYKKworcHJpdmF0ZToK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisgICAgdm9pZCBsYXllckZs
dXNoVGltZXJGaXJlZCgpOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnQoKTsKKyAgICB2b2lk
IHJlbmRlck5leHRGcmFtZShib29sKTsKKworICAgIC8vIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OkNsaWVudAorICAgIHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpIG92ZXJyaWRlOworICAgIHZvaWQgbm90aWZ5Rmx1c2hS
ZXF1aXJlZCgpIG92ZXJyaWRlIHsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH07CisgICAgdm9pZCBj
b21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYp
IG92ZXJyaWRlOworCisgICAgLy8gQWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQKKyAgICB2b2lk
IGZyYW1lQ29tcGxldGUoKSBvdmVycmlkZTsKKworICAgIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VI
YW5kbGVGb3JDb21wb3NpdGluZygpOworICAgIHZvaWQgZGlkRGVzdHJveUdMQ29udGV4dCgpOwor
ICAgIHZvaWQgd2lsbFJlbmRlckZyYW1lKCk7CisgICAgdm9pZCBkaWRSZW5kZXJGcmFtZSgpOwor
ICAgIHZvaWQgcmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOworICAgIHZvaWQg
aGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wpOworCisgICAgY2xhc3MgQ29t
cG9zaXRvckNsaWVudCBmaW5hbCA6IHB1YmxpYyBUaHJlYWRlZENvbXBvc2l0b3I6OkNsaWVudCwg
cHVibGljIFRocmVhZGVkRGlzcGxheVJlZnJlc2hNb25pdG9yOjpDbGllbnQgIHsKKyAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcG9zaXRvckNsaWVudCk7CisgICAgcHVibGljOgorICAg
ICAgICBDb21wb3NpdG9yQ2xpZW50KExheWVyVHJlZUhvc3QmIGxheWVyVHJlZUhvc3QpCisgICAg
ICAgICAgICA6IG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5k
bGVGb3JDb21wb3NpdGluZygpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2xheWVyVHJlZUhvc3QubmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGRpZERlc3Ryb3lHTENvbnRleHQoKSBvdmVycmlkZQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QuZGlkRGVzdHJveUdMQ29udGV4
dCgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC5t
X3N1cmZhY2UpCisgICAgICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0Lm1fc3VyZmFjZS0+Y2xp
ZW50UmVzaXplKHNpemUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB3aWxsUmVuZGVyRnJh
bWUoKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3Qud2ls
bFJlbmRlckZyYW1lKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGRpZFJlbmRlckZyYW1l
KCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LmRpZFJl
bmRlckZyYW1lKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJlcXVlc3REaXNwbGF5UmVm
cmVzaE1vbml0b3JVcGRhdGUoKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBtX2xh
eWVyVHJlZUhvc3QucmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9v
bCBoYXNCZWVuUmVzY2hlZHVsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC5oYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoaGFzQmVlblJlc2NoZWR1bGVk
KTsKKyAgICAgICAgfQorCisgICAgICAgIExheWVyVHJlZUhvc3QmIG1fbGF5ZXJUcmVlSG9zdDsK
KyAgICB9OworCisgICAgZW51bSBjbGFzcyBEaXNjYXJkYWJsZVN5bmNBY3Rpb25zIHsKKyAgICAg
ICAgVXBkYXRlU2l6ZSA9IDEgPDwgMSwKKyAgICAgICAgVXBkYXRlVmlld3BvcnQgPSAxIDw8IDIs
CisgICAgICAgIFVwZGF0ZVNjYWxlID0gMSA8PCAzCisgICAgfTsKKyNlbmRpZiAvLyBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisKKyAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7Cisg
ICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7CisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTX1RIUkVBREVEKQorICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVz
aCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKKyAgICBib29s
IG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICBib29sIG1faXNXYWl0aW5nRm9yUmVuZGVyZXIgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdGb3JSZW5kZXJlciB7IGZh
bHNlIH07CisgICAgZmxvYXQgbV9sYXN0UGFnZVNjYWxlRmFjdG9yIHsgMSB9OworICAgIFdlYkNv
cmU6OkludFBvaW50IG1fbGFzdFNjcm9sbFBvc2l0aW9uOworICAgIGJvb2wgbV9pc0Rpc2NhcmRh
YmxlIHsgZmFsc2UgfTsKKyAgICBPcHRpb25TZXQ8RGlzY2FyZGFibGVTeW5jQWN0aW9ucz4gbV9k
aXNjYXJkYWJsZVN5bmNBY3Rpb25zOworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmll
d092ZXJsYXlSb290TGF5ZXIgeyBudWxscHRyIH07CisgICAgQ29tcG9zaXRpbmdDb29yZGluYXRv
ciBtX2Nvb3JkaW5hdG9yOworICAgIENvbXBvc2l0b3JDbGllbnQgbV9jb21wb3NpdG9yQ2xpZW50
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2NlbGVyYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKKyAg
ICBSZWZQdHI8VGhyZWFkZWRDb21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7CisgICAgU2ltcGxlVmll
d3BvcnRDb250cm9sbGVyIG1fdmlld3BvcnRDb250cm9sbGVyOworICAgIHN0cnVjdCB7CisgICAg
ICAgIE9wdGlvbmFsQ2FsbGJhY2tJRCBjYWxsYmFja0lEOworICAgICAgICBib29sIG5lZWRzRnJl
c2hGbHVzaCB7IGZhbHNlIH07CisgICAgfSBtX2ZvcmNlUmVwYWludEFzeW5jOworICAgIFJ1bkxv
b3A6OlRpbWVyPExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOworI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKK307CisKKyNpZiAhVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTX1RIUkVBREVEKQoraW5saW5lIExheWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhv
c3QoV2ViUGFnZSYgd2ViUGFnZSkgOiBtX3dlYlBhZ2Uod2ViUGFnZSkgeyB9CitpbmxpbmUgTGF5
ZXJUcmVlSG9zdDo6fkxheWVyVHJlZUhvc3QoKSB7IH0KK2lubGluZSB2b2lkIExheWVyVHJlZUhv
c3Q6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKSB7IH0KK2lubGluZSB2b2lk
IExheWVyVHJlZUhvc3Q6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1
c2goYm9vbCkgeyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0OjpzY2hlZHVsZUxheWVyRmx1
c2goKSB7IH0KK2lubGluZSB2b2lkIExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZs
dXNoKCkgeyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdM
YXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVI
b3N0OjpzZXRWaWV3T3ZlcmxheVJvb3RMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9
CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkgeyB9CitpbmxpbmUgdm9p
ZCBMYXllclRyZWVIb3N0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpIHsgfQoraW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50
KCkgeyB9CitpbmxpbmUgYm9vbCBMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyhDYWxs
YmFja0lEKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6c2l6
ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgeyB9CitpbmxpbmUgdm9pZCBMYXll
clRyZWVIb3N0OjpwYXVzZVJlbmRlcmluZygpIHsgfQoraW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9z
dDo6cmVzdW1lUmVuZGVyaW5nKCkgeyB9CitpbmxpbmUgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZh
Y3RvcnkqIExheWVyVHJlZUhvc3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgeyByZXR1cm4gbnVs
bHB0cjsgfQoraW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6Y29udGVudHNTaXplQ2hhbmdlZChj
b25zdCBXZWJDb3JlOjpJbnRTaXplJikgeyB9CitpbmxpbmUgdm9pZCBMYXllclRyZWVIb3N0Ojpk
aWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiYp
IHsgfQoraW5saW5lIHZvaWQgTGF5ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJsZShib29sKSB7
IH0KK2lubGluZSB2b2lkIExheWVyVHJlZUhvc3Q6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZCgpIHsgfQorI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklU
T1IpCitpbmxpbmUgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlz
cGxheUlEKSB7IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYKKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjI4NzYxNjJlNjkuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi0KLSNpbmNsdWRlICJBY2NlbGVyYXRlZFN1
cmZhY2UuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRl
ICJTaW1wbGVWaWV3cG9ydENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJUaHJlYWRlZENvbXBvc2l0
b3IuaCIKLSNpbmNsdWRlICJUaHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgotI2luY2x1
ZGUgPHd0Zi9PcHRpb25TZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NMYXllcjsKLXN0cnVjdCBDb29yZGluYXRlZEdyYXBo
aWNzU3RhdGU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlOwotCi1j
bGFzcyBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBmaW5hbCA6IHB1YmxpYyBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QsIHB1YmxpYyBBY2NlbGVyYXRlZFN1cmZhY2U6OkNsaWVudCB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dD4gY3JlYXRlKFdlYlBhZ2UmKTsKLSAgICB2aXJ0dWFsIH5UaHJlYWRlZENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdCgpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFRocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UmKTsKLQotICAgIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRl
ZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViQ29yZTo6Vmll
d3BvcnRBdHRyaWJ1dGVzJiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBpbnZhbGlkYXRlKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGZvcmNlUmVwYWludCgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBz
ZXRJc0Rpc2NhcmRhYmxlKGJvb2wpIG92ZXJyaWRlOwotCi0jaWYgUExBVEZPUk0oR1RLKSAmJiBQ
TEFURk9STShYMTEpICYmICAhVVNFKFJFRElSRUNURURfWENPTVBPU0lURV9XSU5ET1cpCi0gICAg
dm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QpIG92ZXJy
aWRlOwotI2VuZGlmCi0KLSAgICBjbGFzcyBDb21wb3NpdG9yQ2xpZW50IGZpbmFsIDogcHVibGlj
IFRocmVhZGVkQ29tcG9zaXRvcjo6Q2xpZW50LCBwdWJsaWMgVGhyZWFkZWREaXNwbGF5UmVmcmVz
aE1vbml0b3I6OkNsaWVudCAgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21wb3Np
dG9yQ2xpZW50KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENvbXBvc2l0b3JDbGllbnQoVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QmIGxheWVyVHJlZUhvc3QpCi0gICAgICAgICAgICA6
IG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQotICAgICAgICB7Ci0gICAgICAgIH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIHVpbnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21w
b3NpdGluZygpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2xheWVy
VHJlZUhvc3QubmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGRpZERlc3Ryb3lHTENvbnRleHQoKSBvdmVycmlkZQotICAgICAgICB7
Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QuZGlkRGVzdHJveUdMQ29udGV4dCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdC5tX3N1cmZhY2Up
Ci0gICAgICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0Lm1fc3VyZmFjZS0+Y2xpZW50UmVzaXpl
KHNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3aWxsUmVuZGVyRnJhbWUoKSBvdmVy
cmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3Qud2lsbFJlbmRlckZy
YW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCkgb3ZlcnJp
ZGUKLSAgICAgICAgewotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LmRpZFJlbmRlckZyYW1l
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlcXVlc3REaXNwbGF5UmVmcmVzaE1vbml0
b3JVcGRhdGUoKSBvdmVycmlkZQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhv
c3QucmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9vbCBoYXNCZWVu
UmVzY2hlZHVsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC5oYW5k
bGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoaGFzQmVlblJlc2NoZWR1bGVkKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0JiBtX2xheWVy
VHJlZUhvc3Q7Ci0gICAgfTsKLQotICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnQoKTsKLQotICAg
IC8vIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAotICAgIHZvaWQgZGlkRmx1c2hSb290
TGF5ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBj
b21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYp
IG92ZXJyaWRlOwotCi0jaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9O
SVRPUikKLSAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIG92ZXJyaWRl
OwotI2VuZGlmCi0KLSAgICAvLyBBY2NlbGVyYXRlZFN1cmZhY2U6OkNsaWVudAotICAgIHZvaWQg
ZnJhbWVDb21wbGV0ZSgpIG92ZXJyaWRlOwotCi0gICAgdWludDY0X3QgbmF0aXZlU3VyZmFjZUhh
bmRsZUZvckNvbXBvc2l0aW5nKCk7Ci0gICAgdm9pZCBkaWREZXN0cm95R0xDb250ZXh0KCk7Ci0g
ICAgdm9pZCB3aWxsUmVuZGVyRnJhbWUoKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7Ci0g
ICAgdm9pZCByZXF1ZXN0RGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKCk7Ci0gICAgdm9pZCBo
YW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoYm9vbCk7Ci0KLSAgICBlbnVtIGNsYXNz
IERpc2NhcmRhYmxlU3luY0FjdGlvbnMgewotICAgICAgICBVcGRhdGVTaXplID0gMSA8PCAxLAot
ICAgICAgICBVcGRhdGVWaWV3cG9ydCA9IDEgPDwgMiwKLSAgICAgICAgVXBkYXRlU2NhbGUgPSAx
IDw8IDMKLSAgICB9OwotCi0gICAgQ29tcG9zaXRvckNsaWVudCBtX2NvbXBvc2l0b3JDbGllbnQ7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFjY2VsZXJhdGVkU3VyZmFjZT4gbV9zdXJmYWNlOwotICAg
IFJlZlB0cjxUaHJlYWRlZENvbXBvc2l0b3I+IG1fY29tcG9zaXRvcjsKLSAgICBTaW1wbGVWaWV3
cG9ydENvbnRyb2xsZXIgbV92aWV3cG9ydENvbnRyb2xsZXI7Ci0gICAgZmxvYXQgbV9sYXN0UGFn
ZVNjYWxlRmFjdG9yIHsgMSB9OwotICAgIFdlYkNvcmU6OkludFBvaW50IG1fbGFzdFNjcm9sbFBv
c2l0aW9uOwotICAgIGJvb2wgbV9pc0Rpc2NhcmRhYmxlIHsgZmFsc2UgfTsKLSAgICBPcHRpb25T
ZXQ8RGlzY2FyZGFibGVTeW5jQWN0aW9ucz4gbV9kaXNjYXJkYWJsZVN5bmNBY3Rpb25zOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1NfVEhSRUFERUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWFJbXBsLmNwcAppbmRleCA0NGViMmRiNjY5OC4uNjNkNTE1YWU5MGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcApAQCAtNjEsNyArNjEsNiBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6c2V0TmVlZHNE
aXNwbGF5KCkKIHsKICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgIEFTU0VSVCht
X2RpcnR5UmVnaW9uLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6
OnNldE5lZWRzRGlzcGxheSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03Miw3ICs3
MSw2IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgIEFT
U0VSVChtX2RpcnR5UmVnaW9uLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFjY2VsZXJhdGVkRHJhd2lu
Z0FyZWE6OnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJU
cmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3ZmIwYzZjYmIuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhv
c3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRF
WFRVUkVfTUFQUEVSKQotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgotCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotI2luY2x1ZGUgIlRocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6
OmNyZWF0ZShXZWJQYWdlJiB3ZWJQYWdlKQotewotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
U19USFJFQURFRCkKLSAgICByZXR1cm4gVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNyZWF0ZSh3ZWJQYWdlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHdlYlBhZ2UpOwotICAg
IHJldHVybiBudWxscHRyOwotI2VuZGlmCi19Ci0KLUxheWVyVHJlZUhvc3Q6OkxheWVyVHJlZUhv
c3QoV2ViUGFnZSYgd2ViUGFnZSkKLSAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQotewotfQotCi1M
YXllclRyZWVIb3N0Ojp+TGF5ZXJUcmVlSG9zdCgpCi17Ci0gICAgQVNTRVJUKCFtX2lzVmFsaWQp
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3Q6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxl
ZChib29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQotewotICAgIGlmIChtX2xheWVyRmx1c2hTY2hl
ZHVsaW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5hYmxl
ZDsKLQotICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgewotICAgICAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhbmNl
bFBlbmRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdDo6cGF1c2VSZW5k
ZXJpbmcoKQotewotICAgIG1faXNTdXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIExheWVyVHJl
ZUhvc3Q6OnJlc3VtZVJlbmRlcmluZygpCi17Ci0gICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwot
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3Q6OmludmFs
aWRhdGUoKQotewotICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1faXNWYWxpZCA9IGZhbHNl
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1M2MzOTgyOTllNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExheWVyVHJlZUhvc3RfaAotI2RlZmlu
ZSBMYXllclRyZWVIb3N0X2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNF
KFRFWFRVUkVfTUFQUEVSKQotCi0jaW5jbHVkZSAiQ2FsbGJhY2tJRC5oIgotI2luY2x1ZGUgIkxh
eWVyVHJlZUNvbnRleHQuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KLSNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIENvbm5lY3Rpb247Ci19Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgR3Jh
cGhpY3NMYXllcjsKLWNsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5OwotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDU19USFJFQURFRCkKLXN0cnVjdCBWaWV3cG9ydEF0dHJpYnV0ZXM7Ci0jZW5k
aWYKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIExh
eWVyVHJlZUhvc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclRyZWVIb3N0PiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZlB0cjxMYXllclRyZWVIb3N0PiBjcmVhdGUoV2ViUGFnZSYpOwotICAg
IHZpcnR1YWwgfkxheWVyVHJlZUhvc3QoKTsKLQotICAgIGNvbnN0IExheWVyVHJlZUNvbnRleHQm
IGxheWVyVHJlZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0K
LSAgICB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAgICB2b2lk
IHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCBub3RpZnlB
ZnRlclNjaGVkdWxlZExheWVyRmx1c2gpIHsgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1
c2ggPSBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZUxheWVyRmx1c2goKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdM
YXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbnZh
bGlkYXRlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVl
ZERpc3BsYXkoKSB7IH07Ci0gICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50
c05lZWREaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH07Ci0gICAgdmly
dHVhbCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JikgeyB9OwotICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIGZvcmNlUmVwYWludEFzeW5jKENhbGxiYWNrSUQpIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
bmV3U2l6ZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSB7IHJldHVybiBudWxs
cHRyOyB9Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi0gICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIHsg
fTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyYmKSB7IH07Ci0jZW5kaWYKLQotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldElzRGlzY2FyZGFibGUoYm9vbCkgeyB9OwotI2VuZGlmCi0KLSNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKEdUSykKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90KSB7IH07Ci0j
ZW5kaWYKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQ
UEVSKQotICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSA9
IDA7Ci0jZW5kaWYKLQotI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01P
TklUT1IpCi0gICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9y
PiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQp
IHsgcmV0dXJuIG51bGxwdHI7IH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldFZpZXdP
dmVybGF5Um9vdExheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExh
eWVyKSB7IG1fdmlld092ZXJsYXlSb290TGF5ZXIgPSB2aWV3T3ZlcmxheVJvb3RMYXllcjsgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTGF5ZXJUcmVlSG9zdChXZWJQYWdlJik7Ci0KLSAg
ICBXZWJQYWdlJiBtX3dlYlBhZ2U7Ci0gICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNv
bnRleHQ7Ci0gICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCB7IHRydWUgfTsK
LSAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1faXNTdXNwZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc1ZhbGlkIHsgdHJ1
ZSB9OwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fdmlld092ZXJsYXlSb290TGF5ZXIg
eyBudWxscHRyIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykgfHwgVVNFKFRFWFRVUkVfTUFQUEVSKQotCi0jZW5kaWYg
Ly8gTGF5ZXJUcmVlSG9zdF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>