<?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>221636</bug_id>
          
          <creation_ts>2021-02-09 15:04:19 -0800</creation_ts>
          <short_desc>[iOS][FCR] Add new picker for &lt;select multiple&gt; elements</short_desc>
          <delta_ts>2021-02-11 14:25:36 -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>Forms</component>
          <version>Safari Technology Preview</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="Aditya Keerthi">akeerthi</reporter>
          <assigned_to name="Aditya Keerthi">akeerthi</assigned_to>
          <cc>cdumez</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>1727289</commentid>
    <comment_count>0</comment_count>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2021-02-09 15:04:19 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727290</commentid>
    <comment_count>1</comment_count>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2021-02-09 15:04:36 -0800</bug_when>
    <thetext>&lt;rdar://problem/72399337&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727293</commentid>
    <comment_count>2</comment_count>
      <attachid>419772</attachid>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2021-02-09 15:07:11 -0800</bug_when>
    <thetext>Created attachment 419772
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728148</commentid>
    <comment_count>3</comment_count>
      <attachid>419772</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2021-02-11 09:49:20 -0800</bug_when>
    <thetext>Comment on attachment 419772
Patch

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

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:733
&gt; +    RetainPtr&lt;UIBarButtonItem&gt; nextPreviousSpacer = adoptNS([[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:NULL]);

Nit - I think `auto` instead of `RetainPtr&lt;UIBarButtonItem&gt;` would be a bit cleaner here, for the `nextPreviousSpacer` and `closeButton`.

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:744
&gt; +    for (const OptionItem&amp; option : _contentView.focusedSelectElementOptions) {

Nit - `auto&amp; option`?

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:763
&gt; +    for (const OptionItem&amp; option : _contentView.focusedSelectElementOptions) {

Nit - `auto&amp; option`?

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:815
&gt; +    for (const OptionItem&amp; option : _contentView.focusedSelectElementOptions) {

Nit - auto&amp;?

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:903
&gt; +    for (const OptionItem&amp; option : _contentView.focusedSelectElementOptions) {

Nit - `auto&amp; option`?

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:919
&gt; +- (OptionItem *)optionItemAtIndexPath:(NSIndexPath *)indexPath

Nit - this is fine as-is since all call sites use the `OptionItem` immediately without risk of reentrant calls that might change the focused element options, but I think it would be safer to instead return an `Optional&lt;OptionItem&gt;` instead. While this does copy `OptionItem` an extra time, it would avoid any risk of accidentally UAF-ing option items in the future.

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:922
&gt; +    for (OptionItem&amp; option : _contentView.focusedSelectElementOptions) {

Nit - `auto&amp; option`?

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:950
&gt; +    ASSERT(option);

Nit - I think this is okay as-is since there are no out-of-band IPC messages a compromised web process could use to update focused element from underneath us, but it might still be safer to add a null check here.

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:958
&gt; +    if (option-&gt;disabled)
&gt; +        cell.userInteractionEnabled = NO;
&gt; +    else
&gt; +        cell.userInteractionEnabled = YES;

Nit - this might be cleaner as `cell.userInteractionEnabled = !option-&gt;disabled;`

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:979
&gt; +    ASSERT(option);

(Ditto)

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:993
&gt; +        [_contentView accessoryTab:YES];

These should probably capture the content view (either weakly or strongly).

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:1000
&gt; +        [_contentView accessoryTab:NO];

(Ditto)

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:1007
&gt; +        [_contentView accessoryDone];

(Ditto)

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:1095
&gt; +    NSInteger currentRow = -1;
&gt; +    NSInteger totalRows = -1;

Nit - can we instead start these at 0, and move the increment after the return statement below?

&gt; Source/WebKit/UIProcess/ios/forms/WKFormSelectPicker.mm:1097
&gt; +    for (const OptionItem&amp; option : _view.focusedSelectElementOptions) {

Nit - `auto&amp; option`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728186</commentid>
    <comment_count>4</comment_count>
      <attachid>420010</attachid>
    <who name="Aditya Keerthi">akeerthi</who>
    <bug_when>2021-02-11 11:24:49 -0800</bug_when>
    <thetext>Created attachment 420010
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728305</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-11 14:25:34 -0800</bug_when>
    <thetext>Committed r272753: &lt;https://commits.webkit.org/r272753&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 420010.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419772</attachid>
            <date>2021-02-09 15:07:11 -0800</date>
            <delta_ts>2021-02-11 09:49:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221636-20210209180718.patch</filename>
            <type>text/plain</type>
            <size>29235</size>
            <attacher name="Aditya Keerthi">akeerthi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxNzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ1MTRmNTNhMWRmNDEwOWI0
NmY4NzA5ODZiMGJhZWI0NzZhYzYzY2QuLjAwNmRmZDEzNGRiMDQ2MjU2ZDljMzA3OWM3NWIwZGNk
ODZiYjk0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMjEtMDItMDkgIEFkaXR5YSBL
ZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdW0ZDUl0gQWRkIG5l
dyBwaWNrZXIgZm9yIDxzZWxlY3QgbXVsdGlwbGU+IGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE2MzYKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzcyMzk5MzM3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZm9ybXMvaW9zL2Zvcm0tY29udHJvbC1yZWZyZXNoL3NlbGVj
dC9zZWxlY3QtbXVsdGlwbGUtcGlja2VyLmh0bWwKKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3Mv
Zm9ybXMvV0tGb3JtU2VsZWN0Q29udHJvbC5tbToKKyAgICAgICAgKC1bV0tGb3JtU2VsZWN0Q29u
dHJvbCBpbml0V2l0aFZpZXc6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zv
cm1TZWxlY3RQaWNrZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNl
bGVjdFBpY2tlci5tbToKKyAgICAgICAgKC1bV0tTZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250cm9s
bGVyIGluaXRXaXRoVmlldzpdKToKKworICAgICAgICBUaGUgbmV3IHBpY2tlciBpcyBhIHRhYmxl
IHZpZXcgd2l0aCBzdHlsZSBVSVRhYmxlU3R5bGVJbnNldEdyb3VwZWQuCisKKyAgICAgICAgKC1b
V0tTZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250cm9sbGVyIHZpZXdXaWxsQXBwZWFyOl0pOgorCisg
ICAgICAgIEVuYWJsZS9kaXNhYmxlIHRoZSBuZXh0L3ByZXZpb3VzIGFjY2Vzc29yeSBidXR0b25z
IGFjY29yZGluZ2x5LgorCisgICAgICAgICgtW1dLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJv
bGxlciBudW1iZXJPZlJvd3NJbkdyb3VwOl0pOgorICAgICAgICAoLVtXS1NlbGVjdFBpY2tlclRh
YmxlVmlld0NvbnRyb2xsZXIgbnVtYmVyT2ZTZWN0aW9uc0luVGFibGVWaWV3Ol0pOgorCisgICAg
ICAgIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBzZWN0aW9uLCB0byBkaXNwbGF5
IHRoZSBlbXB0eSBtZXNzYWdlLgorICAgICAgICBBZGRpbmcgZ3JvdXBzIHdpbGwgYWRkIG1vcmUg
c2VjdGlvbnMgdG8gdGhlIHRhYmxlIHZpZXcuCisKKyAgICAgICAgKC1bV0tTZWxlY3RQaWNrZXJU
YWJsZVZpZXdDb250cm9sbGVyIHRhYmxlVmlldzpudW1iZXJPZlJvd3NJblNlY3Rpb246XSk6Cisg
ICAgICAgICgtW1dLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJvbGxlciB0YWJsZVZpZXc6aGVp
Z2h0Rm9ySGVhZGVySW5TZWN0aW9uOl0pOgorCisgICAgICAgIFRoZSBoZWFkZXIgZm9yIHRoZSBm
aXJzdCBzZWN0aW9uIGlzIGFuIGluc2V0IG1hdGNoaW5nIHRhYmxlIHZpZXcgaW5zZXQuCisKKyAg
ICAgICAgKC1bV0tTZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250cm9sbGVyIHRhYmxlVmlldzpoZWln
aHRGb3JGb290ZXJJblNlY3Rpb246XSk6CisKKyAgICAgICAgQW4gZW1wdHkgZmlyc3Qgc2VjdGlv
biBzaG91bGQgbm90IGhhdmUgYSBmb290ZXIgaWYgdGhlcmUgYXJlIG1vcmUgc2VjdGlvbnMKKyAg
ICAgICAgYWZ0ZXIgaXQuIFRoaXMgY2FuIG9jY3VyIHdoZW4gdGhlIGZpcnN0IG9wdGlvbiBiZWxv
bmdzIHRvIGEgZ3JvdXAuCisKKyAgICAgICAgKC1bV0tTZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250
cm9sbGVyIHRhYmxlVmlldzp0aXRsZUZvckhlYWRlckluU2VjdGlvbjpdKToKKyAgICAgICAgKC1b
V0tTZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250cm9sbGVyIHRhYmxlVmlldzp2aWV3Rm9yRm9vdGVy
SW5TZWN0aW9uOl0pOgorCisgICAgICAgIFJldHVybiBuaWwgc28gdGhhdCB0aGUgZm9vdGVyIGhl
aWdodCBpcyBvYmV5ZWQuCisKKyAgICAgICAgKC1bV0tTZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250
cm9sbGVyIHRhYmxlVmlldzp2aWV3Rm9ySGVhZGVySW5TZWN0aW9uOl0pOgorCisgICAgICAgIFRo
ZSBoZWFkZXIgdmlldyBkaXNwbGF5cyB0aGUgZ3JvdXAgbmFtZSBhbG9uZyB3aXRoIGEgYnV0dG9u
IHRvIGNvbGxhcHNlCisgICAgICAgIHRoZSBzZWN0aW9uLgorCisgICAgICAgICgtW1dLU2VsZWN0
UGlja2VyVGFibGVWaWV3Q29udHJvbGxlciBjb2xsYXBzZVNlY3Rpb246XSk6CisKKyAgICAgICAg
Q29sbGFwc2luZyBzZWN0aW9ucyBpcyBpbXBsZW1lbnRlZCBieSByZW1vdmluZyB0aGUgY29ycmVz
cG9uZGluZyByb3dzCisgICAgICAgIGZyb20gdGhlIGRhdGEgc291cmNlLiBUaGUgYnV0dG9uIGlz
IGFuaW1hdGVkIGJ5IGNoYW5naW5nIGl0cyB0cmFuc2Zvcm0uCisKKyAgICAgICAgKC1bV0tTZWxl
Y3RQaWNrZXJUYWJsZVZpZXdDb250cm9sbGVyIGZpbmRJdGVtSW5kZXhBdDpdKToKKyAgICAgICAg
KC1bV0tTZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250cm9sbGVyIG9wdGlvbkl0ZW1BdEluZGV4UGF0
aDpdKToKKyAgICAgICAgKC1bV0tTZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250cm9sbGVyIHRhYmxl
VmlldzpjZWxsRm9yUm93QXRJbmRleFBhdGg6XSk6CisgICAgICAgICgtW1dLU2VsZWN0UGlja2Vy
VGFibGVWaWV3Q29udHJvbGxlciB0YWJsZVZpZXc6ZGlkU2VsZWN0Um93QXRJbmRleFBhdGg6XSk6
CisgICAgICAgICgtW1dLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJvbGxlciBuZXh0Ol0pOgor
ICAgICAgICAoLVtXS1NlbGVjdFBpY2tlclRhYmxlVmlld0NvbnRyb2xsZXIgcHJldmlvdXM6XSk6
CisgICAgICAgICgtW1dLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJvbGxlciBjbG9zZTpdKToK
KyAgICAgICAgKC1bV0tTZWxlY3RNdWx0aXBsZVBpY2tlciBpbml0V2l0aFZpZXc6XSk6CisgICAg
ICAgICgtW1dLU2VsZWN0TXVsdGlwbGVQaWNrZXIgY29uZmlndXJlUHJlc2VudGF0aW9uXSk6CisK
KyAgICAgICAgRGlzcGxheSB0aGUgcGlja2VyIGFzIGEgaGFsZi1zaGVldCAodGhhdCBjYW4gYmUg
ZHJhZ2dlZCB1cCBpbnRvIGEKKyAgICAgICAgZnVsbHNjcmVlbiB2aWV3KSBvbiBpUGhvbmVzLCBh
bmQgYXMgYSBwb3BvdmVyIG9uIGlQYWRzLgorCisgICAgICAgICgtW1dLU2VsZWN0TXVsdGlwbGVQ
aWNrZXIgY29udHJvbFZpZXddKToKKyAgICAgICAgKC1bV0tTZWxlY3RNdWx0aXBsZVBpY2tlciBj
b250cm9sQmVnaW5FZGl0aW5nXSk6CisgICAgICAgICgtW1dLU2VsZWN0TXVsdGlwbGVQaWNrZXIg
Y29udHJvbEVuZEVkaXRpbmddKToKKyAgICAgICAgKC1bV0tTZWxlY3RNdWx0aXBsZVBpY2tlciBw
cmVzZW50YXRpb25Db250cm9sbGVyRGlkRGlzbWlzczpdKToKKyAgICAgICAgKC1bV0tTZWxlY3RN
dWx0aXBsZVBpY2tlciBfaW5kZXhQYXRoRm9yUm93Ol0pOgorICAgICAgICAoLVtXS1NlbGVjdE11
bHRpcGxlUGlja2VyIHNlbGVjdFJvdzppbkNvbXBvbmVudDpleHRlbmRpbmdTZWxlY3Rpb246XSk6
CisKKyAgICAgICAgQWRkZWQgdGVzdGluZyBob29rIHRvIHN1cHBvcnQgbGF5b3V0IHRlc3Rpbmcu
CisKIDIwMjEtMDItMDggIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpT1NdW0ZDUl0gVXNlIFVJQ29sb3JQaWNrZXJWaWV3Q29udHJvbGxlciBmb3IgY29s
b3IgaW5wdXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMv
V0tGb3JtU2VsZWN0Q29udHJvbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jt
cy9XS0Zvcm1TZWxlY3RDb250cm9sLm1tCmluZGV4IGQ2MWU5NmQ5ZDkyMjY2NGI3ZTZmZjZlMTJj
ZTcyNTBjOTgzNTE4NmUuLjI5MDZiZDllMmU1MDEyNmY5NjQ1MTIwNDVhMDYyNmZlNzQ4ZjMxY2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxl
Y3RDb250cm9sLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zv
cm1TZWxlY3RDb250cm9sLm1tCkBAIC03Nyw4ICs3NywxMCBAQCAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmlldwogCiAjaWYgRU5BQkxFKElPU19GT1JNX0NP
TlRST0xfUkVGUkVTSCkKICAgICBpZiAoW3ZpZXcgX2Zvcm1Db250cm9sUmVmcmVzaEVuYWJsZWRd
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgaW1wbGVtZW50YXRpb24gZm9yIG11bHRpLXNlbGVj
dCBwaWNrZXIuCi0gICAgICAgIGNvbnRyb2wgPSBhZG9wdE5TKFtbV0tTZWxlY3RQaWNrZXIgYWxs
b2NdIGluaXRXaXRoVmlldzp2aWV3XSk7CisgICAgICAgIGlmICh2aWV3LmZvY3VzZWRFbGVtZW50
SW5mb3JtYXRpb24uaXNNdWx0aVNlbGVjdCkKKyAgICAgICAgICAgIGNvbnRyb2wgPSBhZG9wdE5T
KFtbV0tTZWxlY3RNdWx0aXBsZVBpY2tlciBhbGxvY10gaW5pdFdpdGhWaWV3OnZpZXddKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY29udHJvbCA9IGFkb3B0TlMoW1tXS1NlbGVjdFBpY2tl
ciBhbGxvY10gaW5pdFdpdGhWaWV3OnZpZXddKTsKICAgICAgICAgcmV0dXJuIFtzdXBlciBpbml0
V2l0aFZpZXc6dmlldyBjb250cm9sOldURk1vdmUoY29udHJvbCldOwogICAgIH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVj
dFBpY2tlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVj
dFBpY2tlci5oCmluZGV4IGYzYjYzNDlmZDYyNTg5MmYwMWQwOTE1MDFjZWY2Nzg3NDE4NDFlZDku
LjlkMDk1NWExYzQzMDk5ZTA5OTEwZGNlNmFmZmMzOGQ5OGNkMWY4YmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RQaWNrZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0UGlja2VyLmgK
QEAgLTUyLDYgKzUyLDEwIEBACiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3OihXS0NvbnRl
bnRWaWV3ICopdmlldzsKIEBlbmQKIAorQGludGVyZmFjZSBXS1NlbGVjdE11bHRpcGxlUGlja2Vy
IDogTlNPYmplY3QgPFdLRm9ybUNvbnRyb2w+CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3
OihXS0NvbnRlbnRWaWV3ICopdmlldzsKK0BlbmQKKwogI2VuZGlmCiAKICNlbmRpZiAvLyBQTEFU
Rk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L2Zvcm1zL1dLRm9ybVNlbGVjdFBpY2tlci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9mb3Jtcy9XS0Zvcm1TZWxlY3RQaWNrZXIubW0KaW5kZXggZjY4ZGExYWFjZjBjYWMzZjEwOTNh
MGY4NGZkMzBiNGUzMzk2Y2I0Yi4uZjQ4YTQxMmM2ZGVjNzZjODBlODQ4ODRkZDQ3Y2IyZmQ1NjNm
NmE2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9y
bVNlbGVjdFBpY2tlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMv
V0tGb3JtU2VsZWN0UGlja2VyLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKIAogI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgIlVzZXJJbnRlcmZhY2VJ
ZGlvbS5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlldy5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLmgiCiAjaW1wb3J0ICJXS0Zvcm1Qb3BvdmVyLmgiCkBAIC02OTksNCArNzAw
LDQyNiBAQCAtICh2b2lkKXNlbGVjdFJvdzooTlNJbnRlZ2VyKXJvd0luZGV4IGluQ29tcG9uZW50
OihOU0ludGVnZXIpY29tcG9uZW50SW5kZXggZXh0ZQogCiBAZW5kCiAKK3N0YXRpYyBjb25zdCBD
R0Zsb2F0IG5leHRQcmV2aW91c1NwYWNlcldpZHRoID0gNi4wZjsKK3N0YXRpYyBjb25zdCBDR0Zs
b2F0IHNlY3Rpb25IZWFkZXJDb2xsYXBzZUJ1dHRvblNpemUgPSAxNC4wZjsKK3N0YXRpYyBjb25z
dCBDR0Zsb2F0IHNlY3Rpb25IZWFkZXJDb2xsYXBzZUJ1dHRvblRyYW5zaXRpb25EdXJhdGlvbiA9
IDAuMmY7CitzdGF0aWMgY29uc3QgQ0dGbG9hdCBzZWN0aW9uSGVhZGVyRm9udFNpemUgPSAyMi4w
ZjsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IHNlY3Rpb25IZWFkZXJIZWlnaHQgPSAzNi4wZjsKK3N0
YXRpYyBjb25zdCBDR0Zsb2F0IHNlY3Rpb25IZWFkZXJNYXJnaW4gPSAxNi4wZjsKK3N0YXRpYyBj
b25zdCBDR0Zsb2F0IHNlbGVjdFBvcG92ZXJMZW5ndGggPSAzMjAuMGY7CitzdGF0aWMgTlNTdHJp
bmcgKm9wdGlvbkNlbGxSZXVzZUlkZW50aWZpZXIgPSBAIldLU2VsZWN0UGlja2VyVGFibGVWaWV3
Q2VsbCI7CisKK0BpbnRlcmZhY2UgV0tTZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250cm9sbGVyIDog
VUlUYWJsZVZpZXdDb250cm9sbGVyCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1NlbGVjdFBp
Y2tlclRhYmxlVmlld0NvbnRyb2xsZXIgeworICAgIF9fd2VhayBXS0NvbnRlbnRWaWV3ICpfY29u
dGVudFZpZXc7CisKKyAgICBOU0ludGVnZXIgX251bWJlck9mU2VjdGlvbnM7CisgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZVNldDxOU051bWJlciAqPj4gX2NvbGxhcHNlZFNlY3Rpb25zOworCisgICAg
UmV0YWluUHRyPFVJQmFyQnV0dG9uSXRlbT4gX3ByZXZpb3VzQnV0dG9uOworICAgIFJldGFpblB0
cjxVSUJhckJ1dHRvbkl0ZW0+IF9uZXh0QnV0dG9uOworfQorCistIChpZClpbml0V2l0aFZpZXc6
KFdLQ29udGVudFZpZXcgKil2aWV3Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0
aFN0eWxlOlVJVGFibGVWaWV3U3R5bGVJbnNldEdyb3VwZWRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIF9jb250ZW50VmlldyA9IHZpZXc7CisKKyAgICBfcHJldmlvdXNCdXR0b24gPSBh
ZG9wdE5TKFtbVUlCYXJCdXR0b25JdGVtIGFsbG9jXSBpbml0V2l0aEltYWdlOltVSUltYWdlIHN5
c3RlbUltYWdlTmFtZWQ6QCJjaGV2cm9uLnVwIl0gc3R5bGU6VUlCYXJCdXR0b25JdGVtU3R5bGVQ
bGFpbiB0YXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKHByZXZpb3VzOildKTsKKyAgICBSZXRh
aW5QdHI8VUlCYXJCdXR0b25JdGVtPiBuZXh0UHJldmlvdXNTcGFjZXIgPSBhZG9wdE5TKFtbVUlC
YXJCdXR0b25JdGVtIGFsbG9jXSBpbml0V2l0aEJhckJ1dHRvblN5c3RlbUl0ZW06VUlCYXJCdXR0
b25TeXN0ZW1JdGVtRml4ZWRTcGFjZSB0YXJnZXQ6bmlsIGFjdGlvbjpOVUxMXSk7CisgICAgW25l
eHRQcmV2aW91c1NwYWNlciBzZXRXaWR0aDpuZXh0UHJldmlvdXNTcGFjZXJXaWR0aF07CisgICAg
X25leHRCdXR0b24gPSBhZG9wdE5TKFtbVUlCYXJCdXR0b25JdGVtIGFsbG9jXSBpbml0V2l0aElt
YWdlOltVSUltYWdlIHN5c3RlbUltYWdlTmFtZWQ6QCJjaGV2cm9uLmRvd24iXSBzdHlsZTpVSUJh
ckJ1dHRvbkl0ZW1TdHlsZVBsYWluIHRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IobmV4dDop
XSk7CisgICAgUmV0YWluUHRyPFVJQmFyQnV0dG9uSXRlbT4gY2xvc2VCdXR0b24gPSBhZG9wdE5T
KFtbVUlCYXJCdXR0b25JdGVtIGFsbG9jXSBpbml0V2l0aEJhckJ1dHRvblN5c3RlbUl0ZW06VUlC
YXJCdXR0b25TeXN0ZW1JdGVtQ2xvc2UgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihjbG9z
ZTopXSk7CisKKyAgICBzZWxmLm5hdmlnYXRpb25JdGVtLmxlZnRCYXJCdXR0b25JdGVtcyA9IEBb
IF9wcmV2aW91c0J1dHRvbi5nZXQoKSwgbmV4dFByZXZpb3VzU3BhY2VyLmdldCgpLCBfbmV4dEJ1
dHRvbi5nZXQoKSBdOworICAgIHNlbGYubmF2aWdhdGlvbkl0ZW0ucmlnaHRCYXJCdXR0b25JdGVt
ID0gY2xvc2VCdXR0b24uZ2V0KCk7CisKKyAgICBfY29sbGFwc2VkU2VjdGlvbnMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0XSk7CisKKyAgICBfbnVtYmVyT2ZTZWN0aW9ucyA9
IDE7CisgICAgZm9yIChjb25zdCBPcHRpb25JdGVtJiBvcHRpb24gOiBfY29udGVudFZpZXcuZm9j
dXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb24uaXNHcm91cCkK
KyAgICAgICAgICAgIF9udW1iZXJPZlNlY3Rpb25zKys7CisgICAgfQorCisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpdmlld1dpbGxBcHBlYXI6KEJPT0wpYW5pbWF0ZWQKK3sKKyAgICBb
c3VwZXIgdmlld1dpbGxBcHBlYXI6YW5pbWF0ZWRdOworCisgICAgW19wcmV2aW91c0J1dHRvbiBz
ZXRFbmFibGVkOl9jb250ZW50Vmlldy5mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmhhc1ByZXZp
b3VzTm9kZV07CisgICAgW19uZXh0QnV0dG9uIHNldEVuYWJsZWQ6X2NvbnRlbnRWaWV3LmZvY3Vz
ZWRFbGVtZW50SW5mb3JtYXRpb24uaGFzTmV4dE5vZGVdOworfQorCistIChOU0ludGVnZXIpbnVt
YmVyT2ZSb3dzSW5Hcm91cDooTlNJbnRlZ2VyKWdyb3VwSUQKK3sKKyAgICBOU0ludGVnZXIgcm93
Q291bnQgPSAwOworICAgIGZvciAoY29uc3QgT3B0aW9uSXRlbSYgb3B0aW9uIDogX2NvbnRlbnRW
aWV3LmZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9ucykgeworICAgICAgICBpZiAob3B0aW9uLmlz
R3JvdXApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAob3B0aW9uLnBhcmVu
dEdyb3VwSUQgPT0gZ3JvdXBJRCkKKyAgICAgICAgICAgIHJvd0NvdW50Kys7CisKKyAgICAgICAg
aWYgKG9wdGlvbi5wYXJlbnRHcm91cElEID4gZ3JvdXBJRCkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiByb3dDb3VudDsKK30KKworLSAoTlNJbnRlZ2VyKW51bWJlck9m
U2VjdGlvbnNJblRhYmxlVmlldzooVUlUYWJsZVZpZXcgKil0YWJsZVZpZXcKK3sKKyAgICByZXR1
cm4gX251bWJlck9mU2VjdGlvbnM7Cit9CisKKy0gKE5TSW50ZWdlcil0YWJsZVZpZXc6KFVJVGFi
bGVWaWV3ICopdGFibGVWaWV3IG51bWJlck9mUm93c0luU2VjdGlvbjooTlNJbnRlZ2VyKXNlY3Rp
b24KK3sKKyAgICBpZiAoX2NvbnRlbnRWaWV3LmZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9ucy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKFtfY29sbGFwc2VkU2VjdGlv
bnMgY29udGFpbnNPYmplY3Q6QChzZWN0aW9uKV0pCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIFtzZWxmIG51bWJlck9mUm93c0luR3JvdXA6c2VjdGlvbl07Cit9CisKKy0gKENHRmxv
YXQpdGFibGVWaWV3OihVSVRhYmxlVmlldyAqKXRhYmxlVmlldyBoZWlnaHRGb3JIZWFkZXJJblNl
Y3Rpb246KE5TSW50ZWdlcilzZWN0aW9uCit7CisgICAgaWYgKCFzZWN0aW9uKQorICAgICAgICBy
ZXR1cm4gdGFibGVWaWV3LmxheW91dE1hcmdpbnMubGVmdDsKKworICAgIHJldHVybiBzZWN0aW9u
SGVhZGVySGVpZ2h0OworfQorCistIChDR0Zsb2F0KXRhYmxlVmlldzooVUlUYWJsZVZpZXcgKil0
YWJsZVZpZXcgaGVpZ2h0Rm9yRm9vdGVySW5TZWN0aW9uOihOU0ludGVnZXIpc2VjdGlvbgorewor
ICAgIGlmICghc2VjdGlvbiAmJiAhW3NlbGYgbnVtYmVyT2ZSb3dzSW5Hcm91cDowXSAmJiBfbnVt
YmVyT2ZTZWN0aW9ucyA+IDEpCisgICAgICAgIHJldHVybiBDR0ZMT0FUX01JTjsKKworICAgIHJl
dHVybiB0YWJsZVZpZXcubGF5b3V0TWFyZ2lucy5sZWZ0OworfQorCistIChOU1N0cmluZyAqKXRh
YmxlVmlldzooVUlUYWJsZVZpZXcgKil0YWJsZVZpZXcgdGl0bGVGb3JIZWFkZXJJblNlY3Rpb246
KE5TSW50ZWdlcilzZWN0aW9uCit7CisgICAgaWYgKCFzZWN0aW9uKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgTlNJbnRlZ2VyIGdyb3VwQ291bnQgPSAwOworICAgIGZvciAoY29uc3QgT3B0
aW9uSXRlbSYgb3B0aW9uIDogX2NvbnRlbnRWaWV3LmZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9u
cykgeworICAgICAgICBpZiAoIW9wdGlvbi5pc0dyb3VwKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgZ3JvdXBDb3VudCsrOworICAgICAgICBpZiAob3B0aW9uLmlzR3JvdXAgJiYg
Z3JvdXBDb3VudCA9PSBzZWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi50ZXh0Owor
ICAgIH0KKworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKFVJVmlldyAqKXRhYmxlVmlldzooVUlU
YWJsZVZpZXcgKil0YWJsZVZpZXcgdmlld0ZvckZvb3RlckluU2VjdGlvbjooTlNJbnRlZ2VyKXNl
Y3Rpb24KK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChVSVZpZXcgKil0YWJsZVZpZXc6KFVJ
VGFibGVWaWV3ICopdGFibGVWaWV3IHZpZXdGb3JIZWFkZXJJblNlY3Rpb246KE5TSW50ZWdlcilz
ZWN0aW9uCit7CisgICAgaWYgKCFzZWN0aW9uKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
VUlWaWV3ICpzZWN0aW9uVmlldyA9IFtbW1VJVmlldyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OworCisgICAgVUlMYWJlbCAqc2VjdGlvbkxhYmVsID0gW1tbVUlMYWJlbCBhbGxvY10gaW5pdF0g
YXV0b3JlbGVhc2VdOworICAgIHNlY3Rpb25MYWJlbC50ZXh0ID0gW3NlbGYgdGFibGVWaWV3OnRh
YmxlVmlldyB0aXRsZUZvckhlYWRlckluU2VjdGlvbjpzZWN0aW9uXTsKKyAgICBzZWN0aW9uTGFi
ZWwudGV4dENvbG9yID0gVUlDb2xvci5ibGFja0NvbG9yOworICAgIHNlY3Rpb25MYWJlbC5mb250
ID0gW1VJRm9udCBib2xkU3lzdGVtRm9udE9mU2l6ZTpzZWN0aW9uSGVhZGVyRm9udFNpemVdOwor
ICAgIHNlY3Rpb25MYWJlbC5hZGp1c3RzRm9udFNpemVUb0ZpdFdpZHRoID0gTk87CisgICAgc2Vj
dGlvbkxhYmVsLmxpbmVCcmVha01vZGUgPSBOU0xpbmVCcmVha0J5VHJ1bmNhdGluZ1RhaWw7Cisg
ICAgW3NlY3Rpb25WaWV3IGFkZFN1YnZpZXc6c2VjdGlvbkxhYmVsXTsKKworICAgIHNlY3Rpb25M
YWJlbC50cmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50cyA9IE5POworICAg
IFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50czpAWworICAgICAgICBbc2Vj
dGlvbkxhYmVsLmxlYWRpbmdBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6c2VjdGlvblZp
ZXcubGVhZGluZ0FuY2hvciBjb25zdGFudDpzZWN0aW9uSGVhZGVyTWFyZ2luXSwKKyAgICAgICAg
W3NlY3Rpb25MYWJlbC50b3BBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6c2VjdGlvblZp
ZXcudG9wQW5jaG9yIGNvbnN0YW50OjBdLAorICAgIF1dOworCisgICAgVUlCdXR0b24gKmNvbGxh
cHNlQnV0dG9uID0gW1tbVUlCdXR0b24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBj
b2xsYXBzZUJ1dHRvbi50YWcgPSBzZWN0aW9uOworICAgIFtjb2xsYXBzZUJ1dHRvbiBzZXRJbWFn
ZTpbVUlJbWFnZSBzeXN0ZW1JbWFnZU5hbWVkOkAiY2hldnJvbi5kb3duIiB3aXRoQ29uZmlndXJh
dGlvbjpbVUlJbWFnZVN5bWJvbENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbldpdGhQb2ludFNp
emU6c2VjdGlvbkhlYWRlckNvbGxhcHNlQnV0dG9uU2l6ZSB3ZWlnaHQ6VUlJbWFnZVN5bWJvbFdl
aWdodFNlbWlib2xkXV0gZm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdOworICAgIFtjb2xs
YXBzZUJ1dHRvbiBhZGRUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKGNvbGxhcHNlU2VjdGlv
bjopIGZvckNvbnRyb2xFdmVudHM6VUlDb250cm9sRXZlbnRUb3VjaFVwSW5zaWRlXTsKKyAgICBb
c2VjdGlvblZpZXcgYWRkU3Vidmlldzpjb2xsYXBzZUJ1dHRvbl07CisKKyAgICBpZiAoW19jb2xs
YXBzZWRTZWN0aW9ucyBjb250YWluc09iamVjdDpAKHNlY3Rpb24pXSkKKyAgICAgICAgY29sbGFw
c2VCdXR0b24udHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlUm90YXRpb24oLU1fUEkg
LyAyKTsKKworICAgIGNvbGxhcHNlQnV0dG9uLnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50
b0NvbnN0cmFpbnRzID0gTk87CisgICAgW05TTGF5b3V0Q29uc3RyYWludCBhY3RpdmF0ZUNvbnN0
cmFpbnRzOkBbCisgICAgICAgIFtjb2xsYXBzZUJ1dHRvbi50cmFpbGluZ0FuY2hvciBjb25zdHJh
aW50RXF1YWxUb0FuY2hvcjpzZWN0aW9uVmlldy50cmFpbGluZ0FuY2hvciBjb25zdGFudDotc2Vj
dGlvbkhlYWRlck1hcmdpbl0sCisgICAgICAgIFtjb2xsYXBzZUJ1dHRvbi50b3BBbmNob3IgY29u
c3RyYWludEVxdWFsVG9BbmNob3I6c2VjdGlvbkxhYmVsLnRvcEFuY2hvciBjb25zdGFudDowXSwK
KyAgICAgICAgW2NvbGxhcHNlQnV0dG9uLmJvdHRvbUFuY2hvciBjb25zdHJhaW50RXF1YWxUb0Fu
Y2hvcjpzZWN0aW9uTGFiZWwuYm90dG9tQW5jaG9yIGNvbnN0YW50OjBdLAorICAgIF1dOworCisg
ICAgcmV0dXJuIHNlY3Rpb25WaWV3OworfQorCistICh2b2lkKWNvbGxhcHNlU2VjdGlvbjooVUlC
dXR0b24gKilidXR0b24KK3sKKyAgICBOU0ludGVnZXIgc2VjdGlvbiA9IGJ1dHRvbi50YWc7Cisg
ICAgTlNJbnRlZ2VyIHJvd0NvdW50ID0gW3NlbGYgbnVtYmVyT2ZSb3dzSW5Hcm91cDpzZWN0aW9u
XTsKKworICAgIE5TTXV0YWJsZUFycmF5ICppbmRleFBhdGhzID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5V2l0aENhcGFjaXR5OnJvd0NvdW50XTsKKyAgICBmb3IgKE5TSW50ZWdlciBpID0gMDsgaSA8
IHJvd0NvdW50OyBpKyspCisgICAgICAgIFtpbmRleFBhdGhzIGFkZE9iamVjdDpbTlNJbmRleFBh
dGggaW5kZXhQYXRoRm9yUm93OmkgaW5TZWN0aW9uOnNlY3Rpb25dXTsKKworICAgIE5TTnVtYmVy
ICpvYmplY3QgPSBAKHNlY3Rpb24pOworICAgIGlmIChbX2NvbGxhcHNlZFNlY3Rpb25zIGNvbnRh
aW5zT2JqZWN0Om9iamVjdF0pIHsKKyAgICAgICAgW19jb2xsYXBzZWRTZWN0aW9ucyByZW1vdmVP
YmplY3Q6b2JqZWN0XTsKKyAgICAgICAgW3NlbGYudGFibGVWaWV3IGluc2VydFJvd3NBdEluZGV4
UGF0aHM6aW5kZXhQYXRocyB3aXRoUm93QW5pbWF0aW9uOlVJVGFibGVWaWV3Um93QW5pbWF0aW9u
RmFkZV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgW19jb2xsYXBzZWRTZWN0aW9ucyBhZGRPYmpl
Y3Q6b2JqZWN0XTsKKyAgICAgICAgW3NlbGYudGFibGVWaWV3IGRlbGV0ZVJvd3NBdEluZGV4UGF0
aHM6aW5kZXhQYXRocyB3aXRoUm93QW5pbWF0aW9uOlVJVGFibGVWaWV3Um93QW5pbWF0aW9uRmFk
ZV07CisgICAgfQorCisgICAgW1VJVmlldyBhbmltYXRlV2l0aER1cmF0aW9uOnNlY3Rpb25IZWFk
ZXJDb2xsYXBzZUJ1dHRvblRyYW5zaXRpb25EdXJhdGlvbiBhbmltYXRpb25zOl57CisgICAgICAg
IGlmIChDR0FmZmluZVRyYW5zZm9ybUVxdWFsVG9UcmFuc2Zvcm0oYnV0dG9uLnRyYW5zZm9ybSwg
Q0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eSkpCisgICAgICAgICAgICBidXR0b24udHJhbnNmb3Jt
ID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlUm90YXRpb24oLU1fUEkgLyAyKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgYnV0dG9uLnRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRp
dHk7CisgICAgfV07Cit9CisKKy0gKE5TSW50ZWdlcilmaW5kSXRlbUluZGV4QXQ6KE5TSW5kZXhQ
YXRoICopaW5kZXhQYXRoCit7CisgICAgaW50IG9wdGlvbkluZGV4ID0gMDsKKyAgICBpbnQgcm93
SW5kZXggPSAwOworCisgICAgZm9yIChjb25zdCBPcHRpb25JdGVtJiBvcHRpb24gOiBfY29udGVu
dFZpZXcuZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zKSB7CisgICAgICAgIGlmIChvcHRpb24u
aXNHcm91cCkgeworICAgICAgICAgICAgcm93SW5kZXggPSAwOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAob3B0aW9uLnBhcmVudEdyb3VwSUQgPT0gaW5k
ZXhQYXRoLnNlY3Rpb24gJiYgcm93SW5kZXggPT0gaW5kZXhQYXRoLnJvdykKKyAgICAgICAgICAg
IHJldHVybiBvcHRpb25JbmRleDsKKworICAgICAgICBvcHRpb25JbmRleCsrOworICAgICAgICBy
b3dJbmRleCsrOworICAgIH0KKworICAgIHJldHVybiBOU05vdEZvdW5kOworfQorCistIChPcHRp
b25JdGVtICopb3B0aW9uSXRlbUF0SW5kZXhQYXRoOihOU0luZGV4UGF0aCAqKWluZGV4UGF0aAor
eworICAgIE5TSW50ZWdlciBpbmRleCA9IDA7CisgICAgZm9yIChPcHRpb25JdGVtJiBvcHRpb24g
OiBfY29udGVudFZpZXcuZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25zKSB7CisgICAgICAgIGlm
IChvcHRpb24uaXNHcm91cCB8fCBvcHRpb24ucGFyZW50R3JvdXBJRCAhPSBpbmRleFBhdGguc2Vj
dGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChpbmRleCA9PSBpbmRl
eFBhdGgucm93KQorICAgICAgICAgICAgcmV0dXJuICZvcHRpb247CisKKyAgICAgICAgaW5kZXgr
KzsKKyAgICB9CisKKyAgICByZXR1cm4gbmlsOworfQorCistIChVSVRhYmxlVmlld0NlbGwgKil0
YWJsZVZpZXc6KFVJVGFibGVWaWV3ICopdGFibGVWaWV3IGNlbGxGb3JSb3dBdEluZGV4UGF0aDoo
TlNJbmRleFBhdGggKilpbmRleFBhdGgKK3sKKyAgICBVSVRhYmxlVmlld0NlbGwgKmNlbGwgPSBb
dGFibGVWaWV3IGRlcXVldWVSZXVzYWJsZUNlbGxXaXRoSWRlbnRpZmllcjpvcHRpb25DZWxsUmV1
c2VJZGVudGlmaWVyXTsKKyAgICBpZiAoIWNlbGwpCisgICAgICAgIGNlbGwgPSBbW1tVSVRhYmxl
Vmlld0NlbGwgYWxsb2NdIGluaXRXaXRoU3R5bGU6VUlUYWJsZVZpZXdDZWxsU3R5bGVEZWZhdWx0
IHJldXNlSWRlbnRpZmllcjpvcHRpb25DZWxsUmV1c2VJZGVudGlmaWVyXSBhdXRvcmVsZWFzZV07
CisKKyAgICBpZiAoX2NvbnRlbnRWaWV3LmZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9ucy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgY2VsbC50ZXh0TGFiZWwuZW5hYmxlZCA9IE5POworICAgICAgICBj
ZWxsLnRleHRMYWJlbC50ZXh0ID0gV0VCX1VJX1NUUklOR19LRVkoIk5vIE9wdGlvbnMiLCAiTm8g
T3B0aW9ucyBTZWxlY3QgUG9wb3ZlciIsICJFbXB0eSBzZWxlY3QgbGlzdCIpOworICAgICAgICBj
ZWxsLnVzZXJJbnRlcmFjdGlvbkVuYWJsZWQgPSBOTzsKKyAgICAgICAgY2VsbC5pbWFnZVZpZXcu
aW1hZ2UgPSBuaWw7CisgICAgICAgIHJldHVybiBjZWxsOworICAgIH0KKworICAgIE9wdGlvbkl0
ZW0gKm9wdGlvbiA9IFtzZWxmIG9wdGlvbkl0ZW1BdEluZGV4UGF0aDppbmRleFBhdGhdOworICAg
IEFTU0VSVChvcHRpb24pOworCisgICAgY2VsbC50ZXh0TGFiZWwudGV4dCA9IG9wdGlvbi0+dGV4
dDsKKyAgICBjZWxsLnRleHRMYWJlbC5lbmFibGVkID0gIW9wdGlvbi0+ZGlzYWJsZWQ7CisKKyAg
ICBpZiAob3B0aW9uLT5kaXNhYmxlZCkKKyAgICAgICAgY2VsbC51c2VySW50ZXJhY3Rpb25FbmFi
bGVkID0gTk87CisgICAgZWxzZQorICAgICAgICBjZWxsLnVzZXJJbnRlcmFjdGlvbkVuYWJsZWQg
PSBZRVM7CisKKyAgICBpZiAob3B0aW9uLT5pc1NlbGVjdGVkKQorICAgICAgICBjZWxsLmltYWdl
Vmlldy5pbWFnZSA9IFtVSUltYWdlIHN5c3RlbUltYWdlTmFtZWQ6QCJjaGVja21hcmsuY2lyY2xl
LmZpbGwiXTsKKyAgICBlbHNlIGlmIChvcHRpb24tPmRpc2FibGVkKQorICAgICAgICBjZWxsLmlt
YWdlVmlldy5pbWFnZSA9IFtbVUlJbWFnZSBzeXN0ZW1JbWFnZU5hbWVkOkAiY2lyY2xlIl0gaW1h
Z2VXaXRoVGludENvbG9yOlVJQ29sb3IucXVhdGVybmFyeUxhYmVsQ29sb3IgcmVuZGVyaW5nTW9k
ZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFsd2F5c09yaWdpbmFsXTsKKyAgICBlbHNlCisgICAgICAg
IGNlbGwuaW1hZ2VWaWV3LmltYWdlID0gW1tVSUltYWdlIHN5c3RlbUltYWdlTmFtZWQ6QCJjaXJj
bGUiXSBpbWFnZVdpdGhUaW50Q29sb3I6VUlDb2xvci50ZXJ0aWFyeUxhYmVsQ29sb3IgcmVuZGVy
aW5nTW9kZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFsd2F5c09yaWdpbmFsXTsKKworICAgIHJldHVy
biBjZWxsOworfQorCistICh2b2lkKXRhYmxlVmlldzooVUlUYWJsZVZpZXcgKil0YWJsZVZpZXcg
ZGlkU2VsZWN0Um93QXRJbmRleFBhdGg6KE5TSW5kZXhQYXRoICopaW5kZXhQYXRoCit7CisgICAg
W3RhYmxlVmlldyBkZXNlbGVjdFJvd0F0SW5kZXhQYXRoOlt0YWJsZVZpZXcgaW5kZXhQYXRoRm9y
U2VsZWN0ZWRSb3ddIGFuaW1hdGVkOk5PXTsKKworICAgIFVJVGFibGVWaWV3Q2VsbCAqY2VsbCA9
IFt0YWJsZVZpZXcgY2VsbEZvclJvd0F0SW5kZXhQYXRoOmluZGV4UGF0aF07CisgICAgaWYgKCFj
ZWxsLnRleHRMYWJlbC5lbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBPcHRpb25JdGVt
ICpvcHRpb24gPSBbc2VsZiBvcHRpb25JdGVtQXRJbmRleFBhdGg6aW5kZXhQYXRoXTsKKyAgICBB
U1NFUlQob3B0aW9uKTsKKworICAgIGlmICghb3B0aW9uLT5pc1NlbGVjdGVkKQorICAgICAgICBj
ZWxsLmltYWdlVmlldy5pbWFnZSA9IFtVSUltYWdlIHN5c3RlbUltYWdlTmFtZWQ6QCJjaGVja21h
cmsuY2lyY2xlLmZpbGwiXTsKKyAgICBlbHNlCisgICAgICAgIGNlbGwuaW1hZ2VWaWV3LmltYWdl
ID0gW1tVSUltYWdlIHN5c3RlbUltYWdlTmFtZWQ6QCJjaXJjbGUiXSBpbWFnZVdpdGhUaW50Q29s
b3I6VUlDb2xvci50ZXJ0aWFyeUxhYmVsQ29sb3IgcmVuZGVyaW5nTW9kZTpVSUltYWdlUmVuZGVy
aW5nTW9kZUFsd2F5c09yaWdpbmFsXTsKKworICAgIFtfY29udGVudFZpZXcgcGFnZV0tPnNldEZv
Y3VzZWRFbGVtZW50U2VsZWN0ZWRJbmRleChbc2VsZiBmaW5kSXRlbUluZGV4QXQ6aW5kZXhQYXRo
XSwgdHJ1ZSk7CisgICAgb3B0aW9uLT5pc1NlbGVjdGVkID0gIW9wdGlvbi0+aXNTZWxlY3RlZDsK
K30KKworLSAodm9pZCluZXh0OihpZClzZW5kZXIKK3sKKyAgICBbc2VsZiBkaXNtaXNzVmlld0Nv
bnRyb2xsZXJBbmltYXRlZDpZRVMgY29tcGxldGlvbjpeeworICAgICAgICBbX2NvbnRlbnRWaWV3
IGFjY2Vzc29yeVRhYjpZRVNdOworICAgIH1dOworfQorCistICh2b2lkKXByZXZpb3VzOihpZClz
ZW5kZXIKK3sKKyAgICBbc2VsZiBkaXNtaXNzVmlld0NvbnRyb2xsZXJBbmltYXRlZDpZRVMgY29t
cGxldGlvbjpeeworICAgICAgICBbX2NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpOT107CisgICAg
fV07Cit9CisKKy0gKHZvaWQpY2xvc2U6KGlkKXNlbmRlcgoreworICAgIFtzZWxmIGRpc21pc3NW
aWV3Q29udHJvbGxlckFuaW1hdGVkOllFUyBjb21wbGV0aW9uOl57CisgICAgICAgIFtfY29udGVu
dFZpZXcgYWNjZXNzb3J5RG9uZV07CisgICAgfV07Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBX
S1NlbGVjdE11bHRpcGxlUGlja2VyICgpIDxVSVBvcG92ZXJQcmVzZW50YXRpb25Db250cm9sbGVy
RGVsZWdhdGU+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1NlbGVjdE11bHRpcGxlUGlja2Vy
IHsKKyAgICBfX3dlYWsgV0tDb250ZW50VmlldyAqX3ZpZXc7CisKKyAgICBSZXRhaW5QdHI8VUlO
YXZpZ2F0aW9uQ29udHJvbGxlcj4gX25hdmlnYXRpb25Db250cm9sbGVyOworICAgIFJldGFpblB0
cjxXS1NlbGVjdFBpY2tlclRhYmxlVmlld0NvbnRyb2xsZXI+IF90YWJsZVZpZXdDb250cm9sbGVy
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmll
dworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgX3ZpZXcgPSB2aWV3OworICAgIF90YWJsZVZpZXdDb250cm9sbGVyID0gYWRvcHRO
UyhbW1dLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhWaWV3
Ol92aWV3XSk7CisgICAgX25hdmlnYXRpb25Db250cm9sbGVyID0gYWRvcHROUyhbW1VJTmF2aWdh
dGlvbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoUm9vdFZpZXdDb250cm9sbGVyOl90YWJsZVZp
ZXdDb250cm9sbGVyLmdldCgpXSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClj
b25maWd1cmVQcmVzZW50YXRpb24KK3sKKyAgICBpZiAoV2ViS2l0OjpjdXJyZW50VXNlckludGVy
ZmFjZUlkaW9tSXNQYWRPck1hYygpKSB7CisgICAgICAgIFtfbmF2aWdhdGlvbkNvbnRyb2xsZXIg
c2V0TW9kYWxQcmVzZW50YXRpb25TdHlsZTpVSU1vZGFsUHJlc2VudGF0aW9uUG9wb3Zlcl07Cisg
ICAgICAgIFtfbmF2aWdhdGlvbkNvbnRyb2xsZXIgc2V0TmF2aWdhdGlvbkJhckhpZGRlbjpZRVNd
OworICAgICAgICBbX3RhYmxlVmlld0NvbnRyb2xsZXIgc2V0UHJlZmVycmVkQ29udGVudFNpemU6
Q0dTaXplTWFrZShzZWxlY3RQb3BvdmVyTGVuZ3RoLCBzZWxlY3RQb3BvdmVyTGVuZ3RoKV07CisK
KyAgICAgICAgVUlQb3BvdmVyUHJlc2VudGF0aW9uQ29udHJvbGxlciAqcHJlc2VudGF0aW9uQ29u
dHJvbGxlciA9IFtfbmF2aWdhdGlvbkNvbnRyb2xsZXIgcG9wb3ZlclByZXNlbnRhdGlvbkNvbnRy
b2xsZXJdOworICAgICAgICBwcmVzZW50YXRpb25Db250cm9sbGVyLmRlbGVnYXRlID0gc2VsZjsK
KyAgICAgICAgcHJlc2VudGF0aW9uQ29udHJvbGxlci5zb3VyY2VWaWV3ID0gX3ZpZXc7CisgICAg
ICAgIHByZXNlbnRhdGlvbkNvbnRyb2xsZXIuc291cmNlUmVjdCA9IENHUmVjdEludGVncmFsKF92
aWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaW50ZXJhY3Rpb25SZWN0KTsKKyAgICB9IGVs
c2UgeworICAgICAgICBbW19uYXZpZ2F0aW9uQ29udHJvbGxlciBuYXZpZ2F0aW9uQmFyXSBzZXRC
YXJUaW50Q29sb3I6VUlDb2xvci5zeXN0ZW1Hcm91cGVkQmFja2dyb3VuZENvbG9yXTsKKworICAg
ICAgICBVSVByZXNlbnRhdGlvbkNvbnRyb2xsZXIgKnByZXNlbnRhdGlvbkNvbnRyb2xsZXIgPSBb
X25hdmlnYXRpb25Db250cm9sbGVyIHByZXNlbnRhdGlvbkNvbnRyb2xsZXJdOworICAgICAgICBw
cmVzZW50YXRpb25Db250cm9sbGVyLmRlbGVnYXRlID0gc2VsZjsKKyAgICAgICAgaWYgKFtwcmVz
ZW50YXRpb25Db250cm9sbGVyIGlzS2luZE9mQ2xhc3M6W19VSVNoZWV0UHJlc2VudGF0aW9uQ29u
dHJvbGxlciBjbGFzc11dKSB7CisgICAgICAgICAgICBfVUlTaGVldFByZXNlbnRhdGlvbkNvbnRy
b2xsZXIgKnNoZWV0UHJlc2VudGF0aW9uQ29udHJvbGxlciA9IChfVUlTaGVldFByZXNlbnRhdGlv
bkNvbnRyb2xsZXIgKilwcmVzZW50YXRpb25Db250cm9sbGVyOworICAgICAgICAgICAgc2hlZXRQ
cmVzZW50YXRpb25Db250cm9sbGVyLl9kZXRlbnRzID0gQFtfVUlTaGVldERldGVudC5fbWVkaXVt
RGV0ZW50LCBfVUlTaGVldERldGVudC5fbGFyZ2VEZXRlbnRdOworICAgICAgICAgICAgc2hlZXRQ
cmVzZW50YXRpb25Db250cm9sbGVyLl93aWR0aEZvbGxvd3NQcmVmZXJyZWRDb250ZW50U2l6ZVdo
ZW5Cb3R0b21BdHRhY2hlZCA9IFlFUzsKKyAgICAgICAgICAgIHNoZWV0UHJlc2VudGF0aW9uQ29u
dHJvbGxlci5fd2FudHNCb3R0b21BdHRhY2hlZEluQ29tcGFjdEhlaWdodCA9IFlFUzsKKyAgICAg
ICAgfQorICAgIH0KK30KKworI3ByYWdtYSBtYXJrIFdLRm9ybUNvbnRyb2wKKworLSAoVUlWaWV3
ICopY29udHJvbFZpZXcKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKWNvbnRyb2xC
ZWdpbkVkaXRpbmcKK3sKKyAgICBbX3ZpZXcgc3RhcnRSZWxpbnF1aXNoaW5nRmlyc3RSZXNwb25k
ZXJUb0ZvY3VzZWRFbGVtZW50XTsKKworICAgIFtzZWxmIGNvbmZpZ3VyZVByZXNlbnRhdGlvbl07
CisgICAgVUlWaWV3Q29udHJvbGxlciAqcHJlc2VudGluZ1ZpZXdDb250cm9sbGVyID0gW1VJVmll
d0NvbnRyb2xsZXIgX3ZpZXdDb250cm9sbGVyRm9yRnVsbFNjcmVlblByZXNlbnRhdGlvbkZyb21W
aWV3Ol92aWV3XTsKKyAgICBbcHJlc2VudGluZ1ZpZXdDb250cm9sbGVyIHByZXNlbnRWaWV3Q29u
dHJvbGxlcjpfbmF2aWdhdGlvbkNvbnRyb2xsZXIuZ2V0KCkgYW5pbWF0ZWQ6WUVTIGNvbXBsZXRp
b246bmlsXTsKK30KKworLSAodm9pZCljb250cm9sRW5kRWRpdGluZworeworICAgIFtfdmlldyBz
dG9wUmVsaW5xdWlzaGluZ0ZpcnN0UmVzcG9uZGVyVG9Gb2N1c2VkRWxlbWVudF07CisgICAgW190
YWJsZVZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVkOk5PIGNvbXBs
ZXRpb246bmlsXTsKK30KKworI3ByYWdtYSBtYXJrIFVJUG9wb3ZlclByZXNlbnRhdGlvbkNvbnRy
b2xsZXJEZWxlZ2F0ZQorCistICh2b2lkKXByZXNlbnRhdGlvbkNvbnRyb2xsZXJEaWREaXNtaXNz
OihVSVByZXNlbnRhdGlvbkNvbnRyb2xsZXIgKilwcmVzZW50YXRpb25Db250cm9sbGVyCit7Cisg
ICAgW192aWV3IGFjY2Vzc29yeURvbmVdOworfQorCisjcHJhZ21hIG1hcmsgV0tUZXN0aW5nCisK
Ky0gKE5TSW5kZXhQYXRoICopX2luZGV4UGF0aEZvclJvdzooTlNJbnRlZ2VyKXJvd0luZGV4Cit7
CisgICAgTlNJbnRlZ2VyIGN1cnJlbnRTZWN0aW9uID0gMDsKKyAgICBOU0ludGVnZXIgY3VycmVu
dFJvdyA9IC0xOworICAgIE5TSW50ZWdlciB0b3RhbFJvd3MgPSAtMTsKKworICAgIGZvciAoY29u
c3QgT3B0aW9uSXRlbSYgb3B0aW9uIDogX3ZpZXcuZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25z
KSB7CisgICAgICAgIGlmIChvcHRpb24uaXNHcm91cCkgeworICAgICAgICAgICAgY3VycmVudFNl
Y3Rpb24rKzsKKyAgICAgICAgICAgIGN1cnJlbnRSb3cgPSAtMTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudFJvdysrOworICAgICAgICB0b3RhbFJv
d3MrKzsKKyAgICAgICAgaWYgKHRvdGFsUm93cyA9PSByb3dJbmRleCkKKyAgICAgICAgICAgIHJl
dHVybiBbTlNJbmRleFBhdGggaW5kZXhQYXRoRm9yUm93OmN1cnJlbnRSb3cgaW5TZWN0aW9uOmN1
cnJlbnRTZWN0aW9uXTsKKyAgICB9CisKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKXNl
bGVjdFJvdzooTlNJbnRlZ2VyKXJvd0luZGV4IGluQ29tcG9uZW50OihOU0ludGVnZXIpY29tcG9u
ZW50SW5kZXggZXh0ZW5kaW5nU2VsZWN0aW9uOihCT09MKWV4dGVuZGluZ1NlbGVjdGlvbgorewor
ICAgIE5TSW5kZXhQYXRoICppbmRleFBhdGggPSBbc2VsZiBfaW5kZXhQYXRoRm9yUm93OnJvd0lu
ZGV4XTsKKyAgICBpZiAoIWluZGV4UGF0aCkKKyAgICAgICAgcmV0dXJuOworCisgICAgW1tfdGFi
bGVWaWV3Q29udHJvbGxlciB0YWJsZVZpZXddIHNlbGVjdFJvd0F0SW5kZXhQYXRoOmluZGV4UGF0
aCBhbmltYXRlZDpOTyBzY3JvbGxQb3NpdGlvbjpVSVRhYmxlVmlld1Njcm9sbFBvc2l0aW9uTWlk
ZGxlXTsKKyAgICBbX3RhYmxlVmlld0NvbnRyb2xsZXIgdGFibGVWaWV3OltfdGFibGVWaWV3Q29u
dHJvbGxlciB0YWJsZVZpZXddIGRpZFNlbGVjdFJvd0F0SW5kZXhQYXRoOmluZGV4UGF0aF07Cit9
CisKK0BlbmQKKwogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMjYwYjI5
ZGIxMTI2NzdlOGIwZGMwM2IzZDE4YzgzZjE0NmVhOGY3Yy4uNTM5ODA3OWY5ZGNiYWEzYzY2OTMy
NTk3MTViOWE0OWQ3YmI1MWI2ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTAyLTA5ICBB
ZGl0eWEgS2VlcnRoaSAgPGFrZWVydGhpQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXVtGQ1Jd
IEFkZCBuZXcgcGlja2VyIGZvciA8c2VsZWN0IG11bHRpcGxlPiBlbGVtZW50cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxNjM2CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS83MjM5OTMzNz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhIHRlc3Qgd2hpY2ggc2VsZWN0cyBvcHRpb25zIHVzaW5n
IHRoZSBuZXcgbXVsdGktc2VsZWN0IHBpY2tlci4KKyAgICAgICAgR3JvdXBlZCwgdW5ncm91cGVk
LCBhbmQgZGlzYWJsZWQgb3B0aW9ucyBhcmUgYWxsIHRlc3RlZC4KKworICAgICAgICAqIGZhc3Qv
Zm9ybXMvaW9zL2Zvcm0tY29udHJvbC1yZWZyZXNoL3NlbGVjdC9zZWxlY3QtbXVsdGlwbGUtcGlj
a2VyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9pb3MvZm9ybS1j
b250cm9sLXJlZnJlc2gvc2VsZWN0L3NlbGVjdC1tdWx0aXBsZS1waWNrZXIuaHRtbDogQWRkZWQu
CisKIDIwMjEtMDItMDggIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpT1NdW0ZDUl0gVXNlIFVJQ29sb3JQaWNrZXJWaWV3Q29udHJvbGxlciBmb3IgY29s
b3IgaW5wdXRzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lvcy9mb3JtLWNv
bnRyb2wtcmVmcmVzaC9zZWxlY3Qvc2VsZWN0LW11bHRpcGxlLXBpY2tlci1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lvcy9mb3JtLWNvbnRyb2wtcmVmcmVzaC9zZWxlY3Qv
c2VsZWN0LW11bHRpcGxlLXBpY2tlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI2MWQxYmFl
MzE5MmYxMmNjYmY0NDNhMGUxZWNlNzRiMmQ4MWJhMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvaW9zL2Zvcm0tY29udHJvbC1yZWZyZXNoL3NlbGVjdC9zZWxlY3Qt
bXVsdGlwbGUtcGlja2VyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ3IEBACitUaGlzIHRlc3Qg
dmVyaWZpZXMgdGhhdCBpbnRlcmFjdGluZyB3aXRoIGEgbXVsdGktc2VsZWN0IHBpY2tlciBjb3Jy
ZWN0bHkgdXBkYXRlcyB0aGUgZWxlbWVudCdzIHZhbHVlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworVGVzdGluZyB1bmdyb3VwZWQgc2VsZWN0OgorCitFbGVtZW50IGluaXRpYWxs
eSBoYXMgbm8gc2VsZWN0ZWQgdmFsdWVzLgorUEFTUyBzZWxlY3RWYWx1ZXMgaXMgIiIKKworU2Vs
ZWN0IG9uZSBpdGVtLgorUEFTUyBzZWxlY3RWYWx1ZXMgaXMgIkFwcmlsIgorCitTZWxlY3QgbXVs
dGlwbGUgaXRlbXMuCitQQVNTIHNlbGVjdFZhbHVlcyBpcyAiQXByaWwsTWF5LEp1bmUiCisKK1Nl
bGVjdCBkaXNhYmxlZCBpdGVtLgorUEFTUyBzZWxlY3RWYWx1ZXMgaXMgIkFwcmlsLE1heSxKdW5l
IgorCitEZXNlbGVjdCBvbmUgaXRlbS4KK1BBU1Mgc2VsZWN0VmFsdWVzIGlzICJNYXksSnVuZSIK
KworRGVzZWxlY3QgbXVsdGlwbGUgaXRlbXMuCitQQVNTIHNlbGVjdFZhbHVlcyBpcyAiIgorCisK
K1Rlc3RpbmcgZ3JvdXBlZCBzZWxlY3Q6CisKK1NlbGVjdCBvbmUgaXRlbS4KK1BBU1MgZ3JvdXBl
ZFNlbGVjdFZhbHVlcyBpcyAiSnVseSIKKworU2VsZWN0IG11bHRpcGxlIGl0ZW1zLgorUEFTUyBn
cm91cGVkU2VsZWN0VmFsdWVzIGlzICJKdWx5LE9jdG9iZXIsTm92ZW1iZXIsRGVjZW1iZXIiCisK
K1NlbGVjdCBkaXNhYmxlZCBpdGVtLgorUEFTUyBncm91cGVkU2VsZWN0VmFsdWVzIGlzICJKdWx5
LE9jdG9iZXIsTm92ZW1iZXIsRGVjZW1iZXIiCisKK0Rlc2VsZWN0IG9uZSBpdGVtLgorUEFTUyBn
cm91cGVkU2VsZWN0VmFsdWVzIGlzICJKdWx5LE5vdmVtYmVyLERlY2VtYmVyIgorCitEZXNlbGVj
dCBtdWx0aXBsZSBpdGVtcy4KK1BBU1MgZ3JvdXBlZFNlbGVjdFZhbHVlcyBpcyAiRGVjZW1iZXIi
CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lvcy9mb3JtLWNvbnRyb2wtcmVmcmVz
aC9zZWxlY3Qvc2VsZWN0LW11bHRpcGxlLXBpY2tlci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9pb3MvZm9ybS1jb250cm9sLXJlZnJlc2gvc2VsZWN0L3NlbGVjdC1tdWx0aXBsZS1waWNr
ZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zZmVmZDk2NDc5ZmI3MmU5NGZkMDQ3NjBkN2YwZTRlNjE1NzAw
OWE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pb3MvZm9ybS1j
b250cm9sLXJlZnJlc2gvc2VsZWN0L3NlbGVjdC1tdWx0aXBsZS1waWNrZXIuaHRtbApAQCAtMCww
ICsxLDEzNiBAQAorPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgdXNl
RmxleGlibGVWaWV3cG9ydD10cnVlIElPU0Zvcm1Db250cm9sUmVmcmVzaEVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBj
b250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgdXNlci1zY2FsYWJs
ZT1ubyI+CisgICAgICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi8uLi9y
ZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3NjcmlwdD4KKyAgICA8L2hlYWQ+Cis8Ym9keT4KKzxz
ZWxlY3QgbXVsdGlwbGUgaWQ9InNlbGVjdCI+CisgICAgPG9wdGlvbj5KYW51YXJ5PC9vcHRpb24+
CisgICAgPG9wdGlvbiBkaXNhYmxlZD5GZWJydWFyeTwvb3B0aW9uPgorICAgIDxvcHRpb24+TWFy
Y2g8L29wdGlvbj4KKyAgICA8b3B0aW9uPkFwcmlsPC9vcHRpb24+CisgICAgPG9wdGlvbj5NYXk8
L29wdGlvbj4KKyAgICA8b3B0aW9uPkp1bmU8L29wdGlvbj4KKyAgICA8b3B0aW9uPkp1bHk8L29w
dGlvbj4KKyAgICA8b3B0aW9uPkF1Z3VzdDwvb3B0aW9uPgorICAgIDxvcHRpb24+U2VwdGVtYmVy
PC9vcHRpb24+CisgICAgPG9wdGlvbj5PY3RvYmVyPC9vcHRpb24+CisgICAgPG9wdGlvbj5Ob3Zl
bWJlcjwvb3B0aW9uPgorICAgIDxvcHRpb24+RGVjZW1iZXI8L29wdGlvbj4KKzwvc2VsZWN0Pgor
Cis8c2VsZWN0IG11bHRpcGxlIGlkPSJncm91cGVkIj4KKyAgICA8b3B0Z3JvdXAgbGFiZWw9Ildp
bnRlciI+CisgICAgICAgIDxvcHRpb24+SmFudWFyeTwvb3B0aW9uPgorICAgICAgICA8b3B0aW9u
PkZlYnJ1YXJ5PC9vcHRpb24+CisgICAgICAgIDxvcHRpb24+TWFyY2g8L29wdGlvbj4KKyAgICA8
L29wdGdyb3VwPgorICAgIDxvcHRncm91cCBsYWJlbD0iU3ByaW5nIj4KKyAgICAgICAgPG9wdGlv
bj5BcHJpbDwvb3B0aW9uPgorICAgICAgICA8b3B0aW9uPk1heTwvb3B0aW9uPgorICAgICAgICA8
b3B0aW9uPkp1bmU8L29wdGlvbj4KKyAgICA8L29wdGdyb3VwPgorICAgIDxvcHRncm91cCBsYWJl
bD0iU3VtbWVyIj4KKyAgICAgICAgPG9wdGlvbj5KdWx5PC9vcHRpb24+CisgICAgICAgIDxvcHRp
b24gZGlzYWJsZWQ+QXVndXN0PC9vcHRpb24+CisgICAgICAgIDxvcHRpb24+U2VwdGVtYmVyPC9v
cHRpb24+CisgICAgPC9vcHRncm91cD4KKyAgICA8b3B0Z3JvdXAgbGFiZWw9IkZhbGwiPgorICAg
ICAgICA8b3B0aW9uPk9jdG9iZXI8L29wdGlvbj4KKyAgICAgICAgPG9wdGlvbj5Ob3ZlbWJlcjwv
b3B0aW9uPgorICAgICAgICA8b3B0aW9uPkRlY2VtYmVyPC9vcHRpb24+CisgICAgPC9vcHRncm91
cD4KKzwvc2VsZWN0PgorPC9ib2R5PgorPHNjcmlwdD4KK2pzVGVzdElzQXN5bmMgPSB0cnVlOwor
CitmdW5jdGlvbiB2YWx1ZXNGb3JTZWxlY3RFbGVtZW50KGVsZW1lbnQpIHsKKyAgICByZXR1cm4g
QXJyYXkuZnJvbShlbGVtZW50LnNlbGVjdGVkT3B0aW9ucykubWFwKG8gPT4gby52YWx1ZSkudG9T
dHJpbmcoKTsKK30KKworYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGFzeW5jICgpID0+IHsKKyAg
ICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgaW50ZXJhY3Rpbmcgd2l0aCBh
IG11bHRpLXNlbGVjdCBwaWNrZXIgY29ycmVjdGx5IHVwZGF0ZXMgdGhlIGVsZW1lbnQncyB2YWx1
ZS4iKTsKKworICAgIGRlYnVnKCJUZXN0aW5nIHVuZ3JvdXBlZCBzZWxlY3Q6Iik7CisKKyAgICBk
ZWJ1ZygiXG5FbGVtZW50IGluaXRpYWxseSBoYXMgbm8gc2VsZWN0ZWQgdmFsdWVzLiIpOworICAg
IHNlbGVjdFZhbHVlcyA9IHZhbHVlc0ZvclNlbGVjdEVsZW1lbnQoc2VsZWN0KTsKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInNlbGVjdFZhbHVlcyIsICIiKTsKKworICAgIGRlYnVnKCJcblNl
bGVjdCBvbmUgaXRlbS4iKTsKKyAgICBhd2FpdCBVSUhlbHBlci5hY3RpdmF0ZUVsZW1lbnQoc2Vs
ZWN0KTsKKyAgICBhd2FpdCBVSUhlbHBlci5lbnN1cmVQcmVzZW50YXRpb25VcGRhdGUoKTsKKyAg
ICBhd2FpdCBVSUhlbHBlci5zZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93KDMpOworICAgIGF3
YWl0IFVJSGVscGVyLmVuc3VyZVByZXNlbnRhdGlvblVwZGF0ZSgpOworICAgIHNlbGVjdFZhbHVl
cyA9IHZhbHVlc0ZvclNlbGVjdEVsZW1lbnQoc2VsZWN0KTsKKyAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoInNlbGVjdFZhbHVlcyIsICJBcHJpbCIpOworCisgICAgZGVidWcoIlxuU2VsZWN0IG11
bHRpcGxlIGl0ZW1zLiIpCisgICAgYXdhaXQgVUlIZWxwZXIuc2VsZWN0Rm9ybUFjY2Vzc29yeVBp
Y2tlclJvdyg0KTsKKyAgICBhd2FpdCBVSUhlbHBlci5zZWxlY3RGb3JtQWNjZXNzb3J5UGlja2Vy
Um93KDUpOworICAgIGF3YWl0IFVJSGVscGVyLmVuc3VyZVByZXNlbnRhdGlvblVwZGF0ZSgpOwor
ICAgIHNlbGVjdFZhbHVlcyA9IHZhbHVlc0ZvclNlbGVjdEVsZW1lbnQoc2VsZWN0KTsKKyAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoInNlbGVjdFZhbHVlcyIsICJBcHJpbCxNYXksSnVuZSIpOwor
CisgICAgZGVidWcoIlxuU2VsZWN0IGRpc2FibGVkIGl0ZW0uIik7CisgICAgYXdhaXQgVUlIZWxw
ZXIuc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdygxKTsKKyAgICBhd2FpdCBVSUhlbHBlci5l
bnN1cmVQcmVzZW50YXRpb25VcGRhdGUoKTsKKyAgICBzZWxlY3RWYWx1ZXMgPSB2YWx1ZXNGb3JT
ZWxlY3RFbGVtZW50KHNlbGVjdCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzZWxlY3RW
YWx1ZXMiLCAiQXByaWwsTWF5LEp1bmUiKTsKKworICAgIGRlYnVnKCJcbkRlc2VsZWN0IG9uZSBp
dGVtLiIpCisgICAgYXdhaXQgVUlIZWxwZXIuc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdygz
KTsKKyAgICBzZWxlY3RWYWx1ZXMgPSB2YWx1ZXNGb3JTZWxlY3RFbGVtZW50KHNlbGVjdCk7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzZWxlY3RWYWx1ZXMiLCAiTWF5LEp1bmUiKTsKKwor
ICAgIGRlYnVnKCJcbkRlc2VsZWN0IG11bHRpcGxlIGl0ZW1zLiIpCisgICAgYXdhaXQgVUlIZWxw
ZXIuc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdyg0KTsKKyAgICBhd2FpdCBVSUhlbHBlci5z
ZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93KDUpOworICAgIHNlbGVjdFZhbHVlcyA9IHZhbHVl
c0ZvclNlbGVjdEVsZW1lbnQoc2VsZWN0KTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoInNl
bGVjdFZhbHVlcyIsICIiKTsKKworICAgIGRlYnVnKCJcblxuVGVzdGluZyBncm91cGVkIHNlbGVj
dDoiKTsKKyAgICBhd2FpdCBVSUhlbHBlci5kZWFjdGl2YXRlRm9ybUNvbnRyb2woc2VsZWN0KTsK
KyAgICBhd2FpdCBVSUhlbHBlci5hY3RpdmF0ZUVsZW1lbnQoZ3JvdXBlZCk7CisKKyAgICBkZWJ1
ZygiXG5TZWxlY3Qgb25lIGl0ZW0uIik7CisgICAgYXdhaXQgVUlIZWxwZXIuc2VsZWN0Rm9ybUFj
Y2Vzc29yeVBpY2tlclJvdyg2KTsKKyAgICBhd2FpdCBVSUhlbHBlci5lbnN1cmVQcmVzZW50YXRp
b25VcGRhdGUoKTsKKyAgICBncm91cGVkU2VsZWN0VmFsdWVzID0gdmFsdWVzRm9yU2VsZWN0RWxl
bWVudChncm91cGVkKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdyb3VwZWRTZWxlY3RW
YWx1ZXMiLCAiSnVseSIpOworCisgICAgZGVidWcoIlxuU2VsZWN0IG11bHRpcGxlIGl0ZW1zLiIp
OworICAgIGF3YWl0IFVJSGVscGVyLnNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3coOSk7Cisg
ICAgYXdhaXQgVUlIZWxwZXIuc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdygxMCk7CisgICAg
YXdhaXQgVUlIZWxwZXIuc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdygxMSk7CisgICAgYXdh
aXQgVUlIZWxwZXIuZW5zdXJlUHJlc2VudGF0aW9uVXBkYXRlKCk7CisgICAgZ3JvdXBlZFNlbGVj
dFZhbHVlcyA9IHZhbHVlc0ZvclNlbGVjdEVsZW1lbnQoZ3JvdXBlZCk7CisgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCJncm91cGVkU2VsZWN0VmFsdWVzIiwgIkp1bHksT2N0b2JlcixOb3ZlbWJl
cixEZWNlbWJlciIpOworCisgICAgZGVidWcoIlxuU2VsZWN0IGRpc2FibGVkIGl0ZW0uIik7Cisg
ICAgYXdhaXQgVUlIZWxwZXIuc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdyg3KTsKKyAgICBh
d2FpdCBVSUhlbHBlci5lbnN1cmVQcmVzZW50YXRpb25VcGRhdGUoKTsKKyAgICBncm91cGVkU2Vs
ZWN0VmFsdWVzID0gdmFsdWVzRm9yU2VsZWN0RWxlbWVudChncm91cGVkKTsKKyAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoImdyb3VwZWRTZWxlY3RWYWx1ZXMiLCAiSnVseSxPY3RvYmVyLE5vdmVt
YmVyLERlY2VtYmVyIik7CisKKyAgICBkZWJ1ZygiXG5EZXNlbGVjdCBvbmUgaXRlbS4iKTsKKyAg
ICBhd2FpdCBVSUhlbHBlci5zZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93KDkpOworICAgIGF3
YWl0IFVJSGVscGVyLmVuc3VyZVByZXNlbnRhdGlvblVwZGF0ZSgpOworICAgIGdyb3VwZWRTZWxl
Y3RWYWx1ZXMgPSB2YWx1ZXNGb3JTZWxlY3RFbGVtZW50KGdyb3VwZWQpOworICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygiZ3JvdXBlZFNlbGVjdFZhbHVlcyIsICJKdWx5LE5vdmVtYmVyLERlY2Vt
YmVyIik7CisKKyAgICBkZWJ1ZygiXG5EZXNlbGVjdCBtdWx0aXBsZSBpdGVtcy4iKTsKKyAgICBh
d2FpdCBVSUhlbHBlci5zZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93KDYpOworICAgIGF3YWl0
IFVJSGVscGVyLnNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3coMTApOworICAgIGF3YWl0IFVJ
SGVscGVyLmVuc3VyZVByZXNlbnRhdGlvblVwZGF0ZSgpOworICAgIGdyb3VwZWRTZWxlY3RWYWx1
ZXMgPSB2YWx1ZXNGb3JTZWxlY3RFbGVtZW50KGdyb3VwZWQpOworICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygiZ3JvdXBlZFNlbGVjdFZhbHVlcyIsICJEZWNlbWJlciIpOworCisgICAgZGVidWco
IiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="438101"
          type_id="1"
          status="+"
          setter="wenson_hsieh"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420010</attachid>
            <date>2021-02-11 11:24:49 -0800</date>
            <delta_ts>2021-02-11 14:25:35 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-221636-20210211142454.patch</filename>
            <type>text/plain</type>
            <size>29575</size>
            <attacher name="Aditya Keerthi">akeerthi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNjg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGZhNGVjZGVmMWEyYmIzNmVk
ZjVlMjViM2Y5OTJmNjA2NDEzNjcxMzkuLmM1YjllMzQwYmJkYmYxZjUzYzAzZjBjNzY5OTRmMmEx
Nzk0ZmExMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMjEtMDItMDkgIEFkaXR5YSBL
ZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdW0ZDUl0gQWRkIG5l
dyBwaWNrZXIgZm9yIDxzZWxlY3QgbXVsdGlwbGU+IGVsZW1lbnRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE2MzYKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzcyMzk5MzM3PgorCisgICAgICAgIFJldmlld2VkIGJ5IFdlbnNvbiBIc2llaC4KKwor
ICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL2lvcy9mb3JtLWNvbnRyb2wtcmVmcmVzaC9zZWxlY3Qv
c2VsZWN0LW11bHRpcGxlLXBpY2tlci5odG1sCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Zv
cm1zL1dLRm9ybVNlbGVjdENvbnRyb2wubW06CisgICAgICAgICgtW1dLRm9ybVNlbGVjdENvbnRy
b2wgaW5pdFdpdGhWaWV3Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3Jt
U2VsZWN0UGlja2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxl
Y3RQaWNrZXIubW06CisgICAgICAgICgtW1dLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJvbGxl
ciBpbml0V2l0aFZpZXc6XSk6CisKKyAgICAgICAgVGhlIG5ldyBwaWNrZXIgaXMgYSB0YWJsZSB2
aWV3IHdpdGggc3R5bGUgVUlUYWJsZVN0eWxlSW5zZXRHcm91cGVkLgorCisgICAgICAgICgtW1dL
U2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJvbGxlciB2aWV3V2lsbEFwcGVhcjpdKToKKworICAg
ICAgICBFbmFibGUvZGlzYWJsZSB0aGUgbmV4dC9wcmV2aW91cyBhY2Nlc3NvcnkgYnV0dG9ucyBh
Y2NvcmRpbmdseS4KKworICAgICAgICAoLVtXS1NlbGVjdFBpY2tlclRhYmxlVmlld0NvbnRyb2xs
ZXIgbnVtYmVyT2ZSb3dzSW5Hcm91cDpdKToKKyAgICAgICAgKC1bV0tTZWxlY3RQaWNrZXJUYWJs
ZVZpZXdDb250cm9sbGVyIG51bWJlck9mU2VjdGlvbnNJblRhYmxlVmlldzpdKToKKworICAgICAg
ICBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgc2VjdGlvbiwgdG8gZGlzcGxheSB0
aGUgZW1wdHkgbWVzc2FnZS4KKyAgICAgICAgQWRkaW5nIGdyb3VwcyB3aWxsIGFkZCBtb3JlIHNl
Y3Rpb25zIHRvIHRoZSB0YWJsZSB2aWV3LgorCisgICAgICAgICgtW1dLU2VsZWN0UGlja2VyVGFi
bGVWaWV3Q29udHJvbGxlciB0YWJsZVZpZXc6bnVtYmVyT2ZSb3dzSW5TZWN0aW9uOl0pOgorICAg
ICAgICAoLVtXS1NlbGVjdFBpY2tlclRhYmxlVmlld0NvbnRyb2xsZXIgdGFibGVWaWV3OmhlaWdo
dEZvckhlYWRlckluU2VjdGlvbjpdKToKKworICAgICAgICBUaGUgaGVhZGVyIGZvciB0aGUgZmly
c3Qgc2VjdGlvbiBpcyBhbiBpbnNldCBtYXRjaGluZyB0YWJsZSB2aWV3IGluc2V0LgorCisgICAg
ICAgICgtW1dLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJvbGxlciB0YWJsZVZpZXc6aGVpZ2h0
Rm9yRm9vdGVySW5TZWN0aW9uOl0pOgorCisgICAgICAgIEFuIGVtcHR5IGZpcnN0IHNlY3Rpb24g
c2hvdWxkIG5vdCBoYXZlIGEgZm9vdGVyIGlmIHRoZXJlIGFyZSBtb3JlIHNlY3Rpb25zCisgICAg
ICAgIGFmdGVyIGl0LiBUaGlzIGNhbiBvY2N1ciB3aGVuIHRoZSBmaXJzdCBvcHRpb24gYmVsb25n
cyB0byBhIGdyb3VwLgorCisgICAgICAgICgtW1dLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJv
bGxlciB0YWJsZVZpZXc6dGl0bGVGb3JIZWFkZXJJblNlY3Rpb246XSk6CisgICAgICAgICgtW1dL
U2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJvbGxlciB0YWJsZVZpZXc6dmlld0ZvckZvb3Rlcklu
U2VjdGlvbjpdKToKKworICAgICAgICBSZXR1cm4gbmlsIHNvIHRoYXQgdGhlIGZvb3RlciBoZWln
aHQgaXMgb2JleWVkLgorCisgICAgICAgICgtW1dLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJv
bGxlciB0YWJsZVZpZXc6dmlld0ZvckhlYWRlckluU2VjdGlvbjpdKToKKworICAgICAgICBUaGUg
aGVhZGVyIHZpZXcgZGlzcGxheXMgdGhlIGdyb3VwIG5hbWUgYWxvbmcgd2l0aCBhIGJ1dHRvbiB0
byBjb2xsYXBzZQorICAgICAgICB0aGUgc2VjdGlvbi4KKworICAgICAgICAoLVtXS1NlbGVjdFBp
Y2tlclRhYmxlVmlld0NvbnRyb2xsZXIgY29sbGFwc2VTZWN0aW9uOl0pOgorCisgICAgICAgIENv
bGxhcHNpbmcgc2VjdGlvbnMgaXMgaW1wbGVtZW50ZWQgYnkgcmVtb3ZpbmcgdGhlIGNvcnJlc3Bv
bmRpbmcgcm93cworICAgICAgICBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gVGhlIGJ1dHRvbiBpcyBh
bmltYXRlZCBieSBjaGFuZ2luZyBpdHMgdHJhbnNmb3JtLgorCisgICAgICAgICgtW1dLU2VsZWN0
UGlja2VyVGFibGVWaWV3Q29udHJvbGxlciBmaW5kSXRlbUluZGV4QXQ6XSk6CisgICAgICAgICgt
W1dLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJvbGxlciBvcHRpb25JdGVtQXRJbmRleFBhdGg6
XSk6CisgICAgICAgICgtW1dLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJvbGxlciB0YWJsZVZp
ZXc6Y2VsbEZvclJvd0F0SW5kZXhQYXRoOl0pOgorICAgICAgICAoLVtXS1NlbGVjdFBpY2tlclRh
YmxlVmlld0NvbnRyb2xsZXIgdGFibGVWaWV3OmRpZFNlbGVjdFJvd0F0SW5kZXhQYXRoOl0pOgor
ICAgICAgICAoLVtXS1NlbGVjdFBpY2tlclRhYmxlVmlld0NvbnRyb2xsZXIgbmV4dDpdKToKKyAg
ICAgICAgKC1bV0tTZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250cm9sbGVyIHByZXZpb3VzOl0pOgor
ICAgICAgICAoLVtXS1NlbGVjdFBpY2tlclRhYmxlVmlld0NvbnRyb2xsZXIgY2xvc2U6XSk6Cisg
ICAgICAgICgtW1dLU2VsZWN0TXVsdGlwbGVQaWNrZXIgaW5pdFdpdGhWaWV3Ol0pOgorICAgICAg
ICAoLVtXS1NlbGVjdE11bHRpcGxlUGlja2VyIGNvbmZpZ3VyZVByZXNlbnRhdGlvbl0pOgorCisg
ICAgICAgIERpc3BsYXkgdGhlIHBpY2tlciBhcyBhIGhhbGYtc2hlZXQgKHRoYXQgY2FuIGJlIGRy
YWdnZWQgdXAgaW50byBhCisgICAgICAgIGZ1bGxzY3JlZW4gdmlldykgb24gaVBob25lcywgYW5k
IGFzIGEgcG9wb3ZlciBvbiBpUGFkcy4KKworICAgICAgICAoLVtXS1NlbGVjdE11bHRpcGxlUGlj
a2VyIGNvbnRyb2xWaWV3XSk6CisgICAgICAgICgtW1dLU2VsZWN0TXVsdGlwbGVQaWNrZXIgY29u
dHJvbEJlZ2luRWRpdGluZ10pOgorICAgICAgICAoLVtXS1NlbGVjdE11bHRpcGxlUGlja2VyIGNv
bnRyb2xFbmRFZGl0aW5nXSk6CisgICAgICAgICgtW1dLU2VsZWN0TXVsdGlwbGVQaWNrZXIgcHJl
c2VudGF0aW9uQ29udHJvbGxlckRpZERpc21pc3M6XSk6CisgICAgICAgICgtW1dLU2VsZWN0TXVs
dGlwbGVQaWNrZXIgX2luZGV4UGF0aEZvclJvdzpdKToKKyAgICAgICAgKC1bV0tTZWxlY3RNdWx0
aXBsZVBpY2tlciBzZWxlY3RSb3c6aW5Db21wb25lbnQ6ZXh0ZW5kaW5nU2VsZWN0aW9uOl0pOgor
CisgICAgICAgIEFkZGVkIHRlc3RpbmcgaG9vayB0byBzdXBwb3J0IGxheW91dCB0ZXN0aW5nLgor
CiAyMDIxLTAyLTEwICBCSiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2Nv
YV0gV2ViIEluc3BlY3RvcjogYWRkIHN1cHBvcnQgZm9yIGV2YWx1YXRpbmcgc2NyaXB0IG9uIHRo
ZSBpbnNwZWN0ZWQgcGFnZSB2aWEgX1dLSW5zcGVjdG9yRXh0ZW5zaW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0Q29udHJvbC5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RDb250cm9sLm1t
CmluZGV4IGQ2MWU5NmQ5ZDkyMjY2NGI3ZTZmZjZlMTJjZTcyNTBjOTgzNTE4NmUuLjI5MDZiZDll
MmU1MDEyNmY5NjQ1MTIwNDVhMDYyNmZlNzQ4ZjMxY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RDb250cm9sLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RDb250cm9sLm1tCkBAIC03
Nyw4ICs3NywxMCBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3
ICopdmlldwogCiAjaWYgRU5BQkxFKElPU19GT1JNX0NPTlRST0xfUkVGUkVTSCkKICAgICBpZiAo
W3ZpZXcgX2Zvcm1Db250cm9sUmVmcmVzaEVuYWJsZWRdKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBB
ZGQgaW1wbGVtZW50YXRpb24gZm9yIG11bHRpLXNlbGVjdCBwaWNrZXIuCi0gICAgICAgIGNvbnRy
b2wgPSBhZG9wdE5TKFtbV0tTZWxlY3RQaWNrZXIgYWxsb2NdIGluaXRXaXRoVmlldzp2aWV3XSk7
CisgICAgICAgIGlmICh2aWV3LmZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaXNNdWx0aVNlbGVj
dCkKKyAgICAgICAgICAgIGNvbnRyb2wgPSBhZG9wdE5TKFtbV0tTZWxlY3RNdWx0aXBsZVBpY2tl
ciBhbGxvY10gaW5pdFdpdGhWaWV3OnZpZXddKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y29udHJvbCA9IGFkb3B0TlMoW1tXS1NlbGVjdFBpY2tlciBhbGxvY10gaW5pdFdpdGhWaWV3OnZp
ZXddKTsKICAgICAgICAgcmV0dXJuIFtzdXBlciBpbml0V2l0aFZpZXc6dmlldyBjb250cm9sOldU
Rk1vdmUoY29udHJvbCldOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdFBpY2tlci5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdFBpY2tlci5oCmluZGV4IGYzYjYzNDlm
ZDYyNTg5MmYwMWQwOTE1MDFjZWY2Nzg3NDE4NDFlZDkuLjlkMDk1NWExYzQzMDk5ZTA5OTEwZGNl
NmFmZmMzOGQ5OGNkMWY4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9mb3Jtcy9XS0Zvcm1TZWxlY3RQaWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0UGlja2VyLmgKQEAgLTUyLDYgKzUyLDEwIEBACiAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmlldzsKIEBlbmQKIAor
QGludGVyZmFjZSBXS1NlbGVjdE11bHRpcGxlUGlja2VyIDogTlNPYmplY3QgPFdLRm9ybUNvbnRy
b2w+CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmlldzsK
K0BlbmQKKwogI2VuZGlmCiAKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdFBpY2tl
ci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mb3Jtcy9XS0Zvcm1TZWxlY3RQaWNr
ZXIubW0KaW5kZXggZjY4ZGExYWFjZjBjYWMzZjEwOTNhMGY4NGZkMzBiNGUzMzk2Y2I0Yi4uYmI1
MzFhODZjMTZmMzdjNzUwOGMyNzNmMTg0YzJkMWU4ZDg4YjQyOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL2Zvcm1zL1dLRm9ybVNlbGVjdFBpY2tlci5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZm9ybXMvV0tGb3JtU2VsZWN0UGlja2VyLm1tCkBA
IC0yOSw2ICsyOSw3IEBACiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogI2ltcG9ydCAiVUlL
aXRTUEkuaCIKKyNpbXBvcnQgIlVzZXJJbnRlcmZhY2VJZGlvbS5oIgogI2ltcG9ydCAiV0tDb250
ZW50Vmlldy5oIgogI2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgiCiAjaW1wb3J0
ICJXS0Zvcm1Qb3BvdmVyLmgiCkBAIC02OTksNCArNzAwLDQzMSBAQCAtICh2b2lkKXNlbGVjdFJv
dzooTlNJbnRlZ2VyKXJvd0luZGV4IGluQ29tcG9uZW50OihOU0ludGVnZXIpY29tcG9uZW50SW5k
ZXggZXh0ZQogCiBAZW5kCiAKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IG5leHRQcmV2aW91c1NwYWNl
cldpZHRoID0gNi4wZjsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IHNlY3Rpb25IZWFkZXJDb2xsYXBz
ZUJ1dHRvblNpemUgPSAxNC4wZjsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IHNlY3Rpb25IZWFkZXJD
b2xsYXBzZUJ1dHRvblRyYW5zaXRpb25EdXJhdGlvbiA9IDAuMmY7CitzdGF0aWMgY29uc3QgQ0dG
bG9hdCBzZWN0aW9uSGVhZGVyRm9udFNpemUgPSAyMi4wZjsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0
IHNlY3Rpb25IZWFkZXJIZWlnaHQgPSAzNi4wZjsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IHNlY3Rp
b25IZWFkZXJNYXJnaW4gPSAxNi4wZjsKK3N0YXRpYyBjb25zdCBDR0Zsb2F0IHNlbGVjdFBvcG92
ZXJMZW5ndGggPSAzMjAuMGY7CitzdGF0aWMgTlNTdHJpbmcgKm9wdGlvbkNlbGxSZXVzZUlkZW50
aWZpZXIgPSBAIldLU2VsZWN0UGlja2VyVGFibGVWaWV3Q2VsbCI7CisKK0BpbnRlcmZhY2UgV0tT
ZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250cm9sbGVyIDogVUlUYWJsZVZpZXdDb250cm9sbGVyCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1NlbGVjdFBpY2tlclRhYmxlVmlld0NvbnRyb2xsZXIg
eworICAgIF9fd2VhayBXS0NvbnRlbnRWaWV3ICpfY29udGVudFZpZXc7CisKKyAgICBOU0ludGVn
ZXIgX251bWJlck9mU2VjdGlvbnM7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZVNldDxOU051bWJl
ciAqPj4gX2NvbGxhcHNlZFNlY3Rpb25zOworCisgICAgUmV0YWluUHRyPFVJQmFyQnV0dG9uSXRl
bT4gX3ByZXZpb3VzQnV0dG9uOworICAgIFJldGFpblB0cjxVSUJhckJ1dHRvbkl0ZW0+IF9uZXh0
QnV0dG9uOworfQorCistIChpZClpbml0V2l0aFZpZXc6KFdLQ29udGVudFZpZXcgKil2aWV3Cit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aFN0eWxlOlVJVGFibGVWaWV3U3R5bGVJ
bnNldEdyb3VwZWRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9jb250ZW50VmlldyA9
IHZpZXc7CisKKyAgICBfcHJldmlvdXNCdXR0b24gPSBhZG9wdE5TKFtbVUlCYXJCdXR0b25JdGVt
IGFsbG9jXSBpbml0V2l0aEltYWdlOltVSUltYWdlIHN5c3RlbUltYWdlTmFtZWQ6QCJjaGV2cm9u
LnVwIl0gc3R5bGU6VUlCYXJCdXR0b25JdGVtU3R5bGVQbGFpbiB0YXJnZXQ6c2VsZiBhY3Rpb246
QHNlbGVjdG9yKHByZXZpb3VzOildKTsKKyAgICBhdXRvIG5leHRQcmV2aW91c1NwYWNlciA9IGFk
b3B0TlMoW1tVSUJhckJ1dHRvbkl0ZW0gYWxsb2NdIGluaXRXaXRoQmFyQnV0dG9uU3lzdGVtSXRl
bTpVSUJhckJ1dHRvblN5c3RlbUl0ZW1GaXhlZFNwYWNlIHRhcmdldDpuaWwgYWN0aW9uOk5VTExd
KTsKKyAgICBbbmV4dFByZXZpb3VzU3BhY2VyIHNldFdpZHRoOm5leHRQcmV2aW91c1NwYWNlcldp
ZHRoXTsKKyAgICBfbmV4dEJ1dHRvbiA9IGFkb3B0TlMoW1tVSUJhckJ1dHRvbkl0ZW0gYWxsb2Nd
IGluaXRXaXRoSW1hZ2U6W1VJSW1hZ2Ugc3lzdGVtSW1hZ2VOYW1lZDpAImNoZXZyb24uZG93biJd
IHN0eWxlOlVJQmFyQnV0dG9uSXRlbVN0eWxlUGxhaW4gdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxl
Y3RvcihuZXh0OildKTsKKyAgICBhdXRvIGNsb3NlQnV0dG9uID0gYWRvcHROUyhbW1VJQmFyQnV0
dG9uSXRlbSBhbGxvY10gaW5pdFdpdGhCYXJCdXR0b25TeXN0ZW1JdGVtOlVJQmFyQnV0dG9uU3lz
dGVtSXRlbUNsb3NlIHRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoY2xvc2U6KV0pOworCisg
ICAgc2VsZi5uYXZpZ2F0aW9uSXRlbS5sZWZ0QmFyQnV0dG9uSXRlbXMgPSBAWyBfcHJldmlvdXNC
dXR0b24uZ2V0KCksIG5leHRQcmV2aW91c1NwYWNlci5nZXQoKSwgX25leHRCdXR0b24uZ2V0KCkg
XTsKKyAgICBzZWxmLm5hdmlnYXRpb25JdGVtLnJpZ2h0QmFyQnV0dG9uSXRlbSA9IGNsb3NlQnV0
dG9uLmdldCgpOworCisgICAgX2NvbGxhcHNlZFNlY3Rpb25zID0gYWRvcHROUyhbW05TTXV0YWJs
ZVNldCBhbGxvY10gaW5pdF0pOworCisgICAgX251bWJlck9mU2VjdGlvbnMgPSAxOworICAgIGZv
ciAoYXV0byYgb3B0aW9uIDogX2NvbnRlbnRWaWV3LmZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9u
cykgeworICAgICAgICBpZiAob3B0aW9uLmlzR3JvdXApCisgICAgICAgICAgICBfbnVtYmVyT2ZT
ZWN0aW9ucysrOworICAgIH0KKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXZpZXdX
aWxsQXBwZWFyOihCT09MKWFuaW1hdGVkCit7CisgICAgW3N1cGVyIHZpZXdXaWxsQXBwZWFyOmFu
aW1hdGVkXTsKKworICAgIFtfcHJldmlvdXNCdXR0b24gc2V0RW5hYmxlZDpfY29udGVudFZpZXcu
Zm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5oYXNQcmV2aW91c05vZGVdOworICAgIFtfbmV4dEJ1
dHRvbiBzZXRFbmFibGVkOl9jb250ZW50Vmlldy5mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmhh
c05leHROb2RlXTsKK30KKworLSAoTlNJbnRlZ2VyKW51bWJlck9mUm93c0luR3JvdXA6KE5TSW50
ZWdlcilncm91cElECit7CisgICAgTlNJbnRlZ2VyIHJvd0NvdW50ID0gMDsKKyAgICBmb3IgKGF1
dG8mIG9wdGlvbiA6IF9jb250ZW50Vmlldy5mb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnMpIHsK
KyAgICAgICAgaWYgKG9wdGlvbi5pc0dyb3VwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgaWYgKG9wdGlvbi5wYXJlbnRHcm91cElEID09IGdyb3VwSUQpCisgICAgICAgICAgICBy
b3dDb3VudCsrOworCisgICAgICAgIGlmIChvcHRpb24ucGFyZW50R3JvdXBJRCA+IGdyb3VwSUQp
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcm93Q291bnQ7Cit9CisK
Ky0gKE5TSW50ZWdlciludW1iZXJPZlNlY3Rpb25zSW5UYWJsZVZpZXc6KFVJVGFibGVWaWV3ICop
dGFibGVWaWV3Cit7CisgICAgcmV0dXJuIF9udW1iZXJPZlNlY3Rpb25zOworfQorCistIChOU0lu
dGVnZXIpdGFibGVWaWV3OihVSVRhYmxlVmlldyAqKXRhYmxlVmlldyBudW1iZXJPZlJvd3NJblNl
Y3Rpb246KE5TSW50ZWdlcilzZWN0aW9uCit7CisgICAgaWYgKF9jb250ZW50Vmlldy5mb2N1c2Vk
U2VsZWN0RWxlbWVudE9wdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMTsKKworICAg
IGlmIChbX2NvbGxhcHNlZFNlY3Rpb25zIGNvbnRhaW5zT2JqZWN0OkAoc2VjdGlvbildKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBbc2VsZiBudW1iZXJPZlJvd3NJbkdyb3VwOnNl
Y3Rpb25dOworfQorCistIChDR0Zsb2F0KXRhYmxlVmlldzooVUlUYWJsZVZpZXcgKil0YWJsZVZp
ZXcgaGVpZ2h0Rm9ySGVhZGVySW5TZWN0aW9uOihOU0ludGVnZXIpc2VjdGlvbgoreworICAgIGlm
ICghc2VjdGlvbikKKyAgICAgICAgcmV0dXJuIHRhYmxlVmlldy5sYXlvdXRNYXJnaW5zLmxlZnQ7
CisKKyAgICByZXR1cm4gc2VjdGlvbkhlYWRlckhlaWdodDsKK30KKworLSAoQ0dGbG9hdCl0YWJs
ZVZpZXc6KFVJVGFibGVWaWV3ICopdGFibGVWaWV3IGhlaWdodEZvckZvb3RlckluU2VjdGlvbjoo
TlNJbnRlZ2VyKXNlY3Rpb24KK3sKKyAgICBpZiAoIXNlY3Rpb24gJiYgIVtzZWxmIG51bWJlck9m
Um93c0luR3JvdXA6MF0gJiYgX251bWJlck9mU2VjdGlvbnMgPiAxKQorICAgICAgICByZXR1cm4g
Q0dGTE9BVF9NSU47CisKKyAgICByZXR1cm4gdGFibGVWaWV3LmxheW91dE1hcmdpbnMubGVmdDsK
K30KKworLSAoTlNTdHJpbmcgKil0YWJsZVZpZXc6KFVJVGFibGVWaWV3ICopdGFibGVWaWV3IHRp
dGxlRm9ySGVhZGVySW5TZWN0aW9uOihOU0ludGVnZXIpc2VjdGlvbgoreworICAgIGlmICghc2Vj
dGlvbikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TSW50ZWdlciBncm91cENvdW50ID0g
MDsKKyAgICBmb3IgKGF1dG8mIG9wdGlvbiA6IF9jb250ZW50Vmlldy5mb2N1c2VkU2VsZWN0RWxl
bWVudE9wdGlvbnMpIHsKKyAgICAgICAgaWYgKCFvcHRpb24uaXNHcm91cCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGdyb3VwQ291bnQrKzsKKyAgICAgICAgaWYgKG9wdGlvbi5p
c0dyb3VwICYmIGdyb3VwQ291bnQgPT0gc2VjdGlvbikKKyAgICAgICAgICAgIHJldHVybiBvcHRp
b24udGV4dDsKKyAgICB9CisKKyAgICByZXR1cm4gbmlsOworfQorCistIChVSVZpZXcgKil0YWJs
ZVZpZXc6KFVJVGFibGVWaWV3ICopdGFibGVWaWV3IHZpZXdGb3JGb290ZXJJblNlY3Rpb246KE5T
SW50ZWdlcilzZWN0aW9uCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoVUlWaWV3ICopdGFi
bGVWaWV3OihVSVRhYmxlVmlldyAqKXRhYmxlVmlldyB2aWV3Rm9ySGVhZGVySW5TZWN0aW9uOihO
U0ludGVnZXIpc2VjdGlvbgoreworICAgIGlmICghc2VjdGlvbikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIFVJVmlldyAqc2VjdGlvblZpZXcgPSBbW1tVSVZpZXcgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKworICAgIFVJTGFiZWwgKnNlY3Rpb25MYWJlbCA9IFtbW1VJTGFiZWwgYWxs
b2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBzZWN0aW9uTGFiZWwudGV4dCA9IFtzZWxmIHRh
YmxlVmlldzp0YWJsZVZpZXcgdGl0bGVGb3JIZWFkZXJJblNlY3Rpb246c2VjdGlvbl07CisgICAg
c2VjdGlvbkxhYmVsLnRleHRDb2xvciA9IFVJQ29sb3IuYmxhY2tDb2xvcjsKKyAgICBzZWN0aW9u
TGFiZWwuZm9udCA9IFtVSUZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6c2VjdGlvbkhlYWRlckZv
bnRTaXplXTsKKyAgICBzZWN0aW9uTGFiZWwuYWRqdXN0c0ZvbnRTaXplVG9GaXRXaWR0aCA9IE5P
OworICAgIHNlY3Rpb25MYWJlbC5saW5lQnJlYWtNb2RlID0gTlNMaW5lQnJlYWtCeVRydW5jYXRp
bmdUYWlsOworICAgIFtzZWN0aW9uVmlldyBhZGRTdWJ2aWV3OnNlY3Rpb25MYWJlbF07CisKKyAg
ICBzZWN0aW9uTGFiZWwudHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHMg
PSBOTzsKKyAgICBbTlNMYXlvdXRDb25zdHJhaW50IGFjdGl2YXRlQ29uc3RyYWludHM6QFsKKyAg
ICAgICAgW3NlY3Rpb25MYWJlbC5sZWFkaW5nQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9y
OnNlY3Rpb25WaWV3LmxlYWRpbmdBbmNob3IgY29uc3RhbnQ6c2VjdGlvbkhlYWRlck1hcmdpbl0s
CisgICAgICAgIFtzZWN0aW9uTGFiZWwudG9wQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9y
OnNlY3Rpb25WaWV3LnRvcEFuY2hvciBjb25zdGFudDowXSwKKyAgICBdXTsKKworICAgIFVJQnV0
dG9uICpjb2xsYXBzZUJ1dHRvbiA9IFtbW1VJQnV0dG9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFz
ZV07CisgICAgY29sbGFwc2VCdXR0b24udGFnID0gc2VjdGlvbjsKKyAgICBbY29sbGFwc2VCdXR0
b24gc2V0SW1hZ2U6W1VJSW1hZ2Ugc3lzdGVtSW1hZ2VOYW1lZDpAImNoZXZyb24uZG93biIgd2l0
aENvbmZpZ3VyYXRpb246W1VJSW1hZ2VTeW1ib2xDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb25X
aXRoUG9pbnRTaXplOnNlY3Rpb25IZWFkZXJDb2xsYXBzZUJ1dHRvblNpemUgd2VpZ2h0OlVJSW1h
Z2VTeW1ib2xXZWlnaHRTZW1pYm9sZF1dIGZvclN0YXRlOlVJQ29udHJvbFN0YXRlTm9ybWFsXTsK
KyAgICBbY29sbGFwc2VCdXR0b24gYWRkVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihjb2xs
YXBzZVNlY3Rpb246KSBmb3JDb250cm9sRXZlbnRzOlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lk
ZV07CisgICAgW3NlY3Rpb25WaWV3IGFkZFN1YnZpZXc6Y29sbGFwc2VCdXR0b25dOworCisgICAg
aWYgKFtfY29sbGFwc2VkU2VjdGlvbnMgY29udGFpbnNPYmplY3Q6QChzZWN0aW9uKV0pCisgICAg
ICAgIGNvbGxhcHNlQnV0dG9uLnRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVJvdGF0
aW9uKC1NX1BJIC8gMik7CisKKyAgICBjb2xsYXBzZUJ1dHRvbi50cmFuc2xhdGVzQXV0b3Jlc2l6
aW5nTWFza0ludG9Db25zdHJhaW50cyA9IE5POworICAgIFtOU0xheW91dENvbnN0cmFpbnQgYWN0
aXZhdGVDb25zdHJhaW50czpAWworICAgICAgICBbY29sbGFwc2VCdXR0b24udHJhaWxpbmdBbmNo
b3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6c2VjdGlvblZpZXcudHJhaWxpbmdBbmNob3IgY29u
c3RhbnQ6LXNlY3Rpb25IZWFkZXJNYXJnaW5dLAorICAgICAgICBbY29sbGFwc2VCdXR0b24udG9w
QW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOnNlY3Rpb25MYWJlbC50b3BBbmNob3IgY29u
c3RhbnQ6MF0sCisgICAgICAgIFtjb2xsYXBzZUJ1dHRvbi5ib3R0b21BbmNob3IgY29uc3RyYWlu
dEVxdWFsVG9BbmNob3I6c2VjdGlvbkxhYmVsLmJvdHRvbUFuY2hvciBjb25zdGFudDowXSwKKyAg
ICBdXTsKKworICAgIHJldHVybiBzZWN0aW9uVmlldzsKK30KKworLSAodm9pZCljb2xsYXBzZVNl
Y3Rpb246KFVJQnV0dG9uICopYnV0dG9uCit7CisgICAgTlNJbnRlZ2VyIHNlY3Rpb24gPSBidXR0
b24udGFnOworICAgIE5TSW50ZWdlciByb3dDb3VudCA9IFtzZWxmIG51bWJlck9mUm93c0luR3Jv
dXA6c2VjdGlvbl07CisKKyAgICBOU011dGFibGVBcnJheSAqaW5kZXhQYXRocyA9IFtOU011dGFi
bGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpyb3dDb3VudF07CisgICAgZm9yIChOU0ludGVnZXIg
aSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKQorICAgICAgICBbaW5kZXhQYXRocyBhZGRPYmplY3Q6
W05TSW5kZXhQYXRoIGluZGV4UGF0aEZvclJvdzppIGluU2VjdGlvbjpzZWN0aW9uXV07CisKKyAg
ICBOU051bWJlciAqb2JqZWN0ID0gQChzZWN0aW9uKTsKKyAgICBpZiAoW19jb2xsYXBzZWRTZWN0
aW9ucyBjb250YWluc09iamVjdDpvYmplY3RdKSB7CisgICAgICAgIFtfY29sbGFwc2VkU2VjdGlv
bnMgcmVtb3ZlT2JqZWN0Om9iamVjdF07CisgICAgICAgIFtzZWxmLnRhYmxlVmlldyBpbnNlcnRS
b3dzQXRJbmRleFBhdGhzOmluZGV4UGF0aHMgd2l0aFJvd0FuaW1hdGlvbjpVSVRhYmxlVmlld1Jv
d0FuaW1hdGlvbkZhZGVdOworICAgIH0gZWxzZSB7CisgICAgICAgIFtfY29sbGFwc2VkU2VjdGlv
bnMgYWRkT2JqZWN0Om9iamVjdF07CisgICAgICAgIFtzZWxmLnRhYmxlVmlldyBkZWxldGVSb3dz
QXRJbmRleFBhdGhzOmluZGV4UGF0aHMgd2l0aFJvd0FuaW1hdGlvbjpVSVRhYmxlVmlld1Jvd0Fu
aW1hdGlvbkZhZGVdOworICAgIH0KKworICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhEdXJhdGlvbjpz
ZWN0aW9uSGVhZGVyQ29sbGFwc2VCdXR0b25UcmFuc2l0aW9uRHVyYXRpb24gYW5pbWF0aW9uczpe
eworICAgICAgICBpZiAoQ0dBZmZpbmVUcmFuc2Zvcm1FcXVhbFRvVHJhbnNmb3JtKGJ1dHRvbi50
cmFuc2Zvcm0sIENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHkpKQorICAgICAgICAgICAgYnV0dG9u
LnRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVJvdGF0aW9uKC1NX1BJIC8gMik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJ1dHRvbi50cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5z
Zm9ybUlkZW50aXR5OworICAgIH1dOworfQorCistIChOU0ludGVnZXIpZmluZEl0ZW1JbmRleEF0
OihOU0luZGV4UGF0aCAqKWluZGV4UGF0aAoreworICAgIGludCBvcHRpb25JbmRleCA9IDA7Cisg
ICAgaW50IHJvd0luZGV4ID0gMDsKKworICAgIGZvciAoYXV0byYgb3B0aW9uIDogX2NvbnRlbnRW
aWV3LmZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9ucykgeworICAgICAgICBpZiAob3B0aW9uLmlz
R3JvdXApIHsKKyAgICAgICAgICAgIHJvd0luZGV4ID0gMDsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wdGlvbi5wYXJlbnRHcm91cElEID09IGluZGV4
UGF0aC5zZWN0aW9uICYmIHJvd0luZGV4ID09IGluZGV4UGF0aC5yb3cpCisgICAgICAgICAgICBy
ZXR1cm4gb3B0aW9uSW5kZXg7CisKKyAgICAgICAgb3B0aW9uSW5kZXgrKzsKKyAgICAgICAgcm93
SW5kZXgrKzsKKyAgICB9CisKKyAgICByZXR1cm4gTlNOb3RGb3VuZDsKK30KKworLSAoT3B0aW9u
SXRlbSAqKW9wdGlvbkl0ZW1BdEluZGV4UGF0aDooTlNJbmRleFBhdGggKilpbmRleFBhdGgKK3sK
KyAgICBOU0ludGVnZXIgaW5kZXggPSAwOworICAgIGZvciAoYXV0byYgb3B0aW9uIDogX2NvbnRl
bnRWaWV3LmZvY3VzZWRTZWxlY3RFbGVtZW50T3B0aW9ucykgeworICAgICAgICBpZiAob3B0aW9u
LmlzR3JvdXAgfHwgb3B0aW9uLnBhcmVudEdyb3VwSUQgIT0gaW5kZXhQYXRoLnNlY3Rpb24pCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoaW5kZXggPT0gaW5kZXhQYXRoLnJv
dykKKyAgICAgICAgICAgIHJldHVybiAmb3B0aW9uOworCisgICAgICAgIGluZGV4Kys7CisgICAg
fQorCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoVUlUYWJsZVZpZXdDZWxsICopdGFibGVWaWV3
OihVSVRhYmxlVmlldyAqKXRhYmxlVmlldyBjZWxsRm9yUm93QXRJbmRleFBhdGg6KE5TSW5kZXhQ
YXRoICopaW5kZXhQYXRoCit7CisgICAgVUlUYWJsZVZpZXdDZWxsICpjZWxsID0gW3RhYmxlVmll
dyBkZXF1ZXVlUmV1c2FibGVDZWxsV2l0aElkZW50aWZpZXI6b3B0aW9uQ2VsbFJldXNlSWRlbnRp
Zmllcl07CisgICAgaWYgKCFjZWxsKQorICAgICAgICBjZWxsID0gW1tbVUlUYWJsZVZpZXdDZWxs
IGFsbG9jXSBpbml0V2l0aFN0eWxlOlVJVGFibGVWaWV3Q2VsbFN0eWxlRGVmYXVsdCByZXVzZUlk
ZW50aWZpZXI6b3B0aW9uQ2VsbFJldXNlSWRlbnRpZmllcl0gYXV0b3JlbGVhc2VdOworCisgICAg
aWYgKF9jb250ZW50Vmlldy5mb2N1c2VkU2VsZWN0RWxlbWVudE9wdGlvbnMuaXNFbXB0eSgpKSB7
CisgICAgICAgIGNlbGwudGV4dExhYmVsLmVuYWJsZWQgPSBOTzsKKyAgICAgICAgY2VsbC50ZXh0
TGFiZWwudGV4dCA9IFdFQl9VSV9TVFJJTkdfS0VZKCJObyBPcHRpb25zIiwgIk5vIE9wdGlvbnMg
U2VsZWN0IFBvcG92ZXIiLCAiRW1wdHkgc2VsZWN0IGxpc3QiKTsKKyAgICAgICAgY2VsbC51c2Vy
SW50ZXJhY3Rpb25FbmFibGVkID0gTk87CisgICAgICAgIGNlbGwuaW1hZ2VWaWV3LmltYWdlID0g
bmlsOworICAgICAgICByZXR1cm4gY2VsbDsKKyAgICB9CisKKyAgICBhdXRvIG9wdGlvbiA9IFtz
ZWxmIG9wdGlvbkl0ZW1BdEluZGV4UGF0aDppbmRleFBhdGhdOworICAgIGlmICghb3B0aW9uKQor
ICAgICAgICByZXR1cm4gY2VsbDsKKworICAgIGNlbGwudGV4dExhYmVsLnRleHQgPSBvcHRpb24t
PnRleHQ7CisgICAgY2VsbC50ZXh0TGFiZWwuZW5hYmxlZCA9ICFvcHRpb24tPmRpc2FibGVkOwor
ICAgIGNlbGwudXNlckludGVyYWN0aW9uRW5hYmxlZCA9ICFvcHRpb24tPmRpc2FibGVkOworCisg
ICAgaWYgKG9wdGlvbi0+aXNTZWxlY3RlZCkKKyAgICAgICAgY2VsbC5pbWFnZVZpZXcuaW1hZ2Ug
PSBbVUlJbWFnZSBzeXN0ZW1JbWFnZU5hbWVkOkAiY2hlY2ttYXJrLmNpcmNsZS5maWxsIl07Cisg
ICAgZWxzZSBpZiAob3B0aW9uLT5kaXNhYmxlZCkKKyAgICAgICAgY2VsbC5pbWFnZVZpZXcuaW1h
Z2UgPSBbW1VJSW1hZ2Ugc3lzdGVtSW1hZ2VOYW1lZDpAImNpcmNsZSJdIGltYWdlV2l0aFRpbnRD
b2xvcjpVSUNvbG9yLnF1YXRlcm5hcnlMYWJlbENvbG9yIHJlbmRlcmluZ01vZGU6VUlJbWFnZVJl
bmRlcmluZ01vZGVBbHdheXNPcmlnaW5hbF07CisgICAgZWxzZQorICAgICAgICBjZWxsLmltYWdl
Vmlldy5pbWFnZSA9IFtbVUlJbWFnZSBzeXN0ZW1JbWFnZU5hbWVkOkAiY2lyY2xlIl0gaW1hZ2VX
aXRoVGludENvbG9yOlVJQ29sb3IudGVydGlhcnlMYWJlbENvbG9yIHJlbmRlcmluZ01vZGU6VUlJ
bWFnZVJlbmRlcmluZ01vZGVBbHdheXNPcmlnaW5hbF07CisKKyAgICByZXR1cm4gY2VsbDsKK30K
KworLSAodm9pZCl0YWJsZVZpZXc6KFVJVGFibGVWaWV3ICopdGFibGVWaWV3IGRpZFNlbGVjdFJv
d0F0SW5kZXhQYXRoOihOU0luZGV4UGF0aCAqKWluZGV4UGF0aAoreworICAgIFt0YWJsZVZpZXcg
ZGVzZWxlY3RSb3dBdEluZGV4UGF0aDpbdGFibGVWaWV3IGluZGV4UGF0aEZvclNlbGVjdGVkUm93
XSBhbmltYXRlZDpOT107CisKKyAgICBVSVRhYmxlVmlld0NlbGwgKmNlbGwgPSBbdGFibGVWaWV3
IGNlbGxGb3JSb3dBdEluZGV4UGF0aDppbmRleFBhdGhdOworICAgIGlmICghY2VsbC50ZXh0TGFi
ZWwuZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBvcHRpb24gPSBbc2VsZiBv
cHRpb25JdGVtQXRJbmRleFBhdGg6aW5kZXhQYXRoXTsKKyAgICBpZiAoIW9wdGlvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFvcHRpb24tPmlzU2VsZWN0ZWQpCisgICAgICAgIGNlbGwu
aW1hZ2VWaWV3LmltYWdlID0gW1VJSW1hZ2Ugc3lzdGVtSW1hZ2VOYW1lZDpAImNoZWNrbWFyay5j
aXJjbGUuZmlsbCJdOworICAgIGVsc2UKKyAgICAgICAgY2VsbC5pbWFnZVZpZXcuaW1hZ2UgPSBb
W1VJSW1hZ2Ugc3lzdGVtSW1hZ2VOYW1lZDpAImNpcmNsZSJdIGltYWdlV2l0aFRpbnRDb2xvcjpV
SUNvbG9yLnRlcnRpYXJ5TGFiZWxDb2xvciByZW5kZXJpbmdNb2RlOlVJSW1hZ2VSZW5kZXJpbmdN
b2RlQWx3YXlzT3JpZ2luYWxdOworCisgICAgW19jb250ZW50VmlldyBwYWdlXS0+c2V0Rm9jdXNl
ZEVsZW1lbnRTZWxlY3RlZEluZGV4KFtzZWxmIGZpbmRJdGVtSW5kZXhBdDppbmRleFBhdGhdLCB0
cnVlKTsKKyAgICBvcHRpb24tPmlzU2VsZWN0ZWQgPSAhb3B0aW9uLT5pc1NlbGVjdGVkOworfQor
CistICh2b2lkKW5leHQ6KGlkKXNlbmRlcgoreworICAgIFtzZWxmIGRpc21pc3NWaWV3Q29udHJv
bGxlckFuaW1hdGVkOllFUyBjb21wbGV0aW9uOlt3ZWFrQ29udGVudFZpZXcgPSBXZWFrT2JqQ1B0
cjxXS0NvbnRlbnRWaWV3PihfY29udGVudFZpZXcpXSB7CisgICAgICAgIGF1dG8gc3Ryb25nQ29u
dGVudFZpZXcgPSB3ZWFrQ29udGVudFZpZXcuZ2V0KCk7CisgICAgICAgIGlmIChzdHJvbmdDb250
ZW50VmlldykKKyAgICAgICAgICAgIFtzdHJvbmdDb250ZW50VmlldyBhY2Nlc3NvcnlUYWI6WUVT
XTsKKyAgICB9XTsKK30KKworLSAodm9pZClwcmV2aW91czooaWQpc2VuZGVyCit7CisgICAgW3Nl
bGYgZGlzbWlzc1ZpZXdDb250cm9sbGVyQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246W3dlYWtDb250
ZW50VmlldyA9IFdlYWtPYmpDUHRyPFdLQ29udGVudFZpZXc+KF9jb250ZW50VmlldyldIHsKKyAg
ICAgICAgYXV0byBzdHJvbmdDb250ZW50VmlldyA9IHdlYWtDb250ZW50Vmlldy5nZXQoKTsKKyAg
ICAgICAgaWYgKHN0cm9uZ0NvbnRlbnRWaWV3KQorICAgICAgICAgICAgW3N0cm9uZ0NvbnRlbnRW
aWV3IGFjY2Vzc29yeVRhYjpOT107CisgICAgfV07Cit9CisKKy0gKHZvaWQpY2xvc2U6KGlkKXNl
bmRlcgoreworICAgIFtzZWxmIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVkOllFUyBjb21w
bGV0aW9uOlt3ZWFrQ29udGVudFZpZXcgPSBXZWFrT2JqQ1B0cjxXS0NvbnRlbnRWaWV3PihfY29u
dGVudFZpZXcpXSB7CisgICAgICAgIGF1dG8gc3Ryb25nQ29udGVudFZpZXcgPSB3ZWFrQ29udGVu
dFZpZXcuZ2V0KCk7CisgICAgICAgIGlmIChzdHJvbmdDb250ZW50VmlldykKKyAgICAgICAgICAg
IFtzdHJvbmdDb250ZW50VmlldyBhY2Nlc3NvcnlEb25lXTsKKyAgICB9XTsKK30KKworQGVuZAor
CitAaW50ZXJmYWNlIFdLU2VsZWN0TXVsdGlwbGVQaWNrZXIgKCkgPFVJUG9wb3ZlclByZXNlbnRh
dGlvbkNvbnRyb2xsZXJEZWxlZ2F0ZT4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLU2VsZWN0
TXVsdGlwbGVQaWNrZXIgeworICAgIF9fd2VhayBXS0NvbnRlbnRWaWV3ICpfdmlldzsKKworICAg
IFJldGFpblB0cjxVSU5hdmlnYXRpb25Db250cm9sbGVyPiBfbmF2aWdhdGlvbkNvbnRyb2xsZXI7
CisgICAgUmV0YWluUHRyPFdLU2VsZWN0UGlja2VyVGFibGVWaWV3Q29udHJvbGxlcj4gX3RhYmxl
Vmlld0NvbnRyb2xsZXI7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aFZpZXc6KFdLQ29u
dGVudFZpZXcgKil2aWV3Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICBfdmlldyA9IHZpZXc7CisgICAgX3RhYmxlVmlld0NvbnRy
b2xsZXIgPSBhZG9wdE5TKFtbV0tTZWxlY3RQaWNrZXJUYWJsZVZpZXdDb250cm9sbGVyIGFsbG9j
XSBpbml0V2l0aFZpZXc6X3ZpZXddKTsKKyAgICBfbmF2aWdhdGlvbkNvbnRyb2xsZXIgPSBhZG9w
dE5TKFtbVUlOYXZpZ2F0aW9uQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhSb290Vmlld0NvbnRy
b2xsZXI6X3RhYmxlVmlld0NvbnRyb2xsZXIuZ2V0KCldKTsKKworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKWNvbmZpZ3VyZVByZXNlbnRhdGlvbgoreworICAgIGlmIChXZWJLaXQ6OmN1
cnJlbnRVc2VySW50ZXJmYWNlSWRpb21Jc1BhZE9yTWFjKCkpIHsKKyAgICAgICAgW19uYXZpZ2F0
aW9uQ29udHJvbGxlciBzZXRNb2RhbFByZXNlbnRhdGlvblN0eWxlOlVJTW9kYWxQcmVzZW50YXRp
b25Qb3BvdmVyXTsKKyAgICAgICAgW19uYXZpZ2F0aW9uQ29udHJvbGxlciBzZXROYXZpZ2F0aW9u
QmFySGlkZGVuOllFU107CisgICAgICAgIFtfdGFibGVWaWV3Q29udHJvbGxlciBzZXRQcmVmZXJy
ZWRDb250ZW50U2l6ZTpDR1NpemVNYWtlKHNlbGVjdFBvcG92ZXJMZW5ndGgsIHNlbGVjdFBvcG92
ZXJMZW5ndGgpXTsKKworICAgICAgICBVSVBvcG92ZXJQcmVzZW50YXRpb25Db250cm9sbGVyICpw
cmVzZW50YXRpb25Db250cm9sbGVyID0gW19uYXZpZ2F0aW9uQ29udHJvbGxlciBwb3BvdmVyUHJl
c2VudGF0aW9uQ29udHJvbGxlcl07CisgICAgICAgIHByZXNlbnRhdGlvbkNvbnRyb2xsZXIuZGVs
ZWdhdGUgPSBzZWxmOworICAgICAgICBwcmVzZW50YXRpb25Db250cm9sbGVyLnNvdXJjZVZpZXcg
PSBfdmlldzsKKyAgICAgICAgcHJlc2VudGF0aW9uQ29udHJvbGxlci5zb3VyY2VSZWN0ID0gQ0dS
ZWN0SW50ZWdyYWwoX3ZpZXcuZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5pbnRlcmFjdGlvblJl
Y3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIFtbX25hdmlnYXRpb25Db250cm9sbGVyIG5hdmln
YXRpb25CYXJdIHNldEJhclRpbnRDb2xvcjpVSUNvbG9yLnN5c3RlbUdyb3VwZWRCYWNrZ3JvdW5k
Q29sb3JdOworCisgICAgICAgIFVJUHJlc2VudGF0aW9uQ29udHJvbGxlciAqcHJlc2VudGF0aW9u
Q29udHJvbGxlciA9IFtfbmF2aWdhdGlvbkNvbnRyb2xsZXIgcHJlc2VudGF0aW9uQ29udHJvbGxl
cl07CisgICAgICAgIHByZXNlbnRhdGlvbkNvbnRyb2xsZXIuZGVsZWdhdGUgPSBzZWxmOworICAg
ICAgICBpZiAoW3ByZXNlbnRhdGlvbkNvbnRyb2xsZXIgaXNLaW5kT2ZDbGFzczpbX1VJU2hlZXRQ
cmVzZW50YXRpb25Db250cm9sbGVyIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIF9VSVNoZWV0UHJl
c2VudGF0aW9uQ29udHJvbGxlciAqc2hlZXRQcmVzZW50YXRpb25Db250cm9sbGVyID0gKF9VSVNo
ZWV0UHJlc2VudGF0aW9uQ29udHJvbGxlciAqKXByZXNlbnRhdGlvbkNvbnRyb2xsZXI7CisgICAg
ICAgICAgICBzaGVldFByZXNlbnRhdGlvbkNvbnRyb2xsZXIuX2RldGVudHMgPSBAW19VSVNoZWV0
RGV0ZW50Ll9tZWRpdW1EZXRlbnQsIF9VSVNoZWV0RGV0ZW50Ll9sYXJnZURldGVudF07CisgICAg
ICAgICAgICBzaGVldFByZXNlbnRhdGlvbkNvbnRyb2xsZXIuX3dpZHRoRm9sbG93c1ByZWZlcnJl
ZENvbnRlbnRTaXplV2hlbkJvdHRvbUF0dGFjaGVkID0gWUVTOworICAgICAgICAgICAgc2hlZXRQ
cmVzZW50YXRpb25Db250cm9sbGVyLl93YW50c0JvdHRvbUF0dGFjaGVkSW5Db21wYWN0SGVpZ2h0
ID0gWUVTOworICAgICAgICB9CisgICAgfQorfQorCisjcHJhZ21hIG1hcmsgV0tGb3JtQ29udHJv
bAorCistIChVSVZpZXcgKiljb250cm9sVmlldworeworICAgIHJldHVybiBuaWw7Cit9CisKKy0g
KHZvaWQpY29udHJvbEJlZ2luRWRpdGluZworeworICAgIFtfdmlldyBzdGFydFJlbGlucXVpc2hp
bmdGaXJzdFJlc3BvbmRlclRvRm9jdXNlZEVsZW1lbnRdOworCisgICAgW3NlbGYgY29uZmlndXJl
UHJlc2VudGF0aW9uXTsKKyAgICBVSVZpZXdDb250cm9sbGVyICpwcmVzZW50aW5nVmlld0NvbnRy
b2xsZXIgPSBbVUlWaWV3Q29udHJvbGxlciBfdmlld0NvbnRyb2xsZXJGb3JGdWxsU2NyZWVuUHJl
c2VudGF0aW9uRnJvbVZpZXc6X3ZpZXddOworICAgIFtwcmVzZW50aW5nVmlld0NvbnRyb2xsZXIg
cHJlc2VudFZpZXdDb250cm9sbGVyOl9uYXZpZ2F0aW9uQ29udHJvbGxlci5nZXQoKSBhbmltYXRl
ZDpZRVMgY29tcGxldGlvbjpuaWxdOworfQorCistICh2b2lkKWNvbnRyb2xFbmRFZGl0aW5nCit7
CisgICAgW192aWV3IHN0b3BSZWxpbnF1aXNoaW5nRmlyc3RSZXNwb25kZXJUb0ZvY3VzZWRFbGVt
ZW50XTsKKyAgICBbX3RhYmxlVmlld0NvbnRyb2xsZXIgZGlzbWlzc1ZpZXdDb250cm9sbGVyQW5p
bWF0ZWQ6Tk8gY29tcGxldGlvbjpuaWxdOworfQorCisjcHJhZ21hIG1hcmsgVUlQb3BvdmVyUHJl
c2VudGF0aW9uQ29udHJvbGxlckRlbGVnYXRlCisKKy0gKHZvaWQpcHJlc2VudGF0aW9uQ29udHJv
bGxlckRpZERpc21pc3M6KFVJUHJlc2VudGF0aW9uQ29udHJvbGxlciAqKXByZXNlbnRhdGlvbkNv
bnRyb2xsZXIKK3sKKyAgICBbX3ZpZXcgYWNjZXNzb3J5RG9uZV07Cit9CisKKyNwcmFnbWEgbWFy
ayBXS1Rlc3RpbmcKKworLSAoTlNJbmRleFBhdGggKilfaW5kZXhQYXRoRm9yUm93OihOU0ludGVn
ZXIpcm93SW5kZXgKK3sKKyAgICBOU0ludGVnZXIgY3VycmVudFNlY3Rpb24gPSAwOworICAgIE5T
SW50ZWdlciBjdXJyZW50Um93ID0gMDsKKyAgICBOU0ludGVnZXIgdG90YWxSb3dzID0gMDsKKwor
ICAgIGZvciAoYXV0byYgb3B0aW9uIDogX3ZpZXcuZm9jdXNlZFNlbGVjdEVsZW1lbnRPcHRpb25z
KSB7CisgICAgICAgIGlmIChvcHRpb24uaXNHcm91cCkgeworICAgICAgICAgICAgY3VycmVudFNl
Y3Rpb24rKzsKKyAgICAgICAgICAgIGN1cnJlbnRSb3cgPSAwOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG90YWxSb3dzID09IHJvd0luZGV4KQorICAg
ICAgICAgICAgcmV0dXJuIFtOU0luZGV4UGF0aCBpbmRleFBhdGhGb3JSb3c6Y3VycmVudFJvdyBp
blNlY3Rpb246Y3VycmVudFNlY3Rpb25dOworCisgICAgICAgIGN1cnJlbnRSb3crKzsKKyAgICAg
ICAgdG90YWxSb3dzKys7CisgICAgfQorCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClz
ZWxlY3RSb3c6KE5TSW50ZWdlcilyb3dJbmRleCBpbkNvbXBvbmVudDooTlNJbnRlZ2VyKWNvbXBv
bmVudEluZGV4IGV4dGVuZGluZ1NlbGVjdGlvbjooQk9PTClleHRlbmRpbmdTZWxlY3Rpb24KK3sK
KyAgICBOU0luZGV4UGF0aCAqaW5kZXhQYXRoID0gW3NlbGYgX2luZGV4UGF0aEZvclJvdzpyb3dJ
bmRleF07CisgICAgaWYgKCFpbmRleFBhdGgpCisgICAgICAgIHJldHVybjsKKworICAgIFtbX3Rh
YmxlVmlld0NvbnRyb2xsZXIgdGFibGVWaWV3XSBzZWxlY3RSb3dBdEluZGV4UGF0aDppbmRleFBh
dGggYW5pbWF0ZWQ6Tk8gc2Nyb2xsUG9zaXRpb246VUlUYWJsZVZpZXdTY3JvbGxQb3NpdGlvbk1p
ZGRsZV07CisgICAgW190YWJsZVZpZXdDb250cm9sbGVyIHRhYmxlVmlldzpbX3RhYmxlVmlld0Nv
bnRyb2xsZXIgdGFibGVWaWV3XSBkaWRTZWxlY3RSb3dBdEluZGV4UGF0aDppbmRleFBhdGhdOwor
fQorCitAZW5kCisKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGM5Yjkz
YmYyNTFiZmZmMmY2MDQzMGFhNDlkOWNlODAyMWZkNDliODkuLmU1ZDVlNTlhOTM0ODQ1ZWE4ODJj
MGUwN2VmOWQ4OWI0NzdlOTY0YmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMS0wMi0wOSAg
QWRpdHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU11bRkNS
XSBBZGQgbmV3IHBpY2tlciBmb3IgPHNlbGVjdCBtdWx0aXBsZT4gZWxlbWVudHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTYzNgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNzIzOTkzMzc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgV2Vuc29uIEhz
aWVoLgorCisgICAgICAgIEFkZGVkIGEgdGVzdCB3aGljaCBzZWxlY3RzIG9wdGlvbnMgdXNpbmcg
dGhlIG5ldyBtdWx0aS1zZWxlY3QgcGlja2VyLgorICAgICAgICBHcm91cGVkLCB1bmdyb3VwZWQs
IGFuZCBkaXNhYmxlZCBvcHRpb25zIGFyZSBhbGwgdGVzdGVkLgorCisgICAgICAgICogZmFzdC9m
b3Jtcy9pb3MvZm9ybS1jb250cm9sLXJlZnJlc2gvc2VsZWN0L3NlbGVjdC1tdWx0aXBsZS1waWNr
ZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2lvcy9mb3JtLWNv
bnRyb2wtcmVmcmVzaC9zZWxlY3Qvc2VsZWN0LW11bHRpcGxlLXBpY2tlci5odG1sOiBBZGRlZC4K
KwogMjAyMS0wMi0xMSAgQWRpdHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+CiAKICAg
ICAgICAgW2lPU10gU29tZSBjaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBjbGlwcGVk
IG9uIHRvcApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pb3MvZm9ybS1jb250
cm9sLXJlZnJlc2gvc2VsZWN0L3NlbGVjdC1tdWx0aXBsZS1waWNrZXItZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pb3MvZm9ybS1jb250cm9sLXJlZnJlc2gvc2VsZWN0L3Nl
bGVjdC1tdWx0aXBsZS1waWNrZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiNjFkMWJhZTMx
OTJmMTJjY2JmNDQzYTBlMWVjZTc0YjJkODFiYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2lvcy9mb3JtLWNvbnRyb2wtcmVmcmVzaC9zZWxlY3Qvc2VsZWN0LW11
bHRpcGxlLXBpY2tlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0NyBAQAorVGhpcyB0ZXN0IHZl
cmlmaWVzIHRoYXQgaW50ZXJhY3Rpbmcgd2l0aCBhIG11bHRpLXNlbGVjdCBwaWNrZXIgY29ycmVj
dGx5IHVwZGF0ZXMgdGhlIGVsZW1lbnQncyB2YWx1ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1Rlc3RpbmcgdW5ncm91cGVkIHNlbGVjdDoKKworRWxlbWVudCBpbml0aWFsbHkg
aGFzIG5vIHNlbGVjdGVkIHZhbHVlcy4KK1BBU1Mgc2VsZWN0VmFsdWVzIGlzICIiCisKK1NlbGVj
dCBvbmUgaXRlbS4KK1BBU1Mgc2VsZWN0VmFsdWVzIGlzICJBcHJpbCIKKworU2VsZWN0IG11bHRp
cGxlIGl0ZW1zLgorUEFTUyBzZWxlY3RWYWx1ZXMgaXMgIkFwcmlsLE1heSxKdW5lIgorCitTZWxl
Y3QgZGlzYWJsZWQgaXRlbS4KK1BBU1Mgc2VsZWN0VmFsdWVzIGlzICJBcHJpbCxNYXksSnVuZSIK
KworRGVzZWxlY3Qgb25lIGl0ZW0uCitQQVNTIHNlbGVjdFZhbHVlcyBpcyAiTWF5LEp1bmUiCisK
K0Rlc2VsZWN0IG11bHRpcGxlIGl0ZW1zLgorUEFTUyBzZWxlY3RWYWx1ZXMgaXMgIiIKKworCitU
ZXN0aW5nIGdyb3VwZWQgc2VsZWN0OgorCitTZWxlY3Qgb25lIGl0ZW0uCitQQVNTIGdyb3VwZWRT
ZWxlY3RWYWx1ZXMgaXMgIkp1bHkiCisKK1NlbGVjdCBtdWx0aXBsZSBpdGVtcy4KK1BBU1MgZ3Jv
dXBlZFNlbGVjdFZhbHVlcyBpcyAiSnVseSxPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyIgorCitT
ZWxlY3QgZGlzYWJsZWQgaXRlbS4KK1BBU1MgZ3JvdXBlZFNlbGVjdFZhbHVlcyBpcyAiSnVseSxP
Y3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyIgorCitEZXNlbGVjdCBvbmUgaXRlbS4KK1BBU1MgZ3Jv
dXBlZFNlbGVjdFZhbHVlcyBpcyAiSnVseSxOb3ZlbWJlcixEZWNlbWJlciIKKworRGVzZWxlY3Qg
bXVsdGlwbGUgaXRlbXMuCitQQVNTIGdyb3VwZWRTZWxlY3RWYWx1ZXMgaXMgIkRlY2VtYmVyIgor
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pb3MvZm9ybS1jb250cm9sLXJlZnJlc2gv
c2VsZWN0L3NlbGVjdC1tdWx0aXBsZS1waWNrZXIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvaW9zL2Zvcm0tY29udHJvbC1yZWZyZXNoL3NlbGVjdC9zZWxlY3QtbXVsdGlwbGUtcGlja2Vy
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2ZlZmQ5NjQ3OWZiNzJlOTRmZDA0NzYwZDdmMGU0ZTYxNTcwMDlh
NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW9zL2Zvcm0tY29u
dHJvbC1yZWZyZXNoL3NlbGVjdC9zZWxlY3QtbXVsdGlwbGUtcGlja2VyLmh0bWwKQEAgLTAsMCAr
MSwxMzYgQEAKKzwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZs
ZXhpYmxlVmlld3BvcnQ9dHJ1ZSBJT1NGb3JtQ29udHJvbFJlZnJlc2hFbmFibGVkPXRydWUgXSAt
LT4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29u
dGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHVzZXItc2NhbGFibGU9
bm8iPgorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vLi4vcmVz
b3VyY2VzL3VpLWhlbHBlci5qcyI+PC9zY3JpcHQ+CisgICAgPC9oZWFkPgorPGJvZHk+Cis8c2Vs
ZWN0IG11bHRpcGxlIGlkPSJzZWxlY3QiPgorICAgIDxvcHRpb24+SmFudWFyeTwvb3B0aW9uPgor
ICAgIDxvcHRpb24gZGlzYWJsZWQ+RmVicnVhcnk8L29wdGlvbj4KKyAgICA8b3B0aW9uPk1hcmNo
PC9vcHRpb24+CisgICAgPG9wdGlvbj5BcHJpbDwvb3B0aW9uPgorICAgIDxvcHRpb24+TWF5PC9v
cHRpb24+CisgICAgPG9wdGlvbj5KdW5lPC9vcHRpb24+CisgICAgPG9wdGlvbj5KdWx5PC9vcHRp
b24+CisgICAgPG9wdGlvbj5BdWd1c3Q8L29wdGlvbj4KKyAgICA8b3B0aW9uPlNlcHRlbWJlcjwv
b3B0aW9uPgorICAgIDxvcHRpb24+T2N0b2Jlcjwvb3B0aW9uPgorICAgIDxvcHRpb24+Tm92ZW1i
ZXI8L29wdGlvbj4KKyAgICA8b3B0aW9uPkRlY2VtYmVyPC9vcHRpb24+Cis8L3NlbGVjdD4KKwor
PHNlbGVjdCBtdWx0aXBsZSBpZD0iZ3JvdXBlZCI+CisgICAgPG9wdGdyb3VwIGxhYmVsPSJXaW50
ZXIiPgorICAgICAgICA8b3B0aW9uPkphbnVhcnk8L29wdGlvbj4KKyAgICAgICAgPG9wdGlvbj5G
ZWJydWFyeTwvb3B0aW9uPgorICAgICAgICA8b3B0aW9uPk1hcmNoPC9vcHRpb24+CisgICAgPC9v
cHRncm91cD4KKyAgICA8b3B0Z3JvdXAgbGFiZWw9IlNwcmluZyI+CisgICAgICAgIDxvcHRpb24+
QXByaWw8L29wdGlvbj4KKyAgICAgICAgPG9wdGlvbj5NYXk8L29wdGlvbj4KKyAgICAgICAgPG9w
dGlvbj5KdW5lPC9vcHRpb24+CisgICAgPC9vcHRncm91cD4KKyAgICA8b3B0Z3JvdXAgbGFiZWw9
IlN1bW1lciI+CisgICAgICAgIDxvcHRpb24+SnVseTwvb3B0aW9uPgorICAgICAgICA8b3B0aW9u
IGRpc2FibGVkPkF1Z3VzdDwvb3B0aW9uPgorICAgICAgICA8b3B0aW9uPlNlcHRlbWJlcjwvb3B0
aW9uPgorICAgIDwvb3B0Z3JvdXA+CisgICAgPG9wdGdyb3VwIGxhYmVsPSJGYWxsIj4KKyAgICAg
ICAgPG9wdGlvbj5PY3RvYmVyPC9vcHRpb24+CisgICAgICAgIDxvcHRpb24+Tm92ZW1iZXI8L29w
dGlvbj4KKyAgICAgICAgPG9wdGlvbj5EZWNlbWJlcjwvb3B0aW9uPgorICAgIDwvb3B0Z3JvdXA+
Cis8L3NlbGVjdD4KKzwvYm9keT4KKzxzY3JpcHQ+Citqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKwor
ZnVuY3Rpb24gdmFsdWVzRm9yU2VsZWN0RWxlbWVudChlbGVtZW50KSB7CisgICAgcmV0dXJuIEFy
cmF5LmZyb20oZWxlbWVudC5zZWxlY3RlZE9wdGlvbnMpLm1hcChvID0+IG8udmFsdWUpLnRvU3Ry
aW5nKCk7Cit9CisKK2FkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBhc3luYyAoKSA9PiB7CisgICAg
ZGVzY3JpcHRpb24oIlRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGludGVyYWN0aW5nIHdpdGggYSBt
dWx0aS1zZWxlY3QgcGlja2VyIGNvcnJlY3RseSB1cGRhdGVzIHRoZSBlbGVtZW50J3MgdmFsdWUu
Iik7CisKKyAgICBkZWJ1ZygiVGVzdGluZyB1bmdyb3VwZWQgc2VsZWN0OiIpOworCisgICAgZGVi
dWcoIlxuRWxlbWVudCBpbml0aWFsbHkgaGFzIG5vIHNlbGVjdGVkIHZhbHVlcy4iKTsKKyAgICBz
ZWxlY3RWYWx1ZXMgPSB2YWx1ZXNGb3JTZWxlY3RFbGVtZW50KHNlbGVjdCk7CisgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCJzZWxlY3RWYWx1ZXMiLCAiIik7CisKKyAgICBkZWJ1ZygiXG5TZWxl
Y3Qgb25lIGl0ZW0uIik7CisgICAgYXdhaXQgVUlIZWxwZXIuYWN0aXZhdGVFbGVtZW50KHNlbGVj
dCk7CisgICAgYXdhaXQgVUlIZWxwZXIuZW5zdXJlUHJlc2VudGF0aW9uVXBkYXRlKCk7CisgICAg
YXdhaXQgVUlIZWxwZXIuc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdygzKTsKKyAgICBhd2Fp
dCBVSUhlbHBlci5lbnN1cmVQcmVzZW50YXRpb25VcGRhdGUoKTsKKyAgICBzZWxlY3RWYWx1ZXMg
PSB2YWx1ZXNGb3JTZWxlY3RFbGVtZW50KHNlbGVjdCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJzZWxlY3RWYWx1ZXMiLCAiQXByaWwiKTsKKworICAgIGRlYnVnKCJcblNlbGVjdCBtdWx0
aXBsZSBpdGVtcy4iKQorICAgIGF3YWl0IFVJSGVscGVyLnNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNr
ZXJSb3coNCk7CisgICAgYXdhaXQgVUlIZWxwZXIuc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJv
dyg1KTsKKyAgICBhd2FpdCBVSUhlbHBlci5lbnN1cmVQcmVzZW50YXRpb25VcGRhdGUoKTsKKyAg
ICBzZWxlY3RWYWx1ZXMgPSB2YWx1ZXNGb3JTZWxlY3RFbGVtZW50KHNlbGVjdCk7CisgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCJzZWxlY3RWYWx1ZXMiLCAiQXByaWwsTWF5LEp1bmUiKTsKKwor
ICAgIGRlYnVnKCJcblNlbGVjdCBkaXNhYmxlZCBpdGVtLiIpOworICAgIGF3YWl0IFVJSGVscGVy
LnNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3coMSk7CisgICAgYXdhaXQgVUlIZWxwZXIuZW5z
dXJlUHJlc2VudGF0aW9uVXBkYXRlKCk7CisgICAgc2VsZWN0VmFsdWVzID0gdmFsdWVzRm9yU2Vs
ZWN0RWxlbWVudChzZWxlY3QpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygic2VsZWN0VmFs
dWVzIiwgIkFwcmlsLE1heSxKdW5lIik7CisKKyAgICBkZWJ1ZygiXG5EZXNlbGVjdCBvbmUgaXRl
bS4iKQorICAgIGF3YWl0IFVJSGVscGVyLnNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3coMyk7
CisgICAgc2VsZWN0VmFsdWVzID0gdmFsdWVzRm9yU2VsZWN0RWxlbWVudChzZWxlY3QpOworICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygic2VsZWN0VmFsdWVzIiwgIk1heSxKdW5lIik7CisKKyAg
ICBkZWJ1ZygiXG5EZXNlbGVjdCBtdWx0aXBsZSBpdGVtcy4iKQorICAgIGF3YWl0IFVJSGVscGVy
LnNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3coNCk7CisgICAgYXdhaXQgVUlIZWxwZXIuc2Vs
ZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdyg1KTsKKyAgICBzZWxlY3RWYWx1ZXMgPSB2YWx1ZXNG
b3JTZWxlY3RFbGVtZW50KHNlbGVjdCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJzZWxl
Y3RWYWx1ZXMiLCAiIik7CisKKyAgICBkZWJ1ZygiXG5cblRlc3RpbmcgZ3JvdXBlZCBzZWxlY3Q6
Iik7CisgICAgYXdhaXQgVUlIZWxwZXIuZGVhY3RpdmF0ZUZvcm1Db250cm9sKHNlbGVjdCk7Cisg
ICAgYXdhaXQgVUlIZWxwZXIuYWN0aXZhdGVFbGVtZW50KGdyb3VwZWQpOworCisgICAgZGVidWco
IlxuU2VsZWN0IG9uZSBpdGVtLiIpOworICAgIGF3YWl0IFVJSGVscGVyLnNlbGVjdEZvcm1BY2Nl
c3NvcnlQaWNrZXJSb3coNik7CisgICAgYXdhaXQgVUlIZWxwZXIuZW5zdXJlUHJlc2VudGF0aW9u
VXBkYXRlKCk7CisgICAgZ3JvdXBlZFNlbGVjdFZhbHVlcyA9IHZhbHVlc0ZvclNlbGVjdEVsZW1l
bnQoZ3JvdXBlZCk7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJncm91cGVkU2VsZWN0VmFs
dWVzIiwgIkp1bHkiKTsKKworICAgIGRlYnVnKCJcblNlbGVjdCBtdWx0aXBsZSBpdGVtcy4iKTsK
KyAgICBhd2FpdCBVSUhlbHBlci5zZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93KDkpOworICAg
IGF3YWl0IFVJSGVscGVyLnNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3coMTApOworICAgIGF3
YWl0IFVJSGVscGVyLnNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3coMTEpOworICAgIGF3YWl0
IFVJSGVscGVyLmVuc3VyZVByZXNlbnRhdGlvblVwZGF0ZSgpOworICAgIGdyb3VwZWRTZWxlY3RW
YWx1ZXMgPSB2YWx1ZXNGb3JTZWxlY3RFbGVtZW50KGdyb3VwZWQpOworICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygiZ3JvdXBlZFNlbGVjdFZhbHVlcyIsICJKdWx5LE9jdG9iZXIsTm92ZW1iZXIs
RGVjZW1iZXIiKTsKKworICAgIGRlYnVnKCJcblNlbGVjdCBkaXNhYmxlZCBpdGVtLiIpOworICAg
IGF3YWl0IFVJSGVscGVyLnNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3coNyk7CisgICAgYXdh
aXQgVUlIZWxwZXIuZW5zdXJlUHJlc2VudGF0aW9uVXBkYXRlKCk7CisgICAgZ3JvdXBlZFNlbGVj
dFZhbHVlcyA9IHZhbHVlc0ZvclNlbGVjdEVsZW1lbnQoZ3JvdXBlZCk7CisgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCJncm91cGVkU2VsZWN0VmFsdWVzIiwgIkp1bHksT2N0b2JlcixOb3ZlbWJl
cixEZWNlbWJlciIpOworCisgICAgZGVidWcoIlxuRGVzZWxlY3Qgb25lIGl0ZW0uIik7CisgICAg
YXdhaXQgVUlIZWxwZXIuc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdyg5KTsKKyAgICBhd2Fp
dCBVSUhlbHBlci5lbnN1cmVQcmVzZW50YXRpb25VcGRhdGUoKTsKKyAgICBncm91cGVkU2VsZWN0
VmFsdWVzID0gdmFsdWVzRm9yU2VsZWN0RWxlbWVudChncm91cGVkKTsKKyAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoImdyb3VwZWRTZWxlY3RWYWx1ZXMiLCAiSnVseSxOb3ZlbWJlcixEZWNlbWJl
ciIpOworCisgICAgZGVidWcoIlxuRGVzZWxlY3QgbXVsdGlwbGUgaXRlbXMuIik7CisgICAgYXdh
aXQgVUlIZWxwZXIuc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdyg2KTsKKyAgICBhd2FpdCBV
SUhlbHBlci5zZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93KDEwKTsKKyAgICBhd2FpdCBVSUhl
bHBlci5lbnN1cmVQcmVzZW50YXRpb25VcGRhdGUoKTsKKyAgICBncm91cGVkU2VsZWN0VmFsdWVz
ID0gdmFsdWVzRm9yU2VsZWN0RWxlbWVudChncm91cGVkKTsKKyAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoImdyb3VwZWRTZWxlY3RWYWx1ZXMiLCAiRGVjZW1iZXIiKTsKKworICAgIGRlYnVnKCIi
KTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3JpcHQ+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>