<?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>234869</bug_id>
          
          <creation_ts>2022-01-04 19:10:15 -0800</creation_ts>
          <short_desc>Refactor CSS property parsing helpers to be a bit more composable</short_desc>
          <delta_ts>2022-01-09 10:56:19 -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>CSS</component>
          <version>Other</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1828176</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-04 19:10:15 -0800</bug_when>
    <thetext>We are approaching a combinatorial problem with all the consumeNumberAndAngleRaw..., etc functions. We can do better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828177</commentid>
    <comment_count>1</comment_count>
      <attachid>448358</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-04 19:10:52 -0800</bug_when>
    <thetext>Created attachment 448358
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829270</commentid>
    <comment_count>2</comment_count>
      <attachid>448690</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-08 18:09:22 -0800</bug_when>
    <thetext>Created attachment 448690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829273</commentid>
    <comment_count>3</comment_count>
      <attachid>448692</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-08 19:13:55 -0800</bug_when>
    <thetext>Created attachment 448692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829311</commentid>
    <comment_count>4</comment_count>
      <attachid>448692</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-09 08:50:53 -0800</bug_when>
    <thetext>Comment on attachment 448692
Patch

Not a fan of &quot;impl&quot;, always trying to avoid using that word.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829314</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-09 09:20:11 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 448692 [details]
&gt; Patch
&gt; 
&gt; Not a fan of &quot;impl&quot;, always trying to avoid using that word.

Yeah, me either. Replaced MetaConsumerImpl with MetaConsumerDispatcher.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829315</commentid>
    <comment_count>6</comment_count>
      <attachid>448704</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-09 09:22:53 -0800</bug_when>
    <thetext>Created attachment 448704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829316</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-09 09:24:02 -0800</bug_when>
    <thetext>ChangeLog entry in Source/WebCore/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829322</commentid>
    <comment_count>8</comment_count>
      <attachid>448708</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-09 09:34:36 -0800</bug_when>
    <thetext>Created attachment 448708
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829326</commentid>
    <comment_count>9</comment_count>
      <attachid>448710</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-09 10:03:01 -0800</bug_when>
    <thetext>Created attachment 448710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829334</commentid>
    <comment_count>10</comment_count>
      <attachid>448712</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-01-09 10:16:02 -0800</bug_when>
    <thetext>Created attachment 448712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829336</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-09 10:19:31 -0800</bug_when>
    <thetext>Patch 448708 does not build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829345</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-01-09 10:55:38 -0800</bug_when>
    <thetext>Committed r287825 (245877@main): &lt;https://commits.webkit.org/245877@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 448712.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829347</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-09 10:56:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/87313403&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448358</attachid>
            <date>2022-01-04 19:10:52 -0800</date>
            <delta_ts>2022-01-08 18:09:16 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>cssPropertiesCheckPoint3.diff</filename>
            <type>text/plain</type>
            <size>109297</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIu
Y3BwCShyZXZpc2lvbiAyODc0ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCw3IEBAIHN0YXRp
YyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGb250VmFyaWF0aW9uVGFnKENTU1BhcgogICAgIGlm
ICghdGFnVmFsdWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIHJldHVybiBD
U1NGb250VmFyaWF0aW9uVmFsdWU6OmNyZWF0ZSh0YWcsICp0YWdWYWx1ZSk7CisgICAgcmV0dXJu
IENTU0ZvbnRWYXJpYXRpb25WYWx1ZTo6Y3JlYXRlKHRhZywgdGFnVmFsdWUtPnZhbHVlKTsKIH0K
ICAgICAKIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGb250VmFyaWF0aW9uU2V0dGlu
Z3MoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC0xNDU1LDcgKzE0NTUsNyBAQCBzdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICBD
U1NQYXJzZXJUb2tlblJhbmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2VDb3B5KTsKIAog
ICAgIGF1dG8geDEgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOwotICAgIGlmICgheDEgfHwgKngx
IDwgMCB8fCAqeDEgPiAxKQorICAgIGlmICgheDEgfHwgeDEtPnZhbHVlIDwgMCB8fCB4MS0+dmFs
dWUgPiAxKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAoIWNvbnN1bWVD
b21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCkBAIC0xNDY5LDcgKzE0NjksNyBAQCBzdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIHgyID0gY29uc3VtZU51bWJlclJhdyhhcmdz
KTsKLSAgICBpZiAoIXgyIHx8ICp4MiA8IDAgfHwgKngyID4gMSkKKyAgICBpZiAoIXgyIHx8IHgy
LT52YWx1ZSA8IDAgfHwgeDItPnZhbHVlID4gMSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBpZiAoIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCkBAIC0xNDgz
LDcgKzE0ODMsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3ViaWNCZXppZXIo
Q1NTUGFyc2VyVG8KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByYW5nZSA9IHJhbmdl
Q29weTsKLSAgICByZXR1cm4gQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVh
dGUoKngxLCAqeTEsICp4MiwgKnkyKTsKKyAgICByZXR1cm4gQ1NTQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvblZhbHVlOjpjcmVhdGUoeDEtPnZhbHVlLCB5MS0+dmFsdWUsIHgyLT52YWx1ZSwgeTIt
PnZhbHVlKTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNwcmluZ0Z1bmN0
aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtMTQ5NCwxNyArMTQ5NCwxNyBAQCBz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lU3ByaW5nRnVuY3Rpb24oQ1NTUGFyc2UKIAog
ICAgIC8vIE1hc3MgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KICAgICBhdXRvIG1hc3MgPSBjb25z
dW1lTnVtYmVyUmF3KGFyZ3MpOwotICAgIGlmICghbWFzcyB8fCAqbWFzcyA8PSAwKQorICAgIGlm
ICghbWFzcyB8fCBtYXNzLT52YWx1ZSA8PSAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAKICAgICAvLyBTdGlmZm5lc3MgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KICAgICBhdXRvIHN0
aWZmbmVzcyA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7Ci0gICAgaWYgKCFzdGlmZm5lc3MgfHwg
KnN0aWZmbmVzcyA8PSAwKQorICAgIGlmICghc3RpZmZuZXNzIHx8IHN0aWZmbmVzcy0+dmFsdWUg
PD0gMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgLy8gRGFtcGluZyBjb2Vm
ZmljaWVudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLgogICAgIGF1dG8gZGFt
cGluZyA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7Ci0gICAgaWYgKCFkYW1waW5nIHx8ICpkYW1w
aW5nIDwgMCkKKyAgICBpZiAoIWRhbXBpbmcgfHwgZGFtcGluZy0+dmFsdWUgPCAwKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBJbml0aWFsIHZlbG9jaXR5IG1heSBoYXZl
IGFueSB2YWx1ZS4KQEAgLTE1MTcsNyArMTUxNyw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVTcHJpbmdGdW5jdGlvbihDU1NQYXJzZQogCiAgICAgcmFuZ2UgPSByYW5nZUNvcHk7
CiAKLSAgICByZXR1cm4gQ1NTU3ByaW5nVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKCptYXNz
LCAqc3RpZmZuZXNzLCAqZGFtcGluZywgKmluaXRpYWxWZWxvY2l0eSk7CisgICAgcmV0dXJuIENT
U1NwcmluZ1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZShtYXNzLT52YWx1ZSwgc3RpZmZuZXNz
LT52YWx1ZSwgZGFtcGluZy0+dmFsdWUsIGluaXRpYWxWZWxvY2l0eS0+dmFsdWUpOwogfQogCiBz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQp
CkBAIC0xODcxLDcgKzE4NzEsNyBAQCBzdGF0aWMgYm9vbCBjb25zdW1lUGVyc3BlY3RpdmUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgYXIKICAgICB9CiAKICAgICBpZiAoYXV0byBwZXJzcGVjdGl2ZSA9
IGNvbnN1bWVOdW1iZXJSYXcoYXJncywgVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpKSB7Ci0gICAg
ICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgqcGVy
c3BlY3RpdmUsIENTU1VuaXRUeXBlOjpDU1NfUFgpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsdWUt
PmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHBlcnNwZWN0aXZlLT52YWx1ZSwgQ1NT
VW5pdFR5cGU6OkNTU19QWCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIz
MzQsNyArMjMzNCw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDdXJzb3IoQ1NT
UGFyc2VyVG9rZW5SYQogICAgICAgICAgICAgaWYgKCF5KQogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjbGFtcCBvciByb3Vu
ZCBpbnN0ZWFkIG9mIGp1c3QgY2FzdGluZyBmcm9tIGRvdWJsZSB0byBpbnQ/Ci0gICAgICAgICAg
ICBob3RTcG90ID0gSW50UG9pbnQgeyBzdGF0aWNfY2FzdDxpbnQ+KCp4KSwgc3RhdGljX2Nhc3Q8
aW50PigqeSkgfTsKKyAgICAgICAgICAgIGhvdFNwb3QgPSBJbnRQb2ludCB7IHN0YXRpY19jYXN0
PGludD4oeC0+dmFsdWUpLCBzdGF0aWNfY2FzdDxpbnQ+KHktPnZhbHVlKSB9OwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCFsaXN0KQpAQCAtMjQ1Niw5ICsyNDU2LDkgQEAgc3RhdGljIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcnNwZWN0aXZlKENTCiAKICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIHF1aXJrIG9ubHkgYXBwbHkgdG8gdGhlIHdlYmtpdCBwcmVmaXhlZCB2ZXJz
aW9uIG9mIHRoZSBwcm9wZXJ0eS4KICAgICBhdXRvIHBlcnNwZWN0aXZlID0gY29uc3VtZU51bWJl
clJhdyhyYW5nZSk7Ci0gICAgaWYgKCFwZXJzcGVjdGl2ZSB8fCAqcGVyc3BlY3RpdmUgPCAwKQor
ICAgIGlmICghcGVyc3BlY3RpdmUgfHwgcGVyc3BlY3RpdmUtPnZhbHVlIDwgMCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoKnBl
cnNwZWN0aXZlLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShwZXJzcGVjdGl2ZS0+dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwog
fQogCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlTGlzdD4gY29uc3VtZVNjcm9sbFNuYXBBbGlnbihD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTUzMzUsMTMgKzUzMzUsMTMgQEAgYm9vbCBD
U1NQcm9wZXJ0eVBhcnNlcjo6Y29uc3VtZUZsZXgoYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgd2hpbGUgKCFtX3JhbmdlLmF0RW5kKCkgJiYgaW5k
ZXgrKyA8IDMpIHsKICAgICAgICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJS
YXcobV9yYW5nZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoKm51bWJlciA8IDApCisgICAgICAg
ICAgICAgICAgaWYgKG51bWJlci0+dmFsdWUgPCAwKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGZsZXhHcm93ID09IHVuc2V0VmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgIGZsZXhHcm93ID0gKm51bWJlcjsKKyAgICAgICAgICAgICAgICAg
ICAgZmxleEdyb3cgPSBudW1iZXItPnZhbHVlOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZs
ZXhTaHJpbmsgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgZmxleFNocmluayA9
ICpudW1iZXI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoISpudW1iZXIpIC8vIGZsZXggb25s
eSBhbGxvd3MgYSBiYXNpcyBvZiAwIChzYW5zIHVuaXRzKSBpZiBmbGV4LWdyb3cgYW5kIGZsZXgt
c2hyaW5rIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlbiBzZXQuCisgICAgICAgICAgICAgICAgICAg
IGZsZXhTaHJpbmsgPSBudW1iZXItPnZhbHVlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFu
dW1iZXItPnZhbHVlKSAvLyBmbGV4IG9ubHkgYWxsb3dzIGEgYmFzaXMgb2YgMCAoc2FucyB1bml0
cykgaWYgZmxleC1ncm93IGFuZCBmbGV4LXNocmluayB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4g
c2V0LgogICAgICAgICAgICAgICAgICAgICBmbGV4QmFzaXMgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKDAsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNp
b24gMjg3NDgyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgc3RhdGljIGJv
b2wgY2FuQ29uc3VtZUNhbGNWYWx1ZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhCiAvLyBGSVhNRTog
Y29uc2lkZXIgcHVsbGluZyBpbiB0aGUgcGFyc2luZyBsb2dpYyBmcm9tIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlci4KIGNsYXNzIENhbGNQYXJzZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0
IENhbGNQYXJzZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdv
cnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5n
ZTo6QWxsLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0geyB9LCBDU1NW
YWx1ZVBvb2wmIHBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCBib29sIGFsbG93c05l
Z2F0aXZlUGVyY2VudGFnZSA9IGZhbHNlKQorICAgIGV4cGxpY2l0IENhbGNQYXJzZXIoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRl
Z29yeSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsLCBjb25zdCBDU1ND
YWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0geyB9LCBDU1NWYWx1ZVBvb2wmIHBvb2wgPSBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgbmVnYXRp
dmVQZXJjZW50YWdlUG9saWN5ID0gTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5OjpGb3JiaWQpCiAg
ICAgICAgIDogbV9zb3VyY2VSYW5nZShyYW5nZSkKICAgICAgICAgLCBtX3JhbmdlKHJhbmdlKQog
ICAgICAgICAsIG1fcG9vbChwb29sKQpAQCAtMTI2LDcgKzEyNiw3IEBAIGNsYXNzIENhbGNQYXJz
ZXIgeyAocHVibGljKQogICAgICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CiAgICAgICAgIGF1dG8gZnVuY3Rpb25JZCA9IHRva2VuLmZ1bmN0aW9uSWQoKTsK
ICAgICAgICAgaWYgKENTU0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24oZnVuY3Rpb25JZCkpCi0g
ICAgICAgICAgICBtX2NhbGNWYWx1ZSA9IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKGZ1bmN0aW9uSWQs
IGNvbnN1bWVGdW5jdGlvbihtX3JhbmdlKSwgZGVzdGluYXRpb25DYXRlZ29yeSwgdmFsdWVSYW5n
ZSwgc3ltYm9sVGFibGUsIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSk7CisgICAgICAgICAgICBt
X2NhbGNWYWx1ZSA9IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKGZ1bmN0aW9uSWQsIGNvbnN1bWVGdW5j
dGlvbihtX3JhbmdlKSwgZGVzdGluYXRpb25DYXRlZ29yeSwgdmFsdWVSYW5nZSwgc3ltYm9sVGFi
bGUsIG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSA9PSBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3k6
OkFsbG93KTsKICAgICB9CiAKICAgICBjb25zdCBDU1NDYWxjVmFsdWUqIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxjVmFsdWUuZ2V0KCk7IH0KQEAgLTE1Miw2NSArMTUyLDYgQEAgY2xhc3Mg
Q2FsY1BhcnNlciB7IChwdWJsaWMpCiAgICAgICAgIHJldHVybiBtX3Bvb2wuY3JlYXRlVmFsdWUo
V1RGTW92ZShtX2NhbGNWYWx1ZSkpOwogICAgIH0KIAotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUludGVnZXIoZG91YmxlIG1pbmltdW1WYWx1ZSkKLSAgICB7Ci0gICAgICAg
IGlmICghbV9jYWxjVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
bV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7Ci0gICAgICAgIHJldHVybiBtX3Bvb2wuY3JlYXRlVmFs
dWUoc3RkOjpyb3VuZChzdGQ6Om1heChtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSwgbWluaW11
bVZhbHVlKSksIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdyhkb3VibGUgbWluaW11bVZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNW
YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1fc291cmNl
UmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4gY2xhbXBUbzxJbnRUeXBlPihzdGQ6OnJv
dW5kKHN0ZDo6bWF4KG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpLCBtaW5pbXVtVmFsdWUpKSk7
Ci0gICAgfQotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyKCkK
LSAgICB7Ci0gICAgICAgIGlmICghbV9jYWxjVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgbV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7Ci0gICAgICAgIHJldHVybiBt
X3Bvb2wuY3JlYXRlVmFsdWUobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCksIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSKTsKLSAgICB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3Vt
ZU51bWJlclJhdygpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1fY2FsY1Zh
bHVlLT5jYXRlZ29yeSgpICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3Jhbmdl
OwotICAgICAgICByZXR1cm4gbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCk7Ci0gICAgfQotCi0g
ICAgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3KCkKLSAgICB7Ci0gICAg
ICAgIGlmICghbV9jYWxjVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgICAgICBhdXRvIGNhdGVnb3J5ID0gbV9jYWxjVmFsdWUtPmNhdGVnb3J5KCk7Ci0gICAgICAg
IGlmIChjYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgbV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7
Ci0gICAgICAgIHJldHVybiBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKTsKLSAgICB9Ci0KLSAg
ICBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXcoKQotICAgIHsKLSAgICAg
ICAgaWYgKCFtX2NhbGNWYWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpBbmdsZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0g
ICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4geyB7IG1fY2Fs
Y1ZhbHVlLT5wcmltaXRpdmVUeXBlKCksIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsK
LSAgICB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdygp
Ci0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1fY2FsY1ZhbHVlLT5jYXRlZ29y
eSgpICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICBy
ZXR1cm4geyB7IG1fY2FsY1ZhbHVlLT5wcmltaXRpdmVUeXBlKCksIG1fY2FsY1ZhbHVlLT5kb3Vi
bGVWYWx1ZSgpIH0gfTsKLSAgICB9Ci0KIHByaXZhdGU6CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgbV9zb3VyY2VSYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIG1fcmFuZ2U7CkBAIC0y
MjAsNyArMTYxLDcgQEAgY2xhc3MgQ2FsY1BhcnNlciB7IChwdWJsaWMpCiAKIC8vIE1BUks6IC0g
UHJpbWl0aXZlIHZhbHVlIGNvbnN1bWVycyBmb3IgY2FsbGVycyB0aGF0IGtub3cgdGhlIHRva2Vu
IHR5cGUuCiAKLXN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjb25zdW1lQ2FsY1Jhd1dpdGhL
bm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlID0geyB9LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpCitzdGF0
aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVG
dW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBj
YXRlZ29yeSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlKQogewogICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0
aW9uVG9rZW4pOwogCkBAIC0yODAsMTY0ICsyMjEsMTkyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIElu
dFR5cGU+IHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVgogCiAvLyBNQVJLOiBOdW1iZXIgKFJh
dykKIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB2YWxpZGF0ZWROdW1iZXJSYXcoZG91
YmxlIHZhbHVlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxO
dW1iZXJSYXc+IHZhbGlkYXRlZE51bWJlclJhdyhkb3VibGUgdmFsdWUsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSkKIHsKICAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2
ZSAmJiB2YWx1ZSA8IDApCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJu
IHZhbHVlOworICAgIHJldHVybiB7eyB2YWx1ZSB9fTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9u
YWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgc291cmNlUmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBhdXRvIHJhbmdlID0g
c291cmNlUmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHN5
bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgewotICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1
ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh2YWx1ZS0+ZG91YmxlVmFsdWUoKSwgdmFsdWVSYW5nZSkp
IHsKLSAgICAgICAgICAgIHNvdXJjZVJhbmdlID0gcmFuZ2U7Ci0gICAgICAgICAgICByZXR1cm4g
dmFsaWRhdGVkVmFsdWU7CitzdHJ1Y3QgTnVtYmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNv
bnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5
cGUgPSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4g
Y29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRh
YmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBV
bml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7CisgICAgICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworCisgICAgICAgIGF1dG8gcmFu
Z2VDb3B5ID0gcmFuZ2U7CisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUNhbGNSYXdX
aXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZUNvcHksIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlciwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICBpZiAoYXV0
byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh2YWx1ZS0+ZG91YmxlVmFsdWUo
KSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgICAgICByYW5nZSA9IHJhbmdlQ29weTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KK307CiAKLSAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7Ci0g
ICAgCi0gICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcocmFu
Z2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgewotICAgICAgICByYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFs
dWU7CitzdHJ1Y3QgTnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lciB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gTnVtYmVyVG9r
ZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PiBjb25zdW1lKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1
aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVy
VG9rZW4pOworICAgICAgICAKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxp
ZGF0ZWROdW1iZXJSYXcocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkg
eworICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAg
ICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAot
c3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9r
ZW5UeXBlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBBU1NF
UlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKTsKK3N0cnVjdCBOdW1iZXJSYXdL
bm93blRva2VuVHlwZUlkZW50Q29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFy
c2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IElkZW50VG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8TnVtYmVyUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbik7CiAKLSAg
ICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkp
IHsKLSAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkgewotICAgICAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSOgotICAgICAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUg
PSB2YWxpZGF0ZWROdW1iZXJSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1ZVJhbmdlKSkgewotICAg
ICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0KHJh
bmdlLnBlZWsoKS5pZCgpKSkgeworICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkg
eworICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICAgICAgICAg
ICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh2YXJpYWJs
ZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1
bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxp
ZGF0ZWRWYWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotfQorfTsKIAogLy8gTUFSSzogTnVtYmVyIChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWlu
aW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1i
ZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworc3RydWN0IE51
bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNv
bnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5
cGUgPSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4p
OwogCi0gICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51
bWJlciwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIu
Y29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpOwotfQor
ICAgICAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVt
YmVyLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBwYXJz
ZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpOwor
ICAgIH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1i
ZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJh
bmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7Ci0gICAgCi0gICAgYXV0byB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKLSAgICAKLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRl
ZE51bWJlclJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAg
YXV0byB1bml0VHlwZSA9IHRva2VuLnVuaXRUeXBlKCk7Ci0gICAgICAgIHJhbmdlLmNvbnN1bWVJ
bmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKCp2
YWxpZGF0ZWRWYWx1ZSwgdW5pdFR5cGUpOworc3RydWN0IE51bWJlckNTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lciB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gTnVtYmVyVG9rZW47CisgICAg
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaywgQ1NT
VmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gTnVtYmVyVG9rZW4pOworICAgICAgICAKKyAgICAgICAgYXV0byB0b2tlbiA9IHJhbmdl
LnBlZWsoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFs
aWRhdGVkTnVtYmVyUmF3KHRva2VuLm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgeworICAg
ICAgICAgICAgYXV0byB1bml0VHlwZSA9IHRva2VuLnVuaXRUeXBlKCk7CisgICAgICAgICAgICBy
YW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHBv
b2wuY3JlYXRlVmFsdWUodmFsaWRhdGVkVmFsdWUtPnZhbHVlLCB1bml0VHlwZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBudWxscHRyOwot
fQorfTsKIAotCiAvLyBNQVJLOiBQZXJjZW50IChyYXcpCiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gdmFsaWRhdGVkUGVyY2VudFJhdyhkb3VibGUgdmFsdWUsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSkKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IHZhbGlkYXRlZFBlcmNl
bnRSYXcoZG91YmxlIHZhbHVlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAgICAgaWYgKHZh
bHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgdmFsdWUgPCAwKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIGlmIChzdGQ6OmlzaW5mKHZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gdmFsdWU7CisgICAgcmV0dXJuIHt7
IHZhbHVlIH19OwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJj
ZW50UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgc291
cmNlUmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSkKLXsKLSAgICBBU1NFUlQoc291cmNlUmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVGdW5jdGlv
bkNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tl
blR5cGUgPSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFBlcmNlbnRS
YXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NF
UlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIAotICAgIGNvbnN0IGF1
dG8mIHRva2VuID0gc291cmNlUmFuZ2UucGVlaygpOwotICAgIGF1dG8gZnVuY3Rpb25JZCA9IHRv
a2VuLmZ1bmN0aW9uSWQoKTsKLSAgICBpZiAoIUNTU0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24o
ZnVuY3Rpb25JZCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGF1dG8g
cmFuZ2VDb3B5ID0gcmFuZ2U7CisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUNhbGNS
YXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZUNvcHksIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnQsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgcmFu
Z2UgPSByYW5nZUNvcHk7CiAKLSAgICBhdXRvIHJhbmdlID0gc291cmNlUmFuZ2U7Ci0gICAgYXV0
byBjYWxjVmFsdWUgPSBDU1NDYWxjVmFsdWU6OmNyZWF0ZShmdW5jdGlvbklkLCBjb25zdW1lRnVu
Y3Rpb24ocmFuZ2UpLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCB2YWx1ZVJhbmdlLCBz
eW1ib2xUYWJsZSk7Ci0gICAgaWYgKGNhbGNWYWx1ZSAmJiBjYWxjVmFsdWUtPmNhdGVnb3J5KCkg
PT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCkgewotICAgICAgICBzb3VyY2VSYW5nZSA9
IHJhbmdlOwotICAgICAgICByZXR1cm4gY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpOworICAgICAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIHZhbGlkYXRlIHRoZSBjYWxjIHZhbHVlIGFzIGlz
IGRvbmUgZm9yIHRoZSBOdW1iZXJSYXcgdmFyaWFudD8KKyAgICAgICAgICAgIHJldHVybiB7eyB2
YWx1ZS0+ZG91YmxlVmFsdWUoKSB9fTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAgICAgfQorfTsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19CitzdHJ1
Y3QgUGVyY2VudFJhd0tub3duVG9rZW5UeXBlUGVyY2VudENvbnN1bWVyIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBQZXJjZW50YWdlVG9rZW47
CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGVyY2VudFJhdz4gY29uc3VtZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2
YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWly
aykKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IFBlcmNlbnRh
Z2VUb2tlbik7CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRS
YXdXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0g
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gUGVyY2VudGFnZVRva2VuKTsKLQotICAg
IGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyhyYW5nZS5wZWVr
KCkubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHJhbmdlLmNvbnN1bWVJ
bmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKKyAg
ICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHJhbmdl
LnBlZWsoKS5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdl
LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gdmFsaWRh
dGVkVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9
Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVudChDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IElkZW50VG9rZW4pOworc3RydWN0IFBlcmNlbnRSYXdLbm93blRva2VuVHlwZUlkZW50
Q29uc3VtZXIgeworICAgIC8vIEZJWE1FOiBJZGVudGljYWwgdG8gTnVtYmVyUmF3S25vd25Ub2tl
blR5cGVJZGVudENvbnN1bWVyIGV4Y2VwdCB2YWxpZGF0aW9uIGFuZCB1bml0IHR5cGUuCisgICAg
c3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gSWRlbnRUb2tl
bjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiBjb25zdW1lKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVu
aXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gSWRlbnRUb2tlbik7CiAKLSAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxl
LmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKLSAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlw
ZSkgewotICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKLSAgICAgICAg
ICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJs
ZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUlu
Y2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFs
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGF1dG8g
dmFyaWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRToKKyAgICAgICAgICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRW
YWx1ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1ZVJhbmdlKSkg
eworICAgICAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKIAogLy8gTUFSSzog
UGVyY2VudCAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQogCi1zdGF0aWMg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2
YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CitzdHJ1Y3QgUGVyY2VudENTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBGdW5jdGlvblRva2Vu
OworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5p
dGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCi0gICAgQ2FsY1BhcnNl
ciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2Us
IHN5bWJvbFRhYmxlLCBwb29sKTsKLSAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0
ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCk7Ci19CisgICAgICAgIENhbGNQYXJz
ZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCB2YWx1ZVJhbmdl
LCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVl
SWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KTsKKyAgICB9Cit9OwogCi1z
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pOwotCi0gICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUg
PSB2YWxpZGF0ZWRQZXJjZW50UmF3KHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgdmFsdWVS
YW5nZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAg
ICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoKnZhbGlkYXRlZFZhbHVlLCBDU1NVbml0VHlw
ZTo6Q1NTX1BFUkNFTlRBR0UpOworc3RydWN0IFBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlUGVyY2VudENvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBQZXJjZW50YWdlVG9rZW47CisgICAg
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaywgQ1NT
VmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gUGVyY2VudGFnZVRva2VuKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdXRvIHZhbGlk
YXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyhyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVl
KCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUodmFsaWRhdGVk
VmFsdWUtPnZhbHVlLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK307
CiAKIC8vIE1BUks6IExlbmd0aCAocmF3KQogCkBAIC00NTAsMjM4ICs0MTksNDEyIEBAIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsaWRhdGVkTGVuZ3RoUmF3KGRvdWJsZQogICAgIHJl
dHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1l
TGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
c291cmNlUmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaykKLXsKLSAgICBh
dXRvIHJhbmdlID0gc291cmNlUmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2Fs
Y1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpMZW5ndGgsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgewotICAgICAgICBzb3VyY2VSYW5n
ZSA9IHJhbmdlOwotICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZh
bHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKKworc3RydWN0IExlbmd0aFJhd0tub3duVG9rZW5UeXBl
RnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5
cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxM
ZW5ndGhSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0Nh
bGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAg
ICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKworICAgICAg
ICBhdXRvIHJhbmdlQ29weSA9IHJhbmdlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1
bWVDYWxjUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpMZW5ndGgsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAg
ICAgcmFuZ2UgPSByYW5nZUNvcHk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhp
cyB2YWxpZGF0ZSB0aGUgY2FsYyB2YWx1ZSBhcyBpcyBkb25lIGZvciB0aGUgTnVtYmVyUmF3IHZh
cmlhbnQ/CisgICAgICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZh
bHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5U
eXBlRGltZW5zaW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyaykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBE
aW1lbnNpb25Ub2tlbik7CitzdHJ1Y3QgTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25D
b25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5U
eXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3
PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9s
VGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQo
cmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbik7CiAKLSAgICBhdXRvJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKKyAgICAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAK
LSAgICBhdXRvIHVuaXRUeXBlID0gdG9rZW4udW5pdFR5cGUoKTsKLSAgICBzd2l0Y2ggKHVuaXRU
eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1FVSVJLWV9FTVM6Ci0gICAgICAgIGlm
IChwYXJzZXJNb2RlICE9IFVBU2hlZXRNb2RlKQorICAgICAgICBhdXRvIHVuaXRUeXBlID0gdG9r
ZW4udW5pdFR5cGUoKTsKKyAgICAgICAgc3dpdGNoICh1bml0VHlwZSkgeworICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKKyAgICAgICAgICAgIGlmIChwYXJzZXJNb2Rl
ICE9IFVBU2hlZXRNb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VN
UzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CisgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19MSFM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19STEhTOgor
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfSUM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6CisgICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0NNOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06CisgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgorICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19WVzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgorICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZN
QVg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WQjoKKyAgICAgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1ZJOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZXOgorICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZIOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfU1ZNSU46CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVk1BWDoKKyAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWQjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1NWSToKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWVzoKKyAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0xWSDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xW
TUlOOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZNQVg6CisgICAgICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19MVkI6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkk6
CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVlc6CisgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19EVkg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVk1JTjoKKyAg
ICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWTUFYOgorICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfRFZCOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgorICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgRkFMTFRI
Uk9VR0g7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUkVNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19STEhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DSFM6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19F
WFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19WSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoK
LSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZJOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19TVlc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWSDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfU1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWTUFYOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1NWSToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZXOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19MVkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWTUlOOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19MVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZCOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkk6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0RWVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZIOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19EVk1JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZNQVg6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0RWQjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgorICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0
ZWRMZW5ndGhSYXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAg
ICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0
dXJuIHsgeyB1bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKKyAgICAgICAgfQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KK307CiAKLSAgICBpZiAoYXV0byB2YWxpZGF0
ZWRWYWx1ZSA9IHZhbGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVS
YW5nZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAg
ICAgICAgcmV0dXJuIHsgeyB1bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK3N0cnVjdCBMZW5ndGhSYXdLbm93blRva2VuVHlw
ZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlw
ZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5n
dGhSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKIAotc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9r
ZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBOdW1iZXJUb2tlbik7CisgICAgICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygp
OwogCi0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgICAgIGlmICghc2hvdWxk
QWNjZXB0VW5pdGxlc3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgcGFyc2VyTW9kZSwgdW5p
dGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpCisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCi0gICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHRva2VuLm51
bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkFs
bG93KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRMZW5ndGhS
YXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5n
ZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHsgeyBD
U1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OworICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9
IHZhbGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsK
LSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0
dXJuIHsgeyBDU1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OwogICAgIH0K
LSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAogLy8gTUFSSzogTGVuZ3RoIChDU1NQ
cmltaXRpdmVWYWx1ZSAtIG1haW50YWluaW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworc3RydWN0IExlbmd0
aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUg
PSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwog
Ci0gICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29u
c3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOwotfQorICAg
ICAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3Ro
LCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBwYXJzZXIu
Y29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOworICAg
IH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERp
bWVuc2lvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1pl
cm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9
IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcykpCi0gICAgICAgIHJldHVy
biBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IExlbmd0
aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkK
KyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxl
bmd0aFJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLXN0
YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0
bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IE51bWJlclRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRp
YyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRs
ZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2Vu
KTsKIAotICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25U
b2tlblR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcykpCi0gICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+
dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAg
IGlmIChhdXRvIGxlbmd0aFJhdyA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI6OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1
bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZh
bHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KK307CiAKIC8vIE1BUks6IEFuZ2xlIChyYXcpCiAKLXN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKLXsKLSAgICBhdXRvIHJhbmdlID0g
c291cmNlUmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgc3lt
Ym9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHNvdXJjZVJhbmdlID0gcmFuZ2U7Ci0g
ICAgICAgIHJldHVybiB7IHsgdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgdmFsdWUtPmRvdWJsZVZh
bHVlKCkgfSB9Oworc3RydWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVy
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBG
dW5jdGlvblRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1l
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgYXV0byByYW5nZUNvcHkg
PSByYW5nZTsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUs
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUNv
cHk7CisgICAgICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZhbHVl
LT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3RhdGljIHN0
ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURp
bWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRh
YmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3Na
ZXJvUXVpcmspCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9u
VG9rZW4pOworc3RydWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lciB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRGlt
ZW5zaW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZh
bHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJr
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9u
VG9rZW4pOwogCi0gICAgYXV0byB1bml0VHlwZSA9IHJhbmdlLnBlZWsoKS51bml0VHlwZSgpOwot
ICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0dSQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAgIHJldHVybiB7
IHsgdW5pdFR5cGUsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1Zh
bHVlKCkgfSB9OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICBhdXRvIHVu
aXRUeXBlID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7CisgICAgICAgIHN3aXRjaCAodW5pdFR5
cGUpIHsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICAgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1JBRDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6
CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAgICAgICAgICAgcmV0dXJu
IHsgeyB1bml0VHlwZSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmlj
VmFsdWUoKSB9IH07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQorfTsKK3N0cnVjdCBB
bmdsZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVu
aXRsZXNzWmVybykKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IE51bWJlclRva2VuKTsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19CisgICAgICAgIGlm
IChzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4g
eyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICB9Cit9OwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVy
bykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7Cisv
LyBNQVJLOiBBbmdsZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQogCi0g
ICAgaWYgKHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1
ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJu
IHsgeyBDU1NVbml0VHlwZTo6Q1NTX0RFRywgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKS5udW1lcmljVmFsdWUoKSB9IH07Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK3N0
cnVjdCBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbkNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0
b2tlblR5cGUgPSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9v
bCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9u
VG9rZW4pOwogCi0vLyBNQVJLOiBBbmdsZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmlu
ZyBjYWxjKQorICAgICAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6QW5nbGUsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKKyAgICAgICAgcmV0
dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFu
Z2xlKTsKKyAgICB9Cit9OwogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBBbmds
ZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25z
dW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBl
ID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRh
YmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRs
ZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOwogCi0gICAgQ2FsY1BhcnNlciBwYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdlLCBzeW1ib2xU
YWJsZSwgcG9vbCk7Ci0gICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKTsKLX0KKyAgICAgICAgaWYgKGF1dG8gYW5nbGVSYXcg
PSBBbmdsZVJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2Us
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3Na
ZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGFuZ2xlUmF3LT52YWx1
ZSwgYW5nbGVSYXctPnR5cGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9Owog
Ci1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wm
IHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9r
ZW4pOworc3RydWN0IEFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2Vu
VHlwZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1ND
YWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1Bh
cnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJv
UXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CiAKLSAgICBpZiAoYXV0
byBhbmdsZVJhdyA9IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihy
YW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0
bGVzc1plcm8pKQotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShhbmdsZVJhdy0+dmFs
dWUsIGFuZ2xlUmF3LT50eXBlKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKyAgICAgICAgaWYg
KGF1dG8gYW5nbGVSYXcgPSBBbmdsZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNv
bnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVz
cywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGFu
Z2xlUmF3LT52YWx1ZSwgYW5nbGVSYXctPnR5cGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9Cit9OwogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5n
bGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NW
YWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVt
YmVyVG9rZW4pOworLy8gTUFSSzogVGltZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmlu
ZyBjYWxjKQogCi0gICAgaWYgKGF1dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25v
d25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJN
b2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRl
VmFsdWUoYW5nbGVSYXctPnZhbHVlLCBhbmdsZVJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19CitzdHJ1Y3QgVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbkNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRv
a2VuVHlwZSB0b2tlblR5cGUgPSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0
IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwg
Q1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVl
UG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IEZ1bmN0aW9uVG9rZW4pOwogCisgICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpUaW1lLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7Cisg
ICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNh
dGVnb3J5OjpUaW1lKTsKKyAgICB9Cit9OwogCi0vLyBNQVJLOiBUaW1lIChDU1NQcmltaXRpdmVW
YWx1ZSAtIG1haW50YWluaW5nIGNhbGMpCitzdHJ1Y3QgVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRGltZW5zaW9uVG9rZW47Cisg
ICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaywg
Q1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50
eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOwogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CisgICAgICAgIGlmICh2YWx1ZVJhbmdl
ID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUo
KSA8IDApCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIENhbGNQYXJzZXIgcGFy
c2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lLCB2YWx1ZVJhbmdlLCBzeW1ib2xU
YWJsZSwgcG9vbCk7Ci0gICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWUpOwotfQorICAgICAgICBpZiAoYXV0byB1bml0ID0gcmFu
Z2UucGVlaygpLnVuaXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19NUyB8fCB1bml0
ID09IENTU1VuaXRUeXBlOjpDU1NfUykKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZh
bHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHVu
aXQpOwogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVGltZUNTU1By
aW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24oQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgQ1NTVmFsdWVQb29sJiBw
b29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2Vu
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKIAotICAgIGlmICh2YWx1ZVJh
bmdlID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFs
dWUoKSA8IDApCitzdHJ1Y3QgVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVOdW1iZXJDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJU
b2tlblR5cGUgdG9rZW5UeXBlID0gTnVtYmVyVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrLCBD
U1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBOdW1iZXJUb2tlbik7CisKKyAgICAgICAgaWYgKHVuaXRsZXNzID09IFVuaXRsZXNz
UXVpcms6OkFsbG93ICYmIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUocmFuZ2UucGVlaygpLm51
bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkFs
bG93KSkgeworICAgICAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVn
YXRpdmUgJiYgcmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKHJh
bmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIENTU1VuaXRU
eXBlOjpDU1NfTVMpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
K307CiAKLSAgICBpZiAoYXV0byB1bml0ID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7IHVuaXQg
PT0gQ1NTVW5pdFR5cGU6OkNTU19NUyB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfUykKLSAg
ICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CisvLyBNQVJLOiBSZXNvbHV0aW9uIChDU1NQ
cmltaXRpdmVWYWx1ZSAtIG5vIGNhbGMpCiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK3N0cnVj
dCBSZXNvbHV0aW9uQ1NTUHJpbWl0aXZlVmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25D
b25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5U
eXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxl
c3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0
aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUg
cGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQot
ewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKyAgICAg
ICAgaWYgKGF1dG8gdW5pdCA9IHJhbmdlLnBlZWsoKS51bml0VHlwZSgpOyB1bml0ID09IENTU1Vu
aXRUeXBlOjpDU1NfRFBQWCB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfWCB8fCB1bml0ID09
IENTU1VuaXRUeXBlOjpDU1NfRFBJIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19EUENNKQor
ICAgICAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CiAKLSAgICBpZiAodW5pdGxlc3Mg
PT0gVW5pdGxlc3NRdWlyazo6QWxsb3cgJiYgc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZShyYW5n
ZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCksIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1pl
cm9RdWlyazo6QWxsb3cpKSB7Ci0gICAgICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2U6
Ok5vbk5lZ2F0aXZlICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IDApCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFu
Z2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgQ1NTVW5pdFR5
cGU6OkNTU19NUyk7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KK307CiAKLS8vIE1BUks6IFJlc29sdXRpb24gKENTU1ByaW1pdGl2ZVZhbHVl
IC0gbm8gY2FsYykKKy8vIE1BUks6IE5vbmUgKFJhdykKIAotc3RhdGljIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb25DU1NQcmltaXRpdmVWYWx1ZVdpdGhLbm93blRv
a2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29s
JiBwb29sKQorLy8gRklYTUU6IENvbnNpZGVyIHRlbXBsYXRpemluZyB0byBhbGxvdyBjdXN0b21p
emF0aW9uIG9mIE5vbmUgcmVzdWx0IHR5cGUgYW5kIHZhbHVlLiBIYXJkY29kZWQgdG8gc3RkOjpv
cHRpb25hbDxkb3VibGU+IC8gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4o
KSBmb3Igbm93Lgorc3RydWN0IE5vbmVSYXdLbm93blRva2VuVHlwZUlkZW50Q29uc3VtZXIgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IElkZW50
VG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdl
LCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7
CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pOworCisg
ICAgICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAg
ICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLSBN
ZXRhIENvbnN1bWVyCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSWRlbnRpdHlUcmFu
c2Zvcm1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gVDsKKyAgICBzdGF0aWMgVCB0cmFuc2Zvcm0o
VCB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1
bWVyLCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgVHJhbnNmb3JtQXBwbGllciB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgZGVjbHR5cGUoYXV0bykgYXBwbHkoVCB2YWx1
ZSkgeyByZXR1cm4gdmFsdWU7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgor
c3RydWN0IFRyYW5zZm9ybUFwcGxpZXI8Q29uc3VtZXIsIHR5cGVuYW1lIHN0ZDo6dm9pZF90PHR5
cGVuYW1lIENvbnN1bWVyOjpUcmFuc2Zvcm1lcj4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHN0YXRpYyBkZWNsdHlwZShhdXRvKSBhcHBseShUIHZhbHVlKSB7IHJldHVybiBDb25z
dW1lcjo6VHJhbnNmb3JtZXI6OnRyYW5zZm9ybSh2YWx1ZSk7IH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbnN1bWVyLCB0eXBlbmFtZSBUPgorc3RhdGljIGRlY2x0eXBlKGF1dG8pIGFwcGx5
VHJhbnNmb3JtKFQgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0g
RGltZW5zaW9uVG9rZW4pOworICAgIHJldHVybiBUcmFuc2Zvcm1BcHBsaWVyPENvbnN1bWVyPjo6
YXBwbHkodmFsdWUpOworfQogCi0gICAgaWYgKGF1dG8gdW5pdCA9IHJhbmdlLnBlZWsoKS51bml0
VHlwZSgpOyB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfRFBQWCB8fCB1bml0ID09IENTU1VuaXRU
eXBlOjpDU1NfWCB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfRFBJIHx8IHVuaXQgPT0gQ1NT
VW5pdFR5cGU6OkNTU19EUENNKQotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShyYW5n
ZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB1bml0KTsKKy8v
IE1BUks6IFVuaXF1ZVRva2VuTWV0YUNvbnN1bWVySW1wbAogCi0gICAgcmV0dXJuIG51bGxwdHI7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdW1lciwgc2l6ZV90IEk+CitzdHJ1Y3QgVW5pcXVlVG9r
ZW5NZXRhQ29uc3VtZXJJbXBsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAg
IHN0YXRpYyB0eXBlbmFtZSBDb25zdW1lcjo6UmVzdWx0IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5U
eXBlIHRva2VuVHlwZSwgQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICB1c2luZyBTZWxl
Y3RlZFR5cGUgPSBzdGQ6OnR1cGxlX2VsZW1lbnRfdDxJIC0gMSwgdHlwZW5hbWUgQ29uc3VtZXI6
OkNoZWNrcz47CisgICAgICAgIGlmICh0b2tlblR5cGUgPT0gU2VsZWN0ZWRUeXBlOjp0b2tlblR5
cGUpCisgICAgICAgICAgICByZXR1cm4gYXBwbHlUcmFuc2Zvcm08Q29uc3VtZXI+KFNlbGVjdGVk
VHlwZTo6Y29uc3VtZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsKKyAgICAKKyAgICAg
ICAgcmV0dXJuIFVuaXF1ZVRva2VuTWV0YUNvbnN1bWVySW1wbDxDb25zdW1lciwgSSAtIDE+Ojpj
b25zdW1lKHRva2VuVHlwZSwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdW1lcj4KK3N0cnVjdCBVbmlxdWVUb2tlbk1ldGFD
b25zdW1lckltcGw8Q29uc3VtZXIsIDA+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdz
PgorICAgIHN0YXRpYyB0eXBlbmFtZSBDb25zdW1lcjo6UmVzdWx0IGNvbnN1bWUoQ1NTUGFyc2Vy
VG9rZW5UeXBlLCBBcmdzJiYuLi4pCisgICAgeworICAgICAgICByZXR1cm4gdHlwZW5hbWUgQ29u
c3VtZXI6OlJlc3VsdCB7IH07CisgICAgfQorfTsKKworLy8gJ0NvbnN1bWVyJyB0eXBlIGlzIGV4
cGVjdGVkIHRvIGhhdmUgdHdvIGFzc29jaWF0ZWQgdHlwZXM6CisvLyAgICAgIFJlc3VsdCAtPiBS
ZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24uIE11c3QgaGF2ZSBkZWZhdWx0IGNvbnN0cnVjdG9y
IHdoaWNoIHJlcHJlc2VudHMgdGhlIGZhaWxlZCBjYXNlIChlLmcuIHN0ZDo6b3B0aW9uYWw8Piwg
UmVmUHRyPD4sIGV0Yy4pCisvLyAgICAgIENoZWNrcyAtPiBzdGQ6OnR1cGxlPD4gb2YgdG9rZW4g
dHlwZSBhd2FyZSBzdWItY29uc3VtZXJzLgorLy8gICAgICBbb3B0aW9uYWwgdGhpcmQgdHlwZSwg
VHJhbnNmb3JtLiBTdHJ1Y3Qgd2l0aCBhIHN0YXRpYyAndHJhbnNmb3JtJyBmdW5jdGlvbiBvciBv
dmVybG9hZCBzZXQgb2YgJ3RyYW5zZm9ybScgZnVuY3Rpb25zLgorLy8KKy8vIFN1Yi1jb25zdW1l
ciB0eXBlcyBhcmUgZXhwZWN0ZWQgdG8gaGF2ZToKKy8vICAgICAgc3RhdGljIGNvbnN0ZXhwciBD
U1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gPD4gdG8gaW5kaWNhdGUgd2hpY2ggdG9rZW4g
dHlwZSB0byBtYXRjaCBvbi4KKy8vICAgICAgc3RhdGljIFJlc3VsdCBjb25zdW1lcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgLi4uKSB0byBjb25zdW1lIG9yIGZhaWwuCisKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbnN1bWVyLCB0eXBlbmFtZS4uLiBBcmdzPgorYXV0byBjb25zdW1lQ29uc3Vt
ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1pl
cm8sIEFyZ3MmJi4uLiBhcmdzKSAtPiB0eXBlbmFtZSBDb25zdW1lcjo6UmVzdWx0Cit7CisgICAg
Ly8gc3RhdGljX2Fzc2VydChDb25zdW1lcjo6Q2hlY2tzIGFsbCBoYXZlIGRpZmZlcmVudCB0b2tl
biB0eXBlcykKKyAgICAvLyAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmNvbmp1bmN0aW9uX3Y8c3Rk
Ojpib29sX2NvbnN0YW50PFRzOjpTaXplID09IFQ6OlNpemU+Li4uPiwgIkFsbCBDb2xvckNvbXBv
bmVudHMgcGFzc2VkIHRvIG1hcENvbG9yQ29tcG9uZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6
ZSIpOworCisgICAgcmV0dXJuIFVuaXF1ZVRva2VuTWV0YUNvbnN1bWVySW1wbDxDb25zdW1lciwg
c3RkOjp0dXBsZV9zaXplX3Y8dHlwZW5hbWUgQ29uc3VtZXI6OkNoZWNrcz4+Ojpjb25zdW1lKHJh
bmdlLnBlZWsoKS50eXBlKCksIHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2Vy
TW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKIH0KIAorLy8gTUFSSzogU2FtZVRva2VuTWV0YUNvbnN1bWVyCiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFRyYW5zZm9ybWVyLCB0eXBlbmFtZSBDb25zdW1lcnNUdXBsZSwgc2l6ZV90IEk+CitzdHJ1
Y3QgU2FtZVRva2VuTWV0YUNvbnN1bWVySW1wbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJncz4KKyAgICBzdGF0aWMgdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdCBjb25zdW1lKEFy
Z3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgdXNpbmcgU2VsZWN0ZWRDb25zdW1lciA9IHN0
ZDo6dHVwbGVfZWxlbWVudF90PEkgLSAxLCBDb25zdW1lcnNUdXBsZT47CisgICAgICAgIGlmIChh
dXRvIHJlc3VsdCA9IFRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0oU2VsZWN0ZWRDb25zdW1lcjo6Y29u
c3VtZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIHJldHVybiBTYW1lVG9rZW5NZXRhQ29uc3VtZXJJbXBsPFRyYW5zZm9y
bWVyLCBDb25zdW1lcnNUdXBsZSwgSSAtIDE+Ojpjb25zdW1lKHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXIsIHR5
cGVuYW1lIENvbnN1bWVyc1R1cGxlPgorc3RydWN0IFNhbWVUb2tlbk1ldGFDb25zdW1lckltcGw8
VHJhbnNmb3JtZXIsIENvbnN1bWVyc1R1cGxlLCAwPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJncz4KKyAgICBzdGF0aWMgdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdCBjb25zdW1l
KEFyZ3MmJi4uLikKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6
UmVzdWx0IHsgfTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFuc2Zvcm1lciwg
dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CitzdHJ1Y3QgU2FtZVRva2VuTWV0YUNvbnN1bWVy
IHsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6Y29uanVuY3Rpb25fdjxzdGQ6OmJvb2xfY29uc3Rh
bnQ8VHM6OnRva2VuVHlwZSA9PSBUOjp0b2tlblR5cGU+Li4uPiwgIkFsbCBDb25zdW1lcnMgcGFz
c2VkIHRvIFNhbWVUb2tlbk1ldGFDb25zdW1lciBtdXN0IGhhdmUgdGhlIHNhbWUgdG9rZW5UeXBl
Iik7CisgICAgdXNpbmcgQ29uc3VtZXJzVHVwbGUgPSBzdGQ6OnR1cGxlPFQsIFRzLi4uPjsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IFQ6OnRv
a2VuVHlwZTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyB0eXBl
bmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNz
LCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIEFyZ3MmJi4uLiBhcmdzKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gdG9rZW5UeXBlKTsKKyAgICAg
ICAgcmV0dXJuIFNhbWVUb2tlbk1ldGFDb25zdW1lckltcGw8VHJhbnNmb3JtZXIsIENvbnN1bWVy
c1R1cGxlLCBzdGQ6OnR1cGxlX3NpemVfdjxDb25zdW1lcnNUdXBsZT4+Ojpjb25zdW1lKHJhbmdl
LCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNz
WmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICB9Cit9OworCisKIC8vIE1B
Uks6IC0gUHJpbWl0aXZlIHZhbHVlIGNvbnN1bWVycyBmb3IgY2FsbGVycyB0aGF0IGRvIE5PVCBr
bm93IHRoZSB0b2tlbiB0eXBlLgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGQ6Om9w
dGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKQEAgLTc0MCwxMDIgKzg4Myw4NyBAQCBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2ZUludGVnZXIoQ1NTUGEKICAgICBy
ZXR1cm4gY29uc3VtZUludGVnZXJUeXBlPHVuc2lnbmVkPihyYW5nZSwgMSwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKSk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVy
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17
Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CitzdHJ1Y3QgTnVtYmVyUmF3Q29uc3Vt
ZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PjsKKyAgICB1
c2luZyBDaGVja3MgPSBzdGQ6OnR1cGxlPAorICAgICAgICBOdW1iZXJSYXdLbm93blRva2VuVHlw
ZUZ1bmN0aW9uQ29uc3VtZXIsCisgICAgICAgIE51bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVy
Q29uc3VtZXIKKyAgICA+OworfTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAg
Y2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhL
bm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpOwotCi0gICAgY2Fz
ZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25U
b2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSk7Ci0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0Oworc3RkOjpv
cHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKK3sKKyAgICAvLyBGSVhNRTogUGFzcyBpbiBD
U1NQYXJzZXJNb2RlLgorICAgIHJldHVybiBjb25zdW1lQ29uc3VtZXI8TnVtYmVyUmF3Q29uc3Vt
ZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1v
ZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiB9
CiAKK3N0cnVjdCBOdW1iZXJDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPjsKKyAgICB1c2luZyBDaGVja3MgPSBzdGQ6OnR1cGxlPAorICAgICAg
ICBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b25Db25zdW1lciwKKyAgICAgICAgTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhL
bm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyCisgICAgPjsKK307CisKIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlKQogewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwot
Ci0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0g
ICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhL
bm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkpOwotCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJu
IGNvbnN1bWVOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBl
TnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkp
OwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51
bGxwdHI7CisgICAgLy8gRklYTUU6IFBhc3MgaW4gQ1NTUGFyc2VyTW9kZS4KKyAgICAvLyBGSVhN
RTogUGFzcyBpbiBDU1NWYWx1ZVBvb2wuCisgICAgcmV0dXJuIGNvbnN1bWVDb25zdW1lcjxOdW1i
ZXJDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0
YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9y
YmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKIH0KIAorc3RydWN0IExlbmd0aFJhd0Nv
bnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz47Cisg
ICAgdXNpbmcgQ2hlY2tzID0gc3RkOjp0dXBsZTwKKyAgICAgICAgTGVuZ3RoUmF3S25vd25Ub2tl
blR5cGVGdW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBMZW5ndGhSYXdLbm93blRva2VuVHlwZURp
bWVuc2lvbkNvbnN1bWVyLAorICAgICAgICBMZW5ndGhSYXdLbm93blRva2VuVHlwZU51bWJlckNv
bnN1bWVyCisgICAgPjsKK307CisKIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVu
Z3RoUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKIHsKLSAg
ICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKLSAgICAKLSAgICBzd2l0Y2ggKHRva2VuLnR5
cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVM
ZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdl
LCBwYXJzZXJNb2RlLCB1bml0bGVzcyk7Ci0KLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAg
ICAgICByZXR1cm4gY29uc3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihy
YW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcyk7Ci0gICAgCi0gICAg
Y2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhSYXdXaXRoS25v
d25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5p
dGxlc3MpOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gY29uc3VtZUNvbnN1bWVyPExlbmd0aFJhd0Nv
bnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiB9CiAKK3N0cnVjdCBMZW5ndGhDb25zdW1lciB7Cisg
ICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsKKyAgICB1c2luZyBD
aGVja3MgPSBzdGQ6OnR1cGxlPAorICAgICAgICBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciwKKyAgICAgICAgTGVuZ3RoQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVy
LAorICAgICAgICBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlTnVtYmVyQ29uc3VtZXIKKyAgICA+OworfTsKKwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVz
cykKIHsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKLQotICAgIHN3aXRjaCAodG9r
ZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29u
c3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKSk7Ci0KLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAg
ICByZXR1cm4gY29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5p
dGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwotICAgIAotICAgIGNhc2UgTnVtYmVy
VG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAv
LyBGSVhNRTogUGFzcyBpbiBDU1NWYWx1ZVBvb2wuCisgICAgLy8gTk9URTogVGhlcmUgYXJlIG5v
IHVuaXRsZXNzWmVybyBxdWlya3MgZm9yIGxlbmd0aCwgc28gdGhlIGxhc3QgYXJndW1lbnQgZG9u
J3QgbWF0dGVyLgorICAgIHJldHVybiBjb25zdW1lQ29uc3VtZXI8TGVuZ3RoQ29uc3VtZXI+KHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9R
dWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKIH0KIAotc3RkOjpvcHRp
b25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgY29uc3QgYXV0byYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CitzdHJ1Y3QgUGVyY2VudFJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQg
PSBzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+OworICAgIHVzaW5nIENoZWNrcyA9IHN0ZDo6dHVw
bGU8CisgICAgICAgIFBlcmNlbnRSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIsCisg
ICAgICAgIFBlcmNlbnRSYXdLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcgorICAgID47Cit9
OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpOwotCi0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNl
bnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSk7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0Oworc3RkOjpvcHRpb25hbDxQ
ZXJjZW50UmF3PiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
VmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQoreworICAgIC8vIEZJWE1FOiBQYXNzIGluIENTU1BhcnNl
ck1vZGUuCisgICAgcmV0dXJuIGNvbnN1bWVDb25zdW1lcjxQZXJjZW50UmF3Q29uc3VtZXI+KHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVu
aXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiB9CiAKK3N0
cnVjdCBQZXJjZW50Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT47CisgICAgdXNpbmcgQ2hlY2tzID0gc3RkOjp0dXBsZTwKKyAgICAgICAgUGVy
Y2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNv
bnN1bWVyLAorICAgICAgICBQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcgorICAgID47Cit9OworCiBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50V29ya2VyU2Fm
ZShyYW5nZSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CkBAIC04NDMs
NDQgKzk3MSwzMyBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENT
U1BhcnNlclRva2UKIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudFdv
cmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgQ1NTVmFsdWVQb29sJiBwb29sKQogewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygp
OwotCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwb29sKTsK
LQotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNl
bnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShy
YW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwb29sKTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOworICAgIC8vIEZJWE1FOiBQYXNzIGlu
IENTU1BhcnNlck1vZGUuCisgICAgcmV0dXJuIGNvbnN1bWVDb25zdW1lcjxQZXJjZW50Q29uc3Vt
ZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1v
ZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgcG9v
bCk7CiB9CiAKK3N0cnVjdCBBbmdsZVJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBz
dGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PjsKKyAgICB1c2luZyBDaGVja3MgPSBzdGQ6OnR1cGxlPAor
ICAgICAgICBBbmdsZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciwKKyAgICAgICAg
QW5nbGVSYXdLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyLAorICAgICAgICBBbmdsZVJh
d0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIKKyAgICA+OworfTsKKwogc3RkOjpvcHRpb25h
bDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
U1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNz
WmVyb1F1aXJrIHVuaXRsZXNzWmVybykKIHsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWso
KTsKLQotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKTsKLQotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBj
b25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgVmFs
dWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKLQotICAg
IGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVSYXdXaXRoS25v
d25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IHJldHVybiBjb25zdW1lQ29uc3VtZXI8QW5nbGVSYXdDb25zdW1lcj4ocmFuZ2UsIHsgfSwgVmFs
dWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKIH0KIAor
c3RydWN0IEFuZ2xlQ29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT47CisgICAgdXNpbmcgQ2hlY2tzID0gc3RkOjp0dXBsZTwKKyAgICAgICAgQW5n
bGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25z
dW1lciwKKyAgICAgICAgQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIsCisgICAgICAgIEFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyCisgICAgPjsKK307CisKIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3Ms
IFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKIHsKICAgICByZXR1cm4gY29uc3VtZUFu
Z2xlV29ya2VyU2FmZShyYW5nZSwgcGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7CkBAIC04ODgsMTQ3ICsxMDA1LDEzMiBAQCBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZShDU1NQYXJzZXJUb2tlblIKIAogUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYg
cG9vbCwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3Na
ZXJvKQogewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwotCi0gICAgc3dpdGNoICh0
b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBj
b25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVu
Y3Rpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywg
dW5pdGxlc3NaZXJvLCBwb29sKTsKLQotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAg
IHJldHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7Ci0KLSAgICBjYXNlIE51bWJlclRva2VuOgot
ICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhL
bm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1v
ZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpOwotICAgIAotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gY29uc3VtZUNvbnN1bWVyPEFuZ2xlQ29uc3VtZXI+KHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6
OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7CiB9CiAKK3N0
cnVjdCBUaW1lQ29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT47CisgICAgdXNpbmcgQ2hlY2tzID0gc3RkOjp0dXBsZTwKKyAgICAgICAgVGltZUNT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVy
LAorICAgICAgICBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlw
ZURpbWVuc2lvbkNvbnN1bWVyLAorICAgICAgICBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyCisgICAgPjsKK307CisKIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVz
c1F1aXJrIHVuaXRsZXNzKQogewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAg
IHJldHVybiBjb25zdW1lQ29uc3VtZXI8VGltZUNvbnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJh
bmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkg
ewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVUaW1lQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7
IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpKTsKK3N0cnVjdCBSZXNvbHV0aW9uQ29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47CiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgot
ICAgICAgICByZXR1cm4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUs
IHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKyAgICAvLyBOT1RFOiBVbmxp
a2UgdGhlIG90aGVyIHR5cGVzLCBjYWxjKCkgZG9lcyBub3Qgd29yayB3aXRoIDxyZXNvbHV0aW9u
Pi4KKyAgICB1c2luZyBDaGVja3MgPSBzdGQ6OnR1cGxlPFJlc29sdXRpb25DU1NQcmltaXRpdmVW
YWx1ZVdpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyPjsKK307CiAKLSAgICBjYXNl
IE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2Us
IHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLQotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUmVzb2x1dGlvbihDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICAvLyBOT1RFOiBVbmxpa2UgdGhlIG90aGVy
IHR5cGVzLCBjYWxjKCkgZG9lcyBub3Qgd29yayB3aXRoIDxyZXNvbHV0aW9uPi4KKyAgICAvLyBG
SVhNRTogUGFzcyBpbiBDU1NQYXJzZXJNb2RlLgorICAgIHJldHVybiBjb25zdW1lQ29uc3VtZXI8
UmVzb2x1dGlvbkNvbnN1bWVyPihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIENTU1BhcnNl
ck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CiAKLSAgICBh
dXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKy8vIE1BUks6IC0gQ29tYmluYXRpb24gY29uc3Vt
ZXJzICh0b2tlbiB0eXBlIHVua25vd24gYnkgY2FsbGVyKS4KIAotICAgIHN3aXRjaCAodG9rZW4u
dHlwZSgpKSB7Ci0gICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1
bWVSZXNvbHV0aW9uQ1NTUHJpbWl0aXZlVmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24o
cmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwotICAgIAotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KK3VzaW5nIEFuZ2xlT3JQZXJjZW50Q1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uTWV0YUNvbnN1bWVyCisgICAgPSBT
YW1lVG9rZW5NZXRhQ29uc3VtZXI8CisgICAgICAgIElkZW50aXR5VHJhbnNmb3JtZXI8UmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPj4sCisgICAgICAgIEFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIsCisgICAgICAgIFBlcmNlbnRD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1l
cgorICAgID47CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKy8vIElERUE6IEFsdGVybmF0aXZl
CisvL3VzaW5nIEFuZ2xlT3JQZXJjZW50TWV0YUNvbnN1bWVyCisvLyAgICA9IFVuaXF1ZVRva2Vu
TWV0YUNvbnN1bWVyPAorLy8gICAgICAgIElkZW50aXR5VHJhbnNmb3JtZXI8UmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPj4sCisvLyAgICAgICAgQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIsCisvLyAgICAgICAgQW5nbGVDU1NQcmlt
aXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIsCisv
LyAgICAgICAgQW5nbGVPclBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlRnVuY3Rpb25NZXRhQ29uc3VtZXIKKy8vICAgID47CiAKLS8vIE1BUks6IC0gQ29t
YmluYXRpb24gY29uc3VtZXJzICh0b2tlbiB0eXBlIHVua25vd24gYnkgY2FsbGVyKS4KK3N0cnVj
dCBBbmdsZU9yUGVyY2VudENvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+OworICAgIHVzaW5nIENoZWNrcyA9IHN0ZDo6dHVwbGU8CisgICAgICAg
IFBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlUGVyY2Vu
dENvbnN1bWVyLAorICAgICAgICBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVOdW1iZXJDb25zdW1lciwKKyAgICAgICAgQW5nbGVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIsCisgICAgICAgIEFu
Z2xlT3JQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uTWV0YUNvbnN1bWVyCisgICAgPjsKK307CiAKIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVBbmdsZU9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRs
ZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFs
dWVQb29sJiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSkKIHsKLSAgICBhdXRvJiB0
b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICByZXR1cm4gY29uc3VtZUNvbnN1bWVyPEFuZ2xlT3JQ
ZXJjZW50Q29uc3VtZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRs
ZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpOworfQogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkp
IHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhbHVlID0gY29u
c3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVz
c1plcm8sIHBvb2wpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICByZXR1cm4g
Y29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBl
RnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcG9vbCk7CiAKLSAgICBjYXNlIERpbWVu
c2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdl
LCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBwb29sKTsKLSAgICAKLSAgICBj
YXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJh
bmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBwb29sKTsKK3N0cnVjdCBM
ZW5ndGhPclBlcmNlbnRSYXdUcmFuc2Zvcm1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpv
cHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+OwogCi0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBvb2wp
OwotICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiB0cmFu
c2Zvcm0oVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiB7ICp2YWx1ZSB9OworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KIAot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJh
dz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNz
UXVpcmsgdW5pdGxlc3MpCi17Ci0gICAgYXV0byBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcg
PSBbXShhdXRvIHJlc3VsdCkgLT4gc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IHsK
LSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9OwotCi0gICAgYXV0byYgdG9rZW4gPSBy
YW5nZS5wZWVrKCk7Ci0KLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVu
Y3Rpb25Ub2tlbjogewotICAgICAgICBpZiAoYXV0byBsZW5ndGggPSBjb25zdW1lTGVuZ3RoUmF3
V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2Vy
TW9kZSwgdW5pdGxlc3MpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xlbmd0aE9yUGVy
Y2VudFJhdyhsZW5ndGgpOwotICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNl
bnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKSkK
LSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcocGVyY2VudCk7
Ci0gICAgICAgIGJyZWFrOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2Vu
dFJhdz4gdHJhbnNmb3JtKHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9Cit9OwogCi0gICAgY2FzZSBEaW1l
bnNpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyhj
b25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIHZh
bHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzKSk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJU
b2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyhjb25zdW1l
TGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2Us
IHBhcnNlck1vZGUsIHVuaXRsZXNzKSk7Cit1c2luZyBMZW5ndGhPclBlcmNlbnRSYXdLbm93blRv
a2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIKKyAgICA9IFNhbWVUb2tlbk1ldGFDb25zdW1lcjwKKyAg
ICAgICAgTGVuZ3RoT3JQZXJjZW50UmF3VHJhbnNmb3JtZXIsCisgICAgICAgIFBlcmNlbnRSYXdL
bm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIsCisgICAgICAgIExlbmd0aFJhd0tub3duVG9r
ZW5UeXBlRnVuY3Rpb25Db25zdW1lcgorICAgID47CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tl
bjoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyhjb25zdW1lUGVy
Y2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSkpOworc3RydWN0IExlbmd0aE9yUGVyY2VudFJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1
bHQgPSBzdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz47CisgICAgdXNpbmcgQ2hlY2tz
ID0gc3RkOjp0dXBsZTwKKyAgICAgICAgUGVyY2VudFJhd0tub3duVG9rZW5UeXBlUGVyY2VudENv
bnN1bWVyLCAvLyBQRVJDRU5UCisgICAgICAgIExlbmd0aFJhd0tub3duVG9rZW5UeXBlTnVtYmVy
Q29uc3VtZXIsIC8vIE5VTUJFUgorICAgICAgICBMZW5ndGhSYXdLbm93blRva2VuVHlwZURpbWVu
c2lvbkNvbnN1bWVyLCAvLyBESU1FTlNJT04KKyAgICAgICAgTGVuZ3RoT3JQZXJjZW50UmF3S25v
d25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyIC8vIEZVTkNUSU9OCisgICAgPjsKKyAgICB1c2lu
ZyBUcmFuc2Zvcm1lciA9IExlbmd0aE9yUGVyY2VudFJhd1RyYW5zZm9ybWVyOworfTsKIAotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CitzdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9yUGVy
Y2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7Cisg
ICAgcmV0dXJuIGNvbnN1bWVDb25zdW1lcjxMZW5ndGhPclBlcmNlbnRSYXdDb25zdW1lcj4ocmFu
Z2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1
aXJrOjpGb3JiaWQpOwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5n
dGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBi
b29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSkKKy8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29y
ayB3aXRoIHRoZSBjdXJyZW50IHNjaGVtZSBkdWUgdG8gdGhlIE5lZ2F0aXZlUGVyY2VudGFnZVBv
bGljeSBwYXJhbWV0ZXIKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9y
UGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIE5lZ2F0
aXZlUGVyY2VudGFnZVBvbGljeSBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kpCiB7CiAgICAgYXV0
byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAKICAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewog
ICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMg
YmUgdXNpbmcgdHJ5aW5nIHRvIGdlbmVyYXRlIHRoZSBjYWxjIHdpdGggYm90aCBMZW5ndGggYW5k
IFBlcmNlbnQgZGVzdGluYXRpb24gY2F0ZWdvcnkgdHlwZXM/Ci0gICAgICAgIENhbGNQYXJzZXIg
cGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UsIHsg
fSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlKTsK
KyAgICAgICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxl
bmd0aCwgdmFsdWVSYW5nZSwgeyB9LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCBuZWdhdGl2
ZVBlcmNlbnRhZ2VQb2xpY3kpOwogICAgICAgICBpZiAoYXV0byBjYWxjdWxhdGlvbiA9IHBhcnNl
ci52YWx1ZSgpOyBjYWxjdWxhdGlvbiAmJiBjYW5Db25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9u
LT5jYXRlZ29yeSgpLCBwYXJzZXJNb2RlKSkKICAgICAgICAgICAgIHJldHVybiBwYXJzZXIuY29u
c3VtZVZhbHVlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgRGltZW5zaW9u
VG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBw
YXJzZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci0gICAgCisg
ICAgICAgIHJldHVybiBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkpOworCiAgICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0
dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIExlbmd0aENTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjo6Y29uc3Vt
ZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAKICAgICBjYXNl
IFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiBQ
ZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRD
b25zdW1lcjo6Y29uc3VtZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0
bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KSk7CiAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTEwMzksMTAxICsxMTQxLDg4
IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQ
YQogCiAvLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyB0aGF0IGFsbG93IGxvb2t1cCBp
biB0aGUgc3ltYm9sIHRhYmxlIGZvciBJZGVudFRva2VucyAoYnkgZGVmYXVsdCwgb3RoZXIgY29u
c3VtZXJzIG9ubHkgbG9va3VwIGluIHRoZSBzeW1ib2wgdGFibGUgZm9yIGNhbGMoKSkuCiAKLXN0
YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlckFsbG93aW5nU3ltYm9sVGFi
bGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRh
YmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxs
KQorc3RydWN0IE51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudENvbnN1bWVyIHsKKyAg
ICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz47CisgICAgdXNpbmcgQ2hl
Y2tzID0gc3RkOjp0dXBsZTwKKyAgICAgICAgTnVtYmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlv
bkNvbnN1bWVyLAorICAgICAgICBOdW1iZXJSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVy
LAorICAgICAgICBOdW1iZXJSYXdLbm93blRva2VuVHlwZUlkZW50Q29uc3VtZXIKKyAgICA+Owor
fTsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PiBjb25zdW1lTnVtYmVyQWxsb3dp
bmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1ND
YWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1
ZVJhbmdlOjpBbGwpCiB7Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgLy8g
RklYTUU6IFBhc3MgaW4gQ1NTUGFyc2VyTW9kZS4KKyAgICByZXR1cm4gY29uc3VtZUNvbnN1bWVy
PE51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudENvbnN1bWVyPihyYW5nZSwgc3ltYm9s
VGFibGUsIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRs
ZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7Cit9CiAKLSAgICBz
d2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAg
cmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwg
c3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOworc3RydWN0IFBlcmNlbnRSYXdBbGxvd2luZ1N5bWJv
bFRhYmxlSWRlbnRDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25hbDxQ
ZXJjZW50UmF3PjsKKyAgICB1c2luZyBDaGVja3MgPSBzdGQ6OnR1cGxlPAorICAgICAgICBQZXJj
ZW50UmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBQZXJjZW50UmF3
S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXIsCisgICAgICAgIFBlcmNlbnRSYXdLbm93blRv
a2VuVHlwZUlkZW50Q29uc3VtZXIKKyAgICA+OworfTsKIAotICAgIGNhc2UgTnVtYmVyVG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVy
KHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSk7Ci0KLSAgICBjYXNlIElkZW50VG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CitzdGF0aWMgc3RkOjpv
cHRpb25hbDxQZXJjZW50UmF3PiBjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVu
dChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKQorewor
ICAgIC8vIEZJWE1FOiBQYXNzIGluIENTU1BhcnNlck1vZGUuCisgICAgcmV0dXJuIGNvbnN1bWVD
b25zdW1lcjxQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3VtZXI+KHJhbmdl
LCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9k
ZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKIH0K
IAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudEFsbG93aW5nU3lt
Ym9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5n
ZTo6QWxsKQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwogCi0gICAgc3dpdGNo
ICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVy
biBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBzeW1i
b2xUYWJsZSwgdmFsdWVSYW5nZSk7CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAg
ICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShy
YW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOworc3RydWN0IENvbXB1dGVEZWdyZWVzVHJh
bnNmb3JtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPjsKIAot
ICAgIGNhc2UgSWRlbnRUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0
aEtub3duVG9rZW5UeXBlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKLQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci19Ci0KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUFuZ2xlUmF3
T3JOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSkKLXsKLSAgICBhdXRvIGNvbXB1dGVEZWdyZWVzID0gW10oYXV0byBhbmdsZVJhdykg
LT4gc3RkOjpvcHRpb25hbDxkb3VibGU+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHRyYW5zZm9ybShzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBhbmdsZVJhdykKKyAgICB7CiAg
ICAgICAgIGlmIChhbmdsZVJhdykKICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZURlZ3JlZXMoYW5nbGVSYXctPnR5cGUsIGFuZ2xlUmF3LT52YWx1ZSk7CiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfTsKKyAgICB9CiAKLSAgICBhdXRvJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IHRyYW5z
Zm9ybShzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUtPnZhbHVlOworICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIH0KIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAg
Y2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICBpZiAoYXV0byBhbmdsZVJhdyA9IGNvbnN1bWVB
bmdsZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6
OkFsbCwgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWly
azo6Rm9yYmlkKSkKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlRGVncmVlcyhhbmdsZVJhdyk7
Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsKTsKLSAgICAKLSAgICBjYXNlIERpbWVuc2lv
blRva2VuOgotICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoY29uc3VtZUFuZ2xlUmF3V2l0
aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlk
KSk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVO
dW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6
QWxsKTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gdHJhbnNmb3JtKHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9Cit9OwogCi0gICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLX0KK3VzaW5nIEFuZ2xlT3JOdW1iZXJSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9u
Q29uc3VtZXIKKyAgICA9IFNhbWVUb2tlbk1ldGFDb25zdW1lcjwKKyAgICAgICAgQ29tcHV0ZURl
Z3JlZXNUcmFuc2Zvcm1lciwKKyAgICAgICAgTnVtYmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlv
bkNvbnN1bWVyLAorICAgICAgICBBbmdsZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1l
cgorICAgID47CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUFuZ2xlUmF3
T3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIENTU1BhcnNlck1v
ZGUgcGFyc2VyTW9kZSkKK3N0cnVjdCBBbmdsZU9yTnVtYmVyUmF3Q29uc3VtZXIgeworICAgIHVz
aW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPjsKKyAgICB1c2luZyBDaGVja3MgPSBz
dGQ6OnR1cGxlPAorICAgICAgICBOdW1iZXJSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVy
LAorICAgICAgICBBbmdsZVJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIsCisgICAg
ICAgIEFuZ2xlT3JOdW1iZXJSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIKKyAgICA+
OworICAgIHVzaW5nIFRyYW5zZm9ybWVyID0gQ29tcHV0ZURlZ3JlZXNUcmFuc2Zvcm1lcjsKK307
CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUFuZ2xlT3JOdW1iZXJSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkKIHsK
LSAgICBhdXRvIGNvbXB1dGVEZWdyZWVzID0gW10oYXV0byBhbmdsZVJhdykgLT4gc3RkOjpvcHRp
b25hbDxkb3VibGU+IHsKLSAgICAgICAgaWYgKGFuZ2xlUmF3KQotICAgICAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZVJhdy0+dHlwZSwgYW5nbGVS
YXctPnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9OworICAgIHJl
dHVybiBjb25zdW1lQ29uc3VtZXI8QW5nbGVPck51bWJlclJhd0NvbnN1bWVyPihyYW5nZSwgeyB9
LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7Cit9CiAKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBl
ZWsoKTsKLQotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRv
a2VuOgotICAgICAgICBpZiAoYXV0byBhbmdsZVJhdyA9IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsLCBw
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3Ji
aWQpKQotICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVEZWdyZWVzKGFuZ2xlUmF3KTsKLSAgICAg
ICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5n
ZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCk7Ci0gICAgCi0gICAgY2FzZSBEaW1lbnNp
b25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVEZWdyZWVzKGNvbnN1bWVBbmdsZVJhd1dp
dGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJp
ZCkpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1l
TnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6
OkFsbCk7Ci0KLSAgICBjYXNlIElkZW50VG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhcmlhYmxl
ID0gc3ltYm9sVGFibGUuZ2V0KHRva2VuLmlkKCkpKSB7CitzdHJ1Y3QgQW5nbGVPck51bWJlclJh
d0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQ
YXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gSWRlbnRUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxkb3VibGU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0
IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UsIENTU1BhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8gdmFyaWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7CiAg
ICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7CiAgICAgICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfREVHOgogICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JB
RDoKQEAgLTExNTAsNzYgKzEyMzksMTUyIEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
Y29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwogCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQorfTsKIAotICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CitzdHJ1Y3QgQW5nbGVPck51bWJlclJhd0FsbG93aW5nU3lt
Ym9sVGFibGVJZGVudENvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT47CisgICAgdXNpbmcgQ2hlY2tzID0gc3RkOjp0dXBsZTwKKyAgICAgICAgTnVtYmVy
UmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lciwKKyAgICAgICAgQW5nbGVSYXdLbm93blRv
a2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyLAorICAgICAgICBBbmdsZU9yTnVtYmVyUmF3S25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyCisgICAgPjsKKyAgICB1c2luZyBUcmFuc2Zvcm1lciA9
IENvbXB1dGVEZWdyZWVzVHJhbnNmb3JtZXI7Cit9OworCitzdGF0aWMgc3RkOjpvcHRpb25hbDxk
b3VibGU+IGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpCit7CisgICAgcmV0dXJuIGNvbnN1bWVD
b25zdW1lcjxBbmdsZU9yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3VtZXI+
KHJhbmdlLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogfQogCiAvLyBNQVJL
OiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyB3aXRoIHRyYW5zZm9ybWF0aW9ucyBiYXNlZCBvbiBy
ZXN1bHQgdHlwZS4KIAotdGVtcGxhdGU8dHlwZW5hbWUgTnVtYmVyVHJhbnNmb3JtZXIsIHR5cGVu
YW1lIFBlcmNlbnRUcmFuc2Zvcm1lcj4KLXN0YXRpYyBhdXRvIGNvbnN1bWVOdW1iZXJSYXdPclBl
cmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgTnVtYmVyVHJhbnNmb3JtZXImJiBudW1iZXJUcmFuc2Zvcm1lciwgUGVyY2VudFRyYW5zZm9y
bWVyJiYgcGVyY2VudFRyYW5zZm9ybWVyKSAtPiBzdGQ6Om9wdGlvbmFsPGRlY2x0eXBlKG51bWJl
clRyYW5zZm9ybWVyKHN0ZDo6ZGVjbHZhbDxkb3VibGU+KCkpKT4KLXsKLSAgICBjb25zdCBhdXRv
JiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKK3N0cnVjdCBQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNm
b3JtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPjsKIAotICAg
IHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOiB7Ci0gICAg
ICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVG
dW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBudW1i
ZXJUcmFuc2Zvcm1lcigqbnVtYmVyKTsKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1
bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVS
YW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gcGVyY2VudFRyYW5zZm9ybWVyKCpwZXJjZW50KTsK
LSAgICAgICAgYnJlYWs7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB0cmFuc2Zv
cm0oc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT52YWx1ZTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAg
aWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVy
Y2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBwZXJj
ZW50VHJhbnNmb3JtZXIoKnBlcmNlbnQpOwotICAgICAgICBicmVhazsKKyAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxkb3VibGU+IHRyYW5zZm9ybShzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LT52YWx1ZSAvIDEwMC4wOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KIAot
ICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVO
dW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVtYmVyVHJhbnNmb3JtZXIoKm51bWJlcik7Ci0gICAgICAg
IGJyZWFrOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdHJhbnNmb3JtKHN0ZDo6
b3B0aW9uYWw8TnVtYmVyT3JQZXJjZW50UmF3PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oKnZhbHVlLAorICAgICAg
ICAgICAgICAgIFtdIChOdW1iZXJSYXcgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLnZhbHVlOyB9LAor
ICAgICAgICAgICAgICAgIFtdIChQZXJjZW50UmF3IHZhbHVlKSB7IHJldHVybiB2YWx1ZS52YWx1
ZSAvIDEwMC4wOyB9CisgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgfQogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB0cmFuc2Zvcm0oc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KK307CiAKLSAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQordXNpbmcgTnVtYmVyT3JQZXJjZW50UmF3S25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyCisgICAgPSBTYW1lVG9rZW5NZXRhQ29uc3VtZXI8Cisg
ICAgICAgIFBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lciwKKyAgICAgICAgUGVyY2VudFJh
d0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciwKKyAgICAgICAgTnVtYmVyUmF3S25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyCisgICAgPjsKIAorc3RydWN0IE51bWJlclJhd09yUGVy
Y2VudERpdmlkZWRCeTEwMFJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT47CisgICAgdXNpbmcgQ2hlY2tzID0gc3RkOjp0dXBsZTwKKyAgICAgICAg
TnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lciwKKyAgICAgICAgUGVyY2VudFJh
d0tub3duVG9rZW5UeXBlUGVyY2VudENvbnN1bWVyLAorICAgICAgICBOdW1iZXJPclBlcmNlbnRS
YXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIKKyAgICA+OworICAgIHVzaW5nIFRyYW5z
Zm9ybWVyID0gUGVyY2VudERpdmlkZWRCeTEwMFRyYW5zZm9ybWVyOworfTsKKwogc3RhdGljIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAw
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBW
YWx1ZVJhbmdlOjpBbGwpCiB7Ci0gICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRS
YXcocmFuZ2UsIHZhbHVlUmFuZ2UsIFtdKGRvdWJsZSBudW1iZXIpIHsgcmV0dXJuIG51bWJlcjsg
fSwgW10oZG91YmxlIHBlcmNlbnQpIHsgcmV0dXJuIHBlcmNlbnQgLyAxMDAuMDsgfSk7CisgICAg
cmV0dXJuIGNvbnN1bWVDb25zdW1lcjxOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdD
b25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5k
YXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlk
KTsKIH0KIAorc3RydWN0IE51bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25z
dW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBl
ID0gSWRlbnRUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJPclBlcmNlbnRS
YXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBpZiAo
YXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlk
YXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFu
Z2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7eyAqdmFsaWRhdGVkVmFsdWUgfX07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOgorICAgICAgICAgICAgICAgIGlmIChhdXRv
IHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFs
dWVSYW5nZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt7ICp2YWxpZGF0ZWRWYWx1
ZSB9fTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307CisKK3N0
cnVjdCBOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRhYmxl
SWRlbnRDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25hbDxkb3VibGU+
OworICAgIHVzaW5nIENoZWNrcyA9IHN0ZDo6dHVwbGU8CisgICAgICAgIE51bWJlclJhd0tub3du
VG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIsCisgICAgICAgIFBlcmNlbnRSYXdLbm93blRva2VuVHlw
ZVBlcmNlbnRDb25zdW1lciwKKyAgICAgICAgTnVtYmVyT3JQZXJjZW50UmF3S25vd25Ub2tlblR5
cGVGdW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBOdW1iZXJPclBlcmNlbnRSYXdLbm93blRva2Vu
VHlwZUlkZW50Q29uc3VtZXIKKyAgICA+OworICAgIHVzaW5nIFRyYW5zZm9ybWVyID0gUGVyY2Vu
dERpdmlkZWRCeTEwMFRyYW5zZm9ybWVyOworfTsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3QWxsb3dpbmdTeW1i
b2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit7CisgICAgcmV0
dXJuIGNvbnN1bWVDb25zdW1lcjxOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxv
d2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lcj4ocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJh
bmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3Ji
aWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOworfQorCiAvLyBNQVJLOiAtIENvbWJpbmF0
aW9uIGNvbnN1bWVycyB0aGF0IGJvdGggYWxsb3cgbG9va3VwIGluIHRoZSBzeW1ib2wgdGFibGUg
Zm9yIElkZW50VG9rZW5zIGFuZCB0cmFuc2Zvcm1hdGlvbnMgYmFzZWQgb24gcmVzdWx0IHR5cGUu
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE51bWJlclRyYW5zZm9ybWVyLCB0eXBlbmFtZSBQZXJjZW50
VHJhbnNmb3JtZXI+Ci1zdGF0aWMgYXV0byBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3QWxs
b3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIE51
bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbnNmb3JtZXIsIFBlcmNlbnRUcmFuc2Zvcm1lciYm
IHBlcmNlbnRUcmFuc2Zvcm1lcikgLT4gc3RkOjpvcHRpb25hbDxkZWNsdHlwZShudW1iZXJUcmFu
c2Zvcm1lcihzdGQ6OmRlY2x2YWw8ZG91YmxlPigpKSk+CitzdGF0aWMgYXV0byBjb25zdW1lTnVt
YmVyUmF3T3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIE51bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbnNmb3JtZXIs
IFBlcmNlbnRUcmFuc2Zvcm1lciYmIHBlcmNlbnRUcmFuc2Zvcm1lcikgLT4gc3RkOjpvcHRpb25h
bDxkZWNsdHlwZShudW1iZXJUcmFuc2Zvcm1lcihzdGQ6OmRlY2x2YWw8TnVtYmVyUmF3PigpKSk+
CiB7CiAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAKICAgICBzd2l0Y2ggKHRva2Vu
LnR5cGUoKSkgewogICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewotICAgICAgICBpZiAoYXV0byBu
dW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2Us
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkKKyAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gTnVt
YmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCBzeW1i
b2xUYWJsZSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5p
dGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSkKICAgICAgICAg
ICAgIHJldHVybiBudW1iZXJUcmFuc2Zvcm1lcigqbnVtYmVyKTsKLSAgICAgICAgaWYgKGF1dG8g
cGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFu
Z2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkKKyAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9
IFBlcmNlbnRSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2Us
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2Rl
LCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKQogICAg
ICAgICAgICAgcmV0dXJuIHBlcmNlbnRUcmFuc2Zvcm1lcigqcGVyY2VudCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICBpZiAoYXV0
byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdl
KHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpCisgICAgICAgIGlmIChhdXRvIHBlcmNl
bnQgPSBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXI6OmNvbnN1bWUocmFu
Z2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRN
b2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKQog
ICAgICAgICAgICAgcmV0dXJuIHBlcmNlbnRUcmFuc2Zvcm1lcigqcGVyY2VudCk7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgaWYgKGF1dG8gbnVtYmVy
ID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgc3ltYm9s
VGFibGUsIHZhbHVlUmFuZ2UpKQorICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBOdW1iZXJSYXdL
bm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwg
dmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWly
azo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSkKICAgICAgICAgICAgIHJldHVy
biBudW1iZXJUcmFuc2Zvcm1lcigqbnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTEyNTMs
MjAgKzE0MTgsMTUgQEAgc3RhdGljIGF1dG8gY29uc3VtZU51bWJlclJhd09yUGVyY2VudFJhd0Fs
bG93aW5nU3ltYm9sCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGljIHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3
QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Up
Ci17Ci0gICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJv
bFRhYmxlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBbXShkb3VibGUgbnVt
YmVyKSB7IHJldHVybiBudW1iZXI7IH0sIFtdKGRvdWJsZSBwZXJjZW50KSB7IHJldHVybiBwZXJj
ZW50IC8gMTAwLjA7IH0pOwotfQotCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVO
dW1iZXJPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSkKIHsKICAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKIAogICAgIHN3aXRj
aCAodG9rZW4udHlwZSgpKSB7CiAgICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICBpZiAo
YXV0byB2YWx1ZSA9IGNvbnN1bWVOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKSkpCisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gTnVtYmVyQ1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1
bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9k
ZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpKSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAg
ICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCB7
IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNz
UXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKSk7CiAKICAgICBjYXNlIE51bWJlclRva2VuOgogICAgIGNhc2UgUGVyY2VudGFn
ZVRva2VuOiB7CkBAIC0xMjk3LDE0ICsxNDU3LDE0IEBAIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBj
b25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYQogICAgIHN3aXRjaCAodG9rZW4udHlwZSgp
KSB7CiAgICAgY2FzZSBGdW5jdGlvblRva2VuOiB7CiAgICAgICAgIC8vICJbRm9yIGNhbGMoKV0s
IHRoZSB1c2VkIHZhbHVlIHJlc3VsdGluZyBmcm9tIGFuIGV4cHJlc3Npb24gbXVzdCBiZSBjbGFt
cGVkIHRvIHRoZSByYW5nZSBhbGxvd2VkIGluIHRoZSB0YXJnZXQgY29udGV4dC4iCi0gICAgICAg
IGF1dG8gcmVzdWx0ID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9u
KHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gTnVt
YmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCB7IH0s
IFZhbHVlUmFuZ2U6OkFsbCwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxl
c3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKICAgICAgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgICAgICBicmVhazsKICNpZiAhRU5BQkxFKFZBUklBVElPTl9GT05U
UykKLSAgICAgICAgaWYgKCEoKnJlc3VsdCA+IDAgJiYgKnJlc3VsdCA8IDEwMDApIHx8ICFpc0lu
dGVnZXJBbmREaXZpc2libGVCeTEwMCgqcmVzdWx0KSkKKyAgICAgICAgaWYgKCEocmVzdWx0LT52
YWx1ZSA+IDAgJiYgcmVzdWx0LT52YWx1ZSA8IDEwMDApIHx8ICFpc0ludGVnZXJBbmREaXZpc2li
bGVCeTEwMChyZXN1bHQtPnZhbHVlKSkKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAg
ICAgIHJldHVybiBzdGQ6OmNsYW1wKCpyZXN1bHQsIHN0ZDo6bmV4dGFmdGVyKDAuMCwgMS4wKSwg
c3RkOjpuZXh0YWZ0ZXIoMTAwMC4wLCAwLjApKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAo
cmVzdWx0LT52YWx1ZSwgc3RkOjpuZXh0YWZ0ZXIoMC4wLCAxLjApLCBzdGQ6Om5leHRhZnRlcigx
MDAwLjAsIDAuMCkpOwogICAgIH0KIAogICAgIGNhc2UgTnVtYmVyVG9rZW46IHsKQEAgLTE0Njks
MTQgKzE2MjksMTQgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lT3B0aW9u
YWxBbHBoYUFsbG93CiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGljIHVpbnQ4
X3Qgbm9ybWFsaXplUkdCQ29tcG9uZW50TnVtYmVyKGRvdWJsZSB2YWx1ZSkKK3N0YXRpYyB1aW50
OF90IG5vcm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcihOdW1iZXJSYXcgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUpOworICAg
IHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlLnZhbHVl
KTsKIH0KIAotc3RhdGljIHVpbnQ4X3Qgbm9ybWFsaXplUkdCQ29tcG9uZW50UGVyY2VudGFnZShk
b3VibGUgdmFsdWUpCitzdGF0aWMgdWludDhfdCBub3JtYWxpemVSR0JDb21wb25lbnRQZXJjZW50
YWdlKFBlcmNlbnRSYXcgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdC
QUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUgLyAxMDAuMCAqIDI1NS4wKTsKKyAgICByZXR1cm4gY29u
dmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZSh2YWx1ZS52YWx1ZSAvIDEwMC4wICog
MjU1LjApOwogfQogCiBzdGF0aWMgc3RkOjpvcHRpb25hbDx1aW50OF90PiBjb25zdW1lUmVsYXRp
dmVSR0JDb21wb25lbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCkBAIC0xNDg5LDkgKzE2NDksOSBAQCBzdGF0aWMgdWlu
dDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgdmFsdWUsIFJHQkNvbXAKIHsKICAgICBzd2l0
Y2ggKGNvbXBvbmVudFR5cGUpIHsKICAgICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6Ok51bWJlcjoK
LSAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcih2YWx1ZSk7CisgICAg
ICAgIHJldHVybiBub3JtYWxpemVSR0JDb21wb25lbnROdW1iZXIoeyB2YWx1ZSB9KTsKICAgICBj
YXNlIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2U6Ci0gICAgICAgIHJldHVybiBub3JtYWxp
emVSR0JDb21wb25lbnRQZXJjZW50YWdlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6
ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UoeyB2YWx1ZSB9KTsKICAgICB9CiAgICAgCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNTczLDE4ICsxNzMzLDIyIEBAIHN0YXRpYyBDb2xvciBw
YXJzZU5vblJlbGF0aXZlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJUbwogCiAgICAgYXV0byBjb25z
dW1lSW5pdGlhbENvbXBvbmVudCA9IFtdKGF1dG8mIGFyZ3MpIC0+IHN0ZDo6b3B0aW9uYWw8SW5p
dGlhbENvbXBvbmVudD4gewogICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVy
UmF3KGFyZ3MpKQotICAgICAgICAgICAgcmV0dXJuIHsgeyAqbnVtYmVyLCBSR0JDb21wb25lbnRU
eXBlOjpOdW1iZXIgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBudW1iZXItPnZhbHVlLCBS
R0JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSB9OwogICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0g
Y29uc3VtZVBlcmNlbnRSYXcoYXJncykpCi0gICAgICAgICAgICByZXR1cm4geyB7ICpwZXJjZW50
LCBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlIH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7
IHsgcGVyY2VudC0+dmFsdWUsIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2UgfSB9OwogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH07CiAKLSAgICBhdXRvIGNvbnN1bWVDb21w
b25lbnQgPSBbXShhdXRvJiBhcmdzLCBhdXRvIGNvbXBvbmVudFR5cGUpIHsKKyAgICBhdXRvIGNv
bnN1bWVDb21wb25lbnQgPSBbXShhdXRvJiBhcmdzLCBhdXRvIGNvbXBvbmVudFR5cGUpIC0+IHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiB7CiAgICAgICAgIHN3aXRjaCAoY29tcG9uZW50VHlwZSkgewog
ICAgICAgICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7CisgICAgICAgICAgICBpZiAoYXV0byBwZXJj
ZW50ID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBl
cmNlbnQtPnZhbHVlOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAg
Y2FzZSBSR0JDb21wb25lbnRUeXBlOjpOdW1iZXI6Ci0gICAgICAgICAgICByZXR1cm4gY29uc3Vt
ZU51bWJlclJhdyhhcmdzKTsKKyAgICAgICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVO
dW1iZXJSYXcoYXJncykpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlci0+dmFsdWU7Cisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICB9CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfTsKQEAgLTE2NjgsNyArMTgzMiw3IEBAIHN0
YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAg
ICAgICB7IENTU1ZhbHVlQWxwaGEsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2lu
Q29sb3JBc0hTTC5hbHBoYSAqIDEwMC4wIH0KICAgICB9OwogCi0gICAgYXV0byBodWUgPSBjb25z
dW1lQW5nbGVSYXdPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1i
b2xUYWJsZSwgY29udGV4dC5tb2RlKTsKKyAgICBhdXRvIGh1ZSA9IGNvbnN1bWVBbmdsZU9yTnVt
YmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlLCBjb250ZXh0
Lm1vZGUpOwogICAgIGlmICghaHVlKQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0xNjg3LDEy
ICsxODUxLDEyIEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFNMUGFyYW1ldGVycyhDU1NQ
YXJzZXJUb2tlbgogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgcmV0dXJuIGNvbG9yQnlOb3JtYWxpemluZ0hTTENvbXBvbmVudHMoKmh1ZSwgKnNhdHVy
YXRpb24sICpsaWdodG5lc3MsICphbHBoYSk7CisgICAgcmV0dXJuIGNvbG9yQnlOb3JtYWxpemlu
Z0hTTENvbXBvbmVudHMoKmh1ZSwgc2F0dXJhdGlvbi0+dmFsdWUsIGxpZ2h0bmVzcy0+dmFsdWUs
ICphbHBoYSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZU5vblJlbGF0aXZlSFNMUGFyYW1ldGVy
cyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250
ZXh0KQogewotICAgIGF1dG8gaHVlID0gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoYXJncywg
Y29udGV4dC5tb2RlKTsKKyAgICBhdXRvIGh1ZSA9IGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3KGFy
Z3MsIGNvbnRleHQubW9kZSk7CiAgICAgaWYgKCFodWUpCiAgICAgICAgIHJldHVybiB7IH07CiAK
QEAgLTE3MTYsNyArMTg4MCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZU5vblJlbGF0aXZlSFNMUGFy
YW1ldGVycyhDU1NQYXJzZXJUbwogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgcmV0dXJuIGNvbG9yQnlOb3JtYWxpemluZ0hTTENvbXBvbmVudHMoKmh1
ZSwgKnNhdHVyYXRpb24sICpsaWdodG5lc3MsICphbHBoYSk7CisgICAgcmV0dXJuIGNvbG9yQnlO
b3JtYWxpemluZ0hTTENvbXBvbmVudHMoKmh1ZSwgc2F0dXJhdGlvbi0+dmFsdWUsIGxpZ2h0bmVz
cy0+dmFsdWUsICphbHBoYSk7CiB9CiAKIGVudW0gY2xhc3MgSFNMRnVuY3Rpb25Nb2RlIHsgSFNM
LCBIU0xBIH07CkBAIC0xNzU3LDcgKzE5MjEsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VIV0JQYXJh
bWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGEKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IGF1dG8gbm9ybWFsaXplZEh1ZSA9IG5vcm1hbGl6ZUh1ZSgqaHVlKTsKLSAgICBhdXRvIFtub3Jt
YWxpemVkV2hpdG5lc3MsIG5vcm1hbGl6ZWRCbGFja25lc3NdID0gbm9ybWFsaXplV2hpdGVuZXNz
QmxhY2tuZXNzKCp3aGl0ZW5lc3MsICpibGFja25lc3MpOworICAgIGF1dG8gW25vcm1hbGl6ZWRX
aGl0bmVzcywgbm9ybWFsaXplZEJsYWNrbmVzc10gPSBub3JtYWxpemVXaGl0ZW5lc3NCbGFja25l
c3Mod2hpdGVuZXNzLT52YWx1ZSwgYmxhY2tuZXNzLT52YWx1ZSk7CiAKICAgICAvLyBOT1RFOiBU
aGUgZXhwbGljaXQgY29udmVyc2lvbiB0byBTUkdCQTx1aW50OF90PiBpcyBpbnRlbnRpb25hbCBm
b3IgcGVyZm9ybWFuY2UgKG5vIGV4dHJhIGFsbG9jYXRpb24gZm9yCiAgICAgLy8gdGhlIGV4dGVu
ZGVkIGNvbG9yKSBhbmQgY29tcGF0YWJpbGl0eSwgZm9yY2luZyBzZXJpYWxpYXphdGlvbiB0byB1
c2UgdGhlIHJnYigpL3JnYmEoKSBmb3JtLgpAQCAtMTc4Miw3ICsxOTQ2LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgICAgIHsg
Q1NTVmFsdWVBbHBoYSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFz
SFdCLmFscGhhICogMTAwLjAgfQogICAgIH07CiAKLSAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZz
eW1ib2xUYWJsZSwgJmNvbnRleHRdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVBbmdsZVJh
d09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlLCBj
b250ZXh0Lm1vZGUpOyB9OworICAgIGF1dG8gaHVlQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlLCAm
Y29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFuZ2xlT3JOdW1iZXJSYXdBbGxv
d2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUsIGNvbnRleHQubW9kZSk7IH07
CiAgICAgYXV0byB3aGl0ZW5lc3NBbmRCbGFja25lc3NDb25zdW1lciA9IFsmc3ltYm9sVGFibGVd
KGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVQZXJjZW50QWxsb3dpbmdTeW1ib2xUYWJsZUlk
ZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsgfTsKICAgICBhdXRvIGFscGhhQ29uc3VtZXIgPSBbJnN5
bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93
aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7IH07CiAKQEAgLTE3OTEsNyAr
MTk1NSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJz
ZXJUb2tlbgogCiBzdGF0aWMgQ29sb3IgcGFyc2VOb25SZWxhdGl2ZUhXQlBhcmFtZXRlcnMoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkK
IHsKLSAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZjb250ZXh0XShhdXRvJiBhcmdzKSB7IHJldHVy
biBjb25zdW1lQW5nbGVSYXdPck51bWJlclJhdyhhcmdzLCBjb250ZXh0Lm1vZGUpOyB9OworICAg
IGF1dG8gaHVlQ29uc3VtZXIgPSBbJmNvbnRleHRdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1
bWVBbmdsZU9yTnVtYmVyUmF3KGFyZ3MsIGNvbnRleHQubW9kZSk7IH07CiAgICAgYXV0byB3aGl0
ZW5lc3NBbmRCbGFja25lc3NDb25zdW1lciA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1
bWVQZXJjZW50UmF3KGFyZ3MpOyB9OwogICAgIGF1dG8gYWxwaGFDb25zdW1lciA9IFtdKGF1dG8m
IGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVPcHRpb25hbEFscGhhKGFyZ3MpOyB9OwogCkBAIC0xODM0
LDkgKzE5OTgsOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VMYWJQYXJhbWV0ZXJzKENTU1BhcnNlclRv
a2VuUmFuZ2UmIGEKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGF1dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9IHN0ZDo6bWF4KDAuMCwgKmxpZ2h0bmVz
cyk7CisgICAgYXV0byBub3JtYWxpemVkTGlnaHRuZXNzID0gc3RkOjptYXgoMC4wLCBsaWdodG5l
c3MtPnZhbHVlKTsKIAotICAgIHJldHVybiBDb2xvclR5cGUgeyBzdGF0aWNfY2FzdDxmbG9hdD4o
bm9ybWFsaXplZExpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PigqYVZhbHVlKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KCpiVmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9OworICAg
IHJldHVybiBDb2xvclR5cGUgeyBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZExpZ2h0bmVz
cyksIHN0YXRpY19jYXN0PGZsb2F0PihhVmFsdWUtPnZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGJWYWx1ZS0+dmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9OwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+CkBAIC0xOTEyLDggKzIwNzYsOCBAQCBzdGF0aWMgQ29s
b3IgcGFyc2VMQ0hQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGEKICAgICBpZiAoIWFy
Z3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gbm9ybWFsaXplZExp
Z2h0bmVzcyA9IHN0ZDo6bWF4KDAuMCwgKmxpZ2h0bmVzcyk7Ci0gICAgYXV0byBub3JtYWxpemVk
Q2hyb21hID0gc3RkOjptYXgoMC4wLCAqY2hyb21hKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRMaWdo
dG5lc3MgPSBzdGQ6Om1heCgwLjAsIGxpZ2h0bmVzcy0+dmFsdWUpOworICAgIGF1dG8gbm9ybWFs
aXplZENocm9tYSA9IHN0ZDo6bWF4KDAuMCwgY2hyb21hLT52YWx1ZSk7CiAgICAgYXV0byBub3Jt
YWxpemVkSHVlID0gbm9ybWFsaXplSHVlKCpodWUpOwogCiAgICAgcmV0dXJuIENvbG9yVHlwZSB7
IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkTGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG5vcm1hbGl6ZWRDaHJvbWEpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZEh1ZSks
IHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07CkBAIC0xOTQwLDcgKzIxMDQsNyBAQCBzdGF0
aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxDSFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KIAogICAg
IGF1dG8gbGlnaHRuZXNzQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJl
dHVybiBjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xU
YWJsZSk7IH07CiAgICAgYXV0byBjaHJvbWFDb25zdW1lciA9IFsmc3ltYm9sVGFibGVdKGF1dG8m
IGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJn
cywgc3ltYm9sVGFibGUpOyB9OwotICAgIGF1dG8gaHVlQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxl
LCAmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJS
YXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUsIGNvbnRleHQubW9k
ZSk7IH07CisgICAgYXV0byBodWVDb25zdW1lciA9IFsmc3ltYm9sVGFibGUsICZjb250ZXh0XShh
dXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVPck51bWJlclJhd0FsbG93aW5nU3ltYm9s
VGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSwgY29udGV4dC5tb2RlKTsgfTsKICAgICBhdXRv
IGFscGhhQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25z
dW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJs
ZSk7IH07CiAKICAgICByZXR1cm4gcGFyc2VMQ0hQYXJhbWV0ZXJzPENvbG9yVHlwZT4oYXJncywg
V1RGTW92ZShsaWdodG5lc3NDb25zdW1lciksIFdURk1vdmUoY2hyb21hQ29uc3VtZXIpLCBXVEZN
b3ZlKGh1ZUNvbnN1bWVyKSwgV1RGTW92ZShhbHBoYUNvbnN1bWVyKSk7CkBAIC0xOTUxLDcgKzIx
MTUsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VOb25SZWxhdGl2ZUxDSFBhcmFtZXRlcnMoQ1NTUGFy
c2VyVG8KIHsKICAgICBhdXRvIGxpZ2h0bmVzc0NvbnN1bWVyID0gW10oYXV0byYgYXJncykgeyBy
ZXR1cm4gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7IH07CiAgICAgYXV0byBjaHJvbWFDb25zdW1l
ciA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7IH07Ci0g
ICAgYXV0byBodWVDb25zdW1lciA9IFsmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29u
c3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoYXJncywgY29udGV4dC5tb2RlKTsgfTsKKyAgICBhdXRv
IGh1ZUNvbnN1bWVyID0gWyZjb250ZXh0XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5n
bGVPck51bWJlclJhdyhhcmdzLCBjb250ZXh0Lm1vZGUpOyB9OwogICAgIGF1dG8gYWxwaGFDb25z
dW1lciA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVPcHRpb25hbEFscGhhKGFyZ3Mp
OyB9OwogCiAgICAgcmV0dXJuIHBhcnNlTENIUGFyYW1ldGVyczxDb2xvclR5cGU+KGFyZ3MsIFdU
Rk1vdmUobGlnaHRuZXNzQ29uc3VtZXIpLCBXVEZNb3ZlKGNocm9tYUNvbnN1bWVyKSwgV1RGTW92
ZShodWVDb25zdW1lciksIFdURk1vdmUoYWxwaGFDb25zdW1lcikpOwpAQCAtMjA0Niw3ICsyMjEw
LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlR5cGVzKENTU1BhcnNl
clRvCiAgICAgICAgIGF1dG8gdmFsdWUgPSB4eXpDb25zdW1lcihhcmdzKTsKICAgICAgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjaGFubmVsID0gKnZhbHVlOwor
ICAgICAgICBjaGFubmVsID0gdmFsdWUtPnZhbHVlOwogICAgIH0KIAogICAgIGF1dG8gYWxwaGEg
PSBhbHBoYUNvbnN1bWVyKGFyZ3MpOwpAQCAtMjI0NCwxMyArMjQwOCwxMyBAQCBzdGF0aWMgQ29s
b3IgcGFyc2VDb2xvckNvbnRyYXN0RnVuY3Rpb25QYXJhbWV0ZXJzKENTU1AKICAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIGlmIChjb25zdW1lZFRvKSB7Ci0gICAgICAgIGF1dG8gdGFyZ2V0Q29u
dHJhc3QgPSBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDxkb3VibGU+IHsKKyAgICAgICAgYXV0byB0
YXJnZXRDb250cmFzdCA9IFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gewogICAg
ICAgICAgICAgaWYgKGFyZ3MucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7Ci0gICAgICAg
ICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnBhaXI8Q1NTVmFsdWVJRCwgZG91YmxlPiB0
YXJnZXRDb250cmFzdE1hcHBpbmdzW10gewotICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVl
QUEsIDQuNSB9LAotICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUFMYXJnZSwgMy4wIH0s
Ci0gICAgICAgICAgICAgICAgICAgIHsgQ1NTVmFsdWVBQUEsIDcuMCB9LAotICAgICAgICAgICAg
ICAgICAgICB7IENTU1ZhbHVlQUFBTGFyZ2UsIDQuNSB9LAorICAgICAgICAgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgc3RkOjpwYWlyPENTU1ZhbHVlSUQsIE51bWJlclJhdz4gdGFyZ2V0Q29udHJh
c3RNYXBwaW5nc1tdIHsKKyAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFBLCBOdW1iZXJS
YXcgeyA0LjUgfSB9LAorICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUFMYXJnZSwgTnVt
YmVyUmF3IHsgMy4wIH0gfSwKKyAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFBQSwgTnVt
YmVyUmF3IHsgNy4wIH0gfSwKKyAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFBQUxhcmdl
LCBOdW1iZXJSYXcgeyA0LjUgfSB9LAogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBTb3J0ZWRBcnJheU1hcCB0YXJnZXRDb250cmFzdE1hcCB7IHRh
cmdldENvbnRyYXN0TWFwcGluZ3MgfTsKICAgICAgICAgICAgICAgICBhdXRvIHZhbHVlID0gdGFy
Z2V0Q29udHJhc3RNYXAudHJ5R2V0KGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5p
ZCgpKTsKQEAgLTIyNjMsNyArMjQyNyw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yQ29udHJh
c3RGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUAogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgCiAgICAgICAgIC8vIFdoZW4gYSB0YXJnZXQgY29uc3Rhc3QgaXMgc3BlY2lmaWVkLCB3ZSBz
ZWxlY3QgInRoZSBmaXJzdCBjb2xvciBjb2xvciB0byBtZWV0IG9yIGV4Y2VlZCB0aGUgdGFyZ2V0
IGNvbnRyYXN0LiIKLSAgICAgICAgcmV0dXJuIHNlbGVjdEZpcnN0Q29sb3JUaGF0TWVldHNPckV4
Y2VlZHNUYXJnZXRDb250cmFzdChvcmlnaW5CYWNrZ3JvdW5kQ29sb3IsIFdURk1vdmUoY29sb3Jz
VG9Db21wYXJlQWdhaW5zdCksICp0YXJnZXRDb250cmFzdCk7CisgICAgICAgIHJldHVybiBzZWxl
Y3RGaXJzdENvbG9yVGhhdE1lZXRzT3JFeGNlZWRzVGFyZ2V0Q29udHJhc3Qob3JpZ2luQmFja2dy
b3VuZENvbG9yLCBXVEZNb3ZlKGNvbG9yc1RvQ29tcGFyZUFnYWluc3QpLCB0YXJnZXRDb250cmFz
dC0+dmFsdWUpOwogICAgIH0KIAogICAgIC8vIFdoZW4gYSB0YXJnZXQgY29uc3Rhc3QgaXMgTk9U
IHNwZWNpZmllZCwgd2Ugc2VsZWN0ICJ0aGUgZmlyc3QgY29sb3Igd2l0aCB0aGUgaGlnaGVzdCBj
b250cmFzdCB0byB0aGUgc2luZ2xlIGNvbG9yLiIKQEAgLTIzNjYsOSArMjUzMCw5IEBAIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPENvbG9yTWl4Q29tcG9uZW50PiBjb25zdW1lQ29sb3JNaQogICAgIENv
bG9yTWl4Q29tcG9uZW50IHJlc3VsdDsKIAogICAgIGlmIChhdXRvIHBlcmNlbnRhZ2UgPSBjb25z
dW1lUGVyY2VudFJhdyhhcmdzKSkgewotICAgICAgICBpZiAoKnBlcmNlbnRhZ2UgPCAwLjAgfHwg
KnBlcmNlbnRhZ2UgPiAxMDAuMCkKKyAgICAgICAgaWYgKHBlcmNlbnRhZ2UtPnZhbHVlIDwgMC4w
IHx8IHBlcmNlbnRhZ2UtPnZhbHVlID4gMTAwLjApCiAgICAgICAgICAgICByZXR1cm4geyB9Owot
ICAgICAgICByZXN1bHQucGVyY2VudGFnZSA9IHBlcmNlbnRhZ2U7CisgICAgICAgIHJlc3VsdC5w
ZXJjZW50YWdlID0gcGVyY2VudGFnZS0+dmFsdWU7CiAgICAgfQogCiAgICAgcmVzdWx0LmNvbG9y
ID0gY29uc3VtZU9yaWdpbkNvbG9yKGFyZ3MsIGNvbnRleHQpOwpAQCAtMjM3Nyw5ICsyNTQxLDkg
QEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q29sb3JNaXhDb21wb25lbnQ+IGNvbnN1bWVDb2xvck1p
CiAKICAgICBpZiAoIXJlc3VsdC5wZXJjZW50YWdlKSB7CiAgICAgICAgIGlmIChhdXRvIHBlcmNl
bnRhZ2UgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKSkgewotICAgICAgICAgICAgaWYgKCpwZXJj
ZW50YWdlIDwgMC4wIHx8ICpwZXJjZW50YWdlID4gMTAwLjApCisgICAgICAgICAgICBpZiAocGVy
Y2VudGFnZS0+dmFsdWUgPCAwLjAgfHwgcGVyY2VudGFnZS0+dmFsdWUgPiAxMDAuMCkKICAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgcmVzdWx0LnBlcmNlbnRhZ2UgPSBw
ZXJjZW50YWdlOworICAgICAgICAgICAgcmVzdWx0LnBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlLT52
YWx1ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjY0NiwxMSArMjgxMCwxMSBAQCBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVDb2xvcihDU1NQYXJzZXJUb2tlblIKICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShjb2xvcik7CiB9CiAKLXN0
YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0
bGVzc1F1aXJrIHVuaXRsZXNzLCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSA9IGZhbHNl
KQorc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aW9uQ29tcG9u
ZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUs
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSBuZWdhdGl2
ZVBlcmNlbnRhZ2VQb2xpY3kgPSBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3k6OkZvcmJpZCkKIHsK
ICAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKQogICAgICAgICByZXR1
cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTGVmdCwgQ1NTVmFsdWVUb3AsIENTU1ZhbHVlQm90dG9t
LCBDU1NWYWx1ZVJpZ2h0LCBDU1NWYWx1ZUNlbnRlcj4ocmFuZ2UpOwotICAgIHJldHVybiBjb25z
dW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpBbGwsIHVu
aXRsZXNzLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UpOworICAgIHJldHVybiBjb25zdW1lTGVu
Z3RoT3JQZXJjZW50KHJhbmdlLCBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpBbGwsIHVuaXRsZXNz
LCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kpOwogfQogCiBzdGF0aWMgYm9vbCBpc0hvcml6b250
YWxQb3NpdGlvbktleXdvcmRPbmx5KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKQEAg
LTI3OTksMjMgKzI5NjMsMjEgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGlu
YXRlcz4gcG9zaXRpb25Gcm9tCiAKIC8vIEZJWE1FOiBUaGlzIG1heSBjb25zdW1lIGZyb20gdGhl
IHJhbmdlIHVwb24gZmFpbHVyZS4gVGhlIGJhY2tncm91bmQKIC8vIHNob3J0aGFuZCB3b3JrcyBh
cm91bmQgaXQsIGJ1dCB3ZSBzaG91bGQganVzdCBmaXggaXQgaGVyZS4KLXN0ZDo6b3B0aW9uYWw8
UG9zaXRpb25Db29yZGluYXRlcz4gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcywgUG9zaXRpb25TeW50YXggcG9zaXRpb25TeW50YXgsIE5lZ2F0aXZlUGVyY2Vu
dGFnZVBvbGljeSBwb2xpY3kpCitzdGQ6Om9wdGlvbmFsPFBvc2l0aW9uQ29vcmRpbmF0ZXM+IGNv
bnN1bWVQb3NpdGlvbkNvb3JkaW5hdGVzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQ
YXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFBvc2l0aW9uU3lu
dGF4IHBvc2l0aW9uU3ludGF4LCBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgbmVnYXRpdmVQZXJj
ZW50YWdlUG9saWN5KQogewotICAgIGJvb2wgYWxsb3dzTmVnYXRpdmUgPSBwb2xpY3kgPT0gTmVn
YXRpdmVQZXJjZW50YWdlUG9saWN5OjpBbGxvdzsKLQotICAgIGF1dG8gdmFsdWUxID0gY29uc3Vt
ZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVn
YXRpdmUpOworICAgIGF1dG8gdmFsdWUxID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdl
LCBwYXJzZXJNb2RlLCB1bml0bGVzcywgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KTsKICAgICBp
ZiAoIXZhbHVlMSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGF1dG8gdmFs
dWUyID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVz
cywgYWxsb3dzTmVnYXRpdmUpOworICAgIGF1dG8gdmFsdWUyID0gY29uc3VtZVBvc2l0aW9uQ29t
cG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgbmVnYXRpdmVQZXJjZW50YWdlUG9s
aWN5KTsKICAgICBpZiAoIXZhbHVlMikKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRnJvbU9uZVZh
bHVlKCp2YWx1ZTEpOwogICAgIAotICAgIGF1dG8gdmFsdWUzID0gY29uc3VtZVBvc2l0aW9uQ29t
cG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmUpOworICAg
IGF1dG8gdmFsdWUzID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcywgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KTsKICAgICBpZiAoIXZhbHVlMykK
ICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRnJvbVR3b1ZhbHVlcygqdmFsdWUxLCAqdmFsdWUyKTsK
ICAgICAKLSAgICBhdXRvIHZhbHVlNCA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIGFsbG93c05lZ2F0aXZlKTsKKyAgICBhdXRvIHZhbHVlNCA9
IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIG5l
Z2F0aXZlUGVyY2VudGFnZVBvbGljeSk7CiAgICAgCiAgICAgc3RkOjphcnJheTxDU1NQcmltaXRp
dmVWYWx1ZSosIDU+IHZhbHVlcyB7CiAgICAgICAgIHZhbHVlMS5nZXQoKSwKQEAgLTM5NTIsNyAr
NDExNCw3IEBAIHN0ZDo6b3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxpbmVIZWlnaHRS
YXcoQ1NTUAogICAgIH0KIAogICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXco
cmFuZ2UsIFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlKSkKLSAgICAgICAgcmV0dXJuIHsgKm51bWJl
ciB9OworICAgICAgICByZXR1cm4geyBudW1iZXItPnZhbHVlIH07CiAKICAgICBpZiAoYXV0byBs
ZW5ndGhPclBlcmNlbnQgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KHJhbmdlLCBwYXJzZXJN
b2RlLCBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSkpCiAgICAgICAgIHJldHVybiB7ICpsZW5ndGhP
clBlcmNlbnQgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkocmV2aXNpb24gMjg3NDgyKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNiArNjYsMTQgQEAgZW51bSBjbGFzcyBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kg
OiBib29sIHsgRm9yYmlkLCBBCiBlbnVtIGNsYXNzIFVuaXRsZXNzUXVpcmsgeyBBbGxvdywgRm9y
YmlkIH07CiBlbnVtIGNsYXNzIFVuaXRsZXNzWmVyb1F1aXJrIHsgQWxsb3csIEZvcmJpZCB9Owog
CitzdHJ1Y3QgTnVtYmVyUmF3IHsKKyAgICBkb3VibGUgdmFsdWU7Cit9OworCitzdHJ1Y3QgUGVy
Y2VudFJhdyB7CisgICAgZG91YmxlIHZhbHVlOworfTsKKwogc3RydWN0IEFuZ2xlUmF3IHsKICAg
ICBDU1NVbml0VHlwZSB0eXBlOwogICAgIGRvdWJsZSB2YWx1ZTsKQEAgLTc2LDEzICs4NCwxNCBA
QCBzdHJ1Y3QgTGVuZ3RoUmF3IHsKICAgICBkb3VibGUgdmFsdWU7CiB9OwogCi11c2luZyBMZW5n
dGhPclBlcmNlbnRSYXcgPSBzdGQ6OnZhcmlhbnQ8TGVuZ3RoUmF3LCBkb3VibGU+OwordXNpbmcg
TGVuZ3RoT3JQZXJjZW50UmF3ID0gc3RkOjp2YXJpYW50PExlbmd0aFJhdywgUGVyY2VudFJhdz47
Cit1c2luZyBOdW1iZXJPclBlcmNlbnRSYXcgPSBzdGQ6OnZhcmlhbnQ8TnVtYmVyUmF3LCBQZXJj
ZW50UmF3PjsKIAogc3RkOjpvcHRpb25hbDxpbnQ+IGNvbnN1bWVJbnRlZ2VyUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmLCBkb3VibGUgbWluaW11bVZhbHVlID0gLXN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6bWF4KCkpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdl
cihDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlIG1pbmltdW1WYWx1ZSA9IC1zdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGNvbnN1
bWVQb3NpdGl2ZUludGVnZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2Um
KTsKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBWYWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKTsKK3N0ZDo6b3B0aW9uYWw8TnVt
YmVyUmF3PiBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdl
ID0gVmFsdWVSYW5nZTo6QWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51
bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSk7CiBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXJPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZh
bHVlUmFuZ2UpOwogc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVy
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKQEAgLTkwLDExICs5OSwxMSBAQCBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1AKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJXb3JrZXJTYWZlKENTU1BhcnNl
clRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsKIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBj
b25zdW1lTGVuZ3RoUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1
ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NT
UGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZv
cmJpZCk7Ci1zdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpOworc3RkOjpvcHRpb25h
bDxQZXJjZW50UmF3PiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFs
dWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBWYWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmKTsKIHN0ZDo6b3B0aW9uYWw8TGVuZ3Ro
T3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NR
dWlyazo6Rm9yYmlkKTsKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9y
UGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwg
VW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgYm9vbCBhbGxvd3NOZWdhdGl2
ZVBlcmNlbnRhZ2UgPSBmYWxzZSk7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVM
ZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVl
UmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIE5lZ2F0aXZlUGVy
Y2VudGFnZVBvbGljeSA9IE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeTo6Rm9yYmlkKTsKIHN0ZDo6
b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwg
Q1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcmsgPSBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJz
ZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1pl
cm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQ
YXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wmLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6
Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5j
cHAJKHJldmlzaW9uIDI4NzQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2
ZUZvckZvbnRSYXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsOCArMjA4LDggQEAgc3RkOjpv
cHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9uCiAgICAgICAg
ICAgICAvLyAgICAgICAgdGhhdCBpdCdzIG9mZi1zY3JlZW4gYW5kIHRoZXJlZm9yZSBkb2Vzbid0
IHN0cmljdGx5IGhhdmUgYW4gYXNzb2NpYXRlZCB2aWV3cG9ydC4KICAgICAgICAgICAgIC8vICAg
ICAgICBUaGlzIG5lZWRzIGNsYXJpZmljYXRpb24gYW5kIHBvc3NpYmx5IGZpeGluZy4KICAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1
dGVVbnpvb21lZE5vbkNhbGNMZW5ndGhEb3VibGUobGVuZ3RoLnR5cGUsIGxlbmd0aC52YWx1ZSwg
Q1NTUHJvcGVydHlGb250U2l6ZSwgJmZvbnRDYXNjYWRlLmZvbnRNZXRyaWNzKCksICZmb250Q2Fz
Y2FkZS5mb250RGVzY3JpcHRpb24oKSwgJmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpLCBp
czxEb2N1bWVudD4oY29udGV4dCkgPyBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCkucmVuZGVy
VmlldygpIDogbnVsbHB0cikpOwotICAgICAgICB9LCBbJl0gKGRvdWJsZSBwZXJjZW50YWdlKSB7
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYXJlbnRTaXplICogcGVy
Y2VudGFnZSkgLyAxMDAuMCk7CisgICAgICAgIH0sIFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpQZXJjZW50UmF3JiBwZXJjZW50YWdlKSB7CisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYXJlbnRTaXplICogcGVyY2VudGFnZS52YWx1ZSkgLyAxMDAu
MCk7CiAgICAgICAgIH0pOwogICAgIH0pOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448690</attachid>
            <date>2022-01-08 18:09:22 -0800</date>
            <delta_ts>2022-01-08 19:35:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234869-20220108180921.patch</filename>
            <type>text/plain</type>
            <size>144588</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MSBAQAorMjAyMi0wMS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQ1NTIHByb3BlcnR5
IHBhcnNpbmcgaGVscGVycyB0byBiZSBhIGJpdCBtb3JlIGNvbXBvc2FibGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDg2OQorCisgICAgICAgIFtX
SVBdCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV4cHJlc3Npb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3VtZUZpcnN0VmFsdWUpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRWYXJpYXRpb25U
YWcpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUN1YmljQmV6aWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnN1bWVTcHJpbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1l
UGVyc3BlY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpjb25zdW1lQ291bnRlclN0eWxlUGFkKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN1bWVDb3VudGVyU3R5bGVBZGRpdGl2ZVN5bWJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
c3VtZUJhc2VQYWxldHRlRGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lT3Zl
cnJpZGVDb2xvcnNEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VyOjpjb25zdW1lRmxleCk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpDYWxjUGFyc2VyOjpDYWxjUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbXB1dGVNaW5p
bXVtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpJ
bnRlZ2VyVHlwZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29uc3VtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkludGVnZXJUeXBlUmF3
S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkludGVnZXJUeXBlS25vd25Ub2tlblR5cGVGdW5j
dGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6SW50ZWdlclR5cGVLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25z
dW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6dmFsaWRh
dGVkTnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6TnVtYmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TnVtYmVyUmF3S25vd25U
b2tlblR5cGVOdW1iZXJDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6Ok51bWJlclJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1l
cjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
Ok51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6TnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlw
ZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6dmFsaWRhdGVkUGVyY2VudFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlBlcmNlbnRSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9u
Q29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpQZXJjZW50UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXI6OmNvbnN1bWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpQZXJjZW50UmF3
S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6UGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENh
bGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6UGVyY2VudENTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXdLbm93
blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXdLbm93blRva2VuVHlwZURpbWVuc2lv
bkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6TGVuZ3RoUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjo6Y29uc3VtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aENTU1By
aW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpj
b25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVu
Z3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbkNv
bnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6TGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51
bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6QW5nbGVSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpBbmdsZVJh
d0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpBbmdsZVJhd0tub3duVG9rZW5UeXBlTnVt
YmVyQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6QW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRpbWVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpUaW1lQ1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6UmVzb2x1dGlv
bkNTU1ByaW1pdGl2ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNv
bnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpUcmFu
c2Zvcm1BcHBsaWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmFwcGx5VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6SWRlbnRpdHlUcmFuc2Zvcm1lcjo6dHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6UmF3VmFyaWFudFRyYW5zZm9ybWVy
QmFzZTo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6QW5nbGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1iZXJPclBlcmNl
bnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lcjo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TWV0YUNvbnN1bWVySW1wbDo6Y29uc3VtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVNZXRhQ29u
c3VtZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpTYW1l
VG9rZW5NZXRhQ29uc3VtZXJJbXBsOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6U2FtZVRva2VuTWV0YUNvbnN1bWVyOjpjb25zdW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoT3JQZXJjZW50
UmF3VHJhbnNmb3JtZXI6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OkFuZ2xlT3JOdW1iZXJSYXdLbm93blRva2VuVHlwZUlkZW50Q29uc3Vt
ZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpOdW1iZXJPclBlcmNlbnRSYXdLbm93blRva2VuVHlwZUlkZW50Q29uc3VtZXI6OmNvbnN1bWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50
ZWdlclR5cGVSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lSW50ZWdlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlclJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRl
Z2VyWmVyb0FuZEdyZWF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aXZlSW50ZWdlcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVy
QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRh
YmxlSWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lUGVyY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVQZXJjZW50V29ya2VyU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhSYXcpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlUmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlV29ya2Vy
U2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29u
c3VtZVJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lQW5nbGVPclBlcmNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aE9yUGVyY2VudCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmds
ZU9yTnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Y29uc3VtZUFuZ2xlT3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyT3JQ
ZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJPclBl
cmNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lRm9udFdlaWdodE51bWJlclJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVPcHRpb25hbEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2luZ1N5bWJv
bFRhYmxlSWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpub3JtYWxpemVSR0JDb21wb25lbnROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpub3JtYWxpemVSR0JDb21wb25lbnRQZXJjZW50YWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6UkdCTm9ybWFsaXppbmdU
cmFuc2Zvcm1lcjo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZVJlbGF0aXZlUkdCQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y2xhbXBSR0JDb21wb25lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUkdCT3JIU0xPcHRp
b25hbEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VOb25SZWxhdGl2ZVJHQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlSFNMUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTm9uUmVsYXRpdmVIU0xQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VIV0JQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6cGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZU5vblJlbGF0aXZlSFdCUGFyYW1ldGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTGFiUGFy
YW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBh
cnNlTENIUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OnBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VOb25SZWxhdGl2ZUxDSFBhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZl
Q29sb3JGdW5jdGlvbkZvclJHQlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6cGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25Gb3JY
WVpUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBh
cnNlQ29sb3JDb250cmFzdEZ1bmN0aW9uUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVDb2xvck1peENvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQb3NpdGlvbkNv
bXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVQb3NpdGlvbkNvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVDcm9zc0ZhZGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGlu
ZUhlaWdodFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OkNhbGNQYXJzZXI6OmNvbnN1bWVJbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZUludGVnZXJUeXBl
UmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Q2FsY1BhcnNlcjo6Y29uc3VtZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVOdW1iZXJSYXcp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpD
YWxjUGFyc2VyOjpjb25zdW1lUGVyY2VudFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVBbmdsZVJhdyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNh
bGNQYXJzZXI6OmNvbnN1bWVMZW5ndGhSYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclR5cGVSYXdXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZU51
bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVJbnRlZ2VyVHlwZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENh
bGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5U
eXBlRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUlkZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlckNTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNl
bnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3du
VG9rZW5UeXBlUGVyY2VudGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlSWRl
bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZVBlcmNlbnRhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRnVu
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxl
bmd0aFJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5n
dGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXdXaXRoS25v
d25Ub2tlblR5cGVEaW1lbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1i
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBl
RnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlRGltZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhL
bm93blRva2VuVHlwZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVJlc29sdXRpb25DU1NQcmlt
aXRpdmVWYWx1ZVdpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd09yTnVt
YmVyUmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlk
ZWRCeTEwMFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxl
SWRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3QWxsb3dpbmdTeW1i
b2xUYWJsZUlkZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VySGVscGVycy5oOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
c1dvcmtlclNhZmU6OmNvbnN1bWVGb250RmVhdHVyZVRhZyk6CisgICAgICAgICogc3R5bGUvU3R5
bGVSZXNvbHZlRm9yRm9udFJhdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2
ZUZvckZvbnRSYXcpOgorCiAyMDIyLTAxLTA4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBzb21lIENTUyBmaWx0ZXIgaW50ZXJwb2xhdGlvbiBp
c3N1ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwcmVzc2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHByZXNzaW9uLmNw
cAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHBy
ZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0ZlYXR1cmVWYWxpZFdpdGhvdXRWYWx1ZShjb25zdCBBdAogCiBpbmxpbmUgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRmlyc3RWYWx1ZShjb25zdCBTdHJpbmcmIG1l
ZGlhRmVhdHVyZSwgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGF1dG8g
dmFsdWUgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAw
KSkKKyAgICBpZiAoYXV0byB2YWx1ZSA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZUludGVnZXJaZXJvQW5kR3JlYXRlcihyYW5nZSkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKIAog
ICAgIGlmICghZmVhdHVyZUV4cGVjdGluZ1Bvc2l0aXZlSW50ZWdlcihtZWRpYUZlYXR1cmUpICYm
ICFpc0FzcGVjdFJhdGlvRmVhdHVyZShtZWRpYUZlYXR1cmUpKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkocmV2aXNpb24gMjg3
ODExKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2Miw3ICs1NjIsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lRm9udFZhcmlhdGlvblRhZyhDU1NQYXIKICAgICBpZiAoIXRhZ1ZhbHVlKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICByZXR1cm4gQ1NTRm9udFZhcmlhdGlvblZh
bHVlOjpjcmVhdGUodGFnLCAqdGFnVmFsdWUpOworICAgIHJldHVybiBDU1NGb250VmFyaWF0aW9u
VmFsdWU6OmNyZWF0ZSh0YWcsIHRhZ1ZhbHVlLT52YWx1ZSk7CiB9CiAgICAgCiBzdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udFZhcmlhdGlvblNldHRpbmdzKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlKQpAQCAtMTQ1Nyw3ICsxNDU3LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1
ZT4gY29uc3VtZUN1YmljQmV6aWVyKENTU1BhcnNlclRvCiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5n
ZSBhcmdzID0gY29uc3VtZUZ1bmN0aW9uKHJhbmdlQ29weSk7CiAKICAgICBhdXRvIHgxID0gY29u
c3VtZU51bWJlclJhdyhhcmdzKTsKLSAgICBpZiAoIXgxIHx8ICp4MSA8IDAgfHwgKngxID4gMSkK
KyAgICBpZiAoIXgxIHx8IHgxLT52YWx1ZSA8IDAgfHwgeDEtPnZhbHVlID4gMSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgaWYgKCFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0
ZXNwYWNlKGFyZ3MpKQpAQCAtMTQ3MSw3ICsxNDcxLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1
ZT4gY29uc3VtZUN1YmljQmV6aWVyKENTU1BhcnNlclRvCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgYXV0byB4MiA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7Ci0gICAgaWYgKCF4MiB8
fCAqeDIgPCAwIHx8ICp4MiA+IDEpCisgICAgaWYgKCF4MiB8fCB4Mi0+dmFsdWUgPCAwIHx8IHgy
LT52YWx1ZSA+IDEpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFjb25zdW1l
Q29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQpAQCAtMTQ4NSw3ICsxNDg1LDcgQEAgc3Rh
dGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUN1YmljQmV6aWVyKENTU1BhcnNlclRvCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmFuZ2UgPSByYW5nZUNvcHk7Ci0gICAgcmV0dXJu
IENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKCp4MSwgKnkxLCAqeDIs
ICp5Mik7CisgICAgcmV0dXJuIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3Jl
YXRlKHgxLT52YWx1ZSwgeTEtPnZhbHVlLCB4Mi0+dmFsdWUsIHkyLT52YWx1ZSk7CiB9CiAKIHN0
YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVTcHJpbmdGdW5jdGlvbihDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKQEAgLTE0OTYsMTcgKzE0OTYsMTcgQEAgc3RhdGljIFJlZlB0cjxDU1NW
YWx1ZT4gY29uc3VtZVNwcmluZ0Z1bmN0aW9uKENTU1BhcnNlCiAKICAgICAvLyBNYXNzIG11c3Qg
YmUgZ3JlYXRlciB0aGFuIDAuCiAgICAgYXV0byBtYXNzID0gY29uc3VtZU51bWJlclJhdyhhcmdz
KTsKLSAgICBpZiAoIW1hc3MgfHwgKm1hc3MgPD0gMCkKKyAgICBpZiAoIW1hc3MgfHwgbWFzcy0+
dmFsdWUgPD0gMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgLy8gU3RpZmZu
ZXNzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCiAgICAgYXV0byBzdGlmZm5lc3MgPSBjb25zdW1l
TnVtYmVyUmF3KGFyZ3MpOwotICAgIGlmICghc3RpZmZuZXNzIHx8ICpzdGlmZm5lc3MgPD0gMCkK
KyAgICBpZiAoIXN0aWZmbmVzcyB8fCBzdGlmZm5lc3MtPnZhbHVlIDw9IDApCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIAogICAgIC8vIERhbXBpbmcgY29lZmZpY2llbnQgbXVzdCBiZSBn
cmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMC4KICAgICBhdXRvIGRhbXBpbmcgPSBjb25zdW1lTnVt
YmVyUmF3KGFyZ3MpOwotICAgIGlmICghZGFtcGluZyB8fCAqZGFtcGluZyA8IDApCisgICAgaWYg
KCFkYW1waW5nIHx8IGRhbXBpbmctPnZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCiAgICAgLy8gSW5pdGlhbCB2ZWxvY2l0eSBtYXkgaGF2ZSBhbnkgdmFsdWUuCkBAIC0x
NTE5LDcgKzE1MTksNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lU3ByaW5nRnVu
Y3Rpb24oQ1NTUGFyc2UKIAogICAgIHJhbmdlID0gcmFuZ2VDb3B5OwogCi0gICAgcmV0dXJuIENT
U1NwcmluZ1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZSgqbWFzcywgKnN0aWZmbmVzcywgKmRh
bXBpbmcsICppbml0aWFsVmVsb2NpdHkpOworICAgIHJldHVybiBDU1NTcHJpbmdUaW1pbmdGdW5j
dGlvblZhbHVlOjpjcmVhdGUobWFzcy0+dmFsdWUsIHN0aWZmbmVzcy0+dmFsdWUsIGRhbXBpbmct
PnZhbHVlLCBpbml0aWFsVmVsb2NpdHktPnZhbHVlKTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NW
YWx1ZT4gY29uc3VtZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQpAQCAtMTg3Myw3ICsxODcz
LDcgQEAgc3RhdGljIGJvb2wgY29uc3VtZVBlcnNwZWN0aXZlKENTU1BhcnNlclRva2VuUmFuZ2Um
IGFyCiAgICAgfQogCiAgICAgaWYgKGF1dG8gcGVyc3BlY3RpdmUgPSBjb25zdW1lTnVtYmVyUmF3
KGFyZ3MsIFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlKSkgewotICAgICAgICB0cmFuc2Zvcm1WYWx1
ZS0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoKnBlcnNwZWN0aXZlLCBDU1NVbml0
VHlwZTo6Q1NTX1BYKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShwZXJzcGVjdGl2ZS0+dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUFgp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yMzM2LDcgKzIzMzYsNyBAQCBz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3Vyc29yKENTU1BhcnNlclRva2VuUmEKICAg
ICAgICAgICAgIGlmICgheSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgY2xhbXAgb3Igcm91bmQgaW5zdGVhZCBvZiBqdXN0
IGNhc3RpbmcgZnJvbSBkb3VibGUgdG8gaW50PwotICAgICAgICAgICAgaG90U3BvdCA9IEludFBv
aW50IHsgc3RhdGljX2Nhc3Q8aW50PigqeCksIHN0YXRpY19jYXN0PGludD4oKnkpIH07CisgICAg
ICAgICAgICBob3RTcG90ID0gSW50UG9pbnQgeyBzdGF0aWNfY2FzdDxpbnQ+KHgtPnZhbHVlKSwg
c3RhdGljX2Nhc3Q8aW50Pih5LT52YWx1ZSkgfTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
bGlzdCkKQEAgLTI0NTgsOSArMjQ1OCw5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVQZXJzcGVjdGl2ZShDUwogCiAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBxdWly
ayBvbmx5IGFwcGx5IHRvIHRoZSB3ZWJraXQgcHJlZml4ZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVy
dHkuCiAgICAgYXV0byBwZXJzcGVjdGl2ZSA9IGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UpOwotICAg
IGlmICghcGVyc3BlY3RpdmUgfHwgKnBlcnNwZWN0aXZlIDwgMCkKKyAgICBpZiAoIXBlcnNwZWN0
aXZlIHx8IHBlcnNwZWN0aXZlLT52YWx1ZSA8IDApCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKCpwZXJzcGVjdGl2ZSwgQ1NTVW5p
dFR5cGU6OkNTU19QWCk7CisgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocGVy
c3BlY3RpdmUtPnZhbHVlLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKIH0KIAogc3RhdGljIFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IGNvbnN1bWVTY3JvbGxTbmFwQWxpZ24oQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCkBAIC00NTE4LDcgKzQ1MTgsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3Bl
cnR5UGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKEMKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
RW5kRW5kUmFkaXVzOgogICAgICAgICByZXR1cm4gY29uc3VtZUJvcmRlclJhZGl1c0Nvcm5lciht
X3JhbmdlLCBtX2NvbnRleHQubW9kZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZs
ZXhHcm91cDoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKG1fcmFuZ2UsIDApOworICAg
ICAgICByZXR1cm4gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihtX3JhbmdlKTsKICAgICBj
YXNlIENTU1Byb3BlcnR5T3JkZXI6CiAgICAgICAgIHJldHVybiBjb25zdW1lSW50ZWdlcihtX3Jh
bmdlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZVBvc2l0aW9uOgpAQCAtNDgx
Miw3ICs0ODEyLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNvdW50ZXJTdHls
ZVBhZChDU1NQYXJzCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBzeW1ib2w7CiAgICAgd2hpbGUgKCFp
bnRlZ2VyIHx8ICFzeW1ib2wpIHsKICAgICAgICAgaWYgKCFpbnRlZ2VyKSB7Ci0gICAgICAgICAg
ICBpbnRlZ2VyID0gY29uc3VtZUludGVnZXIocmFuZ2UsIDApOworICAgICAgICAgICAgaW50ZWdl
ciA9IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIocmFuZ2UpOwogICAgICAgICAgICAgaWYg
KGludGVnZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTQ4NTIs
MTIgKzQ4NTIsMTIgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNvdW50ZXJTdHls
ZUFkZGl0aXZlU3ltCiAgICAgYXV0byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1h
U2VwYXJhdGVkKCk7CiAgICAgc3RkOjpvcHRpb25hbDxpbnQ+IGxhc3RXZWlnaHQ7CiAgICAgZG8g
ewotICAgICAgICBhdXRvIGludGVnZXIgPSBjb25zdW1lSW50ZWdlcihyYW5nZSwgMCk7CisgICAg
ICAgIGF1dG8gaW50ZWdlciA9IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIocmFuZ2UpOwog
ICAgICAgICBhdXRvIHN5bWJvbCA9IGNvbnN1bWVDb3VudGVyU3R5bGVTeW1ib2wocmFuZ2UsIGNv
bnRleHQpOwogICAgICAgICBpZiAoIWludGVnZXIpIHsKICAgICAgICAgICAgIGlmICghc3ltYm9s
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaW50ZWdlciA9
IGNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAwKTsKKyAgICAgICAgICAgIGludGVnZXIgPSBjb25zdW1l
SW50ZWdlclplcm9BbmRHcmVhdGVyKHJhbmdlKTsKICAgICAgICAgICAgIGlmICghaW50ZWdlcikK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQpAQCAtNTAwMiwxNCAr
NTAwMiwxNCBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQmFzZVBh
bGV0dGVEZXMKIHsKICAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVM
aWdodCwgQ1NTVmFsdWVEYXJrPihyYW5nZSkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
cmV0dXJuIGNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAwKTsKKyAgICByZXR1cm4gY29uc3VtZUludGVn
ZXJaZXJvQW5kR3JlYXRlcihyYW5nZSk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBjb25zdW1lT3ZlcnJpZGVDb2xvcnNEZXNjcmlwdG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAg
ICAgZG8gewotICAgICAgICBhdXRvIGtleSA9IGNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAwKTsKKyAg
ICAgICAgYXV0byBrZXkgPSBjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyKHJhbmdlKTsKICAg
ICAgICAgaWYgKCFrZXkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNTMzNywx
MyArNTMzNywxMyBAQCBib29sIENTU1Byb3BlcnR5UGFyc2VyOjpjb25zdW1lRmxleChib29sIGlt
cG9ydGFudCkKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICB3aGlsZSAoIW1f
cmFuZ2UuYXRFbmQoKSAmJiBpbmRleCsrIDwgMykgewogICAgICAgICAgICAgaWYgKGF1dG8gbnVt
YmVyID0gY29uc3VtZU51bWJlclJhdyhtX3JhbmdlKSkgewotICAgICAgICAgICAgICAgIGlmICgq
bnVtYmVyIDwgMCkKKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyLT52YWx1ZSA8IDApCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoZmxleEdy
b3cgPT0gdW5zZXRWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgZmxleEdyb3cgPSAqbnVtYmVy
OworICAgICAgICAgICAgICAgICAgICBmbGV4R3JvdyA9IG51bWJlci0+dmFsdWU7CiAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZmxleFNocmluayA9PSB1bnNldFZhbHVlKQotICAgICAgICAgICAg
ICAgICAgICBmbGV4U2hyaW5rID0gKm51bWJlcjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICgh
Km51bWJlcikgLy8gZmxleCBvbmx5IGFsbG93cyBhIGJhc2lzIG9mIDAgKHNhbnMgdW5pdHMpIGlm
IGZsZXgtZ3JvdyBhbmQgZmxleC1zaHJpbmsgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuIHNldC4K
KyAgICAgICAgICAgICAgICAgICAgZmxleFNocmluayA9IG51bWJlci0+dmFsdWU7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoIW51bWJlci0+dmFsdWUpIC8vIGZsZXggb25seSBhbGxvd3MgYSBi
YXNpcyBvZiAwIChzYW5zIHVuaXRzKSBpZiBmbGV4LWdyb3cgYW5kIGZsZXgtc2hyaW5rIHZhbHVl
cyBoYXZlIGFscmVhZHkgYmVlbiBzZXQuCiAgICAgICAgICAgICAgICAgICAgIGZsZXhCYXNpcyA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3
ICsxMTgsNyBAQCBzdGF0aWMgYm9vbCBjYW5Db25zdW1lQ2FsY1ZhbHVlKENhbGN1bGF0aW9uQ2F0
ZWdvcnkgY2EKIC8vIEZJWE1FOiBjb25zaWRlciBwdWxsaW5nIGluIHRoZSBwYXJzaW5nIGxvZ2lj
IGZyb20gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLgogY2xhc3MgQ2FsY1BhcnNlciB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQ2FsY1BhcnNlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUgPSB7IH0sIENTU1ZhbHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCksIGJvb2wgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlID0gZmFsc2UpCisgICAgZXhwbGlj
aXQgQ2FsY1BhcnNlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ2FsY3VsYXRpb25DYXRl
Z29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJh
bmdlOjpBbGwsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSB7IH0sIENT
U1ZhbHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCksIE5lZ2F0aXZlUGVy
Y2VudGFnZVBvbGljeSBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgPSBOZWdhdGl2ZVBlcmNlbnRh
Z2VQb2xpY3k6OkZvcmJpZCkKICAgICAgICAgOiBtX3NvdXJjZVJhbmdlKHJhbmdlKQogICAgICAg
ICAsIG1fcmFuZ2UocmFuZ2UpCiAgICAgICAgICwgbV9wb29sKHBvb2wpCkBAIC0xMjYsNyArMTI2
LDcgQEAgY2xhc3MgQ2FsY1BhcnNlciB7IChwdWJsaWMpCiAgICAgICAgIGNvbnN0IENTU1BhcnNl
clRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICAgICAgYXV0byBmdW5jdGlvbklkID0g
dG9rZW4uZnVuY3Rpb25JZCgpOwogICAgICAgICBpZiAoQ1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5j
dGlvbihmdW5jdGlvbklkKSkKLSAgICAgICAgICAgIG1fY2FsY1ZhbHVlID0gQ1NTQ2FsY1ZhbHVl
OjpjcmVhdGUoZnVuY3Rpb25JZCwgY29uc3VtZUZ1bmN0aW9uKG1fcmFuZ2UpLCBkZXN0aW5hdGlv
bkNhdGVnb3J5LCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgYWxsb3dzTmVnYXRpdmVQZXJjZW50
YWdlKTsKKyAgICAgICAgICAgIG1fY2FsY1ZhbHVlID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoZnVu
Y3Rpb25JZCwgY29uc3VtZUZ1bmN0aW9uKG1fcmFuZ2UpLCBkZXN0aW5hdGlvbkNhdGVnb3J5LCB2
YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5ID09IE5lZ2F0
aXZlUGVyY2VudGFnZVBvbGljeTo6QWxsb3cpOwogICAgIH0KIAogICAgIGNvbnN0IENTU0NhbGNW
YWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGNWYWx1ZS5nZXQoKTsgfQpAQCAtMTUy
LDY1ICsxNTIsNiBAQCBjbGFzcyBDYWxjUGFyc2VyIHsgKHB1YmxpYykKICAgICAgICAgcmV0dXJu
IG1fcG9vbC5jcmVhdGVWYWx1ZShXVEZNb3ZlKG1fY2FsY1ZhbHVlKSk7CiAgICAgfQogCi0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihkb3VibGUgbWluaW11bVZh
bHVlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0
dXJuIG1fcG9vbC5jcmVhdGVWYWx1ZShzdGQ6OnJvdW5kKHN0ZDo6bWF4KG1fY2FsY1ZhbHVlLT5k
b3VibGVWYWx1ZSgpLCBtaW5pbXVtVmFsdWUpKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IHN0ZDo6b3B0aW9uYWw8SW50
VHlwZT4gY29uc3VtZUludGVnZXJUeXBlUmF3KGRvdWJsZSBtaW5pbXVtVmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLSAgICAgICAgbV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7Ci0gICAgICAgIHJldHVybiBjbGFt
cFRvPEludFR5cGU+KHN0ZDo6cm91bmQoc3RkOjptYXgobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVl
KCksIG1pbmltdW1WYWx1ZSkpKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVOdW1iZXIoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5n
ZTsKLSAgICAgICAgcmV0dXJuIG1fcG9vbC5jcmVhdGVWYWx1ZShtX2NhbGNWYWx1ZS0+ZG91Ymxl
VmFsdWUoKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0
aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9j
YWxjVmFsdWUgfHwgbV9jYWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgbV9z
b3VyY2VSYW5nZSA9IG1fcmFuZ2U7Ci0gICAgICAgIHJldHVybiBtX2NhbGNWYWx1ZS0+ZG91Ymxl
VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNl
bnRSYXcoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIGF1dG8gY2F0ZWdvcnkgPSBtX2NhbGNWYWx1ZS0+
Y2F0ZWdvcnkoKTsKLSAgICAgICAgaWYgKGNhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3Nv
dXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIG1fY2FsY1ZhbHVlLT5kb3VibGVW
YWx1ZSgpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmds
ZVJhdygpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1fY2FsY1ZhbHVlLT5j
YXRlZ29yeSgpICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgbV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7Ci0gICAg
ICAgIHJldHVybiB7IHsgbV9jYWxjVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgbV9jYWxjVmFsdWUt
PmRvdWJsZVZhbHVlKCkgfSB9OwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3
PiBjb25zdW1lTGVuZ3RoUmF3KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwg
bV9jYWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgbV9zb3VyY2VSYW5nZSA9
IG1fcmFuZ2U7Ci0gICAgICAgIHJldHVybiB7IHsgbV9jYWxjVmFsdWUtPnByaW1pdGl2ZVR5cGUo
KSwgbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCkgfSB9OwotICAgIH0KLQogcHJpdmF0ZToKICAg
ICBDU1NQYXJzZXJUb2tlblJhbmdlJiBtX3NvdXJjZVJhbmdlOwogICAgIENTU1BhcnNlclRva2Vu
UmFuZ2UgbV9yYW5nZTsKQEAgLTIyMCw3ICsxNjEsNyBAQCBjbGFzcyBDYWxjUGFyc2VyIHsgKHB1
YmxpYykKIAogLy8gTUFSSzogLSBQcmltaXRpdmUgdmFsdWUgY29uc3VtZXJzIGZvciBjYWxsZXJz
IHRoYXQga25vdyB0aGUgdG9rZW4gdHlwZS4KIAotc3RhdGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+
IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSB7IH0sIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZh
bHVlUmFuZ2U6OkFsbCkKK3N0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjb25zdW1lQ2FsY1Jh
d1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
YWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBl
ZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKQEAgLTIzOCwyMDYgKzE3OSwyNjYgQEAg
c3RhdGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9rCiAK
IC8vIE1BUks6IEludGVnZXIgKFJhdykKIAotdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8SW50VHlwZT4gY29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3du
VG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgc291cmNlUmFuZ2UsIGRvdWJs
ZSBtaW5pbXVtVmFsdWUpCitlbnVtIGNsYXNzIEludGVnZXJSYW5nZSB7IEFsbCwgWmVyb0FuZEdy
ZWF0ZXIsIE9uZUFuZEdyZWF0ZXIgfTsKKworc3RhdGljIGNvbnN0ZXhwciBkb3VibGUgY29tcHV0
ZU1pbmltdW1WYWx1ZShJbnRlZ2VyUmFuZ2UgcmFuZ2UpCiB7Ci0gICAgYXV0byByYW5nZSA9IHNv
dXJjZVJhbmdlOwotICAgIGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUNhbGNSYXdXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB7IH0s
IFZhbHVlUmFuZ2U6OkFsbCkpIHsKLSAgICAgICAgc291cmNlUmFuZ2UgPSByYW5nZTsKLSAgICAg
ICAgcmV0dXJuIGNsYW1wVG88SW50VHlwZT4oc3RkOjpyb3VuZChzdGQ6Om1heCh2YWx1ZS0+ZG91
YmxlVmFsdWUoKSwgbWluaW11bVZhbHVlKSkpOworICAgIHN3aXRjaCAocmFuZ2UpIHsKKyAgICBj
YXNlIEludGVnZXJSYW5nZTo6QWxsOgorICAgICAgICByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAgICBjYXNlIEludGVnZXJSYW5nZTo6WmVyb0FuZEdy
ZWF0ZXI6CisgICAgICAgIHJldHVybiAwLjA7CisgICAgY2FzZSBJbnRlZ2VyUmFuZ2U6Ok9uZUFu
ZEdyZWF0ZXI6CisgICAgICAgIHJldHVybiAxLjA7CiAgICAgfQotCi0gICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIH0KKy8vIE1BUks6IEludGVnZXIgKFJhdykKIAotdGVtcGxhdGU8dHlwZW5hbWUg
SW50VHlwZT4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8SW50VHlwZT4gY29uc3VtZUludGVnZXJUeXBl
UmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBk
b3VibGUgbWluaW11bVZhbHVlKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IE51bWJlclRva2VuKTsKLSAgICAKLSAgICBpZiAocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZVR5
cGUoKSA9PSBOdW1iZXJWYWx1ZVR5cGUgfHwgcmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpIDwg
bWluaW11bVZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGlu
dGVnZXJSYW5nZT4KK3N0cnVjdCBJbnRlZ2VyVHlwZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25D
b25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5U
eXBlID0gRnVuY3Rpb25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnRUeXBlPiBj
b25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFi
bGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1pl
cm9RdWlyaykKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1
bmN0aW9uVG9rZW4pOworCisgICAgICAgIGF1dG8gcmFuZ2VDb3B5ID0gcmFuZ2U7CisgICAgICAg
IGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bihyYW5nZUNvcHksIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgeyB9LCBWYWx1ZVJhbmdl
OjpBbGwpKSB7CisgICAgICAgICAgICByYW5nZSA9IHJhbmdlQ29weTsKKyAgICAgICAgICAgIHJl
dHVybiBjbGFtcFRvPEludFR5cGU+KHN0ZDo6cm91bmQoc3RkOjptYXgodmFsdWUtPmRvdWJsZVZh
bHVlKCksIGNvbXB1dGVNaW5pbXVtVmFsdWUoaW50ZWdlclJhbmdlKSkpKTsKKyAgICAgICAgfQor
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGNsYW1wVG88SW50VHlw
ZT4ocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSk7Ci19
CisgICAgfQorfTsKIAotLy8gTUFSSzogSW50ZWdlciAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBub3Qg
bWFpbnRhaW5pbmcgY2FsYykKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGUsIEludGVnZXJSYW5n
ZSBpbnRlZ2VyUmFuZ2U+CitzdHJ1Y3QgSW50ZWdlclR5cGVSYXdLbm93blRva2VuVHlwZU51bWJl
ckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tl
blR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnRUeXBlPiBj
b25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFi
bGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1pl
cm9RdWlyaykKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51
bWJlclRva2VuKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyYW5nZS5wZWVrKCkubnVtZXJpY1Zh
bHVlVHlwZSgpID09IE51bWJlclZhbHVlVHlwZSB8fCByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVl
KCkgPCBjb21wdXRlTWluaW11bVZhbHVlKGludGVnZXJSYW5nZSkpCisgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgICAgICByZXR1cm4gY2xhbXBUbzxJbnRUeXBlPihyYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpKTsKKyAgICB9Cit9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lSW50ZWdlclR5cGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSBtaW5p
bXVtVmFsdWUsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKy8vIE1BUks6IEludGVnZXIgKENTU1ByaW1pdGl2
ZVZhbHVlIC0gbWFpbnRhaW5pbmcgY2FsYykKIAotICAgIGlmIChhdXRvIGludGVnZXIgPSBjb25z
dW1lSW50ZWdlclR5cGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbjxJbnRUeXBlPihyYW5n
ZSwgbWluaW11bVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoKmludGVn
ZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK3Rl
bXBsYXRlPHR5cGVuYW1lIEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlZ2VyUmFuZ2U+CitzdHJ1
Y3QgSW50ZWdlclR5cGVLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9rZW47
CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwg
VmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQ
b29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0g
RnVuY3Rpb25Ub2tlbik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IHN0YXRpYyBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyVHlwZUNTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NF
UlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CisgICAgICAgIGlmIChhdXRv
IGludGVnZXIgPSBJbnRlZ2VyVHlwZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjxJ
bnRUeXBlLCBpbnRlZ2VyUmFuZ2U+Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVS
YW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICBy
ZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqaW50ZWdlciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9OwogCi0gICAgaWYgKGF1dG8gaW50
ZWdlciA9IGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcjxJbnRU
eXBlPihyYW5nZSwgbWluaW11bVZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFs
dWUoKmludGVnZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlZ2VyUmFu
Z2U+CitzdHJ1Y3QgSW50ZWdlclR5cGVLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBOdW1iZXJU
b2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NW
YWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUo
KSA9PSBOdW1iZXJUb2tlbik7CisgICAgICAgIAorICAgICAgICBpZiAoYXV0byBpbnRlZ2VyID0g
SW50ZWdlclR5cGVSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyPEludFR5cGUsIGludGVn
ZXJSYW5nZT46OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJN
b2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNy
ZWF0ZVZhbHVlKCppbnRlZ2VyLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KK307CiAKIC8vIE1BUks6IE51bWJlciAoUmF3KQogCi1zdGF0
aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IHZhbGlkYXRlZE51bWJlclJhdyhkb3VibGUgdmFsdWUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4g
dmFsaWRhdGVkTnVtYmVyUmF3KGRvdWJsZSB2YWx1ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQog
ewogICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHZhbHVl
IDwgMCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gdmFsdWU7Cisg
ICAgcmV0dXJuIHt7IHZhbHVlIH19OwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+
IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tl
blJhbmdlJiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIGF1dG8gcmFuZ2UgPSBzb3VyY2VSYW5n
ZTsKLSAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9rZW5UeXBl
RnVuY3Rpb24ocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgc3ltYm9sVGFibGUs
IHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRh
dGVkTnVtYmVyUmF3KHZhbHVlLT5kb3VibGVWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgewotICAgICAg
ICAgICAgc291cmNlUmFuZ2UgPSByYW5nZTsKLSAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRW
YWx1ZTsKK3N0cnVjdCBOdW1iZXJSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0
aW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PiBjb25zdW1lKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CisKKyAgICAgICAgYXV0byByYW5nZUNvcHkgPSBy
YW5nZTsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRv
a2VuVHlwZUZ1bmN0aW9uKHJhbmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCBz
eW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRl
ZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3KHZhbHVlLT5kb3VibGVWYWx1ZSgpLCB2YWx1ZVJh
bmdlKSkgeworICAgICAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VDb3B5OworICAgICAgICAgICAg
ICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQorfTsKIAotICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci19Ci0KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJl
clJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKLSAgICAKLSAgICBp
ZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyhyYW5nZS5wZWVrKCku
bnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHJhbmdlLmNvbnN1bWVJbmNs
dWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKK3N0cnVj
dCBOdW1iZXJSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBz
dGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAg
eworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7Cisg
ICAgICAgIAorICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJl
clJhdyhyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAg
ICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0
dXJuIHZhbGlkYXRlZFZhbHVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAgICAgfQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Cit9OwogCi1zdGF0aWMgc3Rk
OjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVu
dChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIEFTU0VSVChyYW5nZS5w
ZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pOworc3RydWN0IE51bWJlclJhd0tub3duVG9rZW5U
eXBlSWRlbnRDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5
cGUgdG9rZW5UeXBlID0gSWRlbnRUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1i
ZXJSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKTsKIAotICAgIGlmIChhdXRv
IHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0KHJhbmdlLnBlZWsoKS5pZCgpKSkgewotICAgICAg
ICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVI6Ci0gICAgICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRl
ZE51bWJlclJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgICAgICAg
ICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdmFsaWRhdGVkVmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaWYgKGF1dG8gdmFyaWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygp
LmlkKCkpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7CisgICAgICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOgorICAgICAgICAgICAgICAgIGlmIChh
dXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3KHZhcmlhYmxlLT52YWx1ZSwg
dmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Cit9Owog
CiAvLyBNQVJLOiBOdW1iZXIgKENTU1ByaW1pdGl2ZVZhbHVlIC0gbWFpbnRhaW5pbmcgY2FsYykK
IAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlckNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJh
bmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CitzdHJ1Y3QgTnVtYmVyQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0
aW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1
aXJrLCBVbml0bGVzc1plcm9RdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBD
YWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1
ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7Ci0gICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFs
dWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcik7Ci19CisgICAgICAgIENh
bGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHZhbHVl
UmFuZ2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1l
VmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcik7CisgICAgfQorfTsK
IAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlckNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IE51bWJlclRva2VuKTsKLSAgICAKLSAgICBhdXRvIHRva2VuID0gcmFuZ2UucGVlaygp
OwotICAgIAotICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3
KHRva2VuLm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgewotICAgICAgICBhdXRvIHVuaXRU
eXBlID0gdG9rZW4udW5pdFR5cGUoKTsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKTsKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoKnZhbGlkYXRlZFZh
bHVlLCB1bml0VHlwZSk7CitzdHJ1Y3QgTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENT
U1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1Bh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wm
IHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1i
ZXJUb2tlbik7CisgICAgICAgIAorICAgICAgICBhdXRvIHRva2VuID0gcmFuZ2UucGVlaygpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1i
ZXJSYXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICBh
dXRvIHVuaXRUeXBlID0gdG9rZW4udW5pdFR5cGUoKTsKKyAgICAgICAgICAgIHJhbmdlLmNvbnN1
bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVW
YWx1ZSh2YWxpZGF0ZWRWYWx1ZS0+dmFsdWUsIHVuaXRUeXBlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Cit9OwogCi0K
IC8vIE1BUks6IFBlcmNlbnQgKHJhdykKIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB2
YWxpZGF0ZWRQZXJjZW50UmF3KGRvdWJsZSB2YWx1ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8UGVyY2VudFJhdz4gdmFsaWRhdGVkUGVyY2VudFJhdyhkb3Vi
bGUgdmFsdWUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKICAgICBpZiAodmFsdWVSYW5nZSA9
PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiB2YWx1ZSA8IDApCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAgICAgaWYgKHN0ZDo6aXNpbmYodmFsdWUpKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotICAgIHJldHVybiB2YWx1ZTsKKyAgICByZXR1cm4ge3sgdmFsdWUgfX07
CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXdXaXRo
S25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlKQotewotICAgIEFTU0VSVChzb3VyY2VSYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9u
VG9rZW4pOworc3RydWN0IFBlcmNlbnRSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1
bmN0aW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGVyY2VudFJhdz4gY29uc3Vt
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5w
ZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCi0gICAgY29uc3QgYXV0byYgdG9rZW4g
PSBzb3VyY2VSYW5nZS5wZWVrKCk7Ci0gICAgYXV0byBmdW5jdGlvbklkID0gdG9rZW4uZnVuY3Rp
b25JZCgpOwotICAgIGlmICghQ1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbihmdW5jdGlvbklk
KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgYXV0byByYW5nZUNvcHkg
PSByYW5nZTsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dCwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5nZSA9IHJhbmdl
Q29weTsKIAotICAgIGF1dG8gcmFuZ2UgPSBzb3VyY2VSYW5nZTsKLSAgICBhdXRvIGNhbGNWYWx1
ZSA9IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKGZ1bmN0aW9uSWQsIGNvbnN1bWVGdW5jdGlvbihyYW5n
ZSksIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxl
KTsKLSAgICBpZiAoY2FsY1ZhbHVlICYmIGNhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50KSB7Ci0gICAgICAgIHNvdXJjZVJhbmdlID0gcmFuZ2U7Ci0g
ICAgICAgIHJldHVybiBjYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHRoaXMgdmFsaWRhdGUgdGhlIGNhbGMgdmFsdWUgYXMgaXMgZG9uZSBmb3Ig
dGhlIE51bWJlclJhdyB2YXJpYW50PworICAgICAgICAgICAgcmV0dXJuIHt7IHZhbHVlLT5kb3Vi
bGVWYWx1ZSgpIH19OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
ICAgICB9Cit9OwogCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK3N0cnVjdCBQZXJjZW50
UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
Q1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IFBlcmNlbnRhZ2VUb2tlbjsKKyAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gUGVyY2VudGFnZVRva2VuKTsK
IAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93
blRva2VuVHlwZVBlcmNlbnRhZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBBU1NFUlQo
cmFuZ2UucGVlaygpLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pOwotCi0gICAgaWYgKGF1dG8g
dmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHJhbmdlLnBlZWsoKS5udW1lcmlj
VmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKTsKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAgICAgICBpZiAo
YXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51
bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUlu
Y2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KLSAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBj
b25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZUlkZW50KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJh
bmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRl
bnRUb2tlbik7CitzdHJ1Y3QgUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lciB7
CisgICAgLy8gRklYTUU6IElkZW50aWNhbCB0byBOdW1iZXJSYXdLbm93blRva2VuVHlwZUlkZW50
Q29uc3VtZXIgZXhjZXB0IHZhbGlkYXRpb24gYW5kIHVuaXQgdHlwZS4KKyAgICBzdGF0aWMgY29u
c3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBJZGVudFRva2VuOworICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJv
UXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVu
dFRva2VuKTsKIAotICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0KHJhbmdl
LnBlZWsoKS5pZCgpKSkgewotICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7Ci0gICAg
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgotICAgICAgICAgICAgaWYgKGF1
dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHZhcmlhYmxlLT52YWx1ZSwg
dmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9
IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAgICAgICAgIHN3aXRj
aCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19Q
RVJDRU5UQUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFs
aWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0K
LSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotCiAvLyBNQVJLOiBQZXJjZW50IChD
U1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWluaW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9rZW47CisgICAgc3Rh
dGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9R
dWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBl
ZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBDYWxjUGFyc2VyIHBhcnNlcihy
YW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFi
bGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KTsKLX0KKyAgICAgICAgQ2FsY1BhcnNlciBwYXJzZXIo
cmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UsIHN5bWJvbFRh
YmxlLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5
KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpOworICAgIH0KK307CiAKLXN0YXRpYyBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
VmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IFBl
cmNlbnRhZ2VUb2tlbik7Ci0KLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRl
ZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgewot
ICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICByZXR1
cm4gcG9vbC5jcmVhdGVWYWx1ZSgqdmFsaWRhdGVkVmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUEVS
Q0VOVEFHRSk7CitzdHJ1Y3QgUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFy
c2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IFBlcmNlbnRhZ2VUb2tlbjsKKyAgICBzdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1Bh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wm
IHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBQZXJj
ZW50YWdlVG9rZW4pOworICAgICAgICAKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUg
PSB2YWxpZGF0ZWRQZXJjZW50UmF3KHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgdmFsdWVS
YW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
CisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSh2YWxpZGF0ZWRWYWx1ZS0+dmFs
dWUsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQorfTsKIAogLy8gTUFS
SzogTGVuZ3RoIChyYXcpCiAKQEAgLTQ1MCw4MzEgKzQ1MSw5NDIgQEAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8ZG91YmxlPiB2YWxpZGF0ZWRMZW5ndGhSYXcoZG91YmxlCiAgICAgcmV0dXJuIHZhbHVl
OwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXdX
aXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5n
ZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrKQotewotICAgIGF1dG8gcmFuZ2Ug
PSBzb3VyY2VSYW5nZTsKLSAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVDYWxjUmF3V2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwg
c3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHNvdXJjZVJhbmdlID0gcmFuZ2U7
Ci0gICAgICAgIHJldHVybiB7IHsgdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgdmFsdWUtPmRvdWJs
ZVZhbHVlKCkgfSB9Oworc3RydWN0IExlbmd0aFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25z
dW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBl
ID0gRnVuY3Rpb25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNv
bnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFu
Z2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKworICAgICAgICBhdXRvIHJhbmdl
Q29weSA9IHJhbmdlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVDYWxjUmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpM
ZW5ndGgsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgcmFuZ2UgPSBy
YW5nZUNvcHk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyB2YWxpZGF0ZSB0
aGUgY2FsYyB2YWx1ZSBhcyBpcyBkb25lIGZvciB0aGUgTnVtYmVyUmF3IHZhcmlhbnQ/CisgICAg
ICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZhbHVlLT5kb3VibGVW
YWx1ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3RhdGljIHN0ZDo6b3B0aW9u
YWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9u
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyaykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tl
bik7CitzdHJ1Y3QgTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lciB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRGltZW5z
aW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
aywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbik7CiAKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBl
ZWsoKTsKKyAgICAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAKLSAgICBhdXRvIHVu
aXRUeXBlID0gdG9rZW4udW5pdFR5cGUoKTsKLSAgICBzd2l0Y2ggKHVuaXRUeXBlKSB7Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1FVSVJLWV9FTVM6Ci0gICAgICAgIGlmIChwYXJzZXJNb2Rl
ICE9IFVBU2hlZXRNb2RlKQorICAgICAgICBhdXRvIHVuaXRUeXBlID0gdG9rZW4udW5pdFR5cGUo
KTsKKyAgICAgICAgc3dpdGNoICh1bml0VHlwZSkgeworICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUVVJUktZX0VNUzoKKyAgICAgICAgICAgIGlmIChwYXJzZXJNb2RlICE9IFVBU2hlZXRN
b2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKKyAgICAgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19MSFM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19STEhTOgorICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSUM6
CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6CisgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19QWDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NNOgorICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgorICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUEM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKKyAg
ICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfVk1JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNQVg6CisgICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WQjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1ZJOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZXOgorICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfU1ZIOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZNSU46
CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVk1BWDoKKyAgICAgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1NWQjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWSToKKyAg
ICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWVzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0xWSDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWTUlOOgorICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZNQVg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19MVkI6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkk6CisgICAgICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19EVlc6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19E
Vkg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVk1JTjoKKyAgICAgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0RWTUFYOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZC
OgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgorICAgICAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVN
UzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19STEhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DSFM6Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0lDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DTToKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lO
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfUEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19WSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVkI6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZJOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVlc6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfU1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWTUFYOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19TVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWSToKLSAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfTFZXOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkg6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWTUlOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19MVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZCOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19MVkk6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWVzoKLSAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfRFZIOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVk1J
TjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZNQVg6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0RWQjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19ROgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgorICAgICAgICB9
CisKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRMZW5ndGhSYXco
dG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHsgeyB1bml0
VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgIH0KK307CiAKLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZh
bGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKLSAg
ICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0dXJu
IHsgeyB1bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLX0KK3N0cnVjdCBMZW5ndGhSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1
bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUg
PSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7CisgICAgICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKIAotc3RhdGljIHN0ZDo6b3B0
aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVy
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyayB1bml0bGVzcykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1i
ZXJUb2tlbik7CisgICAgICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwogCi0gICAgYXV0
byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgICAgIGlmICghc2hvdWxkQWNjZXB0VW5pdGxl
c3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRs
ZXNzWmVyb1F1aXJrOjpBbGxvdykpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
Ci0gICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHRva2VuLm51bWVyaWNWYWx1ZSgp
LCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KSkKKyAgICAg
ICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRMZW5ndGhSYXcodG9rZW4ubnVt
ZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5j
bHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHsgeyBDU1NVbml0VHlwZTo6
Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OworICAgICAgICB9CiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZExl
bmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgcmFu
Z2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0dXJuIHsgeyBDU1NV
bml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OwogICAgIH0KLSAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotfQorfTsKIAogLy8gTUFSSzogTGVuZ3RoIChDU1NQcmltaXRpdmVWYWx1
ZSAtIG1haW50YWluaW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBl
RnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5w
ZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworc3RydWN0IExlbmd0aENTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBGdW5jdGlvblRv
a2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
VW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCi0gICAgQ2FsY1Bh
cnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5n
ZSwgc3ltYm9sVGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZD
YXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOwotfQorICAgICAgICBDYWxjUGFy
c2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdl
LCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVl
SWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOworICAgIH0KK307CiAKLXN0
YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJh
bmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1
bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERpbWVuc2lvblRva2Vu
OworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVl
UG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IERpbWVuc2lvblRva2VuKTsKIAotICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IGNvbnN1bWVMZW5n
dGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1
ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcykpCi0gICAgICAgIHJldHVybiBwb29sLmNyZWF0
ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19CisgICAgICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IExlbmd0aFJhd0tub3duVG9r
ZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1
ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAg
IHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlw
ZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLXN0YXRpYyBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFs
dWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJl
clRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2Vy
VG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0
IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwg
Q1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVz
c1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKIAotICAgIGlm
IChhdXRvIGxlbmd0aFJhdyA9IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1i
ZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcykp
Ci0gICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0
aFJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlmIChhdXRvIGxl
bmd0aFJhdyA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJh
dy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KK307CiAKIC8vIE1BUks6IEFuZ2xlIChyYXcpCiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFu
Z2xlUmF3PiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJz
ZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1
aXJrLCBVbml0bGVzc1plcm9RdWlyaykKLXsKLSAgICBhdXRvIHJhbmdlID0gc291cmNlUmFuZ2U7
Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgc3ltYm9sVGFibGUsIHZh
bHVlUmFuZ2UpKSB7Ci0gICAgICAgIHNvdXJjZVJhbmdlID0gcmFuZ2U7Ci0gICAgICAgIHJldHVy
biB7IHsgdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgdmFsdWUtPmRvdWJsZVZhbHVlKCkgfSB9Owor
c3RydWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBGdW5jdGlvblRva2Vu
OworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRs
ZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgYXV0byByYW5nZUNvcHkgPSByYW5nZTsKKyAg
ICAgICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKHJhbmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUsIHN5bWJvbFRhYmxl
LCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUNvcHk7CisgICAgICAg
ICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZhbHVlLT5kb3VibGVWYWx1
ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0K
LSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8
QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVS
YW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCi17
Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOworc3Ry
dWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lciB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRGltZW5zaW9uVG9rZW47
CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UsIENT
U1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOwogCi0g
ICAgYXV0byB1bml0VHlwZSA9IHJhbmdlLnBlZWsoKS51bml0VHlwZSgpOwotICAgIHN3aXRjaCAo
dW5pdFR5cGUpIHsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAgIHJldHVybiB7IHsgdW5pdFR5cGUs
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9Owot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICBhdXRvIHVuaXRUeXBlID0gcmFu
Z2UucGVlaygpLnVuaXRUeXBlKCk7CisgICAgICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKKyAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1JBRDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6CisgICAgICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAgICAgICAgICAgcmV0dXJuIHsgeyB1bml0VHlw
ZSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSB9IH07
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQorfTsKK3N0cnVjdCBBbmdsZVJhd0tub3du
VG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2Vy
VG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEFuZ2xlUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUs
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykK
KyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2Vu
KTsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19CisgICAgICAgIGlmIChzaG91bGRBY2Nl
cHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgcGFyc2VyTW9kZSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4geyB7IENTU1VuaXRU
eXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNW
YWx1ZSgpIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OwogCi1z
dGF0aWMgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9r
ZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKLXsKLSAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CisvLyBNQVJLOiBBbmds
ZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQogCi0gICAgaWYgKHNob3Vs
ZEFjY2VwdFVuaXRsZXNzVmFsdWUocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCBwYXJzZXJN
b2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIHsgeyBDU1NVbml0
VHlwZTo6Q1NTX0RFRywgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmlj
VmFsdWUoKSB9IH07Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK3N0cnVjdCBBbmdsZUNT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVy
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBG
dW5jdGlvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCi0v
LyBNQVJLOiBBbmdsZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQorICAg
ICAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUs
IHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5j
b25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKTsKKyAgICB9
Cit9OwogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5p
dGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBBbmdsZUNTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lciB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRGltZW5zaW9u
VG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVu
aXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NT
VmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gRGltZW5zaW9uVG9rZW4pOwogCi0gICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7
Ci0gICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OkFuZ2xlKTsKLX0KKyAgICAgICAgaWYgKGF1dG8gYW5nbGVSYXcgPSBBbmdsZVJhd0tu
b3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxl
LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAg
ICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGFuZ2xlUmF3LT52YWx1ZSwgYW5nbGVSYXct
PnR5cGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9OwogCi1zdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywg
VW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0g
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOworc3RydWN0
IEFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNv
bnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5
cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxl
c3NaZXJvLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CiAKLSAgICBpZiAoYXV0byBhbmdsZVJhdyA9
IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgc3ltYm9s
VGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQot
ICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShhbmdsZVJhdy0+dmFsdWUsIGFuZ2xlUmF3
LT50eXBlKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKyAgICAgICAgaWYgKGF1dG8gYW5nbGVS
YXcgPSBBbmdsZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2Us
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3Na
ZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGFuZ2xlUmF3LT52YWx1
ZSwgYW5nbGVSYXctPnR5cGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9Owog
Ci1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJh
bmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1
bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wmIHBv
b2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwor
Ly8gTUFSSzogVGltZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQogCi0g
ICAgaWYgKGF1dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVO
dW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVz
cywgdW5pdGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYW5nbGVS
YXctPnZhbHVlLCBhbmdsZVJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CitzdHJ1
Y3QgVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bkNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tl
blR5cGUgPSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9r
ZW4pOwogCisgICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpUaW1lLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVy
biBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1l
KTsKKyAgICB9Cit9OwogCi0vLyBNQVJLOiBUaW1lIChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50
YWluaW5nIGNhbGMpCitzdHJ1Y3QgVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQ
YXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQ
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaywgQ1NTVmFsdWVQb29s
JiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGlt
ZW5zaW9uVG9rZW4pOwogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1
aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gRnVuY3Rpb25Ub2tlbik7CisgICAgICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFu
Z2U6Ok5vbk5lZ2F0aXZlICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IDApCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7
Ci0gICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlRpbWUpOwotfQorICAgICAgICBpZiAoYXV0byB1bml0ID0gcmFuZ2UucGVlaygpLnVu
aXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19NUyB8fCB1bml0ID09IENTU1VuaXRU
eXBlOjpDU1NfUykKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKHJhbmdlLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHVuaXQpOwogCi1zdGF0
aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwg
Q1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKIAotICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVl
UmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IDApCitz
dHJ1Y3QgVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1i
ZXJDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9r
ZW5UeXBlID0gTnVtYmVyVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUs
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wm
IHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1i
ZXJUb2tlbik7CisKKyAgICAgICAgaWYgKHVuaXRsZXNzID09IFVuaXRsZXNzUXVpcms6OkFsbG93
ICYmIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgp
LCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkFsbG93KSkgeworICAg
ICAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgcmFu
Z2UucGVlaygpLm51bWVyaWNWYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJ
bmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIENTU1VuaXRUeXBlOjpDU1NfTVMp
OworICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLSAgICBp
ZiAoYXV0byB1bml0ID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5
cGU6OkNTU19NUyB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfUykKLSAgICAgICAgcmV0dXJu
IHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1l
cmljVmFsdWUoKSwgdW5pdCk7CisvLyBNQVJLOiBSZXNvbHV0aW9uIChDU1NQcmltaXRpdmVWYWx1
ZSAtIG5vIGNhbGMpCiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK3N0cnVjdCBSZXNvbHV0aW9u
Q1NTUHJpbWl0aXZlVmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lciB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRGltZW5z
aW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFs
dWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmss
IENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9s
VGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKyAgICAgICAgaWYgKGF1dG8g
dW5pdCA9IHJhbmdlLnBlZWsoKS51bml0VHlwZSgpOyB1bml0ID09IENTU1VuaXRUeXBlOjpDU1Nf
RFBQWCB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfWCB8fCB1bml0ID09IENTU1VuaXRUeXBl
OjpDU1NfRFBJIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19EUENNKQorICAgICAgICAgICAg
cmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2Uo
KS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CiAKLSAgICBpZiAodW5pdGxlc3MgPT0gVW5pdGxlc3NR
dWlyazo6QWxsb3cgJiYgc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZShyYW5nZS5wZWVrKCkubnVt
ZXJpY1ZhbHVlKCksIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6QWxs
b3cpKSB7Ci0gICAgICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZl
ICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IDApCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUlu
Y2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgQ1NTVW5pdFR5cGU6OkNTU19NUyk7
CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
K307CiAKLS8vIE1BUks6IFJlc29sdXRpb24gKENTU1ByaW1pdGl2ZVZhbHVlIC0gbm8gY2FsYykK
IAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb25DU1NQ
cmltaXRpdmVWYWx1ZVdpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKKy8vIE1BUks6IC0gTWV0YSBDb25zdW1lcnMK
IAotICAgIGlmIChhdXRvIHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9PSBD
U1NVbml0VHlwZTo6Q1NTX0RQUFggfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX1ggfHwgdW5p
dCA9PSBDU1NVbml0VHlwZTo6Q1NTX0RQSSB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfRFBD
TSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b25zdW1lciwgdHlwZW5hbWUgPSB2b2lkPgorc3RydWN0IFRyYW5zZm9ybUFwcGxpZXIgeworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBkZWNsdHlwZShhdXRvKSBhcHBseShUIHZhbHVl
KSB7IHJldHVybiB2YWx1ZTsgfQorfTsKIAotICAgIHJldHVybiBudWxscHRyOwordGVtcGxhdGU8
dHlwZW5hbWUgQ29uc3VtZXI+CitzdHJ1Y3QgVHJhbnNmb3JtQXBwbGllcjxDb25zdW1lciwgdHlw
ZW5hbWUgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgQ29uc3VtZXI6OlRyYW5zZm9ybWVyPj4geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBkZWNsdHlwZShhdXRvKSBhcHBseShUIHZhbHVl
KSB7IHJldHVybiBDb25zdW1lcjo6VHJhbnNmb3JtZXI6OnRyYW5zZm9ybSh2YWx1ZSk7IH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyLCB0eXBlbmFtZSBUPgorc3RhdGljIGRlY2x0
eXBlKGF1dG8pIGFwcGx5VHJhbnNmb3JtKFQgdmFsdWUpCit7CisgICAgcmV0dXJuIFRyYW5zZm9y
bUFwcGxpZXI8Q29uc3VtZXI+OjphcHBseSh2YWx1ZSk7CiB9CiAKKy8vIFRyYW5zZm9ybWVyczoK
IAotLy8gTUFSSzogLSBQcmltaXRpdmUgdmFsdWUgY29uc3VtZXJzIGZvciBjYWxsZXJzIHRoYXQg
ZG8gTk9UIGtub3cgdGhlIHRva2VuIHR5cGUuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0
IElkZW50aXR5VHJhbnNmb3JtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFQ7CisgICAgc3RhdGlj
IFQgdHJhbnNmb3JtKFQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBJbnRUeXBlPiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlw
ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKLXsK
LSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3Vs
dFR5cGUsIHR5cGVuYW1lIFZhcmlhbnRUeXBlPgorc3RydWN0IFJhd1ZhcmlhbnRUcmFuc2Zvcm1l
ckJhc2UgeworICAgIHVzaW5nIFJlc3VsdCA9IFJlc3VsdFR5cGU7CiAKLSAgICBzd2l0Y2ggKHRv
a2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNv
bnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uPEludFR5cGU+KHJh
bmdlLCBtaW5pbXVtVmFsdWUpOworICAgIHN0YXRpYyBSZXN1bHQgdHJhbnNmb3JtKFZhcmlhbnRU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFsdWUsIFtd
IChhdXRvIHZhbHVlKSB7IHJldHVybiB0cmFuc2Zvcm0odmFsdWUpOyB9KTsKKyAgICB9CiAKLSAg
ICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyPEludFR5cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUpOwot
ICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgIHN0YXRpYyB0eXBlbmFtZSBS
ZXN1bHQ6OnZhbHVlX3R5cGUgdHJhbnNmb3JtKHR5cGVuYW1lIFJlc3VsdDo6dmFsdWVfdHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJl
c3VsdCB0cmFuc2Zvcm0oc3RkOjpvcHRpb25hbDxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm0oKnZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRU
eXBlPiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyVHlwZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSwgQ1NTVmFsdWVQb29sJiBw
b29sKQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworc3RydWN0IEFuZ2xlT3JO
dW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lciA6IFJhd1ZhcmlhbnRUcmFuc2Zvcm1lckJhc2U8
c3RkOjpvcHRpb25hbDxkb3VibGU+LCBBbmdsZU9yTnVtYmVyUmF3PiB7CisgICAgdXNpbmcgUmF3
VmFyaWFudFRyYW5zZm9ybWVyQmFzZTxzdGQ6Om9wdGlvbmFsPGRvdWJsZT4sIEFuZ2xlT3JOdW1i
ZXJSYXc+Ojp0cmFuc2Zvcm07CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNh
c2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZUNTU1By
aW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbjxJbnRUeXBlPihy
YW5nZSwgbWluaW11bVZhbHVlLCBwb29sKTsKKyAgICBzdGF0aWMgZG91YmxlIHRyYW5zZm9ybShB
bmdsZVJhdyBhbmdsZVJhdykKKyAgICB7CisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZURlZ3JlZXMoYW5nbGVSYXcudHlwZSwgYW5nbGVSYXcudmFsdWUpOworICAgIH0K
IAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5
cGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyPEludFR5
cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUsIHBvb2wpOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7CisgICAgc3RhdGljIGRvdWJsZSB0cmFuc2Zvcm0oTnVtYmVyUmF3IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlOwogICAgIH0KK307CiAKLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KK3N0cnVjdCBOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1l
ciA6IFJhd1ZhcmlhbnRUcmFuc2Zvcm1lckJhc2U8c3RkOjpvcHRpb25hbDxkb3VibGU+LCBOdW1i
ZXJPclBlcmNlbnRSYXc+IHsKKyAgICB1c2luZyBSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlPHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiwgTnVtYmVyT3JQZXJjZW50UmF3Pjo6dHJhbnNmb3JtOwogCi1z
dGQ6Om9wdGlvbmFsPGludD4gY29uc3VtZUludGVnZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUpCi17Ci0gICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdzxpbnQ+KHJhbmdlLCBtaW5pbXVtVmFsdWUpOwotfQorICAgIHN0YXRpYyBkb3VibGUg
dHJhbnNmb3JtKE51bWJlclJhdyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52
YWx1ZTsKKyAgICB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUpCi17Ci0gICAg
cmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZTxpbnQ+KHJhbmdlLCBtaW5pbXVtVmFsdWUsIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkpOwotfQorICAgIHN0YXRpYyBkb3VibGUgdHJhbnNmb3JtKFBl
cmNlbnRSYXcgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUgLyAxMDAu
MDsKKyAgICB9Cit9OwogCi1zdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9zaXRpdmVJ
bnRlZ2VyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVybiBjb25z
dW1lSW50ZWdlclR5cGVSYXc8dW5zaWduZWQ+KHJhbmdlLCAxKTsKLX0KKy8vIE1BUks6IE1ldGFD
b25zdW1lckltcGwKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpdmVJ
bnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVybiBjb25zdW1l
SW50ZWdlclR5cGU8dW5zaWduZWQ+KHJhbmdlLCAxLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
KTsKLX0KK3RlbXBsYXRlPENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUsIHR5cGVuYW1lIENv
bnN1bWVyLCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgTWV0YUNvbnN1bWVySW1wbCB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgdHlwZW5hbWUgQ29uc3VtZXI6
OlJlc3VsdCBjb25zdW1lKEFyZ3MmJi4uLikKKyAgICB7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorfTsKIAotc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBhdXRv
JiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgorc3Ry
dWN0IE1ldGFDb25zdW1lckltcGw8RnVuY3Rpb25Ub2tlbiwgQ29uc3VtZXIsIHR5cGVuYW1lIHN0
ZDo6dm9pZF90PHR5cGVuYW1lIENvbnN1bWVyOjpGdW5jdGlvblRva2VuPj4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1lIENvbnN1bWVyOjpSZXN1
bHQgY29uc3VtZShBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBhcHBseVRy
YW5zZm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6OkZ1bmN0aW9uVG9rZW46OmNvbnN1bWUoc3RkOjpm
b3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7CisgICAgfQorfTsKIAotICAgIHN3aXRjaCAodG9rZW4u
dHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3Vt
ZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFu
Z2UpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3VtZXI+CitzdHJ1Y3QgTWV0YUNvbnN1bWVySW1w
bDxOdW1iZXJUb2tlbiwgQ29uc3VtZXIsIHR5cGVuYW1lIHN0ZDo6dm9pZF90PHR5cGVuYW1lIENv
bnN1bWVyOjpOdW1iZXJUb2tlbj4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgor
ICAgIHN0YXRpYyB0eXBlbmFtZSBDb25zdW1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uIGFy
Z3MpCisgICAgeworICAgICAgICByZXR1cm4gYXBwbHlUcmFuc2Zvcm08Q29uc3VtZXI+KENvbnN1
bWVyOjpOdW1iZXJUb2tlbjo6Y29uc3VtZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsK
KyAgICB9Cit9OwogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1
bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdW1lcj4KK3N0cnVjdCBNZXRhQ29uc3VtZXJJbXBs
PFBlcmNlbnRhZ2VUb2tlbiwgQ29uc3VtZXIsIHR5cGVuYW1lIHN0ZDo6dm9pZF90PHR5cGVuYW1l
IENvbnN1bWVyOjpQZXJjZW50YWdlVG9rZW4+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJncz4KKyAgICBzdGF0aWMgdHlwZW5hbWUgQ29uc3VtZXI6OlJlc3VsdCBjb25zdW1lKEFyZ3Mm
Ji4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGx5VHJhbnNmb3JtPENvbnN1bWVy
PihDb25zdW1lcjo6UGVyY2VudGFnZVRva2VuOjpjb25zdW1lKHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLikpOworICAgIH0KK307CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKK3Rl
bXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IE1ldGFDb25zdW1lckltcGw8RGltZW5z
aW9uVG9rZW4sIENvbnN1bWVyLCB0eXBlbmFtZSBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBDb25zdW1l
cjo6RGltZW5zaW9uVG9rZW4+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAg
ICBzdGF0aWMgdHlwZW5hbWUgQ29uc3VtZXI6OlJlc3VsdCBjb25zdW1lKEFyZ3MmJi4uLiBhcmdz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGx5VHJhbnNmb3JtPENvbnN1bWVyPihDb25zdW1l
cjo6RGltZW5zaW9uVG9rZW46OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7
CiAgICAgfQorfTsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb25zdW1lcj4KK3N0cnVjdCBNZXRhQ29uc3VtZXJJbXBsPElkZW50VG9rZW4sIENvbnN1
bWVyLCB0eXBlbmFtZSBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBDb25zdW1lcjo6SWRlbnRUb2tlbj4+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyB0eXBlbmFtZSBD
b25zdW1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYXBwbHlUcmFuc2Zvcm08Q29uc3VtZXI+KENvbnN1bWVyOjpJZGVudFRva2VuOjpjb25z
dW1lKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOworICAgIH0KK307CiAKLVJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3VtZXIsIHR5
cGVuYW1lLi4uIEFyZ3M+CithdXRvIGNvbnN1bWVNZXRhQ29uc3VtZXIoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
IHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIEFyZ3MmJi4uLiBhcmdz
KSAtPiB0eXBlbmFtZSBDb25zdW1lcjo6UmVzdWx0CiB7Ci0gICAgYXV0byYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7Ci0KLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgeworICAgIHN3aXRjaCAocmFu
Z2UucGVlaygpLnR5cGUoKSkgewogICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0
dXJuIGNvbnN1bWVOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKSk7CisgICAgICAgIHJldHVybiBNZXRhQ29uc3VtZXJJbXBsPEZ1bmN0aW9uVG9rZW4sIENv
bnN1bWVyPjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1v
ZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7
CiAKICAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlckNT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVy
biBNZXRhQ29uc3VtZXJJbXBsPE51bWJlclRva2VuLCBDb25zdW1lcj46OmNvbnN1bWUocmFuZ2Us
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3Na
ZXJvLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogCisgICAgY2FzZSBQZXJjZW50YWdl
VG9rZW46CisgICAgICAgIHJldHVybiBNZXRhQ29uc3VtZXJJbXBsPFBlcmNlbnRhZ2VUb2tlbiwg
Q29uc3VtZXI+Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2Vy
TW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKKworICAgIGNhc2UgRGltZW5zaW9uVG9rZW46CisgICAgICAgIHJldHVybiBNZXRhQ29uc3Vt
ZXJJbXBsPERpbWVuc2lvblRva2VuLCBDb25zdW1lcj46OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRh
YmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworCisgICAgY2FzZSBJZGVudFRva2VuOgorICAgICAg
ICByZXR1cm4gTWV0YUNvbnN1bWVySW1wbDxJZGVudFRva2VuLCBDb25zdW1lcj46OmNvbnN1bWUo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIAogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KLQotICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1zdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0
aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2Rl
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCi17Ci0gICAg
YXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgCi0gICAgc3dpdGNoICh0b2tlbi50eXBl
KCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVu
Z3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MpOworLy8gTUFSSzogU2FtZVRva2VuTWV0YUNvbnN1bWVyCiAK
LSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aFJh
d1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcyk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAg
cmV0dXJuIGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOwordGVtcGxhdGU8dHlwZW5hbWUg
VHJhbnNmb3JtZXIsIHR5cGVuYW1lIENvbnN1bWVyc1R1cGxlLCBzaXplX3QgST4KK3N0cnVjdCBT
YW1lVG9rZW5NZXRhQ29uc3VtZXJJbXBsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdz
PgorICAgIHN0YXRpYyB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYm
Li4uIGFyZ3MpCisgICAgeworICAgICAgICB1c2luZyBTZWxlY3RlZENvbnN1bWVyID0gc3RkOjp0
dXBsZV9lbGVtZW50X3Q8SSAtIDEsIENvbnN1bWVyc1R1cGxlPjsKKyAgICAgICAgaWYgKGF1dG8g
cmVzdWx0ID0gVHJhbnNmb3JtZXI6OnRyYW5zZm9ybShTZWxlY3RlZENvbnN1bWVyOjpjb25zdW1l
KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuIFNhbWVUb2tlbk1ldGFDb25zdW1lckltcGw8VHJhbnNmb3JtZXIs
IENvbnN1bWVyc1R1cGxlLCBJIC0gMT46OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3Mp
Li4uKTsKKyAgICB9Cit9OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUcmFuc2Zvcm1lciwgdHlwZW5hbWUgQ29uc3VtZXJzVHVwbGU+CitzdHJ1Y3Qg
U2FtZVRva2VuTWV0YUNvbnN1bWVySW1wbDxUcmFuc2Zvcm1lciwgQ29uc3VtZXJzVHVwbGUsIDA+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyB0eXBlbmFtZSBU
cmFuc2Zvcm1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQgeyB9OwogICAgIH0KK307CiAKLSAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotfQordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXIsIHR5
cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorc3RydWN0IFNhbWVUb2tlbk1ldGFDb25zdW1lciB7
CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmNvbmp1bmN0aW9uX3Y8c3RkOjpib29sX2NvbnN0YW50
PFRzOjp0b2tlblR5cGUgPT0gVDo6dG9rZW5UeXBlPi4uLj4sICJBbGwgQ29uc3VtZXJzIHBhc3Nl
ZCB0byBTYW1lVG9rZW5NZXRhQ29uc3VtZXIgbXVzdCBoYXZlIHRoZSBzYW1lIHRva2VuVHlwZSIp
OworICAgIHVzaW5nIENvbnN1bWVyc1R1cGxlID0gc3RkOjp0dXBsZTxULCBUcy4uLj47CiAKLVJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCi17Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVr
KCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0g
VDo6dG9rZW5UeXBlOworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGlj
IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQgY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5p
dGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQXJncyYmLi4uIGFyZ3MpCisg
ICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSB0b2tlblR5cGUpOwor
ICAgICAgICByZXR1cm4gU2FtZVRva2VuTWV0YUNvbnN1bWVySW1wbDxUcmFuc2Zvcm1lciwgQ29u
c3VtZXJzVHVwbGUsIHN0ZDo6dHVwbGVfc2l6ZV92PENvbnN1bWVyc1R1cGxlPj46OmNvbnN1bWUo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KK307CiAKLSAg
ICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAg
ICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5p
dGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogCi0gICAgY2FzZSBEaW1lbnNpb25U
b2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBh
cnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLSAgICAKLSAg
ICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aENTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFs
dWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkp
OworLy8gTUFSSzogLSBDb25zdW1lciBkZWZpbml0aW9ucy4KIAotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KKy8vIE1BUks6IEludGVnZXIKIAotICAgIHJldHVybiBudWxscHRy
OwotfQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVyZ2VyUmFu
Z2U+CitzdHJ1Y3QgSW50ZWdlclR5cGVSYXdDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0g
c3RkOjpvcHRpb25hbDxJbnRUeXBlPjsKIAotc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQ
ZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFu
Z2UpCi17Ci0gICAgY29uc3QgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgdXNpbmcg
RnVuY3Rpb25Ub2tlbiA9IEludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyPEludFR5cGUsIGludGVyZ2VyUmFuZ2U+OworICAgIHVzaW5nIE51bWJlclRva2VuID0gSW50
ZWdlclR5cGVSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyPEludFR5cGUsIGludGVyZ2Vy
UmFuZ2U+OworfTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5j
dGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlcmdlclJhbmdlPgorc3RydWN0IEludGVnZXJUeXBl
Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47
CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJj
ZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdl
KTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gSW50ZWdlclR5cGVLbm93blRva2VuVHlwZUZ1
bmN0aW9uQ29uc3VtZXI8SW50VHlwZSwgaW50ZXJnZXJSYW5nZT47CisgICAgdXNpbmcgTnVtYmVy
VG9rZW4gPSBJbnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI8SW50VHlwZSwg
aW50ZXJnZXJSYW5nZT47Cit9OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQorLy8gTUFSSzogTnVtYmVyCiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorc3RydWN0
IE51bWJlclJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPE51
bWJlclJhdz47CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBy
ZXR1cm4gY29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKHJhbmdlLCB2YWx1ZVJhbmdlLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpKTsKLX0KKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gTnVtYmVy
UmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgIHVzaW5nIE51bWJlclRva2Vu
ID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKK307CiAKLVJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkK
LXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKK3N0cnVjdCBOdW1iZXJSYXdBbGxv
d2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lciA6IE51bWJlclJhd0NvbnN1bWVyIHsKKyAgICB1
c2luZyBJZGVudFRva2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyOwor
fTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcG9vbCk7
CitzdHJ1Y3QgTnVtYmVyQ29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT47CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0
dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcG9vbCk7CisgICAgdXNpbmcg
RnVuY3Rpb25Ub2tlbiA9IE51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgIHVzaW5nIE51bWJlclRva2VuID0gTnVtYmVy
Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVy
OworfTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKy8vIE1BUks6IFBl
cmNlbnQKIAotICAgIHJldHVybiBudWxscHRyOwotfQorc3RydWN0IFBlcmNlbnRSYXdDb25zdW1l
ciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PjsKIAotc3Rk
OjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3Ms
IFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gUGVyY2VudFJhd0tub3duVG9r
ZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJj
ZW50UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXI7Cit9OwogCi0gICAgc3dpdGNoICh0
b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBj
b25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCBWYWx1
ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pOworc3RydWN0
IFBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lciA6IFBlcmNlbnRSYXdD
b25zdW1lciB7CisgICAgdXNpbmcgSWRlbnRUb2tlbiA9IFBlcmNlbnRSYXdLbm93blRva2VuVHlw
ZUlkZW50Q29uc3VtZXI7Cit9OwogCi0gICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKLSAgICAgICAg
cmV0dXJuIGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwg
eyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8p
Oworc3RydWN0IFBlcmNlbnRDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPjsKIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVy
biBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgVmFs
dWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKLSAgICAg
ICAgYnJlYWs7CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IFBlcmNlbnRDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2lu
ZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhL
bm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjsKK307CiAKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9CisvLyBNQVJLOiBMZW5ndGgKIAotICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci19CitzdHJ1Y3QgTGVuZ3RoUmF3Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IHN0
ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PjsKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3Na
ZXJvKQotewotICAgIHJldHVybiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKHJhbmdlLCBwYXJzZXJN
b2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsK
LX0KKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVGdW5j
dGlvbkNvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gTGVuZ3RoUmF3S25vd25U
b2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IExlbmd0
aFJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7Cit9OwogCi1SZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJiBwb29sLCBVbml0bGVz
c1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCi17Ci0gICAg
YXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CitzdHJ1Y3QgTGVuZ3RoQ29uc3VtZXIgeworICAg
IHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47CiAKLSAgICBzd2l0Y2gg
KHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJu
IGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVG
dW5jdGlvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIHVuaXRsZXNz
LCB1bml0bGVzc1plcm8sIHBvb2wpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBMZW5ndGhD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1l
cjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IExlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENh
bGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICB1c2luZyBEaW1lbnNpb25U
b2tlbiA9IExlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVE
aW1lbnNpb25Db25zdW1lcjsKK307CiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAg
ICByZXR1cm4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUs
IHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpOworLy8gTUFSSzogQW5nbGUKIAotICAgIGNh
c2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFu
Z2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7Ci0gICAg
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBu
dWxscHRyOwotfQorc3RydWN0IEFuZ2xlUmF3Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9
IHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+OwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVUaW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNl
ck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKLXsK
LSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2Vu
ID0gQW5nbGVSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI7CisgICAgdXNpbmcgTnVt
YmVyVG9rZW4gPSBBbmdsZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7CisgICAgdXNp
bmcgRGltZW5zaW9uVG9rZW4gPSBBbmdsZVJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3Vt
ZXI7Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9u
VG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENh
bGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CitzdHJ1Y3QgQW5n
bGVDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PjsKIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lVGlt
ZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFu
Z2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBBbmdsZUNTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgIHVz
aW5nIE51bWJlclRva2VuID0gQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7CisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBBbmds
ZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25z
dW1lcjsKK307CiAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3Vt
ZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpKTsKKy8vIE1BUks6IFRpbWUKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK3N0cnVjdCBUaW1lQ29u
c3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47CiAK
LVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgLy8gTk9URTogVW5saWtlIHRoZSBvdGhlciB0eXBlcywg
Y2FsYygpIGRvZXMgbm90IHdvcmsgd2l0aCA8cmVzb2x1dGlvbj4uCisgICAgdXNpbmcgRnVuY3Rp
b25Ub2tlbiA9IFRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBl
RnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IFRpbWVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7CisgICAgdXNp
bmcgRGltZW5zaW9uVG9rZW4gPSBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOworfTsKIAotICAgIGF1dG8mIHRva2VuID0gcmFu
Z2UucGVlaygpOworLy8gTUFSSzogUmVzb2x1dGlvbgogCi0gICAgc3dpdGNoICh0b2tlbi50eXBl
KCkpIHsKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVJl
c29sdXRpb25DU1NQcmltaXRpdmVWYWx1ZVdpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5n
ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci0gICAgCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorc3RydWN0IFJlc29sdXRpb25Db25zdW1lciB7CisgICAgdXNpbmcg
UmVzdWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsKIAotICAgIHJldHVybiBudWxscHRy
OwotfQorICAgIC8vIE5PVEU6IFVubGlrZSB0aGUgb3RoZXIgdHlwZXMsIGNhbGMoKSBkb2VzIG5v
dCB3b3JrIHdpdGggPHJlc29sdXRpb24+LgorICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gUmVz
b2x1dGlvbkNTU1ByaW1pdGl2ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3Vt
ZXI7Cit9OwogCi0vLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyAodG9rZW4gdHlwZSB1
bmtub3duIGJ5IGNhbGxlcikuCisvLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVyIGRlZmlu
aXRpb25zLgogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVP
clBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2Vy
TW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0
bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkpCi17Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Cisv
LyBNQVJLOiBBbmdsZSArIFBlcmNlbnQKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0g
ICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVB
bmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihy
YW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJv
LCBwb29sKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIGNvbnN1
bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBvb2wpOworc3RydWN0IEFuZ2xlT3JQZXJjZW50
Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47
CiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xl
Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5n
ZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBw
b29sKTsKLSAgICAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3Vt
ZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihy
YW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJv
LCBwb29sKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gU2FtZVRva2VuTWV0YUNvbnN1bWVy
PAorICAgICAgICBJZGVudGl0eVRyYW5zZm9ybWVyPFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4+
LAorICAgICAgICBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIKKyAgICA+OworICAgIHVzaW5n
IE51bWJlclRva2VuID0gQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlTnVtYmVyQ29uc3VtZXI7CisgICAgdXNpbmcgUGVyY2VudGFnZVRva2VuID0gUGVyY2Vu
dENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3Vt
ZXI7CisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKK307CiAKLSAgICBjYXNl
IFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgcG9vbCk7Ci0gICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQorLy8gTUFSSzogTGVuZ3RoICsgUGVyY2VudAogCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
CitzdHJ1Y3QgTGVuZ3RoT3JQZXJjZW50UmF3VHJhbnNmb3JtZXIgeworICAgIHVzaW5nIFJlc3Vs
dCA9IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PjsKIAotc3RkOjpvcHRpb25hbDxM
ZW5ndGhPclBlcmNlbnRSYXc+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQotewotICAgIGF1dG8gY29udmVydFRvTGVu
Z3RoT3JQZXJjZW50UmF3ID0gW10oYXV0byByZXN1bHQpIC0+IHN0ZDo6b3B0aW9uYWw8TGVuZ3Ro
T3JQZXJjZW50UmF3PiB7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4g
eyAqcmVzdWx0IH07CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IHRyYW5zZm9ybShUIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHsgKnZhbHVlIH07CiAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfTsKKyAgICB9CiAKLSAgICBhdXRvJiB0b2tlbiA9
IHJhbmdlLnBlZWsoKTsKLQotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBG
dW5jdGlvblRva2VuOiB7Ci0gICAgICAgIGlmIChhdXRvIGxlbmd0aCA9IGNvbnN1bWVMZW5ndGhS
YXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcykpCi0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTGVuZ3RoT3JQ
ZXJjZW50UmF3KGxlbmd0aCk7Ci0gICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVy
Y2VudFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2Up
KQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyhwZXJjZW50
KTsKLSAgICAgICAgYnJlYWs7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJj
ZW50UmF3PiB0cmFuc2Zvcm0oc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KK307CiAKLSAgICBjYXNlIERp
bWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29udmVydFRvTGVuZ3RoT3JQZXJjZW50UmF3
KGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpKTsKLSAgICAKLSAgICBjYXNlIE51bWJl
clRva2VuOgotICAgICAgICByZXR1cm4gY29udmVydFRvTGVuZ3RoT3JQZXJjZW50UmF3KGNvbnN1
bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpKTsKK3N0cnVjdCBMZW5ndGhPclBlcmNlbnRSYXdDb25z
dW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRS
YXc+OworICAgIHVzaW5nIFRyYW5zZm9ybWVyID0gTGVuZ3RoT3JQZXJjZW50UmF3VHJhbnNmb3Jt
ZXI7CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b0xlbmd0aE9yUGVyY2VudFJhdyhjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBl
cmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9r
ZW4gPSBTYW1lVG9rZW5NZXRhQ29uc3VtZXI8CisgICAgICAgIExlbmd0aE9yUGVyY2VudFJhd1Ry
YW5zZm9ybWVyLAorICAgICAgICBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyLAorICAgICAgICBMZW5ndGhSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIKKyAg
ICA+OworICAgIHVzaW5nIE51bWJlclRva2VuID0gTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVOdW1i
ZXJDb25zdW1lcjsKKyAgICB1c2luZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJjZW50UmF3S25vd25U
b2tlblR5cGVQZXJjZW50Q29uc3VtZXI7CisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBMZW5n
dGhSYXdLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOworfTsKIAotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKy8vIE1BUks6IEFuZ2xlICsgTnVtYmVyCiAKLSAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotfQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBBbmds
ZU9yTnVtYmVyUmF3Q29uc3VtZXIgeworICAgIHVzaW5nIFRyYW5zZm9ybWVyID0gVDsKKyAgICB1
c2luZyBSZXN1bHQgPSB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0OwogCi1SZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdl
LCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSkK
LXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB1c2luZyBGdW5jdGlvblRv
a2VuID0gU2FtZVRva2VuTWV0YUNvbnN1bWVyPAorICAgICAgICBUcmFuc2Zvcm1lciwKKyAgICAg
ICAgTnVtYmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBBbmds
ZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcgorICAgID47CisgICAgdXNpbmcgTnVt
YmVyVG9rZW4gPSBOdW1iZXJSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOworICAgIHVz
aW5nIERpbWVuc2lvblRva2VuID0gQW5nbGVSYXdLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1
bWVyOworfTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlv
blRva2VuOiB7Ci0gICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSB1c2luZyB0cnlpbmcg
dG8gZ2VuZXJhdGUgdGhlIGNhbGMgd2l0aCBib3RoIExlbmd0aCBhbmQgUGVyY2VudCBkZXN0aW5h
dGlvbiBjYXRlZ29yeSB0eXBlcz8KLSAgICAgICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSwgeyB9LCBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UpOwotICAgICAgICBpZiAoYXV0
byBjYWxjdWxhdGlvbiA9IHBhcnNlci52YWx1ZSgpOyBjYWxjdWxhdGlvbiAmJiBjYW5Db25zdW1l
Q2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBwYXJzZXJNb2RlKSkKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
IAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3Ro
Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5n
ZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKSk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJu
IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBl
TnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK3N0cnVjdCBBbmdsZU9yTnVtYmVyUmF3S25vd25Ub2tl
blR5cGVJZGVudENvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2Vu
VHlwZSB0b2tlblR5cGUgPSBJZGVudFRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFu
Z2xlT3JOdW1iZXJSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0
IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UsIENTU1BhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8gdmFyaWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfREVHOgorICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JB
RDoKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgorICAgICAgICAgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46CisgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQW5nbGVSYXcg
eyB2YXJpYWJsZS0+dHlwZSwgdmFyaWFibGUtPnZhbHVlIH07CiAKLSAgICBjYXNlIFBlcmNlbnRh
Z2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisgICAgICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSOgorICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlclJhdyB7IHZhcmlhYmxl
LT52YWx1ZSB9OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEFuZ2xlT3JOdW1iZXJS
YXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lciA6IEFuZ2xlT3JOdW1iZXJSYXdDb25z
dW1lcjxUPiB7CisgICAgdXNpbmcgSWRlbnRUb2tlbiA9IEFuZ2xlT3JOdW1iZXJSYXdLbm93blRv
a2VuVHlwZUlkZW50Q29uc3VtZXI7Cit9OwogCi0vLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1
bWVycyB0aGF0IGFsbG93IGxvb2t1cCBpbiB0aGUgc3ltYm9sIHRhYmxlIGZvciBJZGVudFRva2Vu
cyAoYnkgZGVmYXVsdCwgb3RoZXIgY29uc3VtZXJzIG9ubHkgbG9va3VwIGluIHRoZSBzeW1ib2wg
dGFibGUgZm9yIGNhbGMoKSkuCisvLyBNQVJLOiBOdW1iZXIgKyBQZXJjZW50CiAKLXN0YXRpYyBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlckFsbG93aW5nU3ltYm9sVGFibGVJZGVu
dChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKQotewot
ICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0
cnVjdCBOdW1iZXJPclBlcmNlbnRSYXdDb25zdW1lciB7CisgICAgdXNpbmcgVHJhbnNmb3JtZXIg
PSBUOworICAgIHVzaW5nIFJlc3VsdCA9IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQ7CiAK
LSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAg
ICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihy
YW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4g
PSBTYW1lVG9rZW5NZXRhQ29uc3VtZXI8CisgICAgICAgIFRyYW5zZm9ybWVyLAorICAgICAgICBQ
ZXJjZW50UmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBOdW1iZXJS
YXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIKKyAgICA+OworICAgIHVzaW5nIE51bWJl
clRva2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICB1c2lu
ZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3Vt
ZXI7Cit9OwogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVO
dW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1
ZVJhbmdlKTsKK3N0cnVjdCBOdW1iZXJPclBlcmNlbnRSYXdLbm93blRva2VuVHlwZUlkZW50Q29u
c3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlw
ZSA9IElkZW50VG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TnVtYmVyT3JQZXJjZW50
UmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8gdmFyaWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKKyAgICAgICAgICAgICAgICBpZiAoYXV0byB2YWxp
ZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1ZVJh
bmdlKSkgeworICAgICAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3sgKnZhbGlkYXRlZFZhbHVlIH19
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgIGNhc2Ug
SWRlbnRUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tl
blR5cGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOworICAgICAgICAgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICAgICAgICAgICAgICBpZiAoYXV0byB2
YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVl
UmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0
ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7eyAqdmFsaWRhdGVkVmFsdWUg
fX07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1i
b2xUYWJsZUlkZW50Q29uc3VtZXIgOiBOdW1iZXJPclBlcmNlbnRSYXdDb25zdW1lcjxUPiB7Cisg
ICAgdXNpbmcgSWRlbnRUb2tlbiA9IE51bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRl
bnRDb25zdW1lcjsKK307CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBl
cmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWso
KTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOworLy8gTUFSSzogLSBDb25zdW1l
ciBmdW5jdGlvbnMgLSB1dGlsaXplIGNvbnN1bWVyIGRlZmluaXRpb25zIGFib3ZlLCBnaXZpbmcg
bW9yZSB0YXJnZXR0ZWQgaW50ZXJmYWNlcyBhbmQgYWxsb3dpbmcgZXhwb3N1cmUgdG8gb3RoZXIg
ZmlsZXMuCiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1
bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgc3ltYm9sVGFi
bGUsIHZhbHVlUmFuZ2UpOwordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdl
IGludGVyZ2VyUmFuZ2U+IHN0ZDo6b3B0aW9uYWw8SW50VHlwZT4gY29uc3VtZUludGVnZXJUeXBl
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lTWV0
YUNvbnN1bWVyPEludGVnZXJUeXBlUmF3Q29uc3VtZXI8SW50VHlwZSwgaW50ZXJnZXJSYW5nZT4+
KHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJk
TW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsK
K30KIAotICAgIGNhc2UgSWRlbnRUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50
UmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdl
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlcmdlclJhbmdl
PiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyVHlwZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQoreworICAgIHJldHVybiBjb25z
dW1lTWV0YUNvbnN1bWVyPEludGVnZXJUeXBlQ29uc3VtZXI8SW50VHlwZSwgaW50ZXJnZXJSYW5n
ZT4+KHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5k
YXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlk
LCBwb29sKTsKK30KIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KK3N0ZDo6
b3B0aW9uYWw8aW50PiBjb25zdW1lSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PGludCwgSW50ZWdlclJhbmdl
OjpBbGw+KHJhbmdlKTsKK30KIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CitSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
KQoreworICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGU8aW50LCBJbnRlZ2VyUmFuZ2U6OkFs
bD4ocmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogfQogCi1zdGF0aWMgc3RkOjpv
cHRpb25hbDxkb3VibGU+IGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpCitzdGQ6Om9wdGlvbmFsPGlu
dD4gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKIHsKLSAgICBhdXRvIGNvbXB1dGVEZWdyZWVzID0gW10oYXV0byBhbmdsZVJhdykgLT4g
c3RkOjpvcHRpb25hbDxkb3VibGU+IHsKLSAgICAgICAgaWYgKGFuZ2xlUmF3KQotICAgICAgICAg
ICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZVJhdy0+dHlw
ZSwgYW5nbGVSYXctPnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9
OworICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVSYXc8aW50LCBJbnRlZ2VyUmFuZ2U6Olpl
cm9BbmRHcmVhdGVyPihyYW5nZSk7Cit9CiAKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWso
KTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRl
cihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUludGVn
ZXJUeXBlPGludCwgSW50ZWdlclJhbmdlOjpaZXJvQW5kR3JlYXRlcj4ocmFuZ2UsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkpOworfQogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAg
ICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIGlmIChhdXRvIGFuZ2xlUmF3ID0gY29uc3Vt
ZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5n
ZTo6QWxsLCBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1
aXJrOjpGb3JiaWQpKQotICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVEZWdyZWVzKGFuZ2xlUmF3
KTsKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwpOwotICAgIAotICAgIGNhc2UgRGltZW5z
aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb21wdXRlRGVncmVlcyhjb25zdW1lQW5nbGVSYXdX
aXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBw
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3Ji
aWQpKTsKLSAgICAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3Vt
ZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdl
OjpBbGwpOworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY29uc3VtZVBvc2l0aXZlSW50ZWdlclJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUludGVn
ZXJUeXBlUmF3PHVuc2lnbmVkLCBJbnRlZ2VyUmFuZ2U6Ok9uZUFuZEdyZWF0ZXI+KHJhbmdlKTsK
K30KIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KK1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlPHVuc2lnbmVkLCBJbnRlZ2Vy
UmFuZ2U6Ok9uZUFuZEdyZWF0ZXI+KHJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
K30KIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CitzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4g
Y29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2
YWx1ZVJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPE51bWJlclJhd0Nv
bnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRh
cmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQp
OwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVBbmdsZVJhd09yTnVt
YmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBDU1NQYXJzZXJNb2RlIHBh
cnNlck1vZGUpCitzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1bWVOdW1iZXJB
bGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0
IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9
IFZhbHVlUmFuZ2U6OkFsbCkKIHsKLSAgICBhdXRvIGNvbXB1dGVEZWdyZWVzID0gW10oYXV0byBh
bmdsZVJhdykgLT4gc3RkOjpvcHRpb25hbDxkb3VibGU+IHsKLSAgICAgICAgaWYgKGFuZ2xlUmF3
KQotICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhh
bmdsZVJhdy0+dHlwZSwgYW5nbGVSYXctPnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLSAgICB9OworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPE51bWJlclJhd0Fs
bG93aW5nU3ltYm9sVGFibGVJZGVudENvbnN1bWVyPihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVl
UmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZv
cmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7Cit9CiAKLSAgICBhdXRvJiB0b2tlbiA9
IHJhbmdlLnBlZWsoKTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQoreworICAg
IHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPE51bWJlckNvbnN1bWVyPihyYW5nZSwgeyB9LCB2
YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJr
OjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkpOworfQogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0
aW9uVG9rZW46Ci0gICAgICAgIGlmIChhdXRvIGFuZ2xlUmF3ID0gY29uc3VtZUFuZ2xlUmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpB
bGwsIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6
OkZvcmJpZCkpCi0gICAgICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoYW5nbGVSYXcpOwot
ICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9u
KHJhbmdlLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsKTsKLSAgICAKLSAgICBjYXNlIERp
bWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoY29uc3VtZUFuZ2xl
UmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFs
bCwgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6
Rm9yYmlkKSk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNv
bnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgVmFsdWVS
YW5nZTo6QWxsKTsKK3N0ZDo6b3B0aW9uYWw8UGVyY2VudFJhdz4gY29uc3VtZVBlcmNlbnRSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKK3sKKyAg
ICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxQZXJjZW50UmF3Q29uc3VtZXI+KHJhbmdlLCB7
IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNz
UXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7Cit9CiAKLSAgICBjYXNl
IElkZW50VG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0
KHRva2VuLmlkKCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7Ci0g
ICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgotICAgICAgICAgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1JBRDoKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19H
UkFEOgotICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAgICAg
ICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKHZhcmlhYmxlLT50eXBl
LCB2YXJpYWJsZS0+dmFsdWUpOworc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGVyY2VudFJhdz4gY29u
c3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFD
b25zdW1lcjxQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3VtZXI+KHJhbmdl
LCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9k
ZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30K
IAotICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKLSAgICAgICAgICAg
ICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAg
IHJldHVybiB2YXJpYWJsZS0+dmFsdWU7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFu
Z2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50V29ya2VyU2FmZShyYW5nZSwgdmFsdWVS
YW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CiAKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50V29y
a2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdl
LCBDU1NWYWx1ZVBvb2wmIHBvb2wpCit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8
UGVyY2VudENvbnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpI
VE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJr
OjpGb3JiaWQsIHBvb2wpOworfQogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQorc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQoreworICAgIHJldHVybiBjb25zdW1lTWV0
YUNvbnN1bWVyPExlbmd0aFJhd0NvbnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7Cit9CiAKLSAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVu
Z3RoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBy
ZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxMZW5ndGhDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFs
dWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQs
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogfQogCi0vLyBNQVJLOiAtIENvbWJpbmF0aW9u
IGNvbnN1bWVycyB3aXRoIHRyYW5zZm9ybWF0aW9ucyBiYXNlZCBvbiByZXN1bHQgdHlwZS4KK3N0
ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNz
LCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCit7CisgICAgcmV0dXJuIGNvbnN1bWVN
ZXRhQ29uc3VtZXI8QW5nbGVSYXdDb25zdW1lcj4ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxs
LCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKK30KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgTnVtYmVyVHJhbnNmb3JtZXIsIHR5cGVuYW1lIFBlcmNlbnRUcmFuc2Zvcm1lcj4KLXN0
YXRpYyBhdXRvIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgTnVtYmVyVHJhbnNmb3JtZXImJiBudW1i
ZXJUcmFuc2Zvcm1lciwgUGVyY2VudFRyYW5zZm9ybWVyJiYgcGVyY2VudFRyYW5zZm9ybWVyKSAt
PiBzdGQ6Om9wdGlvbmFsPGRlY2x0eXBlKG51bWJlclRyYW5zZm9ybWVyKHN0ZDo6ZGVjbHZhbDxk
b3VibGU+KCkpKT4KK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKIHsKLSAgICBj
b25zdCBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICByZXR1cm4gY29uc3VtZUFuZ2xl
V29ya2VyU2FmZShyYW5nZSwgcGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7Cit9CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkg
ewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewotICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBj
b25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFs
dWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVtYmVyVHJhbnNmb3JtZXIoKm51bWJlcik7
Ci0gICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRv
a2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpKQotICAgICAgICAgICAgcmV0
dXJuIHBlcmNlbnRUcmFuc2Zvcm1lcigqcGVyY2VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
K1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlV29ya2VyU2FmZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBDU1NWYWx1ZVBv
b2wmIHBvb2wsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRs
ZXNzWmVybykKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxBbmdsZUNvbnN1bWVy
PihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0
bGVzc1plcm8sIHBvb2wpOworfQogCi0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Ci0gICAgICAg
IGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBl
cmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gcGVy
Y2VudFRyYW5zZm9ybWVyKCpwZXJjZW50KTsKLSAgICAgICAgYnJlYWs7CitSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQ
YXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcykKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxUaW1lQ29uc3Vt
ZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVz
c1plcm9RdWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK30KIAotICAg
IGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1i
ZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVtYmVyVHJhbnNmb3JtZXIoKm51bWJlcik7Ci0gICAgICAgIGJy
ZWFrOworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUmVzb2x1dGlvbihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxS
ZXNvbHV0aW9uQ29uc3VtZXI+KHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgQ1NTUGFyc2Vy
TW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1pl
cm9RdWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK30KIAotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVPclBlcmNlbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9R
dWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkpCit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8QW5nbGVPclBlcmNl
bnRDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IHVuaXRsZXNzWmVybywgcG9vbCk7CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
Y29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKQorc3Rk
OjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQogewotICAgIHJldHVy
biBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3KHJhbmdlLCB2YWx1ZVJhbmdlLCBbXShkb3Vi
bGUgbnVtYmVyKSB7IHJldHVybiBudW1iZXI7IH0sIFtdKGRvdWJsZSBwZXJjZW50KSB7IHJldHVy
biBwZXJjZW50IC8gMTAwLjA7IH0pOworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPExl
bmd0aE9yUGVyY2VudFJhd0NvbnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJN
b2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiB9CiAKLS8vIE1BUks6
IC0gQ29tYmluYXRpb24gY29uc3VtZXJzIHRoYXQgYm90aCBhbGxvdyBsb29rdXAgaW4gdGhlIHN5
bWJvbCB0YWJsZSBmb3IgSWRlbnRUb2tlbnMgYW5kIHRyYW5zZm9ybWF0aW9ucyBiYXNlZCBvbiBy
ZXN1bHQgdHlwZS4KLQotdGVtcGxhdGU8dHlwZW5hbWUgTnVtYmVyVHJhbnNmb3JtZXIsIHR5cGVu
YW1lIFBlcmNlbnRUcmFuc2Zvcm1lcj4KLXN0YXRpYyBhdXRvIGNvbnN1bWVOdW1iZXJSYXdPclBl
cmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSwgTnVtYmVyVHJhbnNmb3JtZXImJiBudW1iZXJUcmFuc2Zvcm1lciwgUGVyY2VudFRy
YW5zZm9ybWVyJiYgcGVyY2VudFRyYW5zZm9ybWVyKSAtPiBzdGQ6Om9wdGlvbmFsPGRlY2x0eXBl
KG51bWJlclRyYW5zZm9ybWVyKHN0ZDo6ZGVjbHZhbDxkb3VibGU+KCkpKT4KKy8vIEZJWE1FOiBU
aGlzIGRvZXNuJ3Qgd29yayB3aXRoIHRoZSBjdXJyZW50IHNjaGVtZSBkdWUgdG8gdGhlIE5lZ2F0
aXZlUGVyY2VudGFnZVBvbGljeSBwYXJhbWV0ZXIKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsg
dW5pdGxlc3MsIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xp
Y3kpCiB7CiAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAKICAgICBzd2l0Y2ggKHRv
a2VuLnR5cGUoKSkgewogICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewotICAgICAgICBpZiAoYXV0
byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFu
Z2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBudW1iZXJU
cmFuc2Zvcm1lcigqbnVtYmVyKTsKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQ
ZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHN5bWJvbFRhYmxlLCB2
YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBwZXJjZW50VHJhbnNmb3JtZXIoKnBlcmNl
bnQpOworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgdXNpbmcgdHJ5aW5nIHRvIGdl
bmVyYXRlIHRoZSBjYWxjIHdpdGggYm90aCBMZW5ndGggYW5kIFBlcmNlbnQgZGVzdGluYXRpb24g
Y2F0ZWdvcnkgdHlwZXM/CisgICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UsIHsgfSwgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKSwgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KTsKKyAgICAgICAgaWYgKGF1dG8gY2Fs
Y3VsYXRpb24gPSBwYXJzZXIudmFsdWUoKTsgY2FsY3VsYXRpb24gJiYgY2FuQ29uc3VtZUNhbGNW
YWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgcGFyc2VyTW9kZSkpCisgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1
bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgc3ltYm9sVGFi
bGUsIHZhbHVlUmFuZ2UpKQotICAgICAgICAgICAgcmV0dXJuIHBlcmNlbnRUcmFuc2Zvcm1lcigq
cGVyY2VudCk7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgRGltZW5zaW9uVG9rZW46CisgICAg
ICAgIHJldHVybiBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFy
c2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkpOwogCiAgICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgaWYgKGF1
dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5n
ZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKQotICAgICAgICAgICAgcmV0dXJuIG51bWJlclRy
YW5zZm9ybWVyKCpudW1iZXIpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIExlbmd0
aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1l
cjo6Y29uc3VtZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywg
VW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAK
LSAgICBjYXNlIElkZW50VG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9s
VGFibGUuZ2V0KHJhbmdlLnBlZWsoKS5pZCgpKSkgewotICAgICAgICAgICAgc3dpdGNoICh2YXJp
YWJsZS0+dHlwZSkgewotICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRB
R0U6Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQ
ZXJjZW50UmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBlcmNlbnRUcmFuc2Zvcm1lcigqdmFsaWRhdGVkVmFsdWUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIFBlcmNlbnRhZ2VU
b2tlbjoKKyAgICAgICAgcmV0dXJuIFBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0
aEtub3duVG9rZW5UeXBlUGVyY2VudENvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCB7IH0sIHZhbHVl
UmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKIAotICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX05VTUJFUjoKLSAgICAgICAgICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9
IHZhbGlkYXRlZE51bWJlclJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuc2Zvcm1lcigqdmFsaWRhdGVkVmFsdWUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERp
dmlkZWRCeTEwMFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlKQordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXI+CitzdGF0aWMgYXV0
byBjb25zdW1lQW5nbGVPck51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
UGFyc2VyTW9kZSBwYXJzZXJNb2RlKSAtPiB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0CiB7
Ci0gICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRh
YmxlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBbXShkb3VibGUgbnVtYmVy
KSB7IHJldHVybiBudW1iZXI7IH0sIFtdKGRvdWJsZSBwZXJjZW50KSB7IHJldHVybiBwZXJjZW50
IC8gMTAwLjA7IH0pOworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPEFuZ2xlT3JOdW1i
ZXJSYXdDb25zdW1lcjxUcmFuc2Zvcm1lcj4+KHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwg
cGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9y
YmlkKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXI+CitzdGF0aWMgYXV0byBj
b25zdW1lQW5nbGVPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwg
Q1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKSAtPiB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0
Cit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8QW5nbGVPck51bWJlclJhd0FsbG93
aW5nU3ltYm9sVGFibGVJZGVudENvbnN1bWVyPFRyYW5zZm9ybWVyPj4ocmFuZ2UsIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwg
VW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYW5z
Zm9ybWVyPgorc3RhdGljIGF1dG8gY29uc3VtZU51bWJlck9yUGVyY2VudFJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxs
KSAtPiB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0Cit7CisgICAgcmV0dXJuIGNvbnN1bWVN
ZXRhQ29uc3VtZXI8TnVtYmVyT3JQZXJjZW50UmF3Q29uc3VtZXI8VHJhbnNmb3JtZXI+PihyYW5n
ZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0
bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUcmFuc2Zvcm1lcj4KK3N0YXRpYyBhdXRvIGNvbnN1bWVOdW1iZXJPclBl
cmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSkgLT4gdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdAoreworICAgIHJldHVybiBj
b25zdW1lTWV0YUNvbnN1bWVyPE51bWJlck9yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJ
ZGVudENvbnN1bWVyPFRyYW5zZm9ybWVyPj4ocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdl
LCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQs
IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOworfQorCisvLyBGSVhNRTogVGhpcyBuZWVkcyBh
IG1vcmUgY2xlYXIgbmFtZSB0byBpbmRpY2F0ZSBpdHMgYmVoYXZpb3Igb2YgZGl2aWRpbmcgcGVy
Y2VudHMgYnkgMTAwIG9ubHkgaWYgYW4gZXhwbGljaXQgcGVyY2VudCB0b2tlbiwgbm90IGlmIGEg
cmVzdWx0IG9mIGEgY2FsYygpLgogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVt
YmVyT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UpCiB7CiAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAKICAgICBzd2l0Y2gg
KHRva2VuLnR5cGUoKSkgewogICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgaWYgKGF1
dG8gdmFsdWUgPSBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkpKQorICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IE51bWJlckNTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1l
KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUs
IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAg
IHJldHVybiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIFBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29uc3VtZShyYW5nZSwgeyB9
LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1
aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkpOwogCiAgICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICBjYXNlIFBlcmNlbnRhZ2VU
b2tlbjogewotICAgICAgICBhdXRvIHZhbHVlID0gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERp
dmlkZWRCeTEwMFJhdyhyYW5nZSwgdmFsdWVSYW5nZSk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKCp2
YWx1ZSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1cm4gTnVtYmVyQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpj
b25zdW1lKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFy
ZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisKKyAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoK
KyAgICAgICAgaWYgKGF1dG8gcGVyY2VudFJhdyA9IFBlcmNlbnRSYXdLbm93blRva2VuVHlwZVBl
cmNlbnRDb25zdW1lcjo6Y29uc3VtZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJN
b2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVy
b1F1aXJrOjpGb3JiaWQpKQorICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlVmFsdWUocGVyY2VudFJhdy0+dmFsdWUgLyAxMDAuMCwgQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpOwogICAgICAgICBicmVhazsKLSAgICB9CisKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0xMjgyLDYgKzEzOTQsOCBAQCBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXJPclBlcmNlbnQoQ1NTUGEKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAorLy8gTUFSSzogLSBOb24tcHJpbWl0aXZlIGNvbnN1bWVycy4KKwogc3RkOjpvcHRp
b25hbDxkb3VibGU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQogewogICAgIC8vIFZhbHVlcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMCBvciBn
cmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMTAwMCBhcmUgcGFyc2UgZXJyb3JzLgpAQCAtMTI5Nywx
NCArMTQxMSwxNCBAQCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1i
ZXJSYXcoQ1NTUGEKICAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewogICAgIGNhc2UgRnVuY3Rp
b25Ub2tlbjogewogICAgICAgICAvLyAiW0ZvciBjYWxjKCldLCB0aGUgdXNlZCB2YWx1ZSByZXN1
bHRpbmcgZnJvbSBhbiBleHByZXNzaW9uIG11c3QgYmUgY2xhbXBlZCB0byB0aGUgcmFuZ2UgYWxs
b3dlZCBpbiB0aGUgdGFyZ2V0IGNvbnRleHQuIgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN1
bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCBWYWx1ZVJh
bmdlOjpBbGwpOworICAgICAgICBhdXRvIHJlc3VsdCA9IE51bWJlclJhd0tub3duVG9rZW5UeXBl
RnVuY3Rpb25Db25zdW1lcjo6Y29uc3VtZShyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIENT
U1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAg
ICAgYnJlYWs7CiAjaWYgIUVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi0gICAgICAgIGlmICghKCpy
ZXN1bHQgPiAwICYmICpyZXN1bHQgPCAxMDAwKSB8fCAhaXNJbnRlZ2VyQW5kRGl2aXNpYmxlQnkx
MDAoKnJlc3VsdCkpCisgICAgICAgIGlmICghKHJlc3VsdC0+dmFsdWUgPiAwICYmIHJlc3VsdC0+
dmFsdWUgPCAxMDAwKSB8fCAhaXNJbnRlZ2VyQW5kRGl2aXNpYmxlQnkxMDAocmVzdWx0LT52YWx1
ZSkpCiAgICAgICAgICAgICBicmVhazsKICNlbmRpZgotICAgICAgICByZXR1cm4gc3RkOjpjbGFt
cCgqcmVzdWx0LCBzdGQ6Om5leHRhZnRlcigwLjAsIDEuMCksIHN0ZDo6bmV4dGFmdGVyKDEwMDAu
MCwgMC4wKSk7CisgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKHJlc3VsdC0+dmFsdWUsIHN0ZDo6
bmV4dGFmdGVyKDAuMCwgMS4wKSwgc3RkOjpuZXh0YWZ0ZXIoMTAwMC4wLCAwLjApKTsKICAgICB9
CiAKICAgICBjYXNlIE51bWJlclRva2VuOiB7CkBAIC0xNDUyLDcgKzE1NjYsNyBAQCBzdGF0aWMg
c3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVPcHRpb25hbEFscGhhKENTU1AKICAgICBpZiAo
IWNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKQogICAgICAgICByZXR1cm4g
MS4wOwogCi0gICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyUmF3T3JQ
ZXJjZW50RGl2aWRlZEJ5MTAwUmF3KHJhbmdlKSkKKyAgICBpZiAoYXV0byBhbHBoYVBhcmFtZXRl
ciA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnRSYXc8TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAw
VHJhbnNmb3JtZXI+KHJhbmdlKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoKmFscGhhUGFy
YW1ldGVyLCAwLjAsIDEuMCk7CiAKICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpAQCAtMTQ2Mywy
NSArMTU3NywzOSBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVPcHRpb25h
bEFscGhhQWxsb3cKICAgICBpZiAoIWNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UocmFu
Z2UpKQogICAgICAgICByZXR1cm4gMS4wOwogCi0gICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIg
PSBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3QWxsb3dpbmdTeW1ib2xU
YWJsZUlkZW50KHJhbmdlLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsKSkKKyAgICBpZiAo
YXV0byBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnRSYXdBbGxvd2luZ1N5
bWJvbFRhYmxlSWRlbnQ8TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXI+KHJh
bmdlLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
Y2xhbXAoKmFscGhhUGFyYW1ldGVyLCAwLjAsIDEuMCk7CiAKICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogfQogCi1zdGF0aWMgdWludDhfdCBub3JtYWxpemVSR0JDb21wb25lbnROdW1iZXIoZG91
YmxlIHZhbHVlKQorc3RhdGljIHVpbnQ4X3Qgbm9ybWFsaXplUkdCQ29tcG9uZW50TnVtYmVyKE51
bWJlclJhdyB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRU
b1NSR0JBQnl0ZSh2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0
VG9TUkdCQUJ5dGUodmFsdWUudmFsdWUpOwogfQogCi1zdGF0aWMgdWludDhfdCBub3JtYWxpemVS
R0JDb21wb25lbnRQZXJjZW50YWdlKGRvdWJsZSB2YWx1ZSkKK3N0YXRpYyB1aW50OF90IG5vcm1h
bGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UoUGVyY2VudFJhdyB2YWx1ZSkKIHsKLSAgICByZXR1
cm4gY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZSh2YWx1ZSAvIDEwMC4wICog
MjU1LjApOworICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRl
KHZhbHVlLnZhbHVlIC8gMTAwLjAgKiAyNTUuMCk7CiB9CiAKK3N0cnVjdCBSR0JOb3JtYWxpemlu
Z1RyYW5zZm9ybWVyIDogUmF3VmFyaWFudFRyYW5zZm9ybWVyQmFzZTxzdGQ6Om9wdGlvbmFsPHVp
bnQ4X3Q+LCBOdW1iZXJPclBlcmNlbnRSYXc+IHsKKyAgICB1c2luZyBSYXdWYXJpYW50VHJhbnNm
b3JtZXJCYXNlPHN0ZDo6b3B0aW9uYWw8dWludDhfdD4sIE51bWJlck9yUGVyY2VudFJhdz46OnRy
YW5zZm9ybTsKKworICAgIHN0YXRpYyB1aW50OF90IHRyYW5zZm9ybShOdW1iZXJSYXcgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gbm9ybWFsaXplUkdCQ29tcG9uZW50TnVtYmVyKHZhbHVl
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdWludDhfdCB0cmFuc2Zvcm0oUGVyY2VudFJhdyB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub3JtYWxpemVSR0JDb21wb25lbnRQZXJjZW50YWdl
KHZhbHVlKTsKKyAgICB9Cit9OworCiBzdGF0aWMgc3RkOjpvcHRpb25hbDx1aW50OF90PiBjb25z
dW1lUmVsYXRpdmVSR0JDb21wb25lbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0
IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCiB7Ci0gICAgcmV0dXJuIGNvbnN1bWVO
dW1iZXJSYXdPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQocmFuZ2UsIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlOjpBbGwsIG5vcm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlciwgbm9y
bWFsaXplUkdCQ29tcG9uZW50UGVyY2VudGFnZSk7CisgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJP
clBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQ8UkdCTm9ybWFsaXppbmdUcmFuc2Zv
cm1lcj4ocmFuZ2UsIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpBbGwpOwogfQogCiBlbnVtIGNs
YXNzIFJHQkNvbXBvbmVudFR5cGUgeyBOdW1iZXIsIFBlcmNlbnRhZ2UgfTsKQEAgLTE0ODksOSAr
MTYxNyw5IEBAIHN0YXRpYyB1aW50OF90IGNsYW1wUkdCQ29tcG9uZW50KGRvdWJsZSB2YWx1ZSwg
UkdCQ29tcAogewogICAgIHN3aXRjaCAoY29tcG9uZW50VHlwZSkgewogICAgIGNhc2UgUkdCQ29t
cG9uZW50VHlwZTo6TnVtYmVyOgotICAgICAgICByZXR1cm4gbm9ybWFsaXplUkdCQ29tcG9uZW50
TnVtYmVyKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJHQkNvbXBvbmVudE51bWJl
cih7IHZhbHVlIH0pOwogICAgIGNhc2UgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZToKLSAg
ICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UodmFsdWUpOworICAg
ICAgICByZXR1cm4gbm9ybWFsaXplUkdCQ29tcG9uZW50UGVyY2VudGFnZSh7IHZhbHVlIH0pOwog
ICAgIH0KICAgICAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE1MTksNyArMTY0Nyw3
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVJHQk9ySFNMT3B0aW9uYWxB
bAogICAgIGlmICghY29uc3VtZVJHQk9ySFNMQWxwaGFTZXBhcmF0b3IoYXJncywgc3ludGF4KSkK
ICAgICAgICAgcmV0dXJuIDEuMDsKIAotICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJj
ZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOworICAgIHJldHVybiBjb25zdW1lTnVtYmVyT3JQZXJj
ZW50UmF3PE51bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFRyYW5zZm9ybWVyPihhcmdzKTsKIH0K
IAogc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2Vu
UmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCkBAIC0xNTczLDE4
ICsxNzAxLDIyIEBAIHN0YXRpYyBDb2xvciBwYXJzZU5vblJlbGF0aXZlUkdCUGFyYW1ldGVycyhD
U1NQYXJzZXJUbwogCiAgICAgYXV0byBjb25zdW1lSW5pdGlhbENvbXBvbmVudCA9IFtdKGF1dG8m
IGFyZ3MpIC0+IHN0ZDo6b3B0aW9uYWw8SW5pdGlhbENvbXBvbmVudD4gewogICAgICAgICBpZiAo
YXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpKQotICAgICAgICAgICAgcmV0dXJu
IHsgeyAqbnVtYmVyLCBSR0JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSB9OworICAgICAgICAgICAg
cmV0dXJuIHsgeyBudW1iZXItPnZhbHVlLCBSR0JDb21wb25lbnRUeXBlOjpOdW1iZXIgfSB9Owog
ICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncykpCi0gICAg
ICAgICAgICByZXR1cm4geyB7ICpwZXJjZW50LCBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdl
IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgcGVyY2VudC0+dmFsdWUsIFJHQkNvbXBvbmVu
dFR5cGU6OlBlcmNlbnRhZ2UgfSB9OwogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH07CiAKLSAgICBhdXRvIGNvbnN1bWVDb21wb25lbnQgPSBbXShhdXRvJiBhcmdzLCBhdXRvIGNv
bXBvbmVudFR5cGUpIHsKKyAgICBhdXRvIGNvbnN1bWVDb21wb25lbnQgPSBbXShhdXRvJiBhcmdz
LCBhdXRvIGNvbXBvbmVudFR5cGUpIC0+IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB7CiAgICAgICAg
IHN3aXRjaCAoY29tcG9uZW50VHlwZSkgewogICAgICAgICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6
OlBlcmNlbnRhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7
CisgICAgICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHBlcmNlbnQtPnZhbHVlOworICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgY2FzZSBSR0JDb21wb25lbnRUeXBlOjpOdW1iZXI6
Ci0gICAgICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKKyAgICAgICAgICAg
IGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bWJlci0+dmFsdWU7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fTsKQEAgLTE2NjgsNyArMTgwMCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFNMUGFy
YW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAgICAgICB7IENTU1ZhbHVlQWxwaGEsIENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0hTTC5hbHBoYSAqIDEwMC4wIH0KICAg
ICB9OwogCi0gICAgYXV0byBodWUgPSBjb25zdW1lQW5nbGVSYXdPck51bWJlclJhd0FsbG93aW5n
U3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSwgY29udGV4dC5tb2RlKTsKKyAgICBh
dXRvIGh1ZSA9IGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50
PEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lcj4oYXJncywgc3ltYm9sVGFibGUs
IGNvbnRleHQubW9kZSk7CiAgICAgaWYgKCFodWUpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAg
LTE2ODcsMTIgKzE4MTksMTIgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0
ZXJzKENTU1BhcnNlclRva2VuCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICByZXR1cm4gY29sb3JCeU5vcm1hbGl6aW5nSFNMQ29tcG9uZW50cygqaHVl
LCAqc2F0dXJhdGlvbiwgKmxpZ2h0bmVzcywgKmFscGhhKTsKKyAgICByZXR1cm4gY29sb3JCeU5v
cm1hbGl6aW5nSFNMQ29tcG9uZW50cygqaHVlLCBzYXR1cmF0aW9uLT52YWx1ZSwgbGlnaHRuZXNz
LT52YWx1ZSwgKmFscGhhKTsKIH0KIAogc3RhdGljIENvbG9yIHBhcnNlTm9uUmVsYXRpdmVIU0xQ
YXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmIGNvbnRleHQpCiB7Ci0gICAgYXV0byBodWUgPSBjb25zdW1lQW5nbGVSYXdPck51bWJlclJh
dyhhcmdzLCBjb250ZXh0Lm1vZGUpOworICAgIGF1dG8gaHVlID0gY29uc3VtZUFuZ2xlT3JOdW1i
ZXJSYXc8QW5nbGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5zZm9ybWVyPihhcmdzLCBjb250ZXh0
Lm1vZGUpOwogICAgIGlmICghaHVlKQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0xNzE2LDcg
KzE4NDgsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VOb25SZWxhdGl2ZUhTTFBhcmFtZXRlcnMoQ1NT
UGFyc2VyVG8KICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIHJldHVybiBjb2xvckJ5Tm9ybWFsaXppbmdIU0xDb21wb25lbnRzKCpodWUsICpzYXR1cmF0
aW9uLCAqbGlnaHRuZXNzLCAqYWxwaGEpOworICAgIHJldHVybiBjb2xvckJ5Tm9ybWFsaXppbmdI
U0xDb21wb25lbnRzKCpodWUsIHNhdHVyYXRpb24tPnZhbHVlLCBsaWdodG5lc3MtPnZhbHVlLCAq
YWxwaGEpOwogfQogCiBlbnVtIGNsYXNzIEhTTEZ1bmN0aW9uTW9kZSB7IEhTTCwgSFNMQSB9OwpA
QCAtMTc1Nyw3ICsxODg5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlSFdCUGFyYW1ldGVycyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiBhCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBhdXRvIG5vcm1h
bGl6ZWRIdWUgPSBub3JtYWxpemVIdWUoKmh1ZSk7Ci0gICAgYXV0byBbbm9ybWFsaXplZFdoaXRu
ZXNzLCBub3JtYWxpemVkQmxhY2tuZXNzXSA9IG5vcm1hbGl6ZVdoaXRlbmVzc0JsYWNrbmVzcygq
d2hpdGVuZXNzLCAqYmxhY2tuZXNzKTsKKyAgICBhdXRvIFtub3JtYWxpemVkV2hpdG5lc3MsIG5v
cm1hbGl6ZWRCbGFja25lc3NdID0gbm9ybWFsaXplV2hpdGVuZXNzQmxhY2tuZXNzKHdoaXRlbmVz
cy0+dmFsdWUsIGJsYWNrbmVzcy0+dmFsdWUpOwogCiAgICAgLy8gTk9URTogVGhlIGV4cGxpY2l0
IGNvbnZlcnNpb24gdG8gU1JHQkE8dWludDhfdD4gaXMgaW50ZW50aW9uYWwgZm9yIHBlcmZvcm1h
bmNlIChubyBleHRyYSBhbGxvY2F0aW9uIGZvcgogICAgIC8vIHRoZSBleHRlbmRlZCBjb2xvcikg
YW5kIGNvbXBhdGFiaWxpdHksIGZvcmNpbmcgc2VyaWFsaWF6YXRpb24gdG8gdXNlIHRoZSByZ2Io
KS9yZ2JhKCkgZm9ybS4KQEAgLTE3ODIsNyArMTkxNCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJl
bGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAgICAgICB7IENTU1ZhbHVlQWxw
aGEsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0hXQi5hbHBoYSAq
IDEwMC4wIH0KICAgICB9OwogCi0gICAgYXV0byBodWVDb25zdW1lciA9IFsmc3ltYm9sVGFibGUs
ICZjb250ZXh0XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVSYXdPck51bWJlclJh
d0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSwgY29udGV4dC5tb2Rl
KTsgfTsKKyAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZzeW1ib2xUYWJsZSwgJmNvbnRleHRdKGF1
dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xU
YWJsZUlkZW50PEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lcj4oYXJncywgc3lt
Ym9sVGFibGUsIGNvbnRleHQubW9kZSk7IH07CiAgICAgYXV0byB3aGl0ZW5lc3NBbmRCbGFja25l
c3NDb25zdW1lciA9IFsmc3ltYm9sVGFibGVdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVQ
ZXJjZW50QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsgfTsKICAg
ICBhdXRvIGFscGhhQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJldHVy
biBjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1i
b2xUYWJsZSk7IH07CiAKQEAgLTE3OTEsNyArMTkyMyw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJl
bGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogCiBzdGF0aWMgQ29sb3IgcGFyc2VO
b25SZWxhdGl2ZUhXQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZj
b250ZXh0XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVSYXdPck51bWJlclJhdyhh
cmdzLCBjb250ZXh0Lm1vZGUpOyB9OworICAgIGF1dG8gaHVlQ29uc3VtZXIgPSBbJmNvbnRleHRd
KGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3PEFuZ2xlT3JOdW1i
ZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lcj4oYXJncywgY29udGV4dC5tb2RlKTsgfTsKICAgICBh
dXRvIHdoaXRlbmVzc0FuZEJsYWNrbmVzc0NvbnN1bWVyID0gW10oYXV0byYgYXJncykgeyByZXR1
cm4gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7IH07CiAgICAgYXV0byBhbHBoYUNvbnN1bWVyID0g
W10oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU9wdGlvbmFsQWxwaGEoYXJncyk7IH07CiAK
QEAgLTE4MzQsOSArMTk2Niw5IEBAIHN0YXRpYyBDb2xvciBwYXJzZUxhYlBhcmFtZXRlcnMoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgYQogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgYXV0byBub3JtYWxpemVkTGlnaHRuZXNzID0gc3RkOjptYXgoMC4wLCAq
bGlnaHRuZXNzKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRMaWdodG5lc3MgPSBzdGQ6Om1heCgwLjAs
IGxpZ2h0bmVzcy0+dmFsdWUpOwogCi0gICAgcmV0dXJuIENvbG9yVHlwZSB7IHN0YXRpY19jYXN0
PGZsb2F0Pihub3JtYWxpemVkTGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphVmFsdWUp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oKmJWYWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEp
IH07CisgICAgcmV0dXJuIENvbG9yVHlwZSB7IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVk
TGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFWYWx1ZS0+dmFsdWUpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oYlZhbHVlLT52YWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4KQEAgLTE5MTIsOCArMjA0NCw4IEBAIHN0
YXRpYyBDb2xvciBwYXJzZUxDSFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYQogICAg
IGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgYXV0byBub3Jt
YWxpemVkTGlnaHRuZXNzID0gc3RkOjptYXgoMC4wLCAqbGlnaHRuZXNzKTsKLSAgICBhdXRvIG5v
cm1hbGl6ZWRDaHJvbWEgPSBzdGQ6Om1heCgwLjAsICpjaHJvbWEpOworICAgIGF1dG8gbm9ybWFs
aXplZExpZ2h0bmVzcyA9IHN0ZDo6bWF4KDAuMCwgbGlnaHRuZXNzLT52YWx1ZSk7CisgICAgYXV0
byBub3JtYWxpemVkQ2hyb21hID0gc3RkOjptYXgoMC4wLCBjaHJvbWEtPnZhbHVlKTsKICAgICBh
dXRvIG5vcm1hbGl6ZWRIdWUgPSBub3JtYWxpemVIdWUoKmh1ZSk7CiAKICAgICByZXR1cm4gQ29s
b3JUeXBlIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRMaWdodG5lc3MpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4obm9ybWFsaXplZENocm9tYSksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxp
emVkSHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfTsKQEAgLTE5NDAsNyArMjA3Miw3
IEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tl
bgogCiAgICAgYXV0byBsaWdodG5lc3NDb25zdW1lciA9IFsmc3ltYm9sVGFibGVdKGF1dG8mIGFy
Z3MpIHsgcmV0dXJuIGNvbnN1bWVQZXJjZW50QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3Ms
IHN5bWJvbFRhYmxlKTsgfTsKICAgICBhdXRvIGNocm9tYUNvbnN1bWVyID0gWyZzeW1ib2xUYWJs
ZV0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU51bWJlckFsbG93aW5nU3ltYm9sVGFibGVJ
ZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7IH07Ci0gICAgYXV0byBodWVDb25zdW1lciA9IFsmc3lt
Ym9sVGFibGUsICZjb250ZXh0XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVSYXdP
ck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSwgY29u
dGV4dC5tb2RlKTsgfTsKKyAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZzeW1ib2xUYWJsZSwgJmNv
bnRleHRdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3QWxsb3dp
bmdTeW1ib2xUYWJsZUlkZW50PEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lcj4o
YXJncywgc3ltYm9sVGFibGUsIGNvbnRleHQubW9kZSk7IH07CiAgICAgYXV0byBhbHBoYUNvbnN1
bWVyID0gWyZzeW1ib2xUYWJsZV0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU9wdGlvbmFs
QWxwaGFBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOyB9OwogCiAg
ICAgcmV0dXJuIHBhcnNlTENIUGFyYW1ldGVyczxDb2xvclR5cGU+KGFyZ3MsIFdURk1vdmUobGln
aHRuZXNzQ29uc3VtZXIpLCBXVEZNb3ZlKGNocm9tYUNvbnN1bWVyKSwgV1RGTW92ZShodWVDb25z
dW1lciksIFdURk1vdmUoYWxwaGFDb25zdW1lcikpOwpAQCAtMTk1MSw3ICsyMDgzLDcgQEAgc3Rh
dGljIENvbG9yIHBhcnNlTm9uUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKENTU1BhcnNlclRvCiB7CiAg
ICAgYXV0byBsaWdodG5lc3NDb25zdW1lciA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1
bWVQZXJjZW50UmF3KGFyZ3MpOyB9OwogICAgIGF1dG8gY2hyb21hQ29uc3VtZXIgPSBbXShhdXRv
JiBhcmdzKSB7IHJldHVybiBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOyB9OwotICAgIGF1dG8gaHVl
Q29uc3VtZXIgPSBbJmNvbnRleHRdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVBbmdsZVJh
d09yTnVtYmVyUmF3KGFyZ3MsIGNvbnRleHQubW9kZSk7IH07CisgICAgYXV0byBodWVDb25zdW1l
ciA9IFsmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFuZ2xlT3JOdW1iZXJS
YXc8QW5nbGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5zZm9ybWVyPihhcmdzLCBjb250ZXh0Lm1v
ZGUpOyB9OwogICAgIGF1dG8gYWxwaGFDb25zdW1lciA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJu
IGNvbnN1bWVPcHRpb25hbEFscGhhKGFyZ3MpOyB9OwogCiAgICAgcmV0dXJuIHBhcnNlTENIUGFy
YW1ldGVyczxDb2xvclR5cGU+KGFyZ3MsIFdURk1vdmUobGlnaHRuZXNzQ29uc3VtZXIpLCBXVEZN
b3ZlKGNocm9tYUNvbnN1bWVyKSwgV1RGTW92ZShodWVDb25zdW1lciksIFdURk1vdmUoYWxwaGFD
b25zdW1lcikpOwpAQCAtMjAxNiw3ICsyMTQ4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JU
eXBlPiBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2CiAgICAgICAgIHsgQ1NTVmFsdWVBbHBoYSwg
Q1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzQ29sb3JUeXBlLmFscGhh
ICogMTAwLjAgfQogICAgIH07CiAKLSAgICBhdXRvIGNvbnN1bWVSR0IgPSBbJnN5bWJvbFRhYmxl
XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5
MTAwUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlLCBWYWx1ZVJh
bmdlOjpBbGwpOyB9OworICAgIGF1dG8gY29uc3VtZVJHQiA9IFsmc3ltYm9sVGFibGVdKGF1dG8m
IGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRh
YmxlSWRlbnQ8TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXI+KGFyZ3MsIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpBbGwpOyB9OwogICAgIGF1dG8gY29uc3VtZUFscGhhID0g
WyZzeW1ib2xUYWJsZV0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU9wdGlvbmFsQWxwaGFB
bGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOyB9OwogCiAgICAgcmV0
dXJuIHBhcnNlQ29sb3JGdW5jdGlvbkZvclJHQlR5cGVzPENvbG9yVHlwZT4oYXJncywgV1RGTW92
ZShjb25zdW1lUkdCKSwgV1RGTW92ZShjb25zdW1lQWxwaGEpKTsKQEAgLTIwMzIsNyArMjE2NCw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIENvbG9yIHBhcnNlQ29sb3JG
dQogCiAgICAgY29uc3VtZUlkZW50UmF3KGFyZ3MpOwogCi0gICAgYXV0byBjb25zdW1lUkdCID0g
W10oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRC
eTEwMFJhdyhhcmdzKTsgfTsKKyAgICBhdXRvIGNvbnN1bWVSR0IgPSBbXShhdXRvJiBhcmdzKSB7
IHJldHVybiBjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3PE51bWJlck9yUGVyY2VudERpdmlkZWRC
eTEwMFRyYW5zZm9ybWVyPihhcmdzKTsgfTsKICAgICBhdXRvIGNvbnN1bWVBbHBoYSA9IFtdKGF1
dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVPcHRpb25hbEFscGhhKGFyZ3MpOyB9OwogCiAgICAg
cmV0dXJuIHBhcnNlQ29sb3JGdW5jdGlvbkZvclJHQlR5cGVzPENvbG9yVHlwZT4oYXJncywgV1RG
TW92ZShjb25zdW1lUkdCKSwgV1RGTW92ZShjb25zdW1lQWxwaGEpKTsKQEAgLTIwNDYsNyArMjE3
OCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JYWVpUeXBlcyhDU1NQYXJz
ZXJUbwogICAgICAgICBhdXRvIHZhbHVlID0geHl6Q29uc3VtZXIoYXJncyk7CiAgICAgICAgIGlm
ICghdmFsdWUpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2hhbm5lbCA9ICp2YWx1ZTsK
KyAgICAgICAgY2hhbm5lbCA9IHZhbHVlLT52YWx1ZTsKICAgICB9CiAKICAgICBhdXRvIGFscGhh
ID0gYWxwaGFDb25zdW1lcihhcmdzKTsKQEAgLTIyNDQsMTMgKzIzNzYsMTMgQEAgc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JDb250cmFzdEZ1bmN0aW9uUGFyYW1ldGVycyhDU1NQCiAgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBpZiAoY29uc3VtZWRUbykgewotICAgICAgICBhdXRvIHRhcmdldENv
bnRyYXN0ID0gWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB7CisgICAgICAgIGF1dG8g
dGFyZ2V0Q29udHJhc3QgPSBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IHsKICAg
ICAgICAgICAgIGlmIChhcmdzLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbikgewotICAgICAg
ICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpwYWlyPENTU1ZhbHVlSUQsIGRvdWJsZT4g
dGFyZ2V0Q29udHJhc3RNYXBwaW5nc1tdIHsKLSAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1
ZUFBLCA0LjUgfSwKLSAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFBTGFyZ2UsIDMuMCB9
LAotICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUFBLCA3LjAgfSwKLSAgICAgICAgICAg
ICAgICAgICAgeyBDU1NWYWx1ZUFBQUxhcmdlLCA0LjUgfSwKKyAgICAgICAgICAgICAgICBzdGF0
aWMgY29uc3RleHByIHN0ZDo6cGFpcjxDU1NWYWx1ZUlELCBOdW1iZXJSYXc+IHRhcmdldENvbnRy
YXN0TWFwcGluZ3NbXSB7CisgICAgICAgICAgICAgICAgICAgIHsgQ1NTVmFsdWVBQSwgTnVtYmVy
UmF3IHsgNC41IH0gfSwKKyAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFBTGFyZ2UsIE51
bWJlclJhdyB7IDMuMCB9IH0sCisgICAgICAgICAgICAgICAgICAgIHsgQ1NTVmFsdWVBQUEsIE51
bWJlclJhdyB7IDcuMCB9IH0sCisgICAgICAgICAgICAgICAgICAgIHsgQ1NTVmFsdWVBQUFMYXJn
ZSwgTnVtYmVyUmF3IHsgNC41IH0gfSwKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgU29ydGVkQXJyYXlNYXAgdGFyZ2V0Q29udHJhc3RNYXAgeyB0
YXJnZXRDb250cmFzdE1hcHBpbmdzIH07CiAgICAgICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHRh
cmdldENvbnRyYXN0TWFwLnRyeUdldChhcmdzLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCku
aWQoKSk7CkBAIC0yMjYzLDcgKzIzOTUsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckNvbnRy
YXN0RnVuY3Rpb25QYXJhbWV0ZXJzKENTU1AKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAg
ICAgIAogICAgICAgICAvLyBXaGVuIGEgdGFyZ2V0IGNvbnN0YXN0IGlzIHNwZWNpZmllZCwgd2Ug
c2VsZWN0ICJ0aGUgZmlyc3QgY29sb3IgY29sb3IgdG8gbWVldCBvciBleGNlZWQgdGhlIHRhcmdl
dCBjb250cmFzdC4iCi0gICAgICAgIHJldHVybiBzZWxlY3RGaXJzdENvbG9yVGhhdE1lZXRzT3JF
eGNlZWRzVGFyZ2V0Q29udHJhc3Qob3JpZ2luQmFja2dyb3VuZENvbG9yLCBXVEZNb3ZlKGNvbG9y
c1RvQ29tcGFyZUFnYWluc3QpLCAqdGFyZ2V0Q29udHJhc3QpOworICAgICAgICByZXR1cm4gc2Vs
ZWN0Rmlyc3RDb2xvclRoYXRNZWV0c09yRXhjZWVkc1RhcmdldENvbnRyYXN0KG9yaWdpbkJhY2tn
cm91bmRDb2xvciwgV1RGTW92ZShjb2xvcnNUb0NvbXBhcmVBZ2FpbnN0KSwgdGFyZ2V0Q29udHJh
c3QtPnZhbHVlKTsKICAgICB9CiAKICAgICAvLyBXaGVuIGEgdGFyZ2V0IGNvbnN0YXN0IGlzIE5P
VCBzcGVjaWZpZWQsIHdlIHNlbGVjdCAidGhlIGZpcnN0IGNvbG9yIHdpdGggdGhlIGhpZ2hlc3Qg
Y29udHJhc3QgdG8gdGhlIHNpbmdsZSBjb2xvci4iCkBAIC0yMzY2LDkgKzI0OTgsOSBAQCBzdGF0
aWMgc3RkOjpvcHRpb25hbDxDb2xvck1peENvbXBvbmVudD4gY29uc3VtZUNvbG9yTWkKICAgICBD
b2xvck1peENvbXBvbmVudCByZXN1bHQ7CiAKICAgICBpZiAoYXV0byBwZXJjZW50YWdlID0gY29u
c3VtZVBlcmNlbnRSYXcoYXJncykpIHsKLSAgICAgICAgaWYgKCpwZXJjZW50YWdlIDwgMC4wIHx8
ICpwZXJjZW50YWdlID4gMTAwLjApCisgICAgICAgIGlmIChwZXJjZW50YWdlLT52YWx1ZSA8IDAu
MCB8fCBwZXJjZW50YWdlLT52YWx1ZSA+IDEwMC4wKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgcmVzdWx0LnBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlOworICAgICAgICByZXN1bHQu
cGVyY2VudGFnZSA9IHBlcmNlbnRhZ2UtPnZhbHVlOwogICAgIH0KIAogICAgIHJlc3VsdC5jb2xv
ciA9IGNvbnN1bWVPcmlnaW5Db2xvcihhcmdzLCBjb250ZXh0KTsKQEAgLTIzNzcsOSArMjUwOSw5
IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbG9yTWl4Q29tcG9uZW50PiBjb25zdW1lQ29sb3JN
aQogCiAgICAgaWYgKCFyZXN1bHQucGVyY2VudGFnZSkgewogICAgICAgICBpZiAoYXV0byBwZXJj
ZW50YWdlID0gY29uc3VtZVBlcmNlbnRSYXcoYXJncykpIHsKLSAgICAgICAgICAgIGlmICgqcGVy
Y2VudGFnZSA8IDAuMCB8fCAqcGVyY2VudGFnZSA+IDEwMC4wKQorICAgICAgICAgICAgaWYgKHBl
cmNlbnRhZ2UtPnZhbHVlIDwgMC4wIHx8IHBlcmNlbnRhZ2UtPnZhbHVlID4gMTAwLjApCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIHJlc3VsdC5wZXJjZW50YWdlID0g
cGVyY2VudGFnZTsKKyAgICAgICAgICAgIHJlc3VsdC5wZXJjZW50YWdlID0gcGVyY2VudGFnZS0+
dmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI2NDYsMTEgKzI3NzgsMTEgQEAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ29sb3IoQ1NTUGFyc2VyVG9rZW5SCiAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoY29sb3IpOwogfQogCi1z
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpb25Db21wb25lbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyayB1bml0bGVzcywgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UgPSBmYWxz
ZSkKK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGlvbkNvbXBv
bmVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgbmVnYXRp
dmVQZXJjZW50YWdlUG9saWN5ID0gTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5OjpGb3JiaWQpCiB7
CiAgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbikKICAgICAgICAgcmV0
dXJuIGNvbnN1bWVJZGVudDxDU1NWYWx1ZUxlZnQsIENTU1ZhbHVlVG9wLCBDU1NWYWx1ZUJvdHRv
bSwgQ1NTVmFsdWVSaWdodCwgQ1NTVmFsdWVDZW50ZXI+KHJhbmdlKTsKLSAgICByZXR1cm4gY29u
c3VtZUxlbmd0aE9yUGVyY2VudChyYW5nZSwgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZTo6QWxsLCB1
bml0bGVzcywgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlKTsKKyAgICByZXR1cm4gY29uc3VtZUxl
bmd0aE9yUGVyY2VudChyYW5nZSwgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZTo6QWxsLCB1bml0bGVz
cywgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KTsKIH0KIAogc3RhdGljIGJvb2wgaXNIb3Jpem9u
dGFsUG9zaXRpb25LZXl3b3JkT25seShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCkBA
IC0yNzk5LDIzICsyOTMxLDIxIEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFBvc2l0aW9uQ29vcmRp
bmF0ZXM+IHBvc2l0aW9uRnJvbQogCiAvLyBGSVhNRTogVGhpcyBtYXkgY29uc3VtZSBmcm9tIHRo
ZSByYW5nZSB1cG9uIGZhaWx1cmUuIFRoZSBiYWNrZ3JvdW5kCiAvLyBzaG9ydGhhbmQgd29ya3Mg
YXJvdW5kIGl0LCBidXQgd2Ugc2hvdWxkIGp1c3QgZml4IGl0IGhlcmUuCi1zdGQ6Om9wdGlvbmFs
PFBvc2l0aW9uQ29vcmRpbmF0ZXM+IGNvbnN1bWVQb3NpdGlvbkNvb3JkaW5hdGVzKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmsgdW5pdGxlc3MsIFBvc2l0aW9uU3ludGF4IHBvc2l0aW9uU3ludGF4LCBOZWdhdGl2ZVBlcmNl
bnRhZ2VQb2xpY3kgcG9saWN5KQorc3RkOjpvcHRpb25hbDxQb3NpdGlvbkNvb3JkaW5hdGVzPiBj
b25zdW1lUG9zaXRpb25Db29yZGluYXRlcyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
UGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBQb3NpdGlvblN5
bnRheCBwb3NpdGlvblN5bnRheCwgTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5IG5lZ2F0aXZlUGVy
Y2VudGFnZVBvbGljeSkKIHsKLSAgICBib29sIGFsbG93c05lZ2F0aXZlID0gcG9saWN5ID09IE5l
Z2F0aXZlUGVyY2VudGFnZVBvbGljeTo6QWxsb3c7Ci0KLSAgICBhdXRvIHZhbHVlMSA9IGNvbnN1
bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIGFsbG93c05l
Z2F0aXZlKTsKKyAgICBhdXRvIHZhbHVlMSA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSk7CiAgICAg
aWYgKCF2YWx1ZTEpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHZh
bHVlMiA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxl
c3MsIGFsbG93c05lZ2F0aXZlKTsKKyAgICBhdXRvIHZhbHVlMiA9IGNvbnN1bWVQb3NpdGlvbkNv
bXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIG5lZ2F0aXZlUGVyY2VudGFnZVBv
bGljeSk7CiAgICAgaWYgKCF2YWx1ZTIpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkZyb21PbmVW
YWx1ZSgqdmFsdWUxKTsKICAgICAKLSAgICBhdXRvIHZhbHVlMyA9IGNvbnN1bWVQb3NpdGlvbkNv
bXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIGFsbG93c05lZ2F0aXZlKTsKKyAg
ICBhdXRvIHZhbHVlMyA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgcGFyc2VyTW9k
ZSwgdW5pdGxlc3MsIG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSk7CiAgICAgaWYgKCF2YWx1ZTMp
CiAgICAgICAgIHJldHVybiBwb3NpdGlvbkZyb21Ud29WYWx1ZXMoKnZhbHVlMSwgKnZhbHVlMik7
CiAgICAgCi0gICAgYXV0byB2YWx1ZTQgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2Us
IHBhcnNlck1vZGUsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZSk7CisgICAgYXV0byB2YWx1ZTQg
PSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBu
ZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kpOwogICAgIAogICAgIHN0ZDo6YXJyYXk8Q1NTUHJpbWl0
aXZlVmFsdWUqLCA1PiB2YWx1ZXMgewogICAgICAgICB2YWx1ZTEuZ2V0KCksCkBAIC0yOTE3LDcg
KzMwNDcsNyBAQCBzdGF0aWMgYm9vbCBjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9w
KENTU1BhcnMKICAgICAgICAgcG9zaXRpb24gPSAoaWQgPT0gQ1NTVmFsdWVGcm9tKSA/IDAgOiAx
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChpZCA9PSBDU1NWYWx1ZUNvbG9yU3RvcCk7
Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5
MTAwUmF3KGFyZ3MpOworICAgICAgICBhdXRvIHZhbHVlID0gY29uc3VtZU51bWJlck9yUGVyY2Vu
dFJhdzxOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lcj4oYXJncyk7CiAgICAg
ICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHBvc2l0
aW9uID0gKnZhbHVlOwpAQCAtMzQxNCw3ICszNTQ0LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1
ZT4gY29uc3VtZUNyb3NzRmFkZShDU1NQYXJzZXJUb2tlCiAgICAgaWYgKCF0b0ltYWdlVmFsdWUg
fHwgIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgYXV0byBwZXJjZW50YWdlID0gY29uc3VtZU51bWJlclJhd09yUGVy
Y2VudERpdmlkZWRCeTEwMFJhdyhhcmdzKTsKKyAgICBhdXRvIHBlcmNlbnRhZ2UgPSBjb25zdW1l
TnVtYmVyT3JQZXJjZW50UmF3PE51bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFRyYW5zZm9ybWVy
PihhcmdzKTsKICAgICBpZiAoIXBlcmNlbnRhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVWYWx1ZShjbGFtcFRvPGRvdWJsZT4oKnBlcmNlbnRhZ2UsIDAsIDEpLCBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUik7CkBAIC0zOTUyLDcgKzQwODIsNyBAQCBzdGQ6Om9wdGlvbmFsPExpbmVIZWln
aHRSYXc+IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KENTU1AKICAgICB9CiAKICAgICBpZiAoYXV0byBu
dW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KHJhbmdlLCBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSkp
Ci0gICAgICAgIHJldHVybiB7ICpudW1iZXIgfTsKKyAgICAgICAgcmV0dXJuIHsgbnVtYmVyLT52
YWx1ZSB9OwogCiAgICAgaWYgKGF1dG8gbGVuZ3RoT3JQZXJjZW50ID0gY29uc3VtZUxlbmd0aE9y
UGVyY2VudFJhdyhyYW5nZSwgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpKQog
ICAgICAgICByZXR1cm4geyAqbGVuZ3RoT3JQZXJjZW50IH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgJKHJldmlz
aW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDE0IEBAIGVudW0gY2xhc3Mg
TmVnYXRpdmVQZXJjZW50YWdlUG9saWN5IDogYm9vbCB7IEZvcmJpZCwgQQogZW51bSBjbGFzcyBV
bml0bGVzc1F1aXJrIHsgQWxsb3csIEZvcmJpZCB9OwogZW51bSBjbGFzcyBVbml0bGVzc1plcm9R
dWlyayB7IEFsbG93LCBGb3JiaWQgfTsKIAorc3RydWN0IE51bWJlclJhdyB7CisgICAgZG91Ymxl
IHZhbHVlOworfTsKKworc3RydWN0IFBlcmNlbnRSYXcgeworICAgIGRvdWJsZSB2YWx1ZTsKK307
CisKIHN0cnVjdCBBbmdsZVJhdyB7CiAgICAgQ1NTVW5pdFR5cGUgdHlwZTsKICAgICBkb3VibGUg
dmFsdWU7CkBAIC03NiwxMyArODQsMTcgQEAgc3RydWN0IExlbmd0aFJhdyB7CiAgICAgZG91Ymxl
IHZhbHVlOwogfTsKIAotdXNpbmcgTGVuZ3RoT3JQZXJjZW50UmF3ID0gc3RkOjp2YXJpYW50PExl
bmd0aFJhdywgZG91YmxlPjsKK3VzaW5nIExlbmd0aE9yUGVyY2VudFJhdyA9IHN0ZDo6dmFyaWFu
dDxMZW5ndGhSYXcsIFBlcmNlbnRSYXc+OwordXNpbmcgTnVtYmVyT3JQZXJjZW50UmF3ID0gc3Rk
Ojp2YXJpYW50PE51bWJlclJhdywgUGVyY2VudFJhdz47Cit1c2luZyBBbmdsZU9yTnVtYmVyUmF3
ID0gc3RkOjp2YXJpYW50PEFuZ2xlUmF3LCBOdW1iZXJSYXc+OwogCi1zdGQ6Om9wdGlvbmFsPGlu
dD4gY29uc3VtZUludGVnZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSBtaW5pbXVt
VmFsdWUgPSAtc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7Ci1SZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBkb3Vi
bGUgbWluaW11bVZhbHVlID0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOwor
c3RkOjpvcHRpb25hbDxpbnQ+IGNvbnN1bWVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
KTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYpOworc3RkOjpvcHRpb25hbDxpbnQ+IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0
ZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IGNvbnN1bWVQb3NpdGl2ZUludGVnZXJSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpdmVJbnRl
Z2VyKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1l
TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6
QWxsKTsKK3N0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PiBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKTsKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVS
YW5nZSk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXJPclBlcmNlbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOwogc3RkOjpvcHRpb25hbDxkb3VibGU+
IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKQEAgLTkw
LDExICsxMDIsMTEgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdo
dE51bWJlcihDU1NQCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0
TnVtYmVyV29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVQb29sJik7CiBz
dGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNz
UXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNz
UXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwotc3RkOjpvcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlID0gVmFsdWVS
YW5nZTo6QWxsKTsKK3N0ZDo6b3B0aW9uYWw8UGVyY2VudFJhdz4gY29uc3VtZVBlcmNlbnRSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpOwogUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdl
JiwgVmFsdWVSYW5nZSk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50
V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29s
Jik7CiBzdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9yUGVy
Y2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwg
VW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7Ci1SZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENT
U1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpG
b3JiaWQsIGJvb2wgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlID0gZmFsc2UpOworUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NR
dWlyazo6Rm9yYmlkLCBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgPSBOZWdhdGl2ZVBlcmNlbnRh
Z2VQb2xpY3k6OkZvcmJpZCk7CiBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVS
YXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBV
bml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3NaZXJvUXVp
cms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNz
UXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcmsgPSBVbml0bGVzc1plcm9RdWlyazo6Rm9y
YmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlV29ya2VyU2FmZShD
U1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJiwgVW5pdGxl
c3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcmsgPSBVbml0
bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5jcHAJKHJldmlzaW9u
IDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJX
b3JrZXJTYWZlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQwLDcgKzU0MCw3IEBAIHN0YXRpYyBS
ZWZQdHI8Q1NTRm9udEZlYXR1cmVWYWx1ZT4gY29uc3VtZUZvbnRGZWF0dXJlVAogICAgIGludCB0
YWdWYWx1ZSA9IDE7CiAgICAgaWYgKCFyYW5nZS5hdEVuZCgpICYmIHJhbmdlLnBlZWsoKS50eXBl
KCkgIT0gQ29tbWFUb2tlbikgewogICAgICAgICAvLyBGZWF0dXJlIHRhZyB2YWx1ZXMgY291bGQg
Zm9sbG93OiA8aW50ZWdlcj4gfCBvbiB8IG9mZgotICAgICAgICBpZiAoYXV0byBpbnRlZ2VyID0g
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclJhdyhyYW5nZSwgMCkpCisg
ICAgICAgIGlmIChhdXRvIGludGVnZXIgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXJSYXcocmFuZ2UpKQogICAgICAgICAgICAgdGFnVmFsdWUg
PSAqaW50ZWdlcjsKICAgICAgICAgZWxzZSBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFs
dWVPbiB8fCByYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZU9mZikKICAgICAgICAgICAgIHRh
Z1ZhbHVlID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpID09IENTU1Zh
bHVlT247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JG
b250UmF3LmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw4ICsyMDgsOCBA
QCBzdGQ6Om9wdGlvbmFsPEZvbnRDYXNjYWRlPiByZXNvbHZlRm9yRm9udFJhdyhjb25zdCBGb24K
ICAgICAgICAgICAgIC8vICAgICAgICB0aGF0IGl0J3Mgb2ZmLXNjcmVlbiBhbmQgdGhlcmVmb3Jl
IGRvZXNuJ3Qgc3RyaWN0bHkgaGF2ZSBhbiBhc3NvY2lhdGVkIHZpZXdwb3J0LgogICAgICAgICAg
ICAgLy8gICAgICAgIFRoaXMgbmVlZHMgY2xhcmlmaWNhdGlvbiBhbmQgcG9zc2libHkgZml4aW5n
LgogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZVVuem9vbWVkTm9uQ2FsY0xlbmd0aERvdWJsZShsZW5ndGgudHlwZSwgbGVuZ3Ro
LnZhbHVlLCBDU1NQcm9wZXJ0eUZvbnRTaXplLCAmZm9udENhc2NhZGUuZm9udE1ldHJpY3MoKSwg
JmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpLCAmZm9udENhc2NhZGUuZm9udERlc2NyaXB0
aW9uKCksIGlzPERvY3VtZW50Pihjb250ZXh0KSA/IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0
KS5yZW5kZXJWaWV3KCkgOiBudWxscHRyKSk7Ci0gICAgICAgIH0sIFsmXSAoZG91YmxlIHBlcmNl
bnRhZ2UpIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhcmVudFNp
emUgKiBwZXJjZW50YWdlKSAvIDEwMC4wKTsKKyAgICAgICAgfSwgWyZdIChjb25zdCBDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OlBlcmNlbnRSYXcmIHBlcmNlbnRhZ2UpIHsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhcmVudFNpemUgKiBwZXJjZW50YWdlLnZhbHVl
KSAvIDEwMC4wKTsKICAgICAgICAgfSk7CiAgICAgfSk7CiAK
</data>
<flag name="commit-queue"
          id="474616"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448692</attachid>
            <date>2022-01-08 19:13:55 -0800</date>
            <delta_ts>2022-01-09 09:22:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234869-20220108191354.patch</filename>
            <type>text/plain</type>
            <size>147785</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyMyBAQAorMjAyMi0wMS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQ1NTIHByb3BlcnR5
IHBhcnNpbmcgaGVscGVycyB0byBiZSBhIGJpdCBtb3JlIGNvbXBvc2FibGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDg2OQorCisgICAgICAgIFJl
ZmFjdG9ycyBwcmltaXRpdmUgQ1NTIHByb3BlcnR5IHBhcnNpbmcgdG8gYmUgYnVpbHQgb24gYSBu
ZXcgY29tcG9zYWJsZSBzZXQgb2YgCisgICAgICAgIGxvd2VyIGxldmVsIHByaW1pdGl2ZXMuCisK
KyAgICAgICAgVGhlIGxvd2VzdCBsZXZlbCBwcmltaXRpdmUgaXMgbm93IGEgImNvbnN1bWVyIiBz
dHJ1Y3QgdGhhdCBvbmx5IGtub3dzIGhvdyB0byBjb25zdW1lCisgICAgICAgIGEgcGFydGljdWxh
ciB0eXBlIGZvciBhIHBhcnRpY3VsYXIgdG9rZW4gdHlwZS4gRm9yIGV4YW1wbGUsIE51bWJlclJh
d0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIKKyAgICAgICAgb25seSBrbm93cyBob3cgdG8g
Y29uc3VtZSBhbmQgcmV0dXJuIGEgTnVtYmVyUmF3IGlmIHRoZSB0b2tlbiB0eXBlIGlzIGEgTnVt
YmVyVG9rZW4uCisKKyAgICAgICAgRm9yIHRoZXNlIHRva2VuIHNwZWNpZmljIGNvbnN1bWVycyB0
byBiZSB1c2VmdWwsIHRoZXkgbmVlZCB0byBiZSBjb21iaW5lZCB0b2dldGhlci4gVG8KKyAgICAg
ICAgZG8gdGhpcywgYSBoaWdoZXIgbGV2ZWwgbWV0YS1jb25zdW1lciB0eXBlIHRoYXQgaXMgbm90
IHRpZWQgdG8gYSBzcGVjaWZpYyB0b2tlbiBpcyB1c2VkLgorICAgICAgICBUaGVzZSBhcmUgZGVm
aW5lZCBhcyBlbXB0eSBzdHJ1Y3RzIHdpdGggJ3VzaW5nJyBzdGF0ZW1lbnRzIHRvIGluZGljYXRl
IHdoaWNoIGxvdyBsZXZlbAorICAgICAgICBjb25zdW1lcnMgdG8gdXNlIGZvciB3aGljaCB0b2tl
biB0b2tlbiB0eXBlcy4gRm9yIGV4YW1wbGU6CisgICAgICAgIAorICAgICAgICAgICAgc3RydWN0
IE51bWJlclJhd0NvbnN1bWVyIHsKKyAgICAgICAgICAgICAgICB1c2luZyBSZXN1bHQgPSBzdGQ6
Om9wdGlvbmFsPE51bWJlclJhdz47CisKKyAgICAgICAgICAgICAgICB1c2luZyBGdW5jdGlvblRv
a2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgICAgICAg
ICAgICAgIHVzaW5nIE51bWJlclRva2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1iZXJD
b25zdW1lcjsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgVGhpcyBtZXRhLWNvbnN1bWVyIGRl
ZmluaXRpb24gZGVmaW5lcyBhIGNvbnN1bWVyIHRoYXQgdXRpbGl6ZXMgdHdvIGxvd2VyIGxldmVs
IHRva2VuIAorICAgICAgICBzcGVjaWZpYyBjb25zdW1lcnMgZm9yIGZ1bmN0aW9uIGFuZCBudW1i
ZXIgdG9rZW5zLgorCisgICAgICAgIFRvIGFjdHVhbGwgZG8gc29tZXRoaW5nIHdpdGggdGhpcyBt
ZXRhLWNvbnN1bWVyIGRlZmluaXRpb24sIHRoZSAgY29uc3VtZU1ldGFDb25zdW1lcjw+KC4uLikg
CisgICAgICAgIGZ1bmN0aW9uIGlzIHVzZWQsIHdoaWNoIGludHJvc3BlY3RzIHdoaWNoIHVzaW5n
IHN0YXRlbWVudHMgYXJlIGRlZmluZWQsIGFuZCBkaXNwYXRjaGVzIHRvIAorICAgICAgICB0aGUg
Y29ycmVzcG9uZGluZyB0b2tlbiBzcGVjaWZpYyBjb25zdW1lciAoc2VlIE1ldGFDb25zdW1lcklt
cGwgZm9yIGhvdyBpbnRyb3NwZWN0aW9uIHdvcmtzKS4KKworICAgICAgICBJbiBhZGRpdGlvbiB0
byBwcmltaXRpdmUgbWV0YS1jb25zdW1lciBkZWZpbml0aW9ucywgdGhlcmUgYXJlIGFsc28gZGVm
aW5pdGlvbnMgZm9yIG1ldGEtY29uc3VtZXJzCisgICAgICAgIHRoYXQgY2FuIGNvbnN1bWVyIG1v
cmUgY29tcGxleCB0aGluZ3Mgd2l0aG91dCBkdXBsaWNhdGUgd29yay4gRm9yIGV4YW1wbGUsIEFu
Z2xlT3JQZXJjZW50Q29uc3VtZXIKKyAgICAgICAgaXMgYSBtZXRhLWNvbnN1bWVyIHRoYXQgY29u
c3VtZXMgZWl0aGVyIGFuIEFuZ2xlIG9yIGEgUGVyY2VudC4gVG8gZGVhbCB3aXRoIHRoZSBmYWN0
IHRoYXQgYm90aAorICAgICAgICBvZiB0aGVzZSB3YW50IHRvIG9wZXJhdGUgb24gZnVuY3Rpb24g
dG9rZW5zLCB0aGUgU2FtZVRva2VuTWV0YUNvbnN1bWVyIGFsbG93cyBjb25jYXRlbmF0aW5nIG11
bHRpcGxlCisgICAgICAgIHBlci10b2tlbiBjb25zdW1lcnMgKGluIHRoaXMgY2FzZSwgdHdvIGZ1
bmN0aW9uIHRva2VuIGNvbnN1bWVycykgdG9nZXRoZXIuIAorICAgICAgICAKKyAgICAgICAgTWV0
YS1jb25zdW1lciBkZWZpbml0aW9ucyBjYW4gYWxzbyBkZWZpbmUsIG9yIGFsbG93IGRlZmluaW5n
IHZpYSBhIHRlbXBsYXRlIHBhcmFtZXRlciwgYSBUcmFuc2Zvcm1lciwKKyAgICAgICAgd2hpY2gs
IGFzIHRoZSBuYW1lIGltcGxpZXMsIHRyYW5zZm9ybSB0aGUgb3V0cHV0LiBGb3IgZXhhbXBsZSwg
dGhlIEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lcgorICAgICAgICBjYW4gYmUg
dXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIGluIGRlZ3JlZXMsIGFu
ZCBkb2Vzbid0IGhhdmUgdG8gYmUgdW53cmFwcGVkIGJ5CisgICAgICAgIHRoZSB1c2VyLgorCisg
ICAgICAgIFRoZSBnb2FsIGlzIGF2b2lkIHRoZSBjb21iaW5hdG9yaWFsIGV4cGxvc2l0aW9uIG9m
IGZ1bmN0aW9ucyBicmFuY2hpbmcgb24gdG9rZW4gdHlwZSBmb3IKKyAgICAgICAgbW9yZSBhbmQg
bW9yZSBzcGVjaWFsaXplZCBwYXJzaW5nIG5lZWRzLiBGb3IgaW5zdGFuY2UsIGFuIHVwY29tcGlu
ZyBjaGFuZ2Ugd2lsbCB3YW50IHRvIAorICAgICAgICBleHRlbmQgY29uc3VtZU51bWJlck9yUGVy
Y2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCBhbmQgYSBmZXcgb3RoZXIgcmVsYXRlZCBj
b25zdW1lcnMKKyAgICAgICAgdG8gYWxzbyBjb25zdW1lIHRoZSBpZGVudGlmaWVyICdub25lJy4g
UmF0aGVyIHRoYW4gZHVwbGljYXRpbmcgYWxsIHRoZSBsb2dpYywgdGhpcyBhbGxvd3MKKyAgICAg
ICAgZm9yIGp1c3QgZGVmaW5pbmcgYSBmZXcgbWV0YS1jb25zdW1lciBkZWZpbml0aW9ucyB1dGls
aXppbmcgYWxtb3N0IGVudGlyZWx5IGV4aXN0aW5nIGxvd2VyCisgICAgICAgIGxldmVsIGNvbnN1
bWVycy4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXhwcmVzc2lvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb25zdW1lRmlyc3RWYWx1ZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lRm9udFZhcmlhdGlv
blRhZyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQ3ViaWNCZXppZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3VtZVNwcmluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1
bWVQZXJzcGVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQ3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN1bWVDb3VudGVyU3R5bGVQYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Y29uc3VtZUNvdW50ZXJTdHlsZUFkZGl0aXZlU3ltYm9scyk6CisgICAgICAgIChXZWJDb3JlOjpj
b25zdW1lQmFzZVBhbGV0dGVEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVP
dmVycmlkZUNvbG9yc0Rlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXI6OmNvbnN1bWVGbGV4KToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VySGVscGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OkNhbGNQYXJzZXI6OkNhbGNQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29tcHV0ZU1p
bmltdW1WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OkludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6SW50ZWdlclR5cGVS
YXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6SW50ZWdlclR5cGVLbm93blRva2VuVHlwZUZ1
bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpJbnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNv
bnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjp2YWxp
ZGF0ZWROdW1iZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpOdW1iZXJSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1iZXJSYXdLbm93
blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6TnVtYmVyUmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1
bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6TnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjp2YWxpZGF0ZWRQZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6UGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rp
b25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OlBlcmNlbnRSYXdLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29uc3Vt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlBlcmNlbnRS
YXdLbm93blRva2VuVHlwZUlkZW50Q29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpQZXJjZW50Q1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29uc3VtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aFJhd0tu
b3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aFJhd0tub3duVG9rZW5UeXBlRGltZW5z
aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpMZW5ndGhSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6
OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpM
ZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9u
Q29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBl
TnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpBbmdsZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29u
c3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkFuZ2xl
UmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkFuZ2xlUmF3S25vd25Ub2tlblR5cGVO
dW1iZXJDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OkFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6VGltZUNTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRpbWVDU1NQcmlt
aXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSZXNvbHV0
aW9uQ1NTUHJpbWl0aXZlVmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6
Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRy
YW5zZm9ybUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6YXBwbHlUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpJZGVudGl0eVRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSYXdWYXJpYW50VHJhbnNmb3Jt
ZXJCYXNlOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI6OnRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Ok51bWJlck9yUGVy
Y2VudERpdmlkZWRCeTEwMFRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpNZXRhQ29uc3VtZXJJbXBsOjpjb25zdW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU1ldGFD
b25zdW1lcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlNh
bWVUb2tlbk1ldGFDb25zdW1lckltcGw6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpTYW1lVG9rZW5NZXRhQ29uc3VtZXI6OmNvbnN1bWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBlcmNl
bnRSYXdUcmFuc2Zvcm1lcjo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6QW5nbGVPck51bWJlclJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25z
dW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6Ok51bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjo6Y29uc3Vt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJ
bnRlZ2VyVHlwZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVJbnRlZ2VyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyUmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUlu
dGVnZXJaZXJvQW5kR3JlYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVQb3NpdGl2ZUludGVnZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlclJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1i
ZXJBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9s
VGFibGVJZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aFJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGgpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVXb3Jr
ZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29u
c3VtZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lUmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVBbmdsZU9yUGVyY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoT3JQZXJjZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFu
Z2xlT3JOdW1iZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpjb25zdW1lQW5nbGVPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJP
clBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlck9y
UGVyY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZU9wdGlvbmFsQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3lt
Ym9sVGFibGVJZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6Om5vcm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSR0JOb3JtYWxpemlu
Z1RyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpjb25zdW1lUmVsYXRpdmVSR0JDb21wb25lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVSR0JPckhTTE9w
dGlvbmFsQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpwYXJzZU5vblJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VOb25SZWxhdGl2ZUhT
TFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpwYXJzZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTm9uUmVsYXRpdmVIV0JQYXJhbWV0ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VMYWJQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VMQ0hQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6cGFyc2VSZWxhdGl2ZUxDSFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZU5vblJlbGF0aXZlTENIUGFyYW1ldGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRp
dmVDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZv
clhZWlR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
cGFyc2VDb2xvckNvbnRyYXN0RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yTWl4Q29tcG9uZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aW9u
Q29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNyb3NzRmFk
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVM
aW5lSGVpZ2h0UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Q2FsY1BhcnNlcjo6Y29uc3VtZUludGVnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFyc2VyOjpjb25zdW1lSW50ZWdlclR5
cGVSYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpDYWxjUGFyc2VyOjpjb25zdW1lTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZU51bWJlclJh
dyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OkNhbGNQYXJzZXI6OmNvbnN1bWVQZXJjZW50UmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZUFuZ2xlUmF3
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Q2FsY1BhcnNlcjo6Y29uc3VtZUxlbmd0aFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBl
TnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyQ1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlckNT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVy
Y2VudFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25v
d25Ub2tlblR5cGVQZXJjZW50YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVJ
ZGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlUGVyY2VudGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVG
dW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
TGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aENTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxl
bmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd1dpdGhL
bm93blRva2VuVHlwZURpbWVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZU51
bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVEaW1lbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0
aEtub3duVG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUmVzb2x1dGlvbkNTU1By
aW1pdGl2ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlUmF3T3JO
dW1iZXJSYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lQW5nbGVSYXdPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVu
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2
aWRlZEJ5MTAwUmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZU51bWJlclJhd09yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFi
bGVJZGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5
bWJvbFRhYmxlSWRlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
cldvcmtlclNhZmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzV29ya2VyU2FmZTo6Y29uc3VtZUZvbnRGZWF0dXJlVGFnKToKKyAgICAgICAgKiBzdHlsZS9T
dHlsZVJlc29sdmVGb3JGb250UmF3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNv
bHZlRm9yRm9udFJhdyk6CisKIDIwMjItMDEtMDggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHNvbWUgQ1NTIGZpbHRlciBpbnRlcnBvbGF0aW9u
IGlzc3VlcwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHByZXNzaW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cHJlc3Npb24u
Y3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4
cHJlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgc3RhdGljIGlu
bGluZSBib29sIGlzRmVhdHVyZVZhbGlkV2l0aG91dFZhbHVlKGNvbnN0IEF0CiAKIGlubGluZSBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGaXJzdFZhbHVlKGNvbnN0IFN0cmluZyYg
bWVkaWFGZWF0dXJlLCBDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoYXV0
byB2YWx1ZSA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXIocmFuZ2Us
IDApKQorICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lSW50ZWdlclplcm9BbmRHcmVhdGVyKHJhbmdlKSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwog
CiAgICAgaWYgKCFmZWF0dXJlRXhwZWN0aW5nUG9zaXRpdmVJbnRlZ2VyKG1lZGlhRmVhdHVyZSkg
JiYgIWlzQXNwZWN0UmF0aW9GZWF0dXJlKG1lZGlhRmVhdHVyZSkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAy
ODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTYyLDcgKzU2Miw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFs
dWU+IGNvbnN1bWVGb250VmFyaWF0aW9uVGFnKENTU1BhcgogICAgIGlmICghdGFnVmFsdWUpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIHJldHVybiBDU1NGb250VmFyaWF0aW9u
VmFsdWU6OmNyZWF0ZSh0YWcsICp0YWdWYWx1ZSk7CisgICAgcmV0dXJuIENTU0ZvbnRWYXJpYXRp
b25WYWx1ZTo6Y3JlYXRlKHRhZywgdGFnVmFsdWUtPnZhbHVlKTsKIH0KICAgICAKIHN0YXRpYyBS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCkBAIC0xNDU3LDcgKzE0NTcsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICBDU1NQYXJzZXJUb2tlblJh
bmdlIGFyZ3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2VDb3B5KTsKIAogICAgIGF1dG8geDEgPSBj
b25zdW1lTnVtYmVyUmF3KGFyZ3MpOwotICAgIGlmICgheDEgfHwgKngxIDwgMCB8fCAqeDEgPiAx
KQorICAgIGlmICgheDEgfHwgeDEtPnZhbHVlIDwgMCB8fCB4MS0+dmFsdWUgPiAxKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAoIWNvbnN1bWVDb21tYUluY2x1ZGluZ1do
aXRlc3BhY2UoYXJncykpCkBAIC0xNDcxLDcgKzE0NzEsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1Zh
bHVlPiBjb25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBhdXRvIHgyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKLSAgICBpZiAoIXgy
IHx8ICp4MiA8IDAgfHwgKngyID4gMSkKKyAgICBpZiAoIXgyIHx8IHgyLT52YWx1ZSA8IDAgfHwg
eDItPnZhbHVlID4gMSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWNvbnN1
bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCkBAIC0xNDg1LDcgKzE0ODUsNyBAQCBz
dGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByYW5nZSA9IHJhbmdlQ29weTsKLSAgICByZXR1
cm4gQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUoKngxLCAqeTEsICp4
MiwgKnkyKTsKKyAgICByZXR1cm4gQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpj
cmVhdGUoeDEtPnZhbHVlLCB5MS0+dmFsdWUsIHgyLT52YWx1ZSwgeTItPnZhbHVlKTsKIH0KIAog
c3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNwcmluZ0Z1bmN0aW9uKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQpAQCAtMTQ5NiwxNyArMTQ5NiwxNyBAQCBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lU3ByaW5nRnVuY3Rpb24oQ1NTUGFyc2UKIAogICAgIC8vIE1hc3MgbXVz
dCBiZSBncmVhdGVyIHRoYW4gMC4KICAgICBhdXRvIG1hc3MgPSBjb25zdW1lTnVtYmVyUmF3KGFy
Z3MpOwotICAgIGlmICghbWFzcyB8fCAqbWFzcyA8PSAwKQorICAgIGlmICghbWFzcyB8fCBtYXNz
LT52YWx1ZSA8PSAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBTdGlm
Zm5lc3MgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KICAgICBhdXRvIHN0aWZmbmVzcyA9IGNvbnN1
bWVOdW1iZXJSYXcoYXJncyk7Ci0gICAgaWYgKCFzdGlmZm5lc3MgfHwgKnN0aWZmbmVzcyA8PSAw
KQorICAgIGlmICghc3RpZmZuZXNzIHx8IHN0aWZmbmVzcy0+dmFsdWUgPD0gMCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgLy8gRGFtcGluZyBjb2VmZmljaWVudCBtdXN0IGJl
IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLgogICAgIGF1dG8gZGFtcGluZyA9IGNvbnN1bWVO
dW1iZXJSYXcoYXJncyk7Ci0gICAgaWYgKCFkYW1waW5nIHx8ICpkYW1waW5nIDwgMCkKKyAgICBp
ZiAoIWRhbXBpbmcgfHwgZGFtcGluZy0+dmFsdWUgPCAwKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAKICAgICAvLyBJbml0aWFsIHZlbG9jaXR5IG1heSBoYXZlIGFueSB2YWx1ZS4KQEAg
LTE1MTksNyArMTUxOSw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVTcHJpbmdG
dW5jdGlvbihDU1NQYXJzZQogCiAgICAgcmFuZ2UgPSByYW5nZUNvcHk7CiAKLSAgICByZXR1cm4g
Q1NTU3ByaW5nVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKCptYXNzLCAqc3RpZmZuZXNzLCAq
ZGFtcGluZywgKmluaXRpYWxWZWxvY2l0eSk7CisgICAgcmV0dXJuIENTU1NwcmluZ1RpbWluZ0Z1
bmN0aW9uVmFsdWU6OmNyZWF0ZShtYXNzLT52YWx1ZSwgc3RpZmZuZXNzLT52YWx1ZSwgZGFtcGlu
Zy0+dmFsdWUsIGluaXRpYWxWZWxvY2l0eS0+dmFsdWUpOwogfQogCiBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCkBAIC0xODczLDcgKzE4
NzMsNyBAQCBzdGF0aWMgYm9vbCBjb25zdW1lUGVyc3BlY3RpdmUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgYXIKICAgICB9CiAKICAgICBpZiAoYXV0byBwZXJzcGVjdGl2ZSA9IGNvbnN1bWVOdW1iZXJS
YXcoYXJncywgVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpKSB7Ci0gICAgICAgIHRyYW5zZm9ybVZh
bHVlLT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgqcGVyc3BlY3RpdmUsIENTU1Vu
aXRUeXBlOjpDU1NfUFgpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKHBlcnNwZWN0aXZlLT52YWx1ZSwgQ1NTVW5pdFR5cGU6OkNTU19Q
WCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIzMzYsNyArMjMzNiw3IEBA
IHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDdXJzb3IoQ1NTUGFyc2VyVG9rZW5SYQog
ICAgICAgICAgICAgaWYgKCF5KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjbGFtcCBvciByb3VuZCBpbnN0ZWFkIG9mIGp1
c3QgY2FzdGluZyBmcm9tIGRvdWJsZSB0byBpbnQ/Ci0gICAgICAgICAgICBob3RTcG90ID0gSW50
UG9pbnQgeyBzdGF0aWNfY2FzdDxpbnQ+KCp4KSwgc3RhdGljX2Nhc3Q8aW50PigqeSkgfTsKKyAg
ICAgICAgICAgIGhvdFNwb3QgPSBJbnRQb2ludCB7IHN0YXRpY19jYXN0PGludD4oeC0+dmFsdWUp
LCBzdGF0aWNfY2FzdDxpbnQ+KHktPnZhbHVlKSB9OwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFsaXN0KQpAQCAtMjQ1OCw5ICsyNDU4LDkgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZVBlcnNwZWN0aXZlKENTCiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHF1
aXJrIG9ubHkgYXBwbHkgdG8gdGhlIHdlYmtpdCBwcmVmaXhlZCB2ZXJzaW9uIG9mIHRoZSBwcm9w
ZXJ0eS4KICAgICBhdXRvIHBlcnNwZWN0aXZlID0gY29uc3VtZU51bWJlclJhdyhyYW5nZSk7Ci0g
ICAgaWYgKCFwZXJzcGVjdGl2ZSB8fCAqcGVyc3BlY3RpdmUgPCAwKQorICAgIGlmICghcGVyc3Bl
Y3RpdmUgfHwgcGVyc3BlY3RpdmUtPnZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoKnBlcnNwZWN0aXZlLCBDU1NV
bml0VHlwZTo6Q1NTX1BYKTsKKyAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShw
ZXJzcGVjdGl2ZS0+dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogfQogCiBzdGF0aWMgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gY29uc3VtZVNjcm9sbFNuYXBBbGlnbihDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKQEAgLTQ1MTgsNyArNDUxOCw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUHJv
cGVydHlQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJFbmRFbmRSYWRpdXM6CiAgICAgICAgIHJldHVybiBjb25zdW1lQm9yZGVyUmFkaXVzQ29ybmVy
KG1fcmFuZ2UsIG1fY29udGV4dC5tb2RlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94
RmxleEdyb3VwOgotICAgICAgICByZXR1cm4gY29uc3VtZUludGVnZXIobV9yYW5nZSwgMCk7Cisg
ICAgICAgIHJldHVybiBjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyKG1fcmFuZ2UpOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlPcmRlcjoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKG1f
cmFuZ2UpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lUG9zaXRpb246CkBAIC00
ODEyLDcgKzQ4MTIsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ291bnRlclN0
eWxlUGFkKENTU1BhcnMKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN5bWJvbDsKICAgICB3aGlsZSAo
IWludGVnZXIgfHwgIXN5bWJvbCkgewogICAgICAgICBpZiAoIWludGVnZXIpIHsKLSAgICAgICAg
ICAgIGludGVnZXIgPSBjb25zdW1lSW50ZWdlcihyYW5nZSwgMCk7CisgICAgICAgICAgICBpbnRl
Z2VyID0gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihyYW5nZSk7CiAgICAgICAgICAgICBp
ZiAoaW50ZWdlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNDg1
MiwxMiArNDg1MiwxMiBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ291bnRlclN0
eWxlQWRkaXRpdmVTeW0KICAgICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29t
bWFTZXBhcmF0ZWQoKTsKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gbGFzdFdlaWdodDsKICAgICBk
byB7Ci0gICAgICAgIGF1dG8gaW50ZWdlciA9IGNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAwKTsKKyAg
ICAgICAgYXV0byBpbnRlZ2VyID0gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihyYW5nZSk7
CiAgICAgICAgIGF1dG8gc3ltYm9sID0gY29uc3VtZUNvdW50ZXJTdHlsZVN5bWJvbChyYW5nZSwg
Y29udGV4dCk7CiAgICAgICAgIGlmICghaW50ZWdlcikgewogICAgICAgICAgICAgaWYgKCFzeW1i
b2wpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBpbnRlZ2Vy
ID0gY29uc3VtZUludGVnZXIocmFuZ2UsIDApOworICAgICAgICAgICAgaW50ZWdlciA9IGNvbnN1
bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIocmFuZ2UpOwogICAgICAgICAgICAgaWYgKCFpbnRlZ2Vy
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC01MDAyLDE0
ICs1MDAyLDE0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVCYXNl
UGFsZXR0ZURlcwogewogICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVJZGVudDxDU1NWYWx1
ZUxpZ2h0LCBDU1NWYWx1ZURhcms+KHJhbmdlKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICByZXR1cm4gY29uc3VtZUludGVnZXIocmFuZ2UsIDApOworICAgIHJldHVybiBjb25zdW1lSW50
ZWdlclplcm9BbmRHcmVhdGVyKHJhbmdlKTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IGNvbnN1bWVPdmVycmlkZUNvbG9yc0Rlc2NyaXB0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsK
ICAgICBkbyB7Ci0gICAgICAgIGF1dG8ga2V5ID0gY29uc3VtZUludGVnZXIocmFuZ2UsIDApOwor
ICAgICAgICBhdXRvIGtleSA9IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIocmFuZ2UpOwog
ICAgICAgICBpZiAoIWtleSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC01MzM3
LDEzICs1MzM3LDEzIEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGbGV4KGJvb2wg
aW1wb3J0YW50KQogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIHdoaWxlICgh
bV9yYW5nZS5hdEVuZCgpICYmIGluZGV4KysgPCAzKSB7CiAgICAgICAgICAgICBpZiAoYXV0byBu
dW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KG1fcmFuZ2UpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCpudW1iZXIgPCAwKQorICAgICAgICAgICAgICAgIGlmIChudW1iZXItPnZhbHVlIDwgMCkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGlmIChmbGV4
R3JvdyA9PSB1bnNldFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBmbGV4R3JvdyA9ICpudW1i
ZXI7CisgICAgICAgICAgICAgICAgICAgIGZsZXhHcm93ID0gbnVtYmVyLT52YWx1ZTsKICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChmbGV4U2hyaW5rID09IHVuc2V0VmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgIGZsZXhTaHJpbmsgPSAqbnVtYmVyOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KCEqbnVtYmVyKSAvLyBmbGV4IG9ubHkgYWxsb3dzIGEgYmFzaXMgb2YgMCAoc2FucyB1bml0cykg
aWYgZmxleC1ncm93IGFuZCBmbGV4LXNocmluayB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0
LgorICAgICAgICAgICAgICAgICAgICBmbGV4U2hyaW5rID0gbnVtYmVyLT52YWx1ZTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmICghbnVtYmVyLT52YWx1ZSkgLy8gZmxleCBvbmx5IGFsbG93cyBh
IGJhc2lzIG9mIDAgKHNhbnMgdW5pdHMpIGlmIGZsZXgtZ3JvdyBhbmQgZmxleC1zaHJpbmsgdmFs
dWVzIGhhdmUgYWxyZWFkeSBiZWVuIHNldC4KICAgICAgICAgICAgICAgICAgICAgZmxleEJhc2lz
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgwLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4
LDcgKzExOCw3IEBAIHN0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFsdWUoQ2FsY3VsYXRpb25D
YXRlZ29yeSBjYQogLy8gRklYTUU6IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhlIHBhcnNpbmcgbG9n
aWMgZnJvbSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuCiBjbGFzcyBDYWxjUGFyc2VyIHsK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSA9IHsgfSwgQ1NTVmFsdWVQb29sJiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKSwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UgPSBmYWxzZSkKKyAgICBleHBs
aWNpdCBDYWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNh
dGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVl
UmFuZ2U6OkFsbCwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IHsgfSwg
Q1NTVmFsdWVQb29sJiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwgTmVnYXRpdmVQ
ZXJjZW50YWdlUG9saWN5IG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSA9IE5lZ2F0aXZlUGVyY2Vu
dGFnZVBvbGljeTo6Rm9yYmlkKQogICAgICAgICA6IG1fc291cmNlUmFuZ2UocmFuZ2UpCiAgICAg
ICAgICwgbV9yYW5nZShyYW5nZSkKICAgICAgICAgLCBtX3Bvb2wocG9vbCkKQEAgLTEyNiw3ICsx
MjYsNyBAQCBjbGFzcyBDYWxjUGFyc2VyIHsgKHB1YmxpYykKICAgICAgICAgY29uc3QgQ1NTUGFy
c2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgICAgICBhdXRvIGZ1bmN0aW9uSWQg
PSB0b2tlbi5mdW5jdGlvbklkKCk7CiAgICAgICAgIGlmIChDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1
bmN0aW9uKGZ1bmN0aW9uSWQpKQotICAgICAgICAgICAgbV9jYWxjVmFsdWUgPSBDU1NDYWxjVmFs
dWU6OmNyZWF0ZShmdW5jdGlvbklkLCBjb25zdW1lRnVuY3Rpb24obV9yYW5nZSksIGRlc3RpbmF0
aW9uQ2F0ZWdvcnksIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBhbGxvd3NOZWdhdGl2ZVBlcmNl
bnRhZ2UpOworICAgICAgICAgICAgbV9jYWxjVmFsdWUgPSBDU1NDYWxjVmFsdWU6OmNyZWF0ZShm
dW5jdGlvbklkLCBjb25zdW1lRnVuY3Rpb24obV9yYW5nZSksIGRlc3RpbmF0aW9uQ2F0ZWdvcnks
IHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgPT0gTmVn
YXRpdmVQZXJjZW50YWdlUG9saWN5OjpBbGxvdyk7CiAgICAgfQogCiAgICAgY29uc3QgQ1NTQ2Fs
Y1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsY1ZhbHVlLmdldCgpOyB9CkBAIC0x
NTIsNjUgKzE1Miw2IEBAIGNsYXNzIENhbGNQYXJzZXIgeyAocHVibGljKQogICAgICAgICByZXR1
cm4gbV9wb29sLmNyZWF0ZVZhbHVlKFdURk1vdmUobV9jYWxjVmFsdWUpKTsKICAgICB9CiAKLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyKGRvdWJsZSBtaW5pbXVt
VmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICBy
ZXR1cm4gbV9wb29sLmNyZWF0ZVZhbHVlKHN0ZDo6cm91bmQoc3RkOjptYXgobV9jYWxjVmFsdWUt
PmRvdWJsZVZhbHVlKCksIG1pbmltdW1WYWx1ZSkpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RkOjpvcHRpb25hbDxJ
bnRUeXBlPiBjb25zdW1lSW50ZWdlclR5cGVSYXcoZG91YmxlIG1pbmltdW1WYWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmICghbV9jYWxjVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIGNs
YW1wVG88SW50VHlwZT4oc3RkOjpyb3VuZChzdGQ6Om1heChtX2NhbGNWYWx1ZS0+ZG91YmxlVmFs
dWUoKSwgbWluaW11bVZhbHVlKSkpOwotICAgIH0KLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZU51bWJlcigpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3Jh
bmdlOwotICAgICAgICByZXR1cm4gbV9wb29sLmNyZWF0ZVZhbHVlKG1fY2FsY1ZhbHVlLT5kb3Vi
bGVWYWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgfQotCi0gICAgc3RkOjpv
cHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoKQotICAgIHsKLSAgICAgICAgaWYgKCFt
X2NhbGNWYWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBt
X3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIG1fY2FsY1ZhbHVlLT5kb3Vi
bGVWYWx1ZSgpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVy
Y2VudFJhdygpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBjYXRlZ29yeSA9IG1fY2FsY1ZhbHVl
LT5jYXRlZ29yeSgpOwotICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1f
c291cmNlUmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4gbV9jYWxjVmFsdWUtPmRvdWJs
ZVZhbHVlKCk7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFu
Z2xlUmF3KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9jYWxjVmFsdWUt
PmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAg
ICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBtX2NhbGNWYWx1
ZS0+ZG91YmxlVmFsdWUoKSB9IH07Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxMZW5ndGhS
YXc+IGNvbnN1bWVMZW5ndGhSYXcoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8
fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJjZVJhbmdl
ID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpLCBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07Ci0gICAgfQotCiBwcml2YXRlOgog
ICAgIENTU1BhcnNlclRva2VuUmFuZ2UmIG1fc291cmNlUmFuZ2U7CiAgICAgQ1NTUGFyc2VyVG9r
ZW5SYW5nZSBtX3JhbmdlOwpAQCAtMjIwLDcgKzE2MSw3IEBAIGNsYXNzIENhbGNQYXJzZXIgeyAo
cHVibGljKQogCiAvLyBNQVJLOiAtIFByaW1pdGl2ZSB2YWx1ZSBjb25zdW1lcnMgZm9yIGNhbGxl
cnMgdGhhdCBrbm93IHRoZSB0b2tlbiB0eXBlLgogCi1zdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1
ZT4gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IHsgfSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0g
VmFsdWVSYW5nZTo6QWxsKQorc3RhdGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNvbnN1bWVDYWxj
UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKICAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIApAQCAtMjM4LDIwNiArMTc5LDI2NSBA
QCBzdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2sK
IAogLy8gTUFSSzogSW50ZWdlciAoUmF3KQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPiBz
dGF0aWMgc3RkOjpvcHRpb25hbDxJbnRUeXBlPiBjb25zdW1lSW50ZWdlclR5cGVSYXdXaXRoS25v
d25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwgZG91
YmxlIG1pbmltdW1WYWx1ZSkKK2VudW0gY2xhc3MgSW50ZWdlclJhbmdlIHsgQWxsLCBaZXJvQW5k
R3JlYXRlciwgT25lQW5kR3JlYXRlciB9OworCitzdGF0aWMgY29uc3RleHByIGRvdWJsZSBjb21w
dXRlTWluaW11bVZhbHVlKEludGVnZXJSYW5nZSByYW5nZSkKIHsKLSAgICBhdXRvIHJhbmdlID0g
c291cmNlUmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHsg
fSwgVmFsdWVSYW5nZTo6QWxsKSkgewotICAgICAgICBzb3VyY2VSYW5nZSA9IHJhbmdlOwotICAg
ICAgICByZXR1cm4gY2xhbXBUbzxJbnRUeXBlPihzdGQ6OnJvdW5kKHN0ZDo6bWF4KHZhbHVlLT5k
b3VibGVWYWx1ZSgpLCBtaW5pbXVtVmFsdWUpKSk7CisgICAgc3dpdGNoIChyYW5nZSkgeworICAg
IGNhc2UgSW50ZWdlclJhbmdlOjpBbGw6CisgICAgICAgIHJldHVybiAtc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgIGNhc2UgSW50ZWdlclJhbmdlOjpaZXJvQW5k
R3JlYXRlcjoKKyAgICAgICAgcmV0dXJuIDAuMDsKKyAgICBjYXNlIEludGVnZXJSYW5nZTo6T25l
QW5kR3JlYXRlcjoKKyAgICAgICAgcmV0dXJuIDEuMDsKICAgICB9Ci0KLSAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogfQorLy8gTUFSSzogSW50ZWdlciAoUmF3KQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBJbnRUeXBlPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnRUeXBlPiBjb25zdW1lSW50ZWdlclR5
cGVSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGRvdWJsZSBtaW5pbXVtVmFsdWUpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkg
PT0gTnVtYmVyVG9rZW4pOwotICAgIAotICAgIGlmIChyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVl
VHlwZSgpID09IE51bWJlclZhbHVlVHlwZSB8fCByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkg
PCBtaW5pbXVtVmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlLCBJbnRlZ2VyUmFuZ2Ug
aW50ZWdlclJhbmdlPgorc3RydWN0IEludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlv
bkNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tl
blR5cGUgPSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEludFR5cGU+
IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xU
YWJsZSYsIFZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNz
WmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0g
RnVuY3Rpb25Ub2tlbik7CisKKyAgICAgICAgYXV0byByYW5nZUNvcHkgPSByYW5nZTsKKyAgICAg
ICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKHJhbmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB7IH0sIFZhbHVlUmFu
Z2U6OkFsbCkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VDb3B5OworICAgICAgICAgICAg
cmV0dXJuIGNsYW1wVG88SW50VHlwZT4oc3RkOjpyb3VuZChzdGQ6Om1heCh2YWx1ZS0+ZG91Ymxl
VmFsdWUoKSwgY29tcHV0ZU1pbmltdW1WYWx1ZShpbnRlZ2VyUmFuZ2UpKSkpOworICAgICAgICB9
CisKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gY2xhbXBUbzxJbnRU
eXBlPihyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpKTsK
LX0KKyAgICB9Cit9OwogCi0vLyBNQVJLOiBJbnRlZ2VyIChDU1NQcmltaXRpdmVWYWx1ZSAtIG5v
dCBtYWludGFpbmluZyBjYWxjKQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJh
bmdlIGludGVnZXJSYW5nZT4KK3N0cnVjdCBJbnRlZ2VyVHlwZVJhd0tub3duVG9rZW5UeXBlTnVt
YmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRv
a2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEludFR5cGU+
IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xU
YWJsZSYsIFZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNz
WmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0g
TnVtYmVyVG9rZW4pOworICAgICAgICAKKyAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5udW1lcmlj
VmFsdWVUeXBlKCkgPT0gTnVtYmVyVmFsdWVUeXBlIHx8IHJhbmdlLnBlZWsoKS5udW1lcmljVmFs
dWUoKSA8IGNvbXB1dGVNaW5pbXVtVmFsdWUoaW50ZWdlclJhbmdlKSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBjbGFtcFRvPEludFR5cGU+KHJhbmdl
LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkpOworICAgIH0KK307
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVJbnRlZ2VyVHlwZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1p
bmltdW1WYWx1ZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworLy8gTUFSSzogSW50ZWdlciAoQ1NTUHJpbWl0
aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQogCi0gICAgaWYgKGF1dG8gaW50ZWdlciA9IGNv
bnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uPEludFR5cGU+KHJh
bmdlLCBtaW5pbXVtVmFsdWUpKQotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqaW50
ZWdlciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIHJldHVybiBudWxscHRyOwotfQor
dGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVnZXJSYW5nZT4KK3N0
cnVjdCBJbnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tl
bjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1
ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBGdW5jdGlvblRva2VuKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKyAgICAgICAgaWYgKGF1
dG8gaW50ZWdlciA9IEludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVy
PEludFR5cGUsIGludGVnZXJSYW5nZT46OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1
ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAg
IHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKCppbnRlZ2VyLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJF
Uik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLSAgICBpZiAoYXV0byBp
bnRlZ2VyID0gY29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyPElu
dFR5cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUpKQotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVW
YWx1ZSgqaW50ZWdlciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIHJldHVybiBudWxs
cHRyOwotfQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVnZXJS
YW5nZT4KK3N0cnVjdCBJbnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJl
clRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBV
bml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENT
U1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IE51bWJlclRva2VuKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdXRvIGludGVnZXIg
PSBJbnRlZ2VyVHlwZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI8SW50VHlwZSwgaW50
ZWdlclJhbmdlPjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNl
ck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQorICAgICAgICAgICAgcmV0dXJuIHBvb2wu
Y3JlYXRlVmFsdWUoKmludGVnZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKIAogLy8gTUFSSzogTnVtYmVyIChSYXcpCiAKLXN0
YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsaWRhdGVkTnVtYmVyUmF3KGRvdWJsZSB2YWx1
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3
PiB2YWxpZGF0ZWROdW1iZXJSYXcoZG91YmxlIHZhbHVlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Up
CiB7CiAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgdmFs
dWUgPCAwKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiB2YWx1ZTsK
KyAgICByZXR1cm4ge3sgdmFsdWUgfX07CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJs
ZT4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHNvdXJjZVJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgYXV0byByYW5nZSA9IHNvdXJjZVJh
bmdlOwotICAgIGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCBzeW1ib2xUYWJs
ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxp
ZGF0ZWROdW1iZXJSYXcodmFsdWUtPmRvdWJsZVZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAg
ICAgICAgICBzb3VyY2VSYW5nZSA9IHJhbmdlOwotICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRl
ZFZhbHVlOworc3RydWN0IE51bWJlclJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVu
Y3Rpb25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1bWUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKworICAgICAgICBhdXRvIHJhbmdlQ29weSA9
IHJhbmdlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVDYWxjUmF3V2l0aEtub3du
VG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIs
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gdmFsaWRh
dGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodmFsdWUtPmRvdWJsZVZhbHVlKCksIHZhbHVl
UmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUNvcHk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAgICAgICAgICAgfQogICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLX0KLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVt
YmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0g
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwotICAgIAotICAg
IGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3KHJhbmdlLnBlZWso
KS5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUlu
Y2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworc3Ry
dWN0IE51bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVt
YmVyUmF3KHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAg
ICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICBy
ZXR1cm4gdmFsaWRhdGVkVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKLXN0YXRpYyBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUlk
ZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgQVNTRVJUKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbik7CitzdHJ1Y3QgTnVtYmVyUmF3S25vd25Ub2tl
blR5cGVJZGVudENvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2Vu
VHlwZSB0b2tlblR5cGUgPSBJZGVudFRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE51
bWJlclJhdz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJz
ZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7CisgICAgICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pOwogCi0gICAgaWYgKGF1
dG8gdmFyaWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7Ci0gICAg
ICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUjoKLSAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRh
dGVkTnVtYmVyUmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAg
ICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAg
IHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVr
KCkuaWQoKSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgICAgICAgICAgICAgaWYg
KGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodmFyaWFibGUtPnZhbHVl
LCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFs
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307
CiAKIC8vIE1BUks6IE51bWJlciAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxj
KQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQo
cmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBOdW1iZXJDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVu
Y3Rpb25Ub2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAg
ICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIAotICAg
IENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHZh
bHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKLSAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVW
YWx1ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKLX0KKyAgICAgICAg
Q2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFs
dWVSYW5nZSwgc3ltYm9sVGFibGUsIHBvb2wpOworICAgICAgICByZXR1cm4gcGFyc2VyLmNvbnN1
bWVWYWx1ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKKyAgICB9Cit9
OwogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50
eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwotICAgIAotICAgIGF1dG8gdG9rZW4gPSByYW5nZS5wZWVr
KCk7Ci0gICAgCi0gICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJS
YXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gdW5p
dFR5cGUgPSB0b2tlbi51bml0VHlwZSgpOwotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpOwotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqdmFsaWRhdGVk
VmFsdWUsIHVuaXRUeXBlKTsKK3N0cnVjdCBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
Q1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRpYyBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9v
bCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51
bWJlclRva2VuKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gdG9rZW4gPSByYW5nZS5wZWVrKCk7
CisgICAgICAgIAorICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51
bWJlclJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAg
IGF1dG8gdW5pdFR5cGUgPSB0b2tlbi51bml0VHlwZSgpOworICAgICAgICAgICAgcmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0
ZVZhbHVlKHZhbGlkYXRlZFZhbHVlLT52YWx1ZSwgdW5pdFR5cGUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK307CiAK
LQogLy8gTUFSSzogUGVyY2VudCAocmF3KQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+
IHZhbGlkYXRlZFBlcmNlbnRSYXcoZG91YmxlIHZhbHVlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Up
CitzdGF0aWMgc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiB2YWxpZGF0ZWRQZXJjZW50UmF3KGRv
dWJsZSB2YWx1ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewogICAgIGlmICh2YWx1ZVJhbmdl
ID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKICAgICBpZiAoc3RkOjppc2luZih2YWx1ZSkpCiAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHJldHVybiB7eyB2YWx1ZSB9
fTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhd1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHNvdXJjZVJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rp
b25Ub2tlbik7CitzdHJ1Y3QgUGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1l
ciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0g
RnVuY3Rpb25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiBjb25z
dW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBjb25zdCBhdXRvJiB0b2tl
biA9IHNvdXJjZVJhbmdlLnBlZWsoKTsKLSAgICBhdXRvIGZ1bmN0aW9uSWQgPSB0b2tlbi5mdW5j
dGlvbklkKCk7Ci0gICAgaWYgKCFDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKGZ1bmN0aW9u
SWQpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICBhdXRvIHJhbmdlQ29w
eSA9IHJhbmdlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVDYWxjUmF3V2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50LCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gcmFu
Z2VDb3B5OwogCi0gICAgYXV0byByYW5nZSA9IHNvdXJjZVJhbmdlOwotICAgIGF1dG8gY2FsY1Zh
bHVlID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoZnVuY3Rpb25JZCwgY29uc3VtZUZ1bmN0aW9uKHJh
bmdlKSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFi
bGUpOwotICAgIGlmIChjYWxjVmFsdWUgJiYgY2FsY1ZhbHVlLT5jYXRlZ29yeSgpID09IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpIHsKLSAgICAgICAgc291cmNlUmFuZ2UgPSByYW5nZTsK
LSAgICAgICAgcmV0dXJuIGNhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBTaG91bGQgdGhpcyB2YWxpZGF0ZSB0aGUgY2FsYyB2YWx1ZSBhcyBpcyBkb25lIGZv
ciB0aGUgTnVtYmVyUmF3IHZhcmlhbnQ/CisgICAgICAgICAgICByZXR1cm4ge3sgdmFsdWUtPmRv
dWJsZVZhbHVlKCkgfX07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogICAgIH0KK307CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorc3RydWN0IFBlcmNl
bnRSYXdLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gUGVyY2VudGFnZVRva2VuOworICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAg
eworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4p
OwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtu
b3duVG9rZW5UeXBlUGVyY2VudGFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkudHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbik7Ci0KLSAgICBpZiAoYXV0
byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51bWVy
aWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgewotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpOwotICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7CisgICAgICAgIGlm
IChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyhyYW5nZS5wZWVrKCku
bnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQotICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci19Cit9OwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+
IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJ
ZGVudFRva2VuKTsKK3N0cnVjdCBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVy
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBJ
ZGVudFRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBJZGVudFRva2VuKTsKIAotICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3lt
Ym9sVGFibGUuZ2V0KHJhbmdlLnBlZWsoKS5pZCgpKSkgewotICAgICAgICBzd2l0Y2ggKHZhcmlh
YmxlLT50eXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgot
ICAgICAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3
KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAgICAgICByYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiB2YWxp
ZGF0ZWRWYWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp
ZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZh
bGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVl
UmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0
ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotCiAv
LyBNQVJLOiBQZXJjZW50IChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWluaW5nIGNhbGMpCiAK
LXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFu
Z2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBQZXJjZW50Q1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0
aW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1
aXJrLCBVbml0bGVzc1plcm9RdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBD
YWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFs
dWVSYW5nZSwgc3ltYm9sVGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZh
bHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KTsKLX0KKyAgICAgICAg
Q2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZh
bHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5jb25z
dW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpOworICAgIH0K
K307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50Q1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5w
ZWVrKCkudHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbik7Ci0KLSAgICBpZiAoYXV0byB2YWxpZGF0
ZWRWYWx1ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgp
LCB2YWx1ZVJhbmdlKSkgewotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpOwotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqdmFsaWRhdGVkVmFsdWUsIENT
U1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CitzdHJ1Y3QgUGVyY2VudENTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXIgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IFBlcmNlbnRhZ2VUb2tl
bjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1
aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pOworICAgICAgICAKKyAgICAgICAgaWYgKGF1
dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHJhbmdlLnBlZWsoKS5udW1l
cmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNs
dWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSh2
YWxpZGF0ZWRWYWx1ZS0+dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBudWxscHRy
OwotfQorfTsKIAogLy8gTUFSSzogTGVuZ3RoIChyYXcpCiAKQEAgLTQ1MCw4MzEgKzQ1MCw5NDUg
QEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB2YWxpZGF0ZWRMZW5ndGhSYXcoZG91Ymxl
CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+
IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tl
blJhbmdlJiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrKQot
ewotICAgIGF1dG8gcmFuZ2UgPSBzb3VyY2VSYW5nZTsKLSAgICBpZiAoYXV0byB2YWx1ZSA9IGNv
bnN1bWVDYWxjUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aCwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHNv
dXJjZVJhbmdlID0gcmFuZ2U7Ci0gICAgICAgIHJldHVybiB7IHsgdmFsdWUtPnByaW1pdGl2ZVR5
cGUoKSwgdmFsdWUtPmRvdWJsZVZhbHVlKCkgfSB9Oworc3RydWN0IExlbmd0aFJhd0tub3duVG9r
ZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJU
b2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxMZW5ndGhSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0
IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwg
Q1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgewor
ICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKwor
ICAgICAgICBhdXRvIHJhbmdlQ29weSA9IHJhbmdlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9
IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAg
ICAgICAgICAgcmFuZ2UgPSByYW5nZUNvcHk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgdGhpcyB2YWxpZGF0ZSB0aGUgY2FsYyB2YWx1ZSBhcyBpcyBkb25lIGZvciB0aGUgTnVtYmVy
UmF3IHZhcmlhbnQ/CisgICAgICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBl
KCksIHZhbHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAot
c3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3du
VG9rZW5UeXBlRGltZW5zaW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1ND
YWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyaykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUo
KSA9PSBEaW1lbnNpb25Ub2tlbik7CitzdHJ1Y3QgTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVEaW1l
bnNpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUg
dG9rZW5UeXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVu
Z3RoUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxj
U3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbik7CiAKLSAgICBhdXRv
JiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVr
KCk7CiAKLSAgICBhdXRvIHVuaXRUeXBlID0gdG9rZW4udW5pdFR5cGUoKTsKLSAgICBzd2l0Y2gg
KHVuaXRUeXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1FVSVJLWV9FTVM6Ci0gICAg
ICAgIGlmIChwYXJzZXJNb2RlICE9IFVBU2hlZXRNb2RlKQorICAgICAgICBhdXRvIHVuaXRUeXBl
ID0gdG9rZW4udW5pdFR5cGUoKTsKKyAgICAgICAgc3dpdGNoICh1bml0VHlwZSkgeworICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKKyAgICAgICAgICAgIGlmIChwYXJz
ZXJNb2RlICE9IFVBU2hlZXRNb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0VNUzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CisgICAgICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19S
TEhTOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfSUM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6Cisg
ICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0NNOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06CisgICAgICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BU
OgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6CisgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19WVzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgorICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1ZNQVg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WQjoKKyAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1ZJOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZX
OgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZIOgorICAgICAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfU1ZNSU46CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVk1BWDoK
KyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWQjoKKyAgICAgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1NWSToKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWVzoKKyAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWSDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0xWTUlOOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZNQVg6CisgICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkI6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19MVkk6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVlc6CisgICAgICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19EVkg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVk1J
TjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWTUFYOgorICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfRFZCOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgor
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAg
RkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUkVNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19STEhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19D
SFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19FWFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19DTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
Vk1JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZJOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19TVlc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWSDoKLSAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NW
TUFYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1NWSToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZXOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19MVkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWTUlOOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
TFZCOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkk6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0RWVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZIOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19EVk1JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZNQVg6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWQjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
RFZJOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgorICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2
YWxpZGF0ZWRMZW5ndGhSYXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Cisg
ICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAg
ICAgcmV0dXJuIHsgeyB1bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKKyAgICAgICAgfQog
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KK307CiAKLSAgICBpZiAoYXV0byB2
YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwg
dmFsdWVSYW5nZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2Uo
KTsKLSAgICAgICAgcmV0dXJuIHsgeyB1bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK3N0cnVjdCBMZW5ndGhSYXdLbm93blRv
a2VuVHlwZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRv
a2VuVHlwZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxMZW5ndGhSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBw
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyaykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsK
IAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1ND
YWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CisgICAgICAgIGF1dG8mIHRva2VuID0gcmFuZ2Uu
cGVlaygpOwogCi0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgICAgIGlmICgh
c2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgcGFyc2VyTW9k
ZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpCisgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogCi0gICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHRv
a2VuLm51bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVp
cms6OkFsbG93KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRM
ZW5ndGhSYXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAg
ICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJu
IHsgeyBDU1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OworICAgICAgICB9
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRW
YWx1ZSA9IHZhbGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5n
ZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAg
ICAgcmV0dXJuIHsgeyBDU1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9Owog
ICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAogLy8gTUFSSzogTGVuZ3Ro
IChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWluaW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNv
bnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQotewot
ICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworc3RydWN0
IExlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bkNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tl
blR5cGUgPSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9r
ZW4pOwogCi0gICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Okxlbmd0aCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJz
ZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOwot
fQorICAgICAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TGVuZ3RoLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBw
YXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgp
OworICAgIH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVM
ZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9u
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKK3N0cnVjdCBMZW5n
dGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29u
c3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlw
ZSA9IERpbWVuc2lvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBw
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0
bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5n
ZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotICAgIGlmIChhdXRvIGxlbmd0
aFJhdyA9IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2Us
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcykpCi0gICAgICAg
IHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlw
ZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9
IExlbmd0aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2Us
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3Na
ZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFs
dWUsIGxlbmd0aFJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307
CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmlt
aXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IE51bWJlclRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAg
IHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
IHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYg
cG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJl
clRva2VuKTsKIAotICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IGNvbnN1bWVMZW5ndGhSYXdXaXRo
S25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcykpCi0gICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0
aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Cisg
ICAgICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBlTnVtYmVy
Q29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJN
b2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNy
ZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KK307CiAKIC8vIE1BUks6IEFuZ2xlIChyYXcpCiAKLXN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJz
ZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKLXsKLSAgICBhdXRvIHJh
bmdlID0gc291cmNlUmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmds
ZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHNvdXJjZVJhbmdlID0gcmFu
Z2U7Ci0gICAgICAgIHJldHVybiB7IHsgdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgdmFsdWUtPmRv
dWJsZVZhbHVlKCkgfSB9Oworc3RydWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNv
bnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5
cGUgPSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBj
b25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVu
aXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgYXV0byByYW5n
ZUNvcHkgPSByYW5nZTsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
QW5nbGUsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgcmFuZ2UgPSBy
YW5nZUNvcHk7CisgICAgICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCks
IHZhbHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2Vu
VHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5
bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5p
dGxlc3NaZXJvUXVpcmspCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGlt
ZW5zaW9uVG9rZW4pOworc3RydWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25z
dW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBl
ID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNv
bnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYsIFZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVy
b1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGlt
ZW5zaW9uVG9rZW4pOwogCi0gICAgYXV0byB1bml0VHlwZSA9IHJhbmdlLnBlZWsoKS51bml0VHlw
ZSgpOwotICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
REVHOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0dSQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAgIHJl
dHVybiB7IHsgdW5pdFR5cGUsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVt
ZXJpY1ZhbHVlKCkgfSB9OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICBh
dXRvIHVuaXRUeXBlID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7CisgICAgICAgIHN3aXRjaCAo
dW5pdFR5cGUpIHsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICAgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0dSQUQ6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAgICAgICAgICAg
cmV0dXJuIHsgeyB1bml0VHlwZSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5u
dW1lcmljVmFsdWUoKSB9IH07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQorfTsKK3N0
cnVjdCBBbmdsZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJz
ZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1
aXJrIHVuaXRsZXNzWmVybykKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IE51bWJlclRva2VuKTsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19CisgICAg
ICAgIGlmIChzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmljVmFs
dWUoKSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICBy
ZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9Cit9OwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFu
Z2xlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRs
ZXNzWmVybykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tl
bik7Ci0KLSAgICBpZiAoc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZShyYW5nZS5wZWVrKCkubnVt
ZXJpY1ZhbHVlKCksIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQotICAgICAg
ICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotfQotCiAvLyBNQVJLOiBBbmdsZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBj
YWxjKQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5p
dGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBBbmdsZUNTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyIHsKKyAgICBz
dGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBGdW5jdGlvblRv
a2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
VW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCi0gICAgQ2FsY1Bh
cnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdl
LCBzeW1ib2xUYWJsZSwgcG9vbCk7Ci0gICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNh
dGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKTsKLX0KKyAgICAgICAgQ2FsY1BhcnNl
ciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdlLCBz
eW1ib2xUYWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZD
YXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSk7CisgICAgfQorfTsKIAotc3RhdGlj
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2
YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQot
ewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKK3N0
cnVjdCBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1l
bnNpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUg
dG9rZW5UeXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJz
ZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1
aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOwogCi0gICAgaWYgKGF1
dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24o
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYW5nbGVSYXctPnZh
bHVlLCBhbmdsZVJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlm
IChhdXRvIGFuZ2xlUmF3ID0gQW5nbGVSYXdLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVy
Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5p
dGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1
ZShhbmdsZVJhdy0+dmFsdWUsIGFuZ2xlUmF3LT50eXBlKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorfTsKIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUs
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywg
Q1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IE51bWJlclRva2VuKTsKK3N0cnVjdCBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQ
YXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gTnVtYmVyVG9rZW47CisgICAgc3RhdGljIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVu
aXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwogCi0g
ICAgaWYgKGF1dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVO
dW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVz
cywgdW5pdGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYW5nbGVS
YXctPnZhbHVlLCBhbmdsZVJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAg
ICAgIGlmIChhdXRvIGFuZ2xlUmF3ID0gQW5nbGVSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1
bWVyOjpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVW
YWx1ZShhbmdsZVJhdy0+dmFsdWUsIGFuZ2xlUmF3LT50eXBlKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorfTsKIAotCiAvLyBNQVJLOiBUaW1lIChDU1NQcmltaXRpdmVWYWx1ZSAt
IG1haW50YWluaW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0YXRpYyBj
b25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9rZW47Cisg
ICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVz
c1plcm9RdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJh
bmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBDYWxjUGFyc2VyIHBh
cnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZSwgdmFsdWVSYW5nZSwgc3ltYm9s
VGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShD
YWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lKTsKLX0KKyAgICAgICAgQ2FsY1BhcnNlciBwYXJzZXIo
cmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWUsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxl
LCBwb29sKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWUpOworICAgIH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhL
bm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOworc3RydWN0IFRpbWVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIgeworICAg
IHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERpbWVuc2lv
blRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3Na
ZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5n
ZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotICAgIGlmICh2YWx1ZVJhbmdl
ID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUo
KSA8IDApCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAodmFsdWVSYW5nZSA9
PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkg
PCAwKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoYXV0byB1bml0ID0g
cmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19NUyB8fCB1
bml0ID09IENTU1VuaXRUeXBlOjpDU1NfUykKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFs
dWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5p
dCk7CisgICAgICAgIGlmIChhdXRvIHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5p
dCA9PSBDU1NVbml0VHlwZTo6Q1NTX01TIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19TKQor
ICAgICAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CiAKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKIAotc3RhdGljIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1v
ZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29s
KQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKK3N0
cnVjdCBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJl
ckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tl
blR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9s
VGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYg
cG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJl
clRva2VuKTsKIAotICAgIGlmICh1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdyAmJiBz
aG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgcGFy
c2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpIHsKLSAgICAgICAg
aWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgcmFuZ2UucGVlaygp
Lm51bWVyaWNWYWx1ZSgpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpLm51bWVyaWNWYWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX01TKTsKKyAgICAgICAgaWYgKHVu
aXRsZXNzID09IFVuaXRsZXNzUXVpcms6OkFsbG93ICYmIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFs
dWUocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5p
dGxlc3NaZXJvUXVpcms6OkFsbG93KSkgeworICAgICAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0g
VmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgcmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpIDwg
MCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBw
b29sLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJp
Y1ZhbHVlKCksIENTU1VuaXRUeXBlOjpDU1NfTVMpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK307CiAKIC8vIE1BUks6
IFJlc29sdXRpb24gKENTU1ByaW1pdGl2ZVZhbHVlIC0gbm8gY2FsYykKIAotc3RhdGljIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb25DU1NQcmltaXRpdmVWYWx1ZVdp
dGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
VmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERp
bWVuc2lvblRva2VuKTsKK3N0cnVjdCBSZXNvbHV0aW9uQ1NTUHJpbWl0aXZlVmFsdWVXaXRoS25v
d25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQ
YXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2Vu
KTsKIAotICAgIGlmIChhdXRvIHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9
PSBDU1NVbml0VHlwZTo6Q1NTX0RQUFggfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX1ggfHwg
dW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX0RQSSB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1Nf
RFBDTSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CisgICAgICAgIGlmIChhdXRv
IHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NT
X0RQUFggfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX1ggfHwgdW5pdCA9PSBDU1NVbml0VHlw
ZTo6Q1NTX0RQSSB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfRFBDTSkKKyAgICAgICAgICAg
IHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCkubnVtZXJpY1ZhbHVlKCksIHVuaXQpOwogCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKKy8vIE1BUks6IFNwZWNpYWxpemVkIGNv
bWJpbmF0aW9uIGNvbnN1bWVycy4KIAotLy8gTUFSSzogLSBQcmltaXRpdmUgdmFsdWUgY29uc3Vt
ZXJzIGZvciBjYWxsZXJzIHRoYXQgZG8gTk9UIGtub3cgdGhlIHRva2VuIHR5cGUuCisvLyBGSVhN
RTogSXQgd291bGQgYmUgZ29vZCB0byBmaW5kIGEgd2F5IHRvIHN5bnRoZXNpemUgdGhpcyBmcm9t
IGFuIGFuZ2xlIGFuZCBudW1iZXIgc3BlY2lmaWMgdmFyaWFudHMuCitzdHJ1Y3QgQW5nbGVPck51
bWJlclJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gSWRlbnRUb2tlbjsKKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxBbmdsZU9yTnVtYmVyUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJh
bmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAg
ICB7CisgICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0KHJhbmdlLnBl
ZWsoKS5pZCgpKSkgeworICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkgeworICAg
ICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICAgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19SQUQ6CisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JB
RDoKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAgICAgICAgICAg
ICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIEFuZ2xlUmF3IHsgdmFyaWFibGUtPnR5cGUsIHZhcmlhYmxlLT52YWx1ZSB9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJ
bnRlZ2VyVHlwZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1W
YWx1ZSkKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICAgICAgICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyUmF3
IHsgdmFyaWFibGUtPnZhbHVlIH07CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAg
IGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZVJh
d1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uPEludFR5cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUp
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJu
IGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcjxJbnRUeXBlPihy
YW5nZSwgbWluaW11bVZhbHVlKTsKLSAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLX0KKy8vIEZJWE1FOiBJdCB3b3VsZCBiZSBnb29kIHRvIGZpbmQgYSB3YXkg
dG8gc3ludGhlc2l6ZSB0aGlzIGZyb20gYW4gbnVtYmVyIGFuZCBwZXJjZW50IHNwZWNpZmljIHZh
cmlhbnRzLgorc3RydWN0IE51bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25z
dW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBl
ID0gSWRlbnRUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJPclBlcmNlbnRS
YXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBpZiAo
YXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlk
YXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFu
Z2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7eyAqdmFsaWRhdGVkVmFsdWUgfX07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBJbnRUeXBlPiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2Vy
VHlwZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSwgQ1NT
VmFsdWVQb29sJiBwb29sKQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAg
ICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICAgICAgICAgICAgICBp
ZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh2YXJpYWJsZS0+dmFs
dWUsIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNs
dWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7eyAqdmFsaWRh
dGVkVmFsdWUgfX07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0g
ICAgICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb248SW50VHlwZT4ocmFuZ2UsIG1pbmltdW1WYWx1ZSwg
cG9vbCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICBy
ZXR1cm4gY29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZU51bWJlcjxJbnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlLCBwb29sKTsKLQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogICAgIH0KK307CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKy8vIE1BUks6IC0gTWV0YSBD
b25zdW1lcnMKIAotc3RkOjpvcHRpb25hbDxpbnQ+IGNvbnN1bWVJbnRlZ2VyUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUgbWluaW11bVZhbHVlKQotewotICAgIHJldHVybiBj
b25zdW1lSW50ZWdlclR5cGVSYXc8aW50PihyYW5nZSwgbWluaW11bVZhbHVlKTsKLX0KK3RlbXBs
YXRlPHR5cGVuYW1lIENvbnN1bWVyLCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgVHJhbnNmb3Jt
QXBwbGllciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGRlY2x0eXBlKGF1dG8p
IGFwcGx5KFQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OwogCi1SZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3Vi
bGUgbWluaW11bVZhbHVlKQotewotICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGU8aW50Pihy
YW5nZSwgbWluaW11bVZhbHVlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLX0KK3RlbXBs
YXRlPHR5cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IFRyYW5zZm9ybUFwcGxpZXI8Q29uc3VtZXIs
IHR5cGVuYW1lIHN0ZDo6dm9pZF90PHR5cGVuYW1lIENvbnN1bWVyOjpUcmFuc2Zvcm1lcj4+IHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgZGVjbHR5cGUoYXV0bykgYXBwbHkoVCB2
YWx1ZSkgeyByZXR1cm4gQ29uc3VtZXI6OlRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0odmFsdWUpOyB9
Cit9OwogCi1zdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3VtZXIs
IHR5cGVuYW1lIFQ+CitzdGF0aWMgZGVjbHR5cGUoYXV0bykgYXBwbHlUcmFuc2Zvcm0oVCB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PHVuc2lnbmVkPihyYW5nZSwg
MSk7CisgICAgcmV0dXJuIFRyYW5zZm9ybUFwcGxpZXI8Q29uc3VtZXI+OjphcHBseSh2YWx1ZSk7
CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUludGVnZXJU
eXBlPHVuc2lnbmVkPihyYW5nZSwgMSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci19Cisv
LyBUcmFuc2Zvcm1lcnM6CiAKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0g
ICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Ry
dWN0IElkZW50aXR5VHJhbnNmb3JtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFQ7CisgICAgc3Rh
dGljIFQgdHJhbnNmb3JtKFQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OwogCi0gICAgc3dp
dGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJl
dHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQsIHR5cGVuYW1lIFJlc3Vs
dFR5cGUsIHR5cGVuYW1lIFZhcmlhbnRUeXBlPgorc3RydWN0IFJhd1ZhcmlhbnRUcmFuc2Zvcm1l
ckJhc2UgeworICAgIHVzaW5nIFJlc3VsdCA9IFJlc3VsdFR5cGU7CiAKLSAgICBjYXNlIE51bWJl
clRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlw
ZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKTsKKyAgICBzdGF0aWMgUmVzdWx0IHRyYW5z
Zm9ybShWYXJpYW50VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKHZhbHVlLCBbXSAoYXV0byB2YWx1ZSkgeyByZXR1cm4gUGFyZW50Ojp0cmFuc2Zvcm0odmFs
dWUpOyB9KTsKKyAgICB9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICBzdGF0
aWMgdHlwZW5hbWUgUmVzdWx0Ojp2YWx1ZV90eXBlIHRyYW5zZm9ybSh0eXBlbmFtZSBSZXN1bHQ6
OnZhbHVlX3R5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQog
Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHN0YXRpYyBSZXN1bHQgdHJhbnNmb3JtKHN0ZDo6b3B0aW9uYWw8VD4gdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gUGFyZW50Ojp0cmFuc2Zv
cm0oKnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OwogCi1S
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKK3N0cnVjdCBBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXIg
OiBSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlPEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFu
c2Zvcm1lciwgc3RkOjpvcHRpb25hbDxkb3VibGU+LCBBbmdsZU9yTnVtYmVyUmF3PiB7CisgICAg
dXNpbmcgUmF3VmFyaWFudFRyYW5zZm9ybWVyQmFzZTxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNz
VHJhbnNmb3JtZXIsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiwgQW5nbGVPck51bWJlclJhdz46OnRy
YW5zZm9ybTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlv
blRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKyAgICBzdGF0aWMgZG91YmxlIHRyYW5zZm9ybShB
bmdsZVJhdyBhbmdsZVJhdykKKyAgICB7CisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZURlZ3JlZXMoYW5nbGVSYXcudHlwZSwgYW5nbGVSYXcudmFsdWUpOworICAgIH0K
IAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9
LCB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOworICAgIHN0YXRpYyBkb3VibGUgdHJhbnNmb3JtKE51bWJlclJhdyB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTsKICAgICB9Cit9OwogCi0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19CitzdHJ1Y3QgTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAw
VHJhbnNmb3JtZXIgOiBSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlPE51bWJlck9yUGVyY2VudERp
dmlkZWRCeTEwMFRyYW5zZm9ybWVyLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4sIE51bWJlck9yUGVy
Y2VudFJhdz4geworICAgIHVzaW5nIFJhd1ZhcmlhbnRUcmFuc2Zvcm1lckJhc2U8TnVtYmVyT3JQ
ZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXIsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiwgTnVt
YmVyT3JQZXJjZW50UmF3Pjo6dHJhbnNmb3JtOwogCi1zdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4g
Y29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9k
ZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MpCi17Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgCi0gICAgc3dpdGNo
ICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVy
biBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOworICAgIHN0YXRpYyBkb3VibGUgdHJh
bnNmb3JtKE51bWJlclJhdyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1
ZTsKKyAgICB9CiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29u
c3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1
ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcyk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJUb2tl
bjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1i
ZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOwotCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgc3RhdGljIGRvdWJsZSB0cmFuc2Zvcm0oUGVy
Y2VudFJhdyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSAvIDEwMC4w
OwogICAgIH0KK307CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorLy8gTUFSSzogTWV0
YUNvbnN1bWVySW1wbAogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQotewotICAgIGF1dG8m
IHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8Q1NTUGFyc2VyVG9rZW5UeXBlIHRva2Vu
VHlwZSwgdHlwZW5hbWUgQ29uc3VtZXIsIHR5cGVuYW1lID0gdm9pZD4KK3N0cnVjdCBNZXRhQ29u
c3VtZXJJbXBsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyB0
eXBlbmFtZSBDb25zdW1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsK
LSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7
IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IE1ldGFDb25zdW1l
ckltcGw8RnVuY3Rpb25Ub2tlbiwgQ29uc3VtZXIsIHR5cGVuYW1lIHN0ZDo6dm9pZF90PHR5cGVu
YW1lIENvbnN1bWVyOjpGdW5jdGlvblRva2VuPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQgY29uc3VtZShBcmdz
JiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBhcHBseVRyYW5zZm9ybTxDb25zdW1l
cj4oQ29uc3VtZXI6OkZ1bmN0aW9uVG9rZW46OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKSk7CisgICAgfQorfTsKIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAg
IHJldHVybiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0
bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJU
b2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNl
ck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IE1ldGFDb25zdW1lckltcGw8TnVtYmVyVG9rZW4sIENv
bnN1bWVyLCB0eXBlbmFtZSBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBDb25zdW1lcjo6TnVtYmVyVG9r
ZW4+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgdHlwZW5h
bWUgQ29uc3VtZXI6OlJlc3VsdCBjb25zdW1lKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFwcGx5VHJhbnNmb3JtPENvbnN1bWVyPihDb25zdW1lcjo6TnVtYmVyVG9rZW46
OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7CisgICAgfQorfTsKIAotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3VtZXI+Citz
dHJ1Y3QgTWV0YUNvbnN1bWVySW1wbDxQZXJjZW50YWdlVG9rZW4sIENvbnN1bWVyLCB0eXBlbmFt
ZSBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBDb25zdW1lcjo6UGVyY2VudGFnZVRva2VuPj4geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1lIENvbnN1bWVy
OjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBh
cHBseVRyYW5zZm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6OlBlcmNlbnRhZ2VUb2tlbjo6Y29uc3Vt
ZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsKICAgICB9Cit9OwogCi0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdW1lcj4KK3N0cnVjdCBNZXRhQ29u
c3VtZXJJbXBsPERpbWVuc2lvblRva2VuLCBDb25zdW1lciwgdHlwZW5hbWUgc3RkOjp2b2lkX3Q8
dHlwZW5hbWUgQ29uc3VtZXI6OkRpbWVuc2lvblRva2VuPj4geworICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQgY29uc3Vt
ZShBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBhcHBseVRyYW5zZm9ybTxD
b25zdW1lcj4oQ29uc3VtZXI6OkRpbWVuc2lvblRva2VuOjpjb25zdW1lKHN0ZDo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLikpOworICAgIH0KK307CiAKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25z
dW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlKQotewotICAgIGNvbnN0IGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxh
dGU8dHlwZW5hbWUgQ29uc3VtZXI+CitzdHJ1Y3QgTWV0YUNvbnN1bWVySW1wbDxJZGVudFRva2Vu
LCBDb25zdW1lciwgdHlwZW5hbWUgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgQ29uc3VtZXI6OklkZW50
VG9rZW4+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgdHlw
ZW5hbWUgQ29uc3VtZXI6OlJlc3VsdCBjb25zdW1lKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFwcGx5VHJhbnNmb3JtPENvbnN1bWVyPihDb25zdW1lcjo6SWRlbnRUb2tl
bjo6Y29uc3VtZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsKKyAgICB9Cit9OwogCi0g
ICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyLCB0
eXBlbmFtZS4uLiBBcmdzPgorYXV0byBjb25zdW1lTWV0YUNvbnN1bWVyKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBBcmdzJiYuLi4gYXJn
cykgLT4gdHlwZW5hbWUgQ29uc3VtZXI6OlJlc3VsdAoreworICAgIHN3aXRjaCAocmFuZ2UucGVl
aygpLnR5cGUoKSkgewogICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNv
bnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFs
dWVSYW5nZSk7CisgICAgICAgIHJldHVybiBNZXRhQ29uc3VtZXJJbXBsPEZ1bmN0aW9uVG9rZW4s
IENvbnN1bWVyPjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNl
ck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
Lik7CiAKKyAgICBjYXNlIE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gTWV0YUNvbnN1bWVy
SW1wbDxOdW1iZXJUb2tlbiwgQ29uc3VtZXI+Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwg
dmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgc3RkOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKwogICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAg
ICByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UpOworICAgICAgICByZXR1cm4gTWV0YUNvbnN1bWVySW1wbDxQ
ZXJjZW50YWdlVG9rZW4sIENvbnN1bWVyPjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZh
bHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2Fy
ZDxBcmdzPihhcmdzKS4uLik7CiAKKyAgICBjYXNlIERpbWVuc2lvblRva2VuOgorICAgICAgICBy
ZXR1cm4gTWV0YUNvbnN1bWVySW1wbDxEaW1lbnNpb25Ub2tlbiwgQ29uc3VtZXI+Ojpjb25zdW1l
KHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVu
aXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKworICAgIGNhc2UgSWRl
bnRUb2tlbjoKKyAgICAgICAgcmV0dXJuIE1ldGFDb25zdW1lckltcGw8SWRlbnRUb2tlbiwgQ29u
c3VtZXI+Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9k
ZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsK
KyAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50V29ya2VyU2Fm
ZShyYW5nZSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci19CisvLyBN
QVJLOiBTYW1lVG9rZW5NZXRhQ29uc3VtZXIKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lUGVyY2VudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIGF1dG8mIHRva2Vu
ID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXIsIHR5cGVuYW1l
IENvbnN1bWVyc1R1cGxlLCBzaXplX3QgST4KK3N0cnVjdCBTYW1lVG9rZW5NZXRhQ29uc3VtZXJJ
bXBsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyB0eXBlbmFt
ZSBUcmFuc2Zvcm1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAg
ICAgICB1c2luZyBTZWxlY3RlZENvbnN1bWVyID0gc3RkOjp0dXBsZV9lbGVtZW50X3Q8SSAtIDEs
IENvbnN1bWVyc1R1cGxlPjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gVHJhbnNmb3JtZXI6
OnRyYW5zZm9ybShTZWxlY3RlZENvbnN1bWVyOjpjb25zdW1lKHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLikpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIFNh
bWVUb2tlbk1ldGFDb25zdW1lckltcGw8VHJhbnNmb3JtZXIsIENvbnN1bWVyc1R1cGxlLCBJIC0g
MT46OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICB9Cit9OwogCi0g
ICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwb29sKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFRyYW5zZm9ybWVyLCB0eXBlbmFtZSBDb25zdW1lcnNUdXBsZT4KK3N0cnVj
dCBTYW1lVG9rZW5NZXRhQ29uc3VtZXJJbXBsPFRyYW5zZm9ybWVyLCBDb25zdW1lcnNUdXBsZSwg
MD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1l
IFRyYW5zZm9ybWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4pCisgICAgeworICAgICAgICBy
ZXR1cm4gdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdCB7IH07CisgICAgfQorfTsKIAotICAg
IGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwg
eyB9LCB2YWx1ZVJhbmdlLCBwb29sKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYW5zZm9ybWVyLCB0
eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KK3N0cnVjdCBTYW1lVG9rZW5NZXRhQ29uc3VtZXIg
eworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpjb25qdW5jdGlvbl92PHN0ZDo6Ym9vbF9jb25zdGFu
dDxUczo6dG9rZW5UeXBlID09IFQ6OnRva2VuVHlwZT4uLi4+LCAiQWxsIENvbnN1bWVycyBwYXNz
ZWQgdG8gU2FtZVRva2VuTWV0YUNvbnN1bWVyIG11c3QgaGF2ZSB0aGUgc2FtZSB0b2tlblR5cGUi
KTsKKyAgICB1c2luZyBDb25zdW1lcnNUdXBsZSA9IHN0ZDo6dHVwbGU8VCwgVHMuLi4+OwogCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJz
ZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gVDo6dG9rZW5UeXBlOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQgY29u
c3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNl
ck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNz
WmVybywgQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSB0b2tlblR5cGUpOworICAgICAgICByZXR1cm4gU2FtZVRva2VuTWV0YUNvbnN1
bWVySW1wbDxUcmFuc2Zvcm1lciwgQ29uc3VtZXJzVHVwbGUsIHN0ZDo6dHVwbGVfc2l6ZV92PENv
bnN1bWVyc1R1cGxlPj46OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBw
YXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJn
cykuLi4pOwogICAgIH0KK307CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KIAotc3RkOjpvcHRp
b25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRs
ZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBl
ZWsoKTsKKy8vIE1BUks6IC0gQ29uc3VtZXIgZGVmaW5pdGlvbnMuCiAKLSAgICBzd2l0Y2ggKHRv
a2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNv
bnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVl
UmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7CisvLyBNQVJL
OiBJbnRlZ2VyCiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29u
c3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIFZhbHVl
UmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBJbnRUeXBlLCBJbnRlZ2VyUmFuZ2UgaW50ZXJnZXJSYW5nZT4KK3N0cnVjdCBJ
bnRlZ2VyVHlwZVJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFs
PEludFR5cGU+OwogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1
bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdl
OjpBbGwsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pOwotICAgICAgICBicmVh
azsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gSW50ZWdlclR5cGVSYXdLbm93blRva2VuVHlw
ZUZ1bmN0aW9uQ29uc3VtZXI8SW50VHlwZSwgaW50ZXJnZXJSYW5nZT47CisgICAgdXNpbmcgTnVt
YmVyVG9rZW4gPSBJbnRlZ2VyVHlwZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI8SW50
VHlwZSwgaW50ZXJnZXJSYW5nZT47Cit9OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVyZ2Vy
UmFuZ2U+CitzdHJ1Y3QgSW50ZWdlclR5cGVDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0g
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19
CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IEludGVnZXJUeXBlS25vd25Ub2tlblR5cGVGdW5j
dGlvbkNvbnN1bWVyPEludFR5cGUsIGludGVyZ2VyUmFuZ2U+OworICAgIHVzaW5nIE51bWJlclRv
a2VuID0gSW50ZWdlclR5cGVLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyPEludFR5cGUsIGlu
dGVyZ2VyUmFuZ2U+OworfTsKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5n
bGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQot
ewotICAgIHJldHVybiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKHJhbmdlLCBwYXJzZXJNb2RlLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKLX0KKy8v
IE1BUks6IE51bWJlcgogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdv
cmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2Vy
TW9kZSwgQ1NTVmFsdWVQb29sJiBwb29sLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVz
c1plcm9RdWlyayB1bml0bGVzc1plcm8pCi17Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVr
KCk7CitzdHJ1Y3QgTnVtYmVyUmF3Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6
b3B0aW9uYWw8TnVtYmVyUmF3PjsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAg
Y2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIFZh
bHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7
CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IE51bWJlclJhd0tub3duVG9rZW5UeXBlRnVuY3Rp
b25Db25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IE51bWJlclJhd0tub3duVG9rZW5U
eXBlTnVtYmVyQ29uc3VtZXI7Cit9OwogCi0gICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKLSAgICAg
ICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBwb29sKTsKK3N0cnVjdCBOdW1iZXJSYXdBbGxvd2lu
Z1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lciA6IE51bWJlclJhd0NvbnN1bWVyIHsKKyAgICB1c2lu
ZyBJZGVudFRva2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyOworfTsK
IAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0s
IFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9v
bCk7Ci0gICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBudWxscHRyOwotfQorc3RydWN0IE51bWJlckNvbnN1bWVyIHsKKyAgICB1c2luZyBS
ZXN1bHQgPSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+OwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVUaW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJN
b2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0
bGVzcykKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB1c2luZyBGdW5j
dGlvblRva2VuID0gTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uQ29uc3VtZXI7CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBOdW1iZXJDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7Cit9
OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisvLyBNQVJLOiBQZXJjZW50
CiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVRpbWVD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdl
LCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpKTsKK3N0cnVjdCBQZXJjZW50UmF3Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3Vs
dCA9IHN0ZDo6b3B0aW9uYWw8UGVyY2VudFJhdz47CiAKLSAgICBjYXNlIE51bWJlclRva2VuOgot
ICAgICAgICByZXR1cm4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVu
aXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKyAgICB1c2luZyBGdW5jdGlvblRv
a2VuID0gUGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2lu
ZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3Vt
ZXI7Cit9OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBudWxscHRyOwotfQorc3RydWN0IFBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxl
SWRlbnRDb25zdW1lciA6IFBlcmNlbnRSYXdDb25zdW1lciB7CisgICAgdXNpbmcgSWRlbnRUb2tl
biA9IFBlcmNlbnRSYXdLbm93blRva2VuVHlwZUlkZW50Q29uc3VtZXI7Cit9OwogCi1SZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVSZXNvbHV0aW9uKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQotewotICAgIC8vIE5PVEU6IFVubGlrZSB0aGUgb3RoZXIgdHlwZXMsIGNhbGMoKSBk
b2VzIG5vdCB3b3JrIHdpdGggPHJlc29sdXRpb24+Lgorc3RydWN0IFBlcmNlbnRDb25zdW1lciB7
CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsKIAotICAgIGF1
dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBQZXJj
ZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29u
c3VtZXI7CisgICAgdXNpbmcgUGVyY2VudGFnZVRva2VuID0gUGVyY2VudENTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXI7Cit9OwogCi0gICAg
c3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAg
ICByZXR1cm4gY29uc3VtZVJlc29sdXRpb25DU1NQcmltaXRpdmVWYWx1ZVdpdGhLbm93blRva2Vu
VHlwZURpbWVuc2lvbihyYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci0gICAgCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorLy8gTUFSSzogTGVuZ3RoCiAKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KK3N0cnVjdCBMZW5ndGhSYXdDb25zdW1lciB7CisgICAgdXNp
bmcgUmVzdWx0ID0gc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+OwogCi0vLyBNQVJLOiAtIENvbWJp
bmF0aW9uIGNvbnN1bWVycyAodG9rZW4gdHlwZSB1bmtub3duIGJ5IGNhbGxlcikuCisgICAgdXNp
bmcgRnVuY3Rpb25Ub2tlbiA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1l
cjsKKyAgICB1c2luZyBEaW1lbnNpb25Ub2tlbiA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBlRGlt
ZW5zaW9uQ29uc3VtZXI7CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBMZW5ndGhSYXdLbm93blRv
a2VuVHlwZU51bWJlckNvbnN1bWVyOworfTsKIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUFuZ2xlT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
U1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NR
dWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBv
b2wmIHBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKQotewotICAgIGF1dG8mIHRva2Vu
ID0gcmFuZ2UucGVlaygpOworc3RydWN0IExlbmd0aENvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1
bHQgPSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBl
KCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhbHVlID0g
Y29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0
bGVzc1plcm8sIHBvb2wpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICByZXR1
cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcG9vbCk7CisgICAgdXNpbmcgRnVu
Y3Rpb25Ub2tlbiA9IExlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgIHVzaW5nIE51bWJlclRva2VuID0gTGVuZ3RoQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOwor
ICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOworfTsKIAotICAgIGNhc2UgRGlt
ZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFu
Z2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpOwotICAgIAotICAg
IGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVl
UmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpOworLy8gTUFS
SzogQW5nbGUKIAotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4gY29u
c3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlUGVy
Y2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwb29sKTsKLSAgICAKLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9CitzdHJ1Y3QgQW5nbGVSYXdDb25zdW1lciB7CisgICAg
dXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25hbDxBbmdsZVJhdz47CiAKLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gQW5nbGVSYXdLbm93blRva2VuVHlw
ZUZ1bmN0aW9uQ29uc3VtZXI7CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBBbmdsZVJhd0tub3du
VG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7CisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBBbmds
ZVJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI7Cit9OwogCi1zdGQ6Om9wdGlvbmFs
PExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCi17Ci0gICAgYXV0byBjb252ZXJ0VG9M
ZW5ndGhPclBlcmNlbnRSYXcgPSBbXShhdXRvIHJlc3VsdCkgLT4gc3RkOjpvcHRpb25hbDxMZW5n
dGhPclBlcmNlbnRSYXc+IHsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVy
biB7ICpyZXN1bHQgfTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Oworc3Ry
dWN0IEFuZ2xlQ29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT47CiAKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB1c2luZyBG
dW5jdGlvblRva2VuID0gQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IEFuZ2xlQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOwor
ICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI7Cit9OwogCi0gICAgc3dpdGNoICh0
b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKLSAgICAgICAgaWYgKGF1
dG8gbGVuZ3RoID0gY29uc3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzKSkKLSAgICAgICAgICAg
IHJldHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcobGVuZ3RoKTsKLSAgICAgICAgaWYg
KGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gY29udmVydFRv
TGVuZ3RoT3JQZXJjZW50UmF3KHBlcmNlbnQpOwotICAgICAgICBicmVhazsKLSAgICB9CisvLyBN
QVJLOiBUaW1lCiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29u
dmVydFRvTGVuZ3RoT3JQZXJjZW50UmF3KGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5
cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Mp
KTsKLSAgICAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29udmVydFRv
TGVuZ3RoT3JQZXJjZW50UmF3KGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1i
ZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpKTsKK3N0cnVj
dCBUaW1lQ29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT47CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb0xlbmd0aE9yUGVyY2VudFJhdyhjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlw
ZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpOworICAgIHVzaW5nIEZ1bmN0aW9u
VG9rZW4gPSBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uQ29uc3VtZXI7CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBUaW1lQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOworICAgIHVzaW5n
IERpbWVuc2lvblRva2VuID0gVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKK307CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9CisvLyBNQVJLOiBSZXNvbHV0aW9uCiAKLSAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotfQorc3RydWN0IFJlc29sdXRpb25Db25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0g
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJz
ZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1
bml0bGVzcywgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UpCi17Ci0gICAgYXV0byYgdG9r
ZW4gPSByYW5nZS5wZWVrKCk7CisgICAgLy8gTk9URTogVW5saWtlIHRoZSBvdGhlciB0eXBlcywg
Y2FsYygpIGRvZXMgbm90IHdvcmsgd2l0aCA8cmVzb2x1dGlvbj4uCisgICAgdXNpbmcgRGltZW5z
aW9uVG9rZW4gPSBSZXNvbHV0aW9uQ1NTUHJpbWl0aXZlVmFsdWVXaXRoS25vd25Ub2tlblR5cGVE
aW1lbnNpb25Db25zdW1lcjsKK307CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAg
IGNhc2UgRnVuY3Rpb25Ub2tlbjogewotICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUg
dXNpbmcgdHJ5aW5nIHRvIGdlbmVyYXRlIHRoZSBjYWxjIHdpdGggYm90aCBMZW5ndGggYW5kIFBl
cmNlbnQgZGVzdGluYXRpb24gY2F0ZWdvcnkgdHlwZXM/Ci0gICAgICAgIENhbGNQYXJzZXIgcGFy
c2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UsIHsgfSwg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlKTsKLSAg
ICAgICAgaWYgKGF1dG8gY2FsY3VsYXRpb24gPSBwYXJzZXIudmFsdWUoKTsgY2FsY3VsYXRpb24g
JiYgY2FuQ29uc3VtZUNhbGNWYWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgcGFyc2VyTW9k
ZSkpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZSgpOwotICAgICAgICBi
cmVhazsKLSAgICB9CisvLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVyIGRlZmluaXRpb25z
LgogCi0gICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5n
dGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpKTsKLSAgICAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1
cm4gY29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworLy8gTUFSSzogQW5nbGUgKyBQZXJjZW50CiAKLSAg
ICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2Us
IHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CitzdHJ1Y3QgQW5n
bGVPclBlcmNlbnRDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPjsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgIHVzaW5nIEZ1
bmN0aW9uVG9rZW4gPSBTYW1lVG9rZW5NZXRhQ29uc3VtZXI8CisgICAgICAgIElkZW50aXR5VHJh
bnNmb3JtZXI8UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPj4sCisgICAgICAgIEFuZ2xlQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIsCisg
ICAgICAgIFBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBl
RnVuY3Rpb25Db25zdW1lcgorICAgID47CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBBbmdsZUNT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsK
KyAgICB1c2luZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjsKKyAgICB1c2luZyBEaW1lbnNp
b25Ub2tlbiA9IEFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlw
ZURpbWVuc2lvbkNvbnN1bWVyOworfTsKKworLy8gTUFSSzogTGVuZ3RoICsgUGVyY2VudAorCitz
dHJ1Y3QgTGVuZ3RoT3JQZXJjZW50UmF3VHJhbnNmb3JtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9
IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PjsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiB0cmFu
c2Zvcm0oVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiB7ICp2YWx1ZSB9OworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KIAot
ICAgIHJldHVybiBudWxscHRyOwotfQorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExlbmd0aE9y
UGVyY2VudFJhdz4gdHJhbnNmb3JtKHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9Cit9OwogCi0vLyBNQVJL
OiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyB0aGF0IGFsbG93IGxvb2t1cCBpbiB0aGUgc3ltYm9s
IHRhYmxlIGZvciBJZGVudFRva2VucyAoYnkgZGVmYXVsdCwgb3RoZXIgY29uc3VtZXJzIG9ubHkg
bG9va3VwIGluIHRoZSBzeW1ib2wgdGFibGUgZm9yIGNhbGMoKSkuCitzdHJ1Y3QgTGVuZ3RoT3JQ
ZXJjZW50UmF3Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8TGVu
Z3RoT3JQZXJjZW50UmF3PjsKKyAgICB1c2luZyBUcmFuc2Zvcm1lciA9IExlbmd0aE9yUGVyY2Vu
dFJhd1RyYW5zZm9ybWVyOwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVO
dW1iZXJBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWso
KTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gU2FtZVRva2VuTWV0YUNvbnN1bWVyPAorICAg
ICAgICBMZW5ndGhPclBlcmNlbnRSYXdUcmFuc2Zvcm1lciwKKyAgICAgICAgUGVyY2VudFJhd0tu
b3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciwKKyAgICAgICAgTGVuZ3RoUmF3S25vd25Ub2tl
blR5cGVGdW5jdGlvbkNvbnN1bWVyCisgICAgPjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IExl
bmd0aFJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7CisgICAgdXNpbmcgUGVyY2VudGFn
ZVRva2VuID0gUGVyY2VudFJhd0tub3duVG9rZW5UeXBlUGVyY2VudENvbnN1bWVyOworICAgIHVz
aW5nIERpbWVuc2lvblRva2VuID0gTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25z
dW1lcjsKK307CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rp
b25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOworLy8gTUFSSzogQW5n
bGUgKyBOdW1iZXIKIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25z
dW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCBzeW1ib2xUYWJsZSwg
dmFsdWVSYW5nZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEFuZ2xlT3JOdW1iZXJS
YXdDb25zdW1lciB7CisgICAgdXNpbmcgVHJhbnNmb3JtZXIgPSBUOworICAgIHVzaW5nIFJlc3Vs
dCA9IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQ7CiAKLSAgICBjYXNlIElkZW50VG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2Vu
ID0gU2FtZVRva2VuTWV0YUNvbnN1bWVyPAorICAgICAgICBUcmFuc2Zvcm1lciwKKyAgICAgICAg
TnVtYmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBBbmdsZVJh
d0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcgorICAgID47CisgICAgdXNpbmcgTnVtYmVy
VG9rZW4gPSBOdW1iZXJSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOworICAgIHVzaW5n
IERpbWVuc2lvblRva2VuID0gQW5nbGVSYXdLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVy
OworfTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgQW5nbGVPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVu
dENvbnN1bWVyIDogQW5nbGVPck51bWJlclJhd0NvbnN1bWVyPFQ+IHsKKyAgICB1c2luZyBJZGVu
dFRva2VuID0gQW5nbGVPck51bWJlclJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjsKK307
CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorLy8gTUFSSzogTnVtYmVyICsgUGVyY2Vu
dAogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50QWxsb3dpbmdT
eW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxj
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJh
bmdlOjpBbGwpCi17Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RydWN0IE51bWJlck9yUGVyY2VudFJhd0NvbnN1bWVyIHsKKyAgICB1c2lu
ZyBUcmFuc2Zvcm1lciA9IFQ7CisgICAgdXNpbmcgUmVzdWx0ID0gdHlwZW5hbWUgVHJhbnNmb3Jt
ZXI6OlJlc3VsdDsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5j
dGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOworICAgIHVzaW5n
IEZ1bmN0aW9uVG9rZW4gPSBTYW1lVG9rZW5NZXRhQ29uc3VtZXI8CisgICAgICAgIFRyYW5zZm9y
bWVyLAorICAgICAgICBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyLAor
ICAgICAgICBOdW1iZXJSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIKKyAgICA+Owor
ICAgIHVzaW5nIE51bWJlclRva2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25z
dW1lcjsKKyAgICB1c2luZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJjZW50UmF3S25vd25Ub2tlblR5
cGVQZXJjZW50Q29uc3VtZXI7Cit9OwogCi0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2Uo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKIAotICAgIGNhc2UgSWRlbnRUb2tlbjoK
LSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citz
dHJ1Y3QgTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3VtZXIg
OiBOdW1iZXJPclBlcmNlbnRSYXdDb25zdW1lcjxUPiB7CisgICAgdXNpbmcgSWRlbnRUb2tlbiA9
IE51bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjsKK307CiAKLSAg
ICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworLy8gTUFSSzogLSBDb25zdW1lciBmdW5jdGlvbnMgLSB1dGlsaXplIGNvbnN1bWVyIGRl
ZmluaXRpb25zIGFib3ZlLCBnaXZpbmcgbW9yZSB0YXJnZXR0ZWQgaW50ZXJmYWNlcyBhbmQgYWxs
b3dpbmcgZXhwb3N1cmUgdG8gb3RoZXIgZmlsZXMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5
cGUsIEludGVnZXJSYW5nZSBpbnRlcmdlclJhbmdlPiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNv
bnN1bWVJbnRlZ2VyVHlwZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBy
ZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxJbnRlZ2VyVHlwZVJhd0NvbnN1bWVyPEludFR5cGUs
IGludGVyZ2VyUmFuZ2U+PihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIENTU1BhcnNlck1v
ZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJv
UXVpcms6OkZvcmJpZCk7CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3Vt
ZUFuZ2xlUmF3T3JOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNl
ck1vZGUgcGFyc2VyTW9kZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGUsIEludGVnZXJSYW5n
ZSBpbnRlcmdlclJhbmdlPiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2Vy
VHlwZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQogewot
ICAgIGF1dG8gY29tcHV0ZURlZ3JlZXMgPSBbXShhdXRvIGFuZ2xlUmF3KSAtPiBzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gewotICAgICAgICBpZiAoYW5nbGVSYXcpCi0gICAgICAgICAgICByZXR1cm4g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlUmF3LT50eXBlLCBhbmdsZVJh
dy0+dmFsdWUpOwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH07CisgICAgcmV0
dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8SW50ZWdlclR5cGVDb25zdW1lcjxJbnRUeXBlLCBpbnRl
cmdlclJhbmdlPj4ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBDU1NQYXJzZXJNb2RlOjpI
VE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJr
OjpGb3JiaWQsIHBvb2wpOworfQogCi0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Citz
dGQ6Om9wdGlvbmFsPGludD4gY29uc3VtZUludGVnZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZVJhdzxpbnQsIEludGVnZXJS
YW5nZTo6QWxsPihyYW5nZSk7Cit9CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAg
IGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgaWYgKGF1dG8gYW5nbGVSYXcgPSBjb25zdW1l
QW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdl
OjpBbGwsIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVp
cms6OkZvcmJpZCkpCi0gICAgICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoYW5nbGVSYXcp
OwotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7Ci0gICAgCi0gICAgY2FzZSBEaW1lbnNp
b25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVEZWdyZWVzKGNvbnN1bWVBbmdsZVJhd1dp
dGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJp
ZCkpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1l
TnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6
OkFsbCk7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGU8aW50
LCBJbnRlZ2VyUmFuZ2U6OkFsbD4ocmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwor
fQogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorc3RkOjpvcHRpb25hbDxp
bnQ+IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZVJhdzxpbnQsIEludGVnZXJS
YW5nZTo6WmVyb0FuZEdyZWF0ZXI+KHJhbmdlKTsKK30KIAotICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0
ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJbnRl
Z2VyVHlwZTxpbnQsIEludGVnZXJSYW5nZTo6WmVyb0FuZEdyZWF0ZXI+KHJhbmdlLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBj
b25zdW1lQW5nbGVSYXdPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKQorc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY29u
c3VtZVBvc2l0aXZlSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAg
ICBhdXRvIGNvbXB1dGVEZWdyZWVzID0gW10oYXV0byBhbmdsZVJhdykgLT4gc3RkOjpvcHRpb25h
bDxkb3VibGU+IHsKLSAgICAgICAgaWYgKGFuZ2xlUmF3KQotICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZVJhdy0+dHlwZSwgYW5nbGVSYXct
PnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9OworICAgIHJldHVy
biBjb25zdW1lSW50ZWdlclR5cGVSYXc8dW5zaWduZWQsIEludGVnZXJSYW5nZTo6T25lQW5kR3Jl
YXRlcj4ocmFuZ2UpOworfQogCi0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CitSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2ZUludGVnZXIoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZTx1bnNpZ25l
ZCwgSW50ZWdlclJhbmdlOjpPbmVBbmRHcmVhdGVyPihyYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKSk7Cit9CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVu
Y3Rpb25Ub2tlbjoKLSAgICAgICAgaWYgKGF1dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdX
aXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6
OkFsbCwgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWly
azo6Rm9yYmlkKSkKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlRGVncmVlcyhhbmdsZVJhdyk7
Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24ocmFuZ2UsIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpBbGwpOwotICAgIAotICAgIGNhc2Ug
RGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb21wdXRlRGVncmVlcyhjb25zdW1lQW5n
bGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6
QWxsLCBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJr
OjpGb3JiaWQpKTsKLSAgICAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4g
Y29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCBWYWx1
ZVJhbmdlOjpBbGwpOworc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1bWVOdW1iZXJSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKK3sKKyAg
ICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxOdW1iZXJSYXdDb25zdW1lcj4ocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NR
dWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30KIAotICAgIGNhc2Ug
SWRlbnRUb2tlbjoKLSAgICAgICAgaWYgKGF1dG8gdmFyaWFibGUgPSBzeW1ib2xUYWJsZS5nZXQo
dG9rZW4uaWQoKSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6Ci0gICAgICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUkFEOgotICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dS
QUQ6Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAgICAgICAgICAg
ICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAg
IHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXModmFyaWFibGUtPnR5cGUs
IHZhcmlhYmxlLT52YWx1ZSk7CitzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1
bWVOdW1iZXJBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25z
dW1lcjxOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lcj4ocmFuZ2UsIHN5
bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBV
bml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOworfQogCi0g
ICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOgotICAgICAgICAgICAgICAg
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHZhcmlhYmxlLT52YWx1ZTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51
bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQor
eworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPE51bWJlckNvbnN1bWVyPihyYW5nZSwg
eyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkpOworfQogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworc3RkOjpv
cHRpb25hbDxQZXJjZW50UmF3PiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lTWV0
YUNvbnN1bWVyPFBlcmNlbnRSYXdDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0
bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30KIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWVQZXJjZW50
QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Ug
PSBWYWx1ZVJhbmdlOjpBbGwpCit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8UGVy
Y2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudENvbnN1bWVyPihyYW5nZSwgc3ltYm9sVGFi
bGUsIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNz
UXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7Cit9CiAKLSAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2Vu
dChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQorewor
ICAgIHJldHVybiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUocmFuZ2UsIHZhbHVlUmFuZ2UsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogfQogCi0vLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNv
bnN1bWVycyB3aXRoIHRyYW5zZm9ybWF0aW9ucyBiYXNlZCBvbiByZXN1bHQgdHlwZS4KK1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9v
bCkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxQZXJjZW50Q29uc3VtZXI+KHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVu
aXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgcG9vbCk7Cit9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE51bWJlclRyYW5zZm9ybWVyLCB0eXBlbmFtZSBQZXJjZW50
VHJhbnNmb3JtZXI+Ci1zdGF0aWMgYXV0byBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIE51bWJlclRy
YW5zZm9ybWVyJiYgbnVtYmVyVHJhbnNmb3JtZXIsIFBlcmNlbnRUcmFuc2Zvcm1lciYmIHBlcmNl
bnRUcmFuc2Zvcm1lcikgLT4gc3RkOjpvcHRpb25hbDxkZWNsdHlwZShudW1iZXJUcmFuc2Zvcm1l
cihzdGQ6OmRlY2x2YWw8ZG91YmxlPigpKSk+CitzdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29u
c3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBw
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3Mp
CiB7Ci0gICAgY29uc3QgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgcmV0dXJuIGNv
bnN1bWVNZXRhQ29uc3VtZXI8TGVuZ3RoUmF3Q29uc3VtZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFu
Z2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30K
IAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOiB7
Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVy
biBudW1iZXJUcmFuc2Zvcm1lcigqbnVtYmVyKTsKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9
IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gcGVyY2VudFRyYW5zZm9ybWVyKCpwZXJj
ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBh
cnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykK
K3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxMZW5ndGhDb25zdW1lcj4ocmFuZ2Us
IHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJr
OjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworfQogCi0gICAgY2FzZSBQZXJj
ZW50YWdlVG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJh
d1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCi0g
ICAgICAgICAgICByZXR1cm4gcGVyY2VudFRyYW5zZm9ybWVyKCpwZXJjZW50KTsKLSAgICAgICAg
YnJlYWs7CitzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQoreworICAgIHJldHVy
biBjb25zdW1lTWV0YUNvbnN1bWVyPEFuZ2xlUmF3Q29uc3VtZXI+KHJhbmdlLCB7IH0sIFZhbHVl
UmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7Cit9CiAKLSAg
ICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVt
YmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bWJlclRyYW5zZm9ybWVyKCpudW1iZXIpOwotICAgICAgICBi
cmVhazsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsg
dW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKK3sKKyAgICByZXR1cm4g
Y29uc3VtZUFuZ2xlV29ya2VyU2FmZShyYW5nZSwgcGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7Cit9CiAKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVB
bmdsZVdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
cGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJiBwb29sLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBV
bml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRh
Q29uc3VtZXI8QW5nbGVDb25zdW1lcj4ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBwb29sKTsKK30KIAotICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICByZXR1cm4gY29u
c3VtZU1ldGFDb25zdW1lcjxUaW1lQ29uc3VtZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBh
cnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25z
dW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpCitSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVSZXNvbHV0aW9uKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQogewotICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3KHJhbmdl
LCB2YWx1ZVJhbmdlLCBbXShkb3VibGUgbnVtYmVyKSB7IHJldHVybiBudW1iZXI7IH0sIFtdKGRv
dWJsZSBwZXJjZW50KSB7IHJldHVybiBwZXJjZW50IC8gMTAwLjA7IH0pOworICAgIHJldHVybiBj
b25zdW1lTWV0YUNvbnN1bWVyPFJlc29sdXRpb25Db25zdW1lcj4ocmFuZ2UsIHsgfSwgVmFsdWVS
YW5nZTo6QWxsLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJr
OjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkpOwogfQogCi0vLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyB0aGF0IGJvdGgg
YWxsb3cgbG9va3VwIGluIHRoZSBzeW1ib2wgdGFibGUgZm9yIElkZW50VG9rZW5zIGFuZCB0cmFu
c2Zvcm1hdGlvbnMgYmFzZWQgb24gcmVzdWx0IHR5cGUuCitzdGF0aWMgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0
bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1Zh
bHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpCit7CisgICAgcmV0dXJu
IGNvbnN1bWVNZXRhQ29uc3VtZXI8QW5nbGVPclBlcmNlbnRDb25zdW1lcj4ocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7Cit9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE51bWJlclRyYW5zZm9ybWVyLCB0eXBlbmFtZSBQZXJjZW50
VHJhbnNmb3JtZXI+Ci1zdGF0aWMgYXV0byBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3QWxs
b3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIE51
bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbnNmb3JtZXIsIFBlcmNlbnRUcmFuc2Zvcm1lciYm
IHBlcmNlbnRUcmFuc2Zvcm1lcikgLT4gc3RkOjpvcHRpb25hbDxkZWNsdHlwZShudW1iZXJUcmFu
c2Zvcm1lcihzdGQ6OmRlY2x2YWw8ZG91YmxlPigpKSk+CitzdGQ6Om9wdGlvbmFsPExlbmd0aE9y
UGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3Vt
ZXI8TGVuZ3RoT3JQZXJjZW50UmF3Q29uc3VtZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBh
cnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30KKworLy8g
RklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIHdpdGggdGhlIGN1cnJlbnQgc2NoZW1lIGR1ZSB0byB0
aGUgTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5IHBhcmFtZXRlcgorUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxl
c3NRdWlyayB1bml0bGVzcywgTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5IG5lZ2F0aXZlUGVyY2Vu
dGFnZVBvbGljeSkKK3sKICAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKIAogICAgIHN3
aXRjaCAodG9rZW4udHlwZSgpKSB7CiAgICAgY2FzZSBGdW5jdGlvblRva2VuOiB7Ci0gICAgICAg
IGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKQotICAgICAgICAgICAgcmV0dXJu
IG51bWJlclRyYW5zZm9ybWVyKCpudW1iZXIpOwotICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0g
Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9s
VGFibGUsIHZhbHVlUmFuZ2UpKQotICAgICAgICAgICAgcmV0dXJuIHBlcmNlbnRUcmFuc2Zvcm1l
cigqcGVyY2VudCk7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSB1c2luZyB0cnlp
bmcgdG8gZ2VuZXJhdGUgdGhlIGNhbGMgd2l0aCBib3RoIExlbmd0aCBhbmQgUGVyY2VudCBkZXN0
aW5hdGlvbiBjYXRlZ29yeSB0eXBlcz8KKyAgICAgICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2Us
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSwgeyB9LCBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kpOworICAgICAgICBpZiAo
YXV0byBjYWxjdWxhdGlvbiA9IHBhcnNlci52YWx1ZSgpOyBjYWxjdWxhdGlvbiAmJiBjYW5Db25z
dW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBwYXJzZXJNb2RlKSkKKyAgICAg
ICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICBpZiAoYXV0byBwZXJjZW50
ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKHJhbmdlLCBz
eW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gcGVyY2VudFRyYW5z
Zm9ybWVyKCpwZXJjZW50KTsKLSAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEaW1lbnNpb25Ub2tl
bjoKKyAgICAgICAgcmV0dXJuIExlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZShyYW5nZSwgeyB9LCB2YWx1ZVJh
bmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAKICAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAg
ICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVt
YmVyKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4g
bnVtYmVyVHJhbnNmb3JtZXIoKm51bWJlcik7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm4gTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJl
ckNvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVu
aXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpKTsKIAotICAgIGNhc2UgSWRlbnRUb2tlbjoKLSAgICAgICAgaWYgKGF1dG8gdmFyaWFibGUg
PSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHZhcmlhYmxlLT50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UEVSQ0VOVEFHRToKLSAgICAgICAgICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZh
bGlkYXRlZFBlcmNlbnRSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1ZVJhbmdlKSkgewotICAgICAg
ICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcGVyY2VudFRyYW5zZm9ybWVyKCp2YWxpZGF0ZWRWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGVy
Y2VudGFnZVRva2VuOgorICAgICAgICByZXR1cm4gUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpG
b3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogCi0gICAgICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfTlVNQkVSOgotICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRl
ZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2Uo
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlclRyYW5zZm9ybWVyKCp2YWxpZGF0
ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3T3JQ
ZXJjZW50RGl2aWRlZEJ5MTAwUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFuc2Zvcm1lcj4KK3N0
YXRpYyBhdXRvIGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpIC0+IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpS
ZXN1bHQKIHsKLSAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd09yUGVyY2VudFJhd0FsbG93aW5n
U3ltYm9sVGFibGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIFtdKGRvdWJs
ZSBudW1iZXIpIHsgcmV0dXJuIG51bWJlcjsgfSwgW10oZG91YmxlIHBlcmNlbnQpIHsgcmV0dXJu
IHBlcmNlbnQgLyAxMDAuMDsgfSk7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8QW5n
bGVPck51bWJlclJhd0NvbnN1bWVyPFRyYW5zZm9ybWVyPj4ocmFuZ2UsIHsgfSwgVmFsdWVSYW5n
ZTo6QWxsLCBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1
aXJrOjpGb3JiaWQpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFuc2Zvcm1lcj4KK3N0YXRp
YyBhdXRvIGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpIC0+IHR5cGVuYW1lIFRyYW5zZm9ybWVy
OjpSZXN1bHQKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxBbmdsZU9yTnVtYmVy
UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3VtZXI8VHJhbnNmb3JtZXI+PihyYW5nZSwg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6
Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVHJhbnNmb3JtZXI+CitzdGF0aWMgYXV0byBjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJh
bmdlOjpBbGwpIC0+IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQKK3sKKyAgICByZXR1cm4g
Y29uc3VtZU1ldGFDb25zdW1lcjxOdW1iZXJPclBlcmNlbnRSYXdDb25zdW1lcjxUcmFuc2Zvcm1l
cj4+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1v
ZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYW5zZm9ybWVyPgorc3RhdGljIGF1dG8gY29uc3VtZU51
bWJlck9yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVS
YW5nZSB2YWx1ZVJhbmdlKSAtPiB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0Cit7CisgICAg
cmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8TnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1i
b2xUYWJsZUlkZW50Q29uc3VtZXI8VHJhbnNmb3JtZXI+PihyYW5nZSwgc3ltYm9sVGFibGUsIHZh
bHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6
OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7Cit9CisKKy8vIEZJWE1FOiBUaGlz
IG5lZWRzIGEgbW9yZSBjbGVhciBuYW1lIHRvIGluZGljYXRlIGl0cyBiZWhhdmlvciBvZiBkaXZp
ZGluZyBwZXJjZW50cyBieSAxMDAgb25seSBpZiBhbiBleHBsaWNpdCBwZXJjZW50IHRva2VuLCBu
b3QgaWYgYSByZXN1bHQgb2YgYSBjYWxjKCkuCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVOdW1iZXJPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSkKIHsKICAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKIAogICAg
IHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CiAgICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAg
ICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKSkpCisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gTnVtYmVyQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6
OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5k
YXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlk
LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsK
LSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gUGVyY2VudENTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVu
aXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKSk7CiAKICAgICBjYXNlIE51bWJlclRva2VuOgotICAgIGNhc2UgUGVy
Y2VudGFnZVRva2VuOiB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3T3JQ
ZXJjZW50RGl2aWRlZEJ5MTAwUmF3KHJhbmdlLCB2YWx1ZVJhbmdlKTsKLSAgICAgICAgaWYgKHZh
bHVlKQotICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
VmFsdWUoKnZhbHVlLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgIHJldHVybiBO
dW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29u
c3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRN
TFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6
Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKworICAgIGNhc2UgUGVyY2VudGFn
ZVRva2VuOgorICAgICAgICBpZiAoYXV0byBwZXJjZW50UmF3ID0gUGVyY2VudFJhd0tub3duVG9r
ZW5UeXBlUGVyY2VudENvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENT
U1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpCisgICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50UmF3LT52YWx1ZSAvIDEwMC4wLCBDU1NV
bml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGJyZWFrOwotICAgIH0KKwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEyODIsNiArMTM5Niw4IEBAIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlck9yUGVyY2VudChDU1NQYQogICAgIHJldHVy
biBudWxscHRyOwogfQogCisvLyBNQVJLOiAtIE5vbi1wcmltaXRpdmUgY29uc3VtZXJzLgorCiBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgLy8gVmFsdWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0
byAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMDAwIGFyZSBwYXJzZSBlcnJvcnMuCkBA
IC0xMjk3LDE0ICsxNDEzLDE0IEBAIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lRm9udFdl
aWdodE51bWJlclJhdyhDU1NQYQogICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CiAgICAgY2Fz
ZSBGdW5jdGlvblRva2VuOiB7CiAgICAgICAgIC8vICJbRm9yIGNhbGMoKV0sIHRoZSB1c2VkIHZh
bHVlIHJlc3VsdGluZyBmcm9tIGFuIGV4cHJlc3Npb24gbXVzdCBiZSBjbGFtcGVkIHRvIHRoZSBy
YW5nZSBhbGxvd2VkIGluIHRoZSB0YXJnZXQgY29udGV4dC4iCi0gICAgICAgIGF1dG8gcmVzdWx0
ID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0s
IFZhbHVlUmFuZ2U6OkFsbCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gTnVtYmVyUmF3S25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6
OkFsbCwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9y
YmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgICAgICBicmVhazsKICNpZiAhRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAgICAgICAg
aWYgKCEoKnJlc3VsdCA+IDAgJiYgKnJlc3VsdCA8IDEwMDApIHx8ICFpc0ludGVnZXJBbmREaXZp
c2libGVCeTEwMCgqcmVzdWx0KSkKKyAgICAgICAgaWYgKCEocmVzdWx0LT52YWx1ZSA+IDAgJiYg
cmVzdWx0LT52YWx1ZSA8IDEwMDApIHx8ICFpc0ludGVnZXJBbmREaXZpc2libGVCeTEwMChyZXN1
bHQtPnZhbHVlKSkKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBz
dGQ6OmNsYW1wKCpyZXN1bHQsIHN0ZDo6bmV4dGFmdGVyKDAuMCwgMS4wKSwgc3RkOjpuZXh0YWZ0
ZXIoMTAwMC4wLCAwLjApKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAocmVzdWx0LT52YWx1
ZSwgc3RkOjpuZXh0YWZ0ZXIoMC4wLCAxLjApLCBzdGQ6Om5leHRhZnRlcigxMDAwLjAsIDAuMCkp
OwogICAgIH0KIAogICAgIGNhc2UgTnVtYmVyVG9rZW46IHsKQEAgLTE0NTIsNyArMTU2OCw3IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU9wdGlvbmFsQWxwaGEoQ1NTUAog
ICAgIGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpCiAgICAgICAg
IHJldHVybiAxLjA7CiAKLSAgICBpZiAoYXV0byBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1i
ZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcocmFuZ2UpKQorICAgIGlmIChhdXRvIGFscGhh
UGFyYW1ldGVyID0gY29uc3VtZU51bWJlck9yUGVyY2VudFJhdzxOdW1iZXJPclBlcmNlbnREaXZp
ZGVkQnkxMDBUcmFuc2Zvcm1lcj4ocmFuZ2UpKQogICAgICAgICByZXR1cm4gc3RkOjpjbGFtcCgq
YWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4wKTsKIAogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkBA
IC0xNDYzLDI1ICsxNTc5LDM5IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3Vt
ZU9wdGlvbmFsQWxwaGFBbGxvdwogICAgIGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVz
cGFjZShyYW5nZSkpCiAgICAgICAgIHJldHVybiAxLjA7CiAKLSAgICBpZiAoYXV0byBhbHBoYVBh
cmFtZXRlciA9IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxvd2lu
Z1N5bWJvbFRhYmxlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpBbGwpKQor
ICAgIGlmIChhdXRvIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlck9yUGVyY2VudFJhd0Fs
bG93aW5nU3ltYm9sVGFibGVJZGVudDxOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zv
cm1lcj4ocmFuZ2UsIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpBbGwpKQogICAgICAgICByZXR1
cm4gc3RkOjpjbGFtcCgqYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4wKTsKIAogICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyB1aW50OF90IG5vcm1hbGl6ZVJHQkNvbXBvbmVudE51
bWJlcihkb3VibGUgdmFsdWUpCitzdGF0aWMgdWludDhfdCBub3JtYWxpemVSR0JDb21wb25lbnRO
dW1iZXIoTnVtYmVyUmF3IHZhbHVlKQogewotICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JH
QkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydFByZXNjYWxlZFNS
R0JBRmxvYXRUb1NSR0JBQnl0ZSh2YWx1ZS52YWx1ZSk7CiB9CiAKLXN0YXRpYyB1aW50OF90IG5v
cm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UoZG91YmxlIHZhbHVlKQorc3RhdGljIHVpbnQ4
X3Qgbm9ybWFsaXplUkdCQ29tcG9uZW50UGVyY2VudGFnZShQZXJjZW50UmF3IHZhbHVlKQogewot
ICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlIC8g
MTAwLjAgKiAyNTUuMCk7CisgICAgcmV0dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9T
UkdCQUJ5dGUodmFsdWUudmFsdWUgLyAxMDAuMCAqIDI1NS4wKTsKIH0KIAorc3RydWN0IFJHQk5v
cm1hbGl6aW5nVHJhbnNmb3JtZXIgOiBSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlPFJHQk5vcm1h
bGl6aW5nVHJhbnNmb3JtZXIsIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4sIE51bWJlck9yUGVyY2Vu
dFJhdz4geworICAgIHVzaW5nIFJhd1ZhcmlhbnRUcmFuc2Zvcm1lckJhc2U8UkdCTm9ybWFsaXpp
bmdUcmFuc2Zvcm1lciwgc3RkOjpvcHRpb25hbDx1aW50OF90PiwgTnVtYmVyT3JQZXJjZW50UmF3
Pjo6dHJhbnNmb3JtOworCisgICAgc3RhdGljIHVpbnQ4X3QgdHJhbnNmb3JtKE51bWJlclJhdyB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub3JtYWxpemVSR0JDb21wb25lbnROdW1iZXIo
dmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyB1aW50OF90IHRyYW5zZm9ybShQZXJjZW50UmF3
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNl
bnRhZ2UodmFsdWUpOworICAgIH0KK307CisKIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+
IGNvbnN1bWVSZWxhdGl2ZVJHQkNvbXBvbmVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKIHsKLSAgICByZXR1cm4gY29u
c3VtZU51bWJlclJhd09yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChyYW5nZSwg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCwgbm9ybWFsaXplUkdCQ29tcG9uZW50TnVtYmVy
LCBub3JtYWxpemVSR0JDb21wb25lbnRQZXJjZW50YWdlKTsKKyAgICByZXR1cm4gY29uc3VtZU51
bWJlck9yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudDxSR0JOb3JtYWxpemluZ1Ry
YW5zZm9ybWVyPihyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCk7CiB9CiAKIGVu
dW0gY2xhc3MgUkdCQ29tcG9uZW50VHlwZSB7IE51bWJlciwgUGVyY2VudGFnZSB9OwpAQCAtMTQ4
OSw5ICsxNjE5LDkgQEAgc3RhdGljIHVpbnQ4X3QgY2xhbXBSR0JDb21wb25lbnQoZG91YmxlIHZh
bHVlLCBSR0JDb21wCiB7CiAgICAgc3dpdGNoIChjb21wb25lbnRUeXBlKSB7CiAgICAgY2FzZSBS
R0JDb21wb25lbnRUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBub3JtYWxpemVSR0JDb21w
b25lbnROdW1iZXIodmFsdWUpOworICAgICAgICByZXR1cm4gbm9ybWFsaXplUkdCQ29tcG9uZW50
TnVtYmVyKHsgdmFsdWUgfSk7CiAgICAgY2FzZSBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdl
OgotICAgICAgICByZXR1cm4gbm9ybWFsaXplUkdCQ29tcG9uZW50UGVyY2VudGFnZSh2YWx1ZSk7
CisgICAgICAgIHJldHVybiBub3JtYWxpemVSR0JDb21wb25lbnRQZXJjZW50YWdlKHsgdmFsdWUg
fSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTUxOSw3ICsx
NjQ5LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUkdCT3JIU0xPcHRp
b25hbEFsCiAgICAgaWYgKCFjb25zdW1lUkdCT3JIU0xBbHBoYVNlcGFyYXRvcihhcmdzLCBzeW50
YXgpKQogICAgICAgICByZXR1cm4gMS4wOwogCi0gICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdP
clBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CisgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJP
clBlcmNlbnRSYXc8TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXI+KGFyZ3Mp
OwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKQEAgLTE1
NzMsMTggKzE3MDMsMjIgQEAgc3RhdGljIENvbG9yIHBhcnNlTm9uUmVsYXRpdmVSR0JQYXJhbWV0
ZXJzKENTU1BhcnNlclRvCiAKICAgICBhdXRvIGNvbnN1bWVJbml0aWFsQ29tcG9uZW50ID0gW10o
YXV0byYgYXJncykgLT4gc3RkOjpvcHRpb25hbDxJbml0aWFsQ29tcG9uZW50PiB7CiAgICAgICAg
IGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcoYXJncykpCi0gICAgICAgICAgICBy
ZXR1cm4geyB7ICpudW1iZXIsIFJHQkNvbXBvbmVudFR5cGU6Ok51bWJlciB9IH07CisgICAgICAg
ICAgICByZXR1cm4geyB7IG51bWJlci0+dmFsdWUsIFJHQkNvbXBvbmVudFR5cGU6Ok51bWJlciB9
IH07CiAgICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKSkK
LSAgICAgICAgICAgIHJldHVybiB7IHsgKnBlcmNlbnQsIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNl
bnRhZ2UgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBwZXJjZW50LT52YWx1ZSwgUkdCQ29t
cG9uZW50VHlwZTo6UGVyY2VudGFnZSB9IH07CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAgICAgfTsKIAotICAgIGF1dG8gY29uc3VtZUNvbXBvbmVudCA9IFtdKGF1dG8mIGFyZ3MsIGF1
dG8gY29tcG9uZW50VHlwZSkgeworICAgIGF1dG8gY29uc3VtZUNvbXBvbmVudCA9IFtdKGF1dG8m
IGFyZ3MsIGF1dG8gY29tcG9uZW50VHlwZSkgLT4gc3RkOjpvcHRpb25hbDxkb3VibGU+IHsKICAg
ICAgICAgc3dpdGNoIChjb21wb25lbnRUeXBlKSB7CiAgICAgICAgIGNhc2UgUkdCQ29tcG9uZW50
VHlwZTo6UGVyY2VudGFnZToKLSAgICAgICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhdyhh
cmdzKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhh
cmdzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGVyY2VudC0+dmFsdWU7CisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6Ok51
bWJlcjoKLSAgICAgICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOworICAgICAg
ICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVtYmVyLT52YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9OwpAQCAtMTY2OCw3ICsxODAyLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVI
U0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgICAgIHsgQ1NTVmFsdWVBbHBoYSwgQ1NT
VW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzSFNMLmFscGhhICogMTAwLjAg
fQogICAgIH07CiAKLSAgICBhdXRvIGh1ZSA9IGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3QWxs
b3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlLCBjb250ZXh0Lm1vZGUpOwor
ICAgIGF1dG8gaHVlID0gY29uc3VtZUFuZ2xlT3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxl
SWRlbnQ8QW5nbGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5zZm9ybWVyPihhcmdzLCBzeW1ib2xU
YWJsZSwgY29udGV4dC5tb2RlKTsKICAgICBpZiAoIWh1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IApAQCAtMTY4NywxMiArMTgyMSwxMiBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUhTTFBh
cmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBjb2xvckJ5Tm9ybWFsaXppbmdIU0xDb21wb25lbnRz
KCpodWUsICpzYXR1cmF0aW9uLCAqbGlnaHRuZXNzLCAqYWxwaGEpOworICAgIHJldHVybiBjb2xv
ckJ5Tm9ybWFsaXppbmdIU0xDb21wb25lbnRzKCpodWUsIHNhdHVyYXRpb24tPnZhbHVlLCBsaWdo
dG5lc3MtPnZhbHVlLCAqYWxwaGEpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VOb25SZWxhdGl2
ZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICBhdXRvIGh1ZSA9IGNvbnN1bWVBbmdsZVJhd09yTnVt
YmVyUmF3KGFyZ3MsIGNvbnRleHQubW9kZSk7CisgICAgYXV0byBodWUgPSBjb25zdW1lQW5nbGVP
ck51bWJlclJhdzxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI+KGFyZ3MsIGNv
bnRleHQubW9kZSk7CiAgICAgaWYgKCFodWUpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTE3
MTYsNyArMTg1MCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZU5vblJlbGF0aXZlSFNMUGFyYW1ldGVy
cyhDU1NQYXJzZXJUbwogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgcmV0dXJuIGNvbG9yQnlOb3JtYWxpemluZ0hTTENvbXBvbmVudHMoKmh1ZSwgKnNh
dHVyYXRpb24sICpsaWdodG5lc3MsICphbHBoYSk7CisgICAgcmV0dXJuIGNvbG9yQnlOb3JtYWxp
emluZ0hTTENvbXBvbmVudHMoKmh1ZSwgc2F0dXJhdGlvbi0+dmFsdWUsIGxpZ2h0bmVzcy0+dmFs
dWUsICphbHBoYSk7CiB9CiAKIGVudW0gY2xhc3MgSFNMRnVuY3Rpb25Nb2RlIHsgSFNMLCBIU0xB
IH07CkBAIC0xNzU3LDcgKzE4OTEsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VIV0JQYXJhbWV0ZXJz
KENTU1BhcnNlclRva2VuUmFuZ2UmIGEKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8g
bm9ybWFsaXplZEh1ZSA9IG5vcm1hbGl6ZUh1ZSgqaHVlKTsKLSAgICBhdXRvIFtub3JtYWxpemVk
V2hpdG5lc3MsIG5vcm1hbGl6ZWRCbGFja25lc3NdID0gbm9ybWFsaXplV2hpdGVuZXNzQmxhY2tu
ZXNzKCp3aGl0ZW5lc3MsICpibGFja25lc3MpOworICAgIGF1dG8gW25vcm1hbGl6ZWRXaGl0bmVz
cywgbm9ybWFsaXplZEJsYWNrbmVzc10gPSBub3JtYWxpemVXaGl0ZW5lc3NCbGFja25lc3Mod2hp
dGVuZXNzLT52YWx1ZSwgYmxhY2tuZXNzLT52YWx1ZSk7CiAKICAgICAvLyBOT1RFOiBUaGUgZXhw
bGljaXQgY29udmVyc2lvbiB0byBTUkdCQTx1aW50OF90PiBpcyBpbnRlbnRpb25hbCBmb3IgcGVy
Zm9ybWFuY2UgKG5vIGV4dHJhIGFsbG9jYXRpb24gZm9yCiAgICAgLy8gdGhlIGV4dGVuZGVkIGNv
bG9yKSBhbmQgY29tcGF0YWJpbGl0eSwgZm9yY2luZyBzZXJpYWxpYXphdGlvbiB0byB1c2UgdGhl
IHJnYigpL3JnYmEoKSBmb3JtLgpAQCAtMTc4Miw3ICsxOTE2LDcgQEAgc3RhdGljIENvbG9yIHBh
cnNlUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgICAgIHsgQ1NTVmFs
dWVBbHBoYSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzSFdCLmFs
cGhhICogMTAwLjAgfQogICAgIH07CiAKLSAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZzeW1ib2xU
YWJsZSwgJmNvbnRleHRdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVBbmdsZVJhd09yTnVt
YmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlLCBjb250ZXh0
Lm1vZGUpOyB9OworICAgIGF1dG8gaHVlQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlLCAmY29udGV4
dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFuZ2xlT3JOdW1iZXJSYXdBbGxvd2luZ1N5
bWJvbFRhYmxlSWRlbnQ8QW5nbGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5zZm9ybWVyPihhcmdz
LCBzeW1ib2xUYWJsZSwgY29udGV4dC5tb2RlKTsgfTsKICAgICBhdXRvIHdoaXRlbmVzc0FuZEJs
YWNrbmVzc0NvbnN1bWVyID0gWyZzeW1ib2xUYWJsZV0oYXV0byYgYXJncykgeyByZXR1cm4gY29u
c3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOyB9
OwogICAgIGF1dG8gYWxwaGFDb25zdW1lciA9IFsmc3ltYm9sVGFibGVdKGF1dG8mIGFyZ3MpIHsg
cmV0dXJuIGNvbnN1bWVPcHRpb25hbEFscGhhQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3Ms
IHN5bWJvbFRhYmxlKTsgfTsKIApAQCAtMTc5MSw3ICsxOTI1LDcgQEAgc3RhdGljIENvbG9yIHBh
cnNlUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAKIHN0YXRpYyBDb2xvciBw
YXJzZU5vblJlbGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBj
b25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewotICAgIGF1dG8gaHVlQ29uc3VtZXIg
PSBbJmNvbnRleHRdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVBbmdsZVJhd09yTnVtYmVy
UmF3KGFyZ3MsIGNvbnRleHQubW9kZSk7IH07CisgICAgYXV0byBodWVDb25zdW1lciA9IFsmY29u
dGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFuZ2xlT3JOdW1iZXJSYXc8QW5nbGVP
ck51bWJlclJhd1RvRGVncmVzc1RyYW5zZm9ybWVyPihhcmdzLCBjb250ZXh0Lm1vZGUpOyB9Owog
ICAgIGF1dG8gd2hpdGVuZXNzQW5kQmxhY2tuZXNzQ29uc3VtZXIgPSBbXShhdXRvJiBhcmdzKSB7
IHJldHVybiBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsgfTsKICAgICBhdXRvIGFscGhhQ29uc3Vt
ZXIgPSBbXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsg
fTsKIApAQCAtMTgzNCw5ICsxOTY4LDkgQEAgc3RhdGljIENvbG9yIHBhcnNlTGFiUGFyYW1ldGVy
cyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBhdXRvIG5vcm1hbGl6ZWRMaWdodG5lc3MgPSBzdGQ6Om1heCgw
LjAsICpsaWdodG5lc3MpOworICAgIGF1dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9IHN0ZDo6bWF4
KDAuMCwgbGlnaHRuZXNzLT52YWx1ZSk7CiAKLSAgICByZXR1cm4gQ29sb3JUeXBlIHsgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRMaWdodG5lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFW
YWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYlZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCph
bHBoYSkgfTsKKyAgICByZXR1cm4gQ29sb3JUeXBlIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1h
bGl6ZWRMaWdodG5lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYVZhbHVlLT52YWx1ZSksIHN0YXRp
Y19jYXN0PGZsb2F0PihiVmFsdWUtPnZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkg
fTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPgpAQCAtMTkxMiw4ICsyMDQ2LDgg
QEAgc3RhdGljIENvbG9yIHBhcnNlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBh
CiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRv
IG5vcm1hbGl6ZWRMaWdodG5lc3MgPSBzdGQ6Om1heCgwLjAsICpsaWdodG5lc3MpOwotICAgIGF1
dG8gbm9ybWFsaXplZENocm9tYSA9IHN0ZDo6bWF4KDAuMCwgKmNocm9tYSk7CisgICAgYXV0byBu
b3JtYWxpemVkTGlnaHRuZXNzID0gc3RkOjptYXgoMC4wLCBsaWdodG5lc3MtPnZhbHVlKTsKKyAg
ICBhdXRvIG5vcm1hbGl6ZWRDaHJvbWEgPSBzdGQ6Om1heCgwLjAsIGNocm9tYS0+dmFsdWUpOwog
ICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IG5vcm1hbGl6ZUh1ZSgqaHVlKTsKIAogICAgIHJldHVy
biBDb2xvclR5cGUgeyBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZExpZ2h0bmVzcyksIHN0
YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkQ2hyb21hKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5v
cm1hbGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9OwpAQCAtMTk0MCw3ICsy
MDc0LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKENTU1BhcnNl
clRva2VuCiAKICAgICBhdXRvIGxpZ2h0bmVzc0NvbnN1bWVyID0gWyZzeW1ib2xUYWJsZV0oYXV0
byYgYXJncykgeyByZXR1cm4gY29uc3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQo
YXJncywgc3ltYm9sVGFibGUpOyB9OwogICAgIGF1dG8gY2hyb21hQ29uc3VtZXIgPSBbJnN5bWJv
bFRhYmxlXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lTnVtYmVyQWxsb3dpbmdTeW1ib2xU
YWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsgfTsKLSAgICBhdXRvIGh1ZUNvbnN1bWVyID0g
WyZzeW1ib2xUYWJsZSwgJmNvbnRleHRdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVBbmds
ZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxl
LCBjb250ZXh0Lm1vZGUpOyB9OworICAgIGF1dG8gaHVlQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxl
LCAmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFuZ2xlT3JOdW1iZXJSYXdB
bGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQ8QW5nbGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5zZm9y
bWVyPihhcmdzLCBzeW1ib2xUYWJsZSwgY29udGV4dC5tb2RlKTsgfTsKICAgICBhdXRvIGFscGhh
Q29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lT3B0
aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7IH07
CiAKICAgICByZXR1cm4gcGFyc2VMQ0hQYXJhbWV0ZXJzPENvbG9yVHlwZT4oYXJncywgV1RGTW92
ZShsaWdodG5lc3NDb25zdW1lciksIFdURk1vdmUoY2hyb21hQ29uc3VtZXIpLCBXVEZNb3ZlKGh1
ZUNvbnN1bWVyKSwgV1RGTW92ZShhbHBoYUNvbnN1bWVyKSk7CkBAIC0xOTUxLDcgKzIwODUsNyBA
QCBzdGF0aWMgQ29sb3IgcGFyc2VOb25SZWxhdGl2ZUxDSFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG8K
IHsKICAgICBhdXRvIGxpZ2h0bmVzc0NvbnN1bWVyID0gW10oYXV0byYgYXJncykgeyByZXR1cm4g
Y29uc3VtZVBlcmNlbnRSYXcoYXJncyk7IH07CiAgICAgYXV0byBjaHJvbWFDb25zdW1lciA9IFtd
KGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7IH07Ci0gICAgYXV0
byBodWVDb25zdW1lciA9IFsmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFu
Z2xlUmF3T3JOdW1iZXJSYXcoYXJncywgY29udGV4dC5tb2RlKTsgfTsKKyAgICBhdXRvIGh1ZUNv
bnN1bWVyID0gWyZjb250ZXh0XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVPck51
bWJlclJhdzxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI+KGFyZ3MsIGNvbnRl
eHQubW9kZSk7IH07CiAgICAgYXV0byBhbHBoYUNvbnN1bWVyID0gW10oYXV0byYgYXJncykgeyBy
ZXR1cm4gY29uc3VtZU9wdGlvbmFsQWxwaGEoYXJncyk7IH07CiAKICAgICByZXR1cm4gcGFyc2VM
Q0hQYXJhbWV0ZXJzPENvbG9yVHlwZT4oYXJncywgV1RGTW92ZShsaWdodG5lc3NDb25zdW1lciks
IFdURk1vdmUoY2hyb21hQ29uc3VtZXIpLCBXVEZNb3ZlKGh1ZUNvbnN1bWVyKSwgV1RGTW92ZShh
bHBoYUNvbnN1bWVyKSk7CkBAIC0yMDE2LDcgKzIxNTAsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xvclR5cGU+IHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXYKICAgICAgICAgeyBDU1NWYWx1ZUFs
cGhhLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNDb2xvclR5cGUu
YWxwaGEgKiAxMDAuMCB9CiAgICAgfTsKIAotICAgIGF1dG8gY29uc3VtZVJHQiA9IFsmc3ltYm9s
VGFibGVdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZp
ZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUsIFZh
bHVlUmFuZ2U6OkFsbCk7IH07CisgICAgYXV0byBjb25zdW1lUkdCID0gWyZzeW1ib2xUYWJsZV0o
YXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5nU3lt
Ym9sVGFibGVJZGVudDxOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lcj4oYXJn
cywgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCk7IH07CiAgICAgYXV0byBjb25zdW1lQWxw
aGEgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lT3B0aW9uYWxB
bHBoYUFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7IH07CiAKICAg
ICByZXR1cm4gcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXM8Q29sb3JUeXBlPihhcmdzLCBX
VEZNb3ZlKGNvbnN1bWVSR0IpLCBXVEZNb3ZlKGNvbnN1bWVBbHBoYSkpOwpAQCAtMjAzMiw3ICsy
MTY2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBlPiBzdGF0aWMgQ29sb3IgcGFyc2VD
b2xvckZ1CiAKICAgICBjb25zdW1lSWRlbnRSYXcoYXJncyk7CiAKLSAgICBhdXRvIGNvbnN1bWVS
R0IgPSBbXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2
aWRlZEJ5MTAwUmF3KGFyZ3MpOyB9OworICAgIGF1dG8gY29uc3VtZVJHQiA9IFtdKGF1dG8mIGFy
Z3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJPclBlcmNlbnRSYXc8TnVtYmVyT3JQZXJjZW50RGl2
aWRlZEJ5MTAwVHJhbnNmb3JtZXI+KGFyZ3MpOyB9OwogICAgIGF1dG8gY29uc3VtZUFscGhhID0g
W10oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU9wdGlvbmFsQWxwaGEoYXJncyk7IH07CiAK
ICAgICByZXR1cm4gcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlwZXM8Q29sb3JUeXBlPihhcmdz
LCBXVEZNb3ZlKGNvbnN1bWVSR0IpLCBXVEZNb3ZlKGNvbnN1bWVBbHBoYSkpOwpAQCAtMjA0Niw3
ICsyMTgwLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlR5cGVzKENT
U1BhcnNlclRvCiAgICAgICAgIGF1dG8gdmFsdWUgPSB4eXpDb25zdW1lcihhcmdzKTsKICAgICAg
ICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjaGFubmVsID0gKnZh
bHVlOworICAgICAgICBjaGFubmVsID0gdmFsdWUtPnZhbHVlOwogICAgIH0KIAogICAgIGF1dG8g
YWxwaGEgPSBhbHBoYUNvbnN1bWVyKGFyZ3MpOwpAQCAtMjI0NCwxMyArMjM3OCwxMyBAQCBzdGF0
aWMgQ29sb3IgcGFyc2VDb2xvckNvbnRyYXN0RnVuY3Rpb25QYXJhbWV0ZXJzKENTU1AKICAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChjb25zdW1lZFRvKSB7Ci0gICAgICAgIGF1dG8gdGFy
Z2V0Q29udHJhc3QgPSBbJl0gKCkgLT4gc3RkOjpvcHRpb25hbDxkb3VibGU+IHsKKyAgICAgICAg
YXV0byB0YXJnZXRDb250cmFzdCA9IFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4g
ewogICAgICAgICAgICAgaWYgKGFyZ3MucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7Ci0g
ICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnBhaXI8Q1NTVmFsdWVJRCwgZG91
YmxlPiB0YXJnZXRDb250cmFzdE1hcHBpbmdzW10gewotICAgICAgICAgICAgICAgICAgICB7IENT
U1ZhbHVlQUEsIDQuNSB9LAotICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUFMYXJnZSwg
My4wIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgQ1NTVmFsdWVBQUEsIDcuMCB9LAotICAgICAg
ICAgICAgICAgICAgICB7IENTU1ZhbHVlQUFBTGFyZ2UsIDQuNSB9LAorICAgICAgICAgICAgICAg
IHN0YXRpYyBjb25zdGV4cHIgc3RkOjpwYWlyPENTU1ZhbHVlSUQsIE51bWJlclJhdz4gdGFyZ2V0
Q29udHJhc3RNYXBwaW5nc1tdIHsKKyAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFBLCBO
dW1iZXJSYXcgeyA0LjUgfSB9LAorICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUFMYXJn
ZSwgTnVtYmVyUmF3IHsgMy4wIH0gfSwKKyAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFB
QSwgTnVtYmVyUmF3IHsgNy4wIH0gfSwKKyAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFB
QUxhcmdlLCBOdW1iZXJSYXcgeyA0LjUgfSB9LAogICAgICAgICAgICAgICAgIH07CiAgICAgICAg
ICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBTb3J0ZWRBcnJheU1hcCB0YXJnZXRDb250cmFzdE1h
cCB7IHRhcmdldENvbnRyYXN0TWFwcGluZ3MgfTsKICAgICAgICAgICAgICAgICBhdXRvIHZhbHVl
ID0gdGFyZ2V0Q29udHJhc3RNYXAudHJ5R2V0KGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKS5pZCgpKTsKQEAgLTIyNjMsNyArMjM5Nyw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9y
Q29udHJhc3RGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUAogICAgICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFdoZW4gYSB0YXJnZXQgY29uc3Rhc3QgaXMgc3BlY2lmaWVk
LCB3ZSBzZWxlY3QgInRoZSBmaXJzdCBjb2xvciBjb2xvciB0byBtZWV0IG9yIGV4Y2VlZCB0aGUg
dGFyZ2V0IGNvbnRyYXN0LiIKLSAgICAgICAgcmV0dXJuIHNlbGVjdEZpcnN0Q29sb3JUaGF0TWVl
dHNPckV4Y2VlZHNUYXJnZXRDb250cmFzdChvcmlnaW5CYWNrZ3JvdW5kQ29sb3IsIFdURk1vdmUo
Y29sb3JzVG9Db21wYXJlQWdhaW5zdCksICp0YXJnZXRDb250cmFzdCk7CisgICAgICAgIHJldHVy
biBzZWxlY3RGaXJzdENvbG9yVGhhdE1lZXRzT3JFeGNlZWRzVGFyZ2V0Q29udHJhc3Qob3JpZ2lu
QmFja2dyb3VuZENvbG9yLCBXVEZNb3ZlKGNvbG9yc1RvQ29tcGFyZUFnYWluc3QpLCB0YXJnZXRD
b250cmFzdC0+dmFsdWUpOwogICAgIH0KIAogICAgIC8vIFdoZW4gYSB0YXJnZXQgY29uc3Rhc3Qg
aXMgTk9UIHNwZWNpZmllZCwgd2Ugc2VsZWN0ICJ0aGUgZmlyc3QgY29sb3Igd2l0aCB0aGUgaGln
aGVzdCBjb250cmFzdCB0byB0aGUgc2luZ2xlIGNvbG9yLiIKQEAgLTIzNjYsOSArMjUwMCw5IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbG9yTWl4Q29tcG9uZW50PiBjb25zdW1lQ29sb3JNaQog
ICAgIENvbG9yTWl4Q29tcG9uZW50IHJlc3VsdDsKIAogICAgIGlmIChhdXRvIHBlcmNlbnRhZ2Ug
PSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKSkgewotICAgICAgICBpZiAoKnBlcmNlbnRhZ2UgPCAw
LjAgfHwgKnBlcmNlbnRhZ2UgPiAxMDAuMCkKKyAgICAgICAgaWYgKHBlcmNlbnRhZ2UtPnZhbHVl
IDwgMC4wIHx8IHBlcmNlbnRhZ2UtPnZhbHVlID4gMTAwLjApCiAgICAgICAgICAgICByZXR1cm4g
eyB9OwotICAgICAgICByZXN1bHQucGVyY2VudGFnZSA9IHBlcmNlbnRhZ2U7CisgICAgICAgIHJl
c3VsdC5wZXJjZW50YWdlID0gcGVyY2VudGFnZS0+dmFsdWU7CiAgICAgfQogCiAgICAgcmVzdWx0
LmNvbG9yID0gY29uc3VtZU9yaWdpbkNvbG9yKGFyZ3MsIGNvbnRleHQpOwpAQCAtMjM3Nyw5ICsy
NTExLDkgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q29sb3JNaXhDb21wb25lbnQ+IGNvbnN1bWVD
b2xvck1pCiAKICAgICBpZiAoIXJlc3VsdC5wZXJjZW50YWdlKSB7CiAgICAgICAgIGlmIChhdXRv
IHBlcmNlbnRhZ2UgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKSkgewotICAgICAgICAgICAgaWYg
KCpwZXJjZW50YWdlIDwgMC4wIHx8ICpwZXJjZW50YWdlID4gMTAwLjApCisgICAgICAgICAgICBp
ZiAocGVyY2VudGFnZS0+dmFsdWUgPCAwLjAgfHwgcGVyY2VudGFnZS0+dmFsdWUgPiAxMDAuMCkK
ICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgcmVzdWx0LnBlcmNlbnRh
Z2UgPSBwZXJjZW50YWdlOworICAgICAgICAgICAgcmVzdWx0LnBlcmNlbnRhZ2UgPSBwZXJjZW50
YWdlLT52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjY0NiwxMSArMjc4MCwxMSBAQCBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVDb2xvcihDU1NQYXJzZXJUb2tlblIKICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShjb2xvcik7CiB9
CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGlvbkNvbXBv
bmVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSA9
IGZhbHNlKQorc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aW9u
Q29tcG9uZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNl
ck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSBu
ZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgPSBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3k6OkZvcmJp
ZCkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKQogICAgICAg
ICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTGVmdCwgQ1NTVmFsdWVUb3AsIENTU1ZhbHVl
Qm90dG9tLCBDU1NWYWx1ZVJpZ2h0LCBDU1NWYWx1ZUNlbnRlcj4ocmFuZ2UpOwotICAgIHJldHVy
biBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpB
bGwsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UpOworICAgIHJldHVybiBjb25z
dW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpBbGwsIHVu
aXRsZXNzLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kpOwogfQogCiBzdGF0aWMgYm9vbCBpc0hv
cml6b250YWxQb3NpdGlvbktleXdvcmRPbmx5KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1
ZSkKQEAgLTI3OTksMjMgKzI5MzMsMjEgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UG9zaXRpb25D
b29yZGluYXRlcz4gcG9zaXRpb25Gcm9tCiAKIC8vIEZJWE1FOiBUaGlzIG1heSBjb25zdW1lIGZy
b20gdGhlIHJhbmdlIHVwb24gZmFpbHVyZS4gVGhlIGJhY2tncm91bmQKIC8vIHNob3J0aGFuZCB3
b3JrcyBhcm91bmQgaXQsIGJ1dCB3ZSBzaG91bGQganVzdCBmaXggaXQgaGVyZS4KLXN0ZDo6b3B0
aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyayB1bml0bGVzcywgUG9zaXRpb25TeW50YXggcG9zaXRpb25TeW50YXgsIE5lZ2F0aXZl
UGVyY2VudGFnZVBvbGljeSBwb2xpY3kpCitzdGQ6Om9wdGlvbmFsPFBvc2l0aW9uQ29vcmRpbmF0
ZXM+IGNvbnN1bWVQb3NpdGlvbkNvb3JkaW5hdGVzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFBvc2l0
aW9uU3ludGF4IHBvc2l0aW9uU3ludGF4LCBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgbmVnYXRp
dmVQZXJjZW50YWdlUG9saWN5KQogewotICAgIGJvb2wgYWxsb3dzTmVnYXRpdmUgPSBwb2xpY3kg
PT0gTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5OjpBbGxvdzsKLQotICAgIGF1dG8gdmFsdWUxID0g
Y29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxs
b3dzTmVnYXRpdmUpOworICAgIGF1dG8gdmFsdWUxID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50
KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KTsK
ICAgICBpZiAoIXZhbHVlMSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGF1
dG8gdmFsdWUyID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1
bml0bGVzcywgYWxsb3dzTmVnYXRpdmUpOworICAgIGF1dG8gdmFsdWUyID0gY29uc3VtZVBvc2l0
aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgbmVnYXRpdmVQZXJjZW50
YWdlUG9saWN5KTsKICAgICBpZiAoIXZhbHVlMikKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRnJv
bU9uZVZhbHVlKCp2YWx1ZTEpOwogICAgIAotICAgIGF1dG8gdmFsdWUzID0gY29uc3VtZVBvc2l0
aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmUp
OworICAgIGF1dG8gdmFsdWUzID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KTsKICAgICBpZiAoIXZh
bHVlMykKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRnJvbVR3b1ZhbHVlcygqdmFsdWUxLCAqdmFs
dWUyKTsKICAgICAKLSAgICBhdXRvIHZhbHVlNCA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChy
YW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIGFsbG93c05lZ2F0aXZlKTsKKyAgICBhdXRvIHZh
bHVlNCA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxl
c3MsIG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSk7CiAgICAgCiAgICAgc3RkOjphcnJheTxDU1NQ
cmltaXRpdmVWYWx1ZSosIDU+IHZhbHVlcyB7CiAgICAgICAgIHZhbHVlMS5nZXQoKSwKQEAgLTI5
MTcsNyArMzA0OSw3IEBAIHN0YXRpYyBib29sIGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2xv
clN0b3AoQ1NTUGFycwogICAgICAgICBwb3NpdGlvbiA9IChpZCA9PSBDU1NWYWx1ZUZyb20pID8g
MCA6IDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGlkID09IENTU1ZhbHVlQ29sb3JT
dG9wKTsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZp
ZGVkQnkxMDBSYXcoYXJncyk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBjb25zdW1lTnVtYmVyT3JQ
ZXJjZW50UmF3PE51bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFRyYW5zZm9ybWVyPihhcmdzKTsK
ICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
cG9zaXRpb24gPSAqdmFsdWU7CkBAIC0zNDE0LDcgKzM1NDYsNyBAQCBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlPiBjb25zdW1lQ3Jvc3NGYWRlKENTU1BhcnNlclRva2UKICAgICBpZiAoIXRvSW1hZ2VW
YWx1ZSB8fCAhY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHBlcmNlbnRhZ2UgPSBjb25zdW1lTnVtYmVyUmF3
T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOworICAgIGF1dG8gcGVyY2VudGFnZSA9IGNv
bnN1bWVOdW1iZXJPclBlcmNlbnRSYXc8TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNm
b3JtZXI+KGFyZ3MpOwogICAgIGlmICghcGVyY2VudGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgYXV0byBwZXJjZW50YWdlVmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZVZhbHVlKGNsYW1wVG88ZG91YmxlPigqcGVyY2VudGFnZSwgMCwgMSksIENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSKTsKQEAgLTM5NTIsNyArNDA4NCw3IEBAIHN0ZDo6b3B0aW9uYWw8TGlu
ZUhlaWdodFJhdz4gY29uc3VtZUxpbmVIZWlnaHRSYXcoQ1NTUAogICAgIH0KIAogICAgIGlmIChh
dXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0
aXZlKSkKLSAgICAgICAgcmV0dXJuIHsgKm51bWJlciB9OworICAgICAgICByZXR1cm4geyBudW1i
ZXItPnZhbHVlIH07CiAKICAgICBpZiAoYXV0byBsZW5ndGhPclBlcmNlbnQgPSBjb25zdW1lTGVu
Z3RoT3JQZXJjZW50UmF3KHJhbmdlLCBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2
ZSkpCiAgICAgICAgIHJldHVybiB7ICpsZW5ndGhPclBlcmNlbnQgfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAko
cmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTQgQEAgZW51bSBj
bGFzcyBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgOiBib29sIHsgRm9yYmlkLCBBCiBlbnVtIGNs
YXNzIFVuaXRsZXNzUXVpcmsgeyBBbGxvdywgRm9yYmlkIH07CiBlbnVtIGNsYXNzIFVuaXRsZXNz
WmVyb1F1aXJrIHsgQWxsb3csIEZvcmJpZCB9OwogCitzdHJ1Y3QgTnVtYmVyUmF3IHsKKyAgICBk
b3VibGUgdmFsdWU7Cit9OworCitzdHJ1Y3QgUGVyY2VudFJhdyB7CisgICAgZG91YmxlIHZhbHVl
OworfTsKKwogc3RydWN0IEFuZ2xlUmF3IHsKICAgICBDU1NVbml0VHlwZSB0eXBlOwogICAgIGRv
dWJsZSB2YWx1ZTsKQEAgLTc2LDEzICs4NCwxNyBAQCBzdHJ1Y3QgTGVuZ3RoUmF3IHsKICAgICBk
b3VibGUgdmFsdWU7CiB9OwogCi11c2luZyBMZW5ndGhPclBlcmNlbnRSYXcgPSBzdGQ6OnZhcmlh
bnQ8TGVuZ3RoUmF3LCBkb3VibGU+OwordXNpbmcgTGVuZ3RoT3JQZXJjZW50UmF3ID0gc3RkOjp2
YXJpYW50PExlbmd0aFJhdywgUGVyY2VudFJhdz47Cit1c2luZyBOdW1iZXJPclBlcmNlbnRSYXcg
PSBzdGQ6OnZhcmlhbnQ8TnVtYmVyUmF3LCBQZXJjZW50UmF3PjsKK3VzaW5nIEFuZ2xlT3JOdW1i
ZXJSYXcgPSBzdGQ6OnZhcmlhbnQ8QW5nbGVSYXcsIE51bWJlclJhdz47CiAKLXN0ZDo6b3B0aW9u
YWw8aW50PiBjb25zdW1lSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlIG1p
bmltdW1WYWx1ZSA9IC1zdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IGRvdWJsZSBtaW5pbXVtVmFsdWUgPSAtc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgo
KSk7CitzdGQ6Om9wdGlvbmFsPGludD4gY29uc3VtZUludGVnZXJSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYpOworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihDU1NQYXJz
ZXJUb2tlblJhbmdlJik7CitzdGQ6Om9wdGlvbmFsPGludD4gY29uc3VtZUludGVnZXJaZXJvQW5k
R3JlYXRlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwog
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY29uc3VtZVBvc2l0aXZlSW50ZWdlclJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2
ZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwotc3RkOjpvcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJh
bmdlOjpBbGwpOworc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1bWVOdW1iZXJSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpOwogUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBW
YWx1ZVJhbmdlKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlck9yUGVy
Y2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSk7CiBzdGQ6Om9wdGlvbmFsPGRv
dWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwpA
QCAtOTAsMTEgKzEwMiwxMSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250
V2VpZ2h0TnVtYmVyKENTU1AKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRX
ZWlnaHROdW1iZXJXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wm
KTsKIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3KENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5p
dGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxl
bmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5p
dGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7Ci1zdGQ6Om9wdGlvbmFsPGRvdWJs
ZT4gY29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBW
YWx1ZVJhbmdlOjpBbGwpOworc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiBjb25zdW1lUGVyY2Vu
dFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCk7
CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBl
cmNlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlLCBDU1NWYWx1
ZVBvb2wmKTsKIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3Ro
T3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJh
bmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKLVJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdl
JiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVp
cms6OkZvcmJpZCwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UgPSBmYWxzZSk7CitSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0
bGVzc1F1aXJrOjpGb3JiaWQsIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSA9IE5lZ2F0aXZlUGVy
Y2VudGFnZVBvbGljeTo6Rm9yYmlkKTsKIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVB
bmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcmsgPSBVbml0bGVzc1pl
cm9RdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xl
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5p
dGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJr
OjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVXb3JrZXJT
YWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wmLCBV
bml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyayA9
IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcAkocmV2
aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlcldvcmtlclNhZmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsNyArNTQwLDcgQEAgc3Rh
dGljIFJlZlB0cjxDU1NGb250RmVhdHVyZVZhbHVlPiBjb25zdW1lRm9udEZlYXR1cmVUCiAgICAg
aW50IHRhZ1ZhbHVlID0gMTsKICAgICBpZiAoIXJhbmdlLmF0RW5kKCkgJiYgcmFuZ2UucGVlaygp
LnR5cGUoKSAhPSBDb21tYVRva2VuKSB7CiAgICAgICAgIC8vIEZlYXR1cmUgdGFnIHZhbHVlcyBj
b3VsZCBmb2xsb3c6IDxpbnRlZ2VyPiB8IG9uIHwgb2ZmCi0gICAgICAgIGlmIChhdXRvIGludGVn
ZXIgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyUmF3KHJhbmdlLCAw
KSkKKyAgICAgICAgaWYgKGF1dG8gaW50ZWdlciA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlclJhdyhyYW5nZSkpCiAgICAgICAgICAgICB0YWdW
YWx1ZSA9ICppbnRlZ2VyOwogICAgICAgICBlbHNlIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBD
U1NWYWx1ZU9uIHx8IHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlT2ZmKQogICAgICAgICAg
ICAgdGFnVmFsdWUgPSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkgPT0g
Q1NTVmFsdWVPbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZv
bnRSYXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2
ZUZvckZvbnRSYXcuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDggKzIw
OCw4IEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0
IEZvbgogICAgICAgICAgICAgLy8gICAgICAgIHRoYXQgaXQncyBvZmYtc2NyZWVuIGFuZCB0aGVy
ZWZvcmUgZG9lc24ndCBzdHJpY3RseSBoYXZlIGFuIGFzc29jaWF0ZWQgdmlld3BvcnQuCiAgICAg
ICAgICAgICAvLyAgICAgICAgVGhpcyBuZWVkcyBjbGFyaWZpY2F0aW9uIGFuZCBwb3NzaWJseSBm
aXhpbmcuCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KENTU1ByaW1pdGl2
ZVZhbHVlOjpjb21wdXRlVW56b29tZWROb25DYWxjTGVuZ3RoRG91YmxlKGxlbmd0aC50eXBlLCBs
ZW5ndGgudmFsdWUsIENTU1Byb3BlcnR5Rm9udFNpemUsICZmb250Q2FzY2FkZS5mb250TWV0cmlj
cygpLCAmZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksICZmb250Q2FzY2FkZS5mb250RGVz
Y3JpcHRpb24oKSwgaXM8RG9jdW1lbnQ+KGNvbnRleHQpID8gZG93bmNhc3Q8RG9jdW1lbnQ+KGNv
bnRleHQpLnJlbmRlclZpZXcoKSA6IG51bGxwdHIpKTsKLSAgICAgICAgfSwgWyZdIChkb3VibGUg
cGVyY2VudGFnZSkgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigocGFy
ZW50U2l6ZSAqIHBlcmNlbnRhZ2UpIC8gMTAwLjApOworICAgICAgICB9LCBbJl0gKGNvbnN0IENT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6UGVyY2VudFJhdyYgcGVyY2VudGFnZSkgeworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigocGFyZW50U2l6ZSAqIHBlcmNlbnRhZ2Uu
dmFsdWUpIC8gMTAwLjApOwogICAgICAgICB9KTsKICAgICB9KTsKIAo=
</data>
<flag name="review"
          id="474615"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448704</attachid>
            <date>2022-01-09 09:22:53 -0800</date>
            <delta_ts>2022-01-09 09:34:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>metaconsumer.diff</filename>
            <type>text/plain</type>
            <size>149984</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNSBAQAorMjAyMi0wMS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQ1NTIHByb3BlcnR5
IHBhcnNpbmcgaGVscGVycyB0byBiZSBhIGJpdCBtb3JlIGNvbXBvc2FibGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDg2OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlZmFjdG9ycyBwcmltaXRpdmUgQ1NT
IHByb3BlcnR5IHBhcnNpbmcgdG8gYmUgYnVpbHQgb24gYSBuZXcgY29tcG9zYWJsZSBzZXQgb2Yg
CisgICAgICAgIGxvd2VyIGxldmVsIHByaW1pdGl2ZXMuCisKKyAgICAgICAgVGhlIGxvd2VzdCBs
ZXZlbCBwcmltaXRpdmUgaXMgbm93IGEgImNvbnN1bWVyIiBzdHJ1Y3QgdGhhdCBvbmx5IGtub3dz
IGhvdyB0byBjb25zdW1lCisgICAgICAgIGEgcGFydGljdWxhciB0eXBlIGZvciBhIHBhcnRpY3Vs
YXIgdG9rZW4gdHlwZS4gRm9yIGV4YW1wbGUsIE51bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVy
Q29uc3VtZXIKKyAgICAgICAgb25seSBrbm93cyBob3cgdG8gY29uc3VtZSBhbmQgcmV0dXJuIGEg
TnVtYmVyUmF3IGlmIHRoZSB0b2tlbiB0eXBlIGlzIGEgTnVtYmVyVG9rZW4uCisKKyAgICAgICAg
Rm9yIHRoZXNlIHRva2VuIHNwZWNpZmljIGNvbnN1bWVycyB0byBiZSB1c2VmdWwsIHRoZXkgbmVl
ZCB0byBiZSBjb21iaW5lZCB0b2dldGhlci4gVG8KKyAgICAgICAgZG8gdGhpcywgYSBoaWdoZXIg
bGV2ZWwgbWV0YS1jb25zdW1lciB0eXBlIHRoYXQgaXMgbm90IHRpZWQgdG8gYSBzcGVjaWZpYyB0
b2tlbiBpcyB1c2VkLgorICAgICAgICBUaGVzZSBhcmUgZGVmaW5lZCBhcyBlbXB0eSBzdHJ1Y3Rz
IHdpdGggJ3VzaW5nJyBzdGF0ZW1lbnRzIHRvIGluZGljYXRlIHdoaWNoIGxvdyBsZXZlbAorICAg
ICAgICBjb25zdW1lcnMgdG8gdXNlIGZvciB3aGljaCB0b2tlbiB0b2tlbiB0eXBlcy4gRm9yIGV4
YW1wbGU6CisgICAgICAgIAorICAgICAgICAgICAgc3RydWN0IE51bWJlclJhd0NvbnN1bWVyIHsK
KyAgICAgICAgICAgICAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz47
CisKKyAgICAgICAgICAgICAgICB1c2luZyBGdW5jdGlvblRva2VuID0gTnVtYmVyUmF3S25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgICAgICAgICAgICAgIHVzaW5nIE51bWJlclRv
a2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgVGhpcyBtZXRhLWNvbnN1bWVyIGRlZmluaXRpb24gZGVmaW5lcyBhIGNv
bnN1bWVyIHRoYXQgdXRpbGl6ZXMgdHdvIGxvd2VyIGxldmVsIHRva2VuIAorICAgICAgICBzcGVj
aWZpYyBjb25zdW1lcnMgZm9yIGZ1bmN0aW9uIGFuZCBudW1iZXIgdG9rZW5zLgorCisgICAgICAg
IFRvIGFjdHVhbGwgZG8gc29tZXRoaW5nIHdpdGggdGhpcyBtZXRhLWNvbnN1bWVyIGRlZmluaXRp
b24sIHRoZSAgY29uc3VtZU1ldGFDb25zdW1lcjw+KC4uLikgCisgICAgICAgIGZ1bmN0aW9uIGlz
IHVzZWQsIHdoaWNoIGludHJvc3BlY3RzIHdoaWNoIHVzaW5nIHN0YXRlbWVudHMgYXJlIGRlZmlu
ZWQsIGFuZCBkaXNwYXRjaGVzIHRvIAorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyB0b2tlbiBz
cGVjaWZpYyBjb25zdW1lciAoc2VlIE1ldGFDb25zdW1lckRpc3BhdGNoZXIgZm9yIGhvdyBpbnRy
b3NwZWN0aW9uIHdvcmtzKS4KKworICAgICAgICBJbiBhZGRpdGlvbiB0byBwcmltaXRpdmUgbWV0
YS1jb25zdW1lciBkZWZpbml0aW9ucywgdGhlcmUgYXJlIGFsc28gZGVmaW5pdGlvbnMgZm9yIG1l
dGEtY29uc3VtZXJzCisgICAgICAgIHRoYXQgY2FuIGNvbnN1bWVyIG1vcmUgY29tcGxleCB0aGlu
Z3Mgd2l0aG91dCBkdXBsaWNhdGUgd29yay4gRm9yIGV4YW1wbGUsIEFuZ2xlT3JQZXJjZW50Q29u
c3VtZXIKKyAgICAgICAgaXMgYSBtZXRhLWNvbnN1bWVyIHRoYXQgY29uc3VtZXMgZWl0aGVyIGFu
IEFuZ2xlIG9yIGEgUGVyY2VudC4gVG8gZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQgYm90aAorICAg
ICAgICBvZiB0aGVzZSB3YW50IHRvIG9wZXJhdGUgb24gZnVuY3Rpb24gdG9rZW5zLCB0aGUgU2Ft
ZVRva2VuTWV0YUNvbnN1bWVyIGFsbG93cyBjb25jYXRlbmF0aW5nIG11bHRpcGxlCisgICAgICAg
IHBlci10b2tlbiBjb25zdW1lcnMgKGluIHRoaXMgY2FzZSwgdHdvIGZ1bmN0aW9uIHRva2VuIGNv
bnN1bWVycykgdG9nZXRoZXIuIAorICAgICAgICAKKyAgICAgICAgTWV0YS1jb25zdW1lciBkZWZp
bml0aW9ucyBjYW4gYWxzbyBkZWZpbmUsIG9yIGFsbG93IGRlZmluaW5nIHZpYSBhIHRlbXBsYXRl
IHBhcmFtZXRlciwgYSBUcmFuc2Zvcm1lciwKKyAgICAgICAgd2hpY2gsIGFzIHRoZSBuYW1lIGlt
cGxpZXMsIHRyYW5zZm9ybSB0aGUgb3V0cHV0LiBGb3IgZXhhbXBsZSwgdGhlIEFuZ2xlT3JOdW1i
ZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lcgorICAgICAgICBjYW4gYmUgdXNlZCB0byBlbnN1cmUg
dGhhdCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIGluIGRlZ3JlZXMsIGFuZCBkb2Vzbid0IGhhdmUg
dG8gYmUgdW53cmFwcGVkIGJ5CisgICAgICAgIHRoZSB1c2VyLgorCisgICAgICAgIFRoZSBnb2Fs
IGlzIGF2b2lkIHRoZSBjb21iaW5hdG9yaWFsIGV4cGxvc2l0aW9uIG9mIGZ1bmN0aW9ucyBicmFu
Y2hpbmcgb24gdG9rZW4gdHlwZSBmb3IKKyAgICAgICAgbW9yZSBhbmQgbW9yZSBzcGVjaWFsaXpl
ZCBwYXJzaW5nIG5lZWRzLiBGb3IgaW5zdGFuY2UsIGFuIHVwY29tcGluZyBjaGFuZ2Ugd2lsbCB3
YW50IHRvIAorICAgICAgICBleHRlbmQgY29uc3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5n
U3ltYm9sVGFibGVJZGVudCBhbmQgYSBmZXcgb3RoZXIgcmVsYXRlZCBjb25zdW1lcnMKKyAgICAg
ICAgdG8gYWxzbyBjb25zdW1lIHRoZSBpZGVudGlmaWVyICdub25lJy4gUmF0aGVyIHRoYW4gZHVw
bGljYXRpbmcgYWxsIHRoZSBsb2dpYywgdGhpcyBhbGxvd3MKKyAgICAgICAgZm9yIGp1c3QgZGVm
aW5pbmcgYSBmZXcgbWV0YS1jb25zdW1lciBkZWZpbml0aW9ucyB1dGlsaXppbmcgYWxtb3N0IGVu
dGlyZWx5IGV4aXN0aW5nIGxvd2VyCisgICAgICAgIGxldmVsIGNvbnN1bWVycy4KKworICAgICAg
ICAqIGNzcy9NZWRpYVF1ZXJ5RXhwcmVzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dW1lRmlyc3RWYWx1ZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lRm9udFZhcmlhdGlvblRhZyk6CisgICAgICAg
IChXZWJDb3JlOjpjb25zdW1lQ3ViaWNCZXppZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Vt
ZVNwcmluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVQZXJzcGVjdGl2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN1bWVDb3VudGVyU3R5bGVQYWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUNvdW50ZXJT
dHlsZUFkZGl0aXZlU3ltYm9scyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQmFzZVBhbGV0
dGVEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVPdmVycmlkZUNvbG9yc0Rl
c2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVG
bGV4KToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6
OkNhbGNQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29tcHV0ZU1pbmltdW1WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkludGVnZXJUeXBlUmF3
S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6SW50ZWdlclR5cGVSYXdLbm93blRva2VuVHlw
ZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6SW50ZWdlclR5cGVLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6
OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpJ
bnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjp2YWxpZGF0ZWROdW1iZXJSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1iZXJSYXdL
bm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1iZXJSYXdLbm93blRva2VuVHlwZU51bWJl
ckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6TnVtYmVyUmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyOjpjb25zdW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TnVtYmVyQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNv
bnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1i
ZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojp2YWxpZGF0ZWRQZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6UGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29u
c3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlBlcmNl
bnRSYXdLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlBlcmNlbnRSYXdLbm93blRva2VuVHlw
ZUlkZW50Q29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aFJhd0tub3duVG9rZW5UeXBlRnVu
Y3Rpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6Okxlbmd0aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNv
bnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5n
dGhSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6
OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpB
bmdsZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkFuZ2xlUmF3S25vd25Ub2tlblR5
cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OkFuZ2xlUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjo6
Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkFu
Z2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29u
c3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1l
bnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OkFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSZXNvbHV0aW9uQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRyYW5zZm9ybUFwcGxpZXI6
OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6YXBw
bHlUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpJZGVudGl0eVRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlOjp0cmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpBbmdsZU9y
TnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Ok51bWJlck9yUGVyY2VudERpdmlkZWRCeTEw
MFRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpNZXRhQ29uc3VtZXJEaXNwYXRjaGVyOjpjb25zdW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU1ldGFDb25zdW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlNhbWVUb2tlbk1l
dGFDb25zdW1lckFwcGxpZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpTYW1lVG9rZW5NZXRhQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBlcmNlbnRSYXdU
cmFuc2Zvcm1lcjo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6QW5nbGVPck51bWJlclJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjo6
Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Ok51
bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjo6Y29uc3VtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVJbnRlZ2VyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVJbnRlZ2VyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyUmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXJa
ZXJvQW5kR3JlYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVQb3NpdGl2ZUludGVnZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlclJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJBbGxv
d2luZ1N5bWJvbFRhYmxlSWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJ
ZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVXb3JrZXJTYWZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
UmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVBbmdsZU9yUGVyY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoT3JQZXJjZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlT3JO
dW1iZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lQW5nbGVPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJPclBlcmNl
bnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlck9yUGVyY2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVG
b250V2VpZ2h0TnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZU9wdGlvbmFsQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFi
bGVJZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5v
cm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSR0JOb3JtYWxpemluZ1RyYW5z
Zm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lUmVsYXRpdmVSR0JDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVSR0JPckhTTE9wdGlvbmFs
QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZU5vblJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VOb25SZWxhdGl2ZUhTTFBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTm9uUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VMYWJQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VM
Q0hQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6cGFyc2VSZWxhdGl2ZUxDSFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZU5vblJlbGF0aXZlTENIUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xv
ckZ1bmN0aW9uRm9yUkdCVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VD
b2xvckNvbnRyYXN0RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yTWl4Q29tcG9uZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aW9uQ29tcG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZVBvc2l0aW9uQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNyb3NzRmFkZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMaW5lSGVp
Z2h0UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2Fs
Y1BhcnNlcjo6Y29uc3VtZUludGVnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFyc2VyOjpjb25zdW1lSW50ZWdlclR5cGVSYXcp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpD
YWxjUGFyc2VyOjpjb25zdW1lTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZU51bWJlclJhdyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQ
YXJzZXI6OmNvbnN1bWVQZXJjZW50UmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZUFuZ2xlUmF3KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1Bh
cnNlcjo6Y29uc3VtZUxlbmd0aFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVG
dW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVt
YmVyUmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlckNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudFJh
d1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tl
blR5cGVQZXJjZW50YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlUGVyY2VudGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3Ro
UmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aENT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5n
bGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRv
a2VuVHlwZURpbWVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVEaW1lbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUmVzb2x1dGlvbkNTU1ByaW1pdGl2
ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJS
YXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQW5nbGVSYXdPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVOdW1iZXJSYXdPclBlcmNlbnRSYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5
MTAwUmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZU51bWJlclJhd09yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVu
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRh
YmxlSWRlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtl
clNhZmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzV29y
a2VyU2FmZTo6Y29uc3VtZUZvbnRGZWF0dXJlVGFnKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJl
c29sdmVGb3JGb250UmF3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlRm9y
Rm9udFJhdyk6CisKIDIwMjItMDEtMDggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgRml4IHNvbWUgQ1NTIGZpbHRlciBpbnRlcnBvbGF0aW9uIGlzc3Vl
cwpAQCAtMzQsNiArMjU2LDM5IEBACiAKICAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
OgogICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCk6
CisKKzIwMjItMDEtMDggIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBoZWxwZXJzIHRvIGFjY2VzcyBDb3JlR3JhcGhpY3MgY29sb3Igc3BhY2VzIG1vcmUgZWFz
aWx5IGluIGdlbmVyaWMgY29udGV4dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNTAwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBzb21lIHN0cnVjdHMgYW5kIHR5cGUgdHJhaXQgaGVscGVycyB0
byBhbGxvdyBhY2Nlc3NpbmcgdGhlIENvcmVHcmFwaGljcworICAgICAgICBDR0NvbG9yU3BhY2VS
ZWYgYXNzb2NpYXRlZCB3aXRoIGEgQ29sb3JTcGFjZSBlbnVtIHZhbHVlIGF0IGNvbXBpbGUgdGlt
ZS4gVGhpcworICAgICAgICB3aWxsIGJlIHVzZWZ1bCBmb3IgZ2VuZXJhbGl6aW5nIHNvbWUgb2Yg
dGhlIGdyYWRpZW50IHJlbmRlcmluZyBjb2RlIG9wdGltaXphdGlvbnMKKyAgICAgICAgSSBoYXZl
IHBsYW5uZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjcmVhdGVBbmRMb3NzbGVzc2x5Q29udmVydFRvU3Vw
cG9ydGVkQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JT
cGFjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9yU3BhY2VGb3JDR0NvbG9yU3BhY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yU3BhY2VDRy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q0dDb2xvclNwYWNlTWFwcGluZzxDb2xvclNwYWNlOjpTUkdCPjo6Y29sb3JT
cGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbG9yU3BhY2VNYXBwaW5nPENvbG9yU3BhY2U6
OkE5OFJHQj46OmNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb2xvclNwYWNlTWFw
cGluZzxDb2xvclNwYWNlOjpEaXNwbGF5UDM+Ojpjb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNHQ29sb3JTcGFjZU1hcHBpbmc8Q29sb3JTcGFjZTo6RXh0ZW5kZWRBOThSR0I+Ojpjb2xv
clNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29sb3JTcGFjZU1hcHBpbmc8Q29sb3JTcGFj
ZTo6RXh0ZW5kZWREaXNwbGF5UDM+Ojpjb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNH
Q29sb3JTcGFjZU1hcHBpbmc8Q29sb3JTcGFjZTo6RXh0ZW5kZWRSZWMyMDIwPjo6Y29sb3JTcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbG9yU3BhY2VNYXBwaW5nPENvbG9yU3BhY2U6OkV4
dGVuZGVkTGluZWFyU1JHQj46OmNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb2xv
clNwYWNlTWFwcGluZzxDb2xvclNwYWNlOjpFeHRlbmRlZFByb1Bob3RvUkdCPjo6Y29sb3JTcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDR0NvbG9yU3BhY2VNYXBwaW5nPENvbG9yU3BhY2U6OkV4
dGVuZGVkU1JHQj46OmNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0dDb2xvclNwYWNl
TWFwcGluZzxDb2xvclNwYWNlOjpSZWMyMDIwPjo6Y29sb3JTcGFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpDR0NvbG9yU3BhY2VNYXBwaW5nPENvbG9yU3BhY2U6OkxpbmVhclNSR0I+Ojpjb2xvclNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29sb3JTcGFjZU1hcHBpbmc8Q29sb3JTcGFjZTo6
UHJvUGhvdG9SR0I+Ojpjb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNHQ29sb3JTcGFj
ZU1hcHBpbmc8Q29sb3JTcGFjZTo6WFlaX0Q1MD46OmNvbG9yU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0dDb2xvclNwYWNlTWFwcGluZ0dldHRlcjo6Y29sb3JTcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjYWNoZWROdWxsYWJsZUNHQ29sb3JTcGFjZSk6CiAKIDIwMjItMDEtMDggIEdhYnJp
ZWwgTmF2YSBNYXJpbm8gIDxnbmF2YW1hcmlub0BhcHBsZS5jb20+CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwcmVzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHByZXNzaW9uLmNwcAkocmV2aXNpb24gMjg3ODExKQor
KysgU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHByZXNzaW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZlYXR1cmVWYWxp
ZFdpdGhvdXRWYWx1ZShjb25zdCBBdAogCiBpbmxpbmUgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lRmlyc3RWYWx1ZShjb25zdCBTdHJpbmcmIG1lZGlhRmVhdHVyZSwgQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAwKSkKKyAgICBpZiAoYXV0byB2YWx1
ZSA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRl
cihyYW5nZSkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKIAogICAgIGlmICghZmVhdHVyZUV4cGVj
dGluZ1Bvc2l0aXZlSW50ZWdlcihtZWRpYUZlYXR1cmUpICYmICFpc0FzcGVjdFJhdGlvRmVhdHVy
ZShtZWRpYUZlYXR1cmUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2
Miw3ICs1NjIsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRm9udFZhcmlhdGlv
blRhZyhDU1NQYXIKICAgICBpZiAoIXRhZ1ZhbHVlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAKLSAgICByZXR1cm4gQ1NTRm9udFZhcmlhdGlvblZhbHVlOjpjcmVhdGUodGFnLCAqdGFn
VmFsdWUpOworICAgIHJldHVybiBDU1NGb250VmFyaWF0aW9uVmFsdWU6OmNyZWF0ZSh0YWcsIHRh
Z1ZhbHVlLT52YWx1ZSk7CiB9CiAgICAgCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
Rm9udFZhcmlhdGlvblNldHRpbmdzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtMTQ1
Nyw3ICsxNDU3LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUN1YmljQmV6aWVy
KENTU1BhcnNlclRvCiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBhcmdzID0gY29uc3VtZUZ1bmN0
aW9uKHJhbmdlQ29weSk7CiAKICAgICBhdXRvIHgxID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsK
LSAgICBpZiAoIXgxIHx8ICp4MSA8IDAgfHwgKngxID4gMSkKKyAgICBpZiAoIXgxIHx8IHgxLT52
YWx1ZSA8IDAgfHwgeDEtPnZhbHVlID4gMSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
CiAgICAgaWYgKCFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQpAQCAtMTQ3
MSw3ICsxNDcxLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUN1YmljQmV6aWVy
KENTU1BhcnNlclRvCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byB4MiA9IGNv
bnN1bWVOdW1iZXJSYXcoYXJncyk7Ci0gICAgaWYgKCF4MiB8fCAqeDIgPCAwIHx8ICp4MiA+IDEp
CisgICAgaWYgKCF4MiB8fCB4Mi0+dmFsdWUgPCAwIHx8IHgyLT52YWx1ZSA+IDEpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNw
YWNlKGFyZ3MpKQpAQCAtMTQ4NSw3ICsxNDg1LDcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4g
Y29uc3VtZUN1YmljQmV6aWVyKENTU1BhcnNlclRvCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgcmFuZ2UgPSByYW5nZUNvcHk7Ci0gICAgcmV0dXJuIENTU0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKCp4MSwgKnkxLCAqeDIsICp5Mik7CisgICAgcmV0dXJuIENT
U0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKHgxLT52YWx1ZSwgeTEtPnZh
bHVlLCB4Mi0+dmFsdWUsIHkyLT52YWx1ZSk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVTcHJpbmdGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTE0
OTYsMTcgKzE0OTYsMTcgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNwcmluZ0Z1
bmN0aW9uKENTU1BhcnNlCiAKICAgICAvLyBNYXNzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCiAg
ICAgYXV0byBtYXNzID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKLSAgICBpZiAoIW1hc3MgfHwg
Km1hc3MgPD0gMCkKKyAgICBpZiAoIW1hc3MgfHwgbWFzcy0+dmFsdWUgPD0gMCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgLy8gU3RpZmZuZXNzIG11c3QgYmUgZ3JlYXRlciB0
aGFuIDAuCiAgICAgYXV0byBzdGlmZm5lc3MgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOwotICAg
IGlmICghc3RpZmZuZXNzIHx8ICpzdGlmZm5lc3MgPD0gMCkKKyAgICBpZiAoIXN0aWZmbmVzcyB8
fCBzdGlmZm5lc3MtPnZhbHVlIDw9IDApCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAog
ICAgIC8vIERhbXBpbmcgY29lZmZpY2llbnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwg
dG8gMC4KICAgICBhdXRvIGRhbXBpbmcgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOwotICAgIGlm
ICghZGFtcGluZyB8fCAqZGFtcGluZyA8IDApCisgICAgaWYgKCFkYW1waW5nIHx8IGRhbXBpbmct
PnZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgLy8gSW5pdGlh
bCB2ZWxvY2l0eSBtYXkgaGF2ZSBhbnkgdmFsdWUuCkBAIC0xNTE5LDcgKzE1MTksNyBAQCBzdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lU3ByaW5nRnVuY3Rpb24oQ1NTUGFyc2UKIAogICAg
IHJhbmdlID0gcmFuZ2VDb3B5OwogCi0gICAgcmV0dXJuIENTU1NwcmluZ1RpbWluZ0Z1bmN0aW9u
VmFsdWU6OmNyZWF0ZSgqbWFzcywgKnN0aWZmbmVzcywgKmRhbXBpbmcsICppbml0aWFsVmVsb2Np
dHkpOworICAgIHJldHVybiBDU1NTcHJpbmdUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUobWFz
cy0+dmFsdWUsIHN0aWZmbmVzcy0+dmFsdWUsIGRhbXBpbmctPnZhbHVlLCBpbml0aWFsVmVsb2Np
dHktPnZhbHVlKTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUFuaW1hdGlv
blRpbWluZ0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJz
ZXJDb250ZXh0JiBjb250ZXh0KQpAQCAtMTg3Myw3ICsxODczLDcgQEAgc3RhdGljIGJvb2wgY29u
c3VtZVBlcnNwZWN0aXZlKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyCiAgICAgfQogCiAgICAgaWYg
KGF1dG8gcGVyc3BlY3RpdmUgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MsIFZhbHVlUmFuZ2U6Ok5v
bk5lZ2F0aXZlKSkgewotICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YXBwZW5kKENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUoKnBlcnNwZWN0aXZlLCBDU1NVbml0VHlwZTo6Q1NTX1BYKSk7CisgICAg
ICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwZXJz
cGVjdGl2ZS0+dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUFgpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCkBAIC0yMzM2LDcgKzIzMzYsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lQ3Vyc29yKENTU1BhcnNlclRva2VuUmEKICAgICAgICAgICAgIGlmICgheSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgY2xhbXAgb3Igcm91bmQgaW5zdGVhZCBvZiBqdXN0IGNhc3RpbmcgZnJvbSBkb3VibGUg
dG8gaW50PwotICAgICAgICAgICAgaG90U3BvdCA9IEludFBvaW50IHsgc3RhdGljX2Nhc3Q8aW50
PigqeCksIHN0YXRpY19jYXN0PGludD4oKnkpIH07CisgICAgICAgICAgICBob3RTcG90ID0gSW50
UG9pbnQgeyBzdGF0aWNfY2FzdDxpbnQ+KHgtPnZhbHVlKSwgc3RhdGljX2Nhc3Q8aW50Pih5LT52
YWx1ZSkgfTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbGlzdCkKQEAgLTI0NTgsOSArMjQ1
OCw5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJzcGVjdGl2
ZShDUwogCiAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBxdWlyayBvbmx5IGFwcGx5IHRvIHRoZSB3
ZWJraXQgcHJlZml4ZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkuCiAgICAgYXV0byBwZXJzcGVj
dGl2ZSA9IGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UpOwotICAgIGlmICghcGVyc3BlY3RpdmUgfHwg
KnBlcnNwZWN0aXZlIDwgMCkKKyAgICBpZiAoIXBlcnNwZWN0aXZlIHx8IHBlcnNwZWN0aXZlLT52
YWx1ZSA8IDApCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKCpwZXJzcGVjdGl2ZSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocGVyc3BlY3RpdmUtPnZhbHVlLCBDU1NV
bml0VHlwZTo6Q1NTX1BYKTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNvbnN1
bWVTY3JvbGxTbmFwQWxpZ24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC00NTE4LDcg
KzQ1MTgsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVNpbmds
ZVZhbHVlKEMKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyRW5kRW5kUmFkaXVzOgogICAgICAg
ICByZXR1cm4gY29uc3VtZUJvcmRlclJhZGl1c0Nvcm5lcihtX3JhbmdlLCBtX2NvbnRleHQubW9k
ZSk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXhHcm91cDoKLSAgICAgICAgcmV0
dXJuIGNvbnN1bWVJbnRlZ2VyKG1fcmFuZ2UsIDApOworICAgICAgICByZXR1cm4gY29uc3VtZUlu
dGVnZXJaZXJvQW5kR3JlYXRlcihtX3JhbmdlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5T3JkZXI6
CiAgICAgICAgIHJldHVybiBjb25zdW1lSW50ZWdlcihtX3JhbmdlKTsKICAgICBjYXNlIENTU1By
b3BlcnR5VGV4dFVuZGVybGluZVBvc2l0aW9uOgpAQCAtNDgxMiw3ICs0ODEyLDcgQEAgc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNvdW50ZXJTdHlsZVBhZChDU1NQYXJzCiAgICAgUmVm
UHRyPENTU1ZhbHVlPiBzeW1ib2w7CiAgICAgd2hpbGUgKCFpbnRlZ2VyIHx8ICFzeW1ib2wpIHsK
ICAgICAgICAgaWYgKCFpbnRlZ2VyKSB7Ci0gICAgICAgICAgICBpbnRlZ2VyID0gY29uc3VtZUlu
dGVnZXIocmFuZ2UsIDApOworICAgICAgICAgICAgaW50ZWdlciA9IGNvbnN1bWVJbnRlZ2VyWmVy
b0FuZEdyZWF0ZXIocmFuZ2UpOwogICAgICAgICAgICAgaWYgKGludGVnZXIpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTQ4NTIsMTIgKzQ4NTIsMTIgQEAgc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUNvdW50ZXJTdHlsZUFkZGl0aXZlU3ltCiAgICAgYXV0
byB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgc3Rk
OjpvcHRpb25hbDxpbnQ+IGxhc3RXZWlnaHQ7CiAgICAgZG8gewotICAgICAgICBhdXRvIGludGVn
ZXIgPSBjb25zdW1lSW50ZWdlcihyYW5nZSwgMCk7CisgICAgICAgIGF1dG8gaW50ZWdlciA9IGNv
bnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIocmFuZ2UpOwogICAgICAgICBhdXRvIHN5bWJvbCA9
IGNvbnN1bWVDb3VudGVyU3R5bGVTeW1ib2wocmFuZ2UsIGNvbnRleHQpOwogICAgICAgICBpZiAo
IWludGVnZXIpIHsKICAgICAgICAgICAgIGlmICghc3ltYm9sKQogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICAgICAgaW50ZWdlciA9IGNvbnN1bWVJbnRlZ2VyKHJhbmdl
LCAwKTsKKyAgICAgICAgICAgIGludGVnZXIgPSBjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVy
KHJhbmdlKTsKICAgICAgICAgICAgIGlmICghaW50ZWdlcikKICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgfQpAQCAtNTAwMiwxNCArNTAwMiwxNCBAQCBzdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQmFzZVBhbGV0dGVEZXMKIHsKICAgICBpZiAo
YXV0byByZXN1bHQgPSBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVMaWdodCwgQ1NTVmFsdWVEYXJrPihy
YW5nZSkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2Vy
KHJhbmdlLCAwKTsKKyAgICByZXR1cm4gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihyYW5n
ZSk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjb25zdW1lT3ZlcnJpZGVDb2xv
cnNEZXNjcmlwdG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiBjb250ZXh0KQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NW
YWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZG8gewotICAgICAgICBhdXRv
IGtleSA9IGNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAwKTsKKyAgICAgICAgYXV0byBrZXkgPSBjb25z
dW1lSW50ZWdlclplcm9BbmRHcmVhdGVyKHJhbmdlKTsKICAgICAgICAgaWYgKCFrZXkpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNTMzNywxMyArNTMzNywxMyBAQCBib29sIENT
U1Byb3BlcnR5UGFyc2VyOjpjb25zdW1lRmxleChib29sIGltcG9ydGFudCkKICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSAwOwogICAgICAgICB3aGlsZSAoIW1fcmFuZ2UuYXRFbmQoKSAmJiBpbmRl
eCsrIDwgMykgewogICAgICAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJh
dyhtX3JhbmdlKSkgewotICAgICAgICAgICAgICAgIGlmICgqbnVtYmVyIDwgMCkKKyAgICAgICAg
ICAgICAgICBpZiAobnVtYmVyLT52YWx1ZSA8IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoZmxleEdyb3cgPT0gdW5zZXRWYWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgZmxleEdyb3cgPSAqbnVtYmVyOworICAgICAgICAgICAgICAgICAg
ICBmbGV4R3JvdyA9IG51bWJlci0+dmFsdWU7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxl
eFNocmluayA9PSB1bnNldFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBmbGV4U2hyaW5rID0g
Km51bWJlcjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICghKm51bWJlcikgLy8gZmxleCBvbmx5
IGFsbG93cyBhIGJhc2lzIG9mIDAgKHNhbnMgdW5pdHMpIGlmIGZsZXgtZ3JvdyBhbmQgZmxleC1z
aHJpbmsgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuIHNldC4KKyAgICAgICAgICAgICAgICAgICAg
ZmxleFNocmluayA9IG51bWJlci0+dmFsdWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIW51
bWJlci0+dmFsdWUpIC8vIGZsZXggb25seSBhbGxvd3MgYSBiYXNpcyBvZiAwIChzYW5zIHVuaXRz
KSBpZiBmbGV4LWdyb3cgYW5kIGZsZXgtc2hyaW5rIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlbiBz
ZXQuCiAgICAgICAgICAgICAgICAgICAgIGZsZXhCYXNpcyA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoMCwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCShyZXZpc2lv
biAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCBzdGF0aWMgYm9v
bCBjYW5Db25zdW1lQ2FsY1ZhbHVlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2EKIC8vIEZJWE1FOiBj
b25zaWRlciBwdWxsaW5nIGluIHRoZSBwYXJzaW5nIGxvZ2ljIGZyb20gQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyLgogY2xhc3MgQ2FsY1BhcnNlciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
Q2FsY1BhcnNlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29y
eSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdl
OjpBbGwsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSB7IH0sIENTU1Zh
bHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCksIGJvb2wgYWxsb3dzTmVn
YXRpdmVQZXJjZW50YWdlID0gZmFsc2UpCisgICAgZXhwbGljaXQgQ2FsY1BhcnNlcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVn
b3J5LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwsIGNvbnN0IENTU0Nh
bGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSB7IH0sIENTU1ZhbHVlUG9vbCYgcG9vbCA9IENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCksIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSBuZWdhdGl2
ZVBlcmNlbnRhZ2VQb2xpY3kgPSBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3k6OkZvcmJpZCkKICAg
ICAgICAgOiBtX3NvdXJjZVJhbmdlKHJhbmdlKQogICAgICAgICAsIG1fcmFuZ2UocmFuZ2UpCiAg
ICAgICAgICwgbV9wb29sKHBvb2wpCkBAIC0xMjYsNyArMTI2LDcgQEAgY2xhc3MgQ2FsY1BhcnNl
ciB7IChwdWJsaWMpCiAgICAgICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdl
LnBlZWsoKTsKICAgICAgICAgYXV0byBmdW5jdGlvbklkID0gdG9rZW4uZnVuY3Rpb25JZCgpOwog
ICAgICAgICBpZiAoQ1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbihmdW5jdGlvbklkKSkKLSAg
ICAgICAgICAgIG1fY2FsY1ZhbHVlID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoZnVuY3Rpb25JZCwg
Y29uc3VtZUZ1bmN0aW9uKG1fcmFuZ2UpLCBkZXN0aW5hdGlvbkNhdGVnb3J5LCB2YWx1ZVJhbmdl
LCBzeW1ib2xUYWJsZSwgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlKTsKKyAgICAgICAgICAgIG1f
Y2FsY1ZhbHVlID0gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoZnVuY3Rpb25JZCwgY29uc3VtZUZ1bmN0
aW9uKG1fcmFuZ2UpLCBkZXN0aW5hdGlvbkNhdGVnb3J5LCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJs
ZSwgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5ID09IE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeTo6
QWxsb3cpOwogICAgIH0KIAogICAgIGNvbnN0IENTU0NhbGNWYWx1ZSogdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX2NhbGNWYWx1ZS5nZXQoKTsgfQpAQCAtMTUyLDY1ICsxNTIsNiBAQCBjbGFzcyBD
YWxjUGFyc2VyIHsgKHB1YmxpYykKICAgICAgICAgcmV0dXJuIG1fcG9vbC5jcmVhdGVWYWx1ZShX
VEZNb3ZlKG1fY2FsY1ZhbHVlKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lSW50ZWdlcihkb3VibGUgbWluaW11bVZhbHVlKQotICAgIHsKLSAgICAgICAg
aWYgKCFtX2NhbGNWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBt
X3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIG1fcG9vbC5jcmVhdGVWYWx1
ZShzdGQ6OnJvdW5kKHN0ZDo6bWF4KG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpLCBtaW5pbXVt
VmFsdWUpKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEludFR5cGU+IHN0ZDo6b3B0aW9uYWw8SW50VHlwZT4gY29uc3VtZUludGVnZXJU
eXBlUmF3KGRvdWJsZSBtaW5pbXVtVmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1Zh
bHVlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgbV9zb3VyY2VS
YW5nZSA9IG1fcmFuZ2U7Ci0gICAgICAgIHJldHVybiBjbGFtcFRvPEludFR5cGU+KHN0ZDo6cm91
bmQoc3RkOjptYXgobV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCksIG1pbmltdW1WYWx1ZSkpKTsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXIoKQot
ICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIG1f
cG9vbC5jcmVhdGVWYWx1ZShtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSwgQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1l
TnVtYmVyUmF3KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9jYWxjVmFs
dWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgbV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7
Ci0gICAgICAgIHJldHVybiBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKTsKLSAgICB9Ci0KLSAg
ICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoKQotICAgIHsKLSAgICAg
ICAgaWYgKCFtX2NhbGNWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0g
ICAgICAgIGF1dG8gY2F0ZWdvcnkgPSBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKTsKLSAgICAgICAg
aWYgKGNhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsK
LSAgICAgICAgcmV0dXJuIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpOwotICAgIH0KLQotICAg
IHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdygpCi0gICAgewotICAgICAg
ICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1fY2FsY1ZhbHVlLT5jYXRlZ29yeSgpICE9IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OkFuZ2xlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAg
ICAgICAgbV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7Ci0gICAgICAgIHJldHVybiB7IHsgbV9jYWxj
VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCkgfSB9Owot
ICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3KCkK
LSAgICB7Ci0gICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9jYWxjVmFsdWUtPmNhdGVnb3J5
KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLSAgICAgICAgbV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7Ci0gICAgICAgIHJl
dHVybiB7IHsgbV9jYWxjVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgbV9jYWxjVmFsdWUtPmRvdWJs
ZVZhbHVlKCkgfSB9OwotICAgIH0KLQogcHJpdmF0ZToKICAgICBDU1NQYXJzZXJUb2tlblJhbmdl
JiBtX3NvdXJjZVJhbmdlOwogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgbV9yYW5nZTsKQEAgLTIy
MCw3ICsxNjEsNyBAQCBjbGFzcyBDYWxjUGFyc2VyIHsgKHB1YmxpYykKIAogLy8gTUFSSzogLSBQ
cmltaXRpdmUgdmFsdWUgY29uc3VtZXJzIGZvciBjYWxsZXJzIHRoYXQga25vdyB0aGUgdG9rZW4g
dHlwZS4KIAotc3RhdGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNvbnN1bWVDYWxjUmF3V2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1bGF0
aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUgPSB7IH0sIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkKK3N0YXRp
YyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGNh
dGVnb3J5LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UpCiB7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rp
b25Ub2tlbik7CiAKQEAgLTIzOCwyMDYgKzE3OSwyNjUgQEAgc3RhdGljIFJlZlB0cjxDU1NDYWxj
VmFsdWU+IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9rCiAKIC8vIE1BUks6IEludGVnZXIgKFJh
dykKIAotdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8SW50
VHlwZT4gY29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgc291cmNlUmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUpCitlbnVt
IGNsYXNzIEludGVnZXJSYW5nZSB7IEFsbCwgWmVyb0FuZEdyZWF0ZXIsIE9uZUFuZEdyZWF0ZXIg
fTsKKworc3RhdGljIGNvbnN0ZXhwciBkb3VibGUgY29tcHV0ZU1pbmltdW1WYWx1ZShJbnRlZ2Vy
UmFuZ2UgcmFuZ2UpCiB7Ci0gICAgYXV0byByYW5nZSA9IHNvdXJjZVJhbmdlOwotICAgIGlmIChh
dXRvIHZhbHVlID0gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5n
ZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCkpIHsK
LSAgICAgICAgc291cmNlUmFuZ2UgPSByYW5nZTsKLSAgICAgICAgcmV0dXJuIGNsYW1wVG88SW50
VHlwZT4oc3RkOjpyb3VuZChzdGQ6Om1heCh2YWx1ZS0+ZG91YmxlVmFsdWUoKSwgbWluaW11bVZh
bHVlKSkpOworICAgIHN3aXRjaCAocmFuZ2UpIHsKKyAgICBjYXNlIEludGVnZXJSYW5nZTo6QWxs
OgorICAgICAgICByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHko
KTsKKyAgICBjYXNlIEludGVnZXJSYW5nZTo6WmVyb0FuZEdyZWF0ZXI6CisgICAgICAgIHJldHVy
biAwLjA7CisgICAgY2FzZSBJbnRlZ2VyUmFuZ2U6Ok9uZUFuZEdyZWF0ZXI6CisgICAgICAgIHJl
dHVybiAxLjA7CiAgICAgfQotCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KKy8vIE1BUks6
IEludGVnZXIgKFJhdykKIAotdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RhdGljIHN0ZDo6
b3B0aW9uYWw8SW50VHlwZT4gY29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBl
TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUgbWluaW11bVZhbHVlKQot
ewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKLSAgICAK
LSAgICBpZiAocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZVR5cGUoKSA9PSBOdW1iZXJWYWx1ZVR5
cGUgfHwgcmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpIDwgbWluaW11bVZhbHVlKQordGVtcGxh
dGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVnZXJSYW5nZT4KK3N0cnVjdCBJ
bnRlZ2VyVHlwZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsK
KyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnRUeXBlPiBjb25zdW1lKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQ
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7CisgICAg
ICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworCisgICAg
ICAgIGF1dG8gcmFuZ2VDb3B5ID0gcmFuZ2U7CisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gY29u
c3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZUNvcHksIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok51bWJlciwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwpKSB7CisgICAgICAgICAg
ICByYW5nZSA9IHJhbmdlQ29weTsKKyAgICAgICAgICAgIHJldHVybiBjbGFtcFRvPEludFR5cGU+
KHN0ZDo6cm91bmQoc3RkOjptYXgodmFsdWUtPmRvdWJsZVZhbHVlKCksIGNvbXB1dGVNaW5pbXVt
VmFsdWUoaW50ZWdlclJhbmdlKSkpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGNsYW1wVG88SW50VHlwZT4ocmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSk7Ci19CisgICAgfQorfTsKIAotLy8gTUFS
SzogSW50ZWdlciAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBub3QgbWFpbnRhaW5pbmcgY2FsYykKK3Rl
bXBsYXRlPHR5cGVuYW1lIEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlZ2VyUmFuZ2U+CitzdHJ1
Y3QgSW50ZWdlclR5cGVSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0
aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsK
KyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnRUeXBlPiBjb25zdW1lKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQ
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7CisgICAg
ICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlVHlwZSgpID09IE51bWJlclZh
bHVlVHlwZSB8fCByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCBjb21wdXRlTWluaW11bVZh
bHVlKGludGVnZXJSYW5nZSkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
ICAgICByZXR1cm4gY2xhbXBUbzxJbnRUeXBlPihyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpLm51bWVyaWNWYWx1ZSgpKTsKKyAgICB9Cit9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJ
bnRUeXBlPiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlclR5
cGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUsIENTU1ZhbHVlUG9v
bCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRv
a2VuKTsKKy8vIE1BUks6IEludGVnZXIgKENTU1ByaW1pdGl2ZVZhbHVlIC0gbWFpbnRhaW5pbmcg
Y2FsYykKIAotICAgIGlmIChhdXRvIGludGVnZXIgPSBjb25zdW1lSW50ZWdlclR5cGVSYXdXaXRo
S25vd25Ub2tlblR5cGVGdW5jdGlvbjxJbnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoKmludGVnZXIsIENTU1VuaXRUeXBlOjpDU1Nf
TlVNQkVSKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5
cGUsIEludGVnZXJSYW5nZSBpbnRlZ2VyUmFuZ2U+CitzdHJ1Y3QgSW50ZWdlclR5cGVLbm93blRv
a2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2Vy
VG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdl
LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRs
ZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVJbnRlZ2VyVHlwZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tl
blR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFs
dWUsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUo
KSA9PSBOdW1iZXJUb2tlbik7CisgICAgICAgIGlmIChhdXRvIGludGVnZXIgPSBJbnRlZ2VyVHlw
ZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjxJbnRUeXBlLCBpbnRlZ2VyUmFuZ2U+
Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5p
dGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1
ZSgqaW50ZWdlciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9Cit9OwogCi0gICAgaWYgKGF1dG8gaW50ZWdlciA9IGNvbnN1bWVJbnRlZ2Vy
VHlwZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcjxJbnRUeXBlPihyYW5nZSwgbWluaW11bVZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoKmludGVnZXIsIENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK3RlbXBsYXRlPHR5cGVu
YW1lIEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlZ2VyUmFuZ2U+CitzdHJ1Y3QgSW50ZWdlclR5
cGVLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENT
U1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywg
VW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAg
eworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7Cisg
ICAgICAgIAorICAgICAgICBpZiAoYXV0byBpbnRlZ2VyID0gSW50ZWdlclR5cGVSYXdLbm93blRv
a2VuVHlwZU51bWJlckNvbnN1bWVyPEludFR5cGUsIGludGVnZXJSYW5nZT46OmNvbnN1bWUocmFu
Z2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxl
c3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKCppbnRlZ2VyLCBD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
K307CiAKIC8vIE1BUks6IE51bWJlciAoUmF3KQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHZhbGlkYXRlZE51bWJlclJhdyhkb3VibGUgdmFsdWUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSkKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gdmFsaWRhdGVkTnVtYmVyUmF3KGRv
dWJsZSB2YWx1ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewogICAgIGlmICh2YWx1ZVJhbmdl
ID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gdmFsdWU7CisgICAgcmV0dXJuIHt7IHZhbHVlIH19
OwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXdXaXRo
S25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlKQotewotICAgIGF1dG8gcmFuZ2UgPSBzb3VyY2VSYW5nZTsKLSAgICBpZiAoYXV0byB2YWx1
ZSA9IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAg
ICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3KHZhbHVlLT5k
b3VibGVWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgewotICAgICAgICAgICAgc291cmNlUmFuZ2UgPSBy
YW5nZTsKLSAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKK3N0cnVjdCBOdW1iZXJS
YXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
Q1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9rZW47CisgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJr
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25U
b2tlbik7CisKKyAgICAgICAgYXV0byByYW5nZUNvcHkgPSByYW5nZTsKKyAgICAgICAgaWYgKGF1
dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdl
Q29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5n
ZSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVt
YmVyUmF3KHZhbHVlLT5kb3VibGVWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAg
ICAgIHJhbmdlID0gcmFuZ2VDb3B5OworICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRW
YWx1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAgICAgfQorfTsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KLXN0YXRp
YyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlw
ZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRh
YmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IE51bWJlclRva2VuKTsKLSAgICAKLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1
ZSA9IHZhbGlkYXRlZE51bWJlclJhdyhyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCksIHZhbHVl
UmFuZ2UpKSB7Ci0gICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0g
ICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKK3N0cnVjdCBOdW1iZXJSYXdLbm93blRva2Vu
VHlwZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2Vu
VHlwZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxO
dW1iZXJSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0Nh
bGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFu
Z2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CisgICAgICAgIAorICAgICAgICBpZiAo
YXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyhyYW5nZS5wZWVrKCkubnVt
ZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5j
bHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci19Cit9OwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50
VG9rZW4pOworc3RydWN0IE51bWJlclJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lciB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gSWRlbnRU
b2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1bWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
VW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBJZGVudFRva2VuKTsKIAotICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFi
bGUuZ2V0KHJhbmdlLnBlZWsoKS5pZCgpKSkgewotICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50
eXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgICAg
ICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh2YXJpYWJsZS0+
dmFsdWUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGF1dG8gdmFy
aWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0g
dmFsaWRhdGVkTnVtYmVyUmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAg
fQotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Cit9OwogCiAvLyBNQVJLOiBOdW1iZXIgKENT
U1ByaW1pdGl2ZVZhbHVlIC0gbWFpbnRhaW5pbmcgY2FsYykKIAotc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBD
U1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0g
RnVuY3Rpb25Ub2tlbik7CitzdHJ1Y3QgTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIg
Q1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9rZW47CisgICAgc3RhdGlj
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2
YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWly
aywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5n
ZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwg
cG9vbCk7Ci0gICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok51bWJlcik7Ci19CisgICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdl
LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBw
b29sKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcik7CisgICAgfQorfTsKIAotc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBw
b29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsK
LSAgICAKLSAgICBhdXRvIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIAotICAgIGlmIChhdXRv
IHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3KHRva2VuLm51bWVyaWNWYWx1ZSgp
LCB2YWx1ZVJhbmdlKSkgewotICAgICAgICBhdXRvIHVuaXRUeXBlID0gdG9rZW4udW5pdFR5cGUo
KTsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAg
cmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoKnZhbGlkYXRlZFZhbHVlLCB1bml0VHlwZSk7CitzdHJ1
Y3QgTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJl
ckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tl
blR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9s
VGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmssIFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAg
ICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CisgICAgICAgIAor
ICAgICAgICBhdXRvIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgICAgICAKKyAgICAgICAgaWYg
KGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodG9rZW4ubnVtZXJpY1Zh
bHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICBhdXRvIHVuaXRUeXBlID0gdG9rZW4u
dW5pdFR5cGUoKTsKKyAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCk7CisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSh2YWxpZGF0ZWRWYWx1ZS0+
dmFsdWUsIHVuaXRUeXBlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Cit9OwogCi0KIC8vIE1BUks6IFBlcmNlbnQgKHJh
dykKIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB2YWxpZGF0ZWRQZXJjZW50UmF3KGRv
dWJsZSB2YWx1ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8
UGVyY2VudFJhdz4gdmFsaWRhdGVkUGVyY2VudFJhdyhkb3VibGUgdmFsdWUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSkKIHsKICAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdh
dGl2ZSAmJiB2YWx1ZSA8IDApCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgaWYg
KHN0ZDo6aXNpbmYodmFsdWUpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJl
dHVybiB2YWx1ZTsKKyAgICByZXR1cm4ge3sgdmFsdWUgfX07CiB9CiAKLXN0YXRpYyBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRh
YmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIEFTU0VSVChz
b3VyY2VSYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworc3RydWN0IFBlcmNl
bnRSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9rZW47CisgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8UGVyY2VudFJhdz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9R
dWlyaykKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0
aW9uVG9rZW4pOwogCi0gICAgY29uc3QgYXV0byYgdG9rZW4gPSBzb3VyY2VSYW5nZS5wZWVrKCk7
Ci0gICAgYXV0byBmdW5jdGlvbklkID0gdG9rZW4uZnVuY3Rpb25JZCgpOwotICAgIGlmICghQ1NT
Q2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbihmdW5jdGlvbklkKSkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICAgICAgYXV0byByYW5nZUNvcHkgPSByYW5nZTsKKyAgICAgICAgaWYg
KGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJh
bmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgc3ltYm9sVGFibGUsIHZhbHVl
UmFuZ2UpKSB7CisgICAgICAgICAgICByYW5nZSA9IHJhbmdlQ29weTsKIAotICAgIGF1dG8gcmFu
Z2UgPSBzb3VyY2VSYW5nZTsKLSAgICBhdXRvIGNhbGNWYWx1ZSA9IENTU0NhbGNWYWx1ZTo6Y3Jl
YXRlKGZ1bmN0aW9uSWQsIGNvbnN1bWVGdW5jdGlvbihyYW5nZSksIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlKTsKLSAgICBpZiAoY2FsY1ZhbHVl
ICYmIGNhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
KSB7Ci0gICAgICAgIHNvdXJjZVJhbmdlID0gcmFuZ2U7Ci0gICAgICAgIHJldHVybiBjYWxjVmFs
dWUtPmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgdmFs
aWRhdGUgdGhlIGNhbGMgdmFsdWUgYXMgaXMgZG9uZSBmb3IgdGhlIE51bWJlclJhdyB2YXJpYW50
PworICAgICAgICAgICAgcmV0dXJuIHt7IHZhbHVlLT5kb3VibGVWYWx1ZSgpIH19OworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK3N0cnVjdCBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVQZXJj
ZW50Q29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRv
a2VuVHlwZSA9IFBlcmNlbnRhZ2VUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxQZXJj
ZW50UmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxj
U3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gUGVyY2VudGFnZVRva2VuKTsKIAotc3RhdGljIHN0ZDo6b3B0aW9u
YWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2Uo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZh
bHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBQZXJjZW50YWdlVG9rZW4pOwotCi0gICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxp
ZGF0ZWRQZXJjZW50UmF3KHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkp
IHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAg
cmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9
IHZhbGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJh
bmdlKSkgeworICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsK
KyAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQor
fTsKIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhd1dpdGhL
bm93blRva2VuVHlwZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1ND
YWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0g
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbik7CitzdHJ1Y3QgUGVy
Y2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gSWRlbnRUb2tlbjsKKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJr
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tl
bik7CiAKLSAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVr
KCkuaWQoKSkpIHsKLSAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkgewotICAgICAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKLSAgICAgICAgICAgIGlmIChhdXRvIHZh
bGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVl
UmFuZ2UpKSB7Ci0gICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGF1dG8gdmFyaWFibGUgPSBzeW1i
b2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHZh
cmlhYmxlLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VO
VEFHRToKKyAgICAgICAgICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRl
ZFBlcmNlbnRSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAg
ICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Ci0gICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKLQogLy8gTUFSSzogUGVyY2VudCAoQ1NTUHJp
bWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
Q2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NW
YWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVu
Y3Rpb25Ub2tlbik7CitzdHJ1Y3QgUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENT
U1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmss
IENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCi0gICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2Us
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBw
b29sKTsKLSAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudCk7Ci19CisgICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdl
LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwg
cG9vbCk7CisgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KTsKKyAgICB9Cit9OwogCi1zdGF0aWMgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBj
b25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVl
UG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBQZXJjZW50
YWdlVG9rZW4pOwotCi0gICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJj
ZW50UmF3KHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKLSAgICAg
ICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0dXJuIHBv
b2wuY3JlYXRlVmFsdWUoKnZhbGlkYXRlZFZhbHVlLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRB
R0UpOworc3RydWN0IFBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlUGVyY2VudENvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRv
a2VuVHlwZSB0b2tlblR5cGUgPSBQZXJjZW50YWdlVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaywgQ1NTVmFsdWVQb29sJiBwb29s
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gUGVyY2VudGFn
ZVRva2VuKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFs
aWRhdGVkUGVyY2VudFJhdyhyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2Up
KSB7CisgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAg
ICAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUodmFsaWRhdGVkVmFsdWUtPnZhbHVlLCBD
U1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK307CiAKIC8vIE1BUks6IExl
bmd0aCAocmF3KQogCkBAIC00NTAsODMxICs0NTAsOTQ1IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gdmFsaWRhdGVkTGVuZ3RoUmF3KGRvdWJsZQogICAgIHJldHVybiB2YWx1ZTsKIH0K
IAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgc291cmNlUmFuZ2UsIGNv
bnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaykKLXsKLSAgICBhdXRvIHJhbmdlID0gc291
cmNlUmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRv
a2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlKSkgewotICAgICAgICBzb3VyY2VSYW5nZSA9IHJhbmdlOwotICAg
ICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZhbHVlLT5kb3VibGVWYWx1
ZSgpIH0gfTsKK3N0cnVjdCBMZW5ndGhSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1
bmN0aW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1l
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBl
ZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CisKKyAgICAgICAgYXV0byByYW5nZUNvcHkg
PSByYW5nZTsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3Ro
LCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VD
b3B5OworCisgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgdmFsaWRhdGUgdGhlIGNh
bGMgdmFsdWUgYXMgaXMgZG9uZSBmb3IgdGhlIE51bWJlclJhdyB2YXJpYW50PworICAgICAgICAg
ICAgcmV0dXJuIHsgeyB2YWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCB2YWx1ZS0+ZG91YmxlVmFsdWUo
KSB9IH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Ci0g
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPExl
bmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVS
YW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsp
Ci17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOwor
c3RydWN0IExlbmd0aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERpbWVuc2lvblRv
a2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVu
aXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBl
KCkgPT0gRGltZW5zaW9uVG9rZW4pOwogCi0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7
CisgICAgICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwogCi0gICAgYXV0byB1bml0VHlw
ZSA9IHRva2VuLnVuaXRUeXBlKCk7Ci0gICAgc3dpdGNoICh1bml0VHlwZSkgewotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19RVUlSS1lfRU1TOgotICAgICAgICBpZiAocGFyc2VyTW9kZSAhPSBV
QVNoZWV0TW9kZSkKKyAgICAgICAgYXV0byB1bml0VHlwZSA9IHRva2VuLnVuaXRUeXBlKCk7Cisg
ICAgICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1FVSVJLWV9FTVM6CisgICAgICAgICAgICBpZiAocGFyc2VyTW9kZSAhPSBVQVNoZWV0TW9kZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgRkFMTFRI
Uk9VR0g7CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FTVM6CisgICAgICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19SRU1TOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhT
OgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkxIUzoKKyAgICAgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0NIUzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lDOgorICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUFg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DTToKKyAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX01NOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSU46
CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKKyAgICAgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1BDOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6CisgICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WSDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1ZNSU46CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgorICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfVkI6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WSToK
KyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWVzoKKyAgICAgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1NWSDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWTUlOOgorICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZNQVg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19TVkI6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVkk6CisgICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVlc6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19MVkg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVk1JTjoKKyAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0xWTUFYOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
TFZCOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZJOgorICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfRFZXOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZIOgor
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZNSU46CisgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19EVk1BWDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWQjoKKyAg
ICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWSToKKyAgICAgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1E6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19FTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UkxIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19JQzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19QWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ006Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX01NOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19JTjoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BD
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1ZNQVg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZCOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19WSToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZXOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NW
TUlOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVk1BWDoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfU1ZCOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVkk6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0xWVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZIOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVk1JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
TFZNQVg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWQjoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfTFZJOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVlc6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0RWSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZNSU46Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWTUFYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19EVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWSToKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUToKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTGVuZ3RoUmF3KHRva2Vu
Lm51bWVyaWNWYWx1ZSgpLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgcmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgdW5pdFR5cGUs
ICp2YWxpZGF0ZWRWYWx1ZSB9IH07CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKICAgICB9Cit9OwogCi0gICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0
ZWRMZW5ndGhSYXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAg
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIHJldHVybiB7IHsg
dW5pdFR5cGUsICp2YWxpZGF0ZWRWYWx1ZSB9IH07Ci0gICAgfQotICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7Ci19CitzdHJ1Y3QgTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lciB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gTnVt
YmVyVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFu
Z2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFs
PExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVS
YW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsg
dW5pdGxlc3MpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9r
ZW4pOworICAgICAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKIAotICAgIGF1dG8mIHRv
a2VuID0gcmFuZ2UucGVlaygpOworICAgICAgICBpZiAoIXNob3VsZEFjY2VwdFVuaXRsZXNzVmFs
dWUodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1pl
cm9RdWlyazo6QWxsb3cpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAg
IGlmICghc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgcGFy
c2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpCisgICAgICAgIGlm
IChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTGVuZ3RoUmF3KHRva2VuLm51bWVyaWNW
YWx1ZSgpLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgQ1NTVW5pdFR5cGU6OkNTU19Q
WCwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRMZW5ndGhS
YXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHJhbmdlLmNv
bnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIHJldHVybiB7IHsgQ1NTVW5pdFR5
cGU6OkNTU19QWCwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLX0KK307CiAKIC8vIE1BUks6IExlbmd0aCAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBt
YWludGFpbmluZyBjYWxjKQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsK
KyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRs
ZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQo
cmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIAotICAgIENhbGNQYXJzZXIg
cGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UsIHN5
bWJvbFRhYmxlLCBwb29sKTsKLSAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0ZWdv
cnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKTsKLX0KKyAgICAgICAgQ2FsY1BhcnNlciBw
YXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSwgc3lt
Ym9sVGFibGUsIHBvb2wpOworICAgICAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0
ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKTsKKyAgICB9Cit9OwogCi1zdGF0aWMg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2
YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUo
KSA9PSBEaW1lbnNpb25Ub2tlbik7CitzdHJ1Y3QgTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29u
c3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBEaW1lbnNpb25Ub2tlbjsKKyAg
ICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wm
IHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEaW1l
bnNpb25Ub2tlbik7CiAKLSAgICBpZiAoYXV0byBsZW5ndGhSYXcgPSBjb25zdW1lTGVuZ3RoUmF3
V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpKQotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1
ZShsZW5ndGhSYXctPnZhbHVlLCBsZW5ndGhSYXctPnR5cGUpOwotICAgIHJldHVybiBudWxscHRy
OwotfQorICAgICAgICBpZiAoYXV0byBsZW5ndGhSYXcgPSBMZW5ndGhSYXdLbm93blRva2VuVHlw
ZURpbWVuc2lvbkNvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1
cm4gcG9vbC5jcmVhdGVWYWx1ZShsZW5ndGhSYXctPnZhbHVlLCBsZW5ndGhSYXctPnR5cGUpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9OwogCi1zdGF0aWMgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhL
bm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NT
Q2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQ
YXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIENTU1ZhbHVlUG9v
bCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tl
bik7CitzdHJ1Y3QgTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2Vu
VHlwZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1ND
YWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1Bh
cnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJv
UXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CiAKLSAgICBpZiAoYXV0
byBsZW5ndGhSYXcgPSBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJh
bmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpKQotICAg
ICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShsZW5ndGhSYXctPnZhbHVlLCBsZW5ndGhSYXct
PnR5cGUpOwotICAgIHJldHVybiBudWxscHRyOwotfQorICAgICAgICBpZiAoYXV0byBsZW5ndGhS
YXcgPSBMZW5ndGhSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKHJhbmdl
LCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNz
WmVybykpCisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShsZW5ndGhSYXctPnZh
bHVlLCBsZW5ndGhSYXctPnR5cGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9
OwogCiAvLyBNQVJLOiBBbmdsZSAocmF3KQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxBbmdsZVJh
dz4gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgc291cmNlUmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
VW5pdGxlc3NaZXJvUXVpcmspCi17Ci0gICAgYXV0byByYW5nZSA9IHNvdXJjZVJhbmdlOwotICAg
IGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUsIHN5bWJvbFRhYmxlLCB2YWx1ZVJh
bmdlKSkgewotICAgICAgICBzb3VyY2VSYW5nZSA9IHJhbmdlOwotICAgICAgICByZXR1cm4geyB7
IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZhbHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKK3N0cnVj
dCBBbmdsZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsKKyAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVS
YW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1pl
cm9RdWlyaykKKyAgICB7CisgICAgICAgIGF1dG8gcmFuZ2VDb3B5ID0gcmFuZ2U7CisgICAgICAg
IGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bihyYW5nZUNvcHksIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCBzeW1ib2xUYWJsZSwgdmFs
dWVSYW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VDb3B5OworICAgICAgICAgICAg
cmV0dXJuIHsgeyB2YWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCB2YWx1ZS0+ZG91YmxlVmFsdWUoKSB9
IH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Ci0gICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFuZ2xl
UmF3PiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24oQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2Us
IENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQotewotICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKK3N0cnVjdCBB
bmdsZVJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERpbWVuc2lvblRva2VuOworICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJz
ZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7CisgICAgICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotICAgIGF1
dG8gdW5pdFR5cGUgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsKLSAgICBzd2l0Y2ggKHVuaXRU
eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUkFEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19UVVJOOgotICAgICAgICByZXR1cm4geyB7IHVuaXRUeXBlLCByYW5n
ZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAgICAgYXV0byB1bml0VHlwZSA9IHJhbmdlLnBl
ZWsoKS51bml0VHlwZSgpOworICAgICAgICBzd2l0Y2ggKHVuaXRUeXBlKSB7CisgICAgICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19S
QUQ6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgorICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfVFVSTjoKKyAgICAgICAgICAgIHJldHVybiB7IHsgdW5pdFR5cGUsIHJh
bmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9OworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KK307CitzdHJ1Y3QgQW5nbGVSYXdLbm93blRva2Vu
VHlwZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2Vu
VHlwZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxB
bmdsZVJhdz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0
bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCisgICAg
eworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CiAK
LSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorICAgICAgICBpZiAoc2hvdWxkQWNjZXB0VW5p
dGxlc3NWYWx1ZShyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCksIHBhcnNlck1vZGUsIHVuaXRs
ZXNzLCB1bml0bGVzc1plcm8pKQorICAgICAgICAgICAgcmV0dXJuIHsgeyBDU1NVbml0VHlwZTo6
Q1NTX0RFRywgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUo
KSB9IH07CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKIAotc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlw
ZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRh
YmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
IHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCi17Ci0gICAgQVNTRVJU
KHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwotCi0gICAgaWYgKHNob3VsZEFj
Y2VwdFVuaXRsZXNzVmFsdWUocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIHsgeyBDU1NVbml0VHlw
ZTo6Q1NTX0RFRywgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFs
dWUoKSB9IH07Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQogLy8gTUFSSzogQW5nbGUg
KENTU1ByaW1pdGl2ZVZhbHVlIC0gbWFpbnRhaW5pbmcgY2FsYykKIAotc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1
ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rp
b25Ub2tlbik7CitzdHJ1Y3QgQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJz
ZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsKKyAgICBzdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBj
b25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFu
Z2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NW
YWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUo
KSA9PSBGdW5jdGlvblRva2VuKTsKIAotICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUsIHBvb2wpOwot
ICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVn
b3J5OjpBbmdsZSk7Ci19CisgICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpBbmdsZSwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUsIHBvb2wpOworICAg
ICAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRl
Z29yeTo6QW5nbGUpOworICAgIH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVEaW1lbnNpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9k
ZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1
bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbik7CitzdHJ1Y3QgQW5nbGVDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERpbWVuc2lvblRv
a2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0
bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1Zh
bHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgp
ID09IERpbWVuc2lvblRva2VuKTsKIAotICAgIGlmIChhdXRvIGFuZ2xlUmF3ID0gY29uc3VtZUFu
Z2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFs
dWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCi0gICAgICAgIHJl
dHVybiBwb29sLmNyZWF0ZVZhbHVlKGFuZ2xlUmF3LT52YWx1ZSwgYW5nbGVSYXctPnR5cGUpOwot
ICAgIHJldHVybiBudWxscHRyOwotfQorICAgICAgICBpZiAoYXV0byBhbmdsZVJhdyA9IEFuZ2xl
UmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZShyYW5nZSwgc3ltYm9s
VGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQor
ICAgICAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYW5nbGVSYXctPnZhbHVlLCBhbmds
ZVJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLXN0YXRp
YyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNz
LCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsK
LSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CitzdHJ1Y3Qg
QW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29u
c3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlw
ZSA9IE51bWJlclRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJz
ZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVz
c1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5w
ZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKIAotICAgIGlmIChhdXRvIGFuZ2xlUmF3ID0g
Y29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCBzeW1ib2xUYWJs
ZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCi0gICAg
ICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGFuZ2xlUmF3LT52YWx1ZSwgYW5nbGVSYXctPnR5
cGUpOwotICAgIHJldHVybiBudWxscHRyOwotfQorICAgICAgICBpZiAoYXV0byBhbmdsZVJhdyA9
IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjo6Y29uc3VtZShyYW5nZSwgc3lt
Ym9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8p
KQorICAgICAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYW5nbGVSYXctPnZhbHVlLCBh
bmdsZVJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLQog
Ly8gTUFSSzogVGltZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQogCi1z
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBDU1NWYWx1ZVBvb2wm
IHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tl
bik7CitzdHJ1Y3QgVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbkNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2Vu
VHlwZSB0b2tlblR5cGUgPSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9v
bCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1
bmN0aW9uVG9rZW4pOwogCi0gICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlRpbWUsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKLSAgICByZXR1
cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGlt
ZSk7Ci19CisgICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpUaW1lLCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVy
biBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1l
KTsKKyAgICB9Cit9OwogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24o
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZh
bHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgQ1NTVmFs
dWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVu
c2lvblRva2VuKTsKK3N0cnVjdCBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1Bh
cnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBEaW1lbnNpb25Ub2tlbjsKKyAgICBzdGF0aWMgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1Bh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wm
IHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEaW1l
bnNpb25Ub2tlbik7CiAKLSAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdh
dGl2ZSAmJiByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCAwKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRp
dmUgJiYgcmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgaWYgKGF1dG8gdW5pdCA9IHJhbmdlLnBlZWsoKS51bml0VHlwZSgp
OyB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfTVMgfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NT
X1MpCi0gICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRp
bmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHVuaXQpOworICAgICAgICBpZiAoYXV0byB1
bml0ID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19N
UyB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfUykKKyAgICAgICAgICAgIHJldHVybiBwb29s
LmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1Zh
bHVlKCksIHVuaXQpOwogCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJl
cihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwg
VmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmsgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CitzdHJ1Y3QgVGltZUNTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lciB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gTnVtYmVyVG9rZW47Cisg
ICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3Ms
IFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7CiAKLSAgICBpZiAodW5p
dGxlc3MgPT0gVW5pdGxlc3NRdWlyazo6QWxsb3cgJiYgc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1
ZShyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCksIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0
bGVzc1plcm9RdWlyazo6QWxsb3cpKSB7Ci0gICAgICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVl
UmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IDApCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFs
dWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgQ1NT
VW5pdFR5cGU6OkNTU19NUyk7CisgICAgICAgIGlmICh1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJr
OjpBbGxvdyAmJiBzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmlj
VmFsdWUoKSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykp
IHsKKyAgICAgICAgICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZl
ICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IDApCisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShyYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCBDU1NVbml0VHlwZTo6
Q1NTX01TKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAg
cmV0dXJuIG51bGxwdHI7Ci19Cit9OwogCiAvLyBNQVJLOiBSZXNvbHV0aW9uIChDU1NQcmltaXRp
dmVWYWx1ZSAtIG5vIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVSZXNvbHV0aW9uQ1NTUHJpbWl0aXZlVmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNp
b24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAg
ICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbik7CitzdHJ1Y3Qg
UmVzb2x1dGlvbkNTU1ByaW1pdGl2ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29u
c3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlw
ZSA9IERpbWVuc2lvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xU
YWJsZSYsIFZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNz
WmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFu
Z2UucGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbik7CiAKLSAgICBpZiAoYXV0byB1bml0
ID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19EUFBY
IHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19YIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNT
U19EUEkgfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX0RQQ00pCi0gICAgICAgIHJldHVybiBw
b29sLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJp
Y1ZhbHVlKCksIHVuaXQpOworICAgICAgICBpZiAoYXV0byB1bml0ID0gcmFuZ2UucGVlaygpLnVu
aXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19EUFBYIHx8IHVuaXQgPT0gQ1NTVW5p
dFR5cGU6OkNTU19YIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19EUEkgfHwgdW5pdCA9PSBD
U1NVbml0VHlwZTo6Q1NTX0RQQ00pCisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1
ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB1bml0
KTsKIAotICAgIHJldHVybiBudWxscHRyOwotfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9Cit9OwogCisvLyBNQVJLOiBTcGVjaWFsaXplZCBjb21iaW5hdGlvbiBjb25zdW1lcnMuCiAK
LS8vIE1BUks6IC0gUHJpbWl0aXZlIHZhbHVlIGNvbnN1bWVycyBmb3IgY2FsbGVycyB0aGF0IGRv
IE5PVCBrbm93IHRoZSB0b2tlbiB0eXBlLgorLy8gRklYTUU6IEl0IHdvdWxkIGJlIGdvb2QgdG8g
ZmluZCBhIHdheSB0byBzeW50aGVzaXplIHRoaXMgZnJvbSBhbiBhbmdsZSBhbmQgbnVtYmVyIHNw
ZWNpZmljIHZhcmlhbnRzLgorc3RydWN0IEFuZ2xlT3JOdW1iZXJSYXdLbm93blRva2VuVHlwZUlk
ZW50Q29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRv
a2VuVHlwZSA9IElkZW50VG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QW5nbGVPck51
bWJlclJhdz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBpZiAoYXV0byB2
YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19ERUc6CisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgorICAg
ICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6CisgICAgICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfVFVSTjoKKyAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBBbmdsZVJhdyB7IHZhcmlh
YmxlLT50eXBlLCB2YXJpYWJsZS0+dmFsdWUgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlw
ZT4gc3RkOjpvcHRpb25hbDxJbnRUeXBlPiBjb25zdW1lSW50ZWdlclR5cGVSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUpCi17Ci0gICAgYXV0byYgdG9r
ZW4gPSByYW5nZS5wZWVrKCk7CisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSOgorICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlclJhdyB7IHZhcmlhYmxlLT52YWx1ZSB9Owog
Ci0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0g
ICAgICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbjxJbnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAg
IGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVSYXdX
aXRoS25vd25Ub2tlblR5cGVOdW1iZXI8SW50VHlwZT4ocmFuZ2UsIG1pbmltdW1WYWx1ZSk7Ci0g
ICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAgICAgfQorfTsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19CisvLyBGSVhN
RTogSXQgd291bGQgYmUgZ29vZCB0byBmaW5kIGEgd2F5IHRvIHN5bnRoZXNpemUgdGhpcyBmcm9t
IGFuIG51bWJlciBhbmQgcGVyY2VudCBzcGVjaWZpYyB2YXJpYW50cy4KK3N0cnVjdCBOdW1iZXJP
clBlcmNlbnRSYXdLbm93blRva2VuVHlwZUlkZW50Q29uc3VtZXIgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IElkZW50VG9rZW47CisgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8TnVtYmVyT3JQZXJjZW50UmF3PiBjb25zdW1lKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRs
ZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gdmFyaWFibGUgPSBzeW1ib2xU
YWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhcmlh
YmxlLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFH
RToKKyAgICAgICAgICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZFBl
cmNlbnRSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgICAg
ICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ge3sgKnZhbGlkYXRlZFZhbHVlIH19OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKIAotdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlclR5cGUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGRvdWJsZSBtaW5pbXVtVmFsdWUsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAg
ICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVI6CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUg
PSB2YWxpZGF0ZWROdW1iZXJSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1ZVJhbmdlKSkgeworICAg
ICAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4ge3sgKnZhbGlkYXRlZFZhbHVlIH19OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgIHN3aXRjaCAodG9rZW4udHlw
ZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUlu
dGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uPEludFR5cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUsIHBvb2wpOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
Ci0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlw
ZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXI8SW50VHlw
ZT4ocmFuZ2UsIG1pbmltdW1WYWx1ZSwgcG9vbCk7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0
dXJuIG51bGxwdHI7Ci19CisvLyBNQVJLOiAtIE1ldGEgQ29uc3VtZXJzCiAKLXN0ZDo6b3B0aW9u
YWw8aW50PiBjb25zdW1lSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91
YmxlIG1pbmltdW1WYWx1ZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PGlu
dD4ocmFuZ2UsIG1pbmltdW1WYWx1ZSk7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdW1lciwg
dHlwZW5hbWUgPSB2b2lkPgorc3RydWN0IFRyYW5zZm9ybUFwcGxpZXIgeworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyBkZWNsdHlwZShhdXRvKSBhcHBseShUIHZhbHVlKSB7IHJldHVy
biB2YWx1ZTsgfQorfTsKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdl
cihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkKLXsKLSAg
ICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlPGludD4ocmFuZ2UsIG1pbmltdW1WYWx1ZSwgQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdW1lcj4K
K3N0cnVjdCBUcmFuc2Zvcm1BcHBsaWVyPENvbnN1bWVyLCB0eXBlbmFtZSBzdGQ6OnZvaWRfdDx0
eXBlbmFtZSBDb25zdW1lcjo6VHJhbnNmb3JtZXI+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RhdGljIGRlY2x0eXBlKGF1dG8pIGFwcGx5KFQgdmFsdWUpIHsgcmV0dXJuIENvbnN1bWVy
OjpUcmFuc2Zvcm1lcjo6dHJhbnNmb3JtKHZhbHVlKTsgfQorfTsKIAotc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gY29uc3VtZVBvc2l0aXZlSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyLCB0eXBlbmFtZSBUPgorc3RhdGljIGRl
Y2x0eXBlKGF1dG8pIGFwcGx5VHJhbnNmb3JtKFQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNvbnN1
bWVJbnRlZ2VyVHlwZVJhdzx1bnNpZ25lZD4ocmFuZ2UsIDEpOworICAgIHJldHVybiBUcmFuc2Zv
cm1BcHBsaWVyPENvbnN1bWVyPjo6YXBwbHkodmFsdWUpOwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2ZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCi17Ci0gICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZTx1bnNpZ25lZD4ocmFuZ2UsIDEs
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwotfQorLy8gVHJhbnNmb3JtZXJzOgogCi1zdGQ6
Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2Uu
cGVlaygpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBJZGVudGl0eVRyYW5zZm9ybWVy
IHsKKyAgICB1c2luZyBSZXN1bHQgPSBUOworICAgIHN0YXRpYyBUIHRyYW5zZm9ybShUIHZhbHVl
KSB7IHJldHVybiB2YWx1ZTsgfQorfTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0g
ICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpOwordGVtcGxh
dGU8dHlwZW5hbWUgUGFyZW50LCB0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZSBWYXJpYW50
VHlwZT4KK3N0cnVjdCBSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlIHsKKyAgICB1c2luZyBSZXN1
bHQgPSBSZXN1bHRUeXBlOwogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJu
IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFs
dWVSYW5nZSk7CisgICAgc3RhdGljIFJlc3VsdCB0cmFuc2Zvcm0oVmFyaWFudFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YWx1ZSwgW10gKGF1dG8gdmFs
dWUpIHsgcmV0dXJuIFBhcmVudDo6dHJhbnNmb3JtKHZhbHVlKTsgfSk7CisgICAgfQogCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgc3RhdGljIHR5cGVuYW1lIFJlc3VsdDo6dmFs
dWVfdHlwZSB0cmFuc2Zvcm0odHlwZW5hbWUgUmVzdWx0Ojp2YWx1ZV90eXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KIAotICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci19CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVzdWx0IHRyYW5z
Zm9ybShzdGQ6Om9wdGlvbmFsPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuIFBhcmVudDo6dHJhbnNmb3JtKCp2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UpCi17Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CitzdHJ1Y3QgQW5n
bGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5zZm9ybWVyIDogUmF3VmFyaWFudFRyYW5zZm9ybWVy
QmFzZTxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXIsIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiwgQW5nbGVPck51bWJlclJhdz4geworICAgIHVzaW5nIFJhd1ZhcmlhbnRUcmFuc2Zv
cm1lckJhc2U8QW5nbGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5zZm9ybWVyLCBzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4sIEFuZ2xlT3JOdW1iZXJSYXc+Ojp0cmFuc2Zvcm07CiAKLSAgICBzd2l0Y2gg
KHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJu
IGNvbnN1bWVOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBl
RnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KSk7CisgICAgc3RhdGljIGRvdWJsZSB0cmFuc2Zvcm0oQW5nbGVSYXcgYW5nbGVSYXcpCisgICAg
eworICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xl
UmF3LnR5cGUsIGFuZ2xlUmF3LnZhbHVlKTsKKyAgICB9CiAKLSAgICBjYXNlIE51bWJlclRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKSk7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICBz
dGF0aWMgZG91YmxlIHRyYW5zZm9ybShOdW1iZXJSYXcgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdmFsdWUudmFsdWU7CiAgICAgfQorfTsKIAotICAgIHJldHVybiBudWxscHRyOwotfQor
c3RydWN0IE51bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFRyYW5zZm9ybWVyIDogUmF3VmFyaWFu
dFRyYW5zZm9ybWVyQmFzZTxOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lciwg
c3RkOjpvcHRpb25hbDxkb3VibGU+LCBOdW1iZXJPclBlcmNlbnRSYXc+IHsKKyAgICB1c2luZyBS
YXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlPE51bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFRyYW5z
Zm9ybWVyLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4sIE51bWJlck9yUGVyY2VudFJhdz46OnRyYW5z
Zm9ybTsKIAotc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQotewotICAgIGF1dG8mIHRva2Vu
ID0gcmFuZ2UucGVlaygpOwotICAgIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAg
Y2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aFJhd1dpdGhL
bm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUs
IHVuaXRsZXNzKTsKKyAgICBzdGF0aWMgZG91YmxlIHRyYW5zZm9ybShOdW1iZXJSYXcgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7CisgICAgfQogCi0gICAgY2FzZSBE
aW1lbnNpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25U
b2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5p
dGxlc3MpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25z
dW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFu
Z2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzKTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OworICAgIHN0YXRpYyBkb3VibGUgdHJhbnNmb3JtKFBlcmNlbnRSYXcgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUgLyAxMDAuMDsKICAgICB9Cit9OwogCi0gICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLX0KKy8vIE1BUks6IE1ldGFDb25zdW1lckRpc3BhdGNoZXIKIAot
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBl
ZWsoKTsKK3RlbXBsYXRlPENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUsIHR5cGVuYW1lIENv
bnN1bWVyLCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgTWV0YUNvbnN1bWVyRGlzcGF0Y2hlciB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgdHlwZW5hbWUgQ29u
c3VtZXI6OlJlc3VsdCBjb25zdW1lKEFyZ3MmJi4uLikKKyAgICB7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorfTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBG
dW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJh
bmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDb25zdW1lcj4KK3N0cnVjdCBNZXRhQ29uc3VtZXJEaXNwYXRjaGVy
PEZ1bmN0aW9uVG9rZW4sIENvbnN1bWVyLCB0eXBlbmFtZSBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBD
b25zdW1lcjo6RnVuY3Rpb25Ub2tlbj4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdz
PgorICAgIHN0YXRpYyB0eXBlbmFtZSBDb25zdW1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4u
IGFyZ3MpCisgICAgeworICAgICAgICByZXR1cm4gYXBwbHlUcmFuc2Zvcm08Q29uc3VtZXI+KENv
bnN1bWVyOjpGdW5jdGlvblRva2VuOjpjb25zdW1lKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
LikpOworICAgIH0KK307CiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1
cm4gY29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb25zdW1lcj4KK3N0cnVjdCBNZXRhQ29uc3VtZXJEaXNwYXRjaGVyPE51bWJlclRva2VuLCBD
b25zdW1lciwgdHlwZW5hbWUgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgQ29uc3VtZXI6Ok51bWJlclRv
a2VuPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVu
YW1lIENvbnN1bWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAg
ICAgIHJldHVybiBhcHBseVRyYW5zZm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6Ok51bWJlclRva2Vu
Ojpjb25zdW1lKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOworICAgIH0KK307CiAKLSAg
ICBkZWZhdWx0OgotICAgICAgICBicmVhazsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgor
c3RydWN0IE1ldGFDb25zdW1lckRpc3BhdGNoZXI8UGVyY2VudGFnZVRva2VuLCBDb25zdW1lciwg
dHlwZW5hbWUgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgQ29uc3VtZXI6OlBlcmNlbnRhZ2VUb2tlbj4+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyB0eXBlbmFtZSBD
b25zdW1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYXBwbHlUcmFuc2Zvcm08Q29uc3VtZXI+KENvbnN1bWVyOjpQZXJjZW50YWdlVG9rZW46
OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7CiAgICAgfQorfTsKIAotICAg
IHJldHVybiBudWxscHRyOwotfQordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3VtZXI+CitzdHJ1Y3Qg
TWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxEaW1lbnNpb25Ub2tlbiwgQ29uc3VtZXIsIHR5cGVuYW1l
IHN0ZDo6dm9pZF90PHR5cGVuYW1lIENvbnN1bWVyOjpEaW1lbnNpb25Ub2tlbj4+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyB0eXBlbmFtZSBDb25zdW1lcjo6
UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICByZXR1cm4gYXBw
bHlUcmFuc2Zvcm08Q29uc3VtZXI+KENvbnN1bWVyOjpEaW1lbnNpb25Ub2tlbjo6Y29uc3VtZShz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsKKyAgICB9Cit9OwogCi1zdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZh
bHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBjb25zdCBhdXRvJiB0b2tlbiA9IHJhbmdlLnBl
ZWsoKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IE1ldGFDb25zdW1lckRp
c3BhdGNoZXI8SWRlbnRUb2tlbiwgQ29uc3VtZXIsIHR5cGVuYW1lIHN0ZDo6dm9pZF90PHR5cGVu
YW1lIENvbnN1bWVyOjpJZGVudFRva2VuPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgc3RhdGljIHR5cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYu
Li4gYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBhcHBseVRyYW5zZm9ybTxDb25zdW1lcj4o
Q29uc3VtZXI6OklkZW50VG9rZW46OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KSk7CisgICAgfQorfTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb25zdW1lciwgdHlwZW5hbWUuLi4gQXJncz4KK2F1dG8gY29uc3VtZU1ldGFDb25z
dW1lcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNl
ck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNz
WmVybywgQXJncyYmLi4uIGFyZ3MpIC0+IHR5cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQKK3sKKyAg
ICBzd2l0Y2ggKHJhbmdlLnBlZWsoKS50eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0aW9uVG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpOworICAgICAgICByZXR1cm4gTWV0YUNvbnN1bWVy
RGlzcGF0Y2hlcjxGdW5jdGlvblRva2VuLCBDb25zdW1lcj46OmNvbnN1bWUocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogCisgICAgY2FzZSBOdW1iZXJUb2tlbjoKKyAg
ICAgICAgcmV0dXJuIE1ldGFDb25zdW1lckRpc3BhdGNoZXI8TnVtYmVyVG9rZW4sIENvbnN1bWVy
Pjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVu
aXRsZXNzLCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisKICAg
ICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3
V2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKTsKKyAg
ICAgICAgcmV0dXJuIE1ldGFDb25zdW1lckRpc3BhdGNoZXI8UGVyY2VudGFnZVRva2VuLCBDb25z
dW1lcj46OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwog
CisgICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIE1ldGFDb25zdW1lckRp
c3BhdGNoZXI8RGltZW5zaW9uVG9rZW4sIENvbnN1bWVyPjo6Y29uc3VtZShyYW5nZSwgc3ltYm9s
VGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHN0
ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisKKyAgICBjYXNlIElkZW50VG9rZW46CisgICAg
ICAgIHJldHVybiBNZXRhQ29uc3VtZXJEaXNwYXRjaGVyPElkZW50VG9rZW4sIENvbnN1bWVyPjo6
Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRs
ZXNzLCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgCiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQot
Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2
YWx1ZVJhbmdlKQotewotICAgIHJldHVybiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUocmFuZ2Us
IHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwotfQorLy8gTUFSSzogU2Ft
ZVRva2VuTWV0YUNvbnN1bWVyCiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBl
cmNlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdl
LnBlZWsoKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYW5zZm9ybWVyLCB0eXBlbmFtZSBDb25zdW1l
cnNUdXBsZSwgc2l6ZV90IEk+CitzdHJ1Y3QgU2FtZVRva2VuTWV0YUNvbnN1bWVyIHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyB0eXBlbmFtZSBUcmFuc2Zvcm1l
cjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICB1c2luZyBT
ZWxlY3RlZENvbnN1bWVyID0gc3RkOjp0dXBsZV9lbGVtZW50X3Q8SSAtIDEsIENvbnN1bWVyc1R1
cGxlPjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gVHJhbnNmb3JtZXI6OnRyYW5zZm9ybShT
ZWxlY3RlZENvbnN1bWVyOjpjb25zdW1lKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIFNhbWVUb2tlbk1ldGFD
b25zdW1lcjxUcmFuc2Zvcm1lciwgQ29uc3VtZXJzVHVwbGUsIEkgLSAxPjo6Y29uc3VtZShzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KK307CiAKLSAgICBzd2l0Y2ggKHRva2Vu
LnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1
bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBvb2wpOwordGVtcGxhdGU8dHlwZW5hbWUgVHJh
bnNmb3JtZXIsIHR5cGVuYW1lIENvbnN1bWVyc1R1cGxlPgorc3RydWN0IFNhbWVUb2tlbk1ldGFD
b25zdW1lcjxUcmFuc2Zvcm1lciwgQ29uc3VtZXJzVHVwbGUsIDA+IHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0
IGNvbnN1bWUoQXJncyYmLi4uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVuYW1lIFRyYW5z
Zm9ybWVyOjpSZXN1bHQgeyB9OworICAgIH0KK307CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tl
bjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcG9v
bCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFuc2Zvcm1lciwgdHlwZW5hbWUgVCwgdHlwZW5hbWUu
Li4gVHM+CitzdHJ1Y3QgU2FtZVRva2VuTWV0YUNvbnN1bWVyIHsKKyAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6Y29uanVuY3Rpb25fdjxzdGQ6OmJvb2xfY29uc3RhbnQ8VHM6OnRva2VuVHlwZSA9PSBU
Ojp0b2tlblR5cGU+Li4uPiwgIkFsbCBDb25zdW1lcnMgcGFzc2VkIHRvIFNhbWVUb2tlbk1ldGFD
b25zdW1lciBtdXN0IGhhdmUgdGhlIHNhbWUgdG9rZW5UeXBlIik7CisgICAgdXNpbmcgQ29uc3Vt
ZXJzVHVwbGUgPSBzdGQ6OnR1cGxlPFQsIFRzLi4uPjsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGJyZWFrOworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlw
ZSA9IFQ6OnRva2VuVHlwZTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0
YXRpYyB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
IHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIEFyZ3MmJi4uLiBhcmdz
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gdG9rZW5UeXBl
KTsKKyAgICAgICAgcmV0dXJuIFNhbWVUb2tlbk1ldGFDb25zdW1lcjxUcmFuc2Zvcm1lciwgQ29u
c3VtZXJzVHVwbGUsIHN0ZDo6dHVwbGVfc2l6ZV92PENvbnN1bWVyc1R1cGxlPj46OmNvbnN1bWUo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogICAgIH0KK307CiAKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KIAotc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFu
Z2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVy
bykKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKy8vIE1BUks6IC0gQ29uc3Vt
ZXIgZGVmaW5pdGlvbnMuCiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2Ug
RnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRv
a2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7CisvLyBNQVJLOiBJbnRlZ2VyCiAKLSAgICBjYXNlIERp
bWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9r
ZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlLCBJbnRl
Z2VyUmFuZ2UgaW50ZXJnZXJSYW5nZT4KK3N0cnVjdCBJbnRlZ2VyVHlwZVJhd0NvbnN1bWVyIHsK
KyAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPEludFR5cGU+OwogCi0gICAgY2FzZSBO
dW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2Vu
VHlwZU51bWJlcihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIHVuaXRs
ZXNzLCB1bml0bGVzc1plcm8pOwotICAgICAgICBicmVhazsKKyAgICB1c2luZyBGdW5jdGlvblRv
a2VuID0gSW50ZWdlclR5cGVSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI8SW50VHlw
ZSwgaW50ZXJnZXJSYW5nZT47CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBJbnRlZ2VyVHlwZVJh
d0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI8SW50VHlwZSwgaW50ZXJnZXJSYW5nZT47Cit9
OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQordGVtcGxhdGU8dHlwZW5h
bWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVyZ2VyUmFuZ2U+CitzdHJ1Y3QgSW50ZWdlclR5
cGVDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PjsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tl
biA9IEludGVnZXJUeXBlS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyPEludFR5cGUsIGlu
dGVyZ2VyUmFuZ2U+OworICAgIHVzaW5nIE51bWJlclRva2VuID0gSW50ZWdlclR5cGVLbm93blRv
a2VuVHlwZU51bWJlckNvbnN1bWVyPEludFR5cGUsIGludGVyZ2VyUmFuZ2U+OworfTsKIAotUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywg
VW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQotewotICAgIHJldHVybiBjb25zdW1lQW5n
bGVXb3JrZXJTYWZlKHJhbmdlLCBwYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKLX0KKy8vIE1BUks6IE51bWJlcgogCi1SZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJiBwb29s
LCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8p
Ci17Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CitzdHJ1Y3QgTnVtYmVyUmF3Q29u
c3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PjsKIAot
ICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAg
ICAgICByZXR1cm4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9k
ZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tl
biA9IE51bWJlclJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBO
dW1iZXJUb2tlbiA9IE51bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7Cit9Owog
Ci0gICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2Us
IHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJv
LCBwb29sKTsKK3N0cnVjdCBOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1l
ciA6IE51bWJlclJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBJZGVudFRva2VuID0gTnVtYmVyUmF3
S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyOworfTsKIAotICAgIGNhc2UgTnVtYmVyVG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0
aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2Vy
TW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7Ci0gICAgCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQorc3Ry
dWN0IE51bWJlckNvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+OwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKLXsKLSAgICBhdXRvJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gTnVtYmVyQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI7Cisg
ICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0
aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50
eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1l
VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihy
YW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKSk7CisvLyBNQVJLOiBQZXJjZW50CiAKLSAgICBjYXNlIERpbWVuc2lvblRv
a2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNl
ck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK3N0cnVjdCBQZXJj
ZW50UmF3Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8UGVyY2Vu
dFJhdz47CiAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVRp
bWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdl
LCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gUGVyY2VudFJhd0tub3duVG9r
ZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJj
ZW50UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXI7Cit9OwogCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQorc3Ry
dWN0IFBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lciA6IFBlcmNlbnRS
YXdDb25zdW1lciB7CisgICAgdXNpbmcgSWRlbnRUb2tlbiA9IFBlcmNlbnRSYXdLbm93blRva2Vu
VHlwZUlkZW50Q29uc3VtZXI7Cit9OwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVSZXNvbHV0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIC8vIE5PVEU6
IFVubGlrZSB0aGUgb3RoZXIgdHlwZXMsIGNhbGMoKSBkb2VzIG5vdCB3b3JrIHdpdGggPHJlc29s
dXRpb24+Lgorc3RydWN0IFBlcmNlbnRDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsKIAotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygp
OworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI7CisgICAgdXNpbmcgUGVyY2Vu
dGFnZVRva2VuID0gUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tl
blR5cGVQZXJjZW50Q29uc3VtZXI7Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsK
LSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVJlc29sdXRp
b25DU1NQcmltaXRpdmVWYWx1ZVdpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci0gICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQorLy8gTUFSSzogTGVuZ3RoCiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK3N0
cnVjdCBMZW5ndGhSYXdDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25h
bDxMZW5ndGhSYXc+OwogCi0vLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyAodG9rZW4g
dHlwZSB1bmtub3duIGJ5IGNhbGxlcikuCisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IExlbmd0
aFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBEaW1lbnNpb25U
b2tlbiA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI7CisgICAgdXNp
bmcgTnVtYmVyVG9rZW4gPSBMZW5ndGhSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOwor
fTsKIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlT3JQZXJj
ZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3Na
ZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wmIHBvb2wgPSBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpKQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworc3RydWN0
IExlbmd0aENvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9u
VG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVl
UmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpKQotICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmlt
aXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgcG9vbCk7CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IExlbmd0aENTU1By
aW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOwor
ICAgIHVzaW5nIE51bWJlclRva2VuID0gTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2Vu
ID0gTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVu
c2lvbkNvbnN1bWVyOworfTsKIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJl
dHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNz
LCB1bml0bGVzc1plcm8sIHBvb2wpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRs
ZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpOworLy8gTUFSSzogQW5nbGUKIAotICAgIGNhc2UgUGVy
Y2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1
ZVJhbmdlLCBwb29sKTsKLSAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
CitzdHJ1Y3QgQW5nbGVSYXdDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRp
b25hbDxBbmdsZVJhdz47CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKyAgICB1c2luZyBGdW5j
dGlvblRva2VuID0gQW5nbGVSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI7CisgICAg
dXNpbmcgTnVtYmVyVG9rZW4gPSBBbmdsZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7
CisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBBbmdsZVJhd0tub3duVG9rZW5UeXBlRGltZW5z
aW9uQ29uc3VtZXI7Cit9OwogCi1zdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29u
c3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsg
dW5pdGxlc3MpCi17Ci0gICAgYXV0byBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcgPSBbXShh
dXRvIHJlc3VsdCkgLT4gc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IHsKLSAgICAg
ICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Oworc3RydWN0IEFuZ2xlQ29uc3VtZXIgeworICAg
IHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47CiAKLSAgICBhdXRvJiB0
b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gQW5nbGVDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsK
KyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IEFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2Vu
ID0gQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5z
aW9uQ29uc3VtZXI7Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNl
IEZ1bmN0aW9uVG9rZW46IHsKLSAgICAgICAgaWYgKGF1dG8gbGVuZ3RoID0gY29uc3VtZUxlbmd0
aFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBh
cnNlck1vZGUsIHVuaXRsZXNzKSkKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGhP
clBlcmNlbnRSYXcobGVuZ3RoKTsKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQ
ZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSkpCi0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvTGVuZ3RoT3JQZXJjZW50UmF3KHBlcmNl
bnQpOwotICAgICAgICBicmVhazsKLSAgICB9CisvLyBNQVJLOiBUaW1lCiAKLSAgICBjYXNlIERp
bWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29udmVydFRvTGVuZ3RoT3JQZXJjZW50UmF3
KGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpKTsKLSAgICAKLSAgICBjYXNlIE51bWJl
clRva2VuOgotICAgICAgICByZXR1cm4gY29udmVydFRvTGVuZ3RoT3JQZXJjZW50UmF3KGNvbnN1
bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpKTsKK3N0cnVjdCBUaW1lQ29uc3VtZXIgeworICAgIHVz
aW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47CiAKLSAgICBjYXNlIFBlcmNl
bnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyhj
b25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSkpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBUaW1lQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI7CisgICAgdXNp
bmcgTnVtYmVyVG9rZW4gPSBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZU51bWJlckNvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gVGltZUNT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1l
cjsKK307CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisvLyBNQVJLOiBS
ZXNvbHV0aW9uCiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorc3RydWN0IFJlc29sdXRp
b25Db25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PjsKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgYm9vbCBhbGxvd3NOZWdh
dGl2ZVBlcmNlbnRhZ2UpCi17Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAg
Ly8gTk9URTogVW5saWtlIHRoZSBvdGhlciB0eXBlcywgY2FsYygpIGRvZXMgbm90IHdvcmsgd2l0
aCA8cmVzb2x1dGlvbj4uCisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBSZXNvbHV0aW9uQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKK307CiAK
LSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewot
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgdXNpbmcgdHJ5aW5nIHRvIGdlbmVyYXRl
IHRoZSBjYWxjIHdpdGggYm90aCBMZW5ndGggYW5kIFBlcmNlbnQgZGVzdGluYXRpb24gY2F0ZWdv
cnkgdHlwZXM/Ci0gICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UsIHsgfSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KSwgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlKTsKLSAgICAgICAgaWYgKGF1dG8gY2FsY3VsYXRp
b24gPSBwYXJzZXIudmFsdWUoKTsgY2FsY3VsYXRpb24gJiYgY2FuQ29uc3VtZUNhbGNWYWx1ZShj
YWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgcGFyc2VyTW9kZSkpCi0gICAgICAgICAgICByZXR1cm4g
cGFyc2VyLmNvbnN1bWVWYWx1ZSgpOwotICAgICAgICBicmVhazsKLSAgICB9CisvLyBNQVJLOiAt
IENvbWJpbmF0aW9uIGNvbnN1bWVyIGRlZmluaXRpb25zLgogCi0gICAgY2FzZSBEaW1lbnNpb25U
b2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBh
cnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLSAgICAKLSAg
ICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aENTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFs
dWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkp
OworLy8gTUFSSzogQW5nbGUgKyBQZXJjZW50CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoK
LSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKSk7CitzdHJ1Y3QgQW5nbGVPclBlcmNlbnRDb25zdW1lciB7Cisg
ICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsKIAotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBTYW1lVG9rZW5N
ZXRhQ29uc3VtZXI8CisgICAgICAgIElkZW50aXR5VHJhbnNmb3JtZXI8UmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPj4sCisgICAgICAgIEFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhL
bm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIsCisgICAgICAgIFBlcmNlbnRDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcgorICAgID47
CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICB1c2luZyBQZXJjZW50YWdlVG9r
ZW4gPSBQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBl
cmNlbnRDb25zdW1lcjsKKyAgICB1c2luZyBEaW1lbnNpb25Ub2tlbiA9IEFuZ2xlQ1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOworfTsK
KworLy8gTUFSSzogTGVuZ3RoICsgUGVyY2VudAorCitzdHJ1Y3QgTGVuZ3RoT3JQZXJjZW50UmF3
VHJhbnNmb3JtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQ
ZXJjZW50UmF3PjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiB0cmFuc2Zvcm0oVCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7ICp2YWx1ZSB9OworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KIAotICAgIHJldHVybiBudWxscHRyOwotfQor
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gdHJhbnNmb3JtKHN0
ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICB9Cit9OwogCi0vLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVy
cyB0aGF0IGFsbG93IGxvb2t1cCBpbiB0aGUgc3ltYm9sIHRhYmxlIGZvciBJZGVudFRva2VucyAo
YnkgZGVmYXVsdCwgb3RoZXIgY29uc3VtZXJzIG9ubHkgbG9va3VwIGluIHRoZSBzeW1ib2wgdGFi
bGUgZm9yIGNhbGMoKSkuCitzdHJ1Y3QgTGVuZ3RoT3JQZXJjZW50UmF3Q29uc3VtZXIgeworICAg
IHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PjsKKyAgICB1
c2luZyBUcmFuc2Zvcm1lciA9IExlbmd0aE9yUGVyY2VudFJhd1RyYW5zZm9ybWVyOwogCi1zdGF0
aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJBbGxvd2luZ1N5bWJvbFRhYmxl
SWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkK
LXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB1c2luZyBGdW5jdGlvblRv
a2VuID0gU2FtZVRva2VuTWV0YUNvbnN1bWVyPAorICAgICAgICBMZW5ndGhPclBlcmNlbnRSYXdU
cmFuc2Zvcm1lciwKKyAgICAgICAgUGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25z
dW1lciwKKyAgICAgICAgTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyCisg
ICAgPjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBlTnVt
YmVyQ29uc3VtZXI7CisgICAgdXNpbmcgUGVyY2VudGFnZVRva2VuID0gUGVyY2VudFJhd0tub3du
VG9rZW5UeXBlUGVyY2VudENvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gTGVu
Z3RoUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKK307CiAKLSAgICBzd2l0Y2gg
KHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJu
IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9s
VGFibGUsIHZhbHVlUmFuZ2UpOworLy8gTUFSSzogQW5nbGUgKyBOdW1iZXIKIAotICAgIGNhc2Ug
TnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9r
ZW5UeXBlTnVtYmVyKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSk7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RydWN0IEFuZ2xlT3JOdW1iZXJSYXdDb25zdW1lciB7CisgICAgdXNpbmcg
VHJhbnNmb3JtZXIgPSBUOworICAgIHVzaW5nIFJlc3VsdCA9IHR5cGVuYW1lIFRyYW5zZm9ybWVy
OjpSZXN1bHQ7CiAKLSAgICBjYXNlIElkZW50VG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1l
TnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1
ZVJhbmdlKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gU2FtZVRva2VuTWV0YUNvbnN1bWVy
PAorICAgICAgICBUcmFuc2Zvcm1lciwKKyAgICAgICAgTnVtYmVyUmF3S25vd25Ub2tlblR5cGVG
dW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBBbmdsZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25D
b25zdW1lcgorICAgID47CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBOdW1iZXJSYXdLbm93blRv
a2VuVHlwZU51bWJlckNvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gQW5nbGVS
YXdLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOworfTsKIAotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQW5nbGVP
ck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudENvbnN1bWVyIDogQW5nbGVPck51bWJl
clJhd0NvbnN1bWVyPFQ+IHsKKyAgICB1c2luZyBJZGVudFRva2VuID0gQW5nbGVPck51bWJlclJh
d0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjsKK307CiAKLSAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotfQorLy8gTUFSSzogTnVtYmVyICsgUGVyY2VudAogCi1zdGF0aWMgc3RkOjpvcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVQZXJjZW50QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpCi17Ci0gICAgYXV0byYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IE51bWJl
ck9yUGVyY2VudFJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBUcmFuc2Zvcm1lciA9IFQ7CisgICAg
dXNpbmcgUmVzdWx0ID0gdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdDsKIAotICAgIHN3aXRj
aCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1
cm4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3lt
Ym9sVGFibGUsIHZhbHVlUmFuZ2UpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBTYW1lVG9r
ZW5NZXRhQ29uc3VtZXI8CisgICAgICAgIFRyYW5zZm9ybWVyLAorICAgICAgICBQZXJjZW50UmF3
S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBOdW1iZXJSYXdLbm93blRv
a2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIKKyAgICA+OworICAgIHVzaW5nIE51bWJlclRva2VuID0g
TnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICB1c2luZyBQZXJjZW50
YWdlVG9rZW4gPSBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXI7Cit9Owog
Ci0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2Vu
dFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1
ZVJhbmdlKTsKIAotICAgIGNhc2UgSWRlbnRUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQ
ZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1
ZVJhbmdlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgTnVtYmVyT3JQZXJjZW50UmF3
QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3VtZXIgOiBOdW1iZXJPclBlcmNlbnRSYXdDb25z
dW1lcjxUPiB7CisgICAgdXNpbmcgSWRlbnRUb2tlbiA9IE51bWJlck9yUGVyY2VudFJhd0tub3du
VG9rZW5UeXBlSWRlbnRDb25zdW1lcjsKK307CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworLy8gTUFSSzogLSBDb25zdW1l
ciBmdW5jdGlvbnMgLSB1dGlsaXplIGNvbnN1bWVyIGRlZmluaXRpb25zIGFib3ZlLCBnaXZpbmcg
bW9yZSB0YXJnZXR0ZWQgaW50ZXJmYWNlcyBhbmQgYWxsb3dpbmcgZXhwb3N1cmUgdG8gb3RoZXIg
ZmlsZXMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlcmdl
clJhbmdlPiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1l
cjxJbnRlZ2VyVHlwZVJhd0NvbnN1bWVyPEludFR5cGUsIGludGVyZ2VyUmFuZ2U+PihyYW5nZSwg
eyB9LCBWYWx1ZVJhbmdlOjpBbGwsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVu
aXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiB9CiAKLXN0
YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlcmdlclJhbmdlPiBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyVHlwZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQogewotICAgIGF1dG8gY29tcHV0ZURlZ3JlZXMg
PSBbXShhdXRvIGFuZ2xlUmF3KSAtPiBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gewotICAgICAgICBp
ZiAoYW5nbGVSYXcpCi0gICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1
dGVEZWdyZWVzKGFuZ2xlUmF3LT50eXBlLCBhbmdsZVJhdy0+dmFsdWUpOwotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotICAgIH07CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8
SW50ZWdlclR5cGVDb25zdW1lcjxJbnRUeXBlLCBpbnRlcmdlclJhbmdlPj4ocmFuZ2UsIHsgfSwg
VmFsdWVSYW5nZTo6QWxsLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIHBvb2wpOworfQogCi0g
ICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CitzdGQ6Om9wdGlvbmFsPGludD4gY29uc3Vt
ZUludGVnZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNv
bnN1bWVJbnRlZ2VyVHlwZVJhdzxpbnQsIEludGVnZXJSYW5nZTo6QWxsPihyYW5nZSk7Cit9CiAK
LSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAg
ICAgICAgaWYgKGF1dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5
cGVGdW5jdGlvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgICAg
ICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoYW5nbGVSYXcpOwotICAgICAgICByZXR1cm4gY29uc3Vt
ZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFu
Z2U6OkFsbCk7Ci0gICAgCi0gICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVEZWdyZWVzKGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lv
bihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6
OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpOwotICAgIAotICAgIGNhc2UgTnVt
YmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5U
eXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7CitSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorewor
ICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGU8aW50LCBJbnRlZ2VyUmFuZ2U6OkFsbD4ocmFu
Z2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworfQogCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorc3RkOjpvcHRpb25hbDxpbnQ+IGNvbnN1bWVJbnRlZ2VyWmVyb0Fu
ZEdyZWF0ZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNv
bnN1bWVJbnRlZ2VyVHlwZVJhdzxpbnQsIEludGVnZXJSYW5nZTo6WmVyb0FuZEdyZWF0ZXI+KHJh
bmdlKTsKK30KIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CitSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZTxpbnQsIEludGVnZXJSYW5n
ZTo6WmVyb0FuZEdyZWF0ZXI+KHJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKIH0K
IAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lQW5nbGVSYXdPck51bWJlclJh
d0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlKQorc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY29uc3VtZVBvc2l0aXZlSW50ZWdlclJhdyhD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBhdXRvIGNvbXB1dGVEZWdyZWVzID0g
W10oYXV0byBhbmdsZVJhdykgLT4gc3RkOjpvcHRpb25hbDxkb3VibGU+IHsKLSAgICAgICAgaWYg
KGFuZ2xlUmF3KQotICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRl
RGVncmVlcyhhbmdsZVJhdy0+dHlwZSwgYW5nbGVSYXctPnZhbHVlKTsKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICB9OworICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVSYXc8
dW5zaWduZWQsIEludGVnZXJSYW5nZTo6T25lQW5kR3JlYXRlcj4ocmFuZ2UpOworfQogCi0gICAg
YXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVQb3NpdGl2ZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAg
cmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZTx1bnNpZ25lZCwgSW50ZWdlclJhbmdlOjpPbmVBbmRH
cmVhdGVyPihyYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CiAKLSAgICBzd2l0
Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgaWYg
KGF1dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bihyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSkKLSAgICAgICAgICAg
IHJldHVybiBjb21wdXRlRGVncmVlcyhhbmdsZVJhdyk7Ci0gICAgICAgIHJldHVybiBjb25zdW1l
TnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHN5bWJvbFRhYmxlLCBW
YWx1ZVJhbmdlOjpBbGwpOwotICAgIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAg
IHJldHVybiBjb21wdXRlRGVncmVlcyhjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVE
aW1lbnNpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKTsKLSAgICAKLSAgICBj
YXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93
blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwpOworc3RkOjpvcHRp
b25hbDxOdW1iZXJSYXc+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25z
dW1lcjxOdW1iZXJSYXdDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2Vy
TW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1pl
cm9RdWlyazo6Rm9yYmlkKTsKK30KIAotICAgIGNhc2UgSWRlbnRUb2tlbjoKLSAgICAgICAgaWYg
KGF1dG8gdmFyaWFibGUgPSBzeW1ib2xUYWJsZS5nZXQodG9rZW4uaWQoKSkpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19ERUc6Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgotICAg
ICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAgICAgICAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZURlZ3JlZXModmFyaWFibGUtPnR5cGUsIHZhcmlhYmxlLT52YWx1ZSk7CitzdGF0
aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1bWVOdW1iZXJBbGxvd2luZ1N5bWJvbFRh
YmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFs
bCkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxOdW1iZXJSYXdBbGxvd2luZ1N5
bWJvbFRhYmxlSWRlbnRDb25zdW1lcj4ocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVu
aXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOworfQogCi0gICAgICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSOgotICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLT52YWx1ZTsKK1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lTWV0
YUNvbnN1bWVyPE51bWJlckNvbnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJz
ZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNz
WmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworfQogCi0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiBjb25z
dW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPFBlcmNlbnRSYXdDb25z
dW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJk
TW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsK
K30KIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KK3N0YXRpYyBzdGQ6Om9w
dGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWVQZXJjZW50QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpCit7Cisg
ICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8UGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFi
bGVJZGVudENvbnN1bWVyPihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIENTU1BhcnNl
ck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCk7Cit9CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lUGVyY2Vu
dFdvcmtlclNhZmUocmFuZ2UsIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkp
OwogfQogCi0vLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyB3aXRoIHRyYW5zZm9ybWF0
aW9ucyBiYXNlZCBvbiByZXN1bHQgdHlwZS4KK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVBlcmNlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJh
bmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKK3sKKyAgICByZXR1cm4gY29uc3Vt
ZU1ldGFDb25zdW1lcjxQZXJjZW50Q29uc3VtZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENT
U1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgcG9vbCk7Cit9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE51
bWJlclRyYW5zZm9ybWVyLCB0eXBlbmFtZSBQZXJjZW50VHJhbnNmb3JtZXI+Ci1zdGF0aWMgYXV0
byBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIE51bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbnNm
b3JtZXIsIFBlcmNlbnRUcmFuc2Zvcm1lciYmIHBlcmNlbnRUcmFuc2Zvcm1lcikgLT4gc3RkOjpv
cHRpb25hbDxkZWNsdHlwZShudW1iZXJUcmFuc2Zvcm1lcihzdGQ6OmRlY2x2YWw8ZG91YmxlPigp
KSk+CitzdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7Ci0gICAgY29uc3QgYXV0byYgdG9r
ZW4gPSByYW5nZS5wZWVrKCk7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8TGVuZ3Ro
UmF3Q29uc3VtZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNz
LCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30KIAotICAgIHN3aXRjaCAodG9rZW4udHlw
ZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOiB7Ci0gICAgICAgIGlmIChhdXRvIG51bWJl
ciA9IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9
LCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuc2Zvcm1lcigqbnVt
YmVyKTsKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCi0gICAgICAgICAg
ICByZXR1cm4gcGVyY2VudFRyYW5zZm9ybWVyKCpwZXJjZW50KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICByZXR1cm4gY29uc3VtZU1l
dGFDb25zdW1lcjxMZW5ndGhDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2Vy
TW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkpOworfQogCi0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Ci0gICAgICAgIGlm
IChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNl
bnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gcGVyY2Vu
dFRyYW5zZm9ybWVyKCpwZXJjZW50KTsKLSAgICAgICAgYnJlYWs7CitzdGQ6Om9wdGlvbmFsPEFu
Z2xlUmF3PiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJv
UXVpcmsgdW5pdGxlc3NaZXJvKQoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPEFu
Z2xlUmF3Q29uc3VtZXI+KHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7Cit9CiAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAg
ICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBl
TnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpKQotICAgICAgICAgICAgcmV0dXJuIG51bWJl
clRyYW5zZm9ybWVyKCpudW1iZXIpOwotICAgICAgICBicmVhazsKK1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJz
ZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1
aXJrIHVuaXRsZXNzWmVybykKK3sKKyAgICByZXR1cm4gY29uc3VtZUFuZ2xlV29ya2VyU2FmZShy
YW5nZSwgcGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwgdW5pdGxlc3MsIHVu
aXRsZXNzWmVybyk7Cit9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CitS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29s
JiBwb29sLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVz
c1plcm8pCit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8QW5nbGVDb25zdW1lcj4o
cmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxl
c3NaZXJvLCBwb29sKTsKK30KIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CitSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
U1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NR
dWlyayB1bml0bGVzcykKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxUaW1lQ29u
c3VtZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0
bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKIH0KIAot
c3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2
aWRlZEJ5MTAwUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVSZXNvbHV0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBj
b25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3KHJhbmdlLCB2YWx1ZVJhbmdlLCBbXShkb3VibGUg
bnVtYmVyKSB7IHJldHVybiBudW1iZXI7IH0sIFtdKGRvdWJsZSBwZXJjZW50KSB7IHJldHVybiBw
ZXJjZW50IC8gMTAwLjA7IH0pOworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPFJlc29s
dXRpb25Db25zdW1lcj4ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBDU1NQYXJzZXJNb2Rl
OjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1
aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogfQogCi0vLyBNQVJLOiAt
IENvbWJpbmF0aW9uIGNvbnN1bWVycyB0aGF0IGJvdGggYWxsb3cgbG9va3VwIGluIHRoZSBzeW1i
b2wgdGFibGUgZm9yIElkZW50VG9rZW5zIGFuZCB0cmFuc2Zvcm1hdGlvbnMgYmFzZWQgb24gcmVz
dWx0IHR5cGUuCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVP
clBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2Vy
TW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0
bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkpCit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8QW5n
bGVPclBlcmNlbnRDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7Cit9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE51
bWJlclRyYW5zZm9ybWVyLCB0eXBlbmFtZSBQZXJjZW50VHJhbnNmb3JtZXI+Ci1zdGF0aWMgYXV0
byBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIE51bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVy
VHJhbnNmb3JtZXIsIFBlcmNlbnRUcmFuc2Zvcm1lciYmIHBlcmNlbnRUcmFuc2Zvcm1lcikgLT4g
c3RkOjpvcHRpb25hbDxkZWNsdHlwZShudW1iZXJUcmFuc2Zvcm1lcihzdGQ6OmRlY2x2YWw8ZG91
YmxlPigpKSk+CitzdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0
aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBw
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3Mp
CiB7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8TGVuZ3RoT3JQZXJjZW50UmF3Q29u
c3VtZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0
bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30KKworLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3Jr
IHdpdGggdGhlIGN1cnJlbnQgc2NoZW1lIGR1ZSB0byB0aGUgTmVnYXRpdmVQZXJjZW50YWdlUG9s
aWN5IHBhcmFtZXRlcgorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQ
ZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgTmVnYXRp
dmVQZXJjZW50YWdlUG9saWN5IG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSkKK3sKICAgICBhdXRv
JiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKIAogICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CiAg
ICAgY2FzZSBGdW5jdGlvblRva2VuOiB7Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1
bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUs
IHZhbHVlUmFuZ2UpKQotICAgICAgICAgICAgcmV0dXJuIG51bWJlclRyYW5zZm9ybWVyKCpudW1i
ZXIpOwotICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25v
d25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKQotICAg
ICAgICAgICAgcmV0dXJuIHBlcmNlbnRUcmFuc2Zvcm1lcigqcGVyY2VudCk7CisgICAgICAgIC8v
IEZJWE1FOiBTaG91bGQgdGhpcyBiZSB1c2luZyB0cnlpbmcgdG8gZ2VuZXJhdGUgdGhlIGNhbGMg
d2l0aCBib3RoIExlbmd0aCBhbmQgUGVyY2VudCBkZXN0aW5hdGlvbiBjYXRlZ29yeSB0eXBlcz8K
KyAgICAgICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxl
bmd0aCwgdmFsdWVSYW5nZSwgeyB9LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCBuZWdhdGl2
ZVBlcmNlbnRhZ2VQb2xpY3kpOworICAgICAgICBpZiAoYXV0byBjYWxjdWxhdGlvbiA9IHBhcnNl
ci52YWx1ZSgpOyBjYWxjdWxhdGlvbiAmJiBjYW5Db25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9u
LT5jYXRlZ29yeSgpLCBwYXJzZXJNb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXIuY29u
c3VtZVZhbHVlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgUGVyY2VudGFn
ZVRva2VuOgotICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRo
S25vd25Ub2tlblR5cGVQZXJjZW50YWdlKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkp
Ci0gICAgICAgICAgICByZXR1cm4gcGVyY2VudFRyYW5zZm9ybWVyKCpwZXJjZW50KTsKLSAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIExlbmd0
aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25z
dW1lcjo6Y29uc3VtZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVz
cywgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7
CiAKICAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25z
dW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCBzeW1ib2xUYWJsZSwg
dmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVtYmVyVHJhbnNmb3JtZXIoKm51bWJl
cik7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gTGVuZ3RoQ1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKHJhbmdl
LCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWly
azo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKIAotICAgIGNhc2UgSWRlbnRU
b2tlbjoKLSAgICAgICAgaWYgKGF1dG8gdmFyaWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2Uu
cGVlaygpLmlkKCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7Ci0g
ICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKLSAgICAgICAgICAg
ICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcodmFyaWFi
bGUtPnZhbHVlLCB2YWx1ZVJhbmdlKSkgewotICAgICAgICAgICAgICAgICAgICByYW5nZS5jb25z
dW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGVy
Y2VudFRyYW5zZm9ybWVyKCp2YWxpZGF0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgorICAgICAgICBy
ZXR1cm4gUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQ
ZXJjZW50Q29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9k
ZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkpOwogCi0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOgot
ICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVy
UmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bWJlclRyYW5zZm9ybWVyKCp2YWxpZGF0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIHN0ZDo6b3B0
aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3QWxs
b3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUcmFuc2Zvcm1lcj4KK3N0YXRpYyBhdXRvIGNvbnN1bWVBbmdsZU9y
TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNl
ck1vZGUpIC0+IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQKIHsKLSAgICByZXR1cm4gY29u
c3VtZU51bWJlclJhd09yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChyYW5nZSwg
c3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIFtdKGRvdWJsZSBudW1iZXIpIHsgcmV0dXJuIG51bWJl
cjsgfSwgW10oZG91YmxlIHBlcmNlbnQpIHsgcmV0dXJuIHBlcmNlbnQgLyAxMDAuMDsgfSk7Cisg
ICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8QW5nbGVPck51bWJlclJhd0NvbnN1bWVyPFRy
YW5zZm9ybWVyPj4ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCBVbml0
bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUcmFuc2Zvcm1lcj4KK3N0YXRpYyBhdXRvIGNvbnN1bWVBbmdsZU9yTnVt
YmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBDU1NQYXJzZXJNb2RlIHBh
cnNlck1vZGUpIC0+IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQKK3sKKyAgICByZXR1cm4g
Y29uc3VtZU1ldGFDb25zdW1lcjxBbmdsZU9yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlk
ZW50Q29uc3VtZXI8VHJhbnNmb3JtZXI+PihyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6
OkFsbCwgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWly
azo6Rm9yYmlkKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXI+CitzdGF0aWMg
YXV0byBjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpIC0+IHR5cGVuYW1lIFRy
YW5zZm9ybWVyOjpSZXN1bHQKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxOdW1i
ZXJPclBlcmNlbnRSYXdDb25zdW1lcjxUcmFuc2Zvcm1lcj4+KHJhbmdlLCB7IH0sIHZhbHVlUmFu
Z2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJp
ZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRy
YW5zZm9ybWVyPgorc3RhdGljIGF1dG8gY29uc3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5n
U3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKSAtPiB0eXBl
bmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0Cit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3Vt
ZXI8TnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3VtZXI8VHJh
bnNmb3JtZXI+PihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6
OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVp
cms6OkZvcmJpZCk7Cit9CisKKy8vIEZJWE1FOiBUaGlzIG5lZWRzIGEgbW9yZSBjbGVhciBuYW1l
IHRvIGluZGljYXRlIGl0cyBiZWhhdmlvciBvZiBkaXZpZGluZyBwZXJjZW50cyBieSAxMDAgb25s
eSBpZiBhbiBleHBsaWNpdCBwZXJjZW50IHRva2VuLCBub3QgaWYgYSByZXN1bHQgb2YgYSBjYWxj
KCkuCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXJPclBlcmNlbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKICAgICBh
dXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKIAogICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7
CiAgICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1
bWVOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSkpCisg
ICAgICAgIGlmIChhdXRvIHZhbHVlID0gTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFs
dWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6
Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpKSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQ
ZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9u
KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworICAg
ICAgICByZXR1cm4gUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENT
U1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAKICAg
ICBjYXNlIE51bWJlclRva2VuOgotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOiB7Ci0gICAgICAg
IGF1dG8gdmFsdWUgPSBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KHJh
bmdlLCB2YWx1ZVJhbmdlKTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoKnZhbHVlLCBDU1NVbml0VHlw
ZTo6Q1NTX05VTUJFUik7CisgICAgICAgIHJldHVybiBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdp
dGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NR
dWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpKTsKKworICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgorICAgICAgICBpZiAoYXV0
byBwZXJjZW50UmF3ID0gUGVyY2VudFJhd0tub3duVG9rZW5UeXBlUGVyY2VudENvbnN1bWVyOjpj
b25zdW1lKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFy
ZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkp
CisgICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZShwZXJjZW50UmF3LT52YWx1ZSAvIDEwMC4wLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAg
ICAgICAgIGJyZWFrOwotICAgIH0KKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTEyODIsNiArMTM5Niw4IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZU51bWJlck9yUGVyY2VudChDU1NQYQogICAgIHJldHVybiBudWxscHRyOwogfQogCisvLyBNQVJL
OiAtIE5vbi1wcmltaXRpdmUgY29uc3VtZXJzLgorCiBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29u
c3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAg
ICAgLy8gVmFsdWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwIG9yIGdyZWF0ZXIgdGhhbiBvciBl
cXVhbCB0byAxMDAwIGFyZSBwYXJzZSBlcnJvcnMuCkBAIC0xMjk3LDE0ICsxNDEzLDE0IEBAIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYQogICAg
IHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CiAgICAgY2FzZSBGdW5jdGlvblRva2VuOiB7CiAgICAg
ICAgIC8vICJbRm9yIGNhbGMoKV0sIHRoZSB1c2VkIHZhbHVlIHJlc3VsdGluZyBmcm9tIGFuIGV4
cHJlc3Npb24gbXVzdCBiZSBjbGFtcGVkIHRvIHRoZSByYW5nZSBhbGxvd2VkIGluIHRoZSB0YXJn
ZXQgY29udGV4dC4iCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZU51bWJlclJhd1dpdGhL
bm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVy
Ojpjb25zdW1lKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgQ1NTUGFyc2VyTW9kZTo6SFRN
TFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6
Rm9yYmlkKTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICBicmVhazsKICNpZiAh
RU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAgICAgICAgaWYgKCEoKnJlc3VsdCA+IDAgJiYgKnJl
c3VsdCA8IDEwMDApIHx8ICFpc0ludGVnZXJBbmREaXZpc2libGVCeTEwMCgqcmVzdWx0KSkKKyAg
ICAgICAgaWYgKCEocmVzdWx0LT52YWx1ZSA+IDAgJiYgcmVzdWx0LT52YWx1ZSA8IDEwMDApIHx8
ICFpc0ludGVnZXJBbmREaXZpc2libGVCeTEwMChyZXN1bHQtPnZhbHVlKSkKICAgICAgICAgICAg
IGJyZWFrOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKCpyZXN1bHQsIHN0ZDo6
bmV4dGFmdGVyKDAuMCwgMS4wKSwgc3RkOjpuZXh0YWZ0ZXIoMTAwMC4wLCAwLjApKTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6Y2xhbXAocmVzdWx0LT52YWx1ZSwgc3RkOjpuZXh0YWZ0ZXIoMC4wLCAx
LjApLCBzdGQ6Om5leHRhZnRlcigxMDAwLjAsIDAuMCkpOwogICAgIH0KIAogICAgIGNhc2UgTnVt
YmVyVG9rZW46IHsKQEAgLTE0NTIsNyArMTU2OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRv
dWJsZT4gY29uc3VtZU9wdGlvbmFsQWxwaGEoQ1NTUAogICAgIGlmICghY29uc3VtZVNsYXNoSW5j
bHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpCiAgICAgICAgIHJldHVybiAxLjA7CiAKLSAgICBpZiAo
YXV0byBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkx
MDBSYXcocmFuZ2UpKQorICAgIGlmIChhdXRvIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJl
ck9yUGVyY2VudFJhdzxOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lcj4ocmFu
Z2UpKQogICAgICAgICByZXR1cm4gc3RkOjpjbGFtcCgqYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4w
KTsKIAogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC0xNDYzLDI1ICsxNTc5LDM5IEBAIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvdwogICAg
IGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpCiAgICAgICAgIHJl
dHVybiAxLjA7CiAKLSAgICBpZiAoYXV0byBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1iZXJS
YXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQocmFuZ2Us
IHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpBbGwpKQorICAgIGlmIChhdXRvIGFscGhhUGFyYW1l
dGVyID0gY29uc3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudDxO
dW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lcj4ocmFuZ2UsIHN5bWJvbFRhYmxl
LCBWYWx1ZVJhbmdlOjpBbGwpKQogICAgICAgICByZXR1cm4gc3RkOjpjbGFtcCgqYWxwaGFQYXJh
bWV0ZXIsIDAuMCwgMS4wKTsKIAogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLXN0YXRp
YyB1aW50OF90IG5vcm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcihkb3VibGUgdmFsdWUpCitzdGF0
aWMgdWludDhfdCBub3JtYWxpemVSR0JDb21wb25lbnROdW1iZXIoTnVtYmVyUmF3IHZhbHVlKQog
ewotICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVl
KTsKKyAgICByZXR1cm4gY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZSh2YWx1
ZS52YWx1ZSk7CiB9CiAKLXN0YXRpYyB1aW50OF90IG5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNl
bnRhZ2UoZG91YmxlIHZhbHVlKQorc3RhdGljIHVpbnQ4X3Qgbm9ybWFsaXplUkdCQ29tcG9uZW50
UGVyY2VudGFnZShQZXJjZW50UmF3IHZhbHVlKQogewotICAgIHJldHVybiBjb252ZXJ0UHJlc2Nh
bGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlIC8gMTAwLjAgKiAyNTUuMCk7CisgICAgcmV0
dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUudmFsdWUgLyAx
MDAuMCAqIDI1NS4wKTsKIH0KIAorc3RydWN0IFJHQk5vcm1hbGl6aW5nVHJhbnNmb3JtZXIgOiBS
YXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlPFJHQk5vcm1hbGl6aW5nVHJhbnNmb3JtZXIsIHN0ZDo6
b3B0aW9uYWw8dWludDhfdD4sIE51bWJlck9yUGVyY2VudFJhdz4geworICAgIHVzaW5nIFJhd1Zh
cmlhbnRUcmFuc2Zvcm1lckJhc2U8UkdCTm9ybWFsaXppbmdUcmFuc2Zvcm1lciwgc3RkOjpvcHRp
b25hbDx1aW50OF90PiwgTnVtYmVyT3JQZXJjZW50UmF3Pjo6dHJhbnNmb3JtOworCisgICAgc3Rh
dGljIHVpbnQ4X3QgdHJhbnNmb3JtKE51bWJlclJhdyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBub3JtYWxpemVSR0JDb21wb25lbnROdW1iZXIodmFsdWUpOworICAgIH0KKworICAgIHN0
YXRpYyB1aW50OF90IHRyYW5zZm9ybShQZXJjZW50UmF3IHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UodmFsdWUpOworICAgIH0KK307
CisKIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+IGNvbnN1bWVSZWxhdGl2ZVJHQkNvbXBv
bmVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSkKIHsKLSAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd09yUGVyY2VudFJh
d0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6
OkFsbCwgbm9ybWFsaXplUkdCQ29tcG9uZW50TnVtYmVyLCBub3JtYWxpemVSR0JDb21wb25lbnRQ
ZXJjZW50YWdlKTsKKyAgICByZXR1cm4gY29uc3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5n
U3ltYm9sVGFibGVJZGVudDxSR0JOb3JtYWxpemluZ1RyYW5zZm9ybWVyPihyYW5nZSwgc3ltYm9s
VGFibGUsIFZhbHVlUmFuZ2U6OkFsbCk7CiB9CiAKIGVudW0gY2xhc3MgUkdCQ29tcG9uZW50VHlw
ZSB7IE51bWJlciwgUGVyY2VudGFnZSB9OwpAQCAtMTQ4OSw5ICsxNjE5LDkgQEAgc3RhdGljIHVp
bnQ4X3QgY2xhbXBSR0JDb21wb25lbnQoZG91YmxlIHZhbHVlLCBSR0JDb21wCiB7CiAgICAgc3dp
dGNoIChjb21wb25lbnRUeXBlKSB7CiAgICAgY2FzZSBSR0JDb21wb25lbnRUeXBlOjpOdW1iZXI6
Ci0gICAgICAgIHJldHVybiBub3JtYWxpemVSR0JDb21wb25lbnROdW1iZXIodmFsdWUpOworICAg
ICAgICByZXR1cm4gbm9ybWFsaXplUkdCQ29tcG9uZW50TnVtYmVyKHsgdmFsdWUgfSk7CiAgICAg
Y2FzZSBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlOgotICAgICAgICByZXR1cm4gbm9ybWFs
aXplUkdCQ29tcG9uZW50UGVyY2VudGFnZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiBub3JtYWxp
emVSR0JDb21wb25lbnRQZXJjZW50YWdlKHsgdmFsdWUgfSk7CiAgICAgfQogICAgIAogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTUxOSw3ICsxNjQ5LDcgQEAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8ZG91YmxlPiBjb25zdW1lUkdCT3JIU0xPcHRpb25hbEFsCiAgICAgaWYgKCFjb25zdW1l
UkdCT3JIU0xBbHBoYVNlcGFyYXRvcihhcmdzLCBzeW50YXgpKQogICAgICAgICByZXR1cm4gMS4w
OwogCi0gICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXco
YXJncyk7CisgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJPclBlcmNlbnRSYXc8TnVtYmVyT3JQZXJj
ZW50RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXI+KGFyZ3MpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFy
c2VSZWxhdGl2ZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKQEAgLTE1NzMsMTggKzE3MDMsMjIgQEAgc3RhdGlj
IENvbG9yIHBhcnNlTm9uUmVsYXRpdmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRvCiAKICAgICBh
dXRvIGNvbnN1bWVJbml0aWFsQ29tcG9uZW50ID0gW10oYXV0byYgYXJncykgLT4gc3RkOjpvcHRp
b25hbDxJbml0aWFsQ29tcG9uZW50PiB7CiAgICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1
bWVOdW1iZXJSYXcoYXJncykpCi0gICAgICAgICAgICByZXR1cm4geyB7ICpudW1iZXIsIFJHQkNv
bXBvbmVudFR5cGU6Ok51bWJlciB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7IG51bWJlci0+
dmFsdWUsIFJHQkNvbXBvbmVudFR5cGU6Ok51bWJlciB9IH07CiAgICAgICAgIGlmIChhdXRvIHBl
cmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKSkKLSAgICAgICAgICAgIHJldHVybiB7IHsg
KnBlcmNlbnQsIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2UgfSB9OworICAgICAgICAgICAg
cmV0dXJuIHsgeyBwZXJjZW50LT52YWx1ZSwgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZSB9
IH07CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfTsKIAotICAgIGF1dG8gY29u
c3VtZUNvbXBvbmVudCA9IFtdKGF1dG8mIGFyZ3MsIGF1dG8gY29tcG9uZW50VHlwZSkgeworICAg
IGF1dG8gY29uc3VtZUNvbXBvbmVudCA9IFtdKGF1dG8mIGFyZ3MsIGF1dG8gY29tcG9uZW50VHlw
ZSkgLT4gc3RkOjpvcHRpb25hbDxkb3VibGU+IHsKICAgICAgICAgc3dpdGNoIChjb21wb25lbnRU
eXBlKSB7CiAgICAgICAgIGNhc2UgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZToKLSAgICAg
ICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKKyAgICAgICAgICAgIGlmIChh
dXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcGVyY2VudC0+dmFsdWU7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
ICAgICAgICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6Ok51bWJlcjoKLSAgICAgICAgICAgIHJldHVy
biBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOworICAgICAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0g
Y29uc3VtZU51bWJlclJhdyhhcmdzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyLT52
YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9OwpAQCAtMTY2OCw3ICsxODAy
LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRv
a2VuCiAgICAgICAgIHsgQ1NTVmFsdWVBbHBoYSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdF
LCBvcmlnaW5Db2xvckFzSFNMLmFscGhhICogMTAwLjAgfQogICAgIH07CiAKLSAgICBhdXRvIGh1
ZSA9IGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFy
Z3MsIHN5bWJvbFRhYmxlLCBjb250ZXh0Lm1vZGUpOworICAgIGF1dG8gaHVlID0gY29uc3VtZUFu
Z2xlT3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQ8QW5nbGVPck51bWJlclJhd1Rv
RGVncmVzc1RyYW5zZm9ybWVyPihhcmdzLCBzeW1ib2xUYWJsZSwgY29udGV4dC5tb2RlKTsKICAg
ICBpZiAoIWh1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTY4NywxMiArMTgyMSwxMiBA
QCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4K
ICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVy
biBjb2xvckJ5Tm9ybWFsaXppbmdIU0xDb21wb25lbnRzKCpodWUsICpzYXR1cmF0aW9uLCAqbGln
aHRuZXNzLCAqYWxwaGEpOworICAgIHJldHVybiBjb2xvckJ5Tm9ybWFsaXppbmdIU0xDb21wb25l
bnRzKCpodWUsIHNhdHVyYXRpb24tPnZhbHVlLCBsaWdodG5lc3MtPnZhbHVlLCAqYWxwaGEpOwog
fQogCiBzdGF0aWMgQ29sb3IgcGFyc2VOb25SZWxhdGl2ZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKLSAg
ICBhdXRvIGh1ZSA9IGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3KGFyZ3MsIGNvbnRleHQubW9k
ZSk7CisgICAgYXV0byBodWUgPSBjb25zdW1lQW5nbGVPck51bWJlclJhdzxBbmdsZU9yTnVtYmVy
UmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI+KGFyZ3MsIGNvbnRleHQubW9kZSk7CiAgICAgaWYgKCFo
dWUpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTE3MTYsNyArMTg1MCw3IEBAIHN0YXRpYyBD
b2xvciBwYXJzZU5vblJlbGF0aXZlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJUbwogICAgIGlmICgh
YXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNvbG9yQnlO
b3JtYWxpemluZ0hTTENvbXBvbmVudHMoKmh1ZSwgKnNhdHVyYXRpb24sICpsaWdodG5lc3MsICph
bHBoYSk7CisgICAgcmV0dXJuIGNvbG9yQnlOb3JtYWxpemluZ0hTTENvbXBvbmVudHMoKmh1ZSwg
c2F0dXJhdGlvbi0+dmFsdWUsIGxpZ2h0bmVzcy0+dmFsdWUsICphbHBoYSk7CiB9CiAKIGVudW0g
Y2xhc3MgSFNMRnVuY3Rpb25Nb2RlIHsgSFNMLCBIU0xBIH07CkBAIC0xNzU3LDcgKzE4OTEsNyBA
QCBzdGF0aWMgQ29sb3IgcGFyc2VIV0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGEK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IG5vcm1hbGl6
ZUh1ZSgqaHVlKTsKLSAgICBhdXRvIFtub3JtYWxpemVkV2hpdG5lc3MsIG5vcm1hbGl6ZWRCbGFj
a25lc3NdID0gbm9ybWFsaXplV2hpdGVuZXNzQmxhY2tuZXNzKCp3aGl0ZW5lc3MsICpibGFja25l
c3MpOworICAgIGF1dG8gW25vcm1hbGl6ZWRXaGl0bmVzcywgbm9ybWFsaXplZEJsYWNrbmVzc10g
PSBub3JtYWxpemVXaGl0ZW5lc3NCbGFja25lc3Mod2hpdGVuZXNzLT52YWx1ZSwgYmxhY2tuZXNz
LT52YWx1ZSk7CiAKICAgICAvLyBOT1RFOiBUaGUgZXhwbGljaXQgY29udmVyc2lvbiB0byBTUkdC
QTx1aW50OF90PiBpcyBpbnRlbnRpb25hbCBmb3IgcGVyZm9ybWFuY2UgKG5vIGV4dHJhIGFsbG9j
YXRpb24gZm9yCiAgICAgLy8gdGhlIGV4dGVuZGVkIGNvbG9yKSBhbmQgY29tcGF0YWJpbGl0eSwg
Zm9yY2luZyBzZXJpYWxpYXphdGlvbiB0byB1c2UgdGhlIHJnYigpL3JnYmEoKSBmb3JtLgpAQCAt
MTc4Miw3ICsxOTE2LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVIV0JQYXJhbWV0ZXJz
KENTU1BhcnNlclRva2VuCiAgICAgICAgIHsgQ1NTVmFsdWVBbHBoYSwgQ1NTVW5pdFR5cGU6OkNT
U19QRVJDRU5UQUdFLCBvcmlnaW5Db2xvckFzSFdCLmFscGhhICogMTAwLjAgfQogICAgIH07CiAK
LSAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZzeW1ib2xUYWJsZSwgJmNvbnRleHRdKGF1dG8mIGFy
Z3MpIHsgcmV0dXJuIGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJs
ZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlLCBjb250ZXh0Lm1vZGUpOyB9OworICAgIGF1dG8gaHVl
Q29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlLCAmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4g
Y29uc3VtZUFuZ2xlT3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQ8QW5nbGVPck51
bWJlclJhd1RvRGVncmVzc1RyYW5zZm9ybWVyPihhcmdzLCBzeW1ib2xUYWJsZSwgY29udGV4dC5t
b2RlKTsgfTsKICAgICBhdXRvIHdoaXRlbmVzc0FuZEJsYWNrbmVzc0NvbnN1bWVyID0gWyZzeW1i
b2xUYWJsZV0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJv
bFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOyB9OwogICAgIGF1dG8gYWxwaGFDb25zdW1l
ciA9IFsmc3ltYm9sVGFibGVdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVPcHRpb25hbEFs
cGhhQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsgfTsKIApAQCAt
MTc5MSw3ICsxOTI1LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVIV0JQYXJhbWV0ZXJz
KENTU1BhcnNlclRva2VuCiAKIHN0YXRpYyBDb2xvciBwYXJzZU5vblJlbGF0aXZlSFdCUGFyYW1l
dGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBj
b250ZXh0KQogewotICAgIGF1dG8gaHVlQ29uc3VtZXIgPSBbJmNvbnRleHRdKGF1dG8mIGFyZ3Mp
IHsgcmV0dXJuIGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3KGFyZ3MsIGNvbnRleHQubW9kZSk7
IH07CisgICAgYXV0byBodWVDb25zdW1lciA9IFsmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1
cm4gY29uc3VtZUFuZ2xlT3JOdW1iZXJSYXc8QW5nbGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5z
Zm9ybWVyPihhcmdzLCBjb250ZXh0Lm1vZGUpOyB9OwogICAgIGF1dG8gd2hpdGVuZXNzQW5kQmxh
Y2tuZXNzQ29uc3VtZXIgPSBbXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lUGVyY2VudFJh
dyhhcmdzKTsgfTsKICAgICBhdXRvIGFscGhhQ29uc3VtZXIgPSBbXShhdXRvJiBhcmdzKSB7IHJl
dHVybiBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsgfTsKIApAQCAtMTgzNCw5ICsxOTY4LDkg
QEAgc3RhdGljIENvbG9yIHBhcnNlTGFiUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBh
CiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRv
IG5vcm1hbGl6ZWRMaWdodG5lc3MgPSBzdGQ6Om1heCgwLjAsICpsaWdodG5lc3MpOworICAgIGF1
dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9IHN0ZDo6bWF4KDAuMCwgbGlnaHRuZXNzLT52YWx1ZSk7
CiAKLSAgICByZXR1cm4gQ29sb3JUeXBlIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRM
aWdodG5lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFWYWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0
PigqYlZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfTsKKyAgICByZXR1cm4gQ29s
b3JUeXBlIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRMaWdodG5lc3MpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oYVZhbHVlLT52YWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PihiVmFsdWUtPnZh
bHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPgpAQCAtMTkxMiw4ICsyMDQ2LDggQEAgc3RhdGljIENvbG9yIHBhcnNlTENI
UGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG5vcm1hbGl6ZWRMaWdodG5lc3MgPSBz
dGQ6Om1heCgwLjAsICpsaWdodG5lc3MpOwotICAgIGF1dG8gbm9ybWFsaXplZENocm9tYSA9IHN0
ZDo6bWF4KDAuMCwgKmNocm9tYSk7CisgICAgYXV0byBub3JtYWxpemVkTGlnaHRuZXNzID0gc3Rk
OjptYXgoMC4wLCBsaWdodG5lc3MtPnZhbHVlKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRDaHJvbWEg
PSBzdGQ6Om1heCgwLjAsIGNocm9tYS0+dmFsdWUpOwogICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9
IG5vcm1hbGl6ZUh1ZSgqaHVlKTsKIAogICAgIHJldHVybiBDb2xvclR5cGUgeyBzdGF0aWNfY2Fz
dDxmbG9hdD4obm9ybWFsaXplZExpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxp
emVkQ2hyb21hKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRIdWUpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oKmFscGhhKSB9OwpAQCAtMTk0MCw3ICsyMDc0LDcgQEAgc3RhdGljIENvbG9yIHBh
cnNlUmVsYXRpdmVMQ0hQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAKICAgICBhdXRvIGxpZ2h0
bmVzc0NvbnN1bWVyID0gWyZzeW1ib2xUYWJsZV0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3Vt
ZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOyB9Owog
ICAgIGF1dG8gY2hyb21hQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJl
dHVybiBjb25zdW1lTnVtYmVyQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRh
YmxlKTsgfTsKLSAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZzeW1ib2xUYWJsZSwgJmNvbnRleHRd
KGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdT
eW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlLCBjb250ZXh0Lm1vZGUpOyB9OworICAg
IGF1dG8gaHVlQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlLCAmY29udGV4dF0oYXV0byYgYXJncykg
eyByZXR1cm4gY29uc3VtZUFuZ2xlT3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQ8
QW5nbGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5zZm9ybWVyPihhcmdzLCBzeW1ib2xUYWJsZSwg
Y29udGV4dC5tb2RlKTsgfTsKICAgICBhdXRvIGFscGhhQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxl
XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9s
VGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7IH07CiAKICAgICByZXR1cm4gcGFyc2VMQ0hQ
YXJhbWV0ZXJzPENvbG9yVHlwZT4oYXJncywgV1RGTW92ZShsaWdodG5lc3NDb25zdW1lciksIFdU
Rk1vdmUoY2hyb21hQ29uc3VtZXIpLCBXVEZNb3ZlKGh1ZUNvbnN1bWVyKSwgV1RGTW92ZShhbHBo
YUNvbnN1bWVyKSk7CkBAIC0xOTUxLDcgKzIwODUsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VOb25S
ZWxhdGl2ZUxDSFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG8KIHsKICAgICBhdXRvIGxpZ2h0bmVzc0Nv
bnN1bWVyID0gW10oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7
IH07CiAgICAgYXV0byBjaHJvbWFDb25zdW1lciA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNv
bnN1bWVOdW1iZXJSYXcoYXJncyk7IH07Ci0gICAgYXV0byBodWVDb25zdW1lciA9IFsmY29udGV4
dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoYXJncywg
Y29udGV4dC5tb2RlKTsgfTsKKyAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZjb250ZXh0XShhdXRv
JiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVPck51bWJlclJhdzxBbmdsZU9yTnVtYmVyUmF3
VG9EZWdyZXNzVHJhbnNmb3JtZXI+KGFyZ3MsIGNvbnRleHQubW9kZSk7IH07CiAgICAgYXV0byBh
bHBoYUNvbnN1bWVyID0gW10oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU9wdGlvbmFsQWxw
aGEoYXJncyk7IH07CiAKICAgICByZXR1cm4gcGFyc2VMQ0hQYXJhbWV0ZXJzPENvbG9yVHlwZT4o
YXJncywgV1RGTW92ZShsaWdodG5lc3NDb25zdW1lciksIFdURk1vdmUoY2hyb21hQ29uc3VtZXIp
LCBXVEZNb3ZlKGh1ZUNvbnN1bWVyKSwgV1RGTW92ZShhbHBoYUNvbnN1bWVyKSk7CkBAIC0yMDE2
LDcgKzIxNTAsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBDb2xvciBw
YXJzZVJlbGF0aXYKICAgICAgICAgeyBDU1NWYWx1ZUFscGhhLCBDU1NVbml0VHlwZTo6Q1NTX1BF
UkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNDb2xvclR5cGUuYWxwaGEgKiAxMDAuMCB9CiAgICAgfTsK
IAotICAgIGF1dG8gY29uc3VtZVJHQiA9IFsmc3ltYm9sVGFibGVdKGF1dG8mIGFyZ3MpIHsgcmV0
dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJv
bFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCk7IH07CisgICAg
YXV0byBjb25zdW1lUkdCID0gWyZzeW1ib2xUYWJsZV0oYXV0byYgYXJncykgeyByZXR1cm4gY29u
c3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudDxOdW1iZXJPclBl
cmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lcj4oYXJncywgc3ltYm9sVGFibGUsIFZhbHVlUmFu
Z2U6OkFsbCk7IH07CiAgICAgYXV0byBjb25zdW1lQWxwaGEgPSBbJnN5bWJvbFRhYmxlXShhdXRv
JiBhcmdzKSB7IHJldHVybiBjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFibGVJ
ZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7IH07CiAKICAgICByZXR1cm4gcGFyc2VDb2xvckZ1bmN0
aW9uRm9yUkdCVHlwZXM8Q29sb3JUeXBlPihhcmdzLCBXVEZNb3ZlKGNvbnN1bWVSR0IpLCBXVEZN
b3ZlKGNvbnN1bWVBbHBoYSkpOwpAQCAtMjAzMiw3ICsyMTY2LDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29sb3JUeXBlPiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1CiAKICAgICBjb25zdW1lSWRl
bnRSYXcoYXJncyk7CiAKLSAgICBhdXRvIGNvbnN1bWVSR0IgPSBbXShhdXRvJiBhcmdzKSB7IHJl
dHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOyB9Owor
ICAgIGF1dG8gY29uc3VtZVJHQiA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1i
ZXJPclBlcmNlbnRSYXc8TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXI+KGFy
Z3MpOyB9OwogICAgIGF1dG8gY29uc3VtZUFscGhhID0gW10oYXV0byYgYXJncykgeyByZXR1cm4g
Y29uc3VtZU9wdGlvbmFsQWxwaGEoYXJncyk7IH07CiAKICAgICByZXR1cm4gcGFyc2VDb2xvckZ1
bmN0aW9uRm9yUkdCVHlwZXM8Q29sb3JUeXBlPihhcmdzLCBXVEZNb3ZlKGNvbnN1bWVSR0IpLCBX
VEZNb3ZlKGNvbnN1bWVBbHBoYSkpOwpAQCAtMjA0Niw3ICsyMTgwLDcgQEAgc3RhdGljIENvbG9y
IHBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlR5cGVzKENTU1BhcnNlclRvCiAgICAgICAgIGF1dG8g
dmFsdWUgPSB4eXpDb25zdW1lcihhcmdzKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjaGFubmVsID0gKnZhbHVlOworICAgICAgICBjaGFubmVsID0g
dmFsdWUtPnZhbHVlOwogICAgIH0KIAogICAgIGF1dG8gYWxwaGEgPSBhbHBoYUNvbnN1bWVyKGFy
Z3MpOwpAQCAtMjI0NCwxMyArMjM3OCwxMyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckNvbnRy
YXN0RnVuY3Rpb25QYXJhbWV0ZXJzKENTU1AKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlm
IChjb25zdW1lZFRvKSB7Ci0gICAgICAgIGF1dG8gdGFyZ2V0Q29udHJhc3QgPSBbJl0gKCkgLT4g
c3RkOjpvcHRpb25hbDxkb3VibGU+IHsKKyAgICAgICAgYXV0byB0YXJnZXRDb250cmFzdCA9IFsm
XSAoKSAtPiBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gewogICAgICAgICAgICAgaWYgKGFyZ3Mu
cGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljIGNv
bnN0ZXhwciBzdGQ6OnBhaXI8Q1NTVmFsdWVJRCwgZG91YmxlPiB0YXJnZXRDb250cmFzdE1hcHBp
bmdzW10gewotICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUEsIDQuNSB9LAotICAgICAg
ICAgICAgICAgICAgICB7IENTU1ZhbHVlQUFMYXJnZSwgMy4wIH0sCi0gICAgICAgICAgICAgICAg
ICAgIHsgQ1NTVmFsdWVBQUEsIDcuMCB9LAotICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVl
QUFBTGFyZ2UsIDQuNSB9LAorICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpw
YWlyPENTU1ZhbHVlSUQsIE51bWJlclJhdz4gdGFyZ2V0Q29udHJhc3RNYXBwaW5nc1tdIHsKKyAg
ICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFBLCBOdW1iZXJSYXcgeyA0LjUgfSB9LAorICAg
ICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUFMYXJnZSwgTnVtYmVyUmF3IHsgMy4wIH0gfSwK
KyAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFBQSwgTnVtYmVyUmF3IHsgNy4wIH0gfSwK
KyAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFBQUxhcmdlLCBOdW1iZXJSYXcgeyA0LjUg
fSB9LAogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBTb3J0ZWRBcnJheU1hcCB0YXJnZXRDb250cmFzdE1hcCB7IHRhcmdldENvbnRyYXN0TWFwcGlu
Z3MgfTsKICAgICAgICAgICAgICAgICBhdXRvIHZhbHVlID0gdGFyZ2V0Q29udHJhc3RNYXAudHJ5
R2V0KGFyZ3MuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpKTsKQEAgLTIyNjMsNyAr
MjM5Nyw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yQ29udHJhc3RGdW5jdGlvblBhcmFtZXRl
cnMoQ1NTUAogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgCiAgICAgICAgIC8vIFdo
ZW4gYSB0YXJnZXQgY29uc3Rhc3QgaXMgc3BlY2lmaWVkLCB3ZSBzZWxlY3QgInRoZSBmaXJzdCBj
b2xvciBjb2xvciB0byBtZWV0IG9yIGV4Y2VlZCB0aGUgdGFyZ2V0IGNvbnRyYXN0LiIKLSAgICAg
ICAgcmV0dXJuIHNlbGVjdEZpcnN0Q29sb3JUaGF0TWVldHNPckV4Y2VlZHNUYXJnZXRDb250cmFz
dChvcmlnaW5CYWNrZ3JvdW5kQ29sb3IsIFdURk1vdmUoY29sb3JzVG9Db21wYXJlQWdhaW5zdCks
ICp0YXJnZXRDb250cmFzdCk7CisgICAgICAgIHJldHVybiBzZWxlY3RGaXJzdENvbG9yVGhhdE1l
ZXRzT3JFeGNlZWRzVGFyZ2V0Q29udHJhc3Qob3JpZ2luQmFja2dyb3VuZENvbG9yLCBXVEZNb3Zl
KGNvbG9yc1RvQ29tcGFyZUFnYWluc3QpLCB0YXJnZXRDb250cmFzdC0+dmFsdWUpOwogICAgIH0K
IAogICAgIC8vIFdoZW4gYSB0YXJnZXQgY29uc3Rhc3QgaXMgTk9UIHNwZWNpZmllZCwgd2Ugc2Vs
ZWN0ICJ0aGUgZmlyc3QgY29sb3Igd2l0aCB0aGUgaGlnaGVzdCBjb250cmFzdCB0byB0aGUgc2lu
Z2xlIGNvbG9yLiIKQEAgLTIzNjYsOSArMjUwMCw5IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENv
bG9yTWl4Q29tcG9uZW50PiBjb25zdW1lQ29sb3JNaQogICAgIENvbG9yTWl4Q29tcG9uZW50IHJl
c3VsdDsKIAogICAgIGlmIChhdXRvIHBlcmNlbnRhZ2UgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdz
KSkgewotICAgICAgICBpZiAoKnBlcmNlbnRhZ2UgPCAwLjAgfHwgKnBlcmNlbnRhZ2UgPiAxMDAu
MCkKKyAgICAgICAgaWYgKHBlcmNlbnRhZ2UtPnZhbHVlIDwgMC4wIHx8IHBlcmNlbnRhZ2UtPnZh
bHVlID4gMTAwLjApCiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXN1bHQucGVy
Y2VudGFnZSA9IHBlcmNlbnRhZ2U7CisgICAgICAgIHJlc3VsdC5wZXJjZW50YWdlID0gcGVyY2Vu
dGFnZS0+dmFsdWU7CiAgICAgfQogCiAgICAgcmVzdWx0LmNvbG9yID0gY29uc3VtZU9yaWdpbkNv
bG9yKGFyZ3MsIGNvbnRleHQpOwpAQCAtMjM3Nyw5ICsyNTExLDkgQEAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8Q29sb3JNaXhDb21wb25lbnQ+IGNvbnN1bWVDb2xvck1pCiAKICAgICBpZiAoIXJlc3Vs
dC5wZXJjZW50YWdlKSB7CiAgICAgICAgIGlmIChhdXRvIHBlcmNlbnRhZ2UgPSBjb25zdW1lUGVy
Y2VudFJhdyhhcmdzKSkgewotICAgICAgICAgICAgaWYgKCpwZXJjZW50YWdlIDwgMC4wIHx8ICpw
ZXJjZW50YWdlID4gMTAwLjApCisgICAgICAgICAgICBpZiAocGVyY2VudGFnZS0+dmFsdWUgPCAw
LjAgfHwgcGVyY2VudGFnZS0+dmFsdWUgPiAxMDAuMCkKICAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OwotICAgICAgICAgICAgcmVzdWx0LnBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlOworICAgICAg
ICAgICAgcmVzdWx0LnBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlLT52YWx1ZTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMjY0NiwxMSArMjc4MCwxMSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVDb2xvcihDU1NQYXJzZXJUb2tlblIKICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVWYWx1ZShjb2xvcik7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNz
LCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSA9IGZhbHNlKQorc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5p
dGxlc3MsIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kg
PSBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3k6OkZvcmJpZCkKIHsKICAgICBpZiAocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBJZGVudFRva2VuKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50PENT
U1ZhbHVlTGVmdCwgQ1NTVmFsdWVUb3AsIENTU1ZhbHVlQm90dG9tLCBDU1NWYWx1ZVJpZ2h0LCBD
U1NWYWx1ZUNlbnRlcj4ocmFuZ2UpOwotICAgIHJldHVybiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50
KHJhbmdlLCBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpBbGwsIHVuaXRsZXNzLCBhbGxvd3NOZWdh
dGl2ZVBlcmNlbnRhZ2UpOworICAgIHJldHVybiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdl
LCBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpBbGwsIHVuaXRsZXNzLCBuZWdhdGl2ZVBlcmNlbnRh
Z2VQb2xpY3kpOwogfQogCiBzdGF0aWMgYm9vbCBpc0hvcml6b250YWxQb3NpdGlvbktleXdvcmRP
bmx5KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKQEAgLTI3OTksMjMgKzI5MzMsMjEg
QEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gcG9zaXRpb25Gcm9t
CiAKIC8vIEZJWE1FOiBUaGlzIG1heSBjb25zdW1lIGZyb20gdGhlIHJhbmdlIHVwb24gZmFpbHVy
ZS4gVGhlIGJhY2tncm91bmQKIC8vIHNob3J0aGFuZCB3b3JrcyBhcm91bmQgaXQsIGJ1dCB3ZSBz
aG91bGQganVzdCBmaXggaXQgaGVyZS4KLXN0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRl
cz4gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgUG9zaXRp
b25TeW50YXggcG9zaXRpb25TeW50YXgsIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSBwb2xpY3kp
CitzdGQ6Om9wdGlvbmFsPFBvc2l0aW9uQ29vcmRpbmF0ZXM+IGNvbnN1bWVQb3NpdGlvbkNvb3Jk
aW5hdGVzKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFBvc2l0aW9uU3ludGF4IHBvc2l0aW9uU3ludGF4
LCBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KQogewot
ICAgIGJvb2wgYWxsb3dzTmVnYXRpdmUgPSBwb2xpY3kgPT0gTmVnYXRpdmVQZXJjZW50YWdlUG9s
aWN5OjpBbGxvdzsKLQotICAgIGF1dG8gdmFsdWUxID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50
KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmUpOworICAgIGF1dG8g
dmFsdWUxID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0
bGVzcywgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KTsKICAgICBpZiAoIXZhbHVlMSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGF1dG8gdmFsdWUyID0gY29uc3VtZVBvc2l0
aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmUp
OworICAgIGF1dG8gdmFsdWUyID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KTsKICAgICBpZiAoIXZh
bHVlMikKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRnJvbU9uZVZhbHVlKCp2YWx1ZTEpOwogICAg
IAotICAgIGF1dG8gdmFsdWUzID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmUpOworICAgIGF1dG8gdmFsdWUzID0gY29u
c3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgbmVnYXRp
dmVQZXJjZW50YWdlUG9saWN5KTsKICAgICBpZiAoIXZhbHVlMykKICAgICAgICAgcmV0dXJuIHBv
c2l0aW9uRnJvbVR3b1ZhbHVlcygqdmFsdWUxLCAqdmFsdWUyKTsKICAgICAKLSAgICBhdXRvIHZh
bHVlNCA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxl
c3MsIGFsbG93c05lZ2F0aXZlKTsKKyAgICBhdXRvIHZhbHVlNCA9IGNvbnN1bWVQb3NpdGlvbkNv
bXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIG5lZ2F0aXZlUGVyY2VudGFnZVBv
bGljeSk7CiAgICAgCiAgICAgc3RkOjphcnJheTxDU1NQcmltaXRpdmVWYWx1ZSosIDU+IHZhbHVl
cyB7CiAgICAgICAgIHZhbHVlMS5nZXQoKSwKQEAgLTI5MTcsNyArMzA0OSw3IEBAIHN0YXRpYyBi
b29sIGNvbnN1bWVEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFycwogICAgICAgICBw
b3NpdGlvbiA9IChpZCA9PSBDU1NWYWx1ZUZyb20pID8gMCA6IDE7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKGlkID09IENTU1ZhbHVlQ29sb3JTdG9wKTsKLSAgICAgICAgYXV0byB2YWx1
ZSA9IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CisgICAg
ICAgIGF1dG8gdmFsdWUgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3PE51bWJlck9yUGVyY2Vu
dERpdmlkZWRCeTEwMFRyYW5zZm9ybWVyPihhcmdzKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcG9zaXRpb24gPSAqdmFsdWU7CkBAIC0z
NDE0LDcgKzM1NDYsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3Jvc3NGYWRl
KENTU1BhcnNlclRva2UKICAgICBpZiAoIXRvSW1hZ2VWYWx1ZSB8fCAhY29uc3VtZUNvbW1hSW5j
bHVkaW5nV2hpdGVzcGFjZShhcmdzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBh
dXRvIHBlcmNlbnRhZ2UgPSBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3
KGFyZ3MpOworICAgIGF1dG8gcGVyY2VudGFnZSA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnRSYXc8
TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXI+KGFyZ3MpOwogICAgIGlmICgh
cGVyY2VudGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYXV0byBwZXJjZW50YWdl
VmFsdWUgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGNsYW1wVG88ZG91
YmxlPigqcGVyY2VudGFnZSwgMCwgMSksIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKQEAgLTM5
NTIsNyArNDA4NCw3IEBAIHN0ZDo6b3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxpbmVI
ZWlnaHRSYXcoQ1NTUAogICAgIH0KIAogICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1i
ZXJSYXcocmFuZ2UsIFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlKSkKLSAgICAgICAgcmV0dXJuIHsg
Km51bWJlciB9OworICAgICAgICByZXR1cm4geyBudW1iZXItPnZhbHVlIH07CiAKICAgICBpZiAo
YXV0byBsZW5ndGhPclBlcmNlbnQgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KHJhbmdlLCBw
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSkpCiAgICAgICAgIHJldHVybiB7ICps
ZW5ndGhPclBlcmNlbnQgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkocmV2aXNpb24gMjg3ODExKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNiArNjYsMTQgQEAgZW51bSBjbGFzcyBOZWdhdGl2ZVBlcmNlbnRhZ2VQ
b2xpY3kgOiBib29sIHsgRm9yYmlkLCBBCiBlbnVtIGNsYXNzIFVuaXRsZXNzUXVpcmsgeyBBbGxv
dywgRm9yYmlkIH07CiBlbnVtIGNsYXNzIFVuaXRsZXNzWmVyb1F1aXJrIHsgQWxsb3csIEZvcmJp
ZCB9OwogCitzdHJ1Y3QgTnVtYmVyUmF3IHsKKyAgICBkb3VibGUgdmFsdWU7Cit9OworCitzdHJ1
Y3QgUGVyY2VudFJhdyB7CisgICAgZG91YmxlIHZhbHVlOworfTsKKwogc3RydWN0IEFuZ2xlUmF3
IHsKICAgICBDU1NVbml0VHlwZSB0eXBlOwogICAgIGRvdWJsZSB2YWx1ZTsKQEAgLTc2LDEzICs4
NCwxNyBAQCBzdHJ1Y3QgTGVuZ3RoUmF3IHsKICAgICBkb3VibGUgdmFsdWU7CiB9OwogCi11c2lu
ZyBMZW5ndGhPclBlcmNlbnRSYXcgPSBzdGQ6OnZhcmlhbnQ8TGVuZ3RoUmF3LCBkb3VibGU+Owor
dXNpbmcgTGVuZ3RoT3JQZXJjZW50UmF3ID0gc3RkOjp2YXJpYW50PExlbmd0aFJhdywgUGVyY2Vu
dFJhdz47Cit1c2luZyBOdW1iZXJPclBlcmNlbnRSYXcgPSBzdGQ6OnZhcmlhbnQ8TnVtYmVyUmF3
LCBQZXJjZW50UmF3PjsKK3VzaW5nIEFuZ2xlT3JOdW1iZXJSYXcgPSBzdGQ6OnZhcmlhbnQ8QW5n
bGVSYXcsIE51bWJlclJhdz47CiAKLXN0ZDo6b3B0aW9uYWw8aW50PiBjb25zdW1lSW50ZWdlclJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlIG1pbmltdW1WYWx1ZSA9IC1zdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSBtaW5pbXVtVmFsdWUgPSAt
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CitzdGQ6Om9wdGlvbmFsPGludD4g
Y29uc3VtZUludGVnZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7CitzdGQ6Om9w
dGlvbmFsPGludD4gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlclJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyWmVyb0Fu
ZEdyZWF0ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
Y29uc3VtZVBvc2l0aXZlSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2ZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYpOwotc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpOworc3RkOjpvcHRpb25h
bDxOdW1iZXJSYXc+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVl
UmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlck9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdl
JiwgVmFsdWVSYW5nZSk7CiBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHRO
dW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwpAQCAtOTAsMTEgKzEwMiwxMSBAQCBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1AKIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJXb3JrZXJTYWZlKENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsKIHN0ZDo6b3B0aW9uYWw8TGVuZ3Ro
UmF3PiBjb25zdW1lTGVuZ3RoUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2Rl
LCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdl
JiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVp
cms6OkZvcmJpZCk7Ci1zdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpOworc3RkOjpv
cHRpb25hbDxQZXJjZW50UmF3PiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiwgVmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKENTU1BhcnNl
clRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmKTsKIHN0ZDo6b3B0aW9uYWw8
TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5p
dGxlc3NRdWlyazo6Rm9yYmlkKTsKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxl
bmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVS
YW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgYm9vbCBhbGxvd3NO
ZWdhdGl2ZVBlcmNlbnRhZ2UgPSBmYWxzZSk7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUs
IFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIE5lZ2F0
aXZlUGVyY2VudGFnZVBvbGljeSA9IE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeTo6Rm9yYmlkKTsK
IHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJp
ZCwgVW5pdGxlc3NaZXJvUXVpcmsgPSBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBD
U1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0
bGVzc1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2Um
LCBDU1NQYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wmLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NR
dWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3Ji
aWQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldv
cmtlclNhZmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXJXb3JrZXJTYWZlLmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NDAsNyArNTQwLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NGb250RmVhdHVy
ZVZhbHVlPiBjb25zdW1lRm9udEZlYXR1cmVUCiAgICAgaW50IHRhZ1ZhbHVlID0gMTsKICAgICBp
ZiAoIXJhbmdlLmF0RW5kKCkgJiYgcmFuZ2UucGVlaygpLnR5cGUoKSAhPSBDb21tYVRva2VuKSB7
CiAgICAgICAgIC8vIEZlYXR1cmUgdGFnIHZhbHVlcyBjb3VsZCBmb2xsb3c6IDxpbnRlZ2VyPiB8
IG9uIHwgb2ZmCi0gICAgICAgIGlmIChhdXRvIGludGVnZXIgPSBDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVJbnRlZ2VyUmF3KHJhbmdlLCAwKSkKKyAgICAgICAgaWYgKGF1dG8gaW50
ZWdlciA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXJaZXJvQW5kR3Jl
YXRlclJhdyhyYW5nZSkpCiAgICAgICAgICAgICB0YWdWYWx1ZSA9ICppbnRlZ2VyOwogICAgICAg
ICBlbHNlIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZU9uIHx8IHJhbmdlLnBlZWso
KS5pZCgpID09IENTU1ZhbHVlT2ZmKQogICAgICAgICAgICAgdGFnVmFsdWUgPSByYW5nZS5jb25z
dW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkgPT0gQ1NTVmFsdWVPbjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCShyZXZpc2lv
biAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDggKzIwOCw4IEBAIHN0ZDo6b3B0aW9uYWw8Rm9u
dENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbgogICAgICAgICAgICAgLy8gICAg
ICAgIHRoYXQgaXQncyBvZmYtc2NyZWVuIGFuZCB0aGVyZWZvcmUgZG9lc24ndCBzdHJpY3RseSBo
YXZlIGFuIGFzc29jaWF0ZWQgdmlld3BvcnQuCiAgICAgICAgICAgICAvLyAgICAgICAgVGhpcyBu
ZWVkcyBjbGFyaWZpY2F0aW9uIGFuZCBwb3NzaWJseSBmaXhpbmcuCiAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlVW56b29tZWRO
b25DYWxjTGVuZ3RoRG91YmxlKGxlbmd0aC50eXBlLCBsZW5ndGgudmFsdWUsIENTU1Byb3BlcnR5
Rm9udFNpemUsICZmb250Q2FzY2FkZS5mb250TWV0cmljcygpLCAmZm9udENhc2NhZGUuZm9udERl
c2NyaXB0aW9uKCksICZmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSwgaXM8RG9jdW1lbnQ+
KGNvbnRleHQpID8gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLnJlbmRlclZpZXcoKSA6IG51
bGxwdHIpKTsKLSAgICAgICAgfSwgWyZdIChkb3VibGUgcGVyY2VudGFnZSkgewotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigocGFyZW50U2l6ZSAqIHBlcmNlbnRhZ2UpIC8g
MTAwLjApOworICAgICAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
UGVyY2VudFJhdyYgcGVyY2VudGFnZSkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0PigocGFyZW50U2l6ZSAqIHBlcmNlbnRhZ2UudmFsdWUpIC8gMTAwLjApOwogICAgICAg
ICB9KTsKICAgICB9KTsKIAo=
</data>
<flag name="commit-queue"
          id="474633"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448708</attachid>
            <date>2022-01-09 09:34:36 -0800</date>
            <delta_ts>2022-01-09 10:03:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>metaconsumer.diff</filename>
            <type>text/plain</type>
            <size>147892</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNSBAQAorMjAyMi0wMS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQ1NTIHByb3BlcnR5
IHBhcnNpbmcgaGVscGVycyB0byBiZSBhIGJpdCBtb3JlIGNvbXBvc2FibGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDg2OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlZmFjdG9ycyBwcmltaXRpdmUgQ1NT
IHByb3BlcnR5IHBhcnNpbmcgdG8gYmUgYnVpbHQgb24gYSBuZXcgY29tcG9zYWJsZSBzZXQgb2Yg
CisgICAgICAgIGxvd2VyIGxldmVsIHByaW1pdGl2ZXMuCisKKyAgICAgICAgVGhlIGxvd2VzdCBs
ZXZlbCBwcmltaXRpdmUgaXMgbm93IGEgImNvbnN1bWVyIiBzdHJ1Y3QgdGhhdCBvbmx5IGtub3dz
IGhvdyB0byBjb25zdW1lCisgICAgICAgIGEgcGFydGljdWxhciB0eXBlIGZvciBhIHBhcnRpY3Vs
YXIgdG9rZW4gdHlwZS4gRm9yIGV4YW1wbGUsIE51bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVy
Q29uc3VtZXIKKyAgICAgICAgb25seSBrbm93cyBob3cgdG8gY29uc3VtZSBhbmQgcmV0dXJuIGEg
TnVtYmVyUmF3IGlmIHRoZSB0b2tlbiB0eXBlIGlzIGEgTnVtYmVyVG9rZW4uCisKKyAgICAgICAg
Rm9yIHRoZXNlIHRva2VuIHNwZWNpZmljIGNvbnN1bWVycyB0byBiZSB1c2VmdWwsIHRoZXkgbmVl
ZCB0byBiZSBjb21iaW5lZCB0b2dldGhlci4gVG8KKyAgICAgICAgZG8gdGhpcywgYSBoaWdoZXIg
bGV2ZWwgbWV0YS1jb25zdW1lciB0eXBlIHRoYXQgaXMgbm90IHRpZWQgdG8gYSBzcGVjaWZpYyB0
b2tlbiBpcyB1c2VkLgorICAgICAgICBUaGVzZSBhcmUgZGVmaW5lZCBhcyBlbXB0eSBzdHJ1Y3Rz
IHdpdGggJ3VzaW5nJyBzdGF0ZW1lbnRzIHRvIGluZGljYXRlIHdoaWNoIGxvdyBsZXZlbAorICAg
ICAgICBjb25zdW1lcnMgdG8gdXNlIGZvciB3aGljaCB0b2tlbiB0b2tlbiB0eXBlcy4gRm9yIGV4
YW1wbGU6CisgICAgICAgIAorICAgICAgICAgICAgc3RydWN0IE51bWJlclJhd0NvbnN1bWVyIHsK
KyAgICAgICAgICAgICAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz47
CisKKyAgICAgICAgICAgICAgICB1c2luZyBGdW5jdGlvblRva2VuID0gTnVtYmVyUmF3S25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgICAgICAgICAgICAgIHVzaW5nIE51bWJlclRv
a2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgVGhpcyBtZXRhLWNvbnN1bWVyIGRlZmluaXRpb24gZGVmaW5lcyBhIGNv
bnN1bWVyIHRoYXQgdXRpbGl6ZXMgdHdvIGxvd2VyIGxldmVsIHRva2VuIAorICAgICAgICBzcGVj
aWZpYyBjb25zdW1lcnMgZm9yIGZ1bmN0aW9uIGFuZCBudW1iZXIgdG9rZW5zLgorCisgICAgICAg
IFRvIGFjdHVhbGwgZG8gc29tZXRoaW5nIHdpdGggdGhpcyBtZXRhLWNvbnN1bWVyIGRlZmluaXRp
b24sIHRoZSAgY29uc3VtZU1ldGFDb25zdW1lcjw+KC4uLikgCisgICAgICAgIGZ1bmN0aW9uIGlz
IHVzZWQsIHdoaWNoIGludHJvc3BlY3RzIHdoaWNoIHVzaW5nIHN0YXRlbWVudHMgYXJlIGRlZmlu
ZWQsIGFuZCBkaXNwYXRjaGVzIHRvIAorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyB0b2tlbiBz
cGVjaWZpYyBjb25zdW1lciAoc2VlIE1ldGFDb25zdW1lckRpc3BhdGNoZXIgZm9yIGhvdyBpbnRy
b3NwZWN0aW9uIHdvcmtzKS4KKworICAgICAgICBJbiBhZGRpdGlvbiB0byBwcmltaXRpdmUgbWV0
YS1jb25zdW1lciBkZWZpbml0aW9ucywgdGhlcmUgYXJlIGFsc28gZGVmaW5pdGlvbnMgZm9yIG1l
dGEtY29uc3VtZXJzCisgICAgICAgIHRoYXQgY2FuIGNvbnN1bWVyIG1vcmUgY29tcGxleCB0aGlu
Z3Mgd2l0aG91dCBkdXBsaWNhdGUgd29yay4gRm9yIGV4YW1wbGUsIEFuZ2xlT3JQZXJjZW50Q29u
c3VtZXIKKyAgICAgICAgaXMgYSBtZXRhLWNvbnN1bWVyIHRoYXQgY29uc3VtZXMgZWl0aGVyIGFu
IEFuZ2xlIG9yIGEgUGVyY2VudC4gVG8gZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQgYm90aAorICAg
ICAgICBvZiB0aGVzZSB3YW50IHRvIG9wZXJhdGUgb24gZnVuY3Rpb24gdG9rZW5zLCB0aGUgU2Ft
ZVRva2VuTWV0YUNvbnN1bWVyIGFsbG93cyBjb25jYXRlbmF0aW5nIG11bHRpcGxlCisgICAgICAg
IHBlci10b2tlbiBjb25zdW1lcnMgKGluIHRoaXMgY2FzZSwgdHdvIGZ1bmN0aW9uIHRva2VuIGNv
bnN1bWVycykgdG9nZXRoZXIuIAorICAgICAgICAKKyAgICAgICAgTWV0YS1jb25zdW1lciBkZWZp
bml0aW9ucyBjYW4gYWxzbyBkZWZpbmUsIG9yIGFsbG93IGRlZmluaW5nIHZpYSBhIHRlbXBsYXRl
IHBhcmFtZXRlciwgYSBUcmFuc2Zvcm1lciwKKyAgICAgICAgd2hpY2gsIGFzIHRoZSBuYW1lIGlt
cGxpZXMsIHRyYW5zZm9ybSB0aGUgb3V0cHV0LiBGb3IgZXhhbXBsZSwgdGhlIEFuZ2xlT3JOdW1i
ZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lcgorICAgICAgICBjYW4gYmUgdXNlZCB0byBlbnN1cmUg
dGhhdCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIGluIGRlZ3JlZXMsIGFuZCBkb2Vzbid0IGhhdmUg
dG8gYmUgdW53cmFwcGVkIGJ5CisgICAgICAgIHRoZSB1c2VyLgorCisgICAgICAgIFRoZSBnb2Fs
IGlzIGF2b2lkIHRoZSBjb21iaW5hdG9yaWFsIGV4cGxvc2l0aW9uIG9mIGZ1bmN0aW9ucyBicmFu
Y2hpbmcgb24gdG9rZW4gdHlwZSBmb3IKKyAgICAgICAgbW9yZSBhbmQgbW9yZSBzcGVjaWFsaXpl
ZCBwYXJzaW5nIG5lZWRzLiBGb3IgaW5zdGFuY2UsIGFuIHVwY29tcGluZyBjaGFuZ2Ugd2lsbCB3
YW50IHRvIAorICAgICAgICBleHRlbmQgY29uc3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5n
U3ltYm9sVGFibGVJZGVudCBhbmQgYSBmZXcgb3RoZXIgcmVsYXRlZCBjb25zdW1lcnMKKyAgICAg
ICAgdG8gYWxzbyBjb25zdW1lIHRoZSBpZGVudGlmaWVyICdub25lJy4gUmF0aGVyIHRoYW4gZHVw
bGljYXRpbmcgYWxsIHRoZSBsb2dpYywgdGhpcyBhbGxvd3MKKyAgICAgICAgZm9yIGp1c3QgZGVm
aW5pbmcgYSBmZXcgbWV0YS1jb25zdW1lciBkZWZpbml0aW9ucyB1dGlsaXppbmcgYWxtb3N0IGVu
dGlyZWx5IGV4aXN0aW5nIGxvd2VyCisgICAgICAgIGxldmVsIGNvbnN1bWVycy4KKworICAgICAg
ICAqIGNzcy9NZWRpYVF1ZXJ5RXhwcmVzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dW1lRmlyc3RWYWx1ZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lRm9udFZhcmlhdGlvblRhZyk6CisgICAgICAg
IChXZWJDb3JlOjpjb25zdW1lQ3ViaWNCZXppZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Vt
ZVNwcmluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVQZXJzcGVjdGl2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN1bWVDb3VudGVyU3R5bGVQYWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUNvdW50ZXJT
dHlsZUFkZGl0aXZlU3ltYm9scyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQmFzZVBhbGV0
dGVEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVPdmVycmlkZUNvbG9yc0Rl
c2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVG
bGV4KToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6
OkNhbGNQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29tcHV0ZU1pbmltdW1WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkludGVnZXJUeXBlUmF3
S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6SW50ZWdlclR5cGVSYXdLbm93blRva2VuVHlw
ZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6SW50ZWdlclR5cGVLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6
OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpJ
bnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjp2YWxpZGF0ZWROdW1iZXJSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1iZXJSYXdL
bm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1iZXJSYXdLbm93blRva2VuVHlwZU51bWJl
ckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6TnVtYmVyUmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyOjpjb25zdW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TnVtYmVyQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNv
bnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1i
ZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojp2YWxpZGF0ZWRQZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6UGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29u
c3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlBlcmNl
bnRSYXdLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlBlcmNlbnRSYXdLbm93blRva2VuVHlw
ZUlkZW50Q29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aFJhd0tub3duVG9rZW5UeXBlRnVu
Y3Rpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6Okxlbmd0aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNv
bnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5n
dGhSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6
OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpB
bmdsZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkFuZ2xlUmF3S25vd25Ub2tlblR5
cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OkFuZ2xlUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjo6
Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkFu
Z2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29u
c3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1l
bnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OkFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSZXNvbHV0aW9uQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRyYW5zZm9ybUFwcGxpZXI6
OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6YXBw
bHlUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpJZGVudGl0eVRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlOjp0cmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpBbmdsZU9y
TnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Ok51bWJlck9yUGVyY2VudERpdmlkZWRCeTEw
MFRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpNZXRhQ29uc3VtZXJEaXNwYXRjaGVyOjpjb25zdW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU1ldGFDb25zdW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlNhbWVUb2tlbk1l
dGFDb25zdW1lckFwcGxpZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpTYW1lVG9rZW5NZXRhQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBlcmNlbnRSYXdU
cmFuc2Zvcm1lcjo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6QW5nbGVPck51bWJlclJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjo6
Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Ok51
bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjo6Y29uc3VtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVJbnRlZ2VyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVJbnRlZ2VyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyUmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXJa
ZXJvQW5kR3JlYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVQb3NpdGl2ZUludGVnZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlclJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJBbGxv
d2luZ1N5bWJvbFRhYmxlSWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJ
ZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVXb3JrZXJTYWZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
UmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVBbmdsZU9yUGVyY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoT3JQZXJjZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlT3JO
dW1iZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lQW5nbGVPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJPclBlcmNl
bnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlck9yUGVyY2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVG
b250V2VpZ2h0TnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZU9wdGlvbmFsQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFi
bGVJZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5v
cm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSR0JOb3JtYWxpemluZ1RyYW5z
Zm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lUmVsYXRpdmVSR0JDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVSR0JPckhTTE9wdGlvbmFs
QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZU5vblJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VOb25SZWxhdGl2ZUhTTFBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTm9uUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VMYWJQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VM
Q0hQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6cGFyc2VSZWxhdGl2ZUxDSFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZU5vblJlbGF0aXZlTENIUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xv
ckZ1bmN0aW9uRm9yUkdCVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VD
b2xvckNvbnRyYXN0RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yTWl4Q29tcG9uZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aW9uQ29tcG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZVBvc2l0aW9uQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNyb3NzRmFkZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMaW5lSGVp
Z2h0UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2Fs
Y1BhcnNlcjo6Y29uc3VtZUludGVnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFyc2VyOjpjb25zdW1lSW50ZWdlclR5cGVSYXcp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpD
YWxjUGFyc2VyOjpjb25zdW1lTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZU51bWJlclJhdyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQ
YXJzZXI6OmNvbnN1bWVQZXJjZW50UmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZUFuZ2xlUmF3KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1Bh
cnNlcjo6Y29uc3VtZUxlbmd0aFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVG
dW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVt
YmVyUmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlckNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudFJh
d1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tl
blR5cGVQZXJjZW50YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlUGVyY2VudGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3Ro
UmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aENT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5n
bGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRv
a2VuVHlwZURpbWVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVEaW1lbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUmVzb2x1dGlvbkNTU1ByaW1pdGl2
ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJS
YXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQW5nbGVSYXdPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVOdW1iZXJSYXdPclBlcmNlbnRSYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5
MTAwUmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZU51bWJlclJhd09yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVu
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRh
YmxlSWRlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtl
clNhZmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzV29y
a2VyU2FmZTo6Y29uc3VtZUZvbnRGZWF0dXJlVGFnKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJl
c29sdmVGb3JGb250UmF3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlRm9y
Rm9udFJhdyk6CisKIDIwMjItMDEtMDggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgRml4IHNvbWUgQ1NTIGZpbHRlciBpbnRlcnBvbGF0aW9uIGlzc3Vl
cwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHByZXNzaW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cHJlc3Npb24uY3BwCShy
ZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cHJlc3Np
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIGlzRmVhdHVyZVZhbGlkV2l0aG91dFZhbHVlKGNvbnN0IEF0CiAKIGlubGluZSBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGaXJzdFZhbHVlKGNvbnN0IFN0cmluZyYgbWVkaWFG
ZWF0dXJlLCBDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoYXV0byB2YWx1
ZSA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXIocmFuZ2UsIDApKQor
ICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50
ZWdlclplcm9BbmRHcmVhdGVyKHJhbmdlKSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCiAgICAg
aWYgKCFmZWF0dXJlRXhwZWN0aW5nUG9zaXRpdmVJbnRlZ2VyKG1lZGlhRmVhdHVyZSkgJiYgIWlz
QXNwZWN0UmF0aW9GZWF0dXJlKG1lZGlhRmVhdHVyZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyODc4MTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTYyLDcgKzU2Miw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVGb250VmFyaWF0aW9uVGFnKENTU1BhcgogICAgIGlmICghdGFnVmFsdWUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIAotICAgIHJldHVybiBDU1NGb250VmFyaWF0aW9uVmFsdWU6
OmNyZWF0ZSh0YWcsICp0YWdWYWx1ZSk7CisgICAgcmV0dXJuIENTU0ZvbnRWYXJpYXRpb25WYWx1
ZTo6Y3JlYXRlKHRhZywgdGFnVmFsdWUtPnZhbHVlKTsKIH0KICAgICAKIHN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCkBAIC0xNDU3LDcgKzE0NTcsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFy
Z3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2VDb3B5KTsKIAogICAgIGF1dG8geDEgPSBjb25zdW1l
TnVtYmVyUmF3KGFyZ3MpOwotICAgIGlmICgheDEgfHwgKngxIDwgMCB8fCAqeDEgPiAxKQorICAg
IGlmICgheDEgfHwgeDEtPnZhbHVlIDwgMCB8fCB4MS0+dmFsdWUgPiAxKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAoIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3Bh
Y2UoYXJncykpCkBAIC0xNDcxLDcgKzE0NzEsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBhdXRvIHgyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKLSAgICBpZiAoIXgyIHx8ICp4
MiA8IDAgfHwgKngyID4gMSkKKyAgICBpZiAoIXgyIHx8IHgyLT52YWx1ZSA8IDAgfHwgeDItPnZh
bHVlID4gMSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWNvbnN1bWVDb21t
YUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCkBAIC0xNDg1LDcgKzE0ODUsNyBAQCBzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICByYW5nZSA9IHJhbmdlQ29weTsKLSAgICByZXR1cm4gQ1NT
Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUoKngxLCAqeTEsICp4MiwgKnky
KTsKKyAgICByZXR1cm4gQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUo
eDEtPnZhbHVlLCB5MS0+dmFsdWUsIHgyLT52YWx1ZSwgeTItPnZhbHVlKTsKIH0KIAogc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNwcmluZ0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQpAQCAtMTQ5NiwxNyArMTQ5NiwxNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lU3ByaW5nRnVuY3Rpb24oQ1NTUGFyc2UKIAogICAgIC8vIE1hc3MgbXVzdCBiZSBn
cmVhdGVyIHRoYW4gMC4KICAgICBhdXRvIG1hc3MgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOwot
ICAgIGlmICghbWFzcyB8fCAqbWFzcyA8PSAwKQorICAgIGlmICghbWFzcyB8fCBtYXNzLT52YWx1
ZSA8PSAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBTdGlmZm5lc3Mg
bXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KICAgICBhdXRvIHN0aWZmbmVzcyA9IGNvbnN1bWVOdW1i
ZXJSYXcoYXJncyk7Ci0gICAgaWYgKCFzdGlmZm5lc3MgfHwgKnN0aWZmbmVzcyA8PSAwKQorICAg
IGlmICghc3RpZmZuZXNzIHx8IHN0aWZmbmVzcy0+dmFsdWUgPD0gMCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgCiAgICAgLy8gRGFtcGluZyBjb2VmZmljaWVudCBtdXN0IGJlIGdyZWF0
ZXIgdGhhbiBvciBlcXVhbCB0byAwLgogICAgIGF1dG8gZGFtcGluZyA9IGNvbnN1bWVOdW1iZXJS
YXcoYXJncyk7Ci0gICAgaWYgKCFkYW1waW5nIHx8ICpkYW1waW5nIDwgMCkKKyAgICBpZiAoIWRh
bXBpbmcgfHwgZGFtcGluZy0+dmFsdWUgPCAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAKICAgICAvLyBJbml0aWFsIHZlbG9jaXR5IG1heSBoYXZlIGFueSB2YWx1ZS4KQEAgLTE1MTks
NyArMTUxOSw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVTcHJpbmdGdW5jdGlv
bihDU1NQYXJzZQogCiAgICAgcmFuZ2UgPSByYW5nZUNvcHk7CiAKLSAgICByZXR1cm4gQ1NTU3By
aW5nVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKCptYXNzLCAqc3RpZmZuZXNzLCAqZGFtcGlu
ZywgKmluaXRpYWxWZWxvY2l0eSk7CisgICAgcmV0dXJuIENTU1NwcmluZ1RpbWluZ0Z1bmN0aW9u
VmFsdWU6OmNyZWF0ZShtYXNzLT52YWx1ZSwgc3RpZmZuZXNzLT52YWx1ZSwgZGFtcGluZy0+dmFs
dWUsIGluaXRpYWxWZWxvY2l0eS0+dmFsdWUpOwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCkBAIC0xODczLDcgKzE4NzMsNyBA
QCBzdGF0aWMgYm9vbCBjb25zdW1lUGVyc3BlY3RpdmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXIK
ICAgICB9CiAKICAgICBpZiAoYXV0byBwZXJzcGVjdGl2ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJn
cywgVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpKSB7Ci0gICAgICAgIHRyYW5zZm9ybVZhbHVlLT5h
cHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgqcGVyc3BlY3RpdmUsIENTU1VuaXRUeXBl
OjpDU1NfUFgpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHBlcnNwZWN0aXZlLT52YWx1ZSwgQ1NTVW5pdFR5cGU6OkNTU19QWCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIzMzYsNyArMjMzNiw3IEBAIHN0YXRp
YyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDdXJzb3IoQ1NTUGFyc2VyVG9rZW5SYQogICAgICAg
ICAgICAgaWYgKCF5KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjbGFtcCBvciByb3VuZCBpbnN0ZWFkIG9mIGp1c3QgY2Fz
dGluZyBmcm9tIGRvdWJsZSB0byBpbnQ/Ci0gICAgICAgICAgICBob3RTcG90ID0gSW50UG9pbnQg
eyBzdGF0aWNfY2FzdDxpbnQ+KCp4KSwgc3RhdGljX2Nhc3Q8aW50PigqeSkgfTsKKyAgICAgICAg
ICAgIGhvdFNwb3QgPSBJbnRQb2ludCB7IHN0YXRpY19jYXN0PGludD4oeC0+dmFsdWUpLCBzdGF0
aWNfY2FzdDxpbnQ+KHktPnZhbHVlKSB9OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFsaXN0
KQpAQCAtMjQ1OCw5ICsyNDU4LDkgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZVBlcnNwZWN0aXZlKENTCiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHF1aXJrIG9u
bHkgYXBwbHkgdG8gdGhlIHdlYmtpdCBwcmVmaXhlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eS4K
ICAgICBhdXRvIHBlcnNwZWN0aXZlID0gY29uc3VtZU51bWJlclJhdyhyYW5nZSk7Ci0gICAgaWYg
KCFwZXJzcGVjdGl2ZSB8fCAqcGVyc3BlY3RpdmUgPCAwKQorICAgIGlmICghcGVyc3BlY3RpdmUg
fHwgcGVyc3BlY3RpdmUtPnZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoKnBlcnNwZWN0aXZlLCBDU1NVbml0VHlw
ZTo6Q1NTX1BYKTsKKyAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwZXJzcGVj
dGl2ZS0+dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogfQogCiBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gY29uc3VtZVNjcm9sbFNuYXBBbGlnbihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKQEAgLTQ1MTgsNyArNDUxOCw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUHJvcGVydHlQ
YXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJFbmRF
bmRSYWRpdXM6CiAgICAgICAgIHJldHVybiBjb25zdW1lQm9yZGVyUmFkaXVzQ29ybmVyKG1fcmFu
Z2UsIG1fY29udGV4dC5tb2RlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RmxleEdy
b3VwOgotICAgICAgICByZXR1cm4gY29uc3VtZUludGVnZXIobV9yYW5nZSwgMCk7CisgICAgICAg
IHJldHVybiBjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyKG1fcmFuZ2UpOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlPcmRlcjoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKG1fcmFuZ2Up
OwogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lUG9zaXRpb246CkBAIC00ODEyLDcg
KzQ4MTIsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ291bnRlclN0eWxlUGFk
KENTU1BhcnMKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN5bWJvbDsKICAgICB3aGlsZSAoIWludGVn
ZXIgfHwgIXN5bWJvbCkgewogICAgICAgICBpZiAoIWludGVnZXIpIHsKLSAgICAgICAgICAgIGlu
dGVnZXIgPSBjb25zdW1lSW50ZWdlcihyYW5nZSwgMCk7CisgICAgICAgICAgICBpbnRlZ2VyID0g
Y29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihyYW5nZSk7CiAgICAgICAgICAgICBpZiAoaW50
ZWdlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNDg1MiwxMiAr
NDg1MiwxMiBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ291bnRlclN0eWxlQWRk
aXRpdmVTeW0KICAgICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBh
cmF0ZWQoKTsKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gbGFzdFdlaWdodDsKICAgICBkbyB7Ci0g
ICAgICAgIGF1dG8gaW50ZWdlciA9IGNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAwKTsKKyAgICAgICAg
YXV0byBpbnRlZ2VyID0gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihyYW5nZSk7CiAgICAg
ICAgIGF1dG8gc3ltYm9sID0gY29uc3VtZUNvdW50ZXJTdHlsZVN5bWJvbChyYW5nZSwgY29udGV4
dCk7CiAgICAgICAgIGlmICghaW50ZWdlcikgewogICAgICAgICAgICAgaWYgKCFzeW1ib2wpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBpbnRlZ2VyID0gY29u
c3VtZUludGVnZXIocmFuZ2UsIDApOworICAgICAgICAgICAgaW50ZWdlciA9IGNvbnN1bWVJbnRl
Z2VyWmVyb0FuZEdyZWF0ZXIocmFuZ2UpOwogICAgICAgICAgICAgaWYgKCFpbnRlZ2VyKQogICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC01MDAyLDE0ICs1MDAy
LDE0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVCYXNlUGFsZXR0
ZURlcwogewogICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVJZGVudDxDU1NWYWx1ZUxpZ2h0
LCBDU1NWYWx1ZURhcms+KHJhbmdlKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXR1
cm4gY29uc3VtZUludGVnZXIocmFuZ2UsIDApOworICAgIHJldHVybiBjb25zdW1lSW50ZWdlclpl
cm9BbmRHcmVhdGVyKHJhbmdlKTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNv
bnN1bWVPdmVycmlkZUNvbG9yc0Rlc2NyaXB0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBk
byB7Ci0gICAgICAgIGF1dG8ga2V5ID0gY29uc3VtZUludGVnZXIocmFuZ2UsIDApOworICAgICAg
ICBhdXRvIGtleSA9IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIocmFuZ2UpOwogICAgICAg
ICBpZiAoIWtleSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC01MzM3LDEzICs1
MzM3LDEzIEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGbGV4KGJvb2wgaW1wb3J0
YW50KQogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIHdoaWxlICghbV9yYW5n
ZS5hdEVuZCgpICYmIGluZGV4KysgPCAzKSB7CiAgICAgICAgICAgICBpZiAoYXV0byBudW1iZXIg
PSBjb25zdW1lTnVtYmVyUmF3KG1fcmFuZ2UpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCpudW1i
ZXIgPCAwKQorICAgICAgICAgICAgICAgIGlmIChudW1iZXItPnZhbHVlIDwgMCkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGlmIChmbGV4R3JvdyA9
PSB1bnNldFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBmbGV4R3JvdyA9ICpudW1iZXI7Cisg
ICAgICAgICAgICAgICAgICAgIGZsZXhHcm93ID0gbnVtYmVyLT52YWx1ZTsKICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChmbGV4U2hyaW5rID09IHVuc2V0VmFsdWUpCi0gICAgICAgICAgICAgICAg
ICAgIGZsZXhTaHJpbmsgPSAqbnVtYmVyOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEqbnVt
YmVyKSAvLyBmbGV4IG9ubHkgYWxsb3dzIGEgYmFzaXMgb2YgMCAoc2FucyB1bml0cykgaWYgZmxl
eC1ncm93IGFuZCBmbGV4LXNocmluayB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0LgorICAg
ICAgICAgICAgICAgICAgICBmbGV4U2hyaW5rID0gbnVtYmVyLT52YWx1ZTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICghbnVtYmVyLT52YWx1ZSkgLy8gZmxleCBvbmx5IGFsbG93cyBhIGJhc2lz
IG9mIDAgKHNhbnMgdW5pdHMpIGlmIGZsZXgtZ3JvdyBhbmQgZmxleC1zaHJpbmsgdmFsdWVzIGhh
dmUgYWxyZWFkeSBiZWVuIHNldC4KICAgICAgICAgICAgICAgICAgICAgZmxleEJhc2lzID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgwLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzEx
OCw3IEBAIHN0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFsdWUoQ2FsY3VsYXRpb25DYXRlZ29y
eSBjYQogLy8gRklYTUU6IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJv
bSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuCiBjbGFzcyBDYWxjUGFyc2VyIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZSA9IHsgfSwgQ1NTVmFsdWVQb29sJiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KSwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UgPSBmYWxzZSkKKyAgICBleHBsaWNpdCBD
YWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5
IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6
OkFsbCwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IHsgfSwgQ1NTVmFs
dWVQb29sJiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwgTmVnYXRpdmVQZXJjZW50
YWdlUG9saWN5IG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSA9IE5lZ2F0aXZlUGVyY2VudGFnZVBv
bGljeTo6Rm9yYmlkKQogICAgICAgICA6IG1fc291cmNlUmFuZ2UocmFuZ2UpCiAgICAgICAgICwg
bV9yYW5nZShyYW5nZSkKICAgICAgICAgLCBtX3Bvb2wocG9vbCkKQEAgLTEyNiw3ICsxMjYsNyBA
QCBjbGFzcyBDYWxjUGFyc2VyIHsgKHB1YmxpYykKICAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9r
ZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgICAgICBhdXRvIGZ1bmN0aW9uSWQgPSB0b2tl
bi5mdW5jdGlvbklkKCk7CiAgICAgICAgIGlmIChDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9u
KGZ1bmN0aW9uSWQpKQotICAgICAgICAgICAgbV9jYWxjVmFsdWUgPSBDU1NDYWxjVmFsdWU6OmNy
ZWF0ZShmdW5jdGlvbklkLCBjb25zdW1lRnVuY3Rpb24obV9yYW5nZSksIGRlc3RpbmF0aW9uQ2F0
ZWdvcnksIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2Up
OworICAgICAgICAgICAgbV9jYWxjVmFsdWUgPSBDU1NDYWxjVmFsdWU6OmNyZWF0ZShmdW5jdGlv
bklkLCBjb25zdW1lRnVuY3Rpb24obV9yYW5nZSksIGRlc3RpbmF0aW9uQ2F0ZWdvcnksIHZhbHVl
UmFuZ2UsIHN5bWJvbFRhYmxlLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgPT0gTmVnYXRpdmVQ
ZXJjZW50YWdlUG9saWN5OjpBbGxvdyk7CiAgICAgfQogCiAgICAgY29uc3QgQ1NTQ2FsY1ZhbHVl
KiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsY1ZhbHVlLmdldCgpOyB9CkBAIC0xNTIsNjUg
KzE1Miw2IEBAIGNsYXNzIENhbGNQYXJzZXIgeyAocHVibGljKQogICAgICAgICByZXR1cm4gbV9w
b29sLmNyZWF0ZVZhbHVlKFdURk1vdmUobV9jYWxjVmFsdWUpKTsKICAgICB9CiAKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyKGRvdWJsZSBtaW5pbXVtVmFsdWUp
Ci0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4g
bV9wb29sLmNyZWF0ZVZhbHVlKHN0ZDo6cm91bmQoc3RkOjptYXgobV9jYWxjVmFsdWUtPmRvdWJs
ZVZhbHVlKCksIG1pbmltdW1WYWx1ZSkpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RkOjpvcHRpb25hbDxJbnRUeXBl
PiBjb25zdW1lSW50ZWdlclR5cGVSYXcoZG91YmxlIG1pbmltdW1WYWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghbV9jYWxjVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIGNsYW1wVG88
SW50VHlwZT4oc3RkOjpyb3VuZChzdGQ6Om1heChtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSwg
bWluaW11bVZhbHVlKSkpOwotICAgIH0KLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZU51bWJlcigpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwot
ICAgICAgICByZXR1cm4gbV9wb29sLmNyZWF0ZVZhbHVlKG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1
ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNW
YWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJj
ZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1
ZSgpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJh
dygpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBjYXRlZ29yeSA9IG1fY2FsY1ZhbHVlLT5jYXRl
Z29yeSgpOwotICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1fc291cmNl
UmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4gbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVl
KCk7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3
KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9jYWxjVmFsdWUtPmNhdGVn
b3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAg
cmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBtX2NhbGNWYWx1ZS0+ZG91
YmxlVmFsdWUoKSB9IH07Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNv
bnN1bWVMZW5ndGhSYXcoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8fCBtX2Nh
bGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpCi0gICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9y
YW5nZTsKLSAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBt
X2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07Ci0gICAgfQotCiBwcml2YXRlOgogICAgIENT
U1BhcnNlclRva2VuUmFuZ2UmIG1fc291cmNlUmFuZ2U7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5n
ZSBtX3JhbmdlOwpAQCAtMjIwLDcgKzE2MSw3IEBAIGNsYXNzIENhbGNQYXJzZXIgeyAocHVibGlj
KQogCiAvLyBNQVJLOiAtIFByaW1pdGl2ZSB2YWx1ZSBjb25zdW1lcnMgZm9yIGNhbGxlcnMgdGhh
dCBrbm93IHRoZSB0b2tlbiB0eXBlLgogCi1zdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY29u
c3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSA9IHsgfSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVS
YW5nZTo6QWxsKQorc3RhdGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNvbnN1bWVDYWxjUmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1
bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIApAQCAtMjM4LDIwNiArMTc5LDI2NSBAQCBzdGF0
aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2sKIAogLy8g
TUFSSzogSW50ZWdlciAoUmF3KQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxJbnRUeXBlPiBjb25zdW1lSW50ZWdlclR5cGVSYXdXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwgZG91YmxlIG1p
bmltdW1WYWx1ZSkKK2VudW0gY2xhc3MgSW50ZWdlclJhbmdlIHsgQWxsLCBaZXJvQW5kR3JlYXRl
ciwgT25lQW5kR3JlYXRlciB9OworCitzdGF0aWMgY29uc3RleHByIGRvdWJsZSBjb21wdXRlTWlu
aW11bVZhbHVlKEludGVnZXJSYW5nZSByYW5nZSkKIHsKLSAgICBhdXRvIHJhbmdlID0gc291cmNl
UmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHsgfSwgVmFs
dWVSYW5nZTo6QWxsKSkgewotICAgICAgICBzb3VyY2VSYW5nZSA9IHJhbmdlOwotICAgICAgICBy
ZXR1cm4gY2xhbXBUbzxJbnRUeXBlPihzdGQ6OnJvdW5kKHN0ZDo6bWF4KHZhbHVlLT5kb3VibGVW
YWx1ZSgpLCBtaW5pbXVtVmFsdWUpKSk7CisgICAgc3dpdGNoIChyYW5nZSkgeworICAgIGNhc2Ug
SW50ZWdlclJhbmdlOjpBbGw6CisgICAgICAgIHJldHVybiAtc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjppbmZpbml0eSgpOworICAgIGNhc2UgSW50ZWdlclJhbmdlOjpaZXJvQW5kR3JlYXRl
cjoKKyAgICAgICAgcmV0dXJuIDAuMDsKKyAgICBjYXNlIEludGVnZXJSYW5nZTo6T25lQW5kR3Jl
YXRlcjoKKyAgICAgICAgcmV0dXJuIDEuMDsKICAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogfQorLy8gTUFSSzogSW50ZWdlciAoUmF3KQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRU
eXBlPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnRUeXBlPiBjb25zdW1lSW50ZWdlclR5cGVSYXdX
aXRoS25vd25Ub2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJs
ZSBtaW5pbXVtVmFsdWUpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVt
YmVyVG9rZW4pOwotICAgIAotICAgIGlmIChyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlVHlwZSgp
ID09IE51bWJlclZhbHVlVHlwZSB8fCByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCBtaW5p
bXVtVmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlLCBJbnRlZ2VyUmFuZ2UgaW50ZWdl
clJhbmdlPgorc3RydWN0IEludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUg
PSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYs
IFZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1
aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rp
b25Ub2tlbik7CisKKyAgICAgICAgYXV0byByYW5nZUNvcHkgPSByYW5nZTsKKyAgICAgICAgaWYg
KGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJh
bmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB7IH0sIFZhbHVlUmFuZ2U6OkFs
bCkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VDb3B5OworICAgICAgICAgICAgcmV0dXJu
IGNsYW1wVG88SW50VHlwZT4oc3RkOjpyb3VuZChzdGQ6Om1heCh2YWx1ZS0+ZG91YmxlVmFsdWUo
KSwgY29tcHV0ZU1pbmltdW1WYWx1ZShpbnRlZ2VyUmFuZ2UpKSkpOworICAgICAgICB9CisKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gY2xhbXBUbzxJbnRUeXBlPihy
YW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpKTsKLX0KKyAg
ICB9Cit9OwogCi0vLyBNQVJLOiBJbnRlZ2VyIChDU1NQcmltaXRpdmVWYWx1ZSAtIG5vdCBtYWlu
dGFpbmluZyBjYWxjKQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGlu
dGVnZXJSYW5nZT4KK3N0cnVjdCBJbnRlZ2VyVHlwZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29u
c3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlw
ZSA9IE51bWJlclRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYs
IFZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1
aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVy
VG9rZW4pOworICAgICAgICAKKyAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWVU
eXBlKCkgPT0gTnVtYmVyVmFsdWVUeXBlIHx8IHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8
IGNvbXB1dGVNaW5pbXVtVmFsdWUoaW50ZWdlclJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBjbGFtcFRvPEludFR5cGU+KHJhbmdlLmNvbnN1
bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkpOworICAgIH0KK307CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVJbnRlZ2VyVHlwZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1W
YWx1ZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IEZ1bmN0aW9uVG9rZW4pOworLy8gTUFSSzogSW50ZWdlciAoQ1NTUHJpbWl0aXZlVmFs
dWUgLSBtYWludGFpbmluZyBjYWxjKQogCi0gICAgaWYgKGF1dG8gaW50ZWdlciA9IGNvbnN1bWVJ
bnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uPEludFR5cGU+KHJhbmdlLCBt
aW5pbXVtVmFsdWUpKQotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqaW50ZWdlciwg
Q1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIHJldHVybiBudWxscHRyOwotfQordGVtcGxh
dGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVnZXJSYW5nZT4KK3N0cnVjdCBJ
bnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsKKyAg
ICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wm
IHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5j
dGlvblRva2VuKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
ZG91YmxlIG1pbmltdW1WYWx1ZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKyAgICAgICAgaWYgKGF1dG8gaW50
ZWdlciA9IEludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyPEludFR5
cGUsIGludGVnZXJSYW5nZT46OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdl
LCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVy
biBwb29sLmNyZWF0ZVZhbHVlKCppbnRlZ2VyLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLSAgICBpZiAoYXV0byBpbnRlZ2Vy
ID0gY29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyPEludFR5cGU+
KHJhbmdlLCBtaW5pbXVtVmFsdWUpKQotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgq
aW50ZWdlciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIHJldHVybiBudWxscHRyOwot
fQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVnZXJSYW5nZT4K
K3N0cnVjdCBJbnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2Vu
OworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVl
UG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IE51bWJlclRva2VuKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdXRvIGludGVnZXIgPSBJbnRl
Z2VyVHlwZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI8SW50VHlwZSwgaW50ZWdlclJh
bmdlPjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUs
IHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQorICAgICAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRl
VmFsdWUoKmludGVnZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorfTsKIAogLy8gTUFSSzogTnVtYmVyIChSYXcpCiAKLXN0YXRpYyBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsaWRhdGVkTnVtYmVyUmF3KGRvdWJsZSB2YWx1ZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PiB2YWxp
ZGF0ZWROdW1iZXJSYXcoZG91YmxlIHZhbHVlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAg
ICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgdmFsdWUgPCAw
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiB2YWx1ZTsKKyAgICBy
ZXR1cm4ge3sgdmFsdWUgfX07CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29u
c3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHNvdXJjZVJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgYXV0byByYW5nZSA9IHNvdXJjZVJhbmdlOwot
ICAgIGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCBzeW1ib2xUYWJsZSwgdmFs
dWVSYW5nZSkpIHsKLSAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRO
dW1iZXJSYXcodmFsdWUtPmRvdWJsZVZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgICAg
ICBzb3VyY2VSYW5nZSA9IHJhbmdlOwotICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVl
Oworc3RydWN0IE51bWJlclJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25U
b2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1bWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
VW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKworICAgICAgICBhdXRvIHJhbmdlQ29weSA9IHJhbmdl
OworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9rZW5U
eXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFs
dWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodmFsdWUtPmRvdWJsZVZhbHVlKCksIHZhbHVlUmFuZ2Up
KSB7CisgICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUNvcHk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLX0KLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgQVNT
RVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwotICAgIAotICAgIGlmIChh
dXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3KHJhbmdlLnBlZWsoKS5udW1l
cmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworc3RydWN0IE51
bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3
KHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAg
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4g
dmFsaWRhdGVkVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
ICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKLXN0YXRpYyBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUlkZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gSWRlbnRUb2tlbik7CitzdHJ1Y3QgTnVtYmVyUmF3S25vd25Ub2tlblR5cGVJ
ZGVudENvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0
b2tlblR5cGUgPSBJZGVudFRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE51bWJlclJh
dz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7CisgICAgICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pOwogCi0gICAgaWYgKGF1dG8gdmFy
aWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7Ci0gICAgICAgIHN3
aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05V
TUJFUjoKLSAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVt
YmVyUmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAgICAgICBy
YW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgIHJldHVy
biB2YWxpZGF0ZWRWYWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQo
KSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgICAgICAgICAgICAgaWYgKGF1dG8g
dmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1
ZVJhbmdlKSkgeworICAgICAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKIC8v
IE1BUks6IE51bWJlciAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQogCi1z
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJh
bmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBOdW1iZXJDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25U
b2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmss
IFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIAotICAgIENhbGNQ
YXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHZhbHVlUmFu
Z2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKLSAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZUlm
Q2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKLX0KKyAgICAgICAgQ2FsY1Bh
cnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5n
ZSwgc3ltYm9sVGFibGUsIHBvb2wpOworICAgICAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1
ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKKyAgICB9Cit9OwogCi1z
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdl
LCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkg
PT0gTnVtYmVyVG9rZW4pOwotICAgIAotICAgIGF1dG8gdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0g
ICAgCi0gICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodG9r
ZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gdW5pdFR5cGUg
PSB0b2tlbi51bml0VHlwZSgpOwotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOwotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqdmFsaWRhdGVkVmFsdWUs
IHVuaXRUeXBlKTsKK3N0cnVjdCBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFy
c2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNv
bnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9v
bCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRv
a2VuKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJh
dyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIGF1dG8g
dW5pdFR5cGUgPSB0b2tlbi51bml0VHlwZSgpOworICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUlu
Y2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVl
KHZhbGlkYXRlZFZhbHVlLT52YWx1ZSwgdW5pdFR5cGUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK307CiAKLQogLy8g
TUFSSzogUGVyY2VudCAocmF3KQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IHZhbGlk
YXRlZFBlcmNlbnRSYXcoZG91YmxlIHZhbHVlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCitzdGF0
aWMgc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiB2YWxpZGF0ZWRQZXJjZW50UmF3KGRvdWJsZSB2
YWx1ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewogICAgIGlmICh2YWx1ZVJhbmdlID09IFZh
bHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICBpZiAoc3RkOjppc2luZih2YWx1ZSkpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHJldHVybiB7eyB2YWx1ZSB9fTsKIH0K
IAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHNvdXJjZVJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Up
Ci17Ci0gICAgQVNTRVJUKHNvdXJjZVJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tl
bik7CitzdHJ1Y3QgUGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rp
b25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiBjb25zdW1lKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBjb25zdCBhdXRvJiB0b2tlbiA9IHNv
dXJjZVJhbmdlLnBlZWsoKTsKLSAgICBhdXRvIGZ1bmN0aW9uSWQgPSB0b2tlbi5mdW5jdGlvbklk
KCk7Ci0gICAgaWYgKCFDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKGZ1bmN0aW9uSWQpKQot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICBhdXRvIHJhbmdlQ29weSA9IHJh
bmdlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9r
ZW5UeXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCBz
eW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VDb3B5
OwogCi0gICAgYXV0byByYW5nZSA9IHNvdXJjZVJhbmdlOwotICAgIGF1dG8gY2FsY1ZhbHVlID0g
Q1NTQ2FsY1ZhbHVlOjpjcmVhdGUoZnVuY3Rpb25JZCwgY29uc3VtZUZ1bmN0aW9uKHJhbmdlKSwg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUpOwot
ICAgIGlmIChjYWxjVmFsdWUgJiYgY2FsY1ZhbHVlLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnQpIHsKLSAgICAgICAgc291cmNlUmFuZ2UgPSByYW5nZTsKLSAgICAg
ICAgcmV0dXJuIGNhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyB2YWxpZGF0ZSB0aGUgY2FsYyB2YWx1ZSBhcyBpcyBkb25lIGZvciB0aGUg
TnVtYmVyUmF3IHZhcmlhbnQ/CisgICAgICAgICAgICByZXR1cm4ge3sgdmFsdWUtPmRvdWJsZVZh
bHVlKCkgfX07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH0KK307CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorc3RydWN0IFBlcmNlbnRSYXdL
bm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQ
YXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gUGVyY2VudGFnZVRva2VuOworICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAg
ICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pOwogCi1z
dGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9r
ZW5UeXBlUGVyY2VudGFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIEFTU0VSVChyYW5n
ZS5wZWVrKCkudHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbik7Ci0KLSAgICBpZiAoYXV0byB2YWxp
ZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1
ZSgpLCB2YWx1ZVJhbmdlKSkgewotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOwotICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7CisgICAgICAgIGlmIChhdXRv
IHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyhyYW5nZS5wZWVrKCkubnVtZXJp
Y1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci19Cit9OwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1
bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRv
a2VuKTsKK3N0cnVjdCBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBJZGVudFRv
a2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
VW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBJZGVudFRva2VuKTsKIAotICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFi
bGUuZ2V0KHJhbmdlLnBlZWsoKS5pZCgpKSkgewotICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50
eXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgotICAgICAg
ICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHZhcmlh
YmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRW
YWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoYXV0
byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRl
ZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2Up
KSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotCiAvLyBNQVJL
OiBQZXJjZW50IChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWluaW5nIGNhbGMpCiAKLXN0YXRp
YyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBQZXJjZW50Q1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9r
ZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBV
bml0bGVzc1plcm9RdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBDYWxjUGFy
c2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5n
ZSwgc3ltYm9sVGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZD
YXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KTsKLX0KKyAgICAgICAgQ2FsY1Bh
cnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFu
Z2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFs
dWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpOworICAgIH0KK307CiAK
LXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbik7Ci0KLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1
ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCB2YWx1
ZVJhbmdlKSkgewotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwot
ICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqdmFsaWRhdGVkVmFsdWUsIENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRSk7CitzdHJ1Y3QgUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXIgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IFBlcmNlbnRhZ2VUb2tlbjsKKyAg
ICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrLCBD
U1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pOworICAgICAgICAKKyAgICAgICAgaWYgKGF1dG8gdmFs
aWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHJhbmdlLnBlZWsoKS5udW1lcmljVmFs
dWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSh2YWxpZGF0
ZWRWYWx1ZS0+dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQor
fTsKIAogLy8gTUFSSzogTGVuZ3RoIChyYXcpCiAKQEAgLTQ1MCw4MzEgKzQ1MCw5NDUgQEAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB2YWxpZGF0ZWRMZW5ndGhSYXcoZG91YmxlCiAgICAg
cmV0dXJuIHZhbHVlOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1
bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdl
JiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrKQotewotICAg
IGF1dG8gcmFuZ2UgPSBzb3VyY2VSYW5nZTsKLSAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVD
YWxjUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHNvdXJjZVJh
bmdlID0gcmFuZ2U7Ci0gICAgICAgIHJldHVybiB7IHsgdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwg
dmFsdWUtPmRvdWJsZVZhbHVlKCkgfSB9Oworc3RydWN0IExlbmd0aFJhd0tub3duVG9rZW5UeXBl
RnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5
cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxM
ZW5ndGhSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0Nh
bGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAg
ICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKworICAgICAg
ICBhdXRvIHJhbmdlQ29weSA9IHJhbmdlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1
bWVDYWxjUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpMZW5ndGgsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAg
ICAgcmFuZ2UgPSByYW5nZUNvcHk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhp
cyB2YWxpZGF0ZSB0aGUgY2FsYyB2YWx1ZSBhcyBpcyBkb25lIGZvciB0aGUgTnVtYmVyUmF3IHZh
cmlhbnQ/CisgICAgICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZh
bHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5U
eXBlRGltZW5zaW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyaykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBE
aW1lbnNpb25Ub2tlbik7CitzdHJ1Y3QgTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25D
b25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5U
eXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3
PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9s
VGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQo
cmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbik7CiAKLSAgICBhdXRvJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKKyAgICAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAK
LSAgICBhdXRvIHVuaXRUeXBlID0gdG9rZW4udW5pdFR5cGUoKTsKLSAgICBzd2l0Y2ggKHVuaXRU
eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1FVSVJLWV9FTVM6Ci0gICAgICAgIGlm
IChwYXJzZXJNb2RlICE9IFVBU2hlZXRNb2RlKQorICAgICAgICBhdXRvIHVuaXRUeXBlID0gdG9r
ZW4udW5pdFR5cGUoKTsKKyAgICAgICAgc3dpdGNoICh1bml0VHlwZSkgeworICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKKyAgICAgICAgICAgIGlmIChwYXJzZXJNb2Rl
ICE9IFVBU2hlZXRNb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VN
UzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CisgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19MSFM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19STEhTOgor
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfSUM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6CisgICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0NNOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06CisgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgorICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19WVzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgorICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZN
QVg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WQjoKKyAgICAgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1ZJOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZXOgorICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZIOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfU1ZNSU46CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVk1BWDoKKyAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWQjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1NWSToKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWVzoKKyAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0xWSDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xW
TUlOOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZNQVg6CisgICAgICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19MVkI6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkk6
CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVlc6CisgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19EVkg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVk1JTjoKKyAg
ICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWTUFYOgorICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfRFZCOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgorICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgRkFMTFRI
Uk9VR0g7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUkVNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19STEhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DSFM6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19F
WFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19WSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoK
LSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZJOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19TVlc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWSDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfU1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWTUFYOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1NWSToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZXOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19MVkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWTUlOOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19MVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZCOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkk6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0RWVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZIOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19EVk1JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZNQVg6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0RWQjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgorICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0
ZWRMZW5ndGhSYXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAg
ICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0
dXJuIHsgeyB1bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKKyAgICAgICAgfQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KK307CiAKLSAgICBpZiAoYXV0byB2YWxpZGF0
ZWRWYWx1ZSA9IHZhbGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVS
YW5nZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAg
ICAgICAgcmV0dXJuIHsgeyB1bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK3N0cnVjdCBMZW5ndGhSYXdLbm93blRva2VuVHlw
ZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlw
ZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5n
dGhSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKIAotc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9r
ZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBOdW1iZXJUb2tlbik7CisgICAgICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygp
OwogCi0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgICAgIGlmICghc2hvdWxk
QWNjZXB0VW5pdGxlc3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgcGFyc2VyTW9kZSwgdW5p
dGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpCisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCi0gICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHRva2VuLm51
bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkFs
bG93KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRMZW5ndGhS
YXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5n
ZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHsgeyBD
U1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OworICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9
IHZhbGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsK
LSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0
dXJuIHsgeyBDU1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OwogICAgIH0K
LSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAogLy8gTUFSSzogTGVuZ3RoIChDU1NQ
cmltaXRpdmVWYWx1ZSAtIG1haW50YWluaW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworc3RydWN0IExlbmd0
aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUg
PSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwog
Ci0gICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29u
c3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOwotfQorICAg
ICAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3Ro
LCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBwYXJzZXIu
Y29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOworICAg
IH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERp
bWVuc2lvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1pl
cm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9
IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcykpCi0gICAgICAgIHJldHVy
biBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IExlbmd0
aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkK
KyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxl
bmd0aFJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLXN0
YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0
bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IE51bWJlclRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRp
YyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRs
ZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2Vu
KTsKIAotICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25U
b2tlblR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcykpCi0gICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+
dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAg
IGlmIChhdXRvIGxlbmd0aFJhdyA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI6OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1
bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZh
bHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KK307CiAKIC8vIE1BUks6IEFuZ2xlIChyYXcpCiAKLXN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKLXsKLSAgICBhdXRvIHJhbmdlID0g
c291cmNlUmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgc3lt
Ym9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHNvdXJjZVJhbmdlID0gcmFuZ2U7Ci0g
ICAgICAgIHJldHVybiB7IHsgdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgdmFsdWUtPmRvdWJsZVZh
bHVlKCkgfSB9Oworc3RydWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVy
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBG
dW5jdGlvblRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1l
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgYXV0byByYW5nZUNvcHkg
PSByYW5nZTsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUs
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUNv
cHk7CisgICAgICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZhbHVl
LT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3RhdGljIHN0
ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURp
bWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRh
YmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3Na
ZXJvUXVpcmspCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9u
VG9rZW4pOworc3RydWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lciB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRGlt
ZW5zaW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZh
bHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJr
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9u
VG9rZW4pOwogCi0gICAgYXV0byB1bml0VHlwZSA9IHJhbmdlLnBlZWsoKS51bml0VHlwZSgpOwot
ICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0dSQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAgIHJldHVybiB7
IHsgdW5pdFR5cGUsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1Zh
bHVlKCkgfSB9OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICBhdXRvIHVu
aXRUeXBlID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7CisgICAgICAgIHN3aXRjaCAodW5pdFR5
cGUpIHsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICAgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1JBRDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6
CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAgICAgICAgICAgcmV0dXJu
IHsgeyB1bml0VHlwZSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmlj
VmFsdWUoKSB9IH07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQorfTsKK3N0cnVjdCBB
bmdsZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVu
aXRsZXNzWmVybykKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IE51bWJlclRva2VuKTsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19CisgICAgICAgIGlm
IChzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4g
eyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICB9Cit9OwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVy
bykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7Ci0K
LSAgICBpZiAoc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZShyYW5nZS5wZWVrKCkubnVtZXJpY1Zh
bHVlKCksIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQotICAgICAgICByZXR1
cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQot
CiAvLyBNQVJLOiBBbmdsZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQog
Ci1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3Na
ZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBGdW5jdGlvblRva2VuOwor
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZh
bHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxl
c3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCi0gICAgQ2FsY1BhcnNlciBw
YXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdlLCBzeW1i
b2xUYWJsZSwgcG9vbCk7Ci0gICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5
KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKTsKLX0KKyAgICAgICAgQ2FsY1BhcnNlciBwYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdlLCBzeW1ib2xU
YWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29y
eShDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSk7CisgICAgfQorfTsKIAotc3RhdGljIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVu
aXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKK3N0cnVjdCBB
bmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25D
b25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5U
eXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVu
aXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJh
bmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOwogCi0gICAgaWYgKGF1dG8gYW5n
bGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2Us
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3Na
ZXJvKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYW5nbGVSYXctPnZhbHVlLCBh
bmdsZVJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlmIChhdXRv
IGFuZ2xlUmF3ID0gQW5nbGVSYXdLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOjpjb25z
dW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShhbmds
ZVJhdy0+dmFsdWUsIGFuZ2xlUmF3LT50eXBlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorfTsKIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xl
Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFs
dWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJl
clRva2VuKTsKK3N0cnVjdCBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVOdW1iZXJDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJU
b2tlblR5cGUgdG9rZW5UeXBlID0gTnVtYmVyVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNz
WmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwogCi0gICAgaWYg
KGF1dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYW5nbGVSYXctPnZh
bHVlLCBhbmdsZVJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlm
IChhdXRvIGFuZ2xlUmF3ID0gQW5nbGVSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpj
b25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxl
c3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShh
bmdsZVJhdy0+dmFsdWUsIGFuZ2xlUmF3LT50eXBlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorfTsKIAotCiAvLyBNQVJLOiBUaW1lIChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50
YWluaW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVU
aW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUo
KSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9rZW47CisgICAgc3Rh
dGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9R
dWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBl
ZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBDYWxjUGFyc2VyIHBhcnNlcihy
YW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZSwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUs
IHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxh
dGlvbkNhdGVnb3J5OjpUaW1lKTsKLX0KKyAgICAgICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2Us
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWUsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBwb29s
KTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlRpbWUpOworICAgIH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0
bGVzc1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOworc3RydWN0IFRpbWVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERpbWVuc2lvblRva2Vu
OworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVp
cmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotICAgIGlmICh2YWx1ZVJhbmdlID09IFZh
bHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IDAp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1
ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCAwKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoYXV0byB1bml0ID0gcmFuZ2Uu
cGVlaygpLnVuaXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19NUyB8fCB1bml0ID09
IENTU1VuaXRUeXBlOjpDU1NfUykKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFu
Z2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7Cisg
ICAgICAgIGlmIChhdXRvIHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9PSBD
U1NVbml0VHlwZTo6Q1NTX01TIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19TKQorICAgICAg
ICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKIAotc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1ND
YWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewot
ICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKK3N0cnVjdCBU
aW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1
bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUg
PSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUm
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2Vu
KTsKIAotICAgIGlmICh1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdyAmJiBzaG91bGRB
Y2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgcGFyc2VyTW9k
ZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpIHsKLSAgICAgICAgaWYgKHZh
bHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgcmFuZ2UucGVlaygpLm51bWVy
aWNWYWx1ZSgpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1
cm4gcG9vbC5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51
bWVyaWNWYWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX01TKTsKKyAgICAgICAgaWYgKHVuaXRsZXNz
ID09IFVuaXRsZXNzUXVpcms6OkFsbG93ICYmIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUocmFu
Z2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3Na
ZXJvUXVpcms6OkFsbG93KSkgeworICAgICAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVS
YW5nZTo6Tm9uTmVnYXRpdmUgJiYgcmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpIDwgMCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNy
ZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVl
KCksIENTU1VuaXRUeXBlOjpDU1NfTVMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK307CiAKIC8vIE1BUks6IFJlc29s
dXRpb24gKENTU1ByaW1pdGl2ZVZhbHVlIC0gbm8gY2FsYykKIAotc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb25DU1NQcmltaXRpdmVWYWx1ZVdpdGhLbm93
blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQ
b29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lv
blRva2VuKTsKK3N0cnVjdCBSZXNvbHV0aW9uQ1NTUHJpbWl0aXZlVmFsdWVXaXRoS25vd25Ub2tl
blR5cGVEaW1lbnNpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJU
b2tlblR5cGUgdG9rZW5UeXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAot
ICAgIGlmIChhdXRvIHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9PSBDU1NV
bml0VHlwZTo6Q1NTX0RQUFggfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX1ggfHwgdW5pdCA9
PSBDU1NVbml0VHlwZTo6Q1NTX0RQSSB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfRFBDTSkK
LSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CisgICAgICAgIGlmIChhdXRvIHVuaXQg
PSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX0RQUFgg
fHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX1ggfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NT
X0RQSSB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfRFBDTSkKKyAgICAgICAgICAgIHJldHVy
biBwb29sLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVt
ZXJpY1ZhbHVlKCksIHVuaXQpOwogCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KK307CiAKKy8vIE1BUks6IFNwZWNpYWxpemVkIGNvbWJpbmF0
aW9uIGNvbnN1bWVycy4KIAotLy8gTUFSSzogLSBQcmltaXRpdmUgdmFsdWUgY29uc3VtZXJzIGZv
ciBjYWxsZXJzIHRoYXQgZG8gTk9UIGtub3cgdGhlIHRva2VuIHR5cGUuCisvLyBGSVhNRTogSXQg
d291bGQgYmUgZ29vZCB0byBmaW5kIGEgd2F5IHRvIHN5bnRoZXNpemUgdGhpcyBmcm9tIGFuIGFu
Z2xlIGFuZCBudW1iZXIgc3BlY2lmaWMgdmFyaWFudHMuCitzdHJ1Y3QgQW5nbGVPck51bWJlclJh
d0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQ
YXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gSWRlbnRUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxBbmdsZU9yTnVtYmVyUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0KHJhbmdlLnBlZWsoKS5p
ZCgpKSkgeworICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19SQUQ6CisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKKyAg
ICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAgICAgICAgICAgICAgIHJh
bmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEFuZ2xlUmF3IHsgdmFyaWFibGUtPnR5cGUsIHZhcmlhYmxlLT52YWx1ZSB9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkK
LXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICAgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyUmF3IHsgdmFy
aWFibGUtPnZhbHVlIH07CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2Ug
RnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhL
bm93blRva2VuVHlwZUZ1bmN0aW9uPEludFR5cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUpOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1
bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcjxJbnRUeXBlPihyYW5nZSwg
bWluaW11bVZhbHVlKTsKLSAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLX0KKy8vIEZJWE1FOiBJdCB3b3VsZCBiZSBnb29kIHRvIGZpbmQgYSB3YXkgdG8gc3lu
dGhlc2l6ZSB0aGlzIGZyb20gYW4gbnVtYmVyIGFuZCBwZXJjZW50IHNwZWNpZmljIHZhcmlhbnRz
Lgorc3RydWN0IE51bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lciB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gSWRl
bnRUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJPclBlcmNlbnRSYXc+IGNv
bnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBpZiAoYXV0byB2
YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZh
bHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7
CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7eyAqdmFsaWRhdGVkVmFsdWUgfX07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBJbnRUeXBlPiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyVHlwZShD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSwgQ1NTVmFsdWVQ
b29sJiBwb29sKQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgICAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICAgICAgICAgICAgICBpZiAoYXV0
byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh2YXJpYWJsZS0+dmFsdWUsIHZh
bHVlUmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7eyAqdmFsaWRhdGVkVmFs
dWUgfX07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
c3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAg
IHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb248SW50VHlwZT4ocmFuZ2UsIG1pbmltdW1WYWx1ZSwgcG9vbCk7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CiAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4g
Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZU51bWJlcjxJbnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlLCBwb29sKTsKLQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH0KK307CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKy8vIE1BUks6IC0gTWV0YSBDb25zdW1l
cnMKIAotc3RkOjpvcHRpb25hbDxpbnQ+IGNvbnN1bWVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBkb3VibGUgbWluaW11bVZhbHVlKQotewotICAgIHJldHVybiBjb25zdW1l
SW50ZWdlclR5cGVSYXc8aW50PihyYW5nZSwgbWluaW11bVZhbHVlKTsKLX0KK3RlbXBsYXRlPHR5
cGVuYW1lIENvbnN1bWVyLCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgVHJhbnNmb3JtQXBwbGll
ciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGRlY2x0eXBlKGF1dG8pIGFwcGx5
KFQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUgbWlu
aW11bVZhbHVlKQotewotICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGU8aW50PihyYW5nZSwg
bWluaW11bVZhbHVlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLX0KK3RlbXBsYXRlPHR5
cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IFRyYW5zZm9ybUFwcGxpZXI8Q29uc3VtZXIsIHR5cGVu
YW1lIHN0ZDo6dm9pZF90PHR5cGVuYW1lIENvbnN1bWVyOjpUcmFuc2Zvcm1lcj4+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgZGVjbHR5cGUoYXV0bykgYXBwbHkoVCB2YWx1ZSkg
eyByZXR1cm4gQ29uc3VtZXI6OlRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0odmFsdWUpOyB9Cit9Owog
Ci1zdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3VtZXIsIHR5cGVu
YW1lIFQ+CitzdGF0aWMgZGVjbHR5cGUoYXV0bykgYXBwbHlUcmFuc2Zvcm0oVCB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PHVuc2lnbmVkPihyYW5nZSwgMSk7Cisg
ICAgcmV0dXJuIFRyYW5zZm9ybUFwcGxpZXI8Q29uc3VtZXI+OjphcHBseSh2YWx1ZSk7CiB9CiAK
LVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlPHVu
c2lnbmVkPihyYW5nZSwgMSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci19CisvLyBUcmFu
c2Zvcm1lcnM6CiAKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgYXV0
byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IElk
ZW50aXR5VHJhbnNmb3JtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFQ7CisgICAgc3RhdGljIFQg
dHJhbnNmb3JtKFQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OwogCi0gICAgc3dpdGNoICh0
b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBj
b25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFs
dWVSYW5nZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQsIHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lIFZhcmlhbnRUeXBlPgorc3RydWN0IFJhd1ZhcmlhbnRUcmFuc2Zvcm1lckJhc2Ug
eworICAgIHVzaW5nIFJlc3VsdCA9IFJlc3VsdFR5cGU7CiAKLSAgICBjYXNlIE51bWJlclRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJl
cihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKTsKKyAgICBzdGF0aWMgUmVzdWx0IHRyYW5zZm9ybShW
YXJpYW50VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZh
bHVlLCBbXSAoYXV0byB2YWx1ZSkgeyByZXR1cm4gUGFyZW50Ojp0cmFuc2Zvcm0odmFsdWUpOyB9
KTsKKyAgICB9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICBzdGF0aWMgdHlw
ZW5hbWUgUmVzdWx0Ojp2YWx1ZV90eXBlIHRyYW5zZm9ybSh0eXBlbmFtZSBSZXN1bHQ6OnZhbHVl
X3R5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
YXRpYyBSZXN1bHQgdHJhbnNmb3JtKHN0ZDo6b3B0aW9uYWw8VD4gdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gUGFyZW50Ojp0cmFuc2Zvcm0oKnZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OwogCi1SZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBl
ZWsoKTsKK3N0cnVjdCBBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXIgOiBSYXdW
YXJpYW50VHJhbnNmb3JtZXJCYXNlPEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1l
ciwgc3RkOjpvcHRpb25hbDxkb3VibGU+LCBBbmdsZU9yTnVtYmVyUmF3PiB7CisgICAgdXNpbmcg
UmF3VmFyaWFudFRyYW5zZm9ybWVyQmFzZTxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNm
b3JtZXIsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiwgQW5nbGVPck51bWJlclJhdz46OnRyYW5zZm9y
bTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpKTsKKyAgICBzdGF0aWMgZG91YmxlIHRyYW5zZm9ybShBbmdsZVJh
dyBhbmdsZVJhdykKKyAgICB7CisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29t
cHV0ZURlZ3JlZXMoYW5nbGVSYXcudHlwZSwgYW5nbGVSYXcudmFsdWUpOworICAgIH0KIAotICAg
IGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1
ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOworICAgIHN0YXRpYyBkb3VibGUgdHJhbnNmb3JtKE51bWJlclJhdyB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTsKICAgICB9Cit9OwogCi0gICAgcmV0
dXJuIG51bGxwdHI7Ci19CitzdHJ1Y3QgTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNm
b3JtZXIgOiBSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlPE51bWJlck9yUGVyY2VudERpdmlkZWRC
eTEwMFRyYW5zZm9ybWVyLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4sIE51bWJlck9yUGVyY2VudFJh
dz4geworICAgIHVzaW5nIFJhd1ZhcmlhbnRUcmFuc2Zvcm1lckJhc2U8TnVtYmVyT3JQZXJjZW50
RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXIsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiwgTnVtYmVyT3JQ
ZXJjZW50UmF3Pjo6dHJhbnNmb3JtOwogCi1zdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3Vt
ZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJz
ZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCi17
Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgCi0gICAgc3dpdGNoICh0b2tl
bi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25z
dW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVS
YW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOworICAgIHN0YXRpYyBkb3VibGUgdHJhbnNmb3Jt
KE51bWJlclJhdyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTsKKyAg
ICB9CiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUxl
bmd0aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdl
LCBwYXJzZXJNb2RlLCB1bml0bGVzcyk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAg
ICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFu
Z2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOwotCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7CisgICAgc3RhdGljIGRvdWJsZSB0cmFuc2Zvcm0oUGVyY2VudFJh
dyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSAvIDEwMC4wOwogICAg
IH0KK307CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorLy8gTUFSSzogTWV0YUNvbnN1
bWVyRGlzcGF0Y2hlcgogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQotewotICAgIGF1dG8m
IHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8Q1NTUGFyc2VyVG9rZW5UeXBlIHRva2Vu
VHlwZSwgdHlwZW5hbWUgQ29uc3VtZXIsIHR5cGVuYW1lID0gdm9pZD4KK3N0cnVjdCBNZXRhQ29u
c3VtZXJEaXNwYXRjaGVyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0
YXRpYyB0eXBlbmFtZSBDb25zdW1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBl
KCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVu
Z3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IE1ldGFD
b25zdW1lckRpc3BhdGNoZXI8RnVuY3Rpb25Ub2tlbiwgQ29uc3VtZXIsIHR5cGVuYW1lIHN0ZDo6
dm9pZF90PHR5cGVuYW1lIENvbnN1bWVyOjpGdW5jdGlvblRva2VuPj4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQg
Y29uc3VtZShBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBhcHBseVRyYW5z
Zm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6OkZ1bmN0aW9uVG9rZW46OmNvbnN1bWUoc3RkOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7CisgICAgfQorfTsKIAotICAgIGNhc2UgRGltZW5zaW9uVG9r
ZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci0gICAgCi0gICAg
Y2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVl
UmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IE1ldGFDb25zdW1lckRpc3BhdGNo
ZXI8TnVtYmVyVG9rZW4sIENvbnN1bWVyLCB0eXBlbmFtZSBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBD
b25zdW1lcjo6TnVtYmVyVG9rZW4+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
KyAgICBzdGF0aWMgdHlwZW5hbWUgQ29uc3VtZXI6OlJlc3VsdCBjb25zdW1lKEFyZ3MmJi4uLiBh
cmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGx5VHJhbnNmb3JtPENvbnN1bWVyPihDb25z
dW1lcjo6TnVtYmVyVG9rZW46OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7
CisgICAgfQorfTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29uc3VtZXI+CitzdHJ1Y3QgTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxQZXJjZW50YWdl
VG9rZW4sIENvbnN1bWVyLCB0eXBlbmFtZSBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBDb25zdW1lcjo6
UGVyY2VudGFnZVRva2VuPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAg
c3RhdGljIHR5cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4gYXJncykK
KyAgICB7CisgICAgICAgIHJldHVybiBhcHBseVRyYW5zZm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6
OlBlcmNlbnRhZ2VUb2tlbjo6Y29uc3VtZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsK
ICAgICB9Cit9OwogCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b25zdW1lcj4KK3N0cnVjdCBNZXRhQ29uc3VtZXJEaXNwYXRjaGVyPERpbWVuc2lvblRva2VuLCBD
b25zdW1lciwgdHlwZW5hbWUgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgQ29uc3VtZXI6OkRpbWVuc2lv
blRva2VuPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5
cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4gYXJncykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhcHBseVRyYW5zZm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6OkRpbWVuc2lv
blRva2VuOjpjb25zdW1lKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOworICAgIH0KK307
CiAKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIGNvbnN0IGF1dG8m
IHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3VtZXI+CitzdHJ1
Y3QgTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxJZGVudFRva2VuLCBDb25zdW1lciwgdHlwZW5hbWUg
c3RkOjp2b2lkX3Q8dHlwZW5hbWUgQ29uc3VtZXI6OklkZW50VG9rZW4+PiB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgdHlwZW5hbWUgQ29uc3VtZXI6OlJlc3Vs
dCBjb25zdW1lKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGx5VHJh
bnNmb3JtPENvbnN1bWVyPihDb25zdW1lcjo6SWRlbnRUb2tlbjo6Y29uc3VtZShzdGQ6OmZvcndh
cmQ8QXJncz4oYXJncykuLi4pKTsKKyAgICB9Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBl
KCkpIHsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyLCB0eXBlbmFtZS4uLiBBcmdzPgorYXV0
byBjb25zdW1lTWV0YUNvbnN1bWVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENT
U1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3Na
ZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBBcmdzJiYuLi4gYXJncykgLT4gdHlwZW5hbWUgQ29uc3Vt
ZXI6OlJlc3VsdAoreworICAgIHN3aXRjaCAocmFuZ2UucGVlaygpLnR5cGUoKSkgewogICAgIGNh
c2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSk7CisgICAgICAgIHJl
dHVybiBNZXRhQ29uc3VtZXJEaXNwYXRjaGVyPEZ1bmN0aW9uVG9rZW4sIENvbnN1bWVyPjo6Y29u
c3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNz
LCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiAKKyAgICBjYXNl
IE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxOdW1i
ZXJUb2tlbiwgQ29uc3VtZXI+Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKTsKKwogICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4g
Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKHJhbmdlLCB7IH0s
IHZhbHVlUmFuZ2UpOworICAgICAgICByZXR1cm4gTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxQZXJj
ZW50YWdlVG9rZW4sIENvbnN1bWVyPjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVl
UmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLik7CiAKKyAgICBjYXNlIERpbWVuc2lvblRva2VuOgorICAgICAgICByZXR1
cm4gTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxEaW1lbnNpb25Ub2tlbiwgQ29uc3VtZXI+Ojpjb25z
dW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKworICAgIGNhc2Ug
SWRlbnRUb2tlbjoKKyAgICAgICAgcmV0dXJuIE1ldGFDb25zdW1lckRpc3BhdGNoZXI8SWRlbnRU
b2tlbiwgQ29uc3VtZXI+Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKKyAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50
V29ya2VyU2FmZShyYW5nZSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7
Ci19CisvLyBNQVJLOiBTYW1lVG9rZW5NZXRhQ29uc3VtZXIKIAotUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIGF1
dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXIs
IHR5cGVuYW1lIENvbnN1bWVyc1R1cGxlLCBzaXplX3QgST4KK3N0cnVjdCBTYW1lVG9rZW5NZXRh
Q29uc3VtZXIgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5
cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4gYXJncykKKyAgICB7
CisgICAgICAgIHVzaW5nIFNlbGVjdGVkQ29uc3VtZXIgPSBzdGQ6OnR1cGxlX2VsZW1lbnRfdDxJ
IC0gMSwgQ29uc3VtZXJzVHVwbGU+OworICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBUcmFuc2Zv
cm1lcjo6dHJhbnNmb3JtKFNlbGVjdGVkQ29uc3VtZXI6OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gU2FtZVRva2VuTWV0YUNvbnN1bWVyPFRyYW5zZm9ybWVyLCBDb25zdW1lcnNUdXBsZSwgSSAt
IDE+Ojpjb25zdW1lKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorfTsKIAot
ICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAg
ICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcG9vbCk7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUcmFuc2Zvcm1lciwgdHlwZW5hbWUgQ29uc3VtZXJzVHVwbGU+CitzdHJ1
Y3QgU2FtZVRva2VuTWV0YUNvbnN1bWVyPFRyYW5zZm9ybWVyLCBDb25zdW1lcnNUdXBsZSwgMD4g
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1lIFRy
YW5zZm9ybWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4pCisgICAgeworICAgICAgICByZXR1
cm4gdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdCB7IH07CisgICAgfQorfTsKIAotICAgIGNh
c2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmlt
aXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9
LCB2YWx1ZVJhbmdlLCBwb29sKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYW5zZm9ybWVyLCB0eXBl
bmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KK3N0cnVjdCBTYW1lVG9rZW5NZXRhQ29uc3VtZXIgewor
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjpjb25qdW5jdGlvbl92PHN0ZDo6Ym9vbF9jb25zdGFudDxU
czo6dG9rZW5UeXBlID09IFQ6OnRva2VuVHlwZT4uLi4+LCAiQWxsIENvbnN1bWVycyBwYXNzZWQg
dG8gU2FtZVRva2VuTWV0YUNvbnN1bWVyIG11c3QgaGF2ZSB0aGUgc2FtZSB0b2tlblR5cGUiKTsK
KyAgICB1c2luZyBDb25zdW1lcnNUdXBsZSA9IHN0ZDo6dHVwbGU8VCwgVHMuLi4+OwogCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJU
b2tlblR5cGUgdG9rZW5UeXBlID0gVDo6dG9rZW5UeXBlOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQgY29uc3Vt
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVy
bywgQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSB0b2tlblR5cGUpOworICAgICAgICByZXR1cm4gU2FtZVRva2VuTWV0YUNvbnN1bWVy
PFRyYW5zZm9ybWVyLCBDb25zdW1lcnNUdXBsZSwgc3RkOjp0dXBsZV9zaXplX3Y8Q29uc3VtZXJz
VHVwbGU+Pjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1v
ZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7
CiAgICAgfQorfTsKIAotICAgIHJldHVybiBudWxscHRyOwotfQogCi1zdGQ6Om9wdGlvbmFsPEFu
Z2xlUmF3PiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJv
UXVpcmsgdW5pdGxlc3NaZXJvKQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwor
Ly8gTUFSSzogLSBDb25zdW1lciBkZWZpbml0aW9ucy4KIAotICAgIHN3aXRjaCAodG9rZW4udHlw
ZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUFu
Z2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6
QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKKy8vIE1BUks6IEludGVn
ZXIKIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lQW5n
bGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6
QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlcmdlclJhbmdlPgorc3RydWN0IEludGVnZXJU
eXBlUmF3Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8SW50VHlw
ZT47CiAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xl
UmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7Ci0gICAgICAgIGJyZWFrOworICAg
IHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBJbnRlZ2VyVHlwZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rp
b25Db25zdW1lcjxJbnRUeXBlLCBpbnRlcmdlclJhbmdlPjsKKyAgICB1c2luZyBOdW1iZXJUb2tl
biA9IEludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjxJbnRUeXBlLCBp
bnRlcmdlclJhbmdlPjsKK307CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlLCBJbnRlZ2VyUmFuZ2UgaW50ZXJnZXJSYW5nZT4K
K3N0cnVjdCBJbnRlZ2VyVHlwZUNvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+OwogCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KKyAgICB1
c2luZyBGdW5jdGlvblRva2VuID0gSW50ZWdlclR5cGVLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29u
c3VtZXI8SW50VHlwZSwgaW50ZXJnZXJSYW5nZT47CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBJ
bnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI8SW50VHlwZSwgaW50ZXJnZXJS
YW5nZT47Cit9OwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCi17Ci0gICAg
cmV0dXJuIGNvbnN1bWVBbmdsZVdvcmtlclNhZmUocmFuZ2UsIHBhcnNlck1vZGUsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCksIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pOwotfQorLy8gTUFSSzog
TnVtYmVyCiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlV29ya2VyU2Fm
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBD
U1NWYWx1ZVBvb2wmIHBvb2wsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1
aXJrIHVuaXRsZXNzWmVybykKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKK3N0
cnVjdCBOdW1iZXJSYXdDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25h
bDxOdW1iZXJSYXc+OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1
bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5n
ZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBwb29sKTsKKyAgICB1
c2luZyBGdW5jdGlvblRva2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyOworICAgIHVzaW5nIE51bWJlclRva2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1i
ZXJDb25zdW1lcjsKK307CiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1
cm4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlw
ZURpbWVuc2lvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIHVuaXRs
ZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpOworc3RydWN0IE51bWJlclJhd0FsbG93aW5nU3ltYm9s
VGFibGVJZGVudENvbnN1bWVyIDogTnVtYmVyUmF3Q29uc3VtZXIgeworICAgIHVzaW5nIElkZW50
VG9rZW4gPSBOdW1iZXJSYXdLbm93blRva2VuVHlwZUlkZW50Q29uc3VtZXI7Cit9OwogCi0gICAg
Y2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgVmFsdWVS
YW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBwb29sKTsKLSAg
ICAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IG51bGxwdHI7Ci19CitzdHJ1Y3QgTnVtYmVyQ29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZVRpbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQot
ewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9r
ZW4gPSBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVu
Y3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IE51bWJlckNTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKK307CiAKLSAg
ICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAg
ICAgcmV0dXJuIGNvbnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRs
ZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKy8vIE1BUks6IFBlcmNlbnQKIAotICAg
IGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lVGltZUNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkpOworc3RydWN0IFBlcmNlbnRSYXdDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3Rk
OjpvcHRpb25hbDxQZXJjZW50UmF3PjsKIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAg
IHJldHVybiBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tl
blR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBQ
ZXJjZW50UmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgIHVzaW5nIFBlcmNl
bnRhZ2VUb2tlbiA9IFBlcmNlbnRSYXdLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjsKK307
CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IG51bGxwdHI7Ci19CitzdHJ1Y3QgUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudENv
bnN1bWVyIDogUGVyY2VudFJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBJZGVudFRva2VuID0gUGVy
Y2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjsKK307CiAKLVJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Up
Ci17Ci0gICAgLy8gTk9URTogVW5saWtlIHRoZSBvdGhlciB0eXBlcywgY2FsYygpIGRvZXMgbm90
IHdvcmsgd2l0aCA8cmVzb2x1dGlvbj4uCitzdHJ1Y3QgUGVyY2VudENvbnN1bWVyIHsKKyAgICB1
c2luZyBSZXN1bHQgPSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+OwogCi0gICAgYXV0byYgdG9r
ZW4gPSByYW5nZS5wZWVrKCk7CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IFBlcmNlbnRDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsK
KyAgICB1c2luZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjsKK307CiAKLSAgICBzd2l0Y2gg
KHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVy
biBjb25zdW1lUmVzb2x1dGlvbkNTU1ByaW1pdGl2ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGlt
ZW5zaW9uKHJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLSAgICAKLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisvLyBNQVJLOiBMZW5ndGgKIAotICAgIHJldHVy
biBudWxscHRyOwotfQorc3RydWN0IExlbmd0aFJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1
bHQgPSBzdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz47CiAKLS8vIE1BUks6IC0gQ29tYmluYXRpb24g
Y29uc3VtZXJzICh0b2tlbiB0eXBlIHVua25vd24gYnkgY2FsbGVyKS4KKyAgICB1c2luZyBGdW5j
dGlvblRva2VuID0gTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAg
IHVzaW5nIERpbWVuc2lvblRva2VuID0gTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25D
b25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBl
TnVtYmVyQ29uc3VtZXI7Cit9OwogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lQW5nbGVPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNl
ck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVu
aXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9v
bCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpCi17Ci0gICAgYXV0byYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CitzdHJ1Y3QgTGVuZ3RoQ29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewot
ICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1l
QW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24o
cmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVy
bywgcG9vbCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIHJldHVybiBjb25z
dW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwb29sKTsKKyAgICB1c2luZyBGdW5jdGlvblRv
a2VuID0gTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uQ29uc3VtZXI7CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7CisgICAgdXNp
bmcgRGltZW5zaW9uVG9rZW4gPSBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI7Cit9OwogCi0gICAgY2FzZSBEaW1lbnNpb25U
b2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENh
bGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFy
c2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7Ci0gICAgCi0gICAgY2FzZSBO
dW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCk7CisvLyBNQVJLOiBBbmds
ZQogCi0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVy
Y2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdl
KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBvb2wpOwotICAgIAotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KK3N0cnVjdCBBbmdsZVJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBS
ZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PjsKIAotICAgIHJldHVybiBudWxscHRyOwot
fQorICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBBbmdsZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rp
b25Db25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IEFuZ2xlUmF3S25vd25Ub2tlblR5
cGVOdW1iZXJDb25zdW1lcjsKKyAgICB1c2luZyBEaW1lbnNpb25Ub2tlbiA9IEFuZ2xlUmF3S25v
d25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKK307CiAKLXN0ZDo6b3B0aW9uYWw8TGVuZ3Ro
T3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKLXsKLSAgICBhdXRvIGNvbnZlcnRUb0xlbmd0aE9y
UGVyY2VudFJhdyA9IFtdKGF1dG8gcmVzdWx0KSAtPiBzdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVy
Y2VudFJhdz4gewotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHsgKnJl
c3VsdCB9OwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH07CitzdHJ1Y3QgQW5n
bGVDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PjsKIAotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIHVzaW5nIEZ1bmN0aW9u
VG9rZW4gPSBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVG
dW5jdGlvbkNvbnN1bWVyOworICAgIHVzaW5nIE51bWJlclRva2VuID0gQW5nbGVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7CisgICAgdXNp
bmcgRGltZW5zaW9uVG9rZW4gPSBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKK307CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5
cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewotICAgICAgICBpZiAoYXV0byBsZW5n
dGggPSBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpKQotICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyhsZW5ndGgpOwotICAgICAgICBpZiAoYXV0byBw
ZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5n
ZSwgeyB9LCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGhP
clBlcmNlbnRSYXcocGVyY2VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKy8vIE1BUks6IFRp
bWUKIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9M
ZW5ndGhPclBlcmNlbnRSYXcoY29uc3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVu
c2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcykpOwotICAg
IAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGhP
clBlcmNlbnRSYXcoY29uc3VtZUxlbmd0aFJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5n
ZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcykpOworc3RydWN0IFRpbWVD
b25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsK
IAotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4gY29udmVydFRvTGVu
Z3RoT3JQZXJjZW50UmF3KGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVyY2Vu
dGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKSk7CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9
IFRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25D
b25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IFRpbWVDU1NQcmltaXRpdmVWYWx1ZVdp
dGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7CisgICAgdXNpbmcgRGltZW5z
aW9uVG9rZW4gPSBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlw
ZURpbWVuc2lvbkNvbnN1bWVyOworfTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KKy8vIE1BUks6IFJlc29sdXRpb24KIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19
CitzdHJ1Y3QgUmVzb2x1dGlvbkNvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+OwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVM
ZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
cGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNz
LCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSkKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKKyAgICAvLyBOT1RFOiBVbmxpa2UgdGhlIG90aGVyIHR5cGVzLCBjYWxjKCkg
ZG9lcyBub3Qgd29yayB3aXRoIDxyZXNvbHV0aW9uPi4KKyAgICB1c2luZyBEaW1lbnNpb25Ub2tl
biA9IFJlc29sdXRpb25DU1NQcmltaXRpdmVWYWx1ZVdpdGhLbm93blRva2VuVHlwZURpbWVuc2lv
bkNvbnN1bWVyOworfTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBG
dW5jdGlvblRva2VuOiB7Ci0gICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSB1c2luZyB0
cnlpbmcgdG8gZ2VuZXJhdGUgdGhlIGNhbGMgd2l0aCBib3RoIExlbmd0aCBhbmQgUGVyY2VudCBk
ZXN0aW5hdGlvbiBjYXRlZ29yeSB0eXBlcz8KLSAgICAgICAgQ2FsY1BhcnNlciBwYXJzZXIocmFu
Z2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSwgeyB9LCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UpOwotICAgICAgICBp
ZiAoYXV0byBjYWxjdWxhdGlvbiA9IHBhcnNlci52YWx1ZSgpOyBjYWxjdWxhdGlvbiAmJiBjYW5D
b25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBwYXJzZXJNb2RlKSkKLSAg
ICAgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlKCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KKy8vIE1BUks6IC0gQ29tYmluYXRpb24gY29uc3VtZXIgZGVmaW5pdGlvbnMuCiAKLSAg
ICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aENTU1By
aW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25z
dW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJl
cihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKSk7CisvLyBNQVJLOiBBbmdsZSArIFBlcmNlbnQKIAotICAgIGNhc2Ug
UGVyY2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2
YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK3N0cnVjdCBBbmdsZU9yUGVy
Y2VudENvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgdXNpbmcgRnVuY3Rpb25U
b2tlbiA9IFNhbWVUb2tlbk1ldGFDb25zdW1lcjwKKyAgICAgICAgSWRlbnRpdHlUcmFuc2Zvcm1l
cjxSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+PiwKKyAgICAgICAgQW5nbGVDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciwKKyAgICAgICAg
UGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bkNvbnN1bWVyCisgICAgPjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IEFuZ2xlQ1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOworICAgIHVz
aW5nIFBlcmNlbnRhZ2VUb2tlbiA9IFBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0
aEtub3duVG9rZW5UeXBlUGVyY2VudENvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2Vu
ID0gQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5z
aW9uQ29uc3VtZXI7Cit9OworCisvLyBNQVJLOiBMZW5ndGggKyBQZXJjZW50CisKK3N0cnVjdCBM
ZW5ndGhPclBlcmNlbnRSYXdUcmFuc2Zvcm1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpv
cHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IHRyYW5zZm9ybShU
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHsg
KnZhbHVlIH07CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgcmV0
dXJuIG51bGxwdHI7Ci19CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50
UmF3PiB0cmFuc2Zvcm0oc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KK307CiAKLS8vIE1BUks6IC0gQ29t
YmluYXRpb24gY29uc3VtZXJzIHRoYXQgYWxsb3cgbG9va3VwIGluIHRoZSBzeW1ib2wgdGFibGUg
Zm9yIElkZW50VG9rZW5zIChieSBkZWZhdWx0LCBvdGhlciBjb25zdW1lcnMgb25seSBsb29rdXAg
aW4gdGhlIHN5bWJvbCB0YWJsZSBmb3IgY2FsYygpKS4KK3N0cnVjdCBMZW5ndGhPclBlcmNlbnRS
YXdDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25hbDxMZW5ndGhPclBl
cmNlbnRSYXc+OworICAgIHVzaW5nIFRyYW5zZm9ybWVyID0gTGVuZ3RoT3JQZXJjZW50UmF3VHJh
bnNmb3JtZXI7CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlckFs
bG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0g
VmFsdWVSYW5nZTo6QWxsKQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAg
IHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBTYW1lVG9rZW5NZXRhQ29uc3VtZXI8CisgICAgICAgIExl
bmd0aE9yUGVyY2VudFJhd1RyYW5zZm9ybWVyLAorICAgICAgICBQZXJjZW50UmF3S25vd25Ub2tl
blR5cGVGdW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBMZW5ndGhSYXdLbm93blRva2VuVHlwZUZ1
bmN0aW9uQ29uc3VtZXIKKyAgICA+OworICAgIHVzaW5nIE51bWJlclRva2VuID0gTGVuZ3RoUmF3
S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICB1c2luZyBQZXJjZW50YWdlVG9rZW4g
PSBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXI7CisgICAgdXNpbmcgRGlt
ZW5zaW9uVG9rZW4gPSBMZW5ndGhSYXdLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOwor
fTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSk7CisvLyBNQVJLOiBBbmdsZSArIE51
bWJlcgogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1i
ZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJh
bmdlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQW5nbGVPck51bWJlclJhd0NvbnN1
bWVyIHsKKyAgICB1c2luZyBUcmFuc2Zvcm1lciA9IFQ7CisgICAgdXNpbmcgUmVzdWx0ID0gdHlw
ZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdDsKIAotICAgIGNhc2UgSWRlbnRUb2tlbjoKLSAgICAg
ICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVudChyYW5nZSwg
c3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBTYW1l
VG9rZW5NZXRhQ29uc3VtZXI8CisgICAgICAgIFRyYW5zZm9ybWVyLAorICAgICAgICBOdW1iZXJS
YXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIsCisgICAgICAgIEFuZ2xlUmF3S25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyCisgICAgPjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9
IE51bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7CisgICAgdXNpbmcgRGltZW5z
aW9uVG9rZW4gPSBBbmdsZVJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI7Cit9Owog
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3N0cnVjdCBBbmdsZU9yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3Vt
ZXIgOiBBbmdsZU9yTnVtYmVyUmF3Q29uc3VtZXI8VD4geworICAgIHVzaW5nIElkZW50VG9rZW4g
PSBBbmdsZU9yTnVtYmVyUmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyOworfTsKIAotICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19CisvLyBNQVJLOiBOdW1iZXIgKyBQZXJjZW50CiAKLXN0
YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRh
YmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFs
bCkKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgTnVtYmVyT3JQZXJjZW50UmF3Q29uc3VtZXIgeworICAgIHVzaW5nIFRyYW5z
Zm9ybWVyID0gVDsKKyAgICB1c2luZyBSZXN1bHQgPSB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVz
dWx0OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9r
ZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSk7CisgICAgdXNpbmcgRnVuY3Rp
b25Ub2tlbiA9IFNhbWVUb2tlbk1ldGFDb25zdW1lcjwKKyAgICAgICAgVHJhbnNmb3JtZXIsCisg
ICAgICAgIFBlcmNlbnRSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIsCisgICAgICAg
IE51bWJlclJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcgorICAgID47CisgICAgdXNp
bmcgTnVtYmVyVG9rZW4gPSBOdW1iZXJSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOwor
ICAgIHVzaW5nIFBlcmNlbnRhZ2VUb2tlbiA9IFBlcmNlbnRSYXdLbm93blRva2VuVHlwZVBlcmNl
bnRDb25zdW1lcjsKK307CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0
dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwg
c3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOwogCi0gICAgY2FzZSBJZGVudFRva2VuOgotICAgICAg
ICByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVudChyYW5nZSwg
c3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBO
dW1iZXJPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lciA6IE51bWJl
ck9yUGVyY2VudFJhd0NvbnN1bWVyPFQ+IHsKKyAgICB1c2luZyBJZGVudFRva2VuID0gTnVtYmVy
T3JQZXJjZW50UmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyOworfTsKIAotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisv
LyBNQVJLOiAtIENvbnN1bWVyIGZ1bmN0aW9ucyAtIHV0aWxpemUgY29uc3VtZXIgZGVmaW5pdGlv
bnMgYWJvdmUsIGdpdmluZyBtb3JlIHRhcmdldHRlZCBpbnRlcmZhY2VzIGFuZCBhbGxvd2luZyBl
eHBvc3VyZSB0byBvdGhlciBmaWxlcy4KKwordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50
ZWdlclJhbmdlIGludGVyZ2VyUmFuZ2U+IHN0ZDo6b3B0aW9uYWw8SW50VHlwZT4gY29uc3VtZUlu
dGVnZXJUeXBlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBj
b25zdW1lTWV0YUNvbnN1bWVyPEludGVnZXJUeXBlUmF3Q29uc3VtZXI8SW50VHlwZSwgaW50ZXJn
ZXJSYW5nZT4+KHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgQ1NTUGFyc2VyTW9kZTo6SFRN
TFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6
Rm9yYmlkKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lQW5nbGVS
YXdPck51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBw
YXJzZXJNb2RlKQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVy
Z2VyUmFuZ2U+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJUeXBlKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCiB7Ci0gICAgYXV0
byBjb21wdXRlRGVncmVlcyA9IFtdKGF1dG8gYW5nbGVSYXcpIC0+IHN0ZDo6b3B0aW9uYWw8ZG91
YmxlPiB7Ci0gICAgICAgIGlmIChhbmdsZVJhdykKLSAgICAgICAgICAgIHJldHVybiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMoYW5nbGVSYXctPnR5cGUsIGFuZ2xlUmF3LT52YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfTsKKyAgICByZXR1cm4gY29u
c3VtZU1ldGFDb25zdW1lcjxJbnRlZ2VyVHlwZUNvbnN1bWVyPEludFR5cGUsIGludGVyZ2VyUmFu
Z2U+PihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFu
ZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJp
ZCwgcG9vbCk7Cit9CiAKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKK3N0ZDo6b3B0
aW9uYWw8aW50PiBjb25zdW1lSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkK
K3sKKyAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PGludCwgSW50ZWdlclJhbmdlOjpB
bGw+KHJhbmdlKTsKK30KIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBG
dW5jdGlvblRva2VuOgotICAgICAgICBpZiAoYXV0byBhbmdsZVJhdyA9IGNvbnN1bWVBbmdsZVJh
d1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwg
cGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9y
YmlkKSkKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlRGVncmVlcyhhbmdsZVJhdyk7Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFu
Z2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsKTsKLSAgICAKLSAgICBjYXNlIERpbWVuc2lvblRva2Vu
OgotICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoY29uc3VtZUFuZ2xlUmF3V2l0aEtub3du
VG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSk7Ci0g
ICAgCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJS
YXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsKTsK
K1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZTxpbnQsIEludGVn
ZXJSYW5nZTo6QWxsPihyYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CiAKLSAg
ICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CitzdGQ6Om9wdGlvbmFsPGludD4gY29u
c3VtZUludGVnZXJaZXJvQW5kR3JlYXRlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkK
K3sKKyAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PGludCwgSW50ZWdlclJhbmdlOjpa
ZXJvQW5kR3JlYXRlcj4ocmFuZ2UpOworfQogCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBl
PGludCwgSW50ZWdlclJhbmdlOjpaZXJvQW5kR3JlYXRlcj4ocmFuZ2UsIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkpOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVB
bmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBDU1NQ
YXJzZXJNb2RlIHBhcnNlck1vZGUpCitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9z
aXRpdmVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewotICAgIGF1dG8g
Y29tcHV0ZURlZ3JlZXMgPSBbXShhdXRvIGFuZ2xlUmF3KSAtPiBzdGQ6Om9wdGlvbmFsPGRvdWJs
ZT4gewotICAgICAgICBpZiAoYW5nbGVSYXcpCi0gICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlUmF3LT50eXBlLCBhbmdsZVJhdy0+dmFsdWUp
OwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH07CisgICAgcmV0dXJuIGNvbnN1
bWVJbnRlZ2VyVHlwZVJhdzx1bnNpZ25lZCwgSW50ZWdlclJhbmdlOjpPbmVBbmRHcmVhdGVyPihy
YW5nZSk7Cit9CiAKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKK1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlPHVuc2lnbmVkLCBJbnRl
Z2VyUmFuZ2U6Ok9uZUFuZEdyZWF0ZXI+KHJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
KTsKK30KIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRv
a2VuOgotICAgICAgICBpZiAoYXV0byBhbmdsZVJhdyA9IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsLCBw
YXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3Ji
aWQpKQotICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVEZWdyZWVzKGFuZ2xlUmF3KTsKLSAgICAg
ICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5n
ZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCk7Ci0gICAgCi0gICAgY2FzZSBEaW1lbnNp
b25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVEZWdyZWVzKGNvbnN1bWVBbmdsZVJhd1dp
dGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBh
cnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJp
ZCkpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1l
TnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6
OkFsbCk7CitzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gY29uc3VtZU51bWJlclJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQoreworICAgIHJldHVy
biBjb25zdW1lTWV0YUNvbnN1bWVyPE51bWJlclJhd0NvbnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1
ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpG
b3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOworfQogCi0gICAgY2FzZSBJZGVudFRv
a2VuOgotICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldCh0b2tlbi5p
ZCgpKSkgewotICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkgewotICAgICAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19SQUQ6Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKLSAg
ICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgotICAgICAgICAgICAgICAgIHJh
bmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyh2YXJpYWJsZS0+dHlwZSwgdmFyaWFi
bGUtPnZhbHVlKTsKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gY29uc3VtZU51bWJl
ckFsbG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdl
ID0gVmFsdWVSYW5nZTo6QWxsKQoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPE51
bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudENvbnN1bWVyPihyYW5nZSwgc3ltYm9sVGFi
bGUsIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNz
UXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7Cit9CiAKLSAgICAgICAg
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgcmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFy
aWFibGUtPnZhbHVlOworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit7CisgICAg
cmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8TnVtYmVyQ29uc3VtZXI+KHJhbmdlLCB7IH0sIHZh
bHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6
OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKSk7Cit9CiAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CitzdGQ6Om9wdGlvbmFs
PFBlcmNlbnRSYXc+IGNvbnN1bWVQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3Vt
ZXI8UGVyY2VudFJhd0NvbnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJN
b2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVy
b1F1aXJrOjpGb3JiaWQpOworfQogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGVyY2VudFJhdz4gY29uc3VtZVBlcmNlbnRBbGxvd2lu
Z1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0Nh
bGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVl
UmFuZ2U6OkFsbCkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxQZXJjZW50UmF3
QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3VtZXI+KHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFs
dWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6
Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30KIAotICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit7CisgICAgcmV0
dXJuIGNvbnN1bWVQZXJjZW50V29ya2VyU2FmZShyYW5nZSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKSk7CiB9CiAKLS8vIE1BUks6IC0gQ29tYmluYXRpb24gY29uc3VtZXJz
IHdpdGggdHJhbnNmb3JtYXRpb25zIGJhc2VkIG9uIHJlc3VsdCB0eXBlLgorUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQorewor
ICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPFBlcmNlbnRDb25zdW1lcj4ocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NR
dWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBwb29sKTsKK30KIAotdGVt
cGxhdGU8dHlwZW5hbWUgTnVtYmVyVHJhbnNmb3JtZXIsIHR5cGVuYW1lIFBlcmNlbnRUcmFuc2Zv
cm1lcj4KLXN0YXRpYyBhdXRvIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgTnVtYmVyVHJhbnNmb3Jt
ZXImJiBudW1iZXJUcmFuc2Zvcm1lciwgUGVyY2VudFRyYW5zZm9ybWVyJiYgcGVyY2VudFRyYW5z
Zm9ybWVyKSAtPiBzdGQ6Om9wdGlvbmFsPGRlY2x0eXBlKG51bWJlclRyYW5zZm9ybWVyKHN0ZDo6
ZGVjbHZhbDxkb3VibGU+KCkpKT4KK3N0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVu
Z3RoUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKIHsKLSAg
ICBjb25zdCBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICByZXR1cm4gY29uc3VtZU1l
dGFDb25zdW1lcjxMZW5ndGhSYXdDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFy
c2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOworfQogCi0gICAg
c3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKLSAgICAg
ICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpKQotICAgICAgICAgICAgcmV0dXJuIG51bWJl
clRyYW5zZm9ybWVyKCpudW1iZXIpOwotICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3Vt
ZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJh
bmdlKSkKLSAgICAgICAgICAgIHJldHVybiBwZXJjZW50VHJhbnNmb3JtZXIoKnBlcmNlbnQpOwot
ICAgICAgICBicmVhazsKLSAgICB9CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVM
ZW5ndGgoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQoreworICAg
IHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPExlbmd0aENvbnN1bWVyPihyYW5nZSwgeyB9LCB2
YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJp
ZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VU
b2tlbjoKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtu
b3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKSkKLSAgICAgICAg
ICAgIHJldHVybiBwZXJjZW50VHJhbnNmb3JtZXIoKnBlcmNlbnQpOwotICAgICAgICBicmVhazsK
K3N0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRs
ZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCit7CisgICAgcmV0dXJuIGNvbnN1
bWVNZXRhQ29uc3VtZXI8QW5nbGVSYXdDb25zdW1lcj4ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6
QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKK30KIAotICAgIGNhc2Ug
TnVtYmVyVG9rZW46Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXdX
aXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVtYmVyVHJhbnNmb3JtZXIoKm51bWJlcik7Ci0gICAgICAgIGJyZWFrOwor
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVz
cywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQoreworICAgIHJldHVybiBjb25zdW1l
QW5nbGVXb3JrZXJTYWZlKHJhbmdlLCBwYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKK30KIAotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlV29y
a2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBDU1NWYWx1ZVBvb2wmIHBvb2wsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNz
WmVyb1F1aXJrIHVuaXRsZXNzWmVybykKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1l
cjxBbmdsZUNvbnN1bWVyPihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUs
IHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpOworfQogCi0gICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQoreworICAgIHJldHVybiBjb25zdW1lTWV0
YUNvbnN1bWVyPFRpbWVDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9k
ZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkpOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1i
ZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkKK1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Up
CiB7Ci0gICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXcocmFuZ2UsIHZhbHVl
UmFuZ2UsIFtdKGRvdWJsZSBudW1iZXIpIHsgcmV0dXJuIG51bWJlcjsgfSwgW10oZG91YmxlIHBl
cmNlbnQpIHsgcmV0dXJuIHBlcmNlbnQgLyAxMDAuMDsgfSk7CisgICAgcmV0dXJuIGNvbnN1bWVN
ZXRhQ29uc3VtZXI8UmVzb2x1dGlvbkNvbnN1bWVyPihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpB
bGwsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJp
ZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7
CiB9CiAKLS8vIE1BUks6IC0gQ29tYmluYXRpb24gY29uc3VtZXJzIHRoYXQgYm90aCBhbGxvdyBs
b29rdXAgaW4gdGhlIHN5bWJvbCB0YWJsZSBmb3IgSWRlbnRUb2tlbnMgYW5kIHRyYW5zZm9ybWF0
aW9ucyBiYXNlZCBvbiByZXN1bHQgdHlwZS4KK3N0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVBbmdsZU9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
UGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVp
cmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29s
JiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSkKK3sKKyAgICByZXR1cm4gY29uc3Vt
ZU1ldGFDb25zdW1lcjxBbmdsZU9yUGVyY2VudENvbnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJh
bmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBwb29sKTsKK30KIAotdGVt
cGxhdGU8dHlwZW5hbWUgTnVtYmVyVHJhbnNmb3JtZXIsIHR5cGVuYW1lIFBlcmNlbnRUcmFuc2Zv
cm1lcj4KLXN0YXRpYyBhdXRvIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRSYXdBbGxvd2luZ1N5
bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgTnVtYmVyVHJh
bnNmb3JtZXImJiBudW1iZXJUcmFuc2Zvcm1lciwgUGVyY2VudFRyYW5zZm9ybWVyJiYgcGVyY2Vu
dFRyYW5zZm9ybWVyKSAtPiBzdGQ6Om9wdGlvbmFsPGRlY2x0eXBlKG51bWJlclRyYW5zZm9ybWVy
KHN0ZDo6ZGVjbHZhbDxkb3VibGU+KCkpKT4KK3N0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50
UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxl
c3NRdWlyayB1bml0bGVzcykKIHsKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxMZW5n
dGhPclBlcmNlbnRSYXdDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9k
ZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOworfQorCisvLyBGSVhNRTog
VGhpcyBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgY3VycmVudCBzY2hlbWUgZHVlIHRvIHRoZSBOZWdh
dGl2ZVBlcmNlbnRhZ2VQb2xpY3kgcGFyYW1ldGVyCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJr
IHVuaXRsZXNzLCBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgbmVnYXRpdmVQZXJjZW50YWdlUG9s
aWN5KQorewogICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwogCiAgICAgc3dpdGNoICh0
b2tlbi50eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKLSAgICAgICAgaWYgKGF1
dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJh
bmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVtYmVy
VHJhbnNmb3JtZXIoKm51bWJlcik7Ci0gICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25zdW1l
UGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwg
dmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gcGVyY2VudFRyYW5zZm9ybWVyKCpwZXJj
ZW50KTsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIHVzaW5nIHRyeWluZyB0byBn
ZW5lcmF0ZSB0aGUgY2FsYyB3aXRoIGJvdGggTGVuZ3RoIGFuZCBQZXJjZW50IGRlc3RpbmF0aW9u
IGNhdGVnb3J5IHR5cGVzPworICAgICAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlLCB7IH0sIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCksIG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSk7CisgICAgICAgIGlmIChhdXRvIGNh
bGN1bGF0aW9uID0gcGFyc2VyLnZhbHVlKCk7IGNhbGN1bGF0aW9uICYmIGNhbkNvbnN1bWVDYWxj
VmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIHBhcnNlck1vZGUpKQorICAgICAgICAgICAg
cmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25z
dW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHN5bWJvbFRh
YmxlLCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBwZXJjZW50VHJhbnNmb3JtZXIo
KnBlcmNlbnQpOwotICAgICAgICBicmVhazsKKyAgICBjYXNlIERpbWVuc2lvblRva2VuOgorICAg
ICAgICByZXR1cm4gTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZURpbWVuc2lvbkNvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBh
cnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpKTsKIAogICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIGlmIChh
dXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFu
Z2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBudW1iZXJU
cmFuc2Zvcm1lcigqbnVtYmVyKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBMZW5n
dGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwog
Ci0gICAgY2FzZSBJZGVudFRva2VuOgotICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJv
bFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAodmFy
aWFibGUtPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5U
QUdFOgotICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVk
UGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBwZXJjZW50VHJhbnNmb3JtZXIoKnZhbGlkYXRlZFZhbHVlKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQZXJjZW50YWdl
VG9rZW46CisgICAgICAgIHJldHVybiBQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29uc3VtZShyYW5nZSwgeyB9LCB2YWx1
ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUg
PSB2YWxpZGF0ZWROdW1iZXJSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1ZVJhbmdlKSkgewotICAg
ICAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyVHJhbnNmb3JtZXIoKnZhbGlkYXRlZFZhbHVl
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRE
aXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYW5zZm9ybWVyPgorc3RhdGljIGF1
dG8gY29uc3VtZUFuZ2xlT3JOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENT
U1BhcnNlck1vZGUgcGFyc2VyTW9kZSkgLT4gdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdAog
ewotICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xU
YWJsZUlkZW50KHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgW10oZG91YmxlIG51bWJl
cikgeyByZXR1cm4gbnVtYmVyOyB9LCBbXShkb3VibGUgcGVyY2VudCkgeyByZXR1cm4gcGVyY2Vu
dCAvIDEwMC4wOyB9KTsKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxBbmdsZU9yTnVt
YmVyUmF3Q29uc3VtZXI8VHJhbnNmb3JtZXI+PihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGws
IHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZv
cmJpZCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYW5zZm9ybWVyPgorc3RhdGljIGF1dG8g
Y29uc3VtZUFuZ2xlT3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUs
IENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkgLT4gdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3Vs
dAoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPEFuZ2xlT3JOdW1iZXJSYXdBbGxv
d2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lcjxUcmFuc2Zvcm1lcj4+KHJhbmdlLCBzeW1ib2xU
YWJsZSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQs
IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFu
c2Zvcm1lcj4KK3N0YXRpYyBhdXRvIGNvbnN1bWVOdW1iZXJPclBlcmNlbnRSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFs
bCkgLT4gdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdAoreworICAgIHJldHVybiBjb25zdW1l
TWV0YUNvbnN1bWVyPE51bWJlck9yUGVyY2VudFJhd0NvbnN1bWVyPFRyYW5zZm9ybWVyPj4ocmFu
Z2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5p
dGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXI+CitzdGF0aWMgYXV0byBjb25zdW1lTnVtYmVyT3JQ
ZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UpIC0+IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQKK3sKKyAgICByZXR1cm4g
Y29uc3VtZU1ldGFDb25zdW1lcjxOdW1iZXJPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxl
SWRlbnRDb25zdW1lcjxUcmFuc2Zvcm1lcj4+KHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5n
ZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlk
LCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30KKworLy8gRklYTUU6IFRoaXMgbmVlZHMg
YSBtb3JlIGNsZWFyIG5hbWUgdG8gaW5kaWNhdGUgaXRzIGJlaGF2aW9yIG9mIGRpdmlkaW5nIHBl
cmNlbnRzIGJ5IDEwMCBvbmx5IGlmIGFuIGV4cGxpY2l0IHBlcmNlbnQgdG9rZW4sIG5vdCBpZiBh
IHJlc3VsdCBvZiBhIGNhbGMoKS4KIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51
bWJlck9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlKQogewogICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwogCiAgICAgc3dpdGNo
ICh0b2tlbi50eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIGlmIChh
dXRvIHZhbHVlID0gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpKSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBOdW1iZXJDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29uc3Vt
ZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2Rl
LCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1Zh
bHVlUG9vbDo6c2luZ2xldG9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAg
ICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiBQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NR
dWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpKTsKIAogICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgY2FzZSBQZXJjZW50YWdl
VG9rZW46IHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRE
aXZpZGVkQnkxMDBSYXcocmFuZ2UsIHZhbHVlUmFuZ2UpOwotICAgICAgICBpZiAodmFsdWUpCi0g
ICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgq
dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgcmV0dXJuIE51bWJlckNT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjo6
Y29uc3VtZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRh
cmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQs
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworCisgICAgY2FzZSBQZXJjZW50YWdlVG9rZW46
CisgICAgICAgIGlmIChhdXRvIHBlcmNlbnRSYXcgPSBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVQ
ZXJjZW50Q29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2Vy
TW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1pl
cm9RdWlyazo6Rm9yYmlkKSkKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVZhbHVlKHBlcmNlbnRSYXctPnZhbHVlIC8gMTAwLjAsIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQorCiAgICAgZGVmYXVsdDoKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI4Miw2ICsxMzk2LDggQEAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyT3JQZXJjZW50KENTU1BhCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKKy8vIE1BUks6IC0gTm9uLXByaW1pdGl2ZSBjb25zdW1lcnMuCisKIHN0ZDo6b3B0
aW9uYWw8ZG91YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKIHsKICAgICAvLyBWYWx1ZXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAgb3Ig
Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEwMDAgYXJlIHBhcnNlIGVycm9ycy4KQEAgLTEyOTcs
MTQgKzE0MTMsMTQgQEAgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVGb250V2VpZ2h0TnVt
YmVyUmF3KENTU1BhCiAgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0
aW9uVG9rZW46IHsKICAgICAgICAgLy8gIltGb3IgY2FsYygpXSwgdGhlIHVzZWQgdmFsdWUgcmVz
dWx0aW5nIGZyb20gYW4gZXhwcmVzc2lvbiBtdXN0IGJlIGNsYW1wZWQgdG8gdGhlIHJhbmdlIGFs
bG93ZWQgaW4gdGhlIHRhcmdldCBjb250ZXh0LiIKLSAgICAgICAgYXV0byByZXN1bHQgPSBjb25z
dW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgVmFsdWVS
YW5nZTo6QWxsKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBOdW1iZXJSYXdLbm93blRva2VuVHlw
ZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBD
U1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVu
aXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
ICAgIGJyZWFrOwogI2lmICFFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgICAgICBpZiAoISgq
cmVzdWx0ID4gMCAmJiAqcmVzdWx0IDwgMTAwMCkgfHwgIWlzSW50ZWdlckFuZERpdmlzaWJsZUJ5
MTAwKCpyZXN1bHQpKQorICAgICAgICBpZiAoIShyZXN1bHQtPnZhbHVlID4gMCAmJiByZXN1bHQt
PnZhbHVlIDwgMTAwMCkgfHwgIWlzSW50ZWdlckFuZERpdmlzaWJsZUJ5MTAwKHJlc3VsdC0+dmFs
dWUpKQogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIHN0ZDo6Y2xh
bXAoKnJlc3VsdCwgc3RkOjpuZXh0YWZ0ZXIoMC4wLCAxLjApLCBzdGQ6Om5leHRhZnRlcigxMDAw
LjAsIDAuMCkpOworICAgICAgICByZXR1cm4gc3RkOjpjbGFtcChyZXN1bHQtPnZhbHVlLCBzdGQ6
Om5leHRhZnRlcigwLjAsIDEuMCksIHN0ZDo6bmV4dGFmdGVyKDEwMDAuMCwgMC4wKSk7CiAgICAg
fQogCiAgICAgY2FzZSBOdW1iZXJUb2tlbjogewpAQCAtMTQ1Miw3ICsxNTY4LDcgQEAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lT3B0aW9uYWxBbHBoYShDU1NQCiAgICAgaWYg
KCFjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSkKICAgICAgICAgcmV0dXJu
IDEuMDsKIAotICAgIGlmIChhdXRvIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlclJhd09y
UGVyY2VudERpdmlkZWRCeTEwMFJhdyhyYW5nZSkpCisgICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0
ZXIgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3PE51bWJlck9yUGVyY2VudERpdmlkZWRCeTEw
MFRyYW5zZm9ybWVyPihyYW5nZSkpCiAgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKCphbHBoYVBh
cmFtZXRlciwgMC4wLCAxLjApOwogCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTE0NjMs
MjUgKzE1NzksMzkgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lT3B0aW9u
YWxBbHBoYUFsbG93CiAgICAgaWYgKCFjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKHJh
bmdlKSkKICAgICAgICAgcmV0dXJuIDEuMDsKIAotICAgIGlmIChhdXRvIGFscGhhUGFyYW1ldGVy
ID0gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEwMFJhd0FsbG93aW5nU3ltYm9s
VGFibGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCkpCisgICAgaWYg
KGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdT
eW1ib2xUYWJsZUlkZW50PE51bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFRyYW5zZm9ybWVyPihy
YW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCkpCiAgICAgICAgIHJldHVybiBzdGQ6
OmNsYW1wKCphbHBoYVBhcmFtZXRlciwgMC4wLCAxLjApOwogCiAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIH0KIAotc3RhdGljIHVpbnQ4X3Qgbm9ybWFsaXplUkdCQ29tcG9uZW50TnVtYmVyKGRv
dWJsZSB2YWx1ZSkKK3N0YXRpYyB1aW50OF90IG5vcm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcihO
dW1iZXJSYXcgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0
VG9TUkdCQUJ5dGUodmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9h
dFRvU1JHQkFCeXRlKHZhbHVlLnZhbHVlKTsKIH0KIAotc3RhdGljIHVpbnQ4X3Qgbm9ybWFsaXpl
UkdCQ29tcG9uZW50UGVyY2VudGFnZShkb3VibGUgdmFsdWUpCitzdGF0aWMgdWludDhfdCBub3Jt
YWxpemVSR0JDb21wb25lbnRQZXJjZW50YWdlKFBlcmNlbnRSYXcgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUgLyAxMDAuMCAq
IDI1NS4wKTsKKyAgICByZXR1cm4gY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0
ZSh2YWx1ZS52YWx1ZSAvIDEwMC4wICogMjU1LjApOwogfQogCitzdHJ1Y3QgUkdCTm9ybWFsaXpp
bmdUcmFuc2Zvcm1lciA6IFJhd1ZhcmlhbnRUcmFuc2Zvcm1lckJhc2U8UkdCTm9ybWFsaXppbmdU
cmFuc2Zvcm1lciwgc3RkOjpvcHRpb25hbDx1aW50OF90PiwgTnVtYmVyT3JQZXJjZW50UmF3PiB7
CisgICAgdXNpbmcgUmF3VmFyaWFudFRyYW5zZm9ybWVyQmFzZTxSR0JOb3JtYWxpemluZ1RyYW5z
Zm9ybWVyLCBzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+LCBOdW1iZXJPclBlcmNlbnRSYXc+Ojp0cmFu
c2Zvcm07CisKKyAgICBzdGF0aWMgdWludDhfdCB0cmFuc2Zvcm0oTnVtYmVyUmF3IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcih2YWx1ZSk7
CisgICAgfQorCisgICAgc3RhdGljIHVpbnQ4X3QgdHJhbnNmb3JtKFBlcmNlbnRSYXcgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gbm9ybWFsaXplUkdCQ29tcG9uZW50UGVyY2VudGFnZSh2
YWx1ZSk7CisgICAgfQorfTsKKwogc3RhdGljIHN0ZDo6b3B0aW9uYWw8dWludDhfdD4gY29uc3Vt
ZVJlbGF0aXZlUkdCQ29tcG9uZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQogewotICAgIHJldHVybiBjb25zdW1lTnVt
YmVyUmF3T3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KHJhbmdlLCBzeW1ib2xU
YWJsZSwgVmFsdWVSYW5nZTo6QWxsLCBub3JtYWxpemVSR0JDb21wb25lbnROdW1iZXIsIG5vcm1h
bGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UpOworICAgIHJldHVybiBjb25zdW1lTnVtYmVyT3JQ
ZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50PFJHQk5vcm1hbGl6aW5nVHJhbnNmb3Jt
ZXI+KHJhbmdlLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsKTsKIH0KIAogZW51bSBjbGFz
cyBSR0JDb21wb25lbnRUeXBlIHsgTnVtYmVyLCBQZXJjZW50YWdlIH07CkBAIC0xNDg5LDkgKzE2
MTksOSBAQCBzdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBvbmVudChkb3VibGUgdmFsdWUsIFJH
QkNvbXAKIHsKICAgICBzd2l0Y2ggKGNvbXBvbmVudFR5cGUpIHsKICAgICBjYXNlIFJHQkNvbXBv
bmVudFR5cGU6Ok51bWJlcjoKLSAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJHQkNvbXBvbmVudE51
bWJlcih2YWx1ZSk7CisgICAgICAgIHJldHVybiBub3JtYWxpemVSR0JDb21wb25lbnROdW1iZXIo
eyB2YWx1ZSB9KTsKICAgICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2U6Ci0gICAg
ICAgIHJldHVybiBub3JtYWxpemVSR0JDb21wb25lbnRQZXJjZW50YWdlKHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIG5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UoeyB2YWx1ZSB9KTsKICAg
ICB9CiAgICAgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNTE5LDcgKzE2NDksNyBA
QCBzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVSR0JPckhTTE9wdGlvbmFsQWwK
ICAgICBpZiAoIWNvbnN1bWVSR0JPckhTTEFscGhhU2VwYXJhdG9yKGFyZ3MsIHN5bnRheCkpCiAg
ICAgICAgIHJldHVybiAxLjA7CiAKLSAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd09yUGVyY2Vu
dERpdmlkZWRCeTEwMFJhdyhhcmdzKTsKKyAgICByZXR1cm4gY29uc3VtZU51bWJlck9yUGVyY2Vu
dFJhdzxOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lcj4oYXJncyk7CiB9CiAK
IHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlUkdCUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJh
bmdlJiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQpAQCAtMTU3MywxOCAr
MTcwMywyMiBAQCBzdGF0aWMgQ29sb3IgcGFyc2VOb25SZWxhdGl2ZVJHQlBhcmFtZXRlcnMoQ1NT
UGFyc2VyVG8KIAogICAgIGF1dG8gY29uc3VtZUluaXRpYWxDb21wb25lbnQgPSBbXShhdXRvJiBh
cmdzKSAtPiBzdGQ6Om9wdGlvbmFsPEluaXRpYWxDb21wb25lbnQ+IHsKICAgICAgICAgaWYgKGF1
dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkKLSAgICAgICAgICAgIHJldHVybiB7
IHsgKm51bWJlciwgUkdCQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0gfTsKKyAgICAgICAgICAgIHJl
dHVybiB7IHsgbnVtYmVyLT52YWx1ZSwgUkdCQ29tcG9uZW50VHlwZTo6TnVtYmVyIH0gfTsKICAg
ICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKQotICAgICAg
ICAgICAgcmV0dXJuIHsgeyAqcGVyY2VudCwgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZSB9
IH07CisgICAgICAgICAgICByZXR1cm4geyB7IHBlcmNlbnQtPnZhbHVlLCBSR0JDb21wb25lbnRU
eXBlOjpQZXJjZW50YWdlIH0gfTsKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9
OwogCi0gICAgYXV0byBjb25zdW1lQ29tcG9uZW50ID0gW10oYXV0byYgYXJncywgYXV0byBjb21w
b25lbnRUeXBlKSB7CisgICAgYXV0byBjb25zdW1lQ29tcG9uZW50ID0gW10oYXV0byYgYXJncywg
YXV0byBjb21wb25lbnRUeXBlKSAtPiBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gewogICAgICAgICBz
d2l0Y2ggKGNvbXBvbmVudFR5cGUpIHsKICAgICAgICAgY2FzZSBSR0JDb21wb25lbnRUeXBlOjpQ
ZXJjZW50YWdlOgotICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOwor
ICAgICAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBwZXJjZW50LT52YWx1ZTsKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIGNhc2UgUkdCQ29tcG9uZW50VHlwZTo6TnVtYmVyOgot
ICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXcoYXJncyk7CisgICAgICAgICAgICBp
ZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpKQorICAgICAgICAgICAgICAg
IHJldHVybiBudW1iZXItPnZhbHVlOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
ICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH07
CkBAIC0xNjY4LDcgKzE4MDIsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUhTTFBhcmFt
ZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAgICAgICAgeyBDU1NWYWx1ZUFscGhhLCBDU1NVbml0VHlw
ZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNIU0wuYWxwaGEgKiAxMDAuMCB9CiAgICAg
fTsKIAotICAgIGF1dG8gaHVlID0gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXdBbGxvd2luZ1N5
bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUsIGNvbnRleHQubW9kZSk7CisgICAgYXV0
byBodWUgPSBjb25zdW1lQW5nbGVPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudDxB
bmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI+KGFyZ3MsIHN5bWJvbFRhYmxlLCBj
b250ZXh0Lm1vZGUpOwogICAgIGlmICghaHVlKQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0x
Njg3LDEyICsxODIxLDEyIEBAIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlSFNMUGFyYW1ldGVy
cyhDU1NQYXJzZXJUb2tlbgogICAgIGlmICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgcmV0dXJuIGNvbG9yQnlOb3JtYWxpemluZ0hTTENvbXBvbmVudHMoKmh1ZSwg
KnNhdHVyYXRpb24sICpsaWdodG5lc3MsICphbHBoYSk7CisgICAgcmV0dXJuIGNvbG9yQnlOb3Jt
YWxpemluZ0hTTENvbXBvbmVudHMoKmh1ZSwgc2F0dXJhdGlvbi0+dmFsdWUsIGxpZ2h0bmVzcy0+
dmFsdWUsICphbHBoYSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZU5vblJlbGF0aXZlSFNMUGFy
YW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBjb250ZXh0KQogewotICAgIGF1dG8gaHVlID0gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXco
YXJncywgY29udGV4dC5tb2RlKTsKKyAgICBhdXRvIGh1ZSA9IGNvbnN1bWVBbmdsZU9yTnVtYmVy
UmF3PEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lcj4oYXJncywgY29udGV4dC5t
b2RlKTsKICAgICBpZiAoIWh1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTcxNiw3ICsx
ODUwLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlTm9uUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENTU1Bh
cnNlclRvCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICByZXR1cm4gY29sb3JCeU5vcm1hbGl6aW5nSFNMQ29tcG9uZW50cygqaHVlLCAqc2F0dXJhdGlv
biwgKmxpZ2h0bmVzcywgKmFscGhhKTsKKyAgICByZXR1cm4gY29sb3JCeU5vcm1hbGl6aW5nSFNM
Q29tcG9uZW50cygqaHVlLCBzYXR1cmF0aW9uLT52YWx1ZSwgbGlnaHRuZXNzLT52YWx1ZSwgKmFs
cGhhKTsKIH0KIAogZW51bSBjbGFzcyBIU0xGdW5jdGlvbk1vZGUgeyBIU0wsIEhTTEEgfTsKQEAg
LTE3NTcsNyArMTg5MSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUhXQlBhcmFtZXRlcnMoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgYQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgYXV0byBub3JtYWxp
emVkSHVlID0gbm9ybWFsaXplSHVlKCpodWUpOwotICAgIGF1dG8gW25vcm1hbGl6ZWRXaGl0bmVz
cywgbm9ybWFsaXplZEJsYWNrbmVzc10gPSBub3JtYWxpemVXaGl0ZW5lc3NCbGFja25lc3MoKndo
aXRlbmVzcywgKmJsYWNrbmVzcyk7CisgICAgYXV0byBbbm9ybWFsaXplZFdoaXRuZXNzLCBub3Jt
YWxpemVkQmxhY2tuZXNzXSA9IG5vcm1hbGl6ZVdoaXRlbmVzc0JsYWNrbmVzcyh3aGl0ZW5lc3Mt
PnZhbHVlLCBibGFja25lc3MtPnZhbHVlKTsKIAogICAgIC8vIE5PVEU6IFRoZSBleHBsaWNpdCBj
b252ZXJzaW9uIHRvIFNSR0JBPHVpbnQ4X3Q+IGlzIGludGVudGlvbmFsIGZvciBwZXJmb3JtYW5j
ZSAobm8gZXh0cmEgYWxsb2NhdGlvbiBmb3IKICAgICAvLyB0aGUgZXh0ZW5kZWQgY29sb3IpIGFu
ZCBjb21wYXRhYmlsaXR5LCBmb3JjaW5nIHNlcmlhbGlhemF0aW9uIHRvIHVzZSB0aGUgcmdiKCkv
cmdiYSgpIGZvcm0uCkBAIC0xNzgyLDcgKzE5MTYsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxh
dGl2ZUhXQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAgICAgICAgeyBDU1NWYWx1ZUFscGhh
LCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNIV0IuYWxwaGEgKiAx
MDAuMCB9CiAgICAgfTsKIAotICAgIGF1dG8gaHVlQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlLCAm
Y29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXdB
bGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUsIGNvbnRleHQubW9kZSk7
IH07CisgICAgYXV0byBodWVDb25zdW1lciA9IFsmc3ltYm9sVGFibGUsICZjb250ZXh0XShhdXRv
JiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFi
bGVJZGVudDxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI+KGFyZ3MsIHN5bWJv
bFRhYmxlLCBjb250ZXh0Lm1vZGUpOyB9OwogICAgIGF1dG8gd2hpdGVuZXNzQW5kQmxhY2tuZXNz
Q29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lUGVy
Y2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7IH07CiAgICAg
YXV0byBhbHBoYUNvbnN1bWVyID0gWyZzeW1ib2xUYWJsZV0oYXV0byYgYXJncykgeyByZXR1cm4g
Y29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9s
VGFibGUpOyB9OwogCkBAIC0xNzkxLDcgKzE5MjUsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxh
dGl2ZUhXQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KIAogc3RhdGljIENvbG9yIHBhcnNlTm9u
UmVsYXRpdmVIV0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGFyZ3MsIGNvbnN0IENT
U1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYXV0byBodWVDb25zdW1lciA9IFsmY29u
dGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoYXJn
cywgY29udGV4dC5tb2RlKTsgfTsKKyAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZjb250ZXh0XShh
dXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVPck51bWJlclJhdzxBbmdsZU9yTnVtYmVy
UmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI+KGFyZ3MsIGNvbnRleHQubW9kZSk7IH07CiAgICAgYXV0
byB3aGl0ZW5lc3NBbmRCbGFja25lc3NDb25zdW1lciA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJu
IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOyB9OwogICAgIGF1dG8gYWxwaGFDb25zdW1lciA9IFtd
KGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVPcHRpb25hbEFscGhhKGFyZ3MpOyB9OwogCkBA
IC0xODM0LDkgKzE5NjgsOSBAQCBzdGF0aWMgQ29sb3IgcGFyc2VMYWJQYXJhbWV0ZXJzKENTU1Bh
cnNlclRva2VuUmFuZ2UmIGEKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgIGF1dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9IHN0ZDo6bWF4KDAuMCwgKmxp
Z2h0bmVzcyk7CisgICAgYXV0byBub3JtYWxpemVkTGlnaHRuZXNzID0gc3RkOjptYXgoMC4wLCBs
aWdodG5lc3MtPnZhbHVlKTsKIAotICAgIHJldHVybiBDb2xvclR5cGUgeyBzdGF0aWNfY2FzdDxm
bG9hdD4obm9ybWFsaXplZExpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PigqYVZhbHVlKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KCpiVmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9
OworICAgIHJldHVybiBDb2xvclR5cGUgeyBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZExp
Z2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PihhVmFsdWUtPnZhbHVlKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGJWYWx1ZS0+dmFsdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFscGhhKSB9OwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+CkBAIC0xOTEyLDggKzIwNDYsOCBAQCBzdGF0
aWMgQ29sb3IgcGFyc2VMQ0hQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGEKICAgICBp
ZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gbm9ybWFs
aXplZExpZ2h0bmVzcyA9IHN0ZDo6bWF4KDAuMCwgKmxpZ2h0bmVzcyk7Ci0gICAgYXV0byBub3Jt
YWxpemVkQ2hyb21hID0gc3RkOjptYXgoMC4wLCAqY2hyb21hKTsKKyAgICBhdXRvIG5vcm1hbGl6
ZWRMaWdodG5lc3MgPSBzdGQ6Om1heCgwLjAsIGxpZ2h0bmVzcy0+dmFsdWUpOworICAgIGF1dG8g
bm9ybWFsaXplZENocm9tYSA9IHN0ZDo6bWF4KDAuMCwgY2hyb21hLT52YWx1ZSk7CiAgICAgYXV0
byBub3JtYWxpemVkSHVlID0gbm9ybWFsaXplSHVlKCpodWUpOwogCiAgICAgcmV0dXJuIENvbG9y
VHlwZSB7IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkTGlnaHRuZXNzKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRDaHJvbWEpLCBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXpl
ZEh1ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07CkBAIC0xOTQwLDcgKzIwNzQsNyBA
QCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxDSFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4K
IAogICAgIGF1dG8gbGlnaHRuZXNzQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdz
KSB7IHJldHVybiBjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBz
eW1ib2xUYWJsZSk7IH07CiAgICAgYXV0byBjaHJvbWFDb25zdW1lciA9IFsmc3ltYm9sVGFibGVd
KGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJBbGxvd2luZ1N5bWJvbFRhYmxlSWRl
bnQoYXJncywgc3ltYm9sVGFibGUpOyB9OwotICAgIGF1dG8gaHVlQ29uc3VtZXIgPSBbJnN5bWJv
bFRhYmxlLCAmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFuZ2xlUmF3T3JO
dW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUsIGNvbnRl
eHQubW9kZSk7IH07CisgICAgYXV0byBodWVDb25zdW1lciA9IFsmc3ltYm9sVGFibGUsICZjb250
ZXh0XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVPck51bWJlclJhd0FsbG93aW5n
U3ltYm9sVGFibGVJZGVudDxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI+KGFy
Z3MsIHN5bWJvbFRhYmxlLCBjb250ZXh0Lm1vZGUpOyB9OwogICAgIGF1dG8gYWxwaGFDb25zdW1l
ciA9IFsmc3ltYm9sVGFibGVdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVPcHRpb25hbEFs
cGhhQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsgfTsKIAogICAg
IHJldHVybiBwYXJzZUxDSFBhcmFtZXRlcnM8Q29sb3JUeXBlPihhcmdzLCBXVEZNb3ZlKGxpZ2h0
bmVzc0NvbnN1bWVyKSwgV1RGTW92ZShjaHJvbWFDb25zdW1lciksIFdURk1vdmUoaHVlQ29uc3Vt
ZXIpLCBXVEZNb3ZlKGFscGhhQ29uc3VtZXIpKTsKQEAgLTE5NTEsNyArMjA4NSw3IEBAIHN0YXRp
YyBDb2xvciBwYXJzZU5vblJlbGF0aXZlTENIUGFyYW1ldGVycyhDU1NQYXJzZXJUbwogewogICAg
IGF1dG8gbGlnaHRuZXNzQ29uc3VtZXIgPSBbXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1l
UGVyY2VudFJhdyhhcmdzKTsgfTsKICAgICBhdXRvIGNocm9tYUNvbnN1bWVyID0gW10oYXV0byYg
YXJncykgeyByZXR1cm4gY29uc3VtZU51bWJlclJhdyhhcmdzKTsgfTsKLSAgICBhdXRvIGh1ZUNv
bnN1bWVyID0gWyZjb250ZXh0XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVSYXdP
ck51bWJlclJhdyhhcmdzLCBjb250ZXh0Lm1vZGUpOyB9OworICAgIGF1dG8gaHVlQ29uc3VtZXIg
PSBbJmNvbnRleHRdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3
PEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lcj4oYXJncywgY29udGV4dC5tb2Rl
KTsgfTsKICAgICBhdXRvIGFscGhhQ29uc3VtZXIgPSBbXShhdXRvJiBhcmdzKSB7IHJldHVybiBj
b25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsgfTsKIAogICAgIHJldHVybiBwYXJzZUxDSFBhcmFt
ZXRlcnM8Q29sb3JUeXBlPihhcmdzLCBXVEZNb3ZlKGxpZ2h0bmVzc0NvbnN1bWVyKSwgV1RGTW92
ZShjaHJvbWFDb25zdW1lciksIFdURk1vdmUoaHVlQ29uc3VtZXIpLCBXVEZNb3ZlKGFscGhhQ29u
c3VtZXIpKTsKQEAgLTIwMTYsNyArMjE1MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENvbG9yVHlw
ZT4gc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdgogICAgICAgICB7IENTU1ZhbHVlQWxwaGEsIENT
U1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29sb3JBc0NvbG9yVHlwZS5hbHBoYSAq
IDEwMC4wIH0KICAgICB9OwogCi0gICAgYXV0byBjb25zdW1lUkdCID0gWyZzeW1ib2xUYWJsZV0o
YXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEw
MFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZTo6QWxsKTsgfTsKKyAgICBhdXRvIGNvbnN1bWVSR0IgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBh
cmdzKSB7IHJldHVybiBjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJs
ZUlkZW50PE51bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFRyYW5zZm9ybWVyPihhcmdzLCBzeW1i
b2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsKTsgfTsKICAgICBhdXRvIGNvbnN1bWVBbHBoYSA9IFsm
c3ltYm9sVGFibGVdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVPcHRpb25hbEFscGhhQWxs
b3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsgfTsKIAogICAgIHJldHVy
biBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlczxDb2xvclR5cGU+KGFyZ3MsIFdURk1vdmUo
Y29uc3VtZVJHQiksIFdURk1vdmUoY29uc3VtZUFscGhhKSk7CkBAIC0yMDMyLDcgKzIxNjYsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnUK
IAogICAgIGNvbnN1bWVJZGVudFJhdyhhcmdzKTsKIAotICAgIGF1dG8gY29uc3VtZVJHQiA9IFtd
KGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkx
MDBSYXcoYXJncyk7IH07CisgICAgYXV0byBjb25zdW1lUkdCID0gW10oYXV0byYgYXJncykgeyBy
ZXR1cm4gY29uc3VtZU51bWJlck9yUGVyY2VudFJhdzxOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkx
MDBUcmFuc2Zvcm1lcj4oYXJncyk7IH07CiAgICAgYXV0byBjb25zdW1lQWxwaGEgPSBbXShhdXRv
JiBhcmdzKSB7IHJldHVybiBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsgfTsKIAogICAgIHJl
dHVybiBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlczxDb2xvclR5cGU+KGFyZ3MsIFdURk1v
dmUoY29uc3VtZVJHQiksIFdURk1vdmUoY29uc3VtZUFscGhhKSk7CkBAIC0yMDQ2LDcgKzIxODAs
NyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9uRm9yWFlaVHlwZXMoQ1NTUGFyc2Vy
VG8KICAgICAgICAgYXV0byB2YWx1ZSA9IHh5ekNvbnN1bWVyKGFyZ3MpOwogICAgICAgICBpZiAo
IXZhbHVlKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNoYW5uZWwgPSAqdmFsdWU7Cisg
ICAgICAgIGNoYW5uZWwgPSB2YWx1ZS0+dmFsdWU7CiAgICAgfQogCiAgICAgYXV0byBhbHBoYSA9
IGFscGhhQ29uc3VtZXIoYXJncyk7CkBAIC0yMjQ0LDEzICsyMzc4LDEzIEBAIHN0YXRpYyBDb2xv
ciBwYXJzZUNvbG9yQ29udHJhc3RGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUAogICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgaWYgKGNvbnN1bWVkVG8pIHsKLSAgICAgICAgYXV0byB0YXJnZXRDb250
cmFzdCA9IFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4geworICAgICAgICBhdXRvIHRh
cmdldENvbnRyYXN0ID0gWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PiB7CiAgICAg
ICAgICAgICBpZiAoYXJncy5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pIHsKLSAgICAgICAg
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6cGFpcjxDU1NWYWx1ZUlELCBkb3VibGU+IHRh
cmdldENvbnRyYXN0TWFwcGluZ3NbXSB7Ci0gICAgICAgICAgICAgICAgICAgIHsgQ1NTVmFsdWVB
QSwgNC41IH0sCi0gICAgICAgICAgICAgICAgICAgIHsgQ1NTVmFsdWVBQUxhcmdlLCAzLjAgfSwK
LSAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFBQSwgNy4wIH0sCi0gICAgICAgICAgICAg
ICAgICAgIHsgQ1NTVmFsdWVBQUFMYXJnZSwgNC41IH0sCisgICAgICAgICAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciBzdGQ6OnBhaXI8Q1NTVmFsdWVJRCwgTnVtYmVyUmF3PiB0YXJnZXRDb250cmFz
dE1hcHBpbmdzW10geworICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUEsIE51bWJlclJh
dyB7IDQuNSB9IH0sCisgICAgICAgICAgICAgICAgICAgIHsgQ1NTVmFsdWVBQUxhcmdlLCBOdW1i
ZXJSYXcgeyAzLjAgfSB9LAorICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUFBLCBOdW1i
ZXJSYXcgeyA3LjAgfSB9LAorICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUFBTGFyZ2Us
IE51bWJlclJhdyB7IDQuNSB9IH0sCiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAg
ICBzdGF0aWMgY29uc3RleHByIFNvcnRlZEFycmF5TWFwIHRhcmdldENvbnRyYXN0TWFwIHsgdGFy
Z2V0Q29udHJhc3RNYXBwaW5ncyB9OwogICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSB0YXJn
ZXRDb250cmFzdE1hcC50cnlHZXQoYXJncy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlk
KCkpOwpAQCAtMjI2Myw3ICsyMzk3LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JDb250cmFz
dEZ1bmN0aW9uUGFyYW1ldGVycyhDU1NQCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAg
ICAKICAgICAgICAgLy8gV2hlbiBhIHRhcmdldCBjb25zdGFzdCBpcyBzcGVjaWZpZWQsIHdlIHNl
bGVjdCAidGhlIGZpcnN0IGNvbG9yIGNvbG9yIHRvIG1lZXQgb3IgZXhjZWVkIHRoZSB0YXJnZXQg
Y29udHJhc3QuIgotICAgICAgICByZXR1cm4gc2VsZWN0Rmlyc3RDb2xvclRoYXRNZWV0c09yRXhj
ZWVkc1RhcmdldENvbnRyYXN0KG9yaWdpbkJhY2tncm91bmRDb2xvciwgV1RGTW92ZShjb2xvcnNU
b0NvbXBhcmVBZ2FpbnN0KSwgKnRhcmdldENvbnRyYXN0KTsKKyAgICAgICAgcmV0dXJuIHNlbGVj
dEZpcnN0Q29sb3JUaGF0TWVldHNPckV4Y2VlZHNUYXJnZXRDb250cmFzdChvcmlnaW5CYWNrZ3Jv
dW5kQ29sb3IsIFdURk1vdmUoY29sb3JzVG9Db21wYXJlQWdhaW5zdCksIHRhcmdldENvbnRyYXN0
LT52YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gV2hlbiBhIHRhcmdldCBjb25zdGFzdCBpcyBOT1Qg
c3BlY2lmaWVkLCB3ZSBzZWxlY3QgInRoZSBmaXJzdCBjb2xvciB3aXRoIHRoZSBoaWdoZXN0IGNv
bnRyYXN0IHRvIHRoZSBzaW5nbGUgY29sb3IuIgpAQCAtMjM2Niw5ICsyNTAwLDkgQEAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8Q29sb3JNaXhDb21wb25lbnQ+IGNvbnN1bWVDb2xvck1pCiAgICAgQ29s
b3JNaXhDb21wb25lbnQgcmVzdWx0OwogCiAgICAgaWYgKGF1dG8gcGVyY2VudGFnZSA9IGNvbnN1
bWVQZXJjZW50UmF3KGFyZ3MpKSB7Ci0gICAgICAgIGlmICgqcGVyY2VudGFnZSA8IDAuMCB8fCAq
cGVyY2VudGFnZSA+IDEwMC4wKQorICAgICAgICBpZiAocGVyY2VudGFnZS0+dmFsdWUgPCAwLjAg
fHwgcGVyY2VudGFnZS0+dmFsdWUgPiAxMDAuMCkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgICAgIHJlc3VsdC5wZXJjZW50YWdlID0gcGVyY2VudGFnZTsKKyAgICAgICAgcmVzdWx0LnBl
cmNlbnRhZ2UgPSBwZXJjZW50YWdlLT52YWx1ZTsKICAgICB9CiAKICAgICByZXN1bHQuY29sb3Ig
PSBjb25zdW1lT3JpZ2luQ29sb3IoYXJncywgY29udGV4dCk7CkBAIC0yMzc3LDkgKzI1MTEsOSBA
QCBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb2xvck1peENvbXBvbmVudD4gY29uc3VtZUNvbG9yTWkK
IAogICAgIGlmICghcmVzdWx0LnBlcmNlbnRhZ2UpIHsKICAgICAgICAgaWYgKGF1dG8gcGVyY2Vu
dGFnZSA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKSB7Ci0gICAgICAgICAgICBpZiAoKnBlcmNl
bnRhZ2UgPCAwLjAgfHwgKnBlcmNlbnRhZ2UgPiAxMDAuMCkKKyAgICAgICAgICAgIGlmIChwZXJj
ZW50YWdlLT52YWx1ZSA8IDAuMCB8fCBwZXJjZW50YWdlLT52YWx1ZSA+IDEwMC4wKQogICAgICAg
ICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICByZXN1bHQucGVyY2VudGFnZSA9IHBl
cmNlbnRhZ2U7CisgICAgICAgICAgICByZXN1bHQucGVyY2VudGFnZSA9IHBlcmNlbnRhZ2UtPnZh
bHVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNjQ2LDExICsyNzgwLDExIEBAIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUNvbG9yKENTU1BhcnNlclRva2VuUgogICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGNvbG9yKTsKIH0KIAotc3Rh
dGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmsgdW5pdGxlc3MsIGJvb2wgYWxsb3dzTmVnYXRpdmVQZXJjZW50YWdlID0gZmFsc2Up
CitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpb25Db21wb25l
bnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyayB1bml0bGVzcywgTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5IG5lZ2F0aXZl
UGVyY2VudGFnZVBvbGljeSA9IE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeTo6Rm9yYmlkKQogewog
ICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pCiAgICAgICAgIHJldHVy
biBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVMZWZ0LCBDU1NWYWx1ZVRvcCwgQ1NTVmFsdWVCb3R0b20s
IENTU1ZhbHVlUmlnaHQsIENTU1ZhbHVlQ2VudGVyPihyYW5nZSk7Ci0gICAgcmV0dXJuIGNvbnN1
bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2U6OkFsbCwgdW5p
dGxlc3MsIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSk7CisgICAgcmV0dXJuIGNvbnN1bWVMZW5n
dGhPclBlcmNlbnQocmFuZ2UsIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2U6OkFsbCwgdW5pdGxlc3Ms
IG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSk7CiB9CiAKIHN0YXRpYyBib29sIGlzSG9yaXpvbnRh
bFBvc2l0aW9uS2V5d29yZE9ubHkoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQpAQCAt
Mjc5OSwyMyArMjkzMywyMSBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxQb3NpdGlvbkNvb3JkaW5h
dGVzPiBwb3NpdGlvbkZyb20KIAogLy8gRklYTUU6IFRoaXMgbWF5IGNvbnN1bWUgZnJvbSB0aGUg
cmFuZ2UgdXBvbiBmYWlsdXJlLiBUaGUgYmFja2dyb3VuZAogLy8gc2hvcnRoYW5kIHdvcmtzIGFy
b3VuZCBpdCwgYnV0IHdlIHNob3VsZCBqdXN0IGZpeCBpdCBoZXJlLgotc3RkOjpvcHRpb25hbDxQ
b3NpdGlvbkNvb3JkaW5hdGVzPiBjb25zdW1lUG9zaXRpb25Db29yZGluYXRlcyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJr
IHVuaXRsZXNzLCBQb3NpdGlvblN5bnRheCBwb3NpdGlvblN5bnRheCwgTmVnYXRpdmVQZXJjZW50
YWdlUG9saWN5IHBvbGljeSkKK3N0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gY29u
c3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgUG9zaXRpb25TeW50
YXggcG9zaXRpb25TeW50YXgsIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSBuZWdhdGl2ZVBlcmNl
bnRhZ2VQb2xpY3kpCiB7Ci0gICAgYm9vbCBhbGxvd3NOZWdhdGl2ZSA9IHBvbGljeSA9PSBOZWdh
dGl2ZVBlcmNlbnRhZ2VQb2xpY3k6OkFsbG93OwotCi0gICAgYXV0byB2YWx1ZTEgPSBjb25zdW1l
UG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBhbGxvd3NOZWdh
dGl2ZSk7CisgICAgYXV0byB2YWx1ZTEgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2Us
IHBhcnNlck1vZGUsIHVuaXRsZXNzLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kpOwogICAgIGlm
ICghdmFsdWUxKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgYXV0byB2YWx1
ZTIgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNz
LCBhbGxvd3NOZWdhdGl2ZSk7CisgICAgYXV0byB2YWx1ZTIgPSBjb25zdW1lUG9zaXRpb25Db21w
b25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xp
Y3kpOwogICAgIGlmICghdmFsdWUyKQogICAgICAgICByZXR1cm4gcG9zaXRpb25Gcm9tT25lVmFs
dWUoKnZhbHVlMSk7CiAgICAgCi0gICAgYXV0byB2YWx1ZTMgPSBjb25zdW1lUG9zaXRpb25Db21w
b25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZSk7CisgICAg
YXV0byB2YWx1ZTMgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUs
IHVuaXRsZXNzLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kpOwogICAgIGlmICghdmFsdWUzKQog
ICAgICAgICByZXR1cm4gcG9zaXRpb25Gcm9tVHdvVmFsdWVzKCp2YWx1ZTEsICp2YWx1ZTIpOwog
ICAgIAotICAgIGF1dG8gdmFsdWU0ID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBw
YXJzZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmUpOworICAgIGF1dG8gdmFsdWU0ID0g
Y29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgbmVn
YXRpdmVQZXJjZW50YWdlUG9saWN5KTsKICAgICAKICAgICBzdGQ6OmFycmF5PENTU1ByaW1pdGl2
ZVZhbHVlKiwgNT4gdmFsdWVzIHsKICAgICAgICAgdmFsdWUxLmdldCgpLApAQCAtMjkxNyw3ICsz
MDQ5LDcgQEAgc3RhdGljIGJvb2wgY29uc3VtZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcChD
U1NQYXJzCiAgICAgICAgIHBvc2l0aW9uID0gKGlkID09IENTU1ZhbHVlRnJvbSkgPyAwIDogMTsK
ICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoaWQgPT0gQ1NTVmFsdWVDb2xvclN0b3ApOwot
ICAgICAgICBhdXRvIHZhbHVlID0gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEw
MFJhdyhhcmdzKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnRS
YXc8TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXI+KGFyZ3MpOwogICAgICAg
ICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBwb3NpdGlv
biA9ICp2YWx1ZTsKQEAgLTM0MTQsNyArMzU0Niw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVDcm9zc0ZhZGUoQ1NTUGFyc2VyVG9rZQogICAgIGlmICghdG9JbWFnZVZhbHVlIHx8
ICFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFyZ3MpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGF1dG8gcGVyY2VudGFnZSA9IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNl
bnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CisgICAgYXV0byBwZXJjZW50YWdlID0gY29uc3VtZU51
bWJlck9yUGVyY2VudFJhdzxOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lcj4o
YXJncyk7CiAgICAgaWYgKCFwZXJjZW50YWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBhdXRvIHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
VmFsdWUoY2xhbXBUbzxkb3VibGU+KCpwZXJjZW50YWdlLCAwLCAxKSwgQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVIpOwpAQCAtMzk1Miw3ICs0MDg0LDcgQEAgc3RkOjpvcHRpb25hbDxMaW5lSGVpZ2h0
UmF3PiBjb25zdW1lTGluZUhlaWdodFJhdyhDU1NQCiAgICAgfQogCiAgICAgaWYgKGF1dG8gbnVt
YmVyID0gY29uc3VtZU51bWJlclJhdyhyYW5nZSwgVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpKQot
ICAgICAgICByZXR1cm4geyAqbnVtYmVyIH07CisgICAgICAgIHJldHVybiB7IG51bWJlci0+dmFs
dWUgfTsKIAogICAgIGlmIChhdXRvIGxlbmd0aE9yUGVyY2VudCA9IGNvbnN1bWVMZW5ndGhPclBl
cmNlbnRSYXcocmFuZ2UsIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlKSkKICAg
ICAgICAgcmV0dXJuIHsgKmxlbmd0aE9yUGVyY2VudCB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCShyZXZpc2lv
biAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxNCBAQCBlbnVtIGNsYXNzIE5l
Z2F0aXZlUGVyY2VudGFnZVBvbGljeSA6IGJvb2wgeyBGb3JiaWQsIEEKIGVudW0gY2xhc3MgVW5p
dGxlc3NRdWlyayB7IEFsbG93LCBGb3JiaWQgfTsKIGVudW0gY2xhc3MgVW5pdGxlc3NaZXJvUXVp
cmsgeyBBbGxvdywgRm9yYmlkIH07CiAKK3N0cnVjdCBOdW1iZXJSYXcgeworICAgIGRvdWJsZSB2
YWx1ZTsKK307CisKK3N0cnVjdCBQZXJjZW50UmF3IHsKKyAgICBkb3VibGUgdmFsdWU7Cit9Owor
CiBzdHJ1Y3QgQW5nbGVSYXcgewogICAgIENTU1VuaXRUeXBlIHR5cGU7CiAgICAgZG91YmxlIHZh
bHVlOwpAQCAtNzYsMTMgKzg0LDE3IEBAIHN0cnVjdCBMZW5ndGhSYXcgewogICAgIGRvdWJsZSB2
YWx1ZTsKIH07CiAKLXVzaW5nIExlbmd0aE9yUGVyY2VudFJhdyA9IHN0ZDo6dmFyaWFudDxMZW5n
dGhSYXcsIGRvdWJsZT47Cit1c2luZyBMZW5ndGhPclBlcmNlbnRSYXcgPSBzdGQ6OnZhcmlhbnQ8
TGVuZ3RoUmF3LCBQZXJjZW50UmF3PjsKK3VzaW5nIE51bWJlck9yUGVyY2VudFJhdyA9IHN0ZDo6
dmFyaWFudDxOdW1iZXJSYXcsIFBlcmNlbnRSYXc+OwordXNpbmcgQW5nbGVPck51bWJlclJhdyA9
IHN0ZDo6dmFyaWFudDxBbmdsZVJhdywgTnVtYmVyUmF3PjsKIAotc3RkOjpvcHRpb25hbDxpbnQ+
IGNvbnN1bWVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBkb3VibGUgbWluaW11bVZh
bHVlID0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOwotUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91Ymxl
IG1pbmltdW1WYWx1ZSA9IC1zdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKK3N0
ZDo6b3B0aW9uYWw8aW50PiBjb25zdW1lSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7
CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyKENTU1BhcnNlclRva2Vu
UmFuZ2UmKTsKK3N0ZDo6b3B0aW9uYWw8aW50PiBjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVy
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdl
cihDU1NQYXJzZXJUb2tlblJhbmdlJik7Ci1zdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51
bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFs
bCk7CitzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiwgVmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCk7CiBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFu
Z2UpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyT3JQZXJjZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBj
b25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CkBAIC05MCwx
MSArMTAyLDExIEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRO
dW1iZXIoQ1NTUAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51
bWJlcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlUG9vbCYpOwogc3Rk
OjpvcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXcoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1
aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1
aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25z
dW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSA9IFZhbHVlUmFu
Z2U6OkFsbCk7CitzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWVQZXJjZW50UmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKTsKIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IFZhbHVlUmFuZ2UpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudFdv
cmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYp
Owogc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IGNvbnN1bWVMZW5ndGhPclBlcmNl
bnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVu
aXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwotUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQ
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9y
YmlkLCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSA9IGZhbHNlKTsKK1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdl
JiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVp
cms6OkZvcmJpZCwgTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5ID0gTmVnYXRpdmVQZXJjZW50YWdl
UG9saWN5OjpGb3JiaWQpOwogc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5p
dGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJr
OjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1
aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJp
ZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIENTU1ZhbHVlUG9vbCYsIFVuaXRsZXNz
UXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5pdGxl
c3NaZXJvUXVpcms6OkZvcmJpZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuY3BwCShyZXZpc2lvbiAy
ODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyV29y
a2VyU2FmZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0MCw3ICs1NDAsNyBAQCBzdGF0aWMgUmVm
UHRyPENTU0ZvbnRGZWF0dXJlVmFsdWU+IGNvbnN1bWVGb250RmVhdHVyZVQKICAgICBpbnQgdGFn
VmFsdWUgPSAxOwogICAgIGlmICghcmFuZ2UuYXRFbmQoKSAmJiByYW5nZS5wZWVrKCkudHlwZSgp
ICE9IENvbW1hVG9rZW4pIHsKICAgICAgICAgLy8gRmVhdHVyZSB0YWcgdmFsdWVzIGNvdWxkIGZv
bGxvdzogPGludGVnZXI+IHwgb24gfCBvZmYKLSAgICAgICAgaWYgKGF1dG8gaW50ZWdlciA9IENT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXJSYXcocmFuZ2UsIDApKQorICAg
ICAgICBpZiAoYXV0byBpbnRlZ2VyID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
SW50ZWdlclplcm9BbmRHcmVhdGVyUmF3KHJhbmdlKSkKICAgICAgICAgICAgIHRhZ1ZhbHVlID0g
KmludGVnZXI7CiAgICAgICAgIGVsc2UgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVl
T24gfHwgcmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVPZmYpCiAgICAgICAgICAgICB0YWdW
YWx1ZSA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKSA9PSBDU1NWYWx1
ZU9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9u
dFJhdy5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZUZvckZvbnRSYXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsOCArMjA4LDggQEAg
c3RkOjpvcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9uCiAg
ICAgICAgICAgICAvLyAgICAgICAgdGhhdCBpdCdzIG9mZi1zY3JlZW4gYW5kIHRoZXJlZm9yZSBk
b2Vzbid0IHN0cmljdGx5IGhhdmUgYW4gYXNzb2NpYXRlZCB2aWV3cG9ydC4KICAgICAgICAgICAg
IC8vICAgICAgICBUaGlzIG5lZWRzIGNsYXJpZmljYXRpb24gYW5kIHBvc3NpYmx5IGZpeGluZy4K
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFsdWU6
OmNvbXB1dGVVbnpvb21lZE5vbkNhbGNMZW5ndGhEb3VibGUobGVuZ3RoLnR5cGUsIGxlbmd0aC52
YWx1ZSwgQ1NTUHJvcGVydHlGb250U2l6ZSwgJmZvbnRDYXNjYWRlLmZvbnRNZXRyaWNzKCksICZm
b250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSwgJmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlv
bigpLCBpczxEb2N1bWVudD4oY29udGV4dCkgPyBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCku
cmVuZGVyVmlldygpIDogbnVsbHB0cikpOwotICAgICAgICB9LCBbJl0gKGRvdWJsZSBwZXJjZW50
YWdlKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYXJlbnRTaXpl
ICogcGVyY2VudGFnZSkgLyAxMDAuMCk7CisgICAgICAgIH0sIFsmXSAoY29uc3QgQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpQZXJjZW50UmF3JiBwZXJjZW50YWdlKSB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYXJlbnRTaXplICogcGVyY2VudGFnZS52YWx1ZSkg
LyAxMDAuMCk7CiAgICAgICAgIH0pOwogICAgIH0pOwogCg==
</data>
<flag name="commit-queue"
          id="474637"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448710</attachid>
            <date>2022-01-09 10:03:01 -0800</date>
            <delta_ts>2022-01-09 10:34:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>metaconsumer.diff</filename>
            <type>text/plain</type>
            <size>147913</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNSBAQAorMjAyMi0wMS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQ1NTIHByb3BlcnR5
IHBhcnNpbmcgaGVscGVycyB0byBiZSBhIGJpdCBtb3JlIGNvbXBvc2FibGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDg2OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlZmFjdG9ycyBwcmltaXRpdmUgQ1NT
IHByb3BlcnR5IHBhcnNpbmcgdG8gYmUgYnVpbHQgb24gYSBuZXcgY29tcG9zYWJsZSBzZXQgb2Yg
CisgICAgICAgIGxvd2VyIGxldmVsIHByaW1pdGl2ZXMuCisKKyAgICAgICAgVGhlIGxvd2VzdCBs
ZXZlbCBwcmltaXRpdmUgaXMgbm93IGEgImNvbnN1bWVyIiBzdHJ1Y3QgdGhhdCBvbmx5IGtub3dz
IGhvdyB0byBjb25zdW1lCisgICAgICAgIGEgcGFydGljdWxhciB0eXBlIGZvciBhIHBhcnRpY3Vs
YXIgdG9rZW4gdHlwZS4gRm9yIGV4YW1wbGUsIE51bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVy
Q29uc3VtZXIKKyAgICAgICAgb25seSBrbm93cyBob3cgdG8gY29uc3VtZSBhbmQgcmV0dXJuIGEg
TnVtYmVyUmF3IGlmIHRoZSB0b2tlbiB0eXBlIGlzIGEgTnVtYmVyVG9rZW4uCisKKyAgICAgICAg
Rm9yIHRoZXNlIHRva2VuIHNwZWNpZmljIGNvbnN1bWVycyB0byBiZSB1c2VmdWwsIHRoZXkgbmVl
ZCB0byBiZSBjb21iaW5lZCB0b2dldGhlci4gVG8KKyAgICAgICAgZG8gdGhpcywgYSBoaWdoZXIg
bGV2ZWwgbWV0YS1jb25zdW1lciB0eXBlIHRoYXQgaXMgbm90IHRpZWQgdG8gYSBzcGVjaWZpYyB0
b2tlbiBpcyB1c2VkLgorICAgICAgICBUaGVzZSBhcmUgZGVmaW5lZCBhcyBlbXB0eSBzdHJ1Y3Rz
IHdpdGggJ3VzaW5nJyBzdGF0ZW1lbnRzIHRvIGluZGljYXRlIHdoaWNoIGxvdyBsZXZlbAorICAg
ICAgICBjb25zdW1lcnMgdG8gdXNlIGZvciB3aGljaCB0b2tlbiB0b2tlbiB0eXBlcy4gRm9yIGV4
YW1wbGU6CisgICAgICAgIAorICAgICAgICAgICAgc3RydWN0IE51bWJlclJhd0NvbnN1bWVyIHsK
KyAgICAgICAgICAgICAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz47
CisKKyAgICAgICAgICAgICAgICB1c2luZyBGdW5jdGlvblRva2VuID0gTnVtYmVyUmF3S25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgICAgICAgICAgICAgIHVzaW5nIE51bWJlclRv
a2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgVGhpcyBtZXRhLWNvbnN1bWVyIGRlZmluaXRpb24gZGVmaW5lcyBhIGNv
bnN1bWVyIHRoYXQgdXRpbGl6ZXMgdHdvIGxvd2VyIGxldmVsIHRva2VuIAorICAgICAgICBzcGVj
aWZpYyBjb25zdW1lcnMgZm9yIGZ1bmN0aW9uIGFuZCBudW1iZXIgdG9rZW5zLgorCisgICAgICAg
IFRvIGFjdHVhbGwgZG8gc29tZXRoaW5nIHdpdGggdGhpcyBtZXRhLWNvbnN1bWVyIGRlZmluaXRp
b24sIHRoZSAgY29uc3VtZU1ldGFDb25zdW1lcjw+KC4uLikgCisgICAgICAgIGZ1bmN0aW9uIGlz
IHVzZWQsIHdoaWNoIGludHJvc3BlY3RzIHdoaWNoIHVzaW5nIHN0YXRlbWVudHMgYXJlIGRlZmlu
ZWQsIGFuZCBkaXNwYXRjaGVzIHRvIAorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyB0b2tlbiBz
cGVjaWZpYyBjb25zdW1lciAoc2VlIE1ldGFDb25zdW1lckRpc3BhdGNoZXIgZm9yIGhvdyBpbnRy
b3NwZWN0aW9uIHdvcmtzKS4KKworICAgICAgICBJbiBhZGRpdGlvbiB0byBwcmltaXRpdmUgbWV0
YS1jb25zdW1lciBkZWZpbml0aW9ucywgdGhlcmUgYXJlIGFsc28gZGVmaW5pdGlvbnMgZm9yIG1l
dGEtY29uc3VtZXJzCisgICAgICAgIHRoYXQgY2FuIGNvbnN1bWVyIG1vcmUgY29tcGxleCB0aGlu
Z3Mgd2l0aG91dCBkdXBsaWNhdGUgd29yay4gRm9yIGV4YW1wbGUsIEFuZ2xlT3JQZXJjZW50Q29u
c3VtZXIKKyAgICAgICAgaXMgYSBtZXRhLWNvbnN1bWVyIHRoYXQgY29uc3VtZXMgZWl0aGVyIGFu
IEFuZ2xlIG9yIGEgUGVyY2VudC4gVG8gZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQgYm90aAorICAg
ICAgICBvZiB0aGVzZSB3YW50IHRvIG9wZXJhdGUgb24gZnVuY3Rpb24gdG9rZW5zLCB0aGUgU2Ft
ZVRva2VuTWV0YUNvbnN1bWVyIGFsbG93cyBjb25jYXRlbmF0aW5nIG11bHRpcGxlCisgICAgICAg
IHBlci10b2tlbiBjb25zdW1lcnMgKGluIHRoaXMgY2FzZSwgdHdvIGZ1bmN0aW9uIHRva2VuIGNv
bnN1bWVycykgdG9nZXRoZXIuIAorICAgICAgICAKKyAgICAgICAgTWV0YS1jb25zdW1lciBkZWZp
bml0aW9ucyBjYW4gYWxzbyBkZWZpbmUsIG9yIGFsbG93IGRlZmluaW5nIHZpYSBhIHRlbXBsYXRl
IHBhcmFtZXRlciwgYSBUcmFuc2Zvcm1lciwKKyAgICAgICAgd2hpY2gsIGFzIHRoZSBuYW1lIGlt
cGxpZXMsIHRyYW5zZm9ybSB0aGUgb3V0cHV0LiBGb3IgZXhhbXBsZSwgdGhlIEFuZ2xlT3JOdW1i
ZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lcgorICAgICAgICBjYW4gYmUgdXNlZCB0byBlbnN1cmUg
dGhhdCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIGluIGRlZ3JlZXMsIGFuZCBkb2Vzbid0IGhhdmUg
dG8gYmUgdW53cmFwcGVkIGJ5CisgICAgICAgIHRoZSB1c2VyLgorCisgICAgICAgIFRoZSBnb2Fs
IGlzIGF2b2lkIHRoZSBjb21iaW5hdG9yaWFsIGV4cGxvc2l0aW9uIG9mIGZ1bmN0aW9ucyBicmFu
Y2hpbmcgb24gdG9rZW4gdHlwZSBmb3IKKyAgICAgICAgbW9yZSBhbmQgbW9yZSBzcGVjaWFsaXpl
ZCBwYXJzaW5nIG5lZWRzLiBGb3IgaW5zdGFuY2UsIGFuIHVwY29tcGluZyBjaGFuZ2Ugd2lsbCB3
YW50IHRvIAorICAgICAgICBleHRlbmQgY29uc3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5n
U3ltYm9sVGFibGVJZGVudCBhbmQgYSBmZXcgb3RoZXIgcmVsYXRlZCBjb25zdW1lcnMKKyAgICAg
ICAgdG8gYWxzbyBjb25zdW1lIHRoZSBpZGVudGlmaWVyICdub25lJy4gUmF0aGVyIHRoYW4gZHVw
bGljYXRpbmcgYWxsIHRoZSBsb2dpYywgdGhpcyBhbGxvd3MKKyAgICAgICAgZm9yIGp1c3QgZGVm
aW5pbmcgYSBmZXcgbWV0YS1jb25zdW1lciBkZWZpbml0aW9ucyB1dGlsaXppbmcgYWxtb3N0IGVu
dGlyZWx5IGV4aXN0aW5nIGxvd2VyCisgICAgICAgIGxldmVsIGNvbnN1bWVycy4KKworICAgICAg
ICAqIGNzcy9NZWRpYVF1ZXJ5RXhwcmVzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dW1lRmlyc3RWYWx1ZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lRm9udFZhcmlhdGlvblRhZyk6CisgICAgICAg
IChXZWJDb3JlOjpjb25zdW1lQ3ViaWNCZXppZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Vt
ZVNwcmluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVQZXJzcGVjdGl2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN1bWVDb3VudGVyU3R5bGVQYWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUNvdW50ZXJT
dHlsZUFkZGl0aXZlU3ltYm9scyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQmFzZVBhbGV0
dGVEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVPdmVycmlkZUNvbG9yc0Rl
c2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVG
bGV4KToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6
OkNhbGNQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29tcHV0ZU1pbmltdW1WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkludGVnZXJUeXBlUmF3
S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6SW50ZWdlclR5cGVSYXdLbm93blRva2VuVHlw
ZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6SW50ZWdlclR5cGVLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6
OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpJ
bnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjp2YWxpZGF0ZWROdW1iZXJSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1iZXJSYXdL
bm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1iZXJSYXdLbm93blRva2VuVHlwZU51bWJl
ckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6TnVtYmVyUmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyOjpjb25zdW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TnVtYmVyQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNv
bnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1i
ZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojp2YWxpZGF0ZWRQZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6UGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29u
c3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlBlcmNl
bnRSYXdLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlBlcmNlbnRSYXdLbm93blRva2VuVHlw
ZUlkZW50Q29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aFJhd0tub3duVG9rZW5UeXBlRnVu
Y3Rpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6Okxlbmd0aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNv
bnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5n
dGhSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6
OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpB
bmdsZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkFuZ2xlUmF3S25vd25Ub2tlblR5
cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OkFuZ2xlUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjo6
Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkFu
Z2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29u
c3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1l
bnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OkFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSZXNvbHV0aW9uQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRyYW5zZm9ybUFwcGxpZXI6
OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6YXBw
bHlUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpJZGVudGl0eVRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlOjp0cmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpBbmdsZU9y
TnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Ok51bWJlck9yUGVyY2VudERpdmlkZWRCeTEw
MFRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpNZXRhQ29uc3VtZXJEaXNwYXRjaGVyOjpjb25zdW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU1ldGFDb25zdW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlNhbWVUb2tlbk1l
dGFDb25zdW1lckFwcGxpZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpTYW1lVG9rZW5NZXRhQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBlcmNlbnRSYXdU
cmFuc2Zvcm1lcjo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6QW5nbGVPck51bWJlclJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjo6
Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Ok51
bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjo6Y29uc3VtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVJbnRlZ2VyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVJbnRlZ2VyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyUmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXJa
ZXJvQW5kR3JlYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVQb3NpdGl2ZUludGVnZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlclJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJBbGxv
d2luZ1N5bWJvbFRhYmxlSWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJ
ZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVXb3JrZXJTYWZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
UmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVBbmdsZU9yUGVyY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoT3JQZXJjZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlT3JO
dW1iZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lQW5nbGVPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJPclBlcmNl
bnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlck9yUGVyY2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVG
b250V2VpZ2h0TnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZU9wdGlvbmFsQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFi
bGVJZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5v
cm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSR0JOb3JtYWxpemluZ1RyYW5z
Zm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lUmVsYXRpdmVSR0JDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVSR0JPckhTTE9wdGlvbmFs
QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZU5vblJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VOb25SZWxhdGl2ZUhTTFBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTm9uUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VMYWJQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VM
Q0hQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6cGFyc2VSZWxhdGl2ZUxDSFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZU5vblJlbGF0aXZlTENIUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xv
ckZ1bmN0aW9uRm9yUkdCVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VD
b2xvckNvbnRyYXN0RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yTWl4Q29tcG9uZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aW9uQ29tcG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZVBvc2l0aW9uQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNyb3NzRmFkZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMaW5lSGVp
Z2h0UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2Fs
Y1BhcnNlcjo6Y29uc3VtZUludGVnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFyc2VyOjpjb25zdW1lSW50ZWdlclR5cGVSYXcp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpD
YWxjUGFyc2VyOjpjb25zdW1lTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZU51bWJlclJhdyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQ
YXJzZXI6OmNvbnN1bWVQZXJjZW50UmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZUFuZ2xlUmF3KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1Bh
cnNlcjo6Y29uc3VtZUxlbmd0aFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVG
dW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVt
YmVyUmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlckNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudFJh
d1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tl
blR5cGVQZXJjZW50YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlUGVyY2VudGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3Ro
UmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aENT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5n
bGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRv
a2VuVHlwZURpbWVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVEaW1lbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUmVzb2x1dGlvbkNTU1ByaW1pdGl2
ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJS
YXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQW5nbGVSYXdPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVOdW1iZXJSYXdPclBlcmNlbnRSYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5
MTAwUmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZU51bWJlclJhd09yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVu
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRh
YmxlSWRlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtl
clNhZmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzV29y
a2VyU2FmZTo6Y29uc3VtZUZvbnRGZWF0dXJlVGFnKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJl
c29sdmVGb3JGb250UmF3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlRm9y
Rm9udFJhdyk6CisKIDIwMjItMDEtMDggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgRml4IHNvbWUgQ1NTIGZpbHRlciBpbnRlcnBvbGF0aW9uIGlzc3Vl
cwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHByZXNzaW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cHJlc3Npb24uY3BwCShy
ZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cHJlc3Np
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIGlzRmVhdHVyZVZhbGlkV2l0aG91dFZhbHVlKGNvbnN0IEF0CiAKIGlubGluZSBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGaXJzdFZhbHVlKGNvbnN0IFN0cmluZyYgbWVkaWFG
ZWF0dXJlLCBDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoYXV0byB2YWx1
ZSA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXIocmFuZ2UsIDApKQor
ICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50
ZWdlclplcm9BbmRHcmVhdGVyKHJhbmdlKSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCiAgICAg
aWYgKCFmZWF0dXJlRXhwZWN0aW5nUG9zaXRpdmVJbnRlZ2VyKG1lZGlhRmVhdHVyZSkgJiYgIWlz
QXNwZWN0UmF0aW9GZWF0dXJlKG1lZGlhRmVhdHVyZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyODc4MTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTYyLDcgKzU2Miw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVGb250VmFyaWF0aW9uVGFnKENTU1BhcgogICAgIGlmICghdGFnVmFsdWUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIAotICAgIHJldHVybiBDU1NGb250VmFyaWF0aW9uVmFsdWU6
OmNyZWF0ZSh0YWcsICp0YWdWYWx1ZSk7CisgICAgcmV0dXJuIENTU0ZvbnRWYXJpYXRpb25WYWx1
ZTo6Y3JlYXRlKHRhZywgdGFnVmFsdWUtPnZhbHVlKTsKIH0KICAgICAKIHN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCkBAIC0xNDU3LDcgKzE0NTcsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFy
Z3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2VDb3B5KTsKIAogICAgIGF1dG8geDEgPSBjb25zdW1l
TnVtYmVyUmF3KGFyZ3MpOwotICAgIGlmICgheDEgfHwgKngxIDwgMCB8fCAqeDEgPiAxKQorICAg
IGlmICgheDEgfHwgeDEtPnZhbHVlIDwgMCB8fCB4MS0+dmFsdWUgPiAxKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAoIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3Bh
Y2UoYXJncykpCkBAIC0xNDcxLDcgKzE0NzEsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBhdXRvIHgyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKLSAgICBpZiAoIXgyIHx8ICp4
MiA8IDAgfHwgKngyID4gMSkKKyAgICBpZiAoIXgyIHx8IHgyLT52YWx1ZSA8IDAgfHwgeDItPnZh
bHVlID4gMSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWNvbnN1bWVDb21t
YUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCkBAIC0xNDg1LDcgKzE0ODUsNyBAQCBzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICByYW5nZSA9IHJhbmdlQ29weTsKLSAgICByZXR1cm4gQ1NT
Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUoKngxLCAqeTEsICp4MiwgKnky
KTsKKyAgICByZXR1cm4gQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUo
eDEtPnZhbHVlLCB5MS0+dmFsdWUsIHgyLT52YWx1ZSwgeTItPnZhbHVlKTsKIH0KIAogc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNwcmluZ0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQpAQCAtMTQ5NiwxNyArMTQ5NiwxNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lU3ByaW5nRnVuY3Rpb24oQ1NTUGFyc2UKIAogICAgIC8vIE1hc3MgbXVzdCBiZSBn
cmVhdGVyIHRoYW4gMC4KICAgICBhdXRvIG1hc3MgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOwot
ICAgIGlmICghbWFzcyB8fCAqbWFzcyA8PSAwKQorICAgIGlmICghbWFzcyB8fCBtYXNzLT52YWx1
ZSA8PSAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBTdGlmZm5lc3Mg
bXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KICAgICBhdXRvIHN0aWZmbmVzcyA9IGNvbnN1bWVOdW1i
ZXJSYXcoYXJncyk7Ci0gICAgaWYgKCFzdGlmZm5lc3MgfHwgKnN0aWZmbmVzcyA8PSAwKQorICAg
IGlmICghc3RpZmZuZXNzIHx8IHN0aWZmbmVzcy0+dmFsdWUgPD0gMCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgCiAgICAgLy8gRGFtcGluZyBjb2VmZmljaWVudCBtdXN0IGJlIGdyZWF0
ZXIgdGhhbiBvciBlcXVhbCB0byAwLgogICAgIGF1dG8gZGFtcGluZyA9IGNvbnN1bWVOdW1iZXJS
YXcoYXJncyk7Ci0gICAgaWYgKCFkYW1waW5nIHx8ICpkYW1waW5nIDwgMCkKKyAgICBpZiAoIWRh
bXBpbmcgfHwgZGFtcGluZy0+dmFsdWUgPCAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAKICAgICAvLyBJbml0aWFsIHZlbG9jaXR5IG1heSBoYXZlIGFueSB2YWx1ZS4KQEAgLTE1MTks
NyArMTUxOSw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVTcHJpbmdGdW5jdGlv
bihDU1NQYXJzZQogCiAgICAgcmFuZ2UgPSByYW5nZUNvcHk7CiAKLSAgICByZXR1cm4gQ1NTU3By
aW5nVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKCptYXNzLCAqc3RpZmZuZXNzLCAqZGFtcGlu
ZywgKmluaXRpYWxWZWxvY2l0eSk7CisgICAgcmV0dXJuIENTU1NwcmluZ1RpbWluZ0Z1bmN0aW9u
VmFsdWU6OmNyZWF0ZShtYXNzLT52YWx1ZSwgc3RpZmZuZXNzLT52YWx1ZSwgZGFtcGluZy0+dmFs
dWUsIGluaXRpYWxWZWxvY2l0eS0+dmFsdWUpOwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCkBAIC0xODczLDcgKzE4NzMsNyBA
QCBzdGF0aWMgYm9vbCBjb25zdW1lUGVyc3BlY3RpdmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXIK
ICAgICB9CiAKICAgICBpZiAoYXV0byBwZXJzcGVjdGl2ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJn
cywgVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpKSB7Ci0gICAgICAgIHRyYW5zZm9ybVZhbHVlLT5h
cHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgqcGVyc3BlY3RpdmUsIENTU1VuaXRUeXBl
OjpDU1NfUFgpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHBlcnNwZWN0aXZlLT52YWx1ZSwgQ1NTVW5pdFR5cGU6OkNTU19QWCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIzMzYsNyArMjMzNiw3IEBAIHN0YXRp
YyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDdXJzb3IoQ1NTUGFyc2VyVG9rZW5SYQogICAgICAg
ICAgICAgaWYgKCF5KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjbGFtcCBvciByb3VuZCBpbnN0ZWFkIG9mIGp1c3QgY2Fz
dGluZyBmcm9tIGRvdWJsZSB0byBpbnQ/Ci0gICAgICAgICAgICBob3RTcG90ID0gSW50UG9pbnQg
eyBzdGF0aWNfY2FzdDxpbnQ+KCp4KSwgc3RhdGljX2Nhc3Q8aW50PigqeSkgfTsKKyAgICAgICAg
ICAgIGhvdFNwb3QgPSBJbnRQb2ludCB7IHN0YXRpY19jYXN0PGludD4oeC0+dmFsdWUpLCBzdGF0
aWNfY2FzdDxpbnQ+KHktPnZhbHVlKSB9OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFsaXN0
KQpAQCAtMjQ1OCw5ICsyNDU4LDkgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZVBlcnNwZWN0aXZlKENTCiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHF1aXJrIG9u
bHkgYXBwbHkgdG8gdGhlIHdlYmtpdCBwcmVmaXhlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eS4K
ICAgICBhdXRvIHBlcnNwZWN0aXZlID0gY29uc3VtZU51bWJlclJhdyhyYW5nZSk7Ci0gICAgaWYg
KCFwZXJzcGVjdGl2ZSB8fCAqcGVyc3BlY3RpdmUgPCAwKQorICAgIGlmICghcGVyc3BlY3RpdmUg
fHwgcGVyc3BlY3RpdmUtPnZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoKnBlcnNwZWN0aXZlLCBDU1NVbml0VHlw
ZTo6Q1NTX1BYKTsKKyAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwZXJzcGVj
dGl2ZS0+dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogfQogCiBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gY29uc3VtZVNjcm9sbFNuYXBBbGlnbihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKQEAgLTQ1MTgsNyArNDUxOCw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUHJvcGVydHlQ
YXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJFbmRF
bmRSYWRpdXM6CiAgICAgICAgIHJldHVybiBjb25zdW1lQm9yZGVyUmFkaXVzQ29ybmVyKG1fcmFu
Z2UsIG1fY29udGV4dC5tb2RlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RmxleEdy
b3VwOgotICAgICAgICByZXR1cm4gY29uc3VtZUludGVnZXIobV9yYW5nZSwgMCk7CisgICAgICAg
IHJldHVybiBjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyKG1fcmFuZ2UpOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlPcmRlcjoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKG1fcmFuZ2Up
OwogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lUG9zaXRpb246CkBAIC00ODEyLDcg
KzQ4MTIsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ291bnRlclN0eWxlUGFk
KENTU1BhcnMKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN5bWJvbDsKICAgICB3aGlsZSAoIWludGVn
ZXIgfHwgIXN5bWJvbCkgewogICAgICAgICBpZiAoIWludGVnZXIpIHsKLSAgICAgICAgICAgIGlu
dGVnZXIgPSBjb25zdW1lSW50ZWdlcihyYW5nZSwgMCk7CisgICAgICAgICAgICBpbnRlZ2VyID0g
Y29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihyYW5nZSk7CiAgICAgICAgICAgICBpZiAoaW50
ZWdlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNDg1MiwxMiAr
NDg1MiwxMiBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ291bnRlclN0eWxlQWRk
aXRpdmVTeW0KICAgICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBh
cmF0ZWQoKTsKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gbGFzdFdlaWdodDsKICAgICBkbyB7Ci0g
ICAgICAgIGF1dG8gaW50ZWdlciA9IGNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAwKTsKKyAgICAgICAg
YXV0byBpbnRlZ2VyID0gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihyYW5nZSk7CiAgICAg
ICAgIGF1dG8gc3ltYm9sID0gY29uc3VtZUNvdW50ZXJTdHlsZVN5bWJvbChyYW5nZSwgY29udGV4
dCk7CiAgICAgICAgIGlmICghaW50ZWdlcikgewogICAgICAgICAgICAgaWYgKCFzeW1ib2wpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBpbnRlZ2VyID0gY29u
c3VtZUludGVnZXIocmFuZ2UsIDApOworICAgICAgICAgICAgaW50ZWdlciA9IGNvbnN1bWVJbnRl
Z2VyWmVyb0FuZEdyZWF0ZXIocmFuZ2UpOwogICAgICAgICAgICAgaWYgKCFpbnRlZ2VyKQogICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC01MDAyLDE0ICs1MDAy
LDE0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVCYXNlUGFsZXR0
ZURlcwogewogICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVJZGVudDxDU1NWYWx1ZUxpZ2h0
LCBDU1NWYWx1ZURhcms+KHJhbmdlKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXR1
cm4gY29uc3VtZUludGVnZXIocmFuZ2UsIDApOworICAgIHJldHVybiBjb25zdW1lSW50ZWdlclpl
cm9BbmRHcmVhdGVyKHJhbmdlKTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNv
bnN1bWVPdmVycmlkZUNvbG9yc0Rlc2NyaXB0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBk
byB7Ci0gICAgICAgIGF1dG8ga2V5ID0gY29uc3VtZUludGVnZXIocmFuZ2UsIDApOworICAgICAg
ICBhdXRvIGtleSA9IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIocmFuZ2UpOwogICAgICAg
ICBpZiAoIWtleSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC01MzM3LDEzICs1
MzM3LDEzIEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGbGV4KGJvb2wgaW1wb3J0
YW50KQogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIHdoaWxlICghbV9yYW5n
ZS5hdEVuZCgpICYmIGluZGV4KysgPCAzKSB7CiAgICAgICAgICAgICBpZiAoYXV0byBudW1iZXIg
PSBjb25zdW1lTnVtYmVyUmF3KG1fcmFuZ2UpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCpudW1i
ZXIgPCAwKQorICAgICAgICAgICAgICAgIGlmIChudW1iZXItPnZhbHVlIDwgMCkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGlmIChmbGV4R3JvdyA9
PSB1bnNldFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBmbGV4R3JvdyA9ICpudW1iZXI7Cisg
ICAgICAgICAgICAgICAgICAgIGZsZXhHcm93ID0gbnVtYmVyLT52YWx1ZTsKICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChmbGV4U2hyaW5rID09IHVuc2V0VmFsdWUpCi0gICAgICAgICAgICAgICAg
ICAgIGZsZXhTaHJpbmsgPSAqbnVtYmVyOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEqbnVt
YmVyKSAvLyBmbGV4IG9ubHkgYWxsb3dzIGEgYmFzaXMgb2YgMCAoc2FucyB1bml0cykgaWYgZmxl
eC1ncm93IGFuZCBmbGV4LXNocmluayB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0LgorICAg
ICAgICAgICAgICAgICAgICBmbGV4U2hyaW5rID0gbnVtYmVyLT52YWx1ZTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICghbnVtYmVyLT52YWx1ZSkgLy8gZmxleCBvbmx5IGFsbG93cyBhIGJhc2lz
IG9mIDAgKHNhbnMgdW5pdHMpIGlmIGZsZXgtZ3JvdyBhbmQgZmxleC1zaHJpbmsgdmFsdWVzIGhh
dmUgYWxyZWFkeSBiZWVuIHNldC4KICAgICAgICAgICAgICAgICAgICAgZmxleEJhc2lzID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgwLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzEx
OCw3IEBAIHN0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFsdWUoQ2FsY3VsYXRpb25DYXRlZ29y
eSBjYQogLy8gRklYTUU6IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJv
bSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuCiBjbGFzcyBDYWxjUGFyc2VyIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZSA9IHsgfSwgQ1NTVmFsdWVQb29sJiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KSwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UgPSBmYWxzZSkKKyAgICBleHBsaWNpdCBD
YWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5
IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6
OkFsbCwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IHsgfSwgQ1NTVmFs
dWVQb29sJiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwgTmVnYXRpdmVQZXJjZW50
YWdlUG9saWN5IG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSA9IE5lZ2F0aXZlUGVyY2VudGFnZVBv
bGljeTo6Rm9yYmlkKQogICAgICAgICA6IG1fc291cmNlUmFuZ2UocmFuZ2UpCiAgICAgICAgICwg
bV9yYW5nZShyYW5nZSkKICAgICAgICAgLCBtX3Bvb2wocG9vbCkKQEAgLTEyNiw3ICsxMjYsNyBA
QCBjbGFzcyBDYWxjUGFyc2VyIHsgKHB1YmxpYykKICAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9r
ZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgICAgICBhdXRvIGZ1bmN0aW9uSWQgPSB0b2tl
bi5mdW5jdGlvbklkKCk7CiAgICAgICAgIGlmIChDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9u
KGZ1bmN0aW9uSWQpKQotICAgICAgICAgICAgbV9jYWxjVmFsdWUgPSBDU1NDYWxjVmFsdWU6OmNy
ZWF0ZShmdW5jdGlvbklkLCBjb25zdW1lRnVuY3Rpb24obV9yYW5nZSksIGRlc3RpbmF0aW9uQ2F0
ZWdvcnksIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2Up
OworICAgICAgICAgICAgbV9jYWxjVmFsdWUgPSBDU1NDYWxjVmFsdWU6OmNyZWF0ZShmdW5jdGlv
bklkLCBjb25zdW1lRnVuY3Rpb24obV9yYW5nZSksIGRlc3RpbmF0aW9uQ2F0ZWdvcnksIHZhbHVl
UmFuZ2UsIHN5bWJvbFRhYmxlLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgPT0gTmVnYXRpdmVQ
ZXJjZW50YWdlUG9saWN5OjpBbGxvdyk7CiAgICAgfQogCiAgICAgY29uc3QgQ1NTQ2FsY1ZhbHVl
KiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsY1ZhbHVlLmdldCgpOyB9CkBAIC0xNTIsNjUg
KzE1Miw2IEBAIGNsYXNzIENhbGNQYXJzZXIgeyAocHVibGljKQogICAgICAgICByZXR1cm4gbV9w
b29sLmNyZWF0ZVZhbHVlKFdURk1vdmUobV9jYWxjVmFsdWUpKTsKICAgICB9CiAKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyKGRvdWJsZSBtaW5pbXVtVmFsdWUp
Ci0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4g
bV9wb29sLmNyZWF0ZVZhbHVlKHN0ZDo6cm91bmQoc3RkOjptYXgobV9jYWxjVmFsdWUtPmRvdWJs
ZVZhbHVlKCksIG1pbmltdW1WYWx1ZSkpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RkOjpvcHRpb25hbDxJbnRUeXBl
PiBjb25zdW1lSW50ZWdlclR5cGVSYXcoZG91YmxlIG1pbmltdW1WYWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghbV9jYWxjVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIGNsYW1wVG88
SW50VHlwZT4oc3RkOjpyb3VuZChzdGQ6Om1heChtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSwg
bWluaW11bVZhbHVlKSkpOwotICAgIH0KLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZU51bWJlcigpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwot
ICAgICAgICByZXR1cm4gbV9wb29sLmNyZWF0ZVZhbHVlKG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1
ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNW
YWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJj
ZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1
ZSgpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJh
dygpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBjYXRlZ29yeSA9IG1fY2FsY1ZhbHVlLT5jYXRl
Z29yeSgpOwotICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1fc291cmNl
UmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4gbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVl
KCk7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3
KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9jYWxjVmFsdWUtPmNhdGVn
b3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAg
cmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBtX2NhbGNWYWx1ZS0+ZG91
YmxlVmFsdWUoKSB9IH07Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNv
bnN1bWVMZW5ndGhSYXcoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8fCBtX2Nh
bGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpCi0gICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9y
YW5nZTsKLSAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBt
X2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07Ci0gICAgfQotCiBwcml2YXRlOgogICAgIENT
U1BhcnNlclRva2VuUmFuZ2UmIG1fc291cmNlUmFuZ2U7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5n
ZSBtX3JhbmdlOwpAQCAtMjIwLDcgKzE2MSw3IEBAIGNsYXNzIENhbGNQYXJzZXIgeyAocHVibGlj
KQogCiAvLyBNQVJLOiAtIFByaW1pdGl2ZSB2YWx1ZSBjb25zdW1lcnMgZm9yIGNhbGxlcnMgdGhh
dCBrbm93IHRoZSB0b2tlbiB0eXBlLgogCi1zdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY29u
c3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSA9IHsgfSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVS
YW5nZTo6QWxsKQorc3RhdGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNvbnN1bWVDYWxjUmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1
bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIApAQCAtMjM4LDIwNiArMTc5LDI2NSBAQCBzdGF0
aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2sKIAogLy8g
TUFSSzogSW50ZWdlciAoUmF3KQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxJbnRUeXBlPiBjb25zdW1lSW50ZWdlclR5cGVSYXdXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwgZG91YmxlIG1p
bmltdW1WYWx1ZSkKK2VudW0gY2xhc3MgSW50ZWdlclJhbmdlIHsgQWxsLCBaZXJvQW5kR3JlYXRl
ciwgT25lQW5kR3JlYXRlciB9OworCitzdGF0aWMgY29uc3RleHByIGRvdWJsZSBjb21wdXRlTWlu
aW11bVZhbHVlKEludGVnZXJSYW5nZSByYW5nZSkKIHsKLSAgICBhdXRvIHJhbmdlID0gc291cmNl
UmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHsgfSwgVmFs
dWVSYW5nZTo6QWxsKSkgewotICAgICAgICBzb3VyY2VSYW5nZSA9IHJhbmdlOwotICAgICAgICBy
ZXR1cm4gY2xhbXBUbzxJbnRUeXBlPihzdGQ6OnJvdW5kKHN0ZDo6bWF4KHZhbHVlLT5kb3VibGVW
YWx1ZSgpLCBtaW5pbXVtVmFsdWUpKSk7CisgICAgc3dpdGNoIChyYW5nZSkgeworICAgIGNhc2Ug
SW50ZWdlclJhbmdlOjpBbGw6CisgICAgICAgIHJldHVybiAtc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjppbmZpbml0eSgpOworICAgIGNhc2UgSW50ZWdlclJhbmdlOjpaZXJvQW5kR3JlYXRl
cjoKKyAgICAgICAgcmV0dXJuIDAuMDsKKyAgICBjYXNlIEludGVnZXJSYW5nZTo6T25lQW5kR3Jl
YXRlcjoKKyAgICAgICAgcmV0dXJuIDEuMDsKICAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogfQorLy8gTUFSSzogSW50ZWdlciAoUmF3KQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRU
eXBlPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnRUeXBlPiBjb25zdW1lSW50ZWdlclR5cGVSYXdX
aXRoS25vd25Ub2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJs
ZSBtaW5pbXVtVmFsdWUpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVt
YmVyVG9rZW4pOwotICAgIAotICAgIGlmIChyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlVHlwZSgp
ID09IE51bWJlclZhbHVlVHlwZSB8fCByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCBtaW5p
bXVtVmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlLCBJbnRlZ2VyUmFuZ2UgaW50ZWdl
clJhbmdlPgorc3RydWN0IEludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUg
PSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYs
IFZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1
aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rp
b25Ub2tlbik7CisKKyAgICAgICAgYXV0byByYW5nZUNvcHkgPSByYW5nZTsKKyAgICAgICAgaWYg
KGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJh
bmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB7IH0sIFZhbHVlUmFuZ2U6OkFs
bCkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VDb3B5OworICAgICAgICAgICAgcmV0dXJu
IGNsYW1wVG88SW50VHlwZT4oc3RkOjpyb3VuZChzdGQ6Om1heCh2YWx1ZS0+ZG91YmxlVmFsdWUo
KSwgY29tcHV0ZU1pbmltdW1WYWx1ZShpbnRlZ2VyUmFuZ2UpKSkpOworICAgICAgICB9CisKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gY2xhbXBUbzxJbnRUeXBlPihy
YW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpKTsKLX0KKyAg
ICB9Cit9OwogCi0vLyBNQVJLOiBJbnRlZ2VyIChDU1NQcmltaXRpdmVWYWx1ZSAtIG5vdCBtYWlu
dGFpbmluZyBjYWxjKQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGlu
dGVnZXJSYW5nZT4KK3N0cnVjdCBJbnRlZ2VyVHlwZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29u
c3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlw
ZSA9IE51bWJlclRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYs
IFZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1
aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVy
VG9rZW4pOworICAgICAgICAKKyAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWVU
eXBlKCkgPT0gTnVtYmVyVmFsdWVUeXBlIHx8IHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8
IGNvbXB1dGVNaW5pbXVtVmFsdWUoaW50ZWdlclJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBjbGFtcFRvPEludFR5cGU+KHJhbmdlLmNvbnN1
bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkpOworICAgIH0KK307CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVJbnRlZ2VyVHlwZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1W
YWx1ZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IEZ1bmN0aW9uVG9rZW4pOworLy8gTUFSSzogSW50ZWdlciAoQ1NTUHJpbWl0aXZlVmFs
dWUgLSBtYWludGFpbmluZyBjYWxjKQogCi0gICAgaWYgKGF1dG8gaW50ZWdlciA9IGNvbnN1bWVJ
bnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uPEludFR5cGU+KHJhbmdlLCBt
aW5pbXVtVmFsdWUpKQotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqaW50ZWdlciwg
Q1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIHJldHVybiBudWxscHRyOwotfQordGVtcGxh
dGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVnZXJSYW5nZT4KK3N0cnVjdCBJ
bnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsKKyAg
ICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wm
IHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5j
dGlvblRva2VuKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
ZG91YmxlIG1pbmltdW1WYWx1ZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKyAgICAgICAgaWYgKGF1dG8gaW50
ZWdlciA9IEludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyPEludFR5
cGUsIGludGVnZXJSYW5nZT46OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdl
LCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVy
biBwb29sLmNyZWF0ZVZhbHVlKCppbnRlZ2VyLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLSAgICBpZiAoYXV0byBpbnRlZ2Vy
ID0gY29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyPEludFR5cGU+
KHJhbmdlLCBtaW5pbXVtVmFsdWUpKQotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgq
aW50ZWdlciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIHJldHVybiBudWxscHRyOwot
fQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVnZXJSYW5nZT4K
K3N0cnVjdCBJbnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2Vu
OworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVl
UG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IE51bWJlclRva2VuKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdXRvIGludGVnZXIgPSBJbnRl
Z2VyVHlwZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI8SW50VHlwZSwgaW50ZWdlclJh
bmdlPjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUs
IHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQorICAgICAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRl
VmFsdWUoKmludGVnZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorfTsKIAogLy8gTUFSSzogTnVtYmVyIChSYXcpCiAKLXN0YXRpYyBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsaWRhdGVkTnVtYmVyUmF3KGRvdWJsZSB2YWx1ZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PiB2YWxp
ZGF0ZWROdW1iZXJSYXcoZG91YmxlIHZhbHVlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAg
ICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgdmFsdWUgPCAw
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiB2YWx1ZTsKKyAgICBy
ZXR1cm4ge3sgdmFsdWUgfX07CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29u
c3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHNvdXJjZVJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgYXV0byByYW5nZSA9IHNvdXJjZVJhbmdlOwot
ICAgIGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCBzeW1ib2xUYWJsZSwgdmFs
dWVSYW5nZSkpIHsKLSAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRO
dW1iZXJSYXcodmFsdWUtPmRvdWJsZVZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgICAg
ICBzb3VyY2VSYW5nZSA9IHJhbmdlOwotICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVl
Oworc3RydWN0IE51bWJlclJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25U
b2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1bWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
VW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKworICAgICAgICBhdXRvIHJhbmdlQ29weSA9IHJhbmdl
OworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9rZW5U
eXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFs
dWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodmFsdWUtPmRvdWJsZVZhbHVlKCksIHZhbHVlUmFuZ2Up
KSB7CisgICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUNvcHk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLX0KLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgQVNT
RVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwotICAgIAotICAgIGlmIChh
dXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3KHJhbmdlLnBlZWsoKS5udW1l
cmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworc3RydWN0IE51
bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3
KHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAg
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4g
dmFsaWRhdGVkVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
ICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKLXN0YXRpYyBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUlkZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gSWRlbnRUb2tlbik7CitzdHJ1Y3QgTnVtYmVyUmF3S25vd25Ub2tlblR5cGVJ
ZGVudENvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0
b2tlblR5cGUgPSBJZGVudFRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE51bWJlclJh
dz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7CisgICAgICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pOwogCi0gICAgaWYgKGF1dG8gdmFy
aWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7Ci0gICAgICAgIHN3
aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05V
TUJFUjoKLSAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVt
YmVyUmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAgICAgICBy
YW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgIHJldHVy
biB2YWxpZGF0ZWRWYWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQo
KSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgICAgICAgICAgICAgaWYgKGF1dG8g
dmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1
ZVJhbmdlKSkgeworICAgICAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKIC8v
IE1BUks6IE51bWJlciAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQogCi1z
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJh
bmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBOdW1iZXJDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25U
b2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmss
IFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIAotICAgIENhbGNQ
YXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHZhbHVlUmFu
Z2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKLSAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZUlm
Q2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKLX0KKyAgICAgICAgQ2FsY1Bh
cnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5n
ZSwgc3ltYm9sVGFibGUsIHBvb2wpOworICAgICAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1
ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKKyAgICB9Cit9OwogCi1z
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdl
LCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkg
PT0gTnVtYmVyVG9rZW4pOwotICAgIAotICAgIGF1dG8gdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0g
ICAgCi0gICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodG9r
ZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gdW5pdFR5cGUg
PSB0b2tlbi51bml0VHlwZSgpOwotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOwotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqdmFsaWRhdGVkVmFsdWUs
IHVuaXRUeXBlKTsKK3N0cnVjdCBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFy
c2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNv
bnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9v
bCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRv
a2VuKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJh
dyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIGF1dG8g
dW5pdFR5cGUgPSB0b2tlbi51bml0VHlwZSgpOworICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUlu
Y2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVl
KHZhbGlkYXRlZFZhbHVlLT52YWx1ZSwgdW5pdFR5cGUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK307CiAKLQogLy8g
TUFSSzogUGVyY2VudCAocmF3KQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IHZhbGlk
YXRlZFBlcmNlbnRSYXcoZG91YmxlIHZhbHVlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCitzdGF0
aWMgc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiB2YWxpZGF0ZWRQZXJjZW50UmF3KGRvdWJsZSB2
YWx1ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewogICAgIGlmICh2YWx1ZVJhbmdlID09IFZh
bHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICBpZiAoc3RkOjppc2luZih2YWx1ZSkpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHJldHVybiB7eyB2YWx1ZSB9fTsKIH0K
IAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHNvdXJjZVJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Up
Ci17Ci0gICAgQVNTRVJUKHNvdXJjZVJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tl
bik7CitzdHJ1Y3QgUGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rp
b25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiBjb25zdW1lKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBjb25zdCBhdXRvJiB0b2tlbiA9IHNv
dXJjZVJhbmdlLnBlZWsoKTsKLSAgICBhdXRvIGZ1bmN0aW9uSWQgPSB0b2tlbi5mdW5jdGlvbklk
KCk7Ci0gICAgaWYgKCFDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKGZ1bmN0aW9uSWQpKQot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICBhdXRvIHJhbmdlQ29weSA9IHJh
bmdlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9r
ZW5UeXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCBz
eW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VDb3B5
OwogCi0gICAgYXV0byByYW5nZSA9IHNvdXJjZVJhbmdlOwotICAgIGF1dG8gY2FsY1ZhbHVlID0g
Q1NTQ2FsY1ZhbHVlOjpjcmVhdGUoZnVuY3Rpb25JZCwgY29uc3VtZUZ1bmN0aW9uKHJhbmdlKSwg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUpOwot
ICAgIGlmIChjYWxjVmFsdWUgJiYgY2FsY1ZhbHVlLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnQpIHsKLSAgICAgICAgc291cmNlUmFuZ2UgPSByYW5nZTsKLSAgICAg
ICAgcmV0dXJuIGNhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyB2YWxpZGF0ZSB0aGUgY2FsYyB2YWx1ZSBhcyBpcyBkb25lIGZvciB0aGUg
TnVtYmVyUmF3IHZhcmlhbnQ/CisgICAgICAgICAgICByZXR1cm4ge3sgdmFsdWUtPmRvdWJsZVZh
bHVlKCkgfX07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH0KK307CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorc3RydWN0IFBlcmNlbnRSYXdL
bm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQ
YXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gUGVyY2VudGFnZVRva2VuOworICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAg
ICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pOwogCi1z
dGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9r
ZW5UeXBlUGVyY2VudGFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIEFTU0VSVChyYW5n
ZS5wZWVrKCkudHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbik7Ci0KLSAgICBpZiAoYXV0byB2YWxp
ZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1
ZSgpLCB2YWx1ZVJhbmdlKSkgewotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOwotICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7CisgICAgICAgIGlmIChhdXRv
IHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyhyYW5nZS5wZWVrKCkubnVtZXJp
Y1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci19Cit9OwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1
bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRv
a2VuKTsKK3N0cnVjdCBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBJZGVudFRv
a2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
VW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBJZGVudFRva2VuKTsKIAotICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFi
bGUuZ2V0KHJhbmdlLnBlZWsoKS5pZCgpKSkgewotICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50
eXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgotICAgICAg
ICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHZhcmlh
YmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRW
YWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoYXV0
byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRl
ZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2Up
KSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotCiAvLyBNQVJL
OiBQZXJjZW50IChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWluaW5nIGNhbGMpCiAKLXN0YXRp
YyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBQZXJjZW50Q1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9r
ZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBV
bml0bGVzc1plcm9RdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBDYWxjUGFy
c2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5n
ZSwgc3ltYm9sVGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZD
YXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KTsKLX0KKyAgICAgICAgQ2FsY1Bh
cnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFu
Z2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFs
dWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpOworICAgIH0KK307CiAK
LXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbik7Ci0KLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1
ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCB2YWx1
ZVJhbmdlKSkgewotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwot
ICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqdmFsaWRhdGVkVmFsdWUsIENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRSk7CitzdHJ1Y3QgUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXIgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IFBlcmNlbnRhZ2VUb2tlbjsKKyAg
ICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrLCBD
U1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pOworICAgICAgICAKKyAgICAgICAgaWYgKGF1dG8gdmFs
aWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHJhbmdlLnBlZWsoKS5udW1lcmljVmFs
dWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSh2YWxpZGF0
ZWRWYWx1ZS0+dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQor
fTsKIAogLy8gTUFSSzogTGVuZ3RoIChyYXcpCiAKQEAgLTQ1MCw4MzEgKzQ1MCw5NDUgQEAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB2YWxpZGF0ZWRMZW5ndGhSYXcoZG91YmxlCiAgICAg
cmV0dXJuIHZhbHVlOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1
bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdl
JiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrKQotewotICAg
IGF1dG8gcmFuZ2UgPSBzb3VyY2VSYW5nZTsKLSAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVD
YWxjUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHNvdXJjZVJh
bmdlID0gcmFuZ2U7Ci0gICAgICAgIHJldHVybiB7IHsgdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwg
dmFsdWUtPmRvdWJsZVZhbHVlKCkgfSB9Oworc3RydWN0IExlbmd0aFJhd0tub3duVG9rZW5UeXBl
RnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5
cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxM
ZW5ndGhSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0Nh
bGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAg
ICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKworICAgICAg
ICBhdXRvIHJhbmdlQ29weSA9IHJhbmdlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1
bWVDYWxjUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpMZW5ndGgsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAg
ICAgcmFuZ2UgPSByYW5nZUNvcHk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhp
cyB2YWxpZGF0ZSB0aGUgY2FsYyB2YWx1ZSBhcyBpcyBkb25lIGZvciB0aGUgTnVtYmVyUmF3IHZh
cmlhbnQ/CisgICAgICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZh
bHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5U
eXBlRGltZW5zaW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyaykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBE
aW1lbnNpb25Ub2tlbik7CitzdHJ1Y3QgTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25D
b25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5U
eXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3
PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9s
VGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQo
cmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbik7CiAKLSAgICBhdXRvJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKKyAgICAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAK
LSAgICBhdXRvIHVuaXRUeXBlID0gdG9rZW4udW5pdFR5cGUoKTsKLSAgICBzd2l0Y2ggKHVuaXRU
eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1FVSVJLWV9FTVM6Ci0gICAgICAgIGlm
IChwYXJzZXJNb2RlICE9IFVBU2hlZXRNb2RlKQorICAgICAgICBhdXRvIHVuaXRUeXBlID0gdG9r
ZW4udW5pdFR5cGUoKTsKKyAgICAgICAgc3dpdGNoICh1bml0VHlwZSkgeworICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKKyAgICAgICAgICAgIGlmIChwYXJzZXJNb2Rl
ICE9IFVBU2hlZXRNb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VN
UzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CisgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19MSFM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19STEhTOgor
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfSUM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6CisgICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0NNOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06CisgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgorICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19WVzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgorICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZN
QVg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WQjoKKyAgICAgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1ZJOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZXOgorICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZIOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfU1ZNSU46CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVk1BWDoKKyAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWQjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1NWSToKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWVzoKKyAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0xWSDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xW
TUlOOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZNQVg6CisgICAgICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19MVkI6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkk6
CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVlc6CisgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19EVkg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVk1JTjoKKyAg
ICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWTUFYOgorICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfRFZCOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgorICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgRkFMTFRI
Uk9VR0g7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUkVNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19STEhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DSFM6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19F
WFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19WSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoK
LSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZJOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19TVlc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWSDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfU1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWTUFYOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1NWSToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZXOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19MVkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWTUlOOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19MVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZCOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkk6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0RWVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZIOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19EVk1JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZNQVg6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0RWQjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgorICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0
ZWRMZW5ndGhSYXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAg
ICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0
dXJuIHsgeyB1bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKKyAgICAgICAgfQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KK307CiAKLSAgICBpZiAoYXV0byB2YWxpZGF0
ZWRWYWx1ZSA9IHZhbGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVS
YW5nZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAg
ICAgICAgcmV0dXJuIHsgeyB1bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK3N0cnVjdCBMZW5ndGhSYXdLbm93blRva2VuVHlw
ZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlw
ZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5n
dGhSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKIAotc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9r
ZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBOdW1iZXJUb2tlbik7CisgICAgICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygp
OwogCi0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgICAgIGlmICghc2hvdWxk
QWNjZXB0VW5pdGxlc3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgcGFyc2VyTW9kZSwgdW5p
dGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpCisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCi0gICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHRva2VuLm51
bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkFs
bG93KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRMZW5ndGhS
YXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5n
ZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHsgeyBD
U1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OworICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9
IHZhbGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsK
LSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0
dXJuIHsgeyBDU1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OwogICAgIH0K
LSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAogLy8gTUFSSzogTGVuZ3RoIChDU1NQ
cmltaXRpdmVWYWx1ZSAtIG1haW50YWluaW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworc3RydWN0IExlbmd0
aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUg
PSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwog
Ci0gICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29u
c3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOwotfQorICAg
ICAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3Ro
LCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBwYXJzZXIu
Y29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOworICAg
IH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERp
bWVuc2lvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1pl
cm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9
IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcykpCi0gICAgICAgIHJldHVy
biBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IExlbmd0
aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkK
KyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxl
bmd0aFJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLXN0
YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0
bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IE51bWJlclRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRp
YyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRs
ZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2Vu
KTsKIAotICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25U
b2tlblR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcykpCi0gICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+
dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAg
IGlmIChhdXRvIGxlbmd0aFJhdyA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI6OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1
bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZh
bHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KK307CiAKIC8vIE1BUks6IEFuZ2xlIChyYXcpCiAKLXN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKLXsKLSAgICBhdXRvIHJhbmdlID0g
c291cmNlUmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgc3lt
Ym9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHNvdXJjZVJhbmdlID0gcmFuZ2U7Ci0g
ICAgICAgIHJldHVybiB7IHsgdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgdmFsdWUtPmRvdWJsZVZh
bHVlKCkgfSB9Oworc3RydWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVy
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBG
dW5jdGlvblRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1l
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgYXV0byByYW5nZUNvcHkg
PSByYW5nZTsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUs
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUNv
cHk7CisgICAgICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZhbHVl
LT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3RhdGljIHN0
ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURp
bWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRh
YmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3Na
ZXJvUXVpcmspCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9u
VG9rZW4pOworc3RydWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lciB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRGlt
ZW5zaW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZh
bHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJr
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9u
VG9rZW4pOwogCi0gICAgYXV0byB1bml0VHlwZSA9IHJhbmdlLnBlZWsoKS51bml0VHlwZSgpOwot
ICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0dSQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAgIHJldHVybiB7
IHsgdW5pdFR5cGUsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1Zh
bHVlKCkgfSB9OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICBhdXRvIHVu
aXRUeXBlID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7CisgICAgICAgIHN3aXRjaCAodW5pdFR5
cGUpIHsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICAgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1JBRDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6
CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAgICAgICAgICAgcmV0dXJu
IHsgeyB1bml0VHlwZSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmlj
VmFsdWUoKSB9IH07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQorfTsKK3N0cnVjdCBB
bmdsZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVu
aXRsZXNzWmVybykKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IE51bWJlclRva2VuKTsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19CisgICAgICAgIGlm
IChzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4g
eyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICB9Cit9OwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVy
bykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7Ci0K
LSAgICBpZiAoc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZShyYW5nZS5wZWVrKCkubnVtZXJpY1Zh
bHVlKCksIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQotICAgICAgICByZXR1
cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQot
CiAvLyBNQVJLOiBBbmdsZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQog
Ci1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3Na
ZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBGdW5jdGlvblRva2VuOwor
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZh
bHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxl
c3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCi0gICAgQ2FsY1BhcnNlciBw
YXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdlLCBzeW1i
b2xUYWJsZSwgcG9vbCk7Ci0gICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5
KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKTsKLX0KKyAgICAgICAgQ2FsY1BhcnNlciBwYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdlLCBzeW1ib2xU
YWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29y
eShDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSk7CisgICAgfQorfTsKIAotc3RhdGljIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVu
aXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKK3N0cnVjdCBB
bmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25D
b25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5U
eXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVu
aXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJh
bmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOwogCi0gICAgaWYgKGF1dG8gYW5n
bGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2Us
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3Na
ZXJvKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYW5nbGVSYXctPnZhbHVlLCBh
bmdsZVJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlmIChhdXRv
IGFuZ2xlUmF3ID0gQW5nbGVSYXdLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOjpjb25z
dW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShhbmds
ZVJhdy0+dmFsdWUsIGFuZ2xlUmF3LT50eXBlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorfTsKIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xl
Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFs
dWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJl
clRva2VuKTsKK3N0cnVjdCBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVOdW1iZXJDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJU
b2tlblR5cGUgdG9rZW5UeXBlID0gTnVtYmVyVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNz
WmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwogCi0gICAgaWYg
KGF1dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYW5nbGVSYXctPnZh
bHVlLCBhbmdsZVJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlm
IChhdXRvIGFuZ2xlUmF3ID0gQW5nbGVSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpj
b25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxl
c3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShh
bmdsZVJhdy0+dmFsdWUsIGFuZ2xlUmF3LT50eXBlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorfTsKIAotCiAvLyBNQVJLOiBUaW1lIChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50
YWluaW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVU
aW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUo
KSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9rZW47CisgICAgc3Rh
dGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9R
dWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBl
ZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBDYWxjUGFyc2VyIHBhcnNlcihy
YW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZSwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUs
IHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxh
dGlvbkNhdGVnb3J5OjpUaW1lKTsKLX0KKyAgICAgICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2Us
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWUsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBwb29s
KTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlRpbWUpOworICAgIH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0
bGVzc1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOworc3RydWN0IFRpbWVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERpbWVuc2lvblRva2Vu
OworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVp
cmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotICAgIGlmICh2YWx1ZVJhbmdlID09IFZh
bHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IDAp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1
ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCAwKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoYXV0byB1bml0ID0gcmFuZ2Uu
cGVlaygpLnVuaXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19NUyB8fCB1bml0ID09
IENTU1VuaXRUeXBlOjpDU1NfUykKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFu
Z2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7Cisg
ICAgICAgIGlmIChhdXRvIHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9PSBD
U1NVbml0VHlwZTo6Q1NTX01TIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19TKQorICAgICAg
ICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKIAotc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1ND
YWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewot
ICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKK3N0cnVjdCBU
aW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1
bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUg
PSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUm
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2Vu
KTsKIAotICAgIGlmICh1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdyAmJiBzaG91bGRB
Y2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgcGFyc2VyTW9k
ZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpIHsKLSAgICAgICAgaWYgKHZh
bHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgcmFuZ2UucGVlaygpLm51bWVy
aWNWYWx1ZSgpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1
cm4gcG9vbC5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51
bWVyaWNWYWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX01TKTsKKyAgICAgICAgaWYgKHVuaXRsZXNz
ID09IFVuaXRsZXNzUXVpcms6OkFsbG93ICYmIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUocmFu
Z2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3Na
ZXJvUXVpcms6OkFsbG93KSkgeworICAgICAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVS
YW5nZTo6Tm9uTmVnYXRpdmUgJiYgcmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpIDwgMCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNy
ZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVl
KCksIENTU1VuaXRUeXBlOjpDU1NfTVMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK307CiAKIC8vIE1BUks6IFJlc29s
dXRpb24gKENTU1ByaW1pdGl2ZVZhbHVlIC0gbm8gY2FsYykKIAotc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb25DU1NQcmltaXRpdmVWYWx1ZVdpdGhLbm93
blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQ
b29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lv
blRva2VuKTsKK3N0cnVjdCBSZXNvbHV0aW9uQ1NTUHJpbWl0aXZlVmFsdWVXaXRoS25vd25Ub2tl
blR5cGVEaW1lbnNpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJU
b2tlblR5cGUgdG9rZW5UeXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAot
ICAgIGlmIChhdXRvIHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9PSBDU1NV
bml0VHlwZTo6Q1NTX0RQUFggfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX1ggfHwgdW5pdCA9
PSBDU1NVbml0VHlwZTo6Q1NTX0RQSSB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfRFBDTSkK
LSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CisgICAgICAgIGlmIChhdXRvIHVuaXQg
PSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX0RQUFgg
fHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX1ggfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NT
X0RQSSB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfRFBDTSkKKyAgICAgICAgICAgIHJldHVy
biBwb29sLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVt
ZXJpY1ZhbHVlKCksIHVuaXQpOwogCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KK307CiAKKy8vIE1BUks6IFNwZWNpYWxpemVkIGNvbWJpbmF0
aW9uIGNvbnN1bWVycy4KIAotLy8gTUFSSzogLSBQcmltaXRpdmUgdmFsdWUgY29uc3VtZXJzIGZv
ciBjYWxsZXJzIHRoYXQgZG8gTk9UIGtub3cgdGhlIHRva2VuIHR5cGUuCisvLyBGSVhNRTogSXQg
d291bGQgYmUgZ29vZCB0byBmaW5kIGEgd2F5IHRvIHN5bnRoZXNpemUgdGhpcyBmcm9tIGFuIGFu
Z2xlIGFuZCBudW1iZXIgc3BlY2lmaWMgdmFyaWFudHMuCitzdHJ1Y3QgQW5nbGVPck51bWJlclJh
d0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQ
YXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gSWRlbnRUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxBbmdsZU9yTnVtYmVyUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0KHJhbmdlLnBlZWsoKS5p
ZCgpKSkgeworICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19SQUQ6CisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKKyAg
ICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAgICAgICAgICAgICAgIHJh
bmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEFuZ2xlUmF3IHsgdmFyaWFibGUtPnR5cGUsIHZhcmlhYmxlLT52YWx1ZSB9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkK
LXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICAgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyUmF3IHsgdmFy
aWFibGUtPnZhbHVlIH07CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2Ug
RnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhL
bm93blRva2VuVHlwZUZ1bmN0aW9uPEludFR5cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUpOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1
bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcjxJbnRUeXBlPihyYW5nZSwg
bWluaW11bVZhbHVlKTsKLSAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLX0KKy8vIEZJWE1FOiBJdCB3b3VsZCBiZSBnb29kIHRvIGZpbmQgYSB3YXkgdG8gc3lu
dGhlc2l6ZSB0aGlzIGZyb20gYW4gbnVtYmVyIGFuZCBwZXJjZW50IHNwZWNpZmljIHZhcmlhbnRz
Lgorc3RydWN0IE51bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lciB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gSWRl
bnRUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJPclBlcmNlbnRSYXc+IGNv
bnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBpZiAoYXV0byB2
YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZh
bHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7
CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7eyAqdmFsaWRhdGVkVmFsdWUgfX07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBJbnRUeXBlPiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyVHlwZShD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSwgQ1NTVmFsdWVQ
b29sJiBwb29sKQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgICAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICAgICAgICAgICAgICBpZiAoYXV0
byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh2YXJpYWJsZS0+dmFsdWUsIHZh
bHVlUmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7eyAqdmFsaWRhdGVkVmFs
dWUgfX07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
c3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAg
IHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb248SW50VHlwZT4ocmFuZ2UsIG1pbmltdW1WYWx1ZSwgcG9vbCk7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CiAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4g
Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZU51bWJlcjxJbnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlLCBwb29sKTsKLQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH0KK307CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKy8vIE1BUks6IC0gTWV0YSBDb25zdW1l
cnMKIAotc3RkOjpvcHRpb25hbDxpbnQ+IGNvbnN1bWVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBkb3VibGUgbWluaW11bVZhbHVlKQotewotICAgIHJldHVybiBjb25zdW1l
SW50ZWdlclR5cGVSYXc8aW50PihyYW5nZSwgbWluaW11bVZhbHVlKTsKLX0KK3RlbXBsYXRlPHR5
cGVuYW1lIENvbnN1bWVyLCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgVHJhbnNmb3JtQXBwbGll
ciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGRlY2x0eXBlKGF1dG8pIGFwcGx5
KFQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUgbWlu
aW11bVZhbHVlKQotewotICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGU8aW50PihyYW5nZSwg
bWluaW11bVZhbHVlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLX0KK3RlbXBsYXRlPHR5
cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IFRyYW5zZm9ybUFwcGxpZXI8Q29uc3VtZXIsIHR5cGVu
YW1lIHN0ZDo6dm9pZF90PHR5cGVuYW1lIENvbnN1bWVyOjpUcmFuc2Zvcm1lcj4+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgZGVjbHR5cGUoYXV0bykgYXBwbHkoVCB2YWx1ZSkg
eyByZXR1cm4gQ29uc3VtZXI6OlRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0odmFsdWUpOyB9Cit9Owog
Ci1zdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3VtZXIsIHR5cGVu
YW1lIFQ+CitzdGF0aWMgZGVjbHR5cGUoYXV0bykgYXBwbHlUcmFuc2Zvcm0oVCB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PHVuc2lnbmVkPihyYW5nZSwgMSk7Cisg
ICAgcmV0dXJuIFRyYW5zZm9ybUFwcGxpZXI8Q29uc3VtZXI+OjphcHBseSh2YWx1ZSk7CiB9CiAK
LVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlPHVu
c2lnbmVkPihyYW5nZSwgMSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci19CisvLyBUcmFu
c2Zvcm1lcnM6CiAKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgYXV0
byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IElk
ZW50aXR5VHJhbnNmb3JtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFQ7CisgICAgc3RhdGljIFQg
dHJhbnNmb3JtKFQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OwogCi0gICAgc3dpdGNoICh0
b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBj
b25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFs
dWVSYW5nZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQsIHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lIFZhcmlhbnRUeXBlPgorc3RydWN0IFJhd1ZhcmlhbnRUcmFuc2Zvcm1lckJhc2Ug
eworICAgIHVzaW5nIFJlc3VsdCA9IFJlc3VsdFR5cGU7CiAKLSAgICBjYXNlIE51bWJlclRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJl
cihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKTsKKyAgICBzdGF0aWMgUmVzdWx0IHRyYW5zZm9ybShW
YXJpYW50VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZh
bHVlLCBbXSAoYXV0byB2YWx1ZSkgeyByZXR1cm4gUGFyZW50Ojp0cmFuc2Zvcm0odmFsdWUpOyB9
KTsKKyAgICB9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICBzdGF0aWMgdHlw
ZW5hbWUgUmVzdWx0Ojp2YWx1ZV90eXBlIHRyYW5zZm9ybSh0eXBlbmFtZSBSZXN1bHQ6OnZhbHVl
X3R5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
YXRpYyBSZXN1bHQgdHJhbnNmb3JtKHN0ZDo6b3B0aW9uYWw8VD4gdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gUGFyZW50Ojp0cmFuc2Zvcm0oKnZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OwogCi1SZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBl
ZWsoKTsKK3N0cnVjdCBBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXIgOiBSYXdW
YXJpYW50VHJhbnNmb3JtZXJCYXNlPEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1l
ciwgc3RkOjpvcHRpb25hbDxkb3VibGU+LCBBbmdsZU9yTnVtYmVyUmF3PiB7CisgICAgdXNpbmcg
UmF3VmFyaWFudFRyYW5zZm9ybWVyQmFzZTxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNm
b3JtZXIsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiwgQW5nbGVPck51bWJlclJhdz46OnRyYW5zZm9y
bTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpKTsKKyAgICBzdGF0aWMgZG91YmxlIHRyYW5zZm9ybShBbmdsZVJh
dyBhbmdsZVJhdykKKyAgICB7CisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29t
cHV0ZURlZ3JlZXMoYW5nbGVSYXcudHlwZSwgYW5nbGVSYXcudmFsdWUpOworICAgIH0KIAotICAg
IGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1
ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOworICAgIHN0YXRpYyBkb3VibGUgdHJhbnNmb3JtKE51bWJlclJhdyB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTsKICAgICB9Cit9OwogCi0gICAgcmV0
dXJuIG51bGxwdHI7Ci19CitzdHJ1Y3QgTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNm
b3JtZXIgOiBSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlPE51bWJlck9yUGVyY2VudERpdmlkZWRC
eTEwMFRyYW5zZm9ybWVyLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4sIE51bWJlck9yUGVyY2VudFJh
dz4geworICAgIHVzaW5nIFJhd1ZhcmlhbnRUcmFuc2Zvcm1lckJhc2U8TnVtYmVyT3JQZXJjZW50
RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXIsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiwgTnVtYmVyT3JQ
ZXJjZW50UmF3Pjo6dHJhbnNmb3JtOwogCi1zdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3Vt
ZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJz
ZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCi17
Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgCi0gICAgc3dpdGNoICh0b2tl
bi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25z
dW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVS
YW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOworICAgIHN0YXRpYyBkb3VibGUgdHJhbnNmb3Jt
KE51bWJlclJhdyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTsKKyAg
ICB9CiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUxl
bmd0aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdl
LCBwYXJzZXJNb2RlLCB1bml0bGVzcyk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAg
ICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFu
Z2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOwotCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7CisgICAgc3RhdGljIGRvdWJsZSB0cmFuc2Zvcm0oUGVyY2VudFJh
dyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSAvIDEwMC4wOwogICAg
IH0KK307CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorLy8gTUFSSzogTWV0YUNvbnN1
bWVyRGlzcGF0Y2hlcgogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQotewotICAgIGF1dG8m
IHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8Q1NTUGFyc2VyVG9rZW5UeXBlIHRva2Vu
VHlwZSwgdHlwZW5hbWUgQ29uc3VtZXIsIHR5cGVuYW1lID0gdm9pZD4KK3N0cnVjdCBNZXRhQ29u
c3VtZXJEaXNwYXRjaGVyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0
YXRpYyB0eXBlbmFtZSBDb25zdW1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBl
KCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVu
Z3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IE1ldGFD
b25zdW1lckRpc3BhdGNoZXI8RnVuY3Rpb25Ub2tlbiwgQ29uc3VtZXIsIHR5cGVuYW1lIHN0ZDo6
dm9pZF90PHR5cGVuYW1lIENvbnN1bWVyOjpGdW5jdGlvblRva2VuPj4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQg
Y29uc3VtZShBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBhcHBseVRyYW5z
Zm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6OkZ1bmN0aW9uVG9rZW46OmNvbnN1bWUoc3RkOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7CisgICAgfQorfTsKIAotICAgIGNhc2UgRGltZW5zaW9uVG9r
ZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci0gICAgCi0gICAg
Y2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVl
UmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IE1ldGFDb25zdW1lckRpc3BhdGNo
ZXI8TnVtYmVyVG9rZW4sIENvbnN1bWVyLCB0eXBlbmFtZSBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBD
b25zdW1lcjo6TnVtYmVyVG9rZW4+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
KyAgICBzdGF0aWMgdHlwZW5hbWUgQ29uc3VtZXI6OlJlc3VsdCBjb25zdW1lKEFyZ3MmJi4uLiBh
cmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGx5VHJhbnNmb3JtPENvbnN1bWVyPihDb25z
dW1lcjo6TnVtYmVyVG9rZW46OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7
CisgICAgfQorfTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29uc3VtZXI+CitzdHJ1Y3QgTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxQZXJjZW50YWdl
VG9rZW4sIENvbnN1bWVyLCB0eXBlbmFtZSBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBDb25zdW1lcjo6
UGVyY2VudGFnZVRva2VuPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAg
c3RhdGljIHR5cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4gYXJncykK
KyAgICB7CisgICAgICAgIHJldHVybiBhcHBseVRyYW5zZm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6
OlBlcmNlbnRhZ2VUb2tlbjo6Y29uc3VtZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsK
ICAgICB9Cit9OwogCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b25zdW1lcj4KK3N0cnVjdCBNZXRhQ29uc3VtZXJEaXNwYXRjaGVyPERpbWVuc2lvblRva2VuLCBD
b25zdW1lciwgdHlwZW5hbWUgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgQ29uc3VtZXI6OkRpbWVuc2lv
blRva2VuPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5
cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4gYXJncykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhcHBseVRyYW5zZm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6OkRpbWVuc2lv
blRva2VuOjpjb25zdW1lKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOworICAgIH0KK307
CiAKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIGNvbnN0IGF1dG8m
IHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3VtZXI+CitzdHJ1
Y3QgTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxJZGVudFRva2VuLCBDb25zdW1lciwgdHlwZW5hbWUg
c3RkOjp2b2lkX3Q8dHlwZW5hbWUgQ29uc3VtZXI6OklkZW50VG9rZW4+PiB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgdHlwZW5hbWUgQ29uc3VtZXI6OlJlc3Vs
dCBjb25zdW1lKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGx5VHJh
bnNmb3JtPENvbnN1bWVyPihDb25zdW1lcjo6SWRlbnRUb2tlbjo6Y29uc3VtZShzdGQ6OmZvcndh
cmQ8QXJncz4oYXJncykuLi4pKTsKKyAgICB9Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBl
KCkpIHsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyLCB0eXBlbmFtZS4uLiBBcmdzPgorYXV0
byBjb25zdW1lTWV0YUNvbnN1bWVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENT
U1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3Na
ZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBBcmdzJiYuLi4gYXJncykgLT4gdHlwZW5hbWUgQ29uc3Vt
ZXI6OlJlc3VsdAoreworICAgIHN3aXRjaCAocmFuZ2UucGVlaygpLnR5cGUoKSkgewogICAgIGNh
c2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSk7CisgICAgICAgIHJl
dHVybiBNZXRhQ29uc3VtZXJEaXNwYXRjaGVyPEZ1bmN0aW9uVG9rZW4sIENvbnN1bWVyPjo6Y29u
c3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNz
LCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiAKKyAgICBjYXNl
IE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxOdW1i
ZXJUb2tlbiwgQ29uc3VtZXI+Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKTsKKwogICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4g
Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKHJhbmdlLCB7IH0s
IHZhbHVlUmFuZ2UpOworICAgICAgICByZXR1cm4gTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxQZXJj
ZW50YWdlVG9rZW4sIENvbnN1bWVyPjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVl
UmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLik7CiAKKyAgICBjYXNlIERpbWVuc2lvblRva2VuOgorICAgICAgICByZXR1
cm4gTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxEaW1lbnNpb25Ub2tlbiwgQ29uc3VtZXI+Ojpjb25z
dW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKworICAgIGNhc2Ug
SWRlbnRUb2tlbjoKKyAgICAgICAgcmV0dXJuIE1ldGFDb25zdW1lckRpc3BhdGNoZXI8SWRlbnRU
b2tlbiwgQ29uc3VtZXI+Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKKyAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50
V29ya2VyU2FmZShyYW5nZSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7
Ci19CisvLyBNQVJLOiBTYW1lVG9rZW5NZXRhQ29uc3VtZXIKIAotUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIGF1
dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXIs
IHR5cGVuYW1lIENvbnN1bWVyc1R1cGxlLCBzaXplX3QgST4KK3N0cnVjdCBTYW1lVG9rZW5NZXRh
Q29uc3VtZXJBcHBsaWVyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0
YXRpYyB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uIGFyZ3Mp
CisgICAgeworICAgICAgICB1c2luZyBTZWxlY3RlZENvbnN1bWVyID0gc3RkOjp0dXBsZV9lbGVt
ZW50X3Q8SSAtIDEsIENvbnN1bWVyc1R1cGxlPjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0g
VHJhbnNmb3JtZXI6OnRyYW5zZm9ybShTZWxlY3RlZENvbnN1bWVyOjpjb25zdW1lKHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLikpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIFNhbWVUb2tlbk1ldGFDb25zdW1lcjxUcmFuc2Zvcm1lciwgQ29uc3VtZXJzVHVw
bGUsIEkgLSAxPjo6Y29uc3VtZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0K
K307CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tl
bjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBvb2wp
OwordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXIsIHR5cGVuYW1lIENvbnN1bWVyc1R1cGxl
Pgorc3RydWN0IFNhbWVUb2tlbk1ldGFDb25zdW1lckFwcGxpZXI8VHJhbnNmb3JtZXIsIENvbnN1
bWVyc1R1cGxlLCAwPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0
aWMgdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdCBjb25zdW1lKEFyZ3MmJi4uLikKKyAgICB7
CisgICAgICAgIHJldHVybiB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0IHsgfTsKKyAgICB9
Cit9OwogCi0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1l
UGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50
YWdlKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBvb2wpOwordGVtcGxhdGU8dHlwZW5hbWUgVHJh
bnNmb3JtZXIsIHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorc3RydWN0IFNhbWVUb2tlbk1l
dGFDb25zdW1lciB7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmNvbmp1bmN0aW9uX3Y8c3RkOjpi
b29sX2NvbnN0YW50PFRzOjp0b2tlblR5cGUgPT0gVDo6dG9rZW5UeXBlPi4uLj4sICJBbGwgQ29u
c3VtZXJzIHBhc3NlZCB0byBTYW1lVG9rZW5NZXRhQ29uc3VtZXIgbXVzdCBoYXZlIHRoZSBzYW1l
IHRva2VuVHlwZSIpOworICAgIHVzaW5nIENvbnN1bWVyc1R1cGxlID0gc3RkOjp0dXBsZTxULCBU
cy4uLj47CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBUOjp0b2tlblR5cGU7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgdHlwZW5hbWUgVHJhbnNmb3JtZXI6
OlJlc3VsdCBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxj
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNl
ck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVp
cmsgdW5pdGxlc3NaZXJvLCBBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IHRva2VuVHlwZSk7CisgICAgICAgIHJldHVybiBTYW1lVG9r
ZW5NZXRhQ29uc3VtZXJBcHBsaWVyPFRyYW5zZm9ybWVyLCBDb25zdW1lcnNUdXBsZSwgc3RkOjp0
dXBsZV9zaXplX3Y8Q29uc3VtZXJzVHVwbGU+Pjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUs
IHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLik7CiAgICAgfQorfTsKIAotICAgIHJldHVybiBudWxscHRyOwot
fQogCi1zdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1
bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQotewotICAgIGF1dG8mIHRv
a2VuID0gcmFuZ2UucGVlaygpOworLy8gTUFSSzogLSBDb25zdW1lciBkZWZpbml0aW9ucy4KIAot
ICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAg
ICAgICByZXR1cm4gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFu
Z2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3Na
ZXJvKTsKKy8vIE1BUks6IEludGVnZXIKIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFu
Z2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3Na
ZXJvKTsKK3RlbXBsYXRlPHR5cGVuYW1lIEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlcmdlclJh
bmdlPgorc3RydWN0IEludGVnZXJUeXBlUmF3Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9
IHN0ZDo6b3B0aW9uYWw8SW50VHlwZT47CiAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAg
ICByZXR1cm4gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7
IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7
Ci0gICAgICAgIGJyZWFrOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBJbnRlZ2VyVHlwZVJh
d0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjxJbnRUeXBlLCBpbnRlcmdlclJhbmdlPjsK
KyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IEludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVOdW1i
ZXJDb25zdW1lcjxJbnRUeXBlLCBpbnRlcmdlclJhbmdlPjsKK307CiAKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBicmVhazsKLSAgICB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlLCBJbnRlZ2Vy
UmFuZ2UgaW50ZXJnZXJSYW5nZT4KK3N0cnVjdCBJbnRlZ2VyVHlwZUNvbnN1bWVyIHsKKyAgICB1
c2luZyBSZXN1bHQgPSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+OwogCi0gICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLX0KKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gSW50ZWdlclR5cGVLbm93
blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI8SW50VHlwZSwgaW50ZXJnZXJSYW5nZT47CisgICAg
dXNpbmcgTnVtYmVyVG9rZW4gPSBJbnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI8SW50VHlwZSwgaW50ZXJnZXJSYW5nZT47Cit9OwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVBbmdsZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9k
ZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1
bml0bGVzc1plcm8pCi17Ci0gICAgcmV0dXJuIGNvbnN1bWVBbmdsZVdvcmtlclNhZmUocmFuZ2Us
IHBhcnNlck1vZGUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCksIHVuaXRsZXNzLCB1bml0bGVz
c1plcm8pOwotfQorLy8gTUFSSzogTnVtYmVyCiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUFuZ2xlV29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyTW9kZSBwYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wmIHBvb2wsIFVuaXRsZXNzUXVpcmsgdW5p
dGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKLXsKLSAgICBhdXRvJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKK3N0cnVjdCBOdW1iZXJSYXdDb25zdW1lciB7CisgICAgdXNpbmcg
UmVzdWx0ID0gc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+OwogCi0gICAgc3dpdGNoICh0b2tlbi50
eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1l
QW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24o
cmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxl
c3NaZXJvLCBwb29sKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gTnVtYmVyUmF3S25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgIHVzaW5nIE51bWJlclRva2VuID0gTnVtYmVy
UmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKK307CiAKLSAgICBjYXNlIERpbWVuc2lv
blRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpB
bGwsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpOworc3RydWN0IE51
bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudENvbnN1bWVyIDogTnVtYmVyUmF3Q29uc3Vt
ZXIgeworICAgIHVzaW5nIElkZW50VG9rZW4gPSBOdW1iZXJSYXdLbm93blRva2VuVHlwZUlkZW50
Q29uc3VtZXI7Cit9OwogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNv
bnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1i
ZXIocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvLCBwb29sKTsKLSAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19CitzdHJ1Y3QgTnVtYmVyQ29uc3VtZXIg
eworICAgIHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47CiAKLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0
bGVzc1F1aXJrIHVuaXRsZXNzKQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwor
ICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tl
biA9IE51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1i
ZXJDb25zdW1lcjsKK307CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2Ug
RnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFu
Z2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKKy8v
IE1BUks6IFBlcmNlbnQKIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVy
biBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVE
aW1lbnNpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworc3RydWN0IFBlcmNlbnRSYXdDb25zdW1lciB7Cisg
ICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PjsKIAotICAgIGNhc2Ug
TnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworICAgIHVz
aW5nIEZ1bmN0aW9uVG9rZW4gPSBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyOworICAgIHVzaW5nIFBlcmNlbnRhZ2VUb2tlbiA9IFBlcmNlbnRSYXdLbm93blRva2VuVHlw
ZVBlcmNlbnRDb25zdW1lcjsKK307CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19CitzdHJ1Y3QgUGVyY2VudFJhd0FsbG93
aW5nU3ltYm9sVGFibGVJZGVudENvbnN1bWVyIDogUGVyY2VudFJhd0NvbnN1bWVyIHsKKyAgICB1
c2luZyBJZGVudFRva2VuID0gUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjsK
K307CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgLy8gTk9URTogVW5saWtlIHRoZSBvdGhlciB0
eXBlcywgY2FsYygpIGRvZXMgbm90IHdvcmsgd2l0aCA8cmVzb2x1dGlvbj4uCitzdHJ1Y3QgUGVy
Y2VudENvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+OwogCi0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgdXNpbmcgRnVuY3Rp
b25Ub2tlbiA9IFBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJjZW50
Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1l
cjsKK307CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRGltZW5zaW9u
VG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lUmVzb2x1dGlvbkNTU1ByaW1pdGl2ZVZhbHVl
V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpKTsKLSAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisvLyBNQVJL
OiBMZW5ndGgKIAotICAgIHJldHVybiBudWxscHRyOwotfQorc3RydWN0IExlbmd0aFJhd0NvbnN1
bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz47CiAKLS8v
IE1BUks6IC0gQ29tYmluYXRpb24gY29uc3VtZXJzICh0b2tlbiB0eXBlIHVua25vd24gYnkgY2Fs
bGVyKS4KKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVG
dW5jdGlvbkNvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gTGVuZ3RoUmF3S25v
d25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IExl
bmd0aFJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7Cit9OwogCi1zdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1pl
cm8sIENTU1ZhbHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpCi17Ci0g
ICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CitzdHJ1Y3QgTGVuZ3RoQ29uc3VtZXIgewor
ICAgIHVzaW5nIFJlc3VsdCA9IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47CiAKLSAgICBzd2l0
Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgaWYg
KGF1dG8gdmFsdWUgPSBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwg
dW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9vbCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWU7
Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwb29sKTsK
KyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI7CisgICAgdXNpbmcgTnVtYmVyVG9r
ZW4gPSBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVt
YmVyQ29uc3VtZXI7CisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI7Cit9Owog
Ci0gICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2Us
IHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgcG9v
bCk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVB
bmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFu
Z2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywg
cG9vbCk7CisvLyBNQVJLOiBBbmdsZQogCi0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Ci0gICAg
ICAgIHJldHVybiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25v
d25Ub2tlblR5cGVQZXJjZW50YWdlKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBvb2wpOwotICAg
IAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KK3N0cnVjdCBBbmdsZVJhd0Nv
bnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PjsKIAot
ICAgIHJldHVybiBudWxscHRyOwotfQorICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBBbmdsZVJh
d0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9
IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICB1c2luZyBEaW1lbnNp
b25Ub2tlbiA9IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKK307CiAK
LXN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKLXsKLSAgICBh
dXRvIGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyA9IFtdKGF1dG8gcmVzdWx0KSAtPiBzdGQ6
Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gewotICAgICAgICBpZiAocmVzdWx0KQotICAg
ICAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgIH07CitzdHJ1Y3QgQW5nbGVDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsKIAotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygp
OworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENh
bGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgIHVzaW5nIE51bWJlclRv
a2VuID0gQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVt
YmVyQ29uc3VtZXI7CisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBBbmdsZUNTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKK307CiAK
LSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewot
ICAgICAgICBpZiAoYXV0byBsZW5ndGggPSBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5U
eXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Mp
KQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyhsZW5ndGgp
OwotICAgICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJl
dHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcocGVyY2VudCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KKy8vIE1BUks6IFRpbWUKIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAg
ICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcoY29uc3VtZUxlbmd0aFJhd1dp
dGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJN
b2RlLCB1bml0bGVzcykpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJl
dHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcoY29uc3VtZUxlbmd0aFJhd1dpdGhLbm93
blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0
bGVzcykpOworc3RydWN0IFRpbWVDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPjsKIAotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAg
ICByZXR1cm4gY29udmVydFRvTGVuZ3RoT3JQZXJjZW50UmF3KGNvbnN1bWVQZXJjZW50UmF3V2l0
aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKSk7CisgICAg
dXNpbmcgRnVuY3Rpb25Ub2tlbiA9IFRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9IFRp
bWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI7CisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOworfTsKIAotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKy8vIE1BUks6IFJlc29sdXRpb24KIAotICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci19CitzdHJ1Y3QgUmVzb2x1dGlvbkNvbnN1bWVyIHsKKyAgICB1
c2luZyBSZXN1bHQgPSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+OwogCi1SZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBV
bml0bGVzc1F1aXJrIHVuaXRsZXNzLCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSkKLXsK
LSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICAvLyBOT1RFOiBVbmxpa2UgdGhl
IG90aGVyIHR5cGVzLCBjYWxjKCkgZG9lcyBub3Qgd29yayB3aXRoIDxyZXNvbHV0aW9uPi4KKyAg
ICB1c2luZyBEaW1lbnNpb25Ub2tlbiA9IFJlc29sdXRpb25DU1NQcmltaXRpdmVWYWx1ZVdpdGhL
bm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOworfTsKIAotICAgIHN3aXRjaCAodG9rZW4u
dHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOiB7Ci0gICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgdGhpcyBiZSB1c2luZyB0cnlpbmcgdG8gZ2VuZXJhdGUgdGhlIGNhbGMgd2l0aCBib3Ro
IExlbmd0aCBhbmQgUGVyY2VudCBkZXN0aW5hdGlvbiBjYXRlZ29yeSB0eXBlcz8KLSAgICAgICAg
Q2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFs
dWVSYW5nZSwgeyB9LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCBhbGxvd3NOZWdhdGl2ZVBl
cmNlbnRhZ2UpOwotICAgICAgICBpZiAoYXV0byBjYWxjdWxhdGlvbiA9IHBhcnNlci52YWx1ZSgp
OyBjYWxjdWxhdGlvbiAmJiBjYW5Db25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29y
eSgpLCBwYXJzZXJNb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVl
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKy8vIE1BUks6IC0gQ29tYmluYXRpb24gY29uc3Vt
ZXIgZGVmaW5pdGlvbnMuCiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1
cm4gY29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisvLyBNQVJLOiBBbmdsZSAr
IFBlcmNlbnQKIAotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4gY29u
c3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlUGVy
Y2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
KTsKK3N0cnVjdCBBbmdsZU9yUGVyY2VudENvbnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IFNhbWVUb2tlbk1ldGFDb25zdW1lcjwKKyAgICAg
ICAgSWRlbnRpdHlUcmFuc2Zvcm1lcjxSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+PiwKKyAgICAg
ICAgQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b25Db25zdW1lciwKKyAgICAgICAgUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyCisgICAgPjsKKyAgICB1c2luZyBOdW1iZXJU
b2tlbiA9IEFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51
bWJlckNvbnN1bWVyOworICAgIHVzaW5nIFBlcmNlbnRhZ2VUb2tlbiA9IFBlcmNlbnRDU1NQcmlt
aXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlUGVyY2VudENvbnN1bWVyOworICAg
IHVzaW5nIERpbWVuc2lvblRva2VuID0gQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0
aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI7Cit9OworCisvLyBNQVJLOiBMZW5ndGgg
KyBQZXJjZW50CisKK3N0cnVjdCBMZW5ndGhPclBlcmNlbnRSYXdUcmFuc2Zvcm1lciB7CisgICAg
dXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+OworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGhPclBl
cmNlbnRSYXc+IHRyYW5zZm9ybShUIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuIHsgKnZhbHVlIH07CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiB0cmFuc2Zvcm0oc3RkOjpvcHRpb25hbDxMZW5ndGhP
clBlcmNlbnRSYXc+IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0K
K307CiAKLS8vIE1BUks6IC0gQ29tYmluYXRpb24gY29uc3VtZXJzIHRoYXQgYWxsb3cgbG9va3Vw
IGluIHRoZSBzeW1ib2wgdGFibGUgZm9yIElkZW50VG9rZW5zIChieSBkZWZhdWx0LCBvdGhlciBj
b25zdW1lcnMgb25seSBsb29rdXAgaW4gdGhlIHN5bWJvbCB0YWJsZSBmb3IgY2FsYygpKS4KK3N0
cnVjdCBMZW5ndGhPclBlcmNlbnRSYXdDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3Rk
OjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+OworICAgIHVzaW5nIFRyYW5zZm9ybWVyID0g
TGVuZ3RoT3JQZXJjZW50UmF3VHJhbnNmb3JtZXI7CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRv
dWJsZT4gY29uc3VtZU51bWJlckFsbG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKQotewotICAgIGF1dG8mIHRva2Vu
ID0gcmFuZ2UucGVlaygpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBTYW1lVG9rZW5NZXRh
Q29uc3VtZXI8CisgICAgICAgIExlbmd0aE9yUGVyY2VudFJhd1RyYW5zZm9ybWVyLAorICAgICAg
ICBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBMZW5n
dGhSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIKKyAgICA+OworICAgIHVzaW5nIE51
bWJlclRva2VuID0gTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICB1
c2luZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29u
c3VtZXI7CisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBMZW5ndGhSYXdLbm93blRva2VuVHlw
ZURpbWVuc2lvbkNvbnN1bWVyOworfTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0g
ICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSk7
CisvLyBNQVJLOiBBbmdsZSArIE51bWJlcgogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAg
ICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2Us
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
QW5nbGVPck51bWJlclJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBUcmFuc2Zvcm1lciA9IFQ7Cisg
ICAgdXNpbmcgUmVzdWx0ID0gdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdDsKIAotICAgIGNh
c2UgSWRlbnRUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25U
b2tlblR5cGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOworICAgIHVzaW5n
IEZ1bmN0aW9uVG9rZW4gPSBTYW1lVG9rZW5NZXRhQ29uc3VtZXI8CisgICAgICAgIFRyYW5zZm9y
bWVyLAorICAgICAgICBOdW1iZXJSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIsCisg
ICAgICAgIEFuZ2xlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyCisgICAgPjsKKyAg
ICB1c2luZyBOdW1iZXJUb2tlbiA9IE51bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI7CisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBBbmdsZVJhd0tub3duVG9rZW5UeXBlRGlt
ZW5zaW9uQ29uc3VtZXI7Cit9OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBBbmdsZU9yTnVtYmVyUmF3QWxsb3dpbmdT
eW1ib2xUYWJsZUlkZW50Q29uc3VtZXIgOiBBbmdsZU9yTnVtYmVyUmF3Q29uc3VtZXI8VD4gewor
ICAgIHVzaW5nIElkZW50VG9rZW4gPSBBbmdsZU9yTnVtYmVyUmF3S25vd25Ub2tlblR5cGVJZGVu
dENvbnN1bWVyOworfTsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19CisvLyBNQVJLOiBO
dW1iZXIgKyBQZXJjZW50CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBl
cmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWso
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgTnVtYmVyT3JQZXJjZW50UmF3Q29uc3Vt
ZXIgeworICAgIHVzaW5nIFRyYW5zZm9ybWVyID0gVDsKKyAgICB1c2luZyBSZXN1bHQgPSB0eXBl
bmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsK
LSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJh
d1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5n
ZSk7CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IFNhbWVUb2tlbk1ldGFDb25zdW1lcjwKKyAg
ICAgICAgVHJhbnNmb3JtZXIsCisgICAgICAgIFBlcmNlbnRSYXdLbm93blRva2VuVHlwZUZ1bmN0
aW9uQ29uc3VtZXIsCisgICAgICAgIE51bWJlclJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25z
dW1lcgorICAgID47CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBOdW1iZXJSYXdLbm93blRva2Vu
VHlwZU51bWJlckNvbnN1bWVyOworICAgIHVzaW5nIFBlcmNlbnRhZ2VUb2tlbiA9IFBlcmNlbnRS
YXdLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjsKK307CiAKLSAgICBjYXNlIFBlcmNlbnRh
Z2VUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5U
eXBlUGVyY2VudGFnZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOwogCi0gICAgY2Fz
ZSBJZGVudFRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25U
b2tlblR5cGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpOwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK3N0cnVjdCBOdW1iZXJPclBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxl
SWRlbnRDb25zdW1lciA6IE51bWJlck9yUGVyY2VudFJhd0NvbnN1bWVyPFQ+IHsKKyAgICB1c2lu
ZyBJZGVudFRva2VuID0gTnVtYmVyT3JQZXJjZW50UmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1
bWVyOworfTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisvLyBNQVJLOiAtIENvbnN1bWVyIGZ1bmN0aW9ucyAtIHV0aWxp
emUgY29uc3VtZXIgZGVmaW5pdGlvbnMgYWJvdmUsIGdpdmluZyBtb3JlIHRhcmdldHRlZCBpbnRl
cmZhY2VzIGFuZCBhbGxvd2luZyBleHBvc3VyZSB0byBvdGhlciBmaWxlcy4KKwordGVtcGxhdGU8
dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVyZ2VyUmFuZ2U+IHN0ZDo6b3B0aW9u
YWw8SW50VHlwZT4gY29uc3VtZUludGVnZXJUeXBlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlKQoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPEludGVnZXJUeXBlUmF3Q29u
c3VtZXI8SW50VHlwZSwgaW50ZXJnZXJSYW5nZT4+KHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFs
bCwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlk
LCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBjb25zdW1lQW5nbGVSYXdPck51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlw
ZSwgSW50ZWdlclJhbmdlIGludGVyZ2VyUmFuZ2U+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUludGVnZXJUeXBlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZVBv
b2wmIHBvb2wpCiB7Ci0gICAgYXV0byBjb21wdXRlRGVncmVlcyA9IFtdKGF1dG8gYW5nbGVSYXcp
IC0+IHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB7Ci0gICAgICAgIGlmIChhbmdsZVJhdykKLSAgICAg
ICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMoYW5nbGVSYXct
PnR5cGUsIGFuZ2xlUmF3LT52YWx1ZSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0g
ICAgfTsKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxJbnRlZ2VyVHlwZUNvbnN1bWVy
PEludFR5cGUsIGludGVyZ2VyUmFuZ2U+PihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIENT
U1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgcG9vbCk7Cit9CiAKLSAgICBhdXRvJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKK3N0ZDo6b3B0aW9uYWw8aW50PiBjb25zdW1lSW50ZWdlclJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3
PGludCwgSW50ZWdlclJhbmdlOjpBbGw+KHJhbmdlKTsKK30KIAotICAgIHN3aXRjaCAodG9rZW4u
dHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICBpZiAoYXV0byBhbmds
ZVJhdyA9IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7
IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBV
bml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSkKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlRGVn
cmVlcyhhbmdsZVJhdyk7Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3du
VG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsKTsKLSAgICAKLSAg
ICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29tcHV0ZURlZ3JlZXMoY29u
c3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIFZhbHVl
UmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1pl
cm9RdWlyazo6Rm9yYmlkKSk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAg
cmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsg
fSwgVmFsdWVSYW5nZTo6QWxsKTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlu
dGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJ
bnRlZ2VyVHlwZTxpbnQsIEludGVnZXJSYW5nZTo6QWxsPihyYW5nZSwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKSk7Cit9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Citz
dGQ6Om9wdGlvbmFsPGludD4gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlclJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3
PGludCwgSW50ZWdlclJhbmdlOjpaZXJvQW5kR3JlYXRlcj4ocmFuZ2UpOworfQogCi0gICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVn
ZXJaZXJvQW5kR3JlYXRlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1
cm4gY29uc3VtZUludGVnZXJUeXBlPGludCwgSW50ZWdlclJhbmdlOjpaZXJvQW5kR3JlYXRlcj4o
cmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogfQogCi1zdGF0aWMgc3RkOjpvcHRp
b25hbDxkb3VibGU+IGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJs
ZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpCitzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQogewotICAgIGF1dG8gY29tcHV0ZURlZ3JlZXMgPSBbXShhdXRvIGFuZ2xlUmF3KSAt
PiBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gewotICAgICAgICBpZiAoYW5nbGVSYXcpCi0gICAgICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlUmF3LT50
eXBlLCBhbmdsZVJhdy0+dmFsdWUpOwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
IH07CisgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZVJhdzx1bnNpZ25lZCwgSW50ZWdlclJh
bmdlOjpPbmVBbmRHcmVhdGVyPihyYW5nZSk7Cit9CiAKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdl
LnBlZWsoKTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdl
cihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUludGVn
ZXJUeXBlPHVuc2lnbmVkLCBJbnRlZ2VyUmFuZ2U6Ok9uZUFuZEdyZWF0ZXI+KHJhbmdlLCBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK30KIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7
Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICBpZiAoYXV0byBhbmdsZVJhdyA9IGNv
bnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVu
aXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKQotICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVEZWdy
ZWVzKGFuZ2xlUmF3KTsKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCk7Ci0g
ICAgCi0gICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVEZWdy
ZWVzKGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9
LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0g
ICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJh
bmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7CitzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gY29u
c3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPE51bWJlclJhd0NvbnN1
bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRN
b2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwor
fQogCi0gICAgY2FzZSBJZGVudFRva2VuOgotICAgICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5
bWJvbFRhYmxlLmdldCh0b2tlbi5pZCgpKSkgewotICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJs
ZS0+dHlwZSkgewotICAgICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKLSAgICAg
ICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAgICAgICAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfR1JBRDoKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJO
OgotICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyh2
YXJpYWJsZS0+dHlwZSwgdmFyaWFibGUtPnZhbHVlKTsKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPE51
bWJlclJhdz4gY29uc3VtZU51bWJlckFsbG93aW5nU3ltYm9sVGFibGVJZGVudChDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwg
VmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxsKQoreworICAgIHJldHVybiBj
b25zdW1lTWV0YUNvbnN1bWVyPE51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudENvbnN1
bWVyPihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxT
dGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZv
cmJpZCk7Cit9CiAKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6Ci0g
ICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdmFyaWFibGUtPnZhbHVlOworUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8TnVtYmVyQ29u
c3VtZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFy
ZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwg
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CiAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7CitzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWVQZXJjZW50UmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit7CisgICAgcmV0
dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8UGVyY2VudFJhd0NvbnN1bWVyPihyYW5nZSwgeyB9LCB2
YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJr
OjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOworfQogCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGVyY2VudFJhdz4g
Y29uc3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1l
dGFDb25zdW1lcjxQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3VtZXI+KHJh
bmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJk
TW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsK
K30KIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50V29ya2VyU2FmZShyYW5nZSwg
dmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiB9CiAKLS8vIE1BUks6IC0g
Q29tYmluYXRpb24gY29uc3VtZXJzIHdpdGggdHJhbnNmb3JtYXRpb25zIGJhc2VkIG9uIHJlc3Vs
dCB0eXBlLgorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudFdvcmtlclNh
ZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
VmFsdWVQb29sJiBwb29sKQoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPFBlcmNl
bnRDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0
YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9y
YmlkLCBwb29sKTsKK30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTnVtYmVyVHJhbnNmb3JtZXIsIHR5
cGVuYW1lIFBlcmNlbnRUcmFuc2Zvcm1lcj4KLXN0YXRpYyBhdXRvIGNvbnN1bWVOdW1iZXJSYXdP
clBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSwgTnVtYmVyVHJhbnNmb3JtZXImJiBudW1iZXJUcmFuc2Zvcm1lciwgUGVyY2VudFRyYW5z
Zm9ybWVyJiYgcGVyY2VudFRyYW5zZm9ybWVyKSAtPiBzdGQ6Om9wdGlvbmFsPGRlY2x0eXBlKG51
bWJlclRyYW5zZm9ybWVyKHN0ZDo6ZGVjbHZhbDxkb3VibGU+KCkpKT4KK3N0ZDo6b3B0aW9uYWw8
TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
U1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NR
dWlyayB1bml0bGVzcykKIHsKLSAgICBjb25zdCBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsK
KyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxMZW5ndGhSYXdDb25zdW1lcj4ocmFuZ2Us
IHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJr
OjpGb3JiaWQpOworfQogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1
bmN0aW9uVG9rZW46IHsKLSAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJh
d1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bWJlclRyYW5zZm9ybWVyKCpudW1iZXIpOwotICAgICAgICBpZiAo
YXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBwZXJjZW50VHJh
bnNmb3JtZXIoKnBlcmNlbnQpOwotICAgICAgICBicmVhazsKLSAgICB9CitSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENT
U1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1
aXJrIHVuaXRsZXNzKQoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPExlbmd0aENv
bnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CiAK
LSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNv
bnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2
YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVybiBwZXJjZW50VHJhbnNmb3JtZXIoKnBlcmNl
bnQpOwotICAgICAgICBicmVhazsKK3N0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmds
ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8p
Cit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8QW5nbGVSYXdDb25zdW1lcj4ocmFu
Z2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3Na
ZXJvKTsKK30KIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIGlmIChhdXRvIG51bWJl
ciA9IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVtYmVyVHJhbnNmb3JtZXIoKm51bWJl
cik7Ci0gICAgICAgIGJyZWFrOworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5n
bGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvKQor
eworICAgIHJldHVybiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKHJhbmdlLCBwYXJzZXJNb2RlLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKTsKK30KIAot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KK1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUFuZ2xlV29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2wmIHBvb2wsIFVuaXRsZXNzUXVp
cmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKK3sKKyAgICByZXR1
cm4gY29uc3VtZU1ldGFDb25zdW1lcjxBbmdsZUNvbnN1bWVyPihyYW5nZSwgeyB9LCBWYWx1ZVJh
bmdlOjpBbGwsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpOworfQog
Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVRpbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2Vy
TW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQorewor
ICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPFRpbWVDb25zdW1lcj4ocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3Ji
aWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6
OkFsbCkKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBl
cmNlbnRSYXcocmFuZ2UsIHZhbHVlUmFuZ2UsIFtdKGRvdWJsZSBudW1iZXIpIHsgcmV0dXJuIG51
bWJlcjsgfSwgW10oZG91YmxlIHBlcmNlbnQpIHsgcmV0dXJuIHBlcmNlbnQgLyAxMDAuMDsgfSk7
CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8UmVzb2x1dGlvbkNvbnN1bWVyPihyYW5n
ZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUs
IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKSk7CiB9CiAKLS8vIE1BUks6IC0gQ29tYmluYXRpb24gY29uc3Vt
ZXJzIHRoYXQgYm90aCBhbGxvdyBsb29rdXAgaW4gdGhlIHN5bWJvbCB0YWJsZSBmb3IgSWRlbnRU
b2tlbnMgYW5kIHRyYW5zZm9ybWF0aW9ucyBiYXNlZCBvbiByZXN1bHQgdHlwZS4KK3N0YXRpYyBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZU9yUGVyY2VudChDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRs
ZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSkK
K3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxBbmdsZU9yUGVyY2VudENvbnN1bWVy
PihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3Na
ZXJvLCBwb29sKTsKK30KIAotdGVtcGxhdGU8dHlwZW5hbWUgTnVtYmVyVHJhbnNmb3JtZXIsIHR5
cGVuYW1lIFBlcmNlbnRUcmFuc2Zvcm1lcj4KLXN0YXRpYyBhdXRvIGNvbnN1bWVOdW1iZXJSYXdP
clBlcmNlbnRSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgTnVtYmVyVHJhbnNmb3JtZXImJiBudW1iZXJUcmFuc2Zvcm1lciwgUGVyY2Vu
dFRyYW5zZm9ybWVyJiYgcGVyY2VudFRyYW5zZm9ybWVyKSAtPiBzdGQ6Om9wdGlvbmFsPGRlY2x0
eXBlKG51bWJlclRyYW5zZm9ybWVyKHN0ZDo6ZGVjbHZhbDxkb3VibGU+KCkpKT4KK3N0ZDo6b3B0
aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKIHsKKyAgICByZXR1cm4gY29u
c3VtZU1ldGFDb25zdW1lcjxMZW5ndGhPclBlcmNlbnRSYXdDb25zdW1lcj4ocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3Ji
aWQpOworfQorCisvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgY3VycmVudCBz
Y2hlbWUgZHVlIHRvIHRoZSBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgcGFyYW1ldGVyCitSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kg
bmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KQorewogICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVl
aygpOwogCiAgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0aW9uVG9r
ZW46IHsKLSAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpCi0gICAg
ICAgICAgICByZXR1cm4gbnVtYmVyVHJhbnNmb3JtZXIoKm51bWJlcik7Ci0gICAgICAgIGlmIChh
dXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9u
KHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gcGVy
Y2VudFRyYW5zZm9ybWVyKCpwZXJjZW50KTsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlz
IGJlIHVzaW5nIHRyeWluZyB0byBnZW5lcmF0ZSB0aGUgY2FsYyB3aXRoIGJvdGggTGVuZ3RoIGFu
ZCBQZXJjZW50IGRlc3RpbmF0aW9uIGNhdGVnb3J5IHR5cGVzPworICAgICAgICBDYWxjUGFyc2Vy
IHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlLCB7
IH0sIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCksIG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSk7
CisgICAgICAgIGlmIChhdXRvIGNhbGN1bGF0aW9uID0gcGFyc2VyLnZhbHVlKCk7IGNhbGN1bGF0
aW9uICYmIGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIHBhcnNl
ck1vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWUoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Ci0gICAgICAgIGlm
IChhdXRvIHBlcmNlbnQgPSBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNl
bnRhZ2UocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkKLSAgICAgICAgICAgIHJldHVy
biBwZXJjZW50VHJhbnNmb3JtZXIoKnBlcmNlbnQpOwotICAgICAgICBicmVhazsKKyAgICBjYXNl
IERpbWVuc2lvblRva2VuOgorICAgICAgICByZXR1cm4gTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOjpjb25zdW1lKHJhbmdl
LCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWly
azo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKIAogICAgIGNhc2UgTnVtYmVy
VG9rZW46Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXdXaXRoS25v
d25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkKLSAgICAg
ICAgICAgIHJldHVybiBudW1iZXJUcmFuc2Zvcm1lcigqbnVtYmVyKTsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkpOwogCi0gICAgY2FzZSBJZGVudFRva2VuOgotICAgICAgICBpZiAo
YXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgotICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlk
YXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFu
Z2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwZXJjZW50VHJhbnNmb3JtZXIoKnZh
bGlkYXRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQZXJjZW50YWdlVG9rZW46CisgICAgICAgIHJldHVybiBQZXJjZW50Q1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29u
c3VtZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxl
c3NaZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAKLSAgICAg
ICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgICAgICAgICAgaWYg
KGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodmFyaWFibGUtPnZhbHVl
LCB2YWx1ZVJhbmdlKSkgewotICAgICAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyVHJhbnNm
b3JtZXIoKnZhbGlkYXRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KICAgICBkZWZhdWx0
OgogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1
bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRl
bnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFRy
YW5zZm9ybWVyPgorc3RhdGljIGF1dG8gY29uc3VtZUFuZ2xlT3JOdW1iZXJSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkgLT4gdHlwZW5hbWUg
VHJhbnNmb3JtZXI6OlJlc3VsdAogewotICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJj
ZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVS
YW5nZSwgW10oZG91YmxlIG51bWJlcikgeyByZXR1cm4gbnVtYmVyOyB9LCBbXShkb3VibGUgcGVy
Y2VudCkgeyByZXR1cm4gcGVyY2VudCAvIDEwMC4wOyB9KTsKKyAgICByZXR1cm4gY29uc3VtZU1l
dGFDb25zdW1lcjxBbmdsZU9yTnVtYmVyUmF3Q29uc3VtZXI8VHJhbnNmb3JtZXI+PihyYW5nZSwg
eyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwg
VW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYW5z
Zm9ybWVyPgorc3RhdGljIGF1dG8gY29uc3VtZUFuZ2xlT3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJv
bFRhYmxlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkgLT4gdHlwZW5h
bWUgVHJhbnNmb3JtZXI6OlJlc3VsdAoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVy
PEFuZ2xlT3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lcjxUcmFuc2Zv
cm1lcj4+KHJhbmdlLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCBV
bml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUcmFuc2Zvcm1lcj4KK3N0YXRpYyBhdXRvIGNvbnN1bWVOdW1iZXJP
clBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkgLT4gdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdAor
eworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPE51bWJlck9yUGVyY2VudFJhd0NvbnN1
bWVyPFRyYW5zZm9ybWVyPj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6
SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWly
azo6Rm9yYmlkKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXI+CitzdGF0aWMg
YXV0byBjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpIC0+IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpS
ZXN1bHQKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxOdW1iZXJPclBlcmNlbnRS
YXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lcjxUcmFuc2Zvcm1lcj4+KHJhbmdlLCBz
eW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwg
VW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30KKwor
Ly8gRklYTUU6IFRoaXMgbmVlZHMgYSBtb3JlIGNsZWFyIG5hbWUgdG8gaW5kaWNhdGUgaXRzIGJl
aGF2aW9yIG9mIGRpdmlkaW5nIHBlcmNlbnRzIGJ5IDEwMCBvbmx5IGlmIGFuIGV4cGxpY2l0IHBl
cmNlbnQgdG9rZW4sIG5vdCBpZiBhIHJlc3VsdCBvZiBhIGNhbGMoKS4KIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlck9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewogICAgIGF1dG8mIHRva2VuID0gcmFuZ2Uu
cGVlaygpOwogCiAgICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKICAgICBjYXNlIEZ1bmN0aW9u
VG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHZhbHVlID0gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1
ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKSkKKyAgICAgICAgaWYgKGF1dG8gdmFs
dWUgPSBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVu
Y3Rpb25Db25zdW1lcjo6Y29uc3VtZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJN
b2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVy
b1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVS
YW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiBQZXJjZW50
Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3Vt
ZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0
YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9y
YmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKIAogICAgIGNhc2UgTnVtYmVyVG9rZW46
Ci0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46IHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGNvbnN1
bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcocmFuZ2UsIHZhbHVlUmFuZ2UpOwot
ICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZSgqdmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAg
ICAgICAgcmV0dXJuIE51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tl
blR5cGVOdW1iZXJDb25zdW1lcjo6Y29uc3VtZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQ
YXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRs
ZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworCisgICAg
Y2FzZSBQZXJjZW50YWdlVG9rZW46CisgICAgICAgIGlmIChhdXRvIHBlcmNlbnRSYXcgPSBQZXJj
ZW50UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwg
dmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWly
azo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSkKKyAgICAgICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBlcmNlbnRSYXctPnZhbHVl
IC8gMTAwLjAsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
fQorCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI4Miw2ICsxMzk2
LDggQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyT3JQZXJjZW50KENT
U1BhCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKKy8vIE1BUks6IC0gTm9uLXByaW1pdGl2ZSBj
b25zdW1lcnMuCisKIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJl
clJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKICAgICAvLyBWYWx1ZXMgbGVzcyB0
aGFuIG9yIGVxdWFsIHRvIDAgb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEwMDAgYXJlIHBh
cnNlIGVycm9ycy4KQEAgLTEyOTcsMTQgKzE0MTMsMTQgQEAgc3RkOjpvcHRpb25hbDxkb3VibGU+
IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KENTU1BhCiAgICAgc3dpdGNoICh0b2tlbi50eXBl
KCkpIHsKICAgICBjYXNlIEZ1bmN0aW9uVG9rZW46IHsKICAgICAgICAgLy8gIltGb3IgY2FsYygp
XSwgdGhlIHVzZWQgdmFsdWUgcmVzdWx0aW5nIGZyb20gYW4gZXhwcmVzc2lvbiBtdXN0IGJlIGNs
YW1wZWQgdG8gdGhlIHJhbmdlIGFsbG93ZWQgaW4gdGhlIHRhcmdldCBjb250ZXh0LiIKLSAgICAg
ICAgYXV0byByZXN1bHQgPSBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rp
b24ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBO
dW1iZXJSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsg
fSwgVmFsdWVSYW5nZTo6QWxsLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0
bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogICAgICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgICAgIGJyZWFrOwogI2lmICFFTkFCTEUoVkFSSUFUSU9OX0ZP
TlRTKQotICAgICAgICBpZiAoISgqcmVzdWx0ID4gMCAmJiAqcmVzdWx0IDwgMTAwMCkgfHwgIWlz
SW50ZWdlckFuZERpdmlzaWJsZUJ5MTAwKCpyZXN1bHQpKQorICAgICAgICBpZiAoIShyZXN1bHQt
PnZhbHVlID4gMCAmJiByZXN1bHQtPnZhbHVlIDwgMTAwMCkgfHwgIWlzSW50ZWdlckFuZERpdmlz
aWJsZUJ5MTAwKHJlc3VsdC0+dmFsdWUpKQogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoKnJlc3VsdCwgc3RkOjpuZXh0YWZ0ZXIoMC4wLCAxLjAp
LCBzdGQ6Om5leHRhZnRlcigxMDAwLjAsIDAuMCkpOworICAgICAgICByZXR1cm4gc3RkOjpjbGFt
cChyZXN1bHQtPnZhbHVlLCBzdGQ6Om5leHRhZnRlcigwLjAsIDEuMCksIHN0ZDo6bmV4dGFmdGVy
KDEwMDAuMCwgMC4wKSk7CiAgICAgfQogCiAgICAgY2FzZSBOdW1iZXJUb2tlbjogewpAQCAtMTQ1
Miw3ICsxNTY4LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lT3B0aW9u
YWxBbHBoYShDU1NQCiAgICAgaWYgKCFjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKHJh
bmdlKSkKICAgICAgICAgcmV0dXJuIDEuMDsKIAotICAgIGlmIChhdXRvIGFscGhhUGFyYW1ldGVy
ID0gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhyYW5nZSkpCisgICAg
aWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3PE51bWJl
ck9yUGVyY2VudERpdmlkZWRCeTEwMFRyYW5zZm9ybWVyPihyYW5nZSkpCiAgICAgICAgIHJldHVy
biBzdGQ6OmNsYW1wKCphbHBoYVBhcmFtZXRlciwgMC4wLCAxLjApOwogCiAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKQEAgLTE0NjMsMjUgKzE1NzksMzkgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93CiAgICAgaWYgKCFjb25zdW1lU2xhc2hJ
bmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSkKICAgICAgICAgcmV0dXJuIDEuMDsKIAotICAgIGlm
IChhdXRvIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRC
eTEwMFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVl
UmFuZ2U6OkFsbCkpCisgICAgaWYgKGF1dG8gYWxwaGFQYXJhbWV0ZXIgPSBjb25zdW1lTnVtYmVy
T3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50PE51bWJlck9yUGVyY2VudERpdmlk
ZWRCeTEwMFRyYW5zZm9ybWVyPihyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCkp
CiAgICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKCphbHBoYVBhcmFtZXRlciwgMC4wLCAxLjApOwog
CiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotc3RhdGljIHVpbnQ4X3Qgbm9ybWFsaXpl
UkdCQ29tcG9uZW50TnVtYmVyKGRvdWJsZSB2YWx1ZSkKK3N0YXRpYyB1aW50OF90IG5vcm1hbGl6
ZVJHQkNvbXBvbmVudE51bWJlcihOdW1iZXJSYXcgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNvbnZl
cnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUpOworICAgIHJldHVybiBjb252
ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlLnZhbHVlKTsKIH0KIAotc3Rh
dGljIHVpbnQ4X3Qgbm9ybWFsaXplUkdCQ29tcG9uZW50UGVyY2VudGFnZShkb3VibGUgdmFsdWUp
CitzdGF0aWMgdWludDhfdCBub3JtYWxpemVSR0JDb21wb25lbnRQZXJjZW50YWdlKFBlcmNlbnRS
YXcgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRQcmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdC
QUJ5dGUodmFsdWUgLyAxMDAuMCAqIDI1NS4wKTsKKyAgICByZXR1cm4gY29udmVydFByZXNjYWxl
ZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZSh2YWx1ZS52YWx1ZSAvIDEwMC4wICogMjU1LjApOwogfQog
CitzdHJ1Y3QgUkdCTm9ybWFsaXppbmdUcmFuc2Zvcm1lciA6IFJhd1ZhcmlhbnRUcmFuc2Zvcm1l
ckJhc2U8UkdCTm9ybWFsaXppbmdUcmFuc2Zvcm1lciwgc3RkOjpvcHRpb25hbDx1aW50OF90Piwg
TnVtYmVyT3JQZXJjZW50UmF3PiB7CisgICAgdXNpbmcgUmF3VmFyaWFudFRyYW5zZm9ybWVyQmFz
ZTxSR0JOb3JtYWxpemluZ1RyYW5zZm9ybWVyLCBzdGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+LCBOdW1i
ZXJPclBlcmNlbnRSYXc+Ojp0cmFuc2Zvcm07CisKKyAgICBzdGF0aWMgdWludDhfdCB0cmFuc2Zv
cm0oTnVtYmVyUmF3IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJHQkNv
bXBvbmVudE51bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIHVpbnQ4X3QgdHJhbnNm
b3JtKFBlcmNlbnRSYXcgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbm9ybWFsaXplUkdC
Q29tcG9uZW50UGVyY2VudGFnZSh2YWx1ZSk7CisgICAgfQorfTsKKwogc3RhdGljIHN0ZDo6b3B0
aW9uYWw8dWludDhfdD4gY29uc3VtZVJlbGF0aXZlUkdCQ29tcG9uZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQogewot
ICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJs
ZUlkZW50KHJhbmdlLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsLCBub3JtYWxpemVSR0JD
b21wb25lbnROdW1iZXIsIG5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UpOworICAgIHJl
dHVybiBjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50PFJH
Qk5vcm1hbGl6aW5nVHJhbnNmb3JtZXI+KHJhbmdlLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6
QWxsKTsKIH0KIAogZW51bSBjbGFzcyBSR0JDb21wb25lbnRUeXBlIHsgTnVtYmVyLCBQZXJjZW50
YWdlIH07CkBAIC0xNDg5LDkgKzE2MTksOSBAQCBzdGF0aWMgdWludDhfdCBjbGFtcFJHQkNvbXBv
bmVudChkb3VibGUgdmFsdWUsIFJHQkNvbXAKIHsKICAgICBzd2l0Y2ggKGNvbXBvbmVudFR5cGUp
IHsKICAgICBjYXNlIFJHQkNvbXBvbmVudFR5cGU6Ok51bWJlcjoKLSAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcih2YWx1ZSk7CisgICAgICAgIHJldHVybiBub3JtYWxp
emVSR0JDb21wb25lbnROdW1iZXIoeyB2YWx1ZSB9KTsKICAgICBjYXNlIFJHQkNvbXBvbmVudFR5
cGU6OlBlcmNlbnRhZ2U6Ci0gICAgICAgIHJldHVybiBub3JtYWxpemVSR0JDb21wb25lbnRQZXJj
ZW50YWdlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNl
bnRhZ2UoeyB2YWx1ZSB9KTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0xNTE5LDcgKzE2NDksNyBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1
bWVSR0JPckhTTE9wdGlvbmFsQWwKICAgICBpZiAoIWNvbnN1bWVSR0JPckhTTEFscGhhU2VwYXJh
dG9yKGFyZ3MsIHN5bnRheCkpCiAgICAgICAgIHJldHVybiAxLjA7CiAKLSAgICByZXR1cm4gY29u
c3VtZU51bWJlclJhd09yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhhcmdzKTsKKyAgICByZXR1cm4g
Y29uc3VtZU51bWJlck9yUGVyY2VudFJhdzxOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFu
c2Zvcm1lcj4oYXJncyk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXZlUkdCUGFyYW1l
dGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBj
b250ZXh0KQpAQCAtMTU3MywxOCArMTcwMywyMiBAQCBzdGF0aWMgQ29sb3IgcGFyc2VOb25SZWxh
dGl2ZVJHQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG8KIAogICAgIGF1dG8gY29uc3VtZUluaXRpYWxD
b21wb25lbnQgPSBbXShhdXRvJiBhcmdzKSAtPiBzdGQ6Om9wdGlvbmFsPEluaXRpYWxDb21wb25l
bnQ+IHsKICAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKSkK
LSAgICAgICAgICAgIHJldHVybiB7IHsgKm51bWJlciwgUkdCQ29tcG9uZW50VHlwZTo6TnVtYmVy
IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgbnVtYmVyLT52YWx1ZSwgUkdCQ29tcG9uZW50
VHlwZTo6TnVtYmVyIH0gfTsKICAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJj
ZW50UmF3KGFyZ3MpKQotICAgICAgICAgICAgcmV0dXJuIHsgeyAqcGVyY2VudCwgUkdCQ29tcG9u
ZW50VHlwZTo6UGVyY2VudGFnZSB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7IHBlcmNlbnQt
PnZhbHVlLCBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlIH0gfTsKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKICAgICB9OwogCi0gICAgYXV0byBjb25zdW1lQ29tcG9uZW50ID0gW10o
YXV0byYgYXJncywgYXV0byBjb21wb25lbnRUeXBlKSB7CisgICAgYXV0byBjb25zdW1lQ29tcG9u
ZW50ID0gW10oYXV0byYgYXJncywgYXV0byBjb21wb25lbnRUeXBlKSAtPiBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gewogICAgICAgICBzd2l0Y2ggKGNvbXBvbmVudFR5cGUpIHsKICAgICAgICAgY2Fz
ZSBSR0JDb21wb25lbnRUeXBlOjpQZXJjZW50YWdlOgotICAgICAgICAgICAgcmV0dXJuIGNvbnN1
bWVQZXJjZW50UmF3KGFyZ3MpOworICAgICAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1
bWVQZXJjZW50UmF3KGFyZ3MpKQorICAgICAgICAgICAgICAgIHJldHVybiBwZXJjZW50LT52YWx1
ZTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIGNhc2UgUkdCQ29t
cG9uZW50VHlwZTo6TnVtYmVyOgotICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXJSYXco
YXJncyk7CisgICAgICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3KGFy
Z3MpKQorICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXItPnZhbHVlOworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH07CkBAIC0xNjY4LDcgKzE4MDIsNyBAQCBzdGF0aWMgQ29sb3Ig
cGFyc2VSZWxhdGl2ZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAgICAgICAgeyBDU1NW
YWx1ZUFscGhhLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdpbkNvbG9yQXNIU0wu
YWxwaGEgKiAxMDAuMCB9CiAgICAgfTsKIAotICAgIGF1dG8gaHVlID0gY29uc3VtZUFuZ2xlUmF3
T3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUsIGNv
bnRleHQubW9kZSk7CisgICAgYXV0byBodWUgPSBjb25zdW1lQW5nbGVPck51bWJlclJhd0FsbG93
aW5nU3ltYm9sVGFibGVJZGVudDxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI+
KGFyZ3MsIHN5bWJvbFRhYmxlLCBjb250ZXh0Lm1vZGUpOwogICAgIGlmICghaHVlKQogICAgICAg
ICByZXR1cm4geyB9OwogCkBAIC0xNjg3LDEyICsxODIxLDEyIEBAIHN0YXRpYyBDb2xvciBwYXJz
ZVJlbGF0aXZlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlbgogICAgIGlmICghYXJncy5hdEVu
ZCgpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNvbG9yQnlOb3JtYWxpemlu
Z0hTTENvbXBvbmVudHMoKmh1ZSwgKnNhdHVyYXRpb24sICpsaWdodG5lc3MsICphbHBoYSk7Cisg
ICAgcmV0dXJuIGNvbG9yQnlOb3JtYWxpemluZ0hTTENvbXBvbmVudHMoKmh1ZSwgc2F0dXJhdGlv
bi0+dmFsdWUsIGxpZ2h0bmVzcy0+dmFsdWUsICphbHBoYSk7CiB9CiAKIHN0YXRpYyBDb2xvciBw
YXJzZU5vblJlbGF0aXZlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhcmdzLCBj
b25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewotICAgIGF1dG8gaHVlID0gY29uc3Vt
ZUFuZ2xlUmF3T3JOdW1iZXJSYXcoYXJncywgY29udGV4dC5tb2RlKTsKKyAgICBhdXRvIGh1ZSA9
IGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3PEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zv
cm1lcj4oYXJncywgY29udGV4dC5tb2RlKTsKICAgICBpZiAoIWh1ZSkKICAgICAgICAgcmV0dXJu
IHsgfTsKIApAQCAtMTcxNiw3ICsxODUwLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlTm9uUmVsYXRp
dmVIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRvCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gY29sb3JCeU5vcm1hbGl6aW5nSFNMQ29tcG9u
ZW50cygqaHVlLCAqc2F0dXJhdGlvbiwgKmxpZ2h0bmVzcywgKmFscGhhKTsKKyAgICByZXR1cm4g
Y29sb3JCeU5vcm1hbGl6aW5nSFNMQ29tcG9uZW50cygqaHVlLCBzYXR1cmF0aW9uLT52YWx1ZSwg
bGlnaHRuZXNzLT52YWx1ZSwgKmFscGhhKTsKIH0KIAogZW51bSBjbGFzcyBIU0xGdW5jdGlvbk1v
ZGUgeyBIU0wsIEhTTEEgfTsKQEAgLTE3NTcsNyArMTg5MSw3IEBAIHN0YXRpYyBDb2xvciBwYXJz
ZUhXQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYQogICAgICAgICByZXR1cm4geyB9
OwogCiAgICAgYXV0byBub3JtYWxpemVkSHVlID0gbm9ybWFsaXplSHVlKCpodWUpOwotICAgIGF1
dG8gW25vcm1hbGl6ZWRXaGl0bmVzcywgbm9ybWFsaXplZEJsYWNrbmVzc10gPSBub3JtYWxpemVX
aGl0ZW5lc3NCbGFja25lc3MoKndoaXRlbmVzcywgKmJsYWNrbmVzcyk7CisgICAgYXV0byBbbm9y
bWFsaXplZFdoaXRuZXNzLCBub3JtYWxpemVkQmxhY2tuZXNzXSA9IG5vcm1hbGl6ZVdoaXRlbmVz
c0JsYWNrbmVzcyh3aGl0ZW5lc3MtPnZhbHVlLCBibGFja25lc3MtPnZhbHVlKTsKIAogICAgIC8v
IE5PVEU6IFRoZSBleHBsaWNpdCBjb252ZXJzaW9uIHRvIFNSR0JBPHVpbnQ4X3Q+IGlzIGludGVu
dGlvbmFsIGZvciBwZXJmb3JtYW5jZSAobm8gZXh0cmEgYWxsb2NhdGlvbiBmb3IKICAgICAvLyB0
aGUgZXh0ZW5kZWQgY29sb3IpIGFuZCBjb21wYXRhYmlsaXR5LCBmb3JjaW5nIHNlcmlhbGlhemF0
aW9uIHRvIHVzZSB0aGUgcmdiKCkvcmdiYSgpIGZvcm0uCkBAIC0xNzgyLDcgKzE5MTYsNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAg
ICAgICAgeyBDU1NWYWx1ZUFscGhhLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9yaWdp
bkNvbG9yQXNIV0IuYWxwaGEgKiAxMDAuMCB9CiAgICAgfTsKIAotICAgIGF1dG8gaHVlQ29uc3Vt
ZXIgPSBbJnN5bWJvbFRhYmxlLCAmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3Vt
ZUFuZ2xlUmF3T3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9s
VGFibGUsIGNvbnRleHQubW9kZSk7IH07CisgICAgYXV0byBodWVDb25zdW1lciA9IFsmc3ltYm9s
VGFibGUsICZjb250ZXh0XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVPck51bWJl
clJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudDxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJh
bnNmb3JtZXI+KGFyZ3MsIHN5bWJvbFRhYmxlLCBjb250ZXh0Lm1vZGUpOyB9OwogICAgIGF1dG8g
d2hpdGVuZXNzQW5kQmxhY2tuZXNzQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdz
KSB7IHJldHVybiBjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBz
eW1ib2xUYWJsZSk7IH07CiAgICAgYXV0byBhbHBoYUNvbnN1bWVyID0gWyZzeW1ib2xUYWJsZV0o
YXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvd2luZ1N5bWJvbFRh
YmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOyB9OwogCkBAIC0xNzkxLDcgKzE5MjUsNyBAQCBz
dGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUhXQlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KIAog
c3RhdGljIENvbG9yIHBhcnNlTm9uUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2Vu
UmFuZ2UmIGFyZ3MsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYXV0
byBodWVDb25zdW1lciA9IFsmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFu
Z2xlUmF3T3JOdW1iZXJSYXcoYXJncywgY29udGV4dC5tb2RlKTsgfTsKKyAgICBhdXRvIGh1ZUNv
bnN1bWVyID0gWyZjb250ZXh0XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5nbGVPck51
bWJlclJhdzxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI+KGFyZ3MsIGNvbnRl
eHQubW9kZSk7IH07CiAgICAgYXV0byB3aGl0ZW5lc3NBbmRCbGFja25lc3NDb25zdW1lciA9IFtd
KGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpOyB9OwogICAgIGF1
dG8gYWxwaGFDb25zdW1lciA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVPcHRpb25h
bEFscGhhKGFyZ3MpOyB9OwogCkBAIC0xODM0LDkgKzE5NjgsOSBAQCBzdGF0aWMgQ29sb3IgcGFy
c2VMYWJQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGEKICAgICBpZiAoIWFyZ3MuYXRF
bmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gbm9ybWFsaXplZExpZ2h0bmVz
cyA9IHN0ZDo6bWF4KDAuMCwgKmxpZ2h0bmVzcyk7CisgICAgYXV0byBub3JtYWxpemVkTGlnaHRu
ZXNzID0gc3RkOjptYXgoMC4wLCBsaWdodG5lc3MtPnZhbHVlKTsKIAotICAgIHJldHVybiBDb2xv
clR5cGUgeyBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsaXplZExpZ2h0bmVzcyksIHN0YXRpY19j
YXN0PGZsb2F0PigqYVZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KCpiVmFsdWUpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oKmFscGhhKSB9OworICAgIHJldHVybiBDb2xvclR5cGUgeyBzdGF0aWNfY2Fz
dDxmbG9hdD4obm9ybWFsaXplZExpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0PihhVmFsdWUt
PnZhbHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJWYWx1ZS0+dmFsdWUpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oKmFscGhhKSB9OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+CkBAIC0x
OTEyLDggKzIwNDYsOCBAQCBzdGF0aWMgQ29sb3IgcGFyc2VMQ0hQYXJhbWV0ZXJzKENTU1BhcnNl
clRva2VuUmFuZ2UmIGEKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIGF1dG8gbm9ybWFsaXplZExpZ2h0bmVzcyA9IHN0ZDo6bWF4KDAuMCwgKmxpZ2h0
bmVzcyk7Ci0gICAgYXV0byBub3JtYWxpemVkQ2hyb21hID0gc3RkOjptYXgoMC4wLCAqY2hyb21h
KTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRMaWdodG5lc3MgPSBzdGQ6Om1heCgwLjAsIGxpZ2h0bmVz
cy0+dmFsdWUpOworICAgIGF1dG8gbm9ybWFsaXplZENocm9tYSA9IHN0ZDo6bWF4KDAuMCwgY2hy
b21hLT52YWx1ZSk7CiAgICAgYXV0byBub3JtYWxpemVkSHVlID0gbm9ybWFsaXplSHVlKCpodWUp
OwogCiAgICAgcmV0dXJuIENvbG9yVHlwZSB7IHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVk
TGlnaHRuZXNzKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRDaHJvbWEpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4obm9ybWFsaXplZEh1ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYWxwaGEpIH07
CkBAIC0xOTQwLDcgKzIwNzQsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZUxDSFBhcmFt
ZXRlcnMoQ1NTUGFyc2VyVG9rZW4KIAogICAgIGF1dG8gbGlnaHRuZXNzQ29uc3VtZXIgPSBbJnN5
bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lUGVyY2VudEFsbG93aW5nU3lt
Ym9sVGFibGVJZGVudChhcmdzLCBzeW1ib2xUYWJsZSk7IH07CiAgICAgYXV0byBjaHJvbWFDb25z
dW1lciA9IFsmc3ltYm9sVGFibGVdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJB
bGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOyB9OwotICAgIGF1dG8g
aHVlQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlLCAmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1
cm4gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJn
cywgc3ltYm9sVGFibGUsIGNvbnRleHQubW9kZSk7IH07CisgICAgYXV0byBodWVDb25zdW1lciA9
IFsmc3ltYm9sVGFibGUsICZjb250ZXh0XShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lQW5n
bGVPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudDxBbmdsZU9yTnVtYmVyUmF3VG9E
ZWdyZXNzVHJhbnNmb3JtZXI+KGFyZ3MsIHN5bWJvbFRhYmxlLCBjb250ZXh0Lm1vZGUpOyB9Owog
ICAgIGF1dG8gYWxwaGFDb25zdW1lciA9IFsmc3ltYm9sVGFibGVdKGF1dG8mIGFyZ3MpIHsgcmV0
dXJuIGNvbnN1bWVPcHRpb25hbEFscGhhQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5
bWJvbFRhYmxlKTsgfTsKIAogICAgIHJldHVybiBwYXJzZUxDSFBhcmFtZXRlcnM8Q29sb3JUeXBl
PihhcmdzLCBXVEZNb3ZlKGxpZ2h0bmVzc0NvbnN1bWVyKSwgV1RGTW92ZShjaHJvbWFDb25zdW1l
ciksIFdURk1vdmUoaHVlQ29uc3VtZXIpLCBXVEZNb3ZlKGFscGhhQ29uc3VtZXIpKTsKQEAgLTE5
NTEsNyArMjA4NSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZU5vblJlbGF0aXZlTENIUGFyYW1ldGVy
cyhDU1NQYXJzZXJUbwogewogICAgIGF1dG8gbGlnaHRuZXNzQ29uc3VtZXIgPSBbXShhdXRvJiBh
cmdzKSB7IHJldHVybiBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsgfTsKICAgICBhdXRvIGNocm9t
YUNvbnN1bWVyID0gW10oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU51bWJlclJhdyhhcmdz
KTsgfTsKLSAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZjb250ZXh0XShhdXRvJiBhcmdzKSB7IHJl
dHVybiBjb25zdW1lQW5nbGVSYXdPck51bWJlclJhdyhhcmdzLCBjb250ZXh0Lm1vZGUpOyB9Owor
ICAgIGF1dG8gaHVlQ29uc3VtZXIgPSBbJmNvbnRleHRdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNv
bnN1bWVBbmdsZU9yTnVtYmVyUmF3PEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1l
cj4oYXJncywgY29udGV4dC5tb2RlKTsgfTsKICAgICBhdXRvIGFscGhhQ29uc3VtZXIgPSBbXShh
dXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lT3B0aW9uYWxBbHBoYShhcmdzKTsgfTsKIAogICAg
IHJldHVybiBwYXJzZUxDSFBhcmFtZXRlcnM8Q29sb3JUeXBlPihhcmdzLCBXVEZNb3ZlKGxpZ2h0
bmVzc0NvbnN1bWVyKSwgV1RGTW92ZShjaHJvbWFDb25zdW1lciksIFdURk1vdmUoaHVlQ29uc3Vt
ZXIpLCBXVEZNb3ZlKGFscGhhQ29uc3VtZXIpKTsKQEAgLTIwMTYsNyArMjE1MCw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIENvbG9yVHlwZT4gc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdgogICAgICAg
ICB7IENTU1ZhbHVlQWxwaGEsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSwgb3JpZ2luQ29s
b3JBc0NvbG9yVHlwZS5hbHBoYSAqIDEwMC4wIH0KICAgICB9OwogCi0gICAgYXV0byBjb25zdW1l
UkdCID0gWyZzeW1ib2xUYWJsZV0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU51bWJlclJh
d09yUGVyY2VudERpdmlkZWRCeTEwMFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBz
eW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsKTsgfTsKKyAgICBhdXRvIGNvbnN1bWVSR0IgPSBb
JnN5bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lTnVtYmVyT3JQZXJjZW50
UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50PE51bWJlck9yUGVyY2VudERpdmlkZWRCeTEwMFRy
YW5zZm9ybWVyPihhcmdzLCBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZTo6QWxsKTsgfTsKICAgICBh
dXRvIGNvbnN1bWVBbHBoYSA9IFsmc3ltYm9sVGFibGVdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNv
bnN1bWVPcHRpb25hbEFscGhhQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRh
YmxlKTsgfTsKIAogICAgIHJldHVybiBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlczxDb2xv
clR5cGU+KGFyZ3MsIFdURk1vdmUoY29uc3VtZVJHQiksIFdURk1vdmUoY29uc3VtZUFscGhhKSk7
CkBAIC0yMDMyLDcgKzIxNjYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRp
YyBDb2xvciBwYXJzZUNvbG9yRnUKIAogICAgIGNvbnN1bWVJZGVudFJhdyhhcmdzKTsKIAotICAg
IGF1dG8gY29uc3VtZVJHQiA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJS
YXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7IH07CisgICAgYXV0byBjb25zdW1lUkdC
ID0gW10oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU51bWJlck9yUGVyY2VudFJhdzxOdW1i
ZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lcj4oYXJncyk7IH07CiAgICAgYXV0byBj
b25zdW1lQWxwaGEgPSBbXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lT3B0aW9uYWxBbHBo
YShhcmdzKTsgfTsKIAogICAgIHJldHVybiBwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlczxD
b2xvclR5cGU+KGFyZ3MsIFdURk1vdmUoY29uc3VtZVJHQiksIFdURk1vdmUoY29uc3VtZUFscGhh
KSk7CkBAIC0yMDQ2LDcgKzIxODAsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1bmN0aW9u
Rm9yWFlaVHlwZXMoQ1NTUGFyc2VyVG8KICAgICAgICAgYXV0byB2YWx1ZSA9IHh5ekNvbnN1bWVy
KGFyZ3MpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNoYW5uZWwgPSAqdmFsdWU7CisgICAgICAgIGNoYW5uZWwgPSB2YWx1ZS0+dmFsdWU7CiAgICAg
fQogCiAgICAgYXV0byBhbHBoYSA9IGFscGhhQ29uc3VtZXIoYXJncyk7CkBAIC0yMjQ0LDEzICsy
Mzc4LDEzIEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yQ29udHJhc3RGdW5jdGlvblBhcmFtZXRl
cnMoQ1NTUAogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKGNvbnN1bWVkVG8pIHsKLSAg
ICAgICAgYXV0byB0YXJnZXRDb250cmFzdCA9IFsmXSAoKSAtPiBzdGQ6Om9wdGlvbmFsPGRvdWJs
ZT4geworICAgICAgICBhdXRvIHRhcmdldENvbnRyYXN0ID0gWyZdICgpIC0+IHN0ZDo6b3B0aW9u
YWw8TnVtYmVyUmF3PiB7CiAgICAgICAgICAgICBpZiAoYXJncy5wZWVrKCkudHlwZSgpID09IElk
ZW50VG9rZW4pIHsKLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6cGFpcjxD
U1NWYWx1ZUlELCBkb3VibGU+IHRhcmdldENvbnRyYXN0TWFwcGluZ3NbXSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHsgQ1NTVmFsdWVBQSwgNC41IH0sCi0gICAgICAgICAgICAgICAgICAgIHsgQ1NT
VmFsdWVBQUxhcmdlLCAzLjAgfSwKLSAgICAgICAgICAgICAgICAgICAgeyBDU1NWYWx1ZUFBQSwg
Ny4wIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgQ1NTVmFsdWVBQUFMYXJnZSwgNC41IH0sCisg
ICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnBhaXI8Q1NTVmFsdWVJRCwgTnVt
YmVyUmF3PiB0YXJnZXRDb250cmFzdE1hcHBpbmdzW10geworICAgICAgICAgICAgICAgICAgICB7
IENTU1ZhbHVlQUEsIE51bWJlclJhdyB7IDQuNSB9IH0sCisgICAgICAgICAgICAgICAgICAgIHsg
Q1NTVmFsdWVBQUxhcmdlLCBOdW1iZXJSYXcgeyAzLjAgfSB9LAorICAgICAgICAgICAgICAgICAg
ICB7IENTU1ZhbHVlQUFBLCBOdW1iZXJSYXcgeyA3LjAgfSB9LAorICAgICAgICAgICAgICAgICAg
ICB7IENTU1ZhbHVlQUFBTGFyZ2UsIE51bWJlclJhdyB7IDQuNSB9IH0sCiAgICAgICAgICAgICAg
ICAgfTsKICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIFNvcnRlZEFycmF5TWFwIHRh
cmdldENvbnRyYXN0TWFwIHsgdGFyZ2V0Q29udHJhc3RNYXBwaW5ncyB9OwogICAgICAgICAgICAg
ICAgIGF1dG8gdmFsdWUgPSB0YXJnZXRDb250cmFzdE1hcC50cnlHZXQoYXJncy5jb25zdW1lSW5j
bHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkpOwpAQCAtMjI2Myw3ICsyMzk3LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JDb250cmFzdEZ1bmN0aW9uUGFyYW1ldGVycyhDU1NQCiAgICAgICAgICAg
ICByZXR1cm4geyB9OwogICAgICAgICAKICAgICAgICAgLy8gV2hlbiBhIHRhcmdldCBjb25zdGFz
dCBpcyBzcGVjaWZpZWQsIHdlIHNlbGVjdCAidGhlIGZpcnN0IGNvbG9yIGNvbG9yIHRvIG1lZXQg
b3IgZXhjZWVkIHRoZSB0YXJnZXQgY29udHJhc3QuIgotICAgICAgICByZXR1cm4gc2VsZWN0Rmly
c3RDb2xvclRoYXRNZWV0c09yRXhjZWVkc1RhcmdldENvbnRyYXN0KG9yaWdpbkJhY2tncm91bmRD
b2xvciwgV1RGTW92ZShjb2xvcnNUb0NvbXBhcmVBZ2FpbnN0KSwgKnRhcmdldENvbnRyYXN0KTsK
KyAgICAgICAgcmV0dXJuIHNlbGVjdEZpcnN0Q29sb3JUaGF0TWVldHNPckV4Y2VlZHNUYXJnZXRD
b250cmFzdChvcmlnaW5CYWNrZ3JvdW5kQ29sb3IsIFdURk1vdmUoY29sb3JzVG9Db21wYXJlQWdh
aW5zdCksIHRhcmdldENvbnRyYXN0LT52YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gV2hlbiBhIHRh
cmdldCBjb25zdGFzdCBpcyBOT1Qgc3BlY2lmaWVkLCB3ZSBzZWxlY3QgInRoZSBmaXJzdCBjb2xv
ciB3aXRoIHRoZSBoaWdoZXN0IGNvbnRyYXN0IHRvIHRoZSBzaW5nbGUgY29sb3IuIgpAQCAtMjM2
Niw5ICsyNTAwLDkgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q29sb3JNaXhDb21wb25lbnQ+IGNv
bnN1bWVDb2xvck1pCiAgICAgQ29sb3JNaXhDb21wb25lbnQgcmVzdWx0OwogCiAgICAgaWYgKGF1
dG8gcGVyY2VudGFnZSA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKSB7Ci0gICAgICAgIGlmICgq
cGVyY2VudGFnZSA8IDAuMCB8fCAqcGVyY2VudGFnZSA+IDEwMC4wKQorICAgICAgICBpZiAocGVy
Y2VudGFnZS0+dmFsdWUgPCAwLjAgfHwgcGVyY2VudGFnZS0+dmFsdWUgPiAxMDAuMCkKICAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJlc3VsdC5wZXJjZW50YWdlID0gcGVyY2VudGFn
ZTsKKyAgICAgICAgcmVzdWx0LnBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlLT52YWx1ZTsKICAgICB9
CiAKICAgICByZXN1bHQuY29sb3IgPSBjb25zdW1lT3JpZ2luQ29sb3IoYXJncywgY29udGV4dCk7
CkBAIC0yMzc3LDkgKzI1MTEsOSBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxDb2xvck1peENvbXBv
bmVudD4gY29uc3VtZUNvbG9yTWkKIAogICAgIGlmICghcmVzdWx0LnBlcmNlbnRhZ2UpIHsKICAg
ICAgICAgaWYgKGF1dG8gcGVyY2VudGFnZSA9IGNvbnN1bWVQZXJjZW50UmF3KGFyZ3MpKSB7Ci0g
ICAgICAgICAgICBpZiAoKnBlcmNlbnRhZ2UgPCAwLjAgfHwgKnBlcmNlbnRhZ2UgPiAxMDAuMCkK
KyAgICAgICAgICAgIGlmIChwZXJjZW50YWdlLT52YWx1ZSA8IDAuMCB8fCBwZXJjZW50YWdlLT52
YWx1ZSA+IDEwMC4wKQogICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICBy
ZXN1bHQucGVyY2VudGFnZSA9IHBlcmNlbnRhZ2U7CisgICAgICAgICAgICByZXN1bHQucGVyY2Vu
dGFnZSA9IHBlcmNlbnRhZ2UtPnZhbHVlOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNjQ2LDEx
ICsyNzgwLDExIEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUNvbG9yKENTU1Bh
cnNlclRva2VuUgogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKGNvbG9yKTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZVBvc2l0aW9uQ29tcG9uZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJN
b2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIGJvb2wgYWxsb3dzTmVnYXRp
dmVQZXJjZW50YWdlID0gZmFsc2UpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lUG9zaXRpb25Db21wb25lbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgTmVnYXRpdmVQZXJj
ZW50YWdlUG9saWN5IG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSA9IE5lZ2F0aXZlUGVyY2VudGFn
ZVBvbGljeTo6Rm9yYmlkKQogewogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50
VG9rZW4pCiAgICAgICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVMZWZ0LCBDU1NWYWx1
ZVRvcCwgQ1NTVmFsdWVCb3R0b20sIENTU1ZhbHVlUmlnaHQsIENTU1ZhbHVlQ2VudGVyPihyYW5n
ZSk7Ci0gICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIHBhcnNlck1vZGUs
IFZhbHVlUmFuZ2U6OkFsbCwgdW5pdGxlc3MsIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSk7Cisg
ICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIHBhcnNlck1vZGUsIFZhbHVl
UmFuZ2U6OkFsbCwgdW5pdGxlc3MsIG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSk7CiB9CiAKIHN0
YXRpYyBib29sIGlzSG9yaXpvbnRhbFBvc2l0aW9uS2V5d29yZE9ubHkoY29uc3QgQ1NTUHJpbWl0
aXZlVmFsdWUmIHZhbHVlKQpAQCAtMjc5OSwyMyArMjkzMywyMSBAQCBzdGF0aWMgc3RkOjpvcHRp
b25hbDxQb3NpdGlvbkNvb3JkaW5hdGVzPiBwb3NpdGlvbkZyb20KIAogLy8gRklYTUU6IFRoaXMg
bWF5IGNvbnN1bWUgZnJvbSB0aGUgcmFuZ2UgdXBvbiBmYWlsdXJlLiBUaGUgYmFja2dyb3VuZAog
Ly8gc2hvcnRoYW5kIHdvcmtzIGFyb3VuZCBpdCwgYnV0IHdlIHNob3VsZCBqdXN0IGZpeCBpdCBo
ZXJlLgotc3RkOjpvcHRpb25hbDxQb3NpdGlvbkNvb3JkaW5hdGVzPiBjb25zdW1lUG9zaXRpb25D
b29yZGluYXRlcyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJz
ZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBQb3NpdGlvblN5bnRheCBwb3NpdGlvblN5
bnRheCwgTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5IHBvbGljeSkKK3N0ZDo6b3B0aW9uYWw8UG9z
aXRpb25Db29yZGluYXRlcz4gY29uc3VtZVBvc2l0aW9uQ29vcmRpbmF0ZXMoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1
bml0bGVzcywgUG9zaXRpb25TeW50YXggcG9zaXRpb25TeW50YXgsIE5lZ2F0aXZlUGVyY2VudGFn
ZVBvbGljeSBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kpCiB7Ci0gICAgYm9vbCBhbGxvd3NOZWdh
dGl2ZSA9IHBvbGljeSA9PSBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3k6OkFsbG93OwotCi0gICAg
YXV0byB2YWx1ZTEgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUs
IHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZSk7CisgICAgYXV0byB2YWx1ZTEgPSBjb25zdW1lUG9z
aXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBuZWdhdGl2ZVBlcmNl
bnRhZ2VQb2xpY3kpOwogICAgIGlmICghdmFsdWUxKQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogCi0gICAgYXV0byB2YWx1ZTIgPSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2Us
IHBhcnNlck1vZGUsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZSk7CisgICAgYXV0byB2YWx1ZTIg
PSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBu
ZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kpOwogICAgIGlmICghdmFsdWUyKQogICAgICAgICByZXR1
cm4gcG9zaXRpb25Gcm9tT25lVmFsdWUoKnZhbHVlMSk7CiAgICAgCi0gICAgYXV0byB2YWx1ZTMg
PSBjb25zdW1lUG9zaXRpb25Db21wb25lbnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBh
bGxvd3NOZWdhdGl2ZSk7CisgICAgYXV0byB2YWx1ZTMgPSBjb25zdW1lUG9zaXRpb25Db21wb25l
bnQocmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kp
OwogICAgIGlmICghdmFsdWUzKQogICAgICAgICByZXR1cm4gcG9zaXRpb25Gcm9tVHdvVmFsdWVz
KCp2YWx1ZTEsICp2YWx1ZTIpOwogICAgIAotICAgIGF1dG8gdmFsdWU0ID0gY29uc3VtZVBvc2l0
aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmUp
OworICAgIGF1dG8gdmFsdWU0ID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KTsKICAgICAKICAgICBz
dGQ6OmFycmF5PENTU1ByaW1pdGl2ZVZhbHVlKiwgNT4gdmFsdWVzIHsKICAgICAgICAgdmFsdWUx
LmdldCgpLApAQCAtMjkxNyw3ICszMDQ5LDcgQEAgc3RhdGljIGJvb2wgY29uc3VtZURlcHJlY2F0
ZWRHcmFkaWVudENvbG9yU3RvcChDU1NQYXJzCiAgICAgICAgIHBvc2l0aW9uID0gKGlkID09IENT
U1ZhbHVlRnJvbSkgPyAwIDogMTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoaWQgPT0g
Q1NTVmFsdWVDb2xvclN0b3ApOwotICAgICAgICBhdXRvIHZhbHVlID0gY29uc3VtZU51bWJlclJh
d09yUGVyY2VudERpdmlkZWRCeTEwMFJhdyhhcmdzKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGNv
bnN1bWVOdW1iZXJPclBlcmNlbnRSYXc8TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNm
b3JtZXI+KGFyZ3MpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBwb3NpdGlvbiA9ICp2YWx1ZTsKQEAgLTM0MTQsNyArMzU0Niw3IEBAIHN0
YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDcm9zc0ZhZGUoQ1NTUGFyc2VyVG9rZQogICAg
IGlmICghdG9JbWFnZVZhbHVlIHx8ICFjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKGFy
Z3MpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gcGVyY2VudGFnZSA9IGNv
bnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CisgICAgYXV0byBw
ZXJjZW50YWdlID0gY29uc3VtZU51bWJlck9yUGVyY2VudFJhdzxOdW1iZXJPclBlcmNlbnREaXZp
ZGVkQnkxMDBUcmFuc2Zvcm1lcj4oYXJncyk7CiAgICAgaWYgKCFwZXJjZW50YWdlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBhdXRvIHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoY2xhbXBUbzxkb3VibGU+KCpwZXJjZW50YWdlLCAw
LCAxKSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwpAQCAtMzk1Miw3ICs0MDg0LDcgQEAgc3Rk
OjpvcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZUhlaWdodFJhdyhDU1NQCiAgICAg
fQogCiAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJlclJhdyhyYW5nZSwgVmFsdWVS
YW5nZTo6Tm9uTmVnYXRpdmUpKQotICAgICAgICByZXR1cm4geyAqbnVtYmVyIH07CisgICAgICAg
IHJldHVybiB7IG51bWJlci0+dmFsdWUgfTsKIAogICAgIGlmIChhdXRvIGxlbmd0aE9yUGVyY2Vu
dCA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcocmFuZ2UsIHBhcnNlck1vZGUsIFZhbHVlUmFu
Z2U6Ok5vbk5lZ2F0aXZlKSkKICAgICAgICAgcmV0dXJuIHsgKmxlbmd0aE9yUGVyY2VudCB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VySGVscGVycy5oCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2
NiwxNCBAQCBlbnVtIGNsYXNzIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSA6IGJvb2wgeyBGb3Ji
aWQsIEEKIGVudW0gY2xhc3MgVW5pdGxlc3NRdWlyayB7IEFsbG93LCBGb3JiaWQgfTsKIGVudW0g
Y2xhc3MgVW5pdGxlc3NaZXJvUXVpcmsgeyBBbGxvdywgRm9yYmlkIH07CiAKK3N0cnVjdCBOdW1i
ZXJSYXcgeworICAgIGRvdWJsZSB2YWx1ZTsKK307CisKK3N0cnVjdCBQZXJjZW50UmF3IHsKKyAg
ICBkb3VibGUgdmFsdWU7Cit9OworCiBzdHJ1Y3QgQW5nbGVSYXcgewogICAgIENTU1VuaXRUeXBl
IHR5cGU7CiAgICAgZG91YmxlIHZhbHVlOwpAQCAtNzYsMTMgKzg0LDE3IEBAIHN0cnVjdCBMZW5n
dGhSYXcgewogICAgIGRvdWJsZSB2YWx1ZTsKIH07CiAKLXVzaW5nIExlbmd0aE9yUGVyY2VudFJh
dyA9IHN0ZDo6dmFyaWFudDxMZW5ndGhSYXcsIGRvdWJsZT47Cit1c2luZyBMZW5ndGhPclBlcmNl
bnRSYXcgPSBzdGQ6OnZhcmlhbnQ8TGVuZ3RoUmF3LCBQZXJjZW50UmF3PjsKK3VzaW5nIE51bWJl
ck9yUGVyY2VudFJhdyA9IHN0ZDo6dmFyaWFudDxOdW1iZXJSYXcsIFBlcmNlbnRSYXc+OwordXNp
bmcgQW5nbGVPck51bWJlclJhdyA9IHN0ZDo6dmFyaWFudDxBbmdsZVJhdywgTnVtYmVyUmF3PjsK
IAotc3RkOjpvcHRpb25hbDxpbnQ+IGNvbnN1bWVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmLCBkb3VibGUgbWluaW11bVZhbHVlID0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
bWF4KCkpOwotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiwgZG91YmxlIG1pbmltdW1WYWx1ZSA9IC1zdGQ6Om51bWVyaWNfbGltaXRz
PGRvdWJsZT46Om1heCgpKTsKK3N0ZDo6b3B0aW9uYWw8aW50PiBjb25zdW1lSW50ZWdlclJhdyhD
U1NQYXJzZXJUb2tlblJhbmdlJik7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJ
bnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK3N0ZDo6b3B0aW9uYWw8aW50PiBjb25zdW1l
SW50ZWdlclplcm9BbmRHcmVhdGVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihDU1NQYXJzZXJU
b2tlblJhbmdlJik7CiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9zaXRpdmVJbnRl
Z2VyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7Ci1zdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCk7CitzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gY29uc3Vt
ZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6
OkFsbCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lTnVtYmVyT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJik7CkBAIC05MCwxMSArMTAyLDExIEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lRm9udFdlaWdodE51bWJlcldvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IENTU1ZhbHVlUG9vbCYpOwogc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhS
YXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRs
ZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBW
YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKLXN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwg
VmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCk7CitzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+
IGNvbnN1bWVQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlID0gVmFs
dWVSYW5nZTo6QWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVl
UmFuZ2UsIENTU1ZhbHVlUG9vbCYpOwogc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+
IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNl
ck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQp
OwotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1Bh
cnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJr
ID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBib29sIGFsbG93c05lZ2F0aXZlUGVyY2VudGFnZSA9
IGZhbHNlKTsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2Vu
dChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxl
c3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5
ID0gTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5OjpGb3JiaWQpOwogc3RkOjpvcHRpb25hbDxBbmds
ZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWly
ayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrID0gVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIENT
U1ZhbHVlUG9vbCYsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRs
ZXNzWmVyb1F1aXJrID0gVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtl
clNhZmUuY3BwCShyZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VyV29ya2VyU2FmZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0MCw3
ICs1NDAsNyBAQCBzdGF0aWMgUmVmUHRyPENTU0ZvbnRGZWF0dXJlVmFsdWU+IGNvbnN1bWVGb250
RmVhdHVyZVQKICAgICBpbnQgdGFnVmFsdWUgPSAxOwogICAgIGlmICghcmFuZ2UuYXRFbmQoKSAm
JiByYW5nZS5wZWVrKCkudHlwZSgpICE9IENvbW1hVG9rZW4pIHsKICAgICAgICAgLy8gRmVhdHVy
ZSB0YWcgdmFsdWVzIGNvdWxkIGZvbGxvdzogPGludGVnZXI+IHwgb24gfCBvZmYKLSAgICAgICAg
aWYgKGF1dG8gaW50ZWdlciA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVn
ZXJSYXcocmFuZ2UsIDApKQorICAgICAgICBpZiAoYXV0byBpbnRlZ2VyID0gQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyUmF3KHJhbmdlKSkKICAg
ICAgICAgICAgIHRhZ1ZhbHVlID0gKmludGVnZXI7CiAgICAgICAgIGVsc2UgaWYgKHJhbmdlLnBl
ZWsoKS5pZCgpID09IENTU1ZhbHVlT24gfHwgcmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVP
ZmYpCiAgICAgICAgICAgICB0YWdWYWx1ZSA9IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCkuaWQoKSA9PSBDU1NWYWx1ZU9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDgsOCArMjA4LDggQEAgc3RkOjpvcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZv
ckZvbnRSYXcoY29uc3QgRm9uCiAgICAgICAgICAgICAvLyAgICAgICAgdGhhdCBpdCdzIG9mZi1z
Y3JlZW4gYW5kIHRoZXJlZm9yZSBkb2Vzbid0IHN0cmljdGx5IGhhdmUgYW4gYXNzb2NpYXRlZCB2
aWV3cG9ydC4KICAgICAgICAgICAgIC8vICAgICAgICBUaGlzIG5lZWRzIGNsYXJpZmljYXRpb24g
YW5kIHBvc3NpYmx5IGZpeGluZy4KICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4oQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVVbnpvb21lZE5vbkNhbGNMZW5ndGhEb3VibGUo
bGVuZ3RoLnR5cGUsIGxlbmd0aC52YWx1ZSwgQ1NTUHJvcGVydHlGb250U2l6ZSwgJmZvbnRDYXNj
YWRlLmZvbnRNZXRyaWNzKCksICZmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSwgJmZvbnRD
YXNjYWRlLmZvbnREZXNjcmlwdGlvbigpLCBpczxEb2N1bWVudD4oY29udGV4dCkgPyBkb3duY2Fz
dDxEb2N1bWVudD4oY29udGV4dCkucmVuZGVyVmlldygpIDogbnVsbHB0cikpOwotICAgICAgICB9
LCBbJl0gKGRvdWJsZSBwZXJjZW50YWdlKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KChwYXJlbnRTaXplICogcGVyY2VudGFnZSkgLyAxMDAuMCk7CisgICAgICAgIH0s
IFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpQZXJjZW50UmF3JiBwZXJjZW50
YWdlKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYXJlbnRTaXpl
ICogcGVyY2VudGFnZS52YWx1ZSkgLyAxMDAuMCk7CiAgICAgICAgIH0pOwogICAgIH0pOwogCg==
</data>
<flag name="commit-queue"
          id="474643"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448712</attachid>
            <date>2022-01-09 10:16:02 -0800</date>
            <delta_ts>2022-01-09 10:55:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>metaconsumer.diff</filename>
            <type>text/plain</type>
            <size>147920</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzgxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNSBAQAorMjAyMi0wMS0wOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQ1NTIHByb3BlcnR5
IHBhcnNpbmcgaGVscGVycyB0byBiZSBhIGJpdCBtb3JlIGNvbXBvc2FibGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDg2OQorCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlZmFjdG9ycyBwcmltaXRpdmUgQ1NT
IHByb3BlcnR5IHBhcnNpbmcgdG8gYmUgYnVpbHQgb24gYSBuZXcgY29tcG9zYWJsZSBzZXQgb2Yg
CisgICAgICAgIGxvd2VyIGxldmVsIHByaW1pdGl2ZXMuCisKKyAgICAgICAgVGhlIGxvd2VzdCBs
ZXZlbCBwcmltaXRpdmUgaXMgbm93IGEgImNvbnN1bWVyIiBzdHJ1Y3QgdGhhdCBvbmx5IGtub3dz
IGhvdyB0byBjb25zdW1lCisgICAgICAgIGEgcGFydGljdWxhciB0eXBlIGZvciBhIHBhcnRpY3Vs
YXIgdG9rZW4gdHlwZS4gRm9yIGV4YW1wbGUsIE51bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVy
Q29uc3VtZXIKKyAgICAgICAgb25seSBrbm93cyBob3cgdG8gY29uc3VtZSBhbmQgcmV0dXJuIGEg
TnVtYmVyUmF3IGlmIHRoZSB0b2tlbiB0eXBlIGlzIGEgTnVtYmVyVG9rZW4uCisKKyAgICAgICAg
Rm9yIHRoZXNlIHRva2VuIHNwZWNpZmljIGNvbnN1bWVycyB0byBiZSB1c2VmdWwsIHRoZXkgbmVl
ZCB0byBiZSBjb21iaW5lZCB0b2dldGhlci4gVG8KKyAgICAgICAgZG8gdGhpcywgYSBoaWdoZXIg
bGV2ZWwgbWV0YS1jb25zdW1lciB0eXBlIHRoYXQgaXMgbm90IHRpZWQgdG8gYSBzcGVjaWZpYyB0
b2tlbiBpcyB1c2VkLgorICAgICAgICBUaGVzZSBhcmUgZGVmaW5lZCBhcyBlbXB0eSBzdHJ1Y3Rz
IHdpdGggJ3VzaW5nJyBzdGF0ZW1lbnRzIHRvIGluZGljYXRlIHdoaWNoIGxvdyBsZXZlbAorICAg
ICAgICBjb25zdW1lcnMgdG8gdXNlIGZvciB3aGljaCB0b2tlbiB0b2tlbiB0eXBlcy4gRm9yIGV4
YW1wbGU6CisgICAgICAgIAorICAgICAgICAgICAgc3RydWN0IE51bWJlclJhd0NvbnN1bWVyIHsK
KyAgICAgICAgICAgICAgICB1c2luZyBSZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz47
CisKKyAgICAgICAgICAgICAgICB1c2luZyBGdW5jdGlvblRva2VuID0gTnVtYmVyUmF3S25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgICAgICAgICAgICAgIHVzaW5nIE51bWJlclRv
a2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgVGhpcyBtZXRhLWNvbnN1bWVyIGRlZmluaXRpb24gZGVmaW5lcyBhIGNv
bnN1bWVyIHRoYXQgdXRpbGl6ZXMgdHdvIGxvd2VyIGxldmVsIHRva2VuIAorICAgICAgICBzcGVj
aWZpYyBjb25zdW1lcnMgZm9yIGZ1bmN0aW9uIGFuZCBudW1iZXIgdG9rZW5zLgorCisgICAgICAg
IFRvIGFjdHVhbGwgZG8gc29tZXRoaW5nIHdpdGggdGhpcyBtZXRhLWNvbnN1bWVyIGRlZmluaXRp
b24sIHRoZSAgY29uc3VtZU1ldGFDb25zdW1lcjw+KC4uLikgCisgICAgICAgIGZ1bmN0aW9uIGlz
IHVzZWQsIHdoaWNoIGludHJvc3BlY3RzIHdoaWNoIHVzaW5nIHN0YXRlbWVudHMgYXJlIGRlZmlu
ZWQsIGFuZCBkaXNwYXRjaGVzIHRvIAorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyB0b2tlbiBz
cGVjaWZpYyBjb25zdW1lciAoc2VlIE1ldGFDb25zdW1lckRpc3BhdGNoZXIgZm9yIGhvdyBpbnRy
b3NwZWN0aW9uIHdvcmtzKS4KKworICAgICAgICBJbiBhZGRpdGlvbiB0byBwcmltaXRpdmUgbWV0
YS1jb25zdW1lciBkZWZpbml0aW9ucywgdGhlcmUgYXJlIGFsc28gZGVmaW5pdGlvbnMgZm9yIG1l
dGEtY29uc3VtZXJzCisgICAgICAgIHRoYXQgY2FuIGNvbnN1bWVyIG1vcmUgY29tcGxleCB0aGlu
Z3Mgd2l0aG91dCBkdXBsaWNhdGUgd29yay4gRm9yIGV4YW1wbGUsIEFuZ2xlT3JQZXJjZW50Q29u
c3VtZXIKKyAgICAgICAgaXMgYSBtZXRhLWNvbnN1bWVyIHRoYXQgY29uc3VtZXMgZWl0aGVyIGFu
IEFuZ2xlIG9yIGEgUGVyY2VudC4gVG8gZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQgYm90aAorICAg
ICAgICBvZiB0aGVzZSB3YW50IHRvIG9wZXJhdGUgb24gZnVuY3Rpb24gdG9rZW5zLCB0aGUgU2Ft
ZVRva2VuTWV0YUNvbnN1bWVyIGFsbG93cyBjb25jYXRlbmF0aW5nIG11bHRpcGxlCisgICAgICAg
IHBlci10b2tlbiBjb25zdW1lcnMgKGluIHRoaXMgY2FzZSwgdHdvIGZ1bmN0aW9uIHRva2VuIGNv
bnN1bWVycykgdG9nZXRoZXIuIAorICAgICAgICAKKyAgICAgICAgTWV0YS1jb25zdW1lciBkZWZp
bml0aW9ucyBjYW4gYWxzbyBkZWZpbmUsIG9yIGFsbG93IGRlZmluaW5nIHZpYSBhIHRlbXBsYXRl
IHBhcmFtZXRlciwgYSBUcmFuc2Zvcm1lciwKKyAgICAgICAgd2hpY2gsIGFzIHRoZSBuYW1lIGlt
cGxpZXMsIHRyYW5zZm9ybSB0aGUgb3V0cHV0LiBGb3IgZXhhbXBsZSwgdGhlIEFuZ2xlT3JOdW1i
ZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1lcgorICAgICAgICBjYW4gYmUgdXNlZCB0byBlbnN1cmUg
dGhhdCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIGluIGRlZ3JlZXMsIGFuZCBkb2Vzbid0IGhhdmUg
dG8gYmUgdW53cmFwcGVkIGJ5CisgICAgICAgIHRoZSB1c2VyLgorCisgICAgICAgIFRoZSBnb2Fs
IGlzIGF2b2lkIHRoZSBjb21iaW5hdG9yaWFsIGV4cGxvc2l0aW9uIG9mIGZ1bmN0aW9ucyBicmFu
Y2hpbmcgb24gdG9rZW4gdHlwZSBmb3IKKyAgICAgICAgbW9yZSBhbmQgbW9yZSBzcGVjaWFsaXpl
ZCBwYXJzaW5nIG5lZWRzLiBGb3IgaW5zdGFuY2UsIGFuIHVwY29tcGluZyBjaGFuZ2Ugd2lsbCB3
YW50IHRvIAorICAgICAgICBleHRlbmQgY29uc3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5n
U3ltYm9sVGFibGVJZGVudCBhbmQgYSBmZXcgb3RoZXIgcmVsYXRlZCBjb25zdW1lcnMKKyAgICAg
ICAgdG8gYWxzbyBjb25zdW1lIHRoZSBpZGVudGlmaWVyICdub25lJy4gUmF0aGVyIHRoYW4gZHVw
bGljYXRpbmcgYWxsIHRoZSBsb2dpYywgdGhpcyBhbGxvd3MKKyAgICAgICAgZm9yIGp1c3QgZGVm
aW5pbmcgYSBmZXcgbWV0YS1jb25zdW1lciBkZWZpbml0aW9ucyB1dGlsaXppbmcgYWxtb3N0IGVu
dGlyZWx5IGV4aXN0aW5nIGxvd2VyCisgICAgICAgIGxldmVsIGNvbnN1bWVycy4KKworICAgICAg
ICAqIGNzcy9NZWRpYVF1ZXJ5RXhwcmVzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dW1lRmlyc3RWYWx1ZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lRm9udFZhcmlhdGlvblRhZyk6CisgICAgICAg
IChXZWJDb3JlOjpjb25zdW1lQ3ViaWNCZXppZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Vt
ZVNwcmluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVQZXJzcGVjdGl2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN1bWVDb3VudGVyU3R5bGVQYWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUNvdW50ZXJT
dHlsZUFkZGl0aXZlU3ltYm9scyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQmFzZVBhbGV0
dGVEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN1bWVPdmVycmlkZUNvbG9yc0Rl
c2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVG
bGV4KToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6
OkNhbGNQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29tcHV0ZU1pbmltdW1WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkludGVnZXJUeXBlUmF3
S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6SW50ZWdlclR5cGVSYXdLbm93blRva2VuVHlw
ZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6SW50ZWdlclR5cGVLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6
OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpJ
bnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjp2YWxpZGF0ZWROdW1iZXJSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1iZXJSYXdL
bm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1iZXJSYXdLbm93blRva2VuVHlwZU51bWJl
ckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6TnVtYmVyUmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyOjpjb25zdW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TnVtYmVyQ1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNv
bnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpOdW1i
ZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojp2YWxpZGF0ZWRQZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6UGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29u
c3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlBlcmNl
bnRSYXdLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlBlcmNlbnRSYXdLbm93blRva2VuVHlw
ZUlkZW50Q29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aFJhd0tub3duVG9rZW5UeXBlRnVu
Y3Rpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6Okxlbmd0aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNv
bnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5n
dGhSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6
OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpB
bmdsZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkFuZ2xlUmF3S25vd25Ub2tlblR5
cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OkFuZ2xlUmF3S25vd25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjo6
Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkFu
Z2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29u
c3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1l
bnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OkFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6VGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRo
S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSZXNvbHV0aW9uQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3VtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlRyYW5zZm9ybUFwcGxpZXI6
OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6YXBw
bHlUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpJZGVudGl0eVRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlOjp0cmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpBbmdsZU9y
TnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXI6OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Ok51bWJlck9yUGVyY2VudERpdmlkZWRCeTEw
MFRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpNZXRhQ29uc3VtZXJEaXNwYXRjaGVyOjpjb25zdW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU1ldGFDb25zdW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OlNhbWVUb2tlbk1l
dGFDb25zdW1lckFwcGxpZXI6OmNvbnN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpTYW1lVG9rZW5NZXRhQ29uc3VtZXI6OmNvbnN1bWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBlcmNlbnRSYXdU
cmFuc2Zvcm1lcjo6dHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6QW5nbGVPck51bWJlclJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjo6
Y29uc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Ok51
bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lcjo6Y29uc3VtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVJbnRlZ2VyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVJbnRlZ2VyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyUmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXJa
ZXJvQW5kR3JlYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVQb3NpdGl2ZUludGVnZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlclJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJBbGxv
d2luZ1N5bWJvbFRhYmxlSWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudEFsbG93aW5nU3ltYm9sVGFibGVJ
ZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVXb3JrZXJTYWZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVRp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
UmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVBbmdsZU9yUGVyY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoT3JQZXJjZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlT3JO
dW1iZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lQW5nbGVPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJPclBlcmNl
bnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlck9yUGVyY2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVG
b250V2VpZ2h0TnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZU9wdGlvbmFsQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFi
bGVJZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Om5v
cm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6Om5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpSR0JOb3JtYWxpemluZ1RyYW5z
Zm9ybWVyOjp0cmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lUmVsYXRpdmVSR0JDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjbGFtcFJHQkNvbXBvbmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVSR0JPckhTTE9wdGlvbmFs
QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZU5vblJlbGF0aXZlUkdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VOb25SZWxhdGl2ZUhTTFBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJz
ZUhXQlBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpwYXJzZVJlbGF0aXZlSFdCUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlTm9uUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VMYWJQYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VM
Q0hQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6cGFyc2VSZWxhdGl2ZUxDSFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZU5vblJlbGF0aXZlTENIUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlUmVsYXRpdmVDb2xv
ckZ1bmN0aW9uRm9yUkdCVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25Gb3JSR0JUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OnBhcnNlQ29sb3JGdW5jdGlvbkZvclhZWlR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6cGFyc2VD
b2xvckNvbnRyYXN0RnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNvbG9yTWl4Q29tcG9uZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBvc2l0aW9uQ29tcG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZVBvc2l0aW9uQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUNyb3NzRmFkZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMaW5lSGVp
Z2h0UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2Fs
Y1BhcnNlcjo6Y29uc3VtZUludGVnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpDYWxjUGFyc2VyOjpjb25zdW1lSW50ZWdlclR5cGVSYXcp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpD
YWxjUGFyc2VyOjpjb25zdW1lTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZU51bWJlclJhdyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQ
YXJzZXI6OmNvbnN1bWVQZXJjZW50UmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZUFuZ2xlUmF3KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1Bh
cnNlcjo6Y29uc3VtZUxlbmd0aFJhdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZU51bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVG
dW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVOdW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVt
YmVyUmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlckNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUGVyY2VudFJh
d1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tl
blR5cGVQZXJjZW50YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVJZGVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlUGVyY2VudGFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3Ro
UmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUxlbmd0aENT
U1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5n
bGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRv
a2VuVHlwZURpbWVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5
cGVEaW1lbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlTnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lVGltZUNTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lUmVzb2x1dGlvbkNTU1ByaW1pdGl2
ZVZhbHVlV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJS
YXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lQW5nbGVSYXdPck51bWJlclJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVOdW1iZXJSYXdPclBlcmNlbnRSYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5
MTAwUmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Y29uc3VtZU51bWJlclJhd09yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVu
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRh
YmxlSWRlbnQpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmg6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtl
clNhZmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzV29y
a2VyU2FmZTo6Y29uc3VtZUZvbnRGZWF0dXJlVGFnKToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJl
c29sdmVGb3JGb250UmF3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlRm9y
Rm9udFJhdyk6CisKIDIwMjItMDEtMDggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgRml4IHNvbWUgQ1NTIGZpbHRlciBpbnRlcnBvbGF0aW9uIGlzc3Vl
cwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHByZXNzaW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cHJlc3Npb24uY3BwCShy
ZXZpc2lvbiAyODc4MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cHJlc3Np
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIGlzRmVhdHVyZVZhbGlkV2l0aG91dFZhbHVlKGNvbnN0IEF0CiAKIGlubGluZSBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGaXJzdFZhbHVlKGNvbnN0IFN0cmluZyYgbWVkaWFG
ZWF0dXJlLCBDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoYXV0byB2YWx1
ZSA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXIocmFuZ2UsIDApKQor
ICAgIGlmIChhdXRvIHZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSW50
ZWdlclplcm9BbmRHcmVhdGVyKHJhbmdlKSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCiAgICAg
aWYgKCFmZWF0dXJlRXhwZWN0aW5nUG9zaXRpdmVJbnRlZ2VyKG1lZGlhRmVhdHVyZSkgJiYgIWlz
QXNwZWN0UmF0aW9GZWF0dXJlKG1lZGlhRmVhdHVyZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCShyZXZpc2lvbiAyODc4MTEp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTYyLDcgKzU2Miw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVGb250VmFyaWF0aW9uVGFnKENTU1BhcgogICAgIGlmICghdGFnVmFsdWUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIAotICAgIHJldHVybiBDU1NGb250VmFyaWF0aW9uVmFsdWU6
OmNyZWF0ZSh0YWcsICp0YWdWYWx1ZSk7CisgICAgcmV0dXJuIENTU0ZvbnRWYXJpYXRpb25WYWx1
ZTo6Y3JlYXRlKHRhZywgdGFnVmFsdWUtPnZhbHVlKTsKIH0KICAgICAKIHN0YXRpYyBSZWZQdHI8
Q1NTVmFsdWU+IGNvbnN1bWVGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCkBAIC0xNDU3LDcgKzE0NTcsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGFy
Z3MgPSBjb25zdW1lRnVuY3Rpb24ocmFuZ2VDb3B5KTsKIAogICAgIGF1dG8geDEgPSBjb25zdW1l
TnVtYmVyUmF3KGFyZ3MpOwotICAgIGlmICgheDEgfHwgKngxIDwgMCB8fCAqeDEgPiAxKQorICAg
IGlmICgheDEgfHwgeDEtPnZhbHVlIDwgMCB8fCB4MS0+dmFsdWUgPiAxKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKICAgICBpZiAoIWNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3Bh
Y2UoYXJncykpCkBAIC0xNDcxLDcgKzE0NzEsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBhdXRvIHgyID0gY29uc3VtZU51bWJlclJhdyhhcmdzKTsKLSAgICBpZiAoIXgyIHx8ICp4
MiA8IDAgfHwgKngyID4gMSkKKyAgICBpZiAoIXgyIHx8IHgyLT52YWx1ZSA8IDAgfHwgeDItPnZh
bHVlID4gMSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWNvbnN1bWVDb21t
YUluY2x1ZGluZ1doaXRlc3BhY2UoYXJncykpCkBAIC0xNDg1LDcgKzE0ODUsNyBAQCBzdGF0aWMg
UmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3ViaWNCZXppZXIoQ1NTUGFyc2VyVG8KICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICByYW5nZSA9IHJhbmdlQ29weTsKLSAgICByZXR1cm4gQ1NT
Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUoKngxLCAqeTEsICp4MiwgKnky
KTsKKyAgICByZXR1cm4gQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUo
eDEtPnZhbHVlLCB5MS0+dmFsdWUsIHgyLT52YWx1ZSwgeTItPnZhbHVlKTsKIH0KIAogc3RhdGlj
IFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZVNwcmluZ0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQpAQCAtMTQ5NiwxNyArMTQ5NiwxNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lU3ByaW5nRnVuY3Rpb24oQ1NTUGFyc2UKIAogICAgIC8vIE1hc3MgbXVzdCBiZSBn
cmVhdGVyIHRoYW4gMC4KICAgICBhdXRvIG1hc3MgPSBjb25zdW1lTnVtYmVyUmF3KGFyZ3MpOwot
ICAgIGlmICghbWFzcyB8fCAqbWFzcyA8PSAwKQorICAgIGlmICghbWFzcyB8fCBtYXNzLT52YWx1
ZSA8PSAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBTdGlmZm5lc3Mg
bXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KICAgICBhdXRvIHN0aWZmbmVzcyA9IGNvbnN1bWVOdW1i
ZXJSYXcoYXJncyk7Ci0gICAgaWYgKCFzdGlmZm5lc3MgfHwgKnN0aWZmbmVzcyA8PSAwKQorICAg
IGlmICghc3RpZmZuZXNzIHx8IHN0aWZmbmVzcy0+dmFsdWUgPD0gMCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgCiAgICAgLy8gRGFtcGluZyBjb2VmZmljaWVudCBtdXN0IGJlIGdyZWF0
ZXIgdGhhbiBvciBlcXVhbCB0byAwLgogICAgIGF1dG8gZGFtcGluZyA9IGNvbnN1bWVOdW1iZXJS
YXcoYXJncyk7Ci0gICAgaWYgKCFkYW1waW5nIHx8ICpkYW1waW5nIDwgMCkKKyAgICBpZiAoIWRh
bXBpbmcgfHwgZGFtcGluZy0+dmFsdWUgPCAwKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAKICAgICAvLyBJbml0aWFsIHZlbG9jaXR5IG1heSBoYXZlIGFueSB2YWx1ZS4KQEAgLTE1MTks
NyArMTUxOSw3IEBAIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVTcHJpbmdGdW5jdGlv
bihDU1NQYXJzZQogCiAgICAgcmFuZ2UgPSByYW5nZUNvcHk7CiAKLSAgICByZXR1cm4gQ1NTU3By
aW5nVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKCptYXNzLCAqc3RpZmZuZXNzLCAqZGFtcGlu
ZywgKmluaXRpYWxWZWxvY2l0eSk7CisgICAgcmV0dXJuIENTU1NwcmluZ1RpbWluZ0Z1bmN0aW9u
VmFsdWU6OmNyZWF0ZShtYXNzLT52YWx1ZSwgc3RpZmZuZXNzLT52YWx1ZSwgZGFtcGluZy0+dmFs
dWUsIGluaXRpYWxWZWxvY2l0eS0+dmFsdWUpOwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCkBAIC0xODczLDcgKzE4NzMsNyBA
QCBzdGF0aWMgYm9vbCBjb25zdW1lUGVyc3BlY3RpdmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXIK
ICAgICB9CiAKICAgICBpZiAoYXV0byBwZXJzcGVjdGl2ZSA9IGNvbnN1bWVOdW1iZXJSYXcoYXJn
cywgVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpKSB7Ci0gICAgICAgIHRyYW5zZm9ybVZhbHVlLT5h
cHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgqcGVyc3BlY3RpdmUsIENTU1VuaXRUeXBl
OjpDU1NfUFgpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHBlcnNwZWN0aXZlLT52YWx1ZSwgQ1NTVW5pdFR5cGU6OkNTU19QWCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIzMzYsNyArMjMzNiw3IEBAIHN0YXRp
YyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVDdXJzb3IoQ1NTUGFyc2VyVG9rZW5SYQogICAgICAg
ICAgICAgaWYgKCF5KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjbGFtcCBvciByb3VuZCBpbnN0ZWFkIG9mIGp1c3QgY2Fz
dGluZyBmcm9tIGRvdWJsZSB0byBpbnQ/Ci0gICAgICAgICAgICBob3RTcG90ID0gSW50UG9pbnQg
eyBzdGF0aWNfY2FzdDxpbnQ+KCp4KSwgc3RhdGljX2Nhc3Q8aW50PigqeSkgfTsKKyAgICAgICAg
ICAgIGhvdFNwb3QgPSBJbnRQb2ludCB7IHN0YXRpY19jYXN0PGludD4oeC0+dmFsdWUpLCBzdGF0
aWNfY2FzdDxpbnQ+KHktPnZhbHVlKSB9OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFsaXN0
KQpAQCAtMjQ1OCw5ICsyNDU4LDkgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZVBlcnNwZWN0aXZlKENTCiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHF1aXJrIG9u
bHkgYXBwbHkgdG8gdGhlIHdlYmtpdCBwcmVmaXhlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eS4K
ICAgICBhdXRvIHBlcnNwZWN0aXZlID0gY29uc3VtZU51bWJlclJhdyhyYW5nZSk7Ci0gICAgaWYg
KCFwZXJzcGVjdGl2ZSB8fCAqcGVyc3BlY3RpdmUgPCAwKQorICAgIGlmICghcGVyc3BlY3RpdmUg
fHwgcGVyc3BlY3RpdmUtPnZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoKnBlcnNwZWN0aXZlLCBDU1NVbml0VHlw
ZTo6Q1NTX1BYKTsKKyAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwZXJzcGVj
dGl2ZS0+dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogfQogCiBzdGF0aWMgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gY29uc3VtZVNjcm9sbFNuYXBBbGlnbihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKQEAgLTQ1MTgsNyArNDUxOCw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUHJvcGVydHlQ
YXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQwogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJFbmRF
bmRSYWRpdXM6CiAgICAgICAgIHJldHVybiBjb25zdW1lQm9yZGVyUmFkaXVzQ29ybmVyKG1fcmFu
Z2UsIG1fY29udGV4dC5tb2RlKTsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RmxleEdy
b3VwOgotICAgICAgICByZXR1cm4gY29uc3VtZUludGVnZXIobV9yYW5nZSwgMCk7CisgICAgICAg
IHJldHVybiBjb25zdW1lSW50ZWdlclplcm9BbmRHcmVhdGVyKG1fcmFuZ2UpOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlPcmRlcjoKICAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKG1fcmFuZ2Up
OwogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lUG9zaXRpb246CkBAIC00ODEyLDcg
KzQ4MTIsNyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ291bnRlclN0eWxlUGFk
KENTU1BhcnMKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHN5bWJvbDsKICAgICB3aGlsZSAoIWludGVn
ZXIgfHwgIXN5bWJvbCkgewogICAgICAgICBpZiAoIWludGVnZXIpIHsKLSAgICAgICAgICAgIGlu
dGVnZXIgPSBjb25zdW1lSW50ZWdlcihyYW5nZSwgMCk7CisgICAgICAgICAgICBpbnRlZ2VyID0g
Y29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihyYW5nZSk7CiAgICAgICAgICAgICBpZiAoaW50
ZWdlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNDg1MiwxMiAr
NDg1MiwxMiBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ291bnRlclN0eWxlQWRk
aXRpdmVTeW0KICAgICBhdXRvIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBh
cmF0ZWQoKTsKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gbGFzdFdlaWdodDsKICAgICBkbyB7Ci0g
ICAgICAgIGF1dG8gaW50ZWdlciA9IGNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAwKTsKKyAgICAgICAg
YXV0byBpbnRlZ2VyID0gY29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlcihyYW5nZSk7CiAgICAg
ICAgIGF1dG8gc3ltYm9sID0gY29uc3VtZUNvdW50ZXJTdHlsZVN5bWJvbChyYW5nZSwgY29udGV4
dCk7CiAgICAgICAgIGlmICghaW50ZWdlcikgewogICAgICAgICAgICAgaWYgKCFzeW1ib2wpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBpbnRlZ2VyID0gY29u
c3VtZUludGVnZXIocmFuZ2UsIDApOworICAgICAgICAgICAgaW50ZWdlciA9IGNvbnN1bWVJbnRl
Z2VyWmVyb0FuZEdyZWF0ZXIocmFuZ2UpOwogICAgICAgICAgICAgaWYgKCFpbnRlZ2VyKQogICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC01MDAyLDE0ICs1MDAy
LDE0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVCYXNlUGFsZXR0
ZURlcwogewogICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVJZGVudDxDU1NWYWx1ZUxpZ2h0
LCBDU1NWYWx1ZURhcms+KHJhbmdlKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXR1
cm4gY29uc3VtZUludGVnZXIocmFuZ2UsIDApOworICAgIHJldHVybiBjb25zdW1lSW50ZWdlclpl
cm9BbmRHcmVhdGVyKHJhbmdlKTsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNv
bnN1bWVPdmVycmlkZUNvbG9yc0Rlc2NyaXB0b3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBk
byB7Ci0gICAgICAgIGF1dG8ga2V5ID0gY29uc3VtZUludGVnZXIocmFuZ2UsIDApOworICAgICAg
ICBhdXRvIGtleSA9IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIocmFuZ2UpOwogICAgICAg
ICBpZiAoIWtleSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC01MzM3LDEzICs1
MzM3LDEzIEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbnN1bWVGbGV4KGJvb2wgaW1wb3J0
YW50KQogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIHdoaWxlICghbV9yYW5n
ZS5hdEVuZCgpICYmIGluZGV4KysgPCAzKSB7CiAgICAgICAgICAgICBpZiAoYXV0byBudW1iZXIg
PSBjb25zdW1lTnVtYmVyUmF3KG1fcmFuZ2UpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCpudW1i
ZXIgPCAwKQorICAgICAgICAgICAgICAgIGlmIChudW1iZXItPnZhbHVlIDwgMCkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGlmIChmbGV4R3JvdyA9
PSB1bnNldFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBmbGV4R3JvdyA9ICpudW1iZXI7Cisg
ICAgICAgICAgICAgICAgICAgIGZsZXhHcm93ID0gbnVtYmVyLT52YWx1ZTsKICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChmbGV4U2hyaW5rID09IHVuc2V0VmFsdWUpCi0gICAgICAgICAgICAgICAg
ICAgIGZsZXhTaHJpbmsgPSAqbnVtYmVyOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEqbnVt
YmVyKSAvLyBmbGV4IG9ubHkgYWxsb3dzIGEgYmFzaXMgb2YgMCAoc2FucyB1bml0cykgaWYgZmxl
eC1ncm93IGFuZCBmbGV4LXNocmluayB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0LgorICAg
ICAgICAgICAgICAgICAgICBmbGV4U2hyaW5rID0gbnVtYmVyLT52YWx1ZTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICghbnVtYmVyLT52YWx1ZSkgLy8gZmxleCBvbmx5IGFsbG93cyBhIGJhc2lz
IG9mIDAgKHNhbnMgdW5pdHMpIGlmIGZsZXgtZ3JvdyBhbmQgZmxleC1zaHJpbmsgdmFsdWVzIGhh
dmUgYWxyZWFkeSBiZWVuIHNldC4KICAgICAgICAgICAgICAgICAgICAgZmxleEJhc2lzID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgwLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAJKHJldmlzaW9uIDI4NzgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzEx
OCw3IEBAIHN0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFsdWUoQ2FsY3VsYXRpb25DYXRlZ29y
eSBjYQogLy8gRklYTUU6IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJv
bSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuCiBjbGFzcyBDYWxjUGFyc2VyIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZSA9IHsgfSwgQ1NTVmFsdWVQb29sJiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KSwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2UgPSBmYWxzZSkKKyAgICBleHBsaWNpdCBD
YWxjUGFyc2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5
IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6
OkFsbCwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IHsgfSwgQ1NTVmFs
dWVQb29sJiBwb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwgTmVnYXRpdmVQZXJjZW50
YWdlUG9saWN5IG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSA9IE5lZ2F0aXZlUGVyY2VudGFnZVBv
bGljeTo6Rm9yYmlkKQogICAgICAgICA6IG1fc291cmNlUmFuZ2UocmFuZ2UpCiAgICAgICAgICwg
bV9yYW5nZShyYW5nZSkKICAgICAgICAgLCBtX3Bvb2wocG9vbCkKQEAgLTEyNiw3ICsxMjYsNyBA
QCBjbGFzcyBDYWxjUGFyc2VyIHsgKHB1YmxpYykKICAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9r
ZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgICAgICBhdXRvIGZ1bmN0aW9uSWQgPSB0b2tl
bi5mdW5jdGlvbklkKCk7CiAgICAgICAgIGlmIChDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9u
KGZ1bmN0aW9uSWQpKQotICAgICAgICAgICAgbV9jYWxjVmFsdWUgPSBDU1NDYWxjVmFsdWU6OmNy
ZWF0ZShmdW5jdGlvbklkLCBjb25zdW1lRnVuY3Rpb24obV9yYW5nZSksIGRlc3RpbmF0aW9uQ2F0
ZWdvcnksIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRhZ2Up
OworICAgICAgICAgICAgbV9jYWxjVmFsdWUgPSBDU1NDYWxjVmFsdWU6OmNyZWF0ZShmdW5jdGlv
bklkLCBjb25zdW1lRnVuY3Rpb24obV9yYW5nZSksIGRlc3RpbmF0aW9uQ2F0ZWdvcnksIHZhbHVl
UmFuZ2UsIHN5bWJvbFRhYmxlLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgPT0gTmVnYXRpdmVQ
ZXJjZW50YWdlUG9saWN5OjpBbGxvdyk7CiAgICAgfQogCiAgICAgY29uc3QgQ1NTQ2FsY1ZhbHVl
KiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsY1ZhbHVlLmdldCgpOyB9CkBAIC0xNTIsNjUg
KzE1Miw2IEBAIGNsYXNzIENhbGNQYXJzZXIgeyAocHVibGljKQogICAgICAgICByZXR1cm4gbV9w
b29sLmNyZWF0ZVZhbHVlKFdURk1vdmUobV9jYWxjVmFsdWUpKTsKICAgICB9CiAKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyKGRvdWJsZSBtaW5pbXVtVmFsdWUp
Ci0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4g
bV9wb29sLmNyZWF0ZVZhbHVlKHN0ZDo6cm91bmQoc3RkOjptYXgobV9jYWxjVmFsdWUtPmRvdWJs
ZVZhbHVlKCksIG1pbmltdW1WYWx1ZSkpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RkOjpvcHRpb25hbDxJbnRUeXBl
PiBjb25zdW1lSW50ZWdlclR5cGVSYXcoZG91YmxlIG1pbmltdW1WYWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghbV9jYWxjVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owot
ICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIGNsYW1wVG88
SW50VHlwZT4oc3RkOjpyb3VuZChzdGQ6Om1heChtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSwg
bWluaW11bVZhbHVlKSkpOwotICAgIH0KLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZU51bWJlcigpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwot
ICAgICAgICByZXR1cm4gbV9wb29sLmNyZWF0ZVZhbHVlKG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1
ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNW
YWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJj
ZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAgcmV0dXJuIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1
ZSgpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJh
dygpCi0gICAgewotICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgYXV0byBjYXRlZ29yeSA9IG1fY2FsY1ZhbHVlLT5jYXRl
Z29yeSgpOwotICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIG1fc291cmNl
UmFuZ2UgPSBtX3JhbmdlOwotICAgICAgICByZXR1cm4gbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVl
KCk7Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3
KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9jYWxjVmFsdWUtPmNhdGVn
b3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKLSAgICAgICAg
cmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBtX2NhbGNWYWx1ZS0+ZG91
YmxlVmFsdWUoKSB9IH07Ci0gICAgfQotCi0gICAgc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNv
bnN1bWVMZW5ndGhSYXcoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8fCBtX2Nh
bGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpCi0gICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9y
YW5nZTsKLSAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBt
X2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07Ci0gICAgfQotCiBwcml2YXRlOgogICAgIENT
U1BhcnNlclRva2VuUmFuZ2UmIG1fc291cmNlUmFuZ2U7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5n
ZSBtX3JhbmdlOwpAQCAtMjIwLDcgKzE2MSw3IEBAIGNsYXNzIENhbGNQYXJzZXIgeyAocHVibGlj
KQogCiAvLyBNQVJLOiAtIFByaW1pdGl2ZSB2YWx1ZSBjb25zdW1lcnMgZm9yIGNhbGxlcnMgdGhh
dCBrbm93IHRoZSB0b2tlbiB0eXBlLgogCi1zdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY29u
c3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSA9IHsgfSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVS
YW5nZTo6QWxsKQorc3RhdGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNvbnN1bWVDYWxjUmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1
bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKICAgICBBU1NFUlQocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIApAQCAtMjM4LDIwNiArMTc5LDI2NSBAQCBzdGF0
aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2sKIAogLy8g
TUFSSzogSW50ZWdlciAoUmF3KQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxJbnRUeXBlPiBjb25zdW1lSW50ZWdlclR5cGVSYXdXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwgZG91YmxlIG1p
bmltdW1WYWx1ZSkKK2VudW0gY2xhc3MgSW50ZWdlclJhbmdlIHsgQWxsLCBaZXJvQW5kR3JlYXRl
ciwgT25lQW5kR3JlYXRlciB9OworCitzdGF0aWMgY29uc3RleHByIGRvdWJsZSBjb21wdXRlTWlu
aW11bVZhbHVlKEludGVnZXJSYW5nZSByYW5nZSkKIHsKLSAgICBhdXRvIHJhbmdlID0gc291cmNl
UmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHsgfSwgVmFs
dWVSYW5nZTo6QWxsKSkgewotICAgICAgICBzb3VyY2VSYW5nZSA9IHJhbmdlOwotICAgICAgICBy
ZXR1cm4gY2xhbXBUbzxJbnRUeXBlPihzdGQ6OnJvdW5kKHN0ZDo6bWF4KHZhbHVlLT5kb3VibGVW
YWx1ZSgpLCBtaW5pbXVtVmFsdWUpKSk7CisgICAgc3dpdGNoIChyYW5nZSkgeworICAgIGNhc2Ug
SW50ZWdlclJhbmdlOjpBbGw6CisgICAgICAgIHJldHVybiAtc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjppbmZpbml0eSgpOworICAgIGNhc2UgSW50ZWdlclJhbmdlOjpaZXJvQW5kR3JlYXRl
cjoKKyAgICAgICAgcmV0dXJuIDAuMDsKKyAgICBjYXNlIEludGVnZXJSYW5nZTo6T25lQW5kR3Jl
YXRlcjoKKyAgICAgICAgcmV0dXJuIDEuMDsKICAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogfQorLy8gTUFSSzogSW50ZWdlciAoUmF3KQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBJbnRU
eXBlPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxJbnRUeXBlPiBjb25zdW1lSW50ZWdlclR5cGVSYXdX
aXRoS25vd25Ub2tlblR5cGVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJs
ZSBtaW5pbXVtVmFsdWUpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVt
YmVyVG9rZW4pOwotICAgIAotICAgIGlmIChyYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlVHlwZSgp
ID09IE51bWJlclZhbHVlVHlwZSB8fCByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCBtaW5p
bXVtVmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlLCBJbnRlZ2VyUmFuZ2UgaW50ZWdl
clJhbmdlPgorc3RydWN0IEludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUg
PSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYs
IFZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1
aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rp
b25Ub2tlbik7CisKKyAgICAgICAgYXV0byByYW5nZUNvcHkgPSByYW5nZTsKKyAgICAgICAgaWYg
KGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJh
bmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB7IH0sIFZhbHVlUmFuZ2U6OkFs
bCkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VDb3B5OworICAgICAgICAgICAgcmV0dXJu
IGNsYW1wVG88SW50VHlwZT4oc3RkOjpyb3VuZChzdGQ6Om1heCh2YWx1ZS0+ZG91YmxlVmFsdWUo
KSwgY29tcHV0ZU1pbmltdW1WYWx1ZShpbnRlZ2VyUmFuZ2UpKSkpOworICAgICAgICB9CisKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICByZXR1cm4gY2xhbXBUbzxJbnRUeXBlPihy
YW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpKTsKLX0KKyAg
ICB9Cit9OwogCi0vLyBNQVJLOiBJbnRlZ2VyIChDU1NQcmltaXRpdmVWYWx1ZSAtIG5vdCBtYWlu
dGFpbmluZyBjYWxjKQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGlu
dGVnZXJSYW5nZT4KK3N0cnVjdCBJbnRlZ2VyVHlwZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29u
c3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlw
ZSA9IE51bWJlclRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYs
IFZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1
aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVy
VG9rZW4pOworICAgICAgICAKKyAgICAgICAgaWYgKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWVU
eXBlKCkgPT0gTnVtYmVyVmFsdWVUeXBlIHx8IHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8
IGNvbXB1dGVNaW5pbXVtVmFsdWUoaW50ZWdlclJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiBjbGFtcFRvPEludFR5cGU+KHJhbmdlLmNvbnN1
bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkpOworICAgIH0KK307CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEludFR5cGU+IHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVJbnRlZ2VyVHlwZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tl
blR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1W
YWx1ZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IEZ1bmN0aW9uVG9rZW4pOworLy8gTUFSSzogSW50ZWdlciAoQ1NTUHJpbWl0aXZlVmFs
dWUgLSBtYWludGFpbmluZyBjYWxjKQogCi0gICAgaWYgKGF1dG8gaW50ZWdlciA9IGNvbnN1bWVJ
bnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uPEludFR5cGU+KHJhbmdlLCBt
aW5pbXVtVmFsdWUpKQotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqaW50ZWdlciwg
Q1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIHJldHVybiBudWxscHRyOwotfQordGVtcGxh
dGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVnZXJSYW5nZT4KK3N0cnVjdCBJ
bnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsKKyAg
ICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wm
IHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5j
dGlvblRva2VuKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZT4gc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
ZG91YmxlIG1pbmltdW1WYWx1ZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKyAgICAgICAgaWYgKGF1dG8gaW50
ZWdlciA9IEludGVnZXJUeXBlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyPEludFR5
cGUsIGludGVnZXJSYW5nZT46OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdl
LCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVy
biBwb29sLmNyZWF0ZVZhbHVlKCppbnRlZ2VyLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLSAgICBpZiAoYXV0byBpbnRlZ2Vy
ID0gY29uc3VtZUludGVnZXJUeXBlUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyPEludFR5cGU+
KHJhbmdlLCBtaW5pbXVtVmFsdWUpKQotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgq
aW50ZWdlciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgIHJldHVybiBudWxscHRyOwot
fQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwgSW50ZWdlclJhbmdlIGludGVnZXJSYW5nZT4K
K3N0cnVjdCBJbnRlZ2VyVHlwZUtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2Vu
OworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVl
UG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IE51bWJlclRva2VuKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhdXRvIGludGVnZXIgPSBJbnRl
Z2VyVHlwZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI8SW50VHlwZSwgaW50ZWdlclJh
bmdlPjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUs
IHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQorICAgICAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRl
VmFsdWUoKmludGVnZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorfTsKIAogLy8gTUFSSzogTnVtYmVyIChSYXcpCiAKLXN0YXRpYyBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsaWRhdGVkTnVtYmVyUmF3KGRvdWJsZSB2YWx1ZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PiB2YWxp
ZGF0ZWROdW1iZXJSYXcoZG91YmxlIHZhbHVlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAg
ICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgdmFsdWUgPCAw
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIHJldHVybiB2YWx1ZTsKKyAgICBy
ZXR1cm4ge3sgdmFsdWUgfX07CiB9CiAKLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29u
c3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHNvdXJjZVJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgYXV0byByYW5nZSA9IHNvdXJjZVJhbmdlOwot
ICAgIGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUNhbGNSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCBzeW1ib2xUYWJsZSwgdmFs
dWVSYW5nZSkpIHsKLSAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRO
dW1iZXJSYXcodmFsdWUtPmRvdWJsZVZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgICAg
ICBzb3VyY2VSYW5nZSA9IHJhbmdlOwotICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVl
Oworc3RydWN0IE51bWJlclJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25U
b2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+IGNvbnN1bWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
VW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKworICAgICAgICBhdXRvIHJhbmdlQ29weSA9IHJhbmdl
OworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9rZW5U
eXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFs
dWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodmFsdWUtPmRvdWJsZVZhbHVlKCksIHZhbHVlUmFuZ2Up
KSB7CisgICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUNvcHk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLX0KLQotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgQVNT
RVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwotICAgIAotICAgIGlmIChh
dXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3KHJhbmdlLnBlZWsoKS5udW1l
cmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGlu
Z1doaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworc3RydWN0IE51
bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPE51bWJlclJhdz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3
KHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAg
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4g
dmFsaWRhdGVkVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
ICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKLXN0YXRpYyBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZUlkZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gSWRlbnRUb2tlbik7CitzdHJ1Y3QgTnVtYmVyUmF3S25vd25Ub2tlblR5cGVJ
ZGVudENvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0
b2tlblR5cGUgPSBJZGVudFRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPE51bWJlclJh
dz4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7CisgICAgICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pOwogCi0gICAgaWYgKGF1dG8gdmFy
aWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkpKSB7Ci0gICAgICAgIHN3
aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05V
TUJFUjoKLSAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVt
YmVyUmF3KHZhcmlhYmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAgICAgICBy
YW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgIHJldHVy
biB2YWxpZGF0ZWRWYWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAoYXV0byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQo
KSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgICAgICAgICAgICAgaWYgKGF1dG8g
dmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodmFyaWFibGUtPnZhbHVlLCB2YWx1
ZVJhbmdlKSkgeworICAgICAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKICAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK307CiAKIC8v
IE1BUks6IE51bWJlciAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQogCi1z
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJh
bmdlIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2Uu
cGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBOdW1iZXJDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25U
b2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmss
IFVuaXRsZXNzWmVyb1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKIAotICAgIENhbGNQ
YXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHZhbHVlUmFu
Z2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKLSAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1ZUlm
Q2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKLX0KKyAgICAgICAgQ2FsY1Bh
cnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5n
ZSwgc3ltYm9sVGFibGUsIHBvb2wpOworICAgICAgICByZXR1cm4gcGFyc2VyLmNvbnN1bWVWYWx1
ZUlmQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKKyAgICB9Cit9OwogCi1z
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdl
LCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkg
PT0gTnVtYmVyVG9rZW4pOwotICAgIAotICAgIGF1dG8gdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0g
ICAgCi0gICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWROdW1iZXJSYXcodG9r
ZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIGF1dG8gdW5pdFR5cGUg
PSB0b2tlbi51bml0VHlwZSgpOwotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOwotICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqdmFsaWRhdGVkVmFsdWUs
IHVuaXRUeXBlKTsKK3N0cnVjdCBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFy
c2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNv
bnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9v
bCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRv
a2VuKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJh
dyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIGF1dG8g
dW5pdFR5cGUgPSB0b2tlbi51bml0VHlwZSgpOworICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUlu
Y2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVl
KHZhbGlkYXRlZFZhbHVlLT52YWx1ZSwgdW5pdFR5cGUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK307CiAKLQogLy8g
TUFSSzogUGVyY2VudCAocmF3KQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IHZhbGlk
YXRlZFBlcmNlbnRSYXcoZG91YmxlIHZhbHVlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCitzdGF0
aWMgc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiB2YWxpZGF0ZWRQZXJjZW50UmF3KGRvdWJsZSB2
YWx1ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewogICAgIGlmICh2YWx1ZVJhbmdlID09IFZh
bHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKICAgICBpZiAoc3RkOjppc2luZih2YWx1ZSkpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHJldHVybiB7eyB2YWx1ZSB9fTsKIH0K
IAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHNvdXJjZVJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Up
Ci17Ci0gICAgQVNTRVJUKHNvdXJjZVJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tl
bik7CitzdHJ1Y3QgUGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRnVuY3Rp
b25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiBjb25zdW1lKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBjb25zdCBhdXRvJiB0b2tlbiA9IHNv
dXJjZVJhbmdlLnBlZWsoKTsKLSAgICBhdXRvIGZ1bmN0aW9uSWQgPSB0b2tlbi5mdW5jdGlvbklk
KCk7Ci0gICAgaWYgKCFDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKGZ1bmN0aW9uSWQpKQot
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICBhdXRvIHJhbmdlQ29weSA9IHJh
bmdlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVDYWxjUmF3V2l0aEtub3duVG9r
ZW5UeXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCBz
eW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VDb3B5
OwogCi0gICAgYXV0byByYW5nZSA9IHNvdXJjZVJhbmdlOwotICAgIGF1dG8gY2FsY1ZhbHVlID0g
Q1NTQ2FsY1ZhbHVlOjpjcmVhdGUoZnVuY3Rpb25JZCwgY29uc3VtZUZ1bmN0aW9uKHJhbmdlKSwg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUpOwot
ICAgIGlmIChjYWxjVmFsdWUgJiYgY2FsY1ZhbHVlLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnQpIHsKLSAgICAgICAgc291cmNlUmFuZ2UgPSByYW5nZTsKLSAgICAg
ICAgcmV0dXJuIGNhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgdGhpcyB2YWxpZGF0ZSB0aGUgY2FsYyB2YWx1ZSBhcyBpcyBkb25lIGZvciB0aGUg
TnVtYmVyUmF3IHZhcmlhbnQ/CisgICAgICAgICAgICByZXR1cm4ge3sgdmFsdWUtPmRvdWJsZVZh
bHVlKCkgfX07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH0KK307CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorc3RydWN0IFBlcmNlbnRSYXdL
bm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQ
YXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gUGVyY2VudGFnZVRva2VuOworICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAg
ICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pOwogCi1z
dGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9r
ZW5UeXBlUGVyY2VudGFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIEFTU0VSVChyYW5n
ZS5wZWVrKCkudHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbik7Ci0KLSAgICBpZiAoYXV0byB2YWxp
ZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1
ZSgpLCB2YWx1ZVJhbmdlKSkgewotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpOwotICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWU7CisgICAgICAgIGlmIChhdXRv
IHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyhyYW5nZS5wZWVrKCkubnVtZXJp
Y1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQotICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci19Cit9OwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNvbnN1
bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBlSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRv
a2VuKTsKK3N0cnVjdCBQZXJjZW50UmF3S25vd25Ub2tlblR5cGVJZGVudENvbnN1bWVyIHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBJZGVudFRv
a2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFBlcmNlbnRSYXc+IGNvbnN1bWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywg
VW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBJZGVudFRva2VuKTsKIAotICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFi
bGUuZ2V0KHJhbmdlLnBlZWsoKS5pZCgpKSkgewotICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50
eXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgotICAgICAg
ICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHZhcmlh
YmxlLT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRW
YWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoYXV0
byB2YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRl
ZFZhbHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2Up
KSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotCiAvLyBNQVJL
OiBQZXJjZW50IChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50YWluaW5nIGNhbGMpCiAKLXN0YXRp
YyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFs
dWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBQZXJjZW50Q1NTUHJpbWl0aXZl
VmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0
YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9r
ZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBV
bml0bGVzc1plcm9RdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBDYWxjUGFy
c2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5n
ZSwgc3ltYm9sVGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZD
YXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KTsKLX0KKyAgICAgICAgQ2FsY1Bh
cnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFu
Z2UsIHN5bWJvbFRhYmxlLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFs
dWVJZkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpOworICAgIH0KK307CiAK
LXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFs
dWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCku
dHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbik7Ci0KLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1
ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcocmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCB2YWx1
ZVJhbmdlKSkgewotICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwot
ICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSgqdmFsaWRhdGVkVmFsdWUsIENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRSk7CitzdHJ1Y3QgUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXIgeworICAgIHN0YXRpYyBjb25z
dGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IFBlcmNlbnRhZ2VUb2tlbjsKKyAg
ICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrLCBD
U1NWYWx1ZVBvb2wmIHBvb2wpCisgICAgeworICAgICAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pOworICAgICAgICAKKyAgICAgICAgaWYgKGF1dG8gdmFs
aWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRQZXJjZW50UmF3KHJhbmdlLnBlZWsoKS5udW1lcmljVmFs
dWUoKSwgdmFsdWVSYW5nZSkpIHsKKyAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZSh2YWxpZGF0
ZWRWYWx1ZS0+dmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQor
fTsKIAogLy8gTUFSSzogTGVuZ3RoIChyYXcpCiAKQEAgLTQ1MCw4MzEgKzQ1MCw5NDUgQEAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB2YWxpZGF0ZWRMZW5ndGhSYXcoZG91YmxlCiAgICAg
cmV0dXJuIHZhbHVlOwogfQogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1
bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdl
JiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrKQotewotICAg
IGF1dG8gcmFuZ2UgPSBzb3VyY2VSYW5nZTsKLSAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVD
YWxjUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHNvdXJjZVJh
bmdlID0gcmFuZ2U7Ci0gICAgICAgIHJldHVybiB7IHsgdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwg
dmFsdWUtPmRvdWJsZVZhbHVlKCkgfSB9Oworc3RydWN0IExlbmd0aFJhd0tub3duVG9rZW5UeXBl
RnVuY3Rpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5
cGUgdG9rZW5UeXBlID0gRnVuY3Rpb25Ub2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxM
ZW5ndGhSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0Nh
bGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAg
ICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKKworICAgICAg
ICBhdXRvIHJhbmdlQ29weSA9IHJhbmdlOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1
bWVDYWxjUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2VDb3B5LCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpMZW5ndGgsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAg
ICAgcmFuZ2UgPSByYW5nZUNvcHk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhp
cyB2YWxpZGF0ZSB0aGUgY2FsYyB2YWx1ZSBhcyBpcyBkb25lIGZvciB0aGUgTnVtYmVyUmF3IHZh
cmlhbnQ/CisgICAgICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZh
bHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5U
eXBlRGltZW5zaW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyaykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBE
aW1lbnNpb25Ub2tlbik7CitzdHJ1Y3QgTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25D
b25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5U
eXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3
PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9s
VGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBBU1NFUlQo
cmFuZ2UucGVlaygpLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbik7CiAKLSAgICBhdXRvJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKKyAgICAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAK
LSAgICBhdXRvIHVuaXRUeXBlID0gdG9rZW4udW5pdFR5cGUoKTsKLSAgICBzd2l0Y2ggKHVuaXRU
eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1FVSVJLWV9FTVM6Ci0gICAgICAgIGlm
IChwYXJzZXJNb2RlICE9IFVBU2hlZXRNb2RlKQorICAgICAgICBhdXRvIHVuaXRUeXBlID0gdG9r
ZW4udW5pdFR5cGUoKTsKKyAgICAgICAgc3dpdGNoICh1bml0VHlwZSkgeworICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKKyAgICAgICAgICAgIGlmIChwYXJzZXJNb2Rl
ICE9IFVBU2hlZXRNb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VN
UzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CisgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19MSFM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19STEhTOgor
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfSUM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6CisgICAgICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0NNOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06CisgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgorICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19WVzoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgorICAgICAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZN
QVg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WQjoKKyAgICAgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1ZJOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZXOgorICAg
ICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1ZIOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfU1ZNSU46CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVk1BWDoKKyAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWQjoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1NWSToKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWVzoKKyAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0xWSDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xW
TUlOOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZNQVg6CisgICAgICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19MVkI6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkk6
CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVlc6CisgICAgICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19EVkg6CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EVk1JTjoKKyAg
ICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RWTUFYOgorICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfRFZCOgorICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgorICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgRkFMTFRI
Uk9VR0g7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUkVNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19STEhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DSFM6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19F
WFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19WSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoK
LSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZJOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19TVlc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWSDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfU1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NWTUFYOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVkI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1NWSToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZXOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19MVkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xWTUlOOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19MVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTFZCOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MVkk6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0RWVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZIOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19EVk1JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZNQVg6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0RWQjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFZJOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgorICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0
ZWRMZW5ndGhSYXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAg
ICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0
dXJuIHsgeyB1bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKKyAgICAgICAgfQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KK307CiAKLSAgICBpZiAoYXV0byB2YWxpZGF0
ZWRWYWx1ZSA9IHZhbGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVS
YW5nZSkpIHsKLSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAg
ICAgICAgcmV0dXJuIHsgeyB1bml0VHlwZSwgKnZhbGlkYXRlZFZhbHVlIH0gfTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KK3N0cnVjdCBMZW5ndGhSYXdLbm93blRva2VuVHlw
ZU51bWJlckNvbnN1bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlw
ZSB0b2tlblR5cGUgPSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxMZW5n
dGhSYXc+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNT
eW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKIAotc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3V2l0aEtub3duVG9r
ZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3lt
Ym9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9k
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBOdW1iZXJUb2tlbik7CisgICAgICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygp
OwogCi0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgICAgIGlmICghc2hvdWxk
QWNjZXB0VW5pdGxlc3NWYWx1ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgcGFyc2VyTW9kZSwgdW5p
dGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpCisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCi0gICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHRva2VuLm51
bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcms6OkFs
bG93KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsaWRhdGVkVmFsdWUgPSB2YWxpZGF0ZWRMZW5ndGhS
YXcodG9rZW4ubnVtZXJpY1ZhbHVlKCksIHZhbHVlUmFuZ2UpKSB7CisgICAgICAgICAgICByYW5n
ZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgICAgICAgICAgcmV0dXJuIHsgeyBD
U1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OworICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBpZiAoYXV0byB2YWxpZGF0ZWRWYWx1ZSA9
IHZhbGlkYXRlZExlbmd0aFJhdyh0b2tlbi5udW1lcmljVmFsdWUoKSwgdmFsdWVSYW5nZSkpIHsK
LSAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0
dXJuIHsgeyBDU1NVbml0VHlwZTo6Q1NTX1BYLCAqdmFsaWRhdGVkVmFsdWUgfSB9OwogICAgIH0K
LSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAogLy8gTUFSSzogTGVuZ3RoIChDU1NQ
cmltaXRpdmVWYWx1ZSAtIG1haW50YWluaW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENT
U0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFT
U0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOworc3RydWN0IExlbmd0
aENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUg
PSBGdW5jdGlvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwog
Ci0gICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aCwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUsIHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29u
c3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOwotfQorICAg
ICAgICBDYWxjUGFyc2VyIHBhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3Ro
LCB2YWx1ZVJhbmdlLCBzeW1ib2xUYWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBwYXJzZXIu
Y29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpOworICAg
IH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhD
U1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIg
eworICAgIHN0YXRpYyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERp
bWVuc2lvblRva2VuOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1pl
cm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9
IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcykpCi0gICAgICAgIHJldHVy
biBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IExlbmd0
aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvKSkK
KyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxl
bmd0aFJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CiAKLXN0
YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVW
YWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0
bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlw
ZSgpID09IE51bWJlclRva2VuKTsKK3N0cnVjdCBMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRp
YyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRs
ZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2Vu
KTsKIAotICAgIGlmIChhdXRvIGxlbmd0aFJhdyA9IGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25U
b2tlblR5cGVOdW1iZXIocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2Rl
LCB1bml0bGVzcykpCi0gICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZhbHVlKGxlbmd0aFJhdy0+
dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAg
IGlmIChhdXRvIGxlbmd0aFJhdyA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3Vt
ZXI6OmNvbnN1bWUocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1
bml0bGVzcywgdW5pdGxlc3NaZXJvKSkKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNyZWF0ZVZh
bHVlKGxlbmd0aFJhdy0+dmFsdWUsIGxlbmd0aFJhdy0+dHlwZSk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KK307CiAKIC8vIE1BUks6IEFuZ2xlIChyYXcpCiAKLXN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5j
dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiBzb3VyY2VSYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKLXsKLSAgICBhdXRvIHJhbmdlID0g
c291cmNlUmFuZ2U7Ci0gICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgc3lt
Ym9sVGFibGUsIHZhbHVlUmFuZ2UpKSB7Ci0gICAgICAgIHNvdXJjZVJhbmdlID0gcmFuZ2U7Ci0g
ICAgICAgIHJldHVybiB7IHsgdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgdmFsdWUtPmRvdWJsZVZh
bHVlKCkgfSB9Oworc3RydWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVy
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBG
dW5jdGlvblRva2VuOworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1l
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmssIFVuaXRsZXNzWmVyb1F1aXJrKQorICAgIHsKKyAgICAgICAgYXV0byByYW5nZUNvcHkg
PSByYW5nZTsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBjb25zdW1lQ2FsY1Jhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlQ29weSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUs
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKSkgeworICAgICAgICAgICAgcmFuZ2UgPSByYW5nZUNv
cHk7CisgICAgICAgICAgICByZXR1cm4geyB7IHZhbHVlLT5wcmltaXRpdmVUeXBlKCksIHZhbHVl
LT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgIH0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorfTsKIAotc3RhdGljIHN0
ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURp
bWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRh
YmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3Na
ZXJvUXVpcmspCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9u
VG9rZW4pOworc3RydWN0IEFuZ2xlUmF3S25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lciB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gRGlt
ZW5zaW9uVG9rZW47CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZh
bHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmssIFVuaXRsZXNzWmVyb1F1aXJr
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9u
VG9rZW4pOwogCi0gICAgYXV0byB1bml0VHlwZSA9IHJhbmdlLnBlZWsoKS51bml0VHlwZSgpOwot
ICAgIHN3aXRjaCAodW5pdFR5cGUpIHsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0dSQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAgIHJldHVybiB7
IHsgdW5pdFR5cGUsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1Zh
bHVlKCkgfSB9OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICBhdXRvIHVu
aXRUeXBlID0gcmFuZ2UucGVlaygpLnVuaXRUeXBlKCk7CisgICAgICAgIHN3aXRjaCAodW5pdFR5
cGUpIHsKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICAgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1JBRDoKKyAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6
CisgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAgICAgICAgICAgcmV0dXJu
IHsgeyB1bml0VHlwZSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmlj
VmFsdWUoKSB9IH07CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfQorfTsKK3N0cnVjdCBB
bmdsZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IE51bWJlclRva2VuOworICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVu
aXRsZXNzWmVybykKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09
IE51bWJlclRva2VuKTsKIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19CisgICAgICAgIGlm
IChzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4g
eyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICB9Cit9OwogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25z
dCBDU1NDYWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVy
bykKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBOdW1iZXJUb2tlbik7Ci0K
LSAgICBpZiAoc2hvdWxkQWNjZXB0VW5pdGxlc3NWYWx1ZShyYW5nZS5wZWVrKCkubnVtZXJpY1Zh
bHVlKCksIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8pKQotICAgICAgICByZXR1
cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQot
CiAvLyBNQVJLOiBBbmdsZSAoQ1NTUHJpbWl0aXZlVmFsdWUgLSBtYWludGFpbmluZyBjYWxjKQog
Ci1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3Na
ZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyIHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUgPSBGdW5jdGlvblRva2VuOwor
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsIFZh
bHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxl
c3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pOwogCi0gICAgQ2FsY1BhcnNlciBw
YXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdlLCBzeW1i
b2xUYWJsZSwgcG9vbCk7Ci0gICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5
KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKTsKLX0KKyAgICAgICAgQ2FsY1BhcnNlciBwYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLCB2YWx1ZVJhbmdlLCBzeW1ib2xU
YWJsZSwgcG9vbCk7CisgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29y
eShDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSk7CisgICAgfQorfTsKIAotc3RhdGljIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Y29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVu
aXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAg
IEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKK3N0cnVjdCBB
bmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25D
b25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5U
eXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVu
aXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJh
bmdlLnBlZWsoKS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOwogCi0gICAgaWYgKGF1dG8gYW5n
bGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2Us
IHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3Na
ZXJvKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYW5nbGVSYXctPnZhbHVlLCBh
bmdsZVJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlmIChhdXRv
IGFuZ2xlUmF3ID0gQW5nbGVSYXdLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOjpjb25z
dW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShhbmds
ZVJhdy0+dmFsdWUsIGFuZ2xlUmF3LT50eXBlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorfTsKIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xl
Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFs
dWVQb29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJl
clRva2VuKTsKK3N0cnVjdCBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25U
b2tlblR5cGVOdW1iZXJDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJU
b2tlblR5cGUgdG9rZW5UeXBlID0gTnVtYmVyVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNz
WmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gTnVtYmVyVG9rZW4pOwogCi0gICAgaWYg
KGF1dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIo
cmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5p
dGxlc3NaZXJvKSkKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYW5nbGVSYXctPnZh
bHVlLCBhbmdsZVJhdy0+dHlwZSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIGlm
IChhdXRvIGFuZ2xlUmF3ID0gQW5nbGVSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpj
b25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxl
c3MsIHVuaXRsZXNzWmVybykpCisgICAgICAgICAgICByZXR1cm4gcG9vbC5jcmVhdGVWYWx1ZShh
bmdsZVJhdy0+dmFsdWUsIGFuZ2xlUmF3LT50eXBlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorfTsKIAotCiAvLyBNQVJLOiBUaW1lIChDU1NQcmltaXRpdmVWYWx1ZSAtIG1haW50
YWluaW5nIGNhbGMpCiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVU
aW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVp
cmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKLXsKLSAgICBBU1NFUlQocmFuZ2UucGVlaygpLnR5cGUo
KSA9PSBGdW5jdGlvblRva2VuKTsKK3N0cnVjdCBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXIgeworICAgIHN0YXRpYyBjb25zdGV4
cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IEZ1bmN0aW9uVG9rZW47CisgICAgc3Rh
dGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9R
dWlyaywgQ1NTVmFsdWVQb29sJiBwb29sKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhbmdlLnBl
ZWsoKS50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbik7CiAKLSAgICBDYWxjUGFyc2VyIHBhcnNlcihy
YW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZSwgdmFsdWVSYW5nZSwgc3ltYm9sVGFibGUs
IHBvb2wpOwotICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlSWZDYXRlZ29yeShDYWxjdWxh
dGlvbkNhdGVnb3J5OjpUaW1lKTsKLX0KKyAgICAgICAgQ2FsY1BhcnNlciBwYXJzZXIocmFuZ2Us
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWUsIHZhbHVlUmFuZ2UsIHN5bWJvbFRhYmxlLCBwb29s
KTsKKyAgICAgICAgcmV0dXJuIHBhcnNlci5jb25zdW1lVmFsdWVJZkNhdGVnb3J5KENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlRpbWUpOworICAgIH0KK307CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRv
a2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2Fs
Y1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlLCBVbml0
bGVzc1F1aXJrLCBDU1NWYWx1ZVBvb2wmIHBvb2wpCi17Ci0gICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pOworc3RydWN0IFRpbWVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXIgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgQ1NTUGFyc2VyVG9rZW5UeXBlIHRva2VuVHlwZSA9IERpbWVuc2lvblRva2Vu
OworICAgIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVp
cmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVr
KCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAotICAgIGlmICh2YWx1ZVJhbmdlID09IFZh
bHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlICYmIHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSA8IDAp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1
ZVJhbmdlOjpOb25OZWdhdGl2ZSAmJiByYW5nZS5wZWVrKCkubnVtZXJpY1ZhbHVlKCkgPCAwKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoYXV0byB1bml0ID0gcmFuZ2Uu
cGVlaygpLnVuaXRUeXBlKCk7IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19NUyB8fCB1bml0ID09
IENTU1VuaXRUeXBlOjpDU1NfUykKLSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFu
Z2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7Cisg
ICAgICAgIGlmIChhdXRvIHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9PSBD
U1NVbml0VHlwZTo6Q1NTX01TIHx8IHVuaXQgPT0gQ1NTVW5pdFR5cGU6OkNTU19TKQorICAgICAg
ICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKIAotc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1ND
YWxjU3ltYm9sVGFibGUmLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgQ1NTVmFsdWVQb29sJiBwb29sKQotewot
ICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2VuKTsKK3N0cnVjdCBU
aW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1
bWVyIHsKKyAgICBzdGF0aWMgY29uc3RleHByIENTU1BhcnNlclRva2VuVHlwZSB0b2tlblR5cGUg
PSBOdW1iZXJUb2tlbjsKKyAgICBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUm
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IE51bWJlclRva2Vu
KTsKIAotICAgIGlmICh1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdyAmJiBzaG91bGRB
Y2NlcHRVbml0bGVzc1ZhbHVlKHJhbmdlLnBlZWsoKS5udW1lcmljVmFsdWUoKSwgcGFyc2VyTW9k
ZSwgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpBbGxvdykpIHsKLSAgICAgICAgaWYgKHZh
bHVlUmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgJiYgcmFuZ2UucGVlaygpLm51bWVy
aWNWYWx1ZSgpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1
cm4gcG9vbC5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51
bWVyaWNWYWx1ZSgpLCBDU1NVbml0VHlwZTo6Q1NTX01TKTsKKyAgICAgICAgaWYgKHVuaXRsZXNz
ID09IFVuaXRsZXNzUXVpcms6OkFsbG93ICYmIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUocmFu
Z2UucGVlaygpLm51bWVyaWNWYWx1ZSgpLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3Na
ZXJvUXVpcms6OkFsbG93KSkgeworICAgICAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVS
YW5nZTo6Tm9uTmVnYXRpdmUgJiYgcmFuZ2UucGVlaygpLm51bWVyaWNWYWx1ZSgpIDwgMCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBwb29sLmNy
ZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVl
KCksIENTU1VuaXRUeXBlOjpDU1NfTVMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK307CiAKIC8vIE1BUks6IFJlc29s
dXRpb24gKENTU1ByaW1pdGl2ZVZhbHVlIC0gbm8gY2FsYykKIAotc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb25DU1NQcmltaXRpdmVWYWx1ZVdpdGhLbm93
blRva2VuVHlwZURpbWVuc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVQ
b29sJiBwb29sKQotewotICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lv
blRva2VuKTsKK3N0cnVjdCBSZXNvbHV0aW9uQ1NTUHJpbWl0aXZlVmFsdWVXaXRoS25vd25Ub2tl
blR5cGVEaW1lbnNpb25Db25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJU
b2tlblR5cGUgdG9rZW5UeXBlID0gRGltZW5zaW9uVG9rZW47CisgICAgc3RhdGljIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29u
c3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiwgVmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmssIENTU1ZhbHVlUG9vbCYgcG9vbCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IERpbWVuc2lvblRva2VuKTsKIAot
ICAgIGlmIChhdXRvIHVuaXQgPSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9PSBDU1NV
bml0VHlwZTo6Q1NTX0RQUFggfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX1ggfHwgdW5pdCA9
PSBDU1NVbml0VHlwZTo6Q1NTX0RQSSB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfRFBDTSkK
LSAgICAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdW5pdCk7CisgICAgICAgIGlmIChhdXRvIHVuaXQg
PSByYW5nZS5wZWVrKCkudW5pdFR5cGUoKTsgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX0RQUFgg
fHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NTX1ggfHwgdW5pdCA9PSBDU1NVbml0VHlwZTo6Q1NT
X0RQSSB8fCB1bml0ID09IENTU1VuaXRUeXBlOjpDU1NfRFBDTSkKKyAgICAgICAgICAgIHJldHVy
biBwb29sLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVt
ZXJpY1ZhbHVlKCksIHVuaXQpOwogCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KK307CiAKKy8vIE1BUks6IFNwZWNpYWxpemVkIGNvbWJpbmF0
aW9uIGNvbnN1bWVycy4KIAotLy8gTUFSSzogLSBQcmltaXRpdmUgdmFsdWUgY29uc3VtZXJzIGZv
ciBjYWxsZXJzIHRoYXQgZG8gTk9UIGtub3cgdGhlIHRva2VuIHR5cGUuCisvLyBGSVhNRTogSXQg
d291bGQgYmUgZ29vZCB0byBmaW5kIGEgd2F5IHRvIHN5bnRoZXNpemUgdGhpcyBmcm9tIGFuIGFu
Z2xlIGFuZCBudW1iZXIgc3BlY2lmaWMgdmFyaWFudHMuCitzdHJ1Y3QgQW5nbGVPck51bWJlclJh
d0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lciB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQ
YXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gSWRlbnRUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxBbmdsZU9yTnVtYmVyUmF3PiBjb25zdW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrLCBVbml0bGVzc1plcm9RdWlyaykKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvIHZhcmlhYmxlID0gc3ltYm9sVGFibGUuZ2V0KHJhbmdlLnBlZWsoKS5p
ZCgpKSkgeworICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+dHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19SQUQ6CisgICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKKyAg
ICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAgICAgICAgICAgICAgIHJh
bmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IEFuZ2xlUmF3IHsgdmFyaWFibGUtPnR5cGUsIHZhcmlhYmxlLT52YWx1ZSB9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBJbnRUeXBlPiBzdGQ6Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSkK
LXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICAgICAgICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyUmF3IHsgdmFy
aWFibGUtPnZhbHVlIH07CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2Ug
RnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZVJhd1dpdGhL
bm93blRva2VuVHlwZUZ1bmN0aW9uPEludFR5cGU+KHJhbmdlLCBtaW5pbXVtVmFsdWUpOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1
bWVJbnRlZ2VyVHlwZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcjxJbnRUeXBlPihyYW5nZSwg
bWluaW11bVZhbHVlKTsKLSAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICB9Cit9OwogCi0gICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLX0KKy8vIEZJWE1FOiBJdCB3b3VsZCBiZSBnb29kIHRvIGZpbmQgYSB3YXkgdG8gc3lu
dGhlc2l6ZSB0aGlzIGZyb20gYW4gbnVtYmVyIGFuZCBwZXJjZW50IHNwZWNpZmljIHZhcmlhbnRz
Lgorc3RydWN0IE51bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRlbnRDb25zdW1lciB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gSWRl
bnRUb2tlbjsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxOdW1iZXJPclBlcmNlbnRSYXc+IGNv
bnN1bWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZSwgVW5p
dGxlc3NRdWlyaywgVW5pdGxlc3NaZXJvUXVpcmspCisgICAgeworICAgICAgICBpZiAoYXV0byB2
YXJpYWJsZSA9IHN5bWJvbFRhYmxlLmdldChyYW5nZS5wZWVrKCkuaWQoKSkpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAodmFyaWFibGUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAgICAgICAgICAgIGlmIChhdXRvIHZhbGlkYXRlZFZh
bHVlID0gdmFsaWRhdGVkUGVyY2VudFJhdyh2YXJpYWJsZS0+dmFsdWUsIHZhbHVlUmFuZ2UpKSB7
CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7eyAqdmFsaWRhdGVkVmFsdWUgfX07CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBJbnRUeXBlPiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyVHlwZShD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlIG1pbmltdW1WYWx1ZSwgQ1NTVmFsdWVQ
b29sJiBwb29sKQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgICAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICAgICAgICAgICAgICBpZiAoYXV0
byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZE51bWJlclJhdyh2YXJpYWJsZS0+dmFsdWUsIHZh
bHVlUmFuZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7eyAqdmFsaWRhdGVkVmFs
dWUgfX07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
c3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAg
IHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb248SW50VHlwZT4ocmFuZ2UsIG1pbmltdW1WYWx1ZSwgcG9vbCk7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CiAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4g
Y29uc3VtZUludGVnZXJUeXBlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZU51bWJlcjxJbnRUeXBlPihyYW5nZSwgbWluaW11bVZhbHVlLCBwb29sKTsKLQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IH0KK307CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKy8vIE1BUks6IC0gTWV0YSBDb25zdW1l
cnMKIAotc3RkOjpvcHRpb25hbDxpbnQ+IGNvbnN1bWVJbnRlZ2VyUmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBkb3VibGUgbWluaW11bVZhbHVlKQotewotICAgIHJldHVybiBjb25zdW1l
SW50ZWdlclR5cGVSYXc8aW50PihyYW5nZSwgbWluaW11bVZhbHVlKTsKLX0KK3RlbXBsYXRlPHR5
cGVuYW1lIENvbnN1bWVyLCB0eXBlbmFtZSA9IHZvaWQ+CitzdHJ1Y3QgVHJhbnNmb3JtQXBwbGll
ciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGRlY2x0eXBlKGF1dG8pIGFwcGx5
KFQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUgbWlu
aW11bVZhbHVlKQotewotICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGU8aW50PihyYW5nZSwg
bWluaW11bVZhbHVlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLX0KK3RlbXBsYXRlPHR5
cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IFRyYW5zZm9ybUFwcGxpZXI8Q29uc3VtZXIsIHR5cGVu
YW1lIHN0ZDo6dm9pZF90PHR5cGVuYW1lIENvbnN1bWVyOjpUcmFuc2Zvcm1lcj4+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgZGVjbHR5cGUoYXV0bykgYXBwbHkoVCB2YWx1ZSkg
eyByZXR1cm4gQ29uc3VtZXI6OlRyYW5zZm9ybWVyOjp0cmFuc2Zvcm0odmFsdWUpOyB9Cit9Owog
Ci1zdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3VtZXIsIHR5cGVu
YW1lIFQ+CitzdGF0aWMgZGVjbHR5cGUoYXV0bykgYXBwbHlUcmFuc2Zvcm0oVCB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlUmF3PHVuc2lnbmVkPihyYW5nZSwgMSk7Cisg
ICAgcmV0dXJuIFRyYW5zZm9ybUFwcGxpZXI8Q29uc3VtZXI+OjphcHBseSh2YWx1ZSk7CiB9CiAK
LVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUludGVnZXJUeXBlPHVu
c2lnbmVkPihyYW5nZSwgMSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci19CisvLyBUcmFu
c2Zvcm1lcnM6CiAKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgYXV0
byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IElk
ZW50aXR5VHJhbnNmb3JtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IFQ7CisgICAgc3RhdGljIFQg
dHJhbnNmb3JtKFQgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9Cit9OwogCi0gICAgc3dpdGNoICh0
b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBj
b25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFs
dWVSYW5nZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBQYXJlbnQsIHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lIFZhcmlhbnRUeXBlPgorc3RydWN0IFJhd1ZhcmlhbnRUcmFuc2Zvcm1lckJhc2Ug
eworICAgIHVzaW5nIFJlc3VsdCA9IFJlc3VsdFR5cGU7CiAKLSAgICBjYXNlIE51bWJlclRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51bWJl
cihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlKTsKKyAgICBzdGF0aWMgUmVzdWx0IHRyYW5zZm9ybShW
YXJpYW50VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZh
bHVlLCBbXSAoYXV0byB2YWx1ZSkgeyByZXR1cm4gUGFyZW50Ojp0cmFuc2Zvcm0odmFsdWUpOyB9
KTsKKyAgICB9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICBzdGF0aWMgdHlw
ZW5hbWUgUmVzdWx0Ojp2YWx1ZV90eXBlIHRyYW5zZm9ybSh0eXBlbmFtZSBSZXN1bHQ6OnZhbHVl
X3R5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
YXRpYyBSZXN1bHQgdHJhbnNmb3JtKHN0ZDo6b3B0aW9uYWw8VD4gdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gUGFyZW50Ojp0cmFuc2Zvcm0oKnZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OwogCi1SZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBl
ZWsoKTsKK3N0cnVjdCBBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNmb3JtZXIgOiBSYXdW
YXJpYW50VHJhbnNmb3JtZXJCYXNlPEFuZ2xlT3JOdW1iZXJSYXdUb0RlZ3Jlc3NUcmFuc2Zvcm1l
ciwgc3RkOjpvcHRpb25hbDxkb3VibGU+LCBBbmdsZU9yTnVtYmVyUmF3PiB7CisgICAgdXNpbmcg
UmF3VmFyaWFudFRyYW5zZm9ybWVyQmFzZTxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJhbnNm
b3JtZXIsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiwgQW5nbGVPck51bWJlclJhdz46OnRyYW5zZm9y
bTsKIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlckNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNX
aXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpKTsKKyAgICBzdGF0aWMgZG91YmxlIHRyYW5zZm9ybShBbmdsZVJh
dyBhbmdsZVJhdykKKyAgICB7CisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29t
cHV0ZURlZ3JlZXMoYW5nbGVSYXcudHlwZSwgYW5nbGVSYXcudmFsdWUpOworICAgIH0KIAotICAg
IGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyQ1NTUHJpbWl0
aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJlcihyYW5nZSwgeyB9LCB2YWx1
ZVJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOworICAgIHN0YXRpYyBkb3VibGUgdHJhbnNmb3JtKE51bWJlclJhdyB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTsKICAgICB9Cit9OwogCi0gICAgcmV0
dXJuIG51bGxwdHI7Ci19CitzdHJ1Y3QgTnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNm
b3JtZXIgOiBSYXdWYXJpYW50VHJhbnNmb3JtZXJCYXNlPE51bWJlck9yUGVyY2VudERpdmlkZWRC
eTEwMFRyYW5zZm9ybWVyLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4sIE51bWJlck9yUGVyY2VudFJh
dz4geworICAgIHVzaW5nIFJhd1ZhcmlhbnRUcmFuc2Zvcm1lckJhc2U8TnVtYmVyT3JQZXJjZW50
RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXIsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiwgTnVtYmVyT3JQ
ZXJjZW50UmF3Pjo6dHJhbnNmb3JtOwogCi1zdGQ6Om9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3Vt
ZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJz
ZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCi17
Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgCi0gICAgc3dpdGNoICh0b2tl
bi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25z
dW1lTGVuZ3RoUmF3V2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVS
YW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOworICAgIHN0YXRpYyBkb3VibGUgdHJhbnNmb3Jt
KE51bWJlclJhdyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTsKKyAg
ICB9CiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUxl
bmd0aFJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdl
LCBwYXJzZXJNb2RlLCB1bml0bGVzcyk7Ci0gICAgCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoKLSAg
ICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhSYXdXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFu
Z2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MpOwotCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7CisgICAgc3RhdGljIGRvdWJsZSB0cmFuc2Zvcm0oUGVyY2VudFJh
dyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSAvIDEwMC4wOwogICAg
IH0KK307CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorLy8gTUFSSzogTWV0YUNvbnN1
bWVyRGlzcGF0Y2hlcgogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQotewotICAgIGF1dG8m
IHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8Q1NTUGFyc2VyVG9rZW5UeXBlIHRva2Vu
VHlwZSwgdHlwZW5hbWUgQ29uc3VtZXIsIHR5cGVuYW1lID0gdm9pZD4KK3N0cnVjdCBNZXRhQ29u
c3VtZXJEaXNwYXRjaGVyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0
YXRpYyB0eXBlbmFtZSBDb25zdW1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBl
KCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVu
Z3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJh
bmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IE1ldGFD
b25zdW1lckRpc3BhdGNoZXI8RnVuY3Rpb25Ub2tlbiwgQ29uc3VtZXIsIHR5cGVuYW1lIHN0ZDo6
dm9pZF90PHR5cGVuYW1lIENvbnN1bWVyOjpGdW5jdGlvblRva2VuPj4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQg
Y29uc3VtZShBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHJldHVybiBhcHBseVRyYW5z
Zm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6OkZ1bmN0aW9uVG9rZW46OmNvbnN1bWUoc3RkOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7CisgICAgfQorfTsKIAotICAgIGNhc2UgRGltZW5zaW9uVG9r
ZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Ci0gICAgCi0gICAg
Y2FzZSBOdW1iZXJUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVl
UmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyPgorc3RydWN0IE1ldGFDb25zdW1lckRpc3BhdGNo
ZXI8TnVtYmVyVG9rZW4sIENvbnN1bWVyLCB0eXBlbmFtZSBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBD
b25zdW1lcjo6TnVtYmVyVG9rZW4+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
KyAgICBzdGF0aWMgdHlwZW5hbWUgQ29uc3VtZXI6OlJlc3VsdCBjb25zdW1lKEFyZ3MmJi4uLiBh
cmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGx5VHJhbnNmb3JtPENvbnN1bWVyPihDb25z
dW1lcjo6TnVtYmVyVG9rZW46OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7
CisgICAgfQorfTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwordGVtcGxhdGU8dHlw
ZW5hbWUgQ29uc3VtZXI+CitzdHJ1Y3QgTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxQZXJjZW50YWdl
VG9rZW4sIENvbnN1bWVyLCB0eXBlbmFtZSBzdGQ6OnZvaWRfdDx0eXBlbmFtZSBDb25zdW1lcjo6
UGVyY2VudGFnZVRva2VuPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAg
c3RhdGljIHR5cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4gYXJncykK
KyAgICB7CisgICAgICAgIHJldHVybiBhcHBseVRyYW5zZm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6
OlBlcmNlbnRhZ2VUb2tlbjo6Y29uc3VtZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsK
ICAgICB9Cit9OwogCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b25zdW1lcj4KK3N0cnVjdCBNZXRhQ29uc3VtZXJEaXNwYXRjaGVyPERpbWVuc2lvblRva2VuLCBD
b25zdW1lciwgdHlwZW5hbWUgc3RkOjp2b2lkX3Q8dHlwZW5hbWUgQ29uc3VtZXI6OkRpbWVuc2lv
blRva2VuPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5
cGVuYW1lIENvbnN1bWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4gYXJncykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhcHBseVRyYW5zZm9ybTxDb25zdW1lcj4oQ29uc3VtZXI6OkRpbWVuc2lv
blRva2VuOjpjb25zdW1lKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOworICAgIH0KK307
CiAKLXN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQotewotICAgIGNvbnN0IGF1dG8m
IHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29uc3VtZXI+CitzdHJ1
Y3QgTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxJZGVudFRva2VuLCBDb25zdW1lciwgdHlwZW5hbWUg
c3RkOjp2b2lkX3Q8dHlwZW5hbWUgQ29uc3VtZXI6OklkZW50VG9rZW4+PiB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgdHlwZW5hbWUgQ29uc3VtZXI6OlJlc3Vs
dCBjb25zdW1lKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGx5VHJh
bnNmb3JtPENvbnN1bWVyPihDb25zdW1lcjo6SWRlbnRUb2tlbjo6Y29uc3VtZShzdGQ6OmZvcndh
cmQ8QXJncz4oYXJncykuLi4pKTsKKyAgICB9Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBl
KCkpIHsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbnN1bWVyLCB0eXBlbmFtZS4uLiBBcmdzPgorYXV0
byBjb25zdW1lTWV0YUNvbnN1bWVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBD
U1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIENT
U1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3Na
ZXJvUXVpcmsgdW5pdGxlc3NaZXJvLCBBcmdzJiYuLi4gYXJncykgLT4gdHlwZW5hbWUgQ29uc3Vt
ZXI6OlJlc3VsdAoreworICAgIHN3aXRjaCAocmFuZ2UucGVlaygpLnR5cGUoKSkgewogICAgIGNh
c2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0aEtu
b3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSk7CisgICAgICAgIHJl
dHVybiBNZXRhQ29uc3VtZXJEaXNwYXRjaGVyPEZ1bmN0aW9uVG9rZW4sIENvbnN1bWVyPjo6Y29u
c3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNz
LCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiAKKyAgICBjYXNl
IE51bWJlclRva2VuOgorICAgICAgICByZXR1cm4gTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxOdW1i
ZXJUb2tlbiwgQ29uc3VtZXI+Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKTsKKwogICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4g
Y29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50YWdlKHJhbmdlLCB7IH0s
IHZhbHVlUmFuZ2UpOworICAgICAgICByZXR1cm4gTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxQZXJj
ZW50YWdlVG9rZW4sIENvbnN1bWVyPjo6Y29uc3VtZShyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVl
UmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHN0ZDo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLik7CiAKKyAgICBjYXNlIERpbWVuc2lvblRva2VuOgorICAgICAgICByZXR1
cm4gTWV0YUNvbnN1bWVyRGlzcGF0Y2hlcjxEaW1lbnNpb25Ub2tlbiwgQ29uc3VtZXI+Ojpjb25z
dW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKworICAgIGNhc2Ug
SWRlbnRUb2tlbjoKKyAgICAgICAgcmV0dXJuIE1ldGFDb25zdW1lckRpc3BhdGNoZXI8SWRlbnRU
b2tlbiwgQ29uc3VtZXI+Ojpjb25zdW1lKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKKyAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIHsgfTsKICAgICB9Ci0KLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCi1SZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCi17Ci0gICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50
V29ya2VyU2FmZShyYW5nZSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7
Ci19CisvLyBNQVJLOiBTYW1lVG9rZW5NZXRhQ29uc3VtZXIKIAotUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sJiBwb29sKQotewotICAgIGF1
dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOwordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXIs
IHR5cGVuYW1lIENvbnN1bWVyc1R1cGxlLCBzaXplX3QgST4KK3N0cnVjdCBTYW1lVG9rZW5NZXRh
Q29uc3VtZXJBcHBsaWVyIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0
YXRpYyB0eXBlbmFtZSBUcmFuc2Zvcm1lcjo6UmVzdWx0IGNvbnN1bWUoQXJncyYmLi4uIGFyZ3Mp
CisgICAgeworICAgICAgICB1c2luZyBTZWxlY3RlZENvbnN1bWVyID0gc3RkOjp0dXBsZV9lbGVt
ZW50X3Q8SSAtIDEsIENvbnN1bWVyc1R1cGxlPjsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0g
VHJhbnNmb3JtZXI6OnRyYW5zZm9ybShTZWxlY3RlZENvbnN1bWVyOjpjb25zdW1lKHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLikpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIFNhbWVUb2tlbk1ldGFDb25zdW1lckFwcGxpZXI8VHJhbnNmb3JtZXIsIENvbnN1
bWVyc1R1cGxlLCBJIC0gMT46OmNvbnN1bWUoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsK
KyAgICB9Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0
aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudENTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdl
LCBwb29sKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYW5zZm9ybWVyLCB0eXBlbmFtZSBDb25zdW1l
cnNUdXBsZT4KK3N0cnVjdCBTYW1lVG9rZW5NZXRhQ29uc3VtZXJBcHBsaWVyPFRyYW5zZm9ybWVy
LCBDb25zdW1lcnNUdXBsZSwgMD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgc3RhdGljIHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQgY29uc3VtZShBcmdzJiYuLi4p
CisgICAgeworICAgICAgICByZXR1cm4gdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdCB7IH07
CisgICAgfQorfTsKIAotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAgICAgICByZXR1cm4g
Y29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBl
UGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwb29sKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFRyYW5zZm9ybWVyLCB0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KK3N0cnVjdCBTYW1l
VG9rZW5NZXRhQ29uc3VtZXIgeworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpjb25qdW5jdGlvbl92
PHN0ZDo6Ym9vbF9jb25zdGFudDxUczo6dG9rZW5UeXBlID09IFQ6OnRva2VuVHlwZT4uLi4+LCAi
QWxsIENvbnN1bWVycyBwYXNzZWQgdG8gU2FtZVRva2VuTWV0YUNvbnN1bWVyIG11c3QgaGF2ZSB0
aGUgc2FtZSB0b2tlblR5cGUiKTsKKyAgICB1c2luZyBDb25zdW1lcnNUdXBsZSA9IHN0ZDo6dHVw
bGU8VCwgVHMuLi4+OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBDU1NQYXJzZXJUb2tlblR5cGUgdG9rZW5UeXBlID0gVDo6dG9rZW5UeXBlOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIHR5cGVuYW1lIFRyYW5z
Zm9ybWVyOjpSZXN1bHQgY29uc3VtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3Qg
Q1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBD
U1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNz
WmVyb1F1aXJrIHVuaXRsZXNzWmVybywgQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBB
U1NFUlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSB0b2tlblR5cGUpOworICAgICAgICByZXR1cm4g
U2FtZVRva2VuTWV0YUNvbnN1bWVyQXBwbGllcjxUcmFuc2Zvcm1lciwgQ29uc3VtZXJzVHVwbGUs
IHN0ZDo6dHVwbGVfc2l6ZV92PENvbnN1bWVyc1R1cGxlPj46OmNvbnN1bWUocmFuZ2UsIHN5bWJv
bFRhYmxlLCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogICAgIH0KK307CiAKLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KIAotc3RkOjpvcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNzWmVybykKLXsKLSAgICBh
dXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKy8vIE1BUks6IC0gQ29uc3VtZXIgZGVmaW5pdGlv
bnMuCiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tl
bjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZUZ1bmN0
aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVu
aXRsZXNzWmVybyk7CisvLyBNQVJLOiBJbnRlZ2VyCiAKLSAgICBjYXNlIERpbWVuc2lvblRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZUFuZ2xlUmF3V2l0aEtub3duVG9rZW5UeXBlRGltZW5z
aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVu
aXRsZXNzWmVybyk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRUeXBlLCBJbnRlZ2VyUmFuZ2UgaW50
ZXJnZXJSYW5nZT4KK3N0cnVjdCBJbnRlZ2VyVHlwZVJhd0NvbnN1bWVyIHsKKyAgICB1c2luZyBS
ZXN1bHQgPSBzdGQ6Om9wdGlvbmFsPEludFR5cGU+OwogCi0gICAgY2FzZSBOdW1iZXJUb2tlbjoK
LSAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZU51bWJlcihy
YW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVz
c1plcm8pOwotICAgICAgICBicmVhazsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gSW50ZWdl
clR5cGVSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI8SW50VHlwZSwgaW50ZXJnZXJS
YW5nZT47CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBJbnRlZ2VyVHlwZVJhd0tub3duVG9rZW5U
eXBlTnVtYmVyQ29uc3VtZXI8SW50VHlwZSwgaW50ZXJnZXJSYW5nZT47Cit9OwogCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQordGVtcGxhdGU8dHlwZW5hbWUgSW50VHlwZSwg
SW50ZWdlclJhbmdlIGludGVyZ2VyUmFuZ2U+CitzdHJ1Y3QgSW50ZWdlclR5cGVDb25zdW1lciB7
CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsKIAotICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci19CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IEludGVnZXJU
eXBlS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyPEludFR5cGUsIGludGVyZ2VyUmFuZ2U+
OworICAgIHVzaW5nIE51bWJlclRva2VuID0gSW50ZWdlclR5cGVLbm93blRva2VuVHlwZU51bWJl
ckNvbnN1bWVyPEludFR5cGUsIGludGVyZ2VyUmFuZ2U+OworfTsKIAotUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlck1vZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJv
UXVpcmsgdW5pdGxlc3NaZXJvKQotewotICAgIHJldHVybiBjb25zdW1lQW5nbGVXb3JrZXJTYWZl
KHJhbmdlLCBwYXJzZXJNb2RlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCB1bml0bGVzcywg
dW5pdGxlc3NaZXJvKTsKLX0KKy8vIE1BUks6IE51bWJlcgogCi1SZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJiBwb29sLCBVbml0bGVzc1F1
aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCi17Ci0gICAgYXV0
byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CitzdHJ1Y3QgTnVtYmVyUmF3Q29uc3VtZXIgeworICAg
IHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8TnVtYmVyUmF3PjsKIAotICAgIHN3aXRjaCAo
dG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4g
Y29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1
bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IHVuaXRsZXNzWmVybywgcG9vbCk7CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IE51bWJlclJh
d0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBOdW1iZXJUb2tlbiA9
IE51bWJlclJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7Cit9OwogCi0gICAgY2FzZSBE
aW1lbnNpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVBbmdsZUNTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgVmFsdWVS
YW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBwb29sKTsKK3N0
cnVjdCBOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lciA6IE51bWJlclJh
d0NvbnN1bWVyIHsKKyAgICB1c2luZyBJZGVudFRva2VuID0gTnVtYmVyUmF3S25vd25Ub2tlblR5
cGVJZGVudENvbnN1bWVyOworfTsKIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJl
dHVybiBjb25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlTnVtYmVyKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxl
c3MsIHVuaXRsZXNzWmVybywgcG9vbCk7Ci0gICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQorc3RydWN0IE51bWJlckNv
bnN1bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+Owog
Ci1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lKENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKLXsKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBl
ZWsoKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVX
aXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI7CisgICAgdXNpbmcgTnVt
YmVyVG9rZW4gPSBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5U
eXBlTnVtYmVyQ29uc3VtZXI7Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAg
ICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lVGltZUNTU1ByaW1p
dGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2
YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KSk7CisvLyBNQVJLOiBQZXJjZW50CiAKLSAgICBjYXNlIERpbWVuc2lvblRva2VuOgotICAgICAg
ICByZXR1cm4gY29uc3VtZVRpbWVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9r
ZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRs
ZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKK3N0cnVjdCBQZXJjZW50UmF3Q29uc3Vt
ZXIgeworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8UGVyY2VudFJhdz47CiAKLSAg
ICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVRpbWVDU1NQcmltaXRp
dmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCB7IH0sIHZhbHVl
UmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
KyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gUGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rp
b25Db25zdW1lcjsKKyAgICB1c2luZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJjZW50UmF3S25vd25U
b2tlblR5cGVQZXJjZW50Q29uc3VtZXI7Cit9OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQorc3RydWN0IFBlcmNlbnRS
YXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnRDb25zdW1lciA6IFBlcmNlbnRSYXdDb25zdW1lciB7
CisgICAgdXNpbmcgSWRlbnRUb2tlbiA9IFBlcmNlbnRSYXdLbm93blRva2VuVHlwZUlkZW50Q29u
c3VtZXI7Cit9OwogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVSZXNvbHV0aW9u
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIC8vIE5PVEU6IFVubGlrZSB0aGUg
b3RoZXIgdHlwZXMsIGNhbGMoKSBkb2VzIG5vdCB3b3JrIHdpdGggPHJlc29sdXRpb24+Lgorc3Ry
dWN0IFBlcmNlbnRDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPjsKIAotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIHVzaW5n
IEZ1bmN0aW9uVG9rZW4gPSBQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI7CisgICAgdXNpbmcgUGVyY2VudGFnZVRva2VuID0g
UGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50
Q29uc3VtZXI7Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIERp
bWVuc2lvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVJlc29sdXRpb25DU1NQcmltaXRp
dmVWYWx1ZVdpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKSk7Ci0gICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQor
Ly8gTUFSSzogTGVuZ3RoCiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KK3N0cnVjdCBMZW5ndGhS
YXdDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25hbDxMZW5ndGhSYXc+
OwogCi0vLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyAodG9rZW4gdHlwZSB1bmtub3du
IGJ5IGNhbGxlcikuCisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IExlbmd0aFJhd0tub3duVG9r
ZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBEaW1lbnNpb25Ub2tlbiA9IExlbmd0
aFJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI7CisgICAgdXNpbmcgTnVtYmVyVG9r
ZW4gPSBMZW5ndGhSYXdLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOworfTsKIAotc3RhdGlj
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlT3JQZXJjZW50KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2Ug
dmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5p
dGxlc3NaZXJvLCBDU1NWYWx1ZVBvb2wmIHBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
KQotewotICAgIGF1dG8mIHRva2VuID0gcmFuZ2UucGVlaygpOworc3RydWN0IExlbmd0aENvbnN1
bWVyIHsKKyAgICB1c2luZyBSZXN1bHQgPSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+OwogCi0g
ICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9rZW46Ci0gICAg
ICAgIGlmIChhdXRvIHZhbHVlID0gY29uc3VtZUFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNl
ck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1plcm8sIHBvb2wpKQotICAgICAgICAgICAgcmV0dXJu
IHZhbHVlOwotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdp
dGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwg
cG9vbCk7CisgICAgdXNpbmcgRnVuY3Rpb25Ub2tlbiA9IExlbmd0aENTU1ByaW1pdGl2ZVZhbHVl
V2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOworICAgIHVzaW5nIE51
bWJlclRva2VuID0gTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZU51bWJlckNvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gTGVuZ3RoQ1NT
UHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVy
OworfTsKIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1l
QW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9u
KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVzc1pl
cm8sIHBvb2wpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0gICAgICAgIHJldHVybiBj
b25zdW1lQW5nbGVDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlTnVt
YmVyKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCB1bml0bGVz
c1plcm8sIHBvb2wpOworLy8gTUFSSzogQW5nbGUKIAotICAgIGNhc2UgUGVyY2VudGFnZVRva2Vu
OgotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxj
V2l0aEtub3duVG9rZW5UeXBlUGVyY2VudGFnZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwb29s
KTsKLSAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CitzdHJ1Y3QgQW5n
bGVSYXdDb25zdW1lciB7CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjpvcHRpb25hbDxBbmdsZVJh
dz47CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0g
QW5nbGVSYXdLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI7CisgICAgdXNpbmcgTnVtYmVy
VG9rZW4gPSBBbmdsZVJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7CisgICAgdXNpbmcg
RGltZW5zaW9uVG9rZW4gPSBBbmdsZVJhd0tub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI7
Cit9OwogCi1zdGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9y
UGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJz
ZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCi17
Ci0gICAgYXV0byBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXcgPSBbXShhdXRvIHJlc3VsdCkg
LT4gc3RkOjpvcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IHsKLSAgICAgICAgaWYgKHJlc3Vs
dCkKLSAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLSAgICB9Oworc3RydWN0IEFuZ2xlQ29uc3VtZXIgeworICAgIHVzaW5nIFJlc3Vs
dCA9IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47CiAKLSAgICBhdXRvJiB0b2tlbiA9IHJhbmdl
LnBlZWsoKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gQW5nbGVDU1NQcmltaXRpdmVWYWx1
ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcjsKKyAgICB1c2luZyBO
dW1iZXJUb2tlbiA9IEFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZU51bWJlckNvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gQW5nbGVDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRGltZW5zaW9uQ29uc3VtZXI7
Cit9OwogCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsKLSAgICBjYXNlIEZ1bmN0aW9uVG9r
ZW46IHsKLSAgICAgICAgaWYgKGF1dG8gbGVuZ3RoID0gY29uc3VtZUxlbmd0aFJhd1dpdGhLbm93
blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVu
aXRsZXNzKSkKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGhPclBlcmNlbnRSYXco
bGVuZ3RoKTsKLSAgICAgICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCi0gICAgICAg
ICAgICByZXR1cm4gY29udmVydFRvTGVuZ3RoT3JQZXJjZW50UmF3KHBlcmNlbnQpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisvLyBNQVJLOiBUaW1lCiAKLSAgICBjYXNlIERpbWVuc2lvblRva2Vu
OgotICAgICAgICByZXR1cm4gY29udmVydFRvTGVuZ3RoT3JQZXJjZW50UmF3KGNvbnN1bWVMZW5n
dGhSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwg
cGFyc2VyTW9kZSwgdW5pdGxlc3MpKTsKLSAgICAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAg
ICAgICByZXR1cm4gY29udmVydFRvTGVuZ3RoT3JQZXJjZW50UmF3KGNvbnN1bWVMZW5ndGhSYXdX
aXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9k
ZSwgdW5pdGxlc3MpKTsKK3N0cnVjdCBUaW1lQ29uc3VtZXIgeworICAgIHVzaW5nIFJlc3VsdCA9
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT47CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoK
LSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0xlbmd0aE9yUGVyY2VudFJhdyhjb25zdW1lUGVyY2Vu
dFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkp
OworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2Fs
Y1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uQ29uc3VtZXI7CisgICAgdXNpbmcgTnVtYmVyVG9r
ZW4gPSBUaW1lQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZU51bWJl
ckNvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gVGltZUNTU1ByaW1pdGl2ZVZh
bHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKK307CiAKLSAg
ICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisvLyBNQVJLOiBSZXNvbHV0aW9uCiAK
LSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorc3RydWN0IFJlc29sdXRpb25Db25zdW1lciB7
CisgICAgdXNpbmcgUmVzdWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsKIAotUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRh
Z2UpCi17Ci0gICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgLy8gTk9URTogVW5s
aWtlIHRoZSBvdGhlciB0eXBlcywgY2FsYygpIGRvZXMgbm90IHdvcmsgd2l0aCA8cmVzb2x1dGlv
bj4uCisgICAgdXNpbmcgRGltZW5zaW9uVG9rZW4gPSBSZXNvbHV0aW9uQ1NTUHJpbWl0aXZlVmFs
dWVXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKK307CiAKLSAgICBzd2l0Y2gg
KHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjogewotICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHRoaXMgYmUgdXNpbmcgdHJ5aW5nIHRvIGdlbmVyYXRlIHRoZSBjYWxjIHdp
dGggYm90aCBMZW5ndGggYW5kIFBlcmNlbnQgZGVzdGluYXRpb24gY2F0ZWdvcnkgdHlwZXM/Ci0g
ICAgICAgIENhbGNQYXJzZXIgcGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5n
dGgsIHZhbHVlUmFuZ2UsIHsgfSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwgYWxsb3dzTmVn
YXRpdmVQZXJjZW50YWdlKTsKLSAgICAgICAgaWYgKGF1dG8gY2FsY3VsYXRpb24gPSBwYXJzZXIu
dmFsdWUoKTsgY2FsY3VsYXRpb24gJiYgY2FuQ29uc3VtZUNhbGNWYWx1ZShjYWxjdWxhdGlvbi0+
Y2F0ZWdvcnkoKSwgcGFyc2VyTW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VyLmNvbnN1
bWVWYWx1ZSgpOwotICAgICAgICBicmVhazsKLSAgICB9CisvLyBNQVJLOiAtIENvbWJpbmF0aW9u
IGNvbnN1bWVyIGRlZmluaXRpb25zLgogCi0gICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKLSAgICAg
ICAgcmV0dXJuIGNvbnN1bWVMZW5ndGhDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3du
VG9rZW5UeXBlRGltZW5zaW9uKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVu
aXRsZXNzLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKLSAgICAKLSAgICBjYXNlIE51bWJl
clRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aENTU1ByaW1pdGl2ZVZhbHVlV2l0
aENhbGNXaXRoS25vd25Ub2tlblR5cGVOdW1iZXIocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFy
c2VyTW9kZSwgdW5pdGxlc3MsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworLy8gTUFSSzog
QW5nbGUgKyBQZXJjZW50CiAKLSAgICBjYXNlIFBlcmNlbnRhZ2VUb2tlbjoKLSAgICAgICAgcmV0
dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKSk7CitzdHJ1Y3QgQW5nbGVPclBlcmNlbnRDb25zdW1lciB7CisgICAgdXNpbmcgUmVz
dWx0ID0gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPjsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGJyZWFrOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBTYW1lVG9rZW5NZXRhQ29uc3VtZXI8
CisgICAgICAgIElkZW50aXR5VHJhbnNmb3JtZXI8UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPj4s
CisgICAgICAgIEFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlw
ZUZ1bmN0aW9uQ29uc3VtZXIsCisgICAgICAgIFBlcmNlbnRDU1NQcmltaXRpdmVWYWx1ZVdpdGhD
YWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcgorICAgID47CisgICAgdXNpbmcg
TnVtYmVyVG9rZW4gPSBBbmdsZUNTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tl
blR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICB1c2luZyBQZXJjZW50YWdlVG9rZW4gPSBQZXJjZW50
Q1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRDb25zdW1l
cjsKKyAgICB1c2luZyBEaW1lbnNpb25Ub2tlbiA9IEFuZ2xlQ1NTUHJpbWl0aXZlVmFsdWVXaXRo
Q2FsY1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbkNvbnN1bWVyOworfTsKKworLy8gTUFSSzog
TGVuZ3RoICsgUGVyY2VudAorCitzdHJ1Y3QgTGVuZ3RoT3JQZXJjZW50UmF3VHJhbnNmb3JtZXIg
eworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PjsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGVu
Z3RoT3JQZXJjZW50UmF3PiB0cmFuc2Zvcm0oVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7ICp2YWx1ZSB9OworICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgIH0KIAotICAgIHJldHVybiBudWxscHRyOwotfQorICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gdHJhbnNmb3JtKHN0ZDo6b3B0aW9uYWw8
TGVuZ3RoT3JQZXJjZW50UmF3PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsK
KyAgICB9Cit9OwogCi0vLyBNQVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyB0aGF0IGFsbG93
IGxvb2t1cCBpbiB0aGUgc3ltYm9sIHRhYmxlIGZvciBJZGVudFRva2VucyAoYnkgZGVmYXVsdCwg
b3RoZXIgY29uc3VtZXJzIG9ubHkgbG9va3VwIGluIHRoZSBzeW1ib2wgdGFibGUgZm9yIGNhbGMo
KSkuCitzdHJ1Y3QgTGVuZ3RoT3JQZXJjZW50UmF3Q29uc3VtZXIgeworICAgIHVzaW5nIFJlc3Vs
dCA9IHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PjsKKyAgICB1c2luZyBUcmFuc2Zv
cm1lciA9IExlbmd0aE9yUGVyY2VudFJhd1RyYW5zZm9ybWVyOwogCi1zdGF0aWMgc3RkOjpvcHRp
b25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkKLXsKLSAgICBhdXRv
JiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB1c2luZyBGdW5jdGlvblRva2VuID0gU2FtZVRv
a2VuTWV0YUNvbnN1bWVyPAorICAgICAgICBMZW5ndGhPclBlcmNlbnRSYXdUcmFuc2Zvcm1lciwK
KyAgICAgICAgUGVyY2VudFJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lciwKKyAgICAg
ICAgTGVuZ3RoUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyCisgICAgPjsKKyAgICB1
c2luZyBOdW1iZXJUb2tlbiA9IExlbmd0aFJhd0tub3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI7
CisgICAgdXNpbmcgUGVyY2VudGFnZVRva2VuID0gUGVyY2VudFJhd0tub3duVG9rZW5UeXBlUGVy
Y2VudENvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gTGVuZ3RoUmF3S25vd25U
b2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjsKK307CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5cGUo
KSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1i
ZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVl
UmFuZ2UpOworLy8gTUFSSzogQW5nbGUgKyBOdW1iZXIKIAotICAgIGNhc2UgTnVtYmVyVG9rZW46
Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVy
KHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
c3RydWN0IEFuZ2xlT3JOdW1iZXJSYXdDb25zdW1lciB7CisgICAgdXNpbmcgVHJhbnNmb3JtZXIg
PSBUOworICAgIHVzaW5nIFJlc3VsdCA9IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQ7CiAK
LSAgICBjYXNlIElkZW50VG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0
aEtub3duVG9rZW5UeXBlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKKyAg
ICB1c2luZyBGdW5jdGlvblRva2VuID0gU2FtZVRva2VuTWV0YUNvbnN1bWVyPAorICAgICAgICBU
cmFuc2Zvcm1lciwKKyAgICAgICAgTnVtYmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1
bWVyLAorICAgICAgICBBbmdsZVJhd0tub3duVG9rZW5UeXBlRnVuY3Rpb25Db25zdW1lcgorICAg
ID47CisgICAgdXNpbmcgTnVtYmVyVG9rZW4gPSBOdW1iZXJSYXdLbm93blRva2VuVHlwZU51bWJl
ckNvbnN1bWVyOworICAgIHVzaW5nIERpbWVuc2lvblRva2VuID0gQW5nbGVSYXdLbm93blRva2Vu
VHlwZURpbWVuc2lvbkNvbnN1bWVyOworfTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQW5nbGVPck51bWJlclJhd0Fs
bG93aW5nU3ltYm9sVGFibGVJZGVudENvbnN1bWVyIDogQW5nbGVPck51bWJlclJhd0NvbnN1bWVy
PFQ+IHsKKyAgICB1c2luZyBJZGVudFRva2VuID0gQW5nbGVPck51bWJlclJhd0tub3duVG9rZW5U
eXBlSWRlbnRDb25zdW1lcjsKK307CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQorLy8g
TUFSSzogTnVtYmVyICsgUGVyY2VudAogCi1zdGF0aWMgc3RkOjpvcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVQZXJjZW50QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpCi17Ci0gICAgYXV0byYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IE51bWJlck9yUGVyY2VudFJh
d0NvbnN1bWVyIHsKKyAgICB1c2luZyBUcmFuc2Zvcm1lciA9IFQ7CisgICAgdXNpbmcgUmVzdWx0
ID0gdHlwZW5hbWUgVHJhbnNmb3JtZXI6OlJlc3VsdDsKIAotICAgIHN3aXRjaCAodG9rZW4udHlw
ZSgpKSB7Ci0gICAgY2FzZSBGdW5jdGlvblRva2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZVBl
cmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZh
bHVlUmFuZ2UpOworICAgIHVzaW5nIEZ1bmN0aW9uVG9rZW4gPSBTYW1lVG9rZW5NZXRhQ29uc3Vt
ZXI8CisgICAgICAgIFRyYW5zZm9ybWVyLAorICAgICAgICBQZXJjZW50UmF3S25vd25Ub2tlblR5
cGVGdW5jdGlvbkNvbnN1bWVyLAorICAgICAgICBOdW1iZXJSYXdLbm93blRva2VuVHlwZUZ1bmN0
aW9uQ29uc3VtZXIKKyAgICA+OworICAgIHVzaW5nIE51bWJlclRva2VuID0gTnVtYmVyUmF3S25v
d25Ub2tlblR5cGVOdW1iZXJDb25zdW1lcjsKKyAgICB1c2luZyBQZXJjZW50YWdlVG9rZW4gPSBQ
ZXJjZW50UmF3S25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3VtZXI7Cit9OwogCi0gICAgY2FzZSBQ
ZXJjZW50YWdlVG9rZW46Ci0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93
blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKIAot
ICAgIGNhc2UgSWRlbnRUb2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50UmF3V2l0
aEtub3duVG9rZW5UeXBlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgTnVtYmVyT3JQZXJjZW50UmF3QWxsb3dpbmdTeW1i
b2xUYWJsZUlkZW50Q29uc3VtZXIgOiBOdW1iZXJPclBlcmNlbnRSYXdDb25zdW1lcjxUPiB7Cisg
ICAgdXNpbmcgSWRlbnRUb2tlbiA9IE51bWJlck9yUGVyY2VudFJhd0tub3duVG9rZW5UeXBlSWRl
bnRDb25zdW1lcjsKK307CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CiAK
LSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworLy8gTUFSSzogLSBDb25zdW1lciBmdW5jdGlvbnMg
LSB1dGlsaXplIGNvbnN1bWVyIGRlZmluaXRpb25zIGFib3ZlLCBnaXZpbmcgbW9yZSB0YXJnZXR0
ZWQgaW50ZXJmYWNlcyBhbmQgYWxsb3dpbmcgZXhwb3N1cmUgdG8gb3RoZXIgZmlsZXMuCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlcmdlclJhbmdlPiBzdGQ6
Om9wdGlvbmFsPEludFR5cGU+IGNvbnN1bWVJbnRlZ2VyVHlwZVJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxJbnRlZ2VyVHlw
ZVJhd0NvbnN1bWVyPEludFR5cGUsIGludGVyZ2VyUmFuZ2U+PihyYW5nZSwgeyB9LCBWYWx1ZVJh
bmdlOjpBbGwsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6
OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7CiB9CiAKLXN0YXRpYyBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSkKK3RlbXBsYXRlPHR5cGVuYW1l
IEludFR5cGUsIEludGVnZXJSYW5nZSBpbnRlcmdlclJhbmdlPiBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVJbnRlZ2VyVHlwZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
VmFsdWVQb29sJiBwb29sKQogewotICAgIGF1dG8gY29tcHV0ZURlZ3JlZXMgPSBbXShhdXRvIGFu
Z2xlUmF3KSAtPiBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gewotICAgICAgICBpZiAoYW5nbGVSYXcp
Ci0gICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFu
Z2xlUmF3LT50eXBlLCBhbmdsZVJhdy0+dmFsdWUpOwotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotICAgIH07CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8SW50ZWdlclR5cGVD
b25zdW1lcjxJbnRUeXBlLCBpbnRlcmdlclJhbmdlPj4ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6
QWxsLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3Ji
aWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIHBvb2wpOworfQogCi0gICAgYXV0byYgdG9r
ZW4gPSByYW5nZS5wZWVrKCk7CitzdGQ6Om9wdGlvbmFsPGludD4gY29uc3VtZUludGVnZXJSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdzxpbnQsIEludGVnZXJSYW5nZTo6QWxsPihyYW5nZSk7Cit9CiAKLSAgICBzd2l0Y2gg
KHRva2VuLnR5cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgaWYgKGF1
dG8gYW5nbGVSYXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihy
YW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZv
cmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpCi0gICAgICAgICAgICByZXR1cm4gY29t
cHV0ZURlZ3JlZXMoYW5nbGVSYXcpOwotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dp
dGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7Ci0g
ICAgCi0gICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVEZWdy
ZWVzKGNvbnN1bWVBbmdsZVJhd1dpdGhLbm93blRva2VuVHlwZURpbWVuc2lvbihyYW5nZSwgeyB9
LCBWYWx1ZVJhbmdlOjpBbGwsIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5p
dGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpOwotICAgIAotICAgIGNhc2UgTnVtYmVyVG9rZW46Ci0g
ICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJh
bmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBj
b25zdW1lSW50ZWdlclR5cGU8aW50LCBJbnRlZ2VyUmFuZ2U6OkFsbD4ocmFuZ2UsIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkpOworfQogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQorc3RkOjpvcHRpb25hbDxpbnQ+IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXJSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2Vy
VHlwZVJhdzxpbnQsIEludGVnZXJSYW5nZTo6WmVyb0FuZEdyZWF0ZXI+KHJhbmdlKTsKK30KIAot
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7Cisg
ICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyVHlwZTxpbnQsIEludGVnZXJSYW5nZTo6WmVyb0FuZEdy
ZWF0ZXI+KHJhbmdlLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKIH0KIAotc3RhdGljIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lQW5nbGVSYXdPck51bWJlclJhd0FsbG93aW5nU3lt
Ym9sVGFibGVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlKQorc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gY29uc3VtZVBvc2l0aXZlSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKIHsKLSAgICBhdXRvIGNvbXB1dGVEZWdyZWVzID0gW10oYXV0byBhbmds
ZVJhdykgLT4gc3RkOjpvcHRpb25hbDxkb3VibGU+IHsKLSAgICAgICAgaWYgKGFuZ2xlUmF3KQot
ICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmds
ZVJhdy0+dHlwZSwgYW5nbGVSYXctPnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLSAgICB9OworICAgIHJldHVybiBjb25zdW1lSW50ZWdlclR5cGVSYXc8dW5zaWduZWQsIElu
dGVnZXJSYW5nZTo6T25lQW5kR3JlYXRlcj4ocmFuZ2UpOworfQogCi0gICAgYXV0byYgdG9rZW4g
PSByYW5nZS5wZWVrKCk7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2
ZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1
bWVJbnRlZ2VyVHlwZTx1bnNpZ25lZCwgSW50ZWdlclJhbmdlOjpPbmVBbmRHcmVhdGVyPihyYW5n
ZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7Cit9CiAKLSAgICBzd2l0Y2ggKHRva2VuLnR5
cGUoKSkgewotICAgIGNhc2UgRnVuY3Rpb25Ub2tlbjoKLSAgICAgICAgaWYgKGF1dG8gYW5nbGVS
YXcgPSBjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3lt
Ym9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9y
YmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKSkKLSAgICAgICAgICAgIHJldHVybiBjb21w
dXRlRGVncmVlcyhhbmdsZVJhdyk7Ci0gICAgICAgIHJldHVybiBjb25zdW1lTnVtYmVyUmF3V2l0
aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlOjpB
bGwpOwotICAgIAotICAgIGNhc2UgRGltZW5zaW9uVG9rZW46Ci0gICAgICAgIHJldHVybiBjb21w
dXRlRGVncmVlcyhjb25zdW1lQW5nbGVSYXdXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb24ocmFu
Z2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3Ji
aWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpKTsKLSAgICAKLSAgICBjYXNlIE51bWJlclRv
a2VuOgotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlwZU51
bWJlcihyYW5nZSwgeyB9LCBWYWx1ZVJhbmdlOjpBbGwpOworc3RkOjpvcHRpb25hbDxOdW1iZXJS
YXc+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxOdW1iZXJS
YXdDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0
YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9y
YmlkKTsKK30KIAotICAgIGNhc2UgSWRlbnRUb2tlbjoKLSAgICAgICAgaWYgKGF1dG8gdmFyaWFi
bGUgPSBzeW1ib2xUYWJsZS5nZXQodG9rZW4uaWQoKSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
dmFyaWFibGUtPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6
Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgotICAgICAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVFVSTjoKLSAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURl
Z3JlZXModmFyaWFibGUtPnR5cGUsIHZhcmlhYmxlLT52YWx1ZSk7CitzdGF0aWMgc3RkOjpvcHRp
b25hbDxOdW1iZXJSYXc+IGNvbnN1bWVOdW1iZXJBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGNvbnN0IENTU0NhbGNTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCkKK3sKKyAgICBy
ZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRl
bnRDb25zdW1lcj4ocmFuZ2UsIHN5bWJvbFRhYmxlLCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2Rl
OjpIVE1MU3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1
aXJrOjpGb3JiaWQpOworfQogCi0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSOgotICAgICAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLT52YWx1ZTsKK1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFs
dWVSYW5nZSB2YWx1ZVJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPE51
bWJlckNvbnN1bWVyPihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBDU1NQYXJzZXJNb2RlOjpIVE1M
U3RhbmRhcmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpG
b3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworfQogCi0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOworc3RkOjpvcHRpb25hbDxQZXJjZW50UmF3PiBjb25zdW1lUGVyY2VudFJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQorewor
ICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPFBlcmNlbnRSYXdDb25zdW1lcj4ocmFuZ2Us
IHsgfSwgdmFsdWVSYW5nZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxl
c3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKK30KIAotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFBlcmNl
bnRSYXc+IGNvbnN1bWVQZXJjZW50QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpCit7CisgICAgcmV0dXJuIGNv
bnN1bWVNZXRhQ29uc3VtZXI8UGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudENvbnN1
bWVyPihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxT
dGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZv
cmJpZCk7Cit9CiAKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVS
YW5nZSB2YWx1ZVJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lUGVyY2VudFdvcmtlclNhZmUo
cmFuZ2UsIHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogfQogCi0vLyBN
QVJLOiAtIENvbWJpbmF0aW9uIGNvbnN1bWVycyB3aXRoIHRyYW5zZm9ybWF0aW9ucyBiYXNlZCBv
biByZXN1bHQgdHlwZS4KK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnRX
b3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFu
Z2UsIENTU1ZhbHVlUG9vbCYgcG9vbCkKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1l
cjxQZXJjZW50Q29uc3VtZXI+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6
OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVp
cms6OkZvcmJpZCwgcG9vbCk7Cit9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE51bWJlclRyYW5zZm9y
bWVyLCB0eXBlbmFtZSBQZXJjZW50VHJhbnNmb3JtZXI+Ci1zdGF0aWMgYXV0byBjb25zdW1lTnVt
YmVyUmF3T3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIE51bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbnNmb3JtZXIsIFBlcmNl
bnRUcmFuc2Zvcm1lciYmIHBlcmNlbnRUcmFuc2Zvcm1lcikgLT4gc3RkOjpvcHRpb25hbDxkZWNs
dHlwZShudW1iZXJUcmFuc2Zvcm1lcihzdGQ6OmRlY2x2YWw8ZG91YmxlPigpKSk+CitzdGQ6Om9w
dGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVu
aXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7Ci0gICAgY29uc3QgYXV0byYgdG9rZW4gPSByYW5nZS5w
ZWVrKCk7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8TGVuZ3RoUmF3Q29uc3VtZXI+
KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1pl
cm9RdWlyazo6Rm9yYmlkKTsKK30KIAotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAg
Y2FzZSBGdW5jdGlvblRva2VuOiB7Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVO
dW1iZXJSYXdXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgeyB9LCB2YWx1ZVJhbmdl
KSkKLSAgICAgICAgICAgIHJldHVybiBudW1iZXJUcmFuc2Zvcm1lcigqbnVtYmVyKTsKLSAgICAg
ICAgaWYgKGF1dG8gcGVyY2VudCA9IGNvbnN1bWVQZXJjZW50UmF3V2l0aEtub3duVG9rZW5UeXBl
RnVuY3Rpb24ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gcGVy
Y2VudFRyYW5zZm9ybWVyKCpwZXJjZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5p
dGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxM
ZW5ndGhDb25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxl
c3MsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkp
OworfQogCi0gICAgY2FzZSBQZXJjZW50YWdlVG9rZW46Ci0gICAgICAgIGlmIChhdXRvIHBlcmNl
bnQgPSBjb25zdW1lUGVyY2VudFJhd1dpdGhLbm93blRva2VuVHlwZVBlcmNlbnRhZ2UocmFuZ2Us
IHsgfSwgdmFsdWVSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gcGVyY2VudFRyYW5zZm9ybWVy
KCpwZXJjZW50KTsKLSAgICAgICAgYnJlYWs7CitzdGQ6Om9wdGlvbmFsPEFuZ2xlUmF3PiBjb25z
dW1lQW5nbGVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgVW5pdGxlc3NaZXJvUXVpcmsgdW5pdGxl
c3NaZXJvKQoreworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPEFuZ2xlUmF3Q29uc3Vt
ZXI+KHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVu
aXRsZXNzWmVybyk7Cit9CiAKLSAgICBjYXNlIE51bWJlclRva2VuOgotICAgICAgICBpZiAoYXV0
byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdl
LCB7IH0sIHZhbHVlUmFuZ2UpKQotICAgICAgICAgICAgcmV0dXJuIG51bWJlclRyYW5zZm9ybWVy
KCpudW1iZXIpOwotICAgICAgICBicmVhazsKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUFuZ2xlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNl
ck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIFVuaXRsZXNzWmVyb1F1aXJrIHVuaXRsZXNz
WmVybykKK3sKKyAgICByZXR1cm4gY29uc3VtZUFuZ2xlV29ya2VyU2FmZShyYW5nZSwgcGFyc2Vy
TW9kZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSwgdW5pdGxlc3MsIHVuaXRsZXNzWmVybyk7
Cit9CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CitSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZVdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgQ1NTVmFsdWVQb29sJiBwb29sLCBVbml0
bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyayB1bml0bGVzc1plcm8pCit7Cisg
ICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8QW5nbGVDb25zdW1lcj4ocmFuZ2UsIHsgfSwg
VmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgdW5pdGxlc3NaZXJvLCBwb29s
KTsKK30KIAotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVUaW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2Rl
IHBhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVz
cykKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxUaW1lQ29uc3VtZXI+KHJhbmdl
LCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWly
azo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKIH0KIAotc3RhdGljIHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1
ZVJhbmdlOjpBbGwpCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVSZXNvbHV0aW9u
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBjb25zdW1lTnVtYmVy
UmF3T3JQZXJjZW50UmF3KHJhbmdlLCB2YWx1ZVJhbmdlLCBbXShkb3VibGUgbnVtYmVyKSB7IHJl
dHVybiBudW1iZXI7IH0sIFtdKGRvdWJsZSBwZXJjZW50KSB7IHJldHVybiBwZXJjZW50IC8gMTAw
LjA7IH0pOworICAgIHJldHVybiBjb25zdW1lTWV0YUNvbnN1bWVyPFJlc29sdXRpb25Db25zdW1l
cj4ocmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBDU1NQYXJzZXJNb2RlOjpIVE1MU3RhbmRh
cmRNb2RlLCBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQs
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwogfQogCi0vLyBNQVJLOiAtIENvbWJpbmF0aW9u
IGNvbnN1bWVycyB0aGF0IGJvdGggYWxsb3cgbG9va3VwIGluIHRoZSBzeW1ib2wgdGFibGUgZm9y
IElkZW50VG9rZW5zIGFuZCB0cmFuc2Zvcm1hdGlvbnMgYmFzZWQgb24gcmVzdWx0IHR5cGUuCitz
dGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGVPclBlcmNlbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgcGFyc2VyTW9kZSwgVmFsdWVS
YW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWly
ayB1bml0bGVzc1plcm8sIENTU1ZhbHVlUG9vbCYgcG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkpCit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8QW5nbGVPclBlcmNlbnRD
b25zdW1lcj4ocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIHVu
aXRsZXNzWmVybywgcG9vbCk7Cit9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIE51bWJlclRyYW5zZm9y
bWVyLCB0eXBlbmFtZSBQZXJjZW50VHJhbnNmb3JtZXI+Ci1zdGF0aWMgYXV0byBjb25zdW1lTnVt
YmVyUmF3T3JQZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIE51bWJlclRyYW5zZm9ybWVyJiYgbnVtYmVyVHJhbnNmb3JtZXIs
IFBlcmNlbnRUcmFuc2Zvcm1lciYmIHBlcmNlbnRUcmFuc2Zvcm1lcikgLT4gc3RkOjpvcHRpb25h
bDxkZWNsdHlwZShudW1iZXJUcmFuc2Zvcm1lcihzdGQ6OmRlY2x2YWw8ZG91YmxlPigpKSk+Citz
dGQ6Om9wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7CisgICAgcmV0
dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8TGVuZ3RoT3JQZXJjZW50UmF3Q29uc3VtZXI+KHJhbmdl
LCB7IH0sIHZhbHVlUmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWly
azo6Rm9yYmlkKTsKK30KKworLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIHdpdGggdGhlIGN1
cnJlbnQgc2NoZW1lIGR1ZSB0byB0aGUgTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5IHBhcmFtZXRl
cgorUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgTmVnYXRpdmVQZXJjZW50YWdl
UG9saWN5IG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSkKK3sKICAgICBhdXRvJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKIAogICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CiAgICAgY2FzZSBGdW5j
dGlvblRva2VuOiB7Ci0gICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXdX
aXRoS25vd25Ub2tlblR5cGVGdW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2Up
KQotICAgICAgICAgICAgcmV0dXJuIG51bWJlclRyYW5zZm9ybWVyKCpudW1iZXIpOwotICAgICAg
ICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5cGVG
dW5jdGlvbihyYW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UpKQotICAgICAgICAgICAgcmV0
dXJuIHBlcmNlbnRUcmFuc2Zvcm1lcigqcGVyY2VudCk7CisgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgdGhpcyBiZSB1c2luZyB0cnlpbmcgdG8gZ2VuZXJhdGUgdGhlIGNhbGMgd2l0aCBib3RoIExl
bmd0aCBhbmQgUGVyY2VudCBkZXN0aW5hdGlvbiBjYXRlZ29yeSB0eXBlcz8KKyAgICAgICAgQ2Fs
Y1BhcnNlciBwYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVS
YW5nZSwgeyB9LCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQ
b2xpY3kpOworICAgICAgICBpZiAoYXV0byBjYWxjdWxhdGlvbiA9IHBhcnNlci52YWx1ZSgpOyBj
YWxjdWxhdGlvbiAmJiBjYW5Db25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgp
LCBwYXJzZXJNb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXIuY29uc3VtZVZhbHVlKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgotICAg
ICAgICBpZiAoYXV0byBwZXJjZW50ID0gY29uc3VtZVBlcmNlbnRSYXdXaXRoS25vd25Ub2tlblR5
cGVQZXJjZW50YWdlKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkpCi0gICAgICAgICAg
ICByZXR1cm4gcGVyY2VudFRyYW5zZm9ybWVyKCpwZXJjZW50KTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBEaW1lbnNpb25Ub2tlbjoKKyAgICAgICAgcmV0dXJuIExlbmd0aENTU1ByaW1pdGl2
ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVEaW1lbnNpb25Db25zdW1lcjo6Y29uc3Vt
ZShyYW5nZSwgeyB9LCB2YWx1ZVJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAKICAgICBjYXNl
IE51bWJlclRva2VuOgotICAgICAgICBpZiAoYXV0byBudW1iZXIgPSBjb25zdW1lTnVtYmVyUmF3
V2l0aEtub3duVG9rZW5UeXBlTnVtYmVyKHJhbmdlLCBzeW1ib2xUYWJsZSwgdmFsdWVSYW5nZSkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVtYmVyVHJhbnNmb3JtZXIoKm51bWJlcik7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gTGVuZ3RoQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dp
dGhLbm93blRva2VuVHlwZU51bWJlckNvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCB7IH0sIHZhbHVl
UmFuZ2UsIHBhcnNlck1vZGUsIHVuaXRsZXNzLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsKIAotICAgIGNhc2UgSWRlbnRUb2tlbjoKLSAgICAg
ICAgaWYgKGF1dG8gdmFyaWFibGUgPSBzeW1ib2xUYWJsZS5nZXQocmFuZ2UucGVlaygpLmlkKCkp
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT50eXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKLSAgICAgICAgICAgICAgICBpZiAoYXV0
byB2YWxpZGF0ZWRWYWx1ZSA9IHZhbGlkYXRlZFBlcmNlbnRSYXcodmFyaWFibGUtPnZhbHVlLCB2
YWx1ZVJhbmdlKSkgewotICAgICAgICAgICAgICAgICAgICByYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGVyY2VudFRyYW5zZm9y
bWVyKCp2YWxpZGF0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgorICAgICAgICByZXR1cm4gUGVyY2Vu
dENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVQZXJjZW50Q29uc3Vt
ZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3Ms
IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOwog
Ci0gICAgICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOgotICAgICAgICAgICAg
ICAgIGlmIChhdXRvIHZhbGlkYXRlZFZhbHVlID0gdmFsaWRhdGVkTnVtYmVyUmF3KHZhcmlhYmxl
LT52YWx1ZSwgdmFsdWVSYW5nZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJl
clRyYW5zZm9ybWVyKCp2YWxpZGF0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCiAgICAg
ZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3QWxsb3dpbmdTeW1ib2xU
YWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1NDYWxjU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUcmFuc2Zvcm1lcj4KK3N0YXRpYyBhdXRvIGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpIC0+IHR5
cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQKIHsKLSAgICByZXR1cm4gY29uc3VtZU51bWJlclJh
d09yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUs
IHZhbHVlUmFuZ2UsIFtdKGRvdWJsZSBudW1iZXIpIHsgcmV0dXJuIG51bWJlcjsgfSwgW10oZG91
YmxlIHBlcmNlbnQpIHsgcmV0dXJuIHBlcmNlbnQgLyAxMDAuMDsgfSk7CisgICAgcmV0dXJuIGNv
bnN1bWVNZXRhQ29uc3VtZXI8QW5nbGVPck51bWJlclJhd0NvbnN1bWVyPFRyYW5zZm9ybWVyPj4o
cmFuZ2UsIHsgfSwgVmFsdWVSYW5nZTo6QWxsLCBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrOjpG
b3JiaWQsIFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUcmFuc2Zvcm1lcj4KK3N0YXRpYyBhdXRvIGNvbnN1bWVBbmdsZU9yTnVtYmVyUmF3QWxsb3dp
bmdTeW1ib2xUYWJsZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBjb25zdCBDU1ND
YWxjU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUpIC0+
IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpSZXN1bHQKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFD
b25zdW1lcjxBbmdsZU9yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3VtZXI8
VHJhbnNmb3JtZXI+PihyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCwgcGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHJhbnNmb3JtZXI+CitzdGF0aWMgYXV0byBjb25zdW1l
TnVtYmVyT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpIC0+IHR5cGVuYW1lIFRyYW5zZm9ybWVyOjpS
ZXN1bHQKK3sKKyAgICByZXR1cm4gY29uc3VtZU1ldGFDb25zdW1lcjxOdW1iZXJPclBlcmNlbnRS
YXdDb25zdW1lcjxUcmFuc2Zvcm1lcj4+KHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNl
ck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3Na
ZXJvUXVpcms6OkZvcmJpZCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRyYW5zZm9ybWVyPgor
c3RhdGljIGF1dG8gY29uc3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJ
ZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlKSAtPiB0eXBlbmFtZSBUcmFuc2Zv
cm1lcjo6UmVzdWx0Cit7CisgICAgcmV0dXJuIGNvbnN1bWVNZXRhQ29uc3VtZXI8TnVtYmVyT3JQ
ZXJjZW50UmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50Q29uc3VtZXI8VHJhbnNmb3JtZXI+Pihy
YW5nZSwgc3ltYm9sVGFibGUsIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFy
ZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCk7
Cit9CisKKy8vIEZJWE1FOiBUaGlzIG5lZWRzIGEgbW9yZSBjbGVhciBuYW1lIHRvIGluZGljYXRl
IGl0cyBiZWhhdmlvciBvZiBkaXZpZGluZyBwZXJjZW50cyBieSAxMDAgb25seSBpZiBhbiBleHBs
aWNpdCBwZXJjZW50IHRva2VuLCBub3QgaWYgYSByZXN1bHQgb2YgYSBjYWxjKCkuCiBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXJPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKICAgICBhdXRvJiB0b2tlbiA9
IHJhbmdlLnBlZWsoKTsKIAogICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CiAgICAgY2FzZSBG
dW5jdGlvblRva2VuOgotICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGNvbnN1bWVOdW1iZXJDU1NQ
cmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtub3duVG9rZW5UeXBlRnVuY3Rpb24ocmFuZ2UsIHsg
fSwgdmFsdWVSYW5nZSwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSkpCisgICAgICAgIGlmIChh
dXRvIHZhbHVlID0gTnVtYmVyQ1NTUHJpbWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2Vu
VHlwZUZ1bmN0aW9uQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5nZSwgQ1NT
UGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0
bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVQZXJjZW50Q1NTUHJp
bWl0aXZlVmFsdWVXaXRoQ2FsY1dpdGhLbm93blRva2VuVHlwZUZ1bmN0aW9uKHJhbmdlLCB7IH0s
IHZhbHVlUmFuZ2UsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4g
UGVyY2VudENTU1ByaW1pdGl2ZVZhbHVlV2l0aENhbGNXaXRoS25vd25Ub2tlblR5cGVGdW5jdGlv
bkNvbnN1bWVyOjpjb25zdW1lKHJhbmdlLCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6
OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVp
cms6OkZvcmJpZCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKSk7CiAKICAgICBjYXNlIE51bWJl
clRva2VuOgotICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOiB7Ci0gICAgICAgIGF1dG8gdmFsdWUg
PSBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KHJhbmdlLCB2YWx1ZVJh
bmdlKTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoKnZhbHVlLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJF
Uik7CisgICAgICAgIHJldHVybiBOdW1iZXJDU1NQcmltaXRpdmVWYWx1ZVdpdGhDYWxjV2l0aEtu
b3duVG9rZW5UeXBlTnVtYmVyQ29uc3VtZXI6OmNvbnN1bWUocmFuZ2UsIHsgfSwgdmFsdWVSYW5n
ZSwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlk
LCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKTsK
KworICAgIGNhc2UgUGVyY2VudGFnZVRva2VuOgorICAgICAgICBpZiAoYXV0byBwZXJjZW50UmF3
ID0gUGVyY2VudFJhd0tub3duVG9rZW5UeXBlUGVyY2VudENvbnN1bWVyOjpjb25zdW1lKHJhbmdl
LCB7IH0sIHZhbHVlUmFuZ2UsIENTU1BhcnNlck1vZGU6OkhUTUxTdGFuZGFyZE1vZGUsIFVuaXRs
ZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3NaZXJvUXVpcms6OkZvcmJpZCkpCisgICAgICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50UmF3
LT52YWx1ZSAvIDEwMC4wLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGJyZWFr
OwotICAgIH0KKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEyODIs
NiArMTM5Niw4IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlck9yUGVy
Y2VudChDU1NQYQogICAgIHJldHVybiBudWxscHRyOwogfQogCisvLyBNQVJLOiAtIE5vbi1wcmlt
aXRpdmUgY29uc3VtZXJzLgorCiBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWln
aHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgLy8gVmFsdWVz
IGxlc3MgdGhhbiBvciBlcXVhbCB0byAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMDAw
IGFyZSBwYXJzZSBlcnJvcnMuCkBAIC0xMjk3LDE0ICsxNDEzLDE0IEBAIHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYQogICAgIHN3aXRjaCAodG9r
ZW4udHlwZSgpKSB7CiAgICAgY2FzZSBGdW5jdGlvblRva2VuOiB7CiAgICAgICAgIC8vICJbRm9y
IGNhbGMoKV0sIHRoZSB1c2VkIHZhbHVlIHJlc3VsdGluZyBmcm9tIGFuIGV4cHJlc3Npb24gbXVz
dCBiZSBjbGFtcGVkIHRvIHRoZSByYW5nZSBhbGxvd2VkIGluIHRoZSB0YXJnZXQgY29udGV4dC4i
Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZU51bWJlclJhd1dpdGhLbm93blRva2VuVHlw
ZUZ1bmN0aW9uKHJhbmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCk7CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gTnVtYmVyUmF3S25vd25Ub2tlblR5cGVGdW5jdGlvbkNvbnN1bWVyOjpjb25zdW1lKHJh
bmdlLCB7IH0sIFZhbHVlUmFuZ2U6OkFsbCwgQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9k
ZSwgVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKICAg
ICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICBicmVhazsKICNpZiAhRU5BQkxFKFZBUklB
VElPTl9GT05UUykKLSAgICAgICAgaWYgKCEoKnJlc3VsdCA+IDAgJiYgKnJlc3VsdCA8IDEwMDAp
IHx8ICFpc0ludGVnZXJBbmREaXZpc2libGVCeTEwMCgqcmVzdWx0KSkKKyAgICAgICAgaWYgKCEo
cmVzdWx0LT52YWx1ZSA+IDAgJiYgcmVzdWx0LT52YWx1ZSA8IDEwMDApIHx8ICFpc0ludGVnZXJB
bmREaXZpc2libGVCeTEwMChyZXN1bHQtPnZhbHVlKSkKICAgICAgICAgICAgIGJyZWFrOwogI2Vu
ZGlmCi0gICAgICAgIHJldHVybiBzdGQ6OmNsYW1wKCpyZXN1bHQsIHN0ZDo6bmV4dGFmdGVyKDAu
MCwgMS4wKSwgc3RkOjpuZXh0YWZ0ZXIoMTAwMC4wLCAwLjApKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6Y2xhbXAocmVzdWx0LT52YWx1ZSwgc3RkOjpuZXh0YWZ0ZXIoMC4wLCAxLjApLCBzdGQ6Om5l
eHRhZnRlcigxMDAwLjAsIDAuMCkpOwogICAgIH0KIAogICAgIGNhc2UgTnVtYmVyVG9rZW46IHsK
QEAgLTE0NTIsNyArMTU2OCw3IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3Vt
ZU9wdGlvbmFsQWxwaGEoQ1NTUAogICAgIGlmICghY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVz
cGFjZShyYW5nZSkpCiAgICAgICAgIHJldHVybiAxLjA7CiAKLSAgICBpZiAoYXV0byBhbHBoYVBh
cmFtZXRlciA9IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcocmFuZ2Up
KQorICAgIGlmIChhdXRvIGFscGhhUGFyYW1ldGVyID0gY29uc3VtZU51bWJlck9yUGVyY2VudFJh
dzxOdW1iZXJPclBlcmNlbnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lcj4ocmFuZ2UpKQogICAgICAg
ICByZXR1cm4gc3RkOjpjbGFtcCgqYWxwaGFQYXJhbWV0ZXIsIDAuMCwgMS4wKTsKIAogICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CkBAIC0xNDYzLDI1ICsxNTc5LDM5IEBAIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZU9wdGlvbmFsQWxwaGFBbGxvdwogICAgIGlmICghY29uc3Vt
ZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpCiAgICAgICAgIHJldHVybiAxLjA7CiAK
LSAgICBpZiAoYXV0byBhbHBoYVBhcmFtZXRlciA9IGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnRE
aXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQocmFuZ2UsIHN5bWJvbFRhYmxl
LCBWYWx1ZVJhbmdlOjpBbGwpKQorICAgIGlmIChhdXRvIGFscGhhUGFyYW1ldGVyID0gY29uc3Vt
ZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudDxOdW1iZXJPclBlcmNl
bnREaXZpZGVkQnkxMDBUcmFuc2Zvcm1lcj4ocmFuZ2UsIHN5bWJvbFRhYmxlLCBWYWx1ZVJhbmdl
OjpBbGwpKQogICAgICAgICByZXR1cm4gc3RkOjpjbGFtcCgqYWxwaGFQYXJhbWV0ZXIsIDAuMCwg
MS4wKTsKIAogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyB1aW50OF90IG5v
cm1hbGl6ZVJHQkNvbXBvbmVudE51bWJlcihkb3VibGUgdmFsdWUpCitzdGF0aWMgdWludDhfdCBu
b3JtYWxpemVSR0JDb21wb25lbnROdW1iZXIoTnVtYmVyUmF3IHZhbHVlKQogewotICAgIHJldHVy
biBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9hdFRvU1JHQkFCeXRlKHZhbHVlKTsKKyAgICByZXR1
cm4gY29udmVydFByZXNjYWxlZFNSR0JBRmxvYXRUb1NSR0JBQnl0ZSh2YWx1ZS52YWx1ZSk7CiB9
CiAKLXN0YXRpYyB1aW50OF90IG5vcm1hbGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UoZG91Ymxl
IHZhbHVlKQorc3RhdGljIHVpbnQ4X3Qgbm9ybWFsaXplUkdCQ29tcG9uZW50UGVyY2VudGFnZShQ
ZXJjZW50UmF3IHZhbHVlKQogewotICAgIHJldHVybiBjb252ZXJ0UHJlc2NhbGVkU1JHQkFGbG9h
dFRvU1JHQkFCeXRlKHZhbHVlIC8gMTAwLjAgKiAyNTUuMCk7CisgICAgcmV0dXJuIGNvbnZlcnRQ
cmVzY2FsZWRTUkdCQUZsb2F0VG9TUkdCQUJ5dGUodmFsdWUudmFsdWUgLyAxMDAuMCAqIDI1NS4w
KTsKIH0KIAorc3RydWN0IFJHQk5vcm1hbGl6aW5nVHJhbnNmb3JtZXIgOiBSYXdWYXJpYW50VHJh
bnNmb3JtZXJCYXNlPFJHQk5vcm1hbGl6aW5nVHJhbnNmb3JtZXIsIHN0ZDo6b3B0aW9uYWw8dWlu
dDhfdD4sIE51bWJlck9yUGVyY2VudFJhdz4geworICAgIHVzaW5nIFJhd1ZhcmlhbnRUcmFuc2Zv
cm1lckJhc2U8UkdCTm9ybWFsaXppbmdUcmFuc2Zvcm1lciwgc3RkOjpvcHRpb25hbDx1aW50OF90
PiwgTnVtYmVyT3JQZXJjZW50UmF3Pjo6dHJhbnNmb3JtOworCisgICAgc3RhdGljIHVpbnQ4X3Qg
dHJhbnNmb3JtKE51bWJlclJhdyB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub3JtYWxp
emVSR0JDb21wb25lbnROdW1iZXIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyB1aW50OF90
IHRyYW5zZm9ybShQZXJjZW50UmF3IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vcm1h
bGl6ZVJHQkNvbXBvbmVudFBlcmNlbnRhZ2UodmFsdWUpOworICAgIH0KK307CisKIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPHVpbnQ4X3Q+IGNvbnN1bWVSZWxhdGl2ZVJHQkNvbXBvbmVudChDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgY29uc3QgQ1NTQ2FsY1N5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSkKIHsKLSAgICByZXR1cm4gY29uc3VtZU51bWJlclJhd09yUGVyY2VudFJhd0FsbG93aW5nU3lt
Ym9sVGFibGVJZGVudChyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCwgbm9ybWFs
aXplUkdCQ29tcG9uZW50TnVtYmVyLCBub3JtYWxpemVSR0JDb21wb25lbnRQZXJjZW50YWdlKTsK
KyAgICByZXR1cm4gY29uc3VtZU51bWJlck9yUGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJ
ZGVudDxSR0JOb3JtYWxpemluZ1RyYW5zZm9ybWVyPihyYW5nZSwgc3ltYm9sVGFibGUsIFZhbHVl
UmFuZ2U6OkFsbCk7CiB9CiAKIGVudW0gY2xhc3MgUkdCQ29tcG9uZW50VHlwZSB7IE51bWJlciwg
UGVyY2VudGFnZSB9OwpAQCAtMTQ4OSw5ICsxNjE5LDkgQEAgc3RhdGljIHVpbnQ4X3QgY2xhbXBS
R0JDb21wb25lbnQoZG91YmxlIHZhbHVlLCBSR0JDb21wCiB7CiAgICAgc3dpdGNoIChjb21wb25l
bnRUeXBlKSB7CiAgICAgY2FzZSBSR0JDb21wb25lbnRUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHJl
dHVybiBub3JtYWxpemVSR0JDb21wb25lbnROdW1iZXIodmFsdWUpOworICAgICAgICByZXR1cm4g
bm9ybWFsaXplUkdCQ29tcG9uZW50TnVtYmVyKHsgdmFsdWUgfSk7CiAgICAgY2FzZSBSR0JDb21w
b25lbnRUeXBlOjpQZXJjZW50YWdlOgotICAgICAgICByZXR1cm4gbm9ybWFsaXplUkdCQ29tcG9u
ZW50UGVyY2VudGFnZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiBub3JtYWxpemVSR0JDb21wb25l
bnRQZXJjZW50YWdlKHsgdmFsdWUgfSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMTUxOSw3ICsxNjQ5LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91Ymxl
PiBjb25zdW1lUkdCT3JIU0xPcHRpb25hbEFsCiAgICAgaWYgKCFjb25zdW1lUkdCT3JIU0xBbHBo
YVNlcGFyYXRvcihhcmdzLCBzeW50YXgpKQogICAgICAgICByZXR1cm4gMS4wOwogCi0gICAgcmV0
dXJuIGNvbnN1bWVOdW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CisgICAg
cmV0dXJuIGNvbnN1bWVOdW1iZXJPclBlcmNlbnRSYXc8TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5
MTAwVHJhbnNmb3JtZXI+KGFyZ3MpOwogfQogCiBzdGF0aWMgQ29sb3IgcGFyc2VSZWxhdGl2ZVJH
QlBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgYXJncywgY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYgY29udGV4dCkKQEAgLTE1NzMsMTggKzE3MDMsMjIgQEAgc3RhdGljIENvbG9yIHBhcnNl
Tm9uUmVsYXRpdmVSR0JQYXJhbWV0ZXJzKENTU1BhcnNlclRvCiAKICAgICBhdXRvIGNvbnN1bWVJ
bml0aWFsQ29tcG9uZW50ID0gW10oYXV0byYgYXJncykgLT4gc3RkOjpvcHRpb25hbDxJbml0aWFs
Q29tcG9uZW50PiB7CiAgICAgICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXco
YXJncykpCi0gICAgICAgICAgICByZXR1cm4geyB7ICpudW1iZXIsIFJHQkNvbXBvbmVudFR5cGU6
Ok51bWJlciB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7IG51bWJlci0+dmFsdWUsIFJHQkNv
bXBvbmVudFR5cGU6Ok51bWJlciB9IH07CiAgICAgICAgIGlmIChhdXRvIHBlcmNlbnQgPSBjb25z
dW1lUGVyY2VudFJhdyhhcmdzKSkKLSAgICAgICAgICAgIHJldHVybiB7IHsgKnBlcmNlbnQsIFJH
QkNvbXBvbmVudFR5cGU6OlBlcmNlbnRhZ2UgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBw
ZXJjZW50LT52YWx1ZSwgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZSB9IH07CiAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgfTsKIAotICAgIGF1dG8gY29uc3VtZUNvbXBvbmVu
dCA9IFtdKGF1dG8mIGFyZ3MsIGF1dG8gY29tcG9uZW50VHlwZSkgeworICAgIGF1dG8gY29uc3Vt
ZUNvbXBvbmVudCA9IFtdKGF1dG8mIGFyZ3MsIGF1dG8gY29tcG9uZW50VHlwZSkgLT4gc3RkOjpv
cHRpb25hbDxkb3VibGU+IHsKICAgICAgICAgc3dpdGNoIChjb21wb25lbnRUeXBlKSB7CiAgICAg
ICAgIGNhc2UgUkdCQ29tcG9uZW50VHlwZTo6UGVyY2VudGFnZToKLSAgICAgICAgICAgIHJldHVy
biBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHBlcmNlbnQg
PSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGVyY2Vu
dC0+dmFsdWU7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICBjYXNl
IFJHQkNvbXBvbmVudFR5cGU6Ok51bWJlcjoKLSAgICAgICAgICAgIHJldHVybiBjb25zdW1lTnVt
YmVyUmF3KGFyZ3MpOworICAgICAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gY29uc3VtZU51bWJl
clJhdyhhcmdzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyLT52YWx1ZTsKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9OwpAQCAtMTY2OCw3ICsxODAyLDcgQEAgc3RhdGlj
IENvbG9yIHBhcnNlUmVsYXRpdmVIU0xQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAgICAgICAg
IHsgQ1NTVmFsdWVBbHBoYSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFLCBvcmlnaW5Db2xv
ckFzSFNMLmFscGhhICogMTAwLjAgfQogICAgIH07CiAKLSAgICBhdXRvIGh1ZSA9IGNvbnN1bWVB
bmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRh
YmxlLCBjb250ZXh0Lm1vZGUpOworICAgIGF1dG8gaHVlID0gY29uc3VtZUFuZ2xlT3JOdW1iZXJS
YXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQ8QW5nbGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5z
Zm9ybWVyPihhcmdzLCBzeW1ib2xUYWJsZSwgY29udGV4dC5tb2RlKTsKICAgICBpZiAoIWh1ZSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTY4NywxMiArMTgyMSwxMiBAQCBzdGF0aWMgQ29s
b3IgcGFyc2VSZWxhdGl2ZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW4KICAgICBpZiAoIWFy
Z3MuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBjb2xvckJ5Tm9y
bWFsaXppbmdIU0xDb21wb25lbnRzKCpodWUsICpzYXR1cmF0aW9uLCAqbGlnaHRuZXNzLCAqYWxw
aGEpOworICAgIHJldHVybiBjb2xvckJ5Tm9ybWFsaXppbmdIU0xDb21wb25lbnRzKCpodWUsIHNh
dHVyYXRpb24tPnZhbHVlLCBsaWdodG5lc3MtPnZhbHVlLCAqYWxwaGEpOwogfQogCiBzdGF0aWMg
Q29sb3IgcGFyc2VOb25SZWxhdGl2ZUhTTFBhcmFtZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
YXJncywgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBhdXRvIGh1ZSA9
IGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3KGFyZ3MsIGNvbnRleHQubW9kZSk7CisgICAgYXV0
byBodWUgPSBjb25zdW1lQW5nbGVPck51bWJlclJhdzxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNz
VHJhbnNmb3JtZXI+KGFyZ3MsIGNvbnRleHQubW9kZSk7CiAgICAgaWYgKCFodWUpCiAgICAgICAg
IHJldHVybiB7IH07CiAKQEAgLTE3MTYsNyArMTg1MCw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZU5v
blJlbGF0aXZlSFNMUGFyYW1ldGVycyhDU1NQYXJzZXJUbwogICAgIGlmICghYXJncy5hdEVuZCgp
KQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIGNvbG9yQnlOb3JtYWxpemluZ0hT
TENvbXBvbmVudHMoKmh1ZSwgKnNhdHVyYXRpb24sICpsaWdodG5lc3MsICphbHBoYSk7CisgICAg
cmV0dXJuIGNvbG9yQnlOb3JtYWxpemluZ0hTTENvbXBvbmVudHMoKmh1ZSwgc2F0dXJhdGlvbi0+
dmFsdWUsIGxpZ2h0bmVzcy0+dmFsdWUsICphbHBoYSk7CiB9CiAKIGVudW0gY2xhc3MgSFNMRnVu
Y3Rpb25Nb2RlIHsgSFNMLCBIU0xBIH07CkBAIC0xNzU3LDcgKzE4OTEsNyBAQCBzdGF0aWMgQ29s
b3IgcGFyc2VIV0JQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuUmFuZ2UmIGEKICAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IG5vcm1hbGl6ZUh1ZSgqaHVlKTsK
LSAgICBhdXRvIFtub3JtYWxpemVkV2hpdG5lc3MsIG5vcm1hbGl6ZWRCbGFja25lc3NdID0gbm9y
bWFsaXplV2hpdGVuZXNzQmxhY2tuZXNzKCp3aGl0ZW5lc3MsICpibGFja25lc3MpOworICAgIGF1
dG8gW25vcm1hbGl6ZWRXaGl0bmVzcywgbm9ybWFsaXplZEJsYWNrbmVzc10gPSBub3JtYWxpemVX
aGl0ZW5lc3NCbGFja25lc3Mod2hpdGVuZXNzLT52YWx1ZSwgYmxhY2tuZXNzLT52YWx1ZSk7CiAK
ICAgICAvLyBOT1RFOiBUaGUgZXhwbGljaXQgY29udmVyc2lvbiB0byBTUkdCQTx1aW50OF90PiBp
cyBpbnRlbnRpb25hbCBmb3IgcGVyZm9ybWFuY2UgKG5vIGV4dHJhIGFsbG9jYXRpb24gZm9yCiAg
ICAgLy8gdGhlIGV4dGVuZGVkIGNvbG9yKSBhbmQgY29tcGF0YWJpbGl0eSwgZm9yY2luZyBzZXJp
YWxpYXphdGlvbiB0byB1c2UgdGhlIHJnYigpL3JnYmEoKSBmb3JtLgpAQCAtMTc4Miw3ICsxOTE2
LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKENTU1BhcnNlclRv
a2VuCiAgICAgICAgIHsgQ1NTVmFsdWVBbHBoYSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdF
LCBvcmlnaW5Db2xvckFzSFdCLmFscGhhICogMTAwLjAgfQogICAgIH07CiAKLSAgICBhdXRvIGh1
ZUNvbnN1bWVyID0gWyZzeW1ib2xUYWJsZSwgJmNvbnRleHRdKGF1dG8mIGFyZ3MpIHsgcmV0dXJu
IGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3Ms
IHN5bWJvbFRhYmxlLCBjb250ZXh0Lm1vZGUpOyB9OworICAgIGF1dG8gaHVlQ29uc3VtZXIgPSBb
JnN5bWJvbFRhYmxlLCAmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFuZ2xl
T3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQ8QW5nbGVPck51bWJlclJhd1RvRGVn
cmVzc1RyYW5zZm9ybWVyPihhcmdzLCBzeW1ib2xUYWJsZSwgY29udGV4dC5tb2RlKTsgfTsKICAg
ICBhdXRvIHdoaXRlbmVzc0FuZEJsYWNrbmVzc0NvbnN1bWVyID0gWyZzeW1ib2xUYWJsZV0oYXV0
byYgYXJncykgeyByZXR1cm4gY29uc3VtZVBlcmNlbnRBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQo
YXJncywgc3ltYm9sVGFibGUpOyB9OwogICAgIGF1dG8gYWxwaGFDb25zdW1lciA9IFsmc3ltYm9s
VGFibGVdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVPcHRpb25hbEFscGhhQWxsb3dpbmdT
eW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsgfTsKIApAQCAtMTc5MSw3ICsxOTI1
LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVIV0JQYXJhbWV0ZXJzKENTU1BhcnNlclRv
a2VuCiAKIHN0YXRpYyBDb2xvciBwYXJzZU5vblJlbGF0aXZlSFdCUGFyYW1ldGVycyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiBhcmdzLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewot
ICAgIGF1dG8gaHVlQ29uc3VtZXIgPSBbJmNvbnRleHRdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNv
bnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3KGFyZ3MsIGNvbnRleHQubW9kZSk7IH07CisgICAgYXV0
byBodWVDb25zdW1lciA9IFsmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZUFu
Z2xlT3JOdW1iZXJSYXc8QW5nbGVPck51bWJlclJhd1RvRGVncmVzc1RyYW5zZm9ybWVyPihhcmdz
LCBjb250ZXh0Lm1vZGUpOyB9OwogICAgIGF1dG8gd2hpdGVuZXNzQW5kQmxhY2tuZXNzQ29uc3Vt
ZXIgPSBbXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1lUGVyY2VudFJhdyhhcmdzKTsgfTsK
ICAgICBhdXRvIGFscGhhQ29uc3VtZXIgPSBbXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1l
T3B0aW9uYWxBbHBoYShhcmdzKTsgfTsKIApAQCAtMTgzNCw5ICsxOTY4LDkgQEAgc3RhdGljIENv
bG9yIHBhcnNlTGFiUGFyYW1ldGVycyhDU1NQYXJzZXJUb2tlblJhbmdlJiBhCiAgICAgaWYgKCFh
cmdzLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBhdXRvIG5vcm1hbGl6ZWRM
aWdodG5lc3MgPSBzdGQ6Om1heCgwLjAsICpsaWdodG5lc3MpOworICAgIGF1dG8gbm9ybWFsaXpl
ZExpZ2h0bmVzcyA9IHN0ZDo6bWF4KDAuMCwgbGlnaHRuZXNzLT52YWx1ZSk7CiAKLSAgICByZXR1
cm4gQ29sb3JUeXBlIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRMaWdodG5lc3MpLCBz
dGF0aWNfY2FzdDxmbG9hdD4oKmFWYWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PigqYlZhbHVlKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfTsKKyAgICByZXR1cm4gQ29sb3JUeXBlIHsgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRMaWdodG5lc3MpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
YVZhbHVlLT52YWx1ZSksIHN0YXRpY19jYXN0PGZsb2F0PihiVmFsdWUtPnZhbHVlKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KCphbHBoYSkgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PgpAQCAtMTkxMiw4ICsyMDQ2LDggQEAgc3RhdGljIENvbG9yIHBhcnNlTENIUGFyYW1ldGVycyhD
U1NQYXJzZXJUb2tlblJhbmdlJiBhCiAgICAgaWYgKCFhcmdzLmF0RW5kKCkpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBhdXRvIG5vcm1hbGl6ZWRMaWdodG5lc3MgPSBzdGQ6Om1heCgwLjAs
ICpsaWdodG5lc3MpOwotICAgIGF1dG8gbm9ybWFsaXplZENocm9tYSA9IHN0ZDo6bWF4KDAuMCwg
KmNocm9tYSk7CisgICAgYXV0byBub3JtYWxpemVkTGlnaHRuZXNzID0gc3RkOjptYXgoMC4wLCBs
aWdodG5lc3MtPnZhbHVlKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRDaHJvbWEgPSBzdGQ6Om1heCgw
LjAsIGNocm9tYS0+dmFsdWUpOwogICAgIGF1dG8gbm9ybWFsaXplZEh1ZSA9IG5vcm1hbGl6ZUh1
ZSgqaHVlKTsKIAogICAgIHJldHVybiBDb2xvclR5cGUgeyBzdGF0aWNfY2FzdDxmbG9hdD4obm9y
bWFsaXplZExpZ2h0bmVzcyksIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxpemVkQ2hyb21hKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbGl6ZWRIdWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oKmFs
cGhhKSB9OwpAQCAtMTk0MCw3ICsyMDc0LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlUmVsYXRpdmVM
Q0hQYXJhbWV0ZXJzKENTU1BhcnNlclRva2VuCiAKICAgICBhdXRvIGxpZ2h0bmVzc0NvbnN1bWVy
ID0gWyZzeW1ib2xUYWJsZV0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZVBlcmNlbnRBbGxv
d2luZ1N5bWJvbFRhYmxlSWRlbnQoYXJncywgc3ltYm9sVGFibGUpOyB9OwogICAgIGF1dG8gY2hy
b21hQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1l
TnVtYmVyQWxsb3dpbmdTeW1ib2xUYWJsZUlkZW50KGFyZ3MsIHN5bWJvbFRhYmxlKTsgfTsKLSAg
ICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZzeW1ib2xUYWJsZSwgJmNvbnRleHRdKGF1dG8mIGFyZ3Mp
IHsgcmV0dXJuIGNvbnN1bWVBbmdsZVJhd09yTnVtYmVyUmF3QWxsb3dpbmdTeW1ib2xUYWJsZUlk
ZW50KGFyZ3MsIHN5bWJvbFRhYmxlLCBjb250ZXh0Lm1vZGUpOyB9OworICAgIGF1dG8gaHVlQ29u
c3VtZXIgPSBbJnN5bWJvbFRhYmxlLCAmY29udGV4dF0oYXV0byYgYXJncykgeyByZXR1cm4gY29u
c3VtZUFuZ2xlT3JOdW1iZXJSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQ8QW5nbGVPck51bWJl
clJhd1RvRGVncmVzc1RyYW5zZm9ybWVyPihhcmdzLCBzeW1ib2xUYWJsZSwgY29udGV4dC5tb2Rl
KTsgfTsKICAgICBhdXRvIGFscGhhQ29uc3VtZXIgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdz
KSB7IHJldHVybiBjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFibGVJZGVudChh
cmdzLCBzeW1ib2xUYWJsZSk7IH07CiAKICAgICByZXR1cm4gcGFyc2VMQ0hQYXJhbWV0ZXJzPENv
bG9yVHlwZT4oYXJncywgV1RGTW92ZShsaWdodG5lc3NDb25zdW1lciksIFdURk1vdmUoY2hyb21h
Q29uc3VtZXIpLCBXVEZNb3ZlKGh1ZUNvbnN1bWVyKSwgV1RGTW92ZShhbHBoYUNvbnN1bWVyKSk7
CkBAIC0xOTUxLDcgKzIwODUsNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VOb25SZWxhdGl2ZUxDSFBh
cmFtZXRlcnMoQ1NTUGFyc2VyVG8KIHsKICAgICBhdXRvIGxpZ2h0bmVzc0NvbnN1bWVyID0gW10o
YXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZVBlcmNlbnRSYXcoYXJncyk7IH07CiAgICAgYXV0
byBjaHJvbWFDb25zdW1lciA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJS
YXcoYXJncyk7IH07Ci0gICAgYXV0byBodWVDb25zdW1lciA9IFsmY29udGV4dF0oYXV0byYgYXJn
cykgeyByZXR1cm4gY29uc3VtZUFuZ2xlUmF3T3JOdW1iZXJSYXcoYXJncywgY29udGV4dC5tb2Rl
KTsgfTsKKyAgICBhdXRvIGh1ZUNvbnN1bWVyID0gWyZjb250ZXh0XShhdXRvJiBhcmdzKSB7IHJl
dHVybiBjb25zdW1lQW5nbGVPck51bWJlclJhdzxBbmdsZU9yTnVtYmVyUmF3VG9EZWdyZXNzVHJh
bnNmb3JtZXI+KGFyZ3MsIGNvbnRleHQubW9kZSk7IH07CiAgICAgYXV0byBhbHBoYUNvbnN1bWVy
ID0gW10oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU9wdGlvbmFsQWxwaGEoYXJncyk7IH07
CiAKICAgICByZXR1cm4gcGFyc2VMQ0hQYXJhbWV0ZXJzPENvbG9yVHlwZT4oYXJncywgV1RGTW92
ZShsaWdodG5lc3NDb25zdW1lciksIFdURk1vdmUoY2hyb21hQ29uc3VtZXIpLCBXVEZNb3ZlKGh1
ZUNvbnN1bWVyKSwgV1RGTW92ZShhbHBoYUNvbnN1bWVyKSk7CkBAIC0yMDE2LDcgKzIxNTAsNyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xvclR5cGU+IHN0YXRpYyBDb2xvciBwYXJzZVJlbGF0aXYK
ICAgICAgICAgeyBDU1NWYWx1ZUFscGhhLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UsIG9y
aWdpbkNvbG9yQXNDb2xvclR5cGUuYWxwaGEgKiAxMDAuMCB9CiAgICAgfTsKIAotICAgIGF1dG8g
Y29uc3VtZVJHQiA9IFsmc3ltYm9sVGFibGVdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVO
dW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXdBbGxvd2luZ1N5bWJvbFRhYmxlSWRlbnQo
YXJncywgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCk7IH07CisgICAgYXV0byBjb25zdW1l
UkdCID0gWyZzeW1ib2xUYWJsZV0oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU51bWJlck9y
UGVyY2VudFJhd0FsbG93aW5nU3ltYm9sVGFibGVJZGVudDxOdW1iZXJPclBlcmNlbnREaXZpZGVk
QnkxMDBUcmFuc2Zvcm1lcj4oYXJncywgc3ltYm9sVGFibGUsIFZhbHVlUmFuZ2U6OkFsbCk7IH07
CiAgICAgYXV0byBjb25zdW1lQWxwaGEgPSBbJnN5bWJvbFRhYmxlXShhdXRvJiBhcmdzKSB7IHJl
dHVybiBjb25zdW1lT3B0aW9uYWxBbHBoYUFsbG93aW5nU3ltYm9sVGFibGVJZGVudChhcmdzLCBz
eW1ib2xUYWJsZSk7IH07CiAKICAgICByZXR1cm4gcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdCVHlw
ZXM8Q29sb3JUeXBlPihhcmdzLCBXVEZNb3ZlKGNvbnN1bWVSR0IpLCBXVEZNb3ZlKGNvbnN1bWVB
bHBoYSkpOwpAQCAtMjAzMiw3ICsyMTY2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sb3JUeXBl
PiBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckZ1CiAKICAgICBjb25zdW1lSWRlbnRSYXcoYXJncyk7
CiAKLSAgICBhdXRvIGNvbnN1bWVSR0IgPSBbXShhdXRvJiBhcmdzKSB7IHJldHVybiBjb25zdW1l
TnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOyB9OworICAgIGF1dG8gY29u
c3VtZVJHQiA9IFtdKGF1dG8mIGFyZ3MpIHsgcmV0dXJuIGNvbnN1bWVOdW1iZXJPclBlcmNlbnRS
YXc8TnVtYmVyT3JQZXJjZW50RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXI+KGFyZ3MpOyB9OwogICAg
IGF1dG8gY29uc3VtZUFscGhhID0gW10oYXV0byYgYXJncykgeyByZXR1cm4gY29uc3VtZU9wdGlv
bmFsQWxwaGEoYXJncyk7IH07CiAKICAgICByZXR1cm4gcGFyc2VDb2xvckZ1bmN0aW9uRm9yUkdC
VHlwZXM8Q29sb3JUeXBlPihhcmdzLCBXVEZNb3ZlKGNvbnN1bWVSR0IpLCBXVEZNb3ZlKGNvbnN1
bWVBbHBoYSkpOwpAQCAtMjA0Niw3ICsyMTgwLDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JG
dW5jdGlvbkZvclhZWlR5cGVzKENTU1BhcnNlclRvCiAgICAgICAgIGF1dG8gdmFsdWUgPSB4eXpD
b25zdW1lcihhcmdzKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjaGFubmVsID0gKnZhbHVlOworICAgICAgICBjaGFubmVsID0gdmFsdWUtPnZhbHVl
OwogICAgIH0KIAogICAgIGF1dG8gYWxwaGEgPSBhbHBoYUNvbnN1bWVyKGFyZ3MpOwpAQCAtMjI0
NCwxMyArMjM3OCwxMyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvckNvbnRyYXN0RnVuY3Rpb25Q
YXJhbWV0ZXJzKENTU1AKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChjb25zdW1lZFRv
KSB7Ci0gICAgICAgIGF1dG8gdGFyZ2V0Q29udHJhc3QgPSBbJl0gKCkgLT4gc3RkOjpvcHRpb25h
bDxkb3VibGU+IHsKKyAgICAgICAgYXV0byB0YXJnZXRDb250cmFzdCA9IFsmXSAoKSAtPiBzdGQ6
Om9wdGlvbmFsPE51bWJlclJhdz4gewogICAgICAgICAgICAgaWYgKGFyZ3MucGVlaygpLnR5cGUo
KSA9PSBJZGVudFRva2VuKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6
OnBhaXI8Q1NTVmFsdWVJRCwgZG91YmxlPiB0YXJnZXRDb250cmFzdE1hcHBpbmdzW10gewotICAg
ICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUEsIDQuNSB9LAotICAgICAgICAgICAgICAgICAg
ICB7IENTU1ZhbHVlQUFMYXJnZSwgMy4wIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgQ1NTVmFs
dWVBQUEsIDcuMCB9LAotICAgICAgICAgICAgICAgICAgICB7IENTU1ZhbHVlQUFBTGFyZ2UsIDQu
NSB9LAorICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpwYWlyPENTU1ZhbHVl
SUQsIE51bWJlclJhdz4gdGFyZ2V0Q29udHJhc3RNYXBwaW5nc1tdIHsKKyAgICAgICAgICAgICAg
ICAgICAgeyBDU1NWYWx1ZUFBLCBOdW1iZXJSYXcgeyA0LjUgfSB9LAorICAgICAgICAgICAgICAg
ICAgICB7IENTU1ZhbHVlQUFMYXJnZSwgTnVtYmVyUmF3IHsgMy4wIH0gfSwKKyAgICAgICAgICAg
ICAgICAgICAgeyBDU1NWYWx1ZUFBQSwgTnVtYmVyUmF3IHsgNy4wIH0gfSwKKyAgICAgICAgICAg
ICAgICAgICAgeyBDU1NWYWx1ZUFBQUxhcmdlLCBOdW1iZXJSYXcgeyA0LjUgfSB9LAogICAgICAg
ICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBTb3J0ZWRBcnJh
eU1hcCB0YXJnZXRDb250cmFzdE1hcCB7IHRhcmdldENvbnRyYXN0TWFwcGluZ3MgfTsKICAgICAg
ICAgICAgICAgICBhdXRvIHZhbHVlID0gdGFyZ2V0Q29udHJhc3RNYXAudHJ5R2V0KGFyZ3MuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpKTsKQEAgLTIyNjMsNyArMjM5Nyw3IEBAIHN0
YXRpYyBDb2xvciBwYXJzZUNvbG9yQ29udHJhc3RGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUAogICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgCiAgICAgICAgIC8vIFdoZW4gYSB0YXJnZXQg
Y29uc3Rhc3QgaXMgc3BlY2lmaWVkLCB3ZSBzZWxlY3QgInRoZSBmaXJzdCBjb2xvciBjb2xvciB0
byBtZWV0IG9yIGV4Y2VlZCB0aGUgdGFyZ2V0IGNvbnRyYXN0LiIKLSAgICAgICAgcmV0dXJuIHNl
bGVjdEZpcnN0Q29sb3JUaGF0TWVldHNPckV4Y2VlZHNUYXJnZXRDb250cmFzdChvcmlnaW5CYWNr
Z3JvdW5kQ29sb3IsIFdURk1vdmUoY29sb3JzVG9Db21wYXJlQWdhaW5zdCksICp0YXJnZXRDb250
cmFzdCk7CisgICAgICAgIHJldHVybiBzZWxlY3RGaXJzdENvbG9yVGhhdE1lZXRzT3JFeGNlZWRz
VGFyZ2V0Q29udHJhc3Qob3JpZ2luQmFja2dyb3VuZENvbG9yLCBXVEZNb3ZlKGNvbG9yc1RvQ29t
cGFyZUFnYWluc3QpLCB0YXJnZXRDb250cmFzdC0+dmFsdWUpOwogICAgIH0KIAogICAgIC8vIFdo
ZW4gYSB0YXJnZXQgY29uc3Rhc3QgaXMgTk9UIHNwZWNpZmllZCwgd2Ugc2VsZWN0ICJ0aGUgZmly
c3QgY29sb3Igd2l0aCB0aGUgaGlnaGVzdCBjb250cmFzdCB0byB0aGUgc2luZ2xlIGNvbG9yLiIK
QEAgLTIzNjYsOSArMjUwMCw5IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbG9yTWl4Q29tcG9u
ZW50PiBjb25zdW1lQ29sb3JNaQogICAgIENvbG9yTWl4Q29tcG9uZW50IHJlc3VsdDsKIAogICAg
IGlmIChhdXRvIHBlcmNlbnRhZ2UgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdzKSkgewotICAgICAg
ICBpZiAoKnBlcmNlbnRhZ2UgPCAwLjAgfHwgKnBlcmNlbnRhZ2UgPiAxMDAuMCkKKyAgICAgICAg
aWYgKHBlcmNlbnRhZ2UtPnZhbHVlIDwgMC4wIHx8IHBlcmNlbnRhZ2UtPnZhbHVlID4gMTAwLjAp
CiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICByZXN1bHQucGVyY2VudGFnZSA9IHBl
cmNlbnRhZ2U7CisgICAgICAgIHJlc3VsdC5wZXJjZW50YWdlID0gcGVyY2VudGFnZS0+dmFsdWU7
CiAgICAgfQogCiAgICAgcmVzdWx0LmNvbG9yID0gY29uc3VtZU9yaWdpbkNvbG9yKGFyZ3MsIGNv
bnRleHQpOwpAQCAtMjM3Nyw5ICsyNTExLDkgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8Q29sb3JN
aXhDb21wb25lbnQ+IGNvbnN1bWVDb2xvck1pCiAKICAgICBpZiAoIXJlc3VsdC5wZXJjZW50YWdl
KSB7CiAgICAgICAgIGlmIChhdXRvIHBlcmNlbnRhZ2UgPSBjb25zdW1lUGVyY2VudFJhdyhhcmdz
KSkgewotICAgICAgICAgICAgaWYgKCpwZXJjZW50YWdlIDwgMC4wIHx8ICpwZXJjZW50YWdlID4g
MTAwLjApCisgICAgICAgICAgICBpZiAocGVyY2VudGFnZS0+dmFsdWUgPCAwLjAgfHwgcGVyY2Vu
dGFnZS0+dmFsdWUgPiAxMDAuMCkKICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICAgICAgcmVzdWx0LnBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlOworICAgICAgICAgICAgcmVzdWx0
LnBlcmNlbnRhZ2UgPSBwZXJjZW50YWdlLT52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MjY0NiwxMSArMjc4MCwxMSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVDb2xv
cihDU1NQYXJzZXJUb2tlblIKICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZShjb2xvcik7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
UGFyc2VyTW9kZSBwYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzLCBib29sIGFsbG93
c05lZ2F0aXZlUGVyY2VudGFnZSA9IGZhbHNlKQorc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MsIE5lZ2F0
aXZlUGVyY2VudGFnZVBvbGljeSBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgPSBOZWdhdGl2ZVBl
cmNlbnRhZ2VQb2xpY3k6OkZvcmJpZCkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBJZGVudFRva2VuKQogICAgICAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTGVmdCwg
Q1NTVmFsdWVUb3AsIENTU1ZhbHVlQm90dG9tLCBDU1NWYWx1ZVJpZ2h0LCBDU1NWYWx1ZUNlbnRl
cj4ocmFuZ2UpOwotICAgIHJldHVybiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBwYXJz
ZXJNb2RlLCBWYWx1ZVJhbmdlOjpBbGwsIHVuaXRsZXNzLCBhbGxvd3NOZWdhdGl2ZVBlcmNlbnRh
Z2UpOworICAgIHJldHVybiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KHJhbmdlLCBwYXJzZXJNb2Rl
LCBWYWx1ZVJhbmdlOjpBbGwsIHVuaXRsZXNzLCBuZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kpOwog
fQogCiBzdGF0aWMgYm9vbCBpc0hvcml6b250YWxQb3NpdGlvbktleXdvcmRPbmx5KGNvbnN0IENT
U1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKQEAgLTI3OTksMjMgKzI5MzMsMjEgQEAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gcG9zaXRpb25Gcm9tCiAKIC8vIEZJWE1F
OiBUaGlzIG1heSBjb25zdW1lIGZyb20gdGhlIHJhbmdlIHVwb24gZmFpbHVyZS4gVGhlIGJhY2tn
cm91bmQKIC8vIHNob3J0aGFuZCB3b3JrcyBhcm91bmQgaXQsIGJ1dCB3ZSBzaG91bGQganVzdCBm
aXggaXQgaGVyZS4KLXN0ZDo6b3B0aW9uYWw8UG9zaXRpb25Db29yZGluYXRlcz4gY29uc3VtZVBv
c2l0aW9uQ29vcmRpbmF0ZXMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1v
ZGUgcGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcywgUG9zaXRpb25TeW50YXggcG9z
aXRpb25TeW50YXgsIE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSBwb2xpY3kpCitzdGQ6Om9wdGlv
bmFsPFBvc2l0aW9uQ29vcmRpbmF0ZXM+IGNvbnN1bWVQb3NpdGlvbkNvb3JkaW5hdGVzKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIHBhcnNlck1vZGUsIFVuaXRsZXNz
UXVpcmsgdW5pdGxlc3MsIFBvc2l0aW9uU3ludGF4IHBvc2l0aW9uU3ludGF4LCBOZWdhdGl2ZVBl
cmNlbnRhZ2VQb2xpY3kgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KQogewotICAgIGJvb2wgYWxs
b3dzTmVnYXRpdmUgPSBwb2xpY3kgPT0gTmVnYXRpdmVQZXJjZW50YWdlUG9saWN5OjpBbGxvdzsK
LQotICAgIGF1dG8gdmFsdWUxID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJz
ZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmUpOworICAgIGF1dG8gdmFsdWUxID0gY29u
c3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgbmVnYXRp
dmVQZXJjZW50YWdlUG9saWN5KTsKICAgICBpZiAoIXZhbHVlMSkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIAotICAgIGF1dG8gdmFsdWUyID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50
KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgYWxsb3dzTmVnYXRpdmUpOworICAgIGF1dG8g
dmFsdWUyID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0
bGVzcywgbmVnYXRpdmVQZXJjZW50YWdlUG9saWN5KTsKICAgICBpZiAoIXZhbHVlMikKICAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uRnJvbU9uZVZhbHVlKCp2YWx1ZTEpOwogICAgIAotICAgIGF1dG8g
dmFsdWUzID0gY29uc3VtZVBvc2l0aW9uQ29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0
bGVzcywgYWxsb3dzTmVnYXRpdmUpOworICAgIGF1dG8gdmFsdWUzID0gY29uc3VtZVBvc2l0aW9u
Q29tcG9uZW50KHJhbmdlLCBwYXJzZXJNb2RlLCB1bml0bGVzcywgbmVnYXRpdmVQZXJjZW50YWdl
UG9saWN5KTsKICAgICBpZiAoIXZhbHVlMykKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uRnJvbVR3
b1ZhbHVlcygqdmFsdWUxLCAqdmFsdWUyKTsKICAgICAKLSAgICBhdXRvIHZhbHVlNCA9IGNvbnN1
bWVQb3NpdGlvbkNvbXBvbmVudChyYW5nZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIGFsbG93c05l
Z2F0aXZlKTsKKyAgICBhdXRvIHZhbHVlNCA9IGNvbnN1bWVQb3NpdGlvbkNvbXBvbmVudChyYW5n
ZSwgcGFyc2VyTW9kZSwgdW5pdGxlc3MsIG5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeSk7CiAgICAg
CiAgICAgc3RkOjphcnJheTxDU1NQcmltaXRpdmVWYWx1ZSosIDU+IHZhbHVlcyB7CiAgICAgICAg
IHZhbHVlMS5nZXQoKSwKQEAgLTI5MTcsNyArMzA0OSw3IEBAIHN0YXRpYyBib29sIGNvbnN1bWVE
ZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFycwogICAgICAgICBwb3NpdGlvbiA9IChp
ZCA9PSBDU1NWYWx1ZUZyb20pID8gMCA6IDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJU
KGlkID09IENTU1ZhbHVlQ29sb3JTdG9wKTsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGNvbnN1bWVO
dW1iZXJSYXdPclBlcmNlbnREaXZpZGVkQnkxMDBSYXcoYXJncyk7CisgICAgICAgIGF1dG8gdmFs
dWUgPSBjb25zdW1lTnVtYmVyT3JQZXJjZW50UmF3PE51bWJlck9yUGVyY2VudERpdmlkZWRCeTEw
MFRyYW5zZm9ybWVyPihhcmdzKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgcG9zaXRpb24gPSAqdmFsdWU7CkBAIC0zNDE0LDcgKzM1NDYs
NyBAQCBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lQ3Jvc3NGYWRlKENTU1BhcnNlclRv
a2UKICAgICBpZiAoIXRvSW1hZ2VWYWx1ZSB8fCAhY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVz
cGFjZShhcmdzKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHBlcmNlbnRh
Z2UgPSBjb25zdW1lTnVtYmVyUmF3T3JQZXJjZW50RGl2aWRlZEJ5MTAwUmF3KGFyZ3MpOworICAg
IGF1dG8gcGVyY2VudGFnZSA9IGNvbnN1bWVOdW1iZXJPclBlcmNlbnRSYXc8TnVtYmVyT3JQZXJj
ZW50RGl2aWRlZEJ5MTAwVHJhbnNmb3JtZXI+KGFyZ3MpOwogICAgIGlmICghcGVyY2VudGFnZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYXV0byBwZXJjZW50YWdlVmFsdWUgPSBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGNsYW1wVG88ZG91YmxlPigqcGVyY2Vu
dGFnZSwgMCwgMSksIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKQEAgLTM5NTIsNyArNDA4NCw3
IEBAIHN0ZDo6b3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxpbmVIZWlnaHRSYXcoQ1NT
UAogICAgIH0KIAogICAgIGlmIChhdXRvIG51bWJlciA9IGNvbnN1bWVOdW1iZXJSYXcocmFuZ2Us
IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlKSkKLSAgICAgICAgcmV0dXJuIHsgKm51bWJlciB9Owor
ICAgICAgICByZXR1cm4geyBudW1iZXItPnZhbHVlIH07CiAKICAgICBpZiAoYXV0byBsZW5ndGhP
clBlcmNlbnQgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KHJhbmdlLCBwYXJzZXJNb2RlLCBW
YWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSkpCiAgICAgICAgIHJldHVybiB7ICpsZW5ndGhPclBlcmNl
bnQgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuaAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNiArNjYsMTQgQEAgZW51bSBjbGFzcyBOZWdhdGl2ZVBlcmNlbnRhZ2VQb2xpY3kgOiBib29s
IHsgRm9yYmlkLCBBCiBlbnVtIGNsYXNzIFVuaXRsZXNzUXVpcmsgeyBBbGxvdywgRm9yYmlkIH07
CiBlbnVtIGNsYXNzIFVuaXRsZXNzWmVyb1F1aXJrIHsgQWxsb3csIEZvcmJpZCB9OwogCitzdHJ1
Y3QgTnVtYmVyUmF3IHsKKyAgICBkb3VibGUgdmFsdWU7Cit9OworCitzdHJ1Y3QgUGVyY2VudFJh
dyB7CisgICAgZG91YmxlIHZhbHVlOworfTsKKwogc3RydWN0IEFuZ2xlUmF3IHsKICAgICBDU1NV
bml0VHlwZSB0eXBlOwogICAgIGRvdWJsZSB2YWx1ZTsKQEAgLTc2LDEzICs4NCwxNyBAQCBzdHJ1
Y3QgTGVuZ3RoUmF3IHsKICAgICBkb3VibGUgdmFsdWU7CiB9OwogCi11c2luZyBMZW5ndGhPclBl
cmNlbnRSYXcgPSBzdGQ6OnZhcmlhbnQ8TGVuZ3RoUmF3LCBkb3VibGU+OwordXNpbmcgTGVuZ3Ro
T3JQZXJjZW50UmF3ID0gc3RkOjp2YXJpYW50PExlbmd0aFJhdywgUGVyY2VudFJhdz47Cit1c2lu
ZyBOdW1iZXJPclBlcmNlbnRSYXcgPSBzdGQ6OnZhcmlhbnQ8TnVtYmVyUmF3LCBQZXJjZW50UmF3
PjsKK3VzaW5nIEFuZ2xlT3JOdW1iZXJSYXcgPSBzdGQ6OnZhcmlhbnQ8QW5nbGVSYXcsIE51bWJl
clJhdz47CiAKLXN0ZDo6b3B0aW9uYWw8aW50PiBjb25zdW1lSW50ZWdlclJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiwgZG91YmxlIG1pbmltdW1WYWx1ZSA9IC1zdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46Om1heCgpKTsKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSBtaW5pbXVtVmFsdWUgPSAtc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjptYXgoKSk7CitzdGQ6Om9wdGlvbmFsPGludD4gY29uc3VtZUludGVn
ZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7CitzdGQ6Om9wdGlvbmFsPGludD4g
Y29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2VyWmVyb0FuZEdyZWF0ZXIoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYpOwogc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY29uc3VtZVBvc2l0
aXZlSW50ZWdlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVQb3NpdGl2ZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwotc3Rk
OjpvcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpOworc3RkOjpvcHRpb25hbDxOdW1iZXJSYXc+
IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1
ZVJhbmdlOjpBbGwpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyKENT
U1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZU51bWJlck9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5n
ZSk7CiBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYpOwpAQCAtOTAsMTEgKzEwMiwxMSBAQCBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1AKIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJXb3JrZXJTYWZlKENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBDU1NWYWx1ZVBvb2wmKTsKIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1l
TGVuZ3RoUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdl
LCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2Vy
TW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7
Ci1zdGQ6Om9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwpOworc3RkOjpvcHRpb25hbDxQZXJj
ZW50UmF3PiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5n
ZSA9IFZhbHVlUmFuZ2U6OkFsbCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQ
ZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2Um
LCBWYWx1ZVJhbmdlLCBDU1NWYWx1ZVBvb2wmKTsKIHN0ZDo6b3B0aW9uYWw8TGVuZ3RoT3JQZXJj
ZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBD
U1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6
Rm9yYmlkKTsKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2Vu
dChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxl
c3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgYm9vbCBhbGxvd3NOZWdhdGl2ZVBlcmNl
bnRhZ2UgPSBmYWxzZSk7CitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhP
clBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2Us
IFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQsIE5lZ2F0aXZlUGVyY2VudGFn
ZVBvbGljeSA9IE5lZ2F0aXZlUGVyY2VudGFnZVBvbGljeTo6Rm9yYmlkKTsKIHN0ZDo6b3B0aW9u
YWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCwgVW5pdGxlc3Na
ZXJvUXVpcmsgPSBVbml0bGVzc1plcm9RdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkLCBVbml0bGVzc1plcm9RdWly
ayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lQW5nbGVXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJN
b2RlLCBDU1NWYWx1ZVBvb2wmLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlk
LCBVbml0bGVzc1plcm9RdWlyayA9IFVuaXRsZXNzWmVyb1F1aXJrOjpGb3JiaWQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJXb3JrZXJTYWZlLmNwcAkocmV2aXNpb24gMjg3ODExKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlcldvcmtlclNhZmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NDAsNyArNTQwLDcgQEAgc3RhdGljIFJlZlB0cjxDU1NGb250RmVhdHVyZVZhbHVlPiBjb25z
dW1lRm9udEZlYXR1cmVUCiAgICAgaW50IHRhZ1ZhbHVlID0gMTsKICAgICBpZiAoIXJhbmdlLmF0
RW5kKCkgJiYgcmFuZ2UucGVlaygpLnR5cGUoKSAhPSBDb21tYVRva2VuKSB7CiAgICAgICAgIC8v
IEZlYXR1cmUgdGFnIHZhbHVlcyBjb3VsZCBmb2xsb3c6IDxpbnRlZ2VyPiB8IG9uIHwgb2ZmCi0g
ICAgICAgIGlmIChhdXRvIGludGVnZXIgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1
bWVJbnRlZ2VyUmF3KHJhbmdlLCAwKSkKKyAgICAgICAgaWYgKGF1dG8gaW50ZWdlciA9IENTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUludGVnZXJaZXJvQW5kR3JlYXRlclJhdyhyYW5n
ZSkpCiAgICAgICAgICAgICB0YWdWYWx1ZSA9ICppbnRlZ2VyOwogICAgICAgICBlbHNlIGlmIChy
YW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZU9uIHx8IHJhbmdlLnBlZWsoKS5pZCgpID09IENT
U1ZhbHVlT2ZmKQogICAgICAgICAgICAgdGFnVmFsdWUgPSByYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLmlkKCkgPT0gQ1NTVmFsdWVPbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCShyZXZpc2lvbiAyODc4MTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA4LDggKzIwOCw4IEBAIHN0ZDo6b3B0aW9uYWw8Rm9udENhc2NhZGU+IHJl
c29sdmVGb3JGb250UmF3KGNvbnN0IEZvbgogICAgICAgICAgICAgLy8gICAgICAgIHRoYXQgaXQn
cyBvZmYtc2NyZWVuIGFuZCB0aGVyZWZvcmUgZG9lc24ndCBzdHJpY3RseSBoYXZlIGFuIGFzc29j
aWF0ZWQgdmlld3BvcnQuCiAgICAgICAgICAgICAvLyAgICAgICAgVGhpcyBuZWVkcyBjbGFyaWZp
Y2F0aW9uIGFuZCBwb3NzaWJseSBmaXhpbmcuCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlVW56b29tZWROb25DYWxjTGVuZ3Ro
RG91YmxlKGxlbmd0aC50eXBlLCBsZW5ndGgudmFsdWUsIENTU1Byb3BlcnR5Rm9udFNpemUsICZm
b250Q2FzY2FkZS5mb250TWV0cmljcygpLCAmZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCks
ICZmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSwgaXM8RG9jdW1lbnQ+KGNvbnRleHQpID8g
ZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLnJlbmRlclZpZXcoKSA6IG51bGxwdHIpKTsKLSAg
ICAgICAgfSwgWyZdIChkb3VibGUgcGVyY2VudGFnZSkgewotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PigocGFyZW50U2l6ZSAqIHBlcmNlbnRhZ2UpIC8gMTAwLjApOworICAg
ICAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6UGVyY2VudFJhdyYg
cGVyY2VudGFnZSkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigocGFy
ZW50U2l6ZSAqIHBlcmNlbnRhZ2UudmFsdWUpIC8gMTAwLjApOwogICAgICAgICB9KTsKICAgICB9
KTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>