<?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>128363</bug_id>
          
          <creation_ts>2014-02-06 22:59:10 -0800</creation_ts>
          <short_desc>WebKit2 View Gestures (Swipe): Support for iOS</short_desc>
          <delta_ts>2014-02-07 16:53:38 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>mkwst</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>977737</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-02-06 22:59:10 -0800</bug_when>
    <thetext>&lt;rdar://problem/15194194&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977756</commentid>
    <comment_count>1</comment_count>
      <attachid>223432</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-02-07 01:36:36 -0800</bug_when>
    <thetext>Created attachment 223432
very preliminary

Caveats:

- will not build for the simulator
- forward swipe isn&apos;t working yet (no idea why)
- doesn&apos;t inform the app about the swipe state
- no changelog
- patch appears bigger than it actually is because of a rename (will split that out)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>977856</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-07 09:58:05 -0800</bug_when>
    <thetext>Attachment 223432 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.h:37:  _UIViewControllerTransitionContext is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.h:38:  _UINavigationInteractiveTransitionBase is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.h:54:  The parameter name &quot;transition&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 19 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>978126</commentid>
    <comment_count>3</comment_count>
      <attachid>223511</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-02-07 16:23:54 -0800</bug_when>
    <thetext>Created attachment 223511
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978131</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-07 16:26:31 -0800</bug_when>
    <thetext>Attachment 223511 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/ViewGestureController.h:39:  _UIViewControllerTransitionContext is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/UIProcess/mac/ViewGestureController.h:40:  _UINavigationInteractiveTransitionBase is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 18 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>978138</commentid>
    <comment_count>5</comment_count>
      <attachid>223511</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-02-07 16:31:11 -0800</bug_when>
    <thetext>Comment on attachment 223511
patch

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

&gt; Source/WebKit2/UIProcess/API/ios/WKContentView.h:52
&gt; +- (CGImageRef)takeViewSnapshotForContentView:(WKContentView *)contentView;

I think this should return a RetainPtr as well.

&gt; Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.mm:52
&gt; +@interface WKSwipeInteractiveTransitionDelegate : NSObject &lt;_UINavigationInteractiveTransitionBaseDelegate&gt;

This is not a delegate. How about TransitionController?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978147</commentid>
    <comment_count>6</comment_count>
      <attachid>223516</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-02-07 16:42:19 -0800</bug_when>
    <thetext>Created attachment 223516
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978148</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-07 16:45:29 -0800</bug_when>
    <thetext>Attachment 223516 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/ViewGestureController.h:39:  _UIViewControllerTransitionContext is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/UIProcess/mac/ViewGestureController.h:40:  _UINavigationInteractiveTransitionBase is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 18 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>978155</commentid>
    <comment_count>8</comment_count>
      <attachid>223518</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-02-07 16:49:48 -0800</bug_when>
    <thetext>Created attachment 223518
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978159</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-07 16:51:21 -0800</bug_when>
    <thetext>Attachment 223518 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/ViewGestureController.h:39:  _UIViewControllerTransitionContext is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebKit2/UIProcess/mac/ViewGestureController.h:40:  _UINavigationInteractiveTransitionBase is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 18 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>978160</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-02-07 16:53:38 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/163666</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223432</attachid>
            <date>2014-02-07 01:36:36 -0800</date>
            <delta_ts>2014-02-07 16:23:54 -0800</delta_ts>
            <desc>very preliminary</desc>
            <filename>swipe-ios.diff</filename>
            <type>text/plain</type>
            <size>99106</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb24uaAppbmRleCAzMjAwYmY3Li40NDU1MGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oCkBAIC0xNjAs
NiArMTYwLDkgQEAgcHVibGljOgogCiAgICAgZG91YmxlIHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1fcGFnZVNjYWxlRmFjdG9yOyB9CiAgICAgdm9pZCBzZXRQYWdlU2NhbGVGYWN0
b3IoZG91YmxlIHBhZ2VTY2FsZUZhY3RvcikgeyBtX3BhZ2VTY2FsZUZhY3RvciA9IHBhZ2VTY2Fs
ZUZhY3RvcjsgfQorICAgIAorICAgIHVpbnQ2NF90IHJlbmRlclRyZWVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJUcmVlU2l6ZTsgfQorICAgIHZvaWQgc2V0UmVuZGVyVHJlZVNpemUodWlu
dDY0X3QgcmVuZGVyVHJlZVNpemUpIHsgbV9yZW5kZXJUcmVlU2l6ZSA9IHJlbmRlclRyZWVTaXpl
OyB9CiAKICAgICBkb3VibGUgbWluaW11bVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9t
aW5pbXVtU2NhbGVGYWN0b3I7IH0KICAgICB2b2lkIHNldE1pbmltdW1TY2FsZUZhY3Rvcihkb3Vi
bGUgc2NhbGUpIHsgbV9taW5pbXVtU2NhbGVGYWN0b3IgPSBzY2FsZTsgfQpAQCAtMTc3LDYgKzE4
MCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRm
b3JtTGF5ZXJJRD4gbV9kZXN0cm95ZWRMYXllcklEczsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1f
Y29udGVudHNTaXplOwogICAgIGRvdWJsZSBtX3BhZ2VTY2FsZUZhY3RvcjsKKyAgICB1aW50NjRf
dCBtX3JlbmRlclRyZWVTaXplOwogICAgIGRvdWJsZSBtX21pbmltdW1TY2FsZUZhY3RvcjsKICAg
ICBkb3VibGUgbV9tYXhpbXVtU2NhbGVGYWN0b3I7CiAgICAgYm9vbCBtX2FsbG93c1VzZXJTY2Fs
aW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24ubW0KaW5kZXggMjNmMzVkYy4uNTEyYzQwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1t
CkBAIC0zNTMsNiArMzUzLDcgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6ZW5j
b2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwg
bV9taW5pbXVtU2NhbGVGYWN0b3I7CiAgICAgZW5jb2RlciA8PCBtX21heGltdW1TY2FsZUZhY3Rv
cjsKICAgICBlbmNvZGVyIDw8IG1fYWxsb3dzVXNlclNjYWxpbmc7CisgICAgZW5jb2RlciA8PCBt
X3JlbmRlclRyZWVTaXplOwogfQogCiBib29sIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpk
ZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uJiByZXN1bHQpCkBAIC0zOTAsNiArMzkxLDkgQEAgYm9vbCBSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBSZW1vdGVM
YXkKIAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fYWxsb3dzVXNlclNjYWxpbmcp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQubV9yZW5kZXJUcmVlU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1ZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLVmlld1ByaXZhdGUuaAppbmRleCAwNWY2MmI3Li44ZTkxZDI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaApAQCAtNzAsNyAr
NzAsNiBAQAogQHByb3BlcnR5IChyZWFkb25seSwgZ2V0dGVyPWlzVXNpbmdVSVNpZGVDb21wb3Np
dGluZykgQk9PTCB1c2luZ1VJU2lkZUNvbXBvc2l0aW5nOwogQHByb3BlcnR5IChyZWFkd3JpdGUp
IEJPT0wgYWxsb3dzTWFnbmlmaWNhdGlvbjsKIEBwcm9wZXJ0eSAocmVhZHdyaXRlKSBkb3VibGUg
bWFnbmlmaWNhdGlvbjsKLUBwcm9wZXJ0eSAocmVhZHdyaXRlKSBCT09MIGFsbG93c0JhY2tGb3J3
YXJkTmF2aWdhdGlvbkdlc3R1cmVzOwogCiBAcHJvcGVydHkoY29weSwgbm9uYXRvbWljKSBOU0Nv
bG9yICp1bmRlcmxheUNvbG9yOwogCkBAIC05Nyw0ICs5Niw2IEBACiAKICNlbmRpZgogCitAcHJv
cGVydHkgKHJlYWR3cml0ZSkgQk9PTCBhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJl
czsKKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3Mv
UGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5tbQppbmRleCA4ZTFhMmZmLi5hNjMzODQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpA
QCAtMzI1LDggKzMyNSw3IEBAIENBTGF5ZXIgKlBhZ2VDbGllbnRJbXBsOjphY2NlbGVyYXRlZENv
bXBvc2l0aW5nUm9vdExheWVyKCkgY29uc3QKIAogUmV0YWluUHRyPENHSW1hZ2VSZWY+IFBhZ2VD
bGllbnRJbXBsOjp0YWtlVmlld1NuYXBzaG90KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBbbV92aWV3IF90YWtlVmlld1NuYXBzaG90
XTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdl
YkNvcmUoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3LmgKaW5kZXggY2RjODg2ZS4uMWFk
MjNlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250
ZW50Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVu
dFZpZXcuaApAQCAtMjgsNiArMjgsNyBAQAogI2ltcG9ydCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYktpdDIvV0tCcm93c2luZ0NvbnRleHRHcm91
cC5oPgogI2ltcG9ydCA8V2ViS2l0Mi9XS1Byb2Nlc3NHcm91cC5oPgorI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgogCiBAY2xhc3MgV0tDb250ZW50VmlldzsKIEBjbGFzcyBXS1dlYlZpZXdDb25m
aWd1cmF0aW9uOwpAQCAtNDcsNiArNDgsMTAgQEAgY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb247CiBAb3B0aW9uYWwKIC0gKHZvaWQpY29udGVudFZpZXdEaWRDb21taXRMb2FkRm9yTWFp
bkZyYW1lOihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXc7CiAtICh2b2lkKWNvbnRlbnRWaWV3
OihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXcgZGlkQ29tbWl0TGF5ZXJUcmVlOihjb25zdCBX
ZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFuc2FjdGlvbjsK
KworLy8gVGhpcyBkb2Vzbid0IGJlbG9uZyBpbiBhICdkZWxlZ2F0ZScuCistIChSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4pdGFrZVZpZXdTbmFwc2hvdEZvckNvbnRlbnRWaWV3OihXS0NvbnRlbnRWaWV3
ICopY29udGVudFZpZXc7CisKIEBlbmQKIAogV0tfQVBJX0NMQVNTCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3Lm1tIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlldy5tbQppbmRleCBkZmVlOGFjLi5i
MjQzN2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0Nv
bnRlbnRWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29u
dGVudFZpZXcubW0KQEAgLTM2Nyw0ICszNjcsOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
ICAgIC8vIFtbd3JhcHBlcihfcGFnZS0+cHJvY2VzcygpLmNvbnRleHQoKSkgX2dlb2xvY2F0aW9u
UHJvdmlkZXJdIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46dG9B
UEkoJm9yaWdpbikgZnJhbWU6dG9BUEkoJmZyYW1lKSByZXF1ZXN0OnRvQVBJKCZwZXJtaXNzaW9u
UmVxdWVzdCkgd2luZG93OltzZWxmIHdpbmRvd11dOwogfQogCistIChSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4pX3Rha2VWaWV3U25hcHNob3QKK3sKKyAgICByZXR1cm4gW19kZWxlZ2F0ZSB0YWtlVmll
d1NuYXBzaG90Rm9yQ29udGVudFZpZXc6c2VsZl07Cit9CisKIEBlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXdJbnRlcm5hbC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmgK
aW5kZXggMDRjYmZkOC4uZTFhYTI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmgKQEAgLTI1LDYgKzI1LDcg
QEAKIAogI2ltcG9ydCAiV0tDb250ZW50Vmlldy5oIgogI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4K
KyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNjksNCArNzAsNiBAQCBzdHJ1Y3QgSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb247CiAtICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdl
Oihjb25zdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJilpbmZvOwog
LSAodm9pZClfZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjooV2Vi
S2l0OjpXZWJTZWN1cml0eU9yaWdpbiYpb3JpZ2luIGZyYW1lOihXZWJLaXQ6OldlYkZyYW1lUHJv
eHkmKWZyYW1lIHJlcXVlc3Q6KFdlYktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFBy
b3h5JilwZXJtaXNzaW9uUmVxdWVzdDsKIAorLSAoUmV0YWluUHRyPENHSW1hZ2VSZWY+KV90YWtl
Vmlld1NuYXBzaG90OworCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2lvcy9XS1ZpZXdJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lv
cy9XS1ZpZXdJT1MubW0KaW5kZXggZjc1ZmE2Zi4uY2EzODI1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tWaWV3SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLVmlld0lPUy5tbQpAQCAtMjYsMTUgKzI2LDIwIEBACiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldLVmlld1ByaXZhdGUuaCIKIAorI2ltcG9ydCAi
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaCIKKyNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJv
bGxlcklPUy5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5n
Q29udGV4dEdyb3VwUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlldy5oIgogI2ltcG9y
dCAiV0tQcm9jZXNzR3JvdXBQcml2YXRlLmgiCiAjaW1wb3J0ICJXS1Njcm9sbFZpZXcuaCIKKyNp
bXBvcnQgIldLQVBJQ2FzdC5oIgogI2ltcG9ydCA8VUlLaXQvVUlTY3JlZW4uaD4KICNpbXBvcnQg
PFVJS2l0L1VJU2Nyb2xsVmlld19Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXQyL1JlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CisKIEBpbnRlcmZhY2UgV0tWaWV3ICgpIDxVSVNjcm9sbFZpZXdE
ZWxlZ2F0ZSwgV0tDb250ZW50Vmlld0RlbGVnYXRlPgogLSAodm9pZClfc2V0RG9jdW1lbnRTY2Fs
ZTooQ0dGbG9hdCluZXdTY2FsZTsKIEBlbmQKQEAgLTQ0LDYgKzQ5LDEwIEBACiAgICAgUmV0YWlu
UHRyPFdLQ29udGVudFZpZXc+IF9jb250ZW50VmlldzsKIAogICAgIEJPT0wgX2lzV2FpdGluZ0Zv
ck5ld0xheWVyVHJlZUFmdGVyRGlkQ29tbWl0TG9hZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Vmll
d0dlc3R1cmVDb250cm9sbGVyPiBfZ2VzdHVyZUNvbnRyb2xsZXI7CisgICAgCisgICAgQk9PTCBf
YWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7CisKICAgICBCT09MIF9oYXNTdGF0
aWNNaW5pbXVtTGF5b3V0U2l6ZTsKICAgICBDR1NpemUgX21pbmltdW1MYXlvdXRTaXplT3ZlcnJp
ZGU7CiB9CkBAIC05Nyw2ICsxMDYsMjggQEAKICAgICByZXR1cm4gW19jb250ZW50VmlldyBicm93
c2luZ0NvbnRleHRDb250cm9sbGVyXTsKIH0KIAorLSAodm9pZClzZXRBbGxvd3NCYWNrRm9yd2Fy
ZE5hdmlnYXRpb25HZXN0dXJlczooQk9PTClhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0
dXJlcworeworICAgIF9hbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcyA9IGFsbG93
c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOworICAgIAorICAgIFdlYlBhZ2VQcm94eSAq
d2ViUGFnZVByb3h5ID0gdG9JbXBsKFtfY29udGVudFZpZXcgX3BhZ2VSZWZdKTsKKyAgICAKKyAg
ICBpZiAoYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMgJiYgIV9nZXN0dXJlQ29u
dHJvbGxlcikgeworICAgICAgICBfZ2VzdHVyZUNvbnRyb2xsZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PFZpZXdHZXN0dXJlQ29udHJvbGxlcj4oKndlYlBhZ2VQcm94eSk7CisgICAgICAgIF9nZXN0dXJl
Q29udHJvbGxlci0+aW5zdGFsbFN3aXBlSGFuZGxlcihzZWxmKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBfZ2VzdHVyZUNvbnRyb2xsZXIgPSBudWxscHRyOworICAgIH0KKyAgICAKKyAgICB3ZWJQ
YWdlUHJveHktPnNldFNob3VsZFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdHMoYWxsb3dzQmFja0Zv
cndhcmROYXZpZ2F0aW9uR2VzdHVyZXMpOworICAgIHdlYlBhZ2VQcm94eS0+c2V0U2hvdWxkVXNl
SW1wbGljaXRSdWJiZXJCYW5kQ29udHJvbChhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0
dXJlcyk7Cit9CisKKy0gKEJPT0wpYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMK
K3sKKyAgICByZXR1cm4gX2FsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOworfQor
CiAjcHJhZ21hIG1hcmsgV0tDb250ZW50Vmlld0RlbGVnYXRlCiAKIC0gKHZvaWQpY29udGVudFZp
ZXdEaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lOihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXcK
QEAgLTEwNCwxMSArMTM1LDEzIEBACiAgICAgX2lzV2FpdGluZ0Zvck5ld0xheWVyVHJlZUFmdGVy
RGlkQ29tbWl0TG9hZCA9IFlFUzsKIH0KIAotLSAodm9pZCljb250ZW50VmlldzooV0tDb250ZW50
VmlldyAqKWNvbnRlbnRWaWV3IGRpZENvbW1pdExheWVyVHJlZTooY29uc3QgV2ViS2l0OjpSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbiYpbGF5ZXJUcmVlVHJhbnNhY3Rpb24KKy0gKHZvaWQpY29u
dGVudFZpZXc6KFdLQ29udGVudFZpZXcgKiljb250ZW50VmlldyBkaWRDb21taXRMYXllclRyZWU6
KGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFuc2FjdGlvbgog
ewogICAgIFtfc2Nyb2xsVmlldyBzZXRNaW5pbXVtWm9vbVNjYWxlOmxheWVyVHJlZVRyYW5zYWN0
aW9uLm1pbmltdW1TY2FsZUZhY3RvcigpXTsKICAgICBbX3Njcm9sbFZpZXcgc2V0TWF4aW11bVpv
b21TY2FsZTpsYXllclRyZWVUcmFuc2FjdGlvbi5tYXhpbXVtU2NhbGVGYWN0b3IoKV07CiAgICAg
W19zY3JvbGxWaWV3IHNldFpvb21FbmFibGVkOmxheWVyVHJlZVRyYW5zYWN0aW9uLmFsbG93c1Vz
ZXJTY2FsaW5nKCldOworICAgIGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgIF9nZXN0
dXJlQ29udHJvbGxlci0+c2V0UmVuZGVyVHJlZVNpemUobGF5ZXJUcmVlVHJhbnNhY3Rpb24ucmVu
ZGVyVHJlZVNpemUoKSk7CiAgICAgaWYgKCFbX3Njcm9sbFZpZXcgaXNab29taW5nXSAmJiAhW19z
Y3JvbGxWaWV3IGlzWm9vbUJvdW5jaW5nXSkKICAgICAgICAgW19zY3JvbGxWaWV3IHNldFpvb21T
Y2FsZTpsYXllclRyZWVUcmFuc2FjdGlvbi5wYWdlU2NhbGVGYWN0b3IoKV07CiAKQEAgLTIxOSw2
ICsyNTIsMTUgQEAKICAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpjb250ZW50T2Zm
c2V0XTsKIH0KIAorLSAoUmV0YWluUHRyPENHSW1hZ2VSZWY+KXRha2VWaWV3U25hcHNob3RGb3JD
b250ZW50VmlldzooV0tDb250ZW50VmlldyAqKWNvbnRlbnRWaWV3Cit7CisgICAgVUlHcmFwaGlj
c0JlZ2luSW1hZ2VDb250ZXh0V2l0aE9wdGlvbnMoc2VsZi5ib3VuZHMuc2l6ZSwgWUVTLCBzZWxm
LndpbmRvdy5zY3JlZW4uc2NhbGUpOworICAgIFtzZWxmIGRyYXdWaWV3SGllcmFyY2h5SW5SZWN0
OltzZWxmIGJvdW5kc10gYWZ0ZXJTY3JlZW5VcGRhdGVzOk5PXTsKKyAgICBVSUltYWdlICppbWFn
ZSA9IFVJR3JhcGhpY3NHZXRJbWFnZUZyb21DdXJyZW50SW1hZ2VDb250ZXh0KCk7CisgICAgVUlH
cmFwaGljc0VuZEltYWdlQ29udGV4dCgpOworICAgIHJldHVybiBpbWFnZS5DR0ltYWdlOworfQor
CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1ZpZXcgKFByaXZhdGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KaW5kZXggMmZiZmExMS4uNDZhYzRjNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQpAQCAtNDksNyArNDks
NyBAQAogI2ltcG9ydCAiVGV4dENoZWNrZXIuaCIKICNpbXBvcnQgIlRleHRDaGVja2VyU3RhdGUu
aCIKICNpbXBvcnQgIlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbXBv
cnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9s
bGVyTWFjLmgiCiAjaW1wb3J0ICJWaWV3U25hcHNob3RTdG9yZS5oIgogI2ltcG9ydCAiV0tBUElD
YXN0LmgiCiAjaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGRmODFiYTYuLjBhMzUzYzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC03NjQsNyAr
NzY0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlY29yZE5hdmlnYXRpb25TbmFwc2hvdCgpCiAg
ICAgaWYgKCFtX3Nob3VsZFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdHMpCiAgICAgICAgIHJldHVy
bjsKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKKyNpZiBQTEFURk9STShN
QUMpCiAgICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLnJlY29yZFNuYXBzaG90KCp0aGlz
KTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9W
aWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
Vmlld0dlc3R1cmVDb250cm9sbGVySU9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzU0ZDM5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvVmlld0dlc3R1cmVDb250cm9sbGVySU9TLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgVmlld0dlc3R1cmVDb250cm9sbGVySU9TX2gKKyNkZWZpbmUg
Vmlld0dlc3R1cmVDb250cm9sbGVySU9TX2gKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1l
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworT0JKQ19DTEFTUyBDQUxheWVyOwor
T0JKQ19DTEFTUyBVSVZpZXc7CitPQkpDX0NMQVNTIFdLU3dpcGVJbnRlcmFjdGl2ZVRyYW5zaXRp
b25EZWxlZ2F0ZTsKK09CSkNfQ0xBU1MgX1VJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29udGV4
dDsKK09CSkNfQ0xBU1MgX1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbkJhc2U7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOworY2xh
c3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBWaWV3R2VzdHVyZUNvbnRyb2xsZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFZpZXdHZXN0dXJlQ29udHJvbGxlcik7CitwdWJsaWM6CisgICAg
Vmlld0dlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYpOworICAgIH5WaWV3R2VzdHVyZUNv
bnRyb2xsZXIoKTsKKworICAgIGVudW0gY2xhc3MgU3dpcGVEaXJlY3Rpb24geyBMZWZ0LCBSaWdo
dCB9OworICAgIHZvaWQgaW5zdGFsbFN3aXBlSGFuZGxlcihVSVZpZXcgKik7CisgICAgYm9vbCBj
YW5Td2lwZUluRGlyZWN0aW9uKFN3aXBlRGlyZWN0aW9uKTsKKyAgICB2b2lkIGJlZ2luU3dpcGVH
ZXN0dXJlKF9VSU5hdmlnYXRpb25JbnRlcmFjdGl2ZVRyYW5zaXRpb25CYXNlICp0cmFuc2l0aW9u
LCBTd2lwZURpcmVjdGlvbik7CisgICAgdm9pZCBlbmRTd2lwZUdlc3R1cmUoV2ViQmFja0Zvcndh
cmRMaXN0SXRlbSogdGFyZ2V0SXRlbSwgX1VJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29udGV4
dCAqLCBib29sIGNhbmNlbGxlZCk7CisgICAgdm9pZCByZW1vdmVTd2lwZVNuYXBzaG90KCk7CisK
KyAgICB2b2lkIHNldFJlbmRlclRyZWVTaXplKHVpbnQ2NF90KTsKKworICAgIGVudW0gY2xhc3Mg
Vmlld0dlc3R1cmVUeXBlIHsgTm9uZSwgU3dpcGUgfTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHN3
aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Vmlld0dlc3R1cmVD
b250cm9sbGVyPiopOworCisgICAgV2ViUGFnZVByb3h5JiBtX3dlYlBhZ2VQcm94eTsKKworICAg
IFZpZXdHZXN0dXJlVHlwZSBtX2FjdGl2ZUdlc3R1cmVUeXBlOworICAgIAorICAgIENHUmVjdCBt
X29yaWdpbmFsTGl2ZVN3aXBlVmlld0ZyYW1lOworCisgICAgVUlWaWV3ICptX2xpdmVTd2lwZVZp
ZXc7CisgICAgUmV0YWluUHRyPFVJVmlldz4gbV9zbmFwc2hvdFZpZXc7CisgICAgUmV0YWluUHRy
PFVJVmlldz4gbV90cmFuc2l0aW9uQ29udGFpbmVyVmlldzsKKyAgICBSZXRhaW5QdHI8V0tTd2lw
ZUludGVyYWN0aXZlVHJhbnNpdGlvbkRlbGVnYXRlPiBtX3N3aXBlSW50ZXJhY3RpdmVUcmFuc2l0
aW9uRGVsZWdhdGU7CisgICAgdWludDY0X3QgbV90YXJnZXRSZW5kZXJUcmVlU2l6ZTsKKyAgICAK
KyAgICBXZWJDb3JlOjpUaW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+IG1fc3dpcGVXYXRjaGRv
Z1RpbWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXJJT1NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42Y2ZiZmJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0KQEAgLTAsMCArMSwyODkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZpZXdH
ZXN0dXJlQ29udHJvbGxlcklPUy5oIgorCisjaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIKKyNpbXBv
cnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmgiCisjaW1wb3J0ICJWaWV3R2VzdHVy
ZUdlb21ldHJ5Q29sbGVjdG9yTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZXdTbmFwc2hvdFN0b3Jl
LmgiCisjaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbXBvcnQgIldlYlBhZ2VNZXNz
YWdlcy5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJv
eHkuaCIKKyNpbXBvcnQgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KKyNpbXBvcnQgPElPU3VyZmFj
ZS9JT1N1cmZhY2VQcml2YXRlLmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4K
KworI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHR2VvbWV0cnkuaD4KKyNpbXBvcnQgPFVJS2l0L1VJ
QXBwbGljYXRpb25fUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlQcm9ncmVzc0hVRC5oPgor
I2ltcG9ydCA8VUlLaXQvVUlTY3JlZW5FZGdlUGFuR2VzdHVyZVJlY29nbml6ZXIuaD4KKyNpbXBv
cnQgPFVJS2l0L1VJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uaW5nX1ByaXZhdGUuaD4KKyNpbXBv
cnQgPFVJS2l0L1VJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplci5oPgorI2ltcG9ydCA8
VUlLaXQvX1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbi5oPgorI2ltcG9ydCA8VUlL
aXQvX1VJTmF2aWdhdGlvblBhcmFsbGF4VHJhbnNpdGlvbi5oPgorCitAaW50ZXJmYWNlIF9VSVZp
ZXdDb250cm9sbGVyVHJhbnNpdGlvbkNvbnRleHQgKFNhZmFyaU5hdmlnYXRpb24pCitAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSwgc2V0dGVyPV9zZXRJbnRlcmFjdGl2ZVVwZGF0ZUhhbmRsZXI6
KSAgdm9pZCAoXl9pbnRlcmFjdGl2ZVVwZGF0ZUhhbmRsZXIpKEJPT0wgaW50ZXJhY3Rpb25Jc092
ZXIsIENHRmxvYXQgcGVyY2VudENvbXBsZXRlLCBCT09MIHRyYW5zaXRpb25Db21wbGV0ZWQsIF9V
SVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbkNvbnRleHQgKmN0eCk7CitAZW5kCisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitAaW50ZXJmYWNlIFdLU3dpcGVJbnRlcmFjdGl2ZVRyYW5zaXRp
b25EZWxlZ2F0ZSA6IE5TT2JqZWN0IDxfVUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9u
QmFzZURlbGVnYXRlPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlld0dlc3R1cmVDb250cm9s
bGVyOihXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlciopZ2VzdHVyZUNvbnRyb2xsZXIgc3dp
cGluZ1ZpZXc6KFVJVmlldyAqKXZpZXc7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1N3aXBl
SW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGUKK3sKKyAgICBXZWJLaXQ6OlZpZXdHZXN0dXJl
Q29udHJvbGxlciAqX2dlc3R1cmVDb250cm9sbGVyOworICAgIFJldGFpblB0cjxfVUlOYXZpZ2F0
aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZT4gX2JhY2tUcmFuc2l0aW9uQ29udHJvbGxlcjsK
KyAgICBSZXRhaW5QdHI8X1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbkJhc2U+IF9m
b3J3YXJkVHJhbnNpdGlvbkNvbnRyb2xsZXI7Cit9CisKK3N0YXRpYyBjb25zdCBmbG9hdCBzd2lw
ZVNuYXBzaG90UmVtb3ZhbFJlbmRlclRyZWVTaXplVGFyZ2V0RnJhY3Rpb24gPSAwLjU7CitzdGF0
aWMgY29uc3Qgc3RkOjpjaHJvbm86OnNlY29uZHMgc3dpcGVTbmFwc2hvdFJlbW92YWxXYXRjaGRv
Z0R1cmF0aW9uID0gM19zOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6KFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyKilnZXN0dXJlQ29udHJvbGxl
ciBzd2lwaW5nVmlldzooVUlWaWV3ICopdmlldworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKHNlbGYpIHsKKyAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyID0gZ2VzdHVyZUNv
bnRyb2xsZXI7CisKKyAgICAgICAgX2JhY2tUcmFuc2l0aW9uQ29udHJvbGxlciA9IGFkb3B0TlMo
W19VSU5hdmlnYXRpb25JbnRlcmFjdGl2ZVRyYW5zaXRpb25CYXNlIGFsbG9jXSk7CisgICAgICAg
IF9iYWNrVHJhbnNpdGlvbkNvbnRyb2xsZXIgPSBbX2JhY2tUcmFuc2l0aW9uQ29udHJvbGxlciBp
bml0V2l0aEdlc3R1cmVSZWNvZ25pemVyVmlldzp2aWV3IGFuaW1hdG9yOm5pbCBkZWxlZ2F0ZTpz
ZWxmXTsKKworICAgICAgICBfZm9yd2FyZFRyYW5zaXRpb25Db250cm9sbGVyID0gYWRvcHROUyhb
X1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbkJhc2UgYWxsb2NdKTsKKyAgICAgICAg
X2ZvcndhcmRUcmFuc2l0aW9uQ29udHJvbGxlciA9IFtfZm9yd2FyZFRyYW5zaXRpb25Db250cm9s
bGVyIGluaXRXaXRoR2VzdHVyZVJlY29nbml6ZXJWaWV3OnZpZXcgYW5pbWF0b3I6bmlsIGRlbGVn
YXRlOnNlbGZdOworICAgICAgICBbX2ZvcndhcmRUcmFuc2l0aW9uQ29udHJvbGxlciBzZXRTaG91
bGRSZXZlcnNlVHJhbnNsYXRpb246WUVTXTsKKyAgICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVjdGlvbilkaXJlY3Rp
b25Gb3JUcmFuc2l0aW9uOihfVUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZSAq
KXRyYW5zaXRpb24KK3sKKyAgICByZXR1cm4gdHJhbnNpdGlvbiA9PSBfYmFja1RyYW5zaXRpb25D
b250cm9sbGVyID8gV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9u
OjpMZWZ0IDogV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpS
aWdodDsKK30KKworLSAodm9pZClzdGFydEludGVyYWN0aXZlVHJhbnNpdGlvbjooX1VJTmF2aWdh
dGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbkJhc2UgKil0cmFuc2l0aW9uCit7CisgICAgX2dlc3R1
cmVDb250cm9sbGVyLT5iZWdpblN3aXBlR2VzdHVyZSh0cmFuc2l0aW9uLCBbc2VsZiBkaXJlY3Rp
b25Gb3JUcmFuc2l0aW9uOnRyYW5zaXRpb25dKTsKK30KKworLSAoQk9PTClzaG91bGRCZWdpbklu
dGVyYWN0aXZlVHJhbnNpdGlvbjooX1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbkJh
c2UgKil0cmFuc2l0aW9uCit7CisgICAgcmV0dXJuIF9nZXN0dXJlQ29udHJvbGxlci0+Y2FuU3dp
cGVJbkRpcmVjdGlvbihbc2VsZiBkaXJlY3Rpb25Gb3JUcmFuc2l0aW9uOnRyYW5zaXRpb25dKTsK
K30KKworLSAoQk9PTClpbnRlcmFjdGl2ZVRyYW5zaXRpb246KF9VSU5hdmlnYXRpb25JbnRlcmFj
dGl2ZVRyYW5zaXRpb25CYXNlICopdHJhbnNpdGlvbiBnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0
dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyIHNob3VsZFJlY29nbml6ZVNpbXVsdGFu
ZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopb3RoZXJH
ZXN0dXJlUmVjb2duaXplcgoreworICAgIHJldHVybiBbb3RoZXJHZXN0dXJlUmVjb2duaXplciBp
c0tpbmRPZkNsYXNzOltVSVRhcEdlc3R1cmVSZWNvZ25pemVyIGNsYXNzXV07Cit9CisKKy0gKEJP
T0wpaW50ZXJhY3RpdmVUcmFuc2l0aW9uOihfVUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0
aW9uQmFzZSAqKXRyYW5zaXRpb24gZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6
ZXIgKilnZXN0dXJlUmVjb2duaXplciBzaG91bGRSZWNlaXZlVG91Y2g6KFVJVG91Y2ggKil0b3Vj
aAoreworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKFVJUGFuR2VzdHVyZVJlY29nbml6ZXIgKiln
ZXN0dXJlUmVjb2duaXplckZvckludGVyYWN0aXZlVHJhbnNpdGlvbjooX1VJTmF2aWdhdGlvbklu
dGVyYWN0aXZlVHJhbnNpdGlvbkJhc2UgKil0cmFuc2l0aW9uIFdpdGhUYXJnZXQ6KGlkKXRhcmdl
dCBhY3Rpb246KFNFTClhY3Rpb24KK3sKKyAgICBVSVNjcmVlbkVkZ2VQYW5HZXN0dXJlUmVjb2du
aXplciAqcmVjb2duaXplciA9IFtbVUlTY3JlZW5FZGdlUGFuR2VzdHVyZVJlY29nbml6ZXIgYWxs
b2NdIGluaXRXaXRoVGFyZ2V0OnRhcmdldCBhY3Rpb246YWN0aW9uXTsKKyAgICBzd2l0Y2ggKFtz
ZWxmIGRpcmVjdGlvbkZvclRyYW5zaXRpb246dHJhbnNpdGlvbl0pIHsKKyAgICBjYXNlIFdlYktp
dDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpTd2lwZURpcmVjdGlvbjo6TGVmdDoKKyAgICAgICAg
W3JlY29nbml6ZXIgc2V0RWRnZXM6VUlNaW5YRWRnZV07CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpSaWdodDoK
KyAgICAgICAgW3JlY29nbml6ZXIgc2V0RWRnZXM6VUlNYXhYRWRnZV07CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gcmVjb2duaXplcjsKK30KKworQGVuZAorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworVmlld0dlc3R1cmVDb250cm9sbGVyOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXIo
V2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCisgICAgOiBtX3dlYlBhZ2VQcm94eSh3ZWJQYWdl
UHJveHkpCisgICAgLCBtX2FjdGl2ZUdlc3R1cmVUeXBlKFZpZXdHZXN0dXJlVHlwZTo6Tm9uZSkK
KyAgICAsIG1fdGFyZ2V0UmVuZGVyVHJlZVNpemUoMCkKKyAgICAsIG1fc3dpcGVXYXRjaGRvZ1Rp
bWVyKHRoaXMsICZWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnN3aXBlU25hcHNob3RXYXRjaGRvZ1Rp
bWVyRmlyZWQpCit7Cit9CisKK1ZpZXdHZXN0dXJlQ29udHJvbGxlcjo6flZpZXdHZXN0dXJlQ29u
dHJvbGxlcigpCit7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjppbnN0YWxsU3dp
cGVIYW5kbGVyKFVJVmlldyAqdmlldykKK3sKKyAgICBBU1NFUlQoIW1fc3dpcGVJbnRlcmFjdGl2
ZVRyYW5zaXRpb25EZWxlZ2F0ZSk7CisgICAgbV9zd2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRl
bGVnYXRlID0gYWRvcHROUyhbW1dLU3dpcGVJbnRlcmFjdGl2ZVRyYW5zaXRpb25EZWxlZ2F0ZSBh
bGxvY10gaW5pdFdpdGhWaWV3R2VzdHVyZUNvbnRyb2xsZXI6dGhpcyBzd2lwaW5nVmlldzp2aWV3
XSk7CisgICAgbV9saXZlU3dpcGVWaWV3ID0gdmlldzsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJlKF9VSU5hdmlnYXRpb25JbnRlcmFjdGl2ZVRyYW5z
aXRpb25CYXNlICp0cmFuc2l0aW9uLCBTd2lwZURpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAg
aWYgKG1fYWN0aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpOb25lKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogSW5mb3JtIHNvbWUgbWFubmVyIG9mIGRlbGVnYXRl
IHRoYXQgd2UncmUgc3RhcnRpbmcgYSBzd2lwZS4KKworICAgIFdlYktpdDo6V2ViQmFja0Zvcndh
cmRMaXN0SXRlbSogdGFyZ2V0SXRlbSA9IGRpcmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6TGVm
dCA/IG1fd2ViUGFnZVByb3h5LmJhY2tGb3J3YXJkTGlzdCgpLmJhY2tJdGVtKCkgOiBtX3dlYlBh
Z2VQcm94eS5iYWNrRm9yd2FyZExpc3QoKS5mb3J3YXJkSXRlbSgpOworCisgICAgUmV0YWluUHRy
PElPU3VyZmFjZVJlZj4gc25hcHNob3QgPSBXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpzaGFy
ZWQoKS5zbmFwc2hvdEFuZFJlbmRlclRyZWVTaXplKHRhcmdldEl0ZW0pLmZpcnN0OworCisgICAg
UmV0YWluUHRyPFVJVmlld0NvbnRyb2xsZXI+IHNuYXBzaG90Vmlld0NvbnRyb2xsZXIgPSBhZG9w
dE5TKFtbVUlWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOworICAgIG1fc25hcHNob3RWaWV3
ID0gYWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbbV9saXZlU3dpcGVWaWV3
IGJvdW5kc11dKTsKKyAgICBpZiAoc25hcHNob3QpIHsKKyAgICAgICAgdWludDMyX3QgcHVyZ2Vh
YmlsaXR5U3RhdGUgPSBrSU9TdXJmYWNlUHVyZ2VhYmxlTm9uVm9sYXRpbGU7CisgICAgICAgIElP
U3VyZmFjZVNldFB1cmdlYWJsZShzbmFwc2hvdC5nZXQoKSwga0lPU3VyZmFjZVB1cmdlYWJsZU5v
blZvbGF0aWxlLCAmcHVyZ2VhYmlsaXR5U3RhdGUpOworICAgICAgICAKKyAgICAgICAgaWYgKHB1
cmdlYWJpbGl0eVN0YXRlICE9IGtJT1N1cmZhY2VQdXJnZWFibGVFbXB0eSkKKyAgICAgICAgICAg
IFttX3NuYXBzaG90VmlldyBsYXllcl0uY29udGVudHMgPSAoaWQpc25hcHNob3QuZ2V0KCk7Cisg
ICAgfQorICAgIFttX3NuYXBzaG90VmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6W1VJQ29sb3Igd2hp
dGVDb2xvcl1dOworICAgIFttX3NuYXBzaG90VmlldyBsYXllcl0uY29udGVudHNHcmF2aXR5ID0g
QCJ0b3BMZWZ0IjsKKyAgICBbbV9zbmFwc2hvdFZpZXcgbGF5ZXJdLmNvbnRlbnRzU2NhbGUgPSBt
X2xpdmVTd2lwZVZpZXcud2luZG93LnNjcmVlbi5zY2FsZTsKKyAgICBbc25hcHNob3RWaWV3Q29u
dHJvbGxlciBzZXRWaWV3Om1fc25hcHNob3RWaWV3LmdldCgpXTsKKworICAgIG1fdHJhbnNpdGlv
bkNvbnRhaW5lclZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltt
X2xpdmVTd2lwZVZpZXcgZnJhbWVdXSk7CisKKyAgICBbbV9saXZlU3dpcGVWaWV3LnN1cGVydmll
dyBpbnNlcnRTdWJ2aWV3Om1fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcuZ2V0KCkgYmVsb3dTdWJ2
aWV3Om1fbGl2ZVN3aXBlVmlld107CisgICAgW21fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcgYWRk
U3VidmlldzptX2xpdmVTd2lwZVZpZXddOworCisgICAgUmV0YWluUHRyPFVJVmlld0NvbnRyb2xs
ZXI+IHRhcmdldHRlZFZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW1VJVmlld0NvbnRyb2xsZXIg
YWxsb2NdIGluaXRdKTsKKyAgICBbdGFyZ2V0dGVkVmlld0NvbnRyb2xsZXIgc2V0VmlldzptX2xp
dmVTd2lwZVZpZXddOworCisgICAgbV9vcmlnaW5hbExpdmVTd2lwZVZpZXdGcmFtZSA9IG1fbGl2
ZVN3aXBlVmlldy5mcmFtZTsKKyAgICBtX2xpdmVTd2lwZVZpZXcuZnJhbWUgPSBtX2xpdmVTd2lw
ZVZpZXcuYm91bmRzOworICAgIAorICAgIFVJTmF2aWdhdGlvbkNvbnRyb2xsZXJPcGVyYXRpb24g
dHJhbnNpdGlvbk9wZXJhdGlvbiA9IGRpcmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6TGVmdCA/
IFVJTmF2aWdhdGlvbkNvbnRyb2xsZXJPcGVyYXRpb25Qb3AgOiBVSU5hdmlnYXRpb25Db250cm9s
bGVyT3BlcmF0aW9uUHVzaDsKKyAgICBSZXRhaW5QdHI8X1VJTmF2aWdhdGlvblBhcmFsbGF4VHJh
bnNpdGlvbj4gYW5pbWF0aW9uQ29udHJvbGxlciA9IGFkb3B0TlMoW1tfVUlOYXZpZ2F0aW9uUGFy
YWxsYXhUcmFuc2l0aW9uIGFsbG9jXSBpbml0V2l0aEN1cnJlbnRPcGVyYXRpb246dHJhbnNpdGlv
bk9wZXJhdGlvbl0pOworCisgICAgUmV0YWluUHRyPF9VSVZpZXdDb250cm9sbGVyT25lVG9PbmVU
cmFuc2l0aW9uQ29udGV4dD4gdHJhbnNpdGlvbkNvbnRleHQgPSBhZG9wdE5TKFtbX1VJVmlld0Nv
bnRyb2xsZXJPbmVUb09uZVRyYW5zaXRpb25Db250ZXh0IGFsbG9jXSBpbml0XSk7CisgICAgW3Ry
YW5zaXRpb25Db250ZXh0IF9zZXRGcm9tVmlld0NvbnRyb2xsZXI6dGFyZ2V0dGVkVmlld0NvbnRy
b2xsZXIuZ2V0KCldOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0VG9WaWV3Q29udHJvbGxl
cjpzbmFwc2hvdFZpZXdDb250cm9sbGVyLmdldCgpXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRleHQg
X3NldENvbnRhaW5lclZpZXc6bV90cmFuc2l0aW9uQ29udGFpbmVyVmlldy5nZXQoKV07CisgICAg
W3RyYW5zaXRpb25Db250ZXh0IF9zZXRGcm9tU3RhcnRGcmFtZTpbbV9saXZlU3dpcGVWaWV3IGJv
dW5kc11dOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0VG9FbmRGcmFtZTpbbV9saXZlU3dp
cGVWaWV3IGJvdW5kc11dOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0VG9TdGFydEZyYW1l
OkNHUmVjdFplcm9dOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0RnJvbUVuZEZyYW1lOkNH
UmVjdFplcm9dOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0QW5pbWF0b3I6YW5pbWF0aW9u
Q29udHJvbGxlci5nZXQoKV07CisgICAgW3RyYW5zaXRpb25Db250ZXh0IF9zZXRJbnRlcmFjdG9y
OnRyYW5zaXRpb25dOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0VHJhbnNpdGlvbklzSW5G
bGlnaHQ6WUVTXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRleHQgX3NldEludGVyYWN0aXZlVXBkYXRl
SGFuZGxlcjogXihCT09MIGZpbmlzaCwgQ0dGbG9hdCwgQk9PTCwgX1VJVmlld0NvbnRyb2xsZXJU
cmFuc2l0aW9uQ29udGV4dCAqKSB7CisgICAgICAgIGlmIChmaW5pc2gpIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBJbmZvcm0gc29tZSBtYW5uZXIgb2YgZGVsZWdhdGUgdGhhdCB0aGUgc3dpcGUg
aXMgYWJvdXQgdG8gZmluaXNoLgorICAgICAgICB9CisgICAgfV07CisgICAgW3RyYW5zaXRpb25D
b250ZXh0IF9zZXRDb21wbGV0aW9uSGFuZGxlcjpeKF9VSVZpZXdDb250cm9sbGVyVHJhbnNpdGlv
bkNvbnRleHQgKmNvbnRleHQsIEJPT0wgZGlkQ29tcGxldGUpIHsgZW5kU3dpcGVHZXN0dXJlKHRh
cmdldEl0ZW0sIGNvbnRleHQsICFkaWRDb21wbGV0ZSk7IH1dOworCisgICAgW3RyYW5zaXRpb24g
c2V0QW5pbWF0aW9uQ29udHJvbGxlcjphbmltYXRpb25Db250cm9sbGVyLmdldCgpXTsKKyAgICBb
dHJhbnNpdGlvbiBzdGFydEludGVyYWN0aXZlVHJhbnNpdGlvbjp0cmFuc2l0aW9uQ29udGV4dC5n
ZXQoKV07CisKKyAgICBtX2FjdGl2ZUdlc3R1cmVUeXBlID0gVmlld0dlc3R1cmVUeXBlOjpTd2lw
ZTsKK30KKworYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmNhblN3aXBlSW5EaXJlY3Rpb24o
U3dpcGVEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIGlmIChkaXJlY3Rpb24gPT0gU3dpcGVE
aXJlY3Rpb246OkxlZnQpCisgICAgICAgIHJldHVybiAhIW1fd2ViUGFnZVByb3h5LmJhY2tGb3J3
YXJkTGlzdCgpLmJhY2tJdGVtKCk7CisgICAgcmV0dXJuICEhbV93ZWJQYWdlUHJveHkuYmFja0Zv
cndhcmRMaXN0KCkuZm9yd2FyZEl0ZW0oKTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6OmVuZFN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLCBf
VUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25Db250ZXh0ICpjb250ZXh0LCBib29sIGNhbmNlbGxl
ZCkKK3sKKyAgICBbY29udGV4dCBfc2V0VHJhbnNpdGlvbklzSW5GbGlnaHQ6Tk9dOworICAgIFtj
b250ZXh0IF9zZXRJbnRlcmFjdG9yOm5pbF07CisgICAgW2NvbnRleHQgX3NldEFuaW1hdG9yOm5p
bF07CisgICAgCisgICAgW1ttX3RyYW5zaXRpb25Db250YWluZXJWaWV3IHN1cGVydmlld10gaW5z
ZXJ0U3VidmlldzptX3NuYXBzaG90Vmlldy5nZXQoKSBhYm92ZVN1YnZpZXc6bV90cmFuc2l0aW9u
Q29udGFpbmVyVmlldy5nZXQoKV07CisgICAgW1ttX3RyYW5zaXRpb25Db250YWluZXJWaWV3IHN1
cGVydmlld10gaW5zZXJ0U3VidmlldzptX2xpdmVTd2lwZVZpZXcgYWJvdmVTdWJ2aWV3Om1fdHJh
bnNpdGlvbkNvbnRhaW5lclZpZXcuZ2V0KCldOworICAgIFttX3RyYW5zaXRpb25Db250YWluZXJW
aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgIG1fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcg
PSBudWxscHRyOworICAgIAorICAgIFttX2xpdmVTd2lwZVZpZXcgc2V0RnJhbWU6bV9vcmlnaW5h
bExpdmVTd2lwZVZpZXdGcmFtZV07CisgICAgW21fc25hcHNob3RWaWV3IHNldEZyYW1lOm1fb3Jp
Z2luYWxMaXZlU3dpcGVWaWV3RnJhbWVdOworICAgIAorICAgIGlmIChjYW5jZWxsZWQpIHsKKyAg
ICAgICAgcmVtb3ZlU3dpcGVTbmFwc2hvdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIG1fdGFyZ2V0UmVuZGVyVHJlZVNpemUgPSBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVk
KCkuc25hcHNob3RBbmRSZW5kZXJUcmVlU2l6ZSh0YXJnZXRJdGVtKS5zZWNvbmQgKiBzd2lwZVNu
YXBzaG90UmVtb3ZhbFJlbmRlclRyZWVTaXplVGFyZ2V0RnJhY3Rpb247CisgICAgCisgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byByZXBsYWNlIHRoZSBjdXJyZW50IGJhY2stZm9yd2FyZCBpdGVtJ3Mg
c25hcHNob3QKKyAgICAvLyBsaWtlIHdlIG5vcm1hbGx5IHdvdWxkIHdoZW4gZ29pbmcgYmFjayBv
ciBmb3J3YXJkLCBiZWNhdXNlIHdlIGFyZQorICAgIC8vIGRpc3BsYXlpbmcgdGhlIGRlc3RpbmF0
aW9uIGl0ZW0ncyBzbmFwc2hvdC4KKyAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuZGlz
YWJsZVNuYXBzaG90dGluZygpOworICAgIG1fd2ViUGFnZVByb3h5LmdvVG9CYWNrRm9yd2FyZEl0
ZW0odGFyZ2V0SXRlbSk7CisgICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLmVuYWJsZVNu
YXBzaG90dGluZygpOworICAgIAorICAgIGlmICghbV90YXJnZXRSZW5kZXJUcmVlU2l6ZSkgewor
ICAgICAgICByZW1vdmVTd2lwZVNuYXBzaG90KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX3N3aXBlV2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3Qoc3dpcGVTbmFwc2hvdFJlbW92
YWxXYXRjaGRvZ0R1cmF0aW9uLmNvdW50KCkpOworfQorICAgIAordm9pZCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6OnNldFJlbmRlclRyZWVTaXplKHVpbnQ2NF90IHJlbmRlclRyZWVTaXplKQorewor
ICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3RhcmdldFJlbmRlclRyZWVTaXplICYmIHJlbmRl
clRyZWVTaXplID4gbV90YXJnZXRSZW5kZXJUcmVlU2l6ZSkKKyAgICAgICAgcmVtb3ZlU3dpcGVT
bmFwc2hvdCgpOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hv
dFdhdGNoZG9nVGltZXJGaXJlZChUaW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+KikKK3sKKyAg
ICByZW1vdmVTd2lwZVNuYXBzaG90KCk7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVy
OjpyZW1vdmVTd2lwZVNuYXBzaG90KCkKK3sKKyAgICBtX3N3aXBlV2F0Y2hkb2dUaW1lci5zdG9w
KCk7CisKKyAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3
aXBlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSU9TdXJmYWNlUmVmIHNuYXBzaG90U3Vy
ZmFjZSA9IChJT1N1cmZhY2VSZWYpW21fc25hcHNob3RWaWV3IGxheWVyXS5jb250ZW50czsKKyAg
ICBpZiAoc25hcHNob3RTdXJmYWNlKQorICAgICAgICBJT1N1cmZhY2VTZXRQdXJnZWFibGUoc25h
cHNob3RTdXJmYWNlLCBrSU9TdXJmYWNlUHVyZ2VhYmxlVm9sYXRpbGUsIG51bGxwdHIpOworICAg
IAorICAgIFttX3NuYXBzaG90VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBtX3NuYXBz
aG90VmlldyA9IG51bGxwdHI7CisgICAgCisgICAgbV90YXJnZXRSZW5kZXJUcmVlU2l6ZSA9IDA7
CisgICAgCisgICAgLy8gRklYTUU6IEluZm9ybSBzb21lIG1hbm5lciBvZiBkZWxlZ2F0ZSB0aGF0
IHRoZSBzd2lwZSBpcyBmaW5pc2hlZC4KKworICAgIG1fYWN0aXZlR2VzdHVyZVR5cGUgPSBWaWV3
R2VzdHVyZVR5cGU6Ok5vbmU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLmgKaW5k
ZXggNTVkZDgwNS4uNGYwODIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMDUgKzI2LDE0IEBACiAjaWZuZGVm
IFZpZXdHZXN0dXJlQ29udHJvbGxlcl9oCiAjZGVmaW5lIFZpZXdHZXN0dXJlQ29udHJvbGxlcl9o
CiAKLSNpZiAhUExBVEZPUk0oSU9TKQorLy8gVGhlIFZpZXdHZXN0dXJlQ29udHJvbGxlciBtZXNz
YWdlIHJlY2VpdmVycyBpbXBvcnQgVmlld0dlc3R1cmVDb250cm9sbGVyLmggdW5jb25kaXRpb25h
bGx5LAorLy8gYnV0IHRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIHN1ZmZpY2llbnRseSBkaWZmZXJl
bnQgdGhhdCB0aGV5J3JlIGluIGRpZmZlcmVudCBoZWFkZXJzLgorLy8gSW5jbHVkZSB0aGUgcmln
aHQgb25lIGZvciB0aGUgcGxhdGZvcm0gYmVpbmcgYnVpbHQuCiAKLSNpbmNsdWRlICJNZXNzYWdl
UmVjZWl2ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaWYgUExBVEZPUk0o
SU9TKQorI2luY2x1ZGUgIlZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5oIgorI2Vsc2UKKyNpbmNs
dWRlICJWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMuaCIKKyNlbmRpZgogCi1PQkpDX0NMQVNTIENB
TGF5ZXI7Ci1PQkpDX0NMQVNTIE5TRXZlbnQ7Ci1PQkpDX0NMQVNTIE5TVmlldzsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07Ci1jbGFzcyBXZWJQ
YWdlUHJveHk7Ci0KLWNsYXNzIFZpZXdHZXN0dXJlQ29udHJvbGxlciA6IHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZpZXdHZXN0dXJlQ29u
dHJvbGxlcik7Ci1wdWJsaWM6Ci0gICAgVmlld0dlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94
eSYpOwotICAgIH5WaWV3R2VzdHVyZUNvbnRyb2xsZXIoKTsKLQotICAgIGRvdWJsZSBtYWduaWZp
Y2F0aW9uKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGhhbmRsZU1hZ25pZmljYXRpb25HZXN0dXJlKGRv
dWJsZSBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4pOwotICAgIHZvaWQgaGFuZGxl
U21hcnRNYWduaWZpY2F0aW9uR2VzdHVyZShXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbik7Ci0K
LSAgICBib29sIGhhbmRsZVNjcm9sbFdoZWVsRXZlbnQoTlNFdmVudCAqKTsKLSAgICB2b2lkIGRp
ZEhpdFJlbmRlclRyZWVTaXplVGhyZXNob2xkKCk7Ci0KLSAgICB2b2lkIHdoZWVsRXZlbnRXYXNO
b3RIYW5kbGVkQnlXZWJDb3JlKE5TRXZlbnQgKik7Ci0KLSAgICB2b2lkIHNldEN1c3RvbVN3aXBl
Vmlld3MoVmVjdG9yPFJldGFpblB0cjxOU1ZpZXc+PiB2aWV3cykgeyBtX2N1c3RvbVN3aXBlVmll
d3MgPSBzdGQ6Om1vdmUodmlld3MpOyB9Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd1Jl
bGF0aXZlQm91bmRzRm9yQ3VzdG9tU3dpcGVWaWV3cygpIGNvbnN0OwotCi0gICAgdm9pZCBlbmRB
Y3RpdmVHZXN0dXJlKCk7Ci0KLSAgICBlbnVtIGNsYXNzIFZpZXdHZXN0dXJlVHlwZSB7Ci0gICAg
ICAgIE5vbmUsCi0gICAgICAgIE1hZ25pZmljYXRpb24sCi0gICAgICAgIFNtYXJ0TWFnbmlmaWNh
dGlvbiwKLSAgICAgICAgU3dpcGUKLSAgICB9OwotCi0gICAgZW51bSBjbGFzcyBTd2lwZVRyYW5z
aXRpb25TdHlsZSB7Ci0gICAgICAgIE92ZXJsYXAsCi0gICAgICAgIFB1c2gKLSAgICB9OwotCi1w
cml2YXRlOgotICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyLgotICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikg
b3ZlcnJpZGU7Ci0KLSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgotICAgIHZvaWQgZGlkQ29sbGVj
dEdlb21ldHJ5Rm9yTWFnbmlmaWNhdGlvbkdlc3R1cmUoV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2li
bGVDb250ZW50Qm91bmRzLCBib29sIGZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlKTsK
LSAgICB2b2lkIGRpZENvbGxlY3RHZW9tZXRyeUZvclNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUo
V2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4sIFdlYkNvcmU6OkZsb2F0UmVjdCByZW5kZXJSZWN0
LCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRCb3VuZHMsIGJvb2wgaXNSZXBsYWNl
ZEVsZW1lbnQsIGJvb2wgZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmUpOwotCi0gICAg
dm9pZCBlbmRNYWduaWZpY2F0aW9uR2VzdHVyZSgpOwotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQg
c2NhbGVkTWFnbmlmaWNhdGlvbk9yaWdpbihXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbiwgZG91
YmxlIHNjYWxlKTsKLQotICAgIGVudW0gY2xhc3MgU3dpcGVEaXJlY3Rpb24geyBMZWZ0LCBSaWdo
dCB9OwotICAgIHZvaWQgdHJhY2tTd2lwZUdlc3R1cmUoTlNFdmVudCAqLCBTd2lwZURpcmVjdGlv
bik7Ci0gICAgdm9pZCBiZWdpblN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0
YXJnZXRJdGVtLCBTd2lwZURpcmVjdGlvbik7Ci0gICAgdm9pZCBoYW5kbGVTd2lwZUdlc3R1cmUo
V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbSwgZG91YmxlIHByb2dyZXNzLCBTd2lw
ZURpcmVjdGlvbik7Ci0gICAgdm9pZCBlbmRTd2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0
SXRlbSogdGFyZ2V0SXRlbSwgYm9vbCBjYW5jZWxsZWQpOwotICAgIHZvaWQgcmVtb3ZlU3dpcGVT
bmFwc2hvdCgpOwotICAgIHZvaWQgc3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZChXZWJD
b3JlOjpUaW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+Kik7Ci0KLSAgICBXZWJQYWdlUHJveHkm
IG1fd2ViUGFnZVByb3h5OwotCi0gICAgZG91YmxlIG1fbWFnbmlmaWNhdGlvbjsKLSAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IG1fbWFnbmlmaWNhdGlvbk9yaWdpbjsKLQotICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBtX2xhc3RTbWFydE1hZ25pZmljYXRpb25VbnNjYWxlZFRhcmdldFJlY3Q7Ci0gICAg
Ym9vbCBtX2xhc3RNYWduaWZpY2F0aW9uR2VzdHVyZVdhc1NtYXJ0TWFnbmlmaWNhdGlvbjsKLSAg
ICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fbGFzdFNtYXJ0TWFnbmlmaWNhdGlvbk9yaWdpbjsKLQot
ICAgIFZpZXdHZXN0dXJlVHlwZSBtX2FjdGl2ZUdlc3R1cmVUeXBlOwotCi0gICAgV2ViQ29yZTo6
RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRSZWN0OwotICAgIGJvb2wgbV92aXNpYmxlQ29udGVu
dFJlY3RJc1ZhbGlkOwotICAgIGJvb2wgbV9mcmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVy
ZTsKLQotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3N3aXBlU25hcHNob3RMYXllcjsKLSAgICBW
ZWN0b3I8UmV0YWluUHRyPENBTGF5ZXI+PiBtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnM7Ci0KLSAg
ICBTd2lwZVRyYW5zaXRpb25TdHlsZSBtX3N3aXBlVHJhbnNpdGlvblN0eWxlOwotICAgIFdlYkNv
cmU6OlRpbWVyPFZpZXdHZXN0dXJlQ29udHJvbGxlcj4gbV9zd2lwZVdhdGNoZG9nVGltZXI7Ci0g
ICAgVmVjdG9yPFJldGFpblB0cjxOU1ZpZXc+PiBtX2N1c3RvbVN3aXBlVmlld3M7Ci0gICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IG1fY3VycmVudFN3aXBlQ3VzdG9tVmlld0JvdW5kczsKLQotICAgIC8v
IElmIHdlIG5lZWQgdG8gd2FpdCBmb3IgY29udGVudCB0byBkZWNpZGUgaWYgaXQgaXMgZ29pbmcg
dG8gY29uc3VtZQotICAgIC8vIHRoZSBzY3JvbGwgZXZlbnQgdGhhdCB3b3VsZCBoYXZlIHN0YXJ0
ZWQgYSBzd2lwZSwgd2UnbGwgZmlsbCB0aGVzZSBpbi4KLSAgICBib29sIG1faGFzUGVuZGluZ1N3
aXBlOwotICAgIFN3aXBlRGlyZWN0aW9uIG1fcGVuZGluZ1N3aXBlRGlyZWN0aW9uOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQotCi0jZW5k
aWYgLy8gVmlld0dlc3R1cmVDb250cm9sbGVyX2gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxNmE1ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5tbQorKysgL2Rldi9udWxsCkBA
IC0xLDU2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKLQotI2lmICFQTEFURk9STShJT1MpCi0K
LSNpbXBvcnQgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKLSNpbXBvcnQgIldlYlBhZ2VHcm91cC5o
IgotI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCIKLSNpbXBvcnQgIlZp
ZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3JNZXNzYWdlcy5oIgotI2ltcG9ydCAiVmlld1NuYXBz
aG90U3RvcmUuaCIKLSNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgotI2ltcG9ydCAiV2Vi
UGFnZU1lc3NhZ2VzLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIldlYlBy
ZWZlcmVuY2VzLmgiCi0jaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbXBvcnQgPENvY29h
L0NvY29hLmg+Ci0jaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvV2ViQ29yZUNBTGF5ZXJFeHRyYXMuaD4KLQotI2lmIGRlZmluZWQoX19oYXNfaW5jbHVk
ZSkgJiYgX19oYXNfaW5jbHVkZSg8SU9TdXJmYWNlL0lPU3VyZmFjZVByaXZhdGUuaD4pCi0jaW1w
b3J0IDxJT1N1cmZhY2UvSU9TdXJmYWNlUHJpdmF0ZS5oPgotI2Vsc2UKLWVudW0gewotICAgIGtJ
T1N1cmZhY2VQdXJnZWFibGVOb25Wb2xhdGlsZSA9IDAsCi0gICAga0lPU3VyZmFjZVB1cmdlYWJs
ZVZvbGF0aWxlID0gMSwKLSAgICBrSU9TdXJmYWNlUHVyZ2VhYmxlRW1wdHkgPSAyLAotfTsKLSNl
bmRpZgotCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi1leHRl
cm4gIkMiIElPUmV0dXJuIElPU3VyZmFjZVNldFB1cmdlYWJsZShJT1N1cmZhY2VSZWYgYnVmZmVy
LCB1aW50MzJfdCBuZXdTdGF0ZSwgdWludDMyX3QgKm9sZFN0YXRlKTsKLSNlbmRpZgotCi0jaWYg
ZGVmaW5lZChfX2hhc19pbmNsdWRlKSAmJiBfX2hhc19pbmNsdWRlKDxRdWFydHpDb3JlL1F1YXJ0
ekNvcmVQcml2YXRlLmg+KQotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5o
PgotI2Vsc2UKLUBpbnRlcmZhY2UgQ0FGaWx0ZXIgOiBOU09iamVjdCA8TlNDb3B5aW5nLCBOU011
dGFibGVDb3B5aW5nLCBOU0NvZGluZz4KLUBlbmQKLSNlbmRpZgotCi1AaW50ZXJmYWNlIENBRmls
dGVyIChEZXRhaWxzKQotKyAoQ0FGaWx0ZXIgKilmaWx0ZXJXaXRoVHlwZTooTlNTdHJpbmcgKil0
eXBlOwotQGVuZAotCi1leHRlcm4gTlNTdHJpbmcgKiBjb25zdCBrQ0FGaWx0ZXJHYXVzc2lhbkJs
dXI7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgY29uc3QgZG91YmxlIG1p
bk1hZ25pZmljYXRpb24gPSAxOwotc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhNYWduaWZpY2F0aW9u
ID0gMzsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBtaW5FbGFzdGljTWFnbmlmaWNhdGlvbiA9IDAu
NzU7Ci1zdGF0aWMgY29uc3QgZG91YmxlIG1heEVsYXN0aWNNYWduaWZpY2F0aW9uID0gNDsKLQot
c3RhdGljIGNvbnN0IGRvdWJsZSB6b29tT3V0Qm9vc3QgPSAxLjY7Ci1zdGF0aWMgY29uc3QgZG91
YmxlIHpvb21PdXRSZXNpc3RhbmNlID0gMC4xMDsKLQotc3RhdGljIGNvbnN0IGZsb2F0IHNtYXJ0
TWFnbmlmaWNhdGlvbkVsZW1lbnRQYWRkaW5nID0gMC4wNTsKLXN0YXRpYyBjb25zdCBmbG9hdCBz
bWFydE1hZ25pZmljYXRpb25QYW5TY3JvbGxUaHJlc2hvbGQgPSAxMDA7Ci0KLXN0YXRpYyBjb25z
dCBkb3VibGUgc3dpcGVPdmVybGF5U2hhZG93T3BhY2l0eSA9IDAuNjY7Ci1zdGF0aWMgY29uc3Qg
ZG91YmxlIHN3aXBlT3ZlcmxheVNoYWRvd1JhZGl1cyA9IDM7Ci0KLXN0YXRpYyBjb25zdCBmbG9h
dCBzd2lwZVNuYXBzaG90UmVtb3ZhbFJlbmRlclRyZWVTaXplVGFyZ2V0RnJhY3Rpb24gPSAwLjU7
Ci1zdGF0aWMgY29uc3Qgc3RkOjpjaHJvbm86OnNlY29uZHMgc3dpcGVTbmFwc2hvdFJlbW92YWxX
YXRjaGRvZ0R1cmF0aW9uID0gM19zOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotVmlld0dlc3R1
cmVDb250cm9sbGVyOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXIoV2ViUGFnZVByb3h5JiB3ZWJQYWdl
UHJveHkpCi0gICAgOiBtX3dlYlBhZ2VQcm94eSh3ZWJQYWdlUHJveHkpCi0gICAgLCBtX2xhc3RN
YWduaWZpY2F0aW9uR2VzdHVyZVdhc1NtYXJ0TWFnbmlmaWNhdGlvbihmYWxzZSkKLSAgICAsIG1f
YWN0aXZlR2VzdHVyZVR5cGUoVmlld0dlc3R1cmVUeXBlOjpOb25lKQotICAgICwgbV92aXNpYmxl
Q29udGVudFJlY3RJc1ZhbGlkKGZhbHNlKQotICAgICwgbV9mcmFtZUhhbmRsZXNNYWduaWZpY2F0
aW9uR2VzdHVyZShmYWxzZSkKLSAgICAsIG1fc3dpcGVUcmFuc2l0aW9uU3R5bGUoU3dpcGVUcmFu
c2l0aW9uU3R5bGU6Ok92ZXJsYXApCi0gICAgLCBtX3N3aXBlV2F0Y2hkb2dUaW1lcih0aGlzLCAm
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpzd2lwZVNuYXBzaG90V2F0Y2hkb2dUaW1lckZpcmVkKQot
ICAgICwgbV9oYXNQZW5kaW5nU3dpcGUoZmFsc2UpCi17Ci0gICAgbV93ZWJQYWdlUHJveHkucHJv
Y2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Vmlld0dlc3R1cmVDb250cm9sbGVy
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpLCAqdGhpcyk7
Ci19Ci0KLVZpZXdHZXN0dXJlQ29udHJvbGxlcjo6flZpZXdHZXN0dXJlQ29udHJvbGxlcigpCi17
Ci0gICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2Vi
UGFnZVByb3h5LnBhZ2VJRCgpKTsKLX0KLQotc3RhdGljIGRvdWJsZSByZXNpc3RhbmNlRm9yRGVs
dGEoZG91YmxlIGRlbHRhU2NhbGUsIGRvdWJsZSBjdXJyZW50U2NhbGUpCi17Ci0gICAgLy8gWm9v
bSBvdXQgd2l0aCBzbGlnaHQgYWNjZWxlcmF0aW9uLCB1bnRpbCB3ZSByZWFjaCBtaW5pbXVtIHNj
YWxlLgotICAgIGlmIChkZWx0YVNjYWxlIDwgMCAmJiBjdXJyZW50U2NhbGUgPiBtaW5NYWduaWZp
Y2F0aW9uKQotICAgICAgICByZXR1cm4gem9vbU91dEJvb3N0OwotCi0gICAgLy8gWm9vbSBpbiB3
aXRoIG5vIGFjY2VsZXJhdGlvbiwgdW50aWwgd2UgcmVhY2ggbWF4aW11bSBzY2FsZS4KLSAgICBp
ZiAoZGVsdGFTY2FsZSA+IDAgJiYgY3VycmVudFNjYWxlIDwgbWF4TWFnbmlmaWNhdGlvbikKLSAg
ICAgICAgcmV0dXJuIDE7Ci0KLSAgICAvLyBPdXRzaWRlIG9mIHRoZSBleHRyZW1lcywgcmVzaXN0
IGZ1cnRoZXIgc2NhbGluZy4KLSAgICBkb3VibGUgbGltaXQgPSBjdXJyZW50U2NhbGUgPCBtaW5N
YWduaWZpY2F0aW9uID8gbWluTWFnbmlmaWNhdGlvbiA6IG1heE1hZ25pZmljYXRpb247Ci0gICAg
ZG91YmxlIHNjYWxlRGlzdGFuY2UgPSBhYnMobGltaXQgLSBjdXJyZW50U2NhbGUpOwotICAgIGRv
dWJsZSBzY2FsZVBlcmNlbnQgPSBzdGQ6Om1pbihzdGQ6Om1heChzY2FsZURpc3RhbmNlIC8gbGlt
aXQsIDAuKSwgMS4pOwotICAgIGRvdWJsZSByZXNpc3RhbmNlID0gem9vbU91dFJlc2lzdGFuY2Ug
KyBzY2FsZVBlcmNlbnQgKiAoMC4wMSAtIHpvb21PdXRSZXNpc3RhbmNlKTsKLQotICAgIHJldHVy
biByZXNpc3RhbmNlOwotfQotCi1GbG9hdFBvaW50IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2Nh
bGVkTWFnbmlmaWNhdGlvbk9yaWdpbihGbG9hdFBvaW50IG9yaWdpbiwgZG91YmxlIHNjYWxlKQot
ewotICAgIEZsb2F0UG9pbnQgc2NhbGVkTWFnbmlmaWNhdGlvbk9yaWdpbihvcmlnaW4pOwotICAg
IHNjYWxlZE1hZ25pZmljYXRpb25PcmlnaW4ubW92ZUJ5KG1fdmlzaWJsZUNvbnRlbnRSZWN0Lmxv
Y2F0aW9uKCkpOwotICAgIGZsb2F0IG1hZ25pZmljYXRpb25PcmlnaW5TY2FsZSA9IDEgLSAoc2Nh
bGUgLyBtX3dlYlBhZ2VQcm94eS5wYWdlU2NhbGVGYWN0b3IoKSk7Ci0gICAgc2NhbGVkTWFnbmlm
aWNhdGlvbk9yaWdpbi5zY2FsZShtYWduaWZpY2F0aW9uT3JpZ2luU2NhbGUsIG1hZ25pZmljYXRp
b25PcmlnaW5TY2FsZSk7Ci0gICAgcmV0dXJuIHNjYWxlZE1hZ25pZmljYXRpb25PcmlnaW47Ci19
Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpkaWRDb2xsZWN0R2VvbWV0cnlGb3JNYWdu
aWZpY2F0aW9uR2VzdHVyZShGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0LCBib29sIGZyYW1l
SGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlKQotewotICAgIG1fYWN0aXZlR2VzdHVyZVR5cGUg
PSBWaWV3R2VzdHVyZVR5cGU6Ok1hZ25pZmljYXRpb247Ci0gICAgbV92aXNpYmxlQ29udGVudFJl
Y3QgPSB2aXNpYmxlQ29udGVudFJlY3Q7Ci0gICAgbV92aXNpYmxlQ29udGVudFJlY3RJc1ZhbGlk
ID0gdHJ1ZTsKLSAgICBtX2ZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlID0gZnJhbWVI
YW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmU7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVDb250cm9s
bGVyOjpoYW5kbGVNYWduaWZpY2F0aW9uR2VzdHVyZShkb3VibGUgc2NhbGUsIEZsb2F0UG9pbnQg
b3JpZ2luKQotewotICAgIEFTU0VSVChtX2FjdGl2ZUdlc3R1cmVUeXBlID09IFZpZXdHZXN0dXJl
VHlwZTo6Tm9uZSB8fCBtX2FjdGl2ZUdlc3R1cmVUeXBlID09IFZpZXdHZXN0dXJlVHlwZTo6TWFn
bmlmaWNhdGlvbik7Ci0KLSAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSA9PSBWaWV3R2VzdHVy
ZVR5cGU6Ok5vbmUpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIGRyb3AgdGhlIGZpcnN0IGZyYW1l
IG9mIHRoZSBnZXN0dXJlIG9uIHRoZSBmbG9vciwgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoZSB2
aXNpYmxlIGNvbnRlbnQgYm91bmRzIHlldC4KLSAgICAgICAgbV9tYWduaWZpY2F0aW9uID0gbV93
ZWJQYWdlUHJveHkucGFnZVNjYWxlRmFjdG9yKCk7Ci0gICAgICAgIG1fd2ViUGFnZVByb3h5LnBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjpDb2xs
ZWN0R2VvbWV0cnlGb3JNYWduaWZpY2F0aW9uR2VzdHVyZSgpLCBtX3dlYlBhZ2VQcm94eS5wYWdl
SUQoKSk7Ci0gICAgICAgIG1fbGFzdE1hZ25pZmljYXRpb25HZXN0dXJlV2FzU21hcnRNYWduaWZp
Y2F0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlJ3Jl
IHN0aWxsIHdhaXRpbmcgZm9yIHRoZSBEaWRDb2xsZWN0R2VvbWV0cnkgY2FsbGJhY2suCi0gICAg
aWYgKCFtX3Zpc2libGVDb250ZW50UmVjdElzVmFsaWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fYWN0aXZlR2VzdHVyZVR5cGUgPSBWaWV3R2VzdHVyZVR5cGU6Ok1hZ25pZmljYXRpb247Ci0K
LSAgICBkb3VibGUgc2NhbGVXaXRoUmVzaXN0YW5jZSA9IHJlc2lzdGFuY2VGb3JEZWx0YShzY2Fs
ZSwgbV9tYWduaWZpY2F0aW9uKSAqIHNjYWxlOwotCi0gICAgbV9tYWduaWZpY2F0aW9uICs9IG1f
bWFnbmlmaWNhdGlvbiAqIHNjYWxlV2l0aFJlc2lzdGFuY2U7Ci0gICAgbV9tYWduaWZpY2F0aW9u
ID0gc3RkOjptaW4oc3RkOjptYXgobV9tYWduaWZpY2F0aW9uLCBtaW5FbGFzdGljTWFnbmlmaWNh
dGlvbiksIG1heEVsYXN0aWNNYWduaWZpY2F0aW9uKTsKLQotICAgIG1fbWFnbmlmaWNhdGlvbk9y
aWdpbiA9IG9yaWdpbjsKLQotICAgIGlmIChtX2ZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0
dXJlKQotICAgICAgICBtX3dlYlBhZ2VQcm94eS5zY2FsZVBhZ2UobV9tYWduaWZpY2F0aW9uLCBy
b3VuZGVkSW50UG9pbnQob3JpZ2luKSk7Ci0gICAgZWxzZQotICAgICAgICBtX3dlYlBhZ2VQcm94
eS5kcmF3aW5nQXJlYSgpLT5hZGp1c3RUcmFuc2llbnRab29tKG1fbWFnbmlmaWNhdGlvbiwgc2Nh
bGVkTWFnbmlmaWNhdGlvbk9yaWdpbihvcmlnaW4sIG1fbWFnbmlmaWNhdGlvbikpOwotfQotCi12
b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZW5kTWFnbmlmaWNhdGlvbkdlc3R1cmUoKQotewot
ICAgIEFTU0VSVChtX2FjdGl2ZUdlc3R1cmVUeXBlID09IFZpZXdHZXN0dXJlVHlwZTo6TWFnbmlm
aWNhdGlvbik7Ci0KLSAgICBkb3VibGUgbmV3TWFnbmlmaWNhdGlvbiA9IHN0ZDo6bWluKHN0ZDo6
bWF4KG1fbWFnbmlmaWNhdGlvbiwgbWluTWFnbmlmaWNhdGlvbiksIG1heE1hZ25pZmljYXRpb24p
OwotCi0gICAgaWYgKG1fZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmUpCi0gICAgICAg
IG1fd2ViUGFnZVByb3h5LnNjYWxlUGFnZShuZXdNYWduaWZpY2F0aW9uLCByb3VuZGVkSW50UG9p
bnQobV9tYWduaWZpY2F0aW9uT3JpZ2luKSk7Ci0gICAgZWxzZQotICAgICAgICBtX3dlYlBhZ2VQ
cm94eS5kcmF3aW5nQXJlYSgpLT5jb21taXRUcmFuc2llbnRab29tKG5ld01hZ25pZmljYXRpb24s
IHNjYWxlZE1hZ25pZmljYXRpb25PcmlnaW4obV9tYWduaWZpY2F0aW9uT3JpZ2luLCBuZXdNYWdu
aWZpY2F0aW9uKSk7Ci0KLSAgICBtX2FjdGl2ZUdlc3R1cmVUeXBlID0gVmlld0dlc3R1cmVUeXBl
OjpOb25lOwotfQotCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlU21hcnRNYWdu
aWZpY2F0aW9uR2VzdHVyZShGbG9hdFBvaW50IG9yaWdpbikKLXsKLSAgICBpZiAobV9hY3RpdmVH
ZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6Ok5vbmUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUdl
b21ldHJ5Q29sbGVjdG9yOjpDb2xsZWN0R2VvbWV0cnlGb3JTbWFydE1hZ25pZmljYXRpb25HZXN0
dXJlKG9yaWdpbiksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKLX0KLQotc3RhdGljIGZsb2F0
IG1heGltdW1SZWN0YW5nbGVDb21wb25lbnREZWx0YShGbG9hdFJlY3QgYSwgRmxvYXRSZWN0IGIp
Ci17Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KGZhYnMoYS54KCkgLSBiLngoKSksIHN0ZDo6bWF4KGZh
YnMoYS55KCkgLSBiLnkoKSksIHN0ZDo6bWF4KGZhYnMoYS53aWR0aCgpIC0gYi53aWR0aCgpKSwg
ZmFicyhhLmhlaWdodCgpIC0gYi5oZWlnaHQoKSkpKSk7Ci19Ci0KLXZvaWQgVmlld0dlc3R1cmVD
b250cm9sbGVyOjpkaWRDb2xsZWN0R2VvbWV0cnlGb3JTbWFydE1hZ25pZmljYXRpb25HZXN0dXJl
KEZsb2F0UG9pbnQgb3JpZ2luLCBGbG9hdFJlY3QgcmVuZGVyUmVjdCwgRmxvYXRSZWN0IHZpc2li
bGVDb250ZW50UmVjdCwgYm9vbCBpc1JlcGxhY2VkRWxlbWVudCwgYm9vbCBmcmFtZUhhbmRsZXNN
YWduaWZpY2F0aW9uR2VzdHVyZSkKLXsKLSAgICBpZiAoZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlv
bkdlc3R1cmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvdWJsZSBjdXJyZW50U2NhbGVGYWN0
b3IgPSBtX3dlYlBhZ2VQcm94eS5wYWdlU2NhbGVGYWN0b3IoKTsKLQotICAgIEZsb2F0UmVjdCB1
bnNjYWxlZFRhcmdldFJlY3QgPSByZW5kZXJSZWN0OwotICAgIHVuc2NhbGVkVGFyZ2V0UmVjdC5z
Y2FsZSgxIC8gY3VycmVudFNjYWxlRmFjdG9yKTsKLSAgICB1bnNjYWxlZFRhcmdldFJlY3QuaW5m
bGF0ZVgodW5zY2FsZWRUYXJnZXRSZWN0LndpZHRoKCkgKiBzbWFydE1hZ25pZmljYXRpb25FbGVt
ZW50UGFkZGluZyk7Ci0gICAgdW5zY2FsZWRUYXJnZXRSZWN0LmluZmxhdGVZKHVuc2NhbGVkVGFy
Z2V0UmVjdC5oZWlnaHQoKSAqIHNtYXJ0TWFnbmlmaWNhdGlvbkVsZW1lbnRQYWRkaW5nKTsKLQot
ICAgIGRvdWJsZSB0YXJnZXRNYWduaWZpY2F0aW9uID0gdmlzaWJsZUNvbnRlbnRSZWN0LndpZHRo
KCkgLyB1bnNjYWxlZFRhcmdldFJlY3Qud2lkdGgoKTsKLQotICAgIC8vIEZvciByZXBsYWNlZCBl
bGVtZW50cyBsaWtlIGltYWdlcywgd2Ugd2FudCB0byBmaXQgdGhlIHdob2xlIGVsZW1lbnQKLSAg
ICAvLyBpbiB0aGUgdmlldywgc28gc2NhbGUgaXQgZG93biBlbm91Z2ggdG8gbWFrZSBib3RoIGRp
bWVuc2lvbnMgZml0IGlmIHBvc3NpYmxlLgotICAgIGlmIChpc1JlcGxhY2VkRWxlbWVudCkKLSAg
ICAgICAgdGFyZ2V0TWFnbmlmaWNhdGlvbiA9IHN0ZDo6bWluKHRhcmdldE1hZ25pZmljYXRpb24s
IHN0YXRpY19jYXN0PGRvdWJsZT4odmlzaWJsZUNvbnRlbnRSZWN0LmhlaWdodCgpIC8gdW5zY2Fs
ZWRUYXJnZXRSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICB0YXJnZXRNYWduaWZpY2F0aW9uID0gc3Rk
OjptaW4oc3RkOjptYXgodGFyZ2V0TWFnbmlmaWNhdGlvbiwgbWluTWFnbmlmaWNhdGlvbiksIG1h
eE1hZ25pZmljYXRpb24pOwotCi0gICAgLy8gQWxsb3cgcGFubmluZyBiZXR3ZWVuIGVsZW1lbnRz
IHZpYSBkb3VibGUtdGFwIHdoaWxlIG1hZ25pZmllZCwgdW5sZXNzIHRoZSB0YXJnZXQgcmVjdCBp
cwotICAgIC8vIHNpbWlsYXIgdG8gdGhlIGxhc3Qgb25lIG9yIHRoZSBtb3VzZSBoYXMgbm90IG1v
dmVkLCBpbiB3aGljaCBjYXNlIHdlJ2xsIHpvb20gYWxsIHRoZSB3YXkgb3V0LgotICAgIGlmIChj
dXJyZW50U2NhbGVGYWN0b3IgPiAxICYmIG1fbGFzdE1hZ25pZmljYXRpb25HZXN0dXJlV2FzU21h
cnRNYWduaWZpY2F0aW9uKSB7Ci0gICAgICAgIGlmIChtYXhpbXVtUmVjdGFuZ2xlQ29tcG9uZW50
RGVsdGEobV9sYXN0U21hcnRNYWduaWZpY2F0aW9uVW5zY2FsZWRUYXJnZXRSZWN0LCB1bnNjYWxl
ZFRhcmdldFJlY3QpIDwgc21hcnRNYWduaWZpY2F0aW9uUGFuU2Nyb2xsVGhyZXNob2xkKQotICAg
ICAgICAgICAgdGFyZ2V0TWFnbmlmaWNhdGlvbiA9IDE7Ci0KLSAgICAgICAgaWYgKG1fbGFzdFNt
YXJ0TWFnbmlmaWNhdGlvbk9yaWdpbiA9PSBvcmlnaW4pCi0gICAgICAgICAgICB0YXJnZXRNYWdu
aWZpY2F0aW9uID0gMTsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdCh1bnNjYWxl
ZFRhcmdldFJlY3QpOwotICAgIHRhcmdldFJlY3Quc2NhbGUodGFyZ2V0TWFnbmlmaWNhdGlvbik7
Ci0gICAgRmxvYXRQb2ludCB0YXJnZXRPcmlnaW4odmlzaWJsZUNvbnRlbnRSZWN0LmNlbnRlcigp
KTsKLSAgICB0YXJnZXRPcmlnaW4ubW92ZUJ5KC10YXJnZXRSZWN0LmNlbnRlcigpKTsKLQotICAg
IG1fd2ViUGFnZVByb3h5LmRyYXdpbmdBcmVhKCktPmFkanVzdFRyYW5zaWVudFpvb20obV93ZWJQ
YWdlUHJveHkucGFnZVNjYWxlRmFjdG9yKCksIHNjYWxlZE1hZ25pZmljYXRpb25PcmlnaW4oRmxv
YXRQb2ludCgpLCBtX3dlYlBhZ2VQcm94eS5wYWdlU2NhbGVGYWN0b3IoKSkpOwotICAgIG1fd2Vi
UGFnZVByb3h5LmRyYXdpbmdBcmVhKCktPmNvbW1pdFRyYW5zaWVudFpvb20odGFyZ2V0TWFnbmlm
aWNhdGlvbiwgdGFyZ2V0T3JpZ2luKTsKLQotICAgIG1fbGFzdFNtYXJ0TWFnbmlmaWNhdGlvblVu
c2NhbGVkVGFyZ2V0UmVjdCA9IHVuc2NhbGVkVGFyZ2V0UmVjdDsKLSAgICBtX2xhc3RTbWFydE1h
Z25pZmljYXRpb25PcmlnaW4gPSBvcmlnaW47Ci0KLSAgICBtX2xhc3RNYWduaWZpY2F0aW9uR2Vz
dHVyZVdhc1NtYXJ0TWFnbmlmaWNhdGlvbiA9IHRydWU7Ci19Ci0KLWJvb2wgVmlld0dlc3R1cmVD
b250cm9sbGVyOjpoYW5kbGVTY3JvbGxXaGVlbEV2ZW50KE5TRXZlbnQgKmV2ZW50KQotewotICAg
IGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6Tm9uZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGV2ZW50LnBoYXNlICE9IE5TRXZlbnRQaGFzZUJl
Z2FuKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2hhc1BlbmRpbmdTd2lwZSA9IGZh
bHNlOwotCi0gICAgaWYgKGZhYnMoZXZlbnQuc2Nyb2xsaW5nRGVsdGFYKSA8IGZhYnMoZXZlbnQu
c2Nyb2xsaW5nRGVsdGFZKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCB3aWxs
U3dpcGVMZWZ0ID0gZXZlbnQuc2Nyb2xsaW5nRGVsdGFYID4gMCAmJiBtX3dlYlBhZ2VQcm94eS5p
c1Bpbm5lZFRvTGVmdFNpZGUoKSAmJiBtX3dlYlBhZ2VQcm94eS5iYWNrRm9yd2FyZExpc3QoKS5i
YWNrSXRlbSgpOwotICAgIGJvb2wgd2lsbFN3aXBlUmlnaHQgPSBldmVudC5zY3JvbGxpbmdEZWx0
YVggPCAwICYmIG1fd2ViUGFnZVByb3h5LmlzUGlubmVkVG9SaWdodFNpZGUoKSAmJiBtX3dlYlBh
Z2VQcm94eS5iYWNrRm9yd2FyZExpc3QoKS5mb3J3YXJkSXRlbSgpOwotICAgIGlmICghd2lsbFN3
aXBlTGVmdCAmJiAhd2lsbFN3aXBlUmlnaHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFN3aXBlRGlyZWN0aW9uIGRpcmVjdGlvbiA9IHdpbGxTd2lwZUxlZnQgPyBTd2lwZURpcmVjdGlv
bjo6TGVmdCA6IFN3aXBlRGlyZWN0aW9uOjpSaWdodDsKLQotICAgIGlmICghZXZlbnQuaGFzUHJl
Y2lzZVNjcm9sbGluZ0RlbHRhcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFb
TlNFdmVudCBpc1N3aXBlVHJhY2tpbmdGcm9tU2Nyb2xsRXZlbnRzRW5hYmxlZF0pCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX3dlYlBhZ2VQcm94eS53aWxsSGFuZGxlSG9yaXpv
bnRhbFNjcm9sbEV2ZW50cygpKSB7Ci0gICAgICAgIG1faGFzUGVuZGluZ1N3aXBlID0gdHJ1ZTsK
LSAgICAgICAgbV9wZW5kaW5nU3dpcGVEaXJlY3Rpb24gPSBkaXJlY3Rpb247Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB0cmFja1N3aXBlR2VzdHVyZShldmVudCwgZGlyZWN0
aW9uKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6d2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoTlNFdmVudCAqZXZlbnQpCi17Ci0g
ICAgaWYgKCFtX2hhc1BlbmRpbmdTd2lwZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9oYXNQ
ZW5kaW5nU3dpcGUgPSBmYWxzZTsKLQotICAgIGlmIChldmVudC5waGFzZSAhPSBOU0V2ZW50UGhh
c2VCZWdhbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJhY2tTd2lwZUdlc3R1cmUoZXZlbnQs
IG1fcGVuZGluZ1N3aXBlRGlyZWN0aW9uKTsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6OnRyYWNrU3dpcGVHZXN0dXJlKE5TRXZlbnQgKmV2ZW50LCBTd2lwZURpcmVjdGlvbiBkaXJl
Y3Rpb24pCi17Ci0gICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLnJlY29yZFNuYXBzaG90
KG1fd2ViUGFnZVByb3h5KTsKLQotICAgIENHRmxvYXQgbWF4UHJvZ3Jlc3MgPSAoZGlyZWN0aW9u
ID09IFN3aXBlRGlyZWN0aW9uOjpMZWZ0KSA/IDEgOiAwOwotICAgIENHRmxvYXQgbWluUHJvZ3Jl
c3MgPSAoZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0aW9uOjpSaWdodCkgPyAtMSA6IDA7Ci0gICAg
UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+IHRhcmdldEl0ZW0gPSAoZGlyZWN0aW9uID09
IFN3aXBlRGlyZWN0aW9uOjpMZWZ0KSA/IG1fd2ViUGFnZVByb3h5LmJhY2tGb3J3YXJkTGlzdCgp
LmJhY2tJdGVtKCkgOiBtX3dlYlBhZ2VQcm94eS5iYWNrRm9yd2FyZExpc3QoKS5mb3J3YXJkSXRl
bSgpOwotICAgIF9fYmxvY2sgYm9vbCBzd2lwZUNhbmNlbGxlZCA9IGZhbHNlOwotCi0gICAgW2V2
ZW50IHRyYWNrU3dpcGVFdmVudFdpdGhPcHRpb25zOjAgZGFtcGVuQW1vdW50VGhyZXNob2xkTWlu
Om1pblByb2dyZXNzIG1heDptYXhQcm9ncmVzcyB1c2luZ0hhbmRsZXI6XihDR0Zsb2F0IHByb2dy
ZXNzLCBOU0V2ZW50UGhhc2UgcGhhc2UsIEJPT0wgaXNDb21wbGV0ZSwgQk9PTCAqc3RvcCkgewot
ICAgICAgICBpZiAocGhhc2UgPT0gTlNFdmVudFBoYXNlQmVnYW4pCi0gICAgICAgICAgICB0aGlz
LT5iZWdpblN3aXBlR2VzdHVyZSh0YXJnZXRJdGVtLmdldCgpLCBkaXJlY3Rpb24pOwotICAgICAg
ICBDR0Zsb2F0IGNsYW1wZWRQcm9ncmVzcyA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByb2dyZXNzLCBt
aW5Qcm9ncmVzcyksIG1heFByb2dyZXNzKTsKLSAgICAgICAgdGhpcy0+aGFuZGxlU3dpcGVHZXN0
dXJlKHRhcmdldEl0ZW0uZ2V0KCksIGNsYW1wZWRQcm9ncmVzcywgZGlyZWN0aW9uKTsKLSAgICAg
ICAgaWYgKHBoYXNlID09IE5TRXZlbnRQaGFzZUNhbmNlbGxlZCkKLSAgICAgICAgICAgIHN3aXBl
Q2FuY2VsbGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKGlzQ29tcGxldGUpCi0gICAgICAgICAgICB0
aGlzLT5lbmRTd2lwZUdlc3R1cmUodGFyZ2V0SXRlbS5nZXQoKSwgc3dpcGVDYW5jZWxsZWQpOwot
ICAgIH1dOwotfQotCi1GbG9hdFJlY3QgVmlld0dlc3R1cmVDb250cm9sbGVyOjp3aW5kb3dSZWxh
dGl2ZUJvdW5kc0ZvckN1c3RvbVN3aXBlVmlld3MoKSBjb25zdAotewotICAgIEZsb2F0UmVjdCBz
d2lwZUFyZWE7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB2aWV3IDogbV9jdXN0b21Td2lwZVZpZXdz
KQotICAgICAgICBzd2lwZUFyZWEudW5pdGUoW3ZpZXcgY29udmVydFJlY3Q6W3ZpZXcgYm91bmRz
XSB0b1ZpZXc6bmlsXSk7Ci0gICAgcmV0dXJuIHN3aXBlQXJlYTsKLX0KLQotc3RhdGljIENBTGF5
ZXIgKmxlYXN0Q29tbW9uQW5jZXN0b3JMYXllcihWZWN0b3I8UmV0YWluUHRyPENBTGF5ZXI+PiYg
bGF5ZXJzKQotewotICAgIFZlY3RvcjxWZWN0b3I8Q0FMYXllciAqPj4gbGl2ZUxheWVyUGF0aHNG
cm9tUm9vdChsYXllcnMuc2l6ZSgpKTsKLQotICAgIHNpemVfdCBzaG9ydGVzdFBhdGhMZW5ndGgg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOwotCi0gICAgZm9yIChzaXplX3Qg
bGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllcnMuc2l6ZSgpOyBsYXllckluZGV4Kysp
IHsKLSAgICAgICAgQ0FMYXllciAqcGFyZW50ID0gW2xheWVyc1tsYXllckluZGV4XSBzdXBlcmxh
eWVyXTsKLSAgICAgICAgd2hpbGUgKHBhcmVudCkgewotICAgICAgICAgICAgbGl2ZUxheWVyUGF0
aHNGcm9tUm9vdFtsYXllckluZGV4XS5pbnNlcnQoMCwgcGFyZW50KTsKLSAgICAgICAgICAgIHNo
b3J0ZXN0UGF0aExlbmd0aCA9IHN0ZDo6bWluKHNob3J0ZXN0UGF0aExlbmd0aCwgbGl2ZUxheWVy
UGF0aHNGcm9tUm9vdFtsYXllckluZGV4XS5zaXplKCkpOwotICAgICAgICAgICAgcGFyZW50ID0g
cGFyZW50LnN1cGVybGF5ZXI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBw
YXRoSW5kZXggPSAwOyBwYXRoSW5kZXggPCBzaG9ydGVzdFBhdGhMZW5ndGg7IHBhdGhJbmRleCsr
KSB7Ci0gICAgICAgIENBTGF5ZXIgKmZpcnN0UGF0aExheWVyID0gbGl2ZUxheWVyUGF0aHNGcm9t
Um9vdFswXVtwYXRoSW5kZXhdOwotICAgICAgICBmb3IgKHNpemVfdCBsYXllckluZGV4ID0gMTsg
bGF5ZXJJbmRleCA8IGxheWVycy5zaXplKCk7IGxheWVySW5kZXgrKykgewotICAgICAgICAgICAg
aWYgKGxpdmVMYXllclBhdGhzRnJvbVJvb3RbbGF5ZXJJbmRleF1bcGF0aEluZGV4XSAhPSBmaXJz
dFBhdGhMYXllcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RQYXRoTGF5ZXI7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbGl2ZUxheWVyUGF0aHNGcm9tUm9vdFswXVtzaG9y
dGVzdFBhdGhMZW5ndGhdOwotfQotCi12b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5T
d2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbSwgU3dpcGVEaXJl
Y3Rpb24gZGlyZWN0aW9uKQotewotICAgIEFTU0VSVChtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnMu
aXNFbXB0eSgpKTsKLQotICAgIG1fYWN0aXZlR2VzdHVyZVR5cGUgPSBWaWV3R2VzdHVyZVR5cGU6
OlN3aXBlOwotCi0gICAgQ0FMYXllciAqcm9vdENvbnRlbnRMYXllciA9IG1fd2ViUGFnZVByb3h5
LmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKTsKLQotICAgIG1fc3dpcGVTbmFwc2hv
dExheWVyID0gYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbbV9zd2lwZVNu
YXBzaG90TGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOkNHQ29sb3JHZXRDb25zdGFudENvbG9yKGtD
R0NvbG9yV2hpdGUpXTsKLQotICAgIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IHNuYXBzaG90ID0g
Vmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLnNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUodGFy
Z2V0SXRlbSkuZmlyc3Q7Ci0KLSAgICBpZiAoc25hcHNob3QpIHsKLSNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKLSAgICAgICAgdWludDMyX3QgcHVyZ2VhYmlsaXR5
U3RhdGUgPSBrSU9TdXJmYWNlUHVyZ2VhYmxlTm9uVm9sYXRpbGU7Ci0gICAgICAgIElPU3VyZmFj
ZVNldFB1cmdlYWJsZShzbmFwc2hvdC5nZXQoKSwga0lPU3VyZmFjZVB1cmdlYWJsZU5vblZvbGF0
aWxlLCAmcHVyZ2VhYmlsaXR5U3RhdGUpOwotCi0gICAgICAgIGlmIChwdXJnZWFiaWxpdHlTdGF0
ZSAhPSBrSU9TdXJmYWNlUHVyZ2VhYmxlRW1wdHkpCi0gICAgICAgICAgICBbbV9zd2lwZVNuYXBz
aG90TGF5ZXIgc2V0Q29udGVudHM6KGlkKXNuYXBzaG90LmdldCgpXTsKLSNlbHNlCi0gICAgICAg
IFttX3N3aXBlU25hcHNob3RMYXllciBzZXRDb250ZW50czooaWQpc25hcHNob3QuZ2V0KCldOwot
I2VuZGlmCi0gICAgfQotCi0gICAgbV9jdXJyZW50U3dpcGVDdXN0b21WaWV3Qm91bmRzID0gd2lu
ZG93UmVsYXRpdmVCb3VuZHNGb3JDdXN0b21Td2lwZVZpZXdzKCk7Ci0KLSAgICBGbG9hdFJlY3Qg
c3dpcGVBcmVhOwotICAgIGlmICghbV9jdXN0b21Td2lwZVZpZXdzLmlzRW1wdHkoKSkgewotICAg
ICAgICBzd2lwZUFyZWEgPSBtX2N1cnJlbnRTd2lwZUN1c3RvbVZpZXdCb3VuZHM7Ci0KLSAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiB2aWV3IDogbV9jdXN0b21Td2lwZVZpZXdzKSB7Ci0gICAgICAg
ICAgICBDQUxheWVyICpsYXllciA9IFt2aWV3IGxheWVyXTsKLSAgICAgICAgICAgIEFTU0VSVChs
YXllcik7Ci0gICAgICAgICAgICBtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnMuYXBwZW5kKGxheWVy
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXBlQXJlYSA9IHJvb3RDb250
ZW50TGF5ZXIuZnJhbWU7Ci0gICAgICAgIG1fY3VycmVudFN3aXBlTGl2ZUxheWVycy5hcHBlbmQo
cm9vdENvbnRlbnRMYXllcik7Ci0gICAgfQotCi0gICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNl
dENvbnRlbnRzR3Jhdml0eTprQ0FHcmF2aXR5VG9wTGVmdF07Ci0gICAgW21fc3dpcGVTbmFwc2hv
dExheWVyIHNldENvbnRlbnRzU2NhbGU6bV93ZWJQYWdlUHJveHkuZGV2aWNlU2NhbGVGYWN0b3Io
KV07Ci0gICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRaZXJv
XTsKLSAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0RnJhbWU6c3dpcGVBcmVhXTsKLSAgICBb
bV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0TmFtZTpAIkdlc3R1cmUgU3dpcGUgU25hcHNob3QgTGF5
ZXIiXTsKLSAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgd2ViX2Rpc2FibGVBbGxBY3Rpb25zXTsK
LQotICAgIGlmIChtX3dlYlBhZ2VQcm94eS5wcmVmZXJlbmNlcygpLnZpZXdHZXN0dXJlRGVidWdn
aW5nRW5hYmxlZCgpKSB7Ci0gICAgICAgIENBRmlsdGVyKiBmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmls
dGVyV2l0aFR5cGU6a0NBRmlsdGVyR2F1c3NpYW5CbHVyXTsKLSAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OjNdIGZvcktleTpAImlucHV0UmFkaXVzIl07
Ci0gICAgICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRGaWx0ZXJzOkBbZmlsdGVyXV07Ci0g
ICAgfQotCi0gICAgLy8gV2UgZG9uJ3Qga25vdyBlbm91Z2ggYWJvdXQgdGhlIGN1c3RvbSB2aWV3
cycgaGllcmFyY2h5IHRvIGFwcGx5IGEgc2hhZG93LgotICAgIGlmIChtX3N3aXBlVHJhbnNpdGlv
blN0eWxlID09IFN3aXBlVHJhbnNpdGlvblN0eWxlOjpPdmVybGFwICYmIG1fY3VzdG9tU3dpcGVW
aWV3cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmV0YWluUHRyPENHUGF0aFJlZj4gc2hhZG93UGF0
aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlV2l0aFJlY3QoW21fc3dpcGVTbmFwc2hvdExheWVyIGJv
dW5kc10sIDApKTsKLQotICAgICAgICBpZiAoZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0aW9uOjpM
ZWZ0KSB7Ci0gICAgICAgICAgICBbcm9vdENvbnRlbnRMYXllciBzZXRTaGFkb3dDb2xvcjpDR0Nv
bG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKV07Ci0gICAgICAgICAgICBbcm9vdENv
bnRlbnRMYXllciBzZXRTaGFkb3dPcGFjaXR5OnN3aXBlT3ZlcmxheVNoYWRvd09wYWNpdHldOwot
ICAgICAgICAgICAgW3Jvb3RDb250ZW50TGF5ZXIgc2V0U2hhZG93UmFkaXVzOnN3aXBlT3Zlcmxh
eVNoYWRvd1JhZGl1c107Ci0gICAgICAgICAgICBbcm9vdENvbnRlbnRMYXllciBzZXRTaGFkb3dQ
YXRoOnNoYWRvd1BhdGguZ2V0KCldOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgW21f
c3dpcGVTbmFwc2hvdExheWVyIHNldFNoYWRvd0NvbG9yOkNHQ29sb3JHZXRDb25zdGFudENvbG9y
KGtDR0NvbG9yQmxhY2spXTsKLSAgICAgICAgICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRT
aGFkb3dPcGFjaXR5OnN3aXBlT3ZlcmxheVNoYWRvd09wYWNpdHldOwotICAgICAgICAgICAgW21f
c3dpcGVTbmFwc2hvdExheWVyIHNldFNoYWRvd1JhZGl1czpzd2lwZU92ZXJsYXlTaGFkb3dSYWRp
dXNdOwotICAgICAgICAgICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNldFNoYWRvd1BhdGg6c2hh
ZG93UGF0aC5nZXQoKV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGN1
c3RvbSBzd2lwaW5nIHZpZXdzLCB3ZSBhc3N1bWUgdGhhdCB0aGUgdmlld3Mgd2VyZSBwYXNzZWQg
dG8gdXMgaW4gYmFjay10by1mcm9udCB6LW9yZGVyLgotICAgIENBTGF5ZXIgKmxheWVyQWRqYWNl
bnRUb1NuYXBzaG90ID0gZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0aW9uOjpMZWZ0ID8gbV9jdXJy
ZW50U3dpcGVMaXZlTGF5ZXJzLmZpcnN0KCkuZ2V0KCkgOiBtX2N1cnJlbnRTd2lwZUxpdmVMYXll
cnMubGFzdCgpLmdldCgpOwotICAgIENBTGF5ZXIgKnNuYXBzaG90TGF5ZXJQYXJlbnQ7Ci0KLSAg
ICBpZiAobV9jdXJyZW50U3dpcGVMaXZlTGF5ZXJzLnNpemUoKSA9PSAxKQotICAgICAgICBzbmFw
c2hvdExheWVyUGFyZW50ID0gW21fY3VycmVudFN3aXBlTGl2ZUxheWVyc1swXSBzdXBlcmxheWVy
XTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gV2UgaW5zZXJ0IG91ciBzbmFwc2hvdCBpbnRvIHRo
ZSBmaXJzdCBzaGFyZWQgc3VwZXJsYXllciBvZiB0aGUgY3VzdG9tIHZpZXdzJyBsYXllciwgYWJv
dmUgdGhlIGZyb250bW9zdCBvciBiZWxvdyB0aGUgYm90dG9tbW9zdCBsYXllci4KLSAgICAgICAg
c25hcHNob3RMYXllclBhcmVudCA9IGxlYXN0Q29tbW9uQW5jZXN0b3JMYXllcihtX2N1cnJlbnRT
d2lwZUxpdmVMYXllcnMpOwotCi0gICAgICAgIC8vIElmIHRoZSBsYXllcnMgYXJlIG5vdCBhbGwg
c2libGluZ3MsIGZpbmQgdGhlIGNoaWxkIG9mIHRoZSBsYXllciB3ZSdyZSBnb2luZyB0byBpbnNl
cnQgdGhlIHNuYXBzaG90IGludG8gd2hpY2ggaGFzIHRoZSBmcm9udG1vc3QvYm90dG9tbW9zdCBs
YXllciBhcyBhIGNoaWxkLgotICAgICAgICB3aGlsZSAoc25hcHNob3RMYXllclBhcmVudCAhPSBs
YXllckFkamFjZW50VG9TbmFwc2hvdC5zdXBlcmxheWVyKQotICAgICAgICAgICAgbGF5ZXJBZGph
Y2VudFRvU25hcHNob3QgPSBsYXllckFkamFjZW50VG9TbmFwc2hvdC5zdXBlcmxheWVyOwotICAg
IH0KLQotICAgIGlmIChkaXJlY3Rpb24gPT0gU3dpcGVEaXJlY3Rpb246OkxlZnQpCi0gICAgICAg
IFtzbmFwc2hvdExheWVyUGFyZW50IGluc2VydFN1YmxheWVyOm1fc3dpcGVTbmFwc2hvdExheWVy
LmdldCgpIGJlbG93OmxheWVyQWRqYWNlbnRUb1NuYXBzaG90XTsKLSAgICBlbHNlCi0gICAgICAg
IFtzbmFwc2hvdExheWVyUGFyZW50IGluc2VydFN1YmxheWVyOm1fc3dpcGVTbmFwc2hvdExheWVy
LmdldCgpIGFib3ZlOmxheWVyQWRqYWNlbnRUb1NuYXBzaG90XTsKLX0KLQotdm9pZCBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OmhhbmRsZVN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVt
KiB0YXJnZXRJdGVtLCBkb3VibGUgcHJvZ3Jlc3MsIFN3aXBlRGlyZWN0aW9uIGRpcmVjdGlvbikK
LXsKLSAgICBBU1NFUlQobV9hY3RpdmVHZXN0dXJlVHlwZSA9PSBWaWV3R2VzdHVyZVR5cGU6OlN3
aXBlKTsKLQotICAgIGRvdWJsZSB3aWR0aDsKLSAgICBpZiAoIW1fY3VzdG9tU3dpcGVWaWV3cy5p
c0VtcHR5KCkpCi0gICAgICAgIHdpZHRoID0gbV9jdXJyZW50U3dpcGVDdXN0b21WaWV3Qm91bmRz
LndpZHRoKCk7Ci0gICAgZWxzZQotICAgICAgICB3aWR0aCA9IG1fd2ViUGFnZVByb3h5LmFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKS5mcmFtZS5zaXplLndpZHRoOwotCi0gICAgZG91
YmxlIHN3aXBpbmdMYXllck9mZnNldCA9IGZsb29yKHdpZHRoICogcHJvZ3Jlc3MpOwotCi0gICAg
aWYgKG1fc3dpcGVUcmFuc2l0aW9uU3R5bGUgPT0gU3dpcGVUcmFuc2l0aW9uU3R5bGU6Ok92ZXJs
YXApIHsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6UmlnaHQpCi0g
ICAgICAgICAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3Jt
M0RNYWtlVHJhbnNsYXRpb24od2lkdGggKyBzd2lwaW5nTGF5ZXJPZmZzZXQsIDAsIDApXTsKLSAg
ICB9IGVsc2UgaWYgKG1fc3dpcGVUcmFuc2l0aW9uU3R5bGUgPT0gU3dpcGVUcmFuc2l0aW9uU3R5
bGU6OlB1c2gpCi0gICAgICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRUcmFuc2Zvcm06Q0FU
cmFuc2Zvcm0zRE1ha2VUcmFuc2xhdGlvbigoZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0aW9uOjpM
ZWZ0ID8gLXdpZHRoIDogd2lkdGgpICsgc3dpcGluZ0xheWVyT2Zmc2V0LCAwLCAwKV07Ci0KLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIGxheWVyIDogbV9jdXJyZW50U3dpcGVMaXZlTGF5ZXJzKSB7Ci0g
ICAgICAgIGlmIChtX3N3aXBlVHJhbnNpdGlvblN0eWxlID09IFN3aXBlVHJhbnNpdGlvblN0eWxl
OjpPdmVybGFwKSB7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0aW9u
OjpMZWZ0KQotICAgICAgICAgICAgICAgIFtsYXllciBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0z
RE1ha2VUcmFuc2xhdGlvbihzd2lwaW5nTGF5ZXJPZmZzZXQsIDAsIDApXTsKLSAgICAgICAgfSBl
bHNlIGlmIChtX3N3aXBlVHJhbnNpdGlvblN0eWxlID09IFN3aXBlVHJhbnNpdGlvblN0eWxlOjpQ
dXNoKQotICAgICAgICAgICAgW2xheWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVRy
YW5zbGF0aW9uKHN3aXBpbmdMYXllck9mZnNldCwgMCwgMCldOwotICAgIH0KLX0KLQotdm9pZCBW
aWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtKiB0YXJnZXRJdGVtLCBib29sIGNhbmNlbGxlZCkKLXsKLSAgICBBU1NFUlQobV9hY3RpdmVH
ZXN0dXJlVHlwZSA9PSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlKTsKLQotICAgIENBTGF5ZXIgKnJv
b3RMYXllciA9IG1fd2ViUGFnZVByb3h5LmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIo
KTsKLQotICAgIFtyb290TGF5ZXIgc2V0U2hhZG93T3BhY2l0eTowXTsKLSAgICBbcm9vdExheWVy
IHNldFNoYWRvd1JhZGl1czowXTsKLQotICAgIGlmIChjYW5jZWxsZWQpIHsKLSAgICAgICAgcmVt
b3ZlU3dpcGVTbmFwc2hvdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdWludDY0
X3QgcmVuZGVyVHJlZVNpemUgPSBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuc25hcHNob3RB
bmRSZW5kZXJUcmVlU2l6ZSh0YXJnZXRJdGVtKS5zZWNvbmQ7Ci0gICAgbV93ZWJQYWdlUHJveHku
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OlNl
dFJlbmRlclRyZWVTaXplTm90aWZpY2F0aW9uVGhyZXNob2xkKHJlbmRlclRyZWVTaXplICogc3dp
cGVTbmFwc2hvdFJlbW92YWxSZW5kZXJUcmVlU2l6ZVRhcmdldEZyYWN0aW9uKSwgbV93ZWJQYWdl
UHJveHkucGFnZUlEKCkpOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBsYWNlIHRoZSBj
dXJyZW50IGJhY2stZm9yd2FyZCBpdGVtJ3Mgc25hcHNob3QKLSAgICAvLyBsaWtlIHdlIG5vcm1h
bGx5IHdvdWxkIHdoZW4gZ29pbmcgYmFjayBvciBmb3J3YXJkLCBiZWNhdXNlIHdlIGFyZQotICAg
IC8vIGRpc3BsYXlpbmcgdGhlIGRlc3RpbmF0aW9uIGl0ZW0ncyBzbmFwc2hvdC4KLSAgICBWaWV3
U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuZGlzYWJsZVNuYXBzaG90dGluZygpOwotICAgIG1fd2Vi
UGFnZVByb3h5LmdvVG9CYWNrRm9yd2FyZEl0ZW0odGFyZ2V0SXRlbSk7Ci0gICAgVmlld1NuYXBz
aG90U3RvcmU6OnNoYXJlZCgpLmVuYWJsZVNuYXBzaG90dGluZygpOwotCi0gICAgaWYgKCFyZW5k
ZXJUcmVlU2l6ZSkgewotICAgICAgICByZW1vdmVTd2lwZVNuYXBzaG90KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX3N3aXBlV2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3Qoc3dp
cGVTbmFwc2hvdFJlbW92YWxXYXRjaGRvZ0R1cmF0aW9uLmNvdW50KCkpOwotfQotCi12b2lkIFZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6ZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQoKQotewot
ICAgIHJlbW92ZVN3aXBlU25hcHNob3QoKTsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6OnN3aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Vmlld0dl
c3R1cmVDb250cm9sbGVyPiopCi17Ci0gICAgcmVtb3ZlU3dpcGVTbmFwc2hvdCgpOwotfQotCi12
b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6cmVtb3ZlU3dpcGVTbmFwc2hvdCgpCi17Ci0gICAg
bV9zd2lwZVdhdGNoZG9nVGltZXIuc3RvcCgpOwotCi0gICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5
cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi0gICAgSU9TdXJmYWNlUmVmIHNu
YXBzaG90U3VyZmFjZSA9IChJT1N1cmZhY2VSZWYpW21fc3dpcGVTbmFwc2hvdExheWVyIGNvbnRl
bnRzXTsKLSAgICBpZiAoc25hcHNob3RTdXJmYWNlKQotICAgICAgICBJT1N1cmZhY2VTZXRQdXJn
ZWFibGUoc25hcHNob3RTdXJmYWNlLCBrSU9TdXJmYWNlUHVyZ2VhYmxlVm9sYXRpbGUsIG51bGxw
dHIpOwotI2VuZGlmCi0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGxheWVyIDogbV9jdXJyZW50U3dp
cGVMaXZlTGF5ZXJzKQotICAgICAgICBbbGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RJ
ZGVudGl0eV07Ci0KLSAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5
ZXJdOwotICAgIG1fc3dpcGVTbmFwc2hvdExheWVyID0gbnVsbHB0cjsKLQotICAgIG1fY3VycmVu
dFN3aXBlTGl2ZUxheWVycy5jbGVhcigpOwotCi0gICAgbV9hY3RpdmVHZXN0dXJlVHlwZSA9IFZp
ZXdHZXN0dXJlVHlwZTo6Tm9uZTsKLX0KLQotdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVu
ZEFjdGl2ZUdlc3R1cmUoKQotewotICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlID09IFZpZXdH
ZXN0dXJlVHlwZTo6TWFnbmlmaWNhdGlvbikgewotICAgICAgICBlbmRNYWduaWZpY2F0aW9uR2Vz
dHVyZSgpOwotICAgICAgICBtX3Zpc2libGVDb250ZW50UmVjdElzVmFsaWQgPSBmYWxzZTsKLSAg
ICB9Ci19Ci0KLWRvdWJsZSBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1hZ25pZmljYXRpb24oKSBj
b25zdAotewotICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlID09IFZpZXdHZXN0dXJlVHlwZTo6
TWFnbmlmaWNhdGlvbikKLSAgICAgICAgcmV0dXJuIG1fbWFnbmlmaWNhdGlvbjsKLQotICAgIHJl
dHVybiBtX3dlYlBhZ2VQcm94eS5wYWdlU2NhbGVGYWN0b3IoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM5MzdjMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLmgK
QEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFZpZXdHZXN0dXJl
Q29udHJvbGxlck1hY19oCisjZGVmaW5lIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hY19oCisKKyNp
ZiAhUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIENBTGF5ZXI7CitPQkpDX0NMQVNT
IE5TRXZlbnQ7CitPQkpDX0NMQVNTIE5TVmlldzsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNz
IFZpZXdHZXN0dXJlQ29udHJvbGxlciA6IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZpZXdHZXN0dXJlQ29udHJvbGxlcik7CitwdWJsaWM6
CisgICAgVmlld0dlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYpOworICAgIH5WaWV3R2Vz
dHVyZUNvbnRyb2xsZXIoKTsKKworICAgIGRvdWJsZSBtYWduaWZpY2F0aW9uKCkgY29uc3Q7CisK
KyAgICB2b2lkIGhhbmRsZU1hZ25pZmljYXRpb25HZXN0dXJlKGRvdWJsZSBzY2FsZSwgV2ViQ29y
ZTo6RmxvYXRQb2ludCBvcmlnaW4pOworICAgIHZvaWQgaGFuZGxlU21hcnRNYWduaWZpY2F0aW9u
R2VzdHVyZShXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbik7CisKKyAgICBib29sIGhhbmRsZVNj
cm9sbFdoZWVsRXZlbnQoTlNFdmVudCAqKTsKKyAgICB2b2lkIGRpZEhpdFJlbmRlclRyZWVTaXpl
VGhyZXNob2xkKCk7CisKKyAgICB2b2lkIHdoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3Jl
KE5TRXZlbnQgKik7CisKKyAgICB2b2lkIHNldEN1c3RvbVN3aXBlVmlld3MoVmVjdG9yPFJldGFp
blB0cjxOU1ZpZXc+PiB2aWV3cykgeyBtX2N1c3RvbVN3aXBlVmlld3MgPSBzdGQ6Om1vdmUodmll
d3MpOyB9CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd1JlbGF0aXZlQm91bmRzRm9yQ3Vz
dG9tU3dpcGVWaWV3cygpIGNvbnN0OworCisgICAgdm9pZCBlbmRBY3RpdmVHZXN0dXJlKCk7CisK
KyAgICBlbnVtIGNsYXNzIFZpZXdHZXN0dXJlVHlwZSB7CisgICAgICAgIE5vbmUsCisgICAgICAg
IE1hZ25pZmljYXRpb24sCisgICAgICAgIFNtYXJ0TWFnbmlmaWNhdGlvbiwKKyAgICAgICAgU3dp
cGUKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBTd2lwZVRyYW5zaXRpb25TdHlsZSB7CisgICAg
ICAgIE92ZXJsYXAsCisgICAgICAgIFB1c2gKKyAgICB9OworCitwcml2YXRlOgorICAgIC8vIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyLgorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24qLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICAv
LyBNZXNzYWdlIGhhbmRsZXJzLgorICAgIHZvaWQgZGlkQ29sbGVjdEdlb21ldHJ5Rm9yTWFnbmlm
aWNhdGlvbkdlc3R1cmUoV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50Qm91bmRzLCBi
b29sIGZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlKTsKKyAgICB2b2lkIGRpZENvbGxl
Y3RHZW9tZXRyeUZvclNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoV2ViQ29yZTo6RmxvYXRQb2lu
dCBvcmlnaW4sIFdlYkNvcmU6OkZsb2F0UmVjdCByZW5kZXJSZWN0LCBXZWJDb3JlOjpGbG9hdFJl
Y3QgdmlzaWJsZUNvbnRlbnRCb3VuZHMsIGJvb2wgaXNSZXBsYWNlZEVsZW1lbnQsIGJvb2wgZnJh
bWVIYW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmUpOworCisgICAgdm9pZCBlbmRNYWduaWZpY2F0
aW9uR2VzdHVyZSgpOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgc2NhbGVkTWFnbmlmaWNhdGlv
bk9yaWdpbihXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbiwgZG91YmxlIHNjYWxlKTsKKworICAg
IGVudW0gY2xhc3MgU3dpcGVEaXJlY3Rpb24geyBMZWZ0LCBSaWdodCB9OworICAgIHZvaWQgdHJh
Y2tTd2lwZUdlc3R1cmUoTlNFdmVudCAqLCBTd2lwZURpcmVjdGlvbik7CisgICAgdm9pZCBiZWdp
blN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLCBTd2lwZURp
cmVjdGlvbik7CisgICAgdm9pZCBoYW5kbGVTd2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0
SXRlbSogdGFyZ2V0SXRlbSwgZG91YmxlIHByb2dyZXNzLCBTd2lwZURpcmVjdGlvbik7CisgICAg
dm9pZCBlbmRTd2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbSwg
Ym9vbCBjYW5jZWxsZWQpOworICAgIHZvaWQgcmVtb3ZlU3dpcGVTbmFwc2hvdCgpOworICAgIHZv
aWQgc3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI+Kik7CisKKyAgICBXZWJQYWdlUHJveHkmIG1fd2ViUGFnZVByb3h5Owor
CisgICAgZG91YmxlIG1fbWFnbmlmaWNhdGlvbjsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1f
bWFnbmlmaWNhdGlvbk9yaWdpbjsKKworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2xhc3RTbWFy
dE1hZ25pZmljYXRpb25VbnNjYWxlZFRhcmdldFJlY3Q7CisgICAgYm9vbCBtX2xhc3RNYWduaWZp
Y2F0aW9uR2VzdHVyZVdhc1NtYXJ0TWFnbmlmaWNhdGlvbjsKKyAgICBXZWJDb3JlOjpGbG9hdFBv
aW50IG1fbGFzdFNtYXJ0TWFnbmlmaWNhdGlvbk9yaWdpbjsKKworICAgIFZpZXdHZXN0dXJlVHlw
ZSBtX2FjdGl2ZUdlc3R1cmVUeXBlOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdmlzaWJs
ZUNvbnRlbnRSZWN0OworICAgIGJvb2wgbV92aXNpYmxlQ29udGVudFJlY3RJc1ZhbGlkOworICAg
IGJvb2wgbV9mcmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZTsKKworICAgIFJldGFpblB0
cjxDQUxheWVyPiBtX3N3aXBlU25hcHNob3RMYXllcjsKKyAgICBWZWN0b3I8UmV0YWluUHRyPENB
TGF5ZXI+PiBtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnM7CisKKyAgICBTd2lwZVRyYW5zaXRpb25T
dHlsZSBtX3N3aXBlVHJhbnNpdGlvblN0eWxlOworICAgIFdlYkNvcmU6OlRpbWVyPFZpZXdHZXN0
dXJlQ29udHJvbGxlcj4gbV9zd2lwZVdhdGNoZG9nVGltZXI7CisgICAgVmVjdG9yPFJldGFpblB0
cjxOU1ZpZXc+PiBtX2N1c3RvbVN3aXBlVmlld3M7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1f
Y3VycmVudFN3aXBlQ3VzdG9tVmlld0JvdW5kczsKKworICAgIC8vIElmIHdlIG5lZWQgdG8gd2Fp
dCBmb3IgY29udGVudCB0byBkZWNpZGUgaWYgaXQgaXMgZ29pbmcgdG8gY29uc3VtZQorICAgIC8v
IHRoZSBzY3JvbGwgZXZlbnQgdGhhdCB3b3VsZCBoYXZlIHN0YXJ0ZWQgYSBzd2lwZSwgd2UnbGwg
ZmlsbCB0aGVzZSBpbi4KKyAgICBib29sIG1faGFzUGVuZGluZ1N3aXBlOworICAgIFN3aXBlRGly
ZWN0aW9uIG1fcGVuZGluZ1N3aXBlRGlyZWN0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorCisjZW5kaWYgLy8gVmlld0dlc3R1cmVD
b250cm9sbGVyTWFjX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
Vmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOWQxMTlhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tCkBAIC0wLDAgKzEsNTYwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJWaWV3R2VzdHVy
ZUNvbnRyb2xsZXJNYWMuaCIKKworI2lmICFQTEFURk9STShJT1MpCisKKyNpbXBvcnQgIk5hdGl2
ZVdlYldoZWVsRXZlbnQuaCIKKyNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgorI2ltcG9ydCAiVmll
d0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZXdHZXN0dXJlR2VvbWV0
cnlDb2xsZWN0b3JNZXNzYWdlcy5oIgorI2ltcG9ydCAiVmlld1NuYXBzaG90U3RvcmUuaCIKKyNp
bXBvcnQgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgorI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgi
CisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlByZWZlcmVuY2VzLmgiCisj
aW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbXBvcnQgPENvY29hL0NvY29hLmg+CisjaW1w
b3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUNB
TGF5ZXJFeHRyYXMuaD4KKworI2lmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkgJiYgX19oYXNfaW5j
bHVkZSg8SU9TdXJmYWNlL0lPU3VyZmFjZVByaXZhdGUuaD4pCisjaW1wb3J0IDxJT1N1cmZhY2Uv
SU9TdXJmYWNlUHJpdmF0ZS5oPgorI2Vsc2UKK2VudW0geworICAgIGtJT1N1cmZhY2VQdXJnZWFi
bGVOb25Wb2xhdGlsZSA9IDAsCisgICAga0lPU3VyZmFjZVB1cmdlYWJsZVZvbGF0aWxlID0gMSwK
KyAgICBrSU9TdXJmYWNlUHVyZ2VhYmxlRW1wdHkgPSAyLAorfTsKKyNlbmRpZgorCisjaWYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCitleHRlcm4gIkMiIElPUmV0dXJu
IElPU3VyZmFjZVNldFB1cmdlYWJsZShJT1N1cmZhY2VSZWYgYnVmZmVyLCB1aW50MzJfdCBuZXdT
dGF0ZSwgdWludDMyX3QgKm9sZFN0YXRlKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2hhc19p
bmNsdWRlKSAmJiBfX2hhc19pbmNsdWRlKDxRdWFydHpDb3JlL1F1YXJ0ekNvcmVQcml2YXRlLmg+
KQorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPgorI2Vsc2UKK0BpbnRl
cmZhY2UgQ0FGaWx0ZXIgOiBOU09iamVjdCA8TlNDb3B5aW5nLCBOU011dGFibGVDb3B5aW5nLCBO
U0NvZGluZz4KK0BlbmQKKyNlbmRpZgorCitAaW50ZXJmYWNlIENBRmlsdGVyIChEZXRhaWxzKQor
KyAoQ0FGaWx0ZXIgKilmaWx0ZXJXaXRoVHlwZTooTlNTdHJpbmcgKil0eXBlOworQGVuZAorCitl
eHRlcm4gTlNTdHJpbmcgKiBjb25zdCBrQ0FGaWx0ZXJHYXVzc2lhbkJsdXI7CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgY29uc3QgZG91YmxlIG1pbk1hZ25pZmljYXRpb24g
PSAxOworc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhNYWduaWZpY2F0aW9uID0gMzsKKworc3RhdGlj
IGNvbnN0IGRvdWJsZSBtaW5FbGFzdGljTWFnbmlmaWNhdGlvbiA9IDAuNzU7CitzdGF0aWMgY29u
c3QgZG91YmxlIG1heEVsYXN0aWNNYWduaWZpY2F0aW9uID0gNDsKKworc3RhdGljIGNvbnN0IGRv
dWJsZSB6b29tT3V0Qm9vc3QgPSAxLjY7CitzdGF0aWMgY29uc3QgZG91YmxlIHpvb21PdXRSZXNp
c3RhbmNlID0gMC4xMDsKKworc3RhdGljIGNvbnN0IGZsb2F0IHNtYXJ0TWFnbmlmaWNhdGlvbkVs
ZW1lbnRQYWRkaW5nID0gMC4wNTsKK3N0YXRpYyBjb25zdCBmbG9hdCBzbWFydE1hZ25pZmljYXRp
b25QYW5TY3JvbGxUaHJlc2hvbGQgPSAxMDA7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgc3dpcGVP
dmVybGF5U2hhZG93T3BhY2l0eSA9IDAuNjY7CitzdGF0aWMgY29uc3QgZG91YmxlIHN3aXBlT3Zl
cmxheVNoYWRvd1JhZGl1cyA9IDM7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBzd2lwZVNuYXBzaG90
UmVtb3ZhbFJlbmRlclRyZWVTaXplVGFyZ2V0RnJhY3Rpb24gPSAwLjU7CitzdGF0aWMgY29uc3Qg
c3RkOjpjaHJvbm86OnNlY29uZHMgc3dpcGVTbmFwc2hvdFJlbW92YWxXYXRjaGRvZ0R1cmF0aW9u
ID0gM19zOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworVmlld0dlc3R1cmVDb250cm9sbGVyOjpW
aWV3R2VzdHVyZUNvbnRyb2xsZXIoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCisgICAgOiBt
X3dlYlBhZ2VQcm94eSh3ZWJQYWdlUHJveHkpCisgICAgLCBtX2xhc3RNYWduaWZpY2F0aW9uR2Vz
dHVyZVdhc1NtYXJ0TWFnbmlmaWNhdGlvbihmYWxzZSkKKyAgICAsIG1fYWN0aXZlR2VzdHVyZVR5
cGUoVmlld0dlc3R1cmVUeXBlOjpOb25lKQorICAgICwgbV92aXNpYmxlQ29udGVudFJlY3RJc1Zh
bGlkKGZhbHNlKQorICAgICwgbV9mcmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZShmYWxz
ZSkKKyAgICAsIG1fc3dpcGVUcmFuc2l0aW9uU3R5bGUoU3dpcGVUcmFuc2l0aW9uU3R5bGU6Ok92
ZXJsYXApCisgICAgLCBtX3N3aXBlV2F0Y2hkb2dUaW1lcih0aGlzLCAmVmlld0dlc3R1cmVDb250
cm9sbGVyOjpzd2lwZVNuYXBzaG90V2F0Y2hkb2dUaW1lckZpcmVkKQorICAgICwgbV9oYXNQZW5k
aW5nU3dpcGUoZmFsc2UpCit7CisgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJRCgpLCAqdGhpcyk7Cit9CisKK1ZpZXdHZXN0
dXJlQ29udHJvbGxlcjo6flZpZXdHZXN0dXJlQ29udHJvbGxlcigpCit7CisgICAgbV93ZWJQYWdl
UHJveHkucHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Vmlld0dlc3R1
cmVDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZVByb3h5LnBhZ2VJ
RCgpKTsKK30KKworc3RhdGljIGRvdWJsZSByZXNpc3RhbmNlRm9yRGVsdGEoZG91YmxlIGRlbHRh
U2NhbGUsIGRvdWJsZSBjdXJyZW50U2NhbGUpCit7CisgICAgLy8gWm9vbSBvdXQgd2l0aCBzbGln
aHQgYWNjZWxlcmF0aW9uLCB1bnRpbCB3ZSByZWFjaCBtaW5pbXVtIHNjYWxlLgorICAgIGlmIChk
ZWx0YVNjYWxlIDwgMCAmJiBjdXJyZW50U2NhbGUgPiBtaW5NYWduaWZpY2F0aW9uKQorICAgICAg
ICByZXR1cm4gem9vbU91dEJvb3N0OworCisgICAgLy8gWm9vbSBpbiB3aXRoIG5vIGFjY2VsZXJh
dGlvbiwgdW50aWwgd2UgcmVhY2ggbWF4aW11bSBzY2FsZS4KKyAgICBpZiAoZGVsdGFTY2FsZSA+
IDAgJiYgY3VycmVudFNjYWxlIDwgbWF4TWFnbmlmaWNhdGlvbikKKyAgICAgICAgcmV0dXJuIDE7
CisKKyAgICAvLyBPdXRzaWRlIG9mIHRoZSBleHRyZW1lcywgcmVzaXN0IGZ1cnRoZXIgc2NhbGlu
Zy4KKyAgICBkb3VibGUgbGltaXQgPSBjdXJyZW50U2NhbGUgPCBtaW5NYWduaWZpY2F0aW9uID8g
bWluTWFnbmlmaWNhdGlvbiA6IG1heE1hZ25pZmljYXRpb247CisgICAgZG91YmxlIHNjYWxlRGlz
dGFuY2UgPSBhYnMobGltaXQgLSBjdXJyZW50U2NhbGUpOworICAgIGRvdWJsZSBzY2FsZVBlcmNl
bnQgPSBzdGQ6Om1pbihzdGQ6Om1heChzY2FsZURpc3RhbmNlIC8gbGltaXQsIDAuKSwgMS4pOwor
ICAgIGRvdWJsZSByZXNpc3RhbmNlID0gem9vbU91dFJlc2lzdGFuY2UgKyBzY2FsZVBlcmNlbnQg
KiAoMC4wMSAtIHpvb21PdXRSZXNpc3RhbmNlKTsKKworICAgIHJldHVybiByZXNpc3RhbmNlOwor
fQorCitGbG9hdFBvaW50IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2NhbGVkTWFnbmlmaWNhdGlv
bk9yaWdpbihGbG9hdFBvaW50IG9yaWdpbiwgZG91YmxlIHNjYWxlKQoreworICAgIEZsb2F0UG9p
bnQgc2NhbGVkTWFnbmlmaWNhdGlvbk9yaWdpbihvcmlnaW4pOworICAgIHNjYWxlZE1hZ25pZmlj
YXRpb25PcmlnaW4ubW92ZUJ5KG1fdmlzaWJsZUNvbnRlbnRSZWN0LmxvY2F0aW9uKCkpOworICAg
IGZsb2F0IG1hZ25pZmljYXRpb25PcmlnaW5TY2FsZSA9IDEgLSAoc2NhbGUgLyBtX3dlYlBhZ2VQ
cm94eS5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgc2NhbGVkTWFnbmlmaWNhdGlvbk9yaWdpbi5z
Y2FsZShtYWduaWZpY2F0aW9uT3JpZ2luU2NhbGUsIG1hZ25pZmljYXRpb25PcmlnaW5TY2FsZSk7
CisgICAgcmV0dXJuIHNjYWxlZE1hZ25pZmljYXRpb25PcmlnaW47Cit9CisKK3ZvaWQgVmlld0dl
c3R1cmVDb250cm9sbGVyOjpkaWRDb2xsZWN0R2VvbWV0cnlGb3JNYWduaWZpY2F0aW9uR2VzdHVy
ZShGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0LCBib29sIGZyYW1lSGFuZGxlc01hZ25pZmlj
YXRpb25HZXN0dXJlKQoreworICAgIG1fYWN0aXZlR2VzdHVyZVR5cGUgPSBWaWV3R2VzdHVyZVR5
cGU6Ok1hZ25pZmljYXRpb247CisgICAgbV92aXNpYmxlQ29udGVudFJlY3QgPSB2aXNpYmxlQ29u
dGVudFJlY3Q7CisgICAgbV92aXNpYmxlQ29udGVudFJlY3RJc1ZhbGlkID0gdHJ1ZTsKKyAgICBt
X2ZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlID0gZnJhbWVIYW5kbGVzTWFnbmlmaWNh
dGlvbkdlc3R1cmU7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVNYWdu
aWZpY2F0aW9uR2VzdHVyZShkb3VibGUgc2NhbGUsIEZsb2F0UG9pbnQgb3JpZ2luKQoreworICAg
IEFTU0VSVChtX2FjdGl2ZUdlc3R1cmVUeXBlID09IFZpZXdHZXN0dXJlVHlwZTo6Tm9uZSB8fCBt
X2FjdGl2ZUdlc3R1cmVUeXBlID09IFZpZXdHZXN0dXJlVHlwZTo6TWFnbmlmaWNhdGlvbik7CisK
KyAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSA9PSBWaWV3R2VzdHVyZVR5cGU6Ok5vbmUpIHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGRyb3AgdGhlIGZpcnN0IGZyYW1lIG9mIHRoZSBnZXN0dXJl
IG9uIHRoZSBmbG9vciwgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoZSB2aXNpYmxlIGNvbnRlbnQg
Ym91bmRzIHlldC4KKyAgICAgICAgbV9tYWduaWZpY2F0aW9uID0gbV93ZWJQYWdlUHJveHkucGFn
ZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIG1fd2ViUGFnZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjpDb2xsZWN0R2VvbWV0cnlGb3JN
YWduaWZpY2F0aW9uR2VzdHVyZSgpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7CisgICAgICAg
IG1fbGFzdE1hZ25pZmljYXRpb25HZXN0dXJlV2FzU21hcnRNYWduaWZpY2F0aW9uID0gZmFsc2U7
CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlJ3JlIHN0aWxsIHdhaXRpbmcg
Zm9yIHRoZSBEaWRDb2xsZWN0R2VvbWV0cnkgY2FsbGJhY2suCisgICAgaWYgKCFtX3Zpc2libGVD
b250ZW50UmVjdElzVmFsaWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYWN0aXZlR2VzdHVy
ZVR5cGUgPSBWaWV3R2VzdHVyZVR5cGU6Ok1hZ25pZmljYXRpb247CisKKyAgICBkb3VibGUgc2Nh
bGVXaXRoUmVzaXN0YW5jZSA9IHJlc2lzdGFuY2VGb3JEZWx0YShzY2FsZSwgbV9tYWduaWZpY2F0
aW9uKSAqIHNjYWxlOworCisgICAgbV9tYWduaWZpY2F0aW9uICs9IG1fbWFnbmlmaWNhdGlvbiAq
IHNjYWxlV2l0aFJlc2lzdGFuY2U7CisgICAgbV9tYWduaWZpY2F0aW9uID0gc3RkOjptaW4oc3Rk
OjptYXgobV9tYWduaWZpY2F0aW9uLCBtaW5FbGFzdGljTWFnbmlmaWNhdGlvbiksIG1heEVsYXN0
aWNNYWduaWZpY2F0aW9uKTsKKworICAgIG1fbWFnbmlmaWNhdGlvbk9yaWdpbiA9IG9yaWdpbjsK
KworICAgIGlmIChtX2ZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlKQorICAgICAgICBt
X3dlYlBhZ2VQcm94eS5zY2FsZVBhZ2UobV9tYWduaWZpY2F0aW9uLCByb3VuZGVkSW50UG9pbnQo
b3JpZ2luKSk7CisgICAgZWxzZQorICAgICAgICBtX3dlYlBhZ2VQcm94eS5kcmF3aW5nQXJlYSgp
LT5hZGp1c3RUcmFuc2llbnRab29tKG1fbWFnbmlmaWNhdGlvbiwgc2NhbGVkTWFnbmlmaWNhdGlv
bk9yaWdpbihvcmlnaW4sIG1fbWFnbmlmaWNhdGlvbikpOworfQorCit2b2lkIFZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6ZW5kTWFnbmlmaWNhdGlvbkdlc3R1cmUoKQoreworICAgIEFTU0VSVChtX2Fj
dGl2ZUdlc3R1cmVUeXBlID09IFZpZXdHZXN0dXJlVHlwZTo6TWFnbmlmaWNhdGlvbik7CisKKyAg
ICBkb3VibGUgbmV3TWFnbmlmaWNhdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KG1fbWFnbmlmaWNh
dGlvbiwgbWluTWFnbmlmaWNhdGlvbiksIG1heE1hZ25pZmljYXRpb24pOworCisgICAgaWYgKG1f
ZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmUpCisgICAgICAgIG1fd2ViUGFnZVByb3h5
LnNjYWxlUGFnZShuZXdNYWduaWZpY2F0aW9uLCByb3VuZGVkSW50UG9pbnQobV9tYWduaWZpY2F0
aW9uT3JpZ2luKSk7CisgICAgZWxzZQorICAgICAgICBtX3dlYlBhZ2VQcm94eS5kcmF3aW5nQXJl
YSgpLT5jb21taXRUcmFuc2llbnRab29tKG5ld01hZ25pZmljYXRpb24sIHNjYWxlZE1hZ25pZmlj
YXRpb25PcmlnaW4obV9tYWduaWZpY2F0aW9uT3JpZ2luLCBuZXdNYWduaWZpY2F0aW9uKSk7CisK
KyAgICBtX2FjdGl2ZUdlc3R1cmVUeXBlID0gVmlld0dlc3R1cmVUeXBlOjpOb25lOworfQorCit2
b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlU21hcnRNYWduaWZpY2F0aW9uR2VzdHVy
ZShGbG9hdFBvaW50IG9yaWdpbikKK3sKKyAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBW
aWV3R2VzdHVyZVR5cGU6Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2ViUGFnZVBy
b3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9y
OjpDb2xsZWN0R2VvbWV0cnlGb3JTbWFydE1hZ25pZmljYXRpb25HZXN0dXJlKG9yaWdpbiksIG1f
d2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKK30KKworc3RhdGljIGZsb2F0IG1heGltdW1SZWN0YW5n
bGVDb21wb25lbnREZWx0YShGbG9hdFJlY3QgYSwgRmxvYXRSZWN0IGIpCit7CisgICAgcmV0dXJu
IHN0ZDo6bWF4KGZhYnMoYS54KCkgLSBiLngoKSksIHN0ZDo6bWF4KGZhYnMoYS55KCkgLSBiLnko
KSksIHN0ZDo6bWF4KGZhYnMoYS53aWR0aCgpIC0gYi53aWR0aCgpKSwgZmFicyhhLmhlaWdodCgp
IC0gYi5oZWlnaHQoKSkpKSk7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpkaWRD
b2xsZWN0R2VvbWV0cnlGb3JTbWFydE1hZ25pZmljYXRpb25HZXN0dXJlKEZsb2F0UG9pbnQgb3Jp
Z2luLCBGbG9hdFJlY3QgcmVuZGVyUmVjdCwgRmxvYXRSZWN0IHZpc2libGVDb250ZW50UmVjdCwg
Ym9vbCBpc1JlcGxhY2VkRWxlbWVudCwgYm9vbCBmcmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2Vz
dHVyZSkKK3sKKyAgICBpZiAoZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGRvdWJsZSBjdXJyZW50U2NhbGVGYWN0b3IgPSBtX3dlYlBhZ2VQ
cm94eS5wYWdlU2NhbGVGYWN0b3IoKTsKKworICAgIEZsb2F0UmVjdCB1bnNjYWxlZFRhcmdldFJl
Y3QgPSByZW5kZXJSZWN0OworICAgIHVuc2NhbGVkVGFyZ2V0UmVjdC5zY2FsZSgxIC8gY3VycmVu
dFNjYWxlRmFjdG9yKTsKKyAgICB1bnNjYWxlZFRhcmdldFJlY3QuaW5mbGF0ZVgodW5zY2FsZWRU
YXJnZXRSZWN0LndpZHRoKCkgKiBzbWFydE1hZ25pZmljYXRpb25FbGVtZW50UGFkZGluZyk7Cisg
ICAgdW5zY2FsZWRUYXJnZXRSZWN0LmluZmxhdGVZKHVuc2NhbGVkVGFyZ2V0UmVjdC5oZWlnaHQo
KSAqIHNtYXJ0TWFnbmlmaWNhdGlvbkVsZW1lbnRQYWRkaW5nKTsKKworICAgIGRvdWJsZSB0YXJn
ZXRNYWduaWZpY2F0aW9uID0gdmlzaWJsZUNvbnRlbnRSZWN0LndpZHRoKCkgLyB1bnNjYWxlZFRh
cmdldFJlY3Qud2lkdGgoKTsKKworICAgIC8vIEZvciByZXBsYWNlZCBlbGVtZW50cyBsaWtlIGlt
YWdlcywgd2Ugd2FudCB0byBmaXQgdGhlIHdob2xlIGVsZW1lbnQKKyAgICAvLyBpbiB0aGUgdmll
dywgc28gc2NhbGUgaXQgZG93biBlbm91Z2ggdG8gbWFrZSBib3RoIGRpbWVuc2lvbnMgZml0IGlm
IHBvc3NpYmxlLgorICAgIGlmIChpc1JlcGxhY2VkRWxlbWVudCkKKyAgICAgICAgdGFyZ2V0TWFn
bmlmaWNhdGlvbiA9IHN0ZDo6bWluKHRhcmdldE1hZ25pZmljYXRpb24sIHN0YXRpY19jYXN0PGRv
dWJsZT4odmlzaWJsZUNvbnRlbnRSZWN0LmhlaWdodCgpIC8gdW5zY2FsZWRUYXJnZXRSZWN0Lmhl
aWdodCgpKSk7CisKKyAgICB0YXJnZXRNYWduaWZpY2F0aW9uID0gc3RkOjptaW4oc3RkOjptYXgo
dGFyZ2V0TWFnbmlmaWNhdGlvbiwgbWluTWFnbmlmaWNhdGlvbiksIG1heE1hZ25pZmljYXRpb24p
OworCisgICAgLy8gQWxsb3cgcGFubmluZyBiZXR3ZWVuIGVsZW1lbnRzIHZpYSBkb3VibGUtdGFw
IHdoaWxlIG1hZ25pZmllZCwgdW5sZXNzIHRoZSB0YXJnZXQgcmVjdCBpcworICAgIC8vIHNpbWls
YXIgdG8gdGhlIGxhc3Qgb25lIG9yIHRoZSBtb3VzZSBoYXMgbm90IG1vdmVkLCBpbiB3aGljaCBj
YXNlIHdlJ2xsIHpvb20gYWxsIHRoZSB3YXkgb3V0LgorICAgIGlmIChjdXJyZW50U2NhbGVGYWN0
b3IgPiAxICYmIG1fbGFzdE1hZ25pZmljYXRpb25HZXN0dXJlV2FzU21hcnRNYWduaWZpY2F0aW9u
KSB7CisgICAgICAgIGlmIChtYXhpbXVtUmVjdGFuZ2xlQ29tcG9uZW50RGVsdGEobV9sYXN0U21h
cnRNYWduaWZpY2F0aW9uVW5zY2FsZWRUYXJnZXRSZWN0LCB1bnNjYWxlZFRhcmdldFJlY3QpIDwg
c21hcnRNYWduaWZpY2F0aW9uUGFuU2Nyb2xsVGhyZXNob2xkKQorICAgICAgICAgICAgdGFyZ2V0
TWFnbmlmaWNhdGlvbiA9IDE7CisKKyAgICAgICAgaWYgKG1fbGFzdFNtYXJ0TWFnbmlmaWNhdGlv
bk9yaWdpbiA9PSBvcmlnaW4pCisgICAgICAgICAgICB0YXJnZXRNYWduaWZpY2F0aW9uID0gMTsK
KyAgICB9CisKKyAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdCh1bnNjYWxlZFRhcmdldFJlY3QpOwor
ICAgIHRhcmdldFJlY3Quc2NhbGUodGFyZ2V0TWFnbmlmaWNhdGlvbik7CisgICAgRmxvYXRQb2lu
dCB0YXJnZXRPcmlnaW4odmlzaWJsZUNvbnRlbnRSZWN0LmNlbnRlcigpKTsKKyAgICB0YXJnZXRP
cmlnaW4ubW92ZUJ5KC10YXJnZXRSZWN0LmNlbnRlcigpKTsKKworICAgIG1fd2ViUGFnZVByb3h5
LmRyYXdpbmdBcmVhKCktPmFkanVzdFRyYW5zaWVudFpvb20obV93ZWJQYWdlUHJveHkucGFnZVNj
YWxlRmFjdG9yKCksIHNjYWxlZE1hZ25pZmljYXRpb25PcmlnaW4oRmxvYXRQb2ludCgpLCBtX3dl
YlBhZ2VQcm94eS5wYWdlU2NhbGVGYWN0b3IoKSkpOworICAgIG1fd2ViUGFnZVByb3h5LmRyYXdp
bmdBcmVhKCktPmNvbW1pdFRyYW5zaWVudFpvb20odGFyZ2V0TWFnbmlmaWNhdGlvbiwgdGFyZ2V0
T3JpZ2luKTsKKworICAgIG1fbGFzdFNtYXJ0TWFnbmlmaWNhdGlvblVuc2NhbGVkVGFyZ2V0UmVj
dCA9IHVuc2NhbGVkVGFyZ2V0UmVjdDsKKyAgICBtX2xhc3RTbWFydE1hZ25pZmljYXRpb25Pcmln
aW4gPSBvcmlnaW47CisKKyAgICBtX2xhc3RNYWduaWZpY2F0aW9uR2VzdHVyZVdhc1NtYXJ0TWFn
bmlmaWNhdGlvbiA9IHRydWU7Cit9CisKK2Jvb2wgVmlld0dlc3R1cmVDb250cm9sbGVyOjpoYW5k
bGVTY3JvbGxXaGVlbEV2ZW50KE5TRXZlbnQgKmV2ZW50KQoreworICAgIGlmIChtX2FjdGl2ZUdl
c3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKGV2ZW50LnBoYXNlICE9IE5TRXZlbnRQaGFzZUJlZ2FuKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBtX2hhc1BlbmRpbmdTd2lwZSA9IGZhbHNlOworCisgICAgaWYg
KGZhYnMoZXZlbnQuc2Nyb2xsaW5nRGVsdGFYKSA8IGZhYnMoZXZlbnQuc2Nyb2xsaW5nRGVsdGFZ
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCB3aWxsU3dpcGVMZWZ0ID0gZXZl
bnQuc2Nyb2xsaW5nRGVsdGFYID4gMCAmJiBtX3dlYlBhZ2VQcm94eS5pc1Bpbm5lZFRvTGVmdFNp
ZGUoKSAmJiBtX3dlYlBhZ2VQcm94eS5iYWNrRm9yd2FyZExpc3QoKS5iYWNrSXRlbSgpOworICAg
IGJvb2wgd2lsbFN3aXBlUmlnaHQgPSBldmVudC5zY3JvbGxpbmdEZWx0YVggPCAwICYmIG1fd2Vi
UGFnZVByb3h5LmlzUGlubmVkVG9SaWdodFNpZGUoKSAmJiBtX3dlYlBhZ2VQcm94eS5iYWNrRm9y
d2FyZExpc3QoKS5mb3J3YXJkSXRlbSgpOworICAgIGlmICghd2lsbFN3aXBlTGVmdCAmJiAhd2ls
bFN3aXBlUmlnaHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN3aXBlRGlyZWN0aW9u
IGRpcmVjdGlvbiA9IHdpbGxTd2lwZUxlZnQgPyBTd2lwZURpcmVjdGlvbjo6TGVmdCA6IFN3aXBl
RGlyZWN0aW9uOjpSaWdodDsKKworICAgIGlmICghZXZlbnQuaGFzUHJlY2lzZVNjcm9sbGluZ0Rl
bHRhcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFbTlNFdmVudCBpc1N3aXBl
VHJhY2tpbmdGcm9tU2Nyb2xsRXZlbnRzRW5hYmxlZF0pCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChtX3dlYlBhZ2VQcm94eS53aWxsSGFuZGxlSG9yaXpvbnRhbFNjcm9sbEV2ZW50
cygpKSB7CisgICAgICAgIG1faGFzUGVuZGluZ1N3aXBlID0gdHJ1ZTsKKyAgICAgICAgbV9wZW5k
aW5nU3dpcGVEaXJlY3Rpb24gPSBkaXJlY3Rpb247CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICB0cmFja1N3aXBlR2VzdHVyZShldmVudCwgZGlyZWN0aW9uKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6d2hlZWxFdmVudFdh
c05vdEhhbmRsZWRCeVdlYkNvcmUoTlNFdmVudCAqZXZlbnQpCit7CisgICAgaWYgKCFtX2hhc1Bl
bmRpbmdTd2lwZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oYXNQZW5kaW5nU3dpcGUgPSBm
YWxzZTsKKworICAgIGlmIChldmVudC5waGFzZSAhPSBOU0V2ZW50UGhhc2VCZWdhbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdHJhY2tTd2lwZUdlc3R1cmUoZXZlbnQsIG1fcGVuZGluZ1N3aXBl
RGlyZWN0aW9uKTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnRyYWNrU3dpcGVH
ZXN0dXJlKE5TRXZlbnQgKmV2ZW50LCBTd2lwZURpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAg
Vmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLnJlY29yZFNuYXBzaG90KG1fd2ViUGFnZVByb3h5
KTsKKworICAgIENHRmxvYXQgbWF4UHJvZ3Jlc3MgPSAoZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0
aW9uOjpMZWZ0KSA/IDEgOiAwOworICAgIENHRmxvYXQgbWluUHJvZ3Jlc3MgPSAoZGlyZWN0aW9u
ID09IFN3aXBlRGlyZWN0aW9uOjpSaWdodCkgPyAtMSA6IDA7CisgICAgUmVmUHRyPFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0+IHRhcmdldEl0ZW0gPSAoZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0aW9u
OjpMZWZ0KSA/IG1fd2ViUGFnZVByb3h5LmJhY2tGb3J3YXJkTGlzdCgpLmJhY2tJdGVtKCkgOiBt
X3dlYlBhZ2VQcm94eS5iYWNrRm9yd2FyZExpc3QoKS5mb3J3YXJkSXRlbSgpOworICAgIF9fYmxv
Y2sgYm9vbCBzd2lwZUNhbmNlbGxlZCA9IGZhbHNlOworCisgICAgW2V2ZW50IHRyYWNrU3dpcGVF
dmVudFdpdGhPcHRpb25zOjAgZGFtcGVuQW1vdW50VGhyZXNob2xkTWluOm1pblByb2dyZXNzIG1h
eDptYXhQcm9ncmVzcyB1c2luZ0hhbmRsZXI6XihDR0Zsb2F0IHByb2dyZXNzLCBOU0V2ZW50UGhh
c2UgcGhhc2UsIEJPT0wgaXNDb21wbGV0ZSwgQk9PTCAqc3RvcCkgeworICAgICAgICBpZiAocGhh
c2UgPT0gTlNFdmVudFBoYXNlQmVnYW4pCisgICAgICAgICAgICB0aGlzLT5iZWdpblN3aXBlR2Vz
dHVyZSh0YXJnZXRJdGVtLmdldCgpLCBkaXJlY3Rpb24pOworICAgICAgICBDR0Zsb2F0IGNsYW1w
ZWRQcm9ncmVzcyA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByb2dyZXNzLCBtaW5Qcm9ncmVzcyksIG1h
eFByb2dyZXNzKTsKKyAgICAgICAgdGhpcy0+aGFuZGxlU3dpcGVHZXN0dXJlKHRhcmdldEl0ZW0u
Z2V0KCksIGNsYW1wZWRQcm9ncmVzcywgZGlyZWN0aW9uKTsKKyAgICAgICAgaWYgKHBoYXNlID09
IE5TRXZlbnRQaGFzZUNhbmNlbGxlZCkKKyAgICAgICAgICAgIHN3aXBlQ2FuY2VsbGVkID0gdHJ1
ZTsKKyAgICAgICAgaWYgKGlzQ29tcGxldGUpCisgICAgICAgICAgICB0aGlzLT5lbmRTd2lwZUdl
c3R1cmUodGFyZ2V0SXRlbS5nZXQoKSwgc3dpcGVDYW5jZWxsZWQpOworICAgIH1dOworfQorCitG
bG9hdFJlY3QgVmlld0dlc3R1cmVDb250cm9sbGVyOjp3aW5kb3dSZWxhdGl2ZUJvdW5kc0ZvckN1
c3RvbVN3aXBlVmlld3MoKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBzd2lwZUFyZWE7CisgICAg
Zm9yIChjb25zdCBhdXRvJiB2aWV3IDogbV9jdXN0b21Td2lwZVZpZXdzKQorICAgICAgICBzd2lw
ZUFyZWEudW5pdGUoW3ZpZXcgY29udmVydFJlY3Q6W3ZpZXcgYm91bmRzXSB0b1ZpZXc6bmlsXSk7
CisgICAgcmV0dXJuIHN3aXBlQXJlYTsKK30KKworc3RhdGljIENBTGF5ZXIgKmxlYXN0Q29tbW9u
QW5jZXN0b3JMYXllcihWZWN0b3I8UmV0YWluUHRyPENBTGF5ZXI+PiYgbGF5ZXJzKQoreworICAg
IFZlY3RvcjxWZWN0b3I8Q0FMYXllciAqPj4gbGl2ZUxheWVyUGF0aHNGcm9tUm9vdChsYXllcnMu
c2l6ZSgpKTsKKworICAgIHNpemVfdCBzaG9ydGVzdFBhdGhMZW5ndGggPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpOworCisgICAgZm9yIChzaXplX3QgbGF5ZXJJbmRleCA9IDA7
IGxheWVySW5kZXggPCBsYXllcnMuc2l6ZSgpOyBsYXllckluZGV4KyspIHsKKyAgICAgICAgQ0FM
YXllciAqcGFyZW50ID0gW2xheWVyc1tsYXllckluZGV4XSBzdXBlcmxheWVyXTsKKyAgICAgICAg
d2hpbGUgKHBhcmVudCkgeworICAgICAgICAgICAgbGl2ZUxheWVyUGF0aHNGcm9tUm9vdFtsYXll
ckluZGV4XS5pbnNlcnQoMCwgcGFyZW50KTsKKyAgICAgICAgICAgIHNob3J0ZXN0UGF0aExlbmd0
aCA9IHN0ZDo6bWluKHNob3J0ZXN0UGF0aExlbmd0aCwgbGl2ZUxheWVyUGF0aHNGcm9tUm9vdFts
YXllckluZGV4XS5zaXplKCkpOworICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnN1cGVybGF5
ZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBwYXRoSW5kZXggPSAwOyBw
YXRoSW5kZXggPCBzaG9ydGVzdFBhdGhMZW5ndGg7IHBhdGhJbmRleCsrKSB7CisgICAgICAgIENB
TGF5ZXIgKmZpcnN0UGF0aExheWVyID0gbGl2ZUxheWVyUGF0aHNGcm9tUm9vdFswXVtwYXRoSW5k
ZXhdOworICAgICAgICBmb3IgKHNpemVfdCBsYXllckluZGV4ID0gMTsgbGF5ZXJJbmRleCA8IGxh
eWVycy5zaXplKCk7IGxheWVySW5kZXgrKykgeworICAgICAgICAgICAgaWYgKGxpdmVMYXllclBh
dGhzRnJvbVJvb3RbbGF5ZXJJbmRleF1bcGF0aEluZGV4XSAhPSBmaXJzdFBhdGhMYXllcikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmlyc3RQYXRoTGF5ZXI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gbGl2ZUxheWVyUGF0aHNGcm9tUm9vdFswXVtzaG9ydGVzdFBhdGhMZW5ndGhd
OworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUoV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSogdGFyZ2V0SXRlbSwgU3dpcGVEaXJlY3Rpb24gZGlyZWN0aW9u
KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnMuaXNFbXB0eSgpKTsKKwor
ICAgIG1fYWN0aXZlR2VzdHVyZVR5cGUgPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlOworCisgICAg
Q0FMYXllciAqcm9vdENvbnRlbnRMYXllciA9IG1fd2ViUGFnZVByb3h5LmFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdSb290TGF5ZXIoKTsKKworICAgIG1fc3dpcGVTbmFwc2hvdExheWVyID0gYWRvcHRO
UyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0
QmFja2dyb3VuZENvbG9yOkNHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yV2hpdGUpXTsK
KworICAgIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IHNuYXBzaG90ID0gVmlld1NuYXBzaG90U3Rv
cmU6OnNoYXJlZCgpLnNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUodGFyZ2V0SXRlbSkuZmlyc3Q7
CisKKyAgICBpZiAoc25hcHNob3QpIHsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwOTAKKyAgICAgICAgdWludDMyX3QgcHVyZ2VhYmlsaXR5U3RhdGUgPSBrSU9TdXJm
YWNlUHVyZ2VhYmxlTm9uVm9sYXRpbGU7CisgICAgICAgIElPU3VyZmFjZVNldFB1cmdlYWJsZShz
bmFwc2hvdC5nZXQoKSwga0lPU3VyZmFjZVB1cmdlYWJsZU5vblZvbGF0aWxlLCAmcHVyZ2VhYmls
aXR5U3RhdGUpOworCisgICAgICAgIGlmIChwdXJnZWFiaWxpdHlTdGF0ZSAhPSBrSU9TdXJmYWNl
UHVyZ2VhYmxlRW1wdHkpCisgICAgICAgICAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0Q29u
dGVudHM6KGlkKXNuYXBzaG90LmdldCgpXTsKKyNlbHNlCisgICAgICAgIFttX3N3aXBlU25hcHNo
b3RMYXllciBzZXRDb250ZW50czooaWQpc25hcHNob3QuZ2V0KCldOworI2VuZGlmCisgICAgfQor
CisgICAgbV9jdXJyZW50U3dpcGVDdXN0b21WaWV3Qm91bmRzID0gd2luZG93UmVsYXRpdmVCb3Vu
ZHNGb3JDdXN0b21Td2lwZVZpZXdzKCk7CisKKyAgICBGbG9hdFJlY3Qgc3dpcGVBcmVhOworICAg
IGlmICghbV9jdXN0b21Td2lwZVZpZXdzLmlzRW1wdHkoKSkgeworICAgICAgICBzd2lwZUFyZWEg
PSBtX2N1cnJlbnRTd2lwZUN1c3RvbVZpZXdCb3VuZHM7CisKKyAgICAgICAgZm9yIChjb25zdCBh
dXRvJiB2aWV3IDogbV9jdXN0b21Td2lwZVZpZXdzKSB7CisgICAgICAgICAgICBDQUxheWVyICps
YXllciA9IFt2aWV3IGxheWVyXTsKKyAgICAgICAgICAgIEFTU0VSVChsYXllcik7CisgICAgICAg
ICAgICBtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnMuYXBwZW5kKGxheWVyKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXBlQXJlYSA9IHJvb3RDb250ZW50TGF5ZXIuZnJhbWU7
CisgICAgICAgIG1fY3VycmVudFN3aXBlTGl2ZUxheWVycy5hcHBlbmQocm9vdENvbnRlbnRMYXll
cik7CisgICAgfQorCisgICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNldENvbnRlbnRzR3Jhdml0
eTprQ0FHcmF2aXR5VG9wTGVmdF07CisgICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNldENvbnRl
bnRzU2NhbGU6bV93ZWJQYWdlUHJveHkuZGV2aWNlU2NhbGVGYWN0b3IoKV07CisgICAgW21fc3dp
cGVTbmFwc2hvdExheWVyIHNldEFuY2hvclBvaW50OkNHUG9pbnRaZXJvXTsKKyAgICBbbV9zd2lw
ZVNuYXBzaG90TGF5ZXIgc2V0RnJhbWU6c3dpcGVBcmVhXTsKKyAgICBbbV9zd2lwZVNuYXBzaG90
TGF5ZXIgc2V0TmFtZTpAIkdlc3R1cmUgU3dpcGUgU25hcHNob3QgTGF5ZXIiXTsKKyAgICBbbV9z
d2lwZVNuYXBzaG90TGF5ZXIgd2ViX2Rpc2FibGVBbGxBY3Rpb25zXTsKKworICAgIGlmIChtX3dl
YlBhZ2VQcm94eS5wcmVmZXJlbmNlcygpLnZpZXdHZXN0dXJlRGVidWdnaW5nRW5hYmxlZCgpKSB7
CisgICAgICAgIENBRmlsdGVyKiBmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NB
RmlsdGVyR2F1c3NpYW5CbHVyXTsKKyAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEZsb2F0OjNdIGZvcktleTpAImlucHV0UmFkaXVzIl07CisgICAgICAgIFttX3N3
aXBlU25hcHNob3RMYXllciBzZXRGaWx0ZXJzOkBbZmlsdGVyXV07CisgICAgfQorCisgICAgLy8g
V2UgZG9uJ3Qga25vdyBlbm91Z2ggYWJvdXQgdGhlIGN1c3RvbSB2aWV3cycgaGllcmFyY2h5IHRv
IGFwcGx5IGEgc2hhZG93LgorICAgIGlmIChtX3N3aXBlVHJhbnNpdGlvblN0eWxlID09IFN3aXBl
VHJhbnNpdGlvblN0eWxlOjpPdmVybGFwICYmIG1fY3VzdG9tU3dpcGVWaWV3cy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgUmV0YWluUHRyPENHUGF0aFJlZj4gc2hhZG93UGF0aCA9IGFkb3B0Q0YoQ0dQ
YXRoQ3JlYXRlV2l0aFJlY3QoW21fc3dpcGVTbmFwc2hvdExheWVyIGJvdW5kc10sIDApKTsKKwor
ICAgICAgICBpZiAoZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0aW9uOjpMZWZ0KSB7CisgICAgICAg
ICAgICBbcm9vdENvbnRlbnRMYXllciBzZXRTaGFkb3dDb2xvcjpDR0NvbG9yR2V0Q29uc3RhbnRD
b2xvcihrQ0dDb2xvckJsYWNrKV07CisgICAgICAgICAgICBbcm9vdENvbnRlbnRMYXllciBzZXRT
aGFkb3dPcGFjaXR5OnN3aXBlT3ZlcmxheVNoYWRvd09wYWNpdHldOworICAgICAgICAgICAgW3Jv
b3RDb250ZW50TGF5ZXIgc2V0U2hhZG93UmFkaXVzOnN3aXBlT3ZlcmxheVNoYWRvd1JhZGl1c107
CisgICAgICAgICAgICBbcm9vdENvbnRlbnRMYXllciBzZXRTaGFkb3dQYXRoOnNoYWRvd1BhdGgu
Z2V0KCldOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgW21fc3dpcGVTbmFwc2hvdExh
eWVyIHNldFNoYWRvd0NvbG9yOkNHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yQmxhY2sp
XTsKKyAgICAgICAgICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRTaGFkb3dPcGFjaXR5OnN3
aXBlT3ZlcmxheVNoYWRvd09wYWNpdHldOworICAgICAgICAgICAgW21fc3dpcGVTbmFwc2hvdExh
eWVyIHNldFNoYWRvd1JhZGl1czpzd2lwZU92ZXJsYXlTaGFkb3dSYWRpdXNdOworICAgICAgICAg
ICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNldFNoYWRvd1BhdGg6c2hhZG93UGF0aC5nZXQoKV07
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIGN1c3RvbSBzd2lwaW5nIHZp
ZXdzLCB3ZSBhc3N1bWUgdGhhdCB0aGUgdmlld3Mgd2VyZSBwYXNzZWQgdG8gdXMgaW4gYmFjay10
by1mcm9udCB6LW9yZGVyLgorICAgIENBTGF5ZXIgKmxheWVyQWRqYWNlbnRUb1NuYXBzaG90ID0g
ZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0aW9uOjpMZWZ0ID8gbV9jdXJyZW50U3dpcGVMaXZlTGF5
ZXJzLmZpcnN0KCkuZ2V0KCkgOiBtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnMubGFzdCgpLmdldCgp
OworICAgIENBTGF5ZXIgKnNuYXBzaG90TGF5ZXJQYXJlbnQ7CisKKyAgICBpZiAobV9jdXJyZW50
U3dpcGVMaXZlTGF5ZXJzLnNpemUoKSA9PSAxKQorICAgICAgICBzbmFwc2hvdExheWVyUGFyZW50
ID0gW21fY3VycmVudFN3aXBlTGl2ZUxheWVyc1swXSBzdXBlcmxheWVyXTsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gV2UgaW5zZXJ0IG91ciBzbmFwc2hvdCBpbnRvIHRoZSBmaXJzdCBzaGFyZWQg
c3VwZXJsYXllciBvZiB0aGUgY3VzdG9tIHZpZXdzJyBsYXllciwgYWJvdmUgdGhlIGZyb250bW9z
dCBvciBiZWxvdyB0aGUgYm90dG9tbW9zdCBsYXllci4KKyAgICAgICAgc25hcHNob3RMYXllclBh
cmVudCA9IGxlYXN0Q29tbW9uQW5jZXN0b3JMYXllcihtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnMp
OworCisgICAgICAgIC8vIElmIHRoZSBsYXllcnMgYXJlIG5vdCBhbGwgc2libGluZ3MsIGZpbmQg
dGhlIGNoaWxkIG9mIHRoZSBsYXllciB3ZSdyZSBnb2luZyB0byBpbnNlcnQgdGhlIHNuYXBzaG90
IGludG8gd2hpY2ggaGFzIHRoZSBmcm9udG1vc3QvYm90dG9tbW9zdCBsYXllciBhcyBhIGNoaWxk
LgorICAgICAgICB3aGlsZSAoc25hcHNob3RMYXllclBhcmVudCAhPSBsYXllckFkamFjZW50VG9T
bmFwc2hvdC5zdXBlcmxheWVyKQorICAgICAgICAgICAgbGF5ZXJBZGphY2VudFRvU25hcHNob3Qg
PSBsYXllckFkamFjZW50VG9TbmFwc2hvdC5zdXBlcmxheWVyOworICAgIH0KKworICAgIGlmIChk
aXJlY3Rpb24gPT0gU3dpcGVEaXJlY3Rpb246OkxlZnQpCisgICAgICAgIFtzbmFwc2hvdExheWVy
UGFyZW50IGluc2VydFN1YmxheWVyOm1fc3dpcGVTbmFwc2hvdExheWVyLmdldCgpIGJlbG93Omxh
eWVyQWRqYWNlbnRUb1NuYXBzaG90XTsKKyAgICBlbHNlCisgICAgICAgIFtzbmFwc2hvdExheWVy
UGFyZW50IGluc2VydFN1YmxheWVyOm1fc3dpcGVTbmFwc2hvdExheWVyLmdldCgpIGFib3ZlOmxh
eWVyQWRqYWNlbnRUb1NuYXBzaG90XTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OmhhbmRsZVN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLCBk
b3VibGUgcHJvZ3Jlc3MsIFN3aXBlRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBBU1NFUlQo
bV9hY3RpdmVHZXN0dXJlVHlwZSA9PSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlKTsKKworICAgIGRv
dWJsZSB3aWR0aDsKKyAgICBpZiAoIW1fY3VzdG9tU3dpcGVWaWV3cy5pc0VtcHR5KCkpCisgICAg
ICAgIHdpZHRoID0gbV9jdXJyZW50U3dpcGVDdXN0b21WaWV3Qm91bmRzLndpZHRoKCk7CisgICAg
ZWxzZQorICAgICAgICB3aWR0aCA9IG1fd2ViUGFnZVByb3h5LmFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdSb290TGF5ZXIoKS5mcmFtZS5zaXplLndpZHRoOworCisgICAgZG91YmxlIHN3aXBpbmdMYXll
ck9mZnNldCA9IGZsb29yKHdpZHRoICogcHJvZ3Jlc3MpOworCisgICAgaWYgKG1fc3dpcGVUcmFu
c2l0aW9uU3R5bGUgPT0gU3dpcGVUcmFuc2l0aW9uU3R5bGU6Ok92ZXJsYXApIHsKKyAgICAgICAg
aWYgKGRpcmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6UmlnaHQpCisgICAgICAgICAgICBbbV9z
d2lwZVNuYXBzaG90TGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RNYWtlVHJhbnNsYXRp
b24od2lkdGggKyBzd2lwaW5nTGF5ZXJPZmZzZXQsIDAsIDApXTsKKyAgICB9IGVsc2UgaWYgKG1f
c3dpcGVUcmFuc2l0aW9uU3R5bGUgPT0gU3dpcGVUcmFuc2l0aW9uU3R5bGU6OlB1c2gpCisgICAg
ICAgIFttX3N3aXBlU25hcHNob3RMYXllciBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VU
cmFuc2xhdGlvbigoZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0aW9uOjpMZWZ0ID8gLXdpZHRoIDog
d2lkdGgpICsgc3dpcGluZ0xheWVyT2Zmc2V0LCAwLCAwKV07CisKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGxheWVyIDogbV9jdXJyZW50U3dpcGVMaXZlTGF5ZXJzKSB7CisgICAgICAgIGlmIChtX3N3
aXBlVHJhbnNpdGlvblN0eWxlID09IFN3aXBlVHJhbnNpdGlvblN0eWxlOjpPdmVybGFwKSB7Cisg
ICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0aW9uOjpMZWZ0KQorICAgICAg
ICAgICAgICAgIFtsYXllciBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VUcmFuc2xhdGlv
bihzd2lwaW5nTGF5ZXJPZmZzZXQsIDAsIDApXTsKKyAgICAgICAgfSBlbHNlIGlmIChtX3N3aXBl
VHJhbnNpdGlvblN0eWxlID09IFN3aXBlVHJhbnNpdGlvblN0eWxlOjpQdXNoKQorICAgICAgICAg
ICAgW2xheWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVRyYW5zbGF0aW9uKHN3aXBp
bmdMYXllck9mZnNldCwgMCwgMCldOworICAgIH0KK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6OmVuZFN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVt
LCBib29sIGNhbmNlbGxlZCkKK3sKKyAgICBBU1NFUlQobV9hY3RpdmVHZXN0dXJlVHlwZSA9PSBW
aWV3R2VzdHVyZVR5cGU6OlN3aXBlKTsKKworICAgIENBTGF5ZXIgKnJvb3RMYXllciA9IG1fd2Vi
UGFnZVByb3h5LmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKTsKKworICAgIFtyb290
TGF5ZXIgc2V0U2hhZG93T3BhY2l0eTowXTsKKyAgICBbcm9vdExheWVyIHNldFNoYWRvd1JhZGl1
czowXTsKKworICAgIGlmIChjYW5jZWxsZWQpIHsKKyAgICAgICAgcmVtb3ZlU3dpcGVTbmFwc2hv
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWludDY0X3QgcmVuZGVyVHJlZVNp
emUgPSBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuc25hcHNob3RBbmRSZW5kZXJUcmVlU2l6
ZSh0YXJnZXRJdGVtKS5zZWNvbmQ7CisgICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OlZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OlNldFJlbmRlclRyZWVTaXpl
Tm90aWZpY2F0aW9uVGhyZXNob2xkKHJlbmRlclRyZWVTaXplICogc3dpcGVTbmFwc2hvdFJlbW92
YWxSZW5kZXJUcmVlU2l6ZVRhcmdldEZyYWN0aW9uKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkp
OworCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBsYWNlIHRoZSBjdXJyZW50IGJhY2stZm9y
d2FyZCBpdGVtJ3Mgc25hcHNob3QKKyAgICAvLyBsaWtlIHdlIG5vcm1hbGx5IHdvdWxkIHdoZW4g
Z29pbmcgYmFjayBvciBmb3J3YXJkLCBiZWNhdXNlIHdlIGFyZQorICAgIC8vIGRpc3BsYXlpbmcg
dGhlIGRlc3RpbmF0aW9uIGl0ZW0ncyBzbmFwc2hvdC4KKyAgICBWaWV3U25hcHNob3RTdG9yZTo6
c2hhcmVkKCkuZGlzYWJsZVNuYXBzaG90dGluZygpOworICAgIG1fd2ViUGFnZVByb3h5LmdvVG9C
YWNrRm9yd2FyZEl0ZW0odGFyZ2V0SXRlbSk7CisgICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJl
ZCgpLmVuYWJsZVNuYXBzaG90dGluZygpOworCisgICAgaWYgKCFyZW5kZXJUcmVlU2l6ZSkgewor
ICAgICAgICByZW1vdmVTd2lwZVNuYXBzaG90KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX3N3aXBlV2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3Qoc3dpcGVTbmFwc2hvdFJlbW92
YWxXYXRjaGRvZ0R1cmF0aW9uLmNvdW50KCkpOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6ZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQoKQoreworICAgIHJlbW92ZVN3aXBl
U25hcHNob3QoKTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnN3aXBlU25hcHNo
b3RXYXRjaGRvZ1RpbWVyRmlyZWQoVGltZXI8Vmlld0dlc3R1cmVDb250cm9sbGVyPiopCit7Cisg
ICAgcmVtb3ZlU3dpcGVTbmFwc2hvdCgpOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6cmVtb3ZlU3dpcGVTbmFwc2hvdCgpCit7CisgICAgbV9zd2lwZVdhdGNoZG9nVGltZXIuc3Rv
cCgpOworCisgICAgaWYgKG1fYWN0aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpT
d2lwZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxMDkwCisgICAgSU9TdXJmYWNlUmVmIHNuYXBzaG90U3VyZmFjZSA9IChJT1N1cmZh
Y2VSZWYpW21fc3dpcGVTbmFwc2hvdExheWVyIGNvbnRlbnRzXTsKKyAgICBpZiAoc25hcHNob3RT
dXJmYWNlKQorICAgICAgICBJT1N1cmZhY2VTZXRQdXJnZWFibGUoc25hcHNob3RTdXJmYWNlLCBr
SU9TdXJmYWNlUHVyZ2VhYmxlVm9sYXRpbGUsIG51bGxwdHIpOworI2VuZGlmCisKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGxheWVyIDogbV9jdXJyZW50U3dpcGVMaXZlTGF5ZXJzKQorICAgICAgICBb
bGF5ZXIgc2V0VHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RJZGVudGl0eV07CisKKyAgICBbbV9zd2lw
ZVNuYXBzaG90TGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIG1fc3dpcGVTbmFwc2hv
dExheWVyID0gbnVsbHB0cjsKKworICAgIG1fY3VycmVudFN3aXBlTGl2ZUxheWVycy5jbGVhcigp
OworCisgICAgbV9hY3RpdmVHZXN0dXJlVHlwZSA9IFZpZXdHZXN0dXJlVHlwZTo6Tm9uZTsKK30K
Kwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZEFjdGl2ZUdlc3R1cmUoKQoreworICAg
IGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlID09IFZpZXdHZXN0dXJlVHlwZTo6TWFnbmlmaWNhdGlv
bikgeworICAgICAgICBlbmRNYWduaWZpY2F0aW9uR2VzdHVyZSgpOworICAgICAgICBtX3Zpc2li
bGVDb250ZW50UmVjdElzVmFsaWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK2RvdWJsZSBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6Om1hZ25pZmljYXRpb24oKSBjb25zdAoreworICAgIGlmIChtX2FjdGl2
ZUdlc3R1cmVUeXBlID09IFZpZXdHZXN0dXJlVHlwZTo6TWFnbmlmaWNhdGlvbikKKyAgICAgICAg
cmV0dXJuIG1fbWFnbmlmaWNhdGlvbjsKKworICAgIHJldHVybiBtX3dlYlBhZ2VQcm94eS5wYWdl
U2NhbGVGYWN0b3IoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyAh
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9W
aWV3U25hcHNob3RTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25h
cHNob3RTdG9yZS5oCmluZGV4IDY0YjMwNTMuLjZlMTI1ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmgKQEAgLTI2LDE0ICsyNiwxNCBA
QAogI2lmbmRlZiBWaWV3U25hcHNob3RTdG9yZV9oCiAjZGVmaW5lIFZpZXdTbmFwc2hvdFN0b3Jl
X2gKIAotI2lmICFQTEFURk9STShJT1MpCi0KICNpbmNsdWRlIDxjaHJvbm8+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpbmNs
dWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFz
cyBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOwpAQCAtNzEsNiArNzEsNCBAQCBwcml2YXRlOgogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCi0KICNlbmRp
ZiAvLyBWaWV3U25hcHNob3RTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9WaWV3U25hcHNob3RTdG9yZS5tbQppbmRleCAzYWMyODk1Li40M2QxODQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUubW0KQEAg
LTI2LDggKzI2LDYgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiVmlld1NuYXBzaG90
U3RvcmUuaCIKIAotI2lmICFQTEFURk9STShJT1MpCi0KICNpbXBvcnQgIldlYkJhY2tGb3J3YXJk
TGlzdC5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0IDxDb3JlR3JhcGhpY3Mv
Q29yZUdyYXBoaWNzLmg+CkBAIC0zOCw2ICszNiw3IEBACiAjaW1wb3J0IDxDb3JlR3JhcGhpY3Mv
Q29yZUdyYXBoaWNzUHJpdmF0ZS5oPgogI2VuZGlmCiAKKyNpZiBVU0UoSU9TVVJGQUNFKQogZXh0
ZXJuICJDIiBDR0NvbnRleHRSZWYgQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlKElPU3VyZmFjZVJl
ZiBzdXJmYWNlLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIHNpemVfdCBiaXRzUGVyQ29t
cG9uZW50LCBzaXplX3QgYml0c1BlclBpeGVsLCBDR0NvbG9yU3BhY2VSZWYgc3BhY2UsIENHQml0
bWFwSW5mbyBiaXRtYXBJbmZvKTsKIAogI2lmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkgJiYgX19o
YXNfaW5jbHVkZSg8SU9TdXJmYWNlL0lPU3VyZmFjZVByaXZhdGUuaD4pCkBAIC00OCw5ICs0Nywx
MCBAQCBlbnVtIHsKIH07CiAjZW5kaWYKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTA5MAorI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDkwCiBleHRlcm4gIkMiIElPUmV0dXJuIElPU3VyZmFjZVNldFB1cmdl
YWJsZShJT1N1cmZhY2VSZWYgYnVmZmVyLCB1aW50MzJfdCBuZXdTdGF0ZSwgdWludDMyX3QgKm9s
ZFN0YXRlKTsKICNlbmRpZgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBA
IC0xODEsMTIgKzE4MSwxNCBAQCB2b2lkIFZpZXdTbmFwc2hvdFN0b3JlOjpyZWNvcmRTbmFwc2hv
dChXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKICAgICBzbmFwc2hvdC5zdXJmYWNlQ29udGV4
dCA9IHN1cmZhY2VBbmRDb250ZXh0LnNlY29uZDsKICAgICBzbmFwc2hvdC5jcmVhdGlvblRpbWUg
PSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKIAotI2lmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAgICAgSU9TdXJmYWNlU2V0UHVyZ2VhYmxl
KHNuYXBzaG90LnN1cmZhY2UuZ2V0KCksIGtJT1N1cmZhY2VQdXJnZWFibGVWb2xhdGlsZSwgbnVs
bHB0cik7CiAjZW5kaWYKIAogICAgIG1fc25hcHNob3RNYXAuYWRkKGl0ZW0tPnNuYXBzaG90VVVJ
RCgpLCBzbmFwc2hvdCk7CiAgICAgbV9yZW5kZXJUcmVlU2l6ZU1hcC5hZGQoaXRlbS0+c25hcHNo
b3RVVUlEKCksIHdlYlBhZ2VQcm94eS5yZW5kZXJUcmVlU2l6ZSgpKTsKKworICAgIFdURkxvZ0Fs
d2F5cygic25hcHNob3QgaXRlbSAlcyAlemQgJXpkXG4iLCBpdGVtLT51cmwoKS51dGY4KCkuZGF0
YSgpLCBJT1N1cmZhY2VHZXRXaWR0aChzbmFwc2hvdC5zdXJmYWNlLmdldCgpKSwgSU9TdXJmYWNl
R2V0SGVpZ2h0KHNuYXBzaG90LnN1cmZhY2UuZ2V0KCkpKTsKIH0KIAogc3RkOjpwYWlyPFJldGFp
blB0cjxJT1N1cmZhY2VSZWY+LCB1aW50NjRfdD4gVmlld1NuYXBzaG90U3RvcmU6OnNuYXBzaG90
QW5kUmVuZGVyVHJlZVNpemUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKQEAgLTIwOCw1
ICsyMTAsMyBAQCBzdGQ6OnBhaXI8UmV0YWluUHRyPElPU3VyZmFjZVJlZj4sIHVpbnQ2NF90PiBW
aWV3U25hcHNob3RTdG9yZTo6c25hcHNob3RBbmRSZW5kZQogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMzRhODBhMS4uNGU5NTQwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDIyLDggKzQyMiw4
IEBACiAJCTI5Q0Q1NUFCMTI4RTI5NEYwMDEzM0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdl
T2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjlDRDU1QTkxMjhFMjk0RjAwMTMzQzg1IC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3Qu
bW0gKi87IH07CiAJCTI5RDU1REYxMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyOUQ1NURFRjE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkyOUQ1NURGMjE2MUJGOUYxMDAzMUEyRTMgLyog
V2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91
cFByb3h5TWVzc2FnZXMuaCAqLzsgfTsKLQkJMkQxMjVDNUUxODU3RUEwNTAwM0JBM0NCIC8qIFZp
ZXdHZXN0dXJlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQxMjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJv
bGxlci5oICovOyB9OwotCQkyRDEyNUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVD
b250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQxMjVDNUQxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5tbSAq
LzsgfTsKKwkJMkQxMjVDNUUxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxl
ck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQx
MjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5oICovOyB9
OworCQkyRDEyNUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQxMjVD
NUQxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSAqLzsgfTsK
IAkJMkQxQjVENUQxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRDFCNUQ1QjE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVz
c2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMkQxQjVENUUxODU4NjlDODAwNkM2NTk2IC8qIFZp
ZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDFCNUQ1QzE4NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1
cmVDb250cm9sbGVyTWVzc2FnZXMuaCAqLzsgfTsKIAkJMkQyOEYzRTQxODg1Q0NDMTAwNEI5RUFF
IC8qIFdlYkNocm9tZUNsaWVudElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEMjhGM0UwMTg4NUNDQzEwMDRCOUVBRSAvKiBXZWJDaHJvbWVDbGll
bnRJT1MubW0gKi87IH07CkBAIC00ODMsNiArNDgzLDkgQEAKIAkJMkRBOTQ0QkQxODg1MTFFNzAw
RUQ4NkRCIC8qIE5ldHdvcmtQcm9jZXNzSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0QkMxODg1MTFFNzAwRUQ4NkRCIC8qIE5ldHdvcmtQ
cm9jZXNzSU9TLm1tICovOyB9OwogCQkyRERFMEFGQTE4Mjk4Q0M5MDBGOTdFQUEgLyogUmVtb3Rl
TGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRERFMEFGODE4Mjk4Q0M5MDBGOTdFQUEgLyogUmVtb3RlTGF5ZXJU
cmVlUHJvcGVydHlBcHBsaWVyLmggKi87IH07CiAJCTJEREUwQUZCMTgyOThDQzkwMEY5N0VBQSAv
KiBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMEFGOTE4Mjk4Q0M5MDBGOTdFQUEgLyogUmVt
b3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tICovOyB9OworCQkyREY5NTkzOTE4QTQyNDEy
MDA5Nzg1QTEgLyogVmlld0dlc3R1cmVDb250cm9sbGVySU9TLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREY5NTkzMjE4QTQyNDEyMDA5Nzg1QTEgLyog
Vmlld0dlc3R1cmVDb250cm9sbGVySU9TLmggKi87IH07CisJCTJERjk1OTNCMThBNDI0MTIwMDk3
ODVBMSAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREY5NTkzNDE4QTQyNDEyMDA5Nzg1QTEgLyogVmll
d0dlc3R1cmVDb250cm9sbGVySU9TLm1tICovOyB9OworCQkyREY5NTk0MDE4QTQyOUZGMDA5Nzg1
QTEgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyREY5NTkzRjE4QTQyOUZGMDA5Nzg1QTEgLyogVmlld0dlc3R1
cmVDb250cm9sbGVyLmggKi87IH07CiAJCTMxMDk5OTczMTQ2Qzc1QTIwMDI5REVCOSAvKiBXZWJO
b3RpZmljYXRpb25DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwOTk5NzExNDZDNzU5QjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNs
aWVudC5jcHAgKi87IH07CiAJCTMxMDk5OUM3MTQ2QzlFM0QwMDI5REVCOSAvKiBXZWJOb3RpZmlj
YXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDk5OTY4MTQ2QzcxRjUwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuaCAq
LzsgfTsKIAkJMzEyQzBDNEExNDZEREM4QTAwMTZDOTExIC8qIFdLTm90aWZpY2F0aW9uUHJvdmlk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkMw
QzQ5MTQ2RERDOEEwMDE2QzkxMSAvKiBXS05vdGlmaWNhdGlvblByb3ZpZGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxMDYsOCArMjEwOSw4
IEBACiAJCTI5RDU1REVFMTYxQkY4NzgwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eS5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERUYxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91
cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91
cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFn
ZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRDEy
NUM1QzE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRDEyNUM1RDE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dl
c3R1cmVDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gVmlld0dlc3R1cmVDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyRDEyNUM1QzE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlck1h
Yy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDEyNUM1RDE4NTdFQTA1MDAzQkEz
Q0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1QTE4NTg2NTk5MDA2QzY1OTYgLyogVmlld0dlc3R1
cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNz
YWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQxQjVENUIxODU4NjlDODAw
NkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDFCNUQ1QzE4
NTg2OUM4MDA2QzY1OTYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNzgsNiArMjE4MSw5IEBACiAJCTJE
QTk0NEJDMTg4NTExRTcwMEVEODZEQiAvKiBOZXR3b3JrUHJvY2Vzc0lPUy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzSU9TLm1tOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9TLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyRERFMEFGODE4Mjk4Q0M5MDBGOTdFQUEgLyogUmVtb3RlTGF5ZXJU
cmVlUHJvcGVydHlBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRERFMEFGOTE4Mjk4Q0M5MDBGOTdFQUEgLyogUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlB
cHBsaWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVtb3Rl
TGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyREY5NTkzMjE4QTQyNDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1cmVDb250cm9sbGVySU9TLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFZpZXdHZXN0dXJlQ29udHJvbGxlcklP
Uy5oOyBwYXRoID0gaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyREY5NTkzNDE4QTQyNDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1cmVD
b250cm9sbGVySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
Vmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tOyBwYXRoID0gaW9zL1ZpZXdHZXN0dXJlQ29udHJv
bGxlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkRGOTU5M0YxOEE0MjlG
RjAwOTc4NUExIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzEwOTk5NjgxNDZDNzFGNTAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25DbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwOTk5NzExNDZDNzU5QjAwMjlERUI5IC8qIFdlYk5vdGlm
aWNhdGlvbkNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
ZWJOb3RpZmljYXRpb25DbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
MTJDMEM0OTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MjA5LDYgKzQyMTUsOCBAQAogCQkyREE5NDRB
ODE4ODRFOUFCMDBFRDg2REIgLyogaW9zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQkyREY5NTkzMjE4QTQyNDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1cmVD
b250cm9sbGVySU9TLmggKi8sCisJCQkJMkRGOTU5MzQxOEE0MjQxMjAwOTc4NUExIC8qIFZpZXdH
ZXN0dXJlQ29udHJvbGxlcklPUy5tbSAqLywKIAkJCQkyREE5NDRBOTE4ODRFOUJBMDBFRDg2REIg
LyogVGV4dENoZWNrZXJJT1MubW0gKi8sCiAJCQkJMkRBOTQ0QUExODg0RTlCQTAwRUQ4NkRCIC8q
IFdlYkluc3BlY3RvclByb3h5SU9TLm1tICovLAogCQkJCTJEQTk0NEFCMTg4NEU5QkEwMEVEODZE
QiAvKiBXZWJQYWdlUHJveHlJT1MubW0gKi8sCkBAIC01ODEwLDExICs1ODE4LDEyIEBACiAJCQkJ
MUFBNDE3RUQxMkMwMEQ4NzAwMkJFNjdCIC8qIFRleHRDaGVja2VyTWFjLm1tICovLAogCQkJCTFB
RjA1RDg1MTQ2ODgzNDgwMDhCMUU4MSAvKiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVBy
b3h5LmggKi8sCiAJCQkJMUFGMDVEODQxNDY4ODM0ODAwOEIxRTgxIC8qIFRpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhUHJveHkubW0gKi8sCi0JCQkJMkQxMjVDNUMxODU3RUEwNTAwM0JBM0NC
IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oICovLAotCQkJCTJEMTI1QzVEMTg1N0VBMDUwMDNC
QTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubW0gKi8sCisJCQkJMkQxMjVDNUMxODU3RUEw
NTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5oICovLAorCQkJCTJEMTI1QzVE
MTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gKi8sCiAJCQkJ
MkQxQjVENUExODU4NjU5OTAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdl
cy5pbiAqLywKIAkJCQkyRDZDRDExNzE4OTA1OEE1MDBFNUE0QTAgLyogVmlld1NuYXBzaG90U3Rv
cmUuaCAqLywKIAkJCQkyRDZDRDExODE4OTA1OEE1MDBFNUE0QTAgLyogVmlld1NuYXBzaG90U3Rv
cmUubW0gKi8sCisJCQkJMkRGOTU5M0YxOEE0MjlGRjAwOTc4NUExIC8qIFZpZXdHZXN0dXJlQ29u
dHJvbGxlci5oICovLAogCQkJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBp
Y2tlck1hYy5oICovLAogCQkJCTcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBp
Y2tlck1hYy5tbSAqLywKIAkJCQkxQTFDNjQ4NjExRjQxNUI3MDA1NTNDMTkgLyogV2ViQ29udGV4
dE1hYy5tbSAqLywKQEAgLTY0NTgsNiArNjQ2Nyw3IEBACiAJCQkJRTE4RTY5MEMxNjlCNTYzRjAw
OUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOEU2OTE4
MTY5QjY2N0IwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMzMTUyOTc2MTMwRDBDQjIwMEVEMjQ4MyAvKiBTZWN1cml0eU9yaWdpbkRhdGEu
aCBpbiBIZWFkZXJzICovLAorCQkJCTJERjk1OTQwMThBNDI5RkYwMDk3ODVBMSAvKiBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOEQyQ0NCMTJENTFERkIwMDNC
QjkzQiAvKiBTZXNzaW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjQyMEU1MTJEQ0Uy
RkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMjE3
NDYxMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC02NDY4LDYgKzY0NzgsNyBAQAogCQkJCTFBRDMzMDZGMTZCMUQ5OTEwMDRGNjBFNyAvKiBT
dG9yYWdlQXJlYUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEQ2NjRFMThBMzAzMUIwMEQ4
MkUyMSAvKiBXS0ZyYW1lSW5mb0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUNFQ0Qy
NTE3MTYyREIxMDAxRkM5RUYgLyogU3RvcmFnZUFyZWFNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTJERjk1OTM5MThBNDI0MTIwMDk3ODVBMSAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMzM0REVFMTZERThGODgwMDZBOEUzOCAvKiBTdG9yYWdlQXJl
YU1hcE1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQ0Qjk1QzE2QjczRjlGMDBCN0JC
RDggLyogU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NEU2MTg0RDQ0
QjQwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VGdWxsU2NyZWVuQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTY2MDcsNyArNjYxOCw3IEBACiAJCQkJQkNCNjM0NzgxMTZCRjEwNjAwNjAzMjE1IC8q
IFdlYktpdDJfQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5QkE1MDUxNjk3QzQ1MzAwRTQ0NjE2
IC8qIFdlYktpdDJJbml0aWFsaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkzM0QzQTNDMjEzMzk2
MEIwMDA3MDlCRTQgLyogV2ViTWVkaWFDYWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTJEMTI1QzVFMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTJEMTI1QzVFMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNv
bnRyb2xsZXJNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzRDNBM0M5MTMzOTYxNzkwMDcwOUJF
NCAvKiBXZWJNZWRpYUNhY2hlTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
NzFBMTk0MjE4MjREMjkzMDBGMzJBNUUgLyogV0tOU0RpY3Rpb25hcnkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMzRDNBM0JCMTMzOTYwNjIwMDcwOUJFNCAvKiBXZWJNZWRpYUNhY2hlTWFuYWdlclBy
b3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTc4NTEsNiArNzg2Miw3IEBACiAJCQkJNTFEMTMwNTMx
MzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXF1ZXN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MUQxMzA1NTEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMTc5MDg4RDE2OUJBQTYyMDA2OTA0QzcgLyogU2VjSXRlbVNo
aW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkRGOTU5M0IxOEE0MjQxMjAwOTc4NUExIC8qIFZp
ZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxNzkwODkwMTY5
QkFBN0YwMDY5MDRDNyAvKiBTZWNJdGVtU2hpbU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMThFNjkwQjE2OUI1NjNGMDA5QjY2NzAgLyogU2VjSXRlbVNoaW1Qcm94eS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThFNjkxNzE2OUI2NjdCMDA5QjY2NzAgLyogU2VjSXRl
bVNoaW1Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MTMsNyAr
NzkyNSw3IEBACiAJCQkJQkNEMzY3NUMxNDhDMjZDMDAwNDQ3RTg3IC8qIFdlYkNvbm5lY3Rpb25U
b1VJUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzRBNjJBNzE0NzQ0RUM3MDA2QzY4
MUEgLyogV2ViQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzgyODM2NTE2QjM1NEY2MDBBMjc4RkUgLyogV2ViQ29udGVudFByb2Nlc3NNYWluLm1tIGluIFNv
dXJjZXMgKi8sCi0JCQkJMkQxMjVDNUYxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29u
dHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTJEMTI1QzVGMTg1N0VBMDUwMDNCQTNDQiAv
KiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzgyODM5
OTE2QjQ4REMwMDBBMjc4RkUgLyogV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNCOUUyNDQxMTIwREFDQTAwQTEzN0UwIC8qIFdlYkNvbnRleHQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzFBNTA1RjkxNjgwMDI1NTAwQTkzMEVCIC8qIFdlYkNvbnRl
eHRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYS5tbQppbmRleCBhMTA3NmNjLi4zMjBhNDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWEubW0KQEAgLTMyMyw2ICszMjMsNyBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhOjpmbHVzaExheWVycygpCiAgICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5i
dWlsZFRyYW5zYWN0aW9uKGxheWVyVHJhbnNhY3Rpb24sICptX3Jvb3RMYXllcik7CiAgICAgbGF5
ZXJUcmFuc2FjdGlvbi5zZXRDb250ZW50c1NpemUobV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWlu
RnJhbWUoKS52aWV3KCktPmNvbnRlbnRzU2l6ZSgpKTsKICAgICBsYXllclRyYW5zYWN0aW9uLnNl
dFBhZ2VTY2FsZUZhY3RvcihtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VTY2FsZUZhY3Rvcigp
KTsKKyAgICBsYXllclRyYW5zYWN0aW9uLnNldFJlbmRlclRyZWVTaXplKG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+cmVuZGVyVHJlZVNpemUoKSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGxheWVy
VHJhbnNhY3Rpb24uc2V0TWluaW11bVNjYWxlRmFjdG9yKG1fd2ViUGFnZS0+bWluaW11bVBhZ2VT
Y2FsZUZhY3RvcigpKTsKICAgICBsYXllclRyYW5zYWN0aW9uLnNldE1heGltdW1TY2FsZUZhY3Rv
cihtX3dlYlBhZ2UtPm1heGltdW1QYWdlU2NhbGVGYWN0b3IoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223511</attachid>
            <date>2014-02-07 16:23:54 -0800</date>
            <delta_ts>2014-02-07 16:42:19 -0800</delta_ts>
            <desc>patch</desc>
            <filename>swipe-ios3.diff</filename>
            <type>text/plain</type>
            <size>44339</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxMTAyMWE2Li4zMzNjYzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUg
QEAKKzIwMTQtMDItMDcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViS2l0MiBWaWV3IEdlc3R1cmVzIChTd2lwZSk6IFN1cHBvcnQgZm9yIGlPUwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MzYzCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTE5NDE5ND4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OnJlbmRlclRyZWVTaXplKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246OnNldFJlbmRlclRyZWVTaXplKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1JlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OmRlY29kZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKToKKyAgICAgICAgU2VuZCB0aGUgcmVuZGVyIHRy
ZWUgc2l6ZSBhbG9uZyB3aXRoIHJlbW90ZSBsYXllciB0cmVlIGNvbW1pdHMsCisgICAgICAgIHNv
IHRoYXQgd2UgY2FuIGFjdCB1cG9uIGl0ICh0byBoaWRlIHNuYXBzaG90cykgaW4gdGhlIFVJIHBy
b2Nlc3MKKyAgICAgICAgaW4gc3luYyB3aXRoIGxheWVyIGNvbW1pdHMuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaDoKKyAgICAgICAgV2Ugd2FudCBhbGxv
d3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcyBmb3IgYm90aCBwbGF0Zm9ybXMuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAgICAg
KFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnRha2VWaWV3U25hcHNob3QpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2lvcy9XS0NvbnRlbnRWaWV3Lm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF90YWtlVmll
d1NuYXBzaG90XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0lu
dGVybmFsLmg6CisgICAgICAgIFBsdW1iIHNuYXBzaG90dGluZyB0aHJvdWdoIHRvIFdLVmlld0lP
Uy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLVmlld0lPUy5tbToKKyAgICAgICAg
KC1bV0tWaWV3IHNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOl0pOgorICAg
ICAgICAoLVtXS1ZpZXcgYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXNdKToKKyAg
ICAgICAgQ3JlYXRlL2Rlc3Ryb3kgdGhlIGdlc3R1cmUgY29udHJvbGxlciB3aGVuIHdlIHR1cm4g
b24vb2ZmIGJhY2stZm9yd2FyZCBzd2lwZS4KKyAgICAgICAgVGVsbCBXZWJQYWdlUHJveHkgdG8g
c2F2ZSBzbmFwc2hvdHMgaWYgc3dpcGUgaXMgZW5hYmxlZC4KKworICAgICAgICAoLVtXS1ZpZXcg
Y29udGVudFZpZXc6ZGlkQ29tbWl0TGF5ZXJUcmVlOl0pOgorICAgICAgICBGb3J3YXJkIHRoZSBj
dXJyZW50IHRyYW5zYWN0aW9uJ3MgcmVuZGVyIHRyZWUgc2l6ZSB0byBWaWV3R2VzdHVyZUNvbnRy
b2xsZXIuCisKKyAgICAgICAgKC1bV0tWaWV3IHRha2VWaWV3U25hcHNob3RGb3JDb250ZW50Vmll
dzpdKToKKyAgICAgICAgU25hcHNob3QgdGhlIHZpZXcuIFRoaXMgaXMgbm90IHRoZSBiZXN0IFNQ
SSB0byB1c2UsIHdlIHNob3VsZCBjb25zaWRlcgorICAgICAgICB1c2luZyBvbmUgb2YgdGhvc2Ug
d2hpY2ggcmV0dXJucyBhbiBJT1N1cmZhY2UgYW5kIHBsdW1iaW5nIGl0IHRocm91Z2gKKyAgICAg
ICAgdG8gVmlld1NuYXBzaG90U3RvcmUsIGJ1dCBhbGwgb2Ygb3VyIFBhZ2VDbGllbnQgYWJzdHJh
Y3Rpb24gbWFrZXMgdGhhdCBhbm5veWluZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY29yZE5hdmlnYXRp
b25TbmFwc2hvdCk6CisgICAgICAgIFJlY29yZCBzbmFwc2hvdHMgb24gaU9TIGFzIHdlbGwuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbTogQWRk
ZWQuCisgICAgICAgICgtW1dLU3dpcGVJbnRlcmFjdGl2ZVRyYW5zaXRpb25EZWxlZ2F0ZSBpbml0
V2l0aFZpZXdHZXN0dXJlQ29udHJvbGxlcjpXZWJLaXQ6OnN3aXBpbmdWaWV3Ol0pOgorICAgICAg
ICAoLVtXS1N3aXBlSW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGUgV2ViS2l0OjpWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OmRpcmVjdGlvbkZvclRyYW5zaXRpb246XSk6CisgICAgICAgICgtW1dL
U3dpcGVJbnRlcmFjdGl2ZVRyYW5zaXRpb25EZWxlZ2F0ZSBzdGFydEludGVyYWN0aXZlVHJhbnNp
dGlvbjpdKToKKyAgICAgICAgKC1bV0tTd2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRlbGVnYXRl
IHNob3VsZEJlZ2luSW50ZXJhY3RpdmVUcmFuc2l0aW9uOl0pOgorICAgICAgICAoLVtXS1N3aXBl
SW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGUgaW50ZXJhY3RpdmVUcmFuc2l0aW9uOmdlc3R1
cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNv
Z25pemVyOl0pOgorICAgICAgICAoLVtXS1N3aXBlSW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdh
dGUgaW50ZXJhY3RpdmVUcmFuc2l0aW9uOmdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY2VpdmVU
b3VjaDpdKToKKyAgICAgICAgKC1bV0tTd2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRlbGVnYXRl
IGdlc3R1cmVSZWNvZ25pemVyRm9ySW50ZXJhY3RpdmVUcmFuc2l0aW9uOldpdGhUYXJnZXQ6YWN0
aW9uOl0pOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZpZXdHZXN0
dXJlQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
flZpZXdHZXN0dXJlQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6aW5zdGFsbFN3aXBlSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0
dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OmNhblN3aXBlSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2V0UmVuZGVyVHJlZVNpemUpOgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnN3aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3
aXBlU25hcHNob3QpOgorCisgICAgICAgICogVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRy
b2xsZXIuaDoKKyAgICAgICAgQWRkIGlPUy1zcGVjaWZpYyBtZXRob2RzLCBhbmQgZG9uJ3QgaW5j
bHVkZSBhbGwgb2YgdGhlIE1hYy1zcGVjaWZpYyBjb2RlLgorICAgICAgICBXZSBjYW4gbW92ZSB0
b3dhcmRzIHNoYXJpbmcgbW9yZSBsb2dpYyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW46CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Vmlld0dlc3R1cmVDb250cm9sbGVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBz
aG90U3RvcmU6OnJlY29yZFNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90
U3RvcmU6OnNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUpOgorICAgICAgICBNYWtlIFZpZXdTbmFw
c2hvdFN0b3JlIGJ1aWxkL3dvcmsgd2l0aG91dCBJT1N1cmZhY2UuCisKKyAgICAgICAgKiBXZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTQtMDItMDcgIERlYW4gSmFja3Nv
biAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkdMIGRvZXNuJ3QgdXBkYXRlIHdpdGgg
cmVtb3RlbHkgaG9zdGVkIGxheWVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oCmluZGV4IDMyMDBiZjcuLjQ0NTUwZWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uLmgKQEAgLTE2MCw2ICsxNjAsOSBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUg
cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVGYWN0b3I7IH0KICAg
ICB2b2lkIHNldFBhZ2VTY2FsZUZhY3Rvcihkb3VibGUgcGFnZVNjYWxlRmFjdG9yKSB7IG1fcGFn
ZVNjYWxlRmFjdG9yID0gcGFnZVNjYWxlRmFjdG9yOyB9CisgICAgCisgICAgdWludDY0X3QgcmVu
ZGVyVHJlZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclRyZWVTaXplOyB9CisgICAgdm9p
ZCBzZXRSZW5kZXJUcmVlU2l6ZSh1aW50NjRfdCByZW5kZXJUcmVlU2l6ZSkgeyBtX3JlbmRlclRy
ZWVTaXplID0gcmVuZGVyVHJlZVNpemU7IH0KIAogICAgIGRvdWJsZSBtaW5pbXVtU2NhbGVGYWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1TY2FsZUZhY3RvcjsgfQogICAgIHZvaWQgc2V0
TWluaW11bVNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZSkgeyBtX21pbmltdW1TY2FsZUZhY3RvciA9
IHNjYWxlOyB9CkBAIC0xNzcsNiArMTgwLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBtX2Rlc3Ryb3llZExheWVySURzOwog
ICAgIFdlYkNvcmU6OkludFNpemUgbV9jb250ZW50c1NpemU7CiAgICAgZG91YmxlIG1fcGFnZVNj
YWxlRmFjdG9yOworICAgIHVpbnQ2NF90IG1fcmVuZGVyVHJlZVNpemU7CiAgICAgZG91YmxlIG1f
bWluaW11bVNjYWxlRmFjdG9yOwogICAgIGRvdWJsZSBtX21heGltdW1TY2FsZUZhY3RvcjsKICAg
ICBib29sIG1fYWxsb3dzVXNlclNjYWxpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQppbmRleCAyM2YzNWRjLi41
MTJjNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW0KQEAgLTM1Myw2ICszNTMsNyBAQCB2b2lkIFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiAgICAgZW5jb2RlciA8PCBtX21pbmltdW1TY2FsZUZhY3RvcjsKICAgICBlbmNvZGVy
IDw8IG1fbWF4aW11bVNjYWxlRmFjdG9yOwogICAgIGVuY29kZXIgPDwgbV9hbGxvd3NVc2VyU2Nh
bGluZzsKKyAgICBlbmNvZGVyIDw8IG1fcmVuZGVyVHJlZVNpemU7CiB9CiAKIGJvb2wgUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb246OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mIHJlc3VsdCkKQEAgLTM5MCw2ICszOTEsOSBA
QCBib29sIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpkZWNvZGUoSVBDOjpBcmd1bWVudERl
Y29kZXImIGRlY29kZXIsIFJlbW90ZUxheQogCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQubV9hbGxvd3NVc2VyU2NhbGluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX3JlbmRlclRyZWVTaXplKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oCmluZGV4IDA1ZjYyYjcuLjhl
OTFkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tW
aWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tW
aWV3UHJpdmF0ZS5oCkBAIC03MCw3ICs3MCw2IEBACiBAcHJvcGVydHkgKHJlYWRvbmx5LCBnZXR0
ZXI9aXNVc2luZ1VJU2lkZUNvbXBvc2l0aW5nKSBCT09MIHVzaW5nVUlTaWRlQ29tcG9zaXRpbmc7
CiBAcHJvcGVydHkgKHJlYWR3cml0ZSkgQk9PTCBhbGxvd3NNYWduaWZpY2F0aW9uOwogQHByb3Bl
cnR5IChyZWFkd3JpdGUpIGRvdWJsZSBtYWduaWZpY2F0aW9uOwotQHByb3BlcnR5IChyZWFkd3Jp
dGUpIEJPT0wgYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7CiAKIEBwcm9wZXJ0
eShjb3B5LCBub25hdG9taWMpIE5TQ29sb3IgKnVuZGVybGF5Q29sb3I7CiAKQEAgLTk3LDQgKzk2
LDYgQEAKIAogI2VuZGlmCiAKK0Bwcm9wZXJ0eSAocmVhZHdyaXRlKSBCT09MIGFsbG93c0JhY2tG
b3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOworCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbSBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IDhlMWEyZmYu
LmE2MzM4NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLm1tCkBAIC0zMjUsOCArMzI1LDcgQEAgQ0FMYXllciAqUGFnZUNs
aWVudEltcGw6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKSBjb25zdAogCiBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gUGFnZUNsaWVudEltcGw6OnRha2VWaWV3U25hcHNob3QoKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFtt
X3ZpZXcgX3Rha2VWaWV3U25hcHNob3RdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjp3aGVl
bEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBl
dmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29u
dGVudFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZp
ZXcuaAppbmRleCBjZGM4ODZlLi5jMDQ4NmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlldy5oCkBAIC00Nyw2ICs0Nyw5IEBAIGNsYXNzIFJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOwogQG9wdGlvbmFsCiAtICh2b2lkKWNvbnRlbnRWaWV3
RGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZTooV0tDb250ZW50VmlldyAqKWNvbnRlbnRWaWV3Owog
LSAodm9pZCljb250ZW50VmlldzooV0tDb250ZW50VmlldyAqKWNvbnRlbnRWaWV3IGRpZENvbW1p
dExheWVyVHJlZTooY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpbGF5
ZXJUcmVlVHJhbnNhY3Rpb247CisKKy8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgYmVsb25nIGluIGEg
J2RlbGVnYXRlJy4KKy0gKENHSW1hZ2VSZWYpdGFrZVZpZXdTbmFwc2hvdEZvckNvbnRlbnRWaWV3
OihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXc7CiBAZW5kCiAKIFdLX0FQSV9DTEFTUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXcubW0KaW5k
ZXggZGZlZThhYy4uMDEwNjk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9pb3MvV0tDb250ZW50Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC00Niw2ICs0NiwxMCBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCisj
aWYgVVNFKElPU1VSRkFDRSkKKyNpbXBvcnQgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KKyNlbmRp
ZgorCiAjaWYgX19oYXNfaW5jbHVkZSg8UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPikK
ICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZVByaXZhdGUuaD4KICNlbmRpZgpAQCAtMzY3
LDQgKzM3MSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAgICAgLy8gW1t3cmFwcGVyKF9w
YWdlLT5wcm9jZXNzKCkuY29udGV4dCgpKSBfZ2VvbG9jYXRpb25Qcm92aWRlcl0gZGVjaWRlUG9s
aWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjp0b0FQSSgmb3JpZ2luKSBmcmFtZTp0
b0FQSSgmZnJhbWUpIHJlcXVlc3Q6dG9BUEkoJnBlcm1pc3Npb25SZXF1ZXN0KSB3aW5kb3c6W3Nl
bGYgd2luZG93XV07CiB9CiAKKy0gKFJldGFpblB0cjxDR0ltYWdlUmVmPilfdGFrZVZpZXdTbmFw
c2hvdAoreworICAgIHJldHVybiBbX2RlbGVnYXRlIHRha2VWaWV3U25hcHNob3RGb3JDb250ZW50
VmlldzpzZWxmXTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJuYWwuaAppbmRleCAwNGNiZmQ4Li5lMWFh
Mjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJuYWwuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW1wb3J0ICJXS0Nv
bnRlbnRWaWV3LmgiCiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgorI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC02OSw0ICs3MCw2IEBAIHN0cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjsK
IC0gKHZvaWQpX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6KGNvbnN0IFdlYktpdDo6SW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKWluZm87CiAtICh2b2lkKV9kZWNpZGVQb2xp
Y3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOihXZWJLaXQ6OldlYlNlY3VyaXR5T3Jp
Z2luJilvcmlnaW4gZnJhbWU6KFdlYktpdDo6V2ViRnJhbWVQcm94eSYpZnJhbWUgcmVxdWVzdDoo
V2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkmKXBlcm1pc3Npb25SZXF1
ZXN0OwogCistIChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4pX3Rha2VWaWV3U25hcHNob3Q7CisKIEBl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLVmlld0lP
Uy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLVmlld0lPUy5tbQppbmRl
eCBmNzVmYTZmLi4yYTlhMjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2lvcy9XS1ZpZXdJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9p
b3MvV0tWaWV3SU9TLm1tCkBAIC0yNiwxNSArMjYsMjIgQEAKICNpbXBvcnQgImNvbmZpZy5oIgog
I2ltcG9ydCAiV0tWaWV3UHJpdmF0ZS5oIgogCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbi5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyLmgiCisjaW1wb3J0ICJX
ZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmgi
CiAjaW1wb3J0ICJXS0NvbnRlbnRWaWV3LmgiCiAjaW1wb3J0ICJXS1Byb2Nlc3NHcm91cFByaXZh
dGUuaCIKICNpbXBvcnQgIldLU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiV0tBUElDYXN0LmgiCisj
aW1wb3J0IDxVSUtpdC9VSUltYWdlX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJU2NyZWVu
Lmg+CiAjaW1wb3J0IDxVSUtpdC9VSVNjcm9sbFZpZXdfUHJpdmF0ZS5oPgotI2ltcG9ydCA8V2Vi
S2l0Mi9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oPgorI2ltcG9ydCA8VUlLaXQvVUlXaW5k
b3dfUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCiBAaW50ZXJmYWNlIFdLVmlldyAoKSA8VUlTY3JvbGxWaWV3RGVsZWdhdGUs
IFdLQ29udGVudFZpZXdEZWxlZ2F0ZT4KIC0gKHZvaWQpX3NldERvY3VtZW50U2NhbGU6KENHRmxv
YXQpbmV3U2NhbGU7CiBAZW5kCkBAIC00NCw2ICs1MSwxMCBAQAogICAgIFJldGFpblB0cjxXS0Nv
bnRlbnRWaWV3PiBfY29udGVudFZpZXc7CiAKICAgICBCT09MIF9pc1dhaXRpbmdGb3JOZXdMYXll
clRyZWVBZnRlckRpZENvbW1pdExvYWQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZpZXdHZXN0dXJl
Q29udHJvbGxlcj4gX2dlc3R1cmVDb250cm9sbGVyOworICAgIAorICAgIEJPT0wgX2FsbG93c0Jh
Y2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOworCiAgICAgQk9PTCBfaGFzU3RhdGljTWluaW11
bUxheW91dFNpemU7CiAgICAgQ0dTaXplIF9taW5pbXVtTGF5b3V0U2l6ZU92ZXJyaWRlOwogfQpA
QCAtOTcsNiArMTA4LDI2IEBACiAgICAgcmV0dXJuIFtfY29udGVudFZpZXcgYnJvd3NpbmdDb250
ZXh0Q29udHJvbGxlcl07CiB9CiAKKy0gKHZvaWQpc2V0QWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0
aW9uR2VzdHVyZXM6KEJPT0wpYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMKK3sK
KyAgICBfYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMgPSBhbGxvd3NCYWNrRm9y
d2FyZE5hdmlnYXRpb25HZXN0dXJlczsKKyAgICAKKyAgICBXZWJQYWdlUHJveHkgKndlYlBhZ2VQ
cm94eSA9IHRvSW1wbChbX2NvbnRlbnRWaWV3IF9wYWdlUmVmXSk7CisgICAgCisgICAgaWYgKGFs
bG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzICYmICFfZ2VzdHVyZUNvbnRyb2xsZXIp
IHsKKyAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI+KCp3ZWJQYWdlUHJveHkpOworICAgICAgICBfZ2VzdHVyZUNvbnRyb2xs
ZXItPmluc3RhbGxTd2lwZUhhbmRsZXIoc2VsZik7CisgICAgfSBlbHNlCisgICAgICAgIF9nZXN0
dXJlQ29udHJvbGxlciA9IG51bGxwdHI7CisgICAgCisgICAgd2ViUGFnZVByb3h5LT5zZXRTaG91
bGRSZWNvcmROYXZpZ2F0aW9uU25hcHNob3RzKGFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdl
c3R1cmVzKTsKK30KKworLSAoQk9PTClhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJl
cworeworICAgIHJldHVybiBfYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7Cit9
CisKICNwcmFnbWEgbWFyayBXS0NvbnRlbnRWaWV3RGVsZWdhdGUKIAogLSAodm9pZCljb250ZW50
Vmlld0RpZENvbW1pdExvYWRGb3JNYWluRnJhbWU6KFdLQ29udGVudFZpZXcgKiljb250ZW50Vmll
dwpAQCAtMTA0LDEzICsxMzUsMTYgQEAKICAgICBfaXNXYWl0aW5nRm9yTmV3TGF5ZXJUcmVlQWZ0
ZXJEaWRDb21taXRMb2FkID0gWUVTOwogfQogCi0tICh2b2lkKWNvbnRlbnRWaWV3OihXS0NvbnRl
bnRWaWV3ICopY29udGVudFZpZXcgZGlkQ29tbWl0TGF5ZXJUcmVlOihjb25zdCBXZWJLaXQ6OlJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFuc2FjdGlvbgorLSAodm9pZClj
b250ZW50VmlldzooV0tDb250ZW50VmlldyAqKWNvbnRlbnRWaWV3IGRpZENvbW1pdExheWVyVHJl
ZTooY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKWxheWVyVHJlZVRyYW5zYWN0aW9u
CiB7CiAgICAgW19zY3JvbGxWaWV3IHNldE1pbmltdW1ab29tU2NhbGU6bGF5ZXJUcmVlVHJhbnNh
Y3Rpb24ubWluaW11bVNjYWxlRmFjdG9yKCldOwogICAgIFtfc2Nyb2xsVmlldyBzZXRNYXhpbXVt
Wm9vbVNjYWxlOmxheWVyVHJlZVRyYW5zYWN0aW9uLm1heGltdW1TY2FsZUZhY3RvcigpXTsKICAg
ICBbX3Njcm9sbFZpZXcgc2V0Wm9vbUVuYWJsZWQ6bGF5ZXJUcmVlVHJhbnNhY3Rpb24uYWxsb3dz
VXNlclNjYWxpbmcoKV07CiAgICAgaWYgKCFbX3Njcm9sbFZpZXcgaXNab29taW5nXSAmJiAhW19z
Y3JvbGxWaWV3IGlzWm9vbUJvdW5jaW5nXSkKICAgICAgICAgW19zY3JvbGxWaWV3IHNldFpvb21T
Y2FsZTpsYXllclRyZWVUcmFuc2FjdGlvbi5wYWdlU2NhbGVGYWN0b3IoKV07CisgICAgCisgICAg
aWYgKF9nZXN0dXJlQ29udHJvbGxlcikKKyAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyLT5zZXRS
ZW5kZXJUcmVlU2l6ZShsYXllclRyZWVUcmFuc2FjdGlvbi5yZW5kZXJUcmVlU2l6ZSgpKTsKIAog
ICAgIGlmIChfaXNXYWl0aW5nRm9yTmV3TGF5ZXJUcmVlQWZ0ZXJEaWRDb21taXRMb2FkKSB7CiAg
ICAgICAgIFVJRWRnZUluc2V0cyBpbnNldCA9IFtfc2Nyb2xsVmlldyBjb250ZW50SW5zZXRdOwpA
QCAtMjE5LDYgKzI1MywxNyBAQAogICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OmNv
bnRlbnRPZmZzZXRdOwogfQogCisKKy0gKENHSW1hZ2VSZWYpdGFrZVZpZXdTbmFwc2hvdEZvckNv
bnRlbnRWaWV3OihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXcKK3sKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIGFjcXVpcmUgYW4gSU9TdXJmYWNlIGRpcmVjdGx5LCBp
bnN0ZWFkIG9mIGdvaW5nIHRvIENHSW1hZ2UgaGVyZSBhbmQgYmFjayBpbiBWaWV3U25hcHNob3RT
dG9yZS4KKyAgICBVSUdyYXBoaWNzQmVnaW5JbWFnZUNvbnRleHRXaXRoT3B0aW9ucyhzZWxmLmJv
dW5kcy5zaXplLCBZRVMsIHNlbGYud2luZG93LnNjcmVlbi5zY2FsZSk7CisgICAgW3NlbGYgZHJh
d1ZpZXdIaWVyYXJjaHlJblJlY3Q6W3NlbGYgYm91bmRzXSBhZnRlclNjcmVlblVwZGF0ZXM6Tk9d
OworICAgIFVJSW1hZ2UgKmltYWdlID0gVUlHcmFwaGljc0dldEltYWdlRnJvbUN1cnJlbnRJbWFn
ZUNvbnRleHQoKTsKKyAgICBVSUdyYXBoaWNzRW5kSW1hZ2VDb250ZXh0KCk7CisgICAgcmV0dXJu
IGltYWdlLkNHSW1hZ2U7Cit9CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLVmlldyAoUHJp
dmF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMmM0
ZWMxMy4uMWM4ZGYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKQEAgLTc2Nyw3ICs3NjcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjb3JkTmF2aWdhdGlv
blNuYXBzaG90KCkKICAgICBpZiAoIW1fc2hvdWxkUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90cykK
ICAgICAgICAgcmV0dXJuOwogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQor
I2lmIFBMQVRGT1JNKE1BQykKICAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkucmVjb3Jk
U25hcHNob3QoKnRoaXMpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbSBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvVmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZDMxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbQpAQCAtMCww
ICsxLDI3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiVmlld0dlc3R1cmVDb250cm9sbGVyLmgiCisKKyNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgor
I2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCIKKyNpbXBvcnQgIlZpZXdH
ZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3JNZXNzYWdlcy5oIgorI2ltcG9ydCAiVmlld1NuYXBzaG90
U3RvcmUuaCIKKyNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgorI2ltcG9ydCAiV2ViUGFn
ZU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldlYlByb2Nl
c3NQcm94eS5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxV
SUtpdC9VSUFwcGxpY2F0aW9uX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJU2NyZWVuRWRn
ZVBhbkdlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxVSUtpdC9VSVZpZXdDb250cm9sbGVy
VHJhbnNpdGlvbmluZ19Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVdlYlRvdWNoRXZlbnRz
R2VzdHVyZVJlY29nbml6ZXIuaD4KKyNpbXBvcnQgPFVJS2l0L19VSU5hdmlnYXRpb25JbnRlcmFj
dGl2ZVRyYW5zaXRpb24uaD4KKyNpbXBvcnQgPFVJS2l0L19VSU5hdmlnYXRpb25QYXJhbGxheFRy
YW5zaXRpb24uaD4KKworI2lmIFVTRShJT1NVUkZBQ0UpCisjaW1wb3J0IDxJT1N1cmZhY2UvSU9T
dXJmYWNlLmg+CisjaW1wb3J0IDxJT1N1cmZhY2UvSU9TdXJmYWNlUHJpdmF0ZS5oPgorI2VuZGlm
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAaW50ZXJmYWNlIFdLU3dpcGVJbnRlcmFj
dGl2ZVRyYW5zaXRpb25EZWxlZ2F0ZSA6IE5TT2JqZWN0IDxfVUlOYXZpZ2F0aW9uSW50ZXJhY3Rp
dmVUcmFuc2l0aW9uQmFzZURlbGVnYXRlPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlld0dl
c3R1cmVDb250cm9sbGVyOihXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlciopZ2VzdHVyZUNv
bnRyb2xsZXIgc3dpcGluZ1ZpZXc6KFVJVmlldyAqKXZpZXc7CitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBXS1N3aXBlSW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGUKK3sKKyAgICBXZWJLaXQ6
OlZpZXdHZXN0dXJlQ29udHJvbGxlciAqX2dlc3R1cmVDb250cm9sbGVyOworICAgIFJldGFpblB0
cjxfVUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZT4gX2JhY2tUcmFuc2l0aW9u
Q29udHJvbGxlcjsKK30KKworc3RhdGljIGNvbnN0IGZsb2F0IHN3aXBlU25hcHNob3RSZW1vdmFs
UmVuZGVyVHJlZVNpemVUYXJnZXRGcmFjdGlvbiA9IDAuNTsKK3N0YXRpYyBjb25zdCBzdGQ6OmNo
cm9ubzo6c2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNoZG9nRHVyYXRpb24gPSAzX3M7
CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpZXdHZXN0dXJlQ29udHJvbGxlcjooV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXIqKWdlc3R1cmVDb250cm9sbGVyIHN3aXBpbmdWaWV3OihV
SVZpZXcgKil2aWV3Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoc2VsZikg
eworICAgICAgICBfZ2VzdHVyZUNvbnRyb2xsZXIgPSBnZXN0dXJlQ29udHJvbGxlcjsKKworICAg
ICAgICBfYmFja1RyYW5zaXRpb25Db250cm9sbGVyID0gYWRvcHROUyhbX1VJTmF2aWdhdGlvbklu
dGVyYWN0aXZlVHJhbnNpdGlvbkJhc2UgYWxsb2NdKTsKKyAgICAgICAgX2JhY2tUcmFuc2l0aW9u
Q29udHJvbGxlciA9IFtfYmFja1RyYW5zaXRpb25Db250cm9sbGVyIGluaXRXaXRoR2VzdHVyZVJl
Y29nbml6ZXJWaWV3OnZpZXcgYW5pbWF0b3I6bmlsIGRlbGVnYXRlOnNlbGZdOworICAgIH0KKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3
aXBlRGlyZWN0aW9uKWRpcmVjdGlvbkZvclRyYW5zaXRpb246KF9VSU5hdmlnYXRpb25JbnRlcmFj
dGl2ZVRyYW5zaXRpb25CYXNlICopdHJhbnNpdGlvbgoreworICAgIHJldHVybiB0cmFuc2l0aW9u
ID09IF9iYWNrVHJhbnNpdGlvbkNvbnRyb2xsZXIgPyBXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6U3dpcGVEaXJlY3Rpb246OkxlZnQgOiBXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxl
cjo6U3dpcGVEaXJlY3Rpb246OlJpZ2h0OworfQorCistICh2b2lkKXN0YXJ0SW50ZXJhY3RpdmVU
cmFuc2l0aW9uOihfVUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZSAqKXRyYW5z
aXRpb24KK3sKKyAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPmJlZ2luU3dpcGVHZXN0dXJlKHRyYW5z
aXRpb24sIFtzZWxmIGRpcmVjdGlvbkZvclRyYW5zaXRpb246dHJhbnNpdGlvbl0pOworfQorCist
IChCT09MKXNob3VsZEJlZ2luSW50ZXJhY3RpdmVUcmFuc2l0aW9uOihfVUlOYXZpZ2F0aW9uSW50
ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZSAqKXRyYW5zaXRpb24KK3sKKyAgICByZXR1cm4gX2dlc3R1
cmVDb250cm9sbGVyLT5jYW5Td2lwZUluRGlyZWN0aW9uKFtzZWxmIGRpcmVjdGlvbkZvclRyYW5z
aXRpb246dHJhbnNpdGlvbl0pOworfQorCistIChCT09MKWludGVyYWN0aXZlVHJhbnNpdGlvbjoo
X1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbkJhc2UgKil0cmFuc2l0aW9uIGdlc3R1
cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hv
dWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVy
ZVJlY29nbml6ZXIgKilvdGhlckdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgcmV0dXJuIFtvdGhl
ckdlc3R1cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJVGFwR2VzdHVyZVJlY29nbml6ZXIg
Y2xhc3NdXTsKK30KKworLSAoQk9PTClpbnRlcmFjdGl2ZVRyYW5zaXRpb246KF9VSU5hdmlnYXRp
b25JbnRlcmFjdGl2ZVRyYW5zaXRpb25CYXNlICopdHJhbnNpdGlvbiBnZXN0dXJlUmVjb2duaXpl
cjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyIHNob3VsZFJlY2VpdmVU
b3VjaDooVUlUb3VjaCAqKXRvdWNoCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoVUlQYW5H
ZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyRm9ySW50ZXJhY3RpdmVUcmFuc2l0
aW9uOihfVUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZSAqKXRyYW5zaXRpb24g
V2l0aFRhcmdldDooaWQpdGFyZ2V0IGFjdGlvbjooU0VMKWFjdGlvbgoreworICAgIFVJU2NyZWVu
RWRnZVBhbkdlc3R1cmVSZWNvZ25pemVyICpyZWNvZ25pemVyID0gW1tVSVNjcmVlbkVkZ2VQYW5H
ZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6dGFyZ2V0IGFjdGlvbjphY3Rp
b25dOworICAgIHN3aXRjaCAoW3NlbGYgZGlyZWN0aW9uRm9yVHJhbnNpdGlvbjp0cmFuc2l0aW9u
XSkgeworICAgIGNhc2UgV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0
aW9uOjpMZWZ0OgorICAgICAgICBbcmVjb2duaXplciBzZXRFZGdlczpVSU1pblhFZGdlXTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dp
cGVEaXJlY3Rpb246OlJpZ2h0OgorICAgICAgICBbcmVjb2duaXplciBzZXRFZGdlczpVSU1heFhF
ZGdlXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZWNvZ25pemVyOworfQor
CitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZp
ZXdHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKKyAgICA6IG1f
d2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKKyAgICAsIG1fYWN0aXZlR2VzdHVyZVR5cGUoVmll
d0dlc3R1cmVUeXBlOjpOb25lKQorICAgICwgbV9zd2lwZVdhdGNoZG9nVGltZXIodGhpcywgJlZp
ZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZCkKKyAg
ICAsIG1fdGFyZ2V0UmVuZGVyVHJlZVNpemUoMCkKK3sKK30KKworVmlld0dlc3R1cmVDb250cm9s
bGVyOjp+Vmlld0dlc3R1cmVDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBWaWV3R2VzdHVyZUNv
bnRyb2xsZXI6Omluc3RhbGxTd2lwZUhhbmRsZXIoVUlWaWV3ICp2aWV3KQoreworICAgIEFTU0VS
VCghbV9zd2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRlbGVnYXRlKTsKKyAgICBtX3N3aXBlSW50
ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tTd2lwZUludGVyYWN0aXZl
VHJhbnNpdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFZpZXdHZXN0dXJlQ29udHJvbGxlcjp0
aGlzIHN3aXBpbmdWaWV3OnZpZXddKTsKKyAgICBtX2xpdmVTd2lwZVZpZXcgPSB2aWV3OworfQor
Cit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUoX1VJTmF2aWdh
dGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbkJhc2UgKnRyYW5zaXRpb24sIFN3aXBlRGlyZWN0aW9u
IGRpcmVjdGlvbikKK3sKKyAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVy
ZVR5cGU6Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYktpdDo6V2ViQmFja0Zvcndh
cmRMaXN0SXRlbSogdGFyZ2V0SXRlbSA9IGRpcmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6TGVm
dCA/IG1fd2ViUGFnZVByb3h5LmJhY2tGb3J3YXJkTGlzdCgpLmJhY2tJdGVtKCkgOiBtX3dlYlBh
Z2VQcm94eS5iYWNrRm9yd2FyZExpc3QoKS5mb3J3YXJkSXRlbSgpOworCisgICAgYXV0byBzbmFw
c2hvdCA9IFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLnNuYXBzaG90QW5kUmVu
ZGVyVHJlZVNpemUodGFyZ2V0SXRlbSkuZmlyc3Q7CisKKyAgICBSZXRhaW5QdHI8VUlWaWV3Q29u
dHJvbGxlcj4gc25hcHNob3RWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tVSVZpZXdDb250cm9s
bGVyIGFsbG9jXSBpbml0XSk7CisgICAgbV9zbmFwc2hvdFZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOlttX2xpdmVTd2lwZVZpZXcgYm91bmRzXV0pOworICAgIGlm
IChzbmFwc2hvdCkgeworI2lmIFVTRShJT1NVUkZBQ0UpCisgICAgICAgIHVpbnQzMl90IHB1cmdl
YWJpbGl0eVN0YXRlID0ga0lPU3VyZmFjZVB1cmdlYWJsZU5vblZvbGF0aWxlOworICAgICAgICBJ
T1N1cmZhY2VTZXRQdXJnZWFibGUoc25hcHNob3QuZ2V0KCksIGtJT1N1cmZhY2VQdXJnZWFibGVO
b25Wb2xhdGlsZSwgJnB1cmdlYWJpbGl0eVN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChw
dXJnZWFiaWxpdHlTdGF0ZSAhPSBrSU9TdXJmYWNlUHVyZ2VhYmxlRW1wdHkpCisgICAgICAgICAg
ICBbbV9zbmFwc2hvdFZpZXcgbGF5ZXJdLmNvbnRlbnRzID0gKGlkKXNuYXBzaG90LmdldCgpOwor
I2Vsc2UKKyAgICAgICAgW21fc25hcHNob3RWaWV3IGxheWVyXS5jb250ZW50cyA9IChpZClzbmFw
c2hvdC5nZXQoKTsKKyNlbmRpZgorICAgIH0KKyAgICBbbV9zbmFwc2hvdFZpZXcgc2V0QmFja2dy
b3VuZENvbG9yOltVSUNvbG9yIHdoaXRlQ29sb3JdXTsKKyAgICBbbV9zbmFwc2hvdFZpZXcgbGF5
ZXJdLmNvbnRlbnRzR3Jhdml0eSA9IEAidG9wTGVmdCI7CisgICAgW21fc25hcHNob3RWaWV3IGxh
eWVyXS5jb250ZW50c1NjYWxlID0gbV9saXZlU3dpcGVWaWV3LndpbmRvdy5zY3JlZW4uc2NhbGU7
CisgICAgW3NuYXBzaG90Vmlld0NvbnRyb2xsZXIgc2V0VmlldzptX3NuYXBzaG90Vmlldy5nZXQo
KV07CisKKyAgICBtX3RyYW5zaXRpb25Db250YWluZXJWaWV3ID0gYWRvcHROUyhbW1VJVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpbbV9saXZlU3dpcGVWaWV3IGZyYW1lXV0pOworCisgICAgW21f
bGl2ZVN3aXBlVmlldy5zdXBlcnZpZXcgaW5zZXJ0U3VidmlldzptX3RyYW5zaXRpb25Db250YWlu
ZXJWaWV3LmdldCgpIGJlbG93U3VidmlldzptX2xpdmVTd2lwZVZpZXddOworICAgIFttX3RyYW5z
aXRpb25Db250YWluZXJWaWV3IGFkZFN1YnZpZXc6bV9saXZlU3dpcGVWaWV3XTsKKworICAgIFJl
dGFpblB0cjxVSVZpZXdDb250cm9sbGVyPiB0YXJnZXR0ZWRWaWV3Q29udHJvbGxlciA9IGFkb3B0
TlMoW1tVSVZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3RhcmdldHRlZFZpZXdD
b250cm9sbGVyIHNldFZpZXc6bV9saXZlU3dpcGVWaWV3XTsKKworICAgIG1fb3JpZ2luYWxMaXZl
U3dpcGVWaWV3RnJhbWUgPSBtX2xpdmVTd2lwZVZpZXcuZnJhbWU7CisgICAgbV9saXZlU3dpcGVW
aWV3LmZyYW1lID0gbV9saXZlU3dpcGVWaWV3LmJvdW5kczsKKyAgICAKKyAgICBVSU5hdmlnYXRp
b25Db250cm9sbGVyT3BlcmF0aW9uIHRyYW5zaXRpb25PcGVyYXRpb24gPSBkaXJlY3Rpb24gPT0g
U3dpcGVEaXJlY3Rpb246OkxlZnQgPyBVSU5hdmlnYXRpb25Db250cm9sbGVyT3BlcmF0aW9uUG9w
IDogVUlOYXZpZ2F0aW9uQ29udHJvbGxlck9wZXJhdGlvblB1c2g7CisgICAgUmV0YWluUHRyPF9V
SU5hdmlnYXRpb25QYXJhbGxheFRyYW5zaXRpb24+IGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBhZG9w
dE5TKFtbX1VJTmF2aWdhdGlvblBhcmFsbGF4VHJhbnNpdGlvbiBhbGxvY10gaW5pdFdpdGhDdXJy
ZW50T3BlcmF0aW9uOnRyYW5zaXRpb25PcGVyYXRpb25dKTsKKworICAgIFJldGFpblB0cjxfVUlW
aWV3Q29udHJvbGxlck9uZVRvT25lVHJhbnNpdGlvbkNvbnRleHQ+IHRyYW5zaXRpb25Db250ZXh0
ID0gYWRvcHROUyhbW19VSVZpZXdDb250cm9sbGVyT25lVG9PbmVUcmFuc2l0aW9uQ29udGV4dCBh
bGxvY10gaW5pdF0pOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0RnJvbVZpZXdDb250cm9s
bGVyOnRhcmdldHRlZFZpZXdDb250cm9sbGVyLmdldCgpXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRl
eHQgX3NldFRvVmlld0NvbnRyb2xsZXI6c25hcHNob3RWaWV3Q29udHJvbGxlci5nZXQoKV07Cisg
ICAgW3RyYW5zaXRpb25Db250ZXh0IF9zZXRDb250YWluZXJWaWV3Om1fdHJhbnNpdGlvbkNvbnRh
aW5lclZpZXcuZ2V0KCldOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0RnJvbVN0YXJ0RnJh
bWU6W21fbGl2ZVN3aXBlVmlldyBib3VuZHNdXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRleHQgX3Nl
dFRvRW5kRnJhbWU6W21fbGl2ZVN3aXBlVmlldyBib3VuZHNdXTsKKyAgICBbdHJhbnNpdGlvbkNv
bnRleHQgX3NldFRvU3RhcnRGcmFtZTpDR1JlY3RaZXJvXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRl
eHQgX3NldEZyb21FbmRGcmFtZTpDR1JlY3RaZXJvXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRleHQg
X3NldEFuaW1hdG9yOmFuaW1hdGlvbkNvbnRyb2xsZXIuZ2V0KCldOworICAgIFt0cmFuc2l0aW9u
Q29udGV4dCBfc2V0SW50ZXJhY3Rvcjp0cmFuc2l0aW9uXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRl
eHQgX3NldFRyYW5zaXRpb25Jc0luRmxpZ2h0OllFU107CisgICAgW3RyYW5zaXRpb25Db250ZXh0
IF9zZXRDb21wbGV0aW9uSGFuZGxlcjpeKF9VSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbkNvbnRl
eHQgKmNvbnRleHQsIEJPT0wgZGlkQ29tcGxldGUpIHsgZW5kU3dpcGVHZXN0dXJlKHRhcmdldEl0
ZW0sIGNvbnRleHQsICFkaWRDb21wbGV0ZSk7IH1dOworCisgICAgW3RyYW5zaXRpb24gc2V0QW5p
bWF0aW9uQ29udHJvbGxlcjphbmltYXRpb25Db250cm9sbGVyLmdldCgpXTsKKyAgICBbdHJhbnNp
dGlvbiBzdGFydEludGVyYWN0aXZlVHJhbnNpdGlvbjp0cmFuc2l0aW9uQ29udGV4dC5nZXQoKV07
CisKKyAgICBtX2FjdGl2ZUdlc3R1cmVUeXBlID0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZTsKK30K
KworYm9vbCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmNhblN3aXBlSW5EaXJlY3Rpb24oU3dpcGVE
aXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIGlmIChkaXJlY3Rpb24gPT0gU3dpcGVEaXJlY3Rp
b246OkxlZnQpCisgICAgICAgIHJldHVybiAhIW1fd2ViUGFnZVByb3h5LmJhY2tGb3J3YXJkTGlz
dCgpLmJhY2tJdGVtKCk7CisgICAgcmV0dXJuICEhbV93ZWJQYWdlUHJveHkuYmFja0ZvcndhcmRM
aXN0KCkuZm9yd2FyZEl0ZW0oKTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVu
ZFN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLCBfVUlWaWV3
Q29udHJvbGxlclRyYW5zaXRpb25Db250ZXh0ICpjb250ZXh0LCBib29sIGNhbmNlbGxlZCkKK3sK
KyAgICBbY29udGV4dCBfc2V0VHJhbnNpdGlvbklzSW5GbGlnaHQ6Tk9dOworICAgIFtjb250ZXh0
IF9zZXRJbnRlcmFjdG9yOm5pbF07CisgICAgW2NvbnRleHQgX3NldEFuaW1hdG9yOm5pbF07Cisg
ICAgCisgICAgW1ttX3RyYW5zaXRpb25Db250YWluZXJWaWV3IHN1cGVydmlld10gaW5zZXJ0U3Vi
dmlldzptX3NuYXBzaG90Vmlldy5nZXQoKSBhYm92ZVN1YnZpZXc6bV90cmFuc2l0aW9uQ29udGFp
bmVyVmlldy5nZXQoKV07CisgICAgW1ttX3RyYW5zaXRpb25Db250YWluZXJWaWV3IHN1cGVydmll
d10gaW5zZXJ0U3VidmlldzptX2xpdmVTd2lwZVZpZXcgYWJvdmVTdWJ2aWV3Om1fdHJhbnNpdGlv
bkNvbnRhaW5lclZpZXcuZ2V0KCldOworICAgIFttX3RyYW5zaXRpb25Db250YWluZXJWaWV3IHJl
bW92ZUZyb21TdXBlcnZpZXddOworICAgIG1fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcgPSBudWxs
cHRyOworICAgIAorICAgIFttX2xpdmVTd2lwZVZpZXcgc2V0RnJhbWU6bV9vcmlnaW5hbExpdmVT
d2lwZVZpZXdGcmFtZV07CisgICAgW21fc25hcHNob3RWaWV3IHNldEZyYW1lOm1fb3JpZ2luYWxM
aXZlU3dpcGVWaWV3RnJhbWVdOworICAgIAorICAgIGlmIChjYW5jZWxsZWQpIHsKKyAgICAgICAg
cmVtb3ZlU3dpcGVTbmFwc2hvdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IG1fdGFyZ2V0UmVuZGVyVHJlZVNpemUgPSBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuc25h
cHNob3RBbmRSZW5kZXJUcmVlU2l6ZSh0YXJnZXRJdGVtKS5zZWNvbmQgKiBzd2lwZVNuYXBzaG90
UmVtb3ZhbFJlbmRlclRyZWVTaXplVGFyZ2V0RnJhY3Rpb247CisgICAgCisgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byByZXBsYWNlIHRoZSBjdXJyZW50IGJhY2stZm9yd2FyZCBpdGVtJ3Mgc25hcHNo
b3QKKyAgICAvLyBsaWtlIHdlIG5vcm1hbGx5IHdvdWxkIHdoZW4gZ29pbmcgYmFjayBvciBmb3J3
YXJkLCBiZWNhdXNlIHdlIGFyZQorICAgIC8vIGRpc3BsYXlpbmcgdGhlIGRlc3RpbmF0aW9uIGl0
ZW0ncyBzbmFwc2hvdC4KKyAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuZGlzYWJsZVNu
YXBzaG90dGluZygpOworICAgIG1fd2ViUGFnZVByb3h5LmdvVG9CYWNrRm9yd2FyZEl0ZW0odGFy
Z2V0SXRlbSk7CisgICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLmVuYWJsZVNuYXBzaG90
dGluZygpOworICAgIAorICAgIGlmICghbV90YXJnZXRSZW5kZXJUcmVlU2l6ZSkgeworICAgICAg
ICByZW1vdmVTd2lwZVNuYXBzaG90KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X3N3aXBlV2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3Qoc3dpcGVTbmFwc2hvdFJlbW92YWxXYXRj
aGRvZ0R1cmF0aW9uLmNvdW50KCkpOworfQorICAgIAordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6OnNldFJlbmRlclRyZWVTaXplKHVpbnQ2NF90IHJlbmRlclRyZWVTaXplKQoreworICAgIGlm
IChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGUpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX3RhcmdldFJlbmRlclRyZWVTaXplICYmIHJlbmRlclRyZWVT
aXplID4gbV90YXJnZXRSZW5kZXJUcmVlU2l6ZSkKKyAgICAgICAgcmVtb3ZlU3dpcGVTbmFwc2hv
dCgpOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNo
ZG9nVGltZXJGaXJlZChUaW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+KikKK3sKKyAgICByZW1v
dmVTd2lwZVNuYXBzaG90KCk7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpyZW1v
dmVTd2lwZVNuYXBzaG90KCkKK3sKKyAgICBtX3N3aXBlV2F0Y2hkb2dUaW1lci5zdG9wKCk7CisK
KyAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlKQor
ICAgICAgICByZXR1cm47CisgICAgCisjaWYgVVNFKElPU1VSRkFDRSkKKyAgICBJT1N1cmZhY2VS
ZWYgc25hcHNob3RTdXJmYWNlID0gKElPU3VyZmFjZVJlZilbbV9zbmFwc2hvdFZpZXcgbGF5ZXJd
LmNvbnRlbnRzOworICAgIGlmIChzbmFwc2hvdFN1cmZhY2UpCisgICAgICAgIElPU3VyZmFjZVNl
dFB1cmdlYWJsZShzbmFwc2hvdFN1cmZhY2UsIGtJT1N1cmZhY2VQdXJnZWFibGVWb2xhdGlsZSwg
bnVsbHB0cik7CisjZW5kaWYKKyAgICAKKyAgICBbbV9zbmFwc2hvdFZpZXcgcmVtb3ZlRnJvbVN1
cGVydmlld107CisgICAgbV9zbmFwc2hvdFZpZXcgPSBudWxscHRyOworICAgIAorICAgIG1fdGFy
Z2V0UmVuZGVyVHJlZVNpemUgPSAwOworICAgIG1fYWN0aXZlR2VzdHVyZVR5cGUgPSBWaWV3R2Vz
dHVyZVR5cGU6Ok5vbmU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLmgKaW5kZXgg
NTVkZDgwNS4uYmJjYzUwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oCkBAIC0yNiwxNiArMjYsMjIgQEAKICNpZm5kZWYg
Vmlld0dlc3R1cmVDb250cm9sbGVyX2gKICNkZWZpbmUgVmlld0dlc3R1cmVDb250cm9sbGVyX2gK
IAotI2lmICFQTEFURk9STShJT1MpCi0KICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4K
ICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgQ0FMYXllcjsKKworI2lm
IFBMQVRGT1JNKElPUykKK09CSkNfQ0xBU1MgVUlWaWV3OworT0JKQ19DTEFTUyBXS1N3aXBlSW50
ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGU7CitPQkpDX0NMQVNTIF9VSVZpZXdDb250cm9sbGVy
VHJhbnNpdGlvbkNvbnRleHQ7CitPQkpDX0NMQVNTIF9VSU5hdmlnYXRpb25JbnRlcmFjdGl2ZVRy
YW5zaXRpb25CYXNlOworI2Vsc2UKIE9CSkNfQ0xBU1MgTlNFdmVudDsKIE9CSkNfQ0xBU1MgTlNW
aWV3OworI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC00Nyw1NSArNTMsNzUgQEAg
Y2xhc3MgVmlld0dlc3R1cmVDb250cm9sbGVyIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciB7CiBwdWJsaWM6CiAgICAgVmlld0dlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYpOwog
ICAgIH5WaWV3R2VzdHVyZUNvbnRyb2xsZXIoKTsKLQorICAgIAorICAgIGVudW0gY2xhc3MgVmll
d0dlc3R1cmVUeXBlIHsKKyAgICAgICAgTm9uZSwKKyNpZiAhUExBVEZPUk0oSU9TKQorICAgICAg
ICBNYWduaWZpY2F0aW9uLAorICAgICAgICBTbWFydE1hZ25pZmljYXRpb24sCisjZW5kaWYKKyAg
ICAgICAgU3dpcGUKKyAgICB9OworICAgIAorICAgIGVudW0gY2xhc3MgU3dpcGVUcmFuc2l0aW9u
U3R5bGUgeworICAgICAgICBPdmVybGFwLAorICAgICAgICBQdXNoCisgICAgfTsKKyAgICAKKyAg
ICBlbnVtIGNsYXNzIFN3aXBlRGlyZWN0aW9uIHsKKyAgICAgICAgTGVmdCwKKyAgICAgICAgUmln
aHQKKyAgICB9OworICAgIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgZG91YmxlIG1hZ25pZmlj
YXRpb24oKSBjb25zdDsKIAogICAgIHZvaWQgaGFuZGxlTWFnbmlmaWNhdGlvbkdlc3R1cmUoZG91
YmxlIHNjYWxlLCBXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbik7CiAgICAgdm9pZCBoYW5kbGVT
bWFydE1hZ25pZmljYXRpb25HZXN0dXJlKFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luKTsKIAog
ICAgIGJvb2wgaGFuZGxlU2Nyb2xsV2hlZWxFdmVudChOU0V2ZW50ICopOwotICAgIHZvaWQgZGlk
SGl0UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQoKTsKLQogICAgIHZvaWQgd2hlZWxFdmVudFdhc05v
dEhhbmRsZWRCeVdlYkNvcmUoTlNFdmVudCAqKTsKIAogICAgIHZvaWQgc2V0Q3VzdG9tU3dpcGVW
aWV3cyhWZWN0b3I8UmV0YWluUHRyPE5TVmlldz4+IHZpZXdzKSB7IG1fY3VzdG9tU3dpcGVWaWV3
cyA9IHN0ZDo6bW92ZSh2aWV3cyk7IH0KICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93UmVs
YXRpdmVCb3VuZHNGb3JDdXN0b21Td2lwZVZpZXdzKCkgY29uc3Q7CiAKICAgICB2b2lkIGVuZEFj
dGl2ZUdlc3R1cmUoKTsKLQotICAgIGVudW0gY2xhc3MgVmlld0dlc3R1cmVUeXBlIHsKLSAgICAg
ICAgTm9uZSwKLSAgICAgICAgTWFnbmlmaWNhdGlvbiwKLSAgICAgICAgU21hcnRNYWduaWZpY2F0
aW9uLAotICAgICAgICBTd2lwZQotICAgIH07Ci0KLSAgICBlbnVtIGNsYXNzIFN3aXBlVHJhbnNp
dGlvblN0eWxlIHsKLSAgICAgICAgT3ZlcmxhcCwKLSAgICAgICAgUHVzaAotICAgIH07CisjZWxz
ZQorICAgIHZvaWQgaW5zdGFsbFN3aXBlSGFuZGxlcihVSVZpZXcgKik7CisgICAgYm9vbCBjYW5T
d2lwZUluRGlyZWN0aW9uKFN3aXBlRGlyZWN0aW9uKTsKKyAgICB2b2lkIGJlZ2luU3dpcGVHZXN0
dXJlKF9VSU5hdmlnYXRpb25JbnRlcmFjdGl2ZVRyYW5zaXRpb25CYXNlICosIFN3aXBlRGlyZWN0
aW9uKTsKKyAgICB2b2lkIGVuZFN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0
YXJnZXRJdGVtLCBfVUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25Db250ZXh0ICosIGJvb2wgY2Fu
Y2VsbGVkKTsKKyAgICB2b2lkIHNldFJlbmRlclRyZWVTaXplKHVpbnQ2NF90KTsKKyNlbmRpZgog
CiBwcml2YXRlOgogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyLgogICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJUEM6Ok1lc3NhZ2VEZWNvZGVy
Jikgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCByZW1vdmVTd2lwZVNuYXBzaG90KCk7CisgICAg
dm9pZCBzd2lwZVNuYXBzaG90V2F0Y2hkb2dUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFZpZXdH
ZXN0dXJlQ29udHJvbGxlcj4qKTsKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gTWVzc2Fn
ZSBoYW5kbGVycy4KICAgICB2b2lkIGRpZENvbGxlY3RHZW9tZXRyeUZvck1hZ25pZmljYXRpb25H
ZXN0dXJlKFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudEJvdW5kcywgYm9vbCBmcmFt
ZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZSk7CiAgICAgdm9pZCBkaWRDb2xsZWN0R2VvbWV0
cnlGb3JTbWFydE1hZ25pZmljYXRpb25HZXN0dXJlKFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2lu
LCBXZWJDb3JlOjpGbG9hdFJlY3QgcmVuZGVyUmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2li
bGVDb250ZW50Qm91bmRzLCBib29sIGlzUmVwbGFjZWRFbGVtZW50LCBib29sIGZyYW1lSGFuZGxl
c01hZ25pZmljYXRpb25HZXN0dXJlKTsKKyAgICB2b2lkIGRpZEhpdFJlbmRlclRyZWVTaXplVGhy
ZXNob2xkKCk7CiAKICAgICB2b2lkIGVuZE1hZ25pZmljYXRpb25HZXN0dXJlKCk7CiAgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCBzY2FsZWRNYWduaWZpY2F0aW9uT3JpZ2luKFdlYkNvcmU6OkZsb2F0
UG9pbnQgb3JpZ2luLCBkb3VibGUgc2NhbGUpOwogCi0gICAgZW51bSBjbGFzcyBTd2lwZURpcmVj
dGlvbiB7IExlZnQsIFJpZ2h0IH07CiAgICAgdm9pZCB0cmFja1N3aXBlR2VzdHVyZShOU0V2ZW50
ICosIFN3aXBlRGlyZWN0aW9uKTsKICAgICB2b2lkIGJlZ2luU3dpcGVHZXN0dXJlKFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0sIFN3aXBlRGlyZWN0aW9uKTsKICAgICB2b2lkIGhh
bmRsZVN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLCBkb3Vi
bGUgcHJvZ3Jlc3MsIFN3aXBlRGlyZWN0aW9uKTsKICAgICB2b2lkIGVuZFN3aXBlR2VzdHVyZShX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLCBib29sIGNhbmNlbGxlZCk7Ci0gICAg
dm9pZCByZW1vdmVTd2lwZVNuYXBzaG90KCk7Ci0gICAgdm9pZCBzd2lwZVNuYXBzaG90V2F0Y2hk
b2dUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFZpZXdHZXN0dXJlQ29udHJvbGxlcj4qKTsKLQor
I2VuZGlmCisgICAgCiAgICAgV2ViUGFnZVByb3h5JiBtX3dlYlBhZ2VQcm94eTsKKyAgICBWaWV3
R2VzdHVyZVR5cGUgbV9hY3RpdmVHZXN0dXJlVHlwZTsKKyAgICAKKyAgICBXZWJDb3JlOjpUaW1l
cjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+IG1fc3dpcGVXYXRjaGRvZ1RpbWVyOwogCisjaWYgIVBM
QVRGT1JNKElPUykKICAgICBkb3VibGUgbV9tYWduaWZpY2F0aW9uOwogICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgbV9tYWduaWZpY2F0aW9uT3JpZ2luOwogCkBAIC0xMDMsOCArMTI5LDYgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fbGFzdE1hZ25pZmljYXRpb25HZXN0dXJlV2FzU21hcnRNYWduaWZp
Y2F0aW9uOwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9sYXN0U21hcnRNYWduaWZpY2F0aW9u
T3JpZ2luOwogCi0gICAgVmlld0dlc3R1cmVUeXBlIG1fYWN0aXZlR2VzdHVyZVR5cGU7Ci0KICAg
ICBXZWJDb3JlOjpGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudFJlY3Q7CiAgICAgYm9vbCBtX3Zp
c2libGVDb250ZW50UmVjdElzVmFsaWQ7CiAgICAgYm9vbCBtX2ZyYW1lSGFuZGxlc01hZ25pZmlj
YXRpb25HZXN0dXJlOwpAQCAtMTEzLDcgKzEzNyw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJl
dGFpblB0cjxDQUxheWVyPj4gbV9jdXJyZW50U3dpcGVMaXZlTGF5ZXJzOwogCiAgICAgU3dpcGVU
cmFuc2l0aW9uU3R5bGUgbV9zd2lwZVRyYW5zaXRpb25TdHlsZTsKLSAgICBXZWJDb3JlOjpUaW1l
cjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+IG1fc3dpcGVXYXRjaGRvZ1RpbWVyOwogICAgIFZlY3Rv
cjxSZXRhaW5QdHI8TlNWaWV3Pj4gbV9jdXN0b21Td2lwZVZpZXdzOwogICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBtX2N1cnJlbnRTd2lwZUN1c3RvbVZpZXdCb3VuZHM7CiAKQEAgLTEyMSwxMCArMTQ0
LDE3IEBAIHByaXZhdGU6CiAgICAgLy8gdGhlIHNjcm9sbCBldmVudCB0aGF0IHdvdWxkIGhhdmUg
c3RhcnRlZCBhIHN3aXBlLCB3ZSdsbCBmaWxsIHRoZXNlIGluLgogICAgIGJvb2wgbV9oYXNQZW5k
aW5nU3dpcGU7CiAgICAgU3dpcGVEaXJlY3Rpb24gbV9wZW5kaW5nU3dpcGVEaXJlY3Rpb247Cisj
ZWxzZQorICAgIENHUmVjdCBtX29yaWdpbmFsTGl2ZVN3aXBlVmlld0ZyYW1lOworICAgIAorICAg
IFVJVmlldyAqbV9saXZlU3dpcGVWaWV3OworICAgIFJldGFpblB0cjxVSVZpZXc+IG1fc25hcHNo
b3RWaWV3OworICAgIFJldGFpblB0cjxVSVZpZXc+IG1fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXc7
CisgICAgUmV0YWluUHRyPFdLU3dpcGVJbnRlcmFjdGl2ZVRyYW5zaXRpb25EZWxlZ2F0ZT4gbV9z
d2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRlbGVnYXRlOworICAgIHVpbnQ2NF90IG1fdGFyZ2V0
UmVuZGVyVHJlZVNpemU7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0j
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKLQogI2VuZGlmIC8vIFZpZXdHZXN0dXJlQ29udHJvbGxl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJl
Q29udHJvbGxlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmll
d0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCmluZGV4IGZlZjY0YTguLmEwYjU4YzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9s
bGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dl
c3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCkBAIC0yMCwxMiArMjAsMTAgQEAKICMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotI2lmICFQTEFURk9STShJT1MpCi0KIG1l
c3NhZ2VzIC0+IFZpZXdHZXN0dXJlQ29udHJvbGxlciB7CisjaWYgIVBMQVRGT1JNKElPUykKICAg
ICBEaWRDb2xsZWN0R2VvbWV0cnlGb3JNYWduaWZpY2F0aW9uR2VzdHVyZShXZWJDb3JlOjpGbG9h
dFJlY3QgdmlzaWJsZUNvbnRlbnRCb3VuZHMsIGJvb2wgZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlv
bkdlc3R1cmUpCiAgICAgRGlkQ29sbGVjdEdlb21ldHJ5Rm9yU21hcnRNYWduaWZpY2F0aW9uR2Vz
dHVyZShXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbiwgV2ViQ29yZTo6RmxvYXRSZWN0IHJlbmRl
clJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudEJvdW5kcywgYm9vbCBpc1Jl
cGxhY2VkRWxlbWVudCwgYm9vbCBmcmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZSkKICAg
ICBEaWRIaXRSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCgpCi19Ci0KICNlbmRpZgorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJN
YWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxl
ck1hYy5tbQppbmRleCBjNzE2YTVlLi42OWY2MzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbQpAQCAtOTMs
MTIgKzkzLDEzIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
OlZpZXdHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKICAgICA6
IG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKLSAgICAsIG1fbGFzdE1hZ25pZmljYXRpb25H
ZXN0dXJlV2FzU21hcnRNYWduaWZpY2F0aW9uKGZhbHNlKQogICAgICwgbV9hY3RpdmVHZXN0dXJl
VHlwZShWaWV3R2VzdHVyZVR5cGU6Ok5vbmUpCisgICAgLCBtX3N3aXBlV2F0Y2hkb2dUaW1lcih0
aGlzLCAmVmlld0dlc3R1cmVDb250cm9sbGVyOjpzd2lwZVNuYXBzaG90V2F0Y2hkb2dUaW1lckZp
cmVkKQorICAgICwgbV9sYXN0TWFnbmlmaWNhdGlvbkdlc3R1cmVXYXNTbWFydE1hZ25pZmljYXRp
b24oZmFsc2UpCiAgICAgLCBtX3Zpc2libGVDb250ZW50UmVjdElzVmFsaWQoZmFsc2UpCiAgICAg
LCBtX2ZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlKGZhbHNlKQogICAgICwgbV9zd2lw
ZVRyYW5zaXRpb25TdHlsZShTd2lwZVRyYW5zaXRpb25TdHlsZTo6T3ZlcmxhcCkKLSAgICAsIG1f
c3dpcGVXYXRjaGRvZ1RpbWVyKHRoaXMsICZWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnN3aXBlU25h
cHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQpCisgICAgCiAgICAgLCBtX2hhc1BlbmRpbmdTd2lwZShm
YWxzZSkKIHsKICAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
bV93ZWJQYWdlUHJveHkucGFnZUlEKCksICp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaAppbmRleCA2NGIzMDUzLi5mOGM4NDBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3Jl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5o
CkBAIC0yNiwxNCArMjYsMTYgQEAKICNpZm5kZWYgVmlld1NuYXBzaG90U3RvcmVfaAogI2RlZmlu
ZSBWaWV3U25hcHNob3RTdG9yZV9oCiAKLSNpZiAhUExBVEZPUk0oSU9TKQotCiAjaW5jbHVkZSA8
Y2hyb25vPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCisjaWYgVVNFKElPU1VSRkFDRSkKKyNpbmNsdWRlIDxJT1N1cmZhY2UvSU9T
dXJmYWNlLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkJhY2tG
b3J3YXJkTGlzdEl0ZW07CkBAIC00OCw3ICs1MCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZp
ZXdTbmFwc2hvdFN0b3JlJiBzaGFyZWQoKTsKIAogICAgIHZvaWQgcmVjb3JkU25hcHNob3QoV2Vi
UGFnZVByb3h5Jik7CisjaWYgVVNFKElPU1VSRkFDRSkKICAgICBzdGQ6OnBhaXI8UmV0YWluUHRy
PElPU3VyZmFjZVJlZj4sIHVpbnQ2NF90PiBzbmFwc2hvdEFuZFJlbmRlclRyZWVTaXplKFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0qKTsKKyNlbHNlCisgICAgc3RkOjpwYWlyPFJldGFpblB0cjxDR0lt
YWdlUmVmPiwgdWludDY0X3Q+IHNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUoV2ViQmFja0Zvcndh
cmRMaXN0SXRlbSopOworI2VuZGlmCiAKICAgICB2b2lkIGRpc2FibGVTbmFwc2hvdHRpbmcoKSB7
IG1fZW5hYmxlZCA9IGZhbHNlOyB9CiAgICAgdm9pZCBlbmFibGVTbmFwc2hvdHRpbmcoKSB7IG1f
ZW5hYmxlZCA9IHRydWU7IH0KQEAgLTU3LDggKzYzLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
cnVuZVNuYXBzaG90cyhXZWJQYWdlUHJveHkmKTsKIAogICAgIHN0cnVjdCBTbmFwc2hvdCB7Cisj
aWYgVVNFKElPU1VSRkFDRSkKICAgICAgICAgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gc3VyZmFj
ZTsKICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gc3VyZmFjZUNvbnRleHQ7CisjZWxz
ZQorICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisjZW5kaWYKIAogICAgICAg
ICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IGNyZWF0aW9uVGltZTsKICAg
ICB9OwpAQCAtNzEsNiArODEsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IAotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCi0KICNlbmRpZiAvLyBWaWV3U25hcHNob3RTdG9y
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hv
dFN0b3JlLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9y
ZS5tbQppbmRleCAzYWMyODk1Li42NDZhZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUubW0KQEAgLTI2LDE4ICsyNiwxNyBAQAogI2lt
cG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJWaWV3U25hcHNob3RTdG9yZS5oIgogCi0jaWYgIVBM
QVRGT1JNKElPUykKLQogI2ltcG9ydCAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCiAjaW1wb3J0ICJX
ZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNp
bXBvcnQgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvVVVJRC5oPgog
CiAjaWYgZGVmaW5lZChfX2hhc19pbmNsdWRlKSAmJiBfX2hhc19pbmNsdWRlKDxDb3JlR3JhcGhp
Y3MvQ29yZUdyYXBoaWNzUHJpdmF0ZS5oPikKICNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3NQcml2YXRlLmg+CiAjZW5kaWYKIAorI2lmIFVTRShJT1NVUkZBQ0UpCisjaW1wb3J0IDxJ
T1N1cmZhY2UvSU9TdXJmYWNlLmg+CiBleHRlcm4gIkMiIENHQ29udGV4dFJlZiBDR0lPU3VyZmFj
ZUNvbnRleHRDcmVhdGUoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIHNpemVfdCB3aWR0aCwgc2l6ZV90
IGhlaWdodCwgc2l6ZV90IGJpdHNQZXJDb21wb25lbnQsIHNpemVfdCBiaXRzUGVyUGl4ZWwsIENH
Q29sb3JTcGFjZVJlZiBzcGFjZSwgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm8pOwogCiAjaWYgZGVm
aW5lZChfX2hhc19pbmNsdWRlKSAmJiBfX2hhc19pbmNsdWRlKDxJT1N1cmZhY2UvSU9TdXJmYWNl
UHJpdmF0ZS5oPikKQEAgLTQ4LDkgKzQ3LDEwIEBAIGVudW0gewogfTsKICNlbmRpZgogCi0jaWYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9T
KSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKIGV4dGVybiAiQyIg
SU9SZXR1cm4gSU9TdXJmYWNlU2V0UHVyZ2VhYmxlKElPU3VyZmFjZVJlZiBidWZmZXIsIHVpbnQz
Ml90IG5ld1N0YXRlLCB1aW50MzJfdCAqb2xkU3RhdGUpOwogI2VuZGlmCisjZW5kaWYKIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTExOCw2ICsxMTgsNyBAQCB2b2lkIFZpZXdTbmFw
c2hvdFN0b3JlOjpwcnVuZVNuYXBzaG90cyhXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKICAg
ICBtX3NuYXBzaG90TWFwLnJlbW92ZShvbGRlc3RTbmFwc2hvdFVVSUQpOwogfQogCisjaWYgVVNF
KElPU1VSRkFDRSkKIHN0YXRpYyBzdGQ6OnBhaXI8UmV0YWluUHRyPElPU3VyZmFjZVJlZj4sIFJl
dGFpblB0cjxDR0NvbnRleHRSZWY+PiBjcmVhdGVJT1N1cmZhY2VGcm9tSW1hZ2UoQ0dJbWFnZVJl
ZiBpbWFnZSkKIHsKICAgICB1bnNpZ25lZCBwaXhlbEZvcm1hdCA9ICdCR1JBJzsKQEAgLTE0OSw2
ICsxNTAsNyBAQCBzdGF0aWMgc3RkOjpwYWlyPFJldGFpblB0cjxJT1N1cmZhY2VSZWY+LCBSZXRh
aW5QdHI8Q0dDb250ZXh0UmVmPj4gY3JlYXRlSU9TdXJmYQogCiAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKHN1cmZhY2UsIHN1cmZhY2VDb250ZXh0KTsKIH0KKyNlbmRpZgogCiB2b2lkIFZpZXdT
bmFwc2hvdFN0b3JlOjpyZWNvcmRTbmFwc2hvdChXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkK
IHsKQEAgLTE3MywyMyArMTc1LDMwIEBAIHZvaWQgVmlld1NuYXBzaG90U3RvcmU6OnJlY29yZFNu
YXBzaG90KFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQogICAgIH0KIAogICAgIGl0ZW0tPnNl
dFNuYXBzaG90VVVJRChjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOworICAgIAorICAgIFNu
YXBzaG90IHNuYXBzaG90OworICAgIHNuYXBzaG90LmNyZWF0aW9uVGltZSA9IHN0ZDo6Y2hyb25v
OjpzdGVhZHlfY2xvY2s6Om5vdygpOwogCisjaWYgVVNFKElPU1VSRkFDRSkKICAgICBhdXRvIHN1
cmZhY2VBbmRDb250ZXh0ID0gY3JlYXRlSU9TdXJmYWNlRnJvbUltYWdlKHNuYXBzaG90SW1hZ2Uu
Z2V0KCkpOwotCi0gICAgU25hcHNob3Qgc25hcHNob3Q7CiAgICAgc25hcHNob3Quc3VyZmFjZSA9
IHN1cmZhY2VBbmRDb250ZXh0LmZpcnN0OwogICAgIHNuYXBzaG90LnN1cmZhY2VDb250ZXh0ID0g
c3VyZmFjZUFuZENvbnRleHQuc2Vjb25kOwotICAgIHNuYXBzaG90LmNyZWF0aW9uVGltZSA9IHN0
ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwotCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBJT1N1cmZhY2VTZXRQdXJnZWFibGUoc25h
cHNob3Quc3VyZmFjZS5nZXQoKSwga0lPU3VyZmFjZVB1cmdlYWJsZVZvbGF0aWxlLCBudWxscHRy
KTsKICNlbmRpZgorI2Vsc2UKKyAgICBzbmFwc2hvdC5pbWFnZSA9IHNuYXBzaG90SW1hZ2U7Cisj
ZW5kaWYKIAogICAgIG1fc25hcHNob3RNYXAuYWRkKGl0ZW0tPnNuYXBzaG90VVVJRCgpLCBzbmFw
c2hvdCk7CiAgICAgbV9yZW5kZXJUcmVlU2l6ZU1hcC5hZGQoaXRlbS0+c25hcHNob3RVVUlEKCks
IHdlYlBhZ2VQcm94eS5yZW5kZXJUcmVlU2l6ZSgpKTsKIH0KIAorI2lmIFVTRShJT1NVUkZBQ0Up
CiBzdGQ6OnBhaXI8UmV0YWluUHRyPElPU3VyZmFjZVJlZj4sIHVpbnQ2NF90PiBWaWV3U25hcHNo
b3RTdG9yZTo6c25hcHNob3RBbmRSZW5kZXJUcmVlU2l6ZShXZWJCYWNrRm9yd2FyZExpc3RJdGVt
KiBpdGVtKQorI2Vsc2UKK3N0ZDo6cGFpcjxSZXRhaW5QdHI8Q0dJbWFnZVJlZj4sIHVpbnQ2NF90
PiBWaWV3U25hcHNob3RTdG9yZTo6c25hcHNob3RBbmRSZW5kZXJUcmVlU2l6ZShXZWJCYWNrRm9y
d2FyZExpc3RJdGVtKiBpdGVtKQorI2VuZGlmCiB7CiAgICAgaWYgKGl0ZW0tPnNuYXBzaG90VVVJ
RCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIDAp
OwpAQCAtMTk5LDE0ICsyMDgsMTUgQEAgc3RkOjpwYWlyPFJldGFpblB0cjxJT1N1cmZhY2VSZWY+
LCB1aW50NjRfdD4gVmlld1NuYXBzaG90U3RvcmU6OnNuYXBzaG90QW5kUmVuZGUKICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIDApOwogCiAgICAgY29uc3QgYXV0byYgc25h
cHNob3QgPSBtX3NuYXBzaG90TWFwLmZpbmQoaXRlbS0+c25hcHNob3RVVUlEKCkpOwotICAgIFJl
dGFpblB0cjxJT1N1cmZhY2VSZWY+IHN1cmZhY2U7CiAKLSAgICBpZiAoc25hcHNob3QgIT0gbV9z
bmFwc2hvdE1hcC5lbmQoKSkKLSAgICAgICAgc3VyZmFjZSA9IHNuYXBzaG90LT52YWx1ZS5zdXJm
YWNlOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHN1cmZhY2UsIHJlbmRlclRyZWVTaXpl
LT52YWx1ZSk7CisgICAgaWYgKHNuYXBzaG90ID09IG1fc25hcHNob3RNYXAuZW5kKCkpCisgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCByZW5kZXJUcmVlU2l6ZS0+dmFsdWUp
OworICAgIAorI2lmIFVTRShJT1NVUkZBQ0UpCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNu
YXBzaG90LT52YWx1ZS5zdXJmYWNlLCByZW5kZXJUcmVlU2l6ZS0+dmFsdWUpOworI2Vsc2UKKyAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc25hcHNob3QtPnZhbHVlLmltYWdlLCByZW5kZXJUcmVl
U2l6ZS0+dmFsdWUpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBlNmQ0NjY1Li4zMDdiMTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODMsNiArNDgzLDcgQEAKIAkJMkRBOTQ0
QkQxODg1MTFFNzAwRUQ4NkRCIC8qIE5ldHdvcmtQcm9jZXNzSU9TLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBOTQ0QkMxODg1MTFFNzAwRUQ4NkRC
IC8qIE5ldHdvcmtQcm9jZXNzSU9TLm1tICovOyB9OwogCQkyRERFMEFGQTE4Mjk4Q0M5MDBGOTdF
QUEgLyogUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMEFGODE4Mjk4Q0M5MDBGOTdFQUEgLyog
UmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmggKi87IH07CiAJCTJEREUwQUZCMTgyOThD
QzkwMEY5N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMEFGOTE4Mjk4Q0M5MDBG
OTdFQUEgLyogUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tICovOyB9OworCQkyREY5
NTkzQjE4QTQyNDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRGOTU5MzQxOEE0MjQx
MjAwOTc4NUExIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbSAqLzsgfTsKIAkJMzEwOTk5
NzMxNDZDNzVBMjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTA5OTk3MTE0NkM3NTlCMDAy
OURFQjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcCAqLzsgfTsKIAkJMzEwOTk5QzcxNDZD
OUUzRDAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwOTk5NjgxNDZDNzFGNTAwMjlERUI5IC8q
IFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oICovOyB9OwogCQkzMTJDMEM0QTE0NkREQzhBMDAxNkM5
MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyQzBDNDkxNDZEREM4QTAwMTZDOTExIC8qIFdLTm90aWZp
Y2F0aW9uUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMjE4Myw2ICsyMTg0LDcgQEAKIAkJMkRBOTQ0QkMxODg1MTFFNzAwRUQ4NkRC
IC8qIE5ldHdvcmtQcm9jZXNzSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gTmV0d29ya1Byb2Nlc3NJT1MubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9pb3Mv
TmV0d29ya1Byb2Nlc3NJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEREUw
QUY4MTgyOThDQzkwMEY5N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlB
cHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEREUwQUY5MTgyOThDQzkw
MEY5N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxp
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJERjk1OTM0MThBNDI0MTIwMDk3
ODVBMSAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW07IHBhdGggPSBp
b3MvVmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTA5OTk2ODE0NkM3MUY1MDAyOURFQjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTA5OTk3MTE0NkM3NTlCMDAyOURFQjkgLyogV2ViTm90aWZpY2F0aW9u
Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYk5vdGlm
aWNhdGlvbkNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMkMwQzQ5
MTQ2RERDOEEwMDE2QzkxMSAvKiBXS05vdGlmaWNhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTm90aWZpY2F0aW9uUHJvdmlkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyMjAsNiArNDIyMiw3IEBACiAJCTJEQTk0NEE4MTg4NEU5
QUIwMEVEODZEQiAvKiBpb3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTJERjk1OTM0MThBNDI0MTIwMDk3ODVBMSAvKiBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXJJT1MubW0gKi8sCiAJCQkJMkRBOTQ0QTkxODg0RTlCQTAwRUQ4NkRCIC8qIFRleHRDaGVja2Vy
SU9TLm1tICovLAogCQkJCTJEQTk0NEFBMTg4NEU5QkEwMEVEODZEQiAvKiBXZWJJbnNwZWN0b3JQ
cm94eUlPUy5tbSAqLywKIAkJCQkyREE5NDRBQjE4ODRFOUJBMDBFRDg2REIgLyogV2ViUGFnZVBy
b3h5SU9TLm1tICovLApAQCAtNzg3MCw2ICs3ODczLDcgQEAKIAkJCQk1MUQxMzA1MzEzODJFQUMw
MDAzNTFFREQgLyogU2VjSXRlbVJlcXVlc3REYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
RDEzMDU1MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUUxNzkwODhEMTY5QkFBNjIwMDY5MDRDNyAvKiBTZWNJdGVtU2hpbS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkyREY5NTkzQjE4QTQyNDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1
cmVDb250cm9sbGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE3OTA4OTAxNjlCQUE3RjAw
NjkwNEM3IC8qIFNlY0l0ZW1TaGltTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxOEU2OTBCMTY5QjU2M0YwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxOEU2OTE3MTY5QjY2N0IwMDlCNjY3MCAvKiBTZWNJdGVtU2hpbVBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWEubW0KaW5kZXggYTEwNzZjYy4uMzIwYTQ4YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCkBAIC0zMjMsNiArMzIzLDcgQEAgdm9pZCBSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogICAgIG1fcmVtb3RlTGF5ZXJUcmVl
Q29udGV4dC0+YnVpbGRUcmFuc2FjdGlvbihsYXllclRyYW5zYWN0aW9uLCAqbV9yb290TGF5ZXIp
OwogICAgIGxheWVyVHJhbnNhY3Rpb24uc2V0Q29udGVudHNTaXplKG1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5jb250ZW50c1NpemUoKSk7CiAgICAgbGF5ZXJUcmFu
c2FjdGlvbi5zZXRQYWdlU2NhbGVGYWN0b3IobV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5wYWdlU2Nh
bGVGYWN0b3IoKSk7CisgICAgbGF5ZXJUcmFuc2FjdGlvbi5zZXRSZW5kZXJUcmVlU2l6ZShtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPnJlbmRlclRyZWVTaXplKCkpOwogI2lmIFBMQVRGT1JNKElPUykK
ICAgICBsYXllclRyYW5zYWN0aW9uLnNldE1pbmltdW1TY2FsZUZhY3RvcihtX3dlYlBhZ2UtPm1p
bmltdW1QYWdlU2NhbGVGYWN0b3IoKSk7CiAgICAgbGF5ZXJUcmFuc2FjdGlvbi5zZXRNYXhpbXVt
U2NhbGVGYWN0b3IobV93ZWJQYWdlLT5tYXhpbXVtUGFnZVNjYWxlRmFjdG9yKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223516</attachid>
            <date>2014-02-07 16:42:19 -0800</date>
            <delta_ts>2014-02-07 16:49:48 -0800</delta_ts>
            <desc>patch</desc>
            <filename>swipe-ios3.diff</filename>
            <type>text/plain</type>
            <size>44770</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxMTAyMWE2Li4zMzNjYzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUg
QEAKKzIwMTQtMDItMDcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViS2l0MiBWaWV3IEdlc3R1cmVzIChTd2lwZSk6IFN1cHBvcnQgZm9yIGlPUwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MzYzCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTE5NDE5ND4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OnJlbmRlclRyZWVTaXplKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246OnNldFJlbmRlclRyZWVTaXplKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1JlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OmRlY29kZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKToKKyAgICAgICAgU2VuZCB0aGUgcmVuZGVyIHRy
ZWUgc2l6ZSBhbG9uZyB3aXRoIHJlbW90ZSBsYXllciB0cmVlIGNvbW1pdHMsCisgICAgICAgIHNv
IHRoYXQgd2UgY2FuIGFjdCB1cG9uIGl0ICh0byBoaWRlIHNuYXBzaG90cykgaW4gdGhlIFVJIHBy
b2Nlc3MKKyAgICAgICAgaW4gc3luYyB3aXRoIGxheWVyIGNvbW1pdHMuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaDoKKyAgICAgICAgV2Ugd2FudCBhbGxv
d3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcyBmb3IgYm90aCBwbGF0Zm9ybXMuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAgICAg
KFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnRha2VWaWV3U25hcHNob3QpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2lvcy9XS0NvbnRlbnRWaWV3Lm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF90YWtlVmll
d1NuYXBzaG90XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0lu
dGVybmFsLmg6CisgICAgICAgIFBsdW1iIHNuYXBzaG90dGluZyB0aHJvdWdoIHRvIFdLVmlld0lP
Uy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLVmlld0lPUy5tbToKKyAgICAgICAg
KC1bV0tWaWV3IHNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOl0pOgorICAg
ICAgICAoLVtXS1ZpZXcgYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXNdKToKKyAg
ICAgICAgQ3JlYXRlL2Rlc3Ryb3kgdGhlIGdlc3R1cmUgY29udHJvbGxlciB3aGVuIHdlIHR1cm4g
b24vb2ZmIGJhY2stZm9yd2FyZCBzd2lwZS4KKyAgICAgICAgVGVsbCBXZWJQYWdlUHJveHkgdG8g
c2F2ZSBzbmFwc2hvdHMgaWYgc3dpcGUgaXMgZW5hYmxlZC4KKworICAgICAgICAoLVtXS1ZpZXcg
Y29udGVudFZpZXc6ZGlkQ29tbWl0TGF5ZXJUcmVlOl0pOgorICAgICAgICBGb3J3YXJkIHRoZSBj
dXJyZW50IHRyYW5zYWN0aW9uJ3MgcmVuZGVyIHRyZWUgc2l6ZSB0byBWaWV3R2VzdHVyZUNvbnRy
b2xsZXIuCisKKyAgICAgICAgKC1bV0tWaWV3IHRha2VWaWV3U25hcHNob3RGb3JDb250ZW50Vmll
dzpdKToKKyAgICAgICAgU25hcHNob3QgdGhlIHZpZXcuIFRoaXMgaXMgbm90IHRoZSBiZXN0IFNQ
SSB0byB1c2UsIHdlIHNob3VsZCBjb25zaWRlcgorICAgICAgICB1c2luZyBvbmUgb2YgdGhvc2Ug
d2hpY2ggcmV0dXJucyBhbiBJT1N1cmZhY2UgYW5kIHBsdW1iaW5nIGl0IHRocm91Z2gKKyAgICAg
ICAgdG8gVmlld1NuYXBzaG90U3RvcmUsIGJ1dCBhbGwgb2Ygb3VyIFBhZ2VDbGllbnQgYWJzdHJh
Y3Rpb24gbWFrZXMgdGhhdCBhbm5veWluZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY29yZE5hdmlnYXRp
b25TbmFwc2hvdCk6CisgICAgICAgIFJlY29yZCBzbmFwc2hvdHMgb24gaU9TIGFzIHdlbGwuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbTogQWRk
ZWQuCisgICAgICAgICgtW1dLU3dpcGVJbnRlcmFjdGl2ZVRyYW5zaXRpb25EZWxlZ2F0ZSBpbml0
V2l0aFZpZXdHZXN0dXJlQ29udHJvbGxlcjpXZWJLaXQ6OnN3aXBpbmdWaWV3Ol0pOgorICAgICAg
ICAoLVtXS1N3aXBlSW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGUgV2ViS2l0OjpWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OmRpcmVjdGlvbkZvclRyYW5zaXRpb246XSk6CisgICAgICAgICgtW1dL
U3dpcGVJbnRlcmFjdGl2ZVRyYW5zaXRpb25EZWxlZ2F0ZSBzdGFydEludGVyYWN0aXZlVHJhbnNp
dGlvbjpdKToKKyAgICAgICAgKC1bV0tTd2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRlbGVnYXRl
IHNob3VsZEJlZ2luSW50ZXJhY3RpdmVUcmFuc2l0aW9uOl0pOgorICAgICAgICAoLVtXS1N3aXBl
SW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGUgaW50ZXJhY3RpdmVUcmFuc2l0aW9uOmdlc3R1
cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNv
Z25pemVyOl0pOgorICAgICAgICAoLVtXS1N3aXBlSW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdh
dGUgaW50ZXJhY3RpdmVUcmFuc2l0aW9uOmdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY2VpdmVU
b3VjaDpdKToKKyAgICAgICAgKC1bV0tTd2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRlbGVnYXRl
IGdlc3R1cmVSZWNvZ25pemVyRm9ySW50ZXJhY3RpdmVUcmFuc2l0aW9uOldpdGhUYXJnZXQ6YWN0
aW9uOl0pOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZpZXdHZXN0
dXJlQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
flZpZXdHZXN0dXJlQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6aW5zdGFsbFN3aXBlSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0
dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OmNhblN3aXBlSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2V0UmVuZGVyVHJlZVNpemUpOgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnN3aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3
aXBlU25hcHNob3QpOgorCisgICAgICAgICogVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRy
b2xsZXIuaDoKKyAgICAgICAgQWRkIGlPUy1zcGVjaWZpYyBtZXRob2RzLCBhbmQgZG9uJ3QgaW5j
bHVkZSBhbGwgb2YgdGhlIE1hYy1zcGVjaWZpYyBjb2RlLgorICAgICAgICBXZSBjYW4gbW92ZSB0
b3dhcmRzIHNoYXJpbmcgbW9yZSBsb2dpYyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW46CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Vmlld0dlc3R1cmVDb250cm9sbGVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBz
aG90U3RvcmU6OnJlY29yZFNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90
U3RvcmU6OnNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUpOgorICAgICAgICBNYWtlIFZpZXdTbmFw
c2hvdFN0b3JlIGJ1aWxkL3dvcmsgd2l0aG91dCBJT1N1cmZhY2UuCisKKyAgICAgICAgKiBXZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTQtMDItMDcgIERlYW4gSmFja3Nv
biAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkdMIGRvZXNuJ3QgdXBkYXRlIHdpdGgg
cmVtb3RlbHkgaG9zdGVkIGxheWVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oCmluZGV4IDMyMDBiZjcuLjQ0NTUwZWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uLmgKQEAgLTE2MCw2ICsxNjAsOSBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUg
cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVGYWN0b3I7IH0KICAg
ICB2b2lkIHNldFBhZ2VTY2FsZUZhY3Rvcihkb3VibGUgcGFnZVNjYWxlRmFjdG9yKSB7IG1fcGFn
ZVNjYWxlRmFjdG9yID0gcGFnZVNjYWxlRmFjdG9yOyB9CisgICAgCisgICAgdWludDY0X3QgcmVu
ZGVyVHJlZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclRyZWVTaXplOyB9CisgICAgdm9p
ZCBzZXRSZW5kZXJUcmVlU2l6ZSh1aW50NjRfdCByZW5kZXJUcmVlU2l6ZSkgeyBtX3JlbmRlclRy
ZWVTaXplID0gcmVuZGVyVHJlZVNpemU7IH0KIAogICAgIGRvdWJsZSBtaW5pbXVtU2NhbGVGYWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1TY2FsZUZhY3RvcjsgfQogICAgIHZvaWQgc2V0
TWluaW11bVNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZSkgeyBtX21pbmltdW1TY2FsZUZhY3RvciA9
IHNjYWxlOyB9CkBAIC0xNzcsNiArMTgwLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBtX2Rlc3Ryb3llZExheWVySURzOwog
ICAgIFdlYkNvcmU6OkludFNpemUgbV9jb250ZW50c1NpemU7CiAgICAgZG91YmxlIG1fcGFnZVNj
YWxlRmFjdG9yOworICAgIHVpbnQ2NF90IG1fcmVuZGVyVHJlZVNpemU7CiAgICAgZG91YmxlIG1f
bWluaW11bVNjYWxlRmFjdG9yOwogICAgIGRvdWJsZSBtX21heGltdW1TY2FsZUZhY3RvcjsKICAg
ICBib29sIG1fYWxsb3dzVXNlclNjYWxpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQppbmRleCAyM2YzNWRjLi41
MTJjNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW0KQEAgLTM1Myw2ICszNTMsNyBAQCB2b2lkIFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiAgICAgZW5jb2RlciA8PCBtX21pbmltdW1TY2FsZUZhY3RvcjsKICAgICBlbmNvZGVy
IDw8IG1fbWF4aW11bVNjYWxlRmFjdG9yOwogICAgIGVuY29kZXIgPDwgbV9hbGxvd3NVc2VyU2Nh
bGluZzsKKyAgICBlbmNvZGVyIDw8IG1fcmVuZGVyVHJlZVNpemU7CiB9CiAKIGJvb2wgUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb246OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mIHJlc3VsdCkKQEAgLTM5MCw2ICszOTEsOSBA
QCBib29sIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpkZWNvZGUoSVBDOjpBcmd1bWVudERl
Y29kZXImIGRlY29kZXIsIFJlbW90ZUxheQogCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQubV9hbGxvd3NVc2VyU2NhbGluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX3JlbmRlclRyZWVTaXplKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oCmluZGV4IDA1ZjYyYjcuLjhl
OTFkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tW
aWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tW
aWV3UHJpdmF0ZS5oCkBAIC03MCw3ICs3MCw2IEBACiBAcHJvcGVydHkgKHJlYWRvbmx5LCBnZXR0
ZXI9aXNVc2luZ1VJU2lkZUNvbXBvc2l0aW5nKSBCT09MIHVzaW5nVUlTaWRlQ29tcG9zaXRpbmc7
CiBAcHJvcGVydHkgKHJlYWR3cml0ZSkgQk9PTCBhbGxvd3NNYWduaWZpY2F0aW9uOwogQHByb3Bl
cnR5IChyZWFkd3JpdGUpIGRvdWJsZSBtYWduaWZpY2F0aW9uOwotQHByb3BlcnR5IChyZWFkd3Jp
dGUpIEJPT0wgYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7CiAKIEBwcm9wZXJ0
eShjb3B5LCBub25hdG9taWMpIE5TQ29sb3IgKnVuZGVybGF5Q29sb3I7CiAKQEAgLTk3LDQgKzk2
LDYgQEAKIAogI2VuZGlmCiAKK0Bwcm9wZXJ0eSAocmVhZHdyaXRlKSBCT09MIGFsbG93c0JhY2tG
b3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOworCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbSBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IDhlMWEyZmYu
LmE2MzM4NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLm1tCkBAIC0zMjUsOCArMzI1LDcgQEAgQ0FMYXllciAqUGFnZUNs
aWVudEltcGw6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKSBjb25zdAogCiBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gUGFnZUNsaWVudEltcGw6OnRha2VWaWV3U25hcHNob3QoKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFtt
X3ZpZXcgX3Rha2VWaWV3U25hcHNob3RdOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjp3aGVl
bEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBl
dmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29u
dGVudFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZp
ZXcuaAppbmRleCBjZGM4ODZlLi43Y2MyMjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlldy5oCkBAIC0yMywxMSArMjMsMTIgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW1wb3J0ICJXS0Jhc2UuaCIK
KyNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5oIgorI2ltcG9ydCAiV0tCcm93
c2luZ0NvbnRleHRHcm91cC5oIgorI2ltcG9ydCAiV0tQcm9jZXNzR3JvdXAuaCIKICNpbXBvcnQg
PFVJS2l0L1VJS2l0Lmg+Ci0jaW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgotI2ltcG9ydCA8V2Vi
S2l0Mi9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYktpdDIvV0tC
cm93c2luZ0NvbnRleHRHcm91cC5oPgotI2ltcG9ydCA8V2ViS2l0Mi9XS1Byb2Nlc3NHcm91cC5o
PgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBAY2xhc3MgV0tDb250ZW50VmlldzsKIEBj
bGFzcyBXS1dlYlZpZXdDb25maWd1cmF0aW9uOwpAQCAtNDcsNiArNDgsOSBAQCBjbGFzcyBSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbjsKIEBvcHRpb25hbAogLSAodm9pZCljb250ZW50Vmlld0Rp
ZENvbW1pdExvYWRGb3JNYWluRnJhbWU6KFdLQ29udGVudFZpZXcgKiljb250ZW50VmlldzsKIC0g
KHZvaWQpY29udGVudFZpZXc6KFdLQ29udGVudFZpZXcgKiljb250ZW50VmlldyBkaWRDb21taXRM
YXllclRyZWU6KGNvbnN0IFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKWxheWVy
VHJlZVRyYW5zYWN0aW9uOworCisvLyBGSVhNRTogVGhpcyBkb2Vzbid0IGJlbG9uZyBpbiBhICdk
ZWxlZ2F0ZScuCistIChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4pdGFrZVZpZXdTbmFwc2hvdEZvckNv
bnRlbnRWaWV3OihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXc7CiBAZW5kCiAKIFdLX0FQSV9D
TEFTUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250
ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZp
ZXcubW0KaW5kZXggZGZlZThhYy4uMDEwNjk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC00Niw2ICs0NiwxMCBAQAogI2lt
cG9ydCA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgogCisjaWYgVVNFKElPU1VSRkFDRSkKKyNpbXBvcnQgPElPU3VyZmFjZS9JT1N1cmZhY2Uu
aD4KKyNlbmRpZgorCiAjaWYgX19oYXNfaW5jbHVkZSg8UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJp
dmF0ZS5oPikKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZVByaXZhdGUuaD4KICNlbmRp
ZgpAQCAtMzY3LDQgKzM3MSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAgICAgLy8gW1t3
cmFwcGVyKF9wYWdlLT5wcm9jZXNzKCkuY29udGV4dCgpKSBfZ2VvbG9jYXRpb25Qcm92aWRlcl0g
ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjp0b0FQSSgmb3JpZ2lu
KSBmcmFtZTp0b0FQSSgmZnJhbWUpIHJlcXVlc3Q6dG9BUEkoJnBlcm1pc3Npb25SZXF1ZXN0KSB3
aW5kb3c6W3NlbGYgd2luZG93XV07CiB9CiAKKy0gKFJldGFpblB0cjxDR0ltYWdlUmVmPilfdGFr
ZVZpZXdTbmFwc2hvdAoreworICAgIHJldHVybiBbX2RlbGVnYXRlIHRha2VWaWV3U25hcHNob3RG
b3JDb250ZW50VmlldzpzZWxmXTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJuYWwuaAppbmRleCAwNGNi
ZmQ4Li5lMWFhMjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJuYWwuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW1w
b3J0ICJXS0NvbnRlbnRWaWV3LmgiCiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC02OSw0ICs3MCw2IEBAIHN0cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQ
b3NpdGlvbjsKIC0gKHZvaWQpX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6KGNvbnN0IFdl
YktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKWluZm87CiAtICh2b2lkKV9k
ZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOihXZWJLaXQ6OldlYlNl
Y3VyaXR5T3JpZ2luJilvcmlnaW4gZnJhbWU6KFdlYktpdDo6V2ViRnJhbWVQcm94eSYpZnJhbWUg
cmVxdWVzdDooV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkmKXBlcm1p
c3Npb25SZXF1ZXN0OwogCistIChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4pX3Rha2VWaWV3U25hcHNo
b3Q7CisKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9z
L1dLVmlld0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLVmlld0lP
Uy5tbQppbmRleCBmNzVmYTZmLi44YzdkNzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2lvcy9XS1ZpZXdJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9pb3MvV0tWaWV3SU9TLm1tCkBAIC0yNiwxNSArMjYsMjIgQEAKICNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCAiV0tWaWV3UHJpdmF0ZS5oIgogCisjaW1wb3J0ICJSZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbi5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyLmgiCisj
aW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0R3JvdXBQ
cml2YXRlLmgiCiAjaW1wb3J0ICJXS0NvbnRlbnRWaWV3LmgiCiAjaW1wb3J0ICJXS1Byb2Nlc3NH
cm91cFByaXZhdGUuaCIKICNpbXBvcnQgIldLU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiV0tBUElD
YXN0LmgiCisjaW1wb3J0IDxVSUtpdC9VSUltYWdlX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0
L1VJU2NyZWVuLmg+CiAjaW1wb3J0IDxVSUtpdC9VSVNjcm9sbFZpZXdfUHJpdmF0ZS5oPgotI2lt
cG9ydCA8V2ViS2l0Mi9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oPgorI2ltcG9ydCA8VUlL
aXQvVUlXaW5kb3dfUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OworCiBAaW50ZXJmYWNlIFdLVmlldyAoKSA8VUlTY3JvbGxWaWV3
RGVsZWdhdGUsIFdLQ29udGVudFZpZXdEZWxlZ2F0ZT4KIC0gKHZvaWQpX3NldERvY3VtZW50U2Nh
bGU6KENHRmxvYXQpbmV3U2NhbGU7CiBAZW5kCkBAIC00NCw2ICs1MSwxMCBAQAogICAgIFJldGFp
blB0cjxXS0NvbnRlbnRWaWV3PiBfY29udGVudFZpZXc7CiAKICAgICBCT09MIF9pc1dhaXRpbmdG
b3JOZXdMYXllclRyZWVBZnRlckRpZENvbW1pdExvYWQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZp
ZXdHZXN0dXJlQ29udHJvbGxlcj4gX2dlc3R1cmVDb250cm9sbGVyOworICAgIAorICAgIEJPT0wg
X2FsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOworCiAgICAgQk9PTCBfaGFzU3Rh
dGljTWluaW11bUxheW91dFNpemU7CiAgICAgQ0dTaXplIF9taW5pbXVtTGF5b3V0U2l6ZU92ZXJy
aWRlOwogfQpAQCAtOTcsNiArMTA4LDI2IEBACiAgICAgcmV0dXJuIFtfY29udGVudFZpZXcgYnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlcl07CiB9CiAKKy0gKHZvaWQpc2V0QWxsb3dzQmFja0Zvcndh
cmROYXZpZ2F0aW9uR2VzdHVyZXM6KEJPT0wpYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2Vz
dHVyZXMKK3sKKyAgICBfYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMgPSBhbGxv
d3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlczsKKyAgICAKKyAgICBXZWJQYWdlUHJveHkg
KndlYlBhZ2VQcm94eSA9IHRvSW1wbChbX2NvbnRlbnRWaWV3IF9wYWdlUmVmXSk7CisgICAgCisg
ICAgaWYgKGFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzICYmICFfZ2VzdHVyZUNv
bnRyb2xsZXIpIHsKKyAgICAgICAgX2dlc3R1cmVDb250cm9sbGVyID0gc3RkOjptYWtlX3VuaXF1
ZTxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+KCp3ZWJQYWdlUHJveHkpOworICAgICAgICBfZ2VzdHVy
ZUNvbnRyb2xsZXItPmluc3RhbGxTd2lwZUhhbmRsZXIoc2VsZik7CisgICAgfSBlbHNlCisgICAg
ICAgIF9nZXN0dXJlQ29udHJvbGxlciA9IG51bGxwdHI7CisgICAgCisgICAgd2ViUGFnZVByb3h5
LT5zZXRTaG91bGRSZWNvcmROYXZpZ2F0aW9uU25hcHNob3RzKGFsbG93c0JhY2tGb3J3YXJkTmF2
aWdhdGlvbkdlc3R1cmVzKTsKK30KKworLSAoQk9PTClhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRp
b25HZXN0dXJlcworeworICAgIHJldHVybiBfYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2Vz
dHVyZXM7Cit9CisKICNwcmFnbWEgbWFyayBXS0NvbnRlbnRWaWV3RGVsZWdhdGUKIAogLSAodm9p
ZCljb250ZW50Vmlld0RpZENvbW1pdExvYWRGb3JNYWluRnJhbWU6KFdLQ29udGVudFZpZXcgKilj
b250ZW50VmlldwpAQCAtMTA0LDEzICsxMzUsMTYgQEAKICAgICBfaXNXYWl0aW5nRm9yTmV3TGF5
ZXJUcmVlQWZ0ZXJEaWRDb21taXRMb2FkID0gWUVTOwogfQogCi0tICh2b2lkKWNvbnRlbnRWaWV3
OihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXcgZGlkQ29tbWl0TGF5ZXJUcmVlOihjb25zdCBX
ZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFuc2FjdGlvbgor
LSAodm9pZCljb250ZW50VmlldzooV0tDb250ZW50VmlldyAqKWNvbnRlbnRWaWV3IGRpZENvbW1p
dExheWVyVHJlZTooY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKWxheWVyVHJlZVRy
YW5zYWN0aW9uCiB7CiAgICAgW19zY3JvbGxWaWV3IHNldE1pbmltdW1ab29tU2NhbGU6bGF5ZXJU
cmVlVHJhbnNhY3Rpb24ubWluaW11bVNjYWxlRmFjdG9yKCldOwogICAgIFtfc2Nyb2xsVmlldyBz
ZXRNYXhpbXVtWm9vbVNjYWxlOmxheWVyVHJlZVRyYW5zYWN0aW9uLm1heGltdW1TY2FsZUZhY3Rv
cigpXTsKICAgICBbX3Njcm9sbFZpZXcgc2V0Wm9vbUVuYWJsZWQ6bGF5ZXJUcmVlVHJhbnNhY3Rp
b24uYWxsb3dzVXNlclNjYWxpbmcoKV07CiAgICAgaWYgKCFbX3Njcm9sbFZpZXcgaXNab29taW5n
XSAmJiAhW19zY3JvbGxWaWV3IGlzWm9vbUJvdW5jaW5nXSkKICAgICAgICAgW19zY3JvbGxWaWV3
IHNldFpvb21TY2FsZTpsYXllclRyZWVUcmFuc2FjdGlvbi5wYWdlU2NhbGVGYWN0b3IoKV07Cisg
ICAgCisgICAgaWYgKF9nZXN0dXJlQ29udHJvbGxlcikKKyAgICAgICAgX2dlc3R1cmVDb250cm9s
bGVyLT5zZXRSZW5kZXJUcmVlU2l6ZShsYXllclRyZWVUcmFuc2FjdGlvbi5yZW5kZXJUcmVlU2l6
ZSgpKTsKIAogICAgIGlmIChfaXNXYWl0aW5nRm9yTmV3TGF5ZXJUcmVlQWZ0ZXJEaWRDb21taXRM
b2FkKSB7CiAgICAgICAgIFVJRWRnZUluc2V0cyBpbnNldCA9IFtfc2Nyb2xsVmlldyBjb250ZW50
SW5zZXRdOwpAQCAtMjE5LDYgKzI1MywxNyBAQAogICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50
T2Zmc2V0OmNvbnRlbnRPZmZzZXRdOwogfQogCisKKy0gKFJldGFpblB0cjxDR0ltYWdlUmVmPil0
YWtlVmlld1NuYXBzaG90Rm9yQ29udGVudFZpZXc6KFdLQ29udGVudFZpZXcgKiljb250ZW50Vmll
dworeworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byB1c2UgYWNxdWlyZSBhbiBJ
T1N1cmZhY2UgZGlyZWN0bHksIGluc3RlYWQgb2YgZ29pbmcgdG8gQ0dJbWFnZSBoZXJlIGFuZCBi
YWNrIGluIFZpZXdTbmFwc2hvdFN0b3JlLgorICAgIFVJR3JhcGhpY3NCZWdpbkltYWdlQ29udGV4
dFdpdGhPcHRpb25zKHNlbGYuYm91bmRzLnNpemUsIFlFUywgc2VsZi53aW5kb3cuc2NyZWVuLnNj
YWxlKTsKKyAgICBbc2VsZiBkcmF3Vmlld0hpZXJhcmNoeUluUmVjdDpbc2VsZiBib3VuZHNdIGFm
dGVyU2NyZWVuVXBkYXRlczpOT107CisgICAgVUlJbWFnZSAqaW1hZ2UgPSBVSUdyYXBoaWNzR2V0
SW1hZ2VGcm9tQ3VycmVudEltYWdlQ29udGV4dCgpOworICAgIFVJR3JhcGhpY3NFbmRJbWFnZUNv
bnRleHQoKTsKKyAgICByZXR1cm4gaW1hZ2UuQ0dJbWFnZTsKK30KKwogQGVuZAogCiBAaW1wbGVt
ZW50YXRpb24gV0tWaWV3IChQcml2YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAppbmRleCAyYzRlYzEzLi4xYzhkZjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNzY3LDcgKzc2Nyw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpyZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoKQogICAgIGlmICghbV9zaG91bGRSZWNvcmRO
YXZpZ2F0aW9uU25hcHNob3RzKQogICAgICAgICByZXR1cm47CiAKLSNpZiBQTEFURk9STShNQUMp
ICYmICFQTEFURk9STShJT1MpCisjaWYgUExBVEZPUk0oTUFDKQogICAgIFZpZXdTbmFwc2hvdFN0
b3JlOjpzaGFyZWQoKS5yZWNvcmRTbmFwc2hvdCgqdGhpcyk7CiAjZW5kaWYKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVmlld0dlc3R1cmVDb250cm9sbGVySU9T
Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJ
T1MubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhOGMzZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVmlld0dlc3R1cmVDb250
cm9sbGVySU9TLm1tCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKKworI2ltcG9y
dCAiV2ViUGFnZUdyb3VwLmgiCisjaW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdl
cy5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvck1lc3NhZ2VzLmgiCisj
aW1wb3J0ICJWaWV3U25hcHNob3RTdG9yZS5oIgorI2ltcG9ydCAiV2ViQmFja0ZvcndhcmRMaXN0
LmgiCisjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5o
IgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0
ekNvcmUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJQXBwbGljYXRpb25fUHJpdmF0ZS5oPgorI2ltcG9y
dCA8VUlLaXQvVUlTY3JlZW5FZGdlUGFuR2VzdHVyZVJlY29nbml6ZXIuaD4KKyNpbXBvcnQgPFVJ
S2l0L1VJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uaW5nX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJ
S2l0L1VJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplci5oPgorI2ltcG9ydCA8VUlLaXQv
X1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbi5oPgorI2ltcG9ydCA8VUlLaXQvX1VJ
TmF2aWdhdGlvblBhcmFsbGF4VHJhbnNpdGlvbi5oPgorCisjaWYgVVNFKElPU1VSRkFDRSkKKyNp
bXBvcnQgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KKyNpbXBvcnQgPElPU3VyZmFjZS9JT1N1cmZh
Y2VQcml2YXRlLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRl
cmZhY2UgV0tTd2lwZVRyYW5zaXRpb25Db250cm9sbGVyIDogTlNPYmplY3QgPF9VSU5hdmlnYXRp
b25JbnRlcmFjdGl2ZVRyYW5zaXRpb25CYXNlRGVsZWdhdGU+CistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhWaWV3R2VzdHVyZUNvbnRyb2xsZXI6KFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVy
KilnZXN0dXJlQ29udHJvbGxlciBzd2lwaW5nVmlldzooVUlWaWV3ICopdmlldzsKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFdLU3dpcGVUcmFuc2l0aW9uQ29udHJvbGxlcgoreworICAgIFdlYktp
dDo6Vmlld0dlc3R1cmVDb250cm9sbGVyICpfZ2VzdHVyZUNvbnRyb2xsZXI7CisgICAgUmV0YWlu
UHRyPF9VSU5hdmlnYXRpb25JbnRlcmFjdGl2ZVRyYW5zaXRpb25CYXNlPiBfYmFja1RyYW5zaXRp
b25Db250cm9sbGVyOworfQorCitzdGF0aWMgY29uc3QgZmxvYXQgc3dpcGVTbmFwc2hvdFJlbW92
YWxSZW5kZXJUcmVlU2l6ZVRhcmdldEZyYWN0aW9uID0gMC41Oworc3RhdGljIGNvbnN0IHN0ZDo6
Y2hyb25vOjpzZWNvbmRzIHN3aXBlU25hcHNob3RSZW1vdmFsV2F0Y2hkb2dEdXJhdGlvbiA9IDNf
czsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmlld0dlc3R1cmVDb250cm9sbGVyOihXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlciopZ2VzdHVyZUNvbnRyb2xsZXIgc3dpcGluZ1ZpZXc6
KFVJVmlldyAqKXZpZXcKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmIChzZWxm
KSB7CisgICAgICAgIF9nZXN0dXJlQ29udHJvbGxlciA9IGdlc3R1cmVDb250cm9sbGVyOworCisg
ICAgICAgIF9iYWNrVHJhbnNpdGlvbkNvbnRyb2xsZXIgPSBhZG9wdE5TKFtfVUlOYXZpZ2F0aW9u
SW50ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZSBhbGxvY10pOworICAgICAgICBfYmFja1RyYW5zaXRp
b25Db250cm9sbGVyID0gW19iYWNrVHJhbnNpdGlvbkNvbnRyb2xsZXIgaW5pdFdpdGhHZXN0dXJl
UmVjb2duaXplclZpZXc6dmlldyBhbmltYXRvcjpuaWwgZGVsZWdhdGU6c2VsZl07CisgICAgfQor
ICAgIHJldHVybiBzZWxmOworfQorCistIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
U3dpcGVEaXJlY3Rpb24pZGlyZWN0aW9uRm9yVHJhbnNpdGlvbjooX1VJTmF2aWdhdGlvbkludGVy
YWN0aXZlVHJhbnNpdGlvbkJhc2UgKil0cmFuc2l0aW9uCit7CisgICAgcmV0dXJuIHRyYW5zaXRp
b24gPT0gX2JhY2tUcmFuc2l0aW9uQ29udHJvbGxlciA/IFdlYktpdDo6Vmlld0dlc3R1cmVDb250
cm9sbGVyOjpTd2lwZURpcmVjdGlvbjo6TGVmdCA6IFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9s
bGVyOjpTd2lwZURpcmVjdGlvbjo6UmlnaHQ7Cit9CisKKy0gKHZvaWQpc3RhcnRJbnRlcmFjdGl2
ZVRyYW5zaXRpb246KF9VSU5hdmlnYXRpb25JbnRlcmFjdGl2ZVRyYW5zaXRpb25CYXNlICopdHJh
bnNpdGlvbgoreworICAgIF9nZXN0dXJlQ29udHJvbGxlci0+YmVnaW5Td2lwZUdlc3R1cmUodHJh
bnNpdGlvbiwgW3NlbGYgZGlyZWN0aW9uRm9yVHJhbnNpdGlvbjp0cmFuc2l0aW9uXSk7Cit9CisK
Ky0gKEJPT0wpc2hvdWxkQmVnaW5JbnRlcmFjdGl2ZVRyYW5zaXRpb246KF9VSU5hdmlnYXRpb25J
bnRlcmFjdGl2ZVRyYW5zaXRpb25CYXNlICopdHJhbnNpdGlvbgoreworICAgIHJldHVybiBfZ2Vz
dHVyZUNvbnRyb2xsZXItPmNhblN3aXBlSW5EaXJlY3Rpb24oW3NlbGYgZGlyZWN0aW9uRm9yVHJh
bnNpdGlvbjp0cmFuc2l0aW9uXSk7Cit9CisKKy0gKEJPT0wpaW50ZXJhY3RpdmVUcmFuc2l0aW9u
OihfVUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZSAqKXRyYW5zaXRpb24gZ2Vz
dHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplciBz
aG91bGRSZWNvZ25pemVTaW11bHRhbmVvdXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjooVUlHZXN0
dXJlUmVjb2duaXplciAqKW90aGVyR2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICByZXR1cm4gW290
aGVyR2VzdHVyZVJlY29nbml6ZXIgaXNLaW5kT2ZDbGFzczpbVUlUYXBHZXN0dXJlUmVjb2duaXpl
ciBjbGFzc11dOworfQorCistIChCT09MKWludGVyYWN0aXZlVHJhbnNpdGlvbjooX1VJTmF2aWdh
dGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbkJhc2UgKil0cmFuc2l0aW9uIGdlc3R1cmVSZWNvZ25p
emVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjZWl2
ZVRvdWNoOihVSVRvdWNoICopdG91Y2gKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistIChVSVBh
bkdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXJGb3JJbnRlcmFjdGl2ZVRyYW5z
aXRpb246KF9VSU5hdmlnYXRpb25JbnRlcmFjdGl2ZVRyYW5zaXRpb25CYXNlICopdHJhbnNpdGlv
biBXaXRoVGFyZ2V0OihpZCl0YXJnZXQgYWN0aW9uOihTRUwpYWN0aW9uCit7CisgICAgVUlTY3Jl
ZW5FZGdlUGFuR2VzdHVyZVJlY29nbml6ZXIgKnJlY29nbml6ZXIgPSBbW1VJU2NyZWVuRWRnZVBh
bkdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDp0YXJnZXQgYWN0aW9uOmFj
dGlvbl07CisgICAgc3dpdGNoIChbc2VsZiBkaXJlY3Rpb25Gb3JUcmFuc2l0aW9uOnRyYW5zaXRp
b25dKSB7CisgICAgY2FzZSBXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVEaXJl
Y3Rpb246OkxlZnQ6CisgICAgICAgIFtyZWNvZ25pemVyIHNldEVkZ2VzOlVJTWluWEVkZ2VdOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpT
d2lwZURpcmVjdGlvbjo6UmlnaHQ6CisgICAgICAgIFtyZWNvZ25pemVyIHNldEVkZ2VzOlVJTWF4
WEVkZ2VdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJlY29nbml6ZXI7Cit9
CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1ZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
Vmlld0dlc3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQorICAgIDog
bV93ZWJQYWdlUHJveHkod2ViUGFnZVByb3h5KQorICAgICwgbV9hY3RpdmVHZXN0dXJlVHlwZShW
aWV3R2VzdHVyZVR5cGU6Ok5vbmUpCisgICAgLCBtX3N3aXBlV2F0Y2hkb2dUaW1lcih0aGlzLCAm
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpzd2lwZVNuYXBzaG90V2F0Y2hkb2dUaW1lckZpcmVkKQor
ICAgICwgbV90YXJnZXRSZW5kZXJUcmVlU2l6ZSgwKQoreworfQorCitWaWV3R2VzdHVyZUNvbnRy
b2xsZXI6On5WaWV3R2VzdHVyZUNvbnRyb2xsZXIoKQoreworfQorCit2b2lkIFZpZXdHZXN0dXJl
Q29udHJvbGxlcjo6aW5zdGFsbFN3aXBlSGFuZGxlcihVSVZpZXcgKnZpZXcpCit7CisgICAgQVNT
RVJUKCFtX3N3aXBlSW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGUpOworICAgIG1fc3dpcGVJ
bnRlcmFjdGl2ZVRyYW5zaXRpb25EZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1N3aXBlVHJhbnNpdGlv
bkNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoVmlld0dlc3R1cmVDb250cm9sbGVyOnRoaXMgc3dp
cGluZ1ZpZXc6dmlld10pOworICAgIG1fbGl2ZVN3aXBlVmlldyA9IHZpZXc7Cit9CisKK3ZvaWQg
Vmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2VzdHVyZShfVUlOYXZpZ2F0aW9uSW50
ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZSAqdHJhbnNpdGlvbiwgU3dpcGVEaXJlY3Rpb24gZGlyZWN0
aW9uKQoreworICAgIGlmIChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6
Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtKiB0YXJnZXRJdGVtID0gZGlyZWN0aW9uID09IFN3aXBlRGlyZWN0aW9uOjpMZWZ0ID8gbV93
ZWJQYWdlUHJveHkuYmFja0ZvcndhcmRMaXN0KCkuYmFja0l0ZW0oKSA6IG1fd2ViUGFnZVByb3h5
LmJhY2tGb3J3YXJkTGlzdCgpLmZvcndhcmRJdGVtKCk7CisKKyAgICBhdXRvIHNuYXBzaG90ID0g
V2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuc25hcHNob3RBbmRSZW5kZXJUcmVl
U2l6ZSh0YXJnZXRJdGVtKS5maXJzdDsKKworICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9sbGVy
PiBzbmFwc2hvdFZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW1VJVmlld0NvbnRyb2xsZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBtX3NuYXBzaG90VmlldyA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6W21fbGl2ZVN3aXBlVmlldyBib3VuZHNdXSk7CisgICAgaWYgKHNuYXBz
aG90KSB7CisjaWYgVVNFKElPU1VSRkFDRSkKKyAgICAgICAgdWludDMyX3QgcHVyZ2VhYmlsaXR5
U3RhdGUgPSBrSU9TdXJmYWNlUHVyZ2VhYmxlTm9uVm9sYXRpbGU7CisgICAgICAgIElPU3VyZmFj
ZVNldFB1cmdlYWJsZShzbmFwc2hvdC5nZXQoKSwga0lPU3VyZmFjZVB1cmdlYWJsZU5vblZvbGF0
aWxlLCAmcHVyZ2VhYmlsaXR5U3RhdGUpOworICAgICAgICAKKyAgICAgICAgaWYgKHB1cmdlYWJp
bGl0eVN0YXRlICE9IGtJT1N1cmZhY2VQdXJnZWFibGVFbXB0eSkKKyAgICAgICAgICAgIFttX3Nu
YXBzaG90VmlldyBsYXllcl0uY29udGVudHMgPSAoaWQpc25hcHNob3QuZ2V0KCk7CisjZWxzZQor
ICAgICAgICBbbV9zbmFwc2hvdFZpZXcgbGF5ZXJdLmNvbnRlbnRzID0gKGlkKXNuYXBzaG90Lmdl
dCgpOworI2VuZGlmCisgICAgfQorICAgIFttX3NuYXBzaG90VmlldyBzZXRCYWNrZ3JvdW5kQ29s
b3I6W1VJQ29sb3Igd2hpdGVDb2xvcl1dOworICAgIFttX3NuYXBzaG90VmlldyBsYXllcl0uY29u
dGVudHNHcmF2aXR5ID0gQCJ0b3BMZWZ0IjsKKyAgICBbbV9zbmFwc2hvdFZpZXcgbGF5ZXJdLmNv
bnRlbnRzU2NhbGUgPSBtX2xpdmVTd2lwZVZpZXcud2luZG93LnNjcmVlbi5zY2FsZTsKKyAgICBb
c25hcHNob3RWaWV3Q29udHJvbGxlciBzZXRWaWV3Om1fc25hcHNob3RWaWV3LmdldCgpXTsKKwor
ICAgIG1fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOlttX2xpdmVTd2lwZVZpZXcgZnJhbWVdXSk7CisKKyAgICBbbV9saXZlU3dp
cGVWaWV3LnN1cGVydmlldyBpbnNlcnRTdWJ2aWV3Om1fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcu
Z2V0KCkgYmVsb3dTdWJ2aWV3Om1fbGl2ZVN3aXBlVmlld107CisgICAgW21fdHJhbnNpdGlvbkNv
bnRhaW5lclZpZXcgYWRkU3VidmlldzptX2xpdmVTd2lwZVZpZXddOworCisgICAgUmV0YWluUHRy
PFVJVmlld0NvbnRyb2xsZXI+IHRhcmdldHRlZFZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW1VJ
Vmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbdGFyZ2V0dGVkVmlld0NvbnRyb2xs
ZXIgc2V0VmlldzptX2xpdmVTd2lwZVZpZXddOworCisgICAgbV9vcmlnaW5hbExpdmVTd2lwZVZp
ZXdGcmFtZSA9IG1fbGl2ZVN3aXBlVmlldy5mcmFtZTsKKyAgICBtX2xpdmVTd2lwZVZpZXcuZnJh
bWUgPSBtX2xpdmVTd2lwZVZpZXcuYm91bmRzOworICAgIAorICAgIFVJTmF2aWdhdGlvbkNvbnRy
b2xsZXJPcGVyYXRpb24gdHJhbnNpdGlvbk9wZXJhdGlvbiA9IGRpcmVjdGlvbiA9PSBTd2lwZURp
cmVjdGlvbjo6TGVmdCA/IFVJTmF2aWdhdGlvbkNvbnRyb2xsZXJPcGVyYXRpb25Qb3AgOiBVSU5h
dmlnYXRpb25Db250cm9sbGVyT3BlcmF0aW9uUHVzaDsKKyAgICBSZXRhaW5QdHI8X1VJTmF2aWdh
dGlvblBhcmFsbGF4VHJhbnNpdGlvbj4gYW5pbWF0aW9uQ29udHJvbGxlciA9IGFkb3B0TlMoW1tf
VUlOYXZpZ2F0aW9uUGFyYWxsYXhUcmFuc2l0aW9uIGFsbG9jXSBpbml0V2l0aEN1cnJlbnRPcGVy
YXRpb246dHJhbnNpdGlvbk9wZXJhdGlvbl0pOworCisgICAgUmV0YWluUHRyPF9VSVZpZXdDb250
cm9sbGVyT25lVG9PbmVUcmFuc2l0aW9uQ29udGV4dD4gdHJhbnNpdGlvbkNvbnRleHQgPSBhZG9w
dE5TKFtbX1VJVmlld0NvbnRyb2xsZXJPbmVUb09uZVRyYW5zaXRpb25Db250ZXh0IGFsbG9jXSBp
bml0XSk7CisgICAgW3RyYW5zaXRpb25Db250ZXh0IF9zZXRGcm9tVmlld0NvbnRyb2xsZXI6dGFy
Z2V0dGVkVmlld0NvbnRyb2xsZXIuZ2V0KCldOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0
VG9WaWV3Q29udHJvbGxlcjpzbmFwc2hvdFZpZXdDb250cm9sbGVyLmdldCgpXTsKKyAgICBbdHJh
bnNpdGlvbkNvbnRleHQgX3NldENvbnRhaW5lclZpZXc6bV90cmFuc2l0aW9uQ29udGFpbmVyVmll
dy5nZXQoKV07CisgICAgW3RyYW5zaXRpb25Db250ZXh0IF9zZXRGcm9tU3RhcnRGcmFtZTpbbV9s
aXZlU3dpcGVWaWV3IGJvdW5kc11dOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0VG9FbmRG
cmFtZTpbbV9saXZlU3dpcGVWaWV3IGJvdW5kc11dOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBf
c2V0VG9TdGFydEZyYW1lOkNHUmVjdFplcm9dOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0
RnJvbUVuZEZyYW1lOkNHUmVjdFplcm9dOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0QW5p
bWF0b3I6YW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKV07CisgICAgW3RyYW5zaXRpb25Db250ZXh0
IF9zZXRJbnRlcmFjdG9yOnRyYW5zaXRpb25dOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0
VHJhbnNpdGlvbklzSW5GbGlnaHQ6WUVTXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRleHQgX3NldENv
bXBsZXRpb25IYW5kbGVyOl4oX1VJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29udGV4dCAqY29u
dGV4dCwgQk9PTCBkaWRDb21wbGV0ZSkgeyBlbmRTd2lwZUdlc3R1cmUodGFyZ2V0SXRlbSwgY29u
dGV4dCwgIWRpZENvbXBsZXRlKTsgfV07CisKKyAgICBbdHJhbnNpdGlvbiBzZXRBbmltYXRpb25D
b250cm9sbGVyOmFuaW1hdGlvbkNvbnRyb2xsZXIuZ2V0KCldOworICAgIFt0cmFuc2l0aW9uIHN0
YXJ0SW50ZXJhY3RpdmVUcmFuc2l0aW9uOnRyYW5zaXRpb25Db250ZXh0LmdldCgpXTsKKworICAg
IG1fYWN0aXZlR2VzdHVyZVR5cGUgPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlOworfQorCitib29s
IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Y2FuU3dpcGVJbkRpcmVjdGlvbihTd2lwZURpcmVjdGlv
biBkaXJlY3Rpb24pCit7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6TGVm
dCkKKyAgICAgICAgcmV0dXJuICEhbV93ZWJQYWdlUHJveHkuYmFja0ZvcndhcmRMaXN0KCkuYmFj
a0l0ZW0oKTsKKyAgICByZXR1cm4gISFtX3dlYlBhZ2VQcm94eS5iYWNrRm9yd2FyZExpc3QoKS5m
b3J3YXJkSXRlbSgpOworfQorCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZW5kU3dpcGVH
ZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0sIF9VSVZpZXdDb250cm9s
bGVyVHJhbnNpdGlvbkNvbnRleHQgKmNvbnRleHQsIGJvb2wgY2FuY2VsbGVkKQoreworICAgIFtj
b250ZXh0IF9zZXRUcmFuc2l0aW9uSXNJbkZsaWdodDpOT107CisgICAgW2NvbnRleHQgX3NldElu
dGVyYWN0b3I6bmlsXTsKKyAgICBbY29udGV4dCBfc2V0QW5pbWF0b3I6bmlsXTsKKyAgICAKKyAg
ICBbW21fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcgc3VwZXJ2aWV3XSBpbnNlcnRTdWJ2aWV3Om1f
c25hcHNob3RWaWV3LmdldCgpIGFib3ZlU3VidmlldzptX3RyYW5zaXRpb25Db250YWluZXJWaWV3
LmdldCgpXTsKKyAgICBbW21fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcgc3VwZXJ2aWV3XSBpbnNl
cnRTdWJ2aWV3Om1fbGl2ZVN3aXBlVmlldyBhYm92ZVN1YnZpZXc6bV90cmFuc2l0aW9uQ29udGFp
bmVyVmlldy5nZXQoKV07CisgICAgW21fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcgcmVtb3ZlRnJv
bVN1cGVydmlld107CisgICAgbV90cmFuc2l0aW9uQ29udGFpbmVyVmlldyA9IG51bGxwdHI7Cisg
ICAgCisgICAgW21fbGl2ZVN3aXBlVmlldyBzZXRGcmFtZTptX29yaWdpbmFsTGl2ZVN3aXBlVmll
d0ZyYW1lXTsKKyAgICBbbV9zbmFwc2hvdFZpZXcgc2V0RnJhbWU6bV9vcmlnaW5hbExpdmVTd2lw
ZVZpZXdGcmFtZV07CisgICAgCisgICAgaWYgKGNhbmNlbGxlZCkgeworICAgICAgICByZW1vdmVT
d2lwZVNuYXBzaG90KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV90YXJn
ZXRSZW5kZXJUcmVlU2l6ZSA9IFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5zbmFwc2hvdEFu
ZFJlbmRlclRyZWVTaXplKHRhcmdldEl0ZW0pLnNlY29uZCAqIHN3aXBlU25hcHNob3RSZW1vdmFs
UmVuZGVyVHJlZVNpemVUYXJnZXRGcmFjdGlvbjsKKyAgICAKKyAgICAvLyBXZSBkb24ndCB3YW50
IHRvIHJlcGxhY2UgdGhlIGN1cnJlbnQgYmFjay1mb3J3YXJkIGl0ZW0ncyBzbmFwc2hvdAorICAg
IC8vIGxpa2Ugd2Ugbm9ybWFsbHkgd291bGQgd2hlbiBnb2luZyBiYWNrIG9yIGZvcndhcmQsIGJl
Y2F1c2Ugd2UgYXJlCisgICAgLy8gZGlzcGxheWluZyB0aGUgZGVzdGluYXRpb24gaXRlbSdzIHNu
YXBzaG90LgorICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5kaXNhYmxlU25hcHNob3R0
aW5nKCk7CisgICAgbV93ZWJQYWdlUHJveHkuZ29Ub0JhY2tGb3J3YXJkSXRlbSh0YXJnZXRJdGVt
KTsKKyAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuZW5hYmxlU25hcHNob3R0aW5nKCk7
CisgICAgCisgICAgaWYgKCFtX3RhcmdldFJlbmRlclRyZWVTaXplKSB7CisgICAgICAgIHJlbW92
ZVN3aXBlU25hcHNob3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc3dpcGVX
YXRjaGRvZ1RpbWVyLnN0YXJ0T25lU2hvdChzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNoZG9nRHVy
YXRpb24uY291bnQoKSk7Cit9CisgICAgCit2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2V0
UmVuZGVyVHJlZVNpemUodWludDY0X3QgcmVuZGVyVHJlZVNpemUpCit7CisgICAgaWYgKG1fYWN0
aXZlR2VzdHVyZVR5cGUgIT0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fdGFyZ2V0UmVuZGVyVHJlZVNpemUgJiYgcmVuZGVyVHJlZVNpemUgPiBt
X3RhcmdldFJlbmRlclRyZWVTaXplKQorICAgICAgICByZW1vdmVTd2lwZVNuYXBzaG90KCk7Cit9
CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpzd2lwZVNuYXBzaG90V2F0Y2hkb2dUaW1l
ckZpcmVkKFRpbWVyPFZpZXdHZXN0dXJlQ29udHJvbGxlcj4qKQoreworICAgIHJlbW92ZVN3aXBl
U25hcHNob3QoKTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3aXBl
U25hcHNob3QoKQoreworICAgIG1fc3dpcGVXYXRjaGRvZ1RpbWVyLnN0b3AoKTsKKworICAgIGlm
IChtX2FjdGl2ZUdlc3R1cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGUpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyNpZiBVU0UoSU9TVVJGQUNFKQorICAgIElPU3VyZmFjZVJlZiBzbmFw
c2hvdFN1cmZhY2UgPSAoSU9TdXJmYWNlUmVmKVttX3NuYXBzaG90VmlldyBsYXllcl0uY29udGVu
dHM7CisgICAgaWYgKHNuYXBzaG90U3VyZmFjZSkKKyAgICAgICAgSU9TdXJmYWNlU2V0UHVyZ2Vh
YmxlKHNuYXBzaG90U3VyZmFjZSwga0lPU3VyZmFjZVB1cmdlYWJsZVZvbGF0aWxlLCBudWxscHRy
KTsKKyNlbmRpZgorICAgIAorICAgIFttX3NuYXBzaG90VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3
XTsKKyAgICBtX3NuYXBzaG90VmlldyA9IG51bGxwdHI7CisgICAgCisgICAgbV90YXJnZXRSZW5k
ZXJUcmVlU2l6ZSA9IDA7CisgICAgbV9hY3RpdmVHZXN0dXJlVHlwZSA9IFZpZXdHZXN0dXJlVHlw
ZTo6Tm9uZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaAppbmRleCA1NWRkODA1
Li5jNWM4NWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdH
ZXN0dXJlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmll
d0dlc3R1cmVDb250cm9sbGVyLmgKQEAgLTI2LDE2ICsyNiwyMiBAQAogI2lmbmRlZiBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXJfaAogI2RlZmluZSBWaWV3R2VzdHVyZUNvbnRyb2xsZXJfaAogCi0jaWYg
IVBMQVRGT1JNKElPUykKLQogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogT0JKQ19DTEFTUyBDQUxheWVyOworCisjaWYgUExBVEZP
Uk0oSU9TKQorT0JKQ19DTEFTUyBVSVZpZXc7CitPQkpDX0NMQVNTIFdLU3dpcGVUcmFuc2l0aW9u
Q29udHJvbGxlcjsKK09CSkNfQ0xBU1MgX1VJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29udGV4
dDsKK09CSkNfQ0xBU1MgX1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbkJhc2U7Cisj
ZWxzZQogT0JKQ19DTEFTUyBOU0V2ZW50OwogT0JKQ19DTEFTUyBOU1ZpZXc7CisjZW5kaWYKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ3LDU1ICs1Myw3NSBAQCBjbGFzcyBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXIgOiBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKICAg
ICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIoV2ViUGFnZVByb3h5Jik7CiAgICAgflZpZXdHZXN0dXJl
Q29udHJvbGxlcigpOwotCisgICAgCisgICAgZW51bSBjbGFzcyBWaWV3R2VzdHVyZVR5cGUgewor
ICAgICAgICBOb25lLAorI2lmICFQTEFURk9STShJT1MpCisgICAgICAgIE1hZ25pZmljYXRpb24s
CisgICAgICAgIFNtYXJ0TWFnbmlmaWNhdGlvbiwKKyNlbmRpZgorICAgICAgICBTd2lwZQorICAg
IH07CisgICAgCisgICAgZW51bSBjbGFzcyBTd2lwZVRyYW5zaXRpb25TdHlsZSB7CisgICAgICAg
IE92ZXJsYXAsCisgICAgICAgIFB1c2gKKyAgICB9OworICAgIAorICAgIGVudW0gY2xhc3MgU3dp
cGVEaXJlY3Rpb24geworICAgICAgICBMZWZ0LAorICAgICAgICBSaWdodAorICAgIH07CisgICAg
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBkb3VibGUgbWFnbmlmaWNhdGlvbigpIGNvbnN0Owog
CiAgICAgdm9pZCBoYW5kbGVNYWduaWZpY2F0aW9uR2VzdHVyZShkb3VibGUgc2NhbGUsIFdlYkNv
cmU6OkZsb2F0UG9pbnQgb3JpZ2luKTsKICAgICB2b2lkIGhhbmRsZVNtYXJ0TWFnbmlmaWNhdGlv
bkdlc3R1cmUoV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4pOwogCiAgICAgYm9vbCBoYW5kbGVT
Y3JvbGxXaGVlbEV2ZW50KE5TRXZlbnQgKik7Ci0gICAgdm9pZCBkaWRIaXRSZW5kZXJUcmVlU2l6
ZVRocmVzaG9sZCgpOwotCiAgICAgdm9pZCB3aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29y
ZShOU0V2ZW50ICopOwogCiAgICAgdm9pZCBzZXRDdXN0b21Td2lwZVZpZXdzKFZlY3RvcjxSZXRh
aW5QdHI8TlNWaWV3Pj4gdmlld3MpIHsgbV9jdXN0b21Td2lwZVZpZXdzID0gc3RkOjptb3ZlKHZp
ZXdzKTsgfQogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWxhdGl2ZUJvdW5kc0ZvckN1
c3RvbVN3aXBlVmlld3MoKSBjb25zdDsKIAogICAgIHZvaWQgZW5kQWN0aXZlR2VzdHVyZSgpOwot
Ci0gICAgZW51bSBjbGFzcyBWaWV3R2VzdHVyZVR5cGUgewotICAgICAgICBOb25lLAotICAgICAg
ICBNYWduaWZpY2F0aW9uLAotICAgICAgICBTbWFydE1hZ25pZmljYXRpb24sCi0gICAgICAgIFN3
aXBlCi0gICAgfTsKLQotICAgIGVudW0gY2xhc3MgU3dpcGVUcmFuc2l0aW9uU3R5bGUgewotICAg
ICAgICBPdmVybGFwLAotICAgICAgICBQdXNoCi0gICAgfTsKKyNlbHNlCisgICAgdm9pZCBpbnN0
YWxsU3dpcGVIYW5kbGVyKFVJVmlldyAqKTsKKyAgICBib29sIGNhblN3aXBlSW5EaXJlY3Rpb24o
U3dpcGVEaXJlY3Rpb24pOworICAgIHZvaWQgYmVnaW5Td2lwZUdlc3R1cmUoX1VJTmF2aWdhdGlv
bkludGVyYWN0aXZlVHJhbnNpdGlvbkJhc2UgKiwgU3dpcGVEaXJlY3Rpb24pOworICAgIHZvaWQg
ZW5kU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0sIF9VSVZp
ZXdDb250cm9sbGVyVHJhbnNpdGlvbkNvbnRleHQgKiwgYm9vbCBjYW5jZWxsZWQpOworICAgIHZv
aWQgc2V0UmVuZGVyVHJlZVNpemUodWludDY0X3QpOworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAg
Ly8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIuCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKKyAg
ICAKKyAgICB2b2lkIHJlbW92ZVN3aXBlU25hcHNob3QoKTsKKyAgICB2b2lkIHN3aXBlU25hcHNo
b3RXYXRjaGRvZ1RpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Vmlld0dlc3R1cmVDb250cm9sbGVy
PiopOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgogICAg
IHZvaWQgZGlkQ29sbGVjdEdlb21ldHJ5Rm9yTWFnbmlmaWNhdGlvbkdlc3R1cmUoV2ViQ29yZTo6
RmxvYXRSZWN0IHZpc2libGVDb250ZW50Qm91bmRzLCBib29sIGZyYW1lSGFuZGxlc01hZ25pZmlj
YXRpb25HZXN0dXJlKTsKICAgICB2b2lkIGRpZENvbGxlY3RHZW9tZXRyeUZvclNtYXJ0TWFnbmlm
aWNhdGlvbkdlc3R1cmUoV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4sIFdlYkNvcmU6OkZsb2F0
UmVjdCByZW5kZXJSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRCb3VuZHMs
IGJvb2wgaXNSZXBsYWNlZEVsZW1lbnQsIGJvb2wgZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlvbkdl
c3R1cmUpOworICAgIHZvaWQgZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJlc2hvbGQoKTsKIAogICAg
IHZvaWQgZW5kTWFnbmlmaWNhdGlvbkdlc3R1cmUoKTsKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50
IHNjYWxlZE1hZ25pZmljYXRpb25PcmlnaW4oV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4sIGRv
dWJsZSBzY2FsZSk7CiAKLSAgICBlbnVtIGNsYXNzIFN3aXBlRGlyZWN0aW9uIHsgTGVmdCwgUmln
aHQgfTsKICAgICB2b2lkIHRyYWNrU3dpcGVHZXN0dXJlKE5TRXZlbnQgKiwgU3dpcGVEaXJlY3Rp
b24pOwogICAgIHZvaWQgYmVnaW5Td2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSog
dGFyZ2V0SXRlbSwgU3dpcGVEaXJlY3Rpb24pOwogICAgIHZvaWQgaGFuZGxlU3dpcGVHZXN0dXJl
KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0sIGRvdWJsZSBwcm9ncmVzcywgU3dp
cGVEaXJlY3Rpb24pOwogICAgIHZvaWQgZW5kU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0qIHRhcmdldEl0ZW0sIGJvb2wgY2FuY2VsbGVkKTsKLSAgICB2b2lkIHJlbW92ZVN3aXBl
U25hcHNob3QoKTsKLSAgICB2b2lkIHN3aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQoV2Vi
Q29yZTo6VGltZXI8Vmlld0dlc3R1cmVDb250cm9sbGVyPiopOwotCisjZW5kaWYKKyAgICAKICAg
ICBXZWJQYWdlUHJveHkmIG1fd2ViUGFnZVByb3h5OworICAgIFZpZXdHZXN0dXJlVHlwZSBtX2Fj
dGl2ZUdlc3R1cmVUeXBlOworICAgIAorICAgIFdlYkNvcmU6OlRpbWVyPFZpZXdHZXN0dXJlQ29u
dHJvbGxlcj4gbV9zd2lwZVdhdGNoZG9nVGltZXI7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAg
IGRvdWJsZSBtX21hZ25pZmljYXRpb247CiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX21hZ25p
ZmljYXRpb25PcmlnaW47CiAKQEAgLTEwMyw4ICsxMjksNiBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9sYXN0TWFnbmlmaWNhdGlvbkdlc3R1cmVXYXNTbWFydE1hZ25pZmljYXRpb247CiAgICAgV2Vi
Q29yZTo6RmxvYXRQb2ludCBtX2xhc3RTbWFydE1hZ25pZmljYXRpb25PcmlnaW47CiAKLSAgICBW
aWV3R2VzdHVyZVR5cGUgbV9hY3RpdmVHZXN0dXJlVHlwZTsKLQogICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCBtX3Zpc2libGVDb250ZW50UmVjdDsKICAgICBib29sIG1fdmlzaWJsZUNvbnRlbnRSZWN0
SXNWYWxpZDsKICAgICBib29sIG1fZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmU7CkBA
IC0xMTMsNyArMTM3LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmV0YWluUHRyPENBTGF5ZXI+
PiBtX2N1cnJlbnRTd2lwZUxpdmVMYXllcnM7CiAKICAgICBTd2lwZVRyYW5zaXRpb25TdHlsZSBt
X3N3aXBlVHJhbnNpdGlvblN0eWxlOwotICAgIFdlYkNvcmU6OlRpbWVyPFZpZXdHZXN0dXJlQ29u
dHJvbGxlcj4gbV9zd2lwZVdhdGNoZG9nVGltZXI7CiAgICAgVmVjdG9yPFJldGFpblB0cjxOU1Zp
ZXc+PiBtX2N1c3RvbVN3aXBlVmlld3M7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fY3VycmVu
dFN3aXBlQ3VzdG9tVmlld0JvdW5kczsKIApAQCAtMTIxLDEwICsxNDQsMTcgQEAgcHJpdmF0ZToK
ICAgICAvLyB0aGUgc2Nyb2xsIGV2ZW50IHRoYXQgd291bGQgaGF2ZSBzdGFydGVkIGEgc3dpcGUs
IHdlJ2xsIGZpbGwgdGhlc2UgaW4uCiAgICAgYm9vbCBtX2hhc1BlbmRpbmdTd2lwZTsKICAgICBT
d2lwZURpcmVjdGlvbiBtX3BlbmRpbmdTd2lwZURpcmVjdGlvbjsKKyNlbHNlCisgICAgQ0dSZWN0
IG1fb3JpZ2luYWxMaXZlU3dpcGVWaWV3RnJhbWU7CisgICAgCisgICAgVUlWaWV3ICptX2xpdmVT
d2lwZVZpZXc7CisgICAgUmV0YWluUHRyPFVJVmlldz4gbV9zbmFwc2hvdFZpZXc7CisgICAgUmV0
YWluUHRyPFVJVmlldz4gbV90cmFuc2l0aW9uQ29udGFpbmVyVmlldzsKKyAgICBSZXRhaW5QdHI8
V0tTd2lwZVRyYW5zaXRpb25Db250cm9sbGVyPiBtX3N3aXBlSW50ZXJhY3RpdmVUcmFuc2l0aW9u
RGVsZWdhdGU7CisgICAgdWludDY0X3QgbV90YXJnZXRSZW5kZXJUcmVlU2l6ZTsKKyNlbmRpZgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQot
CiAjZW5kaWYgLy8gVmlld0dlc3R1cmVDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2Fn
ZXMuaW4KaW5kZXggZmVmNjRhOC4uYTBiNThjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMu
aW4KQEAgLTIwLDEyICsyMCwxMCBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogCi0jaWYgIVBMQVRGT1JNKElPUykKLQogbWVzc2FnZXMgLT4gVmlld0dlc3R1cmVDb250
cm9sbGVyIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIERpZENvbGxlY3RHZW9tZXRyeUZvck1h
Z25pZmljYXRpb25HZXN0dXJlKFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudEJvdW5k
cywgYm9vbCBmcmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2VzdHVyZSkKICAgICBEaWRDb2xsZWN0
R2VvbWV0cnlGb3JTbWFydE1hZ25pZmljYXRpb25HZXN0dXJlKFdlYkNvcmU6OkZsb2F0UG9pbnQg
b3JpZ2luLCBXZWJDb3JlOjpGbG9hdFJlY3QgcmVuZGVyUmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0
IHZpc2libGVDb250ZW50Qm91bmRzLCBib29sIGlzUmVwbGFjZWRFbGVtZW50LCBib29sIGZyYW1l
SGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlKQogICAgIERpZEhpdFJlbmRlclRyZWVTaXplVGhy
ZXNob2xkKCkKLX0KLQogI2VuZGlmCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tCmluZGV4IGM3MTZhNWUuLjY5
ZjYzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1
cmVDb250cm9sbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmll
d0dlc3R1cmVDb250cm9sbGVyTWFjLm1tCkBAIC05MywxMiArOTMsMTMgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Vmlld0dlc3R1cmVDb250cm9sbGVyKFdl
YlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQogICAgIDogbV93ZWJQYWdlUHJveHkod2ViUGFnZVBy
b3h5KQotICAgICwgbV9sYXN0TWFnbmlmaWNhdGlvbkdlc3R1cmVXYXNTbWFydE1hZ25pZmljYXRp
b24oZmFsc2UpCiAgICAgLCBtX2FjdGl2ZUdlc3R1cmVUeXBlKFZpZXdHZXN0dXJlVHlwZTo6Tm9u
ZSkKKyAgICAsIG1fc3dpcGVXYXRjaGRvZ1RpbWVyKHRoaXMsICZWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6OnN3aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQpCisgICAgLCBtX2xhc3RNYWduaWZp
Y2F0aW9uR2VzdHVyZVdhc1NtYXJ0TWFnbmlmaWNhdGlvbihmYWxzZSkKICAgICAsIG1fdmlzaWJs
ZUNvbnRlbnRSZWN0SXNWYWxpZChmYWxzZSkKICAgICAsIG1fZnJhbWVIYW5kbGVzTWFnbmlmaWNh
dGlvbkdlc3R1cmUoZmFsc2UpCiAgICAgLCBtX3N3aXBlVHJhbnNpdGlvblN0eWxlKFN3aXBlVHJh
bnNpdGlvblN0eWxlOjpPdmVybGFwKQotICAgICwgbV9zd2lwZVdhdGNoZG9nVGltZXIodGhpcywg
JlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZCkK
KyAgICAKICAgICAsIG1faGFzUGVuZGluZ1N3aXBlKGZhbHNlKQogewogICAgIG1fd2ViUGFnZVBy
b3h5LnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSwg
KnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25h
cHNob3RTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RT
dG9yZS5oCmluZGV4IDY0YjMwNTMuLmY4Yzg0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmgKQEAgLTI2LDE0ICsyNiwxNiBAQAogI2lm
bmRlZiBWaWV3U25hcHNob3RTdG9yZV9oCiAjZGVmaW5lIFZpZXdTbmFwc2hvdFN0b3JlX2gKIAot
I2lmICFQTEFURk9STShJT1MpCi0KICNpbmNsdWRlIDxjaHJvbm8+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpZiBVU0UoSU9T
VVJGQUNFKQorI2luY2x1ZGUgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTsKQEAgLTQ4LDcg
KzUwLDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVmlld1NuYXBzaG90U3RvcmUmIHNoYXJlZCgp
OwogCiAgICAgdm9pZCByZWNvcmRTbmFwc2hvdChXZWJQYWdlUHJveHkmKTsKKyNpZiBVU0UoSU9T
VVJGQUNFKQogICAgIHN0ZDo6cGFpcjxSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiwgdWludDY0X3Q+
IHNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSopOworI2Vs
c2UKKyAgICBzdGQ6OnBhaXI8UmV0YWluUHRyPENHSW1hZ2VSZWY+LCB1aW50NjRfdD4gc25hcHNo
b3RBbmRSZW5kZXJUcmVlU2l6ZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKik7CisjZW5kaWYKIAog
ICAgIHZvaWQgZGlzYWJsZVNuYXBzaG90dGluZygpIHsgbV9lbmFibGVkID0gZmFsc2U7IH0KICAg
ICB2b2lkIGVuYWJsZVNuYXBzaG90dGluZygpIHsgbV9lbmFibGVkID0gdHJ1ZTsgfQpAQCAtNTcs
OCArNjMsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBydW5lU25hcHNob3RzKFdlYlBhZ2VQcm94
eSYpOwogCiAgICAgc3RydWN0IFNuYXBzaG90IHsKKyNpZiBVU0UoSU9TVVJGQUNFKQogICAgICAg
ICBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBzdXJmYWNlOwogICAgICAgICBSZXRhaW5QdHI8Q0dD
b250ZXh0UmVmPiBzdXJmYWNlQ29udGV4dDsKKyNlbHNlCisgICAgICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBpbWFnZTsKKyNlbmRpZgogCiAgICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xv
Y2s6OnRpbWVfcG9pbnQgY3JlYXRpb25UaW1lOwogICAgIH07CkBAIC03MSw2ICs4MSw0IEBAIHBy
aXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKLQogI2VuZGlmIC8vIFZpZXdTbmFwc2hvdFN0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tCmluZGV4IDNhYzI4OTUuLjY0NmFk
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90
U3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RT
dG9yZS5tbQpAQCAtMjYsMTggKzI2LDE3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQg
IlZpZXdTbmFwc2hvdFN0b3JlLmgiCiAKLSNpZiAhUExBVEZPUk0oSU9TKQotCiAjaW1wb3J0ICJX
ZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCA8
Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2ltcG9ydCA8SU9TdXJmYWNlL0lPU3VyZmFj
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9VVUlELmg+CiAKICNpZiBkZWZpbmVkKF9faGFzX2luY2x1
ZGUpICYmIF9faGFzX2luY2x1ZGUoPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3NQcml2YXRlLmg+
KQogI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljc1ByaXZhdGUuaD4KICNlbmRpZgog
CisjaWYgVVNFKElPU1VSRkFDRSkKKyNpbXBvcnQgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KIGV4
dGVybiAiQyIgQ0dDb250ZXh0UmVmIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZShJT1N1cmZhY2VS
ZWYgc3VyZmFjZSwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBzaXplX3QgYml0c1BlckNv
bXBvbmVudCwgc2l6ZV90IGJpdHNQZXJQaXhlbCwgQ0dDb2xvclNwYWNlUmVmIHNwYWNlLCBDR0Jp
dG1hcEluZm8gYml0bWFwSW5mbyk7CiAKICNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpICYmIF9f
aGFzX2luY2x1ZGUoPElPU3VyZmFjZS9JT1N1cmZhY2VQcml2YXRlLmg+KQpAQCAtNDgsOSArNDcs
MTAgQEAgZW51bSB7CiB9OwogI2VuZGlmCiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwOTAKKyNpZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTA5MAogZXh0ZXJuICJDIiBJT1JldHVybiBJT1N1cmZhY2VTZXRQdXJn
ZWFibGUoSU9TdXJmYWNlUmVmIGJ1ZmZlciwgdWludDMyX3QgbmV3U3RhdGUsIHVpbnQzMl90ICpv
bGRTdGF0ZSk7CiAjZW5kaWYKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApA
QCAtMTE4LDYgKzExOCw3IEBAIHZvaWQgVmlld1NuYXBzaG90U3RvcmU6OnBydW5lU25hcHNob3Rz
KFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQogICAgIG1fc25hcHNob3RNYXAucmVtb3ZlKG9s
ZGVzdFNuYXBzaG90VVVJRCk7CiB9CiAKKyNpZiBVU0UoSU9TVVJGQUNFKQogc3RhdGljIHN0ZDo6
cGFpcjxSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiwgUmV0YWluUHRyPENHQ29udGV4dFJlZj4+IGNy
ZWF0ZUlPU3VyZmFjZUZyb21JbWFnZShDR0ltYWdlUmVmIGltYWdlKQogewogICAgIHVuc2lnbmVk
IHBpeGVsRm9ybWF0ID0gJ0JHUkEnOwpAQCAtMTQ5LDYgKzE1MCw3IEBAIHN0YXRpYyBzdGQ6OnBh
aXI8UmV0YWluUHRyPElPU3VyZmFjZVJlZj4sIFJldGFpblB0cjxDR0NvbnRleHRSZWY+PiBjcmVh
dGVJT1N1cmZhCiAKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3VyZmFjZSwgc3VyZmFjZUNv
bnRleHQpOwogfQorI2VuZGlmCiAKIHZvaWQgVmlld1NuYXBzaG90U3RvcmU6OnJlY29yZFNuYXBz
aG90KFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQogewpAQCAtMTczLDIzICsxNzUsMzAgQEAg
dm9pZCBWaWV3U25hcHNob3RTdG9yZTo6cmVjb3JkU25hcHNob3QoV2ViUGFnZVByb3h5JiB3ZWJQ
YWdlUHJveHkpCiAgICAgfQogCiAgICAgaXRlbS0+c2V0U25hcHNob3RVVUlEKGNyZWF0ZUNhbm9u
aWNhbFVVSURTdHJpbmcoKSk7CisgICAgCisgICAgU25hcHNob3Qgc25hcHNob3Q7CisgICAgc25h
cHNob3QuY3JlYXRpb25UaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CiAK
KyNpZiBVU0UoSU9TVVJGQUNFKQogICAgIGF1dG8gc3VyZmFjZUFuZENvbnRleHQgPSBjcmVhdGVJ
T1N1cmZhY2VGcm9tSW1hZ2Uoc25hcHNob3RJbWFnZS5nZXQoKSk7Ci0KLSAgICBTbmFwc2hvdCBz
bmFwc2hvdDsKICAgICBzbmFwc2hvdC5zdXJmYWNlID0gc3VyZmFjZUFuZENvbnRleHQuZmlyc3Q7
CiAgICAgc25hcHNob3Quc3VyZmFjZUNvbnRleHQgPSBzdXJmYWNlQW5kQ29udGV4dC5zZWNvbmQ7
Ci0gICAgc25hcHNob3QuY3JlYXRpb25UaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6
bm93KCk7Ci0KLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyNp
ZiBQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5
MAogICAgIElPU3VyZmFjZVNldFB1cmdlYWJsZShzbmFwc2hvdC5zdXJmYWNlLmdldCgpLCBrSU9T
dXJmYWNlUHVyZ2VhYmxlVm9sYXRpbGUsIG51bGxwdHIpOwogI2VuZGlmCisjZWxzZQorICAgIHNu
YXBzaG90LmltYWdlID0gc25hcHNob3RJbWFnZTsKKyNlbmRpZgogCiAgICAgbV9zbmFwc2hvdE1h
cC5hZGQoaXRlbS0+c25hcHNob3RVVUlEKCksIHNuYXBzaG90KTsKICAgICBtX3JlbmRlclRyZWVT
aXplTWFwLmFkZChpdGVtLT5zbmFwc2hvdFVVSUQoKSwgd2ViUGFnZVByb3h5LnJlbmRlclRyZWVT
aXplKCkpOwogfQogCisjaWYgVVNFKElPU1VSRkFDRSkKIHN0ZDo6cGFpcjxSZXRhaW5QdHI8SU9T
dXJmYWNlUmVmPiwgdWludDY0X3Q+IFZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdEFuZFJlbmRl
clRyZWVTaXplKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0pCisjZWxzZQorc3RkOjpwYWly
PFJldGFpblB0cjxDR0ltYWdlUmVmPiwgdWludDY0X3Q+IFZpZXdTbmFwc2hvdFN0b3JlOjpzbmFw
c2hvdEFuZFJlbmRlclRyZWVTaXplKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0pCisjZW5k
aWYKIHsKICAgICBpZiAoaXRlbS0+c25hcHNob3RVVUlEKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgMCk7CkBAIC0xOTksMTQgKzIwOCwxNSBAQCBz
dGQ6OnBhaXI8UmV0YWluUHRyPElPU3VyZmFjZVJlZj4sIHVpbnQ2NF90PiBWaWV3U25hcHNob3RT
dG9yZTo6c25hcHNob3RBbmRSZW5kZQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVs
bHB0ciwgMCk7CiAKICAgICBjb25zdCBhdXRvJiBzbmFwc2hvdCA9IG1fc25hcHNob3RNYXAuZmlu
ZChpdGVtLT5zbmFwc2hvdFVVSUQoKSk7Ci0gICAgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gc3Vy
ZmFjZTsKIAotICAgIGlmIChzbmFwc2hvdCAhPSBtX3NuYXBzaG90TWFwLmVuZCgpKQotICAgICAg
ICBzdXJmYWNlID0gc25hcHNob3QtPnZhbHVlLnN1cmZhY2U7Ci0KLSAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoc3VyZmFjZSwgcmVuZGVyVHJlZVNpemUtPnZhbHVlKTsKKyAgICBpZiAoc25hcHNo
b3QgPT0gbV9zbmFwc2hvdE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KG51bGxwdHIsIHJlbmRlclRyZWVTaXplLT52YWx1ZSk7CisgICAgCisjaWYgVVNFKElPU1VSRkFD
RSkKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc25hcHNob3QtPnZhbHVlLnN1cmZhY2UsIHJl
bmRlclRyZWVTaXplLT52YWx1ZSk7CisjZWxzZQorICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihz
bmFwc2hvdC0+dmFsdWUuaW1hZ2UsIHJlbmRlclRyZWVTaXplLT52YWx1ZSk7CisjZW5kaWYKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGU2ZDQ2NjUuLjMwN2IxMTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTQ4Myw2ICs0ODMsNyBAQAogCQkyREE5NDRCRDE4ODUxMUU3MDBFRDg2REIgLyogTmV0
d29ya1Byb2Nlc3NJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyREE5NDRCQzE4ODUxMUU3MDBFRDg2REIgLyogTmV0d29ya1Byb2Nlc3NJT1MubW0g
Ki87IH07CiAJCTJEREUwQUZBMTgyOThDQzkwMEY5N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQcm9w
ZXJ0eUFwcGxpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEREUwQUY4MTgyOThDQzkwMEY5N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFw
cGxpZXIuaCAqLzsgfTsKIAkJMkRERTBBRkIxODI5OENDOTAwRjk3RUFBIC8qIFJlbW90ZUxheWVy
VHJlZVByb3BlcnR5QXBwbGllci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEREUwQUY5MTgyOThDQzkwMEY5N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQ
cm9wZXJ0eUFwcGxpZXIubW0gKi87IH07CisJCTJERjk1OTNCMThBNDI0MTIwMDk3ODVBMSAvKiBW
aWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyREY5NTkzNDE4QTQyNDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1cmVD
b250cm9sbGVySU9TLm1tICovOyB9OwogCQkzMTA5OTk3MzE0NkM3NUEyMDAyOURFQjkgLyogV2Vi
Tm90aWZpY2F0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDk5OTcxMTQ2Qzc1OUIwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25D
bGllbnQuY3BwICovOyB9OwogCQkzMTA5OTlDNzE0NkM5RTNEMDAyOURFQjkgLyogV2ViTm90aWZp
Y2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTA5OTk2ODE0NkM3MUY1MDAyOURFQjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50Lmgg
Ki87IH07CiAJCTMxMkMwQzRBMTQ2RERDOEEwMDE2QzkxMSAvKiBXS05vdGlmaWNhdGlvblByb3Zp
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJD
MEM0OTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMTgzLDYgKzIxODQs
NyBAQAogCQkyREE5NDRCQzE4ODUxMUU3MDBFRDg2REIgLyogTmV0d29ya1Byb2Nlc3NJT1MubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0lP
Uy5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRERTBBRjgxODI5OENDOTAwRjk3RUFBIC8qIFJl
bW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkRERTBBRjkxODI5OENDOTAwRjk3RUFBIC8qIFJlbW90ZUxheWVyVHJl
ZVByb3BlcnR5QXBwbGllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMkRGOTU5MzQxOEE0MjQxMjAwOTc4NUExIC8qIFZpZXdHZXN0dXJlQ29udHJv
bGxlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFZpZXdH
ZXN0dXJlQ29udHJvbGxlcklPUy5tbTsgcGF0aCA9IGlvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJ
T1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDk5OTY4MTQ2QzcxRjUwMDI5
REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTm90aWZp
Y2F0aW9uQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDk5OTcxMTQ2
Qzc1OUIwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEyQzBDNDkxNDZEREM4QTAwMTZDOTExIC8qIFdLTm90
aWZpY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tO
b3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDIy
MCw2ICs0MjIyLDcgQEAKIAkJMkRBOTQ0QTgxODg0RTlBQjAwRUQ4NkRCIC8qIGlvcyAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMkRGOTU5MzQxOEE0MjQx
MjAwOTc4NUExIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbSAqLywKIAkJCQkyREE5NDRB
OTE4ODRFOUJBMDBFRDg2REIgLyogVGV4dENoZWNrZXJJT1MubW0gKi8sCiAJCQkJMkRBOTQ0QUEx
ODg0RTlCQTAwRUQ4NkRCIC8qIFdlYkluc3BlY3RvclByb3h5SU9TLm1tICovLAogCQkJCTJEQTk0
NEFCMTg4NEU5QkEwMEVEODZEQiAvKiBXZWJQYWdlUHJveHlJT1MubW0gKi8sCkBAIC03ODcwLDYg
Kzc4NzMsNyBAQAogCQkJCTUxRDEzMDUzMTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVxdWVz
dERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMTMwNTUxMzgyRUFDMDAwMzUxRUREIC8q
IFNlY0l0ZW1SZXNwb25zZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE3OTA4OEQxNjlC
QUE2MjAwNjkwNEM3IC8qIFNlY0l0ZW1TaGltLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJERjk1
OTNCMThBNDI0MTIwMDk3ODVBMSAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0gaW4gU291
cmNlcyAqLywKIAkJCQlFMTc5MDg5MDE2OUJBQTdGMDA2OTA0QzcgLyogU2VjSXRlbVNoaW1NZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4RTY5MEIxNjlCNTYzRjAwOUI2
NjcwIC8qIFNlY0l0ZW1TaGltUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4RTY5MTcx
NjlCNjY3QjAwOUI2NjcwIC8qIFNlY0l0ZW1TaGltUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQppbmRleCBh
MTA3NmNjLi4zMjBhNDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0K
QEAgLTMyMyw2ICszMjMsNyBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpmbHVz
aExheWVycygpCiAgICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5idWlsZFRyYW5zYWN0aW9u
KGxheWVyVHJhbnNhY3Rpb24sICptX3Jvb3RMYXllcik7CiAgICAgbGF5ZXJUcmFuc2FjdGlvbi5z
ZXRDb250ZW50c1NpemUobV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCkt
PmNvbnRlbnRzU2l6ZSgpKTsKICAgICBsYXllclRyYW5zYWN0aW9uLnNldFBhZ2VTY2FsZUZhY3Rv
cihtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnBhZ2VTY2FsZUZhY3RvcigpKTsKKyAgICBsYXllclRy
YW5zYWN0aW9uLnNldFJlbmRlclRyZWVTaXplKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cmVuZGVy
VHJlZVNpemUoKSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGxheWVyVHJhbnNhY3Rpb24uc2V0
TWluaW11bVNjYWxlRmFjdG9yKG1fd2ViUGFnZS0+bWluaW11bVBhZ2VTY2FsZUZhY3RvcigpKTsK
ICAgICBsYXllclRyYW5zYWN0aW9uLnNldE1heGltdW1TY2FsZUZhY3RvcihtX3dlYlBhZ2UtPm1h
eGltdW1QYWdlU2NhbGVGYWN0b3IoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223518</attachid>
            <date>2014-02-07 16:49:48 -0800</date>
            <delta_ts>2014-02-07 16:51:51 -0800</delta_ts>
            <desc>patch</desc>
            <filename>swipe-ios3.diff</filename>
            <type>text/plain</type>
            <size>45161</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxMTAyMWE2Li4zMzNjYzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUg
QEAKKzIwMTQtMDItMDcgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViS2l0MiBWaWV3IEdlc3R1cmVzIChTd2lwZSk6IFN1cHBvcnQgZm9yIGlPUwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MzYzCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTE5NDE5ND4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OnJlbmRlclRyZWVTaXplKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246OnNldFJlbmRlclRyZWVTaXplKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1JlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OmRlY29kZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKToKKyAgICAgICAgU2VuZCB0aGUgcmVuZGVyIHRy
ZWUgc2l6ZSBhbG9uZyB3aXRoIHJlbW90ZSBsYXllciB0cmVlIGNvbW1pdHMsCisgICAgICAgIHNv
IHRoYXQgd2UgY2FuIGFjdCB1cG9uIGl0ICh0byBoaWRlIHNuYXBzaG90cykgaW4gdGhlIFVJIHBy
b2Nlc3MKKyAgICAgICAgaW4gc3luYyB3aXRoIGxheWVyIGNvbW1pdHMuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaDoKKyAgICAgICAgV2Ugd2FudCBhbGxv
d3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcyBmb3IgYm90aCBwbGF0Zm9ybXMuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAgICAgICAg
KFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnRha2VWaWV3U25hcHNob3QpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2lvcy9XS0NvbnRlbnRWaWV3Lm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF90YWtlVmll
d1NuYXBzaG90XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0lu
dGVybmFsLmg6CisgICAgICAgIFBsdW1iIHNuYXBzaG90dGluZyB0aHJvdWdoIHRvIFdLVmlld0lP
Uy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLVmlld0lPUy5tbToKKyAgICAgICAg
KC1bV0tWaWV3IHNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOl0pOgorICAg
ICAgICAoLVtXS1ZpZXcgYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXNdKToKKyAg
ICAgICAgQ3JlYXRlL2Rlc3Ryb3kgdGhlIGdlc3R1cmUgY29udHJvbGxlciB3aGVuIHdlIHR1cm4g
b24vb2ZmIGJhY2stZm9yd2FyZCBzd2lwZS4KKyAgICAgICAgVGVsbCBXZWJQYWdlUHJveHkgdG8g
c2F2ZSBzbmFwc2hvdHMgaWYgc3dpcGUgaXMgZW5hYmxlZC4KKworICAgICAgICAoLVtXS1ZpZXcg
Y29udGVudFZpZXc6ZGlkQ29tbWl0TGF5ZXJUcmVlOl0pOgorICAgICAgICBGb3J3YXJkIHRoZSBj
dXJyZW50IHRyYW5zYWN0aW9uJ3MgcmVuZGVyIHRyZWUgc2l6ZSB0byBWaWV3R2VzdHVyZUNvbnRy
b2xsZXIuCisKKyAgICAgICAgKC1bV0tWaWV3IHRha2VWaWV3U25hcHNob3RGb3JDb250ZW50Vmll
dzpdKToKKyAgICAgICAgU25hcHNob3QgdGhlIHZpZXcuIFRoaXMgaXMgbm90IHRoZSBiZXN0IFNQ
SSB0byB1c2UsIHdlIHNob3VsZCBjb25zaWRlcgorICAgICAgICB1c2luZyBvbmUgb2YgdGhvc2Ug
d2hpY2ggcmV0dXJucyBhbiBJT1N1cmZhY2UgYW5kIHBsdW1iaW5nIGl0IHRocm91Z2gKKyAgICAg
ICAgdG8gVmlld1NuYXBzaG90U3RvcmUsIGJ1dCBhbGwgb2Ygb3VyIFBhZ2VDbGllbnQgYWJzdHJh
Y3Rpb24gbWFrZXMgdGhhdCBhbm5veWluZy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY29yZE5hdmlnYXRp
b25TbmFwc2hvdCk6CisgICAgICAgIFJlY29yZCBzbmFwc2hvdHMgb24gaU9TIGFzIHdlbGwuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbTogQWRk
ZWQuCisgICAgICAgICgtW1dLU3dpcGVJbnRlcmFjdGl2ZVRyYW5zaXRpb25EZWxlZ2F0ZSBpbml0
V2l0aFZpZXdHZXN0dXJlQ29udHJvbGxlcjpXZWJLaXQ6OnN3aXBpbmdWaWV3Ol0pOgorICAgICAg
ICAoLVtXS1N3aXBlSW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGUgV2ViS2l0OjpWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OmRpcmVjdGlvbkZvclRyYW5zaXRpb246XSk6CisgICAgICAgICgtW1dL
U3dpcGVJbnRlcmFjdGl2ZVRyYW5zaXRpb25EZWxlZ2F0ZSBzdGFydEludGVyYWN0aXZlVHJhbnNp
dGlvbjpdKToKKyAgICAgICAgKC1bV0tTd2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRlbGVnYXRl
IHNob3VsZEJlZ2luSW50ZXJhY3RpdmVUcmFuc2l0aW9uOl0pOgorICAgICAgICAoLVtXS1N3aXBl
SW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdhdGUgaW50ZXJhY3RpdmVUcmFuc2l0aW9uOmdlc3R1
cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNv
Z25pemVyOl0pOgorICAgICAgICAoLVtXS1N3aXBlSW50ZXJhY3RpdmVUcmFuc2l0aW9uRGVsZWdh
dGUgaW50ZXJhY3RpdmVUcmFuc2l0aW9uOmdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY2VpdmVU
b3VjaDpdKToKKyAgICAgICAgKC1bV0tTd2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRlbGVnYXRl
IGdlc3R1cmVSZWNvZ25pemVyRm9ySW50ZXJhY3RpdmVUcmFuc2l0aW9uOldpdGhUYXJnZXQ6YWN0
aW9uOl0pOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZpZXdHZXN0
dXJlQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
flZpZXdHZXN0dXJlQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6aW5zdGFsbFN3aXBlSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0
dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3
R2VzdHVyZUNvbnRyb2xsZXI6OmNhblN3aXBlSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2V0UmVuZGVyVHJlZVNpemUpOgorICAgICAgICAo
V2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnN3aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVy
RmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnJlbW92ZVN3
aXBlU25hcHNob3QpOgorCisgICAgICAgICogVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRy
b2xsZXIuaDoKKyAgICAgICAgQWRkIGlPUy1zcGVjaWZpYyBtZXRob2RzLCBhbmQgZG9uJ3QgaW5j
bHVkZSBhbGwgb2YgdGhlIE1hYy1zcGVjaWZpYyBjb2RlLgorICAgICAgICBXZSBjYW4gbW92ZSB0
b3dhcmRzIHNoYXJpbmcgbW9yZSBsb2dpYyBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW46CisgICAgICAgICog
VUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJL
aXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6Vmlld0dlc3R1cmVDb250cm9sbGVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBz
aG90U3RvcmU6OnJlY29yZFNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90
U3RvcmU6OnNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUpOgorICAgICAgICBNYWtlIFZpZXdTbmFw
c2hvdFN0b3JlIGJ1aWxkL3dvcmsgd2l0aG91dCBJT1N1cmZhY2UuCisKKyAgICAgICAgKiBXZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTQtMDItMDcgIERlYW4gSmFja3Nv
biAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkdMIGRvZXNuJ3QgdXBkYXRlIHdpdGgg
cmVtb3RlbHkgaG9zdGVkIGxheWVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oCmluZGV4IDMyMDBiZjcuLjQ0NTUwZWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uLmgKQEAgLTE2MCw2ICsxNjAsOSBAQCBwdWJsaWM6CiAKICAgICBkb3VibGUg
cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVGYWN0b3I7IH0KICAg
ICB2b2lkIHNldFBhZ2VTY2FsZUZhY3Rvcihkb3VibGUgcGFnZVNjYWxlRmFjdG9yKSB7IG1fcGFn
ZVNjYWxlRmFjdG9yID0gcGFnZVNjYWxlRmFjdG9yOyB9CisgICAgCisgICAgdWludDY0X3QgcmVu
ZGVyVHJlZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclRyZWVTaXplOyB9CisgICAgdm9p
ZCBzZXRSZW5kZXJUcmVlU2l6ZSh1aW50NjRfdCByZW5kZXJUcmVlU2l6ZSkgeyBtX3JlbmRlclRy
ZWVTaXplID0gcmVuZGVyVHJlZVNpemU7IH0KIAogICAgIGRvdWJsZSBtaW5pbXVtU2NhbGVGYWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1TY2FsZUZhY3RvcjsgfQogICAgIHZvaWQgc2V0
TWluaW11bVNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZSkgeyBtX21pbmltdW1TY2FsZUZhY3RvciA9
IHNjYWxlOyB9CkBAIC0xNzcsNiArMTgwLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBtX2Rlc3Ryb3llZExheWVySURzOwog
ICAgIFdlYkNvcmU6OkludFNpemUgbV9jb250ZW50c1NpemU7CiAgICAgZG91YmxlIG1fcGFnZVNj
YWxlRmFjdG9yOworICAgIHVpbnQ2NF90IG1fcmVuZGVyVHJlZVNpemU7CiAgICAgZG91YmxlIG1f
bWluaW11bVNjYWxlRmFjdG9yOwogICAgIGRvdWJsZSBtX21heGltdW1TY2FsZUZhY3RvcjsKICAg
ICBib29sIG1fYWxsb3dzVXNlclNjYWxpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQppbmRleCAyM2YzNWRjLi41
MTJjNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW0KQEAgLTM1Myw2ICszNTMsNyBAQCB2b2lkIFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiAgICAgZW5jb2RlciA8PCBtX21pbmltdW1TY2FsZUZhY3RvcjsKICAgICBlbmNvZGVy
IDw8IG1fbWF4aW11bVNjYWxlRmFjdG9yOwogICAgIGVuY29kZXIgPDwgbV9hbGxvd3NVc2VyU2Nh
bGluZzsKKyAgICBlbmNvZGVyIDw8IG1fcmVuZGVyVHJlZVNpemU7CiB9CiAKIGJvb2wgUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb246OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mIHJlc3VsdCkKQEAgLTM5MCw2ICszOTEsOSBA
QCBib29sIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpkZWNvZGUoSVBDOjpBcmd1bWVudERl
Y29kZXImIGRlY29kZXIsIFJlbW90ZUxheQogCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQubV9hbGxvd3NVc2VyU2NhbGluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX3JlbmRlclRyZWVTaXplKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXcuaAppbmRleCAzMDljNDBjLi5lN2I5N2E3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVmlldy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3LmgKQEAgLTY1LDYgKzY1LDgg
QEAgV0tfRVhQT1JUCiAKIEBwcm9wZXJ0eSBCT09MIGRyYXdzQmFja2dyb3VuZDsKIEBwcm9wZXJ0
eSBCT09MIGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOworICAgIAorQHByb3BlcnR5IChyZWFk
d3JpdGUpIEJPT0wgYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7CiAKICNpZiBU
QVJHRVRfT1NfSVBIT05FCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFVJU2Nyb2xs
VmlldyAqc2Nyb2xsVmlldzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1ZpZXdQcml2YXRlLmgKaW5kZXggMDVmNjJiNy4uNjYyYTU2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgKQEAgLTcw
LDcgKzcwLDYgQEAKIEBwcm9wZXJ0eSAocmVhZG9ubHksIGdldHRlcj1pc1VzaW5nVUlTaWRlQ29t
cG9zaXRpbmcpIEJPT0wgdXNpbmdVSVNpZGVDb21wb3NpdGluZzsKIEBwcm9wZXJ0eSAocmVhZHdy
aXRlKSBCT09MIGFsbG93c01hZ25pZmljYXRpb247CiBAcHJvcGVydHkgKHJlYWR3cml0ZSkgZG91
YmxlIG1hZ25pZmljYXRpb247Ci1AcHJvcGVydHkgKHJlYWR3cml0ZSkgQk9PTCBhbGxvd3NCYWNr
Rm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlczsKIAogQHByb3BlcnR5KGNvcHksIG5vbmF0b21pYykg
TlNDb2xvciAqdW5kZXJsYXlDb2xvcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQppbmRleCA4ZTFhMmZmLi5hNjMzODQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5tbQpAQCAtMzI1LDggKzMyNSw3IEBAIENBTGF5ZXIgKlBhZ2VDbGllbnRJbXBs
OjphY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCkgY29uc3QKIAogUmV0YWluUHRyPENH
SW1hZ2VSZWY+IFBhZ2VDbGllbnRJbXBsOjp0YWtlVmlld1NuYXBzaG90KCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBbbV92aWV3IF90
YWtlVmlld1NuYXBzaG90XTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2hlZWxFdmVudFdh
c05vdEhhbmRsZWRCeVdlYkNvcmUoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3LmgKaW5k
ZXggY2RjODg2ZS4uN2NjMjIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9pb3MvV0tDb250ZW50Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvaW9zL1dLQ29udGVudFZpZXcuaApAQCAtMjMsMTEgKzIzLDEyIEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2ltcG9ydCAiV0tCYXNlLmgiCisjaW1wb3J0
ICJXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIldLQnJvd3NpbmdDb250
ZXh0R3JvdXAuaCIKKyNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwLmgiCiAjaW1wb3J0IDxVSUtpdC9V
SUtpdC5oPgotI2ltcG9ydCA8V2ViS2l0Mi9XS0Jhc2UuaD4KLSNpbXBvcnQgPFdlYktpdDIvV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJLaXQyL1dLQnJvd3NpbmdD
b250ZXh0R3JvdXAuaD4KLSNpbXBvcnQgPFdlYktpdDIvV0tQcm9jZXNzR3JvdXAuaD4KKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogQGNsYXNzIFdLQ29udGVudFZpZXc7CiBAY2xhc3MgV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbjsKQEAgLTQ3LDYgKzQ4LDkgQEAgY2xhc3MgUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb247CiBAb3B0aW9uYWwKIC0gKHZvaWQpY29udGVudFZpZXdEaWRDb21taXRM
b2FkRm9yTWFpbkZyYW1lOihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXc7CiAtICh2b2lkKWNv
bnRlbnRWaWV3OihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXcgZGlkQ29tbWl0TGF5ZXJUcmVl
Oihjb25zdCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFu
c2FjdGlvbjsKKworLy8gRklYTUU6IFRoaXMgZG9lc24ndCBiZWxvbmcgaW4gYSAnZGVsZWdhdGUn
LgorLSAoUmV0YWluUHRyPENHSW1hZ2VSZWY+KXRha2VWaWV3U25hcHNob3RGb3JDb250ZW50Vmll
dzooV0tDb250ZW50VmlldyAqKWNvbnRlbnRWaWV3OwogQGVuZAogCiBXS19BUElfQ0xBU1MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXcu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCmlu
ZGV4IGRmZWU4YWMuLjAxMDY5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvaW9zL1dLQ29udGVudFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9pb3MvV0tDb250ZW50Vmlldy5tbQpAQCAtNDYsNiArNDYsMTAgQEAKICNpbXBvcnQgPFdl
YkNvcmUvVmlld3BvcnRBcmd1bWVudHMuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAor
I2lmIFVTRShJT1NVUkZBQ0UpCisjaW1wb3J0IDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+CisjZW5k
aWYKKwogI2lmIF9faGFzX2luY2x1ZGUoPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZVByaXZhdGUuaD4p
CiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmVQcml2YXRlLmg+CiAjZW5kaWYKQEAgLTM2
Nyw0ICszNzEsOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogICAgIC8vIFtbd3JhcHBlcihf
cGFnZS0+cHJvY2VzcygpLmNvbnRleHQoKSkgX2dlb2xvY2F0aW9uUHJvdmlkZXJdIGRlY2lkZVBv
bGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46dG9BUEkoJm9yaWdpbikgZnJhbWU6
dG9BUEkoJmZyYW1lKSByZXF1ZXN0OnRvQVBJKCZwZXJtaXNzaW9uUmVxdWVzdCkgd2luZG93Oltz
ZWxmIHdpbmRvd11dOwogfQogCistIChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4pX3Rha2VWaWV3U25h
cHNob3QKK3sKKyAgICByZXR1cm4gW19kZWxlZ2F0ZSB0YWtlVmlld1NuYXBzaG90Rm9yQ29udGVu
dFZpZXc6c2VsZl07Cit9CisKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmgKaW5kZXggMDRjYmZkOC4uZTFh
YTI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250
ZW50Vmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3Mv
V0tDb250ZW50Vmlld0ludGVybmFsLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2ltcG9ydCAiV0tD
b250ZW50Vmlldy5oIgogI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNjksNCArNzAsNiBAQCBzdHJ1Y3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb247
CiAtICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOihjb25zdCBXZWJLaXQ6Oklu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJilpbmZvOwogLSAodm9pZClfZGVjaWRlUG9s
aWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjooV2ViS2l0OjpXZWJTZWN1cml0eU9y
aWdpbiYpb3JpZ2luIGZyYW1lOihXZWJLaXQ6OldlYkZyYW1lUHJveHkmKWZyYW1lIHJlcXVlc3Q6
KFdlYktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5JilwZXJtaXNzaW9uUmVx
dWVzdDsKIAorLSAoUmV0YWluUHRyPENHSW1hZ2VSZWY+KV90YWtlVmlld1NuYXBzaG90OworCiBA
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS1ZpZXdJ
T1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9XS1ZpZXdJT1MubW0KaW5k
ZXggZjc1ZmE2Zi4uOGM3ZDc1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9pb3MvV0tWaWV3SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
aW9zL1dLVmlld0lPUy5tbQpAQCAtMjYsMTUgKzI2LDIyIEBACiAjaW1wb3J0ICJjb25maWcuaCIK
ICNpbXBvcnQgIldLVmlld1ByaXZhdGUuaCIKIAorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb24uaCIKKyNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgorI2ltcG9ydCAi
V2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dEdyb3VwUHJpdmF0ZS5o
IgogI2ltcG9ydCAiV0tDb250ZW50Vmlldy5oIgogI2ltcG9ydCAiV0tQcm9jZXNzR3JvdXBQcml2
YXRlLmgiCiAjaW1wb3J0ICJXS1Njcm9sbFZpZXcuaCIKKyNpbXBvcnQgIldLQVBJQ2FzdC5oIgor
I2ltcG9ydCA8VUlLaXQvVUlJbWFnZV9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSVNjcmVl
bi5oPgogI2ltcG9ydCA8VUlLaXQvVUlTY3JvbGxWaWV3X1ByaXZhdGUuaD4KLSNpbXBvcnQgPFdl
YktpdDIvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24uaD4KKyNpbXBvcnQgPFVJS2l0L1VJV2lu
ZG93X1ByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKKwogQGludGVyZmFjZSBXS1ZpZXcgKCkgPFVJU2Nyb2xsVmlld0RlbGVnYXRl
LCBXS0NvbnRlbnRWaWV3RGVsZWdhdGU+CiAtICh2b2lkKV9zZXREb2N1bWVudFNjYWxlOihDR0Zs
b2F0KW5ld1NjYWxlOwogQGVuZApAQCAtNDQsNiArNTEsMTAgQEAKICAgICBSZXRhaW5QdHI8V0tD
b250ZW50Vmlldz4gX2NvbnRlbnRWaWV3OwogCiAgICAgQk9PTCBfaXNXYWl0aW5nRm9yTmV3TGF5
ZXJUcmVlQWZ0ZXJEaWRDb21taXRMb2FkOworICAgIHN0ZDo6dW5pcXVlX3B0cjxWaWV3R2VzdHVy
ZUNvbnRyb2xsZXI+IF9nZXN0dXJlQ29udHJvbGxlcjsKKyAgICAKKyAgICBCT09MIF9hbGxvd3NC
YWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlczsKKwogICAgIEJPT0wgX2hhc1N0YXRpY01pbmlt
dW1MYXlvdXRTaXplOwogICAgIENHU2l6ZSBfbWluaW11bUxheW91dFNpemVPdmVycmlkZTsKIH0K
QEAgLTk3LDYgKzEwOCwyNiBAQAogICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGJyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXJdOwogfQogCistICh2b2lkKXNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdh
dGlvbkdlc3R1cmVzOihCT09MKWFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzCit7
CisgICAgX2FsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzID0gYWxsb3dzQmFja0Zv
cndhcmROYXZpZ2F0aW9uR2VzdHVyZXM7CisgICAgCisgICAgV2ViUGFnZVByb3h5ICp3ZWJQYWdl
UHJveHkgPSB0b0ltcGwoW19jb250ZW50VmlldyBfcGFnZVJlZl0pOworICAgIAorICAgIGlmIChh
bGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlcyAmJiAhX2dlc3R1cmVDb250cm9sbGVy
KSB7CisgICAgICAgIF9nZXN0dXJlQ29udHJvbGxlciA9IHN0ZDo6bWFrZV91bmlxdWU8Vmlld0dl
c3R1cmVDb250cm9sbGVyPigqd2ViUGFnZVByb3h5KTsKKyAgICAgICAgX2dlc3R1cmVDb250cm9s
bGVyLT5pbnN0YWxsU3dpcGVIYW5kbGVyKHNlbGYpOworICAgIH0gZWxzZQorICAgICAgICBfZ2Vz
dHVyZUNvbnRyb2xsZXIgPSBudWxscHRyOworICAgIAorICAgIHdlYlBhZ2VQcm94eS0+c2V0U2hv
dWxkUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90cyhhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25H
ZXN0dXJlcyk7Cit9CisKKy0gKEJPT0wpYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVy
ZXMKK3sKKyAgICByZXR1cm4gX2FsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzOwor
fQorCiAjcHJhZ21hIG1hcmsgV0tDb250ZW50Vmlld0RlbGVnYXRlCiAKIC0gKHZvaWQpY29udGVu
dFZpZXdEaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lOihXS0NvbnRlbnRWaWV3ICopY29udGVudFZp
ZXcKQEAgLTEwNCwxMyArMTM1LDE2IEBACiAgICAgX2lzV2FpdGluZ0Zvck5ld0xheWVyVHJlZUFm
dGVyRGlkQ29tbWl0TG9hZCA9IFlFUzsKIH0KIAotLSAodm9pZCljb250ZW50VmlldzooV0tDb250
ZW50VmlldyAqKWNvbnRlbnRWaWV3IGRpZENvbW1pdExheWVyVHJlZTooY29uc3QgV2ViS2l0OjpS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpbGF5ZXJUcmVlVHJhbnNhY3Rpb24KKy0gKHZvaWQp
Y29udGVudFZpZXc6KFdLQ29udGVudFZpZXcgKiljb250ZW50VmlldyBkaWRDb21taXRMYXllclRy
ZWU6KGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRyZWVUcmFuc2FjdGlv
bgogewogICAgIFtfc2Nyb2xsVmlldyBzZXRNaW5pbXVtWm9vbVNjYWxlOmxheWVyVHJlZVRyYW5z
YWN0aW9uLm1pbmltdW1TY2FsZUZhY3RvcigpXTsKICAgICBbX3Njcm9sbFZpZXcgc2V0TWF4aW11
bVpvb21TY2FsZTpsYXllclRyZWVUcmFuc2FjdGlvbi5tYXhpbXVtU2NhbGVGYWN0b3IoKV07CiAg
ICAgW19zY3JvbGxWaWV3IHNldFpvb21FbmFibGVkOmxheWVyVHJlZVRyYW5zYWN0aW9uLmFsbG93
c1VzZXJTY2FsaW5nKCldOwogICAgIGlmICghW19zY3JvbGxWaWV3IGlzWm9vbWluZ10gJiYgIVtf
c2Nyb2xsVmlldyBpc1pvb21Cb3VuY2luZ10pCiAgICAgICAgIFtfc2Nyb2xsVmlldyBzZXRab29t
U2NhbGU6bGF5ZXJUcmVlVHJhbnNhY3Rpb24ucGFnZVNjYWxlRmFjdG9yKCldOworICAgIAorICAg
IGlmIChfZ2VzdHVyZUNvbnRyb2xsZXIpCisgICAgICAgIF9nZXN0dXJlQ29udHJvbGxlci0+c2V0
UmVuZGVyVHJlZVNpemUobGF5ZXJUcmVlVHJhbnNhY3Rpb24ucmVuZGVyVHJlZVNpemUoKSk7CiAK
ICAgICBpZiAoX2lzV2FpdGluZ0Zvck5ld0xheWVyVHJlZUFmdGVyRGlkQ29tbWl0TG9hZCkgewog
ICAgICAgICBVSUVkZ2VJbnNldHMgaW5zZXQgPSBbX3Njcm9sbFZpZXcgY29udGVudEluc2V0XTsK
QEAgLTIxOSw2ICsyNTMsMTcgQEAKICAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudE9mZnNldDpj
b250ZW50T2Zmc2V0XTsKIH0KIAorCistIChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4pdGFrZVZpZXdT
bmFwc2hvdEZvckNvbnRlbnRWaWV3OihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXcKK3sKKyAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIGFjcXVpcmUgYW4gSU9TdXJmYWNl
IGRpcmVjdGx5LCBpbnN0ZWFkIG9mIGdvaW5nIHRvIENHSW1hZ2UgaGVyZSBhbmQgYmFjayBpbiBW
aWV3U25hcHNob3RTdG9yZS4KKyAgICBVSUdyYXBoaWNzQmVnaW5JbWFnZUNvbnRleHRXaXRoT3B0
aW9ucyhzZWxmLmJvdW5kcy5zaXplLCBZRVMsIHNlbGYud2luZG93LnNjcmVlbi5zY2FsZSk7Cisg
ICAgW3NlbGYgZHJhd1ZpZXdIaWVyYXJjaHlJblJlY3Q6W3NlbGYgYm91bmRzXSBhZnRlclNjcmVl
blVwZGF0ZXM6Tk9dOworICAgIFVJSW1hZ2UgKmltYWdlID0gVUlHcmFwaGljc0dldEltYWdlRnJv
bUN1cnJlbnRJbWFnZUNvbnRleHQoKTsKKyAgICBVSUdyYXBoaWNzRW5kSW1hZ2VDb250ZXh0KCk7
CisgICAgcmV0dXJuIGltYWdlLkNHSW1hZ2U7Cit9CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9u
IFdLVmlldyAoUHJpdmF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKaW5kZXggMmM0ZWMxMy4uMWM4ZGYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKQEAgLTc2Nyw3ICs3NjcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVj
b3JkTmF2aWdhdGlvblNuYXBzaG90KCkKICAgICBpZiAoIW1fc2hvdWxkUmVjb3JkTmF2aWdhdGlv
blNuYXBzaG90cykKICAgICAgICAgcmV0dXJuOwogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hh
cmVkKCkucmVjb3JkU25hcHNob3QoKnRoaXMpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYThjM2QKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1ZpZXdHZXN0dXJlQ29udHJvbGxlcklP
Uy5tbQpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyLmgiCisKKyNpbXBvcnQgIldlYlBh
Z2VHcm91cC5oIgorI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZXMuaCIKKyNp
bXBvcnQgIlZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3JNZXNzYWdlcy5oIgorI2ltcG9ydCAi
Vmlld1NuYXBzaG90U3RvcmUuaCIKKyNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgorI2lt
cG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBv
cnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+
CisjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0
L1VJU2NyZWVuRWRnZVBhbkdlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxVSUtpdC9VSVZp
ZXdDb250cm9sbGVyVHJhbnNpdGlvbmluZ19Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVdl
YlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXIuaD4KKyNpbXBvcnQgPFVJS2l0L19VSU5hdmln
YXRpb25JbnRlcmFjdGl2ZVRyYW5zaXRpb24uaD4KKyNpbXBvcnQgPFVJS2l0L19VSU5hdmlnYXRp
b25QYXJhbGxheFRyYW5zaXRpb24uaD4KKworI2lmIFVTRShJT1NVUkZBQ0UpCisjaW1wb3J0IDxJ
T1N1cmZhY2UvSU9TdXJmYWNlLmg+CisjaW1wb3J0IDxJT1N1cmZhY2UvSU9TdXJmYWNlUHJpdmF0
ZS5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAaW50ZXJmYWNlIFdL
U3dpcGVUcmFuc2l0aW9uQ29udHJvbGxlciA6IE5TT2JqZWN0IDxfVUlOYXZpZ2F0aW9uSW50ZXJh
Y3RpdmVUcmFuc2l0aW9uQmFzZURlbGVnYXRlPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVmll
d0dlc3R1cmVDb250cm9sbGVyOihXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlciopZ2VzdHVy
ZUNvbnRyb2xsZXIgc3dpcGluZ1ZpZXc6KFVJVmlldyAqKXZpZXc7CitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXS1N3aXBlVHJhbnNpdGlvbkNvbnRyb2xsZXIKK3sKKyAgICBXZWJLaXQ6OlZpZXdH
ZXN0dXJlQ29udHJvbGxlciAqX2dlc3R1cmVDb250cm9sbGVyOworICAgIFJldGFpblB0cjxfVUlO
YXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZT4gX2JhY2tUcmFuc2l0aW9uQ29udHJv
bGxlcjsKK30KKworc3RhdGljIGNvbnN0IGZsb2F0IHN3aXBlU25hcHNob3RSZW1vdmFsUmVuZGVy
VHJlZVNpemVUYXJnZXRGcmFjdGlvbiA9IDAuNTsKK3N0YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6
c2Vjb25kcyBzd2lwZVNuYXBzaG90UmVtb3ZhbFdhdGNoZG9nRHVyYXRpb24gPSAzX3M7CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aFZpZXdHZXN0dXJlQ29udHJvbGxlcjooV2ViS2l0OjpWaWV3
R2VzdHVyZUNvbnRyb2xsZXIqKWdlc3R1cmVDb250cm9sbGVyIHN3aXBpbmdWaWV3OihVSVZpZXcg
Kil2aWV3Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoc2VsZikgeworICAg
ICAgICBfZ2VzdHVyZUNvbnRyb2xsZXIgPSBnZXN0dXJlQ29udHJvbGxlcjsKKworICAgICAgICBf
YmFja1RyYW5zaXRpb25Db250cm9sbGVyID0gYWRvcHROUyhbX1VJTmF2aWdhdGlvbkludGVyYWN0
aXZlVHJhbnNpdGlvbkJhc2UgYWxsb2NdKTsKKyAgICAgICAgX2JhY2tUcmFuc2l0aW9uQ29udHJv
bGxlciA9IFtfYmFja1RyYW5zaXRpb25Db250cm9sbGVyIGluaXRXaXRoR2VzdHVyZVJlY29nbml6
ZXJWaWV3OnZpZXcgYW5pbWF0b3I6bmlsIGRlbGVnYXRlOnNlbGZdOworICAgIH0KKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGly
ZWN0aW9uKWRpcmVjdGlvbkZvclRyYW5zaXRpb246KF9VSU5hdmlnYXRpb25JbnRlcmFjdGl2ZVRy
YW5zaXRpb25CYXNlICopdHJhbnNpdGlvbgoreworICAgIHJldHVybiB0cmFuc2l0aW9uID09IF9i
YWNrVHJhbnNpdGlvbkNvbnRyb2xsZXIgPyBXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6
U3dpcGVEaXJlY3Rpb246OkxlZnQgOiBXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dp
cGVEaXJlY3Rpb246OlJpZ2h0OworfQorCistICh2b2lkKXN0YXJ0SW50ZXJhY3RpdmVUcmFuc2l0
aW9uOihfVUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZSAqKXRyYW5zaXRpb24K
K3sKKyAgICBfZ2VzdHVyZUNvbnRyb2xsZXItPmJlZ2luU3dpcGVHZXN0dXJlKHRyYW5zaXRpb24s
IFtzZWxmIGRpcmVjdGlvbkZvclRyYW5zaXRpb246dHJhbnNpdGlvbl0pOworfQorCistIChCT09M
KXNob3VsZEJlZ2luSW50ZXJhY3RpdmVUcmFuc2l0aW9uOihfVUlOYXZpZ2F0aW9uSW50ZXJhY3Rp
dmVUcmFuc2l0aW9uQmFzZSAqKXRyYW5zaXRpb24KK3sKKyAgICByZXR1cm4gX2dlc3R1cmVDb250
cm9sbGVyLT5jYW5Td2lwZUluRGlyZWN0aW9uKFtzZWxmIGRpcmVjdGlvbkZvclRyYW5zaXRpb246
dHJhbnNpdGlvbl0pOworfQorCistIChCT09MKWludGVyYWN0aXZlVHJhbnNpdGlvbjooX1VJTmF2
aWdhdGlvbkludGVyYWN0aXZlVHJhbnNpdGlvbkJhc2UgKil0cmFuc2l0aW9uIGdlc3R1cmVSZWNv
Z25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVj
b2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29n
bml6ZXIgKilvdGhlckdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgcmV0dXJuIFtvdGhlckdlc3R1
cmVSZWNvZ25pemVyIGlzS2luZE9mQ2xhc3M6W1VJVGFwR2VzdHVyZVJlY29nbml6ZXIgY2xhc3Nd
XTsKK30KKworLSAoQk9PTClpbnRlcmFjdGl2ZVRyYW5zaXRpb246KF9VSU5hdmlnYXRpb25JbnRl
cmFjdGl2ZVRyYW5zaXRpb25CYXNlICopdHJhbnNpdGlvbiBnZXN0dXJlUmVjb2duaXplcjooVUlH
ZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyIHNob3VsZFJlY2VpdmVUb3VjaDoo
VUlUb3VjaCAqKXRvdWNoCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoVUlQYW5HZXN0dXJl
UmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyRm9ySW50ZXJhY3RpdmVUcmFuc2l0aW9uOihf
VUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uQmFzZSAqKXRyYW5zaXRpb24gV2l0aFRh
cmdldDooaWQpdGFyZ2V0IGFjdGlvbjooU0VMKWFjdGlvbgoreworICAgIFVJU2NyZWVuRWRnZVBh
bkdlc3R1cmVSZWNvZ25pemVyICpyZWNvZ25pemVyID0gW1tVSVNjcmVlbkVkZ2VQYW5HZXN0dXJl
UmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6dGFyZ2V0IGFjdGlvbjphY3Rpb25dOwor
ICAgIHN3aXRjaCAoW3NlbGYgZGlyZWN0aW9uRm9yVHJhbnNpdGlvbjp0cmFuc2l0aW9uXSkgewor
ICAgIGNhc2UgV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpM
ZWZ0OgorICAgICAgICBbcmVjb2duaXplciBzZXRFZGdlczpVSU1pblhFZGdlXTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVEaXJl
Y3Rpb246OlJpZ2h0OgorICAgICAgICBbcmVjb2duaXplciBzZXRFZGdlczpVSU1heFhFZGdlXTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZWNvZ25pemVyOworfQorCitAZW5k
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZpZXdHZXN0
dXJlQ29udHJvbGxlcihXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKKyAgICA6IG1fd2ViUGFn
ZVByb3h5KHdlYlBhZ2VQcm94eSkKKyAgICAsIG1fYWN0aXZlR2VzdHVyZVR5cGUoVmlld0dlc3R1
cmVUeXBlOjpOb25lKQorICAgICwgbV9zd2lwZVdhdGNoZG9nVGltZXIodGhpcywgJlZpZXdHZXN0
dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZCkKKyAgICAsIG1f
dGFyZ2V0UmVuZGVyVHJlZVNpemUoMCkKK3sKK30KKworVmlld0dlc3R1cmVDb250cm9sbGVyOjp+
Vmlld0dlc3R1cmVDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xs
ZXI6Omluc3RhbGxTd2lwZUhhbmRsZXIoVUlWaWV3ICp2aWV3KQoreworICAgIEFTU0VSVCghbV9z
d2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRlbGVnYXRlKTsKKyAgICBtX3N3aXBlSW50ZXJhY3Rp
dmVUcmFuc2l0aW9uRGVsZWdhdGUgPSBhZG9wdE5TKFtbV0tTd2lwZVRyYW5zaXRpb25Db250cm9s
bGVyIGFsbG9jXSBpbml0V2l0aFZpZXdHZXN0dXJlQ29udHJvbGxlcjp0aGlzIHN3aXBpbmdWaWV3
OnZpZXddKTsKKyAgICBtX2xpdmVTd2lwZVZpZXcgPSB2aWV3OworfQorCit2b2lkIFZpZXdHZXN0
dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUoX1VJTmF2aWdhdGlvbkludGVyYWN0aXZl
VHJhbnNpdGlvbkJhc2UgKnRyYW5zaXRpb24sIFN3aXBlRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sK
KyAgICBpZiAobV9hY3RpdmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6Ok5vbmUpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbSogdGFy
Z2V0SXRlbSA9IGRpcmVjdGlvbiA9PSBTd2lwZURpcmVjdGlvbjo6TGVmdCA/IG1fd2ViUGFnZVBy
b3h5LmJhY2tGb3J3YXJkTGlzdCgpLmJhY2tJdGVtKCkgOiBtX3dlYlBhZ2VQcm94eS5iYWNrRm9y
d2FyZExpc3QoKS5mb3J3YXJkSXRlbSgpOworCisgICAgYXV0byBzbmFwc2hvdCA9IFdlYktpdDo6
Vmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLnNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUodGFy
Z2V0SXRlbSkuZmlyc3Q7CisKKyAgICBSZXRhaW5QdHI8VUlWaWV3Q29udHJvbGxlcj4gc25hcHNo
b3RWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tVSVZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0
XSk7CisgICAgbV9zbmFwc2hvdFZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOlttX2xpdmVTd2lwZVZpZXcgYm91bmRzXV0pOworICAgIGlmIChzbmFwc2hvdCkgewor
I2lmIFVTRShJT1NVUkZBQ0UpCisgICAgICAgIHVpbnQzMl90IHB1cmdlYWJpbGl0eVN0YXRlID0g
a0lPU3VyZmFjZVB1cmdlYWJsZU5vblZvbGF0aWxlOworICAgICAgICBJT1N1cmZhY2VTZXRQdXJn
ZWFibGUoc25hcHNob3QuZ2V0KCksIGtJT1N1cmZhY2VQdXJnZWFibGVOb25Wb2xhdGlsZSwgJnB1
cmdlYWJpbGl0eVN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwdXJnZWFiaWxpdHlTdGF0
ZSAhPSBrSU9TdXJmYWNlUHVyZ2VhYmxlRW1wdHkpCisgICAgICAgICAgICBbbV9zbmFwc2hvdFZp
ZXcgbGF5ZXJdLmNvbnRlbnRzID0gKGlkKXNuYXBzaG90LmdldCgpOworI2Vsc2UKKyAgICAgICAg
W21fc25hcHNob3RWaWV3IGxheWVyXS5jb250ZW50cyA9IChpZClzbmFwc2hvdC5nZXQoKTsKKyNl
bmRpZgorICAgIH0KKyAgICBbbV9zbmFwc2hvdFZpZXcgc2V0QmFja2dyb3VuZENvbG9yOltVSUNv
bG9yIHdoaXRlQ29sb3JdXTsKKyAgICBbbV9zbmFwc2hvdFZpZXcgbGF5ZXJdLmNvbnRlbnRzR3Jh
dml0eSA9IEAidG9wTGVmdCI7CisgICAgW21fc25hcHNob3RWaWV3IGxheWVyXS5jb250ZW50c1Nj
YWxlID0gbV9saXZlU3dpcGVWaWV3LndpbmRvdy5zY3JlZW4uc2NhbGU7CisgICAgW3NuYXBzaG90
Vmlld0NvbnRyb2xsZXIgc2V0VmlldzptX3NuYXBzaG90Vmlldy5nZXQoKV07CisKKyAgICBtX3Ry
YW5zaXRpb25Db250YWluZXJWaWV3ID0gYWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpbbV9saXZlU3dpcGVWaWV3IGZyYW1lXV0pOworCisgICAgW21fbGl2ZVN3aXBlVmlldy5z
dXBlcnZpZXcgaW5zZXJ0U3VidmlldzptX3RyYW5zaXRpb25Db250YWluZXJWaWV3LmdldCgpIGJl
bG93U3VidmlldzptX2xpdmVTd2lwZVZpZXddOworICAgIFttX3RyYW5zaXRpb25Db250YWluZXJW
aWV3IGFkZFN1YnZpZXc6bV9saXZlU3dpcGVWaWV3XTsKKworICAgIFJldGFpblB0cjxVSVZpZXdD
b250cm9sbGVyPiB0YXJnZXR0ZWRWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tVSVZpZXdDb250
cm9sbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW3RhcmdldHRlZFZpZXdDb250cm9sbGVyIHNldFZp
ZXc6bV9saXZlU3dpcGVWaWV3XTsKKworICAgIG1fb3JpZ2luYWxMaXZlU3dpcGVWaWV3RnJhbWUg
PSBtX2xpdmVTd2lwZVZpZXcuZnJhbWU7CisgICAgbV9saXZlU3dpcGVWaWV3LmZyYW1lID0gbV9s
aXZlU3dpcGVWaWV3LmJvdW5kczsKKyAgICAKKyAgICBVSU5hdmlnYXRpb25Db250cm9sbGVyT3Bl
cmF0aW9uIHRyYW5zaXRpb25PcGVyYXRpb24gPSBkaXJlY3Rpb24gPT0gU3dpcGVEaXJlY3Rpb246
OkxlZnQgPyBVSU5hdmlnYXRpb25Db250cm9sbGVyT3BlcmF0aW9uUG9wIDogVUlOYXZpZ2F0aW9u
Q29udHJvbGxlck9wZXJhdGlvblB1c2g7CisgICAgUmV0YWluUHRyPF9VSU5hdmlnYXRpb25QYXJh
bGxheFRyYW5zaXRpb24+IGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbX1VJTmF2aWdh
dGlvblBhcmFsbGF4VHJhbnNpdGlvbiBhbGxvY10gaW5pdFdpdGhDdXJyZW50T3BlcmF0aW9uOnRy
YW5zaXRpb25PcGVyYXRpb25dKTsKKworICAgIFJldGFpblB0cjxfVUlWaWV3Q29udHJvbGxlck9u
ZVRvT25lVHJhbnNpdGlvbkNvbnRleHQ+IHRyYW5zaXRpb25Db250ZXh0ID0gYWRvcHROUyhbW19V
SVZpZXdDb250cm9sbGVyT25lVG9PbmVUcmFuc2l0aW9uQ29udGV4dCBhbGxvY10gaW5pdF0pOwor
ICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0RnJvbVZpZXdDb250cm9sbGVyOnRhcmdldHRlZFZp
ZXdDb250cm9sbGVyLmdldCgpXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRleHQgX3NldFRvVmlld0Nv
bnRyb2xsZXI6c25hcHNob3RWaWV3Q29udHJvbGxlci5nZXQoKV07CisgICAgW3RyYW5zaXRpb25D
b250ZXh0IF9zZXRDb250YWluZXJWaWV3Om1fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcuZ2V0KCld
OworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0RnJvbVN0YXJ0RnJhbWU6W21fbGl2ZVN3aXBl
VmlldyBib3VuZHNdXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRleHQgX3NldFRvRW5kRnJhbWU6W21f
bGl2ZVN3aXBlVmlldyBib3VuZHNdXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRleHQgX3NldFRvU3Rh
cnRGcmFtZTpDR1JlY3RaZXJvXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRleHQgX3NldEZyb21FbmRG
cmFtZTpDR1JlY3RaZXJvXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRleHQgX3NldEFuaW1hdG9yOmFu
aW1hdGlvbkNvbnRyb2xsZXIuZ2V0KCldOworICAgIFt0cmFuc2l0aW9uQ29udGV4dCBfc2V0SW50
ZXJhY3Rvcjp0cmFuc2l0aW9uXTsKKyAgICBbdHJhbnNpdGlvbkNvbnRleHQgX3NldFRyYW5zaXRp
b25Jc0luRmxpZ2h0OllFU107CisgICAgW3RyYW5zaXRpb25Db250ZXh0IF9zZXRDb21wbGV0aW9u
SGFuZGxlcjpeKF9VSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbkNvbnRleHQgKmNvbnRleHQsIEJP
T0wgZGlkQ29tcGxldGUpIHsgZW5kU3dpcGVHZXN0dXJlKHRhcmdldEl0ZW0sIGNvbnRleHQsICFk
aWRDb21wbGV0ZSk7IH1dOworCisgICAgW3RyYW5zaXRpb24gc2V0QW5pbWF0aW9uQ29udHJvbGxl
cjphbmltYXRpb25Db250cm9sbGVyLmdldCgpXTsKKyAgICBbdHJhbnNpdGlvbiBzdGFydEludGVy
YWN0aXZlVHJhbnNpdGlvbjp0cmFuc2l0aW9uQ29udGV4dC5nZXQoKV07CisKKyAgICBtX2FjdGl2
ZUdlc3R1cmVUeXBlID0gVmlld0dlc3R1cmVUeXBlOjpTd2lwZTsKK30KKworYm9vbCBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OmNhblN3aXBlSW5EaXJlY3Rpb24oU3dpcGVEaXJlY3Rpb24gZGlyZWN0
aW9uKQoreworICAgIGlmIChkaXJlY3Rpb24gPT0gU3dpcGVEaXJlY3Rpb246OkxlZnQpCisgICAg
ICAgIHJldHVybiAhIW1fd2ViUGFnZVByb3h5LmJhY2tGb3J3YXJkTGlzdCgpLmJhY2tJdGVtKCk7
CisgICAgcmV0dXJuICEhbV93ZWJQYWdlUHJveHkuYmFja0ZvcndhcmRMaXN0KCkuZm9yd2FyZEl0
ZW0oKTsKK30KKwordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZShX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLCBfVUlWaWV3Q29udHJvbGxlclRyYW5z
aXRpb25Db250ZXh0ICpjb250ZXh0LCBib29sIGNhbmNlbGxlZCkKK3sKKyAgICBbY29udGV4dCBf
c2V0VHJhbnNpdGlvbklzSW5GbGlnaHQ6Tk9dOworICAgIFtjb250ZXh0IF9zZXRJbnRlcmFjdG9y
Om5pbF07CisgICAgW2NvbnRleHQgX3NldEFuaW1hdG9yOm5pbF07CisgICAgCisgICAgW1ttX3Ry
YW5zaXRpb25Db250YWluZXJWaWV3IHN1cGVydmlld10gaW5zZXJ0U3VidmlldzptX3NuYXBzaG90
Vmlldy5nZXQoKSBhYm92ZVN1YnZpZXc6bV90cmFuc2l0aW9uQ29udGFpbmVyVmlldy5nZXQoKV07
CisgICAgW1ttX3RyYW5zaXRpb25Db250YWluZXJWaWV3IHN1cGVydmlld10gaW5zZXJ0U3Vidmll
dzptX2xpdmVTd2lwZVZpZXcgYWJvdmVTdWJ2aWV3Om1fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcu
Z2V0KCldOworICAgIFttX3RyYW5zaXRpb25Db250YWluZXJWaWV3IHJlbW92ZUZyb21TdXBlcnZp
ZXddOworICAgIG1fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXcgPSBudWxscHRyOworICAgIAorICAg
IFttX2xpdmVTd2lwZVZpZXcgc2V0RnJhbWU6bV9vcmlnaW5hbExpdmVTd2lwZVZpZXdGcmFtZV07
CisgICAgW21fc25hcHNob3RWaWV3IHNldEZyYW1lOm1fb3JpZ2luYWxMaXZlU3dpcGVWaWV3RnJh
bWVdOworICAgIAorICAgIGlmIChjYW5jZWxsZWQpIHsKKyAgICAgICAgcmVtb3ZlU3dpcGVTbmFw
c2hvdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fdGFyZ2V0UmVuZGVy
VHJlZVNpemUgPSBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuc25hcHNob3RBbmRSZW5kZXJU
cmVlU2l6ZSh0YXJnZXRJdGVtKS5zZWNvbmQgKiBzd2lwZVNuYXBzaG90UmVtb3ZhbFJlbmRlclRy
ZWVTaXplVGFyZ2V0RnJhY3Rpb247CisgICAgCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBs
YWNlIHRoZSBjdXJyZW50IGJhY2stZm9yd2FyZCBpdGVtJ3Mgc25hcHNob3QKKyAgICAvLyBsaWtl
IHdlIG5vcm1hbGx5IHdvdWxkIHdoZW4gZ29pbmcgYmFjayBvciBmb3J3YXJkLCBiZWNhdXNlIHdl
IGFyZQorICAgIC8vIGRpc3BsYXlpbmcgdGhlIGRlc3RpbmF0aW9uIGl0ZW0ncyBzbmFwc2hvdC4K
KyAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuZGlzYWJsZVNuYXBzaG90dGluZygpOwor
ICAgIG1fd2ViUGFnZVByb3h5LmdvVG9CYWNrRm9yd2FyZEl0ZW0odGFyZ2V0SXRlbSk7CisgICAg
Vmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLmVuYWJsZVNuYXBzaG90dGluZygpOworICAgIAor
ICAgIGlmICghbV90YXJnZXRSZW5kZXJUcmVlU2l6ZSkgeworICAgICAgICByZW1vdmVTd2lwZVNu
YXBzaG90KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3N3aXBlV2F0Y2hkb2dU
aW1lci5zdGFydE9uZVNob3Qoc3dpcGVTbmFwc2hvdFJlbW92YWxXYXRjaGRvZ0R1cmF0aW9uLmNv
dW50KCkpOworfQorICAgIAordm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OnNldFJlbmRlclRy
ZWVTaXplKHVpbnQ2NF90IHJlbmRlclRyZWVTaXplKQoreworICAgIGlmIChtX2FjdGl2ZUdlc3R1
cmVUeXBlICE9IFZpZXdHZXN0dXJlVHlwZTo6U3dpcGUpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX3RhcmdldFJlbmRlclRyZWVTaXplICYmIHJlbmRlclRyZWVTaXplID4gbV90YXJnZXRS
ZW5kZXJUcmVlU2l6ZSkKKyAgICAgICAgcmVtb3ZlU3dpcGVTbmFwc2hvdCgpOworfQorCit2b2lk
IFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c3dpcGVTbmFwc2hvdFdhdGNoZG9nVGltZXJGaXJlZChU
aW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+KikKK3sKKyAgICByZW1vdmVTd2lwZVNuYXBzaG90
KCk7Cit9CisKK3ZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpyZW1vdmVTd2lwZVNuYXBzaG90
KCkKK3sKKyAgICBtX3N3aXBlV2F0Y2hkb2dUaW1lci5zdG9wKCk7CisKKyAgICBpZiAobV9hY3Rp
dmVHZXN0dXJlVHlwZSAhPSBWaWV3R2VzdHVyZVR5cGU6OlN3aXBlKQorICAgICAgICByZXR1cm47
CisgICAgCisjaWYgVVNFKElPU1VSRkFDRSkKKyAgICBJT1N1cmZhY2VSZWYgc25hcHNob3RTdXJm
YWNlID0gKElPU3VyZmFjZVJlZilbbV9zbmFwc2hvdFZpZXcgbGF5ZXJdLmNvbnRlbnRzOworICAg
IGlmIChzbmFwc2hvdFN1cmZhY2UpCisgICAgICAgIElPU3VyZmFjZVNldFB1cmdlYWJsZShzbmFw
c2hvdFN1cmZhY2UsIGtJT1N1cmZhY2VQdXJnZWFibGVWb2xhdGlsZSwgbnVsbHB0cik7CisjZW5k
aWYKKyAgICAKKyAgICBbbV9zbmFwc2hvdFZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAg
bV9zbmFwc2hvdFZpZXcgPSBudWxscHRyOworICAgIAorICAgIG1fdGFyZ2V0UmVuZGVyVHJlZVNp
emUgPSAwOworICAgIG1fYWN0aXZlR2VzdHVyZVR5cGUgPSBWaWV3R2VzdHVyZVR5cGU6Ok5vbmU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLmgKaW5kZXggNTVkZDgwNS4uYzVjODVh
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNv
bnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJl
Q29udHJvbGxlci5oCkBAIC0yNiwxNiArMjYsMjIgQEAKICNpZm5kZWYgVmlld0dlc3R1cmVDb250
cm9sbGVyX2gKICNkZWZpbmUgVmlld0dlc3R1cmVDb250cm9sbGVyX2gKIAotI2lmICFQTEFURk9S
TShJT1MpCi0KICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAKIE9CSkNfQ0xBU1MgQ0FMYXllcjsKKworI2lmIFBMQVRGT1JNKElPUykK
K09CSkNfQ0xBU1MgVUlWaWV3OworT0JKQ19DTEFTUyBXS1N3aXBlVHJhbnNpdGlvbkNvbnRyb2xs
ZXI7CitPQkpDX0NMQVNTIF9VSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbkNvbnRleHQ7CitPQkpD
X0NMQVNTIF9VSU5hdmlnYXRpb25JbnRlcmFjdGl2ZVRyYW5zaXRpb25CYXNlOworI2Vsc2UKIE9C
SkNfQ0xBU1MgTlNFdmVudDsKIE9CSkNfQ0xBU1MgTlNWaWV3OworI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCkBAIC00Nyw1NSArNTMsNzUgQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9s
bGVyIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6CiAgICAgVmlld0dl
c3R1cmVDb250cm9sbGVyKFdlYlBhZ2VQcm94eSYpOwogICAgIH5WaWV3R2VzdHVyZUNvbnRyb2xs
ZXIoKTsKLQorICAgIAorICAgIGVudW0gY2xhc3MgVmlld0dlc3R1cmVUeXBlIHsKKyAgICAgICAg
Tm9uZSwKKyNpZiAhUExBVEZPUk0oSU9TKQorICAgICAgICBNYWduaWZpY2F0aW9uLAorICAgICAg
ICBTbWFydE1hZ25pZmljYXRpb24sCisjZW5kaWYKKyAgICAgICAgU3dpcGUKKyAgICB9OworICAg
IAorICAgIGVudW0gY2xhc3MgU3dpcGVUcmFuc2l0aW9uU3R5bGUgeworICAgICAgICBPdmVybGFw
LAorICAgICAgICBQdXNoCisgICAgfTsKKyAgICAKKyAgICBlbnVtIGNsYXNzIFN3aXBlRGlyZWN0
aW9uIHsKKyAgICAgICAgTGVmdCwKKyAgICAgICAgUmlnaHQKKyAgICB9OworICAgIAorI2lmICFQ
TEFURk9STShJT1MpCiAgICAgZG91YmxlIG1hZ25pZmljYXRpb24oKSBjb25zdDsKIAogICAgIHZv
aWQgaGFuZGxlTWFnbmlmaWNhdGlvbkdlc3R1cmUoZG91YmxlIHNjYWxlLCBXZWJDb3JlOjpGbG9h
dFBvaW50IG9yaWdpbik7CiAgICAgdm9pZCBoYW5kbGVTbWFydE1hZ25pZmljYXRpb25HZXN0dXJl
KFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luKTsKIAogICAgIGJvb2wgaGFuZGxlU2Nyb2xsV2hl
ZWxFdmVudChOU0V2ZW50ICopOwotICAgIHZvaWQgZGlkSGl0UmVuZGVyVHJlZVNpemVUaHJlc2hv
bGQoKTsKLQogICAgIHZvaWQgd2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoTlNFdmVu
dCAqKTsKIAogICAgIHZvaWQgc2V0Q3VzdG9tU3dpcGVWaWV3cyhWZWN0b3I8UmV0YWluUHRyPE5T
Vmlldz4+IHZpZXdzKSB7IG1fY3VzdG9tU3dpcGVWaWV3cyA9IHN0ZDo6bW92ZSh2aWV3cyk7IH0K
ICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93UmVsYXRpdmVCb3VuZHNGb3JDdXN0b21Td2lw
ZVZpZXdzKCkgY29uc3Q7CiAKICAgICB2b2lkIGVuZEFjdGl2ZUdlc3R1cmUoKTsKLQotICAgIGVu
dW0gY2xhc3MgVmlld0dlc3R1cmVUeXBlIHsKLSAgICAgICAgTm9uZSwKLSAgICAgICAgTWFnbmlm
aWNhdGlvbiwKLSAgICAgICAgU21hcnRNYWduaWZpY2F0aW9uLAotICAgICAgICBTd2lwZQotICAg
IH07Ci0KLSAgICBlbnVtIGNsYXNzIFN3aXBlVHJhbnNpdGlvblN0eWxlIHsKLSAgICAgICAgT3Zl
cmxhcCwKLSAgICAgICAgUHVzaAotICAgIH07CisjZWxzZQorICAgIHZvaWQgaW5zdGFsbFN3aXBl
SGFuZGxlcihVSVZpZXcgKik7CisgICAgYm9vbCBjYW5Td2lwZUluRGlyZWN0aW9uKFN3aXBlRGly
ZWN0aW9uKTsKKyAgICB2b2lkIGJlZ2luU3dpcGVHZXN0dXJlKF9VSU5hdmlnYXRpb25JbnRlcmFj
dGl2ZVRyYW5zaXRpb25CYXNlICosIFN3aXBlRGlyZWN0aW9uKTsKKyAgICB2b2lkIGVuZFN3aXBl
R2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLCBfVUlWaWV3Q29udHJv
bGxlclRyYW5zaXRpb25Db250ZXh0ICosIGJvb2wgY2FuY2VsbGVkKTsKKyAgICB2b2lkIHNldFJl
bmRlclRyZWVTaXplKHVpbnQ2NF90KTsKKyNlbmRpZgogCiBwcml2YXRlOgogICAgIC8vIElQQzo6
TWVzc2FnZVJlY2VpdmVyLgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24qLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgCisgICAg
dm9pZCByZW1vdmVTd2lwZVNuYXBzaG90KCk7CisgICAgdm9pZCBzd2lwZVNuYXBzaG90V2F0Y2hk
b2dUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFZpZXdHZXN0dXJlQ29udHJvbGxlcj4qKTsKIAor
I2lmICFQTEFURk9STShJT1MpCiAgICAgLy8gTWVzc2FnZSBoYW5kbGVycy4KICAgICB2b2lkIGRp
ZENvbGxlY3RHZW9tZXRyeUZvck1hZ25pZmljYXRpb25HZXN0dXJlKFdlYkNvcmU6OkZsb2F0UmVj
dCB2aXNpYmxlQ29udGVudEJvdW5kcywgYm9vbCBmcmFtZUhhbmRsZXNNYWduaWZpY2F0aW9uR2Vz
dHVyZSk7CiAgICAgdm9pZCBkaWRDb2xsZWN0R2VvbWV0cnlGb3JTbWFydE1hZ25pZmljYXRpb25H
ZXN0dXJlKFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luLCBXZWJDb3JlOjpGbG9hdFJlY3QgcmVu
ZGVyUmVjdCwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50Qm91bmRzLCBib29sIGlz
UmVwbGFjZWRFbGVtZW50LCBib29sIGZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlKTsK
KyAgICB2b2lkIGRpZEhpdFJlbmRlclRyZWVTaXplVGhyZXNob2xkKCk7CiAKICAgICB2b2lkIGVu
ZE1hZ25pZmljYXRpb25HZXN0dXJlKCk7CiAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBzY2FsZWRN
YWduaWZpY2F0aW9uT3JpZ2luKFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luLCBkb3VibGUgc2Nh
bGUpOwogCi0gICAgZW51bSBjbGFzcyBTd2lwZURpcmVjdGlvbiB7IExlZnQsIFJpZ2h0IH07CiAg
ICAgdm9pZCB0cmFja1N3aXBlR2VzdHVyZShOU0V2ZW50ICosIFN3aXBlRGlyZWN0aW9uKTsKICAg
ICB2b2lkIGJlZ2luU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0
ZW0sIFN3aXBlRGlyZWN0aW9uKTsKICAgICB2b2lkIGhhbmRsZVN3aXBlR2VzdHVyZShXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLCBkb3VibGUgcHJvZ3Jlc3MsIFN3aXBlRGlyZWN0
aW9uKTsKICAgICB2b2lkIGVuZFN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0
YXJnZXRJdGVtLCBib29sIGNhbmNlbGxlZCk7Ci0gICAgdm9pZCByZW1vdmVTd2lwZVNuYXBzaG90
KCk7Ci0gICAgdm9pZCBzd2lwZVNuYXBzaG90V2F0Y2hkb2dUaW1lckZpcmVkKFdlYkNvcmU6OlRp
bWVyPFZpZXdHZXN0dXJlQ29udHJvbGxlcj4qKTsKLQorI2VuZGlmCisgICAgCiAgICAgV2ViUGFn
ZVByb3h5JiBtX3dlYlBhZ2VQcm94eTsKKyAgICBWaWV3R2VzdHVyZVR5cGUgbV9hY3RpdmVHZXN0
dXJlVHlwZTsKKyAgICAKKyAgICBXZWJDb3JlOjpUaW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+
IG1fc3dpcGVXYXRjaGRvZ1RpbWVyOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBkb3VibGUg
bV9tYWduaWZpY2F0aW9uOwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9tYWduaWZpY2F0aW9u
T3JpZ2luOwogCkBAIC0xMDMsOCArMTI5LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbGFzdE1h
Z25pZmljYXRpb25HZXN0dXJlV2FzU21hcnRNYWduaWZpY2F0aW9uOwogICAgIFdlYkNvcmU6OkZs
b2F0UG9pbnQgbV9sYXN0U21hcnRNYWduaWZpY2F0aW9uT3JpZ2luOwogCi0gICAgVmlld0dlc3R1
cmVUeXBlIG1fYWN0aXZlR2VzdHVyZVR5cGU7Ci0KICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV92
aXNpYmxlQ29udGVudFJlY3Q7CiAgICAgYm9vbCBtX3Zpc2libGVDb250ZW50UmVjdElzVmFsaWQ7
CiAgICAgYm9vbCBtX2ZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0dXJlOwpAQCAtMTEzLDcg
KzEzNyw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJldGFpblB0cjxDQUxheWVyPj4gbV9jdXJy
ZW50U3dpcGVMaXZlTGF5ZXJzOwogCiAgICAgU3dpcGVUcmFuc2l0aW9uU3R5bGUgbV9zd2lwZVRy
YW5zaXRpb25TdHlsZTsKLSAgICBXZWJDb3JlOjpUaW1lcjxWaWV3R2VzdHVyZUNvbnRyb2xsZXI+
IG1fc3dpcGVXYXRjaGRvZ1RpbWVyOwogICAgIFZlY3RvcjxSZXRhaW5QdHI8TlNWaWV3Pj4gbV9j
dXN0b21Td2lwZVZpZXdzOwogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2N1cnJlbnRTd2lwZUN1
c3RvbVZpZXdCb3VuZHM7CiAKQEAgLTEyMSwxMCArMTQ0LDE3IEBAIHByaXZhdGU6CiAgICAgLy8g
dGhlIHNjcm9sbCBldmVudCB0aGF0IHdvdWxkIGhhdmUgc3RhcnRlZCBhIHN3aXBlLCB3ZSdsbCBm
aWxsIHRoZXNlIGluLgogICAgIGJvb2wgbV9oYXNQZW5kaW5nU3dpcGU7CiAgICAgU3dpcGVEaXJl
Y3Rpb24gbV9wZW5kaW5nU3dpcGVEaXJlY3Rpb247CisjZWxzZQorICAgIENHUmVjdCBtX29yaWdp
bmFsTGl2ZVN3aXBlVmlld0ZyYW1lOworICAgIAorICAgIFVJVmlldyAqbV9saXZlU3dpcGVWaWV3
OworICAgIFJldGFpblB0cjxVSVZpZXc+IG1fc25hcHNob3RWaWV3OworICAgIFJldGFpblB0cjxV
SVZpZXc+IG1fdHJhbnNpdGlvbkNvbnRhaW5lclZpZXc7CisgICAgUmV0YWluUHRyPFdLU3dpcGVU
cmFuc2l0aW9uQ29udHJvbGxlcj4gbV9zd2lwZUludGVyYWN0aXZlVHJhbnNpdGlvbkRlbGVnYXRl
OworICAgIHVpbnQ2NF90IG1fdGFyZ2V0UmVuZGVyVHJlZVNpemU7CisjZW5kaWYKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKLQogI2VuZGlm
IC8vIFZpZXdHZXN0dXJlQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCmlu
ZGV4IGZlZjY0YTguLmEwYjU4YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLm1lc3NhZ2VzLmluCkBAIC0y
MCwxMiArMjAsMTAgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAot
I2lmICFQTEFURk9STShJT1MpCi0KIG1lc3NhZ2VzIC0+IFZpZXdHZXN0dXJlQ29udHJvbGxlciB7
CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBEaWRDb2xsZWN0R2VvbWV0cnlGb3JNYWduaWZpY2F0
aW9uR2VzdHVyZShXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRCb3VuZHMsIGJvb2wg
ZnJhbWVIYW5kbGVzTWFnbmlmaWNhdGlvbkdlc3R1cmUpCiAgICAgRGlkQ29sbGVjdEdlb21ldHJ5
Rm9yU21hcnRNYWduaWZpY2F0aW9uR2VzdHVyZShXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbiwg
V2ViQ29yZTo6RmxvYXRSZWN0IHJlbmRlclJlY3QsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxl
Q29udGVudEJvdW5kcywgYm9vbCBpc1JlcGxhY2VkRWxlbWVudCwgYm9vbCBmcmFtZUhhbmRsZXNN
YWduaWZpY2F0aW9uR2VzdHVyZSkKICAgICBEaWRIaXRSZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCgp
Ci19Ci0KICNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbQppbmRleCBjNzE2YTVlLi42OWY2MzVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJv
bGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJl
Q29udHJvbGxlck1hYy5tbQpAQCAtOTMsMTIgKzkzLDEzIEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlZpZXdHZXN0dXJlQ29udHJvbGxlcihXZWJQYWdlUHJv
eHkmIHdlYlBhZ2VQcm94eSkKICAgICA6IG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKLSAg
ICAsIG1fbGFzdE1hZ25pZmljYXRpb25HZXN0dXJlV2FzU21hcnRNYWduaWZpY2F0aW9uKGZhbHNl
KQogICAgICwgbV9hY3RpdmVHZXN0dXJlVHlwZShWaWV3R2VzdHVyZVR5cGU6Ok5vbmUpCisgICAg
LCBtX3N3aXBlV2F0Y2hkb2dUaW1lcih0aGlzLCAmVmlld0dlc3R1cmVDb250cm9sbGVyOjpzd2lw
ZVNuYXBzaG90V2F0Y2hkb2dUaW1lckZpcmVkKQorICAgICwgbV9sYXN0TWFnbmlmaWNhdGlvbkdl
c3R1cmVXYXNTbWFydE1hZ25pZmljYXRpb24oZmFsc2UpCiAgICAgLCBtX3Zpc2libGVDb250ZW50
UmVjdElzVmFsaWQoZmFsc2UpCiAgICAgLCBtX2ZyYW1lSGFuZGxlc01hZ25pZmljYXRpb25HZXN0
dXJlKGZhbHNlKQogICAgICwgbV9zd2lwZVRyYW5zaXRpb25TdHlsZShTd2lwZVRyYW5zaXRpb25T
dHlsZTo6T3ZlcmxhcCkKLSAgICAsIG1fc3dpcGVXYXRjaGRvZ1RpbWVyKHRoaXMsICZWaWV3R2Vz
dHVyZUNvbnRyb2xsZXI6OnN3aXBlU25hcHNob3RXYXRjaGRvZ1RpbWVyRmlyZWQpCisgICAgCiAg
ICAgLCBtX2hhc1BlbmRpbmdTd2lwZShmYWxzZSkKIHsKICAgICBtX3dlYlBhZ2VQcm94eS5wcm9j
ZXNzKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCksICp0aGlzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaApp
bmRleCA2NGIzMDUzLi5mOGM4NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9WaWV3U25hcHNob3RTdG9yZS5oCkBAIC0yNiwxNCArMjYsMTYgQEAKICNpZm5kZWYgVmll
d1NuYXBzaG90U3RvcmVfaAogI2RlZmluZSBWaWV3U25hcHNob3RTdG9yZV9oCiAKLSNpZiAhUExB
VEZPUk0oSU9TKQotCiAjaW5jbHVkZSA8Y2hyb25vPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgVVNFKElPU1VSRkFDRSkK
KyNpbmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CkBAIC00OCw3ICs1MCwxMSBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIFZpZXdTbmFwc2hvdFN0b3JlJiBzaGFyZWQoKTsKIAogICAg
IHZvaWQgcmVjb3JkU25hcHNob3QoV2ViUGFnZVByb3h5Jik7CisjaWYgVVNFKElPU1VSRkFDRSkK
ICAgICBzdGQ6OnBhaXI8UmV0YWluUHRyPElPU3VyZmFjZVJlZj4sIHVpbnQ2NF90PiBzbmFwc2hv
dEFuZFJlbmRlclRyZWVTaXplKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qKTsKKyNlbHNlCisgICAg
c3RkOjpwYWlyPFJldGFpblB0cjxDR0ltYWdlUmVmPiwgdWludDY0X3Q+IHNuYXBzaG90QW5kUmVu
ZGVyVHJlZVNpemUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSopOworI2VuZGlmCiAKICAgICB2b2lk
IGRpc2FibGVTbmFwc2hvdHRpbmcoKSB7IG1fZW5hYmxlZCA9IGZhbHNlOyB9CiAgICAgdm9pZCBl
bmFibGVTbmFwc2hvdHRpbmcoKSB7IG1fZW5hYmxlZCA9IHRydWU7IH0KQEAgLTU3LDggKzYzLDEy
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcnVuZVNuYXBzaG90cyhXZWJQYWdlUHJveHkmKTsKIAog
ICAgIHN0cnVjdCBTbmFwc2hvdCB7CisjaWYgVVNFKElPU1VSRkFDRSkKICAgICAgICAgUmV0YWlu
UHRyPElPU3VyZmFjZVJlZj4gc3VyZmFjZTsKICAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gc3VyZmFjZUNvbnRleHQ7CisjZWxzZQorICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
aW1hZ2U7CisjZW5kaWYKIAogICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1l
X3BvaW50IGNyZWF0aW9uVGltZTsKICAgICB9OwpAQCAtNzEsNiArODEsNCBAQCBwcml2YXRlOgog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmIC8vICFQTEFURk9STShJT1MpCi0KICNl
bmRpZiAvLyBWaWV3U25hcHNob3RTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbQppbmRleCAzYWMyODk1Li42NDZhZGU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUubW0K
QEAgLTI2LDE4ICsyNiwxNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJWaWV3U25h
cHNob3RTdG9yZS5oIgogCi0jaWYgIVBMQVRGT1JNKElPUykKLQogI2ltcG9ydCAiV2ViQmFja0Zv
cndhcmRMaXN0LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPENvcmVHcmFw
aGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbXBvcnQgPElPU3VyZmFjZS9JT1N1cmZhY2UuaD4KICNp
bXBvcnQgPFdlYkNvcmUvVVVJRC5oPgogCiAjaWYgZGVmaW5lZChfX2hhc19pbmNsdWRlKSAmJiBf
X2hhc19pbmNsdWRlKDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzUHJpdmF0ZS5oPikKICNpbXBv
cnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3NQcml2YXRlLmg+CiAjZW5kaWYKIAorI2lmIFVT
RShJT1NVUkZBQ0UpCisjaW1wb3J0IDxJT1N1cmZhY2UvSU9TdXJmYWNlLmg+CiBleHRlcm4gIkMi
IENHQ29udGV4dFJlZiBDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGUoSU9TdXJmYWNlUmVmIHN1cmZh
Y2UsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgc2l6ZV90IGJpdHNQZXJDb21wb25lbnQs
IHNpemVfdCBiaXRzUGVyUGl4ZWwsIENHQ29sb3JTcGFjZVJlZiBzcGFjZSwgQ0dCaXRtYXBJbmZv
IGJpdG1hcEluZm8pOwogCiAjaWYgZGVmaW5lZChfX2hhc19pbmNsdWRlKSAmJiBfX2hhc19pbmNs
dWRlKDxJT1N1cmZhY2UvSU9TdXJmYWNlUHJpdmF0ZS5oPikKQEAgLTQ4LDkgKzQ3LDEwIEBAIGVu
dW0gewogfTsKICNlbmRpZgogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwOTAKIGV4dGVybiAiQyIgSU9SZXR1cm4gSU9TdXJmYWNlU2V0UHVyZ2VhYmxlKElP
U3VyZmFjZVJlZiBidWZmZXIsIHVpbnQzMl90IG5ld1N0YXRlLCB1aW50MzJfdCAqb2xkU3RhdGUp
OwogI2VuZGlmCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTExOCw2
ICsxMTgsNyBAQCB2b2lkIFZpZXdTbmFwc2hvdFN0b3JlOjpwcnVuZVNuYXBzaG90cyhXZWJQYWdl
UHJveHkmIHdlYlBhZ2VQcm94eSkKICAgICBtX3NuYXBzaG90TWFwLnJlbW92ZShvbGRlc3RTbmFw
c2hvdFVVSUQpOwogfQogCisjaWYgVVNFKElPU1VSRkFDRSkKIHN0YXRpYyBzdGQ6OnBhaXI8UmV0
YWluUHRyPElPU3VyZmFjZVJlZj4sIFJldGFpblB0cjxDR0NvbnRleHRSZWY+PiBjcmVhdGVJT1N1
cmZhY2VGcm9tSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSkKIHsKICAgICB1bnNpZ25lZCBwaXhlbEZv
cm1hdCA9ICdCR1JBJzsKQEAgLTE0OSw2ICsxNTAsNyBAQCBzdGF0aWMgc3RkOjpwYWlyPFJldGFp
blB0cjxJT1N1cmZhY2VSZWY+LCBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPj4gY3JlYXRlSU9TdXJm
YQogCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHN1cmZhY2UsIHN1cmZhY2VDb250ZXh0KTsK
IH0KKyNlbmRpZgogCiB2b2lkIFZpZXdTbmFwc2hvdFN0b3JlOjpyZWNvcmRTbmFwc2hvdChXZWJQ
YWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKIHsKQEAgLTE3MywyMyArMTc1LDMwIEBAIHZvaWQgVmll
d1NuYXBzaG90U3RvcmU6OnJlY29yZFNuYXBzaG90KFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5
KQogICAgIH0KIAogICAgIGl0ZW0tPnNldFNuYXBzaG90VVVJRChjcmVhdGVDYW5vbmljYWxVVUlE
U3RyaW5nKCkpOworICAgIAorICAgIFNuYXBzaG90IHNuYXBzaG90OworICAgIHNuYXBzaG90LmNy
ZWF0aW9uVGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogCisjaWYgVVNF
KElPU1VSRkFDRSkKICAgICBhdXRvIHN1cmZhY2VBbmRDb250ZXh0ID0gY3JlYXRlSU9TdXJmYWNl
RnJvbUltYWdlKHNuYXBzaG90SW1hZ2UuZ2V0KCkpOwotCi0gICAgU25hcHNob3Qgc25hcHNob3Q7
CiAgICAgc25hcHNob3Quc3VyZmFjZSA9IHN1cmZhY2VBbmRDb250ZXh0LmZpcnN0OwogICAgIHNu
YXBzaG90LnN1cmZhY2VDb250ZXh0ID0gc3VyZmFjZUFuZENvbnRleHQuc2Vjb25kOwotICAgIHNu
YXBzaG90LmNyZWF0aW9uVGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwot
Ci0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZP
Uk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBJ
T1N1cmZhY2VTZXRQdXJnZWFibGUoc25hcHNob3Quc3VyZmFjZS5nZXQoKSwga0lPU3VyZmFjZVB1
cmdlYWJsZVZvbGF0aWxlLCBudWxscHRyKTsKICNlbmRpZgorI2Vsc2UKKyAgICBzbmFwc2hvdC5p
bWFnZSA9IHNuYXBzaG90SW1hZ2U7CisjZW5kaWYKIAogICAgIG1fc25hcHNob3RNYXAuYWRkKGl0
ZW0tPnNuYXBzaG90VVVJRCgpLCBzbmFwc2hvdCk7CiAgICAgbV9yZW5kZXJUcmVlU2l6ZU1hcC5h
ZGQoaXRlbS0+c25hcHNob3RVVUlEKCksIHdlYlBhZ2VQcm94eS5yZW5kZXJUcmVlU2l6ZSgpKTsK
IH0KIAorI2lmIFVTRShJT1NVUkZBQ0UpCiBzdGQ6OnBhaXI8UmV0YWluUHRyPElPU3VyZmFjZVJl
Zj4sIHVpbnQ2NF90PiBWaWV3U25hcHNob3RTdG9yZTo6c25hcHNob3RBbmRSZW5kZXJUcmVlU2l6
ZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQorI2Vsc2UKK3N0ZDo6cGFpcjxSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4sIHVpbnQ2NF90PiBWaWV3U25hcHNob3RTdG9yZTo6c25hcHNob3RBbmRS
ZW5kZXJUcmVlU2l6ZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtKQorI2VuZGlmCiB7CiAg
ICAgaWYgKGl0ZW0tPnNuYXBzaG90VVVJRCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKG51bGxwdHIsIDApOwpAQCAtMTk5LDE0ICsyMDgsMTUgQEAgc3RkOjpwYWly
PFJldGFpblB0cjxJT1N1cmZhY2VSZWY+LCB1aW50NjRfdD4gVmlld1NuYXBzaG90U3RvcmU6OnNu
YXBzaG90QW5kUmVuZGUKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIDAp
OwogCiAgICAgY29uc3QgYXV0byYgc25hcHNob3QgPSBtX3NuYXBzaG90TWFwLmZpbmQoaXRlbS0+
c25hcHNob3RVVUlEKCkpOwotICAgIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IHN1cmZhY2U7CiAK
LSAgICBpZiAoc25hcHNob3QgIT0gbV9zbmFwc2hvdE1hcC5lbmQoKSkKLSAgICAgICAgc3VyZmFj
ZSA9IHNuYXBzaG90LT52YWx1ZS5zdXJmYWNlOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KHN1cmZhY2UsIHJlbmRlclRyZWVTaXplLT52YWx1ZSk7CisgICAgaWYgKHNuYXBzaG90ID09IG1f
c25hcHNob3RNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRy
LCByZW5kZXJUcmVlU2l6ZS0+dmFsdWUpOworICAgIAorI2lmIFVTRShJT1NVUkZBQ0UpCisgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNuYXBzaG90LT52YWx1ZS5zdXJmYWNlLCByZW5kZXJUcmVl
U2l6ZS0+dmFsdWUpOworI2Vsc2UKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc25hcHNob3Qt
PnZhbHVlLmltYWdlLCByZW5kZXJUcmVlU2l6ZS0+dmFsdWUpOworI2VuZGlmCiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlNmQ0NjY1Li4zMDdiMTEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00
ODMsNiArNDgzLDcgQEAKIAkJMkRBOTQ0QkQxODg1MTFFNzAwRUQ4NkRCIC8qIE5ldHdvcmtQcm9j
ZXNzSU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkRBOTQ0QkMxODg1MTFFNzAwRUQ4NkRCIC8qIE5ldHdvcmtQcm9jZXNzSU9TLm1tICovOyB9Owog
CQkyRERFMEFGQTE4Mjk4Q0M5MDBGOTdFQUEgLyogUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBs
aWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERF
MEFGODE4Mjk4Q0M5MDBGOTdFQUEgLyogUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmgg
Ki87IH07CiAJCTJEREUwQUZCMTgyOThDQzkwMEY5N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQcm9w
ZXJ0eUFwcGxpZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRERFMEFGOTE4Mjk4Q0M5MDBGOTdFQUEgLyogUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlB
cHBsaWVyLm1tICovOyB9OworCQkyREY5NTkzQjE4QTQyNDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1
cmVDb250cm9sbGVySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRGOTU5MzQxOEE0MjQxMjAwOTc4NUExIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxl
cklPUy5tbSAqLzsgfTsKIAkJMzEwOTk5NzMxNDZDNzVBMjAwMjlERUI5IC8qIFdlYk5vdGlmaWNh
dGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTA5OTk3MTE0NkM3NTlCMDAyOURFQjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNw
cCAqLzsgfTsKIAkJMzEwOTk5QzcxNDZDOUUzRDAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEw
OTk5NjgxNDZDNzFGNTAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oICovOyB9Owog
CQkzMTJDMEM0QTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyQzBDNDkxNDZE
REM4QTAwMTZDOTExIC8qIFdLTm90aWZpY2F0aW9uUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjE4Myw2ICsyMTg0LDcgQEAKIAkJ
MkRBOTQ0QkMxODg1MTFFNzAwRUQ4NkRCIC8qIE5ldHdvcmtQcm9jZXNzSU9TLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NJT1MubW07IHBh
dGggPSBOZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJEREUwQUY4MTgyOThDQzkwMEY5N0VBQSAvKiBSZW1vdGVMYXll
clRyZWVQcm9wZXJ0eUFwcGxpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEREUwQUY5MTgyOThDQzkwMEY5N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQcm9wZXJ0
eUFwcGxpZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1v
dGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTJERjk1OTM0MThBNDI0MTIwMDk3ODVBMSAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1Mu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBWaWV3R2VzdHVyZUNv
bnRyb2xsZXJJT1MubW07IHBhdGggPSBpb3MvVmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTA5OTk2ODE0NkM3MUY1MDAyOURFQjkgLyog
V2ViTm90aWZpY2F0aW9uQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvbkNs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTA5OTk3MTE0NkM3NTlCMDAy
OURFQjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMxMkMwQzQ5MTQ2RERDOEEwMDE2QzkxMSAvKiBXS05vdGlmaWNhdGlv
blByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTm90aWZpY2F0
aW9uUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyMjAsNiArNDIy
Miw3IEBACiAJCTJEQTk0NEE4MTg4NEU5QUIwMEVEODZEQiAvKiBpb3MgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTJERjk1OTM0MThBNDI0MTIwMDk3ODVB
MSAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0gKi8sCiAJCQkJMkRBOTQ0QTkxODg0RTlC
QTAwRUQ4NkRCIC8qIFRleHRDaGVja2VySU9TLm1tICovLAogCQkJCTJEQTk0NEFBMTg4NEU5QkEw
MEVEODZEQiAvKiBXZWJJbnNwZWN0b3JQcm94eUlPUy5tbSAqLywKIAkJCQkyREE5NDRBQjE4ODRF
OUJBMDBFRDg2REIgLyogV2ViUGFnZVByb3h5SU9TLm1tICovLApAQCAtNzg3MCw2ICs3ODczLDcg
QEAKIAkJCQk1MUQxMzA1MzEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlcXVlc3REYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDEzMDU1MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVt
UmVzcG9uc2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNzkwODhEMTY5QkFBNjIwMDY5
MDRDNyAvKiBTZWNJdGVtU2hpbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyREY5NTkzQjE4QTQy
NDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTE3OTA4OTAxNjlCQUE3RjAwNjkwNEM3IC8qIFNlY0l0ZW1TaGltTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEU2OTBCMTY5QjU2M0YwMDlCNjY3MCAvKiBT
ZWNJdGVtU2hpbVByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEU2OTE3MTY5QjY2N0Iw
MDlCNjY3MCAvKiBTZWNJdGVtU2hpbVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KaW5kZXggYTEwNzZjYy4u
MzIwYTQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCkBAIC0zMjMs
NiArMzIzLDcgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMo
KQogICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+YnVpbGRUcmFuc2FjdGlvbihsYXllclRy
YW5zYWN0aW9uLCAqbV9yb290TGF5ZXIpOwogICAgIGxheWVyVHJhbnNhY3Rpb24uc2V0Q29udGVu
dHNTaXplKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpLT5jb250ZW50
c1NpemUoKSk7CiAgICAgbGF5ZXJUcmFuc2FjdGlvbi5zZXRQYWdlU2NhbGVGYWN0b3IobV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgbGF5ZXJUcmFuc2FjdGlv
bi5zZXRSZW5kZXJUcmVlU2l6ZShtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnJlbmRlclRyZWVTaXpl
KCkpOwogI2lmIFBMQVRGT1JNKElPUykKICAgICBsYXllclRyYW5zYWN0aW9uLnNldE1pbmltdW1T
Y2FsZUZhY3RvcihtX3dlYlBhZ2UtPm1pbmltdW1QYWdlU2NhbGVGYWN0b3IoKSk7CiAgICAgbGF5
ZXJUcmFuc2FjdGlvbi5zZXRNYXhpbXVtU2NhbGVGYWN0b3IobV93ZWJQYWdlLT5tYXhpbXVtUGFn
ZVNjYWxlRmFjdG9yKCkpOwo=
</data>
<flag name="review"
          id="247558"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>