<?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>78930</bug_id>
          
          <creation_ts>2012-02-17 13:38:09 -0800</creation_ts>
          <short_desc>Full Screen Refactor Part 4: Animate into Full Screen mode using new animation classes, WebKit edition.</short_desc>
          <delta_ts>2012-03-08 15:17:23 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>78926</dependson>
    
    <dependson>78928</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>tkent</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>559488</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-02-17 13:38:09 -0800</bug_when>
    <thetext>As in bug #78928, animate into and out of full-screen mode with new animation classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560466</commentid>
    <comment_count>1</comment_count>
      <attachid>127871</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-02-20 16:58:22 -0800</bug_when>
    <thetext>Created attachment 127871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561001</commentid>
    <comment_count>2</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-02-21 10:29:18 -0800</bug_when>
    <thetext>(Mac build error is due to missing files from the prerequisite bug #78926.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563362</commentid>
    <comment_count>3</comment_count>
      <attachid>128536</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-02-23 12:23:39 -0800</bug_when>
    <thetext>Created attachment 128536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564107</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2012-02-24 01:59:47 -0800</bug_when>
    <thetext>Attachment 128536 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1
Source/WebCore/rendering/RenderBlock.cpp:5834:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 55 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>573629</commentid>
    <comment_count>5</comment_count>
      <attachid>128536</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-03-07 22:47:19 -0800</bug_when>
    <thetext>Comment on attachment 128536
Patch

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

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:198
&gt; +    RetainPtr&lt;CGImageRef&gt; webViewContents(AdoptCF, CGWindowListCreateImage(NSRectToCGRect(webViewFrame), kCGWindowListOptionIncludingWindow, windowID, kCGWindowImageShouldBeOpaque));

You can just use the new adoptCF functino here.

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:200
&gt; +    NSDisableScreenUpdates();

Please add a comment indicating where this is balanced.

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:210
&gt; +        _webViewPlaceholder.adoptNS([[NSImageView alloc] init]);

adoptNS function. I&apos;m also not sure if this needs to be an NSImageView - it looks like it could just be a plain ol&apos; NSView. (This comment also applies to part 3 :)

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:281
&gt; +    // Screen updates to be re-enabled in beganExitFullScreenWithInitialFrame:finalFrame:

This i like!

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:358
&gt; +    // We are being asked to close rapidly, most likely because the page 
&gt; +    // has closed or the web process has crashed.  Just walk through our
&gt; +    // normal exit full screen sequence, but don&apos;t wait to be called back
&gt; +    // in response.

The part about the web process is false in WK1.

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:456
&gt; +    _scaleAnimation.adoptNS([[WebWindowScaleAnimation alloc] initWithHintedDuration:duration window:[self window] initalFrame:initialWindowFrame finalFrame:screenFrame]);

= adoptNS.

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:471
&gt; +        _backgroundWindow.adoptNS(createBackgroundFullscreenWindow(screenFrame));

Same comment here as in part 3.

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:482
&gt; +    _fadeAnimation.adoptNS([[WebWindowFadeAnimation alloc] initWithDuration:duration 

= adoptNS.

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:503
&gt; +    _scaleAnimation.adoptNS([[WebWindowScaleAnimation alloc] initWithHintedDuration:duration window:[self window] initalFrame:currentFrame finalFrame:initialWindowFrame]);

= adoptNS.

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:511
&gt; +        _backgroundWindow.adoptNS(createBackgroundFullscreenWindow(screenFrame));

= adoptNS. (or fix createBackgroundFullscreenWindow).

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:519
&gt; +        [_fadeAnimation.get() setWindow:nil];

do you want to null out the animation here?

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:521
&gt; +    _fadeAnimation.adoptNS([[WebWindowFadeAnimation alloc] initWithDuration:duration 

= adoptNS.

&gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:538
&gt; +    NSEnableScreenUpdates();

Comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574182</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-08 14:09:49 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 128536 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128536&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:198
&gt; &gt; +    RetainPtr&lt;CGImageRef&gt; webViewContents(AdoptCF, CGWindowListCreateImage(NSRectToCGRect(webViewFrame), kCGWindowListOptionIncludingWindow, windowID, kCGWindowImageShouldBeOpaque));
&gt; 
&gt; You can just use the new adoptCF functino here.

Sure thing.  Changed.

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:200
&gt; &gt; +    NSDisableScreenUpdates();
&gt; 
&gt; Please add a comment indicating where this is balanced.

Added.

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:210
&gt; &gt; +        _webViewPlaceholder.adoptNS([[NSImageView alloc] init]);
&gt; 
&gt; adoptNS function. I&apos;m also not sure if this needs to be an NSImageView - it looks like it could just be a plain ol&apos; NSView. (This comment also applies to part 3 :)

You&apos;re right.  Changed. :)

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:281
&gt; &gt; +    // Screen updates to be re-enabled in beganExitFullScreenWithInitialFrame:finalFrame:
&gt; 
&gt; This i like!

Woo!

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:358
&gt; &gt; +    // We are being asked to close rapidly, most likely because the page 
&gt; &gt; +    // has closed or the web process has crashed.  Just walk through our
&gt; &gt; +    // normal exit full screen sequence, but don&apos;t wait to be called back
&gt; &gt; +    // in response.
&gt; 
&gt; The part about the web process is false in WK1.

You&apos;re right, I just copied the comment wholesale from WK2.  I&apos;ll redact the part about WK2.

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:456
&gt; &gt; +    _scaleAnimation.adoptNS([[WebWindowScaleAnimation alloc] initWithHintedDuration:duration window:[self window] initalFrame:initialWindowFrame finalFrame:screenFrame]);
&gt; 
&gt; = adoptNS.

Changed.

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:471
&gt; &gt; +        _backgroundWindow.adoptNS(createBackgroundFullscreenWindow(screenFrame));
&gt; 
&gt; Same comment here as in part 3.

Same resolution.

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:482
&gt; &gt; +    _fadeAnimation.adoptNS([[WebWindowFadeAnimation alloc] initWithDuration:duration 
&gt; 
&gt; = adoptNS.

Changed.

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:503
&gt; &gt; +    _scaleAnimation.adoptNS([[WebWindowScaleAnimation alloc] initWithHintedDuration:duration window:[self window] initalFrame:currentFrame finalFrame:initialWindowFrame]);
&gt; 
&gt; = adoptNS.

Changed.

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:511
&gt; &gt; +        _backgroundWindow.adoptNS(createBackgroundFullscreenWindow(screenFrame));
&gt; 
&gt; = adoptNS. (or fix createBackgroundFullscreenWindow).

Yup. Changed.

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:519
&gt; &gt; +        [_fadeAnimation.get() setWindow:nil];
&gt; 
&gt; do you want to null out the animation here?

It gets nulled out on the next line (with the = adoptNS), so I didn&apos;t bother.

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:521
&gt; &gt; +    _fadeAnimation.adoptNS([[WebWindowFadeAnimation alloc] initWithDuration:duration 
&gt; 
&gt; = adoptNS.

Changed.

&gt; &gt; Source/WebKit/mac/WebView/WebFullScreenController.mm:538
&gt; &gt; +    NSEnableScreenUpdates();
&gt; 
&gt; Comment.

Sure thing, Added.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574292</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-03-08 15:17:23 -0800</bug_when>
    <thetext>Committed r110216: &lt;http://trac.webkit.org/changeset/110216&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127871</attachid>
            <date>2012-02-20 16:58:22 -0800</date>
            <delta_ts>2012-02-23 12:23:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78930-20120220165821.patch</filename>
            <type>text/plain</type>
            <size>52239</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MjU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYmYxMTczNzIw
MjJjMjNiYjE2NGIyYjRkOTgzZmIzZDdlNjllNTg3MS4uNTFmYWY1NmE0YjM4NDQ3ZmMyZTRiNjIx
ZDc1Y2M3ODEyMmQzYzEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEy
LTAyLTIwICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIEZ1bGwg
U2NyZWVuIFJlZmFjdG9yIFBhcnQgNC41OiBBbmltYXRlIGludG8gRnVsbCBTY3JlZW4gbW9kZSB1
c2luZyBuZXcgYW5pbWF0aW9uIGNsYXNzZXMsIFdlYktpdCBlZGl0aW9uLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg5MzAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXZpc2UgV2ViRnVsbFNjcmVlbkNv
bnRyb2xsZXIgdG8gaGF2ZSB0aGUgc2FtZSBnZW5lcmFsIGZ1bmN0aW9uYWxpdHkgYW5kIGNvZGUg
cGF0aCBhcyBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyCisgICAgICAgIGluIFdlYktpdDIu
ICBBcyBzdWNoLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgY29waWVzIG9mIHRoZWlyIGVx
dWl2YWxlbnRzIGluIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6CisgICAgICAgICogV2Vi
Vmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIgaW5pdF0pOgorICAgICAgICAoLVtXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBk
ZWFsbG9jXSk6CisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIHdpbmRvd0RpZExv
YWRdKToKKyAgICAgICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgY2FuY2VsT3BlcmF0aW9u
Ol0pOgorICAgICAgICAoLVtXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBhcHBsaWNhdGlvbkRpZFJl
c2lnbkFjdGl2ZTpdKToKKyAgICAgICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgYXBwbGlj
YXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzOl0pOgorICAgICAgICAoLVtXZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlciBmaW5pc2hlZEVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbjpdKToKKyAgICAg
ICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgZmluaXNoZWRFeGl0RnVsbFNjcmVlbkFuaW1h
dGlvbjpdKToKKyAgICAgICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgY2xvc2VdKToKKyAg
ICAgICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgYW5pbWF0aW9uRGlkRW5kOl0pOgorICAg
ICAgICAoLVtXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxs
U2NyZWVuXSk6CisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIF9zd2FwVmlldzp3
aXRoOl0pOgorICAgICAgICAoY3JlYXRlQmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3cpOgorICAg
ICAgICAod2luZG93RnJhbWVGcm9tQXBwYXJlbnRGcmFtZXMpOgorICAgICAgICAoLVtXZWJGdWxs
U2NyZWVuQ29udHJvbGxlciBfc3RhcnRFbnRlckZ1bGxTY3JlZW5BbmltYXRpb25XaXRoRHVyYXRp
b246XSk6CisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIF9zdGFydEV4aXRGdWxs
U2NyZWVuQW5pbWF0aW9uV2l0aER1cmF0aW9uOl0pOgorCisgICAgICAgIFRoZSBmb2xsb3dpbmcg
aXMgYSBjb3B5IG9mIHRoZSBlcXVpdmFsZW50IGZ1bmN0aW9uIGluIFdlYkZ1bGxTY3JlZW5NYW5h
Z2VyOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW06CisgICAg
ICAgIChzY3JlZW5SZWN0T2ZDb250ZW50cyk6ICAgICAgICAKKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6ZnVs
bFNjcmVlblJlbmRlcmVyQ2hhbmdlZCk6IE5vIGxvbmdlciB0ZWxsIHRoZSBXZWJWaWV3IHRoZSBy
ZW5kZXJlciBjaGFuZ2VkIChhcyBpdCBkb2Vzbid0IGNhcmUuKQorICAgICAgICAqIFdlYlZpZXcv
V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBzZXRF
bGVtZW50Ol0pOiBObyBuZWVkIHRvIGFkZCBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIG1lZGlhIGVs
ZW1lbnQuCisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbFNjcmVl
bjpdKTogU2FtZSBhcyBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLCBidXQgbm90IGFzeW5j
aHJvbm91cy4KKyAgICAgICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgZXhpdEZ1bGxTY3Jl
ZW5dKTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtX
ZWJWaWV3IF9lbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50OldlYkNvcmU6Ol0pOiBGdWxsc2NyZWVu
IC0+IEZ1bGxTY3JlZW4uCisgICAgICAgICgtW1dlYlZpZXcgX2V4aXRGdWxsU2NyZWVuRm9yRWxl
bWVudDpXZWJDb3JlOjpdKTogRGl0dG8uCisKIDIwMTItMDItMDcgIEFudHRpIEtvaXZpc3RvICA8
YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMDY2ODEpOiBOdWxsIGNo
ZWNrIG1pc3NpbmcgaW4gW1dlYkZyYW1lKFdlYkludGVybmFsKSBfdHlwaW5nU3R5bGVdCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
bW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0K
aW5kZXggM2JhYzg3YjljNjhjMTFkOTlhYjg5MzAwMDJkNDUzNmNmZThjMDczYi4uYzBmMGM0ZWQ2
MTkxMDUyZmU4NzQ2ZDNjMTJhNjAyZGNkZjg1ZDA4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQpAQCAtOTgzLDggKzk4Myw2
IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpmdWxsU2NyZWVuUmVuZGVyZXJDaGFuZ2VkKFJlbmRl
ckJveCogcmVuZGVyZXIpCiAgICAgU0VMIHNlbGVjdG9yID0gQHNlbGVjdG9yKHdlYlZpZXc6ZnVs
bFNjcmVlblJlbmRlcmVyQ2hhbmdlZDopOwogICAgIGlmIChbW21fd2ViVmlldyBVSURlbGVnYXRl
XSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQogICAgICAgICBDYWxsVUlEZWxlZ2F0ZSht
X3dlYlZpZXcsIHNlbGVjdG9yLCAoaWQpcmVuZGVyZXIpOwotICAgIGVsc2UKLSAgICAgICAgW21f
d2ViVmlldyBfZnVsbFNjcmVlblJlbmRlcmVyQ2hhbmdlZDpyZW5kZXJlcl07CiB9CiAKIEBpbXBs
ZW1lbnRhdGlvbiBXZWJLaXRGdWxsU2NyZWVuTGlzdGVuZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAppbmRleCAwY2IyNWQ5NzQx
MzY4MTViMWY0MGFiZDA4YzZlNGYzNmUxYTM0MGRjLi5lYTAzYWY0YmFkZjkyNDUwODBkNWFiMWQ1
Mjc4ZjhlZTA1Y2JjMjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZ1bGxTY3JlZW5Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oCkBAIC0yNyw4ICsyNywxMCBAQAogCiAjaW1wb3J0IDx3
dGYvT3duUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CiAKIEBjbGFzcyBXZWJXaW5kb3dGYWRlQW5pbWF0aW9uOworQGNsYXNzIFdlYldpbmRv
d1NjYWxlQW5pbWF0aW9uOwogQGNsYXNzIFdlYlZpZXc7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgRGlzcGxheVNsZWVwRGlzYWJsZXI7CkBAIC00MCwxNiArNDIsMTggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogQGludGVyZmFjZSBXZWJGdWxsU2NyZWVuQ29udHJvbGxlciA6IE5TV2lu
ZG93Q29udHJvbGxlciB7CiBAcHJpdmF0ZQogICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBf
ZWxlbWVudDsKLSAgICBXZWJDb3JlOjpSZW5kZXJCb3gqIF9yZW5kZXJlcjsgLy8gKHNldCkKICAg
ICBXZWJWaWV3ICpfd2ViVmlldzsKLSAgICBOU1ZpZXcqIF9wbGFjZWhvbGRlclZpZXc7Ci0gICAg
UmVmUHRyPFdlYkNvcmU6OkV2ZW50TGlzdGVuZXI+IF9tZWRpYUV2ZW50TGlzdGVuZXI7IAorICAg
IFJldGFpblB0cjxOU1ZpZXc+IF93ZWJWaWV3UGxhY2Vob2xkZXI7CisgICAgUmV0YWluUHRyPFdl
YldpbmRvd1NjYWxlQW5pbWF0aW9uPiBfc2NhbGVBbmltYXRpb247CisgICAgUmV0YWluUHRyPFdl
YldpbmRvd0ZhZGVBbmltYXRpb24+IF9mYWRlQW5pbWF0aW9uOworICAgIFJldGFpblB0cjxOU1dp
bmRvdz4gX2JhY2tncm91bmRXaW5kb3c7CisgICAgTlNSZWN0IF9pbml0aWFsRnJhbWU7CisgICAg
TlNSZWN0IF9maW5hbEZyYW1lOwogCi0gICAgQk9PTCBfaXNBbmltYXRpbmc7Ci0gICAgQk9PTCBf
aXNGdWxsc2NyZWVuOwotICAgIEJPT0wgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbjsKLSAgICBPd25Q
dHI8V2ViQ29yZTo6RGlzcGxheVNsZWVwRGlzYWJsZXI+IF9kaXNwbGF5U2xlZXBEaXNhYmxlcjsK
LSAgICBDR1JlY3QgX2luaXRpYWxGcmFtZTsKKyAgICBCT09MIF9pc0VudGVyaW5nRnVsbFNjcmVl
bjsKKyAgICBCT09MIF9pc0V4aXRpbmdGdWxsU2NyZWVuOworICAgIEJPT0wgX2lzRnVsbFNjcmVl
bjsKKyAgICBCT09MIF9pc1BsYXlpbmc7CiB9CiAKIC0gKFdlYlZpZXcqKXdlYlZpZXc7CkBAIC01
OCwxMiArNjIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAtICh2b2lkKXNldEVsZW1lbnQ6KFBh
c3NSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4pZWxlbWVudDsKIC0gKFdlYkNvcmU6OkVsZW1lbnQq
KWVsZW1lbnQ7CiAKLS0gKHZvaWQpc2V0UmVuZGVyZXI6KFdlYkNvcmU6OlJlbmRlckJveCopcmVu
ZGVyZXI7Ci0tIChXZWJDb3JlOjpSZW5kZXJCb3gqKXJlbmRlcmVyOwotCi0tICh2b2lkKWVudGVy
RnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW47Ci0tICh2b2lkKWV4aXRGdWxsc2NyZWVuOwot
CistICh2b2lkKWVudGVyRnVsbFNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW47CistICh2b2lkKWV4
aXRGdWxsU2NyZWVuOworLSAodm9pZCljbG9zZTsKIEBlbmQKIAogI2VuZGlmIC8vIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RnVsbFNjcmVlbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1
bGxTY3JlZW5Db250cm9sbGVyLm1tCmluZGV4IGFhZTkyZTg0MTc3NWI0MzQwOWE4OTZkMjY5ZDBi
MzQ0YmFmN2NkNWIuLjVjYWFlMmY3NmRjZjZhNDc1M2Y1NTNkZmVhYzgwYjllZmVmMTFmMWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xs
ZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJv
bGxlci5tbQpAQCAtMzAsNzEgKzMwLDQ0IEBACiAjaW1wb3J0ICJXZWJOU1dpbmRvd0V4dHJhcy5o
IgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50
ZXJuYWwuaCIKLSNpbXBvcnQgPElPS2l0L3B3cl9tZ3QvSU9QTUxpYi5oPgotI2ltcG9ydCA8T1NT
ZXJ2aWNlcy9Qb3dlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9BbmltYXRpb25MaXN0Lmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0NTU1Byb3BlcnR5TmFtZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29sb3Iu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvRE9NRG9jdW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRE9N
RG9jdW1lbnRJbnRlcm5hbC5oPgotI2ltcG9ydCA8V2ViQ29yZS9ET01IVE1MRWxlbWVudC5oPgot
I2ltcG9ydCA8V2ViQ29yZS9ET01XaW5kb3cuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRGlzcGxheVNs
ZWVwRGlzYWJsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvRXZlbnRMaXN0ZW5lci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUTUxN
ZWRpYUVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0ludFJlY3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTm9kZUxpc3QuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyQmxvY2suaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllckJh
Y2tpbmcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KLSNpbXBv
cnQgPG9iamMvb2JqYy1ydW50aW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkZ1bGxTY3JlZW5X
aW5kb3cuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViV2luZG93QW5pbWF0aW9uLmg+CisjaW1wb3J0
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNp
bXBvcnQgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCi1zdGF0aWMgTlNTdHJpbmcqIGNvbnN0IGlzRW50
ZXJpbmdGdWxsc2NyZWVuS2V5ID0gQCJpc0VudGVyaW5nRnVsbHNjcmVlbiI7Ci0KIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1AaW50ZXJmYWNlIFdlYkZ1bGxzY3JlZW5XaW5kb3cgOiBOU1dp
bmRvdwotI2lmbmRlZiBCVUlMRElOR19PTl9MRU9QQVJECi08TlNBbmltYXRpb25EZWxlZ2F0ZT4K
LSNlbmRpZgorc3RhdGljIGNvbnN0IENGVGltZUludGVydmFsIGRlZmF1bHRBbmltYXRpb25EdXJh
dGlvbiA9IDAuNTsKKworc3RhdGljIEludFJlY3Qgc2NyZWVuUmVjdE9mQ29udGVudHMoRWxlbWVu
dCogZWxlbWVudCkKIHsKLSAgICBOU1ZpZXcqIF9hbmltYXRpb25WaWV3OwotICAgIAotICAgIENB
TGF5ZXIqIF9yZW5kZXJlckxheWVyOwotICAgIENBTGF5ZXIqIF9iYWNrZ3JvdW5kTGF5ZXI7Cisg
ICAgQVNTRVJUKGVsZW1lbnQpOworICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigpICYmIGVsZW1l
bnQtPnJlbmRlcmVyKCktPmhhc0xheWVyKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9z
aW5nTGF5ZXIoKS0+aXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgRmxvYXRRdWFkIGNvbnRlbnRz
Qm94ID0gc3RhdGljX2Nhc3Q8RmxvYXRSZWN0PihlbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3Np
bmdMYXllcigpLT5iYWNraW5nKCktPmNvbnRlbnRzQm94KCkpOworICAgICAgICBjb250ZW50c0Jv
eCA9IGVsZW1lbnQtPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoY29udGVudHNCb3gp
OworICAgICAgICByZXR1cm4gZWxlbWVudC0+cmVuZGVyZXIoKS0+dmlldygpLT5mcmFtZVZpZXco
KS0+Y29udGVudHNUb1NjcmVlbihjb250ZW50c0JveC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsK
KyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQtPnNjcmVlblJlY3QoKTsKIH0KLS0gKENBTGF5ZXIq
KXJlbmRlcmVyTGF5ZXI7Ci0tICh2b2lkKXNldFJlbmRlcmVyTGF5ZXI6KENBTGF5ZXIqKXJlbmRl
cmVyTGF5ZXI7Ci0tIChDQUxheWVyKiliYWNrZ3JvdW5kTGF5ZXI7Ci0tIChOU1ZpZXcqKWFuaW1h
dGlvblZpZXc7Ci1AZW5kCiAKLWNsYXNzIE1lZGlhRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVu
dExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUV2ZW50TGlz
dGVuZXI+IGNyZWF0ZShXZWJGdWxsU2NyZWVuQ29udHJvbGxlciogZGVsZWdhdGUpOwotICAgIHZp
cnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImKTsKLSAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50Kik7Ci0KLXBy
aXZhdGU6Ci0gICAgTWVkaWFFdmVudExpc3RlbmVyKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyKiBk
ZWxlZ2F0ZSk7IAotICAgIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyKiBkZWxlZ2F0ZTsKLX07Ci0K
LUBpbnRlcmZhY2UgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIoUHJpdmF0ZSkKLS0gKHZvaWQpX3Jl
cXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246KEJPT0wpYW5pbWF0aW9uOwotLSAodm9p
ZClfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsc2NyZWVuOwotLSAodm9pZClfdXBkYXRlUG93ZXJB
c3NlcnRpb25zOwotLSAoV2ViRnVsbHNjcmVlbldpbmRvdyAqKV9mdWxsc2NyZWVuV2luZG93Owor
QGludGVyZmFjZSBXZWJGdWxsU2NyZWVuQ29udHJvbGxlcihQcml2YXRlKTxOU0FuaW1hdGlvbkRl
bGVnYXRlPgorLSAodm9pZClfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsU2NyZWVuOworLSAodm9p
ZClfc3dhcFZpZXc6KE5TVmlldyopdmlldyB3aXRoOihOU1ZpZXcqKW90aGVyVmlldzsKIC0gKERv
Y3VtZW50KilfZG9jdW1lbnQ7Ci0tIChDRlRpbWVJbnRlcnZhbClfYW5pbWF0aW9uRHVyYXRpb247
Ci0tIChCT09MKV9pc0FueU1vdmllUGxheWluZzsKKy0gKHZvaWQpX3N0YXJ0RW50ZXJGdWxsU2Ny
ZWVuQW5pbWF0aW9uV2l0aER1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClkdXJhdGlvbjsKKy0gKHZv
aWQpX3N0YXJ0RXhpdEZ1bGxTY3JlZW5BbmltYXRpb25XaXRoRHVyYXRpb246KE5TVGltZUludGVy
dmFsKWR1cmF0aW9uOwogQGVuZAogCiBAaW50ZXJmYWNlIE5TV2luZG93KElzT25BY3RpdmVTcGFj
ZUFkZGl0aW9uRm9yVGlnZXJBbmRMZW9wYXJkKQpAQCAtMTA4LDIxICs4MSwyMSBAQCBwcml2YXRl
OgogLSAoaWQpaW5pdAogewogICAgIC8vIERvIG5vdCBkZWZlciB3aW5kb3cgY3JlYXRpb24sIHRv
IG1ha2Ugc3VyZSAtd2luZG93TnVtYmVyIGlzIGNyZWF0ZWQgKG5lZWRlZCBieSBXZWJXaW5kb3dT
Y2FsZUFuaW1hdGlvbikuCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbV2ViRnVsbHNjcmVlbldp
bmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpOU1plcm9SZWN0IHN0eWxlTWFzazpOU0Jv
cmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpO
T107CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtbV2ViRnVsbFNjcmVlbldpbmRvdyBhbGxvY10g
aW5pdFdpdGhDb250ZW50UmVjdDpOU1plcm9SZWN0IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5k
b3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107CiAgICAgc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aFdpbmRvdzp3aW5kb3ddOwogICAgIFt3aW5kb3cgcmVsZWFzZV07
CiAgICAgaWYgKCFzZWxmKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIFtzZWxmIHdpbmRvd0Rp
ZExvYWRdOwotICAgIF9tZWRpYUV2ZW50TGlzdGVuZXIgPSBNZWRpYUV2ZW50TGlzdGVuZXI6OmNy
ZWF0ZShzZWxmKTsKKwogICAgIHJldHVybiBzZWxmOwotICAgIAogfQogCiAtICh2b2lkKWRlYWxs
b2MKIHsKICAgICBbc2VsZiBzZXRXZWJWaWV3Om5pbF07Ci0gICAgW19wbGFjZWhvbGRlclZpZXcg
cmVsZWFzZV07CisKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNX
aXRoVGFyZ2V0OnNlbGZdOwogICAgIAogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CiAgICAgW3N1cGVyIGRlYWxsb2NdOwpAQCAt
MTMwLDcgKzEwMyw4IEBAIHByaXZhdGU6CiAKIC0gKHZvaWQpd2luZG93RGlkTG9hZAogewotICAg
IAorICAgIFtzdXBlciB3aW5kb3dEaWRMb2FkXTsKKwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoYXBw
bGljYXRpb25EaWRSZXNpZ25BY3RpdmU6KSBuYW1lOk5TQXBwbGljYXRpb25EaWRSZXNpZ25BY3Rp
dmVOb3RpZmljYXRpb24gb2JqZWN0Ok5TQXBwXTsKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGFwcGxp
Y2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyczopIG5hbWU6TlNBcHBsaWNhdGlvbkRpZENo
YW5nZVNjcmVlblBhcmFtZXRlcnNOb3RpZmljYXRpb24gb2JqZWN0Ok5TQXBwXTsKIH0KQEAgLTE1
NywxNTcgKzEzMSwyNSBAQCBwcml2YXRlOgogCiAtICh2b2lkKXNldEVsZW1lbnQ6KFBhc3NSZWZQ
dHI8RWxlbWVudD4pZWxlbWVudAogewotICAgIC8vIFdoZW4gYSBuZXcgRWxlbWVudCBpcyBzZXQg
YXMgdGhlIGN1cnJlbnQgZnVsbCBzY3JlZW4gZWxlbWVudCwgcmVnaXN0ZXIgZXZlbnQKLSAgICAv
LyBsaXN0ZW5lcnMgb24gdGhhdCBFbGVtZW50J3Mgd2luZG93LCBsaXN0ZW5pbmcgZm9yIGNoYW5n
ZXMgaW4gbWVkaWEgcGxheSBzdGF0ZXMuCi0gICAgLy8gV2Ugd2lsbCB1c2UgdGhlc2UgZXZlbnRz
IHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGRpc2FibGUgdGhlIHNjcmVlbnNhdmVyIGFuZCAKLSAg
ICAvLyBkaXNwbGF5IHNsZWVwIHRpbWVycyB3aGVuIHBsYXlpbmcgdmlkZW8gaW4gZnVsbCBzY3Jl
ZW4uIE1ha2Ugc3VyZSB0byB1bnJlZ2lzdGVyCi0gICAgLy8gdGhlIGV2ZW50cyBvbiB0aGUgb2xk
IGVsZW1lbnQncyB3aW5kb3csIGlmIG5lY2Vzc2FyeSwgYXMgd2VsbC4KLSAgICAKLSAgICBFdmVu
dE5hbWVzJiBldmVudE5hbWVzID0gV2ViQ29yZTo6ZXZlbnROYW1lcygpOwotICAgIAotICAgIGlm
IChfZWxlbWVudCkgewotICAgICAgICBET01XaW5kb3cqIHdpbmRvdyA9IF9lbGVtZW50LT5kb2N1
bWVudCgpLT5kb21XaW5kb3coKTsKLSAgICAgICAgaWYgKHdpbmRvdykgewotICAgICAgICAgICAg
d2luZG93LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMucGxheUV2ZW50LCAgX21lZGlh
RXZlbnRMaXN0ZW5lci5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICB3aW5kb3ctPnJlbW92ZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcy5wYXVzZUV2ZW50LCBfbWVkaWFFdmVudExpc3RlbmVyLmdl
dCgpLCB0cnVlKTsKLSAgICAgICAgICAgIHdpbmRvdy0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzLmVuZGVkRXZlbnQsIF9tZWRpYUV2ZW50TGlzdGVuZXIuZ2V0KCksIHRydWUpOwotICAg
ICAgICB9Ci0gICAgfQotICAgICAgICAKICAgICBfZWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgCi0g
ICAgaWYgKF9lbGVtZW50KSB7Ci0gICAgICAgIERPTVdpbmRvdyogd2luZG93ID0gX2VsZW1lbnQt
PmRvY3VtZW50KCktPmRvbVdpbmRvdygpOwotICAgICAgICBpZiAod2luZG93KSB7Ci0gICAgICAg
ICAgICB3aW5kb3ctPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcy5wbGF5RXZlbnQsICBfbWVk
aWFFdmVudExpc3RlbmVyLCB0cnVlKTsKLSAgICAgICAgICAgIHdpbmRvdy0+YWRkRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzLnBhdXNlRXZlbnQsIF9tZWRpYUV2ZW50TGlzdGVuZXIsIHRydWUpOwot
ICAgICAgICAgICAgd2luZG93LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMuZW5kZWRFdmVu
dCwgX21lZGlhRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAKLS0g
KFJlbmRlckJveCopcmVuZGVyZXIgCi17Ci0gICAgcmV0dXJuIF9yZW5kZXJlcjsKLX0KKyNwcmFn
bWEgbWFyayAtCisjcHJhZ21hIG1hcmsgTlNXaW5kb3dDb250cm9sbGVyIG92ZXJyaWRlcwogCi0t
ICh2b2lkKXNldFJlbmRlcmVyOihSZW5kZXJCb3gqKXJlbmRlcmVyCistICh2b2lkKWNhbmNlbE9w
ZXJhdGlvbjooaWQpc2VuZGVyCiB7Ci0gICAgX3JlbmRlcmVyID0gcmVuZGVyZXI7CisgICAgW3Nl
bGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihleGl0RnVsbFNjcmVlbikgd2l0aE9iamVjdDpu
aWwgYWZ0ZXJEZWxheTowXTsKIH0KIAogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBOb3Rp
ZmljYXRpb25zCiAKLS0gKHZvaWQpd2luZG93RGlkRXhpdEZ1bGxzY3JlZW46KEJPT0wpZmluaXNo
ZWQKLXsKLSAgICBpZiAoIV9pc0FuaW1hdGluZykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGlmIChfaXNGdWxsc2NyZWVuKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNEaXNhYmxl
U2NyZWVuVXBkYXRlcygpOwotICAgIEFTU0VSVChfZWxlbWVudCk7Ci0gICAgW3NlbGYgX2RvY3Vt
ZW50XS0+c2V0RnVsbFNjcmVlblJlbmRlcmVyQmFja2dyb3VuZENvbG9yKENvbG9yOjpibGFjayk7
Ci0gICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KF9lbGVtZW50LmdldCgpKTsKLSAgICBbc2VsZiBzZXRFbGVtZW50Om5pbF07Ci0KLSAgICBpZiAo
ZmluaXNoZWQpIHsKLSAgICAgICAgW3NlbGYgX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVl
bl07ICAgCi0gICAgICAgIFtzZWxmIF91cGRhdGVQb3dlckFzc2VydGlvbnNdOwotICAgICAgICAK
LSAgICAgICAgW1tfd2ViVmlldyB3aW5kb3ddIGRpc3BsYXldOwotICAgICAgICBbW3NlbGYgX2Z1
bGxzY3JlZW5XaW5kb3ddIHNldFJlbmRlcmVyTGF5ZXI6bmlsXTsKLSAgICAgICAgW1tzZWxmIHdp
bmRvd10gY2xvc2VdOwotICAgIH0KLQotICAgIE5TRW5hYmxlU2NyZWVuVXBkYXRlcygpOwotCi0g
ICAgX2lzQW5pbWF0aW5nID0gTk87Ci0gICAgW3NlbGYgYXV0b3JlbGVhc2VdOyAvLyBBc3NvY2lh
dGVkIC1yZXRhaW4gaXMgaW4gLWV4aXRGdWxsc2NyZWVuLgotfQotCi0tICh2b2lkKXdpbmRvd0Rp
ZEVudGVyRnVsbHNjcmVlbjooQk9PTClmaW5pc2hlZAotewotICAgIGlmICghX2lzQW5pbWF0aW5n
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKCFfaXNGdWxsc2NyZWVuKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgTlNEaXNhYmxlU2NyZWVuVXBkYXRlcygpOwotICAgIFtzZWxm
IF9kb2N1bWVudF0tPndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoX2VsZW1lbnQu
Z2V0KCkpOwotICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEZ1bGxTY3JlZW5SZW5kZXJlckJhY2tn
cm91bmRDb2xvcihDb2xvcjo6YmxhY2spOwotICAgIAotICAgIGlmIChmaW5pc2hlZCkgewotICAg
ICAgICBbc2VsZiBfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsc2NyZWVuXTsKLSAgICAgICAgW3Nl
bGYgX3VwZGF0ZVBvd2VyQXNzZXJ0aW9uc107Ci0gICAgICAgIFtOU0N1cnNvciBzZXRIaWRkZW5V
bnRpbE1vdXNlTW92ZXM6WUVTXTsKLSAgICAKLSAgICAgICAgLy8gTW92ZSB0aGUgd2ViVmlldyBp
bnRvIG91ciBmdWxsc2NyZWVuIFdpbmRvdwotICAgICAgICBpZiAoIV9wbGFjZWhvbGRlclZpZXcp
Ci0gICAgICAgICAgICBfcGxhY2Vob2xkZXJWaWV3ID0gW1tOU1ZpZXcgYWxsb2NdIGluaXRdOwot
Ci0gICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiB3ZWJWaWV3XTsKLSAgICAgICAgTlNX
aW5kb3cgKndlYldpbmRvdyA9IFt3ZWJWaWV3IHdpbmRvd107Ci0gICAgICAgIE5TUmVzcG9uZGVy
ICp3ZWJXaW5kb3dGaXJzdFJlc3BvbmRlciA9IFt3ZWJXaW5kb3cgZmlyc3RSZXNwb25kZXJdOwot
Ci0gICAgICAgIC8vIERvIG5vdCBzd2FwIHRoZSBwbGFjZWhvbGRlciBpbnRvIHBsYWNlIGlmIGFs
cmVhZHkgaXMgaW4gYSB3aW5kb3csCi0gICAgICAgIC8vIGFzc3VtaW5nIHRoZSBwbGFjZWhvbGRl
cidzIHdpbmRvdyB3aWxsIGFsd2F5cyBiZSB0aGUgd2ViVmlldydzIAotICAgICAgICAvLyBvcmln
aW5hbCB3aW5kb3cuCi0gICAgICAgIGlmICghW19wbGFjZWhvbGRlclZpZXcgd2luZG93XSkgewot
ICAgICAgICAgICAgW19wbGFjZWhvbGRlclZpZXcgc2V0RnJhbWU6W3dlYlZpZXcgZnJhbWVdXTsg
ICAgICAgIAotICAgICAgICAgICAgW19wbGFjZWhvbGRlclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFz
azpbd2ViVmlldyBhdXRvcmVzaXppbmdNYXNrXV07Ci0gICAgICAgICAgICBbX3BsYWNlaG9sZGVy
VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICAgICAgICAgIFtbd2ViVmlldyBzdXBlcnZp
ZXddIHJlcGxhY2VTdWJ2aWV3OndlYlZpZXcgd2l0aDpfcGxhY2Vob2xkZXJWaWV3XTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgW1tbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XSBhZGRTdWJ2
aWV3OndlYlZpZXddOwotICAgICAgICAgICAgW1tzZWxmIHdpbmRvd10gbWFrZVJlc3BvbmRlcjp3
ZWJXaW5kb3dGaXJzdFJlc3BvbmRlciBmaXJzdFJlc3BvbmRlcklmRGVzY2VuZGFudE9mVmlldzp3
ZWJWaWV3XTsKLSAgICAgICAgICAgIFt3ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3
V2lkdGhTaXphYmxlfE5TVmlld0hlaWdodFNpemFibGVdOwotICAgICAgICAgICAgW3dlYlZpZXcg
c2V0RnJhbWU6WyhOU1ZpZXcgKilbW3NlbGYgd2luZG93XSBjb250ZW50Vmlld10gYm91bmRzXV07
Ci0gICAgICAgIH0KLQotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICAgICAgLy8gSW4gTGlvbiwgTlNXaW5k
b3cgd2lsbCBhbmltYXRlIGludG8gYW5kIG91dCBvZiBvcmRlck91dCBvcGVyYXRpb25zLiBTdXBw
cmVzcyB0aGF0Ci0gICAgICAgIC8vIGJlaGF2aW9yIGhlcmUsIG1ha2luZyBzdXJlIHRvIHJlc2V0
IHRoZSBhbmltYXRpb24gYmVoYXZpb3IgYWZ0ZXJ3YXJkLgotICAgICAgICBOU1dpbmRvd0FuaW1h
dGlvbkJlaGF2aW9yIGFuaW1hdGlvbkJlaGF2aW9yID0gW3dlYldpbmRvdyBhbmltYXRpb25CZWhh
dmlvcl07Ci0gICAgICAgIFt3ZWJXaW5kb3cgc2V0QW5pbWF0aW9uQmVoYXZpb3I6TlNXaW5kb3dB
bmltYXRpb25CZWhhdmlvck5vbmVdOwotI2VuZGlmCi0gICAgICAgIFt3ZWJXaW5kb3cgb3JkZXJP
dXQ6c2VsZl07Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAgICAgICBbd2ViV2luZG93IHNldEFuaW1hdGlv
bkJlaGF2aW9yOmFuaW1hdGlvbkJlaGF2aW9yXTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAg
V2ViRnVsbHNjcmVlbldpbmRvdyogd2luZG93ID0gW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddOwot
ICAgICAgICBbd2luZG93IHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciBibGFja0NvbG9yXV07
Ci0gICAgICAgIFt3aW5kb3cgc2V0T3BhcXVlOllFU107Ci0KLSAgICAgICAgW0NBVHJhbnNhY3Rp
b24gYmVnaW5dOwotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVt
YmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6a0NBVHJhbnNhY3Rpb25EaXNhYmxlQWN0aW9uc107Ci0g
ICAgICAgIFtbW3dpbmRvdyBhbmltYXRpb25WaWV3XSBsYXllcl0gc2V0T3BhY2l0eTowXTsKLSAg
ICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLSAgICB9Ci0gICAgTlNFbmFibGVTY3JlZW5V
cGRhdGVzKCk7Ci0KLSAgICBfaXNBbmltYXRpbmcgPSBOTzsKLX0KLQotLSAodm9pZClhbmltYXRp
b25EaWRTdG9wOihDQUFuaW1hdGlvbiAqKWFuaW0gZmluaXNoZWQ6KEJPT0wpZmluaXNoZWQKLXsK
LSAgICBCT09MIGlzRW50ZXJpbmdGdWxsc2NyZWVuQW5pbWF0aW9uID0gW1thbmltIHZhbHVlRm9y
S2V5OmlzRW50ZXJpbmdGdWxsc2NyZWVuS2V5XSBib29sVmFsdWVdOwotICAgIAotICAgIGlmICgh
aXNFbnRlcmluZ0Z1bGxzY3JlZW5BbmltYXRpb24pCi0gICAgICAgIFtzZWxmIHdpbmRvd0RpZEV4
aXRGdWxsc2NyZWVuOmZpbmlzaGVkXTsKLSAgICBlbHNlCi0gICAgICAgIFtzZWxmIHdpbmRvd0Rp
ZEVudGVyRnVsbHNjcmVlbjpmaW5pc2hlZF07Ci19Ci0KIC0gKHZvaWQpYXBwbGljYXRpb25EaWRS
ZXNpZ25BY3RpdmU6KE5TTm90aWZpY2F0aW9uKilub3RpZmljYXRpb24KIHsgICAKICAgICAvLyBD
aGVjayB0byBzZWUgaWYgdGhlIGZ1bGxzY3JlZW5XaW5kb3cgaXMgb24gdGhlIGFjdGl2ZSBzcGFj
ZTsgdGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUKICAgICAvLyBvbiAxMC42IGFuZCBsYXRlciwg
c28gZGVmYXVsdCB0byBZRVMgaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGU6Ci0gICAg
TlNXaW5kb3cqIGZ1bGxzY3JlZW5XaW5kb3cgPSBbc2VsZiBfZnVsbHNjcmVlbldpbmRvd107Cisg
ICAgTlNXaW5kb3cqIGZ1bGxzY3JlZW5XaW5kb3cgPSBbc2VsZiB3aW5kb3ddOwogICAgIEJPT0wg
aXNPbkFjdGl2ZVNwYWNlID0gKFtmdWxsc2NyZWVuV2luZG93IHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IoaXNPbkFjdGl2ZVNwYWNlKV0gPyBbZnVsbHNjcmVlbldpbmRvdyBpc09uQWN0aXZl
U3BhY2VdIDogWUVTKTsKIAogICAgIC8vIFJlcGxpY2F0ZSB0aGUgUXVpY2tUaW1lIFBsYXllciAo
WCkgYmVoYXZpb3Igd2hlbiBsb3NpbmcgYWN0aXZlIGFwcGxpY2F0aW9uIHN0YXR1czoKQEAgLTMx
NSw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIC8vIHNpbmdsZSBzY3JlZW4gaXMgYXZhaWxhYmxl
LikgIElzIHRoZSBmdWxsc2NyZWVuIHNjcmVlbiBvbiB0aGUgY3VycmVudCBzcGFjZT8gSUZGIHNv
LCAKICAgICAvLyB0aGVuIGV4aXQgZnVsbHNjcmVlbiBtb2RlLiAKICAgICBpZiAoW2Z1bGxzY3Jl
ZW5XaW5kb3cgc2NyZWVuXSA9PSBbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF0g
JiYgaXNPbkFjdGl2ZVNwYWNlKQotICAgICAgICAgW3NlbGYgX3JlcXVlc3RFeGl0RnVsbHNjcmVl
bldpdGhBbmltYXRpb246Tk9dOworICAgICAgICAgW3NlbGYgY2FuY2VsT3BlcmF0aW9uOnNlbGZd
OwogfQogCiAtICh2b2lkKWFwcGxpY2F0aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyczooTlNO
b3RpZmljYXRpb24qKW5vdGlmaWNhdGlvbgpAQCAtMzI0LDMwNiArMTY2LDIwOSBAQCBwcml2YXRl
OgogICAgIC8vIHRoZSBEb2NrJ3Mgc2l6ZSBvciBsb2NhdGlvbiwgb3IgdGhleSBtYXkgaGF2ZSBj
aGFuZ2VkIHRoZSBmdWxsc2NyZWVuIHNjcmVlbidzIGRpbWVuc2lvbnMuIAogICAgIC8vIFVwZGF0
ZSBvdXIgcHJlc2VudGF0aW9uIHBhcmFtZXRlcnMsIGFuZCBlbnN1cmUgdGhhdCB0aGUgZnVsbCBz
Y3JlZW4gd2luZG93IG9jY3VwaWVzIHRoZSAKICAgICAvLyBlbnRpcmUgc2NyZWVuOgotICAgIFtz
ZWxmIF91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW5dOworICAgIFtzZWxmIF91cGRhdGVN
ZW51QW5kRG9ja0ZvckZ1bGxTY3JlZW5dOwogICAgIE5TV2luZG93KiB3aW5kb3cgPSBbc2VsZiB3
aW5kb3ddOwotICAgIFt3aW5kb3cgc2V0RnJhbWU6W1t3aW5kb3cgc2NyZWVuXSBmcmFtZV0gZGlz
cGxheTpZRVNdOworICAgIE5TUmVjdCBzY3JlZW5GcmFtZSA9IFtbd2luZG93IHNjcmVlbl0gZnJh
bWVdOworICAgIFt3aW5kb3cgc2V0RnJhbWU6c2NyZWVuRnJhbWUgZGlzcGxheTpZRVNdOworICAg
IFtfYmFja2dyb3VuZFdpbmRvdy5nZXQoKSBzZXRGcmFtZTpzY3JlZW5GcmFtZSBkaXNwbGF5OllF
U107CiB9CiAKICNwcmFnbWEgbWFyayAtCiAjcHJhZ21hIG1hcmsgRXhwb3NlZCBJbnRlcmZhY2UK
IAotLSAodm9pZCllbnRlckZ1bGxzY3JlZW46KE5TU2NyZWVuICopc2NyZWVuCistICh2b2lkKWVu
dGVyRnVsbFNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW4KIHsKLSAgICAvLyBEaXNhYmxlIGFuaW1h
dGlvbiBpZiB3ZSBhcmUgYWxyZWFkeSBpbiBmdWxsLXNjcmVlbiBtb2RlLgotICAgIEJPT0wgc2hv
dWxkQW5pbWF0ZSA9ICFfaXNGdWxsc2NyZWVuOwotICAgIAotICAgIGlmIChfaXNBbmltYXRpbmcp
IHsKLSAgICAgICAgLy8gVGhlIENBQW5pbWF0aW9uIGRlbGVnYXRlIGZ1bmN0aW9ucyB3aWxsIG9u
bHkgYmUgY2FsbGVkIHRoZQotICAgICAgICAvLyBuZXh0IHRyaXAgdGhyb3VnaCB0aGUgcnVuLWxv
b3AsIHNvIG1hbnVhbGx5IGNhbGwgdGhlIGRlbGVnYXRlCi0gICAgICAgIC8vIGZ1bmN0aW9uIGhl
cmUsIGxldHRpbmcgaXQga25vdyB0aGUgYW5pbWF0aW9uIGRpZCBub3QgY29tcGxldGU6Ci0gICAg
ICAgIFtzZWxmIHdpbmRvd0RpZEV4aXRGdWxsc2NyZWVuOk5PXTsKLSAgICAgICAgQVNTRVJUKCFf
aXNBbmltYXRpbmcpOwotICAgIH0KLSAgICBfaXNGdWxsc2NyZWVuID0gWUVTOwotICAgIF9pc0Fu
aW1hdGluZyA9IFlFUzsKLSAgICAKLSAgICAvLyBzZXRFbGVtZW50OiBtdXN0IGJlIGNhbGxlZCB3
aXRoIGEgbm9uLW5pbCB2YWx1ZSBiZWZvcmUgY2FsbGluZyBlbnRlckZ1bGxzY3JlZW46LgotICAg
IEFTU0VSVChfZWxlbWVudCk7CisgICAgaWYgKF9pc0Z1bGxTY3JlZW4pCisgICAgICAgIHJldHVy
bjsKKyAgICBfaXNGdWxsU2NyZWVuID0gWUVTOwogICAgIAotICAgIE5TRGlzYWJsZVNjcmVlblVw
ZGF0ZXMoKTsKKyAgICBbc2VsZiBfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsU2NyZWVuXTsgICAK
ICAgICAKICAgICBpZiAoIXNjcmVlbikKICAgICAgICAgc2NyZWVuID0gW05TU2NyZWVuIG1haW5T
Y3JlZW5dOwogICAgIE5TUmVjdCBzY3JlZW5GcmFtZSA9IFtzY3JlZW4gZnJhbWVdOwogICAgIAot
ICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBbc2VsZiB3ZWJWaWV3XTsKLSAgICBOU1JlY3Qgd2ViVmll
d0ZyYW1lID0gW3dlYlZpZXcgY29udmVydFJlY3RUb0Jhc2U6W3dlYlZpZXcgZnJhbWVdXTsKLSAg
ICB3ZWJWaWV3RnJhbWUub3JpZ2luID0gW1t3ZWJWaWV3IHdpbmRvd10gY29udmVydEJhc2VUb1Nj
cmVlbjp3ZWJWaWV3RnJhbWUub3JpZ2luXTsKKyAgICBOU1JlY3Qgd2ViVmlld0ZyYW1lID0gW1tf
d2ViVmlldyB3aW5kb3ddIGNvbnZlcnRSZWN0VG9TY3JlZW46CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbX3dlYlZpZXcgY29udmVydFJlY3Q6W193ZWJWaWV3IGZyYW1lXSB0b1ZpZXc6bmls
XV07CiAgICAgCi0gICAgTlNSZWN0IGVsZW1lbnRGcmFtZSA9IF9lbGVtZW50LT5zY3JlZW5SZWN0
KCk7CisgICAgLy8gRmxpcCBjb29yZGluYXRlIHN5c3RlbToKKyAgICB3ZWJWaWV3RnJhbWUub3Jp
Z2luLnkgPSBOU01heFkoW1tbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXSBmcmFt
ZV0pIC0gQ0dSZWN0R2V0TWF4WSh3ZWJWaWV3RnJhbWUpOwogICAgIAotICAgIC8vIEluIHRoZSBj
YXNlIG9mIGEgbXVsdGktbW9uaXRvciBzZXR1cCB3aGVyZSB0aGUgd2ViVmlldyBzdHJhZGRsZXMg
dHdvCi0gICAgLy8gbW9uaXRvcnMsIHdlIG11c3QgY3JlYXRlIGEgd2luZG93IGxhcmdlIGVub3Vn
aCB0byBjb250YWluIHRoZSBkZXN0aW5hdGlvbgotICAgIC8vIGZyYW1lIGFuZCB0aGUgaW5pdGlh
bCBmcmFtZS4KLSAgICBOU1JlY3Qgd2luZG93RnJhbWUgPSBOU1VuaW9uUmVjdChzY3JlZW5GcmFt
ZSwgZWxlbWVudEZyYW1lKTsKLSAgICBbW3NlbGYgd2luZG93XSBzZXRGcmFtZTp3aW5kb3dGcmFt
ZSBkaXNwbGF5OllFU107CisgICAgQ0dXaW5kb3dJRCB3aW5kb3dJRCA9IFtbX3dlYlZpZXcgd2lu
ZG93XSB3aW5kb3dOdW1iZXJdOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiB3ZWJWaWV3Q29u
dGVudHMoQWRvcHRDRiwgQ0dXaW5kb3dMaXN0Q3JlYXRlSW1hZ2UoTlNSZWN0VG9DR1JlY3Qod2Vi
Vmlld0ZyYW1lKSwga0NHV2luZG93TGlzdE9wdGlvbkluY2x1ZGluZ1dpbmRvdywgd2luZG93SUQs
IGtDR1dpbmRvd0ltYWdlU2hvdWxkQmVPcGFxdWUpKTsKICAgICAKLSAgICAvLyBJbiBhIHByZXZp
b3VzIGluY2FybmF0aW9uLCB0aGUgTlNXaW5kb3cgYXR0YWNoZWQgdG8gdGhpcyBjb250cm9sbGVy
IG1heSBoYXZlCi0gICAgLy8gYmVlbiBvbiBhIGRpZmZlcmVudCBzY3JlZW4uIFRlbXBvcmFyaWx5
IGNoYW5nZSB0aGUgY29sbGVjdGlvbkJlaGF2aW9yIG9mIHRoZSB3aW5kb3c6Ci0gICAgTlNXaW5k
b3dDb2xsZWN0aW9uQmVoYXZpb3IgYmVoYXZpb3IgPSBbW3NlbGYgd2luZG93XSBjb2xsZWN0aW9u
QmVoYXZpb3JdOwotICAgIFtbc2VsZiB3aW5kb3ddIHNldENvbGxlY3Rpb25CZWhhdmlvcjpOU1dp
bmRvd0NvbGxlY3Rpb25CZWhhdmlvckNhbkpvaW5BbGxTcGFjZXNdOwotICAgIFtbc2VsZiB3aW5k
b3ddIG1ha2VLZXlBbmRPcmRlckZyb250OnNlbGZdOwotICAgIFtbc2VsZiB3aW5kb3ddIHNldENv
bGxlY3Rpb25CZWhhdmlvcjpiZWhhdmlvcl07Ci0gICAgCi0gICAgTlNWaWV3KiBhbmltYXRpb25W
aWV3ID0gW1tzZWxmIF9mdWxsc2NyZWVuV2luZG93XSBhbmltYXRpb25WaWV3XTsKLSAgICAKLSAg
ICBOU1JlY3QgYmFja2dyb3VuZEJvdW5kcyA9IHtbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVu
VG9CYXNlOnNjcmVlbkZyYW1lLm9yaWdpbl0sIHNjcmVlbkZyYW1lLnNpemV9OwotICAgIGJhY2tn
cm91bmRCb3VuZHMgPSBbYW5pbWF0aW9uVmlldyBjb252ZXJ0UmVjdEZyb21CYXNlOmJhY2tncm91
bmRCb3VuZHNdOwotICAgIC8vIEZsaXAgdGhlIGJhY2tncm91bmQgbGF5ZXIncyBjb29yZGluYXRl
IHN5c3RlbS4KLSAgICBiYWNrZ3JvdW5kQm91bmRzLm9yaWdpbi55ID0gd2luZG93RnJhbWUuc2l6
ZS5oZWlnaHQgLSBOU01heFkoYmFja2dyb3VuZEJvdW5kcyk7Ci0gICAgCi0gICAgLy8gU2V0IG91
ciBmdWxsc2NyZWVuIGVsZW1lbnQncyBpbml0aWFsIGZyYW1lLCBhbmQgZmxpcCB0aGUgY29vcmRp
bmF0ZSBzeXN0ZW1zIGZyb20KLSAgICAvLyBzY3JlZW4gY29vcmRpbmF0ZXMgKGJvdHRvbS9sZWZ0
KSB0byBsYXllciBjb29yZGluYXRlcyAodG9wL2xlZnQpOgotICAgIF9pbml0aWFsRnJhbWUgPSBO
U1JlY3RUb0NHUmVjdChOU0ludGVyc2VjdGlvblJlY3QoZWxlbWVudEZyYW1lLCB3ZWJWaWV3RnJh
bWUpKTsKLSAgICBfaW5pdGlhbEZyYW1lLm9yaWdpbi55ID0gc2NyZWVuRnJhbWUuc2l6ZS5oZWln
aHQgLSBDR1JlY3RHZXRNYXhZKF9pbml0aWFsRnJhbWUpOwotICAgIAotICAgIC8vIEluZm9ybSB0
aGUgZG9jdW1lbnQgdGhhdCB3ZSB3aWxsIGJlZ2luIGVudGVyaW5nIGZ1bGwgc2NyZWVuLiBUaGlz
IHdpbGwgY2hhbmdlCi0gICAgLy8gcHNldWRvLWNsYXNzZXMgb24gdGhlIGZ1bGxzY3JlZW4gZWxl
bWVudCBhbmQgdGhlIGRvY3VtZW50IGVsZW1lbnQuCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
W3NlbGYgX2RvY3VtZW50XTsKLSAgICBkb2N1bWVudC0+d2Via2l0V2lsbEVudGVyRnVsbFNjcmVl
bkZvckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOwotICAgIAotICAgIC8vIENoZWNrIHRvIHNlZSBp
ZiB0aGUgZnVsbHNjcmVlbiByZW5kZXJlciBpcyBjb21wb3NpdGVkLiBJZiBub3QsIGFjY2VsZXJh
dGVkIGdyYXBoaWNzIAotICAgIC8vIG1heSBiZSBkaXNhYmxlZC4gSW4gdGhpcyBjYXNlLCBkbyBu
b3QgYXR0ZW1wdCB0byBhbmltYXRlIHRoZSBjb250ZW50cyBpbnRvIHBsYWNlOyAKLSAgICAvLyBt
ZXJlbHkgc25hcCB0byB0aGUgZmluYWwgcG9zaXRpb246Ci0gICAgaWYgKCFzaG91bGRBbmltYXRl
IHx8ICFfcmVuZGVyZXIgfHwgIV9yZW5kZXJlci0+bGF5ZXIoKS0+aXNDb21wb3NpdGVkKCkpIHsK
LSAgICAgICAgW3NlbGYgd2luZG93RGlkRW50ZXJGdWxsc2NyZWVuOllFU107Ci0gICAgICAgIE5T
RW5hYmxlU2NyZWVuVXBkYXRlcygpOwotICAgICAgICByZXR1cm47Ci0gICAgfSAgICAKKyAgICBO
U0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7CisgICAgW1tzZWxmIHdpbmRvd10gc2V0QXV0b2Rpc3Bs
YXk6Tk9dOwogICAgIAotICAgIC8vIFNldCB1cCB0aGUgZmluYWwgc3R5bGUgb2YgdGhlIEZ1bGxT
Y3JlZW4gcmVuZGVyIGJsb2NrLiBTZXQgYW4gYWJzb2x1dGUKLSAgICAvLyB3aWR0aCBhbmQgaGVp
Z2h0IGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBzY3JlZW4sIGFuZCBhbmNob3IgdGhlIGxheWVy
Ci0gICAgLy8gYXQgdGhlIHRvcCwgbGVmdCBhdCAoMCwwKS4gVGhlIFJlbmRlckZ1bGxTY3JlZW4g
c3R5bGUgaXMgYWxyZWFkeSBzZXQgCi0gICAgLy8gdG8gcG9zaXRpb246Zml4ZWQuCi0gICAgW3Nl
bGYgX2RvY3VtZW50XS0+c2V0RnVsbFNjcmVlblJlbmRlcmVyU2l6ZShJbnRTaXplKHNjcmVlbkZy
YW1lLnNpemUpKTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRGdWxsU2NyZWVuUmVuZGVyZXJC
YWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBOU1Jlc3BvbmRlciAqd2Vi
V2luZG93Rmlyc3RSZXNwb25kZXIgPSBbW193ZWJWaWV3IHdpbmRvd10gZmlyc3RSZXNwb25kZXJd
OworICAgIFtbc2VsZiB3aW5kb3ddIHNldEZyYW1lOnNjcmVlbkZyYW1lIGRpc3BsYXk6Tk9dOwor
CisgICAgX2luaXRpYWxGcmFtZSA9IHNjcmVlblJlY3RPZkNvbnRlbnRzKF9lbGVtZW50LmdldCgp
KTsKKworICAgIC8vIFN3YXAgdGhlIHdlYlZpZXcgcGxhY2Vob2xkZXIgaW50byBwbGFjZS4KKyAg
ICBpZiAoIV93ZWJWaWV3UGxhY2Vob2xkZXIpIHsKKyAgICAgICAgX3dlYlZpZXdQbGFjZWhvbGRl
ci5hZG9wdE5TKFtbTlNJbWFnZVZpZXcgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW193ZWJWaWV3
UGxhY2Vob2xkZXIuZ2V0KCkgc2V0TGF5ZXI6W0NBTGF5ZXIgbGF5ZXJdXTsKKyAgICAgICAgW193
ZWJWaWV3UGxhY2Vob2xkZXIuZ2V0KCkgc2V0V2FudHNMYXllcjpZRVNdOworICAgIH0KKyAgICBb
W193ZWJWaWV3UGxhY2Vob2xkZXIuZ2V0KCkgbGF5ZXJdIHNldENvbnRlbnRzOihpZCl3ZWJWaWV3
Q29udGVudHMuZ2V0KCldOworICAgIFtzZWxmIF9zd2FwVmlldzpfd2ViVmlldyB3aXRoOl93ZWJW
aWV3UGxhY2Vob2xkZXIuZ2V0KCldOwogICAgIAotICAgIC8vIENhdXNlIHRoZSBkb2N1bWVudCB0
byBsYXlvdXQsIHRodXMgY2FsY3VsYXRpbmcgYSBuZXcgZnVsbHNjcmVlbiBlbGVtZW50IHNpemU6
Ci0gICAgW3NlbGYgX2RvY3VtZW50XS0+dXBkYXRlTGF5b3V0KCk7CisgICAgLy8gVGhlbiBpbnNl
cnQgdGhlIFdlYlZpZXcgaW50byB0aGUgZnVsbCBzY3JlZW4gd2luZG93CisgICAgTlNWaWV3KiBj
b250ZW50VmlldyA9IFtbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XTsKKyAgICBbY29udGVudFZp
ZXcgYWRkU3Vidmlldzpfd2ViVmlldyBwb3NpdGlvbmVkOk5TV2luZG93QmVsb3cgcmVsYXRpdmVU
bzpuaWxdOworICAgIFtfd2ViVmlldyBzZXRGcmFtZTpbY29udGVudFZpZXcgYm91bmRzXV07CiAg
ICAgCi0gICAgLy8gRklYTUU6IHRyeSB0byB1c2UgdGhlIGZ1bGxzY3JlZW4gZWxlbWVudCdzIGNh
bGN1bGF0ZWQgeCwgeSwgd2lkdGgsIGFuZCBoZWlnaHQgaW5zdGVhZCBvZiB0aGUKLSAgICAvLyBy
ZW5kZXJCb3ggZnVuY3Rpb25zOgotICAgIFJlbmRlckJveCogY2hpbGRSZW5kZXJlciA9IF9yZW5k
ZXJlci0+Zmlyc3RDaGlsZEJveCgpOwotICAgIENHUmVjdCBkZXN0aW5hdGlvbkZyYW1lID0gQ0dS
ZWN0TWFrZShjaGlsZFJlbmRlcmVyLT54KCksIGNoaWxkUmVuZGVyZXItPnkoKSwgY2hpbGRSZW5k
ZXJlci0+d2lkdGgoKSwgY2hpbGRSZW5kZXJlci0+aGVpZ2h0KCkpOyAgICAKLSAgICAKLSAgICAv
LyBTb21lIHByb3BlcnRpZXMgaGF2ZW4ndCBwcm9wb2dhdGVkIGZyb20gdGhlIEdyYXBoaWNzTGF5
ZXIgdG8gdGhlIENBTGF5ZXIgeWV0LiBTbwotICAgIC8vIHRlbGwgdGhlIHJlbmRlcmVyJ3MgbGF5
ZXIgdG8gc3luYyBpdCdzIGNvbXBvc2l0aW5nIHN0YXRlOgotICAgIEdyYXBoaWNzTGF5ZXIqIHJl
bmRlcmVyR3JhcGhpY3MgPSBfcmVuZGVyZXItPmxheWVyKCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NM
YXllcigpOwotICAgIHJlbmRlcmVyR3JhcGhpY3MtPnN5bmNDb21wb3NpdGluZ1N0YXRlKGRlc3Rp
bmF0aW9uRnJhbWUpOyAgICAKLQotICAgIENBTGF5ZXIqIHJlbmRlcmVyTGF5ZXIgPSByZW5kZXJl
ckdyYXBoaWNzLT5wbGF0Zm9ybUxheWVyKCk7Ci0gICAgW1tzZWxmIF9mdWxsc2NyZWVuV2luZG93
XSBzZXRSZW5kZXJlckxheWVyOnJlbmRlcmVyTGF5ZXJdOyAgICAKLSAgICAKLSAgICBDRlRpbWVJ
bnRlcnZhbCBkdXJhdGlvbiA9IFtzZWxmIF9hbmltYXRpb25EdXJhdGlvbl07Ci0KLSAgICAvLyBD
cmVhdGUgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdGhhdCB3aWxsIHRyYW5zZm9ybSB0aGUgcmVu
ZGVyZXIgbGF5ZXIgc3VjaCB0aGF0IAotICAgIC8vIHRoZSBmdWxsc2NyZWVuIGVsZW1lbnQgYXBw
ZWFycyB0byBtb3ZlIGZyb20gaXRzIHN0YXJ0aW5nIHBvc2l0aW9uIGFuZCBzaXplIHRvIGl0cwot
ICAgIC8vIGZpbmFsIG9uZS4gUGVyZm9ybSB0aGUgdHJhbnNmb3JtYXRpb24gaW4gdHdvIHN0ZXBz
LCB1c2luZyB0aGUgQ0FMYXllcidzIG1hdHJpeCAKLSAgICAvLyBtYXRoIHRvIGNhbGN1bGF0ZSB0
aGUgZWZmZWN0cyBvZiBlYWNoIHN0ZXA6Ci0gICAgLy8gMS4gQXBwbHkgYSBzY2FsZSB0cmFuZm9y
bSB0byBzaHJpbmsgdGhlIGFwcGFyZW50IHNpemUgb2YgdGhlIGxheWVyIHRvIHRoZSBvcmlnaW5h
bAotICAgIC8vICAgIGVsZW1lbnQgc2NyZWVuIHNpemUuCi0gICAgLy8gMi4gQXBwbHkgYSB0cmFu
c2xhdGlvbiB0cmFuc2Zvcm0gdG8gbW92ZSB0aGUgc2hydW5rIGxheWVyIGludG8gdGhlIHNhbWUg
c2NyZWVuIHBvc2l0aW9uCi0gICAgLy8gICAgYXMgdGhlIG9yaWdpbmFsIGVsZW1lbnQuCi0gICAg
Q0FUcmFuc2Zvcm0zRCBzaHJpbmtUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKF9p
bml0aWFsRnJhbWUuc2l6ZS53aWR0aCAvIGRlc3RpbmF0aW9uRnJhbWUuc2l6ZS53aWR0aCwgX2lu
aXRpYWxGcmFtZS5zaXplLmhlaWdodCAvIGRlc3RpbmF0aW9uRnJhbWUuc2l6ZS5oZWlnaHQsIDEp
OwotICAgIFtyZW5kZXJlckxheWVyIHNldFRyYW5zZm9ybTpzaHJpbmtUcmFuc2Zvcm1dOwotICAg
IENHUmVjdCBzaHJ1bmtEZXN0aW5hdGlvbkZyYW1lID0gW3JlbmRlcmVyTGF5ZXIgY29udmVydFJl
Y3Q6ZGVzdGluYXRpb25GcmFtZSB0b0xheWVyOlthbmltYXRpb25WaWV3IGxheWVyXV07Ci0gICAg
Q0FUcmFuc2Zvcm0zRCBtb3ZlVHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VUcmFuc2xhdGlv
bihfaW5pdGlhbEZyYW1lLm9yaWdpbi54IC0gc2hydW5rRGVzdGluYXRpb25GcmFtZS5vcmlnaW4u
eCwgX2luaXRpYWxGcmFtZS5vcmlnaW4ueSAtIHNocnVua0Rlc3RpbmF0aW9uRnJhbWUub3JpZ2lu
LnksIDApOwotICAgIENBVHJhbnNmb3JtM0QgZmluYWxUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNE
Q29uY2F0KHNocmlua1RyYW5zZm9ybSwgbW92ZVRyYW5zZm9ybSk7Ci0gICAgW3JlbmRlcmVyTGF5
ZXIgc2V0VHJhbnNmb3JtOmZpbmFsVHJhbnNmb3JtXTsKLQotICAgIENBTGF5ZXIqIGJhY2tncm91
bmRMYXllciA9IFtbc2VsZiBfZnVsbHNjcmVlbldpbmRvd10gYmFja2dyb3VuZExheWVyXTsKLQot
ICAgIC8vIFN0YXJ0IHRoZSBvcGFjaXR5IGFuaW1hdGlvbi4gV2UgY2FuIHVzZSBpbXBsaWNpdCBh
bmltYXRpb25zIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBjYXJlIHdoZW4KLSAgICAvLyB0aGUgYW5p
bWF0aW9uIGZpbmlzaGVzLgotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFu
c2FjdGlvbiBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpkdXJhdGlvbl0gZm9y
S2V5OmtDQVRyYW5zYWN0aW9uQW5pbWF0aW9uRHVyYXRpb25dOwotICAgIFtiYWNrZ3JvdW5kTGF5
ZXIgc2V0T3BhY2l0eToxXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworICAgIFtbc2Vs
ZiB3aW5kb3ddIG1ha2VSZXNwb25kZXI6d2ViV2luZG93Rmlyc3RSZXNwb25kZXIgZmlyc3RSZXNw
b25kZXJJZkRlc2NlbmRhbnRPZlZpZXc6X3dlYlZpZXddOwogICAgIAotICAgIC8vIFVzZSBhIENB
QmFzaWNBbmltYXRpb24gaGVyZSBmb3IgdGhlIHpvb20gZWZmZWN0LiBXZSB3YW50IHRvIGJlIG5v
dGlmaWVkIHRoYXQgdGhlIGFuaW1hdGlvbiBoYXMgCi0gICAgLy8gY29tcGxldGVkIGJ5IHdheSBv
ZiB0aGUgQ0FBbmltYXRpb24gZGVsZWdhdGUuCi0gICAgQ0FCYXNpY0FuaW1hdGlvbiogem9vbUFu
aW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAidHJhbnNm
b3JtIl07Ci0gICAgW3pvb21BbmltYXRpb24gc2V0RnJvbVZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0
aENBVHJhbnNmb3JtM0Q6ZmluYWxUcmFuc2Zvcm1dXTsKLSAgICBbem9vbUFuaW1hdGlvbiBzZXRU
b1ZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6Q0FUcmFuc2Zvcm0zRElkZW50
aXR5XV07Ci0gICAgW3pvb21BbmltYXRpb24gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW3pvb21B
bmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25dOwotICAgIFt6b29tQW5pbWF0aW9uIHNldFRp
bWluZ0Z1bmN0aW9uOltDQU1lZGlhVGltaW5nRnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTprQ0FN
ZWRpYVRpbWluZ0Z1bmN0aW9uRWFzZUluRWFzZU91dF1dOwotICAgIFt6b29tQW5pbWF0aW9uIHNl
dEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOwotICAgIFt6b29tQW5pbWF0aW9uIHNldFZh
bHVlOihpZClrQ0ZCb29sZWFuVHJ1ZSBmb3JLZXk6aXNFbnRlcmluZ0Z1bGxzY3JlZW5LZXldOwot
ICAgIAotICAgIC8vIERpc2FibGUgaW1wbGljaXQgYW5pbWF0aW9ucyBhbmQgc2V0IHRoZSBsYXll
cidzIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0byBpdHMgZmluYWwgc3RhdGUuCi0gICAgW0NBVHJh
bnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldFZhbHVlOltOU051bWJlciBu
dW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTprQ0FUcmFuc2FjdGlvbkRpc2FibGVBY3Rpb25zXTsK
LSAgICBbcmVuZGVyZXJMYXllciBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRElkZW50aXR5XTsK
LSAgICBbcmVuZGVyZXJMYXllciBhZGRBbmltYXRpb246em9vbUFuaW1hdGlvbiBmb3JLZXk6QCJ6
b29tIl07Ci0gICAgW2JhY2tncm91bmRMYXllciBzZXRGcmFtZTpOU1JlY3RUb0NHUmVjdChiYWNr
Z3JvdW5kQm91bmRzKV07Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICBbc2VsZiBf
ZG9jdW1lbnRdLT53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5n
ZXQoKSk7CisgICAgW3NlbGYgX2RvY3VtZW50XS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbih0cnVl
KTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT51cGRhdGVMYXlvdXQoKTsKKworICAgIF9maW5hbEZy
YW1lID0gc2NyZWVuUmVjdE9mQ29udGVudHMoX2VsZW1lbnQuZ2V0KCkpOwogICAgIAotICAgIE5T
RW5hYmxlU2NyZWVuVXBkYXRlcygpOworICAgIFtzZWxmIF91cGRhdGVNZW51QW5kRG9ja0ZvckZ1
bGxTY3JlZW5dOyAgIAorICAgIAorICAgIFtzZWxmIF9zdGFydEVudGVyRnVsbFNjcmVlbkFuaW1h
dGlvbldpdGhEdXJhdGlvbjpkZWZhdWx0QW5pbWF0aW9uRHVyYXRpb25dOworCisgICAgX2lzRW50
ZXJpbmdGdWxsU2NyZWVuID0gdHJ1ZTsKIH0KIAotLSAodm9pZClleGl0RnVsbHNjcmVlbgorLSAo
dm9pZClmaW5pc2hlZEVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbjooYm9vbCljb21wbGV0ZWQKIHsK
LSAgICBpZiAoIV9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsgICAgCi0gICAgICAKLSAg
ICBDQVRyYW5zZm9ybTNEIHN0YXJ0VHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRElkZW50aXR5Owot
ICAgIGlmIChfaXNBbmltYXRpbmcpIHsKLSAgICAgICAgaWYgKF9yZW5kZXJlciAmJiBfcmVuZGVy
ZXItPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICBDQUxheWVyKiByZW5k
ZXJlckxheWVyID0gX3JlbmRlcmVyLT5sYXllcigpLT5iYWNraW5nKCktPmdyYXBoaWNzTGF5ZXIo
KS0+cGxhdGZvcm1MYXllcigpOwotICAgICAgICAgICAgc3RhcnRUcmFuc2Zvcm0gPSBbW3JlbmRl
cmVyTGF5ZXIgcHJlc2VudGF0aW9uTGF5ZXJdIHRyYW5zZm9ybV07Ci0gICAgICAgIH0KKyAgICBp
ZiAoIV9pc0VudGVyaW5nRnVsbFNjcmVlbikKKyAgICAgICAgcmV0dXJuOworICAgIF9pc0VudGVy
aW5nRnVsbFNjcmVlbiA9IE5POworICAgIAorICAgIGlmIChjb21wbGV0ZWQpIHsKKyAgICAgICAg
TlNEaXNhYmxlU2NyZWVuVXBkYXRlcygpOworICAgICAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRB
bmltYXRpbmdGdWxsU2NyZWVuKGZhbHNlKTsKKyAgICAgICAgW3NlbGYgX2RvY3VtZW50XS0+d2Vi
a2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7CiAgICAgICAg
IAotICAgICAgICAvLyBUaGUgQ0FBbmltYXRpb24gZGVsZWdhdGUgZnVuY3Rpb25zIHdpbGwgb25s
eSBiZSBjYWxsZWQgdGhlCi0gICAgICAgIC8vIG5leHQgdHJpcCB0aHJvdWdoIHRoZSBydW4tbG9v
cCwgc28gbWFudWFsbHkgY2FsbCB0aGUgZGVsZWdhdGUKLSAgICAgICAgLy8gZnVuY3Rpb24gaGVy
ZSwgbGV0dGluZyBpdCBrbm93IHRoZSBhbmltYXRpb24gZGlkIG5vdCBjb21wbGV0ZToKLSAgICAg
ICAgW3NlbGYgd2luZG93RGlkRW50ZXJGdWxsc2NyZWVuOk5PXTsKLSAgICAgICAgQVNTRVJUKCFf
aXNBbmltYXRpbmcpOwotICAgIH0KLSAgICBfaXNGdWxsc2NyZWVuID0gTk87Ci0gICAgX2lzQW5p
bWF0aW5nID0gWUVTOworICAgICAgICBOU1JlY3Qgd2luZG93Qm91bmRzID0gW1tzZWxmIHdpbmRv
d10gZnJhbWVdOworICAgICAgICB3aW5kb3dCb3VuZHMub3JpZ2luID0gTlNaZXJvUG9pbnQ7Cisg
ICAgICAgIFdLV2luZG93U2V0Q2xpcFJlY3QoW3NlbGYgd2luZG93XSwgd2luZG93Qm91bmRzKTsK
KyAgICAgICAgCisgICAgICAgIE5TV2luZG93ICp3ZWJXaW5kb3cgPSBbX3dlYlZpZXdQbGFjZWhv
bGRlci5nZXQoKSB3aW5kb3ddOworICAgICAgICBbd2ViV2luZG93IG9yZGVyT3V0OnNlbGZdOwor
ICAgICAgICAKKyAgICAgICAgW19mYWRlQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOwor
ICAgICAgICBbX2ZhZGVBbmltYXRpb24uZ2V0KCkgc2V0V2luZG93Om5pbF07CisgICAgICAgIF9m
YWRlQW5pbWF0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIFtfYmFja2dyb3VuZFdp
bmRvdy5nZXQoKSBvcmRlck91dDpzZWxmXTsKKyAgICAgICAgW19iYWNrZ3JvdW5kV2luZG93Lmdl
dCgpIHNldEZyYW1lOk5TWmVyb1JlY3QgZGlzcGxheTpZRVNdOworICAgICAgICBOU0VuYWJsZVNj
cmVlblVwZGF0ZXMoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgW19zY2FsZUFuaW1hdGlvbi5nZXQo
KSBzdG9wQW5pbWF0aW9uXTsKK30KKworLSAodm9pZClleGl0RnVsbFNjcmVlbgoreworICAgIGlm
ICghX2lzRnVsbFNjcmVlbikKKyAgICAgICAgcmV0dXJuOworICAgIF9pc0Z1bGxTY3JlZW4gPSBO
TzsKICAgICAKKyAgICAvLyBTY3JlZW4gdXBkYXRlcyB0byBiZSByZS1lbmFibGVkIGluIGJlZ2Fu
RXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOmZpbmFsRnJhbWU6CiAgICAgTlNEaXNhYmxl
U2NyZWVuVXBkYXRlcygpOworICAgIFtbc2VsZiB3aW5kb3ddIHNldEF1dG9kaXNwbGF5Ok5PXTsK
KworICAgIF9maW5hbEZyYW1lID0gc2NyZWVuUmVjdE9mQ29udGVudHMoX2VsZW1lbnQuZ2V0KCkp
OworCisgICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxl
bWVudChfZWxlbWVudC5nZXQoKSk7CisgICAgW3NlbGYgX2RvY3VtZW50XS0+c2V0QW5pbWF0aW5n
RnVsbFNjcmVlbih0cnVlKTsKKworICAgIGlmIChfaXNFbnRlcmluZ0Z1bGxTY3JlZW4pCisgICAg
ICAgIFtzZWxmIGZpbmlzaGVkRW50ZXJGdWxsU2NyZWVuQW5pbWF0aW9uOk5PXTsKICAgICAKKyAg
ICBbc2VsZiBfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsU2NyZWVuXTsKICAgICAKLSAgICAvLyBU
aGUgZnVsbHNjcmVlbiBhbmltYXRpb24gbWF5IGhhdmUgYmVlbiBjYW5jZWxsZWQgYmVmb3JlIHRo
ZSAKLSAgICAvLyB3ZWJWaWV3IHdhcyBtb3ZlZCB0byB0aGUgZnVsbHNjcmVlbiB3aW5kb3cuIENo
ZWNrIHRvIHNlZQotICAgIC8vIGlmIHRoZSBfcGxhY2Vob2xkZXJWaWV3IGV4aXN0cyBhbmQgaXMg
aW4gYSB3aW5kb3cgYmVmb3JlCi0gICAgLy8gYXR0ZW1wdGluZyB0byBzd2FwIHRoZSB3ZWJWaWV3
IGJhY2sgdG8gaXQncyBvcmlnaW5hbCB0cmVlOgotICAgIGlmIChfcGxhY2Vob2xkZXJWaWV3ICYm
IFtfcGxhY2Vob2xkZXJWaWV3IHdpbmRvd10pIHsKLSAgICAgICAgLy8gTW92ZSB0aGUgd2ViVmll
dyBiYWNrIHRvIGl0cyBvd24gbmF0aXZlIHdpbmRvdzoKLSAgICAgICAgV2ViVmlldyogd2ViVmll
dyA9IFtzZWxmIHdlYlZpZXddOwotICAgICAgICBOU1Jlc3BvbmRlciAqZnVsbFNjcmVlbldpbmRv
d0ZpcnN0UmVzcG9uZGVyID0gW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25kZXJdOwotICAgICAg
ICBbd2ViVmlldyBzZXRGcmFtZTpbX3BsYWNlaG9sZGVyVmlldyBmcmFtZV1dOwotICAgICAgICBb
d2ViVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOltfcGxhY2Vob2xkZXJWaWV3IGF1dG9yZXNpemlu
Z01hc2tdXTsKLSAgICAgICAgW3dlYlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAg
IFtbX3BsYWNlaG9sZGVyVmlldyBzdXBlcnZpZXddIHJlcGxhY2VTdWJ2aWV3Ol9wbGFjZWhvbGRl
clZpZXcgd2l0aDp3ZWJWaWV3XTsKLSAgICAgICAgW1t3ZWJWaWV3IHdpbmRvd10gbWFrZVJlc3Bv
bmRlcjpmdWxsU2NyZWVuV2luZG93Rmlyc3RSZXNwb25kZXIgZmlyc3RSZXNwb25kZXJJZkRlc2Nl
bmRhbnRPZlZpZXc6d2ViVmlld107Ci0gICAgICAgIAotICAgICAgICBOU1dpbmRvdyAqd2ViV2lu
ZG93ID0gW1tzZWxmIHdlYlZpZXddIHdpbmRvd107Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAgICAgICAv
LyBJbiBMaW9uLCBOU1dpbmRvdyB3aWxsIGFuaW1hdGUgaW50byBhbmQgb3V0IG9mIG9yZGVyT3V0
IG9wZXJhdGlvbnMuIFN1cHByZXNzIHRoYXQKLSAgICAgICAgLy8gYmVoYXZpb3IgaGVyZSwgbWFr
aW5nIHN1cmUgdG8gcmVzZXQgdGhlIGFuaW1hdGlvbiBiZWhhdmlvciBhZnRlcndhcmQuCi0gICAg
ICAgIE5TV2luZG93QW5pbWF0aW9uQmVoYXZpb3IgYW5pbWF0aW9uQmVoYXZpb3IgPSBbd2ViV2lu
ZG93IGFuaW1hdGlvbkJlaGF2aW9yXTsKLSAgICAgICAgW3dlYldpbmRvdyBzZXRBbmltYXRpb25C
ZWhhdmlvcjpOU1dpbmRvd0FuaW1hdGlvbkJlaGF2aW9yTm9uZV07Ci0jZW5kaWYKLSAgICAgICAg
Ly8gVGhlIHVzZXIgbWF5IGhhdmUgbW92ZWQgdGhlIGZ1bGxzY3JlZW4gd2luZG93IGluIFNwYWNl
cywgc28gdGVtcG9yYXJpbHkgY2hhbmdlIAotICAgICAgICAvLyB0aGUgY29sbGVjdGlvbkJlaGF2
aW9yIG9mIHRoZSBmdWxsc2NyZWVuIHdpbmRvdzoKKyAgICBOU1dpbmRvdyogd2ViV2luZG93ID0g
W193ZWJWaWV3UGxhY2Vob2xkZXIuZ2V0KCkgd2luZG93XTsKKyAgICAvLyBJZiB0aGUgdXNlciBo
YXMgbW92ZWQgdGhlIGZ1bGxTY3JlZW4gd2luZG93IGludG8gYSBuZXcgc3BhY2UsIHRlbXBvcmFy
aWx5IGNoYW5nZQorICAgIC8vIHRoZSBjb2xsZWN0aW9uQmVoYXZpb3Igb2YgdGhlIHdlYlZpZXcn
cyB3aW5kb3cgc28gdGhhdCBpdCBpcyBwdWxsZWQgaW50byB0aGUgYWN0aXZlIHNwYWNlOgorICAg
IGlmICghW3dlYldpbmRvdyBpc09uQWN0aXZlU3BhY2VdKSB7CiAgICAgICAgIE5TV2luZG93Q29s
bGVjdGlvbkJlaGF2aW9yIGJlaGF2aW9yID0gW3dlYldpbmRvdyBjb2xsZWN0aW9uQmVoYXZpb3Jd
OwogICAgICAgICBbd2ViV2luZG93IHNldENvbGxlY3Rpb25CZWhhdmlvcjpOU1dpbmRvd0NvbGxl
Y3Rpb25CZWhhdmlvckNhbkpvaW5BbGxTcGFjZXNdOwogICAgICAgICBbd2ViV2luZG93IG9yZGVy
V2luZG93Ok5TV2luZG93QmVsb3cgcmVsYXRpdmVUbzpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1i
ZXJdXTsKICAgICAgICAgW3dlYldpbmRvdyBzZXRDb2xsZWN0aW9uQmVoYXZpb3I6YmVoYXZpb3Jd
OwotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkKLSAgICAgICAgW3dlYldpbmRvdyBzZXRBbmltYXRpb25CZWhhdmlv
cjphbmltYXRpb25CZWhhdmlvcl07Ci0jZW5kaWYKLQotICAgICAgICAvLyBCZWNhdXNlIHRoZSBh
bmltYXRpb24gdmlldyBpcyBsYXllci1ob3N0ZWQsIG1ha2Ugc3VyZSB0byAKLSAgICAgICAgLy8g
ZGlzYWJsZSBhbmltYXRpb25zIHdoZW4gY2hhbmdpbmcgdGhlIGxheWVyJ3Mgb3BhY2l0eS4gT3Ro
ZXItCi0gICAgICAgIC8vIHdpc2UsIHRoZSBjb250ZW50IHdpbGwgYXBwZWFyIHRvIGZhZGUgaW50
byB2aWV3LgotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgICAgIFtDQVRyYW5z
YWN0aW9uIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTprQ0FU
cmFuc2FjdGlvbkRpc2FibGVBY3Rpb25zXTsKLSAgICAgICAgV2ViRnVsbHNjcmVlbldpbmRvdyog
d2luZG93ID0gW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddOwotICAgICAgICBbW1t3aW5kb3cgYW5p
bWF0aW9uVmlld10gbGF5ZXJdIHNldE9wYWNpdHk6MV07Ci0gICAgICAgIFt3aW5kb3cgc2V0QmFj
a2dyb3VuZENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKLSAgICAgICAgW3dpbmRvdyBzZXRP
cGFxdWU6Tk9dOwotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotICAgIH0KLQotICAg
IE5TVmlldyogYW5pbWF0aW9uVmlldyA9IFtbc2VsZiBfZnVsbHNjcmVlbldpbmRvd10gYW5pbWF0
aW9uVmlld107Ci0gICAgQ0dSZWN0IGxheWVyRW5kRnJhbWUgPSBOU1JlY3RUb0NHUmVjdChbYW5p
bWF0aW9uVmlldyBjb252ZXJ0UmVjdDpOU1JlY3RGcm9tQ0dSZWN0KF9pbml0aWFsRnJhbWUpIGZy
b21WaWV3Om5pbF0pOworICAgIH0gZWxzZQorICAgICAgICBbd2ViV2luZG93IG9yZGVyV2luZG93
Ok5TV2luZG93QmVsb3cgcmVsYXRpdmVUbzpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdXTsK
KyAgICAKKyAgICBbc2VsZiBfc3RhcnRFeGl0RnVsbFNjcmVlbkFuaW1hdGlvbldpdGhEdXJhdGlv
bjpkZWZhdWx0QW5pbWF0aW9uRHVyYXRpb25dOworICAgIF9pc0V4aXRpbmdGdWxsU2NyZWVuID0g
WUVTOyAgICAKK30KIAotICAgIC8vIFRoZSBfcmVuZGVyZXIgbWlnaHQgYmUgTlVMTCBkdWUgdG8g
aXRzIGFuY2VzdG9yIGJlaW5nIHJlbW92ZWQ6Ci0gICAgQ0dSZWN0IGxheWVyU3RhcnRGcmFtZSA9
IENHUmVjdFplcm87Ci0gICAgaWYgKF9yZW5kZXJlcikgewotICAgICAgICBSZW5kZXJCb3gqIGNo
aWxkUmVuZGVyZXIgPSBfcmVuZGVyZXItPmZpcnN0Q2hpbGRCb3goKTsKLSAgICAgICAgbGF5ZXJT
dGFydEZyYW1lID0gQ0dSZWN0TWFrZShjaGlsZFJlbmRlcmVyLT54KCksIGNoaWxkUmVuZGVyZXIt
PnkoKSwgY2hpbGRSZW5kZXJlci0+d2lkdGgoKSwgY2hpbGRSZW5kZXJlci0+aGVpZ2h0KCkpOwot
ICAgIH0KKy0gKHZvaWQpZmluaXNoZWRFeGl0RnVsbFNjcmVlbkFuaW1hdGlvbjooYm9vbCljb21w
bGV0ZWQKK3sKKyAgICBpZiAoIV9pc0V4aXRpbmdGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47
CisgICAgX2lzRXhpdGluZ0Z1bGxTY3JlZW4gPSBOTzsKICAgICAKLSAgICBbc2VsZiBfZG9jdW1l
bnRdLT53ZWJraXRXaWxsRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsK
LSAgICBbc2VsZiBfZG9jdW1lbnRdLT51cGRhdGVMYXlvdXQoKTsKKyAgICBbc2VsZiBfdXBkYXRl
TWVudUFuZERvY2tGb3JGdWxsU2NyZWVuXTsKICAgICAKLSAgICAvLyBXZSBoYXZlIHRvIHJldGFp
biBvdXJzZWx2ZXMgYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFsaXZlIGZvciB0aGUgZW5kIG9mIHRo
ZSBhbmltYXRpb24uCi0gICAgLy8gSWYgb3VyIG93bmVyIHJlbGVhc2VzIHVzIHdlIGNvdWxkIGNy
YXNoIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLgotICAgIC8vIEJhbGFuY2VkIGluIHdpbmRvd0Rp
ZEV4aXRGdWxsc2NyZWVuCi0gICAgW3NlbGYgcmV0YWluXTsKKyAgICBOU0Rpc2FibGVTY3JlZW5V
cGRhdGVzKCk7CiAgICAgCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmdWxsc2NyZWVuIHJl
bmRlcmVyIGlzIGNvbXBvc2l0ZWQuIElmIG5vdCwgYWNjZWxlcmF0ZWQgZ3JhcGhpY3MgCi0gICAg
Ly8gbWF5IGJlIGRpc2FibGVkLiBJbiB0aGlzIGNhc2UsIGRvIG5vdCBhdHRlbXB0IHRvIGFuaW1h
dGUgdGhlIGNvbnRlbnRzIGludG8gcGxhY2U7IAotICAgIC8vIG1lcmVseSBzbmFwIHRvIHRoZSBm
aW5hbCBwb3NpdGlvbjoKLSAgICBpZiAoIV9yZW5kZXJlciB8fCAhX3JlbmRlcmVyLT5sYXllcigp
LT5pc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICBbc2VsZiB3aW5kb3dEaWRFeGl0RnVsbHNjcmVl
bjpZRVNdOwotICAgICAgICBOU0VuYWJsZVNjcmVlblVwZGF0ZXMoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAgICAgCi0gICAgR3JhcGhpY3NMYXllciogcmVuZGVyZXJHcmFwaGljcyA9
IF9yZW5kZXJlci0+bGF5ZXIoKS0+YmFja2luZygpLT5ncmFwaGljc0xheWVyKCk7CisgICAgW3Nl
bGYgX2RvY3VtZW50XS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7CisgICAgW3NlbGYg
X2RvY3VtZW50XS0+d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50Lmdl
dCgpKTsKICAgICAKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRGdWxsU2NyZWVuUmVuZGVyZXJC
YWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKLQotICAgIHJlbmRlcmVyR3JhcGhp
Y3MtPnN5bmNDb21wb3NpdGluZ1N0YXRlKGxheWVyRW5kRnJhbWUpOyAgICAKLQotICAgIENBTGF5
ZXIqIHJlbmRlcmVyTGF5ZXIgPSByZW5kZXJlckdyYXBoaWNzLT5wbGF0Zm9ybUxheWVyKCk7Ci0g
ICAgW1tzZWxmIF9mdWxsc2NyZWVuV2luZG93XSBzZXRSZW5kZXJlckxheWVyOnJlbmRlcmVyTGF5
ZXJdOyAgICAKKyAgICBOU1Jlc3BvbmRlciAqZmlyc3RSZXNwb25kZXIgPSBbW3NlbGYgd2luZG93
XSBmaXJzdFJlc3BvbmRlcl07CisgICAgW3NlbGYgX3N3YXBWaWV3Ol93ZWJWaWV3UGxhY2Vob2xk
ZXIuZ2V0KCkgd2l0aDpfd2ViVmlld107CisgICAgW1tfd2ViVmlldyB3aW5kb3ddIG1ha2VSZXNw
b25kZXI6Zmlyc3RSZXNwb25kZXIgZmlyc3RSZXNwb25kZXJJZkRlc2NlbmRhbnRPZlZpZXc6X3dl
YlZpZXddOwogICAgIAotICAgIC8vIENyZWF0ZSBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0aGF0
IHdpbGwgdHJhbnNmb3JtIHRoZSByZW5kZXJlciBsYXllciBzdWNoIHRoYXQgCi0gICAgLy8gdGhl
IGZ1bGxzY3JlZW4gZWxlbWVudCBhcHBlYXJzIHRvIG1vdmUgZnJvbSB0aGUgZnVsbCBzY3JlZW4g
dG8gaXRzIG9yaWdpbmFsIHBvc2l0aW9uIAotICAgIC8vIGFuZCBzaXplLiBQZXJmb3JtIHRoZSB0
cmFuc2Zvcm1hdGlvbiBpbiB0d28gc3RlcHMsIHVzaW5nIHRoZSBDQUxheWVyJ3MgbWF0cml4IAot
ICAgIC8vIG1hdGggdG8gY2FsY3VsYXRlIHRoZSBlZmZlY3RzIG9mIGVhY2ggc3RlcDoKLSAgICAv
LyAxLiBBcHBseSBhIHNjYWxlIHRyYW5mb3JtIHRvIHNocmluayB0aGUgYXBwYXJlbnQgc2l6ZSBv
ZiB0aGUgbGF5ZXIgdG8gdGhlIG9yaWdpbmFsCi0gICAgLy8gICAgZWxlbWVudCBzY3JlZW4gc2l6
ZS4KLSAgICAvLyAyLiBBcHBseSBhIHRyYW5zbGF0aW9uIHRyYW5zZm9ybSB0byBtb3ZlIHRoZSBz
aHJ1bmsgbGF5ZXIgaW50byB0aGUgc2FtZSBzY3JlZW4gcG9zaXRpb24KLSAgICAvLyAgICBhcyB0
aGUgb3JpZ2luYWwgZWxlbWVudC4KLSAgICBDQVRyYW5zZm9ybTNEIHNocmlua1RyYW5zZm9ybSA9
IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUobGF5ZXJFbmRGcmFtZS5zaXplLndpZHRoIC8gbGF5ZXJT
dGFydEZyYW1lLnNpemUud2lkdGgsIGxheWVyRW5kRnJhbWUuc2l6ZS5oZWlnaHQgLyBsYXllclN0
YXJ0RnJhbWUuc2l6ZS5oZWlnaHQsIDEpOwotICAgIFtyZW5kZXJlckxheWVyIHNldFRyYW5zZm9y
bTpzaHJpbmtUcmFuc2Zvcm1dOwotICAgIENHUmVjdCBzaHJ1bmtEZXN0aW5hdGlvbkZyYW1lID0g
W3JlbmRlcmVyTGF5ZXIgY29udmVydFJlY3Q6bGF5ZXJTdGFydEZyYW1lIHRvTGF5ZXI6W2FuaW1h
dGlvblZpZXcgbGF5ZXJdXTsKLSAgICBDQVRyYW5zZm9ybTNEIG1vdmVUcmFuc2Zvcm0gPSBDQVRy
YW5zZm9ybTNETWFrZVRyYW5zbGF0aW9uKGxheWVyRW5kRnJhbWUub3JpZ2luLnggLSBzaHJ1bmtE
ZXN0aW5hdGlvbkZyYW1lLm9yaWdpbi54LCBsYXllckVuZEZyYW1lLm9yaWdpbi55IC0gc2hydW5r
RGVzdGluYXRpb25GcmFtZS5vcmlnaW4ueSwgMCk7Ci0gICAgQ0FUcmFuc2Zvcm0zRCBmaW5hbFRy
YW5zZm9ybSA9IENBVHJhbnNmb3JtM0RDb25jYXQoc2hyaW5rVHJhbnNmb3JtLCBtb3ZlVHJhbnNm
b3JtKTsKLSAgICBbcmVuZGVyZXJMYXllciBzZXRUcmFuc2Zvcm06ZmluYWxUcmFuc2Zvcm1dOwot
Ci0gICAgQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24gPSBbc2VsZiBfYW5pbWF0aW9uRHVyYXRpb25d
OwotCi0gICAgQ0FMYXllciogYmFja2dyb3VuZExheWVyID0gW1tzZWxmIF9mdWxsc2NyZWVuV2lu
ZG93XSBiYWNrZ3JvdW5kTGF5ZXJdOwotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aERvdWJsZTpkdXJhdGlv
bl0gZm9yS2V5OmtDQVRyYW5zYWN0aW9uQW5pbWF0aW9uRHVyYXRpb25dOwotICAgIFtiYWNrZ3Jv
dW5kTGF5ZXIgc2V0T3BhY2l0eTowXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworICAg
IE5TUmVjdCB3aW5kb3dCb3VuZHMgPSBbW3NlbGYgd2luZG93XSBmcmFtZV07CisgICAgd2luZG93
Qm91bmRzLm9yaWdpbiA9IE5TWmVyb1BvaW50OworICAgIFdLV2luZG93U2V0Q2xpcFJlY3QoW3Nl
bGYgd2luZG93XSwgd2luZG93Qm91bmRzKTsKICAgICAKLSAgICBDQUJhc2ljQW5pbWF0aW9uKiB6
b29tQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJ0
cmFuc2Zvcm0iXTsKLSAgICBbem9vbUFuaW1hdGlvbiBzZXRGcm9tVmFsdWU6W05TVmFsdWUgdmFs
dWVXaXRoQ0FUcmFuc2Zvcm0zRDpzdGFydFRyYW5zZm9ybV1dOwotICAgIFt6b29tQW5pbWF0aW9u
IHNldFRvVmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpmaW5hbFRyYW5zZm9y
bV1dOwotICAgIFt6b29tQW5pbWF0aW9uIHNldERlbGVnYXRlOnNlbGZdOwotICAgIFt6b29tQW5p
bWF0aW9uIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKLSAgICBbem9vbUFuaW1hdGlvbiBzZXRUaW1p
bmdGdW5jdGlvbjpbQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uIGZ1bmN0aW9uV2l0aE5hbWU6a0NBTWVk
aWFUaW1pbmdGdW5jdGlvbkVhc2VJbkVhc2VPdXRdXTsKLSAgICBbem9vbUFuaW1hdGlvbiBzZXRG
aWxsTW9kZTprQ0FGaWxsTW9kZUJvdGhdOwotICAgIFt6b29tQW5pbWF0aW9uIHNldFJlbW92ZWRP
bkNvbXBsZXRpb246Tk9dOwotICAgIFt6b29tQW5pbWF0aW9uIHNldFZhbHVlOihpZClrQ0ZCb29s
ZWFuRmFsc2UgZm9yS2V5OmlzRW50ZXJpbmdGdWxsc2NyZWVuS2V5XTsKKyAgICBbW3NlbGYgd2lu
ZG93XSBvcmRlck91dDpzZWxmXTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRGcmFtZTpOU1plcm9S
ZWN0IGRpc3BsYXk6WUVTXTsKICAgICAKLSAgICBbcmVuZGVyZXJMYXllciBhZGRBbmltYXRpb246
em9vbUFuaW1hdGlvbiBmb3JLZXk6QCJ6b29tIl07CisgICAgW19mYWRlQW5pbWF0aW9uLmdldCgp
IHN0b3BBbmltYXRpb25dOworICAgIFtfZmFkZUFuaW1hdGlvbi5nZXQoKSBzZXRXaW5kb3c6bmls
XTsKKyAgICBfZmFkZUFuaW1hdGlvbiA9IG51bGxwdHI7CisgICAgCisgICAgW19iYWNrZ3JvdW5k
V2luZG93LmdldCgpIG9yZGVyT3V0OnNlbGZdOworICAgIFtfYmFja2dyb3VuZFdpbmRvdy5nZXQo
KSBzZXRGcmFtZTpOU1plcm9SZWN0IGRpc3BsYXk6WUVTXTsKICAgICAKICAgICBOU0VuYWJsZVNj
cmVlblVwZGF0ZXMoKTsKIH0KIAorLSAodm9pZCljbG9zZQoreworICAgIC8vIFdlIGFyZSBiZWlu
ZyBhc2tlZCB0byBjbG9zZSByYXBpZGx5LCBtb3N0IGxpa2VseSBiZWNhdXNlIHRoZSBwYWdlIAor
ICAgIC8vIGhhcyBjbG9zZWQgb3IgdGhlIHdlYiBwcm9jZXNzIGhhcyBjcmFzaGVkLiAgSnVzdCB3
YWxrIHRocm91Z2ggb3VyCisgICAgLy8gbm9ybWFsIGV4aXQgZnVsbCBzY3JlZW4gc2VxdWVuY2Us
IGJ1dCBkb24ndCB3YWl0IHRvIGJlIGNhbGxlZCBiYWNrCisgICAgLy8gaW4gcmVzcG9uc2UuCisg
ICAgaWYgKF9pc0Z1bGxTY3JlZW4pCisgICAgICAgIFtzZWxmIGV4aXRGdWxsU2NyZWVuXTsKKyAg
ICAKKyAgICBpZiAoX2lzRXhpdGluZ0Z1bGxTY3JlZW4pCisgICAgICAgIFtzZWxmIGZpbmlzaGVk
RXhpdEZ1bGxTY3JlZW5BbmltYXRpb246WUVTXTsKKyAgICAKKyAgICBbc3VwZXIgY2xvc2VdOwor
fQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIE5TQW5pbWF0aW9uIGRlbGVnYXRlCisK
Ky0gKHZvaWQpYW5pbWF0aW9uRGlkRW5kOihOU0FuaW1hdGlvbiopYW5pbWF0aW9uCit7CisgICAg
aWYgKF9pc0Z1bGxTY3JlZW4pCisgICAgICAgIFtzZWxmIGZpbmlzaGVkRW50ZXJGdWxsU2NyZWVu
QW5pbWF0aW9uOllFU107CisgICAgZWxzZQorICAgICAgICBbc2VsZiBmaW5pc2hlZEV4aXRGdWxs
U2NyZWVuQW5pbWF0aW9uOllFU107Cit9CisKICNwcmFnbWEgbWFyayAtCiAjcHJhZ21hIG1hcmsg
SW50ZXJuYWwgSW50ZXJmYWNlCiAKLS0gKHZvaWQpX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNj
cmVlbgorLSAodm9pZClfdXBkYXRlTWVudUFuZERvY2tGb3JGdWxsU2NyZWVuCiB7CiAgICAgLy8g
TlNBcHBsaWNhdGlvblByZXNlbnRhdGlvbk9wdGlvbnMgaXMgYXZhaWxhYmxlIG9uID4gMTAuNiBv
bmx5OgogI2lmbmRlZiBCVUlMRElOR19PTl9MRU9QQVJECiAgICAgTlNBcHBsaWNhdGlvblByZXNl
bnRhdGlvbk9wdGlvbnMgb3B0aW9ucyA9IE5TQXBwbGljYXRpb25QcmVzZW50YXRpb25EZWZhdWx0
OwogICAgIE5TU2NyZWVuKiBmdWxsc2NyZWVuU2NyZWVuID0gW1tzZWxmIHdpbmRvd10gc2NyZWVu
XTsKICAgICAKLSAgICBpZiAoX2lzRnVsbHNjcmVlbikgeworICAgIGlmIChfaXNGdWxsU2NyZWVu
KSB7CiAgICAgICAgIC8vIEF1dG8taGlkZSB0aGUgbWVudSBiYXIgaWYgdGhlIGZ1bGxzY3JlZW5T
Y3JlZW4gY29udGFpbnMgdGhlIG1lbnUgYmFyOgogICAgICAgICAvLyBOT1RFOiBpZiB0aGUgZnVs
bHNjcmVlblNjcmVlbiBjb250YWlucyB0aGUgbWVudSBiYXIgYnV0IG5vdCB0aGUgZG9jaywgd2Ug
bXVzdCBzdGlsbCAKICAgICAgICAgLy8gYXV0by1oaWRlIHRoZSBkb2NrLCBvciBhbiBleGNlcHRp
b24gd2lsbCBiZSB0aHJvd24uCkBAIC02NDAsMjEyICszODUsMTQyIEBAIHByaXZhdGU6CiAgICAg
ICAgIFtOU0FwcCBzZXRQcmVzZW50YXRpb25PcHRpb25zOm9wdGlvbnNdOwogICAgIGVsc2UKICNl
bmRpZgotICAgICAgICBTZXRTeXN0ZW1VSU1vZGUoX2lzRnVsbHNjcmVlbiA/IGtVSU1vZGVOb3Jt
YWwgOiBrVUlNb2RlQWxsSGlkZGVuLCAwKTsKKyAgICAgICAgU2V0U3lzdGVtVUlNb2RlKF9pc0Z1
bGxTY3JlZW4gPyBrVUlNb2RlTm9ybWFsIDoga1VJTW9kZUFsbEhpZGRlbiwgMCk7CiB9CiAKLS0g
KHZvaWQpX3VwZGF0ZVBvd2VyQXNzZXJ0aW9ucwotewotICAgIEJPT0wgaXNQbGF5aW5nID0gW3Nl
bGYgX2lzQW55TW92aWVQbGF5aW5nXTsKLSAgICAKLSAgICBpZiAoaXNQbGF5aW5nICYmIF9pc0Z1
bGxzY3JlZW4pIHsKLSAgICAgICAgaWYgKCFfZGlzcGxheVNsZWVwRGlzYWJsZXIpCi0gICAgICAg
ICAgICBfZGlzcGxheVNsZWVwRGlzYWJsZXIgPSBEaXNwbGF5U2xlZXBEaXNhYmxlcjo6Y3JlYXRl
KCJjb20uYXBwbGUuV2ViS2l0IC0gRnVsbHNjcmVlbiB2aWRlbyIpOwotICAgIH0gZWxzZQotICAg
ICAgICBfZGlzcGxheVNsZWVwRGlzYWJsZXIgPSBudWxscHRyOwotfQotCi0tICh2b2lkKV9yZXF1
ZXN0RXhpdAotewotICAgIFtzZWxmIGV4aXRGdWxsc2NyZWVuXTsKLSAgICBfZm9yY2VEaXNhYmxl
QW5pbWF0aW9uID0gTk87Ci19CisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIFV0aWxpdHkg
RnVuY3Rpb25zCiAKLS0gKHZvaWQpX3JlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246
KEJPT0wpYW5pbWF0aW9uCistIChEb2N1bWVudCopX2RvY3VtZW50IAogewotICAgIF9mb3JjZURp
c2FibGVBbmltYXRpb24gPSAhYW5pbWF0aW9uOwotICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpA
c2VsZWN0b3IoX3JlcXVlc3RFeGl0KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBdOwotCisg
ICAgcmV0dXJuIF9lbGVtZW50LT5kb2N1bWVudCgpOwogfQogCi0tIChCT09MKV9pc0FueU1vdmll
UGxheWluZworLSAodm9pZClfc3dhcFZpZXc6KE5TVmlldyopdmlldyB3aXRoOihOU1ZpZXcqKW90
aGVyVmlldwogewotI2lmIEVOQUJMRShWSURFTykKLSAgICBpZiAoIV9lbGVtZW50KQotICAgICAg
ICByZXR1cm4gTk87Ci0gICAgCi0gICAgTm9kZSogbmV4dE5vZGUgPSBfZWxlbWVudC5nZXQoKTsK
LSAgICB3aGlsZSAobmV4dE5vZGUpCi0gICAgewotICAgICAgICBpZiAobmV4dE5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5leHRO
b2RlKS0+aXNNZWRpYUVsZW1lbnQoKSkgewotICAgICAgICAgICAgSFRNTE1lZGlhRWxlbWVudCog
ZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihuZXh0Tm9kZSk7Ci0gICAg
ICAgICAgICBpZiAoIWVsZW1lbnQtPnBhdXNlZCgpICYmICFlbGVtZW50LT5lbmRlZCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG5l
eHROb2RlID0gbmV4dE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoX2VsZW1lbnQuZ2V0KCkpOwotICAg
IH0KLSNlbmRpZgotICAgIAotICAgIHJldHVybiBOTzsKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdp
bl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBbb3Ro
ZXJWaWV3IHNldEZyYW1lOlt2aWV3IGZyYW1lXV07ICAgICAgICAKKyAgICBbb3RoZXJWaWV3IHNl
dEF1dG9yZXNpemluZ01hc2s6W3ZpZXcgYXV0b3Jlc2l6aW5nTWFza11dOworICAgIFtvdGhlclZp
ZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgW1t2aWV3IHN1cGVydmlld10gcmVwbGFjZVN1
YnZpZXc6dmlldyB3aXRoOm90aGVyVmlld107CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsK
IH0KIAotI3ByYWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFyayBVdGlsaXR5IEZ1bmN0aW9ucwotCi0t
IChXZWJGdWxsc2NyZWVuV2luZG93ICopX2Z1bGxzY3JlZW5XaW5kb3cKK3N0YXRpYyBOU1dpbmRv
dyAqY3JlYXRlQmFja2dyb3VuZEZ1bGxzY3JlZW5XaW5kb3coTlNSZWN0IGZyYW1lKQogewotICAg
IHJldHVybiAoV2ViRnVsbHNjcmVlbldpbmRvdyAqKVtzZWxmIHdpbmRvd107CisgICAgTlNXaW5k
b3cgKndpbmRvdyA9IFtbTlNXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6ZnJhbWUg
c3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1
ZmZlcmVkIGRlZmVyOk5PXTsKKyAgICBbd2luZG93IHNldE9wYXF1ZTpZRVNdOworICAgIFt3aW5k
b3cgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGJsYWNrQ29sb3JdXTsKKyAgICBbd2luZG93
IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107CisgICAgcmV0dXJuIHdpbmRvdzsKIH0KIAotLSAo
RG9jdW1lbnQqKV9kb2N1bWVudCAKK3N0YXRpYyBOU1JlY3Qgd2luZG93RnJhbWVGcm9tQXBwYXJl
bnRGcmFtZXMoTlNSZWN0IHNjcmVlbkZyYW1lLCBOU1JlY3QgaW5pdGlhbEZyYW1lLCBOU1JlY3Qg
ZmluYWxGcmFtZSkKIHsKLSAgICByZXR1cm4gX2VsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgTlNS
ZWN0IGluaXRpYWxXaW5kb3dGcmFtZTsKKyAgICBDR0Zsb2F0IHhTY2FsZSA9IE5TV2lkdGgoc2Ny
ZWVuRnJhbWUpIC8gTlNXaWR0aChmaW5hbEZyYW1lKTsKKyAgICBDR0Zsb2F0IHlTY2FsZSA9IE5T
SGVpZ2h0KHNjcmVlbkZyYW1lKSAvIE5TSGVpZ2h0KGZpbmFsRnJhbWUpOworICAgIENHRmxvYXQg
eFRyYW5zID0gTlNNaW5YKHNjcmVlbkZyYW1lKSAtIE5TTWluWChmaW5hbEZyYW1lKTsKKyAgICBD
R0Zsb2F0IHlUcmFucyA9IE5TTWluWShzY3JlZW5GcmFtZSkgLSBOU01pblkoZmluYWxGcmFtZSk7
CisgICAgaW5pdGlhbFdpbmRvd0ZyYW1lLnNpemUgPSBOU01ha2VTaXplKE5TV2lkdGgoaW5pdGlh
bEZyYW1lKSAqIHhTY2FsZSwgTlNIZWlnaHQoaW5pdGlhbEZyYW1lKSAqIHlTY2FsZSk7CisgICAg
aW5pdGlhbFdpbmRvd0ZyYW1lLm9yaWdpbiA9IE5TTWFrZVBvaW50CisgICAgKCBOU01pblgoaW5p
dGlhbEZyYW1lKSArIHhUcmFucyAvIChOU1dpZHRoKGZpbmFsRnJhbWUpIC8gTlNXaWR0aChpbml0
aWFsRnJhbWUpKQorICAgICAsIE5TTWluWShpbml0aWFsRnJhbWUpICsgeVRyYW5zIC8gKE5TSGVp
Z2h0KGZpbmFsRnJhbWUpIC8gTlNIZWlnaHQoaW5pdGlhbEZyYW1lKSkpOworICAgIHJldHVybiBp
bml0aWFsV2luZG93RnJhbWU7CiB9CiAKLS0gKENGVGltZUludGVydmFsKV9hbmltYXRpb25EdXJh
dGlvbgorLSAodm9pZClfc3RhcnRFbnRlckZ1bGxTY3JlZW5BbmltYXRpb25XaXRoRHVyYXRpb246
KE5TVGltZUludGVydmFsKWR1cmF0aW9uCiB7Ci0gICAgc3RhdGljIGNvbnN0IENGVGltZUludGVy
dmFsIGRlZmF1bHREdXJhdGlvbiA9IDAuNTsKLSAgICBDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbiA9
IGRlZmF1bHREdXJhdGlvbjsKLSNpZm5kZWYgQlVJTERJTkdfT05fTEVPUEFSRAotICAgIE5TVUlu
dGVnZXIgbW9kaWZpZXJGbGFncyA9IFtOU0V2ZW50IG1vZGlmaWVyRmxhZ3NdOwotI2Vsc2UKLSAg
ICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZp
ZXJGbGFnc107Ci0jZW5kaWYKLSAgICBpZiAoKG1vZGlmaWVyRmxhZ3MgJiBOU0NvbnRyb2xLZXlN
YXNrKSA9PSBOU0NvbnRyb2xLZXlNYXNrKQotICAgICAgICBkdXJhdGlvbiAqPSAyOwotICAgIGlm
ICgobW9kaWZpZXJGbGFncyAmIE5TU2hpZnRLZXlNYXNrKSA9PSBOU1NoaWZ0S2V5TWFzaykKLSAg
ICAgICAgZHVyYXRpb24gKj0gMTA7Ci0gICAgaWYgKF9mb3JjZURpc2FibGVBbmltYXRpb24pIHsK
LSAgICAgICAgLy8gVGhpcyB3aWxsIGRpc2FibGUgc2NhbGUgYW5pbWF0aW9uCi0gICAgICAgIGR1
cmF0aW9uID0gMDsKKyAgICBOU1JlY3Qgc2NyZWVuRnJhbWUgPSBbW1tzZWxmIHdpbmRvd10gc2Ny
ZWVuXSBmcmFtZV07CisgICAgTlNSZWN0IGluaXRpYWxXaW5kb3dGcmFtZSA9IHdpbmRvd0ZyYW1l
RnJvbUFwcGFyZW50RnJhbWVzKHNjcmVlbkZyYW1lLCBfaW5pdGlhbEZyYW1lLCBfZmluYWxGcmFt
ZSk7CisgICAgCisgICAgX3NjYWxlQW5pbWF0aW9uLmFkb3B0TlMoW1tXZWJXaW5kb3dTY2FsZUFu
aW1hdGlvbiBhbGxvY10gaW5pdFdpdGhIaW50ZWREdXJhdGlvbjpkdXJhdGlvbiB3aW5kb3c6W3Nl
bGYgd2luZG93XSBpbml0YWxGcmFtZTppbml0aWFsV2luZG93RnJhbWUgZmluYWxGcmFtZTpzY3Jl
ZW5GcmFtZV0pOworICAgIAorICAgIFtfc2NhbGVBbmltYXRpb24uZ2V0KCkgc2V0QW5pbWF0aW9u
QmxvY2tpbmdNb2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmddOworICAgIFtfc2NhbGVBbmltYXRp
b24uZ2V0KCkgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW19zY2FsZUFuaW1hdGlvbi5nZXQoKSBz
ZXRDdXJyZW50UHJvZ3Jlc3M6MF07CisgICAgW19zY2FsZUFuaW1hdGlvbi5nZXQoKSBzdGFydEFu
aW1hdGlvbl07CisgICAgCisgICAgLy8gV0tXaW5kb3dTZXRDbGlwUmVjdCB0YWtlcyB3aW5kb3cg
Y29vcmRpbmF0ZXMsIHNvIGNvbnZlcnQgZnJvbSBzY3JlZW4gY29vcmRpbmF0ZXMgaGVyZToKKyAg
ICBOU1JlY3QgZmluYWxCb3VuZHMgPSBfZmluYWxGcmFtZTsKKyAgICBmaW5hbEJvdW5kcy5vcmln
aW4gPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOmZpbmFsQm91bmRzLm9yaWdp
bl07CisgICAgV0tXaW5kb3dTZXRDbGlwUmVjdChbc2VsZiB3aW5kb3ddLCBmaW5hbEJvdW5kcyk7
CisgICAgCisgICAgW1tzZWxmIHdpbmRvd10gbWFrZUtleUFuZE9yZGVyRnJvbnQ6c2VsZl07Cisg
ICAgCisgICAgaWYgKCFfYmFja2dyb3VuZFdpbmRvdykKKyAgICAgICAgX2JhY2tncm91bmRXaW5k
b3cuYWRvcHROUyhjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyhzY3JlZW5GcmFtZSkp
OworICAgIGVsc2UKKyAgICAgICAgW19iYWNrZ3JvdW5kV2luZG93LmdldCgpIHNldEZyYW1lOnNj
cmVlbkZyYW1lIGRpc3BsYXk6Tk9dOworICAgIAorICAgIENHRmxvYXQgY3VycmVudEFscGhhID0g
MDsKKyAgICBpZiAoX2ZhZGVBbmltYXRpb24pIHsKKyAgICAgICAgY3VycmVudEFscGhhID0gW19m
YWRlQW5pbWF0aW9uLmdldCgpIGN1cnJlbnRBbHBoYV07CisgICAgICAgIFtfZmFkZUFuaW1hdGlv
bi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICAgICAgW19mYWRlQW5pbWF0aW9uLmdldCgpIHNl
dFdpbmRvdzpuaWxdOwogICAgIH0KLSAgICByZXR1cm4gZHVyYXRpb247CisgICAgCisgICAgX2Zh
ZGVBbmltYXRpb24uYWRvcHROUyhbW1dlYldpbmRvd0ZhZGVBbmltYXRpb24gYWxsb2NdIGluaXRX
aXRoRHVyYXRpb246ZHVyYXRpb24gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3c6X2JhY2tncm91bmRXaW5k
b3cuZ2V0KCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbml0aWFsQWxwaGE6Y3VycmVudEFscGhhIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5h
bEFscGhhOjFdKTsKKyAgICBbX2ZhZGVBbmltYXRpb24uZ2V0KCkgc2V0QW5pbWF0aW9uQmxvY2tp
bmdNb2RlOk5TQW5pbWF0aW9uTm9uYmxvY2tpbmddOworICAgIFtfZmFkZUFuaW1hdGlvbi5nZXQo
KSBzZXRDdXJyZW50UHJvZ3Jlc3M6MF07CisgICAgW19mYWRlQW5pbWF0aW9uLmdldCgpIHN0YXJ0
QW5pbWF0aW9uXTsKKyAgICAKKyAgICBbX2JhY2tncm91bmRXaW5kb3cuZ2V0KCkgb3JkZXJXaW5k
b3c6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl1d
OworICAgIAorICAgIFtbc2VsZiB3aW5kb3ddIHNldEF1dG9kaXNwbGF5OllFU107CisgICAgW1tz
ZWxmIHdpbmRvd10gZGlzcGxheUlmTmVlZGVkXTsKKyAgICBOU0VuYWJsZVNjcmVlblVwZGF0ZXMo
KTsKIH0KIAotQGVuZAotCi0jcHJhZ21hIG1hcmsgLQotQGltcGxlbWVudGF0aW9uIFdlYkZ1bGxz
Y3JlZW5XaW5kb3cKLQotLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0KWNvbnRlbnRS
ZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilhU3R5bGUgYmFja2luZzooTlNCYWNraW5nU3RvcmVU
eXBlKWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZworLSAodm9pZClfc3RhcnRFeGl0RnVs
bFNjcmVlbkFuaW1hdGlvbldpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KIHsK
LSAgICBVTlVTRURfUEFSQU0oYVN0eWxlKTsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoQ29u
dGVudFJlY3Q6Y29udGVudFJlY3Qgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFj
a2luZzpidWZmZXJpbmdUeXBlIGRlZmVyOmZsYWddOwotICAgIGlmICghc2VsZikKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICBbc2VsZiBzZXRPcGFxdWU6Tk9dOwotICAgIFtzZWxmIHNldEJhY2tn
cm91bmRDb2xvcjpbTlNDb2xvciBjbGVhckNvbG9yXV07Ci0gICAgW3NlbGYgc2V0SWdub3Jlc01v
dXNlRXZlbnRzOk5PXTsKLSAgICBbc2VsZiBzZXRBY2NlcHRzTW91c2VNb3ZlZEV2ZW50czpZRVNd
OwotICAgIFtzZWxmIHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107Ci0gICAgW3NlbGYgc2V0SGFz
U2hhZG93OllFU107Ci0jaWZuZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKLSAgICBbc2VsZiBzZXRN
b3ZhYmxlOk5PXTsKLSNlbHNlCi0gICAgW3NlbGYgc2V0TW92YWJsZUJ5V2luZG93QmFja2dyb3Vu
ZDpOT107Ci0jZW5kaWYKKyAgICBOU1JlY3Qgc2NyZWVuRnJhbWUgPSBbW1tzZWxmIHdpbmRvd10g
c2NyZWVuXSBmcmFtZV07CisgICAgTlNSZWN0IGluaXRpYWxXaW5kb3dGcmFtZSA9IHdpbmRvd0Zy
YW1lRnJvbUFwcGFyZW50RnJhbWVzKHNjcmVlbkZyYW1lLCBfaW5pdGlhbEZyYW1lLCBfZmluYWxG
cmFtZSk7CiAgICAgCi0gICAgTlNWaWV3KiBjb250ZW50VmlldyA9IFtzZWxmIGNvbnRlbnRWaWV3
XTsKLSAgICBfYW5pbWF0aW9uVmlldyA9IFtbTlNWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltj
b250ZW50VmlldyBib3VuZHNdXTsKKyAgICBDR1JlY3QgY3VycmVudEZyYW1lID0gX3NjYWxlQW5p
bWF0aW9uID8gW19zY2FsZUFuaW1hdGlvbi5nZXQoKSBjdXJyZW50RnJhbWVdIDogW1tzZWxmIHdp
bmRvd10gZnJhbWVdOworICAgIF9zY2FsZUFuaW1hdGlvbi5hZG9wdE5TKFtbV2ViV2luZG93U2Nh
bGVBbmltYXRpb24gYWxsb2NdIGluaXRXaXRoSGludGVkRHVyYXRpb246ZHVyYXRpb24gd2luZG93
OltzZWxmIHdpbmRvd10gaW5pdGFsRnJhbWU6Y3VycmVudEZyYW1lIGZpbmFsRnJhbWU6aW5pdGlh
bFdpbmRvd0ZyYW1lXSk7CiAgICAgCi0gICAgUmV0YWluUHRyPENBTGF5ZXI+IGNvbnRlbnRMYXll
cihBZG9wdE5TLCBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbX2FuaW1hdGlvblZpZXcg
c2V0TGF5ZXI6Y29udGVudExheWVyLmdldCgpXTsKLSAgICBbX2FuaW1hdGlvblZpZXcgc2V0V2Fu
dHNMYXllcjpZRVNdOwotICAgIFtfYW5pbWF0aW9uVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5T
Vmlld1dpZHRoU2l6YWJsZXxOU1ZpZXdIZWlnaHRTaXphYmxlXTsKLSAgICBbY29udGVudFZpZXcg
YWRkU3VidmlldzpfYW5pbWF0aW9uVmlld107CisgICAgW19zY2FsZUFuaW1hdGlvbi5nZXQoKSBz
ZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ107CisgICAgW19z
Y2FsZUFuaW1hdGlvbi5nZXQoKSBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbX3NjYWxlQW5pbWF0
aW9uLmdldCgpIHNldEN1cnJlbnRQcm9ncmVzczowXTsKKyAgICBbX3NjYWxlQW5pbWF0aW9uLmdl
dCgpIHN0YXJ0QW5pbWF0aW9uXTsKICAgICAKLSAgICBfYmFja2dyb3VuZExheWVyID0gW1tDQUxh
eWVyIGFsbG9jXSBpbml0XTsKLSAgICBbY29udGVudExheWVyLmdldCgpIGFkZFN1YmxheWVyOl9i
YWNrZ3JvdW5kTGF5ZXJdOwotI2lmbmRlZiBCVUlMRElOR19PTl9MRU9QQVJECi0gICAgW2NvbnRl
bnRMYXllci5nZXQoKSBzZXRHZW9tZXRyeUZsaXBwZWQ6WUVTXTsKLSNlbHNlCi0gICAgW2NvbnRl
bnRMYXllci5nZXQoKSBzZXRTdWJsYXllclRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxl
KDEsIC0xLCAxKV07Ci0jZW5kaWYKLSAgICBbY29udGVudExheWVyLmdldCgpIHNldE9wYWNpdHk6
MF07CisgICAgaWYgKCFfYmFja2dyb3VuZFdpbmRvdykKKyAgICAgICAgX2JhY2tncm91bmRXaW5k
b3cuYWRvcHROUyhjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyhzY3JlZW5GcmFtZSkp
OworICAgIGVsc2UKKyAgICAgICAgW19iYWNrZ3JvdW5kV2luZG93LmdldCgpIHNldEZyYW1lOnNj
cmVlbkZyYW1lIGRpc3BsYXk6Tk9dOwogICAgIAotICAgIFtfYmFja2dyb3VuZExheWVyIHNldEJh
Y2tncm91bmRDb2xvcjpDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKV07Ci0g
ICAgW19iYWNrZ3JvdW5kTGF5ZXIgc2V0T3BhY2l0eTowXTsKLSAgICByZXR1cm4gc2VsZjsKLX0K
LQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19hbmltYXRpb25WaWV3IHJlbGVhc2VdOwotICAg
IFtfYmFja2dyb3VuZExheWVyIHJlbGVhc2VdOwotICAgIFtfcmVuZGVyZXJMYXllciByZWxlYXNl
XTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKEJPT0wpY2FuQmVjb21lS2V5V2luZG93
Ci17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZClrZXlEb3duOihOU0V2ZW50ICopdGhl
RXZlbnQKLXsKLSAgICBpZiAoW1t0aGVFdmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNd
IGlzRXF1YWw6QCJcZSJdKSAvLyBFc2FjcGUga2V5LWNvZGUKLSAgICAgICAgW3NlbGYgY2FuY2Vs
T3BlcmF0aW9uOnNlbGZdOwotICAgIGVsc2UgW3N1cGVyIGtleURvd246dGhlRXZlbnRdOwotfQot
Ci0tICh2b2lkKWNhbmNlbE9wZXJhdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgVU5VU0VEX1BBUkFN
KHNlbmRlcik7Ci0gICAgW1tzZWxmIHdpbmRvd0NvbnRyb2xsZXJdIF9yZXF1ZXN0RXhpdEZ1bGxz
Y3JlZW5XaXRoQW5pbWF0aW9uOllFU107Ci19Ci0KLS0gKENBTGF5ZXIqKXJlbmRlcmVyTGF5ZXIK
LXsKLSAgICByZXR1cm4gX3JlbmRlcmVyTGF5ZXI7Ci19Ci0KLS0gKHZvaWQpc2V0UmVuZGVyZXJM
YXllcjooQ0FMYXllciAqKXJlbmRlcmVyTGF5ZXIKLXsKLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdp
bl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhCb29s
OllFU10gZm9yS2V5OmtDQVRyYW5zYWN0aW9uRGlzYWJsZUFjdGlvbnNdOwotICAgIFtyZW5kZXJl
ckxheWVyIHJldGFpbl07Ci0gICAgW19yZW5kZXJlckxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVy
XTsKLSAgICBbX3JlbmRlcmVyTGF5ZXIgcmVsZWFzZV07Ci0gICAgX3JlbmRlcmVyTGF5ZXIgPSBy
ZW5kZXJlckxheWVyOwotICAgIAotICAgIGlmIChfcmVuZGVyZXJMYXllcikKLSAgICAgICAgW1tb
c2VsZiBhbmltYXRpb25WaWV3XSBsYXllcl0gYWRkU3VibGF5ZXI6X3JlbmRlcmVyTGF5ZXJdOwot
ICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0KLS0gKENBTGF5ZXIqKWJhY2tncm91bmRM
YXllcgotewotICAgIHJldHVybiBfYmFja2dyb3VuZExheWVyOworICAgIENHRmxvYXQgY3VycmVu
dEFscGhhID0gMTsKKyAgICBpZiAoX2ZhZGVBbmltYXRpb24pIHsKKyAgICAgICAgY3VycmVudEFs
cGhhID0gW19mYWRlQW5pbWF0aW9uLmdldCgpIGN1cnJlbnRBbHBoYV07CisgICAgICAgIFtfZmFk
ZUFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICAgICAgW19mYWRlQW5pbWF0aW9u
LmdldCgpIHNldFdpbmRvdzpuaWxdOworICAgIH0KKyAgICBfZmFkZUFuaW1hdGlvbi5hZG9wdE5T
KFtbV2ViV2luZG93RmFkZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhEdXJhdGlvbjpkdXJhdGlv
biAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpbmRvdzpfYmFja2dyb3VuZFdpbmRvdy5nZXQoKSAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
aXRpYWxBbHBoYTpjdXJyZW50QWxwaGEgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsQWxwaGE6MF0pOworICAgIFtf
ZmFkZUFuaW1hdGlvbi5nZXQoKSBzZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25O
b25ibG9ja2luZ107CisgICAgW19mYWRlQW5pbWF0aW9uLmdldCgpIHNldEN1cnJlbnRQcm9ncmVz
czowXTsKKyAgICBbX2ZhZGVBbmltYXRpb24uZ2V0KCkgc3RhcnRBbmltYXRpb25dOworICAgIAor
ICAgIFtfYmFja2dyb3VuZFdpbmRvdy5nZXQoKSBvcmRlcldpbmRvdzpOU1dpbmRvd0JlbG93IHJl
bGF0aXZlVG86W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXV07CisgICAgCisgICAgLy8gV0tX
aW5kb3dTZXRDbGlwUmVjdCB0YWtlcyB3aW5kb3cgY29vcmRpbmF0ZXMsIHNvIGNvbnZlcnQgZnJv
bSBzY3JlZW4gY29vcmRpbmF0ZXMgaGVyZToKKyAgICBOU1JlY3QgZmluYWxCb3VuZHMgPSBfZmlu
YWxGcmFtZTsKKyAgICBmaW5hbEJvdW5kcy5vcmlnaW4gPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0
U2NyZWVuVG9CYXNlOmZpbmFsQm91bmRzLm9yaWdpbl07CisgICAgV0tXaW5kb3dTZXRDbGlwUmVj
dChbc2VsZiB3aW5kb3ddLCBmaW5hbEJvdW5kcyk7CisgICAgCisgICAgW1tzZWxmIHdpbmRvd10g
c2V0QXV0b2Rpc3BsYXk6WUVTXTsKKyAgICBbW3NlbGYgd2luZG93XSBkaXNwbGF5SWZOZWVkZWRd
OworICAgIE5TRW5hYmxlU2NyZWVuVXBkYXRlcygpOwogfQogCi0tIChOU1ZpZXcqKWFuaW1hdGlv
blZpZXcKLXsKLSAgICByZXR1cm4gX2FuaW1hdGlvblZpZXc7Ci19CiBAZW5kCiAKLSNwcmFnbWEg
bWFyayAtCi0jcHJhZ21hIG1hcmsgTWVkaWFFdmVudExpc3RlbmVyCi0KLU1lZGlhRXZlbnRMaXN0
ZW5lcjo6TWVkaWFFdmVudExpc3RlbmVyKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyKiBkZWxlZ2F0
ZSkKLSAgICA6IEV2ZW50TGlzdGVuZXIoQ1BQRXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgLCBkZWxl
Z2F0ZShkZWxlZ2F0ZSkKLXsgCi19Ci0KLVBhc3NSZWZQdHI8TWVkaWFFdmVudExpc3RlbmVyPiBN
ZWRpYUV2ZW50TGlzdGVuZXI6OmNyZWF0ZShXZWJGdWxsU2NyZWVuQ29udHJvbGxlciogZGVsZWdh
dGUpIAoteyAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhRXZlbnRMaXN0ZW5lcihkZWxl
Z2F0ZSkpOyAKLX0KLQotYm9vbCBNZWRpYUV2ZW50TGlzdGVuZXI6Om9wZXJhdG9yPT0oY29uc3Qg
RXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpCi17Ci0gICAgcmV0dXJuIHRoaXMgPT0gJmxpc3RlbmVy
OwotfQotCi12b2lkIE1lZGlhRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50KQotewotICAgIFtkZWxlZ2F0ZSBfdXBk
YXRlUG93ZXJBc3NlcnRpb25zXTsKLX0KIAogI2VuZGlmIC8qIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA0NTI1Y2JhOWZjMzg5
NGFhNGI0ZmI0ZTA1YTJjZWU2YzBiZDhjODAyLi44ZTY2NGFhNDEzMmJkM2IyZjY2NTMzNzE3OGUy
OTVhMWNiZTk3MWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC02Mjkz
LDIxICs2MjkzLDE0IEBAIGJvb2wgTGF5ZXJGbHVzaENvbnRyb2xsZXI6OmZsdXNoTGF5ZXJzKCkK
IAogICAgIFtfcHJpdmF0ZS0+bmV3RnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0RWxlbWVudDplbGVt
ZW50XTsKICAgICBbX3ByaXZhdGUtPm5ld0Z1bGxzY3JlZW5Db250cm9sbGVyIHNldFdlYlZpZXc6
c2VsZl07Ci0gICAgW19wcml2YXRlLT5uZXdGdWxsc2NyZWVuQ29udHJvbGxlciBlbnRlckZ1bGxz
Y3JlZW46W1tzZWxmIHdpbmRvd10gc2NyZWVuXV07ICAgICAgICAKKyAgICBbX3ByaXZhdGUtPm5l
d0Z1bGxzY3JlZW5Db250cm9sbGVyIGVudGVyRnVsbFNjcmVlbjpbW3NlbGYgd2luZG93XSBzY3Jl
ZW5dXTsgICAgICAgIAogfQogCiAtICh2b2lkKV9leGl0RnVsbFNjcmVlbkZvckVsZW1lbnQ6KFdl
YkNvcmU6OkVsZW1lbnQqKWVsZW1lbnQKIHsKICAgICBpZiAoIV9wcml2YXRlLT5uZXdGdWxsc2Ny
ZWVuQ29udHJvbGxlcikKICAgICAgICAgcmV0dXJuOwotICAgIFtfcHJpdmF0ZS0+bmV3RnVsbHNj
cmVlbkNvbnRyb2xsZXIgZXhpdEZ1bGxzY3JlZW5dOwotfQotCi0tICh2b2lkKV9mdWxsU2NyZWVu
UmVuZGVyZXJDaGFuZ2VkOihXZWJDb3JlOjpSZW5kZXJCb3gqKXJlbmRlcmVyCi17Ci0gICAgaWYg
KCFfcHJpdmF0ZS0+bmV3RnVsbHNjcmVlbkNvbnRyb2xsZXIpCi0gICAgICAgIF9wcml2YXRlLT5u
ZXdGdWxsc2NyZWVuQ29udHJvbGxlciA9IFtbV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgYWxsb2Nd
IGluaXRdOwotICAgIFtfcHJpdmF0ZS0+bmV3RnVsbHNjcmVlbkNvbnRyb2xsZXIgc2V0UmVuZGVy
ZXI6cmVuZGVyZXJdOworICAgIFtfcHJpdmF0ZS0+bmV3RnVsbHNjcmVlbkNvbnRyb2xsZXIgZXhp
dEZ1bGxTY3JlZW5dOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128536</attachid>
            <date>2012-02-23 12:23:39 -0800</date>
            <delta_ts>2012-03-07 22:47:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78930-20120223122338.patch</filename>
            <type>text/plain</type>
            <size>52826</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4Mzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggMWQ3NjE4ZDk4
N2YzNjJkM2QxM2RhOWQxMDAzOTVhNzE0YjljMGQ4MC4uM2JlMjMwMTk2NTBlNjUwZDZiN2ZmNGNh
N2E2NDlmZGZhYTcxMGUxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEy
LTAyLTIwICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIEZ1bGwg
U2NyZWVuIFJlZmFjdG9yIFBhcnQgNDogQW5pbWF0ZSBpbnRvIEZ1bGwgU2NyZWVuIG1vZGUgdXNp
bmcgbmV3IGFuaW1hdGlvbiBjbGFzc2VzLCBXZWJLaXQgZWRpdGlvbi4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4OTMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV2aXNlIFdlYkZ1bGxTY3JlZW5Db250
cm9sbGVyIHRvIGhhdmUgdGhlIHNhbWUgZ2VuZXJhbCBmdW5jdGlvbmFsaXR5IGFuZCBjb2RlIHBh
dGggYXMgV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcgorICAgICAgICBpbiBXZWJLaXQyLiAg
QXMgc3VjaCwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGNvcGllcyBvZiB0aGVpciBlcXVp
dmFsZW50cyBpbiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5D
b250cm9sbGVyIGluaXRdKToKKyAgICAgICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgZGVh
bGxvY10pOgorICAgICAgICAoLVtXZWJGdWxsU2NyZWVuQ29udHJvbGxlciB3aW5kb3dEaWRMb2Fk
XSk6CisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGNhbmNlbE9wZXJhdGlvbjpd
KToKKyAgICAgICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgYXBwbGljYXRpb25EaWRSZXNp
Z25BY3RpdmU6XSk6CisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGFwcGxpY2F0
aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyczpdKToKKyAgICAgICAgKC1bV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIgZmluaXNoZWRFbnRlckZ1bGxTY3JlZW5BbmltYXRpb246XSk6CisgICAgICAg
ICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGZpbmlzaGVkRXhpdEZ1bGxTY3JlZW5BbmltYXRp
b246XSk6CisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGNsb3NlXSk6CisgICAg
ICAgICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGFuaW1hdGlvbkRpZEVuZDpdKToKKyAgICAg
ICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbFNj
cmVlbl0pOgorICAgICAgICAoLVtXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBfc3dhcFZpZXc6d2l0
aDpdKToKKyAgICAgICAgKGNyZWF0ZUJhY2tncm91bmRGdWxsc2NyZWVuV2luZG93KToKKyAgICAg
ICAgKHdpbmRvd0ZyYW1lRnJvbUFwcGFyZW50RnJhbWVzKToKKyAgICAgICAgKC1bV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIgX3N0YXJ0RW50ZXJGdWxsU2NyZWVuQW5pbWF0aW9uV2l0aER1cmF0aW9u
Ol0pOgorICAgICAgICAoLVtXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBfc3RhcnRFeGl0RnVsbFNj
cmVlbkFuaW1hdGlvbldpdGhEdXJhdGlvbjpdKToKKworICAgICAgICBUaGUgZm9sbG93aW5nIGlz
IGEgY29weSBvZiB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbiBpbiBXZWJGdWxsU2NyZWVuTWFuYWdl
cjoKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLm1tOgorICAgICAg
ICAoc2NyZWVuUmVjdE9mQ29udGVudHMpOiAgICAgICAgCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OmZ1bGxT
Y3JlZW5SZW5kZXJlckNoYW5nZWQpOiBObyBsb25nZXIgdGVsbCB0aGUgV2ViVmlldyB0aGUgcmVu
ZGVyZXIgY2hhbmdlZCAoYXMgaXQgZG9lc24ndCBjYXJlLikKKyAgICAgICAgKiBXZWJWaWV3L1dl
YkZ1bGxTY3JlZW5Db250cm9sbGVyLmg6CisgICAgICAgICogV2ViVmlldy9XZWJGdWxsU2NyZWVu
Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgc2V0RWxl
bWVudDpdKTogTm8gbmVlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBtZWRpYSBlbGVt
ZW50LgorICAgICAgICAoLVtXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW46
XSk6IFNhbWUgYXMgV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciwgYnV0IG5vdCBhc3luY2hy
b25vdXMuCisgICAgICAgICgtW1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGV4aXRGdWxsU2NyZWVu
XSk6IERpdHRvLgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2Vi
VmlldyBfZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudDpXZWJDb3JlOjpdKTogRnVsbHNjcmVlbiAt
PiBGdWxsU2NyZWVuLgorICAgICAgICAoLVtXZWJWaWV3IF9leGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQ6V2ViQ29yZTo6XSk6IERpdHRvLgorCiAyMDEyLTAyLTIxICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgQXR0ZW1wdCB0byBmaXggdGhlIFNub3cgTGVvcGFyZCBidWls
ZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5tbQppbmRleCAzYmFjODdiOWM2OGMxMWQ5OWFiODkzMDAwMmQ0NTM2Y2ZlOGMwNzNiLi5j
MGYwYzRlZDYxOTEwNTJmZTg3NDZkM2MxMmE2MDJkY2RmODVkMDhhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KKysrIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCkBAIC05ODMs
OCArOTgzLDYgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmZ1bGxTY3JlZW5SZW5kZXJlckNoYW5n
ZWQoUmVuZGVyQm94KiByZW5kZXJlcikKICAgICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2Vi
VmlldzpmdWxsU2NyZWVuUmVuZGVyZXJDaGFuZ2VkOik7CiAgICAgaWYgKFtbbV93ZWJWaWV3IFVJ
RGVsZWdhdGVdIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCiAgICAgICAgIENhbGxVSURl
bGVnYXRlKG1fd2ViVmlldywgc2VsZWN0b3IsIChpZClyZW5kZXJlcik7Ci0gICAgZWxzZQotICAg
ICAgICBbbV93ZWJWaWV3IF9mdWxsU2NyZWVuUmVuZGVyZXJDaGFuZ2VkOnJlbmRlcmVyXTsKIH0K
IAogQGltcGxlbWVudGF0aW9uIFdlYktpdEZ1bGxTY3JlZW5MaXN0ZW5lcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oCmluZGV4IDBj
YjI1ZDk3NDEzNjgxNWIxZjQwYWJkMDhjNmU0ZjM2ZTFhMzQwZGMuLmVhMDNhZjRiYWRmOTI0NTA4
MGQ1YWIxZDUyNzhmOGVlMDVjYmMyMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmgKQEAgLTI3LDggKzI3LDEwIEBACiAKICNp
bXBvcnQgPHd0Zi9Pd25QdHIuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKyNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KIAogQGNsYXNzIFdlYldpbmRvd0ZhZGVBbmltYXRpb247CitAY2xhc3Mg
V2ViV2luZG93U2NhbGVBbmltYXRpb247CiBAY2xhc3MgV2ViVmlldzsKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBEaXNwbGF5U2xlZXBEaXNhYmxlcjsKQEAgLTQwLDE2ICs0MiwxOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBAaW50ZXJmYWNlIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVy
IDogTlNXaW5kb3dDb250cm9sbGVyIHsKIEBwcml2YXRlCiAgICAgUmVmUHRyPFdlYkNvcmU6OkVs
ZW1lbnQ+IF9lbGVtZW50OwotICAgIFdlYkNvcmU6OlJlbmRlckJveCogX3JlbmRlcmVyOyAvLyAo
c2V0KQogICAgIFdlYlZpZXcgKl93ZWJWaWV3OwotICAgIE5TVmlldyogX3BsYWNlaG9sZGVyVmll
dzsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RXZlbnRMaXN0ZW5lcj4gX21lZGlhRXZlbnRMaXN0ZW5l
cjsgCisgICAgUmV0YWluUHRyPE5TVmlldz4gX3dlYlZpZXdQbGFjZWhvbGRlcjsKKyAgICBSZXRh
aW5QdHI8V2ViV2luZG93U2NhbGVBbmltYXRpb24+IF9zY2FsZUFuaW1hdGlvbjsKKyAgICBSZXRh
aW5QdHI8V2ViV2luZG93RmFkZUFuaW1hdGlvbj4gX2ZhZGVBbmltYXRpb247CisgICAgUmV0YWlu
UHRyPE5TV2luZG93PiBfYmFja2dyb3VuZFdpbmRvdzsKKyAgICBOU1JlY3QgX2luaXRpYWxGcmFt
ZTsKKyAgICBOU1JlY3QgX2ZpbmFsRnJhbWU7CiAKLSAgICBCT09MIF9pc0FuaW1hdGluZzsKLSAg
ICBCT09MIF9pc0Z1bGxzY3JlZW47Ci0gICAgQk9PTCBfZm9yY2VEaXNhYmxlQW5pbWF0aW9uOwot
ICAgIE93blB0cjxXZWJDb3JlOjpEaXNwbGF5U2xlZXBEaXNhYmxlcj4gX2Rpc3BsYXlTbGVlcERp
c2FibGVyOwotICAgIENHUmVjdCBfaW5pdGlhbEZyYW1lOworICAgIEJPT0wgX2lzRW50ZXJpbmdG
dWxsU2NyZWVuOworICAgIEJPT0wgX2lzRXhpdGluZ0Z1bGxTY3JlZW47CisgICAgQk9PTCBfaXNG
dWxsU2NyZWVuOworICAgIEJPT0wgX2lzUGxheWluZzsKIH0KIAogLSAoV2ViVmlldyopd2ViVmll
dzsKQEAgLTU4LDEyICs2Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC0gKHZvaWQpc2V0RWxl
bWVudDooUGFzc1JlZlB0cjxXZWJDb3JlOjpFbGVtZW50PillbGVtZW50OwogLSAoV2ViQ29yZTo6
RWxlbWVudCopZWxlbWVudDsKIAotLSAodm9pZClzZXRSZW5kZXJlcjooV2ViQ29yZTo6UmVuZGVy
Qm94KilyZW5kZXJlcjsKLS0gKFdlYkNvcmU6OlJlbmRlckJveCopcmVuZGVyZXI7Ci0KLS0gKHZv
aWQpZW50ZXJGdWxsc2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbjsKLS0gKHZvaWQpZXhpdEZ1bGxz
Y3JlZW47Ci0KKy0gKHZvaWQpZW50ZXJGdWxsU2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbjsKKy0g
KHZvaWQpZXhpdEZ1bGxTY3JlZW47CistICh2b2lkKWNsb3NlOwogQGVuZAogCiAjZW5kaWYgLy8g
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIubW0KaW5kZXggYWFlOTJlODQxNzc1YjQzNDA5YTg5
NmQyNjlkMGIzNDRiYWY3Y2Q1Yi4uMzljZmI2Njc5N2M5Njg2ZjRhODU4Mzg4OWY2MGZkZTI0Zjk5
YzU4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGdWxsU2NyZWVu
Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyLm1tCkBAIC0zMCw3MSArMzAsNDQgQEAKICNpbXBvcnQgIldlYk5TV2luZG93
RXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKICNpbXBvcnQgIldl
YlZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCA8SU9LaXQvcHdyX21ndC9JT1BNTGliLmg+Ci0jaW1w
b3J0IDxPU1NlcnZpY2VzL1Bvd2VyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0FuaW1hdGlvbkxpc3Qu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvQ1NTUHJvcGVydHlOYW1lcy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9Db2xvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9ET01Eb2N1bWVudC5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9ET01Eb2N1bWVudEludGVybmFsLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RPTUhUTUxFbGVt
ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RPTVdpbmRvdy5oPgotI2ltcG9ydCA8V2ViQ29yZS9E
aXNwbGF5U2xlZXBEaXNhYmxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgotI2lt
cG9ydCA8V2ViQ29yZS9FdmVudExpc3RlbmVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFt
ZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9GbG9h
dFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvSFRNTE1lZGlhRWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Ob2RlTGlzdC5oPgot
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCbG9jay5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
ckxheWVyQmFja2luZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Tb2Z0TGlua2luZy5o
PgotI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViRnVs
bFNjcmVlbldpbmRvdy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJXaW5kb3dBbmltYXRpb24uaD4K
KyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgogI2ltcG9ydCA8d3RmL1VudXNlZFBhcmFtLmg+CiAKLXN0YXRpYyBOU1N0cmluZyogY29u
c3QgaXNFbnRlcmluZ0Z1bGxzY3JlZW5LZXkgPSBAImlzRW50ZXJpbmdGdWxsc2NyZWVuIjsKLQog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLUBpbnRlcmZhY2UgV2ViRnVsbHNjcmVlbldpbmRv
dyA6IE5TV2luZG93Ci0jaWZuZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKLTxOU0FuaW1hdGlvbkRl
bGVnYXRlPgotI2VuZGlmCitzdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgZGVmYXVsdEFuaW1h
dGlvbkR1cmF0aW9uID0gMC41OworCitzdGF0aWMgSW50UmVjdCBzY3JlZW5SZWN0T2ZDb250ZW50
cyhFbGVtZW50KiBlbGVtZW50KQogewotICAgIE5TVmlldyogX2FuaW1hdGlvblZpZXc7Ci0gICAg
Ci0gICAgQ0FMYXllciogX3JlbmRlcmVyTGF5ZXI7Ci0gICAgQ0FMYXllciogX2JhY2tncm91bmRM
YXllcjsKKyAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkg
JiYgZWxlbWVudC0+cmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigp
LT5lbmNsb3NpbmdMYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICBGbG9hdFF1YWQg
Y29udGVudHNCb3ggPSBzdGF0aWNfY2FzdDxGbG9hdFJlY3Q+KGVsZW1lbnQtPnJlbmRlcmVyKCkt
PmVuY2xvc2luZ0xheWVyKCktPmJhY2tpbmcoKS0+Y29udGVudHNCb3goKSk7CisgICAgICAgIGNv
bnRlbnRzQm94ID0gZWxlbWVudC0+cmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChjb250
ZW50c0JveCk7CisgICAgICAgIHJldHVybiBlbGVtZW50LT5yZW5kZXJlcigpLT52aWV3KCktPmZy
YW1lVmlldygpLT5jb250ZW50c1RvU2NyZWVuKGNvbnRlbnRzQm94LmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCkpOworICAgIH0KKyAgICByZXR1cm4gZWxlbWVudC0+c2NyZWVuUmVjdCgpOwogfQotLSAo
Q0FMYXllciopcmVuZGVyZXJMYXllcjsKLS0gKHZvaWQpc2V0UmVuZGVyZXJMYXllcjooQ0FMYXll
ciopcmVuZGVyZXJMYXllcjsKLS0gKENBTGF5ZXIqKWJhY2tncm91bmRMYXllcjsKLS0gKE5TVmll
dyopYW5pbWF0aW9uVmlldzsKLUBlbmQKIAotY2xhc3MgTWVkaWFFdmVudExpc3RlbmVyIDogcHVi
bGljIEV2ZW50TGlzdGVuZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlh
RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyKiBkZWxlZ2F0ZSk7
Ci0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYpOwotICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQq
KTsKLQotcHJpdmF0ZToKLSAgICBNZWRpYUV2ZW50TGlzdGVuZXIoV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIqIGRlbGVnYXRlKTsgCi0gICAgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIqIGRlbGVnYXRl
OwotfTsKLQotQGludGVyZmFjZSBXZWJGdWxsU2NyZWVuQ29udHJvbGxlcihQcml2YXRlKQotLSAo
dm9pZClfcmVxdWVzdEV4aXRGdWxsc2NyZWVuV2l0aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb247
Ci0tICh2b2lkKV91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW47Ci0tICh2b2lkKV91cGRh
dGVQb3dlckFzc2VydGlvbnM7Ci0tIChXZWJGdWxsc2NyZWVuV2luZG93ICopX2Z1bGxzY3JlZW5X
aW5kb3c7CitAaW50ZXJmYWNlIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyKFByaXZhdGUpPE5TQW5p
bWF0aW9uRGVsZWdhdGU+CistICh2b2lkKV91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxTY3JlZW47
CistICh2b2lkKV9zd2FwVmlldzooTlNWaWV3Kil2aWV3IHdpdGg6KE5TVmlldyopb3RoZXJWaWV3
OwogLSAoRG9jdW1lbnQqKV9kb2N1bWVudDsKLS0gKENGVGltZUludGVydmFsKV9hbmltYXRpb25E
dXJhdGlvbjsKLS0gKEJPT0wpX2lzQW55TW92aWVQbGF5aW5nOworLSAodm9pZClfc3RhcnRFbnRl
ckZ1bGxTY3JlZW5BbmltYXRpb25XaXRoRHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9u
OworLSAodm9pZClfc3RhcnRFeGl0RnVsbFNjcmVlbkFuaW1hdGlvbldpdGhEdXJhdGlvbjooTlNU
aW1lSW50ZXJ2YWwpZHVyYXRpb247CiBAZW5kCiAKIEBpbnRlcmZhY2UgTlNXaW5kb3coSXNPbkFj
dGl2ZVNwYWNlQWRkaXRpb25Gb3JUaWdlckFuZExlb3BhcmQpCkBAIC0xMDgsMjEgKzgxLDIxIEBA
IHByaXZhdGU6CiAtIChpZClpbml0CiB7CiAgICAgLy8gRG8gbm90IGRlZmVyIHdpbmRvdyBjcmVh
dGlvbiwgdG8gbWFrZSBzdXJlIC13aW5kb3dOdW1iZXIgaXMgY3JlYXRlZCAobmVlZGVkIGJ5IFdl
YldpbmRvd1NjYWxlQW5pbWF0aW9uKS4KLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tXZWJGdWxs
c2NyZWVuV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TWmVyb1JlY3Qgc3R5bGVN
YXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVk
IGRlZmVyOk5PXTsKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tXZWJGdWxsU2NyZWVuV2luZG93
IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ok5TWmVyb1JlY3Qgc3R5bGVNYXNrOk5TQm9yZGVy
bGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXTsK
ICAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoV2luZG93OndpbmRvd107CiAgICAgW3dpbmRvdyBy
ZWxlYXNlXTsKICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgW3NlbGYg
d2luZG93RGlkTG9hZF07Ci0gICAgX21lZGlhRXZlbnRMaXN0ZW5lciA9IE1lZGlhRXZlbnRMaXN0
ZW5lcjo6Y3JlYXRlKHNlbGYpOworCiAgICAgcmV0dXJuIHNlbGY7Ci0gICAgCiB9CiAKIC0gKHZv
aWQpZGVhbGxvYwogewogICAgIFtzZWxmIHNldFdlYlZpZXc6bmlsXTsKLSAgICBbX3BsYWNlaG9s
ZGVyVmlldyByZWxlYXNlXTsKKworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1S
ZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZl07CiAgICAgCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKICAgICBbc3VwZXIgZGVhbGxv
Y107CkBAIC0xMzAsNyArMTAzLDggQEAgcHJpdmF0ZToKIAogLSAodm9pZCl3aW5kb3dEaWRMb2Fk
CiB7Ci0gICAgCisgICAgW3N1cGVyIHdpbmRvd0RpZExvYWRdOworCiAgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxl
Y3RvcihhcHBsaWNhdGlvbkRpZFJlc2lnbkFjdGl2ZTopIG5hbWU6TlNBcHBsaWNhdGlvbkRpZFJl
c2lnbkFjdGl2ZU5vdGlmaWNhdGlvbiBvYmplY3Q6TlNBcHBdOwogICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0
b3IoYXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzOikgbmFtZTpOU0FwcGxpY2F0
aW9uRGlkQ2hhbmdlU2NyZWVuUGFyYW1ldGVyc05vdGlmaWNhdGlvbiBvYmplY3Q6TlNBcHBdOwog
fQpAQCAtMTU3LDE1NyArMTMxLDI1IEBAIHByaXZhdGU6CiAKIC0gKHZvaWQpc2V0RWxlbWVudDoo
UGFzc1JlZlB0cjxFbGVtZW50PillbGVtZW50CiB7Ci0gICAgLy8gV2hlbiBhIG5ldyBFbGVtZW50
IGlzIHNldCBhcyB0aGUgY3VycmVudCBmdWxsIHNjcmVlbiBlbGVtZW50LCByZWdpc3RlciBldmVu
dAotICAgIC8vIGxpc3RlbmVycyBvbiB0aGF0IEVsZW1lbnQncyB3aW5kb3csIGxpc3RlbmluZyBm
b3IgY2hhbmdlcyBpbiBtZWRpYSBwbGF5IHN0YXRlcy4KLSAgICAvLyBXZSB3aWxsIHVzZSB0aGVz
ZSBldmVudHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgc2NyZWVuc2F2ZXIg
YW5kIAotICAgIC8vIGRpc3BsYXkgc2xlZXAgdGltZXJzIHdoZW4gcGxheWluZyB2aWRlbyBpbiBm
dWxsIHNjcmVlbi4gTWFrZSBzdXJlIHRvIHVucmVnaXN0ZXIKLSAgICAvLyB0aGUgZXZlbnRzIG9u
IHRoZSBvbGQgZWxlbWVudCdzIHdpbmRvdywgaWYgbmVjZXNzYXJ5LCBhcyB3ZWxsLgotICAgIAot
ICAgIEV2ZW50TmFtZXMmIGV2ZW50TmFtZXMgPSBXZWJDb3JlOjpldmVudE5hbWVzKCk7Ci0gICAg
Ci0gICAgaWYgKF9lbGVtZW50KSB7Ci0gICAgICAgIERPTVdpbmRvdyogd2luZG93ID0gX2VsZW1l
bnQtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpOwotICAgICAgICBpZiAod2luZG93KSB7Ci0gICAg
ICAgICAgICB3aW5kb3ctPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcy5wbGF5RXZlbnQs
ICBfbWVkaWFFdmVudExpc3RlbmVyLmdldCgpLCB0cnVlKTsKLSAgICAgICAgICAgIHdpbmRvdy0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzLnBhdXNlRXZlbnQsIF9tZWRpYUV2ZW50TGlz
dGVuZXIuZ2V0KCksIHRydWUpOwotICAgICAgICAgICAgd2luZG93LT5yZW1vdmVFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZXMuZW5kZWRFdmVudCwgX21lZGlhRXZlbnRMaXN0ZW5lci5nZXQoKSwgdHJ1
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICAgIAogICAgIF9lbGVtZW50ID0gZWxlbWVudDsK
LSAgICAKLSAgICBpZiAoX2VsZW1lbnQpIHsKLSAgICAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBf
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCk7Ci0gICAgICAgIGlmICh3aW5kb3cpIHsK
LSAgICAgICAgICAgIHdpbmRvdy0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzLnBsYXlFdmVu
dCwgIF9tZWRpYUV2ZW50TGlzdGVuZXIsIHRydWUpOwotICAgICAgICAgICAgd2luZG93LT5hZGRF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMucGF1c2VFdmVudCwgX21lZGlhRXZlbnRMaXN0ZW5lciwg
dHJ1ZSk7Ci0gICAgICAgICAgICB3aW5kb3ctPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcy5l
bmRlZEV2ZW50LCBfbWVkaWFFdmVudExpc3RlbmVyLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0K
IH0KIAotLSAoUmVuZGVyQm94KilyZW5kZXJlciAKLXsKLSAgICByZXR1cm4gX3JlbmRlcmVyOwot
fQorI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBOU1dpbmRvd0NvbnRyb2xsZXIgb3ZlcnJp
ZGVzCiAKLS0gKHZvaWQpc2V0UmVuZGVyZXI6KFJlbmRlckJveCopcmVuZGVyZXIKKy0gKHZvaWQp
Y2FuY2VsT3BlcmF0aW9uOihpZClzZW5kZXIKIHsKLSAgICBfcmVuZGVyZXIgPSByZW5kZXJlcjsK
KyAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGV4aXRGdWxsU2NyZWVuKSB3aXRo
T2JqZWN0Om5pbCBhZnRlckRlbGF5OjBdOwogfQogCiAjcHJhZ21hIG1hcmsgLQogI3ByYWdtYSBt
YXJrIE5vdGlmaWNhdGlvbnMKIAotLSAodm9pZCl3aW5kb3dEaWRFeGl0RnVsbHNjcmVlbjooQk9P
TClmaW5pc2hlZAotewotICAgIGlmICghX2lzQW5pbWF0aW5nKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgaWYgKF9pc0Z1bGxzY3JlZW4pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBO
U0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7Ci0gICAgQVNTRVJUKF9lbGVtZW50KTsKLSAgICBbc2Vs
ZiBfZG9jdW1lbnRdLT5zZXRGdWxsU2NyZWVuUmVuZGVyZXJCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6
OmJsYWNrKTsKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZv
ckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOwotICAgIFtzZWxmIHNldEVsZW1lbnQ6bmlsXTsKLQot
ICAgIGlmIChmaW5pc2hlZCkgewotICAgICAgICBbc2VsZiBfdXBkYXRlTWVudUFuZERvY2tGb3JG
dWxsc2NyZWVuXTsgICAKLSAgICAgICAgW3NlbGYgX3VwZGF0ZVBvd2VyQXNzZXJ0aW9uc107Ci0g
ICAgICAgIAotICAgICAgICBbW193ZWJWaWV3IHdpbmRvd10gZGlzcGxheV07Ci0gICAgICAgIFtb
c2VsZiBfZnVsbHNjcmVlbldpbmRvd10gc2V0UmVuZGVyZXJMYXllcjpuaWxdOwotICAgICAgICBb
W3NlbGYgd2luZG93XSBjbG9zZV07Ci0gICAgfQotCi0gICAgTlNFbmFibGVTY3JlZW5VcGRhdGVz
KCk7Ci0KLSAgICBfaXNBbmltYXRpbmcgPSBOTzsKLSAgICBbc2VsZiBhdXRvcmVsZWFzZV07IC8v
IEFzc29jaWF0ZWQgLXJldGFpbiBpcyBpbiAtZXhpdEZ1bGxzY3JlZW4uCi19Ci0KLS0gKHZvaWQp
d2luZG93RGlkRW50ZXJGdWxsc2NyZWVuOihCT09MKWZpbmlzaGVkCi17Ci0gICAgaWYgKCFfaXNB
bmltYXRpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIV9pc0Z1bGxzY3JlZW4p
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVzKCk7Ci0g
ICAgW3NlbGYgX2RvY3VtZW50XS0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChf
ZWxlbWVudC5nZXQoKSk7Ci0gICAgW3NlbGYgX2RvY3VtZW50XS0+c2V0RnVsbFNjcmVlblJlbmRl
cmVyQmFja2dyb3VuZENvbG9yKENvbG9yOjpibGFjayk7Ci0gICAgCi0gICAgaWYgKGZpbmlzaGVk
KSB7Ci0gICAgICAgIFtzZWxmIF91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxzY3JlZW5dOwotICAg
ICAgICBbc2VsZiBfdXBkYXRlUG93ZXJBc3NlcnRpb25zXTsKLSAgICAgICAgW05TQ3Vyc29yIHNl
dEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOwotICAgIAotICAgICAgICAvLyBNb3ZlIHRoZSB3
ZWJWaWV3IGludG8gb3VyIGZ1bGxzY3JlZW4gV2luZG93Ci0gICAgICAgIGlmICghX3BsYWNlaG9s
ZGVyVmlldykKLSAgICAgICAgICAgIF9wbGFjZWhvbGRlclZpZXcgPSBbW05TVmlldyBhbGxvY10g
aW5pdF07Ci0KLSAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIHdlYlZpZXddOwotICAg
ICAgICBOU1dpbmRvdyAqd2ViV2luZG93ID0gW3dlYlZpZXcgd2luZG93XTsKLSAgICAgICAgTlNS
ZXNwb25kZXIgKndlYldpbmRvd0ZpcnN0UmVzcG9uZGVyID0gW3dlYldpbmRvdyBmaXJzdFJlc3Bv
bmRlcl07Ci0KLSAgICAgICAgLy8gRG8gbm90IHN3YXAgdGhlIHBsYWNlaG9sZGVyIGludG8gcGxh
Y2UgaWYgYWxyZWFkeSBpcyBpbiBhIHdpbmRvdywKLSAgICAgICAgLy8gYXNzdW1pbmcgdGhlIHBs
YWNlaG9sZGVyJ3Mgd2luZG93IHdpbGwgYWx3YXlzIGJlIHRoZSB3ZWJWaWV3J3MgCi0gICAgICAg
IC8vIG9yaWdpbmFsIHdpbmRvdy4KLSAgICAgICAgaWYgKCFbX3BsYWNlaG9sZGVyVmlldyB3aW5k
b3ddKSB7Ci0gICAgICAgICAgICBbX3BsYWNlaG9sZGVyVmlldyBzZXRGcmFtZTpbd2ViVmlldyBm
cmFtZV1dOyAgICAgICAgCi0gICAgICAgICAgICBbX3BsYWNlaG9sZGVyVmlldyBzZXRBdXRvcmVz
aXppbmdNYXNrOlt3ZWJWaWV3IGF1dG9yZXNpemluZ01hc2tdXTsKLSAgICAgICAgICAgIFtfcGxh
Y2Vob2xkZXJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgICAgICAgICAgW1t3ZWJWaWV3
IHN1cGVydmlld10gcmVwbGFjZVN1YnZpZXc6d2ViVmlldyB3aXRoOl9wbGFjZWhvbGRlclZpZXdd
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBbW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXdd
IGFkZFN1YnZpZXc6d2ViVmlld107Ci0gICAgICAgICAgICBbW3NlbGYgd2luZG93XSBtYWtlUmVz
cG9uZGVyOndlYldpbmRvd0ZpcnN0UmVzcG9uZGVyIGZpcnN0UmVzcG9uZGVySWZEZXNjZW5kYW50
T2ZWaWV3OndlYlZpZXddOwotICAgICAgICAgICAgW3dlYlZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFz
azpOU1ZpZXdXaWR0aFNpemFibGV8TlNWaWV3SGVpZ2h0U2l6YWJsZV07Ci0gICAgICAgICAgICBb
d2ViVmlldyBzZXRGcmFtZTpbKE5TVmlldyAqKVtbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XSBi
b3VuZHNdXTsKLSAgICAgICAgfQotCi0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQotICAgICAgICAvLyBJbiBMaW9u
LCBOU1dpbmRvdyB3aWxsIGFuaW1hdGUgaW50byBhbmQgb3V0IG9mIG9yZGVyT3V0IG9wZXJhdGlv
bnMuIFN1cHByZXNzIHRoYXQKLSAgICAgICAgLy8gYmVoYXZpb3IgaGVyZSwgbWFraW5nIHN1cmUg
dG8gcmVzZXQgdGhlIGFuaW1hdGlvbiBiZWhhdmlvciBhZnRlcndhcmQuCi0gICAgICAgIE5TV2lu
ZG93QW5pbWF0aW9uQmVoYXZpb3IgYW5pbWF0aW9uQmVoYXZpb3IgPSBbd2ViV2luZG93IGFuaW1h
dGlvbkJlaGF2aW9yXTsKLSAgICAgICAgW3dlYldpbmRvdyBzZXRBbmltYXRpb25CZWhhdmlvcjpO
U1dpbmRvd0FuaW1hdGlvbkJlaGF2aW9yTm9uZV07Ci0jZW5kaWYKLSAgICAgICAgW3dlYldpbmRv
dyBvcmRlck91dDpzZWxmXTsKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCi0gICAgICAgIFt3ZWJXaW5kb3cgc2V0
QW5pbWF0aW9uQmVoYXZpb3I6YW5pbWF0aW9uQmVoYXZpb3JdOwotI2VuZGlmCi0gICAgICAgIAot
ICAgICAgICBXZWJGdWxsc2NyZWVuV2luZG93KiB3aW5kb3cgPSBbc2VsZiBfZnVsbHNjcmVlbldp
bmRvd107Ci0gICAgICAgIFt3aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGJsYWNr
Q29sb3JdXTsKLSAgICAgICAgW3dpbmRvdyBzZXRPcGFxdWU6WUVTXTsKLQotICAgICAgICBbQ0FU
cmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldFZhbHVlOltOU051
bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTprQ0FUcmFuc2FjdGlvbkRpc2FibGVBY3Rp
b25zXTsKLSAgICAgICAgW1tbd2luZG93IGFuaW1hdGlvblZpZXddIGxheWVyXSBzZXRPcGFjaXR5
OjBdOwotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotICAgIH0KLSAgICBOU0VuYWJs
ZVNjcmVlblVwZGF0ZXMoKTsKLQotICAgIF9pc0FuaW1hdGluZyA9IE5POwotfQotCi0tICh2b2lk
KWFuaW1hdGlvbkRpZFN0b3A6KENBQW5pbWF0aW9uICopYW5pbSBmaW5pc2hlZDooQk9PTClmaW5p
c2hlZAotewotICAgIEJPT0wgaXNFbnRlcmluZ0Z1bGxzY3JlZW5BbmltYXRpb24gPSBbW2FuaW0g
dmFsdWVGb3JLZXk6aXNFbnRlcmluZ0Z1bGxzY3JlZW5LZXldIGJvb2xWYWx1ZV07Ci0gICAgCi0g
ICAgaWYgKCFpc0VudGVyaW5nRnVsbHNjcmVlbkFuaW1hdGlvbikKLSAgICAgICAgW3NlbGYgd2lu
ZG93RGlkRXhpdEZ1bGxzY3JlZW46ZmluaXNoZWRdOwotICAgIGVsc2UKLSAgICAgICAgW3NlbGYg
d2luZG93RGlkRW50ZXJGdWxsc2NyZWVuOmZpbmlzaGVkXTsKLX0KLQogLSAodm9pZClhcHBsaWNh
dGlvbkRpZFJlc2lnbkFjdGl2ZTooTlNOb3RpZmljYXRpb24qKW5vdGlmaWNhdGlvbgogeyAgIAog
ICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZnVsbHNjcmVlbldpbmRvdyBpcyBvbiB0aGUgYWN0
aXZlIHNwYWNlOyB0aGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZQogICAgIC8vIG9uIDEwLjYgYW5k
IGxhdGVyLCBzbyBkZWZhdWx0IHRvIFlFUyBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJs
ZToKLSAgICBOU1dpbmRvdyogZnVsbHNjcmVlbldpbmRvdyA9IFtzZWxmIF9mdWxsc2NyZWVuV2lu
ZG93XTsKKyAgICBOU1dpbmRvdyogZnVsbHNjcmVlbldpbmRvdyA9IFtzZWxmIHdpbmRvd107CiAg
ICAgQk9PTCBpc09uQWN0aXZlU3BhY2UgPSAoW2Z1bGxzY3JlZW5XaW5kb3cgcmVzcG9uZHNUb1Nl
bGVjdG9yOkBzZWxlY3Rvcihpc09uQWN0aXZlU3BhY2UpXSA/IFtmdWxsc2NyZWVuV2luZG93IGlz
T25BY3RpdmVTcGFjZV0gOiBZRVMpOwogCiAgICAgLy8gUmVwbGljYXRlIHRoZSBRdWlja1RpbWUg
UGxheWVyIChYKSBiZWhhdmlvciB3aGVuIGxvc2luZyBhY3RpdmUgYXBwbGljYXRpb24gc3RhdHVz
OgpAQCAtMzE1LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgLy8gc2luZ2xlIHNjcmVlbiBpcyBh
dmFpbGFibGUuKSAgSXMgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuIG9uIHRoZSBjdXJyZW50IHNwYWNl
PyBJRkYgc28sIAogICAgIC8vIHRoZW4gZXhpdCBmdWxsc2NyZWVuIG1vZGUuIAogICAgIGlmIChb
ZnVsbHNjcmVlbldpbmRvdyBzY3JlZW5dID09IFtbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJ
bmRleDowXSAmJiBpc09uQWN0aXZlU3BhY2UpCi0gICAgICAgICBbc2VsZiBfcmVxdWVzdEV4aXRG
dWxsc2NyZWVuV2l0aEFuaW1hdGlvbjpOT107CisgICAgICAgICBbc2VsZiBjYW5jZWxPcGVyYXRp
b246c2VsZl07CiB9CiAKIC0gKHZvaWQpYXBwbGljYXRpb25EaWRDaGFuZ2VTY3JlZW5QYXJhbWV0
ZXJzOihOU05vdGlmaWNhdGlvbiopbm90aWZpY2F0aW9uCkBAIC0zMjQsMzA2ICsxNjYsMjI3IEBA
IHByaXZhdGU6CiAgICAgLy8gdGhlIERvY2sncyBzaXplIG9yIGxvY2F0aW9uLCBvciB0aGV5IG1h
eSBoYXZlIGNoYW5nZWQgdGhlIGZ1bGxzY3JlZW4gc2NyZWVuJ3MgZGltZW5zaW9ucy4gCiAgICAg
Ly8gVXBkYXRlIG91ciBwcmVzZW50YXRpb24gcGFyYW1ldGVycywgYW5kIGVuc3VyZSB0aGF0IHRo
ZSBmdWxsIHNjcmVlbiB3aW5kb3cgb2NjdXBpZXMgdGhlIAogICAgIC8vIGVudGlyZSBzY3JlZW46
Ci0gICAgW3NlbGYgX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbHNjcmVlbl07CisgICAgW3NlbGYg
X3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbFNjcmVlbl07CiAgICAgTlNXaW5kb3cqIHdpbmRvdyA9
IFtzZWxmIHdpbmRvd107Ci0gICAgW3dpbmRvdyBzZXRGcmFtZTpbW3dpbmRvdyBzY3JlZW5dIGZy
YW1lXSBkaXNwbGF5OllFU107CisgICAgTlNSZWN0IHNjcmVlbkZyYW1lID0gW1t3aW5kb3cgc2Ny
ZWVuXSBmcmFtZV07CisgICAgW3dpbmRvdyBzZXRGcmFtZTpzY3JlZW5GcmFtZSBkaXNwbGF5OllF
U107CisgICAgW19iYWNrZ3JvdW5kV2luZG93LmdldCgpIHNldEZyYW1lOnNjcmVlbkZyYW1lIGRp
c3BsYXk6WUVTXTsKIH0KIAogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBFeHBvc2VkIElu
dGVyZmFjZQogCi0tICh2b2lkKWVudGVyRnVsbHNjcmVlbjooTlNTY3JlZW4gKilzY3JlZW4KKy0g
KHZvaWQpZW50ZXJGdWxsU2NyZWVuOihOU1NjcmVlbiAqKXNjcmVlbgogewotICAgIC8vIERpc2Fi
bGUgYW5pbWF0aW9uIGlmIHdlIGFyZSBhbHJlYWR5IGluIGZ1bGwtc2NyZWVuIG1vZGUuCi0gICAg
Qk9PTCBzaG91bGRBbmltYXRlID0gIV9pc0Z1bGxzY3JlZW47Ci0gICAgCi0gICAgaWYgKF9pc0Fu
aW1hdGluZykgewotICAgICAgICAvLyBUaGUgQ0FBbmltYXRpb24gZGVsZWdhdGUgZnVuY3Rpb25z
IHdpbGwgb25seSBiZSBjYWxsZWQgdGhlCi0gICAgICAgIC8vIG5leHQgdHJpcCB0aHJvdWdoIHRo
ZSBydW4tbG9vcCwgc28gbWFudWFsbHkgY2FsbCB0aGUgZGVsZWdhdGUKLSAgICAgICAgLy8gZnVu
Y3Rpb24gaGVyZSwgbGV0dGluZyBpdCBrbm93IHRoZSBhbmltYXRpb24gZGlkIG5vdCBjb21wbGV0
ZToKLSAgICAgICAgW3NlbGYgd2luZG93RGlkRXhpdEZ1bGxzY3JlZW46Tk9dOwotICAgICAgICBB
U1NFUlQoIV9pc0FuaW1hdGluZyk7Ci0gICAgfQotICAgIF9pc0Z1bGxzY3JlZW4gPSBZRVM7Ci0g
ICAgX2lzQW5pbWF0aW5nID0gWUVTOwotICAgIAotICAgIC8vIHNldEVsZW1lbnQ6IG11c3QgYmUg
Y2FsbGVkIHdpdGggYSBub24tbmlsIHZhbHVlIGJlZm9yZSBjYWxsaW5nIGVudGVyRnVsbHNjcmVl
bjouCi0gICAgQVNTRVJUKF9lbGVtZW50KTsKKyAgICBpZiAoX2lzRnVsbFNjcmVlbikKKyAgICAg
ICAgcmV0dXJuOworICAgIF9pc0Z1bGxTY3JlZW4gPSBZRVM7CiAgICAgCi0gICAgTlNEaXNhYmxl
U2NyZWVuVXBkYXRlcygpOworICAgIFtzZWxmIF91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxTY3Jl
ZW5dOyAgIAogICAgIAogICAgIGlmICghc2NyZWVuKQogICAgICAgICBzY3JlZW4gPSBbTlNTY3Jl
ZW4gbWFpblNjcmVlbl07CiAgICAgTlNSZWN0IHNjcmVlbkZyYW1lID0gW3NjcmVlbiBmcmFtZV07
CiAgICAgCi0gICAgV2ViVmlldyogd2ViVmlldyA9IFtzZWxmIHdlYlZpZXddOwotICAgIE5TUmVj
dCB3ZWJWaWV3RnJhbWUgPSBbd2ViVmlldyBjb252ZXJ0UmVjdFRvQmFzZTpbd2ViVmlldyBmcmFt
ZV1dOwotICAgIHdlYlZpZXdGcmFtZS5vcmlnaW4gPSBbW3dlYlZpZXcgd2luZG93XSBjb252ZXJ0
QmFzZVRvU2NyZWVuOndlYlZpZXdGcmFtZS5vcmlnaW5dOworICAgIE5TUmVjdCB3ZWJWaWV3RnJh
bWUgPSBbW193ZWJWaWV3IHdpbmRvd10gY29udmVydFJlY3RUb1NjcmVlbjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFtfd2ViVmlldyBjb252ZXJ0UmVjdDpbX3dlYlZpZXcgZnJhbWVdIHRv
VmlldzpuaWxdXTsKICAgICAKLSAgICBOU1JlY3QgZWxlbWVudEZyYW1lID0gX2VsZW1lbnQtPnNj
cmVlblJlY3QoKTsKKyAgICAvLyBGbGlwIGNvb3JkaW5hdGUgc3lzdGVtOgorICAgIHdlYlZpZXdG
cmFtZS5vcmlnaW4ueSA9IE5TTWF4WShbW1tOU1NjcmVlbiBzY3JlZW5zXSBvYmplY3RBdEluZGV4
OjBdIGZyYW1lXSkgLSBDR1JlY3RHZXRNYXhZKHdlYlZpZXdGcmFtZSk7CiAgICAgCi0gICAgLy8g
SW4gdGhlIGNhc2Ugb2YgYSBtdWx0aS1tb25pdG9yIHNldHVwIHdoZXJlIHRoZSB3ZWJWaWV3IHN0
cmFkZGxlcyB0d28KLSAgICAvLyBtb25pdG9ycywgd2UgbXVzdCBjcmVhdGUgYSB3aW5kb3cgbGFy
Z2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGRlc3RpbmF0aW9uCi0gICAgLy8gZnJhbWUgYW5kIHRo
ZSBpbml0aWFsIGZyYW1lLgotICAgIE5TUmVjdCB3aW5kb3dGcmFtZSA9IE5TVW5pb25SZWN0KHNj
cmVlbkZyYW1lLCBlbGVtZW50RnJhbWUpOwotICAgIFtbc2VsZiB3aW5kb3ddIHNldEZyYW1lOndp
bmRvd0ZyYW1lIGRpc3BsYXk6WUVTXTsKKyAgICBDR1dpbmRvd0lEIHdpbmRvd0lEID0gW1tfd2Vi
VmlldyB3aW5kb3ddIHdpbmRvd051bWJlcl07CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHdl
YlZpZXdDb250ZW50cyhBZG9wdENGLCBDR1dpbmRvd0xpc3RDcmVhdGVJbWFnZShOU1JlY3RUb0NH
UmVjdCh3ZWJWaWV3RnJhbWUpLCBrQ0dXaW5kb3dMaXN0T3B0aW9uSW5jbHVkaW5nV2luZG93LCB3
aW5kb3dJRCwga0NHV2luZG93SW1hZ2VTaG91bGRCZU9wYXF1ZSkpOwogICAgIAotICAgIC8vIElu
IGEgcHJldmlvdXMgaW5jYXJuYXRpb24sIHRoZSBOU1dpbmRvdyBhdHRhY2hlZCB0byB0aGlzIGNv
bnRyb2xsZXIgbWF5IGhhdmUKLSAgICAvLyBiZWVuIG9uIGEgZGlmZmVyZW50IHNjcmVlbi4gVGVt
cG9yYXJpbHkgY2hhbmdlIHRoZSBjb2xsZWN0aW9uQmVoYXZpb3Igb2YgdGhlIHdpbmRvdzoKLSAg
ICBOU1dpbmRvd0NvbGxlY3Rpb25CZWhhdmlvciBiZWhhdmlvciA9IFtbc2VsZiB3aW5kb3ddIGNv
bGxlY3Rpb25CZWhhdmlvcl07Ci0gICAgW1tzZWxmIHdpbmRvd10gc2V0Q29sbGVjdGlvbkJlaGF2
aW9yOk5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yQ2FuSm9pbkFsbFNwYWNlc107Ci0gICAgW1tz
ZWxmIHdpbmRvd10gbWFrZUtleUFuZE9yZGVyRnJvbnQ6c2VsZl07Ci0gICAgW1tzZWxmIHdpbmRv
d10gc2V0Q29sbGVjdGlvbkJlaGF2aW9yOmJlaGF2aW9yXTsKLSAgICAKLSAgICBOU1ZpZXcqIGFu
aW1hdGlvblZpZXcgPSBbW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddIGFuaW1hdGlvblZpZXddOwot
ICAgIAotICAgIE5TUmVjdCBiYWNrZ3JvdW5kQm91bmRzID0ge1tbc2VsZiB3aW5kb3ddIGNvbnZl
cnRTY3JlZW5Ub0Jhc2U6c2NyZWVuRnJhbWUub3JpZ2luXSwgc2NyZWVuRnJhbWUuc2l6ZX07Ci0g
ICAgYmFja2dyb3VuZEJvdW5kcyA9IFthbmltYXRpb25WaWV3IGNvbnZlcnRSZWN0RnJvbUJhc2U6
YmFja2dyb3VuZEJvdW5kc107Ci0gICAgLy8gRmxpcCB0aGUgYmFja2dyb3VuZCBsYXllcidzIGNv
b3JkaW5hdGUgc3lzdGVtLgotICAgIGJhY2tncm91bmRCb3VuZHMub3JpZ2luLnkgPSB3aW5kb3dG
cmFtZS5zaXplLmhlaWdodCAtIE5TTWF4WShiYWNrZ3JvdW5kQm91bmRzKTsKLSAgICAKLSAgICAv
LyBTZXQgb3VyIGZ1bGxzY3JlZW4gZWxlbWVudCdzIGluaXRpYWwgZnJhbWUsIGFuZCBmbGlwIHRo
ZSBjb29yZGluYXRlIHN5c3RlbXMgZnJvbQotICAgIC8vIHNjcmVlbiBjb29yZGluYXRlcyAoYm90
dG9tL2xlZnQpIHRvIGxheWVyIGNvb3JkaW5hdGVzICh0b3AvbGVmdCk6Ci0gICAgX2luaXRpYWxG
cmFtZSA9IE5TUmVjdFRvQ0dSZWN0KE5TSW50ZXJzZWN0aW9uUmVjdChlbGVtZW50RnJhbWUsIHdl
YlZpZXdGcmFtZSkpOwotICAgIF9pbml0aWFsRnJhbWUub3JpZ2luLnkgPSBzY3JlZW5GcmFtZS5z
aXplLmhlaWdodCAtIENHUmVjdEdldE1heFkoX2luaXRpYWxGcmFtZSk7Ci0gICAgCi0gICAgLy8g
SW5mb3JtIHRoZSBkb2N1bWVudCB0aGF0IHdlIHdpbGwgYmVnaW4gZW50ZXJpbmcgZnVsbCBzY3Jl
ZW4uIFRoaXMgd2lsbCBjaGFuZ2UKLSAgICAvLyBwc2V1ZG8tY2xhc3NlcyBvbiB0aGUgZnVsbHNj
cmVlbiBlbGVtZW50IGFuZCB0aGUgZG9jdW1lbnQgZWxlbWVudC4KLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBbc2VsZiBfZG9jdW1lbnRdOwotICAgIGRvY3VtZW50LT53ZWJraXRXaWxsRW50ZXJG
dWxsU2NyZWVuRm9yRWxlbWVudChfZWxlbWVudC5nZXQoKSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sg
dG8gc2VlIGlmIHRoZSBmdWxsc2NyZWVuIHJlbmRlcmVyIGlzIGNvbXBvc2l0ZWQuIElmIG5vdCwg
YWNjZWxlcmF0ZWQgZ3JhcGhpY3MgCi0gICAgLy8gbWF5IGJlIGRpc2FibGVkLiBJbiB0aGlzIGNh
c2UsIGRvIG5vdCBhdHRlbXB0IHRvIGFuaW1hdGUgdGhlIGNvbnRlbnRzIGludG8gcGxhY2U7IAot
ICAgIC8vIG1lcmVseSBzbmFwIHRvIHRoZSBmaW5hbCBwb3NpdGlvbjoKLSAgICBpZiAoIXNob3Vs
ZEFuaW1hdGUgfHwgIV9yZW5kZXJlciB8fCAhX3JlbmRlcmVyLT5sYXllcigpLT5pc0NvbXBvc2l0
ZWQoKSkgewotICAgICAgICBbc2VsZiB3aW5kb3dEaWRFbnRlckZ1bGxzY3JlZW46WUVTXTsKLSAg
ICAgICAgTlNFbmFibGVTY3JlZW5VcGRhdGVzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9ICAg
IAorICAgIE5TRGlzYWJsZVNjcmVlblVwZGF0ZXMoKTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRB
dXRvZGlzcGxheTpOT107CiAgICAgCi0gICAgLy8gU2V0IHVwIHRoZSBmaW5hbCBzdHlsZSBvZiB0
aGUgRnVsbFNjcmVlbiByZW5kZXIgYmxvY2suIFNldCBhbiBhYnNvbHV0ZQotICAgIC8vIHdpZHRo
IGFuZCBoZWlnaHQgZXF1YWwgdG8gdGhlIHNpemUgb2YgdGhlIHNjcmVlbiwgYW5kIGFuY2hvciB0
aGUgbGF5ZXIKLSAgICAvLyBhdCB0aGUgdG9wLCBsZWZ0IGF0ICgwLDApLiBUaGUgUmVuZGVyRnVs
bFNjcmVlbiBzdHlsZSBpcyBhbHJlYWR5IHNldCAKLSAgICAvLyB0byBwb3NpdGlvbjpmaXhlZC4K
LSAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRGdWxsU2NyZWVuUmVuZGVyZXJTaXplKEludFNpemUo
c2NyZWVuRnJhbWUuc2l6ZSkpOwotICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEZ1bGxTY3JlZW5S
ZW5kZXJlckJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIE5TUmVzcG9u
ZGVyICp3ZWJXaW5kb3dGaXJzdFJlc3BvbmRlciA9IFtbX3dlYlZpZXcgd2luZG93XSBmaXJzdFJl
c3BvbmRlcl07CisgICAgW1tzZWxmIHdpbmRvd10gc2V0RnJhbWU6c2NyZWVuRnJhbWUgZGlzcGxh
eTpOT107CisKKyAgICBfaW5pdGlhbEZyYW1lID0gc2NyZWVuUmVjdE9mQ29udGVudHMoX2VsZW1l
bnQuZ2V0KCkpOworCisgICAgLy8gU3dhcCB0aGUgd2ViVmlldyBwbGFjZWhvbGRlciBpbnRvIHBs
YWNlLgorICAgIGlmICghX3dlYlZpZXdQbGFjZWhvbGRlcikgeworICAgICAgICBfd2ViVmlld1Bs
YWNlaG9sZGVyLmFkb3B0TlMoW1tOU0ltYWdlVmlldyBhbGxvY10gaW5pdF0pOworICAgICAgICBb
X3dlYlZpZXdQbGFjZWhvbGRlci5nZXQoKSBzZXRMYXllcjpbQ0FMYXllciBsYXllcl1dOworICAg
ICAgICBbX3dlYlZpZXdQbGFjZWhvbGRlci5nZXQoKSBzZXRXYW50c0xheWVyOllFU107CisgICAg
fQorICAgIFtbX3dlYlZpZXdQbGFjZWhvbGRlci5nZXQoKSBsYXllcl0gc2V0Q29udGVudHM6KGlk
KXdlYlZpZXdDb250ZW50cy5nZXQoKV07CisgICAgW3NlbGYgX3N3YXBWaWV3Ol93ZWJWaWV3IHdp
dGg6X3dlYlZpZXdQbGFjZWhvbGRlci5nZXQoKV07CiAgICAgCi0gICAgLy8gQ2F1c2UgdGhlIGRv
Y3VtZW50IHRvIGxheW91dCwgdGh1cyBjYWxjdWxhdGluZyBhIG5ldyBmdWxsc2NyZWVuIGVsZW1l
bnQgc2l6ZToKLSAgICBbc2VsZiBfZG9jdW1lbnRdLT51cGRhdGVMYXlvdXQoKTsKKyAgICAvLyBU
aGVuIGluc2VydCB0aGUgV2ViVmlldyBpbnRvIHRoZSBmdWxsIHNjcmVlbiB3aW5kb3cKKyAgICBO
U1ZpZXcqIGNvbnRlbnRWaWV3ID0gW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddOworICAgIFtj
b250ZW50VmlldyBhZGRTdWJ2aWV3Ol93ZWJWaWV3IHBvc2l0aW9uZWQ6TlNXaW5kb3dCZWxvdyBy
ZWxhdGl2ZVRvOm5pbF07CisgICAgW193ZWJWaWV3IHNldEZyYW1lOltjb250ZW50VmlldyBib3Vu
ZHNdXTsKICAgICAKLSAgICAvLyBGSVhNRTogdHJ5IHRvIHVzZSB0aGUgZnVsbHNjcmVlbiBlbGVt
ZW50J3MgY2FsY3VsYXRlZCB4LCB5LCB3aWR0aCwgYW5kIGhlaWdodCBpbnN0ZWFkIG9mIHRoZQot
ICAgIC8vIHJlbmRlckJveCBmdW5jdGlvbnM6Ci0gICAgUmVuZGVyQm94KiBjaGlsZFJlbmRlcmVy
ID0gX3JlbmRlcmVyLT5maXJzdENoaWxkQm94KCk7Ci0gICAgQ0dSZWN0IGRlc3RpbmF0aW9uRnJh
bWUgPSBDR1JlY3RNYWtlKGNoaWxkUmVuZGVyZXItPngoKSwgY2hpbGRSZW5kZXJlci0+eSgpLCBj
aGlsZFJlbmRlcmVyLT53aWR0aCgpLCBjaGlsZFJlbmRlcmVyLT5oZWlnaHQoKSk7ICAgIAotICAg
IAotICAgIC8vIFNvbWUgcHJvcGVydGllcyBoYXZlbid0IHByb3BvZ2F0ZWQgZnJvbSB0aGUgR3Jh
cGhpY3NMYXllciB0byB0aGUgQ0FMYXllciB5ZXQuIFNvCi0gICAgLy8gdGVsbCB0aGUgcmVuZGVy
ZXIncyBsYXllciB0byBzeW5jIGl0J3MgY29tcG9zaXRpbmcgc3RhdGU6Ci0gICAgR3JhcGhpY3NM
YXllciogcmVuZGVyZXJHcmFwaGljcyA9IF9yZW5kZXJlci0+bGF5ZXIoKS0+YmFja2luZygpLT5n
cmFwaGljc0xheWVyKCk7Ci0gICAgcmVuZGVyZXJHcmFwaGljcy0+c3luY0NvbXBvc2l0aW5nU3Rh
dGUoZGVzdGluYXRpb25GcmFtZSk7ICAgIAotCi0gICAgQ0FMYXllciogcmVuZGVyZXJMYXllciA9
IHJlbmRlcmVyR3JhcGhpY3MtPnBsYXRmb3JtTGF5ZXIoKTsKLSAgICBbW3NlbGYgX2Z1bGxzY3Jl
ZW5XaW5kb3ddIHNldFJlbmRlcmVyTGF5ZXI6cmVuZGVyZXJMYXllcl07ICAgIAotICAgIAotICAg
IENGVGltZUludGVydmFsIGR1cmF0aW9uID0gW3NlbGYgX2FuaW1hdGlvbkR1cmF0aW9uXTsKLQot
ICAgIC8vIENyZWF0ZSBhIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0aGF0IHdpbGwgdHJhbnNmb3Jt
IHRoZSByZW5kZXJlciBsYXllciBzdWNoIHRoYXQgCi0gICAgLy8gdGhlIGZ1bGxzY3JlZW4gZWxl
bWVudCBhcHBlYXJzIHRvIG1vdmUgZnJvbSBpdHMgc3RhcnRpbmcgcG9zaXRpb24gYW5kIHNpemUg
dG8gaXRzCi0gICAgLy8gZmluYWwgb25lLiBQZXJmb3JtIHRoZSB0cmFuc2Zvcm1hdGlvbiBpbiB0
d28gc3RlcHMsIHVzaW5nIHRoZSBDQUxheWVyJ3MgbWF0cml4IAotICAgIC8vIG1hdGggdG8gY2Fs
Y3VsYXRlIHRoZSBlZmZlY3RzIG9mIGVhY2ggc3RlcDoKLSAgICAvLyAxLiBBcHBseSBhIHNjYWxl
IHRyYW5mb3JtIHRvIHNocmluayB0aGUgYXBwYXJlbnQgc2l6ZSBvZiB0aGUgbGF5ZXIgdG8gdGhl
IG9yaWdpbmFsCi0gICAgLy8gICAgZWxlbWVudCBzY3JlZW4gc2l6ZS4KLSAgICAvLyAyLiBBcHBs
eSBhIHRyYW5zbGF0aW9uIHRyYW5zZm9ybSB0byBtb3ZlIHRoZSBzaHJ1bmsgbGF5ZXIgaW50byB0
aGUgc2FtZSBzY3JlZW4gcG9zaXRpb24KLSAgICAvLyAgICBhcyB0aGUgb3JpZ2luYWwgZWxlbWVu
dC4KLSAgICBDQVRyYW5zZm9ybTNEIHNocmlua1RyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtl
U2NhbGUoX2luaXRpYWxGcmFtZS5zaXplLndpZHRoIC8gZGVzdGluYXRpb25GcmFtZS5zaXplLndp
ZHRoLCBfaW5pdGlhbEZyYW1lLnNpemUuaGVpZ2h0IC8gZGVzdGluYXRpb25GcmFtZS5zaXplLmhl
aWdodCwgMSk7Ci0gICAgW3JlbmRlcmVyTGF5ZXIgc2V0VHJhbnNmb3JtOnNocmlua1RyYW5zZm9y
bV07Ci0gICAgQ0dSZWN0IHNocnVua0Rlc3RpbmF0aW9uRnJhbWUgPSBbcmVuZGVyZXJMYXllciBj
b252ZXJ0UmVjdDpkZXN0aW5hdGlvbkZyYW1lIHRvTGF5ZXI6W2FuaW1hdGlvblZpZXcgbGF5ZXJd
XTsKLSAgICBDQVRyYW5zZm9ybTNEIG1vdmVUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVRy
YW5zbGF0aW9uKF9pbml0aWFsRnJhbWUub3JpZ2luLnggLSBzaHJ1bmtEZXN0aW5hdGlvbkZyYW1l
Lm9yaWdpbi54LCBfaW5pdGlhbEZyYW1lLm9yaWdpbi55IC0gc2hydW5rRGVzdGluYXRpb25GcmFt
ZS5vcmlnaW4ueSwgMCk7Ci0gICAgQ0FUcmFuc2Zvcm0zRCBmaW5hbFRyYW5zZm9ybSA9IENBVHJh
bnNmb3JtM0RDb25jYXQoc2hyaW5rVHJhbnNmb3JtLCBtb3ZlVHJhbnNmb3JtKTsKLSAgICBbcmVu
ZGVyZXJMYXllciBzZXRUcmFuc2Zvcm06ZmluYWxUcmFuc2Zvcm1dOwotCi0gICAgQ0FMYXllciog
YmFja2dyb3VuZExheWVyID0gW1tzZWxmIF9mdWxsc2NyZWVuV2luZG93XSBiYWNrZ3JvdW5kTGF5
ZXJdOwotCi0gICAgLy8gU3RhcnQgdGhlIG9wYWNpdHkgYW5pbWF0aW9uLiBXZSBjYW4gdXNlIGlt
cGxpY2l0IGFuaW1hdGlvbnMgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGNhcmUgd2hlbgotICAgIC8v
IHRoZSBhbmltYXRpb24gZmluaXNoZXMuCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAg
IFtDQVRyYW5zYWN0aW9uIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmR1cmF0
aW9uXSBmb3JLZXk6a0NBVHJhbnNhY3Rpb25BbmltYXRpb25EdXJhdGlvbl07Ci0gICAgW2JhY2tn
cm91bmRMYXllciBzZXRPcGFjaXR5OjFdOwotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cisg
ICAgW1tzZWxmIHdpbmRvd10gbWFrZVJlc3BvbmRlcjp3ZWJXaW5kb3dGaXJzdFJlc3BvbmRlciBm
aXJzdFJlc3BvbmRlcklmRGVzY2VuZGFudE9mVmlldzpfd2ViVmlld107CiAgICAgCi0gICAgLy8g
VXNlIGEgQ0FCYXNpY0FuaW1hdGlvbiBoZXJlIGZvciB0aGUgem9vbSBlZmZlY3QuIFdlIHdhbnQg
dG8gYmUgbm90aWZpZWQgdGhhdCB0aGUgYW5pbWF0aW9uIGhhcyAKLSAgICAvLyBjb21wbGV0ZWQg
Ynkgd2F5IG9mIHRoZSBDQUFuaW1hdGlvbiBkZWxlZ2F0ZS4KLSAgICBDQUJhc2ljQW5pbWF0aW9u
KiB6b29tQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6
QCJ0cmFuc2Zvcm0iXTsKLSAgICBbem9vbUFuaW1hdGlvbiBzZXRGcm9tVmFsdWU6W05TVmFsdWUg
dmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpmaW5hbFRyYW5zZm9ybV1dOwotICAgIFt6b29tQW5pbWF0
aW9uIHNldFRvVmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDpDQVRyYW5zZm9y
bTNESWRlbnRpdHldXTsKLSAgICBbem9vbUFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAg
ICBbem9vbUFuaW1hdGlvbiBzZXREdXJhdGlvbjpkdXJhdGlvbl07Ci0gICAgW3pvb21BbmltYXRp
b24gc2V0VGltaW5nRnVuY3Rpb246W0NBTWVkaWFUaW1pbmdGdW5jdGlvbiBmdW5jdGlvbldpdGhO
YW1lOmtDQU1lZGlhVGltaW5nRnVuY3Rpb25FYXNlSW5FYXNlT3V0XV07Ci0gICAgW3pvb21Bbmlt
YXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107Ci0gICAgW3pvb21BbmltYXRp
b24gc2V0VmFsdWU6KGlkKWtDRkJvb2xlYW5UcnVlIGZvcktleTppc0VudGVyaW5nRnVsbHNjcmVl
bktleV07Ci0gICAgCi0gICAgLy8gRGlzYWJsZSBpbXBsaWNpdCBhbmltYXRpb25zIGFuZCBzZXQg
dGhlIGxheWVyJ3MgdHJhbnNmb3JtYXRpb24gbWF0cml4IHRvIGl0cyBmaW5hbCBzdGF0ZS4KLSAg
ICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0VmFsdWU6W05T
TnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OmtDQVRyYW5zYWN0aW9uRGlzYWJsZUFj
dGlvbnNdOwotICAgIFtyZW5kZXJlckxheWVyIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNESWRl
bnRpdHldOwotICAgIFtyZW5kZXJlckxheWVyIGFkZEFuaW1hdGlvbjp6b29tQW5pbWF0aW9uIGZv
cktleTpAInpvb20iXTsKLSAgICBbYmFja2dyb3VuZExheWVyIHNldEZyYW1lOk5TUmVjdFRvQ0dS
ZWN0KGJhY2tncm91bmRCb3VuZHMpXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworICAg
IFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9l
bGVtZW50LmdldCgpKTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRBbmltYXRpbmdGdWxsU2Ny
ZWVuKHRydWUpOworICAgIFtzZWxmIF9kb2N1bWVudF0tPnVwZGF0ZUxheW91dCgpOworCisgICAg
X2ZpbmFsRnJhbWUgPSBzY3JlZW5SZWN0T2ZDb250ZW50cyhfZWxlbWVudC5nZXQoKSk7CiAgICAg
Ci0gICAgTlNFbmFibGVTY3JlZW5VcGRhdGVzKCk7CisgICAgW3NlbGYgX3VwZGF0ZU1lbnVBbmRE
b2NrRm9yRnVsbFNjcmVlbl07ICAgCisgICAgCisgICAgW3NlbGYgX3N0YXJ0RW50ZXJGdWxsU2Ny
ZWVuQW5pbWF0aW9uV2l0aER1cmF0aW9uOmRlZmF1bHRBbmltYXRpb25EdXJhdGlvbl07CisKKyAg
ICBfaXNFbnRlcmluZ0Z1bGxTY3JlZW4gPSB0cnVlOwogfQogCi0tICh2b2lkKWV4aXRGdWxsc2Ny
ZWVuCistICh2b2lkKWZpbmlzaGVkRW50ZXJGdWxsU2NyZWVuQW5pbWF0aW9uOihib29sKWNvbXBs
ZXRlZAogewotICAgIGlmICghX2lzRnVsbHNjcmVlbikKLSAgICAgICAgcmV0dXJuOyAgICAKLSAg
ICAgIAotICAgIENBVHJhbnNmb3JtM0Qgc3RhcnRUcmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNESWRl
bnRpdHk7Ci0gICAgaWYgKF9pc0FuaW1hdGluZykgewotICAgICAgICBpZiAoX3JlbmRlcmVyICYm
IF9yZW5kZXJlci0+bGF5ZXIoKS0+aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgIENBTGF5
ZXIqIHJlbmRlcmVyTGF5ZXIgPSBfcmVuZGVyZXItPmxheWVyKCktPmJhY2tpbmcoKS0+Z3JhcGhp
Y3NMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7Ci0gICAgICAgICAgICBzdGFydFRyYW5zZm9ybSA9
IFtbcmVuZGVyZXJMYXllciBwcmVzZW50YXRpb25MYXllcl0gdHJhbnNmb3JtXTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgLy8gVGhlIENBQW5pbWF0aW9uIGRlbGVnYXRlIGZ1bmN0aW9u
cyB3aWxsIG9ubHkgYmUgY2FsbGVkIHRoZQotICAgICAgICAvLyBuZXh0IHRyaXAgdGhyb3VnaCB0
aGUgcnVuLWxvb3AsIHNvIG1hbnVhbGx5IGNhbGwgdGhlIGRlbGVnYXRlCi0gICAgICAgIC8vIGZ1
bmN0aW9uIGhlcmUsIGxldHRpbmcgaXQga25vdyB0aGUgYW5pbWF0aW9uIGRpZCBub3QgY29tcGxl
dGU6Ci0gICAgICAgIFtzZWxmIHdpbmRvd0RpZEVudGVyRnVsbHNjcmVlbjpOT107Ci0gICAgICAg
IEFTU0VSVCghX2lzQW5pbWF0aW5nKTsKLSAgICB9Ci0gICAgX2lzRnVsbHNjcmVlbiA9IE5POwot
ICAgIF9pc0FuaW1hdGluZyA9IFlFUzsKLSAgICAKLSAgICBOU0Rpc2FibGVTY3JlZW5VcGRhdGVz
KCk7Ci0gICAgCisgICAgaWYgKCFfaXNFbnRlcmluZ0Z1bGxTY3JlZW4pCisgICAgICAgIHJldHVy
bjsKKyAgICBfaXNFbnRlcmluZ0Z1bGxTY3JlZW4gPSBOTzsKICAgICAKLSAgICAvLyBUaGUgZnVs
bHNjcmVlbiBhbmltYXRpb24gbWF5IGhhdmUgYmVlbiBjYW5jZWxsZWQgYmVmb3JlIHRoZSAKLSAg
ICAvLyB3ZWJWaWV3IHdhcyBtb3ZlZCB0byB0aGUgZnVsbHNjcmVlbiB3aW5kb3cuIENoZWNrIHRv
IHNlZQotICAgIC8vIGlmIHRoZSBfcGxhY2Vob2xkZXJWaWV3IGV4aXN0cyBhbmQgaXMgaW4gYSB3
aW5kb3cgYmVmb3JlCi0gICAgLy8gYXR0ZW1wdGluZyB0byBzd2FwIHRoZSB3ZWJWaWV3IGJhY2sg
dG8gaXQncyBvcmlnaW5hbCB0cmVlOgotICAgIGlmIChfcGxhY2Vob2xkZXJWaWV3ICYmIFtfcGxh
Y2Vob2xkZXJWaWV3IHdpbmRvd10pIHsKLSAgICAgICAgLy8gTW92ZSB0aGUgd2ViVmlldyBiYWNr
IHRvIGl0cyBvd24gbmF0aXZlIHdpbmRvdzoKLSAgICAgICAgV2ViVmlldyogd2ViVmlldyA9IFtz
ZWxmIHdlYlZpZXddOwotICAgICAgICBOU1Jlc3BvbmRlciAqZnVsbFNjcmVlbldpbmRvd0ZpcnN0
UmVzcG9uZGVyID0gW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25kZXJdOwotICAgICAgICBbd2Vi
VmlldyBzZXRGcmFtZTpbX3BsYWNlaG9sZGVyVmlldyBmcmFtZV1dOwotICAgICAgICBbd2ViVmll
dyBzZXRBdXRvcmVzaXppbmdNYXNrOltfcGxhY2Vob2xkZXJWaWV3IGF1dG9yZXNpemluZ01hc2td
XTsKLSAgICAgICAgW3dlYlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAgIFtbX3Bs
YWNlaG9sZGVyVmlldyBzdXBlcnZpZXddIHJlcGxhY2VTdWJ2aWV3Ol9wbGFjZWhvbGRlclZpZXcg
d2l0aDp3ZWJWaWV3XTsKLSAgICAgICAgW1t3ZWJWaWV3IHdpbmRvd10gbWFrZVJlc3BvbmRlcjpm
dWxsU2NyZWVuV2luZG93Rmlyc3RSZXNwb25kZXIgZmlyc3RSZXNwb25kZXJJZkRlc2NlbmRhbnRP
ZlZpZXc6d2ViVmlld107CisgICAgaWYgKGNvbXBsZXRlZCkgeworICAgICAgICBOU0Rpc2FibGVT
Y3JlZW5VcGRhdGVzKCk7CisgICAgICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEFuaW1hdGluZ0Z1
bGxTY3JlZW4oZmFsc2UpOworICAgICAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFbnRl
ckZ1bGxTY3JlZW5Gb3JFbGVtZW50KF9lbGVtZW50LmdldCgpKTsKICAgICAgICAgCi0gICAgICAg
IE5TV2luZG93ICp3ZWJXaW5kb3cgPSBbW3NlbGYgd2ViVmlld10gd2luZG93XTsKKyAgICAgICAg
TlNSZWN0IHdpbmRvd0JvdW5kcyA9IFtbc2VsZiB3aW5kb3ddIGZyYW1lXTsKKyAgICAgICAgd2lu
ZG93Qm91bmRzLm9yaWdpbiA9IE5TWmVyb1BvaW50OworICAgICAgICBXS1dpbmRvd1NldENsaXBS
ZWN0KFtzZWxmIHdpbmRvd10sIHdpbmRvd0JvdW5kcyk7CisgICAgICAgIAorICAgICAgICBOU1dp
bmRvdyAqd2ViV2luZG93ID0gW193ZWJWaWV3UGxhY2Vob2xkZXIuZ2V0KCkgd2luZG93XTsKICNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpCiAgICAgICAgIC8vIEluIExpb24sIE5TV2luZG93IHdpbGwgYW5pbWF0ZSBp
bnRvIGFuZCBvdXQgb2Ygb3JkZXJPdXQgb3BlcmF0aW9ucy4gU3VwcHJlc3MgdGhhdAogICAgICAg
ICAvLyBiZWhhdmlvciBoZXJlLCBtYWtpbmcgc3VyZSB0byByZXNldCB0aGUgYW5pbWF0aW9uIGJl
aGF2aW9yIGFmdGVyd2FyZC4KICAgICAgICAgTlNXaW5kb3dBbmltYXRpb25CZWhhdmlvciBhbmlt
YXRpb25CZWhhdmlvciA9IFt3ZWJXaW5kb3cgYW5pbWF0aW9uQmVoYXZpb3JdOwogICAgICAgICBb
d2ViV2luZG93IHNldEFuaW1hdGlvbkJlaGF2aW9yOk5TV2luZG93QW5pbWF0aW9uQmVoYXZpb3JO
b25lXTsKICNlbmRpZgotICAgICAgICAvLyBUaGUgdXNlciBtYXkgaGF2ZSBtb3ZlZCB0aGUgZnVs
bHNjcmVlbiB3aW5kb3cgaW4gU3BhY2VzLCBzbyB0ZW1wb3JhcmlseSBjaGFuZ2UgCi0gICAgICAg
IC8vIHRoZSBjb2xsZWN0aW9uQmVoYXZpb3Igb2YgdGhlIGZ1bGxzY3JlZW4gd2luZG93OgorICAg
ICAgICBbd2ViV2luZG93IG9yZGVyT3V0OnNlbGZdOworI2lmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKKyAgICAgICAg
W3dlYldpbmRvdyBzZXRBbmltYXRpb25CZWhhdmlvcjphbmltYXRpb25CZWhhdmlvcl07CisjZW5k
aWYKKyAgICAgICAgCisgICAgICAgIFtfZmFkZUFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9u
XTsKKyAgICAgICAgW19mYWRlQW5pbWF0aW9uLmdldCgpIHNldFdpbmRvdzpuaWxdOworICAgICAg
ICBfZmFkZUFuaW1hdGlvbiA9IG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBbX2JhY2tncm91
bmRXaW5kb3cuZ2V0KCkgb3JkZXJPdXQ6c2VsZl07CisgICAgICAgIFtfYmFja2dyb3VuZFdpbmRv
dy5nZXQoKSBzZXRGcmFtZTpOU1plcm9SZWN0IGRpc3BsYXk6WUVTXTsKKyAgICAgICAgTlNFbmFi
bGVTY3JlZW5VcGRhdGVzKCk7CisgICAgfSBlbHNlCisgICAgICAgIFtfc2NhbGVBbmltYXRpb24u
Z2V0KCkgc3RvcEFuaW1hdGlvbl07Cit9CisKKy0gKHZvaWQpZXhpdEZ1bGxTY3JlZW4KK3sKKyAg
ICBpZiAoIV9pc0Z1bGxTY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICBfaXNGdWxsU2NyZWVu
ID0gTk87CisgICAgCisgICAgLy8gU2NyZWVuIHVwZGF0ZXMgdG8gYmUgcmUtZW5hYmxlZCBpbiBi
ZWdhbkV4aXRGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTpmaW5hbEZyYW1lOgorICAgIE5TRGlz
YWJsZVNjcmVlblVwZGF0ZXMoKTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRBdXRvZGlzcGxheTpO
T107CisKKyAgICBfZmluYWxGcmFtZSA9IHNjcmVlblJlY3RPZkNvbnRlbnRzKF9lbGVtZW50Lmdl
dCgpKTsKKworICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZv
ckVsZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOworICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEFuaW1h
dGluZ0Z1bGxTY3JlZW4odHJ1ZSk7CisKKyAgICBpZiAoX2lzRW50ZXJpbmdGdWxsU2NyZWVuKQor
ICAgICAgICBbc2VsZiBmaW5pc2hlZEVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbjpOT107CisgICAg
CisgICAgW3NlbGYgX3VwZGF0ZU1lbnVBbmREb2NrRm9yRnVsbFNjcmVlbl07CisgICAgCisgICAg
TlNXaW5kb3cqIHdlYldpbmRvdyA9IFtfd2ViVmlld1BsYWNlaG9sZGVyLmdldCgpIHdpbmRvd107
CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fU05PV19MRU9QQVJEKQorICAgIC8vIEluIExpb24sIE5TV2luZG93IHdpbGwgYW5pbWF0ZSBp
bnRvIGFuZCBvdXQgb2Ygb3JkZXJPdXQgb3BlcmF0aW9ucy4gU3VwcHJlc3MgdGhhdAorICAgIC8v
IGJlaGF2aW9yIGhlcmUsIG1ha2luZyBzdXJlIHRvIHJlc2V0IHRoZSBhbmltYXRpb24gYmVoYXZp
b3IgYWZ0ZXJ3YXJkLgorICAgIE5TV2luZG93QW5pbWF0aW9uQmVoYXZpb3IgYW5pbWF0aW9uQmVo
YXZpb3IgPSBbd2ViV2luZG93IGFuaW1hdGlvbkJlaGF2aW9yXTsKKyAgICBbd2ViV2luZG93IHNl
dEFuaW1hdGlvbkJlaGF2aW9yOk5TV2luZG93QW5pbWF0aW9uQmVoYXZpb3JOb25lXTsKKyNlbmRp
ZgorICAgIC8vIElmIHRoZSB1c2VyIGhhcyBtb3ZlZCB0aGUgZnVsbFNjcmVlbiB3aW5kb3cgaW50
byBhIG5ldyBzcGFjZSwgdGVtcG9yYXJpbHkgY2hhbmdlCisgICAgLy8gdGhlIGNvbGxlY3Rpb25C
ZWhhdmlvciBvZiB0aGUgd2ViVmlldydzIHdpbmRvdyBzbyB0aGF0IGl0IGlzIHB1bGxlZCBpbnRv
IHRoZSBhY3RpdmUgc3BhY2U6CisgICAgaWYgKCFbd2ViV2luZG93IGlzT25BY3RpdmVTcGFjZV0p
IHsKICAgICAgICAgTlNXaW5kb3dDb2xsZWN0aW9uQmVoYXZpb3IgYmVoYXZpb3IgPSBbd2ViV2lu
ZG93IGNvbGxlY3Rpb25CZWhhdmlvcl07CiAgICAgICAgIFt3ZWJXaW5kb3cgc2V0Q29sbGVjdGlv
bkJlaGF2aW9yOk5TV2luZG93Q29sbGVjdGlvbkJlaGF2aW9yQ2FuSm9pbkFsbFNwYWNlc107CiAg
ICAgICAgIFt3ZWJXaW5kb3cgb3JkZXJXaW5kb3c6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOltb
c2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl1dOwogICAgICAgICBbd2ViV2luZG93IHNldENvbGxl
Y3Rpb25CZWhhdmlvcjpiZWhhdmlvcl07CisgICAgfSBlbHNlCisgICAgICAgIFt3ZWJXaW5kb3cg
b3JkZXJXaW5kb3c6TlNXaW5kb3dCZWxvdyByZWxhdGl2ZVRvOltbc2VsZiB3aW5kb3ddIHdpbmRv
d051bWJlcl1dOwogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLSAgICAgICAgW3dlYldpbmRvdyBzZXRBbmltYXRp
b25CZWhhdmlvcjphbmltYXRpb25CZWhhdmlvcl07CisgICAgW3dlYldpbmRvdyBzZXRBbmltYXRp
b25CZWhhdmlvcjphbmltYXRpb25CZWhhdmlvcl07CiAjZW5kaWYKIAotICAgICAgICAvLyBCZWNh
dXNlIHRoZSBhbmltYXRpb24gdmlldyBpcyBsYXllci1ob3N0ZWQsIG1ha2Ugc3VyZSB0byAKLSAg
ICAgICAgLy8gZGlzYWJsZSBhbmltYXRpb25zIHdoZW4gY2hhbmdpbmcgdGhlIGxheWVyJ3Mgb3Bh
Y2l0eS4gT3RoZXItCi0gICAgICAgIC8vIHdpc2UsIHRoZSBjb250ZW50IHdpbGwgYXBwZWFyIHRv
IGZhZGUgaW50byB2aWV3LgotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgICAg
IFtDQVRyYW5zYWN0aW9uIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZv
cktleTprQ0FUcmFuc2FjdGlvbkRpc2FibGVBY3Rpb25zXTsKLSAgICAgICAgV2ViRnVsbHNjcmVl
bldpbmRvdyogd2luZG93ID0gW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddOwotICAgICAgICBbW1t3
aW5kb3cgYW5pbWF0aW9uVmlld10gbGF5ZXJdIHNldE9wYWNpdHk6MV07Ci0gICAgICAgIFt3aW5k
b3cgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKLSAgICAgICAgW3dp
bmRvdyBzZXRPcGFxdWU6Tk9dOwotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotICAg
IH0KLQotICAgIE5TVmlldyogYW5pbWF0aW9uVmlldyA9IFtbc2VsZiBfZnVsbHNjcmVlbldpbmRv
d10gYW5pbWF0aW9uVmlld107Ci0gICAgQ0dSZWN0IGxheWVyRW5kRnJhbWUgPSBOU1JlY3RUb0NH
UmVjdChbYW5pbWF0aW9uVmlldyBjb252ZXJ0UmVjdDpOU1JlY3RGcm9tQ0dSZWN0KF9pbml0aWFs
RnJhbWUpIGZyb21WaWV3Om5pbF0pOworICAgIFtzZWxmIF9zdGFydEV4aXRGdWxsU2NyZWVuQW5p
bWF0aW9uV2l0aER1cmF0aW9uOmRlZmF1bHRBbmltYXRpb25EdXJhdGlvbl07CisgICAgX2lzRXhp
dGluZ0Z1bGxTY3JlZW4gPSBZRVM7ICAgIAorfQogCi0gICAgLy8gVGhlIF9yZW5kZXJlciBtaWdo
dCBiZSBOVUxMIGR1ZSB0byBpdHMgYW5jZXN0b3IgYmVpbmcgcmVtb3ZlZDoKLSAgICBDR1JlY3Qg
bGF5ZXJTdGFydEZyYW1lID0gQ0dSZWN0WmVybzsKLSAgICBpZiAoX3JlbmRlcmVyKSB7Ci0gICAg
ICAgIFJlbmRlckJveCogY2hpbGRSZW5kZXJlciA9IF9yZW5kZXJlci0+Zmlyc3RDaGlsZEJveCgp
OwotICAgICAgICBsYXllclN0YXJ0RnJhbWUgPSBDR1JlY3RNYWtlKGNoaWxkUmVuZGVyZXItPngo
KSwgY2hpbGRSZW5kZXJlci0+eSgpLCBjaGlsZFJlbmRlcmVyLT53aWR0aCgpLCBjaGlsZFJlbmRl
cmVyLT5oZWlnaHQoKSk7Ci0gICAgfQorLSAodm9pZClmaW5pc2hlZEV4aXRGdWxsU2NyZWVuQW5p
bWF0aW9uOihib29sKWNvbXBsZXRlZAoreworICAgIGlmICghX2lzRXhpdGluZ0Z1bGxTY3JlZW4p
CisgICAgICAgIHJldHVybjsKKyAgICBfaXNFeGl0aW5nRnVsbFNjcmVlbiA9IE5POwogICAgIAot
ICAgIFtzZWxmIF9kb2N1bWVudF0tPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQo
X2VsZW1lbnQuZ2V0KCkpOwotICAgIFtzZWxmIF9kb2N1bWVudF0tPnVwZGF0ZUxheW91dCgpOwor
ICAgIFtzZWxmIF91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxTY3JlZW5dOwogICAgIAotICAgIC8v
IFdlIGhhdmUgdG8gcmV0YWluIG91cnNlbHZlcyBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWxpdmUg
Zm9yIHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbi4KLSAgICAvLyBJZiBvdXIgb3duZXIgcmVsZWFz
ZXMgdXMgd2UgY291bGQgY3Jhc2ggaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuCi0gICAgLy8gQmFs
YW5jZWQgaW4gd2luZG93RGlkRXhpdEZ1bGxzY3JlZW4KLSAgICBbc2VsZiByZXRhaW5dOworICAg
IE5TRGlzYWJsZVNjcmVlblVwZGF0ZXMoKTsKICAgICAKLSAgICAvLyBDaGVjayB0byBzZWUgaWYg
dGhlIGZ1bGxzY3JlZW4gcmVuZGVyZXIgaXMgY29tcG9zaXRlZC4gSWYgbm90LCBhY2NlbGVyYXRl
ZCBncmFwaGljcyAKLSAgICAvLyBtYXkgYmUgZGlzYWJsZWQuIEluIHRoaXMgY2FzZSwgZG8gbm90
IGF0dGVtcHQgdG8gYW5pbWF0ZSB0aGUgY29udGVudHMgaW50byBwbGFjZTsgCi0gICAgLy8gbWVy
ZWx5IHNuYXAgdG8gdGhlIGZpbmFsIHBvc2l0aW9uOgotICAgIGlmICghX3JlbmRlcmVyIHx8ICFf
cmVuZGVyZXItPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIFtzZWxmIHdpbmRv
d0RpZEV4aXRGdWxsc2NyZWVuOllFU107Ci0gICAgICAgIE5TRW5hYmxlU2NyZWVuVXBkYXRlcygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBHcmFwaGljc0xheWVyKiBy
ZW5kZXJlckdyYXBoaWNzID0gX3JlbmRlcmVyLT5sYXllcigpLT5iYWNraW5nKCktPmdyYXBoaWNz
TGF5ZXIoKTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKGZh
bHNlKTsKKyAgICBbc2VsZiBfZG9jdW1lbnRdLT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVs
ZW1lbnQoX2VsZW1lbnQuZ2V0KCkpOwogICAgIAotICAgIFtzZWxmIF9kb2N1bWVudF0tPnNldEZ1
bGxTY3JlZW5SZW5kZXJlckJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOwotCi0g
ICAgcmVuZGVyZXJHcmFwaGljcy0+c3luY0NvbXBvc2l0aW5nU3RhdGUobGF5ZXJFbmRGcmFtZSk7
ICAgIAotCi0gICAgQ0FMYXllciogcmVuZGVyZXJMYXllciA9IHJlbmRlcmVyR3JhcGhpY3MtPnBs
YXRmb3JtTGF5ZXIoKTsKLSAgICBbW3NlbGYgX2Z1bGxzY3JlZW5XaW5kb3ddIHNldFJlbmRlcmVy
TGF5ZXI6cmVuZGVyZXJMYXllcl07ICAgIAorICAgIE5TUmVzcG9uZGVyICpmaXJzdFJlc3BvbmRl
ciA9IFtbc2VsZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVyXTsKKyAgICBbc2VsZiBfc3dhcFZpZXc6
X3dlYlZpZXdQbGFjZWhvbGRlci5nZXQoKSB3aXRoOl93ZWJWaWV3XTsKKyAgICBbW193ZWJWaWV3
IHdpbmRvd10gbWFrZVJlc3BvbmRlcjpmaXJzdFJlc3BvbmRlciBmaXJzdFJlc3BvbmRlcklmRGVz
Y2VuZGFudE9mVmlldzpfd2ViVmlld107CiAgICAgCi0gICAgLy8gQ3JlYXRlIGEgdHJhbnNmb3Jt
YXRpb24gbWF0cml4IHRoYXQgd2lsbCB0cmFuc2Zvcm0gdGhlIHJlbmRlcmVyIGxheWVyIHN1Y2gg
dGhhdCAKLSAgICAvLyB0aGUgZnVsbHNjcmVlbiBlbGVtZW50IGFwcGVhcnMgdG8gbW92ZSBmcm9t
IHRoZSBmdWxsIHNjcmVlbiB0byBpdHMgb3JpZ2luYWwgcG9zaXRpb24gCi0gICAgLy8gYW5kIHNp
emUuIFBlcmZvcm0gdGhlIHRyYW5zZm9ybWF0aW9uIGluIHR3byBzdGVwcywgdXNpbmcgdGhlIENB
TGF5ZXIncyBtYXRyaXggCi0gICAgLy8gbWF0aCB0byBjYWxjdWxhdGUgdGhlIGVmZmVjdHMgb2Yg
ZWFjaCBzdGVwOgotICAgIC8vIDEuIEFwcGx5IGEgc2NhbGUgdHJhbmZvcm0gdG8gc2hyaW5rIHRo
ZSBhcHBhcmVudCBzaXplIG9mIHRoZSBsYXllciB0byB0aGUgb3JpZ2luYWwKLSAgICAvLyAgICBl
bGVtZW50IHNjcmVlbiBzaXplLgotICAgIC8vIDIuIEFwcGx5IGEgdHJhbnNsYXRpb24gdHJhbnNm
b3JtIHRvIG1vdmUgdGhlIHNocnVuayBsYXllciBpbnRvIHRoZSBzYW1lIHNjcmVlbiBwb3NpdGlv
bgotICAgIC8vICAgIGFzIHRoZSBvcmlnaW5hbCBlbGVtZW50LgotICAgIENBVHJhbnNmb3JtM0Qg
c2hyaW5rVHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZShsYXllckVuZEZyYW1lLnNp
emUud2lkdGggLyBsYXllclN0YXJ0RnJhbWUuc2l6ZS53aWR0aCwgbGF5ZXJFbmRGcmFtZS5zaXpl
LmhlaWdodCAvIGxheWVyU3RhcnRGcmFtZS5zaXplLmhlaWdodCwgMSk7Ci0gICAgW3JlbmRlcmVy
TGF5ZXIgc2V0VHJhbnNmb3JtOnNocmlua1RyYW5zZm9ybV07Ci0gICAgQ0dSZWN0IHNocnVua0Rl
c3RpbmF0aW9uRnJhbWUgPSBbcmVuZGVyZXJMYXllciBjb252ZXJ0UmVjdDpsYXllclN0YXJ0RnJh
bWUgdG9MYXllcjpbYW5pbWF0aW9uVmlldyBsYXllcl1dOwotICAgIENBVHJhbnNmb3JtM0QgbW92
ZVRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtlVHJhbnNsYXRpb24obGF5ZXJFbmRGcmFtZS5v
cmlnaW4ueCAtIHNocnVua0Rlc3RpbmF0aW9uRnJhbWUub3JpZ2luLngsIGxheWVyRW5kRnJhbWUu
b3JpZ2luLnkgLSBzaHJ1bmtEZXN0aW5hdGlvbkZyYW1lLm9yaWdpbi55LCAwKTsKLSAgICBDQVRy
YW5zZm9ybTNEIGZpbmFsVHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRENvbmNhdChzaHJpbmtUcmFu
c2Zvcm0sIG1vdmVUcmFuc2Zvcm0pOwotICAgIFtyZW5kZXJlckxheWVyIHNldFRyYW5zZm9ybTpm
aW5hbFRyYW5zZm9ybV07Ci0KLSAgICBDRlRpbWVJbnRlcnZhbCBkdXJhdGlvbiA9IFtzZWxmIF9h
bmltYXRpb25EdXJhdGlvbl07Ci0KLSAgICBDQUxheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBbW3Nl
bGYgX2Z1bGxzY3JlZW5XaW5kb3ddIGJhY2tncm91bmRMYXllcl07Ci0gICAgW0NBVHJhbnNhY3Rp
b24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldFZhbHVlOltOU051bWJlciBudW1iZXJX
aXRoRG91YmxlOmR1cmF0aW9uXSBmb3JLZXk6a0NBVHJhbnNhY3Rpb25BbmltYXRpb25EdXJhdGlv
bl07Ci0gICAgW2JhY2tncm91bmRMYXllciBzZXRPcGFjaXR5OjBdOwotICAgIFtDQVRyYW5zYWN0
aW9uIGNvbW1pdF07CisgICAgTlNSZWN0IHdpbmRvd0JvdW5kcyA9IFtbc2VsZiB3aW5kb3ddIGZy
YW1lXTsKKyAgICB3aW5kb3dCb3VuZHMub3JpZ2luID0gTlNaZXJvUG9pbnQ7CisgICAgV0tXaW5k
b3dTZXRDbGlwUmVjdChbc2VsZiB3aW5kb3ddLCB3aW5kb3dCb3VuZHMpOwogICAgIAotICAgIENB
QmFzaWNBbmltYXRpb24qIHpvb21BbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRp
b25XaXRoS2V5UGF0aDpAInRyYW5zZm9ybSJdOwotICAgIFt6b29tQW5pbWF0aW9uIHNldEZyb21W
YWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOnN0YXJ0VHJhbnNmb3JtXV07Ci0g
ICAgW3pvb21BbmltYXRpb24gc2V0VG9WYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9y
bTNEOmZpbmFsVHJhbnNmb3JtXV07Ci0gICAgW3pvb21BbmltYXRpb24gc2V0RGVsZWdhdGU6c2Vs
Zl07Ci0gICAgW3pvb21BbmltYXRpb24gc2V0RHVyYXRpb246ZHVyYXRpb25dOwotICAgIFt6b29t
QW5pbWF0aW9uIHNldFRpbWluZ0Z1bmN0aW9uOltDQU1lZGlhVGltaW5nRnVuY3Rpb24gZnVuY3Rp
b25XaXRoTmFtZTprQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uRWFzZUluRWFzZU91dF1dOwotICAgIFt6
b29tQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlQm90aF07Ci0gICAgW3pvb21Bbmlt
YXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107Ci0gICAgW3pvb21BbmltYXRpb24gc2V0
VmFsdWU6KGlkKWtDRkJvb2xlYW5GYWxzZSBmb3JLZXk6aXNFbnRlcmluZ0Z1bGxzY3JlZW5LZXld
OworICAgIFtbc2VsZiB3aW5kb3ddIG9yZGVyT3V0OnNlbGZdOworICAgIFtbc2VsZiB3aW5kb3dd
IHNldEZyYW1lOk5TWmVyb1JlY3QgZGlzcGxheTpZRVNdOwogICAgIAotICAgIFtyZW5kZXJlckxh
eWVyIGFkZEFuaW1hdGlvbjp6b29tQW5pbWF0aW9uIGZvcktleTpAInpvb20iXTsKKyAgICBbX2Zh
ZGVBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07CisgICAgW19mYWRlQW5pbWF0aW9uLmdl
dCgpIHNldFdpbmRvdzpuaWxdOworICAgIF9mYWRlQW5pbWF0aW9uID0gbnVsbHB0cjsKKyAgICAK
KyAgICBbX2JhY2tncm91bmRXaW5kb3cuZ2V0KCkgb3JkZXJPdXQ6c2VsZl07CisgICAgW19iYWNr
Z3JvdW5kV2luZG93LmdldCgpIHNldEZyYW1lOk5TWmVyb1JlY3QgZGlzcGxheTpZRVNdOwogICAg
IAogICAgIE5TRW5hYmxlU2NyZWVuVXBkYXRlcygpOwogfQogCistICh2b2lkKWNsb3NlCit7Cisg
ICAgLy8gV2UgYXJlIGJlaW5nIGFza2VkIHRvIGNsb3NlIHJhcGlkbHksIG1vc3QgbGlrZWx5IGJl
Y2F1c2UgdGhlIHBhZ2UgCisgICAgLy8gaGFzIGNsb3NlZCBvciB0aGUgd2ViIHByb2Nlc3MgaGFz
IGNyYXNoZWQuICBKdXN0IHdhbGsgdGhyb3VnaCBvdXIKKyAgICAvLyBub3JtYWwgZXhpdCBmdWxs
IHNjcmVlbiBzZXF1ZW5jZSwgYnV0IGRvbid0IHdhaXQgdG8gYmUgY2FsbGVkIGJhY2sKKyAgICAv
LyBpbiByZXNwb25zZS4KKyAgICBpZiAoX2lzRnVsbFNjcmVlbikKKyAgICAgICAgW3NlbGYgZXhp
dEZ1bGxTY3JlZW5dOworICAgIAorICAgIGlmIChfaXNFeGl0aW5nRnVsbFNjcmVlbikKKyAgICAg
ICAgW3NlbGYgZmluaXNoZWRFeGl0RnVsbFNjcmVlbkFuaW1hdGlvbjpZRVNdOworICAgIAorICAg
IFtzdXBlciBjbG9zZV07Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgTlNBbmlt
YXRpb24gZGVsZWdhdGUKKworLSAodm9pZClhbmltYXRpb25EaWRFbmQ6KE5TQW5pbWF0aW9uKilh
bmltYXRpb24KK3sKKyAgICBpZiAoX2lzRnVsbFNjcmVlbikKKyAgICAgICAgW3NlbGYgZmluaXNo
ZWRFbnRlckZ1bGxTY3JlZW5BbmltYXRpb246WUVTXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxm
IGZpbmlzaGVkRXhpdEZ1bGxTY3JlZW5BbmltYXRpb246WUVTXTsKK30KKwogI3ByYWdtYSBtYXJr
IC0KICNwcmFnbWEgbWFyayBJbnRlcm5hbCBJbnRlcmZhY2UKIAotLSAodm9pZClfdXBkYXRlTWVu
dUFuZERvY2tGb3JGdWxsc2NyZWVuCistICh2b2lkKV91cGRhdGVNZW51QW5kRG9ja0ZvckZ1bGxT
Y3JlZW4KIHsKICAgICAvLyBOU0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uT3B0aW9ucyBpcyBhdmFp
bGFibGUgb24gPiAxMC42IG9ubHk6CiAjaWZuZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKICAgICBO
U0FwcGxpY2F0aW9uUHJlc2VudGF0aW9uT3B0aW9ucyBvcHRpb25zID0gTlNBcHBsaWNhdGlvblBy
ZXNlbnRhdGlvbkRlZmF1bHQ7CiAgICAgTlNTY3JlZW4qIGZ1bGxzY3JlZW5TY3JlZW4gPSBbW3Nl
bGYgd2luZG93XSBzY3JlZW5dOwogICAgIAotICAgIGlmIChfaXNGdWxsc2NyZWVuKSB7CisgICAg
aWYgKF9pc0Z1bGxTY3JlZW4pIHsKICAgICAgICAgLy8gQXV0by1oaWRlIHRoZSBtZW51IGJhciBp
ZiB0aGUgZnVsbHNjcmVlblNjcmVlbiBjb250YWlucyB0aGUgbWVudSBiYXI6CiAgICAgICAgIC8v
IE5PVEU6IGlmIHRoZSBmdWxsc2NyZWVuU2NyZWVuIGNvbnRhaW5zIHRoZSBtZW51IGJhciBidXQg
bm90IHRoZSBkb2NrLCB3ZSBtdXN0IHN0aWxsIAogICAgICAgICAvLyBhdXRvLWhpZGUgdGhlIGRv
Y2ssIG9yIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KQEAgLTY0MCwyMTIgKzQwMywxNDIg
QEAgcHJpdmF0ZToKICAgICAgICAgW05TQXBwIHNldFByZXNlbnRhdGlvbk9wdGlvbnM6b3B0aW9u
c107CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIFNldFN5c3RlbVVJTW9kZShfaXNGdWxsc2Ny
ZWVuID8ga1VJTW9kZU5vcm1hbCA6IGtVSU1vZGVBbGxIaWRkZW4sIDApOwotfQotCi0tICh2b2lk
KV91cGRhdGVQb3dlckFzc2VydGlvbnMKLXsKLSAgICBCT09MIGlzUGxheWluZyA9IFtzZWxmIF9p
c0FueU1vdmllUGxheWluZ107Ci0gICAgCi0gICAgaWYgKGlzUGxheWluZyAmJiBfaXNGdWxsc2Ny
ZWVuKSB7Ci0gICAgICAgIGlmICghX2Rpc3BsYXlTbGVlcERpc2FibGVyKQotICAgICAgICAgICAg
X2Rpc3BsYXlTbGVlcERpc2FibGVyID0gRGlzcGxheVNsZWVwRGlzYWJsZXI6OmNyZWF0ZSgiY29t
LmFwcGxlLldlYktpdCAtIEZ1bGxzY3JlZW4gdmlkZW8iKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
X2Rpc3BsYXlTbGVlcERpc2FibGVyID0gbnVsbHB0cjsKKyAgICAgICAgU2V0U3lzdGVtVUlNb2Rl
KF9pc0Z1bGxTY3JlZW4gPyBrVUlNb2RlTm9ybWFsIDoga1VJTW9kZUFsbEhpZGRlbiwgMCk7CiB9
CiAKLS0gKHZvaWQpX3JlcXVlc3RFeGl0Ci17Ci0gICAgW3NlbGYgZXhpdEZ1bGxzY3JlZW5dOwot
ICAgIF9mb3JjZURpc2FibGVBbmltYXRpb24gPSBOTzsKLX0KKyNwcmFnbWEgbWFyayAtCisjcHJh
Z21hIG1hcmsgVXRpbGl0eSBGdW5jdGlvbnMKIAotLSAodm9pZClfcmVxdWVzdEV4aXRGdWxsc2Ny
ZWVuV2l0aEFuaW1hdGlvbjooQk9PTClhbmltYXRpb24KKy0gKERvY3VtZW50KilfZG9jdW1lbnQg
CiB7Ci0gICAgX2ZvcmNlRGlzYWJsZUFuaW1hdGlvbiA9ICFhbmltYXRpb247Ci0gICAgW3NlbGYg
cGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfcmVxdWVzdEV4aXQpIHdpdGhPYmplY3Q6bmlsIGFm
dGVyRGVsYXk6MF07Ci0KKyAgICByZXR1cm4gX2VsZW1lbnQtPmRvY3VtZW50KCk7CiB9CiAKLS0g
KEJPT0wpX2lzQW55TW92aWVQbGF5aW5nCistICh2b2lkKV9zd2FwVmlldzooTlNWaWV3Kil2aWV3
IHdpdGg6KE5TVmlldyopb3RoZXJWaWV3CiB7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIGlmICgh
X2VsZW1lbnQpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBOb2RlKiBuZXh0Tm9kZSA9
IF9lbGVtZW50LmdldCgpOwotICAgIHdoaWxlIChuZXh0Tm9kZSkKLSAgICB7Ci0gICAgICAgIGlm
IChuZXh0Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSAmJiBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obmV4dE5vZGUpLT5pc01lZGlhRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBI
VE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+
KG5leHROb2RlKTsKLSAgICAgICAgICAgIGlmICghZWxlbWVudC0+cGF1c2VkKCkgJiYgIWVsZW1l
bnQtPmVuZGVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShfZWxl
bWVudC5nZXQoKSk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgcmV0dXJuIE5POworICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9u
czpZRVNdOworICAgIFtvdGhlclZpZXcgc2V0RnJhbWU6W3ZpZXcgZnJhbWVdXTsgICAgICAgIAor
ICAgIFtvdGhlclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpbdmlldyBhdXRvcmVzaXppbmdNYXNr
XV07CisgICAgW290aGVyVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBbW3ZpZXcgc3Vw
ZXJ2aWV3XSByZXBsYWNlU3Vidmlldzp2aWV3IHdpdGg6b3RoZXJWaWV3XTsKKyAgICBbQ0FUcmFu
c2FjdGlvbiBjb21taXRdOwogfQogCi0jcHJhZ21hIG1hcmsgLQotI3ByYWdtYSBtYXJrIFV0aWxp
dHkgRnVuY3Rpb25zCi0KLS0gKFdlYkZ1bGxzY3JlZW5XaW5kb3cgKilfZnVsbHNjcmVlbldpbmRv
dworc3RhdGljIE5TV2luZG93ICpjcmVhdGVCYWNrZ3JvdW5kRnVsbHNjcmVlbldpbmRvdyhOU1Jl
Y3QgZnJhbWUpCiB7Ci0gICAgcmV0dXJuIChXZWJGdWxsc2NyZWVuV2luZG93ICopW3NlbGYgd2lu
ZG93XTsKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhD
b250ZW50UmVjdDpmcmFtZSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5n
Ok5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIFt3aW5kb3cgc2V0T3BhcXVl
OllFU107CisgICAgW3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3IgYmxhY2tDb2xv
cl1dOworICAgIFt3aW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKKyAgICByZXR1cm4g
d2luZG93OwogfQogCi0tIChEb2N1bWVudCopX2RvY3VtZW50IAorc3RhdGljIE5TUmVjdCB3aW5k
b3dGcmFtZUZyb21BcHBhcmVudEZyYW1lcyhOU1JlY3Qgc2NyZWVuRnJhbWUsIE5TUmVjdCBpbml0
aWFsRnJhbWUsIE5TUmVjdCBmaW5hbEZyYW1lKQogewotICAgIHJldHVybiBfZWxlbWVudC0+ZG9j
dW1lbnQoKTsKKyAgICBOU1JlY3QgaW5pdGlhbFdpbmRvd0ZyYW1lOworICAgIENHRmxvYXQgeFNj
YWxlID0gTlNXaWR0aChzY3JlZW5GcmFtZSkgLyBOU1dpZHRoKGZpbmFsRnJhbWUpOworICAgIENH
RmxvYXQgeVNjYWxlID0gTlNIZWlnaHQoc2NyZWVuRnJhbWUpIC8gTlNIZWlnaHQoZmluYWxGcmFt
ZSk7CisgICAgQ0dGbG9hdCB4VHJhbnMgPSBOU01pblgoc2NyZWVuRnJhbWUpIC0gTlNNaW5YKGZp
bmFsRnJhbWUpOworICAgIENHRmxvYXQgeVRyYW5zID0gTlNNaW5ZKHNjcmVlbkZyYW1lKSAtIE5T
TWluWShmaW5hbEZyYW1lKTsKKyAgICBpbml0aWFsV2luZG93RnJhbWUuc2l6ZSA9IE5TTWFrZVNp
emUoTlNXaWR0aChpbml0aWFsRnJhbWUpICogeFNjYWxlLCBOU0hlaWdodChpbml0aWFsRnJhbWUp
ICogeVNjYWxlKTsKKyAgICBpbml0aWFsV2luZG93RnJhbWUub3JpZ2luID0gTlNNYWtlUG9pbnQK
KyAgICAoIE5TTWluWChpbml0aWFsRnJhbWUpICsgeFRyYW5zIC8gKE5TV2lkdGgoZmluYWxGcmFt
ZSkgLyBOU1dpZHRoKGluaXRpYWxGcmFtZSkpCisgICAgICwgTlNNaW5ZKGluaXRpYWxGcmFtZSkg
KyB5VHJhbnMgLyAoTlNIZWlnaHQoZmluYWxGcmFtZSkgLyBOU0hlaWdodChpbml0aWFsRnJhbWUp
KSk7CisgICAgcmV0dXJuIGluaXRpYWxXaW5kb3dGcmFtZTsKIH0KIAotLSAoQ0ZUaW1lSW50ZXJ2
YWwpX2FuaW1hdGlvbkR1cmF0aW9uCistICh2b2lkKV9zdGFydEVudGVyRnVsbFNjcmVlbkFuaW1h
dGlvbldpdGhEdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KIHsKLSAgICBzdGF0aWMg
Y29uc3QgQ0ZUaW1lSW50ZXJ2YWwgZGVmYXVsdER1cmF0aW9uID0gMC41OwotICAgIENGVGltZUlu
dGVydmFsIGR1cmF0aW9uID0gZGVmYXVsdER1cmF0aW9uOwotI2lmbmRlZiBCVUlMRElOR19PTl9M
RU9QQVJECi0gICAgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzID0gW05TRXZlbnQgbW9kaWZpZXJG
bGFnc107Ci0jZWxzZQotICAgIE5TVUludGVnZXIgbW9kaWZpZXJGbGFncyA9IFtbTlNBcHAgY3Vy
cmVudEV2ZW50XSBtb2RpZmllckZsYWdzXTsKLSNlbmRpZgotICAgIGlmICgobW9kaWZpZXJGbGFn
cyAmIE5TQ29udHJvbEtleU1hc2spID09IE5TQ29udHJvbEtleU1hc2spCi0gICAgICAgIGR1cmF0
aW9uICo9IDI7Ci0gICAgaWYgKChtb2RpZmllckZsYWdzICYgTlNTaGlmdEtleU1hc2spID09IE5T
U2hpZnRLZXlNYXNrKQotICAgICAgICBkdXJhdGlvbiAqPSAxMDsKLSAgICBpZiAoX2ZvcmNlRGlz
YWJsZUFuaW1hdGlvbikgewotICAgICAgICAvLyBUaGlzIHdpbGwgZGlzYWJsZSBzY2FsZSBhbmlt
YXRpb24KLSAgICAgICAgZHVyYXRpb24gPSAwOworICAgIE5TUmVjdCBzY3JlZW5GcmFtZSA9IFtb
W3NlbGYgd2luZG93XSBzY3JlZW5dIGZyYW1lXTsKKyAgICBOU1JlY3QgaW5pdGlhbFdpbmRvd0Zy
YW1lID0gd2luZG93RnJhbWVGcm9tQXBwYXJlbnRGcmFtZXMoc2NyZWVuRnJhbWUsIF9pbml0aWFs
RnJhbWUsIF9maW5hbEZyYW1lKTsKKyAgICAKKyAgICBfc2NhbGVBbmltYXRpb24uYWRvcHROUyhb
W1dlYldpbmRvd1NjYWxlQW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0aEhpbnRlZER1cmF0aW9uOmR1
cmF0aW9uIHdpbmRvdzpbc2VsZiB3aW5kb3ddIGluaXRhbEZyYW1lOmluaXRpYWxXaW5kb3dGcmFt
ZSBmaW5hbEZyYW1lOnNjcmVlbkZyYW1lXSk7CisgICAgCisgICAgW19zY2FsZUFuaW1hdGlvbi5n
ZXQoKSBzZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ107Cisg
ICAgW19zY2FsZUFuaW1hdGlvbi5nZXQoKSBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbX3NjYWxl
QW5pbWF0aW9uLmdldCgpIHNldEN1cnJlbnRQcm9ncmVzczowXTsKKyAgICBbX3NjYWxlQW5pbWF0
aW9uLmdldCgpIHN0YXJ0QW5pbWF0aW9uXTsKKyAgICAKKyAgICAvLyBXS1dpbmRvd1NldENsaXBS
ZWN0IHRha2VzIHdpbmRvdyBjb29yZGluYXRlcywgc28gY29udmVydCBmcm9tIHNjcmVlbiBjb29y
ZGluYXRlcyBoZXJlOgorICAgIE5TUmVjdCBmaW5hbEJvdW5kcyA9IF9maW5hbEZyYW1lOworICAg
IGZpbmFsQm91bmRzLm9yaWdpbiA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6
ZmluYWxCb3VuZHMub3JpZ2luXTsKKyAgICBXS1dpbmRvd1NldENsaXBSZWN0KFtzZWxmIHdpbmRv
d10sIGZpbmFsQm91bmRzKTsKKyAgICAKKyAgICBbW3NlbGYgd2luZG93XSBtYWtlS2V5QW5kT3Jk
ZXJGcm9udDpzZWxmXTsKKyAgICAKKyAgICBpZiAoIV9iYWNrZ3JvdW5kV2luZG93KQorICAgICAg
ICBfYmFja2dyb3VuZFdpbmRvdy5hZG9wdE5TKGNyZWF0ZUJhY2tncm91bmRGdWxsc2NyZWVuV2lu
ZG93KHNjcmVlbkZyYW1lKSk7CisgICAgZWxzZQorICAgICAgICBbX2JhY2tncm91bmRXaW5kb3cu
Z2V0KCkgc2V0RnJhbWU6c2NyZWVuRnJhbWUgZGlzcGxheTpOT107CisgICAgCisgICAgQ0dGbG9h
dCBjdXJyZW50QWxwaGEgPSAwOworICAgIGlmIChfZmFkZUFuaW1hdGlvbikgeworICAgICAgICBj
dXJyZW50QWxwaGEgPSBbX2ZhZGVBbmltYXRpb24uZ2V0KCkgY3VycmVudEFscGhhXTsKKyAgICAg
ICAgW19mYWRlQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOworICAgICAgICBbX2ZhZGVB
bmltYXRpb24uZ2V0KCkgc2V0V2luZG93Om5pbF07CiAgICAgfQotICAgIHJldHVybiBkdXJhdGlv
bjsKKyAgICAKKyAgICBfZmFkZUFuaW1hdGlvbi5hZG9wdE5TKFtbV2ViV2luZG93RmFkZUFuaW1h
dGlvbiBhbGxvY10gaW5pdFdpdGhEdXJhdGlvbjpkdXJhdGlvbiAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRv
dzpfYmFja2dyb3VuZFdpbmRvdy5nZXQoKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxBbHBoYTpjdXJyZW50QWxw
aGEgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbmFsQWxwaGE6MV0pOworICAgIFtfZmFkZUFuaW1hdGlvbi5nZXQoKSBz
ZXRBbmltYXRpb25CbG9ja2luZ01vZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ107CisgICAgW19m
YWRlQW5pbWF0aW9uLmdldCgpIHNldEN1cnJlbnRQcm9ncmVzczowXTsKKyAgICBbX2ZhZGVBbmlt
YXRpb24uZ2V0KCkgc3RhcnRBbmltYXRpb25dOworICAgIAorICAgIFtfYmFja2dyb3VuZFdpbmRv
dy5nZXQoKSBvcmRlcldpbmRvdzpOU1dpbmRvd0JlbG93IHJlbGF0aXZlVG86W1tzZWxmIHdpbmRv
d10gd2luZG93TnVtYmVyXV07CisgICAgCisgICAgW1tzZWxmIHdpbmRvd10gc2V0QXV0b2Rpc3Bs
YXk6WUVTXTsKKyAgICBbW3NlbGYgd2luZG93XSBkaXNwbGF5SWZOZWVkZWRdOworICAgIE5TRW5h
YmxlU2NyZWVuVXBkYXRlcygpOwogfQogCi1AZW5kCi0KLSNwcmFnbWEgbWFyayAtCi1AaW1wbGVt
ZW50YXRpb24gV2ViRnVsbHNjcmVlbldpbmRvdwotCi0tIChpZClpbml0V2l0aENvbnRlbnRSZWN0
OihOU1JlY3QpY29udGVudFJlY3Qgc3R5bGVNYXNrOihOU1VJbnRlZ2VyKWFTdHlsZSBiYWNraW5n
OihOU0JhY2tpbmdTdG9yZVR5cGUpYnVmZmVyaW5nVHlwZSBkZWZlcjooQk9PTClmbGFnCistICh2
b2lkKV9zdGFydEV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uV2l0aER1cmF0aW9uOihOU1RpbWVJbnRl
cnZhbClkdXJhdGlvbgogewotICAgIFVOVVNFRF9QQVJBTShhU3R5bGUpOwotICAgIHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpjb250ZW50UmVjdCBzdHlsZU1hc2s6TlNCb3JkZXJs
ZXNzV2luZG93TWFzayBiYWNraW5nOmJ1ZmZlcmluZ1R5cGUgZGVmZXI6ZmxhZ107Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIFtzZWxmIHNldE9wYXF1ZTpOT107Ci0g
ICAgW3NlbGYgc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIGNsZWFyQ29sb3JdXTsKLSAgICBb
c2VsZiBzZXRJZ25vcmVzTW91c2VFdmVudHM6Tk9dOwotICAgIFtzZWxmIHNldEFjY2VwdHNNb3Vz
ZU1vdmVkRXZlbnRzOllFU107Ci0gICAgW3NlbGYgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsK
LSAgICBbc2VsZiBzZXRIYXNTaGFkb3c6WUVTXTsKLSNpZm5kZWYgQlVJTERJTkdfT05fTEVPUEFS
RAotICAgIFtzZWxmIHNldE1vdmFibGU6Tk9dOwotI2Vsc2UKLSAgICBbc2VsZiBzZXRNb3ZhYmxl
QnlXaW5kb3dCYWNrZ3JvdW5kOk5PXTsKLSNlbmRpZgorICAgIE5TUmVjdCBzY3JlZW5GcmFtZSA9
IFtbW3NlbGYgd2luZG93XSBzY3JlZW5dIGZyYW1lXTsKKyAgICBOU1JlY3QgaW5pdGlhbFdpbmRv
d0ZyYW1lID0gd2luZG93RnJhbWVGcm9tQXBwYXJlbnRGcmFtZXMoc2NyZWVuRnJhbWUsIF9pbml0
aWFsRnJhbWUsIF9maW5hbEZyYW1lKTsKICAgICAKLSAgICBOU1ZpZXcqIGNvbnRlbnRWaWV3ID0g
W3NlbGYgY29udGVudFZpZXddOwotICAgIF9hbmltYXRpb25WaWV3ID0gW1tOU1ZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6W2NvbnRlbnRWaWV3IGJvdW5kc11dOworICAgIENHUmVjdCBjdXJyZW50
RnJhbWUgPSBfc2NhbGVBbmltYXRpb24gPyBbX3NjYWxlQW5pbWF0aW9uLmdldCgpIGN1cnJlbnRG
cmFtZV0gOiBbW3NlbGYgd2luZG93XSBmcmFtZV07CisgICAgX3NjYWxlQW5pbWF0aW9uLmFkb3B0
TlMoW1tXZWJXaW5kb3dTY2FsZUFuaW1hdGlvbiBhbGxvY10gaW5pdFdpdGhIaW50ZWREdXJhdGlv
bjpkdXJhdGlvbiB3aW5kb3c6W3NlbGYgd2luZG93XSBpbml0YWxGcmFtZTpjdXJyZW50RnJhbWUg
ZmluYWxGcmFtZTppbml0aWFsV2luZG93RnJhbWVdKTsKICAgICAKLSAgICBSZXRhaW5QdHI8Q0FM
YXllcj4gY29udGVudExheWVyKEFkb3B0TlMsIFtbQ0FMYXllciBhbGxvY10gaW5pdF0pOwotICAg
IFtfYW5pbWF0aW9uVmlldyBzZXRMYXllcjpjb250ZW50TGF5ZXIuZ2V0KCldOwotICAgIFtfYW5p
bWF0aW9uVmlldyBzZXRXYW50c0xheWVyOllFU107Ci0gICAgW19hbmltYXRpb25WaWV3IHNldEF1
dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlfE5TVmlld0hlaWdodFNpemFibGVdOwot
ICAgIFtjb250ZW50VmlldyBhZGRTdWJ2aWV3Ol9hbmltYXRpb25WaWV3XTsKKyAgICBbX3NjYWxl
QW5pbWF0aW9uLmdldCgpIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0FuaW1hdGlvbk5vbmJs
b2NraW5nXTsKKyAgICBbX3NjYWxlQW5pbWF0aW9uLmdldCgpIHNldERlbGVnYXRlOnNlbGZdOwor
ICAgIFtfc2NhbGVBbmltYXRpb24uZ2V0KCkgc2V0Q3VycmVudFByb2dyZXNzOjBdOworICAgIFtf
c2NhbGVBbmltYXRpb24uZ2V0KCkgc3RhcnRBbmltYXRpb25dOwogICAgIAotICAgIF9iYWNrZ3Jv
dW5kTGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOwotICAgIFtjb250ZW50TGF5ZXIuZ2V0
KCkgYWRkU3VibGF5ZXI6X2JhY2tncm91bmRMYXllcl07Ci0jaWZuZGVmIEJVSUxESU5HX09OX0xF
T1BBUkQKLSAgICBbY29udGVudExheWVyLmdldCgpIHNldEdlb21ldHJ5RmxpcHBlZDpZRVNdOwot
I2Vsc2UKLSAgICBbY29udGVudExheWVyLmdldCgpIHNldFN1YmxheWVyVHJhbnNmb3JtOkNBVHJh
bnNmb3JtM0RNYWtlU2NhbGUoMSwgLTEsIDEpXTsKLSNlbmRpZgotICAgIFtjb250ZW50TGF5ZXIu
Z2V0KCkgc2V0T3BhY2l0eTowXTsKKyAgICBpZiAoIV9iYWNrZ3JvdW5kV2luZG93KQorICAgICAg
ICBfYmFja2dyb3VuZFdpbmRvdy5hZG9wdE5TKGNyZWF0ZUJhY2tncm91bmRGdWxsc2NyZWVuV2lu
ZG93KHNjcmVlbkZyYW1lKSk7CisgICAgZWxzZQorICAgICAgICBbX2JhY2tncm91bmRXaW5kb3cu
Z2V0KCkgc2V0RnJhbWU6c2NyZWVuRnJhbWUgZGlzcGxheTpOT107CiAgICAgCi0gICAgW19iYWNr
Z3JvdW5kTGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOkNHQ29sb3JHZXRDb25zdGFudENvbG9yKGtD
R0NvbG9yQmxhY2spXTsKLSAgICBbX2JhY2tncm91bmRMYXllciBzZXRPcGFjaXR5OjBdOwotICAg
IHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX2FuaW1hdGlvblZp
ZXcgcmVsZWFzZV07Ci0gICAgW19iYWNrZ3JvdW5kTGF5ZXIgcmVsZWFzZV07Ci0gICAgW19yZW5k
ZXJlckxheWVyIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAoQk9PTClj
YW5CZWNvbWVLZXlXaW5kb3cKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tICh2b2lkKWtleURv
d246KE5TRXZlbnQgKil0aGVFdmVudAotewotICAgIGlmIChbW3RoZUV2ZW50IGNoYXJhY3RlcnNJ
Z25vcmluZ01vZGlmaWVyc10gaXNFcXVhbDpAIlxlIl0pIC8vIEVzYWNwZSBrZXktY29kZQotICAg
ICAgICBbc2VsZiBjYW5jZWxPcGVyYXRpb246c2VsZl07Ci0gICAgZWxzZSBbc3VwZXIga2V5RG93
bjp0aGVFdmVudF07Ci19Ci0KLS0gKHZvaWQpY2FuY2VsT3BlcmF0aW9uOihpZClzZW5kZXIKLXsK
LSAgICBVTlVTRURfUEFSQU0oc2VuZGVyKTsKLSAgICBbW3NlbGYgd2luZG93Q29udHJvbGxlcl0g
X3JlcXVlc3RFeGl0RnVsbHNjcmVlbldpdGhBbmltYXRpb246WUVTXTsKLX0KLQotLSAoQ0FMYXll
ciopcmVuZGVyZXJMYXllcgotewotICAgIHJldHVybiBfcmVuZGVyZXJMYXllcjsKLX0KLQotLSAo
dm9pZClzZXRSZW5kZXJlckxheWVyOihDQUxheWVyICopcmVuZGVyZXJMYXllcgotewotICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXRWYWx1ZTpbTlNOdW1i
ZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6a0NBVHJhbnNhY3Rpb25EaXNhYmxlQWN0aW9u
c107Ci0gICAgW3JlbmRlcmVyTGF5ZXIgcmV0YWluXTsKLSAgICBbX3JlbmRlcmVyTGF5ZXIgcmVt
b3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIFtfcmVuZGVyZXJMYXllciByZWxlYXNlXTsKLSAgICBf
cmVuZGVyZXJMYXllciA9IHJlbmRlcmVyTGF5ZXI7Ci0gICAgCi0gICAgaWYgKF9yZW5kZXJlckxh
eWVyKQotICAgICAgICBbW1tzZWxmIGFuaW1hdGlvblZpZXddIGxheWVyXSBhZGRTdWJsYXllcjpf
cmVuZGVyZXJMYXllcl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLX0KLQotLSAoQ0FM
YXllciopYmFja2dyb3VuZExheWVyCi17Ci0gICAgcmV0dXJuIF9iYWNrZ3JvdW5kTGF5ZXI7Cisg
ICAgQ0dGbG9hdCBjdXJyZW50QWxwaGEgPSAxOworICAgIGlmIChfZmFkZUFuaW1hdGlvbikgewor
ICAgICAgICBjdXJyZW50QWxwaGEgPSBbX2ZhZGVBbmltYXRpb24uZ2V0KCkgY3VycmVudEFscGhh
XTsKKyAgICAgICAgW19mYWRlQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOworICAgICAg
ICBbX2ZhZGVBbmltYXRpb24uZ2V0KCkgc2V0V2luZG93Om5pbF07CisgICAgfQorICAgIF9mYWRl
QW5pbWF0aW9uLmFkb3B0TlMoW1tXZWJXaW5kb3dGYWRlQW5pbWF0aW9uIGFsbG9jXSBpbml0V2l0
aER1cmF0aW9uOmR1cmF0aW9uIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Ol9iYWNrZ3JvdW5kV2luZG93
LmdldCgpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5pdGlhbEFscGhhOmN1cnJlbnRBbHBoYSAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxB
bHBoYTowXSk7CisgICAgW19mYWRlQW5pbWF0aW9uLmdldCgpIHNldEFuaW1hdGlvbkJsb2NraW5n
TW9kZTpOU0FuaW1hdGlvbk5vbmJsb2NraW5nXTsKKyAgICBbX2ZhZGVBbmltYXRpb24uZ2V0KCkg
c2V0Q3VycmVudFByb2dyZXNzOjBdOworICAgIFtfZmFkZUFuaW1hdGlvbi5nZXQoKSBzdGFydEFu
aW1hdGlvbl07CisgICAgCisgICAgW19iYWNrZ3JvdW5kV2luZG93LmdldCgpIG9yZGVyV2luZG93
Ok5TV2luZG93QmVsb3cgcmVsYXRpdmVUbzpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdXTsK
KyAgICAKKyAgICAvLyBXS1dpbmRvd1NldENsaXBSZWN0IHRha2VzIHdpbmRvdyBjb29yZGluYXRl
cywgc28gY29udmVydCBmcm9tIHNjcmVlbiBjb29yZGluYXRlcyBoZXJlOgorICAgIE5TUmVjdCBm
aW5hbEJvdW5kcyA9IF9maW5hbEZyYW1lOworICAgIGZpbmFsQm91bmRzLm9yaWdpbiA9IFtbc2Vs
ZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6ZmluYWxCb3VuZHMub3JpZ2luXTsKKyAgICBX
S1dpbmRvd1NldENsaXBSZWN0KFtzZWxmIHdpbmRvd10sIGZpbmFsQm91bmRzKTsKKyAgICAKKyAg
ICBbW3NlbGYgd2luZG93XSBzZXRBdXRvZGlzcGxheTpZRVNdOworICAgIFtbc2VsZiB3aW5kb3dd
IGRpc3BsYXlJZk5lZWRlZF07CisgICAgTlNFbmFibGVTY3JlZW5VcGRhdGVzKCk7CiB9CiAKLS0g
KE5TVmlldyopYW5pbWF0aW9uVmlldwotewotICAgIHJldHVybiBfYW5pbWF0aW9uVmlldzsKLX0K
IEBlbmQKIAotI3ByYWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFyayBNZWRpYUV2ZW50TGlzdGVuZXIK
LQotTWVkaWFFdmVudExpc3RlbmVyOjpNZWRpYUV2ZW50TGlzdGVuZXIoV2ViRnVsbFNjcmVlbkNv
bnRyb2xsZXIqIGRlbGVnYXRlKQotICAgIDogRXZlbnRMaXN0ZW5lcihDUFBFdmVudExpc3RlbmVy
VHlwZSkKLSAgICAsIGRlbGVnYXRlKGRlbGVnYXRlKQoteyAKLX0KLQotUGFzc1JlZlB0cjxNZWRp
YUV2ZW50TGlzdGVuZXI+IE1lZGlhRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKFdlYkZ1bGxTY3JlZW5D
b250cm9sbGVyKiBkZWxlZ2F0ZSkgCi17IAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFF
dmVudExpc3RlbmVyKGRlbGVnYXRlKSk7IAotfQotCi1ib29sIE1lZGlhRXZlbnRMaXN0ZW5lcjo6
b3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKLXsKLSAgICByZXR1cm4g
dGhpcyA9PSAmbGlzdGVuZXI7Ci19Ci0KLXZvaWQgTWVkaWFFdmVudExpc3RlbmVyOjpoYW5kbGVF
dmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudCogZXZlbnQpCi17Ci0g
ICAgW2RlbGVnYXRlIF91cGRhdGVQb3dlckFzc2VydGlvbnNdOwotfQogCiAjZW5kaWYgLyogRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKSAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmlu
ZGV4IDg0ZjE4M2Q4YzlmNTY2ZTliOWExMmNjYzllZjVmNDY4ODYzMDJiYWUuLmQ1Y2U1NDE2ZGFm
MmY4ZjgzMDNlMzUxZDE1OTQ1OGRkMjE3M2Q0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KQEAgLTYzMDMsMjEgKzYzMDMsMTQgQEAgYm9vbCBMYXllckZsdXNoQ29udHJvbGxl
cjo6Zmx1c2hMYXllcnMoKQogCiAgICAgW19wcml2YXRlLT5uZXdGdWxsc2NyZWVuQ29udHJvbGxl
ciBzZXRFbGVtZW50OmVsZW1lbnRdOwogICAgIFtfcHJpdmF0ZS0+bmV3RnVsbHNjcmVlbkNvbnRy
b2xsZXIgc2V0V2ViVmlldzpzZWxmXTsKLSAgICBbX3ByaXZhdGUtPm5ld0Z1bGxzY3JlZW5Db250
cm9sbGVyIGVudGVyRnVsbHNjcmVlbjpbW3NlbGYgd2luZG93XSBzY3JlZW5dXTsgICAgICAgIAor
ICAgIFtfcHJpdmF0ZS0+bmV3RnVsbHNjcmVlbkNvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuOltb
c2VsZiB3aW5kb3ddIHNjcmVlbl1dOyAgICAgICAgCiB9CiAKIC0gKHZvaWQpX2V4aXRGdWxsU2Ny
ZWVuRm9yRWxlbWVudDooV2ViQ29yZTo6RWxlbWVudCopZWxlbWVudAogewogICAgIGlmICghX3By
aXZhdGUtPm5ld0Z1bGxzY3JlZW5Db250cm9sbGVyKQogICAgICAgICByZXR1cm47Ci0gICAgW19w
cml2YXRlLT5uZXdGdWxsc2NyZWVuQ29udHJvbGxlciBleGl0RnVsbHNjcmVlbl07Ci19Ci0KLS0g
KHZvaWQpX2Z1bGxTY3JlZW5SZW5kZXJlckNoYW5nZWQ6KFdlYkNvcmU6OlJlbmRlckJveCopcmVu
ZGVyZXIKLXsKLSAgICBpZiAoIV9wcml2YXRlLT5uZXdGdWxsc2NyZWVuQ29udHJvbGxlcikKLSAg
ICAgICAgX3ByaXZhdGUtPm5ld0Z1bGxzY3JlZW5Db250cm9sbGVyID0gW1tXZWJGdWxsU2NyZWVu
Q29udHJvbGxlciBhbGxvY10gaW5pdF07Ci0gICAgW19wcml2YXRlLT5uZXdGdWxsc2NyZWVuQ29u
dHJvbGxlciBzZXRSZW5kZXJlcjpyZW5kZXJlcl07CisgICAgW19wcml2YXRlLT5uZXdGdWxsc2Ny
ZWVuQ29udHJvbGxlciBleGl0RnVsbFNjcmVlbl07CiB9CiAjZW5kaWYKIAo=
</data>
<flag name="review"
          id="130948"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>