<?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>177583</bug_id>
          
          <creation_ts>2017-09-27 17:14:39 -0700</creation_ts>
          <short_desc>Add debug flag to WebKitTestRunner to show where touches are being generated</short_desc>
          <delta_ts>2018-05-09 14:03:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Megan Gardner">megan_gardner</reporter>
          <assigned_to name="Megan Gardner">megan_gardner</assigned_to>
          <cc>buildbot</cc>
    
    <cc>glenn</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1353953</commentid>
    <comment_count>0</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-09-27 17:14:39 -0700</bug_when>
    <thetext>Add debug flag to WebKitTestRunner to show where touches are being generated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353954</commentid>
    <comment_count>1</comment_count>
      <attachid>322046</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-09-27 17:16:58 -0700</bug_when>
    <thetext>Created attachment 322046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353958</commentid>
    <comment_count>2</comment_count>
      <attachid>322046</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-27 17:33:30 -0700</bug_when>
    <thetext>Comment on attachment 322046
Patch

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

&gt; Tools/WebKitTestRunner/Options.cpp:139
&gt;      optionList.append(Option(&quot;--show-webview&quot;, &quot;Show the WebView during test runs (for Debugging)&quot;, handleOptionShowWebView));
&gt; +    optionList.append(Option(&quot;--show-touches&quot;, &quot;Show the touches during test runs (for Debugging)&quot;, handleOptionShowTouches));

both of these &quot;debugging&quot; should be lower case

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:84
&gt; +static const NSUInteger debugTouchDotFrame = debugTouchDotRadius*2;

