<?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>194362</bug_id>
          
          <creation_ts>2019-02-06 14:48:55 -0800</creation_ts>
          <short_desc>Add afterScreenUpdates to WKSnapshotConfiguration</short_desc>
          <delta_ts>2019-02-08 10:21:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</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="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>bdakin</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>mitz</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1503480</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2019-02-06 14:48:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/40655528&gt; Please add an &quot;after screen updates&quot; property to WKSnapshotConfiguration (to solve blank snapshots)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503487</commentid>
    <comment_count>1</comment_count>
      <attachid>361333</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2019-02-06 14:57:17 -0800</bug_when>
    <thetext>Created attachment 361333
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503489</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-06 14:59:04 -0800</bug_when>
    <thetext>Attachment 361333 did not pass style-queue:


ERROR: Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1159:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503497</commentid>
    <comment_count>3</comment_count>
      <attachid>361333</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-02-06 15:07:38 -0800</bug_when>
    <thetext>Comment on attachment 361333
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/WKSnapshotConfiguration.h:51
&gt; +@property (readwrite) BOOL afterScreenUpdates WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));

nonatomic, and you don&apos;t need the &quot;readwrite&quot;

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1159
&gt; +- (void)_callCompletionHandler:(BlockPtr&lt;void (UIImage *, NSError *)&gt;)completionHandler withSnapshotImage:(CGImageRef)snapshotImage atDeviceScale:(CGFloat)deviceScale

_callCompletionHandler:withSnapshotImage:atDeviceScale: is a pretty odd name for a WKWebView method (mostly because _callCompletionHandler at the beginning is super vague)

Maybe this is _didTakeSnapshot:atDeviceScale:completionHandler:? But also maybe it doesn&apos;t need to be a WKWebView method at all? You could just shove this in a local block inside takeSnapshotWithConfiguration and call it from the two call sites... that would be a bit less weird.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1193
&gt; +            [strongSelf _snapshotRect:rectInViewCoordinates intoImageOfWidth:(snapshotWidth * deviceScale) completionHandler:[strongSelf, handler, deviceScale](CGImageRef snapshotImage) {
&gt; +                if (!strongSelf)
&gt; +                    return;
&gt; +                [strongSelf _callCompletionHandler:handler withSnapshotImage:snapshotImage atDeviceScale:deviceScale];
&gt; +            }];

Aren&apos;t all five of these lines shared between the two cases? We should share more! I think the lambda thing above is probably the way to go, but it can encapsulate all of these lines too.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:301
&gt; +    // or without afterScreeUpdates set on the configuration. On device, afterScreeUpdates will be required to

scree! twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503951</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2019-02-07 14:48:17 -0800</bug_when>
    <thetext>(In reply to Tim Horton from comment #3)
&gt; Comment on attachment 361333 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361333&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKSnapshotConfiguration.h:51
&gt; &gt; +@property (readwrite) BOOL afterScreenUpdates WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
&gt; 
&gt; nonatomic, and you don&apos;t need the &quot;readwrite&quot;

Thanks, fixed!

&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1159
&gt; &gt; +- (void)_callCompletionHandler:(BlockPtr&lt;void (UIImage *, NSError *)&gt;)completionHandler withSnapshotImage:(CGImageRef)snapshotImage atDeviceScale:(CGFloat)deviceScale
&gt; 
&gt; _callCompletionHandler:withSnapshotImage:atDeviceScale: is a pretty odd name
&gt; for a WKWebView method (mostly because _callCompletionHandler at the
&gt; beginning is super vague)
&gt; 
&gt; Maybe this is _didTakeSnapshot:atDeviceScale:completionHandler:? But also
&gt; maybe it doesn&apos;t need to be a WKWebView method at all? You could just shove
&gt; this in a local block inside takeSnapshotWithConfiguration and call it from
&gt; the two call sites... that would be a bit less weird.
&gt; 

Yeah, I know. Should be a local block, I was just having a hard time writing it. 🙃

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1193
&gt; &gt; +            [strongSelf _snapshotRect:rectInViewCoordinates intoImageOfWidth:(snapshotWidth * deviceScale) completionHandler:[strongSelf, handler, deviceScale](CGImageRef snapshotImage) {
&gt; &gt; +                if (!strongSelf)
&gt; &gt; +                    return;
&gt; &gt; +                [strongSelf _callCompletionHandler:handler withSnapshotImage:snapshotImage atDeviceScale:deviceScale];
&gt; &gt; +            }];
&gt; 
&gt; Aren&apos;t all five of these lines shared between the two cases? We should share
&gt; more! I think the lambda thing above is probably the way to go, but it can
&gt; encapsulate all of these lines too.
&gt; 

Fixed! With your help!

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm:301
&gt; &gt; +    // or without afterScreeUpdates set on the configuration. On device, afterScreeUpdates will be required to
&gt; 
&gt; scree! twice.

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503952</commentid>
    <comment_count>5</comment_count>
      <attachid>361450</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2019-02-07 14:48:39 -0800</bug_when>
    <thetext>Created attachment 361450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503959</commentid>
    <comment_count>6</comment_count>
      <attachid>361450</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-02-07 14:55:04 -0800</bug_when>
    <thetext>Comment on attachment 361450
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/WKSnapshotConfiguration.h:51
&gt; +@property (nonatomic) BOOL afterScreenUpdates WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));

