<?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>221164</bug_id>
          
          <creation_ts>2021-01-29 16:11:15 -0800</creation_ts>
          <short_desc>Update consumeNumberRaw() to return an Optional&lt;double&gt; rather than using a bool/out parameter pattern</short_desc>
          <delta_ts>2021-01-29 20:14:11 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=221174</see_also>
          <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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1723933</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-29 16:11:15 -0800</bug_when>
    <thetext>Update consumeNumberRaw() to return an Optional&lt;double&gt; rather than using a bool/out parameter pattern</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723934</commentid>
    <comment_count>1</comment_count>
      <attachid>418783</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-29 16:12:18 -0800</bug_when>
    <thetext>Created attachment 418783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723965</commentid>
    <comment_count>2</comment_count>
      <attachid>418783</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-01-29 17:09:15 -0800</bug_when>
    <thetext>Comment on attachment 418783
Patch

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

Seems like a helper that does a number or a percentage and converts the percentage just by dividing by 100 would simplify code in a few different places.

&gt; Source/WebCore/css/parser/CSSPropertyParser.cpp:5038
&gt; +            if (auto num = consumeNumberRaw(m_range)) {

Could have expanded the name num to number since touching this code.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:780
&gt; +            alpha = clampTo&lt;double&gt;(*percent / 100.0f, 0.0, 1.0);

The &quot;f&quot; here seems wrong. Was in the old code too, but wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723975</commentid>
    <comment_count>3</comment_count>
      <attachid>418783</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-29 17:45:20 -0800</bug_when>
    <thetext>Comment on attachment 418783
Patch

Will address feedback in follow up already in the pipeline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723983</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-29 18:13:51 -0800</bug_when>
    <thetext>Committed r272094: &lt;https://trac.webkit.org/changeset/272094&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 418783.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723984</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-29 18:14:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/73780435&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724005</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-01-29 20:14:05 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #3)
&gt; Comment on attachment 418783 [details]
&gt; Patch
&gt; 
&gt; Will address feedback in follow up already in the pipeline.

Specifically, they are addressed by https://bugs.webkit.org/show_bug.cgi?id=221174.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418783</attachid>
            <date>2021-01-29 16:12:18 -0800</date>
            <delta_ts>2021-01-29 18:13:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221164-20210129161218.patch</filename>
            <type>text/plain</type>
            <size>27110</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MjA4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDIxLTAxLTI5ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGUgY29uc3VtZU51bWJlclJh
dygpIHRvIHJldHVybiBhbiBPcHRpb25hbDxkb3VibGU+IHJhdGhlciB0aGFuIHVzaW5nIGEgYm9v
bC9vdXQgcGFyYW1ldGVyIHBhdHRlcm4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMTE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1hdGNoIG1vZGVybiBjb252ZW50aW9uIGFuZCB0aGUgb3RoZXIgcmF3
IGNvbnN1bWVycyBieSByZXR1cm5pbmcgYSBPcHRpb25hbDxkb3VibGU+CisgICAgICAgIHJhdGhl
ciB0aGFuIHVzaW5nIHRoZSBvbGRlciBib29sIC8gb3V0IHBhcmFtZXRlciBwYXR0ZXJuLiAKKwor
ICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29uc3VtZUZvbnRWYXJpYXRpb25UYWcpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Vt
ZUN1YmljQmV6aWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVTcHJpbmdGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lUGVyc3BlY3RpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29uc3VtZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcjo6
Y29uc3VtZUZsZXgpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2Fs
Y1BhcnNlcjo6Y29uc3VtZU51bWJlclJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJHQlBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZUhTTFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpwYXJzZU9wdGlvbmFsQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpwYXJzZUxhYlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUxDSFBhcmFtZXRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JU
eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNl
Q29sb3JGdW5jdGlvbkZvckxhYlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ29sb3JXb3JrZXJTYWZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0
ZWRHcmFkaWVudENvbG9yU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVMaW5lSGVpZ2h0UmF3KToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VySGVscGVycy5oOgorCiAyMDIxLTAxLTI5ICBGdWppaSBIaXJvbm9yaSAg
PEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgR3JhcGhp
Y3NDb250ZXh0R0w6OkRlc3RpbmF0aW9uIGVudW0gY2xhc3MKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyNzIwNzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIwLDEyICs1MjAsMTEgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZUZvbnRWYXJpYQogICAgIGlmIChyYW5nZS5hdEVuZCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGRvdWJsZSB0YWdWYWx1ZSA9IDA7Ci0gICAgYXV0byBzdWNjZXNzID0g
Y29uc3VtZU51bWJlclJhdyhyYW5nZSwgdGFnVmFsdWUpOwotICAgIGlmICghc3VjY2VzcykKKyAg
ICBhdXRvIHRhZ1ZhbHVlID0gY29uc3VtZU51bWJlclJhdyhyYW5nZSk7CisgICAgaWYgKCF0YWdW
YWx1ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCi0gICAgcmV0dXJuIENTU0ZvbnRW
YXJpYXRpb25WYWx1ZTo6Y3JlYXRlKHRhZywgdGFnVmFsdWUpOworICAgIHJldHVybiBDU1NGb250
VmFyaWF0aW9uVmFsdWU6OmNyZWF0ZSh0YWcsICp0YWdWYWx1ZSk7CiB9CiAgICAgCiBzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udFZhcmlhdGlvblNldHRpbmdzKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQpAQCAtMTUwOCwyMiArMTUwNywzNiBAQCBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lQ3ViaWNCZXppCiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZUNv
cHkgPSByYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rp
b24ocmFuZ2VDb3B5KTsKIAotICAgIGRvdWJsZSB4MSwgeTEsIHgyLCB5MjsKLSAgICBpZiAoY29u
c3VtZU51bWJlclJhdyhhcmdzLCB4MSkKLSAgICAgICAgJiYgeDEgPj0gMCAmJiB4MSA8PSAxCi0g
ICAgICAgICYmIGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykKLSAgICAgICAg
JiYgY29uc3VtZU51bWJlclJhdyhhcmdzLCB5MSkKLSAgICAgICAgJiYgY29uc3VtZUNvbW1hSW5j
bHVkaW5nV2hpdGVzcGFjZShhcmdzKQotICAgICAgICAmJiBjb25zdW1lTnVtYmVyUmF3KGFyZ3Ms
IHgyKQotICAgICAgICAmJiB4MiA+PSAwICYmIHgyIDw9IDEKLSAgICAgICAgJiYgY29uc3VtZUNv
bW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKQotICAgICAgICAmJiBjb25zdW1lTnVtYmVyUmF3
KGFyZ3MsIHkyKQotICAgICAgICAmJiBhcmdzLmF0RW5kKCkpIHsKLSAgICAgICAgcmFuZ2UgPSBy
YW5nZUNvcHk7Ci0gICAgICAgIHJldHVybiBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFs
dWU6OmNyZWF0ZSh4MSwgeTEsIHgyLCB5Mik7Ci0gICAgfQorICAgIGF1dG8geDEgPSBjb25zdW1l
TnVtYmVyUmF3KGFyZ3MpOworICAgIGlmICgheDEgfHwgKngxIDwgMCB8fCAqeDEgPiAxKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBpZiAoIWNvbnN1bWVDb21tYUluY2x1ZGlu
Z1doaXRlc3BhY2UoYXJncykpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IG51bGxwdHI7CisgICAgYXV0byB5MSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7CisgICAgaWYg
KCF5MSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIWNvbnN1bWVDb21tYUlu
Y2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
YXV0byB4MiA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7CisgICAgaWYgKCF4MiB8fCAqeDIgPCAw
IHx8ICp4MiA+IDEpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFjb25zdW1l
Q29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8geTIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOworICAgIGlmICgheTIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFhcmdzLmF0RW5kKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmFuZ2UgPSByYW5nZUNvcHk7CisgICAgcmV0dXJuIENT
U0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKCp4MSwgKnkxLCAqeDIsICp5
Mik7CiB9CiAKIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVTcHJpbmdGdW5jdGlvbihD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTE1MzMsMjMgKzE1NDYsMjMgQEAgc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNwcmluZ0Z1bgogICAgIENTU1BhcnNlclRva2VuUmFu
Z2UgYXJncyA9IGNvbnN1bWVGdW5jdGlvbihyYW5nZUNvcHkpOwogCiAgICAgLy8gTWFzcyBtdXN0
IGJlIGdyZWF0ZXIgdGhhbiAwLgotICAgIGRvdWJsZSBtYXNzOwotICAgIGlmICghY29uc3VtZU51
bWJlclJhdyhhcmdzLCBtYXNzKSB8fCBtYXNzIDw9IDApCisgICAgYXV0byBtYXNzID0gY29uc3Vt
ZU51bWJlclJhdyhhcmdzKTsKKyAgICBpZiAoIW1hc3MgfHwgKm1hc3MgPD0gMCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgLy8gU3RpZmZuZXNzIG11c3QgYmUgZ3JlYXRlciB0
aGFuIDAuCi0gICAgZG91YmxlIHN0aWZmbmVzczsKLSAgICBpZiAoIWNvbnN1bWVOdW1iZXJSYXco
YXJncywgc3RpZmZuZXNzKSB8fCBzdGlmZm5lc3MgPD0gMCkKKyAgICBhdXRvIHN0aWZmbmVzcyA9
IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7CisgICAgaWYgKCFzdGlmZm5lc3MgfHwgKnN0aWZmbmVz
cyA8PSAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBEYW1waW5nIGNv
ZWZmaWNpZW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuCi0gICAgZG91Ymxl
IGRhbXBpbmc7Ci0gICAgaWYgKCFjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIGRhbXBpbmcpIHx8IGRh
bXBpbmcgPCAwKQorICAgIGF1dG8gZGFtcGluZyA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7Cisg
ICAgaWYgKCFkYW1waW5nIHx8ICpkYW1waW5nIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCiAgICAgLy8gSW5pdGlhbCB2ZWxvY2l0eSBtYXkgaGF2ZSBhbnkgdmFsdWUuCi0gICAg
ZG91YmxlIGluaXRpYWxWZWxvY2l0eTsKLSAgICBpZiAoIWNvbnN1bWVOdW1iZXJSYXcoYXJncywg
aW5pdGlhbFZlbG9jaXR5KSkKKyAgICBhdXRvIGluaXRpYWxWZWxvY2l0eSA9IGNvbnN1bWVOdW1i
ZXJSYXcoYXJncyk7CisgICAgaWYgKCFpbml0aWFsVmVsb2NpdHkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCkBAIC0xNTU3LDcgKzE1NzAsNyBAQCBz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lU3ByaW5nRnVuCiAKICAgICByYW5nZSA9IHJh
bmdlQ29weTsKIAotICAgIHJldHVybiBDU1NTcHJpbmdUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVh
dGUobWFzcywgc3RpZmZuZXNzLCBkYW1waW5nLCBpbml0aWFsVmVsb2NpdHkpOworICAgIHJldHVy
biBDU1NTcHJpbmdUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUoKm1hc3MsICpzdGlmZm5lc3Ms
ICpkYW1waW5nLCAqaW5pdGlhbFZlbG9jaXR5KTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1
ZT4gY29uc3VtZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQpAQCAtMTg3OCwxNiArMTg5MSwx
NSBAQCBzdGF0aWMgYm9vbCBjb25zdW1lTnVtYmVycyhDU1NQYXJzZXJUb2tlCiAKIHN0YXRpYyBi
b29sIGNvbnN1bWVQZXJzcGVjdGl2ZShDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBDU1NQYXJz
ZXJNb2RlIGNzc1BhcnNlck1vZGUsIFJlZlB0cjxDU1NGdW5jdGlvblZhbHVlPiYgdHJhbnNmb3Jt
VmFsdWUpCiB7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZSA9IGNv
bnN1bWVMZW5ndGgoYXJncywgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsK
LSAgICBpZiAoIXBhcnNlZFZhbHVlKSB7Ci0gICAgICAgIGRvdWJsZSBwZXJzcGVjdGl2ZTsKLSAg
ICAgICAgaWYgKCFjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIHBlcnNwZWN0aXZlKSB8fCBwZXJzcGVj
dGl2ZSA8IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHBhcnNlZFZhbHVl
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwZXJzcGVjdGl2ZSwgQ1NTVW5pdFR5cGU6OkNT
U19QWCk7CisgICAgaWYgKGF1dG8gcGFyc2VkVmFsdWUgPSBjb25zdW1lTGVuZ3RoKGFyZ3MsIGNz
c1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkpIHsKKyAgICAgICAgdHJhbnNmb3Jt
VmFsdWUtPmFwcGVuZChwYXJzZWRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotICAgIGlmICghcGFyc2VkVmFsdWUpCisKKyAgICBhdXRvIHBlcnNw
ZWN0aXZlID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKKyAgICBpZiAoIXBlcnNwZWN0aXZlIHx8
ICpwZXJzcGVjdGl2ZSA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0cmFuc2Zvcm1W
YWx1ZS0+YXBwZW5kKHBhcnNlZFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIHRyYW5zZm9y
bVZhbHVlLT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgqcGVyc3BlY3RpdmUsIENT
U1VuaXRUeXBlOjpDU1NfUFgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjM2MywxNCAr
MjM3NSwxNCBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3Vyc29yKENTCiB7CiAg
ICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKICAgICB3aGlsZSAoUmVmUHRyPENTU1ZhbHVl
PiBpbWFnZSA9IGNvbnN1bWVJbWFnZShyYW5nZSwgY29udGV4dCwgeyBBbGxvd2VkSW1hZ2VUeXBl
OjpVUkxGdW5jdGlvbiwgQWxsb3dlZEltYWdlVHlwZTo6SW1hZ2VTZXQgfSkpIHsKLSAgICAgICAg
ZG91YmxlIG51bTsKICAgICAgICAgSW50UG9pbnQgaG90U3BvdCgtMSwgLTEpOwogICAgICAgICBi
b29sIGhvdFNwb3RTcGVjaWZpZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGNvbnN1bWVOdW1iZXJS
YXcocmFuZ2UsIG51bSkpIHsKLSAgICAgICAgICAgIGhvdFNwb3Quc2V0WChpbnQobnVtKSk7Ci0g
ICAgICAgICAgICBpZiAoIWNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIG51bSkpCisgICAgICAgIGlm
IChhdXRvIHggPSBjb25zdW1lTnVtYmVyUmF3KHJhbmdlKSkgeworICAgICAgICAgICAgaG90U3Bv
dC5zZXRYKHN0YXRpY19jYXN0PGludD4oKngpKTsKKyAgICAgICAgICAgIGF1dG8geSA9IGNvbnN1
bWVOdW1iZXJSYXcocmFuZ2UpOworICAgICAgICAgICAgaWYgKCF5KQogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaG90U3BvdC5zZXRZKGludChudW0pKTsKKyAg
ICAgICAgICAgIGhvdFNwb3Quc2V0WShzdGF0aWNfY2FzdDxpbnQ+KCp5KSk7CiAgICAgICAgICAg
ICBob3RTcG90U3BlY2lmaWVkID0gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0yNDg0LDIyICsyNDk2
LDE4IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUKIHsKICAgICBp
ZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICByZXR1cm4gY29u
c3VtZUlkZW50KHJhbmdlKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZh
bHVlID0gY29uc3VtZUxlbmd0aChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZUFsbCk7
Ci0gICAgaWYgKCFwYXJzZWRWYWx1ZSkgewotICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHF1
aXJrIG9ubHkgYXBwbHkgdG8gdGhlIHdlYmtpdCBwcmVmaXhlZCB2ZXJzaW9uIG9mIHRoZSBwcm9w
ZXJ0eS4KLSAgICAgICAgZG91YmxlIHBlcnNwZWN0aXZlOwotICAgICAgICBpZiAoIWNvbnN1bWVO
dW1iZXJSYXcocmFuZ2UsIHBlcnNwZWN0aXZlKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocGVyc3Bl
Y3RpdmUsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KIAotICAgIGlmICghcGFyc2VkVmFs
dWUpCisgICAgaWYgKGF1dG8gcGFyc2VkVmFsdWUgPSBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjc3NQ
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlQWxsKSkgeworICAgICAgICBpZiAocGFyc2VkVmFsdWUtPmlz
UG9zaXRpdmUoKS52YWx1ZU9yKHRydWUpKQorICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVl
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAKLSAgICBpZiAocGFyc2VkVmFsdWUt
PmlzUG9zaXRpdmUoKS52YWx1ZU9yKHRydWUpKQotICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWU7
Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHF1aXJrIG9u
bHkgYXBwbHkgdG8gdGhlIHdlYmtpdCBwcmVmaXhlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eS4K
KyAgICBhdXRvIHBlcnNwZWN0aXZlID0gY29uc3VtZU51bWJlclJhdyhyYW5nZSk7CisgICAgaWYg
KCFwZXJzcGVjdGl2ZSB8fCAqcGVyc3BlY3RpdmUgPCAwKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgqcGVyc3BlY3RpdmUsIENT
U1VuaXRUeXBlOjpDU1NfUFgpOwogfQogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKQEAg
LTUwMjcsMTUgKzUwMzUsMTQgQEAgYm9vbCBDU1NQcm9wZXJ0eVBhcnNlcjo6Y29uc3VtZUZsZXgo
Ym9vbAogICAgIH0gZWxzZSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAg
d2hpbGUgKCFtX3JhbmdlLmF0RW5kKCkgJiYgaW5kZXgrKyA8IDMpIHsKLSAgICAgICAgICAgIGRv
dWJsZSBudW07Ci0gICAgICAgICAgICBpZiAoY29uc3VtZU51bWJlclJhdyhtX3JhbmdlLCBudW0p
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG51bSA8IDApCisgICAgICAgICAgICBpZiAoYXV0byBu
dW0gPSBjb25zdW1lTnVtYmVyUmF3KG1fcmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgaWYgKCpu
dW0gPCAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgaWYgKGZsZXhHcm93ID09IHVuc2V0VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGZsZXhH
cm93ID0gbnVtOworICAgICAgICAgICAgICAgICAgICBmbGV4R3JvdyA9ICpudW07CiAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZmxleFNocmluayA9PSB1bnNldFZhbHVlKQotICAgICAgICAgICAg
ICAgICAgICBmbGV4U2hyaW5rID0gbnVtOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFudW0p
IC8vIGZsZXggb25seSBhbGxvd3MgYSBiYXNpcyBvZiAwIChzYW5zIHVuaXRzKSBpZiBmbGV4LWdy
b3cgYW5kIGZsZXgtc2hyaW5rIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlbiBzZXQuCisgICAgICAg
ICAgICAgICAgICAgIGZsZXhTaHJpbmsgPSAqbnVtOworICAgICAgICAgICAgICAgIGVsc2UgaWYg
KCEqbnVtKSAvLyBmbGV4IG9ubHkgYWxsb3dzIGEgYmFzaXMgb2YgMCAoc2FucyB1bml0cykgaWYg
ZmxleC1ncm93IGFuZCBmbGV4LXNocmluayB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0Lgog
ICAgICAgICAgICAgICAgICAgICBmbGV4QmFzaXMgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KDAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24gMjcy
MDczKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8gQ29weXJpZ2h0IDIwMTYg
VGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMTI0LDEzICsxMjQsMTIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShtX2NhbGNW
YWx1ZS0+ZG91YmxlVmFsdWUoKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwogICAgIH0KIAot
ICAgIGJvb2wgY29uc3VtZU51bWJlclJhdyhkb3VibGUmIHJlc3VsdCkKKyAgICBPcHRpb25hbDxk
b3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoKQogICAgIHsKICAgICAgICAgaWYgKCFtX2NhbGNWYWx1
ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmVzdWx0
ID0gbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICByZXR1cm4gbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCk7CiAgICAgfQogCiAgICAgT3B0
aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdygpCkBAIC0yMTIsMjEgKzIxMSwyMCBAQCBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2CiAgICAgcmV0dXJuIGNvbnN1
bWVJbnRlZ2VyKHJhbmdlLCAxKTsKIH0KIAotYm9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdl
KQorT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9r
ZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVy
VG9rZW4pIHsKICAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZU5vbk5lZ2F0aXZl
ICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1l
cmljVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICByZXR1cm4gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKS5udW1lcmljVmFsdWUoKTsKICAgICB9CiAKICAgICBpZiAodG9rZW4udHlwZSgpICE9IEZ1
bmN0aW9uVG9rZW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKLSAgICByZXR1cm4gY2FsY1BhcnNlci5jb25z
dW1lTnVtYmVyUmF3KHJlc3VsdCk7CisgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZU51bWJl
clJhdygpOwogfQogCiAvLyBGSVhNRTogV29yayBvdXQgaWYgdGhpcyBjYW4ganVzdCBjYWxsIGNv
bnN1bWVOdW1iZXJSYXcKQEAgLTI0Miw5ICsyNDAsOCBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVOdW1iZXIoCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IGRvdWJsZSBudW1iZXI7Ci0gICAgaWYgKGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIG51bWJlciwg
dmFsdWVSYW5nZSkpCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZVZhbHVlKG51bWJlciwgdG9rZW4udW5pdFR5cGUoKSk7CisgICAgaWYgKGF1dG8gbnVtYmVy
ID0gY29uc3VtZU51bWJlclJhdyhyYW5nZSwgdmFsdWVSYW5nZSkpCisgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKCpudW1iZXIsIHRva2VuLnVuaXRU
eXBlKCkpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0yNjQsMjcgKzI2MSwyMCBAQCBP
cHRpb25hbDxkb3VibGU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyCiAjaWYgIUVOQUJMRShWQVJJ
QVRJT05fRk9OVFMpCiAgICAgICAgICYmIHRva2VuLm51bWVyaWNWYWx1ZVR5cGUoKSA9PSBJbnRl
Z2VyVmFsdWVUeXBlICYmIGRpdmlzaWJsZUJ5MTAwKHRva2VuLm51bWVyaWNWYWx1ZSgpKQogI2Vu
ZGlmCi0gICAgKSB7Ci0gICAgICAgIGRvdWJsZSByZXN1bHQ7Ci0gICAgICAgIGlmIChjb25zdW1l
TnVtYmVyUmF3KHJhbmdlLCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9CisgICAgKQorICAgICAgICByZXR1cm4g
Y29uc3VtZU51bWJlclJhdyhyYW5nZSk7CiAKICAgICBpZiAodG9rZW4udHlwZSgpICE9IEZ1bmN0
aW9uVG9rZW4pCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyAiW0ZvciBj
YWxjKCldLCB0aGUgdXNlZCB2YWx1ZSByZXN1bHRpbmcgZnJvbSBhbiBleHByZXNzaW9uIG11c3Qg
YmUgY2xhbXBlZCB0byB0aGUgcmFuZ2UgYWxsb3dlZCBpbiB0aGUgdGFyZ2V0IGNvbnRleHQuIgog
ICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVt
YmVyLCBWYWx1ZVJhbmdlQWxsKTsKLSAgICBkb3VibGUgcmVzdWx0OwotICAgIGlmIChjYWxjUGFy
c2VyLmNvbnN1bWVOdW1iZXJSYXcocmVzdWx0KQorICAgIGlmIChhdXRvIHJlc3VsdCA9IGNhbGNQ
YXJzZXIuY29uc3VtZU51bWJlclJhdygpOyByZXN1bHQKICNpZiAhRU5BQkxFKFZBUklBVElPTl9G
T05UUykKLSAgICAgICAgJiYgcmVzdWx0ID4gMCAmJiByZXN1bHQgPCAxMDAwICYmIGRpdmlzaWJs
ZUJ5MTAwKHJlc3VsdCkKKyAgICAgICAgJiYgKnJlc3VsdCA+IDAgJiYgKnJlc3VsdCA8IDEwMDAg
JiYgZGl2aXNpYmxlQnkxMDAoKnJlc3VsdCkKICNlbmRpZgotICAgICkgewotICAgICAgICByZXN1
bHQgPSBzdGQ6Om1pbihzdGQ6Om1heChyZXN1bHQsIHN0ZDo6bmV4dGFmdGVyKDAuLCAxLikpLCBz
dGQ6Om5leHRhZnRlcigxMDAwLiwgMC4pKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
CisgICAgKQorICAgICAgICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgoKnJlc3VsdCwgc3RkOjpu
ZXh0YWZ0ZXIoMC4sIDEuKSksIHN0ZDo6bmV4dGFmdGVyKDEwMDAuLCAwLikpOwogCiAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIH0KQEAgLTY4MSwxMyArNjcxLDEzIEBAIHN0YXRpYyBDb2xvciBw
YXJzZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2UKIAogICAgIGJvb2wgaXNQZXJjZW50YWdlID0gZmFs
c2U7CiAgICAgZG91YmxlIGNvbG9yUGFyYW1ldGVyOwotICAgIGlmICghY29uc3VtZU51bWJlclJh
dyhhcmdzLCBjb2xvclBhcmFtZXRlcikpIHsKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNv
bnN1bWVQZXJjZW50UmF3KGFyZ3MpKSB7Ci0gICAgICAgICAgICBjb2xvclBhcmFtZXRlciA9ICpw
ZXJjZW50OwotICAgICAgICAgICAgaXNQZXJjZW50YWdlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICB9CisgICAgaWYgKGF1dG8gbnVtYmVy
ID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKKyAgICAgICAgY29sb3JQYXJhbWV0ZXIgPSAqbnVt
YmVyOworICAgIGVsc2UgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3Mp
KSB7CisgICAgICAgIGNvbG9yUGFyYW1ldGVyID0gKnBlcmNlbnQ7CisgICAgICAgIGlzUGVyY2Vu
dGFnZSA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBlbnVt
IGNsYXNzIENvbG9yU3ludGF4IHsKICAgICAgICAgQ29tbWFzLApAQCAtNzA4LDE4ICs2OTgsMTkg
QEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogICAgICAgICBpZiAo
aSA9PSAxKQogICAgICAgICAgICAgc3ludGF4ID0gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVz
cGFjZShhcmdzKSA/IENvbG9yU3ludGF4OjpDb21tYXMgOiBDb2xvclN5bnRheDo6V2hpdGVzcGFj
ZVNsYXNoOwogICAgICAgICBlbHNlIGlmICghY29uc3VtZVNlcGFyYXRvcigpKQotICAgICAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4geyB9OwogCiAgICAgICAgIGlm
IChpc1BlcmNlbnRhZ2UpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1l
UGVyY2VudFJhdyhhcmdzKSkKLSAgICAgICAgICAgICAgICBjb2xvclBhcmFtZXRlciA9ICpwZXJj
ZW50OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwor
ICAgICAgICAgICAgYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CisgICAg
ICAgICAgICBpZiAoIXBlcmNlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIGNvbG9yQXJyYXlbaV0gPSBjbGFtcFJHQkNvbXBvbmVudCgqcGVyY2VudCwgdHJ1ZSk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWNvbnN1bWVOdW1iZXJSYXcoYXJn
cywgY29sb3JQYXJhbWV0ZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAg
ICAgICAgICAgYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOworICAgICAgICAg
ICAgaWYgKCFudW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAg
IGNvbG9yQXJyYXlbaV0gPSBjbGFtcFJHQkNvbXBvbmVudCgqbnVtYmVyLCBmYWxzZSk7CiAgICAg
ICAgIH0KLSAgICAgICAgY29sb3JBcnJheVtpXSA9IGNsYW1wUkdCQ29tcG9uZW50KGNvbG9yUGFy
YW1ldGVyLCBpc1BlcmNlbnRhZ2UpOwogICAgIH0KIAogICAgIC8vIEhpc3RvcmljYWxseSwgYWxw
aGEgd2FzIG9ubHkgcGFyc2VkIGZvciByZ2JhKCksIGJ1dCBjc3MtY29sb3ItNCBzcGVjaWZpZXMg
dGhhdCByZ2JhKCkgaXMgYSBzaW1wbGUgYWxpYXMgZm9yIHJnYigpLgpAQCAtNzMyLDE4ICs3MjMs
MTYgQEAgc3RhdGljIENvbG9yIHBhcnNlUkdCUGFyYW1ldGVycyhDU1NQYXJzZQogCiAgICAgdWlu
dDhfdCBhbHBoYUNvbXBvbmVudCA9IDI1NTsKICAgICBpZiAoY29uc3VtZUFscGhhU2VwYXJhdG9y
KCkpIHsKLSAgICAgICAgZG91YmxlIGFscGhhOwotICAgICAgICBpZiAoIWNvbnN1bWVOdW1iZXJS
YXcoYXJncywgYWxwaGEpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3Vt
ZVBlcmNlbnRSYXcoYXJncykpCi0gICAgICAgICAgICAgICAgYWxwaGEgPSAqcGVyY2VudCAvIDEw
MC4wOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwot
ICAgICAgICB9Ci0gICAgICAgIGFscGhhQ29tcG9uZW50ID0gY29udmVydEZsb2F0QWxwaGFUbzx1
aW50OF90PihhbHBoYSk7CisgICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJS
YXcoYXJncykpCisgICAgICAgICAgICBhbHBoYUNvbXBvbmVudCA9IGNvbnZlcnRGbG9hdEFscGhh
VG88dWludDhfdD4oKm51bWJlcik7CisgICAgICAgIGVsc2UgaWYgKGF1dG8gcGVyY2VudCA9IGNv
bnN1bWVQZXJjZW50UmF3KGFyZ3MpKQorICAgICAgICAgICAgYWxwaGFDb21wb25lbnQgPSBjb252
ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KCpwZXJjZW50IC8gMTAwLjApOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgIH07CiAKICAgICBpZiAoIWFyZ3MuYXRFbmQo
KSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBy
ZXR1cm4gU1JHQkE8dWludDhfdD4geyBjb2xvckFycmF5WzBdLCBjb2xvckFycmF5WzFdLCBjb2xv
ckFycmF5WzJdLCBhbHBoYUNvbXBvbmVudCB9OwogfQpAQCAtNzUyLDQ3ICs3NDEsNDkgQEAgc3Rh
dGljIENvbG9yIHBhcnNlSFNMUGFyYW1ldGVycyhDU1NQYXJzZQogewogICAgIEFTU0VSVChyYW5n
ZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlSHNsIHx8IHJhbmdlLnBlZWsoKS5mdW5j
dGlvbklkKCkgPT0gQ1NTVmFsdWVIc2xhKTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFyZ3Mg
PSBjb25zdW1lRnVuY3Rpb24ocmFuZ2UpOwotICAgIGRvdWJsZSBhbmdsZUluRGVncmVlczsKKwor
ICAgIGRvdWJsZSBodWVBbmdsZUluRGVncmVlczsKICAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1
bWVBbmdsZVJhdyhhcmdzLCBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVu
aXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKQotICAgICAgICBhbmdsZUluRGVncmVlcyA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZS0+dHlwZSwgYW5nbGUtPnZhbHVlKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIGFuZ2xlSW5E
ZWdyZWVzKSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIH0KKyAgICAgICAgaHVl
QW5nbGVJbkRlZ3JlZXMgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMoYW5nbGUt
PnR5cGUsIGFuZ2xlLT52YWx1ZSk7CisgICAgZWxzZSBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1l
TnVtYmVyUmF3KGFyZ3MpKQorICAgICAgICBodWVBbmdsZUluRGVncmVlcyA9ICpudW1iZXI7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4geyB9OwogCiAgICAgZG91YmxlIGNvbG9yQXJyYXlbM107
Ci0gICAgY29sb3JBcnJheVswXSA9IGZtb2QoZm1vZChhbmdsZUluRGVncmVlcywgMzYwLjApICsg
MzYwLjAsIDM2MC4wKSAvIDM2MC4wOworICAgIGNvbG9yQXJyYXlbMF0gPSBmbW9kKGZtb2QoaHVl
QW5nbGVJbkRlZ3JlZXMsIDM2MC4wKSArIDM2MC4wLCAzNjAuMCkgLyAzNjAuMDsKKwogICAgIGJv
b2wgcmVxdWlyZXNDb21tYXMgPSBmYWxzZTsKICAgICBmb3IgKGludCBpID0gMTsgaSA8IDM7IGkr
KykgewogICAgICAgICBpZiAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkg
ewogICAgICAgICAgICAgaWYgKGkgIT0gMSAmJiAhcmVxdWlyZXNDb21tYXMpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgICAgIHJlcXVpcmVzQ29tbWFzID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChyZXF1aXJl
c0NvbW1hcyB8fCBhcmdzLmF0RW5kKCkgfHwgKCZhcmdzLnBlZWsoKSAtIDEpLT50eXBlKCkgIT0g
V2hpdGVzcGFjZVRva2VuKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAg
ICByZXR1cm4geyB9OwogICAgICAgICBhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhh
cmdzKTsKICAgICAgICAgaWYgKCFwZXJjZW50KQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7
CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICBjb2xvckFycmF5W2ldID0gY2xhbXBU
bzxkb3VibGU+KCpwZXJjZW50LCAwLjAsIDEwMC4wKSAvIDEwMC4wOyAvLyBOZWVkcyB0byBiZSB2
YWx1ZSBiZXR3ZWVuIDAgYW5kIDEuMC4KICAgICB9CiAKLSAgICBkb3VibGUgYWxwaGEgPSAxLjA7
CiAgICAgYm9vbCBjb21tYUNvbnN1bWVkID0gY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFj
ZShhcmdzKTsKICAgICBib29sIHNsYXNoQ29uc3VtZWQgPSBjb25zdW1lU2xhc2hJbmNsdWRpbmdX
aGl0ZXNwYWNlKGFyZ3MpOwogICAgIGlmICgoY29tbWFDb25zdW1lZCAmJiAhcmVxdWlyZXNDb21t
YXMpIHx8IChzbGFzaENvbnN1bWVkICYmIHJlcXVpcmVzQ29tbWFzKSkKLSAgICAgICAgcmV0dXJu
IENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBkb3VibGUgYWxwaGEgPSAxLjA7
CiAgICAgaWYgKGNvbW1hQ29uc3VtZWQgfHwgc2xhc2hDb25zdW1lZCkgewotICAgICAgICBpZiAo
IWNvbnN1bWVOdW1iZXJSYXcoYXJncywgYWxwaGEpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBw
ZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncykpCi0gICAgICAgICAgICAgICAgYWxwaGEg
PSAqcGVyY2VudCAvIDEwMC4wZjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKLSAgICAgICAgfQotICAgICAgICBhbHBoYSA9IGNsYW1wVG88ZG91Ymxl
PihhbHBoYSwgMC4wLCAxLjApOworICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVt
YmVyUmF3KGFyZ3MpKQorICAgICAgICAgICAgYWxwaGEgPSBjbGFtcFRvPGRvdWJsZT4oKm51bWJl
ciwgMC4wLCAxLjApOworICAgICAgICBlbHNlIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVy
Y2VudFJhdyhhcmdzKSkKKyAgICAgICAgICAgIGFscGhhID0gY2xhbXBUbzxkb3VibGU+KCpwZXJj
ZW50IC8gMTAwLjBmLCAwLjAsIDEuMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCi0gICAgICAgIHJldHVybiBD
b2xvcigpOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgcmV0dXJuIGNvbnZlcnRUbzxTUkdC
QTx1aW50OF90Pj4odG9TUkdCQShIU0xBPGZsb2F0PiB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ckFycmF5WzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yQXJyYXlbMV0pLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oY29sb3JBcnJheVsyXSksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSkpOwog
fQpAQCAtODA1LDExICs3OTYsMTAgQEAgc3RhdGljIE9wdGlvbmFsPGZsb2F0PiBwYXJzZU9wdGlv
bmFsQWxwaAogICAgIGlmIChhdXRvIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZVBlcmNlbnRSYXco
cmFuZ2UsIFZhbHVlUmFuZ2VBbGwpKQogICAgICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oKmFs
cGhhUGFyYW1ldGVyIC8gMTAwLjAsIDAuMCwgMS4wKTsKIAotICAgIGRvdWJsZSBhbHBoYVBhcmFt
ZXRlcjsKLSAgICBpZiAoIWNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIGFscGhhUGFyYW1ldGVyLCBW
YWx1ZVJhbmdlQWxsKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoYXV0
byBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIFZhbHVlUmFuZ2VBbGwp
KQorICAgICAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oKmFscGhhUGFyYW1ldGVyLCAwLjAsIDEu
MCk7CiAKLSAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4w
KTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VMYWJQ
YXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtODIxLDEyICs4MTEsMTIg
QEAgc3RhdGljIENvbG9yIHBhcnNlTGFiUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghbGln
aHRuZXNzKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgZG91YmxlIGFWYWx1ZTsKLSAgICBp
ZiAoIWNvbnN1bWVOdW1iZXJSYXcoYXJncywgYVZhbHVlLCBWYWx1ZVJhbmdlQWxsKSkKKyAgICBh
dXRvIGFWYWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZUFsbCk7CisgICAg
aWYgKCFhVmFsdWUpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBkb3VibGUgYlZhbHVlOwot
ICAgIGlmICghY29uc3VtZU51bWJlclJhdyhhcmdzLCBiVmFsdWUsIFZhbHVlUmFuZ2VBbGwpKQor
ICAgIGF1dG8gYlZhbHVlID0gY29uc3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsK
KyAgICBpZiAoIWJWYWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8gYWxwaGEg
PSBwYXJzZU9wdGlvbmFsQWxwaGEoYXJncyk7CkBAIC04MzYsNyArODI2LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlTGFiUGFyYW1ldGVycyhDU1NQYXJzZQogICAgIGlmICghYXJncy5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIExhYjxmbG9hdD4geyBzdGF0aWNfY2Fz
dDxmbG9hdD4oKmxpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PihhVmFsdWUpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oYlZhbHVlKSwgKmFscGhhIH07CisgICAgcmV0dXJuIExhYjxmbG9hdD4geyBz
dGF0aWNfY2FzdDxmbG9hdD4oKmxpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PigqYVZhbHVl
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpiVmFsdWUpLCAqYWxwaGEgfTsKIH0KIAogc3RhdGljIENv
bG9yIHBhcnNlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlKQpAQCAtODQ2LDIzICs4MzYsMjMgQEAgc3RhdGljIENvbG9y
IHBhcnNlTENIUGFyYW1ldGVycyhDU1NQYXJzZQogCiAgICAgYXV0byBsaWdodG5lc3MgPSBjb25z
dW1lUGVyY2VudFJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKICAgICBpZiAoIWxpZ2h0bmVzcykK
LSAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBkb3Vi
bGUgY2hyb21hVmFsdWU7Ci0gICAgaWYgKCFjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIGNocm9tYVZh
bHVlLCBWYWx1ZVJhbmdlQWxsKSkKKyAgICBhdXRvIGNocm9tYVZhbHVlID0gY29uc3VtZU51bWJl
clJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBpZiAoIWNocm9tYVZhbHVlKQogICAgICAg
ICByZXR1cm4geyB9OwogCi0gICAgZG91YmxlIGFuZ2xlSW5EZWdyZWVzOwotICAgIGlmIChhdXRv
IGh1ZVZhbHVlID0gY29uc3VtZUFuZ2xlUmF3KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgIGFuZ2xl
SW5EZWdyZWVzID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGh1ZVZhbHVlLT50
eXBlLCBodWVWYWx1ZS0+dmFsdWUpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIWNvbnN1bWVO
dW1iZXJSYXcoYXJncywgYW5nbGVJbkRlZ3JlZXMsIFZhbHVlUmFuZ2VBbGwpKQotICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9CisgICAgZG91YmxlIGh1ZUFuZ2xlSW5EZWdyZWVzOworICAg
IGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xlUmF3KGFyZ3MsIGNzc1BhcnNlck1vZGUsIFVu
aXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpCisgICAgICAg
IGh1ZUFuZ2xlSW5EZWdyZWVzID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFu
Z2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOworICAgIGVsc2UgaWYgKGF1dG8gbnVtYmVyID0gY29u
c3VtZU51bWJlclJhdyhhcmdzLCBWYWx1ZVJhbmdlQWxsKSkKKyAgICAgICAgaHVlQW5nbGVJbkRl
Z3JlZXMgPSAqbnVtYmVyOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGFu
Z2xlSW5EZWdyZWVzID0gZm1vZChhbmdsZUluRGVncmVlcywgMzYwLjApOwotICAgIGlmIChhbmds
ZUluRGVncmVlcyA8IDAuMCkKLSAgICAgICAgYW5nbGVJbkRlZ3JlZXMgKz0gMzYwLjA7CisgICAg
aHVlQW5nbGVJbkRlZ3JlZXMgPSBmbW9kKGh1ZUFuZ2xlSW5EZWdyZWVzLCAzNjAuMCk7CisgICAg
aWYgKGh1ZUFuZ2xlSW5EZWdyZWVzIDwgMC4wKQorICAgICAgICBodWVBbmdsZUluRGVncmVlcyAr
PSAzNjAuMDsKIAogICAgIGF1dG8gYWxwaGEgPSBwYXJzZU9wdGlvbmFsQWxwaGEoYXJncyk7CiAg
ICAgaWYgKCFhbHBoYSkKQEAgLTg3MSw3ICs4NjEsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VMQ0hQ
YXJhbWV0ZXJzKENTU1BhcnNlCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICByZXR1cm4gdG9MYWIoTENIQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9h
dD4oKmxpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PihjaHJvbWFWYWx1ZSksIHN0YXRpY19j
YXN0PGZsb2F0PihhbmdsZUluRGVncmVlcyksICphbHBoYSB9KTsKKyAgICByZXR1cm4gdG9MYWIo
TENIQTxmbG9hdD4geyBzdGF0aWNfY2FzdDxmbG9hdD4oKmxpZ2h0bmVzcyksIHN0YXRpY19jYXN0
PGZsb2F0PigqY2hyb21hVmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oaHVlQW5nbGVJbkRlZ3Jl
ZXMpLCAqYWxwaGEgfSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4KQEAgLTg4
Miw5ICs4NzIsOCBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwCiAK
ICAgICBkb3VibGUgY2hhbm5lbHNbM10gPSB7IDAsIDAsIDAgfTsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IDM7ICsraSkgewotICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgIGlmIChjb25z
dW1lTnVtYmVyUmF3KGFyZ3MsIHZhbHVlKSkKLSAgICAgICAgICAgIGNoYW5uZWxzW2ldID0gdmFs
dWU7CisgICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncykpCisg
ICAgICAgICAgICBjaGFubmVsc1tpXSA9ICpudW1iZXI7CiAgICAgICAgIGVsc2UgaWYgKGF1dG8g
cGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKQogICAgICAgICAgICAgY2hhbm5lbHNb
aV0gPSAqcGVyY2VudCAvIDEwMC4wOwogICAgICAgICBlbHNlCkBAIC05MTAsMTUgKzg5OSwxNSBA
QCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yTGFiUGFyCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGNoYW5uZWxzWzBdID0gKmxpZ2h0bmVzczsKIAotICAgICAgICBkb3Vi
bGUgYVZhbHVlOwotICAgICAgICBpZiAoIWNvbnN1bWVOdW1iZXJSYXcoYXJncywgYVZhbHVlLCBW
YWx1ZVJhbmdlQWxsKSkKKyAgICAgICAgYXV0byBhVmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFy
Z3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBpZiAoIWFWYWx1ZSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgY2hhbm5lbHNbMV0gPSBhVmFsdWU7CisgICAgICAgIGNoYW5uZWxzWzFd
ID0gKmFWYWx1ZTsKIAotICAgICAgICBkb3VibGUgYlZhbHVlOwotICAgICAgICBpZiAoIWNvbnN1
bWVOdW1iZXJSYXcoYXJncywgYlZhbHVlLCBWYWx1ZVJhbmdlQWxsKSkKKyAgICAgICAgYXV0byBi
VmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2VBbGwpOworICAgICAgICBp
ZiAoIWJWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2hhbm5lbHNbMl0gPSBi
VmFsdWU7CisgICAgICAgIGNoYW5uZWxzWzJdID0gKmJWYWx1ZTsKICAgICB9KCk7CiAKICAgICBh
dXRvIGFscGhhID0gcGFyc2VPcHRpb25hbEFscGhhKGFyZ3MpOwpAQCAtMTAyMyw3ICsxMDEyLDcg
QEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbihDU1NQYXJzZQogICAgICAgICBjb2xv
ciA9IHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoY29sb3JSYW5nZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKQogICAgICAgICByYW5nZSA9
IGNvbG9yUmFuZ2U7CkBAIC0xMDM4LDkgKzEwMjcsOSBAQCBDb2xvciBjb25zdW1lQ29sb3JXb3Jr
ZXJTYWZlKENTU1BhcnNlclRvCiAgICAgICAgIC8vIEZJWE1FOiBOZWVkIGEgd29ya2VyLXNhZmUg
d2F5IHRvIGNvbXB1dGUgdGhlIHN5c3RlbSBjb2xvcnMuCiAgICAgICAgIC8vICAgICAgICBGb3Ig
bm93LCB3ZSBkZXRlY3QgdGhlIHN5c3RlbSBjb2xvciwgYnV0IHRoZW4gaW50ZW50aW9uYWxseSBm
YWlsIHBhcnNpbmcuCiAgICAgICAgIGlmIChTdHlsZUNvbG9yOjppc1N5c3RlbUNvbG9yKGtleXdv
cmQpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4geyB9
OwogICAgICAgICBpZiAoIWlzVmFsdWVBbGxvd2VkSW5Nb2RlKGtleXdvcmQsIGNzc1BhcnNlck1v
ZGUpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgICAgICAgICByZXR1cm4geyB9
OwogICAgICAgICByZXN1bHQgPSBTdHlsZUNvbG9yOjpjb2xvckZyb21LZXl3b3JkKGtleXdvcmQs
IHsgfSk7CiAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAg
fQpAQCAtMTA1MSw3ICsxMDQwLDcgQEAgQ29sb3IgY29uc3VtZUNvbG9yV29ya2VyU2FmZShDU1NQ
YXJzZXJUbwogICAgICAgICByZXN1bHQgPSBwYXJzZUNvbG9yRnVuY3Rpb24ocmFuZ2UsIGNzc1Bh
cnNlck1vZGUpOwogCiAgICAgaWYgKCFyYW5nZS5hdEVuZCgpKQotICAgICAgICByZXR1cm4gQ29s
b3IoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0x
MzIxLDkgKzEzMTAsMTEgQEAgc3RhdGljIGJvb2wgY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENv
bAogICAgICAgICBwb3NpdGlvbiA9IChpZCA9PSBDU1NWYWx1ZUZyb20pID8gMCA6IDE7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGlkID09IENTU1ZhbHVlQ29sb3JTdG9wKTsKLSAgICAg
ICAgaWYgKGF1dG8gcGVyY2VudFZhbHVlID0gY29uc3VtZVBlcmNlbnQoYXJncywgVmFsdWVSYW5n
ZUFsbCkpCi0gICAgICAgICAgICBwb3NpdGlvbiA9IHBlcmNlbnRWYWx1ZS0+ZG91YmxlVmFsdWUo
KSAvIDEwMC4wOwotICAgICAgICBlbHNlIGlmICghY29uc3VtZU51bWJlclJhdyhhcmdzLCBwb3Np
dGlvbikpCisgICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdz
LCBWYWx1ZVJhbmdlQWxsKSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gKnBlcmNlbnQgLyAxMDAu
MDsKKyAgICAgICAgZWxzZSBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3Mp
KQorICAgICAgICAgICAgcG9zaXRpb24gPSAqbnVtYmVyOworICAgICAgICBlbHNlCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKCFjb25zdW1lQ29tbWFJbmNsdWRpbmdX
aGl0ZXNwYWNlKGFyZ3MpKQpAQCAtMjE3MSw5ICsyMTYyLDggQEAgT3B0aW9uYWw8TGluZUhlaWdo
dFJhdz4gY29uc3VtZUxpbmVIZWlnaAogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IH0KIAotICAgIGRvdWJsZSBudW1iZXI7Ci0gICAgaWYgKGNvbnN1bWVOdW1iZXJSYXcocmFuZ2Us
IG51bWJlciwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSkKLSAgICAgICAgcmV0dXJuIHsgbnVtYmVy
IH07CisgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhyYW5nZSwgVmFsdWVS
YW5nZU5vbk5lZ2F0aXZlKSkKKyAgICAgICAgcmV0dXJuIHsgKm51bWJlciB9OwogCiAgICAgaWYg
KGF1dG8gbGVuZ3RoT3JQZXJjZW50ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhyYW5nZSwg
Y3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSkKICAgICAgICAgcmV0dXJuIHsg
Kmxlbmd0aE9yUGVyY2VudCB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCShyZXZpc2lvbiAyNzIwNzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHVzaW5nIExlbmd0aE9yUGVyY2VudFJhdyA9IFZh
cmlhbnQ8TGVuZ3QKIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlIG1pbmltdW1WYWx1ZSA9IC1zdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46Om1heCgpKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7Ci1ib29sIGNvbnN1bWVOdW1i
ZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSYgcmVzdWx0LCBWYWx1ZVJhbmdlID0g
VmFsdWVSYW5nZUFsbCk7CitPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVS
YW5nZSk7CiBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRX
ZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>