<?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>27121</bug_id>
          
          <creation_ts>2009-07-09 09:51:08 -0700</creation_ts>
          <short_desc>[V8] Move V8DOMWrapper to its own file</short_desc>
          <delta_ts>2009-07-09 10:38:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130679</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-09 09:51:08 -0700</bug_when>
    <thetext>patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130681</commentid>
    <comment_count>1</comment_count>
      <attachid>32521</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-09 10:01:14 -0700</bug_when>
    <thetext>Created attachment 32521
patch (code motion only)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130686</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-09 10:38:35 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Adding         WebCore/bindings/v8/V8DOMWrapper.cpp
Adding         WebCore/bindings/v8/V8DOMWrapper.h
Sending        WebCore/bindings/v8/V8Proxy.cpp
Sending        WebCore/bindings/v8/V8Proxy.h
Transmitting file data .....
Committed revision 45664.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32521</attachid>
            <date>2009-07-09 10:01:14 -0700</date>
            <delta_ts>2009-07-09 10:08:55 -0700</delta_ts>
            <desc>patch (code motion only)</desc>
            <filename>domwrapper-file.patch</filename>
            <type>text/plain</type>
            <size>135726</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTY2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMDktMDctMDkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbVjhd
IE1vdmUgVjhET01XcmFwcGVyIHRvIGl0cyBvd24gZmlsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcxMjEKKworICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2V0VG9TdHJpbmdO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnN0cnVjdG9yVG9TdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0U1ZHRWxlbWVudEluc3RhbmNlVG9WOE9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRTVkdPYmplY3RXaXRo
Q29udGV4dFRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpkb21P
YmplY3RIYXNKU1dyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpzZXRK
U1dyYXBwZXJGb3JET01PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpz
ZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01X
cmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V3JhcHBlcjo6Z2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpj
b252ZXJ0VG9WOE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OnNldEhp
ZGRlbldpbmRvd1JlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmRv
bVdyYXBwZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb1NWR1BPRFR5cGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6bG9v
a3VwRE9NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9Ob2RlSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6
d3JhcE5hdGl2ZU5vZGVGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpp
bnN0YW50aWF0ZVY4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6c2V0
RE9NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6Om1heWJlRE9NV3Jh
cHBlcik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmlzRE9NRXZlbnRXcmFwcGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6aXNXcmFwcGVyT2ZUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6aHRtbEVsZW1lbnRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6c3ZnRWxlbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdl
dFRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0RXZl
bnRMaXN0ZW5lclRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpj
b252ZXJ0RE9NSW1wbGVtZW50YXRpb25Ub1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4
RE9NV3JhcHBlcjo6Y29udmVydFN0eWxlU2hlZXRUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydENTU1ZhbHVlVG9WOE9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRDU1NSdWxlVG9WOE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRXaW5kb3dUb1Y4T2JqZWN0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhET01XcmFwcGVyOjp3cmFwQ1BvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhE
T01XcmFwcGVyOjpleHRyYWN0Q1BvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFw
cGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVy
OjpleHRyYWN0Q1BvaW50ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6
aW5zdGFudGlhdGVWOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5oOgorCiAyMDA5LTA3LTA5ICBZdXJ5IFNl
bWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERp
bWl0cmkgR2xhemtvdi4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTM5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJWOERPTVdyYXBwZXIuaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVk
ZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJET01PYmplY3RzSW5j
bHVkZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiVjhDdXN0b21C
aW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01NYXAuaCIKKyNpbmNsdWRlICJWOERPTVdpbmRvdy5o
IgorI2luY2x1ZGUgIlY4SW5kZXguaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkV29ybGQuaCIKKyNp
bmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCIKKworI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8djgt
ZGVidWcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25B
cnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
VW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8
Tm9kZSosIHY4OjpPYmplY3QqPiBET01Ob2RlTWFwOwordHlwZWRlZiBIYXNoTWFwPHZvaWQqLCB2
ODo6T2JqZWN0Kj4gRE9NT2JqZWN0TWFwOworCisvLyBHZXQgdGhlIHN0cmluZyAndG9TdHJpbmcn
Lgorc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+IEdldFRvU3RyaW5nTmFtZSgpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTCh2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPiwgdmFs
dWUsICgpKTsKKyAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQorICAgICAgICB2YWx1ZSA9IHY4OjpQ
ZXJzaXN0ZW50PHY4OjpTdHJpbmc+OjpOZXcodjg6OlN0cmluZzo6TmV3KCJ0b1N0cmluZyIpKTsK
KyAgICByZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gQ29u
c3RydWN0b3JUb1N0cmluZyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIC8vIFRo
ZSBET00gY29uc3RydWN0b3JzJyB0b1N0cmluZyBmdW5jdGlvbnMgZ3JhYiB0aGUgY3VycmVudCB0
b1N0cmluZworICAgIC8vIGZvciBGdW5jdGlvbnMgYnkgdGFraW5nIHRoZSB0b1N0cmluZyBmdW5j
dGlvbiBvZiBpdHNlbGYgYW5kIHRoZW4KKyAgICAvLyBjYWxsaW5nIGl0IHdpdGggdGhlIGNvbnN0
cnVjdG9yIGFzIGl0cyByZWNlaXZlci4gVGhpcyBtZWFucyB0aGF0CisgICAgLy8gY2hhbmdlcyB0
byB0aGUgRnVuY3Rpb24gcHJvdG90eXBlIGNoYWluIG9yIHRvU3RyaW5nIGZ1bmN0aW9uIGFyZQor
ICAgIC8vIHJlZmxlY3RlZCB3aGVuIHByaW50aW5nIERPTSBjb25zdHJ1Y3RvcnMuIFRoZSBvbmx5
IHdhcnQgaXMgdGhhdAorICAgIC8vIGNoYW5nZXMgdG8gYSBET00gY29uc3RydWN0b3IncyB0b1N0
cmluZydzIHRvU3RyaW5nIHdpbGwgY2F1c2UgdGhlCisgICAgLy8gdG9TdHJpbmcgb2YgdGhlIERP
TSBjb25zdHJ1Y3RvciBpdHNlbGYgdG8gY2hhbmdlLiBUaGlzIGlzIGV4dHJlbWVseQorICAgIC8v
IG9ic2N1cmUgYW5kIHVubGlrZWx5IHRvIGJlIGEgcHJvYmxlbS4KKyAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdmFsdWUgPSBhcmdzLkNhbGxlZSgpLT5HZXQoR2V0VG9TdHJpbmdOYW1lKCkpOwor
ICAgIGlmICghdmFsdWUtPklzRnVuY3Rpb24oKSkgCisgICAgICAgIHJldHVybiB2ODo6U3RyaW5n
OjpOZXcoIiIpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QodmFs
dWUpLT5DYWxsKGFyZ3MuVGhpcygpLCAwLCAwKTsKK30KKworI2lmIEVOQUJMRShTVkcpCit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0U1ZHRWxlbWVudEluc3RhbmNl
VG9WOE9iamVjdChTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlKQoreworICAgIGlmICghaW5z
dGFuY2UpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworCisgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBleGlzdGluZ0luc3RhbmNlID0gZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCku
Z2V0KGluc3RhbmNlKTsKKyAgICBpZiAoIWV4aXN0aW5nSW5zdGFuY2UuSXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZXhpc3RpbmdJbnN0YW5jZTsKKworICAgIGluc3RhbmNlLT5yZWYoKTsKKwor
ICAgIC8vIEluc3RhbnRpYXRlIHRoZSBWOCBvYmplY3QgYW5kIHJlbWVtYmVyIGl0CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiByZXN1bHQgPSBpbnN0YW50aWF0ZVY4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6U1ZHRUxFTUVOVElOU1RBTkNFLCBWOENsYXNzSW5kZXg6OlNWR0VMRU1FTlRJTlNUQU5D
RSwgaW5zdGFuY2UpOworICAgIGlmICghcmVzdWx0LklzRW1wdHkoKSkgeworICAgICAgICAvLyBP
bmx5IHVwZGF0ZSB0aGUgRE9NIFNWRyBlbGVtZW50IG1hcCBpZiB0aGUgcmVzdWx0IGlzIG5vbi1l
bXB0eS4KKyAgICAgICAgZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCkuc2V0KGluc3RhbmNl
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpj
b252ZXJ0U1ZHT2JqZWN0V2l0aENvbnRleHRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZSB0eXBlLCB2b2lkKiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAg
IHJldHVybiB2ODo6TnVsbCgpOworCisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gcmVz
dWx0ID0gZ2V0RE9NU1ZHT2JqZWN0V2l0aENvbnRleHRNYXAoKS5nZXQob2JqZWN0KTsKKyAgICBp
ZiAoIXJlc3VsdC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBT
cGVjaWFsIGNhc2U6IFNWR1BhdGhTZWdzIG5lZWQgdG8gYmUgZG93bmNhc3QgdG8gdGhlaXIgcmVh
bCB0eXBlCisgICAgaWYgKHR5cGUgPT0gVjhDbGFzc0luZGV4OjpTVkdQQVRIU0VHKQorICAgICAg
ICB0eXBlID0gVjhDdXN0b206OkRvd25jYXN0U1ZHUGF0aFNlZyhvYmplY3QpOworCisgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IHY4T2JqZWN0ID0gaW5zdGFudGlhdGVWOE9iamVjdCh0eXBlLCB0
eXBlLCBvYmplY3QpOworICAgIGlmICghdjhPYmplY3QuSXNFbXB0eSgpKSB7CisgICAgICAgIHJl
c3VsdCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcodjhPYmplY3QpOworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpICAgICBcCisg
ICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOiBzdGF0aWNfY2FzdDxOQU1FKj4ob2JqZWN0
KS0+cmVmKCk7IGJyZWFrOworICAgICAgICBTVkdfT0JKRUNUX1RZUEVTKE1BS0VfQ0FTRSkKKyN1
bmRlZiBNQUtFX0NBU0UKKyNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpICAgICBcCisgICAg
ICAgIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOiAgICBcCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxWOFNWR1BPRFR5cGVXcmFwcGVyPE5BTUU+Kj4ob2JqZWN0KS0+cmVmKCk7IGJyZWFrOworICAg
ICAgICBTVkdfUE9EX05BVElWRV9UWVBFUyhNQUtFX0NBU0UpCisjdW5kZWYgTUFLRV9DQVNFCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgICAgICBnZXRET01TVkdPYmplY3RXaXRoQ29udGV4dE1hcCgpLnNldChvYmplY3Qs
IHJlc3VsdCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2VuZGlmCisKK2Jv
b2wgVjhET01XcmFwcGVyOjpkb21PYmplY3RIYXNKU1dyYXBwZXIodm9pZCogb2JqZWN0KQorewor
ICAgIHJldHVybiBnZXRET01PYmplY3RNYXAoKS5jb250YWlucyhvYmplY3QpIHx8IGdldEFjdGl2
ZURPTU9iamVjdE1hcCgpLmNvbnRhaW5zKG9iamVjdCk7Cit9CisKKy8vIFRoZSBjYWxsZXIgbXVz
dCBoYXZlIGluY3JlYXNlZCBvYmoncyByZWYgY291bnQuCit2b2lkIFY4RE9NV3JhcHBlcjo6c2V0
SlNXcmFwcGVyRm9yRE9NT2JqZWN0KHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD4gd3JhcHBlcikKK3sKKyAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBw
ZXIod3JhcHBlcikpOworI2lmbmRlZiBOREVCVUcKKyAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUgdHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CisgICAg
c3dpdGNoICh0eXBlKSB7CisjZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSBjYXNlIFY4Q2xh
c3NJbmRleDo6VFlQRToKKyAgICAgICAgQUNUSVZFX0RPTV9PQkpFQ1RfVFlQRVMoTUFLRV9DQVNF
KQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyN1bmRlZiBNQUtFX0NBU0UKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKyAgICBnZXRET01PYmplY3RN
YXAoKS5zZXQob2JqZWN0LCB3cmFwcGVyKTsKK30KKworLy8gVGhlIGNhbGxlciBtdXN0IGhhdmUg
aW5jcmVhc2VkIG9iaidzIHJlZiBjb3VudC4KK3ZvaWQgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBw
ZXJGb3JBY3RpdmVET01PYmplY3Qodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiB3cmFwcGVyKQoreworICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBl
cih3cmFwcGVyKSk7CisjaWZuZGVmIE5ERUJVRworICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSB0eXBlID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpIGNhc2UgVjhDbGFz
c0luZGV4OjpUWVBFOiBicmVhazsKKyAgICAgICAgQUNUSVZFX0RPTV9PQkpFQ1RfVFlQRVMoTUFL
RV9DQVNFKQorICAgIGRlZmF1bHQ6IAorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyN1
bmRlZiBNQUtFX0NBU0UKKyAgICB9CisjZW5kaWYKKyAgICBnZXRBY3RpdmVET01PYmplY3RNYXAo
KS5zZXQob2JqZWN0LCB3cmFwcGVyKTsKK30KKworLy8gVGhlIGNhbGxlciBtdXN0IGhhdmUgaW5j
cmVhc2VkIG5vZGUncyByZWYgY291bnQuCit2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVy
Rm9yRE9NTm9kZShOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
KQoreworICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcih3cmFwcGVyKSk7
CisgICAgZ2V0RE9NTm9kZU1hcCgpLnNldChub2RlLCB3cmFwcGVyKTsKK30KKwordjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4RE9NV3JhcHBlcjo6Z2V0VGVtcGxhdGUoVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUpCit7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+KiBjYWNoZUNlbGwgPSBWOENsYXNzSW5kZXg6OkdldENhY2hlKHR5
cGUpOworICAgIGlmICghY2FjaGVDZWxsLT5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAqY2Fj
aGVDZWxsOworCisgICAgLy8gTm90IGluIHRoZSBjYWNoZS4KKyAgICBGdW5jdGlvblRlbXBsYXRl
RmFjdG9yeSBmYWN0b3J5ID0gVjhDbGFzc0luZGV4OjpHZXRGYWN0b3J5KHR5cGUpOworICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjcmlwdG9yID0gZmFjdG9yeSgp
OworICAgIC8vIERPTSBjb25zdHJ1Y3RvcnMgYXJlIGZ1bmN0aW9ucyBhbmQgc2hvdWxkIHByaW50
IHRoZW1zZWx2ZXMgYXMgc3VjaC4KKyAgICAvLyBIb3dldmVyLCB3ZSB3aWxsIGxhdGVyIHJlcGxh
Y2UgdGhlaXIgcHJvdG90eXBlcyB3aXRoIE9iamVjdAorICAgIC8vIHByb3RvdHlwZXMgc28gd2Ug
bmVlZCB0byBleHBsaWNpdGx5IG92ZXJyaWRlIHRvU3RyaW5nIG9uIHRoZQorICAgIC8vIGluc3Rh
bmNlIGl0c2VsZi4gSWYgd2UgbGF0ZXIgbWFrZSBET00gY29uc3RydWN0b3JzIGZ1bGwgb2JqZWN0
cworICAgIC8vIHdlIGNhbiBnaXZlIHRoZW0gY2xhc3MgbmFtZXMgaW5zdGVhZCBhbmQgT2JqZWN0
LnByb3RvdHlwZS50b1N0cmluZworICAgIC8vIHdpbGwgd29yayBzbyB3ZSBjYW4gcmVtb3ZlIHRo
aXMgY29kZS4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiwgdG9TdHJpbmdUZW1wbGF0ZSwgKCkpOworICAgIGlmICh0b1N0cmluZ1Rl
bXBsYXRlLklzRW1wdHkoKSkKKyAgICAgICAgdG9TdHJpbmdUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXco
Q29uc3RydWN0b3JUb1N0cmluZykpOworICAgIGRlc2NyaXB0b3ItPlNldChHZXRUb1N0cmluZ05h
bWUoKSwgdG9TdHJpbmdUZW1wbGF0ZSk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBW
OENsYXNzSW5kZXg6OkNTU1NUWUxFREVDTEFSQVRJT046CisgICAgICAgIC8vIFRoZSBuYW1lZCBw
cm9wZXJ0eSBoYW5kbGVyIGZvciBzdHlsZSBkZWNsYXJhdGlvbnMgaGFzIGEKKyAgICAgICAgLy8g
c2V0dGVyLiBUaGVyZWZvcmUsIHRoZSBpbnRlcmNlcHRvciBoYXMgdG8gYmUgb24gdGhlIG9iamVj
dAorICAgICAgICAvLyBpdHNlbGYgYW5kIG5vdCBvbiB0aGUgcHJvdG90eXBlIG9iamVjdC4KKyAg
ICAgICAgZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXROYW1lZFByb3BlcnR5SGFu
ZGxlciggVVNFX05BTUVEX1BST1BFUlRZX0dFVFRFUihDU1NTdHlsZURlY2xhcmF0aW9uKSwgVVNF
X05BTUVEX1BST1BFUlRZX1NFVFRFUihDU1NTdHlsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIHNl
dENvbGxlY3Rpb25TdHJpbmdPck51bGxJbmRleGVkR2V0dGVyPENTU1N0eWxlRGVjbGFyYXRpb24+
KGRlc2NyaXB0b3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q1NT
UlVMRUxJU1Q6CisgICAgICAgIHNldENvbGxlY3Rpb25JbmRleGVkR2V0dGVyPENTU1J1bGVMaXN0
LCBDU1NSdWxlPihkZXNjcmlwdG9yLCAgVjhDbGFzc0luZGV4OjpDU1NSVUxFKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OkNTU1ZBTFVFTElTVDoKKyAgICAgICAgc2V0
Q29sbGVjdGlvbkluZGV4ZWRHZXR0ZXI8Q1NTVmFsdWVMaXN0LCBDU1NWYWx1ZT4oZGVzY3JpcHRv
ciwgVjhDbGFzc0luZGV4OjpDU1NWQUxVRSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpDU1NWQVJJQUJMRVNERUNMQVJBVElPTjoKKyAgICAgICAgc2V0Q29sbGVjdGlv
blN0cmluZ09yTnVsbEluZGV4ZWRHZXR0ZXI8Q1NTVmFyaWFibGVzRGVjbGFyYXRpb24+KGRlc2Ny
aXB0b3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6V0VCS0lUQ1NT
VFJBTlNGT1JNVkFMVUU6CisgICAgICAgIHNldENvbGxlY3Rpb25JbmRleGVkR2V0dGVyPFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlLCBDU1NWYWx1ZT4oZGVzY3JpcHRvciwgVjhDbGFzc0luZGV4OjpD
U1NWQUxVRSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVjhDbGFzc0luZGV4OjpVTkRFVEVD
VEFCTEVIVE1MQ09MTEVDVElPTjoKKyAgICAgICAgZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0
ZSgpLT5NYXJrQXNVbmRldGVjdGFibGUoKTsgLy8gZmFsbCB0aHJvdWdoCisgICAgY2FzZSBWOENs
YXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OOgorICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRl
bXBsYXRlKCktPlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKFVTRV9OQU1FRF9QUk9QRVJUWV9HRVRU
RVIoSFRNTENvbGxlY3Rpb24pKTsKKyAgICAgICAgZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0
ZSgpLT5TZXRDYWxsQXNGdW5jdGlvbkhhbmRsZXIoVVNFX0NBTExCQUNLKEhUTUxDb2xsZWN0aW9u
Q2FsbEFzRnVuY3Rpb24pKTsKKyAgICAgICAgc2V0Q29sbGVjdGlvbkluZGV4ZWRHZXR0ZXI8SFRN
TENvbGxlY3Rpb24sIE5vZGU+KGRlc2NyaXB0b3IsIFY4Q2xhc3NJbmRleDo6Tk9ERSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgVjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NPTExFQ1RJT046
CisgICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0TmFtZWRQcm9wZXJ0
eUhhbmRsZXIoVVNFX05BTUVEX1BST1BFUlRZX0dFVFRFUihIVE1MQ29sbGVjdGlvbikpOworICAg
ICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhh
bmRsZXIoVVNFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxPcHRpb25zQ29sbGVjdGlvbiks
IFVTRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihIVE1MT3B0aW9uc0NvbGxlY3Rpb24pKTsKKyAg
ICAgICAgZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRDYWxsQXNGdW5jdGlvbkhh
bmRsZXIoVVNFX0NBTExCQUNLKEhUTUxDb2xsZWN0aW9uQ2FsbEFzRnVuY3Rpb24pKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OkhUTUxTRUxFQ1RFTEVNRU5UOgorICAg
ICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldE5hbWVkUHJvcGVydHlIYW5k
bGVyKFVTRV9OQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTFNlbGVjdEVsZW1lbnRDb2xsZWN0aW9u
KSk7CisgICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFBy
b3BlcnR5SGFuZGxlcihub2RlQ29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUdldHRlcjxIVE1MU2Vs
ZWN0RWxlbWVudD4sIFVTRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihIVE1MU2VsZWN0RWxlbWVu
dENvbGxlY3Rpb24pLAorICAgICAgICAgICAgMCwgMCwgbm9kZUNvbGxlY3Rpb25JbmRleGVkUHJv
cGVydHlFbnVtZXJhdG9yPEhUTUxTZWxlY3RFbGVtZW50Piwgdjg6OkludGVnZXI6Ok5ldyhWOENs
YXNzSW5kZXg6Ok5PREUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6
OkhUTUxET0NVTUVOVDogeworICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCkt
PlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKFVTRV9OQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTERv
Y3VtZW50KSwgMCwgMCwgVVNFX05BTUVEX1BST1BFUlRZX0RFTEVURVIoSFRNTERvY3VtZW50KSk7
CisKKyAgICAgICAgLy8gV2UgYWRkIGFuIGV4dHJhIGludGVybmFsIGZpZWxkIHRvIGFsbCBEb2N1
bWVudCB3cmFwcGVycyBmb3IKKyAgICAgICAgLy8gc3RvcmluZyBhIHBlciBkb2N1bWVudCBET01J
bXBsZW1lbnRhdGlvbiB3cmFwcGVyLgorICAgICAgICAvLworICAgICAgICAvLyBBZGRpdGlvbmFs
bHksIHdlIGFkZCB0d28gZXh0cmEgaW50ZXJuYWwgZmllbGRzIGZvcgorICAgICAgICAvLyBIVE1M
RG9jdW1lbnRzIHRvIGltcGxlbWVudCB0ZW1wb3Jhcnkgc2hhZG93aW5nIG9mCisgICAgICAgIC8v
IGRvY3VtZW50LmFsbC4gT25lIGZpZWxkIGhvbGRzIGFuIG9iamVjdCB0aGF0IGlzIHVzZWQgYXMg
YQorICAgICAgICAvLyBtYXJrZXIuIFRoZSBvdGhlciBmaWVsZCBob2xkcyB0aGUgbWFya2VyIG9i
amVjdCBpZgorICAgICAgICAvLyBkb2N1bWVudC5hbGwgaXMgbm90IHNoYWRvd2VkIGFuZCBzb21l
IG90aGVyIHZhbHVlIGlmCisgICAgICAgIC8vIGRvY3VtZW50LmFsbCBpcyBzaGFkb3dlZC4KKyAg
ICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2VUZW1wbGF0ZSA9IGRl
c2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgICAgICAgQVNTRVJUKGluc3RhbmNlVGVt
cGxhdGUtPkludGVybmFsRmllbGRDb3VudCgpID09IFY4Q3VzdG9tOjprRGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQpOworICAgICAgICBpbnN0YW5jZVRlbXBsYXRlLT5TZXRJbnRlcm5h
bEZpZWxkQ291bnQoVjhDdXN0b206OmtIVE1MRG9jdW1lbnRJbnRlcm5hbEZpZWxkQ291bnQpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisjaWYgRU5BQkxFKFNWRykKKyAgICBjYXNlIFY4Q2xhc3NJ
bmRleDo6U1ZHRE9DVU1FTlQ6ICAvLyBmYWxsIHRocm91Z2gKKyNlbmRpZgorICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpET0NVTUVOVDogeworICAgICAgICAvLyBXZSBhZGQgYW4gZXh0cmEgaW50ZXJu
YWwgZmllbGQgdG8gYWxsIERvY3VtZW50IHdyYXBwZXJzIGZvcgorICAgICAgICAvLyBzdG9yaW5n
IGEgcGVyIGRvY3VtZW50IERPTUltcGxlbWVudGF0aW9uIHdyYXBwZXIuCisgICAgICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlVGVtcGxhdGUgPSBkZXNjcmlwdG9yLT5J
bnN0YW5jZVRlbXBsYXRlKCk7CisgICAgICAgIEFTU0VSVChpbnN0YW5jZVRlbXBsYXRlLT5JbnRl
cm5hbEZpZWxkQ291bnQoKSA9PSBWOEN1c3RvbTo6a0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVs
ZENvdW50KTsKKyAgICAgICAgaW5zdGFuY2VUZW1wbGF0ZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50
KCBWOEN1c3RvbTo6a0RvY3VtZW50TWluaW11bUludGVybmFsRmllbGRDb3VudCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6SFRNTEFQUExFVEVMRU1FTlQ6
ICAvLyBmYWxsIHRocm91Z2gKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6SFRNTEVNQkVERUxFTUVO
VDogIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgVjhDbGFzc0luZGV4OjpIVE1MT0JKRUNURUxF
TUVOVDoKKyAgICAgICAgLy8gSFRNTEFwcGxldEVsZW1lbnQsIEhUTUxFbWJlZEVsZW1lbnQgYW5k
IEhUTUxPYmplY3RFbGVtZW50IGFyZQorICAgICAgICAvLyBpbmhlcml0ZWQgZnJvbSBIVE1MUGx1
Z0luRWxlbWVudCwgYW5kIHRoZXkgc2hhcmUgdGhlIHNhbWUgcHJvcGVydHkKKyAgICAgICAgLy8g
aGFuZGxpbmcgY29kZS4KKyAgICAgICAgZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5T
ZXROYW1lZFByb3BlcnR5SGFuZGxlcihVU0VfTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxQbHVn
SW5FbGVtZW50KSwgVVNFX05BTUVEX1BST1BFUlRZX1NFVFRFUihIVE1MUGx1Z0luRWxlbWVudCkp
OworICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9w
ZXJ0eUhhbmRsZXIoVVNFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxQbHVnSW5FbGVtZW50
KSwgVVNFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKEhUTUxQbHVnSW5FbGVtZW50KSk7CisgICAg
ICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0Q2FsbEFzRnVuY3Rpb25IYW5k
bGVyKFVTRV9DQUxMQkFDSyhIVE1MUGx1Z0luRWxlbWVudCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFY4Q2xhc3NJbmRleDo6SFRNTEZSQU1FU0VURUxFTUVOVDoKKyAgICAgICAgZGVzY3Jp
cHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXROYW1lZFByb3BlcnR5SGFuZGxlcihVU0VfTkFN
RURfUFJPUEVSVFlfR0VUVEVSKEhUTUxGcmFtZVNldEVsZW1lbnQpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OkhUTUxGT1JNRUxFTUVOVDoKKyAgICAgICAgZGVzY3Jp
cHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXROYW1lZFByb3BlcnR5SGFuZGxlcihVU0VfTkFN
RURfUFJPUEVSVFlfR0VUVEVSKEhUTUxGb3JtRWxlbWVudCkpOworICAgICAgICBkZXNjcmlwdG9y
LT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX0lOREVY
RURfUFJPUEVSVFlfR0VUVEVSKEhUTUxGb3JtRWxlbWVudCksIDAsIDAsIDAsIG5vZGVDb2xsZWN0
aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcjxIVE1MRm9ybUVsZW1lbnQ+LCB2ODo6SW50ZWdl
cjo6TmV3KFY4Q2xhc3NJbmRleDo6Tk9ERSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFY4
Q2xhc3NJbmRleDo6Q0FOVkFTUElYRUxBUlJBWToKKyAgICAgICAgZGVzY3JpcHRvci0+SW5zdGFu
Y2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKFVTRV9JTkRFWEVEX1BST1BF
UlRZX0dFVFRFUihDYW52YXNQaXhlbEFycmF5KSwgVVNFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVS
KENhbnZhc1BpeGVsQXJyYXkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWOENsYXNzSW5k
ZXg6OlNUWUxFU0hFRVQ6ICAvLyBmYWxsIHRocm91Z2gKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6
Q1NTU1RZTEVTSEVFVDogeworICAgICAgICAvLyBXZSBhZGQgYW4gZXh0cmEgaW50ZXJuYWwgZmll
bGQgdG8gaG9sZCBhIHJlZmVyZW5jZSB0bworICAgICAgICAvLyB0aGUgb3duZXIgbm9kZS4KKyAg
ICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2VUZW1wbGF0ZSA9IGRl
c2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgICAgICAgQVNTRVJUKGluc3RhbmNlVGVt
cGxhdGUtPkludGVybmFsRmllbGRDb3VudCgpID09IFY4Q3VzdG9tOjprRGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQpOworICAgICAgICBpbnN0YW5jZVRlbXBsYXRlLT5TZXRJbnRlcm5h
bEZpZWxkQ291bnQoVjhDdXN0b206OmtTdHlsZVNoZWV0SW50ZXJuYWxGaWVsZENvdW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVjhDbGFzc0luZGV4OjpNRURJQUxJU1Q6Cisg
ICAgICAgIHNldENvbGxlY3Rpb25TdHJpbmdPck51bGxJbmRleGVkR2V0dGVyPE1lZGlhTGlzdD4o
ZGVzY3JpcHRvcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVjhDbGFzc0luZGV4OjpNSU1F
VFlQRUFSUkFZOgorICAgICAgICBzZXRDb2xsZWN0aW9uSW5kZXhlZEFuZE5hbWVkR2V0dGVyczxN
aW1lVHlwZUFycmF5LCBNaW1lVHlwZT4oZGVzY3JpcHRvciwgVjhDbGFzc0luZGV4OjpNSU1FVFlQ
RSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVjhDbGFzc0luZGV4OjpOQU1FRE5PREVNQVA6
CisgICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0TmFtZWRQcm9wZXJ0
eUhhbmRsZXIoVVNFX05BTUVEX1BST1BFUlRZX0dFVFRFUihOYW1lZE5vZGVNYXApKTsKKyAgICAg
ICAgZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5k
bGVyKFVTRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihOYW1lZE5vZGVNYXApLCAwLCAwLCAwLCBj
b2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcjxOYW1lZE5vZGVNYXA+LCB2ODo6SW50
ZWdlcjo6TmV3KFY4Q2xhc3NJbmRleDo6Tk9ERSkpOworICAgICAgICBicmVhazsKKyNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCisgICAgY2FzZSBWOENsYXNzSW5kZXg6OlNUT1JBR0U6CisgICAgICAg
IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0TmFtZWRQcm9wZXJ0eUhhbmRsZXIo
VVNFX05BTUVEX1BST1BFUlRZX0dFVFRFUihTdG9yYWdlKSwgVVNFX05BTUVEX1BST1BFUlRZX1NF
VFRFUihTdG9yYWdlKSwgMCwgVVNFX05BTUVEX1BST1BFUlRZX0RFTEVURVIoU3RvcmFnZSksIFY4
Q3VzdG9tOjp2OFN0b3JhZ2VOYW1lZFByb3BlcnR5RW51bWVyYXRvcik7CisgICAgICAgIGRlc2Ny
aXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihVU0Vf
SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoU3RvcmFnZSksIFVTRV9JTkRFWEVEX1BST1BFUlRZX1NF
VFRFUihTdG9yYWdlKSwgMCwgVVNFX0lOREVYRURfUFJPUEVSVFlfREVMRVRFUihTdG9yYWdlKSk7
CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBWOENsYXNzSW5kZXg6Ok5PREVMSVNU
OgorICAgICAgICBzZXRDb2xsZWN0aW9uSW5kZXhlZEdldHRlcjxOb2RlTGlzdCwgTm9kZT4oZGVz
Y3JpcHRvciwgVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICAgICAgZGVzY3JpcHRvci0+SW5zdGFu
Y2VUZW1wbGF0ZSgpLT5TZXROYW1lZFByb3BlcnR5SGFuZGxlcihVU0VfTkFNRURfUFJPUEVSVFlf
R0VUVEVSKE5vZGVMaXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVjhDbGFzc0luZGV4
OjpQTFVHSU46CisgICAgICAgIHNldENvbGxlY3Rpb25JbmRleGVkQW5kTmFtZWRHZXR0ZXJzPFBs
dWdpbiwgTWltZVR5cGU+KGRlc2NyaXB0b3IsIFY4Q2xhc3NJbmRleDo6TUlNRVRZUEUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6UExVR0lOQVJSQVk6CisgICAgICAg
IHNldENvbGxlY3Rpb25JbmRleGVkQW5kTmFtZWRHZXR0ZXJzPFBsdWdpbkFycmF5LCBQbHVnaW4+
KGRlc2NyaXB0b3IsIFY4Q2xhc3NJbmRleDo6UExVR0lOKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBWOENsYXNzSW5kZXg6OlNUWUxFU0hFRVRMSVNUOgorICAgICAgICBkZXNjcmlwdG9yLT5J
bnN0YW5jZVRlbXBsYXRlKCktPlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKFVTRV9OQU1FRF9QUk9Q
RVJUWV9HRVRURVIoU3R5bGVTaGVldExpc3QpKTsKKyAgICAgICAgc2V0Q29sbGVjdGlvbkluZGV4
ZWRHZXR0ZXI8U3R5bGVTaGVldExpc3QsIFN0eWxlU2hlZXQ+KGRlc2NyaXB0b3IsIFY4Q2xhc3NJ
bmRleDo6U1RZTEVTSEVFVCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVjhDbGFzc0luZGV4
OjpET01XSU5ET1c6IHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRT
aWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzY3JpcHRvcik7CisKKyAgICAgICAgZGVz
Y3JpcHRvci0+UHJvdG90eXBlVGVtcGxhdGUoKS0+U2V0TmFtZWRQcm9wZXJ0eUhhbmRsZXIoVVNF
X05BTUVEX1BST1BFUlRZX0dFVFRFUihET01XaW5kb3cpKTsKKyAgICAgICAgZGVzY3JpcHRvci0+
UHJvdG90eXBlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihVU0VfSU5ERVhF
RF9QUk9QRVJUWV9HRVRURVIoRE9NV2luZG93KSk7CisKKyAgICAgICAgZGVzY3JpcHRvci0+U2V0
SGlkZGVuUHJvdG90eXBlKHRydWUpOworCisgICAgICAgIC8vIFJlc2VydmUgc3BhY2VzIGZvciBy
ZWZlcmVuY2VzIHRvIGxvY2F0aW9uLCBoaXN0b3J5IGFuZAorICAgICAgICAvLyBuYXZpZ2F0b3Ig
b2JqZWN0cy4KKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2VU
ZW1wbGF0ZSA9IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgICAgICAgaW5zdGFu
Y2VUZW1wbGF0ZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KFY4Q3VzdG9tOjprRE9NV2luZG93SW50
ZXJuYWxGaWVsZENvdW50KTsKKworICAgICAgICAvLyBTZXQgYWNjZXNzIGNoZWNrIGNhbGxiYWNr
cywgYnV0IHR1cm5lZCBvZmYgaW5pdGlhbGx5LgorICAgICAgICAvLyBXaGVuIGEgY29udGV4dCBp
cyBkZXRhY2hlZCBmcm9tIGEgZnJhbWUsIHR1cm4gb24gdGhlIGFjY2VzcyBjaGVjay4KKyAgICAg
ICAgLy8gVHVybmluZyBvbiBjaGVja3MgYWxzbyBpbnZhbGlkYXRlcyBpbmxpbmUgY2FjaGVzIG9m
IHRoZSBvYmplY3QuCisgICAgICAgIGluc3RhbmNlVGVtcGxhdGUtPlNldEFjY2Vzc0NoZWNrQ2Fs
bGJhY2tzKFY4Q3VzdG9tOjp2OERPTVdpbmRvd05hbWVkU2VjdXJpdHlDaGVjaywgVjhDdXN0b206
OnY4RE9NV2luZG93SW5kZXhlZFNlY3VyaXR5Q2hlY2ssIHY4OjpJbnRlZ2VyOjpOZXcoVjhDbGFz
c0luZGV4OjpET01XSU5ET1cpLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFY4Q2xhc3NJbmRleDo6TE9DQVRJT046IHsKKyAgICAgICAgLy8gRm9yIHNlY3VyaXR5IHJl
YXNvbnMsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgb24gdGhlIGluc3RhbmNlCisgICAgICAgIC8vIGlu
c3RlYWQgb2Ygb24gdGhlIHByb3RvdHlwZSBvYmplY3QgdG8gaW5zdXJlIHRoYXQgdGhleSBjYW5u
b3QKKyAgICAgICAgLy8gYmUgb3ZlcndyaXR0ZW4uCisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0VGVtcGxhdGU+IGluc3RhbmNlID0gZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpOwor
ICAgICAgICBpbnN0YW5jZS0+U2V0QWNjZXNzb3Iodjg6OlN0cmluZzo6TmV3KCJyZWxvYWQiKSwg
VjhDdXN0b206OnY4TG9jYXRpb25SZWxvYWRBY2Nlc3NvckdldHRlciwgMCwgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCksIHY4OjpBTExfQ0FOX1JFQUQsIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0
dHJpYnV0ZT4odjg6OkRvbnREZWxldGUgfCB2ODo6UmVhZE9ubHkpKTsKKyAgICAgICAgaW5zdGFu
Y2UtPlNldEFjY2Vzc29yKHY4OjpTdHJpbmc6Ok5ldygicmVwbGFjZSIpLCBWOEN1c3RvbTo6djhM
b2NhdGlvblJlcGxhY2VBY2Nlc3NvckdldHRlciwgMCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCks
IHY4OjpBTExfQ0FOX1JFQUQsIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6
OkRvbnREZWxldGUgfCB2ODo6UmVhZE9ubHkpKTsKKyAgICAgICAgaW5zdGFuY2UtPlNldEFjY2Vz
c29yKHY4OjpTdHJpbmc6Ok5ldygiYXNzaWduIiksIFY4Q3VzdG9tOjp2OExvY2F0aW9uQXNzaWdu
QWNjZXNzb3JHZXR0ZXIsIDAsIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6QUxMX0NBTl9S
RUFELCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpEb250RGVsZXRlIHwg
djg6OlJlYWRPbmx5KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFY4Q2xhc3NJ
bmRleDo6SElTVE9SWToKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6
TUVTU0FHRUNIQU5ORUw6IHsKKyAgICAgICAgLy8gUmVzZXJ2ZSB0d28gbW9yZSBpbnRlcm5hbCBm
aWVsZHMgZm9yIHJlZmVyZW5jaW5nIHRoZSBwb3J0MQorICAgICAgICAvLyBhbmQgcG9ydDIgd3Jh
cHBlcnMuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwb3J0IHdyYXBwZXJzIGFyZQorICAgICAgICAv
LyBrZXB0IGFsaXZlIHdoZW4gdGhlIGNoYW5uZWwgd3JhcHBlciBpcy4KKyAgICAgICAgZGVzY3Jp
cHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0
b3IpKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2VUZW1w
bGF0ZSA9IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgICAgICAgaW5zdGFuY2VU
ZW1wbGF0ZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KFY4Q3VzdG9tOjprTWVzc2FnZUNoYW5uZWxJ
bnRlcm5hbEZpZWxkQ291bnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFY4
Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQ6IHsKKyAgICAgICAgLy8gUmVzZXJ2ZSBvbmUgbW9yZSBp
bnRlcm5hbCBmaWVsZCBmb3Iga2VlcGluZyBldmVudCBsaXN0ZW5lcnMuCisgICAgICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlVGVtcGxhdGUgPSBkZXNjcmlwdG9yLT5J
bnN0YW5jZVRlbXBsYXRlKCk7CisgICAgICAgIGluc3RhbmNlVGVtcGxhdGUtPlNldEludGVybmFs
RmllbGRDb3VudChWOEN1c3RvbTo6a01lc3NhZ2VQb3J0SW50ZXJuYWxGaWVsZENvdW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgY2FzZSBWOENs
YXNzSW5kZXg6OldPUktFUjogeworICAgICAgICAvLyBSZXNlcnZlIG9uZSBtb3JlIGludGVybmFs
IGZpZWxkIGZvciBrZWVwaW5nIGV2ZW50IGxpc3RlbmVycy4KKyAgICAgICAgdjg6OkxvY2FsPHY4
OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2VUZW1wbGF0ZSA9IGRlc2NyaXB0b3ItPkluc3RhbmNl
VGVtcGxhdGUoKTsKKyAgICAgICAgaW5zdGFuY2VUZW1wbGF0ZS0+U2V0SW50ZXJuYWxGaWVsZENv
dW50KFY4Q3VzdG9tOjprV29ya2VySW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICAgICAgZGVzY3Jp
cHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKFdvcmtlckNvbnN0cnVjdG9yKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgVjhDbGFzc0luZGV4OjpXT1JLRVJDT05U
RVhUOiB7CisgICAgICAgIC8vIFJlc2VydmUgb25lIG1vcmUgaW50ZXJuYWwgZmllbGQgZm9yIGtl
ZXBpbmcgZXZlbnQgbGlzdGVuZXJzLgorICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBs
YXRlPiBpbnN0YW5jZVRlbXBsYXRlID0gZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpOwor
ICAgICAgICBpbnN0YW5jZVRlbXBsYXRlLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhDdXN0b206
OmtXb3JrZXJDb250ZXh0SW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorI2VuZGlmIC8vIFdPUktFUlMKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgb2JqZWN0cyBhcmUg
Y3JlYXRlZCBmcm9tIEphdmFTY3JpcHQuCisgICAgY2FzZSBWOENsYXNzSW5kZXg6OkRPTVBBUlNF
UjoKKyAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKERPTVBh
cnNlckNvbnN0cnVjdG9yKSk7CisgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShWSURFTykKKyAg
ICBjYXNlIFY4Q2xhc3NJbmRleDo6SFRNTEFVRElPRUxFTUVOVDoKKyAgICAgICAgZGVzY3JpcHRv
ci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rv
cikpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgVjhDbGFzc0luZGV4OjpIVE1M
SU1BR0VFTEVNRU5UOgorICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FM
TEJBQ0soSFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVjhDbGFzc0luZGV4OjpIVE1MT1BUSU9ORUxFTUVOVDoKKyAgICAgICAgZGVzY3JpcHRv
ci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0
b3IpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQktJVENTU01B
VFJJWDoKKyAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKFdl
YktpdENTU01hdHJpeENvbnN0cnVjdG9yKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpXRUJLSVRQT0lOVDoKKyAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRs
ZXIoVVNFX0NBTExCQUNLKFdlYktpdFBvaW50Q29uc3RydWN0b3IpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OlhNTFNFUklBTElaRVI6CisgICAgICAgIGRlc2NyaXB0
b3ItPlNldENhbGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhYTUxTZXJpYWxpemVyQ29uc3RydWN0b3Ip
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNU
OiB7CisgICAgICAgIC8vIFJlc2VydmUgb25lIG1vcmUgaW50ZXJuYWwgZmllbGQgZm9yIGtlZXBp
bmcgZXZlbnQgbGlzdGVuZXJzLgorICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRl
PiBpbnN0YW5jZVRlbXBsYXRlID0gZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpOworICAg
ICAgICBpbnN0YW5jZVRlbXBsYXRlLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhDdXN0b206OmtY
TUxIdHRwUmVxdWVzdEludGVybmFsRmllbGRDb3VudCk7CisgICAgICAgIGRlc2NyaXB0b3ItPlNl
dENhbGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVF
U1RVUExPQUQ6IHsKKyAgICAgICAgLy8gUmVzZXJ2ZSBvbmUgbW9yZSBpbnRlcm5hbCBmaWVsZCBm
b3Iga2VlcGluZyBldmVudCBsaXN0ZW5lcnMuCisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
VGVtcGxhdGU+IGluc3RhbmNlVGVtcGxhdGUgPSBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRl
KCk7CisgICAgICAgIGluc3RhbmNlVGVtcGxhdGUtPlNldEludGVybmFsRmllbGRDb3VudChWOEN1
c3RvbTo6a1hNTEh0dHBSZXF1ZXN0SW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgVjhDbGFzc0luZGV4OjpYUEFUSEVWQUxVQVRPUjoKKyAgICAgICAg
ZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKFhQYXRoRXZhbHVhdG9yQ29u
c3RydWN0b3IpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OlhTTFRQ
Uk9DRVNTT1I6CisgICAgICAgIGRlc2NyaXB0b3ItPlNldENhbGxIYW5kbGVyKFVTRV9DQUxMQkFD
SyhYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBW
OENsYXNzSW5kZXg6OkNMSUVOVFJFQ1RMSVNUOgorICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5j
ZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX0lOREVYRURfUFJPUEVS
VFlfR0VUVEVSKENsaWVudFJlY3RMaXN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgICpjYWNoZUNlbGwgPSBkZXNjcmlwdG9yOwor
ICAgIHJldHVybiBkZXNjcmlwdG9yOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlw
ZSwgdm9pZCogaW1wbCkKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5U
TElTVEVORVIpOworICAgIEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRUQVJHRVQp
OworICAgIEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlQpOworCisgICAgYm9vbCBp
c0FjdGl2ZURvbU9iamVjdCA9IGZhbHNlOworICAgIHN3aXRjaCAodHlwZSkgeworI2RlZmluZSBN
QUtFX0NBU0UoVFlQRSwgTkFNRSkgY2FzZSBWOENsYXNzSW5kZXg6OlRZUEU6CisgICAgICAgIERP
TV9OT0RFX1RZUEVTKE1BS0VfQ0FTRSkKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICBTVkdfTk9E
RV9UWVBFUyhNQUtFX0NBU0UpCisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGNvbnZlcnROb2RlVG9W
OE9iamVjdChzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbCkpOworICAgIGNhc2UgVjhDbGFzc0luZGV4
OjpDU1NWQUxVRToKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRDU1NWYWx1ZVRvVjhPYmplY3Qoc3Rh
dGljX2Nhc3Q8Q1NTVmFsdWUqPihpbXBsKSk7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OkNTU1JV
TEU6CisgICAgICAgIHJldHVybiBjb252ZXJ0Q1NTUnVsZVRvVjhPYmplY3Qoc3RhdGljX2Nhc3Q8
Q1NTUnVsZSo+KGltcGwpKTsKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6U1RZTEVTSEVFVDoKKyAg
ICAgICAgcmV0dXJuIGNvbnZlcnRTdHlsZVNoZWV0VG9WOE9iamVjdChzdGF0aWNfY2FzdDxTdHls
ZVNoZWV0Kj4oaW1wbCkpOworICAgIGNhc2UgVjhDbGFzc0luZGV4OjpET01XSU5ET1c6CisgICAg
ICAgIHJldHVybiBjb252ZXJ0V2luZG93VG9WOE9iamVjdChzdGF0aWNfY2FzdDxET01XaW5kb3cq
PihpbXBsKSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgU1ZHX05PTk5PREVfVFlQRVMoTUFL
RV9DQVNFKQorICAgICAgICBpZiAodHlwZSA9PSBWOENsYXNzSW5kZXg6OlNWR0VMRU1FTlRJTlNU
QU5DRSkKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0U1ZHRWxlbWVudEluc3RhbmNlVG9WOE9i
amVjdChzdGF0aWNfY2FzdDxTVkdFbGVtZW50SW5zdGFuY2UqPihpbXBsKSk7CisgICAgICAgIHJl
dHVybiBjb252ZXJ0U1ZHT2JqZWN0V2l0aENvbnRleHRUb1Y4T2JqZWN0KHR5cGUsIGltcGwpOwor
I2VuZGlmCisKKyAgICAgICAgQUNUSVZFX0RPTV9PQkpFQ1RfVFlQRVMoTUFLRV9DQVNFKQorICAg
ICAgICBpc0FjdGl2ZURvbU9iamVjdCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICB9CisKKyN1bmRlZiBNQUtFX0NBU0UKKworICAgIGlmICgh
aW1wbCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisKKyAgICAvLyBOb24gRE9NIG5vZGUK
KyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiByZXN1bHQgPSBpc0FjdGl2ZURvbU9iamVj
dCA/IGdldEFjdGl2ZURPTU9iamVjdE1hcCgpLmdldChpbXBsKSA6IGdldERPTU9iamVjdE1hcCgp
LmdldChpbXBsKTsKKyAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkgeworICAgICAgICB2ODo6TG9j
YWw8djg6Ok9iamVjdD4gdjhPYmplY3QgPSBpbnN0YW50aWF0ZVY4T2JqZWN0KHR5cGUsIHR5cGUs
IGltcGwpOworICAgICAgICBpZiAoIXY4T2JqZWN0LklzRW1wdHkoKSkgeworICAgICAgICAgICAg
Ly8gR28gdGhyb3VnaCBiaWcgc3dpdGNoIHN0YXRlbWVudCwgaXQgaGFzIHNvbWUgZHVwbGljYXRp
b25zCisgICAgICAgICAgICAvLyB0aGF0IHdlcmUgaGFuZGxlZCBieSBjb2RlIGFib3ZlIChzdWNo
IGFzIENTU1ZBTFVFLCBDU1NSVUxFLCBldGMpLgorICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisjZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSBcCisgICAgICAgICAgICBjYXNlIFY4Q2xh
c3NJbmRleDo6VFlQRTogc3RhdGljX2Nhc3Q8TkFNRSo+KGltcGwpLT5yZWYoKTsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgRE9NX09CSkVDVF9UWVBFUyhNQUtFX0NBU0UpCisjdW5kZWYgTUFLRV9D
QVNFCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0ID0gdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD46Ok5ldyh2OE9iamVjdCk7CisgICAgICAgICAgICBpZiAoaXNBY3RpdmVE
b21PYmplY3QpCisgICAgICAgICAgICAgICAgc2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0
KGltcGwsIHJlc3VsdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0SlNX
cmFwcGVyRm9yRE9NT2JqZWN0KGltcGwsIHJlc3VsdCk7CisKKyAgICAgICAgICAgIC8vIFNwZWNp
YWwgY2FzZSBmb3Igbm9uLW5vZGUgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggYQorICAgICAgICAg
ICAgLy8gRE9NV2luZG93LiBCb3RoIFNhZmFyaSBhbmQgRkYgbGV0IHRoZSBKUyB3cmFwcGVycyBm
b3IgdGhlc2UKKyAgICAgICAgICAgIC8vIG9iamVjdHMgc3Vydml2ZSBHQy4gVG8gbWltaWMgdGhl
aXIgYmVoYXZpb3IsIFY4IGNyZWF0ZXMKKyAgICAgICAgICAgIC8vIGhpZGRlbiByZWZlcmVuY2Vz
IGZyb20gdGhlIERPTVdpbmRvdyB0byB0aGVzZSB3cmFwcGVyCisgICAgICAgICAgICAvLyBvYmpl
Y3RzLiBUaGVzZSByZWZlcmVuY2VzIGdldCBjbGVhcmVkIHdoZW4gdGhlIERPTVdpbmRvdyBpcwor
ICAgICAgICAgICAgLy8gcmV1c2VkIGJ5IGEgbmV3IHBhZ2UuCisgICAgICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpDT05TT0xFOgorICAgICAg
ICAgICAgICAgIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShzdGF0aWNfY2FzdDxDb25zb2xlKj4o
aW1wbCktPmZyYW1lKCksIFY4Q3VzdG9tOjprRE9NV2luZG93Q29uc29sZUluZGV4LCByZXN1bHQp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6
OkhJU1RPUlk6CisgICAgICAgICAgICAgICAgc2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKHN0YXRp
Y19jYXN0PEhpc3RvcnkqPihpbXBsKS0+ZnJhbWUoKSwgVjhDdXN0b206OmtET01XaW5kb3dIaXN0
b3J5SW5kZXgsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFY4Q2xhc3NJbmRleDo6TkFWSUdBVE9SOgorICAgICAgICAgICAgICAgIHNldEhpZGRlbldp
bmRvd1JlZmVyZW5jZShzdGF0aWNfY2FzdDxOYXZpZ2F0b3IqPihpbXBsKS0+ZnJhbWUoKSwgVjhD
dXN0b206OmtET01XaW5kb3dOYXZpZ2F0b3JJbmRleCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpTQ1JFRU46CisgICAgICAg
ICAgICAgICAgc2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKHN0YXRpY19jYXN0PFNjcmVlbio+KGlt
cGwpLT5mcmFtZSgpLCBWOEN1c3RvbTo6a0RPTVdpbmRvd1NjcmVlbkluZGV4LCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OkxP
Q0FUSU9OOgorICAgICAgICAgICAgICAgIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShzdGF0aWNf
Y2FzdDxMb2NhdGlvbio+KGltcGwpLT5mcmFtZSgpLCBWOEN1c3RvbTo6a0RPTVdpbmRvd0xvY2F0
aW9uSW5kZXgsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFY4Q2xhc3NJbmRleDo6RE9NU0VMRUNUSU9OOgorICAgICAgICAgICAgICAgIHNldEhpZGRl
bldpbmRvd1JlZmVyZW5jZShzdGF0aWNfY2FzdDxET01TZWxlY3Rpb24qPihpbXBsKS0+ZnJhbWUo
KSwgVjhDdXN0b206OmtET01XaW5kb3dET01TZWxlY3Rpb25JbmRleCwgcmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpCQVJJTkZP
OiB7CisgICAgICAgICAgICAgICAgQmFySW5mbyogYmFySW5mbyA9IHN0YXRpY19jYXN0PEJhcklu
Zm8qPihpbXBsKTsKKyAgICAgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBiYXJJbmZvLT5mcmFt
ZSgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYmFySW5mby0+dHlwZSgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBCYXJJbmZvOjpMb2NhdGlvbmJhcjoKKyAgICAgICAgICAgICAgICAgICAg
c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOEN1c3RvbTo6a0RPTVdpbmRvd0xvY2F0
aW9uYmFySW5kZXgsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgQmFySW5mbzo6TWVudWJhcjoKKyAgICAgICAgICAgICAgICAgICAgc2V0
SGlkZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOEN1c3RvbTo6a0RPTVdpbmRvd01lbnViYXJJ
bmRleCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBCYXJJbmZvOjpQZXJzb25hbGJhcjoKKyAgICAgICAgICAgICAgICAgICAgc2V0SGlk
ZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOEN1c3RvbTo6a0RPTVdpbmRvd1BlcnNvbmFsYmFy
SW5kZXgsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgQmFySW5mbzo6U2Nyb2xsYmFyczoKKyAgICAgICAgICAgICAgICAgICAgc2V0SGlk
ZGVuV2luZG93UmVmZXJlbmNlKGZyYW1lLCBWOEN1c3RvbTo6a0RPTVdpbmRvd1Njcm9sbGJhcnNJ
bmRleCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBCYXJJbmZvOjpTdGF0dXNiYXI6CisgICAgICAgICAgICAgICAgICAgIHNldEhpZGRl
bldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhDdXN0b206OmtET01XaW5kb3dTdGF0dXNiYXJJbmRl
eCwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBCYXJJbmZvOjpUb29sYmFyOgorICAgICAgICAgICAgICAgICAgICBzZXRIaWRkZW5XaW5k
b3dSZWZlcmVuY2UoZnJhbWUsIFY4Q3VzdG9tOjprRE9NV2luZG93VG9vbGJhckluZGV4LCByZXN1
bHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgVjhET01XcmFwcGVyOjpzZXRIaWRkZW5XaW5k
b3dSZWZlcmVuY2UoRnJhbWUqIGZyYW1lLCBjb25zdCBpbnQgaW50ZXJuYWxJbmRleCwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBqc09iamVjdCkKK3sKKyAgICAvLyBHZXQgRE9NV2luZG93CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOyAvLyBPYmplY3QgbWlnaHQgYmUgZGV0YWNoZWQg
ZnJvbSB3aW5kb3cKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBWOFBy
b3h5Ojpjb250ZXh0KGZyYW1lKTsKKyAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKGludGVybmFsSW5kZXggPCBWOEN1c3RvbTo6a0RPTVdp
bmRvd0ludGVybmFsRmllbGRDb3VudCk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGds
b2JhbCA9IHY4Q29udGV4dC0+R2xvYmFsKCk7CisgICAgLy8gTG9vayBmb3IgcmVhbCBET00gd3Jh
cHBlci4KKyAgICBnbG9iYWwgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFz
c0luZGV4OjpET01XSU5ET1csIGdsb2JhbCk7CisgICAgQVNTRVJUKCFnbG9iYWwuSXNFbXB0eSgp
KTsKKyAgICBBU1NFUlQoZ2xvYmFsLT5HZXRJbnRlcm5hbEZpZWxkKGludGVybmFsSW5kZXgpLT5J
c1VuZGVmaW5lZCgpKTsKKyAgICBnbG9iYWwtPlNldEludGVybmFsRmllbGQoaW50ZXJuYWxJbmRl
eCwganNPYmplY3QpOworfQorCitWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgVjhET01XcmFw
cGVyOjpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK3sKKyAg
ICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7CisgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHR5cGUgPSBvYmplY3QtPkdldEludGVybmFsRmllbGQoVjhDdXN0
b206OmtET01XcmFwcGVyVHlwZUluZGV4KTsKKyAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpGcm9t
SW50KHR5cGUtPkludDMyVmFsdWUoKSk7Cit9CisKK3ZvaWQqIFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0SW1wbChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKK3sKKyAgICAvLyBOYXRpdmUgZXZlbnQgbGlzdGVu
ZXIgaXMgcGVyIGZyYW1lLCBpdCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIGdlbmVyaWMgZnVu
Y3Rpb24uCisgICAgQVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpFVkVOVExJU1RFTkVSKTsK
KyAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UVEFSR0VUKTsKKworICAgIEFT
U0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKKworICAgIHN3aXRj
aCAodHlwZSkgeworI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkgY2FzZSBWOENsYXNzSW5k
ZXg6OlRZUEU6CisgICAgICAgIERPTV9OT0RFX1RZUEVTKE1BS0VfQ0FTRSkKKyNpZiBFTkFCTEUo
U1ZHKQorICAgICAgICBTVkdfTk9ERV9UWVBFUyhNQUtFX0NBU0UpCisjZW5kaWYKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgVjhDbGFz
c0luZGV4OjpYTUxIVFRQUkVRVUVTVDoKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVy
VG9OYXRpdmU8WE1MSHR0cFJlcXVlc3Q+KG9iamVjdCk7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6
OkVWRU5UOgorICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxFdmVudD4o
b2JqZWN0KTsKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q1NTUlVMRToKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q1NTUnVsZT4ob2JqZWN0KTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisjdW5kZWYgTUFLRV9DQVNFCisKKyAgICByZXR1cm4g
Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTx2b2lkPihvYmplY3QpOworfQorCisKK3ZvaWQqIFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvU1ZHUE9EVHlwZUltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCit7CisgICAgcmV0dXJu
IGlzV3JhcHBlck9mVHlwZShvYmplY3QsIHR5cGUpID8gY29udmVydERPTVdyYXBwZXJUb05hdGl2
ZTx2b2lkPihvYmplY3QpIDogMDsKK30KKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOERPTVdy
YXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUs
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuSXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKworICAgIHY4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2NyaXB0b3IgPSBWOERPTVdyYXBwZXI6Omdl
dFRlbXBsYXRlKHR5cGUpOworICAgIHdoaWxlICh2YWx1ZS0+SXNPYmplY3QoKSkgeworICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QodmFsdWUpOworICAgICAgICBpZiAoZGVzY3JpcHRvci0+SGFzSW5zdGFuY2Uob2JqZWN0
KSkKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisKKyAgICAgICAgdmFsdWUgPSBvYmplY3Qt
PkdldFByb3RvdHlwZSgpOworICAgIH0KKyAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0
b3IoKTsKK30gCisKK3ZvaWQqIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGVI
ZWxwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIEFTU0VSVChtYXliZURP
TVdyYXBwZXIodmFsdWUpKTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0ID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSk7CisKKyAgICBBU1NFUlQoZG9tV3Jh
cHBlclR5cGUob2JqZWN0KSA9PSBWOENsYXNzSW5kZXg6Ok5PREUpOworCisgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBvYmplY3QtPkdldEludGVybmFsRmllbGQoVjhDdXN0b206
OmtET01XcmFwcGVyT2JqZWN0SW5kZXgpOworICAgIHJldHVybiBleHRyYWN0Q1BvaW50ZXI8Tm9k
ZT4od3JhcHBlcik7Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gVjhET01XcmFwcGVyOjp3
cmFwTmF0aXZlTm9kZUZpbHRlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZmlsdGVyKQoreworICAg
IC8vIEEgTm9kZUZpbHRlciBpcyB1c2VkIHdoZW4gd2Fsa2luZyB0aHJvdWdoIGEgRE9NIHRyZWUg
b3IgaXRlcmF0aW5nIHRyZWUKKyAgICAvLyBub2Rlcy4KKyAgICAvLyBGSVhNRTogd2UgbWF5IHdh
bnQgdG8gY2FjaGUgTm9kZUZpbHRlckNvbmRpdGlvbiBhbmQgTm9kZUZpbHRlcgorICAgIC8vIG9i
amVjdCwgYnV0IGl0IGlzIG1pbm9yLgorICAgIC8vIE5vZGVGaWx0ZXIgaXMgcGFzc2VkIHRvIE5v
ZGVJdGVyYXRvciB0aGF0IGhhcyBhIHJlZiBjb3VudGVkIHBvaW50ZXIKKyAgICAvLyB0byBOb2Rl
RmlsdGVyLiBOb2RlRmlsdGVyIGhhcyBhIHJlZiBjb3VudGVkIHBvaW50ZXIgdG8gTm9kZUZpbHRl
ckNvbmRpdGlvbi4KKyAgICAvLyBJbiBOb2RlRmlsdGVyQ29uZGl0aW9uLCBmaWx0ZXIgb2JqZWN0
IGlzIHBlcnNpc3RlZCBpbiBpdHMgY29uc3RydWN0b3IsCisgICAgLy8gYW5kIGRpc3Bvc2VkIGlu
IGl0cyBkZXN0cnVjdG9yLgorICAgIGlmICghZmlsdGVyLT5Jc0Z1bmN0aW9uKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgTm9kZUZpbHRlckNvbmRpdGlvbiogY29uZGl0aW9uID0gbmV3IFY4
Tm9kZUZpbHRlckNvbmRpdGlvbihmaWx0ZXIpOworICAgIHJldHVybiBOb2RlRmlsdGVyOjpjcmVh
dGUoY29uZGl0aW9uKTsKK30KKwordjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6
aW5zdGFudGlhdGVWOE9iamVjdChWOFByb3h5KiBwcm94eSwgVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIGRlc2NyaXB0b3JUeXBlLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgY3B0clR5
cGUsIHZvaWQqIGltcGwpCit7CisgICAgLy8gTWFrZSBhIHNwZWNpYWwgY2FzZSBmb3IgZG9jdW1l
bnQuYWxsCisgICAgaWYgKGRlc2NyaXB0b3JUeXBlID09IFY4Q2xhc3NJbmRleDo6SFRNTENPTExF
Q1RJT04gJiYgc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihpbXBsKS0+dHlwZSgpID09IERv
Y0FsbCkKKyAgICAgICAgZGVzY3JpcHRvclR5cGUgPSBWOENsYXNzSW5kZXg6OlVOREVURUNUQUJM
RUhUTUxDT0xMRUNUSU9OOworCisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgVjhQcm94eSogcHJv
eHkgPSBWOFByb3h5OjpyZXRyaWV2ZSgpOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0
YW5jZTsKKyAgICBpZiAocHJveHkpCisgICAgICAgIGluc3RhbmNlID0gcHJveHktPmNyZWF0ZVdy
YXBwZXJGcm9tQ2FjaGUoZGVzY3JpcHRvclR5cGUpOworICAgIGVsc2UgeworICAgICAgICB2ODo6
TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IFY4RE9NV3JhcHBlcjo6Z2V0VGVtcGxhdGUo
ZGVzY3JpcHRvclR5cGUpLT5HZXRGdW5jdGlvbigpOworICAgICAgICBpbnN0YW5jZSA9IFNhZmVB
bGxvY2F0aW9uOjpuZXdJbnN0YW5jZShmdW5jdGlvbik7CisgICAgfQorICAgIGlmICghaW5zdGFu
Y2UuSXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEF2b2lkIHNldHRpbmcgdGhlIERPTSB3cmFwcGVy
IGZvciBmYWlsZWQgYWxsb2NhdGlvbnMuCisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3Jh
cHBlcihpbnN0YW5jZSwgVjhDbGFzc0luZGV4OjpUb0ludChjcHRyVHlwZSksIGltcGwpOworICAg
IH0KKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQgVjhET01XcmFwcGVyOjpzZXRET01X
cmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBpbnQgdHlwZSwgdm9pZCogY3B0
cikKK3sKKyAgICBBU1NFUlQob2JqZWN0LT5JbnRlcm5hbEZpZWxkQ291bnQoKSA+PSAyKTsKKyAg
ICBvYmplY3QtPlNldEludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XcmFwcGVyT2JqZWN0SW5k
ZXgsIHdyYXBDUG9pbnRlcihjcHRyKSk7CisgICAgb2JqZWN0LT5TZXRJbnRlcm5hbEZpZWxkKFY4
Q3VzdG9tOjprRE9NV3JhcHBlclR5cGVJbmRleCwgdjg6OkludGVnZXI6Ok5ldyh0eXBlKSk7Cit9
CisKKyNpZm5kZWYgTkRFQlVHCitib29sIFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuSXNFbXB0eSgpIHx8
ICF2YWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZh
bHVlKTsKKyAgICBpZiAoIW9iamVjdC0+SW50ZXJuYWxGaWVsZENvdW50KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEFTU0VSVChvYmplY3QtPkludGVybmFsRmllbGRDb3VudCgpID49
IFY4Q3VzdG9tOjprRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQpOworCisgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHR5cGUgPSBvYmplY3QtPkdldEludGVybmFsRmllbGQoVjhDdXN0
b206OmtET01XcmFwcGVyVHlwZUluZGV4KTsKKyAgICBBU1NFUlQodHlwZS0+SXNJbnQzMigpKTsK
KyAgICBBU1NFUlQoVjhDbGFzc0luZGV4OjpJTlZBTElEX0NMQVNTX0lOREVYIDwgdHlwZS0+SW50
MzJWYWx1ZSgpICYmIHR5cGUtPkludDMyVmFsdWUoKSA8IFY4Q2xhc3NJbmRleDo6Q0xBU1NJTkRF
WF9FTkQpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBvYmplY3QtPkdl
dEludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XcmFwcGVyT2JqZWN0SW5kZXgpOworICAgIEFT
U0VSVCh3cmFwcGVyLT5Jc051bWJlcigpIHx8IHdyYXBwZXItPklzRXh0ZXJuYWwoKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitib29sIFY4RE9NV3JhcHBlcjo6aXNET01FdmVu
dFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIC8vIEFsbCBraW5k
cyBvZiBldmVudHMgdXNlIEVWRU5UIGFzIGRvbSB0eXBlIGluIEpTIHdyYXBwZXJzLgorICAgIC8v
IFNlZSBFdmVudFRvVjhPYmplY3QKKyAgICByZXR1cm4gaXNXcmFwcGVyT2ZUeXBlKHZhbHVlLCBW
OENsYXNzSW5kZXg6OkVWRU5UKTsKK30KKworYm9vbCBWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9m
VHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSBjbGFzc1R5cGUpCit7CisgICAgaWYgKHZhbHVlLklzRW1wdHkoKSB8fCAhdmFsdWUtPklz
T2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gb2JqZWN0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSk7CisgICAg
aWYgKCFvYmplY3QtPkludGVybmFsRmllbGRDb3VudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBBU1NFUlQob2JqZWN0LT5JbnRlcm5hbEZpZWxkQ291bnQoKSA+PSBWOEN1c3RvbTo6
a0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50KTsKKworICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB3cmFwcGVyID0gb2JqZWN0LT5HZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9N
V3JhcHBlck9iamVjdEluZGV4KTsKKyAgICBBU1NFUlQod3JhcHBlci0+SXNOdW1iZXIoKSB8fCB3
cmFwcGVyLT5Jc0V4dGVybmFsKCkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHR5cGUg
PSBvYmplY3QtPkdldEludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XcmFwcGVyVHlwZUluZGV4
KTsKKyAgICBBU1NFUlQodHlwZS0+SXNJbnQzMigpKTsKKyAgICBBU1NFUlQoVjhDbGFzc0luZGV4
OjpJTlZBTElEX0NMQVNTX0lOREVYIDwgdHlwZS0+SW50MzJWYWx1ZSgpICYmIHR5cGUtPkludDMy
VmFsdWUoKSA8IFY4Q2xhc3NJbmRleDo6Q0xBU1NJTkRFWF9FTkQpOworCisgICAgcmV0dXJuIFY4
Q2xhc3NJbmRleDo6RnJvbUludCh0eXBlLT5JbnQzMlZhbHVlKCkpID09IGNsYXNzVHlwZTsKK30K
KworI2lmIEVOQUJMRShWSURFTykKKyNkZWZpbmUgRk9SX0VBQ0hfVklERU9fVEFHKG1hY3JvKSAg
ICAgICAgICAgICAgICAgIFwKKyAgICBtYWNybyhhdWRpbywgQVVESU8pICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBtYWNybyhzb3VyY2UsIFNPVVJDRSkgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBtYWNybyh2aWRlbywgVklERU8pCisjZWxzZQorI2RlZmluZSBGT1Jf
RUFDSF9WSURFT19UQUcobWFjcm8pCisjZW5kaWYKKworI2RlZmluZSBGT1JfRUFDSF9UQUcobWFj
cm8pICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGEsIEFOQ0hPUikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGFwcGxldCwgQVBQTEVUKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGFyZWEsIEFSRUEpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGJhc2UsIEJBU0UpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGJhc2Vmb250LCBCQVNFRk9OVCkgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIG1hY3JvKGJsb2NrcXVvdGUsIEJMT0NLUVVPVEUpICAgICAgICAg
ICAgICAgICAgXAorICAgIG1hY3JvKGJvZHksIEJPRFkpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIG1hY3JvKGJyLCBCUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIG1hY3JvKGJ1dHRvbiwgQlVUVE9OKSAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIG1hY3JvKGNhcHRpb24sIFRBQkxFQ0FQVElPTikgICAgICAgICAgICAgICAgICAgXAor
ICAgIG1hY3JvKGNvbCwgVEFCTEVDT0wpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IG1hY3JvKGNvbGdyb3VwLCBUQUJMRUNPTCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1h
Y3JvKGRlbCwgTU9EKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3Jv
KGNhbnZhcywgQ0FOVkFTKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGRp
ciwgRElSRUNUT1JZKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGRpdiwg
RElWKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGRsLCBETElT
VCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGVtYmVkLCBFTUJF
RCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGZpZWxkc2V0LCBGSUVM
RFNFVCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGZvbnQsIEZPTlQpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGZvcm0sIEZPUk0pICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGZyYW1lLCBGUkFNRSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGZyYW1lc2V0LCBGUkFNRVNFVCkgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGgxLCBIRUFESU5HKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIG1hY3JvKGgyLCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIG1hY3JvKGgzLCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIG1hY3JvKGg0LCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIG1hY3JvKGg1LCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIG1hY3JvKGg2LCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIG1hY3JvKGhlYWQsIEhFQUQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IG1hY3JvKGhyLCBIUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1h
Y3JvKGh0bWwsIEhUTUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3Jv
KGltZywgSU1BR0UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGlm
cmFtZSwgSUZSQU1FKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGltYWdl
LCBJTUFHRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGlucHV0LCBJ
TlBVVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGlucywgTU9EKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGlzaW5kZXgsIElTSU5E
RVgpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGtleWdlbiwgU0VMRUNUKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGxhYmVsLCBMQUJFTCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGxlZ2VuZCwgTEVHRU5EKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGxpLCBMSSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKGxpbmssIExJTkspICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIG1hY3JvKGxpc3RpbmcsIFBSRSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIG1hY3JvKG1hcCwgTUFQKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIG1hY3JvKG1hcnF1ZWUsIE1BUlFVRUUpICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIG1hY3JvKG1lbnUsIE1FTlUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIG1hY3JvKG1ldGEsIE1FVEEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIG1hY3JvKG9iamVjdCwgT0JKRUNUKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IG1hY3JvKG9sLCBPTElTVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1h
Y3JvKG9wdGdyb3VwLCBPUFRHUk9VUCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3Jv
KG9wdGlvbiwgT1BUSU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKHAs
IFBBUkFHUkFQSCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKHBhcmFt
LCBQQVJBTSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKHByZSwgUFJF
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKHEsIFFVT1RFKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKHNjcmlwdCwgU0NSSVBU
KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKHNlbGVjdCwgU0VMRUNUKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKHN0eWxlLCBTVFlMRSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKHRhYmxlLCBUQUJMRSkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKHRoZWFkLCBUQUJMRVNFQ1RJT04pICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1hY3JvKHRib2R5LCBUQUJMRVNFQ1RJT04pICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIG1hY3JvKHRmb290LCBUQUJMRVNFQ1RJT04pICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIG1hY3JvKHRkLCBUQUJMRUNFTEwpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIG1hY3JvKHRoLCBUQUJMRUNFTEwpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIG1hY3JvKHRyLCBUQUJMRVJPVykgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIG1hY3JvKHRleHRhcmVhLCBURVhUQVJFQSkgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIG1hY3JvKHRpdGxlLCBUSVRMRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IG1hY3JvKHVsLCBVTElTVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1h
Y3JvKHhtcCwgUFJFKQorCitWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgVjhET01XcmFwcGVy
OjpodG1sRWxlbWVudFR5cGUoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlPiBXcmFwcGVyVHlwZU1h
cDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdyYXBwZXJUeXBlTWFwLCB3cmFwcGVyVHlwZU1h
cCwgKCkpOworICAgIGlmICh3cmFwcGVyVHlwZU1hcC5pc0VtcHR5KCkpIHsKKyNkZWZpbmUgQURE
X1RPX0hBU0hfTUFQKHRhZywgbmFtZSkgXAorICAgICAgICB3cmFwcGVyVHlwZU1hcC5zZXQoI3Rh
ZywgVjhDbGFzc0luZGV4OjpIVE1MIyNuYW1lIyNFTEVNRU5UKTsKKyAgICAgICAgRk9SX0VBQ0hf
VEFHKEFERF9UT19IQVNIX01BUCkKKyNpZiBFTkFCTEUoVklERU8pCisgICAgICAgIGlmIChNZWRp
YVBsYXllcjo6aXNBdmFpbGFibGUoKSkgeworICAgICAgICAgICAgRk9SX0VBQ0hfVklERU9fVEFH
KEFERF9UT19IQVNIX01BUCkKKyAgICAgICAgfQorI2VuZGlmCisjdW5kZWYgQUREX1RPX0hBU0hf
TUFQCisgICAgfQorCisgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSB3cmFw
cGVyVHlwZU1hcC5nZXQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICBpZiAoIXR5
cGUpCisgICAgICAgIHJldHVybiBWOENsYXNzSW5kZXg6OkhUTUxFTEVNRU5UOworICAgIHJldHVy
biB0eXBlOworfQorI3VuZGVmIEZPUl9FQUNIX1RBRworCisjaWYgRU5BQkxFKFNWRykKKworI2lm
IEVOQUJMRShTVkdfQU5JTUFUSU9OKQorI2RlZmluZSBGT1JfRUFDSF9BTklNQVRJT05fVEFHKG1h
Y3JvKSBcCisgICAgbWFjcm8oYW5pbWF0ZUNvbG9yLCBBTklNQVRFQ09MT1IpIFwKKyAgICBtYWNy
byhhbmltYXRlLCBBTklNQVRFKSBcCisgICAgbWFjcm8oYW5pbWF0ZVRyYW5zZm9ybSwgQU5JTUFU
RVRSQU5TRk9STSkgXAorICAgIG1hY3JvKHNldCwgU0VUKQorI2Vsc2UKKyNkZWZpbmUgRk9SX0VB
Q0hfQU5JTUFUSU9OX1RBRyhtYWNybykKKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWR19GSUxURVJT
KQorI2RlZmluZSBGT1JfRUFDSF9GSUxURVJTX1RBRyhtYWNybykgXAorICAgIG1hY3JvKGZlQmxl
bmQsIEZFQkxFTkQpIFwKKyAgICBtYWNybyhmZUNvbG9yTWF0cml4LCBGRUNPTE9STUFUUklYKSBc
CisgICAgbWFjcm8oZmVDb21wb25lbnRUcmFuc2ZlciwgRkVDT01QT05FTlRUUkFOU0ZFUikgXAor
ICAgIG1hY3JvKGZlQ29tcG9zaXRlLCBGRUNPTVBPU0lURSkgXAorICAgIG1hY3JvKGZlRGlmZnVz
ZUxpZ2h0aW5nLCBGRURJRkZVU0VMSUdIVElORykgXAorICAgIG1hY3JvKGZlRGlzcGxhY2VtZW50
TWFwLCBGRURJU1BMQUNFTUVOVE1BUCkgXAorICAgIG1hY3JvKGZlRGlzdGFudExpZ2h0LCBGRURJ
U1RBTlRMSUdIVCkgXAorICAgIG1hY3JvKGZlRmxvb2QsIEZFRkxPT0QpIFwKKyAgICBtYWNybyhm
ZUZ1bmNBLCBGRUZVTkNBKSBcCisgICAgbWFjcm8oZmVGdW5jQiwgRkVGVU5DQikgXAorICAgIG1h
Y3JvKGZlRnVuY0csIEZFRlVOQ0cpIFwKKyAgICBtYWNybyhmZUZ1bmNSLCBGRUZVTkNSKSBcCisg
ICAgbWFjcm8oZmVHYXVzc2lhbkJsdXIsIEZFR0FVU1NJQU5CTFVSKSBcCisgICAgbWFjcm8oZmVJ
bWFnZSwgRkVJTUFHRSkgXAorICAgIG1hY3JvKGZlTWVyZ2UsIEZFTUVSR0UpIFwKKyAgICBtYWNy
byhmZU1lcmdlTm9kZSwgRkVNRVJHRU5PREUpIFwKKyAgICBtYWNybyhmZU9mZnNldCwgRkVPRkZT
RVQpIFwKKyAgICBtYWNybyhmZVBvaW50TGlnaHQsIEZFUE9JTlRMSUdIVCkgXAorICAgIG1hY3Jv
KGZlU3BlY3VsYXJMaWdodGluZywgRkVTUEVDVUxBUkxJR0hUSU5HKSBcCisgICAgbWFjcm8oZmVT
cG90TGlnaHQsIEZFU1BPVExJR0hUKSBcCisgICAgbWFjcm8oZmVUaWxlLCBGRVRJTEUpIFwKKyAg
ICBtYWNybyhmZVR1cmJ1bGVuY2UsIEZFVFVSQlVMRU5DRSkgXAorICAgIG1hY3JvKGZpbHRlciwg
RklMVEVSKQorI2Vsc2UKKyNkZWZpbmUgRk9SX0VBQ0hfRklMVEVSU19UQUcobWFjcm8pCisjZW5k
aWYKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisjZGVmaW5lIEZPUl9FQUNIX0ZPTlRTX1RBRyht
YWNybykgXAorICAgIG1hY3JvKGRlZmluaXRpb24tc3JjLCBERUZJTklUSU9OU1JDKSBcCisgICAg
bWFjcm8oZm9udC1mYWNlLCBGT05URkFDRSkgXAorICAgIG1hY3JvKGZvbnQtZmFjZS1mb3JtYXQs
IEZPTlRGQUNFRk9STUFUKSBcCisgICAgbWFjcm8oZm9udC1mYWNlLW5hbWUsIEZPTlRGQUNFTkFN
RSkgXAorICAgIG1hY3JvKGZvbnQtZmFjZS1zcmMsIEZPTlRGQUNFU1JDKSBcCisgICAgbWFjcm8o
Zm9udC1mYWNlLXVyaSwgRk9OVEZBQ0VVUkkpCisjZWxzZQorI2RlZmluZSBGT1JfRUFDSF9GT05U
U19UQUcobWFyY28pCisjZW5kaWYKKworI2lmIEVOQUJMRShTVkdfRk9SRUlHTl9PQkpFQ1QpCisj
ZGVmaW5lIEZPUl9FQUNIX0ZPUkVJR05fT0JKRUNUX1RBRyhtYWNybykgXAorICAgIG1hY3JvKGZv
cmVpZ25PYmplY3QsIEZPUkVJR05PQkpFQ1QpCisjZWxzZQorI2RlZmluZSBGT1JfRUFDSF9GT1JF
SUdOX09CSkVDVF9UQUcobWFjcm8pCisjZW5kaWYKKworI2lmIEVOQUJMRShTVkdfVVNFKQorI2Rl
ZmluZSBGT1JfRUFDSF9VU0VfVEFHKG1hY3JvKSBcCisgICAgbWFjcm8odXNlLCBVU0UpCisjZWxz
ZQorI2RlZmluZSBGT1JfRUFDSF9VU0VfVEFHKG1hY3JvKQorI2VuZGlmCisKKyNkZWZpbmUgRk9S
X0VBQ0hfVEFHKG1hY3JvKSBcCisgICAgRk9SX0VBQ0hfQU5JTUFUSU9OX1RBRyhtYWNybykgXAor
ICAgIEZPUl9FQUNIX0ZJTFRFUlNfVEFHKG1hY3JvKSBcCisgICAgRk9SX0VBQ0hfRk9OVFNfVEFH
KG1hY3JvKSBcCisgICAgRk9SX0VBQ0hfRk9SRUlHTl9PQkpFQ1RfVEFHKG1hY3JvKSBcCisgICAg
Rk9SX0VBQ0hfVVNFX1RBRyhtYWNybykgXAorICAgIG1hY3JvKGEsIEEpIFwKKyAgICBtYWNybyhh
bHRHbHlwaCwgQUxUR0xZUEgpIFwKKyAgICBtYWNybyhjaXJjbGUsIENJUkNMRSkgXAorICAgIG1h
Y3JvKGNsaXBQYXRoLCBDTElQUEFUSCkgXAorICAgIG1hY3JvKGN1cnNvciwgQ1VSU09SKSBcCisg
ICAgbWFjcm8oZGVmcywgREVGUykgXAorICAgIG1hY3JvKGRlc2MsIERFU0MpIFwKKyAgICBtYWNy
byhlbGxpcHNlLCBFTExJUFNFKSBcCisgICAgbWFjcm8oZywgRykgXAorICAgIG1hY3JvKGdseXBo
LCBHTFlQSCkgXAorICAgIG1hY3JvKGltYWdlLCBJTUFHRSkgXAorICAgIG1hY3JvKGxpbmVhckdy
YWRpZW50LCBMSU5FQVJHUkFESUVOVCkgXAorICAgIG1hY3JvKGxpbmUsIExJTkUpIFwKKyAgICBt
YWNybyhtYXJrZXIsIE1BUktFUikgXAorICAgIG1hY3JvKG1hc2ssIE1BU0spIFwKKyAgICBtYWNy
byhtZXRhZGF0YSwgTUVUQURBVEEpIFwKKyAgICBtYWNybyhwYXRoLCBQQVRIKSBcCisgICAgbWFj
cm8ocGF0dGVybiwgUEFUVEVSTikgXAorICAgIG1hY3JvKHBvbHlsaW5lLCBQT0xZTElORSkgXAor
ICAgIG1hY3JvKHBvbHlnb24sIFBPTFlHT04pIFwKKyAgICBtYWNybyhyYWRpYWxHcmFkaWVudCwg
UkFESUFMR1JBRElFTlQpIFwKKyAgICBtYWNybyhyZWN0LCBSRUNUKSBcCisgICAgbWFjcm8oc2Ny
aXB0LCBTQ1JJUFQpIFwKKyAgICBtYWNybyhzdG9wLCBTVE9QKSBcCisgICAgbWFjcm8oc3R5bGUs
IFNUWUxFKSBcCisgICAgbWFjcm8oc3ZnLCBTVkcpIFwKKyAgICBtYWNybyhzd2l0Y2gsIFNXSVRD
SCkgXAorICAgIG1hY3JvKHN5bWJvbCwgU1lNQk9MKSBcCisgICAgbWFjcm8odGV4dCwgVEVYVCkg
XAorICAgIG1hY3JvKHRleHRQYXRoLCBURVhUUEFUSCkgXAorICAgIG1hY3JvKHRpdGxlLCBUSVRM
RSkgXAorICAgIG1hY3JvKHRyZWYsIFRSRUYpIFwKKyAgICBtYWNybyh0c3BhbiwgVFNQQU4pIFwK
KyAgICBtYWNybyh2aWV3LCBWSUVXKSBcCisgICAgLy8gZW5kIG9mIG1hY3JvCisKK1Y4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSBWOERPTVdyYXBwZXI6OnN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1l
bnQqIGVsZW1lbnQpCit7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlPiBXcmFwcGVyVHlwZU1hcDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFdyYXBwZXJUeXBlTWFwLCB3cmFwcGVyVHlwZU1hcCwgKCkpOworICAgIGlmICh3cmFwcGVyVHlw
ZU1hcC5pc0VtcHR5KCkpIHsKKyNkZWZpbmUgQUREX1RPX0hBU0hfTUFQKHRhZywgbmFtZSkgXAor
ICAgICAgICB3cmFwcGVyVHlwZU1hcC5zZXQoI3RhZywgVjhDbGFzc0luZGV4OjpTVkcjI25hbWUj
I0VMRU1FTlQpOworICAgICAgICBGT1JfRUFDSF9UQUcoQUREX1RPX0hBU0hfTUFQKQorI3VuZGVm
IEFERF9UT19IQVNIX01BUAorICAgIH0KKworICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSB0eXBlID0gd3JhcHBlclR5cGVNYXAuZ2V0KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSk7
CisgICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdFTEVNRU5U
OworICAgIHJldHVybiB0eXBlOworfQorI3VuZGVmIEZPUl9FQUNIX1RBRworCisjZW5kaWYgLy8g
RU5BQkxFKFNWRykKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVy
dEV2ZW50VG9WOE9iamVjdChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFldmVudCkKKyAgICAg
ICAgcmV0dXJuIHY4OjpOdWxsKCk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQoZXZlbnQpOworICAgIGlmICghd3JhcHBlci5Jc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworCisgICAgVjhDbGFzc0luZGV4OjpWOFdy
YXBwZXJUeXBlIHR5cGUgPSBWOENsYXNzSW5kZXg6OkVWRU5UOworCisgICAgaWYgKGV2ZW50LT5p
c1VJRXZlbnQoKSkgeworICAgICAgICBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAg
ICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6S0VZQk9BUkRFVkVOVDsKKyAgICAgICAgZWxz
ZSBpZiAoZXZlbnQtPmlzVGV4dEV2ZW50KCkpCisgICAgICAgICAgICB0eXBlID0gVjhDbGFzc0lu
ZGV4OjpURVhURVZFTlQ7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkK
KyAgICAgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6Ok1PVVNFRVZFTlQ7CisgICAgICAgIGVs
c2UgaWYgKGV2ZW50LT5pc1doZWVsRXZlbnQoKSkKKyAgICAgICAgICAgIHR5cGUgPSBWOENsYXNz
SW5kZXg6OldIRUVMRVZFTlQ7CisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgZWxzZSBpZiAoZXZl
bnQtPmlzU1ZHWm9vbUV2ZW50KCkpCisgICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpT
VkdaT09NRVZFTlQ7CisjZW5kaWYKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHlwZSA9IFY4
Q2xhc3NJbmRleDo6VUlFVkVOVDsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT5pc011dGF0aW9uRXZl
bnQoKSkKKyAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6TVVUQVRJT05FVkVOVDsKKyAgICBl
bHNlIGlmIChldmVudC0+aXNPdmVyZmxvd0V2ZW50KCkpCisgICAgICAgIHR5cGUgPSBWOENsYXNz
SW5kZXg6Ok9WRVJGTE9XRVZFTlQ7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzTWVzc2FnZUV2ZW50
KCkpCisgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6Ok1FU1NBR0VFVkVOVDsKKyAgICBlbHNl
IGlmIChldmVudC0+aXNQcm9ncmVzc0V2ZW50KCkpIHsKKyAgICAgICAgaWYgKGV2ZW50LT5pc1hN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCgpKQorICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJ
bmRleDo6WE1MSFRUUFJFUVVFU1RQUk9HUkVTU0VWRU5UOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpQUk9HUkVTU0VWRU5UOworICAgIH0gZWxzZSBpZiAo
ZXZlbnQtPmlzV2ViS2l0QW5pbWF0aW9uRXZlbnQoKSkKKyAgICAgICAgdHlwZSA9IFY4Q2xhc3NJ
bmRleDo6V0VCS0lUQU5JTUFUSU9ORVZFTlQ7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0
VHJhbnNpdGlvbkV2ZW50KCkpCisgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OldFQktJVFRS
QU5TSVRJT05FVkVOVDsKKworCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiByZXN1bHQgPSBp
bnN0YW50aWF0ZVY4T2JqZWN0KHR5cGUsIFY4Q2xhc3NJbmRleDo6RVZFTlQsIGV2ZW50KTsKKyAg
ICBpZiAocmVzdWx0LklzRW1wdHkoKSkgeworICAgICAgICAvLyBJbnN0YW50aWF0aW9uIGZhaWxl
ZC4gQXZvaWQgdXBkYXRpbmcgdGhlIERPTSBvYmplY3QgbWFwIGFuZAorICAgICAgICAvLyByZXR1
cm4gbnVsbCB3aGljaCBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgY2FsbGVycyBvZiB0aGlzIGZ1bmN0
aW9uCisgICAgICAgIC8vIGluIGNhc2UgdGhlIGV2ZW50IGlzIE5VTEwuCisgICAgICAgIHJldHVy
biB2ODo6TnVsbCgpOworICAgIH0KKworICAgIGV2ZW50LT5yZWYoKTsgLy8gZmFzdCByZWYKKyAg
ICBzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoZXZlbnQsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+OjpOZXcocmVzdWx0KSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY29u
c3QgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIG1hcHBpbmdbXSA9IHsKKyAgICBWOENsYXNz
SW5kZXg6OklOVkFMSURfQ0xBU1NfSU5ERVgsICAgIC8vIE5PTkUKKyAgICBWOENsYXNzSW5kZXg6
OklOVkFMSURfQ0xBU1NfSU5ERVgsICAgIC8vIEVMRU1FTlRfTk9ERSBuZWVkcyBzcGVjaWFsIHRy
ZWF0bWVudAorICAgIFY4Q2xhc3NJbmRleDo6QVRUUiwgICAgICAgICAgICAgICAgICAgLy8gQVRU
UklCVVRFX05PREUKKyAgICBWOENsYXNzSW5kZXg6OlRFWFQsICAgICAgICAgICAgICAgICAgIC8v
IFRFWFRfTk9ERQorICAgIFY4Q2xhc3NJbmRleDo6Q0RBVEFTRUNUSU9OLCAgICAgICAgICAgLy8g
Q0RBVEFfU0VDVElPTl9OT0RFCisgICAgVjhDbGFzc0luZGV4OjpFTlRJVFlSRUZFUkVOQ0UsICAg
ICAgICAvLyBFTlRJVFlfUkVGRVJFTkNFX05PREUKKyAgICBWOENsYXNzSW5kZXg6OkVOVElUWSwg
ICAgICAgICAgICAgICAgIC8vIEVOVElUWV9OT0RFCisgICAgVjhDbGFzc0luZGV4OjpQUk9DRVNT
SU5HSU5TVFJVQ1RJT04sICAvLyBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUKKyAgICBWOENs
YXNzSW5kZXg6OkNPTU1FTlQsICAgICAgICAgICAgICAgIC8vIENPTU1FTlRfTk9ERQorICAgIFY4
Q2xhc3NJbmRleDo6SU5WQUxJRF9DTEFTU19JTkRFWCwgICAgLy8gRE9DVU1FTlRfTk9ERSBuZWVk
cyBzcGVjaWFsIHRyZWF0bWVudAorICAgIFY4Q2xhc3NJbmRleDo6RE9DVU1FTlRUWVBFLCAgICAg
ICAgICAgLy8gRE9DVU1FTlRfVFlQRV9OT0RFCisgICAgVjhDbGFzc0luZGV4OjpET0NVTUVOVEZS
QUdNRU5ULCAgICAgICAvLyBET0NVTUVOVF9GUkFHTUVOVF9OT0RFCisgICAgVjhDbGFzc0luZGV4
OjpOT1RBVElPTiwgICAgICAgICAgICAgICAvLyBOT1RBVElPTl9OT0RFCisgICAgVjhDbGFzc0lu
ZGV4OjpOT0RFLCAgICAgICAgICAgICAgICAgICAvLyBYUEFUSF9OQU1FU1BBQ0VfTk9ERQorfTsK
KworLy8gQ2FsbGVyIGNoZWNrcyBub2RlIGlzIG5vdCBudWxsLgordjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KE5vZGUqIG5vZGUpCit7Cisg
ICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKworICAgIC8vIEZpbmQg
YSBwcm94eSBmb3IgdGhpcyBub2RlLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGlmIHByb3h5
IGlzIGZvdW5kLCB3ZSBtaWdodCBpbml0aWFsaXplIHRoZSBjb250ZXh0IHdoaWNoIGNhbgorICAg
IC8vIGluc3RhbnRpYXRlIGEgZG9jdW1lbnQgd3JhcHBlci4gIFRoZXJlZm9yZSwgd2UgZ2V0IHRo
ZSBwcm94eSBiZWZvcmUKKyAgICAvLyBjaGVja2luZyBpZiB0aGUgbm9kZSBhbHJlYWR5IGhhcyBh
IHdyYXBwZXIuCisgICAgVjhQcm94eSogcHJveHkgPSAwOworICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IG5vZGUtPmRvY3VtZW50KCk7CisgICAgaWYgKGRvY3VtZW50KSB7CisgICAgICAgIEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgICAgICBwcm94eSA9IFY4UHJveHk6OnJl
dHJpZXZlKGZyYW1lKTsKKyAgICAgICAgaWYgKHByb3h5KQorICAgICAgICAgICAgcHJveHktPmlu
aXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgICB9CisKKyAgICBET01XcmFwcGVyTWFwPE5vZGU+JiBk
b21Ob2RlTWFwID0gcHJveHkgPyBwcm94eS0+ZG9tTm9kZU1hcCgpIDogZ2V0RE9NTm9kZU1hcCgp
OworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGRvbU5vZGVNYXAuZ2V0KG5v
ZGUpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVy
OworCisgICAgYm9vbCBpc0RvY3VtZW50ID0gZmFsc2U7IC8vIGRvY3VtZW50IHR5cGUgbm9kZSBo
YXMgc3BlY2lhbCBoYW5kbGluZworICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBl
OworCisgICAgTm9kZTo6Tm9kZVR5cGUgbm9kZVR5cGUgPSBub2RlLT5ub2RlVHlwZSgpOworICAg
IGlmIChub2RlVHlwZSA9PSBOb2RlOjpFTEVNRU5UX05PREUpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHR5cGUgPSBodG1sRWxlbWVudFR5cGUoc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAg
ZWxzZSBpZiAobm9kZS0+aXNTVkdFbGVtZW50KCkpCisgICAgICAgICAgICB0eXBlID0gc3ZnRWxl
bWVudFR5cGUoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5vZGUpKTsKKyNlbmRpZgorICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpFTEVNRU5UOworICAgIH0g
ZWxzZSBpZiAobm9kZVR5cGUgPT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgeworICAgICAgICBpc0Rv
Y3VtZW50ID0gdHJ1ZTsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8
RG9jdW1lbnQqPihub2RlKTsKKyAgICAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgp
KQorICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6SFRNTERPQ1VNRU5UOworI2lmIEVO
QUJMRShTVkcpCisgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LT5pc1NWR0RvY3VtZW50KCkpCisg
ICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpTVkdET0NVTUVOVDsKKyNlbmRpZgorICAg
ICAgICBlbHNlCisgICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpET0NVTUVOVDsKKyAg
ICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobm9kZVR5cGUgPCBzaXplb2YobWFwcGluZykvc2l6
ZW9mKG1hcHBpbmdbMF0pKTsKKyAgICAgICAgdHlwZSA9IG1hcHBpbmdbbm9kZVR5cGVdOworICAg
ICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OklOVkFMSURfQ0xBU1NfSU5ERVgpOwor
ICAgIH0KKworICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdjhDb250ZXh0OworICAgIGlmIChw
cm94eSkKKyAgICAgICAgdjhDb250ZXh0ID0gcHJveHktPmNvbnRleHQoKTsKKworICAgIC8vIEVu
dGVyIHRoZSBub2RlJ3MgY29udGV4dCBhbmQgY3JlYXRlIHRoZSB3cmFwcGVyIGluIHRoYXQgY29u
dGV4dC4KKyAgICBpZiAoIXY4Q29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgIHY4Q29udGV4dC0+
RW50ZXIoKTsKKworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiByZXN1bHQgPSBpbnN0YW50aWF0
ZVY4T2JqZWN0KHByb3h5LCB0eXBlLCBWOENsYXNzSW5kZXg6Ok5PREUsIG5vZGUpOworCisgICAg
Ly8gRXhpdCB0aGUgbm9kZSdzIGNvbnRleHQgaWYgaXQgd2FzIGVudGVyZWQuCisgICAgaWYgKCF2
OENvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICB2OENvbnRleHQtPkV4aXQoKTsKKworICAgIGlm
IChyZXN1bHQuSXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElmIGluc3RhbnRpYXRpb24gZmFpbGVk
IGl0J3MgaW1wb3J0YW50IG5vdCB0byBhZGQgdGhlIHJlc3VsdAorICAgICAgICAvLyB0byB0aGUg
RE9NIG5vZGUgbWFwLiBJbnN0ZWFkIHdlIHJldHVybiBhbiBlbXB0eSBoYW5kbGUsIHdoaWNoCisg
ICAgICAgIC8vIHNob3VsZCBhbHJlYWR5IGJlIGhhbmRsZWQgYnkgY2FsbGVycyBvZiB0aGlzIGZ1
bmN0aW9uIGluIGNhc2UKKyAgICAgICAgLy8gdGhlIG5vZGUgaXMgTlVMTC4KKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBub2RlLT5yZWYoKTsKKyAgICBkb21Ob2RlTWFwLnNl
dChub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOworCisgICAg
aWYgKGlzRG9jdW1lbnQpIHsKKyAgICAgICAgaWYgKHByb3h5KQorICAgICAgICAgICAgcHJveHkt
PnVwZGF0ZURvY3VtZW50V3JhcHBlcihyZXN1bHQpOworCisgICAgICAgIGlmICh0eXBlID09IFY4
Q2xhc3NJbmRleDo6SFRNTERPQ1VNRU5UKSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgbWFya2Vy
IG9iamVjdCBhbmQgaW5zZXJ0IGl0IGluIHR3byBpbnRlcm5hbCBmaWVsZHMuCisgICAgICAgICAg
ICAvLyBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRlbXBvcmFyeSBzaGFkb3dpbmcgb2YKKyAg
ICAgICAgICAgIC8vIGRvY3VtZW50LmFsbC4KKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPklu
dGVybmFsRmllbGRDb3VudCgpID09IFY4Q3VzdG9tOjprSFRNTERvY3VtZW50SW50ZXJuYWxGaWVs
ZENvdW50KTsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBtYXJrZXIgPSB2ODo6
T2JqZWN0OjpOZXcoKTsKKyAgICAgICAgICAgIHJlc3VsdC0+U2V0SW50ZXJuYWxGaWVsZChWOEN1
c3RvbTo6a0hUTUxEb2N1bWVudE1hcmtlckluZGV4LCBtYXJrZXIpOworICAgICAgICAgICAgcmVz
dWx0LT5TZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprSFRNTERvY3VtZW50U2hhZG93SW5kZXgs
IG1hcmtlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisv
LyBBIEpTIG9iamVjdCBvZiB0eXBlIEV2ZW50VGFyZ2V0IGNhbiBvbmx5IGJlIHRoZSBmb2xsb3dp
bmcgcG9zc2libGUgdHlwZXM6CisvLyAxKSBFdmVudFRhcmdldE5vZGU7IDIpIERPTVdpbmRvdyAz
KSBYTUxIdHRwUmVxdWVzdDsgNCkgTWVzc2FnZVBvcnQ7CisvLyA1KSBYTUxIdHRwUmVxdWVzdFVw
bG9hZAorLy8gY2hlY2sgRXZlbnRUYXJnZXQuaCBmb3IgbmV3IHR5cGUgY29udmVyc2lvbiBtZXRo
b2RzCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJn
ZXRUb1Y4T2JqZWN0KEV2ZW50VGFyZ2V0KiB0YXJnZXQpCit7CisgICAgaWYgKCF0YXJnZXQpCisg
ICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworCisjaWYgRU5BQkxFKFNWRykKKyAgICBTVkdFbGVt
ZW50SW5zdGFuY2UqIGluc3RhbmNlID0gdGFyZ2V0LT50b1NWR0VsZW1lbnRJbnN0YW5jZSgpOwor
ICAgIGlmIChpbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6U1ZHRUxFTUVOVElOU1RBTkNFLCBpbnN0YW5jZSk7CisjZW5kaWYKKworI2lmIEVO
QUJMRShXT1JLRVJTKQorICAgIFdvcmtlciogd29ya2VyID0gdGFyZ2V0LT50b1dvcmtlcigpOwor
ICAgIGlmICh3b3JrZXIpCisgICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OldPUktFUiwgd29ya2VyKTsKKyNlbmRpZiAvLyBXT1JLRVJTCisKKyAgICBOb2RlKiBu
b2RlID0gdGFyZ2V0LT50b05vZGUoKTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnROb2RlVG9WOE9iamVjdChub2RlKTsKKworICAgIGlmIChET01XaW5kb3cqIGRvbVdpbmRv
dyA9IHRhcmdldC0+dG9ET01XaW5kb3coKSkKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2Jq
ZWN0KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBkb21XaW5kb3cpOworCisgICAgLy8gWE1MSHR0
cFJlcXVlc3QgaXMgY3JlYXRlZCB3aXRoaW4gaXRzIEpTIGNvdW50ZXJwYXJ0LgorICAgIFhNTEh0
dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHRhcmdldC0+dG9YTUxIdHRwUmVxdWVzdCgpOwor
ICAgIGlmICh4bWxIdHRwUmVxdWVzdCkgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSBnZXRBY3RpdmVET01PYmplY3RNYXAoKS5nZXQoeG1sSHR0cFJlcXVlc3QpOwor
ICAgICAgICBBU1NFUlQoIXdyYXBwZXIuSXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7CisgICAgfQorCisgICAgLy8gTWVzc2FnZVBvcnQgaXMgY3JlYXRlZCB3aXRoaW4gaXRzIEpT
IGNvdW50ZXJwYXJ0CisgICAgTWVzc2FnZVBvcnQqIHBvcnQgPSB0YXJnZXQtPnRvTWVzc2FnZVBv
cnQoKTsKKyAgICBpZiAocG9ydCkgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXIgPSBnZXRBY3RpdmVET01PYmplY3RNYXAoKS5nZXQocG9ydCk7CisgICAgICAgIEFTU0VS
VCghd3JhcHBlci5Jc0VtcHR5KCkpOworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9CisK
KyAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogdXBsb2FkID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1
ZXN0VXBsb2FkKCk7CisgICAgaWYgKHVwbG9hZCkgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQodXBsb2FkKTsKKyAgICAgICAg
QVNTRVJUKCF3cmFwcGVyLklzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAg
IH0KKworICAgIEFTU0VSVCgwKTsKKyAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50
TGlzdGVuZXJUb1Y4T2JqZWN0KEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQoreworICAgIGlmICgh
bGlzdGVuZXIpCisgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworCisgICAgLy8gRklYTUU6IGNh
biBhIHVzZXIgdGFrZSBhIGxhenkgZXZlbnQgbGlzdGVuZXIgYW5kIHNldCB0byBvdGhlciBwbGFj
ZXM/CisgICAgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIHY4bGlzdGVuZXIgPSBzdGF0aWNfY2Fz
dDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KGxpc3RlbmVyKTsKKyAgICByZXR1cm4gdjhsaXN0
ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
RE9NV3JhcHBlcjo6Y29udmVydERPTUltcGxlbWVudGF0aW9uVG9WOE9iamVjdChET01JbXBsZW1l
bnRhdGlvbiogaW1wbCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlc3VsdCA9IGlu
c3RhbnRpYXRlVjhPYmplY3QoVjhDbGFzc0luZGV4OjpET01JTVBMRU1FTlRBVElPTiwgVjhDbGFz
c0luZGV4OjpET01JTVBMRU1FTlRBVElPTiwgaW1wbCk7CisgICAgaWYgKHJlc3VsdC5Jc0VtcHR5
KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGluc3RhbnRpYXRpb24gZmFpbGVkLCB3ZSBpZ25vcmUg
aXQgYW5kIHJldHVybiBudWxsIGluc3RlYWQKKyAgICAgICAgLy8gb2YgcmV0dXJuaW5nIGFuIGVt
cHR5IGhhbmRsZS4KKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgfQorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZl
cnRTdHlsZVNoZWV0VG9WOE9iamVjdChTdHlsZVNoZWV0KiBzaGVldCkKK3sKKyAgICBpZiAoIXNo
ZWV0KQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChzaGVldCk7CisgICAgaWYgKCF3
cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICBWOENsYXNz
SW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4Q2xhc3NJbmRleDo6U1RZTEVTSEVFVDsKKyAg
ICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICB0eXBlID0gVjhDbGFzc0lu
ZGV4OjpDU1NTVFlMRVNIRUVUOworCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiByZXN1bHQg
PSBpbnN0YW50aWF0ZVY4T2JqZWN0KHR5cGUsIFY4Q2xhc3NJbmRleDo6U1RZTEVTSEVFVCwgc2hl
ZXQpOworICAgIGlmICghcmVzdWx0LklzRW1wdHkoKSkgeworICAgICAgICAvLyBPbmx5IHVwZGF0
ZSB0aGUgRE9NIG9iamVjdCBtYXAgaWYgdGhlIHJlc3VsdCBpcyBub24tZW1wdHkuCisgICAgICAg
IHNoZWV0LT5yZWYoKTsKKyAgICAgICAgc2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KHNoZWV0LCB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOworICAgIH0KKworICAgIC8v
IEFkZCBhIGhpZGRlbiByZWZlcmVuY2UgZnJvbSBzdHlsZXNoZWV0IG9iamVjdCB0byBpdHMgb3du
ZXIgbm9kZS4KKyAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+b3duZXJOb2RlKCk7CisgICAg
aWYgKG93bmVyTm9kZSkgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG93bmVyID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChjb252ZXJ0Tm9kZVRvVjhPYmplY3Qob3duZXJO
b2RlKSk7CisgICAgICAgIHJlc3VsdC0+U2V0SW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a1N0eWxl
U2hlZXRPd25lck5vZGVJbmRleCwgb3duZXIpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRDU1NWYWx1
ZVRvVjhPYmplY3QoQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICghdmFsdWUpCisgICAgICAg
IHJldHVybiB2ODo6TnVsbCgpOworCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
ID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHZhbHVlKTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKworICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZSB0eXBlOworCisgICAgaWYgKHZhbHVlLT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVl
KCkpCisgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OldFQktJVENTU1RSQU5TRk9STVZBTFVF
OworICAgIGVsc2UgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICB0eXBlID0gVjhD
bGFzc0luZGV4OjpDU1NWQUxVRUxJU1Q7CisgICAgZWxzZSBpZiAodmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NTUFJJTUlUSVZFVkFMVUU7
CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKQorICAg
ICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpTVkdQQUlOVDsKKyAgICBlbHNlIGlmICh2YWx1ZS0+
aXNTVkdDb2xvcigpKQorICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpTVkdDT0xPUjsKKyNl
bmRpZgorICAgIGVsc2UKKyAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NTVkFMVUU7CisK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlc3VsdCA9IGluc3RhbnRpYXRlVjhPYmplY3Qo
dHlwZSwgVjhDbGFzc0luZGV4OjpDU1NWQUxVRSwgdmFsdWUpOworICAgIGlmICghcmVzdWx0Lklz
RW1wdHkoKSkgeworICAgICAgICAvLyBPbmx5IHVwZGF0ZSB0aGUgRE9NIG9iamVjdCBtYXAgaWYg
dGhlIHJlc3VsdCBpcyBub24tZW1wdHkuCisgICAgICAgIHZhbHVlLT5yZWYoKTsKKyAgICAgICAg
c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KHZhbHVlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
Pjo6TmV3KHJlc3VsdCkpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRDU1NSdWxlVG9WOE9iamVjdChD
U1NSdWxlKiBydWxlKQoreworICAgIGlmICghcnVsZSkgCisgICAgICAgIHJldHVybiB2ODo6TnVs
bCgpOworCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0
TWFwKCkuZ2V0KHJ1bGUpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB3cmFwcGVyOworCisgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGU7CisK
KyAgICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgeworICAgIGNhc2UgQ1NTUnVsZTo6U1RZTEVfUlVM
RToKKyAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NTU1RZTEVSVUxFOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENTU1J1bGU6OkNIQVJTRVRfUlVMRToKKyAgICAgICAgdHlwZSA9IFY4
Q2xhc3NJbmRleDo6Q1NTQ0hBUlNFVFJVTEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NT
UnVsZTo6SU1QT1JUX1JVTEU6CisgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OkNTU0lNUE9S
VFJVTEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUnVsZTo6TUVESUFfUlVMRToKKyAg
ICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NTTUVESUFSVUxFOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENTU1J1bGU6OkZPTlRfRkFDRV9SVUxFOgorICAgICAgICB0eXBlID0gVjhDbGFz
c0luZGV4OjpDU1NGT05URkFDRVJVTEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUnVs
ZTo6UEFHRV9SVUxFOgorICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpDU1NQQUdFUlVMRTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NSdWxlOjpWQVJJQUJMRVNfUlVMRToKKyAgICAg
ICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NTVkFSSUFCTEVTUlVMRTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NSdWxlOjpXRUJLSVRfS0VZRlJBTUVfUlVMRToKKyAgICAgICAgdHlwZSA9
IFY4Q2xhc3NJbmRleDo6V0VCS0lUQ1NTS0VZRlJBTUVSVUxFOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENTU1J1bGU6OldFQktJVF9LRVlGUkFNRVNfUlVMRToKKyAgICAgICAgdHlwZSA9IFY4
Q2xhc3NJbmRleDo6V0VCS0lUQ1NTS0VZRlJBTUVTUlVMRTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDogIC8vIENTU1J1bGU6OlVOS05PV05fUlVMRQorICAgICAgICB0eXBlID0gVjhDbGFz
c0luZGV4OjpDU1NSVUxFOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHJlc3VsdCA9IGluc3RhbnRpYXRlVjhPYmplY3QodHlwZSwgVjhDbGFzc0lu
ZGV4OjpDU1NSVUxFLCBydWxlKTsKKyAgICBpZiAoIXJlc3VsdC5Jc0VtcHR5KCkpIHsKKyAgICAg
ICAgLy8gT25seSB1cGRhdGUgdGhlIERPTSBvYmplY3QgbWFwIGlmIHRoZSByZXN1bHQgaXMgbm9u
LWVtcHR5LgorICAgICAgICBydWxlLT5yZWYoKTsKKyAgICAgICAgc2V0SlNXcmFwcGVyRm9yRE9N
T2JqZWN0KHJ1bGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcocmVzdWx0KSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERP
TVdyYXBwZXI6OmNvbnZlcnRXaW5kb3dUb1Y4T2JqZWN0KERPTVdpbmRvdyogd2luZG93KQorewor
ICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICAvLyBJbml0
aWFsaXplcyBlbnZpcm9ubWVudCBvZiBhIGZyYW1lLCBhbmQgcmV0dXJuIHRoZSBnbG9iYWwgb2Jq
ZWN0CisgICAgLy8gb2YgdGhlIGZyYW1lLgorICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+ZnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PigpOworCisgICAgLy8gU3BlY2lhbCBjYXNlOiBCZWNhdXNlIG9mIGV2YWx1YXRlSW5OZXdD
b250ZXh0KCkgb25lIERPTVdpbmRvdyBjYW4gaGF2ZQorICAgIC8vIG11bHRpcGxlIGNvbnRleHRz
IGFuZCBtdWx0aXBsZSBnbG9iYWwgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggaXQuIFdoZW4KKyAg
ICAvLyBjb2RlIHJ1bm5pbmcgaW4gb25lIG9mIHRob3NlIGNvbnRleHRzIGFjY2Vzc2VzIHRoZSB3
aW5kb3cgb2JqZWN0LCB3ZQorICAgIC8vIHdhbnQgdG8gcmV0dXJuIHRoZSBnbG9iYWwgb2JqZWN0
IGFzc29jaWF0ZWQgd2l0aCB0aGF0IGNvbnRleHQsIG5vdAorICAgIC8vIG5lY2Vzc2FyaWx5IHRo
ZSBmaXJzdCBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGF0IERPTVdpbmRvdy4KKyAg
ICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjdXJyZW50Q29udGV4dCA9IHY4OjpDb250ZXh0OjpH
ZXRDdXJyZW50KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjdXJyZW50R2xvYmFsID0g
Y3VycmVudENvbnRleHQtPkdsb2JhbCgpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2lu
ZG93V3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6
OkRPTVdJTkRPVywgY3VycmVudEdsb2JhbCk7CisgICAgaWYgKCF3aW5kb3dXcmFwcGVyLklzRW1w
dHkoKSkgeworICAgICAgICBpZiAoY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxET01XaW5kb3c+
KHdpbmRvd1dyYXBwZXIpID09IHdpbmRvdykKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50R2xv
YmFsOworICAgIH0KKworICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBnbG9iYWwgb2JqZWN0
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZyYW1lLgorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IHY4Q29udGV4dCA9IFY4UHJveHk6OmNvbnRleHQoZnJhbWUpOworICAgIGlmICh2OENvbnRleHQu
SXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpOworCisg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSB2OENvbnRleHQtPkdsb2JhbCgpOwor
ICAgIEFTU0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKwor
fSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOERPTVdyYXBwZXJfaAorI2Rl
ZmluZSBWOERPTVdyYXBwZXJfaAorCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVG
aWx0ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIiAvLyBmb3IgV2ViQ29yZTo6U3Ry
aW5nCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhJbmRleC5oIgor
I2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8djguaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisgICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgYXJlbid0IGFsbCBuZWVkZWQu
CisgICAgY2xhc3MgQ1NTUnVsZTsKKyAgICBjbGFzcyBDU1NSdWxlTGlzdDsKKyAgICBjbGFzcyBD
U1NTdHlsZURlY2xhcmF0aW9uOworICAgIGNsYXNzIENTU1ZhbHVlOworICAgIGNsYXNzIENTU1Zh
bHVlTGlzdDsKKyAgICBjbGFzcyBDbGllbnRSZWN0TGlzdDsKKyAgICBjbGFzcyBET01JbXBsZW1l
bnRhdGlvbjsKKyAgICBjbGFzcyBET01XaW5kb3c7CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAg
Y2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBFdmVudDsKKyAgICBjbGFzcyBFdmVudExpc3RlbmVy
OworICAgIGNsYXNzIEV2ZW50VGFyZ2V0OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEhU
TUxDb2xsZWN0aW9uOworICAgIGNsYXNzIEhUTUxEb2N1bWVudDsKKyAgICBjbGFzcyBIVE1MRWxl
bWVudDsKKyAgICBjbGFzcyBIVE1MT3B0aW9uc0NvbGxlY3Rpb247CisgICAgY2xhc3MgTWVkaWFM
aXN0OworICAgIGNsYXNzIE1pbWVUeXBlOworICAgIGNsYXNzIE1pbWVUeXBlQXJyYXk7CisgICAg
Y2xhc3MgTmFtZWROb2RlTWFwOworICAgIGNsYXNzIE5hdmlnYXRvcjsKKyAgICBjbGFzcyBOb2Rl
OworICAgIGNsYXNzIE5vZGVGaWx0ZXI7CisgICAgY2xhc3MgTm9kZUxpc3Q7CisgICAgY2xhc3Mg
UGx1Z2luOworICAgIGNsYXNzIFBsdWdpbkFycmF5OworICAgIGNsYXNzIFNWR0VsZW1lbnQ7Cisj
aWYgRU5BQkxFKFNWRykKKyAgICBjbGFzcyBTVkdFbGVtZW50SW5zdGFuY2U7CisjZW5kaWYKKyAg
ICBjbGFzcyBTY3JlZW47CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCisgICAgY2xhc3MgU3RvcmFnZTsKKyAgICBjbGFzcyBTdG9yYWdl
RXZlbnQ7CisjZW5kaWYKKyAgICBjbGFzcyBTdHJpbmc7CisgICAgY2xhc3MgU3R5bGVTaGVldDsK
KyAgICBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKKyAgICBjbGFzcyBWOEV2ZW50TGlzdGVuZXI7Cisg
ICAgY2xhc3MgVjhPYmplY3RFdmVudExpc3RlbmVyOworCisgICAgY2xhc3MgVjhET01XcmFwcGVy
IHsKKyAgICBwdWJsaWM6CisjaWZuZGVmIE5ERUJVRworICAgICAgICAvLyBDaGVja3MgaWYgYSB2
OCB2YWx1ZSBjYW4gYmUgYSBET00gd3JhcHBlcgorICAgICAgICBzdGF0aWMgYm9vbCBtYXliZURP
TVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKyNlbmRpZgorCisgICAgICAgIC8vIFNl
dHMgY29udGVudHMgb2YgYSBET00gd3JhcHBlci4KKyAgICAgICAgc3RhdGljIHZvaWQgc2V0RE9N
V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCBpbnQgdHlwZSwgdm9pZCogcHRyKTsKKwor
ICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBsb29rdXBET01XcmFwcGVyKFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworICAg
ICAgICAvLyBBIGhlbHBlciBmdW5jdGlvbiBleHRyYWN0IG5hdGl2ZSBvYmplY3QgcG9pbnRlciBm
cm9tIGEgRE9NIHdyYXBwZXIKKyAgICAgICAgLy8gYW5kIGNhc3QgdG8gdGhlIHNwZWNpZmllZCB0
eXBlLgorICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KKyAgICAgICAgc3RhdGljIEMqIGNvbnZl
cnRET01XcmFwcGVyVG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKG1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKKyAgICAg
ICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwdHIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KG9iamVjdCktPkdldEludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XcmFwcGVyT2Jq
ZWN0SW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RDUG9pbnRlcjxDPihwdHIpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQSBoZWxwIGZ1bmN0aW9uIGV4dHJhY3QgYSBub2RlIHR5
cGUgcG9pbnRlciBmcm9tIGEgRE9NIHdyYXBwZXIuCisgICAgICAgIC8vIFdyYXBwZWQgcG9pbnRl
ciBtdXN0IGJlIGNhc3QgdG8gTm9kZSogZmlyc3QuCisgICAgICAgIHN0YXRpYyB2b2lkKiBjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZUhlbHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworCisgICAg
ICAgIC8vIENyZWF0ZSBhIFY4IHdyYXBwZXIgZm9yIGEgQyBwb2ludGVyCisgICAgICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcENQb2ludGVyKHZvaWQqIGNwdHIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIFJlcHJlc2VudCB2b2lkKiBhcyBpbnQKKyAgICAgICAgICAgIGlu
dCBhZGRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ+KGNwdHIpOworICAgICAgICAgICAgQVNTRVJU
KCEoYWRkciAmIDB4MDEpKTsgLy8gVGhlIGFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkLgorICAgICAg
ICAgICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoYWRkciA+PiAxKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFRha2UgQyBwb2ludGVyIG91dCBvZiBhIHY4IHdyYXBwZXIuCisgICAgICAgIHRl
bXBsYXRlIDxjbGFzcyBDPgorICAgICAgICBzdGF0aWMgQyogZXh0cmFjdENQb2ludGVyKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBvYmopCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDKj4oZXh0cmFjdENQb2ludGVySW1wbChvYmopKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgICAgICBzdGF0aWMgQyogY29udmVydERPTVdyYXBw
ZXJUb05vZGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Qyo+KGNvbnZlcnRET01XcmFwcGVyVG9Ob2RlSGVscGVy
KHZhbHVlKSk7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCBQYXNzUmVmUHRyPFQ+IGltcCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KHR5cGUsIGltcC5nZXQoKSk7
CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZl
cnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgdm9pZCopOworCisgICAg
ICAgIC8vIEZhc3QtcGF0aCBmb3IgTm9kZSBvYmplY3RzLgorICAgICAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGNvbnZlcnROb2RlVG9WOE9iamVjdChOb2RlKik7CisKKyAgICAgICAg
dGVtcGxhdGUgPGNsYXNzIEM+CisgICAgICAgIHN0YXRpYyBDKiBjb252ZXJ0VG9OYXRpdmVPYmpl
Y3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBvYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDKj4o
Y29udmVydFRvTmF0aXZlT2JqZWN0SW1wbCh0eXBlLCBvYmplY3QpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZG9tV3JhcHBlclR5cGUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KEV2ZW50Kik7CisKKyAgICAgICAgc3RhdGlj
IEV2ZW50KiBjb252ZXJ0VG9OYXRpdmVFdmVudCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVu
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFpc0RPTUV2ZW50V3JhcHBlcihqc0V2ZW50
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50Pihqc0V2ZW50KTsKKyAgICAgICAgfQorCisgICAgICAg
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVj
dChFdmVudFRhcmdldCopOworICAgICAgICAvLyBXcmFwIGFuZCB1bndyYXAgSlMgZXZlbnQgbGlz
dGVuZXJzLgorICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVu
dExpc3RlbmVyVG9WOE9iamVjdChFdmVudExpc3RlbmVyKik7CisKKyAgICAgICAgLy8gRE9NSW1w
bGVtZW50YXRpb24gaXMgYSBzaW5nbGV0b24gYW5kIGl0IGlzIGhhbmRsZWQgaW4gYSBzcGVjaWFs
CisgICAgICAgIC8vIHdheS4gQSB3cmFwcGVyIGlzIGdlbmVyYXRlZCBwZXIgZG9jdW1lbnQgYW5k
IHN0b3JlZCBpbiBhbgorICAgICAgICAvLyBpbnRlcm5hbCBmaWVsZCBvZiB0aGUgZG9jdW1lbnQu
CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydERPTUltcGxlbWVu
dGF0aW9uVG9WOE9iamVjdChET01JbXBsZW1lbnRhdGlvbiopOworCisgICAgICAgIC8vIFdyYXAg
SlMgbm9kZSBmaWx0ZXIgaW4gQysrLgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOb2RlRmls
dGVyPiB3cmFwTmF0aXZlTm9kZUZpbHRlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworCisgICAg
ICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZ2V0VGVtcGxh
dGUoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlKTsKKworICAgICAgICAvLyBDaGVja3Mgd2hl
dGhlciBhIERPTSBvYmplY3QgaGFzIGEgSlMgd3JhcHBlci4KKyAgICAgICAgc3RhdGljIGJvb2wg
ZG9tT2JqZWN0SGFzSlNXcmFwcGVyKHZvaWQqKTsKKyAgICAgICAgLy8gU2V0IEpTIHdyYXBwZXIg
b2YgYSBET00gb2JqZWN0LCB0aGUgY2FsbGVyIGluIGNoYXJnZSBvZiBpbmNyZWFzZSByZWYuCisg
ICAgICAgIHN0YXRpYyB2b2lkIHNldEpTV3JhcHBlckZvckRPTU9iamVjdCh2b2lkKiwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4pOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRKU1dyYXBwZXJG
b3JBY3RpdmVET01PYmplY3Qodm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgc2V0SlNXcmFwcGVyRm9yRE9NTm9kZShOb2RlKiwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4pOworCisgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgYSBWOCB2YWx1
ZSBpcyBhIHdyYXBwZXIgb2YgdHlwZSB8Y2xhc3NUeXBlfC4KKyAgICAgICAgc3RhdGljIGJvb2wg
aXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwgVjhDbGFzc0luZGV4OjpWOFdy
YXBwZXJUeXBlKTsKKworICAgICAgICBzdGF0aWMgdm9pZCogY29udmVydFRvU1ZHUE9EVHlwZUlt
cGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwor
CisgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgYSBWOCB2YWx1ZSBpcyBhIERPTSBFdmVudCB3cmFw
cGVyLgorICAgICAgICBzdGF0aWMgYm9vbCBpc0RPTUV2ZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4pOworCisgICAgICAgIHN0YXRpYyB2b2lkKiBjb252ZXJ0VG9OYXRpdmVPYmplY3RJ
bXBsKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsK
KworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRTdHlsZVNoZWV0
VG9WOE9iamVjdChTdHlsZVNoZWV0Kik7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29udmVydENTU1ZhbHVlVG9WOE9iamVjdChDU1NWYWx1ZSopOworICAgICAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRDU1NSdWxlVG9WOE9iamVjdChDU1NSdWxl
Kik7CisgICAgICAgIC8vIFJldHVybnMgdGhlIEpTIHdyYXBwZXIgb2YgYSB3aW5kb3cgb2JqZWN0
LCBpbml0aWFsaXplcyB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgLy8gb2YgdGhlIHdpbmRvdyBm
cmFtZSBpZiBuZWVkZWQuCisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29u
dmVydFdpbmRvd1RvVjhPYmplY3QoRE9NV2luZG93Kik7CisKKyNpZiBFTkFCTEUoU1ZHKQorICAg
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRTVkdFbGVtZW50SW5zdGFu
Y2VUb1Y4T2JqZWN0KFNWR0VsZW1lbnRJbnN0YW5jZSopOworICAgICAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRTVkdPYmplY3RXaXRoQ29udGV4dFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2b2lkKik7CisjZW5kaWYKKworICAgIHByaXZhdGU6
CisgICAgICAgIC8vIFNldCBoaWRkZW4gcmVmZXJlbmNlcyBpbiBhIERPTVdpbmRvdyBvYmplY3Qg
b2YgYSBmcmFtZS4KKyAgICAgICAgc3RhdGljIHZvaWQgc2V0SGlkZGVuV2luZG93UmVmZXJlbmNl
KEZyYW1lKiwgY29uc3QgaW50IGludGVybmFsSW5kZXgsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4p
OworCisgICAgICAgIC8vIFRha2UgQyBwb2ludGVyIG91dCBvZiBhIHY4IHdyYXBwZXIuCisgICAg
ICAgIHN0YXRpYyB2b2lkKiBleHRyYWN0Q1BvaW50ZXJJbXBsKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBvYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChvYmplY3QtPklzTnVtYmVy
KCkpOworICAgICAgICAgICAgaW50IGFkZHIgPSBvYmplY3QtPkludDMyVmFsdWUoKTsKKyAgICAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRyIDw8IDEpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBodG1sRWxl
bWVudFR5cGUoSFRNTEVsZW1lbnQqKTsKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICBzdGF0aWMg
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1lbnQqKTsK
KyNlbmRpZgorCisgICAgICAgIC8vIFRoZSBmaXJzdCBWOFdyYXBwZXJUeXBlIHNwZWNpZmllcyB0
aGUgZnVuY3Rpb24gZGVzY3JpcHRvcgorICAgICAgICAvLyB1c2VkIHRvIGNyZWF0ZSBKUyBvYmpl
Y3QuIFRoZSBzZWNvbmQgVjhXcmFwcGVyVHlwZSBzcGVjaWZpZXMKKyAgICAgICAgLy8gdGhlIGFj
dHVhbCB0eXBlIG9mIHRoZSB2b2lkKiBmb3IgdHlwZSBjYXN0aW5nLgorICAgICAgICAvLyBGb3Ig
ZXhhbXBsZSwgYSBIVE1MIGVsZW1lbnQgaGFzIEhUTUxFTEVNRU5UIGZvciB0aGUgZmlyc3QgVjhX
cmFwcGVyVHlwZSwgYnV0IGFsd2F5cworICAgICAgICAvLyB1c2UgTk9ERSBhcyB0aGUgc2Vjb25k
IFY4V3JhcHBlclR5cGUuIEpTIHdyYXBwZXIgc3RvcmVzIHRoZSBzZWNvbmQKKyAgICAgICAgLy8g
VjhXcmFwcGVyVHlwZSBhbmQgdGhlIHZvaWQqIGFzIGludGVybmFsIGZpZWxkcy4KKyAgICAgICAg
c3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSBkZXNjVHlwZSwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IGNwdHJUeXBlLCB2b2lkKiBpbXBsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW5z
dGFudGlhdGVWOE9iamVjdChOVUxMLCBkZXNjVHlwZSwgY3B0clR5cGUsIGltcGwpOworICAgICAg
ICB9CisKKyAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW50aWF0ZVY4
T2JqZWN0KFY4UHJveHkqLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZSwgdm9pZCopOworCisgICAgfTsKKworfQorCisjZW5kaWYgLy8gVjhE
T01XcmFwcGVyX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XcmFwcGVyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCShyZXZpc2lvbiA0NTY1OSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDI2ICs5MSw2IEBAIHR5
cGVkZWYgSGFzaE1hcDxOb2RlKiwgdjg6Ok9iamVjdCo+IERPTU4KIHR5cGVkZWYgSGFzaE1hcDx2
b2lkKiwgdjg6Ok9iamVjdCo+IERPTU9iamVjdE1hcDsKIAogI2lmIEVOQUJMRShTVkcpCi12ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0U1ZHRWxlbWVudEluc3RhbmNl
VG9WOE9iamVjdChTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlKQotewotICAgIGlmICghaW5z
dGFuY2UpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBleGlzdGluZ0luc3RhbmNlID0gZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCku
Z2V0KGluc3RhbmNlKTsKLSAgICBpZiAoIWV4aXN0aW5nSW5zdGFuY2UuSXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZXhpc3RpbmdJbnN0YW5jZTsKLQotICAgIGluc3RhbmNlLT5yZWYoKTsKLQot
ICAgIC8vIEluc3RhbnRpYXRlIHRoZSBWOCBvYmplY3QgYW5kIHJlbWVtYmVyIGl0Ci0gICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiByZXN1bHQgPSBpbnN0YW50aWF0ZVY4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6U1ZHRUxFTUVOVElOU1RBTkNFLCBWOENsYXNzSW5kZXg6OlNWR0VMRU1FTlRJTlNUQU5D
RSwgaW5zdGFuY2UpOwotICAgIGlmICghcmVzdWx0LklzRW1wdHkoKSkgewotICAgICAgICAvLyBP
bmx5IHVwZGF0ZSB0aGUgRE9NIFNWRyBlbGVtZW50IG1hcCBpZiB0aGUgcmVzdWx0IGlzIG5vbi1l
bXB0eS4KLSAgICAgICAgZ2V0RE9NU1ZHRWxlbWVudEluc3RhbmNlTWFwKCkuc2V0KGluc3RhbmNl
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOwotICAgIH0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCiAvLyBNYXAgb2YgU1ZHIG9iamVjdHMgd2l0aCBjb250ZXh0cyB0
byB0aGVpciBjb250ZXh0cwogc3RhdGljIEhhc2hNYXA8dm9pZCosIFNWR0VsZW1lbnQqPiYgc3Zn
T2JqZWN0VG9Db250ZXh0TWFwKCkKIHsKQEAgLTExOSw0MSArOTksNiBAQCBzdGF0aWMgSGFzaE1h
cDx2b2lkKiwgU1ZHRWxlbWVudCo+JiBzdmdPCiAgICAgcmV0dXJuIHN0YXRpY1N2Z09iamVjdFRv
Q29udGV4dE1hcDsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFNWR09iamVjdFdpdGhDb250ZXh0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUgdHlwZSwgdm9pZCogb2JqZWN0KQotewotICAgIGlmICghb2JqZWN0KQotICAgICAgICBy
ZXR1cm4gdjg6Ok51bGwoKTsKLQotICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHJlc3Vs
dCA9IGdldERPTVNWR09iamVjdFdpdGhDb250ZXh0TWFwKCkuZ2V0KG9iamVjdCk7Ci0gICAgaWYg
KCFyZXN1bHQuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gU3Bl
Y2lhbCBjYXNlOiBTVkdQYXRoU2VncyBuZWVkIHRvIGJlIGRvd25jYXN0IHRvIHRoZWlyIHJlYWwg
dHlwZQotICAgIGlmICh0eXBlID09IFY4Q2xhc3NJbmRleDo6U1ZHUEFUSFNFRykKLSAgICAgICAg
dHlwZSA9IFY4Q3VzdG9tOjpEb3duY2FzdFNWR1BhdGhTZWcob2JqZWN0KTsKLQotICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiB2OE9iamVjdCA9IGluc3RhbnRpYXRlVjhPYmplY3QodHlwZSwgdHlw
ZSwgb2JqZWN0KTsKLSAgICBpZiAoIXY4T2JqZWN0LklzRW1wdHkoKSkgewotICAgICAgICByZXN1
bHQgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHY4T2JqZWN0KTsKLSAgICAgICAg
c3dpdGNoICh0eXBlKSB7Ci0jZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSAgICAgXAotICAg
ICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRTogc3RhdGljX2Nhc3Q8TkFNRSo+KG9iamVjdCkt
PnJlZigpOyBicmVhazsKLSAgICAgICAgU1ZHX09CSkVDVF9UWVBFUyhNQUtFX0NBU0UpCi0jdW5k
ZWYgTUFLRV9DQVNFCi0jZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSAgICAgXAotICAgICAg
ICBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRTogICAgXAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
VjhTVkdQT0RUeXBlV3JhcHBlcjxOQU1FPio+KG9iamVjdCktPnJlZigpOyBicmVhazsKLSAgICAg
ICAgU1ZHX1BPRF9OQVRJVkVfVFlQRVMoTUFLRV9DQVNFKQotI3VuZGVmIE1BS0VfQ0FTRQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZ2V0RE9NU1ZHT2JqZWN0V2l0aENvbnRleHRNYXAoKS5zZXQob2JqZWN0LCBy
ZXN1bHQpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHZvaWQgVjhQcm94eTo6
c2V0U1ZHQ29udGV4dCh2b2lkKiBvYmplY3QsIFNWR0VsZW1lbnQqIGNvbnRleHQpCiB7CiAgICAg
aWYgKCFvYmplY3QpCkBAIC00MTYsNTMgKzM2MSw2IEBAIHZvaWQgVjhQcm94eTo6ZGVzdHJveUds
b2JhbCgpCiB9CiAKIAotYm9vbCBWOERPTVdyYXBwZXI6OmRvbU9iamVjdEhhc0pTV3JhcHBlcih2
b2lkKiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTU9iamVjdE1hcCgpLmNvbnRhaW5zKG9i
amVjdCkgfHwgZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkuY29udGFpbnMob2JqZWN0KTsKLX0KLQot
Ly8gVGhlIGNhbGxlciBtdXN0IGhhdmUgaW5jcmVhc2VkIG9iaidzIHJlZiBjb3VudC4KLXZvaWQg
VjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qodm9pZCogb2JqZWN0LCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQotewotICAgIEFTU0VSVChWOERPTVdyYXBw
ZXI6Om1heWJlRE9NV3JhcHBlcih3cmFwcGVyKSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlw
ZSh3cmFwcGVyKTsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSNkZWZpbmUgTUFLRV9DQVNFKFRZUEUs
IE5BTUUpIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOgotICAgICAgICBBQ1RJVkVfRE9NX09CSkVD
VF9UWVBFUyhNQUtFX0NBU0UpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI3VuZGVm
IE1BS0VfQ0FTRQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZgot
ICAgIGdldERPTU9iamVjdE1hcCgpLnNldChvYmplY3QsIHdyYXBwZXIpOwotfQotCi0vLyBUaGUg
Y2FsbGVyIG11c3QgaGF2ZSBpbmNyZWFzZWQgb2JqJ3MgcmVmIGNvdW50Lgotdm9pZCBWOERPTVdy
YXBwZXI6OnNldEpTV3JhcHBlckZvckFjdGl2ZURPTU9iamVjdCh2b2lkKiBvYmplY3QsIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCi17Ci0gICAgQVNTRVJUKFY4RE9NV3JhcHBl
cjo6bWF5YmVET01XcmFwcGVyKHdyYXBwZXIpKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBl
KHdyYXBwZXIpOwotICAgIHN3aXRjaCAodHlwZSkgewotI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwg
TkFNRSkgY2FzZSBWOENsYXNzSW5kZXg6OlRZUEU6IGJyZWFrOwotICAgICAgICBBQ1RJVkVfRE9N
X09CSkVDVF9UWVBFUyhNQUtFX0NBU0UpCi0gICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotI3VuZGVmIE1BS0VfQ0FTRQotICAgIH0KLSNlbmRpZgotICAgIGdldEFj
dGl2ZURPTU9iamVjdE1hcCgpLnNldChvYmplY3QsIHdyYXBwZXIpOwotfQotCi0vLyBUaGUgY2Fs
bGVyIG11c3QgaGF2ZSBpbmNyZWFzZWQgbm9kZSdzIHJlZiBjb3VudC4KLXZvaWQgVjhET01XcmFw
cGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKE5vZGUqIG5vZGUsIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXIpCi17Ci0gICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01X
cmFwcGVyKHdyYXBwZXIpKTsKLSAgICBnZXRET01Ob2RlTWFwKCkuc2V0KG5vZGUsIHdyYXBwZXIp
OwotfQotCiAvLyBFdmVudCBsaXN0ZW5lcnMKIAogc3RhdGljIFY4RXZlbnRMaXN0ZW5lciogZmlu
ZEV2ZW50TGlzdGVuZXJJbkxpc3QoVjhFdmVudExpc3RlbmVyTGlzdCYgbGlzdCwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpCkBAIC04NDgsMjk0ICs3NDYsNiBA
QCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gVjhQcm94eTo6Y3JlYXRlV3JhCiAgICAgcmV0dXJuIG5v
dEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiB9CiAKLS8vIEdldCB0aGUgc3RyaW5nICd0b1N0cmlu
ZycuCi1zdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OlN0cmluZz4gR2V0VG9TdHJpbmdOYW1lKCkK
LXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+LCB2
YWx1ZSwgKCkpOwotICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkpCi0gICAgICAgIHZhbHVlID0gdjg6
OlBlcnNpc3RlbnQ8djg6OlN0cmluZz46Ok5ldyh2ODo6U3RyaW5nOjpOZXcoInRvU3RyaW5nIikp
OwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBD
b25zdHJ1Y3RvclRvU3RyaW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgLy8g
VGhlIERPTSBjb25zdHJ1Y3RvcnMnIHRvU3RyaW5nIGZ1bmN0aW9ucyBncmFiIHRoZSBjdXJyZW50
IHRvU3RyaW5nCi0gICAgLy8gZm9yIEZ1bmN0aW9ucyBieSB0YWtpbmcgdGhlIHRvU3RyaW5nIGZ1
bmN0aW9uIG9mIGl0c2VsZiBhbmQgdGhlbgotICAgIC8vIGNhbGxpbmcgaXQgd2l0aCB0aGUgY29u
c3RydWN0b3IgYXMgaXRzIHJlY2VpdmVyLiBUaGlzIG1lYW5zIHRoYXQKLSAgICAvLyBjaGFuZ2Vz
IHRvIHRoZSBGdW5jdGlvbiBwcm90b3R5cGUgY2hhaW4gb3IgdG9TdHJpbmcgZnVuY3Rpb24gYXJl
Ci0gICAgLy8gcmVmbGVjdGVkIHdoZW4gcHJpbnRpbmcgRE9NIGNvbnN0cnVjdG9ycy4gVGhlIG9u
bHkgd2FydCBpcyB0aGF0Ci0gICAgLy8gY2hhbmdlcyB0byBhIERPTSBjb25zdHJ1Y3RvcidzIHRv
U3RyaW5nJ3MgdG9TdHJpbmcgd2lsbCBjYXVzZSB0aGUKLSAgICAvLyB0b1N0cmluZyBvZiB0aGUg
RE9NIGNvbnN0cnVjdG9yIGl0c2VsZiB0byBjaGFuZ2UuIFRoaXMgaXMgZXh0cmVtZWx5Ci0gICAg
Ly8gb2JzY3VyZSBhbmQgdW5saWtlbHkgdG8gYmUgYSBwcm9ibGVtLgotICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSA9IGFyZ3MuQ2FsbGVlKCktPkdldChHZXRUb1N0cmluZ05hbWUoKSk7
Ci0gICAgaWYgKCF2YWx1ZS0+SXNGdW5jdGlvbigpKSAKLSAgICAgICAgcmV0dXJuIHY4OjpTdHJp
bmc6Ok5ldygiIik7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2FzdCh2
YWx1ZSktPkNhbGwoYXJncy5UaGlzKCksIDAsIDApOwotfQotCi12ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZShWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSkKLXsKLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4qIGNhY2hlQ2VsbCA9IFY4Q2xhc3NJbmRleDo6R2V0Q2FjaGUodHlwZSk7Ci0gICAg
aWYgKCFjYWNoZUNlbGwtPklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICpjYWNoZUNlbGw7Ci0K
LSAgICAvLyBOb3QgaW4gdGhlIGNhY2hlLgotICAgIEZ1bmN0aW9uVGVtcGxhdGVGYWN0b3J5IGZh
Y3RvcnkgPSBWOENsYXNzSW5kZXg6OkdldEZhY3RvcnkodHlwZSk7Ci0gICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2NyaXB0b3IgPSBmYWN0b3J5KCk7Ci0gICAgLy8g
RE9NIGNvbnN0cnVjdG9ycyBhcmUgZnVuY3Rpb25zIGFuZCBzaG91bGQgcHJpbnQgdGhlbXNlbHZl
cyBhcyBzdWNoLgotICAgIC8vIEhvd2V2ZXIsIHdlIHdpbGwgbGF0ZXIgcmVwbGFjZSB0aGVpciBw
cm90b3R5cGVzIHdpdGggT2JqZWN0Ci0gICAgLy8gcHJvdG90eXBlcyBzbyB3ZSBuZWVkIHRvIGV4
cGxpY2l0bHkgb3ZlcnJpZGUgdG9TdHJpbmcgb24gdGhlCi0gICAgLy8gaW5zdGFuY2UgaXRzZWxm
LiBJZiB3ZSBsYXRlciBtYWtlIERPTSBjb25zdHJ1Y3RvcnMgZnVsbCBvYmplY3RzCi0gICAgLy8g
d2UgY2FuIGdpdmUgdGhlbSBjbGFzcyBuYW1lcyBpbnN0ZWFkIGFuZCBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nCi0gICAgLy8gd2lsbCB3b3JrIHNvIHdlIGNhbiByZW1vdmUgdGhpcyBjb2RlLgot
ICAgIERFRklORV9TVEFUSUNfTE9DQUwodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+LCB0b1N0cmluZ1RlbXBsYXRlLCAoKSk7Ci0gICAgaWYgKHRvU3RyaW5nVGVtcGxhdGUuSXNF
bXB0eSgpKQotICAgICAgICB0b1N0cmluZ1RlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+OjpOZXcodjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhDb25zdHJ1Y3Rv
clRvU3RyaW5nKSk7Ci0gICAgZGVzY3JpcHRvci0+U2V0KEdldFRvU3RyaW5nTmFtZSgpLCB0b1N0
cmluZ1RlbXBsYXRlKTsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFY4Q2xhc3NJbmRl
eDo6Q1NTU1RZTEVERUNMQVJBVElPTjoKLSAgICAgICAgLy8gVGhlIG5hbWVkIHByb3BlcnR5IGhh
bmRsZXIgZm9yIHN0eWxlIGRlY2xhcmF0aW9ucyBoYXMgYQotICAgICAgICAvLyBzZXR0ZXIuIFRo
ZXJlZm9yZSwgdGhlIGludGVyY2VwdG9yIGhhcyB0byBiZSBvbiB0aGUgb2JqZWN0Ci0gICAgICAg
IC8vIGl0c2VsZiBhbmQgbm90IG9uIHRoZSBwcm90b3R5cGUgb2JqZWN0LgotICAgICAgICBkZXNj
cmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKCBVU0Vf
TkFNRURfUFJPUEVSVFlfR0VUVEVSKENTU1N0eWxlRGVjbGFyYXRpb24pLCBVU0VfTkFNRURfUFJP
UEVSVFlfU0VUVEVSKENTU1N0eWxlRGVjbGFyYXRpb24pKTsKLSAgICAgICAgc2V0Q29sbGVjdGlv
blN0cmluZ09yTnVsbEluZGV4ZWRHZXR0ZXI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4oZGVzY3JpcHRv
cik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpDU1NSVUxFTElTVDoK
LSAgICAgICAgc2V0Q29sbGVjdGlvbkluZGV4ZWRHZXR0ZXI8Q1NTUnVsZUxpc3QsIENTU1J1bGU+
KGRlc2NyaXB0b3IsICBWOENsYXNzSW5kZXg6OkNTU1JVTEUpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFY4Q2xhc3NJbmRleDo6Q1NTVkFMVUVMSVNUOgotICAgICAgICBzZXRDb2xsZWN0aW9u
SW5kZXhlZEdldHRlcjxDU1NWYWx1ZUxpc3QsIENTU1ZhbHVlPihkZXNjcmlwdG9yLCBWOENsYXNz
SW5kZXg6OkNTU1ZBTFVFKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6
OkNTU1ZBUklBQkxFU0RFQ0xBUkFUSU9OOgotICAgICAgICBzZXRDb2xsZWN0aW9uU3RyaW5nT3JO
dWxsSW5kZXhlZEdldHRlcjxDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbj4oZGVzY3JpcHRvcik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpXRUJLSVRDU1NUUkFOU0ZPUk1W
QUxVRToKLSAgICAgICAgc2V0Q29sbGVjdGlvbkluZGV4ZWRHZXR0ZXI8V2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWUsIENTU1ZhbHVlPihkZXNjcmlwdG9yLCBWOENsYXNzSW5kZXg6OkNTU1ZBTFVFKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OlVOREVURUNUQUJMRUhUTUxD
T0xMRUNUSU9OOgotICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPk1hcmtB
c1VuZGV0ZWN0YWJsZSgpOyAvLyBmYWxsIHRocm91Z2gKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6
SFRNTENPTExFQ1RJT046Ci0gICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+
U2V0TmFtZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX05BTUVEX1BST1BFUlRZX0dFVFRFUihIVE1MQ29s
bGVjdGlvbikpOwotICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldENh
bGxBc0Z1bmN0aW9uSGFuZGxlcihVU0VfQ0FMTEJBQ0soSFRNTENvbGxlY3Rpb25DYWxsQXNGdW5j
dGlvbikpOwotICAgICAgICBzZXRDb2xsZWN0aW9uSW5kZXhlZEdldHRlcjxIVE1MQ29sbGVjdGlv
biwgTm9kZT4oZGVzY3JpcHRvciwgVjhDbGFzc0luZGV4OjpOT0RFKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OkhUTUxPUFRJT05TQ09MTEVDVElPTjoKLSAgICAgICAg
ZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXROYW1lZFByb3BlcnR5SGFuZGxlcihV
U0VfTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxDb2xsZWN0aW9uKSk7Ci0gICAgICAgIGRlc2Ny
aXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihVU0Vf
SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoSFRNTE9wdGlvbnNDb2xsZWN0aW9uKSwgVVNFX0lOREVY
RURfUFJPUEVSVFlfU0VUVEVSKEhUTUxPcHRpb25zQ29sbGVjdGlvbikpOwotICAgICAgICBkZXNj
cmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldENhbGxBc0Z1bmN0aW9uSGFuZGxlcihVU0Vf
Q0FMTEJBQ0soSFRNTENvbGxlY3Rpb25DYWxsQXNGdW5jdGlvbikpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6SFRNTFNFTEVDVEVMRU1FTlQ6Ci0gICAgICAgIGRlc2Ny
aXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0TmFtZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX05B
TUVEX1BST1BFUlRZX0dFVFRFUihIVE1MU2VsZWN0RWxlbWVudENvbGxlY3Rpb24pKTsKLSAgICAg
ICAgZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5k
bGVyKG5vZGVDb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5R2V0dGVyPEhUTUxTZWxlY3RFbGVtZW50
PiwgVVNFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKEhUTUxTZWxlY3RFbGVtZW50Q29sbGVjdGlv
biksCi0gICAgICAgICAgICAwLCAwLCBub2RlQ29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVudW1l
cmF0b3I8SFRNTFNlbGVjdEVsZW1lbnQ+LCB2ODo6SW50ZWdlcjo6TmV3KFY4Q2xhc3NJbmRleDo6
Tk9ERSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6SFRNTERPQ1VN
RU5UOiB7Ci0gICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0TmFtZWRQ
cm9wZXJ0eUhhbmRsZXIoVVNFX05BTUVEX1BST1BFUlRZX0dFVFRFUihIVE1MRG9jdW1lbnQpLCAw
LCAwLCBVU0VfTkFNRURfUFJPUEVSVFlfREVMRVRFUihIVE1MRG9jdW1lbnQpKTsKLQotICAgICAg
ICAvLyBXZSBhZGQgYW4gZXh0cmEgaW50ZXJuYWwgZmllbGQgdG8gYWxsIERvY3VtZW50IHdyYXBw
ZXJzIGZvcgotICAgICAgICAvLyBzdG9yaW5nIGEgcGVyIGRvY3VtZW50IERPTUltcGxlbWVudGF0
aW9uIHdyYXBwZXIuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFkZGl0aW9uYWxseSwgd2UgYWRk
IHR3byBleHRyYSBpbnRlcm5hbCBmaWVsZHMgZm9yCi0gICAgICAgIC8vIEhUTUxEb2N1bWVudHMg
dG8gaW1wbGVtZW50IHRlbXBvcmFyeSBzaGFkb3dpbmcgb2YKLSAgICAgICAgLy8gZG9jdW1lbnQu
YWxsLiBPbmUgZmllbGQgaG9sZHMgYW4gb2JqZWN0IHRoYXQgaXMgdXNlZCBhcyBhCi0gICAgICAg
IC8vIG1hcmtlci4gVGhlIG90aGVyIGZpZWxkIGhvbGRzIHRoZSBtYXJrZXIgb2JqZWN0IGlmCi0g
ICAgICAgIC8vIGRvY3VtZW50LmFsbCBpcyBub3Qgc2hhZG93ZWQgYW5kIHNvbWUgb3RoZXIgdmFs
dWUgaWYKLSAgICAgICAgLy8gZG9jdW1lbnQuYWxsIGlzIHNoYWRvd2VkLgotICAgICAgICB2ODo6
TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZVRlbXBsYXRlID0gZGVzY3JpcHRvci0+
SW5zdGFuY2VUZW1wbGF0ZSgpOwotICAgICAgICBBU1NFUlQoaW5zdGFuY2VUZW1wbGF0ZS0+SW50
ZXJuYWxGaWVsZENvdW50KCkgPT0gVjhDdXN0b206OmtEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCk7Ci0gICAgICAgIGluc3RhbmNlVGVtcGxhdGUtPlNldEludGVybmFsRmllbGRDb3Vu
dChWOEN1c3RvbTo6a0hUTUxEb2N1bWVudEludGVybmFsRmllbGRDb3VudCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpTVkdE
T0NVTUVOVDogIC8vIGZhbGwgdGhyb3VnaAotI2VuZGlmCi0gICAgY2FzZSBWOENsYXNzSW5kZXg6
OkRPQ1VNRU5UOiB7Ci0gICAgICAgIC8vIFdlIGFkZCBhbiBleHRyYSBpbnRlcm5hbCBmaWVsZCB0
byBhbGwgRG9jdW1lbnQgd3JhcHBlcnMgZm9yCi0gICAgICAgIC8vIHN0b3JpbmcgYSBwZXIgZG9j
dW1lbnQgRE9NSW1wbGVtZW50YXRpb24gd3JhcHBlci4KLSAgICAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3RUZW1wbGF0ZT4gaW5zdGFuY2VUZW1wbGF0ZSA9IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVt
cGxhdGUoKTsKLSAgICAgICAgQVNTRVJUKGluc3RhbmNlVGVtcGxhdGUtPkludGVybmFsRmllbGRD
b3VudCgpID09IFY4Q3VzdG9tOjprRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQpOwot
ICAgICAgICBpbnN0YW5jZVRlbXBsYXRlLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoIFY4Q3VzdG9t
OjprRG9jdW1lbnRNaW5pbXVtSW50ZXJuYWxGaWVsZENvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpIVE1MQVBQTEVURUxFTUVOVDogIC8vIGZhbGwg
dGhyb3VnaAotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpIVE1MRU1CRURFTEVNRU5UOiAgLy8gZmFs
bCB0aHJvdWdoCi0gICAgY2FzZSBWOENsYXNzSW5kZXg6OkhUTUxPQkpFQ1RFTEVNRU5UOgotICAg
ICAgICAvLyBIVE1MQXBwbGV0RWxlbWVudCwgSFRNTEVtYmVkRWxlbWVudCBhbmQgSFRNTE9iamVj
dEVsZW1lbnQgYXJlCi0gICAgICAgIC8vIGluaGVyaXRlZCBmcm9tIEhUTUxQbHVnSW5FbGVtZW50
LCBhbmQgdGhleSBzaGFyZSB0aGUgc2FtZSBwcm9wZXJ0eQotICAgICAgICAvLyBoYW5kbGluZyBj
b2RlLgotICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldE5hbWVkUHJv
cGVydHlIYW5kbGVyKFVTRV9OQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTFBsdWdJbkVsZW1lbnQp
LCBVU0VfTkFNRURfUFJPUEVSVFlfU0VUVEVSKEhUTUxQbHVnSW5FbGVtZW50KSk7Ci0gICAgICAg
IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxl
cihVU0VfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoSFRNTFBsdWdJbkVsZW1lbnQpLCBVU0VfSU5E
RVhFRF9QUk9QRVJUWV9TRVRURVIoSFRNTFBsdWdJbkVsZW1lbnQpKTsKLSAgICAgICAgZGVzY3Jp
cHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRDYWxsQXNGdW5jdGlvbkhhbmRsZXIoVVNFX0NB
TExCQUNLKEhUTUxQbHVnSW5FbGVtZW50KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpIVE1MRlJBTUVTRVRFTEVNRU5UOgotICAgICAgICBkZXNjcmlwdG9yLT5JbnN0
YW5jZVRlbXBsYXRlKCktPlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKFVTRV9OQU1FRF9QUk9QRVJU
WV9HRVRURVIoSFRNTEZyYW1lU2V0RWxlbWVudCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFY4Q2xhc3NJbmRleDo6SFRNTEZPUk1FTEVNRU5UOgotICAgICAgICBkZXNjcmlwdG9yLT5JbnN0
YW5jZVRlbXBsYXRlKCktPlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKFVTRV9OQU1FRF9QUk9QRVJU
WV9HRVRURVIoSFRNTEZvcm1FbGVtZW50KSk7Ci0gICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNl
VGVtcGxhdGUoKS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihVU0VfSU5ERVhFRF9QUk9QRVJU
WV9HRVRURVIoSFRNTEZvcm1FbGVtZW50KSwgMCwgMCwgMCwgbm9kZUNvbGxlY3Rpb25JbmRleGVk
UHJvcGVydHlFbnVtZXJhdG9yPEhUTUxGb3JtRWxlbWVudD4sIHY4OjpJbnRlZ2VyOjpOZXcoVjhD
bGFzc0luZGV4OjpOT0RFKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVjhDbGFzc0luZGV4
OjpDQU5WQVNQSVhFTEFSUkFZOgotICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRl
KCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVS
KENhbnZhc1BpeGVsQXJyYXkpLCBVU0VfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoQ2FudmFzUGl4
ZWxBcnJheSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6U1RZTEVT
SEVFVDogIC8vIGZhbGwgdGhyb3VnaAotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpDU1NTVFlMRVNI
RUVUOiB7Ci0gICAgICAgIC8vIFdlIGFkZCBhbiBleHRyYSBpbnRlcm5hbCBmaWVsZCB0byBob2xk
IGEgcmVmZXJlbmNlIHRvCi0gICAgICAgIC8vIHRoZSBvd25lciBub2RlLgotICAgICAgICB2ODo6
TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZVRlbXBsYXRlID0gZGVzY3JpcHRvci0+
SW5zdGFuY2VUZW1wbGF0ZSgpOwotICAgICAgICBBU1NFUlQoaW5zdGFuY2VUZW1wbGF0ZS0+SW50
ZXJuYWxGaWVsZENvdW50KCkgPT0gVjhDdXN0b206OmtEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCk7Ci0gICAgICAgIGluc3RhbmNlVGVtcGxhdGUtPlNldEludGVybmFsRmllbGRDb3Vu
dChWOEN1c3RvbTo6a1N0eWxlU2hlZXRJbnRlcm5hbEZpZWxkQ291bnQpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6Ok1FRElBTElTVDoKLSAgICAgICAgc2V0
Q29sbGVjdGlvblN0cmluZ09yTnVsbEluZGV4ZWRHZXR0ZXI8TWVkaWFMaXN0PihkZXNjcmlwdG9y
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6Ok1JTUVUWVBFQVJSQVk6
Ci0gICAgICAgIHNldENvbGxlY3Rpb25JbmRleGVkQW5kTmFtZWRHZXR0ZXJzPE1pbWVUeXBlQXJy
YXksIE1pbWVUeXBlPihkZXNjcmlwdG9yLCBWOENsYXNzSW5kZXg6Ok1JTUVUWVBFKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6Ok5BTUVETk9ERU1BUDoKLSAgICAgICAg
ZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXROYW1lZFByb3BlcnR5SGFuZGxlcihV
U0VfTkFNRURfUFJPUEVSVFlfR0VUVEVSKE5hbWVkTm9kZU1hcCkpOwotICAgICAgICBkZXNjcmlw
dG9yLT5JbnN0YW5jZVRlbXBsYXRlKCktPlNldEluZGV4ZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX0lO
REVYRURfUFJPUEVSVFlfR0VUVEVSKE5hbWVkTm9kZU1hcCksIDAsIDAsIDAsIGNvbGxlY3Rpb25J
bmRleGVkUHJvcGVydHlFbnVtZXJhdG9yPE5hbWVkTm9kZU1hcD4sIHY4OjpJbnRlZ2VyOjpOZXco
VjhDbGFzc0luZGV4OjpOT0RFKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShET01fU1RP
UkFHRSkKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6U1RPUkFHRToKLSAgICAgICAgZGVzY3JpcHRv
ci0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXROYW1lZFByb3BlcnR5SGFuZGxlcihVU0VfTkFNRURf
UFJPUEVSVFlfR0VUVEVSKFN0b3JhZ2UpLCBVU0VfTkFNRURfUFJPUEVSVFlfU0VUVEVSKFN0b3Jh
Z2UpLCAwLCBVU0VfTkFNRURfUFJPUEVSVFlfREVMRVRFUihTdG9yYWdlKSwgVjhDdXN0b206OnY4
U3RvcmFnZU5hbWVkUHJvcGVydHlFbnVtZXJhdG9yKTsKLSAgICAgICAgZGVzY3JpcHRvci0+SW5z
dGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKFVTRV9JTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUihTdG9yYWdlKSwgVVNFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKFN0b3Jh
Z2UpLCAwLCBVU0VfSU5ERVhFRF9QUk9QRVJUWV9ERUxFVEVSKFN0b3JhZ2UpKTsKLSAgICAgICAg
YnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Tk9ERUxJU1Q6Ci0gICAgICAg
IHNldENvbGxlY3Rpb25JbmRleGVkR2V0dGVyPE5vZGVMaXN0LCBOb2RlPihkZXNjcmlwdG9yLCBW
OENsYXNzSW5kZXg6Ok5PREUpOwotICAgICAgICBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRl
KCktPlNldE5hbWVkUHJvcGVydHlIYW5kbGVyKFVTRV9OQU1FRF9QUk9QRVJUWV9HRVRURVIoTm9k
ZUxpc3QpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OlBMVUdJTjoK
LSAgICAgICAgc2V0Q29sbGVjdGlvbkluZGV4ZWRBbmROYW1lZEdldHRlcnM8UGx1Z2luLCBNaW1l
VHlwZT4oZGVzY3JpcHRvciwgVjhDbGFzc0luZGV4OjpNSU1FVFlQRSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpQTFVHSU5BUlJBWToKLSAgICAgICAgc2V0Q29sbGVj
dGlvbkluZGV4ZWRBbmROYW1lZEdldHRlcnM8UGx1Z2luQXJyYXksIFBsdWdpbj4oZGVzY3JpcHRv
ciwgVjhDbGFzc0luZGV4OjpQTFVHSU4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFY4Q2xh
c3NJbmRleDo6U1RZTEVTSEVFVExJU1Q6Ci0gICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVt
cGxhdGUoKS0+U2V0TmFtZWRQcm9wZXJ0eUhhbmRsZXIoVVNFX05BTUVEX1BST1BFUlRZX0dFVFRF
UihTdHlsZVNoZWV0TGlzdCkpOwotICAgICAgICBzZXRDb2xsZWN0aW9uSW5kZXhlZEdldHRlcjxT
dHlsZVNoZWV0TGlzdCwgU3R5bGVTaGVldD4oZGVzY3JpcHRvciwgVjhDbGFzc0luZGV4OjpTVFlM
RVNIRUVUKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OkRPTVdJTkRP
VzogewotICAgICAgICB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gZGVmYXVsdFNpZ25hdHVyZSA9
IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjcmlwdG9yKTsKLQotICAgICAgICBkZXNjcmlwdG9yLT5Q
cm90b3R5cGVUZW1wbGF0ZSgpLT5TZXROYW1lZFByb3BlcnR5SGFuZGxlcihVU0VfTkFNRURfUFJP
UEVSVFlfR0VUVEVSKERPTVdpbmRvdykpOwotICAgICAgICBkZXNjcmlwdG9yLT5Qcm90b3R5cGVU
ZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKFVTRV9JTkRFWEVEX1BST1BFUlRZ
X0dFVFRFUihET01XaW5kb3cpKTsKLQotICAgICAgICBkZXNjcmlwdG9yLT5TZXRIaWRkZW5Qcm90
b3R5cGUodHJ1ZSk7Ci0KLSAgICAgICAgLy8gUmVzZXJ2ZSBzcGFjZXMgZm9yIHJlZmVyZW5jZXMg
dG8gbG9jYXRpb24sIGhpc3RvcnkgYW5kCi0gICAgICAgIC8vIG5hdmlnYXRvciBvYmplY3RzLgot
ICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZVRlbXBsYXRlID0g
ZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpOwotICAgICAgICBpbnN0YW5jZVRlbXBsYXRl
LT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhDdXN0b206OmtET01XaW5kb3dJbnRlcm5hbEZpZWxk
Q291bnQpOwotCi0gICAgICAgIC8vIFNldCBhY2Nlc3MgY2hlY2sgY2FsbGJhY2tzLCBidXQgdHVy
bmVkIG9mZiBpbml0aWFsbHkuCi0gICAgICAgIC8vIFdoZW4gYSBjb250ZXh0IGlzIGRldGFjaGVk
IGZyb20gYSBmcmFtZSwgdHVybiBvbiB0aGUgYWNjZXNzIGNoZWNrLgotICAgICAgICAvLyBUdXJu
aW5nIG9uIGNoZWNrcyBhbHNvIGludmFsaWRhdGVzIGlubGluZSBjYWNoZXMgb2YgdGhlIG9iamVj
dC4KLSAgICAgICAgaW5zdGFuY2VUZW1wbGF0ZS0+U2V0QWNjZXNzQ2hlY2tDYWxsYmFja3MoVjhD
dXN0b206OnY4RE9NV2luZG93TmFtZWRTZWN1cml0eUNoZWNrLCBWOEN1c3RvbTo6djhET01XaW5k
b3dJbmRleGVkU2VjdXJpdHlDaGVjaywgdjg6OkludGVnZXI6Ok5ldyhWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVyksIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVjhDbGFz
c0luZGV4OjpMT0NBVElPTjogewotICAgICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywgdGhl
c2UgZnVuY3Rpb25zIGFyZSBvbiB0aGUgaW5zdGFuY2UKLSAgICAgICAgLy8gaW5zdGVhZCBvZiBv
biB0aGUgcHJvdG90eXBlIG9iamVjdCB0byBpbnN1cmUgdGhhdCB0aGV5IGNhbm5vdAotICAgICAg
ICAvLyBiZSBvdmVyd3JpdHRlbi4KLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0
ZT4gaW5zdGFuY2UgPSBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCk7Ci0gICAgICAgIGlu
c3RhbmNlLT5TZXRBY2Nlc3Nvcih2ODo6U3RyaW5nOjpOZXcoInJlbG9hZCIpLCBWOEN1c3RvbTo6
djhMb2NhdGlvblJlbG9hZEFjY2Vzc29yR2V0dGVyLCAwLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
KSwgdjg6OkFMTF9DQU5fUkVBRCwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2
ODo6RG9udERlbGV0ZSB8IHY4OjpSZWFkT25seSkpOwotICAgICAgICBpbnN0YW5jZS0+U2V0QWNj
ZXNzb3Iodjg6OlN0cmluZzo6TmV3KCJyZXBsYWNlIiksIFY4Q3VzdG9tOjp2OExvY2F0aW9uUmVw
bGFjZUFjY2Vzc29yR2V0dGVyLCAwLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OkFMTF9D
QU5fUkVBRCwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6RG9udERlbGV0
ZSB8IHY4OjpSZWFkT25seSkpOwotICAgICAgICBpbnN0YW5jZS0+U2V0QWNjZXNzb3Iodjg6OlN0
cmluZzo6TmV3KCJhc3NpZ24iKSwgVjhDdXN0b206OnY4TG9jYXRpb25Bc3NpZ25BY2Nlc3Nvckdl
dHRlciwgMCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIHY4OjpBTExfQ0FOX1JFQUQsIHN0YXRp
Y19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6OkRvbnREZWxldGUgfCB2ODo6UmVhZE9u
bHkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpISVNU
T1JZOgotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpNRVNTQUdFQ0hB
Tk5FTDogewotICAgICAgICAvLyBSZXNlcnZlIHR3byBtb3JlIGludGVybmFsIGZpZWxkcyBmb3Ig
cmVmZXJlbmNpbmcgdGhlIHBvcnQxCi0gICAgICAgIC8vIGFuZCBwb3J0MiB3cmFwcGVycy4gVGhp
cyBlbnN1cmVzIHRoYXQgdGhlIHBvcnQgd3JhcHBlcnMgYXJlCi0gICAgICAgIC8vIGtlcHQgYWxp
dmUgd2hlbiB0aGUgY2hhbm5lbCB3cmFwcGVyIGlzLgotICAgICAgICBkZXNjcmlwdG9yLT5TZXRD
YWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3RvcikpOwotICAg
ICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZVRlbXBsYXRlID0gZGVz
Y3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpOwotICAgICAgICBpbnN0YW5jZVRlbXBsYXRlLT5T
ZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhDdXN0b206OmtNZXNzYWdlQ2hhbm5lbEludGVybmFsRmll
bGRDb3VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgVjhDbGFzc0luZGV4
OjpNRVNTQUdFUE9SVDogewotICAgICAgICAvLyBSZXNlcnZlIG9uZSBtb3JlIGludGVybmFsIGZp
ZWxkIGZvciBrZWVwaW5nIGV2ZW50IGxpc3RlbmVycy4KLSAgICAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3RUZW1wbGF0ZT4gaW5zdGFuY2VUZW1wbGF0ZSA9IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVt
cGxhdGUoKTsKLSAgICAgICAgaW5zdGFuY2VUZW1wbGF0ZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50
KFY4Q3VzdG9tOjprTWVzc2FnZVBvcnRJbnRlcm5hbEZpZWxkQ291bnQpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6
V09SS0VSOiB7Ci0gICAgICAgIC8vIFJlc2VydmUgb25lIG1vcmUgaW50ZXJuYWwgZmllbGQgZm9y
IGtlZXBpbmcgZXZlbnQgbGlzdGVuZXJzLgotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRl
bXBsYXRlPiBpbnN0YW5jZVRlbXBsYXRlID0gZGVzY3JpcHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgp
OwotICAgICAgICBpbnN0YW5jZVRlbXBsYXRlLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhDdXN0
b206OmtXb3JrZXJJbnRlcm5hbEZpZWxkQ291bnQpOwotICAgICAgICBkZXNjcmlwdG9yLT5TZXRD
YWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soV29ya2VyQ29uc3RydWN0b3IpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgY2FzZSBWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQ6IHsKLSAg
ICAgICAgLy8gUmVzZXJ2ZSBvbmUgbW9yZSBpbnRlcm5hbCBmaWVsZCBmb3Iga2VlcGluZyBldmVu
dCBsaXN0ZW5lcnMuCi0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3Rh
bmNlVGVtcGxhdGUgPSBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCk7Ci0gICAgICAgIGlu
c3RhbmNlVGVtcGxhdGUtPlNldEludGVybmFsRmllbGRDb3VudChWOEN1c3RvbTo6a1dvcmtlckNv
bnRleHRJbnRlcm5hbEZpZWxkQ291bnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYg
Ly8gV09SS0VSUwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBvYmplY3RzIGFyZSBjcmVhdGVkIGZy
b20gSmF2YVNjcmlwdC4KLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6RE9NUEFSU0VSOgotICAgICAg
ICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soRE9NUGFyc2VyQ29uc3Ry
dWN0b3IpKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpIVE1MQVVESU9FTEVNRU5UOgotICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxs
SGFuZGxlcihVU0VfQ0FMTEJBQ0soSFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yKSk7Ci0gICAg
ICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBWOENsYXNzSW5kZXg6OkhUTUxJTUFHRUVMRU1F
TlQ6Ci0gICAgICAgIGRlc2NyaXB0b3ItPlNldENhbGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhIVE1M
SW1hZ2VFbGVtZW50Q29uc3RydWN0b3IpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWOENs
YXNzSW5kZXg6OkhUTUxPUFRJT05FTEVNRU5UOgotICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxs
SGFuZGxlcihVU0VfQ0FMTEJBQ0soSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3RvcikpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6V0VCS0lUQ1NTTUFUUklYOgotICAg
ICAgICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soV2ViS2l0Q1NTTWF0
cml4Q29uc3RydWN0b3IpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6
OldFQktJVFBPSU5UOgotICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FM
TEJBQ0soV2ViS2l0UG9pbnRDb25zdHJ1Y3RvcikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFY4Q2xhc3NJbmRleDo6WE1MU0VSSUFMSVpFUjoKLSAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2Fs
bEhhbmRsZXIoVVNFX0NBTExCQUNLKFhNTFNlcmlhbGl6ZXJDb25zdHJ1Y3RvcikpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1Q6IHsKLSAgICAg
ICAgLy8gUmVzZXJ2ZSBvbmUgbW9yZSBpbnRlcm5hbCBmaWVsZCBmb3Iga2VlcGluZyBldmVudCBs
aXN0ZW5lcnMuCi0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNl
VGVtcGxhdGUgPSBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCk7Ci0gICAgICAgIGluc3Rh
bmNlVGVtcGxhdGUtPlNldEludGVybmFsRmllbGRDb3VudChWOEN1c3RvbTo6a1hNTEh0dHBSZXF1
ZXN0SW50ZXJuYWxGaWVsZENvdW50KTsKLSAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRs
ZXIoVVNFX0NBTExCQUNLKFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRDog
ewotICAgICAgICAvLyBSZXNlcnZlIG9uZSBtb3JlIGludGVybmFsIGZpZWxkIGZvciBrZWVwaW5n
IGV2ZW50IGxpc3RlbmVycy4KLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4g
aW5zdGFuY2VUZW1wbGF0ZSA9IGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUoKTsKLSAgICAg
ICAgaW5zdGFuY2VUZW1wbGF0ZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KFY4Q3VzdG9tOjprWE1M
SHR0cFJlcXVlc3RJbnRlcm5hbEZpZWxkQ291bnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBWOENsYXNzSW5kZXg6OlhQQVRIRVZBTFVBVE9SOgotICAgICAgICBkZXNjcmlwdG9y
LT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soWFBhdGhFdmFsdWF0b3JDb25zdHJ1Y3Rvcikp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6WFNMVFBST0NFU1NPUjoK
LSAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKFhTTFRQcm9j
ZXNzb3JDb25zdHJ1Y3RvcikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFY4Q2xhc3NJbmRl
eDo6Q0xJRU5UUkVDVExJU1Q6Ci0gICAgICAgIGRlc2NyaXB0b3ItPkluc3RhbmNlVGVtcGxhdGUo
KS0+U2V0SW5kZXhlZFByb3BlcnR5SGFuZGxlcihVU0VfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIo
Q2xpZW50UmVjdExpc3QpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgKmNhY2hlQ2VsbCA9IGRlc2NyaXB0b3I7Ci0gICAgcmV0dXJu
IGRlc2NyaXB0b3I7Ci19Ci0KIGJvb2wgVjhQcm94eTo6aXNDb250ZXh0SW5pdGlhbGl6ZWQoKQog
ewogICAgIC8vIG1fY29udGV4dCwgbV9nbG9iYWwsIG1fb2JqZWN0UHJvdG90eXBlIGFuZCBtX3dy
YXBwZXJCb2lsZXJwbGF0ZXMgc2hvdWxkCkBAIC0xNzkxLDI1NSArMTQwMSw2IEBAIHY4OjpMb2Nh
bDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y3VycmVudEMKICAgICByZXR1cm4gdjg6OkNvbnRleHQ6
OkdldEN1cnJlbnQoKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHZvaWQq
IGltcGwpCi17Ci0gICAgQVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpFVkVOVExJU1RFTkVS
KTsKLSAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UVEFSR0VUKTsKLSAgICBB
U1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UKTsKLQotICAgIGJvb2wgaXNBY3RpdmVE
b21PYmplY3QgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSNkZWZpbmUgTUFLRV9DQVNF
KFRZUEUsIE5BTUUpIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOgotICAgICAgICBET01fTk9ERV9U
WVBFUyhNQUtFX0NBU0UpCi0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgU1ZHX05PREVfVFlQRVMo
TUFLRV9DQVNFKQotI2VuZGlmCi0gICAgICAgIHJldHVybiBjb252ZXJ0Tm9kZVRvVjhPYmplY3Qo
c3RhdGljX2Nhc3Q8Tm9kZSo+KGltcGwpKTsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q1NTVkFM
VUU6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0Q1NTVmFsdWVUb1Y4T2JqZWN0KHN0YXRpY19jYXN0
PENTU1ZhbHVlKj4oaW1wbCkpOwotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpDU1NSVUxFOgotICAg
ICAgICByZXR1cm4gY29udmVydENTU1J1bGVUb1Y4T2JqZWN0KHN0YXRpY19jYXN0PENTU1J1bGUq
PihpbXBsKSk7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OlNUWUxFU0hFRVQ6Ci0gICAgICAgIHJl
dHVybiBjb252ZXJ0U3R5bGVTaGVldFRvVjhPYmplY3Qoc3RhdGljX2Nhc3Q8U3R5bGVTaGVldCo+
KGltcGwpKTsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XOgotICAgICAgICByZXR1
cm4gY29udmVydFdpbmRvd1RvVjhPYmplY3Qoc3RhdGljX2Nhc3Q8RE9NV2luZG93Kj4oaW1wbCkp
OwotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgIFNWR19OT05OT0RFX1RZUEVTKE1BS0VfQ0FTRSkK
LSAgICAgICAgaWYgKHR5cGUgPT0gVjhDbGFzc0luZGV4OjpTVkdFTEVNRU5USU5TVEFOQ0UpCi0g
ICAgICAgICAgICByZXR1cm4gY29udmVydFNWR0VsZW1lbnRJbnN0YW5jZVRvVjhPYmplY3Qoc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudEluc3RhbmNlKj4oaW1wbCkpOwotICAgICAgICByZXR1cm4gY29u
dmVydFNWR09iamVjdFdpdGhDb250ZXh0VG9WOE9iamVjdCh0eXBlLCBpbXBsKTsKLSNlbmRpZgot
Ci0gICAgICAgIEFDVElWRV9ET01fT0JKRUNUX1RZUEVTKE1BS0VfQ0FTRSkKLSAgICAgICAgaXNB
Y3RpdmVEb21PYmplY3QgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBicmVhazsKLSAgfQotCi0jdW5kZWYgTUFLRV9DQVNFCi0KLSAgICBpZiAoIWltcGwpCi0g
ICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAgLy8gTm9uIERPTSBub2RlCi0gICAgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gcmVzdWx0ID0gaXNBY3RpdmVEb21PYmplY3QgPyBnZXRB
Y3RpdmVET01PYmplY3RNYXAoKS5nZXQoaW1wbCkgOiBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1w
bCk7Ci0gICAgaWYgKHJlc3VsdC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IHY4T2JqZWN0ID0gaW5zdGFudGlhdGVWOE9iamVjdCh0eXBlLCB0eXBlLCBpbXBsKTsK
LSAgICAgICAgaWYgKCF2OE9iamVjdC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIEdvIHRo
cm91Z2ggYmlnIHN3aXRjaCBzdGF0ZW1lbnQsIGl0IGhhcyBzb21lIGR1cGxpY2F0aW9ucwotICAg
ICAgICAgICAgLy8gdGhhdCB3ZXJlIGhhbmRsZWQgYnkgY29kZSBhYm92ZSAoc3VjaCBhcyBDU1NW
QUxVRSwgQ1NTUlVMRSwgZXRjKS4KLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotI2RlZmlu
ZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkgXAotICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6
OlRZUEU6IHN0YXRpY19jYXN0PE5BTUUqPihpbXBsKS0+cmVmKCk7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIERPTV9PQkpFQ1RfVFlQRVMoTUFLRV9DQVNFKQotI3VuZGVmIE1BS0VfQ0FTRQotICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+OjpOZXcodjhPYmplY3QpOwotICAgICAgICAgICAgaWYgKGlzQWN0aXZlRG9tT2JqZWN0
KQotICAgICAgICAgICAgICAgIHNldEpTV3JhcHBlckZvckFjdGl2ZURPTU9iamVjdChpbXBsLCBy
ZXN1bHQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldEpTV3JhcHBlckZv
ckRPTU9iamVjdChpbXBsLCByZXN1bHQpOwotCi0gICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2Ug
Zm9yIG5vbi1ub2RlIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIGEKLSAgICAgICAgICAgIC8vIERP
TVdpbmRvdy4gQm90aCBTYWZhcmkgYW5kIEZGIGxldCB0aGUgSlMgd3JhcHBlcnMgZm9yIHRoZXNl
Ci0gICAgICAgICAgICAvLyBvYmplY3RzIHN1cnZpdmUgR0MuIFRvIG1pbWljIHRoZWlyIGJlaGF2
aW9yLCBWOCBjcmVhdGVzCi0gICAgICAgICAgICAvLyBoaWRkZW4gcmVmZXJlbmNlcyBmcm9tIHRo
ZSBET01XaW5kb3cgdG8gdGhlc2Ugd3JhcHBlcgotICAgICAgICAgICAgLy8gb2JqZWN0cy4gVGhl
c2UgcmVmZXJlbmNlcyBnZXQgY2xlYXJlZCB3aGVuIHRoZSBET01XaW5kb3cgaXMKLSAgICAgICAg
ICAgIC8vIHJldXNlZCBieSBhIG5ldyBwYWdlLgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q09OU09MRToKLSAgICAgICAgICAgICAg
ICBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8Q29uc29sZSo+KGltcGwpLT5m
cmFtZSgpLCBWOEN1c3RvbTo6a0RPTVdpbmRvd0NvbnNvbGVJbmRleCwgcmVzdWx0KTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpISVNUT1JZ
OgotICAgICAgICAgICAgICAgIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShzdGF0aWNfY2FzdDxI
aXN0b3J5Kj4oaW1wbCktPmZyYW1lKCksIFY4Q3VzdG9tOjprRE9NV2luZG93SGlzdG9yeUluZGV4
LCByZXN1bHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWOENs
YXNzSW5kZXg6Ok5BVklHQVRPUjoKLSAgICAgICAgICAgICAgICBzZXRIaWRkZW5XaW5kb3dSZWZl
cmVuY2Uoc3RhdGljX2Nhc3Q8TmF2aWdhdG9yKj4oaW1wbCktPmZyYW1lKCksIFY4Q3VzdG9tOjpr
RE9NV2luZG93TmF2aWdhdG9ySW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6U0NSRUVOOgotICAgICAgICAgICAgICAg
IHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShzdGF0aWNfY2FzdDxTY3JlZW4qPihpbXBsKS0+ZnJh
bWUoKSwgVjhDdXN0b206OmtET01XaW5kb3dTY3JlZW5JbmRleCwgcmVzdWx0KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpMT0NBVElPTjoK
LSAgICAgICAgICAgICAgICBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8TG9j
YXRpb24qPihpbXBsKS0+ZnJhbWUoKSwgVjhDdXN0b206OmtET01XaW5kb3dMb2NhdGlvbkluZGV4
LCByZXN1bHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWOENs
YXNzSW5kZXg6OkRPTVNFTEVDVElPTjoKLSAgICAgICAgICAgICAgICBzZXRIaWRkZW5XaW5kb3dS
ZWZlcmVuY2Uoc3RhdGljX2Nhc3Q8RE9NU2VsZWN0aW9uKj4oaW1wbCktPmZyYW1lKCksIFY4Q3Vz
dG9tOjprRE9NV2luZG93RE9NU2VsZWN0aW9uSW5kZXgsIHJlc3VsdCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6QkFSSU5GTzogewotICAg
ICAgICAgICAgICAgIEJhckluZm8qIGJhckluZm8gPSBzdGF0aWNfY2FzdDxCYXJJbmZvKj4oaW1w
bCk7Ci0gICAgICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gYmFySW5mby0+ZnJhbWUoKTsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGJhckluZm8tPnR5cGUoKSkgewotICAgICAgICAgICAgICAg
IGNhc2UgQmFySW5mbzo6TG9jYXRpb25iYXI6Ci0gICAgICAgICAgICAgICAgICAgIHNldEhpZGRl
bldpbmRvd1JlZmVyZW5jZShmcmFtZSwgVjhDdXN0b206OmtET01XaW5kb3dMb2NhdGlvbmJhcklu
ZGV4LCByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBjYXNlIEJhckluZm86Ok1lbnViYXI6Ci0gICAgICAgICAgICAgICAgICAgIHNldEhpZGRlbldp
bmRvd1JlZmVyZW5jZShmcmFtZSwgVjhDdXN0b206OmtET01XaW5kb3dNZW51YmFySW5kZXgsIHJl
c3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
QmFySW5mbzo6UGVyc29uYWxiYXI6Ci0gICAgICAgICAgICAgICAgICAgIHNldEhpZGRlbldpbmRv
d1JlZmVyZW5jZShmcmFtZSwgVjhDdXN0b206OmtET01XaW5kb3dQZXJzb25hbGJhckluZGV4LCBy
ZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IEJhckluZm86OlNjcm9sbGJhcnM6Ci0gICAgICAgICAgICAgICAgICAgIHNldEhpZGRlbldpbmRv
d1JlZmVyZW5jZShmcmFtZSwgVjhDdXN0b206OmtET01XaW5kb3dTY3JvbGxiYXJzSW5kZXgsIHJl
c3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
QmFySW5mbzo6U3RhdHVzYmFyOgotICAgICAgICAgICAgICAgICAgICBzZXRIaWRkZW5XaW5kb3dS
ZWZlcmVuY2UoZnJhbWUsIFY4Q3VzdG9tOjprRE9NV2luZG93U3RhdHVzYmFySW5kZXgsIHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQmFy
SW5mbzo6VG9vbGJhcjoKLSAgICAgICAgICAgICAgICAgICAgc2V0SGlkZGVuV2luZG93UmVmZXJl
bmNlKGZyYW1lLCBWOEN1c3RvbTo6a0RPTVdpbmRvd1Rvb2xiYXJJbmRleCwgcmVzdWx0KTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi12b2lkIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJl
bmNlKEZyYW1lKiBmcmFtZSwgY29uc3QgaW50IGludGVybmFsSW5kZXgsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4ganNPYmplY3QpCi17Ci0gICAgLy8gR2V0IERPTVdpbmRvdwotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybjsgLy8gT2JqZWN0IG1pZ2h0IGJlIGRldGFjaGVkIGZyb20gd2lu
ZG93Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gVjhQcm94eTo6Y29u
dGV4dChmcmFtZSk7Ci0gICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChpbnRlcm5hbEluZGV4IDwgVjhDdXN0b206OmtET01XaW5kb3dJbnRl
cm5hbEZpZWxkQ291bnQpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSB2
OENvbnRleHQtPkdsb2JhbCgpOwotICAgIC8vIExvb2sgZm9yIHJlYWwgRE9NIHdyYXBwZXIuCi0g
ICAgZ2xvYmFsID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCBnbG9iYWwpOwotICAgIEFTU0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7Ci0gICAg
QVNTRVJUKGdsb2JhbC0+R2V0SW50ZXJuYWxGaWVsZChpbnRlcm5hbEluZGV4KS0+SXNVbmRlZmlu
ZWQoKSk7Ci0gICAgZ2xvYmFsLT5TZXRJbnRlcm5hbEZpZWxkKGludGVybmFsSW5kZXgsIGpzT2Jq
ZWN0KTsKLX0KLQotVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIFY4RE9NV3JhcHBlcjo6ZG9t
V3JhcHBlclR5cGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCi17Ci0gICAgQVNTRVJU
KFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKG9iamVjdCkpOwotICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0eXBlID0gb2JqZWN0LT5HZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9N
V3JhcHBlclR5cGVJbmRleCk7Ci0gICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6RnJvbUludCh0eXBl
LT5JbnQzMlZhbHVlKCkpOwotfQotCi12b2lkKiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdEltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBvYmplY3QpCi17Ci0gICAgLy8gTmF0aXZlIGV2ZW50IGxpc3RlbmVyIGlzIHBl
ciBmcmFtZSwgaXQgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBnZW5lcmljIGZ1bmN0aW9uLgot
ICAgIEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRMSVNURU5FUik7Ci0gICAgQVNT
RVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpFVkVOVFRBUkdFVCk7Ci0KLSAgICBBU1NFUlQoVjhE
T01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7Ci0KLSAgICBzd2l0Y2ggKHR5cGUp
IHsKLSNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBF
OgotICAgICAgICBET01fTk9ERV9UWVBFUyhNQUtFX0NBU0UpCi0jaWYgRU5BQkxFKFNWRykKLSAg
ICAgICAgU1ZHX05PREVfVFlQRVMoTUFLRV9DQVNFKQotI2VuZGlmCi0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6
WE1MSFRUUFJFUVVFU1Q6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZl
PFhNTEh0dHBSZXF1ZXN0PihvYmplY3QpOwotICAgIGNhc2UgVjhDbGFzc0luZGV4OjpFVkVOVDoK
LSAgICAgICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RXZlbnQ+KG9iamVjdCk7
Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OkNTU1JVTEU6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
RE9NV3JhcHBlclRvTmF0aXZlPENTU1J1bGU+KG9iamVjdCk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotI3VuZGVmIE1BS0VfQ0FTRQotCi0gICAgcmV0dXJuIGNvbnZlcnRE
T01XcmFwcGVyVG9OYXRpdmU8dm9pZD4ob2JqZWN0KTsKLX0KLQotCi12b2lkKiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb1NWR1BPRFR5cGVJbXBsKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0
eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQotewotICAgIHJldHVybiBpc1dyYXBw
ZXJPZlR5cGUob2JqZWN0LCB0eXBlKSA/IGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8dm9pZD4o
b2JqZWN0KSA6IDA7Ci19Ci0KLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhET01XcmFwcGVyOjps
b29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLklzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjcmlwdG9yID0gVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0
ZSh0eXBlKTsKLSAgICB3aGlsZSAodmFsdWUtPklzT2JqZWN0KCkpIHsKLSAgICAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZh
bHVlKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3ItPkhhc0luc3RhbmNlKG9iamVjdCkpCi0gICAg
ICAgICAgICByZXR1cm4gb2JqZWN0OwotCi0gICAgICAgIHZhbHVlID0gb2JqZWN0LT5HZXRQcm90
b3R5cGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7Ci19
IAotCi12b2lkKiBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlSGVscGVyKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobWF5YmVET01XcmFwcGVy
KHZhbHVlKSk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOwotCi0gICAgQVNTRVJUKGRvbVdyYXBwZXJUeXBl
KG9iamVjdCkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKLQotICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3cmFwcGVyID0gb2JqZWN0LT5HZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV3Jh
cHBlck9iamVjdEluZGV4KTsKLSAgICByZXR1cm4gZXh0cmFjdENQb2ludGVyPE5vZGU+KHdyYXBw
ZXIpOwotfQotCi1QYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IFY4RE9NV3JhcHBlcjo6d3JhcE5hdGl2
ZU5vZGVGaWx0ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGZpbHRlcikKLXsKLSAgICAvLyBBIE5v
ZGVGaWx0ZXIgaXMgdXNlZCB3aGVuIHdhbGtpbmcgdGhyb3VnaCBhIERPTSB0cmVlIG9yIGl0ZXJh
dGluZyB0cmVlCi0gICAgLy8gbm9kZXMuCi0gICAgLy8gRklYTUU6IHdlIG1heSB3YW50IHRvIGNh
Y2hlIE5vZGVGaWx0ZXJDb25kaXRpb24gYW5kIE5vZGVGaWx0ZXIKLSAgICAvLyBvYmplY3QsIGJ1
dCBpdCBpcyBtaW5vci4KLSAgICAvLyBOb2RlRmlsdGVyIGlzIHBhc3NlZCB0byBOb2RlSXRlcmF0
b3IgdGhhdCBoYXMgYSByZWYgY291bnRlZCBwb2ludGVyCi0gICAgLy8gdG8gTm9kZUZpbHRlci4g
Tm9kZUZpbHRlciBoYXMgYSByZWYgY291bnRlZCBwb2ludGVyIHRvIE5vZGVGaWx0ZXJDb25kaXRp
b24uCi0gICAgLy8gSW4gTm9kZUZpbHRlckNvbmRpdGlvbiwgZmlsdGVyIG9iamVjdCBpcyBwZXJz
aXN0ZWQgaW4gaXRzIGNvbnN0cnVjdG9yLAotICAgIC8vIGFuZCBkaXNwb3NlZCBpbiBpdHMgZGVz
dHJ1Y3Rvci4KLSAgICBpZiAoIWZpbHRlci0+SXNGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIE5vZGVGaWx0ZXJDb25kaXRpb24qIGNvbmRpdGlvbiA9IG5ldyBWOE5vZGVGaWx0
ZXJDb25kaXRpb24oZmlsdGVyKTsKLSAgICByZXR1cm4gTm9kZUZpbHRlcjo6Y3JlYXRlKGNvbmRp
dGlvbik7Ci19Ci0KLXY4OjpMb2NhbDx2ODo6T2JqZWN0PiBWOERPTVdyYXBwZXI6Omluc3RhbnRp
YXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBk
ZXNjcmlwdG9yVHlwZSwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGNwdHJUeXBlLCB2b2lk
KiBpbXBsKQotewotICAgIC8vIE1ha2UgYSBzcGVjaWFsIGNhc2UgZm9yIGRvY3VtZW50LmFsbAot
ICAgIGlmIChkZXNjcmlwdG9yVHlwZSA9PSBWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OICYm
IHN0YXRpY19jYXN0PEhUTUxDb2xsZWN0aW9uKj4oaW1wbCktPnR5cGUoKSA9PSBEb2NBbGwpCi0g
ICAgICAgIGRlc2NyaXB0b3JUeXBlID0gVjhDbGFzc0luZGV4OjpVTkRFVEVDVEFCTEVIVE1MQ09M
TEVDVElPTjsKLQotICAgIGlmICghcHJveHkpCi0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQ
cm94eTo6cmV0cmlldmUoKTsKLSAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFuY2U7Ci0g
ICAgaWYgKHByb3h5KQotICAgICAgICBpbnN0YW5jZSA9IHByb3h5LT5jcmVhdGVXcmFwcGVyRnJv
bUNhY2hlKGRlc2NyaXB0b3JUeXBlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKGRlc2NyaXB0
b3JUeXBlKS0+R2V0RnVuY3Rpb24oKTsKLSAgICAgICAgaW5zdGFuY2UgPSBTYWZlQWxsb2NhdGlv
bjo6bmV3SW5zdGFuY2UoZnVuY3Rpb24pOwotICAgIH0KLSAgICBpZiAoIWluc3RhbmNlLklzRW1w
dHkoKSkgewotICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIHRoZSBET00gd3JhcHBlciBmb3IgZmFp
bGVkIGFsbG9jYXRpb25zLgotICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoaW5z
dGFuY2UsIFY4Q2xhc3NJbmRleDo6VG9JbnQoY3B0clR5cGUpLCBpbXBsKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGluc3RhbmNlOwotfQotCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Y2hl
Y2tOZXdMZWdhbChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIGlmICghQWxsb3dB
bGxvY2F0aW9uOjptX2N1cnJlbnQpCkBAIC0yMDQ4LDY5OCArMTQwOSw2IEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOFByb3h5OjpjaGVja05ld0wKICAgICByZXR1cm4gYXJncy5UaGlzKCk7CiB9
CiAKLXZvaWQgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gb2JqZWN0LCBpbnQgdHlwZSwgdm9pZCogY3B0cikKLXsKLSAgICBBU1NFUlQob2JqZWN0LT5J
bnRlcm5hbEZpZWxkQ291bnQoKSA+PSAyKTsKLSAgICBvYmplY3QtPlNldEludGVybmFsRmllbGQo
VjhDdXN0b206OmtET01XcmFwcGVyT2JqZWN0SW5kZXgsIHdyYXBDUG9pbnRlcihjcHRyKSk7Ci0g
ICAgb2JqZWN0LT5TZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV3JhcHBlclR5cGVJbmRl
eCwgdjg6OkludGVnZXI6Ok5ldyh0eXBlKSk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1ib29sIFY4
RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUuSXNFbXB0eSgpIHx8ICF2YWx1ZS0+SXNPYmplY3QoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKTsKLSAgICBpZiAoIW9iamVjdC0+SW50
ZXJuYWxGaWVsZENvdW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChv
YmplY3QtPkludGVybmFsRmllbGRDb3VudCgpID49IFY4Q3VzdG9tOjprRGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHR5cGUgPSBv
YmplY3QtPkdldEludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XcmFwcGVyVHlwZUluZGV4KTsK
LSAgICBBU1NFUlQodHlwZS0+SXNJbnQzMigpKTsKLSAgICBBU1NFUlQoVjhDbGFzc0luZGV4OjpJ
TlZBTElEX0NMQVNTX0lOREVYIDwgdHlwZS0+SW50MzJWYWx1ZSgpICYmIHR5cGUtPkludDMyVmFs
dWUoKSA8IFY4Q2xhc3NJbmRleDo6Q0xBU1NJTkRFWF9FTkQpOwotCi0gICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHdyYXBwZXIgPSBvYmplY3QtPkdldEludGVybmFsRmllbGQoVjhDdXN0b206OmtE
T01XcmFwcGVyT2JqZWN0SW5kZXgpOwotICAgIEFTU0VSVCh3cmFwcGVyLT5Jc051bWJlcigpIHx8
IHdyYXBwZXItPklzRXh0ZXJuYWwoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgot
Ci1ib29sIFY4RE9NV3JhcHBlcjo6aXNET01FdmVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlKQotewotICAgIC8vIEFsbCBraW5kcyBvZiBldmVudHMgdXNlIEVWRU5UIGFzIGRv
bSB0eXBlIGluIEpTIHdyYXBwZXJzLgotICAgIC8vIFNlZSBFdmVudFRvVjhPYmplY3QKLSAgICBy
ZXR1cm4gaXNXcmFwcGVyT2ZUeXBlKHZhbHVlLCBWOENsYXNzSW5kZXg6OkVWRU5UKTsKLX0KLQot
Ym9vbCBWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9mVHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBjbGFzc1R5cGUpCi17Ci0gICAgaWYg
KHZhbHVlLklzRW1wdHkoKSB8fCAhdmFsdWUtPklzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSk7Ci0gICAgaWYgKCFvYmplY3QtPkludGVybmFsRmllbGRD
b3VudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQob2JqZWN0LT5JbnRl
cm5hbEZpZWxkQ291bnQoKSA+PSBWOEN1c3RvbTo6a0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVs
ZENvdW50KTsKLQotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gb2JqZWN0LT5H
ZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV3JhcHBlck9iamVjdEluZGV4KTsKLSAgICBB
U1NFUlQod3JhcHBlci0+SXNOdW1iZXIoKSB8fCB3cmFwcGVyLT5Jc0V4dGVybmFsKCkpOwotCi0g
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHR5cGUgPSBvYmplY3QtPkdldEludGVybmFsRmllbGQo
VjhDdXN0b206OmtET01XcmFwcGVyVHlwZUluZGV4KTsKLSAgICBBU1NFUlQodHlwZS0+SXNJbnQz
MigpKTsKLSAgICBBU1NFUlQoVjhDbGFzc0luZGV4OjpJTlZBTElEX0NMQVNTX0lOREVYIDwgdHlw
ZS0+SW50MzJWYWx1ZSgpICYmIHR5cGUtPkludDMyVmFsdWUoKSA8IFY4Q2xhc3NJbmRleDo6Q0xB
U1NJTkRFWF9FTkQpOwotCi0gICAgcmV0dXJuIFY4Q2xhc3NJbmRleDo6RnJvbUludCh0eXBlLT5J
bnQzMlZhbHVlKCkpID09IGNsYXNzVHlwZTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLSNkZWZp
bmUgRk9SX0VBQ0hfVklERU9fVEFHKG1hY3JvKSAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWNy
byhhdWRpbywgQVVESU8pICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWNybyhz
b3VyY2UsIFNPVVJDRSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWNybyh2aWRl
bywgVklERU8pCi0jZWxzZQotI2RlZmluZSBGT1JfRUFDSF9WSURFT19UQUcobWFjcm8pCi0jZW5k
aWYKLQotI2RlZmluZSBGT1JfRUFDSF9UQUcobWFjcm8pICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIG1hY3JvKGEsIEFOQ0hPUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIG1hY3JvKGFwcGxldCwgQVBQTEVUKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IG1hY3JvKGFyZWEsIEFSRUEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
Y3JvKGJhc2UsIEJBU0UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3Jv
KGJhc2Vmb250LCBCQVNFRk9OVCkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGJs
b2NrcXVvdGUsIEJMT0NLUVVPVEUpICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGJvZHks
IEJPRFkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGJyLCBCUikg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGJ1dHRvbiwgQlVU
VE9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGNhcHRpb24sIFRBQkxF
Q0FQVElPTikgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGNvbCwgVEFCTEVDT0wpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGNvbGdyb3VwLCBUQUJMRUNPTCkg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGRlbCwgTU9EKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGNhbnZhcywgQ0FOVkFTKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGRpciwgRElSRUNUT1JZKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIG1hY3JvKGRpdiwgRElWKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIG1hY3JvKGRsLCBETElTVCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIG1hY3JvKGVtYmVkLCBFTUJFRCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIG1hY3JvKGZpZWxkc2V0LCBGSUVMRFNFVCkgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIG1hY3JvKGZvbnQsIEZPTlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIG1hY3JvKGZvcm0sIEZPUk0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IG1hY3JvKGZyYW1lLCBGUkFNRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
Y3JvKGZyYW1lc2V0LCBGUkFNRVNFVCkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3Jv
KGgxLCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGgy
LCBIRUFESU5HKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGgzLCBI
RUFESU5HKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGg0LCBIRUFE
SU5HKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGg1LCBIRUFESU5H
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGg2LCBIRUFESU5HKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGhlYWQsIEhFQUQpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGhyLCBIUikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGh0bWwsIEhUTUwpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGltZywgSU1BR0UpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGlmcmFtZSwgSUZSQU1FKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIG1hY3JvKGltYWdlLCBJTUFHRSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIG1hY3JvKGlucHV0LCBJTlBVVCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIG1hY3JvKGlucywgTU9EKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIG1hY3JvKGlzaW5kZXgsIElTSU5ERVgpICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIG1hY3JvKGtleWdlbiwgU0VMRUNUKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIG1hY3JvKGxhYmVsLCBMQUJFTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IG1hY3JvKGxlZ2VuZCwgTEVHRU5EKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
Y3JvKGxpLCBMSSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3Jv
KGxpbmssIExJTkspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKGxp
c3RpbmcsIFBSRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKG1hcCwg
TUFQKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKG1hcnF1ZWUs
IE1BUlFVRUUpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKG1lbnUsIE1FTlUp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKG1ldGEsIE1FVEEpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKG9iamVjdCwgT0JKRUNUKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKG9sLCBPTElTVCkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKG9wdGdyb3VwLCBPUFRHUk9VUCkgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKG9wdGlvbiwgT1BUSU9OKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHAsIFBBUkFHUkFQSCkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIG1hY3JvKHBhcmFtLCBQQVJBTSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIG1hY3JvKHByZSwgUFJFKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIG1hY3JvKHEsIFFVT1RFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIG1hY3JvKHNjcmlwdCwgU0NSSVBUKSAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIG1hY3JvKHNlbGVjdCwgU0VMRUNUKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIG1hY3JvKHN0eWxlLCBTVFlMRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IG1hY3JvKHRhYmxlLCBUQUJMRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
Y3JvKHRoZWFkLCBUQUJMRVNFQ1RJT04pICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3Jv
KHRib2R5LCBUQUJMRVNFQ1RJT04pICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHRm
b290LCBUQUJMRVNFQ1RJT04pICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHRkLCBU
QUJMRUNFTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHRoLCBUQUJM
RUNFTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHRyLCBUQUJMRVJP
VykgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHRleHRhcmVhLCBURVhU
QVJFQSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHRpdGxlLCBUSVRMRSkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHVsLCBVTElTVCkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1hY3JvKHhtcCwgUFJFKQotCi1WOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgVjhET01XcmFwcGVyOjpodG1sRWxlbWVudFR5cGUoSFRNTEVsZW1l
bnQqIGVsZW1lbnQpCi17Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlPiBXcmFwcGVyVHlwZU1hcDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFdyYXBwZXJUeXBlTWFwLCB3cmFwcGVyVHlwZU1hcCwgKCkpOwotICAgIGlmICh3cmFwcGVyVHlw
ZU1hcC5pc0VtcHR5KCkpIHsKLSNkZWZpbmUgQUREX1RPX0hBU0hfTUFQKHRhZywgbmFtZSkgXAot
ICAgICAgICB3cmFwcGVyVHlwZU1hcC5zZXQoI3RhZywgVjhDbGFzc0luZGV4OjpIVE1MIyNuYW1l
IyNFTEVNRU5UKTsKLSAgICAgICAgRk9SX0VBQ0hfVEFHKEFERF9UT19IQVNIX01BUCkKLSNpZiBF
TkFCTEUoVklERU8pCi0gICAgICAgIGlmIChNZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKSkgewot
ICAgICAgICAgICAgRk9SX0VBQ0hfVklERU9fVEFHKEFERF9UT19IQVNIX01BUCkKLSAgICAgICAg
fQotI2VuZGlmCi0jdW5kZWYgQUREX1RPX0hBU0hfTUFQCi0gICAgfQotCi0gICAgVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSB3cmFwcGVyVHlwZU1hcC5nZXQoZWxlbWVudC0+bG9j
YWxOYW1lKCkuaW1wbCgpKTsKLSAgICBpZiAoIXR5cGUpCi0gICAgICAgIHJldHVybiBWOENsYXNz
SW5kZXg6OkhUTUxFTEVNRU5UOwotICAgIHJldHVybiB0eXBlOwotfQotI3VuZGVmIEZPUl9FQUNI
X1RBRwotCi0jaWYgRU5BQkxFKFNWRykKLQotI2lmIEVOQUJMRShTVkdfQU5JTUFUSU9OKQotI2Rl
ZmluZSBGT1JfRUFDSF9BTklNQVRJT05fVEFHKG1hY3JvKSBcCi0gICAgbWFjcm8oYW5pbWF0ZUNv
bG9yLCBBTklNQVRFQ09MT1IpIFwKLSAgICBtYWNybyhhbmltYXRlLCBBTklNQVRFKSBcCi0gICAg
bWFjcm8oYW5pbWF0ZVRyYW5zZm9ybSwgQU5JTUFURVRSQU5TRk9STSkgXAotICAgIG1hY3JvKHNl
dCwgU0VUKQotI2Vsc2UKLSNkZWZpbmUgRk9SX0VBQ0hfQU5JTUFUSU9OX1RBRyhtYWNybykKLSNl
bmRpZgotCi0jaWYgRU5BQkxFKFNWR19GSUxURVJTKQotI2RlZmluZSBGT1JfRUFDSF9GSUxURVJT
X1RBRyhtYWNybykgXAotICAgIG1hY3JvKGZlQmxlbmQsIEZFQkxFTkQpIFwKLSAgICBtYWNybyhm
ZUNvbG9yTWF0cml4LCBGRUNPTE9STUFUUklYKSBcCi0gICAgbWFjcm8oZmVDb21wb25lbnRUcmFu
c2ZlciwgRkVDT01QT05FTlRUUkFOU0ZFUikgXAotICAgIG1hY3JvKGZlQ29tcG9zaXRlLCBGRUNP
TVBPU0lURSkgXAotICAgIG1hY3JvKGZlRGlmZnVzZUxpZ2h0aW5nLCBGRURJRkZVU0VMSUdIVElO
RykgXAotICAgIG1hY3JvKGZlRGlzcGxhY2VtZW50TWFwLCBGRURJU1BMQUNFTUVOVE1BUCkgXAot
ICAgIG1hY3JvKGZlRGlzdGFudExpZ2h0LCBGRURJU1RBTlRMSUdIVCkgXAotICAgIG1hY3JvKGZl
Rmxvb2QsIEZFRkxPT0QpIFwKLSAgICBtYWNybyhmZUZ1bmNBLCBGRUZVTkNBKSBcCi0gICAgbWFj
cm8oZmVGdW5jQiwgRkVGVU5DQikgXAotICAgIG1hY3JvKGZlRnVuY0csIEZFRlVOQ0cpIFwKLSAg
ICBtYWNybyhmZUZ1bmNSLCBGRUZVTkNSKSBcCi0gICAgbWFjcm8oZmVHYXVzc2lhbkJsdXIsIEZF
R0FVU1NJQU5CTFVSKSBcCi0gICAgbWFjcm8oZmVJbWFnZSwgRkVJTUFHRSkgXAotICAgIG1hY3Jv
KGZlTWVyZ2UsIEZFTUVSR0UpIFwKLSAgICBtYWNybyhmZU1lcmdlTm9kZSwgRkVNRVJHRU5PREUp
IFwKLSAgICBtYWNybyhmZU9mZnNldCwgRkVPRkZTRVQpIFwKLSAgICBtYWNybyhmZVBvaW50TGln
aHQsIEZFUE9JTlRMSUdIVCkgXAotICAgIG1hY3JvKGZlU3BlY3VsYXJMaWdodGluZywgRkVTUEVD
VUxBUkxJR0hUSU5HKSBcCi0gICAgbWFjcm8oZmVTcG90TGlnaHQsIEZFU1BPVExJR0hUKSBcCi0g
ICAgbWFjcm8oZmVUaWxlLCBGRVRJTEUpIFwKLSAgICBtYWNybyhmZVR1cmJ1bGVuY2UsIEZFVFVS
QlVMRU5DRSkgXAotICAgIG1hY3JvKGZpbHRlciwgRklMVEVSKQotI2Vsc2UKLSNkZWZpbmUgRk9S
X0VBQ0hfRklMVEVSU19UQUcobWFjcm8pCi0jZW5kaWYKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMp
Ci0jZGVmaW5lIEZPUl9FQUNIX0ZPTlRTX1RBRyhtYWNybykgXAotICAgIG1hY3JvKGRlZmluaXRp
b24tc3JjLCBERUZJTklUSU9OU1JDKSBcCi0gICAgbWFjcm8oZm9udC1mYWNlLCBGT05URkFDRSkg
XAotICAgIG1hY3JvKGZvbnQtZmFjZS1mb3JtYXQsIEZPTlRGQUNFRk9STUFUKSBcCi0gICAgbWFj
cm8oZm9udC1mYWNlLW5hbWUsIEZPTlRGQUNFTkFNRSkgXAotICAgIG1hY3JvKGZvbnQtZmFjZS1z
cmMsIEZPTlRGQUNFU1JDKSBcCi0gICAgbWFjcm8oZm9udC1mYWNlLXVyaSwgRk9OVEZBQ0VVUkkp
Ci0jZWxzZQotI2RlZmluZSBGT1JfRUFDSF9GT05UU19UQUcobWFyY28pCi0jZW5kaWYKLQotI2lm
IEVOQUJMRShTVkdfRk9SRUlHTl9PQkpFQ1QpCi0jZGVmaW5lIEZPUl9FQUNIX0ZPUkVJR05fT0JK
RUNUX1RBRyhtYWNybykgXAotICAgIG1hY3JvKGZvcmVpZ25PYmplY3QsIEZPUkVJR05PQkpFQ1Qp
Ci0jZWxzZQotI2RlZmluZSBGT1JfRUFDSF9GT1JFSUdOX09CSkVDVF9UQUcobWFjcm8pCi0jZW5k
aWYKLQotI2lmIEVOQUJMRShTVkdfVVNFKQotI2RlZmluZSBGT1JfRUFDSF9VU0VfVEFHKG1hY3Jv
KSBcCi0gICAgbWFjcm8odXNlLCBVU0UpCi0jZWxzZQotI2RlZmluZSBGT1JfRUFDSF9VU0VfVEFH
KG1hY3JvKQotI2VuZGlmCi0KLSNkZWZpbmUgRk9SX0VBQ0hfVEFHKG1hY3JvKSBcCi0gICAgRk9S
X0VBQ0hfQU5JTUFUSU9OX1RBRyhtYWNybykgXAotICAgIEZPUl9FQUNIX0ZJTFRFUlNfVEFHKG1h
Y3JvKSBcCi0gICAgRk9SX0VBQ0hfRk9OVFNfVEFHKG1hY3JvKSBcCi0gICAgRk9SX0VBQ0hfRk9S
RUlHTl9PQkpFQ1RfVEFHKG1hY3JvKSBcCi0gICAgRk9SX0VBQ0hfVVNFX1RBRyhtYWNybykgXAot
ICAgIG1hY3JvKGEsIEEpIFwKLSAgICBtYWNybyhhbHRHbHlwaCwgQUxUR0xZUEgpIFwKLSAgICBt
YWNybyhjaXJjbGUsIENJUkNMRSkgXAotICAgIG1hY3JvKGNsaXBQYXRoLCBDTElQUEFUSCkgXAot
ICAgIG1hY3JvKGN1cnNvciwgQ1VSU09SKSBcCi0gICAgbWFjcm8oZGVmcywgREVGUykgXAotICAg
IG1hY3JvKGRlc2MsIERFU0MpIFwKLSAgICBtYWNybyhlbGxpcHNlLCBFTExJUFNFKSBcCi0gICAg
bWFjcm8oZywgRykgXAotICAgIG1hY3JvKGdseXBoLCBHTFlQSCkgXAotICAgIG1hY3JvKGltYWdl
LCBJTUFHRSkgXAotICAgIG1hY3JvKGxpbmVhckdyYWRpZW50LCBMSU5FQVJHUkFESUVOVCkgXAot
ICAgIG1hY3JvKGxpbmUsIExJTkUpIFwKLSAgICBtYWNybyhtYXJrZXIsIE1BUktFUikgXAotICAg
IG1hY3JvKG1hc2ssIE1BU0spIFwKLSAgICBtYWNybyhtZXRhZGF0YSwgTUVUQURBVEEpIFwKLSAg
ICBtYWNybyhwYXRoLCBQQVRIKSBcCi0gICAgbWFjcm8ocGF0dGVybiwgUEFUVEVSTikgXAotICAg
IG1hY3JvKHBvbHlsaW5lLCBQT0xZTElORSkgXAotICAgIG1hY3JvKHBvbHlnb24sIFBPTFlHT04p
IFwKLSAgICBtYWNybyhyYWRpYWxHcmFkaWVudCwgUkFESUFMR1JBRElFTlQpIFwKLSAgICBtYWNy
byhyZWN0LCBSRUNUKSBcCi0gICAgbWFjcm8oc2NyaXB0LCBTQ1JJUFQpIFwKLSAgICBtYWNybyhz
dG9wLCBTVE9QKSBcCi0gICAgbWFjcm8oc3R5bGUsIFNUWUxFKSBcCi0gICAgbWFjcm8oc3ZnLCBT
VkcpIFwKLSAgICBtYWNybyhzd2l0Y2gsIFNXSVRDSCkgXAotICAgIG1hY3JvKHN5bWJvbCwgU1lN
Qk9MKSBcCi0gICAgbWFjcm8odGV4dCwgVEVYVCkgXAotICAgIG1hY3JvKHRleHRQYXRoLCBURVhU
UEFUSCkgXAotICAgIG1hY3JvKHRpdGxlLCBUSVRMRSkgXAotICAgIG1hY3JvKHRyZWYsIFRSRUYp
IFwKLSAgICBtYWNybyh0c3BhbiwgVFNQQU4pIFwKLSAgICBtYWNybyh2aWV3LCBWSUVXKSBcCi0g
ICAgLy8gZW5kIG9mIG1hY3JvCi0KLVY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBWOERPTVdy
YXBwZXI6OnN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlPiBXcmFwcGVyVHlw
ZU1hcDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdyYXBwZXJUeXBlTWFwLCB3cmFwcGVyVHlw
ZU1hcCwgKCkpOwotICAgIGlmICh3cmFwcGVyVHlwZU1hcC5pc0VtcHR5KCkpIHsKLSNkZWZpbmUg
QUREX1RPX0hBU0hfTUFQKHRhZywgbmFtZSkgXAotICAgICAgICB3cmFwcGVyVHlwZU1hcC5zZXQo
I3RhZywgVjhDbGFzc0luZGV4OjpTVkcjI25hbWUjI0VMRU1FTlQpOwotICAgICAgICBGT1JfRUFD
SF9UQUcoQUREX1RPX0hBU0hfTUFQKQotI3VuZGVmIEFERF9UT19IQVNIX01BUAotICAgIH0KLQot
ICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gd3JhcHBlclR5cGVNYXAuZ2V0
KGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgaWYgKCF0eXBlKQotICAgICAgICBy
ZXR1cm4gVjhDbGFzc0luZGV4OjpTVkdFTEVNRU5UOwotICAgIHJldHVybiB0eXBlOwotfQotI3Vu
ZGVmIEZPUl9FQUNIX1RBRwotCi0jZW5kaWYgLy8gRU5BQkxFKFNWRykKLQotdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VG9WOE9iamVjdChFdmVudCogZXZl
bnQpCi17Ci0gICAgaWYgKCFldmVudCkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0KLSAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQo
ZXZlbnQpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFw
cGVyOwotCi0gICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOENsYXNzSW5k
ZXg6OkVWRU5UOwotCi0gICAgaWYgKGV2ZW50LT5pc1VJRXZlbnQoKSkgewotICAgICAgICBpZiAo
ZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQotICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRl
eDo6S0VZQk9BUkRFVkVOVDsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzVGV4dEV2ZW50KCkp
Ci0gICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpURVhURVZFTlQ7Ci0gICAgICAgIGVs
c2UgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBWOENsYXNz
SW5kZXg6Ok1PVVNFRVZFTlQ7Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT5pc1doZWVsRXZlbnQo
KSkKLSAgICAgICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OldIRUVMRVZFTlQ7Ci0jaWYgRU5B
QkxFKFNWRykKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmlzU1ZHWm9vbUV2ZW50KCkpCi0gICAg
ICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpTVkdaT09NRVZFTlQ7Ci0jZW5kaWYKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6VUlFVkVOVDsKLSAgICB9
IGVsc2UgaWYgKGV2ZW50LT5pc011dGF0aW9uRXZlbnQoKSkKLSAgICAgICAgdHlwZSA9IFY4Q2xh
c3NJbmRleDo6TVVUQVRJT05FVkVOVDsKLSAgICBlbHNlIGlmIChldmVudC0+aXNPdmVyZmxvd0V2
ZW50KCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6Ok9WRVJGTE9XRVZFTlQ7Ci0gICAg
ZWxzZSBpZiAoZXZlbnQtPmlzTWVzc2FnZUV2ZW50KCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNz
SW5kZXg6Ok1FU1NBR0VFVkVOVDsKLSAgICBlbHNlIGlmIChldmVudC0+aXNQcm9ncmVzc0V2ZW50
KCkpIHsKLSAgICAgICAgaWYgKGV2ZW50LT5pc1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCgp
KQotICAgICAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RQUk9HUkVT
U0VWRU5UOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpQ
Uk9HUkVTU0VWRU5UOwotICAgIH0gZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0QW5pbWF0aW9uRXZl
bnQoKSkKLSAgICAgICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6V0VCS0lUQU5JTUFUSU9ORVZFTlQ7
Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkpCi0gICAgICAg
IHR5cGUgPSBWOENsYXNzSW5kZXg6OldFQktJVFRSQU5TSVRJT05FVkVOVDsKLQotCi0gICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiByZXN1bHQgPSBpbnN0YW50aWF0ZVY4T2JqZWN0KHR5cGUsIFY4
Q2xhc3NJbmRleDo6RVZFTlQsIGV2ZW50KTsKLSAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkgewot
ICAgICAgICAvLyBJbnN0YW50aWF0aW9uIGZhaWxlZC4gQXZvaWQgdXBkYXRpbmcgdGhlIERPTSBv
YmplY3QgbWFwIGFuZAotICAgICAgICAvLyByZXR1cm4gbnVsbCB3aGljaCBpcyBhbHJlYWR5IGhh
bmRsZWQgYnkgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uCi0gICAgICAgIC8vIGluIGNhc2UgdGhl
IGV2ZW50IGlzIE5VTEwuCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotICAgIH0KLQotICAg
IGV2ZW50LT5yZWYoKTsgLy8gZmFzdCByZWYKLSAgICBzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qo
ZXZlbnQsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcocmVzdWx0KSk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi0KLXN0YXRpYyBjb25zdCBWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUgbWFwcGluZ1tdID0gewotICAgIFY4Q2xhc3NJbmRleDo6SU5WQUxJRF9DTEFTU19JTkRF
WCwgICAgLy8gTk9ORQotICAgIFY4Q2xhc3NJbmRleDo6SU5WQUxJRF9DTEFTU19JTkRFWCwgICAg
Ly8gRUxFTUVOVF9OT0RFIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50Ci0gICAgVjhDbGFzc0luZGV4
OjpBVFRSLCAgICAgICAgICAgICAgICAgICAvLyBBVFRSSUJVVEVfTk9ERQotICAgIFY4Q2xhc3NJ
bmRleDo6VEVYVCwgICAgICAgICAgICAgICAgICAgLy8gVEVYVF9OT0RFCi0gICAgVjhDbGFzc0lu
ZGV4OjpDREFUQVNFQ1RJT04sICAgICAgICAgICAvLyBDREFUQV9TRUNUSU9OX05PREUKLSAgICBW
OENsYXNzSW5kZXg6OkVOVElUWVJFRkVSRU5DRSwgICAgICAgIC8vIEVOVElUWV9SRUZFUkVOQ0Vf
Tk9ERQotICAgIFY4Q2xhc3NJbmRleDo6RU5USVRZLCAgICAgICAgICAgICAgICAgLy8gRU5USVRZ
X05PREUKLSAgICBWOENsYXNzSW5kZXg6OlBST0NFU1NJTkdJTlNUUlVDVElPTiwgIC8vIFBST0NF
U1NJTkdfSU5TVFJVQ1RJT05fTk9ERQotICAgIFY4Q2xhc3NJbmRleDo6Q09NTUVOVCwgICAgICAg
ICAgICAgICAgLy8gQ09NTUVOVF9OT0RFCi0gICAgVjhDbGFzc0luZGV4OjpJTlZBTElEX0NMQVNT
X0lOREVYLCAgICAvLyBET0NVTUVOVF9OT0RFIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50Ci0gICAg
VjhDbGFzc0luZGV4OjpET0NVTUVOVFRZUEUsICAgICAgICAgICAvLyBET0NVTUVOVF9UWVBFX05P
REUKLSAgICBWOENsYXNzSW5kZXg6OkRPQ1VNRU5URlJBR01FTlQsICAgICAgIC8vIERPQ1VNRU5U
X0ZSQUdNRU5UX05PREUKLSAgICBWOENsYXNzSW5kZXg6Ok5PVEFUSU9OLCAgICAgICAgICAgICAg
IC8vIE5PVEFUSU9OX05PREUKLSAgICBWOENsYXNzSW5kZXg6Ok5PREUsICAgICAgICAgICAgICAg
ICAgIC8vIFhQQVRIX05BTUVTUEFDRV9OT0RFCi19OwotCi0vLyBDYWxsZXIgY2hlY2tzIG5vZGUg
aXMgbm90IG51bGwuCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0
Tm9kZVRvVjhPYmplY3QoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJl
dHVybiB2ODo6TnVsbCgpOwotCi0gICAgLy8gRmluZCBhIHByb3h5IGZvciB0aGlzIG5vZGUuCi0g
ICAgLy8KLSAgICAvLyBOb3RlIHRoYXQgaWYgcHJveHkgaXMgZm91bmQsIHdlIG1pZ2h0IGluaXRp
YWxpemUgdGhlIGNvbnRleHQgd2hpY2ggY2FuCi0gICAgLy8gaW5zdGFudGlhdGUgYSBkb2N1bWVu
dCB3cmFwcGVyLiAgVGhlcmVmb3JlLCB3ZSBnZXQgdGhlIHByb3h5IGJlZm9yZQotICAgIC8vIGNo
ZWNraW5nIGlmIHRoZSBub2RlIGFscmVhZHkgaGFzIGEgd3JhcHBlci4KLSAgICBWOFByb3h5KiBw
cm94eSA9IDA7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKLSAg
ICBpZiAoZG9jdW1lbnQpIHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1l
KCk7Ci0gICAgICAgIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoZnJhbWUpOwotICAgICAgICBp
ZiAocHJveHkpCi0gICAgICAgICAgICBwcm94eS0+aW5pdENvbnRleHRJZk5lZWRlZCgpOwotICAg
IH0KLQotICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5vZGVNYXAgPSBwcm94eSA/IHByb3h5
LT5kb21Ob2RlTWFwKCkgOiBnZXRET01Ob2RlTWFwKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwcGVyID0gZG9tTm9kZU1hcC5nZXQobm9kZSk7Ci0gICAgaWYgKCF3cmFwcGVyLklz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICBib29sIGlzRG9jdW1lbnQg
PSBmYWxzZTsgLy8gZG9jdW1lbnQgdHlwZSBub2RlIGhhcyBzcGVjaWFsIGhhbmRsaW5nCi0gICAg
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGU7Ci0KLSAgICBOb2RlOjpOb2RlVHlwZSBu
b2RlVHlwZSA9IG5vZGUtPm5vZGVUeXBlKCk7Ci0gICAgaWYgKG5vZGVUeXBlID09IE5vZGU6OkVM
RU1FTlRfTk9ERSkgewotICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKQotICAgICAg
ICAgICAgdHlwZSA9IGh0bWxFbGVtZW50VHlwZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5v
ZGUpKTsKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBlbHNlIGlmIChub2RlLT5pc1NWR0VsZW1l
bnQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBzdmdFbGVtZW50VHlwZShzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4obm9kZSkpOwotI2VuZGlmCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR5cGUg
PSBWOENsYXNzSW5kZXg6OkVMRU1FTlQ7Ci0gICAgfSBlbHNlIGlmIChub2RlVHlwZSA9PSBOb2Rl
OjpET0NVTUVOVF9OT0RFKSB7Ci0gICAgICAgIGlzRG9jdW1lbnQgPSB0cnVlOwotICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG5vZGUpOwotICAgICAg
ICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgICAgICB0eXBlID0gVjhD
bGFzc0luZGV4OjpIVE1MRE9DVU1FTlQ7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgZWxzZSBp
ZiAoZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHR5cGUgPSBWOENsYXNz
SW5kZXg6OlNWR0RPQ1VNRU5UOwotI2VuZGlmCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR5
cGUgPSBWOENsYXNzSW5kZXg6OkRPQ1VNRU5UOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VS
VChub2RlVHlwZSA8IHNpemVvZihtYXBwaW5nKS9zaXplb2YobWFwcGluZ1swXSkpOwotICAgICAg
ICB0eXBlID0gbWFwcGluZ1tub2RlVHlwZV07Ci0gICAgICAgIEFTU0VSVCh0eXBlICE9IFY4Q2xh
c3NJbmRleDo6SU5WQUxJRF9DTEFTU19JTkRFWCk7Ci0gICAgfQotCi0gICAgdjg6OkxvY2FsPHY4
OjpDb250ZXh0PiB2OENvbnRleHQ7Ci0gICAgaWYgKHByb3h5KQotICAgICAgICB2OENvbnRleHQg
PSBwcm94eS0+Y29udGV4dCgpOwotCi0gICAgLy8gRW50ZXIgdGhlIG5vZGUncyBjb250ZXh0IGFu
ZCBjcmVhdGUgdGhlIHdyYXBwZXIgaW4gdGhhdCBjb250ZXh0LgotICAgIGlmICghdjhDb250ZXh0
LklzRW1wdHkoKSkKLSAgICAgICAgdjhDb250ZXh0LT5FbnRlcigpOwotCi0gICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IHJlc3VsdCA9IGluc3RhbnRpYXRlVjhPYmplY3QocHJveHksIHR5cGUsIFY4
Q2xhc3NJbmRleDo6Tk9ERSwgbm9kZSk7Ci0KLSAgICAvLyBFeGl0IHRoZSBub2RlJ3MgY29udGV4
dCBpZiBpdCB3YXMgZW50ZXJlZC4KLSAgICBpZiAoIXY4Q29udGV4dC5Jc0VtcHR5KCkpCi0gICAg
ICAgIHY4Q29udGV4dC0+RXhpdCgpOwotCi0gICAgaWYgKHJlc3VsdC5Jc0VtcHR5KCkpIHsKLSAg
ICAgICAgLy8gSWYgaW5zdGFudGlhdGlvbiBmYWlsZWQgaXQncyBpbXBvcnRhbnQgbm90IHRvIGFk
ZCB0aGUgcmVzdWx0Ci0gICAgICAgIC8vIHRvIHRoZSBET00gbm9kZSBtYXAuIEluc3RlYWQgd2Ug
cmV0dXJuIGFuIGVtcHR5IGhhbmRsZSwgd2hpY2gKLSAgICAgICAgLy8gc2hvdWxkIGFscmVhZHkg
YmUgaGFuZGxlZCBieSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gaW4gY2FzZQotICAgICAgICAv
LyB0aGUgbm9kZSBpcyBOVUxMLgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAg
IG5vZGUtPnJlZigpOwotICAgIGRvbU5vZGVNYXAuc2V0KG5vZGUsIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+OjpOZXcocmVzdWx0KSk7Ci0KLSAgICBpZiAoaXNEb2N1bWVudCkgewotICAgICAg
ICBpZiAocHJveHkpCi0gICAgICAgICAgICBwcm94eS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHJl
c3VsdCk7Ci0KLSAgICAgICAgaWYgKHR5cGUgPT0gVjhDbGFzc0luZGV4OjpIVE1MRE9DVU1FTlQp
IHsKLSAgICAgICAgICAgIC8vIENyZWF0ZSBtYXJrZXIgb2JqZWN0IGFuZCBpbnNlcnQgaXQgaW4g
dHdvIGludGVybmFsIGZpZWxkcy4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdXNlZCB0byBpbXBs
ZW1lbnQgdGVtcG9yYXJ5IHNoYWRvd2luZyBvZgotICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxs
LgotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+SW50ZXJuYWxGaWVsZENvdW50KCkgPT0gVjhD
dXN0b206OmtIVE1MRG9jdW1lbnRJbnRlcm5hbEZpZWxkQ291bnQpOwotICAgICAgICAgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IG1hcmtlciA9IHY4OjpPYmplY3Q6Ok5ldygpOwotICAgICAgICAg
ICAgcmVzdWx0LT5TZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprSFRNTERvY3VtZW50TWFya2Vy
SW5kZXgsIG1hcmtlcik7Ci0gICAgICAgICAgICByZXN1bHQtPlNldEludGVybmFsRmllbGQoVjhD
dXN0b206OmtIVE1MRG9jdW1lbnRTaGFkb3dJbmRleCwgbWFya2VyKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIEEgSlMgb2JqZWN0IG9mIHR5cGUgRXZl
bnRUYXJnZXQgY2FuIG9ubHkgYmUgdGhlIGZvbGxvd2luZyBwb3NzaWJsZSB0eXBlczoKLS8vIDEp
IEV2ZW50VGFyZ2V0Tm9kZTsgMikgRE9NV2luZG93IDMpIFhNTEh0dHBSZXF1ZXN0OyA0KSBNZXNz
YWdlUG9ydDsKLS8vIDUpIFhNTEh0dHBSZXF1ZXN0VXBsb2FkCi0vLyBjaGVjayBFdmVudFRhcmdl
dC5oIGZvciBuZXcgdHlwZSBjb252ZXJzaW9uIG1ldGhvZHMKLXY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQq
IHRhcmdldCkKLXsKLSAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7
Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSB0
YXJnZXQtPnRvU1ZHRWxlbWVudEluc3RhbmNlKCk7Ci0gICAgaWYgKGluc3RhbmNlKQotICAgICAg
ICByZXR1cm4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTVkdFTEVNRU5USU5TVEFO
Q0UsIGluc3RhbmNlKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgV29ya2Vy
KiB3b3JrZXIgPSB0YXJnZXQtPnRvV29ya2VyKCk7Ci0gICAgaWYgKHdvcmtlcikKLSAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V09SS0VSLCB3b3JrZXIpOwot
I2VuZGlmIC8vIFdPUktFUlMKLQotICAgIE5vZGUqIG5vZGUgPSB0YXJnZXQtPnRvTm9kZSgpOwot
ICAgIGlmIChub2RlKQotICAgICAgICByZXR1cm4gY29udmVydE5vZGVUb1Y4T2JqZWN0KG5vZGUp
OwotCi0gICAgaWYgKERPTVdpbmRvdyogZG9tV2luZG93ID0gdGFyZ2V0LT50b0RPTVdpbmRvdygp
KQotICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpET01XSU5E
T1csIGRvbVdpbmRvdyk7Ci0KLSAgICAvLyBYTUxIdHRwUmVxdWVzdCBpcyBjcmVhdGVkIHdpdGhp
biBpdHMgSlMgY291bnRlcnBhcnQuCi0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0
ID0gdGFyZ2V0LT50b1hNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgaWYgKHhtbEh0dHBSZXF1ZXN0KSB7
Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldEFjdGl2ZURPTU9i
amVjdE1hcCgpLmdldCh4bWxIdHRwUmVxdWVzdCk7Ci0gICAgICAgIEFTU0VSVCghd3JhcHBlci5J
c0VtcHR5KCkpOwotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICB9Ci0KLSAgICAvLyBNZXNz
YWdlUG9ydCBpcyBjcmVhdGVkIHdpdGhpbiBpdHMgSlMgY291bnRlcnBhcnQKLSAgICBNZXNzYWdl
UG9ydCogcG9ydCA9IHRhcmdldC0+dG9NZXNzYWdlUG9ydCgpOwotICAgIGlmIChwb3J0KSB7Ci0g
ICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldEFjdGl2ZURPTU9iamVj
dE1hcCgpLmdldChwb3J0KTsKLSAgICAgICAgQVNTRVJUKCF3cmFwcGVyLklzRW1wdHkoKSk7Ci0g
ICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIH0KLQotICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2Fk
KiB1cGxvYWQgPSB0YXJnZXQtPnRvWE1MSHR0cFJlcXVlc3RVcGxvYWQoKTsKLSAgICBpZiAodXBs
b2FkKSB7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9i
amVjdE1hcCgpLmdldCh1cGxvYWQpOwotICAgICAgICBBU1NFUlQoIXdyYXBwZXIuSXNFbXB0eSgp
KTsKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgfQotCi0gICAgQVNTRVJUKDApOwotICAg
IHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwotfQotCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoRXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIpCi17Ci0gICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgcmV0dXJu
IHY4OjpOdWxsKCk7Ci0KLSAgICAvLyBGSVhNRTogY2FuIGEgdXNlciB0YWtlIGEgbGF6eSBldmVu
dCBsaXN0ZW5lciBhbmQgc2V0IHRvIG90aGVyIHBsYWNlcz8KLSAgICBWOEFic3RyYWN0RXZlbnRM
aXN0ZW5lciogdjhsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4QWJzdHJhY3RFdmVudExpc3RlbmVy
Kj4obGlzdGVuZXIpOwotICAgIHJldHVybiB2OGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgp
OwotfQotCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NSW1w
bGVtZW50YXRpb25Ub1Y4T2JqZWN0KERPTUltcGxlbWVudGF0aW9uKiBpbXBsKQotewotICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzdWx0ID0gaW5zdGFudGlhdGVWOE9iamVjdChWOENsYXNz
SW5kZXg6OkRPTUlNUExFTUVOVEFUSU9OLCBWOENsYXNzSW5kZXg6OkRPTUlNUExFTUVOVEFUSU9O
LCBpbXBsKTsKLSAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkgewotICAgICAgICAvLyBJZiB0aGUg
aW5zdGFudGlhdGlvbiBmYWlsZWQsIHdlIGlnbm9yZSBpdCBhbmQgcmV0dXJuIG51bGwgaW5zdGVh
ZAotICAgICAgICAvLyBvZiByZXR1cm5pbmcgYW4gZW1wdHkgaGFuZGxlLgotICAgICAgICByZXR1
cm4gdjg6Ok51bGwoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydFN0eWxlU2hlZXRUb1Y4T2JqZWN0KFN0
eWxlU2hlZXQqIHNoZWV0KQotewotICAgIGlmICghc2hlZXQpCi0gICAgICAgIHJldHVybiB2ODo6
TnVsbCgpOwotCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2Jq
ZWN0TWFwKCkuZ2V0KHNoZWV0KTsKLSAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKLQotICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBl
ID0gVjhDbGFzc0luZGV4OjpTVFlMRVNIRUVUOwotICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNo
ZWV0KCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OkNTU1NUWUxFU0hFRVQ7Ci0KLSAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlc3VsdCA9IGluc3RhbnRpYXRlVjhPYmplY3QodHlw
ZSwgVjhDbGFzc0luZGV4OjpTVFlMRVNIRUVULCBzaGVldCk7Ci0gICAgaWYgKCFyZXN1bHQuSXNF
bXB0eSgpKSB7Ci0gICAgICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBET00gb2JqZWN0IG1hcCBpZiB0
aGUgcmVzdWx0IGlzIG5vbi1lbXB0eS4KLSAgICAgICAgc2hlZXQtPnJlZigpOwotICAgICAgICBz
ZXRKU1dyYXBwZXJGb3JET01PYmplY3Qoc2hlZXQsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
OjpOZXcocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIGEgaGlkZGVuIHJlZmVyZW5jZSBm
cm9tIHN0eWxlc2hlZXQgb2JqZWN0IHRvIGl0cyBvd25lciBub2RlLgotICAgIE5vZGUqIG93bmVy
Tm9kZSA9IHNoZWV0LT5vd25lck5vZGUoKTsKLSAgICBpZiAob3duZXJOb2RlKSB7Ci0gICAgICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb3duZXIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KGNvbnZlcnROb2RlVG9WOE9iamVjdChvd25lck5vZGUpKTsKLSAgICAgICAgcmVzdWx0LT5T
ZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprU3R5bGVTaGVldE93bmVyTm9kZUluZGV4LCBvd25l
cik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydENTU1ZhbHVlVG9WOE9iamVjdChDU1NWYWx1ZSogdmFs
dWUpCi17Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0KLSAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQo
dmFsdWUpOwotICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB3cmFw
cGVyOwotCi0gICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGU7Ci0KLSAgICBpZiAo
dmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKLSAgICAgICAgdHlwZSA9IFY4Q2xh
c3NJbmRleDo6V0VCS0lUQ1NTVFJBTlNGT1JNVkFMVUU7Ci0gICAgZWxzZSBpZiAodmFsdWUtPmlz
VmFsdWVMaXN0KCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OkNTU1ZBTFVFTElTVDsK
LSAgICBlbHNlIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICB0eXBlID0g
VjhDbGFzc0luZGV4OjpDU1NQUklNSVRJVkVWQUxVRTsKLSNpZiBFTkFCTEUoU1ZHKQotICAgIGVs
c2UgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6
OlNWR1BBSU5UOwotICAgIGVsc2UgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgIHR5
cGUgPSBWOENsYXNzSW5kZXg6OlNWR0NPTE9SOwotI2VuZGlmCi0gICAgZWxzZQotICAgICAgICB0
eXBlID0gVjhDbGFzc0luZGV4OjpDU1NWQUxVRTsKLQotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gcmVzdWx0ID0gaW5zdGFudGlhdGVWOE9iamVjdCh0eXBlLCBWOENsYXNzSW5kZXg6OkNTU1ZB
TFVFLCB2YWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHQuSXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIE9u
bHkgdXBkYXRlIHRoZSBET00gb2JqZWN0IG1hcCBpZiB0aGUgcmVzdWx0IGlzIG5vbi1lbXB0eS4K
LSAgICAgICAgdmFsdWUtPnJlZigpOwotICAgICAgICBzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qo
dmFsdWUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcocmVzdWx0KSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3Jh
cHBlcjo6Y29udmVydENTU1J1bGVUb1Y4T2JqZWN0KENTU1J1bGUqIHJ1bGUpCi17Ci0gICAgaWYg
KCFydWxlKSAKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRET01PYmplY3RNYXAoKS5nZXQocnVsZSk7Ci0gICAgaWYg
KCF3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICBWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZTsKLQotICAgIHN3aXRjaCAocnVsZS0+dHlwZSgp
KSB7Ci0gICAgY2FzZSBDU1NSdWxlOjpTVFlMRV9SVUxFOgotICAgICAgICB0eXBlID0gVjhDbGFz
c0luZGV4OjpDU1NTVFlMRVJVTEU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUnVsZTo6
Q0hBUlNFVF9SVUxFOgotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpDU1NDSEFSU0VUUlVM
RTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NSdWxlOjpJTVBPUlRfUlVMRToKLSAgICAg
ICAgdHlwZSA9IFY4Q2xhc3NJbmRleDo6Q1NTSU1QT1JUUlVMRTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NSdWxlOjpNRURJQV9SVUxFOgotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4
OjpDU1NNRURJQVJVTEU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUnVsZTo6Rk9OVF9G
QUNFX1JVTEU6Ci0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OkNTU0ZPTlRGQUNFUlVMRTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NSdWxlOjpQQUdFX1JVTEU6Ci0gICAgICAgIHR5
cGUgPSBWOENsYXNzSW5kZXg6OkNTU1BBR0VSVUxFOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1J1bGU6OlZBUklBQkxFU19SVUxFOgotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpD
U1NWQVJJQUJMRVNSVUxFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1J1bGU6OldFQktJ
VF9LRVlGUkFNRV9SVUxFOgotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpXRUJLSVRDU1NL
RVlGUkFNRVJVTEU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTUnVsZTo6V0VCS0lUX0tF
WUZSQU1FU19SVUxFOgotICAgICAgICB0eXBlID0gVjhDbGFzc0luZGV4OjpXRUJLSVRDU1NLRVlG
UkFNRVNSVUxFOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgLy8gQ1NTUnVsZTo6VU5L
Tk9XTl9SVUxFCi0gICAgICAgIHR5cGUgPSBWOENsYXNzSW5kZXg6OkNTU1JVTEU7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzdWx0ID0gaW5z
dGFudGlhdGVWOE9iamVjdCh0eXBlLCBWOENsYXNzSW5kZXg6OkNTU1JVTEUsIHJ1bGUpOwotICAg
IGlmICghcmVzdWx0LklzRW1wdHkoKSkgewotICAgICAgICAvLyBPbmx5IHVwZGF0ZSB0aGUgRE9N
IG9iamVjdCBtYXAgaWYgdGhlIHJlc3VsdCBpcyBub24tZW1wdHkuCi0gICAgICAgIHJ1bGUtPnJl
ZigpOwotICAgICAgICBzZXRKU1dyYXBwZXJGb3JET01PYmplY3QocnVsZSwgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD46Ok5ldyhyZXN1bHQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydFdpbmRvd1Rv
VjhPYmplY3QoRE9NV2luZG93KiB3aW5kb3cpCi17Ci0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAg
IHJldHVybiB2ODo6TnVsbCgpOwotICAgIC8vIEluaXRpYWxpemVzIGVudmlyb25tZW50IG9mIGEg
ZnJhbWUsIGFuZCByZXR1cm4gdGhlIGdsb2JhbCBvYmplY3QKLSAgICAvLyBvZiB0aGUgZnJhbWUu
Ci0gICAgRnJhbWUqIGZyYW1lID0gd2luZG93LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7Ci0KLSAgICAvLyBTcGVjaWFs
IGNhc2U6IEJlY2F1c2Ugb2YgZXZhbHVhdGVJbk5ld0NvbnRleHQoKSBvbmUgRE9NV2luZG93IGNh
biBoYXZlCi0gICAgLy8gbXVsdGlwbGUgY29udGV4dHMgYW5kIG11bHRpcGxlIGdsb2JhbCBvYmpl
Y3RzIGFzc29jaWF0ZWQgd2l0aCBpdC4gV2hlbgotICAgIC8vIGNvZGUgcnVubmluZyBpbiBvbmUg
b2YgdGhvc2UgY29udGV4dHMgYWNjZXNzZXMgdGhlIHdpbmRvdyBvYmplY3QsIHdlCi0gICAgLy8g
d2FudCB0byByZXR1cm4gdGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoYXQgY29u
dGV4dCwgbm90Ci0gICAgLy8gbmVjZXNzYXJpbHkgdGhlIGZpcnN0IGdsb2JhbCBvYmplY3QgYXNz
b2NpYXRlZCB3aXRoIHRoYXQgRE9NV2luZG93LgotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGN1cnJlbnRDb250ZXh0ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKTsKLSAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGN1cnJlbnRHbG9iYWwgPSBjdXJyZW50Q29udGV4dC0+R2xvYmFsKCk7
Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3dXcmFwcGVyID0gVjhET01XcmFwcGVy
Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBjdXJyZW50R2xvYmFs
KTsKLSAgICBpZiAoIXdpbmRvd1dyYXBwZXIuSXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChjb252
ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPERPTVdpbmRvdz4od2luZG93V3JhcHBlcikgPT0gd2luZG93
KQotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRHbG9iYWw7Ci0gICAgfQotCi0gICAgLy8gT3Ro
ZXJ3aXNlLCByZXR1cm4gdGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnJh
bWUuCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gVjhQcm94eTo6Y29u
dGV4dChmcmFtZSk7Ci0gICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGdsb2JhbCA9IHY4Q29udGV4dC0+R2xvYmFsKCk7Ci0gICAgQVNTRVJUKCFnbG9iYWwuSXNFbXB0
eSgpKTsKLSAgICByZXR1cm4gZ2xvYmFsOwotfQotCiB2b2lkIFY4UHJveHk6OmJpbmRKc09iamVj
dFRvV2luZG93KEZyYW1lKiBmcmFtZSwgY29uc3QgY2hhciogbmFtZSwgaW50IHR5cGUsIHY4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2NyaXB0b3IsIHZvaWQqIGltcGwpCiB7CiAg
ICAgLy8gR2V0IGVudmlyb25tZW50LgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHJldmlzaW9u
IDQ1NjU5KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIiAvLyBmb3IgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4KICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNs
dWRlICJWOERPTU1hcC5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4
RXZlbnRMaXN0ZW5lckxpc3QuaCIKICNpbmNsdWRlICJWOEdDQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIlY4SW5kZXguaCIKQEAgLTQ1MCwxNjEgKzQ1MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RhdGljIFY4RXh0ZW5zaW9uTGlzdCBtX2V4dGVuc2lvbnM7CiAgICAgfTsKIAot
Ly8gQmVnaW4gVjhET01XcmFwcGVyLmgKLQotICAgIGNsYXNzIFY4RE9NV3JhcHBlciB7Ci0gICAg
cHVibGljOgotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgLy8gQ2hlY2tzIGlmIGEgdjggdmFsdWUg
Y2FuIGJlIGEgRE9NIHdyYXBwZXIKLSAgICAgICAgc3RhdGljIGJvb2wgbWF5YmVET01XcmFwcGVy
KHY4OjpIYW5kbGU8djg6OlZhbHVlPik7Ci0jZW5kaWYKLQotICAgICAgICAvLyBTZXRzIGNvbnRl
bnRzIG9mIGEgRE9NIHdyYXBwZXIuCi0gICAgICAgIHN0YXRpYyB2b2lkIHNldERPTVdyYXBwZXIo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgaW50IHR5cGUsIHZvaWQqIHB0cik7Ci0KLSAgICAgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gbG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPik7Ci0KLSAgICAgICAgLy8g
QSBoZWxwZXIgZnVuY3Rpb24gZXh0cmFjdCBuYXRpdmUgb2JqZWN0IHBvaW50ZXIgZnJvbSBhIERP
TSB3cmFwcGVyCi0gICAgICAgIC8vIGFuZCBjYXN0IHRvIHRoZSBzcGVjaWZpZWQgdHlwZS4KLSAg
ICAgICAgdGVtcGxhdGUgPGNsYXNzIEM+Ci0gICAgICAgIHN0YXRpYyBDKiBjb252ZXJ0RE9NV3Jh
cHBlclRvTmF0aXZlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtYXliZURPTVdyYXBwZXIob2JqZWN0KSk7Ci0gICAgICAgICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcHRyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChv
YmplY3QpLT5HZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV3JhcHBlck9iamVjdEluZGV4
KTsKLSAgICAgICAgICAgIHJldHVybiBleHRyYWN0Q1BvaW50ZXI8Qz4ocHRyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIEEgaGVscCBmdW5jdGlvbiBleHRyYWN0IGEgbm9kZSB0eXBlIHBvaW50
ZXIgZnJvbSBhIERPTSB3cmFwcGVyLgotICAgICAgICAvLyBXcmFwcGVkIHBvaW50ZXIgbXVzdCBi
ZSBjYXN0IHRvIE5vZGUqIGZpcnN0LgotICAgICAgICBzdGF0aWMgdm9pZCogY29udmVydERPTVdy
YXBwZXJUb05vZGVIZWxwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKLQotICAgICAgICAvLyBD
cmVhdGUgYSBWOCB3cmFwcGVyIGZvciBhIEMgcG9pbnRlcgotICAgICAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHdyYXBDUG9pbnRlcih2b2lkKiBjcHRyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICAvLyBSZXByZXNlbnQgdm9pZCogYXMgaW50Ci0gICAgICAgICAgICBpbnQgYWRkciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50PihjcHRyKTsKLSAgICAgICAgICAgIEFTU0VSVCghKGFkZHIg
JiAweDAxKSk7IC8vIFRoZSBhZGRyZXNzIG11c3QgYmUgYWxpZ25lZC4KLSAgICAgICAgICAgIHJl
dHVybiB2ODo6SW50ZWdlcjo6TmV3KGFkZHIgPj4gMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBUYWtlIEMgcG9pbnRlciBvdXQgb2YgYSB2OCB3cmFwcGVyLgotICAgICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgQz4KLSAgICAgICAgc3RhdGljIEMqIGV4dHJhY3RDUG9pbnRlcih2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gb2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Qyo+KGV4dHJhY3RDUG9pbnRlckltcGwob2JqKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQz4KLSAgICAgICAgc3RhdGljIEMqIGNvbnZlcnRET01XcmFwcGVyVG9Ob2Rl
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEMqPihjb252ZXJ0RE9NV3JhcHBlclRvTm9kZUhlbHBlcih2YWx1ZSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSwgUGFzc1JlZlB0cjxUPiBpbXApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdCh0eXBlLCBpbXAuZ2V0KCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHZvaWQqKTsKLQotICAgICAgICAvLyBG
YXN0LXBhdGggZm9yIE5vZGUgb2JqZWN0cy4KLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb252ZXJ0Tm9kZVRvVjhPYmplY3QoTm9kZSopOwotCi0gICAgICAgIHRlbXBsYXRl
IDxjbGFzcyBDPgotICAgICAgICBzdGF0aWMgQyogY29udmVydFRvTmF0aXZlT2JqZWN0KFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Qyo+KGNvbnZlcnRU
b05hdGl2ZU9iamVjdEltcGwodHlwZSwgb2JqZWN0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBz
dGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRvbVdyYXBwZXJUeXBlKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4pOwotCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Y29udmVydEV2ZW50VG9WOE9iamVjdChFdmVudCopOwotCi0gICAgICAgIHN0YXRpYyBFdmVudCog
Y29udmVydFRvTmF0aXZlRXZlbnQodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICghaXNET01FdmVudFdyYXBwZXIoanNFdmVudCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxFdmVudD4oanNFdmVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRU
YXJnZXQqKTsKLSAgICAgICAgLy8gV3JhcCBhbmQgdW53cmFwIEpTIGV2ZW50IGxpc3RlbmVycy4K
LSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRMaXN0ZW5l
clRvVjhPYmplY3QoRXZlbnRMaXN0ZW5lciopOwotCi0gICAgICAgIC8vIERPTUltcGxlbWVudGF0
aW9uIGlzIGEgc2luZ2xldG9uIGFuZCBpdCBpcyBoYW5kbGVkIGluIGEgc3BlY2lhbAotICAgICAg
ICAvLyB3YXkuIEEgd3JhcHBlciBpcyBnZW5lcmF0ZWQgcGVyIGRvY3VtZW50IGFuZCBzdG9yZWQg
aW4gYW4KLSAgICAgICAgLy8gaW50ZXJuYWwgZmllbGQgb2YgdGhlIGRvY3VtZW50LgotICAgICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRET01JbXBsZW1lbnRhdGlvblRv
VjhPYmplY3QoRE9NSW1wbGVtZW50YXRpb24qKTsKLQotICAgICAgICAvLyBXcmFwIEpTIG5vZGUg
ZmlsdGVyIGluIEMrKy4KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gd3Jh
cE5hdGl2ZU5vZGVGaWx0ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKLQotICAgICAgICBzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGdldFRlbXBsYXRlKFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSk7Ci0KLSAgICAgICAgLy8gQ2hlY2tzIHdoZXRoZXIgYSBE
T00gb2JqZWN0IGhhcyBhIEpTIHdyYXBwZXIuCi0gICAgICAgIHN0YXRpYyBib29sIGRvbU9iamVj
dEhhc0pTV3JhcHBlcih2b2lkKik7Ci0gICAgICAgIC8vIFNldCBKUyB3cmFwcGVyIG9mIGEgRE9N
IG9iamVjdCwgdGhlIGNhbGxlciBpbiBjaGFyZ2Ugb2YgaW5jcmVhc2UgcmVmLgotICAgICAgICBz
dGF0aWMgdm9pZCBzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qodm9pZCosIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+KTsKLSAgICAgICAgc3RhdGljIHZvaWQgc2V0SlNXcmFwcGVyRm9yQWN0aXZl
RE9NT2JqZWN0KHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIHNldEpTV3JhcHBlckZvckRPTU5vZGUoTm9kZSosIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+KTsKLQotICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGEgVjggdmFsdWUgaXMgYSB3
cmFwcGVyIG9mIHR5cGUgfGNsYXNzVHlwZXwuCi0gICAgICAgIHN0YXRpYyBib29sIGlzV3JhcHBl
ck9mVHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4sIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSk7Ci0KLSAgICAgICAgc3RhdGljIHZvaWQqIGNvbnZlcnRUb1NWR1BPRFR5cGVJbXBsKFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKLQotICAgICAg
ICAvLyBDaGVjayB3aGV0aGVyIGEgVjggdmFsdWUgaXMgYSBET00gRXZlbnQgd3JhcHBlci4KLSAg
ICAgICAgc3RhdGljIGJvb2wgaXNET01FdmVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+
KTsKLQotICAgICAgICBzdGF0aWMgdm9pZCogY29udmVydFRvTmF0aXZlT2JqZWN0SW1wbChWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPik7Ci0KLSAgICAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0U3R5bGVTaGVldFRvVjhPYmpl
Y3QoU3R5bGVTaGVldCopOwotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNv
bnZlcnRDU1NWYWx1ZVRvVjhPYmplY3QoQ1NTVmFsdWUqKTsKLSAgICAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0Q1NTUnVsZVRvVjhPYmplY3QoQ1NTUnVsZSopOwotICAg
ICAgICAvLyBSZXR1cm5zIHRoZSBKUyB3cmFwcGVyIG9mIGEgd2luZG93IG9iamVjdCwgaW5pdGlh
bGl6ZXMgdGhlIGVudmlyb25tZW50Ci0gICAgICAgIC8vIG9mIHRoZSB3aW5kb3cgZnJhbWUgaWYg
bmVlZGVkLgotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRXaW5k
b3dUb1Y4T2JqZWN0KERPTVdpbmRvdyopOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0U1ZHRWxlbWVudEluc3RhbmNlVG9WOE9i
amVjdChTVkdFbGVtZW50SW5zdGFuY2UqKTsKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb252ZXJ0U1ZHT2JqZWN0V2l0aENvbnRleHRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZSwgdm9pZCopOwotI2VuZGlmCi0KLSAgICBwcml2YXRlOgotICAgICAg
ICAvLyBTZXQgaGlkZGVuIHJlZmVyZW5jZXMgaW4gYSBET01XaW5kb3cgb2JqZWN0IG9mIGEgZnJh
bWUuCi0gICAgICAgIHN0YXRpYyB2b2lkIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSos
IGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKLQotICAg
ICAgICAvLyBUYWtlIEMgcG9pbnRlciBvdXQgb2YgYSB2OCB3cmFwcGVyLgotICAgICAgICBzdGF0
aWMgdm9pZCogZXh0cmFjdENQb2ludGVySW1wbCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQob2JqZWN0LT5Jc051bWJlcigpKTsKLSAg
ICAgICAgICAgIGludCBhZGRyID0gb2JqZWN0LT5JbnQzMlZhbHVlKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkciA8PCAxKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgaHRtbEVsZW1lbnRUeXBl
KEhUTUxFbGVtZW50Kik7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgc3RhdGljIFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSBzdmdFbGVtZW50VHlwZShTVkdFbGVtZW50Kik7Ci0jZW5kaWYK
LQotICAgICAgICAvLyBUaGUgZmlyc3QgVjhXcmFwcGVyVHlwZSBzcGVjaWZpZXMgdGhlIGZ1bmN0
aW9uIGRlc2NyaXB0b3IKLSAgICAgICAgLy8gdXNlZCB0byBjcmVhdGUgSlMgb2JqZWN0LiBUaGUg
c2Vjb25kIFY4V3JhcHBlclR5cGUgc3BlY2lmaWVzCi0gICAgICAgIC8vIHRoZSBhY3R1YWwgdHlw
ZSBvZiB0aGUgdm9pZCogZm9yIHR5cGUgY2FzdGluZy4KLSAgICAgICAgLy8gRm9yIGV4YW1wbGUs
IGEgSFRNTCBlbGVtZW50IGhhcyBIVE1MRUxFTUVOVCBmb3IgdGhlIGZpcnN0IFY4V3JhcHBlclR5
cGUsIGJ1dCBhbHdheXMKLSAgICAgICAgLy8gdXNlIE5PREUgYXMgdGhlIHNlY29uZCBWOFdyYXBw
ZXJUeXBlLiBKUyB3cmFwcGVyIHN0b3JlcyB0aGUgc2Vjb25kCi0gICAgICAgIC8vIFY4V3JhcHBl
clR5cGUgYW5kIHRoZSB2b2lkKiBhcyBpbnRlcm5hbCBmaWVsZHMuCi0gICAgICAgIHN0YXRpYyB2
ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFudGlhdGVWOE9iamVjdChWOENsYXNzSW5kZXg6OlY4
V3JhcHBlclR5cGUgZGVzY1R5cGUsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBjcHRyVHlw
ZSwgdm9pZCogaW1wbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRl
VjhPYmplY3QoTlVMTCwgZGVzY1R5cGUsIGNwdHJUeXBlLCBpbXBsKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFudGlhdGVWOE9iamVjdChW
OFByb3h5KiwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUsIHZvaWQqKTsKLQotICAgIH07Ci0KLS8vIEVuZCBWOERPTVdyYXBwZXIuaAotCiAg
ICAgdGVtcGxhdGUgPGludCB0YWcsIHR5cGVuYW1lIFQ+CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFY4UHJveHk6OmNvbnN0cnVjdERPTU9iamVjdChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQogICAgIHsK
</data>
<flag name="review"
          id="16944"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>