Spaces around operators!

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:157
&gt; +-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { // Never react to touches

Can&apos;t you just view.userInteractionEnabled=NO? Then you don&apos;t even need this subclass.

Also, brace should be on the next line, and remove the comment.

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:217
&gt; +        self.debugTouchViews = @[[[DebugTouchView alloc] initWithFrame:CGRectMake(10, 10, debugTouchDotFrame, debugTouchDotFrame)],

Can this be a loop that uses maxTouchCount, instead?

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:322
&gt; +- (void)updateDebugUI:(UInt)index withPoint:(CGPoint)point isTouching:(BOOL)isTouching

should probably be updateDebugIndicatorForTouch or something, not &quot;DebugUI&quot;

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:569
&gt; +        if (self.shouldShowTouches) {

Why do some of these not use the helper? Then you could put the initDebugViews call inside the helper?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353967</commentid>
    <comment_count>3</comment_count>
      <attachid>322049</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-09-27 18:06:01 -0700</bug_when>
    <thetext>Created attachment 322049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353974</commentid>
    <comment_count>4</comment_count>
      <attachid>322049</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-27 18:15:46 -0700</bug_when>
    <thetext>Comment on attachment 322049
Patch

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

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:162
&gt; +    BOOL _shouldInitDebugViews;

Do we need this, or can we just check debugTouchViews?

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:200
&gt; +        if ([[UIApplication sharedApplication] keyWindow])
&gt; +            [self initDebugViews];
&gt; +        else

Is there any reason to eagerly do it at this point? We don&apos;t support dynamically changing it (e.g. nothing ever removes views), which is fine, so shouldn&apos;t we just depend on the lazy loading mechanism always?

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:205
&gt; +- (void)initDebugViews

This is now an &quot;-IfNeeded&quot;

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:207
&gt; +    if (self.shouldShowTouches &amp;&amp; _shouldInitDebugViews) {

Should be an early return :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353987</commentid>
    <comment_count>5</comment_count>
      <attachid>322055</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-09-27 18:57:34 -0700</bug_when>
    <thetext>Created attachment 322055
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354060</commentid>
    <comment_count>6</comment_count>
      <attachid>322055</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-28 01:18:36 -0700</bug_when>
    <thetext>Comment on attachment 322055
Patch

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

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:84
&gt; +static const NSUInteger debugTouchDotFrame = debugTouchDotRadius * 2;

“Frame”? Isn’t this a size? Frame is usually a rect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354110</commentid>
    <comment_count>7</comment_count>
      <attachid>322055</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-28 08:50:40 -0700</bug_when>
    <thetext>Comment on attachment 322055
Patch

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

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:201
&gt; +        UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(10, 10, debugTouchDotFrame, debugTouchDotFrame)];

It looks like newView is leaked here. Perhaps we should use something like:

  auto newView = adoptNS([[UIView alloc] initWithFrame:CGRectMake(10, 10, debugTouchDotSize, debugTouchDotSize)]);

(or alternately, we can just manually call -release)

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:209
&gt; +    self.debugTouchViews = [NSArray arrayWithArray:debugViews];

I think we can just do `self.debugTouchViews = debugViews;` here? (Since an NSMutableArray is a kind of NSArray).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354201</commentid>
    <comment_count>8</comment_count>
      <attachid>322101</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-09-28 11:08:52 -0700</bug_when>
    <thetext>Created attachment 322101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354267</commentid>
    <comment_count>9</comment_count>
      <attachid>322055</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-09-28 13:46:52 -0700</bug_when>
    <thetext>Comment on attachment 322055
Patch

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

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:204
&gt; +        newView.backgroundColor = [UIColor colorWithRed:1.0-i*.05 green:0.0 blue:1.0-i*.05 alpha:0.5];

Spaces around operators.

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:207
&gt; +        [[[UIApplication sharedApplication] keyWindow] addSubview:newView];

Uh, this seems a bit random. I think we should explicitly pass a view to add them to so we know the coordinate system is correct.

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:299
&gt; +- (void)updateDebugIndicatorForTouch:(UInt)index withPoint:(CGPoint)point isTouching:(BOOL)isTouching

Point In what coordinate system? Method name should make that clear.

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:338
&gt; +        if (self.shouldShowTouches)
&gt; +            [self updateDebugIndicatorForTouch:[touchInfo[HIDEventTouchIDKey] intValue] withPoint:CGPointMake([touchInfo[HIDEventXKey] floatValue], [touchInfo[HIDEventYKey] floatValue]) isTouching:(BOOL)touch];

I don&apos;t think HIDEventGenerator should be in the business of doing UIView stuff. I think this code should move somewhere else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354268</commentid>
    <comment_count>10</comment_count>
      <attachid>322101</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-09-28 13:47:27 -0700</bug_when>
    <thetext>Comment on attachment 322101
Patch

r- for reasons in previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354274</commentid>
    <comment_count>11</comment_count>
      <attachid>322055</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-09-28 14:00:49 -0700</bug_when>
    <thetext>Comment on attachment 322055
Patch

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

&gt;&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:207
&gt;&gt; +        [[[UIApplication sharedApplication] keyWindow] addSubview:newView];
&gt; 
&gt; Uh, this seems a bit random. I think we should explicitly pass a view to add them to so we know the coordinate system is correct.

Maybe I don&apos;t understand HID stuff, but I thought by this time they were in global coordinate space? If that&apos;s not the case (and it sounds like it&apos;s not), then how can we determine what view these touches were meant for?

&gt;&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:338
&gt;&gt; +            [self updateDebugIndicatorForTouch:[touchInfo[HIDEventTouchIDKey] intValue] withPoint:CGPointMake([touchInfo[HIDEventXKey] floatValue], [touchInfo[HIDEventYKey] floatValue]) isTouching:(BOOL)touch];
&gt; 
&gt; I don&apos;t think HIDEventGenerator should be in the business of doing UIView stuff. I think this code should move somewhere else.

Where do you suggest? We do a lot of work here to determine where the touches are going to be, and this is just for debugging. It&apos;s not even on all the time, only the you actually turn it on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354910</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-09-30 12:02:18 -0700</bug_when>
    <thetext>(In reply to Megan Gardner from comment #11)
&gt; Comment on attachment 322055 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=322055&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:207
&gt; &gt;&gt; +        [[[UIApplication sharedApplication] keyWindow] addSubview:newView];
&gt; &gt; 
&gt; &gt; Uh, this seems a bit random. I think we should explicitly pass a view to add them to so we know the coordinate system is correct.
&gt; 
&gt; Maybe I don&apos;t understand HID stuff, but I thought by this time they were in
&gt; global coordinate space? If that&apos;s not the case (and it sounds like it&apos;s
&gt; not), then how can we determine what view these touches were meant for?

The issue here isn&apos;t necessarily that you&apos;re not adding the dots in the view that the events are targeted at, but that you have no idea about the geometry of [[UIApplication sharedApplication] keyWindow]. Maybe it&apos;s some small view owned by UIKit at some point, in which case your dots are going to show in the wrong place.

I&apos;d suggesting adding a hosting view whose geometry you can rely on, and maybe do this in some UIApplication override?

&gt; &gt;&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:338
&gt; &gt;&gt; +            [self updateDebugIndicatorForTouch:[touchInfo[HIDEventTouchIDKey] intValue] withPoint:CGPointMake([touchInfo[HIDEventXKey] floatValue], [touchInfo[HIDEventYKey] floatValue]) isTouching:(BOOL)touch];
&gt; &gt; 
&gt; &gt; I don&apos;t think HIDEventGenerator should be in the business of doing UIView stuff. I think this code should move somewhere else.
&gt; 
&gt; Where do you suggest? We do a lot of work here to determine where the
&gt; touches are going to be, and this is just for debugging. It&apos;s not even on
&gt; all the time, only the you actually turn it on.

It&apos;s not the runtime cost that I object to, but the code cleanliness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355635</commentid>
    <comment_count>13</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-10-02 17:23:42 -0700</bug_when>
    <thetext>Offensive part cleaned up and broken out into it&apos;s own file in:
https://bugs.webkit.org/show_bug.cgi?id=177796</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1422447</commentid>
    <comment_count>14</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-05-09 13:28:55 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/222631/webkit

This was committed before Simon&apos;s R-. The concerns he raised were fixed in 
https://bugs.webkit.org/show_bug.cgi?id=177796</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1422466</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-05-09 14:03:04 -0700</bug_when>
    <thetext>&lt;rdar://problem/40105531&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322046</attachid>
            <date>2017-09-27 17:16:58 -0700</date>
            <delta_ts>2017-09-27 18:05:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177583-20170927171658.patch</filename>
            <type>text/plain</type>
            <size>17189</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjU4NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQyIEBACisyMDE3LTA5LTI3ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIGRlYnVnIGZsYWcgdG8gV2ViS2l0VGVzdFJ1bm5lciB0byBz
aG93IHdoZXJlIHRvdWNoZXMgYXJlIGJlaW5nIGdlbmVyYXRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTgzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICAocGFyc2VfYXJncyk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5jbWRf
bGluZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmNwcDoKKyAgICAgICAg
KFdUUjo6T3B0aW9uczo6T3B0aW9ucyk6CisgICAgICAgIChXVFI6OmhhbmRsZU9wdGlvblNob3dU
b3VjaGVzKToKKyAgICAgICAgKFdUUjo6T3B0aW9uc0hhbmRsZXI6Ok9wdGlvbnNIYW5kbGVyKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaDoKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNob3VsZFNob3dUb3VjaGVzIGNv
bnN0KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmg6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbToKKyAgICAgICAgKC1bRGVi
dWdUb3VjaFZpZXcgcG9pbnRJbnNpZGU6d2l0aEV2ZW50Ol0pOgorICAgICAgICAoLVtISURFdmVu
dEdlbmVyYXRvciBzZXRTaG91bGRTaG93VG91Y2hlczpdKToKKyAgICAgICAgKC1bSElERXZlbnRH
ZW5lcmF0b3IgaW5pdERlYnVnVmlld3NdKToKKyAgICAgICAgKC1bSElERXZlbnRHZW5lcmF0b3Ig
dXBkYXRlRGVidWdVSTp3aXRoUG9pbnQ6aXNUb3VjaGluZzpdKToKKyAgICAgICAgKC1bSElERXZl
bnRHZW5lcmF0b3IgX2NyZWF0ZUlPSElERXZlbnRXaXRoSW5mbzpdKToKKyAgICAgICAgKC1bSElE
RXZlbnRHZW5lcmF0b3IgX2NyZWF0ZUlPSElERXZlbnRUeXBlOl0pOgorICAgICAgICAoLVtISURF
dmVudEdlbmVyYXRvciBfdXBkYXRlVG91Y2hQb2ludHM6Y291bnQ6XSk6CisgICAgICAgICgtW0hJ
REV2ZW50R2VuZXJhdG9yIHRvdWNoRG93bkF0UG9pbnRzOnRvdWNoQ291bnQ6XSk6CisgICAgICAg
ICgtW0hJREV2ZW50R2VuZXJhdG9yIGxpZnRVcEF0UG9pbnRzOnRvdWNoQ291bnQ6XSk6CisgICAg
ICAgICgtW0hJREV2ZW50R2VuZXJhdG9yIG1vdmVUb1BvaW50czp0b3VjaENvdW50OmR1cmF0aW9u
Ol0pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBtYXJrZXJFdmVudFJlY2VpdmVkOl0p
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tOgor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RP
cHRpb25zRm9yVGVzdCBjb25zdCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvbWFp
bklPUy5tbToKKyAgICAgICAgKC1bV2ViS2l0VGVzdFJ1bm5lckFwcCBfcnVuVGVzdENvbnRyb2xs
ZXJdKToKKwogMjAxNy0wOS0yNyAgTHVjYXMgRm9yc2NobGVyICA8bGZvcnNjaGxlckBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIG1hY09TIEhpZ2ggU2llcnJhIGFuZCBpT1MgU2ltdWxhdG9yIDEx
IHN1cHBvcnQgdG8gYmlzZWN0LWJ1aWxkcy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQkocmV2aXNpb24g
MjIyNDg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weQkod29ya2luZyBjb3B5KQpAQCAtMjk5LDYgKzI5OSw3IEBAIGRlZiBwYXJzZV9h
cmdzKGFyZ3MpOgogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1kZXZpY2UtdHlwZScs
IGhlbHA9J2lPUyBTaW11bGF0b3IgZGV2aWNlIHR5cGUgaWRlbnRpZmllciAoZGVmYXVsdDogaTM4
NiAtPiBpUGhvbmUgNSwgeDg2XzY0IC0+IGlQaG9uZSA1cyknKSwKICAgICAgICAgb3B0cGFyc2Uu
bWFrZV9vcHRpb24oJy0tZGVkaWNhdGVkLXNpbXVsYXRvcnMnLCBhY3Rpb249InN0b3JlX3RydWUi
LCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgaGVscD0iSWYgc2V0LCBkZWRpY2F0ZWQgaU9T
IHNpbXVsYXRvcnMgd2lsbCBhbHdheXMgYmUgY3JlYXRlZC4gIElmIG5vdCBzZXQsIHRoZSBzY3Jp
cHQgd2lsbCBhdHRlbXB0IHRvIHVzZSBhbnkgY3VycmVudGx5IHJ1bm5pbmcgc2ltdWxhdG9yLiIp
LAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1zaG93LXRvdWNoZXMnLCBhY3Rpb249
InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJJZiBzZXQsIGEgc21hbGwgZG90IHdp
bGwgYmUgc2hvd24gd2hlcmUgdGhlIGdlbmVyYXRlZCB0b3VjaGVzIGFyZS4gSGVscGZ1bCBmb3Ig
ZGVidWdnaW5nIHRvdWNoIHRlc3RzLiIpLAogICAgIF0pKQogCiAgICAgb3B0aW9uX2dyb3VwX2Rl
ZmluaXRpb25zLmFwcGVuZCgoIk1pc2NlbGxhbmVvdXMgT3B0aW9ucyIsIFsKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtNDIzLDYg
KzQyMyw4IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICAgICAgY21kLmFwcGVuZCgn
LS10aHJlYWRlZCcpCiAgICAgICAgIGlmIHNlbGYuX25vX3RpbWVvdXQ6CiAgICAgICAgICAgICBj
bWQuYXBwZW5kKCctLW5vLXRpbWVvdXQnKQorICAgICAgICBpZiBzZWxmLl9wb3J0LmdldF9vcHRp
b24oJ3Nob3dfdG91Y2hlcycpOgorICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1zaG93LXRvdWNo
ZXMnKQogCiAgICAgICAgIGZvciBhbGxvd2VkX2hvc3QgaW4gc2VsZi5fcG9ydC5hbGxvd2VkX2hv
c3RzKCk6CiAgICAgICAgICAgICBjbWQuYXBwZW5kKCctLWFsbG93ZWQtaG9zdCcpCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDIyMjQ4NikKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcg
QEAgT3B0aW9uczo6T3B0aW9ucygpCiAgICAgLCBzaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmco
ZmFsc2UpCiAgICAgLCBzaG91bGRVc2VSZW1vdGVMYXllclRyZWUoZmFsc2UpCiAgICAgLCBzaG91
bGRTaG93V2ViVmlldyhmYWxzZSkKKyAgICAsIHNob3VsZFNob3dUb3VjaGVzKGZhbHNlKQogewog
fQogCkBAIC0xMDAsNiArMTAxLDEyIEBAIGJvb2wgaGFuZGxlT3B0aW9uU2hvd1dlYlZpZXcoT3B0
aW9ucyYgb3AKICAgICBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3ID0gdHJ1ZTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KKyAgICAKK2Jvb2wgaGFuZGxlT3B0aW9uU2hvd1RvdWNoZXMoT3B0aW9ucyYg
b3B0aW9ucywgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKQoreworICAgIG9wdGlvbnMuc2hvdWxk
U2hvd1RvdWNoZXMgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQogCiBib29sIGhhbmRsZU9w
dGlvbkFsbG93ZWRIb3N0KE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFy
KiBob3N0KQogewpAQCAtMTI5LDYgKzEzNiw3IEBAIE9wdGlvbnNIYW5kbGVyOjpPcHRpb25zSGFu
ZGxlcihPcHRpb25zJiAKICAgICBvcHRpb25MaXN0LmFwcGVuZChPcHRpb24oIi0tcmVtb3RlLWxh
eWVyLXRyZWUiLCAiVXNlIHJlbW90ZSBsYXllciB0cmVlLiIsIGhhbmRsZU9wdGlvblJlbW90ZUxh
eWVyVHJlZSkpOwogICAgIG9wdGlvbkxpc3QuYXBwZW5kKE9wdGlvbigiLS1hbGxvd2VkLWhvc3Qi
LCAiQWxsb3dzIGFjY2VzcyB0byB0aGUgc3BlY2lmaWVkIGhvc3QgZnJvbSB0ZXN0cy4iLCBoYW5k
bGVPcHRpb25BbGxvd2VkSG9zdCwgdHJ1ZSkpOwogICAgIG9wdGlvbkxpc3QuYXBwZW5kKE9wdGlv
bigiLS1zaG93LXdlYnZpZXciLCAiU2hvdyB0aGUgV2ViVmlldyBkdXJpbmcgdGVzdCBydW5zIChm
b3IgRGVidWdnaW5nKSIsIGhhbmRsZU9wdGlvblNob3dXZWJWaWV3KSk7CisgICAgb3B0aW9uTGlz
dC5hcHBlbmQoT3B0aW9uKCItLXNob3ctdG91Y2hlcyIsICJTaG93IHRoZSB0b3VjaGVzIGR1cmlu
ZyB0ZXN0IHJ1bnMgKGZvciBEZWJ1Z2dpbmcpIiwgaGFuZGxlT3B0aW9uU2hvd1RvdWNoZXMpKTsK
IAogICAgIG9wdGlvbkxpc3QuYXBwZW5kKE9wdGlvbigwLCAwLCBoYW5kbGVPcHRpb25Vbm1hdGNo
ZWQpKTsKIH0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCShyZXZpc2lvbiAyMjI0ODYp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNiArNDgsNyBAQCBzdHJ1Y3QgT3B0aW9ucyB7CiAgICAgYm9vbCBzaG91bGRVc2VBY2NlbGVy
YXRlZERyYXdpbmc7CiAgICAgYm9vbCBzaG91bGRVc2VSZW1vdGVMYXllclRyZWU7CiAgICAgYm9v
bCBzaG91bGRTaG93V2ViVmlldzsKKyAgICBib29sIHNob3VsZFNob3dUb3VjaGVzOwogICAgIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXRoczsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gYWxsb3dlZEhvc3RzOwogfTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDYgKzM2OSw3IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFyZ2MKICAgICBtX3BhdGhzID0gb3B0
aW9ucy5wYXRoczsKICAgICBtX2FsbG93ZWRIb3N0cyA9IG9wdGlvbnMuYWxsb3dlZEhvc3RzOwog
ICAgIG1fc2hvdWxkU2hvd1dlYlZpZXcgPSBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3OworICAg
IG1fc2hvdWxkU2hvd1RvdWNoZXMgPSBvcHRpb25zLnNob3VsZFNob3dUb3VjaGVzOwogCiAgICAg
aWYgKG9wdGlvbnMucHJpbnRTdXBwb3J0ZWRGZWF0dXJlcykgewogICAgICAgICAvLyBGSVhNRTog
T24gV2luZG93cywgRHVtcFJlbmRlclRyZWUgdXNlcyB0aGlzIHRvIGV4cG9zZSB3aGV0aGVyIGl0
IHN1cHBvcnRzIDNkCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
CShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDggQEAgcHVibGljOgogICAgIGJvb2wg
dXNpbmdTZXJ2ZXJNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91c2luZ1NlcnZlck1vZGU7IH0KICAg
ICB2b2lkIGNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CiAgICAg
CisgICAgYm9vbCBzaG91bGRTaG93VG91Y2hlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU2hv
d1RvdWNoZXM7IH0KKyAgICAKICAgICBib29sIGJlZm9yZVVubG9hZFJldHVyblZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV9iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZTsgfQogICAgIHZvaWQgc2V0QmVm
b3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbCB2YWx1ZSkgeyBtX2JlZm9yZVVubG9hZFJldHVyblZh
bHVlID0gdmFsdWU7IH0KIApAQCAtMzkwLDYgKzM5Miw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3Nob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFja3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9z
aG91bGRTaG93V2ViVmlldyB7IGZhbHNlIH07CiAgICAgCisgICAgYm9vbCBtX3Nob3VsZFNob3dU
b3VjaGVzIHsgZmFsc2UgfTsKKyAgICAKICAgICBib29sIG1fc2hvdWxkRGVjaWRlTmF2aWdhdGlv
blBvbGljeUFmdGVyRGVsYXkgeyBmYWxzZSB9OwogCiAgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJl
Zj4gbV9vcGVuUGFuZWxGaWxlVVJMczsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRp
b25zLmgJKHJldmlzaW9uIDIyMjQ4NikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9w
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBzdHJ1Y3QgVGVzdE9wdGlv
bnMgewogICAgIGJvb2wgZW5hYmxlQ3JlZGVudGlhbE1hbmFnZW1lbnQgeyBmYWxzZSB9OwogICAg
IGJvb2wgZW5hYmxlSXNTZWN1cmVDb250ZXh0QXR0cmlidXRlIHsgdHJ1ZSB9OwogICAgIGJvb2wg
ZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZFNob3dU
b3VjaGVzIHsgZmFsc2UgfTsKIAogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yIHsgMSB9Owog
ICAgIFZlY3RvcjxTdHJpbmc+IG92ZXJyaWRlTGFuZ3VhZ2VzOwpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5oCShyZXZpc2lvbiAyMjI0ODYp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGV4dGVybiBOU1N0cmluZyogY29uc3QgSElERXZl
bnRQaGFzZUNhbmMKIAogQGludGVyZmFjZSBISURFdmVudEdlbmVyYXRvciA6IE5TT2JqZWN0CiAK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIEJPT0wgc2hvdWxkU2hvd1RvdWNoZXM7CisK
ICsgKEhJREV2ZW50R2VuZXJhdG9yICopc2hhcmVkSElERXZlbnRHZW5lcmF0b3I7CiAKIC8vIFRv
dWNoZXMKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9y
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2Vu
ZXJhdG9yLm1tCShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9ISURFdmVudEdlbmVyYXRvci5tbQkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOSBAQCBz
dGF0aWMgY29uc3QgSU9ISURGbG9hdCBkZWZhdWx0UGF0aFByZXNzCiBzdGF0aWMgY29uc3QgTlNV
SW50ZWdlciBtYXhUb3VjaENvdW50ID0gNTsKIHN0YXRpYyBjb25zdCBsb25nIG5hbm9zZWNvbmRz
UGVyU2Vjb25kID0gMWU5OwogCitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciBkZWJ1Z1RvdWNoRG90
UmFkaXVzID0gNTsKK3N0YXRpYyBjb25zdCBOU1VJbnRlZ2VyIGRlYnVnVG91Y2hEb3RGcmFtZSA9
IGRlYnVnVG91Y2hEb3RSYWRpdXMqMjsKKwogc3RhdGljIGludCBmaW5nZXJJZGVudGlmaWVyc1tt
YXhUb3VjaENvdW50XSA9IHsgMiwgMywgNCwgNSwgMSB9OwogCiB0eXBlZGVmIGVudW0gewpAQCAt
MTQ3LDE0ICsxNTAsMjUgQEAgc3RhdGljIHZvaWQgZGVsYXlCZXR3ZWVuTW92ZShpbnQgZXZlbnRJ
bgogICAgIH0gICAKIH0KIAorQGludGVyZmFjZSBEZWJ1Z1RvdWNoVmlldyA6IFVJVmlldworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gRGVidWdUb3VjaFZpZXcKKy0oQk9PTClwb2ludEluc2lkZToo
Q0dQb2ludClwb2ludCB3aXRoRXZlbnQ6KFVJRXZlbnQgKilldmVudCB7IC8vIE5ldmVyIHJlYWN0
IHRvIHRvdWNoZXMKKyAgICByZXR1cm4gTk87Cit9CitAZW5kCisKIEBpbnRlcmZhY2UgSElERXZl
bnRHZW5lcmF0b3IgKCkKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TTXV0YWJsZURp
Y3Rpb25hcnkgKmV2ZW50Q2FsbGJhY2tzOworQHByb3BlcnR5IChub25hdG9taWMsIHN0cm9uZykg
TlNBcnJheTxEZWJ1Z1RvdWNoVmlldyAqPiAqZGVidWdUb3VjaFZpZXdzOwogQGVuZAogCiBAaW1w
bGVtZW50YXRpb24gSElERXZlbnRHZW5lcmF0b3IgewogICAgIElPSElERXZlbnRTeXN0ZW1DbGll
bnRSZWYgX2lvU3lzdGVtQ2xpZW50OwogICAgIFN5bnRoZXRpY0V2ZW50RGlnaXRpemVySW5mbyBf
YWN0aXZlUG9pbnRzW21heFRvdWNoQ291bnRdOwogICAgIE5TVUludGVnZXIgX2FjdGl2ZVBvaW50
Q291bnQ7CisgICAgQk9PTCBfc2hvdWxkSW5pdERlYnVnVmlld3M7CiB9CiAKICsgKEhJREV2ZW50
R2VuZXJhdG9yICopc2hhcmVkSElERXZlbnRHZW5lcmF0b3IKQEAgLTE4Niw2ICsyMDAsMzggQEAg
LSAoaW5zdGFuY2V0eXBlKWluaXQKICAgICByZXR1cm4gc2VsZjsKIH0KIAorLSAodm9pZClzZXRT
aG91bGRTaG93VG91Y2hlczooQk9PTClzaG91bGRTaG93VG91Y2hlcworeworICAgIF9zaG91bGRT
aG93VG91Y2hlcyA9IHNob3VsZFNob3dUb3VjaGVzOworICAgIGlmIChfc2hvdWxkU2hvd1RvdWNo
ZXMgJiYgIV9zaG91bGRJbml0RGVidWdWaWV3cykgeworICAgICAgICBpZiAoW1tVSUFwcGxpY2F0
aW9uIHNoYXJlZEFwcGxpY2F0aW9uXSBrZXlXaW5kb3ddKQorICAgICAgICAgICAgW3NlbGYgaW5p
dERlYnVnVmlld3NdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBfc2hvdWxkSW5pdERlYnVn
Vmlld3MgPSBZRVM7CisgICAgfQorfQorCistICh2b2lkKWluaXREZWJ1Z1ZpZXdzCit7CisgICAg
aWYgKHNlbGYuc2hvdWxkU2hvd1RvdWNoZXMgJiYgX3Nob3VsZEluaXREZWJ1Z1ZpZXdzKSB7Cisg
ICAgICAgIHNlbGYuZGVidWdUb3VjaFZpZXdzID0gQFtbW0RlYnVnVG91Y2hWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMTAsIDEwLCBkZWJ1Z1RvdWNoRG90RnJhbWUsIGRlYnVn
VG91Y2hEb3RGcmFtZSldLAorICAgICAgICAgICAgW1tEZWJ1Z1RvdWNoVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpDR1JlY3RNYWtlKDEwLCAxMCwgZGVidWdUb3VjaERvdEZyYW1lLCBkZWJ1Z1Rv
dWNoRG90RnJhbWUpXSwKKyAgICAgICAgICAgIFtbRGVidWdUb3VjaFZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgxMCwgMTAsIGRlYnVnVG91Y2hEb3RGcmFtZSwgZGVidWdUb3Vj
aERvdEZyYW1lKV0sCisgICAgICAgICAgICBbW0RlYnVnVG91Y2hWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMTAsIDEwLCBkZWJ1Z1RvdWNoRG90RnJhbWUsIGRlYnVnVG91Y2hE
b3RGcmFtZSldLAorICAgICAgICAgICAgW1tEZWJ1Z1RvdWNoVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDEwLCAxMCwgZGVidWdUb3VjaERvdEZyYW1lLCBkZWJ1Z1RvdWNoRG90
RnJhbWUpXV07CisgICAgICAgIAorICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBt
YXhUb3VjaENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIERlYnVnVG91Y2hWaWV3ICpuZXdWaWV3
ID0gc2VsZi5kZWJ1Z1RvdWNoVmlld3NbaV07CisgICAgICAgICAgICBuZXdWaWV3LmxheWVyLmNv
cm5lclJhZGl1cyA9IGRlYnVnVG91Y2hEb3RSYWRpdXM7CisgICAgICAgICAgICBuZXdWaWV3LmJh
Y2tncm91bmRDb2xvciA9IFtVSUNvbG9yIGNvbG9yV2l0aFJlZDoxLjAtaSouMDUgZ3JlZW46MC4w
IGJsdWU6MS4wLWkqLjA1IGFscGhhOjAuNV07CisgICAgICAgICAgICBuZXdWaWV3LmhpZGRlbiA9
IFlFUzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgW1tbVUlBcHBsaWNhdGlvbiBzaGFyZWRB
cHBsaWNhdGlvbl0ga2V5V2luZG93XSBhZGRTdWJ2aWV3Om5ld1ZpZXddOworICAgICAgICB9Cisg
ICAgICAgIF9zaG91bGRJbml0RGVidWdWaWV3cyA9IE5POworICAgIH0KK30KKwogLSAodm9pZClf
c2VuZElPSElES2V5Ym9hcmRFdmVudDoodWludDY0X3QpdGltZXN0YW1wIHVzYWdlOih1aW50MzJf
dCl1c2FnZSBpc0tleURvd246KGJvb2wpaXNLZXlEb3duCiB7CiAgICAgUmV0YWluUHRyPElPSElE
RXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRlS2V5Ym9hcmRFdmVu
dChrQ0ZBbGxvY2F0b3JEZWZhdWx0LApAQCAtMjczLDYgKzMxOSwxMiBAQCAtIChDRkluZGV4KXRv
dWNoRnJvbUV2ZW50SW5mbzooTlNEaWN0aW9uCiAgICAgcmV0dXJuIDA7CiB9CiAKKy0gKHZvaWQp
dXBkYXRlRGVidWdVSTooVUludClpbmRleCB3aXRoUG9pbnQ6KENHUG9pbnQpcG9pbnQgaXNUb3Vj
aGluZzooQk9PTClpc1RvdWNoaW5nCit7CisgICAgc2VsZi5kZWJ1Z1RvdWNoVmlld3NbaW5kZXhd
LmhpZGRlbiA9ICFpc1RvdWNoaW5nOworICAgIHNlbGYuZGVidWdUb3VjaFZpZXdzW2luZGV4XS5j
ZW50ZXIgPSBwb2ludDsKK30KKwogLy8gRklYTUU6IGNhbGxlcnMgb2YgX2NyZWF0ZUlPSElERXZl
bnRUeXBlIGNvdWxkIHN3aXRjaCB0byB0aGlzLgogLSAoSU9ISURFdmVudFJlZilfY3JlYXRlSU9I
SURFdmVudFdpdGhJbmZvOihOU0RpY3Rpb25hcnkgKilpbmZvCiB7CkBAIC0zMDMsNyArMzU1LDkg
QEAgLSAoSU9ISURFdmVudFJlZilfY3JlYXRlSU9ISURFdmVudFdpdGhJbgogCiAgICAgTlNBcnJh
eSAqY2hpbGRFdmVudHMgPSBpbmZvW0hJREV2ZW50VG91Y2hlc0tleV07CiAgICAgZm9yIChOU0Rp
Y3Rpb25hcnkgKnRvdWNoSW5mbyBpbiBjaGlsZEV2ZW50cykgewotCisgICAgICAgIGlmIChzZWxm
LnNob3VsZFNob3dUb3VjaGVzKQorICAgICAgICAgICAgW3NlbGYgdXBkYXRlRGVidWdVSTpbdG91
Y2hJbmZvW0hJREV2ZW50VG91Y2hJREtleV0gaW50VmFsdWVdIHdpdGhQb2ludDpDR1BvaW50TWFr
ZShbdG91Y2hJbmZvW0hJREV2ZW50WEtleV0gZmxvYXRWYWx1ZV0sIFt0b3VjaEluZm9bSElERXZl
bnRZS2V5XSBmbG9hdFZhbHVlXSkgaXNUb3VjaGluZzooQk9PTCl0b3VjaF07CisgICAgICAgIAog
ICAgICAgICBJT0hJRERpZ2l0aXplckV2ZW50TWFzayBjaGlsZEV2ZW50TWFzayA9IDA7CiAKICAg
ICAgICAgVUlUb3VjaFBoYXNlIHBoYXNlID0gcGhhc2VGcm9tU3RyaW5nKHRvdWNoSW5mb1tISURF
dmVudFBoYXNlS2V5XSk7CkBAIC0zOTAsNiArNDQ0LDkgQEAgLSAoSU9ISURFdmVudFJlZilfY3Jl
YXRlSU9ISURFdmVudFR5cGU6KAogCiAgICAgICAgIENHUG9pbnQgcG9pbnQgPSBwb2ludEluZm8t
PnBvaW50OwogICAgICAgICBwb2ludCA9IENHUG9pbnRNYWtlKHJvdW5kZihwb2ludC54KSwgcm91
bmRmKHBvaW50LnkpKTsKKyAgICAgICAgaWYgKHNlbGYuc2hvdWxkU2hvd1RvdWNoZXMpCisgICAg
ICAgICAgICBbc2VsZiB1cGRhdGVEZWJ1Z1VJOmkgd2l0aFBvaW50OnBvaW50IGlzVG91Y2hpbmc6
aXNUb3VjaGluZ107CisKICAgICAgICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IHN1YkV2ZW50
OwogICAgICAgICBpZiAocG9pbnRJbmZvLT5pc1N0eWx1cykgewogICAgICAgICAgICAgaWYgKGV2
ZW50VHlwZSA9PSBTdHlsdXNFdmVudFRvdWNoZWQpIHsKQEAgLTQ5MCw2ICs1NDcsOSBAQCAtICh2
b2lkKV91cGRhdGVUb3VjaFBvaW50czooQ0dQb2ludCopcG9pCiB7CiAgICAgSGFuZEV2ZW50VHlw
ZSBoYW5kRXZlbnRUeXBlOwogICAgIAorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc29saWRh
dGUgd2hlcmUgdG91Y2hlcyBnbyB0aHJvdWdoLCBhbmQgZG8gb3VyIGRlYnVnIHBhaW50aW5nIHRo
ZXJlCisgICAgW3NlbGYgaW5pdERlYnVnVmlld3NdOworICAgIAogICAgIC8vIFRoZSBoYW5kIGV2
ZW50IHR5cGUgaXMgYmFzZWQgb24gcHJldmlvdXMgc3RhdGUuCiAgICAgaWYgKCFfYWN0aXZlUG9p
bnRDb3VudCkKICAgICAgICAgaGFuZEV2ZW50VHlwZSA9IEhhbmRFdmVudFRvdWNoZWQ7CkBAIC01
MDQsOCArNTY0LDEzIEBAIC0gKHZvaWQpX3VwZGF0ZVRvdWNoUG9pbnRzOihDR1BvaW50Kilwb2kK
ICAgICBfYWN0aXZlUG9pbnRDb3VudCA9IGNvdW50OwogCiAgICAgLy8gVXBkYXRlIHBvaW50IGxv
Y2F0aW9ucy4KLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgX2FjdGl2
ZVBvaW50c1tpXS5wb2ludCA9IHBvaW50c1tpXTsKKyAgICAgICAgaWYgKHNlbGYuc2hvdWxkU2hv
d1RvdWNoZXMpIHsKKyAgICAgICAgICAgIHNlbGYuZGVidWdUb3VjaFZpZXdzW2ldLmhpZGRlbiA9
IE5POworICAgICAgICAgICAgc2VsZi5kZWJ1Z1RvdWNoVmlld3NbaV0uY2VudGVyID0gcG9pbnRz
W2ldOworICAgICAgICB9CisgICAgfQogICAgIAogICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVm
PiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOmhhbmRFdmVu
dFR5cGVdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKQEAgLTUx
Myw2ICs1NzgsOSBAQCAtICh2b2lkKV91cGRhdGVUb3VjaFBvaW50czooQ0dQb2ludCopcG9pCiAK
IC0gKHZvaWQpdG91Y2hEb3duQXRQb2ludHM6KENHUG9pbnQqKWxvY2F0aW9ucyB0b3VjaENvdW50
OihOU1VJbnRlZ2VyKXRvdWNoQ291bnQKIHsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNv
bGlkYXRlIHdoZXJlIHRvdWNoZXMgZ28gdGhyb3VnaCwgYW5kIGRvIG91ciBkZWJ1ZyBwYWludGlu
ZyB0aGVyZQorICAgIFtzZWxmIGluaXREZWJ1Z1ZpZXdzXTsKKyAgICAKICAgICB0b3VjaENvdW50
ID0gTUlOKHRvdWNoQ291bnQsIG1heFRvdWNoQ291bnQpOwogCiAgICAgX2FjdGl2ZVBvaW50Q291
bnQgPSB0b3VjaENvdW50OwpAQCAtNTIwLDYgKzU4OCwxMSBAQCAtICh2b2lkKXRvdWNoRG93bkF0
UG9pbnRzOihDR1BvaW50Kilsb2NhCiAgICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5k
ZXggPCB0b3VjaENvdW50OyArK2luZGV4KSB7CiAgICAgICAgIF9hY3RpdmVQb2ludHNbaW5kZXhd
LnBvaW50ID0gbG9jYXRpb25zW2luZGV4XTsKICAgICAgICAgX2FjdGl2ZVBvaW50c1tpbmRleF0u
aXNTdHlsdXMgPSBOTzsKKyAgICAgICAgCisgICAgICAgIGlmIChzZWxmLnNob3VsZFNob3dUb3Vj
aGVzKSB7CisgICAgICAgICAgICBzZWxmLmRlYnVnVG91Y2hWaWV3c1tpbmRleF0uaGlkZGVuID0g
Tk87CisgICAgICAgICAgICBzZWxmLmRlYnVnVG91Y2hWaWV3c1tpbmRleF0uY2VudGVyID0gbG9j
YXRpb25zW2luZGV4XTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIFJldGFpblB0cjxJT0hJREV2
ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhh
bmRFdmVudFRvdWNoZWRdKTsKQEAgLTU1MCw4ICs2MjMsMTEgQEAgLSAodm9pZClsaWZ0VXBBdFBv
aW50czooQ0dQb2ludCopbG9jYXRpbwogCiAgICAgTlNVSW50ZWdlciBuZXdQb2ludENvdW50ID0g
X2FjdGl2ZVBvaW50Q291bnQgLSB0b3VjaENvdW50OwogCi0gICAgZm9yIChOU1VJbnRlZ2VyIGlu
ZGV4ID0gMDsgaW5kZXggPCB0b3VjaENvdW50OyArK2luZGV4KQorICAgIGZvciAoTlNVSW50ZWdl
ciBpbmRleCA9IDA7IGluZGV4IDwgdG91Y2hDb3VudDsgKytpbmRleCkgewogICAgICAgICBfYWN0
aXZlUG9pbnRzW25ld1BvaW50Q291bnQgKyBpbmRleF0ucG9pbnQgPSBsb2NhdGlvbnNbaW5kZXhd
OworICAgICAgICBpZiAoc2VsZi5zaG91bGRTaG93VG91Y2hlcykKKyAgICAgICAgICAgIHNlbGYu
ZGVidWdUb3VjaFZpZXdzW2luZGV4XS5oaWRkZW4gPSBZRVM7CisgICAgfQogICAgIAogICAgIFJl
dGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlP
SElERXZlbnRUeXBlOkhhbmRFdmVudExpZnRlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6
ZXZlbnRSZWYuZ2V0KCldOwpAQCAtNTc4LDYgKzY1NCw5IEBAIC0gKHZvaWQpbGlmdFVwOihDR1Bv
aW50KWxvY2F0aW9uCiAKIC0gKHZvaWQpbW92ZVRvUG9pbnRzOihDR1BvaW50KiluZXdMb2NhdGlv
bnMgdG91Y2hDb3VudDooTlNVSW50ZWdlcil0b3VjaENvdW50IGR1cmF0aW9uOihOU1RpbWVJbnRl
cnZhbClzZWNvbmRzCiB7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zb2xpZGF0ZSB3aGVy
ZSB0b3VjaGVzIGdvIHRocm91Z2gsIGFuZCBkbyBvdXIgZGVidWcgcGFpbnRpbmcgdGhlcmUKKyAg
ICBbc2VsZiBpbml0RGVidWdWaWV3c107CisgICAgCiAgICAgdG91Y2hDb3VudCA9IE1JTih0b3Vj
aENvdW50LCBtYXhUb3VjaENvdW50KTsKIAogICAgIENHUG9pbnQgc3RhcnRMb2NhdGlvbnNbdG91
Y2hDb3VudF07CkBAIC03NTMsNiArODMyLDkgQEAgLSAodm9pZCltYXJrZXJFdmVudFJlY2VpdmVk
OihJT0hJREV2ZW50UgogewogICAgIGlmIChJT0hJREV2ZW50R2V0VHlwZShldmVudCkgIT0ga0lP
SElERXZlbnRUeXBlVmVuZG9yRGVmaW5lZCkKICAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgY29uc29saWRhdGUgd2hlcmUgdG91Y2hlcyBnbyB0aHJvdWdoLCBh
bmQgZG8gb3VyIGRlYnVnIHBhaW50aW5nIHRoZXJlCisgICAgW3NlbGYgaW5pdERlYnVnVmlld3Nd
OwogCiAgICAgQ0ZJbmRleCBjYWxsYmFja0lEID0gSU9ISURFdmVudEdldEludGVnZXJWYWx1ZShl
dmVudCwga0lPSElERXZlbnRGaWVsZFZlbmRvckRlZmluZWREYXRhKTsKICAgICB2b2lkICheY29t
cGxldGlvbkJsb2NrKSgpID0gW19ldmVudENhbGxiYWNrcyBvYmplY3RGb3JLZXk6QChjYWxsYmFj
a0lEKV07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJv
bGxlcklPUy5tbQkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNyw4ICsxMjcsMTEg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaQogICAgIC8vIFdLQnVu
ZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24oZmFsc2UpLgogfQogCi12
b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JU
ZXN0KFRlc3RPcHRpb25zJiwgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAordm9pZCBUZXN0Q29u
dHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0
aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAogeworICAgIAorICAgIG9w
dGlvbnMuc2hvdWxkU2hvd1RvdWNoZXMgPSBzaG91bGRTaG93VG91Y2hlcygpOworICAgIFtbSElE
RXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIHNldFNob3VsZFNob3dUb3Vj
aGVzOm9wdGlvbnMuc2hvdWxkU2hvd1RvdWNoZXNdOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL21haW5JT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvbWFpbklPUy5tbQkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvbWFpbklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBAaW50ZXJm
YWNlIFdlYktpdFRlc3RSdW5uZXJBcHAgOiBVSUFwcGxpCiAtICh2b2lkKV9ydW5UZXN0Q29udHJv
bGxlcgogewogICAgIFdUUjo6VGVzdENvbnRyb2xsZXIgY29udHJvbGxlcihfYXJnYywgX2FyZ3Yp
OworICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIHNldFNo
b3VsZFNob3dUb3VjaGVzOldUUjo6VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNob3VsZFNo
b3dUb3VjaGVzKCldOwogfQogCiAtICh2b2lkKWFwcGxpY2F0aW9uRGlkRmluaXNoTGF1bmNoaW5n
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322049</attachid>
            <date>2017-09-27 18:06:01 -0700</date>
            <delta_ts>2017-09-27 18:57:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177583-20170927180600.patch</filename>
            <type>text/plain</type>
            <size>15816</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjU4NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ3IEBACisyMDE3LTA5LTI3ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIGRlYnVnIGZsYWcgdG8gV2ViS2l0VGVzdFJ1bm5lciB0byBz
aG93IHdoZXJlIHRvdWNoZXMgYXJlIGJlaW5nIGdlbmVyYXRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTgzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgZmxhZywgYW5kIHRoZSBhYmlsaXR5
IHRvIHBhaW50IGEgZG90IHdoZXJlIHRoZSBISURFdmVudEdlbmVyYXRvciBpcyBjcmVhdGluZyBm
YWtlIHRvdWNoZXMgdG8KKyAgICAgICAgc2VuZCB0aHJvdWdoIFVJS2l0LiBUaGlzIHdpbGwgaGVs
cCBpbiBkZWJ1Z2dpbmcgdG91Y2ggdGVzdHMsIGJlY2F1c2UgaXQgd2lsbCBiZSBlYXNpZXIgdG8g
c2VlIGlmCisgICAgICAgIG9uZSBpcyBhY3R1YWxseSBzZW5kaW5nIHRoZSB0b3VjaGVzIGF0IHRo
ZSBsb2NhdGlvbnMgdGhhdCB0aGV5IGV4cGVjdC4gVGhpcyB3aWxsIGhlbHAgZGlmZmVyZW50aWF0
ZSBiZXR3ZWVuCisgICAgICAgIHByb2JsZW1zIGluIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHRvdWNo
ZXMsIGFuZCBvdGhlciBwcm9ibGVtcyB0aGF0IGNhbiBjb21lIHVwIHdoZW4gd3JpdGluZyB0ZXN0
cy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHk6CisgICAgICAgIChwYXJzZV9hcmdzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLmNtZF9saW5lKToKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuY3BwOgorICAgICAgICAoV1RSOjpPcHRpb25zOjpP
cHRpb25zKToKKyAgICAgICAgKFdUUjo6aGFuZGxlT3B0aW9uU2hvd1RvdWNoZXMpOgorICAgICAg
ICAoV1RSOjpPcHRpb25zSGFuZGxlcjo6T3B0aW9uc0hhbmRsZXIpOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvT3B0aW9ucy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6c2hvdWxkU2hvd1RvdWNoZXMgY29uc3QpOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
aW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tOgorICAgICAgICAoLVtEZWJ1Z1RvdWNoVmlldyBwb2lu
dEluc2lkZTp3aXRoRXZlbnQ6XSk6CisgICAgICAgICgtW0hJREV2ZW50R2VuZXJhdG9yIHNldFNo
b3VsZFNob3dUb3VjaGVzOl0pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBpbml0RGVi
dWdWaWV3c10pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciB1cGRhdGVEZWJ1Z1VJOndp
dGhQb2ludDppc1RvdWNoaW5nOl0pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBfY3Jl
YXRlSU9ISURFdmVudFdpdGhJbmZvOl0pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBf
Y3JlYXRlSU9ISURFdmVudFR5cGU6XSk6CisgICAgICAgICgtW0hJREV2ZW50R2VuZXJhdG9yIF91
cGRhdGVUb3VjaFBvaW50czpjb3VudDpdKToKKyAgICAgICAgKC1bSElERXZlbnRHZW5lcmF0b3Ig
dG91Y2hEb3duQXRQb2ludHM6dG91Y2hDb3VudDpdKToKKyAgICAgICAgKC1bSElERXZlbnRHZW5l
cmF0b3IgbGlmdFVwQXRQb2ludHM6dG91Y2hDb3VudDpdKToKKyAgICAgICAgKC1bSElERXZlbnRH
ZW5lcmF0b3IgbW92ZVRvUG9pbnRzOnRvdWNoQ291bnQ6ZHVyYXRpb246XSk6CisgICAgICAgICgt
W0hJREV2ZW50R2VuZXJhdG9yIG1hcmtlckV2ZW50UmVjZWl2ZWQ6XSk6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNv
bnN0KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9tYWluSU9TLm1tOgorICAgICAg
ICAoLVtXZWJLaXRUZXN0UnVubmVyQXBwIF9ydW5UZXN0Q29udHJvbGxlcl0pOgorCiAyMDE3LTA5
LTI3ICBMdWNhcyBGb3JzY2hsZXIgIDxsZm9yc2NobGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgbWFjT1MgSGlnaCBTaWVycmEgYW5kIGlPUyBTaW11bGF0b3IgMTEgc3VwcG9ydCB0byBiaXNl
Y3QtYnVpbGRzLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTksNiArMjk5LDcgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncyk6CiAgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWRldmljZS10eXBlJywgaGVscD0naU9TIFNpbXVs
YXRvciBkZXZpY2UgdHlwZSBpZGVudGlmaWVyIChkZWZhdWx0OiBpMzg2IC0+IGlQaG9uZSA1LCB4
ODZfNjQgLT4gaVBob25lIDVzKScpLAogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1k
ZWRpY2F0ZWQtc2ltdWxhdG9ycycsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2Us
CiAgICAgICAgICAgICBoZWxwPSJJZiBzZXQsIGRlZGljYXRlZCBpT1Mgc2ltdWxhdG9ycyB3aWxs
IGFsd2F5cyBiZSBjcmVhdGVkLiAgSWYgbm90IHNldCwgdGhlIHNjcmlwdCB3aWxsIGF0dGVtcHQg
dG8gdXNlIGFueSBjdXJyZW50bHkgcnVubmluZyBzaW11bGF0b3IuIiksCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCctLXNob3ctdG91Y2hlcycsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRl
ZmF1bHQ9RmFsc2UsIGhlbHA9IklmIHNldCwgYSBzbWFsbCBkb3Qgd2lsbCBiZSBzaG93biB3aGVy
ZSB0aGUgZ2VuZXJhdGVkIHRvdWNoZXMgYXJlLiBIZWxwZnVsIGZvciBkZWJ1Z2dpbmcgdG91Y2gg
dGVzdHMuIiksCiAgICAgXSkpCiAKICAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5k
KCgiTWlzY2VsbGFuZW91cyBPcHRpb25zIiwgWwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNiArNDIzLDggQEAgY2xhc3Mg
RHJpdmVyKG9iamVjdCk6CiAgICAgICAgICAgICBjbWQuYXBwZW5kKCctLXRocmVhZGVkJykKICAg
ICAgICAgaWYgc2VsZi5fbm9fdGltZW91dDoKICAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tbm8t
dGltZW91dCcpCisgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbignc2hvd190b3VjaGVz
Jyk6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctLXNob3ctdG91Y2hlcycpCiAKICAgICAgICAg
Zm9yIGFsbG93ZWRfaG9zdCBpbiBzZWxmLl9wb3J0LmFsbG93ZWRfaG9zdHMoKToKICAgICAgICAg
ICAgIGNtZC5hcHBlbmQoJy0tYWxsb3dlZC1ob3N0JykKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9P
cHRpb25zLmNwcAkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9P
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBPcHRpb25zOjpPcHRp
b25zKCkKICAgICAsIHNob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyhmYWxzZSkKICAgICAsIHNo
b3VsZFVzZVJlbW90ZUxheWVyVHJlZShmYWxzZSkKICAgICAsIHNob3VsZFNob3dXZWJWaWV3KGZh
bHNlKQorICAgICwgc2hvdWxkU2hvd1RvdWNoZXMoZmFsc2UpCiB7CiB9CiAKQEAgLTEwMCw2ICsx
MDEsMTIgQEAgYm9vbCBoYW5kbGVPcHRpb25TaG93V2ViVmlldyhPcHRpb25zJiBvcAogICAgIG9w
dGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgPSB0cnVlOwogICAgIHJldHVybiB0cnVlOwogfQorICAg
IAorYm9vbCBoYW5kbGVPcHRpb25TaG93VG91Y2hlcyhPcHRpb25zJiBvcHRpb25zLCBjb25zdCBj
aGFyKiwgY29uc3QgY2hhciopCit7CisgICAgb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlcyA9IHRy
dWU7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKIGJvb2wgaGFuZGxlT3B0aW9uQWxsb3dlZEhvc3Qo
T3B0aW9ucyYgb3B0aW9ucywgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqIGhvc3QpCiB7CkBAIC0x
MjgsNyArMTM1LDggQEAgT3B0aW9uc0hhbmRsZXI6Ok9wdGlvbnNIYW5kbGVyKE9wdGlvbnMmIAog
ICAgIG9wdGlvbkxpc3QuYXBwZW5kKE9wdGlvbigiLS1hY2NlbGVyYXRlZC1kcmF3aW5nIiwgIlVz
ZSBhY2NlbGVyYXRlZCBkcmF3aW5nLiIsIGhhbmRsZU9wdGlvbkFjY2VsZXJhdGVkRHJhd2luZykp
OwogICAgIG9wdGlvbkxpc3QuYXBwZW5kKE9wdGlvbigiLS1yZW1vdGUtbGF5ZXItdHJlZSIsICJV
c2UgcmVtb3RlIGxheWVyIHRyZWUuIiwgaGFuZGxlT3B0aW9uUmVtb3RlTGF5ZXJUcmVlKSk7CiAg
ICAgb3B0aW9uTGlzdC5hcHBlbmQoT3B0aW9uKCItLWFsbG93ZWQtaG9zdCIsICJBbGxvd3MgYWNj
ZXNzIHRvIHRoZSBzcGVjaWZpZWQgaG9zdCBmcm9tIHRlc3RzLiIsIGhhbmRsZU9wdGlvbkFsbG93
ZWRIb3N0LCB0cnVlKSk7Ci0gICAgb3B0aW9uTGlzdC5hcHBlbmQoT3B0aW9uKCItLXNob3ctd2Vi
dmlldyIsICJTaG93IHRoZSBXZWJWaWV3IGR1cmluZyB0ZXN0IHJ1bnMgKGZvciBEZWJ1Z2dpbmcp
IiwgaGFuZGxlT3B0aW9uU2hvd1dlYlZpZXcpKTsKKyAgICBvcHRpb25MaXN0LmFwcGVuZChPcHRp
b24oIi0tc2hvdy13ZWJ2aWV3IiwgIlNob3cgdGhlIFdlYlZpZXcgZHVyaW5nIHRlc3QgcnVucyAo
Zm9yIGRlYnVnZ2luZykiLCBoYW5kbGVPcHRpb25TaG93V2ViVmlldykpOworICAgIG9wdGlvbkxp
c3QuYXBwZW5kKE9wdGlvbigiLS1zaG93LXRvdWNoZXMiLCAiU2hvdyB0aGUgdG91Y2hlcyBkdXJp
bmcgdGVzdCBydW5zIChmb3IgZGVidWdnaW5nKSIsIGhhbmRsZU9wdGlvblNob3dUb3VjaGVzKSk7
CiAKICAgICBvcHRpb25MaXN0LmFwcGVuZChPcHRpb24oMCwgMCwgaGFuZGxlT3B0aW9uVW5tYXRj
aGVkKSk7CiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaAkocmV2aXNpb24gMjIyNDg2
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDcgQEAgc3RydWN0IE9wdGlvbnMgewogICAgIGJvb2wgc2hvdWxkVXNlQWNjZWxl
cmF0ZWREcmF3aW5nOwogICAgIGJvb2wgc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOwogICAgIGJv
b2wgc2hvdWxkU2hvd1dlYlZpZXc7CisgICAgYm9vbCBzaG91bGRTaG93VG91Y2hlczsKICAgICBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcGF0aHM7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+IGFsbG93ZWRIb3N0czsKIH07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjksNyBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjCiAgICAgbV9wYXRocyA9IG9w
dGlvbnMucGF0aHM7CiAgICAgbV9hbGxvd2VkSG9zdHMgPSBvcHRpb25zLmFsbG93ZWRIb3N0czsK
ICAgICBtX3Nob3VsZFNob3dXZWJWaWV3ID0gb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldzsKKyAg
ICBtX3Nob3VsZFNob3dUb3VjaGVzID0gb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlczsKIAogICAg
IGlmIChvcHRpb25zLnByaW50U3VwcG9ydGVkRmVhdHVyZXMpIHsKICAgICAgICAgLy8gRklYTUU6
IE9uIFdpbmRvd3MsIER1bXBSZW5kZXJUcmVlIHVzZXMgdGhpcyB0byBleHBvc2Ugd2hldGhlciBp
dCBzdXBwb3J0cyAzZApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aAkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw4IEBAIHB1YmxpYzoKICAgICBib29s
IHVzaW5nU2VydmVyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNpbmdTZXJ2ZXJNb2RlOyB9CiAg
ICAgdm9pZCBjb25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYpOwogICAg
IAorICAgIGJvb2wgc2hvdWxkU2hvd1RvdWNoZXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFNo
b3dUb3VjaGVzOyB9CisgICAgCiAgICAgYm9vbCBiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWU7IH0KICAgICB2b2lkIHNldEJl
Zm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2wgdmFsdWUpIHsgbV9iZWZvcmVVbmxvYWRSZXR1cm5W
YWx1ZSA9IHZhbHVlOyB9CiAKQEAgLTM5MCw2ICszOTIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9zaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzIHsgZmFsc2UgfTsKICAgICBib29sIG1f
c2hvdWxkU2hvd1dlYlZpZXcgeyBmYWxzZSB9OwogICAgIAorICAgIGJvb2wgbV9zaG91bGRTaG93
VG91Y2hlcyB7IGZhbHNlIH07CisgICAgCiAgICAgYm9vbCBtX3Nob3VsZERlY2lkZU5hdmlnYXRp
b25Qb2xpY3lBZnRlckRlbGF5IHsgZmFsc2UgfTsKIAogICAgIFdLUmV0YWluUHRyPFdLQXJyYXlS
ZWY+IG1fb3BlblBhbmVsRmlsZVVSTHM7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0
aW9ucy5oCShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RP
cHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgc3RydWN0IFRlc3RPcHRp
b25zIHsKICAgICBib29sIGVuYWJsZUNyZWRlbnRpYWxNYW5hZ2VtZW50IHsgZmFsc2UgfTsKICAg
ICBib29sIGVuYWJsZUlzU2VjdXJlQ29udGV4dEF0dHJpYnV0ZSB7IHRydWUgfTsKICAgICBib29s
IGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRTaG93
VG91Y2hlcyB7IGZhbHNlIH07CiAKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciB7IDEgfTsK
ICAgICBWZWN0b3I8U3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlczsKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaAkocmV2aXNpb24gMjIyNDg2
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBleHRlcm4gTlNTdHJpbmcqIGNvbnN0IEhJREV2
ZW50UGhhc2VDYW5jCiAKIEBpbnRlcmZhY2UgSElERXZlbnRHZW5lcmF0b3IgOiBOU09iamVjdAog
CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBCT09MIHNob3VsZFNob3dUb3VjaGVzOwor
CiArIChISURFdmVudEdlbmVyYXRvciAqKXNoYXJlZEhJREV2ZW50R2VuZXJhdG9yOwogCiAvLyBU
b3VjaGVzCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRv
ci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdl
bmVyYXRvci5tbQkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvSElERXZlbnRHZW5lcmF0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDkgQEAg
c3RhdGljIGNvbnN0IElPSElERmxvYXQgZGVmYXVsdFBhdGhQcmVzcwogc3RhdGljIGNvbnN0IE5T
VUludGVnZXIgbWF4VG91Y2hDb3VudCA9IDU7CiBzdGF0aWMgY29uc3QgbG9uZyBuYW5vc2Vjb25k
c1BlclNlY29uZCA9IDFlOTsKIAorc3RhdGljIGNvbnN0IE5TVUludGVnZXIgZGVidWdUb3VjaERv
dFJhZGl1cyA9IDU7CitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciBkZWJ1Z1RvdWNoRG90RnJhbWUg
PSBkZWJ1Z1RvdWNoRG90UmFkaXVzICogMjsKKwogc3RhdGljIGludCBmaW5nZXJJZGVudGlmaWVy
c1ttYXhUb3VjaENvdW50XSA9IHsgMiwgMywgNCwgNSwgMSB9OwogCiB0eXBlZGVmIGVudW0gewpA
QCAtMTQ5LDEyICsxNTIsMTQgQEAgc3RhdGljIHZvaWQgZGVsYXlCZXR3ZWVuTW92ZShpbnQgZXZl
bnRJbgogCiBAaW50ZXJmYWNlIEhJREV2ZW50R2VuZXJhdG9yICgpCiBAcHJvcGVydHkgKG5vbmF0
b21pYywgc3Ryb25nKSBOU011dGFibGVEaWN0aW9uYXJ5ICpldmVudENhbGxiYWNrczsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TQXJyYXk8VUlWaWV3ICo+ICpkZWJ1Z1RvdWNoVmll
d3M7CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBISURFdmVudEdlbmVyYXRvciB7CiAgICAgSU9I
SURFdmVudFN5c3RlbUNsaWVudFJlZiBfaW9TeXN0ZW1DbGllbnQ7CiAgICAgU3ludGhldGljRXZl
bnREaWdpdGl6ZXJJbmZvIF9hY3RpdmVQb2ludHNbbWF4VG91Y2hDb3VudF07CiAgICAgTlNVSW50
ZWdlciBfYWN0aXZlUG9pbnRDb3VudDsKKyAgICBCT09MIF9zaG91bGRJbml0RGVidWdWaWV3czsK
IH0KIAogKyAoSElERXZlbnRHZW5lcmF0b3IgKilzaGFyZWRISURFdmVudEdlbmVyYXRvcgpAQCAt
MTg2LDYgKzE5MSwzNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdAogICAgIHJldHVybiBzZWxmOwog
fQogCistICh2b2lkKXNldFNob3VsZFNob3dUb3VjaGVzOihCT09MKXNob3VsZFNob3dUb3VjaGVz
Cit7CisgICAgX3Nob3VsZFNob3dUb3VjaGVzID0gc2hvdWxkU2hvd1RvdWNoZXM7CisgICAgaWYg
KF9zaG91bGRTaG93VG91Y2hlcyAmJiAhX3Nob3VsZEluaXREZWJ1Z1ZpZXdzKSB7CisgICAgICAg
IGlmIChbW1VJQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dIGtleVdpbmRvd10pCisgICAg
ICAgICAgICBbc2VsZiBpbml0RGVidWdWaWV3c107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IF9zaG91bGRJbml0RGVidWdWaWV3cyA9IFlFUzsKKyAgICB9Cit9CisKKy0gKHZvaWQpaW5pdERl
YnVnVmlld3MKK3sKKyAgICBpZiAoc2VsZi5zaG91bGRTaG93VG91Y2hlcyAmJiBfc2hvdWxkSW5p
dERlYnVnVmlld3MpIHsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmRlYnVnVmlld3MgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bWF4VG91Y2hDb3VudF07CisgICAgICAgIAor
ICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBtYXhUb3VjaENvdW50OyArK2kpIHsK
KyAgICAgICAgICAgIFVJVmlldyAqbmV3VmlldyA9IFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOkNHUmVjdE1ha2UoMTAsIDEwLCBkZWJ1Z1RvdWNoRG90RnJhbWUsIGRlYnVnVG91Y2hEb3RG
cmFtZSldOworICAgICAgICAgICAgbmV3Vmlldy51c2VySW50ZXJhY3Rpb25FbmFibGVkID0gTk87
CisgICAgICAgICAgICBuZXdWaWV3LmxheWVyLmNvcm5lclJhZGl1cyA9IGRlYnVnVG91Y2hEb3RS
YWRpdXM7CisgICAgICAgICAgICBuZXdWaWV3LmJhY2tncm91bmRDb2xvciA9IFtVSUNvbG9yIGNv
bG9yV2l0aFJlZDoxLjAtaSouMDUgZ3JlZW46MC4wIGJsdWU6MS4wLWkqLjA1IGFscGhhOjAuNV07
CisgICAgICAgICAgICBuZXdWaWV3LmhpZGRlbiA9IFlFUzsKKyAgICAgICAgICAgIGRlYnVnVmll
d3NbaV0gPSBuZXdWaWV3OworICAgICAgICAgICAgW1tbVUlBcHBsaWNhdGlvbiBzaGFyZWRBcHBs
aWNhdGlvbl0ga2V5V2luZG93XSBhZGRTdWJ2aWV3Om5ld1ZpZXddOworICAgICAgICB9CisgICAg
ICAgIHNlbGYuZGVidWdUb3VjaFZpZXdzID0gW05TQXJyYXkgYXJyYXlXaXRoQXJyYXk6ZGVidWdW
aWV3c107CisgICAgICAgIAorICAgICAgICBfc2hvdWxkSW5pdERlYnVnVmlld3MgPSBOTzsKKyAg
ICB9Cit9CisKIC0gKHZvaWQpX3NlbmRJT0hJREtleWJvYXJkRXZlbnQ6KHVpbnQ2NF90KXRpbWVz
dGFtcCB1c2FnZToodWludDMyX3QpdXNhZ2UgaXNLZXlEb3duOihib29sKWlzS2V5RG93bgogewog
ICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVu
dENyZWF0ZUtleWJvYXJkRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwKQEAgLTI3Myw2ICszMDks
MTQgQEAgLSAoQ0ZJbmRleCl0b3VjaEZyb21FdmVudEluZm86KE5TRGljdGlvbgogICAgIHJldHVy
biAwOwogfQogCistICh2b2lkKXVwZGF0ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6KFVJbnQpaW5k
ZXggd2l0aFBvaW50OihDR1BvaW50KXBvaW50IGlzVG91Y2hpbmc6KEJPT0wpaXNUb3VjaGluZwor
eworICAgIFtzZWxmIGluaXREZWJ1Z1ZpZXdzXTsKKyAgICAKKyAgICBzZWxmLmRlYnVnVG91Y2hW
aWV3c1tpbmRleF0uaGlkZGVuID0gIWlzVG91Y2hpbmc7CisgICAgc2VsZi5kZWJ1Z1RvdWNoVmll
d3NbaW5kZXhdLmNlbnRlciA9IHBvaW50OworfQorCiAvLyBGSVhNRTogY2FsbGVycyBvZiBfY3Jl
YXRlSU9ISURFdmVudFR5cGUgY291bGQgc3dpdGNoIHRvIHRoaXMuCiAtIChJT0hJREV2ZW50UmVm
KV9jcmVhdGVJT0hJREV2ZW50V2l0aEluZm86KE5TRGljdGlvbmFyeSAqKWluZm8KIHsKQEAgLTMw
Myw3ICszNDcsOSBAQCAtIChJT0hJREV2ZW50UmVmKV9jcmVhdGVJT0hJREV2ZW50V2l0aEluCiAK
ICAgICBOU0FycmF5ICpjaGlsZEV2ZW50cyA9IGluZm9bSElERXZlbnRUb3VjaGVzS2V5XTsKICAg
ICBmb3IgKE5TRGljdGlvbmFyeSAqdG91Y2hJbmZvIGluIGNoaWxkRXZlbnRzKSB7Ci0KKyAgICAg
ICAgaWYgKHNlbGYuc2hvdWxkU2hvd1RvdWNoZXMpCisgICAgICAgICAgICBbc2VsZiB1cGRhdGVE
ZWJ1Z0luZGljYXRvckZvclRvdWNoOlt0b3VjaEluZm9bSElERXZlbnRUb3VjaElES2V5XSBpbnRW
YWx1ZV0gd2l0aFBvaW50OkNHUG9pbnRNYWtlKFt0b3VjaEluZm9bSElERXZlbnRYS2V5XSBmbG9h
dFZhbHVlXSwgW3RvdWNoSW5mb1tISURFdmVudFlLZXldIGZsb2F0VmFsdWVdKSBpc1RvdWNoaW5n
OihCT09MKXRvdWNoXTsKKyAgICAgICAgCiAgICAgICAgIElPSElERGlnaXRpemVyRXZlbnRNYXNr
IGNoaWxkRXZlbnRNYXNrID0gMDsKIAogICAgICAgICBVSVRvdWNoUGhhc2UgcGhhc2UgPSBwaGFz
ZUZyb21TdHJpbmcodG91Y2hJbmZvW0hJREV2ZW50UGhhc2VLZXldKTsKQEAgLTM5MCw2ICs0MzYs
OSBAQCAtIChJT0hJREV2ZW50UmVmKV9jcmVhdGVJT0hJREV2ZW50VHlwZTooCiAKICAgICAgICAg
Q0dQb2ludCBwb2ludCA9IHBvaW50SW5mby0+cG9pbnQ7CiAgICAgICAgIHBvaW50ID0gQ0dQb2lu
dE1ha2Uocm91bmRmKHBvaW50LngpLCByb3VuZGYocG9pbnQueSkpOworICAgICAgICBpZiAoc2Vs
Zi5zaG91bGRTaG93VG91Y2hlcykKKyAgICAgICAgICAgIFtzZWxmIHVwZGF0ZURlYnVnSW5kaWNh
dG9yRm9yVG91Y2g6aSB3aXRoUG9pbnQ6cG9pbnQgaXNUb3VjaGluZzppc1RvdWNoaW5nXTsKKwog
ICAgICAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gc3ViRXZlbnQ7CiAgICAgICAgIGlmIChw
b2ludEluZm8tPmlzU3R5bHVzKSB7CiAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFN0eWx1
c0V2ZW50VG91Y2hlZCkgewpAQCAtNTA0LDggKzU1MywxMSBAQCAtICh2b2lkKV91cGRhdGVUb3Vj
aFBvaW50czooQ0dQb2ludCopcG9pCiAgICAgX2FjdGl2ZVBvaW50Q291bnQgPSBjb3VudDsKIAog
ICAgIC8vIFVwZGF0ZSBwb2ludCBsb2NhdGlvbnMuCi0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CiAgICAgICAgIF9hY3RpdmVQb2ludHNbaV0ucG9pbnQgPSBwb2ludHNbaV07CisgICAg
ICAgIGlmIChzZWxmLnNob3VsZFNob3dUb3VjaGVzKQorICAgICAgICAgICAgW3NlbGYgdXBkYXRl
RGVidWdJbmRpY2F0b3JGb3JUb3VjaDppIHdpdGhQb2ludDpwb2ludHNbaV0gaXNUb3VjaGluZzpZ
RVNdOworICAgIH0KICAgICAKICAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRSZWYg
PSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpoYW5kRXZlbnRUeXBlXSk7CiAg
ICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CkBAIC01MjAsNiArNTcyLDkg
QEAgLSAodm9pZCl0b3VjaERvd25BdFBvaW50czooQ0dQb2ludCopbG9jYQogICAgIGZvciAoTlNV
SW50ZWdlciBpbmRleCA9IDA7IGluZGV4IDwgdG91Y2hDb3VudDsgKytpbmRleCkgewogICAgICAg
ICBfYWN0aXZlUG9pbnRzW2luZGV4XS5wb2ludCA9IGxvY2F0aW9uc1tpbmRleF07CiAgICAgICAg
IF9hY3RpdmVQb2ludHNbaW5kZXhdLmlzU3R5bHVzID0gTk87CisgICAgICAgIAorICAgICAgICBp
ZiAoc2VsZi5zaG91bGRTaG93VG91Y2hlcykKKyAgICAgICAgICAgIFtzZWxmIHVwZGF0ZURlYnVn
SW5kaWNhdG9yRm9yVG91Y2g6aW5kZXggd2l0aFBvaW50OmxvY2F0aW9uc1tpbmRleF0gaXNUb3Vj
aGluZzpZRVNdOwogICAgIH0KIAogICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJl
ZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhhbmRFdmVudFRvdWNoZWRd
KTsKQEAgLTU1MCw4ICs2MDUsMTEgQEAgLSAodm9pZClsaWZ0VXBBdFBvaW50czooQ0dQb2ludCop
bG9jYXRpbwogCiAgICAgTlNVSW50ZWdlciBuZXdQb2ludENvdW50ID0gX2FjdGl2ZVBvaW50Q291
bnQgLSB0b3VjaENvdW50OwogCi0gICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXgg
PCB0b3VjaENvdW50OyArK2luZGV4KQorICAgIGZvciAoTlNVSW50ZWdlciBpbmRleCA9IDA7IGlu
ZGV4IDwgdG91Y2hDb3VudDsgKytpbmRleCkgewogICAgICAgICBfYWN0aXZlUG9pbnRzW25ld1Bv
aW50Q291bnQgKyBpbmRleF0ucG9pbnQgPSBsb2NhdGlvbnNbaW5kZXhdOworICAgICAgICBpZiAo
c2VsZi5zaG91bGRTaG93VG91Y2hlcykKKyAgICAgICAgICAgIHNlbGYuZGVidWdUb3VjaFZpZXdz
W2luZGV4XS5oaWRkZW4gPSBZRVM7CisgICAgfQogICAgIAogICAgIFJldGFpblB0cjxJT0hJREV2
ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3NlbGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOkhh
bmRFdmVudExpZnRlZF0pOwogICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCld
OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJ
T1MubW0JKHJldmlzaW9uIDIyMjQ4NikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rl
c3RDb250cm9sbGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsOCArMTI3LDExIEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmkKICAgICAvLyBXS0J1bmRsZVBh
Z2VTZXRVc2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKGZhbHNlKS4KIH0KIAotdm9pZCBU
ZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChU
ZXN0T3B0aW9ucyYsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK3ZvaWQgVGVzdENvbnRyb2xs
ZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMm
IG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKIHsKKyAgICAKKyAgICBvcHRpb25z
LnNob3VsZFNob3dUb3VjaGVzID0gc2hvdWxkU2hvd1RvdWNoZXMoKTsKKyAgICBbW0hJREV2ZW50
R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBzZXRTaG91bGRTaG93VG91Y2hlczpv
cHRpb25zLnNob3VsZFNob3dUb3VjaGVzXTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1Jbml0aWFsaXplQ29udGV4dCgpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9tYWluSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL21h
aW5JT1MubW0JKHJldmlzaW9uIDIyMjQ4NikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L21haW5JT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgQGludGVyZmFjZSBX
ZWJLaXRUZXN0UnVubmVyQXBwIDogVUlBcHBsaQogLSAodm9pZClfcnVuVGVzdENvbnRyb2xsZXIK
IHsKICAgICBXVFI6OlRlc3RDb250cm9sbGVyIGNvbnRyb2xsZXIoX2FyZ2MsIF9hcmd2KTsKKyAg
ICBbW0hJREV2ZW50R2VuZXJhdG9yIHNoYXJlZEhJREV2ZW50R2VuZXJhdG9yXSBzZXRTaG91bGRT
aG93VG91Y2hlczpXVFI6OlRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zaG91bGRTaG93VG91
Y2hlcygpXTsKIH0KIAogLSAodm9pZClhcHBsaWNhdGlvbkRpZEZpbmlzaExhdW5jaGluZzooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322055</attachid>
            <date>2017-09-27 18:57:34 -0700</date>
            <delta_ts>2017-09-28 13:46:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177583-20170927185734.patch</filename>
            <type>text/plain</type>
            <size>15190</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjU4NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ3IEBACisyMDE3LTA5LTI3ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIGRlYnVnIGZsYWcgdG8gV2ViS2l0VGVzdFJ1bm5lciB0byBz
aG93IHdoZXJlIHRvdWNoZXMgYXJlIGJlaW5nIGdlbmVyYXRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTgzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgZmxhZywgYW5kIHRoZSBhYmlsaXR5
IHRvIHBhaW50IGEgZG90IHdoZXJlIHRoZSBISURFdmVudEdlbmVyYXRvciBpcyBjcmVhdGluZyBm
YWtlIHRvdWNoZXMgdG8KKyAgICAgICAgc2VuZCB0aHJvdWdoIFVJS2l0LiBUaGlzIHdpbGwgaGVs
cCBpbiBkZWJ1Z2dpbmcgdG91Y2ggdGVzdHMsIGJlY2F1c2UgaXQgd2lsbCBiZSBlYXNpZXIgdG8g
c2VlIGlmCisgICAgICAgIG9uZSBpcyBhY3R1YWxseSBzZW5kaW5nIHRoZSB0b3VjaGVzIGF0IHRo
ZSBsb2NhdGlvbnMgdGhhdCB0aGV5IGV4cGVjdC4gVGhpcyB3aWxsIGhlbHAgZGlmZmVyZW50aWF0
ZSBiZXR3ZWVuCisgICAgICAgIHByb2JsZW1zIGluIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHRvdWNo
ZXMsIGFuZCBvdGhlciBwcm9ibGVtcyB0aGF0IGNhbiBjb21lIHVwIHdoZW4gd3JpdGluZyB0ZXN0
cy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHk6CisgICAgICAgIChwYXJzZV9hcmdzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLmNtZF9saW5lKToKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuY3BwOgorICAgICAgICAoV1RSOjpPcHRpb25zOjpP
cHRpb25zKToKKyAgICAgICAgKFdUUjo6aGFuZGxlT3B0aW9uU2hvd1RvdWNoZXMpOgorICAgICAg
ICAoV1RSOjpPcHRpb25zSGFuZGxlcjo6T3B0aW9uc0hhbmRsZXIpOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvT3B0aW9ucy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6c2hvdWxkU2hvd1RvdWNoZXMgY29uc3QpOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
aW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tOgorICAgICAgICAoLVtEZWJ1Z1RvdWNoVmlldyBwb2lu
dEluc2lkZTp3aXRoRXZlbnQ6XSk6CisgICAgICAgICgtW0hJREV2ZW50R2VuZXJhdG9yIHNldFNo
b3VsZFNob3dUb3VjaGVzOl0pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBpbml0RGVi
dWdWaWV3c10pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciB1cGRhdGVEZWJ1Z1VJOndp
dGhQb2ludDppc1RvdWNoaW5nOl0pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBfY3Jl
YXRlSU9ISURFdmVudFdpdGhJbmZvOl0pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBf
Y3JlYXRlSU9ISURFdmVudFR5cGU6XSk6CisgICAgICAgICgtW0hJREV2ZW50R2VuZXJhdG9yIF91
cGRhdGVUb3VjaFBvaW50czpjb3VudDpdKToKKyAgICAgICAgKC1bSElERXZlbnRHZW5lcmF0b3Ig
dG91Y2hEb3duQXRQb2ludHM6dG91Y2hDb3VudDpdKToKKyAgICAgICAgKC1bSElERXZlbnRHZW5l
cmF0b3IgbGlmdFVwQXRQb2ludHM6dG91Y2hDb3VudDpdKToKKyAgICAgICAgKC1bSElERXZlbnRH
ZW5lcmF0b3IgbW92ZVRvUG9pbnRzOnRvdWNoQ291bnQ6ZHVyYXRpb246XSk6CisgICAgICAgICgt
W0hJREV2ZW50R2VuZXJhdG9yIG1hcmtlckV2ZW50UmVjZWl2ZWQ6XSk6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNv
bnN0KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9tYWluSU9TLm1tOgorICAgICAg
ICAoLVtXZWJLaXRUZXN0UnVubmVyQXBwIF9ydW5UZXN0Q29udHJvbGxlcl0pOgorCiAyMDE3LTA5
LTI3ICBMdWNhcyBGb3JzY2hsZXIgIDxsZm9yc2NobGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgbWFjT1MgSGlnaCBTaWVycmEgYW5kIGlPUyBTaW11bGF0b3IgMTEgc3VwcG9ydCB0byBiaXNl
Y3QtYnVpbGRzLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTksNiArMjk5LDcgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncyk6CiAgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWRldmljZS10eXBlJywgaGVscD0naU9TIFNpbXVs
YXRvciBkZXZpY2UgdHlwZSBpZGVudGlmaWVyIChkZWZhdWx0OiBpMzg2IC0+IGlQaG9uZSA1LCB4
ODZfNjQgLT4gaVBob25lIDVzKScpLAogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1k
ZWRpY2F0ZWQtc2ltdWxhdG9ycycsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2Us
CiAgICAgICAgICAgICBoZWxwPSJJZiBzZXQsIGRlZGljYXRlZCBpT1Mgc2ltdWxhdG9ycyB3aWxs
IGFsd2F5cyBiZSBjcmVhdGVkLiAgSWYgbm90IHNldCwgdGhlIHNjcmlwdCB3aWxsIGF0dGVtcHQg
dG8gdXNlIGFueSBjdXJyZW50bHkgcnVubmluZyBzaW11bGF0b3IuIiksCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCctLXNob3ctdG91Y2hlcycsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRl
ZmF1bHQ9RmFsc2UsIGhlbHA9IklmIHNldCwgYSBzbWFsbCBkb3Qgd2lsbCBiZSBzaG93biB3aGVy
ZSB0aGUgZ2VuZXJhdGVkIHRvdWNoZXMgYXJlLiBIZWxwZnVsIGZvciBkZWJ1Z2dpbmcgdG91Y2gg
dGVzdHMuIiksCiAgICAgXSkpCiAKICAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5k
KCgiTWlzY2VsbGFuZW91cyBPcHRpb25zIiwgWwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNiArNDIzLDggQEAgY2xhc3Mg
RHJpdmVyKG9iamVjdCk6CiAgICAgICAgICAgICBjbWQuYXBwZW5kKCctLXRocmVhZGVkJykKICAg
ICAgICAgaWYgc2VsZi5fbm9fdGltZW91dDoKICAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tbm8t
dGltZW91dCcpCisgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbignc2hvd190b3VjaGVz
Jyk6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctLXNob3ctdG91Y2hlcycpCiAKICAgICAgICAg
Zm9yIGFsbG93ZWRfaG9zdCBpbiBzZWxmLl9wb3J0LmFsbG93ZWRfaG9zdHMoKToKICAgICAgICAg
ICAgIGNtZC5hcHBlbmQoJy0tYWxsb3dlZC1ob3N0JykKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9P
cHRpb25zLmNwcAkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9P
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBPcHRpb25zOjpPcHRp
b25zKCkKICAgICAsIHNob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyhmYWxzZSkKICAgICAsIHNo
b3VsZFVzZVJlbW90ZUxheWVyVHJlZShmYWxzZSkKICAgICAsIHNob3VsZFNob3dXZWJWaWV3KGZh
bHNlKQorICAgICwgc2hvdWxkU2hvd1RvdWNoZXMoZmFsc2UpCiB7CiB9CiAKQEAgLTEwMCw2ICsx
MDEsMTIgQEAgYm9vbCBoYW5kbGVPcHRpb25TaG93V2ViVmlldyhPcHRpb25zJiBvcAogICAgIG9w
dGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgPSB0cnVlOwogICAgIHJldHVybiB0cnVlOwogfQorICAg
IAorYm9vbCBoYW5kbGVPcHRpb25TaG93VG91Y2hlcyhPcHRpb25zJiBvcHRpb25zLCBjb25zdCBj
aGFyKiwgY29uc3QgY2hhciopCit7CisgICAgb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlcyA9IHRy
dWU7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKIGJvb2wgaGFuZGxlT3B0aW9uQWxsb3dlZEhvc3Qo
T3B0aW9ucyYgb3B0aW9ucywgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqIGhvc3QpCiB7CkBAIC0x
MjgsNyArMTM1LDggQEAgT3B0aW9uc0hhbmRsZXI6Ok9wdGlvbnNIYW5kbGVyKE9wdGlvbnMmIAog
ICAgIG9wdGlvbkxpc3QuYXBwZW5kKE9wdGlvbigiLS1hY2NlbGVyYXRlZC1kcmF3aW5nIiwgIlVz
ZSBhY2NlbGVyYXRlZCBkcmF3aW5nLiIsIGhhbmRsZU9wdGlvbkFjY2VsZXJhdGVkRHJhd2luZykp
OwogICAgIG9wdGlvbkxpc3QuYXBwZW5kKE9wdGlvbigiLS1yZW1vdGUtbGF5ZXItdHJlZSIsICJV
c2UgcmVtb3RlIGxheWVyIHRyZWUuIiwgaGFuZGxlT3B0aW9uUmVtb3RlTGF5ZXJUcmVlKSk7CiAg
ICAgb3B0aW9uTGlzdC5hcHBlbmQoT3B0aW9uKCItLWFsbG93ZWQtaG9zdCIsICJBbGxvd3MgYWNj
ZXNzIHRvIHRoZSBzcGVjaWZpZWQgaG9zdCBmcm9tIHRlc3RzLiIsIGhhbmRsZU9wdGlvbkFsbG93
ZWRIb3N0LCB0cnVlKSk7Ci0gICAgb3B0aW9uTGlzdC5hcHBlbmQoT3B0aW9uKCItLXNob3ctd2Vi
dmlldyIsICJTaG93IHRoZSBXZWJWaWV3IGR1cmluZyB0ZXN0IHJ1bnMgKGZvciBEZWJ1Z2dpbmcp
IiwgaGFuZGxlT3B0aW9uU2hvd1dlYlZpZXcpKTsKKyAgICBvcHRpb25MaXN0LmFwcGVuZChPcHRp
b24oIi0tc2hvdy13ZWJ2aWV3IiwgIlNob3cgdGhlIFdlYlZpZXcgZHVyaW5nIHRlc3QgcnVucyAo
Zm9yIGRlYnVnZ2luZykiLCBoYW5kbGVPcHRpb25TaG93V2ViVmlldykpOworICAgIG9wdGlvbkxp
c3QuYXBwZW5kKE9wdGlvbigiLS1zaG93LXRvdWNoZXMiLCAiU2hvdyB0aGUgdG91Y2hlcyBkdXJp
bmcgdGVzdCBydW5zIChmb3IgZGVidWdnaW5nKSIsIGhhbmRsZU9wdGlvblNob3dUb3VjaGVzKSk7
CiAKICAgICBvcHRpb25MaXN0LmFwcGVuZChPcHRpb24oMCwgMCwgaGFuZGxlT3B0aW9uVW5tYXRj
aGVkKSk7CiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaAkocmV2aXNpb24gMjIyNDg2
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDcgQEAgc3RydWN0IE9wdGlvbnMgewogICAgIGJvb2wgc2hvdWxkVXNlQWNjZWxl
cmF0ZWREcmF3aW5nOwogICAgIGJvb2wgc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOwogICAgIGJv
b2wgc2hvdWxkU2hvd1dlYlZpZXc7CisgICAgYm9vbCBzaG91bGRTaG93VG91Y2hlczsKICAgICBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcGF0aHM7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+IGFsbG93ZWRIb3N0czsKIH07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjksNyBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjCiAgICAgbV9wYXRocyA9IG9w
dGlvbnMucGF0aHM7CiAgICAgbV9hbGxvd2VkSG9zdHMgPSBvcHRpb25zLmFsbG93ZWRIb3N0czsK
ICAgICBtX3Nob3VsZFNob3dXZWJWaWV3ID0gb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldzsKKyAg
ICBtX3Nob3VsZFNob3dUb3VjaGVzID0gb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlczsKIAogICAg
IGlmIChvcHRpb25zLnByaW50U3VwcG9ydGVkRmVhdHVyZXMpIHsKICAgICAgICAgLy8gRklYTUU6
IE9uIFdpbmRvd3MsIER1bXBSZW5kZXJUcmVlIHVzZXMgdGhpcyB0byBleHBvc2Ugd2hldGhlciBp
dCBzdXBwb3J0cyAzZApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aAkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw4IEBAIHB1YmxpYzoKICAgICBib29s
IHVzaW5nU2VydmVyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNpbmdTZXJ2ZXJNb2RlOyB9CiAg
ICAgdm9pZCBjb25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYpOwogICAg
IAorICAgIGJvb2wgc2hvdWxkU2hvd1RvdWNoZXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFNo
b3dUb3VjaGVzOyB9CisgICAgCiAgICAgYm9vbCBiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWU7IH0KICAgICB2b2lkIHNldEJl
Zm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2wgdmFsdWUpIHsgbV9iZWZvcmVVbmxvYWRSZXR1cm5W
YWx1ZSA9IHZhbHVlOyB9CiAKQEAgLTM5MCw2ICszOTIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9zaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzIHsgZmFsc2UgfTsKICAgICBib29sIG1f
c2hvdWxkU2hvd1dlYlZpZXcgeyBmYWxzZSB9OwogICAgIAorICAgIGJvb2wgbV9zaG91bGRTaG93
VG91Y2hlcyB7IGZhbHNlIH07CisgICAgCiAgICAgYm9vbCBtX3Nob3VsZERlY2lkZU5hdmlnYXRp
b25Qb2xpY3lBZnRlckRlbGF5IHsgZmFsc2UgfTsKIAogICAgIFdLUmV0YWluUHRyPFdLQXJyYXlS
ZWY+IG1fb3BlblBhbmVsRmlsZVVSTHM7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0
aW9ucy5oCShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RP
cHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgc3RydWN0IFRlc3RPcHRp
b25zIHsKICAgICBib29sIGVuYWJsZUNyZWRlbnRpYWxNYW5hZ2VtZW50IHsgZmFsc2UgfTsKICAg
ICBib29sIGVuYWJsZUlzU2VjdXJlQ29udGV4dEF0dHJpYnV0ZSB7IHRydWUgfTsKICAgICBib29s
IGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRTaG93
VG91Y2hlcyB7IGZhbHNlIH07CiAKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciB7IDEgfTsK
ICAgICBWZWN0b3I8U3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlczsKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaAkocmV2aXNpb24gMjIyNDg2
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBleHRlcm4gTlNTdHJpbmcqIGNvbnN0IEhJREV2
ZW50UGhhc2VDYW5jCiAKIEBpbnRlcmZhY2UgSElERXZlbnRHZW5lcmF0b3IgOiBOU09iamVjdAog
CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBCT09MIHNob3VsZFNob3dUb3VjaGVzOwor
CiArIChISURFdmVudEdlbmVyYXRvciAqKXNoYXJlZEhJREV2ZW50R2VuZXJhdG9yOwogCiAvLyBU
b3VjaGVzCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRv
ci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdl
bmVyYXRvci5tbQkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvSElERXZlbnRHZW5lcmF0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDkgQEAg
c3RhdGljIGNvbnN0IElPSElERmxvYXQgZGVmYXVsdFBhdGhQcmVzcwogc3RhdGljIGNvbnN0IE5T
VUludGVnZXIgbWF4VG91Y2hDb3VudCA9IDU7CiBzdGF0aWMgY29uc3QgbG9uZyBuYW5vc2Vjb25k
c1BlclNlY29uZCA9IDFlOTsKIAorc3RhdGljIGNvbnN0IE5TVUludGVnZXIgZGVidWdUb3VjaERv
dFJhZGl1cyA9IDU7CitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciBkZWJ1Z1RvdWNoRG90RnJhbWUg
PSBkZWJ1Z1RvdWNoRG90UmFkaXVzICogMjsKKwogc3RhdGljIGludCBmaW5nZXJJZGVudGlmaWVy
c1ttYXhUb3VjaENvdW50XSA9IHsgMiwgMywgNCwgNSwgMSB9OwogCiB0eXBlZGVmIGVudW0gewpA
QCAtMTQ5LDYgKzE1Miw3IEBAIHN0YXRpYyB2b2lkIGRlbGF5QmV0d2Vlbk1vdmUoaW50IGV2ZW50
SW4KIAogQGludGVyZmFjZSBISURFdmVudEdlbmVyYXRvciAoKQogQHByb3BlcnR5IChub25hdG9t
aWMsIHN0cm9uZykgTlNNdXRhYmxlRGljdGlvbmFyeSAqZXZlbnRDYWxsYmFja3M7CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU0FycmF5PFVJVmlldyAqPiAqZGVidWdUb3VjaFZpZXdz
OwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gSElERXZlbnRHZW5lcmF0b3IgewpAQCAtMTg2LDYg
KzE5MCwyNSBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdAogICAgIHJldHVybiBzZWxmOwogfQogCist
ICh2b2lkKWluaXREZWJ1Z1ZpZXdzSWZOZWVkZWQKK3sKKyAgICBpZiAoIXNlbGYuc2hvdWxkU2hv
d1RvdWNoZXMgfHwgc2VsZi5kZWJ1Z1RvdWNoVmlld3MpCisgICAgICAgIHJldHVybjsKKworICAg
IE5TTXV0YWJsZUFycmF5ICpkZWJ1Z1ZpZXdzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5Om1heFRvdWNoQ291bnRdOworICAgIAorICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IG1heFRvdWNoQ291bnQ7ICsraSkgeworICAgICAgICBVSVZpZXcgKm5ld1ZpZXcgPSBbW1VJ
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDEwLCAxMCwgZGVidWdUb3VjaERv
dEZyYW1lLCBkZWJ1Z1RvdWNoRG90RnJhbWUpXTsKKyAgICAgICAgbmV3Vmlldy51c2VySW50ZXJh
Y3Rpb25FbmFibGVkID0gTk87CisgICAgICAgIG5ld1ZpZXcubGF5ZXIuY29ybmVyUmFkaXVzID0g
ZGVidWdUb3VjaERvdFJhZGl1czsKKyAgICAgICAgbmV3Vmlldy5iYWNrZ3JvdW5kQ29sb3IgPSBb
VUlDb2xvciBjb2xvcldpdGhSZWQ6MS4wLWkqLjA1IGdyZWVuOjAuMCBibHVlOjEuMC1pKi4wNSBh
bHBoYTowLjVdOworICAgICAgICBuZXdWaWV3LmhpZGRlbiA9IFlFUzsKKyAgICAgICAgZGVidWdW
aWV3c1tpXSA9IG5ld1ZpZXc7CisgICAgICAgIFtbW1VJQXBwbGljYXRpb24gc2hhcmVkQXBwbGlj
YXRpb25dIGtleVdpbmRvd10gYWRkU3VidmlldzpuZXdWaWV3XTsKKyAgICB9CisgICAgc2VsZi5k
ZWJ1Z1RvdWNoVmlld3MgPSBbTlNBcnJheSBhcnJheVdpdGhBcnJheTpkZWJ1Z1ZpZXdzXTsKK30K
KwogLSAodm9pZClfc2VuZElPSElES2V5Ym9hcmRFdmVudDoodWludDY0X3QpdGltZXN0YW1wIHVz
YWdlOih1aW50MzJfdCl1c2FnZSBpc0tleURvd246KGJvb2wpaXNLZXlEb3duCiB7CiAgICAgUmV0
YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihJT0hJREV2ZW50Q3JlYXRl
S2V5Ym9hcmRFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LApAQCAtMjczLDYgKzI5NiwxNCBAQCAt
IChDRkluZGV4KXRvdWNoRnJvbUV2ZW50SW5mbzooTlNEaWN0aW9uCiAgICAgcmV0dXJuIDA7CiB9
CiAKKy0gKHZvaWQpdXBkYXRlRGVidWdJbmRpY2F0b3JGb3JUb3VjaDooVUludClpbmRleCB3aXRo
UG9pbnQ6KENHUG9pbnQpcG9pbnQgaXNUb3VjaGluZzooQk9PTClpc1RvdWNoaW5nCit7CisgICAg
W3NlbGYgaW5pdERlYnVnVmlld3NJZk5lZWRlZF07CisgICAgCisgICAgc2VsZi5kZWJ1Z1RvdWNo
Vmlld3NbaW5kZXhdLmhpZGRlbiA9ICFpc1RvdWNoaW5nOworICAgIHNlbGYuZGVidWdUb3VjaFZp
ZXdzW2luZGV4XS5jZW50ZXIgPSBwb2ludDsKK30KKwogLy8gRklYTUU6IGNhbGxlcnMgb2YgX2Ny
ZWF0ZUlPSElERXZlbnRUeXBlIGNvdWxkIHN3aXRjaCB0byB0aGlzLgogLSAoSU9ISURFdmVudFJl
ZilfY3JlYXRlSU9ISURFdmVudFdpdGhJbmZvOihOU0RpY3Rpb25hcnkgKilpbmZvCiB7CkBAIC0z
MDMsNyArMzM0LDkgQEAgLSAoSU9ISURFdmVudFJlZilfY3JlYXRlSU9ISURFdmVudFdpdGhJbgog
CiAgICAgTlNBcnJheSAqY2hpbGRFdmVudHMgPSBpbmZvW0hJREV2ZW50VG91Y2hlc0tleV07CiAg
ICAgZm9yIChOU0RpY3Rpb25hcnkgKnRvdWNoSW5mbyBpbiBjaGlsZEV2ZW50cykgewotCisgICAg
ICAgIGlmIChzZWxmLnNob3VsZFNob3dUb3VjaGVzKQorICAgICAgICAgICAgW3NlbGYgdXBkYXRl
RGVidWdJbmRpY2F0b3JGb3JUb3VjaDpbdG91Y2hJbmZvW0hJREV2ZW50VG91Y2hJREtleV0gaW50
VmFsdWVdIHdpdGhQb2ludDpDR1BvaW50TWFrZShbdG91Y2hJbmZvW0hJREV2ZW50WEtleV0gZmxv
YXRWYWx1ZV0sIFt0b3VjaEluZm9bSElERXZlbnRZS2V5XSBmbG9hdFZhbHVlXSkgaXNUb3VjaGlu
ZzooQk9PTCl0b3VjaF07CisgICAgICAgIAogICAgICAgICBJT0hJRERpZ2l0aXplckV2ZW50TWFz
ayBjaGlsZEV2ZW50TWFzayA9IDA7CiAKICAgICAgICAgVUlUb3VjaFBoYXNlIHBoYXNlID0gcGhh
c2VGcm9tU3RyaW5nKHRvdWNoSW5mb1tISURFdmVudFBoYXNlS2V5XSk7CkBAIC0zOTAsNiArNDIz
LDkgQEAgLSAoSU9ISURFdmVudFJlZilfY3JlYXRlSU9ISURFdmVudFR5cGU6KAogCiAgICAgICAg
IENHUG9pbnQgcG9pbnQgPSBwb2ludEluZm8tPnBvaW50OwogICAgICAgICBwb2ludCA9IENHUG9p
bnRNYWtlKHJvdW5kZihwb2ludC54KSwgcm91bmRmKHBvaW50LnkpKTsKKyAgICAgICAgaWYgKHNl
bGYuc2hvdWxkU2hvd1RvdWNoZXMpCisgICAgICAgICAgICBbc2VsZiB1cGRhdGVEZWJ1Z0luZGlj
YXRvckZvclRvdWNoOmkgd2l0aFBvaW50OnBvaW50IGlzVG91Y2hpbmc6aXNUb3VjaGluZ107CisK
ICAgICAgICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IHN1YkV2ZW50OwogICAgICAgICBpZiAo
cG9pbnRJbmZvLT5pc1N0eWx1cykgewogICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBTdHls
dXNFdmVudFRvdWNoZWQpIHsKQEAgLTUwNCw4ICs1NDAsMTEgQEAgLSAodm9pZClfdXBkYXRlVG91
Y2hQb2ludHM6KENHUG9pbnQqKXBvaQogICAgIF9hY3RpdmVQb2ludENvdW50ID0gY291bnQ7CiAK
ICAgICAvLyBVcGRhdGUgcG9pbnQgbG9jYXRpb25zLgotICAgIGZvciAoTlNVSW50ZWdlciBpID0g
MDsgaSA8IGNvdW50OyArK2kpCisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgewogICAgICAgICBfYWN0aXZlUG9pbnRzW2ldLnBvaW50ID0gcG9pbnRzW2ldOworICAg
ICAgICBpZiAoc2VsZi5zaG91bGRTaG93VG91Y2hlcykKKyAgICAgICAgICAgIFtzZWxmIHVwZGF0
ZURlYnVnSW5kaWNhdG9yRm9yVG91Y2g6aSB3aXRoUG9pbnQ6cG9pbnRzW2ldIGlzVG91Y2hpbmc6
WUVTXTsKKyAgICB9CiAgICAgCiAgICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVm
ID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6aGFuZEV2ZW50VHlwZV0pOwog
ICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOwpAQCAtNTIwLDYgKzU1OSw5
IEBAIC0gKHZvaWQpdG91Y2hEb3duQXRQb2ludHM6KENHUG9pbnQqKWxvY2EKICAgICBmb3IgKE5T
VUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IHRvdWNoQ291bnQ7ICsraW5kZXgpIHsKICAgICAg
ICAgX2FjdGl2ZVBvaW50c1tpbmRleF0ucG9pbnQgPSBsb2NhdGlvbnNbaW5kZXhdOwogICAgICAg
ICBfYWN0aXZlUG9pbnRzW2luZGV4XS5pc1N0eWx1cyA9IE5POworICAgICAgICAKKyAgICAgICAg
aWYgKHNlbGYuc2hvdWxkU2hvd1RvdWNoZXMpCisgICAgICAgICAgICBbc2VsZiB1cGRhdGVEZWJ1
Z0luZGljYXRvckZvclRvdWNoOmluZGV4IHdpdGhQb2ludDpsb2NhdGlvbnNbaW5kZXhdIGlzVG91
Y2hpbmc6WUVTXTsKICAgICB9CiAKICAgICBSZXRhaW5QdHI8SU9ISURFdmVudFJlZj4gZXZlbnRS
ZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpIYW5kRXZlbnRUb3VjaGVk
XSk7CkBAIC01NTAsOCArNTkyLDExIEBAIC0gKHZvaWQpbGlmdFVwQXRQb2ludHM6KENHUG9pbnQq
KWxvY2F0aW8KIAogICAgIE5TVUludGVnZXIgbmV3UG9pbnRDb3VudCA9IF9hY3RpdmVQb2ludENv
dW50IC0gdG91Y2hDb3VudDsKIAotICAgIGZvciAoTlNVSW50ZWdlciBpbmRleCA9IDA7IGluZGV4
IDwgdG91Y2hDb3VudDsgKytpbmRleCkKKyAgICBmb3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBp
bmRleCA8IHRvdWNoQ291bnQ7ICsraW5kZXgpIHsKICAgICAgICAgX2FjdGl2ZVBvaW50c1tuZXdQ
b2ludENvdW50ICsgaW5kZXhdLnBvaW50ID0gbG9jYXRpb25zW2luZGV4XTsKKyAgICAgICAgaWYg
KHNlbGYuc2hvdWxkU2hvd1RvdWNoZXMpCisgICAgICAgICAgICBzZWxmLmRlYnVnVG91Y2hWaWV3
c1tpbmRleF0uaGlkZGVuID0gWUVTOworICAgIH0KICAgICAKICAgICBSZXRhaW5QdHI8SU9ISURF
dmVudFJlZj4gZXZlbnRSZWYgPSBhZG9wdENGKFtzZWxmIF9jcmVhdGVJT0hJREV2ZW50VHlwZTpI
YW5kRXZlbnRMaWZ0ZWRdKTsKICAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgp
XTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVy
SU9TLm1tCShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9U
ZXN0Q29udHJvbGxlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI3LDggKzEyNywxMSBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpCiAgICAgLy8gV0tCdW5kbGVQ
YWdlU2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmlndXJhdGlvbihmYWxzZSkuCiB9CiAKLXZvaWQg
VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3Qo
VGVzdE9wdGlvbnMmLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0Cit2b2lkIFRlc3RDb250cm9s
bGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25z
JiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0CiB7CisgICAgCisgICAgb3B0aW9u
cy5zaG91bGRTaG93VG91Y2hlcyA9IHNob3VsZFNob3dUb3VjaGVzKCk7CisgICAgW1tISURFdmVu
dEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0gc2V0U2hvdWxkU2hvd1RvdWNoZXM6
b3B0aW9ucy5zaG91bGRTaG93VG91Y2hlc107CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvbWFpbklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9t
YWluSU9TLm1tCShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9tYWluSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIEBpbnRlcmZhY2Ug
V2ViS2l0VGVzdFJ1bm5lckFwcCA6IFVJQXBwbGkKIC0gKHZvaWQpX3J1blRlc3RDb250cm9sbGVy
CiB7CiAgICAgV1RSOjpUZXN0Q29udHJvbGxlciBjb250cm9sbGVyKF9hcmdjLCBfYXJndik7Cisg
ICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRISURFdmVudEdlbmVyYXRvcl0gc2V0U2hvdWxk
U2hvd1RvdWNoZXM6V1RSOjpUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2hvdWxkU2hvd1Rv
dWNoZXMoKV07CiB9CiAKIC0gKHZvaWQpYXBwbGljYXRpb25EaWRGaW5pc2hMYXVuY2hpbmc6KE5T
Tm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCg==
</data>
<flag name="review"
          id="342040"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322101</attachid>
            <date>2017-09-28 11:08:52 -0700</date>
            <delta_ts>2017-09-28 13:47:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177583-20170928110852.patch</filename>
            <type>text/plain</type>
            <size>15347</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjU4NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ3IEBACisyMDE3LTA5LTI3ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIGRlYnVnIGZsYWcgdG8gV2ViS2l0VGVzdFJ1bm5lciB0byBz
aG93IHdoZXJlIHRvdWNoZXMgYXJlIGJlaW5nIGdlbmVyYXRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NTgzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgZmxhZywgYW5kIHRoZSBhYmlsaXR5
IHRvIHBhaW50IGEgZG90IHdoZXJlIHRoZSBISURFdmVudEdlbmVyYXRvciBpcyBjcmVhdGluZyBm
YWtlIHRvdWNoZXMgdG8KKyAgICAgICAgc2VuZCB0aHJvdWdoIFVJS2l0LiBUaGlzIHdpbGwgaGVs
cCBpbiBkZWJ1Z2dpbmcgdG91Y2ggdGVzdHMsIGJlY2F1c2UgaXQgd2lsbCBiZSBlYXNpZXIgdG8g
c2VlIGlmCisgICAgICAgIG9uZSBpcyBhY3R1YWxseSBzZW5kaW5nIHRoZSB0b3VjaGVzIGF0IHRo
ZSBsb2NhdGlvbnMgdGhhdCB0aGV5IGV4cGVjdC4gVGhpcyB3aWxsIGhlbHAgZGlmZmVyZW50aWF0
ZSBiZXR3ZWVuCisgICAgICAgIHByb2JsZW1zIGluIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHRvdWNo
ZXMsIGFuZCBvdGhlciBwcm9ibGVtcyB0aGF0IGNhbiBjb21lIHVwIHdoZW4gd3JpdGluZyB0ZXN0
cy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHk6CisgICAgICAgIChwYXJzZV9hcmdzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLmNtZF9saW5lKToKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuY3BwOgorICAgICAgICAoV1RSOjpPcHRpb25zOjpP
cHRpb25zKToKKyAgICAgICAgKFdUUjo6aGFuZGxlT3B0aW9uU2hvd1RvdWNoZXMpOgorICAgICAg
ICAoV1RSOjpPcHRpb25zSGFuZGxlcjo6T3B0aW9uc0hhbmRsZXIpOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvT3B0aW9ucy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6c2hvdWxkU2hvd1RvdWNoZXMgY29uc3QpOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
aW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tOgorICAgICAgICAoLVtEZWJ1Z1RvdWNoVmlldyBwb2lu
dEluc2lkZTp3aXRoRXZlbnQ6XSk6CisgICAgICAgICgtW0hJREV2ZW50R2VuZXJhdG9yIHNldFNo
b3VsZFNob3dUb3VjaGVzOl0pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBpbml0RGVi
dWdWaWV3c10pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciB1cGRhdGVEZWJ1Z1VJOndp
dGhQb2ludDppc1RvdWNoaW5nOl0pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBfY3Jl
YXRlSU9ISURFdmVudFdpdGhJbmZvOl0pOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBf
Y3JlYXRlSU9ISURFdmVudFR5cGU6XSk6CisgICAgICAgICgtW0hJREV2ZW50R2VuZXJhdG9yIF91
cGRhdGVUb3VjaFBvaW50czpjb3VudDpdKToKKyAgICAgICAgKC1bSElERXZlbnRHZW5lcmF0b3Ig
dG91Y2hEb3duQXRQb2ludHM6dG91Y2hDb3VudDpdKToKKyAgICAgICAgKC1bSElERXZlbnRHZW5l
cmF0b3IgbGlmdFVwQXRQb2ludHM6dG91Y2hDb3VudDpdKToKKyAgICAgICAgKC1bSElERXZlbnRH
ZW5lcmF0b3IgbW92ZVRvUG9pbnRzOnRvdWNoQ291bnQ6ZHVyYXRpb246XSk6CisgICAgICAgICgt
W0hJREV2ZW50R2VuZXJhdG9yIG1hcmtlckV2ZW50UmVjZWl2ZWQ6XSk6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNv
bnN0KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9tYWluSU9TLm1tOgorICAgICAg
ICAoLVtXZWJLaXRUZXN0UnVubmVyQXBwIF9ydW5UZXN0Q29udHJvbGxlcl0pOgorCiAyMDE3LTA5
LTI3ICBMdWNhcyBGb3JzY2hsZXIgIDxsZm9yc2NobGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgbWFjT1MgSGlnaCBTaWVycmEgYW5kIGlPUyBTaW11bGF0b3IgMTEgc3VwcG9ydCB0byBiaXNl
Y3QtYnVpbGRzLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTksNiArMjk5LDcgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncyk6CiAgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWRldmljZS10eXBlJywgaGVscD0naU9TIFNpbXVs
YXRvciBkZXZpY2UgdHlwZSBpZGVudGlmaWVyIChkZWZhdWx0OiBpMzg2IC0+IGlQaG9uZSA1LCB4
ODZfNjQgLT4gaVBob25lIDVzKScpLAogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1k
ZWRpY2F0ZWQtc2ltdWxhdG9ycycsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2Us
CiAgICAgICAgICAgICBoZWxwPSJJZiBzZXQsIGRlZGljYXRlZCBpT1Mgc2ltdWxhdG9ycyB3aWxs
IGFsd2F5cyBiZSBjcmVhdGVkLiAgSWYgbm90IHNldCwgdGhlIHNjcmlwdCB3aWxsIGF0dGVtcHQg
dG8gdXNlIGFueSBjdXJyZW50bHkgcnVubmluZyBzaW11bGF0b3IuIiksCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCctLXNob3ctdG91Y2hlcycsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRl
ZmF1bHQ9RmFsc2UsIGhlbHA9IklmIHNldCwgYSBzbWFsbCBkb3Qgd2lsbCBiZSBzaG93biB3aGVy
ZSB0aGUgZ2VuZXJhdGVkIHRvdWNoZXMgYXJlLiBIZWxwZnVsIGZvciBkZWJ1Z2dpbmcgdG91Y2gg
dGVzdHMuIiksCiAgICAgXSkpCiAKICAgICBvcHRpb25fZ3JvdXBfZGVmaW5pdGlvbnMuYXBwZW5k
KCgiTWlzY2VsbGFuZW91cyBPcHRpb25zIiwgWwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNiArNDIzLDggQEAgY2xhc3Mg
RHJpdmVyKG9iamVjdCk6CiAgICAgICAgICAgICBjbWQuYXBwZW5kKCctLXRocmVhZGVkJykKICAg
ICAgICAgaWYgc2VsZi5fbm9fdGltZW91dDoKICAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tbm8t
dGltZW91dCcpCisgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbignc2hvd190b3VjaGVz
Jyk6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctLXNob3ctdG91Y2hlcycpCiAKICAgICAgICAg
Zm9yIGFsbG93ZWRfaG9zdCBpbiBzZWxmLl9wb3J0LmFsbG93ZWRfaG9zdHMoKToKICAgICAgICAg
ICAgIGNtZC5hcHBlbmQoJy0tYWxsb3dlZC1ob3N0JykKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9P
cHRpb25zLmNwcAkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9P
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBPcHRpb25zOjpPcHRp
b25zKCkKICAgICAsIHNob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyhmYWxzZSkKICAgICAsIHNo
b3VsZFVzZVJlbW90ZUxheWVyVHJlZShmYWxzZSkKICAgICAsIHNob3VsZFNob3dXZWJWaWV3KGZh
bHNlKQorICAgICwgc2hvdWxkU2hvd1RvdWNoZXMoZmFsc2UpCiB7CiB9CiAKQEAgLTEwMCw2ICsx
MDEsMTIgQEAgYm9vbCBoYW5kbGVPcHRpb25TaG93V2ViVmlldyhPcHRpb25zJiBvcAogICAgIG9w
dGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgPSB0cnVlOwogICAgIHJldHVybiB0cnVlOwogfQorICAg
IAorYm9vbCBoYW5kbGVPcHRpb25TaG93VG91Y2hlcyhPcHRpb25zJiBvcHRpb25zLCBjb25zdCBj
aGFyKiwgY29uc3QgY2hhciopCit7CisgICAgb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlcyA9IHRy
dWU7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKIGJvb2wgaGFuZGxlT3B0aW9uQWxsb3dlZEhvc3Qo
T3B0aW9ucyYgb3B0aW9ucywgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqIGhvc3QpCiB7CkBAIC0x
MjgsNyArMTM1LDggQEAgT3B0aW9uc0hhbmRsZXI6Ok9wdGlvbnNIYW5kbGVyKE9wdGlvbnMmIAog
ICAgIG9wdGlvbkxpc3QuYXBwZW5kKE9wdGlvbigiLS1hY2NlbGVyYXRlZC1kcmF3aW5nIiwgIlVz
ZSBhY2NlbGVyYXRlZCBkcmF3aW5nLiIsIGhhbmRsZU9wdGlvbkFjY2VsZXJhdGVkRHJhd2luZykp
OwogICAgIG9wdGlvbkxpc3QuYXBwZW5kKE9wdGlvbigiLS1yZW1vdGUtbGF5ZXItdHJlZSIsICJV
c2UgcmVtb3RlIGxheWVyIHRyZWUuIiwgaGFuZGxlT3B0aW9uUmVtb3RlTGF5ZXJUcmVlKSk7CiAg
ICAgb3B0aW9uTGlzdC5hcHBlbmQoT3B0aW9uKCItLWFsbG93ZWQtaG9zdCIsICJBbGxvd3MgYWNj
ZXNzIHRvIHRoZSBzcGVjaWZpZWQgaG9zdCBmcm9tIHRlc3RzLiIsIGhhbmRsZU9wdGlvbkFsbG93
ZWRIb3N0LCB0cnVlKSk7Ci0gICAgb3B0aW9uTGlzdC5hcHBlbmQoT3B0aW9uKCItLXNob3ctd2Vi
dmlldyIsICJTaG93IHRoZSBXZWJWaWV3IGR1cmluZyB0ZXN0IHJ1bnMgKGZvciBEZWJ1Z2dpbmcp
IiwgaGFuZGxlT3B0aW9uU2hvd1dlYlZpZXcpKTsKKyAgICBvcHRpb25MaXN0LmFwcGVuZChPcHRp
b24oIi0tc2hvdy13ZWJ2aWV3IiwgIlNob3cgdGhlIFdlYlZpZXcgZHVyaW5nIHRlc3QgcnVucyAo
Zm9yIGRlYnVnZ2luZykiLCBoYW5kbGVPcHRpb25TaG93V2ViVmlldykpOworICAgIG9wdGlvbkxp
c3QuYXBwZW5kKE9wdGlvbigiLS1zaG93LXRvdWNoZXMiLCAiU2hvdyB0aGUgdG91Y2hlcyBkdXJp
bmcgdGVzdCBydW5zIChmb3IgZGVidWdnaW5nKSIsIGhhbmRsZU9wdGlvblNob3dUb3VjaGVzKSk7
CiAKICAgICBvcHRpb25MaXN0LmFwcGVuZChPcHRpb24oMCwgMCwgaGFuZGxlT3B0aW9uVW5tYXRj
aGVkKSk7CiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaAkocmV2aXNpb24gMjIyNDg2
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDcgQEAgc3RydWN0IE9wdGlvbnMgewogICAgIGJvb2wgc2hvdWxkVXNlQWNjZWxl
cmF0ZWREcmF3aW5nOwogICAgIGJvb2wgc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOwogICAgIGJv
b2wgc2hvdWxkU2hvd1dlYlZpZXc7CisgICAgYm9vbCBzaG91bGRTaG93VG91Y2hlczsKICAgICBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcGF0aHM7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+IGFsbG93ZWRIb3N0czsKIH07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjksNyBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjCiAgICAgbV9wYXRocyA9IG9w
dGlvbnMucGF0aHM7CiAgICAgbV9hbGxvd2VkSG9zdHMgPSBvcHRpb25zLmFsbG93ZWRIb3N0czsK
ICAgICBtX3Nob3VsZFNob3dXZWJWaWV3ID0gb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldzsKKyAg
ICBtX3Nob3VsZFNob3dUb3VjaGVzID0gb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlczsKIAogICAg
IGlmIChvcHRpb25zLnByaW50U3VwcG9ydGVkRmVhdHVyZXMpIHsKICAgICAgICAgLy8gRklYTUU6
IE9uIFdpbmRvd3MsIER1bXBSZW5kZXJUcmVlIHVzZXMgdGhpcyB0byBleHBvc2Ugd2hldGhlciBp
dCBzdXBwb3J0cyAzZApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aAkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw4IEBAIHB1YmxpYzoKICAgICBib29s
IHVzaW5nU2VydmVyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNpbmdTZXJ2ZXJNb2RlOyB9CiAg
ICAgdm9pZCBjb25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYpOwogICAg
IAorICAgIGJvb2wgc2hvdWxkU2hvd1RvdWNoZXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFNo
b3dUb3VjaGVzOyB9CisgICAgCiAgICAgYm9vbCBiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWU7IH0KICAgICB2b2lkIHNldEJl
Zm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2wgdmFsdWUpIHsgbV9iZWZvcmVVbmxvYWRSZXR1cm5W
YWx1ZSA9IHZhbHVlOyB9CiAKQEAgLTM5MCw2ICszOTIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9zaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzIHsgZmFsc2UgfTsKICAgICBib29sIG1f
c2hvdWxkU2hvd1dlYlZpZXcgeyBmYWxzZSB9OwogICAgIAorICAgIGJvb2wgbV9zaG91bGRTaG93
VG91Y2hlcyB7IGZhbHNlIH07CisgICAgCiAgICAgYm9vbCBtX3Nob3VsZERlY2lkZU5hdmlnYXRp
b25Qb2xpY3lBZnRlckRlbGF5IHsgZmFsc2UgfTsKIAogICAgIFdLUmV0YWluUHRyPFdLQXJyYXlS
ZWY+IG1fb3BlblBhbmVsRmlsZVVSTHM7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0
aW9ucy5oCShyZXZpc2lvbiAyMjI0ODYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RP
cHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgc3RydWN0IFRlc3RPcHRp
b25zIHsKICAgICBib29sIGVuYWJsZUNyZWRlbnRpYWxNYW5hZ2VtZW50IHsgZmFsc2UgfTsKICAg
ICBib29sIGVuYWJsZUlzU2VjdXJlQ29udGV4dEF0dHJpYnV0ZSB7IHRydWUgfTsKICAgICBib29s
IGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91bGRTaG93
VG91Y2hlcyB7IGZhbHNlIH07CiAKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciB7IDEgfTsK
ICAgICBWZWN0b3I8U3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlczsKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaAkocmV2aXNpb24gMjIyNDg2
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBleHRlcm4gTlNTdHJpbmcqIGNvbnN0IEhJREV2
ZW50UGhhc2VDYW5jCiAKIEBpbnRlcmZhY2UgSElERXZlbnRHZW5lcmF0b3IgOiBOU09iamVjdAog
CitAcHJvcGVydHkgKG5vbmF0b21pYywgYXNzaWduKSBCT09MIHNob3VsZFNob3dUb3VjaGVzOwor
CiArIChISURFdmVudEdlbmVyYXRvciAqKXNoYXJlZEhJREV2ZW50R2VuZXJhdG9yOwogCiAvLyBU
b3VjaGVzCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRv
ci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdl
bmVyYXRvci5tbQkocmV2aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvSElERXZlbnRHZW5lcmF0b3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDkgQEAg
c3RhdGljIGNvbnN0IElPSElERmxvYXQgZGVmYXVsdFBhdGhQcmVzcwogc3RhdGljIGNvbnN0IE5T
VUludGVnZXIgbWF4VG91Y2hDb3VudCA9IDU7CiBzdGF0aWMgY29uc3QgbG9uZyBuYW5vc2Vjb25k
c1BlclNlY29uZCA9IDFlOTsKIAorc3RhdGljIGNvbnN0IE5TVUludGVnZXIgZGVidWdUb3VjaERv
dFJhZGl1cyA9IDU7CitzdGF0aWMgY29uc3QgTlNVSW50ZWdlciBkZWJ1Z1RvdWNoRG90U2l6ZSA9
IGRlYnVnVG91Y2hEb3RSYWRpdXMgKiAyOworCiBzdGF0aWMgaW50IGZpbmdlcklkZW50aWZpZXJz
W21heFRvdWNoQ291bnRdID0geyAyLCAzLCA0LCA1LCAxIH07CiAKIHR5cGVkZWYgZW51bSB7CkBA
IC0xNDksNiArMTUyLDcgQEAgc3RhdGljIHZvaWQgZGVsYXlCZXR3ZWVuTW92ZShpbnQgZXZlbnRJ
bgogCiBAaW50ZXJmYWNlIEhJREV2ZW50R2VuZXJhdG9yICgpCiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc3Ryb25nKSBOU011dGFibGVEaWN0aW9uYXJ5ICpldmVudENhbGxiYWNrczsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TQXJyYXk8VUlWaWV3ICo+ICpkZWJ1Z1RvdWNoVmlld3M7
CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBISURFdmVudEdlbmVyYXRvciB7CkBAIC0xODYsNiAr
MTkwLDMyIEBAIC0gKGluc3RhbmNldHlwZSlpbml0CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKKy0g
KHZvaWQpZGVhbGxvYworeworICAgIFtfZXZlbnRDYWxsYmFja3MgcmVsZWFzZV07CisgICAgW19k
ZWJ1Z1RvdWNoVmlld3MgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2
b2lkKWluaXREZWJ1Z1ZpZXdzSWZOZWVkZWQKK3sKKyAgICBpZiAoIXNlbGYuc2hvdWxkU2hvd1Rv
dWNoZXMgfHwgc2VsZi5kZWJ1Z1RvdWNoVmlld3MpCisgICAgICAgIHJldHVybjsKKworICAgIE5T
TXV0YWJsZUFycmF5ICpkZWJ1Z1ZpZXdzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFj
aXR5Om1heFRvdWNoQ291bnRdOworICAgIAorICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8
IG1heFRvdWNoQ291bnQ7ICsraSkgeworICAgICAgICBhdXRvIG5ld1ZpZXcgPSBhZG9wdE5TKFtb
VUlWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMTAsIDEwLCBkZWJ1Z1RvdWNo
RG90U2l6ZSwgZGVidWdUb3VjaERvdFNpemUpXSk7CisgICAgICAgIG5ld1ZpZXcuZ2V0KCkudXNl
ckludGVyYWN0aW9uRW5hYmxlZCA9IE5POworICAgICAgICBuZXdWaWV3LmdldCgpLmxheWVyLmNv
cm5lclJhZGl1cyA9IGRlYnVnVG91Y2hEb3RSYWRpdXM7CisgICAgICAgIG5ld1ZpZXcuZ2V0KCku
YmFja2dyb3VuZENvbG9yID0gW1VJQ29sb3IgY29sb3JXaXRoUmVkOjEuMC1pKi4wNSBncmVlbjow
LjAgYmx1ZToxLjAtaSouMDUgYWxwaGE6MC41XTsKKyAgICAgICAgbmV3Vmlldy5nZXQoKS5oaWRk
ZW4gPSBZRVM7CisgICAgICAgIGRlYnVnVmlld3NbaV0gPSBuZXdWaWV3LmdldCgpOworICAgICAg
ICBbW1tVSUFwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9uXSBrZXlXaW5kb3ddIGFkZFN1YnZp
ZXc6ZGVidWdWaWV3c1tpXV07CisgICAgfQorICAgIHNlbGYuZGVidWdUb3VjaFZpZXdzID0gW05T
QXJyYXkgYXJyYXlXaXRoQXJyYXk6ZGVidWdWaWV3c107Cit9CisKIC0gKHZvaWQpX3NlbmRJT0hJ
REtleWJvYXJkRXZlbnQ6KHVpbnQ2NF90KXRpbWVzdGFtcCB1c2FnZToodWludDMyX3QpdXNhZ2Ug
aXNLZXlEb3duOihib29sKWlzS2V5RG93bgogewogICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVm
PiBldmVudFJlZiA9IGFkb3B0Q0YoSU9ISURFdmVudENyZWF0ZUtleWJvYXJkRXZlbnQoa0NGQWxs
b2NhdG9yRGVmYXVsdCwKQEAgLTI3Myw2ICszMDMsMTQgQEAgLSAoQ0ZJbmRleCl0b3VjaEZyb21F
dmVudEluZm86KE5TRGljdGlvbgogICAgIHJldHVybiAwOwogfQogCistICh2b2lkKXVwZGF0ZURl
YnVnSW5kaWNhdG9yRm9yVG91Y2g6KE5TVUludGVnZXIpaW5kZXggd2l0aFBvaW50OihDR1BvaW50
KXBvaW50IGlzVG91Y2hpbmc6KEJPT0wpaXNUb3VjaGluZworeworICAgIFtzZWxmIGluaXREZWJ1
Z1ZpZXdzSWZOZWVkZWRdOworICAgIAorICAgIHNlbGYuZGVidWdUb3VjaFZpZXdzW2luZGV4XS5o
aWRkZW4gPSAhaXNUb3VjaGluZzsKKyAgICBzZWxmLmRlYnVnVG91Y2hWaWV3c1tpbmRleF0uY2Vu
dGVyID0gcG9pbnQ7Cit9CisKIC8vIEZJWE1FOiBjYWxsZXJzIG9mIF9jcmVhdGVJT0hJREV2ZW50
VHlwZSBjb3VsZCBzd2l0Y2ggdG8gdGhpcy4KIC0gKElPSElERXZlbnRSZWYpX2NyZWF0ZUlPSElE
RXZlbnRXaXRoSW5mbzooTlNEaWN0aW9uYXJ5ICopaW5mbwogewpAQCAtMzAzLDcgKzM0MSw5IEBA
IC0gKElPSElERXZlbnRSZWYpX2NyZWF0ZUlPSElERXZlbnRXaXRoSW4KIAogICAgIE5TQXJyYXkg
KmNoaWxkRXZlbnRzID0gaW5mb1tISURFdmVudFRvdWNoZXNLZXldOwogICAgIGZvciAoTlNEaWN0
aW9uYXJ5ICp0b3VjaEluZm8gaW4gY2hpbGRFdmVudHMpIHsKLQorICAgICAgICBpZiAoc2VsZi5z
aG91bGRTaG93VG91Y2hlcykKKyAgICAgICAgICAgIFtzZWxmIHVwZGF0ZURlYnVnSW5kaWNhdG9y
Rm9yVG91Y2g6W3RvdWNoSW5mb1tISURFdmVudFRvdWNoSURLZXldIGludFZhbHVlXSB3aXRoUG9p
bnQ6Q0dQb2ludE1ha2UoW3RvdWNoSW5mb1tISURFdmVudFhLZXldIGZsb2F0VmFsdWVdLCBbdG91
Y2hJbmZvW0hJREV2ZW50WUtleV0gZmxvYXRWYWx1ZV0pIGlzVG91Y2hpbmc6KEJPT0wpdG91Y2hd
OworICAgICAgICAKICAgICAgICAgSU9ISUREaWdpdGl6ZXJFdmVudE1hc2sgY2hpbGRFdmVudE1h
c2sgPSAwOwogCiAgICAgICAgIFVJVG91Y2hQaGFzZSBwaGFzZSA9IHBoYXNlRnJvbVN0cmluZyh0
b3VjaEluZm9bSElERXZlbnRQaGFzZUtleV0pOwpAQCAtMzkwLDYgKzQzMCw5IEBAIC0gKElPSElE
RXZlbnRSZWYpX2NyZWF0ZUlPSElERXZlbnRUeXBlOigKIAogICAgICAgICBDR1BvaW50IHBvaW50
ID0gcG9pbnRJbmZvLT5wb2ludDsKICAgICAgICAgcG9pbnQgPSBDR1BvaW50TWFrZShyb3VuZGYo
cG9pbnQueCksIHJvdW5kZihwb2ludC55KSk7CisgICAgICAgIGlmIChzZWxmLnNob3VsZFNob3dU
b3VjaGVzKQorICAgICAgICAgICAgW3NlbGYgdXBkYXRlRGVidWdJbmRpY2F0b3JGb3JUb3VjaDpp
IHdpdGhQb2ludDpwb2ludCBpc1RvdWNoaW5nOmlzVG91Y2hpbmddOworCiAgICAgICAgIFJldGFp
blB0cjxJT0hJREV2ZW50UmVmPiBzdWJFdmVudDsKICAgICAgICAgaWYgKHBvaW50SW5mby0+aXNT
dHlsdXMpIHsKICAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gU3R5bHVzRXZlbnRUb3VjaGVk
KSB7CkBAIC01MDQsOCArNTQ3LDExIEBAIC0gKHZvaWQpX3VwZGF0ZVRvdWNoUG9pbnRzOihDR1Bv
aW50Kilwb2kKICAgICBfYWN0aXZlUG9pbnRDb3VudCA9IGNvdW50OwogCiAgICAgLy8gVXBkYXRl
IHBvaW50IGxvY2F0aW9ucy4KLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsg
KytpKQorICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAg
ICAgX2FjdGl2ZVBvaW50c1tpXS5wb2ludCA9IHBvaW50c1tpXTsKKyAgICAgICAgaWYgKHNlbGYu
c2hvdWxkU2hvd1RvdWNoZXMpCisgICAgICAgICAgICBbc2VsZiB1cGRhdGVEZWJ1Z0luZGljYXRv
ckZvclRvdWNoOmkgd2l0aFBvaW50OnBvaW50c1tpXSBpc1RvdWNoaW5nOllFU107CisgICAgfQog
ICAgIAogICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0YoW3Nl
bGYgX2NyZWF0ZUlPSElERXZlbnRUeXBlOmhhbmRFdmVudFR5cGVdKTsKICAgICBbc2VsZiBfc2Vu
ZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKQEAgLTUyMCw2ICs1NjYsOSBAQCAtICh2b2lkKXRv
dWNoRG93bkF0UG9pbnRzOihDR1BvaW50Kilsb2NhCiAgICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4
ID0gMDsgaW5kZXggPCB0b3VjaENvdW50OyArK2luZGV4KSB7CiAgICAgICAgIF9hY3RpdmVQb2lu
dHNbaW5kZXhdLnBvaW50ID0gbG9jYXRpb25zW2luZGV4XTsKICAgICAgICAgX2FjdGl2ZVBvaW50
c1tpbmRleF0uaXNTdHlsdXMgPSBOTzsKKyAgICAgICAgCisgICAgICAgIGlmIChzZWxmLnNob3Vs
ZFNob3dUb3VjaGVzKQorICAgICAgICAgICAgW3NlbGYgdXBkYXRlRGVidWdJbmRpY2F0b3JGb3JU
b3VjaDppbmRleCB3aXRoUG9pbnQ6bG9jYXRpb25zW2luZGV4XSBpc1RvdWNoaW5nOllFU107CiAg
ICAgfQogCiAgICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihb
c2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6SGFuZEV2ZW50VG91Y2hlZF0pOwpAQCAtNTUwLDgg
KzU5OSwxMSBAQCAtICh2b2lkKWxpZnRVcEF0UG9pbnRzOihDR1BvaW50Kilsb2NhdGlvCiAKICAg
ICBOU1VJbnRlZ2VyIG5ld1BvaW50Q291bnQgPSBfYWN0aXZlUG9pbnRDb3VudCAtIHRvdWNoQ291
bnQ7CiAKLSAgICBmb3IgKE5TVUludGVnZXIgaW5kZXggPSAwOyBpbmRleCA8IHRvdWNoQ291bnQ7
ICsraW5kZXgpCisgICAgZm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCB0b3VjaENv
dW50OyArK2luZGV4KSB7CiAgICAgICAgIF9hY3RpdmVQb2ludHNbbmV3UG9pbnRDb3VudCArIGlu
ZGV4XS5wb2ludCA9IGxvY2F0aW9uc1tpbmRleF07CisgICAgICAgIGlmIChzZWxmLnNob3VsZFNo
b3dUb3VjaGVzKQorICAgICAgICAgICAgc2VsZi5kZWJ1Z1RvdWNoVmlld3NbaW5kZXhdLmhpZGRl
biA9IFlFUzsKKyAgICB9CiAgICAgCiAgICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50
UmVmID0gYWRvcHRDRihbc2VsZiBfY3JlYXRlSU9ISURFdmVudFR5cGU6SGFuZEV2ZW50TGlmdGVk
XSk7CiAgICAgW3NlbGYgX3NlbmRISURFdmVudDpldmVudFJlZi5nZXQoKV07CkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkocmV2aXNp
b24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNyw4ICsxMjcsMTEgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaQogICAgIC8vIFdLQnVuZGxlUGFnZVNldFVzZVRlc3Rp
bmdWaWV3cG9ydENvbmZpZ3VyYXRpb24oZmFsc2UpLgogfQogCi12b2lkIFRlc3RDb250cm9sbGVy
Ojp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiwg
Y29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAordm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxh
dGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29u
c3Qgc3RkOjpzdHJpbmcmKSBjb25zdAogeworICAgIAorICAgIG9wdGlvbnMuc2hvdWxkU2hvd1Rv
dWNoZXMgPSBzaG91bGRTaG93VG91Y2hlcygpOworICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hh
cmVkSElERXZlbnRHZW5lcmF0b3JdIHNldFNob3VsZFNob3dUb3VjaGVzOm9wdGlvbnMuc2hvdWxk
U2hvd1RvdWNoZXNdOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxp
emVDb250ZXh0KCkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL21haW5JT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvbWFpbklPUy5tbQkocmV2
aXNpb24gMjIyNDg2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvbWFpbklPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBAaW50ZXJmYWNlIFdlYktpdFRlc3RSdW5u
ZXJBcHAgOiBVSUFwcGxpCiAtICh2b2lkKV9ydW5UZXN0Q29udHJvbGxlcgogewogICAgIFdUUjo6
VGVzdENvbnRyb2xsZXIgY29udHJvbGxlcihfYXJnYywgX2FyZ3YpOworICAgIFtbSElERXZlbnRH
ZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIHNldFNob3VsZFNob3dUb3VjaGVzOldU
Ujo6VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNob3VsZFNob3dUb3VjaGVzKCldOwogfQog
CiAtICh2b2lkKWFwcGxpY2F0aW9uRGlkRmluaXNoTGF1bmNoaW5nOihOU05vdGlmaWNhdGlvbiAq
KW5vdGlmaWNhdGlvbgo=
</data>
<flag name="review"
          id="342029"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>