Obviously need to review this name.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1188
&gt; +    if (snapshotConfiguration &amp;&amp; snapshotConfiguration.afterScreenUpdates) {

This could be inverted and be an early return (after calling callSnapshotRect), and then the code below could be outdented one line 🤷‍♂️ don&apos;t care</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504001</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-07 16:26:09 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKSnapshotConfiguration.h:51
&gt; &gt; +@property (nonatomic) BOOL afterScreenUpdates WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
&gt; 
&gt; Obviously need to review this name.

Hush. It is perfect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504205</commentid>
    <comment_count>8</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2019-02-08 10:18:10 -0800</bug_when>
    <thetext>(In reply to Tim Horton from comment #6)
&gt; Comment on attachment 361450 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=361450&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKSnapshotConfiguration.h:51
&gt; &gt; +@property (nonatomic) BOOL afterScreenUpdates WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
&gt; 
&gt; Obviously need to review this name.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1188
&gt; &gt; +    if (snapshotConfiguration &amp;&amp; snapshotConfiguration.afterScreenUpdates) {
&gt; 
&gt; This could be inverted and be an early return (after calling
&gt; callSnapshotRect), and then the code below could be outdented one line 🤷‍♂️
&gt; don&apos;t care

Yes, actually! Not only can this be done, but it should be so that a nil snapshotConfiguration has the same result as the default configuration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504208</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2019-02-08 10:20:39 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/241199/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504209</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-08 10:21:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/47920880&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361333</attachid>
            <date>2019-02-06 14:57:17 -0800</date>
            <delta_ts>2019-02-07 14:48:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>14422</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDExMDIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE5LTAyLTA2ICBCZXRoIERha2lu
ICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYWZ0ZXJTY3JlZW5VcGRhdGVzIHRv
IFdLU25hcHNob3RDb25maWd1cmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTQzNjIKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNDA2NTU1Mjg+IFBsZWFzZSBhZGQgYW4gImFmdGVyIHNjcmVl
biB1cGRhdGVzIiBwcm9wZXJ0eSB0byAKKyAgICAgICAgV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24g
KHRvIHNvbHZlIGJsYW5rIHNuYXBzaG90cykKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBXZWJLaXQgZXF1aXZhbGVudCBvZiAtIChV
SVZpZXcgKilzbmFwc2hvdFZpZXdBZnRlclNjcmVlblVwZGF0ZXM6KEJPT0wpYWZ0ZXJVcGRhdGVz
OworICAgICAgICBUaGlzIG1ha2VzIG91ciBzbmFwc2hvdHRpbmcgQVBJIG1vcmUgcHJlZGljdGFi
bGUgYW5kIHJlbGlhYmxlIG9uIGlPUyBkZXZpY2VzLCAKKyAgICAgICAgd2hpY2ggaXMgd2h5IHRo
ZSBuZXcgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBkZWZhdWx0cyB0byBZRVMuCisKKyAgICAgICAg
TmV3IHByb3BlcnR5IHRoYXQgZGVmYXVsdHMgdG8gWUVTLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLU25hcHNob3RDb25maWd1cmF0aW9uLm1tOgorICAgICAgICAoLVtXS1NuYXBz
aG90Q29uZmlndXJhdGlvbiBpbml0XSk6CisgICAgICAgICgtW1dLU25hcHNob3RDb25maWd1cmF0
aW9uIGNvcHlXaXRoWm9uZTpdKToKKworICAgICAgICBXaGVuIGFmdGVyU2NyZWVuVXBkYXRlcyBp
cyBzZXQsIGludm9rZSB0aGUgc25hcHNob3QgdmlhIAorICAgICAgICBjYWxsQWZ0ZXJOZXh0UHJl
c2VudGF0aW9uVXBkYXRlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246
Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2FsbENvbXBsZXRp
b25IYW5kbGVyOndpdGhTbmFwc2hvdEltYWdlOmF0RGV2aWNlU2NhbGU6XSk6CisKIDIwMTktMDIt
MDYgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAgRm9yd2Fy
ZCBBZCBDbGljayBBdHRyaWJ1dGlvbiBkYXRhIGZyb20gSFRNTEFuY2hvckVsZW1lbnQ6OmhhbmRs
ZUNsaWNrKCkgdG8gV2ViS2l0OjpOYXZpZ2F0aW9uQWN0aW9uRGF0YQpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLU25hcHNob3RDb25maWd1cmF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLU25hcHNob3RDb25m
aWd1cmF0aW9uLmgJKHJldmlzaW9uIDI0MTA0NSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw2ICs0OCw4IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTMpLCBpb3MoMTEKICAq
LwogQHByb3BlcnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCBjb3B5KSBOU051bWJlciAqc25hcHNo
b3RXaWR0aDsKIAorQHByb3BlcnR5IChyZWFkd3JpdGUpIEJPT0wgYWZ0ZXJTY3JlZW5VcGRhdGVz
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwor
CiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLU25hcHNob3RDb25maWd1cmF0aW9uLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1NuYXBzaG90Q29uZmlndXJhdGlv
bi5tbQkocmV2aXNpb24gMjQxMDQ1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLU25hcHNob3RDb25maWd1cmF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICsz
Niw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0CiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBz
ZWxmLnJlY3QgPSBDR1JlY3ROdWxsOworICAgIHNlbGYuYWZ0ZXJTY3JlZW5VcGRhdGVzID0gWUVT
OwogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC01Miw2ICs1Myw3IEBAIC0gKGlkKWNvcHlXaXRo
Wm9uZTooTlNab25lICopem9uZQogCiAgICAgc25hcHNob3RDb25maWd1cmF0aW9uLnJlY3QgPSBz
ZWxmLnJlY3Q7CiAgICAgc25hcHNob3RDb25maWd1cmF0aW9uLnNuYXBzaG90V2lkdGggPSBzZWxm
LnNuYXBzaG90V2lkdGg7CisgICAgc25hcHNob3RDb25maWd1cmF0aW9uLmFmdGVyU2NyZWVuVXBk
YXRlcyA9IHNlbGYuYWZ0ZXJTY3JlZW5VcGRhdGVzOwogCiAgICAgcmV0dXJuIHNuYXBzaG90Q29u
ZmlndXJhdGlvbjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMjQxMDQ1KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEzOCw2ICsx
MTM4LDkgQEAgLSAodm9pZCl0YWtlU25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjooVwogICAgIGJp
dG1hcFNpemUuc2NhbGUoZGV2aWNlU2NhbGUsIGRldmljZVNjYWxlKTsKIAogICAgIC8vIFNvZnR3
YXJlIHNuYXBzaG90IHdpbGwgbm90IGNhcHR1cmUgZWxlbWVudHMgcmVuZGVyZWQgd2l0aCBoYXJk
d2FyZSBhY2NlbGVyYXRpb24gKFdlYkdMLCB2aWRlbywgZXRjKS4KKyAgICAvLyBUaGlzIGNvZGUg
ZG9lc24ndCBjb25zaWRlciBzbmFwc2hvdENvbmZpZ3VyYXRpb24uYWZ0ZXJTY3JlZW5VcGRhdGVz
IHNpbmNlIHRoZSBzb2Z0d2FyZSBzbmFwc2hvdCBhbHdheXMKKyAgICAvLyBjb250YWlucyByZWNl
bnQgdXBkYXRlcy4gSWYgd2UgZXZlciBoYXZlIGEgVUktc2lkZSBzbmFwc2hvdCBtZWNoYW5pc20g
b24gbWFjT1MsIHdlIHdpbGwgbmVlZCB0byBmYWN0b3IKKyAgICAvLyBpbiBzbmFwc2hvdENvbmZp
Z3VyYXRpb24uYWZ0ZXJTY3JlZW5VcGRhdGVzIGF0IHRoYXQgdGltZS4KICAgICBfcGFnZS0+dGFr
ZVNuYXBzaG90KFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmVjdEluVmlld0Nvb3JkaW5hdGVz
KSwgYml0bWFwU2l6ZSwgV2ViS2l0OjpTbmFwc2hvdE9wdGlvbnNJblZpZXdDb29yZGluYXRlcywg
W2hhbmRsZXIsIHNuYXBzaG90V2lkdGgsIGltYWdlSGVpZ2h0XShjb25zdCBXZWJLaXQ6OlNoYXJl
YWJsZUJpdG1hcDo6SGFuZGxlJiBpbWFnZUhhbmRsZSwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVy
cm9yIGVycm9yQ29kZSkgewogICAgICAgICBpZiAoZXJyb3JDb2RlICE9IFdlYktpdDo6U2NyaXB0
VmFsdWVDYWxsYmFjazo6RXJyb3I6Ok5vbmUpIHsKICAgICAgICAgICAgIGF1dG8gZXJyb3IgPSBj
cmVhdGVOU0Vycm9yKGNhbGxiYWNrRXJyb3JDb2RlKGVycm9yQ29kZSkpOwpAQCAtMTE1Myw2ICsx
MTU2LDE5IEBAIC0gKHZvaWQpdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246KFcKIH0KIAog
I2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKy0gKHZvaWQpX2NhbGxDb21wbGV0aW9uSGFuZGxl
cjooQmxvY2tQdHI8dm9pZCAoVUlJbWFnZSAqLCBOU0Vycm9yICopPiljb21wbGV0aW9uSGFuZGxl
ciB3aXRoU25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZilzbmFwc2hvdEltYWdlIGF0RGV2aWNlU2Nh
bGU6KENHRmxvYXQpZGV2aWNlU2NhbGUKK3sKKyAgICBSZXRhaW5QdHI8TlNFcnJvcj4gZXJyb3I7
CisgICAgUmV0YWluUHRyPFVJSW1hZ2U+IHVpSW1hZ2U7CisgICAgCisgICAgaWYgKCFzbmFwc2hv
dEltYWdlKQorICAgICAgICBlcnJvciA9IGNyZWF0ZU5TRXJyb3IoV0tFcnJvclVua25vd24pOwor
ICAgIGVsc2UKKyAgICAgICAgdWlJbWFnZSA9IGFkb3B0TlMoW1tVSUltYWdlIGFsbG9jXSBpbml0
V2l0aENHSW1hZ2U6c25hcHNob3RJbWFnZSBzY2FsZTpkZXZpY2VTY2FsZSBvcmllbnRhdGlvbjpV
SUltYWdlT3JpZW50YXRpb25VcF0pOworICAgIAorICAgIGNvbXBsZXRpb25IYW5kbGVyKHVpSW1h
Z2UuZ2V0KCksIGVycm9yLmdldCgpKTsKK30KKwogLSAodm9pZCl0YWtlU25hcHNob3RXaXRoQ29u
ZmlndXJhdGlvbjooV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3VyYXRp
b24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoVUlJbWFnZSAqLCBOU0Vycm9yICopKWNvbXBs
ZXRpb25IYW5kbGVyCiB7CiAgICAgQ0dSZWN0IHJlY3RJblZpZXdDb29yZGluYXRlcyA9IHNuYXBz
aG90Q29uZmlndXJhdGlvbiAmJiAhQ0dSZWN0SXNOdWxsKHNuYXBzaG90Q29uZmlndXJhdGlvbi5y
ZWN0KSA/IHNuYXBzaG90Q29uZmlndXJhdGlvbi5yZWN0IDogc2VsZi5ib3VuZHM7CkBAIC0xMTY0
LDE4ICsxMTgwLDI1IEBAIC0gKHZvaWQpdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246KFcK
IAogICAgIGF1dG8gaGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcik7CiAg
ICAgQ0dGbG9hdCBkZXZpY2VTY2FsZSA9IF9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAg
IFJldGFpblB0cjxXS1dlYlZpZXc+IHN0cm9uZ1NlbGYgPSBzZWxmOwogCi0gICAgW3NlbGYgX3Nu
YXBzaG90UmVjdDpyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgaW50b0ltYWdlT2ZXaWR0aDooc25hcHNo
b3RXaWR0aCAqIGRldmljZVNjYWxlKSBjb21wbGV0aW9uSGFuZGxlcjpeKENHSW1hZ2VSZWYgc25h
cHNob3RJbWFnZSkgewotICAgICAgICBSZXRhaW5QdHI8TlNFcnJvcj4gZXJyb3I7Ci0gICAgICAg
IFJldGFpblB0cjxVSUltYWdlPiB1aUltYWdlOwotCi0gICAgICAgIGlmICghc25hcHNob3RJbWFn
ZSkKLSAgICAgICAgICAgIGVycm9yID0gY3JlYXRlTlNFcnJvcihXS0Vycm9yVW5rbm93bik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVpSW1hZ2UgPSBhZG9wdE5TKFtbVUlJbWFnZSBhbGxv
Y10gaW5pdFdpdGhDR0ltYWdlOnNuYXBzaG90SW1hZ2Ugc2NhbGU6ZGV2aWNlU2NhbGUgb3JpZW50
YXRpb246VUlJbWFnZU9yaWVudGF0aW9uVXBdKTsKLQotICAgICAgICBoYW5kbGVyKHVpSW1hZ2Uu
Z2V0KCksIGVycm9yLmdldCgpKTsKLSAgICB9XTsKKyAgICBpZiAoc25hcHNob3RDb25maWd1cmF0
aW9uICYmIHNuYXBzaG90Q29uZmlndXJhdGlvbi5hZnRlclNjcmVlblVwZGF0ZXMpIHsKKyAgICAg
ICAgX3BhZ2UtPmNhbGxBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGUoW3N0cm9uZ1NlbGYsIHJl
Y3RJblZpZXdDb29yZGluYXRlcywgc25hcHNob3RXaWR0aCwgZGV2aWNlU2NhbGUsIGhhbmRsZXJd
KFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICAgICAgaWYgKCFz
dHJvbmdTZWxmKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFtzdHJvbmdT
ZWxmIF9zbmFwc2hvdFJlY3Q6cmVjdEluVmlld0Nvb3JkaW5hdGVzIGludG9JbWFnZU9mV2lkdGg6
KHNuYXBzaG90V2lkdGggKiBkZXZpY2VTY2FsZSkgY29tcGxldGlvbkhhbmRsZXI6W3N0cm9uZ1Nl
bGYsIGhhbmRsZXIsIGRldmljZVNjYWxlXShDR0ltYWdlUmVmIHNuYXBzaG90SW1hZ2UpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXN0cm9uZ1NlbGYpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICBbc3Ryb25nU2VsZiBfY2FsbENvbXBsZXRpb25IYW5kbGVyOmhh
bmRsZXIgd2l0aFNuYXBzaG90SW1hZ2U6c25hcHNob3RJbWFnZSBhdERldmljZVNjYWxlOmRldmlj
ZVNjYWxlXTsKKyAgICAgICAgICAgIH1dOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBbc2VsZiBfc25hcHNob3RSZWN0OnJlY3RJblZpZXdDb29yZGluYXRlcyBpbnRvSW1hZ2VP
ZldpZHRoOihzbmFwc2hvdFdpZHRoICogZGV2aWNlU2NhbGUpIGNvbXBsZXRpb25IYW5kbGVyOltz
dHJvbmdTZWxmLCBoYW5kbGVyLCBkZXZpY2VTY2FsZV0oQ0dJbWFnZVJlZiBzbmFwc2hvdEltYWdl
KSB7CisgICAgICAgICAgICBpZiAoIXN0cm9uZ1NlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgW3N0cm9uZ1NlbGYgX2NhbGxDb21wbGV0aW9uSGFuZGxlcjpoYW5kbGVy
IHdpdGhTbmFwc2hvdEltYWdlOnNuYXBzaG90SW1hZ2UgYXREZXZpY2VTY2FsZTpkZXZpY2VTY2Fs
ZV07CisgICAgICAgIH1dOworICAgIH0KIH0KICNlbmRpZgogCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDExMDIpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0wMi0w
NiAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFmdGVyU2Ny
ZWVuVXBkYXRlcyB0byBXS1NuYXBzaG90Q29uZmlndXJhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MzYyCisgICAgICAgIC1hbmQgY29ycmVz
cG9uZGluZy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQwNjU1NTI4PiBQbGVhc2UgYWRkIGFu
ICJhZnRlciBzY3JlZW4gdXBkYXRlcyIgcHJvcGVydHkgdG8gCisgICAgICAgIFdLU25hcHNob3RD
b25maWd1cmF0aW9uICh0byBzb2x2ZSBibGFuayBzbmFwc2hvdHMpCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLV2ViVmlld1NuYXBzaG90Lm1tOgorICAgICAgICAoVEVTVCk6CisKIDIwMTkt
MDItMDYgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoKSBsZWFrcyBhIFdL
RGF0YVJlZgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dl
YlZpZXdTbmFwc2hvdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dLV2ViVmlld1NuYXBzaG90Lm1tCShyZXZpc2lvbiAyNDEwNDUpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld1NuYXBzaG90Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNCArMjk0LDEyNSBAQCBURVNUKFdLV2ViVmlldywgU25h
cHNob3RJbWFnZUxhcmdlQXN5bmNECiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0Rv
bmUpOwogfQogCitURVNUKFdLV2ViVmlldywgU25hcHNob3RBZnRlclNjcmVlblVwZGF0ZXMpCit7
CisgICAgLy8gVGhlIEFQSSB0ZXN0cyBjdXJyZW50bHkgY2Fubm90IHRydWx5IHRlc3QgU25hcHNo
b3RDb25maWd1cmF0aW9uLmFmdGVyU2NyZWVuVXBkYXRlcyBzaW5jZSBpdCBpcyBvbmx5IG5lZWRl
ZAorICAgIC8vIG9uIGlPUyBkZXZpY2VzLCBhbmQgd2UgZG8gbm90IGN1cnJlbnRseSBydW4gQVBJ
IHRlc3RzIG9uIGlPUyBkZXZpY2VzLiBTbyB3ZSBleHBlY3QgdGhpcyB0ZXN0IHRvIHBhc3Mgd2l0
aAorICAgIC8vIG9yIHdpdGhvdXQgYWZ0ZXJTY3JlZVVwZGF0ZXMgc2V0IG9uIHRoZSBjb25maWd1
cmF0aW9uLiBPbiBkZXZpY2UsIGFmdGVyU2NyZWVVcGRhdGVzIHdpbGwgYmUgcmVxdWlyZWQgdG8K
KyAgICAvLyBwYXNzIHRoaXMgdGVzdC4KKyAgICBOU0ludGVnZXIgdmlld1dpZHRoID0gODAwOwor
ICAgIE5TSW50ZWdlciB2aWV3SGVpZ2h0ID0gNjAwOworICAgIFJldGFpblB0cjxXS1dlYlZpZXc+
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgdmlld1dpZHRoLCB2aWV3SGVpZ2h0KV0pOworICAgIAorICAgIFJldGFpblB0
cjxQbGF0Zm9ybVdpbmRvdz4gd2luZG93OworICAgIENHRmxvYXQgYmFja2luZ1NjYWxlRmFjdG9y
OworICAgIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB3aW5kb3cgPSBhZG9wdE5TKFtbTlNXaW5k
b3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6W3dlYlZpZXcgZnJhbWVdIHN0eWxlTWFzazpO
U0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZl
cjpOT10pOworICAgIFtbd2luZG93IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3OndlYlZpZXcuZ2V0
KCldOworICAgIGJhY2tpbmdTY2FsZUZhY3RvciA9IFt3aW5kb3cgYmFja2luZ1NjYWxlRmFjdG9y
XTsKKyNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgd2luZG93ID0gYWRvcHROUyhbW1VJ
V2luZG93IGFsbG9jXSBpbml0V2l0aEZyYW1lOlt3ZWJWaWV3IGZyYW1lXV0pOworICAgIFt3aW5k
b3cgYWRkU3Vidmlldzp3ZWJWaWV3LmdldCgpXTsKKyAgICBiYWNraW5nU2NhbGVGYWN0b3IgPSBb
W3dpbmRvdyBzY3JlZW5dIHNjYWxlXTsKKyNlbmRpZgorICAgIAorICAgIFt3ZWJWaWV3IGxvYWRI
VE1MU3RyaW5nOkAiPGJvZHkgc3R5bGU9J21hcmdpbjowJz48ZGl2IGlkPSdjaGFuZ2UtbWUnIHN0
eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOnJlZDsgcG9zaXRpb246Zml4ZWQ7IHdpZHRoOjEwMCU7IGhl
aWdodDoxMDAlJz48L2Rpdj48L2JvZHk+IiBiYXNlVVJMOm5pbF07CisgICAgW3dlYlZpZXcgX3Rl
c3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIAorICAgIFJldGFpblB0cjxXS1Nu
YXBzaG90Q29uZmlndXJhdGlvbj4gc25hcHNob3RDb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dL
U25hcHNob3RDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW3NuYXBzaG90Q29uZmln
dXJhdGlvbiBzZXRSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgdmlld1dpZHRoLCB2aWV3SGVpZ2h0KV07
CisgICAgW3NuYXBzaG90Q29uZmlndXJhdGlvbiBzZXRTbmFwc2hvdFdpZHRoOkAodmlld1dpZHRo
KV07CisgICAgW3NuYXBzaG90Q29uZmlndXJhdGlvbiBzZXRBZnRlclNjcmVlblVwZGF0ZXM6WUVT
XTsKKworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAInZhciBkaXYgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnY2hhbmdlLW1lJyk7ZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9
ICdibHVlJzsiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisKKyAgICBpc0RvbmUgPSBmYWxzZTsK
KyAgICBbd2ViVmlldyB0YWtlU25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjpzbmFwc2hvdENvbmZp
Z3VyYXRpb24uZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihQbGF0Zm9ybUltYWdlIHNuYXBzaG90
SW1hZ2UsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKKyAg
ICAgICAgCisgICAgICAgIEVYUEVDVF9FUSh2aWV3V2lkdGgsIHNuYXBzaG90SW1hZ2Uuc2l6ZS53
aWR0aCk7CisgICAgICAgIAorICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9
IGNvbnZlcnRUb0NHSW1hZ2Uoc25hcHNob3RJbWFnZSk7CisgICAgICAgIFJldGFpblB0cjxDR0Nv
bG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZURldmlj
ZVJHQigpKTsKKyAgICAgICAgCisgICAgICAgIE5TSW50ZWdlciB2aWV3V2lkdGhJblBpeGVscyA9
IHZpZXdXaWR0aCAqIGJhY2tpbmdTY2FsZUZhY3RvcjsKKyAgICAgICAgTlNJbnRlZ2VyIHZpZXdI
ZWlnaHRJblBpeGVscyA9IHZpZXdIZWlnaHQgKiBiYWNraW5nU2NhbGVGYWN0b3I7CisgICAgICAg
IAorICAgICAgICB1bnNpZ25lZCBjaGFyIHJnYmFbdmlld1dpZHRoSW5QaXhlbHMgKiB2aWV3SGVp
Z2h0SW5QaXhlbHMgKiA0XTsKKyAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4
dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShyZ2JhLCB2aWV3V2lkdGhJblBpeGVscywgdmlld0hl
aWdodEluUGl4ZWxzLCA4LCA0ICogdmlld1dpZHRoSW5QaXhlbHMsIGNvbG9yU3BhY2UuZ2V0KCks
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmln
KTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2Uo
MCwgMCwgdmlld1dpZHRoSW5QaXhlbHMsIHZpZXdIZWlnaHRJblBpeGVscyksIGNnSW1hZ2UuZ2V0
KCkpOworICAgICAgICAKKyAgICAgICAgTlNJbnRlZ2VyIHBpeGVsSW5kZXggPSBnZXRQaXhlbElu
ZGV4KDAsIDAsIHZpZXdXaWR0aEluUGl4ZWxzKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHJnYmFb
cGl4ZWxJbmRleF0pOworICAgICAgICBFWFBFQ1RfRVEoMCwgcmdiYVtwaXhlbEluZGV4ICsgMV0p
OworICAgICAgICBFWFBFQ1RfRVEoMjU1LCByZ2JhW3BpeGVsSW5kZXggKyAyXSk7CisgICAgICAg
IAorICAgICAgICBpc0RvbmUgPSB0cnVlOworICAgIH1dOworICAgIAorICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmaXNEb25lKTsKK30KKworVEVTVChXS1dlYlZpZXcsIFNuYXBzaG90V2l0
aG91dEFmdGVyU2NyZWVuVXBkYXRlcykKK3sKKyAgICAvLyBTbmFwc2hvdENvbmZpZ3VyYXRpb24u
YWZ0ZXJTY3JlZW5VcGRhdGVzIHRlc3RzIGN1cnJlbnRseSBjYW5ub3QgdHJ1bHkgdGVzdCB0aGlz
IEFQSSBzaW5jZSBpdCBpcyBvbmx5IG5lZWRlZAorICAgIC8vIG9uIGlPUyBkZXZpY2VzLCBhbmQg
d2UgZG8gbm90IGN1cnJlbnRseSBydW4gQVBJIHRlc3RzIG9uIGlPUyBkZXZpY2VzLiBUaGUgZXhw
ZWN0YXRpb25zIGJlbG93IGFyZSBiYXNlZCBvbgorICAgIC8vIHdoYXQgd2UgZXhwZWN0IGluIHRo
ZSBzaW11bGF0b3IgYW5kIG9uIG1hY09TLCB3aGljaCBpcyB0aGF0IHNldHRpbmcgYWZ0ZXJTY3Jl
ZW5VcGRhdGVzIHRvIE5PIHdpbGwgc3RpbGwKKyAgICAvLyByZXN1bHQgaW4gYSBzbmFwc2hvdCB0
aGF0IGluY2x1ZGVzIHRoZSByZWNlbnQgc2NyZWVuIHVwZGF0ZXMuIElmIHdlIGdldCB0aGVzZSB0
ZXN0cyBydW5uaW5nIG9uIGlPUyBkZXZpY2UsCisgICAgLy8gdGhlbiB3ZSB3b3VsZCBleHBlY3Qg
dGhlIHBpeGVscyB0byBiZSByZWQgaW5zdGVhZCBvZiBibHVlLgorICAgIE5TSW50ZWdlciB2aWV3
V2lkdGggPSA4MDA7CisgICAgTlNJbnRlZ2VyIHZpZXdIZWlnaHQgPSA2MDA7CisgICAgUmV0YWlu
UHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCB2aWV3V2lkdGgsIHZpZXdIZWlnaHQpXSk7CisgICAg
CisgICAgUmV0YWluUHRyPFBsYXRmb3JtV2luZG93PiB3aW5kb3c7CisgICAgQ0dGbG9hdCBiYWNr
aW5nU2NhbGVGYWN0b3I7CisgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHdpbmRvdyA9IGFk
b3B0TlMoW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpbd2ViVmlldyBmcmFt
ZV0gc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9y
ZUJ1ZmZlcmVkIGRlZmVyOk5PXSk7CisgICAgW1t3aW5kb3cgY29udGVudFZpZXddIGFkZFN1YnZp
ZXc6d2ViVmlldy5nZXQoKV07CisgICAgYmFja2luZ1NjYWxlRmFjdG9yID0gW3dpbmRvdyBiYWNr
aW5nU2NhbGVGYWN0b3JdOworI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICB3aW5kb3cg
PSBhZG9wdE5TKFtbVUlXaW5kb3cgYWxsb2NdIGluaXRXaXRoRnJhbWU6W3dlYlZpZXcgZnJhbWVd
XSk7CisgICAgW3dpbmRvdyBhZGRTdWJ2aWV3OndlYlZpZXcuZ2V0KCldOworICAgIGJhY2tpbmdT
Y2FsZUZhY3RvciA9IFtbd2luZG93IHNjcmVlbl0gc2NhbGVdOworI2VuZGlmCisgICAgCisgICAg
W3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6QCI8Ym9keSBzdHlsZT0nbWFyZ2luOjAnPjxkaXYgaWQ9
J2NoYW5nZS1tZScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6cmVkOyBwb3NpdGlvbjpmaXhlZDsg
d2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCUnPjwvZGl2PjwvYm9keT4iIGJhc2VVUkw6bmlsXTsKKyAg
ICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAgCisgICAg
UmV0YWluUHRyPFdLU25hcHNob3RDb25maWd1cmF0aW9uPiBzbmFwc2hvdENvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBb
c25hcHNob3RDb25maWd1cmF0aW9uIHNldFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCB2aWV3V2lkdGgs
IHZpZXdIZWlnaHQpXTsKKyAgICBbc25hcHNob3RDb25maWd1cmF0aW9uIHNldFNuYXBzaG90V2lk
dGg6QCh2aWV3V2lkdGgpXTsKKyAgICBbc25hcHNob3RDb25maWd1cmF0aW9uIHNldEFmdGVyU2Ny
ZWVuVXBkYXRlczpOT107CisgICAgCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAi
dmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGFuZ2UtbWUnKTtkaXYuc3R5bGUu
YmFja2dyb3VuZENvbG9yID0gJ2JsdWUnOyIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICAK
KyAgICBpc0RvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyB0YWtlU25hcHNob3RXaXRoQ29uZmln
dXJhdGlvbjpzbmFwc2hvdENvbmZpZ3VyYXRpb24uZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihQ
bGF0Zm9ybUltYWdlIHNuYXBzaG90SW1hZ2UsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIEVY
UEVDVF9OVUxMKGVycm9yKTsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9FUSh2aWV3V2lkdGgs
IHNuYXBzaG90SW1hZ2Uuc2l6ZS53aWR0aCk7CisgICAgICAgIAorICAgICAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gY2dJbWFnZSA9IGNvbnZlcnRUb0NHSW1hZ2Uoc25hcHNob3RJbWFnZSk7Cisg
ICAgICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBhZG9wdENGKENH
Q29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKKyAgICAgICAgCisgICAgICAgIE5TSW50ZWdl
ciB2aWV3V2lkdGhJblBpeGVscyA9IHZpZXdXaWR0aCAqIGJhY2tpbmdTY2FsZUZhY3RvcjsKKyAg
ICAgICAgTlNJbnRlZ2VyIHZpZXdIZWlnaHRJblBpeGVscyA9IHZpZXdIZWlnaHQgKiBiYWNraW5n
U2NhbGVGYWN0b3I7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjaGFyIHJnYmFbdmlld1dp
ZHRoSW5QaXhlbHMgKiB2aWV3SGVpZ2h0SW5QaXhlbHMgKiA0XTsKKyAgICAgICAgUmV0YWluUHRy
PENHQ29udGV4dFJlZj4gY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShyZ2JhLCB2aWV3
V2lkdGhJblBpeGVscywgdmlld0hlaWdodEluUGl4ZWxzLCA4LCA0ICogdmlld1dpZHRoSW5QaXhl
bHMsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtD
R0JpdG1hcEJ5dGVPcmRlcjMyQmlnKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgdmlld1dpZHRoSW5QaXhlbHMsIHZpZXdIZWlnaHRJ
blBpeGVscyksIGNnSW1hZ2UuZ2V0KCkpOworICAgICAgICAKKyAgICAgICAgTlNJbnRlZ2VyIHBp
eGVsSW5kZXggPSBnZXRQaXhlbEluZGV4KDAsIDAsIHZpZXdXaWR0aEluUGl4ZWxzKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDAsIHJnYmFbcGl4ZWxJbmRleF0pOworICAgICAgICBFWFBFQ1RfRVEoMCwg
cmdiYVtwaXhlbEluZGV4ICsgMV0pOworICAgICAgICBFWFBFQ1RfRVEoMjU1LCByZ2JhW3BpeGVs
SW5kZXggKyAyXSk7CisgICAgICAgIAorICAgICAgICBpc0RvbmUgPSB0cnVlOworICAgIH1dOwor
ICAgIAorICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNEb25lKTsKK30KKwogI2VuZGlm
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361450</attachid>
            <date>2019-02-07 14:48:39 -0800</date>
            <delta_ts>2019-02-07 14:55:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>13565</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDExNDQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE5LTAyLTA3ICBCZXRoIERha2lu
ICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYWZ0ZXJTY3JlZW5VcGRhdGVzIHRv
IFdLU25hcHNob3RDb25maWd1cmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTQzNjIKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNDA2NTU1Mjg+IFBsZWFzZSBhZGQgYW4gImFmdGVyIHNjcmVl
biB1cGRhdGVzIiBwcm9wZXJ0eSB0byAKKyAgICAgICAgV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24g
KHRvIHNvbHZlIGJsYW5rIHNuYXBzaG90cykKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBXZWJLaXQgZXF1aXZhbGVudCBvZiAtIChV
SVZpZXcgKilzbmFwc2hvdFZpZXdBZnRlclNjcmVlblVwZGF0ZXM6KEJPT0wpYWZ0ZXJVcGRhdGVz
OworICAgICAgICBUaGlzIG1ha2VzIG91ciBzbmFwc2hvdHRpbmcgQVBJIG1vcmUgcHJlZGljdGFi
bGUgYW5kIHJlbGlhYmxlIG9uIGlPUyBkZXZpY2VzLCAKKyAgICAgICAgd2hpY2ggaXMgd2h5IHRo
ZSBuZXcgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBkZWZhdWx0cyB0byBZRVMuCisKKyAgICAgICAg
TmV3IHByb3BlcnR5IHRoYXQgZGVmYXVsdHMgdG8gWUVTLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLU25hcHNob3RDb25maWd1cmF0aW9uLm1tOgorICAgICAgICAoLVtXS1NuYXBz
aG90Q29uZmlndXJhdGlvbiBpbml0XSk6CisgICAgICAgICgtW1dLU25hcHNob3RDb25maWd1cmF0
aW9uIGNvcHlXaXRoWm9uZTpdKToKKworICAgICAgICBXaGVuIGFmdGVyU2NyZWVuVXBkYXRlcyBp
cyBzZXQsIGludm9rZSB0aGUgc25hcHNob3QgdmlhIAorICAgICAgICBjYWxsQWZ0ZXJOZXh0UHJl
c2VudGF0aW9uVXBkYXRlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246
Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2FsbENvbXBsZXRp
b25IYW5kbGVyOndpdGhTbmFwc2hvdEltYWdlOmF0RGV2aWNlU2NhbGU6XSk6CisKIDIwMTktMDIt
MDcgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUGVybWl0
IGFkZGl0aW9uYWwgSU9LaXQgUHJvcGVydGllcyBuZWVkZWQgYnkgTWVkaWEgUGx1Z0lucyBvbiBv
bGRlciBNYWMgSGFyZHdhcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1NuYXBzaG90Q29uZmlndXJhdGlvbi5oCShyZXZpc2lvbiAy
NDExNDQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tTbmFwc2hvdENv
bmZpZ3VyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBXS19DTEFTU19B
VkFJTEFCTEUobWFjb3N4KDEwLjEzKSwgaW9zKDExCiAgKi8KIEBwcm9wZXJ0eSAobnVsbGFibGUs
IG5vbmF0b21pYywgY29weSkgTlNOdW1iZXIgKnNuYXBzaG90V2lkdGg7CiAKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljKSBCT09MIGFmdGVyU2NyZWVuVXBkYXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29z
eChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVuZAogCiBOU19BU1NVTUVfTk9O
TlVMTF9FTkQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1NuYXBz
aG90Q29uZmlndXJhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24ubW0JKHJldmlzaW9uIDI0MTE0NCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1NuYXBzaG90Q29uZmlndXJh
dGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCAtIChpbnN0YW5jZXR5cGUp
aW5pdAogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgc2VsZi5yZWN0ID0gQ0dSZWN0TnVsbDsK
KyAgICBzZWxmLmFmdGVyU2NyZWVuVXBkYXRlcyA9IFlFUzsKICAgICByZXR1cm4gc2VsZjsKIH0K
IApAQCAtNTIsNiArNTMsNyBAQCAtIChpZCljb3B5V2l0aFpvbmU6KE5TWm9uZSAqKXpvbmUKIAog
ICAgIHNuYXBzaG90Q29uZmlndXJhdGlvbi5yZWN0ID0gc2VsZi5yZWN0OwogICAgIHNuYXBzaG90
Q29uZmlndXJhdGlvbi5zbmFwc2hvdFdpZHRoID0gc2VsZi5zbmFwc2hvdFdpZHRoOworICAgIHNu
YXBzaG90Q29uZmlndXJhdGlvbi5hZnRlclNjcmVlblVwZGF0ZXMgPSBzZWxmLmFmdGVyU2NyZWVu
VXBkYXRlczsKIAogICAgIHJldHVybiBzbmFwc2hvdENvbmZpZ3VyYXRpb247CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlz
aW9uIDI0MTE0NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNDEsNiArMTE0MSw5IEBAIC0gKHZvaWQpdGFrZVNu
YXBzaG90V2l0aENvbmZpZ3VyYXRpb246KFcKICAgICBiaXRtYXBTaXplLnNjYWxlKGRldmljZVNj
YWxlLCBkZXZpY2VTY2FsZSk7CiAKICAgICAvLyBTb2Z0d2FyZSBzbmFwc2hvdCB3aWxsIG5vdCBj
YXB0dXJlIGVsZW1lbnRzIHJlbmRlcmVkIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0aW9uIChXZWJH
TCwgdmlkZW8sIGV0YykuCisgICAgLy8gVGhpcyBjb2RlIGRvZXNuJ3QgY29uc2lkZXIgc25hcHNo
b3RDb25maWd1cmF0aW9uLmFmdGVyU2NyZWVuVXBkYXRlcyBzaW5jZSB0aGUgc29mdHdhcmUgc25h
cHNob3QgYWx3YXlzCisgICAgLy8gY29udGFpbnMgcmVjZW50IHVwZGF0ZXMuIElmIHdlIGV2ZXIg
aGF2ZSBhIFVJLXNpZGUgc25hcHNob3QgbWVjaGFuaXNtIG9uIG1hY09TLCB3ZSB3aWxsIG5lZWQg
dG8gZmFjdG9yCisgICAgLy8gaW4gc25hcHNob3RDb25maWd1cmF0aW9uLmFmdGVyU2NyZWVuVXBk
YXRlcyBhdCB0aGF0IHRpbWUuCiAgICAgX3BhZ2UtPnRha2VTbmFwc2hvdChXZWJDb3JlOjplbmNs
b3NpbmdJbnRSZWN0KHJlY3RJblZpZXdDb29yZGluYXRlcyksIGJpdG1hcFNpemUsIFdlYktpdDo6
U25hcHNob3RPcHRpb25zSW5WaWV3Q29vcmRpbmF0ZXMsIFtoYW5kbGVyLCBzbmFwc2hvdFdpZHRo
LCBpbWFnZUhlaWdodF0oY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaW1h
Z2VIYW5kbGUsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvckNvZGUpIHsKICAgICAg
ICAgaWYgKGVycm9yQ29kZSAhPSBXZWJLaXQ6OlNjcmlwdFZhbHVlQ2FsbGJhY2s6OkVycm9yOjpO
b25lKSB7CiAgICAgICAgICAgICBhdXRvIGVycm9yID0gY3JlYXRlTlNFcnJvcihjYWxsYmFja0Vy
cm9yQ29kZShlcnJvckNvZGUpKTsKQEAgLTExNjcsMTggKzExNzAsMzEgQEAgLSAodm9pZCl0YWtl
U25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjooVwogCiAgICAgYXV0byBoYW5kbGVyID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBDR0Zsb2F0IGRldmljZVNjYWxlID0gX3Bh
Z2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gc3Ryb25n
U2VsZiA9IHNlbGY7CisgICAgYXV0byBjYWxsU25hcHNob3RSZWN0ID0gW3N0cm9uZ1NlbGYsIHJl
Y3RJblZpZXdDb29yZGluYXRlcywgc25hcHNob3RXaWR0aCwgZGV2aWNlU2NhbGUsIGhhbmRsZXJd
IHsKKyAgICAgICAgW3N0cm9uZ1NlbGYgX3NuYXBzaG90UmVjdDpyZWN0SW5WaWV3Q29vcmRpbmF0
ZXMgaW50b0ltYWdlT2ZXaWR0aDooc25hcHNob3RXaWR0aCAqIGRldmljZVNjYWxlKSBjb21wbGV0
aW9uSGFuZGxlcjpbc3Ryb25nU2VsZiwgaGFuZGxlciwgZGV2aWNlU2NhbGVdKENHSW1hZ2VSZWYg
c25hcHNob3RJbWFnZSkgeworICAgICAgICAgICAgUmV0YWluUHRyPE5TRXJyb3I+IGVycm9yOwor
ICAgICAgICAgICAgUmV0YWluUHRyPFVJSW1hZ2U+IHVpSW1hZ2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICghc25hcHNob3RJbWFnZSkKKyAgICAgICAgICAgICAgICBlcnJvciA9IGNy
ZWF0ZU5TRXJyb3IoV0tFcnJvclVua25vd24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHVpSW1hZ2UgPSBhZG9wdE5TKFtbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdl
OnNuYXBzaG90SW1hZ2Ugc2NhbGU6ZGV2aWNlU2NhbGUgb3JpZW50YXRpb246VUlJbWFnZU9yaWVu
dGF0aW9uVXBdKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGFuZGxlcih1aUltYWdlLmdl
dCgpLCBlcnJvci5nZXQoKSk7CisgICAgICAgIH1dOworICAgIH07CiAKLSAgICBbc2VsZiBfc25h
cHNob3RSZWN0OnJlY3RJblZpZXdDb29yZGluYXRlcyBpbnRvSW1hZ2VPZldpZHRoOihzbmFwc2hv
dFdpZHRoICogZGV2aWNlU2NhbGUpIGNvbXBsZXRpb25IYW5kbGVyOl4oQ0dJbWFnZVJlZiBzbmFw
c2hvdEltYWdlKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU0Vycm9yPiBlcnJvcjsKLSAgICAgICAg
UmV0YWluUHRyPFVJSW1hZ2U+IHVpSW1hZ2U7Ci0KLSAgICAgICAgaWYgKCFzbmFwc2hvdEltYWdl
KQotICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVOU0Vycm9yKFdLRXJyb3JVbmtub3duKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdWlJbWFnZSA9IGFkb3B0TlMoW1tVSUltYWdlIGFsbG9j
XSBpbml0V2l0aENHSW1hZ2U6c25hcHNob3RJbWFnZSBzY2FsZTpkZXZpY2VTY2FsZSBvcmllbnRh
dGlvbjpVSUltYWdlT3JpZW50YXRpb25VcF0pOwotCi0gICAgICAgIGhhbmRsZXIodWlJbWFnZS5n
ZXQoKSwgZXJyb3IuZ2V0KCkpOwotICAgIH1dOworICAgIGlmIChzbmFwc2hvdENvbmZpZ3VyYXRp
b24gJiYgc25hcHNob3RDb25maWd1cmF0aW9uLmFmdGVyU2NyZWVuVXBkYXRlcykgeworICAgICAg
ICBfcGFnZS0+Y2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShbY2FsbFNuYXBzaG90UmVj
dCA9IFdURk1vdmUoY2FsbFNuYXBzaG90UmVjdCksIGhhbmRsZXJdKFdlYktpdDo6Q2FsbGJhY2tC
YXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICAgICAgaWYgKGVycm9yICE9IFdlYktpdDo6Q2Fs
bGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSkgeworICAgICAgICAgICAgICAgIGhhbmRsZXIobmlsLCBj
cmVhdGVOU0Vycm9yKFdLRXJyb3JVbmtub3duKS5nZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FsbFNuYXBzaG90UmVjdCgpOworICAg
ICAgICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgY2FsbFNuYXBzaG90UmVjdCgpOwogfQogI2Vu
ZGlmCiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI0MTE0NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDE5LTAyLTA3ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgYWZ0ZXJTY3JlZW5VcGRhdGVzIHRvIFdLU25hcHNob3RDb25maWd1
cmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTQzNjIKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNDA2NTU1Mjg+IFBsZWFzZSBhZGQgYW4gImFmdGVyIHNjcmVlbiB1cGRhdGVzIiBwcm9wZXJ0
eSB0byAKKyAgICAgICAgV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24gKHRvIHNvbHZlIGJsYW5rIHNu
YXBzaG90cykKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3U25hcHNob3QubW06
CisgICAgICAgIChURVNUKToKKwogMjAxOS0wMi0wNyAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGV4dHJhIGNvcHkgb2YgMTAweDEwMC1yZWQudGdh
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld1Nu
YXBzaG90Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tXZWJWaWV3U25hcHNob3QubW0JKHJldmlzaW9uIDI0MTE0NCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3U25hcHNob3QubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI5NCw0ICsyOTQsMTI1IEBAIFRFU1QoV0tXZWJWaWV3LCBTbmFwc2hvdElt
YWdlTGFyZ2VBc3luY0QKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlzRG9uZSk7CiB9
CiAKK1RFU1QoV0tXZWJWaWV3LCBTbmFwc2hvdEFmdGVyU2NyZWVuVXBkYXRlcykKK3sKKyAgICAv
LyBUaGUgQVBJIHRlc3RzIGN1cnJlbnRseSBjYW5ub3QgdHJ1bHkgdGVzdCBTbmFwc2hvdENvbmZp
Z3VyYXRpb24uYWZ0ZXJTY3JlZW5VcGRhdGVzIHNpbmNlIGl0IGlzIG9ubHkgbmVlZGVkCisgICAg
Ly8gb24gaU9TIGRldmljZXMsIGFuZCB3ZSBkbyBub3QgY3VycmVudGx5IHJ1biBBUEkgdGVzdHMg
b24gaU9TIGRldmljZXMuIFNvIHdlIGV4cGVjdCB0aGlzIHRlc3QgdG8gcGFzcyB3aXRoCisgICAg
Ly8gYWZ0ZXJTY3JlZW5VcGRhdGVzIHNldCB0byBZRVMgb3IgTk8gb24gdGhlIGNvbmZpZ3VyYXRp
b24uIE9uIGRldmljZSwgYWZ0ZXJTY3JlZW5VcGRhdGVzIG11c3QgYmUgWUVTIGluIG9yZGVyCisg
ICAgLy8gcGFzcyB0aGlzIHRlc3QuCisgICAgTlNJbnRlZ2VyIHZpZXdXaWR0aCA9IDgwMDsKKyAg
ICBOU0ludGVnZXIgdmlld0hlaWdodCA9IDYwMDsKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3
ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIHZpZXdXaWR0aCwgdmlld0hlaWdodCldKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8
UGxhdGZvcm1XaW5kb3c+IHdpbmRvdzsKKyAgICBDR0Zsb2F0IGJhY2tpbmdTY2FsZUZhY3RvcjsK
KyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgd2luZG93ID0gYWRvcHROUyhbW05TV2luZG93
IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Olt3ZWJWaWV3IGZyYW1lXSBzdHlsZU1hc2s6TlNC
b3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6
Tk9dKTsKKyAgICBbW3dpbmRvdyBjb250ZW50Vmlld10gYWRkU3Vidmlldzp3ZWJWaWV3LmdldCgp
XTsKKyAgICBiYWNraW5nU2NhbGVGYWN0b3IgPSBbd2luZG93IGJhY2tpbmdTY2FsZUZhY3Rvcl07
CisjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHdpbmRvdyA9IGFkb3B0TlMoW1tVSVdp
bmRvdyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbd2ViVmlldyBmcmFtZV1dKTsKKyAgICBbd2luZG93
IGFkZFN1YnZpZXc6d2ViVmlldy5nZXQoKV07CisgICAgYmFja2luZ1NjYWxlRmFjdG9yID0gW1t3
aW5kb3cgc2NyZWVuXSBzY2FsZV07CisjZW5kaWYKKyAgICAKKyAgICBbd2ViVmlldyBsb2FkSFRN
TFN0cmluZzpAIjxib2R5IHN0eWxlPSdtYXJnaW46MCc+PGRpdiBpZD0nY2hhbmdlLW1lJyBzdHls
ZT0nYmFja2dyb3VuZC1jb2xvcjpyZWQ7IHBvc2l0aW9uOmZpeGVkOyB3aWR0aDoxMDAlOyBoZWln
aHQ6MTAwJSc+PC9kaXY+PC9ib2R5PiIgYmFzZVVSTDpuaWxdOworICAgIFt3ZWJWaWV3IF90ZXN0
X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKyAgICAKKyAgICBSZXRhaW5QdHI8V0tTbmFw
c2hvdENvbmZpZ3VyYXRpb24+IHNuYXBzaG90Q29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1Nu
YXBzaG90Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtzbmFwc2hvdENvbmZpZ3Vy
YXRpb24gc2V0UmVjdDpOU01ha2VSZWN0KDAsIDAsIHZpZXdXaWR0aCwgdmlld0hlaWdodCldOwor
ICAgIFtzbmFwc2hvdENvbmZpZ3VyYXRpb24gc2V0U25hcHNob3RXaWR0aDpAKHZpZXdXaWR0aCld
OworICAgIFtzbmFwc2hvdENvbmZpZ3VyYXRpb24gc2V0QWZ0ZXJTY3JlZW5VcGRhdGVzOllFU107
CisKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJ2YXIgZGl2ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NoYW5nZS1tZScpO2Rpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAn
Ymx1ZSc7IiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworCisgICAgaXNEb25lID0gZmFsc2U7Cisg
ICAgW3dlYlZpZXcgdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246c25hcHNob3RDb25maWd1
cmF0aW9uLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4oUGxhdGZvcm1JbWFnZSBzbmFwc2hvdElt
YWdlLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CisgICAg
ICAgIAorICAgICAgICBFWFBFQ1RfRVEodmlld1dpZHRoLCBzbmFwc2hvdEltYWdlLnNpemUud2lk
dGgpOworICAgICAgICAKKyAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBj
b252ZXJ0VG9DR0ltYWdlKHNuYXBzaG90SW1hZ2UpOworICAgICAgICBSZXRhaW5QdHI8Q0dDb2xv
clNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VS
R0IoKSk7CisgICAgICAgIAorICAgICAgICBOU0ludGVnZXIgdmlld1dpZHRoSW5QaXhlbHMgPSB2
aWV3V2lkdGggKiBiYWNraW5nU2NhbGVGYWN0b3I7CisgICAgICAgIE5TSW50ZWdlciB2aWV3SGVp
Z2h0SW5QaXhlbHMgPSB2aWV3SGVpZ2h0ICogYmFja2luZ1NjYWxlRmFjdG9yOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgY2hhciByZ2JhW3ZpZXdXaWR0aEluUGl4ZWxzICogdmlld0hlaWdo
dEluUGl4ZWxzICogNF07CisgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHQg
PSBDR0JpdG1hcENvbnRleHRDcmVhdGUocmdiYSwgdmlld1dpZHRoSW5QaXhlbHMsIHZpZXdIZWln
aHRJblBpeGVscywgOCwgNCAqIHZpZXdXaWR0aEluUGl4ZWxzLCBjb2xvclNwYWNlLmdldCgpLCBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyk7
CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAs
IDAsIHZpZXdXaWR0aEluUGl4ZWxzLCB2aWV3SGVpZ2h0SW5QaXhlbHMpLCBjZ0ltYWdlLmdldCgp
KTsKKyAgICAgICAgCisgICAgICAgIE5TSW50ZWdlciBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxJbmRl
eCgwLCAwLCB2aWV3V2lkdGhJblBpeGVscyk7CisgICAgICAgIEVYUEVDVF9FUSgwLCByZ2JhW3Bp
eGVsSW5kZXhdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHJnYmFbcGl4ZWxJbmRleCArIDFdKTsK
KyAgICAgICAgRVhQRUNUX0VRKDI1NSwgcmdiYVtwaXhlbEluZGV4ICsgMl0pOworICAgICAgICAK
KyAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICAKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmlzRG9uZSk7Cit9CisKK1RFU1QoV0tXZWJWaWV3LCBTbmFwc2hvdFdpdGhv
dXRBZnRlclNjcmVlblVwZGF0ZXMpCit7CisgICAgLy8gU25hcHNob3RDb25maWd1cmF0aW9uLmFm
dGVyU2NyZWVuVXBkYXRlcyB0ZXN0cyBjdXJyZW50bHkgY2Fubm90IHRydWx5IHRlc3QgdGhpcyBB
UEkgc2luY2UgaXQgaXMgb25seSBuZWVkZWQKKyAgICAvLyBvbiBpT1MgZGV2aWNlcywgYW5kIHdl
IGRvIG5vdCBjdXJyZW50bHkgcnVuIEFQSSB0ZXN0cyBvbiBpT1MgZGV2aWNlcy4gVGhlIGV4cGVj
dGF0aW9ucyBiZWxvdyBhcmUgYmFzZWQgb24KKyAgICAvLyB3aGF0IHdlIGV4cGVjdCBpbiB0aGUg
c2ltdWxhdG9yIGFuZCBvbiBtYWNPUywgd2hpY2ggaXMgdGhhdCBzZXR0aW5nIGFmdGVyU2NyZWVu
VXBkYXRlcyB0byBOTyB3aWxsIHN0aWxsCisgICAgLy8gcmVzdWx0IGluIGEgc25hcHNob3QgdGhh
dCBpbmNsdWRlcyB0aGUgcmVjZW50IHNjcmVlbiB1cGRhdGVzLiBJZiB3ZSBnZXQgdGhlc2UgdGVz
dHMgcnVubmluZyBvbiBpT1MgZGV2aWNlLAorICAgIC8vIHRoZW4gd2Ugd291bGQgZXhwZWN0IHRo
ZSBwaXhlbHMgdG8gYmUgcmVkIGluc3RlYWQgb2YgYmx1ZS4KKyAgICBOU0ludGVnZXIgdmlld1dp
ZHRoID0gODAwOworICAgIE5TSW50ZWdlciB2aWV3SGVpZ2h0ID0gNjAwOworICAgIFJldGFpblB0
cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgdmlld1dpZHRoLCB2aWV3SGVpZ2h0KV0pOworICAgIAor
ICAgIFJldGFpblB0cjxQbGF0Zm9ybVdpbmRvdz4gd2luZG93OworICAgIENHRmxvYXQgYmFja2lu
Z1NjYWxlRmFjdG9yOworICAgIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB3aW5kb3cgPSBhZG9w
dE5TKFtbTlNXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6W3dlYlZpZXcgZnJhbWVd
IHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVC
dWZmZXJlZCBkZWZlcjpOT10pOworICAgIFtbd2luZG93IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3
OndlYlZpZXcuZ2V0KCldOworICAgIGJhY2tpbmdTY2FsZUZhY3RvciA9IFt3aW5kb3cgYmFja2lu
Z1NjYWxlRmFjdG9yXTsKKyNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgd2luZG93ID0g
YWRvcHROUyhbW1VJV2luZG93IGFsbG9jXSBpbml0V2l0aEZyYW1lOlt3ZWJWaWV3IGZyYW1lXV0p
OworICAgIFt3aW5kb3cgYWRkU3Vidmlldzp3ZWJWaWV3LmdldCgpXTsKKyAgICBiYWNraW5nU2Nh
bGVGYWN0b3IgPSBbW3dpbmRvdyBzY3JlZW5dIHNjYWxlXTsKKyNlbmRpZgorICAgIAorICAgIFt3
ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOkAiPGJvZHkgc3R5bGU9J21hcmdpbjowJz48ZGl2IGlkPSdj
aGFuZ2UtbWUnIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOnJlZDsgcG9zaXRpb246Zml4ZWQ7IHdp
ZHRoOjEwMCU7IGhlaWdodDoxMDAlJz48L2Rpdj48L2JvZHk+IiBiYXNlVVJMOm5pbF07CisgICAg
W3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIAorICAgIFJl
dGFpblB0cjxXS1NuYXBzaG90Q29uZmlndXJhdGlvbj4gc25hcHNob3RDb25maWd1cmF0aW9uID0g
YWRvcHROUyhbW1dLU25hcHNob3RDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW3Nu
YXBzaG90Q29uZmlndXJhdGlvbiBzZXRSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgdmlld1dpZHRoLCB2
aWV3SGVpZ2h0KV07CisgICAgW3NuYXBzaG90Q29uZmlndXJhdGlvbiBzZXRTbmFwc2hvdFdpZHRo
OkAodmlld1dpZHRoKV07CisgICAgW3NuYXBzaG90Q29uZmlndXJhdGlvbiBzZXRBZnRlclNjcmVl
blVwZGF0ZXM6Tk9dOworICAgIAorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAInZh
ciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhbmdlLW1lJyk7ZGl2LnN0eWxlLmJh
Y2tncm91bmRDb2xvciA9ICdibHVlJzsiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgCisg
ICAgaXNEb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgdGFrZVNuYXBzaG90V2l0aENvbmZpZ3Vy
YXRpb246c25hcHNob3RDb25maWd1cmF0aW9uLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOl4oUGxh
dGZvcm1JbWFnZSBzbmFwc2hvdEltYWdlLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBFWFBF
Q1RfTlVMTChlcnJvcik7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfRVEodmlld1dpZHRoLCBz
bmFwc2hvdEltYWdlLnNpemUud2lkdGgpOworICAgICAgICAKKyAgICAgICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGNnSW1hZ2UgPSBjb252ZXJ0VG9DR0ltYWdlKHNuYXBzaG90SW1hZ2UpOworICAg
ICAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gYWRvcHRDRihDR0Nv
bG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisgICAgICAgIAorICAgICAgICBOU0ludGVnZXIg
dmlld1dpZHRoSW5QaXhlbHMgPSB2aWV3V2lkdGggKiBiYWNraW5nU2NhbGVGYWN0b3I7CisgICAg
ICAgIE5TSW50ZWdlciB2aWV3SGVpZ2h0SW5QaXhlbHMgPSB2aWV3SGVpZ2h0ICogYmFja2luZ1Nj
YWxlRmFjdG9yOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgY2hhciByZ2JhW3ZpZXdXaWR0
aEluUGl4ZWxzICogdmlld0hlaWdodEluUGl4ZWxzICogNF07CisgICAgICAgIFJldGFpblB0cjxD
R0NvbnRleHRSZWY+IGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUocmdiYSwgdmlld1dp
ZHRoSW5QaXhlbHMsIHZpZXdIZWlnaHRJblBpeGVscywgOCwgNCAqIHZpZXdXaWR0aEluUGl4ZWxz
LCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dC
aXRtYXBCeXRlT3JkZXIzMkJpZyk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0
LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHZpZXdXaWR0aEluUGl4ZWxzLCB2aWV3SGVpZ2h0SW5Q
aXhlbHMpLCBjZ0ltYWdlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIE5TSW50ZWdlciBwaXhl
bEluZGV4ID0gZ2V0UGl4ZWxJbmRleCgwLCAwLCB2aWV3V2lkdGhJblBpeGVscyk7CisgICAgICAg
IEVYUEVDVF9FUSgwLCByZ2JhW3BpeGVsSW5kZXhdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHJn
YmFbcGl4ZWxJbmRleCArIDFdKTsKKyAgICAgICAgRVhQRUNUX0VRKDI1NSwgcmdiYVtwaXhlbElu
ZGV4ICsgMl0pOworICAgICAgICAKKyAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAg
ICAKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlzRG9uZSk7Cit9CisKICNlbmRpZgo=
</data>
<flag name="review"
          id="378136"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>