<?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>8782</bug_id>
          
          <creation_ts>2006-05-07 21:46:55 -0700</creation_ts>
          <short_desc>use ICU and UChar more, QChar less</short_desc>
          <delta_ts>2006-05-09 22:54:18 -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>Platform</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>41499</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-07 21:46:55 -0700</bug_when>
    <thetext>Time to convert WebCore::String and lots of other code to use UChar directly, and cut down QChar use. Soon we can eliminate QChar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41502</commentid>
    <comment_count>1</comment_count>
      <attachid>8160</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-07 22:52:08 -0700</bug_when>
    <thetext>Created attachment 8160
patch that works and passes layout tests; still needs performance testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41528</commentid>
    <comment_count>2</comment_count>
      <attachid>8160</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-08 11:57:51 -0700</bug_when>
    <thetext>Comment on attachment 8160
patch that works and passes layout tests; still needs performance testing

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41563</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-08 19:39:29 -0700</bug_when>
    <thetext>Ironically, we probably want to move to a platform-independent Unicode layer instead of using ICU directly, but that can be a next step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41810</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-05-09 22:23:43 -0700</bug_when>
    <thetext>The commit included changes to render_style.cpp that didn&apos;t appear in the patch and include a typo in RenderStyel::getPseduoStyle. That change is essentially part of the fix for bug 8789, but without the other part, I think this is going to break one of the layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41816</commentid>
    <comment_count>5</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2006-05-09 22:54:18 -0700</bug_when>
    <thetext>Landed in r14273.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8160</attachid>
            <date>2006-05-07 22:52:08 -0700</date>
            <delta_ts>2006-05-08 11:57:51 -0700</delta_ts>
            <desc>patch that works and passes layout tests; still needs performance testing</desc>
            <filename>UCharPatch.txt</filename>
            <type>text/plain</type>
            <size>290046</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL1RleHRCb3VuZGFyaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0v
VGV4dEJvdW5kYXJpZXMuaAkocmV2aXNpb24gMTQyMTYpCisrKyBwbGF0Zm9ybS9UZXh0Qm91bmRh
cmllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNyArMjYsMTcgQEAKICNpZm5kZWYgVGV4dEJv
dW5kYXJpZXNfaAogI2RlZmluZSBUZXh0Qm91bmRhcmllc19oCiAKKyNpbmNsdWRlIDx1bmljb2Rl
L3VtYWNoaW5lLmg+CisKIC8vIEZJWE1FOiBDaGFuZ2UgY2xpZW50cyB0byB1c2UgSUNVIGFuZCBy
ZW1vdmUgdGhlc2UgZnVuY3Rpb25zLgogCi1jbGFzcyBRQ2hhcjsKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0gICAgdm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0IFFDaGFyKiwgaW50IGxlbiwg
aW50IHBvc2l0aW9uLCBpbnQgKnN0YXJ0LCBpbnQgKmVuZCk7Ci0gICAgaW50IGZpbmROZXh0V29y
ZEZyb21JbmRleChjb25zdCBRQ2hhciosIGludCBsZW4sIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3
YXJkKTsKKyAgICB2b2lkIGZpbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqLCBpbnQgbGVuLCBp
bnQgcG9zaXRpb24sIGludCAqc3RhcnQsIGludCAqZW5kKTsKKyAgICBpbnQgZmluZE5leHRXb3Jk
RnJvbUluZGV4KGNvbnN0IFVDaGFyKiwgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBib29sIGZvcndh
cmQpOwogCi0gICAgdm9pZCBmaW5kU2VudGVuY2VCb3VuZGFyeShjb25zdCBRQ2hhciosIGludCBs
ZW4sIGludCBwb3NpdGlvbiwgaW50ICpzdGFydCwgaW50ICplbmQpOwotICAgIGludCBmaW5kTmV4
dFNlbnRlbmNlRnJvbUluZGV4KGNvbnN0IFFDaGFyKiwgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBi
b29sIGZvcndhcmQpOworICAgIHZvaWQgZmluZFNlbnRlbmNlQm91bmRhcnkoY29uc3QgVUNoYXIq
LCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCAqc3RhcnQsIGludCAqZW5kKTsKKyAgICBpbnQg
ZmluZE5leHRTZW50ZW5jZUZyb21JbmRleChjb25zdCBVQ2hhciosIGludCBsZW4sIGludCBwb3Np
dGlvbiwgYm9vbCBmb3J3YXJkKTsKIAogfQogCkluZGV4OiBwbGF0Zm9ybS9TdHJpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBsYXRmb3JtL1N0cmluZy5jcHAJKHJldmlzaW9uIDE0MjE2KQorKysgcGxh
dGZvcm0vU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTUgKzIzLDE3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAorI2luY2x1ZGUg
IkRlcHJlY2F0ZWRTdHJpbmcuaCIKICNpbmNsdWRlIDxranMvaWRlbnRpZmllci5oPgogI2luY2x1
ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCi11c2luZyBuYW1l
c3BhY2UgS0pTOwordXNpbmcgS0pTOjpJZGVudGlmaWVyOwordXNpbmcgS0pTOjpVU3RyaW5nOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN0cmluZzo6U3RyaW5nKGNvbnN0IFFDaGFyKiBzdHIs
IHVuc2lnbmVkIGxlbikKK1N0cmluZzo6U3RyaW5nKGNvbnN0IFVDaGFyKiBzdHIsIHVuc2lnbmVk
IGxlbikKIHsKICAgICBpZiAoIXN0cikKICAgICAgICAgcmV0dXJuOwpAQCAtNTAsNyArNTIsNyBA
QAogICAgIGlmIChzdHIuaXNFbXB0eSgpKQogICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpl
bXB0eSgpOwogICAgIGVsc2UgCi0gICAgICAgIG1faW1wbCA9IG5ldyBTdHJpbmdJbXBsKHN0ci51
bmljb2RlKCksIHN0ci5sZW5ndGgoKSk7CisgICAgICAgIG1faW1wbCA9IG5ldyBTdHJpbmdJbXBs
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdHIudW5pY29kZSgpKSwgc3RyLmxlbmd0
aCgpKTsKIH0KIAogU3RyaW5nOjpTdHJpbmcoY29uc3QgY2hhciogc3RyKQpAQCAtNzYsMTggKzc4
LDE3IEBACiAgICAgICAgIG1faW1wbCA9IG5ldyBTdHJpbmdJbXBsKHN0ciwgbGVuZ3RoKTsKIH0K
IAotU3RyaW5nJiBTdHJpbmc6Om9wZXJhdG9yKz0oY29uc3QgU3RyaW5nICZzdHIpCit2b2lkIFN0
cmluZzo6YXBwZW5kKGNvbnN0IFN0cmluZyAmc3RyKQogewogICAgIGlmIChzdHIubV9pbXBsKSB7
CiAgICAgICAgIGlmICghbV9pbXBsKSB7CiAgICAgICAgICAgICAvLyAjIyMgRklYTUUhISEKICAg
ICAgICAgICAgIG1faW1wbCA9IHN0ci5tX2ltcGw7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9pbXBsID0gbV9pbXBs
LT5jb3B5KCk7CiAgICAgICAgIG1faW1wbC0+YXBwZW5kKHN0ci5tX2ltcGwuZ2V0KCkpOwogICAg
IH0KLSAgICByZXR1cm4gKnRoaXM7CiB9CiAKIFN0cmluZyBvcGVyYXRvcisoY29uc3QgU3RyaW5n
JiBhLCBjb25zdCBTdHJpbmcmIGIpCkBAIC0xMTEsMjYgKzExMiw2IEBACiAgICAgcmV0dXJuIFN0
cmluZyhjcykgKyBzOwogfQogCi1TdHJpbmcgb3BlcmF0b3IrKGNvbnN0IFN0cmluZyYgcywgUUNo
YXIgYykKLXsKLSAgICByZXR1cm4gcyArIFN0cmluZyhjKTsKLX0KLQotU3RyaW5nIG9wZXJhdG9y
KyhRQ2hhciBjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhjKSArIHM7
Ci19Ci0KLVN0cmluZyBvcGVyYXRvcisoY29uc3QgU3RyaW5nJiBzLCBjaGFyIGMpCi17Ci0gICAg
cmV0dXJuIHMgKyBTdHJpbmcoYyk7Ci19Ci0KLVN0cmluZyBvcGVyYXRvcisoY2hhciBjLCBjb25z
dCBTdHJpbmcmIHMpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhjKSArIHM7Ci19Ci0KIHZvaWQgU3Ry
aW5nOjppbnNlcnQoY29uc3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHBvcykKIHsKICAgICBpZiAo
IW1faW1wbCkKQEAgLTEzOSwxMiArMTIwLDExIEBACiAgICAgICAgIG1faW1wbC0+aW5zZXJ0KHN0
ci5tX2ltcGwuZ2V0KCksIHBvcyk7CiB9CiAKLWNvbnN0IFFDaGFyJiBTdHJpbmc6Om9wZXJhdG9y
W10odW5zaWduZWQgaSkgY29uc3QKK1VDaGFyIFN0cmluZzo6b3BlcmF0b3JbXSh1bnNpZ25lZCBp
KSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBRQ2hhciBudWxsQ2hhciA9IDA7Ci0gICAgaWYg
KCFtX2ltcGwgfHwgaSA+PSBtX2ltcGwtPmxlbmd0aCgpICkKLSAgICAgICAgcmV0dXJuIG51bGxD
aGFyOwotICAgIHJldHVybiAqKG1faW1wbC0+dW5pY29kZSgpK2kpOworICAgIGlmICghbV9pbXBs
IHx8IGkgPj0gbV9pbXBsLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IG1faW1wbC0+Y2hhcmFjdGVycygpW2ldOwogfQogCiB1bnNpZ25lZCBTdHJpbmc6Omxlbmd0aCgp
IGNvbnN0CkBAIC0xOTQsMzIgKzE3NCwzOSBAQAogICAgIHJldHVybiBtX2ltcGwtPnVwcGVyKCk7
CiB9CiAKK1N0cmluZyBTdHJpbmc6OmZvbGRDYXNlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW1w
bCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX2ltcGwtPmZvbGRDYXNl
KCk7Cit9CisKIGJvb2wgU3RyaW5nOjpwZXJjZW50YWdlKGludCYgcmVzdWx0KSBjb25zdAogewog
ICAgIGlmICghbV9pbXBsIHx8ICFtX2ltcGwtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoKihtX2ltcGwtPnVuaWNvZGUoKSttX2ltcGwtPmxlbmd0aCgpLTEpICE9
ICclJykKKyAgICBpZiAoKCptX2ltcGwpW21faW1wbC0+bGVuZ3RoKCkgLSAxXSAhPSAnJScpCiAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVzdWx0ID0gUUNvbnN0U3RyaW5nKG1faW1wbC0+
dW5pY29kZSgpLCBtX2ltcGwtPmxlbmd0aCgpLTEpLnN0cmluZygpLnRvSW50KCk7CisgICAgcmVz
dWx0ID0gUUNvbnN0U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihtX2ltcGwt
PmNoYXJhY3RlcnMoKSksIG1faW1wbC0+bGVuZ3RoKCkgLSAxKS5zdHJpbmcoKS50b0ludCgpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCi1jb25zdCBRQ2hhciogU3RyaW5nOjp1bmljb2RlKCkgY29u
c3QKK2NvbnN0IFVDaGFyKiBTdHJpbmc6OmNoYXJhY3RlcnMoKSBjb25zdAogewogICAgIGlmICgh
bV9pbXBsKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9pbXBsLT51bmljb2RlKCk7
CisgICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVycygpOwogfQogCiBEZXByZWNhdGVkU3RyaW5n
IFN0cmluZzo6ZGVwcmVjYXRlZFN0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwpCiAg
ICAgICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nOjpudWxsOwotICAgIGlmICghbV9pbXBsLT51
bmljb2RlKCkpCisgICAgaWYgKCFtX2ltcGwtPmNoYXJhY3RlcnMoKSkKICAgICAgICAgcmV0dXJu
IERlcHJlY2F0ZWRTdHJpbmcoIiIsIDApOwotICAgIHJldHVybiBEZXByZWNhdGVkU3RyaW5nKG1f
aW1wbC0+dW5pY29kZSgpLCBtX2ltcGwtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4gRGVwcmVjYXRl
ZFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4obV9pbXBsLT5jaGFyYWN0ZXJz
KCkpLCBtX2ltcGwtPmxlbmd0aCgpKTsKIH0KIAogU3RyaW5nIFN0cmluZzo6c3ByaW50Zihjb25z
dCBjaGFyICpmb3JtYXQsIC4uLikKQEAgLTIyOSwxNCArMjE2LDE0IEBACiAKICAgICBWZWN0b3I8
Y2hhciwgMjU2PiBidWZmZXI7CiAjaWYgUExBVEZPUk0oV0lOX09TKQotICAgIC8vIFdpbmRvd3Mg
dm5zcHJpbnRmIGRvZXMgbm90IHJldHVybiB0aGUgZXhwZWN0ZWQgc2l6ZSBvbiBvdmVyZmxvdwor
ICAgIC8vIFdpbmRvd3MgdnNucHJpbnRmIGRvZXMgbm90IHJldHVybiB0aGUgZXhwZWN0ZWQgc2l6
ZSBvbiBvdmVyZmxvdwogICAgIC8vIFNvIHdlIGp1c3QgaGF2ZSB0byBrZWVwIGxvb3BpbmcgdW50
aWwgb3VyIHZzcHJpbnRmIGNhbGwgd29ya3MhCiAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgZG8g
ewogICAgICAgICBpZiAocmVzdWx0IDwgMCkKICAgICAgICAgICAgIGJ1ZmZlci5yZXNpemUoYnVm
ZmVyLmNhcGFjaXR5KCkgKiAyKTsKICAgICAgICAgcmVzdWx0ID0gdnNucHJpbnRmKGJ1ZmZlci5k
YXRhKCksIGJ1ZmZlci5jYXBhY2l0eSgpLCBmb3JtYXQsIGFyZ3MpOwotICAgICAgICAvLyBXaW5k
b3dzIHZuc3ByaW50ZiByZXR1cm5zIC0xIGJvdGggZm9yIGFsbCBlcnJvcnMuICBUaGVyZSBpcyBu
bworICAgICAgICAvLyBXaW5kb3dzIHZzbnByaW50ZiByZXR1cm5zIC0xIGZvciBib3RoIGVycm9y
cy4gU2luY2UgdGhlcmUgaXMgbm8KICAgICAgICAgLy8gd2F5IHRvIGRpc3Rpbmd1aXNoIGJldHdl
ZW4gIm5vdCBlbm91Z2ggcm9vbSIgYW5kICJpbnZhbGlkIGZvcm1hdCIKICAgICAgICAgLy8gd2Ug
anVzdCBrZWVwIHRyeWluZyB1bnRpbCB3ZSBoaXQgYW4gYXJiaXRyYXJ5IHNpemUgYW5kIHRoZW4g
c3RvcC4KICAgICB9IHdoaWxlIChyZXN1bHQgPCAwICYmIChidWZmZXIuY2FwYWNpdHkoKSAqIDIp
IDwgMjA0OCk7CkBAIC0zMDgsNyArMjk1LDcgQEAKIAogYm9vbCBTdHJpbmc6OmlzRW1wdHkoKSBj
b25zdAogewotICAgIHJldHVybiAoIW1faW1wbCB8fCBtX2ltcGwtPmxlbmd0aCgpID09IDApOwor
ICAgIHJldHVybiAhbV9pbXBsIHx8ICFtX2ltcGwtPmxlbmd0aCgpOwogfQogCiBMZW5ndGgqIFN0
cmluZzo6dG9Db29yZHNBcnJheShpbnQmIGxlbikgY29uc3QgCkBAIC0zMzMsNyArMzIwLDcgQEAK
ICAgICB1bnNpZ25lZCBsID0gYS5sZW5ndGgoKTsKICAgICBpZiAobCAhPSBiLmxlbmd0aCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtZW1jbXAoYS51bmljb2RlKCksIGIudW5p
Y29kZSgpLCBsICogc2l6ZW9mKFFDaGFyKSkpCisgICAgaWYgKCFtZW1jbXAoYS5jaGFyYWN0ZXJz
KCksIGIudW5pY29kZSgpLCBsICogc2l6ZW9mKFVDaGFyKSkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTM0Niw3ICszMzMsNyBAQAogICAgIGlmIChzdHIu
aXNFbXB0eSgpKQogICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAgIGVs
c2UgCi0gICAgICAgIG1faW1wbCA9IG5ldyBTdHJpbmdJbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgUUNoYXIqPihzdHIuZGF0YSgpKSwgc3RyLnNpemUoKSk7CisgICAgICAgIG1faW1wbCA9IG5l
dyBTdHJpbmdJbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdHIuZGF0YSgpKSwg
c3RyLnNpemUoKSk7CiB9CiAKIFN0cmluZzo6U3RyaW5nKGNvbnN0IFVTdHJpbmcmIHN0cikKQEAg
LTM1NywyMSArMzQ0LDIxIEBACiAgICAgaWYgKHN0ci5pc0VtcHR5KCkpCiAgICAgICAgIG1faW1w
bCA9IFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAgZWxzZSAKLSAgICAgICAgbV9pbXBsID0gbmV3
IFN0cmluZ0ltcGwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KHN0ci5kYXRhKCkpLCBz
dHIuc2l6ZSgpKTsKKyAgICAgICAgbV9pbXBsID0gbmV3IFN0cmluZ0ltcGwocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVQ2hhcio+KHN0ci5kYXRhKCkpLCBzdHIuc2l6ZSgpKTsKIH0KIAogU3RyaW5n
OjpvcGVyYXRvciBJZGVudGlmaWVyKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbCkKICAgICAg
ICAgcmV0dXJuIElkZW50aWZpZXIoKTsKLSAgICByZXR1cm4gSWRlbnRpZmllcihyZWludGVycHJl
dF9jYXN0PGNvbnN0IEtKUzo6VUNoYXIqPihtX2ltcGwtPnVuaWNvZGUoKSksIG1faW1wbC0+bGVu
Z3RoKCkpOworICAgIHJldHVybiBJZGVudGlmaWVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgS0pT
OjpVQ2hhcio+KG1faW1wbC0+Y2hhcmFjdGVycygpKSwgbV9pbXBsLT5sZW5ndGgoKSk7CiB9CiAK
IFN0cmluZzo6b3BlcmF0b3IgVVN0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwpCiAg
ICAgICAgIHJldHVybiBVU3RyaW5nKCk7Ci0gICAgcmV0dXJuIFVTdHJpbmcocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBLSlM6OlVDaGFyKj4obV9pbXBsLT51bmljb2RlKCkpLCBtX2ltcGwtPmxlbmd0
aCgpKTsKKyAgICByZXR1cm4gVVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IEtKUzo6VUNo
YXIqPihtX2ltcGwtPmNoYXJhY3RlcnMoKSksIG1faW1wbC0+bGVuZ3RoKCkpOwogfQogCiB9Cklu
ZGV4OiBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9H
cmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMTQyMTYpCisrKyBwbGF0Zm9ybS9HcmFwaGljc0Nv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlBlbi5o
IgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlIDxreG1sY29yZS9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdW1hY2hpbmUuaD4KIAogI2lmIF9fQVBQTEVfXwog
dHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0OwpAQCAtNDMs
NyArNDQsNiBAQAogI2VuZGlmCiAKIGNsYXNzIERlcHJlY2F0ZWRTdHJpbmc7Ci1jbGFzcyBRQ2hh
cjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMDYsMTQgKzEwNiwxNCBAQAogICAgICAg
ICB2b2lkIHNldEZvY3VzUmluZ0NsaXAoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIGNs
ZWFyRm9jdXNSaW5nQ2xpcCgpOwogCi0gICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgSW50UG9p
bnQmLCBpbnQgYWxpZ25tZW50RmxhZ3MsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKKyAgICAg
ICAgdm9pZCBkcmF3VGV4dChjb25zdCBJbnRQb2ludCYsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcm
KTsKKyAgICAgICAgdm9pZCBkcmF3VGV4dChjb25zdCBJbnRQb2ludCYsIGludCB0YWJXaWR0aCwg
aW50IHhwb3MsCisgICAgICAgICAgICBjb25zdCBVQ2hhciosIGludCBzbGVuLCBpbnQgcG9zLCBp
bnQgbGVuLCBpbnQgdG9BZGQsCisgICAgICAgICAgICBUZXh0RGlyZWN0aW9uID0gTFRSLCBib29s
IHZpc3VhbGx5T3JkZXJlZCA9IGZhbHNlLCBpbnQgZnJvbSA9IC0xLCBpbnQgdG8gPSAtMSk7CiAg
ICAgICAgIHZvaWQgZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3QgSW50UG9pbnQmLCBpbnQgaCwg
aW50IHRhYldpZHRoLCBpbnQgeHBvcywKLSAgICAgICAgICAgIGNvbnN0IFFDaGFyKiwgaW50IHNs
ZW4sIGludCBwb3MsIGludCBsZW4sIGludCB0b0FkZCwKKyAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiwgaW50IHNsZW4sIGludCBwb3MsIGludCBsZW4sIGludCB0b0FkZCwKICAgICAgICAgICAgIFRl
eHREaXJlY3Rpb24sIGJvb2wgdmlzdWFsbHlPcmRlcmVkLAogICAgICAgICAgICAgaW50IGZyb20s
IGludCB0bywgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcik7Ci0gICAgICAgIHZvaWQgZHJh
d1RleHQoY29uc3QgSW50UG9pbnQmLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAotICAgICAgICAg
ICAgY29uc3QgUUNoYXIqLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHRvQWRkLAot
ICAgICAgICAgICAgVGV4dERpcmVjdGlvbiA9IExUUiwgYm9vbCB2aXN1YWxseU9yZGVyZWQgPSBm
YWxzZSwgaW50IGZyb20gPSAtMSwgaW50IHRvID0gLTEpOwogICAgICAgICB2b2lkIGRyYXdMaW5l
Rm9yVGV4dChjb25zdCBJbnRQb2ludCYsIGludCB5T2Zmc2V0LCBpbnQgd2lkdGgpOwogICAgICAg
ICB2b2lkIGRyYXdMaW5lRm9yTWlzc3BlbGxpbmcoY29uc3QgSW50UG9pbnQmLCBpbnQgd2lkdGgp
OwogICAgICAgICBpbnQgbWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzKCk7CkluZGV4OiBwbGF0Zm9y
bS9tYWMvRm9udE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9tYWMvRm9udE1hYy5tbQko
cmV2aXNpb24gMTQyMTYpCisrKyBwbGF0Zm9ybS9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksOCBAQAogCiAjaW1wb3J0ICJJbnRSZWN0LmgiCiAKK3VzaW5nIG5hbWVz
cGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEZhbGxiYWNrTGlzdDo6Rm9u
dEZhbGxiYWNrTGlzdCgpCkBAIC0xMDIsMTEgKzEwNCwxMSBAQAogfQogCiBJbnRSZWN0IEZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IGgsIGludCB0
YWJXaWR0aCwgaW50IHhwb3MsIAotICAgIGNvbnN0IFFDaGFyKiBzdHIsIGludCBzbGVuLCBpbnQg
cG9zLCBpbnQgbCwgaW50IHRvQWRkLAorICAgIGNvbnN0IFVDaGFyKiBzdHIsIGludCBzbGVuLCBp
bnQgcG9zLCBpbnQgbCwgaW50IHRvQWRkLAogICAgIGJvb2wgcnRsLCBib29sIHZpc3VhbGx5T3Jk
ZXJlZCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBhc3NlcnQobV9mb250TGlzdCk7
Ci0gICAgaW50IGxlbiA9IHN0ZDo6bWluKHNsZW4gLSBwb3MsIGwpOworICAgIGludCBsZW4gPSBt
aW4oc2xlbiAtIHBvcywgbCk7CiAKICAgICBDUkVBVEVfRkFNSUxZX0FSUkFZKGZvbnREZXNjcmlw
dGlvbigpLCBmYW1pbGllcyk7CiAKQEAgLTExNiw3ICsxMTgsNyBAQAogICAgICAgICB0byA9IGxl
bjsKIAogICAgIFdlYkNvcmVUZXh0UnVuIHJ1bjsKLSAgICBXZWJDb3JlSW5pdGlhbGl6ZVRleHRS
dW4oJnJ1biwgKGNvbnN0IFVuaUNoYXIgKikoc3RyK3BvcyksIGxlbiwgZnJvbSwgdG8pOyAgICAK
KyAgICBXZWJDb3JlSW5pdGlhbGl6ZVRleHRSdW4oJnJ1biwgc3RyICsgcG9zLCBsZW4sIGZyb20s
IHRvKTsKICAgICBXZWJDb3JlVGV4dFN0eWxlIHN0eWxlOwogICAgIFdlYkNvcmVJbml0aWFsaXpl
RW1wdHlUZXh0U3R5bGUoJnN0eWxlKTsKICAgICBzdHlsZS5ydGwgPSBydGw7CkBAIC0xMzcsNyAr
MTM5LDcgQEAKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX2ZvbnRMaXN0LT5wcmltYXJ5
Rm9udChmb250RGVzY3JpcHRpb24oKSktPnNlbGVjdGlvblJlY3RGb3JSdW4oJnJ1biwgJnN0eWxl
LCAmZ2VvbWV0cnkpKTsKIH0KICAgICAgICAgICAgICAgICAgICAgIAotdm9pZCBGb250OjpkcmF3
VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50
IHRhYldpZHRoLCBpbnQgeHBvcywgY29uc3QgUUNoYXIqIHN0ciwgaW50IGxlbiwgaW50IGZyb20s
IGludCB0bywKK3ZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRQb2ludCYgcG9pbnQsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGNvbnN0IFVDaGFy
KiBzdHIsIGludCBsZW4sIGludCBmcm9tLCBpbnQgdG8sCiAgICAgICAgICAgICAgICAgICAgIGlu
dCB0b0FkZCwgVGV4dERpcmVjdGlvbiBkLCBib29sIHZpc3VhbGx5T3JkZXJlZCkgY29uc3QKIHsK
ICAgICAvLyBBdm9pZCBhbGxvY2F0aW9ucywgdXNlIHN0YWNrIGFycmF5IHRvIHBhc3MgZm9udCBm
YW1pbGllcy4gIE5vcm1hbGx5IHRoZXNlCkBAIC0xNTAsNyArMTUyLDcgQEAKICAgICAgICAgdG8g
PSBsZW47CiAgICAgICAgIAogICAgIFdlYkNvcmVUZXh0UnVuIHJ1bjsKLSAgICBXZWJDb3JlSW5p
dGlhbGl6ZVRleHRSdW4oJnJ1biwgKGNvbnN0IFVuaUNoYXIgKilzdHIsIGxlbiwgZnJvbSwgdG8p
OyAgICAKKyAgICBXZWJDb3JlSW5pdGlhbGl6ZVRleHRSdW4oJnJ1biwgc3RyLCBsZW4sIGZyb20s
IHRvKTsgICAgCiAgICAgV2ViQ29yZVRleHRTdHlsZSBzdHlsZTsKICAgICBXZWJDb3JlSW5pdGlh
bGl6ZUVtcHR5VGV4dFN0eWxlKCZzdHlsZSk7CiAgICAgc3R5bGUudGV4dENvbG9yID0gbnNDb2xv
cihjb250ZXh0LT5wZW4oKS5jb2xvcigpKTsKQEAgLTE3MCw3ICsxNzIsNyBAQAogICAgIG1fZm9u
dExpc3QtPnByaW1hcnlGb250KGZvbnREZXNjcmlwdGlvbigpKS0+ZHJhd1J1bigmcnVuLCAmc3R5
bGUsICZnZW9tZXRyeSk7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0hpZ2hsaWdodEZvclRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQg
dGFiV2lkdGgsIGludCB4cG9zLCBjb25zdCBRQ2hhciogc3RyLAordm9pZCBGb250OjpkcmF3SGln
aGxpZ2h0Rm9yVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBw
b2ludCwgaW50IGgsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGNvbnN0IFVDaGFyKiBzdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sIGludCBmcm9tLCBpbnQgdG8s
IGludCB0b0FkZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dERpcmVjdGlv
biBkLCBib29sIHZpc3VhbGx5T3JkZXJlZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikg
Y29uc3QKIHsKQEAgLTE4NCw3ICsxODYsNyBAQAogICAgICAgICB0byA9IGxlbjsKICAgICAgICAg
CiAgICAgV2ViQ29yZVRleHRSdW4gcnVuOwotICAgIFdlYkNvcmVJbml0aWFsaXplVGV4dFJ1bigm
cnVuLCAoY29uc3QgVW5pQ2hhciAqKXN0ciwgbGVuLCBmcm9tLCB0byk7ICAgIAorICAgIFdlYkNv
cmVJbml0aWFsaXplVGV4dFJ1bigmcnVuLCBzdHIsIGxlbiwgZnJvbSwgdG8pOyAgICAKICAgICBX
ZWJDb3JlVGV4dFN0eWxlIHN0eWxlOwogICAgIFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0U3R5
bGUoJnN0eWxlKTsKICAgICBzdHlsZS50ZXh0Q29sb3IgPSBuc0NvbG9yKGNvbnRleHQtPnBlbigp
LmNvbG9yKCkpOwpAQCAtMjIyLDEzICsyMjQsMTMgQEAKICAgICByZXR1cm4gbV9mb250TGlzdC0+
cHJpbWFyeUZvbnQoZm9udERlc2NyaXB0aW9uKCkpLT5taXNzcGVsbGluZ0xpbmVUaGlja25lc3Mo
KTsKIH0KIAotZmxvYXQgRm9udDo6ZmxvYXRXaWR0aChjb25zdCBRQ2hhciogdWNoYXJzLCBpbnQg
c2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHRhYldpZHRoLCBpbnQgeHBvcywgYm9vbCBydW5S
b3VuZGluZykgY29uc3QKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGgoY29uc3QgVUNoYXIqIHVjaGFy
cywgaW50IHNsZW4sIGludCBwb3MsIGludCBsZW4sIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGJv
b2wgcnVuUm91bmRpbmcpIGNvbnN0CiB7CiAgICAgYXNzZXJ0KG1fZm9udExpc3QpOwogICAgIENS
RUFURV9GQU1JTFlfQVJSQVkoZm9udERlc2NyaXB0aW9uKCksIGZhbWlsaWVzKTsKIAogICAgIFdl
YkNvcmVUZXh0UnVuIHJ1bjsKLSAgICBXZWJDb3JlSW5pdGlhbGl6ZVRleHRSdW4oJnJ1biwgKGNv
bnN0IFVuaUNoYXIgKil1Y2hhcnMsIHNsZW4sIHBvcywgcG9zK2xlbik7CisgICAgV2ViQ29yZUlu
aXRpYWxpemVUZXh0UnVuKCZydW4sIHVjaGFycywgc2xlbiwgcG9zLCBwb3MgKyBsZW4pOwogICAg
IAogICAgIFdlYkNvcmVUZXh0U3R5bGUgc3R5bGU7CiAgICAgV2ViQ29yZUluaXRpYWxpemVFbXB0
eVRleHRTdHlsZSgmc3R5bGUpOwpAQCAtMjQzLDEzICsyNDUsMTMgQEAKICAgICByZXR1cm4gbV9m
b250TGlzdC0+cHJpbWFyeUZvbnQoZm9udERlc2NyaXB0aW9uKCkpLT5mbG9hdFdpZHRoRm9yUnVu
KCZydW4sICZzdHlsZSk7CiB9CiAKLWludCBGb250OjpjaGVja1NlbGVjdGlvblBvaW50KGNvbnN0
IFFDaGFyKiBzLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHRvQWRkLCBpbnQgdGFi
V2lkdGgsIGludCB4cG9zLCBpbnQgeCwgVGV4dERpcmVjdGlvbiBkLCBib29sIHZpc3VhbGx5T3Jk
ZXJlZCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKK2ludCBGb250OjpjaGVja1Nl
bGVjdGlvblBvaW50KGNvbnN0IFVDaGFyKiBzLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwg
aW50IHRvQWRkLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBpbnQgeCwgVGV4dERpcmVjdGlvbiBk
LCBib29sIHZpc3VhbGx5T3JkZXJlZCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QK
IHsKICAgICBhc3NlcnQobV9mb250TGlzdCk7CiAgICAgQ1JFQVRFX0ZBTUlMWV9BUlJBWShmb250
RGVzY3JpcHRpb24oKSwgZmFtaWxpZXMpOwogICAgIAogICAgIFdlYkNvcmVUZXh0UnVuIHJ1bjsK
LSAgICBXZWJDb3JlSW5pdGlhbGl6ZVRleHRSdW4oJnJ1biwgKGNvbnN0IFVuaUNoYXIgKikocytw
b3MpLCBzdGQ6Om1pbihzbGVuIC0gcG9zLCBsZW4pLCAwLCBsZW4pOworICAgIFdlYkNvcmVJbml0
aWFsaXplVGV4dFJ1bigmcnVuLCBzICsgcG9zLCBtaW4oc2xlbiAtIHBvcywgbGVuKSwgMCwgbGVu
KTsKICAgICAKICAgICBXZWJDb3JlVGV4dFN0eWxlIHN0eWxlOwogICAgIFdlYkNvcmVJbml0aWFs
aXplRW1wdHlUZXh0U3R5bGUoJnN0eWxlKTsKSW5kZXg6IHBsYXRmb3JtL21hYy9Gb250RmFtaWx5
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9Gb250RmFtaWx5TWFjLm1tCShyZXZp
c2lvbiAxNDIxNikKKysrIHBsYXRmb3JtL21hYy9Gb250RmFtaWx5TWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgZmFtaWxpZXMgPSBDRkRpY3Rp
b25hcnlDcmVhdGVNdXRhYmxlKE5VTEwsIDAsICZDRkRpY3Rpb25hcnlGYW1pbHlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKICAgICAgICAgICAgIG1fQ0ZG
YW1pbHkgPSAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmFtaWxpZXMsIG1fZmFt
aWx5LmltcGwoKSk7CiAgICAgICAgICAgICBpZiAoIW1fQ0ZGYW1pbHkpIHsKLSAgICAgICAgICAg
ICAgICBtX0NGRmFtaWx5ID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAoY29uc3Qg
VW5pQ2hhciAqKW1fZmFtaWx5LnVuaWNvZGUoKSwgbV9mYW1pbHkubGVuZ3RoKCkpOworICAgICAg
ICAgICAgICAgIG1fQ0ZGYW1pbHkgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIG1f
ZmFtaWx5LmNoYXJhY3RlcnMoKSwgbV9mYW1pbHkubGVuZ3RoKCkpOwogICAgICAgICAgICAgICAg
IENGRGljdGlvbmFyeVNldFZhbHVlKGZhbWlsaWVzLCBtX2ZhbWlseS5pbXBsKCksIG1fQ0ZGYW1p
bHkpOwogICAgICAgICAgICAgICAgIENGUmVsZWFzZShtX0NGRmFtaWx5KTsKICAgICAgICAgICAg
IH0KSW5kZXg6IHBsYXRmb3JtL21hYy9UZXh0RW5jb2RpbmdNYWMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHBsYXRmb3JtL21hYy9UZXh0RW5jb2RpbmdNYWMuY3BwCShyZXZpc2lvbiAxNDIxNikKKysrIHBs
YXRmb3JtL21hYy9UZXh0RW5jb2RpbmdNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1
MSw3IEBACiAgICAgLy8gRklYTUU6IFNpbmNlIHRoZXJlJ3Mgbm8gImZvcmNlIEFTQ0lJIHJhbmdl
IiBtb2RlIGluIENGU3RyaW5nLCB3ZSBjaGFuZ2UgdGhlIGJhY2tzbGFzaCBpbnRvIGEgeWVuIHNp
Z24uCiAgICAgLy8gRW5jb2Rpbmcgd2lsbCBjaGFuZ2UgdGhlIHllbiBzaWduIGJhY2sgaW50byBh
IGJhY2tzbGFzaC4KICAgICBEZXByZWNhdGVkU3RyaW5nIGNvcHkgPSBxY3M7Ci0gICAgY29weS5y
ZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOworICAgIGNv
cHkucmVwbGFjZSgnXFwnLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwogICAgIENGU3Ry
aW5nUmVmIGNmcyA9IGNvcHkuZ2V0Q0ZTdHJpbmcoKTsKICAgICAKICAgICBDRkluZGV4IHN0YXJ0
UG9zID0gMDsKSW5kZXg6IHBsYXRmb3JtL21hYy9UZXh0Qm91bmRhcmllcy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBwbGF0Zm9ybS9tYWMvVGV4dEJvdW5kYXJpZXMubW0JKHJldmlzaW9uIDE0MjE2KQorKysg
cGxhdGZvcm0vbWFjL1RleHRCb3VuZGFyaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICsz
MSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNv
bnN0IFFDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQq
IGVuZCkKK3ZvaWQgZmluZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4s
IGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpCiB7Ci0gICAgTlNTdHJpbmcqIHN0
cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25zdF9j
YXN0PHVuaWNoYXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuaWNoYXIqPihjaGFycykpCisg
ICAgTlNTdHJpbmcqIHN0cmluZyA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVy
c05vQ29weTpjb25zdF9jYXN0PHVuaWNoYXIqPihjaGFycykKICAgICAgICAgbGVuZ3RoOmxlbiBm
cmVlV2hlbkRvbmU6Tk9dOwogICAgIE5TQXR0cmlidXRlZFN0cmluZyogYXR0ciA9IFtbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpzdHJpbmddOwogICAgIE5TUmFuZ2Ug
cmFuZ2UgPSBbYXR0ciBkb3VibGVDbGlja0F0SW5kZXg6KHBvc2l0aW9uID49IGxlbikgPyBsZW4g
LSAxIDogcG9zaXRpb25dOwpAQCAtNDMsOSArNDMsOSBAQAogICAgICplbmQgPSByYW5nZS5sb2Nh
dGlvbiArIHJhbmdlLmxlbmd0aDsKIH0KIAotaW50IGZpbmROZXh0V29yZEZyb21JbmRleChjb25z
dCBRQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgYm9vbCBmb3J3YXJkKQoraW50
IGZpbmROZXh0V29yZEZyb21JbmRleChjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBw
b3NpdGlvbiwgYm9vbCBmb3J3YXJkKQogeyAgIAotICAgIE5TU3RyaW5nKiBzdHJpbmcgPSBbW05T
U3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0NvcHk6Y29uc3RfY2FzdDx1bmljaGFy
Kj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bmljaGFyKj4oY2hhcnMpKQorICAgIE5TU3RyaW5n
KiBzdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0NvcHk6Y29u
c3RfY2FzdDx1bmljaGFyKj4oY2hhcnMpCiAgICAgICAgIGxlbmd0aDpsZW4gZnJlZVdoZW5Eb25l
Ok5PXTsKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGF0dHIgPSBbW05TQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6c3RyaW5nXTsKICAgICBpbnQgcmVzdWx0ID0gW2F0dHIg
bmV4dFdvcmRGcm9tSW5kZXg6cG9zaXRpb24gZm9yd2FyZDpmb3J3YXJkXTsKQEAgLTk5LDE0ICs5
OSwxMyBAQAogICAgIHJldHVybiBsb2NhbGVTdHJpbmc7CiB9CiAKLXZvaWQgZmluZFNlbnRlbmNl
Qm91bmRhcnkoY29uc3QgUUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCog
c3RhcnQsIGludCogZW5kKQordm9pZCBmaW5kU2VudGVuY2VCb3VuZGFyeShjb25zdCBVQ2hhciog
Y2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpCiB7CiAg
ICAgaW50IHN0YXJ0UG9zID0gMDsKICAgICBpbnQgZW5kUG9zID0gMDsKIAogICAgIFVFcnJvckNv
ZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgIFVCcmVha0l0ZXJhdG9yKiBib3VuZGFyeSA9
IHVicmtfb3BlbihVQlJLX1NFTlRFTkNFLCBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKSwKLSAg
ICAgICAgY29uc3RfY2FzdDx1bmljaGFyKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bmljaGFy
Kj4oY2hhcnMpKSwgbGVuLCAmc3RhdHVzKTsKKyAgICBVQnJlYWtJdGVyYXRvciogYm91bmRhcnkg
PSB1YnJrX29wZW4oVUJSS19TRU5URU5DRSwgY3VycmVudFRleHRCcmVha0xvY2FsZUlEKCksIGNo
YXJzLCBsZW4sICZzdGF0dXMpOwogICAgIGlmIChib3VuZGFyeSAmJiBVX1NVQ0NFU1Moc3RhdHVz
KSkgewogICAgICAgICBzdGFydFBvcyA9IHVicmtfcHJlY2VkaW5nKGJvdW5kYXJ5LCBwb3NpdGlv
bik7CiAgICAgICAgIGlmIChzdGFydFBvcyA9PSBVQlJLX0RPTkUpIHsKQEAgLTEyMywxMyArMTIy
LDEyIEBACiAgICAgKmVuZCA9IGVuZFBvczsKIH0KIAotaW50IGZpbmROZXh0U2VudGVuY2VGcm9t
SW5kZXgoY29uc3QgUUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9y
d2FyZCkKK2ludCBmaW5kTmV4dFNlbnRlbmNlRnJvbUluZGV4KGNvbnN0IFVDaGFyKiBjaGFycywg
aW50IGxlbiwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcmQpCiB7CiAgICAgaW50IHBvcyA9IDA7
CiAgICAgCiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgVUJyZWFr
SXRlcmF0b3IqIGJvdW5kYXJ5ID0gdWJya19vcGVuKFVCUktfU0VOVEVOQ0UsIGN1cnJlbnRUZXh0
QnJlYWtMb2NhbGVJRCgpLAotICAgICAgICBjb25zdF9jYXN0PHVuaWNoYXIqPihyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuaWNoYXIqPihjaGFycykpLCBsZW4sICZzdGF0dXMpOworICAgIFVCcmVh
a0l0ZXJhdG9yKiBib3VuZGFyeSA9IHVicmtfb3BlbihVQlJLX1NFTlRFTkNFLCBjdXJyZW50VGV4
dEJyZWFrTG9jYWxlSUQoKSwgY2hhcnMsIGxlbiwgJnN0YXR1cyk7CiAgICAgaWYgKGJvdW5kYXJ5
ICYmIFVfU1VDQ0VTUyhzdGF0dXMpKSB7CiAgICAgICAgIGlmIChmb3J3YXJkKSB7CiAgICAgICAg
ICAgICBwb3MgPSB1YnJrX2ZvbGxvd2luZyhib3VuZGFyeSwgcG9zaXRpb24pOwpJbmRleDogcGxh
dGZvcm0vVGV4dEVuY29kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vVGV4dEVuY29kaW5n
LmgJKHJldmlzaW9uIDE0MjE2KQorKysgcGxhdGZvcm0vVGV4dEVuY29kaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgYm9vbCB1c2VzVmlzdWFsT3JkZXJpbmco
KSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgVmlzdWFsT3JkZXJpbmc7IH0KICAgICAgICAgYm9v
bCBpc0phcGFuZXNlKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIElzSmFwYW5lc2U7IH0KICAg
ICAgICAgCi0gICAgICAgIFFDaGFyIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25zdDsK
KyAgICAgICAgVUNoYXIgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0OwogICAgICAg
ICAKICAgICAgICAgRGVwcmVjYXRlZENTdHJpbmcgZnJvbVVuaWNvZGUoY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyYsIGJvb2wgYWxsb3dFbnRpdGllcyA9IGZhbHNlKSBjb25zdDsKIApJbmRleDogcGxh
dGZvcm0vR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9HcmFwaGlj
c0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNDIxNikKKysrIHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAorI2luY2x1ZGUgIkRlcHJlY2F0ZWRT
dHJpbmcuaCIKICNpbmNsdWRlICJGb250LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0x
OTIsMjEgKzE5MywxNiBAQAogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHJlbW92
aW5nIHRoaXMgZnVuY3Rpb24gYW5kIGhhdmluZyBjYWxsZXJzIGp1c3QgY2FsbCB0aGUgbG93ZXIt
bGV2ZWwgZHJhd1RleHQgZGlyZWN0bHkuCi0vLyBGSVhNRTogVGhlIGludCBwYXJhbWV0ZXIgc2hv
dWxkIGNoYW5nZSB0byBhIEhvcml6b250YWxBbGlnbm1lbnQgcGFyYW1ldGVyLgotLy8gRklYTUU6
IEhvcml6b250YWxBbGlnbm1lbnQgc2hvdWxkIGJlIG1vdmVkIGludG8gYSBzZXBhcmF0ZSBoZWFk
ZXIgc28gaXQncyBub3QgaW4gV2lkZ2V0LmguCiAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVy
IGNoYW5naW5nIHRoaXMgZnVuY3Rpb24gdG8gdGFrZSBhIGNoYXJhY3RlciBwb2ludGVyIGFuZCBs
ZW5ndGggaW5zdGVhZCBvZiBhIERlcHJlY2F0ZWRTdHJpbmcuCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RleHQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgaG9yaXpvbnRhbEFsaWdubWVu
dCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3RyKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdUZXh0KGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3Ry
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEludFBvaW50IHAgPSBwb2ludDsKLSAgICBpZiAoaG9yaXpvbnRhbEFsaWdubWVudCA9PSBBbGln
blJpZ2h0KQotICAgICAgICBwLnNldFgocC54KCkgLSBmb250KCkud2lkdGgoc3RyLnVuaWNvZGUo
KSwgc3RyLmxlbmd0aCgpLCAwLCAwKSk7Ci0gICAgZHJhd1RleHQocCwgMCwgMCwgc3RyLnVuaWNv
ZGUoKSwgc3RyLmxlbmd0aCgpLCAwLCBzdHIubGVuZ3RoKCksIDApOworICAgIGRyYXdUZXh0KHBv
aW50LCAwLCAwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLnVuaWNvZGUoKSks
IHN0ci5sZW5ndGgoKSwgMCwgc3RyLmxlbmd0aCgpLCAwKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUZXh0KGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IHRhYldpZHRoLCBpbnQg
eHBvcywgY29uc3QgUUNoYXIgKnN0ciwgaW50IHNsZW4sIGludCBwb3MsIGludCBsZW4sIGludCB0
b0FkZCwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBJbnRQb2ludCYgcG9p
bnQsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGNvbnN0IFVDaGFyKiBzdHIsIGludCBzbGVuLCBp
bnQgcG9zLCBpbnQgbGVuLCBpbnQgdG9BZGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGV4dERpcmVjdGlvbiBkLCBib29sIHZpc3VhbGx5T3JkZXJlZCwgaW50IGZyb20sIGludCB0
bykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMjE5LDcgKzIxNSw3IEBACiAg
ICAgZm9udCgpLmRyYXdUZXh0KHRoaXMsIHBvaW50LCB0YWJXaWR0aCwgeHBvcywgc3RyICsgcG9z
LCBsZW5ndGgsIGZyb20sIHRvLCB0b0FkZCwgZCwgdmlzdWFsbHlPcmRlcmVkKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdIaWdobGlnaHRGb3JUZXh0KGNvbnN0IEludFBvaW50JiBw
b2ludCwgaW50IGgsIGludCB0YWJXaWR0aCwgaW50IHhwb3MsIGNvbnN0IFFDaGFyICpzdHIsIGlu
dCBzbGVuLCBpbnQgcG9zLCBpbnQgbGVuLCBpbnQgdG9BZGQsCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0hpZ2hsaWdodEZvclRleHQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgaCwgaW50
IHRhYldpZHRoLCBpbnQgeHBvcywgY29uc3QgVUNoYXIqIHN0ciwgaW50IHNsZW4sIGludCBwb3Ms
IGludCBsZW4sIGludCB0b0FkZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUZXh0RGlyZWN0aW9uIGQsIGJvb2wgdmlzdWFsbHlPcmRlcmVkLCBpbnQgZnJvbSwg
aW50IHRvLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCkluZGV4OiBwbGF0Zm9ybS9BdG9taWNTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBwbGF0Zm9ybS9BdG9taWNTdHJpbmcuaAkocmV2aXNpb24gMTQyMTYpCisrKyBwbGF0Zm9ybS9B
dG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzYgKzMzLDMyIEBACiAgICAgc3Rh
dGljIHZvaWQgaW5pdCgpOwogICAgIAogICAgIEF0b21pY1N0cmluZygpIHsgfQotICAgIEF0b21p
Y1N0cmluZyhRQ2hhciBjKSA6IG1fc3RyaW5nKGFkZCgmYywgMSkpIHsgfQogICAgIEF0b21pY1N0
cmluZyhjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFkZChzKSkgeyB9Ci0gICAgQXRvbWljU3Ry
aW5nKGNvbnN0IFFDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1fc3RyaW5nKGFkZChzLCBsZW5ndGgp
KSB7IH0KLSAgICBBdG9taWNTdHJpbmcoY29uc3QgdW5zaWduZWQgc2hvcnQqIHMsIGludCBsZW5n
dGgpIDogbV9zdHJpbmcoYWRkKChRQ2hhciopcywgbGVuZ3RoKSkgeyB9Ci0gICAgQXRvbWljU3Ry
aW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHMpIDogbV9zdHJpbmcoYWRkKHMudW5pY29kZSgp
LCBzLmxlbmd0aCgpKSkgeyB9CisgICAgQXRvbWljU3RyaW5nKGNvbnN0IFVDaGFyKiBzLCBpbnQg
bGVuZ3RoKSA6IG1fc3RyaW5nKGFkZChzLCBsZW5ndGgpKSB7IH0KICAgICBBdG9taWNTdHJpbmco
Y29uc3QgS0pTOjpVU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFkZChzKSkgeyB9CiAgICAgQXRvbWlj
U3RyaW5nKGNvbnN0IEtKUzo6SWRlbnRpZmllciYgcykgOiBtX3N0cmluZyhhZGQocykpIHsgfQog
ICAgIEF0b21pY1N0cmluZyhTdHJpbmdJbXBsKiBpbXApIDogbV9zdHJpbmcoYWRkKGltcCkpIHsg
fQogICAgIEF0b21pY1N0cmluZyhBdG9taWNTdHJpbmdJbXBsKiBpbXApIDogbV9zdHJpbmcoaW1w
KSB7IH0KICAgICBBdG9taWNTdHJpbmcoY29uc3QgU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFkZChz
LmltcGwoKSkpIHsgfQotICAgIAorCiAgICAgb3BlcmF0b3IgY29uc3QgU3RyaW5nJigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAgICAgY29uc3QgU3RyaW5nJiBkb21TdHJpbmcoKSBjb25z
dCB7IHJldHVybiBtX3N0cmluZzsgfTsKLSAgICBEZXByZWNhdGVkU3RyaW5nIGRlcHJlY2F0ZWRT
dHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5kZXByZWNhdGVkU3RyaW5nKCk7IH07Ci0g
ICAgCisKICAgICBvcGVyYXRvciBLSlM6OklkZW50aWZpZXIoKSBjb25zdDsKICAgICBvcGVyYXRv
ciBLSlM6OlVTdHJpbmcoKSBjb25zdDsKIAogICAgIEF0b21pY1N0cmluZ0ltcGwqIGltcGwoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxBdG9taWNTdHJpbmdJbXBsICo+KG1fc3RyaW5nLmlt
cGwoKSk7IH0KICAgICAKLSAgICBjb25zdCBRQ2hhciogdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nLnVuaWNvZGUoKTsgfQorICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVycygpOyB9CiAgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcubGVuZ3RoKCk7IH0KICAgICAKLSAgICBjb25zdCBR
Q2hhciYgb3BlcmF0b3IgW10odW5zaWduZWQgaW50IGkpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
W2ldOyB9CisgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpbnQgaSkgY29uc3QgeyByZXR1
cm4gbV9zdHJpbmdbaV07IH0KICAgICAKLSAgICBib29sIGNvbnRhaW5zKFFDaGFyIGMpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLmNvbnRhaW5zKGMpOyB9CisgICAgYm9vbCBjb250YWlucyhVQ2hh
ciBjKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhjKTsgfQogICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgQXRvbWljU3RyaW5nJiBzLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBj
b25zdAogICAgICAgICB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhzLmRvbVN0cmluZygpLCBj
YXNlU2Vuc2l0aXZlKTsgfQogCi0gICAgaW50IGZpbmQoUUNoYXIgYywgaW50IHN0YXJ0ID0gMCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcuZmluZChjLCBzdGFydCk7IH0KKyAgICBpbnQgZmluZChV
Q2hhciBjLCBpbnQgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5maW5kKGMsIHN0
YXJ0KTsgfQogICAgIGludCBmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgcywgaW50IHN0YXJ0ID0g
MCwgYm9vbCBjYXNlU2VudGl0aXZlID0gdHJ1ZSkgY29uc3QKICAgICAgICAgeyByZXR1cm4gbV9z
dHJpbmcuZmluZChzLmRvbVN0cmluZygpLCBzdGFydCwgY2FzZVNlbnRpdGl2ZSk7IH0KICAgICAK
QEAgLTg2LDExICs4MiwxNCBAQAogICAgIG9wZXJhdG9yIE5TU3RyaW5nKigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyaW5nOyB9CiAjZW5kaWYKIAorICAgIEF0b21pY1N0cmluZyhjb25zdCBEZXByZWNh
dGVkU3RyaW5nJik7CisgICAgRGVwcmVjYXRlZFN0cmluZyBkZXByZWNhdGVkU3RyaW5nKCkgY29u
c3Q7CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc3RyaW5nOwogICAgIAogICAgIHN0YXRpYyBT
dHJpbmdJbXBsKiBhZGQoY29uc3QgY2hhciopOwotICAgIHN0YXRpYyBTdHJpbmdJbXBsKiBhZGQo
Y29uc3QgUUNoYXIqLCBpbnQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgU3RyaW5nSW1wbCogYWRkKGNv
bnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CiAgICAgc3RhdGljIFN0cmluZ0ltcGwqIGFkZChTdHJp
bmdJbXBsKik7CiAgICAgc3RhdGljIFN0cmluZ0ltcGwqIGFkZChjb25zdCBLSlM6OlVTdHJpbmcm
KTsKICAgICBzdGF0aWMgU3RyaW5nSW1wbCogYWRkKGNvbnN0IEtKUzo6SWRlbnRpZmllciYpOwpA
QCAtMTE1LDcgKzExNCw3IEBACiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBT
dHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nh
c2UoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQogCiAvLyBEZWZpbmUgZXh0ZXJuYWwgZ2xvYmFsIHZh
cmlhYmxlcyBmb3IgdGhlIGNvbW1vbmx5IHVzZWQgYXRvbWljIHN0cmluZ3MuCi0jaWYgIUtIVE1M
X0FUT01JQ1NUUklOR19ISURFX0dMT0JBTFMKKyNpZiAhQVRPTUlDU1RSSU5HX0hJREVfR0xPQkFM
UwogICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbnVsbEF0b207CiAgICAgZXh0ZXJuIGNv
bnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207CiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmlu
ZyB0ZXh0QXRvbTsKSW5kZXg6IHBsYXRmb3JtL1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHBsYXRmb3JtL1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAxNDIxNikKKysrIHBsYXRmb3JtL1N0
cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyNCArMjgsMzAgQEAKICNpbmNsdWRl
ICJTdHJpbmdJbXBsLmgiCiAKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJE
ZXByZWNhdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU3RyaW5n
SGFzaC5oIgogI2luY2x1ZGUgPGtqcy9pZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8a3htbGNvcmUv
QXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHVuaWNvZGUvdWJyay5oPgorI2luY2x1ZGUgPHVuaWNv
ZGUvdXN0cmluZy5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogCi11c2luZyBuYW1lc3BhY2UgS0pT
OwogdXNpbmcgbmFtZXNwYWNlIEtYTUxDb3JlOwogCit1c2luZyBLSlM6OklkZW50aWZpZXI7Cit1
c2luZyBLSlM6OlVTdHJpbmc7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGlu
ZSBRQ2hhciogbmV3UUNoYXJWZWN0b3IodW5zaWduZWQgbikKK2NvbnN0IFVDaGFyIG5vbkJyZWFr
aW5nU3BhY2UgPSAweEEwOworCitzdGF0aWMgaW5saW5lIFVDaGFyKiBuZXdVQ2hhclZlY3Rvcih1
bnNpZ25lZCBuKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxRQ2hhcio+KGZhc3RNYWxsb2Mo
c2l6ZW9mKFFDaGFyKSAqIG4pKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0
TWFsbG9jKHNpemVvZihVQ2hhcikgKiBuKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWxl
dGVRQ2hhclZlY3RvcihRQ2hhciogcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxldGVVQ2hhclZl
Y3RvcihVQ2hhciogcCkKIHsKICAgICBmYXN0RnJlZShwKTsKIH0KQEAgLTU5LDI1ICs2NSwyNSBA
QAogCiBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0cikK
IHsKLSAgICBpbml0V2l0aFFDaGFyKHN0ci51bmljb2RlKCksIHN0ci5sZW5ndGgoKSk7CisgICAg
aW5pdChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLnVuaWNvZGUoKSksIHN0ci5s
ZW5ndGgoKSk7CiB9CiAKLVN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgUUNoYXIqIHN0ciwg
dW5zaWduZWQgbGVuKQorU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBVQ2hhciogc3RyLCB1
bnNpZ25lZCBsZW4pCiB7Ci0gICAgaW5pdFdpdGhRQ2hhcihzdHIsIGxlbik7CisgICAgaW5pdChz
dHIsIGxlbik7CiB9CiAKIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgY2hhciogc3RyKQog
ewotICAgIGluaXRXaXRoQ2hhcihzdHIsIHN0cmxlbihzdHIpKTsKKyAgICBpbml0KHN0ciwgc3Ry
bGVuKHN0cikpOwogfQogCiBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IGNoYXIqIHN0ciwg
dW5zaWduZWQgbGVuKQogewotICAgIGluaXRXaXRoQ2hhcihzdHIsIGxlbik7CisgICAgaW5pdChz
dHIsIGxlbik7CiB9CiAKLXZvaWQgU3RyaW5nSW1wbDo6aW5pdFdpdGhDaGFyKGNvbnN0IGNoYXIq
IHN0ciwgdW5zaWduZWQgbGVuKQordm9pZCBTdHJpbmdJbXBsOjppbml0KGNvbnN0IGNoYXIqIHN0
ciwgdW5zaWduZWQgbGVuKQogewogICAgIG1faGFzaCA9IDA7CiAgICAgbV9pblRhYmxlID0gZmFs
c2U7CkBAIC04NywxNCArOTMsMTQgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBtX2RhdGEgPSBuZXdRQ2hhclZlY3RvcihtX2xlbmd0aCk7CisgICAgbV9kYXRhID0gbmV3VUNo
YXJWZWN0b3IobV9sZW5ndGgpOwogICAgIGludCBpID0gbV9sZW5ndGg7Ci0gICAgUUNoYXIqIHB0
ciA9IG1fZGF0YTsKKyAgICBVQ2hhciogcHRyID0gbV9kYXRhOwogICAgIHdoaWxlIChpLS0pCiAg
ICAgICAgICpwdHIrKyA9ICpzdHIrKzsKIH0KIAotdm9pZCBTdHJpbmdJbXBsOjppbml0V2l0aFFD
aGFyKGNvbnN0IFFDaGFyKiBzdHIsIHVuc2lnbmVkIGxlbikKK3ZvaWQgU3RyaW5nSW1wbDo6aW5p
dChjb25zdCBVQ2hhciogc3RyLCB1bnNpZ25lZCBsZW4pCiB7CiAgICAgbV9oYXNoID0gMDsKICAg
ICBtX2luVGFibGUgPSBmYWxzZTsKQEAgLTEwNCwxNSArMTEwLDE1IEBACiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCi0gICAgbV9kYXRhID0gbmV3UUNoYXJWZWN0b3IobGVuKTsKLSAgICBt
ZW1jcHkobV9kYXRhLCBzdHIsIGxlbiAqIHNpemVvZihRQ2hhcikpOworICAgIG1fZGF0YSA9IG5l
d1VDaGFyVmVjdG9yKGxlbik7CisgICAgbWVtY3B5KG1fZGF0YSwgc3RyLCBsZW4gKiBzaXplb2Yo
VUNoYXIpKTsKIH0KIAogU3RyaW5nSW1wbDo6flN0cmluZ0ltcGwoKQogewogICAgIGlmIChtX2lu
VGFibGUpCiAgICAgICAgIEF0b21pY1N0cmluZzo6cmVtb3ZlKHRoaXMpOwotICAgIGRlbGV0ZVFD
aGFyVmVjdG9yKG1fZGF0YSk7CisgICAgZGVsZXRlVUNoYXJWZWN0b3IobV9kYXRhKTsKIH0KIAog
dm9pZCBTdHJpbmdJbXBsOjphcHBlbmQoY29uc3QgU3RyaW5nSW1wbCogc3RyKQpAQCAtMTIxLDEw
ICsxMjcsMTAgQEAKICAgICBpZihzdHIgJiYgc3RyLT5tX2xlbmd0aCAhPSAwKQogICAgIHsKICAg
ICAgICAgaW50IG5ld2xlbiA9IG1fbGVuZ3RoK3N0ci0+bV9sZW5ndGg7Ci0gICAgICAgIFFDaGFy
KiBjID0gbmV3UUNoYXJWZWN0b3IobmV3bGVuKTsKLSAgICAgICAgbWVtY3B5KGMsIG1fZGF0YSwg
bV9sZW5ndGgqc2l6ZW9mKFFDaGFyKSk7Ci0gICAgICAgIG1lbWNweShjK21fbGVuZ3RoLCBzdHIt
Pm1fZGF0YSwgc3RyLT5tX2xlbmd0aCpzaXplb2YoUUNoYXIpKTsKLSAgICAgICAgZGVsZXRlUUNo
YXJWZWN0b3IobV9kYXRhKTsKKyAgICAgICAgVUNoYXIqIGMgPSBuZXdVQ2hhclZlY3RvcihuZXds
ZW4pOworICAgICAgICBtZW1jcHkoYywgbV9kYXRhLCBtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikp
OworICAgICAgICBtZW1jcHkoYyArIG1fbGVuZ3RoLCBzdHItPm1fZGF0YSwgc3RyLT5tX2xlbmd0
aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBkZWxldGVVQ2hhclZlY3RvcihtX2RhdGEpOwog
ICAgICAgICBtX2RhdGEgPSBjOwogICAgICAgICBtX2xlbmd0aCA9IG5ld2xlbjsKICAgICB9CkBA
IC0xMzksMTEgKzE0NSwxMSBAQAogICAgIH0KICAgICBpZiAoc3RyICYmIHN0ci0+bV9sZW5ndGgg
IT0gMCkgewogICAgICAgICBpbnQgbmV3bGVuID0gbV9sZW5ndGggKyBzdHItPm1fbGVuZ3RoOwot
ICAgICAgICBRQ2hhciogYyA9IG5ld1FDaGFyVmVjdG9yKG5ld2xlbik7Ci0gICAgICAgIG1lbWNw
eShjLCBtX2RhdGEsIHBvcypzaXplb2YoUUNoYXIpKTsKLSAgICAgICAgbWVtY3B5KGMrcG9zLCBz
dHItPm1fZGF0YSwgc3RyLT5tX2xlbmd0aCpzaXplb2YoUUNoYXIpKTsKLSAgICAgICAgbWVtY3B5
KGMrcG9zK3N0ci0+bV9sZW5ndGgsIG1fZGF0YStwb3MsIChtX2xlbmd0aC1wb3MpKnNpemVvZihR
Q2hhcikpOwotICAgICAgICBkZWxldGVRQ2hhclZlY3RvcihtX2RhdGEpOworICAgICAgICBVQ2hh
ciogYyA9IG5ld1VDaGFyVmVjdG9yKG5ld2xlbik7CisgICAgICAgIG1lbWNweShjLCBtX2RhdGEs
IHBvcyAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBtZW1jcHkoYyArIHBvcywgc3RyLT5tX2Rh
dGEsIHN0ci0+bV9sZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgbWVtY3B5KGMgKyBw
b3MgKyBzdHItPm1fbGVuZ3RoLCBtX2RhdGEgKyBwb3MsIChtX2xlbmd0aCAtIHBvcykgKiBzaXpl
b2YoVUNoYXIpKTsKKyAgICAgICAgZGVsZXRlVUNoYXJWZWN0b3IobV9kYXRhKTsKICAgICAgICAg
bV9kYXRhID0gYzsKICAgICAgICAgbV9sZW5ndGggPSBuZXdsZW47CiAgICAgfQpAQCAtMTU1LDkg
KzE2MSw5IEBACiAgICAgaWYgKGxlbiA+PSAoaW50KW1fbGVuZ3RoKQogICAgICAgICByZXR1cm47
CiAgICAgaW50IG5sID0gbGVuIDwgMSA/IDEgOiBsZW47Ci0gICAgUUNoYXIqIGMgPSBuZXdRQ2hh
clZlY3RvcihubCk7Ci0gICAgbWVtY3B5KGMsIG1fZGF0YSwgbmwqc2l6ZW9mKFFDaGFyKSk7Ci0g
ICAgZGVsZXRlUUNoYXJWZWN0b3IobV9kYXRhKTsKKyAgICBVQ2hhciogYyA9IG5ld1VDaGFyVmVj
dG9yKG5sKTsKKyAgICBtZW1jcHkoYywgbV9kYXRhLCBubCAqIHNpemVvZihVQ2hhcikpOworICAg
IGRlbGV0ZVVDaGFyVmVjdG9yKG1fZGF0YSk7CiAgICAgbV9kYXRhID0gYzsKICAgICBtX2xlbmd0
aCA9IGxlbjsKIH0KQEAgLTE2NywxNiArMTczLDE2IEBACiAgICAgYXNzZXJ0KCFtX2luVGFibGUp
OwogICAgIGlmIChsZW4gPD0gMCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChwb3MgPj0gbV9s
ZW5ndGggKQorICAgIGlmIChwb3MgPj0gbV9sZW5ndGgpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoKHVuc2lnbmVkKWxlbiA+IG1fbGVuZ3RoIC0gcG9zKQogICAgICAgICBsZW4gPSBtX2xlbmd0
aCAtIHBvczsKIAogICAgIHVuc2lnbmVkIG5ld0xlbiA9IG1fbGVuZ3RoLWxlbjsKLSAgICBRQ2hh
ciogYyA9IG5ld1FDaGFyVmVjdG9yKG5ld0xlbik7Ci0gICAgbWVtY3B5KGMsIG1fZGF0YSwgcG9z
KnNpemVvZihRQ2hhcikpOwotICAgIG1lbWNweShjK3BvcywgbV9kYXRhK3BvcytsZW4sIChtX2xl
bmd0aC1sZW4tcG9zKSpzaXplb2YoUUNoYXIpKTsKLSAgICBkZWxldGVRQ2hhclZlY3RvcihtX2Rh
dGEpOworICAgIFVDaGFyKiBjID0gbmV3VUNoYXJWZWN0b3IobmV3TGVuKTsKKyAgICBtZW1jcHko
YywgbV9kYXRhLCBwb3MgKiBzaXplb2YoVUNoYXIpKTsKKyAgICBtZW1jcHkoYyArIHBvcywgbV9k
YXRhICsgcG9zICsgbGVuLCAobV9sZW5ndGggLSBsZW4gLSBwb3MpICogc2l6ZW9mKFVDaGFyKSk7
CisgICAgZGVsZXRlVUNoYXJWZWN0b3IobV9kYXRhKTsKICAgICBtX2RhdGEgPSBjOwogICAgIG1f
bGVuZ3RoID0gbmV3TGVuOwogfQpAQCAtMTg3LDggKzE5Myw4IEBACiAgICAgaWYoIHBvcyA+PW1f
bGVuZ3RoICkgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKCk7CiAKICAgICB1bnNpZ25lZCBuZXdMZW4g
PSBtX2xlbmd0aC1wb3M7Ci0gICAgUUNoYXIqIGMgPSBuZXdRQ2hhclZlY3RvcihuZXdMZW4pOwot
ICAgIG1lbWNweShjLCBtX2RhdGErcG9zLCBuZXdMZW4qc2l6ZW9mKFFDaGFyKSk7CisgICAgVUNo
YXIqIGMgPSBuZXdVQ2hhclZlY3RvcihuZXdMZW4pOworICAgIG1lbWNweShjLCBtX2RhdGEgKyBw
b3MsIG5ld0xlbiAqIHNpemVvZihVQ2hhcikpOwogCiAgICAgU3RyaW5nSW1wbCogc3RyID0gbmV3
IFN0cmluZ0ltcGwobV9kYXRhICsgcG9zLCBuZXdMZW4pOwogICAgIHRydW5jYXRlKHBvcyk7CkBA
IC0yMDQsMTYgKzIxMCwxMiBAQAogewogICAgIGlmICghbV9kYXRhKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBmcm9tOyBpIDwgbGVuOyBpKyspIHsK
LSAgICAgICAgUUNoYXIgYyA9IG1fZGF0YVtpXTsKLSAgICAgICAgaWYgKGMudW5pY29kZSgpIDw9
IDB4N0YpIHsKLSAgICAgICAgICAgIGlmICghaXNzcGFjZShjLnVuaWNvZGUoKSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IAotICAgICAgICBlbHNlCisgICAgLy8g
RklYTUU6IEJvdGggdGhlIGRlZmluaXRpb24gb2Ygd2hhdCB3aGl0ZXNwYWNlIGlzLCBhbmQgdGhl
IGRlZmluaXRpb24gb2Ygd2hhdAorICAgIC8vIHRoZSAibGVuIiBwYXJhbWV0ZXIgbWVhbnMgYXJl
IGRpZmZlcmVudCBoZXJlIGZyb20gd2hhdCdzIGRvbmUgaW4gUmVuZGVyVGV4dC4KKyAgICAvLyBG
SVhNRTogTm8gcmFuZ2UgY2hlY2tpbmcgaGVyZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBmcm9t
OyBpIDwgbGVuOyBpKyspCisgICAgICAgIGlmIChtX2RhdGFbaV0gPiAweDdGIHx8ICFpc3NwYWNl
KG1fZGF0YVtpXSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVy
biB0cnVlOwogfQogICAgIApAQCAtMjI2LDUxICsyMjgsNDUgQEAKICAgICByZXR1cm4gbmV3IFN0
cmluZ0ltcGwobV9kYXRhICsgcG9zLCBsZW4pOwogfQogCi1zdGF0aWMgTGVuZ3RoIHBhcnNlTGVu
Z3RoKGNvbnN0IFFDaGFyKiBtX2RhdGEsIHVuc2lnbmVkIGludCBtX2xlbmd0aCkKK3N0YXRpYyBM
ZW5ndGggcGFyc2VMZW5ndGgoY29uc3QgVUNoYXIqIG1fZGF0YSwgdW5zaWduZWQgaW50IG1fbGVu
Z3RoKQogewogICAgIGlmIChtX2xlbmd0aCA9PSAwKQogICAgICAgICByZXR1cm4gTGVuZ3RoKDEs
IFJlbGF0aXZlKTsKIAogICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIHdoaWxlIChpIDwgbV9sZW5n
dGggJiYgbV9kYXRhW2ldLmlzU3BhY2UoKSkKKyAgICB3aGlsZSAoaSA8IG1fbGVuZ3RoICYmIFFD
aGFyKG1fZGF0YVtpXSkuaXNTcGFjZSgpKQogICAgICAgICArK2k7CiAgICAgaWYgKGkgPCBtX2xl
bmd0aCAmJiAobV9kYXRhW2ldID09ICcrJyB8fCBtX2RhdGFbaV0gPT0gJy0nKSkKICAgICAgICAg
KytpOwotICAgIHdoaWxlIChpIDwgbV9sZW5ndGggJiYgbV9kYXRhW2ldLmlzRGlnaXQoKSkKKyAg
ICB3aGlsZSAoaSA8IG1fbGVuZ3RoICYmIHVfaXNkaWdpdChtX2RhdGFbaV0pKQogICAgICAgICAr
K2k7CiAKICAgICBib29sIG9rOwotICAgIGludCByID0gUUNvbnN0U3RyaW5nKG1fZGF0YSwgaSku
c3RyaW5nKCkudG9JbnQoJm9rKTsKKyAgICBpbnQgciA9IFFDb25zdFN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IFFDaGFyKj4obV9kYXRhKSwgaSkuc3RyaW5nKCkudG9JbnQoJm9rKTsKIAog
ICAgIC8qIFNraXAgb3ZlciBhbnkgcmVtYWluaW5nIGRpZ2l0cywgd2UgYXJlIG5vdCB0aGF0IGFj
Y3VyYXRlICg1LjUlID0+IDUlKSAqLwotICAgIHdoaWxlIChpIDwgbV9sZW5ndGggJiYgKG1fZGF0
YVtpXS5pc0RpZ2l0KCkgfHwgbV9kYXRhW2ldID09ICcuJykpCisgICAgd2hpbGUgKGkgPCBtX2xl
bmd0aCAmJiAodV9pc2RpZ2l0KG1fZGF0YVtpXSkgfHwgbV9kYXRhW2ldID09ICcuJykpCiAgICAg
ICAgICsraTsKIAogICAgIC8qIElFIFF1aXJrOiBTa2lwIGFueSB3aGl0ZXNwYWNlICgyMCAlID0+
IDIwJSkgKi8KLSAgICB3aGlsZSAoaSA8IG1fbGVuZ3RoICYmIG1fZGF0YVtpXS5pc1NwYWNlKCkp
CisgICAgd2hpbGUgKGkgPCBtX2xlbmd0aCAmJiBRQ2hhcihtX2RhdGFbaV0pLmlzU3BhY2UoKSkK
ICAgICAgICAgKytpOwogCiAgICAgaWYgKG9rKSB7Ci0gICAgICAgIGlmIChpID09IG1fbGVuZ3Ro
KQotICAgICAgICAgICAgcmV0dXJuIExlbmd0aChyLCBGaXhlZCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgY29uc3QgUUNoYXIqIG5leHQgPSBtX2RhdGEraTsKLQotICAgICAgICAgICAg
aWYgKCpuZXh0ID09ICclJykKKyAgICAgICAgaWYgKGkgPCBtX2xlbmd0aCkgeworICAgICAgICAg
ICAgVUNoYXIgbmV4dCA9IG1fZGF0YVtpXTsKKyAgICAgICAgICAgIGlmIChuZXh0ID09ICclJykK
ICAgICAgICAgICAgICAgICByZXR1cm4gTGVuZ3RoKHIsIFBlcmNlbnQpOwotCi0gICAgICAgICAg
ICBpZiAoKm5leHQgPT0gJyonKQorICAgICAgICAgICAgaWYgKG5leHQgPT0gJyonKQogICAgICAg
ICAgICAgICAgIHJldHVybiBMZW5ndGgociwgUmVsYXRpdmUpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBMZW5ndGgociwgRml4ZWQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChpIDwg
bV9sZW5ndGgpIHsKLSAgICAgICAgICAgIGNvbnN0IFFDaGFyKiBuZXh0ID0gbV9kYXRhICsgaTsK
LQotICAgICAgICAgICAgaWYgKCpuZXh0ID09ICcqJykKKyAgICAgICAgICAgIFVDaGFyIG5leHQg
PSBtX2RhdGFbaV07CisgICAgICAgICAgICBpZiAobmV4dCA9PSAnKicpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIExlbmd0aCgxLCBSZWxhdGl2ZSk7Ci0KLSAgICAgICAgICAgIGlmICgqbmV4dCA9
PSAnJScpCisgICAgICAgICAgICBpZiAobmV4dCA9PSAnJScpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIExlbmd0aCgxLCBSZWxhdGl2ZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yODQsMTcgKzI4
MCwxNiBAQAogCiBMZW5ndGgqIFN0cmluZ0ltcGw6OnRvQ29vcmRzQXJyYXkoaW50JiBsZW4pIGNv
bnN0CiB7Ci0gICAgUUNoYXIqIHNwYWNpZmllZCA9IG5ld1FDaGFyVmVjdG9yKG1fbGVuZ3RoKTsK
LSAgICBRQ2hhciBzcGFjZSgnICcpOwotICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaSA8IG1f
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgUUNoYXIgY2MgPSBtX2RhdGFbaV07Ci0gICAgICAgIGlm
IChjYy51bmljb2RlKCkgPiAnOScgfHwgKGNjLnVuaWNvZGUoKSA8ICcwJyAmJiBjYyAhPSAnLScg
JiYgY2MgIT0gJyonICYmIGNjICE9ICcuJykpCi0gICAgICAgICAgICBzcGFjaWZpZWRbaV0gPSBz
cGFjZTsKKyAgICBVQ2hhciogc3BhY2lmaWVkID0gbmV3VUNoYXJWZWN0b3IobV9sZW5ndGgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgaSsrKSB7CisgICAgICAgIFVD
aGFyIGNjID0gbV9kYXRhW2ldOworICAgICAgICBpZiAoY2MgPiAnOScgfHwgKGNjIDwgJzAnICYm
IGNjICE9ICctJyAmJiBjYyAhPSAnKicgJiYgY2MgIT0gJy4nKSkKKyAgICAgICAgICAgIHNwYWNp
ZmllZFtpXSA9ICcgJzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3BhY2lmaWVkW2ldID0g
Y2M7CiAgICAgfQotICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RyKHNwYWNpZmllZCwgbV9sZW5ndGgp
OwotICAgIGRlbGV0ZVFDaGFyVmVjdG9yKHNwYWNpZmllZCk7CisgICAgRGVwcmVjYXRlZFN0cmlu
ZyBzdHIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KHNwYWNpZmllZCksIG1fbGVuZ3Ro
KTsKKyAgICBkZWxldGVVQ2hhclZlY3RvcihzcGFjaWZpZWQpOwogCiAgICAgc3RyID0gc3RyLnNp
bXBsaWZ5V2hpdGVTcGFjZSgpOwogCkBAIC0zMDYsMTAgKzMwMSwxMCBAQAogICAgIGludCBwb3My
OwogCiAgICAgd2hpbGUoKHBvczIgPSBzdHIuZmluZCgnICcsIHBvcykpICE9IC0xKSB7Ci0gICAg
ICAgIHJbaSsrXSA9IHBhcnNlTGVuZ3RoKHN0ci51bmljb2RlKCkgKyBwb3MsIHBvczItcG9zKTsK
KyAgICAgICAgcltpKytdID0gcGFyc2VMZW5ndGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hh
cio+KHN0ci51bmljb2RlKCkpICsgcG9zLCBwb3MyIC0gcG9zKTsKICAgICAgICAgcG9zID0gcG9z
MisxOwogICAgIH0KLSAgICByW2ldID0gcGFyc2VMZW5ndGgoc3RyLnVuaWNvZGUoKSArIHBvcywg
c3RyLmxlbmd0aCgpLXBvcyk7CisgICAgcltpXSA9IHBhcnNlTGVuZ3RoKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVUNoYXIqPihzdHIudW5pY29kZSgpKSArIHBvcywgc3RyLmxlbmd0aCgpIC0gcG9z
KTsKIAogICAgIHJldHVybiByOwogfQpAQCAtMzIwLDcgKzMxNSw3IEBACiAgICAgICAgIGxlbiA9
IDE7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBEZXByZWNhdGVkU3RyaW5nIHN0ciht
X2RhdGEsIG1fbGVuZ3RoKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHN0cihyZWludGVycHJldF9j
YXN0PGNvbnN0IFFDaGFyKj4obV9kYXRhKSwgbV9sZW5ndGgpOwogICAgIHN0ciA9IHN0ci5zaW1w
bGlmeVdoaXRlU3BhY2UoKTsKIAogICAgIGxlbiA9IHN0ci5jb250YWlucygnLCcpICsgMTsKQEAg
LTMzMCwxNCArMzI1LDE0IEBACiAgICAgaW50IHBvcyA9IDA7CiAgICAgaW50IHBvczI7CiAKLSAg
ICB3aGlsZSgocG9zMiA9IHN0ci5maW5kKCcsJywgcG9zKSkgIT0gLTEpIHsKLSAgICAgICAgcltp
KytdID0gcGFyc2VMZW5ndGgoc3RyLnVuaWNvZGUoKSArIHBvcywgcG9zMiAtIHBvcyk7CisgICAg
d2hpbGUgKChwb3MyID0gc3RyLmZpbmQoJywnLCBwb3MpKSAhPSAtMSkgeworICAgICAgICByW2kr
K10gPSBwYXJzZUxlbmd0aChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLnVuaWNv
ZGUoKSkgKyBwb3MsIHBvczIgLSBwb3MpOwogICAgICAgICBwb3MgPSBwb3MyKzE7CiAgICAgfQog
CiAgICAgLyogSUUgUXVpcms6IElmIHRoZSBsYXN0IGNvbW1hIGlzIHRoZSBsYXN0IGNoYXIgc2tp
cCBpdCBhbmQgcmVkdWNlIGxlbiBieSBvbmUgKi8KICAgICBpZiAoc3RyLmxlbmd0aCgpLXBvcyA+
IDApCi0gICAgICAgIHJbaV0gPSBwYXJzZUxlbmd0aChzdHIudW5pY29kZSgpICsgcG9zLCBzdHIu
bGVuZ3RoKCkgLSBwb3MpOworICAgICAgICByW2ldID0gcGFyc2VMZW5ndGgocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVQ2hhcio+KHN0ci51bmljb2RlKCkpICsgcG9zLCBzdHIubGVuZ3RoKCkgLSBw
b3MpOwogICAgIGVsc2UKICAgICAgICAgbGVuLS07CiAKQEAgLTM0Niw5ICszNDEsOCBAQAogCiBi
b29sIFN0cmluZ0ltcGw6OmlzTG93ZXIoKSBjb25zdAogewotICAgIHVuc2lnbmVkIGludCBpOwot
ICAgIGZvciAoaSA9IDA7IGkgPCBtX2xlbmd0aDsgaSsrKQotICAgICAgICBpZiAobV9kYXRhW2ld
Lmxvd2VyKCkgIT0gbV9kYXRhW2ldKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xl
bmd0aDsgaSsrKQorICAgICAgICBpZiAoIXVfaXNsb3dlcihtX2RhdGFbaV0pKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzU4LDEzICszNTIsMTcg
QEAKICAgICBTdHJpbmdJbXBsKiBjID0gbmV3IFN0cmluZ0ltcGw7CiAgICAgaWYgKCFtX2xlbmd0
aCkKICAgICAgICAgcmV0dXJuIGM7Ci0KLSAgICBjLT5tX2RhdGEgPSBuZXdRQ2hhclZlY3Rvciht
X2xlbmd0aCk7Ci0gICAgYy0+bV9sZW5ndGggPSBtX2xlbmd0aDsKLQotICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbV9sZW5ndGg7IGkrKykKLSAgICAgICAgYy0+bV9kYXRhW2ldID0g
bV9kYXRhW2ldLmxvd2VyKCk7Ci0KKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJP
UjsKKyAgICBpbnQzMl90IGxlbmd0aCA9IHVfc3RyVG9Mb3dlcigwLCAwLCBtX2RhdGEsIG1fbGVu
Z3RoLCAiIiwgJnN0YXR1cyk7CisgICAgYy0+bV9kYXRhID0gbmV3VUNoYXJWZWN0b3IobGVuZ3Ro
KTsKKyAgICBjLT5tX2xlbmd0aCA9IGxlbmd0aDsKKyAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7
CisgICAgdV9zdHJUb0xvd2VyKGMtPm1fZGF0YSwgbGVuZ3RoLCBtX2RhdGEsIG1fbGVuZ3RoLCAi
IiwgJnN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7CisgICAgICAgIGMtPnJl
ZigpOworICAgICAgICBjLT5kZXJlZigpOworICAgICAgICByZXR1cm4gY29weSgpOworICAgIH0K
ICAgICByZXR1cm4gYzsKIH0KIApAQCAtMzczLDE3ICszNzEsNDAgQEAKICAgICBTdHJpbmdJbXBs
KiBjID0gbmV3IFN0cmluZ0ltcGw7CiAgICAgaWYgKCFtX2xlbmd0aCkKICAgICAgICAgcmV0dXJu
IGM7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaW50MzJfdCBs
ZW5ndGggPSB1X3N0clRvVXBwZXIoMCwgMCwgbV9kYXRhLCBtX2xlbmd0aCwgIiIsICZzdGF0dXMp
OworICAgIGMtPm1fZGF0YSA9IG5ld1VDaGFyVmVjdG9yKGxlbmd0aCk7CisgICAgYy0+bV9sZW5n
dGggPSBsZW5ndGg7CisgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIHVfc3RyVG9VcHBl
cihjLT5tX2RhdGEsIGxlbmd0aCwgbV9kYXRhLCBtX2xlbmd0aCwgIiIsICZzdGF0dXMpOworICAg
IGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkgeworICAgICAgICBjLT5yZWYoKTsKKyAgICAgICAgYy0+
ZGVyZWYoKTsKKyAgICAgICAgcmV0dXJuIGNvcHkoKTsKKyAgICB9CisgICAgcmV0dXJuIGM7Cit9
CiAKLSAgICBjLT5tX2RhdGEgPSBuZXdRQ2hhclZlY3RvcihtX2xlbmd0aCk7Ci0gICAgYy0+bV9s
ZW5ndGggPSBtX2xlbmd0aDsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9s
ZW5ndGg7IGkrKykKLSAgICAgICAgYy0+bV9kYXRhW2ldID0gbV9kYXRhW2ldLnVwcGVyKCk7Ci0K
K1N0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OmZvbGRDYXNlKCkgY29uc3QKK3sKKyAgICBTdHJpbmdJ
bXBsKiBjID0gbmV3IFN0cmluZ0ltcGw7CisgICAgaWYgKCFtX2xlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGM7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaW50MzJf
dCBsZW5ndGggPSB1X3N0ckZvbGRDYXNlKDAsIDAsIG1fZGF0YSwgbV9sZW5ndGgsIFVfRk9MRF9D
QVNFX0RFRkFVTFQsICZzdGF0dXMpOworICAgIGMtPm1fZGF0YSA9IG5ld1VDaGFyVmVjdG9yKGxl
bmd0aCk7CisgICAgYy0+bV9sZW5ndGggPSBsZW5ndGg7CisgICAgc3RhdHVzID0gVV9aRVJPX0VS
Uk9SOworICAgIHVfc3RyRm9sZENhc2UoYy0+bV9kYXRhLCBsZW5ndGgsIG1fZGF0YSwgbV9sZW5n
dGgsIFVfRk9MRF9DQVNFX0RFRkFVTFQsICZzdGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3Rh
dHVzKSkgeworICAgICAgICBjLT5yZWYoKTsKKyAgICAgICAgYy0+ZGVyZWYoKTsKKyAgICAgICAg
cmV0dXJuIGNvcHkoKTsKKyAgICB9CiAgICAgcmV0dXJuIGM7CiB9CiAKLXN0YXRpYyBVQnJlYWtJ
dGVyYXRvciogZ2V0V29yZEJyZWFrSXRlcmF0b3IoY29uc3QgUUNoYXIqIHN0cmluZywgaW50IGxl
bmd0aCkKK3N0YXRpYyBVQnJlYWtJdGVyYXRvciogZ2V0V29yZEJyZWFrSXRlcmF0b3IoY29uc3Qg
VUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKIHsKICAgICAvLyBUaGUgbG9jYWxlIGlzIGN1cnJl
bnRseSBpZ25vcmVkIHdoZW4gZGV0ZXJtaW5pbmcgY2hhcmFjdGVyIGNsdXN0ZXIgYnJlYWtzLgog
ICAgIC8vIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLCBhY2NvcmRpbmcgdG8gRGVib3Jh
aCBHb2xkc21pdGguCkBAIC00MDAsMjEgKzQyMSwyMCBAQAogCiAgICAgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOwogICAgIHVicmtfc2V0VGV4dChpdGVyYXRvciwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCA6OlVDaGFyKj4oc3RyaW5nKSwgbGVuZ3RoLCAmc3RhdHVzKTsKLSAgICBpZiAoc3RhdHVzICE9
IFVfWkVST19FUlJPUikKKyAgICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgcmV0dXJuIGl0ZXJhdG9yOwogfQogCi1TdHJpbmdJbXBsKiBTdHJpbmdJbXBs
OjpjYXBpdGFsaXplKFFDaGFyIHByZXZpb3VzKSBjb25zdAorU3RyaW5nSW1wbCogU3RyaW5nSW1w
bDo6Y2FwaXRhbGl6ZShVQ2hhciBwcmV2aW91cykgY29uc3QKIHsKICAgICBTdHJpbmdJbXBsKiBj
YXBpdGFsaXplZFN0cmluZyA9IG5ldyBTdHJpbmdJbXBsOwogICAgIGlmICghbV9sZW5ndGgpCiAg
ICAgICAgIHJldHVybiBjYXBpdGFsaXplZFN0cmluZzsKICAgICAKLSAgICBRQ2hhciogc3RyaW5n
V2l0aFByZXZpb3VzID0gbmV3UUNoYXJWZWN0b3IobV9sZW5ndGggKyAxKTsKKyAgICBVQ2hhciog
c3RyaW5nV2l0aFByZXZpb3VzID0gbmV3VUNoYXJWZWN0b3IobV9sZW5ndGggKyAxKTsKICAgICBz
dHJpbmdXaXRoUHJldmlvdXNbMF0gPSBwcmV2aW91czsKLSAgICBjb25zdCBjaGFyIG5vbkJyZWFr
aW5nU3BhY2UgPSAnXHhhMCc7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fbGVuZ3Ro
ICsgMTsgaSsrKSB7CiAgICAgICAgIC8vIFJlcGxhY2UgJm5ic3Agd2l0aCBhIHJlYWwgc3BhY2Ug
c2luY2UgSUNVIG5vIGxvbmdlciB0cmVhdHMgJm5ic3AgYXMgYSB3b3JkIHNlcGFyYXRvci4KICAg
ICAgICAgaWYgKG1fZGF0YVtpIC0gMV0gPT0gbm9uQnJlYWtpbmdTcGFjZSkKQEAgLTQyMiwyNiAr
NDQyLDI2IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0cmluZ1dpdGhQcmV2aW91c1tp
XSA9IG1fZGF0YVtpIC0gMV07CiAgICAgfQotICAgIAorCiAgICAgVUJyZWFrSXRlcmF0b3IqIGJv
dW5kYXJ5ID0gZ2V0V29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nV2l0aFByZXZpb3VzLCBtX2xlbmd0
aCArIDEpOwogICAgIGlmICghYm91bmRhcnkpIHsKLSAgICAgICAgZGVsZXRlUUNoYXJWZWN0b3Io
c3RyaW5nV2l0aFByZXZpb3VzKTsKKyAgICAgICAgZGVsZXRlVUNoYXJWZWN0b3Ioc3RyaW5nV2l0
aFByZXZpb3VzKTsKICAgICAgICAgcmV0dXJuIGNhcGl0YWxpemVkU3RyaW5nOwogICAgIH0KICAg
ICAKLSAgICBjYXBpdGFsaXplZFN0cmluZy0+bV9kYXRhID0gbmV3UUNoYXJWZWN0b3IobV9sZW5n
dGgpOworICAgIGNhcGl0YWxpemVkU3RyaW5nLT5tX2RhdGEgPSBuZXdVQ2hhclZlY3RvcihtX2xl
bmd0aCk7CiAgICAgY2FwaXRhbGl6ZWRTdHJpbmctPm1fbGVuZ3RoID0gbV9sZW5ndGg7CiAgICAg
CiAgICAgaW50MzJfdCBlbmRPZldvcmQ7CiAgICAgaW50MzJfdCBzdGFydE9mV29yZCA9IHVicmtf
Zmlyc3QoYm91bmRhcnkpOwogICAgIGZvciAoZW5kT2ZXb3JkID0gdWJya19uZXh0KGJvdW5kYXJ5
KTsgZW5kT2ZXb3JkICE9IFVCUktfRE9ORTsgc3RhcnRPZldvcmQgPSBlbmRPZldvcmQsIGVuZE9m
V29yZCA9IHVicmtfbmV4dChib3VuZGFyeSkpIHsKICAgICAgICAgaWYgKHN0YXJ0T2ZXb3JkICE9
IDApIC8vIElnbm9yZSBmaXJzdCBjaGFyIG9mIHByZXZpb3VzIHN0cmluZwotICAgICAgICAgICAg
Y2FwaXRhbGl6ZWRTdHJpbmctPm1fZGF0YVtzdGFydE9mV29yZCAtIDFdID0gc3RyaW5nV2l0aFBy
ZXZpb3VzW3N0YXJ0T2ZXb3JkXS51cHBlcigpOworICAgICAgICAgICAgY2FwaXRhbGl6ZWRTdHJp
bmctPm1fZGF0YVtzdGFydE9mV29yZCAtIDFdID0gdV90b3RpdGxlKHN0cmluZ1dpdGhQcmV2aW91
c1tzdGFydE9mV29yZF0pOwogICAgICAgICBmb3IgKGludCBpID0gc3RhcnRPZldvcmQgKyAxOyBp
IDwgZW5kT2ZXb3JkOyBpKyspCiAgICAgICAgICAgICBjYXBpdGFsaXplZFN0cmluZy0+bV9kYXRh
W2kgLSAxXSA9IHN0cmluZ1dpdGhQcmV2aW91c1tpXTsKICAgICB9CiAgICAgCi0gICAgZGVsZXRl
UUNoYXJWZWN0b3Ioc3RyaW5nV2l0aFByZXZpb3VzKTsKKyAgICBkZWxldGVVQ2hhclZlY3Rvcihz
dHJpbmdXaXRoUHJldmlvdXMpOwogICAgIHJldHVybiBjYXBpdGFsaXplZFN0cmluZzsKIH0KIApA
QCAtNDUwLDU1ICs0NzAsNDggQEAKICAgICB1bnNpZ25lZCBpID0gMDsKIAogICAgIC8vIEFsbG93
IGxlYWRpbmcgc3BhY2VzLgotICAgIGZvciAoOyBpICE9IG1fbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgaWYgKCFtX2RhdGFbaV0uaXNTcGFjZSgpKQorICAgIGZvciAoOyBpICE9IG1fbGVuZ3RoOyAr
K2kpCisgICAgICAgIGlmICghUUNoYXIobV9kYXRhW2ldKS5pc1NwYWNlKCkpCiAgICAgICAgICAg
ICBicmVhazsKLSAgICB9CiAgICAgCiAgICAgLy8gQWxsb3cgc2lnbi4KICAgICBpZiAoaSAhPSBt
X2xlbmd0aCAmJiAobV9kYXRhW2ldID09ICcrJyB8fCBtX2RhdGFbaV0gPT0gJy0nKSkKICAgICAg
ICAgKytpOwogICAgIAogICAgIC8vIEFsbG93IGRpZ2l0cy4KLSAgICBmb3IgKDsgaSAhPSBtX2xl
bmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghbV9kYXRhW2ldLmlzRGlnaXQoKSkKKyAgICBmb3Ig
KDsgaSAhPSBtX2xlbmd0aDsgKytpKQorICAgICAgICBpZiAoIXVfaXNkaWdpdChtX2RhdGFbaV0p
KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIAotICAgIHJldHVybiBRQ29uc3RTdHJp
bmcobV9kYXRhLCBpKS5zdHJpbmcoKS50b0ludChvayk7CisgICAgcmV0dXJuIFFDb25zdFN0cmlu
ZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4obV9kYXRhKSwgaSkuc3RyaW5nKCkudG9J
bnQob2spOwogfQogCi1zdGF0aWMgYm9vbCBlcXVhbChjb25zdCBRQ2hhciogYSwgY29uc3QgY2hh
ciogYiwgaW50IG1fbGVuZ3RoKQorc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVUNoYXIqIGEsIGNv
bnN0IGNoYXIqIGIsIGludCBsZW5ndGgpCiB7Ci0gICAgQVNTRVJUKG1fbGVuZ3RoID49IDApOwot
ICAgIHdoaWxlIChtX2xlbmd0aC0tKSB7Ci0gICAgICAgIGlmICgqYSAhPSAqYikKKyAgICBBU1NF
UlQobGVuZ3RoID49IDApOworICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgICB1bnNpZ25l
ZCBjaGFyIGJjID0gKmIrKzsKKyAgICAgICAgaWYgKCphKysgIT0gYmMpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGErKzsgYisrOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotc3RhdGljIGJvb2wgZXF1YWxDYXNlSW5zZW5zaXRpdmUoY29uc3QgUUNoYXIqIGEsIGNv
bnN0IGNoYXIqIGIsIGludCBtX2xlbmd0aCkKK3N0YXRpYyBib29sIGVxdWFsSWdub3JpbmdDYXNl
KGNvbnN0IFVDaGFyKiBhLCBjb25zdCBjaGFyKiBiLCBpbnQgbGVuZ3RoKQogewotICAgIEFTU0VS
VChtX2xlbmd0aCA+PSAwKTsKLSAgICB3aGlsZSAobV9sZW5ndGgtLSkgewotICAgICAgICBpZiAo
dG9sb3dlcihhLT51bmljb2RlKCkpICE9IHRvbG93ZXIoKmIpKQorICAgIEFTU0VSVChsZW5ndGgg
Pj0gMCk7CisgICAgd2hpbGUgKGxlbmd0aC0tKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYmMg
PSAqYisrOworICAgICAgICBpZiAodV9mb2xkQ2FzZSgqYSsrLCBVX0ZPTERfQ0FTRV9ERUZBVUxU
KSAhPSB1X2ZvbGRDYXNlKGJjLCBVX0ZPTERfQ0FTRV9ERUZBVUxUKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgYSsrOyBiKys7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwog
fQogCi1zdGF0aWMgYm9vbCBlcXVhbENhc2VJbnNlbnNpdGl2ZShjb25zdCBRQ2hhciogYSwgY29u
c3QgUUNoYXIqIGIsIGludCBtX2xlbmd0aCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbElnbm9y
aW5nQ2FzZShjb25zdCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIGludCBsZW5ndGgpCiB7Ci0g
ICAgQVNTRVJUKG1fbGVuZ3RoID49IDApOwotICAgIHdoaWxlIChtX2xlbmd0aC0tKSB7Ci0gICAg
ICAgIGlmICh0b2xvd2VyKGEtPnVuaWNvZGUoKSkgIT0gdG9sb3dlcihiLT51bmljb2RlKCkpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhKys7IGIrKzsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKKyAgICByZXR1cm4gdV9tZW1j
YXNlY21wKGEsIGIsIGxlbmd0aCwgVV9GT0xEX0NBU0VfREVGQVVMVCkgPT0gMDsKIH0KIAogLy8g
VGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgYXMgZmFzdCBhcyBwb3NzaWJsZSwgZXZlcnkgbGl0dGxl
IGJpdCBoZWxwcy4KQEAgLTUyMywxNyArNTM2LDE4IEBACiAgICAgY29uc3QgY2hhciogY2hzUGx1
c09uZSA9IGNocyArIDE7CiAgICAgaW50IGNoc0xlbmd0aE1pbnVzT25lID0gY2hzTGVuZ3RoIC0g
MTsKICAgICAKLSAgICBjb25zdCBRQ2hhciogcHRyID0gbV9kYXRhICsgaW5kZXggLSAxOworICAg
IGNvbnN0IFVDaGFyKiBwdHIgPSBtX2RhdGEgKyBpbmRleCAtIDE7CiAgICAgaWYgKGNhc2VTZW5z
aXRpdmUpIHsKLSAgICAgICAgUUNoYXIgYyA9ICpjaHM7CisgICAgICAgIFVDaGFyIGMgPSAqY2hz
OwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpZiAoKisrcHRyID09IGMgJiYgZXF1YWwocHRy
ICsgMSwgY2hzUGx1c09uZSwgY2hzTGVuZ3RoTWludXNPbmUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBtX2xlbmd0aCAtIGNoc0xlbmd0aCAtIG4gKyAxOwogICAgICAgICB9IHdoaWxlICgtLW4p
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBsYyA9IHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIp
KmNocyk7CisgICAgICAgIFVDaGFyIGxjID0gdV9mb2xkQ2FzZSgqY2hzLCBVX0ZPTERfQ0FTRV9E
RUZBVUxUKTsKICAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKHRvbG93ZXIoKCsrcHRyKS0+
dW5pY29kZSgpKSA9PSBsYyAmJiBlcXVhbENhc2VJbnNlbnNpdGl2ZShwdHIgKyAxLCBjaHNQbHVz
T25lLCBjaHNMZW5ndGhNaW51c09uZSkpCisgICAgICAgICAgICBpZiAodV9mb2xkQ2FzZSgqKytw
dHIsIFVfRk9MRF9DQVNFX0RFRkFVTFQpID09IGxjCisgICAgICAgICAgICAgICAgICAgICYmIGVx
dWFsSWdub3JpbmdDYXNlKHB0ciArIDEsIGNoc1BsdXNPbmUsIGNoc0xlbmd0aE1pbnVzT25lKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9sZW5ndGggLSBjaHNMZW5ndGggLSBuICsgMTsKICAg
ICAgICAgfSB3aGlsZSAoLS1uKTsKICAgICB9CkBAIC01NDEsNyArNTU1LDcgQEAKICAgICByZXR1
cm4gLTE7CiB9CiAKLWludCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IFFDaGFyIGMsIGludCBzdGFy
dCkgY29uc3QKK2ludCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IFVDaGFyIGMsIGludCBzdGFydCkg
Y29uc3QKIHsKICAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSBzdGFydDsKICAgICBpZiAoaW5kZXgg
Pj0gbV9sZW5ndGggKQpAQCAtNTY1LDggKzU3OSw3IEBACiAgICAgICBhIHBhcnQgb2YgdGhpcyBE
ZXByZWNhdGVkU3RyaW5nLiAgT25seSBpZiB0aGF0IG1hdGNoZXMsIHdlIGNhbGwgbWVtY21wCiAg
ICAgICBvciB1Y3N0cm5pY21wLgogCi0gICAgICBUaGUgaGFzaCB2YWx1ZSBvZiBhIHN0cmluZyBp
cyB0aGUgc3VtIG9mIHRoZSBjZWxscyBvZiBpdHMKLSAgICAgIFFDaGFycy4KKyAgICAgIFRoZSBo
YXNoIHZhbHVlIG9mIGEgc3RyaW5nIGlzIHRoZSBzdW0gb2YgaXRzIGNoYXJhY3RlcnMuCiAgICAg
Ki8KICAgICBBU1NFUlQoc3RyKTsKICAgICBpZiAoaW5kZXggPCAwKQpAQCAtNTc5LDM4ICs1OTIs
MzggQEAKICAgICBpZiAoZGVsdGEgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBjb25z
dCBRQ2hhciogdXRoaXMgPSBtX2RhdGEgKyBpbmRleDsKLSAgICBjb25zdCBRQ2hhciogdXN0ciA9
IHN0ci0+bV9kYXRhOworICAgIGNvbnN0IFVDaGFyKiB1dGhpcyA9IG1fZGF0YSArIGluZGV4Owor
ICAgIGNvbnN0IFVDaGFyKiB1c3RyID0gc3RyLT5tX2RhdGE7CiAgICAgdW5zaWduZWQgaHRoaXMg
PSAwOwogICAgIHVuc2lnbmVkIGhzdHIgPSAwOwogICAgIGlmIChjYXNlU2Vuc2l0aXZlKSB7CiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbHN0cjsgaSsrKSB7Ci0gICAgICAgICAgICBodGhp
cyArPSB1dGhpc1tpXS51bmljb2RlKCk7Ci0gICAgICAgICAgICBoc3RyICs9IHVzdHJbaV0udW5p
Y29kZSgpOworICAgICAgICAgICAgaHRoaXMgKz0gdXRoaXNbaV07CisgICAgICAgICAgICBoc3Ry
ICs9IHVzdHJbaV07CiAgICAgICAgIH0KICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICB3aGls
ZSAoMSkgewotICAgICAgICAgICAgaWYgKGh0aGlzID09IGhzdHIgJiYgbWVtY21wKHV0aGlzICsg
aSwgdXN0ciwgbHN0ciAqIHNpemVvZihRQ2hhcikpID09IDApCisgICAgICAgICAgICBpZiAoaHRo
aXMgPT0gaHN0ciAmJiBtZW1jbXAodXRoaXMgKyBpLCB1c3RyLCBsc3RyICogc2l6ZW9mKFVDaGFy
KSkgPT0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggKyBpOwogICAgICAgICAgICAg
aWYgKGkgPT0gZGVsdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAg
aHRoaXMgKz0gdXRoaXNbaSArIGxzdHJdLnVuaWNvZGUoKTsKLSAgICAgICAgICAgIGh0aGlzIC09
IHV0aGlzW2ldLnVuaWNvZGUoKTsKKyAgICAgICAgICAgIGh0aGlzICs9IHV0aGlzW2kgKyBsc3Ry
XTsKKyAgICAgICAgICAgIGh0aGlzIC09IHV0aGlzW2ldOwogICAgICAgICAgICAgaSsrOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsc3RyOyBp
KysgKSB7Ci0gICAgICAgICAgICBodGhpcyArPSB0b2xvd2VyKHV0aGlzW2ldLnVuaWNvZGUoKSk7
Ci0gICAgICAgICAgICBoc3RyICs9IHRvbG93ZXIodXN0cltpXS51bmljb2RlKCkpOworICAgICAg
ICAgICAgaHRoaXMgKz0gdG9sb3dlcih1dGhpc1tpXSk7CisgICAgICAgICAgICBoc3RyICs9IHRv
bG93ZXIodXN0cltpXSk7CiAgICAgICAgIH0KICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICB3
aGlsZSAoMSkgewotICAgICAgICAgICAgaWYgKGh0aGlzID09IGhzdHIgJiYgZXF1YWxDYXNlSW5z
ZW5zaXRpdmUodXRoaXMgKyBpLCB1c3RyLCBsc3RyKSkKKyAgICAgICAgICAgIGlmIChodGhpcyA9
PSBoc3RyICYmIGVxdWFsSWdub3JpbmdDYXNlKHV0aGlzICsgaSwgdXN0ciwgbHN0cikpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4ICsgaTsKICAgICAgICAgICAgIGlmIChpID09IGRlbHRh
KQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGh0aGlzICs9IHRvbG93
ZXIodXRoaXNbaSArIGxzdHJdLnVuaWNvZGUoKSk7Ci0gICAgICAgICAgICBodGhpcyAtPSB0b2xv
d2VyKHV0aGlzW2ldLnVuaWNvZGUoKSk7CisgICAgICAgICAgICBodGhpcyArPSB0b2xvd2VyKHV0
aGlzW2kgKyBsc3RyXSk7CisgICAgICAgICAgICBodGhpcyAtPSB0b2xvd2VyKHV0aGlzW2ldKTsK
ICAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQogICAgIH0KQEAgLTYyNSw3ICs2MzgsNyBAQAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6cmVwbGFjZShR
Q2hhciBvbGRDLCBRQ2hhciBuZXdDKQorU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6cmVwbGFjZShV
Q2hhciBvbGRDLCBVQ2hhciBuZXdDKQogewogICAgIGlmIChvbGRDID09IG5ld0MpCiAgICAgICAg
IHJldHVybiB0aGlzOwpAQCAtNjM4LDExICs2NTEsMTEgQEAKIAogICAgIFN0cmluZ0ltcGwqIGMg
PSBuZXcgU3RyaW5nSW1wbDsKIAotICAgIGMtPm1fZGF0YSA9IG5ld1FDaGFyVmVjdG9yKG1fbGVu
Z3RoKTsKKyAgICBjLT5tX2RhdGEgPSBuZXdVQ2hhclZlY3RvcihtX2xlbmd0aCk7CiAgICAgYy0+
bV9sZW5ndGggPSBtX2xlbmd0aDsKIAogICAgIGZvciAoaSA9IDA7IGkgIT0gbV9sZW5ndGg7ICsr
aSkgewotICAgICAgICBRQ2hhciBjaCA9IG1fZGF0YVtpXTsKKyAgICAgICAgVUNoYXIgY2ggPSBt
X2RhdGFbaV07CiAgICAgICAgIGlmIChjaCA9PSBvbGRDKQogICAgICAgICAgICAgY2ggPSBuZXdD
OwogICAgICAgICBjLT5tX2RhdGFbaV0gPSBjaDsKQEAgLTY1OSw3ICs2NzIsNyBAQAogICAgIHJl
dHVybiBtX2RhdGE7CiB9CiAKLVN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6OnJlcGxhY2UoUUNoYXIg
cGF0dGVybiwgY29uc3QgU3RyaW5nSW1wbCogc3RyKQorU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6
cmVwbGFjZShVQ2hhciBwYXR0ZXJuLCBjb25zdCBTdHJpbmdJbXBsKiBzdHIpCiB7CiAgICAgaW50
IHNsZW4gPSBzdHIgPyBzdHItPmxlbmd0aCgpIDogMDsKICAgICBpbnQgaW5kZXggPSAwOwpAQCAt
Njg0LDM4ICs2OTcsMTggQEAKICAgICAgICAgcmV0dXJuICFhOwogCiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYS0+bGVuZ3RoKCk7Ci0gICAgY29uc3QgUUNoYXIqIGFzID0gYS0+dW5pY29kZSgpOwor
ICAgIGNvbnN0IFVDaGFyKiBhcyA9IGEtPmNoYXJhY3RlcnMoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNoYXIgYyA9IGJbaV07Ci0gICAg
ICAgIGlmICghYykKKyAgICAgICAgdW5zaWduZWQgY2hhciBiYyA9IGJbaV07CisgICAgICAgIGlm
ICghYmMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChhc1tpXSAhPSBj
KQorICAgICAgICBpZiAoYXNbaV0gIT0gYmMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCiAgICAgcmV0dXJuICFiW2xlbmd0aF07CiB9CiAKLWJvb2wgZXF1YWwoY29uc3QgY2hh
ciogYSwgY29uc3QgU3RyaW5nSW1wbCogYikKLXsKLSAgICBpZiAoIWEpCi0gICAgICAgIHJldHVy
biAhYjsKLSAgICBpZiAoIWIpCi0gICAgICAgIHJldHVybiAhYTsKLQotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGItPmxlbmd0aCgpOwotICAgIGNvbnN0IFFDaGFyKiBicyA9IGItPnVuaWNvZGUoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNo
YXIgYyA9IGFbaV07Ci0gICAgICAgIGlmICghYykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKGMgIT0gYnNbaV0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuICFhW2xlbmd0aF07Ci19Ci0KIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2Uo
Y29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3RyaW5nSW1wbCogYikKIHsKICAgICByZXR1cm4g
Q2FzZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwoYSwgYik7CkBAIC03MjksNDUgKzcyMiwyNSBAQAog
ICAgICAgICByZXR1cm4gIWE7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhLT5sZW5ndGgoKTsK
LSAgICBjb25zdCBRQ2hhciogYXMgPSBhLT51bmljb2RlKCk7CisgICAgY29uc3QgVUNoYXIqIGFz
ID0gYS0+Y2hhcmFjdGVycygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgY2hhciBjID0gYltpXTsKLSAgICAgICAgaWYgKCFjKQorICAgICAg
ICB1bnNpZ25lZCBjaGFyIGJjID0gYltpXTsKKyAgICAgICAgaWYgKCFiYykKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGFzW2ldLmxvd2VyKCkgIT0gUUNoYXIoYykubG93
ZXIoKSkKKyAgICAgICAgaWYgKHVfZm9sZENhc2UoYXNbaV0sIFVfRk9MRF9DQVNFX0RFRkFVTFQp
ICE9IHVfZm9sZENhc2UoYmMsIFVfRk9MRF9DQVNFX0RFRkFVTFQpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiAhYltsZW5ndGhdOwogfQogCi1ib29sIGVx
dWFsSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqIGEsIGNvbnN0IFN0cmluZ0ltcGwqIGIpCi17Ci0g
ICAgaWYgKCFhKQotICAgICAgICByZXR1cm4gIWI7Ci0gICAgaWYgKCFiKQotICAgICAgICByZXR1
cm4gIWE7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGggPSBiLT5sZW5ndGgoKTsKLSAgICBjb25zdCBR
Q2hhciogYnMgPSBiLT51bmljb2RlKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBs
ZW5ndGg7ICsraSkgewotICAgICAgICBjaGFyIGMgPSBhW2ldOwotICAgICAgICBpZiAoIWMpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChRQ2hhcihjKS5sb3dlcigpICE9
IGJzW2ldLmxvd2VyKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuICFhW2xlbmd0aF07Ci19Ci0KIC8vIEdvbGRlbiByYXRpbyAtIGFyYml0cmFyeSBzdGFy
dCB2YWx1ZSB0byBhdm9pZCBtYXBwaW5nIGFsbCAwJ3MgdG8gYWxsIDAncwogLy8gb3IgYW55dGhp
bmcgbGlrZSB0aGF0LgogY29uc3QgdW5zaWduZWQgUEhJID0gMHg5ZTM3NzliOVU7CiAKIC8vIFBh
dWwgSHNpZWgncyBTdXBlckZhc3RIYXNoCiAvLyBodHRwOi8vd3d3LmF6aWxsaW9ubW9ua2V5cy5j
b20vcWVkL2hhc2guaHRtbAotdW5zaWduZWQgU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goY29uc3Qg
UUNoYXIqIG1fZGF0YSwgdW5zaWduZWQgbGVuKQordW5zaWduZWQgU3RyaW5nSW1wbDo6Y29tcHV0
ZUhhc2goY29uc3QgVUNoYXIqIG1fZGF0YSwgdW5zaWduZWQgbGVuKQogewogICAgIHVuc2lnbmVk
IG1fbGVuZ3RoID0gbGVuOwogICAgIHVpbnQzMl90IGhhc2ggPSBQSEk7CkBAIC03NzgsOCArNzUx
LDggQEAKICAgICAKICAgICAvLyBNYWluIGxvb3AKICAgICBmb3IgKDsgbV9sZW5ndGggPiAwOyBt
X2xlbmd0aC0tKSB7Ci0gICAgICAgIGhhc2ggKz0gbV9kYXRhWzBdLnVuaWNvZGUoKTsKLSAgICAg
ICAgdG1wID0gKG1fZGF0YVsxXS51bmljb2RlKCkgPDwgMTEpIF4gaGFzaDsKKyAgICAgICAgaGFz
aCArPSBtX2RhdGFbMF07CisgICAgICAgIHRtcCA9IChtX2RhdGFbMV0gPDwgMTEpIF4gaGFzaDsK
ICAgICAgICAgaGFzaCA9IChoYXNoIDw8IDE2KSBeIHRtcDsKICAgICAgICAgbV9kYXRhICs9IDI7
CiAgICAgICAgIGhhc2ggKz0gaGFzaCA+PiAxMTsKQEAgLTc4Nyw3ICs3NjAsNyBAQAogICAgIAog
ICAgIC8vIEhhbmRsZSBlbmQgY2FzZQogICAgIGlmIChyZW0pIHsKLSAgICAgICAgaGFzaCArPSBt
X2RhdGFbMF0udW5pY29kZSgpOworICAgICAgICBoYXNoICs9IG1fZGF0YVswXTsKICAgICAgICAg
aGFzaCBePSBoYXNoIDw8IDExOwogICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTc7CiAgICAgfQpA
QCAtODYwLDcgKzgzMyw3IEBACiAgICAgY2hhciogYnVmZmVyID0gbmV3IGNoYXJbbV9sZW5ndGgg
KyAxXTsKICAgICBjaGFyKiBwID0gYnVmZmVyOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
IT0gbV9sZW5ndGg7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBjID0gbV9kYXRhW2ld
LnVuaWNvZGUoKTsKKyAgICAgICAgVUNoYXIgYyA9IG1fZGF0YVtpXTsKICAgICAgICAgaWYgKGMg
Pj0gMHgyMCAmJiBjIDwgMHg3RikKICAgICAgICAgICAgICpwKysgPSBjOwogICAgICAgICBlbHNl
CkBAIC04NzIsMTIgKzg0NSwxMiBAQAogCiBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IElk
ZW50aWZpZXImIHN0cikKIHsKLSAgICBpbml0V2l0aFFDaGFyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgUUNoYXIqPihzdHIuZGF0YSgpKSwgc3RyLnNpemUoKSk7CisgICAgaW5pdChyZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLmRhdGEoKSksIHN0ci5zaXplKCkpOwogfQogCiBTdHJp
bmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IFVTdHJpbmcmIHN0cikKIHsKLSAgICBpbml0V2l0aFFD
aGFyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihzdHIuZGF0YSgpKSwgc3RyLnNpemUo
KSk7CisgICAgaW5pdChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLmRhdGEoKSks
IHN0ci5zaXplKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBwbGF0Zm9y
bS9UZXh0RW5jb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL1RleHRFbmNvZGluZy5j
cHAJKHJldmlzaW9uIDE0MjE2KQorKysgcGxhdGZvcm0vVGV4dEVuY29kaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsOCArNDQsNyBAQAogewogICAgIHJldHVybiBjaGFyc2V0TmFtZUZyb21U
ZXh0RW5jb2RpbmdJRChtX2VuY29kaW5nSUQpOwogfQotCi1RQ2hhciBUZXh0RW5jb2Rpbmc6OmJh
Y2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25zdAorVUNoYXIgVGV4dEVuY29kaW5nOjpiYWNr
c2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgY29uc3QKIHsKICAgICBpZiAobV9mbGFncyAmIEJhY2tz
bGFzaElzWWVuKQogICAgICAgICByZXR1cm4gMHgwMEE1OyAvLyB5ZW4gc2lnbgpAQCAtMTI3LDcg
KzEyNiw3IEBACiAgICAgLy8gdW50aWwgdGhlbiwgd2UgY2hhbmdlIHRoZSBiYWNrc2xhc2ggaW50
byBhIHllbiBzaWduLgogICAgIC8vIEVuY29kaW5nIHdpbGwgY2hhbmdlIHRoZSB5ZW4gc2lnbiBi
YWNrIGludG8gYSBiYWNrc2xhc2guCiAgICAgRGVwcmVjYXRlZFN0cmluZyBjb3B5ID0gcWNzOwot
ICAgIGNvcHkucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgp
KTsKKyAgICBjb3B5LnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsK
IAogICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwogICAgIFVDb252ZXJ0ZXIqIGNv
bnYgPSBnZXRDb252ZXJ0ZXIoZW5jb2RpbmcsICZlcnIpOwpJbmRleDogcGxhdGZvcm0vRGVwcmVj
YXRlZFN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuaAko
cmV2aXNpb24gMTQyMTYpCisrKyBwbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDEyICs1MCw2IEBACiAKIGNsYXNzIFFDaGFyIHsKIHB1YmxpYzoKLQotICAg
IGVudW0gRGlyZWN0aW9uIHsKLSAgICAgICAgRGlyTCA9IDAsIERpclIsIERpckVOLCBEaXJFUywg
RGlyRVQsIERpckFOLCBEaXJDUywgRGlyQiwgRGlyUywgRGlyV1MsIERpck9OLAotICAgICAgICBE
aXJMUkUsIERpckxSTywgRGlyQUwsIERpclJMRSwgRGlyUkxPLCBEaXJQREYsIERpck5TTSwgRGly
Qk4KLSAgICB9OwotICAgIAogICAgIFFDaGFyKCk7CiAgICAgUUNoYXIoY2hhcik7CiAgICAgUUNo
YXIodW5zaWduZWQgY2hhcik7CkBAIC02NywxNSArNjEsOCBAQAogICAgIHVuc2lnbmVkIHNob3J0
IHVuaWNvZGUoKSBjb25zdDsKICAgICBjaGFyIGxhdGluMSgpIGNvbnN0OwogICAgIGJvb2wgaXNT
cGFjZSgpIGNvbnN0OwotICAgIGJvb2wgaXNEaWdpdCgpIGNvbnN0OwotICAgIGJvb2wgaXNMZXR0
ZXIoKSBjb25zdDsKLSAgICBib29sIGlzTnVtYmVyKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0xldHRl
ck9yTnVtYmVyKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1B1bmN0KCkgY29uc3Q7Ci0gICAgaW50IGRp
Z2l0VmFsdWUoKSBjb25zdDsKICAgICBRQ2hhciBsb3dlcigpIGNvbnN0OwogICAgIFFDaGFyIHVw
cGVyKCkgY29uc3Q7Ci0gICAgRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OwogCiBwcml2YXRl
OgogICAgIHVuc2lnbmVkIHNob3J0IGM7CkBAIC0xMTgsNDQgKzEwNSw5IEBACiB7CiAgICAgLy8g
VXNlIGlzc3BhY2UoKSBmb3IgYmFzaWMgTGF0aW4tMS4KICAgICAvLyBUaGlzIHdpbGwgaW5jbHVk
ZSBuZXdsaW5lcywgd2hpY2ggYXJlbid0IGluY2x1ZGVkIGluIHVuaWNvZGUgRGlyV1MuCi0gICAg
cmV0dXJuIGMgPD0gMHg3RiA/IGlzc3BhY2UoYykgOiBkaXJlY3Rpb24oKSA9PSBEaXJXUzsKKyAg
ICByZXR1cm4gYyA8PSAweDdGID8gaXNzcGFjZShjKSA6ICh1X2NoYXJEaXJlY3Rpb24oYykgPT0g
VV9XSElURV9TUEFDRV9ORVVUUkFMKTsKIH0KIAotaW5saW5lIGJvb2wgUUNoYXI6OmlzRGlnaXQo
KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJZiBmYXN0IGVub3VnaCwgd2Ugc2hvdWxkIGp1c3Qg
Y2FsbCB1X2lzZGlnaXQgZGlyZWN0bHkuCi0gICAgcmV0dXJuIGMgPD0gMHg3RiA/IGlzZGlnaXQo
YykgOiB1X2lzZGlnaXQoYyk7Ci19Ci0KLWlubGluZSBib29sIFFDaGFyOjppc0xldHRlcigpIGNv
bnN0Ci17Ci0gICAgLy8gRklYTUU6IElmIGZhc3QgZW5vdWdoLCB3ZSBzaG91bGQganVzdCBjYWxs
IHVfaXNhbHBoYSBkaXJlY3RseS4KLSAgICByZXR1cm4gYyA8PSAweDdGID8gaXNhbHBoYShjKSA6
IHVfaXNhbHBoYShjKTsKLX0KLQotaW5saW5lIGJvb2wgUUNoYXI6OmlzTnVtYmVyKCkgY29uc3QK
LXsKLSAgICAvLyBGSVhNRTogSWYgZmFzdCBlbm91Z2gsIHdlIHNob3VsZCBqdXN0IGNhbGwgdV9p
c2RpZ2l0IGRpcmVjdGx5LgotICAgIHJldHVybiBjIDw9IDB4N0YgPyBpc2RpZ2l0KGMpIDogdV9p
c2RpZ2l0KGMpOwotfQotCi1pbmxpbmUgYm9vbCBRQ2hhcjo6aXNMZXR0ZXJPck51bWJlcigpIGNv
bnN0Ci17Ci0gICAgLy8gRklYTUU6IElmIGZhc3QgZW5vdWdoLCB3ZSBzaG91bGQganVzdCBjYWxs
IHVfaXNhbG51bSBkaXJlY3RseS4KLSAgICByZXR1cm4gYyA8PSAweDdGID8gaXNhbG51bShjKSA6
IHVfaXNhbG51bShjKTsKLX0KLQotaW5saW5lIGJvb2wgUUNoYXI6OmlzUHVuY3QoKSBjb25zdAot
ewotICAgIHJldHVybiB1X2lzcHVuY3QoYyk7Ci19Ci0KLWlubGluZSBpbnQgUUNoYXI6OmRpZ2l0
VmFsdWUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJZiBmYXN0IGVub3VnaCwgd2Ugc2hvdWxk
IGp1c3QgY2FsbCB1X2NoYXJEaWdpdFZhbHVlIGRpcmVjdGx5LgotICAgIHJldHVybiBjIDw9ICc5
JyA/IGMgLSAnMCcgOiB1X2NoYXJEaWdpdFZhbHVlKGMpOwotfQotCiBpbmxpbmUgUUNoYXIgUUNo
YXI6Omxvd2VyKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogSWYgZmFzdCBlbm91Z2gsIHdlIHNo
b3VsZCBqdXN0IGNhbGwgdV90b2xvd2VyIGRpcmVjdGx5LgpAQCAtMTY4LDExICsxMjAsNiBAQAog
ICAgIHJldHVybiBjIDw9IDB4N0YgPyB0b3VwcGVyKGMpIDogdV90b3VwcGVyKGMpOwogfQogCi1p
bmxpbmUgUUNoYXI6OkRpcmVjdGlvbiBRQ2hhcjo6ZGlyZWN0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RGlyZWN0aW9uPih1X2NoYXJEaXJlY3Rpb24oYykpOwotfQotCiBp
bmxpbmUgY2hhciBRQ2hhcjo6bGF0aW4xKCkgY29uc3QKIHsKICAgICByZXR1cm4gYyA+IDB4ZmYg
PyAwIDogYzsKSW5kZXg6IHBsYXRmb3JtL1NlZ21lbnRlZFN0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcGxhdGZvcm0vU2VnbWVudGVkU3RyaW5nLmNwcAkocmV2aXNpb24gMTQyMTYpCisrKyBwbGF0
Zm9ybS9TZWdtZW50ZWRTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1Niw5IEBA
CiB1bnNpZ25lZCBTZWdtZW50ZWRTdHJpbmc6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbV9jdXJyZW50U3RyaW5nLm1fbGVuZ3RoOwotICAgIGlmIChtX3B1c2hlZENo
YXIxLnVuaWNvZGUoKSkgeworICAgIGlmIChtX3B1c2hlZENoYXIxKSB7CiAgICAgICAgICsrbGVu
Z3RoOwotICAgICAgICBpZiAobV9wdXNoZWRDaGFyMi51bmljb2RlKCkpCisgICAgICAgIGlmICht
X3B1c2hlZENoYXIyKQogICAgICAgICAgICAgKytsZW5ndGg7CiAgICAgfQogICAgIGlmIChtX2Nv
bXBvc2l0ZSkgewpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgIGZvciAoOyBpICE9IGU7ICsr
aSkKICAgICAgICAgICAgIGFwcGVuZCgqaSk7CiAgICAgfQotICAgIG1fY3VycmVudENoYXIgPSBt
X3B1c2hlZENoYXIxLnVuaWNvZGUoKSA/ICZtX3B1c2hlZENoYXIxIDogbV9jdXJyZW50U3RyaW5n
Lm1fY3VycmVudDsKKyAgICBtX2N1cnJlbnRDaGFyID0gbV9wdXNoZWRDaGFyMSA/ICZtX3B1c2hl
ZENoYXIxIDogbV9jdXJyZW50U3RyaW5nLm1fY3VycmVudDsKIH0KIAogdm9pZCBTZWdtZW50ZWRT
dHJpbmc6OnByZXBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nICZzKQpAQCAtMTMyLDcgKzEzMiw3
IEBACiAgICAgICAgICAgICBwcmVwZW5kKCppKTsKICAgICB9CiAgICAgcHJlcGVuZChzLm1fY3Vy
cmVudFN0cmluZyk7Ci0gICAgbV9jdXJyZW50Q2hhciA9IG1fcHVzaGVkQ2hhcjEudW5pY29kZSgp
ID8gJm1fcHVzaGVkQ2hhcjEgOiBtX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50OworICAgIG1fY3Vy
cmVudENoYXIgPSBtX3B1c2hlZENoYXIxID8gJm1fcHVzaGVkQ2hhcjEgOiBtX2N1cnJlbnRTdHJp
bmcubV9jdXJyZW50OwogfQogCiB2b2lkIFNlZ21lbnRlZFN0cmluZzo6YWR2YW5jZVN1YnN0cmlu
ZygpCkBAIC0xNTAsOSArMTUwLDkgQEAKIERlcHJlY2F0ZWRTdHJpbmcgU2VnbWVudGVkU3RyaW5n
Ojp0b1N0cmluZygpIGNvbnN0CiB7CiAgICAgRGVwcmVjYXRlZFN0cmluZyByZXN1bHQ7Ci0gICAg
aWYgKG1fcHVzaGVkQ2hhcjEudW5pY29kZSgpKSB7CisgICAgaWYgKG1fcHVzaGVkQ2hhcjEpIHsK
ICAgICAgICAgcmVzdWx0LmFwcGVuZChtX3B1c2hlZENoYXIxKTsKLSAgICAgICAgaWYgKG1fcHVz
aGVkQ2hhcjIudW5pY29kZSgpKQorICAgICAgICBpZiAobV9wdXNoZWRDaGFyMikKICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQobV9wdXNoZWRDaGFyMik7CiAgICAgfQogICAgIG1fY3VycmVudFN0
cmluZy5hcHBlbmRUbyhyZXN1bHQpOwpJbmRleDogcGxhdGZvcm0vQXRvbWljU3RyaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9BdG9taWNTdHJpbmcuY3BwCShyZXZpc2lvbiAxNDIxNikK
KysrIHBsYXRmb3JtL0F0b21pY1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIwICsy
MywyMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgQVZPSURfU1RBVElDX0NPTlNUUlVD
VE9SUwotI2RlZmluZSBLSFRNTF9BVE9NSUNTVFJJTkdfSElERV9HTE9CQUxTIDEKKyNkZWZpbmUg
QVRPTUlDU1RSSU5HX0hJREVfR0xPQkFMUyAxCiAjZW5kaWYKIAogI2luY2x1ZGUgIkF0b21pY1N0
cmluZy5oIgogCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlN0YXRp
Y0NvbnN0cnVjdG9ycy5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlIDxranMv
aWRlbnRpZmllci5oPgogI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hTZXQuaD4KIAotdXNpbmcgbmFt
ZXNwYWNlIEtKUzsKK3VzaW5nIEtKUzo6SWRlbnRpZmllcjsKK3VzaW5nIEtKUzo6VVN0cmluZzsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgCisKIHN0YXRpYyBIYXNoU2V0PFN0cmluZ0ltcGwq
Piogc3RyaW5nVGFibGU7CiAKIHN0cnVjdCBDU3RyaW5nVHJhbnNsYXRvciAKQEAgLTQ5LDcgKzUx
LDcgQEAKICAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiByLCBjb25zdCBjaGFyKiBz
KQogICAgIHsKICAgICAgICAgaW50IGxlbmd0aCA9IHItPmxlbmd0aCgpOwotICAgICAgICBjb25z
dCBRQ2hhciogZCA9IHItPnVuaWNvZGUoKTsKKyAgICAgICAgY29uc3QgVUNoYXIqIGQgPSByLT5j
aGFyYWN0ZXJzKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKQog
ICAgICAgICAgICAgaWYgKGRbaV0gIT0gc1tpXSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC02OCw5ICs3MCw5IEBACiBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5n
JiBhLCBjb25zdCBjaGFyKiBiKQogeyAKICAgICBTdHJpbmdJbXBsKiBpbXBsID0gYS5pbXBsKCk7
Ci0gICAgaWYgKCghaW1wbCB8fCAhaW1wbC0+dW5pY29kZSgpKSAmJiAhYikKKyAgICBpZiAoKCFp
bXBsIHx8ICFpbXBsLT5jaGFyYWN0ZXJzKCkpICYmICFiKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBpZiAoKCFpbXBsIHx8ICFpbXBsLT51bmljb2RlKCkpIHx8ICFiKQorICAgIGlmICgoIWlt
cGwgfHwgIWltcGwtPmNoYXJhY3RlcnMoKSkgfHwgIWIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICByZXR1cm4gQ1N0cmluZ1RyYW5zbGF0b3I6OmVxdWFsKGltcGwsIGIpOyAKIH0KQEAgLTg2
LDI1ICs4OCwyNSBAQAogICAgIHJldHVybiAqc3RyaW5nVGFibGUtPmFkZDxjb25zdCBjaGFyKiwg
Q1N0cmluZ1RyYW5zbGF0b3I+KGMpLmZpcnN0OwogfQogCi1zdHJ1Y3QgUUNoYXJCdWZmZXIgewot
ICAgIGNvbnN0IFFDaGFyKiBzOworc3RydWN0IFVDaGFyQnVmZmVyIHsKKyAgICBjb25zdCBVQ2hh
ciogczsKICAgICB1bnNpZ25lZCBsZW5ndGg7CiB9OwogCi1zdHJ1Y3QgUUNoYXJCdWZmZXJUcmFu
c2xhdG9yIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBRQ2hhckJ1ZmZlciYgYnVm
KQorc3RydWN0IFVDaGFyQnVmZmVyVHJhbnNsYXRvciB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgVUNoYXJCdWZmZXImIGJ1ZikKICAgICB7CiAgICAgICAgIHJldHVybiBTdHJpbmdJ
bXBsOjpjb21wdXRlSGFzaChidWYucywgYnVmLmxlbmd0aCk7CiAgICAgfQogCi0gICAgc3RhdGlj
IGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogY29uc3QmIHN0ciwgY29uc3QgUUNoYXJCdWZmZXImIGJ1
ZikKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBjb25zdCYgc3RyLCBjb25zdCBV
Q2hhckJ1ZmZlciYgYnVmKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgc3RyTGVuZ3RoID0gc3Ry
LT5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgYnVmTGVuZ3RoID0gYnVmLmxlbmd0aDsKICAg
ICAgICAgaWYgKHN0ckxlbmd0aCAhPSBidWZMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIAotICAgICAgICBjb25zdCB1aW50MzJfdCogc3RyQ2hhcnMgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3RyLT51bmljb2RlKCkpOworICAgICAgICBjb25z
dCB1aW50MzJfdCogc3RyQ2hhcnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4o
c3RyLT5jaGFyYWN0ZXJzKCkpOwogICAgICAgICBjb25zdCB1aW50MzJfdCogYnVmQ2hhcnMgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oYnVmLnMpOwogICAgICAgICAKICAgICAg
ICAgdW5zaWduZWQgaGFsZkxlbmd0aCA9IHN0ckxlbmd0aCA+PiAxOwpAQCAtMTIwLDcgKzEyMiw3
IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHRyYW5z
bGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IFFDaGFyQnVmZmVyJiBidWYsIHVuc2ln
bmVkIGhhc2gpCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2NhdGlv
biwgY29uc3QgVUNoYXJCdWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKICAgICB7CiAgICAgICAg
IFN0cmluZ0ltcGwgKnIgPSBuZXcgU3RyaW5nSW1wbChidWYucywgYnVmLmxlbmd0aCk7CiAgICAg
ICAgIHItPm1faGFzaCA9IGhhc2g7CkBAIC0xMzAsNyArMTMyLDcgQEAKICAgICB9CiB9OwogCi1T
dHJpbmdJbXBsKiBBdG9taWNTdHJpbmc6OmFkZChjb25zdCBRQ2hhciogcywgaW50IGxlbmd0aCkK
K1N0cmluZ0ltcGwqIEF0b21pY1N0cmluZzo6YWRkKGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3Ro
KQogewogICAgIGlmICghcykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzgsOCArMTQwLDggQEAK
ICAgICBpZiAobGVuZ3RoID09IDApCiAgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgp
OwogICAgIAotICAgIFFDaGFyQnVmZmVyIGJ1ZiA9IHtzLCBsZW5ndGh9OyAKLSAgICByZXR1cm4g
KnN0cmluZ1RhYmxlLT5hZGQ8UUNoYXJCdWZmZXIsIFFDaGFyQnVmZmVyVHJhbnNsYXRvcj4oYnVm
KS5maXJzdDsKKyAgICBVQ2hhckJ1ZmZlciBidWYgPSB7cywgbGVuZ3RofTsgCisgICAgcmV0dXJu
ICpzdHJpbmdUYWJsZS0+YWRkPFVDaGFyQnVmZmVyLCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3I+KGJ1
ZikuZmlyc3Q7CiB9CiAKIFN0cmluZ0ltcGwqIEF0b21pY1N0cmluZzo6YWRkKFN0cmluZ0ltcGwq
IHIpCkBAIC0xNjMsMjQgKzE2NSwzNCBAQAogCiBTdHJpbmdJbXBsKiBBdG9taWNTdHJpbmc6OmFk
ZChjb25zdCBLSlM6OklkZW50aWZpZXImIHN0cikKIHsKLSAgICByZXR1cm4gYWRkKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihzdHIuZGF0YSgpKSwgc3RyLnNpemUoKSk7CisgICAgcmV0
dXJuIGFkZChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLmRhdGEoKSksIHN0ci5z
aXplKCkpOwogfQogCiBTdHJpbmdJbXBsKiBBdG9taWNTdHJpbmc6OmFkZChjb25zdCBLSlM6OlVT
dHJpbmcmIHN0cikKIHsKLSAgICByZXR1cm4gYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNo
YXIqPihzdHIuZGF0YSgpKSwgc3RyLnNpemUoKSk7CisgICAgcmV0dXJuIGFkZChyZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLmRhdGEoKSksIHN0ci5zaXplKCkpOwogfQogCiBBdG9t
aWNTdHJpbmc6Om9wZXJhdG9yIElkZW50aWZpZXIoKSBjb25zdAogewotICAgIHJldHVybiBkb21T
dHJpbmcoKTsKKyAgICByZXR1cm4gbV9zdHJpbmc7CiB9CiAKIEF0b21pY1N0cmluZzo6b3BlcmF0
b3IgVVN0cmluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRvbVN0cmluZygpOworICAgIHJldHVy
biBtX3N0cmluZzsKIH0KIAorQXRvbWljU3RyaW5nOjpBdG9taWNTdHJpbmcoY29uc3QgRGVwcmVj
YXRlZFN0cmluZyYgcykKKyAgICA6IG1fc3RyaW5nKGFkZChyZWludGVycHJldF9jYXN0PGNvbnN0
IFVDaGFyKj4ocy51bmljb2RlKCkpLCBzLmxlbmd0aCgpKSkKK3sKK30KKworRGVwcmVjYXRlZFN0
cmluZyBBdG9taWNTdHJpbmc6OmRlcHJlY2F0ZWRTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVy
biBtX3N0cmluZy5kZXByZWNhdGVkU3RyaW5nKCk7Cit9CisKIERFRklORV9HTE9CQUwoQXRvbWlj
U3RyaW5nLCBudWxsQXRvbSkKIERFRklORV9HTE9CQUwoQXRvbWljU3RyaW5nLCBlbXB0eUF0b20s
ICIiKQogREVGSU5FX0dMT0JBTChBdG9taWNTdHJpbmcsIHRleHRBdG9tLCAiI3RleHQiKQpJbmRl
eDogcGxhdGZvcm0vRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vRm9udC5jcHAJKHJl
dmlzaW9uIDE0MjE2KQorKysgcGxhdGZvcm0vRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDcgKzc2LDcgQEAKICAgICBtX2ZvbnRMaXN0LT5pbnZhbGlkYXRlKCk7CiB9CiAKLWludCBGb250
Ojp3aWR0aChjb25zdCBRQ2hhciogY2hzLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50
IHRhYldpZHRoLCBpbnQgeHBvcykgY29uc3QKK2ludCBGb250Ojp3aWR0aChjb25zdCBVQ2hhciog
Y2hzLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHRhYldpZHRoLCBpbnQgeHBvcykg
Y29uc3QKIHsKICAgICAvLyBGSVhNRTogV2FudCB0byBkZWZpbmUgYW4gbHJvdW5kZiBmb3Igd2lu
MzIuCiAjaWYgX19BUFBMRV9fCkluZGV4OiBwbGF0Zm9ybS9TdHJpbmdIYXNoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGxhdGZvcm0vU3RyaW5nSGFzaC5oCShyZXZpc2lvbiAxNDIxNikKKysrIHBsYXRmb3Jt
L1N0cmluZ0hhc2guaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUg
IkF0b21pY1N0cmluZ0ltcGwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgPGt4bWxjb3JlL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Cisj
aW5jbHVkZSA8dW5pY29kZS91c3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBLWE1MQ29yZSB7CiAKQEAg
LTQzLDggKzQ1LDggQEAKICAgICAgICAgICAgIGlmIChhTGVuZ3RoICE9IGJMZW5ndGgpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCog
YUNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPnVuaWNvZGUoKSk7
Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYkNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50MzJfdCo+KGItPnVuaWNvZGUoKSk7CisgICAgICAgICAgICBjb25zdCB1aW50MzJf
dCogYUNoYXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGEtPmNoYXJhY3Rl
cnMoKSk7CisgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYkNoYXJzID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50MzJfdCo+KGItPmNoYXJhY3RlcnMoKSk7CiAKICAgICAgICAgICAgIHVu
c2lnbmVkIGhhbGZMZW5ndGggPSBhTGVuZ3RoID4+IDE7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpICE9IGhhbGZMZW5ndGg7ICsraSkKQEAgLTY4LDcgKzcwLDcgQEAKICAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2ViQ29yZTo6U3RyaW5nSW1wbCogc3RyKQog
ICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBsID0gc3RyLT5sZW5ndGgoKTsKLSAgICAg
ICAgICAgIGNvbnN0IFFDaGFyKiBzID0gc3RyLT51bmljb2RlKCk7CisgICAgICAgICAgICBjb25z
dCBVQ2hhciogcyA9IHN0ci0+Y2hhcmFjdGVycygpOwogICAgICAgICAgICAgdWludDMyX3QgaGFz
aCA9IFBISTsKICAgICAgICAgICAgIHVpbnQzMl90IHRtcDsKICAgICAgICAgICAgIApAQCAtNzcs
OCArNzksOCBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBNYWluIGxvb3AKICAgICAg
ICAgICAgIGZvciAoOyBsID4gMDsgbC0tKSB7Ci0gICAgICAgICAgICAgICAgaGFzaCArPSBzWzBd
Lmxvd2VyKCkudW5pY29kZSgpOwotICAgICAgICAgICAgICAgIHRtcCA9IChzWzFdLmxvd2VyKCku
dW5pY29kZSgpIDw8IDExKSBeIGhhc2g7CisgICAgICAgICAgICAgICAgaGFzaCArPSB1X2ZvbGRD
YXNlKHNbMF0sIFVfRk9MRF9DQVNFX0RFRkFVTFQpOworICAgICAgICAgICAgICAgIHRtcCA9ICh1
X2ZvbGRDYXNlKHNbMV0sIFVfRk9MRF9DQVNFX0RFRkFVTFQpIDw8IDExKSBeIGhhc2g7CiAgICAg
ICAgICAgICAgICAgaGFzaCA9IChoYXNoIDw8IDE2KSBeIHRtcDsKICAgICAgICAgICAgICAgICBz
ICs9IDI7CiAgICAgICAgICAgICAgICAgaGFzaCArPSBoYXNoID4+IDExOwpAQCAtODYsNyArODgs
NyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBIYW5kbGUgZW5kIGNhc2UKICAgICAg
ICAgICAgIGlmIChyZW0pIHsKLSAgICAgICAgICAgICAgICBoYXNoICs9IHNbMF0ubG93ZXIoKS51
bmljb2RlKCk7CisgICAgICAgICAgICAgICAgaGFzaCArPSB1X2ZvbGRDYXNlKHNbMF0sIFVfRk9M
RF9DQVNFX0RFRkFVTFQpOwogICAgICAgICAgICAgICAgIGhhc2ggXj0gaGFzaCA8PCAxMTsKICAg
ICAgICAgICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTc7CiAgICAgICAgICAgICB9CkBAIC0xMjMs
OCArMTI1LDggQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTWFpbiBsb29wCiAgICAg
ICAgICAgICBmb3IgKDsgbCA+IDA7IGwtLSkgewotICAgICAgICAgICAgICAgIGhhc2ggKz0gUUNo
YXIoc1swXSkubG93ZXIoKS51bmljb2RlKCk7Ci0gICAgICAgICAgICAgICAgdG1wID0gKFFDaGFy
KHNbMV0pLmxvd2VyKCkudW5pY29kZSgpIDw8IDExKSBeIGhhc2g7CisgICAgICAgICAgICAgICAg
aGFzaCArPSB1X2ZvbGRDYXNlKHNbMF0sIFVfRk9MRF9DQVNFX0RFRkFVTFQpOworICAgICAgICAg
ICAgICAgIHRtcCA9ICh1X2ZvbGRDYXNlKHNbMV0sIFVfRk9MRF9DQVNFX0RFRkFVTFQpIDw8IDEx
KSBeIGhhc2g7CiAgICAgICAgICAgICAgICAgaGFzaCA9IChoYXNoIDw8IDE2KSBeIHRtcDsKICAg
ICAgICAgICAgICAgICBzICs9IDI7CiAgICAgICAgICAgICAgICAgaGFzaCArPSBoYXNoID4+IDEx
OwpAQCAtMTMyLDcgKzEzNCw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEhhbmRs
ZSBlbmQgY2FzZQogICAgICAgICAgICAgaWYgKHJlbSkgewotICAgICAgICAgICAgICAgIGhhc2gg
Kz0gUUNoYXIoc1swXSkubG93ZXIoKS51bmljb2RlKCk7CisgICAgICAgICAgICAgICAgaGFzaCAr
PSB1X2ZvbGRDYXNlKHNbMF0sIFVfRk9MRF9DQVNFX0RFRkFVTFQpOwogICAgICAgICAgICAgICAg
IGhhc2ggXj0gaGFzaCA8PCAxMTsKICAgICAgICAgICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTc7
CiAgICAgICAgICAgICB9CkBAIC0xNTUsMjIgKzE1NywxOCBAQAogICAgICAgICAKICAgICAgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2ViQ29yZTo6U3RyaW5nSW1wbCogYSwgY29uc3QgV2Vi
Q29yZTo6U3RyaW5nSW1wbCogYikKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGEgPT0gYikg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBpZiAo
bGVuZ3RoICE9IGItPmxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGNvbnN0IFFDaGFyKiBhcyA9IGEtPnVuaWNvZGUoKTsKLSAgICAgICAgICAgIGNv
bnN0IFFDaGFyKiBicyA9IGItPnVuaWNvZGUoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgaWYgKGFzW2ldLmxvd2Vy
KCkgIT0gYnNbaV0ubG93ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gdV9tZW1jYXNlY21w
KGEtPmNoYXJhY3RlcnMoKSwgYi0+Y2hhcmFjdGVycygpLCBsZW5ndGgsIFVfRk9MRF9DQVNFX0RF
RkFVTFQpID09IDA7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
U3RySGFzaDxXZWJDb3JlOjpBdG9taWNTdHJpbmdJbXBsKj4gOiBwdWJsaWMgU3RySGFzaDxXZWJD
b3JlOjpTdHJpbmdJbXBsKj4gewotICAgIH07CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgU3RySGFz
aDxXZWJDb3JlOjpBdG9taWNTdHJpbmdJbXBsKj4gOiBwdWJsaWMgU3RySGFzaDxXZWJDb3JlOjpT
dHJpbmdJbXBsKj4geyB9OwogCiAgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgU3RySGFzaDxSZWZQdHI8
V2ViQ29yZTo6U3RyaW5nSW1wbD4gPiB7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IFJlZlB0cjxXZWJDb3JlOjpTdHJpbmdJbXBsPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2go
KTsgfQpJbmRleDogcGxhdGZvcm0vUGxhdGZvcm1TdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0
Zm9ybS9QbGF0Zm9ybVN0cmluZy5oCShyZXZpc2lvbiAxNDIxNikKKysrIHBsYXRmb3JtL1BsYXRm
b3JtU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE0ICszOCwxMCBAQAogICogd2UgcGxh
biB0byBjaGFuZ2UgdGhpcyB0byBoYXZlIGltbXV0YWJsZSBjb3B5IG9uIHdyaXRlIHNlbWFudGlj
cy4KICAqLwogCi0vLyBGSVhNRTogTW92ZSB0byB1bnNpZ25lZCBzaG9ydCBpbnN0ZWFkIG9mIFFD
aGFyLgotCiBjbGFzcyBTdHJpbmcgewogcHVibGljOgogICAgIFN0cmluZygpIHsgfSAvLyBnaXZl
cyBudWxsIHN0cmluZywgZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW4gZW1wdHkgc3RyaW5nCi0gICAg
U3RyaW5nKFFDaGFyIGMpIDogbV9pbXBsKG5ldyBTdHJpbmdJbXBsKCZjLCAxKSkgeyB9Ci0gICAg
U3RyaW5nKGNvbnN0IFFDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBTdHJpbmcoY29uc3Qg
RGVwcmVjYXRlZFN0cmluZyYpOworICAgIFN0cmluZyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxl
bmd0aCk7CiAgICAgU3RyaW5nKGNvbnN0IEtKUzo6SWRlbnRpZmllciYpOwogICAgIFN0cmluZyhj
b25zdCBLSlM6OlVTdHJpbmcmKTsKICAgICBTdHJpbmcoY29uc3QgY2hhciopOwpAQCAtNTUsMTcg
KzUxLDE2IEBACiAgICAgb3BlcmF0b3IgS0pTOjpJZGVudGlmaWVyKCkgY29uc3Q7CiAgICAgb3Bl
cmF0b3IgS0pTOjpVU3RyaW5nKCkgY29uc3Q7CiAKLSAgICBTdHJpbmcmIG9wZXJhdG9yICs9KGNv
bnN0IFN0cmluZyYpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzKCkgY29uc3Q7CiAKLSAgICB2b2lkIGluc2VydChjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCBwb3MpOwotCi0gICAgY29uc3QgUUNoYXImIG9wZXJhdG9yW10odW5zaWduZWQg
aSkgY29uc3Q7IC8vIGlmIGkgPj0gbGVuZ3RoKCksIHJldHVybnMgMAorICAgIFVDaGFyIG9wZXJh
dG9yW10odW5zaWduZWQgaSkgY29uc3Q7IC8vIGlmIGkgPj0gbGVuZ3RoKCksIHJldHVybnMgMAog
ICAgIAotICAgIGJvb2wgY29udGFpbnMoUUNoYXIgYykgY29uc3QgeyByZXR1cm4gZmluZChjKSAh
PSAtMTsgfQorICAgIGJvb2wgY29udGFpbnMoVUNoYXIgYykgY29uc3QgeyByZXR1cm4gZmluZChj
KSAhPSAtMTsgfQogICAgIGJvb2wgY29udGFpbnMoY29uc3QgY2hhciogc3RyLCBib29sIGNhc2VT
ZW5zaXRpdmUgPSB0cnVlKSBjb25zdCB7IHJldHVybiBmaW5kKHN0ciwgMCwgY2FzZVNlbnNpdGl2
ZSkgIT0gLTE7IH0KICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgc3RyLCBib29sIGNh
c2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdCB7IHJldHVybiBmaW5kKHN0ciwgMCwgY2FzZVNlbnNp
dGl2ZSkgIT0gLTE7IH0KIAotICAgIGludCBmaW5kKFFDaGFyIGMsIGludCBzdGFydCA9IDApIGNv
bnN0CisgICAgaW50IGZpbmQoVUNoYXIgYywgaW50IHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICAg
eyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKGMsIHN0YXJ0KSA6IC0xOyB9CiAgICAgaW50
IGZpbmQoY29uc3QgY2hhciogc3RyLCBpbnQgc3RhcnQgPSAwLCBib29sIGNhc2VTZW5zaXRpdmUg
PSB0cnVlKSBjb25zdAogICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoc3Ry
LCBzdGFydCwgY2FzZVNlbnNpdGl2ZSkgOiAtMTsgfQpAQCAtNzcsMTEgKzcyLDEzIEBACiAgICAg
Ym9vbCBlbmRzV2l0aChjb25zdCBTdHJpbmcmIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUp
IGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZW5kc1dpdGgocy5pbXBs
KCksIGNhc2VTZW5zaXRpdmUpIDogcy5pc0VtcHR5KCk7IH0KIAotICAgIFN0cmluZyYgcmVwbGFj
ZShRQ2hhciBhLCBRQ2hhciBiKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1wbC0+cmVwbGFj
ZShhLCBiKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAgU3RyaW5nJiByZXBsYWNlKFFDaGFyIGEsIGNv
bnN0IFN0cmluZyYgYikgeyBpZiAobV9pbXBsKSBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2UoYSwg
Yi5pbXBsKCkpOyByZXR1cm4gKnRoaXM7IH0KKyAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcm
KTsKKyAgICB2b2lkIGluc2VydChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBwb3MpOworCisgICAg
U3RyaW5nJiByZXBsYWNlKFVDaGFyIGEsIFVDaGFyIGIpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0g
bV9pbXBsLT5yZXBsYWNlKGEsIGIpOyByZXR1cm4gKnRoaXM7IH0KKyAgICBTdHJpbmcmIHJlcGxh
Y2UoVUNoYXIgYSwgY29uc3QgU3RyaW5nJiBiKSB7IGlmIChtX2ltcGwpIG1faW1wbCA9IG1faW1w
bC0+cmVwbGFjZShhLCBiLmltcGwoKSk7IHJldHVybiAqdGhpczsgfQogICAgIFN0cmluZyYgcmVw
bGFjZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgbGVuLCBjb25zdCBTdHJpbmcmIGIpIHsgaWYg
KG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKGluZGV4LCBsZW4sIGIuaW1wbCgpKTsg
cmV0dXJuICp0aGlzOyB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICB2b2lk
IHRydW5jYXRlKHVuc2lnbmVkIGxlbik7CiAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgcG9zLCBp
bnQgbGVuID0gMSk7CiAKQEAgLTk2LDkgKzkzLDkgQEAKICAgICBTdHJpbmcgbG93ZXIoKSBjb25z
dDsKICAgICBTdHJpbmcgdXBwZXIoKSBjb25zdDsKIAotICAgIGNvbnN0IFFDaGFyKiB1bmljb2Rl
KCkgY29uc3Q7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBkZXByZWNhdGVkU3RyaW5nKCkgY29uc3Q7
Ci0gICAgCisgICAgLy8gUmV0dXJuIHRoZSBzdHJpbmcgd2l0aCBjYXNlIGZvbGRlZCBmb3IgY2Fz
ZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uLgorICAgIFN0cmluZyBmb2xkQ2FzZSgpIGNvbnN0Owor
CiAgICAgc3RhdGljIFN0cmluZyBudW1iZXIoaW50KTsKICAgICBzdGF0aWMgU3RyaW5nIG51bWJl
cih1bnNpZ25lZCk7CiAgICAgc3RhdGljIFN0cmluZyBudW1iZXIobG9uZyk7CkBAIC0xMDcsOSAr
MTA0LDkgQEAKICAgICAKICAgICBzdGF0aWMgU3RyaW5nIHNwcmludGYoY29uc3QgY2hhciAqLCAu
Li4pCiAjaWYgX19HTlVDX18KLSAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEs
IDIpKSkKKyAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCiAj
ZW5kaWYKLSAgICA7CisgICAgICAgIDsKIAogICAgIGludCB0b0ludChib29sKiBvayA9IDApIGNv
bnN0OwogICAgIExlbmd0aCogdG9MZW5ndGhBcnJheShpbnQmIGxlbikgY29uc3Q7CkBAIC0xMzcs
NiArMTM0LDkgQEAKICAgICBjb25zdCBjaGFyICphc2NpaSgpIGNvbnN0OwogI2VuZGlmCiAKKyAg
ICBTdHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOworICAgIERlcHJlY2F0ZWRTdHJpbmcg
ZGVwcmVjYXRlZFN0cmluZygpIGNvbnN0OworICAgIAogcHJpdmF0ZToKICAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gbV9pbXBsOwogfTsKQEAgLTE0NCwxMSArMTQ0LDkgQEAKIFN0cmluZyBvcGVyYXRv
cisoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiBTdHJpbmcgb3BlcmF0b3IrKGNvbnN0
IFN0cmluZyYsIGNvbnN0IGNoYXIqKTsKIFN0cmluZyBvcGVyYXRvcisoY29uc3QgY2hhciosIGNv
bnN0IFN0cmluZyYpOwotU3RyaW5nIG9wZXJhdG9yKyhjb25zdCBTdHJpbmcmLCBRQ2hhcik7Ci1T
dHJpbmcgb3BlcmF0b3IrKFFDaGFyLCBjb25zdCBTdHJpbmcmKTsKLVN0cmluZyBvcGVyYXRvciso
Y29uc3QgU3RyaW5nJiwgY2hhcik7Ci1TdHJpbmcgb3BlcmF0b3IrKGNoYXIsIGNvbnN0IFN0cmlu
ZyYpOwogCitpbmxpbmUgU3RyaW5nJiBvcGVyYXRvcis9KFN0cmluZyYgYSwgY29uc3QgU3RyaW5n
JiBiKSB7IGEuYXBwZW5kKGIpOyByZXR1cm4gYTsgfQorCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChhLmltcGwo
KSwgYi5pbXBsKCkpOyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZyYgYSwg
Y29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIpOyB9CiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGNoYXIqIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gZXF1
YWwoYSwgYi5pbXBsKCkpOyB9CkBAIC0xNjIsNyArMTYwLDcgQEAKIGlubGluZSBib29sIGVxdWFs
SWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gZXF1
YWxJZ25vcmluZ0Nhc2UoYSwgYi5pbXBsKCkpOyB9CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT
dHJpbmcmIGEsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGIpOwotaW5saW5lIGJvb2wgb3BlcmF0
b3I9PSggY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgYiwgY29uc3QgU3RyaW5nJiBhKSB7IHJldHVy
biBhID09IGI7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyYgYiwgY29uc3QgU3RyaW5nJiBhKSB7IHJldHVybiBhID09IGI7IH0KIGlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBiKSB7IHJl
dHVybiAhKGEgPT0gYik7IH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyYgYiwgY29uc3QgU3RyaW5nJiBhICkgeyByZXR1cm4gIShhID09IGIpOyB9CiAKSW5k
ZXg6IHBsYXRmb3JtL1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9TdHJpbmdJ
bXBsLmgJKHJldmlzaW9uIDE0MjE2KQorKysgcGxhdGZvcm0vU3RyaW5nSW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCw2NSArMjQsNjcgQEAKICNpZm5kZWYgU3RyaW5nSW1wbF9oCiAjZGVmaW5l
IFN0cmluZ0ltcGxfaAogCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUg
IlNoYXJlZC5oIgorI2luY2x1ZGUgPGtqcy9pZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8a3htbGNv
cmUvRm9yd2FyZC5oPgogI2luY2x1ZGUgPGt4bWxjb3JlL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8dW5pY29kZS91bWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCiAjaWYgX19PQkpD
X18KIEBjbGFzcyBOU1N0cmluZzsKICNlbmRpZgogCitjbGFzcyBEZXByZWNhdGVkU3RyaW5nOwor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF0b21pY1N0cmluZzsKLXN0cnVjdCBRQ2hh
ckJ1ZmZlclRyYW5zbGF0b3I7CitzdHJ1Y3QgVUNoYXJCdWZmZXJUcmFuc2xhdG9yOwogc3RydWN0
IENTdHJpbmdUcmFuc2xhdG9yOwogc3RydWN0IExlbmd0aDsKIAotY2xhc3MgU3RyaW5nSW1wbCA6
IHB1YmxpYyBTaGFyZWQ8U3RyaW5nSW1wbD4sIE5vbmNvcHlhYmxlCi17CitjbGFzcyBTdHJpbmdJ
bXBsIDogcHVibGljIFNoYXJlZDxTdHJpbmdJbXBsPiwgTm9uY29weWFibGUgewogcHJpdmF0ZToK
ICAgICBzdHJ1Y3QgV2l0aE9uZVJlZiB7IH07CiAgICAgU3RyaW5nSW1wbChXaXRoT25lUmVmKSA6
IG1fbGVuZ3RoKDApLCBtX2RhdGEoMCksIG1faGFzaCgwKSwgbV9pblRhYmxlKGZhbHNlKSB7IHJl
ZigpOyB9Ci0gICAgdm9pZCBpbml0V2l0aENoYXIoY29uc3QgY2hhciosIHVuc2lnbmVkIGxlbik7
Ci0gICAgdm9pZCBpbml0V2l0aFFDaGFyKGNvbnN0IFFDaGFyKiwgdW5zaWduZWQgbGVuKTsKKyAg
ICB2b2lkIGluaXQoY29uc3QgY2hhciosIHVuc2lnbmVkIGxlbik7CisgICAgdm9pZCBpbml0KGNv
bnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKIAogcHJvdGVjdGVkOgogICAgIFN0cmluZ0ltcGwo
KSA6IG1fbGVuZ3RoKDApLCBtX2RhdGEoMCksIG1faGFzaCgwKSwgbV9pblRhYmxlKGZhbHNlKSB7
IH0KIHB1YmxpYzoKLSAgICBTdHJpbmdJbXBsKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKKyAg
ICBTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKKyAgICBTdHJpbmdJbXBs
KGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBsZW4pOworICAgIFN0cmluZ0ltcGwoY29uc3QgY2hhciop
OwogICAgIFN0cmluZ0ltcGwoY29uc3QgS0pTOjpJZGVudGlmaWVyJik7CiAgICAgU3RyaW5nSW1w
bChjb25zdCBLSlM6OlVTdHJpbmcmKTsKLSAgICBTdHJpbmdJbXBsKGNvbnN0IFFDaGFyKiwgdW5z
aWduZWQgbGVuKTsKLSAgICBTdHJpbmdJbXBsKGNvbnN0IGNoYXIqKTsKLSAgICBTdHJpbmdJbXBs
KGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBsZW4pOwogICAgIH5TdHJpbmdJbXBsKCk7CiAKLSAgICBj
b25zdCBRQ2hhciogdW5pY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgICAKICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QgeyBpZiAobV9oYXNoID09IDApIG1faGFzaCA9IGNvbXB1dGVIYXNoKG1f
ZGF0YSwgbV9sZW5ndGgpOyByZXR1cm4gbV9oYXNoOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIGNv
bXB1dGVIYXNoKGNvbnN0IFFDaGFyKiwgdW5zaWduZWQgbGVuKTsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZUhhc2goY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwogICAgIHN0YXRpYyB1
bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBjaGFyKik7CiAgICAgCiAgICAgdm9pZCBhcHBlbmQo
Y29uc3QgU3RyaW5nSW1wbCopOwogICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFN0cmluZ0ltcGwqLCB1
bnNpZ25lZCBwb3MpOwogICAgIHZvaWQgdHJ1bmNhdGUoaW50IGxlbik7CiAgICAgdm9pZCByZW1v
dmUodW5zaWduZWQgcG9zLCBpbnQgbGVuID0gMSk7Ci0gICAgCisKICAgICBTdHJpbmdJbXBsKiBz
cGxpdCh1bnNpZ25lZCBwb3MpOwogICAgIFN0cmluZ0ltcGwqIGNvcHkoKSBjb25zdCB7IHJldHVy
biBuZXcgU3RyaW5nSW1wbChtX2RhdGEsIG1fbGVuZ3RoKTsgfQogCiAgICAgU3RyaW5nSW1wbCog
c3Vic3RyaW5nKHVuc2lnbmVkIHBvcywgdW5zaWduZWQgbGVuID0gVUlOVF9NQVgpOwogCi0gICAg
Y29uc3QgUUNoYXImIG9wZXJhdG9yW10gKGludCBwb3MpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVtw
b3NdOyB9CisgICAgVUNoYXIgb3BlcmF0b3JbXShpbnQgcG9zKSBjb25zdCB7IHJldHVybiBtX2Rh
dGFbcG9zXTsgfQogCiAgICAgTGVuZ3RoIHRvTGVuZ3RoKCkgY29uc3Q7Ci0gICAgCisKICAgICBi
b29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zT25s
eVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdDsKLSAgICAKKwog
ICAgIC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZSwgdW5saWtlIERlcHJlY2F0ZWRTdHJpbmcK
ICAgICBpbnQgdG9JbnQoYm9vbCogb2sgPSAwKSBjb25zdDsKIApAQCAtOTEsMTggKzkzLDE5IEBA
CiAgICAgYm9vbCBpc0xvd2VyKCkgY29uc3Q7CiAgICAgU3RyaW5nSW1wbCogbG93ZXIoKSBjb25z
dDsKICAgICBTdHJpbmdJbXBsKiB1cHBlcigpIGNvbnN0OwotICAgIFN0cmluZ0ltcGwqIGNhcGl0
YWxpemUoUUNoYXIgcHJldmlvdXMpIGNvbnN0OworICAgIFN0cmluZ0ltcGwqIGNhcGl0YWxpemUo
VUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0OworICAgIFN0cmluZ0ltcGwqIGZvbGRDYXNl
KCkgY29uc3Q7CiAKICAgICBpbnQgZmluZChjb25zdCBjaGFyKiwgaW50IGluZGV4ID0gMCwgYm9v
bCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3Q7Ci0gICAgaW50IGZpbmQoUUNoYXIsIGludCBp
bmRleCA9IDApIGNvbnN0OworICAgIGludCBmaW5kKFVDaGFyLCBpbnQgaW5kZXggPSAwKSBjb25z
dDsKICAgICBpbnQgZmluZChjb25zdCBTdHJpbmdJbXBsKiwgaW50IGluZGV4LCBib29sIGNhc2VT
ZW5zaXRpdmUgPSB0cnVlKSBjb25zdDsKIAogICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJp
bmdJbXBsKiBtX2RhdGEsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0IHsgcmV0dXJu
IGZpbmQobV9kYXRhLCAwLCBjYXNlU2Vuc2l0aXZlKSA9PSAwOyB9CiAgICAgYm9vbCBlbmRzV2l0
aChjb25zdCBTdHJpbmdJbXBsKiwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3Q7CiAK
ICAgICAvLyBEb2VzIG5vdCBtb2RpZnkgdGhlIHN0cmluZy4KLSAgICBTdHJpbmdJbXBsKiByZXBs
YWNlKFFDaGFyLCBRQ2hhcik7Ci0gICAgU3RyaW5nSW1wbCogcmVwbGFjZShRQ2hhciBhLCBjb25z
dCBTdHJpbmdJbXBsKiBiKTsKKyAgICBTdHJpbmdJbXBsKiByZXBsYWNlKFVDaGFyLCBVQ2hhcik7
CisgICAgU3RyaW5nSW1wbCogcmVwbGFjZShVQ2hhciwgY29uc3QgU3RyaW5nSW1wbCopOwogICAg
IFN0cmluZ0ltcGwqIHJlcGxhY2UodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgY29uc3Qg
U3RyaW5nSW1wbCopOwogCiAgICAgc3RhdGljIFN0cmluZ0ltcGwqIGVtcHR5KCk7CkBAIC0xMTks
MTIgKzEyMiwxNCBAQAogICAgIG9wZXJhdG9yIE5TU3RyaW5nKigpIGNvbnN0OwogI2VuZGlmCiAK
KyAgICBTdHJpbmdJbXBsKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKKwogcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICBRQ2hhciogbV9kYXRhOworICAgIFVDaGFyKiBtX2Rh
dGE7CiAKICAgICBmcmllbmQgY2xhc3MgQXRvbWljU3RyaW5nOwotICAgIGZyaWVuZCBzdHJ1Y3Qg
UUNoYXJCdWZmZXJUcmFuc2xhdG9yOworICAgIGZyaWVuZCBzdHJ1Y3QgVUNoYXJCdWZmZXJUcmFu
c2xhdG9yOwogICAgIGZyaWVuZCBzdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3I7CiAgICAgCiAgICAg
bXV0YWJsZSB1bnNpZ25lZCBtX2hhc2g7CkBAIC0xMzMsMTEgKzEzOCwxMSBAQAogCiBib29sIGVx
dWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBTdHJpbmdJbXBsKik7CiBib29sIGVxdWFsKGNv
bnN0IFN0cmluZ0ltcGwqLCBjb25zdCBjaGFyKik7Ci1ib29sIGVxdWFsKGNvbnN0IGNoYXIqLCBj
b25zdCBTdHJpbmdJbXBsKik7CitpbmxpbmUgYm9vbCBlcXVhbChjb25zdCBjaGFyKiBhLCBjb25z
dCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbChiLCBhKTsgfQogCiBib29sIGVxdWFsSWdu
b3JpbmdDYXNlKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBTdHJpbmdJbXBsKik7CiBib29sIGVx
dWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBjaGFyKik7Ci1ib29sIGVx
dWFsSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqLCBjb25zdCBTdHJpbmdJbXBsKik7CitpbmxpbmUg
Ym9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBi
KSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShiLCBhKTsgfQogCiB9CiAKSW5kZXg6IHBsYXRm
b3JtL1NlZ21lbnRlZFN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL1NlZ21lbnRlZFN0
cmluZy5oCShyZXZpc2lvbiAxNDIxNikKKysrIHBsYXRmb3JtL1NlZ21lbnRlZFN0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgS0RFIGxpYnJhcmllcwogCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LTYgQXBwbGUgQ29t
cHV0ZXIKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIK
IAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTgsMTMgKzE4LDExIEBACiAgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICAg
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogKi8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8KLS8vIEtERSBIVE1MIFdpZGdldCAtLSBTdHJpbmcgY2xhc3MKIAotI2lmbmRlZiBLSFRNTFNU
UklOR19ICi0jZGVmaW5lIEtIVE1MU1RSSU5HX0gKKyNpZm5kZWYgU2VnbWVudGVkU3RyaW5nX2gK
KyNkZWZpbmUgU2VnbWVudGVkU3RyaW5nX2gKIAorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcu
aCIKICNpbmNsdWRlICJEZXByZWNhdGVkVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KQEAgLTM5LDM0ICszNyw0MSBAQAogICAgIAog
ICAgIFNlZ21lbnRlZFN1YnN0cmluZygpIDogbV9sZW5ndGgoMCksIG1fY3VycmVudCgwKSB7fQog
ICAgIFNlZ21lbnRlZFN1YnN0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzdHIpIDogbV9z
dHJpbmcoc3RyKSwgbV9sZW5ndGgoc3RyLmxlbmd0aCgpKSB7Ci0gICAgICAgIG1fY3VycmVudCA9
IG1fbGVuZ3RoID09IDAgPyAwIDogbV9zdHJpbmcuc3RhYmxlVW5pY29kZSgpOworICAgICAgICBt
X2N1cnJlbnQgPSBtX2xlbmd0aCA9PSAwID8gMCA6IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNo
YXIqPihtX3N0cmluZy5zdGFibGVVbmljb2RlKCkpOwogICAgIH0KIAotICAgIFNlZ21lbnRlZFN1
YnN0cmluZyhjb25zdCBRQ2hhciAqc3RyLCBpbnQgbGVuZ3RoKSA6IG1fbGVuZ3RoKGxlbmd0aCks
IG1fY3VycmVudChsZW5ndGggPT0gMCA/IDAgOiBzdHIpIHt9CisgICAgU2VnbWVudGVkU3Vic3Ry
aW5nKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW5ndGgpIDogbV9sZW5ndGgobGVuZ3RoKSwgbV9j
dXJyZW50KGxlbmd0aCA9PSAwID8gMCA6IHN0cikge30KIAogICAgIHZvaWQgY2xlYXIoKSB7IG1f
bGVuZ3RoID0gMDsgbV9jdXJyZW50ID0gMDsgfQogICAgIAotICAgIHZvaWQgYXBwZW5kVG8oRGVw
cmVjYXRlZFN0cmluZyAmc3RyKSBjb25zdCB7Ci0gICAgICAgIGlmIChtX3N0cmluZy51bmljb2Rl
KCkgPT0gbV9jdXJyZW50KSB7CisgICAgdm9pZCBhcHBlbmRUbyhEZXByZWNhdGVkU3RyaW5nJiBz
dHIpIGNvbnN0IHsKKyAgICAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPiht
X3N0cmluZy51bmljb2RlKCkpID09IG1fY3VycmVudCkgewogICAgICAgICAgICAgaWYgKHN0ci5p
c0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgc3RyID0gbV9zdHJpbmc7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZChtX3N0cmluZyk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBzdHIuaW5zZXJ0KHN0ci5sZW5ndGgoKSwgbV9jdXJyZW50LCBtX2xl
bmd0aCk7CisgICAgICAgICAgICBzdHIuaW5zZXJ0KHN0ci5sZW5ndGgoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBRQ2hhcio+KG1fY3VycmVudCksIG1fbGVuZ3RoKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIERlcHJlY2F0ZWRTdHJpbmcgbV9zdHJpbmc7CiAgICAgaW50IG1fbGVuZ3RoOwot
ICAgIGNvbnN0IFFDaGFyICptX2N1cnJlbnQ7CisgICAgY29uc3QgVUNoYXIqIG1fY3VycmVudDsK
IH07CiAKIGNsYXNzIFNlZ21lbnRlZFN0cmluZyB7CiBwdWJsaWM6Ci0gICAgU2VnbWVudGVkU3Ry
aW5nKCkgOiBtX2N1cnJlbnRDaGFyKDApLCBtX2xpbmVzKDApLCBtX2NvbXBvc2l0ZShmYWxzZSkg
e30KLSAgICBTZWdtZW50ZWRTdHJpbmcoY29uc3QgUUNoYXIgKnN0ciwgaW50IGxlbmd0aCkgOiBt
X2N1cnJlbnRTdHJpbmcoc3RyLCBsZW5ndGgpLCBtX2N1cnJlbnRDaGFyKG1fY3VycmVudFN0cmlu
Zy5tX2N1cnJlbnQpLCBtX2xpbmVzKDApLCBtX2NvbXBvc2l0ZShmYWxzZSkge30KLSAgICBTZWdt
ZW50ZWRTdHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmc3RyKSA6IG1fY3VycmVudFN0cmlu
ZyhzdHIpLCBtX2N1cnJlbnRDaGFyKG1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQpLCBtX2xpbmVz
KDApLCBtX2NvbXBvc2l0ZShmYWxzZSkge30KKyAgICBTZWdtZW50ZWRTdHJpbmcoKQorICAgICAg
ICA6IG1fcHVzaGVkQ2hhcjEoMCksIG1fcHVzaGVkQ2hhcjIoMCksIG1fY3VycmVudENoYXIoMCkK
KyAgICAgICAgLCBtX2xpbmVzKDApLCBtX2NvbXBvc2l0ZShmYWxzZSkge30KKyAgICBTZWdtZW50
ZWRTdHJpbmcoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbmd0aCkgOiBtX3B1c2hlZENoYXIxKDAp
LCBtX3B1c2hlZENoYXIyKDApCisgICAgICAgICwgbV9jdXJyZW50U3RyaW5nKHN0ciwgbGVuZ3Ro
KSwgbV9jdXJyZW50Q2hhcihtX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50KQorICAgICAgICAsIG1f
bGluZXMoMCksIG1fY29tcG9zaXRlKGZhbHNlKSB7fQorICAgIFNlZ21lbnRlZFN0cmluZyhjb25z
dCBEZXByZWNhdGVkU3RyaW5nICZzdHIpCisgICAgICAgIDogbV9wdXNoZWRDaGFyMSgwKSwgbV9w
dXNoZWRDaGFyMigwKSwgbV9jdXJyZW50U3RyaW5nKHN0cikKKyAgICAgICAgLCBtX2N1cnJlbnRD
aGFyKG1fY3VycmVudFN0cmluZy5tX2N1cnJlbnQpCisgICAgICAgICwgbV9saW5lcygwKSwgbV9j
b21wb3NpdGUoZmFsc2UpIHt9CiAgICAgU2VnbWVudGVkU3RyaW5nKGNvbnN0IFNlZ21lbnRlZFN0
cmluZyYpOwogCiAgICAgY29uc3QgU2VnbWVudGVkU3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgU2Vn
bWVudGVkU3RyaW5nJik7CkBAIC03NiwxMiArODEsMTIgQEAKICAgICB2b2lkIGFwcGVuZChjb25z
dCBTZWdtZW50ZWRTdHJpbmcgJik7CiAgICAgdm9pZCBwcmVwZW5kKGNvbnN0IFNlZ21lbnRlZFN0
cmluZyAmKTsKICAgICAKLSAgICB2b2lkIHB1c2goUUNoYXIgYykgewotICAgICAgICBpZiAoIW1f
cHVzaGVkQ2hhcjEudW5pY29kZSgpKSB7CisgICAgdm9pZCBwdXNoKFVDaGFyIGMpIHsKKyAgICAg
ICAgaWYgKCFtX3B1c2hlZENoYXIxKSB7CiAgICAgICAgICAgICBtX3B1c2hlZENoYXIxID0gYzsK
LSAgICAgICAgICAgIG1fY3VycmVudENoYXIgPSBtX3B1c2hlZENoYXIxLnVuaWNvZGUoKSA/ICZt
X3B1c2hlZENoYXIxIDogbV9jdXJyZW50U3RyaW5nLm1fY3VycmVudDsKKyAgICAgICAgICAgIG1f
Y3VycmVudENoYXIgPSBtX3B1c2hlZENoYXIxID8gJm1fcHVzaGVkQ2hhcjEgOiBtX2N1cnJlbnRT
dHJpbmcubV9jdXJyZW50OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXNzZXJ0KCFt
X3B1c2hlZENoYXIyLnVuaWNvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnQoIW1fcHVzaGVkQ2hh
cjIpOwogICAgICAgICAgICAgbV9wdXNoZWRDaGFyMiA9IGM7CiAgICAgICAgIH0KICAgICB9CkBA
IC05MCw3ICs5NSw3IEBACiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKICAgICB2b2lk
IGFkdmFuY2UoKSB7Ci0gICAgICAgIGlmIChtX3B1c2hlZENoYXIxLnVuaWNvZGUoKSkgeworICAg
ICAgICBpZiAobV9wdXNoZWRDaGFyMSkgewogICAgICAgICAgICAgbV9wdXNoZWRDaGFyMSA9IG1f
cHVzaGVkQ2hhcjI7CiAgICAgICAgICAgICBtX3B1c2hlZENoYXIyID0gMDsKICAgICAgICAgfSBl
bHNlIGlmIChtX2N1cnJlbnRTdHJpbmcubV9jdXJyZW50KSB7CkBAIC05OCwxMCArMTAzLDEwIEBA
CiAgICAgICAgICAgICBpZiAoLS1tX2N1cnJlbnRTdHJpbmcubV9sZW5ndGggPT0gMCkKICAgICAg
ICAgICAgICAgICBhZHZhbmNlU3Vic3RyaW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgbV9jdXJy
ZW50Q2hhciA9IG1fcHVzaGVkQ2hhcjEudW5pY29kZSgpID8gJm1fcHVzaGVkQ2hhcjEgOiBtX2N1
cnJlbnRTdHJpbmcubV9jdXJyZW50OworICAgICAgICBtX2N1cnJlbnRDaGFyID0gbV9wdXNoZWRD
aGFyMSA/ICZtX3B1c2hlZENoYXIxIDogbV9jdXJyZW50U3RyaW5nLm1fY3VycmVudDsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBlc2NhcGVkKCkgY29uc3QgeyByZXR1cm4gbV9wdXNoZWRDaGFyMS51
bmljb2RlKCk7IH0KKyAgICBib29sIGVzY2FwZWQoKSBjb25zdCB7IHJldHVybiBtX3B1c2hlZENo
YXIxOyB9CiAKICAgICBpbnQgbGluZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5lczsgfQog
ICAgIHZvaWQgcmVzZXRMaW5lQ291bnQoKSB7IG1fbGluZXMgPSAwOyB9CkBAIC0xMDksMjAgKzEx
NCwyMCBAQAogICAgIERlcHJlY2F0ZWRTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAogICAgIHZv
aWQgb3BlcmF0b3IrKygpIHsgYWR2YW5jZSgpOyB9Ci0gICAgY29uc3QgUUNoYXIgJm9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuICpjdXJyZW50KCk7IH0KLSAgICBjb25zdCBRQ2hhciAqb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQoKTsgfQorICAgIGNvbnN0IFVDaGFyJiBvcGVy
YXRvciooKSBjb25zdCB7IHJldHVybiAqY3VycmVudCgpOyB9CisgICAgY29uc3QgVUNoYXIqIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBjdXJyZW50KCk7IH0KICAgICAKIHByaXZhdGU6CiAg
ICAgdm9pZCBhcHBlbmQoY29uc3QgU2VnbWVudGVkU3Vic3RyaW5nICYpOwogICAgIHZvaWQgcHJl
cGVuZChjb25zdCBTZWdtZW50ZWRTdWJzdHJpbmcgJik7CiAKICAgICB2b2lkIGFkdmFuY2VTdWJz
dHJpbmcoKTsKLSAgICBjb25zdCBRQ2hhciAqY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
cmVudENoYXI7IH0KKyAgICBjb25zdCBVQ2hhciogY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VycmVudENoYXI7IH0KIAotICAgIFFDaGFyIG1fcHVzaGVkQ2hhcjE7Ci0gICAgUUNoYXIgbV9w
dXNoZWRDaGFyMjsKKyAgICBVQ2hhciBtX3B1c2hlZENoYXIxOworICAgIFVDaGFyIG1fcHVzaGVk
Q2hhcjI7CiAgICAgU2VnbWVudGVkU3Vic3RyaW5nIG1fY3VycmVudFN0cmluZzsKLSAgICBjb25z
dCBRQ2hhciAqbV9jdXJyZW50Q2hhcjsKKyAgICBjb25zdCBVQ2hhciogbV9jdXJyZW50Q2hhcjsK
ICAgICBEZXByZWNhdGVkVmFsdWVMaXN0PFNlZ21lbnRlZFN1YnN0cmluZz4gbV9zdWJzdHJpbmdz
OwogICAgIGludCBtX2xpbmVzOwogICAgIGJvb2wgbV9jb21wb3NpdGU7CkluZGV4OiBwbGF0Zm9y
bS9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vRm9udC5oCShyZXZpc2lvbiAxNDIxNikK
KysrIHBsYXRmb3JtL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMjYgKzczLDI1IEBACiAg
ICAgdm9pZCB1cGRhdGUoKSBjb25zdDsKIAogICAgIHZvaWQgZHJhd1RleHQoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UG9pbnQmLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLAotICAgICAgICAg
ICAgICAgICAgY29uc3QgUUNoYXIqLCBpbnQgbGVuLCBpbnQgZnJvbSwgaW50IHRvLCBpbnQgdG9B
ZGQsIAorICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqLCBpbnQgbGVuLCBpbnQgZnJvbSwg
aW50IHRvLCBpbnQgdG9BZGQsIAogICAgICAgICAgICAgICAgICAgVGV4dERpcmVjdGlvbiwgYm9v
bCB2aXN1YWxseU9yZGVyZWQpIGNvbnN0OwogICAgIHZvaWQgZHJhd0hpZ2hsaWdodEZvclRleHQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCBpbnQgaCwgaW50IHRhYldpZHRoLCBp
bnQgeHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDaGFyKiwgaW50
IGxlbiwgaW50IGZyb20sIGludCB0bywgaW50IHRvQWRkLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiwgaW50IGxlbiwgaW50IGZyb20sIGludCB0bywgaW50IHRv
QWRkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHREaXJlY3Rpb24gZCwgYm9v
bCB2aXN1YWxseU9yZGVyZWQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Owog
ICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50
JiwgaW50IHlPZmZzZXQsIGludCB3aWR0aCkgY29uc3Q7CiAgICAgdm9pZCBkcmF3TGluZUZvck1p
c3NwZWxsaW5nKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50JiwgaW50IHdpZHRoKSBj
b25zdDsKICAgICBpbnQgbWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzKEdyYXBoaWNzQ29udGV4dCop
IGNvbnN0OwogCi0gICAgZmxvYXQgZmxvYXRXaWR0aChjb25zdCBRQ2hhciosIGludCBzbGVuLCBp
bnQgcG9zLCBpbnQgbGVuLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBib29sIHJ1blJvdW5kaW5n
ID0gdHJ1ZSkgY29uc3Q7CisgICAgZmxvYXQgZmxvYXRXaWR0aChjb25zdCBVQ2hhciosIGludCBz
bGVuLCBpbnQgcG9zLCBpbnQgbGVuLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zLCBib29sIHJ1blJv
dW5kaW5nID0gdHJ1ZSkgY29uc3Q7CiAgICAgCi0gICAgaW50IGNoZWNrU2VsZWN0aW9uUG9pbnQo
Y29uc3QgUUNoYXIqLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50IHRvQWRkLCBpbnQg
dGFiV2lkdGgsIGludCB4cG9zLAorICAgIGludCBjaGVja1NlbGVjdGlvblBvaW50KGNvbnN0IFVD
aGFyKiwgaW50IHNsZW4sIGludCBwb3MsIGludCBsZW4sIGludCB0b0FkZCwgaW50IHRhYldpZHRo
LCBpbnQgeHBvcywKICAgICAgICAgaW50IHgsIFRleHREaXJlY3Rpb24sIGJvb2wgdmlzdWFsbHlP
cmRlcmVkLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKICAgICBJbnRSZWN0IHNl
bGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IEludFBvaW50JiwgaW50IGgsIGludCB0YWJXaWR0aCwg
aW50IHhwb3MsIAotICAgICAgICBjb25zdCBRQ2hhciosIGludCBzbGVuLCBpbnQgcG9zLCBpbnQg
bGVuLCBpbnQgd2lkdGgsCisgICAgICAgIGNvbnN0IFVDaGFyKiwgaW50IHNsZW4sIGludCBwb3Ms
IGludCBsZW4sIGludCB3aWR0aCwKICAgICAgICAgYm9vbCBydGwsIGJvb2wgdmlzdWFsbHlPcmRl
cmVkID0gZmFsc2UsIGludCBmcm9tID0gLTEsIGludCB0byA9IC0xKSBjb25zdDsKICAgICAKLSAg
ICBpbnQgd2lkdGgoY29uc3QgUUNoYXIqLCBpbnQgc2xlbiwgaW50IHBvcywgaW50IGxlbiwgaW50
IHRhYldpZHRoLCBpbnQgeHBvcykgY29uc3Q7Ci0gICAgaW50IHdpZHRoKGNvbnN0IFFDaGFyKiBj
aHMsIGludCBzbGVuLCBpbnQgdGFiV2lkdGggPSAwLCBpbnQgeHBvcyA9IDApIGNvbnN0IHsgcmV0
dXJuIHdpZHRoKGNocywgc2xlbiwgMCwgc2xlbiwgdGFiV2lkdGgsIHhwb3MpOyB9Ci0gICAgaW50
IHdpZHRoKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHMpIGNvbnN0IHsgcmV0dXJuIHdpZHRoKHMu
dW5pY29kZSgpLCBzLmxlbmd0aCgpLCAwLCAwKTsgfQorICAgIGludCB3aWR0aChjb25zdCBVQ2hh
ciosIGludCBzbGVuLCBpbnQgcG9zLCBpbnQgbGVuLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zKSBj
b25zdDsKKyAgICBpbnQgd2lkdGgoY29uc3QgVUNoYXIqIGNocywgaW50IHNsZW4sIGludCB0YWJX
aWR0aCA9IDAsIGludCB4cG9zID0gMCkgY29uc3QgeyByZXR1cm4gd2lkdGgoY2hzLCBzbGVuLCAw
LCBzbGVuLCB0YWJXaWR0aCwgeHBvcyk7IH0KIAogICAgIGJvb2wgaXNTbWFsbENhcHMoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsgfQogCkluZGV4OiBwbGF0
Zm9ybS9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vQ29sb3IuY3BwCShyZXZpc2lv
biAxNDIxNikKKysrIHBsYXRmb3JtL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAKKyNpbmNs
dWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CiAKSW5kZXg6IGJpbmRpbmdzL2pzL0pTWE1M
U2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMvSlNYTUxTZXJpYWxpemVy
LmNwcAkocmV2aXNpb24gMTQyMTYpCisrKyBiaW5kaW5ncy9qcy9KU1hNTFNlcmlhbGl6ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNYTUxTZXJpYWxp
emVyLmgiCiAjaW5jbHVkZSAiSlNYTUxTZXJpYWxpemVyLmx1dC5oIgogCisjaW5jbHVkZSAiRGVw
cmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAi
a2pzX2RvbS5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgpJbmRleDogYmluZGluZ3MvanMva2pzX2Nz
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMva2pzX2Nzcy5jcHAJKHJldmlzaW9uIDE0
MjE2KQorKysgYmluZGluZ3MvanMva2pzX2Nzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcg
KzQ4LDcgQEAKIAogICAgIGludCBpID0gcHJvcC5sZW5ndGgoKTsKICAgICB3aGlsZSAoLS1pKSB7
Ci0gICAgICAgIGNoYXIgYyA9IHByb3BbaV0ubGF0aW4xKCk7CisgICAgICAgIDo6VUNoYXIgYyA9
IHByb3BbaV0udW5pY29kZSgpOwogICAgICAgICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpCiAg
ICAgICAgICAgICBwcm9wLmluc2VydChpLCAnLScpOwogICAgIH0KSW5kZXg6IGJpbmRpbmdzL2pz
L2tqc193aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL2tqc193aW5kb3cuY3Bw
CShyZXZpc2lvbiAxNDIxNikKKysrIGJpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzc4LDcgKzEzNzgsNyBAQAogfQogCiAvLyBUaG91Z2ggaXNzcGFjZSgpIGNv
bnNpZGVycyBcdCBhbmQgXHYgdG8gYmUgd2hpdGVzcGFjZSwgV2luIElFIGRvZXNuJ3QuCi1zdGF0
aWMgYm9vbCBpc1NlcGFyYXRvcihRQ2hhciBjKQorc3RhdGljIGJvb2wgaXNTZXBhcmF0b3IoVUNo
YXIgYykKIHsKICAgICByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8IGMgPT0gJ1xuJyB8
fCBjID09ICdccicgfHwgYyA9PSAnPScgfHwgYyA9PSAnLCcgfHwgYyA9PSAnXDAnOwogfQpJbmRl
eDogYmluZGluZ3MvanMva2pzX3Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9r
anNfcHJveHkuY3BwCShyZXZpc2lvbiAxNDIxNikKKysrIGJpbmRpbmdzL2pzL2tqc19wcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1LSlNQcm94eTo6S0pTUHJveHkoRnJhbWUgKmZyYW1lKQorS0pTUHJveHk6OktKU1Byb3h5
KEZyYW1lKiBmcmFtZSkKIHsKICAgICBtX3NjcmlwdCA9IDA7CiAgICAgbV9mcmFtZSA9IGZyYW1l
OwpAQCAtNDgsNyArNDgsNyBAQAogICAgIENvbGxlY3Rvcjo6Y29sbGVjdCgpOwogfQogCi1KU1Zh
bHVlKiBLSlNQcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgaW50IGJhc2VM
aW5lLCBjb25zdCBTdHJpbmcmIHN0ciwgTm9kZSAqbikgCitKU1ZhbHVlKiBLSlNQcm94eTo6ZXZh
bHVhdGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgaW50IGJhc2VMaW5lLCBjb25zdCBTdHJpbmcm
IHN0ciwgTm9kZSogbikgCiB7CiAgIC8vIGV2YWx1YXRlIGNvZGUuIFJldHVybnMgdGhlIEpTIHJl
dHVybiB2YWx1ZSBvciAwCiAgIC8vIGlmIHRoZXJlIHdhcyBub25lLCBhbiBlcnJvciBvY2N1cmVk
IG9yIHRoZSB0eXBlIGNvdWxkbid0IGJlIGNvbnZlcnRlZC4KQEAgLTY1LDcgKzY1LDcgQEAKICAg
SlNMb2NrIGxvY2s7CiAKICAgSlNWYWx1ZSogdGhpc05vZGUgPSBuID8gV2luZG93OjpyZXRyaWV2
ZShtX2ZyYW1lKSA6IHRvSlMobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSwgbik7Ci0gIENvbXBsZXRp
b24gY29tcCA9IG1fc2NyaXB0LT5ldmFsdWF0ZShmaWxlbmFtZSwgYmFzZUxpbmUsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgS0pTOjpVQ2hhciAqPihzdHIudW5pY29kZSgpKSwgc3RyLmxlbmd0aCgp
LCB0aGlzTm9kZSk7CisgIENvbXBsZXRpb24gY29tcCA9IG1fc2NyaXB0LT5ldmFsdWF0ZShmaWxl
bmFtZSwgYmFzZUxpbmUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgS0pTOjpVQ2hhcio+KHN0ci5j
aGFyYWN0ZXJzKCkpLCBzdHIubGVuZ3RoKCksIHRoaXNOb2RlKTsKIAogICBpZiAoY29tcC5jb21w
bFR5cGUoKSA9PSBOb3JtYWwgfHwgY29tcC5jb21wbFR5cGUoKSA9PSBSZXR1cm5WYWx1ZSkKICAg
ICByZXR1cm4gY29tcC52YWx1ZSgpOwpAQCAtOTEsNyArOTEsNyBAQAogICB9CiB9CiAKLUV2ZW50
TGlzdGVuZXIqIEtKU1Byb3h5OjpjcmVhdGVIVE1MRXZlbnRIYW5kbGVyKGNvbnN0IFN0cmluZyYg
ZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIE5vZGUgKm5vZGUpCitFdmVudExpc3Rl
bmVyKiBLSlNQcm94eTo6Y3JlYXRlSFRNTEV2ZW50SGFuZGxlcihjb25zdCBTdHJpbmcmIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBOb2RlKiBub2RlKQogewogICAgIGluaXRTY3Jp
cHRJZk5lZWRlZCgpOwogICAgIEpTTG9jayBsb2NrOwpAQCAtOTksNyArOTksNyBAQAogfQogCiAj
aWYgU1ZHX1NVUFBPUlQKLUV2ZW50TGlzdGVuZXIqIEtKU1Byb3h5OjpjcmVhdGVTVkdFdmVudEhh
bmRsZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgTm9k
ZSAqbm9kZSkKK0V2ZW50TGlzdGVuZXIqIEtKU1Byb3h5OjpjcmVhdGVTVkdFdmVudEhhbmRsZXIo
Y29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgTm9kZSogbm9k
ZSkKIHsKICAgICBpbml0U2NyaXB0SWZOZWVkZWQoKTsKICAgICBKU0xvY2sgbG9jazsKQEAgLTEw
Nyw3ICsxMDcsNyBAQAogfQogI2VuZGlmCiAKLXZvaWQgS0pTUHJveHk6OmZpbmlzaGVkV2l0aEV2
ZW50KEV2ZW50ICpldmVudCkKK3ZvaWQgS0pTUHJveHk6OmZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50
KiBldmVudCkKIHsKICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgRE9NIGltcGxlbWVudGF0
aW9uIGhhcyBmaW5pc2hlZCB3aXRoIGEgcGFydGljdWxhciBldmVudC4gVGhpcwogICAvLyBpcyB0
aGUgY2FzZSBpbiBzaXRhdGlvbnMgd2hlcmUgYW4gZXZlbnQgaGFzIGJlZW4gY3JlYXRlZCBqdXN0
IGZvciB0ZW1wb3JhcnkgdXNhZ2UsCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgbV9zY3JpcHQtPmZv
cmdldERPTU9iamVjdChldmVudCk7CiB9CiAKLVNjcmlwdEludGVycHJldGVyICpLSlNQcm94eTo6
aW50ZXJwcmV0ZXIoKQorU2NyaXB0SW50ZXJwcmV0ZXIqIEtKU1Byb3h5OjppbnRlcnByZXRlcigp
CiB7CiAgIGluaXRTY3JpcHRJZk5lZWRlZCgpOwogICBhc3NlcnQobV9zY3JpcHQpOwpAQCAtMTI3
LDEyICsxMjcsMTIgQEAKIGNsYXNzIFRlc3RGdW5jdGlvbkltcCA6IHB1YmxpYyBET01PYmplY3Qg
ewogcHVibGljOgogICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9Ci0gIHZpcnR1YWwgSlNWYWx1ZSAqY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpl
eGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CisgIHZpcnR1YWwgSlNW
YWx1ZSogY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBh
cmdzKTsKIH07CiAKLUpTVmFsdWUgKlRlc3RGdW5jdGlvbkltcDo6Y2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlICpleGVjLCBKU09iamVjdCAqLyp0aGlzT2JqKi8sIGNvbnN0IExpc3QgJmFyZ3MpCitK
U1ZhbHVlICpUZXN0RnVuY3Rpb25JbXA6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICBmcHJpbnRmKHN0ZGVyciwiLS0+ICVz
XG4iLGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOworICBmcHJpbnRmKHN0ZGVyciwi
LS0+ICVzXG4iLCBhcmdzWzBdLT50b1N0cmluZyhleGVjKS5hc2NpaSgpKTsKICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IGJpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gYmluZGluZ3Mvb2JqYy9ET01JbnRlcm5hbC5tbQkocmV2aXNpb24gMTQyMTYp
CisrKyBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAs
MTAgKzEwMCwxMCBAQAogCiBTdHJpbmdJbXBsOjpvcGVyYXRvciBOU1N0cmluZyAqKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOnJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5pY2hhciAqPihtX2RhdGEpIGxlbmd0aDptX2xlbmd0aF07CisgICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczptX2RhdGEgbGVuZ3RoOm1fbGVuZ3Ro
XTsKIH0KIAotU3RyaW5nOjpTdHJpbmcoTlNTdHJpbmcgKnN0cikKK1N0cmluZzo6U3RyaW5nKE5T
U3RyaW5nKiBzdHIpCiB7CiAgICAgaWYgKCFzdHIpCiAgICAgICAgIHJldHVybjsKQEAgLTExMiwx
NiArMTEyLDkgQEAKICAgICBpZiAoc2l6ZSA9PSAwKQogICAgICAgICBtX2ltcGwgPSBTdHJpbmdJ
bXBsOjplbXB0eSgpOwogICAgIGVsc2UgewotICAgICAgICBVbmlDaGFyIGZpeGVkU2l6ZUJ1ZmZl
clsxMDI0XTsKLSAgICAgICAgVW5pQ2hhciAqYnVmZmVyOwotICAgICAgICBpZiAoc2l6ZSA+IHN0
YXRpY19jYXN0PENGSW5kZXg+KHNpemVvZihmaXhlZFNpemVCdWZmZXIpIC8gc2l6ZW9mKFVuaUNo
YXIpKSkKLSAgICAgICAgICAgIGJ1ZmZlciA9IHN0YXRpY19jYXN0PFVuaUNoYXIgKj4oZmFzdE1h
bGxvYyhzaXplICogc2l6ZW9mKFVuaUNoYXIpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGJ1ZmZlciA9IGZpeGVkU2l6ZUJ1ZmZlcjsKLSAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJz
KHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KHN0ciksIENGUmFuZ2VNYWtlKDAsIHNpemUp
LCBidWZmZXIpOwotICAgICAgICBtX2ltcGwgPSBuZXcgU3RyaW5nSW1wbChyZWludGVycHJldF9j
YXN0PGNvbnN0IFFDaGFyICo+KGJ1ZmZlciksICh1bnNpZ25lZClzaXplKTsKLSAgICAgICAgaWYg
KGJ1ZmZlciAhPSBmaXhlZFNpemVCdWZmZXIpCi0gICAgICAgICAgICBmYXN0RnJlZShidWZmZXIp
OworICAgICAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IGJ1ZmZlcihzaXplKTsKKyAgICAgICAgQ0ZT
dHJpbmdHZXRDaGFyYWN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZTdHJpbmdSZWY+KHN0ciksIENG
UmFuZ2VNYWtlKDAsIHNpemUpLCBidWZmZXIuZGF0YSgpKTsKKyAgICAgICAgbV9pbXBsID0gbmV3
IFN0cmluZ0ltcGwoYnVmZmVyLmRhdGEoKSwgc2l6ZSk7CiAgICAgfQogfQogCkluZGV4OiBodG1s
L0hUTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxUb2tlbml6ZXIuaAkocmV2
aXNpb24gMTQyMTYpCisrKyBodG1sL0hUTUxUb2tlbml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNyArODIsNyBAQAogICAgIEhUTUxUb2tlbml6ZXIoRG9jdW1lbnRGcmFnbWVudCopOwogICAg
IHZpcnR1YWwgfkhUTUxUb2tlbml6ZXIoKTsKIAotICAgIHZpcnR1YWwgYm9vbCB3cml0ZShjb25z
dCBTZWdtZW50ZWRTdHJpbmcgJnN0ciwgYm9vbCBhcHBlbmREYXRhKTsKKyAgICB2aXJ0dWFsIGJv
b2wgd3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCBhcHBlbmREYXRhKTsKICAgICB2
aXJ0dWFsIHZvaWQgZmluaXNoKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvcmNlU3luY2hyb25v
dXMoYm9vbCBmb3JjZSk7CiAgICAgdmlydHVhbCBib29sIGlzV2FpdGluZ0ZvclNjcmlwdHMoKSBj
b25zdDsKQEAgLTEwNiwxMSArMTA2LDExIEBACiAgICAgU3RhdGUgcGFyc2VUZXh0KFNlZ21lbnRl
ZFN0cmluZyYsIFN0YXRlKTsKICAgICBTdGF0ZSBwYXJzZVNwZWNpYWwoU2VnbWVudGVkU3RyaW5n
JiwgU3RhdGUpOwogICAgIFN0YXRlIHBhcnNlVGFnKFNlZ21lbnRlZFN0cmluZyYsIFN0YXRlKTsK
LSAgICBTdGF0ZSBwYXJzZUVudGl0eShTZWdtZW50ZWRTdHJpbmcgJiwgUUNoYXIqJiBkZXN0LCBT
dGF0ZSwgdW5zaWduZWQmIF9jQnVmZmVyUG9zLCBib29sIHN0YXJ0LCBib29sIHBhcnNpbmdUYWcp
OworICAgIFN0YXRlIHBhcnNlRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFVDaGFyKiYgZGVzdCwg
U3RhdGUsIHVuc2lnbmVkJiBfY0J1ZmZlclBvcywgYm9vbCBzdGFydCwgYm9vbCBwYXJzaW5nVGFn
KTsKICAgICBTdGF0ZSBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihTZWdtZW50ZWRTdHJpbmcm
LCBTdGF0ZSk7CiAgICAgU3RhdGUgc2NyaXB0SGFuZGxlcihTdGF0ZSk7CiAgICAgU3RhdGUgc2Ny
aXB0RXhlY3V0aW9uKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHNjcmlwdCwgU3RhdGUgc3RhdGUs
IERlcHJlY2F0ZWRTdHJpbmcgc2NyaXB0VVJMID0gRGVwcmVjYXRlZFN0cmluZygpLCBpbnQgYmFz
ZUxpbmUgPSAwKTsKLSAgICB2b2lkIHNldFNyYyhjb25zdCBTZWdtZW50ZWRTdHJpbmcgJnNvdXJj
ZSk7CisgICAgdm9pZCBzZXRTcmMoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CiAKICAgICAvLyBj
aGVjayBpZiB3ZSBoYXZlIGVub3VnaCBzcGFjZSBpbiB0aGUgYnVmZmVyLgogICAgIC8vIGlmIG5v
dCBlbmxhcmdlIGl0CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICB2b2lkIGVubGFyZ2VCdWZmZXIo
aW50IGxlbik7CiAgICAgdm9pZCBlbmxhcmdlU2NyaXB0QnVmZmVyKGludCBsZW4pOwogCi0gICAg
Ym9vbCBjb250aW51ZVByb2Nlc3NpbmcoaW50JiBwcm9jZXNzZWRDb3VudCwgZG91YmxlIHN0YXJ0
VGltZSwgU3RhdGUgJnN0YXRlKTsKKyAgICBib29sIGNvbnRpbnVlUHJvY2Vzc2luZyhpbnQmIHBy
b2Nlc3NlZENvdW50LCBkb3VibGUgc3RhcnRUaW1lLCBTdGF0ZSYpOwogICAgIHZvaWQgdGltZXJG
aXJlZChUaW1lcjxIVE1MVG9rZW5pemVyPiopOwogICAgIHZvaWQgYWxsRGF0YVByb2Nlc3NlZCgp
OwogCkBAIC0xMzcsOCArMTM3LDggQEAKIAogICAgIC8vIEludGVybmFsIGJ1ZmZlcnMKICAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vCi0gICAgUUNoYXIgKmJ1ZmZlcjsKLSAgICBRQ2hhciAqZGVzdDsK
KyAgICBVQ2hhciogYnVmZmVyOworICAgIFVDaGFyKiBkZXN0OwogCiAgICAgVG9rZW4gY3VyclRv
a2VuOwogCkBAIC0xNDgsMTIgKzE0OCw3IEBACiAgICAgLy8gVG9rZW5pemVyIGZsYWdzCiAgICAg
Ly8vLy8vLy8vLy8vLy8vLy8vCiAgICAgLy8gYXJlIHdlIGluIHF1b3RlcyB3aXRoaW4gYSBodG1s
IHRhZwotICAgIGVudW0KLSAgICB7Ci0gICAgICAgIE5vUXVvdGUgPSAwLAotICAgICAgICBTaW5n
bGVRdW90ZSwKLSAgICAgICAgRG91YmxlUXVvdGUKLSAgICB9IHRxdW90ZTsKKyAgICBlbnVtIHsg
Tm9RdW90ZSwgU2luZ2xlUXVvdGUsIERvdWJsZVF1b3RlIH0gdHF1b3RlOwogCiAgICAgLy8gQXJl
IHdlIGluIGEgJi4uLiBjaGFyYWN0ZXIgZW50aXR5IGRlc2NyaXB0aW9uPwogICAgIGVudW0gRW50
aXR5U3RhdGUgewpAQCAtMjczLDcgKzI2OCw3IEBACiAgICAgQXRvbWljU3RyaW5nIGF0dHJOYW1l
OwogICAgIAogICAgIC8vIFVzZWQgdG8gc3RvcmUgdGhlIGNvZGUgb2YgYSBzcmNpcHRpbmcgc2Vx
dWVuY2UKLSAgICBRQ2hhciAqc2NyaXB0Q29kZTsKKyAgICBVQ2hhciogc2NyaXB0Q29kZTsKICAg
ICAvLyBTaXplIG9mIHRoZSBzY3JpcHQgc2VxdWVuemUgc3RvcmVkIGluIEByZWYgI3NjcmlwdENv
ZGUKICAgICBpbnQgc2NyaXB0Q29kZVNpemU7CiAgICAgLy8gTWF4aW1hbCBzaXplIHRoYXQgY2Fu
IGJlIHN0b3JlZCBpbiBAcmVmICNzY3JpcHRDb2RlCkBAIC0yODIsMTEgKzI3NywxMSBAQAogICAg
IGludCBzY3JpcHRDb2RlUmVzeW5jOwogCiAgICAgLy8gU3RvcmVzIGNoYXJhY3RlcnMgaWYgd2Ug
YXJlIHNjYW5uaW5nIGZvciBhIHN0cmluZyBsaWtlICI8L3NjcmlwdD4iCi0gICAgUUNoYXIgc2Vh
cmNoQnVmZmVyWyAxMCBdOworICAgIFVDaGFyIHNlYXJjaEJ1ZmZlclsxMF07CiAgICAgLy8gQ291
bnRzIHdoZXJlIHdlIGFyZSBpbiB0aGUgc3RyaW5nIHdlIGFyZSBzY2FubmluZyBmb3IKICAgICBp
bnQgc2VhcmNoQ291bnQ7CiAgICAgLy8gVGhlIHN0cmluZyB3ZSBhcmUgc2VhcmNoaW5nIGZvcgot
ICAgIGNvbnN0IFFDaGFyICpzZWFyY2hGb3I7CisgICAgY29uc3QgVUNoYXIqIHNlYXJjaEZvcjsK
ICAgICAvLyB0aGUgc3RvcHBlciBzdHJpbmcKICAgICBjb25zdCBjaGFyKiBzZWFyY2hTdG9wcGVy
OwogICAgIC8vIHRoZSBzdG9wcGVyIGxlbgpAQCAtMzM5LDcgKzMzNCw3IEBACiAKIHZvaWQgcGFy
c2VIVE1MRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmLCBEb2N1bWVudEZyYWdtZW50Kik7
CiAKLXVuc2lnbmVkIHNob3J0IGRlY29kZU5hbWVkRW50aXR5KGNvbnN0IGNoYXIqKTsKK1VDaGFy
IGRlY29kZU5hbWVkRW50aXR5KGNvbnN0IGNoYXIqKTsKIAogfQogCkluZGV4OiBodG1sL0hUTUxQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFBhcnNlci5jcHAJKHJldmlzaW9uIDE0
MjE2KQorKysgaHRtbC9IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDks
OCBAQAogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitjb25zdCBVQ2hhciBub25CcmVh
a2luZ1NwYWNlID0gMHhhMDsKKwogLyoqCiAgKiBAaW50ZXJuYWwKICAqLwpAQCAtNDczLDcgKzQ3
NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZ0ltcGwgKmkgPSB0LT5zdHJpbmcoKTsKICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHBvcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3Mg
PCBpLT5sZW5ndGgoKSAmJiAoKCppKVtwb3NdID09ICcgJyB8fCAoKmkpW3Bvc10gPT0gUUNoYXIo
MHhhMCkpKQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgaS0+bGVuZ3RoKCkgJiYg
KCgqaSlbcG9zXSA9PSAnICcgfHwgKCppKVtwb3NdID09IG5vbkJyZWFraW5nU3BhY2UpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwb3Mg
PT0gaS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJseU1vdmVTdHJh
eUNvbnRlbnQgPSBmYWxzZTsKSW5kZXg6IGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTQyMTYpCisrKyBo
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQyLDcgKzE0NDIs
NyBAQAogICAgICAgICBTdHJpbmdJbXBsKiBzID0gcHJvcG9zZWRWYWx1ZS5pbXBsKCk7CiAgICAg
ICAgIGludCBuZXdMZW4gPSBudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKHMsIG1heExl
bik7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV3TGVuOyArK2kpCi0gICAgICAgICAg
ICBpZiAoKCpzKVtpXS51bmljb2RlKCkgPCAnICcpIHsKKyAgICAgICAgICAgIGlmICgoKnMpW2ld
IDwgJyAnKSB7CiAgICAgICAgICAgICAgICAgbmV3TGVuID0gaTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IGh0bWwvSFRNTFRva2VuaXplci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMTQyMTYpCisrKyBodG1s
L0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw5ICs2Niw2IEBACiBzdGF0
aWMgY29uc3QgY2hhciB0ZXh0YXJlYUVuZCBbXSA9ICI8L3RleHRhcmVhIjsKIHN0YXRpYyBjb25z
dCBjaGFyIHRpdGxlRW5kIFtdID0gIjwvdGl0bGUiOwogCi0jZGVmaW5lIEtIVE1MX0FMTE9DX1FD
SEFSX1ZFQyggTiApIChRQ2hhciopIGZhc3RNYWxsb2MoIHNpemVvZihRQ2hhcikqKCBOICkgKQot
I2RlZmluZSBLSFRNTF9ERUxFVEVfUUNIQVJfVkVDKCBQICkgZmFzdEZyZWUoKGNoYXIqKSggUCAp
KQotCiAvLyBGdWxsIHN1cHBvcnQgZm9yIE1TIFdpbmRvd3MgZXh0ZW5zaW9ucyB0byBMYXRpbi0x
LgogLy8gVGVjaG5pY2FsbHkgdGhlc2UgZXh0ZW5zaW9ucyBzaG91bGQgb25seSBiZSBhY3RpdmF0
ZWQgZm9yIHBhZ2VzCiAvLyBtYXJrZWQgIndpbmRvd3MtMTI1MiIgb3IgImNwMTI1MiIsIGJ1dApA
QCAtODQsMjcgKzgxLDI2IEBACiAKIC8vIFdlIG9ubHkgbmVlZCB0aGlzIGZvciBlbnRpdGllcy4g
Rm9yIG5vbi1lbnRpdHkgdGV4dCwgd2UgaGFuZGxlIHRoaXMgaW4gdGhlIHRleHQgZW5jb2Rpbmcu
CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB3aW5kb3dzTGF0aW4xRXh0ZW5zaW9uQXJy
YXlbMzJdID0geworc3RhdGljIGNvbnN0IFVDaGFyIHdpbmRvd3NMYXRpbjFFeHRlbnNpb25BcnJh
eVszMl0gPSB7CiAgICAgMHgyMEFDLCAweDAwODEsIDB4MjAxQSwgMHgwMTkyLCAweDIwMUUsIDB4
MjAyNiwgMHgyMDIwLCAweDIwMjEsIC8vIDgwLTg3CiAgICAgMHgwMkM2LCAweDIwMzAsIDB4MDE2
MCwgMHgyMDM5LCAweDAxNTIsIDB4MDA4RCwgMHgwMTdELCAweDAwOEYsIC8vIDg4LThGCiAgICAg
MHgwMDkwLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFDLCAweDIwMUQsIDB4MjAyMiwgMHgyMDEzLCAw
eDIwMTQsIC8vIDkwLTk3CiAgICAgMHgwMkRDLCAweDIxMjIsIDB4MDE2MSwgMHgyMDNBLCAweDAx
NTMsIDB4MDA5RCwgMHgwMTdFLCAweDAxNzggIC8vIDk4LTlGCiB9OwogCi1zdGF0aWMgaW5saW5l
IFFDaGFyIGZpeFVwQ2hhcihRQ2hhciBjKQorc3RhdGljIGlubGluZSBVQ2hhciBmaXhVcENoYXIo
VUNoYXIgYykKIHsKLSAgICB1bnNpZ25lZCBzaG9ydCBjb2RlID0gYy51bmljb2RlKCk7Ci0gICAg
aWYgKChjb2RlICYgfjB4MUYpICE9IDB4MDA4MCkKKyAgICBpZiAoKGMgJiB+MHgxRikgIT0gMHgw
MDgwKQogICAgICAgICByZXR1cm4gYzsKLSAgICByZXR1cm4gd2luZG93c0xhdGluMUV4dGVuc2lv
bkFycmF5W2NvZGUgLSAweDgwXTsKKyAgICByZXR1cm4gd2luZG93c0xhdGluMUV4dGVuc2lvbkFy
cmF5W2MgLSAweDgwXTsKIH0KIAotaW5saW5lIGJvb2wgdGFnTWF0Y2goY29uc3QgY2hhciAqczEs
IGNvbnN0IFFDaGFyICpzMiwgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIGlubGluZSBib29sIHRh
Z01hdGNoKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBVQ2hhciogczIsIHVuc2lnbmVkIGxlbmd0aCkK
IHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IGNoYXIgYzEgPSBzMVtpXTsKLSAgICAgICAgY2hhciB1YzEgPSB0b3VwcGVyKGMxKTsKLSAgICAg
ICAgUUNoYXIgYzIgPSBzMltpXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjMSA9IHMxW2ldOwor
ICAgICAgICB1bnNpZ25lZCBjaGFyIHVjMSA9IHRvdXBwZXIoYzEpOworICAgICAgICBVQ2hhciBj
MiA9IHMyW2ldOwogICAgICAgICBpZiAoYzEgIT0gYzIgJiYgdWMxICE9IGMyKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE2NiwxMyArMTYyLDExIEBACiAgICAgICBjcy0+
ZGVyZWYodGhpcyk7CiAgICAgfQogICAgIAotICAgIGlmIChidWZmZXIpCi0gICAgICAgIEtIVE1M
X0RFTEVURV9RQ0hBUl9WRUMoYnVmZmVyKTsKKyAgICBmYXN0RnJlZShidWZmZXIpOwogICAgIGJ1
ZmZlciA9IGRlc3QgPSAwOwogICAgIHNpemUgPSAwOwogCi0gICAgaWYgKHNjcmlwdENvZGUpCi0g
ICAgICAgIEtIVE1MX0RFTEVURV9RQ0hBUl9WRUMoc2NyaXB0Q29kZSk7CisgICAgZmFzdEZyZWUo
c2NyaXB0Q29kZSk7CiAgICAgc2NyaXB0Q29kZSA9IDA7CiAgICAgc2NyaXB0Q29kZVNpemUgPSBz
Y3JpcHRDb2RlTWF4U2l6ZSA9IHNjcmlwdENvZGVSZXN5bmMgPSAwOwogCkBAIC0xODksNyArMTgz
LDcgQEAKICAgICBtX3N0YXRlLnNldExvYWRpbmdFeHRTY3JpcHQoZmFsc2UpOwogICAgIHJlc2V0
KCk7CiAgICAgc2l6ZSA9IDI1NDsKLSAgICBidWZmZXIgPSBLSFRNTF9BTExPQ19RQ0hBUl9WRUMo
IDI1NSApOworICAgIGJ1ZmZlciA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhzaXpl
b2YoVUNoYXIpICogMjU0KSk7CiAgICAgZGVzdCA9IGJ1ZmZlcjsKICAgICB0cXVvdGUgPSBOb1F1
b3RlOwogICAgIHNlYXJjaENvdW50ID0gMDsKQEAgLTI2MSwxMyArMjU1LDEzIEBACiAKICAgICB3
aGlsZSAoICFzcmMuaXNFbXB0eSgpICkgewogICAgICAgICBjaGVja1NjcmlwdEJ1ZmZlcigpOwot
ICAgICAgICB1bnNpZ25lZCBjaGFyIGNoID0gc3JjLT5sYXRpbjEoKTsKKyAgICAgICAgVUNoYXIg
Y2ggPSAqc3JjOwogICAgICAgICBpZiAoIXNjcmlwdENvZGVSZXN5bmMgJiYgIWJyb2tlbkNvbW1l
bnRzICYmICFzdGF0ZS5pblRleHRBcmVhKCkgJiYgIXN0YXRlLmluWG1wKCkgJiYgIXN0YXRlLmlu
VGl0bGUoKSAmJiBjaCA9PSAnLScgJiYgc2NyaXB0Q29kZVNpemUgPj0gMyAmJiAhc3JjLmVzY2Fw
ZWQoKSAmJiBzY3JpcHRDb2RlW3NjcmlwdENvZGVTaXplLTNdID09ICc8JyAmJiBzY3JpcHRDb2Rl
W3NjcmlwdENvZGVTaXplLTJdID09ICchJyAmJiBzY3JpcHRDb2RlW3NjcmlwdENvZGVTaXplLTFd
ID09ICctJykgewogICAgICAgICAgICAgc3RhdGUuc2V0SW5Db21tZW50KHRydWUpOwogICAgICAg
ICAgICAgc3RhdGUgPSBwYXJzZUNvbW1lbnQoc3JjLCBzdGF0ZSk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIHNjcmlwdENvZGVSZXN5bmMgJiYgIXRxdW90
ZSAmJiAoIGNoID09ICc+JyApICkgeworICAgICAgICBpZiAoc2NyaXB0Q29kZVJlc3luYyAmJiAh
dHF1b3RlICYmIGNoID09ICc+JykgewogICAgICAgICAgICAgKytzcmM7CiAgICAgICAgICAgICBz
Y3JpcHRDb2RlU2l6ZSA9IHNjcmlwdENvZGVSZXN5bmMtMTsKICAgICAgICAgICAgIHNjcmlwdENv
ZGVSZXN5bmMgPSAwOwpAQCAtMzAyLDI5ICsyOTYsMjggQEAKICAgICAgICAgICAgIHJldHVybiBz
dGF0ZTsKICAgICAgICAgfQogICAgICAgICAvLyBwb3NzaWJsZSBlbmQgb2YgdGFnbmFtZSwgbGV0
cyBjaGVjay4KLSAgICAgICAgaWYgKCAhc2NyaXB0Q29kZVJlc3luYyAmJiAhc3RhdGUuZXNjYXBl
ZCgpICYmICFzcmMuZXNjYXBlZCgpICYmICggY2ggPT0gJz4nIHx8IGNoID09ICcvJyB8fCBjaCA8
PSAnICcgKSAmJiBjaCAmJgorICAgICAgICBpZiAoIXNjcmlwdENvZGVSZXN5bmMgJiYgIXN0YXRl
LmVzY2FwZWQoKSAmJiAhc3JjLmVzY2FwZWQoKSAmJiAoY2ggPT0gJz4nIHx8IGNoID09ICcvJyB8
fCBjaCA8PSAnICcpICYmIGNoICYmCiAgICAgICAgICAgICAgc2NyaXB0Q29kZVNpemUgPj0gc2Vh
cmNoU3RvcHBlckxlbiAmJgogICAgICAgICAgICAgIHRhZ01hdGNoKCBzZWFyY2hTdG9wcGVyLCBz
Y3JpcHRDb2RlK3NjcmlwdENvZGVTaXplLXNlYXJjaFN0b3BwZXJMZW4sIHNlYXJjaFN0b3BwZXJM
ZW4gKSkgewogICAgICAgICAgICAgc2NyaXB0Q29kZVJlc3luYyA9IHNjcmlwdENvZGVTaXplLXNl
YXJjaFN0b3BwZXJMZW4rMTsKICAgICAgICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoIHNjcmlwdENvZGVSZXN5bmMg
JiYgIXN0YXRlLmVzY2FwZWQoKSApIHsKLSAgICAgICAgICAgIGlmKGNoID09ICdcIicpCisgICAg
ICAgIGlmIChzY3JpcHRDb2RlUmVzeW5jICYmICFzdGF0ZS5lc2NhcGVkKCkpIHsKKyAgICAgICAg
ICAgIGlmIChjaCA9PSAnXCInKQogICAgICAgICAgICAgICAgIHRxdW90ZSA9ICh0cXVvdGUgPT0g
Tm9RdW90ZSkgPyBEb3VibGVRdW90ZSA6ICgodHF1b3RlID09IFNpbmdsZVF1b3RlKSA/IFNpbmds
ZVF1b3RlIDogTm9RdW90ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmKGNoID09ICdcJycpCisgICAg
ICAgICAgICBlbHNlIGlmIChjaCA9PSAnXCcnKQogICAgICAgICAgICAgICAgIHRxdW90ZSA9ICh0
cXVvdGUgPT0gTm9RdW90ZSkgPyBTaW5nbGVRdW90ZSA6ICh0cXVvdGUgPT0gRG91YmxlUXVvdGUp
ID8gRG91YmxlUXVvdGUgOiBOb1F1b3RlOwogICAgICAgICAgICAgZWxzZSBpZiAodHF1b3RlICE9
IE5vUXVvdGUgJiYgKGNoID09ICdccicgfHwgY2ggPT0gJ1xuJykpCiAgICAgICAgICAgICAgICAg
dHF1b3RlID0gTm9RdW90ZTsKICAgICAgICAgfQogICAgICAgICBzdGF0ZS5zZXRFc2NhcGVkKCFz
dGF0ZS5lc2NhcGVkKCkgJiYgY2ggPT0gJ1xcJyk7CiAgICAgICAgIGlmICghc2NyaXB0Q29kZVJl
c3luYyAmJiAoc3RhdGUuaW5UZXh0QXJlYSgpIHx8IHN0YXRlLmluVGl0bGUoKSkgJiYgIXNyYy5l
c2NhcGVkKCkgJiYgY2ggPT0gJyYnKSB7Ci0gICAgICAgICAgICBRQ2hhciAqc2NyaXB0Q29kZURl
c3QgPSBzY3JpcHRDb2RlK3NjcmlwdENvZGVTaXplOworICAgICAgICAgICAgVUNoYXIqIHNjcmlw
dENvZGVEZXN0ID0gc2NyaXB0Q29kZStzY3JpcHRDb2RlU2l6ZTsKICAgICAgICAgICAgICsrc3Jj
OwogICAgICAgICAgICAgc3RhdGUgPSBwYXJzZUVudGl0eShzcmMsIHNjcmlwdENvZGVEZXN0LCBz
dGF0ZSwgbV9jQnVmZmVyUG9zLCB0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICBzY3JpcHRDb2Rl
U2l6ZSA9IHNjcmlwdENvZGVEZXN0LXNjcmlwdENvZGU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzY3JpcHRDb2RlW3NjcmlwdENvZGVT
aXplKytdID0gKnNyYzsKICAgICAgICAgICAgICsrc3JjOwogICAgICAgICB9CkBAIC0zNzAsNyAr
MzYzLDcgQEAKICAgICAgICAgZG9TY3JpcHRFeGVjID0gdHJ1ZTsKICAgICB9CiAgICAgc3RhdGUg
PSBwcm9jZXNzTGlzdGluZyhTZWdtZW50ZWRTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNp
emUpLCBzdGF0ZSk7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyBleFNjcmlwdCggYnVmZmVyLCBkZXN0
LWJ1ZmZlciApOworICAgIERlcHJlY2F0ZWRTdHJpbmcgZXhTY3JpcHQocmVpbnRlcnByZXRfY2Fz
dDxRQ2hhcio+KGJ1ZmZlciksIGRlc3QgLSBidWZmZXIpOwogICAgIHByb2Nlc3NUb2tlbigpOwog
ICAgIGN1cnJUb2tlbi50YWdOYW1lID0gc2NyaXB0VGFnLmxvY2FsTmFtZSgpOwogICAgIGN1cnJU
b2tlbi5iZWdpblRhZyA9IGZhbHNlOwpAQCAtNTA2LDEyICs0OTksOCBAQAogICAgIGNoZWNrU2Ny
aXB0QnVmZmVyKHNyYy5sZW5ndGgoKSk7CiAgICAgd2hpbGUgKCAhc3JjLmlzRW1wdHkoKSApIHsK
ICAgICAgICAgc2NyaXB0Q29kZVsgc2NyaXB0Q29kZVNpemUrKyBdID0gKnNyYzsKLSNpZiBkZWZp
bmVkKFRPS0VOX0RFQlVHKSAmJiBUT0tFTl9ERUJVRyA+IDEKLSAgICAgICAgcURlYnVnKCJjb21t
ZW50IGlzIG5vdzogKiVzKiIsCi0gICAgICAgICAgICAgICBRQ29uc3RTdHJpbmcoKFFDaGFyKilz
cmMub3BlcmF0b3ItPigpLCBtaW4oMTZVLCBzcmMubGVuZ3RoKCkpKS5zdHJpbmcoKS5sYXRpbjEo
KSk7Ci0jZW5kaWYKIAotICAgICAgICBpZiAoc3JjLT51bmljb2RlKCkgPT0gJz4nKSB7CisgICAg
ICAgIGlmICgqc3JjID09ICc+JykgewogICAgICAgICAgICAgYm9vbCBoYW5kbGVCcm9rZW5Db21t
ZW50cyA9IGJyb2tlbkNvbW1lbnRzICYmICEoc3RhdGUuaW5TY3JpcHQoKSB8fCBzdGF0ZS5pblN0
eWxlKCkpOwogICAgICAgICAgICAgaW50IGVuZENoYXJzQ291bnQgPSAxOyAvLyBzdGFydCBvZmYg
d2l0aCBvbmUgZm9yIHRoZSAnPicgY2hhcmFjdGVyCiAgICAgICAgICAgICBpZiAoc2NyaXB0Q29k
ZVNpemUgPiAyICYmIHNjcmlwdENvZGVbc2NyaXB0Q29kZVNpemUtM10gPT0gJy0nICYmIHNjcmlw
dENvZGVbc2NyaXB0Q29kZVNpemUtMl0gPT0gJy0nKSB7CkBAIC01NTUsNyArNTQ0LDcgQEAKICAg
ICBjaGVja1NjcmlwdEJ1ZmZlcihzcmMubGVuZ3RoKCkpOwogICAgIHdoaWxlICghc3JjLmlzRW1w
dHkoKSkgewogICAgICAgICBzY3JpcHRDb2RlW3NjcmlwdENvZGVTaXplKytdID0gKnNyYzsKLSAg
ICAgICAgaWYgKHNyYy0+dW5pY29kZSgpID09ICc+JyAmJgorICAgICAgICBpZiAoKnNyYyA9PSAn
PicgJiYKICAgICAgICAgICAgIHNjcmlwdENvZGVTaXplID4gMSAmJiBzY3JpcHRDb2RlW3Njcmlw
dENvZGVTaXplLTJdID09ICclJykgewogICAgICAgICAgICAgKytzcmM7CiAgICAgICAgICAgICBz
dGF0ZS5zZXRJblNlcnZlcihmYWxzZSk7CkBAIC01NjksMjEgKzU1OCwxNyBAQAogCiBIVE1MVG9r
ZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihT
ZWdtZW50ZWRTdHJpbmcgJnNyYywgU3RhdGUgc3RhdGUpCiB7Ci0gICAgY2hhciBvbGRjaGFyID0g
MDsKLSAgICB3aGlsZSAoICFzcmMuaXNFbXB0eSgpICkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVk
IGNoYXIgY2hiZWdpbiA9IHNyYy0+bGF0aW4xKCk7Ci0gICAgICAgIGlmKGNoYmVnaW4gPT0gJ1wn
JykgeworICAgIFVDaGFyIG9sZGNoYXIgPSAwOworICAgIHdoaWxlICghc3JjLmlzRW1wdHkoKSkg
eworICAgICAgICBVQ2hhciBjaGJlZ2luID0gKnNyYzsKKyAgICAgICAgaWYgKGNoYmVnaW4gPT0g
J1wnJykKICAgICAgICAgICAgIHRxdW90ZSA9IHRxdW90ZSA9PSBTaW5nbGVRdW90ZSA/IE5vUXVv
dGUgOiBTaW5nbGVRdW90ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKGNoYmVnaW4gPT0g
J1wiJykgeworICAgICAgICBlbHNlIGlmIChjaGJlZ2luID09ICdcIicpCiAgICAgICAgICAgICB0
cXVvdGUgPSB0cXVvdGUgPT0gRG91YmxlUXVvdGUgPyBOb1F1b3RlIDogRG91YmxlUXVvdGU7Ci0g
ICAgICAgIH0KICAgICAgICAgLy8gTG9vayBmb3IgJz8+JwotICAgICAgICAvLyBzb21lIGNyYXBw
eSBzaXRlcyBvbWl0IHRoZSAiPyIgYmVmb3JlIGl0LCBzbworICAgICAgICAvLyBTb21lIGNyYXBw
eSBzaXRlcyBvbWl0IHRoZSAiPyIgYmVmb3JlIGl0LCBzbwogICAgICAgICAvLyB3ZSBsb29rIGZv
ciBhbiB1bnF1b3RlZCAnPicgaW5zdGVhZC4gKElFIGNvbXBhdGlibGUpCi0gICAgICAgIGVsc2Ug
aWYgKCBjaGJlZ2luID09ICc+JyAmJiAoICF0cXVvdGUgfHwgb2xkY2hhciA9PSAnPycgKSApCi0g
ICAgICAgIHsKKyAgICAgICAgZWxzZSBpZiAoY2hiZWdpbiA9PSAnPicgJiYgKCF0cXVvdGUgfHwg
b2xkY2hhciA9PSAnPycpKSB7CiAgICAgICAgICAgICAvLyBXZSBnb3QgYSAnPz4nIHNlcXVlbmNl
CiAgICAgICAgICAgICBzdGF0ZS5zZXRJblByb2Nlc3NpbmdJbnN0cnVjdGlvbihmYWxzZSk7CiAg
ICAgICAgICAgICArK3NyYzsKQEAgLTYwMCw3ICs1ODUsNyBAQAogSFRNTFRva2VuaXplcjo6U3Rh
dGUgSFRNTFRva2VuaXplcjo6cGFyc2VUZXh0KFNlZ21lbnRlZFN0cmluZyAmc3JjLCBTdGF0ZSBz
dGF0ZSkKIHsKICAgICB3aGlsZSAoIXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgdW5zaWduZWQg
c2hvcnQgY2MgPSBzcmMtPnVuaWNvZGUoKTsKKyAgICAgICAgVUNoYXIgY2MgPSAqc3JjOwogCiAg
ICAgICAgIGlmIChzdGF0ZS5za2lwTEYoKSkgewogICAgICAgICAgICAgc3RhdGUuc2V0U2tpcExG
KGZhbHNlKTsKQEAgLTYyNSw3ICs2MTAsNyBAQAogfQogCiAKLUhUTUxUb2tlbml6ZXI6OlN0YXRl
IEhUTUxUb2tlbml6ZXI6OnBhcnNlRW50aXR5KFNlZ21lbnRlZFN0cmluZyAmc3JjLCBRQ2hhciAq
JmRlc3QsIFN0YXRlIHN0YXRlLCB1bnNpZ25lZCAmY0J1ZmZlclBvcywgYm9vbCBzdGFydCwgYm9v
bCBwYXJzaW5nVGFnKQorSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6cGFyc2VF
bnRpdHkoU2VnbWVudGVkU3RyaW5nICZzcmMsIFVDaGFyKiYgZGVzdCwgU3RhdGUgc3RhdGUsIHVu
c2lnbmVkICZjQnVmZmVyUG9zLCBib29sIHN0YXJ0LCBib29sIHBhcnNpbmdUYWcpCiB7CiAgICAg
aWYgKHN0YXJ0KQogICAgIHsKQEAgLTYzNiw3ICs2MjEsNyBAQAogCiAgICAgd2hpbGUoIXNyYy5p
c0VtcHR5KCkpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBjYyA9IHNyYy0+dW5pY29k
ZSgpOworICAgICAgICBVQ2hhciBjYyA9ICpzcmM7CiAgICAgICAgIHN3aXRjaChzdGF0ZS5lbnRp
dHlTdGF0ZSgpKSB7CiAgICAgICAgIGNhc2UgTm9FbnRpdHk6CiAgICAgICAgICAgICBBU1NFUlQo
c3RhdGUuZW50aXR5U3RhdGUoKSAhPSBOb0VudGl0eSk7CkBAIC02NTQsMzAgKzYzOSwzMCBAQAog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBOdW1lcmljU2VhcmNoOgotICAgICAg
ICAgICAgaWYoY2MgPT0gJ3gnIHx8IGNjID09ICdYJykgeworICAgICAgICAgICAgaWYgKGNjID09
ICd4JyB8fCBjYyA9PSAnWCcpIHsKICAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3Mr
K10gPSBjYzsKICAgICAgICAgICAgICAgICArK3NyYzsKICAgICAgICAgICAgICAgICBzdGF0ZS5z
ZXRFbnRpdHlTdGF0ZShIZXhhZGVjaW1hbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIGlmKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCisgICAgICAgICAgICB9IGVsc2UgaWYgKGNj
ID49ICcwJyAmJiBjYyA8PSAnOScpCiAgICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50aXR5U3Rh
dGUoRGVjaW1hbCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc3RhdGUuc2V0
RW50aXR5U3RhdGUoU2VhcmNoU2VtaWNvbG9uKTsKLQogICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgY2FzZSBIZXhhZGVjaW1hbDoKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxsID0g
bWluKHNyYy5sZW5ndGgoKSwgMTAtY0J1ZmZlclBvcyk7Ci0gICAgICAgICAgICB3aGlsZShsbC0t
KSB7Ci0gICAgICAgICAgICAgICAgUUNoYXIgY3NyYyhzcmMtPmxvd2VyKCkpOwotICAgICAgICAg
ICAgICAgIGNjID0gY3NyYy51bmljb2RlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoISgoY2Mg
Pj0gJzAnICYmIGNjIDw9ICc5JykgfHwgKGNjID49ICdhJyAmJiBjYyA8PSAnZicpKSkgeworICAg
ICAgICBjYXNlIEhleGFkZWNpbWFsOiB7CisgICAgICAgICAgICBpbnQgbGwgPSBtaW4oc3JjLmxl
bmd0aCgpLCAxMCAtIGNCdWZmZXJQb3MpOworICAgICAgICAgICAgd2hpbGUgKGxsLS0pIHsKKyAg
ICAgICAgICAgICAgICBjYyA9ICpzcmM7CisgICAgICAgICAgICAgICAgaWYgKCEoKGNjID49ICcw
JyAmJiBjYyA8PSAnOScpIHx8IChjYyA+PSAnYScgJiYgY2MgPD0gJ2YnKSB8fCAoY2MgPj0gJ0En
ICYmIGNjIDw9ICdGJykpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEVudGl0eVN0
YXRlKFNlYXJjaFNlbWljb2xvbik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBFbnRpdHlVbmljb2RlVmFsdWUgPSBFbnRpdHlV
bmljb2RlVmFsdWUqMTYgKyAoY2MgLSAoIGNjIDwgJ2EnID8gJzAnIDogJ2EnIC0gMTApKTsKKyAg
ICAgICAgICAgICAgICBpbnQgZGlnaXQ7CisgICAgICAgICAgICAgICAgaWYgKGNjIDwgJ0EnKQor
ICAgICAgICAgICAgICAgICAgICBkaWdpdCA9IGNjIC0gJzAnOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgZGlnaXQgPSAoY2MgLSAnQScgKyAxMCkgJiAweEY7IC8v
IGhhbmRsZSBib3RoIHVwcGVyIGFuZCBsb3dlciBjYXNlIHdpdGhvdXQgYSBicmFuY2gKKyAgICAg
ICAgICAgICAgICBFbnRpdHlVbmljb2RlVmFsdWUgPSBFbnRpdHlVbmljb2RlVmFsdWUgKiAxNiAr
IGRpZ2l0OwogICAgICAgICAgICAgICAgIGNCdWZmZXJbY0J1ZmZlclBvcysrXSA9IGNjOwogICAg
ICAgICAgICAgICAgICsrc3JjOwogICAgICAgICAgICAgfQpAQCAtNjg5LDcgKzY3NCw3IEBACiAg
ICAgICAgIHsKICAgICAgICAgICAgIGludCBsbCA9IG1pbihzcmMubGVuZ3RoKCksIDktY0J1ZmZl
clBvcyk7CiAgICAgICAgICAgICB3aGlsZShsbC0tKSB7Ci0gICAgICAgICAgICAgICAgY2MgPSBz
cmMtPnVuaWNvZGUoKTsKKyAgICAgICAgICAgICAgICBjYyA9ICpzcmM7CiAKICAgICAgICAgICAg
ICAgICBpZiAoIShjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSkgewogICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zZXRFbnRpdHlTdGF0ZShTZWFyY2hTZW1pY29sb24pOwpAQCAtNzA4LDggKzY5Myw3
IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGludCBsbCA9IG1pbihzcmMubGVuZ3RoKCksIDkt
Y0J1ZmZlclBvcyk7CiAgICAgICAgICAgICB3aGlsZShsbC0tKSB7Ci0gICAgICAgICAgICAgICAg
UUNoYXIgY3NyYyA9ICpzcmM7Ci0gICAgICAgICAgICAgICAgY2MgPSBjc3JjLnVuaWNvZGUoKTsK
KyAgICAgICAgICAgICAgICBjYyA9ICpzcmM7CiAKICAgICAgICAgICAgICAgICBpZiAoISgoY2Mg
Pj0gJ2EnICYmIGNjIDw9ICd6JykgfHwgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHx8IChjYyA+
PSAnQScgJiYgY2MgPD0gJ1onKSkpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0RW50
aXR5U3RhdGUoU2VhcmNoU2VtaWNvbG9uKTsKQEAgLTczNywyMSArNzIxLDE3IEBACiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBTZWFyY2hTZW1pY29sb246CiAgICAgICAgICAgICAvLyBEb24ndCBh
bGxvdyB2YWx1ZXMgdGhhdCBhcmUgbW9yZSB0aGFuIDIxIGJpdHMuCi0gICAgICAgICAgICBpZiAo
RW50aXR5VW5pY29kZVZhbHVlID4gMCAmJiBFbnRpdHlVbmljb2RlVmFsdWUgPD0gMHgxRkZGRkYp
IHsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKEVudGl0eVVuaWNvZGVWYWx1ZSA+IDAg
JiYgRW50aXR5VW5pY29kZVZhbHVlIDw9IDB4MTBGRkZGKSB7CiAgICAgICAgICAgICAgICAgaWYg
KCpzcmMgPT0gJzsnKQogICAgICAgICAgICAgICAgICAgICArK3NyYzsKLQogICAgICAgICAgICAg
ICAgIGlmIChFbnRpdHlVbmljb2RlVmFsdWUgPD0gMHhGRkZGKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGNoZWNrQnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIHNyYy5wdXNoKGZpeFVwQ2hh
cihFbnRpdHlVbmljb2RlVmFsdWUpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRvIFVURi0xNiwgdXNpbmcgc3Vycm9nYXRlIGNvZGUg
cG9pbnRzLgotICAgICAgICAgICAgICAgICAgICBRQ2hhciBjMSgweEQ4MDAgfCAoKChFbnRpdHlV
bmljb2RlVmFsdWUgPj4gMTYpIC0gMSkgPDwgNikgfCAoKEVudGl0eVVuaWNvZGVWYWx1ZSA+PiAx
MCkgJiAweDNGKSk7Ci0gICAgICAgICAgICAgICAgICAgIFFDaGFyIGMyKDB4REMwMCB8IChFbnRp
dHlVbmljb2RlVmFsdWUgJiAweDNGRikpOwogICAgICAgICAgICAgICAgICAgICBjaGVja0J1ZmZl
cigyKTsKLSAgICAgICAgICAgICAgICAgICAgc3JjLnB1c2goYzEpOwotICAgICAgICAgICAgICAg
ICAgICBzcmMucHVzaChjMik7CisgICAgICAgICAgICAgICAgICAgIHNyYy5wdXNoKFUxNl9MRUFE
KEVudGl0eVVuaWNvZGVWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBzcmMucHVzaChVMTZf
VFJBSUwoRW50aXR5VW5pY29kZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBjaGVja0J1ZmZlcigxMCk7CkBAIC03NzksMTMg
Kzc1OSw2IEBACiAgICAgd2hpbGUgKCFzcmMuaXNFbXB0eSgpKQogICAgIHsKICAgICAgICAgY2hl
Y2tCdWZmZXIoKTsKLSNpZiBkZWZpbmVkKFRPS0VOX0RFQlVHKSAmJiBUT0tFTl9ERUJVRyA+IDEK
LSAgICAgICAgdW5zaWduZWQgbCA9IDA7Ci0gICAgICAgIHdoaWxlKGwgPCBzcmMubGVuZ3RoKCkg
JiYgKCooc3JjLm9wZXJhdG9yLT4oKStsKSkubGF0aW4xKCkgIT0gJz4nKQotICAgICAgICAgICAg
bCsrOwotICAgICAgICBxRGVidWcoInNyYyBpcyBub3c6IColcyosIHRxdW90ZTogJWQiLAotICAg
ICAgICAgICAgICAgUUNvbnN0U3RyaW5nKChRQ2hhciopc3JjLm9wZXJhdG9yLT4oKSwgbCkuZGVw
cmVjYXRlZFN0cmluZygpLmxhdGluMSgpLCB0cXVvdGUpOwotI2VuZGlmCiAgICAgICAgIHN3aXRj
aChzdGF0ZS50YWdTdGF0ZSgpKSB7CiAgICAgICAgIGNhc2UgTm9UYWc6CiAgICAgICAgIHsKQEAg
LTgyMSw3ICs3OTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICArK3NyYzsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzcmMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gY3V0cyBvZmYgaGlnaCBiaXRzLCB3aGljaCBpcyBva2F5Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBzcmMtPnVu
aWNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNCdWZmZXJbY0J1ZmZlclBv
cysrXSA9ICpzcmM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gcGFyc2VDb21t
ZW50KHNyYywgc3RhdGUpOwpAQCAtODMwLDcgKzgwMyw3IEBACiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RhdGU7IC8vIEZpbmlzaGVkIHBhcnNpbmcgdGFnIQogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIGN1dHMgb2ZmIGhpZ2ggYml0cywgd2hp
Y2ggaXMgb2theQotICAgICAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBz
cmMtPnVuaWNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgY0J1ZmZlcltjQnVmZmVyUG9zKytd
ID0gKnNyYzsKICAgICAgICAgICAgICAgICAgICAgKytzcmM7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTg0MSw3ICs4MTQsNyBAQAogICAgICAgICAg
ICAgYm9vbCBmaW5pc2ggPSBmYWxzZTsKICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsbCA9IG1p
bihzcmMubGVuZ3RoKCksIENCVUZMRU4tY0J1ZmZlclBvcyk7CiAgICAgICAgICAgICB3aGlsZShs
bC0tKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgY3VyY2hhciA9IHNyYy0+dW5p
Y29kZSgpOworICAgICAgICAgICAgICAgIFVDaGFyIGN1cmNoYXIgPSAqc3JjOwogICAgICAgICAg
ICAgICAgIGlmKGN1cmNoYXIgPD0gJyAnIHx8IGN1cmNoYXIgPT0gJz4nICkgewogICAgICAgICAg
ICAgICAgICAgICBmaW5pc2ggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTg5Myw3ICs4NjYsNyBAQAogICAgICAgICAgICAgcURlYnVnKCJTZWFyY2hBdHRyaWJ1dGUiKTsK
ICNlbmRpZgogICAgICAgICAgICAgd2hpbGUoIXNyYy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCBjdXJjaGFyID0gc3JjLT51bmljb2RlKCk7CisgICAgICAgICAg
ICAgICAgVUNoYXIgY3VyY2hhciA9ICpzcmM7CiAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBt
b2RlIGp1c3QgaWdub3JlIGFueSBxdW90ZXMgd2UgZW5jb3VudGVyIGFuZCB0cmVhdCB0aGVtIGxp
a2Ugc3BhY2VzLgogICAgICAgICAgICAgICAgIGlmIChjdXJjaGFyID4gJyAnICYmIGN1cmNoYXIg
IT0gJ1wnJyAmJiBjdXJjaGFyICE9ICciJykgewogICAgICAgICAgICAgICAgICAgICBpZiAoY3Vy
Y2hhciA9PSAnPCcgfHwgY3VyY2hhciA9PSAnPicpCkBAIC05MTQsNyArODg3LDcgQEAKICNlbmRp
ZgogICAgICAgICAgICAgaW50IGxsID0gbWluKHNyYy5sZW5ndGgoKSwgQ0JVRkxFTi1jQnVmZmVy
UG9zKTsKICAgICAgICAgICAgIHdoaWxlKGxsLS0pIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBjdXJjaGFyID0gc3JjLT51bmljb2RlKCk7CisgICAgICAgICAgICAgICAgVUNoYXIg
Y3VyY2hhciA9ICpzcmM7CiAgICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPD0gJz4nICYmIChj
dXJjaGFyID49ICc9JyB8fCBjdXJjaGFyIDw9ICcgJykpIHsKICAgICAgICAgICAgICAgICAgICAg
Y0J1ZmZlcltjQnVmZmVyUG9zXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1l
ID0gQXRvbWljU3RyaW5nKGNCdWZmZXIpOwpAQCAtOTUyLDcgKzkyNSw3IEBACiAgICAgICAgICAg
ICBxRGVidWcoIlNlYXJjaEVxdWFsIik7CiAjZW5kaWYKICAgICAgICAgICAgIHdoaWxlKCFzcmMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgY3VyY2hhciA9IHNy
Yy0+dW5pY29kZSgpOworICAgICAgICAgICAgICAgIFVDaGFyIGN1cmNoYXIgPSAqc3JjOwogICAg
ICAgICAgICAgICAgIC8vIEluIHRoaXMgbW9kZSBqdXN0IGlnbm9yZSBhbnkgcXVvdGVzIHdlIGVu
Y291bnRlciBhbmQgdHJlYXQgdGhlbSBsaWtlIHNwYWNlcy4KICAgICAgICAgICAgICAgICBpZiAo
Y3VyY2hhciA+ICcgJyAmJiBjdXJjaGFyICE9ICdcJycgJiYgY3VyY2hhciAhPSAnIicpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYoY3VyY2hhciA9PSAnPScpIHsKQEAgLTk3NCw3ICs5NDcsNyBA
QAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2VhcmNoVmFsdWU6CiAgICAgICAg
ICAgICB3aGlsZSghc3JjLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IGN1cmNoYXIgPSBzcmMtPnVuaWNvZGUoKTsKKyAgICAgICAgICAgICAgICBVQ2hhciBjdXJj
aGFyID0gKnNyYzsKICAgICAgICAgICAgICAgICBpZihjdXJjaGFyID4gJyAnKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmKCggY3VyY2hhciA9PSAnXCcnIHx8IGN1cmNoYXIgPT0gJ1wiJyApKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICB0cXVvdGUgPSBjdXJjaGFyID09ICdcIicgPyBEb3Vi
bGVRdW90ZSA6IFNpbmdsZVF1b3RlOwpAQCAtOTk1LDcgKzk2OCw3IEBACiAgICAgICAgICAgICB3
aGlsZSghc3JjLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGNoZWNrQnVmZmVyKCk7CiAK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjdXJjaGFyID0gc3JjLT51bmljb2RlKCk7
CisgICAgICAgICAgICAgICAgVUNoYXIgY3VyY2hhciA9ICpzcmM7CiAgICAgICAgICAgICAgICAg
aWYgKGN1cmNoYXIgPT0gJz4nICYmIGF0dHJOYW1lLmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
ICAgICAgICAvLyBIYW5kbGUgYSBjYXNlIGxpa2UgPGltZyAnPi4gIEp1c3QgZ28gYWhlYWQgYW5k
IGJlIHdpbGxpbmcKICAgICAgICAgICAgICAgICAgICAgLy8gdG8gY2xvc2UgdGhlIHdob2xlIHRh
Zy4gIERvbid0IGNvbnN1bWUgdGhlIGNoYXJhY3RlciBhbmQKQEAgLTEwNTEsNyArMTAyNCw3IEBA
CiAjZW5kaWYKICAgICAgICAgICAgIHdoaWxlKCFzcmMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgY2hlY2tCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBjdXJj
aGFyID0gc3JjLT51bmljb2RlKCk7CisgICAgICAgICAgICAgICAgVUNoYXIgY3VyY2hhciA9ICpz
cmM7CiAgICAgICAgICAgICAgICAgaWYoY3VyY2hhciA8PSAnPicgJiYgIXNyYy5lc2NhcGVkKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2UgRW50aXRpZXMKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjdXJjaGFyID09ICcmJyApCkBAIC0xMzQwLDcgKzEzMTMsNyBAQAogICAgICAg
ICAvLyBkbyB3ZSBuZWVkIHRvIGVubGFyZ2UgdGhlIGJ1ZmZlcj8KICAgICAgICAgY2hlY2tCdWZm
ZXIoKTsKIAotICAgICAgICB1bnNpZ25lZCBzaG9ydCBjYyA9IHNyYy0+dW5pY29kZSgpOworICAg
ICAgICBVQ2hhciBjYyA9ICpzcmM7CiAKICAgICAgICAgYm9vbCB3YXNTa2lwTEYgPSBzdGF0ZS5z
a2lwTEYoKTsKICAgICAgICAgaWYgKHdhc1NraXBMRikKQEAgLTE1MDUsMTIgKzE0NzgsMTEgQEAK
ICAgICAgICAgaWYgKCFtX3N0YXRlLmhhc1RhZ1N0YXRlKCkpCiAgICAgICAgICAgICBwcm9jZXNz
VG9rZW4oKTsKIAotICAgICAgICBpZiAoc2NyaXB0Q29kZSkKLSAgICAgICAgICAgIEtIVE1MX0RF
TEVURV9RQ0hBUl9WRUMoc2NyaXB0Q29kZSk7CisgICAgICAgIGZhc3RGcmVlKHNjcmlwdENvZGUp
OwogICAgICAgICBzY3JpcHRDb2RlID0gMDsKICAgICAgICAgc2NyaXB0Q29kZVNpemUgPSBzY3Jp
cHRDb2RlTWF4U2l6ZSA9IHNjcmlwdENvZGVSZXN5bmMgPSAwOwogCi0gICAgICAgIEtIVE1MX0RF
TEVURV9RQ0hBUl9WRUMoYnVmZmVyKTsKKyAgICAgICAgZmFzdEZyZWUoYnVmZmVyKTsKICAgICAg
ICAgYnVmZmVyID0gMDsKICAgICB9CiAKQEAgLTE1MzIsMTUgKzE1MDQsMTUgQEAKICAgICAgICAg
aW50IHBvczsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBmb29kOwogICAgICAgICBpZiAobV9z
dGF0ZS5pblNjcmlwdCgpIHx8IG1fc3RhdGUuaW5TdHlsZSgpKQotICAgICAgICAgICAgZm9vZC5z
ZXRVbmljb2RlKHNjcmlwdENvZGUsIHNjcmlwdENvZGVTaXplKTsKKyAgICAgICAgICAgIGZvb2Qu
c2V0VW5pY29kZShyZWludGVycHJldF9jYXN0PFFDaGFyKj4oc2NyaXB0Q29kZSksIHNjcmlwdENv
ZGVTaXplKTsKICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5pblNlcnZlcigpKSB7CiAgICAgICAg
ICAgICBmb29kID0gIjwiOwotICAgICAgICAgICAgZm9vZCArPSBEZXByZWNhdGVkU3RyaW5nKHNj
cmlwdENvZGUsIHNjcmlwdENvZGVTaXplKTsKKyAgICAgICAgICAgIGZvb2QgKz0gRGVwcmVjYXRl
ZFN0cmluZyhyZWludGVycHJldF9jYXN0PFFDaGFyKj4oc2NyaXB0Q29kZSksIHNjcmlwdENvZGVT
aXplKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBvcyA9IFFDb25zdFN0cmluZyhz
Y3JpcHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSkuc3RyaW5nKCkuZmluZCgnPicpOwotICAgICAgICAg
ICAgZm9vZC5zZXRVbmljb2RlKHNjcmlwdENvZGUrcG9zKzEsIHNjcmlwdENvZGVTaXplLXBvcy0x
KTsgLy8gZGVlcCBjb3B5CisgICAgICAgICAgICBwb3MgPSBRQ29uc3RTdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxRQ2hhcio+KHNjcmlwdENvZGUpLCBzY3JpcHRDb2RlU2l6ZSkuc3RyaW5nKCkuZmlu
ZCgnPicpOworICAgICAgICAgICAgZm9vZC5zZXRVbmljb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8UUNo
YXIqPihzY3JpcHRDb2RlKSArIHBvcyArIDEsIHNjcmlwdENvZGVTaXplIC0gcG9zIC0gMSk7IC8v
IGRlZXAgY29weQogICAgICAgICB9Ci0gICAgICAgIEtIVE1MX0RFTEVURV9RQ0hBUl9WRUMoc2Ny
aXB0Q29kZSk7CisgICAgICAgIGZhc3RGcmVlKHNjcmlwdENvZGUpOwogICAgICAgICBzY3JpcHRD
b2RlID0gMDsKICAgICAgICAgc2NyaXB0Q29kZVNpemUgPSBzY3JpcHRDb2RlTWF4U2l6ZSA9IHNj
cmlwdENvZGVSZXN5bmMgPSAwOwogICAgICAgICBtX3N0YXRlLnNldEluQ29tbWVudChmYWxzZSk7
CkBAIC0xNjI2LDIyICsxNTk4LDIxIEBACiAKIHZvaWQgSFRNTFRva2VuaXplcjo6ZW5sYXJnZUJ1
ZmZlcihpbnQgbGVuKQogewotICAgIGludCBuZXdzaXplID0gbWF4KHNpemUqMiwgc2l6ZStsZW4p
OwotICAgIGludCBvbGRvZmZzID0gKGRlc3QgLSBidWZmZXIpOwotCi0gICAgYnVmZmVyID0gKFFD
aGFyKilmYXN0UmVhbGxvYyhidWZmZXIsIG5ld3NpemUqc2l6ZW9mKFFDaGFyKSk7Ci0gICAgZGVz
dCA9IGJ1ZmZlciArIG9sZG9mZnM7Ci0gICAgc2l6ZSA9IG5ld3NpemU7CisgICAgaW50IG5ld1Np
emUgPSBtYXgoc2l6ZSAqIDIsIHNpemUgKyBsZW4pOworICAgIGludCBvbGRPZmZzZXQgPSBkZXN0
IC0gYnVmZmVyOworICAgIGJ1ZmZlciA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdFJlYWxsb2Mo
YnVmZmVyLCBuZXdTaXplICogc2l6ZW9mKFVDaGFyKSkpOworICAgIGRlc3QgPSBidWZmZXIgKyBv
bGRPZmZzZXQ7CisgICAgc2l6ZSA9IG5ld1NpemU7CiB9CiAKIHZvaWQgSFRNTFRva2VuaXplcjo6
ZW5sYXJnZVNjcmlwdEJ1ZmZlcihpbnQgbGVuKQogewotICAgIGludCBuZXdzaXplID0gbWF4KHNj
cmlwdENvZGVNYXhTaXplKjIsIHNjcmlwdENvZGVNYXhTaXplK2xlbik7Ci0gICAgc2NyaXB0Q29k
ZSA9IChRQ2hhciopZmFzdFJlYWxsb2Moc2NyaXB0Q29kZSwgbmV3c2l6ZSpzaXplb2YoUUNoYXIp
KTsKLSAgICBzY3JpcHRDb2RlTWF4U2l6ZSA9IG5ld3NpemU7CisgICAgaW50IG5ld1NpemUgPSBt
YXgoc2NyaXB0Q29kZU1heFNpemUgKiAyLCBzY3JpcHRDb2RlTWF4U2l6ZSArIGxlbik7CisgICAg
c2NyaXB0Q29kZSA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdFJlYWxsb2Moc2NyaXB0Q29kZSwg
bmV3U2l6ZSAqIHNpemVvZihVQ2hhcikpKTsKKyAgICBzY3JpcHRDb2RlTWF4U2l6ZSA9IG5ld1Np
emU7CiB9CiAKLXZvaWQgSFRNTFRva2VuaXplcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkT2JqZWN0
ICovKmZpbmlzaGVkT2JqKi8pCit2b2lkIEhUTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKENh
Y2hlZE9iamVjdCopCiB7CiAjaWYgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORwogICAgIGlm
ICghcGFyc2VyLT5kb2MoKS0+b3duZXJFbGVtZW50KCkpCkBAIC0xNzI4LDcgKzE2OTksNyBAQAog
ICAgIEFTU0VSVCghdG9rLnByb2Nlc3NpbmdEYXRhKCkpOyAgICAgIC8vIG1ha2Ugc3VyZSB3ZSdy
ZSBkb25lIChzZWUgMzk2MzE1MSkKIH0KIAotdW5zaWduZWQgc2hvcnQgZGVjb2RlTmFtZWRFbnRp
dHkoY29uc3QgY2hhciogbmFtZSkKK1VDaGFyIGRlY29kZU5hbWVkRW50aXR5KGNvbnN0IGNoYXIq
IG5hbWUpCiB7CiAgICAgY29uc3QgRW50aXR5KiBlID0gZmluZEVudGl0eShuYW1lLCBzdHJsZW4o
bmFtZSkpOwogICAgIHJldHVybiBlID8gZS0+Y29kZSA6IDA7CkluZGV4OiBodG1sL2h0bWxfaW5s
aW5laW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9odG1sX2lubGluZWltcGwuY3BwCShyZXZp
c2lvbiAxNDIxNikKKysrIGh0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDA2LDMyICs0MDYsMzIgQEAKIC8vIEFsbG93cyBsZWFkaW5nIHNwYWNlcy4KIC8vIEFsbG93
cyB0cmFpbGluZyBub25udW1lcmljIGNoYXJhY3RlcnMuCiAvLyBSZXR1cm5zIDEwIGZvciBhbnkg
c2l6ZSBncmVhdGVyIHRoYW4gOS4KLXN0YXRpYyBib29sIHBhcnNlRm9udFNpemVOdW1iZXIoY29u
c3QgU3RyaW5nICZzLCBpbnQgJnNpemUpCitzdGF0aWMgYm9vbCBwYXJzZUZvbnRTaXplTnVtYmVy
KGNvbnN0IFN0cmluZyYgcywgaW50JiBzaXplKQogewogICAgIHVuc2lnbmVkIHBvcyA9IDA7CiAg
ICAgCiAgICAgLy8gU2tpcCBsZWFkaW5nIHNwYWNlcy4KLSAgICB3aGlsZSAocG9zIDwgcy5sZW5n
dGgoKSAmJiBzW3Bvc10uaXNTcGFjZSgpKQorICAgIHdoaWxlIChRQ2hhcihzW3Bvc10pLmlzU3Bh
Y2UoKSkKICAgICAgICAgKytwb3M7CiAgICAgCiAgICAgLy8gU2tpcCBhIHBsdXMgb3IgbWludXMu
CiAgICAgYm9vbCBzYXdQbHVzID0gZmFsc2U7CiAgICAgYm9vbCBzYXdNaW51cyA9IGZhbHNlOwot
ICAgIGlmIChwb3MgPCBzLmxlbmd0aCgpICYmIHNbcG9zXSA9PSAnKycpIHsKKyAgICBpZiAoc1tw
b3NdID09ICcrJykgewogICAgICAgICArK3BvczsKICAgICAgICAgc2F3UGx1cyA9IHRydWU7Ci0g
ICAgfSBlbHNlIGlmIChwb3MgPCBzLmxlbmd0aCgpICYmIHNbcG9zXSA9PSAnLScpIHsKKyAgICB9
IGVsc2UgaWYgKHNbcG9zXSA9PSAnLScpIHsKICAgICAgICAgKytwb3M7CiAgICAgICAgIHNhd01p
bnVzID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgZGlnaXQuCi0g
ICAgaWYgKHBvcyA+PSBzLmxlbmd0aCgpIHx8ICFzW3Bvc10uaXNOdW1iZXIoKSkKKyAgICBpZiAo
IXVfaXNkaWdpdChzW3Bvc10pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW50IG51bSA9
IHNbcG9zKytdLmRpZ2l0VmFsdWUoKTsKKyAgICBpbnQgbnVtID0gdV9jaGFyRGlnaXRWYWx1ZShz
W3BvcysrXSk7CiAgICAgCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGFkZGl0aW9uYWwgZGlnaXQuCi0g
ICAgaWYgKHBvcyA8IHMubGVuZ3RoKCkgJiYgc1twb3NdLmlzTnVtYmVyKCkpCisgICAgaWYgKHVf
aXNkaWdpdChzW3Bvc10pKQogICAgICAgICBudW0gPSAxMDsKICAgICAKICAgICBpZiAoc2F3UGx1
cykgewpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiAxNDIxNikKKysrIHJl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyOCwxMCAr
NzI4LDEyIEBACiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sq
IGJsb2NrQ2hpbGQgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGNoaWxkKTsKICAgICAgICAg
ICAgICAgICBpbnQgbGluZUNvdW50ID0gYmxvY2tDaGlsZC0+bGluZUNvdW50KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGxpbmVDb3VudCA8PSBudW1WaXNpYmxlTGluZXMpIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGlmIChsaW5lQ291bnQgPD0gbnVtVmlzaWJsZUxpbmVzKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBp
bnQgbmV3SGVpZ2h0ID0gYmxvY2tDaGlsZC0+aGVpZ2h0Rm9yTGluZUNvdW50KG51bVZpc2libGVM
aW5lcyk7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld0hlaWdodCA9PSBjaGlsZC0+aGVpZ2h0KCkp
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChuZXdIZWlnaHQgPT0gY2hpbGQtPmhlaWdo
dCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlKTsKICAgICAgICAg
ICAgICAgICBjaGlsZC0+c2V0T3ZlcnJpZGVTaXplKG5ld0hlaWdodCk7CkBAIC03NDEsMjUgKzc0
MywzMiBAQAogICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZVNpemUoLTEpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGRvbid0IHN1
cHBvcnQgUlRMLgotICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSAhPSBM
VFIpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSAh
PSBMVFIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgbGFzdCBsaW5lCiAgICAgICAgICAgICAgICAgUm9v
dElubGluZUJveCogbGFzdExpbmUgPSBibG9ja0NoaWxkLT5saW5lQXRJbmRleChsaW5lQ291bnQt
MSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFsYXN0TGluZSkgY29udGludWU7CisgICAgICAgICAg
ICAgICAgaWYgKCFsYXN0TGluZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoZSBsYXN0IGl0ZW0gaXMg
YW4gYW5jaG9yCiAgICAgICAgICAgICAgICAgSW5saW5lQm94KiBhbmNob3JCb3ggPSBsYXN0TGlu
ZS0+bGFzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFhbmNob3JCb3gpIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIGlmICghYW5jaG9yQm94LT5vYmplY3QoKS0+ZWxlbWVudCgpKSBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWFuY2hvckJveC0+b2JqZWN0KCktPmVsZW1l
bnQoKS0+aXNMaW5rKCkpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghYW5jaG9yQm94
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWFu
Y2hvckJveC0+b2JqZWN0KCktPmVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgaWYgKCFhbmNob3JCb3gtPm9iamVjdCgpLT5lbGVtZW50KCkt
PmlzTGluaygpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiBsYXN0VmlzaWJsZUxpbmUgPSBibG9j
a0NoaWxkLT5saW5lQXRJbmRleChudW1WaXNpYmxlTGluZXMtMSk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFsYXN0VmlzaWJsZUxpbmUpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghbGFz
dFZpc2libGVMaW5lKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGVsbGlwc2lzQW5kU3BhY2VbMl0gPSB7IDB4MjAy
NiwgJyAnIH07CisgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgZWxsaXBzaXNBbmRTcGFjZVsy
XSA9IHsgMHgyMDI2LCAnICcgfTsKICAgICAgICAgICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5n
IGVsbGlwc2lzQW5kU3BhY2VTdHIoZWxsaXBzaXNBbmRTcGFjZSwgMik7CisKICAgICAgICAgICAg
ICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUobnVtVmlzaWJsZUxpbmVzID09IDEpLT5mb250
KCk7Ci0gICAgICAgICAgICAgICAgaW50IGVsbGlwc2lzQW5kU3BhY2VXaWR0aCA9IGZvbnQud2lk
dGgoY29uc3RfY2FzdDxRQ2hhcio+KGVsbGlwc2lzQW5kU3BhY2VTdHIudW5pY29kZSgpKSwgMiwg
MCwgMiwgMCwgMCk7CisgICAgICAgICAgICAgICAgaW50IGVsbGlwc2lzQW5kU3BhY2VXaWR0aCA9
IGZvbnQud2lkdGgoZWxsaXBzaXNBbmRTcGFjZSwgMiwgMCwgMiwgMCwgMCk7CiAKICAgICAgICAg
ICAgICAgICAvLyBHZXQgZWxsaXBzaXMgd2lkdGggKyAiICIgKyBhbmNob3Igd2lkdGgKICAgICAg
ICAgICAgICAgICBpbnQgdG90YWxXaWR0aCA9IGVsbGlwc2lzQW5kU3BhY2VXaWR0aCArIGFuY2hv
ckJveC0+d2lkdGgoKTsKQEAgLTc2OSw4ICs3NzgsMTAgQEAKICAgICAgICAgICAgICAgICBSZW5k
ZXJCbG9jayogc3JjQmxvY2sgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGxhc3RMaW5lLT5v
YmplY3QoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IERp
cmVjdGlvbnMgb2Ygc3JjL2Rlc3RCbG9jayBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBvdXIgZGly
ZWN0aW9uIGFuZCBmcm9tIG9uZSBhbm90aGVyLgotICAgICAgICAgICAgICAgIGlmIChzcmNCbG9j
ay0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgIT0gTFRSKSBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICBpZiAoZGVzdEJsb2NrLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSAhPSBMVFIpIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGlmIChzcmNCbG9jay0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgIT0gTFRS
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoZGVz
dEJsb2NrLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSAhPSBMVFIpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgaW50IGJsb2NrRWRnZSA9IGRlc3RCbG9jay0+
cmlnaHRPZmZzZXQobGFzdFZpc2libGVMaW5lLT55UG9zKCkpOwogICAgICAgICAgICAgICAgIGlm
ICghbGFzdFZpc2libGVMaW5lLT5jYW5BY2NvbW1vZGF0ZUVsbGlwc2lzKHRydWUsIGJsb2NrRWRn
ZSwgCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTQyMTYpCisrKyByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5Niw3ICsyNDk2LDcgQEAKICAgICBy
ZXR1cm4gKGF2b2lkc0Zsb2F0cygpICYmIChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpIHx8IGlz
SFIoKSB8fCAoc3R5bGUoKS0+aHRtbEhhY2tzKCkgJiYgIWlzVGFibGUoKSkpKTsKIH0KIAotUUNo
YXIgUmVuZGVyT2JqZWN0OjpiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgY29uc3QKK1VDaGFy
IFJlbmRlck9iamVjdDo6YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0CiB7CiAgICAg
aWYgKE5vZGUgKm5vZGUgPSBlbGVtZW50KCkpCiAgICAgICAgIGlmIChEZWNvZGVyICpkZWNvZGVy
ID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKQpJbmRleDogcmVuZGVyaW5nL2JpZGkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9iaWRpLmNwcAkocmV2aXNpb24gMTQyMTYpCisrKyBy
ZW5kZXJpbmcvYmlkaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgaHRtbCByZW5kZXJlciBmb3IgS0RFLgogICoKICAqIENvcHly
aWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzgsMTggKzM4LDE2
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIGFuIGl0ZXJhdG9yIHdoaWNoIHRyYXZlcnNl
cyBhbGwgdGhlIG9iamVjdHMgd2l0aGluIGEgYmxvY2sKLXN0cnVjdCBCaWRpSXRlcmF0b3IKLXsK
K3N0cnVjdCBCaWRpSXRlcmF0b3IgewogICAgIEJpZGlJdGVyYXRvcigpIDogYmxvY2soMCksIG9i
aigwKSwgcG9zKDApIHt9CiAgICAgQmlkaUl0ZXJhdG9yKFJlbmRlckJsb2NrKiBiLCBSZW5kZXJP
YmplY3QqIG8sIHVuc2lnbmVkIGludCBwKSAKLSAgICAgOmJsb2NrKGIpLCBvYmoobyksIHBvcyhw
KSB7fQorICAgICAgICA6IGJsb2NrKGIpLCBvYmoobyksIHBvcyhwKSB7fQogICAgIAogICAgIHZv
aWQgaW5jcmVtZW50KEJpZGlTdGF0ZSYgc3RhdGUpOwogICAgIGJvb2wgYXRFbmQoKSBjb25zdDsK
ICAgICAKLSAgICBjb25zdCBRQ2hhciYgY3VycmVudCgpIGNvbnN0OwotICAgIAotICAgIFFDaGFy
OjpEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3Q7CisgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0
OworICAgIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OwogCiAgICAgUmVuZGVyQmxv
Y2sqIGJsb2NrOwogICAgIFJlbmRlck9iamVjdCogb2JqOwpAQCAtNTcsNyArNTUsNyBAQAogfTsK
IAogc3RydWN0IEJpZGlTdGF0ZSB7Ci0gICAgQmlkaVN0YXRlKCkgOiBjb250ZXh0KDApLCBkaXIo
UUNoYXI6OkRpck9OKSwgYWRqdXN0RW1iZWRkaW5nKGZhbHNlKSwgcmVhY2hlZEVuZE9mTGluZShm
YWxzZSkge30KKyAgICBCaWRpU3RhdGUoKSA6IGNvbnRleHQoMCksIGRpcihVX09USEVSX05FVVRS
QUwpLCBhZGp1c3RFbWJlZGRpbmcoZmFsc2UpLCByZWFjaGVkRW5kT2ZMaW5lKGZhbHNlKSB7fQog
ICAgIAogICAgIEJpZGlJdGVyYXRvciBzb3I7CiAgICAgQmlkaUl0ZXJhdG9yIGVvcjsKQEAgLTY1
LDcgKzYzLDcgQEAKICAgICBCaWRpSXRlcmF0b3IgY3VycmVudDsKICAgICBSZWZQdHI8QmlkaUNv
bnRleHQ+IGNvbnRleHQ7CiAgICAgQmlkaVN0YXR1cyBzdGF0dXM7Ci0gICAgUUNoYXI6OkRpcmVj
dGlvbiBkaXI7CisgICAgVUNoYXJEaXJlY3Rpb24gZGlyOwogICAgIGJvb2wgYWRqdXN0RW1iZWRk
aW5nOwogICAgIEJpZGlJdGVyYXRvciBlbmRPZkxpbmU7CiAgICAgYm9vbCByZWFjaGVkRW5kT2ZM
aW5lOwpAQCAtMTA0LDggKzEwMiw4IEBACiBzdGF0aWMgYm9vbCBlbXB0eVJ1biA9IHRydWU7CiBz
dGF0aWMgaW50IG51bVNwYWNlczsKIAotc3RhdGljIHZvaWQgZW1iZWQoUUNoYXI6OkRpcmVjdGlv
biBkLCBCaWRpU3RhdGUgJmJpZGkpOwotc3RhdGljIHZvaWQgYXBwZW5kUnVuKEJpZGlTdGF0ZSAm
YmlkaSk7CitzdGF0aWMgdm9pZCBlbWJlZChVQ2hhckRpcmVjdGlvbiwgQmlkaVN0YXRlJik7Citz
dGF0aWMgdm9pZCBhcHBlbmRSdW4oQmlkaVN0YXRlJik7CiAKIHN0YXRpYyBpbnQgZ2V0QlBNV2lk
dGgoaW50IGNoaWxkVmFsdWUsIExlbmd0aCBjc3NVbml0KQogewpAQCAtMTk5LDcgKzE5Nyw3IEBA
CiAgICBFYWNoIGxpbmUgb2YgdGV4dCBjYWNoZXMgdGhlIGVtYmVkZGluZyBsZXZlbCBhdCB0aGUg
c3RhcnQgb2YgdGhlIGxpbmUgZm9yIGZhc3RlcgogICAgcmVsYXlvdXRpbmcKICovCi1CaWRpQ29u
dGV4dDo6QmlkaUNvbnRleHQodW5zaWduZWQgY2hhciBsLCBRQ2hhcjo6RGlyZWN0aW9uIGUsIEJp
ZGlDb250ZXh0ICpwLCBib29sIG8pCitCaWRpQ29udGV4dDo6QmlkaUNvbnRleHQodW5zaWduZWQg
Y2hhciBsLCBVQ2hhckRpcmVjdGlvbiBlLCBCaWRpQ29udGV4dCAqcCwgYm9vbCBvKQogICAgIDog
bGV2ZWwobCksIG92ZXJyaWRlKG8pLCBtX2RpcihlKQogewogICAgIHBhcmVudCA9IHA7CkBAIC0y
ODAsOSArMjc4LDkgQEAKICAgICAgICAgICAgICAgICBFVW5pY29kZUJpZGkgdWIgPSBuZXh0LT5z
dHlsZSgpLT51bmljb2RlQmlkaSgpOwogICAgICAgICAgICAgICAgIGlmICh1YiAhPSBVQk5vcm1h
bCkgewogICAgICAgICAgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIGRpciA9IG5leHQtPnN0eWxl
KCktPmRpcmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBRQ2hhcjo6RGlyZWN0aW9uIGQg
PSAodWIgPT0gRW1iZWQKLSAgICAgICAgICAgICAgICAgICAgICAgID8gKGRpciA9PSBSVEwgPyBR
Q2hhcjo6RGlyUkxFIDogUUNoYXI6OkRpckxSRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIDog
KGRpciA9PSBSVEwgPyBRQ2hhcjo6RGlyUkxPIDogUUNoYXI6OkRpckxSTykpOworICAgICAgICAg
ICAgICAgICAgICBVQ2hhckRpcmVjdGlvbiBkID0gKHViID09IEVtYmVkCisgICAgICAgICAgICAg
ICAgICAgICAgICA/IChkaXIgPT0gUlRMID8gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORyA6IFVf
TEVGVF9UT19SSUdIVF9FTUJFRERJTkcpCisgICAgICAgICAgICAgICAgICAgICAgICA6IChkaXIg
PT0gUlRMID8gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFIDogVV9MRUZUX1RPX1JJR0hUX09WRVJS
SURFKSk7CiAgICAgICAgICAgICAgICAgICAgIGVtYmVkKGQsIGJpZGkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI5OCw3ICsyOTYsNyBAQAogCiAgICAgICAgICAgICB3
aGlsZSAoY3VycmVudCAmJiBjdXJyZW50ICE9IGJsb2NrKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGJpZGkuYWRqdXN0RW1iZWRkaW5nICYmIGN1cnJlbnQtPmlzSW5saW5lRmxvdygpICYmIGN1cnJl
bnQtPnN0eWxlKCktPnVuaWNvZGVCaWRpKCkgIT0gVUJOb3JtYWwpCi0gICAgICAgICAgICAgICAg
ICAgIGVtYmVkKFFDaGFyOjpEaXJQREYsIGJpZGkpOworICAgICAgICAgICAgICAgICAgICBlbWJl
ZChVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQsIGJpZGkpOwogCiAgICAgICAgICAgICAgICAgbmV4
dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICAgICAgaWYgKG5leHQpIHsK
QEAgLTMwNiw5ICszMDQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgRVVuaWNvZGVCaWRp
IHViID0gbmV4dC0+c3R5bGUoKS0+dW5pY29kZUJpZGkoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh1YiAhPSBVQk5vcm1hbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRl
eHREaXJlY3Rpb24gZGlyID0gbmV4dC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUUNoYXI6OkRpcmVjdGlvbiBkID0gKHViID09IEVtYmVkCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGRpciA9PSBSVEwgPyBRQ2hhcjo6RGlyUkxF
IDogUUNoYXI6OkRpckxSRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZGly
ID09IFJUTCA/IFFDaGFyOjpEaXJSTE8gOiBRQ2hhcjo6RGlyTFJPKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVUNoYXJEaXJlY3Rpb24gZCA9ICh1YiA9PSBFbWJlZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IChkaXIgPT0gUlRMID8gVV9SSUdIVF9UT19MRUZUX0VN
QkVERElORyA6IFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkcpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogKGRpciA9PSBSVEwgPyBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUgOiBV
X0xFRlRfVE9fUklHSFRfT1ZFUlJJREUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bWJlZChkLCBiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMzQ4LDkgKzM0Niw5IEBACiAgICAgICAgICAgICBFVW5pY29kZUJpZGkgdWIg
PSBvLT5zdHlsZSgpLT51bmljb2RlQmlkaSgpOwogICAgICAgICAgICAgaWYgKHViICE9IFVCTm9y
bWFsKSB7CiAgICAgICAgICAgICAgICAgVGV4dERpcmVjdGlvbiBkaXIgPSBvLT5zdHlsZSgpLT5k
aXJlY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBRQ2hhcjo6RGlyZWN0aW9uIGQgPSAodWIgPT0g
RW1iZWQKLSAgICAgICAgICAgICAgICAgICAgPyAoZGlyID09IFJUTCA/IFFDaGFyOjpEaXJSTEUg
OiBRQ2hhcjo6RGlyTFJFKQotICAgICAgICAgICAgICAgICAgICA6IChkaXIgPT0gUlRMID8gUUNo
YXI6OkRpclJMTyA6IFFDaGFyOjpEaXJMUk8pKTsKKyAgICAgICAgICAgICAgICBVQ2hhckRpcmVj
dGlvbiBkID0gKHViID09IEVtYmVkCisgICAgICAgICAgICAgICAgICAgID8gKGRpciA9PSBSVEwg
PyBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HIDogVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORykK
KyAgICAgICAgICAgICAgICAgICAgOiAoZGlyID09IFJUTCA/IFVfUklHSFRfVE9fTEVGVF9PVkVS
UklERSA6IFVfTEVGVF9UT19SSUdIVF9PVkVSUklERSkpOwogICAgICAgICAgICAgICAgIGVtYmVk
KGQsIGJpZGkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zODYsMzMgKzM4NCwzMCBA
QAogICAgIHJldHVybiAhb2JqOwogfQogCi1jb25zdCBRQ2hhciYgQmlkaUl0ZXJhdG9yOjpjdXJy
ZW50KCkgY29uc3QKK1VDaGFyIEJpZGlJdGVyYXRvcjo6Y3VycmVudCgpIGNvbnN0CiB7Ci0gICAg
c3RhdGljIFFDaGFyIG51bGxDaGFyYWN0ZXI7Ci0gICAgCiAgICAgaWYgKCFvYmogfHwgIW9iai0+
aXNUZXh0KCkpCi0gICAgICAgIHJldHVybiBudWxsQ2hhcmFjdGVyOworICAgICAgICByZXR1cm4g
MDsKICAgICAKICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+
KG9iaik7CiAgICAgaWYgKCF0ZXh0LT50ZXh0KCkpCi0gICAgICAgIHJldHVybiBudWxsQ2hhcmFj
dGVyOworICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICByZXR1cm4gdGV4dC0+dGV4dCgpW3Bv
c107CiB9CiAKLUFMV0FZU19JTkxJTkUgUUNoYXI6OkRpcmVjdGlvbiBCaWRpSXRlcmF0b3I6OmRp
cmVjdGlvbigpIGNvbnN0CitBTFdBWVNfSU5MSU5FIFVDaGFyRGlyZWN0aW9uIEJpZGlJdGVyYXRv
cjo6ZGlyZWN0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIFFD
aGFyOjpEaXJPTjsKKyAgICAgICAgcmV0dXJuIFVfT1RIRVJfTkVVVFJBTDsKICAgICBpZiAob2Jq
LT5pc0xpc3RNYXJrZXIoKSkKLSAgICAgICAgcmV0dXJuIG9iai0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCkgPT0gTFRSID8gUUNoYXI6OkRpckwgOiBRQ2hhcjo6RGlyUjsKKyAgICAgICAgcmV0dXJuIG9i
ai0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gVV9MRUZUX1RPX1JJR0hUIDogVV9SSUdI
VF9UT19MRUZUOwogICAgIGlmICghb2JqLT5pc1RleHQoKSkKLSAgICAgICAgcmV0dXJuIFFDaGFy
OjpEaXJPTjsKLQotICAgIFJlbmRlclRleHQgKnJlbmRlclR4dCA9IHN0YXRpY19jYXN0PFJlbmRl
clRleHQgKj4ob2JqKTsKKyAgICAgICAgcmV0dXJuIFVfT1RIRVJfTkVVVFJBTDsKKyAgICBSZW5k
ZXJUZXh0KiByZW5kZXJUeHQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ob2JqKTsKICAgICBp
ZiAocG9zID49IHJlbmRlclR4dC0+c3RyaW5nTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBRQ2hh
cjo6RGlyT047Ci0gICAgcmV0dXJuIHJlbmRlclR4dC0+dGV4dCgpW3Bvc10uZGlyZWN0aW9uKCk7
CisgICAgICAgIHJldHVybiBVX09USEVSX05FVVRSQUw7CisgICAgcmV0dXJuIHVfY2hhckRpcmVj
dGlvbihyZW5kZXJUeHQtPnRleHQoKVtwb3NdKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDMzLDcgKzQyOCw3IEBACiAgICAgICAgIFJlbmRl
clRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4oYmlkaVJ1bi0+b2JqKTsKICAg
ICAgICAgaWYgKHRleHQtPnRleHQoKSkgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IGJpZGlS
dW4tPnN0YXJ0OyBpIDwgYmlkaVJ1bi0+c3RvcDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgUUNoYXIgYyA9IHRleHQtPnRleHQoKVtpXTsKKyAgICAgICAgICAgICAgICBVQ2hhciBjID0g
dGV4dC0+dGV4dCgpW2ldOwogICAgICAgICAgICAgICAgIGlmIChjID09ICcgJyB8fCBjID09ICdc
bicgfHwgYyA9PSAnXHQnKQogICAgICAgICAgICAgICAgICAgICBudW1TcGFjZXMrKzsKICAgICAg
ICAgICAgIH0KQEAgLTUyNCwxMSArNTE5LDExIEBACiAgICAgICAgICAgICAgICAgICAgIC8vIERv
bid0IHNoYXZlIGEgY2hhcmFjdGVyIG9mZiB0aGUgZW5kcG9pbnQgaWYgaXQgd2FzIGZyb20gYSBz
b2Z0IGh5cGhlbi4KICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dE9iaiA9IHN0
YXRpY19jYXN0PFJlbmRlclRleHQqPihlbmRwb2ludC5vYmopOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoZW5kcG9pbnQucG9zKzEgPCB0ZXh0T2JqLT5sZW5ndGgoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRleHRPYmotPnRleHQoKVtlbmRwb2ludC5wb3MrMV0udW5pY29kZSgp
ID09IFNPRlRfSFlQSEVOKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRPYmotPnRl
eHQoKVtlbmRwb2ludC5wb3MrMV0gPT0gU09GVF9IWVBIRU4pCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0cG9p
bnQub2JqLT5pc1RleHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCAq
c3RhcnRUZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHN0YXJ0cG9pbnQub2JqKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFRleHQtPmxlbmd0aCgpID4gMCAmJiBzdGFy
dFRleHQtPnRleHQoKVswXS51bmljb2RlKCkgPT0gU09GVF9IWVBIRU4pCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RhcnRUZXh0LT5sZW5ndGgoKSA+IDAgJiYgc3RhcnRUZXh0LT50ZXh0
KClbMF0gPT0gU09GVF9IWVBIRU4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNjI1LDM3ICs2
MjAsNDQgQEAKICAgICAKICAgICBiaWRpLmVvci5pbmNyZW1lbnQoYmlkaSk7CiAgICAgYmlkaS5z
b3IgPSBiaWRpLmVvcjsKLSAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJPTjsKLSAgICBiaWRpLnN0
YXR1cy5lb3IgPSBRQ2hhcjo6RGlyT047CisgICAgYmlkaS5kaXIgPSBVX09USEVSX05FVVRSQUw7
CisgICAgYmlkaS5zdGF0dXMuZW9yID0gVV9PVEhFUl9ORVVUUkFMOwogICAgIGJpZGkuYWRqdXN0
RW1iZWRkaW5nID0gYjsKIH0KIAotc3RhdGljIHZvaWQgZW1iZWQoUUNoYXI6OkRpcmVjdGlvbiBk
LCBCaWRpU3RhdGUmIGJpZGkpCitzdGF0aWMgdm9pZCBlbWJlZChVQ2hhckRpcmVjdGlvbiBkLCBC
aWRpU3RhdGUmIGJpZGkpCiB7CiAgICAgYm9vbCBiID0gYmlkaS5hZGp1c3RFbWJlZGRpbmc7CiAg
ICAgYmlkaS5hZGp1c3RFbWJlZGRpbmcgPSBmYWxzZTsKLSAgICBpZiAoZCA9PSBRQ2hhcjo6RGly
UERGKSB7CisgICAgaWYgKGQgPT0gVV9QT1BfRElSRUNUSU9OQUxfRk9STUFUKSB7CiAgICAgICAg
IEJpZGlDb250ZXh0ICpjID0gYmlkaS5jb250ZXh0LT5wYXJlbnQ7CiAgICAgICAgIGlmIChjKSB7
CiAgICAgICAgICAgICBpZiAoIWVtcHR5UnVuICYmIGJpZGkuZW9yICE9IGJpZGkubGFzdCkgewot
ICAgICAgICAgICAgICAgIGFzc2VydChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpck9OKTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQoYmlkaS5zdGF0dXMuZW9yICE9IFVfT1RIRVJfTkVVVFJB
TCk7CiAgICAgICAgICAgICAgICAgLy8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4uLiBiaWRpLmxh
c3QgZW9yOyBuZWVkIHRvIGFwcGVuZCB0aGUgYmlkaS5zb3ItYmlkaS5lb3IgcnVuIG9yIGV4dGVu
ZCBpdCB0aHJvdWdoIGJpZGkubGFzdAotICAgICAgICAgICAgICAgIGFzc2VydChiaWRpLnN0YXR1
cy5sYXN0ID09IFFDaGFyOjpEaXJFUyB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJF
VCB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJDUyB8fCBiaWRpLnN0YXR1cy5sYXN0
ID09IFFDaGFyOjpEaXJCTiB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJCIHx8IGJp
ZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpclMgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBRQ2hh
cjo6RGlyV1MgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBRQ2hhcjo6RGlyT04pOwotICAgICAgICAg
ICAgICAgIGlmIChiaWRpLmRpciA9PSBRQ2hhcjo6RGlyT04pCisgICAgICAgICAgICAgICAgYXNz
ZXJ0KGJpZGkuc3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SCisgICAg
ICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1CRVJf
VEVSTUlOQVRPUgorICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFVf
Q09NTU9OX05VTUJFUl9TRVBBUkFUT1IKKyAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0
dXMubGFzdCA9PSBVX0JPVU5EQVJZX05FVVRSQUwKKyAgICAgICAgICAgICAgICAgICAgfHwgYmlk
aS5zdGF0dXMubGFzdCA9PSBVX0JMT0NLX1NFUEFSQVRPUgorICAgICAgICAgICAgICAgICAgICB8
fCBiaWRpLnN0YXR1cy5sYXN0ID09IFVfU0VHTUVOVF9TRVBBUkFUT1IKKyAgICAgICAgICAgICAg
ICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBVX1dISVRFX1NQQUNFX05FVVRSQUwKKyAgICAg
ICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBVX09USEVSX05FVVRSQUwpOwor
ICAgICAgICAgICAgICAgIGlmIChiaWRpLmRpciA9PSBVX09USEVSX05FVVRSQUwpCiAgICAgICAg
ICAgICAgICAgICAgIGJpZGkuZGlyID0gYmlkaS5jb250ZXh0LT5kaXIoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSA9PSBRQ2hhcjo6RGlyTCkgeworICAgICAgICAg
ICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpcigpID09IFVfTEVGVF9UT19SSUdIVCkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBM
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRpckVO
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAh
PSBRQ2hhcjo6RGlyTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0g
UUNoYXI6OkRpckVOOworICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09
IFVfRVVST1BFQU5fTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5z
dGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IFVfRVVST1BFQU5fTlVNQkVSOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6
OkRpckFOKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJB
TjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gVV9B
UkFCSUNfTlVNQkVSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFVfQVJB
QklDX05VTUJFUjsKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRp
ckwpCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9yICE9IFVf
TEVGVF9UT19SSUdIVCkKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGly
UiAmJiBiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpckFMKQorICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9yICE9IFVfUklHSFRfVE9fTEVGVCAmJiBiaWRpLnN0YXR1
cy5lb3IgIT0gVV9SSUdIVF9UT19MRUZUX0FSQUJJQykKICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwogICAg
ICAgICAgICAgfQpAQCAtNjY5LDE1ICs2NzEsMTUgQEAKICAgICAgICAgICAgIGJpZGkuZW9yLm9i
aiA9IDA7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBRQ2hhcjo6RGlyZWN0aW9u
IHJ1bkRpcjsKLSAgICAgICAgaWYgKGQgPT0gUUNoYXI6OkRpclJMRSB8fCBkID09IFFDaGFyOjpE
aXJSTE8pCi0gICAgICAgICAgICBydW5EaXIgPSBRQ2hhcjo6RGlyUjsKKyAgICAgICAgVUNoYXJE
aXJlY3Rpb24gcnVuRGlyOworICAgICAgICBpZiAoZCA9PSBVX1JJR0hUX1RPX0xFRlRfRU1CRURE
SU5HIHx8IGQgPT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFKQorICAgICAgICAgICAgcnVuRGly
ID0gVV9SSUdIVF9UT19MRUZUOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBydW5EaXIgPSBR
Q2hhcjo6RGlyTDsKLSAgICAgICAgYm9vbCBvdmVycmlkZSA9IGQgPT0gUUNoYXI6OkRpckxSTyB8
fCBkID09IFFDaGFyOjpEaXJSTE87CisgICAgICAgICAgICBydW5EaXIgPSBVX0xFRlRfVE9fUklH
SFQ7CisgICAgICAgIGJvb2wgb3ZlcnJpZGUgPSBkID09IFVfTEVGVF9UT19SSUdIVF9PVkVSUklE
RSB8fCBkID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERTsKIAogICAgICAgICB1bnNpZ25lZCBj
aGFyIGxldmVsID0gYmlkaS5jb250ZXh0LT5sZXZlbDsKLSAgICAgICAgaWYgKHJ1bkRpciA9PSBR
Q2hhcjo6RGlyUikgeworICAgICAgICBpZiAocnVuRGlyID09IFVfUklHSFRfVE9fTEVGVCkgewog
ICAgICAgICAgICAgaWYgKGxldmVsJTIpIC8vIHdlIGhhdmUgYW4gb2RkIGxldmVsCiAgICAgICAg
ICAgICAgICAgbGV2ZWwgKz0gMjsKICAgICAgICAgICAgIGVsc2UKQEAgLTY5MSw0MCArNjkzLDQ3
IEBACiAKICAgICAgICAgaWYgKGxldmVsIDwgNjEpIHsKICAgICAgICAgICAgIGlmICghZW1wdHlS
dW4gJiYgYmlkaS5lb3IgIT0gYmlkaS5sYXN0KSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGJp
ZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyT04pOworICAgICAgICAgICAgICAgIGFzc2VydChi
aWRpLnN0YXR1cy5lb3IgIT0gVV9PVEhFUl9ORVVUUkFMKTsKICAgICAgICAgICAgICAgICAvLyBi
aWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5lZWQgdG8gYXBwZW5kIHRo
ZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91Z2ggYmlkaS5sYXN0Ci0g
ICAgICAgICAgICAgICAgYXNzZXJ0KGJpZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpckVTIHx8
IGJpZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpckVUIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0g
UUNoYXI6OkRpckNTIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpckJOIHx8IGJpZGku
c3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpckIgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBRQ2hhcjo6
RGlyUyB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJXUyB8fCBiaWRpLnN0YXR1cy5s
YXN0ID09IFFDaGFyOjpEaXJPTik7Ci0gICAgICAgICAgICAgICAgaWYgKGJpZGkuZGlyID09IFFD
aGFyOjpEaXJPTikKKyAgICAgICAgICAgICAgICBhc3NlcnQoYmlkaS5zdGF0dXMubGFzdCA9PSBV
X0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1IKKyAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5z
dGF0dXMubGFzdCA9PSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SCisgICAgICAgICAgICAg
ICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gVV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUgor
ICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFVfQk9VTkRBUllfTkVV
VFJBTAorICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFVfQkxPQ0tf
U0VQQVJBVE9SCisgICAgICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gVV9T
RUdNRU5UX1NFUEFSQVRPUgorICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0YXR1cy5sYXN0
ID09IFVfV0hJVEVfU1BBQ0VfTkVVVFJBTAorICAgICAgICAgICAgICAgICAgICB8fCBiaWRpLnN0
YXR1cy5sYXN0ID09IFVfT1RIRVJfTkVVVFJBTCk7CisgICAgICAgICAgICAgICAgaWYgKGJpZGku
ZGlyID09IFVfT1RIRVJfTkVVVFJBTCkKICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBy
dW5EaXI7Ci0gICAgICAgICAgICAgICAgaWYgKHJ1bkRpciA9PSBRQ2hhcjo6RGlyTCkgeworICAg
ICAgICAgICAgICAgIGlmIChydW5EaXIgPT0gVV9MRUZUX1RPX1JJR0hUKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IEwKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyRU4pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFFDaGFy
OjpEaXJMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6
RGlyRU47CisgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gVV9FVVJP
UEVBTl9OVU1CRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5s
YXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGkuZGlyID0gVV9FVVJPUEVBTl9OVU1CRVI7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChi
aWRpLmNvbnRleHQtPmRpcigpICE9IFFDaGFyOjpEaXJMKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpcigpICE9IFVfTEVGVF9UT19SSUdIVCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBVX1JJR0hUX1RPX0xFRlQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
YmlkaS5zdGF0dXMuZW9yID09IFFDaGFyOjpEaXJBTikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyQU47CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoYmlkaS5zdGF0dXMuZW9yID09IFVfQVJBQklDX05VTUJFUikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYmlkaS5kaXIgPSBVX0FSQUJJQ19OVU1CRVI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5j
b250ZXh0LT5kaXIoKSAhPSBRQ2hhcjo6RGlyTCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgIT0gVV9MRUZUX1RPX1JJR0hUKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiaWRpLmRpciA9IFVfUklHSFRfVE9fTEVGVDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9yICE9IFFDaGFyOjpEaXJM
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSA9PSBR
Q2hhcjo6RGlyTCB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJMKQorICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciAhPSBVX0xFRlRfVE9f
UklHSFQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpcigp
ID09IFVfTEVGVF9UT19SSUdIVCB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IFVfTEVGVF9U
T19SSUdIVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlk
aS5kaXIgPSBVX1JJR0hUX1RPX0xFRlQ7IAogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpclIgJiYgYmlk
aS5zdGF0dXMuZW9yICE9IFFDaGFyOjpEaXJBTCkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoYmlkaS5zdGF0dXMuZW9yICE9IFVfUklHSFRfVE9fTEVGVCAmJiBiaWRpLnN0YXR1cy5lb3Ig
IT0gVV9SSUdIVF9UT19MRUZUX0FSQUJJQykgewogICAgICAgICAgICAgICAgICAgICAvLyBiaWRp
LnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBSOyBiaWRpLmVvcj1ML0VOL0FOOyBFTixB
TiBiZWhhdmUgbGlrZSBSIChydWxlIE4xKQotICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5j
b250ZXh0LT5kaXIoKSA9PSBRQ2hhcjo6RGlyUiB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID09
IFFDaGFyOjpEaXJSIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRpckFMKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSA9PSBVX1JJR0hUX1RP
X0xFRlQgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlQgfHwgYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJMOyAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gVV9MRUZUX1RPX1JJR0hUOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKICAgICAgICAg
ICAgIH0KQEAgLTgzNSw3ICs4NDQsNyBAQAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICgh
bV90YWJXaWR0aCkgewotICAgICAgICBRQ2hhciBzcGFjZUNoYXIoJyAnKTsKKyAgICAgICAgY29u
c3QgVUNoYXIgc3BhY2VDaGFyID0gJyAnOwogICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5
bGUoKS0+Zm9udCgpOwogICAgICAgICBpbnQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoJnNwYWNl
Q2hhciwgMSk7CiAgICAgICAgIG1fdGFiV2lkdGggPSBzcGFjZVdpZHRoICogODsKQEAgLTg2Myw5
ICs4NzIsOSBAQAogICAgICAgICAgICAgaW50IGVmZmVjdGl2ZVdpZHRoID0gdGV4dFdpZHRoOwog
ICAgICAgICAgICAgaW50IHJ0TGVuZ3RoID0gcnQtPmxlbmd0aCgpOwogICAgICAgICAgICAgaWYg
KHJ0TGVuZ3RoICE9IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoci0+c3RhcnQgPT0gMCAmJiBu
ZWVkc1dvcmRTcGFjaW5nICYmIHJ0LT50ZXh0KClbci0+c3RhcnRdLmlzU3BhY2UoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoci0+c3RhcnQgPT0gMCAmJiBuZWVkc1dvcmRTcGFjaW5nICYmIFFDaGFy
KHJ0LT50ZXh0KClbci0+c3RhcnRdKS5pc1NwYWNlKCkpCiAgICAgICAgICAgICAgICAgICAgIGVm
ZmVjdGl2ZVdpZHRoICs9IHJ0LT5mb250KG1fZmlyc3RMaW5lKS0+d29yZFNwYWNpbmcoKTsKLSAg
ICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5nID0gIXJ0LT50ZXh0KClbci0+c3RvcC0xXS5p
c1NwYWNlKCkgJiYgci0+c3RvcCA9PSBydExlbmd0aDsgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbmVlZHNXb3JkU3BhY2luZyA9ICFRQ2hhcihydC0+dGV4dCgpW3ItPnN0b3AtMV0pLmlzU3Bh
Y2UoKSAmJiByLT5zdG9wID09IHJ0TGVuZ3RoOyAgICAgICAgICAKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmICghci0+Y29tcGFjdCkgewogICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
ICpzdHlsZSA9IHItPm9iai0+c3R5bGUoKTsKQEAgLTkwOCw3ICs5MTcsNyBAQAogICAgICAgICBj
YXNlIFRBQVVUTzoKICAgICAgICAgICAgIG51bVNwYWNlcyA9IDA7CiAgICAgICAgICAgICAvLyBm
b3IgcmlnaHQgdG8gbGVmdCBmYWxsIHRocm91Z2ggdG8gcmlnaHQgYWxpZ25lZAotICAgICAgICAg
ICAgaWYgKGJpZGkuY29udGV4dC0+YmFzaWNEaXIoKSA9PSBRQ2hhcjo6RGlyTCkKKyAgICAgICAg
ICAgIGlmIChiaWRpLmNvbnRleHQtPmJhc2ljRGlyKCkgPT0gVV9MRUZUX1RPX1JJR0hUKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJJR0hUOgogICAgICAgICBjYXNlIEtI
VE1MX1JJR0hUOgpAQCAtOTM2LDcgKzk0NSw3IEBACiAgICAgICAgICAgICAgICAgLy8gZ2V0IHRo
ZSBudW1iZXIgb2Ygc3BhY2VzIGluIHRoZSBydW4KICAgICAgICAgICAgICAgICBpbnQgc3BhY2Vz
ID0gMDsKICAgICAgICAgICAgICAgICBmb3IgKCBpbnQgaSA9IHItPnN0YXJ0OyBpIDwgci0+c3Rv
cDsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBRQ2hhciBjID0gc3RhdGljX2Nh
c3Q8UmVuZGVyVGV4dCAqPihyLT5vYmopLT50ZXh0KClbaV07CisgICAgICAgICAgICAgICAgICAg
IFVDaGFyIGMgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4oci0+b2JqKS0+dGV4dCgpW2ldOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnICcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1x0
JykKICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcysrOwogICAgICAgICAgICAgICAgIH0K
QEAgLTEwMDIsNyArMTAxMSw3IEBACiAgICAgc0xhc3RCaWRpUnVuID0gMDsKICAgICBzQmlkaVJ1
bkNvdW50ID0gMDsKIAotICAgIGFzc2VydChiaWRpLmRpciA9PSBRQ2hhcjo6RGlyT04pOworICAg
IGFzc2VydChiaWRpLmRpciA9PSBVX09USEVSX05FVVRSQUwpOwogCiAgICAgZW1wdHlSdW4gPSB0
cnVlOwogCkBAIC0xMDE2LDcgKzEwMjUsNyBAQAogICAgIEJpZGlTdGF0ZSBzdGF0ZUF0RW5kOwog
CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgUUNoYXI6OkRpcmVjdGlvbiBkaXJDdXJyZW50
OworICAgICAgICBVQ2hhckRpcmVjdGlvbiBkaXJDdXJyZW50OwogICAgICAgICBpZiAocGFzdEVu
ZCAmJiAocHJldmlvdXNMaW5lQnJva2VDbGVhbmx5IHx8IGJpZGkuY3VycmVudC5hdEVuZCgpKSkg
ewogICAgICAgICAgICAgQmlkaUNvbnRleHQgKmMgPSBiaWRpLmNvbnRleHQuZ2V0KCk7CiAgICAg
ICAgICAgICB3aGlsZSAoYy0+cGFyZW50KQpAQCAtMTAzMiw3MSArMTA0MSw3NiBAQAogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZGlyQ3VycmVudCA9IGJpZGku
Y3VycmVudC5kaXJlY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPm92ZXJy
aWRlICYmIGRpckN1cnJlbnQgIT0gUUNoYXI6OkRpclJMRSAmJiBkaXJDdXJyZW50ICE9IFFDaGFy
OjpEaXJMUkUgJiYgZGlyQ3VycmVudCAhPSBRQ2hhcjo6RGlyUkxPICYmIGRpckN1cnJlbnQgIT0g
UUNoYXI6OkRpckxSTyAmJiBkaXJDdXJyZW50ICE9IFFDaGFyOjpEaXJQREYpCisgICAgICAgICAg
ICBpZiAoYmlkaS5jb250ZXh0LT5vdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAmJiBkaXJD
dXJyZW50ICE9IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcKKyAgICAgICAgICAgICAgICAgICAg
JiYgZGlyQ3VycmVudCAhPSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HCisgICAgICAgICAgICAg
ICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFCisgICAgICAg
ICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFCisg
ICAgICAgICAgICAgICAgICAgICYmIGRpckN1cnJlbnQgIT0gVV9QT1BfRElSRUNUSU9OQUxfRk9S
TUFUKQogICAgICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBiaWRpLmNvbnRleHQtPmRpcigpOwot
ICAgICAgICAgICAgZWxzZSBpZiAoZGlyQ3VycmVudCA9PSBRQ2hhcjo6RGlyTlNNKQorICAgICAg
ICAgICAgZWxzZSBpZiAoZGlyQ3VycmVudCA9PSBVX0RJUl9OT05fU1BBQ0lOR19NQVJLKQogICAg
ICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBiaWRpLnN0YXR1cy5sYXN0OwogICAgICAgICB9CiAK
LSAgICAgICAgYXNzZXJ0KGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyT04pOworICAgICAg
ICBhc3NlcnQoYmlkaS5zdGF0dXMuZW9yICE9IFVfT1RIRVJfTkVVVFJBTCk7CiAgICAgICAgIHN3
aXRjaCAoZGlyQ3VycmVudCkgewogCiAgICAgICAgIC8vIGVtYmVkZGluZyBhbmQgb3ZlcnJpZGVz
IChYMS1YOSBpbiB0aGUgQmlkaSBzcGVjcykKLSAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUkxFOgot
ICAgICAgICBjYXNlIFFDaGFyOjpEaXJMUkU6Ci0gICAgICAgIGNhc2UgUUNoYXI6OkRpclJMTzoK
LSAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTFJPOgotICAgICAgICBjYXNlIFFDaGFyOjpEaXJQREY6
CisgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0VNQkVERElORzoKKyAgICAgICAgY2FzZSBV
X0xFRlRfVE9fUklHSFRfRU1CRURESU5HOgorICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9P
VkVSUklERToKKyAgICAgICAgY2FzZSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREU6CisgICAgICAg
IGNhc2UgVV9QT1BfRElSRUNUSU9OQUxfRk9STUFUOgogICAgICAgICAgICAgZW1iZWQoZGlyQ3Vy
cmVudCwgYmlkaSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgLy8gc3Ryb25n
IHR5cGVzCi0gICAgICAgIGNhc2UgUUNoYXI6OkRpckw6CisgICAgICAgIGNhc2UgVV9MRUZUX1RP
X1JJR0hUOgogICAgICAgICAgICAgc3dpdGNoKGJpZGkuc3RhdHVzLmxhc3QpIHsKLSAgICAgICAg
ICAgICAgICBjYXNlIFFDaGFyOjpEaXJSOgotICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRp
ckFMOgotICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVOOgotICAgICAgICAgICAgICAg
IGNhc2UgUUNoYXI6OkRpckFOOgotICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMu
bGFzdCAhPSBRQ2hhcjo6RGlyRU4gfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBRQ2hhcjo6
RGlyTCkKKyAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoKKyAgICAgICAgICAg
ICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6CisgICAgICAgICAgICAgICAgY2FzZSBV
X0VVUk9QRUFOX05VTUJFUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3QgIT0gVV9FVVJPUEVBTl9O
VU1CRVIgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBVX0xFRlRfVE9fUklHSFQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckw6CisgICAgICAgICAgICAg
ICAgY2FzZSBVX0xFRlRfVE9fUklHSFQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVTOgotICAgICAgICAgICAgICAgIGNhc2UgUUNo
YXI6OkRpckVUOgotICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckNTOgotICAgICAgICAg
ICAgICAgIGNhc2UgUUNoYXI6OkRpckJOOgotICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRp
ckI6Ci0gICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUzoKLSAgICAgICAgICAgICAgICBj
YXNlIFFDaGFyOjpEaXJXUzoKLSAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJPTjoKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyRU4pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFFD
aGFyOjpEaXJMKSB7CisgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9TRVBB
UkFUT1I6CisgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9S
OgorICAgICAgICAgICAgICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKKyAgICAg
ICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBjYXNl
IFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAgICAgICAgICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFS
QVRPUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDoKKyAgICAg
ICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGJpZGkuc3RhdHVzLmVvciA9PSBVX0VVUk9QRUFOX05VTUJFUikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG51bWJlcnMgbmVlZCB0byBiZSBv
biBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2ZWwsIHNvIGxldCdzIGNsb3NlIHRoYXQgcnVuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyRU47CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBVX0VVUk9QRUFOX05VTUJFUjsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgIT0gUUNoYXI6OkRpckwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSAhPSBVX0xF
RlRfVE9fUklHSFQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5l
dXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24sIHdoaWNoIGlzIFIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpclI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gVV9SSUdIVF9UT19MRUZUOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyQU4pIHsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gVV9BUkFCSUNf
TlVNQkVSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcmFiaWMgbnVtYmVycyBhcmUg
YWx3YXlzIG9uIGEgaGlnaGVyIGVtYmVkZGluZyBsZXZlbCwgc28gbGV0J3MgY2xvc2UgdGhhdCBy
dW4KLSAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckFOOworICAg
ICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBVX0FSQUJJQ19OVU1CRVI7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSAhPSBRQ2hhcjo6RGlyTCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyKCkgIT0gVV9MRUZUX1RPX1JJR0hUKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5ldXRyYWxzIHRha2UgdGhlIGVt
YmVkZGluZyBkaXJlY3Rpb24sIHdoaWNoIGlzIFIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiaWRpLmVvciA9IGJpZGkubGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRp
LmRpciA9IFFDaGFyOjpEaXJSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGly
ID0gVV9SSUdIVF9UT19MRUZUOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1
bihiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmKGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyTCkgeworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYoYmlkaS5zdGF0dXMuZW9yICE9IFVfTEVGVF9UT19SSUdIVCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy9sYXN0IHN0dWZmIHRha2VzIGVtYmVkZGluZyBkaXIK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpcigpICE9IFFDaGFy
OjpEaXJMICYmIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gUUNoYXI6OkRpckwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpcigpICE9IFVfTEVGVF9UT19S
SUdIVCAmJiBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFVfTEVGVF9UT19SSUdIVCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OyAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOyAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFVfUklHSFRfVE9fTEVGVDsgCiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7
IAogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTA0LDM0ICsxMTE4LDM0IEBACiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYmlkaS5lb3Ig
PSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGly
TDsKLSAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPSBRQ2hhcjo6RGlyTDsKLSAg
ICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckw7CisgICAgICAgICAgICBiaWRpLnN0YXR1
cy5lb3IgPSBVX0xFRlRfVE9fUklHSFQ7CisgICAgICAgICAgICBiaWRpLnN0YXR1cy5sYXN0U3Ry
b25nID0gVV9MRUZUX1RPX1JJR0hUOworICAgICAgICAgICAgYmlkaS5kaXIgPSBVX0xFRlRfVE9f
UklHSFQ7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQUw6Ci0g
ICAgICAgIGNhc2UgUUNoYXI6OkRpclI6CisgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0FS
QUJJQzoKKyAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlQ6CiAgICAgICAgICAgICBzd2l0Y2gg
KGJpZGkuc3RhdHVzLmxhc3QpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJMOgot
ICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVOOgotICAgICAgICAgICAgICAgIGNhc2Ug
UUNoYXI6OkRpckFOOgorICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgorICAg
ICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6CisgICAgICAgICAgICAgICAgY2Fz
ZSBVX0FSQUJJQ19OVU1CRVI6CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsK
LSAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJSOgotICAgICAgICAgICAgICAgIGNhc2Ug
UUNoYXI6OkRpckFMOgorICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUOgorICAg
ICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19MRUZUX0FSQUJJQzoKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVM6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6
RGlyQ1M6Ci0gICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQk46Ci0gICAgICAgICAgICAg
ICAgY2FzZSBRQ2hhcjo6RGlyQjoKLSAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJTOgot
ICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpcldTOgotICAgICAgICAgICAgICAgIGNhc2Ug
UUNoYXI6OkRpck9OOgotICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yICE9
IFFDaGFyOjpEaXJSICYmIGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyQUwpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAg
ICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAgICAgICAg
Y2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgICAgIGNhc2UgVV9C
T1VOREFSWV9ORVVUUkFMOgorICAgICAgICAgICAgICAgIGNhc2UgVV9CTE9DS19TRVBBUkFUT1I6
CisgICAgICAgICAgICAgICAgY2FzZSBVX1NFR01FTlRfU0VQQVJBVE9SOgorICAgICAgICAgICAg
ICAgIGNhc2UgVV9XSElURV9TUEFDRV9ORVVUUkFMOgorICAgICAgICAgICAgICAgIGNhc2UgVV9P
VEhFUl9ORVVUUkFMOgorICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yICE9
IFVfUklHSFRfVE9fTEVGVCAmJiBiaWRpLnN0YXR1cy5lb3IgIT0gVV9SSUdIVF9UT19MRUZUX0FS
QUJJQykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy9sYXN0IHN0dWZmIHRha2VzIGVtYmVk
ZGluZyBkaXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpcigp
ICE9IFFDaGFyOjpEaXJSICYmIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gUUNoYXI6OkRpclIg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAh
PSBRQ2hhcjo6RGlyQUwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRl
eHQtPmRpcigpICE9IFVfUklHSFRfVE9fTEVGVCAmJiBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9
IFVfUklHSFRfVE9fTEVGVCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBiaWRpLnN0
YXR1cy5sYXN0U3Ryb25nICE9IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJMOyAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiaWRpLmRpciA9IFVfTEVGVF9UT19SSUdIVDsgCiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTExMzksOTkgKzExNTMsOTkgQEAKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3Vy
cmVudDsKLSAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJSOworICAgICAg
ICAgICAgYmlkaS5zdGF0dXMuZW9yID0gVV9SSUdIVF9UT19MRUZUOwogICAgICAgICAgICAgYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyA9IGRpckN1cnJlbnQ7Ci0gICAgICAgICAgICBiaWRpLmRpciA9
IFFDaGFyOjpEaXJSOworICAgICAgICAgICAgYmlkaS5kaXIgPSBVX1JJR0hUX1RPX0xFRlQ7CiAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgLy8gd2VhayB0eXBlczoKIAotICAgICAg
ICBjYXNlIFFDaGFyOjpEaXJFTjoKLSAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0U3Ry
b25nICE9IFFDaGFyOjpEaXJBTCkgeworICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSOgor
ICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9SSUdIVF9UT19MRUZU
X0FSQUJJQykgewogICAgICAgICAgICAgICAgIC8vIGlmIGxhc3Qgc3Ryb25nIHdhcyBBTCBjaGFu
Z2UgRU4gdG8gQU4KICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJpZGkuc3RhdHVzLmxhc3QpIHsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRU46Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgUUNoYXI6OkRpckw6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVB
Tl9OVU1CRVI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVV9MRUZUX1RPX1JJR0hUOgogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUUNo
YXI6OkRpclI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckFMOgotICAgICAg
ICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTjoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBVX1JJR0hUX1RPX0xFRlQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9UT19M
RUZUX0FSQUJJQzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0FSQUJJQ19OVU1CRVI6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJp
ZGkuZGlyID0gUUNoYXI6OkRpckVOOworICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIg
PSBVX0VVUk9QRUFOX05VTUJFUjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFUzoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBRQ2hhcjo6RGlyQ1M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0
dXMuZW9yID09IFFDaGFyOjpEaXJFTikKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9Q
RUFOX05VTUJFUl9TRVBBUkFUT1I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVV9DT01NT05f
TlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1
cy5lb3IgPT0gVV9FVVJPUEVBTl9OVU1CRVIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVUOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJCTjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBR
Q2hhcjo6RGlyQjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUzoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyV1M6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgUUNoYXI6OkRpck9OOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVz
LmVvciA9PSBRQ2hhcjo6RGlyUikgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFVfRVVST1BF
QU5fTlVNQkVSX1RFUk1JTkFUT1I6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVV9CT1VOREFS
WV9ORVVUUkFMOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgVV9XSElURV9TUEFDRV9ORVVUUkFMOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIFVfT1RIRVJfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRp
LnN0YXR1cy5lb3IgPT0gVV9SSUdIVF9UT19MRUZUKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gbmV1dHJhbHMgZ28gdG8gUgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJp
ZGkuZW9yID0gYmlkaS5zdGF0dXMubGFzdCA9PSBRQ2hhcjo6RGlyRVQgPyBiaWRpLmxhc3RCZWZv
cmVFVCA6IGJpZGkubGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9
IGJpZGkuc3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA/IGJpZGku
bGFzdEJlZm9yZUVUIDogYmlkaS5sYXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFD
aGFyOjpEaXJFTjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0
dXMuZW9yICE9IFFDaGFyOjpEaXJMICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoYmlkaS5zdGF0dXMuZW9yICE9IFFDaGFyOjpEaXJFTiB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ry
b25nICE9IFFDaGFyOjpEaXJMKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5kaXIgIT0gUUNoYXI6OkRpckwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
aWRpLmRpciA9IFVfRVVST1BFQU5fTlVNQkVSOworICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gVV9MRUZUX1RPX1JJR0hUICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoYmlkaS5zdGF0dXMuZW9yICE9IFVfRVVST1BFQU5fTlVN
QkVSIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gVV9MRUZUX1RPX1JJR0hUKSAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgIT0gVV9MRUZUX1RPX1JJR0hU
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbnVtYmVycyBvbiBib3RoIHNpZGVz
LCBuZXV0cmFscyBnZXQgcmlnaHQgdG8gbGVmdCBkaXJlY3Rpb24KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5lb3IgPSBiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJFVCA/IGJpZGkubGFzdEJl
Zm9yZUVUIDogYmlkaS5sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGly
ID0gUUNoYXI6OkRpclI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBi
aWRpLnN0YXR1cy5sYXN0ID09IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IgPyBiaWRpLmxh
c3RCZWZvcmVFVCA6IGJpZGkubGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRp
LmRpciA9IFVfUklHSFRfVE9fTEVGVDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBl
bmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hh
cjo6RGlyRU47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBVX0VVUk9Q
RUFOX05VTUJFUjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKLSAgICAgICAg
ICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyRU47Ci0gICAgICAgICAgICAgICAg
aWYgKGJpZGkuZGlyID09IFFDaGFyOjpEaXJPTikKLSAgICAgICAgICAgICAgICAgICAgYmlkaS5k
aXIgPSBRQ2hhcjo6RGlyTDsKKyAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBVX0VV
Uk9QRUFOX05VTUJFUjsKKyAgICAgICAgICAgICAgICBpZiAoYmlkaS5kaXIgPT0gVV9PVEhFUl9O
RVVUUkFMKQorICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFVfTEVGVF9UT19SSUdIVDsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSBRQ2hh
cjo6RGlyQU46Ci0gICAgICAgICAgICBkaXJDdXJyZW50ID0gUUNoYXI6OkRpckFOOworICAgICAg
ICBjYXNlIFVfQVJBQklDX05VTUJFUjoKKyAgICAgICAgICAgIGRpckN1cnJlbnQgPSBVX0FSQUJJ
Q19OVU1CRVI7CiAgICAgICAgICAgICBzd2l0Y2ggKGJpZGkuc3RhdHVzLmxhc3QpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJMOgotICAgICAgICAgICAgICAgICAgICBpZiAoYmlk
aS5jb250ZXh0LT5kaXIoKSA9PSBRQ2hhcjo6RGlyTCkKKyAgICAgICAgICAgICAgICBjYXNlIFVf
TEVGVF9UT19SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGly
KCkgPT0gVV9MRUZUX1RPX1JJR0hUKQogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KGJpZGkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IFFDaGFyOjpEaXJBTjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGly
UjoKLSAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTDoKLSAgICAgICAgICAgICAgICBj
YXNlIFFDaGFyOjpEaXJFTjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVDoK
KyAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6CisgICAgICAgICAg
ICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUjoKICAgICAgICAgICAgICAgICAgICAgYmlkaS5l
b3IgPSBiaWRpLmxhc3Q7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGly
Q1M6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRp
ckFOKQorICAgICAgICAgICAgICAgIGNhc2UgVV9DT01NT05fTlVNQkVSX1NFUEFSQVRPUjoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBVX0FSQUJJQ19OVU1CRVIp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFFD
aGFyOjpEaXJFUzoKLSAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFVDoKLSAgICAgICAg
ICAgICAgICBjYXNlIFFDaGFyOjpEaXJCTjoKLSAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpE
aXJCOgotICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpclM6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBRQ2hhcjo6RGlyV1M6Ci0gICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyT046Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpclIgJiYg
YmlkaS5zdGF0dXMuZW9yICE9IFFDaGFyOjpEaXJBTCkgeworICAgICAgICAgICAgICAgIGNhc2Ug
VV9FVVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SOgorICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJP
UEVBTl9OVU1CRVJfVEVSTUlOQVRPUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVfQk9VTkRBUllf
TkVVVFJBTDoKKyAgICAgICAgICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgorICAgICAg
ICAgICAgICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRPUjoKKyAgICAgICAgICAgICAgICBjYXNl
IFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDoKKyAgICAgICAgICAgICAgICBjYXNlIFVfT1RIRVJfTkVV
VFJBTDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciAhPSBVX1JJR0hU
X1RPX0xFRlQgJiYgYmlkaS5zdGF0dXMuZW9yICE9IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1biBvZiBMIGJlZm9yZSBuZXV0cmFscywgbmV1
dHJhbHMgdGFrZSBlbWJlZGRpbmcgZGlyIChOMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChiaWRpLmNvbnRleHQtPmRpcigpID09IFFDaGFyOjpEaXJSIHx8IGJpZGkuc3RhdHVzLmxhc3RT
dHJvbmcgPT0gUUNoYXI6OkRpclIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyQUwpIHsgCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIoKSA9PSBVX1JJR0hUX1RPX0xFRlQgfHwgYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlQgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBVX1JJR0hUX1RPX0xFRlRf
QVJBQklDKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlbWJlZGRpbmcg
ZGlyZWN0aW9uIGlzIFIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUg
TCBydW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV1dHJhbHMgYmVjb21lIGFuIFIgcnVuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFVfUklHSFRfVE9fTEVGVDsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIGVtYmVkZGluZyBkaXJlY3Rpb24gaXMgTAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFwcGVuZCBuZXV0cmFscyB0byB0aGUgTCBydW4gYW5kIGNsb3NlIGl0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyTDsgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBVX0xFRlRfVE9fUklHSFQ7IAogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IGJpZGkuZW9yID0gYmlkaS5sYXN0OwpAQCAtMTI0MCwzNyArMTI1NCwzNyBAQAogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJpZGkuZW9yID0g
YmlkaS5jdXJyZW50OwotICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckFO
OwotICAgICAgICAgICAgaWYgKGJpZGkuZGlyID09IFFDaGFyOjpEaXJPTikKLSAgICAgICAgICAg
ICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJBTjsKKyAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVv
ciA9IFVfQVJBQklDX05VTUJFUjsKKyAgICAgICAgICAgIGlmIChiaWRpLmRpciA9PSBVX09USEVS
X05FVVRSQUwpCisgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBVX0FSQUJJQ19OVU1CRVI7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVM6Ci0gICAgICAgIGNh
c2UgUUNoYXI6OkRpckNTOgorICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRP
UjoKKyAgICAgICAgY2FzZSBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SOgogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgUUNoYXI6OkRpckVUOgotICAgICAgICAgICAgaWYgKGJpZGku
c3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpckVOKSB7Ci0gICAgICAgICAgICAgICAgZGlyQ3VycmVu
dCA9IFFDaGFyOjpEaXJFTjsKKyAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5B
VE9SOgorICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3QgPT0gVV9FVVJPUEVBTl9OVU1C
RVIpIHsKKyAgICAgICAgICAgICAgICBkaXJDdXJyZW50ID0gVV9FVVJPUEVBTl9OVU1CRVI7CiAg
ICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CiAgICAgICAgICAgICAgICAg
YmlkaS5zdGF0dXMuZW9yID0gZGlyQ3VycmVudDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlk
aS5zdGF0dXMubGFzdCAhPSBRQ2hhcjo6RGlyRVQpCisgICAgICAgICAgICB9IGVsc2UgaWYgKGJp
ZGkuc3RhdHVzLmxhc3QgIT0gVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUikKICAgICAgICAg
ICAgICAgICBiaWRpLmxhc3RCZWZvcmVFVCA9IGVtcHR5UnVuID8gYmlkaS5lb3IgOiBiaWRpLmxh
c3Q7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAvLyBib3VuZGFyeSBuZXV0cmFscyBz
aG91bGQgYmUgaWdub3JlZAotICAgICAgICBjYXNlIFFDaGFyOjpEaXJCTjoKKyAgICAgICAgY2Fz
ZSBVX0JPVU5EQVJZX05FVVRSQUw6CiAgICAgICAgICAgICBpZiAoYmlkaS5lb3IgPT0gYmlkaS5s
YXN0KQogICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAvLyBuZXV0cmFscwotICAgICAgICBjYXNlIFFDaGFyOjpE
aXJCOgorICAgICAgICBjYXNlIFVfQkxPQ0tfU0VQQVJBVE9SOgogICAgICAgICAgICAgLy8gIyMj
IHdoYXQgZG8gd2UgZG8gd2l0aCBuZXdsaW5lIGFuZCBwYXJhZ3JhcGggc2VwZXJhdG9ycyB0aGF0
IGNvbWUgdG8gaGVyZT8KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFDaGFyOjpE
aXJTOgorICAgICAgICBjYXNlIFVfU0VHTUVOVF9TRVBBUkFUT1I6CiAgICAgICAgICAgICAvLyAj
IyMgaW1wbGVtZW50IHJ1bGUgTDEKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFD
aGFyOjpEaXJXUzoKKyAgICAgICAgY2FzZSBVX1dISVRFX1NQQUNFX05FVVRSQUw6CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRQ2hhcjo6RGlyT046CisgICAgICAgIGNhc2UgVV9P
VEhFUl9ORVVUUkFMOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTEyODEsMTMgKzEyOTUsMTMgQEAKICAgICAgICAgICAgICAgICBp
ZiAoIWJpZGkucmVhY2hlZEVuZE9mTGluZSkgewogICAgICAgICAgICAgICAgICAgICBiaWRpLmVv
ciA9IGJpZGkuZW5kT2ZMaW5lOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJpZGkuc3Rh
dHVzLmVvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpclI6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VV9MRUZUX1RPX1JJR0hUOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RP
X0xFRlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFVfQVJBQklDX05VTUJFUjoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IGJpZGkuc3RhdHVzLmVvcjsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgUUNoYXI6OkRpckVOOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGly
ID0gYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyTCA/IFFDaGFyOjpEaXJMIDog
UUNoYXI6OkRpckVOOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBVX0VVUk9QRUFOX05V
TUJFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IGJpZGkuc3RhdHVz
Lmxhc3RTdHJvbmcgPT0gVV9MRUZUX1RPX1JJR0hUID8gVV9MRUZUX1RPX1JJR0hUIDogVV9FVVJP
UEVBTl9OVU1CRVI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFz
c2VydChmYWxzZSk7CkBAIC0xMjk1LDQ0ICsxMzA5LDQ0IEBACiAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYmlk
aSA9IHN0YXRlQXRFbmQ7Ci0gICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyT047
CisgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBVX09USEVSX05FVVRSQUw7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLyBzZXQg
c3RhdHVzLmxhc3QgYXMgbmVlZGVkLgogICAgICAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsKLSAg
ICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVUOgotICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0
YXR1cy5sYXN0ICE9IFFDaGFyOjpEaXJFTikKLSAgICAgICAgICAgICAgICAgICAgYmlkaS5zdGF0
dXMubGFzdCA9IFFDaGFyOjpEaXJFVDsKKyAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1C
RVJfVEVSTUlOQVRPUjoKKyAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdCAhPSBV
X0VVUk9QRUFOX05VTUJFUikKKyAgICAgICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMubGFzdCA9
IFVfRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1I7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFUzoKLSAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRp
ckNTOgotICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUzoKLSAgICAgICAgICAgIGNhc2UgUUNo
YXI6OkRpcldTOgotICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyT046CisgICAgICAgICAgICBj
YXNlIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAgIGNhc2UgVV9DT01N
T05fTlVNQkVSX1NFUEFSQVRPUjoKKyAgICAgICAgICAgIGNhc2UgVV9TRUdNRU5UX1NFUEFSQVRP
UjoKKyAgICAgICAgICAgIGNhc2UgVV9XSElURV9TUEFDRV9ORVVUUkFMOgorICAgICAgICAgICAg
Y2FzZSBVX09USEVSX05FVVRSQUw6CiAgICAgICAgICAgICAgICAgc3dpdGNoKGJpZGkuc3RhdHVz
Lmxhc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTDoKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBR
Q2hhcjo6RGlyQUw6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVOOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTjoKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBVX0xFRlRfVE9fUklHSFQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVV9SSUdIVF9U
T19MRUZUOgorICAgICAgICAgICAgICAgICAgICBjYXNlIFVfUklHSFRfVE9fTEVGVF9BUkFCSUM6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVV9FVVJPUEVBTl9OVU1CRVI6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgVV9BUkFCSUNfTlVNQkVSOgogICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5zdGF0dXMubGFzdCA9IGRpckN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGkuc3RhdHVzLmxhc3QgPSBRQ2hhcjo6RGlyT047CisgICAgICAgICAgICAgICAgICAg
ICAgICBiaWRpLnN0YXR1cy5sYXN0ID0gVV9PVEhFUl9ORVVUUkFMOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFFDaGFyOjpE
aXJOU006Ci0gICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJCTjoKLSAgICAgICAgICAgIGNhc2Ug
UUNoYXI6OkRpclJMRToKLSAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckxSRToKLSAgICAgICAg
ICAgIGNhc2UgUUNoYXI6OkRpclJMTzoKLSAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckxSTzoK
LSAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpclBERjoKKyAgICAgICAgICAgIGNhc2UgVV9ESVJf
Tk9OX1NQQUNJTkdfTUFSSzoKKyAgICAgICAgICAgIGNhc2UgVV9CT1VOREFSWV9ORVVUUkFMOgor
ICAgICAgICAgICAgY2FzZSBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HOgorICAgICAgICAgICAg
Y2FzZSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HOgorICAgICAgICAgICAgY2FzZSBVX1JJR0hU
X1RPX0xFRlRfT1ZFUlJJREU6CisgICAgICAgICAgICBjYXNlIFVfTEVGVF9UT19SSUdIVF9PVkVS
UklERToKKyAgICAgICAgICAgIGNhc2UgVV9QT1BfRElSRUNUSU9OQUxfRk9STUFUOgogICAgICAg
ICAgICAgICAgIC8vIGlnbm9yZSB0aGVzZQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBRQ2hhcjo6RGlyRU46CisgICAgICAgICAgICBjYXNlIFVfRVVST1BFQU5fTlVN
QkVSOgogICAgICAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaAogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5sYXN0ID0gZGlyQ3VycmVudDsKQEAgLTEz
NDAsNyArMTM1NCwxMSBAQAogCiAgICAgICAgIGJpZGkubGFzdCA9IGJpZGkuY3VycmVudDsKIAot
ICAgICAgICBpZiAoZW1wdHlSdW4gJiYgIShkaXJDdXJyZW50ID09IFFDaGFyOjpEaXJSTEUgfHwg
ZGlyQ3VycmVudCA9PSBRQ2hhcjo6RGlyTFJFIHx8IGRpckN1cnJlbnQgPT0gUUNoYXI6OkRpclJM
TyB8fCBkaXJDdXJyZW50ID09IFFDaGFyOjpEaXJMUk8gfHwgZGlyQ3VycmVudCA9PSBRQ2hhcjo6
RGlyUERGKSkgeworICAgICAgICBpZiAoZW1wdHlSdW4gJiYgIShkaXJDdXJyZW50ID09IFVfUklH
SFRfVE9fTEVGVF9FTUJFRERJTkcKKyAgICAgICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09IFVf
TEVGVF9UT19SSUdIVF9FTUJFRERJTkcKKyAgICAgICAgICAgICAgICB8fCBkaXJDdXJyZW50ID09
IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERQorICAgICAgICAgICAgICAgIHx8IGRpckN1cnJlbnQg
PT0gVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFCisgICAgICAgICAgICAgICAgfHwgZGlyQ3VycmVu
dCA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQpKSB7CiAgICAgICAgICAgICBiaWRpLnNvciA9
IGJpZGkuY3VycmVudDsKICAgICAgICAgICAgIGVtcHR5UnVuID0gZmFsc2U7CiAgICAgICAgIH0K
QEAgLTEzNTAsNyArMTM2OCwxMSBAQAogICAgICAgICBiaWRpLmFkanVzdEVtYmVkZGluZyA9IHRy
dWU7CiAgICAgICAgIGJpZGkuY3VycmVudC5pbmNyZW1lbnQoYmlkaSk7CiAgICAgICAgIGJpZGku
YWRqdXN0RW1iZWRkaW5nID0gZmFsc2U7Ci0gICAgICAgIGlmIChlbXB0eVJ1biAmJiAoZGlyQ3Vy
cmVudCA9PSBRQ2hhcjo6RGlyUkxFIHx8IGRpckN1cnJlbnQgPT0gUUNoYXI6OkRpckxSRSB8fCBk
aXJDdXJyZW50ID09IFFDaGFyOjpEaXJSTE8gfHwgZGlyQ3VycmVudCA9PSBRQ2hhcjo6RGlyTFJP
IHx8IGRpckN1cnJlbnQgPT0gUUNoYXI6OkRpclBERikpIHsKKyAgICAgICAgaWYgKGVtcHR5UnVu
ICYmIChkaXJDdXJyZW50ID09IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcKKyAgICAgICAgICAg
ICAgICB8fCBkaXJDdXJyZW50ID09IFVfTEVGVF9UT19SSUdIVF9FTUJFRERJTkcKKyAgICAgICAg
ICAgICAgICB8fCBkaXJDdXJyZW50ID09IFVfUklHSFRfVE9fTEVGVF9PVkVSUklERQorICAgICAg
ICAgICAgICAgIHx8IGRpckN1cnJlbnQgPT0gVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFCisgICAg
ICAgICAgICAgICAgfHwgZGlyQ3VycmVudCA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQpKSB7
CiAgICAgICAgICAgICAvLyBleGNsdWRlIHRoZSBlbWJlZGRpbmcgY2hhciBpdHNlbGYgZnJvbSB0
aGUgbmV3IHJ1biBzbyB0aGF0IEFUU1VJIHdpbGwgbmV2ZXIgc2VlIGl0CiAgICAgICAgICAgICBi
aWRpLmVvci5vYmogPSAwOwogICAgICAgICAgICAgYmlkaS5sYXN0ID0gYmlkaS5jdXJyZW50OwpA
QCAtMTUzMywxOCArMTU1NSwxOCBAQAogCiAgICAgICAgIEJpZGlDb250ZXh0ICpzdGFydEVtYmVk
OwogICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7Ci0gICAgICAgICAg
ICBzdGFydEVtYmVkID0gbmV3IEJpZGlDb250ZXh0KCAwLCBRQ2hhcjo6RGlyTCwgTlVMTCwgc3R5
bGUoKS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSApOwotICAgICAgICAgICAgYmlkaS5zdGF0
dXMuZW9yID0gUUNoYXI6OkRpckw7CisgICAgICAgICAgICBzdGFydEVtYmVkID0gbmV3IEJpZGlD
b250ZXh0KCAwLCBVX0xFRlRfVE9fUklHSFQsIE5VTEwsIHN0eWxlKCktPnVuaWNvZGVCaWRpKCkg
PT0gT3ZlcnJpZGUgKTsKKyAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFVfTEVGVF9UT19S
SUdIVDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXJ0RW1iZWQgPSBuZXcgQmlk
aUNvbnRleHQoIDEsIFFDaGFyOjpEaXJSLCBOVUxMLCBzdHlsZSgpLT51bmljb2RlQmlkaSgpID09
IE92ZXJyaWRlICk7Ci0gICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyUjsK
KyAgICAgICAgICAgIHN0YXJ0RW1iZWQgPSBuZXcgQmlkaUNvbnRleHQoIDEsIFVfUklHSFRfVE9f
TEVGVCwgTlVMTCwgc3R5bGUoKS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSApOworICAgICAg
ICAgICAgYmlkaS5zdGF0dXMuZW9yID0gVV9SSUdIVF9UT19MRUZUOwogICAgICAgICB9CiAKICAg
ICAgICAgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9IHN0YXJ0RW1iZWQtPmRpcigpOwogICAgICAg
ICBiaWRpLnN0YXR1cy5sYXN0ID0gc3RhcnRFbWJlZC0+ZGlyKCk7CiAgICAgICAgIGJpZGkuc3Rh
dHVzLmVvciA9IHN0YXJ0RW1iZWQtPmRpcigpOwogICAgICAgICBiaWRpLmNvbnRleHQgPSBzdGFy
dEVtYmVkOwotICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJPTjsKKyAgICAgICAgYmlkaS5k
aXIgPSBVX09USEVSX05FVVRSQUw7CiAgICAgICAgIAogICAgICAgICBpZiAoIXNtaWRwb2ludHMp
CiAgICAgICAgICAgICBzbWlkcG9pbnRzID0gbmV3IERlcHJlY2F0ZWRBcnJheTxCaWRpSXRlcmF0
b3I+OwpAQCAtMTg3Myw3ICsxODk1LDcgQEAKIAogc3RhdGljIGlubGluZSBib29sIHNraXBOb25C
cmVha2luZ1NwYWNlKEJpZGlJdGVyYXRvciAmaXQpCiB7Ci0gICAgaWYgKGl0Lm9iai0+c3R5bGUo
KS0+bmJzcE1vZGUoKSAhPSBTUEFDRSB8fCBpdC5jdXJyZW50KCkudW5pY29kZSgpICE9IG5vbkJy
ZWFraW5nU3BhY2UpCisgICAgaWYgKGl0Lm9iai0+c3R5bGUoKS0+bmJzcE1vZGUoKSAhPSBTUEFD
RSB8fCBpdC5jdXJyZW50KCkgIT0gbm9uQnJlYWtpbmdTcGFjZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGJhZC4gIEl0IG1ha2VzIG5ic3AgaW5jb25z
aXN0ZW50IHdpdGggc3BhY2UgYW5kIHdvbid0IHdvcmsgY29ycmVjdGx5CkBAIC0xOTAxLDcgKzE5
MjMsNyBAQAogICAgIGludCB3ID0gbGluZVdpZHRoKG1faGVpZ2h0KTsKICAgICB3aGlsZSAoIWl0
LmF0RW5kKCkgJiYgKGl0Lm9iai0+aXNJbmxpbmVGbG93KCkgfHwgKHNob3VsZENvbGxhcHNlV2hp
dGVTcGFjZShpdC5vYmotPnN0eWxlKCkpICYmICFpdC5vYmotPmlzQlIoKSAmJgogICAgICAgICAg
IChpdC5jdXJyZW50KCkgPT0gJyAnIHx8IGl0LmN1cnJlbnQoKSA9PSAnXHQnIHx8ICghaXQub2Jq
LT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBpdC5jdXJyZW50KCkgPT0gJ1xuJykgfHwK
LSAgICAgICAgICBpdC5jdXJyZW50KCkudW5pY29kZSgpID09IFNPRlRfSFlQSEVOIHx8IHNraXBO
b25CcmVha2luZ1NwYWNlKGl0KSB8fCBpdC5vYmotPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkp
KSkgeworICAgICAgICAgIGl0LmN1cnJlbnQoKSA9PSBTT0ZUX0hZUEhFTiB8fCBza2lwTm9uQnJl
YWtpbmdTcGFjZShpdCkgfHwgaXQub2JqLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpKSkpIHsK
ICAgICAgICAgaWYgKGl0Lm9iai0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAgICAg
ICAgICBSZW5kZXJPYmplY3QgKm8gPSBpdC5vYmo7CiAgICAgICAgICAgICAvLyBhZGQgdG8gc3Bl
Y2lhbCBvYmplY3RzLi4uCkBAIC0yMTAyLDggKzIxMjQsNyBAQAogICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogbmV4dCA9IGJpZGlOZXh0KHN0YXJ0LmJsb2NrLCBvLCBiaWRpKTsKICAgICAg
ICAgICAgICAgICBpZiAoc3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgbmV4dCAmJiAh
bmV4dC0+aXNCUigpICYmIG5leHQtPmlzVGV4dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRleHQq
PihuZXh0KS0+c3RyaW5nTGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRl
clRleHQgKm5leHRUZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG5leHQpOwotICAgICAg
ICAgICAgICAgICAgICBRQ2hhciBuZXh0Q2hhciA9IG5leHRUZXh0LT50ZXh0KClbMF07Ci0KKyAg
ICAgICAgICAgICAgICAgICAgVUNoYXIgbmV4dENoYXIgPSBuZXh0VGV4dC0+dGV4dCgpWzBdOwog
ICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFRleHQtPnN0eWxlKCktPmlzQ29sbGFwc2libGVX
aGl0ZVNwYWNlKG5leHRDaGFyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENo
YXJhY3RlcklzU3BhY2UgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENo
YXJhY3RlcklzV1MgPSB0cnVlOwpAQCAtMjExOCw3ICsyMTM5LDcgQEAKICAgICAgICAgICAgIFJl
bmRlclRleHQgKnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pOwogICAgICAgICAgICAg
aW50IHN0cmxlbiA9IHQtPnN0cmluZ0xlbmd0aCgpOwogICAgICAgICAgICAgaW50IGxlbiA9IHN0
cmxlbiAtIHBvczsKLSAgICAgICAgICAgIGNvbnN0IFFDaGFyKiBzdHIgPSB0LT50ZXh0KCk7Cisg
ICAgICAgICAgICBjb25zdCBVQ2hhciogc3RyID0gdC0+dGV4dCgpOwogCiAgICAgICAgICAgICBj
b25zdCBGb250ICpmID0gdC0+Zm9udChtX2ZpcnN0TGluZSk7CiAgICAgICAgICAgICAvLyBwcm9w
b3J0aW9uYWwgZm9udCwgbmVlZHMgYSBiaXQgbW9yZSB3b3JrLgpAQCAtMjEzNCwxNCArMjE1NSwx
NCBAQAogICAgICAgICAgICAgd2hpbGUgKGxlbikgewogICAgICAgICAgICAgICAgIGJvb2wgcHJl
dmlvdXNDaGFyYWN0ZXJJc1NwYWNlID0gY3VycmVudENoYXJhY3RlcklzU3BhY2U7CiAgICAgICAg
ICAgICAgICAgYm9vbCBwcmV2aW91c0NoYXJhY3RlcklzV1MgPSBjdXJyZW50Q2hhcmFjdGVySXNX
UzsKLSAgICAgICAgICAgICAgICBjb25zdCBRQ2hhciBjID0gc3RyW3Bvc107CisgICAgICAgICAg
ICAgICAgVUNoYXIgYyA9IHN0cltwb3NdOwogICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0
ZXJJc1NwYWNlID0gYyA9PSAnICcgfHwgYyA9PSAnXHQnIHx8ICghby0+c3R5bGUoKS0+cHJlc2Vy
dmVOZXdsaW5lKCkgJiYgKGMgPT0gJ1xuJykpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFvLT5z
dHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSB8fCAhY3VycmVudENoYXJhY3RlcklzU3BhY2Up
CiAgICAgICAgICAgICAgICAgICAgIGlzTGluZUVtcHR5ID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHNvZnQgaHlwaGVucy4gIEdvIGFoZWFk
IGFuZCBpZ25vcmUgdGhlbS4KLSAgICAgICAgICAgICAgICBpZiAoYy51bmljb2RlKCkgPT0gU09G
VF9IWVBIRU4pIHsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSBTT0ZUX0hZUEhFTikgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlnbm9yaW5nU3BhY2VzKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZ25vcmUgc29mdCBoeXBoZW5zCiAgICAgICAgICAgICAgICAgICAgICAgICBC
aWRpSXRlcmF0b3IgZW5kTWlkOwpAQCAtMjE4MSw3ICsyMjAyLDcgQEAKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogVGhpcyBjaGVjayBsb29rcyBzdXNwaWNpb3VzLiBXaHkgZG9lcyB3IGhhdmUg
dG8gYmUgMD8gIAogICAgICAgICAgICAgICAgIGJvb2wgYnJlYWtXb3JkcyA9IG8tPnN0eWxlKCkt
PndvcmRXcmFwKCkgPT0gQlJFQUtfV09SRCAmJiAoKGFsbG93QnJlYWsgJiYgdyA9PSAwKSB8fCBv
LT5zdHlsZSgpLT53aGl0ZVNwYWNlKCkgPT0gUFJFKTsKIAotICAgICAgICAgICAgICAgIGN1cnJl
bnRDaGFyYWN0ZXJJc1dTID0gY3VycmVudENoYXJhY3RlcklzU3BhY2UgfHwgKGJyZWFrTkJTUCAm
JiBjLnVuaWNvZGUoKSA9PSBub25CcmVha2luZ1NwYWNlKTsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50Q2hhcmFjdGVySXNXUyA9IGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlIHx8IChicmVha05CU1Ag
JiYgYyA9PSBub25CcmVha2luZ1NwYWNlKTsKIAogICAgICAgICAgICAgICAgIGlmIChicmVha1dv
cmRzKQogICAgICAgICAgICAgICAgICAgICB3cmFwVyArPSB0LT53aWR0aChwb3MsIDEsIGYsIHcr
d3JhcFcpOwpAQCAtMjI2Niw3ICsyMjg3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pZFdvcmRCcmVhaykKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wVyAtPSBhZGRpdGlvbmFsVG1wVzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zID4gMCAmJiBzdHJbcG9zLTFdLnVuaWNv
ZGUoKSA9PSBTT0ZUX0hZUEhFTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9z
ID4gMCAmJiBzdHJbcG9zLTFdID09IFNPRlRfSFlQSEVOKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTdWJ0cmFjdCB0aGUgd2lkdGggb2YgdGhlIHNvZnQgaHlwaGVuIG91dCBz
aW5jZSB3ZSBmaXQgb24gYSBsaW5lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
bXBXIC09IHQtPndpZHRoKHBvcy0xLCAxLCBmLCB3K3RtcFcpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMjM2OSwxMyArMjM5MCwxMiBAQAogICAgICAgICAgICAgICAgICAgICBjaGVj
a0ZvckJyZWFrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQqIG5leHRU
ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG5leHQpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAobmV4dFRleHQtPnN0cmluZ0xlbmd0aCgpICE9IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFFDaGFyIGMgPSBuZXh0VGV4dC0+dGV4dCgpWzBdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCAoYyA9PSAnXG4nICYmICFuZXh0LT5z
dHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVD
aGFyIGMgPSBuZXh0VGV4dC0+dGV4dCgpWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCAoYyA9PSAnXG4nICYmICFuZXh0LT5zdHlsZSgpLT5w
cmVzZXJ2ZU5ld2xpbmUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IG5leHQgaXRlbSBvbiB0aGUgbGluZSBpcyB0ZXh0LCBhbmQgaWYgd2UgZGlkIG5vdCBlbmQgd2l0
aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgc3BhY2UsIHRoZW4gdGhlIG5leHQg
dGV4dCBydW4gY29udGludWVzIG91ciB3b3JkIChhbmQgc28gaXQgbmVlZHMgdG8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGFkZGluZyB0byB8dG1wV3wuICBKdXN0IHVwZGF0
ZSBhbmQgY29udGludWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JCcmVh
ayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5QbGFjZU9uTGluZSA9ICh3ICsgdG1wVyA8
PSB3aWR0aCkgfHwgIWF1dG9XcmFwOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2FuUGxhY2VP
bkxpbmUgJiYgY2hlY2tGb3JCcmVhaykgewpAQCAtMjUwOCw4ICsyNTI4LDggQEAKICAgICBpZiAo
bEJyZWFrLm9iaiAmJiBsQnJlYWsucG9zID49IDIgJiYgbEJyZWFrLm9iai0+aXNUZXh0KCkpIHsK
ICAgICAgICAgLy8gRm9yIHNvZnQgaHlwaGVucyBvbiBsaW5lIGJyZWFrcywgd2UgaGF2ZSB0byBj
aG9wIG91dCB0aGUgbWlkcG9pbnRzIHRoYXQgbWFkZSB1cwogICAgICAgICAvLyBpZ25vcmUgdGhl
IGh5cGhlbiBzbyB0aGF0IGl0IHdpbGwgcmVuZGVyIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuCi0g
ICAgICAgIFFDaGFyIGMgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obEJyZWFrLm9iaiktPnRl
eHQoKVtsQnJlYWsucG9zLTFdOwotICAgICAgICBpZiAoYy51bmljb2RlKCkgPT0gU09GVF9IWVBI
RU4pCisgICAgICAgIFVDaGFyIGMgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obEJyZWFrLm9i
aiktPnRleHQoKVtsQnJlYWsucG9zLTFdOworICAgICAgICBpZiAoYyA9PSBTT0ZUX0hZUEhFTikK
ICAgICAgICAgICAgIGNob3BNaWRwb2ludHNBdChsQnJlYWsub2JqLCBsQnJlYWsucG9zLTIpOwog
ICAgIH0KICAgICAKQEAgLTI1MzgsOCArMjU1OCw4IEBACiB2b2lkIFJlbmRlckJsb2NrOjpjaGVj
a0xpbmVzRm9yVGV4dE92ZXJmbG93KCkKIHsKICAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIG9m
IHRoZSBlbGxpcHNpcyB1c2luZyB0aGUgY3VycmVudCBmb250LgotICAgIFFDaGFyIGVsbGlwc2lz
ID0gMHgyMDI2OyAvLyBGSVhNRTogQ1NTMyBzYXlzIHRoaXMgaXMgY29uZmlndXJhYmxlLCBhbHNv
IG5lZWQgdG8gdXNlIDB4MDAyRSAoRlVMTCBTVE9QKSBpZiAweDIwMjYgbm90IHJlbmRlcmFibGUK
LSAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGVsbGlwc2lzU3RyKGVsbGlwc2lzKTsKKyAgICBjb25z
dCBVQ2hhciBlbGxpcHNpcyA9IDB4MjAyNjsgLy8gRklYTUU6IENTUzMgc2F5cyB0aGlzIGlzIGNv
bmZpZ3VyYWJsZSwgYWxzbyBuZWVkIHRvIHVzZSAweDAwMkUgKEZVTEwgU1RPUCkgaWYgMHgyMDI2
IG5vdCByZW5kZXJhYmxlCisgICAgc3RhdGljIEF0b21pY1N0cmluZyBlbGxpcHNpc1N0cigmZWxs
aXBzaXMsIDEpOwogICAgIGNvbnN0IEZvbnQmIGZpcnN0TGluZUZvbnQgPSBmaXJzdExpbmVTdHls
ZSgpLT5mb250KCk7CiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKICAg
ICBpbnQgZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA9IGZpcnN0TGluZUZvbnQud2lkdGgoJmVsbGlw
c2lzLCAxKTsKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcAkocmV2aXNpb24gMTQyMTYpCisrKyByZW5kZXJpbmcv
cmVuZGVyX2xpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsOSArNDc1LDkgQEAKICAgICAg
ICAgICAgIElubGluZVRleHRCb3ggKnRleHQgPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4o
Y3Vycik7CiAgICAgICAgICAgICBSZW5kZXJUZXh0ICpydCA9IHN0YXRpY19jYXN0PFJlbmRlclRl
eHQqPih0ZXh0LT5vYmplY3QoKSk7CiAgICAgICAgICAgICBpZiAocnQtPmxlbmd0aCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5lZWRzV29yZFNwYWNpbmcgJiYgcnQtPnRleHQoKVt0ZXh0LT5z
dGFydCgpXS5pc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgaWYgKG5lZWRzV29yZFNwYWNpbmcg
JiYgUUNoYXIocnQtPnRleHQoKVt0ZXh0LT5zdGFydCgpXSkuaXNTcGFjZSgpKQogICAgICAgICAg
ICAgICAgICAgICB4ICs9IHJ0LT5mb250KG1fZmlyc3RMaW5lKS0+d29yZFNwYWNpbmcoKTsKLSAg
ICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5nID0gIXJ0LT50ZXh0KClbdGV4dC0+ZW5kKCld
LmlzU3BhY2UoKTsKKyAgICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5nID0gIVFDaGFyKHJ0
LT50ZXh0KClbdGV4dC0+ZW5kKCldKS5pc1NwYWNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB0ZXh0LT5zZXRYUG9zKHgpOwogICAgICAgICAgICAgaW50IHNoYWRvd0xlZnQgPSAwOwpA
QCAtMTA4NSw3ICsxMDg1LDcgQEAKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHN0ciA9IG1f
c3RyOwotICAgIHAtPmRyYXdUZXh0KEludFBvaW50KG1feCArIF90eCwgbV95ICsgX3R5ICsgbV9i
YXNlbGluZSksIDAsIDAsIHN0ci51bmljb2RlKCksIHN0ci5sZW5ndGgoKSwKKyAgICBwLT5kcmF3
VGV4dChJbnRQb2ludChtX3ggKyBfdHgsIG1feSArIF90eSArIG1fYmFzZWxpbmUpLCAwLCAwLCBz
dHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCksCiAgICAgICAgIDAsIHN0ci5sZW5ndGgoKSwg
MCwgTFRSLCBfc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpLCAwLCBzdHIubGVuZ3RoKCkpOwogCiAg
ICAgaWYgKHNldFNoYWRvdykKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfc3R5bGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgJKHJldmlzaW9uIDE0MjE2KQorKysgcmVu
ZGVyaW5nL3JlbmRlcl9zdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjM2LDggKzEyMzYsOCBA
QAogICAgIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKCkgY29uc3QgewogICAgICAgICByZXR1cm4g
Y29sbGFwc2VXaGl0ZVNwYWNlKHdoaXRlU3BhY2UoKSk7CiAgICAgfQotICAgIGJvb2wgaXNDb2xs
YXBzaWJsZVdoaXRlU3BhY2UoY29uc3QgUUNoYXImIGMpIGNvbnN0IHsKLSAgICAgICAgc3dpdGNo
IChjLnVuaWNvZGUoKSkgeworICAgIGJvb2wgaXNDb2xsYXBzaWJsZVdoaXRlU3BhY2UoVUNoYXIg
YykgY29uc3QgeworICAgICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICAgICAgIGNhc2UgJyAnOgog
ICAgICAgICAgICAgY2FzZSAnXHQnOgogICAgICAgICAgICAgICAgIHJldHVybiBjb2xsYXBzZVdo
aXRlU3BhY2UoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDE0MjE2KQorKysgcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDQsNyArODQ0LDcgQEAKICAgICB2
aXJ0dWFsIGJvb2wgaXNTdHJldGNoaW5nQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgLy8gQ29udmVuaWVuY2UsIHRvIGF2b2lkIHJlcGVhdGluZyB0aGUgY29kZSB0byBk
aWcgZG93biB0byBnZXQgdGhpcy4KLSAgICBRQ2hhciBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9s
KCkgY29uc3Q7CisgICAgVUNoYXIgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGlu
dCBjYXJldE1heE9mZnNldCgpIGNvbnN0OwpJbmRleDogcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCShyZXZpc2lvbiAxNDIx
NikKKysrIHJlbmRlcmluZy9icmVha19saW5lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pbnQgbmV4dEJyZWFrYWJsZVBvc2l0
aW9uKGNvbnN0IFFDaGFyICpzdHIsIGludCBwb3MsIGludCBsZW4sIGJvb2wgYnJlYWtOQlNQKQor
aW50IG5leHRCcmVha2FibGVQb3NpdGlvbihjb25zdCBVQ2hhciogc3RyLCBpbnQgcG9zLCBpbnQg
bGVuLCBib29sIGJyZWFrTkJTUCkKIHsKICNpZiBfX0FQUExFX18KICAgICBPU1N0YXR1cyBzdGF0
dXMgPSAwLCBmaW5kU3RhdHVzID0gLTE7CkBAIC00MSw5ICs0MSw5IEBACiAgICAgaW50IGk7CiAg
ICAgdW5zaWduZWQgc2hvcnQgY2gsIGxhc3RDaDsKICAgICAKLSAgICBsYXN0Q2ggPSBwb3MgPiAw
ID8gc3RyW3BvcyAtIDFdLnVuaWNvZGUoKSA6IDA7CisgICAgbGFzdENoID0gcG9zID4gMCA/IHN0
cltwb3MgLSAxXSA6IDA7CiAgICAgZm9yIChpID0gcG9zOyBpIDwgbGVuOyBpKyspIHsKLSAgICAg
ICAgY2ggPSBzdHJbaV0udW5pY29kZSgpOworICAgICAgICBjaCA9IHN0cltpXTsKICAgICAgICAg
aWYgKGNoID09ICcgJyB8fCBjaCA9PSAnXG4nIHx8IGNoID09ICdcdCcgfHwgKGJyZWFrTkJTUCAm
JiBjaCA9PSAweGEwKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAvLyBNYXRjaCBXaW5J
RSdzIGJyZWFraW5nIHN0cmF0ZWd5LCB3aGljaCBpcyB0byBhbHdheXMgYWxsb3cgYnJlYWtzIGFm
dGVyIGh5cGhlbnMgYW5kIHF1ZXN0aW9uIG1hcmtzLgpJbmRleDogcmVuZGVyaW5nL3JlbmRlcl9s
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCShyZXZpc2lv
biAxNDIxNikKKysrIHJlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDgzICs0MCw3MiBAQAogCiBjb25zdCBpbnQgY01hcmtlclBhZGRpbmcgPSA3OwogCi1zdGF0
aWMgRGVwcmVjYXRlZFN0cmluZyB0b1JvbWFuKCBpbnQgbnVtYmVyLCBib29sIHVwcGVyICkKK3N0
YXRpYyBEZXByZWNhdGVkU3RyaW5nIHRvUm9tYW4oaW50IG51bWJlciwgYm9vbCB1cHBlcikKIHsK
ICAgICBEZXByZWNhdGVkU3RyaW5nIHJvbWFuOwotICAgIFFDaGFyIGxkaWdpdHNbXSA9IHsgJ2kn
LCAndicsICd4JywgJ2wnLCAnYycsICdkJywgJ20nIH07Ci0gICAgUUNoYXIgdWRpZ2l0c1tdID0g
eyAnSScsICdWJywgJ1gnLCAnTCcsICdDJywgJ0QnLCAnTScgfTsKLSAgICBRQ2hhciAqZGlnaXRz
ID0gdXBwZXIgPyB1ZGlnaXRzIDogbGRpZ2l0czsKLSAgICBpbnQgaSwgZCA9IDA7Ci0KLSAgICBk
bwotICAgIHsKKyAgICBjb25zdCBVQ2hhciBsZGlnaXRzW10gPSB7ICdpJywgJ3YnLCAneCcsICds
JywgJ2MnLCAnZCcsICdtJyB9OworICAgIGNvbnN0IFVDaGFyIHVkaWdpdHNbXSA9IHsgJ0knLCAn
VicsICdYJywgJ0wnLCAnQycsICdEJywgJ00nIH07CisgICAgY29uc3QgVUNoYXIqIGRpZ2l0cyA9
IHVwcGVyID8gdWRpZ2l0cyA6IGxkaWdpdHM7CisgICAgaW50IGQgPSAwOworICAgIGRvIHsKICAg
ICAgICAgaW50IG51bSA9IG51bWJlciAlIDEwOwotCi0gICAgICAgIGlmICggbnVtICUgNSA8IDQg
KQotICAgICAgICAgICAgZm9yICggaSA9IG51bSAlIDU7IGkgPiAwOyBpLS0gKQotICAgICAgICAg
ICAgICAgIHJvbWFuLmluc2VydCggMCwgZGlnaXRzWyBkIF0gKTsKLQotICAgICAgICBpZiAoIG51
bSA+PSA0ICYmIG51bSA8PSA4KQotICAgICAgICAgICAgcm9tYW4uaW5zZXJ0KCAwLCBkaWdpdHNb
IGQrMSBdICk7Ci0KLSAgICAgICAgaWYgKCBudW0gPT0gOSApCi0gICAgICAgICAgICByb21hbi5p
bnNlcnQoIDAsIGRpZ2l0c1sgZCsyIF0gKTsKLQotICAgICAgICBpZiAoIG51bSAlIDUgPT0gNCAp
Ci0gICAgICAgICAgICByb21hbi5pbnNlcnQoIDAsIGRpZ2l0c1sgZCBdICk7Ci0KKyAgICAgICAg
aWYgKG51bSAlIDUgPCA0KQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IG51bSAlIDU7IGkgPiAw
OyBpLS0pCisgICAgICAgICAgICAgICAgcm9tYW4uaW5zZXJ0KDAsIGRpZ2l0c1tkXSk7CisgICAg
ICAgIGlmIChudW0gPj0gNCAmJiBudW0gPD0gOCkKKyAgICAgICAgICAgIHJvbWFuLmluc2VydCgw
LCBkaWdpdHNbZCArIDFdKTsKKyAgICAgICAgaWYgKG51bSA9PSA5KQorICAgICAgICAgICAgcm9t
YW4uaW5zZXJ0KDAsIGRpZ2l0c1tkICsgMl0pOworICAgICAgICBpZiAobnVtICUgNSA9PSA0KQor
ICAgICAgICAgICAgcm9tYW4uaW5zZXJ0KDAsIGRpZ2l0c1tkXSk7CiAgICAgICAgIG51bWJlciAv
PSAxMDsKICAgICAgICAgZCArPSAyOwotICAgIH0KLSAgICB3aGlsZSAoIG51bWJlciApOwotCisg
ICAgfSB3aGlsZSAobnVtYmVyKTsKICAgICByZXR1cm4gcm9tYW47CiB9CiAKIHN0YXRpYyBEZXBy
ZWNhdGVkU3RyaW5nIHRvTGV0dGVyU3RyaW5nKGludCBudW1iZXIsIGludCBsZXR0ZXJBKQogewog
ICAgIGlmIChudW1iZXIgPCAyKQotICAgICAgICByZXR1cm4gKFFDaGFyKWxldHRlckE7IC8vIG1h
dGNoIFdpbklFIChBLikgbm90IEZpcmVGb3ggKDAuKQotICAgIAorICAgICAgICByZXR1cm4gUUNo
YXIobGV0dGVyQSk7IC8vIG1hdGNoIFdpbklFIChBLikgbm90IEZpcmVGb3ggKDAuKQorCiAgICAg
RGVwcmVjYXRlZFN0cmluZyBsZXR0ZXJTdHJpbmc7CiAgICAgd2hpbGUgKG51bWJlciA+IDApIHsK
LSAgICAgICAgaW50IG9uZXNEaWdpdCA9ICgobnVtYmVyIC0gMSkgJSAyNik7Ci0gICAgICAgIGxl
dHRlclN0cmluZyA9IChRQ2hhcikobGV0dGVyQSArIG9uZXNEaWdpdCkgKyBsZXR0ZXJTdHJpbmc7
CisgICAgICAgIGludCBvbmVzRGlnaXQgPSAobnVtYmVyIC0gMSkgJSAyNjsKKyAgICAgICAgbGV0
dGVyU3RyaW5nID0gUUNoYXIobGV0dGVyQSArIG9uZXNEaWdpdCkgKyBsZXR0ZXJTdHJpbmc7CiAg
ICAgICAgIG51bWJlciAtPSBvbmVzRGlnaXQ7CiAgICAgICAgIG51bWJlciAvPSAyNjsKICAgICB9
Ci0gICAgCisKICAgICByZXR1cm4gbGV0dGVyU3RyaW5nOwogfQogCi1zdGF0aWMgRGVwcmVjYXRl
ZFN0cmluZyB0b0hlYnJldyggaW50IG51bWJlciApIHsKK3N0YXRpYyBEZXByZWNhdGVkU3RyaW5n
IHRvSGVicmV3KGludCBudW1iZXIpCit7CiAgICAgY29uc3QgUUNoYXIgdGVuRGlnaXRbXSA9IHsx
NDk3LCAxNDk5LCAxNTAwLCAxNTAyLCAxNTA0LCAxNTA1LCAxNTA2LCAxNTA4LCAxNTEwfTsKIAog
ICAgIERlcHJlY2F0ZWRTdHJpbmcgbGV0dGVyOwogICAgIGlmIChudW1iZXIgPiA5OTkpIHsKLSAg
ICAgICAgbGV0dGVyID0gdG9IZWJyZXcobnVtYmVyLzEwMDApICsgIiciOworICAgICAgICBsZXR0
ZXIgPSB0b0hlYnJldyhudW1iZXIgLyAxMDAwKSArICInIjsKICAgICAgICAgbnVtYmVyID0gbnVt
YmVyICUgMTAwMDsKICAgICB9Ci0KLSAgICBpbnQgaHVuZGVydHMgPSAobnVtYmVyLzQwMCk7Ci0g
ICAgaWYgKGh1bmRlcnRzID4gMCkgewotICAgICAgICBmb3IgKGludCBpPTA7IGk8aHVuZGVydHM7
IGkrKykKLSAgICAgICAgICAgIGxldHRlciArPSBRQ2hhcigxNTExICsgMyk7Ci0gICAgfQotICAg
IG51bWJlciA9IG51bWJlciAlIDQwMDsKLSAgICBpZiAoKG51bWJlciAvIDEwMCkgIT0gMCkKLSAg
ICAgICAgbGV0dGVyICs9IFFDaGFyICgxNTExICsgKG51bWJlciAvIDEwMCkgLTEpOwotICAgIG51
bWJlciA9IG51bWJlciAlIDEwMDsKLSAgICBpbnQgdGVucyA9IG51bWJlci8xMDsKLSAgICBpZiAo
dGVucyA+IDAgJiYgIShudW1iZXIgPT0gMTUgfHwgbnVtYmVyID09IDE2KSkKLSAgICAgICAgbGV0
dGVyICs9IHRlbkRpZ2l0W3RlbnMtMV07Ci0gICAgaWYgKG51bWJlciA9PSAxNSB8fCBudW1iZXIg
PT0gMTYpIHsgLy8gc3BlY2lhbCBiZWNhdXNlIG9mIHJlbGlnaW91cwotICAgICAgICBsZXR0ZXIg
Kz0gUUNoYXIoMTQ4NyArIDkpOyAgICAgICAvLyByZWFzb25zCisgICAgaW50IGZvdXJIdW5kcmVk
cyA9IG51bWJlciAvIDQwMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZvdXJIdW5kcmVkczsg
aSsrKQorICAgICAgICBsZXR0ZXIgKz0gUUNoYXIoMTUxMSArIDMpOworICAgIG51bWJlciAlPSA0
MDA7CisgICAgaWYgKG51bWJlciAvIDEwMCkKKyAgICAgICAgbGV0dGVyICs9IFFDaGFyKDE1MTEg
KyAobnVtYmVyIC8gMTAwKSAtIDEpOworICAgIG51bWJlciAlPSAxMDA7CisgICAgaWYgKG51bWJl
ciA9PSAxNSB8fCBudW1iZXIgPT0gMTYpIHsKKyAgICAgICAgbGV0dGVyICs9IFFDaGFyKDE0ODcg
KyA5KTsKICAgICAgICAgbGV0dGVyICs9IFFDaGFyKDE0ODcgKyBudW1iZXIgLSA5KTsKICAgICB9
IGVsc2UgeworICAgICAgICBpbnQgdGVucyA9IG51bWJlciAvIDEwOworICAgICAgICBpZiAodGVu
cykKKyAgICAgICAgICAgIGxldHRlciArPSB0ZW5EaWdpdFt0ZW5zIC0gMV07CiAgICAgICAgIG51
bWJlciA9IG51bWJlciAlIDEwOwotICAgICAgICBpZiAobnVtYmVyICE9IDApCi0gICAgICAgICAg
ICBsZXR0ZXIgKz0gUUNoYXIgKDE0ODcgKyBudW1iZXIpOworICAgICAgICBpZiAobnVtYmVyKQor
ICAgICAgICAgICAgbGV0dGVyICs9IFFDaGFyKDE0ODcgKyBudW1iZXIpOwogICAgIH0KICAgICBy
ZXR1cm4gbGV0dGVyOwogfQpAQCAtMTI3LDcgKzExNiw3IEBACiAgICAgOiBSZW5kZXJCbG9jayhu
b2RlKSwgcHJlZGVmVmFsKC0xKSwgbV9tYXJrZXIoMCksIF9ub3RJbkxpc3QoZmFsc2UpLCBtX3Zh
bHVlKC0xKQogewogICAgIC8vIGluaXQgUmVuZGVyT2JqZWN0IGF0dHJpYnV0ZXMKLSAgICBzZXRJ
bmxpbmUoZmFsc2UpOyAgIC8vIG91ciBvYmplY3QgaXMgbm90IElubGluZQorICAgIHNldElubGlu
ZShmYWxzZSk7IC8vIG91ciBvYmplY3QgaXMgbm90IElubGluZQogfQogCiB2b2lkIFJlbmRlckxp
c3RJdGVtOjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqX3N0eWxlKQpAQCAtMjkxLDEwICsyODAsMTAg
QEAKICAgICAgICAgUmVuZGVyQmxvY2s6OmNhbGNNaW5NYXhXaWR0aCgpOwogfQogCi12b2lkIFJl
bmRlckxpc3RJdGVtOjpsYXlvdXQoICkKK3ZvaWQgUmVuZGVyTGlzdEl0ZW06OmxheW91dCgpCiB7
Ci0gICAgS0hUTUxBc3NlcnQoIG5lZWRzTGF5b3V0KCkgKTsKLSAgICBLSFRNTEFzc2VydCggbWlu
TWF4S25vd24oKSApOworICAgIEtIVE1MQXNzZXJ0KG5lZWRzTGF5b3V0KCkpOworICAgIEtIVE1M
QXNzZXJ0KG1pbk1heEtub3duKCkpOwogICAgIAogICAgIHVwZGF0ZU1hcmtlckxvY2F0aW9uKCk7
ICAgIAogICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKQEAgLTQ1MiwxMiArNDQxLDE1IEBACiAg
ICAgZGVmYXVsdDoKICAgICAgICAgaWYgKCFtX2l0ZW0uaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwotICAgICAgICAgICAgaWYoIHN0
eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0
KG1hcmtlci5sb2NhdGlvbigpLCBBbGlnbkxlZnQsIG1faXRlbSk7Ci0gICAgICAgICAgICAgICAg
cC0+ZHJhd1RleHQobWFya2VyLmxvY2F0aW9uKCkgKyBJbnRTaXplKGZvbnQud2lkdGgobV9pdGVt
KSwgMCksIEFsaWduTGVmdCwgIi4gIik7CisgICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0
aW9uKCkgPT0gTFRSKSB7CisgICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZm9udC53aWR0aChy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obV9pdGVtLnVuaWNvZGUoKSksIG1faXRlbS5s
ZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQobWFya2VyLmxvY2F0aW9uKCks
IG1faXRlbSk7CisgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQobWFya2VyLmxvY2F0aW9uKCkg
KyBJbnRTaXplKHdpZHRoLCAwKSwgIi4gIik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHAtPmRyYXdUZXh0KG1hcmtlci5sb2NhdGlvbigpLCBBbGlnbkxlZnQsICIgLiIp
OwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KG1hcmtlci5sb2NhdGlvbigpICsgSW50U2l6
ZShmb250LndpZHRoKCIgLiIpLCAwKSwgQWxpZ25MZWZ0LCBtX2l0ZW0pOworICAgICAgICAgICAg
ICAgIFVDaGFyIHNwYWNlUGVyaW9kWzJdID0geyAnLicsICcgJyB9OworICAgICAgICAgICAgICAg
IGludCB3aWR0aCA9IGZvbnQud2lkdGgoc3BhY2VQZXJpb2QsIDIpOworICAgICAgICAgICAgICAg
IHAtPmRyYXdUZXh0KG1hcmtlci5sb2NhdGlvbigpLCAiIC4iKTsKKyAgICAgICAgICAgICAgICBw
LT5kcmF3VGV4dChtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApLCBtX2l0ZW0p
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNTU2LDcgKzU0OCwxMiBAQAog
ICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX3dpZHRoID0gZm9udC53aWR0aChtX2l0ZW0p
ICsgZm9udC53aWR0aCgiLiAiKTsKKyAgICB7CisgICAgICAgIGludCBpdGVtV2lkdGggPSBmb250
LndpZHRoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihtX2l0ZW0udW5pY29kZSgpKSwg
bV9pdGVtLmxlbmd0aCgpKTsKKyAgICAgICAgVUNoYXIgcGVyaW9kU3BhY2VbMl0gPSB7ICcuJywg
JyAnIH07CisgICAgICAgIGludCBwZXJpb2RTcGFjZVdpZHRoID0gZm9udC53aWR0aChwZXJpb2RT
cGFjZSwgMik7CisgICAgICAgIG1fd2lkdGggPSBpdGVtV2lkdGggKyBwZXJpb2RTcGFjZVdpZHRo
OworICAgIH0KIAogZW5kOgogCkBAIC02NzgsMTEgKzY3NSwzMyBAQAogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgTE5PTkU6CiAgICAgICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgaWYgKG1faXRlbS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KG1feCwgbV95
ICsgYXNjZW50LCBmb250LndpZHRoKG1faXRlbSkgKyBmb250LndpZHRoKCIuICIpLCBmb250Lmhl
aWdodCgpKTsKKyAgICAgICAgY2FzZSBBUk1FTklBTjoKKyAgICAgICAgY2FzZSBDSktfSURFT0dS
QVBISUM6CisgICAgICAgIGNhc2UgREVDSU1BTF9MRUFESU5HX1pFUk86CisgICAgICAgIGNhc2Ug
R0VPUkdJQU46CisgICAgICAgIGNhc2UgSEVCUkVXOgorICAgICAgICBjYXNlIEhJUkFHQU5BOgor
ICAgICAgICBjYXNlIEhJUkFHQU5BX0lST0hBOgorICAgICAgICBjYXNlIEtBVEFLQU5BOgorICAg
ICAgICBjYXNlIEtBVEFLQU5BX0lST0hBOgorICAgICAgICBjYXNlIExERUNJTUFMOgorICAgICAg
ICBjYXNlIExPV0VSX0FMUEhBOgorICAgICAgICBjYXNlIExPV0VSX0dSRUVLOgorICAgICAgICBj
YXNlIExPV0VSX0xBVElOOgorICAgICAgICBjYXNlIExPV0VSX1JPTUFOOgorICAgICAgICBjYXNl
IFVQUEVSX0FMUEhBOgorICAgICAgICBjYXNlIFVQUEVSX0xBVElOOgorICAgICAgICBjYXNlIFVQ
UEVSX1JPTUFOOgorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgaWYgKG1faXRlbS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBpbnQgaXRlbVdpZHRo
ID0gZm9udC53aWR0aChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obV9pdGVtLnVuaWNv
ZGUoKSksIG1faXRlbS5sZW5ndGgoKSk7CisgICAgVUNoYXIgcGVyaW9kU3BhY2VbMl0gPSB7ICcu
JywgJyAnIH07CisgICAgaW50IHBlcmlvZFNwYWNlV2lkdGggPSBmb250LndpZHRoKHBlcmlvZFNw
YWNlLCAyKTsKKyAgICByZXR1cm4gSW50UmVjdChtX3gsIG1feSArIGFzY2VudCwgaXRlbVdpZHRo
ICsgcGVyaW9kU3BhY2VXaWR0aCwgZm9udC5oZWlnaHQoKSk7CiB9CiAKIHZvaWQgUmVuZGVyTGlz
dE1hcmtlcjo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCkluZGV4OiBy
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAJKHJldmlzaW9uIDE0MjE2KQorKysgcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgIC8vIHdlIGhhdmUgYW4g
YWx0IGFuZCB0aGUgdXNlciBtZWFudCBpdCAoaXRzIG5vdCBhIHRleHQgd2UgaW52ZW50ZWQpCiAg
ICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgY29uc3QgRm9u
dCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLSAgICAgICAgICAgIGl3ID0gbWF4KGl3LCBtaW4o
Zm9udC53aWR0aChtX2FsdFRleHQuZGVwcmVjYXRlZFN0cmluZygpKSwgMTAyNCkpOworICAgICAg
ICAgICAgaXcgPSBtYXgoaXcsIG1pbihmb250LndpZHRoKG1fYWx0VGV4dC5jaGFyYWN0ZXJzKCks
IG1fYWx0VGV4dC5sZW5ndGgoKSksIDEwMjQpKTsKICAgICAgICAgICAgIGloID0gbWF4KGloLCBt
aW4oZm9udC5oZWlnaHQoKSwgMjU2KSk7CiAgICAgICAgIH0KIApAQCAtMjM3LDcgKzIzNyw3IEBA
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdGV4dCA9IG1fYWx0VGV4dC5kZXByZWNh
dGVkU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgdGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBi
YWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOworICAgICAgICAgICAgICAgIHRleHQucmVwbGFj
ZSgnXFwnLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwogICAgICAgICAgICAgICAgIHAt
PnNldEZvbnQoc3R5bGUoKS0+Zm9udCgpKTsKICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oc3R5
bGUoKS0+Y29sb3IoKSk7CiAgICAgICAgICAgICAgICAgaW50IGF4ID0gX3R4ICsgbGVmdEJvcmRl
ciArIGxlZnRQYWQ7CkBAIC0yNDcsMTIgKzI0NywxMiBAQAogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIE9ubHkgZHJhdyB0aGUgYWx0IHRleHQgaWYgaXQnbGwgZml0IHdpdGhp
biB0aGUgY29udGVudCBib3gsCiAgICAgICAgICAgICAgICAgLy8gYW5kIG9ubHkgaWYgaXQgZml0
cyBhYm92ZSB0aGUgZXJyb3IgaW1hZ2UuCi0gICAgICAgICAgICAgICAgaW50IHRleHRXaWR0aCA9
IGZvbnQud2lkdGgodGV4dCk7CisgICAgICAgICAgICAgICAgaW50IHRleHRXaWR0aCA9IGZvbnQu
d2lkdGgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHRleHQudW5pY29kZSgpKSwgdGV4
dC5sZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yUGljdHVyZURyYXduKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICh1c2FibGVXaWR0aCA+PSB0ZXh0V2lkdGggJiYgZm9udC5o
ZWlnaHQoKSA8PSBpbWFnZVkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChJ
bnRQb2ludChheCwgYXkgKyBhc2NlbnQpLCAwLCB0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHAtPmRyYXdUZXh0KEludFBvaW50KGF4LCBheSArIGFzY2VudCksIHRleHQpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGNIZWlnaHQg
Pj0gZm9udC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoSW50UG9p
bnQoYXgsIGF5ICsgYXNjZW50KSwgMCwgdGV4dCk7CisgICAgICAgICAgICAgICAgICAgIHAtPmRy
YXdUZXh0KEludFBvaW50KGF4LCBheSArIGFzY2VudCksIHRleHQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpJbmRleDogcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmgJKHJldmlzaW9uIDE0MjE2KQorKysgcmVuZGVy
aW5nL2JyZWFrX2xpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDEzICsyMCwxMyBAQAogICoK
ICAqLwogCi1jbGFzcyBRQ2hhcjsKKyNpbmNsdWRlIDx1bmljb2RlL3VtYWNoaW5lLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGludCBuZXh0QnJlYWthYmxlUG9zaXRpb24oY29uc3Qg
UUNoYXIgKnN0ciwgaW50IHBvcywgaW50IGxlbiwgYm9vbCBicmVha05CU1AgPSBmYWxzZSk7Cisg
ICAgaW50IG5leHRCcmVha2FibGVQb3NpdGlvbihjb25zdCBVQ2hhciosIGludCBwb3MsIGludCBs
ZW4sIGJvb2wgYnJlYWtOQlNQID0gZmFsc2UpOwogCi0gICAgaW5saW5lIGJvb2wgaXNCcmVha2Fi
bGUoY29uc3QgUUNoYXIgKnN0ciwgaW50IHBvcywgaW50IGxlbiwgaW50ICZuZXh0QnJlYWthYmxl
LCBib29sIGJyZWFrTkJTUCA9IGZhbHNlKQorICAgIGlubGluZSBib29sIGlzQnJlYWthYmxlKGNv
bnN0IFVDaGFyKiBzdHIsIGludCBwb3MsIGludCBsZW4sIGludCYgbmV4dEJyZWFrYWJsZSwgYm9v
bCBicmVha05CU1AgPSBmYWxzZSkKICAgICB7CiAgICAgICAgIGlmIChwb3MgPiBuZXh0QnJlYWth
YmxlKQogICAgICAgICAgICAgbmV4dEJyZWFrYWJsZSA9IG5leHRCcmVha2FibGVQb3NpdGlvbihz
dHIsIHBvcywgbGVuLCBicmVha05CU1ApOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTQyMTYp
CisrKyByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4
LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0g
ICAgdWJya19zZXRUZXh0KGl0ZXJhdG9yLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4o
aS0+dW5pY29kZSgpKSwgaS0+bGVuZ3RoKCksICZzdGF0dXMpOworICAgIHVicmtfc2V0VGV4dChp
dGVyYXRvciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KGktPmNoYXJhY3RlcnMoKSks
IGktPmxlbmd0aCgpLCAmc3RhdHVzKTsKICAgICBpZiAoc3RhdHVzICE9IFVfWkVST19FUlJPUikK
ICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgIHNldFJlbmRlclRl
eHQoKTsKICAgICBpZiAoc3RyKQogICAgICAgICBzdHIgPSBzdHItPnJlcGxhY2UoJ1xcJywgYmFj
a3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKLSAgICBLSFRNTEFzc2VydCghc3RyIHx8ICFzdHIt
Pmxlbmd0aCgpIHx8IHN0ci0+dW5pY29kZSgpKTsKKyAgICBLSFRNTEFzc2VydCghc3RyIHx8ICFz
dHItPmxlbmd0aCgpIHx8IHN0ci0+Y2hhcmFjdGVycygpKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0
OjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqX3N0eWxlKQpAQCAtNDM2LDcgKzQzNiw3IEBACiAgICAg
CiAgICAgdW5zaWduZWQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyLT5sZW5ndGgoKTsgaSsr
KQotICAgICAgICBpZiAoKCpzdHIpW2ldLnVuaWNvZGUoKSA+PSAweDdmKSB7CisgICAgICAgIGlm
ICgoKnN0cilbaV0gPiAweDdmKSB7CiAgICAgICAgICAgICBtX2FsbEFzY2lpID0gZmFsc2U7CiAg
ICAgICAgICAgICByZXR1cm4gbV9hbGxBc2NpaTsKICAgICAgICAgfQpAQCAtNDU2LDI4ICs0NTYs
MjggQEAKIC8vIFJlbmRlclRleHQuCiB2b2lkIFJlbmRlclRleHQ6OmNhY2hlV2lkdGhzKCkKIHsK
LSAgICBjb25zdCBGb250ICpmID0gZm9udChmYWxzZSk7CisgICAgY29uc3QgRm9udCogZiA9IGZv
bnQoZmFsc2UpOwogICAgIGlmIChzaG91bGRVc2VNb25vc3BhY2VDYWNoZShmKSkgewotICAgICAg
ICBRQ2hhciBjKCcgJyk7CisgICAgICAgIGNvbnN0IFVDaGFyIGMgPSAnICc7CiAgICAgICAgIG1f
bW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGggPSAoaW50KWYtPmZsb2F0V2lkdGgoJmMsIDEsIDAsIDEs
IDAsIDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fbW9ub3NwYWNlQ2hhcmFjdGVyV2lkdGgg
PSAwOwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBpbnQgUmVuZGVyVGV4dDo6d2lkdGhGcm9t
Q2FjaGUoY29uc3QgRm9udCAqZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBpbnQgdGFiV2lkdGgsIGlu
dCB4cG9zKSBjb25zdAorQUxXQVlTX0lOTElORSBpbnQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2Fj
aGUoY29uc3QgRm9udCogZiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBpbnQgdGFiV2lkdGgsIGludCB4
cG9zKSBjb25zdAogewogICAgIGlmIChtX21vbm9zcGFjZUNoYXJhY3RlcldpZHRoICE9IDApIHsK
ICAgICAgICAgaW50IGksIHcgPSAwOwogICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IHN0YXJ0
K2xlbjsgaSsrKSB7Ci0gICAgICAgICAgICBRQ2hhciBjID0gKCpzdHIpW2ldOwotICAgICAgICAg
ICAgaW50IGRpciA9IGMuZGlyZWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoZGlyICE9IFFDaGFy
OjpEaXJOU00gJiYgZGlyICE9IFFDaGFyOjpEaXJCTikgewotICAgICAgICAgICAgICAgIGlmIChj
ID09ICdcdCcgJiYgdGFiV2lkdGggIT0gMCkgeworICAgICAgICAgICAgVUNoYXIgYyA9ICgqc3Ry
KVtpXTsKKyAgICAgICAgICAgIFVDaGFyRGlyZWN0aW9uIGRpciA9IHVfY2hhckRpcmVjdGlvbihj
KTsKKyAgICAgICAgICAgIGlmIChkaXIgIT0gVV9ESVJfTk9OX1NQQUNJTkdfTUFSSyAmJiBkaXIg
IT0gVV9CT1VOREFSWV9ORVVUUkFMKSB7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1x0JyAm
JiB0YWJXaWR0aCAhPSAwKQogICAgICAgICAgICAgICAgICAgICB3ICs9IHRhYldpZHRoIC0gKCh4
cG9zICsgdykgJSB0YWJXaWR0aCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB3ICs9IG1fbW9ub3NwYWNlQ2hhcmFjdGVy
V2lkdGg7Ci0gICAgICAgICAgICAgICAgaWYgKGMuaXNTcGFjZSgpICYmIGk+c3RhcnQgJiYgISgq
c3RyKVtpLTFdLmlzU3BhY2UoKSkKKyAgICAgICAgICAgICAgICBpZiAoUUNoYXIoYykuaXNTcGFj
ZSgpICYmIGkgPiBzdGFydCAmJiAhUUNoYXIoKCpzdHIpW2kgLSAxXSkuaXNTcGFjZSgpKQogICAg
ICAgICAgICAgICAgICAgICB3ICs9IGYtPndvcmRTcGFjaW5nKCk7ICAgICAgICAKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtNDg1LDcgKzQ4NSw3IEBACiAgICAgICAgIHJldHVybiB3Owog
ICAgIH0KICAgICAKLSAgICByZXR1cm4gZi0+d2lkdGgoc3RyLT51bmljb2RlKCksIHN0ci0+bGVu
Z3RoKCksIHN0YXJ0LCBsZW4sIHRhYldpZHRoLCB4cG9zKTsKKyAgICByZXR1cm4gZi0+d2lkdGgo
c3RyLT5jaGFyYWN0ZXJzKCksIHN0ci0+bGVuZ3RoKCksIHN0YXJ0LCBsZW4sIHRhYldpZHRoLCB4
cG9zKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkTWluTWF4V2lkdGgoaW50IGxlYWRX
aWR0aCwKQEAgLTUyMyw4ICs1MjMsOCBAQAogCiAgICAgaWYgKHN0cmlwRnJvbnRTcGFjZXMgJiYg
KCgqc3RyKVswXSA9PSAnICcgfHwgKCgqc3RyKVswXSA9PSAnXG4nICYmICFzdHlsZSgpLT5wcmVz
ZXJ2ZU5ld2xpbmUoKSkgfHwgKCpzdHIpWzBdID09ICdcdCcpKSB7CiAgICAgICAgIGNvbnN0IEZv
bnQgKmYgPSBmb250KGZhbHNlKTsgLy8gRklYTUU6IFdoeSBpcyBpdCBvayB0byBpZ25vcmUgZmly
c3QtbGluZSBoZXJlPwotICAgICAgICBRQ2hhciBzcGFjZVsxXTsgc3BhY2VbMF0gPSAnICc7Ci0g
ICAgICAgIGludCBzcGFjZVdpZHRoID0gZi0+d2lkdGgoc3BhY2UsIDEpOworICAgICAgICBjb25z
dCBVQ2hhciBzcGFjZSA9ICcgJzsKKyAgICAgICAgaW50IHNwYWNlV2lkdGggPSBmLT53aWR0aCgm
c3BhY2UsIDEpOwogICAgICAgICBtYXhXIC09IHNwYWNlV2lkdGggKyBmLT53b3JkU3BhY2luZygp
OwogICAgIH0KICAgICAKQEAgLTU5MCwxOSArNTkwLDE4IEBACiAgICAgbV9oYXNCcmVha2FibGVD
aGFyID0gbV9oYXNCcmVhayA9IG1faGFzVGFiID0gbV9oYXNCZWdpbldTID0gbV9oYXNFbmRXUyA9
IGZhbHNlOwogICAgIAogICAgIC8vIEZJWE1FOiBub3QgMTAwJSBjb3JyZWN0IGZvciBmaXJzdC1s
aW5lCi0gICAgY29uc3QgRm9udCAqZiA9IGZvbnQoZmFsc2UpOworICAgIGNvbnN0IEZvbnQqIGYg
PSBmb250KGZhbHNlKTsKICAgICBpbnQgd29yZFNwYWNpbmcgPSBzdHlsZSgpLT53b3JkU3BhY2lu
ZygpOwogICAgIGludCBsZW4gPSBzdHItPmxlbmd0aCgpOwotICAgIGNvbnN0IFFDaGFyICp0eHQg
PSBzdHItPnVuaWNvZGUoKTsKKyAgICBjb25zdCBVQ2hhciogdHh0ID0gc3RyLT5jaGFyYWN0ZXJz
KCk7CiAgICAgYm9vbCBuZWVkc1dvcmRTcGFjaW5nID0gZmFsc2U7CiAgICAgYm9vbCBpZ25vcmlu
Z1NwYWNlcyA9IGZhbHNlOwogICAgIGJvb2wgaXNTcGFjZSA9IGZhbHNlOwogICAgIGJvb2wgZmly
c3RXb3JkID0gdHJ1ZTsKICAgICBib29sIGZpcnN0TGluZSA9IHRydWU7CiAgICAgaW50IG5leHRC
cmVha2FibGUgPSAtMTsKLSAgICBmb3IoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgewot
ICAgICAgICBRQ2hhciBjID0gdHh0W2ldOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBp
KyspIHsKKyAgICAgICAgVUNoYXIgYyA9IHR4dFtpXTsKICAgICAgICAgCiAgICAgICAgIGJvb2wg
cHJldmlvdXNDaGFyYWN0ZXJJc1NwYWNlID0gaXNTcGFjZTsKICAgICAgICAgCkBAIC02MzYsMTMg
KzYzNSwxMyBAQAogICAgICAgICAgICAgaWdub3JpbmdTcGFjZXMgPSBmYWxzZTsKICAgICAgICAg
CiAgICAgICAgIC8vIElnbm9yZSBzcGFjZXMgYW5kIHNvZnQgaHlwaGVucwotICAgICAgICBpZiAo
aWdub3JpbmdTcGFjZXMgfHwgYy51bmljb2RlKCkgPT0gU09GVF9IWVBIRU4pIHsKKyAgICAgICAg
aWYgKGlnbm9yaW5nU3BhY2VzIHx8IGMgPT0gU09GVF9IWVBIRU4pIHsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGhhc0JyZWFrID0gaXNC
cmVha2FibGUodHh0LCBpLCBsZW4sIG5leHRCcmVha2FibGUpOwogICAgICAgICBpbnQgaiA9IGk7
Ci0gICAgICAgIHdoaWxlIChjICE9ICdcbicgJiYgYyAhPSAnICcgJiYgYyAhPSAnXHQnICYmIGMu
dW5pY29kZSgpICE9IFNPRlRfSFlQSEVOKSB7CisgICAgICAgIHdoaWxlIChjICE9ICdcbicgJiYg
YyAhPSAnICcgJiYgYyAhPSAnXHQnICYmIGMgIT0gU09GVF9IWVBIRU4pIHsKICAgICAgICAgICAg
IGorKzsKICAgICAgICAgICAgIGlmIChqID09IGxlbikKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTczNSw3ICs3MzQsNyBAQAogewogICAgIHVuc2lnbmVkIGN1cnJQb3M7CiAgICAgZm9yIChj
dXJyUG9zID0gZnJvbTsgCi0gICAgICAgICBjdXJyUG9zIDwgZnJvbStsZW4gJiYgKCgqc3RyKVtj
dXJyUG9zXSA9PSAnXG4nIHx8ICgqc3RyKVtjdXJyUG9zXS51bmljb2RlKCkgPT0gJyAnIHx8ICgq
c3RyKVtjdXJyUG9zXSA9PSAnXHQnKTsgCisgICAgICAgICBjdXJyUG9zIDwgZnJvbStsZW4gJiYg
KCgqc3RyKVtjdXJyUG9zXSA9PSAnXG4nIHx8ICgqc3RyKVtjdXJyUG9zXSA9PSAnICcgfHwgKCpz
dHIpW2N1cnJQb3NdID09ICdcdCcpOyAKICAgICAgICAgIGN1cnJQb3MrKyk7CiAgICAgcmV0dXJu
IGN1cnJQb3MgPj0gKGZyb20rbGVuKTsKIH0KQEAgLTg4Miw3ICs4ODEsNyBAQAogICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZmluZCBwcmV2aW91cyB0ZXh0IHJlbmRl
cmVyIGlmIG9uZSBleGlzdHMKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBvOwot
ICAgICAgICAgICAgICAgICAgICBRQ2hhciBwcmV2aW91cyA9ICcgJzsKKyAgICAgICAgICAgICAg
ICAgICAgVUNoYXIgcHJldmlvdXMgPSAnICc7CiAgICAgICAgICAgICAgICAgICAgIGZvciAobyA9
IHByZXZpb3VzSW5QcmVPcmRlcigpOyBvICYmIG8tPmlzSW5saW5lRmxvdygpOyBvID0gby0+cHJl
dmlvdXNJblByZU9yZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChvICYmIG8tPmlzVGV4dCgpKSB7CkBAIC05MDUsNyArOTA0LDcgQEAKICAg
ICAvLyAjIyMgd2hhdCBzaG91bGQgaGFwcGVuIGlmIHdlIGNoYW5nZSB0aGUgdGV4dCBvZiBhCiAg
ICAgLy8gUmVuZGVyQlIgb2JqZWN0ID8KICAgICBLSFRNTEFzc2VydCghaXNCUigpIHx8IChzdHIt
Pmxlbmd0aCgpID09IDEgJiYgKCpzdHIpWzBdID09ICdcbicpKTsKLSAgICBLSFRNTEFzc2VydCgh
c3RyLT5sZW5ndGgoKSB8fCBzdHItPnVuaWNvZGUoKSk7CisgICAgS0hUTUxBc3NlcnQoIXN0ci0+
bGVuZ3RoKCkgfHwgc3RyLT5jaGFyYWN0ZXJzKCkpOwogCiAgICAgc2V0TmVlZHNMYXlvdXRBbmRN
aW5NYXhSZWNhbGMoKTsKIH0KQEAgLTk4NCw3ICs5ODMsNyBAQAogCiB1bnNpZ25lZCBpbnQgUmVu
ZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW4sIGNvbnN0
IEZvbnQgKmYsIGludCB4cG9zKSBjb25zdAogewotICAgIGlmICghc3RyLT51bmljb2RlKCkgfHwg
ZnJvbSA+IHN0ci0+bGVuZ3RoKCkpCisgICAgaWYgKCFzdHItPmNoYXJhY3RlcnMoKSB8fCBmcm9t
ID4gc3RyLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGZyb20gKyBsZW4g
PiBzdHItPmxlbmd0aCgpKQogICAgICAgICBsZW4gPSBzdHItPmxlbmd0aCgpIC0gZnJvbTsKQEAg
LTk5NSw3ICs5OTQsNyBAQAogICAgIGVsc2UgaWYgKGYgPT0gJnN0eWxlKCktPmZvbnQoKSkKICAg
ICAgICAgdyA9IHdpZHRoRnJvbUNhY2hlKGYsIGZyb20sIGxlbiwgdGFiV2lkdGgoKSwgeHBvcyk7
CiAgICAgZWxzZQotICAgICAgICB3ID0gZi0+d2lkdGgoc3RyLT51bmljb2RlKCksIHN0ci0+bGVu
Z3RoKCksIGZyb20sIGxlbiwgdGFiV2lkdGgoKSwgeHBvcyApOworICAgICAgICB3ID0gZi0+d2lk
dGgoc3RyLT5jaGFyYWN0ZXJzKCksIHN0ci0+bGVuZ3RoKCksIGZyb20sIGxlbiwgdGFiV2lkdGgo
KSwgeHBvcyApOwogICAgICAgICAKICAgICByZXR1cm4gdzsKIH0KSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAJKHJldmlzaW9uIDE0MjE2KQorKysgcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTkgKzIwNiwxOSBAQAogICAgIERlcHJlY2F0ZWRT
dHJpbmcgcmVzdWx0OwogICAgIHJlc3VsdCArPSAnIic7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSAhPSBzLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgUUNoYXIgYyA9IHNbaV07CisgICAg
ICAgIFVDaGFyIGMgPSBzW2ldOwogICAgICAgICBpZiAoYyA9PSAnXFwnKQogICAgICAgICAgICAg
cmVzdWx0ICs9ICJcXFxcIjsKICAgICAgICAgZWxzZSBpZiAoYyA9PSAnIicpCiAgICAgICAgICAg
ICByZXN1bHQgKz0gIlxcXCIiOwotICAgICAgICBlbHNlIGlmIChjID09ICdcbicgfHwgYy51bmlj
b2RlKCkgPT0gMHgwMEEwKQorICAgICAgICBlbHNlIGlmIChjID09ICdcbicgfHwgYyA9PSAweDAw
QTApCiAgICAgICAgICAgICByZXN1bHQgKz0gJyAnOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHUgPSBjLnVuaWNvZGUoKTsKLSAgICAgICAgICAgIGlmICh1ID49
IDB4MjAgJiYgdSA8IDB4N0YpCisgICAgICAgICAgICBpZiAoYyA+PSAweDIwICYmIGMgPCAweDdG
KQogICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjOwogICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBoZXg7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgdSA9IGM7CiAgICAgICAgICAgICAgICAgaGV4LnNwcmludGYoIlxceHslWH0iLCB1KTsKICAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gaGV4OwogICAgICAgICAgICAgfQpJbmRleDogcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAkocmV2aXNpb24gMTQyMTYpCisrKyByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgIGNvbnN0IEZvbnQgKmYgPSB0
ZXh0T2JqLT5mb250KG1fZmlyc3RMaW5lKTsKIAogICAgIEludFJlY3QgciA9IGYtPnNlbGVjdGlv
blJlY3RGb3JUZXh0KEludFBvaW50KHR4ICsgbV94LCB0eSArIHNlbFRvcCksIHNlbEhlaWdodCwg
dGV4dE9iai0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0T2JqLT5zdHItPnVuaWNvZGUoKSwgdGV4dE9iai0+c3RyLT5s
ZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dE9iai0+c3RyLT5jaGFyYWN0ZXJzKCksIHRleHRPYmotPnN0ci0+bGVuZ3Ro
KCksIG1fc3RhcnQsIG1fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQsIG1fZGlyT3ZlcnJpZGUsIHNQb3MsIGVQb3MpOwogICAg
IGlmIChyLngoKSA+IHR4ICsgbV94ICsgbV93aWR0aCkKICAgICAgICAgci5zZXRXaWR0aCgwKTsK
QEAgLTMzMyw3ICszMzMsNyBAQAogICAgICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5j
YXRpb24pCiAgICAgICAgICAgICBlbmRQb2ludCA9IG1fdHJ1bmNhdGlvbiAtIG1fc3RhcnQ7CiAg
ICAgICAgIGkucC0+ZHJhd1RleHQoSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgbV9iYXNl
bGluZSksIHRleHRPYmplY3QoKS0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLAotICAgICAgICAgICAg
ICAgICAgICAgIHRleHRPYmplY3QoKS0+c3RyaW5nKCktPnVuaWNvZGUoKSwgdGV4dE9iamVjdCgp
LT5zdHJpbmcoKS0+bGVuZ3RoKCksIG1fc3RhcnQsIGVuZFBvaW50LAorICAgICAgICAgICAgICAg
ICAgICAgIHRleHRPYmplY3QoKS0+c3RyaW5nKCktPmNoYXJhY3RlcnMoKSwgdGV4dE9iamVjdCgp
LT5zdHJpbmcoKS0+bGVuZ3RoKCksIG1fc3RhcnQsIGVuZFBvaW50LAogICAgICAgICAgICAgICAg
ICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBSVEwgOiBMVFIsIG1fZGlyT3ZlcnJpZGUgfHwg
c3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVkKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlu
dCBzUG9zLCBlUG9zOwpAQCAtMzQyLDE2ICszNDIsMTYgQEAKICAgICAgICAgICAgIC8vIHBhaW50
IG9ubHkgdGhlIHRleHQgdGhhdCBpcyBub3Qgc2VsZWN0ZWQKICAgICAgICAgICAgIGlmIChzUG9z
ID49IGVQb3MpCiAgICAgICAgICAgICAgICAgaS5wLT5kcmF3VGV4dChJbnRQb2ludChtX3ggKyB0
eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dE9iamVjdCgpLT50YWJXaWR0aCgpLCB0ZXh0
UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2JqZWN0KCktPnN0cmlu
ZygpLT51bmljb2RlKCksIHRleHRPYmplY3QoKS0+c3RyaW5nKCktPmxlbmd0aCgpLCBtX3N0YXJ0
LCBtX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPYmplY3QoKS0+c3Ry
aW5nKCktPmNoYXJhY3RlcnMoKSwgdGV4dE9iamVjdCgpLT5zdHJpbmcoKS0+bGVuZ3RoKCksIG1f
c3RhcnQsIG1fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0FkZCwgbV9y
ZXZlcnNlZCA/IFJUTCA6IExUUiwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZVRvVXNlLT52aXN1YWxs
eU9yZGVyZWQoKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoc1Bv
cyAtIDEgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgaS5wLT5kcmF3VGV4dChJbnRQb2ludCht
X3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dE9iamVjdCgpLT50YWJXaWR0aCgp
LCB0ZXh0UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9iamVj
dCgpLT5zdHJpbmcoKS0+dW5pY29kZSgpLCB0ZXh0T2JqZWN0KCktPnN0cmluZygpLT5sZW5ndGgo
KSwgbV9zdGFydCwgbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dE9iamVjdCgpLT5zdHJpbmcoKS0+Y2hhcmFjdGVycygpLCB0ZXh0T2JqZWN0KCktPnN0cmluZygp
LT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV90b0FkZCwgbV9yZXZlcnNlZCA/IFJUTCA6IExUUiwgbV9kaXJPdmVycmlkZSB8fCBz
dHlsZVRvVXNlLT52aXN1YWxseU9yZGVyZWQoKSwgMCwgc1Bvcyk7CiAgICAgICAgICAgICAgICAg
aWYgKGVQb3MgPCBtX3N0YXJ0ICsgbV9sZW4pCiAgICAgICAgICAgICAgICAgICAgIGkucC0+ZHJh
d1RleHQoSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgbV9iYXNlbGluZSksIHRleHRPYmpl
Y3QoKS0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHRPYmplY3QoKS0+c3RyaW5nKCktPnVuaWNvZGUoKSwgdGV4dE9iamVjdCgpLT5z
dHJpbmcoKS0+bGVuZ3RoKCksIG1fc3RhcnQsIG1fbGVuLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHRPYmplY3QoKS0+c3RyaW5nKCktPmNoYXJhY3RlcnMoKSwgdGV4dE9i
amVjdCgpLT5zdHJpbmcoKS0+bGVuZ3RoKCksIG1fc3RhcnQsIG1fbGVuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBSVEwgOiBMVFIsIG1f
ZGlyT3ZlcnJpZGUgfHwgc3R5bGVUb1VzZS0+dmlzdWFsbHlPcmRlcmVkKCksIGVQb3MsIC0xKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzY2LDcgKzM2Niw3IEBACiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVGV4dFNoYWRvdy0+Ymx1ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25UZXh0U2hhZG93LT5jb2xvcik7CiAgICAg
ICAgICAgICBpLnAtPmRyYXdUZXh0KEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIG1fYmFz
ZWxpbmUpLCB0ZXh0T2JqZWN0KCktPnRhYldpZHRoKCksIHRleHRQb3MoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dE9iamVjdCgpLT5zdHJpbmcoKS0+dW5pY29kZSgpLCB0ZXh0T2Jq
ZWN0KCktPnN0cmluZygpLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHRPYmplY3QoKS0+c3RyaW5nKCktPmNoYXJhY3RlcnMoKSwgdGV4dE9i
amVjdCgpLT5zdHJpbmcoKS0+bGVuZ3RoKCksIG1fc3RhcnQsIG1fbGVuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3RvQWRkLCBtX3JldmVyc2VkID8gUlRMIDogTFRSLCBtX2Rpck92ZXJy
aWRlIHx8IHN0eWxlVG9Vc2UtPnZpc3VhbGx5T3JkZXJlZCgpLCBzUG9zLCBlUG9zKTsKICAgICAg
ICAgICAgIGlmIChzZWxlY3Rpb25UZXh0U2hhZG93KQogICAgICAgICAgICAgICAgIGkucC0+Y2xl
YXJTaGFkb3coKTsKQEAgLTQ1MSw3ICs0NTEsNyBAQAogICAgIGludCBoID0gci0+c2VsZWN0aW9u
SGVpZ2h0KCk7CiAgICAgcC0+YWRkQ2xpcChJbnRSZWN0KG1feCArIHR4LCB5ICsgdHksIG1fd2lk
dGgsIGgpKTsKICAgICBwLT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChJbnRQb2ludChtX3ggKyB0eCwg
eSArIHR5KSwgaCwgdGV4dE9iamVjdCgpLT50YWJXaWR0aCgpLCB0ZXh0UG9zKCksIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHRPYmplY3QoKS0+c3RyLT51bmljb2RlKCksIHRleHRP
YmplY3QoKS0+c3RyLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dE9iamVjdCgpLT5zdHItPmNoYXJhY3RlcnMoKSwgdGV4dE9iamVjdCgp
LT5zdHItPmxlbmd0aCgpLCBtX3N0YXJ0LCBtX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3RvQWRkLCBtX3JldmVyc2VkID8gUlRMIDogTFRSLCBtX2Rpck92ZXJyaWRlIHx8IHN0
eWxlLT52aXN1YWxseU9yZGVyZWQoKSwgc1BvcywgZVBvcywgYyk7CiAgICAgcC0+cmVzdG9yZSgp
OwogfQpAQCAtNDc1LDcgKzQ3NSw3IEBACiAgICAgaW50IHkgPSByLT5zZWxlY3Rpb25Ub3AoKTsK
ICAgICBpbnQgaCA9IHItPnNlbGVjdGlvbkhlaWdodCgpOwogICAgIHAtPmRyYXdIaWdobGlnaHRG
b3JUZXh0KEludFBvaW50KG1feCArIHR4LCB5ICsgdHkpLCBoLCB0ZXh0T2JqZWN0KCktPnRhYldp
ZHRoKCksIHRleHRQb3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2JqZWN0
KCktPnN0ci0+dW5pY29kZSgpLCB0ZXh0T2JqZWN0KCktPnN0ci0+bGVuZ3RoKCksIG1fc3RhcnQs
IG1fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPYmplY3QoKS0+c3RyLT5j
aGFyYWN0ZXJzKCksIHRleHRPYmplY3QoKS0+c3RyLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90b0FkZCwgbV9yZXZlcnNlZCA/IFJUTCA6
IExUUiwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCksIHNQb3MsIGVQ
b3MsIGMpOwogICAgIHAtPnJlc3RvcmUoKTsKIH0KQEAgLTU3NCw3ICs1NzQsNyBAQAogICAgIGlu
dCBlUG9zID0gbWluKG1hcmtlci5lbmRPZmZzZXQgLSBtX3N0YXJ0LCAodW5zaWduZWQpbV9sZW4p
OwogICAgIAogICAgIHB0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChJbnRQb2ludChtX3ggKyBfdHgs
IHkgKyBfdHkpLCBoLCB0ZXh0T2JqZWN0KCktPnRhYldpZHRoKCksIHRleHRQb3MoKSwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPYmplY3QoKS0+c3RyLT51bmljb2RlKCksIHRl
eHRPYmplY3QoKS0+c3RyLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHRPYmplY3QoKS0+c3RyLT5jaGFyYWN0ZXJzKCksIHRleHRPYmpl
Y3QoKS0+c3RyLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdG9BZGQsIG1fcmV2ZXJzZWQgPyBSVEwgOiBMVFIsIG1fZGlyT3ZlcnJpZGUg
fHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpLCBzUG9zLCBlUG9zLCB5ZWxsb3cpOwogICAgIHB0
LT5yZXN0b3JlKCk7CiB9CkBAIC02ODgsNyArNjg4LDcgQEAKICAgICBSZW5kZXJUZXh0KiB0ZXh0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG1fb2JqZWN0KTsKICAgICBSZW5kZXJTdHlsZSAq
c3R5bGUgPSB0ZXh0LT5zdHlsZShtX2ZpcnN0TGluZSk7CiAgICAgY29uc3QgRm9udCogZiA9ICZz
dHlsZS0+Zm9udCgpOwotICAgIHJldHVybiBmLT5jaGVja1NlbGVjdGlvblBvaW50KHRleHQtPnN0
ci0+dW5pY29kZSgpLCB0ZXh0LT5zdHItPmxlbmd0aCgpLCBtX3N0YXJ0LCBtX2xlbiwKKyAgICBy
ZXR1cm4gZi0+Y2hlY2tTZWxlY3Rpb25Qb2ludCh0ZXh0LT5zdHItPmNoYXJhY3RlcnMoKSwgdGV4
dC0+c3RyLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4sCiAgICAgICAgIG1fdG9BZGQsIHRleHQt
PnRhYldpZHRoKCksIHRleHRQb3MoKSwgX3ggLSBtX3gsCiAgICAgICAgIG1fcmV2ZXJzZWQgPyBS
VEwgOiBMVFIsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpLCBpbmNs
dWRlUGFydGlhbEdseXBocyk7CiB9CkBAIC03MDMsNyArNzAzLDcgQEAKICAgICBpbnQgZnJvbSA9
IG1fcmV2ZXJzZWQgPyBvZmZzZXQgLSBtX3N0YXJ0IDogMDsKICAgICBpbnQgdG8gPSBtX3JldmVy
c2VkID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OwogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVk
IHRvIGFkZCByaWdodEJlYXJpbmcgaGVyZT8KLSAgICByZXR1cm4gZi0+c2VsZWN0aW9uUmVjdEZv
clRleHQoSW50UG9pbnQobV94LCAwKSwgMCwgdGV4dC0+dGFiV2lkdGgoKSwgdGV4dFBvcygpLCB0
ZXh0LT5zdHItPnVuaWNvZGUoKSwgdGV4dC0+c3RyLT5sZW5ndGgoKSwgbV9zdGFydCwgbV9sZW4s
CisgICAgcmV0dXJuIGYtPnNlbGVjdGlvblJlY3RGb3JUZXh0KEludFBvaW50KG1feCwgMCksIDAs
IHRleHQtPnRhYldpZHRoKCksIHRleHRQb3MoKSwgdGV4dC0+c3RyLT5jaGFyYWN0ZXJzKCksIHRl
eHQtPnN0ci0+bGVuZ3RoKCksIG1fc3RhcnQsIG1fbGVuLAogICAgICAgICBtX3RvQWRkLCBtX3Jl
dmVyc2VkLCBtX2Rpck92ZXJyaWRlLCBmcm9tLCB0bykucmlnaHQoKTsKIH0KIApJbmRleDogcmVu
ZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2Zv
cm0uY3BwCShyZXZpc2lvbiAxNDIxNikKKysrIHJlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICAgIGlmICghZS0+dmFsdWVNYXRjaGVz
UmVuZGVyZXIoKSkgewogICAgICAgICBTdHJpbmcgd2lkZ2V0VGV4dCA9IHctPnRleHQoKTsKICAg
ICAgICAgU3RyaW5nIG5ld1RleHQgPSBlLT52YWx1ZSgpOwotICAgICAgICBuZXdUZXh0LnJlcGxh
Y2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CisgICAgICAgIG5l
d1RleHQucmVwbGFjZSgnXFwnLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwogICAgICAg
ICBpZiAod2lkZ2V0VGV4dCAhPSBuZXdUZXh0KSB7CiAgICAgICAgICAgICBpbnQgcG9zID0gdy0+
Y3Vyc29yUG9zaXRpb24oKTsKIApAQCAtNjUyLDcgKzY1Miw3IEBACiAgICAgICAgICAgICBpZiAo
bGlzdEl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUob3B0Z3JvdXBUYWcpKSB7CiAgICAgICAg
ICAgICAgICAgSFRNTE9wdEdyb3VwRWxlbWVudCAqb3B0Z3JvdXBFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTE9wdEdyb3VwRWxlbWVudCo+KGxpc3RJdGVtc1tsaXN0SW5kZXhdKTsKICAgICAgICAg
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGxhYmVsID0gb3B0Z3JvdXBFbGVtZW50LT5nZXRBdHRy
aWJ1dGUobGFiZWxBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgbGFi
ZWwucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKKyAg
ICAgICAgICAgICAgICBsYWJlbC5yZXBsYWNlKCdcXCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1i
b2woKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSW4gV2luSUUsIGFu
IG9wdGdyb3VwIGNhbid0IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2UgKG90aGVyIHRoYW4g
dGhlIGluZGVudAogICAgICAgICAgICAgICAgIC8vIHdlIGdpdmUgaXQpLiAgV2UgbWF0Y2ggdGhp
cyBiZWhhdmlvci4KQEAgLTY3NSw3ICs2NzUsNyBAQAogICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgaXRlbVRleHQgPSBvcHRpb25FbGVtZW50LT50ZXh0KCkuZGVwcmVj
YXRlZFN0cmluZygpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGl0ZW1UZXh0
LnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CisgICAg
ICAgICAgICAgICAgaXRlbVRleHQucmVwbGFjZSgnXFwnLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3lt
Ym9sKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSW4gV2luSUUsIGxlYWRpbmcgYW5kIHRyYWls
aW5nIHdoaXRlc3BhY2UgaXMgaWdub3JlZCBpbiBvcHRpb25zLiBXZSBtYXRjaCB0aGlzIGJlaGF2
aW9yLgogICAgICAgICAgICAgICAgIGl0ZW1UZXh0ID0gaXRlbVRleHQuc3RyaXBXaGl0ZVNwYWNl
KCk7CkBAIC05OTUsNyArOTk1LDcgQEAKIAogICAgIFN0cmluZyB3aWRnZXRUZXh0ID0gdGV4dCgp
OwogICAgIFN0cmluZyB0ZXh0ID0gZS0+dmFsdWUoKTsKLSAgICB0ZXh0LnJlcGxhY2UoUUNoYXIo
J1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CisgICAgdGV4dC5yZXBsYWNlKCdc
XCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CiAgICAgaWYgKHdpZGdldFRleHQgIT0g
dGV4dCkgewogICAgICAgICBpbnQgbGluZSwgY29sOwogICAgICAgICB3LT5nZXRDdXJzb3JQb3Np
dGlvbiggJmxpbmUsICZjb2wgKTsKQEAgLTEwMTQsMTMgKzEwMTQsMTMgQEAKIFN0cmluZyBSZW5k
ZXJUZXh0QXJlYTo6dGV4dCgpCiB7CiAgICAgU3RyaW5nIHR4dCA9IHN0YXRpY19jYXN0PFFUZXh0
RWRpdCo+KG1fd2lkZ2V0KS0+dGV4dCgpOwotICAgIHJldHVybiB0eHQucmVwbGFjZShiYWNrc2xh
c2hBc0N1cnJlbmN5U3ltYm9sKCksIFFDaGFyKCdcXCcpKTsKKyAgICByZXR1cm4gdHh0LnJlcGxh
Y2UoYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpLCAnXFwnKTsKIH0KIAogU3RyaW5nIFJlbmRl
clRleHRBcmVhOjp0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKCkKIHsKICAgICBTdHJpbmcgdHh0ID0g
c3RhdGljX2Nhc3Q8UVRleHRFZGl0Kj4obV93aWRnZXQpLT50ZXh0V2l0aEhhcmRMaW5lQnJlYWtz
KCk7Ci0gICAgcmV0dXJuIHR4dC5yZXBsYWNlKGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSwg
UUNoYXIoJ1xcJykpOworICAgIHJldHVybiB0eHQucmVwbGFjZShiYWNrc2xhc2hBc0N1cnJlbmN5
U3ltYm9sKCksICdcXCcpOwogfQogCiB2b2lkIFJlbmRlclRleHRBcmVhOjp2YWx1ZUNoYW5nZWQo
V2lkZ2V0KikKSW5kZXg6IHJlbmRlcmluZy9iaWRpLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L2JpZGkuaAkocmV2aXNpb24gMTQyMTYpCisrKyByZW5kZXJpbmcvYmlkaS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCw4MCArMjAsODIgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgog
ICoKICAqLworCiAjaWZuZGVmIEJJRElfSAogI2RlZmluZSBCSURJX0gKIAotI2luY2x1ZGUgIkRl
cHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CiAKIGNsYXNzIFJl
bmRlckFyZW5hOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisKICAgICBjbGFzcyBSZW5kZXJCbG9j
azsKICAgICBjbGFzcyBSZW5kZXJPYmplY3Q7CiAgICAgY2xhc3MgSW5saW5lQm94OwogCiAgICAg
c3RydWN0IEJpZGlTdGF0dXMgewotICAgICAgICBCaWRpU3RhdHVzKCkgOiBlb3IoUUNoYXI6OkRp
ck9OKSwgbGFzdFN0cm9uZyhRQ2hhcjo6RGlyT04pLCBsYXN0KFFDaGFyOjpEaXJPTikge30KKyAg
ICAgICAgQmlkaVN0YXR1cygpIDogZW9yKFVfT1RIRVJfTkVVVFJBTCksIGxhc3RTdHJvbmcoVV9P
VEhFUl9ORVVUUkFMKSwgbGFzdChVX09USEVSX05FVVRSQUwpIHt9CiAgICAgICAgIAotICAgICAg
ICBRQ2hhcjo6RGlyZWN0aW9uIGVvcjsKLSAgICAgICAgUUNoYXI6OkRpcmVjdGlvbiBsYXN0U3Ry
b25nOwotICAgICAgICBRQ2hhcjo6RGlyZWN0aW9uIGxhc3Q7CisgICAgICAgIFVDaGFyRGlyZWN0
aW9uIGVvcjsKKyAgICAgICAgVUNoYXJEaXJlY3Rpb24gbGFzdFN0cm9uZzsKKyAgICAgICAgVUNo
YXJEaXJlY3Rpb24gbGFzdDsKICAgICB9OwogICAgICAgICAKICAgICBjbGFzcyBCaWRpQ29udGV4
dCB7CiAgICAgcHVibGljOgotICAgICAgICBCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVs
LCBRQ2hhcjo6RGlyZWN0aW9uIGVtYmVkZGluZywgQmlkaUNvbnRleHQgKnBhcmVudCA9IDAsIGJv
b2wgb3ZlcnJpZGUgPSBmYWxzZSk7CisgICAgICAgIEJpZGlDb250ZXh0KHVuc2lnbmVkIGNoYXIg
bGV2ZWwsIFVDaGFyRGlyZWN0aW9uIGVtYmVkZGluZywgQmlkaUNvbnRleHQqIHBhcmVudCA9IDAs
IGJvb2wgb3ZlcnJpZGUgPSBmYWxzZSk7CiAgICAgICAgIH5CaWRpQ29udGV4dCgpOwogCiAgICAg
ICAgIHZvaWQgcmVmKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgZGVyZWYoKSBjb25zdDsKIAotICAg
ICAgICBRQ2hhcjo6RGlyZWN0aW9uIGRpcigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFFD
aGFyOjpEaXJlY3Rpb24+KG1fZGlyKTsgfQotICAgICAgICBRQ2hhcjo6RGlyZWN0aW9uIGJhc2lj
RGlyKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UUNoYXI6OkRpcmVjdGlvbj4obV9iYXNp
Y0Rpcik7IH0KKyAgICAgICAgVUNoYXJEaXJlY3Rpb24gZGlyKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VUNoYXJEaXJlY3Rpb24+KG1fZGlyKTsgfQorICAgICAgICBVQ2hhckRpcmVjdGlv
biBiYXNpY0RpcigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVDaGFyRGlyZWN0aW9uPiht
X2Jhc2ljRGlyKTsgfQogCiAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGV2ZWw7CiAgICAgICAgIGJv
b2wgb3ZlcnJpZGUgOiAxOwotICAgICAgICB1bnNpZ25lZCBtX2RpciA6IDU7IC8vIFFDaGFyOjpE
aXJlY3Rpb24KLSAgICAgICAgdW5zaWduZWQgbV9iYXNpY0RpciA6IDU7IC8vIFFDaGFyOjpEaXJl
Y3Rpb24KLSAgICAgICAgCi0gICAgICAgIEJpZGlDb250ZXh0ICpwYXJlbnQ7CisgICAgICAgIHVu
c2lnbmVkIG1fZGlyIDogNTsgLy8gVUNoYXJEaXJlY3Rpb24KKyAgICAgICAgdW5zaWduZWQgbV9i
YXNpY0RpciA6IDU7IC8vIFVDaGFyRGlyZWN0aW9uCiAKKyAgICAgICAgQmlkaUNvbnRleHQqIHBh
cmVudDsKKwogICAgICAgICAvLyByZWZjb3VudGluZy4uLi4KICAgICAgICAgbXV0YWJsZSBpbnQg
Y291bnQ7CiAgICAgfTsKIAogICAgIHN0cnVjdCBCaWRpUnVuIHsKLSAgICAgICAgQmlkaVJ1bihp
bnQgX3N0YXJ0LCBpbnQgX3N0b3AsIFJlbmRlck9iamVjdCAqX29iaiwgQmlkaUNvbnRleHQgKmNv
bnRleHQsIFFDaGFyOjpEaXJlY3Rpb24gZGlyKQotICAgICAgICAgICAgOiAgc3RhcnQoIF9zdGFy
dCApLCBzdG9wKCBfc3RvcCApLCBvYmooIF9vYmogKSwgYm94KDApLCBvdmVycmlkZShjb250ZXh0
LT5vdmVycmlkZSksIG5leHRSdW4oMCkKKyAgICAgICAgQmlkaVJ1bihpbnQgc3RhcnRfLCBpbnQg
c3RvcF8sIFJlbmRlck9iamVjdCogbywgQmlkaUNvbnRleHQqIGNvbnRleHQsIFVDaGFyRGlyZWN0
aW9uIGRpcikKKyAgICAgICAgICAgIDogIHN0YXJ0KHN0YXJ0XyksIHN0b3Aoc3RvcF8pLCBvYmoo
byksIGJveCgwKSwgb3ZlcnJpZGUoY29udGV4dC0+b3ZlcnJpZGUpLCBuZXh0UnVuKDApCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChkaXIgPT0gUUNoYXI6OkRpck9OKSAKKyAgICAgICAgICAg
IGlmIChkaXIgPT0gVV9PVEhFUl9ORVVUUkFMKSAKICAgICAgICAgICAgICAgICBkaXIgPSBjb250
ZXh0LT5kaXIoKTsKIAogICAgICAgICAgICAgbGV2ZWwgPSBjb250ZXh0LT5sZXZlbDsKIAogICAg
ICAgICAgICAgLy8gYWRkIGxldmVsIG9mIHJ1biAoY2FzZXMgSTEgJiBJMikKLSAgICAgICAgICAg
IGlmKCBsZXZlbCAlIDIgKSB7Ci0gICAgICAgICAgICAgICAgaWYoZGlyID09IFFDaGFyOjpEaXJM
IHx8IGRpciA9PSBRQ2hhcjo6RGlyQU4gfHwgZGlyID09IFFDaGFyOjpEaXJFTikKKyAgICAgICAg
ICAgIGlmIChsZXZlbCAlIDIpIHsKKyAgICAgICAgICAgICAgICBpZihkaXIgPT0gVV9MRUZUX1RP
X1JJR0hUIHx8IGRpciA9PSBVX0FSQUJJQ19OVU1CRVIgfHwgZGlyID09IFVfRVVST1BFQU5fTlVN
QkVSKQogICAgICAgICAgICAgICAgICAgICBsZXZlbCsrOwogICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBpZiggZGlyID09IFFDaGFyOjpEaXJSICkKKyAgICAgICAgICAgICAg
ICBpZiAoZGlyID09IFVfUklHSFRfVE9fTEVGVCkKICAgICAgICAgICAgICAgICAgICAgbGV2ZWwr
KzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmKCBkaXIgPT0gUUNoYXI6OkRpckFOIHx8IGRpciA9
PSBRQ2hhcjo6RGlyRU4pCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGlyID09IFVfQVJBQklD
X05VTUJFUiB8fCBkaXIgPT0gVV9FVVJPUEVBTl9OVU1CRVIpCiAgICAgICAgICAgICAgICAgICAg
IGxldmVsICs9IDI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGRl
c3Ryb3koUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKTsKKyAgICAgICAgdm9pZCBkZXN0cm95KFJl
bmRlckFyZW5hKik7CiAKICAgICAgICAgLy8gT3ZlcmxvYWRlZCBuZXcgb3BlcmF0b3IuCi0gICAg
ICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIFJlbmRlckFyZW5hKiByZW5kZXJBcmVu
YSkgdGhyb3coKTsKKyAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgUmVuZGVyQXJl
bmEqKSB0aHJvdygpOwogCiAgICAgICAgIC8vIE92ZXJyaWRkZW4gdG8gcHJldmVudCB0aGUgbm9y
bWFsIGRlbGV0ZSBmcm9tIGJlaW5nIGNhbGxlZC4KLSAgICAgICAgdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCogcHRyLCBzaXplX3Qgc3opOworICAgICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2
b2lkKiwgc2l6ZV90KTsKIAogcHJpdmF0ZToKICAgICAgICAgLy8gVGhlIG5vcm1hbCBvcGVyYXRv
ciBuZXcgaXMgZGlzYWxsb3dlZC4KLSAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBz
eikgdGhyb3coKTsKKyAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCkgdGhyb3coKTsK
IAogcHVibGljOgogICAgICAgICBpbnQgc3RhcnQ7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4
dEZpZWxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dEZpZWxkLmNwcAko
cmV2aXNpb24gMTQyMTYpCisrKyByZW5kZXJpbmcvUmVuZGVyVGV4dEZpZWxkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBp
bnB1dC0+dmFsdWUoKS5jb3B5KCk7CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCiAg
ICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsKLSAgICAgICAgICAgIHZhbHVlLnJlcGxhY2UoUUNo
YXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CisgICAgICAgICAgICB2YWx1
ZS5yZXBsYWNlKCdcXCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CiAgICAgICAgICAg
ICBpZiAodmFsdWUgIT0gb2xkVGV4dCkgewogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgICAgICAgICAgICAgIG1fZGl2LT5zZXRJbm5lclRleHQodmFsdWUsIGVjKTsK
QEAgLTIzMCw5ICsyMzAsOCBAQAogICAgICAgICBpZiAoc2l6ZSA8PSAwKQogICAgICAgICAgICAg
c2l6ZSA9IDIwOwogCi0gICAgICAgIFFDaGFyIGNoWzFdOwotICAgICAgICBjaFswXSA9ICcwJzsK
LSAgICAgICAgaW50IHNpemVXaWR0aCA9IChpbnQpY2VpbGYoc3R5bGUoKS0+Zm9udCgpLmZsb2F0
V2lkdGgoY2gsIDEsIDAsIDEsIDAsIDAsIGZhbHNlKSAqIHNpemUpOworICAgICAgICBjb25zdCBV
Q2hhciBjaCA9ICcwJzsKKyAgICAgICAgaW50IHNpemVXaWR0aCA9IChpbnQpY2VpbGYoc3R5bGUo
KS0+Zm9udCgpLmZsb2F0V2lkdGgoJmNoLCAxLCAwLCAxLCAwLCAwLCBmYWxzZSkgKiBzaXplKTsK
ICAgICAgICAgbV9tYXhXaWR0aCA9IHNpemVXaWR0aDsKICAgICB9CiAgICAgCkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUZXh0LmgJ
KHJldmlzaW9uIDE0MjE2KQorKysgcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtNzgsMTMgKzc4LDEzIEBACiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3Np
dGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7CiAKLSAgICB1bnNpZ25lZCBpbnQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gc3RyLT5sZW5ndGgoKTsgfQotICAgIGNvbnN0IFFDaGFyKiB0
ZXh0KCkgY29uc3QgeyByZXR1cm4gc3RyLT51bmljb2RlKCk7IH0KLSAgICB1bnNpZ25lZCBpbnQg
c3RyaW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gc3RyLT5sZW5ndGgoKTsgfSAvLyBub24gdmly
dHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBsZW5ndGgoKQorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gc3RyLT5sZW5ndGgoKTsgfQorICAgIGNvbnN0IFVDaGFyKiB0
ZXh0KCkgY29uc3QgeyByZXR1cm4gc3RyLT5jaGFyYWN0ZXJzKCk7IH0KKyAgICB1bnNpZ25lZCBz
dHJpbmdMZW5ndGgoKSBjb25zdCB7IHJldHVybiBzdHItPmxlbmd0aCgpOyB9IC8vIG5vbiB2aXJ0
dWFsIGltcGxlbWVudGF0aW9uIG9mIGxlbmd0aCgpCiAgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9u
KElubGluZUJveCogYm94LCBpbnQgZnJvbSwgaW50IGxlbiwgYm9vbCByZXZlcnNlLCBib29sIG92
ZXJyaWRlKTsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IHdpZHRoKHVuc2lnbmVkIGludCBm
cm9tLCB1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBGb250ICpmLCBpbnQgeHBvcykgY29uc3Q7Ci0g
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgd2lkdGgodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVk
IGludCBsZW4sIGludCB4cG9zLCBib29sIGZpcnN0TGluZSA9IGZhbHNlKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgY29uc3Qg
Rm9udCosIGludCB4cG9zKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHdpZHRoKHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgaW50IHhwb3MsIGJvb2wgZmlyc3RMaW5lID0gZmFsc2Up
IGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQg
aGVpZ2h0KCkgY29uc3Q7CiAKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50JiBiZWdpbk1heFcsIGludCYgZW5kTWF4VywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWluVywgaW50JiBtYXhXLCBib29sJiBz
dHJpcEZyb250U3BhY2VzKTsKICAgICAKLSAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2Uo
dW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBsZW4pIGNvbnN0OworICAgIGJvb2wgY29u
dGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0Owog
ICAgIAogICAgIC8vIHJldHVybnMgdGhlIG1pbmltdW0geCBwb3NpdGlvbiBvZiBhbGwgcnVucyBy
ZWxhdGl2ZSB0byB0aGUgcGFyZW50LgogICAgIC8vIGRlZmF1bHRzIHRvIDAuCkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHJldmlzaW9uIDE0MjE2KQorKysgcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgzMSw4ICsyODMxLDggQEAKICAgICAgICAgLy8gQ29sbGFwc2UgYXdh
eSB0aGUgdHJhaWxpbmcgc3BhY2UgYXQgdGhlIGVuZCBvZiBhIGJsb2NrLgogICAgICAgICBSZW5k
ZXJUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPih0cmFpbGluZ1NwYWNlQ2hpbGQp
OwogICAgICAgICBjb25zdCBGb250ICpmID0gdC0+Zm9udChmYWxzZSk7ICAvLyBGSVhNRTogV2h5
IGFyZSB3ZSBpZ25vcmluZyBmaXJzdC1saW5lPwotICAgICAgICBRQ2hhciBzcGFjZVsxXTsgc3Bh
Y2VbMF0gPSAnICc7Ci0gICAgICAgIGludCBzcGFjZVdpZHRoID0gZi0+d2lkdGgoc3BhY2UsIDEp
OworICAgICAgICBjb25zdCBVQ2hhciBzcGFjZSA9ICcgJzsKKyAgICAgICAgaW50IHNwYWNlV2lk
dGggPSBmLT53aWR0aCgmc3BhY2UsIDEpOwogICAgICAgICBpbmxpbmVNYXggLT0gc3BhY2VXaWR0
aDsKICAgICAgICAgaWYgKGlubGluZU1pbiA+IGlubGluZU1heCkKICAgICAgICAgICAgIGlubGlu
ZU1pbiA9IGlubGluZU1heDsKQEAgLTMzOTcsNyArMzM5Nyw3IEBACiAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgbGVuZ3RoID0gMDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gYWNjb3Vu
dCBmb3IgbGVhZGluZyBzcGFjZXMgYW5kIHB1bmN0dWF0aW9uCi0gICAgICAgICAgICB3aGlsZSAo
bGVuZ3RoIDwgb2xkVGV4dC0+bGVuZ3RoKCkgJiYgKCgqb2xkVGV4dClbbGVuZ3RoXS5pc1NwYWNl
KCkgfHwgKCpvbGRUZXh0KVtsZW5ndGhdLmlzUHVuY3QoKSkpCisgICAgICAgICAgICB3aGlsZSAo
bGVuZ3RoIDwgb2xkVGV4dC0+bGVuZ3RoKCkgJiYgKFFDaGFyKCgqb2xkVGV4dClbbGVuZ3RoXSku
aXNTcGFjZSgpIHx8IHVfaXNwdW5jdCgoKm9sZFRleHQpW2xlbmd0aF0pKSkKICAgICAgICAgICAg
ICAgICBsZW5ndGgrKzsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gYWNjb3VudCBmb3Ig
Zmlyc3QgbGV0dGVyCkluZGV4OiBkb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Q
b3NpdGlvbi5jcHAJKHJldmlzaW9uIDE0MjE2KQorKysgZG9tL1Bvc2l0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
Citjb25zdCBVQ2hhciBub25CcmVha2luZ1NwYWNlID0gMHhhMDsKKwogc3RhdGljIE5vZGUgKm5l
eHRSZW5kZXJlZEVkaXRhYmxlKE5vZGUgKm5vZGUpCiB7CiAgICAgd2hpbGUgKDEpIHsKQEAgLTYy
Niw4ICs2MjgsOCBAQAogICAgIFBvc2l0aW9uIHByZXYgPSBwcmV2aW91c0NoYXJhY3RlclBvc2l0
aW9uKGFmZmluaXR5KTsKICAgICBpZiAocHJldiAhPSAqdGhpcyAmJiBwcmV2Lm5vZGUoKS0+aW5T
YW1lQ29udGFpbmluZ0Jsb2NrRmxvd0VsZW1lbnQobm9kZSgpKSAmJiBwcmV2Lm5vZGUoKS0+aXNU
ZXh0Tm9kZSgpKSB7CiAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBzdGF0aWNfY2FzdDxUZXh0ICo+
KHByZXYubm9kZSgpKS0+ZGF0YSgpOwotICAgICAgICBjb25zdCBRQ2hhciAmYyA9IHN0cmluZ1tw
cmV2Lm9mZnNldCgpXTsKLSAgICAgICAgaWYgKGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNw
YWNlID8gKGMuaXNTcGFjZSgpIHx8IGMudW5pY29kZSgpID09IDB4YTApIDogaXNDb2xsYXBzaWJs
ZVdoaXRlc3BhY2UoYykpCisgICAgICAgIFVDaGFyIGMgPSBzdHJpbmdbcHJldi5vZmZzZXQoKV07
CisgICAgICAgIGlmIChjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFjZSA/IChRQ2hhcihj
KS5pc1NwYWNlKCkgfHwgYyA9PSBub25CcmVha2luZ1NwYWNlKSA6IGlzQ29sbGFwc2libGVXaGl0
ZXNwYWNlKGMpKQogICAgICAgICAgICAgcmV0dXJuIHByZXY7CiAgICAgfQogCkBAIC02NDAsMTEg
KzY0MiwxMSBAQAogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIGlmIChub2RlKCkt
PmlzVGV4dE5vZGUoKSkgewotICAgICAgICBUZXh0ICp0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRl
eHQgKj4obm9kZSgpKTsKKyAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0
Kj4obm9kZSgpKTsKICAgICAgICAgaWYgKG9mZnNldCgpIDwgKGludCl0ZXh0Tm9kZS0+bGVuZ3Ro
KCkpIHsKLSAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KG5v
ZGUoKSktPmRhdGEoKTsKLSAgICAgICAgICAgIGNvbnN0IFFDaGFyICZjID0gc3RyaW5nW29mZnNl
dCgpXTsKLSAgICAgICAgICAgIGlmIChjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFjZSA/
IChjLmlzU3BhY2UoKSB8fCBjLnVuaWNvZGUoKSA9PSAweGEwKSA6IGlzQ29sbGFwc2libGVXaGl0
ZXNwYWNlKGMpKQorICAgICAgICAgICAgU3RyaW5nIHN0cmluZyA9IHRleHROb2RlLT5kYXRhKCk7
CisgICAgICAgICAgICBVQ2hhciBjID0gc3RyaW5nW29mZnNldCgpXTsKKyAgICAgICAgICAgIGlm
IChjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFjZSA/IChRQ2hhcihjKS5pc1NwYWNlKCkg
fHwgYyA9PSBub25CcmVha2luZ1NwYWNlKSA6IGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKGMpKQog
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgICAgIHJldHVybiBQb3NpdGlv
bigpOwogICAgICAgICB9CkBAIC02NTUsOSArNjU3LDkgQEAKIAogICAgIFBvc2l0aW9uIG5leHQg
PSBuZXh0Q2hhcmFjdGVyUG9zaXRpb24oYWZmaW5pdHkpOwogICAgIGlmIChuZXh0ICE9ICp0aGlz
ICYmIG5leHQubm9kZSgpLT5pblNhbWVDb250YWluaW5nQmxvY2tGbG93RWxlbWVudChub2RlKCkp
ICYmIG5leHQubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZyA9
IHN0YXRpY19jYXN0PFRleHQgKj4obmV4dC5ub2RlKCkpLT5kYXRhKCk7Ci0gICAgICAgIGNvbnN0
IFFDaGFyICZjID0gc3RyaW5nWzBdOwotICAgICAgICBpZiAoY29uc2lkZXJOb25Db2xsYXBzaWJs
ZVdoaXRlc3BhY2UgPyAoYy5pc1NwYWNlKCkgfHwgYy51bmljb2RlKCkgPT0gMHhhMCkgOiBpc0Nv
bGxhcHNpYmxlV2hpdGVzcGFjZShjKSkKKyAgICAgICAgU3RyaW5nIHN0cmluZyA9IHN0YXRpY19j
YXN0PFRleHQqPihuZXh0Lm5vZGUoKSktPmRhdGEoKTsKKyAgICAgICAgVUNoYXIgYyA9IHN0cmlu
Z1swXTsKKyAgICAgICAgaWYgKGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlID8gKFFD
aGFyKGMpLmlzU3BhY2UoKSB8fCBjID09IG5vbkJyZWFraW5nU3BhY2UpIDogaXNDb2xsYXBzaWJs
ZVdoaXRlc3BhY2UoYykpCiAgICAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICB9CiAKSW5kZXg6
IGRvbS9OYW1lZE1hcHBlZEF0dHJNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9OYW1lZE1hcHBl
ZEF0dHJNYXAuY3BwCShyZXZpc2lvbiAxNDIxNikKKysrIGRvbS9OYW1lZE1hcHBlZEF0dHJNYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBACiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWlubGluZSBzdGF0aWMgYm9vbCBpc0NsYXNzV2hpdGVzcGFjZShRQ2hhciBjKQoraW5saW5l
IHN0YXRpYyBib29sIGlzQ2xhc3NXaGl0ZXNwYWNlKFVDaGFyIGMpCiB7CiAgICAgcmV0dXJuIGMg
PT0gJyAnIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHQnOwogfQpAQCAtOTMs
NyArOTMsNyBAQAogICAgIAogICAgIEF0b21pY1N0cmluZ0xpc3QqIGN1cnIgPSAwOwogICAgIAot
ICAgIGNvbnN0IFFDaGFyKiBzdHIgPSBjbGFzc0F0dHIudW5pY29kZSgpOworICAgIGNvbnN0IFVD
aGFyKiBzdHIgPSBjbGFzc0F0dHIuY2hhcmFjdGVycygpOwogICAgIGludCBsZW5ndGggPSBjbGFz
c0F0dHIubGVuZ3RoKCk7CiAgICAgaW50IHNQb3MgPSAwOwogCkluZGV4OiBkb20vZG9tMl9ldmVu
dHNpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vZG9tMl9ldmVudHNpbXBsLmNwcAkocmV2aXNp
b24gMTQyMTYpCisrKyBkb20vZG9tMl9ldmVudHNpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTEzLDcgKzUxMyw3IEBACiAgICAgU3RyaW5nIHRleHQgPSBtX2tleUV2ZW50LT50ZXh0KCk7CiAg
ICAgaWYgKHRleHQubGVuZ3RoKCkgIT0gMSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IHRleHRbMF0udW5pY29kZSgpOworICAgIHJldHVybiB0ZXh0WzBdOwogfQogCiBib29sIEtleWJv
YXJkRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0CkluZGV4OiBkb20vU3R5bGVkRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDIx
NikKKysrIGRvbS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEw
MSw3IEBACiAgICAgfQogfQogCi1pbmxpbmUgc3RhdGljIGJvb2wgaXNDbGFzc1doaXRlc3BhY2Uo
UUNoYXIgYykKK2lubGluZSBzdGF0aWMgYm9vbCBpc0NsYXNzV2hpdGVzcGFjZShVQ2hhciBjKQog
ewogICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdccicgfHwgYyA9PSAnXG4nIHx8IGMgPT0g
J1x0JzsKIH0KQEAgLTI5NSwxMSArMjk1LDExIEBACiAgICAgaWYgKHYpIHsKICAgICAgICAgdW5z
aWduZWQgaW50IGwgPSAwOwogICAgICAgICAKLSAgICAgICAgd2hpbGUgKGwgPCB2LT5sZW5ndGgo
KSAmJiAoKnYpW2xdLnVuaWNvZGUoKSA8PSAnICcpCisgICAgICAgIHdoaWxlIChsIDwgdi0+bGVu
Z3RoKCkgJiYgKCp2KVtsXSA8PSAnICcpCiAgICAgICAgICAgICBsKys7CiAgICAgICAgIAogICAg
ICAgICBmb3IgKDsgbCA8IHYtPmxlbmd0aCgpOyBsKyspIHsKLSAgICAgICAgICAgIGNoYXIgY2Mg
PSAoKnYpW2xdLmxhdGluMSgpOworICAgICAgICAgICAgVUNoYXIgY2MgPSAoKnYpW2xdOwogICAg
ICAgICAgICAgaWYgKGNjID4gJzknIHx8IChjYyA8ICcwJyAmJiBjYyAhPSAnKicgJiYgY2MgIT0g
JyUnICYmIGNjICE9ICcuJykpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTM1OCw3ICszNTgsNyBAQAogICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBmb3J3YXJkIGZvciBk
aWdpdHMgaW4gdGhlIHN0cmluZwogICAgICAgICAgICAgICAgIGludCBudW1EaWdpdHMgPSAwOwog
ICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCAoaW50KWNvbG9yLmxlbmd0aCgpICYmIG51bURp
Z2l0cyA8IGJhc2ljTGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBoZXggPSB0b0hl
eChjb2xvcltwb3NdLnVuaWNvZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGludCBoZXggPSB0
b0hleChjb2xvcltwb3NdKTsKICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbXBvbmVudF0g
PSAoY29sb3JzW2NvbXBvbmVudF0gPDwgNCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChoZXgg
PiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY29tcG9uZW50XSArPSBoZXg7
CkluZGV4OiBkb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDE0MjE2KQorKysgZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM4Niw3ICsyMzg2LDcgQEAKIAogYm9vbCBEb2N1bWVudDo6aXNWYWxpZE5hbWUoY29uc3QgU3Ry
aW5nICZuYW1lKQogewotICAgIGNvbnN0IFVDaGFyICpzID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVQ2hhciAqPihuYW1lLnVuaWNvZGUoKSk7CisgICAgY29uc3QgVUNoYXIqIHMgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obmFtZS5jaGFyYWN0ZXJzKCkpOwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7CiAKICAgICBpZiAobGVuZ3RoID09IDApCkBAIC0yNDE5
LDcgKzI0MTksNyBAQAogICAgIGJvb2wgc2F3Q29sb24gPSBmYWxzZTsKICAgICBpbnQgY29sb25Q
b3MgPSAwOwogCi0gICAgY29uc3QgVUNoYXIqIHMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVD
aGFyKj4ocXVhbGlmaWVkTmFtZS51bmljb2RlKCkpOworICAgIGNvbnN0IFVDaGFyKiBzID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHF1YWxpZmllZE5hbWUuY2hhcmFjdGVycygpKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOykgewogICAgICAgICBVQ2hhcjMy
IGM7CiAgICAgICAgIFUxNl9ORVhUKHMsIGksIGxlbmd0aCwgYykKQEAgLTI0ODMsNyArMjQ4Myw3
IEBACiAgICAgbV9kZWNvZGVyID0gZGVjb2RlcjsKIH0KIAotUUNoYXIgRG9jdW1lbnQ6OmJhY2tz
bGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25zdAorVUNoYXIgRG9jdW1lbnQ6OmJhY2tzbGFzaEFz
Q3VycmVuY3lTeW1ib2woKSBjb25zdAogewogICAgIGlmICghbV9kZWNvZGVyKQogICAgICAgICBy
ZXR1cm4gJ1xcJzsKQEAgLTMwNzgsNyArMzA3OCw4IEBACiAKIFZlY3RvcjxTdHJpbmc+IERvY3Vt
ZW50Ojpmb3JtRWxlbWVudHNTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gc3Rh
dGVWZWN0b3IobV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuc2l6ZSgpICogMyk7CisgICAgVmVjdG9y
PFN0cmluZz4gc3RhdGVWZWN0b3I7CisgICAgc3RhdGVWZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KG1f
Zm9ybUVsZW1lbnRzV2l0aFN0YXRlLnNpemUoKSAqIDMpOwogICAgIHR5cGVkZWYgSGFzaFNldDxI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50Kj46OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIEl0
ZXJhdG9yIGVuZCA9IG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLmVuZCgpOwogICAgIGZvciAoSXRl
cmF0b3IgaXQgPSBtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKSW5kZXg6IGRvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiAxNDIxNikKKysrIGRvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
ODUsNyArNjg1LDcgQEAKICAgICB2b2lkIHNldERlY29kZXIoRGVjb2RlciopOwogICAgIERlY29k
ZXIqIGRlY29kZXIoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXIuZ2V0KCk7IH0KIAotICAgIFFD
aGFyIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25zdDsKKyAgICBVQ2hhciBiYWNrc2xh
c2hBc0N1cnJlbmN5U3ltYm9sKCkgY29uc3Q7CiAKICNpZiBfX0FQUExFX18KICAgICB2b2lkIHNl
dERhc2hib2FyZFJlZ2lvbnNEaXJ0eShib29sIGYpIHsgbV9kYXNoYm9hcmRSZWdpb25zRGlydHkg
PSBmOyB9CkluZGV4OiBkb20veG1sX3Rva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS94bWxf
dG9rZW5pemVyLmgJKHJldmlzaW9uIDE0MjE2KQorKysgZG9tL3htbF90b2tlbml6ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQAogCiBUb2tlbml6ZXIqIG5ld1hNTFRva2VuaXpl
cihEb2N1bWVudCosIEZyYW1lVmlldyogPSAwKTsKICNpZiBLSFRNTF9YU0xUCi12b2lkKiB4bWxE
b2NQdHJGb3JTdHJpbmcoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc291cmNlLCBjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nJiBVUkwgPSBEZXByZWNhdGVkU3RyaW5nKCkpOwordm9pZCogeG1sRG9jUHRy
Rm9yU3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyYgVVJMKTsKIHZvaWQgc2V0TG9hZGVyRm9yTGliWE1MQ2FsbGJhY2tzKERvY0xvYWRl
ciopOwogI2VuZGlmCiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJzZUF0dHJpYnV0ZXMoY29u
c3QgU3RyaW5nJiwgYm9vbCYgYXR0cnNPSyk7CkluZGV4OiBkb20vQ2hhcmFjdGVyRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZG9tL0NoYXJhY3RlckRhdGEuY3BwCShyZXZpc2lvbiAxNDIxNikKKysr
IGRvbS9DaGFyYWN0ZXJEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAog
Q2hhcmFjdGVyRGF0YTo6Q2hhcmFjdGVyRGF0YShEb2N1bWVudCAqZG9jLCBjb25zdCBTdHJpbmcg
Jl90ZXh0KQogICAgIDogRXZlbnRUYXJnZXROb2RlKGRvYykKIHsKLSAgICBzdHIgPSBfdGV4dC5p
bXBsKCkgPyBfdGV4dC5pbXBsKCkgOiBuZXcgU3RyaW5nSW1wbCgoUUNoYXIqKTAsIDApOworICAg
IHN0ciA9IF90ZXh0LmltcGwoKSA/IF90ZXh0LmltcGwoKSA6IG5ldyBTdHJpbmdJbXBsKHN0YXRp
Y19jYXN0PFVDaGFyKj4oMCksIDApOwogICAgIHN0ci0+cmVmKCk7CiB9CiAKSW5kZXg6IGVkaXRp
bmcvVGV4dEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9UZXh0SXRlcmF0b3IuaAko
cmV2aXNpb24gMTQyMTYpCisrKyBlZGl0aW5nL1RleHRJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOSArMzUsOSBAQAogLy8gRklYTUU6IENhbid0IHJl
YWxseSBhbnN3ZXIgdGhpcyBxdWVzdGlvbiBjb3JyZWN0bHkgd2l0aG91dCBrbm93aW5nIHRoZSB3
aGl0ZS1zcGFjZSBtb2RlLgogLy8gRklYTUU6IE1vdmUgdGhpcyBhbG9uZyB3aXRoIHRoZSB3aGl0
ZS1zcGFjZSBwb3NpdGlvbiBmdW5jdGlvbnMgYWJvdmUKIC8vIHNvbWV3aGVyZSBlbHNlIGluIHRo
ZSBlZGl0aW5nIGRpcmVjdG9yeS4gSXQgZG9lc24ndCBiZWxvbmcgaGVyZS4KLWlubGluZSBib29s
IGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKGNvbnN0IFFDaGFyJiBjKQoraW5saW5lIGJvb2wgaXND
b2xsYXBzaWJsZVdoaXRlc3BhY2UoVUNoYXIgYykKIHsKLSAgICBzd2l0Y2ggKGMudW5pY29kZSgp
KSB7CisgICAgc3dpdGNoIChjKSB7CiAgICAgICAgIGNhc2UgJyAnOgogICAgICAgICBjYXNlICdc
bic6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICB2b2lk
IGFkdmFuY2UoKTsKICAgICAKICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0
TGVuZ3RoOyB9Ci0gICAgY29uc3QgUUNoYXIgKmNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBt
X3RleHRDaGFyYWN0ZXJzOyB9CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7
IHJldHVybiBtX3RleHRDaGFyYWN0ZXJzOyB9CiAgICAgCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4g
cmFuZ2UoKSBjb25zdDsKICAgICAgCkBAIC03OCw3ICs3OCw3IEBACiAgICAgYm9vbCBoYW5kbGVS
ZXBsYWNlZEVsZW1lbnQoKTsKICAgICBib29sIGhhbmRsZU5vblRleHROb2RlKCk7CiAgICAgdm9p
ZCBoYW5kbGVUZXh0Qm94KCk7Ci0gICAgdm9pZCBlbWl0Q2hhcmFjdGVyKFFDaGFyLCBOb2RlICp0
ZXh0Tm9kZSwgTm9kZSAqb2Zmc2V0QmFzZU5vZGUsIGludCB0ZXh0U3RhcnRPZmZzZXQsIGludCB0
ZXh0RW5kT2Zmc2V0KTsKKyAgICB2b2lkIGVtaXRDaGFyYWN0ZXIoVUNoYXIsIE5vZGUgKnRleHRO
b2RlLCBOb2RlICpvZmZzZXRCYXNlTm9kZSwgaW50IHRleHRTdGFydE9mZnNldCwgaW50IHRleHRF
bmRPZmZzZXQpOwogICAgIAogICAgIC8vIEN1cnJlbnQgcG9zaXRpb24sIG5vdCBuZWNlc3Nhcmls
eSBvZiB0aGUgdGV4dCBiZWluZyByZXR1cm5lZCwgYnV0IHBvc2l0aW9uCiAgICAgLy8gYXMgd2Ug
d2FsayB0aHJvdWdoIHRoZSBET00gdHJlZS4KQEAgLTk3LDcgKzk3LDcgQEAKICAgICBtdXRhYmxl
IE5vZGUgKm1fcG9zaXRpb25PZmZzZXRCYXNlTm9kZTsKICAgICBtdXRhYmxlIGludCBtX3Bvc2l0
aW9uU3RhcnRPZmZzZXQ7CiAgICAgbXV0YWJsZSBpbnQgbV9wb3NpdGlvbkVuZE9mZnNldDsKLSAg
ICBjb25zdCBRQ2hhciAqbV90ZXh0Q2hhcmFjdGVyczsKKyAgICBjb25zdCBVQ2hhciogbV90ZXh0
Q2hhcmFjdGVyczsKICAgICBpbnQgbV90ZXh0TGVuZ3RoOwogICAgIAogICAgIC8vIFVzZWQgd2hl
biB0aGVyZSBpcyBzdGlsbCBzb21lIHBlbmRpbmcgdGV4dCBmcm9tIHRoZSBjdXJyZW50IG5vZGU7
IHdoZW4gdGhlc2UKQEAgLTEwOCwxMCArMTA4LDEwIEBACiAgICAgLy8gVXNlZCB0byBkbyB0aGUg
d2hpdGVzcGFjZSBjb2xsYXBzaW5nIGxvZ2ljLgogICAgIE5vZGUgKm1fbGFzdFRleHROb2RlOyAg
ICAKICAgICBib29sIG1fbGFzdFRleHROb2RlRW5kZWRXaXRoQ29sbGFwc2VkU3BhY2U7Ci0gICAg
UUNoYXIgbV9sYXN0Q2hhcmFjdGVyOworICAgIFVDaGFyIG1fbGFzdENoYXJhY3RlcjsKICAgICAK
ICAgICAvLyBVc2VkIGZvciB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdGhhdCBhcmVuJ3QgaW4gdGhl
IERPTSwgc28gd2UgY2FuIHBvaW50IGF0IHRoZW0uCi0gICAgUUNoYXIgbV9zaW5nbGVDaGFyYWN0
ZXJCdWZmZXI7CisgICAgVUNoYXIgbV9zaW5nbGVDaGFyYWN0ZXJCdWZmZXI7CiAgICAgCiAgICAg
Ly8gVXNlZCB3aGVuIHRleHQgYm94ZXMgYXJlIG91dCBvZiBvcmRlciAoSGVicmV3L0FyYWJpYyB3
LyBlbWJlZGVkIExUUiB0ZXh0KQogICAgIFZlY3RvcjxJbmxpbmVUZXh0Qm94Kj4gbV9zb3J0ZWRU
ZXh0Qm94ZXM7CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICB2b2lkIGFkdmFuY2UoKTsKICAgICAK
ICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0TGVuZ3RoOyB9Ci0gICAgY29u
c3QgUUNoYXIgKmNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3RleHRDaGFyYWN0ZXJzOyB9
CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3RleHRDaGFy
YWN0ZXJzOyB9CiAgICAgCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UoKSBjb25zdDsKICAg
ICAgICAgCkBAIC0xNDAsMzMgKzE0MCwzMyBAQAogICAgIGJvb2wgaGFuZGxlVGV4dE5vZGUoKTsK
ICAgICBib29sIGhhbmRsZVJlcGxhY2VkRWxlbWVudCgpOwogICAgIGJvb2wgaGFuZGxlTm9uVGV4
dE5vZGUoKTsKLSAgICB2b2lkIGVtaXRDaGFyYWN0ZXIoUUNoYXIsIE5vZGUgKk5vZGUsIGludCBz
dGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7CisgICAgdm9pZCBlbWl0Q2hhcmFjdGVyKFVDaGFy
LCBOb2RlICpOb2RlLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpOwogICAgIHZvaWQg
ZW1pdE5ld2xpbmUoKTsKICAgICAKICAgICAvLyBDdXJyZW50IHBvc2l0aW9uLCBub3QgbmVjZXNz
YXJpbHkgb2YgdGhlIHRleHQgYmVpbmcgcmV0dXJuZWQsIGJ1dCBwb3NpdGlvbgogICAgIC8vIGFz
IHdlIHdhbGsgdGhyb3VnaCB0aGUgRE9NIHRyZWUuCi0gICAgTm9kZSAqbV9ub2RlOworICAgIE5v
ZGUqIG1fbm9kZTsKICAgICBpbnQgbV9vZmZzZXQ7CiAgICAgYm9vbCBtX2hhbmRsZWROb2RlOwog
ICAgIGJvb2wgbV9oYW5kbGVkQ2hpbGRyZW47CiAgICAgCiAgICAgLy8gRW5kIG9mIHRoZSByYW5n
ZS4KLSAgICBOb2RlICptX3N0YXJ0Tm9kZTsKKyAgICBOb2RlKiBtX3N0YXJ0Tm9kZTsKICAgICBp
bnQgbV9zdGFydE9mZnNldDsKICAgICAKICAgICAvLyBUaGUgY3VycmVudCB0ZXh0IGFuZCBpdHMg
cG9zaXRpb24sIGluIHRoZSBmb3JtIHRvIGJlIHJldHVybmVkIGZyb20gdGhlIGl0ZXJhdG9yLgot
ICAgIE5vZGUgKm1fcG9zaXRpb25Ob2RlOworICAgIE5vZGUqIG1fcG9zaXRpb25Ob2RlOwogICAg
IGludCBtX3Bvc2l0aW9uU3RhcnRPZmZzZXQ7CiAgICAgaW50IG1fcG9zaXRpb25FbmRPZmZzZXQ7
Ci0gICAgY29uc3QgUUNoYXIgKm1fdGV4dENoYXJhY3RlcnM7CisgICAgY29uc3QgVUNoYXIqIG1f
dGV4dENoYXJhY3RlcnM7CiAgICAgaW50IG1fdGV4dExlbmd0aDsKIAogICAgIC8vIFVzZWQgdG8g
ZG8gdGhlIHdoaXRlc3BhY2UgbG9naWMuCi0gICAgTm9kZSAqbV9sYXN0VGV4dE5vZGU7ICAgIAot
ICAgIFFDaGFyIG1fbGFzdENoYXJhY3RlcjsKKyAgICBOb2RlKiBtX2xhc3RUZXh0Tm9kZTsgICAg
CisgICAgVUNoYXIgbV9sYXN0Q2hhcmFjdGVyOwogICAgIAogICAgIC8vIFVzZWQgZm9yIHdoaXRl
c3BhY2UgY2hhcmFjdGVycyB0aGF0IGFyZW4ndCBpbiB0aGUgRE9NLCBzbyB3ZSBjYW4gcG9pbnQg
YXQgdGhlbS4KLSAgICBRQ2hhciBtX3NpbmdsZUNoYXJhY3RlckJ1ZmZlcjsKKyAgICBVQ2hhciBt
X3NpbmdsZUNoYXJhY3RlckJ1ZmZlcjsKIH07CiAKIC8vIEJ1aWxkcyBvbiB0aGUgdGV4dCBpdGVy
YXRvciwgYWRkaW5nIGEgY2hhcmFjdGVyIHBvc2l0aW9uIHNvIHdlIGNhbiB3YWxrIG9uZQpAQCAt
MTgyLDcgKzE4Miw3IEBACiAgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dEl0
ZXJhdG9yLmF0RW5kKCk7IH0KICAgICAKICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0SXRlcmF0b3IubGVuZ3RoKCkgLSBtX3J1bk9mZnNldDsgfQotICAgIGNvbnN0IFFDaGFy
ICpjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0SXRlcmF0b3IuY2hhcmFjdGVycygp
ICsgbV9ydW5PZmZzZXQ7IH0KKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dEl0ZXJhdG9yLmNoYXJhY3RlcnMoKSArIG1fcnVuT2Zmc2V0OyB9CiAgICAg
RGVwcmVjYXRlZFN0cmluZyBzdHJpbmcoaW50IG51bUNoYXJzKTsKICAgICAKICAgICBpbnQgY2hh
cmFjdGVyT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KQEAgLTIwNywxNCArMjA3
LDE0IEBACiAgICAgdm9pZCBhZHZhbmNlKCk7CiAgICAgCiAgICAgaW50IGxlbmd0aCgpIGNvbnN0
OwotICAgIGNvbnN0IFFDaGFyICpjaGFyYWN0ZXJzKCkgY29uc3Q7CisgICAgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMoKSBjb25zdDsKICAgICAKICAgICAvLyBSYW5nZSBvZiB0aGUgdGV4dCB3ZSdy
ZSBjdXJyZW50bHkgcmV0dXJuaW5nCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UoKSBjb25z
dCB7IHJldHVybiBtX3JhbmdlOyB9CiAKIHByaXZhdGU6CiAgICAgLy8gdGV4dCBmcm9tIHRoZSBw
cmV2aW91cyBjaHVuayBmcm9tIHRoZSB0ZXh0SXRlcmF0b3IKLSAgICBjb25zdCBRQ2hhciAqbV9w
cmV2aW91c1RleHQ7CisgICAgY29uc3QgVUNoYXIqIG1fcHJldmlvdXNUZXh0OwogICAgIGludCBt
X3ByZXZpb3VzTGVuZ3RoOwogCiAgICAgLy8gbWFueSBjaHVua3MgZnJvbSB0ZXh0SXRlcmF0b3Ig
Y29uY2F0ZW5hdGVkCkluZGV4OiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAkocmV2aXNpb24gMTQyMTYpCisr
KyBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTEg
KzgwLDYgQEAKICAgICByZXR1cm4gcG9zOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNOQlNQ
KGNvbnN0IFFDaGFyICZjKQotewotICAgIHJldHVybiBjLnVuaWNvZGUoKSA9PSAweGEwOwotfQot
CiB2b2lkIEluc2VydFRleHRDb21tYW5kOjppbnB1dChjb25zdCBTdHJpbmcgJnRleHQsIGJvb2wg
c2VsZWN0SW5zZXJ0ZWRUZXh0KQogewogICAgIGFzc2VydCh0ZXh0LmZpbmQoJ1xuJykgPT0gLTEp
OwpJbmRleDogZWRpdGluZy9IVE1MSW50ZXJjaGFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRp
bmcvSFRNTEludGVyY2hhbmdlLmNwcAkocmV2aXNpb24gMTQyMTYpCisrKyBlZGl0aW5nL0hUTUxJ
bnRlcmNoYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDEwICs2MSwxMCBAQAogICAgIHVu
c2lnbmVkIGludCBjb25zdW1lZCA9IDA7CiAgICAgd2hpbGUgKGkgPCBpbi5sZW5ndGgoKSkgewog
ICAgICAgICBjb25zdW1lZCA9IDE7Ci0gICAgICAgIGlmIChpc0NvbGxhcHNpYmxlV2hpdGVzcGFj
ZShpbltpXSkpIHsKKyAgICAgICAgaWYgKGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKGluW2ldLnVu
aWNvZGUoKSkpIHsKICAgICAgICAgICAgIC8vIGNvdW50IG51bWJlciBvZiBhZGpvaW5pbmcgc3Bh
Y2VzCiAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaiA9IGkgKyAxOwotICAgICAgICAgICAgd2hp
bGUgKGogPCBpbi5sZW5ndGgoKSAmJiBpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShpbltqXSkpCisg
ICAgICAgICAgICB3aGlsZSAoaiA8IGluLmxlbmd0aCgpICYmIGlzQ29sbGFwc2libGVXaGl0ZXNw
YWNlKGluW2pdLnVuaWNvZGUoKSkpCiAgICAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICAg
dW5zaWduZWQgaW50IGNvdW50ID0gaiAtIGk7CiAgICAgICAgICAgICBjb25zdW1lZCA9IGNvdW50
OwpJbmRleDogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE0MjE2KQor
KysgZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYxOSwxNCArNjE5LDE0IEBACiAgICAgICAgIGFzc2VydCh2aXNpYmxlUG9zLmlzTm90TnVsbCgp
KTsKICAgICAgICAgYWRkTGVhZGluZ1NwYWNlID0gc3RhcnRQb3MubGVhZGluZ1doaXRlc3BhY2VQ
b3NpdGlvbihWUF9ERUZBVUxUX0FGRklOSVRZLCB0cnVlKS5pc051bGwoKSAmJiAhaXNTdGFydE9m
UGFyYWdyYXBoKHZpc2libGVQb3MpOwogICAgICAgICBpZiAoYWRkTGVhZGluZ1NwYWNlKSB7Ci0g
ICAgICAgICAgICBRQ2hhciBwcmV2aW91c0NoYXIgPSB2aXNpYmxlUG9zLnByZXZpb3VzKCkuY2hh
cmFjdGVyQWZ0ZXIoKTsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c0NoYXIudW5pY29kZSgpKQor
ICAgICAgICAgICAgVUNoYXIgcHJldmlvdXNDaGFyID0gdmlzaWJsZVBvcy5wcmV2aW91cygpLmNo
YXJhY3RlckFmdGVyKCk7CisgICAgICAgICAgICBpZiAocHJldmlvdXNDaGFyKQogICAgICAgICAg
ICAgICAgIGFkZExlYWRpbmdTcGFjZSA9ICFmcmFtZS0+aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VF
eGVtcHQocHJldmlvdXNDaGFyLCB0cnVlKTsKICAgICAgICAgfQogICAgICAgICBhZGRUcmFpbGlu
Z1NwYWNlID0gc3RhcnRQb3MudHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9B
RkZJTklUWSwgdHJ1ZSkuaXNOdWxsKCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBvcyk7
CiAgICAgICAgIGlmIChhZGRUcmFpbGluZ1NwYWNlKSB7Ci0gICAgICAgICAgICBRQ2hhciB0aGlz
Q2hhciA9IHZpc2libGVQb3MuY2hhcmFjdGVyQWZ0ZXIoKTsKLSAgICAgICAgICAgIGlmICh0aGlz
Q2hhci51bmljb2RlKCkpCisgICAgICAgICAgICBVQ2hhciB0aGlzQ2hhciA9IHZpc2libGVQb3Mu
Y2hhcmFjdGVyQWZ0ZXIoKTsKKyAgICAgICAgICAgIGlmICh0aGlzQ2hhcikKICAgICAgICAgICAg
ICAgICBhZGRUcmFpbGluZ1NwYWNlID0gIWZyYW1lLT5pc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4
ZW1wdCh0aGlzQ2hhciwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogZWRpdGluZy9t
YXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTQy
MTYpCisrKyBlZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcg
QEAKIAogICAgIHVuc2lnbmVkIGxlbiA9IGluLmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICBzd2l0Y2ggKGluW2ldLmxhdGluMSgpKSB7
CisgICAgICAgIHN3aXRjaCAoaW5baV0udW5pY29kZSgpKSB7CiAgICAgICAgICAgICBjYXNlICcm
JzoKICAgICAgICAgICAgICAgICBzICs9ICImYW1wOyI7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkluZGV4OiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcv
dmlzaWJsZV91bml0cy5jcHAJKHJldmlzaW9uIDE0MjE2KQorKysgZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnko
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCB1bnNpZ25lZCAoKnNlYXJjaEZ1bmN0aW9uKShjb25z
dCBRQ2hhciAqLCB1bnNpZ25lZCkpCitzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91
bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCB1bnNpZ25lZCAoKnNlYXJjaEZ1bmN0aW9u
KShjb25zdCBVQ2hhciAqLCB1bnNpZ25lZCkpCiB7CiAgICAgUG9zaXRpb24gcG9zID0gYy5kZWVw
RXF1aXZhbGVudCgpOwogICAgIE5vZGUgKm4gPSBwb3Mubm9kZSgpOwpAQCAtNzIsOCArNzIsOCBA
QAogICAgIHVuc2lnbmVkIG5leHQgPSAwOwogICAgIHdoaWxlICghaXQuYXRFbmQoKSAmJiBpdC5s
ZW5ndGgoKSA+IDApIHsKICAgICAgICAgLy8gaXRlcmF0ZSB0byBnZXQgY2h1bmtzIHVudGlsIHRo
ZSBzZWFyY2hGdW5jdGlvbiByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUuCi0gICAgICAgIHN0cmlu
Zy5wcmVwZW5kKGl0LmNoYXJhY3RlcnMoKSwgaXQubGVuZ3RoKCkpOwotICAgICAgICBuZXh0ID0g
c2VhcmNoRnVuY3Rpb24oc3RyaW5nLnVuaWNvZGUoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAg
ICAgc3RyaW5nLnByZXBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGl0LmNoYXJh
Y3RlcnMoKSksIGl0Lmxlbmd0aCgpKTsKKyAgICAgICAgbmV4dCA9IHNlYXJjaEZ1bmN0aW9uKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdHJpbmcudW5pY29kZSgpKSwgc3RyaW5nLmxl
bmd0aCgpKTsKICAgICAgICAgaWYgKG5leHQgIT0gMCkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBpdC5hZHZhbmNlKCk7CkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgIGNoYXJzWzBdID0g
J1gnOwogICAgICAgICBjaGFyc1sxXSA9ICcgJzsKICAgICAgICAgc3RyaW5nLnByZXBlbmQoY2hh
cnMsIDIpOwotICAgICAgICB1bnNpZ25lZCBwYXN0SW1hZ2UgPSBzZWFyY2hGdW5jdGlvbihzdHJp
bmcudW5pY29kZSgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICB1bnNpZ25lZCBwYXN0SW1h
Z2UgPSBzZWFyY2hGdW5jdGlvbihyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyaW5n
LnVuaWNvZGUoKSksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UoaXQucmFuZ2UoKSk7CiAgICAgICAgIGlmIChwYXN0SW1hZ2UgPT0gMCkKICAgICAgICAgICAg
IHBvcyA9IFBvc2l0aW9uKHJhbmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24pLCByYW5nZS0+
c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSk7CkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSk7CiB9CiAKLXN0YXRpYyBWaXNpYmxlUG9z
aXRpb24gbmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYywgdW5zaWduZWQgKCpz
ZWFyY2hGdW5jdGlvbikoY29uc3QgUUNoYXIgKiwgdW5zaWduZWQpKQorc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBuZXh0Qm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCB1bnNpZ25lZCAo
KnNlYXJjaEZ1bmN0aW9uKShjb25zdCBVQ2hhciAqLCB1bnNpZ25lZCkpCiB7CiAgICAgUG9zaXRp
b24gcG9zID0gYy5kZWVwRXF1aXZhbGVudCgpOwogICAgIE5vZGUgKm4gPSBwb3Mubm9kZSgpOwpA
QCAtMTQzLDggKzE0Myw4IEBACiAgICAgd2hpbGUgKCFpdC5hdEVuZCgpICYmIGl0Lmxlbmd0aCgp
ID4gMCkgewogICAgICAgICAvLyBLZWVwIGFza2luZyB0aGUgaXRlcmF0b3IgZm9yIGNodW5rcyB1
bnRpbCB0aGUgc2VhcmNoIGZ1bmN0aW9uCiAgICAgICAgIC8vIHJldHVybnMgYW4gZW5kIHZhbHVl
IG5vdCBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgcGFzc2VkIHRvIGl0LgotICAg
ICAgICBzdHJpbmcuYXBwZW5kKGl0LmNoYXJhY3RlcnMoKSwgaXQubGVuZ3RoKCkpOwotICAgICAg
ICBuZXh0ID0gc2VhcmNoRnVuY3Rpb24oc3RyaW5nLnVuaWNvZGUoKSwgc3RyaW5nLmxlbmd0aCgp
KTsKKyAgICAgICAgc3RyaW5nLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4o
aXQuY2hhcmFjdGVycygpKSwgaXQubGVuZ3RoKCkpOworICAgICAgICBuZXh0ID0gc2VhcmNoRnVu
Y3Rpb24ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0cmluZy51bmljb2RlKCkpLCBz
dHJpbmcubGVuZ3RoKCkpOwogICAgICAgICBpZiAobmV4dCAhPSBzdHJpbmcubGVuZ3RoKCkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgaXQuYWR2YW5jZSgpOwpAQCAtMTY0LDcgKzE2NCw3
IEBACiAgICAgICAgIGNoYXJzWzBdID0gJyAnOwogICAgICAgICBjaGFyc1sxXSA9ICdYJzsKICAg
ICAgICAgc3RyaW5nLmFwcGVuZChjaGFycywgMik7Ci0gICAgICAgIHVuc2lnbmVkIHBhc3RJbWFn
ZSA9IHNlYXJjaEZ1bmN0aW9uKHN0cmluZy51bmljb2RlKCksIHN0cmluZy5sZW5ndGgoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIHBhc3RJbWFnZSA9IHNlYXJjaEZ1bmN0aW9uKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVUNoYXIqPihzdHJpbmcudW5pY29kZSgpKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAg
ICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZShpdC5yYW5nZSgpKTsKICAgICAgICAgaW50IGV4Y2Vw
dGlvbiA9IDA7CiAgICAgICAgIGlmIChuZXh0ICE9IHBhc3RJbWFnZSkKQEAgLTE4NCw3ICsxODQs
NyBAQAogCiAvLyAtLS0tLS0tLS0KIAotc3RhdGljIHVuc2lnbmVkIHN0YXJ0V29yZEJvdW5kYXJ5
KGNvbnN0IFFDaGFyICpjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgdW5zaWdu
ZWQgc3RhcnRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCkKIHsKICAgICBpbnQgc3RhcnQsIGVuZDsKICAgICBmaW5kV29yZEJvdW5kYXJ5KGNoYXJh
Y3RlcnMsIGxlbmd0aCwgbGVuZ3RoLCAmc3RhcnQsICZlbmQpOwpAQCAtMjA2LDcgKzIwNiw3IEBA
CiAgICAgcmV0dXJuIHByZXZpb3VzQm91bmRhcnkocCwgc3RhcnRXb3JkQm91bmRhcnkpOwogfQog
Ci1zdGF0aWMgdW5zaWduZWQgZW5kV29yZEJvdW5kYXJ5KGNvbnN0IFFDaGFyICpjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgdW5zaWduZWQgZW5kV29yZEJvdW5kYXJ5KGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaW50IHN0YXJ0LCBl
bmQ7CiAgICAgZmluZFdvcmRCb3VuZGFyeShjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsICZzdGFydCwg
JmVuZCk7CkBAIC0yMzQsNyArMjM0LDcgQEAKICAgICByZXR1cm4gbmV4dEJvdW5kYXJ5KHAsIGVu
ZFdvcmRCb3VuZGFyeSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBwcmV2aW91c1dvcmRQb3NpdGlv
bkJvdW5kYXJ5KGNvbnN0IFFDaGFyICpjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0
aWMgdW5zaWduZWQgcHJldmlvdXNXb3JkUG9zaXRpb25Cb3VuZGFyeShjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIHJldHVybiBmaW5kTmV4dFdvcmRGcm9t
SW5kZXgoY2hhcmFjdGVycywgbGVuZ3RoLCBsZW5ndGgsIGZhbHNlKTsKIH0KQEAgLTI0NCw3ICsy
NDQsNyBAQAogICAgIHJldHVybiBwcmV2aW91c0JvdW5kYXJ5KGMsIHByZXZpb3VzV29yZFBvc2l0
aW9uQm91bmRhcnkpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbmV4dFdvcmRQb3NpdGlvbkJvdW5k
YXJ5KGNvbnN0IFFDaGFyICpjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgdW5z
aWduZWQgbmV4dFdvcmRQb3NpdGlvbkJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIGZpbmROZXh0V29yZEZyb21JbmRleChjaGFy
YWN0ZXJzLCBsZW5ndGgsIDAsIHRydWUpOwogfQpAQCAtNDkwLDcgKzQ5MCw3IEBACiAKIC8vIC0t
LS0tLS0tLQogCi1zdGF0aWMgdW5zaWduZWQgc3RhcnRTZW50ZW5jZUJvdW5kYXJ5KGNvbnN0IFFD
aGFyICpjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgdW5zaWduZWQgc3RhcnRT
ZW50ZW5jZUJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
CiB7CiAgICAgaW50IHN0YXJ0LCBlbmQ7CiAgICAgZmluZFNlbnRlbmNlQm91bmRhcnkoY2hhcmFj
dGVycywgbGVuZ3RoLCBsZW5ndGgsICZzdGFydCwgJmVuZCk7CkBAIC01MDIsNyArNTAyLDcgQEAK
ICAgICByZXR1cm4gcHJldmlvdXNCb3VuZGFyeShjLCBzdGFydFNlbnRlbmNlQm91bmRhcnkpOwog
fQogCi1zdGF0aWMgdW5zaWduZWQgZW5kU2VudGVuY2VCb3VuZGFyeShjb25zdCBRQ2hhciAqY2hh
cmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIHVuc2lnbmVkIGVuZFNlbnRlbmNlQm91
bmRhcnkoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBp
bnQgc3RhcnQsIGVuZDsKICAgICBmaW5kU2VudGVuY2VCb3VuZGFyeShjaGFyYWN0ZXJzLCBsZW5n
dGgsIDAsICZzdGFydCwgJmVuZCk7CkBAIC01MTQsNyArNTE0LDcgQEAKICAgICByZXR1cm4gbmV4
dEJvdW5kYXJ5KGMsIGVuZFNlbnRlbmNlQm91bmRhcnkpOwogfQogCi1zdGF0aWMgdW5zaWduZWQg
cHJldmlvdXNTZW50ZW5jZVBvc2l0aW9uQm91bmRhcnkoY29uc3QgUUNoYXIgKmNoYXJhY3RlcnMs
IHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRpYyB1bnNpZ25lZCBwcmV2aW91c1NlbnRlbmNlUG9zaXRp
b25Cb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIHJldHVybiBmaW5kTmV4dFNlbnRlbmNlRnJvbUluZGV4KGNoYXJhY3RlcnMsIGxlbmd0aCwg
bGVuZ3RoLCBmYWxzZSk7CiB9CkBAIC01MjQsNyArNTI0LDcgQEAKICAgICByZXR1cm4gcHJldmlv
dXNCb3VuZGFyeShjLCBwcmV2aW91c1NlbnRlbmNlUG9zaXRpb25Cb3VuZGFyeSk7CiB9CiAKLXN0
YXRpYyB1bnNpZ25lZCBuZXh0U2VudGVuY2VQb3NpdGlvbkJvdW5kYXJ5KGNvbnN0IFFDaGFyICpj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgdW5zaWduZWQgbmV4dFNlbnRlbmNl
UG9zaXRpb25Cb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIHJldHVybiBmaW5kTmV4dFNlbnRlbmNlRnJvbUluZGV4KGNoYXJhY3RlcnMsIGxl
bmd0aCwgMCwgdHJ1ZSk7CiB9CkBAIC01NjMsNyArNTYzLDcgQEAKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBpZiAoci0+aXNUZXh0KCkpIHsKICAgICAgICAgICAgIGlmIChzdHlsZS0+cHJl
c2VydmVOZXdsaW5lKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBRQ2hhciogdGV4dCA9IHN0
YXRpY19jYXN0PFJlbmRlclRleHQqPihyKS0+dGV4dCgpOworICAgICAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHIpLT50ZXh0KCk7CiAgICAg
ICAgICAgICAgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ociktPmxlbmd0aCgp
OwogICAgICAgICAgICAgICAgIGludCBvID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgIGlmIChu
ID09IHN0YXJ0Tm9kZSAmJiBvIDwgaSkKQEAgLTYyMyw3ICs2MjMsNyBAQAogICAgICAgICBpZiAo
ci0+aXNUZXh0KCkgJiYgci0+Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpID4gMCkgewogICAgICAg
ICAgICAgaW50IGxlbmd0aCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ociktPmxlbmd0aCgp
OwogICAgICAgICAgICAgaWYgKHN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IFFDaGFyKiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihyKS0+
dGV4dCgpOworICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiB0ZXh0ID0gc3RhdGljX2Nhc3Q8
UmVuZGVyVGV4dCAqPihyKS0+dGV4dCgpOwogICAgICAgICAgICAgICAgIGludCBvID0gbiA9PSBz
dGFydE5vZGUgPyBvZmZzZXQgOiAwOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBvOyBp
IDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0W2ldID09ICdcbicp
CkluZGV4OiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwCShyZXZpc2lvbiAxNDIxNikKKysrIGVkaXRpbmcvVmlzaWJs
ZVBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDIwICsxOTgsMTggQEAKICAgICBy
ZXR1cm4gbm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkgPyAoaW50KXN0YXRpY19jYXN0PGNvbnN0
IENoYXJhY3RlckRhdGEgKj4obm9kZSktPmxlbmd0aCgpIDogKGludClub2RlLT5jaGlsZE5vZGVD
b3VudCgpOwogfQogCi1RQ2hhciBWaXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckFmdGVyKCkgY29u
c3QKK1VDaGFyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0ZXIoKSBjb25zdAogewogICAg
IC8vIFdlIGNhbm9uaWNhbGl6ZSB0byB0aGUgZmlyc3Qgb2YgdHdvIGVxdWl2YWxlbnQgY2FuZGlk
YXRlcywgYnV0IHRoZSBzZWNvbmQgb2YgdGhlIHR3byBjYW5kaWRhdGVzCiAgICAgLy8gaXMgdGhl
IG9uZSB0aGF0IHdpbGwgYmUgaW5zaWRlIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgY2hh
cmFjdGVyIGFmdGVyIHRoaXMgdmlzaWJsZSBwb3NpdGlvbi4KICAgICBQb3NpdGlvbiBwb3MgPSBt
X2RlZXBQb3NpdGlvbi5kb3duc3RyZWFtKCk7Ci0gICAgTm9kZSAqbm9kZSA9IHBvcy5ub2RlKCk7
Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgcmV0dXJu
IFFDaGFyKCk7Ci0gICAgfQotICAgIFRleHQgKnRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCAq
Pihwb3Mubm9kZSgpKTsKKyAgICBOb2RlKiBub2RlID0gcG9zLm5vZGUoKTsKKyAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgVGV4dCog
dGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zLm5vZGUoKSk7CiAgICAgaW50IG9mZnNl
dCA9IHBvcy5vZmZzZXQoKTsKLSAgICBpZiAoKHVuc2lnbmVkKW9mZnNldCA+PSB0ZXh0Tm9kZS0+
bGVuZ3RoKCkpIHsKLSAgICAgICAgcmV0dXJuIFFDaGFyKCk7Ci0gICAgfQorICAgIGlmICgodW5z
aWduZWQpb2Zmc2V0ID49IHRleHROb2RlLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgcmV0dXJuIHRleHROb2RlLT5kYXRhKClbb2Zmc2V0XTsKIH0KIApJbmRleDogZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMTQyMTYpCisrKyBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDcgKzQzLDcgQEAKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotY29u
c3QgdW5zaWduZWQgc2hvcnQgbm9uQnJlYWtpbmdTcGFjZSA9IDB4QTA7Citjb25zdCBVQ2hhciBu
b25CcmVha2luZ1NwYWNlID0gMHhBMDsKIAogLy8gQnVmZmVyIHRoYXQga25vd3MgaG93IHRvIGNv
bXBhcmUgd2l0aCBhIHNlYXJjaCB0YXJnZXQuCiAvLyBLZWVwcyBlbm91Z2ggb2YgdGhlIHByZXZp
b3VzIHRleHQgdG8gYmUgYWJsZSB0byBzZWFyY2ggaW4gdGhlIGZ1dHVyZSwKQEAgLTU0LDggKzU0
LDggQEAKICAgICB+Q2lyY3VsYXJTZWFyY2hCdWZmZXIoKSB7IGZhc3RGcmVlKG1fYnVmZmVyKTsg
fQogCiAgICAgdm9pZCBjbGVhcigpIHsgbV9jdXJzb3IgPSBtX2J1ZmZlcjsgbV9idWZmZXJGdWxs
ID0gZmFsc2U7IH0KLSAgICB2b2lkIGFwcGVuZChpbnQgbGVuZ3RoLCBjb25zdCBRQ2hhciAqY2hh
cmFjdGVycyk7Ci0gICAgdm9pZCBhcHBlbmQoY29uc3QgUUNoYXImKTsKKyAgICB2b2lkIGFwcGVu
ZChpbnQgbGVuZ3RoLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycyk7CisgICAgdm9pZCBhcHBlbmQo
VUNoYXIpOwogCiAgICAgaW50IG5lZWRlZENoYXJhY3RlcnMoKSBjb25zdDsKICAgICBib29sIGlz
TWF0Y2goKSBjb25zdDsKQEAgLTY1LDE1ICs2NSwxNSBAQAogICAgIFN0cmluZyBtX3RhcmdldDsK
ICAgICBib29sIG1faXNDYXNlU2Vuc2l0aXZlOwogCi0gICAgUUNoYXIgKm1fYnVmZmVyOwotICAg
IFFDaGFyICptX2N1cnNvcjsKKyAgICBVQ2hhciogbV9idWZmZXI7CisgICAgVUNoYXIqIG1fY3Vy
c29yOwogICAgIGJvb2wgbV9idWZmZXJGdWxsOwogCiAgICAgQ2lyY3VsYXJTZWFyY2hCdWZmZXIo
Y29uc3QgQ2lyY3VsYXJTZWFyY2hCdWZmZXImKTsKICAgICBDaXJjdWxhclNlYXJjaEJ1ZmZlciAm
b3BlcmF0b3I9KGNvbnN0IENpcmN1bGFyU2VhcmNoQnVmZmVyJik7CiB9OwogCi1UZXh0SXRlcmF0
b3I6OlRleHRJdGVyYXRvcigpIDogbV9lbmRDb250YWluZXIoMCksIG1fZW5kT2Zmc2V0KDApLCBt
X3Bvc2l0aW9uTm9kZSgwKQorVGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IoKSA6IG1fZW5kQ29u
dGFpbmVyKDApLCBtX2VuZE9mZnNldCgwKSwgbV9wb3NpdGlvbk5vZGUoMCksIG1fbGFzdENoYXJh
Y3RlcigwKQogewogfQogCkBAIC0yMjksNyArMjI5LDcgQEAKICAgICAgICAgbV9wb3NpdGlvbk9m
ZnNldEJhc2VOb2RlID0gMDsKICAgICAgICAgbV9wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gcnVuU3Rh
cnQ7CiAgICAgICAgIG1fcG9zaXRpb25FbmRPZmZzZXQgPSBydW5FbmQ7Ci0gICAgICAgIG1fdGV4
dENoYXJhY3RlcnMgPSBzdHIudW5pY29kZSgpICsgcnVuU3RhcnQ7CisgICAgICAgIG1fdGV4dENo
YXJhY3RlcnMgPSBzdHIuY2hhcmFjdGVycygpICsgcnVuU3RhcnQ7CiAgICAgICAgIG1fdGV4dExl
bmd0aCA9IHJ1bkVuZCAtIHJ1blN0YXJ0OwogCiAgICAgICAgIG1fbGFzdENoYXJhY3RlciA9IHN0
cltydW5FbmQgLSAxXTsKQEAgLTI3MSw3ICsyNzEsNyBAQAogICAgICAgICBJbmxpbmVUZXh0Qm94
ICpmaXJzdFRleHRCb3ggPSByZW5kZXJlci0+Y29udGFpbnNSZXZlcnNlZFRleHQoKSA/IG1fc29y
dGVkVGV4dEJveGVzWzBdIDogcmVuZGVyZXItPmZpcnN0VGV4dEJveCgpOwogICAgICAgICBib29s
IG5lZWRTcGFjZSA9IG1fbGFzdFRleHROb2RlRW5kZWRXaXRoQ29sbGFwc2VkU3BhY2UKICAgICAg
ICAgICAgIHx8IChtX3RleHRCb3ggPT0gZmlyc3RUZXh0Qm94ICYmIHRleHRCb3hTdGFydCA9PSBy
dW5TdGFydCAmJiBydW5TdGFydCA+IDApOwotICAgICAgICBpZiAobmVlZFNwYWNlICYmICFpc0Nv
bGxhcHNpYmxlV2hpdGVzcGFjZShtX2xhc3RDaGFyYWN0ZXIpICYmIG1fbGFzdENoYXJhY3Rlci51
bmljb2RlKCkpIHsKKyAgICAgICAgaWYgKG5lZWRTcGFjZSAmJiAhaXNDb2xsYXBzaWJsZVdoaXRl
c3BhY2UobV9sYXN0Q2hhcmFjdGVyKSAmJiBtX2xhc3RDaGFyYWN0ZXIpIHsKICAgICAgICAgICAg
IGVtaXRDaGFyYWN0ZXIoJyAnLCBtX25vZGUsIDAsIHJ1blN0YXJ0LCBydW5TdGFydCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTMwNCw3ICszMDQsNyBAQAogICAgICAgICAg
ICAgICAgIG1fcG9zaXRpb25PZmZzZXRCYXNlTm9kZSA9IDA7CiAgICAgICAgICAgICAgICAgbV9w
b3NpdGlvblN0YXJ0T2Zmc2V0ID0gcnVuU3RhcnQ7CiAgICAgICAgICAgICAgICAgbV9wb3NpdGlv
bkVuZE9mZnNldCA9IHN1YnJ1bkVuZDsKLSAgICAgICAgICAgICAgICBtX3RleHRDaGFyYWN0ZXJz
ID0gc3RyLnVuaWNvZGUoKSArIHJ1blN0YXJ0OworICAgICAgICAgICAgICAgIG1fdGV4dENoYXJh
Y3RlcnMgPSBzdHIuY2hhcmFjdGVycygpICsgcnVuU3RhcnQ7CiAgICAgICAgICAgICAgICAgbV90
ZXh0TGVuZ3RoID0gc3VicnVuRW5kIC0gcnVuU3RhcnQ7CiAKICAgICAgICAgICAgICAgICBtX2xh
c3RUZXh0Tm9kZUVuZGVkV2l0aENvbGxhcHNlZFNwYWNlID0gZmFsc2U7CkBAIC00OTUsNyArNDk1
LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgVGV4dEl0ZXJhdG9yOjplbWl0Q2hhcmFjdGVyKFFDaGFy
IGMsIE5vZGUgKnRleHROb2RlLCBOb2RlICpvZmZzZXRCYXNlTm9kZSwgaW50IHRleHRTdGFydE9m
ZnNldCwgaW50IHRleHRFbmRPZmZzZXQpCit2b2lkIFRleHRJdGVyYXRvcjo6ZW1pdENoYXJhY3Rl
cihVQ2hhciBjLCBOb2RlICp0ZXh0Tm9kZSwgTm9kZSAqb2Zmc2V0QmFzZU5vZGUsIGludCB0ZXh0
U3RhcnRPZmZzZXQsIGludCB0ZXh0RW5kT2Zmc2V0KQogewogICAgIC8vIHJlbWVtYmVyIGluZm9y
bWF0aW9uIHdpdGggd2hpY2ggdG8gY29uc3RydWN0IHRoZSBUZXh0SXRlcmF0b3I6OnJhbmdlKCkK
ICAgICAvLyBOT1RFOiB0ZXh0Tm9kZSBpcyBvZnRlbiBub3QgYSB0ZXh0IG5vZGUsIHNvIHRoZSBy
YW5nZSB3aWxsIHNwZWNpZnkgY2hpbGQgbm9kZXMgb2YgcG9zaXRpb25Ob2RlCkBAIC02NzksNyAr
Njc5LDcgQEAKICAgICBtX3Bvc2l0aW9uTm9kZSA9IG1fbm9kZTsKICAgICBtX3Bvc2l0aW9uU3Rh
cnRPZmZzZXQgPSBtX29mZnNldDsKICAgICBtX3RleHRMZW5ndGggPSBtX3Bvc2l0aW9uRW5kT2Zm
c2V0IC0gbV9wb3NpdGlvblN0YXJ0T2Zmc2V0OwotICAgIG1fdGV4dENoYXJhY3RlcnMgPSBzdHIu
dW5pY29kZSgpICsgbV9wb3NpdGlvblN0YXJ0T2Zmc2V0OworICAgIG1fdGV4dENoYXJhY3RlcnMg
PSBzdHIuY2hhcmFjdGVycygpICsgbV9wb3NpdGlvblN0YXJ0T2Zmc2V0OwogCiAgICAgbV9sYXN0
Q2hhcmFjdGVyID0gc3RyW21fcG9zaXRpb25FbmRPZmZzZXQgLSAxXTsKIApAQCAtNzI0LDcgKzcy
NCw3IEBACiAgICAgaGFuZGxlTm9uVGV4dE5vZGUoKTsKIH0KIAotdm9pZCBTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yOjplbWl0Q2hhcmFjdGVyKFFDaGFyIGMsIE5vZGUgKm5vZGUsIGlu
dCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCkKK3ZvaWQgU2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvcjo6ZW1pdENoYXJhY3RlcihVQ2hhciBjLCBOb2RlICpub2RlLCBpbnQgc3RhcnRP
ZmZzZXQsIGludCBlbmRPZmZzZXQpCiB7CiAgICAgbV9zaW5nbGVDaGFyYWN0ZXJCdWZmZXIgPSBj
OwogICAgIG1fcG9zaXRpb25Ob2RlID0gbm9kZTsKQEAgLTgzMyw3ICs4MzMsNyBAQAogICAgIHJl
c3VsdC5yZXNlcnZlKG51bUNoYXJzKTsKICAgICB3aGlsZSAobnVtQ2hhcnMgPiAwICYmICFhdEVu
ZCgpKSB7CiAgICAgICAgIGludCBydW5TaXplID0gbWluKG51bUNoYXJzLCBsZW5ndGgoKSk7Ci0g
ICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVycygpLCBydW5TaXplKTsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oY2hhcmFjdGVycygpKSwg
cnVuU2l6ZSk7CiAgICAgICAgIG51bUNoYXJzIC09IHJ1blNpemU7CiAgICAgICAgIGFkdmFuY2Uo
cnVuU2l6ZSk7CiAgICAgfQpAQCAtODg0LDcgKzg4NCw3IEBACiAgICAgCiAgICAgd2hpbGUgKDEp
IHsKICAgICAgICAgLy8gSWYgdGhpcyBjaHVuayBlbmRzIGluIHdoaXRlc3BhY2Ugd2UgY2FuIGp1
c3QgdXNlIGl0IGFzIG91ciBjaHVuay4KLSAgICAgICAgaWYgKG1fdGV4dEl0ZXJhdG9yLmNoYXJh
Y3RlcnMoKVttX3RleHRJdGVyYXRvci5sZW5ndGgoKS0xXS5pc1NwYWNlKCkpCisgICAgICAgIGlm
IChRQ2hhcihtX3RleHRJdGVyYXRvci5jaGFyYWN0ZXJzKClbbV90ZXh0SXRlcmF0b3IubGVuZ3Ro
KCkgLSAxXSkuaXNTcGFjZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIElm
IHRoaXMgaXMgdGhlIGZpcnN0IGNodW5rIHRoYXQgZmFpbGVkLCBzYXZlIGl0IGluIHByZXZpb3Vz
VGV4dCBiZWZvcmUgbG9vayBhaGVhZApAQCAtODk1LDE3ICs4OTUsMTcgQEAKIAogICAgICAgICAv
LyBMb29rIGFoZWFkIHRvIG5leHQgY2h1bmsuICBJZiBpdCBpcyB3aGl0ZXNwYWNlIG9yIGEgYnJl
YWssIHdlIGNhbiB1c2UgdGhlIHByZXZpb3VzIHN0dWZmCiAgICAgICAgIG1fdGV4dEl0ZXJhdG9y
LmFkdmFuY2UoKTsKLSAgICAgICAgaWYgKG1fdGV4dEl0ZXJhdG9yLmF0RW5kKCkgfHwgbV90ZXh0
SXRlcmF0b3IubGVuZ3RoKCkgPT0gMCB8fCBtX3RleHRJdGVyYXRvci5jaGFyYWN0ZXJzKClbMF0u
aXNTcGFjZSgpKSB7CisgICAgICAgIGlmIChtX3RleHRJdGVyYXRvci5hdEVuZCgpIHx8IG1fdGV4
dEl0ZXJhdG9yLmxlbmd0aCgpID09IDAgfHwgUUNoYXIobV90ZXh0SXRlcmF0b3IuY2hhcmFjdGVy
cygpWzBdKS5pc1NwYWNlKCkpIHsKICAgICAgICAgICAgIG1fZGlkTG9va0FoZWFkID0gdHJ1ZTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2J1ZmZlci5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFN0YXJ0IGdvYmJsaW5nIGNodW5rcyB1bnRpbCB3
ZSBnZXQgdG8gYSBzdWl0YWJsZSBzdG9wcGluZyBwb2ludAotICAgICAgICAgICAgbV9idWZmZXIu
YXBwZW5kKG1fcHJldmlvdXNUZXh0LCBtX3ByZXZpb3VzTGVuZ3RoKTsKKyAgICAgICAgICAgIG1f
YnVmZmVyLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4obV9wcmV2aW91c1Rl
eHQpLCBtX3ByZXZpb3VzTGVuZ3RoKTsKICAgICAgICAgICAgIG1fcHJldmlvdXNUZXh0ID0gMDsK
ICAgICAgICAgfQotICAgICAgICBtX2J1ZmZlci5hcHBlbmQobV90ZXh0SXRlcmF0b3IuY2hhcmFj
dGVycygpLCBtX3RleHRJdGVyYXRvci5sZW5ndGgoKSk7CisgICAgICAgIG1fYnVmZmVyLmFwcGVu
ZChyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4obV90ZXh0SXRlcmF0b3IuY2hhcmFjdGVy
cygpKSwgbV90ZXh0SXRlcmF0b3IubGVuZ3RoKCkpOwogICAgICAgICBpbnQgZXhjZXB0aW9uID0g
MDsKICAgICAgICAgbV9yYW5nZS0+c2V0RW5kKG1fdGV4dEl0ZXJhdG9yLnJhbmdlKCktPmVuZENv
bnRhaW5lcihleGNlcHRpb24pLCBtX3RleHRJdGVyYXRvci5yYW5nZSgpLT5lbmRPZmZzZXQoZXhj
ZXB0aW9uKSwgZXhjZXB0aW9uKTsKICAgICB9CkBAIC05MTUsMjAgKzkxNSwxOCBAQAogewogICAg
IGlmICghbV9idWZmZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9idWZmZXIubGVuZ3Ro
KCk7Ci0gICAgZWxzZSBpZiAobV9wcmV2aW91c1RleHQpCisgICAgaWYgKG1fcHJldmlvdXNUZXh0
KQogICAgICAgICByZXR1cm4gbV9wcmV2aW91c0xlbmd0aDsKLSAgICBlbHNlCi0gICAgICAgIHJl
dHVybiBtX3RleHRJdGVyYXRvci5sZW5ndGgoKTsKKyAgICByZXR1cm4gbV90ZXh0SXRlcmF0b3Iu
bGVuZ3RoKCk7CiB9CiAKLWNvbnN0IFFDaGFyICpXb3JkQXdhcmVJdGVyYXRvcjo6Y2hhcmFjdGVy
cygpIGNvbnN0Citjb25zdCBVQ2hhciogV29yZEF3YXJlSXRlcmF0b3I6OmNoYXJhY3RlcnMoKSBj
b25zdAogewogICAgIGlmICghbV9idWZmZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV9i
dWZmZXIudW5pY29kZSgpOwotICAgIGVsc2UgaWYgKG1fcHJldmlvdXNUZXh0KQorICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1fYnVmZmVyLnVuaWNvZGUoKSk7
CisgICAgaWYgKG1fcHJldmlvdXNUZXh0KQogICAgICAgICByZXR1cm4gbV9wcmV2aW91c1RleHQ7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gbV90ZXh0SXRlcmF0b3IuY2hhcmFjdGVycygpOwor
ICAgIHJldHVybiBtX3RleHRJdGVyYXRvci5jaGFyYWN0ZXJzKCk7CiB9CiAKIENpcmN1bGFyU2Vh
cmNoQnVmZmVyOjpDaXJjdWxhclNlYXJjaEJ1ZmZlcihjb25zdCBTdHJpbmcmIHMsIGJvb2wgaXND
YXNlU2Vuc2l0aXZlKQpAQCAtOTM3LDIxICs5MzUsMjEgQEAKICAgICBhc3NlcnQoIXMuaXNFbXB0
eSgpKTsKIAogICAgIGlmICghaXNDYXNlU2Vuc2l0aXZlKQotICAgICAgICBtX3RhcmdldCA9IHMu
bG93ZXIoKTsKKyAgICAgICAgbV90YXJnZXQgPSBzLmZvbGRDYXNlKCk7CiAgICAgbV90YXJnZXQu
cmVwbGFjZShub25CcmVha2luZ1NwYWNlLCAnICcpOwogICAgIG1faXNDYXNlU2Vuc2l0aXZlID0g
aXNDYXNlU2Vuc2l0aXZlOwogCi0gICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxRQ2hhciAqPihm
YXN0TWFsbG9jKHMubGVuZ3RoKCkgKiBzaXplb2YoUUNoYXIpKSk7CisgICAgbV9idWZmZXIgPSBz
dGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2Mocy5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcikp
KTsKICAgICBtX2N1cnNvciA9IG1fYnVmZmVyOwogICAgIG1fYnVmZmVyRnVsbCA9IGZhbHNlOwog
fQogCi12b2lkIENpcmN1bGFyU2VhcmNoQnVmZmVyOjphcHBlbmQoY29uc3QgUUNoYXIgJmMpCit2
b2lkIENpcmN1bGFyU2VhcmNoQnVmZmVyOjphcHBlbmQoVUNoYXIgYykKIHsKICAgICBpZiAobV9p
c0Nhc2VTZW5zaXRpdmUpCi0gICAgICAgICptX2N1cnNvcisrID0gYy51bmljb2RlKCkgPT0gbm9u
QnJlYWtpbmdTcGFjZSA/ICcgJyA6IGMudW5pY29kZSgpOworICAgICAgICAqbV9jdXJzb3IrKyA9
IGMgPT0gbm9uQnJlYWtpbmdTcGFjZSA/ICcgJyA6IGM7CiAgICAgZWxzZQotICAgICAgICAqbV9j
dXJzb3IrKyA9IGMudW5pY29kZSgpID09IG5vbkJyZWFraW5nU3BhY2UgPyAnICcgOiBjLmxvd2Vy
KCkudW5pY29kZSgpOworICAgICAgICAqbV9jdXJzb3IrKyA9IGMgPT0gbm9uQnJlYWtpbmdTcGFj
ZSA/ICcgJyA6IHVfZm9sZENhc2UoYywgVV9GT0xEX0NBU0VfREVGQVVMVCk7CiAgICAgaWYgKG1f
Y3Vyc29yID09IG1fYnVmZmVyICsgbGVuZ3RoKCkpIHsKICAgICAgICAgbV9jdXJzb3IgPSBtX2J1
ZmZlcjsKICAgICAgICAgbV9idWZmZXJGdWxsID0gdHJ1ZTsKQEAgLTk2MSw3ICs5NTksNyBAQAog
Ly8gVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHdoZW4gdGhlIGJ1ZmZlciBpcyBub3Qg
eWV0IGZ1bGwsCiAvLyBhbmQgd2hlbiB0aGVuIGNvdW50IGlzIHNtYWxsIGVub3VnaCB0byBmaXQg
aW4gdGhlIGJ1ZmZlci4KIC8vIE5vIG5lZWQgZm9yIGEgbW9yZSBnZW5lcmFsIHZlcnNpb24gZm9y
IHRoZSBzZWFyY2ggYWxnb3JpdGhtLgotdm9pZCBDaXJjdWxhclNlYXJjaEJ1ZmZlcjo6YXBwZW5k
KGludCBjb3VudCwgY29uc3QgUUNoYXIgKmNoYXJhY3RlcnMpCit2b2lkIENpcmN1bGFyU2VhcmNo
QnVmZmVyOjphcHBlbmQoaW50IGNvdW50LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycykKIHsKICAg
ICBpbnQgdGFpbFNwYWNlID0gbV9idWZmZXIgKyBsZW5ndGgoKSAtIG1fY3Vyc29yOwogCkBAIC05
NzAsMTMgKzk2OCwxMyBAQAogCiAgICAgaWYgKG1faXNDYXNlU2Vuc2l0aXZlKSB7CiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpICE9IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIFFDaGFyIGMg
PSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICAgICAgbV9jdXJzb3JbaV0gPSBjLnVuaWNvZGUoKSA9
PSBub25CcmVha2luZ1NwYWNlID8gJyAnIDogYy51bmljb2RlKCk7CisgICAgICAgICAgICBVQ2hh
ciBjID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAgICAgIG1fY3Vyc29yW2ldID0gYyA9PSBub25C
cmVha2luZ1NwYWNlID8gJyAnIDogYzsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpICE9IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIFFDaGFyIGMg
PSBjaGFyYWN0ZXJzW2ldOwotICAgICAgICAgICAgbV9jdXJzb3JbaV0gPSBjLnVuaWNvZGUoKSA9
PSBub25CcmVha2luZ1NwYWNlID8gJyAnIDogYy5sb3dlcigpLnVuaWNvZGUoKTsKKyAgICAgICAg
ICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICAgICAgbV9jdXJzb3JbaV0gPSBj
ID09IG5vbkJyZWFraW5nU3BhY2UgPyAnICcgOiB1X2ZvbGRDYXNlKGMsIFVfRk9MRF9DQVNFX0RF
RkFVTFQpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChjb3VudCA8IHRhaWxTcGFjZSkKQEAg
LTk5OCw4ICs5OTYsOCBAQAogCiAgICAgaW50IGhlYWRTcGFjZSA9IG1fY3Vyc29yIC0gbV9idWZm
ZXI7CiAgICAgaW50IHRhaWxTcGFjZSA9IGxlbmd0aCgpIC0gaGVhZFNwYWNlOwotICAgIHJldHVy
biBtZW1jbXAobV9jdXJzb3IsIG1fdGFyZ2V0LnVuaWNvZGUoKSwgdGFpbFNwYWNlICogc2l6ZW9m
KFFDaGFyKSkgPT0gMAotICAgICAgICAmJiBtZW1jbXAobV9idWZmZXIsIG1fdGFyZ2V0LnVuaWNv
ZGUoKSArIHRhaWxTcGFjZSwgaGVhZFNwYWNlICogc2l6ZW9mKFFDaGFyKSkgPT0gMDsKKyAgICBy
ZXR1cm4gbWVtY21wKG1fY3Vyc29yLCBtX3RhcmdldC5jaGFyYWN0ZXJzKCksIHRhaWxTcGFjZSAq
IHNpemVvZihVQ2hhcikpID09IDAKKyAgICAgICAgJiYgbWVtY21wKG1fYnVmZmVyLCBtX3Rhcmdl
dC5jaGFyYWN0ZXJzKCkgKyB0YWlsU3BhY2UsIGhlYWRTcGFjZSAqIHNpemVvZihVQ2hhcikpID09
IDA7CiB9CiAKIGludCBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGNvbnN0IFJhbmdlICpyKQpA
QCAtMTA4NCwxMiArMTA4MiwxMSBAQAogICAgIHJldHVybiByZXN1bHRSYW5nZS5yZWxlYXNlKCk7
CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFJhbmdlICpyKQorRGVwcmVj
YXRlZFN0cmluZyBwbGFpblRleHQoY29uc3QgUmFuZ2UqIHIpCiB7CiAgICAgRGVwcmVjYXRlZFN0
cmluZyByZXN1bHQoIiIpOwotICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHIpOyAhaXQuYXRFbmQo
KTsgaXQuYWR2YW5jZSgpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoaXQuY2hhcmFjdGVycygp
LCBpdC5sZW5ndGgoKSk7Ci0gICAgfQorICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHIpOyAhaXQu
YXRFbmQoKTsgaXQuYWR2YW5jZSgpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgUUNoYXIqPihpdC5jaGFyYWN0ZXJzKCkpLCBpdC5sZW5ndGgoKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCShyZXZpc2lvbiAxNDIxNikKKysr
IGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcg
QEAKIAogICAgIGJvb2wgaXNMYXN0SW5CbG9jaygpIGNvbnN0OwogCi0gICAgUUNoYXIgY2hhcmFj
dGVyQWZ0ZXIoKSBjb25zdDsKKyAgICBVQ2hhciBjaGFyYWN0ZXJBZnRlcigpIGNvbnN0OwogICAg
IAogICAgIHZvaWQgZGVidWdQb3NpdGlvbihjb25zdCBjaGFyKiBtc2cgPSAiIikgY29uc3Q7CiAg
ICAgCkluZGV4OiBlZGl0aW5nL1JlYmFsYW5jZVdoaXRlc3BhY2VDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBlZGl0aW5nL1JlYmFsYW5jZVdoaXRlc3BhY2VDb21tYW5kLmNwcAkocmV2aXNpb24g
MTQyMTYpCisrKyBlZGl0aW5nL1JlYmFsYW5jZVdoaXRlc3BhY2VDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsOSArMzgsOSBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNX
aGl0ZXNwYWNlKGNvbnN0IFFDaGFyICZjKQorc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVzcGFj
ZShVQ2hhciBjKQogewotICAgIHJldHVybiBjLnVuaWNvZGUoKSA9PSAweGEwIHx8IGlzQ29sbGFw
c2libGVXaGl0ZXNwYWNlKGMpOworICAgIHJldHVybiBjID09IDB4YTAgfHwgaXNDb2xsYXBzaWJs
ZVdoaXRlc3BhY2UoYyk7CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgZ28gaW50byBhZGph
Y2VudCB0ZXh0IGluIHNpYmxpbmdzLCBjb3VzaW5zLCBldGMuCkluZGV4OiBDaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDIyMCkKKysrIENoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQzNCBAQAorMjAwNi0wNS0wNyAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgLSBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lk
PTg3ODIKKyAgICAgICAgICB1c2UgSUNVIGFuZCBVQ2hhciBtb3JlLCBRQ2hhciBsZXNzCisKKyAg
ICAgICAgQnkgdXNpbmcgSUNVIG1vcmUsIHRoaXMgZml4ZXMgc29tZSBidWdzIGluIGEgZmV3IHBs
YWNlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MU2VyaWFsaXplci5jcHA6CisgICAg
ICAgICogY3NzL2Nzc192YWx1ZWltcGwuaDoKKyAgICAgICAgKiBrd3EvS1dRVGV4dFN0cmVhbS5j
cHA6CisgICAgICAgICogbG9hZGVyL0NhY2hlZE9iamVjdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L0NvbG9yLmNwcDoKKyAgICAgICAgQWRkIGluY2x1ZGVzIG9mIERlcHJlY2F0ZWRTdHJpbmcuaCBh
cyBuZWVkZWQsIG5vdyB0aGF0IFN0cmluZ0ltcGwuaCBubyBsb25nZXIKKyAgICAgICAgaW5jbHVk
ZXMgaXQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfY3NzLmNwcDogKEtKUzo6Y3NzUHJv
cGVydHlOYW1lKToKKyAgICAgICAgRWxpbWluYXRlIHVzZSBvZiBRQ2hhcjo6bGF0aW4xKCkgaW4g
YSBjYXNlIHdoZXJlIGl0J3Mgbm90IGhlbHBmdWwuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9r
anNfcHJveHkuY3BwOiAoV2ViQ29yZTo6S0pTUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgVXNl
IGNoYXJhY3RlcnMoKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBvbGQgdW5pY29kZSgpIGZ1bmN0
aW9uLgorCisgICAgICAgICogYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHA6IChLSlM6OmlzU2Vw
YXJhdG9yKToKKyAgICAgICAgVXNlIFVDaGFyIGluc3RlYWQgb2YgUUNoYXIuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tOgorICAgICAgICAoU3RyaW5nSW1wbDo6b3Bl
cmF0b3IgTlNTdHJpbmcqKTogUmVtb3ZlIHR5cGVjYXN0IHRoYXQncyBubyBsb25nZXIgbmVlZGVk
LgorICAgICAgICAoU3RyaW5nOjpTdHJpbmcpOiBEaXR0by4gQWxzbyB1c2UgVmVjdG9yIGZvciBs
b2NhbCBidWZmZXIgdG8gbWFrZSBjb2RlIHJlYWQgc2ltcGxlci4KKworICAgICAgICAqIGJyaWRn
ZS9tYWMvRnJhbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3RvckZvcktleUV2ZW50
KTogUmVtb3ZlIGNhbGwgdG8gdW5pY29kZSgpIGZ1bmN0aW9uLCBubyBsb25nZXIgbmVlZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OnNldFRpdGxlKTogUmVtb3ZlIFFDaGFyIGNhc3Qs
IG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6c2V0U3RhdHVz
QmFyVGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OmFkdmFuY2VUb05l
eHRNaXNzcGVsbGluZyk6IFVzZSBVQ2hhciBpbnN0ZWFkIG9mIFFDaGFyLgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVNYWM6OnJ1bkphdmFTY3JpcHRBbGVydCk6IFJlbW92ZSBRQ2hhciBjYXN0LCBu
byBsb25nZXIgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OnJ1bkphdmFTY3Jp
cHRDb25maXJtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZU1hYzo6cnVuSmF2YVNj
cmlwdFByb21wdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OmF0dHJpYnV0
ZWRTdHJpbmcpOiBSZXBsYWNlcyBjYWxscyBvZiBRQ2hhcjo6ZGlyZWN0aW9uKCkgd2l0aAorICAg
ICAgICBjYWxscyB0byB1X2NoYXJEaXJlY3Rpb24gYW5kIHVzZSBJQ1UgY29uc3RhbnRzIGluc3Rl
YWQgb2YgUUNoYXIgb25lcy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTWFjOjptYXJrTWlzc3Bl
bGxpbmdzKTogUmVtb3ZlIFFDaGFyIGNhc3QsIG5vIGxvbmdlciBuZWVkZWQuIEFkZGVkIGEKKyAg
ICAgICAgUUNoYXIgY2FzdCBzbyB3ZSBjYW4gY2FsbCBpc1NwYWNlIC0tIHNsYXRlZCB0byBiZSBy
ZW1vdmVkIGxhdGVyLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVNYWM6OnNob3VsZENsb3NlKTog
UmVtb3ZlIFFDaGFyIGNhc3QsIG5vIGxvbmdlciBuZWVkZWQuCisKKyAgICAgICAgKiBicmlkZ2Uv
bWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdl
IHNlbGVjdGVkU3RyaW5nXSk6IFJlbW92ZSBRQ2hhciBjYXN0LCBubyBsb25nZXIgbmVlZGVkLgor
ICAgICAgICAoLVtXZWJDb3JlRnJhbWVCcmlkZ2Ugc3RyaW5nRm9yUmFuZ2U6XSk6IERpdHRvLgor
CisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueTogVXBkYXRlIGZvciBmaWVsZCBuYW1lIGNoYW5n
ZSBmcm9tIHN0cmluZyB0byBjaGFyYWN0ZXJzLgorICAgICAgICBVc2UgVUNoYXIgaW5zdGVhZCBv
ZiB1bnNpZ25lZCBzaG9ydC4gCisKKyAgICAgICAgKiBjc3MvY3NzX3ZhbHVlaW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eUlEKTogVXNlIFVDaGFyIGluc3RlYWQgb2YgdW5zaWdu
ZWQgc2hvcnQgYW5kIGdldCByaWQgb2YgY2FsbCB0bworICAgICAgICB1bmljb2RlKCkgZnVuY3Rp
b24sIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpxdW90ZVN0cmluZ0lmTmVl
ZGVkKTogVXNlIHN0cmluZ3Mgd2hlbiBidWlsZGluZyB1cCBhIHJlc3VsdGluZyBzdHJpbmcsCisg
ICAgICAgIGluc3RlYWQgb2YgZGVwZW5kaW5nIG9uIHRoZSBmZWF0dXJlIHdoZXJlIHlvdSBjYW4g
YXBwZW5kIGNoYXJhY3RlcnMgdG8gYSBzdHJpbmcuCisKKyAgICAgICAgKiBjc3MvY3NzaGVscGVy
LmNwcDogKFdlYkNvcmU6OnBhcnNlVVJMKTogUmVtb3ZlIGNhbGxzIHRvIHVuaWNvZGUoKSBmdW5j
dGlvbiBhbmQKKyAgICAgICAgcmV3cml0ZSB0byBvYnZpYXRlIHRoZSBuZWVkIHRvIGNhbGwgbG93
ZXIoKSBqdXN0IHRvIGNoZWNrIGZvciBhIGZldyBjb25zdGFudAorICAgICAgICBjaGFyYWN0ZXIg
dmFsdWVzLiBBbHNvIHJlbW92ZSBhIG5vdy11bm5lZWRlZCB0eXBlIGNhc3QuCisKKyAgICAgICAg
KiBjc3MvY3NzcGFyc2VyLmg6IENoYW5nZWQgUGFyc2VTdHJpbmcgZmllbGQgdG8gdXNlIFVDaGFy
IGFuZCB0byBiZSBuYW1lZCBjaGFyYWN0ZXJzCisgICAgICAgIGluc3RlYWQgb2Ygc3RyaW5nLiBD
aGFuZ2VkIG1hbnkgb3RoZXIgZmllbGRzIHRvIGJlIFVDaGFyIGluc3RlYWQgb2YgdW5zaWduZWQg
c2hvcnQuCisgICAgICAgIChXZWJDb3JlOjpkb21TdHJpbmcpOiBVcGRhdGUgZm9yIHRoYXQuCisg
ICAgICAgIChXZWJDb3JlOjphdG9taWNTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKiBjc3MvY3Nz
cGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhcnNlU3RyaW5nOjpsb3dlcik6IFVzZSB1
X3RvbG93ZXIgaW5zdGVhZCBvZiBRQ2hhcjo6bG93ZXIoKS4gQWxzbyBjaGFuZ2UKKyAgICAgICAg
bmFtZSB0byBjaGFyYWN0ZXJzIGZyb20gc3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpzZXR1cFBhcnNlcik6IFVzZSBVQ2hhciBpbnN0ZWFkIG9mIHVuc2lnbmVkIHNob3J0Lgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpsZXgpOiBEaXR0by4gQWxzbyB1cGRhdGUgZm9y
IGNoYXJhY3RlcnMgbmFtZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnRl
eHQpOiBVc2UgVUNoYXIgaW5zdGVhZCBvZiB1bnNpZ25lZCBzaG9ydC4gQWxzbyB0d2VhayBzb21l
CisgICAgICAgIG9mIHRoZSBjb2RlIGEgbGl0dGxlIGJpdCB0byBoYW5kbGUgYSBjb3VwbGUgb2Yg
b3ZlcmZsb3cgY2FzZXMgYmV0dGVyIGFuZCByZWR1Y2UKKyAgICAgICAgdHlwZSBjYXN0aW5nLgor
ICAgICAgICAoV2ViQ29yZTo6ZGVwcmVjYXRlZFN0cmluZyk6IE1vdmVkIGhlcmUgc28gd2UgZG9u
J3QgaGF2ZSB0byBpbmNsdWRlIERlcHJlY2F0ZWRTdHJpbmcuaAorICAgICAgICBpbiB0aGUgaGVh
ZGVyIGZpbGUuCisKKyAgICAgICAgKiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHA6IChXZWJDb3Jl
OjpjaGVja1BzZXVkb1N0YXRlKTogQWRkZWQgYSB0eXBlIGNhc3Qgc2luY2UgdGhpcworICAgICAg
ICBjb2RlIG5vdyBicmlkZ2VzIHRoZSB3b3JsZCBiZXR3ZWVuIG1vZGVybiBjb2RlIGFuZCBRQ2hh
ci9EZXByZWNhdGVkU3RyaW5nLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOiAo
V2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6Q2hhcmFjdGVyRGF0YSk6IENoYW5nZWQgUUNoYXIgdG8g
VUNoYXIuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmlzVmFsaWROYW1lKTogVXBkYXRl
ZCBmb3IgbmFtZSBjaGFuZ2UgZnJvbSB1bmljb2RlIHRvIGNoYXJhY3RlcnMuCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cGFyc2VRdWFsaWZpZWROYW1lKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCk6IENoYW5nZWQgcmV0
dXJuIHR5cGUgdG8gVUNoYXIuCisKKyAgICAgICAgKiBkb20vTmFtZWRNYXBwZWRBdHRyTWFwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmlzQ2xhc3NXaGl0ZXNwYWNlKTogQ2hhbmdlZCBwYXJhbWV0
ZXIgdG8gVUNoYXIgZnJvbSBRQ2hhci4KKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTWFwcGVkQXR0
ck1hcDo6cGFyc2VDbGFzc0F0dHJpYnV0ZSk6IENoYW5nZWQgZnJvbSBVQ2hhciB0byBRQ2hhciBh
bmQKKyAgICAgICAgZnJvbSB1bmljb2RlIHRvIGNoYXJhY3RlcnMuCisKKyAgICAgICAgKiBkb20v
UG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmxlYWRpbmdXaGl0ZXNw
YWNlUG9zaXRpb24pOiBDaGFuZ2VkIGZyb20gUUNoYXIgdG8gVUNoYXIuCisgICAgICAgIChXZWJD
b3JlOjpQb3NpdGlvbjo6dHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24pOiBEaXR0by4KKworICAg
ICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzQ2xhc3NX
aGl0ZXNwYWNlKTogQ2hhbmdlZCBmcm9tIFFDaGFyIHRvIFVDaGFyLgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkRWxlbWVudDo6YWRkQ1NTTGVuZ3RoKTogQ2hhbmdlZCBmcm9tIFFDaGFyIHRvIFVD
aGFyLCBhbmQgcmVtb3ZlIG9uZQorICAgICAgICBjYXNlIHdoZXJlIGxhdGluMSgpIHdhcyB1c2Vk
IGFuZCB3YXMgbm90IGhlbHBmdWwuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojph
ZGRDU1NDb2xvcik6IFJlbW92ZWQgdW5pY29kZSgpIGZ1bmN0aW9uIGNhbGwsIG5vIGxvbmdlciBu
ZWVkZWQuCisKKyAgICAgICAgKiBkb20vZG9tMl9ldmVudHNpbXBsLmNwcDogKFdlYkNvcmU6Oktl
eWJvYXJkRXZlbnQ6OmNoYXJDb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOiAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y29uc3RyYWluVmFsdWUpOgorICAgICAg
ICBSZW1vdmVkIHVuaWNvZGUoKSBmdW5jdGlvbiBjYWxsLCBubyBsb25nZXIgbmVlZGVkLgorCisg
ICAgICAgICogZG9tL3htbF90b2tlbml6ZXIuaDogUmVtb3ZlZCBkZWZhdWx0IHBhcmFtZXRlciBm
b3IgeG1sRG9jUHRyRm9yU3RyaW5nIHNvIHdlIGRvbid0IGhhdmUKKyAgICAgICAgdG8gaW5jbHVk
ZSB0aGUgRGVwcmVjYXRlZFN0cmluZy5oIGhlYWRlciBpbiB0aGlzIGZpbGUgKGFuZCBzaW5jZSBu
byBvbmUgdXNlcyBpdCkuCisKKyAgICAgICAgKiBlZGl0aW5nL0hUTUxJbnRlcmNoYW5nZS5jcHA6
IChjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0KTogQWRkZWQgYSBjb3VwbGUgY2Fs
bHMKKyAgICAgICAgdG8gdGhlIHVuaWNvZGUoKSBmdW5jdGlvbiB0byBicmlkZ2UgdGhlIGdhcCBm
cm9tIFFDaGFyL0RlcHJlY2F0ZWRTdHJpbmcgYmFjayB0byBtb2Rlcm4KKyAgICAgICAgY29kZS4K
KworICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwOiBSZW1vdmVkIHVudXNl
ZCBmdW5jdGlvbi4KKworICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6IENoYW5nZWQg
ZnJvbSBRQ2hhciB0byBVQ2hhci4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcik6IEluaXRpYWxp
emUgbV9sYXN0Q2hhcmFjdGVyIHNpbmNlIGl0J3Mgbm93IGEgVUNoYXIKKyAgICAgICAgKHdoaWNo
IGlzIGp1c3QgYSB0eXBlZGVmKSByYXRoZXIgdGhhbiBhIFFDaGFyICh3aGljaCB3YXMgYSBjbGFz
cyB3aXRoIGEgZGVmYXVsdCB2YWx1ZSBvZiAwKS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVy
YXRvcjo6aGFuZGxlVGV4dE5vZGUpOiBVcGRhdGVkIHRvIHVzZSBjaGFyYWN0ZXJzKCkgaW5zdGVh
ZCBvZiB1bmljb2RlKCkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmhhbmRsZVRl
eHRCb3gpOiBSZW1vdmVkIHVuaWNvZGUoKSBjYWxsIHNpbmNlIGl0J3Mgbm93IGEgVUNoYXIgaW5z
dGVhZAorICAgICAgICBvZiBhIFFDaGFyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9y
OjplbWl0Q2hhcmFjdGVyKTogTW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHROb2RlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjplbWl0Q2hh
cmFjdGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJJdGVyYXRvcjo6c3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXb3JkQXdhcmVJdGVyYXRvcjo6YWR2YW5j
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V29yZEF3YXJlSXRlcmF0b3I6Omxlbmd0aCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V29yZEF3YXJlSXRlcmF0b3I6OmNoYXJhY3RlcnMp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNpcmN1bGFyU2VhcmNoQnVmZmVyOjpDaXJjdWxh
clNlYXJjaEJ1ZmZlcik6IENoYW5nZWQgdG8gdXNlIFVDaGFyCisgICAgICAgIGluc3RlYWQgb2Yg
UUNoYXIsIGJ1dCBhbHNvIHRvIHVzZSBmb2xkQ2FzZSgpIGluc3RlYWQgb2YgbG93ZXIoKSwgYmVj
YXVzZQorICAgICAgICB3ZSB3YW50IGNhc2UgZm9sZGluZyBoZXJlLCBub3QgbG93ZXJjYXNpbmcu
CisgICAgICAgIChXZWJDb3JlOjpDaXJjdWxhclNlYXJjaEJ1ZmZlcjo6YXBwZW5kKTogRGl0dG8s
IHdpdGggdV9mb2xkQ2FzZS4KKyAgICAgICAgKFdlYkNvcmU6OkNpcmN1bGFyU2VhcmNoQnVmZmVy
Ojppc01hdGNoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpwbGFpblRleHQpOiBBZGRlZCB0
eXBlIGNhc3Qgc2luY2UgdGhpcyBicmlkZ2VzIHRoZSBnYXAgZnJvbSB0aGUgbW9kZXJuIHN0dWZm
CisgICAgICAgIHRvIFFDaGFyL0RlcHJlY2F0ZWRTdHJpbmcuCisKKyAgICAgICAgKiBlZGl0aW5n
L1Zpc2libGVQb3NpdGlvbi5oOiBDaGFuZ2VkIGZyb20gUUNoYXIgdG8gVUNoYXIuCisgICAgICAg
ICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOiAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9u
OjpjaGFyYWN0ZXJBZnRlcik6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3Bw
OiAoV2ViQ29yZTo6ZXNjYXBlVGV4dEZvck1hcmt1cCk6IENoYW5nZWQgY29kZSB0aGF0IHVzZWQg
bGF0aW4xKCkKKyAgICAgICAgZm9yIG5vIGdvb2QgcmVhc29uIHRvIHVzZSB1bmljb2RlKCkgaW5z
dGVhZC4KKyAKKyAgICAgICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuaDogQ2hhbmdlZCBmcm9tIFFD
aGFyIHRvIFVDaGFyLgorICAgICAgICAqIGh0bWwvSFRNTFRva2VuaXplci5jcHA6IENoYW5nZWQg
ZnJvbSBRQ2hhciB0byBVQ2hhciwgaW5jbHVkaW5nIHJlbW92aW5nIHRoZQorICAgICAgICBLSFRN
TF9BTExPQ19RQ0hBUl9WRUMgYW5kIEtIVE1MX0RFTEVURV9RQ0hBUl9WRUMgbWFjcm9zLCB3aGlj
aCB3ZXJlbid0IGJlaW5nCisgICAgICAgIHVzZWQgY29uc2lzdGVudGx5IGFueXdheS4KKyAgICAg
ICAgKFdlYkNvcmU6OmZpeFVwQ2hhcik6IE1vcmUgb2YgdGhlIHNhbWUuCisgICAgICAgIChXZWJD
b3JlOjp0YWdNYXRjaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6
cmVzZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OmJlZ2luKTog
RGl0dG8uIEFsc28gY29ycmVjdGVkIGFub21hbHkgd2hlcmUgYnVmZmVyCisgICAgICAgIHNpemUg
d2FzIG5vdCB0aGUgc2FtZSBhcyB0aGUgc2l6ZSB2YWx1ZSAtLSB0aGlzIHdhcyBvbmx5IHRydWUg
aW4gdGhlIGluaXRpYWwKKyAgICAgICAgYWxsb2NhdGlvbiwgc28gSSBiZWxpZXZlIHRoZXJlIHdh
cyBubyB2YWx1ZSBpbiBpdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OnBhcnNl
U3BlY2lhbCk6IERpdHRvLiBBbHNvIHJlbW92ZWQgYSB1c2Ugb2YgbGF0aW4xKCkKKyAgICAgICAg
dGhhdCB3YXMgdW5ubmVjZXNzYXJ5IGV4dHJhIHdvcmsuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
VG9rZW5pemVyOjpzY3JpcHRIYW5kbGVyKTogTW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUb2tlbml6ZXI6OnBhcnNlQ29tbWVudCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRva2VuaXplcjo6cGFyc2VTZXJ2ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUb2tlbml6ZXI6OnBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKTogRGl0dG8uIEFu
b3RoZXIgdW5uZWNlc3NhcnkKKyAgICAgICAgdXNlIG9mIGxhdGluMSgpIHJlbW92ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpwYXJzZVRleHQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OnBhcnNlRW50aXR5KTogRGl0dG8uIENoYW5nZWQgaGV4
LXBhcnNpbmcgY29kZSB0byBoYW5kbGUKKyAgICAgICAgdXBwZXJjYXNlIGhleCBhIG1vcmUtZWZm
aWNpZW50IHdheSB0aGFuIGNhbGxpbmcgUUNoYXI6Omxvd2VyKCkgb24gZWFjaCBjaGFyYWN0ZXIu
CisgICAgICAgIEFsc28gY2hhbmdlZCBzdXJyb2dhdGUgY29kZSBsb2dpYyB0byBmaXggYSBjb3Vw
bGUgdGhpbmdzIC0tIHJlamVjdCBjaGFyYWN0ZXIgY29kZXMKKyAgICAgICAgPiAweDEwRkZGRiBh
cyBpdCBzaG91bGQgYW5kIHVzZSBVMTZfTEVBRCBhbmQgVTE2X1RSQUlMIGluc3RlYWQgb2Ygd3Jp
dGluZyBvdXIKKyAgICAgICAgb3duIHZlcnNpb25zIG9mIHRoZXNlLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRva2VuaXplcjo6cGFyc2VUYWcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxUb2tlbml6ZXI6OndyaXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5p
emVyOjplbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OmZpbmlz
aCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6ZW5sYXJnZUJ1ZmZl
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6ZW5sYXJnZVNjcmlw
dEJ1ZmZlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6bm90aWZ5
RmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6ZGVjb2RlTmFtZWRFbnRpdHkpOiBEaXR0by4K
KworICAgICAgICAqIGh0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcDogKFdlYkNvcmU6OnBhcnNlRm9u
dFNpemVOdW1iZXIpOiBDaGFuZ2VkIGZyb20gUUNoYXIKKyAgICAgICAgdG8gVUNoYXIsIGluY2x1
ZGluZyB1c2luZyB1X2lzZGlnaXQgYW5kIHVfY2hhckRpZ2l0VmFsdWUgaW5zdGVhZCBvZiBRQ2hh
cjo6aXNOdW1iZXIKKyAgICAgICAgYW5kIFFDaGFyOjpkaWdpdFZhbHVlLiBBbHNvIHJlbW92ZWQg
dW5uZWVkZWQgcmFuZ2UgY2hlY2tpbmcgdGhhdCdzIGFscmVhZHkgZG9uZQorICAgICAgICBieSBX
ZWJDb3JlOjpTdHJpbmcuCisKKyAgICAgICAgKiBrd3EvS1dRTG9hZGVyLm1tOiAoS1dRSXNSZXNw
b25zZVVSTEVxdWFsVG9VUkwpOiBSZXdyb3RlIHRvIHVzZSBWZWN0b3IgYW5kIFVDaGFyLAorICAg
ICAgICByZW1vdmluZyBhbGwgdGhlIHR5cGUgY2FzdHMgYW5kIG1ha2luZyB0aGUgd2hvbGUgZnVu
Y3Rpb24gbXVjaCBzaG9ydGVyLgorCisgICAgICAgICoga3dxL1dlYkNvcmVBWE9iamVjdC5tbToK
KyAgICAgICAgKEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQpOiBVc2UgVUNoYXIgaW5zdGVh
ZCBvZiBRQ2hhci4KKyAgICAgICAgKC1bV2ViQ29yZUFYT2JqZWN0IGRvQVhBdHRyaWJ1dGVkU3Ry
aW5nRm9yVGV4dE1hcmtlclJhbmdlOl0pOiBNb3JlIG9mIHRoZSBzYW1lLgorCisgICAgICAgICog
bG9hZGVyL0NhY2hlLmg6IFJlbW92ZSB1bm5lY2Vzc2FyeSBkZWZhdWx0IHBhcmFtZXRlcnMsIHBy
ZXZlbnRpbmcgdGhlIG5lZWQgdG8KKyAgICAgICAgaW5jbHVkZSB0aGUgRGVwcmVjYXRlZFN0cmlu
Zy5oIGhlYWRlciBpbiB0aGlzIGhlYWRlci4gQ2xlYW5lZCB1cCB0aGUgaGVhZGVyCisgICAgICAg
IHN0cnVjdHVyZSBhIGJpdCwgcmVtb3Zpbmcgc29tZSBvYnNvbGV0ZSBhbmQgcmVkdW5kYW50IGNv
bW1lbnRzIGFuZCBmaXhpbmcgdHlwb3MuCisgICAgICAgICogbG9hZGVyL0NhY2hlLmNwcDogUmVt
b3ZlZCB1bnVzZWQgcHJlbG9hZCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6
CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVc2VyU3R5bGVT
aGVldExvYWRlcjo6VXNlclN0eWxlU2hlZXRMb2FkZXIpOiBBZGRlZCBleHBsaWNpdCBhcmd1bWVu
dHMuCisgICAgICAgIFRoaXMgd2FzIHRoZSBvbmx5IGNhbGxlciBhbnl3aGVyZSB0aGF0IHRvb2sg
YWR2YW50YWdlIG9mIHRoZSBkZWZhdWx0IHBhcmFtZXRlcgorICAgICAgICB2YWx1ZXMgaW4gb25l
IG9mIHRoZSBDYWNoZSBjbGFzcyByZXF1ZXN0IGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lOjpiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKTogQ2hhbmdlZCBRQ2hhciB0byBVQ2hh
ci4KKworICAgICAgICAqIHBsYXRmb3JtL0F0b21pY1N0cmluZy5oOiBDaGFuZ2VkIFFDaGFyIHRv
IFVDaGFyLiBSZW1vdmVkIGNvbnN0cnVjdG9yIHRoYXQgbWFrZXMKKyAgICAgICAgYW4gQXRvbWlj
U3RyaW5nIGZyb20gYSBzaW5nbGUgY2hhcmFjdGVyLiBSZW5hbWVkIHVuaWNvZGUoKSBmdW5jdGlv
biB0byBjaGFyYWN0ZXJzKCkuCisgICAgICAgIFJlbmFtZWQgS0hUTUxfQVRPTUlDU1RSSU5HX0hJ
REVfR0xPQkFMUyB0byBBVE9NSUNTVFJJTkdfSElERV9HTE9CQUxTLgorICAgICAgICAqIHBsYXRm
b3JtL0F0b21pY1N0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU3RyaW5nVHJhbnNsYXRv
cjo6ZXF1YWwpOiBDaGFuZ2VkIFFDaGFyIHRvIFVDaGFyLgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I9PSk6IENoYW5nZWQgdW5pY29kZSgpIHRvIGNoYXJhY3RlcnMoKS4KKyAgICAgICAgKFdl
YkNvcmU6OlVDaGFyQnVmZmVyVHJhbnNsYXRvcjo6aGFzaCk6IE1vcmUgb2YgdGhlIHNhbWUuCisg
ICAgICAgIChXZWJDb3JlOjpVQ2hhckJ1ZmZlclRyYW5zbGF0b3I6OmVxdWFsKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpVQ2hhckJ1ZmZlclRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5nOjphZGQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkF0b21pY1N0cmluZzo6b3BlcmF0b3IgSWRlbnRpZmllcik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5nOjpvcGVyYXRvciBVU3RyaW5nKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpBdG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyk6IE1vdmVkIGhlcmUg
c28gd2UgZG9uJ3QgbmVlZCBEZXByZWNhdGVkU3RyaW5nLmgKKyAgICAgICAgaW4gdGhlIGhlYWRl
ci4KKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1N0cmluZzo6ZGVwcmVjYXRlZFN0cmluZyk6IERp
dHRvLgorCisgICAgICAgICogcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5oOiBSZW1vdmVkIFFD
aGFyOjpEaXJlY3Rpb24gZW51bSBhbmQgYWxsIHRoZSBEaXJYWFggdmFsdWVzLAorICAgICAgICBp
c0RpZ2l0LCBpc0xldHRlciwgaXNOdW1iZXIsIGlzTGV0dGVyT3JOdW1iZXIsIGlzUHVuY3QsIGRp
Z2l0VmFsdWUsIGFuZCBkaXJlY3Rpb24gZnVuY3Rpb25zLgorICAgICAgICAoUUNoYXI6OmlzU3Bh
Y2UpOiBDaGFuZ2VkIHRvIHVzZSB1X2NoYXJEaXJlY3Rpb24gaW5zdGVhZCBvZiBRQ2hhcjo6ZGly
ZWN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vRm9udC5oOiAoV2ViQ29yZTo6Rm9udDo6d2lk
dGgpOiBDaGFuZ2VkIFFDaGFyIHRvIFVDaGFyLgorICAgICAgICAqIHBsYXRmb3JtL0ZvbnQuY3Bw
OiAoV2ViQ29yZTo6Rm9udDo6d2lkdGgpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL0dy
YXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KTogQ2hhbmdlZCBR
Q2hhciB0byBVQ2hhci4gUmVtb3ZlZCBob3Jpem9udGFsQWxpZ25tZW50CisgICAgICAgIHBhcmFt
ZXRlciBmcm9tIHNpbXBsaWZpZWQgc3RyaW5nIGRyYXdpbmcgZW50cnkgcG9pbnQsIHNpbmNlIGl0
J3Mgbm90IHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdIaWdo
bGlnaHRGb3JUZXh0KTogQ2hhbmdlZCBRQ2hhciB0byBVQ2hhci4KKworICAgICAgICAqIHBsYXRm
b3JtL1BsYXRmb3JtU3RyaW5nLmg6IENoYW5nZWQgUUNoYXIgdG8gVUNoYXIuIFJlbW92ZWQgY29u
c3RydWN0b3IgdGhhdCBtYWtlcworICAgICAgICBhIFN0cmluZyBmcm9tIGEgc2luZ2xlIGNoYXJh
Y3Rlci4gUmVuYW1lZCB1bmljb2RlKCkgZnVuY3Rpb24gdG8gY2hhcmFjdGVycygpLiBBZGRlZAor
ICAgICAgICBhbiBhcHBlbmQgZnVuY3Rpb24gYW5kIGNoYW5nZWQgKz0gb3BlcmF0b3IgdG8ganVz
dCBjYWxsIHRoYXQuIEFkZGVkIGEgZm9sZENhc2UoKSBmdW5jdGlvbi4KKyAgICAgICAgUmVtb3Zl
ZCB0aGUgY29uY2F0ZW5hdGlvbiBvcGVyYXRvcnMgdGhhdCBhZGQgaW5kaXZpZHVhbCBzdHJpbmdz
IGJlZm9yZSBvciBhZnRlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9TdHJpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nOjpTdHJpbmcpOiBDaGFuZ2VkIFFDaGFyIHRvIFVDaGFyLgorICAg
ICAgICAoV2ViQ29yZTo6U3RyaW5nOjphcHBlbmQpOiBSZW5hbWVkIGZyb20gb3BlcmF0b3IrPSBh
bmQgcmVtb3ZlZCB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpv
cGVyYXRvcltdKTogQ2hhbmdlZCBRQ2hhciB0byBVQ2hhci4KKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZzo6Zm9sZENhc2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6cGVyY2Vu
dGFnZSk6IE1vcmUgb2YgdGhlIHNhbWUuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6OmNoYXJh
Y3RlcnMpOiBSZW5hbWVkIGZyb20gdW5pY29kZSgpLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5n
OjpkZXByZWNhdGVkU3RyaW5nKTogTW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZzo6c3ByaW50Zik6IEZpeGVkIG1pc3Rha2VzIGluIHRoZSBjb21tZW50cy4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0cmluZzo6aXNFbXB0eSk6IFR3ZWFrZWQgYSBiaXQuCisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcj09KTogTW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZzo6b3BlcmF0b3IgSWRlbnRpZmllcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nOjpvcGVyYXRvciBVU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9T
ZWdtZW50ZWRTdHJpbmcuaDogQ2hhbmdlZCBmcm9tIFFDaGFyIHRvIFVDaGFyLiBIYWQgdG8gaW5p
dGlhbGl6ZQorICAgICAgICBkYXRhIG1lbWJlcnMgdGhhdCBhcmUgbm93IFVDaGFyLgorICAgICAg
ICAqIHBsYXRmb3JtL1NlZ21lbnRlZFN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWdt
ZW50ZWRTdHJpbmc6Omxlbmd0aCk6IFVwZGF0ZWQgZm9yIGNoYW5nZSBmcm9tIFFDaGFyIHRvIFVD
aGFyLgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjphcHBlbmQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlNlZ21lbnRlZFN0cmluZzo6cHJlcGVuZCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjp0b1N0cmluZyk6IERpdHRvLgorCisgICAg
ICAgICogcGxhdGZvcm0vU3RyaW5nSGFzaC5oOiBVcGRhdGVkIHRvIHVzZSBVQ2hhciBpbnN0ZWFk
IG9mIFFDaGFyIGFuZCBmb3IgbmFtZSBjaGFuZ2VzLgorICAgICAgICBBbHNvIGNoYW5nZWQgdG8g
dXNlIGNhc2UgZm9sZGluZyBpbnRlYWQgb2YgbG93ZXJjYXNpbmcgZm9yIGNhc2UgaW5zZW5zaXRp
dmUgaGFzaGluZy4KKworICAgICAgICAqIHBsYXRmb3JtL1N0cmluZ0ltcGwuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5ld1VDaGFyVmVj
dG9yKTogQ2hhbmdlZCB0byBVQ2hhciBmcm9tIFFDaGFyLgorICAgICAgICAoV2ViQ29yZTo6ZGVs
ZXRlVUNoYXJWZWN0b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OlN0
cmluZ0ltcGwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmluaXQpOiBE
aXR0by4gQWxzbyByZW5hbWVkIGZyb20gaW5pdFdpdGhDaGFyIGFuZCBpbml0V2l0aFFDaGFyLgor
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6flN0cmluZ0ltcGwpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmFwcGVuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nSW1wbDo6aW5zZXJ0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJ
bXBsOjp0cnVuY2F0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6cmVt
b3ZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpzcGxpdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSk6
IERpdHRvLiBBbHNvIGFkZGVkIGNvbW1lbnQgYmVjYXVzZSB0aGlzCisgICAgICAgIGZ1bmN0aW9u
IHNlZW1zIGEgbGl0dGxlIGJyb2tlbi4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGVuZ3RoKTog
TW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnRvQ29vcmRz
QXJyYXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnRvTGVuZ3RoQXJy
YXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmlzTG93ZXIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6Omxvd2VyKTogUmV3cm90ZSB0byB1c2Ug
dV9zdHJUb0xvd2VyLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6dXBwZXIpOiBSZXdy
b3RlIHRvIHVzZSB1X3N0clRvVXBwZXIuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpm
b2xkQ2FzZSk6IEFkZGVkLiBVc2VzIHVfc3RyRm9sZENhc2UuCisgICAgICAgIChXZWJDb3JlOjpn
ZXRXb3JkQnJlYWtJdGVyYXRvcik6IENoYW5nZWQgdG8gdXNlIFVfRkFJTFVSRSBpbnN0ZWFkIG9m
IGFjY2VwdGluZyBvbmx5CisgICAgICAgIFVfWkVST19FUlJPUiBhcyBhIHN1Y2Nlc3MgY29kZS4K
KyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNhcGl0YWxpemUpOiBNb3JlIFFDaGFyIHRv
IFVDaGFyIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjp0b0ludCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6ZXF1YWwpOiBDaGFuZ2VkIGZyb20gUUNoYXIgdG8gVUNo
YXIgYW5kIHdhcyBjYXJlZnVsIHRvIHByZXNlcnZlIHRoZSBvbGQKKyAgICAgICAgc2VtYW50aWNz
IHdoZXJlICJoaWdoIEFTQ0lJIiBpcyB0cmVhdGVkIGFzIFUrMDA4MC1VKzAwRkYgZXZlbiB0aG91
Z2ggSSBkb24ndCBrbm93CisgICAgICAgIGlmIHRoaXMgZmVhdHVyZSBpcyBpbXBvcnRhbnQuCisg
ICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nQ2FzZSk6IERpdHRvLCBidXQgdXNlZCBjYXNl
IGZvbGRpbmcgaW5zdGVhZCBvZiBsb3dlcmNhc2luZworICAgICAgICBieSB1c2luZyB0aGUgdV9m
b2xkQ2FzZSBhbmQgdV9tZW1jYXNlY21wIGZ1bmN0aW9ucy4gQWxzbyByZW5hbWVkIGZyb20KKyAg
ICAgICAgZXF1YWxDYXNlSW5zZW5zaXRpdmUgZm9yIG1vcmUtY29uc2lzdGVudCBuYW1pbmcuCisg
ICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpmaW5kKTogRGl0dG8uIFVzZSBjYXNlIGZvbGRp
bmcgZm9yIHRoZSBjYXNlIGluc2Vuc2l0aXZlIGJyYW5jaC4KKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZ0ltcGw6OnJlcGxhY2UpOiBNb3JlIG9mIHRoZSBzYW1lLgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z0ltcGw6OmFzY2lpKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0Qm91bmRhcmll
cy5oOiBDaGFuZ2VkIGZyb20gUUNoYXIgdG8gVUNoYXIuCisgICAgICAgICogcGxhdGZvcm0vbWFj
L1RleHRCb3VuZGFyaWVzLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeSk6
IE1hZGUgdGhlIGNoYW5nZSB0byBVQ2hhciBhbmQgcmVtb3ZlZCBzb21lIHR5cGUgY2FzdHMuCisg
ICAgICAgIChXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmZpbmRTZW50ZW5jZUJvdW5kYXJ5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpmaW5kTmV4dFNlbnRlbmNlRnJvbUluZGV4KTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9UZXh0RW5jb2RpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0RW5jb2RpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjpiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9s
KTogQ2hhbmdlZCBmcm9tIFFDaGFyIHRvIFVDaGFyLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEVu
Y29kaW5nOjpmcm9tVW5pY29kZSk6IE1vcmUgb2YgdGhlIHNhbWUuCisgICAgICAgICogcGxhdGZv
cm0vbWFjL1RleHRFbmNvZGluZ01hYy5jcHA6IChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OmZyb21V
bmljb2RlKTogTW9yZQorICAgICAgICBvZiB0aGUgc2FtZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L21hYy9Gb250RmFtaWx5TWFjLm1tOiAoV2ViQ29yZTo6Rm9udEZhbWlseTo6Z2V0TlNGYW1pbHkp
OiBSZW1vdmVkIGEKKyAgICAgICAgbm93LXVubmVlZGVkIHR5cGUgY2FzdC4KKworICAgICAgICAq
IHBsYXRmb3JtL21hYy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0
aW9uUmVjdEZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1RleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0hpZ2hsaWdodEZvclRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6ZmxvYXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpjaGVja1Nl
bGVjdGlvblBvaW50KToKKyAgICAgICAgQ2hhbmdlZCBRQ2hhciB0byBVQ2hhciBhbmQgcmVtb3Zl
ZCBzb21lIG5vdy11bm5lZWRlZCB0eXBlIGNhc3RzLgorCisgICAgICAgICogZWRpdGluZy9SZWJh
bGFuY2VXaGl0ZXNwYWNlQ29tbWFuZC5jcHA6IChXZWJDb3JlOjppc1doaXRlc3BhY2UpOgorICAg
ICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwOiAoV2ViQ29yZTo6UmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6Om5leHRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydFdvcmRC
b3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjplbmRXb3JkQm91bmRhcnkpOgorICAgICAgICAo
V2ViQ29yZTo6cHJldmlvdXNXb3JkUG9zaXRpb25Cb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpuZXh0V29yZFBvc2l0aW9uQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRTZW50
ZW5jZUJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmVuZFNlbnRlbmNlQm91bmRhcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNTZW50ZW5jZVBvc2l0aW9uQm91bmRhcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6bmV4dFNlbnRlbmNlUG9zaXRpb25Cb3VuZGFyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpzdGFydE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mUGFyYWdy
YXBoKToKKyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXIuY3BwOiAoV2ViQ29yZTo6SFRNTFBhcnNl
cjo6aGFuZGxlRXJyb3IpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6cGFpbnRNYXJrZWRUZXh0QmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmlwVHJhaWxpbmdTcGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOiAocXVvdGVBbmRFc2NhcGVO
b25QcmludGFibGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwOiAoV2Vi
Q29yZTo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvYnJlYWtf
bGluZXMuaDogKFdlYkNvcmU6OmlzQnJlYWthYmxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvcmVu
ZGVyX3N0eWxlLmg6IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aXNDb2xsYXBzaWJsZVdoaXRlU3Bh
Y2UpOgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0LmNwcDogKFdlYkNvcmU6OlhTTFN0eWxl
U2hlZXQ6OnBhcnNlU3RyaW5nKToKKyAgICAgICAgKiB4bWwveG1saHR0cHJlcXVlc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0TUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q2hh
cnNldCk6CisgICAgICAgIENoYW5nZWQgUUNoYXIgdG8gVUNoYXIuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6Omlt
YWdlQ2hhbmdlZCk6IENoYW5nZWQgUUNoYXIgdG8gVUNoYXIuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbWFnZTo6cGFpbnQpOiBDaGFuZ2VkIGNhbGxlcnMgb2YgZHJhd1RleHQgdG8gbm8tbG9u
Z2VyIHBhc3MgMAorICAgICAgICBmb3IgdGhlIGhvcml6b250YWwgYWxpZ25tZW50LCBzaW5jZSBJ
IHJlbW92ZWQgdGhhdCBwYXJhbWV0ZXJzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRl
eHQuaDogQ2hhbmdlZCBRQ2hhciB0byBVQ2hhci4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKTogVXBk
YXRlIGZvciBuYW1lIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OlJlbmRl
clRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmFsbEFzY2lpKTog
UmVtb3ZlIHVuZWVkZWQgdW5pY29kZSgpIGFuZCBhbGxvdyB0aGUgdmFsdWUKKyAgICAgICAgVSsw
MDdGIHRvIGNvdW50IGFzIEFTQ0lJLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y2Fj
aGVXaWR0aHMpOiBDaGFuZ2VkIFFDaGFyIHRvIFVDaGFyLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUpOiBDaGFuZ2VkIGNvZGUgdGhhdCBkZWFscyB3aXRoIGRp
cmVjdGlvbiB0bworICAgICAgICB1c2UgdGhlIElDVSBkaXJlY3Rpb24gY2FsbHMuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp0cmltbWVkTWluTWF4V2lkdGgpOiBDaGFuZ2VkIFFDaGFy
IHRvIFVDaGFyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y2FsY01pbk1heFdpZHRo
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb250YWluc09ubHlXaGl0
ZXNwYWNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzZXRUZXh0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp3aWR0aCk6IERpdHRvLgorCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0RmllbGQ6OnVwZGF0ZUZyb21FbGVtZW50KTogUmVtb3ZlZCB1bm5lZWRlZCBR
Q2hhciBjYXN0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZpZWxkOjpjYWxjTWluTWF4
V2lkdGgpOiBDaGFuZ2VkIGZyb20gUUNoYXIgdG8gVUNoYXIuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvYmlkaS5oOgorICAgICAgICAqIHJlbmRlcmluZy9iaWRpLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJpZGlJdGVyYXRvcjo6QmlkaUl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlT
dGF0ZTo6QmlkaVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlDb250ZXh0OjpCaWRpQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpiaWRpTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpi
aWRpRmlyc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmlkaUl0ZXJhdG9yOjpjdXJyZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpZGlJdGVyYXRvcjo6ZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmFkZFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpjaGVja01pZHBvaW50cyk6CisgICAgICAg
IChXZWJDb3JlOjphcHBlbmRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6ZW1iZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnRhYldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpjb21wdXRlSG9yaXpvbnRhbFBvc2l0aW9uc0ZvckxpbmUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6
c2tpcE5vbkJyZWFraW5nU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNr
aXBXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpmaW5kTmV4dExp
bmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2hlY2tMaW5lc0ZvclRl
eHRPdmVyZmxvdyk6CisgICAgICAgIENoYW5nZWQgZnJvbSBRQ2hhciB0byBVQ2hhciBhbmQgYWxs
IGRpcmVjdGlvbiBmcm9tIFFDaGFyIGNvbnN0YW50cyB0byB0aGUKKyAgICAgICAgb25lcyBmcm9t
IElDVS4KKworICAgICAgICAqIHJlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaW5lRWRpdDo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VsZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0QXJlYTo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dEFyZWE6OnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEFyZWE6
OnRleHRXaXRoSGFyZExpbmVCcmVha3MpOgorICAgICAgICBHb3QgcmlkIG9mIG5vdy11bm5lZWRl
ZCBRQ2hhciB0eXBlIGNhc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFs
bHkpOiBVcGRhdGVkIGZvciBjaGFuZ2UgZnJvbSBRQ2hhcgorICAgICAgICB0byBVQ2hhci4KKyAg
ICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6IFVwZGF0ZWQgZm9yIHVuaWNvZGUo
KSAtPiBjaGFyYWN0ZXJzKCkgbmFtZSBjaGFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvcmVu
ZGVyX2xpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9Sb21hbik6IFVwZGF0ZWQgZnJvbSBR
Q2hhciB0byBVQ2hhci4KKyAgICAgICAgKFdlYkNvcmU6OnRvTGV0dGVyU3RyaW5nKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjp0b0hlYnJldyk6IE1vcmUgb2YgdGhlIHNhbWUsIGFsc28gY2xl
YW5lZCB1cCB0aGUgbG9naWMgYSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFy
a2VyOjpwYWludCk6IFJlbW92ZWQgdGhlIGFsaWdubWVudCBwYXJhbWV0ZXJzIGZyb20gdGhlCisg
ICAgICAgIHZhcmlvdXMgZnVuY3Rpb25zLiBBbHNvIHJlbW92ZWQgYWxsIHJlbGlhbmNlIG9uIHRo
ZSB3aWR0aC1tZWFzdXJpbmcgZnVuY3Rpb25zCisgICAgICAgIHRoYXQgdGFrZSBhIHN0cmluZy4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmNhbGNNaW5NYXhXaWR0aCk6IE1v
cmUgb2YgdGhlIHNhbWUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpnZXRS
ZWxhdGl2ZU1hcmtlclJlY3QpOiBEaXR0by4KKwogMjAwNi0wNS0wNyAgRGF2aWQgSHlhdHQgIDxo
eWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGZvciBidWd6aWxsYSBidWcgODA2MC4KSW5k
ZXg6IGNzcy9jc3NwYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3NwYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNDIxNikKKysrIGNzcy9jc3NwYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTcsMTggKzExNywxOCBAQAogdm9pZCBQYXJzZVN0cmluZzo6bG93ZXIoKQogewogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgIHN0cmluZ1tpXSA9IFFDaGFyKHN0
cmluZ1tpXSkubG93ZXIoKS51bmljb2RlKCk7CisgICAgICAgIGNoYXJhY3RlcnNbaV0gPSB1X3Rv
bG93ZXIoY2hhcmFjdGVyc1tpXSk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihj
b25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyKiBzdWZm
aXgpCiB7CiAgICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKSArIHN0cmxlbihwcmVmaXgp
ICsgc3RybGVuKHN1ZmZpeCkgKyAyOwogICAgIAotICAgIGRhdGEgPSAodW5zaWduZWQgc2hvcnQq
KWZhc3RNYWxsb2MobGVuZ3RoICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CisgICAgZGF0YSA9
IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhsZW5ndGggKiBzaXplb2YoVUNoYXIpKSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0cmxlbihwcmVmaXgpOyBpKyspCiAgICAg
ICAgIGRhdGFbaV0gPSBwcmVmaXhbaV07CiAgICAgCi0gICAgbWVtY3B5KGRhdGEgKyBzdHJsZW4o
cHJlZml4KSwgc3RyaW5nLnVuaWNvZGUoKSwgc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKHVuc2ln
bmVkIHNob3J0KSk7CisgICAgbWVtY3B5KGRhdGEgKyBzdHJsZW4ocHJlZml4KSwgc3RyaW5nLmNo
YXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSk7CiAKICAgICB1bnNp
Z25lZCBzdGFydCA9IHN0cmxlbihwcmVmaXgpICsgc3RyaW5nLmxlbmd0aCgpOwogICAgIHVuc2ln
bmVkIGVuZCA9IHN0YXJ0ICsgc3RybGVuKHN1ZmZpeCk7CkBAIC0yNTcwLDExICsyNTcwLDEyIEBA
CiAKICNpbmNsdWRlICJDU1NHcmFtbWFyLmgiCiAKLWludCBDU1NQYXJzZXI6OmxleCh2b2lkICpf
eXlsdmFsKSB7Ci0gICAgWVlTVFlQRSAqeXlsdmFsID0gKFlZU1RZUEUgKilfeXlsdmFsOworaW50
IENTU1BhcnNlcjo6bGV4KHZvaWQqIHl5bHZhbFdpdGhvdXRUeXBlKQoreworICAgIFlZU1RZUEUq
IHl5bHZhbCA9IHN0YXRpY19jYXN0PFlZU1RZUEUqPih5eWx2YWxXaXRob3V0VHlwZSk7CiAgICAg
aW50IHRva2VuID0gbGV4KCk7CiAgICAgaW50IGxlbmd0aDsKLSAgICB1bnNpZ25lZCBzaG9ydCAq
dCA9IHRleHQoJmxlbmd0aCk7CisgICAgVUNoYXIqIHQgPSB0ZXh0KCZsZW5ndGgpOwogCiAjaWZk
ZWYgVE9LRU5fREVCVUcKICAgICBxRGVidWcoIkNTU1Rva2VuaXplcjogZ290IHRva2VuICVkOiAn
JXMnIiwgdG9rZW4sIHRva2VuID09IEVORF9UT0tFTiA/ICIiIDogRGVwcmVjYXRlZFN0cmluZygo
UUNoYXIgKil0LCBsZW5ndGgpLmxhdGluMSgpKTsKQEAgLTI1OTMsNyArMjU5NCw3IEBACiAgICAg
Y2FzZSBESU1FTjoKICAgICBjYXNlIFVOSUNPREVSQU5HRToKICAgICBjYXNlIEZVTkNUSU9OOgot
ICAgICAgICB5eWx2YWwtPnN0cmluZy5zdHJpbmcgPSB0OworICAgICAgICB5eWx2YWwtPnN0cmlu
Zy5jaGFyYWN0ZXJzID0gdDsKICAgICAgICAgeXlsdmFsLT5zdHJpbmcubGVuZ3RoID0gbGVuZ3Ro
OwogICAgICAgICBicmVhazsKIApAQCAtMjY1MSw5ICsyNjUyLDkgQEAKICAgICByZXR1cm4gMDsK
IH0KIAotdW5zaWduZWQgc2hvcnQgKkNTU1BhcnNlcjo6dGV4dChpbnQgKmxlbmd0aCkKK1VDaGFy
KiBDU1NQYXJzZXI6OnRleHQoaW50ICpsZW5ndGgpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQgKnN0
YXJ0ID0geXl0ZXh0OworICAgIFVDaGFyKiBzdGFydCA9IHl5dGV4dDsKICAgICBpbnQgbCA9IHl5
bGVuZzsKICAgICBzd2l0Y2goeXlUb2spIHsKICAgICBjYXNlIFNUUklORzoKQEAgLTI2OTIsMTEg
KzI2OTMsMTEgQEAKICAgICB9CiAKICAgICAvLyBwcm9jZXNzIGVzY2FwZXMKLSAgICB1bnNpZ25l
ZCBzaG9ydCAqb3V0ID0gc3RhcnQ7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmVzY2FwZSA9IDA7Cisg
ICAgVUNoYXIqIG91dCA9IHN0YXJ0OworICAgIFVDaGFyKiBlc2NhcGUgPSAwOwogCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgKmN1cnJl
bnQgPSBzdGFydCtpOworICAgICAgICBVQ2hhciogY3VycmVudCA9IHN0YXJ0ICsgaTsKICAgICAg
ICAgaWYgKGVzY2FwZSA9PSBjdXJyZW50IC0gMSkgewogICAgICAgICAgICAgaWYgKCgqY3VycmVu
dCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknKSB8fAogICAgICAgICAgICAgICAgICAoKmN1cnJl
bnQgPj0gJ2EnICYmICpjdXJyZW50IDw9ICdmJykgfHwKQEAgLTI3MjcsNyArMjcyOCw3IEBACiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGVzY2FwZSkgewogICAgICAgICAgICAg
Ly8gYWRkIGVzY2FwZWQgY2hhcgotICAgICAgICAgICAgaW50IHVjID0gMDsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHVjID0gMDsKICAgICAgICAgICAgIGVzY2FwZSsrOwogICAgICAgICAgICAgd2hp
bGUgKGVzY2FwZSA8IGN1cnJlbnQpIHsKICAgICAgICAgICAgICAgICB1YyAqPSAxNjsKQEAgLTI3
MzcsNyArMjczOCw3IEBACiAgICAgICAgICAgICAvLyBjYW4ndCBoYW5kbGUgY2hhcnMgb3V0c2lk
ZSB1Y3MyCiAgICAgICAgICAgICBpZiAodWMgPiAweGZmZmYpCiAgICAgICAgICAgICAgICAgdWMg
PSAweGZmZmQ7Ci0gICAgICAgICAgICAqKG91dCsrKSA9ICh1bnNpZ25lZCBzaG9ydCl1YzsKKyAg
ICAgICAgICAgICpvdXQrKyA9IHVjOwogICAgICAgICAgICAgZXNjYXBlID0gMDsKICAgICAgICAg
ICAgIGlmICgqY3VycmVudCA9PSAnICcgfHwKICAgICAgICAgICAgICAgICAgKmN1cnJlbnQgPT0g
J1x0JyB8fApAQCAtMjc1MCwxMSArMjc1MSwxMSBAQAogICAgICAgICAgICAgZXNjYXBlID0gY3Vy
cmVudDsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgICoob3V0Kysp
ID0gKmN1cnJlbnQ7CisgICAgICAgICpvdXQrKyA9ICpjdXJyZW50OwogICAgIH0KICAgICBpZiAo
ZXNjYXBlKSB7CiAgICAgICAgIC8vIGFkZCBlc2NhcGVkIGNoYXIKLSAgICAgICAgaW50IHVjID0g
MDsKKyAgICAgICAgdW5zaWduZWQgdWMgPSAwOwogICAgICAgICBlc2NhcGUrKzsKICAgICAgICAg
d2hpbGUgKGVzY2FwZSA8IHN0YXJ0K2wpIHsKICAgICAgICAgICAgIHVjICo9IDE2OwpAQCAtMjc2
NCw3ICsyNzY1LDcgQEAKICAgICAgICAgLy8gY2FuJ3QgaGFuZGxlIGNoYXJzIG91dHNpZGUgdWNz
MgogICAgICAgICBpZiAodWMgPiAweGZmZmYpCiAgICAgICAgICAgICB1YyA9IDB4ZmZmZDsKLSAg
ICAgICAgKihvdXQrKykgPSAodW5zaWduZWQgc2hvcnQpdWM7CisgICAgICAgICpvdXQrKyA9IHVj
OwogICAgIH0KICAgICAKICAgICAqbGVuZ3RoID0gb3V0IC0gc3RhcnQ7CkBAIC0yODgzLDYgKzI4
ODQsMTEgQEAKICAgICByZXR1cm4gcnVsZTsKIH0KIAorRGVwcmVjYXRlZFN0cmluZyBkZXByZWNh
dGVkU3RyaW5nKGNvbnN0IFBhcnNlU3RyaW5nJiBwcykKK3sKKyAgICByZXR1cm4gRGVwcmVjYXRl
ZFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4ocHMuY2hhcmFjdGVycyksIHBz
Lmxlbmd0aCk7Cit9CisKICNkZWZpbmUgWVlfREVDTCBpbnQgQ1NTUGFyc2VyOjpsZXgoKQogI2Rl
ZmluZSB5eWNvbnN0IGNvbnN0CiB0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOwpJbmRleDogY3Nz
L2Nzc192YWx1ZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3NfdmFsdWVpbXBsLmNwcAko
cmV2aXNpb24gMTQyMTYpCisrKyBjc3MvY3NzX3ZhbHVlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDkgKzQ2LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRGVmaW5lZCBpbiBD
U1NHcmFtbWFyLnksIGJ1dCBub3QgaW4gYW55IGhlYWRlciwgc28ganVzdCBkZWNsYXJlIGl0IGhl
cmUgZm9yIG5vdy4KLWludCBnZXRQcm9wZXJ0eUlEKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbik7
CitpbnQgZ2V0UHJvcGVydHlJRChjb25zdCBjaGFyKiBzdHIsIGludCBsZW4pOwogCi1zdGF0aWMg
aW50IHByb3BlcnR5SUQoY29uc3QgU3RyaW5nICZzKQorc3RhdGljIGludCBwcm9wZXJ0eUlEKGNv
bnN0IFN0cmluZyYgcykKIHsKICAgICBjaGFyIGJ1ZmZlclttYXhDU1NQcm9wZXJ0eU5hbWVMZW5n
dGhdOwogCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIHJldHVybiAwOwogCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSAhPSBsZW47ICsraSkgewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBj
ID0gc1tpXS51bmljb2RlKCk7CisgICAgICAgIFVDaGFyIGMgPSBzW2ldOwogICAgICAgICBpZiAo
YyA9PSAwIHx8IGMgPj0gMHg3RikKICAgICAgICAgICAgIHJldHVybiAwOyAvLyBpbGxlZ2FsIGNo
YXJhY3RlcgogICAgICAgICBidWZmZXJbaV0gPSBjOwpAQCAtODUsNyArODUsNyBAQAogICAgIFN0
cmluZyBzID0gc3RyaW5nOwogICAgIHMucmVwbGFjZSgnXFwnLCAiXFxcXCIpOwogICAgIHMucmVw
bGFjZSgnXCcnLCAiXFwnIik7Ci0gICAgcmV0dXJuICdcJycgKyBzICsgJ1wnJzsKKyAgICByZXR1
cm4gIiciICsgcyArICInIjsKIH0KIAogQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Q1NTU3R5bGVEZWNs
YXJhdGlvbihDU1NSdWxlICpwYXJlbnQpCkluZGV4OiBjc3MvQ1NTR3JhbW1hci55Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGNzcy9DU1NHcmFtbWFyLnkJKHJldmlzaW9uIDE0MjE2KQorKysgY3NzL0NTU0dyYW1t
YXIueQkod29ya2luZyBjb3B5KQpAQCAtMzY5LDcgKzM2OSw3IEBACiA7CiAKIG1heWJlX25zX3By
ZWZpeDoKLS8qIGVtcHR5ICovIHsgJCQuc3RyaW5nID0gMDsgfQorLyogZW1wdHkgKi8geyAkJC5j
aGFyYWN0ZXJzID0gMDsgfQogfCBJREVOVCBXSElURVNQQUNFIHsgJCQgPSAkMTsgfQogOwogCkBA
IC01MjksOCArNTI5LDggQEAKICAgICA7CiAKIG5hbWVzcGFjZV9zZWxlY3RvcjoKLSAgICAvKiBl
bXB0eSAqLyAnfCcgeyAkJC5zdHJpbmcgPSAwOyAkJC5sZW5ndGggPSAwOyB9Ci0gICAgfCAnKicg
J3wnIHsgc3RhdGljIHVuc2lnbmVkIHNob3J0IHN0YXIgPSAnKic7ICQkLnN0cmluZyA9ICZzdGFy
OyAkJC5sZW5ndGggPSAxOyB9CisgICAgLyogZW1wdHkgKi8gJ3wnIHsgJCQuY2hhcmFjdGVycyA9
IDA7ICQkLmxlbmd0aCA9IDA7IH0KKyAgICB8ICcqJyAnfCcgeyBzdGF0aWMgVUNoYXIgc3RhciA9
ICcqJzsgJCQuY2hhcmFjdGVycyA9ICZzdGFyOyAkJC5sZW5ndGggPSAxOyB9CiAgICAgfCBJREVO
VCAnfCcgeyAkJCA9ICQxOyB9CiA7CiAKQEAgLTYwMCw4ICs2MDAsOCBAQAogICAgICAgICAkJCA9
IHN0cjsKICAgICB9CiAgICAgfCAnKicgewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQg
c3RhciA9ICcqJzsKLSAgICAgICAgJCQuc3RyaW5nID0gJnN0YXI7CisgICAgICAgIHN0YXRpYyBV
Q2hhciBzdGFyID0gJyonOworICAgICAgICAkJC5jaGFyYWN0ZXJzID0gJnN0YXI7CiAgICAgICAg
ICQkLmxlbmd0aCA9IDE7CiAgICAgfQogICA7CkluZGV4OiBjc3MvY3NzcGFyc2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gY3NzL2Nzc3BhcnNlci5oCShyZXZpc2lvbiAxNDIxNikKKysrIGNzcy9jc3NwYXJz
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQAogICAgIGNsYXNzIFN0eWxlTGlz
dDsKIAogICAgIHN0cnVjdCBQYXJzZVN0cmluZyB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0KiBz
dHJpbmc7CisgICAgICAgIFVDaGFyKiBjaGFyYWN0ZXJzOwogICAgICAgICBpbnQgbGVuZ3RoOwog
ICAgICAgICAKICAgICAgICAgdm9pZCBsb3dlcigpOwpAQCAtNjksMTQgKzY5LDEyIEBACiAgICAg
ICAgIGludCB1bml0OwogICAgIH07CiAKLSAgICBzdGF0aWMgaW5saW5lIERlcHJlY2F0ZWRTdHJp
bmcgZGVwcmVjYXRlZFN0cmluZyhjb25zdCBQYXJzZVN0cmluZyYgcHMpIHsKLSAgICAgICAgcmV0
dXJuIERlcHJlY2F0ZWRTdHJpbmcoKFFDaGFyICopcHMuc3RyaW5nLCBwcy5sZW5ndGgpOwotICAg
IH0KKyAgICBEZXByZWNhdGVkU3RyaW5nIGRlcHJlY2F0ZWRTdHJpbmcoY29uc3QgUGFyc2VTdHJp
bmcmKTsKICAgICBzdGF0aWMgaW5saW5lIFN0cmluZyBkb21TdHJpbmcoY29uc3QgUGFyc2VTdHJp
bmcmIHBzKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKFFDaGFyICopcHMuc3RyaW5nLCBwcy5s
ZW5ndGgpOworICAgICAgICByZXR1cm4gU3RyaW5nKHBzLmNoYXJhY3RlcnMsIHBzLmxlbmd0aCk7
CiAgICAgfQogICAgIHN0YXRpYyBpbmxpbmUgQXRvbWljU3RyaW5nIGF0b21pY1N0cmluZyhjb25z
dCBQYXJzZVN0cmluZyYgcHMpIHsKLSAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZyhwcy5zdHJp
bmcsIHBzLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBBdG9taWNTdHJpbmcocHMuY2hhcmFjdGVy
cywgcHMubGVuZ3RoKTsKICAgICB9CiAKICAgICBjbGFzcyBWYWx1ZUxpc3QgewpAQCAtMjAxLDcg
KzE5OSw3IEBACiAgICAgcHVibGljOgogICAgICAgICBpbnQgbGV4KHZvaWQqIHl5bHZhbCk7CiAg
ICAgICAgIGludCB0b2tlbigpIHsgcmV0dXJuIHl5VG9rOyB9Ci0gICAgICAgIHVuc2lnbmVkIHNo
b3J0KiB0ZXh0KGludCogbGVuZ3RoKTsKKyAgICAgICAgVUNoYXIqIHRleHQoaW50KiBsZW5ndGgp
OwogICAgICAgICBpbnQgbGV4KCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6CkBAIC0yMTEsMTIg
KzIwOSwxMiBAQAogCiAgICAgICAgIGJvb2wgaW5TaG9ydGhhbmQoKSBjb25zdCB7IHJldHVybiBt
X2luUGFyc2VTaG9ydGhhbmQ7IH0KIAotICAgICAgICB1bnNpZ25lZCBzaG9ydCogZGF0YTsKLSAg
ICAgICAgdW5zaWduZWQgc2hvcnQqIHl5dGV4dDsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQqIHl5
X2NfYnVmX3A7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IHl5X2hvbGRfY2hhcjsKKyAgICAgICAg
VUNoYXIqIGRhdGE7CisgICAgICAgIFVDaGFyKiB5eXRleHQ7CisgICAgICAgIFVDaGFyKiB5eV9j
X2J1Zl9wOworICAgICAgICBVQ2hhciB5eV9ob2xkX2NoYXI7CiAgICAgICAgIGludCB5eV9sYXN0
X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQqIHl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3M7CisgICAgICAgIFVDaGFyKiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOwogICAgICAg
ICBpbnQgeXlsZW5nOwogICAgICAgICBpbnQgeXlUb2s7CiAgICAgICAgIGludCB5eV9zdGFydDsK
SW5kZXg6IGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvY3Nzc3R5
bGVzZWxlY3Rvci5jcHAJKHJldmlzaW9uIDE0MjE2KQorKysgY3NzL2Nzc3N0eWxlc2VsZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsNyArNTU2LDcgQEAKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICBRQ29uc3RTdHJpbmcgY3UoYXR0ci51bmljb2RlKCksIGF0dHIubGVu
Z3RoKCkpOworICAgIFFDb25zdFN0cmluZyBjdShyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFy
Kj4oYXR0ci5jaGFyYWN0ZXJzKCkpLCBhdHRyLmxlbmd0aCgpKTsKICAgICBEZXByZWNhdGVkU3Ry
aW5nIHUgPSBjdS5zdHJpbmcoKTsKICAgICBpZiAoIXUuY29udGFpbnMoIjovLyIpKSB7CiAgICAg
ICAgIGlmICh1WzBdID09ICcvJykKSW5kZXg6IGNzcy9jc3NfdmFsdWVpbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY3NzL2Nzc192YWx1ZWltcGwuaAkocmV2aXNpb24gMTQyMTYpCisrKyBjc3MvY3NzX3Zh
bHVlaW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ2Fj
aGVkT2JqZWN0Q2xpZW50LmgiCiAjaW5jbHVkZSAiY3NzX2Jhc2UuaCIKICNpbmNsdWRlICJEZXBy
ZWNhdGVkUHRyTGlzdC5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKICNpbmNsdWRl
ICJEZXByZWNhdGVkVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvUGFzc1JlZlB0ci5o
PgogCkluZGV4OiBjc3MvY3NzaGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvY3NzaGVscGVy
LmNwcAkocmV2aXNpb24gMTQyMTYpCisrKyBjc3MvY3NzaGVscGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMjggKzM4LDI4IEBACiAgICAgaW50IG8gPSAwOwogICAgIGludCBsID0gaS0+bGVu
Z3RoKCk7CiAKLSAgICB3aGlsZSAobyA8IGwgJiYgKCppKVtvXS51bmljb2RlKCkgPD0gJyAnKSB7
CisgICAgd2hpbGUgKG8gPCBsICYmICgqaSlbb10gPD0gJyAnKSB7CiAgICAgICAgICsrbzsKICAg
ICAgICAgLS1sOwogICAgIH0KLSAgICB3aGlsZSAobCA+IDAgJiYgKCppKVtvK2wtMV0udW5pY29k
ZSgpIDw9ICcgJykKKyAgICB3aGlsZSAobCA+IDAgJiYgKCppKVtvK2wtMV0gPD0gJyAnKQogICAg
ICAgICAtLWw7CiAKICAgICBpZiAobCA+PSA1Ci0gICAgICAgICAgICAmJiAoKmkpW29dLmxvd2Vy
KCkgPT0gJ3UnCi0gICAgICAgICAgICAmJiAoKmkpW28gKyAxXS5sb3dlcigpID09ICdyJwotICAg
ICAgICAgICAgJiYgKCppKVtvICsgMl0ubG93ZXIoKSA9PSAnbCcKKyAgICAgICAgICAgICYmICgo
KmkpW29dID09ICd1JyB8fCAoKmkpW29dID09ICdVJykKKyAgICAgICAgICAgICYmICgoKmkpW28g
KyAxXSA9PSAncicgfHwgKCppKVtvICsgMV0gPT0gJ1InKQorICAgICAgICAgICAgJiYgKCgqaSlb
byArIDJdID09ICdsJyB8fCAoKmkpW28gKyAyXSA9PSAnTCcpCiAgICAgICAgICAgICAmJiAoKmkp
W28gKyAzXSA9PSAnKCcKICAgICAgICAgICAgICYmICgqaSlbbyArIGwgLSAxXSA9PSAnKScpIHsK
ICAgICAgICAgbyArPSA0OwogICAgICAgICBsIC09IDU7CiAgICAgfQogCi0gICAgd2hpbGUgKG8g
PCBsICYmICgqaSlbb10udW5pY29kZSgpIDw9ICcgJykgeworICAgIHdoaWxlIChvIDwgbCAmJiAo
KmkpW29dIDw9ICcgJykgewogICAgICAgICArK287CiAgICAgICAgIC0tbDsKICAgICB9Ci0gICAg
d2hpbGUgKGwgPiAwICYmICgqaSlbbytsLTFdLnVuaWNvZGUoKSA8PSAnICcpCisgICAgd2hpbGUg
KGwgPiAwICYmICgqaSlbbytsLTFdIDw9ICcgJykKICAgICAgICAgLS1sOwogCiAgICAgaWYgKGwg
Pj0gMiAmJiAoKmkpW29dID09ICgqaSlbbytsLTFdICYmICgoKmkpW29dID09ICdcJycgfHwgKCpp
KVtvXSA9PSAnXCInKSkgewpAQCAtNjcsMjMgKzY3LDIzIEBACiAgICAgICAgIGwgLT0gMjsKICAg
ICB9CiAKLSAgICB3aGlsZSAobyA8IGwgJiYgKCppKVtvXS51bmljb2RlKCkgPD0gJyAnKSB7Cisg
ICAgd2hpbGUgKG8gPCBsICYmICgqaSlbb10gPD0gJyAnKSB7CiAgICAgICAgICsrbzsKICAgICAg
ICAgLS1sOwogICAgIH0KLSAgICB3aGlsZSAobCA+IDAgJiYgKCppKVtvK2wtMV0udW5pY29kZSgp
IDw9ICcgJykKKyAgICB3aGlsZSAobCA+IDAgJiYgKCppKVtvK2wtMV0gPD0gJyAnKQogICAgICAg
ICAtLWw7CiAKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQsIDIwNDg+IGJ1ZmZlcihsKTsKKyAg
ICBWZWN0b3I8VUNoYXIsIDIwNDg+IGJ1ZmZlcihsKTsKIAogICAgIGludCBubCA9IDA7CiAgICAg
Zm9yIChpbnQgayA9IG87IGsgPCBvICsgbDsgaysrKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0
IGMgPSAoKmkpW2tdLnVuaWNvZGUoKTsKKyAgICAgICAgVUNoYXIgYyA9ICgqaSlba107CiAgICAg
ICAgIGlmIChjID4gJ1xyJykKICAgICAgICAgICAgIGJ1ZmZlcltubCsrXSA9IGM7CiAgICAgfQog
Ci0gICAgcmV0dXJuIG5ldyBTdHJpbmdJbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIqPihidWZm
ZXIuZGF0YSgpKSwgbmwpOworICAgIHJldHVybiBuZXcgU3RyaW5nSW1wbChidWZmZXIuZGF0YSgp
LCBubCk7CiB9CiAKIH0KSW5kZXg6IGJyaWRnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gYnJpZGdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gMTQyMTYpCisrKyBicmlkZ2UvbWFj
L0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxOCArNzgsMjAgQEAKIEBlbmQKIAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIG5hbWVzcGFjZSBLSlM6OkJpbmRpbmdzOwordXNp
bmcgbmFtZXNwYWNlIEtJTzsKIAotdXNpbmcgbmFtZXNwYWNlIEtKUzsKLXVzaW5nIG5hbWVzcGFj
ZSBCaW5kaW5nczsKK3VzaW5nIEtKUzo6SlNMb2NrOwordXNpbmcgS0pTOjpQYXVzZWRUaW1lb3V0
czsKK3VzaW5nIEtKUzo6U2F2ZWRCdWlsdGluczsKK3VzaW5nIEtKUzo6U2F2ZWRQcm9wZXJ0aWVz
OwogCi11c2luZyBuYW1lc3BhY2UgS0lPOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotTlNF
dmVudCAqRnJhbWVNYWM6Ol9jdXJyZW50RXZlbnQgPSBuaWw7CitOU0V2ZW50KiBGcmFtZU1hYzo6
X2N1cnJlbnRFdmVudCA9IG5pbDsKIAogc3RhdGljIE5TTXV0YWJsZURpY3Rpb25hcnkqIGNyZWF0
ZU5TRGljdGlvbmFyeShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgbWFwKQogewpAQCAt
MTE0LDcgKzExNiw3IEBACiAgICAgICAgIHJldHVybiAwOwogCiAgICAgU0VMIHNlbGVjdG9yID0g
TlVMTDsKLSAgICBzd2l0Y2ggKGtleVswVV0udW5pY29kZSgpKSB7CisgICAgc3dpdGNoIChrZXlb
MFVdKSB7CiAgICAgY2FzZSBOU1VwQXJyb3dGdW5jdGlvbktleToKICAgICAgICAgc2VsZWN0b3Ig
PSBAc2VsZWN0b3IobW92ZVVwOik7IGJyZWFrOwogICAgIGNhc2UgTlNEb3duQXJyb3dGdW5jdGlv
bktleToKQEAgLTYzMiw3ICs2MzQsNyBAQAogdm9pZCBGcmFtZU1hYzo6c2V0VGl0bGUoY29uc3Qg
U3RyaW5nICZ0aXRsZSkKIHsKICAgICBTdHJpbmcgdGV4dCA9IHRpdGxlOwotICAgIHRleHQucmVw
bGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKKyAgICB0ZXh0
LnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKIAogICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBbX2JyaWRnZSBzZXRUaXRsZTp0ZXh0XTsKQEAg
LTY0Miw3ICs2NDQsNyBAQAogdm9pZCBGcmFtZU1hYzo6c2V0U3RhdHVzQmFyVGV4dChjb25zdCBT
dHJpbmcmIHN0YXR1cykKIHsKICAgICBTdHJpbmcgdGV4dCA9IHN0YXR1czsKLSAgICB0ZXh0LnJl
cGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CisgICAgdGV4
dC5yZXBsYWNlKCdcXCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CiAgICAgCiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIFtfYnJpZGdlIHNldFN0YXR1c1RleHQ6
dGV4dF07CkBAIC03MzAsMTAgKzczMiwxMCBAQAogCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAg
aWYgKCFpdC5hdEVuZCgpKSB7ICAgICAgLy8gd2UgbWF5IGJlIHN0YXJ0aW5nIGF0IHRoZSBlbmQg
b2YgdGhlIGRvYywgYW5kIGFscmVhZHkgYnkgYXRFbmQKLSAgICAgICAgICAgIGNvbnN0IFFDaGFy
ICpjaGFycyA9IGl0LmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFy
cyA9IGl0LmNoYXJhY3RlcnMoKTsKICAgICAgICAgICAgIGludCBsZW4gPSBpdC5sZW5ndGgoKTsK
LSAgICAgICAgICAgIGlmIChsZW4gPiAxIHx8ICFjaGFyc1swXS5pc1NwYWNlKCkpIHsKLSAgICAg
ICAgICAgICAgICBOU1N0cmluZyAqY2h1bmsgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENo
YXJhY3RlcnNOb0NvcHk6KHVuaWNoYXIgKiljaGFycyBsZW5ndGg6bGVuIGZyZWVXaGVuRG9uZTpO
T107CisgICAgICAgICAgICBpZiAobGVuID4gMSB8fCAhUUNoYXIoY2hhcnNbMF0pLmlzU3BhY2Uo
KSkgeworICAgICAgICAgICAgICAgIE5TU3RyaW5nICpjaHVuayA9IFtbTlNTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25zdF9jYXN0PFVDaGFyKj4oY2hhcnMpIGxlbmd0
aDpsZW4gZnJlZVdoZW5Eb25lOk5PXTsKICAgICAgICAgICAgICAgICBOU1JhbmdlIG1pc3NwZWxs
aW5nID0gW2NoZWNrZXIgY2hlY2tTcGVsbGluZ09mU3RyaW5nOmNodW5rIHN0YXJ0aW5nQXQ6MCBs
YW5ndWFnZTpuaWwgd3JhcDpOTyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOltfYnJpZGdlIHNwZWxs
Q2hlY2tlckRvY3VtZW50VGFnXSB3b3JkQ291bnQ6TlVMTF07CiAgICAgICAgICAgICAgICAgW2No
dW5rIHJlbGVhc2VdOwogICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZy5sZW5ndGggPiAw
KSB7CkBAIC0xMjI2LDcgKzEyMjgsNyBAQAogdm9pZCBGcmFtZU1hYzo6cnVuSmF2YVNjcmlwdEFs
ZXJ0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBTdHJpbmcgdGV4dCA9IG1lc3NhZ2U7
Ci0gICAgdGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9s
KCkpOworICAgIHRleHQucmVwbGFjZSgnXFwnLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkp
OwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBbX2JyaWRnZSBydW5KYXZh
U2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOnRleHRdOwogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CkBAIC0xMjM1LDcgKzEyMzcsNyBAQAogYm9vbCBGcmFtZU1hYzo6cnVuSmF2YVNj
cmlwdENvbmZpcm0oY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIFN0cmluZyB0ZXh0ID0g
bWVzc2FnZTsKLSAgICB0ZXh0LnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVu
Y3lTeW1ib2woKSk7CisgICAgdGV4dC5yZXBsYWNlKCdcXCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lT
eW1ib2woKSk7CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgcmV0dXJu
IFtfYnJpZGdlIHJ1bkphdmFTY3JpcHRDb25maXJtUGFuZWxXaXRoTWVzc2FnZTp0ZXh0XTsKQEAg
LTEyNDcsOSArMTI0OSw5IEBACiBib29sIEZyYW1lTWFjOjpydW5KYXZhU2NyaXB0UHJvbXB0KGNv
bnN0IFN0cmluZyYgcHJvbXB0LCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiBy
ZXN1bHQpCiB7CiAgICAgU3RyaW5nIHByb21wdFRleHQgPSBwcm9tcHQ7Ci0gICAgcHJvbXB0VGV4
dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOworICAg
IHByb21wdFRleHQucmVwbGFjZSgnXFwnLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwog
ICAgIFN0cmluZyBkZWZhdWx0VmFsdWVUZXh0ID0gZGVmYXVsdFZhbHVlOwotICAgIGRlZmF1bHRW
YWx1ZVRleHQucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgp
KTsKKyAgICBkZWZhdWx0VmFsdWVUZXh0LnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXNDdXJyZW5j
eVN5bWJvbCgpKTsKIAogICAgIGJvb2wgb2s7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwpAQCAtMTI2MCw3ICsxMjYyLDcgQEAKIAogICAgIGlmIChvaykgewogICAgICAgICByZXN1
bHQgPSBTdHJpbmcocmV0dXJuZWRUZXh0KTsKLSAgICAgICAgcmVzdWx0LnJlcGxhY2UoYmFja3Ns
YXNoQXNDdXJyZW5jeVN5bWJvbCgpLCBRQ2hhcignXFwnKSk7CisgICAgICAgIHJlc3VsdC5yZXBs
YWNlKGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSwgJ1xcJyk7CiAgICAgfQogCiAgICAgcmV0
dXJuIG9rOwpAQCAtMjI4Myw3ICsyMjg1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHQgKz0gc3RyLm1pZChydW5TdGFydCwgcnVuRW5kLXJ1blN0YXJ0KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFtwZW5kaW5nU3R5bGVkU3BhY2UgcmVsZWFzZV07CiAgICAgICAgICAgICAgICAg
ICAgICAgICBwZW5kaW5nU3R5bGVkU3BhY2UgPSBuaWw7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhZGRlZFNwYWNlID0gc3RyW3J1bkVuZC0xXS5kaXJlY3Rpb24oKSA9PSBRQ2hhcjo6RGlyV1M7
CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZFNwYWNlID0gdV9jaGFyRGlyZWN0aW9uKHN0
cltydW5FbmQgLSAxXS51bmljb2RlKCkpID09IFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlclRleHQqIHRleHRPYmogPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0
Kj4ocmVuZGVyZXIpOwpAQCAtMjMxOCw3ICsyMzIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5lZWRTcGFjZSA9IG5leHRSdW5TdGFydCA+IHJ1bkVuZDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwZW5kaW5nU3R5bGVkU3BhY2UgcmVsZWFz
ZV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nU3R5bGVkU3Bh
Y2UgPSBuaWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZFNwYWNl
ID0gc3RyW3J1bkVuZC0xXS5kaXJlY3Rpb24oKSA9PSBRQ2hhcjo6RGlyV1M7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZFNwYWNlID0gdV9jaGFyRGlyZWN0aW9uKHN0
cltydW5FbmQgLSAxXS51bmljb2RlKCkpID09IFVfV0hJVEVfU1BBQ0VfTkVVVFJBTDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gLTE7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGVuZCAhPSAtMSAmJiBydW5FbmQgPj0gZW5kKQpAQCAtMjMyOCw3ICsyMzMwLDcgQEAKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UoUUNoYXIoJ1xcJyksIHJlbmRlcmVyLT5iYWNrc2xh
c2hBc0N1cnJlbmN5U3ltYm9sKCkpOworICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZSgnXFwn
LCByZW5kZXJlci0+YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKICAgICAKICAgICAgICAg
ICAgICAgICBpZiAodGV4dC5sZW5ndGgoKSA+IDAgfHwgbmVlZFNwYWNlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmF0dHJzID0gW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XTsKQEAgLTMxMDUsMTAgKzMxMDcsMTAgQEAKICAgICBXb3JkQXdhcmVJ
dGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSk7CiAgICAgCiAgICAgd2hpbGUgKCFpdC5hdEVu
ZCgpKSB7ICAgICAgLy8gd2UgbWF5IGJlIHN0YXJ0aW5nIGF0IHRoZSBlbmQgb2YgdGhlIGRvYywg
YW5kIGFscmVhZHkgYnkgYXRFbmQKLSAgICAgICAgY29uc3QgUUNoYXIgKmNoYXJzID0gaXQuY2hh
cmFjdGVycygpOworICAgICAgICBjb25zdCBVQ2hhciogY2hhcnMgPSBpdC5jaGFyYWN0ZXJzKCk7
CiAgICAgICAgIGludCBsZW4gPSBpdC5sZW5ndGgoKTsKLSAgICAgICAgaWYgKGxlbiA+IDEgfHwg
IWNoYXJzWzBdLmlzU3BhY2UoKSkgewotICAgICAgICAgICAgTlNTdHJpbmcgKmNodW5rID0gW1tO
U1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5Oih1bmljaGFyICopY2hhcnMg
bGVuZ3RoOmxlbiBmcmVlV2hlbkRvbmU6Tk9dOworICAgICAgICBpZiAobGVuID4gMSB8fCAhUUNo
YXIoY2hhcnNbMF0pLmlzU3BhY2UoKSkgeworICAgICAgICAgICAgTlNTdHJpbmcgKmNodW5rID0g
W1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8VUNo
YXIqPihjaGFycykgbGVuZ3RoOmxlbiBmcmVlV2hlbkRvbmU6Tk9dOwogICAgICAgICAgICAgaW50
IHN0YXJ0SW5kZXggPSAwOwogICAgICAgICAgICAgLy8gTG9vcCBvdmVyIHRoZSBjaHVuayB0byBm
aW5kIGVhY2ggbWlzc3BlbGxpbmcgaW4gaXQuCiAgICAgICAgICAgICB3aGlsZSAoc3RhcnRJbmRl
eCA8IGxlbikgewpAQCAtMzQwMiw3ICszNDA0LDcgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBTdHJpbmcgdGV4dCA9IGV2ZW50LT5yZXN1bHQoKTsKLSAgICB0ZXh0LnJlcGxhY2UoUUNo
YXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CisgICAgdGV4dC5yZXBsYWNl
KCdcXCcsIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CiAKICAgICByZXR1cm4gW19icmlk
Z2UgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsV2l0aE1lc3NhZ2U6dGV4dF07CiAKSW5kZXg6
IGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9t
YWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCShyZXZpc2lvbiAxNDIxNikKKysrIGJyaWRnZS9tYWMv
V2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NDgsMTQgKzc0OCwxNCBA
QAogLSAoTlNTdHJpbmcgKilzZWxlY3RlZFN0cmluZwogewogICAgIFN0cmluZyB0ZXh0ID0gbV9m
cmFtZS0+c2VsZWN0ZWRUZXh0KCk7Ci0gICAgdGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBtX2Zy
YW1lLT5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOworICAgIHRleHQucmVwbGFjZSgnXFwn
LCBtX2ZyYW1lLT5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwogICAgIHJldHVybiBbWyhO
U1N0cmluZyopdGV4dCBjb3B5XSBhdXRvcmVsZWFzZV07CiB9CiAKIC0gKE5TU3RyaW5nICopc3Ry
aW5nRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICBTdHJpbmcgdGV4dCA9IHBsYWlu
VGV4dChbcmFuZ2UgX3JhbmdlXSk7Ci0gICAgdGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBtX2Zy
YW1lLT5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOworICAgIHRleHQucmVwbGFjZSgnXFwn
LCBtX2ZyYW1lLT5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwogICAgIHJldHVybiBbWyhO
U1N0cmluZyopdGV4dCBjb3B5XSBhdXRvcmVsZWFzZV07CiB9CiAKSW5kZXg6IHhtbC9YU0xTdHls
ZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB4bWwvWFNMU3R5bGVTaGVldC5jcHAJKHJldmlzaW9u
IDE0MjE2KQorKysgeG1sL1hTTFN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTks
MTMgKzExOSwxMyBAQAogYm9vbCBYU0xTdHlsZVNoZWV0OjpwYXJzZVN0cmluZyhjb25zdCBTdHJp
bmcgJnN0cmluZywgYm9vbCBzdHJpY3QpCiB7CiAgICAgLy8gUGFyc2UgaW4gYSBzaW5nbGUgY2h1
bmsgaW50byBhbiB4bWxEb2NQdHIKLSAgICBjb25zdCBRQ2hhciBCT00oMHhGRUZGKTsKKyAgICBj
b25zdCBVQ2hhciBCT00oMHhGRUZGKTsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEJPTUhpZ2hC
eXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KCZCT00pOwogICAg
IHNldExvYWRlckZvckxpYlhNTENhbGxiYWNrcyhkb2NMb2FkZXIoKSk7CiAgICAgaWYgKCFtX3N0
eWxlc2hlZXREb2NUYWtlbikKICAgICAgICAgeG1sRnJlZURvYyhtX3N0eWxlc2hlZXREb2MpOwog
ICAgIG1fc3R5bGVzaGVldERvY1Rha2VuID0gZmFsc2U7Ci0gICAgbV9zdHlsZXNoZWV0RG9jID0g
eG1sUmVhZE1lbW9yeShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIgKj4oc3RyaW5nLnVuaWNv
ZGUoKSksIHN0cmluZy5sZW5ndGgoKSAqIHNpemVvZihRQ2hhciksCisgICAgbV9zdHlsZXNoZWV0
RG9jID0geG1sUmVhZE1lbW9yeShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcu
Y2hhcmFjdGVycygpKSwgc3RyaW5nLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSwKICAgICAgICAg
bV9vd25lckRvY3VtZW50LT5VUkwoKS5hc2NpaSgpLAogICAgICAgICBCT01IaWdoQnl0ZSA9PSAw
eEZGID8gIlVURi0xNkxFIiA6ICJVVEYtMTZCRSIsIAogICAgICAgICBYTUxfUEFSU0VfTk9FTlQg
fCBYTUxfUEFSU0VfRFREQVRUUiB8IFhNTF9QQVJTRV9OT0VSUk9SIHwgWE1MX1BBUlNFX05PV0FS
TklORyB8IFhNTF9QQVJTRV9OT0NEQVRBKTsKSW5kZXg6IHhtbC94bWxodHRwcmVxdWVzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0geG1sL3htbGh0dHByZXF1ZXN0LmNwcAkocmV2aXNpb24gMTQyMTYpCisr
KyB4bWwveG1saHR0cHJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxMiArODUsMTMg
QEAKICAgICBTdHJpbmcgbWltZVR5cGU7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gY29udGVudFR5
cGVTdHJpbmcubGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSAwOyBvZmZzZXQg
PCBsZW5ndGg7IG9mZnNldCsrKSB7Ci0gICAgICAgIFFDaGFyIGMgPSBjb250ZW50VHlwZVN0cmlu
Z1tvZmZzZXRdOworICAgICAgICBVQ2hhciBjID0gY29udGVudFR5cGVTdHJpbmdbb2Zmc2V0XTsK
ICAgICAgICAgaWYgKGMgPT0gJzsnKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGVsc2Ug
aWYgKGMuaXNTcGFjZSgpKSAvLyBGSVhNRTogVGhpcyBzZWVtcyB3cm9uZywgIiAiIGlzIGFuIGlu
dmFsaWQgTUlNRSB0eXBlIGNoYXJhY3RlciBhY2NvcmRpbmcgdG8gUkZDIDIwNDUuICBidWcgODY0
NAorICAgICAgICBlbHNlIGlmIChRQ2hhcihjKS5pc1NwYWNlKCkpIC8vIEZJWE1FOiBUaGlzIHNl
ZW1zIHdyb25nLCAiICIgaXMgYW4gaW52YWxpZCBNSU1FIHR5cGUgY2hhcmFjdGVyIGFjY29yZGlu
ZyB0byBSRkMgMjA0NS4gIGJ1ZyA4NjQ0CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
bWltZVR5cGUgKz0gU3RyaW5nKGMpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHZlcnkg
c2xvdyB3YXkgdG8gYnVpbGQgYSBzdHJpbmcsIGdpdmVuIFdlYkNvcmU6OlN0cmluZydzIGltcGxl
bWVudGF0aW9uLgorICAgICAgICBtaW1lVHlwZSArPSBTdHJpbmcoJmMsIDEpOwogICAgIH0KICAg
ICByZXR1cm4gbWltZVR5cGU7CiB9CkBAIC0xMDYsNyArMTA3LDcgQEAKICAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKICAgICAgICAgCiAgICAgICAgIC8vIGlzIHdoYXQgd2UgZm91bmQgYSBi
ZWdpbm5pbmcgb2YgYSB3b3JkPwotICAgICAgICBpZiAoY29udGVudFR5cGVTdHJpbmdbcG9zLTFd
LnVuaWNvZGUoKSA+ICcgJyAmJiBjb250ZW50VHlwZVN0cmluZ1twb3MtMV0gIT0gJzsnKSB7Cisg
ICAgICAgIGlmIChjb250ZW50VHlwZVN0cmluZ1twb3MtMV0gPiAnICcgJiYgY29udGVudFR5cGVT
dHJpbmdbcG9zLTFdICE9ICc7JykgewogICAgICAgICAgICAgcG9zICs9IDc7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMTE0LDE4ICsxMTUsMTggQEAKICAgICAgICAgcG9z
ICs9IDc7CiAKICAgICAgICAgLy8gc2tpcCB3aGl0ZXNwYWNlCi0gICAgICAgIHdoaWxlIChwb3Mg
IT0gbGVuZ3RoICYmIGNvbnRlbnRUeXBlU3RyaW5nW3Bvc10udW5pY29kZSgpIDw9ICcgJykKKyAg
ICAgICAgd2hpbGUgKHBvcyAhPSBsZW5ndGggJiYgY29udGVudFR5cGVTdHJpbmdbcG9zXSA8PSAn
ICcpCiAgICAgICAgICAgICArK3BvczsKICAgICAKICAgICAgICAgaWYgKGNvbnRlbnRUeXBlU3Ry
aW5nW3BvcysrXSAhPSAnPScpIC8vIHRoaXMgImNoYXJzZXQiIHN1YnN0cmluZyB3YXNuJ3QgYSBw
YXJhbWV0ZXIgbmFtZSwgYnV0IHRoZXJlIG1heSBiZSBvdGhlcnMKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIHdoaWxlIChwb3MgIT0gbGVuZ3RoICYmIChjb250ZW50VHlwZVN0cmlu
Z1twb3NdLnVuaWNvZGUoKSA8PSAnICcgfHwgY29udGVudFR5cGVTdHJpbmdbcG9zXSA9PSAnIicg
fHwgY29udGVudFR5cGVTdHJpbmdbcG9zXSA9PSAnXCcnKSkKKyAgICAgICAgd2hpbGUgKHBvcyAh
PSBsZW5ndGggJiYgKGNvbnRlbnRUeXBlU3RyaW5nW3Bvc10gPD0gJyAnIHx8IGNvbnRlbnRUeXBl
U3RyaW5nW3Bvc10gPT0gJyInIHx8IGNvbnRlbnRUeXBlU3RyaW5nW3Bvc10gPT0gJ1wnJykpCiAg
ICAgICAgICAgICArK3BvczsKIAogICAgICAgICAvLyB3ZSBkb24ndCBoYW5kbGUgc3BhY2VzIHdp
dGhpbiBxdW90ZWQgcGFyYW1ldGVyIHZhbHVlcywgYmVjYXVzZSBjaGFyc2V0IG5hbWVzIGNhbm5v
dCBoYXZlIGFueQogICAgICAgICBpbnQgZW5kcG9zID0gcG9zOwotICAgICAgICB3aGlsZSAocG9z
ICE9IGxlbmd0aCAmJiBjb250ZW50VHlwZVN0cmluZ1tlbmRwb3NdLnVuaWNvZGUoKSA+ICcgJyAm
JiBjb250ZW50VHlwZVN0cmluZ1tlbmRwb3NdICE9ICciJyAmJiBjb250ZW50VHlwZVN0cmluZ1tl
bmRwb3NdICE9ICdcJycgJiYgY29udGVudFR5cGVTdHJpbmdbZW5kcG9zXSAhPSAnOycpCisgICAg
ICAgIHdoaWxlIChwb3MgIT0gbGVuZ3RoICYmIGNvbnRlbnRUeXBlU3RyaW5nW2VuZHBvc10gPiAn
ICcgJiYgY29udGVudFR5cGVTdHJpbmdbZW5kcG9zXSAhPSAnIicgJiYgY29udGVudFR5cGVTdHJp
bmdbZW5kcG9zXSAhPSAnXCcnICYmIGNvbnRlbnRUeXBlU3RyaW5nW2VuZHBvc10gIT0gJzsnKQog
ICAgICAgICAgICAgKytlbmRwb3M7CiAgICAgCiAgICAgICAgIHJldHVybiBjb250ZW50VHlwZVN0
cmluZy5zdWJzdHJpbmcocG9zLCBlbmRwb3MtcG9zKTsKSW5kZXg6IGt3cS9LV1FMb2FkZXIubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3dxL0tXUUxvYWRlci5tbQkocmV2aXNpb24gMTQyMTYpCisrKyBrd3Ev
S1dRTG9hZGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyMSArMjYsMTkgQEAKICNpbXBvcnQg
ImNvbmZpZy5oIgogI2ltcG9ydCAiS1dRTG9hZGVyLmgiCiAKKyNpbXBvcnQgIkJsb2NrRXhjZXB0
aW9ucy5oIgogI2ltcG9ydCAiQ2FjaGUuaCIKICNpbXBvcnQgIkNhY2hlZEltYWdlLmgiCiAjaW1w
b3J0ICJEb2NMb2FkZXIuaCIKICNpbXBvcnQgIkZvdW5kYXRpb25FeHRyYXMuaCIKLSNpbXBvcnQg
IkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiRnJhbWVNYWMuaCIKICNpbXBvcnQgIktXUUZv
cm1EYXRhLmgiCi0jaW1wb3J0ICJUcmFuc2ZlckpvYi5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgog
I2ltcG9ydCAiS1dRUmVzb3VyY2VMb2FkZXIuaCIKLSNpbXBvcnQgIkZyYW1lTWFjLmgiCisjaW1w
b3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJSZXF1ZXN0LmgiCisjaW1wb3J0ICJUcmFuc2Zlckpv
Yi5oIgogI2ltcG9ydCAiV2ViQ29yZUZyYW1lQnJpZGdlLmgiCiAjaW1wb3J0ICJsb2FkZXIuaCIK
LSNpbXBvcnQgImxvYWRlci5oIgotCiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9uc2Uu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yMTUsMzcgKzIxMywxOCBAQAogICAg
IH0KIH0KIAotI2RlZmluZSBMT0NBTF9TVFJJTkdfQlVGRkVSX1NJWkUgMTAyNAotCi1ib29sIEtX
UUlzUmVzcG9uc2VVUkxFcXVhbFRvVVJMKE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlLCBjb25zdCBX
ZWJDb3JlOjpTdHJpbmcgJm1fdXJsKQorYm9vbCBLV1FJc1Jlc3BvbnNlVVJMRXF1YWxUb1VSTChO
U1VSTFJlc3BvbnNlICpyZXNwb25zZSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtX3VybCkKIHsK
LSAgICB1bmljaGFyIF9idWZmZXJbTE9DQUxfU1RSSU5HX0JVRkZFUl9TSVpFXTsKLSAgICB1bmlj
aGFyICp1cmxTdHJpbmdDaGFyYWN0ZXJzOwotICAgIAogICAgIE5TVVJMICpyZXNwb25zZVVSTCA9
IFsoTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlIFVSTF07CiAgICAgTlNTdHJpbmcgKnVybFN0cmlu
ZyA9IFtyZXNwb25zZVVSTCBhYnNvbHV0ZVN0cmluZ107CiAKLSAgICBpZiAobV91cmwubGVuZ3Ro
KCkgIT0gW3VybFN0cmluZyBsZW5ndGhdKQorICAgIHNpemVfdCBsZW5ndGggPSBtX3VybC5sZW5n
dGgoKTsKKyAgICBpZiAobGVuZ3RoICE9IFt1cmxTdHJpbmcgbGVuZ3RoXSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAvLyBOYXN0eSBoYWNrIHRvIGRpcmVjdGx5IGNvbXBh
cmUgc3RyaW5ncyBidWZmZXJzIG9mIE5TU3RyaW5nCi0gICAgLy8gYW5kIFN0cmluZy4gIFdlIGRv
IHRoaXMgZm9yIHNwZWVkLgotICAgIGlmIChbdXJsU3RyaW5nIGxlbmd0aF0gPiBMT0NBTF9TVFJJ
TkdfQlVGRkVSX1NJWkUpIHsKLSAgICAgICAgdXJsU3RyaW5nQ2hhcmFjdGVycyA9ICh1bmljaGFy
ICopZmFzdE1hbGxvYyhzaXplb2YodW5pY2hhcikqW3VybFN0cmluZyBsZW5ndGhdKTsKLSAgICB9
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHVybFN0cmluZ0NoYXJhY3RlcnMgPSBfYnVmZmVyOwotICAg
IH0KLSAgICBbdXJsU3RyaW5nIGdldENoYXJhY3RlcnM6dXJsU3RyaW5nQ2hhcmFjdGVyc107Ci0g
ICAgCi0gICAgYm9vbCByZXQgPSBmYWxzZTsKLSAgICBpZighbWVtY21wKHVybFN0cmluZ0NoYXJh
Y3RlcnMsIG1fdXJsLnVuaWNvZGUoKSwgbV91cmwubGVuZ3RoKCkqc2l6ZW9mKFFDaGFyKSkpCi0g
ICAgICAgIHJldCA9IHRydWU7Ci0gICAgCi0gICAgaWYgKHVybFN0cmluZ0NoYXJhY3RlcnMgIT0g
X2J1ZmZlcikKLSAgICAgICAgZmFzdEZyZWUodXJsU3RyaW5nQ2hhcmFjdGVycyk7Ci0gICAgICAg
IAotICAgIHJldHVybiByZXQ7CisKKyAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IGJ1ZmZlcihsZW5n
dGgpOworICAgIFt1cmxTdHJpbmcgZ2V0Q2hhcmFjdGVyczpidWZmZXIuZGF0YSgpXTsgICAgCisg
ICAgcmV0dXJuICFtZW1jbXAoYnVmZmVyLmRhdGEoKSwgbV91cmwuY2hhcmFjdGVycygpLCBsZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKIH0KIAogRGVwcmVjYXRlZFN0cmluZyBLV1FSZXNwb25zZVVS
TChOU1VSTFJlc3BvbnNlICpyZXNwb25zZSkKSW5kZXg6IGt3cS9LV1FUZXh0U3RyZWFtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrd3EvS1dRVGV4dFN0cmVhbS5jcHAJKHJldmlzaW9uIDE0MjE2KQorKysg
a3dxL0tXUVRleHRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiS1dRVGV4dFN0cmVhbS5oIgogCisjaW5jbHVk
ZSAiRGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogCkluZGV4OiBrd3EvV2ViQ29yZUFYT2JqZWN0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGt3cS9XZWJDb3JlQVhPYmplY3QubW0JKHJldmlzaW9uIDE0MjE2KQorKysga3dxL1dl
YkNvcmVBWE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI2OCw3ICsxMjY4LDcgQEAKICAg
ICByZXR1cm4gYW5jaG9yLT5yZW5kZXJlcigpLT5kb2N1bWVudCgpLT5nZXRBY2NPYmplY3RDYWNo
ZSgpLT5nZXQoYW5jaG9yLT5yZW5kZXJlcigpKTsKIH0KIAotc3RhdGljIHZvaWQgQVhBdHRyaWJ1
dGVkU3RyaW5nQXBwZW5kVGV4dCAoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqYXR0clN0cmlu
ZywgTm9kZSAqbm9kZUltcGwsIGNvbnN0IFFDaGFyICpjaGFycywgaW50IGxlbmd0aCkKK3N0YXRp
YyB2b2lkIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyogYXR0clN0cmluZywgTm9kZSogbm9kZUltcGwsIGNvbnN0IFVDaGFyKiBjaGFycywgaW50
IGxlbmd0aCkKIHsKICAgICAvLyBza2lwIGludmlzaWJsZSB0ZXh0CiAgICAgaWYgKCFub2RlSW1w
bC0+cmVuZGVyZXIoKSkKQEAgLTEyNzgsNyArMTI3OCw3IEBACiAgICAgTlNSYW5nZSBhdHRyU3Ry
aW5nUmFuZ2UgPSBOU01ha2VSYW5nZShbYXR0clN0cmluZyBsZW5ndGhdLCBsZW5ndGgpOwogICAg
IAogICAgIC8vIGFwcGVuZCB0aGUgc3RyaW5nIGZyb20gdGhpcyBub2RlCi0gICAgW1thdHRyU3Ry
aW5nIG11dGFibGVTdHJpbmddIGFwcGVuZFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJh
Y3RlcnM6KGNvbnN0IFVuaUNoYXIqKWNoYXJzIGxlbmd0aDpsZW5ndGhdXTsKKyAgICBbW2F0dHJT
dHJpbmcgbXV0YWJsZVN0cmluZ10gYXBwZW5kU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoQ2hh
cmFjdGVyczpjaGFycyBsZW5ndGg6bGVuZ3RoXV07CiAKICAgICAvLyBhZGQgbmV3IGF0dHJpYnV0
ZXMgYW5kIHJlbW92ZSBpcnJlbGV2YW50IGluaGVyaXRlZCBvbmVzCiAgICAgLy8gTk9URTogY29s
b3IgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgYmVjYXVzZSAtW05TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlOiB2YWx1ZTogcmFuZ2U6XSBkb2VzIG5vdCBtZXJn
ZQpAQCAtMTM1MCw5ICsxMzUwLDkgQEAKICAgICAgICAgCiAgICAgICAgIC8vIG5vbi16ZXJvIGxl
bmd0aCBtZWFucyB0ZXh0dWFsIG5vZGUsIHplcm8gbGVuZ3RoIG1lYW5zIHJlcGxhY2VkIG5vZGUg
KEFLQSAiYXR0YWNobWVudHMiIGluIEFYKQogICAgICAgICBpZiAoaXQubGVuZ3RoKCkgIT0gMCkg
ewotICAgICAgICAgICAgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dCAoYXR0clN0cmluZywg
bm9kZUltcGwsIGl0LmNoYXJhY3RlcnMoKSwgaXQubGVuZ3RoKCkpOworICAgICAgICAgICAgQVhB
dHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChhdHRyU3RyaW5nLCBub2RlSW1wbCwgaXQuY2hhcmFj
dGVycygpLCBpdC5sZW5ndGgoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBWEF0
dHJpYnV0ZWRTdHJpbmdBcHBlbmRSZXBsYWNlZCAoYXR0clN0cmluZywgbm9kZUltcGwtPmNoaWxk
Tm9kZShpdC5yYW5nZSgpLT5zdGFydE9mZnNldChleGNlcHRpb24pKSk7CisgICAgICAgICAgICBB
WEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRSZXBsYWNlZChhdHRyU3RyaW5nLCBub2RlSW1wbC0+Y2hp
bGROb2RlKGl0LnJhbmdlKCktPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbikpKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaXQuYWR2YW5jZSgpOwpJbmRleDogbG9hZGVyL0NhY2hlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBsb2FkZXIvQ2FjaGUuY3BwCShyZXZpc2lvbiAxNDIxNikKKysrIGxvYWRl
ci9DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiwxNCArMjI2LDYgQEAKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldCAqPihvKTsKIH0KIAotdm9pZCBDYWNo
ZTo6cHJlbG9hZFN0eWxlU2hlZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgdXJsLCBjb25zdCBE
ZXByZWNhdGVkU3RyaW5nJiBzdHlsZXNoZWV0X2RhdGEpCi17Ci0gICAgQ2FjaGVkT2JqZWN0ICpv
ID0gY2FjaGUtPmdldChTdHJpbmcodXJsKS5pbXBsKCkpOwotICAgIGlmIChvKQotICAgICAgICBy
ZW1vdmUobyk7Ci0gICAgY2FjaGUtPnNldChTdHJpbmcodXJsKS5pbXBsKCksIG5ldyBDYWNoZWRD
U1NTdHlsZVNoZWV0KHVybCwgc3R5bGVzaGVldF9kYXRhKSk7Ci19Ci0KIENhY2hlZFNjcmlwdCAq
Q2FjaGU6OnJlcXVlc3RTY3JpcHQoRG9jTG9hZGVyKiBkbCwgY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgcmVsb2FkLCB0aW1lX3QgZXhwaXJlRGF0ZSwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgY2hh
cnNldCkKIHsKICAgICAvLyB0aGlzIGJyaW5ncyB0aGUgX3VybCB0byBhIHN0YW5kYXJkIGZvcm0u
Li4KQEAgLTI5MCwxNCArMjgyLDYgQEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkU2Ny
aXB0ICo+KG8pOwogfQogCi12b2lkIENhY2hlOjpwcmVsb2FkU2NyaXB0KGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcmIHVybCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc2NyaXB0X2RhdGEpCi17Ci0g
ICAgQ2FjaGVkT2JqZWN0ICpvID0gY2FjaGUtPmdldChTdHJpbmcodXJsKS5pbXBsKCkpOwotICAg
IGlmIChvKQotICAgICAgICByZW1vdmUobyk7Ci0gICAgY2FjaGUtPnNldChTdHJpbmcodXJsKS5p
bXBsKCksIG5ldyBDYWNoZWRTY3JpcHQodXJsLCBzY3JpcHRfZGF0YSkpOwotfQotCiAjaWZkZWYg
S0hUTUxfWFNMVAogQ2FjaGVkWFNMU3R5bGVTaGVldCogQ2FjaGU6OnJlcXVlc3RYU0xTdHlsZVNo
ZWV0KERvY0xvYWRlciogZGwsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHJlbG9hZCwgdGltZV90
IGV4cGlyZURhdGUpCiB7CkluZGV4OiBsb2FkZXIvQ2FjaGVkT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gbG9hZGVyL0NhY2hlZE9iamVjdC5oCShyZXZpc2lvbiAxNDIxNikKKysrIGxvYWRlci9DYWNo
ZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBLSFRN
TF9DYWNoZWRPYmplY3RfaAogI2RlZmluZSBLSFRNTF9DYWNoZWRPYmplY3RfaAogCisjaW5jbHVk
ZSAiRGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5j
bHVkZSAiS1dRS0lPR2xvYmFsLmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvSGFzaFNldC5oPgpJbmRl
eDogbG9hZGVyL0NhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0NhY2hlLmgJKHJldmlzaW9u
IDE0MjE2KQorKysgbG9hZGVyL0NhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYzICs0OCwz
OSBAQAogICAgIAogICAgIC8qKgogICAgICAqIFByb3ZpZGVzIGEgY2FjaGUvbG9hZGVyIGZvciBv
YmplY3RzIG5lZWRlZCBmb3IgZGlzcGxheWluZyB0aGUgaHRtbCBwYWdlLgotICAgICAqIEF0IHRo
ZSBtb21lbnQgdGhlc2UgYXJlIHN0eWxlc2hlZXRzLCBzY3JpcHRzIGFuZCBpbWFnZXMKICAgICAg
Ki8KICAgICBjbGFzcyBDYWNoZSB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBEb2NMb2FkZXI7CiAg
ICAgcHVibGljOgogICAgICAgICAvKioKLSAgICAgICAgICogaW5pdCB0aGUgY2FjaGUgaW4gY2Fz
ZSBpdCdzIG5vdCBhbHJlYWR5LiBUaGlzIG5lZWRzIHRvIGdldCBjYWxsZWQgb25jZQotICAgICAg
ICAgKiBiZWZvcmUgdXNpbmcgaXQuCisgICAgICAgICAqIEluaXRpYWxpemUgdGhlIGNhY2hlIGlu
IGNhc2UgaXQncyBub3QgYWxyZWFkeS4KKyAgICAgICAgICogVGhpcyBuZWVkcyB0byBnZXQgY2Fs
bGVkIG9uY2UgYmVmb3JlIHVzaW5nIGl0LgogICAgICAgICAgKi8KICAgICAgICAgc3RhdGljIHZv
aWQgaW5pdCgpOwogICAgICAgICAKICAgICAgICAgLyoqCi0gICAgICAgICAqIEFzayB0aGUgY2Fj
aGUgZm9yIHNvbWUgdXJsLiBXaWxsIHJldHVybiBhIGNhY2hlZE9iamVjdCwgYW5kCi0gICAgICAg
ICAqIGxvYWQgdGhlIHJlcXVlc3RlZCBkYXRhIGluIGNhc2UgaXQncyBub3QgY2FoY2VkCi0gICAg
ICAgICAqIGlmIHRoZSBEb2NMb2FkZXIgaXMgemVybywgdGhlIHVybCBtdXN0IGJlIGZ1bGwtcXVh
bGlmaWVkLgotICAgICAgICAgKiBPdGhlcndpc2UsIGl0IGlzIGF1dG9tYXRpY2FsbHkgYmFzZS11
cmwgZXhwYW5kZWQKKyAgICAgICAgICogQXNrIHRoZSBjYWNoZSBmb3Igc29tZSBVUkwuCisgICAg
ICAgICAqIElmIHRoZSBEb2NMb2FkZXIgaXMgemVybywgdGhlIFVSTCBtdXN0IGJlIGZ1bGx5LXF1
YWxpZmllZC4gT3RoZXJ3aXNlLCBpdCBpcyBhdXRvbWF0aWNhbGx5IGJhc2UtVVJMIGV4cGFuZGVk
CiAgICAgICAgICAqLwogICAgICAgICBzdGF0aWMgQ2FjaGVkSW1hZ2UqIHJlcXVlc3RJbWFnZShE
b2NMb2FkZXIqLCBjb25zdCBTdHJpbmcmIFVSTCwgYm9vbCByZWxvYWQgPSBmYWxzZSwgdGltZV90
IGV4cGlyZURhdGUgPSAwKTsKLSAgICAgICAgc3RhdGljIENhY2hlZEltYWdlKiByZXF1ZXN0SW1h
Z2UoRG9jTG9hZGVyKiwgY29uc3QgS1VSTCYgdXJsLCBib29sIHJlbG9hZCA9IGZhbHNlLCB0aW1l
X3QgZXhwaXJlRGF0ZSA9IDApOworICAgICAgICBzdGF0aWMgQ2FjaGVkSW1hZ2UqIHJlcXVlc3RJ
bWFnZShEb2NMb2FkZXIqLCBjb25zdCBLVVJMJiBVUkwsIGJvb2wgcmVsb2FkLCB0aW1lX3QgZXhw
aXJlRGF0ZSk7CisgICAgICAgIHN0YXRpYyBDYWNoZWRDU1NTdHlsZVNoZWV0KiByZXF1ZXN0U3R5
bGVTaGVldChEb2NMb2FkZXIqLCBjb25zdCBTdHJpbmcmIFVSTCwgYm9vbCByZWxvYWQsIHRpbWVf
dCBleHBpcmVEYXRlLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBjaGFyc2V0KTsKKyAgICAgICAg
c3RhdGljIENhY2hlZFNjcmlwdCogcmVxdWVzdFNjcmlwdChEb2NMb2FkZXIqLCBjb25zdCBTdHJp
bmcmIFVSTCwgYm9vbCByZWxvYWQsIHRpbWVfdCBleHBpcmVEYXRlLCBjb25zdCBEZXByZWNhdGVk
U3RyaW5nJiBjaGFyc2V0KTsKIAotICAgICAgICAvKioKLSAgICAgICAgICogQXNrIHRoZSBjYWNo
ZSBmb3Igc29tZSB1cmwuIFdpbGwgcmV0dXJuIGEgY2FjaGVkT2JqZWN0LCBhbmQKLSAgICAgICAg
ICogbG9hZCB0aGUgcmVxdWVzdGVkIGRhdGEgaW4gY2FzZSBpdCdzIG5vdCBjYWNoZWQKLSAgICAg
ICAgICovCi0gICAgICAgIHN0YXRpYyBDYWNoZWRDU1NTdHlsZVNoZWV0KiByZXF1ZXN0U3R5bGVT
aGVldChEb2NMb2FkZXIqLCBjb25zdCBTdHJpbmcmIFVSTCwgYm9vbCByZWxvYWQgPSBmYWxzZSwg
dGltZV90IGV4cGlyZURhdGUgPSAwLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBjaGFyc2V0ID0g
RGVwcmVjYXRlZFN0cmluZzo6bnVsbCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFByZS1s
b2FkcyBhIHN0eWxlc2hlZXQgaW50byB0aGUgY2FjaGUuCi0gICAgICAgICAqLwotICAgICAgICBz
dGF0aWMgdm9pZCBwcmVsb2FkU3R5bGVTaGVldChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ1cmws
IGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0eWxlc2hlZXREYXRhKTsKLQotICAgICAgICAvKioK
LSAgICAgICAgICogQXNrIHRoZSBjYWNoZSBmb3Igc29tZSB1cmwuIFdpbGwgcmV0dXJuIGEgY2Fj
aGVkT2JqZWN0LCBhbmQKLSAgICAgICAgICogbG9hZCB0aGUgcmVxdWVzdGVkIGRhdGEgaW4gY2Fz
ZSBpdCdzIG5vdCBjYWhjZWQKLSAgICAgICAgICovCi0gICAgICAgIHN0YXRpYyBDYWNoZWRTY3Jp
cHQqIHJlcXVlc3RTY3JpcHQoRG9jTG9hZGVyKiwgY29uc3QgU3RyaW5nJiBVUkwsIGJvb2wgcmVs
b2FkID0gZmFsc2UsIHRpbWVfdCBleHBpcmVEYXRlID0gMCwgY29uc3QgRGVwcmVjYXRlZFN0cmlu
ZyYgY2hhcnNldCA9IERlcHJlY2F0ZWRTdHJpbmc6Om51bGwpOwotCi0gICAgICAgIC8qKgotICAg
ICAgICAgKiBQcmUtbG9hZHMgYSBzY3JpcHQgaW50byB0aGUgY2FjaGUuCi0gICAgICAgICAqLwot
ICAgICAgICBzdGF0aWMgdm9pZCBwcmVsb2FkU2NyaXB0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcg
JnVybCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc2NyaXB0RGF0YSk7Ci0KICNpZmRlZiBLSFRN
TF9YU0xUCi0gICAgICAgIC8vIEFzayB0aGUgY2FjaGUgZm9yIGFuIFhTTCBzdHlsZXNoZWV0Lgot
ICAgICAgICBzdGF0aWMgQ2FjaGVkWFNMU3R5bGVTaGVldCogcmVxdWVzdFhTTFN0eWxlU2hlZXQo
RG9jTG9hZGVyKiwgY29uc3QgU3RyaW5nJiBVUkwsIGJvb2wgcmVsb2FkID0gZmFsc2UsIHRpbWVf
dCBleHBpcmVEYXRlID0gMCk7CisgICAgICAgIHN0YXRpYyBDYWNoZWRYU0xTdHlsZVNoZWV0KiBy
ZXF1ZXN0WFNMU3R5bGVTaGVldChEb2NMb2FkZXIqLCBjb25zdCBTdHJpbmcmIFVSTCwgYm9vbCBy
ZWxvYWQsIHRpbWVfdCBleHBpcmVEYXRlKTsKICNlbmRpZgogCiAjaWZuZGVmIEtIVE1MX05PX1hC
TAotICAgICAgICAvLyBBc2sgdGhlIGNhY2hlIGZvciBhbiBYQkwgZG9jdW1lbnQuCi0gICAgICAg
IHN0YXRpYyBDYWNoZWRYQkxEb2N1bWVudCogcmVxdWVzdFhCTERvY3VtZW50KERvY0xvYWRlcios
IGNvbnN0IFN0cmluZyYgVVJMLCBib29sIHJlbG9hZCA9IGZhbHNlLCB0aW1lX3QgZXhwaXJlRGF0
ZSA9IDApOworICAgICAgICBzdGF0aWMgQ2FjaGVkWEJMRG9jdW1lbnQqIHJlcXVlc3RYQkxEb2N1
bWVudChEb2NMb2FkZXIqLCBjb25zdCBTdHJpbmcmIFVSTCwgYm9vbCByZWxvYWQsIHRpbWVfdCBl
eHBpcmVEYXRlKTsKICNlbmRpZgogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSBz
aXplIG9mIHRoZSBjYWNoZS4gVGhpcyB3aWxsIG9ubHkgaG9kIGFwcHJveGltYXRlbHksIHNpbmNl
IHRoZSBzaXplIHNvbWUKLSAgICAgICAgICogY2FjaGVkIG9iamVjdHMgKGxpa2Ugc3R5bGVzaGVl
dHMpIHRha2UgdXAgaW4gbWVtb3J5IGlzIG5vdCBleGFjbHR5IGtub3duLgorICAgICAgICAgKiBT
ZXRzIHRoZSBzaXplIG9mIHRoZSBjYWNoZS4gVGhpcyB3aWxsIG9ubHkgaG9sZCBhcHByb3hpbWF0
ZWx5LCBzaW5jZSB0aGUgc2l6ZSBzb21lCisgICAgICAgICAqIGNhY2hlZCBvYmplY3RzIChsaWtl
IHN0eWxlc2hlZXRzKSB0YWtlIHVwIGluIG1lbW9yeSBpcyBub3QgZXhhY3RseSBrbm93bi4KICAg
ICAgICAgICovCiAgICAgICAgIHN0YXRpYyB2b2lkIHNldFNpemUoaW50IGJ5dGVzKTsKKwogICAg
ICAgICAvKioKICAgICAgICAgICogcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUKICAgICAg
ICAgICovCkBAIC0xMjUsOCArMTAxLDggQEAKIAogICAgICAgICAvKioKICAgICAgICAgICogY2xl
YXJzIHRoZSBjYWNoZQotICAgICAgICAgKiBXYXJuaW5nOiBjYWxsIHRoaXMgb25seSBhdCB0aGUg
ZW5kIG9mIHlvdXIgcHJvZ3JhbSwgdG8gY2xlYW4KLSAgICAgICAgICogdXAgbWVtb3J5ICh1c2Vm
dWwgZm9yIGZpbmRpbmcgbWVtb3J5IGhvbGVzKQorICAgICAgICAgKiBXYXJuaW5nOiBjYWxsIHRo
aXMgb25seSBhdCB0aGUgZW5kIG9mIHlvdXIgcHJvZ3JhbSwgdG8gY2xlYW4gdXAgbWVtb3J5Cisg
ICAgICAgICAqICh1c2VmdWwgZm9yIGZpbmRpbmcgbWVtb3J5IGxlYWtzKS4KICAgICAgICAgICov
CiAgICAgICAgIHN0YXRpYyB2b2lkIGNsZWFyKCk7CiAKSW5kZXg6IHBhZ2UvRnJhbWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDE0MjE2KQorKysgcGFnZS9GcmFtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MTIsNyArNzEyLDcgQEAKICAgdm9pZCBzZXRXaW5kb3dIYXNG
b2N1cyhib29sIGZsYWcpOwogICAvLyBDb252ZW5pZW5jZSwgdG8gYXZvaWQgcmVwZWF0aW5nIHRo
ZSBjb2RlIHRvIGRpZyBkb3duIHRvIGdldCB0aGlzLgogCi0gIFFDaGFyIGJhY2tzbGFzaEFzQ3Vy
cmVuY3lTeW1ib2woKSBjb25zdDsKKyAgVUNoYXIgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgp
IGNvbnN0OwogCiAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8TWFya2VkVGV4dFVuZGVybGluZT4gbWFy
a2VkVGV4dFVuZGVybGluZXMoKSBjb25zdDsgIAogICBib29sIG1hcmtlZFRleHRVc2VzVW5kZXJs
aW5lcygpIGNvbnN0OwpJbmRleDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9G
cmFtZS5jcHAJKHJldmlzaW9uIDE0MjE2KQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDggKzgxLDE2IEBACiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLXVz
aW5nIG5hbWVzcGFjZSBLSlM7CiAKK3VzaW5nIEtKUzo6SlNMb2NrOwordXNpbmcgS0pTOjpKU1Zh
bHVlOwordXNpbmcgS0pTOjpMb2NhdGlvbjsKK3VzaW5nIEtKUzo6UGF1c2VkVGltZW91dHM7Cit1
c2luZyBLSlM6OlNhdmVkUHJvcGVydGllczsKK3VzaW5nIEtKUzo6U2F2ZWRCdWlsdGluczsKK3Vz
aW5nIEtKUzo6VVN0cmluZzsKK3VzaW5nIEtKUzo6V2luZG93OworCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwpAQCAtOTUsNyArMTAzLDcgQEAKIHB1
YmxpYzoKICAgICBVc2VyU3R5bGVTaGVldExvYWRlcihGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBEb2NMb2FkZXIqIGRsKQogICAgICAgICA6IG1fZnJhbWUoZnJhbWUpCi0gICAgICAg
ICwgbV9jYWNoZWRTaGVldChDYWNoZTo6cmVxdWVzdFN0eWxlU2hlZXQoZGwsIHVybCkpCisgICAg
ICAgICwgbV9jYWNoZWRTaGVldChDYWNoZTo6cmVxdWVzdFN0eWxlU2hlZXQoZGwsIHVybCwgZmFs
c2UsIDAsICIiKSkKICAgICB7CiAgICAgICAgIG1fY2FjaGVkU2hlZXQtPnJlZih0aGlzKTsKICAg
ICB9CkBAIC0zMjUxLDcgKzMyNTksNyBAQAogICAgICAgICBkb2MtPmRpc3BhdGNoV2luZG93RXZl
bnQoZmxhZyA/IGZvY3VzRXZlbnQgOiBibHVyRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiB9CiAKLVFD
aGFyIEZyYW1lOjpiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgY29uc3QKK1VDaGFyIEZyYW1l
OjpiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgY29uc3QKIHsKICAgICBEb2N1bWVudCAqZG9j
ID0gZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvYykK
</data>
<flag name="review"
          id="2267"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>