<?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>4332</bug_id>
          
          <creation_ts>2005-08-08 01:40:30 -0700</creation_ts>
          <short_desc>Fix WebCore+SVG compile breakage from 4313</short_desc>
          <delta_ts>2005-08-08 13:36:31 -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>SVG</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>16171</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-08 01:40:30 -0700</bug_when>
    <thetext>Now that http://bugzilla.opendarwin.org/show_bug.cgi?id=4313 is landed, kdom and friends are broken.

This needs to be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16172</commentid>
    <comment_count>1</comment_count>
      <attachid>3276</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-08 01:41:28 -0700</bug_when>
    <thetext>Created attachment 3276
This patch fixes most of the issues, but not all.... yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16175</commentid>
    <comment_count>2</comment_count>
      <attachid>3277</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-08 02:22:37 -0700</bug_when>
    <thetext>Created attachment 3277
Should be a complete fix.

I&apos;m off to bed.  I&apos;ll run all the layout tests in the morning and commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16206</commentid>
    <comment_count>3</comment_count>
      <attachid>3281</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-08 11:24:24 -0700</bug_when>
    <thetext>Created attachment 3281
Final patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16207</commentid>
    <comment_count>4</comment_count>
      <attachid>3281</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-08 11:27:01 -0700</bug_when>
    <thetext>Comment on attachment 3281
Final patch.

Fixes WebCore+SVG to build again.  This patch shouldn&apos;t really need review,
since it&apos;s a build-fix, only affects kdom/ksvg2, and is doing the exact same
thing as darin&apos;s 4313.	However you now know about it if you care to comment. 
Unless anyone objects, I&apos;ll commit it later on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16209</commentid>
    <comment_count>5</comment_count>
      <attachid>3281</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-08 11:38:53 -0700</bug_when>
    <thetext>Comment on attachment 3281
Final patch.

The call functions also have to be updated to use the new name, callAsFunction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16215</commentid>
    <comment_count>6</comment_count>
      <attachid>3283</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-08 13:12:09 -0700</bug_when>
    <thetext>Created attachment 3283
Adding call -&gt; callFunction() change per darin&apos;s suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16216</commentid>
    <comment_count>7</comment_count>
      <attachid>3283</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-08-08 13:13:17 -0700</bug_when>
    <thetext>Comment on attachment 3283
Adding call -&gt; callFunction() change per darin&apos;s suggestion.

Again, I&apos;ll wait a bit to see if anyone has further comments, then will commit.
 All test SVG layout tests pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16219</commentid>
    <comment_count>8</comment_count>
      <attachid>3283</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-08 13:23:37 -0700</bug_when>
    <thetext>Comment on attachment 3283
Adding call -&gt; callFunction() change per darin&apos;s suggestion.

Looks fine -- best if there was a way to test this, tho; Eric says we can&apos;t
test because of the JavaScript slot change.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3276</attachid>
            <date>2005-08-08 01:41:28 -0700</date>
            <delta_ts>2005-08-08 02:22:37 -0700</delta_ts>
            <desc>This patch fixes most of the issues, but not all.... yet.</desc>
            <filename>startofkdomfix.patch</filename>
            <type>text/plain</type>
            <size>654418</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtkb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9BdHRyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS9BdHRyLmNwcAotLS0ga2RvbS9BdHRyLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjIz
IC0wMDAwCTEuMQorKysga2RvbS9BdHRyLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjA0IC0wMDAwCkBA
IC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBB
dHRyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKkF0dHI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY5LDcgKzY5LDcgQEAgVmFsdWUg
QXR0cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKgogCXJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotdm9pZCBBdHRyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgQXR0cjo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20vQXR0ci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vQXR0ci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0F0dHIuaAotLS0ga2RvbS9BdHRyLmgJOSBKdWwgMjAw
NSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vQXR0ci5oCTggQXVnIDIwMDUgMDg6MjQ6MDQg
LTAwMDAKQEAgLTE1MCw4ICsxNTAsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX1BVVAogCQlL
RE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0
dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsK
IAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChBdHRyKQpJbmRleDoga2RvbS9DaGFyYWN0ZXJEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0NoYXJh
Y3RlckRhdGEuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
ZG9tL0NoYXJhY3RlckRhdGEuY3BwCi0tLSBrZG9tL0NoYXJhY3RlckRhdGEuY3BwCTkgSnVsIDIw
MDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9tL0NoYXJhY3RlckRhdGEuY3BwCTggQXVnIDIw
MDUgMDg6MjQ6MDQgLTAwMDAKQEAgLTQ3LDcgKzQ3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsK
IAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDaGFyYWN0ZXJEYXRhIiwgQ2hhcmFjdGVyRGF0
YVByb3RvLCBDaGFyYWN0ZXJEYXRhUHJvdG9GdW5jKQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkNoYXJhY3RlckRhdGE6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkBAIC02NSw3ICs2NSw3IEBAIFZh
bHVlIENoYXJhY3RlckRhdGE6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLXZvaWQgQ2hhcmFjdGVyRGF0YTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENoYXJhY3Rl
ckRhdGE6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC04NCw3ICs4NCw3IEBA
IHZvaWQgQ2hhcmFjdGVyRGF0YTo6cHV0VmFsdWVQcm9wZXJ0eShFeGUKIAlLRE9NX0xFQVZFX1NB
RkUoRE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhUHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKkNoYXJhY3RlckRhdGFQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKENo
YXJhY3RlckRhdGEpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC05OSw4ICs5OSw4IEBAIFZhbHVlIENo
YXJhY3RlckRhdGFQcm90b0Z1bmM6OmNhbGwoRXhlY1MKIAkJfQogCQljYXNlIENoYXJhY3RlckRh
dGFDb25zdGFudHM6OlN1YnN0cmluZ0RhdGE6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0
ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKLQkJCXVuc2lnbmVkIGxvbmcgY291bnQgPSBhcmdz
WzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBhcmdzWzBdLT50
b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgY291bnQgPSBhcmdzWzFdLT50b1VJbnQz
MihleGVjKTsKIAkJCXJldHVybiBnZXRET01TdHJpbmcob2JqLnN1YnN0cmluZ0RhdGEob2Zmc2V0
LCBjb3VudCkpOwogCQl9CiAJCWNhc2UgQ2hhcmFjdGVyRGF0YUNvbnN0YW50czo6QXBwZW5kRGF0
YToKQEAgLTExMSwyMiArMTExLDIyIEBAIFZhbHVlIENoYXJhY3RlckRhdGFQcm90b0Z1bmM6OmNh
bGwoRXhlY1MKIAkJfQogCQljYXNlIENoYXJhY3RlckRhdGFDb25zdGFudHM6Okluc2VydERhdGE6
CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsK
KwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlE
T01TdHJpbmcgYXJnID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1sxXSk7CiAJCQlvYmouaW5zZXJ0
RGF0YShvZmZzZXQsIGFyZyk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBD
aGFyYWN0ZXJEYXRhQ29uc3RhbnRzOjpEZWxldGVEYXRhOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25n
IG9mZnNldCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7Ci0JCQl1bnNpZ25lZCBsb25nIGNvdW50
ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJn
c1swXS0+dG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGNvdW50ID0gYXJnc1sxXS0+
dG9VSW50MzIoZXhlYyk7CiAJCQlvYmouZGVsZXRlRGF0YShvZmZzZXQsIGNvdW50KTsKIAkJCXJl
dHVybiBVbmRlZmluZWQoKTsKIAkJfQogCQljYXNlIENoYXJhY3RlckRhdGFDb25zdGFudHM6OlJl
cGxhY2VEYXRhOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0udG9VSW50
MzIoZXhlYyk7Ci0JCQl1bnNpZ25lZCBsb25nIGNvdW50ID0gYXJnc1sxXS50b1VJbnQzMihleGVj
KTsKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CisJ
CQl1bnNpZ25lZCBsb25nIGNvdW50ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlET01T
dHJpbmcgYXJnID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1syXSk7CiAJCQlvYmoucmVwbGFjZURh
dGEob2Zmc2V0LCBjb3VudCwgYXJnKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKSW5kZXg6IGtk
b20vQ2hhcmFjdGVyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vQ2hhcmFjdGVyRGF0YS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrZG9tL0NoYXJhY3RlckRhdGEuaAotLS0ga2RvbS9DaGFyYWN0ZXJEYXRhLmgJ
OSBKdWwgMjAwNSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vQ2hhcmFjdGVyRGF0YS5oCTgg
QXVnIDIwMDUgMDg6MjQ6MDQgLTAwMDAKQEAgLTE0MCw4ICsxNDAsOCBAQCBuYW1lc3BhY2UgS0RP
TQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFs
dWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2
YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrZG9tL0RPTUNvbmZpZ3VyYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NQ29u
ZmlndXJhdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtkb20vRE9NQ29uZmlndXJhdGlvbi5jcHAKLS0tIGtkb20vRE9NQ29uZmlndXJhdGlvbi5jcHAJ
OSBKdWwgMjAwNSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vRE9NQ29uZmlndXJhdGlvbi5j
cHAJOCBBdWcgMjAwNSAwODoyNDowNCAtMDAwMApAQCAtNDcsNyArNDcsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkRPTUNvbmZpZ3VyYXRpb24i
LCBET01Db25maWd1cmF0aW9uUHJvdG8sIERPTUNvbmZpZ3VyYXRpb25Qcm90b0Z1bmMpCiAKLVZh
bHVlIERPTUNvbmZpZ3VyYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NQ29uZmlndXJhdGlvbjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NB
RkUKIApAQCAtNjMsNyArNjMsNyBAQCBWYWx1ZSBET01Db25maWd1cmF0aW9uOjpnZXRWYWx1ZVBy
b3BlcnR5CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBET01Db25maWd1cmF0aW9u
UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTUNvbmZpZ3VyYXRpb25Qcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJ
S0RPTV9DSEVDS19USElTKERPTUNvbmZpZ3VyYXRpb24pCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03
Myw3ICs3Myw3IEBAIFZhbHVlIERPTUNvbmZpZ3VyYXRpb25Qcm90b0Z1bmM6OmNhbGwoRXgKIAkJ
Y2FzZSBET01Db25maWd1cmF0aW9uQ29uc3RhbnRzOjpTZXRQYXJhbWV0ZXI6CiAJCXsKIAkJCURP
TVN0cmluZyBuYW1lID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIHZhbHVl
ID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIHZhbHVlID0gYXJnc1sxXS0+dG9C
b29sZWFuKGV4ZWMpOwogLy8JCQlET01Vc2VyRGF0YSB2YWx1ZSA9IGVjbWFfY2FzdDxET01Vc2Vy
RGF0YT4oZXhlYywgYXJnc1sxXSwgJnRvRE9NVXNlckRhdGEpOwogCQkJb2JqLnNldFBhcmFtZXRl
cihuYW1lLCB2YWx1ZSk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CkluZGV4OiBrZG9tL0RPTUNv
bmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL0RPTUNvbmZpZ3VyYXRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga2RvbS9ET01Db25maWd1cmF0aW9uLmgKLS0tIGtkb20vRE9NQ29uZmlndXJhdGlv
bi5oCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9tL0RPTUNvbmZpZ3VyYXRp
b24uaAk4IEF1ZyAyMDA1IDA4OjI0OjA1IC0wMDAwCkBAIC0xNjMsNyArMTYzLDcgQEAgbmFtZXNw
YWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFT
U19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6
IGtkb20vRE9NRXJyb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vRE9NRXJyb3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrZG9tL0RPTUVycm9yLmNwcAotLS0ga2RvbS9ET01FcnJvci5jcHAJOSBKdWwgMjAw
NSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vRE9NRXJyb3IuY3BwCTggQXVnIDIwMDUgMDg6
MjQ6MDUgLTAwMDAKQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQK
ICovCiAKLVZhbHVlIERPTUVycm9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUVycm9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCklu
ZGV4OiBrZG9tL0RPTUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9ET01FcnJvci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrZG9tL0RPTUVycm9yLmgKLS0tIGtkb20vRE9NRXJyb3IuaAk5IEp1bCAyMDA1IDA2
OjUzOjIzIC0wMDAwCTEuMQorKysga2RvbS9ET01FcnJvci5oCTggQXVnIDIwMDUgMDg6MjQ6MDUg
LTAwMDAKQEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNt
YVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChET01FcnJvcikKSW5kZXg6
IGtkb20vRE9NRXJyb3JIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL0RPTUVycm9ySGFuZGxlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9NRXJyb3JIYW5kbGVyLmNwcAotLS0ga2RvbS9E
T01FcnJvckhhbmRsZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9t
L0RPTUVycm9ySGFuZGxlci5jcHAJOCBBdWcgMjAwNSAwODoyNDowNSAtMDAwMApAQCAtNDYsNyAr
NDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUo
IkRPTUVycm9ySGFuZGxlciIsIERPTUVycm9ySGFuZGxlclByb3RvLCBET01FcnJvckhhbmRsZXJQ
cm90b0Z1bmMpCiAKLVZhbHVlIERPTUVycm9ySGFuZGxlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpET01FcnJvckhhbmRsZXI6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYwLDcgKzYwLDcgQEAgVmFsdWUgRE9NRXJyb3JIYW5kbGVy
OjpnZXRWYWx1ZVByb3BlcnR5KAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgRE9N
RXJyb3JIYW5kbGVyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTUVycm9ySGFuZGxlclByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoRE9NRXJyb3JIYW5kbGVyKQogCUtET01fRU5URVJf
U0FGRQpJbmRleDoga2RvbS9ET01FcnJvckhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTUVycm9ySGFuZGxlci5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUVycm9ySGFuZGxlci5oCi0tLSBr
ZG9tL0RPTUVycm9ySGFuZGxlci5oCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBr
ZG9tL0RPTUVycm9ySGFuZGxlci5oCTggQXVnIDIwMDUgMDg6MjQ6MDUgLTAwMDAKQEAgLTU1LDcg
KzU1LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgog
CQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtkb20vRE9NRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTUV4Y2VwdGlvbi5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9NRXhjZXB0aW9uLmNwcAotLS0g
a2RvbS9ET01FeGNlcHRpb24uY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBr
ZG9tL0RPTUV4Y2VwdGlvbi5jcHAJOCBBdWcgMjAwNSAwODoyNDowNSAtMDAwMApAQCAtMzQsNyAr
MzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgRE9NRXhjZXB0
aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqRE9NRXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtkb20vRE9NRXhjZXB0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ET01FeGNl
cHRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9E
T01FeGNlcHRpb24uaAotLS0ga2RvbS9ET01FeGNlcHRpb24uaAk5IEp1bCAyMDA1IDA2OjUzOjI0
IC0wMDAwCTEuMQorKysga2RvbS9ET01FeGNlcHRpb24uaAk4IEF1ZyAyMDA1IDA4OjI0OjA1IC0w
MDAwCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2Ny
aXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NSW1wbGVtZW50YXRpb24uY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUltcGxl
bWVudGF0aW9uLmNwcAotLS0ga2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJOSBKdWwgMjAwNSAw
Njo1MzoyNCAtMDAwMAkxLjEKKysrIGtkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCTggQXVnIDIw
MDUgMDg6MjQ6MDUgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsK
IAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJET01JbXBsZW1lbnRhdGlvbiIsIERPTUltcGxl
bWVudGF0aW9uUHJvdG8sIERPTUltcGxlbWVudGF0aW9uUHJvdG9GdW5jKQogCi1WYWx1ZSBET01J
bXBsZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpET01JbXBsZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApA
QCAtNzQsNyArNzQsNyBAQCBWYWx1ZSBET01JbXBsZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0
CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBET01JbXBsZW1lbnRhdGlvblByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKK1ZhbHVlSW1wICpET01JbXBsZW1lbnRhdGlvblByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9N
X0NIRUNLX1RISVMoRE9NSW1wbGVtZW50YXRpb24pCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC0xMjMs
NyArMTIzLDcgQEAgVmFsdWUgRE9NSW1wbGVtZW50YXRpb25Qcm90b0Z1bmM6OmNhbGwoRQogCQl9
CiAJCWNhc2UgRE9NSW1wbGVtZW50YXRpb25Db25zdGFudHM6OkNyZWF0ZUxTUGFyc2VyOgogCQl7
Ci0JCQl1bnNpZ25lZCBzaG9ydCBtb2RlID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVu
c2lnbmVkIHNob3J0IG1vZGUgPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCURPTVN0cmlu
ZyBzY2hlbWFUeXBlID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1sxXSk7CiAJCQlyZXR1cm4gc2Fm
ZV9jYWNoZTxMU1BhcnNlcj4oZXhlYywgb2JqLmNyZWF0ZUxTUGFyc2VyKG1vZGUsIHNjaGVtYVR5
cGUpKTsKIAkJfQpJbmRleDoga2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NSW1wbGVtZW50YXRpb24uaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01JbXBsZW1lbnRh
dGlvbi5oCi0tLSBrZG9tL0RPTUltcGxlbWVudGF0aW9uLmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAt
MDAwMAkxLjEKKysrIGtkb20vRE9NSW1wbGVtZW50YXRpb24uaAk4IEF1ZyAyMDA1IDA4OjI0OjA1
IC0wMDAwCkBAIC0xNTQsNyArMTU0LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVj
bWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ET01Mb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTUxvY2F0b3IuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUxvY2F0b3IuY3BwCi0t
LSBrZG9tL0RPTUxvY2F0b3IuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBr
ZG9tL0RPTUxvY2F0b3IuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MDUgLTAwMDAKQEAgLTQyLDcgKzQy
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIERPTUxvY2F0b3I6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqRE9NTG9jYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9ET01Mb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ET01Mb2Nh
dG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9N
TG9jYXRvci5oCi0tLSBrZG9tL0RPTUxvY2F0b3IuaAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAw
CTEuMQorKysga2RvbS9ET01Mb2NhdG9yLmgJOCBBdWcgMjAwNSAwODoyNDowNSAtMDAwMApAQCAt
OTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0
aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ET01TdHJpbmdMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTVN0cmluZ0xpc3QuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTVN0cmluZ0xpc3Qu
Y3BwCi0tLSBrZG9tL0RPTVN0cmluZ0xpc3QuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJ
MS4xCisrKyBrZG9tL0RPTVN0cmluZ0xpc3QuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MDYgLTAwMDAK
QEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRf
UFJPVE9UWVBFKCJET01TdHJpbmdMaXN0IiwgRE9NU3RyaW5nTGlzdFByb3RvLCBET01TdHJpbmdM
aXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBET01TdHJpbmdMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTVN0cmluZ0xpc3Q6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYwLDcgKzYwLDcgQEAgVmFsdWUgRE9NU3RyaW5nTGlzdDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgRE9N
U3RyaW5nTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01TdHJpbmdMaXN0UHJvdG9GdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQogewogCUtET01fQ0hFQ0tfVEhJUyhET01TdHJpbmdMaXN0KQogCUtET01fRU5URVJfU0FGRQpA
QCAtNjksNyArNjksNyBAQCBWYWx1ZSBET01TdHJpbmdMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNT
CiAJewogCQljYXNlIERPTVN0cmluZ0xpc3RDb25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2ln
bmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTVN0cmlu
ZyhvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgRE9NU3RyaW5nTGlzdENvbnN0YW50czo6
Q29udGFpbnM6CkluZGV4OiBrZG9tL0RPTVN0cmluZ0xpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTVN0cmluZ0xpc3QuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01TdHJpbmdMaXN0LmgKLS0tIGtk
b20vRE9NU3RyaW5nTGlzdC5oCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9t
L0RPTVN0cmluZ0xpc3QuaAk4IEF1ZyAyMDA1IDA4OjI0OjA2IC0wMDAwCkBAIC04Nyw3ICs4Nyw3
IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RP
TV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrZG9tL0RPTVVzZXJEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTVVzZXJEYXRhLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01Vc2VyRGF0YS5jcHAKLS0tIGtkb20vRE9N
VXNlckRhdGEuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9tL0RPTVVz
ZXJEYXRhLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjA2IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBET01Vc2VyRGF0YTo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpE
T01Vc2VyRGF0YTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9ET01Vc2VyRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NVXNlckRhdGEu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01Vc2Vy
RGF0YS5oCi0tLSBrZG9tL0RPTVVzZXJEYXRhLmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAtMDAwMAkx
LjEKKysrIGtkb20vRE9NVXNlckRhdGEuaAk4IEF1ZyAyMDA1IDA4OjI0OjA2IC0wMDAwCkBAIC01
Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9N
X0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIAogCUtET01fREVG
SU5FX0NBU1QoRE9NVXNlckRhdGEpCkluZGV4OiBrZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RvY3VtZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9Eb2N1bWVudC5jcHAKLS0t
IGtkb20vRG9jdW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9t
L0RvY3VtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjA2IC0wMDAwCkBAIC05NCw3ICs5NCw3IEBA
IG5hbWVzcGFjZSBLRE9NCiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiRG9jdW1lbnQiLCBE
b2N1bWVudFByb3RvLCBEb2N1bWVudFByb3RvRnVuYykKIAotVmFsdWUgRG9jdW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
RG9jdW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTEyOCwyMCArMTI4LDIwIEBAIFZhbHVlIERv
Y3VtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9
OwogCi12b2lkIERvY3VtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgRG9jdW1lbnQ6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50
KQogewogCUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBEb2N1
bWVudENvbnN0YW50czo6WG1sU3RhbmRhbG9uZToKLQkJCXNldFhtbFN0YW5kYWxvbmUodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsKKwkJCXNldFhtbFN0YW5kYWxvbmUodmFsdWUtPnRvQm9vbGVhbihl
eGVjKSk7CiAJCQlicmVhazsKIAkJY2FzZSBEb2N1bWVudENvbnN0YW50czo6WG1sVmVyc2lvbjoK
IAkJCXNldFhtbFZlcnNpb24odG9ET01TdHJpbmcoZXhlYywgdmFsdWUpKTsKIAkJCWJyZWFrOwog
CQljYXNlIERvY3VtZW50Q29uc3RhbnRzOjpTdHJpY3RFcnJvckNoZWNraW5nOgotCQkJc2V0U3Ry
aWN0RXJyb3JDaGVja2luZyh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworCQkJc2V0U3RyaWN0RXJy
b3JDaGVja2luZyh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQljYXNlIERv
Y3VtZW50Q29uc3RhbnRzOjpEb2N1bWVudFVSSToKIAkJCXNldERvY3VtZW50VVJJKHRvRE9NU3Ry
aW5nKGV4ZWMsIHZhbHVlKSk7CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBEb2N1bWVudDo6cHV0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdAogCUtET01fTEVBVkVfU0FGRShET01FeGNlcHRpb24pCiB9
CiAKLVZhbHVlIERvY3VtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRvY3VtZW50UHJvdG9GdW5j
OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhEb2N1bWVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAg
LTIwNiw3ICsyMDYsNyBAQCBWYWx1ZSBEb2N1bWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
CiAJCWNhc2UgRG9jdW1lbnRDb25zdGFudHM6OkltcG9ydE5vZGU6CiAJCXsKIAkJCU5vZGUgaW1w
b3J0ZWROb2RlID0gZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFyZ3NbMF0sICZ0b05vZGUpOwotCQkJ
Ym9vbCBkZWVwID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGRlZXAgPSBhcmdz
WzFdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBvYmouaW1w
b3J0Tm9kZShpbXBvcnRlZE5vZGUsIGRlZXApKTsKIAkJfQogCQljYXNlIERvY3VtZW50Q29uc3Rh
bnRzOjpOb3JtYWxpemVEb2N1bWVudDoKSW5kZXg6IGtkb20vRG9jdW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RvY3VtZW50LmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vRG9jdW1lbnQuaAotLS0ga2Rv
bS9Eb2N1bWVudC5oCTcgQXVnIDIwMDUgMDY6MTc6NDMgLTAwMDAJMS4yCisrKyBrZG9tL0RvY3Vt
ZW50LmgJOCBBdWcgMjAwNSAwODoyNDowNyAtMDAwMApAQCAtNDE3LDggKzQxNyw4IEBAIG5hbWVz
cGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lk
IHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
S0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsJCQorCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lk
IHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsJCQogCX07CiB9CiAKSW5kZXg6IGtkb20vRG9jdW1l
bnRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9t
L0RvY3VtZW50VHlwZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vRG9jdW1lbnRUeXBlLmNwcAotLS0ga2RvbS9Eb2N1bWVudFR5cGUuY3BwCTkgSnVs
IDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9tL0RvY3VtZW50VHlwZS5jcHAJOCBBdWcg
MjAwNSAwODoyNDowNyAtMDAwMApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pT
OwogQGVuZAogKi8KIAotVmFsdWUgRG9jdW1lbnRUeXBlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50VHlwZTo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9Eb2N1bWVudFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RvY3VtZW50VHlwZS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RvY3VtZW50VHlwZS5oCi0tLSBr
ZG9tL0RvY3VtZW50VHlwZS5oCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9t
L0RvY3VtZW50VHlwZS5oCTggQXVnIDIwMDUgMDg6MjQ6MDcgLTAwMDAKQEAgLTExNyw3ICsxMTcs
NyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0ZPUldBUkRQVVQKIAkJS0RPTV9DQVNUCiAKLQkJ
S0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKERv
Y3VtZW50VHlwZSkKSW5kZXg6IGtkb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9FbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9FbGVtZW50LmNwcAotLS0ga2RvbS9FbGVtZW50
LmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAwCTEuMQorKysga2RvbS9FbGVtZW50LmNwcAk4
IEF1ZyAyMDA1IDA4OjI0OjA3IC0wMDAwCkBAIC02Nyw3ICs2Nyw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiRWxlbWVudCIsIEVsZW1lbnRQcm90
bywgRWxlbWVudFByb3RvRnVuYykKIAotVmFsdWUgRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpFbGVtZW50OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01f
RU5URVJfU0FGRQogCkBAIC04NSw3ICs4NSw3IEBAIFZhbHVlIEVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEVsZW1lbnRQ
cm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCitWYWx1ZUltcCAqRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNL
X1RISVMoRWxlbWVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTE4Miw3ICsxODIsNyBAQCBWYWx1
ZSBFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqCiAJCWNhc2UgRWxlbWVudENvbnN0
YW50czo6U2V0SWRBdHRyaWJ1dGU6CiAJCXsKIAkJCURPTVN0cmluZyBuYW1lID0gdG9ET01TdHJp
bmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIGlzSWQgPSBhcmdzWzFdLnRvQm9vbGVhbihleGVj
KTsKKwkJCWJvb2wgaXNJZCA9IGFyZ3NbMV0tPnRvQm9vbGVhbihleGVjKTsKIAkJCW9iai5zZXRJ
ZEF0dHJpYnV0ZShuYW1lLCBpc0lkKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpAQCAt
MTkwLDE0ICsxOTAsMTQgQEAgVmFsdWUgRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KgogCQl7CiAJCQlET01TdHJpbmcgbmFtZXNwYWNlVVJJID0gdG9ET01TdHJpbmcoZXhlYywgYXJn
c1swXSk7CiAJCQlET01TdHJpbmcgbG9jYWxOYW1lID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1sx
XSk7Ci0JCQlib29sIGlzSWQgPSBhcmdzWzJdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgaXNJ
ZCA9IGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKTsKIAkJCW9iai5zZXRJZEF0dHJpYnV0ZU5TKG5h
bWVzcGFjZVVSSSwgbG9jYWxOYW1lLCBpc0lkKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJ
fQogCQljYXNlIEVsZW1lbnRDb25zdGFudHM6OlNldElkQXR0cmlidXRlTm9kZToKIAkJewogCQkJ
QXR0ciBpZEF0dHIgPSBlY21hX2Nhc3Q8QXR0cj4oZXhlYywgYXJnc1swXSwgJnRvQXR0cik7Ci0J
CQlib29sIGlzSWQgPSBhcmdzWzFdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgaXNJZCA9IGFy
Z3NbMV0tPnRvQm9vbGVhbihleGVjKTsKIAkJCW9iai5zZXRJZEF0dHJpYnV0ZU5vZGUoaWRBdHRy
LCBpc0lkKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpJbmRleDoga2RvbS9FbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9FbGVtZW50
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRWxlbWVu
dC5oCi0tLSBrZG9tL0VsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAwCTEuMQorKysg
a2RvbS9FbGVtZW50LmgJOCBBdWcgMjAwNSAwODoyNDowNyAtMDAwMApAQCAtMTAyLDcgKzEwMiw3
IEBAIG5hbWVzcGFjZSBLRE9NCiAJCSAqIHNldEF0dHJpYnV0ZU5TIG1ldGhvZC4KIAkJICoKIAkJ
ICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBjcmVhdGUgb3IgYWx0
ZXIuCi0JCSAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBzZXQgaW4gc3RyaW5nIGZvcm0uCisJCSAq
IEBwYXJhbSB2YWx1ZSBWYWx1ZUltcCAqdG8gc2V0IGluIHN0cmluZyBmb3JtLgogCQkgKi8KIAkJ
dm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgRE9NU3RyaW5nICZuYW1lLCBjb25zdCBET01TdHJpbmcg
JnZhbHVlKTsKIApAQCAtMzQ4LDcgKzM0OCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VU
CiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9
OwogfTsKIApJbmRleDoga2RvbS9FbnRpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vRW50aXR5LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga2RvbS9FbnRpdHkuY3BwCi0tLSBrZG9tL0VudGl0eS5jcHAJOSBK
dWwgMjAwNSAwNjo1MzoyNCAtMDAwMAkxLjEKKysrIGtkb20vRW50aXR5LmNwcAk4IEF1ZyAyMDA1
IDA4OjI0OjA4IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBA
ZW5kCiAqLwogCi1WYWx1ZSBFbnRpdHk6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRW50aXR5OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCklu
ZGV4OiBrZG9tL0VudGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vRW50aXR5LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vRW50aXR5LmgKLS0tIGtkb20vRW50aXR5LmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAt
MDAwMAkxLjEKKysrIGtkb20vRW50aXR5LmgJOCBBdWcgMjAwNSAwODoyNDowOCAtMDAwMApAQCAt
MTIxLDcgKzEyMSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FS
RFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a2RvbS9OYW1lZE5vZGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20vTmFtZWROb2RlTWFwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga2RvbS9OYW1lZE5vZGVNYXAuY3BwCi0tLSBrZG9tL05hbWVkTm9kZU1h
cC5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20vTmFtZWROb2RlTWFw
LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjA4IC0wMDAwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiTmFtZWROb2RlTWFwIiwg
TmFtZWROb2RlTWFwUHJvdG8sIE5hbWVkTm9kZU1hcFByb3RvRnVuYykKIAotVmFsdWUgTmFtZWRO
b2RlTWFwOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKk5hbWVkTm9kZU1hcDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjcsNyArNjcs
NyBAQCBWYWx1ZSBOYW1lZE5vZGVNYXA6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBOYW1lZE5vZGVNYXBQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAq
TmFtZWROb2RlTWFwUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhOYW1lZE5vZGVN
YXApCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC05MSw3ICs5MSw3IEBAIFZhbHVlIE5hbWVkTm9kZU1h
cFByb3RvRnVuYzo6Y2FsbChFeGVjU3QKIAkJfQogCQljYXNlIE5hbWVkTm9kZU1hcENvbnN0YW50
czo6SXRlbToKIAkJewotCQkJaW50IGluZGV4ID0gYXJnc1swXS50b0ludDMyKGV4ZWMpOworCQkJ
aW50IGluZGV4ID0gYXJnc1swXS0+dG9JbnQzMihleGVjKTsKIAkJCXJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIG9iai5pdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBOYW1lZE5vZGVNYXBDb25zdGFu
dHM6OkdldE5hbWVkSXRlbU5TOgpJbmRleDoga2RvbS9OYW1lZE5vZGVNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL05hbWVkTm9kZU1hcC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL05hbWVkTm9kZU1hcC5o
Ci0tLSBrZG9tL05hbWVkTm9kZU1hcC5oCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4xCisr
KyBrZG9tL05hbWVkTm9kZU1hcC5oCTggQXVnIDIwMDUgMDg6MjQ6MDggLTAwMDAKQEAgLTE3MSw4
ICsxNzEsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9G
T1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBh
dHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7
CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9Ob2RlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga2RvbS9Ob2RlLmNwcAotLS0ga2RvbS9Ob2RlLmNwcAk5IEp1bCAy
MDA1IDA2OjUzOjI1IC0wMDAwCTEuMQorKysga2RvbS9Ob2RlLmNwcAk4IEF1ZyAyMDA1IDA4OjI0
OjA4IC0wMDAwCkBAIC04MSw3ICs4MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01f
SU1QTEVNRU5UX1BST1RPVFlQRSgiTm9kZSIsIE5vZGVQcm90bywgTm9kZVByb3RvRnVuYykKIAot
VmFsdWUgTm9kZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpOb2RlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC0xMjcsNyArMTI3LDcg
QEAgVmFsdWUgTm9kZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKgogCXJldHVybiBVbmRl
ZmluZWQoKTsKIH07CiAKLXZvaWQgTm9kZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIE5vZGU6OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwg
aW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBOb2Rl
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZQogCUtET01fTEVBVkVfU0FGRShET01FeGNl
cHRpb24pCiB9CiAKLVZhbHVlIE5vZGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqTm9kZVByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoTm9kZSkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTE4
MiwxMyArMTgyLDEzIEBAIFZhbHVlIE5vZGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGUK
IAkJCXJldHVybiBLSlM6OkJvb2xlYW4ob2JqLmhhc0NoaWxkTm9kZXMoKSk7CiAJCWNhc2UgTm9k
ZUNvbnN0YW50czo6Q2xvbmVOb2RlOgogCQl7Ci0JCQlib29sIGRlZXAgPSBhcmdzWzBdLnRvQm9v
bGVhbihleGVjKTsKKwkJCWJvb2wgZGVlcCA9IGFyZ3NbMF0tPnRvQm9vbGVhbihleGVjKTsKIAkJ
CXJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG9iai5jbG9uZU5vZGUoZGVlcCkpOwogCQl9CiAJCWNh
c2UgTm9kZUNvbnN0YW50czo6Tm9ybWFsaXplOgogCQl7CiAJCQlvYmoubm9ybWFsaXplKCk7Ci0J
CQlyZXR1cm4gVmFsdWUoKTsKKwkJCXJldHVybiBWYWx1ZUltcCgpOwogCQl9CiAJCWNhc2UgTm9k
ZUNvbnN0YW50czo6SXNTdXBwb3J0ZWQ6CiAJCXsKSW5kZXg6IGtkb20vTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vTm9kZS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL05vZGUuaAotLS0ga2RvbS9Ob2Rl
LmgJNyBBdWcgMjAwNSAwNjoxNzo0MyAtMDAwMAkxLjIKKysrIGtkb20vTm9kZS5oCTggQXVnIDIw
MDUgMDg6MjQ6MDkgLTAwMDAKQEAgLTQ4MCw4ICs0ODAsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlL
RE9NX1BVVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2
YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyKTsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChOb2RlKQpJbmRleDoga2RvbS9O
b2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2Rv
bS9Ob2RlTGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtkb20vTm9kZUxpc3QuY3BwCi0tLSBrZG9tL05vZGVMaXN0LmNwcAk5IEp1bCAyMDA1IDA2OjUz
OjI1IC0wMDAwCTEuMQorKysga2RvbS9Ob2RlTGlzdC5jcHAJOCBBdWcgMjAwNSAwODoyNDowOSAt
MDAwMApAQCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExF
TUVOVF9QUk9UT1RZUEUoIk5vZGVMaXN0IiwgTm9kZUxpc3RQcm90bywgTm9kZUxpc3RQcm90b0Z1
bmMpCiAKLVZhbHVlIE5vZGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk5vZGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBA
IC02MCw3ICs2MCw3IEBAIFZhbHVlIE5vZGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEK
IAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIE5vZGVMaXN0UHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKk5vZGVMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1w
ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhOb2RlTGlz
dCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTY5LDcgKzY5LDcgQEAgVmFsdWUgTm9kZUxpc3RQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlIAogCXsKIAkJY2FzZSBOb2RlTGlzdENvbnN0YW50czo6SXRl
bToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7
CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQly
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6
CkluZGV4OiBrZG9tL05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9Ob2RlTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrZG9tL05vZGVMaXN0LmgKLS0tIGtkb20vTm9kZUxpc3QuaAk5IEp1bCAyMDA1
IDA2OjUzOjI1IC0wMDAwCTEuMQorKysga2RvbS9Ob2RlTGlzdC5oCTggQXVnIDIwMDUgMDg6MjQ6
MDkgLTAwMDAKQEAgLTc4LDcgKzc4LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVj
bWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJ
CUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vTm90YXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vTm90YXRpb24uY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL05vdGF0aW9uLmNw
cAotLS0ga2RvbS9Ob3RhdGlvbi5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysr
IGtkb20vTm90YXRpb24uY3BwCTggQXVnIDIwMDUgMDg6MjQ6MDkgLTAwMDAKQEAgLTM3LDcgKzM3
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIE5vdGF0aW9uOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKk5vdGF0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL05vdGF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9Ob3RhdGlvbi5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL05vdGF0aW9uLmgK
LS0tIGtkb20vTm90YXRpb24uaAk5IEp1bCAyMDA1IDA2OjUzOjI1IC0wMDAwCTEuMQorKysga2Rv
bS9Ob3RhdGlvbi5oCTggQXVnIDIwMDUgMDg6MjQ6MDkgLTAwMDAKQEAgLTgxLDcgKzgxLDcgQEAg
bmFtZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKLS0tIGtkb20v
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI1IC0wMDAwCTEuMQor
Kysga2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCTggQXVnIDIwMDUgMDg6MjQ6MDkgLTAw
MDAKQEAgLTM4LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZh
bHVlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RP
TV9FTlRFUl9TQUZFCiAKQEAgLTU2LDcgKzU2LDcgQEAgVmFsdWUgUHJvY2Vzc2luZ0luc3RydWN0
aW9uOjpnZXRWYWx1ZVBybwogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb246OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2
YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKLS0tIGtkb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmgJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20v
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmgJOCBBdWcgMjAwNSAwODoyNDowOSAtMDAwMApAQCAtODEs
OCArODEsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4
OiBrZG9tL1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tkb20vVGV4dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtkb20vVGV4dC5jcHAKLS0tIGtkb20vVGV4dC5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAw
MAkxLjEKKysrIGtkb20vVGV4dC5jcHAJOCBBdWcgMjAwNSAwODoyNDowOSAtMDAwMApAQCAtNDMs
NyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZ
UEUoIlRleHQiLCBUZXh0UHJvdG8sIFRleHRQcm90b0Z1bmMpCiAKLVZhbHVlIFRleHQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
VGV4dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjEsNyArNjEsNyBAQCBWYWx1ZSBUZXh0OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1
ZSBUZXh0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlRleHRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9D
SEVDS19USElTKFRleHQpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03MCw3ICs3MCw3IEBAIFZhbHVl
IFRleHRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGUKIAl7CiAJCWNhc2UgVGV4dENvbnN0
YW50czo6U3BsaXRUZXh0OgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0u
dG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0tPnRvVUlu
dDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTU5vZGUoZXhlYywgb2JqLnNwbGl0VGV4dChvZmZz
ZXQpKTsKIAkJfQogCQljYXNlIFRleHRDb25zdGFudHM6OlJlcGxhY2VXaG9sZVRleHQ6CkluZGV4
OiBrZG9tL1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL1RleHQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2Rv
bS9UZXh0LmgKLS0tIGtkb20vVGV4dC5oCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4xCisr
KyBrZG9tL1RleHQuaAk4IEF1ZyAyMDA1IDA4OjI0OjA5IC0wMDAwCkBAIC0xMjEsNyArMTIxLDcg
QEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pT
OjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL1R5cGVJbmZv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL1R5cGVJ
bmZvLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9U
eXBlSW5mby5jcHAKLS0tIGtkb20vVHlwZUluZm8uY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAw
MDAJMS4xCisrKyBrZG9tL1R5cGVJbmZvLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjA5IC0wMDAwCkBA
IC00NCw3ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BS
T1RPVFlQRSgiVHlwZUluZm8iLCBUeXBlSW5mb1Byb3RvLCBUeXBlSW5mb1Byb3RvRnVuYykKIAot
VmFsdWUgVHlwZUluZm86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqVHlwZUluZm86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTU4LDcg
KzU4LDcgQEAgVmFsdWUgVHlwZUluZm86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgVHlwZUluZm9Qcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAq
VHlwZUluZm9Qcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFR5cGVJbmZvKQogCUtE
T01fRU5URVJfU0FGRQpAQCAtNjksNyArNjksNyBAQCBWYWx1ZSBUeXBlSW5mb1Byb3RvRnVuYzo6
Y2FsbChFeGVjU3RhdGUgCiAJCXsKIAkJCWNvbnN0IERPTVN0cmluZyB0eXBlTmFtZXNwYWNlQXJn
ID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7CiAJCQljb25zdCBET01TdHJpbmcgdHlwZU5h
bWVBcmcgPSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzFdKTsKLQkJCWNvbnN0IHVuc2lnbmVkIGxv
bmcgZGVyaXZhdGlvbk1ldGhvZCA9IGFyZ3NbMl0udG9VSW50MzIoZXhlYyk7CisJCQljb25zdCB1
bnNpZ25lZCBsb25nIGRlcml2YXRpb25NZXRob2QgPSBhcmdzWzJdLT50b1VJbnQzMihleGVjKTsK
IAogCQkJcmV0dXJuIEtKUzo6Qm9vbGVhbihvYmouaXNEZXJpdmVkRnJvbSh0eXBlTmFtZXNwYWNl
QXJnLAogCQkJCQkJCQkJCQkJICB0eXBlTmFtZUFyZywgZGVyaXZhdGlvbk1ldGhvZCkpOwpJbmRl
eDoga2RvbS9UeXBlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vVHlwZUluZm8uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS9UeXBlSW5mby5oCi0tLSBrZG9tL1R5cGVJbmZvLmgJOSBKdWwgMjAwNSAwNjo1
MzoyNSAtMDAwMAkxLjEKKysrIGtkb20vVHlwZUluZm8uaAk4IEF1ZyAyMDA1IDA4OjI0OjA5IC0w
MDAwCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2Ny
aXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwogCX07CiAKIH07CkluZGV4OiBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTQ2hh
cnNldFJ1bGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBr
ZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5jcHAKLS0tIGtkb20vY3NzL0NTU0NoYXJzZXRSdWxlLmNw
cAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtkb20vY3NzL0NTU0NoYXJzZXRS
dWxlLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjEwIC0wMDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBDU1NDaGFyc2V0UnVsZTo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkNTU0No
YXJzZXRSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTUwLDcgKzUwLDcgQEAgVmFsdWUgQ1NTQ2hhcnNl
dFJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9p
ZCBDU1NDaGFyc2V0UnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENTU0NoYXJzZXRSdWxlOjpwdXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUs
IGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9jc3MvQ1NTQ2hhcnNldFJ1
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9D
U1NDaGFyc2V0UnVsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5oCi0tLSBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5o
CTkgSnVsIDIwMDUgMDY6NTM6NDAgLTAwMDAJMS4xCisrKyBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVs
ZS5oCTggQXVnIDIwMDUgMDg6MjQ6MTAgLTAwMDAKQEAgLTUzLDggKzUzLDggQEAgbmFtZXNwYWNl
IEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6
OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3NzL0NTU0Zv
bnRGYWNlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRp
ZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAotLS0ga2RvbS9jc3Mv
Q1NTRm9udEZhY2VSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtk
b20vY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAJOCBBdWcgMjAwNSAwODoyNDoxMCAtMDAwMApAQCAt
MzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgQ1NT
Rm9udEZhY2VSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAorVmFsdWVJbXAgKkNTU0ZvbnRGYWNlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRl
eDoga2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCi0t
LSBrZG9tL2Nzcy9DU1NGb250RmFjZVJ1bGUuaAk5IEp1bCAyMDA1IDA2OjUzOjQwIC0wMDAwCTEu
MQorKysga2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgJOCBBdWcgMjAwNSAwODoyNDoxMCAtMDAw
MApAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BV
VAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2Rv
bS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCi0tLSBrZG9t
L2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysr
IGtkb20vY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MTAgLTAwMDAKQEAg
LTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIENT
U0ltcG9ydFJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqQ1NTSW1wb3J0UnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDog
a2RvbS9jc3MvQ1NTSW1wb3J0UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tkb20vY3NzL0NTU0ltcG9ydFJ1bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvQ1NTSW1wb3J0UnVsZS5oCi0tLSBrZG9tL2Nz
cy9DU1NJbXBvcnRSdWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MCAtMDAwMAkxLjEKKysrIGtkb20v
Y3NzL0NTU0ltcG9ydFJ1bGUuaAk4IEF1ZyAyMDA1IDA4OjI0OjEwIC0wMDAwCkBAIC01Niw3ICs1
Niw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NNZWRp
YVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
Y3NzL0NTU01lZGlhUnVsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11
IC1yMS4yIGtkb20vY3NzL0NTU01lZGlhUnVsZS5jcHAKLS0tIGtkb20vY3NzL0NTU01lZGlhUnVs
ZS5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NNZWRp
YVJ1bGUuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MTAgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDU1NNZWRpYVJ1
bGUiLCBDU1NNZWRpYVJ1bGVQcm90bywgQ1NTTWVkaWFSdWxlUHJvdG9GdW5jKQogCi1WYWx1ZSBD
U1NNZWRpYVJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqQ1NTTWVkaWFSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC02MCw3
ICs2MCw3IEBAIFZhbHVlIENTU01lZGlhUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAlyZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIENTU01lZGlhUnVsZVByb3RvRnVuYzo6Y2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVl
SW1wICpDU1NNZWRpYVJ1bGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKENTU01l
ZGlhUnVsZSkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTcwLDEyICs3MCwxMiBAQCBWYWx1ZSBDU1NN
ZWRpYVJ1bGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0CiAJCWNhc2UgQ1NTTWVkaWFSdWxlQ29uc3Rh
bnRzOjpJbnNlcnRSdWxlOgogCQl7CiAJCQlET01TdHJpbmcgcnVsZSA9IHRvRE9NU3RyaW5nKGV4
ZWMsIGFyZ3NbMF0pOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50MzIo
ZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7
CiAJCQlyZXR1cm4gTnVtYmVyKG9iai5pbnNlcnRSdWxlKHJ1bGUsIGluZGV4KSk7CiAJCX0KIAkJ
Y2FzZSBDU1NNZWRpYVJ1bGVDb25zdGFudHM6OkRlbGV0ZVJ1bGU6CiAJCXsKLQkJCXVuc2lnbmVk
IGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBp
bmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJb2JqLmRlbGV0ZVJ1bGUoaW5kZXgp
OwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrZG9tL2Nzcy9DU1NNZWRpYVJ1
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9D
U1NNZWRpYVJ1bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a2RvbS9jc3MvQ1NTTWVkaWFSdWxlLmgKLS0tIGtkb20vY3NzL0NTU01lZGlhUnVsZS5oCTkgSnVs
IDIwMDUgMDY6NTM6NDAgLTAwMDAJMS4xCisrKyBrZG9tL2Nzcy9DU1NNZWRpYVJ1bGUuaAk4IEF1
ZyAyMDA1IDA4OjI0OjEwIC0wMDAwCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJ
CUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
CX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NQYWdlUnVsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTUGFnZVJ1bGUuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9DU1NQYWdlUnVs
ZS5jcHAKLS0tIGtkb20vY3NzL0NTU1BhZ2VSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAt
MDAwMAkxLjIKKysrIGtkb20vY3NzL0NTU1BhZ2VSdWxlLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjEw
IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwog
Ci1WYWx1ZSBDU1NQYWdlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpDU1NQYWdlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpA
QCAtNTQsNyArNTQsNyBAQCBWYWx1ZSBDU1NQYWdlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIENTU1BhZ2VSdWxlOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGlu
dCkKK3ZvaWQgQ1NTUGFnZVJ1bGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCklu
ZGV4OiBrZG9tL2Nzcy9DU1NQYWdlUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1BhZ2VSdWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL0NTU1BhZ2VSdWxlLmgKLS0tIGtkb20vY3Nz
L0NTU1BhZ2VSdWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3Nz
L0NTU1BhZ2VSdWxlLmgJOCBBdWcgMjAwNSAwODoyNDoxMCAtMDAwMApAQCAtNTYsOCArNTYsOCBA
QCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
LQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CQkKKwkJS0pTOjpWYWx1ZUltcCAq
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CQkKIAl9OwogfTsKIApJbmRleDoga2Rv
bS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUu
Y3BwCi0tLSBrZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6
MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJOCBBdWcgMjAw
NSAwODoyNDoxMCAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwog
CiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkNTU1ByaW1pdGl2ZVZhbHVlIiwgQ1NTUHJpbWl0
aXZlVmFsdWVQcm90bywgQ1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmMpCiAKLVZhbHVlIENTU1By
aW1pdGl2ZVZhbHVlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqQ1NTUHJpbWl0aXZlVmFsdWU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNjYsNyAr
NjYsNyBAQCBWYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0VmFsdWVQcm9wZXJ0CiAJcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZVByb3RvRnVuYzo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1Zh
bHVlSW1wICpDU1NQcmltaXRpdmVWYWx1ZVByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RI
SVMoQ1NTUHJpbWl0aXZlVmFsdWUpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03NSwxOSArNzUsMTkg
QEAgVmFsdWUgQ1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmM6OmNhbGwoRQogCXsKIAkJY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZUNvbnN0YW50czo6U2V0RmxvYXRWYWx1ZToKIAkJewotCQkJdW5zaWdu
ZWQgc2hvcnQgdW5pdFR5cGUgPSBhcmdzWzBdLnRvVUludDE2KGV4ZWMpOwotCQkJZmxvYXQgZmxv
YXRWYWx1ZSA9IGFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCB1bml0
VHlwZSA9IGFyZ3NbMF0tPnRvVUludDE2KGV4ZWMpOworCQkJZmxvYXQgZmxvYXRWYWx1ZSA9IGFy
Z3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJb2JqLnNldEZsb2F0VmFsdWUodW5pdFR5cGUsIGZs
b2F0VmFsdWUpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWVDb25zdGFudHM6OkdldEZsb2F0VmFsdWU6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0
IHVuaXRUeXBlID0gYXJnc1swXS50b1VJbnQxNihleGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IHVu
aXRUeXBlID0gYXJnc1swXS0+dG9VSW50MTYoZXhlYyk7CiAJCQlyZXR1cm4gTnVtYmVyKG9iai5n
ZXRGbG9hdFZhbHVlKHVuaXRUeXBlKSk7CiAJCX0KIAkJY2FzZSBDU1NQcmltaXRpdmVWYWx1ZUNv
bnN0YW50czo6U2V0U3RyaW5nVmFsdWU6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IHN0cmluZ1R5
cGUgPSBhcmdzWzBdLnRvVUludDE2KGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgc3RyaW5nVHlw
ZSA9IGFyZ3NbMF0tPnRvVUludDE2KGV4ZWMpOwogCQkJRE9NU3RyaW5nIHN0cmluZ1ZhbHVlID0g
dG9ET01TdHJpbmcoZXhlYywgYXJnc1sxXSk7CiAJCQlvYmouc2V0U3RyaW5nVmFsdWUoc3RyaW5n
VHlwZSwgc3RyaW5nVmFsdWUpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwpJbmRleDoga2RvbS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCi0tLSBr
ZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCTkgSnVsIDIwMDUgMDY6NTM6NDEgLTAwMDAJMS4x
CisrKyBrZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCTggQXVnIDIwMDUgMDg6MjQ6MTAgLTAw
MDAKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9Q
VVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtk
b20vY3NzL0NTU1J1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vY3NzL0NTU1J1bGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAt
cCAtdSAtcjEuMiBrZG9tL2Nzcy9DU1NSdWxlLmNwcAotLS0ga2RvbS9jc3MvQ1NTUnVsZS5jcHAJ
MjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NSdWxlLmNwcAk4
IEF1ZyAyMDA1IDA4OjI0OjEwIC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBDU1NSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkNTU1J1bGU6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRv
a2VuKQogCXsKQEAgLTYyLDcgKzYyLDcgQEAgVmFsdWUgQ1NTUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBDU1NSdWxlOjpwdXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFs
dWUsIGludCkKK3ZvaWQgQ1NTUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAK
SW5kZXg6IGtkb20vY3NzL0NTU1J1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NSdWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL0NTU1J1bGUuaAotLS0ga2RvbS9jc3MvQ1NTUnVsZS5o
CTkgSnVsIDIwMDUgMDY6NTM6NDEgLTAwMDAJMS4xCisrKyBrZG9tL2Nzcy9DU1NSdWxlLmgJOCBB
dWcgMjAwNSAwODoyNDoxMCAtMDAwMApAQCAtNjIsOCArNjIsOCBAQCBuYW1lc3BhY2UgS0RPTQog
CQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQg
cHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBL
SlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQg
cHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZh
bHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIAogLy8gdGVtcGxhdGUgZm9yIGVhc2lu
ZyBhc3NpZ25pbmcgb2YgQ1NTUnVsZXMgdG8gZGVyaXZlZCBjbGFzc2VzLgpJbmRleDoga2RvbS9j
c3MvQ1NTUnVsZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vY3NzL0NTU1J1bGVMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRp
ZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTUnVsZUxpc3QuY3BwCi0tLSBrZG9tL2Nzcy9DU1NS
dWxlTGlzdC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9D
U1NSdWxlTGlzdC5jcHAJOCBBdWcgMjAwNSAwODoyNDoxMSAtMDAwMApAQCAtNDIsNyArNDIsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkNTU1J1
bGVMaXN0IiwgQ1NTUnVsZUxpc3RQcm90bywgQ1NTUnVsZUxpc3RQcm90b0Z1bmMpCiAKLVZhbHVl
IENTU1J1bGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqQ1NTUnVsZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUsNyArNTUsNyBA
QCBWYWx1ZSBDU1NSdWxlTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjCiAJcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1WYWx1ZSBDU1NSdWxlTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpDU1NS
dWxlTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoQ1NTUnVsZUxpc3QpCiAK
QEAgLTYzLDcgKzYzLDcgQEAgVmFsdWUgQ1NTUnVsZUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YQogCXsKIAkJY2FzZSBDU1NSdWxlTGlzdENvbnN0YW50czo6SXRlbToKIAkJewotCQkJdW5zaWdu
ZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25n
IGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NQ1NTUnVs
ZShleGVjLCBvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrZG9tL2Nz
cy9DU1NSdWxlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tkb20vY3NzL0NTU1J1bGVMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtkb20vY3NzL0NTU1J1bGVMaXN0LmgKLS0tIGtkb20vY3NzL0NTU1J1bGVMaXN0
LmgJOSBKdWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1J1bGVMaXN0
LmgJOCBBdWcgMjAwNSAwODoyNDoxMSAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2Ug
S0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pT
OjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NT
dHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rZG9tL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAK
LS0tIGtkb20vY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCTI5IEp1bCAyMDA1IDA2OjExOjE2
IC0wMDAwCTEuMgorKysga2RvbS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJOCBBdWcgMjAw
NSAwODoyNDoxMSAtMDAwMApAQCAtNTIsNyArNTIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwog
CiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkNTU1N0eWxlRGVjbGFyYXRpb24iLCBDU1NTdHls
ZURlY2xhcmF0aW9uUHJvdG8sIENTU1N0eWxlRGVjbGFyYXRpb25Qcm90b0Z1bmMpCiAKLVZhbHVl
IENTU1N0eWxlRGVjbGFyYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9r
ZW4pCiAJewpAQCAtNjksNyArNjksNyBAQCBWYWx1ZSBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRW
YWx1ZVByb3BlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIENTU1N0eWxlRGVjbGFy
YXRpb246OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtODUsNyArODUsNyBAQCB2b2lkIENTU1N0eWxlRGVj
bGFyYXRpb246OnB1dFZhbHVlUHJvcGVyCiAJS0RPTV9MRUFWRV9TQUZFKERPTUV4Y2VwdGlvbikK
IH0KIAotVmFsdWUgQ1NTU3R5bGVEZWNsYXJhdGlvblByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpDU1NT
dHlsZURlY2xhcmF0aW9uUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1w
ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhDU1NTdHls
ZURlY2xhcmF0aW9uKQogCUtET01fRU5URVJfU0FGRQpAQCAtMTIyLDcgKzEyMiw3IEBAIFZhbHVl
IENTU1N0eWxlRGVjbGFyYXRpb25Qcm90b0Z1bmM6OmNhbGwKIAkJfQogCQljYXNlIENTU1N0eWxl
RGVjbGFyYXRpb25Db25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgg
PSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3Nb
MF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTVN0cmluZyhvYmouaXRlbShpbmRl
eCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrZG9tL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NT
U3R5bGVEZWNsYXJhdGlvbi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrZG9tL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKLS0tIGtkb20vY3NzL0NTU1N0eWxl
RGVjbGFyYXRpb24uaAk5IEp1bCAyMDA1IDA2OjUzOjQxIC0wMDAwCTEuMQorKysga2RvbS9jc3Mv
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCTggQXVnIDIwMDUgMDg6MjQ6MTEgLTAwMDAKQEAgLTcyLDgg
KzcyLDggQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIH07CiAKSW5k
ZXg6IGtkb20vY3NzL0NTU1N0eWxlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTU3R5bGVSdWxlLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAotLS0g
a2RvbS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIK
KysrIGtkb20vY3NzL0NTU1N0eWxlUnVsZS5jcHAJOCBBdWcgMjAwNSAwODoyNDoxMSAtMDAwMApA
QCAtNDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUg
Q1NTU3R5bGVSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAorVmFsdWVJbXAgKkNTU1N0eWxlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUs
NyArNTUsNyBAQCBWYWx1ZSBDU1NTdHlsZVJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIENTU1N0eWxlUnVsZTo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2
b2lkIENTU1N0eWxlUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6
IGtkb20vY3NzL0NTU1N0eWxlUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tkb20vY3NzL0NTU1N0eWxlUnVsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9DU1NTdHlsZVJ1bGUuaAotLS0ga2RvbS9jc3Mv
Q1NTU3R5bGVSdWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3Nz
L0NTU1N0eWxlUnVsZS5oCTggQXVnIDIwMDUgMDg6MjQ6MTEgLTAwMDAKQEAgLTU1LDggKzU1LDgg
QEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIH07CiAKSW5kZXg6IGtk
b20vY3NzL0NTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tkb20vY3NzL0NTU1N0eWxlU2hlZXQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAotLS0ga2Rv
bS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisr
KyBrZG9tL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjExIC0wMDAwCkBA
IC00Nyw3ICs0Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BS
T1RPVFlQRSgiQ1NTU3R5bGVTaGVldCIsIENTU1N0eWxlU2hlZXRQcm90bywgQ1NTU3R5bGVTaGVl
dFByb3RvRnVuYykKIAotVmFsdWUgQ1NTU3R5bGVTaGVldDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZVNoZWV0Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCXN3
aXRjaCh0b2tlbikKIAl7CkBAIC02Miw3ICs2Miw3IEBAIFZhbHVlIENTU1N0eWxlU2hlZXQ6Omdl
dFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIENTU1N0
eWxlU2hlZXRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqQ1NTU3R5bGVTaGVldFByb3RvRnVuYzo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykK
IHsKIAlLRE9NX0NIRUNLX1RISVMoQ1NTU3R5bGVTaGVldCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAg
LTcyLDcgKzcyLDcgQEAgVmFsdWUgQ1NTU3R5bGVTaGVldFByb3RvRnVuYzo6Y2FsbChFeGVjUwog
CQljYXNlIENTU1N0eWxlU2hlZXRDb25zdGFudHM6Okluc2VydFJ1bGU6CiAJCXsKIAkJCURPTVN0
cmluZyBydWxlID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQl1bnNpZ25lZCBsb25n
IGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXgg
PSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJCW9iai5pbnNlcnRSdWxlKHJ1bGUsIGluZGV4
KTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpJbmRleDoga2RvbS9jc3MvQ1NTU3R5bGVT
aGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3Nz
L0NTU1N0eWxlU2hlZXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga2RvbS9jc3MvQ1NTU3R5bGVTaGVldC5oCi0tLSBrZG9tL2Nzcy9DU1NTdHlsZVNoZWV0LmgJ
OSBKdWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1N0eWxlU2hlZXQu
aAk4IEF1ZyAyMDA1IDA4OjI0OjExIC0wMDAwCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBL
RE9NCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTVmFsdWUuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9DU1NWYWx1ZS5j
cHAKLS0tIGtkb20vY3NzL0NTU1ZhbHVlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkx
LjIKKysrIGtkb20vY3NzL0NTU1ZhbHVlLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjExIC0wMDAwCkBA
IC0zOCw3ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBD
U1NWYWx1ZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKkNTU1ZhbHVlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTUzLDcgKzUzLDcgQEAgVmFsdWUg
Q1NTVmFsdWU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotdm9pZCBDU1NWYWx1ZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENTU1ZhbHVlOjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGlu
dCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9jc3MvQ1NTVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NWYWx1ZS5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9DU1NW
YWx1ZS5oCi0tLSBrZG9tL2Nzcy9DU1NWYWx1ZS5oCTkgSnVsIDIwMDUgMDY6NTM6NDIgLTAwMDAJ
MS4xCisrKyBrZG9tL2Nzcy9DU1NWYWx1ZS5oCTggQXVnIDIwMDUgMDg6MjQ6MTEgLTAwMDAKQEAg
LTYyLDggKzYyLDggQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtE
T01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRy
KTsJCQorCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsJ
CQogCX07CiAKIC8vIHRlbXBsYXRlIGZvciBlYXNpbmcgYXNzaWduaW5nIG9mIENTU1ZhbHVlcyB0
byBkZXJpdmVkIGNsYXNzZXMuCkluZGV4OiBrZG9tL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1ZhbHVlTGlz
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3Nz
L0NTU1ZhbHVlTGlzdC5jcHAKLS0tIGtkb20vY3NzL0NTU1ZhbHVlTGlzdC5jcHAJMjkgSnVsIDIw
MDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCTggQXVn
IDIwMDUgMDg6MjQ6MTEgLTAwMDAKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtK
UzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDU1NWYWx1ZUxpc3QiLCBDU1NWYWx1ZUxp
c3RQcm90bywgQ1NTVmFsdWVMaXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBDU1NWYWx1ZUxpc3Q6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpD
U1NWYWx1ZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTMsNyArNTMsNyBAQCBWYWx1ZSBDU1NWYWx1
ZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1W
YWx1ZSBDU1NWYWx1ZUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3Qg
JnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqQ1NTVmFsdWVMaXN0UHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhDU1NWYWx1ZUxpc3QpCiAKQEAgLTYxLDcgKzYx
LDcgQEAgVmFsdWUgQ1NTVmFsdWVMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdAogCXsKIAkJY2Fz
ZSBDU1NWYWx1ZUxpc3RDb25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5k
ZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFy
Z3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTUNTU1ZhbHVlKGV4ZWMsIG9i
ai5pdGVtKGluZGV4KSk7CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtkb20vY3NzL0NTU1ZhbHVl
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3Nz
L0NTU1ZhbHVlTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrZG9tL2Nzcy9DU1NWYWx1ZUxpc3QuaAotLS0ga2RvbS9jc3MvQ1NTVmFsdWVMaXN0LmgJOSBK
dWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1ZhbHVlTGlzdC5oCTgg
QXVnIDIwMDUgMDg6MjQ6MTEgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEtET00K
IAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3NzL0NvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NvdW50ZXIuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9Db3VudGVyLmNwcAotLS0g
a2RvbS9jc3MvQ291bnRlci5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBr
ZG9tL2Nzcy9Db3VudGVyLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjExIC0wMDAwCkBAIC0zOSw3ICsz
OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBDb3VudGVyOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
Q291bnRlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAog
ewogCXN3aXRjaCh0b2tlbikKIAl7CkluZGV4OiBrZG9tL2Nzcy9Db3VudGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ291bnRlci5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9Db3VudGVyLmgK
LS0tIGtkb20vY3NzL0NvdW50ZXIuaAk5IEp1bCAyMDA1IDA2OjUzOjQyIC0wMDAwCTEuMQorKysg
a2RvbS9jc3MvQ291bnRlci5oCTggQXVnIDIwMDUgMDg6MjQ6MTEgLTAwMDAKQEAgLTU2LDcgKzU2
LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlL
RE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRl
eDoga2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0RvY3VtZW50U3R5bGUuY3BwCi0t
LSBrZG9tL2Nzcy9Eb2N1bWVudFN0eWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkx
LjIKKysrIGtkb20vY3NzL0RvY3VtZW50U3R5bGUuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MTIgLTAw
MDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZh
bHVlIERvY3VtZW50U3R5bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRTdHlsZTo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJ
bmRleDoga2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0RvY3VtZW50U3R5bGUuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5oCi0tLSBr
ZG9tL2Nzcy9Eb2N1bWVudFN0eWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysr
IGtkb20vY3NzL0RvY3VtZW50U3R5bGUuaAk4IEF1ZyAyMDA1IDA4OjI0OjEyIC0wMDAwCkBAIC01
NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rp
b24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9NZWRpYUxpc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL01lZGlhTGlzdC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL01lZGlhTGlzdC5j
cHAKLS0tIGtkb20vY3NzL01lZGlhTGlzdC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJ
MS4yCisrKyBrZG9tL2Nzcy9NZWRpYUxpc3QuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MTIgLTAwMDAK
QEAgLTQ2LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRf
UFJPVE9UWVBFKCJNZWRpYUxpc3QiLCBNZWRpYUxpc3RQcm90bywgTWVkaWFMaXN0UHJvdG9GdW5j
KQogCi1WYWx1ZSBNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNjEsNyAr
NjEsNyBAQCBWYWx1ZSBNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0CiAJcmV0dXJu
IFVuZGVmaW5lZCgpOwogfTsKIAotdm9pZCBNZWRpYUxpc3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBN
ZWRpYUxpc3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZh
bHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03Nyw3ICs3Nyw3
IEBAIHZvaWQgTWVkaWFMaXN0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlLRE9NX0xFQVZF
X1NBRkUoRE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBNZWRpYUxpc3RQcm90b0Z1bmM6OmNhbGwo
RXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1
ZUltcCAqTWVkaWFMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1w
ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhNZWRpYUxp
c3QpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC04Niw3ICs4Niw3IEBAIFZhbHVlIE1lZGlhTGlzdFBy
b3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUKIAl7CiAJCWNhc2UgTWVkaWFMaXN0Q29uc3RhbnRzOjpJ
dGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVj
KTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJ
CXJldHVybiBnZXRET01TdHJpbmcob2JqLml0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIE1lZGlh
TGlzdENvbnN0YW50czo6RGVsZXRlTWVkaXVtOgpJbmRleDoga2RvbS9jc3MvTWVkaWFMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvTWVkaWFM
aXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3Nz
L01lZGlhTGlzdC5oCi0tLSBrZG9tL2Nzcy9NZWRpYUxpc3QuaAk5IEp1bCAyMDA1IDA2OjUzOjQy
IC0wMDAwCTEuMQorKysga2RvbS9jc3MvTWVkaWFMaXN0LmgJOCBBdWcgMjAwNSAwODoyNDoxMiAt
MDAwMApAQCAtNjEsOCArNjEsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9N
X1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7
CQkKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CQkK
IAl9OwogfTsKIApJbmRleDoga2RvbS9jc3MvUkdCQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL1JHQkNvbG9yLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvUkdCQ29sb3IuY3BwCi0t
LSBrZG9tL2Nzcy9SR0JDb2xvci5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisr
KyBrZG9tL2Nzcy9SR0JDb2xvci5jcHAJOCBBdWcgMjAwNSAwODoyNDoxMiAtMDAwMApAQCAtNDIs
NyArNDIsNyBAQCBuYW1lc3BhY2UgS0RPTQogQGVuZAogKi8KIAotVmFsdWUgUkdCQ29sb3I6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqUkdCQ29sb3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtkb20vY3NzL1JHQkNvbG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvUkdCQ29s
b3IuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3Mv
UkdCQ29sb3IuaAotLS0ga2RvbS9jc3MvUkdCQ29sb3IuaAk5IEp1bCAyMDA1IDA2OjUzOjQyIC0w
MDAwCTEuMQorKysga2RvbS9jc3MvUkdCQ29sb3IuaAk4IEF1ZyAyMDA1IDA4OjI0OjEyIC0wMDAw
CkBAIC01OCw3ICs1OCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0
IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtkb20vY3NzL1JlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL1JlY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9SZWN0LmNwcAotLS0ga2RvbS9jc3MvUmVj
dC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9SZWN0LmNw
cAk4IEF1ZyAyMDA1IDA4OjI0OjEyIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBL
RE9NCiBAZW5kCiAqLwogCi1LSlM6OlZhbHVlIFJlY3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitLSlM6OlZhbHVlSW1wICpSZWN0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0
b2tlbikKIAl7CkluZGV4OiBrZG9tL2Nzcy9SZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvUmVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9SZWN0LmgKLS0tIGtkb20vY3NzL1JlY3QuaAk5
IEp1bCAyMDA1IDA2OjUzOjQyIC0wMDAwCTEuMQorKysga2RvbS9jc3MvUmVjdC5oCTggQXVnIDIw
MDUgMDg6MjQ6MTIgLTAwMDAKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJs
aWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9jc3MvU3R5bGVTaGVldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvU3R5bGVT
aGVldC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20v
Y3NzL1N0eWxlU2hlZXQuY3BwCi0tLSBrZG9tL2Nzcy9TdHlsZVNoZWV0LmNwcAkyOSBKdWwgMjAw
NSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtkb20vY3NzL1N0eWxlU2hlZXQuY3BwCTggQXVnIDIw
MDUgMDg6MjQ6MTIgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsK
IEBlbmQKICovCiAKLVZhbHVlIFN0eWxlU2hlZXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU3R5bGVTaGVldDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9r
ZW4pCiAJewpAQCAtNjgsMTIgKzY4LDEyIEBAIFZhbHVlIFN0eWxlU2hlZXQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1MKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9OwogCi12b2lkIFN0eWxlU2hlZXQ6
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
ICZ2YWx1ZSwgaW50KQordm9pZCBTdHlsZVNoZWV0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9r
ZW4pCiAJewogCQljYXNlIFN0eWxlU2hlZXRDb25zdGFudHM6OkRpc2FibGVkOgotCQkJc2V0RGlz
YWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKwkJCXNldERpc2FibGVkKHZhbHVlLT50b0Jv
b2xlYW4oZXhlYykpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlrZFdhcm5pbmcoKSA8PCAi
VW5oYW5kbGVkIHRva2VuIGluICIgPDwga19mdW5jaW5mbyA8PCAiIDogIiA8PCB0b2tlbiA8PCBl
bmRsOwpJbmRleDoga2RvbS9jc3MvU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL1N0eWxlU2hlZXQuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvU3R5bGVTaGVldC5oCi0tLSBrZG9t
L2Nzcy9TdHlsZVNoZWV0LmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20v
Y3NzL1N0eWxlU2hlZXQuaAk4IEF1ZyAyMDA1IDA4OjI0OjEyIC0wMDAwCkBAIC02Nyw4ICs2Nyw4
IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CQkKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CQkKIAl9OwogfTsK
IApJbmRleDoga2RvbS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvU3R5bGVTaGVldExp
c3QuY3BwCi0tLSBrZG9tL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6
MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJOCBBdWcgMjAwNSAw
ODoyNDoxMiAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBL
RE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIlN0eWxlU2hlZXRMaXN0IiwgU3R5bGVTaGVldExpc3RQ
cm90bywgU3R5bGVTaGVldExpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIFN0eWxlU2hlZXRMaXN0Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
U3R5bGVTaGVldExpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikg
Y29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUsNyArNTUsNyBAQCBWYWx1ZSBTdHls
ZVNoZWV0TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1WYWx1ZSBTdHlsZVNoZWV0TGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTdHlsZVNoZWV0TGlz
dFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoU3R5bGVTaGVldExpc3QpCiAKQEAg
LTYzLDcgKzYzLDcgQEAgVmFsdWUgU3R5bGVTaGVldExpc3RQcm90b0Z1bmM6OmNhbGwoRXhlYwog
CXsKIAkJY2FzZSBTdHlsZVNoZWV0TGlzdENvbnN0YW50czo6SXRlbToKIAkJewotCQkJdW5zaWdu
ZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25n
IGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gc2FmZV9jYWNoZTxT
dHlsZVNoZWV0PihleGVjLCBvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4
OiBrZG9tL2Nzcy9TdHlsZVNoZWV0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmgKLS0tIGtk
b20vY3NzL1N0eWxlU2hlZXRMaXN0LmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysr
IGtkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmgJOCBBdWcgMjAwNSAwODoyNDoxMiAtMDAwMApAQCAt
NTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0
aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrZG9tL2RhdGEvZ2VuZXJhdGVkZGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9kYXRhL2dlbmVyYXRlZGRhdGEuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2RhdGEvZ2VuZXJhdGVk
ZGF0YS5jcHAKLS0tIGtkb20vZGF0YS9nZW5lcmF0ZWRkYXRhLmNwcAk5IEp1bCAyMDA1IDA2OjUz
OjU3IC0wMDAwCTEuMQorKysga2RvbS9kYXRhL2dlbmVyYXRlZGRhdGEuY3BwCTggQXVnIDIwMDUg
MDg6MjQ6MTYgLTAwMDAKQEAgLTI4OCw3ICsyODgsNyBAQCBib29sIEFic3RyYWN0Vmlldzo6aGFz
UHJvcGVydHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBBYnN0cmFj
dFZpZXc6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQWJzdHJhY3RWaWV3
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1
ZTxBYnN0cmFjdFZpZXc+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTMwMywx
NiArMzAzLDE2IEBAIEFic3RyYWN0VmlldyBLRE9NOjp0b0Fic3RyYWN0VmlldyhLSlM6OkUKICAg
ICByZXR1cm4gQWJzdHJhY3RWaWV3OjpudWxsOwogfQogCi1WYWx1ZSBBYnN0cmFjdFZpZXc6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQWJzdHJhY3RWaWV3
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAx
KTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgQWJzdHJhY3RWaWV3Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K09iamVjdEltcCAqQWJzdHJhY3RWaWV3Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJv
dG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICBy
ZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpBYnN0cmFjdFZpZXc6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtMzIwLDcgKzMyMCw3IEBAIE9iamVjdEltcCAqQWJzdHJhY3RWaWV3
OjpicmlkZ2UoRXhlY1N0YXQKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxBYnN0cmFjdFZpZXc+
KHAxLHN0YXRpY19jYXN0PEFic3RyYWN0Vmlldzo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVl
IEFic3RyYWN0Vmlldzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpBYnN0
cmFjdFZpZXc6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hl
RE9NT2JqZWN0PEFic3RyYWN0Vmlldz4ocDEsc3RhdGljX2Nhc3Q8QWJzdHJhY3RWaWV3OjpQcml2
YXRlICo+KGQpKTsKIH0KQEAgLTMzMyw3ICszMzMsNyBAQCBib29sIEF0dHI6Omhhc1Byb3BlcnR5
KEV4ZWNTdGF0ZSAqcDEsY29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBBdHRyOjpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkF0dHI6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPEF0dHI+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTM0Niw3ICszNDYsNyBAQCBBdHRyIEtET006OnRv
QXR0cihLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgCiAgICAgcmV0dXJuIEF0dHI6Om51bGw7CiB9CiAK
LVZhbHVlIEF0dHI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqQXR0cjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihO
b2RlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBOb2RlOjpnZXQocDEscDIscDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTM2NiwxMCArMzY2LDEwIEBAIGJvb2wgQXR0cjo6cHV0
SW5QYXJlbnRzKFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVj
dCBBdHRyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQXR0cjo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+
aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqQXR0cjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNzcsNyArMzc3LDcgQEAg
T2JqZWN0SW1wICpBdHRyOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgYwogICAgIHJldHVybiBuZXcg
RE9NUldCcmlkZ2U8QXR0cj4ocDEsc3RhdGljX2Nhc3Q8QXR0cjo6UHJpdmF0ZSAqPihkKSk7CiB9
CiAKLVZhbHVlIEF0dHI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqQXR0
cjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmpl
Y3Q8QXR0cj4ocDEsc3RhdGljX2Nhc3Q8QXR0cjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zOTAs
MTIgKzM5MCwxMiBAQCBib29sIENTU0NoYXJzZXRSdWxlOjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDU1NDaGFyc2V0UnVsZTo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NDaGFyc2V0UnVsZTo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Q1NTQ2hhcnNldFJ1bGU+
KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgQ1NTQ2hhcnNldFJ1bGU6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTQ2hhcnNl
dFJ1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoQ1NT
UnVsZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gQ1NTUnVsZTo6Z2V0KHAxLHAyLHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00MTUsMTAgKzQxNSwxMCBAQCBib29sIENTU0No
YXJzZXRSdWxlOjpwdXRJblBhcmVudHMoUFVUX01FCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1P
YmplY3QgQ1NTQ2hhcnNldFJ1bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpDU1NDaGFyc2V0UnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3Rv
dHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0
dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTQ2hhcnNldFJ1bGU6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtNDI2LDcgKzQyNiw3IEBAIE9iamVjdEltcCAqQ1NTQ2hhcnNldFJ1
bGU6OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU0NoYXJzZXRS
dWxlPihwMSxzdGF0aWNfY2FzdDxDU1NDaGFyc2V0UnVsZTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAK
LVZhbHVlIENTU0NoYXJzZXRSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKkNTU0NoYXJzZXRSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJl
dHVybiBjYWNoZURPTU9iamVjdDxDU1NDaGFyc2V0UnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTQ2hh
cnNldFJ1bGU6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNDM5LDEyICs0MzksMTIgQEAgYm9vbCBD
U1NGb250RmFjZVJ1bGU6Omhhc1Byb3BlcnR5KEV4ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgQ1NTRm9udEZhY2VSdWxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKkNTU0ZvbnRGYWNlUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Q1NTRm9udEZhY2VSdWxlPihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIENTU0ZvbnRGYWNlUnVsZTo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NGb250RmFjZVJ1bGU6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoQ1NTUnVsZTo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gQ1NTUnVsZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CkBAIC00NjQsMTAgKzQ2NCwxMCBAQCBib29sIENTU0ZvbnRGYWNlUnVsZTo6cHV0
SW5QYXJlbnRzKFBVVF9NCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgQ1NTRm9udEZh
Y2VSdWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTRm9u
dEZhY2VSdWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpDU1NGb250RmFjZVJ1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtNDc1LDcgKzQ3NSw3IEBAIE9iamVjdEltcCAqQ1NTRm9udEZhY2VSdWxlOjpicmlkZ2Uo
RXhlY1MKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU0ZvbnRGYWNlUnVsZT4ocDEsc3Rh
dGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NT
Rm9udEZhY2VSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU0Zv
bnRGYWNlUnVsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2Fj
aGVET01PYmplY3Q8Q1NTRm9udEZhY2VSdWxlPihwMSxzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1
bGU6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNDg4LDEyICs0ODgsMTIgQEAgYm9vbCBDU1NJbXBv
cnRSdWxlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgQ1NTSW1wb3J0UnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpD
U1NJbXBvcnRSdWxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBs
b29rdXBHZXRWYWx1ZTxDU1NJbXBvcnRSdWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7
CiB9CiAKLVZhbHVlIENTU0ltcG9ydFJ1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqQ1NTSW1wb3J0UnVsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICBpZihDU1NSdWxlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBDU1NSdWxlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTUx
MywxMCArNTEzLDEwIEBAIGJvb2wgQ1NTSW1wb3J0UnVsZTo6cHV0SW5QYXJlbnRzKFBVVF9NRVQK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBDU1NJbXBvcnRSdWxlOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTSW1wb3J0UnVsZTo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0
ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTSW1w
b3J0UnVsZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01MjQsNyArNTI0LDcgQEAg
T2JqZWN0SW1wICpDU1NJbXBvcnRSdWxlOjpicmlkZ2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcg
RE9NUldCcmlkZ2U8Q1NTSW1wb3J0UnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZTo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIENTU0ltcG9ydFJ1bGU6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqQ1NTSW1wb3J0UnVsZTo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTSW1wb3J0UnVsZT4ocDEs
c3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01MzMsMTMg
KzUzMywxMyBAQCBib29sIENTU01lZGlhUnVsZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiB7CiAg
ICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkNTU01lZGlhUnVsZTo6
c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90
byA9IENTU01lZGlhUnVsZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDU1NNZWRpYVJ1
bGVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CiAgICAgaWYoQ1NTUnVsZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1
ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENTU01lZGlhUnVsZTo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NNZWRpYVJ1bGU6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxDU1NNZWRpYVJ1bGVQcm90b0Z1
bmMsQ1NTTWVkaWFSdWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC01NjIs
MTAgKzU2MiwxMCBAQCBDU1NNZWRpYVJ1bGUgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpCiAJ
UV9VTlVTRUQocDEpOyByZXR1cm4gQ1NTTWVkaWFSdWxlOjpudWxsOwogfQogCi1WYWx1ZSBDU1NN
ZWRpYVJ1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
Q1NTTWVkaWFSdWxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAg
IE9iamVjdCBwcm90byA9IENTU01lZGlhUnVsZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90
by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVj
dEltcCAqcHJvdG8gPSBDU1NNZWRpYVJ1bGVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKENT
U1J1bGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENTU1J1bGU6OmdldChwMSxwMixwMyk7
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtNTg0LDEwICs1ODQsMTAgQEAgYm9vbCBD
U1NNZWRpYVJ1bGU6OnB1dEluUGFyZW50cyhQVVRfTUVUSAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotT2JqZWN0IENTU01lZGlhUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitP
YmplY3RJbXAgKkNTU01lZGlhUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgaWYocDEpIHJldHVybiBDU1NNZWRpYVJ1bGVQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpDU1NNZWRpYVJ1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
NTk1LDcgKzU5NSw3IEBAIE9iamVjdEltcCAqQ1NTTWVkaWFSdWxlOjpicmlkZ2UoRXhlY1N0YXQK
ICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU01lZGlhUnVsZT4ocDEsc3RhdGljX2Nhc3Q8
Q1NTTWVkaWFSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTTWVkaWFSdWxlOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU01lZGlhUnVsZTo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTTWVk
aWFSdWxlPihwMSxzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGU6OlByaXZhdGUgKj4oZCkpOwogfQpA
QCAtNjA4LDEyICs2MDgsMTIgQEAgYm9vbCBDU1NQYWdlUnVsZTo6aGFzUHJvcGVydHkoRXhlY1N0
YXRlIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgQ1NTUGFnZVJ1bGU6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTUGFnZVJ1bGU6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPENTU1BhZ2VSdWxlPihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIENTU1BhZ2VSdWxlOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1BhZ2VSdWxlOjpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKENTU1J1bGU6Omhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENTU1J1bGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwpAQCAtNjMzLDEwICs2MzMsMTAgQEAgYm9vbCBDU1NQYWdlUnVsZTo6
cHV0SW5QYXJlbnRzKFBVVF9NRVRITwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IENT
U1BhZ2VSdWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NT
UGFnZVJ1bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKkNTU1BhZ2VSdWxlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTY0NCw3ICs2NDQsNyBAQCBPYmplY3RJbXAgKkNTU1BhZ2VSdWxlOjpicmlkZ2UoRXhlY1N0YXRl
CiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxDU1NQYWdlUnVsZT4ocDEsc3RhdGljX2Nhc3Q8
Q1NTUGFnZVJ1bGU6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NQYWdlUnVsZTo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpDU1NQYWdlUnVsZTo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTUGFnZVJ1
bGU+KHAxLHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTY1
MywxMyArNjUzLDEzIEBAIGJvb2wgQ1NTUHJpbWl0aXZlVmFsdWU6Omhhc1Byb3BlcnR5KEV4ZWMK
IHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmQ1NTUHJpbWl0
aXZlVmFsdWU6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBP
YmplY3QgcHJvdG8gPSBDU1NQcmltaXRpdmVWYWx1ZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihw
cm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBDU1NQcmltaXRpdmVWYWx1ZVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihDU1NWYWx1ZTo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENT
U1ByaW1pdGl2ZVZhbHVlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNT
U1ByaW1pdGl2ZVZhbHVlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBsb29rdXBHZXQ8Q1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmMsQ1NTUHJpbWl0aXZlVmFsdWU+
KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTY4MiwxMCArNjgyLDEwIEBAIENT
U1ByaW1pdGl2ZVZhbHVlIEtET006OkVjbWFJbnRlcmZhY2U6OmkKIAlRX1VOVVNFRChwMSk7IHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6bnVsbDsKIH0KIAotVmFsdWUgQ1NTUHJpbWl0aXZlVmFs
dWU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTUHJp
bWl0aXZlVmFsdWU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAg
T2JqZWN0IHByb3RvID0gQ1NTUHJpbWl0aXZlVmFsdWVQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYo
cHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBP
YmplY3RJbXAgKnByb3RvID0gQ1NTUHJpbWl0aXZlVmFsdWVQcm90bzo6c2VsZihwMSk7CisgICAg
aWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwog
ICAgIGlmKENTU1ZhbHVlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBDU1NWYWx1ZTo6Z2V0
KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC03MDQsMTAgKzcwNCwx
MCBAQCBib29sIENTU1ByaW1pdGl2ZVZhbHVlOjpwdXRJblBhcmVudHMoUFVUCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1PYmplY3QgQ1NTUHJpbWl0aXZlVmFsdWU6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpDU1NQcmltaXRpdmVWYWx1ZTo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZVByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkp
OworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkNTU1ByaW1pdGl2ZVZhbHVlOjpi
cmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTcxNSw3ICs3MTUsNyBAQCBPYmplY3RJbXAg
KkNTU1ByaW1pdGl2ZVZhbHVlOjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRn
ZTxDU1NQcmltaXRpdmVWYWx1ZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlBy
aXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpDU1NQcmltaXRpdmVWYWx1ZTo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHAxLHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTcyOCwxMiArNzI4LDEyIEBAIGJvb2wgQ1NTUnVsZTo6aGFzUHJvcGVydHkoRXhlY1N0
YXRlICpwMSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENTU1J1bGU6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Q1NTUnVsZT4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBDU1NSdWxlOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1J1bGU6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFf
VU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC03NTAsMTAgKzc1MCwxMCBA
QCBib29sIENTU1J1bGU6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0FSCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1PYmplY3QgQ1NTUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKkNTU1J1bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5
cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVy
biBOVUxMOwogfQogCiBPYmplY3RJbXAgKkNTU1J1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBj
b25zdApAQCAtNzYxLDcgKzc2MSw3IEBAIE9iamVjdEltcCAqQ1NTUnVsZTo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU1J1bGU+KHAxLHN0YXRpY19j
YXN0PENTU1J1bGU6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NSdWxlOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU1J1bGU6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU1J1bGU+KHAxLHN0YXRp
Y19jYXN0PENTU1J1bGU6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNzcwLDE1ICs3NzAsMTUgQEAg
Ym9vbCBDU1NSdWxlTGlzdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlIAogewogICAgIGNvbnN0IEhh
c2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZDU1NSdWxlTGlzdDo6c19oYXNoVGFibGUs
cDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IENTU1J1bGVM
aXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IENTU1J1bGVMaXN0UHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAg
IGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsKICAg
ICBpZihvayAmJiBpIDwgbGVuZ3RoKCkpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgQ1NTUnVsZUxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqQ1NTUnVsZUxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgYm9v
bCBvazsKICAgICB1bnNpZ25lZCBpbnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwpAQCAtODA0
LDE4ICs4MDQsMTggQEAgQ1NTUnVsZUxpc3QgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdAog
CVFfVU5VU0VEKHAxKTsgcmV0dXJuIENTU1J1bGVMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBDU1NS
dWxlTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpD
U1NSdWxlTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBP
YmplY3QgcHJvdG8gPSBDU1NSdWxlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdElt
cCAqcHJvdG8gPSBDU1NSdWxlTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQo
cDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IENTU1J1bGVMaXN0Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTUnVsZUxpc3Q6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gQ1NTUnVs
ZUxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVs
bCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpDU1NSdWxlTGlzdDo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC04MjMsNyArODIzLDcgQEAgT2JqZWN0SW1wICpD
U1NSdWxlTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPENT
U1J1bGVMaXN0PihwMSxzdGF0aWNfY2FzdDxDU1NSdWxlTGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9
CiAKLVZhbHVlIENTU1J1bGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKkNTU1J1bGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVy
biBjYWNoZURPTU9iamVjdDxDU1NSdWxlTGlzdD4ocDEsc3RhdGljX2Nhc3Q8Q1NTUnVsZUxpc3Q6
OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtODMyLDE1ICs4MzIsMTUgQEAgYm9vbCBDU1NTdHlsZURl
Y2xhcmF0aW9uOjpoYXNQcm9wZXJ0eShFeAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExv
b2t1cDo6ZmluZEVudHJ5KCZDU1NTdHlsZURlY2xhcmF0aW9uOjpzX2hhc2hUYWJsZSxwMik7CiAg
ICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gQ1NTU3R5bGVEZWNsYXJh
dGlvblByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDU1NTdHlsZURlY2xhcmF0aW9uUHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0
cnVlOwogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5SW5kZXgo
Jm9rKTsKICAgICBpZihvayAmJiBpIDwgbGVuZ3RoKCkpIHJldHVybiB0cnVlOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotVmFsdWUgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50
b0FycmF5SW5kZXgoJm9rKTsKQEAgLTg2NiwxMCArODY2LDEwIEBAIENTU1N0eWxlRGVjbGFyYXRp
b24gS0RPTTo6RWNtYUludGVyZmFjZToKIAlRX1VOVVNFRChwMSk7IHJldHVybiBDU1NTdHlsZURl
Y2xhcmF0aW9uOjpudWxsOwogfQogCi1WYWx1ZSBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1N0eWxlRGVjbGFyYXRp
b246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gQ1NTU3R5bGVEZWNsYXJhdGlvblByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdElt
cCAqcHJvdG8gPSBDU1NTdHlsZURlY2xhcmF0aW9uUHJvdG86OnNlbGYocDEpOworICAgIGlmKHBy
b3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBR
X1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtODg1LDEwICs4ODUs
MTAgQEAgYm9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjpwdXRJblBhcmVudHMoUAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotT2JqZWN0IENTU1N0eWxlRGVjbGFyYXRpb246OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpDU1NTdHlsZURlY2xhcmF0aW9uOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIENTU1N0eWxlRGVj
bGFyYXRpb25Qcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpDU1NTdHlsZURlY2xh
cmF0aW9uOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTg5Niw3ICs4OTYsNyBAQCBP
YmplY3RJbXAgKkNTU1N0eWxlRGVjbGFyYXRpb246OmJyaWRnZShFCiAgICAgcmV0dXJuIG5ldyBE
T01SV0JyaWRnZTxDU1NTdHlsZURlY2xhcmF0aW9uPihwMSxzdGF0aWNfY2FzdDxDU1NTdHlsZURl
Y2xhcmF0aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZURlY2xhcmF0
aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9i
amVjdDxDU1NTdHlsZURlY2xhcmF0aW9uPihwMSxzdGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0
aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTkwOSwxMiArOTA5LDEyIEBAIGJvb2wgQ1NTU3R5
bGVSdWxlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIENTU1N0eWxlUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpD
U1NTdHlsZVJ1bGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxv
b2t1cEdldFZhbHVlPENTU1N0eWxlUnVsZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBDU1NTdHlsZVJ1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqQ1NTU3R5bGVSdWxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKENTU1J1bGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENT
U1J1bGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtOTM0LDEw
ICs5MzQsMTAgQEAgYm9vbCBDU1NTdHlsZVJ1bGU6OnB1dEluUGFyZW50cyhQVVRfTUVUSAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IENTU1N0eWxlUnVsZTo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkNTU1N0eWxlUnVsZTo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTU3R5bGVSdWxl
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTk0NSw3ICs5NDUsNyBAQCBPYmplY3RJ
bXAgKkNTU1N0eWxlUnVsZTo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBET01SV0Jy
aWRnZTxDU1NTdHlsZVJ1bGU+KHAxLHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZTo6UHJpdmF0ZSAq
PihkKSk7CiB9CiAKLVZhbHVlIENTU1N0eWxlUnVsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpDU1NTdHlsZVJ1bGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU1N0eWxlUnVsZT4ocDEsc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTk1NCwxMyArOTU0LDEzIEBAIGJv
b2wgQ1NTU3R5bGVTaGVldDo6aGFzUHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNo
RW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmQ1NTU3R5bGVTaGVldDo6c19oYXNoVGFibGUs
cDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IENTU1N0eWxl
U2hlZXRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gQ1NTU3R5bGVTaGVldFByb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
ICAgICBpZihTdHlsZVNoZWV0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgQ1NTU3R5bGVTaGVldDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZVNoZWV0OjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8Q1NTU3R5bGVTaGVldFByb3RvRnVuYyxD
U1NTdHlsZVNoZWV0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC05ODMsMTAg
Kzk4MywxMCBAQCBDU1NTdHlsZVNoZWV0IEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVyCiAJUV9V
TlVTRUQocDEpOyByZXR1cm4gQ1NTU3R5bGVTaGVldDo6bnVsbDsKIH0KIAotVmFsdWUgQ1NTU3R5
bGVTaGVldDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpD
U1NTdHlsZVNoZWV0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAg
IE9iamVjdCBwcm90byA9IENTU1N0eWxlU2hlZXRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJv
dG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmpl
Y3RJbXAgKnByb3RvID0gQ1NTU3R5bGVTaGVldFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90
by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYo
U3R5bGVTaGVldDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU3R5bGVTaGVldDo6Z2V0KHAx
LHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0xMDA1LDEwICsxMDA1LDEw
IEBAIGJvb2wgQ1NTU3R5bGVTaGVldDo6cHV0SW5QYXJlbnRzKFBVVF9NRVQKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU9iamVjdCBDU1NTdHlsZVNoZWV0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqQ1NTU3R5bGVTaGVldDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBDU1NTdHlsZVNoZWV0UHJvdG86OnNlbGYo
cDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTU3R5bGVTaGVldDo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CkBAIC0xMDE2LDcgKzEwMTYsNyBAQCBPYmplY3RJbXAgKkNTU1N0eWxlU2hlZXQ6
OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxDU1NTdHlsZVNoZWV0
PihwMSxzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFs
dWUgQ1NTU3R5bGVTaGVldDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpD
U1NTdHlsZVNoZWV0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBj
YWNoZURPTU9iamVjdDxDU1NTdHlsZVNoZWV0PihwMSxzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0
OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTEwMjksMTIgKzEwMjksMTIgQEAgYm9vbCBDU1NWYWx1
ZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgQ1NTVmFsdWU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTVmFs
dWU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZh
bHVlPENTU1ZhbHVlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIENT
U1ZhbHVlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNT
U1ZhbHVlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5V
U0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwpAQCAtMTA1MSwxMCArMTA1MSwxMCBAQCBib29sIENTU1ZhbHVlOjpwdXRJblBhcmVudHMo
UFVUX01FVEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgQ1NTVmFsdWU6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpDU1NWYWx1ZTo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NT
VmFsdWU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTA2Miw3ICsxMDYyLDcgQEAg
T2JqZWN0SW1wICpDU1NWYWx1ZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcg
RE9NUldCcmlkZ2U8Q1NTVmFsdWU+KHAxLHN0YXRpY19jYXN0PENTU1ZhbHVlOjpQcml2YXRlICo+
KGQpKTsKIH0KIAotVmFsdWUgQ1NTVmFsdWU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqQ1NTVmFsdWU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGNhY2hlRE9NT2JqZWN0PENTU1ZhbHVlPihwMSxzdGF0aWNfY2FzdDxDU1NWYWx1ZTo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC0xMDcxLDggKzEwNzEsOCBAQCBib29sIENTU1ZhbHVlTGlzdDo6
aGFzUHJvcGVydHkoRXhlY1N0YXRlCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3Vw
OjpmaW5kRW50cnkoJkNTU1ZhbHVlTGlzdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJl
dHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IENTU1ZhbHVlTGlzdFByb3RvOjpzZWxmKHAx
KTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9i
amVjdEltcCAqcHJvdG8gPSBDU1NWYWx1ZUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJv
dG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoQ1NTVmFsdWU6Omhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25l
ZCBpbnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwpAQCAtMTA4MCw3ICsxMDgwLDcgQEAgYm9v
bCBDU1NWYWx1ZUxpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgQ1NTVmFsdWVMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKkNTU1ZhbHVlTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBi
b29sIG9rOwogICAgIHVuc2lnbmVkIGludCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7CkBAIC0x
MTA2LDEwICsxMTA2LDEwIEBAIENTU1ZhbHVlTGlzdCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhl
cmkKIAlRX1VOVVNFRChwMSk7IHJldHVybiBDU1NWYWx1ZUxpc3Q6Om51bGw7CiB9CiAKLVZhbHVl
IENTU1ZhbHVlTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpDU1NWYWx1ZUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
Ci0gICAgT2JqZWN0IHByb3RvID0gQ1NTVmFsdWVMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlm
KHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IENTU1ZhbHVlTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihw
cm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAg
aWYoQ1NTVmFsdWU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENTU1ZhbHVlOjpnZXQocDEs
cDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAgLTExMjgsMTAgKzExMjgsMTAg
QEAgYm9vbCBDU1NWYWx1ZUxpc3Q6OnB1dEluUGFyZW50cyhQVVRfTUVUSAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotT2JqZWN0IENTU1ZhbHVlTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKkNTU1ZhbHVlTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBDU1NWYWx1ZUxpc3RQcm90bzo6c2VsZihwMSk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpDU1NWYWx1ZUxpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBj
b25zdApAQCAtMTEzOSw3ICsxMTM5LDcgQEAgT2JqZWN0SW1wICpDU1NWYWx1ZUxpc3Q6OmJyaWRn
ZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8Q1NTVmFsdWVMaXN0PihwMSxz
dGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3Q6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NW
YWx1ZUxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqQ1NTVmFsdWVM
aXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9i
amVjdDxDU1NWYWx1ZUxpc3Q+KHAxLHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdDo6UHJpdmF0ZSAq
PihkKSk7CiB9CkBAIC0xMTQ4LDEzICsxMTQ4LDEzIEBAIGJvb2wgQ2hhcmFjdGVyRGF0YTo6aGFz
UHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZp
bmRFbnRyeSgmQ2hhcmFjdGVyRGF0YTo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVy
biB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IENoYXJhY3RlckRhdGFQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmpl
Y3RJbXAgKnByb3RvID0gQ2hhcmFjdGVyRGF0YVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90
by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihOb2RlOjpoYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
Q2hhcmFjdGVyRGF0YTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDaGFy
YWN0ZXJEYXRhOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29r
dXBHZXQ8Q2hhcmFjdGVyRGF0YVByb3RvRnVuYyxDaGFyYWN0ZXJEYXRhPihwMSxwMiwmc19oYXNo
VGFibGUsdGhpcyxwMyk7CiB9CkBAIC0xMTgzLDEwICsxMTgzLDEwIEBAIENoYXJhY3RlckRhdGEg
S0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXIKIAlRX1VOVVNFRChwMSk7IHJldHVybiBDaGFyYWN0
ZXJEYXRhOjpudWxsOwogfQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNoYXJhY3RlckRhdGE6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gQ2hhcmFjdGVy
RGF0YVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDaGFyYWN0ZXJE
YXRhUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihOb2RlOjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBOb2RlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0K
QEAgLTEyMDUsMTAgKzEyMDUsMTAgQEAgYm9vbCBDaGFyYWN0ZXJEYXRhOjpwdXRJblBhcmVudHMo
UFVUX01FVAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IENoYXJhY3RlckRhdGE6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpDaGFyYWN0ZXJEYXRhOjpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIENoYXJh
Y3RlckRhdGFQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpDaGFyYWN0ZXJEYXRh
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTEyMTYsNyArMTIxNiw3IEBAIE9iamVj
dEltcCAqQ2hhcmFjdGVyRGF0YTo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IERPTVJX
QnJpZGdlPENoYXJhY3RlckRhdGE+KHAxLHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGE6OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhOjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKkNoYXJhY3RlckRhdGE6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENoYXJhY3RlckRhdGE+KHAxLHN0YXRp
Y19jYXN0PENoYXJhY3RlckRhdGE6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTIyOSwyMSArMTIy
OSwyMSBAQCBib29sIENvdW50ZXI6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEsCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDb3VudGVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKkNvdW50ZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGxvb2t1cEdldFZhbHVlPENvdW50ZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAz
KTsKIH0KIAotVmFsdWUgQ291bnRlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpDb3VudGVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgQ291bnRlcjo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkNvdW50ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0
aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxs
KCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkNvdW50ZXI6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTI1MSw3ICsxMjUxLDcgQEAgT2JqZWN0SW1wICpDb3Vu
dGVyOjpicmlkZ2UoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPENvdW50
ZXI+KHAxLHN0YXRpY19jYXN0PENvdW50ZXI6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBD
b3VudGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNvdW50ZXI6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENv
dW50ZXI+KHAxLHN0YXRpY19jYXN0PENvdW50ZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTI2
MCwxMiArMTI2MCwxMiBAQCBib29sIERPTUNvbmZpZ3VyYXRpb246Omhhc1Byb3BlcnR5KEV4ZWNT
CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkRPTUNvbmZp
Z3VyYXRpb246OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBP
YmplY3QgcHJvdG8gPSBET01Db25maWd1cmF0aW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHBy
b3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90
byA9IERPTUNvbmZpZ3VyYXRpb25Qcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBET01Db25maWd1cmF0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KkRPTUNvbmZpZ3VyYXRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGxvb2t1cEdldDxET01Db25maWd1cmF0aW9uUHJvdG9GdW5jLERPTUNvbmZpZ3VyYXRpb24+
KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTEyODgsMTggKzEyODgsMTggQEAg
RE9NQ29uZmlndXJhdGlvbiBLRE9NOjpFY21hSW50ZXJmYWNlOjppbgogCVFfVU5VU0VEKHAxKTsg
cmV0dXJuIERPTUNvbmZpZ3VyYXRpb246Om51bGw7CiB9CiAKLVZhbHVlIERPTUNvbmZpZ3VyYXRp
b246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NQ29u
ZmlndXJhdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBP
YmplY3QgcHJvdG8gPSBET01Db25maWd1cmF0aW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHBy
b3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2Jq
ZWN0SW1wICpwcm90byA9IERPTUNvbmZpZ3VyYXRpb25Qcm90bzo6c2VsZihwMSk7CisgICAgaWYo
cHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAg
IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBET01D
b25maWd1cmF0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAq
RE9NQ29uZmlndXJhdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBET01Db25maWd1cmF0aW9uUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVy
biBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9i
amVjdEltcCAqRE9NQ29uZmlndXJhdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC0xMzA3LDcgKzEzMDcsNyBAQCBPYmplY3RJbXAgKkRPTUNvbmZpZ3VyYXRpb246OmJyaWRnZShF
eGVjCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8RE9NQ29uZmlndXJhdGlvbj4ocDEsc3RhdGlj
X2Nhc3Q8RE9NQ29uZmlndXJhdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERPTUNv
bmZpZ3VyYXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRE9NQ29u
ZmlndXJhdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2Fj
aGVET01PYmplY3Q8RE9NQ29uZmlndXJhdGlvbj4ocDEsc3RhdGljX2Nhc3Q8RE9NQ29uZmlndXJh
dGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xMzIwLDcgKzEzMjAsNyBAQCBib29sIERPTUVy
cm9yOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
YWx1ZSBET01FcnJvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01F
cnJvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0
VmFsdWU8RE9NRXJyb3I+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTEzMzMs
MTYgKzEzMzMsMTYgQEAgRE9NRXJyb3IgS0RPTTo6dG9ET01FcnJvcihLSlM6OkV4ZWNTdGF0ZQog
ICAgIHJldHVybiBET01FcnJvcjo6bnVsbDsKIH0KIAotVmFsdWUgRE9NRXJyb3I6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NRXJyb3I6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNF
RChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVj
dCBET01FcnJvcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRP
TUVycm9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpET01FcnJvcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMzUw
LDcgKzEzNTAsNyBAQCBPYmplY3RJbXAgKkRPTUVycm9yOjpicmlkZ2UoRXhlY1N0YXRlICpwCiAg
ICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8RE9NRXJyb3I+KHAxLHN0YXRpY19jYXN0PERPTUVycm9y
OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRE9NRXJyb3I6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqRE9NRXJyb3I6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERPTUVycm9yPihwMSxzdGF0aWNfY2FzdDxE
T01FcnJvcjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xMzU5LDEyICsxMzU5LDEyIEBAIGJvb2wg
RE9NRXJyb3JIYW5kbGVyOjpoYXNQcm9wZXJ0eShFeGVjU3QKIHsKICAgICBjb25zdCBIYXNoRW50
cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmRE9NRXJyb3JIYW5kbGVyOjpzX2hhc2hUYWJsZSxw
Mik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gRE9NRXJyb3JI
YW5kbGVyUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERPTUVycm9ySGFuZGxlclByb3Rv
OjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1
ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERPTUVycm9ySGFuZGxlcjo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01FcnJvckhhbmRsZXI6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxET01FcnJvckhhbmRs
ZXJQcm90b0Z1bmMsRE9NRXJyb3JIYW5kbGVyPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7
CiB9CkBAIC0xMzg3LDE4ICsxMzg3LDE4IEBAIERPTUVycm9ySGFuZGxlciBLRE9NOjpFY21hSW50
ZXJmYWNlOjppbmgKIAlRX1VOVVNFRChwMSk7IHJldHVybiBET01FcnJvckhhbmRsZXI6Om51bGw7
CiB9CiAKLVZhbHVlIERPTUVycm9ySGFuZGxlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpET01FcnJvckhhbmRsZXI6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gRE9NRXJyb3JIYW5kbGVyUHJv
dG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHBy
b3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERPTUVycm9ySGFuZGxlclBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotT2JqZWN0IERPTUVycm9ySGFuZGxlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKkRPTUVycm9ySGFuZGxlcjo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBET01FcnJvckhhbmRsZXJQcm90bzo6
c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICBy
ZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpET01FcnJvckhhbmRsZXI6OmJyaWRnZShFeGVj
U3RhdGUgKnAxKSBjb25zdApAQCAtMTQwNiw3ICsxNDA2LDcgQEAgT2JqZWN0SW1wICpET01FcnJv
ckhhbmRsZXI6OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERPTUVycm9y
SGFuZGxlcj4ocDEsc3RhdGljX2Nhc3Q8RE9NRXJyb3JIYW5kbGVyOjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgRE9NRXJyb3JIYW5kbGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKkRPTUVycm9ySGFuZGxlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8RE9NRXJyb3JIYW5kbGVyPihwMSxzdGF0aWNfY2Fz
dDxET01FcnJvckhhbmRsZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTQxOSwyMSArMTQxOSwy
MSBAQCBib29sIERPTUV4Y2VwdGlvbjo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBET01FeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqRE9NRXhjZXB0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxET01FeGNlcHRpb24+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgRE9NRXhjZXB0aW9uOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRPTUV4Y2VwdGlvbjo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAy
KTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IERP
TUV4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRP
TUV4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIE9iamVjdEltcCAqRE9NRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QK
QEAgLTE0NDEsNyArMTQ0MSw3IEBAIE9iamVjdEltcCAqRE9NRXhjZXB0aW9uOjpicmlkZ2UoRXhl
Y1N0YXQKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxET01FeGNlcHRpb24+KHAxLHN0YXRpY19j
YXN0PERPTUV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERPTUV4Y2VwdGlv
bjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpET01FeGNlcHRpb246OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERP
TUV4Y2VwdGlvbj4ocDEsc3RhdGljX2Nhc3Q8RE9NRXhjZXB0aW9uOjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTE0NTAsMTIgKzE0NTAsMTIgQEAgYm9vbCBET01JbXBsZW1lbnRhdGlvbjo6aGFzUHJv
cGVydHkoRXhlYwogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5
KCZET01JbXBsZW1lbnRhdGlvbjo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0
cnVlOwotICAgIE9iamVjdCBwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJvdG86OnNlbGYocDEp
OwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2Jq
ZWN0SW1wICpwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJvdG86OnNlbGYocDEpOworICAgIGlm
KHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgRE9NSW1wbGVtZW50YXRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqRE9NSW1wbGVtZW50YXRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxET01JbXBsZW1lbnRhdGlvblByb3RvRnVuYyxE
T01JbXBsZW1lbnRhdGlvbj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMTQ3
OCwxOCArMTQ3OCwxOCBAQCBET01JbXBsZW1lbnRhdGlvbiBLRE9NOjpFY21hSW50ZXJmYWNlOjpp
CiAJUV9VTlVTRUQocDEpOyByZXR1cm4gRE9NSW1wbGVtZW50YXRpb246Om51bGw7CiB9CiAKLVZh
bHVlIERPTUltcGxlbWVudGF0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKkRPTUltcGxlbWVudGF0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3Rv
LmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1PYmplY3QgRE9NSW1wbGVtZW50YXRpb246OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpET01JbXBsZW1lbnRhdGlvbjo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBET01JbXBsZW1lbnRhdGlvblBy
b3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkRPTUltcGxlbWVudGF0aW9uOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE0OTcsNyArMTQ5Nyw3IEBAIE9iamVjdEltcCAq
RE9NSW1wbGVtZW50YXRpb246OmJyaWRnZShFeGUKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxE
T01JbXBsZW1lbnRhdGlvbj4ocDEsc3RhdGljX2Nhc3Q8RE9NSW1wbGVtZW50YXRpb246OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBET01JbXBsZW1lbnRhdGlvbjo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpET01JbXBsZW1lbnRhdGlvbjo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8RE9NSW1wbGVtZW50YXRp
b24+KHAxLHN0YXRpY19jYXN0PERPTUltcGxlbWVudGF0aW9uOjpQcml2YXRlICo+KGQpKTsKIH0K
QEAgLTE1MTAsMjEgKzE1MTAsMjEgQEAgYm9vbCBET01Mb2NhdG9yOjpoYXNQcm9wZXJ0eShFeGVj
U3RhdGUgKgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRE9NTG9jYXRvcjo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01Mb2NhdG9yOjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxET01Mb2NhdG9yPihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIERPTUxvY2F0b3I6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NTG9jYXRvcjo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFf
VU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
T2JqZWN0IERPTUxvY2F0b3I6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpET01Mb2NhdG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpET01Mb2NhdG9yOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTE1MzIsNyArMTUzMiw3IEBAIE9iamVjdEltcCAqRE9NTG9jYXRvcjo6YnJpZGdlKEV4
ZWNTdGF0ZSAKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxET01Mb2NhdG9yPihwMSxzdGF0aWNf
Y2FzdDxET01Mb2NhdG9yOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRE9NTG9jYXRvcjo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpET01Mb2NhdG9yOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxET01Mb2Nh
dG9yPihwMSxzdGF0aWNfY2FzdDxET01Mb2NhdG9yOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE1
NDEsMTIgKzE1NDEsMTIgQEAgYm9vbCBET01TdHJpbmdMaXN0OjpoYXNQcm9wZXJ0eShFeGVjU3Rh
dAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZET01TdHJp
bmdMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2Jq
ZWN0IHByb3RvID0gRE9NU3RyaW5nTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBE
T01TdHJpbmdMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRE9NU3Ry
aW5nTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01TdHJpbmdM
aXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8
RE9NU3RyaW5nTGlzdFByb3RvRnVuYyxET01TdHJpbmdMaXN0PihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CkBAIC0xNTY5LDE4ICsxNTY5LDE4IEBAIERPTVN0cmluZ0xpc3QgS0RPTTo6
RWNtYUludGVyZmFjZTo6aW5oZXIKIAlRX1VOVVNFRChwMSk7IHJldHVybiBET01TdHJpbmdMaXN0
OjpudWxsOwogfQogCi1WYWx1ZSBET01TdHJpbmdMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRPTVN0cmluZ0xpc3Q6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gRE9NU3RyaW5nTGlzdFBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBET01TdHJpbmdMaXN0UHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1PYmplY3QgRE9NU3RyaW5nTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKkRPTVN0cmluZ0xpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gRE9NU3RyaW5nTGlzdFByb3RvOjpzZWxmKHAx
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKkRPTVN0cmluZ0xpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtMTU4OCw3ICsxNTg4LDcgQEAgT2JqZWN0SW1wICpET01TdHJpbmdMaXN0Ojpi
cmlkZ2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERPTVN0cmluZ0xpc3Q+KHAx
LHN0YXRpY19jYXN0PERPTVN0cmluZ0xpc3Q6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBE
T01TdHJpbmdMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkRPTVN0
cmluZ0xpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hl
RE9NT2JqZWN0PERPTVN0cmluZ0xpc3Q+KHAxLHN0YXRpY19jYXN0PERPTVN0cmluZ0xpc3Q6OlBy
aXZhdGUgKj4oZCkpOwogfQpAQCAtMTYwMSw3ICsxNjAxLDcgQEAgYm9vbCBET01Vc2VyRGF0YTo6
aGFzUHJvcGVydHkoRXhlY1N0YXRlIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRE9N
VXNlckRhdGE6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NVXNlckRh
dGE6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZh
bHVlPERPTVVzZXJEYXRhPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0xNjE0
LDE2ICsxNjE0LDE2IEBAIERPTVVzZXJEYXRhIEtET006OnRvRE9NVXNlckRhdGEoS0pTOjpFeGUK
ICAgICByZXR1cm4gRE9NVXNlckRhdGE6Om51bGw7CiB9CiAKLVZhbHVlIERPTVVzZXJEYXRhOjpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRPTVVzZXJEYXRh
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAx
KTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgRE9NVXNlckRhdGE6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpET01Vc2VyRGF0YTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3Rv
dHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0
dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRE9NVXNlckRhdGE6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtMTYzMSw3ICsxNjMxLDcgQEAgT2JqZWN0SW1wICpET01Vc2VyRGF0YTo6
YnJpZGdlKEV4ZWNTdGF0ZQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERPTVVzZXJEYXRhPihw
MSxzdGF0aWNfY2FzdDxET01Vc2VyRGF0YTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERP
TVVzZXJEYXRhOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkRPTVVzZXJE
YXRhOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9i
amVjdDxET01Vc2VyRGF0YT4ocDEsc3RhdGljX2Nhc3Q8RE9NVXNlckRhdGE6OlByaXZhdGUgKj4o
ZCkpOwogfQpAQCAtMTY0MCw4ICsxNjQwLDggQEAgYm9vbCBEb2N1bWVudDo6aGFzUHJvcGVydHko
RXhlY1N0YXRlICpwMQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVu
dHJ5KCZEb2N1bWVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwot
ICAgIE9iamVjdCBwcm90byA9IERvY3VtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3Rv
Lmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9
IERvY3VtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOwogICAgIGlmKERvY3VtZW50RXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHRydWU7CiAgICAgaWYoRG9jdW1lbnRSYW5nZTo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gdHJ1ZTsKICAgICBpZihEb2N1bWVudFN0eWxlOjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOwpAQCAtMTY1Miw3ICsxNjUyLDcgQEAgYm9vbCBEb2N1bWVudDo6aGFzUHJv
cGVydHkoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRG9jdW1l
bnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxEb2N1bWVudFBy
b3RvRnVuYyxEb2N1bWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMTY3
NSwxMCArMTY3NSwxMCBAQCBEb2N1bWVudCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRE
CiAJUV9VTlVTRUQocDEpOyByZXR1cm4gRG9jdW1lbnQ6Om51bGw7CiB9CiAKLVZhbHVlIERvY3Vt
ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRvY3Vt
ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBw
cm90byA9IERvY3VtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9
IERvY3VtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihEb2N1bWVudEV2ZW50OjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBEb2N1bWVudEV2ZW50OjpnZXQocDEscDIscDMpOwogICAg
IGlmKERvY3VtZW50UmFuZ2U6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIERvY3VtZW50UmFu
Z2U6OmdldChwMSxwMixwMyk7CiAgICAgaWYoRG9jdW1lbnRTdHlsZTo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gRG9jdW1lbnRTdHlsZTo6Z2V0KHAxLHAyLHAzKTsKQEAgLTE3MDMsMTAgKzE3
MDMsMTAgQEAgYm9vbCBEb2N1bWVudDo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0RfQQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IERvY3VtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqRG9jdW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gRG9jdW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpEb2N1bWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0x
NzE0LDcgKzE3MTQsNyBAQCBPYmplY3RJbXAgKkRvY3VtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpw
CiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxEb2N1bWVudD4ocDEsc3RhdGljX2Nhc3Q8RG9j
dW1lbnQ6OlByaXZhdGUgKj4oS0RPTTo6RXZlbnRUYXJnZXQ6OmQpKTsKIH0KIAotVmFsdWUgRG9j
dW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERv
Y3VtZW50PihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudDo6UHJpdmF0ZSAqPihLRE9NOjpFdmVudFRh
cmdldDo6ZCkpOwogfQpAQCAtMTcyMywxMiArMTcyMywxMiBAQCBib29sIERvY3VtZW50RXZlbnQ6
Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3Vw
OjpmaW5kRW50cnkoJkRvY3VtZW50RXZlbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSBy
ZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBEb2N1bWVudEV2ZW50UHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IERvY3VtZW50RXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYo
cHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBEb2N1bWVudEV2ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKkRvY3VtZW50RXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGxvb2t1cEdldDxEb2N1bWVudEV2ZW50UHJvdG9GdW5jLERvY3VtZW50RXZlbnQ+
KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTE3NTMsMTggKzE3NTMsMTggQEAg
RG9jdW1lbnRFdmVudCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcgogCVFfVU5VU0VEKHAxKTsg
cmV0dXJuIERvY3VtZW50RXZlbnQ6Om51bGw7CiB9CiAKLVZhbHVlIERvY3VtZW50RXZlbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRFdmVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJv
dG8gPSBEb2N1bWVudEV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90
byA9IERvY3VtZW50RXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBEb2N1bWVudEV2ZW50Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqRG9jdW1lbnRFdmVudDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBEb2N1bWVu
dEV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51
bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRG9jdW1lbnRFdmVudDo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNzcyLDcgKzE3NzIsNyBAQCBPYmplY3RJ
bXAgKkRvY3VtZW50RXZlbnQ6OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBET01Ccmlk
Z2U8RG9jdW1lbnRFdmVudD4ocDEsc3RhdGljX2Nhc3Q8RG9jdW1lbnRFdmVudDo6UHJpdmF0ZSAq
PihkKSk7CiB9CiAKLVZhbHVlIERvY3VtZW50RXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqRG9jdW1lbnRFdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8RG9jdW1lbnRFdmVudD4ocDEsc3RhdGljX2Nh
c3Q8RG9jdW1lbnRFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNzgxLDEyICsxNzgxLDEy
IEBAIGJvb2wgRG9jdW1lbnRSYW5nZTo6aGFzUHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25z
dCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmRG9jdW1lbnRSYW5nZTo6c19oYXNo
VGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IERv
Y3VtZW50UmFuZ2VQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRSYW5nZVBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERvY3VtZW50UmFuZ2U6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRSYW5nZTo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PERvY3VtZW50UmFuZ2VQ
cm90b0Z1bmMsRG9jdW1lbnRSYW5nZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpA
QCAtMTgxMSwxOCArMTgxMSwxOCBAQCBEb2N1bWVudFJhbmdlIEtET006OkVjbWFJbnRlcmZhY2U6
OmluaGVyCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gRG9jdW1lbnRSYW5nZTo6bnVsbDsKIH0KIAot
VmFsdWUgRG9jdW1lbnRSYW5nZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpEb2N1bWVudFJhbmdlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewotICAgIE9iamVjdCBwcm90byA9IERvY3VtZW50UmFuZ2VQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAy
KTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRSYW5nZVByb3RvOjpzZWxmKHAxKTsK
KyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxw
Mik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2Jq
ZWN0IERvY3VtZW50UmFuZ2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpEb2N1bWVudFJhbmdlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICBpZihwMSkgcmV0dXJuIERvY3VtZW50UmFuZ2VQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpEb2N1bWVudFJhbmdlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE4
MzAsNyArMTgzMCw3IEBAIE9iamVjdEltcCAqRG9jdW1lbnRSYW5nZTo6YnJpZGdlKEV4ZWNTdGEK
ICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxEb2N1bWVudFJhbmdlPihwMSxzdGF0aWNfY2FzdDxE
b2N1bWVudFJhbmdlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRG9jdW1lbnRSYW5nZTo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFJhbmdlOjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxEb2N1
bWVudFJhbmdlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudFJhbmdlOjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTE4NDMsMjEgKzE4NDMsMjEgQEAgYm9vbCBEb2N1bWVudFN0eWxlOjpoYXNQcm9wZXJ0
eShFeGVjU3RhdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRG9jdW1lbnRTdHlsZTo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFN0eWxlOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxEb2N1
bWVudFN0eWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIERvY3Vt
ZW50U3R5bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
RG9jdW1lbnRTdHlsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IERvY3VtZW50U3R5bGU6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpEb2N1bWVudFN0eWxlOjpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpEb2N1bWVudFN0eWxl
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE4NjUsNyArMTg2NSw3IEBAIE9iamVj
dEltcCAqRG9jdW1lbnRTdHlsZTo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IERPTUJy
aWRnZTxEb2N1bWVudFN0eWxlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudFN0eWxlOjpQcml2YXRl
ICo+KGQpKTsKIH0KIAotVmFsdWUgRG9jdW1lbnRTdHlsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFN0eWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxEb2N1bWVudFN0eWxlPihwMSxzdGF0aWNf
Y2FzdDxEb2N1bWVudFN0eWxlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE4NzQsMTIgKzE4NzQs
MTIgQEAgYm9vbCBEb2N1bWVudFRyYXZlcnNhbDo6aGFzUHJvcGVydHkoRXhlYwogewogICAgIGNv
bnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZEb2N1bWVudFRyYXZlcnNhbDo6
c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90
byA9IERvY3VtZW50VHJhdmVyc2FsUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERvY3Vt
ZW50VHJhdmVyc2FsUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRG9jdW1l
bnRUcmF2ZXJzYWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1l
bnRUcmF2ZXJzYWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxv
b2t1cEdldDxEb2N1bWVudFRyYXZlcnNhbFByb3RvRnVuYyxEb2N1bWVudFRyYXZlcnNhbD4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMTkwNCwxOCArMTkwNCwxOCBAQCBEb2N1
bWVudFRyYXZlcnNhbCBLRE9NOjpFY21hSW50ZXJmYWNlOjppCiAJUV9VTlVTRUQocDEpOyByZXR1
cm4gRG9jdW1lbnRUcmF2ZXJzYWw6Om51bGw7CiB9CiAKLVZhbHVlIERvY3VtZW50VHJhdmVyc2Fs
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50
VHJhdmVyc2FsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9i
amVjdCBwcm90byA9IERvY3VtZW50VHJhdmVyc2FsUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHBy
b3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2Jq
ZWN0SW1wICpwcm90byA9IERvY3VtZW50VHJhdmVyc2FsUHJvdG86OnNlbGYocDEpOworICAgIGlm
KHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAg
ICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgRG9j
dW1lbnRUcmF2ZXJzYWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpEb2N1bWVudFRyYXZlcnNhbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBEb2N1bWVudFRyYXZlcnNhbFByb3RvOjpzZWxmKHAxKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKkRvY3VtZW50VHJhdmVyc2FsOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTE5MjMsNyArMTkyMyw3IEBAIE9iamVjdEltcCAqRG9jdW1lbnRUcmF2ZXJzYWw6OmJy
aWRnZShFeGUKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxEb2N1bWVudFRyYXZlcnNhbD4ocDEs
c3RhdGljX2Nhc3Q8RG9jdW1lbnRUcmF2ZXJzYWw6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1
ZSBEb2N1bWVudFRyYXZlcnNhbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpEb2N1bWVudFRyYXZlcnNhbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gY2FjaGVET01PYmplY3Q8RG9jdW1lbnRUcmF2ZXJzYWw+KHAxLHN0YXRpY19jYXN0PERv
Y3VtZW50VHJhdmVyc2FsOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE5MzYsNyArMTkzNiw3IEBA
IGJvb2wgRG9jdW1lbnRUeXBlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVZhbHVlIERvY3VtZW50VHlwZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpEb2N1bWVudFR5cGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPERvY3VtZW50VHlwZT4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQpAQCAtMTk0OSw3ICsxOTQ5LDcgQEAgRG9jdW1lbnRUeXBlIEtET006OnRv
RG9jdW1lbnRUeXBlKEtKUzo6RQogICAgIHJldHVybiBEb2N1bWVudFR5cGU6Om51bGw7CiB9CiAK
LVZhbHVlIERvY3VtZW50VHlwZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpEb2N1bWVudFR5cGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgaWYoTm9kZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gTm9kZTo6Z2V0
KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xOTY0LDEwICsxOTY0LDEw
IEBAIGJvb2wgRG9jdW1lbnRUeXBlOjpwdXQoUFVUX01FVEhPRF9BUkdTKQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotT2JqZWN0IERvY3VtZW50VHlwZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKkRvY3VtZW50VHlwZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9i
amVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRG9jdW1lbnRUeXBlOjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE5NzUsNyArMTk3NSw3IEBAIE9iamVjdEltcCAqRG9j
dW1lbnRUeXBlOjpicmlkZ2UoRXhlY1N0YXQKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPERv
Y3VtZW50VHlwZT4ocDEsc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlOjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgRG9jdW1lbnRUeXBlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKkRvY3VtZW50VHlwZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gY2FjaGVET01PYmplY3Q8RG9jdW1lbnRUeXBlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVu
dFR5cGU6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTk4OCwyMSArMTk4OCwyMSBAQCBib29sIERv
Y3VtZW50Vmlldzo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBEb2N1bWVudFZpZXc6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqRG9jdW1lbnRWaWV3OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBsb29rdXBHZXRWYWx1ZTxEb2N1bWVudFZpZXc+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAz
KTsKIH0KIAotVmFsdWUgRG9jdW1lbnRWaWV3OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50Vmlldzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQo
cDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IERvY3VtZW50Vmlldzo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRvY3VtZW50Vmlldzo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+
aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqRG9jdW1lbnRWaWV3OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIwMTAsNyAr
MjAxMCw3IEBAIE9iamVjdEltcCAqRG9jdW1lbnRWaWV3OjpicmlkZ2UoRXhlY1N0YXQKICAgICBy
ZXR1cm4gbmV3IERPTUJyaWRnZTxEb2N1bWVudFZpZXc+KHAxLHN0YXRpY19jYXN0PERvY3VtZW50
Vmlldzo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERvY3VtZW50Vmlldzo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFZpZXc6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERvY3VtZW50Vmlldz4o
cDEsc3RhdGljX2Nhc3Q8RG9jdW1lbnRWaWV3OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIwMTks
MTMgKzIwMTksMTMgQEAgYm9vbCBFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLAog
ewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZFbGVtZW50Ojpz
X2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3Rv
ID0gRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBFbGVtZW50UHJvdG86OnNl
bGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwog
ICAgIGlmKE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGxvb2t1cEdldDxFbGVtZW50UHJvdG9GdW5jLEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJs
ZSx0aGlzLHAzKTsKIH0KQEAgLTIwNDgsMTAgKzIwNDgsMTAgQEAgRWxlbWVudCBLRE9NOjpFY21h
SW50ZXJmYWNlOjppbmhlcml0ZWRFbAogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIEVsZW1lbnQ6Om51
bGw7CiB9CiAKLVZhbHVlIEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlm
KHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IEVsZW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKE5v
ZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6OmdldChwMSxwMixwMyk7CiAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtMjA2NSwxMCArMjA2NSwxMCBAQCBib29sIEVsZW1l
bnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkVsZW1l
bnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
RWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkVsZW1lbnQ6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjA3Niw3ICsyMDc2LDcgQEAgT2JqZWN0SW1wICpF
bGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8
RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZh
bHVlIEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRWxlbWVu
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmpl
Y3Q8RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBA
IC0yMDg5LDEyICsyMDg5LDEyIEBAIGJvb2wgRW50aXR5OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUg
KnAxLGMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIEVudGl0eTo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpFbnRpdHk6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPEVudGl0eT4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBFbnRpdHk6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRW50aXR5OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIGlmKE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5v
ZGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMjEwOSwxMCAr
MjEwOSwxMCBAQCBib29sIEVudGl0eTo6cHV0KFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU9iamVjdCBFbnRpdHk6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpFbnRpdHk6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5
cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVy
biBOVUxMOwogfQogCiBPYmplY3RJbXAgKkVudGl0eTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CkBAIC0yMTIwLDcgKzIxMjAsNyBAQCBPYmplY3RJbXAgKkVudGl0eTo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxFbnRpdHk+KHAxLHN0YXRpY19j
YXN0PEVudGl0eTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEVudGl0eTo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpFbnRpdHk6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PEVudGl0eT4ocDEsc3RhdGljX2Nh
c3Q8RW50aXR5OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIxMjksMTIgKzIxMjksMTIgQEAgYm9v
bCBFdmVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMSxjbwogewogICAgIGNvbnN0IEhhc2hF
bnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZFdmVudDo6c19oYXNoVGFibGUscDIpOwogICAg
IGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IEV2ZW50UHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IEV2ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgRXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRXZlbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxFdmVu
dFByb3RvRnVuYyxFdmVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjE3
MCwxOCArMjE3MCwxOCBAQCBFdmVudCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRFdmVu
CiAJUV9VTlVTRUQocDEpOyByZXR1cm4gRXZlbnQ6Om51bGw7CiB9CiAKLVZhbHVlIEV2ZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IEV2
ZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IEV2ZW50UHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90
by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1PYmplY3QgRXZlbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpFdmVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYo
cDEpIHJldHVybiBFdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkV2ZW50
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIxODksNyArMjE4OSw3IEBAIE9iamVj
dEltcCAqRXZlbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSAKICAgICByZXR1cm4gbmV3IERPTUJy
aWRnZTxFdmVudD4ocDEsc3RhdGljX2Nhc3Q8RXZlbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1W
YWx1ZSBFdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpFdmVudDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8
RXZlbnQ+KHAxLHN0YXRpY19jYXN0PEV2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIyMDIs
MjEgKzIyMDIsMjEgQEAgYm9vbCBFdmVudEV4Y2VwdGlvbjo6aGFzUHJvcGVydHkoRXhlY1N0YQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRXZlbnRFeGNlcHRpb246OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRXZlbnRFeGNlcHRpb246OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPEV2ZW50RXhjZXB0aW9u
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIEV2ZW50RXhjZXB0aW9u
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50RXhj
ZXB0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5V
U0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1PYmplY3QgRXZlbnRFeGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpFdmVudEV4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRp
bk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwo
KSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRXZlbnRFeGNlcHRpb246OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjIyNCw3ICsyMjI0LDcgQEAgT2JqZWN0SW1w
ICpFdmVudEV4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdl
PEV2ZW50RXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxFdmVudEV4Y2VwdGlvbjo6UHJpdmF0ZSAq
PihkKSk7CiB9CiAKLVZhbHVlIEV2ZW50RXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKkV2ZW50RXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxFdmVudEV4Y2VwdGlvbj4ocDEsc3RhdGlj
X2Nhc3Q8RXZlbnRFeGNlcHRpb246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjIzMywxMiArMjIz
MywxMiBAQCBib29sIEV2ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgCiB7CiAgICAg
Y29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkV2ZW50VGFyZ2V0OjpzX2hh
c2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0g
RXZlbnRUYXJnZXRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRXZlbnRUYXJnZXRQcm90
bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRy
dWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBFdmVudFRhcmdldDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpFdmVudFRhcmdldDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PEV2ZW50VGFyZ2V0UHJvdG9GdW5j
LEV2ZW50VGFyZ2V0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0yMjkzLDEw
ICsyMjkzLDEwIEBAIEV2ZW50VGFyZ2V0IEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVyaXQKIAlR
X1VOVVNFRChwMSk7IHJldHVybiBFdmVudFRhcmdldDo6bnVsbDsKIH0KIAotVmFsdWUgRXZlbnRU
YXJnZXQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRXZl
bnRUYXJnZXQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2Jq
ZWN0IHByb3RvID0gRXZlbnRUYXJnZXRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gRXZlbnRUYXJnZXRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0yMzA3LDEwICsyMzA3LDEwIEBAIGJv
b2wgRXZlbnRUYXJnZXQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgRXZlbnRUYXJnZXQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpFdmVudFRhcmdldDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgaWYocDEpIHJldHVybiBFdmVudFRhcmdldFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKkV2ZW50VGFyZ2V0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIz
MTgsNyArMjMxOCw3IEBAIE9iamVjdEltcCAqRXZlbnRUYXJnZXQ6OmJyaWRnZShFeGVjU3RhdGUK
ICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPEV2ZW50VGFyZ2V0PihwMSxzdGF0aWNfY2FzdDxF
dmVudFRhcmdldDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEV2ZW50VGFyZ2V0OjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50VGFyZ2V0OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxFdmVudFRhcmdl
dD4ocDEsc3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjMy
NywxMyArMjMyNywxMyBAQCBib29sIEtleWJvYXJkRXZlbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0
CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJktleWJvYXJk
RXZlbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmpl
Y3QgcHJvdG8gPSBLZXlib2FyZEV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IEtl
eWJvYXJkRXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoVUlFdmVudDo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIEtleWJvYXJkRXZlbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqS2V5Ym9hcmRFdmVudDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PEtleWJvYXJk
RXZlbnRQcm90b0Z1bmMsS2V5Ym9hcmRFdmVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMp
OwogfQpAQCAtMjM1NiwxOCArMjM1NiwxOCBAQCBLZXlib2FyZEV2ZW50IEtET006OkVjbWFJbnRl
cmZhY2U6OmluaGVyCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gS2V5Ym9hcmRFdmVudDo6bnVsbDsK
IH0KIAotVmFsdWUgS2V5Ym9hcmRFdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpLZXlib2FyZEV2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IEtleWJvYXJkRXZlbnRQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0
KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gS2V5Ym9hcmRFdmVudFByb3RvOjpzZWxm
KHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdl
dChwMSxwMik7CiAgICAgaWYoVUlFdmVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gVUlF
dmVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVj
dCBLZXlib2FyZEV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqS2V5Ym9hcmRFdmVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBLZXlib2FyZEV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqS2V5Ym9hcmRFdmVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMzc1
LDcgKzIzNzUsNyBAQCBPYmplY3RJbXAgKktleWJvYXJkRXZlbnQ6OmJyaWRnZShFeGVjU3RhCiAg
ICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8S2V5Ym9hcmRFdmVudD4ocDEsc3RhdGljX2Nhc3Q8S2V5
Ym9hcmRFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEtleWJvYXJkRXZlbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqS2V5Ym9hcmRFdmVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8S2V5Ym9h
cmRFdmVudD4ocDEsc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9
CkBAIC0yMzg4LDIxICsyMzg4LDIxIEBAIGJvb2wgTFNFeGNlcHRpb246Omhhc1Byb3BlcnR5KEV4
ZWNTdGF0ZSAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIExTRXhjZXB0aW9uOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTRXhjZXB0aW9uOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxMU0V4Y2VwdGlv
bj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBMU0V4Y2VwdGlvbjo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU0V4Y2VwdGlv
bjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChw
MSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotT2JqZWN0IExTRXhjZXB0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K09iamVjdEltcCAqTFNFeGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90
b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkxTRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0YXRl
ICpwMSkgY29uc3QKQEAgLTI0MTAsNyArMjQxMCw3IEBAIE9iamVjdEltcCAqTFNFeGNlcHRpb246
OmJyaWRnZShFeGVjU3RhdGUKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxMU0V4Y2VwdGlvbj4o
cDEsc3RhdGljX2Nhc3Q8TFNFeGNlcHRpb246OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBM
U0V4Y2VwdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpMU0V4Y2Vw
dGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01P
YmplY3Q8TFNFeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PExTRXhjZXB0aW9uOjpQcml2YXRlICo+
KGQpKTsKIH0KQEAgLTI0MjMsNyArMjQyMyw3IEBAIGJvb2wgTFNJbnB1dDo6aGFzUHJvcGVydHko
RXhlY1N0YXRlICpwMSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIExTSW5wdXQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNJbnB1dDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8TFNJbnB1dD4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjQzNiw3ICsyNDM2LDcgQEAgTFNJbnB1
dCBLRE9NOjp0b0xTSW5wdXQoS0pTOjpFeGVjU3RhdGUgKgogICAgIHJldHVybiBMU0lucHV0Ojpu
dWxsOwogfQogCi1WYWx1ZSBMU0lucHV0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKkxTSW5wdXQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0yNDUzLDEwICsyNDUzLDEwIEBAIGJvb2wgTFNJbnB1
dDo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0RfQVIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9i
amVjdCBMU0lucHV0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAq
TFNJbnB1dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJl
dHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAK
IE9iamVjdEltcCAqTFNJbnB1dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNDY0
LDcgKzI0NjQsNyBAQCBPYmplY3RJbXAgKkxTSW5wdXQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxCiAg
ICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxMU0lucHV0PihwMSxzdGF0aWNfY2FzdDxMU0lucHV0
OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgTFNJbnB1dDo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK1ZhbHVlSW1wICpMU0lucHV0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxMU0lucHV0PihwMSxzdGF0aWNfY2FzdDxMU0lu
cHV0OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI0NzcsNyArMjQ3Nyw3IEBAIGJvb2wgTFNPdXRw
dXQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIExTT3V0cHV0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTT3V0
cHV0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRW
YWx1ZTxMU091dHB1dD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjQ5MCw3
ICsyNDkwLDcgQEAgTFNPdXRwdXQgS0RPTTo6dG9MU091dHB1dChLSlM6OkV4ZWNTdGF0ZQogICAg
IHJldHVybiBMU091dHB1dDo6bnVsbDsKIH0KIAotVmFsdWUgTFNPdXRwdXQ6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNPdXRwdXQ6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChw
Mik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0yNTA3LDEwICsy
NTA3LDEwIEBAIGJvb2wgTFNPdXRwdXQ6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0EKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBMU091dHB1dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKkxTT3V0cHV0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpMU091dHB1dDo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC0yNTE4LDcgKzI1MTgsNyBAQCBPYmplY3RJbXAgKkxTT3V0cHV0
OjpicmlkZ2UoRXhlY1N0YXRlICpwCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxMU091dHB1
dD4ocDEsc3RhdGljX2Nhc3Q8TFNPdXRwdXQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBM
U091dHB1dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpMU091dHB1dDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8
TFNPdXRwdXQ+KHAxLHN0YXRpY19jYXN0PExTT3V0cHV0OjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTI1MjcsMTMgKzI1MjcsMTMgQEAgYm9vbCBMU1BhcnNlcjo6aGFzUHJvcGVydHkoRXhlY1N0YXRl
ICpwMQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZMU1Bh
cnNlcjo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVj
dCBwcm90byA9IExTUGFyc2VyUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IExTUGFyc2Vy
UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biB0cnVlOwogICAgIGlmKEV2ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0
cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTFNQYXJzZXI6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNQYXJzZXI6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxMU1BhcnNlclByb3RvRnVuYyxMU1BhcnNl
cj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjU1NiwxMCArMjU1NiwxMCBA
QCBMU1BhcnNlciBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRMCiAJUV9VTlVTRUQocDEp
OyByZXR1cm4gTFNQYXJzZXI6Om51bGw7CiB9CiAKLVZhbHVlIExTUGFyc2VyOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTUGFyc2VyOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IExTUGFyc2Vy
UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IExTUGFyc2VyUHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90
by0+Z2V0KHAxLHAyKTsKICAgICBpZihFdmVudFRhcmdldDo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gRXZlbnRUYXJnZXQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQpAQCAtMjU3OCwxMCArMjU3OCwxMCBAQCBib29sIExTUGFyc2VyOjpwdXRJblBhcmVudHMo
UFVUX01FVEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTFNQYXJzZXI6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpMU1BhcnNlcjo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBMU1BhcnNlclBy
b3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkxTUGFyc2VyOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTI1ODksNyArMjU4OSw3IEBAIE9iamVjdEltcCAqTFNQYXJzZXI6
OmJyaWRnZShFeGVjU3RhdGUgKnAKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPExTUGFyc2Vy
PihwMSxzdGF0aWNfY2FzdDxMU1BhcnNlcjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIExT
UGFyc2VyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkxTUGFyc2VyOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxM
U1BhcnNlcj4ocDEsc3RhdGljX2Nhc3Q8TFNQYXJzZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAt
MjU5OCwxMiArMjU5OCwxMiBAQCBib29sIExTUGFyc2VyRmlsdGVyOjpoYXNQcm9wZXJ0eShFeGVj
U3RhCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkxTUGFy
c2VyRmlsdGVyOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAg
T2JqZWN0IHByb3RvID0gTFNQYXJzZXJGaWx0ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJv
dG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3Rv
ID0gTFNQYXJzZXJGaWx0ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBM
U1BhcnNlckZpbHRlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU1Bh
cnNlckZpbHRlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9v
a3VwR2V0PExTUGFyc2VyRmlsdGVyUHJvdG9GdW5jLExTUGFyc2VyRmlsdGVyPihwMSxwMiwmc19o
YXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0yNjI2LDE4ICsyNjI2LDE4IEBAIExTUGFyc2VyRmls
dGVyIEtET006OkVjbWFJbnRlcmZhY2U6OmluaGUKIAlRX1VOVVNFRChwMSk7IHJldHVybiBMU1Bh
cnNlckZpbHRlcjo6bnVsbDsKIH0KIAotVmFsdWUgTFNQYXJzZXJGaWx0ZXI6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNQYXJzZXJGaWx0ZXI6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTFNQ
YXJzZXJGaWx0ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTFNQ
YXJzZXJGaWx0ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBMU1BhcnNlckZpbHRlcjo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkxTUGFyc2VyRmlsdGVyOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIExTUGFyc2VyRmls
dGVyUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwo
KSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTFNQYXJzZXJGaWx0ZXI6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjY0NSw3ICsyNjQ1LDcgQEAgT2JqZWN0SW1w
ICpMU1BhcnNlckZpbHRlcjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdl
PExTUGFyc2VyRmlsdGVyPihwMSxzdGF0aWNfY2FzdDxMU1BhcnNlckZpbHRlcjo6UHJpdmF0ZSAq
PihkKSk7CiB9CiAKLVZhbHVlIExTUGFyc2VyRmlsdGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKkxTUGFyc2VyRmlsdGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxMU1BhcnNlckZpbHRlcj4ocDEsc3RhdGlj
X2Nhc3Q8TFNQYXJzZXJGaWx0ZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjY1NCwxMiArMjY1
NCwxMiBAQCBib29sIExTUmVzb3VyY2VSZXNvbHZlcjo6aGFzUHJvcGVydHkoRXhlCiB7CiAgICAg
Y29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkxTUmVzb3VyY2VSZXNvbHZl
cjo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBw
cm90byA9IExTUmVzb3VyY2VSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBM
U1Jlc291cmNlUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBM
U1Jlc291cmNlUmVzb2x2ZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
TFNSZXNvdXJjZVJlc29sdmVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJl
dHVybiBsb29rdXBHZXQ8TFNSZXNvdXJjZVJlc29sdmVyUHJvdG9GdW5jLExTUmVzb3VyY2VSZXNv
bHZlcj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjY4MiwxOCArMjY4Miwx
OCBAQCBMU1Jlc291cmNlUmVzb2x2ZXIgS0RPTTo6RWNtYUludGVyZmFjZTo6CiAJUV9VTlVTRUQo
cDEpOyByZXR1cm4gTFNSZXNvdXJjZVJlc29sdmVyOjpudWxsOwogfQogCi1WYWx1ZSBMU1Jlc291
cmNlUmVzb2x2ZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqTFNSZXNvdXJjZVJlc29sdmVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewotICAgIE9iamVjdCBwcm90byA9IExTUmVzb3VyY2VSZXNvbHZlclByb3RvOjpzZWxmKHAx
KTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEs
cDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBMU1Jlc291cmNlUmVzb2x2ZXJQcm90bzo6c2Vs
ZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5n
ZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9
CiAKLU9iamVjdCBMU1Jlc291cmNlUmVzb2x2ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorT2JqZWN0SW1wICpMU1Jlc291cmNlUmVzb2x2ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTFNSZXNvdXJjZVJlc29sdmVyUHJvdG86
OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTFNSZXNvdXJjZVJlc29sdmVyOjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI3MDEsNyArMjcwMSw3IEBAIE9iamVjdEltcCAqTFNS
ZXNvdXJjZVJlc29sdmVyOjpicmlkZ2UoRXgKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxMU1Jl
c291cmNlUmVzb2x2ZXI+KHAxLHN0YXRpY19jYXN0PExTUmVzb3VyY2VSZXNvbHZlcjo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIExTUmVzb3VyY2VSZXNvbHZlcjo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpMU1Jlc291cmNlUmVzb2x2ZXI6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PExTUmVzb3VyY2VSZXNv
bHZlcj4ocDEsc3RhdGljX2Nhc3Q8TFNSZXNvdXJjZVJlc29sdmVyOjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTI3MTAsMTIgKzI3MTAsMTIgQEAgYm9vbCBMU1NlcmlhbGl6ZXI6Omhhc1Byb3BlcnR5
KEV4ZWNTdGF0ZQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5
KCZMU1NlcmlhbGl6ZXI6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsK
LSAgICBPYmplY3QgcHJvdG8gPSBMU1NlcmlhbGl6ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYo
cHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnBy
b3RvID0gTFNTZXJpYWxpemVyUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
TFNTZXJpYWxpemVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTU2Vy
aWFsaXplcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3Vw
R2V0PExTU2VyaWFsaXplclByb3RvRnVuYyxMU1NlcmlhbGl6ZXI+KHAxLHAyLCZzX2hhc2hUYWJs
ZSx0aGlzLHAzKTsKIH0KQEAgLTI3MzgsMTAgKzI3MzgsMTAgQEAgTFNTZXJpYWxpemVyIEtET006
OkVjbWFJbnRlcmZhY2U6OmluaGVyaQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIExTU2VyaWFsaXpl
cjo6bnVsbDsKIH0KIAotVmFsdWUgTFNTZXJpYWxpemVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTU2VyaWFsaXplcjo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBMU1NlcmlhbGl6ZXJQcm90
bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJv
dG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTFNTZXJpYWxpemVyUHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90
by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQpAQCAtMjc1NywxMCArMjc1NywxMCBAQCBib29sIExTU2VyaWFsaXplcjo6cHV0SW5QYXJl
bnRzKFBVVF9NRVRICiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTFNTZXJpYWxpemVy
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqTFNTZXJpYWxpemVy
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIExT
U2VyaWFsaXplclByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkxTU2VyaWFsaXpl
cjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNzY4LDcgKzI3NjgsNyBAQCBPYmpl
Y3RJbXAgKkxTU2VyaWFsaXplcjo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBET01S
V0JyaWRnZTxMU1NlcmlhbGl6ZXI+KHAxLHN0YXRpY19jYXN0PExTU2VyaWFsaXplcjo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIExTU2VyaWFsaXplcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK1ZhbHVlSW1wICpMU1NlcmlhbGl6ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PExTU2VyaWFsaXplcj4ocDEsc3RhdGljX2Nh
c3Q8TFNTZXJpYWxpemVyOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI3ODEsMjEgKzI3ODEsMjEg
QEAgYm9vbCBMU1NlcmlhbGl6ZXJGaWx0ZXI6Omhhc1Byb3BlcnR5KEV4ZQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotVmFsdWUgTFNTZXJpYWxpemVyRmlsdGVyOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKkxTU2VyaWFsaXplckZpbHRlcjo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8TFNTZXJpYWxpemVyRmlsdGVy
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIExTU2VyaWFsaXplckZp
bHRlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU1Nl
cmlhbGl6ZXJGaWx0ZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBMU1NlcmlhbGl6ZXJGaWx0ZXI6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpMU1NlcmlhbGl6ZXJGaWx0ZXI6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVy
cHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0Ojpk
eW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkxT
U2VyaWFsaXplckZpbHRlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yODAzLDcg
KzI4MDMsNyBAQCBPYmplY3RJbXAgKkxTU2VyaWFsaXplckZpbHRlcjo6YnJpZGdlKEV4CiAgICAg
cmV0dXJuIG5ldyBET01CcmlkZ2U8TFNTZXJpYWxpemVyRmlsdGVyPihwMSxzdGF0aWNfY2FzdDxM
U1NlcmlhbGl6ZXJGaWx0ZXI6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBMU1NlcmlhbGl6
ZXJGaWx0ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqTFNTZXJpYWxp
emVyRmlsdGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNo
ZURPTU9iamVjdDxMU1NlcmlhbGl6ZXJGaWx0ZXI+KHAxLHN0YXRpY19jYXN0PExTU2VyaWFsaXpl
ckZpbHRlcjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yODEyLDE1ICsyODEyLDE1IEBAIGJvb2wg
TWVkaWFMaXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAKIHsKICAgICBjb25zdCBIYXNoRW50
cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmTWVkaWFMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAg
ICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTWVkaWFMaXN0UHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IE1lZGlhTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBp
Zihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBib29sIG9rOwog
ICAgIHVuc2lnbmVkIGludCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7CiAgICAgaWYob2sgJiYg
aSA8IGxlbmd0aCgpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVl
IE1lZGlhTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpNZWRpYUxp
c3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgYm9vbCBvazsKICAgICB1bnNp
Z25lZCBpbnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwpAQCAtMjg0NiwxMCArMjg0NiwxMCBA
QCBNZWRpYUxpc3QgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdGVkCiAJUV9VTlVTRUQocDEp
OyByZXR1cm4gTWVkaWFMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBNZWRpYUxpc3Q6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTWVkaWFMaXN0OjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IE1lZGlh
TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBNZWRpYUxpc3RQ
cm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CkBAIC0yODY1LDEwICsyODY1LDEwIEBAIGJvb2wgTWVkaWFMaXN0OjpwdXRJblBh
cmVudHMoUFVUX01FVEhPRF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBNZWRpYUxp
c3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpNZWRpYUxpc3Q6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTWVk
aWFMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51
bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTWVkaWFMaXN0Ojpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI4NzYsNyArMjg3Niw3IEBAIE9iamVjdEltcCAq
TWVkaWFMaXN0OjpicmlkZ2UoRXhlY1N0YXRlICoKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdl
PE1lZGlhTGlzdD4ocDEsc3RhdGljX2Nhc3Q8TWVkaWFMaXN0OjpQcml2YXRlICo+KGQpKTsKIH0K
IAotVmFsdWUgTWVkaWFMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
Kk1lZGlhTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2Fj
aGVET01PYmplY3Q8TWVkaWFMaXN0PihwMSxzdGF0aWNfY2FzdDxNZWRpYUxpc3Q6OlByaXZhdGUg
Kj4oZCkpOwogfQpAQCAtMjg4NSwxMyArMjg4NSwxMyBAQCBib29sIE1vdXNlRXZlbnQ6Omhhc1By
b3BlcnR5KEV4ZWNTdGF0ZSAqCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpm
aW5kRW50cnkoJk1vdXNlRXZlbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4g
dHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBNb3VzZUV2ZW50UHJvdG86OnNlbGYocDEpOwotICAg
IGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1w
ICpwcm90byA9IE1vdXNlRXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoVUlFdmVudDo6aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIE1vdXNl
RXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTW91c2VFdmVudDo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PE1vdXNl
RXZlbnRQcm90b0Z1bmMsTW91c2VFdmVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQpAQCAtMjkxNCwxOCArMjkxNCwxOCBAQCBNb3VzZUV2ZW50IEtET006OkVjbWFJbnRlcmZhY2U6
OmluaGVyaXRlCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gTW91c2VFdmVudDo6bnVsbDsKIH0KIAot
VmFsdWUgTW91c2VFdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpNb3VzZUV2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewotICAgIE9iamVjdCBwcm90byA9IE1vdXNlRXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYo
cHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBP
YmplY3RJbXAgKnByb3RvID0gTW91c2VFdmVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90
by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYo
VUlFdmVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gVUlFdmVudDo6Z2V0KHAxLHAyLHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBNb3VzZUV2ZW50Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqTW91c2VFdmVudDo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBNb3VzZUV2ZW50
UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTW91c2VFdmVudDo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yOTMzLDcgKzI5MzMsNyBAQCBPYmplY3RJbXAgKk1vdXNl
RXZlbnQ6OmJyaWRnZShFeGVjU3RhdGUgCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8TW91c2VF
dmVudD4ocDEsc3RhdGljX2Nhc3Q8TW91c2VFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZh
bHVlIE1vdXNlRXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqTW91
c2VFdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVE
T01PYmplY3Q8TW91c2VFdmVudD4ocDEsc3RhdGljX2Nhc3Q8TW91c2VFdmVudDo6UHJpdmF0ZSAq
PihkKSk7CiB9CkBAIC0yOTQyLDEzICsyOTQyLDEzIEBAIGJvb2wgTXV0YXRpb25FdmVudDo6aGFz
UHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZp
bmRFbnRyeSgmTXV0YXRpb25FdmVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVy
biB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IE11dGF0aW9uRXZlbnRQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmpl
Y3RJbXAgKnByb3RvID0gTXV0YXRpb25FdmVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90
by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihFdmVudDo6aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVl
IE11dGF0aW9uRXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTXV0
YXRpb25FdmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9v
a3VwR2V0PE11dGF0aW9uRXZlbnRQcm90b0Z1bmMsTXV0YXRpb25FdmVudD4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjk3MSwxOCArMjk3MSwxOCBAQCBNdXRhdGlvbkV2ZW50
IEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVyCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gTXV0YXRp
b25FdmVudDo6bnVsbDsKIH0KIAotVmFsdWUgTXV0YXRpb25FdmVudDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpNdXRhdGlvbkV2ZW50OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IE11dGF0aW9u
RXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTXV0YXRpb25F
dmVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoRXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIEV2ZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotT2JqZWN0IE11dGF0aW9uRXZlbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpNdXRhdGlvbkV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIE11dGF0aW9uRXZlbnRQcm90bzo6c2VsZihwMSk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpNdXRhdGlvbkV2ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTI5OTAsNyArMjk5MCw3IEBAIE9iamVjdEltcCAqTXV0YXRpb25FdmVudDo6YnJpZGdl
KEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxNdXRhdGlvbkV2ZW50PihwMSxzdGF0
aWNfY2FzdDxNdXRhdGlvbkV2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgTXV0YXRp
b25FdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpNdXRhdGlvbkV2
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9i
amVjdDxNdXRhdGlvbkV2ZW50PihwMSxzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50OjpQcml2YXRl
ICo+KGQpKTsKIH0KQEAgLTI5OTksMTUgKzI5OTksMTUgQEAgYm9vbCBOYW1lZE5vZGVNYXA6Omhh
c1Byb3BlcnR5KEV4ZWNTdGF0ZQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZOYW1lZE5vZGVNYXA6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1
cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBOYW1lZE5vZGVNYXBQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmpl
Y3RJbXAgKnByb3RvID0gTmFtZWROb2RlTWFwUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGJvb2wgb2s7CiAgICAgdW5z
aWduZWQgaW50IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsKICAgICBpZihvayAmJiBpIDwgbGVu
Z3RoKCkpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTmFtZWRO
b2RlTWFwOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKk5hbWVkTm9kZU1h
cDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBib29sIG9rOwogICAgIHVuc2ln
bmVkIGludCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7CkBAIC0zMDMzLDEwICszMDMzLDEwIEBA
IE5hbWVkTm9kZU1hcCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcmkKIAlRX1VOVVNFRChwMSk7
IHJldHVybiBOYW1lZE5vZGVNYXA6Om51bGw7CiB9CiAKLVZhbHVlIE5hbWVkTm9kZU1hcDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOYW1lZE5vZGVNYXA6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3Rv
ID0gTmFtZWROb2RlTWFwUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9
IE5hbWVkTm9kZU1hcFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAgLTMwNDcsMTAgKzMwNDcsMTAgQEAgYm9vbCBOYW1l
ZE5vZGVNYXA6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1P
YmplY3QgTmFtZWROb2RlTWFwOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVj
dEltcCAqTmFtZWROb2RlTWFwOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICBpZihwMSkgcmV0dXJuIE5hbWVkTm9kZU1hcFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKk5hbWVkTm9kZU1hcDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zMDU4
LDcgKzMwNTgsNyBAQCBPYmplY3RJbXAgKk5hbWVkTm9kZU1hcDo6YnJpZGdlKEV4ZWNTdGF0CiAg
ICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxOYW1lZE5vZGVNYXA+KHAxLHN0YXRpY19jYXN0PE5h
bWVkTm9kZU1hcDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIE5hbWVkTm9kZU1hcDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpOYW1lZE5vZGVNYXA6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PE5hbWVkTm9k
ZU1hcD4ocDEsc3RhdGljX2Nhc3Q8TmFtZWROb2RlTWFwOjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTMwNjcsMTMgKzMwNjcsMTMgQEAgYm9vbCBOb2RlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAx
LGNvbgogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZOb2Rl
OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHBy
b3RvID0gTm9kZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBOb2RlUHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAg
IGlmKEV2ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTm9kZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpOb2RlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBsb29rdXBHZXQ8Tm9kZVByb3RvRnVuYyxOb2RlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CkBAIC0zMTI5LDEwICszMTI5LDEwIEBAIE5vZGUgS0RPTTo6RWNtYUludGVyZmFjZTo6
aW5oZXJpdGVkTm9kZUMKIAlRX1VOVVNFRChwMSk7IHJldHVybiBOb2RlOjpudWxsOwogfQogCi1W
YWx1ZSBOb2RlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
Kk5vZGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0
IHByb3RvID0gTm9kZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBO
b2RlUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihFdmVudFRhcmdldDo6aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gRXZlbnRUYXJnZXQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQpAQCAtMzE1MSwxMCArMzE1MSwxMCBAQCBib29sIE5vZGU6OnB1dEluUGFy
ZW50cyhQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTm9k
ZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKk5vZGU6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTm9kZVByb3Rv
OjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKk5vZGU6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtMzE2Miw3ICszMTYyLDcgQEAgT2JqZWN0SW1wICpOb2RlOjpicmlkZ2UoRXhl
Y1N0YXRlICpwMSkgYwogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8Tm9kZT4ocDEsc3RhdGlj
X2Nhc3Q8Tm9kZTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIE5vZGU6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqTm9kZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Tm9kZT4ocDEsc3RhdGljX2Nhc3Q8Tm9k
ZTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zMTcxLDEyICszMTcxLDEyIEBAIGJvb2wgTm9kZUl0
ZXJhdG9yOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUg
PSBMb29rdXA6OmZpbmRFbnRyeSgmTm9kZUl0ZXJhdG9yOjpzX2hhc2hUYWJsZSxwMik7CiAgICAg
aWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTm9kZUl0ZXJhdG9yUHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IE5vZGVJdGVyYXRvclByb3RvOjpzZWxmKHAxKTsKKyAg
ICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIE5vZGVJdGVyYXRvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpOb2RlSXRlcmF0b3I6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGxvb2t1cEdldDxOb2RlSXRlcmF0b3JQcm90b0Z1bmMsTm9kZUl0ZXJhdG9y
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zMTk5LDE4ICszMTk5LDE4IEBA
IE5vZGVJdGVyYXRvciBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcmkKIAlRX1VOVVNFRChwMSk7
IHJldHVybiBOb2RlSXRlcmF0b3I6Om51bGw7CiB9CiAKLVZhbHVlIE5vZGVJdGVyYXRvcjo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOb2RlSXRlcmF0b3I6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3Rv
ID0gTm9kZUl0ZXJhdG9yUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9
IE5vZGVJdGVyYXRvclByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IE5vZGVJdGVyYXRvcjo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKk5vZGVJdGVyYXRvcjo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBOb2RlSXRlcmF0b3JQ
cm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpOb2RlSXRlcmF0b3I6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzIxOCw3ICszMjE4LDcgQEAgT2JqZWN0SW1wICpOb2Rl
SXRlcmF0b3I6OmJyaWRnZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPE5vZGVJ
dGVyYXRvcj4ocDEsc3RhdGljX2Nhc3Q8Tm9kZUl0ZXJhdG9yOjpQcml2YXRlICo+KGQpKTsKIH0K
IAotVmFsdWUgTm9kZUl0ZXJhdG9yOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKk5vZGVJdGVyYXRvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1
cm4gY2FjaGVET01PYmplY3Q8Tm9kZUl0ZXJhdG9yPihwMSxzdGF0aWNfY2FzdDxOb2RlSXRlcmF0
b3I6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzIyNywxNSArMzIyNywxNSBAQCBib29sIE5vZGVM
aXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICpl
ID0gTG9va3VwOjpmaW5kRW50cnkoJk5vZGVMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYo
ZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTm9kZUxpc3RQcm90bzo6c2VsZihw
MSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBP
YmplY3RJbXAgKnByb3RvID0gTm9kZUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgYm9vbCBvazsKICAgICB1bnNp
Z25lZCBpbnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwogICAgIGlmKG9rICYmIGkgPCBsZW5n
dGgoKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBOb2RlTGlz
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOb2RlTGlzdDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGludCBp
ID0gcDIudG9BcnJheUluZGV4KCZvayk7CkBAIC0zMjYxLDE4ICszMjYxLDE4IEBAIE5vZGVMaXN0
IEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVyaXRlZE4KIAlRX1VOVVNFRChwMSk7IHJldHVybiBO
b2RlTGlzdDo6bnVsbDsKIH0KIAotVmFsdWUgTm9kZUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTm9kZUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTm9kZUxpc3RQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0
KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTm9kZUxpc3RQcm90bzo6c2VsZihwMSk7
CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEs
cDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9i
amVjdCBOb2RlTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAg
Kk5vZGVMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIE5vZGVMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTm9kZUxp
c3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzI4MCw3ICszMjgwLDcgQEAgT2Jq
ZWN0SW1wICpOb2RlTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgRE9N
QnJpZGdlPE5vZGVMaXN0PihwMSxzdGF0aWNfY2FzdDxOb2RlTGlzdDo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIE5vZGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKk5vZGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBj
YWNoZURPTU9iamVjdDxOb2RlTGlzdD4ocDEsc3RhdGljX2Nhc3Q8Tm9kZUxpc3Q6OlByaXZhdGUg
Kj4oZCkpOwogfQpAQCAtMzI5MywxMiArMzI5MywxMiBAQCBib29sIE5vdGF0aW9uOjpoYXNQcm9w
ZXJ0eShFeGVjU3RhdGUgKnAxCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBOb3RhdGlv
bjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOb3RhdGlvbjo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Tm90YXRp
b24+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgTm90YXRpb246Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTm90YXRpb246Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoTm9kZTo6aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gTm9kZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CkBAIC0zMzEzLDEwICszMzEzLDEwIEBAIGJvb2wgTm90YXRpb246OnB1dChQVVRf
TUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTm90YXRpb246OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpOb3RhdGlvbjo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTm90
YXRpb246OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzMyNCw3ICszMzI0LDcgQEAg
T2JqZWN0SW1wICpOb3RhdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcg
RE9NUldCcmlkZ2U8Tm90YXRpb24+KHAxLHN0YXRpY19jYXN0PE5vdGF0aW9uOjpQcml2YXRlICo+
KGQpKTsKIH0KIAotVmFsdWUgTm90YXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqTm90YXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGNhY2hlRE9NT2JqZWN0PE5vdGF0aW9uPihwMSxzdGF0aWNfY2FzdDxOb3RhdGlvbjo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC0zMzM3LDEyICszMzM3LDEyIEBAIGJvb2wgUHJvY2Vzc2luZ0lu
c3RydWN0aW9uOjpoYXNQcm9wZXJ0eSgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqUHJvY2Vzc2luZ0lu
c3RydWN0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlm
KE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6OmdldChwMSxwMixwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzM2MiwxMCArMzM2MiwxMCBAQCBib29sIFByb2Nl
c3NpbmdJbnN0cnVjdGlvbjo6cHV0SW5QYXJlbnRzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1P
YmplY3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWls
dGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVs
bCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb246OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzM3Myw3ICszMzczLDcgQEAg
T2JqZWN0SW1wICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmJyaWRnZQogICAgIHJldHVybiBuZXcg
RE9NUldCcmlkZ2U8UHJvY2Vzc2luZ0luc3RydWN0aW9uPihwMSxzdGF0aWNfY2FzdDxQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb246OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqUHJvY2Vzc2lu
Z0luc3RydWN0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBj
YWNoZURPTU9iamVjdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KHAxLHN0YXRpY19jYXN0PFByb2Nl
c3NpbmdJbnN0cnVjdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zMzg2LDIxICszMzg2LDIx
IEBAIGJvb2wgS0RPTTo6UkdCQ29sb3I6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIEtET006OlJHQkNvbG9yOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKktET006OlJHQkNvbG9yOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxLRE9NOjpSR0JDb2xvcj4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBLRE9NOjpSR0JDb2xvcjo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpLRE9NOjpSR0JDb2xvcjo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFf
VU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
T2JqZWN0IEtET006OlJHQkNvbG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqS0RPTTo6UkdCQ29sb3I6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90
b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKktET006OlJHQkNvbG9yOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTM0MDgsNyArMzQwOCw3IEBAIE9iamVjdEltcCAqS0RPTTo6UkdC
Q29sb3I6OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxLRE9NOjpSR0JD
b2xvcj4ocDEsc3RhdGljX2Nhc3Q8S0RPTTo6UkdCQ29sb3I6OlByaXZhdGUgKj4oZCkpOwogfQog
Ci1WYWx1ZSBLRE9NOjpSR0JDb2xvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpLRE9NOjpSR0JDb2xvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gY2FjaGVET01PYmplY3Q8S0RPTTo6UkdCQ29sb3I+KHAxLHN0YXRpY19jYXN0PEtET006
OlJHQkNvbG9yOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM0MTcsMTIgKzM0MTcsMTIgQEAgYm9v
bCBSYW5nZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMSxjbwogewogICAgIGNvbnN0IEhhc2hF
bnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZSYW5nZTo6c19oYXNoVGFibGUscDIpOwogICAg
IGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFJhbmdlUHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IFJhbmdlUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgUmFuZ2U6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqUmFuZ2U6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxSYW5n
ZVByb3RvRnVuYyxSYW5nZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzQ1
MCwxOCArMzQ1MCwxOCBAQCBSYW5nZSBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRSYW5n
CiAJUV9VTlVTRUQocDEpOyByZXR1cm4gUmFuZ2U6Om51bGw7CiB9CiAKLVZhbHVlIFJhbmdlOjpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlJhbmdlOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFJh
bmdlUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFJhbmdlUHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90
by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1PYmplY3QgUmFuZ2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpSYW5nZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYo
cDEpIHJldHVybiBSYW5nZVByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlJhbmdl
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM0NjksNyArMzQ2OSw3IEBAIE9iamVj
dEltcCAqUmFuZ2U6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSAKICAgICByZXR1cm4gbmV3IERPTUJy
aWRnZTxSYW5nZT4ocDEsc3RhdGljX2Nhc3Q8UmFuZ2U6OlByaXZhdGUgKj4oZCkpOwogfQogCi1W
YWx1ZSBSYW5nZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpSYW5nZTo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8
UmFuZ2U+KHAxLHN0YXRpY19jYXN0PFJhbmdlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM0ODIs
MjEgKzM0ODIsMjEgQEAgYm9vbCBSYW5nZUV4Y2VwdGlvbjo6aGFzUHJvcGVydHkoRXhlY1N0YQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgUmFuZ2VFeGNlcHRpb246OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqUmFuZ2VFeGNlcHRpb246OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPFJhbmdlRXhjZXB0aW9u
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFJhbmdlRXhjZXB0aW9u
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlJhbmdlRXhj
ZXB0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5V
U0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1PYmplY3QgUmFuZ2VFeGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpSYW5nZUV4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRp
bk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwo
KSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqUmFuZ2VFeGNlcHRpb246OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzUwNCw3ICszNTA0LDcgQEAgT2JqZWN0SW1w
ICpSYW5nZUV4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdl
PFJhbmdlRXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxSYW5nZUV4Y2VwdGlvbjo6UHJpdmF0ZSAq
PihkKSk7CiB9CiAKLVZhbHVlIFJhbmdlRXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKlJhbmdlRXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxSYW5nZUV4Y2VwdGlvbj4ocDEsc3RhdGlj
X2Nhc3Q8UmFuZ2VFeGNlcHRpb246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzUxNywyMSArMzUx
NywyMSBAQCBib29sIEtET006OlJlY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBLRE9NOjpSZWN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKktET006OlJlY3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPFJlY3Q+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KIAotVmFsdWUgS0RPTTo6UmVjdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpLRE9NOjpSZWN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChw
Myk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgS0RPTTo6UmVjdDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKktET006OlJlY3Q6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVy
cHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0Ojpk
eW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKktE
T006OlJlY3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzUzOSw3ICszNTM5LDcg
QEAgT2JqZWN0SW1wICpLRE9NOjpSZWN0OjpicmlkZ2UoRXhlY1N0YXRlIAogICAgIHJldHVybiBu
ZXcgRE9NQnJpZGdlPEtET006OlJlY3Q+KHAxLHN0YXRpY19jYXN0PEtET006OlJlY3Q6OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBLRE9NOjpSZWN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKktET006OlJlY3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PEtET006OlJlY3Q+KHAxLHN0YXRpY19jYXN0PEtE
T006OlJlY3Q6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzU1MiwxMiArMzU1MiwxMiBAQCBib29s
IFN0eWxlU2hlZXQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1WYWx1ZSBTdHlsZVNoZWV0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlN0eWxlU2hlZXQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGxvb2t1cEdldFZhbHVlPFN0eWxlU2hlZXQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KIAotVmFsdWUgU3R5bGVTaGVldDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTdHlsZVNoZWV0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzU3NCwxMCArMzU3NCwxMCBAQCBib29sIFN0eWxl
U2hlZXQ6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9ECiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1P
YmplY3QgU3R5bGVTaGVldDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJ
bXAgKlN0eWxlU2hlZXQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKlN0eWxlU2hlZXQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtMzU4NSw3ICszNTg1LDcgQEAgT2JqZWN0SW1wICpTdHlsZVNoZWV0OjpicmlkZ2UoRXhl
Y1N0YXRlIAogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8U3R5bGVTaGVldD4ocDEsc3RhdGlj
X2Nhc3Q8U3R5bGVTaGVldDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFN0eWxlU2hlZXQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU3R5bGVTaGVldDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8U3R5bGVT
aGVldD4ocDEsc3RhdGljX2Nhc3Q8U3R5bGVTaGVldDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0z
NTk0LDE1ICszNTk0LDE1IEBAIGJvb2wgU3R5bGVTaGVldExpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNT
dGEKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU3R5bGVT
aGVldExpc3Q6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBP
YmplY3QgcHJvdG8gPSBTdHlsZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90
by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8g
PSBTdHlsZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGludCBp
ID0gcDIudG9BcnJheUluZGV4KCZvayk7CiAgICAgaWYob2sgJiYgaSA8IGxlbmd0aCgpKSByZXR1
cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFN0eWxlU2hlZXRMaXN0Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlN0eWxlU2hlZXRMaXN0OjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50
IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsKQEAgLTM2MjgsMTggKzM2MjgsMTggQEAgU3R5bGVT
aGVldExpc3QgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZQogCVFfVU5VU0VEKHAxKTsgcmV0dXJu
IFN0eWxlU2hlZXRMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBTdHlsZVNoZWV0TGlzdDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTdHlsZVNoZWV0TGlzdDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8g
PSBTdHlsZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8g
PSBTdHlsZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwog
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFN0eWxlU2hlZXRMaXN0Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU3R5bGVTaGVldExpc3Q6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU3R5bGVT
aGVldExpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTdHlsZVNoZWV0TGlz
dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNjQ3LDcgKzM2NDcsNyBAQCBPYmpl
Y3RJbXAgKlN0eWxlU2hlZXRMaXN0OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBET01C
cmlkZ2U8U3R5bGVTaGVldExpc3Q+KHAxLHN0YXRpY19jYXN0PFN0eWxlU2hlZXRMaXN0OjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU3R5bGVTaGVldExpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqU3R5bGVTaGVldExpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFN0eWxlU2hlZXRMaXN0PihwMSxz
dGF0aWNfY2FzdDxTdHlsZVNoZWV0TGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zNjU2LDEz
ICszNjU2LDEzIEBAIGJvb2wgVGV4dDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMSxjb24KIHsK
ICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmVGV4dDo6c19oYXNo
VGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFRl
eHRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gVGV4dFByb3RvOjpzZWxmKHAxKTsKKyAg
ICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihDaGFy
YWN0ZXJEYXRhOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotVmFsdWUgVGV4dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpUZXh0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29r
dXBHZXQ8VGV4dFByb3RvRnVuYyxUZXh0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CkBAIC0zNjg3LDEwICszNjg3LDEwIEBAIFRleHQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJp
dGVkVGV4dEMKIAlRX1VOVVNFRChwMSk7IHJldHVybiBUZXh0OjpudWxsOwogfQogCi1WYWx1ZSBU
ZXh0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlRleHQ6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3Rv
ID0gVGV4dFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBUZXh0UHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihDaGFyYWN0ZXJEYXRhOjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBDaGFyYWN0ZXJEYXRhOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKIH0KQEAgLTM3MDQsMTAgKzM3MDQsMTAgQEAgYm9vbCBUZXh0OjpwdXQoUFVUX01F
VEhPRF9BUkdTKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFRleHQ6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpUZXh0Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFRleHRQcm90bzo6c2VsZihwMSk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpUZXh0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTM3MTUsNyArMzcxNSw3IEBAIE9iamVjdEltcCAqVGV4dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEp
IGMKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPFRleHQ+KHAxLHN0YXRpY19jYXN0PFRleHQ6
OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBUZXh0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKlRleHQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGNhY2hlRE9NT2JqZWN0PFRleHQ+KHAxLHN0YXRpY19jYXN0PFRleHQ6OlByaXZhdGUg
Kj4oZCkpOwogfQpAQCAtMzcyNCwxMiArMzcyNCwxMiBAQCBib29sIFRyZWVXYWxrZXI6Omhhc1By
b3BlcnR5KEV4ZWNTdGF0ZSAqCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpm
aW5kRW50cnkoJlRyZWVXYWxrZXI6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4g
dHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBUcmVlV2Fsa2VyUHJvdG86OnNlbGYocDEpOwotICAg
IGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1w
ICpwcm90byA9IFRyZWVXYWxrZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBUcmVlV2Fsa2VyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlRyZWVX
YWxrZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdl
dDxUcmVlV2Fsa2VyUHJvdG9GdW5jLFRyZWVXYWxrZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KQEAgLTM3NTIsMTAgKzM3NTIsMTAgQEAgVHJlZVdhbGtlciBLRE9NOjpFY21hSW50
ZXJmYWNlOjppbmhlcml0ZQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIFRyZWVXYWxrZXI6Om51bGw7
CiB9CiAKLVZhbHVlIFRyZWVXYWxrZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqVHJlZVdhbGtlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBUcmVlV2Fsa2VyUHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IFRyZWVXYWxrZXJQcm90bzo6c2VsZihwMSk7CisgICAg
aWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwog
ICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0zNzcxLDEw
ICszNzcxLDEwIEBAIGJvb2wgVHJlZVdhbGtlcjo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBUcmVlV2Fsa2VyOjpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqVHJlZVdhbGtlcjo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBUcmVlV2Fsa2VyUHJvdG86OnNlbGYo
cDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqVHJlZVdhbGtlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CkBAIC0zNzgyLDcgKzM3ODIsNyBAQCBPYmplY3RJbXAgKlRyZWVXYWxrZXI6OmJyaWRn
ZShFeGVjU3RhdGUgCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxUcmVlV2Fsa2VyPihwMSxz
dGF0aWNfY2FzdDxUcmVlV2Fsa2VyOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgVHJlZVdh
bGtlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpUcmVlV2Fsa2VyOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxU
cmVlV2Fsa2VyPihwMSxzdGF0aWNfY2FzdDxUcmVlV2Fsa2VyOjpQcml2YXRlICo+KGQpKTsKIH0K
QEAgLTM3OTEsMTIgKzM3OTEsMTIgQEAgYm9vbCBUeXBlSW5mbzo6aGFzUHJvcGVydHkoRXhlY1N0
YXRlICpwMQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZU
eXBlSW5mbzo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9i
amVjdCBwcm90byA9IFR5cGVJbmZvUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFR5cGVJ
bmZvUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgVHlwZUluZm86OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqVHlwZUluZm86OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxUeXBlSW5mb1Byb3RvRnVuYyxU
eXBlSW5mbz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzgxOSwxOCArMzgx
OSwxOCBAQCBUeXBlSW5mbyBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRUCiAJUV9VTlVT
RUQocDEpOyByZXR1cm4gVHlwZUluZm86Om51bGw7CiB9CiAKLVZhbHVlIFR5cGVJbmZvOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlR5cGVJbmZvOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFR5
cGVJbmZvUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFR5cGVJbmZv
UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1PYmplY3QgVHlwZUluZm86OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorT2JqZWN0SW1wICpUeXBlSW5mbzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBUeXBlSW5mb1Byb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlR5cGVJbmZvOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM4Mzgs
NyArMzgzOCw3IEBAIE9iamVjdEltcCAqVHlwZUluZm86OmJyaWRnZShFeGVjU3RhdGUgKnAKICAg
ICByZXR1cm4gbmV3IERPTUJyaWRnZTxUeXBlSW5mbz4ocDEsc3RhdGljX2Nhc3Q8VHlwZUluZm86
OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBUeXBlSW5mbzo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK1ZhbHVlSW1wICpUeXBlSW5mbzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8VHlwZUluZm8+KHAxLHN0YXRpY19jYXN0PFR5
cGVJbmZvOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM4NDcsMTMgKzM4NDcsMTMgQEAgYm9vbCBV
SUV2ZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLAogewogICAgIGNvbnN0IEhhc2hFbnRy
eSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZVSUV2ZW50OjpzX2hhc2hUYWJsZSxwMik7CiAgICAg
aWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gVUlFdmVudFByb3RvOjpzZWxm
KHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAg
IE9iamVjdEltcCAqcHJvdG8gPSBVSUV2ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKEV2ZW50OjpoYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
VUlFdmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpVSUV2ZW50Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8VUlFdmVu
dFByb3RvRnVuYyxVSUV2ZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0z
ODgwLDE4ICszODgwLDE4IEBAIFVJRXZlbnQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdGVk
VUkKIAlRX1VOVVNFRChwMSk7IHJldHVybiBVSUV2ZW50OjpudWxsOwogfQogCi1WYWx1ZSBVSUV2
ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlVJRXZl
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gVUlFdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBV
SUV2ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihFdmVudDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gRXZlbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1PYmplY3QgVUlFdmVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitP
YmplY3RJbXAgKlVJRXZlbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IGlmKHAxKSByZXR1cm4gVUlFdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0
OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAg
KlVJRXZlbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzg5OSw3ICszODk5LDcg
QEAgT2JqZWN0SW1wICpVSUV2ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBu
ZXcgRE9NQnJpZGdlPFVJRXZlbnQ+KHAxLHN0YXRpY19jYXN0PFVJRXZlbnQ6OlByaXZhdGUgKj4o
ZCkpOwogfQogCi1WYWx1ZSBVSUV2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKlVJRXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGNhY2hlRE9NT2JqZWN0PFVJRXZlbnQ+KHAxLHN0YXRpY19jYXN0PFVJRXZlbnQ6OlByaXZhdGUg
Kj4oZCkpOwogfQpAQCAtMzkwOCwxMiArMzkwOCwxMiBAQCBib29sIFhQYXRoRXZhbHVhdG9yOjpo
YXNQcm9wZXJ0eShFeGVjU3RhCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpm
aW5kRW50cnkoJlhQYXRoRXZhbHVhdG9yOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0
dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihw
MSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBP
YmplY3RJbXAgKnByb3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7CisgICAgaWYo
cHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBYUGF0aEV2YWx1YXRvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpYUGF0aEV2YWx1YXRvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gbG9va3VwR2V0PFhQYXRoRXZhbHVhdG9yUHJvdG9GdW5jLFhQYXRoRXZhbHVh
dG9yPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zOTM4LDE4ICszOTM4LDE4
IEBAIFhQYXRoRXZhbHVhdG9yIEtET006OkVjbWFJbnRlcmZhY2U6OmluaGUKIAlRX1VOVVNFRChw
MSk7IHJldHVybiBYUGF0aEV2YWx1YXRvcjo6bnVsbDsKIH0KIAotVmFsdWUgWFBhdGhFdmFsdWF0
b3I6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhF
dmFsdWF0b3I6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2Jq
ZWN0IHByb3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5V
U0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBYUGF0aEV2YWx1
YXRvcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlhQYXRoRXZh
bHVhdG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIFhQYXRoRXZhbHVhdG9yUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqWFBh
dGhFdmFsdWF0b3I6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzk1Nyw3ICszOTU3
LDcgQEAgT2JqZWN0SW1wICpYUGF0aEV2YWx1YXRvcjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVy
biBuZXcgRE9NQnJpZGdlPFhQYXRoRXZhbHVhdG9yPihwMSxzdGF0aWNfY2FzdDxYUGF0aEV2YWx1
YXRvcjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFhQYXRoRXZhbHVhdG9yOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoRXZhbHVhdG9yOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxYUGF0aEV2YWx1
YXRvcj4ocDEsc3RhdGljX2Nhc3Q8WFBhdGhFdmFsdWF0b3I6OlByaXZhdGUgKj4oZCkpOwogfQpA
QCAtMzk3MCwyMSArMzk3MCwyMSBAQCBib29sIFhQYXRoRXhjZXB0aW9uOjpoYXNQcm9wZXJ0eShF
eGVjU3RhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBYUGF0aEV4Y2VwdGlvbjo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpYUGF0aEV4Y2VwdGlvbjo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8WFBhdGhF
eGNlcHRpb24+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgWFBhdGhF
eGNlcHRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
WFBhdGhFeGNlcHRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBYUGF0aEV4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlhQYXRoRXhjZXB0aW9uOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpYUGF0aEV4Y2Vw
dGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zOTkyLDcgKzM5OTIsNyBAQCBP
YmplY3RJbXAgKlhQYXRoRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBE
T01CcmlkZ2U8WFBhdGhFeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PFhQYXRoRXhjZXB0aW9uOjpQ
cml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgWFBhdGhFeGNlcHRpb246OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhFeGNlcHRpb246OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFhQYXRoRXhjZXB0aW9uPihw
MSxzdGF0aWNfY2FzdDxYUGF0aEV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC00MDAx
LDEyICs0MDAxLDEyIEBAIGJvb2wgWFBhdGhFeHByZXNzaW9uOjpoYXNQcm9wZXJ0eShFeGVjU3QK
IHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmWFBhdGhFeHBy
ZXNzaW9uOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2Jq
ZWN0IHByb3RvID0gWFBhdGhFeHByZXNzaW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3Rv
Lmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9
IFhQYXRoRXhwcmVzc2lvblByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFhQ
YXRoRXhwcmVzc2lvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpYUGF0
aEV4cHJlc3Npb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxv
b2t1cEdldDxYUGF0aEV4cHJlc3Npb25Qcm90b0Z1bmMsWFBhdGhFeHByZXNzaW9uPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC00MDI5LDE4ICs0MDI5LDE4IEBAIFhQYXRoRXhw
cmVzc2lvbiBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmgKIAlRX1VOVVNFRChwMSk7IHJldHVybiBY
UGF0aEV4cHJlc3Npb246Om51bGw7CiB9CiAKLVZhbHVlIFhQYXRoRXhwcmVzc2lvbjo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpYUGF0aEV4cHJlc3Npb246
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3Rv
ID0gWFBhdGhFeHByZXNzaW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90
byA9IFhQYXRoRXhwcmVzc2lvblByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFhQYXRoRXhwcmVzc2lvbjo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlhQYXRoRXhwcmVzc2lv
bjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBY
UGF0aEV4cHJlc3Npb25Qcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpYUGF0aEV4
cHJlc3Npb246OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDA0OCw3ICs0MDQ4LDcg
QEAgT2JqZWN0SW1wICpYUGF0aEV4cHJlc3Npb246OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBu
ZXcgRE9NQnJpZGdlPFhQYXRoRXhwcmVzc2lvbj4ocDEsc3RhdGljX2Nhc3Q8WFBhdGhFeHByZXNz
aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgWFBhdGhFeHByZXNzaW9uOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoRXhwcmVzc2lvbjo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8WFBhdGhFeHBy
ZXNzaW9uPihwMSxzdGF0aWNfY2FzdDxYUGF0aEV4cHJlc3Npb246OlByaXZhdGUgKj4oZCkpOwog
fQpAQCAtNDA1NywxMiArNDA1NywxMiBAQCBib29sIFhQYXRoTlNSZXNvbHZlcjo6aGFzUHJvcGVy
dHkoRXhlY1N0CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnko
JlhQYXRoTlNSZXNvbHZlcjo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVl
OwotICAgIE9iamVjdCBwcm90byA9IFhQYXRoTlNSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKLSAg
ICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdElt
cCAqcHJvdG8gPSBYUGF0aE5TUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBYUGF0aE5TUmVzb2x2ZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqWFBhdGhOU1Jlc29sdmVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBsb29rdXBHZXQ8WFBhdGhOU1Jlc29sdmVyUHJvdG9GdW5jLFhQYXRoTlNSZXNvbHZl
cj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNDA5MCwxOCArNDA5MCwxOCBA
QCBYUGF0aE5TUmVzb2x2ZXIgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oCiAJUV9VTlVTRUQocDEp
OyByZXR1cm4gWFBhdGhOU1Jlc29sdmVyOjpudWxsOwogfQogCi1WYWx1ZSBYUGF0aE5TUmVzb2x2
ZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhO
U1Jlc29sdmVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9i
amVjdCBwcm90byA9IFhQYXRoTlNSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90
by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVj
dEltcCAqcHJvdG8gPSBYUGF0aE5TUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJv
dG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFf
VU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBYUGF0aE5T
UmVzb2x2ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpYUGF0
aE5TUmVzb2x2ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gWFBhdGhOU1Jlc29sdmVyUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqWFBhdGhOU1Jlc29sdmVyOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQxMDks
NyArNDEwOSw3IEBAIE9iamVjdEltcCAqWFBhdGhOU1Jlc29sdmVyOjpicmlkZ2UoRXhlY1MKICAg
ICByZXR1cm4gbmV3IERPTUJyaWRnZTxYUGF0aE5TUmVzb2x2ZXI+KHAxLHN0YXRpY19jYXN0PFhQ
YXRoTlNSZXNvbHZlcjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFhQYXRoTlNSZXNvbHZl
cjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpYUGF0aE5TUmVzb2x2ZXI6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0
PFhQYXRoTlNSZXNvbHZlcj4ocDEsc3RhdGljX2Nhc3Q8WFBhdGhOU1Jlc29sdmVyOjpQcml2YXRl
ICo+KGQpKTsKIH0KQEAgLTQxMjIsMTIgKzQxMjIsMTIgQEAgYm9vbCBYUGF0aE5hbWVzcGFjZTo6
aGFzUHJvcGVydHkoRXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgWFBhdGhO
YW1lc3BhY2U6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhOYW1l
c3BhY2U6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdl
dFZhbHVlPFhQYXRoTmFtZXNwYWNlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAK
LVZhbHVlIFhQYXRoTmFtZXNwYWNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlhQYXRoTmFtZXNwYWNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6
OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDE0MiwxMCArNDE0
MiwxMCBAQCBib29sIFhQYXRoTmFtZXNwYWNlOjpwdXQoUFVUX01FVEhPRF9BUkdTCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1PYmplY3QgWFBhdGhOYW1lc3BhY2U6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpYUGF0aE5hbWVzcGFjZTo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqWFBhdGhOYW1lc3Bh
Y2U6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDE1Myw3ICs0MTUzLDcgQEAgT2Jq
ZWN0SW1wICpYUGF0aE5hbWVzcGFjZTo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9N
UldCcmlkZ2U8WFBhdGhOYW1lc3BhY2U+KHAxLHN0YXRpY19jYXN0PFhQYXRoTmFtZXNwYWNlOjpQ
cml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgWFBhdGhOYW1lc3BhY2U6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhOYW1lc3BhY2U6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFhQYXRoTmFtZXNwYWNlPihw
MSxzdGF0aWNfY2FzdDxYUGF0aE5hbWVzcGFjZTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC00MTYy
LDEyICs0MTYyLDEyIEBAIGJvb2wgWFBhdGhSZXN1bHQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAK
IHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmWFBhdGhSZXN1
bHQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3Qg
cHJvdG8gPSBYUGF0aFJlc3VsdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBYUGF0aFJl
c3VsdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFhQYXRoUmVzdWx0Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoUmVzdWx0OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8WFBhdGhSZXN1bHRQ
cm90b0Z1bmMsWFBhdGhSZXN1bHQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAg
LTQxOTAsMTggKzQxOTAsMTggQEAgWFBhdGhSZXN1bHQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5o
ZXJpdAogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIFhQYXRoUmVzdWx0OjpudWxsOwogfQogCi1WYWx1
ZSBYUGF0aFJlc3VsdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpYUGF0aFJlc3VsdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
LSAgICBPYmplY3QgcHJvdG8gPSBYUGF0aFJlc3VsdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihw
cm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9i
amVjdEltcCAqcHJvdG8gPSBYUGF0aFJlc3VsdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90
by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9V
TlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFhQYXRoUmVz
dWx0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqWFBhdGhSZXN1
bHQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
WFBhdGhSZXN1bHRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpYUGF0aFJlc3Vs
dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00MjA5LDcgKzQyMDksNyBAQCBPYmpl
Y3RJbXAgKlhQYXRoUmVzdWx0OjpicmlkZ2UoRXhlY1N0YXRlCiAgICAgcmV0dXJuIG5ldyBET01C
cmlkZ2U8WFBhdGhSZXN1bHQ+KHAxLHN0YXRpY19jYXN0PFhQYXRoUmVzdWx0OjpQcml2YXRlICo+
KGQpKTsKIH0KIAotVmFsdWUgWFBhdGhSZXN1bHQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqWFBhdGhSZXN1bHQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFhQYXRoUmVzdWx0PihwMSxzdGF0aWNfY2FzdDxYUGF0
aFJlc3VsdDo6UHJpdmF0ZSAqPihkKSk7CiB9CkluZGV4OiBrZG9tL2VjbWEvRE9NQnJpZGdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL0RPTUJy
aWRnZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Vj
bWEvRE9NQnJpZGdlLmgKLS0tIGtkb20vZWNtYS9ET01CcmlkZ2UuaAk5IEp1bCAyMDA1IDA2OjUz
OjU4IC0wMDAwCTEuMQorKysga2RvbS9lY21hL0RPTUJyaWRnZS5oCTggQXVnIDIwMDUgMDg6MjQ6
MTYgLTAwMDAKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEtKUwogewotCWNsYXNzIFZh
bHVlOworCWNsYXNzIFZhbHVlSW1wOwogCWNsYXNzIFVTdHJpbmc7CiAJY2xhc3MgRXhlY1N0YXRl
OwogfTsKQEAgLTYxLDIwICs2MSwyMCBAQCBuYW1lc3BhY2UgS0RPTQogCiAJCXR5cGVuYW1lIFQ6
OlByaXZhdGUgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGw7IH0KIAotCQl2aXJ0dWFsIEtK
Uzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIg
JnByb3BlcnR5TmFtZSkgY29uc3QKKwkJdmlydHVhbCBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25z
dAogCQl7CiAJCQlrZERlYnVnKDI2MDA0KSA8PCAiRE9NQnJpZGdlOjpnZXQoKSwgIiA8PCBwcm9w
ZXJ0eU5hbWUucXN0cmluZygpIDw8ICIgTmFtZTogIiA8PCBjbGFzc0luZm8oKS0+Y2xhc3NOYW1l
IDw8ICIgT2JqZWN0OiAiIDw8IHRoaXMtPm1faW1wbCA8PCBlbmRsOwogCiAJCQkvLyBMb29rIGZv
ciBzdGFuZGFyZCBwcm9wZXJ0aWVzIChlLmcuIHRob3NlIGluIHRoZSBoYXNodGFibGVzKQogCQkJ
VCBvYmoobV9pbXBsKTsKLQkJCUtKUzo6VmFsdWUgdmFsID0gb2JqLmdldChleGVjLCBwcm9wZXJ0
eU5hbWUsIHRoaXMpOworCQkJS0pTOjpWYWx1ZUltcCAqdmFsID0gb2JqLmdldChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHRoaXMpOwogCi0JCQlpZih2YWwudHlwZSgpICE9IEtKUzo6VW5kZWZpbmVkVHlw
ZSkKKwkJCWlmKHZhbC0+dHlwZSgpICE9IEtKUzo6VW5kZWZpbmVkVHlwZSkKIAkJCQlyZXR1cm4g
dmFsOwogCiAJCQkvLyBOb3QgZm91bmQgLT4gZm9yd2FyZCB0byBPYmplY3RJbXAuCiAJCQl2YWwg
PSBLSlM6Ok9iamVjdEltcDo6Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0JCQlpZih2YWwudHlw
ZSgpID09IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJCWlmKHZhbC0+dHlwZSgpID09IEtKUzo6VW5k
ZWZpbmVkVHlwZSkKIAkJCQlrZERlYnVnKDI2MDA0KSA8PCAiV0FSTklORzogIiA8PCBwcm9wZXJ0
eU5hbWUucXN0cmluZygpIDw8ICIgbm90IGZvdW5kIGluLi4uIE5hbWU6ICIgPDwgY2xhc3NJbmZv
KCktPmNsYXNzTmFtZSA8PCAiIE9iamVjdDogIiA8PCBtX2ltcGwgPDwgIiBvbiBsaW5lIDogIiA8
PCBleGVjLT5jb250ZXh0KCkuY3VyU3RtdEZpcnN0TGluZSgpIDw8IGVuZGw7CiAKIAkJCXJldHVy
biB2YWw7CkBAIC0xMDUsNyArMTA1LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6CiAJCURP
TVJXQnJpZGdlKEtKUzo6RXhlY1N0YXRlICpleGVjLCB0eXBlbmFtZSBUOjpQcml2YXRlICppbXBs
KSA6IERPTUJyaWRnZTxUPihleGVjLCBpbXBsKSB7IH0KIAotCQl2aXJ0dWFsIHZvaWQgcHV0KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwg
Y29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKQorCQl2aXJ0dWFsIHZvaWQgcHV0KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwg
S0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogCQl7CiAvLwkJCWlmKCEoYXR0ciAmIEtK
Uzo6SW50ZXJuYWwpKQogCQkJa2REZWJ1ZygyNjAwNCkgPDwgIkRPTVJXQnJpZGdlOjpwdXQoKSwg
IiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8ICIgTmFtZTogIiA8PCB0aGlzLT5jbGFzc0lu
Zm8oKS0+Y2xhc3NOYW1lIDw8ICIgT2JqZWN0OiAiIDw8IHRoaXMtPm1faW1wbCA8PCBlbmRsOwpA
QCAtMTI5LDE5ICsxMjksMTkgQEAgbmFtZXNwYWNlIEtET00KIAogCQlUICppbXBsKCkgY29uc3Qg
eyByZXR1cm4gbV9pbXBsOyB9CiAKLQkJdmlydHVhbCBLSlM6OlZhbHVlIGdldChLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CisJ
CXZpcnR1YWwgS0pTOjpWYWx1ZUltcCAqZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBL
SlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKIAkJewogCQkJa2REZWJ1ZygyNjAw
NCkgPDwgIkRPTUJyaWRnZUN0b3I6OmdldCgpLCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkg
PDwgIiBOYW1lOiAiIDw8IGNsYXNzSW5mbygpLT5jbGFzc05hbWUgPDwgIiBPYmplY3Q6ICIgPDwg
dGhpcy0+bV9pbXBsIDw8IGVuZGw7CiAKIAkJCS8vIExvb2sgZm9yIHN0YW5kYXJkIHByb3BlcnRp
ZXMgKGUuZy4gdGhvc2UgaW4gdGhlIGhhc2h0YWJsZXMpCi0JCQlLSlM6OlZhbHVlIHZhbCA9IG1f
aW1wbC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcyk7CisJCQlLSlM6OlZhbHVlSW1wICp2
YWwgPSBtX2ltcGwtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMpOwogCi0JCQlpZih2YWwu
dHlwZSgpICE9IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJCWlmKHZhbC0+dHlwZSgpICE9IEtKUzo6
VW5kZWZpbmVkVHlwZSkKIAkJCQlyZXR1cm4gdmFsOwogCiAJCQkvLyBOb3QgZm91bmQgLT4gZm9y
d2FyZCB0byBPYmplY3RJbXAuCiAJCQl2YWwgPSBLSlM6Ok9iamVjdEltcDo6Z2V0KGV4ZWMsIHBy
b3BlcnR5TmFtZSk7Ci0JCQlpZih2YWwudHlwZSgpID09IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJ
CWlmKHZhbC0+dHlwZSgpID09IEtKUzo6VW5kZWZpbmVkVHlwZSkKIAkJCQlrZERlYnVnKDI2MDA0
KSA8PCAiV0FSTklORzogIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8ICIgbm90IGZvdW5k
IGluLi4uIE5hbWU6ICIgPDwgY2xhc3NJbmZvKCktPmNsYXNzTmFtZSA8PCAiIE9iamVjdDogIiA8
PCBtX2ltcGwgPDwgIiBvbiBsaW5lIDogIiA8PCBleGVjLT5jb250ZXh0KCkuY3VyU3RtdEZpcnN0
TGluZSgpIDw8IGVuZGw7CiAKIAkJCXJldHVybiB2YWw7CkluZGV4OiBrZG9tL2VjbWEvRE9NTG9v
a3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21h
L0RPTUxvb2t1cC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBr
ZG9tL2VjbWEvRE9NTG9va3VwLmgKLS0tIGtkb20vZWNtYS9ET01Mb29rdXAuaAk3IEF1ZyAyMDA1
IDA2OjE3OjQ0IC0wMDAwCTEuNAorKysga2RvbS9lY21hL0RPTUxvb2t1cC5oCTggQXVnIDIwMDUg
MDg6MjQ6MTYgLTAwMDAKQEAgLTQ0LDEyICs0NCwxMiBAQCBwdWJsaWM6IFwKICAgICBib29sIGhh
c1Byb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSkgY29uc3Q7IFwKICAgICBcCiAgICAgLyogZ2V0KCkgbWV0aG9kLCBjYWxsZWQg
YnkgRE9NQnJpZGdlOjpnZXQgKi8gXAotICAgIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpP
YmplY3RJbXAqIGJyaWRnZSkgY29uc3Q7IFwKKyAgICBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25z
dCBLSlM6Ok9iamVjdEltcCogYnJpZGdlKSBjb25zdDsgXAogICAgIFwKICAgICAvKiBDYWxsZWQg
YnkgbG9va3VwR2V0KCkuIEF1dG8tZ2VuZXJhdGVkLiBGb3J3YXJkcyB0byB0aGUgcGFyZW50IHdo
aWNoIGhhcyB0aGUgZ2l2ZW4gcHJvcGVydHkuICovIFwKLSAgICBLSlM6OlZhbHVlIGdldEluUGFy
ZW50cyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUsIGNvbnN0IEtKUzo6T2JqZWN0SW1wKiBicmlkZ2UpIGNvbnN0OyBcCisgICAgS0pTOjpW
YWx1ZUltcCAqZ2V0SW5QYXJlbnRzKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6Oklk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpPYmplY3RJbXAqIGJyaWRnZSkgY29u
c3Q7IFwKICAgICBcCi0gICAgS0pTOjpPYmplY3QgcHJvdG90eXBlKEtKUzo6RXhlY1N0YXRlICpl
eGVjKSBjb25zdDtcCisgICAgS0pTOjpPYmplY3RJbXAgKnByb3RvdHlwZShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYykgY29uc3Q7XAogCVwKIAlLSlM6Ok9iamVjdEltcCAqYnJpZGdlKEtKUzo6RXhlY1N0
YXRlICopIGNvbnN0OyBcCiAgICAgXApAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6IFwKICAqLwog
I2RlZmluZSBLRE9NX0dFVCBcCiAgICAgS0RPTV9HRVRfQ09NTU9OIFwKLSAgICBLSlM6OlZhbHVl
IGNhY2hlKEtKUzo6RXhlY1N0YXRlICpleGVjKSBjb25zdDsgCisgICAgS0pTOjpWYWx1ZUltcCAq
Y2FjaGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OyAKIAogLyoqCiAgKiBTYW1lIGFzIEtE
T01fR0VULCBidXQgZm9yIGJhc2UgY2xhc3NlcyhrYWx5cHR1cyBoZWxwcyBmaW5kaW5nIHRoZW0p
LiBUaGUgCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzogXAogICovCiAjZGVmaW5lIEtET01fQkFT
RUNMQVNTX0dFVCBcCiAgICAgS0RPTV9HRVRfQ09NTU9OIFwKLSAgICB2aXJ0dWFsIEtKUzo6VmFs
dWUgY2FjaGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OyAKKyAgICB2aXJ0dWFsIEtKUzo6
VmFsdWVJbXAgKmNhY2hlKEtKUzo6RXhlY1N0YXRlICpleGVjKSBjb25zdDsgCiAKIC8qKgogICog
Rm9yIHJlYWQtd3JpdGUgY2xhc3NlcyBvbmx5LCBpLmUuIHRob3NlIHdoaWNoIHN1cHBvcnQgcHV0
KCkuCkBAIC03OSwxMSArNzksMTEgQEAgcHVibGljOiBcCiAgICAgXAogICAgIC8qIHB1dCgpIG1l
dGhvZCwgY2FsbGVkIGJ5IERPTUJyaWRnZTo6cHV0ICovIFwKICAgICBib29sIHB1dChLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFwKLQkJ
CSBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOyBcCisJCQkgS0pTOjpWYWx1ZUlt
cCAqdmFsdWUsIGludCBhdHRyKTsgXAogCVwKICAgICAvKiBDYWxsZWQgYnkgbG9va3VwUHV0LiBB
dXRvLWdlbmVyYXRlZC4gTG9va3MgaW4gaGFzaHRhYmxlLCBmb3J3YXJkcyB0byBwYXJlbnRzLiAq
LyBcCiAgICAgYm9vbCBwdXRJblBhcmVudHMoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtK
Uzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBcCi0JCQkJCSAgY29uc3QgS0pTOjpWYWx1ZSAm
dmFsdWUsIGludCBhdHRyKTsKKwkJCQkJICBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIp
OwogCiAvKioKICAqIEZvciBjbGFzc2VzIHdoaWNoIGluaGVyaXQgYSByZWFkLXdyaXRlIGNsYXNz
LCAKQEAgLTkyLDcgKzkyLDcgQEAgcHVibGljOiBcCiAjZGVmaW5lIEtET01fRk9SV0FSRFBVVCBc
CiAgICAgXAogICAgIC8qIHB1dCgpIG1ldGhvZCwgY2FsbGVkIGJ5IERPTUJyaWRnZTo6cHV0ICov
IFwKLSAgICBib29sIHB1dChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7Cisg
ICAgYm9vbCBwdXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAm
cHJvcGVydHlOYW1lLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCiAvKioKICAq
IFVzZWQgaW4gZ2VuZXJhdGVkYXRhLmNwcApAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzogXAog
ICogQHBhcmFtIHA0IGF0dHIKICAqIEBpbnRlcm5hbAogICovCi0jZGVmaW5lIFBVVF9NRVRIT0Rf
QVJHUyBLSlM6OkV4ZWNTdGF0ZSAqcDEsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcDIsIGNvbnN0
IEtKUzo6VmFsdWUgJnAzLCBpbnQgcDQKKyNkZWZpbmUgUFVUX01FVEhPRF9BUkdTIEtKUzo6RXhl
Y1N0YXRlICpwMSwgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwMiwgS0pTOjpWYWx1ZUltcCAqcDMs
IGludCBwNAogCiBuYW1lc3BhY2UgS0RPTQogewpAQCAtMTM3LDcgKzEzNyw3IEBAIG5hbWVzcGFj
ZSBLRE9NCiAJICogQHBhcmFtIHRoaXNPYmogInRoaXMiCiAJICovCiAJdGVtcGxhdGU8Y2xhc3Mg
RnVuY0ltcCwgY2xhc3MgVGhpc0ltcD4KLQlpbmxpbmUgS0pTOjpWYWx1ZSBsb29rdXBHZXQoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsCisJaW5saW5lIEtKUzo6VmFsdWVJbXAgKmxvb2t1cEdldChLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywKIAkJCQkJCQkJY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUsCiAJCQkJCQkJCWNvbnN0IEtKUzo6SGFzaFRhYmxlICp0YWJsZSwKIAkJCQkJCQkJY29u
c3QgVGhpc0ltcCAqdGhpc09iaiwgLy8gdGhlICdpbXBsJyBvYmplY3QKQEAgLTE2NCw3ICsxNjQs
NyBAQCBuYW1lc3BhY2UgS0RPTQogCSAqIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiBsb29rdXBHZXQg
cmVtb3ZlcyB0aGUgbmVlZCBmb3IgYSBGdW5jSW1wIGNsYXNzLgogCSAqLwogCXRlbXBsYXRlIDxj
bGFzcyBUaGlzSW1wPgotCWlubGluZSBLSlM6OlZhbHVlIGxvb2t1cEdldFZhbHVlKEtKUzo6RXhl
Y1N0YXRlICpleGVjLAorCWlubGluZSBLSlM6OlZhbHVlSW1wICpsb29rdXBHZXRWYWx1ZShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywKIAkJCQkJCQkJCSBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwKIAkJCQkJCQkJCSBjb25zdCBLSlM6Okhhc2hUYWJsZSAqdGFibGUsCiAJCQkJCQkJ
CQkgY29uc3QgVGhpc0ltcCAqdGhpc09iaiwgLy8gdGhlICdpbXBsJyBvYmplY3QKQEAgLTE5Myw3
ICsxOTMsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXRlbXBsYXRlIDxjbGFzcyBUaGlzSW1wPgogCWlu
bGluZSBib29sIGxvb2t1cFB1dChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywKIAkJCQkJCSAgY29uc3Qg
S0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0JCQkJCQkgIGNvbnN0IEtKUzo6VmFsdWUg
JnZhbHVlLAorCQkJCQkJICBLSlM6OlZhbHVlSW1wICp2YWx1ZSwKIAkJCQkJCSAgaW50IGF0dHIs
CiAJCQkJCQkgIGNvbnN0IEtKUzo6SGFzaFRhYmxlICp0YWJsZSwKIAkJCQkJCSAgVGhpc0ltcCAq
dGhpc09iaikKQEAgLTIyMSw3ICsyMjEsNyBAQCBuYW1lc3BhY2UgS0RPTQogCiAvLyBVc2VmdWwg
bWFjcm9zIGZvciBkZWFsaW5nIHdpdGggZWNtYSBjb25zdHJ1Y3RvcnMgKGVudW0gdHlwZXMsIGZv
ciBleGFtcGxlKQogI2RlZmluZSBFQ01BX0lNUExFTUVOVF9DT05TVFJVQ1RPUihTcGFjZSwgQ2xh
c3NOYW1lLCBDbGFzcykgXAotIEtKUzo6VmFsdWUgQ2xhc3NOYW1lOjpnZXQoS0pTOjpFeGVjU3Rh
dGUgKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6T2Jq
ZWN0SW1wICopIGNvbnN0IHsgXAorIEtKUzo6VmFsdWVJbXAgKkNsYXNzTmFtZTo6Z2V0KEtKUzo6
RXhlY1N0YXRlICosIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBL
SlM6Ok9iamVjdEltcCAqKSBjb25zdCB7IFwKICBjb25zdCBLSlM6Okhhc2hFbnRyeSAqZW50cnkg
PSBLSlM6Okxvb2t1cDo6ZmluZEVudHJ5KCZzX2hhc2hUYWJsZSwgcHJvcGVydHlOYW1lKTsgXAog
IGlmKGVudHJ5KSBcCiAgICByZXR1cm4gS0pTOjpOdW1iZXIoZW50cnktPnZhbHVlKTsgXApAQCAt
MjMwLDEyICsyMzAsMTEgQEAgbmFtZXNwYWNlIEtET00KICBib29sIENsYXNzTmFtZTo6aGFzUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUpIGNvbnN0IHsgXAogICByZXR1cm4gS0pTOjpMb29rdXA6OmZpbmRFbnRyeSgmc19oYXNoVGFi
bGUsIHByb3BlcnR5TmFtZSk7IFwKICB9IFwKLSBLSlM6Ok9iamVjdCBDbGFzc05hbWU6OnByb3Rv
dHlwZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgeyBcCi0gIGlmKGV4ZWMpIHJldHVybiBl
eGVjLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7IFwKLSAgcmV0dXJu
IEtKUzo6T2JqZWN0OjpkeW5hbWljQ2FzdChLSlM6Ok51bGwoKSk7IFwKKyBLSlM6Ok9iamVjdElt
cCAqQ2xhc3NOYW1lOjpwcm90b3R5cGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0IHsgXAor
ICByZXR1cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOyBc
CiAgfSBcCiAgY29uc3QgS0pTOjpDbGFzc0luZm8gQ2xhc3NOYW1lOjpzX2NsYXNzSW5mbyA9IHsg
Q2xhc3MgIkNvbnN0cnVjdG9yIiwgMCwgJnNfaGFzaFRhYmxlLCAwIH07IFwKLSBLSlM6OlZhbHVl
IFNwYWNlOjpnZXQjI0NsYXNzTmFtZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYykgeyBcCisgS0pTOjpW
YWx1ZUltcCAqU3BhY2U6OmdldCMjQ2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlICpleGVjKSB7IFwK
ICAgcmV0dXJuIEtET006OmNhY2hlR2xvYmFsQnJpZGdlPENsYXNzTmFtZT4oZXhlYywgIltbIiBD
bGFzcyAiLmNvbnN0cnVjdG9yXV0iKTsgXAogIH0KICAKQEAgLTI0NSwxMyArMjQ0LDEzIEBAIG5h
bWVzcGFjZSBLRE9NCiAgIGNsYXNzIENsYXNzTmFtZSA6IHB1YmxpYyBLSlM6Ok9iamVjdEltcCB7
IFwKICAgcHVibGljOiBcCiAgICAgQ2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlICpleGVjKSA6IEtK
Uzo6T2JqZWN0SW1wKCkge30gXAotICAgIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpPYmpl
Y3RJbXAgKm9iaikgY29uc3Q7IFwKKyAgICBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6
Ok9iamVjdEltcCAqb2JqKSBjb25zdDsgXAogICAgIGJvb2wgaGFzUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsg
XAotICAgIEtKUzo6T2JqZWN0IHByb3RvdHlwZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7
IFwKKyAgICBLSlM6Ok9iamVjdEltcCAqcHJvdG90eXBlKEtKUzo6RXhlY1N0YXRlICpleGVjKSBj
b25zdDsgXAogICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBzX2NsYXNzSW5mbzsgXAog
ICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgS0pTOjpIYXNoVGFibGUgc19oYXNoVGFibGU7IFwKICAg
fTsgXAotICBLSlM6OlZhbHVlIGdldCMjQ2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlICpleGVjKTsg
XAorICBLSlM6OlZhbHVlSW1wICpnZXQjI0NsYXNzTmFtZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYyk7
IFwKICAgfQogCiAvLyBTYW1lIGFzIGtqcycgREVGSU5FX1BST1RPVFlQRSwgYnV0IHdpdGggYSBw
b2ludGVyIHRvIHRoZSBoYXNodGFibGUgdG9vLCBhbmQgbm8gQ2xhc3NOYW1lIGhlcmUKQEAgLTI2
MCwxMiArMjU5LDEyIEBAIG5hbWVzcGFjZSBLRE9NCiAgIG5hbWVzcGFjZSBTcGFjZSB7IFwKICAg
Y2xhc3MgQ2xhc3NQcm90byA6IHB1YmxpYyBLSlM6Ok9iamVjdEltcCB7IFwKICAgcHVibGljOiBc
Ci0gICAgc3RhdGljIEtKUzo6T2JqZWN0IHNlbGYoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpOyBcCisg
ICAgc3RhdGljIEtKUzo6T2JqZWN0SW1wICpzZWxmKEtKUzo6RXhlY1N0YXRlICpleGVjKTsgXAog
ICAgIENsYXNzUHJvdG8oIEtKUzo6RXhlY1N0YXRlICpleGVjICkgXAogICAgICAgOiBLSlM6Ok9i
amVjdEltcCggZXhlYy0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpICkg
e30gXAogICAgIHZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZpbmZvOyB9IFwKICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gaW5m
bzsgXAotICAgIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6
OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7IFwKKyAgICBLSlM6OlZhbHVlSW1wICpn
ZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlO
YW1lKSBjb25zdDsgXAogICAgIGJvb2wgaGFzUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsgXAogICAgIFwKICAg
ICBzdGF0aWMgY29uc3Qgc3RydWN0IEtKUzo6SGFzaFRhYmxlIHNfaGFzaFRhYmxlOyBcCkBAIC0y
NzUsOSArMjc0LDkgQEAgbmFtZXNwYWNlIEtET00KIC8vIHNhbWUgYXMgSU1QTEVNRU5UX1BST1RP
VFlQRSBidXQgaW4gdGhlIEtET00gbmFtZXNwYWNlLCBhbmQgd2l0aCBDbGFzc05hbWUgaGVyZQog
Ly8gc28gdGhhdCBLRE9NX0RFRklORV9QUk9UT1RZUEUgY2FuIGJlIHB1dCBpbiBhIGhlYWRlciBm
aWxlICgnaW5mbycgZGVmaW5lZCBoZXJlKQogI2RlZmluZSBFQ01BX0lNUExFTUVOVF9QUk9UT1RZ
UEUoU3BhY2UsQ2xhc3NOYW1lLENsYXNzUHJvdG8sQ2xhc3NGdW5jKSBcCi0gICAgS0pTOjpWYWx1
ZSBTcGFjZTo6Q2xhc3NQcm90bzo6Z2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6
OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QgXAorICAgIEtKUzo6VmFsdWVJbXAgKlNw
YWNlOjpDbGFzc1Byb3RvOjpnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRl
bnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdCBcCiAgICAgeyBcCi0gICAgICAgIC8qIEtKUzo6
VmFsdWUgcmVzdWx0OyBcCisgICAgICAgIC8qIEtKUzo6VmFsdWVJbXAgKnJlc3VsdDsgXAogICAg
ICAgICBpZiAoS0pTOjpsb29rdXBHZXRPd25GdW5jdGlvbjxDbGFzc0Z1bmMsS0pTOjpPYmplY3RJ
bXA+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJnNfaGFzaFRhYmxlLCB0aGlzLCByZXN1bHQpKSBcCiAg
ICAgICAgIHJldHVybiByZXN1bHQ7ICAqLyBcCiAgICAgICAgIHJldHVybiBLSlM6OlVuZGVmaW5l
ZCgpOyBcCkBAIC0yODcsNyArMjg2LDcgQEAgbmFtZXNwYWNlIEtET00KICAgICB7IC8qc3R1cGlk
IGJ1dCB3ZSBuZWVkIHRoaXMgdG8gaGF2ZSBhIGNvbW1vbiBtYWNybyBmb3IgdGhlIGRlY2xhcmF0
aW9uKi8gXAogICAgICAgcmV0dXJuIEtKUzo6T2JqZWN0SW1wOjpoYXNQcm9wZXJ0eShleGVjLCBw
cm9wZXJ0eU5hbWUpOyBcCiAgICAgfSBcCi0gICAgS0pTOjpPYmplY3QgU3BhY2U6OkNsYXNzUHJv
dG86OnNlbGYoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIFwKKyAgICBLSlM6Ok9iamVjdEltcCAqU3Bh
Y2U6OkNsYXNzUHJvdG86OnNlbGYoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIFwKICAgICB7IFwKICAg
ICAgIHJldHVybiBLSlM6OmNhY2hlR2xvYmFsT2JqZWN0PENsYXNzUHJvdG8+KCBleGVjLCAiW1si
IENsYXNzTmFtZSAiLnByb3RvdHlwZV1dIiApOyBcCiAgICAgfSBcCkBAIC0yOTksNyArMjk4LDYg
QEAgbmFtZXNwYWNlIEtET00KICAgcHVibGljOiBcCiAgICAgQ2xhc3NGdW5jKEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgaSwgaW50IGxlbikgXAogICAgICAgIDogS0pTOjpPYmplY3RJbXAoIC8q
cHJvdG8/ICovICksIGlkKGkpIHsgXAotICAgICAgIEtKUzo6VmFsdWUgcHJvdGVjdCh0aGlzKTsg
XAogICAgICAgIHB1dChleGVjLCAibGVuZ3RoIiwgS0pTOjpOdW1iZXIobGVuKSwgS0pTOjpEb250
RGVsZXRlIHwgS0pTOjpSZWFkT25seSB8IEtKUzo6RG9udEVudW0pOyBcCiAgICAgfSBcCiAgICAg
LyoqIFVzZWQgYnkgY2FsbCgpIHRvIGNoZWNrIHRoZSB0eXBlIG9mIHRoaXNPYmouIEdlbmVyYXRl
ZCBjb2RlICovIFwKQEAgLTMwOCw3ICszMDYsNyBAQCBuYW1lc3BhY2UgS0RPTQogICAgIHZpcnR1
YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gXAogCVwKICAg
ICAvKiogWW91IG5lZWQgdG8gaW1wbGVtZW50IHRoYXQgb25lICovIFwKLSAgICB2aXJ0dWFsIEtK
Uzo6VmFsdWUgY2FsbChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpPYmplY3QgJnRoaXNPYmos
IGNvbnN0IEtKUzo6TGlzdCAmYXJncyk7IFwKKyAgICB2aXJ0dWFsIEtKUzo6VmFsdWVJbXAgKmNh
bGwoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBL
SlM6Okxpc3QgJmFyZ3MpOyBcCiAJXAogICBwcml2YXRlOiBcCiAgICAgaW50IGlkOyBcCkBAIC0z
MTksMTAgKzMxNywxMCBAQCBuYW1lc3BhY2UgS0RPTQogCiAvLyBUbyBiZSB1c2VkIHdoZW4gY2Fz
dGluZyB0aGUgdHlwZSBvZiBhbiBhcmd1bWVudAogI2RlZmluZSBLRE9NX0NIRUNLKENsYXNzTmFt
ZSwgdGhlT2JqKSBcCi0gICAgQ2xhc3NOYW1lIG9iaiA9IGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8
S0pTOjpPYmplY3RJbXAgKj4odGhlT2JqLmltcCgpKSk7IFwKKyAgICBDbGFzc05hbWUgb2JqID0g
Y2FzdChleGVjLCB0aGVPYmopOyBcCiAgICAgaWYob2JqID09IENsYXNzTmFtZTo6bnVsbCkgeyBc
Ci0JICAgIGtkRGVidWcoMjYwMDQpIDw8IGtfZnVuY2luZm8gPDwgIiBXcm9uZyBvYmplY3QgdHlw
ZTogZXhwZWN0ZWQgIiA8PCBDbGFzc05hbWU6OnNfY2xhc3NJbmZvLmNsYXNzTmFtZSA8PCAiIGdv
dCAiIDw8IHRoaXNPYmouY2xhc3NJbmZvKCktPmNsYXNzTmFtZSA8PCBlbmRsOyBcCi0gICAgICAg
IE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsgXAorCSAgICBrZERl
YnVnKDI2MDA0KSA8PCBrX2Z1bmNpbmZvIDw8ICIgV3Jvbmcgb2JqZWN0IHR5cGU6IGV4cGVjdGVk
ICIgPDwgQ2xhc3NOYW1lOjpzX2NsYXNzSW5mby5jbGFzc05hbWUgPDwgIiBnb3QgIiA8PCB0aGlz
T2JqLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lIDw8IGVuZGw7IFwKKyAgICAgICAgT2JqZWN0SW1w
ICplcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsgXAogICAgICAgCWV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOyBcCiAJICAgIHJldHVybiBlcnI7IFwKICAgICB9CkBAIC0zMzUsOCAr
MzMzLDggQEAgbmFtZXNwYWNlIEtET00KIC8vIEhlbHBlcnMgdG8gaGlkZSBleGNlcHRpb24gc3R1
ZmYuLi4KIC8vIHVzZWQgd2l0aGluIGdldC9wdXRWYWx1ZVByb3ByZXR5CiAjZGVmaW5lIEtET01f
RU5URVJfU0FGRSB0cnkgewotI2RlZmluZSBLRE9NX0xFQVZFX1NBRkUoRXhjZXB0aW9uKSB9IGNh
dGNoKEV4Y2VwdGlvbjo6UHJpdmF0ZSAqZSkgeyBLSlM6Ok9iamVjdCBlcnIgPSBLSlM6OkVycm9y
OjpjcmVhdGUoZXhlYywgS0pTOjpHZW5lcmFsRXJyb3IsIFFTdHJpbmc6OmZyb21MYXRpbjEoIiUx
ICUyIikuYXJnKFFTdHJpbmc6OmZyb21MYXRpbjEoRXhjZXB0aW9uKGUpLnNfY2xhc3NJbmZvLmNs
YXNzTmFtZSkpLmFyZyhRU3RyaW5nOjpudW1iZXIoZS0+Y29kZSgpKSkubGF0aW4xKCkpOyBlcnIu
cHV0KGV4ZWMsICJjb2RlIiwgS0pTOjpOdW1iZXIoZS0+Y29kZSgpKSk7IGV4ZWMtPnNldEV4Y2Vw
dGlvbihlcnIpOyB9Ci0jZGVmaW5lIEtET01fTEVBVkVfQ0FMTF9TQUZFKEV4Y2VwdGlvbikgfSBj
YXRjaChFeGNlcHRpb246OlByaXZhdGUgKmUpIHsgS0pTOjpPYmplY3QgZXJyID0gS0pTOjpFcnJv
cjo6Y3JlYXRlKGV4ZWMsIEtKUzo6R2VuZXJhbEVycm9yLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIl
MSAlMiIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKEV4Y2VwdGlvbihlKS5zX2NsYXNzSW5mby5j
bGFzc05hbWUpKS5hcmcoUVN0cmluZzo6bnVtYmVyKGUtPmNvZGUoKSkpLmxhdGluMSgpKTsgZXJy
LnB1dChleGVjLCAiY29kZSIsIEtKUzo6TnVtYmVyKGUtPmNvZGUoKSkpOyBleGVjLT5zZXRFeGNl
cHRpb24oZXJyKTsgcmV0dXJuIGVycjsgfQorI2RlZmluZSBLRE9NX0xFQVZFX1NBRkUoRXhjZXB0
aW9uKSB9IGNhdGNoKEV4Y2VwdGlvbjo6UHJpdmF0ZSAqZSkgeyBLSlM6Ok9iamVjdEltcCAqZXJy
ID0gS0pTOjpFcnJvcjo6Y3JlYXRlKGV4ZWMsIEtKUzo6R2VuZXJhbEVycm9yLCBRU3RyaW5nOjpm
cm9tTGF0aW4xKCIlMSAlMiIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKEV4Y2VwdGlvbihlKS5z
X2NsYXNzSW5mby5jbGFzc05hbWUpKS5hcmcoUVN0cmluZzo6bnVtYmVyKGUtPmNvZGUoKSkpLmxh
dGluMSgpKTsgZXJyLT5wdXQoZXhlYywgImNvZGUiLCBLSlM6Ok51bWJlcihlLT5jb2RlKCkpKTsg
ZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7IH0KKyNkZWZpbmUgS0RPTV9MRUFWRV9DQUxMX1NBRkUo
RXhjZXB0aW9uKSB9IGNhdGNoKEV4Y2VwdGlvbjo6UHJpdmF0ZSAqZSkgeyBLSlM6Ok9iamVjdElt
cCAqZXJyID0gS0pTOjpFcnJvcjo6Y3JlYXRlKGV4ZWMsIEtKUzo6R2VuZXJhbEVycm9yLCBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCIlMSAlMiIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKEV4Y2VwdGlv
bihlKS5zX2NsYXNzSW5mby5jbGFzc05hbWUpKS5hcmcoUVN0cmluZzo6bnVtYmVyKGUtPmNvZGUo
KSkpLmxhdGluMSgpKTsgZXJyLT5wdXQoZXhlYywgImNvZGUiLCBLSlM6Ok51bWJlcihlLT5jb2Rl
KCkpKTsgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7IHJldHVybiBlcnI7IH0KIAogLy8gSnVzdCBh
IG1hcmtlciBmb3Iga2FseXB0dXMKICNkZWZpbmUgS0RPTV9DQVNUIDsKSW5kZXg6IGtkb20vZWNt
YS9FY21hLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9t
L2VjbWEvRWNtYS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtkb20vZWNtYS9FY21hLmNwcAotLS0ga2RvbS9lY21hL0VjbWEuY3BwCTkgSnVsIDIwMDUgMDY6
NTM6NTggLTAwMDAJMS4xCisrKyBrZG9tL2VjbWEvRWNtYS5jcHAJOCBBdWcgMjAwNSAwODoyNDox
NyAtMDAwMApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgRWNtYTo6c2V0dXAoQ0RGSW50ZXJmYWNl
ICppbnRlcmZhY2UKIAlkLT5lY21hSW50ZXJmYWNlID0gaW50ZXJmYWNlLT5lY21hSW50ZXJmYWNl
KCk7CiAKIAkvLyBDcmVhdGUgY29kZSBpbnRlcnByZXRlcgotCUtKUzo6T2JqZWN0IGtqc0dsb2Jh
bE9iamVjdChkLT5nbG9iYWxPYmplY3QpOworCUtKUzo6T2JqZWN0SW1wICpranNHbG9iYWxPYmpl
Y3QoZC0+Z2xvYmFsT2JqZWN0KTsKIAlkLT5pbnRlcnByZXRlciA9IG5ldyBTY3JpcHRJbnRlcnBy
ZXRlcihranNHbG9iYWxPYmplY3QsIGQtPmRvY3VtZW50KTsKIAogCS8vIFNldCBvYmplY3QgcHJv
dG90eXBlIGZvciBnbG9iYWwgb2JqZWN0CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBFY21hOjpz
ZXR1cERvY3VtZW50KERvY3VtZW50SW1wbCAqZAogCWRvY3VtZW50LT5kZXJlZigpOyAvLyAnZG9j
T2JqJyBpcyBoZWxkIGluIG1lbW9yeSB1bnRpbCB0aGUgZWNtYSBlbmdpbmUgaXMgZGVzdHJ1Y3Rl
ZC4uLgogfQogCi1LSlM6OkNvbXBsZXRpb24gRWNtYTo6ZXZhbHVhdGUoY29uc3QgS0pTOjpVU3Ry
aW5nICZjb2RlLCBjb25zdCBLSlM6OlZhbHVlICZ0aGlzVikKK0tKUzo6Q29tcGxldGlvbiBFY21h
OjpldmFsdWF0ZShjb25zdCBLSlM6OlVTdHJpbmcgJmNvZGUsIEtKUzo6VmFsdWVJbXAgKnRoaXNW
KQogewogI2lmZGVmIEtKU19WRVJCT1NFCiAJa2REZWJ1Zyg2MDcwKSA8PCAiRWNtYTo6ZXZhbHVh
dGUgIiA8PCBjb2RlLnFzdHJpbmcoKSA8PCBlbmRsOwpAQCAtMTYyLDcgKzE2Miw3IEBAIEtKUzo6
Q29tcGxldGlvbiBFY21hOjpldmFsdWF0ZShjb25zdCBLSlMKIAlyZXR1cm4gZC0+aW50ZXJwcmV0
ZXItPmV2YWx1YXRlKGNvZGUsIHRoaXNWKTsKIH0KIAotS0pTOjpPYmplY3QgRWNtYTo6Z2xvYmFs
T2JqZWN0KCkgY29uc3QKK0tKUzo6T2JqZWN0SW1wICpFY21hOjpnbG9iYWxPYmplY3QoKSBjb25z
dAogewogCXJldHVybiBkLT5pbnRlcnByZXRlci0+Z2xvYmFsT2JqZWN0KCk7CiB9CkBAIC0xODIs
MTEgKzE4MiwxMSBAQCBTY3JpcHRJbnRlcnByZXRlciAqRWNtYTo6aW50ZXJwcmV0ZXIoKSBjCiAJ
cmV0dXJuIGQtPmludGVycHJldGVyOwogfQogCi1LSlM6Ok9iamVjdCBFY21hOjplY21hTGlzdGVu
ZXJUb09iamVjdChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmbGlzdGVu
ZXIpCitLSlM6Ok9iamVjdEltcCAqRWNtYTo6ZWNtYUxpc3RlbmVyVG9PYmplY3QoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWVJbXAgKmxpc3RlbmVyKQogewotCUtKUzo6T2JqZWN0IGxp
c3RlbmVyT2JqZWN0ID0gS0pTOjpPYmplY3Q6OmR5bmFtaWNDYXN0KGxpc3RlbmVyKTsKLQlpZigh
bGlzdGVuZXJPYmplY3QuaXNWYWxpZCgpKQotCQlyZXR1cm4gS0pTOjpPYmplY3QoKTsKKwlpZigh
bGlzdGVuZXItPmlzT2JqZWN0KCkpCisJCXJldHVybiBLSlM6Ok9iamVjdEltcCgpOworICAgICAg
ICBLSlM6Ok9iamVjdEltcCAqbGlzdGVuZXJPYmplY3QgPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVj
dEltcCAqPihsaXN0ZW5lcik7CiAJCiAJLy8gJ2xpc3RlbmVyJyBtYXkgYmUgYSBzaW1wbGUgZWNt
YSBmdW5jdGlvbi4uLgogCWlmKGxpc3RlbmVyT2JqZWN0LmltcGxlbWVudHNDYWxsKCkpCkBAIC0x
OTQsNDUgKzE5NCw0NCBAQCBLSlM6Ok9iamVjdCBFY21hOjplY21hTGlzdGVuZXJUb09iamVjdChL
CiAKIAkvLyAnbGlzdGVuZXInIHByb2JhYmx5IGlzIGFuIEV2ZW50TGlzdGVuZXIsCiAJLy8gb2Jq
ZWN0IGNvbnRhaW5pbmcgYSAnaGFuZGxlRXZlbnQnIGZ1bmN0aW9uLi4uCi0JS0pTOjpWYWx1ZSBo
YW5kbGVFdmVudFZhbHVlID0gbGlzdGVuZXJPYmplY3QuZ2V0KGV4ZWMsIEtKUzo6SWRlbnRpZmll
cigiaGFuZGxlRXZlbnQiKSk7Ci0JS0pTOjpPYmplY3QgaGFuZGxlRXZlbnRPYmplY3QgPSBLSlM6
Ok9iamVjdDo6ZHluYW1pY0Nhc3QoaGFuZGxlRXZlbnRWYWx1ZSk7CisJS0pTOjpWYWx1ZUltcCAq
aGFuZGxlRXZlbnRWYWx1ZSA9IGxpc3RlbmVyT2JqZWN0LT5nZXQoZXhlYywgS0pTOjpJZGVudGlm
aWVyKCJoYW5kbGVFdmVudCIpKTsKKwlpZighaGFuZGxlRXZlbnRWYWx1ZS0+aXNPYmplY3QoKSkK
KwkJcmV0dXJuIEtKUzo6T2JqZWN0SW1wKCk7CisgICAgICAgIEtKUzo6T2JqZWN0SW1wICpoYW5k
bGVFdmVudE9iamVjdCA9IHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wKj4oaGFuZGxlRXZlbnRW
YWx1ZSk7CiAKLQlpZighaGFuZGxlRXZlbnRPYmplY3QuaXNWYWxpZCgpKQotCQlyZXR1cm4gS0pT
OjpPYmplY3QoKTsKLQotCWlmKGhhbmRsZUV2ZW50T2JqZWN0LmltcGxlbWVudHNDYWxsKCkpCisJ
aWYoaGFuZGxlRXZlbnRPYmplY3QtPmltcGxlbWVudHNDYWxsKCkpCiAJCXJldHVybiBoYW5kbGVF
dmVudE9iamVjdDsKIAogCWtkRXJyb3IoKSA8PCBrX2Z1bmNpbmZvIDw8ICIgU3BlY2lmaWVkIGxp
c3RlbmVyIGlzIG5laXRoZXIgYSBmdW5jdGlvbiBub3IgYW4gb2JqZWN0ISIgPDwgZW5kbDsKLQly
ZXR1cm4gS0pTOjpPYmplY3QoKTsKKwlyZXR1cm4gS0pTOjpPYmplY3RJbXAoKTsKIH0KIAotRXZl
bnRMaXN0ZW5lckltcGwgKkVjbWE6OmZpbmRFdmVudExpc3RlbmVyKEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBjb25zdCBLSlM6OlZhbHVlICZsaXN0ZW5lcikKK0V2ZW50TGlzdGVuZXJJbXBsICpFY21h
OjpmaW5kRXZlbnRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAq
bGlzdGVuZXIpCiB7CiAJaWYoIWQpCiAJCXJldHVybiAwOwogCQotCUtKUzo6T2JqZWN0IGxpc3Rl
bmVyT2JqZWN0ID0gZWNtYUxpc3RlbmVyVG9PYmplY3QoZXhlYywgbGlzdGVuZXIpOwotCWlmKCFs
aXN0ZW5lck9iamVjdC5pc1ZhbGlkKCkpCisJS0pTOjpPYmplY3RJbXAgKmxpc3RlbmVyT2JqZWN0
ID0gZWNtYUxpc3RlbmVyVG9PYmplY3QoZXhlYywgbGlzdGVuZXIpOworCWlmKCFsaXN0ZW5lck9i
amVjdC0+aXNWYWxpZCgpKQogCQlyZXR1cm4gMDsKIAkKLQlyZXR1cm4gZC0+ZXZlbnRMaXN0ZW5l
cnNbc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4obGlzdGVuZXJPYmplY3QuaW1wKCkpXTsK
KwlyZXR1cm4gZC0+ZXZlbnRMaXN0ZW5lcnNbc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4o
bGlzdGVuZXJPYmplY3QpXTsKIH0KIAotRXZlbnRMaXN0ZW5lckltcGwgKkVjbWE6OmNyZWF0ZUV2
ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6VmFsdWUgJmxpc3Rl
bmVyKQorRXZlbnRMaXN0ZW5lckltcGwgKkVjbWE6OmNyZWF0ZUV2ZW50TGlzdGVuZXIoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWVJbXAgKmxpc3RlbmVyKQogewogCUV2ZW50TGlzdGVu
ZXJJbXBsICpleGlzdGluZyA9IGZpbmRFdmVudExpc3RlbmVyKGV4ZWMsIGxpc3RlbmVyKTsKIAlp
ZihleGlzdGluZykKIAkJcmV0dXJuIGV4aXN0aW5nOwogCQotCUtKUzo6T2JqZWN0IGxpc3RlbmVy
T2JqZWN0ID0gZWNtYUxpc3RlbmVyVG9PYmplY3QoZXhlYywgbGlzdGVuZXIpOwotCWlmKCFsaXN0
ZW5lck9iamVjdC5pc1ZhbGlkKCkpCisJS0pTOjpPYmplY3RJbXAgKmxpc3RlbmVyT2JqZWN0ID0g
ZWNtYUxpc3RlbmVyVG9PYmplY3QoZXhlYywgbGlzdGVuZXIpOworCWlmKCFsaXN0ZW5lck9iamVj
dC0+aXNWYWxpZCgpKQogCQlyZXR1cm4gMDsKIAogCUV2ZW50TGlzdGVuZXJJbXBsICppID0gbmV3
IEV2ZW50TGlzdGVuZXJJbXBsKCk7CiAJaS0+aW5pdExpc3RlbmVyKGQtPmRvY3VtZW50LCB0cnVl
LCBsaXN0ZW5lck9iamVjdCwgbGlzdGVuZXIsIERPTVN0cmluZygpKTsKIAotCWFkZEV2ZW50TGlz
dGVuZXIoaSwgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4obGlzdGVuZXJPYmplY3QuaW1w
KCkpKTsKKwlhZGRFdmVudExpc3RlbmVyKGksIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+
KGxpc3RlbmVyT2JqZWN0KSk7CiAJcmV0dXJuIGk7CiB9CiAKQEAgLTI1MiwyOSArMjUxLDI5IEBA
IEV2ZW50TGlzdGVuZXJJbXBsICpFY21hOjpjcmVhdGVFdmVudExpc3QKIAkKIAlzdGF0aWMgS0pT
OjpTdHJpbmcgZXZlbnRTdHJpbmcoImV2ZW50Iik7CiAKLQlLSlM6Ok9iamVjdCBjb25zdHIgPSBk
LT5pbnRlcnByZXRlci0+YnVpbHRpbkZ1bmN0aW9uKCk7CisJS0pTOjpPYmplY3RJbXAgKmNvbnN0
ciA9IGQtPmludGVycHJldGVyLT5idWlsdGluRnVuY3Rpb24oKTsKIAlLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYyA9IGQtPmludGVycHJldGVyLT5nbG9iYWxFeGVjKCk7CiAJCiAJS0pTOjpMaXN0IGFyZ3M7
CiAJYXJncy5hcHBlbmQoZXZlbnRTdHJpbmcpOwogCWFyZ3MuYXBwZW5kKEtKUzo6U3RyaW5nKGpz
Q29kZS5zdHJpbmcoKSkpOwogCi0JS0pTOjpPYmplY3Qgb2JqID0gY29uc3RyLmNvbnN0cnVjdChl
eGVjLCBhcmdzKTsKKwlLSlM6Ok9iamVjdEltcCAqb2JqID0gY29uc3RyLmNvbnN0cnVjdChleGVj
LCBhcmdzKTsKIAlpZihleGVjLT5oYWRFeGNlcHRpb24oKSkKIAl7CiAJCWV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CiAKIAkJLy8gZmFpbGVkIHRvIHBhcnNlLCBzbyBsZXQncyBqdXN0IG1ha2UgdGhp
cyBsaXN0ZW5lciBhIG5vLW9wCi0JCW9iaiA9IEtKUzo6T2JqZWN0KCk7CisJCW9iaiA9IEtKUzo6
T2JqZWN0SW1wKCk7CiAJfQogCiAJLy8gU2FmZXR5IGZpcnN0Li4KIAlFdmVudExpc3RlbmVySW1w
bCAqaSA9IDA7Ci0JaWYoIW9iai5pc051bGwoKSAmJiBvYmouaW1wKCkpCisJaWYob2JqKQogCXsK
IAkJaSA9IG5ldyBFdmVudExpc3RlbmVySW1wbCgpOwogCQlpLT5pbml0TGlzdGVuZXIoZC0+ZG9j
dW1lbnQsIHRydWUsIG9iaiwgb2JqLCBpbnRlcm5hbFR5cGUpOwotCQlhZGRFdmVudExpc3RlbmVy
KGksIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KG9iai5pbXAoKSkpOworCQlhZGRFdmVu
dExpc3RlbmVyKGksIG9iaik7CiAJfQogCWVsc2UKIAkJa2RFcnJvcigpIDw8ICJVbmFibGUgdG8g
Y3JlYXRlIGV2ZW50IGxpc3RlbmVyIG9iamVjdCBmb3IgZXZlbnQgdHlwZSBcIiIgPDwgdHlwZSA8
PCAiXCIiIDw8IGVuZGw7CkBAIC0zMjYsNyArMzI1LDcgQEAgS0pTOjpPYmplY3RJbXAgKkVjbWE6
OmluaGVyaXRlZEdldERPTUNTUwogfQogCiAvLyBIZWxwZXJzIGluIG5hbWVzcGFjZSAnS0RPTScK
LUtKUzo6VmFsdWUgS0RPTTo6Z2V0RE9NTm9kZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgTm9kZSBu
KQorS0pTOjpWYWx1ZUltcCAqS0RPTTo6Z2V0RE9NTm9kZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
Tm9kZSBuKQogewogCUtKUzo6T2JqZWN0SW1wICpyZXQgPSAwOwogCWlmKG4gPT0gTm9kZTo6bnVs
bCkKQEAgLTM1NCwxMiArMzUzLDEyIEBAIEtKUzo6VmFsdWUgS0RPTTo6Z2V0RE9NTm9kZShLSlM6
OkV4ZWNTdGEKIAlpZihyZXF1ZXN0KQogCXsKIAkJaWYodG9wUmVxdWVzdCAmJiB0b3BSZXF1ZXN0
ICE9IHJlcXVlc3QpCi0JCQlyZXR1cm4gS0pTOjpWYWx1ZSh0b3BSZXF1ZXN0KTsKKwkJCXJldHVy
biBLSlM6OlZhbHVlSW1wKHRvcFJlcXVlc3QpOwogCQkKLQkJcmV0dXJuIEtKUzo6VmFsdWUocmVx
dWVzdCk7CisJCXJldHVybiBLSlM6OlZhbHVlSW1wKHJlcXVlc3QpOwogCX0KIAllbHNlIGlmKHRv
cFJlcXVlc3QpCi0JCXJldHVybiBLSlM6OlZhbHVlKHRvcFJlcXVlc3QpOworCQlyZXR1cm4gS0pT
OjpWYWx1ZUltcCh0b3BSZXF1ZXN0KTsKIAkKIAlzd2l0Y2gobi5ub2RlVHlwZSgpKQogCXsKQEAg
LTQwNCwxMCArNDAzLDEwIEBAIEtKUzo6VmFsdWUgS0RPTTo6Z2V0RE9NTm9kZShLSlM6OkV4ZWNT
dGEKIAl9CiAKIAlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KG4uaGFuZGxlKCksIHJldCk7Ci0J
cmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCi1LSlM6OlZhbHVlIEtE
T006OmdldERPTUV2ZW50KEtKUzo6RXhlY1N0YXRlICpleGVjLCBFdmVudCBlKQorS0pTOjpWYWx1
ZUltcCAqS0RPTTo6Z2V0RE9NRXZlbnQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEV2ZW50IGUpCiB7
CiAJS0pTOjpPYmplY3RJbXAgKnJldCA9IDA7CiAJaWYoZSA9PSBFdmVudDo6bnVsbCkKQEAgLTQx
OCw3ICs0MTcsNyBAQCBLSlM6OlZhbHVlIEtET006OmdldERPTUV2ZW50KEtKUzo6RXhlY1N0CiAJ
Ly8gUmV1c2UgZXhpc3RpbmcgYnJpZGdlLCBpZiBwb3NzaWJsZQogCUtKUzo6T2JqZWN0SW1wICpy
ZXF1ZXN0ID0gaW50ZXJwcmV0ZXItPmdldERPTU9iamVjdChlLmhhbmRsZSgpKTsKIAlpZihyZXF1
ZXN0KQotCQlyZXR1cm4gS0pTOjpWYWx1ZShyZXF1ZXN0KTsKKwkJcmV0dXJuIEtKUzo6VmFsdWVJ
bXAocmVxdWVzdCk7CiAKIAkvLyBUcnkgaGFyZCB0byBhc2sgYW55IERPTS9TVkcvSFRNTC93aGF0
ZXZlciBpbXBsZW1lbnRhdGlvbgogCS8vIHdoaWNoIG1heSByZXNpZGUgb24gdG9wIG9mIEtET00s
IGhvdyB0byBjb252ZXJ0IHRoZSBjdXJyZW50CkBAIC00MzMsNyArNDMyLDcgQEAgS0pTOjpWYWx1
ZSBLRE9NOjpnZXRET01FdmVudChLSlM6OkV4ZWNTdAogCQlpZihyZXQpCiAJCXsKIAkJCWludGVy
cHJldGVyLT5wdXRET01PYmplY3QoZS5oYW5kbGUoKSwgcmV0KTsKLQkJCXJldHVybiBLSlM6OlZh
bHVlKHJldCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC00NTMsMTAgKzQ1MiwxMCBA
QCBLSlM6OlZhbHVlIEtET006OmdldERPTUV2ZW50KEtKUzo6RXhlY1N0CiAJS0pTOjpJbnRlcnBy
ZXRlcjo6dW5sb2NrKCk7CiAKIAlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KGUuaGFuZGxlKCks
IHJldCk7Ci0JcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCi1LSlM6
OlZhbHVlIEtET006OmdldERPTUNTU1J1bGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIENTU1J1bGUg
YykKK0tKUzo6VmFsdWVJbXAgKktET006OmdldERPTUNTU1J1bGUoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIENTU1J1bGUgYykKIHsKIAlLSlM6Ok9iamVjdEltcCAqcmV0ID0gMDsKIAlpZihjID09IENT
U1J1bGU6Om51bGwpCkBAIC00NjcsNyArNDY2LDcgQEAgS0pTOjpWYWx1ZSBLRE9NOjpnZXRET01D
U1NSdWxlKEtKUzo6RXhlYwogCS8vIFJldXNlIGV4aXN0aW5nIGJyaWRnZSwgaWYgcG9zc2libGUK
IAlLSlM6Ok9iamVjdEltcCAqcmVxdWVzdCA9IGludGVycHJldGVyLT5nZXRET01PYmplY3QoYy5o
YW5kbGUoKSk7CiAJaWYocmVxdWVzdCkKLQkJcmV0dXJuIEtKUzo6VmFsdWUocmVxdWVzdCk7CisJ
CXJldHVybiBLSlM6OlZhbHVlSW1wKHJlcXVlc3QpOwogCiAJLy8gVHJ5IGhhcmQgdG8gYXNrIGFu
eSBET00vU1ZHL0hUTUwvd2hhdGV2ZXIgaW1wbGVtZW50YXRpb24KIAkvLyB3aGljaCBtYXkgcmVz
aWRlIG9uIHRvcCBvZiBLRE9NLCBob3cgdG8gY29udmVydCB0aGUgY3VycmVudApAQCAtNDgwLDcg
KzQ3OSw3IEBAIEtKUzo6VmFsdWUgS0RPTTo6Z2V0RE9NQ1NTUnVsZShLSlM6OkV4ZWMKIAkJaWYo
cmV0KQogCQl7CiAJCQlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KGMuaGFuZGxlKCksIHJldCk7
Ci0JCQlyZXR1cm4gS0pTOjpWYWx1ZShyZXQpOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApA
QCAtNTA0LDEwICs1MDMsMTAgQEAgS0pTOjpWYWx1ZSBLRE9NOjpnZXRET01DU1NSdWxlKEtKUzo6
RXhlYwogCQlyZXQgPSBjLmJyaWRnZShleGVjKTsKIAkKIAlpbnRlcnByZXRlci0+cHV0RE9NT2Jq
ZWN0KGMuaGFuZGxlKCksIHJldCk7Ci0JcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4g
cmV0OwogfQogCi1LSlM6OlZhbHVlIEtET006OmdldERPTUNTU1ZhbHVlKEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBDU1NWYWx1ZSBjKQorS0pTOjpWYWx1ZUltcCAqS0RPTTo6Z2V0RE9NQ1NTVmFsdWUo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIENTU1ZhbHVlIGMpCiB7CiAJS0pTOjpPYmplY3RJbXAgKnJl
dCA9IDA7CiAJaWYoYyA9PSBDU1NWYWx1ZTo6bnVsbCkKQEAgLTUxOCw3ICs1MTcsNyBAQCBLSlM6
OlZhbHVlIEtET006OmdldERPTUNTU1ZhbHVlKEtKUzo6RXhlCiAJLy8gUmV1c2UgZXhpc3Rpbmcg
YnJpZGdlLCBpZiBwb3NzaWJsZQogCUtKUzo6T2JqZWN0SW1wICpyZXF1ZXN0ID0gaW50ZXJwcmV0
ZXItPmdldERPTU9iamVjdChjLmhhbmRsZSgpKTsKIAlpZihyZXF1ZXN0KQotCQlyZXR1cm4gS0pT
OjpWYWx1ZShyZXF1ZXN0KTsKKwkJcmV0dXJuIEtKUzo6VmFsdWVJbXAocmVxdWVzdCk7CiAKIAkv
LyBUcnkgaGFyZCB0byBhc2sgYW55IERPTS9TVkcvSFRNTC93aGF0ZXZlciBpbXBsZW1lbnRhdGlv
bgogCS8vIHdoaWNoIG1heSByZXNpZGUgb24gdG9wIG9mIEtET00sIGhvdyB0byBjb252ZXJ0IHRo
ZSBjdXJyZW50CkBAIC01MzEsNyArNTMwLDcgQEAgS0pTOjpWYWx1ZSBLRE9NOjpnZXRET01DU1NW
YWx1ZShLSlM6OkV4ZQogCQlpZihyZXQpCiAJCXsKIAkJCWludGVycHJldGVyLT5wdXRET01PYmpl
Y3QoYy5oYW5kbGUoKSwgcmV0KTsKLQkJCXJldHVybiBLSlM6OlZhbHVlKHJldCk7CisJCQlyZXR1
cm4gcmV0OwogCQl9CiAJfQogCkBAIC01NDUsMTQgKzU0NCwxNCBAQCBLSlM6OlZhbHVlIEtET006
OmdldERPTUNTU1ZhbHVlKEtKUzo6RXhlCiAJCXJldCA9IGMuYnJpZGdlKGV4ZWMpOwogCQogCWlu
dGVycHJldGVyLT5wdXRET01PYmplY3QoYy5oYW5kbGUoKSwgcmV0KTsKLQlyZXR1cm4gS0pTOjpW
YWx1ZShyZXQpOworCXJldHVybiByZXQ7CiB9CiAKLURPTVN0cmluZyBLRE9NOjp0b0RPTVN0cmlu
ZyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmdmFsKQorRE9NU3RyaW5n
IEtET006OnRvRE9NU3RyaW5nKEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6OlZhbHVlSW1wICp2
YWwpCiB7CiAJLy8gV2UgaGF2ZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG51bGwgYW5kIGVtcHR5
IHN0cmluZ3MhCiAJLy8gVmVyeSBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBkb20gdGVzdCBzdWl0ZSBy
dW5uaW5nIGNvcnJlY3RseSA6KQotCVFTdHJpbmcgc3RyaW5nID0gdmFsLnRvU3RyaW5nKGV4ZWMp
LnFzdHJpbmcoKTsKKwlRU3RyaW5nIHN0cmluZyA9IHZhbC0+dG9TdHJpbmcoZXhlYykucXN0cmlu
ZygpOwogCWlmKHN0cmluZyA9PSAibnVsbCIpCiAJCXJldHVybiBET01TdHJpbmcoKTsKIAllbHNl
IGlmKHN0cmluZy5pc0VtcHR5KCkpCkBAIC01NjEsNyArNTYwLDcgQEAgRE9NU3RyaW5nIEtET006
OnRvRE9NU3RyaW5nKEtKUzo6RXhlY1N0YQogCXJldHVybiBET01TdHJpbmcoc3RyaW5nKTsKIH0K
IAotS0pTOjpWYWx1ZSBLRE9NOjpnZXRET01TdHJpbmcoY29uc3QgRE9NU3RyaW5nICZzdHIpCitL
SlM6OlZhbHVlSW1wICpLRE9NOjpnZXRET01TdHJpbmcoY29uc3QgRE9NU3RyaW5nICZzdHIpCiB7
CiAJaWYoc3RyLmlzTnVsbCgpICYmIHN0ci5pc0VtcHR5KCkpCiAJCXJldHVybiBLSlM6Ok51bGwo
KTsKQEAgLTU2OSwxNyArNTY4LDE3IEBAIEtKUzo6VmFsdWUgS0RPTTo6Z2V0RE9NU3RyaW5nKGNv
bnN0IERPTVMKIAlyZXR1cm4gS0pTOjpTdHJpbmcoc3RyLnN0cmluZygpKTsKIH0KIAotUVZhcmlh
bnQgS0RPTTo6dG9WYXJpYW50KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OlZhbHVl
ICZ2YWwpCitRVmFyaWFudCBLRE9NOjp0b1ZhcmlhbnQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtK
Uzo6VmFsdWVJbXAgKnZhbCkKIHsKIAlRVmFyaWFudCByZXM7CiAKLQlzd2l0Y2godmFsLnR5cGUo
KSkKKwlzd2l0Y2godmFsLT50eXBlKCkpCiAJewogCQljYXNlIEtKUzo6Qm9vbGVhblR5cGU6Ci0J
CQlyZXMgPSBRVmFyaWFudCh2YWwudG9Cb29sZWFuKGV4ZWMpLCAwKTsKKwkJCXJlcyA9IFFWYXJp
YW50KHZhbC0+dG9Cb29sZWFuKGV4ZWMpLCAwKTsKIAkJCWJyZWFrOwogCQljYXNlIEtKUzo6TnVt
YmVyVHlwZToKLQkJCXJlcyA9IFFWYXJpYW50KHZhbC50b051bWJlcihleGVjKSk7CisJCQlyZXMg
PSBRVmFyaWFudCh2YWwtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQljYXNlIEtKUzo6
U3RyaW5nVHlwZToKIAkJCXJlcyA9IFFWYXJpYW50KHZhbC50b1N0cmluZyhleGVjKS5xc3RyaW5n
KCkpOwpJbmRleDoga2RvbS9lY21hL0VjbWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rZG9tL2VjbWEvRWNtYS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2VjbWEvRWNtYS5oCi0tLSBrZG9tL2VjbWEvRWNtYS5oCTkg
SnVsIDIwMDUgMDY6NTM6NTggLTAwMDAJMS4xCisrKyBrZG9tL2VjbWEvRWNtYS5oCTggQXVnIDIw
MDUgMDg6MjQ6MTcgLTAwMDAKQEAgLTYyLDIwICs2MiwyMCBAQCBuYW1lc3BhY2UgS0RPTQogCiAJ
CXZvaWQgc2V0dXAoQ0RGSW50ZXJmYWNlICppbnRlcmZhY2UpOwogCi0JCUtKUzo6Q29tcGxldGlv
biBldmFsdWF0ZShjb25zdCBLSlM6OlVTdHJpbmcgJmNvZGUsIGNvbnN0IEtKUzo6VmFsdWUgJnRo
aXNWKTsKKwkJS0pTOjpDb21wbGV0aW9uIGV2YWx1YXRlKGNvbnN0IEtKUzo6VVN0cmluZyAmY29k
ZSwgS0pTOjpWYWx1ZUltcCAqdGhpc1YpOwogCi0JCUtKUzo6T2JqZWN0IGdsb2JhbE9iamVjdCgp
IGNvbnN0OworCQlLSlM6Ok9iamVjdEltcCAqZ2xvYmFsT2JqZWN0KCkgY29uc3Q7CiAJCUtKUzo6
RXhlY1N0YXRlICpnbG9iYWxFeGVjKCkgY29uc3Q7CiAJCQogCQlFY21hSW50ZXJmYWNlICppbnRl
cmZhY2UoKSBjb25zdDsKIAkJU2NyaXB0SW50ZXJwcmV0ZXIgKmludGVycHJldGVyKCkgY29uc3Q7
CiAKIAkJLy8gSW50ZXJuYWwsIHVzZWQgdG8gaGFuZGxlIGV2ZW50IGxpc3RlbmVycwotCQlLSlM6
Ok9iamVjdCBlY21hTGlzdGVuZXJUb09iamVjdChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
S0pTOjpWYWx1ZSAmbGlzdGVuZXIpOworCQlLSlM6Ok9iamVjdEltcCAqZWNtYUxpc3RlbmVyVG9P
YmplY3QoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWVJbXAgKmxpc3RlbmVyKTsKIAog
CQlFdmVudExpc3RlbmVySW1wbCAqY3JlYXRlRXZlbnRMaXN0ZW5lcihjb25zdCBET01TdHJpbmcg
JnR5cGUsIGNvbnN0IERPTVN0cmluZyAmanNDb2RlKTsKLQkJRXZlbnRMaXN0ZW5lckltcGwgKmNy
ZWF0ZUV2ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6VmFsdWUg
Jmxpc3RlbmVyKTsKLQkJRXZlbnRMaXN0ZW5lckltcGwgKmZpbmRFdmVudExpc3RlbmVyKEtKUzo6
RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OlZhbHVlICZsaXN0ZW5lcik7CisJCUV2ZW50TGlz
dGVuZXJJbXBsICpjcmVhdGVFdmVudExpc3RlbmVyKEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6
OlZhbHVlSW1wICpsaXN0ZW5lcik7CisJCUV2ZW50TGlzdGVuZXJJbXBsICpmaW5kRXZlbnRMaXN0
ZW5lcihLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAqbGlzdGVuZXIpOwogCiAJ
CXZvaWQgYWRkRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVySW1wbCAqbGlzdGVuZXIsIEtKUzo6
T2JqZWN0SW1wICppbXApOwogCQl2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoS0pTOjpPYmplY3RJ
bXAgKmltcCk7CkBAIC0xMDIsMzMgKzEwMiwzMiBAQCBuYW1lc3BhY2UgS0RPTQogCX07CiAKIAkv
LyBIZWxwZXJzCi0JS0pTOjpWYWx1ZSBnZXRET01Ob2RlKEtKUzo6RXhlY1N0YXRlICpleGVjLCBO
b2RlIG4pOwotCUtKUzo6VmFsdWUgZ2V0RE9NRXZlbnQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEV2
ZW50IGUpOwotCUtKUzo6VmFsdWUgZ2V0RE9NQ1NTUnVsZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
Q1NTUnVsZSBjKTsKLQlLSlM6OlZhbHVlIGdldERPTUNTU1ZhbHVlKEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBDU1NWYWx1ZSBjKTsKKwlLSlM6OlZhbHVlSW1wICpnZXRET01Ob2RlKEtKUzo6RXhlY1N0
YXRlICpleGVjLCBOb2RlIG4pOworCUtKUzo6VmFsdWVJbXAgKmdldERPTUV2ZW50KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBFdmVudCBlKTsKKwlLSlM6OlZhbHVlSW1wICpnZXRET01DU1NSdWxlKEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBDU1NSdWxlIGMpOworCUtKUzo6VmFsdWVJbXAgKmdldERPTUNT
U1ZhbHVlKEtKUzo6RXhlY1N0YXRlICpleGVjLCBDU1NWYWx1ZSBjKTsKIAotCUtKUzo6VmFsdWUg
Z2V0RE9NU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmc3RyKTsKKwlLSlM6OlZhbHVlSW1wICpnZXRE
T01TdHJpbmcoY29uc3QgRE9NU3RyaW5nICZzdHIpOwogCi0JRE9NU3RyaW5nIHRvRE9NU3RyaW5n
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OlZhbHVlICZ2YWwpOwotCVFWYXJpYW50
IHRvVmFyaWFudChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmdmFsKTsK
KwlET01TdHJpbmcgdG9ET01TdHJpbmcoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWVJ
bXAgKnZhbCk7CisJUVZhcmlhbnQgdG9WYXJpYW50KEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6
OlZhbHVlSW1wICp2YWwpOwogCiAJLy8gQ29udmVydCBiZXR3ZWVuIGVjbWEgdmFsdWVzIGFuZCBy
ZWFsIGtkb20gb2JqZWN0cwogCS8vIEV4YW1wbGU6IE5vZGUgbXlOb2RlID0gZWNtYV9jYXN0PE5v
ZGU+KGV4ZWMsIGFyZ3NbMF0sICZ0b05vZGUpOwogCS8vICAgICAgICAgIEF0dHIgbXlBdHRyID0g
ZWNtYV9jYXN0PEF0dHI+KGV4ZWMsIGFyZ3NbMV0sICZ0b0F0dHIpOwogCXRlbXBsYXRlPGNsYXNz
IFQ+Ci0JVCBlY21hX2Nhc3QoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6VmFsdWUg
JnZhbCwgVCAoY29udkZ1bmNQdHIpKEtKUzo6RXhlY1N0YXRlICosIGNvbnN0IEtKUzo6T2JqZWN0
SW1wICopKQorCVQgZWNtYV9jYXN0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6OlZhbHVlSW1w
ICp2YWwsIFQgKGNvbnZGdW5jUHRyKShLSlM6OkV4ZWNTdGF0ZSAqLCBjb25zdCBLSlM6Ok9iamVj
dEltcCAqKSkKIAl7Ci0JCUtKUzo6T2JqZWN0IG9iaiA9IEtKUzo6T2JqZWN0OjpkeW5hbWljQ2Fz
dCh2YWwpOwotCQlpZihvYmouaXNOdWxsKCkpCisJCWlmKCF2YWwtPmlzT2JqZWN0KCkpCiAJCQly
ZXR1cm4gVDo6bnVsbDsKIAotCQlyZXR1cm4gY29udkZ1bmNQdHIoZXhlYywgc3RhdGljX2Nhc3Q8
S0pTOjpPYmplY3RJbXAgKj4ob2JqLmltcCgpKSk7CisJCXJldHVybiBjb252RnVuY1B0cihleGVj
LCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih2YWwpKTsKIAl9CiAKIAkvLyBDb252ZXJ0
IGJldHdlZW4gcmVhbCBrZG9tIG9iamVjdHMgYW5kIGVjbWEgdmFsdWVzCiAJLy8gRXhhbXBsZTog
cmV0dXJuIHNhZmVfY2FjaGU8QXR0cj4oZXhlYywgbXlBdHRyKTsKIAl0ZW1wbGF0ZTxjbGFzcyBU
PgotCUtKUzo6VmFsdWUgc2FmZV9jYWNoZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgVCBvYmopCisJ
S0pTOjpWYWx1ZUltcCAqc2FmZV9jYWNoZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgVCBvYmopCiAJ
ewogCQlpZihvYmogIT0gVDo6bnVsbCkKIAkJCXJldHVybiBvYmouY2FjaGUoZXhlYyk7CkluZGV4
OiBrZG9tL2VjbWEvR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rZG9tL2VjbWEvR2xvYmFsT2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9lY21hL0dsb2JhbE9iamVjdC5jcHAKLS0t
IGtkb20vZWNtYS9HbG9iYWxPYmplY3QuY3BwCTcgQXVnIDIwMDUgMDY6MTc6NDQgLTAwMDAJMS4y
CisrKyBrZG9tL2VjbWEvR2xvYmFsT2JqZWN0LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjE3IC0wMDAw
CkBAIC05OSw3ICs5OSw3IEBAIEdsb2JhbE9iamVjdDo6fkdsb2JhbE9iamVjdCgpCiAKIEdsb2Jh
bE9iamVjdCAqR2xvYmFsT2JqZWN0OjpyZXRyaWV2ZUFjdGl2ZShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YykKIHsKLQlLSlM6OlZhbHVlSW1wICppbXAgPSBleGVjLT5pbnRlcnByZXRlcigpLT5nbG9iYWxP
YmplY3QoKS5pbXAoKTsKKwlLSlM6OlZhbHVlSW1wICppbXAgPSBleGVjLT5pbnRlcnByZXRlcigp
LT5nbG9iYWxPYmplY3QoKTsKIAlRX0FTU0VSVChpbXApOwogCiAJcmV0dXJuIHN0YXRpY19jYXN0
PEdsb2JhbE9iamVjdCAqPihpbXApOwpAQCAtMTE4LDcgKzExOCw3IEBAIGJvb2wgR2xvYmFsT2Jq
ZWN0OjpoYXNQcm9wZXJ0eShLSlM6OkV4ZWMKIAlyZXR1cm4gdHJ1ZTsgLy8gU2VlIEtKUzo6V2lu
ZG93OjpoYXNQcm9wZXJ0eQogfQogCi1LSlM6OlZhbHVlIEdsb2JhbE9iamVjdDo6Z2V0KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnApIGNvbnN0CitLSlM6OlZh
bHVlSW1wICpHbG9iYWxPYmplY3Q6OmdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pT
OjpJZGVudGlmaWVyICZwKSBjb25zdAogewogCWtkRGVidWcoMjYwMDQpIDw8ICJHbG9iYWxPYmpl
Y3QgKCIgPDwgdGhpcyA8PCAiKTo6Z2V0ICIgPDwgcC5xc3RyaW5nKCkgPDwgZW5kbDsKIApAQCAt
MTMzLDggKzEzMyw4IEBAIEtKUzo6VmFsdWUgR2xvYmFsT2JqZWN0OjpnZXQoS0pTOjpFeGVjU3QK
IAl9CiAKIAkvLyBMb29rIGZvciBvdmVycmlkZXMgZmlyc3QKLQlLSlM6OlZhbHVlIHZhbCA9IEtK
Uzo6T2JqZWN0SW1wOjpnZXQoZXhlYywgcCk7Ci0JaWYoIXZhbC5pc0EoS0pTOjpVbmRlZmluZWRU
eXBlKSkKKwlLSlM6OlZhbHVlSW1wICp2YWwgPSBLSlM6Ok9iamVjdEltcDo6Z2V0KGV4ZWMsIHAp
OworCWlmKCF2YWwtPmlzQShLSlM6OlVuZGVmaW5lZFR5cGUpKQogCQlyZXR1cm4gaXNTYWZlU2Ny
aXB0KGV4ZWMpID8gdmFsIDogS0pTOjpVbmRlZmluZWQoKTsKIAogCS8vIE5vdCB0aGUgcmlnaHQg
d2F5IGluIHRoZSBsb25nIHJ1bi4gU2hvdWxkIHVzZSByZXRyaWV2ZShtX2RvYykuLi4KQEAgLTE0
NiwxMiArMTQ2LDEyIEBAIEtKUzo6VmFsdWUgR2xvYmFsT2JqZWN0OjpnZXQoS0pTOjpFeGVjU3QK
IAkJc3dpdGNoKGVudHJ5LT52YWx1ZSkKIAkJewogCQkJY2FzZSBHbG9iYWxPYmplY3RDb25zdGFu
dHM6OldpbmRvdzoKLQkJCQlyZXR1cm4gS0pTOjpWYWx1ZShjb25zdF9jYXN0PEdsb2JhbE9iamVj
dCAqPih0aGlzKSk7CisJCQkJcmV0dXJuIGNvbnN0X2Nhc3Q8R2xvYmFsT2JqZWN0ICo+KHRoaXMp
OwogCQkJY2FzZSBHbG9iYWxPYmplY3RDb25zdGFudHM6OkV2dDoKIAkJCQlyZXR1cm4gZ2V0RE9N
RXZlbnQoZXhlYywgRXZlbnQoaW50ZXJwcmV0ZXItPmN1cnJlbnRFdmVudCgpKSk7CiAJCQljYXNl
IEdsb2JhbE9iamVjdENvbnN0YW50czo6RG9jdW1lbnQ6CiAJCQkJLy8gc3BlY2lhbCBjYXNlLCBF
Y21hOjpzZXR1cCBjcmVhdGVkIGl0LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGl0Ci0JCQkJcmV0
dXJuIEtKUzo6VmFsdWUoaW50ZXJwcmV0ZXItPmdldERPTU9iamVjdChkLT5kb2N1bWVudCkpOwor
CQkJCXJldHVybiBpbnRlcnByZXRlci0+Z2V0RE9NT2JqZWN0KGQtPmRvY3VtZW50KTsKIAkJCWNh
c2UgR2xvYmFsT2JqZWN0Q29uc3RhbnRzOjpTZXRUaW1lb3V0OgogCQkJY2FzZSBHbG9iYWxPYmpl
Y3RDb25zdGFudHM6OkNsZWFyVGltZW91dDoKIAkJCWNhc2UgR2xvYmFsT2JqZWN0Q29uc3RhbnRz
OjpTZXRJbnRlcnZhbDoKQEAgLTE5NCw3ICsxOTQsNyBAQCBLSlM6OlZhbHVlIEdsb2JhbE9iamVj
dDo6Z2V0KEtKUzo6RXhlY1N0CiAJcmV0dXJuIEtKUzo6VW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQg
R2xvYmFsT2JqZWN0OjpwdXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpCit2
b2lkIEdsb2JhbE9iamVjdDo6cHV0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6Oklk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQog
ewogCS8vIElmIHdlIGFyZSBjYWxsZWQgYnkgYW4gaW50ZXJuYWwgS0pTIGNhbGwsIHRoZW4gZGly
ZWN0bHkganVtcCB0byBPYmplY3RJbXAgLT4gc2F2ZXMgdGltZQogCS8vIEFsc28gYXBwbGllcyBp
ZiB3ZSBoYXZlIGEgbG9jYWwgb3ZlcnJpZGUgKGUuZy4gInZhciBsb2NhdGlvbiIpCkBAIC0yNjgs
MTcgKzI2OCwxNyBAQCBjb25zdCBLSlM6OkNsYXNzSW5mbyAqR2xvYmFsT2JqZWN0OjpjbGFzCiB9
CiAKIC8vIEVjbWFTY3JpcHQgZnVuY3Rpb24gaGFuZGxpbmcKLUtKUzo6VmFsdWUgR2xvYmFsT2Jq
ZWN0RnVuYzo6Y2FsbChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpPYmplY3QgJnRoaXNPYmos
IGNvbnN0IEtKUzo6TGlzdCAmYXJncykKK0tKUzo6VmFsdWVJbXAgKkdsb2JhbE9iamVjdEZ1bmM6
OmNhbGwoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6T2JqZWN0SW1wICp0aGlzT2JqLCBjb25z
dCBLSlM6Okxpc3QgJmFyZ3MpCiB7CiAJaWYoIXRoaXNPYmouaW5oZXJpdHMoJkdsb2JhbE9iamVj
dDo6c19jbGFzc0luZm8pKQogCXsKLQkJS0pTOjpPYmplY3QgZXJyID0gS0pTOjpFcnJvcjo6Y3Jl
YXRlKGV4ZWMsIEtKUzo6VHlwZUVycm9yKTsKKwkJS0pTOjpPYmplY3RJbXAgKmVyciA9IEtKUzo6
RXJyb3I6OmNyZWF0ZShleGVjLCBLSlM6OlR5cGVFcnJvcik7CiAJCWV4ZWMtPnNldEV4Y2VwdGlv
bihlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAkKLQlHbG9iYWxPYmplY3QgKmdsb2JhbCA9IHN0
YXRpY19jYXN0PEdsb2JhbE9iamVjdCAqPih0aGlzT2JqLmltcCgpKTsKLQlLSlM6OlZhbHVlIHYg
PSBhcmdzWzBdOworCUdsb2JhbE9iamVjdCAqZ2xvYmFsID0gc3RhdGljX2Nhc3Q8R2xvYmFsT2Jq
ZWN0ICo+KHRoaXNPYmopOworCUtKUzo6VmFsdWVJbXAgKnYgPSBhcmdzWzBdOwogCUtKUzo6VVN0
cmluZyBzID0gdi50b1N0cmluZyhleGVjKTsKIAlRU3RyaW5nIHN0ciA9IHMucXN0cmluZygpOwog
CkBAIC0zMDUsNyArMzA1LDcgQEAgS0pTOjpWYWx1ZSBHbG9iYWxPYmplY3RGdW5jOjpjYWxsKEtK
Uzo6RQogCQkJcmV0dXJuIEtKUzo6VW5kZWZpbmVkKCk7CiAJCWNhc2UgR2xvYmFsT2JqZWN0Q29u
c3RhbnRzOjpDbGVhclRpbWVvdXQ6CiAJCWNhc2UgR2xvYmFsT2JqZWN0Q29uc3RhbnRzOjpDbGVh
ckludGVydmFsOgotCQkJZ2xvYmFsLT5jbGVhclRpbWVvdXQodi50b0ludDMyKGV4ZWMpKTsKKwkJ
CWdsb2JhbC0+Y2xlYXJUaW1lb3V0KHYtPnRvSW50MzIoZXhlYykpOwogCQkJcmV0dXJuIEtKUzo6
VW5kZWZpbmVkKCk7CiAJCWNhc2UgR2xvYmFsT2JqZWN0Q29uc3RhbnRzOjpQcmludE5vZGU6CiAJ
CXsKQEAgLTMzNiwxNiArMzM2LDE2IEBAIEtKUzo6VmFsdWUgR2xvYmFsT2JqZWN0RnVuYzo6Y2Fs
bChLSlM6OkUKIAkJfQogCQljYXNlIEdsb2JhbE9iamVjdENvbnN0YW50czo6U2V0SW50ZXJ2YWw6
CiAJCXsKLQkJCWlmKGFyZ3Muc2l6ZSgpID49IDIgJiYgdi5pc0EoS0pTOjpTdHJpbmdUeXBlKSkK
KwkJCWlmKGFyZ3Muc2l6ZSgpID49IDIgJiYgdi0+aXNBKEtKUzo6U3RyaW5nVHlwZSkpCiAJCQl7
Ci0JCQkJaW50IGkgPSBhcmdzWzFdLnRvSW50MzIoZXhlYyk7Ci0JCQkJaW50IHIgPSBnbG9iYWwt
Pmluc3RhbGxUaW1lb3V0KHMsIGFyZ3NbaV0udG9JbnQzMihleGVjKSwgZmFsc2UpOworCQkJCWlu
dCBpID0gYXJnc1sxXS0+dG9JbnQzMihleGVjKTsKKwkJCQlpbnQgciA9IGdsb2JhbC0+aW5zdGFs
bFRpbWVvdXQocywgYXJnc1tpXS0+dG9JbnQzMihleGVjKSwgZmFsc2UpOwogCQkJCXJldHVybiBL
SlM6Ok51bWJlcihyKTsKIAkJCX0KLQkJCWVsc2UgaWYoYXJncy5zaXplKCkgPj0gMiAmJiAhS0pT
OjpPYmplY3Q6OmR5bmFtaWNDYXN0KHYpLmlzTnVsbCgpICYmIEtKUzo6T2JqZWN0OjpkeW5hbWlj
Q2FzdCh2KS5pbXBsZW1lbnRzQ2FsbCgpKQorCQkJZWxzZSBpZihhcmdzLnNpemUoKSA+PSAyICYm
IHYtPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odikuaW1wbGVt
ZW50c0NhbGwoKSkKIAkJCXsKLQkJCQlLSlM6OlZhbHVlIGZ1bmMgPSBhcmdzWzBdOwotCQkJCWlu
dCBpID0gYXJnc1sxXS50b0ludDMyKGV4ZWMpOworCQkJCUtKUzo6VmFsdWVJbXAgKmZ1bmMgPSBh
cmdzWzBdOworCQkJCWludCBpID0gYXJnc1sxXS0+dG9JbnQzMihleGVjKTsKIAkJCQlpbnQgciA9
IGdsb2JhbC0+aW5zdGFsbFRpbWVvdXQocywgaSwgZmFsc2UpOwogCQkJCXJldHVybiBLSlM6Ok51
bWJlcihyKTsKIAkJCX0KQEAgLTM1NCwxNiArMzU0LDE2IEBAIEtKUzo6VmFsdWUgR2xvYmFsT2Jq
ZWN0RnVuYzo6Y2FsbChLSlM6OkUKIAkJfQogCQljYXNlIEdsb2JhbE9iamVjdENvbnN0YW50czo6
U2V0VGltZW91dDoKIAkJewotCQkJaWYoYXJncy5zaXplKCkgPT0gMiAmJiB2LmlzQShLSlM6OlN0
cmluZ1R5cGUpKQorCQkJaWYoYXJncy5zaXplKCkgPT0gMiAmJiB2LT5pc0EoS0pTOjpTdHJpbmdU
eXBlKSkKIAkJCXsKLQkJCQlpbnQgaSA9IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKwkJCQlpbnQg
aSA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyk7CiAJCQkJaW50IHIgPSBnbG9iYWwtPmluc3RhbGxU
aW1lb3V0KHMsIGksIHRydWUgLypzaW5nbGUgc2hvdCovKTsKIAkJCQlyZXR1cm4gS0pTOjpOdW1i
ZXIocik7CiAJCQl9Ci0JCQllbHNlIGlmKGFyZ3Muc2l6ZSgpID49IDIgJiYgdi5pc0EoS0pTOjpP
YmplY3RUeXBlKSAmJiBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QodikuaW1wbGVtZW50c0NhbGwo
KSkKKwkJCWVsc2UgaWYoYXJncy5zaXplKCkgPj0gMiAmJiB2LT5pc0EoS0pTOjpPYmplY3RUeXBl
KSAmJiBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QodikuaW1wbGVtZW50c0NhbGwoKSkKIAkJCXsK
LQkJCQlLSlM6OlZhbHVlIGZ1bmMgPSBhcmdzWzBdOwotCQkJCWludCBpID0gYXJnc1sxXS50b0lu
dDMyKGV4ZWMpOworCQkJCUtKUzo6VmFsdWVJbXAgKmZ1bmMgPSBhcmdzWzBdOworCQkJCWludCBp
ID0gYXJnc1sxXS0+dG9JbnQzMihleGVjKTsKIAkJCQlpbnQgciA9IGdsb2JhbC0+aW5zdGFsbFRp
bWVvdXQocywgaSwgZmFsc2UpOwogCQkJCXJldHVybiBLSlM6Ok51bWJlcihyKTsKIAkJCX0KQEAg
LTM5Miw3ICszOTIsNyBAQCB2b2lkIEdsb2JhbE9iamVjdDo6Y2xlYXJUaW1lb3V0KGludCB0aW1l
CiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU2NoZWR1bGVkQWN0aW9uIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotU2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24oS0pTOjpPYmpl
Y3QgZnVuYywgS0pTOjpMaXN0IGFyZ3MsIGJvb2wgc2luZ2xlU2hvdCkKK1NjaGVkdWxlZEFjdGlv
bjo6U2NoZWR1bGVkQWN0aW9uKEtKUzo6T2JqZWN0SW1wICpmdW5jLCBLSlM6Okxpc3QgYXJncywg
Ym9vbCBzaW5nbGVTaG90KQogewogCW1fZnVuYyA9IGZ1bmM7CiAJbV9hcmdzID0gYXJnczsKQEAg
LTQyNCw5ICs0MjQsOSBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShHbG9iYWxPYmpl
CiAJCWlmKG1fZnVuYy5pbXBsZW1lbnRzQ2FsbCgpKQogCQl7CiAJCQlLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYyA9IGludGVycHJldGVyLT5nbG9iYWxFeGVjKCk7Ci0JCQlRX0FTU0VSVChnbG9iYWwgPT0g
aW50ZXJwcmV0ZXItPmdsb2JhbE9iamVjdCgpLmltcCgpKTsKKwkJCVFfQVNTRVJUKGdsb2JhbCA9
PSBpbnRlcnByZXRlci0+Z2xvYmFsT2JqZWN0KCkpOwogCQkJCi0JCQlLSlM6Ok9iamVjdCBvYmoo
Z2xvYmFsKTsKKwkJCUtKUzo6T2JqZWN0SW1wICpvYmooZ2xvYmFsKTsKIAkJCW1fZnVuYy5jYWxs
KGV4ZWMsIG9iaiwgbV9hcmdzKTsgLy8gbm90ZSB0aGF0IGNhbGwoKSBjcmVhdGVzIGl0cyBvd24g
ZXhlY3V0aW9uIHN0YXRlIGZvciB0aGUgZnVuYyBjYWxsCiAJCX0KIAl9CkBAIC00NjcsOSArNDY3
LDkgQEAgaW50IEdsb2JhbFFPYmplY3Q6Omluc3RhbGxUaW1lb3V0KGNvbnN0IAogCXJldHVybiBp
ZDsKIH0KIAotaW50IEdsb2JhbFFPYmplY3Q6Omluc3RhbGxUaW1lb3V0KGNvbnN0IEtKUzo6VmFs
dWUgJmZ1bmMsIEtKUzo6TGlzdCBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQoraW50IEds
b2JhbFFPYmplY3Q6Omluc3RhbGxUaW1lb3V0KEtKUzo6VmFsdWVJbXAgKmZ1bmMsIEtKUzo6TGlz
dCBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQogewotCUtKUzo6T2JqZWN0IG9iakZ1bmMg
PSBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QoZnVuYyk7CisJS0pTOjpPYmplY3RJbXAgKm9iakZ1
bmMgPSBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QoZnVuYyk7CiAJaWYodCA8IDEwKSB0ID0gMTA7
CiAJaW50IGlkID0gc3RhcnRUaW1lcih0KTsKIAlzY2hlZHVsZWRBY3Rpb25zLmluc2VydChpZCwg
bmV3IFNjaGVkdWxlZEFjdGlvbihvYmpGdW5jLCBhcmdzLCBzaW5nbGVTaG90KSk7CkluZGV4OiBr
ZG9tL2VjbWEvR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9lY21hL0dsb2JhbE9iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2VjbWEvR2xvYmFsT2JqZWN0LmgKLS0tIGtkb20vZWNt
YS9HbG9iYWxPYmplY3QuaAk5IEp1bCAyMDA1IDA2OjUzOjU5IC0wMDAwCTEuMQorKysga2RvbS9l
Y21hL0dsb2JhbE9iamVjdC5oCTggQXVnIDIwMDUgMDg6MjQ6MTcgLTAwMDAKQEAgLTM2LDggKzM2
LDggQEAgbmFtZXNwYWNlIEtET00KIAkJR2xvYmFsT2JqZWN0KERvY3VtZW50SW1wbCAqZG9jKTsK
IAkJdmlydHVhbCB+R2xvYmFsT2JqZWN0KCk7CiAKLQkJdmlydHVhbCBLSlM6OlZhbHVlIGdldChL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUp
IGNvbnN0OwotCQl2aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBL
SlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGlu
dCBhdHRyID0gS0pTOjpOb25lKTsKKwkJdmlydHVhbCBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25z
dDsKKwkJdmlydHVhbCB2b2lkIHB1dChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9
IEtKUzo6Tm9uZSk7CiAJCXZpcnR1YWwgYm9vbCBoYXNQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwKSBjb25zdDsKIAogCQkvLyBSZXR1cm5zIGEg
cG9pbnRlciB0byB0aGUgR2xvYmFsIE9iamVjdCBpbiB0aGlzIEVjbWFTY3JpcHQgQ29udGV4dApA
QCAtNzEsNyArNzEsNyBAQCBuYW1lc3BhY2UgS0RPTQogCWNsYXNzIFNjaGVkdWxlZEFjdGlvbgog
CXsKIAlwdWJsaWM6Ci0JCVNjaGVkdWxlZEFjdGlvbihLSlM6Ok9iamVjdCBmdW5jLCBLSlM6Okxp
c3QgYXJncywgYm9vbCBzaW5nbGVTaG90KTsKKwkJU2NoZWR1bGVkQWN0aW9uKEtKUzo6T2JqZWN0
SW1wICpmdW5jLCBLSlM6Okxpc3QgYXJncywgYm9vbCBzaW5nbGVTaG90KTsKIAkJU2NoZWR1bGVk
QWN0aW9uKGNvbnN0IFFTdHJpbmcgJmNvZGUsIGJvb2wgc2luZ2xlU2hvdCk7CiAJCX5TY2hlZHVs
ZWRBY3Rpb24oKTsKIAkKQEAgLTgwLDcgKzgwLDcgQEAgbmFtZXNwYWNlIEtET00KIAlwcml2YXRl
OgogCQlmcmllbmQgY2xhc3MgR2xvYmFsUU9iamVjdDsKIAotCQlLSlM6Ok9iamVjdCBtX2Z1bmM7
CisJCUtKUzo6T2JqZWN0SW1wICptX2Z1bmM7CiAJCUtKUzo6TGlzdCBtX2FyZ3M7CiAJCVFTdHJp
bmcgbV9jb2RlOwogCQlib29sIG1faXNGdW5jdGlvbjsKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNw
YWNlIEtET00KIAkJfkdsb2JhbFFPYmplY3QoKTsKIAogCQlpbnQgaW5zdGFsbFRpbWVvdXQoY29u
c3QgS0pTOjpVU3RyaW5nICZoYW5kbGVyLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKLQkJaW50
IGluc3RhbGxUaW1lb3V0KGNvbnN0IEtKUzo6VmFsdWUgJmZ1bmMsIEtKUzo6TGlzdCBhcmdzLCBp
bnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKKwkJaW50IGluc3RhbGxUaW1lb3V0KEtKUzo6VmFsdWVJ
bXAgKmZ1bmMsIEtKUzo6TGlzdCBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKIAkJdm9p
ZCBjbGVhclRpbWVvdXQoaW50IHRpbWVySWQsIGJvb2wgZGVsQWN0aW9uID0gdHJ1ZSk7CiAJCQog
CXB1YmxpYyBzbG90czoKSW5kZXg6IGtkb20vZWNtYS9TY3JpcHRJbnRlcnByZXRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL1NjcmlwdElu
dGVycHJldGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a2RvbS9lY21hL1NjcmlwdEludGVycHJldGVyLmNwcAotLS0ga2RvbS9lY21hL1NjcmlwdEludGVy
cHJldGVyLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjU5IC0wMDAwCTEuMQorKysga2RvbS9lY21hL1Nj
cmlwdEludGVycHJldGVyLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjE3IC0wMDAwCkBAIC00Niw3ICs0
Niw3IEBAIHB1YmxpYzoKIAlRUHRyRGljdDxLSlM6Ok9iamVjdEltcD4gZG9tT2JqZWN0czsKIH07
CiAKLVNjcmlwdEludGVycHJldGVyOjpTY3JpcHRJbnRlcnByZXRlcihjb25zdCBLSlM6Ok9iamVj
dCAmZ2xvYmFsLCBEb2N1bWVudEltcGwgKmRvYykgOiBLSlM6OkludGVycHJldGVyKGdsb2JhbCks
IGQobmV3IFByaXZhdGUoZG9jKSkKK1NjcmlwdEludGVycHJldGVyOjpTY3JpcHRJbnRlcnByZXRl
cihLSlM6Ok9iamVjdEltcCAqZ2xvYmFsLCBEb2N1bWVudEltcGwgKmRvYykgOiBLSlM6OkludGVy
cHJldGVyKGdsb2JhbCksIGQobmV3IFByaXZhdGUoZG9jKSkKIHsKIAlpZighc19pbnRlcnByZXRl
ckxpc3QpCiAJCXNfaW50ZXJwcmV0ZXJMaXN0ID0gbmV3IEludGVycHJldGVyTGlzdCgpOwpJbmRl
eDoga2RvbS9lY21hL1NjcmlwdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL1NjcmlwdEludGVycHJldGVyLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZWNtYS9TY3JpcHRJbnRlcnBy
ZXRlci5oCi0tLSBrZG9tL2VjbWEvU2NyaXB0SW50ZXJwcmV0ZXIuaAk5IEp1bCAyMDA1IDA2OjUz
OjU5IC0wMDAwCTEuMQorKysga2RvbS9lY21hL1NjcmlwdEludGVycHJldGVyLmgJOCBBdWcgMjAw
NSAwODoyNDoxNyAtMDAwMApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgS0RPTQogCWNsYXNz
IFNjcmlwdEludGVycHJldGVyIDogcHVibGljIEtKUzo6SW50ZXJwcmV0ZXIKIAl7CiAJcHVibGlj
OgotCQlTY3JpcHRJbnRlcnByZXRlcihjb25zdCBLSlM6Ok9iamVjdCAmZ2xvYmFsLCBEb2N1bWVu
dEltcGwgKmRvYyk7CisJCVNjcmlwdEludGVycHJldGVyKEtKUzo6T2JqZWN0SW1wICpnbG9iYWws
IERvY3VtZW50SW1wbCAqZG9jKTsKIAkJdmlydHVhbCB+U2NyaXB0SW50ZXJwcmV0ZXIoKTsKIAog
CQlEb2N1bWVudEltcGwgKmRvY3VtZW50KCkgY29uc3Q7CkBAIC02Niw3ICs2Niw3IEBAIG5hbWVz
cGFjZSBLRE9NCiAKIAkvLyBMb29rdXAgb3IgY3JlYXRlIEpTIG9iamVjdCBhcm91bmQgYW4gZXhp
c3RpbmcgIkRPTSBPYmplY3QiCiAJdGVtcGxhdGU8Y2xhc3MgRE9NT2JqPgotCWlubGluZSBLSlM6
OlZhbHVlIGNhY2hlRE9NT2JqZWN0KEtKUzo6RXhlY1N0YXRlICpleGVjLCB0eXBlbmFtZSBET01P
Ymo6OlByaXZhdGUgKmRvbU9iaikKKwlpbmxpbmUgS0pTOjpWYWx1ZUltcCAqY2FjaGVET01PYmpl
Y3QoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIHR5cGVuYW1lIERPTU9iajo6UHJpdmF0ZSAqZG9tT2Jq
KQogCXsKIAkJS0pTOjpPYmplY3RJbXAgKnJldCA9IDA7CiAJCWlmKCFkb21PYmopCkBAIC03NCwx
MiArNzQsMTIgQEAgbmFtZXNwYWNlIEtET00KIAogCQlTY3JpcHRJbnRlcnByZXRlciAqaW50ZXJw
cmV0ZXIgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlciAqPihleGVjLT5pbnRlcnByZXRl
cigpKTsKIAkJaWYoKHJldCA9IGludGVycHJldGVyLT5nZXRET01PYmplY3QoZG9tT2JqKSkpCi0J
CQlyZXR1cm4gS0pTOjpWYWx1ZShyZXQpOworCQkJcmV0dXJuIHJldDsKIAkJZWxzZQogCQl7CiAJ
CQlyZXQgPSBET01PYmooZG9tT2JqKS5icmlkZ2UoZXhlYyk7CiAJCQlpbnRlcnByZXRlci0+cHV0
RE9NT2JqZWN0KGRvbU9iaiwgcmV0KTsKLQkJCXJldHVybiBLSlM6OlZhbHVlKHJldCk7CisJCQly
ZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC04NywxNiArODcsMTYgQEAgbmFtZXNwYWNlIEtET00K
IAkvLyAoVmVyeSBtdWNoIGxpa2UgS0pTOjpjYWNoZUdsb2JhbE9iamVjdCwgd2hpY2ggaXMgZm9y
IGEgc2luZ2xldG9uIE9iamVjdEltcCkKIAkvLyBUaGlzIG9uZSBpcyBfb25seV8gdXNlZCBmb3Ig
Q29uc3RydWN0b3Igb2JqZWN0cy4KIAl0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3NDdG9yPgotCWlubGlu
ZSBLSlM6Ok9iamVjdCBjYWNoZUdsb2JhbEJyaWRnZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCisJaW5saW5lIEtKUzo6T2JqZWN0SW1w
ICpjYWNoZUdsb2JhbEJyaWRnZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpCiAJewotCQlLSlM6OlZhbHVlSW1wICpvYmogPSBzdGF0aWNf
Y2FzdDxLSlM6Ok9iamVjdEltcCo+KGV4ZWMtPmludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgp
LmltcCgpKS0+Z2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7CisJCUtKUzo6VmFsdWVJbXAgKm9iaiA9
IHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wKj4oZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFs
T2JqZWN0KCkpLT5nZXREaXJlY3QocHJvcGVydHlOYW1lKTsKIAkJaWYob2JqKQotCQkJcmV0dXJu
IEtKUzo6T2JqZWN0OjpkeW5hbWljQ2FzdChLSlM6OlZhbHVlKG9iaikpOworCQkJcmV0dXJuIHN0
YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wKj4ob2JqKTsKIAkJZWxzZQogCQl7CiAJCQlDbGFzc0N0
b3IgKmN0b3IgPSBuZXcgQ2xhc3NDdG9yKGV4ZWMpOyAvLyBjcmVhdGUgdGhlIENsYXNzQ3RvciBp
bnN0YW5jZQotCQkJS0pTOjpPYmplY3QgbmV3T2JqZWN0KG5ldyBET01CcmlkZ2VDdG9yPENsYXNz
Q3Rvcj4oZXhlYywgY3RvcikpOyAvLyBjcmVhdGUgdGhlIGJyaWRnZSBhcm91bmQgaXQKLQkJCWV4
ZWMtPmludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpLnB1dChleGVjLCBwcm9wZXJ0eU5hbWUs
IG5ld09iamVjdCwgS0pTOjpJbnRlcm5hbCk7CisJCQlLSlM6Ok9iamVjdEltcCAqbmV3T2JqZWN0
KG5ldyBET01CcmlkZ2VDdG9yPENsYXNzQ3Rvcj4oZXhlYywgY3RvcikpOyAvLyBjcmVhdGUgdGhl
IGJyaWRnZSBhcm91bmQgaXQKKwkJCWV4ZWMtPmludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgp
LT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCBuZXdPYmplY3QsIEtKUzo6SW50ZXJuYWwpOwogCQkJ
cmV0dXJuIG5ld09iamVjdDsKIAkJfQogCX0KSW5kZXg6IGtkb20vZXZlbnRzL0RvY3VtZW50RXZl
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vZXZl
bnRzL0RvY3VtZW50RXZlbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrZG9tL2V2ZW50cy9Eb2N1bWVudEV2ZW50LmNwcAotLS0ga2RvbS9ldmVudHMvRG9j
dW1lbnRFdmVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDowMCAtMDAwMAkxLjEKKysrIGtkb20vZXZl
bnRzL0RvY3VtZW50RXZlbnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MTcgLTAwMDAKQEAgLTQ4LDcg
KzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBF
KCJEb2N1bWVudEV2ZW50IiwgRG9jdW1lbnRFdmVudFByb3RvLCBEb2N1bWVudEV2ZW50UHJvdG9G
dW5jKQogCi1WYWx1ZSBEb2N1bWVudEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50RXZlbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKQEAgLTYyLDkgKzYyLDkgQEAgVmFsdWUgRG9jdW1lbnRFdmVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeAogCXJldHVybiBVbmRlZmluZWQoKTsKIH07CiAKLVZhbHVlIERvY3VtZW50RXZl
bnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRG9jdW1lbnRFdmVudFByb3RvRnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLQlE
b2N1bWVudEV2ZW50IG9iaihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+
KHRoaXNPYmouaW1wKCkpKSk7CisJRG9jdW1lbnRFdmVudCBvYmooY2FzdChleGVjLCB0aGlzT2Jq
KSk7CiAJUV9BU1NFUlQob2JqLmQgIT0gMCk7CiAKIAlLRE9NX0VOVEVSX1NBRkUKSW5kZXg6IGtk
b20vZXZlbnRzL0RvY3VtZW50RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9Eb2N1bWVudEV2ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL0RvY3VtZW50RXZlbnQuaAotLS0g
a2RvbS9ldmVudHMvRG9jdW1lbnRFdmVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6MDAgLTAwMDAJMS4x
CisrKyBrZG9tL2V2ZW50cy9Eb2N1bWVudEV2ZW50LmgJOCBBdWcgMjAwNSAwODoyNDoxOCAtMDAw
MApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlw
dCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ldmVudHMvRXZlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vZXZlbnRzL0V2ZW50LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvRXZl
bnQuY3BwCi0tLSBrZG9tL2V2ZW50cy9FdmVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDowMCAtMDAw
MAkxLjEKKysrIGtkb20vZXZlbnRzL0V2ZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjE4IC0wMDAw
CkBAIC01Niw3ICs1Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5U
X1BST1RPVFlQRSgiRXZlbnQiLCBFdmVudFByb3RvLCBFdmVudFByb3RvRnVuYykKIAotVmFsdWUg
RXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTg1LDcgKzg1LDcgQEAgVmFs
dWUgRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlIAogCQkJCQlyZXR1cm4gb2JqLmNh
Y2hlKGV4ZWMpOwogCQkJfQogCQkJCi0JCQlyZXR1cm4gVmFsdWUoKTsKKwkJCXJldHVybiBWYWx1
ZUltcCgpOwogCQl9CiAJCWNhc2UgRXZlbnRDb25zdGFudHM6OkV2ZW50UGhhc2U6CiAJCQlyZXR1
cm4gTnVtYmVyKGV2ZW50UGhhc2UoKSk7CkBAIC0xMDMsNyArMTAzLDcgQEAgVmFsdWUgRXZlbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlIAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
VmFsdWUgRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJ
S0RPTV9DSEVDS19USElTKEV2ZW50KQogCUtET01fRU5URVJfU0FGRQpAQCAtMTIzLDggKzEyMyw4
IEBAIFZhbHVlIEV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXgKIAkJY2FzZSBFdmVu
dENvbnN0YW50czo6SW5pdEV2ZW50OgogCQl7CiAJCQlET01TdHJpbmcgZXZlbnRUeXBlQXJnID0g
dG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIGNhbkJ1YmJsZUFyZyA9IGFyZ3Nb
MV0udG9Cb29sZWFuKGV4ZWMpOwotCQkJYm9vbCBjYW5jZWxhYmxlQXJnID0gYXJnc1syXS50b0Jv
b2xlYW4oZXhlYyk7CisJCQlib29sIGNhbkJ1YmJsZUFyZyA9IGFyZ3NbMV0tPnRvQm9vbGVhbihl
eGVjKTsKKwkJCWJvb2wgY2FuY2VsYWJsZUFyZyA9IGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKTsK
IAkJCW9iai5pbml0RXZlbnQoZXZlbnRUeXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVB
cmcpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrZG9tL2V2ZW50cy9FdmVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vZXZlbnRz
L0V2ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
ZXZlbnRzL0V2ZW50LmgKLS0tIGtkb20vZXZlbnRzL0V2ZW50LmgJOSBKdWwgMjAwNSAwNjo1NDow
MCAtMDAwMAkxLjEKKysrIGtkb20vZXZlbnRzL0V2ZW50LmgJOCBBdWcgMjAwNSAwODoyNDoxOCAt
MDAwMApAQCAtNzUsNyArNzUsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0JBU0VDTEFTU19H
RVQKIAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiAK
IAlLRE9NX0RFRklORV9DQVNUKEV2ZW50KQpJbmRleDoga2RvbS9ldmVudHMvRXZlbnRFeGNlcHRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vZXZl
bnRzL0V2ZW50RXhjZXB0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uY3BwCi0tLSBrZG9tL2V2ZW50cy9F
dmVudEV4Y2VwdGlvbi5jcHAJOSBKdWwgMjAwNSAwNjo1NDowMCAtMDAwMAkxLjEKKysrIGtkb20v
ZXZlbnRzL0V2ZW50RXhjZXB0aW9uLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjE4IC0wMDAwCkBAIC0z
NCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBFdmVu
dEV4Y2VwdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKkV2ZW50RXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtkb20vZXZl
bnRzL0V2ZW50RXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uaAotLS0ga2Rv
bS9ldmVudHMvRXZlbnRFeGNlcHRpb24uaAk5IEp1bCAyMDA1IDA2OjU0OjAwIC0wMDAwCTEuMQor
Kysga2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uaAk4IEF1ZyAyMDA1IDA4OjI0OjE4IC0wMDAw
CkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0
IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtkb20vZXZlbnRzL0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9FdmVudFRhcmdldC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL0V2
ZW50VGFyZ2V0LmNwcAotLS0ga2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6MDAgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9FdmVudFRhcmdldC5jcHAJOCBBdWcg
MjAwNSAwODoyNDoxOCAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pT
OwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkV2ZW50VGFyZ2V0IiwgRXZlbnRUYXJnZXRQ
cm90bywgRXZlbnRUYXJnZXRQcm90b0Z1bmMpCiAKLVZhbHVlIEV2ZW50VGFyZ2V0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkV2
ZW50VGFyZ2V0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03MCw3ICs3MCw3IEBAIFZhbHVlIEV2ZW50
VGFyZ2V0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWMKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LVZhbHVlIEV2ZW50VGFyZ2V0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkV2ZW50VGFyZ2V0UHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhFdmVudFRhcmdldCkKIAlLRE9NX0VOVEVSX1NB
RkUKQEAgLTExMSw3ICsxMTEsNyBAQCBWYWx1ZSBFdmVudFRhcmdldFByb3RvRnVuYzo6Y2FsbChF
eGVjU3RhCiAJCQkJfQogCQkJfQogCi0JCQlib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLnRvQm9v
bGVhbihleGVjKTsKKwkJCWJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPnRvQm9vbGVhbihleGVj
KTsKIAogCQkJLy8gY3JlYXRlRXZlbnRMaXN0ZW5lciBhdXRvbWF0aWNhbGx5IHJldXNlcyBleGlz
dGluZyBsaXN0ZW5lcnMsIGlmIHBvc3NpYmxlLi4uCiAJCQlpZihpZCA9PSBFdmVudFRhcmdldENv
bnN0YW50czo6QWRkRXZlbnRMaXN0ZW5lcikKSW5kZXg6IGtkb20vZXZlbnRzL0V2ZW50VGFyZ2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMv
RXZlbnRUYXJnZXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIg
a2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuaAotLS0ga2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuaAk3
IEF1ZyAyMDA1IDA2OjE3OjQ0IC0wMDAwCTEuMgorKysga2RvbS9ldmVudHMvRXZlbnRUYXJnZXQu
aAk4IEF1ZyAyMDA1IDA4OjI0OjE4IC0wMDAwCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBL
RE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZh
bHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH0KIApJbmRleDoga2RvbS9ldmVudHMvS2V5Ym9h
cmRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2Rv
bS9ldmVudHMvS2V5Ym9hcmRFdmVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL0tleWJvYXJkRXZlbnQuY3BwCi0tLSBrZG9tL2V2ZW50
cy9LZXlib2FyZEV2ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjAwIC0wMDAwCTEuMQorKysga2Rv
bS9ldmVudHMvS2V5Ym9hcmRFdmVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDoxOCAtMDAwMApAQCAt
NTAsNyArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9U
T1RZUEUoIktleWJvYXJkRXZlbnQiLCBLZXlib2FyZEV2ZW50UHJvdG8sIEtleWJvYXJkRXZlbnRQ
cm90b0Z1bmMpCiAKLVZhbHVlIEtleWJvYXJkRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqS2V5Ym9hcmRFdmVudDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApAQCAtNzIsNyArNzIsNyBAQCBWYWx1ZSBLZXlib2FyZEV2ZW50OjpnZXRW
YWx1ZVByb3BlcnR5KEV4CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBLZXlib2Fy
ZEV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKktleWJvYXJkRXZlbnRQcm90b0Z1bmM6OmNhbGwo
RXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7
CiAJS0RPTV9DSEVDS19USElTKEtleWJvYXJkRXZlbnQpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC04
NywxNSArODcsMTUgQEAgVmFsdWUgS2V5Ym9hcmRFdmVudFByb3RvRnVuYzo6Y2FsbChFeGVjUwog
CQljYXNlIEtleWJvYXJkRXZlbnRDb25zdGFudHM6OkluaXRLZXlib2FyZEV2ZW50OgogCQl7CiAJ
CQlET01TdHJpbmcgdHlwZUFyZyA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMF0pOwotCQkJYm9v
bCBjYW5CdWJibGVBcmcgPSBhcmdzWzFdLnRvQm9vbGVhbihleGVjKTsKLQkJCWJvb2wgY2FuY2Vs
YWJsZUFyZyA9IGFyZ3NbMl0udG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBjYW5CdWJibGVBcmcg
PSBhcmdzWzFdLT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGNhbmNlbGFibGVBcmcgPSBhcmdz
WzJdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlBYnN0cmFjdFZpZXcgdmlld0FyZyA9IGVjbWFfY2Fz
dDxBYnN0cmFjdFZpZXc+KGV4ZWMsIGFyZ3NbM10sICZ0b0Fic3RyYWN0Vmlldyk7CiAJCQlET01T
dHJpbmcga2V5SWRlbnRpZmllckFyZyA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbNF0pOwotCQkJ
bG9uZyBrZXlMb2NhdGlvbkFyZyA9IGFyZ3NbNV0udG9JbnQzMihleGVjKTsKLQkJCWJvb2wgY3Ry
bEtleUFyZyA9IGFyZ3NbNl0udG9Cb29sZWFuKGV4ZWMpOwotCQkJYm9vbCBhbHRLZXlBcmcgPSBh
cmdzWzddLnRvQm9vbGVhbihleGVjKTsKLQkJCWJvb2wgc2hpZnRLZXlBcmcgPSBhcmdzWzhdLnRv
Qm9vbGVhbihleGVjKTsKLQkJCWJvb2wgbWV0YUtleUFyZyA9IGFyZ3NbOV0udG9Cb29sZWFuKGV4
ZWMpOworCQkJbG9uZyBrZXlMb2NhdGlvbkFyZyA9IGFyZ3NbNV0tPnRvSW50MzIoZXhlYyk7CisJ
CQlib29sIGN0cmxLZXlBcmcgPSBhcmdzWzZdLT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGFs
dEtleUFyZyA9IGFyZ3NbN10tPnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgc2hpZnRLZXlBcmcg
PSBhcmdzWzhdLT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIG1ldGFLZXlBcmcgPSBhcmdzWzld
LT50b0Jvb2xlYW4oZXhlYyk7CiAKIAkJCW9iai5pbml0S2V5Ym9hcmRFdmVudCh0eXBlQXJnLCBj
YW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGtleUlkZW50aWZpZXJBcmcsIGtl
eUxvY2F0aW9uQXJnLCBjdHJsS2V5QXJnLCBhbHRLZXlBcmcsIHNoaWZ0S2V5QXJnLCBtZXRhS2V5
QXJnKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKSW5kZXg6IGtkb20vZXZlbnRzL0tleWJvYXJk
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2
ZW50cy9LZXlib2FyZEV2ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtkb20vZXZlbnRzL0tleWJvYXJkRXZlbnQuaAotLS0ga2RvbS9ldmVudHMvS2V5Ym9h
cmRFdmVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6MDAgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9L
ZXlib2FyZEV2ZW50LmgJOCBBdWcgMjAwNSAwODoyNDoxOCAtMDAwMApAQCAtOTMsNyArOTMsNyBA
QCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01f
R0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBr
ZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvTW91c2VFdmVudC5jcHAKLS0tIGtk
b20vZXZlbnRzL01vdXNlRXZlbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MDAgLTAwMDAJMS4xCisr
KyBrZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjE4IC0wMDAwCkBA
IC01Myw3ICs1Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BS
T1RPVFlQRSgiTW91c2VFdmVudCIsIE1vdXNlRXZlbnRQcm90bywgTW91c2VFdmVudFByb3RvRnVu
YykKIAotVmFsdWUgTW91c2VFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpNb3VzZUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQog
CkBAIC05Myw3ICs5Myw3IEBAIFZhbHVlIE1vdXNlRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1MKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIE1vdXNlRXZlbnRQcm90b0Z1bmM6
OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CitWYWx1ZUltcCAqTW91c2VFdmVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMo
TW91c2VFdmVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTEwMywxOSArMTAzLDE5IEBAIFZhbHVl
IE1vdXNlRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXQKIAkJY2FzZSBNb3VzZUV2ZW50Q29u
c3RhbnRzOjpJbml0TW91c2VFdmVudDoKIAkJewogCQkJRE9NU3RyaW5nIHR5cGVBcmcgPSB0b0RP
TVN0cmluZyhleGVjLCBhcmdzWzBdKTsKLQkJCWJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS50
b0Jvb2xlYW4oZXhlYyk7Ci0JCQlib29sIGNhbmNlbGFibGVBcmcgPSBhcmdzWzJdLnRvQm9vbGVh
bihleGVjKTsKKwkJCWJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMp
OworCQkJYm9vbCBjYW5jZWxhYmxlQXJnID0gYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpOwogCQkJ
QWJzdHJhY3RWaWV3IHZpZXdBcmcgPSBlY21hX2Nhc3Q8QWJzdHJhY3RWaWV3PihleGVjLCBhcmdz
WzNdLCAmdG9BYnN0cmFjdFZpZXcpOwotCQkJbG9uZyBkZXRhaWxBcmcgPSBhcmdzWzRdLnRvSW50
MzIoZXhlYyk7Ci0JCQlsb25nIHNjcmVlblhBcmcgPSBhcmdzWzVdLnRvSW50MzIoZXhlYyk7Ci0J
CQlsb25nIHNjcmVlbllBcmcgPSBhcmdzWzZdLnRvSW50MzIoZXhlYyk7Ci0JCQlsb25nIGNsaWVu
dFhBcmcgPSBhcmdzWzddLnRvSW50MzIoZXhlYyk7Ci0JCQlsb25nIGNsaWVudFlBcmcgPSBhcmdz
WzhdLnRvSW50MzIoZXhlYyk7Ci0JCQlib29sIGN0cmxLZXlBcmcgPSBhcmdzWzldLnRvQm9vbGVh
bihleGVjKTsKLQkJCWJvb2wgYWx0S2V5QXJnID0gYXJnc1sxMF0udG9Cb29sZWFuKGV4ZWMpOwot
CQkJYm9vbCBzaGlmdEtleUFyZyA9IGFyZ3NbMTFdLnRvQm9vbGVhbihleGVjKTsKLQkJCWJvb2wg
bWV0YUtleUFyZyA9IGFyZ3NbMTJdLnRvQm9vbGVhbihleGVjKTsKLQkJCXVuc2lnbmVkIHNob3J0
IGJ1dHRvbkFyZyA9IGFyZ3NbMTNdLnRvVUludDE2KGV4ZWMpOworCQkJbG9uZyBkZXRhaWxBcmcg
PSBhcmdzWzRdLT50b0ludDMyKGV4ZWMpOworCQkJbG9uZyBzY3JlZW5YQXJnID0gYXJnc1s1XS0+
dG9JbnQzMihleGVjKTsKKwkJCWxvbmcgc2NyZWVuWUFyZyA9IGFyZ3NbNl0tPnRvSW50MzIoZXhl
Yyk7CisJCQlsb25nIGNsaWVudFhBcmcgPSBhcmdzWzddLT50b0ludDMyKGV4ZWMpOworCQkJbG9u
ZyBjbGllbnRZQXJnID0gYXJnc1s4XS0+dG9JbnQzMihleGVjKTsKKwkJCWJvb2wgY3RybEtleUFy
ZyA9IGFyZ3NbOV0tPnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgYWx0S2V5QXJnID0gYXJnc1sx
MF0tPnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgc2hpZnRLZXlBcmcgPSBhcmdzWzExXS0+dG9C
b29sZWFuKGV4ZWMpOworCQkJYm9vbCBtZXRhS2V5QXJnID0gYXJnc1sxMl0tPnRvQm9vbGVhbihl
eGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IGJ1dHRvbkFyZyA9IGFyZ3NbMTNdLT50b1VJbnQxNihl
eGVjKTsKIAkJCU5vZGUgcmVsYXRlZFRhcmdldEFyZyA9IGVjbWFfY2FzdDxOb2RlPihleGVjLCBh
cmdzWzE0XSwgJnRvTm9kZSk7CiAKIAkJCW9iai5pbml0TW91c2VFdmVudCh0eXBlQXJnLCBjYW5C
dWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZywgc2NyZWVuWEFyZywg
c2NyZWVuWUFyZywgY2xpZW50WEFyZywgY2xpZW50WUFyZywgY3RybEtleUFyZywgYWx0S2V5QXJn
LCBzaGlmdEtleUFyZywgbWV0YUtleUFyZywgYnV0dG9uQXJnLCByZWxhdGVkVGFyZ2V0QXJnKTsK
SW5kZXg6IGtkb20vZXZlbnRzL01vdXNlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL01vdXNlRXZlbnQuaAotLS0g
a2RvbS9ldmVudHMvTW91c2VFdmVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6MDAgLTAwMDAJMS4xCisr
KyBrZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmgJOCBBdWcgMjAwNSAwODoyNDoxOCAtMDAwMApAQCAt
NjQsNyArNjQsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0
aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrZG9tL2V2ZW50cy9NdXRhdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9NdXRhdGlvbkV2ZW50LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvTXV0
YXRpb25FdmVudC5jcHAKLS0tIGtkb20vZXZlbnRzL011dGF0aW9uRXZlbnQuY3BwCTkgSnVsIDIw
MDUgMDY6NTQ6MDEgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9NdXRhdGlvbkV2ZW50LmNwcAk4
IEF1ZyAyMDA1IDA4OjI0OjE5IC0wMDAwCkBAIC00OSw3ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiTXV0YXRpb25FdmVudCIsIE11dGF0
aW9uRXZlbnRQcm90bywgTXV0YXRpb25FdmVudFByb3RvRnVuYykKIAotVmFsdWUgTXV0YXRpb25F
dmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpNdXRhdGlvbkV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03Myw3ICs3Myw3
IEBAIFZhbHVlIE11dGF0aW9uRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLVZhbHVlIE11dGF0aW9uRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAq
TXV0YXRpb25FdmVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAq
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoTXV0YXRpb25F
dmVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTgzLDEzICs4MywxMyBAQCBWYWx1ZSBNdXRhdGlv
bkV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTCiAJCWNhc2UgTXV0YXRpb25FdmVudENvbnN0YW50
czo6SW5pdE11dGF0aW9uRXZlbnQ6CiAJCXsKIAkJCURPTVN0cmluZyB0eXBlQXJnID0gdG9ET01T
dHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIGNhbkJ1YmJsZUFyZyA9IGFyZ3NbMV0udG9C
b29sZWFuKGV4ZWMpOwotCQkJYm9vbCBjYW5jZWxhYmxlQXJnID0gYXJnc1syXS50b0Jvb2xlYW4o
ZXhlYyk7CisJCQlib29sIGNhbkJ1YmJsZUFyZyA9IGFyZ3NbMV0tPnRvQm9vbGVhbihleGVjKTsK
KwkJCWJvb2wgY2FuY2VsYWJsZUFyZyA9IGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKTsKIAkJCU5v
ZGUgcmVsYXRlZE5vZGVBcmcgPSBlY21hX2Nhc3Q8Tm9kZT4oZXhlYywgYXJnc1szXSwgJnRvTm9k
ZSk7CiAJCQlET01TdHJpbmcgcHJldlZhbHVlQXJnID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1s0
XSk7CiAJCQlET01TdHJpbmcgbmV3VmFsdWVBcmcgPSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzVd
KTsKIAkJCURPTVN0cmluZyBhdHRyTmFtZUFyZyA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbNl0p
OwotCQkJdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyA9IGFyZ3NbN10udG9VSW50MTYoZXhl
Yyk7CisJCQl1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnID0gYXJnc1s3XS0+dG9VSW50MTYo
ZXhlYyk7CiAKIAkJCW9iai5pbml0TXV0YXRpb25FdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcs
IGNhbmNlbGFibGVBcmcsIHJlbGF0ZWROb2RlQXJnLCBwcmV2VmFsdWVBcmcsIG5ld1ZhbHVlQXJn
LCBhdHRyTmFtZUFyZywgYXR0ckNoYW5nZUFyZyk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7Cklu
ZGV4OiBrZG9tL2V2ZW50cy9NdXRhdGlvbkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvTXV0YXRpb25FdmVudC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9NdXRhdGlvbkV2ZW50
LmgKLS0tIGtkb20vZXZlbnRzL011dGF0aW9uRXZlbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjAxIC0w
MDAwCTEuMQorKysga2RvbS9ldmVudHMvTXV0YXRpb25FdmVudC5oCTggQXVnIDIwMDUgMDg6MjQ6
MTkgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVj
bWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ldmVudHMvVUlFdmVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvVUlFdmVudC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL1VJ
RXZlbnQuY3BwCi0tLSBrZG9tL2V2ZW50cy9VSUV2ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjAx
IC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvVUlFdmVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDox
OSAtMDAwMApAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lN
UExFTUVOVF9QUk9UT1RZUEUoIlVJRXZlbnQiLCBVSUV2ZW50UHJvdG8sIFVJRXZlbnRQcm90b0Z1
bmMpCiAKLVZhbHVlIFVJRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqVUlFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAt
NjUsNyArNjUsNyBAQCBWYWx1ZSBVSUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0CiAJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBVSUV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJ
bXAgKlVJRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFVJRXZlbnQpCiAJ
S0RPTV9FTlRFUl9TQUZFCkBAIC03NSwxMCArNzUsMTAgQEAgVmFsdWUgVUlFdmVudFByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUgKgogCQljYXNlIFVJRXZlbnRDb25zdGFudHM6OkluaXRVSUV2ZW50
OgogCQl7CiAJCQlET01TdHJpbmcgdHlwZUFyZyA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMF0p
OwotCQkJYm9vbCBjYW5CdWJibGVBcmcgPSBhcmdzWzFdLnRvQm9vbGVhbihleGVjKTsKLQkJCWJv
b2wgY2FuY2VsYWJsZUFyZyA9IGFyZ3NbMl0udG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBjYW5C
dWJibGVBcmcgPSBhcmdzWzFdLT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGNhbmNlbGFibGVB
cmcgPSBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlBYnN0cmFjdFZpZXcgdmlld0FyZyA9
IGVjbWFfY2FzdDxBYnN0cmFjdFZpZXc+KGV4ZWMsIGFyZ3NbM10sICZ0b0Fic3RyYWN0Vmlldyk7
Ci0JCQlsb25nIGRldGFpbEFyZyA9IGFyZ3NbNF0udG9JbnQzMihleGVjKTsKKwkJCWxvbmcgZGV0
YWlsQXJnID0gYXJnc1s0XS0+dG9JbnQzMihleGVjKTsKIAkJCW9iai5pbml0VUlFdmVudCh0eXBl
QXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZyk7CiAJ
CQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KSW5kZXg6IGtkb20vZXZlbnRzL1VJRXZlbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9VSUV2
ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZl
bnRzL1VJRXZlbnQuaAotLS0ga2RvbS9ldmVudHMvVUlFdmVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6
MDEgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9VSUV2ZW50LmgJOCBBdWcgMjAwNSAwODoyNDox
OSAtMDAwMApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNt
YVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlzdGVuZXJJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50
cy9pbXBsL0V2ZW50TGlzdGVuZXJJbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvaW1wbC9FdmVudExpc3RlbmVySW1wbC5jcHAKLS0t
IGtkb20vZXZlbnRzL2ltcGwvRXZlbnRMaXN0ZW5lckltcGwuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6
MDMgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlzdGVuZXJJbXBsLmNwcAk4
IEF1ZyAyMDA1IDA4OjI0OjE5IC0wMDAwCkBAIC0zMywxNCArMzMsMTYgQEAgRXZlbnRMaXN0ZW5l
ckltcGw6OkV2ZW50TGlzdGVuZXJJbXBsKCkgOgogCW1fZG9jID0gMDsKIAltX2VjbWFFdmVudExp
c3RlbmVyID0gZmFsc2U7CiAKLQltX2xpc3RlbmVyID0gS0pTOjpPYmplY3QoKTsKLQltX2NvbXBh
cmVMaXN0ZW5lciA9IEtKUzo6VmFsdWUoKTsKKwltX2xpc3RlbmVyID0gbmV3IEtKUzo6T2JqZWN0
SW1wKCk7CisJbV9jb21wYXJlTGlzdGVuZXIgPSBuZXcgS0pTOjpWYWx1ZUltcCgpOwogfQogCiBF
dmVudExpc3RlbmVySW1wbDo6fkV2ZW50TGlzdGVuZXJJbXBsKCkKIHsKIAlpZihtX2RvYyAmJiBt
X2RvYy0+ZWNtYUVuZ2luZSgpICYmIG1fZWNtYUV2ZW50TGlzdGVuZXIpCi0JCW1fZG9jLT5lY21h
RW5naW5lKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAg
Kj4obV9jb21wYXJlTGlzdGVuZXIuaW1wKCkpKTsKKwkJbV9kb2MtPmVjbWFFbmdpbmUoKS0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcihzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihtX2NvbXBhcmVM
aXN0ZW5lcikpOworICAgICAgICBkZWxldGUgbV9saXN0ZW5lcjsKKyAgICAgICAgZGVsZXRlIG1f
Y29tcGFyZUxpc3RlbmVyOwogfQogCiB2b2lkIEV2ZW50TGlzdGVuZXJJbXBsOjpoYW5kbGVFdmVu
dChFdmVudEltcGwgKmV2dCkKQEAgLTY3LDggKzY5LDggQEAgdm9pZCBFdmVudExpc3RlbmVySW1w
bDo6aGFuZGxlRXZlbnQoRXZlbgogCQlpbnRlcnByZXRlci0+c2V0Q3VycmVudEV2ZW50KGV2dCk7
CiAKIAkJLy8gQ2FsbCBpdCEKLQkJS0pTOjpPYmplY3QgdGhpc09iaiA9IEtKUzo6T2JqZWN0Ojpk
eW5hbWljQ2FzdChzYWZlX2NhY2hlPEV2ZW50VGFyZ2V0PihleGVjLCBldnRPYmouY3VycmVudFRh
cmdldCgpKSk7Ci0JCUtKUzo6VmFsdWUgcmV0VmFsID0gbV9saXN0ZW5lci5jYWxsKGV4ZWMsIHRo
aXNPYmosIGFyZ3MpOworCQlLSlM6Ok9iamVjdEltcCAqdGhpc09iaiA9IEtKUzo6T2JqZWN0Ojpk
eW5hbWljQ2FzdChzYWZlX2NhY2hlPEV2ZW50VGFyZ2V0PihleGVjLCBldnRPYmouY3VycmVudFRh
cmdldCgpKSk7CisJCUtKUzo6VmFsdWVJbXAgKnJldFZhbCA9IG1fbGlzdGVuZXIuY2FsbChleGVj
LCB0aGlzT2JqLCBhcmdzKTsKIAogCQkvLyBSZXNldCBjdXJyZW50IGV2ZW50IGFmdGVyIHByb2Nl
c3NpbmcKIAkJaW50ZXJwcmV0ZXItPnNldEN1cnJlbnRFdmVudCgwKTsKQEAgLTk0LDE4ICs5Niwx
OCBAQCBET01TdHJpbmcgRXZlbnRMaXN0ZW5lckltcGw6OmludGVybmFsVHlwCiAJcmV0dXJuIG1f
aW50ZXJuYWxUeXBlOwogfQogCi1LSlM6OlZhbHVlIEV2ZW50TGlzdGVuZXJJbXBsOjplY21hTGlz
dGVuZXIoKSBjb25zdAorS0pTOjpWYWx1ZUltcCAqRXZlbnRMaXN0ZW5lckltcGw6OmVjbWFMaXN0
ZW5lcigpIGNvbnN0CiB7CiAJaWYoIW1fZWNtYUV2ZW50TGlzdGVuZXIpCi0JCXJldHVybiBLSlM6
OlZhbHVlKCk7CisJCXJldHVybiBLSlM6OlZhbHVlSW1wKCk7CiAKIAlyZXR1cm4gbV9jb21wYXJl
TGlzdGVuZXI7CiB9CiAKLXZvaWQgRXZlbnRMaXN0ZW5lckltcGw6OmluaXRMaXN0ZW5lcihEb2N1
bWVudEltcGwgKmRvYywgYm9vbCBlY21hRXZlbnRMaXN0ZW5lciwgS0pTOjpPYmplY3QgbGlzdGVu
ZXIsIEtKUzo6VmFsdWUgY29tcGFyZUxpc3RlbmVyLCBjb25zdCBET01TdHJpbmcgJmludGVybmFs
VHlwZSkKK3ZvaWQgRXZlbnRMaXN0ZW5lckltcGw6OmluaXRMaXN0ZW5lcihEb2N1bWVudEltcGwg
KmRvYywgYm9vbCBlY21hRXZlbnRMaXN0ZW5lciwgS0pTOjpPYmplY3RJbXAgKmxpc3RlbmVyLCBL
SlM6OlZhbHVlSW1wICpjb21wYXJlTGlzdGVuZXIsIGNvbnN0IERPTVN0cmluZyAmaW50ZXJuYWxU
eXBlKQogewogCWlmKCFsaXN0ZW5lci5pc1ZhbGlkKCkgfHwgIWxpc3RlbmVyLmltcGxlbWVudHND
YWxsKCkpCi0JCWtkRXJyb3IoKSA8PCAiRWNtYVNjcmlwdCBsaXN0ZW5lciBvYmplY3QgIiA8PCBs
aXN0ZW5lci5pbXAoKSA8PCAiIGlzIG5vdCB2YWxpZCBvciBkb2Vzbid0IGltcGxlbWVudCBhIGNh
bGwhIiA8PCBlbmRsOworCQlrZEVycm9yKCkgPDwgIkVjbWFTY3JpcHQgbGlzdGVuZXIgb2JqZWN0
ICIgPDwgbGlzdGVuZXIgPDwgIiBpcyBub3QgdmFsaWQgb3IgZG9lc24ndCBpbXBsZW1lbnQgYSBj
YWxsISIgPDwgZW5kbDsKIAogCW1fZG9jID0gZG9jOwogCW1fbGlzdGVuZXIgPSBsaXN0ZW5lcjsK
SW5kZXg6IGtkb20vZXZlbnRzL2ltcGwvRXZlbnRMaXN0ZW5lckltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlzdGVu
ZXJJbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
ZXZlbnRzL2ltcGwvRXZlbnRMaXN0ZW5lckltcGwuaAotLS0ga2RvbS9ldmVudHMvaW1wbC9FdmVu
dExpc3RlbmVySW1wbC5oCTkgSnVsIDIwMDUgMDY6NTQ6MDMgLTAwMDAJMS4xCisrKyBrZG9tL2V2
ZW50cy9pbXBsL0V2ZW50TGlzdGVuZXJJbXBsLmgJOCBBdWcgMjAwNSAwODoyNDoxOSAtMDAwMApA
QCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBLRE9NCiAJCXZpcnR1YWwgdm9pZCBoYW5kbGVF
dmVudChFdmVudEltcGwgKmV2dCk7CiAJCQogCQlET01TdHJpbmcgaW50ZXJuYWxUeXBlKCkgY29u
c3Q7Ci0JCUtKUzo6VmFsdWUgZWNtYUxpc3RlbmVyKCkgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmVjbWFMaXN0ZW5lcigpIGNvbnN0OwogCiAJCS8vIEludGVybmFsCi0JCXZvaWQgaW5pdExpc3Rl
bmVyKERvY3VtZW50SW1wbCAqZG9jLCBib29sIGVjbWFFdmVudExpc3RlbmVyLCBLSlM6Ok9iamVj
dCBsaXN0ZW5lciwgS0pTOjpWYWx1ZSBjb21wYXJlTGlzdGVuZXIsIGNvbnN0IERPTVN0cmluZyAm
aW50ZXJuYWxUeXBlKTsKKwkJdm9pZCBpbml0TGlzdGVuZXIoRG9jdW1lbnRJbXBsICpkb2MsIGJv
b2wgZWNtYUV2ZW50TGlzdGVuZXIsIEtKUzo6T2JqZWN0SW1wICpsaXN0ZW5lciwgS0pTOjpWYWx1
ZUltcCAqY29tcGFyZUxpc3RlbmVyLCBjb25zdCBET01TdHJpbmcgJmludGVybmFsVHlwZSk7CiAK
IAlwcml2YXRlOgogCQlEb2N1bWVudEltcGwgKm1fZG9jOwpAQCAtNDksOCArNDksOCBAQCBuYW1l
c3BhY2UgS0RPTQogCQlib29sIG1fZWNtYUV2ZW50TGlzdGVuZXI7CiAJCURPTVN0cmluZyBtX2lu
dGVybmFsVHlwZTsKIAotCQlLSlM6Ok9iamVjdCBtX2xpc3RlbmVyOwotCQlLSlM6OlZhbHVlIG1f
Y29tcGFyZUxpc3RlbmVyOworCQlLSlM6Ok9iamVjdEltcCAqbV9saXN0ZW5lcjsKKwkJS0pTOjpW
YWx1ZUltcCAqbV9jb21wYXJlTGlzdGVuZXI7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vaW1wbC9E
T01Vc2VyRGF0YUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rZG9tL2ltcGwvRE9NVXNlckRhdGFJbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtkb20vaW1wbC9ET01Vc2VyRGF0YUltcGwuaAotLS0ga2RvbS9pbXBs
L0RPTVVzZXJEYXRhSW1wbC5oCTkgSnVsIDIwMDUgMDY6NTQ6MDYgLTAwMDAJMS4xCisrKyBrZG9t
L2ltcGwvRE9NVXNlckRhdGFJbXBsLmgJOCBBdWcgMjAwNSAwODoyNDoxOSAtMDAwMApAQCAtNzQs
MjAgKzc0LDIwIEBAIG5hbWVzcGFjZSBLRE9NCiAKIAkJRE9NVXNlckRhdGFJbXBsICppbXBsKCkg
Y29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CiAKLQkJdmlydHVhbCBLSlM6OlZhbHVlIGdldChLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNv
bnN0CisJCXZpcnR1YWwgS0pTOjpWYWx1ZUltcCAqZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBj
b25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKIAkJewogCQkJa2REZWJ1
ZygyNjAwNCkgPDwgIkRPTUJyaWRnZTo6Z2V0KCksICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmco
KSA8PCAiIE5hbWU6ICIgPDwgY2xhc3NJbmZvKCktPmNsYXNzTmFtZSA8PCAiIE9iamVjdDogIiA8
PCB0aGlzLT5tX2ltcGwgPDwgZW5kbDsKIAogCQkJLy8gTG9vayBmb3Igc3RhbmRhcmQgcHJvcGVy
dGllcyAoZS5nLiB0aG9zZSBpbiB0aGUgaGFzaHRhYmxlcykKIAkJCURPTVVzZXJEYXRhIG9iaiht
X2ltcGwpOwotCQkJS0pTOjpWYWx1ZSB2YWwgPSBvYmouZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwg
dGhpcyk7CisJCQlLSlM6OlZhbHVlSW1wICp2YWwgPSBvYmouZ2V0KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdGhpcyk7CiAKLQkJCWlmKHZhbC50eXBlKCkgIT0gS0pTOjpVbmRlZmluZWRUeXBlKQorCQkJ
aWYodmFsLT50eXBlKCkgIT0gS0pTOjpVbmRlZmluZWRUeXBlKQogCQkJCXJldHVybiB2YWw7CiAK
IAkJCS8vIE5vdCBmb3VuZCAtPiBmb3J3YXJkIHRvIE9iamVjdEltcC4KIAkJCXZhbCA9IEtKUzo6
T2JqZWN0SW1wOjpnZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKLQkJCWlmKHZhbC50eXBlKCkgPT0g
S0pTOjpVbmRlZmluZWRUeXBlKQorCQkJaWYodmFsLT50eXBlKCkgPT0gS0pTOjpVbmRlZmluZWRU
eXBlKQogCQkJCWtkRGVidWcoMjYwMDQpIDw8ICJXQVJOSU5HOiAiIDw8IHByb3BlcnR5TmFtZS5x
c3RyaW5nKCkgPDwgIiBub3QgZm91bmQgaW4uLi4gTmFtZTogIiA8PCBjbGFzc0luZm8oKS0+Y2xh
c3NOYW1lIDw8ICIgT2JqZWN0OiAiIDw8IG1faW1wbCA8PCAiIG9uIGxpbmUgOiAiIDw8IGV4ZWMt
PmNvbnRleHQoKS5jdXJTdG10Rmlyc3RMaW5lKCkgPDwgZW5kbDsKIAogCQkJcmV0dXJuIHZhbDsK
QEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQl9CiAKIAkJdmlydHVhbCBjb25z
dCBLSlM6OkNsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJkRPTVVzZXJEYXRh
OjpzX2NsYXNzSW5mbzsgfQotCQl2aXJ0dWFsIEtKUzo6VmFsdWUgdG9QcmltaXRpdmUoS0pTOjpF
eGVjU3RhdGUgKiwgS0pTOjpUeXBlID0gS0pTOjpVbmRlZmluZWRUeXBlKSBjb25zdAorCQl2aXJ0
dWFsIEtKUzo6VmFsdWVJbXAgKnRvUHJpbWl0aXZlKEtKUzo6RXhlY1N0YXRlICosIEtKUzo6VHlw
ZSA9IEtKUzo6VW5kZWZpbmVkVHlwZSkgY29uc3QKIAkJewogCQkJa2REZWJ1ZygpIDw8IGtfZnVu
Y2luZm8gPDwgZW5kbDsKIAkJCWlmKG1faW1wbCAmJiAoKigoYm9vbCAqKShtX2ltcGwtPnVzZXJE
YXRhKCkpKSkpCkluZGV4OiBrZG9tL2xzL0xTRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTRXhjZXB0aW9uLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU0V4Y2VwdGlvbi5j
cHAKLS0tIGtkb20vbHMvTFNFeGNlcHRpb24uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MTQgLTAwMDAJ
MS4xCisrKyBrZG9tL2xzL0xTRXhjZXB0aW9uLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjE5IC0wMDAw
CkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1
ZSBMU0V4Y2VwdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKkxTRXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtkb20vbHMv
TFNFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL2xzL0xTRXhjZXB0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtkb20vbHMvTFNFeGNlcHRpb24uaAotLS0ga2RvbS9scy9MU0V4Y2VwdGlvbi5oCTkg
SnVsIDIwMDUgMDY6NTQ6MTQgLTAwMDAJMS4xCisrKyBrZG9tL2xzL0xTRXhjZXB0aW9uLmgJOCBB
dWcgMjAwNSAwODoyNDoxOSAtMDAwMApAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgS0RPTQog
CXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2xzL0xTSW5wdXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vbHMvTFNJbnB1
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vbHMv
TFNJbnB1dC5jcHAKLS0tIGtkb20vbHMvTFNJbnB1dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDoxNCAt
MDAwMAkxLjEKKysrIGtkb20vbHMvTFNJbnB1dC5jcHAJOCBBdWcgMjAwNSAwODoyNDoxOSAtMDAw
MApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFs
dWUgTFNJbnB1dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpMU0lucHV0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogI2lmbmRlZiBBUFBMRV9DT01QSUxFX0hBQ0sKIAlLRE9N
X0VOVEVSX1NBRkUKQEAgLTgwLDcgKzgwLDcgQEAgVmFsdWUgTFNJbnB1dDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBMU0lucHV0Ojpw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAm
dmFsdWUsIGludCkKK3ZvaWQgTFNJbnB1dDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZF
CiAKSW5kZXg6IGtkb20vbHMvTFNJbnB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tkb20vbHMvTFNJbnB1dC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTSW5wdXQuaAotLS0ga2RvbS9scy9MU0lucHV0LmgJ
OSBKdWwgMjAwNSAwNjo1NDoxNCAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNJbnB1dC5oCTggQXVn
IDIwMDUgMDg6MjQ6MTkgLTAwMDAKQEAgLTE1OSw4ICsxNTksOCBAQCBuYW1lc3BhY2UgS0RPTQog
CQlLRE9NX1BVVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVl
ICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFs
dWUsIGludCBhdHRyKTsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChMU0lucHV0KQpJbmRleDog
a2RvbS9scy9MU091dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9scy9MU091dHB1dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtkb20vbHMvTFNPdXRwdXQuY3BwCi0tLSBrZG9tL2xzL0xTT3V0cHV0LmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjE0IC0wMDAwCTEuMQorKysga2RvbS9scy9MU091dHB1dC5jcHAJ
OCBBdWcgMjAwNSAwODoyNDoyMCAtMDAwMApAQCAtNDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgTFNPdXRwdXQ6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqTFNPdXRwdXQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9F
TlRFUl9TQUZFCiAKQEAgLTU4LDcgKzU4LDcgQEAgVmFsdWUgTFNPdXRwdXQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBMU091dHB1dDo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUg
JnZhbHVlLCBpbnQpCit2b2lkIExTT3V0cHV0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NB
RkUKIApJbmRleDoga2RvbS9scy9MU091dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vbHMvTFNPdXRwdXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU091dHB1dC5oCi0tLSBrZG9tL2xzL0xTT3V0
cHV0LmgJOSBKdWwgMjAwNSAwNjo1NDoxNCAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNPdXRwdXQu
aAk4IEF1ZyAyMDA1IDA4OjI0OjIwIC0wMDAwCkBAIC04NSw4ICs4NSw4IEBAIG5hbWVzcGFjZSBL
RE9NCiAJCUtET01fUFVUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6
VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKExTT3V0cHV0KQpJ
bmRleDoga2RvbS9scy9MU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva2RvbS9scy9MU1BhcnNlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtkb20vbHMvTFNQYXJzZXIuY3BwCi0tLSBrZG9tL2xzL0xTUGFy
c2VyLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjE0IC0wMDAwCTEuMQorKysga2RvbS9scy9MU1BhcnNl
ci5jcHAJOCBBdWcgMjAwNSAwODoyNDoyMCAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCB1c2luZyBu
YW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkxTUGFyc2VyIiwgTFNQ
YXJzZXJQcm90bywgTFNQYXJzZXJQcm90b0Z1bmMpCiAKLVZhbHVlIExTUGFyc2VyOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkxT
UGFyc2VyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC04MCw3ICs4MCw3IEBAIFZhbHVlIExTUGFyc2Vy
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZv
aWQgTFNQYXJzZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlICYgLyogdmFsdWUgKi8sIGludCkKK3ZvaWQgTFNQYXJzZXI6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICogLyogdmFsdWUg
Ki8sIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtOTUsNyArOTUsNyBAQCB2b2lkIExT
UGFyc2VyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0CiAJS0RPTV9MRUFWRV9TQUZFKERPTUV4
Y2VwdGlvbikKIH0KIAotVmFsdWUgTFNQYXJzZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqTFNQYXJz
ZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKExTUGFyc2VyKQogCUtET01fRU5U
RVJfU0FGRQpAQCAtMTE3LDcgKzExNyw3IEBAIFZhbHVlIExTUGFyc2VyUHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAKIAkJewogCQkJTFNJbnB1dCBpbnB1dCA9IGVjbWFfY2FzdDxMU0lucHV0Pihl
eGVjLCBhcmdzWzBdLCAmdG9MU0lucHV0KTsKIAkJCU5vZGUgY29udGV4dEFyZyA9IGVjbWFfY2Fz
dDxOb2RlPihleGVjLCBhcmdzWzFdLCAmdG9Ob2RlKTsKLQkJCXVuc2lnbmVkIHNob3J0IGFjdGlv
biA9IGFyZ3NbMl0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCBhY3Rpb24gPSBh
cmdzWzJdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG9iai5w
YXJzZVdpdGhDb250ZXh0KGlucHV0LCBjb250ZXh0QXJnLCBhY3Rpb24pKTsKIAkJfQogCQljYXNl
IExTUGFyc2VyQ29uc3RhbnRzOjpBYm9ydDoKSW5kZXg6IGtkb20vbHMvTFNQYXJzZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTUGFyc2VyLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vbHMvTFNQYXJz
ZXIuaAotLS0ga2RvbS9scy9MU1BhcnNlci5oCTkgSnVsIDIwMDUgMDY6NTQ6MTQgLTAwMDAJMS4x
CisrKyBrZG9tL2xzL0xTUGFyc2VyLmgJOCBBdWcgMjAwNSAwODoyNDoyMCAtMDAwMApAQCAtMTUy
LDggKzE1Miw4IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9N
X1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07
CiB9OwogCkluZGV4OiBrZG9tL2xzL0xTUGFyc2VyRmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTUGFyc2VyRmlsdGVyLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU1BhcnNlckZp
bHRlci5jcHAKLS0tIGtkb20vbHMvTFNQYXJzZXJGaWx0ZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6
MTUgLTAwMDAJMS4xCisrKyBrZG9tL2xzL0xTUGFyc2VyRmlsdGVyLmNwcAk4IEF1ZyAyMDA1IDA4
OjI0OjIwIC0wMDAwCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtE
T01fSU1QTEVNRU5UX1BST1RPVFlQRSgiTFNQYXJzZXJGaWx0ZXIiLCBMU1BhcnNlckZpbHRlclBy
b3RvLCBMU1BhcnNlckZpbHRlclByb3RvRnVuYykKIAotVmFsdWUgTFNQYXJzZXJGaWx0ZXI6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqTFNQYXJzZXJGaWx0ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY0LDcgKzY0LDcgQEAgVmFs
dWUgTFNQYXJzZXJGaWx0ZXI6OmdldFZhbHVlUHJvcGVydHkoRQogCXJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotVmFsdWUgTFNQYXJzZXJGaWx0ZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqTFNQYXJz
ZXJGaWx0ZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKExTUGFyc2VyRmlsdGVy
KQogCUtET01fRU5URVJfU0FGRQpJbmRleDoga2RvbS9scy9MU1BhcnNlckZpbHRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vbHMvTFNQYXJzZXJGaWx0
ZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9M
U1BhcnNlckZpbHRlci5oCi0tLSBrZG9tL2xzL0xTUGFyc2VyRmlsdGVyLmgJOSBKdWwgMjAwNSAw
Njo1NDoxNSAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNQYXJzZXJGaWx0ZXIuaAk4IEF1ZyAyMDA1
IDA4OjI0OjIwIC0wMDAwCkBAIC0xNDEsNyArMTQxLDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJs
aWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vbHMvTFNSZXNv
dXJjZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtkb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyLmNwcAotLS0ga2Rv
bS9scy9MU1Jlc291cmNlUmVzb2x2ZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MTUgLTAwMDAJMS4x
CisrKyBrZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5jcHAJOCBBdWcgMjAwNSAwODoyNDoyMCAt
MDAwMApAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExF
TUVOVF9QUk9UT1RZUEUoIkxTUmVzb3VyY2VSZXNvbHZlciIsIExTUmVzb3VyY2VSZXNvbHZlclBy
b3RvLCBMU1Jlc291cmNlUmVzb2x2ZXJQcm90b0Z1bmMpCiAKLVZhbHVlIExTUmVzb3VyY2VSZXNv
bHZlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpMU1Jlc291cmNlUmVzb2x2ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTU5LDcg
KzU5LDcgQEAgVmFsdWUgTFNSZXNvdXJjZVJlc29sdmVyOjpnZXRWYWx1ZVByb3BlcgogCXJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgTFNSZXNvdXJjZVJlc29sdmVyUHJvdG9GdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQor
VmFsdWVJbXAgKkxTUmVzb3VyY2VSZXNvbHZlclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNL
X1RISVMoTFNSZXNvdXJjZVJlc29sdmVyKQogCUtET01fRU5URVJfU0FGRQpJbmRleDoga2RvbS9s
cy9MU1Jlc291cmNlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5oCi0tLSBr
ZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5oCTkgSnVsIDIwMDUgMDY6NTQ6MTUgLTAwMDAJMS4x
CisrKyBrZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5oCTggQXVnIDIwMDUgMDg6MjQ6MjAgLTAw
MDAKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3Jp
cHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vbHMvTFNTZXJpYWxpemVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTU2VyaWFsaXpl
ci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vbHMv
TFNTZXJpYWxpemVyLmNwcAotLS0ga2RvbS9scy9MU1NlcmlhbGl6ZXIuY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6MTUgLTAwMDAJMS4xCisrKyBrZG9tL2xzL0xTU2VyaWFsaXplci5jcHAJOCBBdWcgMjAw
NSAwODoyNDoyMCAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwog
CiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkxTU2VyaWFsaXplciIsIExTU2VyaWFsaXplclBy
b3RvLCBMU1NlcmlhbGl6ZXJQcm90b0Z1bmMpCiAKLVZhbHVlIExTU2VyaWFsaXplcjo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpM
U1NlcmlhbGl6ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTczLDcgKzczLDcgQEAgVmFsdWUgTFNT
ZXJpYWxpemVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotdm9pZCBMU1NlcmlhbGl6ZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBMU1NlcmlhbGl6ZXI6OnB1
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1
ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgTFNT
ZXJpYWxpemVyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWMKIAlLRE9NX0xFQVZFX1NBRkUoTFNFeGNl
cHRpb24pCiB9CiAKLVZhbHVlIExTU2VyaWFsaXplclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpMU1Nl
cmlhbGl6ZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKExTU2VyaWFsaXplcikK
IAlLRE9NX0VOVEVSX1NBRkUKSW5kZXg6IGtkb20vbHMvTFNTZXJpYWxpemVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU1NlcmlhbGl6ZXIuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU1Nlcmlh
bGl6ZXIuaAotLS0ga2RvbS9scy9MU1NlcmlhbGl6ZXIuaAk5IEp1bCAyMDA1IDA2OjU0OjE1IC0w
MDAwCTEuMQorKysga2RvbS9scy9MU1NlcmlhbGl6ZXIuaAk4IEF1ZyAyMDA1IDA4OjI0OjIxIC0w
MDAwCkBAIC0xMzksOCArMTM5LDggQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9CQVNFQ0xBU1Nf
R0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUs
IGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQg
YXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vbHMvTFNTZXJpYWxpemVyRmlsdGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTU2VyaWFs
aXplckZpbHRlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtkb20vbHMvTFNTZXJpYWxpemVyRmlsdGVyLmNwcAotLS0ga2RvbS9scy9MU1NlcmlhbGl6ZXJG
aWx0ZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MTUgLTAwMDAJMS4xCisrKyBrZG9tL2xzL0xTU2Vy
aWFsaXplckZpbHRlci5jcHAJOCBBdWcgMjAwNSAwODoyNDoyMSAtMDAwMApAQCAtMzgsNyArMzgs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgTFNTZXJpYWxpemVy
RmlsdGVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKkxTU2VyaWFsaXplckZpbHRlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDog
a2RvbS9scy9MU1NlcmlhbGl6ZXJGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTU2VyaWFsaXplckZpbHRlci5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTU2VyaWFsaXplckZpbHRlci5o
Ci0tLSBrZG9tL2xzL0xTU2VyaWFsaXplckZpbHRlci5oCTkgSnVsIDIwMDUgMDY6NTQ6MTUgLTAw
MDAJMS4xCisrKyBrZG9tL2xzL0xTU2VyaWFsaXplckZpbHRlci5oCTggQXVnIDIwMDUgMDg6MjQ6
MjEgLTAwMDAKQEAgLTcyLDcgKzcyLDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVj
bWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJ
CUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vcmFuZ2UvRG9jdW1lbnRSYW5n
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9yYW5n
ZS9Eb2N1bWVudFJhbmdlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS9yYW5nZS9Eb2N1bWVudFJhbmdlLmNwcAotLS0ga2RvbS9yYW5nZS9Eb2N1bWVu
dFJhbmdlLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjIwIC0wMDAwCTEuMQorKysga2RvbS9yYW5nZS9E
b2N1bWVudFJhbmdlLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjIxIC0wMDAwCkBAIC00Miw3ICs0Miw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLRE9NOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkRv
Y3VtZW50UmFuZ2UiLCBEb2N1bWVudFJhbmdlUHJvdG8sIERvY3VtZW50UmFuZ2VQcm90b0Z1bmMp
CiAKLUtKUzo6VmFsdWUgRG9jdW1lbnRSYW5nZTo6Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorS0pTOjpWYWx1ZUltcCAqRG9jdW1lbnRSYW5n
ZTo6Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC01Niw5ICs1Niw5IEBAIEtKUzo6VmFsdWUgRG9j
dW1lbnRSYW5nZTo6Z2V0VmFsdWVQcm9wZXIKIAlyZXR1cm4gS0pTOjpVbmRlZmluZWQoKTsKIH0K
IAotS0pTOjpWYWx1ZSBEb2N1bWVudFJhbmdlUHJvdG9GdW5jOjpjYWxsKEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBLSlM6Ok9iamVjdCAmdGhpc09iaiwgY29uc3QgS0pTOjpMaXN0ICYpCitLSlM6OlZh
bHVlSW1wICpEb2N1bWVudFJhbmdlUHJvdG9GdW5jOjpjYWxsKEtKUzo6RXhlY1N0YXRlICpleGVj
LCBLSlM6Ok9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgS0pTOjpMaXN0ICYpCiB7Ci0JRG9jdW1l
bnRSYW5nZSBvYmooY2FzdChleGVjLCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlz
T2JqLmltcCgpKSkpOworCURvY3VtZW50UmFuZ2Ugb2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwog
CVFfQVNTRVJUKG9iai5kICE9IDApOwogCiAJS0RPTV9FTlRFUl9TQUZFCkluZGV4OiBrZG9tL3Jh
bmdlL0RvY3VtZW50UmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rZG9tL3JhbmdlL0RvY3VtZW50UmFuZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga2RvbS9yYW5nZS9Eb2N1bWVudFJhbmdlLmgKLS0tIGtkb20vcmFu
Z2UvRG9jdW1lbnRSYW5nZS5oCTkgSnVsIDIwMDUgMDY6NTQ6MjAgLTAwMDAJMS4xCisrKyBrZG9t
L3JhbmdlL0RvY3VtZW50UmFuZ2UuaAk4IEF1ZyAyMDA1IDA4OjI0OjIxIC0wMDAwCkBAIC01Niw3
ICs1Niw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24K
IAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
CX07CiB9OwogCkluZGV4OiBrZG9tL3JhbmdlL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3JhbmdlL1JhbmdlLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9yYW5nZS9SYW5nZS5jcHAKLS0tIGtk
b20vcmFuZ2UvUmFuZ2UuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MjAgLTAwMDAJMS4xCisrKyBrZG9t
L3JhbmdlL1JhbmdlLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjIxIC0wMDAwCkBAIC03Myw3ICs3Myw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLRE9NOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIlJh
bmdlIiwgUmFuZ2VQcm90bywgUmFuZ2VQcm90b0Z1bmMpCiAKLVZhbHVlIFJhbmdlOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlJh
bmdlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogCUtET01fRU5URVJfU0FGRQogCkBAIC05OSw3ICs5OSw3IEBAIFZhbHVlIFJhbmdlOjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVl
IFJhbmdlUHJvdG9GdW5jOjpjYWxsKEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6Ok9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpSYW5nZVByb3RvRnVuYzo6Y2Fs
bChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFJhbmdlKQogCQpAQCAtMTEyLDE0ICsxMTIs
MTQgQEAgVmFsdWUgUmFuZ2VQcm90b0Z1bmM6OmNhbGwoS0pTOjpFeGVjU3RhdAogCQljYXNlIFJh
bmdlQ29uc3RhbnRzOjpTZXRFbmQ6CiAJCXsKIAkJCU5vZGUgcGFyZW50ID0gZWNtYV9jYXN0PE5v
ZGU+KGV4ZWMsIGFyZ3NbMF0sICZ0b05vZGUpOwotCQkJaW50IG9mZnNldCA9IGFyZ3NbMV0udG9J
bnQzMihleGVjKTsKKwkJCWludCBvZmZzZXQgPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMpOwogCQkJ
b2JqLnNldEVuZChwYXJlbnQsIG9mZnNldCk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0K
IAkJY2FzZSBSYW5nZUNvbnN0YW50czo6U2V0U3RhcnQ6CiAJCXsKIAkJCU5vZGUgcGFyZW50ID0g
ZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFyZ3NbMF0sICZ0b05vZGUpOwotCQkJaW50IG9mZnNldCA9
IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKwkJCWludCBvZmZzZXQgPSBhcmdzWzFdLT50b0ludDMy
KGV4ZWMpOwogCQkJb2JqLnNldFN0YXJ0KHBhcmVudCwgb2Zmc2V0KTsKIAkJCXJldHVybiBVbmRl
ZmluZWQoKTsKIAkJfQkKQEAgLTE0OSw3ICsxNDksNyBAQCBWYWx1ZSBSYW5nZVByb3RvRnVuYzo6
Y2FsbChLSlM6OkV4ZWNTdGF0CiAJCX0KIAkJY2FzZSBSYW5nZUNvbnN0YW50czo6Q29sbGFwc2U6
CiAJCXsKLQkJCW9iai5jb2xsYXBzZSggYXJnc1swXS50b0Jvb2xlYW4oZXhlYykgKTsKKwkJCW9i
ai5jb2xsYXBzZSggYXJnc1swXS0+dG9Cb29sZWFuKGV4ZWMpICk7CiAJCQlyZXR1cm4gVW5kZWZp
bmVkKCk7CiAJCX0KICAJCWNhc2UgUmFuZ2VDb25zdGFudHM6OlNlbGVjdE5vZGU6CkBAIC0xNjYs
NyArMTY2LDcgQEAgVmFsdWUgUmFuZ2VQcm90b0Z1bmM6OmNhbGwoS0pTOjpFeGVjU3RhdAogCQl9
CiAgCQljYXNlIFJhbmdlQ29uc3RhbnRzOjpDb21wYXJlQm91bmRhcnlQb2ludHM6CiAJCXsKLQkJ
CWludCBob3cgPSBhcmdzWzBdLnRvSW50MzIoZXhlYyk7CisJCQlpbnQgaG93ID0gYXJnc1swXS0+
dG9JbnQzMihleGVjKTsKIAkJCVJhbmdlIHNvdXJjZVJhbmdlID0gZWNtYV9jYXN0PFJhbmdlPihl
eGVjLCBhcmdzWzFdLCAmdG9SYW5nZSk7CiAJCQlyZXR1cm4gTnVtYmVyKG9iai5jb21wYXJlQm91
bmRhcnlQb2ludHMoc3RhdGljX2Nhc3Q8Q29tcGFyZUhvdz4oaG93KSAsc291cmNlUmFuZ2UpKTsK
IAkJfQpJbmRleDoga2RvbS9yYW5nZS9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vcmFuZ2UvUmFuZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9yYW5nZS9SYW5nZS5oCi0tLSBrZG9tL3JhbmdlL1Jh
bmdlLmgJOSBKdWwgMjAwNSAwNjo1NDoyMCAtMDAwMAkxLjEKKysrIGtkb20vcmFuZ2UvUmFuZ2Uu
aAk4IEF1ZyAyMDA1IDA4OjI0OjIxIC0wMDAwCkBAIC00MjcsNyArNDI3LDcgQEAgbmFtZXNwYWNl
IEtET00KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9yYW5nZS9SYW5nZUV4Y2Vw
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9y
YW5nZS9SYW5nZUV4Y2VwdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtkb20vcmFuZ2UvUmFuZ2VFeGNlcHRpb24uY3BwCi0tLSBrZG9tL3JhbmdlL1Jh
bmdlRXhjZXB0aW9uLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjIwIC0wMDAwCTEuMQorKysga2RvbS9y
YW5nZS9SYW5nZUV4Y2VwdGlvbi5jcHAJOCBBdWcgMjAwNSAwODoyNDoyMSAtMDAwMApAQCAtMzUs
NyArMzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0RPTTsKIEBlbmQKICovCiAKLUtKUzo6VmFsdWUg
UmFuZ2VFeGNlcHRpb246OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKiwgaW50IHRv
a2VuKSBjb25zdAorS0pTOjpWYWx1ZUltcCAqUmFuZ2VFeGNlcHRpb246OmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikK
IAl7CkluZGV4OiBrZG9tL3JhbmdlL1JhbmdlRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9yYW5nZS9SYW5nZUV4Y2VwdGlvbi5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3JhbmdlL1JhbmdlRXhj
ZXB0aW9uLmgKLS0tIGtkb20vcmFuZ2UvUmFuZ2VFeGNlcHRpb24uaAk5IEp1bCAyMDA1IDA2OjU0
OjIwIC0wMDAwCTEuMQorKysga2RvbS9yYW5nZS9SYW5nZUV4Y2VwdGlvbi5oCTggQXVnIDIwMDUg
MDg6MjQ6MjIgLTAwMDAKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6
IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKIAl9OwogfQogCkluZGV4OiBrZG9tL3RyYXZlcnNhbC9Eb2N1bWVudFRyYXZl
cnNhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS90
cmF2ZXJzYWwvRG9jdW1lbnRUcmF2ZXJzYWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3RyYXZlcnNhbC9Eb2N1bWVudFRyYXZlcnNhbC5jcHAKLS0t
IGtkb20vdHJhdmVyc2FsL0RvY3VtZW50VHJhdmVyc2FsLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjIz
IC0wMDAwCTEuMQorKysga2RvbS90cmF2ZXJzYWwvRG9jdW1lbnRUcmF2ZXJzYWwuY3BwCTggQXVn
IDIwMDUgMDg6MjQ6MjIgLTAwMDAKQEAgLTQ3LDcgKzQ3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtK
UzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJEb2N1bWVudFRyYXZlcnNhbCIsIERvY3Vt
ZW50VHJhdmVyc2FsUHJvdG8sIERvY3VtZW50VHJhdmVyc2FsUHJvdG9GdW5jKQogCi1WYWx1ZSBE
b2N1bWVudFRyYXZlcnNhbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFRyYXZlcnNhbDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IApAQCAtNjEsOSArNjEsOSBAQCBWYWx1ZSBEb2N1bWVudFRyYXZlcnNhbDo6Z2V0VmFsdWVQcm9w
ZXJ0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBEb2N1bWVudFRyYXZlcnNhbFBy
b3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKK1ZhbHVlSW1wICpEb2N1bWVudFRyYXZlcnNhbFByb3RvRnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLQlE
b2N1bWVudFRyYXZlcnNhbCBvYmooY2FzdChleGVjLCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdElt
cCAqPih0aGlzT2JqLmltcCgpKSkpOworCURvY3VtZW50VHJhdmVyc2FsIG9iaihjYXN0KGV4ZWMs
IHRoaXNPYmopKTsKIAlRX0FTU0VSVChvYmouZCAhPSAwKTsKIAlLRE9NX0VOVEVSX1NBRkUKIApA
QCAtNzIsMTUgKzcyLDE1IEBAIFZhbHVlIERvY3VtZW50VHJhdmVyc2FsUHJvdG9GdW5jOjpjYWxs
KEUKIAkJY2FzZSBEb2N1bWVudFRyYXZlcnNhbENvbnN0YW50czo6Q3JlYXRlTm9kZUl0ZXJhdG9y
OgogCQl7CiAJCQlOb2RlIHJvb3QgPSBlY21hX2Nhc3Q8Tm9kZT4oZXhlYywgYXJnc1swXSwgJnRv
Tm9kZSk7Ci0JCQl1bnNpZ25lZCBzaG9ydCB3aGF0VG9TaG93ID0gYXJnc1sxXS50b1VJbnQxNihl
eGVjKTsKLQkJCWJvb2wgZW50aXR5UmVmZXJlbmNlRXhwYW5zaW9uID0gYXJnc1szXS50b0Jvb2xl
YW4oZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCB3aGF0VG9TaG93ID0gYXJnc1sxXS0+dG9VSW50
MTYoZXhlYyk7CisJCQlib29sIGVudGl0eVJlZmVyZW5jZUV4cGFuc2lvbiA9IGFyZ3NbM10tPnRv
Qm9vbGVhbihleGVjKTsKIAkJCXJldHVybiBvYmouY3JlYXRlTm9kZUl0ZXJhdG9yKHJvb3QsIHdo
YXRUb1Nob3csIE5vZGVGaWx0ZXI6Om51bGwsIGVudGl0eVJlZmVyZW5jZUV4cGFuc2lvbikuY2Fj
aGUoZXhlYyk7CiAJCX0KIAkJY2FzZSBEb2N1bWVudFRyYXZlcnNhbENvbnN0YW50czo6Q3JlYXRl
VHJlZVdhbGtlcjoKIAkJewogCQkJTm9kZSByb290ID0gZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFy
Z3NbMF0sICZ0b05vZGUpOwotCQkJdW5zaWduZWQgc2hvcnQgd2hhdFRvU2hvdyA9IGFyZ3NbMV0u
dG9VSW50MTYoZXhlYyk7Ci0JCQlib29sIGVudGl0eVJlZmVyZW5jZUV4cGFuc2lvbiA9IGFyZ3Nb
M10udG9Cb29sZWFuKGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgd2hhdFRvU2hvdyA9IGFyZ3Nb
MV0tPnRvVUludDE2KGV4ZWMpOworCQkJYm9vbCBlbnRpdHlSZWZlcmVuY2VFeHBhbnNpb24gPSBh
cmdzWzNdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlyZXR1cm4gb2JqLmNyZWF0ZVRyZWVXYWxrZXIo
cm9vdCwgd2hhdFRvU2hvdywgTm9kZUZpbHRlcjo6bnVsbCwgZW50aXR5UmVmZXJlbmNlRXhwYW5z
aW9uKS5jYWNoZShleGVjKTsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga2RvbS90cmF2ZXJzYWwv
RG9jdW1lbnRUcmF2ZXJzYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rZG9tL3RyYXZlcnNhbC9Eb2N1bWVudFRyYXZlcnNhbC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3RyYXZlcnNhbC9Eb2N1bWVudFRyYXZlcnNh
bC5oCi0tLSBrZG9tL3RyYXZlcnNhbC9Eb2N1bWVudFRyYXZlcnNhbC5oCTkgSnVsIDIwMDUgMDY6
NTQ6MjMgLTAwMDAJMS4xCisrKyBrZG9tL3RyYXZlcnNhbC9Eb2N1bWVudFRyYXZlcnNhbC5oCTgg
QXVnIDIwMDUgMDg6MjQ6MjIgLTAwMDAKQEAgLTExMyw3ICsxMTMsNyBAQCBuYW1lc3BhY2UgS0RP
TQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS90
cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL3RyYXZlcnNhbC9Ob2RlSXRlcmF0b3IuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3RyYXZlcnNhbC9Ob2RlSXRlcmF0b3Iu
Y3BwCi0tLSBrZG9tL3RyYXZlcnNhbC9Ob2RlSXRlcmF0b3IuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6
MjMgLTAwMDAJMS4xCisrKyBrZG9tL3RyYXZlcnNhbC9Ob2RlSXRlcmF0b3IuY3BwCTggQXVnIDIw
MDUgMDg6MjQ6MjIgLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsK
IAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJOb2RlSXRlcmF0b3IiLCBOb2RlSXRlcmF0b3JQ
cm90bywgTm9kZUl0ZXJhdG9yUHJvdG9GdW5jKQogCi1WYWx1ZSBOb2RlSXRlcmF0b3I6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
Tm9kZUl0ZXJhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03Miw3ICs3Miw3IEBAIFZhbHVlIE5v
ZGVJdGVyYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9
OwogCi1WYWx1ZSBOb2RlSXRlcmF0b3JQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJikKK1ZhbHVlSW1wICpOb2RlSXRlcmF0b3JQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QgJikKIHsKIAlLRE9NX0NIRUNLX1RISVMoTm9kZUl0ZXJhdG9yKQogCUtET01fRU5URVJfU0FG
RQpJbmRleDoga2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vdHJhdmVyc2FsL05v
ZGVJdGVyYXRvci5oCi0tLSBrZG9tL3RyYXZlcnNhbC9Ob2RlSXRlcmF0b3IuaAk5IEp1bCAyMDA1
IDA2OjU0OjIzIC0wMDAwCTEuMQorKysga2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmgJOCBB
dWcgMjAwNSAwODoyNDoyMiAtMDAwMApAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgS0RPTQog
CXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL3RyYXZlcnNhbC9UcmVl
V2Fsa2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9t
L3RyYXZlcnNhbC9UcmVlV2Fsa2VyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga2RvbS90cmF2ZXJzYWwvVHJlZVdhbGtlci5jcHAKLS0tIGtkb20vdHJhdmVy
c2FsL1RyZWVXYWxrZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MjMgLTAwMDAJMS4xCisrKyBrZG9t
L3RyYXZlcnNhbC9UcmVlV2Fsa2VyLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjIyIC0wMDAwCkBAIC01
NCw3ICs1NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RP
VFlQRSgiVHJlZVdhbGtlciIsIFRyZWVXYWxrZXJQcm90bywgVHJlZVdhbGtlclByb3RvRnVuYykK
IAotVmFsdWUgVHJlZVdhbGtlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpUcmVlV2Fsa2VyOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBA
IC03OCw3ICs3OCw3IEBAIFZhbHVlIFRyZWVXYWxrZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1MK
IAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9OwogCi12b2lkIFRyZWVXYWxrZXI6OnB1dFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICYsIGludCkKK3Zv
aWQgVHJlZVdhbGtlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKiwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC05NCw3ICs5NCw3
IEBAIHZvaWQgVHJlZVdhbGtlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3QKIAlLRE9NX0xFQVZF
X1NBRkUoRE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBUcmVlV2Fsa2VyUHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICYpCitWYWx1ZUlt
cCAqVHJlZVdhbGtlclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAq
dGhpc09iaiwgY29uc3QgTGlzdCAmKQogewogCUtET01fQ0hFQ0tfVEhJUyhUcmVlV2Fsa2VyKQog
CUtET01fRU5URVJfU0FGRQpJbmRleDoga2RvbS90cmF2ZXJzYWwvVHJlZVdhbGtlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vdHJhdmVyc2FsL1RyZWVX
YWxrZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS90
cmF2ZXJzYWwvVHJlZVdhbGtlci5oCi0tLSBrZG9tL3RyYXZlcnNhbC9UcmVlV2Fsa2VyLmgJOSBK
dWwgMjAwNSAwNjo1NDoyMyAtMDAwMAkxLjEKKysrIGtkb20vdHJhdmVyc2FsL1RyZWVXYWxrZXIu
aAk4IEF1ZyAyMDA1IDA4OjI0OjIyIC0wMDAwCkBAIC03MCw4ICs3MCw4IEBAIG5hbWVzcGFjZSBL
RE9NCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpW
YWx1ZSAmdmFsdWUsIGludCBhdHRyKTsJCQorCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUlt
cCAqdmFsdWUsIGludCBhdHRyKTsJCQogCX07CiB9OwogCkluZGV4OiBrZG9tL3ZpZXdzL0Fic3Ry
YWN0Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2Rv
bS92aWV3cy9BYnN0cmFjdFZpZXcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrZG9tL3ZpZXdzL0Fic3RyYWN0Vmlldy5jcHAKLS0tIGtkb20vdmlld3MvQWJz
dHJhY3RWaWV3LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjI2IC0wMDAwCTEuMQorKysga2RvbS92aWV3
cy9BYnN0cmFjdFZpZXcuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MjIgLTAwMDAKQEAgLTM2LDcgKzM2
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIEFic3RyYWN0Vmll
dzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpBYnN0cmFjdFZpZXc6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJLy8gTm8gZXhjZXB0aW9ucyB0aHJvd24gaGVyZSwgbm8gbmVl
ZCBmb3IgS0RPTV9FTlRFUi9MRUFWRV9TQUZFCiAKSW5kZXg6IGtkb20vdmlld3MvQWJzdHJhY3RW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS92aWV3
cy9BYnN0cmFjdFZpZXcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga2RvbS92aWV3cy9BYnN0cmFjdFZpZXcuaAotLS0ga2RvbS92aWV3cy9BYnN0cmFjdFZpZXcu
aAk5IEp1bCAyMDA1IDA2OjU0OjI2IC0wMDAwCTEuMQorKysga2RvbS92aWV3cy9BYnN0cmFjdFZp
ZXcuaAk4IEF1ZyAyMDA1IDA4OjI0OjIyIC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFj
ZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoQWJzdHJhY3RWaWV3
KQpJbmRleDoga2RvbS92aWV3cy9Eb2N1bWVudFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vdmlld3MvRG9jdW1lbnRWaWV3LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS92aWV3cy9Eb2N1bWVudFZp
ZXcuY3BwCi0tLSBrZG9tL3ZpZXdzL0RvY3VtZW50Vmlldy5jcHAJOSBKdWwgMjAwNSAwNjo1NDoy
NiAtMDAwMAkxLjEKKysrIGtkb20vdmlld3MvRG9jdW1lbnRWaWV3LmNwcAk4IEF1ZyAyMDA1IDA4
OjI0OjIyIC0wMDAwCkBAIC0zOCw3ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5k
CiAqLwogCi1WYWx1ZSBEb2N1bWVudFZpZXc6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRWaWV3OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCS8vIE5vIGV4Y2Vw
dGlvbnMgdGhyb3duIGhlcmUsIG5vIG5lZWQgZm9yIEtET01fRU5URVIvTEVBVkVfU0FGRQogCklu
ZGV4OiBrZG9tL3ZpZXdzL0RvY3VtZW50Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vdmlld3MvRG9jdW1lbnRWaWV3LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vdmlld3MvRG9jdW1lbnRWaWV3LmgKLS0t
IGtkb20vdmlld3MvRG9jdW1lbnRWaWV3LmgJOSBKdWwgMjAwNSAwNjo1NDoyNiAtMDAwMAkxLjEK
KysrIGtkb20vdmlld3MvRG9jdW1lbnRWaWV3LmgJOCBBdWcgMjAwNSAwODoyNDoyMiAtMDAwMApA
QCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBz
ZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aEV2
YWx1YXRvci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtk
b20veHBhdGgvWFBhdGhFdmFsdWF0b3IuY3BwCi0tLSBrZG9tL3hwYXRoL1hQYXRoRXZhbHVhdG9y
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjI3IC0wMDAwCTEuMQorKysga2RvbS94cGF0aC9YUGF0aEV2
YWx1YXRvci5jcHAJOCBBdWcgMjAwNSAwODoyNDoyMyAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCB1
c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIlhQYXRoRXZh
bHVhdG9yIiwgWFBhdGhFdmFsdWF0b3JQcm90bywgWFBhdGhFdmFsdWF0b3JQcm90b0Z1bmMpCiAK
LVZhbHVlIFhQYXRoRXZhbHVhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoRXZhbHVhdG9yOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FG
RQogCkBAIC02Nyw5ICs2Nyw5IEBAIFZhbHVlIFhQYXRoRXZhbHVhdG9yOjpnZXRWYWx1ZVByb3Bl
cnR5KEUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFhQYXRoRXZhbHVhdG9yUHJv
dG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQorVmFsdWVJbXAgKlhQYXRoRXZhbHVhdG9yUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotCVhQYXRo
RXZhbHVhdG9yIG9iaihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRo
aXNPYmouaW1wKCkpKSk7CisJWFBhdGhFdmFsdWF0b3Igb2JqKGNhc3QoZXhlYywgdGhpc09iaikp
OwogCVFfQVNTRVJUKG9iai5kICE9IDApOwogCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC05Myw3ICs5
Myw3IEBAIFZhbHVlIFhQYXRoRXZhbHVhdG9yUHJvdG9GdW5jOjpjYWxsKEV4ZWMKIAkJCURPTVN0
cmluZyBleHByZXNzaW9uID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7CiAJCQlOb2RlIGNv
bnRleHROb2RlID0gZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFyZ3NbMV0sICZ0b05vZGUpOwogCQkJ
WFBhdGhOU1Jlc29sdmVyIHJlc2VyID0gZWNtYV9jYXN0PFhQYXRoTlNSZXNvbHZlcj4oZXhlYywg
YXJnc1syXSwgJnRvWFBhdGhOU1Jlc29sdmVyKTsKLQkJCXVuc2lnbmVkIGludCB0eXBlID0gYXJn
c1szXS50b1VJbnQxNihleGVjKTsKKwkJCXVuc2lnbmVkIGludCB0eXBlID0gYXJnc1szXS0+dG9V
SW50MTYoZXhlYyk7CiAJCQkKIAkJCS8qIERPTU9iamVjdCBpcyBhIHBvc3NpYmxlIHBvb2xpbmcg
bWVjaGFuaXNtIHdoaWNoIHdlIGN1cnJlbnRseSBkb24ndCB1c2UgYW5kCiAJCQkgKiBoZW5jZSBk
b24ndCBrbm93IHdoYXQgdHlwZSBvZiBjbGFzcyBpdCBzaG91bGQgYmUuICovCkluZGV4OiBrZG9t
L3hwYXRoL1hQYXRoRXZhbHVhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aEV2YWx1YXRvci5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmgKLS0tIGtk
b20veHBhdGgvWFBhdGhFdmFsdWF0b3IuaAk5IEp1bCAyMDA1IDA2OjU0OjI3IC0wMDAwCTEuMQor
Kysga2RvbS94cGF0aC9YUGF0aEV2YWx1YXRvci5oCTggQXVnIDIwMDUgMDg6MjQ6MjMgLTAwMDAK
QEAgLTcxLDcgKzcxLDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQg
c2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20veHBhdGgvWFBhdGhFeGNlcHRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20veHBhdGgvWFBhdGhF
eGNlcHRpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
ZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9uLmNwcAotLS0ga2RvbS94cGF0aC9YUGF0aEV4Y2VwdGlv
bi5jcHAJOSBKdWwgMjAwNSAwNjo1NDoyNyAtMDAwMAkxLjEKKysrIGtkb20veHBhdGgvWFBhdGhF
eGNlcHRpb24uY3BwCTggQXVnIDIwMDUgMDg6MjQ6MjMgLTAwMDAKQEAgLTM0LDcgKzM0LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIFhQYXRoRXhjZXB0aW9uOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
WFBhdGhFeGNlcHRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikg
Y29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDoga2RvbS94cGF0aC9YUGF0aEV4Y2Vw
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20veHBh
dGgvWFBhdGhFeGNlcHRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS94cGF0aC9YUGF0aEV4Y2VwdGlvbi5oCi0tLSBrZG9tL3hwYXRoL1hQYXRoRXhj
ZXB0aW9uLmgJOSBKdWwgMjAwNSAwNjo1NDoyOCAtMDAwMAkxLjEKKysrIGtkb20veHBhdGgvWFBh
dGhFeGNlcHRpb24uaAk4IEF1ZyAyMDA1IDA4OjI0OjIzIC0wMDAwCkBAIC01Nyw3ICs1Nyw3IEBA
IG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9C
QVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9Owog
CkluZGV4OiBrZG9tL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aEV4cHJlc3Npb24uY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3hwYXRoL1hQYXRo
RXhwcmVzc2lvbi5jcHAKLS0tIGtkb20veHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcAk5IEp1bCAy
MDA1IDA2OjU0OjI4IC0wMDAwCTEuMQorKysga2RvbS94cGF0aC9YUGF0aEV4cHJlc3Npb24uY3Bw
CTggQXVnIDIwMDUgMDg6MjQ6MjMgLTAwMDAKQEAgLTQ4LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJYUGF0aEV4cHJlc3Npb24iLCBY
UGF0aEV4cHJlc3Npb25Qcm90bywgWFBhdGhFeHByZXNzaW9uUHJvdG9GdW5jKQogCi1WYWx1ZSBY
UGF0aEV4cHJlc3Npb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhFeHByZXNzaW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBA
IC02Miw3ICs2Miw3IEBAIFZhbHVlIFhQYXRoRXhwcmVzc2lvbjo6Z2V0VmFsdWVQcm9wZXJ0eSgK
IAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFhQYXRoRXhwcmVzc2lvblByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKK1ZhbHVlSW1wICpYUGF0aEV4cHJlc3Npb25Qcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVD
S19USElTKFhQYXRoRXhwcmVzc2lvbikKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTczLDcgKzczLDcg
QEAgVmFsdWUgWFBhdGhFeHByZXNzaW9uUHJvdG9GdW5jOjpjYWxsKEV4ZQogCQljYXNlIFhQYXRo
RXhwcmVzc2lvbkNvbnN0YW50czo6RXZhbHVhdGU6CiAJCXsKIAkJCU5vZGUgY29udGV4dE5vZGUg
PSAgZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFyZ3NbMF0sICZ0b05vZGUpOwotCQkJdW5zaWduZWQg
aW50IHR5cGUgPSBhcmdzWzNdLnRvVUludDE2KGV4ZWMpOworCQkJdW5zaWduZWQgaW50IHR5cGUg
PSBhcmdzWzNdLT50b1VJbnQxNihleGVjKTsKIAkJCS8qIERPTU9iamVjdCBpcyBhIHBvc3NpYmxl
IHBvb2xpbmcgbWVjaGFuaXNtIHdoaWNoIHdlIGN1cnJlbnRseSBkb24ndCB1c2UgYW5kCiAJCQkg
KiBoZW5jZSBkb24ndCBrbm93IHdoYXQgdHlwZSBvZiBjbGFzcyBpdCBzaG91bGQgYmUuICovCiAJ
CQkvL2NvbnN0IERPTU9iamVjdCByZXN1bHQgPSBlY21hX2Nhc3Q8RE9NT2JqZWN0PihleGVjLCBh
cmdzWzRdLCAmdG9ET01PYmplY3QpOwpJbmRleDoga2RvbS94cGF0aC9YUGF0aEV4cHJlc3Npb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hwYXRoL1hQ
YXRoRXhwcmVzc2lvbi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrZG9tL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5oCi0tLSBrZG9tL3hwYXRoL1hQYXRoRXhwcmVz
c2lvbi5oCTkgSnVsIDIwMDUgMDY6NTQ6MjggLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRo
RXhwcmVzc2lvbi5oCTggQXVnIDIwMDUgMDg6MjQ6MjMgLTAwMDAKQEAgLTYzLDcgKzYzLDcgQEAg
bmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JB
U0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIAogfTsK
SW5kZXg6IGtkb20veHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20veHBhdGgvWFBhdGhO
U1Jlc29sdmVyLmNwcAotLS0ga2RvbS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuY3BwCTkgSnVsIDIw
MDUgMDY6NTQ6MjggLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJ
OCBBdWcgMjAwNSAwODoyNDoyMyAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIlhQYXRoTlNSZXNvbHZlciIsIFhQ
YXRoTlNSZXNvbHZlclByb3RvLCBYUGF0aE5TUmVzb2x2ZXJQcm90b0Z1bmMpCiAKLUtKUzo6VmFs
dWUgWFBhdGhOU1Jlc29sdmVyOjpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICosIGlu
dCB0b2tlbikgY29uc3QKK0tKUzo6VmFsdWVJbXAgKlhQYXRoTlNSZXNvbHZlcjo6Z2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRv
a2VuKQogCXsKQEAgLTU3LDcgKzU3LDcgQEAgS0pTOjpWYWx1ZSBYUGF0aE5TUmVzb2x2ZXI6Omdl
dFZhbHVlUHJvcAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgWFBhdGhOU1Jlc29s
dmVyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlhQYXRoTlNSZXNvbHZlclByb3RvRnVuYzo6Y2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsK
IAlLRE9NX0NIRUNLX1RISVMoWFBhdGhOU1Jlc29sdmVyKQogCUtET01fRU5URVJfU0FGRQpJbmRl
eDoga2RvbS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZl
ci5oCi0tLSBrZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCTkgSnVsIDIwMDUgMDY6NTQ6Mjgg
LTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCTggQXVnIDIwMDUgMDg6
MjQ6MjMgLTAwMDAKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9CQVNF
Q0xBU1NfR0VUCQkKIAkJS0RPTV9DQVNUCiAJCQotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoWFBhdGhOU1Jlc29sdmVyKQpJbmRleDoga2Rv
bS94cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20veHBhdGgvWFBhdGhOYW1lc3BhY2UuY3Bw
Ci0tLSBrZG9tL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjI4IC0w
MDAwCTEuMQorKysga2RvbS94cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHAJOCBBdWcgMjAwNSAwODoy
NDoyMyAtMDAwMApAQCAtMzgsNyArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAog
Ki8KIAotS0pTOjpWYWx1ZSBYUGF0aE5hbWVzcGFjZTo6Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorS0pTOjpWYWx1ZUltcCAqWFBhdGhOYW1l
c3BhY2U6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS94cGF0aC9YUGF0aE5hbWVz
cGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20veHBh
dGgvWFBhdGhOYW1lc3BhY2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS94cGF0aC9YUGF0aE5hbWVzcGFjZS5oCi0tLSBrZG9tL3hwYXRoL1hQYXRoTmFt
ZXNwYWNlLmgJOSBKdWwgMjAwNSAwNjo1NDoyOCAtMDAwMAkxLjEKKysrIGtkb20veHBhdGgvWFBh
dGhOYW1lc3BhY2UuaAk4IEF1ZyAyMDA1IDA4OjI0OjIzIC0wMDAwCkBAIC02Miw3ICs2Miw3IEBA
IG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS94cGF0aC9YUGF0
aFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2Rv
bS94cGF0aC9YUGF0aFJlc3VsdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtkb20veHBhdGgvWFBhdGhSZXN1bHQuY3BwCi0tLSBrZG9tL3hwYXRoL1hQYXRo
UmVzdWx0LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjI4IC0wMDAwCTEuMQorKysga2RvbS94cGF0aC9Y
UGF0aFJlc3VsdC5jcHAJOCBBdWcgMjAwNSAwODoyNDoyMyAtMDAwMApAQCAtNTEsNyArNTEsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIlhQYXRo
UmVzdWx0IiwgWFBhdGhSZXN1bHRQcm90bywgWFBhdGhSZXN1bHRQcm90b0Z1bmMpCiAKLUtKUzo6
VmFsdWUgWFBhdGhSZXN1bHQ6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKK0tKUzo6VmFsdWVJbXAgKlhQYXRoUmVzdWx0OjpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9F
TlRFUl9TQUZFCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03OSw3ICs3OSw3IEBAIEtKUzo6VmFsdWUg
WFBhdGhSZXN1bHQ6OmdldFZhbHVlUHJvcGVydHkKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LVZhbHVlIFhQYXRoUmVzdWx0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlhQYXRoUmVzdWx0UHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhYUGF0aFJlc3VsdCkKIAlLRE9NX0VOVEVSX1NB
RkUKQEAgLTkxLDcgKzkxLDcgQEAgVmFsdWUgWFBhdGhSZXN1bHRQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YQogCQkJcmV0dXJuIGdldERPTU5vZGUoZXhlYywgb2JqLml0ZXJhdGVOZXh0KCkpOwogCQlj
YXNlIFhQYXRoUmVzdWx0Q29uc3RhbnRzOjpTbmFwc2hvdEl0ZW06CiAJCXsKLQkJCWNvbnN0IHVu
c2lnbmVkIGxvbmcgaW5kZXggPSAodW5zaWduZWQgbG9uZykgYXJnc1swXS50b1VJbnQzMihleGVj
KTsKKwkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgaW5kZXggPSAodW5zaWduZWQgbG9uZykgYXJnc1sw
XS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBvYmouc25hcHNo
b3RJdGVtKGluZGV4KSk7CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtkb20veHBhdGgvWFBhdGhS
ZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hw
YXRoL1hQYXRoUmVzdWx0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20veHBhdGgvWFBhdGhSZXN1bHQuaAotLS0ga2RvbS94cGF0aC9YUGF0aFJlc3VsdC5o
CTkgSnVsIDIwMDUgMDY6NTQ6MjggLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoUmVzdWx0
LmgJOCBBdWcgMjAwNSAwODoyNDoyMyAtMDAwMApAQCAtODksNyArODksNyBAQCBuYW1lc3BhY2Ug
S0RPTQogCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1Nf
R0VUCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogCiAJS0RPTV9ERUZJTkVf
Q0FTVChYUGF0aFJlc3VsdCkKSW5kZXg6IGtzdmcyL0tTVkdGYWN0b3J5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9LU1ZHRmFjdG9yeS5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL0tTVkdGYWN0b3J5
LmNwcAotLS0ga3N2ZzIvS1NWR0ZhY3RvcnkuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NDYgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9LU1ZHRmFjdG9yeS5jcHAJOCBBdWcgMjAwNSAwODoyNDoyNCAtMDAwMApA
QCAtOTcsOSArOTcsOSBAQCBLUGFydHM6OlBhcnQgKktTVkdGYWN0b3J5OjpjcmVhdGVQYXJ0T2Jq
CiAJZm9yKFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFFTdHJpbmc+IGl0ID0gYXJncy5iZWdpbigp
OyBpdCAhPSBhcmdzLmVuZCgpOyArK2l0KSAKIAl7CiAJCWlmKHIxLnNlYXJjaCgqaXQpID4gLTEp
Ci0JCQl3aWR0aCA9IHIxLmNhcCgzKS50b1VJbnQoJmR1bW15KTsKKwkJCXdpZHRoID0gcjEuY2Fw
KDMpLT50b1VJbnQoJmR1bW15KTsKIAkJaWYocjIuc2VhcmNoKCppdCkgPiAtMSkKLQkJCWhlaWdo
dCA9IHIyLmNhcCgzKS50b1VJbnQoJmR1bW15KTsKKwkJCWhlaWdodCA9IHIyLmNhcCgzKS0+dG9V
SW50KCZkdW1teSk7CiAJfQogCQogCXJldHVybiBuZXcgS1NWR1BhcnQocGFyZW50V2lkZ2V0LCB3
aWRnZXROYW1lLCBwYXJlbnQsIG5hbWUsIHdpZHRoLCBoZWlnaHQpOwpJbmRleDoga3N2ZzIvZGF0
YS9TVkdDb25zdGFudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kYXRhL1NWR0NvbnN0YW50cy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kYXRhL1NWR0NvbnN0YW50cy5oCi0tLSBrc3ZnMi9kYXRhL1NW
R0NvbnN0YW50cy5oCTkgSnVsIDIwMDUgMDY6NTQ6NTAgLTAwMDAJMS4xCisrKyBrc3ZnMi9kYXRh
L1NWR0NvbnN0YW50cy5oCTggQXVnIDIwMDUgMDg6MjQ6MjUgLTAwMDAKQEAgLTExNSw3ICsxMTUs
NyBAQCBuYW1lc3BhY2UgS1NWRwogCXsKIAkJdHlwZWRlZiBlbnVtCiAJCXsKLQkJCVZhbHVlIAor
CQkJVmFsdWUKIAkJfSBTVkdOdW1iZXJDb25zdGFudHNFbnVtOwogCX07CiAKSW5kZXg6IGtzdmcy
L2RhdGEvZ2VuZXJhdGVkZGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZGF0YS9nZW5lcmF0ZWRkYXRhLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZGF0YS9nZW5lcmF0ZWRkYXRhLmNwcAotLS0g
a3N2ZzIvZGF0YS9nZW5lcmF0ZWRkYXRhLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUwIC0wMDAwCTEu
MQorKysga3N2ZzIvZGF0YS9nZW5lcmF0ZWRkYXRhLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjMxIC0w
MDAwCkBAIC01MzcsMTIgKzUzNywxMiBAQCBib29sIFNWR0FFbGVtZW50OjpoYXNQcm9wZXJ0eShF
eGVjU3RhdGUgCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBRWxlbWVudDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBRWxlbWVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
QUVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQUVs
ZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
QUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYo
U1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAx
LHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIs
cDMpOwpAQCAtNTY3LDEwICs1NjcsMTAgQEAgYm9vbCBTVkdBRWxlbWVudDo6cHV0KFBVVF9NRVRI
T0RfQVJHUykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdBRWxlbWVudDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FFbGVtZW50Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRl
cnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6
ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpT
VkdBRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01NzgsNyArNTc4LDcg
QEAgT2JqZWN0SW1wICpTVkdBRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZQogICAgIHJldHVybiBu
ZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0FFbGVt
ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHQUVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0FFbGVtZW50
PihwMSxzdGF0aWNfY2FzdDxTVkdBRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01ODcs
MTIgKzU4NywxMiBAQCBib29sIFNWR0FuZ2xlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiB7
CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR0FuZ2xlOjpz
X2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3Rv
ID0gU1ZHQW5nbGVQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHQW5nbGVQcm90bzo6
c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmdsZTo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmdsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR0FuZ2xlUHJvdG9GdW5jLFNWR0Fu
Z2xlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC02MDksMTAgKzYwOSwxMCBA
QCBTVkdBbmdsZSBLU1ZHOjp0b1NWR0FuZ2xlKEtKUzo6RXhlY1N0YXRlCiAgICAgcmV0dXJuIFNW
R0FuZ2xlOjpudWxsOwogfQogCi1WYWx1ZSBTVkdBbmdsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmdsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdBbmdsZVByb3RvOjpzZWxm
KHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQo
cDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdBbmdsZVByb3RvOjpzZWxmKHAxKTsK
KyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxw
Mik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAgLTYy
OCwxMCArNjI4LDEwIEBAIGJvb2wgU1ZHQW5nbGU6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0EK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdBbmdsZTo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FuZ2xlOjpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR0FuZ2xlUHJvdG86OnNlbGYocDEp
OwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5nbGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtNjM5LDcgKzYzOSw3IEBAIE9iamVjdEltcCAqU1ZHQW5nbGU6OmJyaWRnZShFeGVjU3Rh
dGUgKnAKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0FuZ2xlPihwMSxzdGF0
aWNfY2FzdDxTVkdBbmdsZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0FuZ2xl
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuZ2xlOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxT
VkdBbmdsZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5nbGU6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpA
QCAtNjUyLDEyICs2NTIsMTIgQEAgYm9vbCBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpoYXNQcm9w
ZXJ0eQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlQ29sb3JF
bGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjps
b29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlQ29sb3JFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdBbmlt
YXRpb25FbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdBbmltYXRpb25FbGVt
ZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTY3MiwxMCAr
NjcyLDEwIEBAIGJvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6cHV0KFBVVF9NRVQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBw
MS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CkBAIC02ODMsNyArNjgzLDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpi
cmlkZwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQW5pbWF0ZUNvbG9yRWxl
bWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5p
bWF0ZUNvbG9yRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6
UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC02OTYsMTIgKzY5NiwxMiBAQCBib29sIFNWR0FuaW1hdGVF
bGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBT
VkdBbmltYXRlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdBbmltYXRlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZUVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZUVsZW1lbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHQW5pbWF0aW9u
RWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHQW5pbWF0aW9uRWxlbWVudDo6
Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC03MTYsMTAgKzcxNiwx
MCBAQCBib29sIFNWR0FuaW1hdGVFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlRWxlbWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5pbWF0
ZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNzI3LDcgKzcyNyw3IEBA
IE9iamVjdEltcCAqU1ZHQW5pbWF0ZUVsZW1lbnQ6OmJyaWRnZShFeGUKICAgICByZXR1cm4gbmV3
IEtET006OkRPTVJXQnJpZGdlPFNWR0FuaW1hdGVFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdB
bmltYXRlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVFbGVt
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVFbGVt
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNo
ZURPTU9iamVjdDxTVkdBbmltYXRlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZUVs
ZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNzQwLDEyICs3NDAsMTIgQEAgYm9vbCBTVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudDo6aGFzUHJvcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZh
bHVlIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0FuaW1hdGlvbkVsZW1l
bnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldChw
MSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNzYwLDEwICs3NjAsMTAgQEAg
Ym9vbCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cHV0KFBVVAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotT2JqZWN0IFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEt
PmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTc3MSw3ICs3NzEsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50OjpiCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OlBy
aXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlVHJhbnNmb3JtRWxl
bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2Fj
aGVET01PYmplY3Q8U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTc4NCwyMSAr
Nzg0LDIxIEBAIGJvb2wgU1ZHQW5pbWF0ZWRBbmdsZTo6aGFzUHJvcGVydHkoRXhlY1MKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkQW5nbGU6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRBbmdsZTo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0
ZWRBbmdsZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmlt
YXRlZEFuZ2xlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR0FuaW1hdGVkQW5nbGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZEFuZ2xlOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZWRBbmdsZTo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZH
QW5pbWF0ZWRBbmdsZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC04MDYsNyArODA2
LDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRlZEFuZ2xlOjpicmlkZ2UoRXhlYwogICAgIHJldHVy
biBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR0FuaW1hdGVkQW5nbGU+KHAxLHN0YXRpY19jYXN0PFNW
R0FuaW1hdGVkQW5nbGU6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRl
ZEFuZ2xlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVk
QW5nbGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNh
Y2hlRE9NT2JqZWN0PFNWR0FuaW1hdGVkQW5nbGU+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVk
QW5nbGU6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtODE5LDEyICs4MTksMTIgQEAgYm9vbCBT
VkdBbmltYXRlZEJvb2xlYW46Omhhc1Byb3BlcnR5KEV4ZQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHQW5pbWF0ZWRCb29sZWFuOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR0FuaW1hdGVkQm9vbGVhbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRCb29sZWFuPihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkQm9vbGVh
bjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmlt
YXRlZEJvb2xlYW46OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
UV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CkBAIC04NDEsMTAgKzg0MSwxMCBAQCBib29sIFNWR0FuaW1hdGVkQm9vbGVhbjo6
cHV0SW5QYXJlbnRzKFBVCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0
ZWRCb29sZWFuOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZH
QW5pbWF0ZWRCb29sZWFuOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlZEJvb2xlYW46OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtODUyLDcgKzg1Miw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRCb29s
ZWFuOjpicmlkZ2UoRXgKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0FuaW1h
dGVkQm9vbGVhbj4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRCb29sZWFuOjpQcml2YXRlICo+
KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRCb29sZWFuOjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkQm9vbGVhbjo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0
ZWRCb29sZWFuPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZEJvb2xlYW46OlByaXZhdGUgKj4o
aW1wbCkpOwogfQpAQCAtODY1LDEyICs4NjUsMTIgQEAgYm9vbCBTVkdBbmltYXRlZEVudW1lcmF0
aW9uOjpoYXNQcm9wZXJ0eQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdB
bmltYXRlZEVudW1lcmF0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJl
dHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkRW51bWVyYXRpb246
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBV
bmRlZmluZWQoKTsKQEAgLTg4NywxMCArODg3LDEwIEBAIGJvb2wgU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbjo6cHV0SW5QYXJlbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdBbmlt
YXRlZEVudW1lcmF0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC04OTgsNyArODk4LDcgQEAgT2JqZWN0SW1wICpT
VkdBbmltYXRlZEVudW1lcmF0aW9uOjpicmlkZwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldC
cmlkZ2U8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbjo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkRW51
bWVyYXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4ocDEsc3RhdGljX2Nh
c3Q8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC05MTEs
MTIgKzkxMSwxMiBAQCBib29sIFNWR0FuaW1hdGVkSW50ZWdlcjo6aGFzUHJvcGVydHkoRXhlCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZEludGVnZXI6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxT
VkdBbmltYXRlZEludGVnZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFs
dWUgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkSW50ZWdlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQo
cDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTkzMywxMCArOTMzLDEwIEBAIGJvb2wg
U1ZHQW5pbWF0ZWRJbnRlZ2VyOjpwdXRJblBhcmVudHMoUFUKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU9iamVjdCBTVkdBbmltYXRlZEludGVnZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZEludGVnZXI6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0
aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxs
KCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkSW50ZWdl
cjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC05NDQsNyArOTQ0LDcgQEAgT2JqZWN0
SW1wICpTVkdBbmltYXRlZEludGVnZXI6OmJyaWRnZShFeAogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NUldCcmlkZ2U8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRl
ZEludGVnZXI6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZEludGVn
ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRJbnRl
Z2VyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNo
ZURPTU9iamVjdDxTVkdBbmltYXRlZEludGVnZXI+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVk
SW50ZWdlcjo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC05NTcsMjEgKzk1NywyMSBAQCBib29s
IFNWR0FuaW1hdGVkTGVuZ3RoOjpoYXNQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1WYWx1ZSBTVkdBbmltYXRlZExlbmd0aDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdBbmltYXRlZExlbmd0aDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRMZW5ndGg+KHAx
LHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRMZW5ndGg6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0
ZWRMZW5ndGg6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9V
TlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZExlbmd0aDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkTGVuZ3RoOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRl
ZExlbmd0aDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC05NzksNyArOTc5LDcgQEAg
T2JqZWN0SW1wICpTVkdBbmltYXRlZExlbmd0aDo6YnJpZGdlKEV4ZQogICAgIHJldHVybiBuZXcg
S0RPTTo6RE9NQnJpZGdlPFNWR0FuaW1hdGVkTGVuZ3RoPihwMSxzdGF0aWNfY2FzdDxTVkdBbmlt
YXRlZExlbmd0aDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkTGVu
Z3RoOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkTGVu
Z3RoOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNo
ZURPTU9iamVjdDxTVkdBbmltYXRlZExlbmd0aD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRM
ZW5ndGg6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtOTkyLDIxICs5OTIsMjEgQEAgYm9vbCBT
VkdBbmltYXRlZExlbmd0aExpc3Q6Omhhc1Byb3BlcnR5KAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkTGVuZ3RoTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRMZW5n
dGhMaXN0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1h
dGVkTGVuZ3RoTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdBbmltYXRlZExlbmd0aExpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZExlbmd0aExp
c3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRl
ZExlbmd0aExpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkTGVuZ3RoTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CkBAIC0xMDE0LDcgKzEwMTQsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVkTGVu
Z3RoTGlzdDo6YnJpZGdlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHQW5pbWF0
ZWRMZW5ndGhMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZExlbmd0aExpc3Q6OlByaXZh
dGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZExlbmd0aExpc3Q6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVj
dDxTVkdBbmltYXRlZExlbmd0aExpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkTGVuZ3Ro
TGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0xMDI3LDEyICsxMDI3LDEyIEBAIGJvb2wg
U1ZHQW5pbWF0ZWROdW1iZXI6Omhhc1Byb3BlcnR5KEV4ZWMKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIFNWR0FuaW1hdGVkTnVtYmVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR0FuaW1hdGVkTnVtYmVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZE51bWJlcj4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZE51bWJlcjo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRl
ZE51bWJlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VO
VVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKQEAgLTEwNDksMTAgKzEwNDksMTAgQEAgYm9vbCBTVkdBbmltYXRlZE51bWJlcjo6cHV0
SW5QYXJlbnRzKFBVVAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0FuaW1hdGVk
TnVtYmVyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5p
bWF0ZWROdW1iZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkTnVtYmVyOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkg
Y29uc3QKQEAgLTEwNjAsNyArMTA2MCw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWROdW1iZXI6
OmJyaWRnZShFeGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0FuaW1hdGVk
TnVtYmVyPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZE51bWJlcjo6UHJpdmF0ZSAqPihpbXBs
KSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkTnVtYmVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkTnVtYmVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRlZE51bWJl
cj4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWROdW1iZXI6OlByaXZhdGUgKj4oaW1wbCkpOwog
fQpAQCAtMTA3MywyMSArMTA3MywyMSBAQCBib29sIFNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6aGFz
UHJvcGVydHkoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZE51bWJl
ckxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRO
dW1iZXJMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
Ojpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZE51bWJlckxpc3Q+KHAxLHAyLCZzX2hhc2hUYWJs
ZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkTnVtYmVyTGlz
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChw
MSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotT2JqZWN0IFNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5pbWF0
ZWROdW1iZXJMaXN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTEwOTUsNyArMTA5
NSw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWROdW1iZXJMaXN0OjpicmlkZ2UKICAgICByZXR1
cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdBbmltYXRlZE51bWJlckxpc3Q+KHAxLHN0YXRpY19j
YXN0PFNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVl
IFNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTVkdBbmltYXRlZE51bWJlckxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0FuaW1hdGVkTnVtYmVyTGlzdD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0OjpQcml2YXRlICo+KGltcGwpKTsK
IH0KQEAgLTExMDgsMjEgKzExMDgsMjEgQEAgYm9vbCBTVkdBbmltYXRlZFBhdGhEYXRhOjpoYXNQ
cm9wZXJ0eShFeAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRQYXRo
RGF0YTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFBh
dGhEYXRhOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjps
b29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZFBhdGhEYXRhPihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkUGF0aERhdGE6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5V
U0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2Jq
ZWN0IFNWR0FuaW1hdGVkUGF0aERhdGE6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpTVkdBbmltYXRlZFBhdGhEYXRhOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlZFBhdGhEYXRhOjpi
cmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTExMzAsNyArMTEzMCw3IEBAIE9iamVjdElt
cCAqU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6YnJpZGdlKEUKICAgICByZXR1cm4gbmV3IEtET006OkRP
TUJyaWRnZTxTVkdBbmltYXRlZFBhdGhEYXRhPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZFBh
dGhEYXRhOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRQYXRoRGF0
YTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFBhdGhE
YXRhOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNo
ZURPTU9iamVjdDxTVkdBbmltYXRlZFBhdGhEYXRhPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRl
ZFBhdGhEYXRhOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTExNDMsMjEgKzExNDMsMjEgQEAg
Ym9vbCBTVkdBbmltYXRlZFBvaW50czo6aGFzUHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRQb2ludHM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQb2ludHM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0FuaW1hdGVkUG9pbnRz
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkUG9p
bnRzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0Fu
aW1hdGVkUG9pbnRzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRQb2ludHM6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZFBvaW50czo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0
ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5p
bWF0ZWRQb2ludHM6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTE2NSw3ICsxMTY1
LDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRlZFBvaW50czo6YnJpZGdlKEV4ZQogICAgIHJldHVy
biBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR0FuaW1hdGVkUG9pbnRzPihwMSxzdGF0aWNfY2FzdDxT
VkdBbmltYXRlZFBvaW50czo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1h
dGVkUG9pbnRzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1h
dGVkUG9pbnRzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
OjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRlZFBvaW50cz4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5p
bWF0ZWRQb2ludHM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMTE3OCwyMSArMTE3OCwyMSBA
QCBib29sIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6aGFzCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJh
dGlvOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29r
dXBHZXRWYWx1ZTxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlv
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1h
dGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR0FuaW1hdGVkUHJlc2VydmVBc3Bl
Y3RSYXRpbzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0Fu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJh
dGlvOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTEyMDAsNyArMTIwMCw3IEBAIE9i
amVjdEltcCAqU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGkKICAgICByZXR1cm4gbmV3IEtE
T006OkRPTUJyaWRnZTxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+KHAxLHN0YXRpY19j
YXN0PFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9
CiAKLVZhbHVlIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2Jq
ZWN0PFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTEyMTMs
MjEgKzEyMTMsMjEgQEAgYm9vbCBTVkdBbmltYXRlZFJlY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRSZWN0OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUmVjdDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5p
bWF0ZWRSZWN0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0Fu
aW1hdGVkUmVjdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdBbmltYXRlZFJlY3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZFJlY3Q6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZFJlY3Q6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJl
dGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0Fu
aW1hdGVkUmVjdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMjM1LDcgKzEyMzUs
NyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVkUmVjdDo6YnJpZGdlKEV4ZWNTCiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHQW5pbWF0ZWRSZWN0PihwMSxzdGF0aWNfY2FzdDxTVkdB
bmltYXRlZFJlY3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFJl
Y3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRSZWN0
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURP
TU9iamVjdDxTVkdBbmltYXRlZFJlY3Q+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUmVjdDo6
UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0xMjQ4LDEyICsxMjQ4LDEyIEBAIGJvb2wgU1ZHQW5p
bWF0ZWRTdHJpbmc6Omhhc1Byb3BlcnR5KEV4ZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR0FuaW1hdGVkU3RyaW5nOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0FuaW1hdGVkU3RyaW5nOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZFN0cmluZz4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFN0cmluZzo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFN0cmlu
Zzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChw
MSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
QEAgLTEyNzAsMTAgKzEyNzAsMTAgQEAgYm9vbCBTVkdBbmltYXRlZFN0cmluZzo6cHV0SW5QYXJl
bnRzKFBVVAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0FuaW1hdGVkU3RyaW5n
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZWRT
dHJpbmc6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlNWR0FuaW1hdGVkU3RyaW5nOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QK
QEAgLTEyODEsNyArMTI4MSw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRTdHJpbmc6OmJyaWRn
ZShFeGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0FuaW1hdGVkU3RyaW5n
PihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZFN0cmluZzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9
CiAKLVZhbHVlIFNWR0FuaW1hdGVkU3RyaW5nOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlNWR0FuaW1hdGVkU3RyaW5nOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRlZFN0cmluZz4ocDEs
c3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRTdHJpbmc6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAt
MTI5NCwyMSArMTI5NCwyMSBAQCBib29sIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6aGFzUHJv
cGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFRyYW5zZm9ybUxp
c3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
Ojpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkVHJh
bnNmb3JtTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBR
X1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlz
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBw
MS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTEzMTYsNyArMTMxNiw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1M
aXN0OjpicmkKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6UHJpdmF0
ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9N
T2JqZWN0PFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTEzMjUsMTUgKzEzMjUs
MTUgQEAgYm9vbCBTVkdBbmltYXRpb25FbGVtZW50OjpoYXNQcm9wZXJ0eShFeAogewogICAgIGNv
bnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdBbmltYXRpb25FbGVtZW50
OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHBy
b3RvID0gU1ZHQW5pbWF0aW9uRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBT
VkdBbmltYXRpb25FbGVtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdUZXN0czo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR0FuaW1hdGlvbkVsZW1lbnRQcm90b0Z1bmMs
U1ZHQW5pbWF0aW9uRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAt
MTM1MywxMCArMTM1MywxMCBAQCBTVkdBbmltYXRpb25FbGVtZW50IFNWR0FuaW1hdGlvbkVsZW1l
bnRQCiAgICAgcmV0dXJuIFNWR0FuaW1hdGlvbkVsZW1lbnQ6Om51bGw7CiB9CiAKLVZhbHVlIFNW
R0FuaW1hdGlvbkVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdBbmltYXRpb25FbGVtZW50UHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3Rv
LmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0FuaW1hdGlvbkVsZW1lbnRQ
cm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdUZXN0czo6aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gU1ZHVGVzdHM6OmdldChwMSxwMixwMyk7CkBAIC0xMzcyLDEw
ICsxMzcyLDEwIEBAIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cHV0KFBVVF9NRVRIT0QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRpb25FbGVtZW50Ojpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0aW9uRWxlbWVudDo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdB
bmltYXRpb25FbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5p
bWF0aW9uRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMzgzLDcgKzEz
ODMsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJyaWRnZShFCiAgICAgcmV0
dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdBbmltYXRpb25FbGVtZW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdBbmltYXRpb25FbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpT
VkdBbmltYXRpb25FbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJl
dHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRpb25FbGVtZW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdBbmltYXRpb25FbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE0MDEsMTIg
KzE0MDEsMTIgQEAgYm9vbCBTVkdDaXJjbGVFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjUwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQ2lyY2xlRWxlbWVudDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdDaXJjbGVFbGVtZW50OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdDaXJj
bGVFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0Np
cmNsZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHQ2lyY2xlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVt
ZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmdldChwMSxwMixwMyk7CkBAIC0xNDMwLDEwICsxNDMwLDEwIEBAIGJvb2wgU1ZHQ2lyY2xlRWxl
bWVudDo6cHV0KFBVVF9NRVRIT0RfQVIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBT
VkdDaXJjbGVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqU1ZHQ2lyY2xlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlw
ZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQ2lyY2xlRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC0xNDQxLDcgKzE0NDEsNyBAQCBPYmplY3RJbXAgKlNWR0NpcmNsZUVs
ZW1lbnQ6OmJyaWRnZShFeGVjCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdD
aXJjbGVFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdDaXJjbGVFbGVtZW50OjpQcml2YXRlICo+
KGQpKTsKIH0KIAotVmFsdWUgU1ZHQ2lyY2xlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK1ZhbHVlSW1wICpTVkdDaXJjbGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdDaXJjbGVFbGVtZW50
PihwMSxzdGF0aWNfY2FzdDxTVkdDaXJjbGVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTE0NTksMTIgKzE0NTksMTIgQEAgYm9vbCBTVkdDbGlwUGF0aEVsZW1lbnQ6Omhhc1Byb3BlcnR5
KEV4ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQ2xpcFBhdGhFbGVtZW50Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0NsaXBQYXRoRWxlbWVudDo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0
VmFsdWU8U1ZHQ2xpcFBhdGhFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR0NsaXBQYXRoRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdDbGlwUGF0aEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtMTQ4OCwxMCArMTQ4OCwxMCBA
QCBib29sIFNWR0NsaXBQYXRoRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1PYmplY3QgU1ZHQ2xpcFBhdGhFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQ2xpcFBhdGhFbGVtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdDbGlwUGF0
aEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTQ5OSw3ICsxNDk5LDcg
QEAgT2JqZWN0SW1wICpTVkdDbGlwUGF0aEVsZW1lbnQ6OmJyaWRnZShFeAogICAgIHJldHVybiBu
ZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQ2xpcFBhdGhFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxT
VkdDbGlwUGF0aEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdDbGlwUGF0
aEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ2xpcFBh
dGhFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
OjpjYWNoZURPTU9iamVjdDxTVkdDbGlwUGF0aEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0Ns
aXBQYXRoRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNTA4LDEzICsxNTA4LDEzIEBA
IGJvb2wgU1ZHQ29sb3I6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEKIHsKICAgICBjb25zdCBI
YXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHQ29sb3I6OnNfaGFzaFRhYmxlLHAy
KTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdDb2xvclBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0
cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdDb2xvclByb3RvOjpzZWxmKHAxKTsKKyAg
ICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihLRE9N
OjpDU1NWYWx1ZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0NvbG9yOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR0NvbG9yOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJl
dHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHQ29sb3JQcm90b0Z1bmMsU1ZHQ29sb3I+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTE1MjgsMTAgKzE1MjgsMTAgQEAgU1ZHQ29sb3Ig
U1ZHQ29sb3JQcm90b0Z1bmM6OmNhc3QoS0pTOjpFeAogICAgIHJldHVybiBTVkdDb2xvcjo6bnVs
bDsKIH0KIAotVmFsdWUgU1ZHQ29sb3I6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHQ29sb3I6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHQ29sb3JQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAg
ICBPYmplY3RJbXAgKnByb3RvID0gU1ZHQ29sb3JQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJv
dG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlm
KEtET006OkNTU1ZhbHVlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBLRE9NOjpDU1NWYWx1
ZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0xNTQ1LDEw
ICsxNTQ1LDEwIEBAIGJvb2wgU1ZHQ29sb3I6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQ29sb3I6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdDb2xvcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdDb2xvclByb3RvOjpzZWxmKHAxKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlNWR0NvbG9yOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE1
NTYsNyArMTU1Niw3IEBAIE9iamVjdEltcCAqU1ZHQ29sb3I6OmJyaWRnZShFeGVjU3RhdGUgKnAK
ICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0NvbG9yPihwMSxzdGF0aWNfY2Fz
dDxTVkdDb2xvcjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0NvbG9yOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0NvbG9yOjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdDb2xvcj4o
cDEsc3RhdGljX2Nhc3Q8U1ZHQ29sb3I6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTU2OSwxMiAr
MTU2OSwxMiBAQCBib29sIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxl
bWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVu
dDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xNTg5LDEwICsxNTg5LDEwIEBAIGJvb2wgU1ZH
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LU9iamVjdCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b25FbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6YnJpZGdl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNjAwLDcgKzE2MDAsNyBAQCBPYmplY3RJbXAgKlNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0Jy
aWRnZTxTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQog
Ci1WYWx1ZSBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxl
bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2Fj
aGVET01PYmplY3Q8U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ+KHAxLHN0YXRp
Y19jYXN0PFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpQcml2YXRlICo+KGQp
KTsKIH0KQEAgLTE2MTgsMTIgKzE2MTgsMTIgQEAgYm9vbCBTVkdEZWZzRWxlbWVudDo6aGFzUHJv
cGVydHkoRXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRGVmc0VsZW1l
bnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRGVmc0VsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdl
dFZhbHVlPFNWR0RlZnNFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAK
LVZhbHVlIFNWR0RlZnNFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR0RlZnNFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTE2NDcsMTAgKzE2NDcsMTAgQEAgYm9vbCBTVkdE
ZWZzRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVJHUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
T2JqZWN0IFNWR0RlZnNFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHRGVmc0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90
b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0RlZnNFbGVtZW50OjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTE2NTgsNyArMTY1OCw3IEBAIE9iamVjdEltcCAqU1ZHRGVmc0Vs
ZW1lbnQ6OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNW
R0RlZnNFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdEZWZzRWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIFNWR0RlZnNFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR0RlZnNFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdEZWZzRWxlbWVudD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHRGVmc0VsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTY3MywxMiAr
MTY3MywxMiBAQCBib29sIFNWR0Rlc2NFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdEZXNjRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdEZXNjRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRGVzY0VsZW1l
bnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRGVzY0VsZW1l
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRGVz
Y0VsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYo
U1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAx
LHAyLHAzKTsKICAgICBpZihTVkdMYW5nU3BhY2U6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IFNWR0xhbmdTcGFjZTo6Z2V0KHAxLHAyLHAzKTsKQEAgLTE2OTksMTAgKzE2OTksMTAgQEAgYm9v
bCBTVkdEZXNjRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVJHUwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotT2JqZWN0IFNWR0Rlc2NFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqU1ZHRGVzY0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmpl
Y3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0Rlc2NFbGVtZW50OjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE3MTAsNyArMTcxMCw3IEBAIE9iamVjdEltcCAqU1ZH
RGVzY0VsZW1lbnQ6OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJp
ZGdlPFNWR0Rlc2NFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdEZXNjRWxlbWVudDo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0Rlc2NFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKlNWR0Rlc2NFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdEZXNjRWxlbWVudD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHRGVzY0VsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTcy
MywxMiArMTcyMywxMiBAQCBib29sIFNWR0RvY3VtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUg
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdEb2N1bWVudDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdEb2N1bWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRG9jdW1lbnQ+
KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRG9jdW1lbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRG9jdW1lbnQ6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoS0RPTTo6RG9j
dW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIEtET006OkRvY3VtZW50OjpnZXQocDEs
cDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTE3NDgsMTAgKzE3NDgsMTAgQEAg
Ym9vbCBTVkdEb2N1bWVudDo6cHV0SW5QYXJlbnRzKFBVVF9NRVRITwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotT2JqZWN0IFNWR0RvY3VtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqU1ZHRG9jdW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBLRE9NOjpEb2N1bWVudCBLU1ZHOjpFY21hSW50ZXJmYWNlOjpp
bmhlcml0ZWREb2N1bWVudENhc3QoY29uc3QgT2JqZWN0SW1wICpwMSkKQEAgLTE3NzQsNyArMTc3
NCw3IEBAIE9iamVjdEltcCAqU1ZHRG9jdW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUKICAgICByZXR1
cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0RvY3VtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdE
b2N1bWVudDo6UHJpdmF0ZSAqPihLRE9NOjpFdmVudFRhcmdldDo6ZCkpOwogfQogCi1WYWx1ZSBT
VkdEb2N1bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdEb2N1
bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2Fj
aGVET01PYmplY3Q8U1ZHRG9jdW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0RvY3VtZW50OjpQcml2
YXRlICo+KEtET006OkV2ZW50VGFyZ2V0OjpkKSk7CiB9CkBAIC0xNzg3LDcgKzE3ODcsNyBAQCBi
b29sIFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBTVkdFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0VsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0VsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KQEAgLTE5MDcsNyArMTkwNyw3IEBAIFNWR0VsZW1lbnQgS1NWRzo6dG9TVkdF
bGVtZW50KEtKUzo6RXhlY1MKICAgICByZXR1cm4gU1ZHRWxlbWVudDo6bnVsbDsKIH0KIAotVmFs
dWUgU1ZHRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIGlmKEtET006OkVsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIEtET006OkVs
ZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMTkyNywx
MCArMTkyNywxMCBAQCBib29sIFNWR0VsZW1lbnQ6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9ECiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1
aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBLRE9NOjpFbGVtZW50IEtTVkc6OkVjbWFJ
bnRlcmZhY2U6OmluaGVyaXRlZEVsZW1lbnRDYXN0KGNvbnN0IE9iamVjdEltcCAqcDEpCkBAIC0x
OTQ3LDcgKzE5NDcsNyBAQCBPYmplY3RJbXAgKlNWR0VsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUg
CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdFbGVtZW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRWxlbWVudDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50OjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxT
VkdFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0K
QEAgLTE5NjAsMTIgKzE5NjAsMTIgQEAgYm9vbCBTVkdFbGVtZW50SW5zdGFuY2U6Omhhc1Byb3Bl
cnR5KEV4ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRWxlbWVudEluc3RhbmNl
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0VsZW1lbnRJbnN0YW5j
ZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0VmFsdWU8U1ZHRWxlbWVudEluc3RhbmNlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7
CiB9CiAKLVZhbHVlIFNWR0VsZW1lbnRJbnN0YW5jZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50SW5zdGFuY2U6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoS0RPTTo6RXZlbnRUYXJnZXQ6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIEtET006OkV2ZW50VGFyZ2V0OjpnZXQocDEscDIscDMpOwog
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTE5ODAsMTAgKzE5ODAsMTAgQEAgYm9vbCBTVkdF
bGVtZW50SW5zdGFuY2U6OnB1dChQVVRfTUVUSE9EXwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
T2JqZWN0IFNWR0VsZW1lbnRJbnN0YW5jZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9i
amVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRWxlbWVudEluc3RhbmNlOjpi
cmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE5OTEsNyArMTk5MSw3IEBAIE9iamVjdElt
cCAqU1ZHRWxlbWVudEluc3RhbmNlOjpicmlkZ2UoRXgKICAgICByZXR1cm4gbmV3IEtET006OkRP
TVJXQnJpZGdlPFNWR0VsZW1lbnRJbnN0YW5jZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudElu
c3RhbmNlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRWxlbWVudEluc3RhbmNlOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZTo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01P
YmplY3Q8U1ZHRWxlbWVudEluc3RhbmNlPihwMSxzdGF0aWNfY2FzdDxTVkdFbGVtZW50SW5zdGFu
Y2U6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjAwMCwxMiArMjAwMCwxMiBAQCBib29sIFNWR0Vs
ZW1lbnRJbnN0YW5jZUxpc3Q6Omhhc1Byb3BlcnR5CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICpl
ID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6OnNfaGFzaFRhYmxl
LHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdFbGVt
ZW50SW5zdGFuY2VMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0VsZW1lbnRJ
bnN0YW5jZUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdFbGVt
ZW50SW5zdGFuY2VMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R0VsZW1lbnRJbnN0YW5jZUxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdFbGVtZW50SW5zdGFuY2VMaXN0UHJvdG9GdW5jLFNW
R0VsZW1lbnRJbnN0YW5jZUxpc3Q+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAg
LTIwMTcsMTggKzIwMTcsMTggQEAgU1ZHRWxlbWVudEluc3RhbmNlTGlzdCBTVkdFbGVtZW50SW5z
dGFuYwogICAgIHJldHVybiBTVkdFbGVtZW50SW5zdGFuY2VMaXN0OjpudWxsOwogfQogCi1WYWx1
ZSBTVkdFbGVtZW50SW5zdGFuY2VMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHRWxlbWVudEluc3Rh
bmNlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdFbGVt
ZW50SW5zdGFuY2VMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHRWxlbWVudEluc3RhbmNlTGlz
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0VsZW1lbnRJ
bnN0YW5jZUxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gU1ZHRWxlbWVudEluc3RhbmNlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBj
b25zdApAQCAtMjAzNiw3ICsyMDM2LDcgQEAgT2JqZWN0SW1wICpTVkdFbGVtZW50SW5zdGFuY2VM
aXN0OjpicmlkZwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR0VsZW1lbnRJbnN0
YW5jZUxpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6OlByaXZhdGUg
Kj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdFbGVtZW50SW5zdGFuY2VMaXN0OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJbnN0YW5j
ZUxpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMjA1NCwxMiArMjA1NCwxMiBAQCBib29s
IFNWR0VsbGlwc2VFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1WYWx1ZSBTVkdFbGxpcHNlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdFbGxpcHNlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRWxsaXBzZUVsZW1lbnQ+KHAx
LHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRWxsaXBzZUVsZW1lbnQ6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxsaXBz
ZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYo
U1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAx
LHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIs
cDMpOwpAQCAtMjA4MywxMCArMjA4MywxMCBAQCBib29sIFNWR0VsbGlwc2VFbGVtZW50OjpwdXQo
UFVUX01FVEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRWxsaXBzZUVs
ZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdFbGxp
cHNlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIE9iamVjdEltcCAqU1ZHRWxsaXBzZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBj
b25zdApAQCAtMjA5NCw3ICsyMDk0LDcgQEAgT2JqZWN0SW1wICpTVkdFbGxpcHNlRWxlbWVudDo6
YnJpZGdlKEV4ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRWxsaXBzZUVs
ZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0VsbGlwc2VFbGVtZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgU1ZHRWxsaXBzZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHRWxsaXBzZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0VsbGlwc2VFbGVtZW50Pihw
MSxzdGF0aWNfY2FzdDxTVkdFbGxpcHNlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0y
MTA3LDEyICsyMTA3LDEyIEBAIGJvb2wgU1ZHRXZlbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAq
cDEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0V2ZW50OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0V2ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdFdmVudD4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdFdmVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdFdmVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihLRE9NOjpFdmVudDo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gS0RPTTo6RXZlbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwpAQCAtMjEyNCwxMCArMjEyNCwxMCBAQCBib29sIFNWR0V2ZW50OjpwdXQo
UFVUX01FVEhPRF9BUkdTKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0V2ZW50
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRXZlbnQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmlu
dGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0
OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAg
KlNWR0V2ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIxMzUsNyArMjEzNSw3
IEBAIE9iamVjdEltcCAqU1ZHRXZlbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAKICAgICByZXR1cm4g
bmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0V2ZW50PihwMSxzdGF0aWNfY2FzdDxTVkdFdmVudDo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0V2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKlNWR0V2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdFdmVudD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHRXZlbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjE0OCwyMSArMjE0OCwyMSBAQCBi
b29sIFNWR0V4Y2VwdGlvbjo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBTVkdFeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHRXhjZXB0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdFeGNlcHRpb24+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRXhjZXB0aW9uOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0V4Y2VwdGlvbjo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAy
KTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNW
R0V4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNW
R0V4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIE9iamVjdEltcCAqU1ZHRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QK
QEAgLTIxNzAsNyArMjE3MCw3IEBAIE9iamVjdEltcCAqU1ZHRXhjZXB0aW9uOjpicmlkZ2UoRXhl
Y1N0YXQKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdFeGNlcHRpb24+KHAxLHN0
YXRpY19jYXN0PFNWR0V4Y2VwdGlvbjo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNW
R0V4Y2VwdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdFeGNl
cHRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNh
Y2hlRE9NT2JqZWN0PFNWR0V4Y2VwdGlvbj4ocDEsc3RhdGljX2Nhc3Q8U1ZHRXhjZXB0aW9uOjpQ
cml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTIxODMsMjEgKzIxODMsMjEgQEAgYm9vbCBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAK
LVZhbHVlIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7
IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotT2JqZWN0IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5p
bnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVj
dDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1w
ICpTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTIyMDUsNyArMjIwNSw3IEBAIE9iamVjdEltcCAqU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDoKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkPihwMSxzdGF0aWNfY2FzdDxTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkPihwMSxz
dGF0aWNfY2FzdDxTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpQcml2YXRlICo+KGltcGwp
KTsKIH0KQEAgLTIyMTksMTIgKzIyMTksMTIgQEAgYm9vbCBTVkdGRUJsZW5kRWxlbWVudDo6aGFz
UHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRkVCbGVuZEVs
ZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVCbGVuZEVs
ZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldFZhbHVlPFNWR0ZFQmxlbmRFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CiAKLVZhbHVlIFNWR0ZFQmxlbmRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFQmxlbmRFbGVtZW50OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldChwMSxwMixwMyk7CkBA
IC0yMjQwLDEwICsyMjQwLDEwIEBAIGJvb2wgU1ZHRkVCbGVuZEVsZW1lbnQ6OnB1dChQVVRfTUVU
SE9EX0EKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdGRUJsZW5kRWxlbWVudDo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0ZFQmxlbmRFbGVt
ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpTVkdGRUJsZW5kRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC0yMjUxLDcgKzIyNTEsNyBAQCBPYmplY3RJbXAgKlNWR0ZFQmxlbmRFbGVtZW50OjpicmlkZ2Uo
RXhlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdGRUJsZW5kRWxlbWVudD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHRkVCbGVuZEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1W
YWx1ZSBTVkdGRUJsZW5kRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTVkdGRUJsZW5kRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVCbGVuZEVsZW1lbnQ+KHAxLHN0YXRp
Y19jYXN0PFNWR0ZFQmxlbmRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIyNjUsMTIg
KzIyNjUsMTIgQEAgYm9vbCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6aGFzUHJvcGVydAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdl
dFZhbHVlPFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CiAKLVZhbHVlIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAg
ICAgaWYoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldChw
MSxwMixwMyk7CkBAIC0yMjg2LDEwICsyMjg2LDEwIEBAIGJvb2wgU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQ6OnB1dChQVVRfTUUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdGRUNv
bG9yTWF0cml4RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJ
bXAgKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0
UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMjk3LDcgKzIyOTcsNyBAQCBPYmplY3RJ
bXAgKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpicmlkCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpE
T01SV0JyaWRnZTxTVkdGRUNvbG9yTWF0cml4RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdGRUNvbG9y
TWF0cml4RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdG
RUNvbG9yTWF0cml4RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ+KHAxLHN0
YXRpY19jYXN0PFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTIzMTEsMTIgKzIzMTEsMTIgQEAgYm9vbCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
aGFzUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0ZFQ29tcG9uZW50
VHJhbnNmZXJFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldChwMSxwMixwMyk7CkBAIC0yMzMy
LDEwICsyMzMyLDEwIEBAIGJvb2wgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnB1dCgK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90
eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1
cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMzQzLDcgKzIzNDMsNyBAQCBPYmplY3RJ
bXAgKlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpE
T01SV0JyaWRnZTxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1
ZSBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIzNTcsMTIgKzIzNTcsMTIgQEAg
Ym9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRkVDb21w
b3NpdGVFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAyLHAzKTsKQEAgLTIzNzgsMTAg
KzIzNzgsMTAgQEAgYm9vbCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnB1dChQVVRfTUVUSAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0ZFQ29tcG9zaXRlRWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBw
MS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QK
QEAgLTIzODksNyArMjM4OSw3IEBAIE9iamVjdEltcCAqU1ZHRkVDb21wb3NpdGVFbGVtZW50Ojpi
cmlkZ2UKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZFQ29tcG9zaXRlRWxl
bWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpQcml2YXRlICo+KGQp
KTsKIH0KIAotVmFsdWUgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVDb21w
b3NpdGVFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlByaXZh
dGUgKj4oZCkpOwogfQpAQCAtMjQwMywxMiArMjQwMywxMiBAQCBib29sIFNWR0ZFRmxvb2RFbGVt
ZW50OjpoYXNQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdG
RUZsb29kRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdG
RUZsb29kRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRkVGbG9vZEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJs
ZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRkVGbG9vZEVsZW1lbnQ6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVGbG9vZEVsZW1lbnQ6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBp
ZihTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAy
LHAzKTsKQEAgLTI0MjQsMTAgKzI0MjQsMTAgQEAgYm9vbCBTVkdGRUZsb29kRWxlbWVudDo6cHV0
KFBVVF9NRVRIT0RfQQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFRmxvb2RF
bGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRkVG
bG9vZEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKlNWR0ZFRmxvb2RFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkg
Y29uc3QKQEAgLTI0MzUsNyArMjQzNSw3IEBAIE9iamVjdEltcCAqU1ZHRkVGbG9vZEVsZW1lbnQ6
OmJyaWRnZShFeGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZFRmxvb2RF
bGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUZsb29kRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIFNWR0ZFRmxvb2RFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR0ZFRmxvb2RFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdGRUZsb29kRWxlbWVudD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHRkVGbG9vZEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAt
MjQ0NCwxNCArMjQ0NCwxNCBAQCBib29sIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6aGFzUHJv
cGVyCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0
cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudFByb3RvOjpz
ZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwor
ICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnRQcm90bzo6c2Vs
ZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAg
ICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBp
ZihTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50UHJvdG9GdW5j
LFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQpAQCAtMjQ2MywxMCArMjQ2MywxMCBAQCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQgU1ZHRkVH
YXVzc2lhbkJsCiAgICAgcmV0dXJuIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6bnVsbDsKIH0K
IAotVmFsdWUgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnBy
b3RvID0gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHBy
b3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBp
ZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQo
cDEscDIscDMpOwogICAgIGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTI0ODEs
MTAgKzI0ODEsMTAgQEAgYm9vbCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnB1dChQVVRfTQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtMjQ5Miw3ICsyNDkyLDcgQEAgT2JqZWN0SW1wICpTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQ6OmJyaQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNo
ZURPTU9iamVjdDxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yNTA5LDEyICsyNTA5
LDEyIEBAIGJvb2wgU1ZHRkVJbWFnZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWMKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZFSW1hZ2VFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFSW1hZ2VFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGRUltYWdl
RWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdGRUlt
YWdlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdGRUltYWdlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVt
ZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmdldChwMSxwMixwMyk7CkBAIC0yNTM3LDEwICsyNTM3LDEwIEBAIGJvb2wgU1ZHRkVJbWFnZUVs
ZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0EKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBT
VkdGRUltYWdlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJ
bXAgKlNWR0ZFSW1hZ2VFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90
eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1
cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdGRUltYWdlRWxlbWVudDo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC0yNTQ4LDcgKzI1NDgsNyBAQCBPYmplY3RJbXAgKlNWR0ZFSW1h
Z2VFbGVtZW50OjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxT
VkdGRUltYWdlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVJbWFnZUVsZW1lbnQ6OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdGRUltYWdlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUltYWdlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVJbWFn
ZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFSW1hZ2VFbGVtZW50OjpQcml2YXRlICo+KGQp
KTsKIH0KQEAgLTI1NjIsMTIgKzI1NjIsMTIgQEAgYm9vbCBTVkdGRU1lcmdlRWxlbWVudDo6aGFz
UHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRkVNZXJnZUVs
ZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVNZXJnZUVs
ZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldFZhbHVlPFNWR0ZFTWVyZ2VFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CiAKLVZhbHVlIFNWR0ZFTWVyZ2VFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFTWVyZ2VFbGVtZW50OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldChwMSxwMixwMyk7CkBA
IC0yNTgzLDEwICsyNTgzLDEwIEBAIGJvb2wgU1ZHRkVNZXJnZUVsZW1lbnQ6OnB1dChQVVRfTUVU
SE9EX0EKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdGRU1lcmdlRWxlbWVudDo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0ZFTWVyZ2VFbGVt
ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpTVkdGRU1lcmdlRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC0yNTk0LDcgKzI1OTQsNyBAQCBPYmplY3RJbXAgKlNWR0ZFTWVyZ2VFbGVtZW50OjpicmlkZ2Uo
RXhlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdGRU1lcmdlRWxlbWVudD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHRkVNZXJnZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1W
YWx1ZSBTVkdGRU1lcmdlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTVkdGRU1lcmdlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVNZXJnZUVsZW1lbnQ+KHAxLHN0YXRp
Y19jYXN0PFNWR0ZFTWVyZ2VFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI2MDcsMTIg
KzI2MDcsMTIgQEAgYm9vbCBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFs
dWU8U1ZHRkVNZXJnZU5vZGVFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CkBAIC0yNjI3LDEwICsyNjI3LDEwIEBAIGJvb2wgU1ZHRkVNZXJnZU5vZGVF
bGVtZW50OjpwdXQoUFVUX01FVEgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdG
RU1lcmdlTm9kZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNjM4LDcgKzI2MzgsNyBAQCBPYmplY3RJbXAg
KlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6YnJpZGdlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01S
V0JyaWRnZTxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFTWVyZ2VO
b2RlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0ZFTWVyZ2VOb2RlRWxl
bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdGRU1lcmdlTm9k
ZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
OmNhY2hlRE9NT2JqZWN0PFNWR0ZFTWVyZ2VOb2RlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZH
RkVNZXJnZU5vZGVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI2NTIsMTIgKzI2NTIs
MTIgQEAgYm9vbCBTVkdGRU9mZnNldEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRkVPZmZzZXRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRkVPZmZz
ZXRFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0ZF
T2Zmc2V0RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdGRU9mZnNldEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZH
RWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAyLHAzKTsKQEAgLTI2NzMsMTAgKzI2NzMsMTAg
QEAgYm9vbCBTVkdGRU9mZnNldEVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EXwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFT2Zmc2V0RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVPZmZz
ZXRFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI2ODQsNyArMjY4NCw3
IEBAIE9iamVjdEltcCAqU1ZHRkVPZmZzZXRFbGVtZW50OjpicmlkZ2UoRXgKICAgICByZXR1cm4g
bmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZFT2Zmc2V0RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHRkVPZmZzZXRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVPZmZz
ZXRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFT2Zm
c2V0RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVPZmZzZXRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdG
RU9mZnNldEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjY5OCwxMiArMjY5OCwxMiBA
QCBib29sIFNWR0ZFVGlsZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBTVkdGRVRpbGVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKlNWR0ZFVGlsZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0ZFVGlsZUVsZW1lbnQ+
KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRkVUaWxlRWxlbWVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRVRp
bGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlm
KFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChw
MSxwMixwMyk7CiAgICAgaWYoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OmdldChwMSxwMixwMyk7CkBAIC0yNzE5LDEwICsyNzE5LDEwIEBAIGJvb2wgU1ZHRkVU
aWxlRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9i
amVjdCBTVkdGRVRpbGVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHRkVUaWxlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVUaWxlRWxlbWVudDo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNzMwLDcgKzI3MzAsNyBAQCBPYmplY3RJbXAgKlNWR0ZF
VGlsZUVsZW1lbnQ6OmJyaWRnZShFeGVjCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRn
ZTxTVkdGRVRpbGVFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRVRpbGVFbGVtZW50OjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVUaWxlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdGRVRpbGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdGRVRpbGVF
bGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRVRpbGVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTI3NDQsMTIgKzI3NDQsMTIgQEAgYm9vbCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Ojpo
YXNQcm9wZXJ0eQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRkVUdXJidWxlbmNl
RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRVR1cmJ1
bGVuY2VFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGRVR1cmJ1bGVuY2VFbGVtZW50PihwMSxwMiwmc19oYXNo
VGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVUdXJidWxlbmNl
RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihT
VkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEs
cDIscDMpOwogICAgIGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpnZXQocDEscDIscDMpOwpAQCAtMjc2NSwxMCArMjc2NSwxMCBAQCBib29sIFNWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQ6OnB1dChQVVRfTUVUCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmpl
Y3QgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0
aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxs
KCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjc3Niw3ICsyNzc2LDcgQEAg
T2JqZWN0SW1wICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpicmlkZwogICAgIHJldHVybiBuZXcg
S0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVUdXJidWxlbmNlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVUdXJidWxlbmNlRWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBA
IC0yNzg1LDggKzI3ODUsOCBAQCBib29sIFNWR0ZpbHRlckVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4
ZWNTCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR0Zp
bHRlckVsZW1lbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAg
ICBPYmplY3QgcHJvdG8gPSBTVkdGaWx0ZXJFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlm
KHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpw
cm90byA9IFNWR0ZpbHRlckVsZW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0xhbmdT
cGFjZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKQEAgLTI3OTUsNyArMjc5NSw3
IEBAIGJvb2wgU1ZHRmlsdGVyRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1MKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZpbHRlckVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHRmlsdGVyRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR0ZpbHRlckVsZW1lbnRQcm90
b0Z1bmMsU1ZHRmlsdGVyRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpA
QCAtMjgwNywxMCArMjgwNywxMCBAQCBTVkdGaWx0ZXJFbGVtZW50IFNWR0ZpbHRlckVsZW1lbnRQ
cm90b0Z1CiAgICAgcmV0dXJuIFNWR0ZpbHRlckVsZW1lbnQ6Om51bGw7CiB9CiAKLVZhbHVlIFNW
R0ZpbHRlckVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRmlsdGVyRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdGaWx0ZXJFbGVtZW50UHJvdG86OnNlbGYocDEp
OwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxw
Mik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0ZpbHRlckVsZW1lbnRQcm90bzo6c2VsZihw
MSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQo
cDEscDIpOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNW
R0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdMYW5nU3BhY2U6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIFNWR0xhbmdTcGFjZTo6Z2V0KHAxLHAyLHAzKTsKQEAgLTI4MzIsMTAgKzI4
MzIsMTAgQEAgYm9vbCBTVkdGaWx0ZXJFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUgogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZpbHRlckVsZW1lbnQ6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGaWx0ZXJFbGVtZW50Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR0ZpbHRlckVsZW1l
bnRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdGaWx0ZXJFbGVtZW50Ojpi
cmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI4NDMsNyArMjg0Myw3IEBAIE9iamVjdElt
cCAqU1ZHRmlsdGVyRWxlbWVudDo6YnJpZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3IEtET006OkRP
TVJXQnJpZGdlPFNWR0ZpbHRlckVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdGaWx0ZXJFbGVtZW50OjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpbHRlckVsZW1lbnQ6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNW
R0ZpbHRlckVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQ6OlByaXZhdGUg
Kj4oZCkpOwogfQpAQCAtMjg1NiwyMSArMjg1NiwyMSBAQCBib29sIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICBpZihTVkdTdHlsYWJsZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gU1ZHU3R5bGFibGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjg3OCw3ICsyODc4LDcgQEAgT2JqZWN0
SW1wICpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dAogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NQnJpZGdlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpQcml2YXRlICo+KGlt
cGwpKTsKIH0KIAotVmFsdWUgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzPihwMSxzdGF0aWNfY2FzdDxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMjg5MSwyMSArMjg5MSwyMSBAQCBib29sIFNWR0Zp
dFRvVmlld0JveDo6aGFzUHJvcGVydHkoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
YWx1ZSBTVkdGaXRUb1ZpZXdCb3g6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHRml0VG9WaWV3Qm94OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJl
dHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGaXRUb1ZpZXdCb3g+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRml0VG9WaWV3Qm94OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpdFRvVmlld0JveDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5V
U0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2Jq
ZWN0IFNWR0ZpdFRvVmlld0JveDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmpl
Y3RJbXAgKlNWR0ZpdFRvVmlld0JveDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3Rv
dHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0
dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRml0VG9WaWV3Qm94OjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTI5MTMsNyArMjkxMyw3IEBAIE9iamVjdEltcCAqU1ZHRml0VG9W
aWV3Qm94OjpicmlkZ2UoRXhlY1MKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdG
aXRUb1ZpZXdCb3g+KHAxLHN0YXRpY19jYXN0PFNWR0ZpdFRvVmlld0JveDo6UHJpdmF0ZSAqPihp
bXBsKSk7CiB9CiAKLVZhbHVlIFNWR0ZpdFRvVmlld0JveDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK1ZhbHVlSW1wICpTVkdGaXRUb1ZpZXdCb3g6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZpdFRvVmlld0JveD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHRml0VG9WaWV3Qm94OjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAg
LTI5MzEsMTIgKzI5MzEsMTIgQEAgYm9vbCBTVkdHRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0
YXRlIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHR0VsZW1lbnQ6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHR0VsZW1lbnQ6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0dFbGVt
ZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0dFbGVtZW50
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0dFbGVt
ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0Vs
ZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixw
Myk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsK
QEAgLTI5NjAsMTAgKzI5NjAsMTAgQEAgYm9vbCBTVkdHRWxlbWVudDo6cHV0KFBVVF9NRVRIT0Rf
QVJHUykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdHRWxlbWVudDo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0dFbGVtZW50Ojpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnBy
ZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHlu
YW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdH
RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yOTcxLDcgKzI5NzEsNyBA
QCBPYmplY3RJbXAgKlNWR0dFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlCiAgICAgcmV0dXJuIG5l
dyBLRE9NOjpET01SV0JyaWRnZTxTVkdHRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHR0VsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdHRWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdHRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHR0VsZW1lbnQ+
KHAxLHN0YXRpY19jYXN0PFNWR0dFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI5ODcs
MTIgKzI5ODcsMTIgQEAgYm9vbCBTVkdHcmFkaWVudEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHR3JhZGllbnRFbGVtZW50OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0dyYWRpZW50RWxlbWVudDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8
U1ZHR3JhZGllbnRFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZh
bHVlIFNWR0dyYWRpZW50RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdHcmFkaWVudEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtMzAxMCwxMCArMzAxMCwxMCBAQCBib29s
IFNWR0dyYWRpZW50RWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgU1ZHR3JhZGllbnRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK09iamVjdEltcCAqU1ZHR3JhZGllbnRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWls
dGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVs
bCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdHcmFkaWVudEVsZW1l
bnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzAyMSw3ICszMDIxLDcgQEAgT2Jq
ZWN0SW1wICpTVkdHcmFkaWVudEVsZW1lbnQ6OmJyaWRnZShFeAogICAgIHJldHVybiBuZXcgS0RP
TTo6RE9NUldCcmlkZ2U8U1ZHR3JhZGllbnRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdHcmFk
aWVudEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdHcmFkaWVudEVsZW1l
bnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHR3JhZGllbnRFbGVt
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNo
ZURPTU9iamVjdDxTVkdHcmFkaWVudEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0dyYWRpZW50
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zMDQwLDEyICszMDQwLDEyIEBAIGJvb2wg
U1ZHSW1hZ2VFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIFNWR0ltYWdlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdJbWFnZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0ltYWdlRWxlbWVudD4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdJbWFnZUVsZW1lbnQ6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHSW1hZ2VFbGVtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAg
ICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTMw
NzAsMTAgKzMwNzAsMTAgQEAgYm9vbCBTVkdJbWFnZUVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FS
RwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ltYWdlRWxlbWVudDo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0ltYWdlRWxlbWVudDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
U1ZHSW1hZ2VFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTMwODEsNyAr
MzA4MSw3IEBAIE9iamVjdEltcCAqU1ZHSW1hZ2VFbGVtZW50OjpicmlkZ2UoRXhlY1MKICAgICBy
ZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ltYWdlRWxlbWVudD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHSW1hZ2VFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHSW1hZ2VF
bGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0ltYWdlRWxl
bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2Fj
aGVET01PYmplY3Q8U1ZHSW1hZ2VFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzA5NCwxMiArMzA5NCwxMiBAQCBib29sIFNWR0xh
bmdTcGFjZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
YWx1ZSBTVkdMYW5nU3BhY2U6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHTGFuZ1NwYWNlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdMYW5nU3BhY2U+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KIAotVmFsdWUgU1ZHTGFuZ1NwYWNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0xhbmdTcGFjZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVT
RUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTMxMTYsMTAgKzMxMTYsMTAgQEAg
Ym9vbCBTVkdMYW5nU3BhY2U6OnB1dEluUGFyZW50cyhQVVRfTUVUSAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotT2JqZWN0IFNWR0xhbmdTcGFjZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitPYmplY3RJbXAgKlNWR0xhbmdTcGFjZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHTGFuZ1NwYWNlOjpicmlkZ2UoRXhl
Y1N0YXRlICpwMSkgY29uc3QKQEAgLTMxMjcsNyArMzEyNyw3IEBAIE9iamVjdEltcCAqU1ZHTGFu
Z1NwYWNlOjpicmlkZ2UoRXhlY1N0YXQKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdl
PFNWR0xhbmdTcGFjZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHTGFuZ1NwYWNlOjpQcml2YXRlICo+KGlt
cGwpKTsKIH0KIAotVmFsdWUgU1ZHTGFuZ1NwYWNlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR0xhbmdTcGFjZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHTGFuZ1NwYWNlPihwMSxzdGF0aWNf
Y2FzdDxTVkdMYW5nU3BhY2U6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMzEzNiwxMiArMzEz
NiwxMiBAQCBib29sIFNWR0xlbmd0aDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwCiB7CiAgICAg
Y29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR0xlbmd0aDo6c19oYXNo
VGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNW
R0xlbmd0aFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdMZW5ndGhQcm90bzo6c2Vs
ZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdMZW5ndGg6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGVuZ3RoOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHTGVuZ3RoUHJvdG9GdW5jLFNWR0xl
bmd0aD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzE1OCwxMCArMzE1OCwx
MCBAQCBTVkdMZW5ndGggS1NWRzo6dG9TVkdMZW5ndGgoS0pTOjpFeGVjU3RhCiAgICAgcmV0dXJu
IFNWR0xlbmd0aDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHTGVuZ3RoOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0xlbmd0aDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdMZW5ndGhQcm90
bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJv
dG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHTGVuZ3RoUHJvdG86OnNl
bGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+
Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQpAQCAtMzE3NywxMCArMzE3NywxMCBAQCBib29sIFNWR0xlbmd0aDo6cHV0SW5QYXJlbnRzKFBV
VF9NRVRIT0RfCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHTGVuZ3RoOjpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHTGVuZ3RoOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR0xlbmd0aFBy
b3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0xlbmd0aDo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC0zMTg4LDcgKzMxODgsNyBAQCBPYmplY3RJbXAgKlNWR0xlbmd0
aDo6YnJpZGdlKEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxT
VkdMZW5ndGg+KHAxLHN0YXRpY19jYXN0PFNWR0xlbmd0aDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9
CiAKLVZhbHVlIFNWR0xlbmd0aDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpTVkdMZW5ndGg6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006OmNhY2hlRE9NT2JqZWN0PFNWR0xlbmd0aD4ocDEsc3RhdGljX2Nhc3Q8U1ZHTGVuZ3RoOjpQ
cml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTMxOTcsMTIgKzMxOTcsMTIgQEAgYm9vbCBTVkdMZW5n
dGhMaXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9
IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdMZW5ndGhMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAg
aWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHTGVuZ3RoTGlzdFByb3Rv
OjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVl
OworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdMZW5ndGhMaXN0UHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHTGVuZ3RoTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpTVkdMZW5ndGhMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHTGVuZ3RoTGlzdFByb3RvRnVuYyxT
VkdMZW5ndGhMaXN0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zMjE0LDE4
ICszMjE0LDE4IEBAIFNWR0xlbmd0aExpc3QgU1ZHTGVuZ3RoTGlzdFByb3RvRnVuYzo6Y2EKICAg
ICByZXR1cm4gU1ZHTGVuZ3RoTGlzdDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHTGVuZ3RoTGlzdDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdMZW5ndGhM
aXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBw
cm90byA9IFNWR0xlbmd0aExpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnBy
b3RvID0gU1ZHTGVuZ3RoTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR0xlbmd0aExpc3Q6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdMZW5ndGhMaXN0Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR0xl
bmd0aExpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdMZW5ndGhMaXN0
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTMyMzMsNyArMzIzMyw3IEBAIE9iamVj
dEltcCAqU1ZHTGVuZ3RoTGlzdDo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IEtET006
OkRPTUJyaWRnZTxTVkdMZW5ndGhMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdMZW5ndGhMaXN0OjpQ
cml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHTGVuZ3RoTGlzdDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdMZW5ndGhMaXN0OjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdMZW5ndGhM
aXN0PihwMSxzdGF0aWNfY2FzdDxTVkdMZW5ndGhMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0K
QEAgLTMyNTEsMTIgKzMyNTEsMTIgQEAgYm9vbCBTVkdMaW5lRWxlbWVudDo6aGFzUHJvcGVydHko
RXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHTGluZUVsZW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGluZUVsZW1lbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVl
PFNWR0xpbmVFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVl
IFNWR0xpbmVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0xpbmVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0Vs
ZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTMyODAsMTAgKzMyODAsMTAgQEAgYm9vbCBTVkdMaW5lRWxl
bWVudDo6cHV0KFBVVF9NRVRIT0RfQVJHUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0
IFNWR0xpbmVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqU1ZHTGluZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUo
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0xpbmVFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpw
MSkgY29uc3QKQEAgLTMyOTEsNyArMzI5MSw3IEBAIE9iamVjdEltcCAqU1ZHTGluZUVsZW1lbnQ6
OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0xpbmVF
bGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdMaW5lRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9
CiAKLVZhbHVlIFNWR0xpbmVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKlNWR0xpbmVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdMaW5lRWxlbWVudD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHTGluZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzMwNCwxMiArMzMwNCwx
MiBAQCBib29sIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6aGFzUHJvcGVyCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1
ZTxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KIAotVmFsdWUgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdHcmFkaWVudEVs
ZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0dyYWRpZW50RWxlbWVudDo6Z2V0
KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0zMzI0LDEwICszMzI0LDEw
IEBAIGJvb2wgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpwdXQoUFVUX00KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEt
PmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CkBAIC0zMzM1LDcgKzMzMzUsNyBAQCBPYmplY3RJbXAgKlNWR0xpbmVhckdyYWRpZW50RWxlbWVu
dDo6YnJpCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2Jq
ZWN0PFNWR0xpbmVhckdyYWRpZW50RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTMzNDQsMTIgKzMzNDQsMTIgQEAg
Ym9vbCBTVkdMb2NhdGFibGU6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZQogewogICAgIGNvbnN0IEhh
c2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdMb2NhdGFibGU6OnNfaGFzaFRhYmxl
LHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdMb2Nh
dGFibGVQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHTG9jYXRhYmxlUHJvdG86OnNl
bGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHTG9jYXRhYmxlOjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0xvY2F0YWJsZTo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR0xvY2F0YWJsZVByb3Rv
RnVuYyxTVkdMb2NhdGFibGU+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTMz
OTUsMTggKzMzOTUsMTggQEAgU1ZHTG9jYXRhYmxlIFNWR0xvY2F0YWJsZVByb3RvRnVuYzo6Y2Fz
dAogICAgIHJldHVybiBTVkdMb2NhdGFibGU6Om51bGw7CiB9CiAKLVZhbHVlIFNWR0xvY2F0YWJs
ZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdMb2Nh
dGFibGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0
IHByb3RvID0gU1ZHTG9jYXRhYmxlUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpw
cm90byA9IFNWR0xvY2F0YWJsZVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR0xvY2F0YWJsZTo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0xvY2F0YWJsZTo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdMb2Nh
dGFibGVQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVs
bCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdMb2NhdGFibGU6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzQxNCw3ICszNDE0LDcgQEAgT2JqZWN0SW1w
ICpTVkdMb2NhdGFibGU6OmJyaWRnZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9N
QnJpZGdlPFNWR0xvY2F0YWJsZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHTG9jYXRhYmxlOjpQcml2YXRl
ICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHTG9jYXRhYmxlOjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKlNWR0xvY2F0YWJsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHTG9jYXRhYmxlPihwMSxz
dGF0aWNfY2FzdDxTVkdMb2NhdGFibGU6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMzQyMyw4
ICszNDIzLDggQEAgYm9vbCBTVkdNYXJrZXJFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjUwogewog
ICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdNYXJrZXJFbGVt
ZW50OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0
IHByb3RvID0gU1ZHTWFya2VyRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBT
VkdNYXJrZXJFbGVtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdGaXRUb1ZpZXdCb3g6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CkBAIC0zNDMzLDcgKzM0MzMsNyBAQCBi
b29sIFNWR01hcmtlckVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBTVkdNYXJrZXJFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR01hcmtlckVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdNYXJrZXJFbGVtZW50UHJvdG9GdW5j
LFNWR01hcmtlckVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTM0
NDUsMTAgKzM0NDUsMTAgQEAgU1ZHTWFya2VyRWxlbWVudCBTVkdNYXJrZXJFbGVtZW50UHJvdG9G
dQogICAgIHJldHVybiBTVkdNYXJrZXJFbGVtZW50OjpudWxsOwogfQogCi1WYWx1ZSBTVkdNYXJr
ZXJFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR01hcmtlckVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHTWFya2VyRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAg
ICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOwor
ICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdNYXJrZXJFbGVtZW50UHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAy
KTsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVt
ZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRml0VG9WaWV3Qm94OjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdGaXRUb1ZpZXdCb3g6OmdldChwMSxwMixwMyk7CkBAIC0zNDcwLDEwICsz
NDcwLDEwIEBAIGJvb2wgU1ZHTWFya2VyRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVIKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdNYXJrZXJFbGVtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHTWFya2VyRWxlbWVudDo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdNYXJrZXJFbGVt
ZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwo
KSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHTWFya2VyRWxlbWVudDo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNDgxLDcgKzM0ODEsNyBAQCBPYmplY3RJ
bXAgKlNWR01hcmtlckVsZW1lbnQ6OmJyaWRnZShFeGVjCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpE
T01SV0JyaWRnZTxTVkdNYXJrZXJFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVt
ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHTWFya2VyRWxlbWVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdNYXJrZXJFbGVtZW50OjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxT
VkdNYXJrZXJFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdNYXJrZXJFbGVtZW50OjpQcml2YXRl
ICo+KGQpKTsKIH0KQEAgLTM0OTAsMTIgKzM0OTAsMTIgQEAgYm9vbCBTVkdNYXRyaXg6Omhhc1By
b3BlcnR5KEV4ZWNTdGF0ZSAqcAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZTVkdNYXRyaXg6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4g
dHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdNYXRyaXhQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gU1ZHTWF0cml4UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
U1ZHTWF0cml4OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR01hdHJp
eDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0PFNWR01hdHJpeFByb3RvRnVuYyxTVkdNYXRyaXg+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KQEAgLTM1MTIsMTAgKzM1MTIsMTAgQEAgU1ZHTWF0cml4IEtTVkc6OnRvU1ZHTWF0
cml4KEtKUzo6RXhlY1N0YQogICAgIHJldHVybiBTVkdNYXRyaXg6Om51bGw7CiB9CiAKLVZhbHVl
IFNWR01hdHJpeDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdNYXRyaXg6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAg
T2JqZWN0IHByb3RvID0gU1ZHTWF0cml4UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1w
ICpwcm90byA9IFNWR01hdHJpeFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAgLTM1MzEsMTAgKzM1MzEsMTAgQEAgYm9v
bCBTVkdNYXRyaXg6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EXwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotT2JqZWN0IFNWR01hdHJpeDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitP
YmplY3RJbXAgKlNWR01hdHJpeDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBTVkdNYXRyaXhQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9i
amVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0
SW1wICpTVkdNYXRyaXg6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzU0Miw3ICsz
NTQyLDcgQEAgT2JqZWN0SW1wICpTVkdNYXRyaXg6OmJyaWRnZShFeGVjU3RhdGUgKgogICAgIHJl
dHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHTWF0cml4PihwMSxzdGF0aWNfY2FzdDxTVkdN
YXRyaXg6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdNYXRyaXg6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTWF0cml4OjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdNYXRyaXg+
KHAxLHN0YXRpY19jYXN0PFNWR01hdHJpeDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0zNTU1
LDcgKzM1NTUsNyBAQCBib29sIFNWR051bWJlcjo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdOdW1iZXI6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTnVtYmVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdOdW1iZXI+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTM1NjcsNyArMzU2Nyw3IEBAIFNWR051bWJlciBL
U1ZHOjp0b1NWR051bWJlcihLSlM6OkV4ZWNTdGEKICAgICByZXR1cm4gU1ZHTnVtYmVyOjpudWxs
OwogfQogCi1WYWx1ZSBTVkdOdW1iZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHTnVtYmVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzU4NCwxMCArMzU4NCwxMCBAQCBib29sIFNWR051
bWJlcjo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0RfCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1P
YmplY3QgU1ZHTnVtYmVyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqU1ZHTnVtYmVyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpTVkdOdW1iZXI6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtMzU5NSw3ICszNTk1LDcgQEAgT2JqZWN0SW1wICpTVkdOdW1iZXI6OmJyaWRnZShFeGVjU3Rh
dGUgKgogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHTnVtYmVyPihwMSxzdGF0
aWNfY2FzdDxTVkdOdW1iZXI6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdOdW1i
ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTnVtYmVyOjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVj
dDxTVkdOdW1iZXI+KHAxLHN0YXRpY19jYXN0PFNWR051bWJlcjo6UHJpdmF0ZSAqPihpbXBsKSk7
CiB9CkBAIC0zNjA0LDEyICszNjA0LDEyIEBAIGJvb2wgU1ZHTnVtYmVyTGlzdDo6aGFzUHJvcGVy
dHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRy
eSgmU1ZHTnVtYmVyTGlzdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVl
OwotICAgIE9iamVjdCBwcm90byA9IFNWR051bWJlckxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gU1ZHTnVtYmVyTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR051bWJlckxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHTnVtYmVyTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6bG9va3VwR2V0PFNWR051bWJlckxpc3RQcm90b0Z1bmMsU1ZHTnVtYmVyTGlzdD4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzYyMSwxOCArMzYyMSwxOCBAQCBTVkdO
dW1iZXJMaXN0IFNWR051bWJlckxpc3RQcm90b0Z1bmM6OmNhCiAgICAgcmV0dXJuIFNWR051bWJl
ckxpc3Q6Om51bGw7CiB9CiAKLVZhbHVlIFNWR051bWJlckxpc3Q6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTnVtYmVyTGlzdDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdOdW1iZXJM
aXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR051bWJlckxp
c3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdOdW1iZXJMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHTnVtYmVyTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdOdW1iZXJMaXN0UHJvdG86OnNl
bGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0
dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHTnVtYmVyTGlzdDo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC0zNjQwLDcgKzM2NDAsNyBAQCBPYmplY3RJbXAgKlNWR051bWJlckxp
c3Q6OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHTnVt
YmVyTGlzdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHTnVtYmVyTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7
CiB9CiAKLVZhbHVlIFNWR051bWJlckxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHTnVtYmVyTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHTnVtYmVyTGlzdD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHTnVtYmVyTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0zNjQ5LDEzICszNjQ5
LDEzIEBAIGJvb2wgU1ZHUGFpbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEKIHsKICAgICBj
b25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHUGFpbnQ6OnNfaGFzaFRh
YmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdQ
YWludFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdQYWludFByb3RvOjpzZWxmKHAx
KTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBp
ZihTVkdDb2xvcjo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhaW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR1BhaW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJl
dHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHUGFpbnRQcm90b0Z1bmMsU1ZHUGFpbnQ+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTM2NjcsMTAgKzM2NjcsMTAgQEAgU1ZHUGFpbnQg
U1ZHUGFpbnRQcm90b0Z1bmM6OmNhc3QoS0pTOjpFeAogICAgIHJldHVybiBTVkdQYWludDo6bnVs
bDsKIH0KIAotVmFsdWUgU1ZHUGFpbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHUGFpbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHUGFpbnRQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAg
ICBPYmplY3RJbXAgKnByb3RvID0gU1ZHUGFpbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJv
dG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlm
KFNWR0NvbG9yOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdDb2xvcjo6Z2V0KHAxLHAy
LHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0zNjg0LDEwICszNjg0LDEwIEBA
IGJvb2wgU1ZHUGFpbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgU1ZHUGFpbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpTVkdQYWludDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBTVkdQYWludFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0
OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAg
KlNWR1BhaW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM2OTUsNyArMzY5NSw3
IEBAIE9iamVjdEltcCAqU1ZHUGFpbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAKICAgICByZXR1cm4g
bmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhaW50PihwMSxzdGF0aWNfY2FzdDxTVkdQYWludDo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1BhaW50OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKlNWR1BhaW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYWludD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHUGFpbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzcwNCw4ICszNzA0LDggQEAgYm9v
bCBTVkdQYXRoRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0YQogewogICAgIGNvbnN0IEhhc2hF
bnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdQYXRoRWxlbWVudDo6c19oYXNoVGFibGUs
cDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR1BhdGhF
bGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1BhdGhFbGVtZW50UHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVl
OwogICAgIGlmKFNWR0FuaW1hdGVkUGF0aERhdGE6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHRydWU7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1
ZTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOwpAQCAtMzcxNiw3ICszNzE2LDcgQEAgYm9vbCBTVkdQYXRoRWxlbWVu
dDo6aGFzUHJvcGVydHkoRXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZH
UGF0aEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0
aEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
Omxvb2t1cEdldDxTVkdQYXRoRWxlbWVudFByb3RvRnVuYyxTVkdQYXRoRWxlbWVudD4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzcyOCwxMCArMzcyOCwxMCBAQCBTVkdQYXRo
RWxlbWVudCBTVkdQYXRoRWxlbWVudFByb3RvRnVuYzo6CiAgICAgcmV0dXJuIFNWR1BhdGhFbGVt
ZW50OjpudWxsOwogfQogCi1WYWx1ZSBTVkdQYXRoRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoRWxlbWVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdQYXRoRWxl
bWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdQYXRoRWxl
bWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6Z2V0KHAxLHAyLHAz
KTsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVt
ZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmdldChwMSxwMixwMyk7CkBAIC0zNzU1LDEwICszNzU1LDEwIEBAIGJvb2wgU1ZHUGF0aEVsZW1l
bnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBT
VkdQYXRoRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAg
KlNWR1BhdGhFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIFNWR1BhdGhFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqU1ZHUGF0aEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzc2
Niw3ICszNzY2LDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoRWxlbWVudDo6YnJpZGdlKEV4ZWNTdAog
ICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aEVsZW1lbnQ+KHAxLHN0YXRp
Y19jYXN0PFNWR1BhdGhFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHUGF0
aEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aEVs
ZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNh
Y2hlRE9NT2JqZWN0PFNWR1BhdGhFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoRWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zNzc5LDcgKzM3NzksNyBAQCBib29sIFNWR1BhdGhT
ZWc6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBTVkdQYXRoU2VnOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1Bh
dGhTZWc6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldFZhbHVlPFNWR1BhdGhTZWc+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0K
QEAgLTM4MjksMTYgKzM4MjksMTYgQEAgU1ZHUGF0aFNlZyBLU1ZHOjp0b1NWR1BhdGhTZWcoS0pT
OjpFeGVjUwogICAgIHJldHVybiBTVkdQYXRoU2VnOjpudWxsOwogfQogCi1WYWx1ZSBTVkdQYXRo
U2VnOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1Bh
dGhTZWc6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVT
RUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZzo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC0zODQ2LDcgKzM4NDYsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWc6
OmJyaWRnZShFeGVjU3RhdGUgCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHUGF0
aFNlZz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAK
LVZhbHVlIFNWR1BhdGhTZWc6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHUGF0aFNlZzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZzo6
UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0zODU5LDEyICszODU5LDEyIEBAIGJvb2wgU1ZHUGF0
aFNlZ0FyY0Ficzo6aGFzUHJvcGVydHkoRXhlY1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR1BhdGhTZWdBcmNBYnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUGF0aFNlZ0FyY0Ficzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0FyY0Ficz4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQXJjQWJzOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdBcmNBYnM6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0zODgxLDEwICszODgxLDEwIEBAIGJvb2wgU1ZHUGF0
aFNlZ0FyY0Ficzo6cHV0SW5QYXJlbnRzKFBVVF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9i
amVjdCBTVkdQYXRoU2VnQXJjQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHUGF0aFNlZ0FyY0Ficzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0FyY0Ficzo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zODkyLDcgKzM4OTIsNyBAQCBPYmplY3RJbXAgKlNWR1Bh
dGhTZWdBcmNBYnM6OmJyaWRnZShFeGVjCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRn
ZTxTVkdQYXRoU2VnQXJjQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQXJjQWJzOjpQcml2
YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0FyY0Ficzo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQXJjQWJzOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRo
U2VnQXJjQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQXJjQWJzOjpQcml2YXRlICo+KGlt
cGwpKTsKIH0KQEAgLTM5MDUsMTIgKzM5MDUsMTIgQEAgYm9vbCBTVkdQYXRoU2VnQXJjUmVsOjpo
YXNQcm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNl
Z0FyY1JlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2Vn
QXJjUmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjps
b29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnQXJjUmVsPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdBcmNSZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0FyY1JlbDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKQEAgLTM5MjcsMTAgKzM5MjcsMTAgQEAgYm9vbCBTVkdQYXRoU2VnQXJjUmVsOjpw
dXRJblBhcmVudHMoUFVUXwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhT
ZWdBcmNSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQ
YXRoU2VnQXJjUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2VnQXJjUmVsOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkg
Y29uc3QKQEAgLTM5MzgsNyArMzkzOCw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0FyY1JlbDo6
YnJpZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdB
cmNSZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdBcmNSZWw6OlByaXZhdGUgKj4oaW1wbCkp
OwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQXJjUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BhdGhTZWdBcmNSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdBcmNSZWw+KHAx
LHN0YXRpY19jYXN0PFNWR1BhdGhTZWdBcmNSZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAt
Mzk1MSwxMiArMzk1MSwxMiBAQCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6Omhhc1By
b3BlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
QWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNBYnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006Omxvb2t1cEdldFZhbHVlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM+KHAxLHAyLCZzX2hh
c2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljQWJzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6
OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzk3MywxMCArMzk3
MywxMCBAQCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OnB1dEluUGFyCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtMzk4NCw3ICszOTg0LDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0
b0N1YmljQWJzOjpicgogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY0Ficz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Fi
czo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNB
YnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY0Ficzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficz4ocDEsc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0z
OTk3LDEyICszOTk3LDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6aGFzUHJv
cGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNS
ZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1JlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbD4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNSZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6
Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00MDE5LDEwICs0MDE5
LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6cHV0SW5QYXIKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1JlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVy
biBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVy
biBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9i
amVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CkBAIC00MDMwLDcgKzQwMzAsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNSZWw6OmJyCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVs
OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Jl
bDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0
b0N1YmljUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
OjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsPihwMSxzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQw
NDMsMTIgKzQwNDMsMTIgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpo
YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aEFiczo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3Ro
QWJzPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBV
bmRlZmluZWQoKTsKQEAgLTQwNjUsMTAgKzQwNjUsMTAgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoQWJzOjpwdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRl
cigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRo
U2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTQwNzYsNyArNDA3Niw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aEEKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNTbW9vdGhBYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhB
YnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
U21vb3RoQWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGhBYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OlBy
aXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDA4OSwxMiArNDA4OSwxMiBAQCBib29sIFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OmhhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAz
KTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1
YmljU21vb3RoUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6Omdl
dChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDExMSwxMCArNDExMSwx
MCBAQCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OnB1CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDEyMiw3ICs0MTIyLDcgQEAgT2JqZWN0SW1wICpT
VkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUgogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldC
cmlkZ2U8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZh
bHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aFJlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00MTM1LDEy
ICs0MTM1LDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6Omhhc1AKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJz
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficz4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY0Ficzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAg
LTQxNTcsMTAgKzQxNTcsMTAgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6
cHV0SQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
QWJzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQxNjgsNyArNDE2OCw3IEBAIE9i
amVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMKICAgICByZXR1cm4gbmV3IEtE
T006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzPihwMSxzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9
CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVj
dDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNBYnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDE4MSwxMiAr
NDE4MSwxMiBAQCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpoYXNQCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1JlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNSZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00
MjAzLDEwICs0MjAzLDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OnB1
dEkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY1JlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJv
dG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICBy
ZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Jl
bDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00MjE0LDcgKzQyMTQsNyBAQCBPYmpl
Y3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsCiAgICAgcmV0dXJuIG5ldyBLRE9N
OjpET01SV0JyaWRnZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQog
Ci1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQyMjcsMTIgKzQy
MjcsMTIgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhB
YnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNTbW9vdGhBYnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21v
b3RoQWJzPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDI0OSwxMCArNDI0OSwxMCBAQCBib29sIFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1P
YmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Nt
b290aEFiczo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJl
dHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAK
IE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDI2MCw3ICs0MjYwLDcgQEAgT2JqZWN0SW1wICpTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1NtbwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlk
Z2U8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM+KHAxLHN0YXRpY19jYXN0PFNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0K
IAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9v
dGhBYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNh
Y2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzPihwMSxzdGF0
aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6UHJpdmF0ZSAqPihp
bXBsKSk7CiB9CkBAIC00MjczLDEyICs0MjczLDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNTbW9vdGhSZWwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdQ
YXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQyOTUs
MTAgKzQyOTUsMTAgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
U21vb3RoUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5P
YmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkp
OworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljU21vb3RoUmVsOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQzMDYsNyAr
NDMwNiw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW8KICAgICBy
ZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21v
b3RoUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJl
bDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljU21vb3RoUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1Ntb290aFJlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhSZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDMxOSwxMiArNDMxOSwxMiBA
QCBib29sIFNWR1BhdGhTZWdMaW5ldG9BYnM6Omhhc1Byb3BlcnR5KEV4CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9BYnM6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1BhdGhTZWdM
aW5ldG9BYnM+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0
aFNlZ0xpbmV0b0Ficzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdQYXRoU2VnTGluZXRvQWJzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNW
R1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDM0
MSwxMCArNDM0MSwxMCBAQCBib29sIFNWR1BhdGhTZWdMaW5ldG9BYnM6OnB1dEluUGFyZW50cyhQ
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9B
YnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
cDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9BYnM6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtNDM1Miw3ICs0MzUyLDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvQWJzOjpicmlk
Z2UoRQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ0xpbmV0b0Fi
cz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0Ficzo6UHJpdmF0ZSAqPihpbXBsKSk7
CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9BYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0
b0Ficz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0Ficzo6UHJpdmF0ZSAqPihpbXBs
KSk7CiB9CkBAIC00MzY1LDEyICs0MzY1LDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxBYnM6Omhhc1AKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdM
aW5ldG9Ib3Jpem9udGFsQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnTGluZXRvSG9y
aXpvbnRhbEFicz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQ
YXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKQEAgLTQzODcsMTAgKzQzODcsMTAgQEAgYm9vbCBTVkdQYXRoU2VnTGlu
ZXRvSG9yaXpvbnRhbEFiczo6cHV0SQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNW
R1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhT
ZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQz
OTgsNyArNDM5OCw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMK
ICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9u
dGFsQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6UHJp
dmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJz
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsQWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicz4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OlByaXZhdGUgKj4oaW1wbCkp
OwogfQpAQCAtNDQxMSwxMiArNDQxMSwxMiBAQCBib29sIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9u
dGFsUmVsOjpoYXNQCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGlu
ZXRvSG9yaXpvbnRhbFJlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxSZWw+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0
aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CkBAIC00NDMzLDEwICs0NDMzLDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0xpbmV0
b0hvcml6b250YWxSZWw6OnB1dEkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQ
YXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbFJlbDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00NDQ0
LDcgKzQ0NDQsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsCiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRh
bFJlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OlByaXZh
dGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvSG9y
aXpvbnRhbFJlbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw+KHAxLHN0YXRp
Y19jYXN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpQcml2YXRlICo+KGltcGwpKTsK
IH0KQEAgLTQ0NTcsMTIgKzQ0NTcsMTIgQEAgYm9vbCBTVkdQYXRoU2VnTGluZXRvUmVsOjpoYXNQ
cm9wZXJ0eShFeAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0
b1JlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGlu
ZXRvUmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjps
b29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnTGluZXRvUmVsPihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9SZWw6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKQEAgLTQ0NzksMTAgKzQ0NzksMTAgQEAgYm9vbCBTVkdQYXRoU2Vn
TGluZXRvUmVsOjpwdXRJblBhcmVudHMoUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0
IFNWR1BhdGhTZWdMaW5ldG9SZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0
UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvUmVsOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQ0OTAsNyArNDQ5MCw3IEBAIE9iamVjdEltcCAq
U1ZHUGF0aFNlZ0xpbmV0b1JlbDo6YnJpZGdlKEUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJX
QnJpZGdlPFNWR1BhdGhTZWdMaW5ldG9SZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5l
dG9SZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvUmVs
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9S
ZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hl
RE9NT2JqZWN0PFNWR1BhdGhTZWdMaW5ldG9SZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdM
aW5ldG9SZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDUwMywxMiArNDUwMywxMiBAQCBi
b29sIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6aGFzUHJvCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1
ZTxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAz
KTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bEFiczo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQ
YXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIs
cDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQ1MjUsMTAgKzQ1MjUsMTAgQEAgYm9v
bCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OnB1dEluUAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotT2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+
aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTQ1MzYsNyArNDUzNiw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsQWJzOjoKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbEFicz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJz
OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2Fs
QWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbEFiczo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzPihwMSxzdGF0
aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OlByaXZhdGUgKj4oaW1wbCkpOwog
fQpAQCAtNDU0OSwxMiArNDU0OSwxMiBAQCBib29sIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJl
bDo6aGFzUHJvCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRv
VmVydGljYWxSZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw+
KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0
b1ZlcnRpY2FsUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
QEAgLTQ1NzEsMTAgKzQ1NzEsMTAgQEAgYm9vbCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6
OnB1dEluUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbFJlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNW
R1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVs
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQ1ODIsNyArNDU4Miw3IEBAIE9iamVj
dEltcCAqU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjoKICAgICByZXR1cm4gbmV3IEtET006
OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFs
dWUgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNl
Z0xpbmV0b1ZlcnRpY2FsUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvVmVydGlj
YWxSZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDU5MSwxMiArNDU5MSwxMiBAQCBib29s
IFNWR1BhdGhTZWdMaXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhCiB7CiAgICAgY29uc3QgSGFzaEVu
dHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR1BhdGhTZWdMaXN0OjpzX2hhc2hUYWJsZSxw
Mik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHUGF0aFNl
Z0xpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHUGF0aFNlZ0xpc3RQcm90bzo6
c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGlzdDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGlzdDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR1BhdGhTZWdM
aXN0UHJvdG9GdW5jLFNWR1BhdGhTZWdMaXN0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7
CiB9CkBAIC00NjA4LDE4ICs0NjA4LDE4IEBAIFNWR1BhdGhTZWdMaXN0IFNWR1BhdGhTZWdMaXN0
UHJvdG9GdW5jOjoKICAgICByZXR1cm4gU1ZHUGF0aFNlZ0xpc3Q6Om51bGw7CiB9CiAKLVZhbHVl
IFNWR1BhdGhTZWdMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR1BhdGhTZWdMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewotICAgIE9iamVjdCBwcm90byA9IFNWR1BhdGhTZWdMaXN0UHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1BhdGhTZWdMaXN0UHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAy
KTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmpl
Y3QgU1ZHUGF0aFNlZ0xpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpTVkdQYXRoU2VnTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBTVkdQYXRoU2VnTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlNWR1BhdGhTZWdMaXN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTQ2MjcsNyArNDYyNyw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0xpc3Q6OmJyaWRnZShFeGVj
U3QKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdQYXRoU2VnTGlzdD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBT
VkdQYXRoU2VnTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQ
YXRoU2VnTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0xpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQ2NDAsMTIgKzQ2NDAsMTIgQEAgYm9v
bCBTVkdQYXRoU2VnTW92ZXRvQWJzOjpoYXNQcm9wZXJ0eShFeAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgU1ZHUGF0aFNlZ01vdmV0b0Ficzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTW92ZXRvQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnTW92ZXRv
QWJzPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdN
b3ZldG9BYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHUGF0aFNlZ01vdmV0b0Ficzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdQYXRo
U2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQ2NjIsMTAg
KzQ2NjIsMTAgQEAgYm9vbCBTVkdQYXRoU2VnTW92ZXRvQWJzOjpwdXRJblBhcmVudHMoUAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdNb3ZldG9BYnM6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnTW92ZXRvQWJzOjpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5p
bnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVj
dDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1w
ICpTVkdQYXRoU2VnTW92ZXRvQWJzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQ2
NzMsNyArNDY3Myw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ01vdmV0b0Ficzo6YnJpZGdlKEUK
ICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdNb3ZldG9BYnM+KHAx
LHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3ZldG9BYnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQog
Ci1WYWx1ZSBTVkdQYXRoU2VnTW92ZXRvQWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlNWR1BhdGhTZWdNb3ZldG9BYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdNb3ZldG9BYnM+
KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3ZldG9BYnM6OlByaXZhdGUgKj4oaW1wbCkpOwog
fQpAQCAtNDY4NiwxMiArNDY4NiwxMiBAQCBib29sIFNWR1BhdGhTZWdNb3ZldG9SZWw6Omhhc1By
b3BlcnR5KEV4CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTW92ZXRv
UmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdNb3Zl
dG9SZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldFZhbHVlPFNWR1BhdGhTZWdNb3ZldG9SZWw+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ01vdmV0b1JlbDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTW92ZXRvUmVsOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDcwOCwxMCArNDcwOCwxMCBAQCBib29sIFNWR1BhdGhTZWdN
b3ZldG9SZWw6OnB1dEluUGFyZW50cyhQCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
U1ZHUGF0aFNlZ01vdmV0b1JlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmpl
Y3RJbXAgKlNWR1BhdGhTZWdNb3ZldG9SZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdNb3ZldG9SZWw6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDcxOSw3ICs0NzE5LDcgQEAgT2JqZWN0SW1wICpT
VkdQYXRoU2VnTW92ZXRvUmVsOjpicmlkZ2UoRQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldC
cmlkZ2U8U1ZHUGF0aFNlZ01vdmV0b1JlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ01vdmV0
b1JlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdNb3ZldG9SZWw6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ01vdmV0b1Jl
bDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVE
T01PYmplY3Q8U1ZHUGF0aFNlZ01vdmV0b1JlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ01v
dmV0b1JlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00NzM4LDEyICs0NzM4LDEyIEBAIGJv
b2wgU1ZHUGF0dGVybkVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWMKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIFNWR1BhdHRlcm5FbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BhdHRlcm5FbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXR0ZXJuRWxlbWVudD4o
cDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXR0ZXJuRWxlbWVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXR0
ZXJuRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBp
ZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQo
cDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxw
MixwMyk7CkBAIC00NzY4LDEwICs0NzY4LDEwIEBAIGJvb2wgU1ZHUGF0dGVybkVsZW1lbnQ6OnB1
dChQVVRfTUVUSE9EX0EKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXR0ZXJu
RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1Bh
dHRlcm5FbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpTVkdQYXR0ZXJuRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CkBAIC00Nzc5LDcgKzQ3NzksNyBAQCBPYmplY3RJbXAgKlNWR1BhdHRlcm5FbGVtZW50
OjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXR0ZXJu
RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQ6OlByaXZhdGUgKj4oZCkp
OwogfQogCi1WYWx1ZSBTVkdQYXR0ZXJuRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpTVkdQYXR0ZXJuRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0dGVybkVsZW1lbnQ+
KHAxLHN0YXRpY19jYXN0PFNWR1BhdHRlcm5FbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTQ3ODgsMTIgKzQ3ODgsMTIgQEAgYm9vbCBTVkdQb2ludDo6aGFzUHJvcGVydHkoRXhlY1N0YXRl
ICpwMQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdQ
b2ludDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVj
dCBwcm90byA9IFNWR1BvaW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1BvaW50
UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUG9pbnQ6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9pbnQ6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdQb2ludFByb3RvRnVu
YyxTVkdQb2ludD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNDgxMCwxMCAr
NDgxMCwxMCBAQCBTVkdQb2ludCBLU1ZHOjp0b1NWR1BvaW50KEtKUzo6RXhlY1N0YXRlCiAgICAg
cmV0dXJuIFNWR1BvaW50OjpudWxsOwogfQogCi1WYWx1ZSBTVkdQb2ludDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQb2ludDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdQb2ludFBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdQb2ludFByb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8t
PmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KQEAgLTQ4MjksMTAgKzQ4MjksMTAgQEAgYm9vbCBTVkdQb2ludDo6cHV0SW5QYXJlbnRzKFBV
VF9NRVRIT0RfQQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BvaW50Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUG9pbnQ6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHUG9pbnRQcm90
bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQb2ludDo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC00ODQwLDcgKzQ4NDAsNyBAQCBPYmplY3RJbXAgKlNWR1BvaW50Ojpi
cmlkZ2UoRXhlY1N0YXRlICpwCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQ
b2ludD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUG9pbnQ6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1W
YWx1ZSBTVkdQb2ludDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQ
b2ludDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2Fj
aGVET01PYmplY3Q8U1ZHUG9pbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1BvaW50OjpQcml2YXRlICo+
KGltcGwpKTsKIH0KQEAgLTQ4NDksMTIgKzQ4NDksMTIgQEAgYm9vbCBTVkdQb2ludExpc3Q6Omhh
c1Byb3BlcnR5KEV4ZWNTdGF0ZQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZTVkdQb2ludExpc3Q6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1
cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdQb2ludExpc3RQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmpl
Y3RJbXAgKnByb3RvID0gU1ZHUG9pbnRMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHUG9pbnRMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1BvaW50TGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6bG9va3VwR2V0PFNWR1BvaW50TGlzdFByb3RvRnVuYyxTVkdQb2ludExpc3Q+KHAx
LHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTQ4NjYsMTggKzQ4NjYsMTggQEAgU1ZH
UG9pbnRMaXN0IFNWR1BvaW50TGlzdFByb3RvRnVuYzo6Y2FzdAogICAgIHJldHVybiBTVkdQb2lu
dExpc3Q6Om51bGw7CiB9CiAKLVZhbHVlIFNWR1BvaW50TGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQb2ludExpc3Q6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHUG9pbnRMaXN0
UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1BvaW50TGlzdFBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotT2JqZWN0IFNWR1BvaW50TGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR1BvaW50TGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdQb2ludExpc3RQcm90bzo6c2VsZihwMSk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpTVkdQb2ludExpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBj
b25zdApAQCAtNDg4NSw3ICs0ODg1LDcgQEAgT2JqZWN0SW1wICpTVkdQb2ludExpc3Q6OmJyaWRn
ZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR1BvaW50TGlzdD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHUG9pbnRMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFs
dWUgU1ZHUG9pbnRMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNW
R1BvaW50TGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHUG9pbnRMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdQb2ludExp
c3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDkwNCwxMiArNDkwNCwxMiBAQCBib29sIFNW
R1BvbHlnb25FbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBTVkdQb2x5Z29uRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdQb2x5Z29uRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUG9seWdvbkVsZW1lbnQ+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUG9seWdvbkVsZW1lbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9seWdvbkVs
ZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZH
QW5pbWF0ZWRQb2ludHM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0FuaW1hdGVkUG9p
bnRzOjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CkBAIC00OTM0LDEwICs0OTM0LDEw
IEBAIGJvb2wgU1ZHUG9seWdvbkVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0EKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQb2x5Z29uRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BvbHlnb25FbGVtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQb2x5Z29u
RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00OTQ1LDcgKzQ5NDUsNyBA
QCBPYmplY3RJbXAgKlNWR1BvbHlnb25FbGVtZW50OjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5l
dyBLRE9NOjpET01SV0JyaWRnZTxTVkdQb2x5Z29uRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZH
UG9seWdvbkVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdQb2x5Z29uRWxl
bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQb2x5Z29uRWxl
bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2Fj
aGVET01PYmplY3Q8U1ZHUG9seWdvbkVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1BvbHlnb25F
bGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTQ5NjQsMTIgKzQ5NjQsMTIgQEAgYm9vbCBT
VkdQb2x5bGluZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHUG9seWxpbmVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR1BvbHlsaW5lRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUG9seWxpbmVFbGVtZW50Pihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BvbHlsaW5lRWxlbWVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQb2x5
bGluZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
aWYoU1ZHQW5pbWF0ZWRQb2ludHM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0FuaW1h
dGVkUG9pbnRzOjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CkBAIC00OTk0LDEwICs0
OTk0LDEwIEBAIGJvb2wgU1ZHUG9seWxpbmVFbGVtZW50OjpwdXQoUFVUX01FVEhPRF8KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQb2x5bGluZUVsZW1lbnQ6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQb2x5bGluZUVsZW1lbnQ6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVy
cHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0Ojpk
eW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNW
R1BvbHlsaW5lRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01MDA1LDcg
KzUwMDUsNyBAQCBPYmplY3RJbXAgKlNWR1BvbHlsaW5lRWxlbWVudDo6YnJpZGdlKEV4CiAgICAg
cmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQb2x5bGluZUVsZW1lbnQ+KHAxLHN0YXRp
Y19jYXN0PFNWR1BvbHlsaW5lRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNW
R1BvbHlsaW5lRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpT
VkdQb2x5bGluZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BvbHlsaW5lRWxlbWVudD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHUG9seWxpbmVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTUwMTgsMTIgKzUw
MTgsMTIgQEAgYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpoYXNQcm9wZXJ0eQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1
ZTxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VE
KHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTUwNDAsMTAg
KzUwNDAsMTAgQEAgYm9vbCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpwdXRJblBhcmVudAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTUwNTEsNyArNTA1MSw3IEBAIE9iamVjdEltcCAqU1ZHUHJlc2VydmVBc3BlY3RSYXRp
bzo6YnJpZGcKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8+KHAxLHN0YXRpY19jYXN0PFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OlByaXZhdGUg
Kj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+KHAxLHN0YXRpY19jYXN0PFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW86OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNTA2NCwxMiArNTA2NCwxMiBAQCBib29s
IFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6aGFzUHJvcGVyCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1WYWx1ZSBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdSYWRp
YWxHcmFkaWVudEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFs
dWUgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdHcmFkaWVudEVsZW1lbnQ6Omhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0dyYWRpZW50RWxlbWVudDo6Z2V0KHAxLHAyLHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC01MDg0LDEwICs1MDg0LDEwIEBAIGJvb2wg
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpwdXQoUFVUX00KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU9iamVjdCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJl
dGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01MDk1
LDcgKzUwOTUsNyBAQCBPYmplY3RJbXAgKlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6YnJpCiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ+
KHAxLHN0YXRpY19jYXN0PFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK1ZhbHVlSW1wICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUmFkaWFsR3JhZGllbnRFbGVt
ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTUxMDgsNyArNTEwOCw3IEBAIGJvb2wgU1ZHUmVj
dDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR1JlY3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUmVj
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0VmFsdWU8U1ZHUmVjdD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNTEy
MCw3ICs1MTIwLDcgQEAgU1ZHUmVjdCBLU1ZHOjp0b1NWR1JlY3QoS0pTOjpFeGVjU3RhdGUgKgog
ICAgIHJldHVybiBTVkdSZWN0OjpudWxsOwogfQogCi1WYWx1ZSBTVkdSZWN0OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1JlY3Q6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChw
Mik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC01MTM3LDEwICs1
MTM3LDEwIEBAIGJvb2wgU1ZHUmVjdDo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0RfQVIKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdSZWN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqU1ZHUmVjdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUmVjdDo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC01MTQ4LDcgKzUxNDgsNyBAQCBPYmplY3RJbXAgKlNWR1JlY3Q6OmJy
aWRnZShFeGVjU3RhdGUgKnAxCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdS
ZWN0PihwMSxzdGF0aWNfY2FzdDxTVkdSZWN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFs
dWUgU1ZHUmVjdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdSZWN0
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURP
TU9iamVjdDxTVkdSZWN0PihwMSxzdGF0aWNfY2FzdDxTVkdSZWN0OjpQcml2YXRlICo+KGltcGwp
KTsKIH0KQEAgLTUxNjYsMTIgKzUxNjYsMTIgQEAgYm9vbCBTVkdSZWN0RWxlbWVudDo6aGFzUHJv
cGVydHkoRXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUmVjdEVsZW1l
bnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUmVjdEVsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdl
dFZhbHVlPFNWR1JlY3RFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAK
LVZhbHVlIFNWR1JlY3RFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1JlY3RFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTUxOTUsMTAgKzUxOTUsMTAgQEAgYm9vbCBTVkdS
ZWN0RWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVJHUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
T2JqZWN0IFNWR1JlY3RFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHUmVjdEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90
b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1JlY3RFbGVtZW50OjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTUyMDYsNyArNTIwNiw3IEBAIE9iamVjdEltcCAqU1ZHUmVjdEVs
ZW1lbnQ6OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNW
R1JlY3RFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdSZWN0RWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIFNWR1JlY3RFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR1JlY3RFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdSZWN0RWxlbWVudD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHUmVjdEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNTIxNSw4ICs1
MjE1LDggQEAgYm9vbCBTVkdTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogewogICAg
IGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdTVkdFbGVtZW50Ojpz
X2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3Rv
ID0gU1ZHU1ZHRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdTVkdFbGVt
ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOwogICAgIGlmKEtET006OkRvY3VtZW50RXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwpAQCAtNTIyOSw3ICs1MjI5LDcgQEAgYm9vbCBTVkdT
VkdFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgU1ZHU1ZHRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdTVkdFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpsb29rdXBHZXQ8U1ZHU1ZHRWxlbWVudFByb3RvRnVuYyxTVkdTVkdFbGVtZW50Pihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC01MjQxLDEwICs1MjQxLDEwIEBAIFNW
R1NWR0VsZW1lbnQgU1ZHU1ZHRWxlbWVudFByb3RvRnVuYzo6Y2EKICAgICByZXR1cm4gU1ZHU1ZH
RWxlbWVudDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHU1ZHRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdTVkdFbGVtZW50OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR1NWR0Vs
ZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHU1ZHRWxl
bWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoS0RPTTo6RG9jdW1lbnRFdmVudDo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gS0RPTTo6RG9jdW1lbnRFdmVudDo6Z2V0KHAxLHAyLHAz
KTsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVt
ZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmdldChwMSxwMixwMyk7CkBAIC01Mjc5LDEwICs1Mjc5LDEwIEBAIGJvb2wgU1ZHU1ZHRWxlbWVu
dDo6cHV0SW5QYXJlbnRzKFBVVF9NRVQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBT
VkdTVkdFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAq
U1ZHU1ZHRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYo
cDEpIHJldHVybiBTVkdTVkdFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqU1ZHU1ZHRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01MjkwLDcg
KzUyOTAsNyBAQCBPYmplY3RJbXAgKlNWR1NWR0VsZW1lbnQ6OmJyaWRnZShFeGVjU3RhCiAgICAg
cmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdTVkdFbGVtZW50PihwMSxzdGF0aWNfY2Fz
dDxTVkdTVkdFbGVtZW50OjpQcml2YXRlICo+KEtET006OkV2ZW50VGFyZ2V0OjpkKSk7CiB9CiAK
LVZhbHVlIFNWR1NWR0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHU1ZHRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHU1ZHRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZH
U1ZHRWxlbWVudDo6UHJpdmF0ZSAqPihLRE9NOjpFdmVudFRhcmdldDo6ZCkpOwogfQpAQCAtNTMw
NSwxMiArNTMwNSwxMiBAQCBib29sIFNWR1NjcmlwdEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNT
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdTY3JpcHRFbGVtZW50OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1NjcmlwdEVsZW1lbnQ6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNW
R1NjcmlwdEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUg
U1ZHU2NyaXB0RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdTY3JpcHRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNW
R0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTUzMzIsMTAgKzUzMzIsMTAgQEAgYm9vbCBTVkdTY3Jp
cHRFbGVtZW50OjpwdXRJblBhcmVudHMoUFVUXwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2Jq
ZWN0IFNWR1NjcmlwdEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpTVkdTY3JpcHRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJv
dG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICBy
ZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdTY3JpcHRFbGVtZW50OjpicmlkZ2UoRXhl
Y1N0YXRlICpwMSkgY29uc3QKQEAgLTUzNDMsNyArNTM0Myw3IEBAIE9iamVjdEltcCAqU1ZHU2Ny
aXB0RWxlbWVudDo6YnJpZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdl
PFNWR1NjcmlwdEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1NjcmlwdEVsZW1lbnQ6OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdTY3JpcHRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1NjcmlwdEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1NjcmlwdEVs
ZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1NjcmlwdEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwog
fQpAQCAtNTM1NiwxMiArNTM1NiwxMiBAQCBib29sIFNWR1NldEVsZW1lbnQ6Omhhc1Byb3BlcnR5
KEV4ZWNTdGF0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdTZXRFbGVtZW50Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1NldEVsZW1lbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVl
PFNWR1NldEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUg
U1ZHU2V0RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdTZXRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIGlmKFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwpAQCAtNTM3NiwxMCArNTM3NiwxMCBAQCBib29sIFNWR1NldEVsZW1lbnQ6OnB1dChQVVRf
TUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHU2V0RWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1NldEVsZW1l
bnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
cDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKlNWR1NldEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTM4
Nyw3ICs1Mzg3LDcgQEAgT2JqZWN0SW1wICpTVkdTZXRFbGVtZW50OjpicmlkZ2UoRXhlY1N0YQog
ICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHU2V0RWxlbWVudD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHU2V0RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1NldEVs
ZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU2V0RWxlbWVu
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVE
T01PYmplY3Q8U1ZHU2V0RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU2V0RWxlbWVudDo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC01NDAxLDEyICs1NDAxLDEyIEBAIGJvb2wgU1ZHU3RvcEVsZW1l
bnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R1N0b3BFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1N0
b3BFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
Ojpsb29rdXBHZXRWYWx1ZTxTVkdTdG9wRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQogCi1WYWx1ZSBTVkdTdG9wRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdTdG9wRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR1N0eWxhYmxl
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdTdHlsYWJsZTo6Z2V0KHAxLHAyLHAzKTsK
QEAgLTU0MjIsMTAgKzU0MjIsMTAgQEAgYm9vbCBTVkdTdG9wRWxlbWVudDo6cHV0KFBVVF9NRVRI
T0RfQVJHUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1N0b3BFbGVtZW50Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHU3RvcEVsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEt
PmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlNWR1N0b3BFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTU0MzMs
NyArNTQzMyw3IEBAIE9iamVjdEltcCAqU1ZHU3RvcEVsZW1lbnQ6OmJyaWRnZShFeGVjU3QKICAg
ICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1N0b3BFbGVtZW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdTdG9wRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1N0b3BF
bGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1N0b3BFbGVt
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNo
ZURPTU9iamVjdDxTVkdTdG9wRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3RvcEVsZW1lbnQ6
OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNTQ0MiwxMiArNTQ0MiwxMiBAQCBib29sIFNWR1N0cmlu
Z0xpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0g
TG9va3VwOjpmaW5kRW50cnkoJlNWR1N0cmluZ0xpc3Q6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBp
ZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdTdHJpbmdMaXN0UHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1N0cmluZ0xpc3RQcm90bzo6c2VsZihwMSk7Cisg
ICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdTdHJpbmdMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKlNWR1N0cmluZ0xpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdTdHJpbmdMaXN0UHJvdG9GdW5jLFNW
R1N0cmluZ0xpc3Q+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTU0NTksMTgg
KzU0NTksMTggQEAgU1ZHU3RyaW5nTGlzdCBTVkdTdHJpbmdMaXN0UHJvdG9GdW5jOjpjYQogICAg
IHJldHVybiBTVkdTdHJpbmdMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBTVkdTdHJpbmdMaXN0Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1N0cmluZ0xp
c3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gU1ZHU3RyaW5nTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBTVkdTdHJpbmdMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHU3RyaW5nTGlzdDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1N0cmluZ0xpc3Q6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHU3Ry
aW5nTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1N0cmluZ0xpc3Q6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTQ3OCw3ICs1NDc4LDcgQEAgT2JqZWN0
SW1wICpTVkdTdHJpbmdMaXN0OjpicmlkZ2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NQnJpZGdlPFNWR1N0cmluZ0xpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR1N0cmluZ0xpc3Q6OlBy
aXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdTdHJpbmdMaXN0OjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1N0cmluZ0xpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1N0cmluZ0xp
c3Q+KHAxLHN0YXRpY19jYXN0PFNWR1N0cmluZ0xpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpA
QCAtNTQ4NywxMiArNTQ4NywxMiBAQCBib29sIFNWR1N0eWxhYmxlOjpoYXNQcm9wZXJ0eShFeGVj
U3RhdGUgCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNW
R1N0eWxhYmxlOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAg
T2JqZWN0IHByb3RvID0gU1ZHU3R5bGFibGVQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0g
U1ZHU3R5bGFibGVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdTdHls
YWJsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdTdHlsYWJsZTo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0
PFNWR1N0eWxhYmxlUHJvdG9GdW5jLFNWR1N0eWxhYmxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CkBAIC01NTg2LDE4ICs1NTg2LDE4IEBAIFNWR1N0eWxhYmxlIFNWR1N0eWxhYmxl
UHJvdG9GdW5jOjpjYXN0KEsKICAgICByZXR1cm4gU1ZHU3R5bGFibGU6Om51bGw7CiB9CiAKLVZh
bHVlIFNWR1N0eWxhYmxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR1N0eWxhYmxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewotICAgIE9iamVjdCBwcm90byA9IFNWR1N0eWxhYmxlUHJvdG86OnNlbGYocDEpOwotICAgIGlm
KHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IFNWR1N0eWxhYmxlUHJvdG86OnNlbGYocDEpOworICAgIGlmKHBy
b3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBR
X1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHU3R5
bGFibGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdTdHls
YWJsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVy
biBTVkdTdHlsYWJsZVByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1N0eWxh
YmxlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTU2MDUsNyArNTYwNSw3IEBAIE9i
amVjdEltcCAqU1ZHU3R5bGFibGU6OmJyaWRnZShFeGVjU3RhdGUKICAgICByZXR1cm4gbmV3IEtE
T006OkRPTUJyaWRnZTxTVkdTdHlsYWJsZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3R5bGFibGU6OlBy
aXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdTdHlsYWJsZTo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdTdHlsYWJsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHU3R5bGFibGU+KHAx
LHN0YXRpY19jYXN0PFNWR1N0eWxhYmxlOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTU2MTgs
MTIgKzU2MTgsMTIgQEAgYm9vbCBTVkdTdHlsZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHU3R5bGVFbGVtZW50OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1N0eWxlRWxlbWVudDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHU3R5
bGVFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1N0
eWxlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdTdHlsZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVu
dDo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC01NjQzLDEwICs1
NjQzLDEwIEBAIGJvb2wgU1ZHU3R5bGVFbGVtZW50OjpwdXRJblBhcmVudHMoUFVUX00KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdTdHlsZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdTdHlsZUVsZW1lbnQ6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1N0eWxl
RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01NjU0LDcgKzU2NTQsNyBA
QCBPYmplY3RJbXAgKlNWR1N0eWxlRWxlbWVudDo6YnJpZGdlKEV4ZWNTCiAgICAgcmV0dXJuIG5l
dyBLRE9NOjpET01SV0JyaWRnZTxTVkdTdHlsZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1N0
eWxlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1N0eWxlRWxlbWVudDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdTdHlsZUVsZW1lbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2Jq
ZWN0PFNWR1N0eWxlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3R5bGVFbGVtZW50OjpQcml2
YXRlICo+KGQpKTsKIH0KQEAgLTU2NzIsMTIgKzU2NzIsMTIgQEAgYm9vbCBTVkdTd2l0Y2hFbGVt
ZW50OjpoYXNQcm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZH
U3dpdGNoRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdT
d2l0Y2hFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdTd2l0Y2hFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1N3aXRjaEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3dpdGNoRWxlbWVudDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC01NzAxLDEwICs1
NzAxLDEwIEBAIGJvb2wgU1ZHU3dpdGNoRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVIKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdTd2l0Y2hFbGVtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHU3dpdGNoRWxlbWVudDo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0
ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHU3dp
dGNoRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01NzEyLDcgKzU3MTIs
NyBAQCBPYmplY3RJbXAgKlNWR1N3aXRjaEVsZW1lbnQ6OmJyaWRnZShFeGVjCiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdTd2l0Y2hFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxT
VkdTd2l0Y2hFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHU3dpdGNoRWxl
bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdTd2l0Y2hFbGVt
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNo
ZURPTU9iamVjdDxTVkdTd2l0Y2hFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdTd2l0Y2hFbGVt
ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTU3MjksMTIgKzU3MjksMTIgQEAgYm9vbCBTVkdT
eW1ib2xFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgU1ZHU3ltYm9sRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdTeW1ib2xFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdTeW1ib2xFbGVtZW50PihwMSxwMiwmc19o
YXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1N5bWJvbEVsZW1lbnQ6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3ltYm9sRWxlbWVudDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwog
ICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC01
NzU3LDEwICs1NzU3LDEwIEBAIGJvb2wgU1ZHU3ltYm9sRWxlbWVudDo6cHV0KFBVVF9NRVRIT0Rf
QVIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdTeW1ib2xFbGVtZW50Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHU3ltYm9sRWxlbWVudDo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+
aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqU1ZHU3ltYm9sRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01NzY4
LDcgKzU3NjgsNyBAQCBPYmplY3RJbXAgKlNWR1N5bWJvbEVsZW1lbnQ6OmJyaWRnZShFeGVjCiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdTeW1ib2xFbGVtZW50PihwMSxzdGF0
aWNfY2FzdDxTVkdTeW1ib2xFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZH
U3ltYm9sRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdT
eW1ib2xFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpjYWNoZURPTU9iamVjdDxTVkdTeW1ib2xFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdT
eW1ib2xFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTU3ODEsMTIgKzU3ODEsMTIgQEAg
Ym9vbCBTVkdUU3BhbkVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgU1ZHVFNwYW5FbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1RTcGFuRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHVFNwYW5FbGVtZW50PihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1RTcGFuRWxlbWVudDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUU3BhbkVsZW1l
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CkBAIC01ODAxLDEwICs1ODAxLDEwIEBAIGJvb2wgU1ZHVFNwYW5FbGVtZW50OjpwdXQoUFVUX01F
VEhPRF9BUkcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdUU3BhbkVsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdUU3BhbkVsZW1l
bnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
cDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKlNWR1RTcGFuRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01
ODEyLDcgKzU4MTIsNyBAQCBPYmplY3RJbXAgKlNWR1RTcGFuRWxlbWVudDo6YnJpZGdlKEV4ZWNT
CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdUU3BhbkVsZW1lbnQ+KHAxLHN0
YXRpY19jYXN0PFNWR1RTcGFuRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNW
R1RTcGFuRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdU
U3BhbkVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006OmNhY2hlRE9NT2JqZWN0PFNWR1RTcGFuRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVFNw
YW5FbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTU4MjEsMTIgKzU4MjEsMTIgQEAgYm9v
bCBTVkdUZXN0czo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMQogewogICAgIGNvbnN0IEhhc2hF
bnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdUZXN0czo6c19oYXNoVGFibGUscDIpOwog
ICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR1Rlc3RzUHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1Rlc3RzUHJvdG86OnNlbGYocDEpOworICAgIGlm
KHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgU1ZHVGVzdHM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHVGVzdHM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006Omxvb2t1cEdldDxTVkdUZXN0c1Byb3RvRnVuYyxTVkdUZXN0cz4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNTg4OCwxOCArNTg4OCwxOCBAQCBTVkdUZXN0cyBTVkdU
ZXN0c1Byb3RvRnVuYzo6Y2FzdChLSlM6OkV4CiAgICAgcmV0dXJuIFNWR1Rlc3RzOjpudWxsOwog
fQogCi1WYWx1ZSBTVkdUZXN0czo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdUZXN0czo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdUZXN0c1Byb3RvOjpzZWxmKHAxKTsKLSAgICBpZihw
cm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9i
amVjdEltcCAqcHJvdG8gPSBTVkdUZXN0c1Byb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVT
RUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR1Rlc3RzOjpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHVGVzdHM6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHVGVzdHNQ
cm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdUZXN0czo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC01OTA3LDcgKzU5MDcsNyBAQCBPYmplY3RJbXAgKlNWR1Rlc3Rz
OjpicmlkZ2UoRXhlY1N0YXRlICpwCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZH
VGVzdHM+KHAxLHN0YXRpY19jYXN0PFNWR1Rlc3RzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAot
VmFsdWUgU1ZHVGVzdHM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
VGVzdHM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNh
Y2hlRE9NT2JqZWN0PFNWR1Rlc3RzPihwMSxzdGF0aWNfY2FzdDxTVkdUZXN0czo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CkBAIC01OTE2LDggKzU5MTYsOCBAQCBib29sIFNWR1RleHRDb250ZW50RWxl
bWVudDo6aGFzUHJvcGVydHkoCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpm
aW5kRW50cnkoJlNWR1RleHRDb250ZW50RWxlbWVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlm
KGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR1RleHRDb250ZW50RWxlbWVu
dFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdUZXh0Q29udGVudEVsZW1lbnRQcm90
bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRy
dWU7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
ICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOwogICAgIGlmKFNWR0xhbmdTcGFjZTo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKQEAgLTU5MjYsNyArNTkyNiw3IEBAIGJvb2wgU1ZHVGV4dENvbnRlbnRFbGVt
ZW50OjpoYXNQcm9wZXJ0eSgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1RleHRD
b250ZW50RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006Omxvb2t1cEdldDxTVkdUZXh0Q29udGVudEVsZW1lbnRQcm90b0Z1bmMsU1ZHVGV4
dENvbnRlbnRFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC01OTQ0
LDEwICs1OTQ0LDEwIEBAIFNWR1RleHRDb250ZW50RWxlbWVudCBTVkdUZXh0Q29udGVudEVsZW0K
ICAgICByZXR1cm4gU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpudWxsOwogfQogCi1WYWx1ZSBTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR1RleHRDb250ZW50RWxlbWVudFBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdUZXh0Q29udGVudEVs
ZW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdMYW5nU3Bh
Y2U6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0xhbmdTcGFjZTo6Z2V0KHAxLHAyLHAz
KTsKQEAgLTU5NjksMTAgKzU5NjksMTAgQEAgYm9vbCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnB1
dChQVVRfTUVUSAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1RleHRDb250ZW50
RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1Rl
eHRDb250ZW50RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBTVkdUZXh0Q29udGVudEVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtNTk4MCw3ICs1OTgwLDcgQEAgT2JqZWN0SW1wICpTVkdUZXh0Q29udGVudEVs
ZW1lbnQ6OmJyaWRnZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHVGV4dENv
bnRlbnRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdUZXh0Q29udGVudEVsZW1lbnQ6OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxT
VkdUZXh0Q29udGVudEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1RleHRDb250ZW50RWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01OTk0LDEyICs1OTk0LDEyIEBAIGJvb2wgU1ZHVGV4
dEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR1RleHRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR1RleHRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdUZXh0RWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdUZXh0RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUZXh0RWxlbWVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR1RyYW5zZm9ybWFibGU6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmdldChwMSxwMixwMyk7CkBAIC02MDE1LDEw
ICs2MDE1LDEwIEBAIGJvb2wgU1ZHVGV4dEVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdUZXh0RWxlbWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1RleHRFbGVtZW50Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRl
cigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdUZXh0
RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC02MDI2LDcgKzYwMjYsNyBA
QCBPYmplY3RJbXAgKlNWR1RleHRFbGVtZW50OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5l
dyBLRE9NOjpET01SV0JyaWRnZTxTVkdUZXh0RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVGV4
dEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdUZXh0RWxlbWVudDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdUZXh0RWxlbWVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8
U1ZHVGV4dEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50OjpQcml2YXRlICo+
KGQpKTsKIH0KQEAgLTYwMzksMTIgKzYwMzksMTIgQEAgYm9vbCBTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50OjpoYXNQcm9wZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1RleHRQb3NpdGlv
bmluZ0VsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICBpZihTVkdUZXh0Q29udGVudEVsZW1lbnQ6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC02MDU5LDEwICs2MDU5LDEwIEBAIGJvb2wgU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudDo6cHV0KFBVVF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVj
dCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC02MDcwLDcgKzYw
NzAsNyBAQCBPYmplY3RJbXAgKlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmJyCiAgICAgcmV0
dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50PihwMSxz
dGF0aWNfY2FzdDxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0K
IAotVmFsdWUgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK1ZhbHVlSW1wICpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTYwODUsMTIgKzYwODUsMTIgQEAgYm9vbCBTVkdU
aXRsZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgU1ZHVGl0bGVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1RpdGxlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHVGl0bGVFbGVtZW50PihwMSxwMiwmc19oYXNo
VGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1RpdGxlRWxlbWVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUaXRsZUVsZW1lbnQ6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBp
ZihTVkdMYW5nU3BhY2U6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0xhbmdTcGFjZTo6
Z2V0KHAxLHAyLHAzKTsKQEAgLTYxMTEsMTAgKzYxMTEsMTAgQEAgYm9vbCBTVkdUaXRsZUVsZW1l
bnQ6OnB1dChQVVRfTUVUSE9EX0FSRwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNW
R1RpdGxlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAg
KlNWR1RpdGxlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgp
OwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHVGl0bGVFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpw
MSkgY29uc3QKQEAgLTYxMjIsNyArNjEyMiw3IEBAIE9iamVjdEltcCAqU1ZHVGl0bGVFbGVtZW50
OjpicmlkZ2UoRXhlY1MKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1RpdGxl
RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVGl0bGVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgU1ZHVGl0bGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlNWR1RpdGxlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHVGl0bGVFbGVtZW50PihwMSxzdGF0
aWNfY2FzdDxTVkdUaXRsZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNjEzMSwxMiAr
NjEzMSwxMiBAQCBib29sIFNWR1RyYW5zZm9ybTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiB7CiAg
ICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR1RyYW5zZm9ybTo6
c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90
byA9IFNWR1RyYW5zZm9ybVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdUcmFuc2Zv
cm1Qcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm06Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVHJhbnNmb3JtOjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHVHJh
bnNmb3JtUHJvdG9GdW5jLFNWR1RyYW5zZm9ybT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMp
OwogfQpAQCAtNjE1MywxOCArNjE1MywxOCBAQCBTVkdUcmFuc2Zvcm0gS1NWRzo6dG9TVkdUcmFu
c2Zvcm0oS0pTOjpFCiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybTo6bnVsbDsKIH0KIAotVmFsdWUg
U1ZHVHJhbnNmb3JtOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1RyYW5zZm9ybTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
LSAgICBPYmplY3QgcHJvdG8gPSBTVkdUcmFuc2Zvcm1Qcm90bzo6c2VsZihwMSk7Ci0gICAgaWYo
cHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBP
YmplY3RJbXAgKnByb3RvID0gU1ZHVHJhbnNmb3JtUHJvdG86OnNlbGYocDEpOworICAgIGlmKHBy
b3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBR
X1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHVHJh
bnNmb3JtOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHVHJh
bnNmb3JtOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIFNWR1RyYW5zZm9ybVByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1Ry
YW5zZm9ybTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC02MTcyLDcgKzYxNzIsNyBA
QCBPYmplY3RJbXAgKlNWR1RyYW5zZm9ybTo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5l
dyBLRE9NOjpET01CcmlkZ2U8U1ZHVHJhbnNmb3JtPihwMSxzdGF0aWNfY2FzdDxTVkdUcmFuc2Zv
cm06OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm06OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVHJhbnNmb3JtOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdUcmFu
c2Zvcm0+KHAxLHN0YXRpY19jYXN0PFNWR1RyYW5zZm9ybTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9
CkBAIC02MTgxLDEyICs2MTgxLDEyIEBAIGJvb2wgU1ZHVHJhbnNmb3JtTGlzdDo6aGFzUHJvcGVy
dHkoRXhlY1MKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgm
U1ZHVHJhbnNmb3JtTGlzdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVl
OwotICAgIE9iamVjdCBwcm90byA9IFNWR1RyYW5zZm9ybUxpc3RQcm90bzo6c2VsZihwMSk7Ci0g
ICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gU1ZHVHJhbnNmb3JtTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90
by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIFNWR1RyYW5zZm9ybUxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHVHJhbnNmb3JtTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR1RyYW5zZm9ybUxpc3RQcm90b0Z1bmMsU1ZH
VHJhbnNmb3JtTGlzdD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNjE5OCwx
OCArNjE5OCwxOCBAQCBTVkdUcmFuc2Zvcm1MaXN0IFNWR1RyYW5zZm9ybUxpc3RQcm90b0Z1CiAg
ICAgcmV0dXJuIFNWR1RyYW5zZm9ybUxpc3Q6Om51bGw7CiB9CiAKLVZhbHVlIFNWR1RyYW5zZm9y
bUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
VHJhbnNmb3JtTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAg
ICBPYmplY3QgcHJvdG8gPSBTVkdUcmFuc2Zvcm1MaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlm
KHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IFNWR1RyYW5zZm9ybUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAg
aWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwog
ICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBT
VkdUcmFuc2Zvcm1MaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqU1ZHVHJhbnNmb3JtTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBTVkdUcmFuc2Zvcm1MaXN0UHJvdG86OnNlbGYocDEpOwotICAgIHJl
dHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAK
IE9iamVjdEltcCAqU1ZHVHJhbnNmb3JtTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CkBAIC02MjE3LDcgKzYyMTcsNyBAQCBPYmplY3RJbXAgKlNWR1RyYW5zZm9ybUxpc3Q6OmJyaWRn
ZShFeGVjCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHVHJhbnNmb3JtTGlzdD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHVHJhbnNmb3JtTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAK
LVZhbHVlIFNWR1RyYW5zZm9ybUxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHVHJhbnNmb3JtTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHVHJhbnNmb3JtTGlzdD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHVHJhbnNmb3JtTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC02MjMwLDIx
ICs2MjMwLDIxIEBAIGJvb2wgU1ZHVHJhbnNmb3JtYWJsZTo6aGFzUHJvcGVydHkoRXhlY1MKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1RyYW5zZm9ybWFibGU6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHVHJh
bnNmb3JtYWJsZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdU
cmFuc2Zvcm1hYmxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1RyYW5zZm9ybWFibGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgaWYoU1ZHTG9jYXRhYmxlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdM
b2NhdGFibGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1P
YmplY3QgU1ZHVHJhbnNmb3JtYWJsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitP
YmplY3RJbXAgKlNWR1RyYW5zZm9ybWFibGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1RyYW5zZm9ybWFibGU6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNjI1Miw3ICs2MjUyLDcgQEAgT2JqZWN0SW1wICpTVkdU
cmFuc2Zvcm1hYmxlOjpicmlkZ2UoRXhlYwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdl
PFNWR1RyYW5zZm9ybWFibGU+KHAxLHN0YXRpY19jYXN0PFNWR1RyYW5zZm9ybWFibGU6OlByaXZh
dGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm1hYmxlOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybWFibGU6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1RyYW5z
Zm9ybWFibGU+KHAxLHN0YXRpY19jYXN0PFNWR1RyYW5zZm9ybWFibGU6OlByaXZhdGUgKj4oaW1w
bCkpOwogfQpAQCAtNjI2NSwyMSArNjI2NSwyMSBAQCBib29sIFNWR1VSSVJlZmVyZW5jZTo6aGFz
UHJvcGVydHkoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdVUklSZWZl
cmVuY2U6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVVJJUmVmZXJl
bmNlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29r
dXBHZXRWYWx1ZTxTVkdVUklSZWZlcmVuY2U+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KIAotVmFsdWUgU1ZHVVJJUmVmZXJlbmNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR1VSSVJlZmVyZW5jZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVT
RUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR1VSSVJlZmVy
ZW5jZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1VSSVJl
ZmVyZW5jZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJl
dHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAK
IE9iamVjdEltcCAqU1ZHVVJJUmVmZXJlbmNlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QK
QEAgLTYyODcsNyArNjI4Nyw3IEBAIE9iamVjdEltcCAqU1ZHVVJJUmVmZXJlbmNlOjpicmlkZ2Uo
RXhlY1MKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdVUklSZWZlcmVuY2U+KHAx
LHN0YXRpY19jYXN0PFNWR1VSSVJlZmVyZW5jZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZh
bHVlIFNWR1VSSVJlZmVyZW5jZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpTVkdVUklSZWZlcmVuY2U6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1VSSVJlZmVyZW5jZT4ocDEsc3RhdGljX2Nhc3Q8
U1ZHVVJJUmVmZXJlbmNlOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTYzMDYsMTIgKzYzMDYs
MTIgQEAgYm9vbCBTVkdVc2VFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHVXNlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpTVkdVc2VFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdVc2VFbGVtZW50PihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1VzZUVsZW1lbnQ6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVXNlRWxlbWVudDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwog
ICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC02
MzM2LDEwICs2MzM2LDEwIEBAIGJvb2wgU1ZHVXNlRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVJH
UykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdVc2VFbGVtZW50Ojpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHVXNlRWxlbWVudDo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZH
VXNlRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC02MzQ3LDcgKzYzNDcs
NyBAQCBPYmplY3RJbXAgKlNWR1VzZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdVc2VFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdV
c2VFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHVXNlRWxlbWVudDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdVc2VFbGVtZW50OjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxT
VkdVc2VFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdVc2VFbGVtZW50OjpQcml2YXRlICo+KGQp
KTsKIH0KQEAgLTYzNjMsMTIgKzYzNjMsMTIgQEAgYm9vbCBTVkdWaWV3RWxlbWVudDo6aGFzUHJv
cGVydHkoRXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHVmlld0VsZW1l
bnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVmlld0VsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdl
dFZhbHVlPFNWR1ZpZXdFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAK
LVZhbHVlIFNWR1ZpZXdFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1ZpZXdFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTYzOTAsMTAgKzYzOTAsMTAgQEAgYm9vbCBTVkdW
aWV3RWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVJHUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
T2JqZWN0IFNWR1ZpZXdFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHVmlld0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90
b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1ZpZXdFbGVtZW50OjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTY0MDEsNyArNjQwMSw3IEBAIE9iamVjdEltcCAqU1ZHVmlld0Vs
ZW1lbnQ6OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNW
R1ZpZXdFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdWaWV3RWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIFNWR1ZpZXdFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR1ZpZXdFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdWaWV3RWxlbWVudD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHVmlld0VsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNjQxNCwxMiAr
NjQxNCwxMiBAQCBib29sIFNWR1pvb21BbmRQYW46Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdab29tQW5kUGFuOjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1pvb21BbmRQYW46OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1pvb21BbmRQYW4+
KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHWm9vbUFuZFBhbjo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdab29tQW5k
UGFuOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VE
KHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwpAQCAtNjQzNiwxMCArNjQzNiwxMCBAQCBib29sIFNWR1pvb21BbmRQYW46OnB1dEluUGFyZW50
cyhQVVRfTUVUCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHWm9vbUFuZFBhbjo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1pvb21BbmRQYW46
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEt
PmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlNWR1pvb21BbmRQYW46OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNjQ0Nyw3
ICs2NDQ3LDcgQEAgT2JqZWN0SW1wICpTVkdab29tQW5kUGFuOjpicmlkZ2UoRXhlY1N0YQogICAg
IHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHWm9vbUFuZFBhbj4ocDEsc3RhdGljX2Nh
c3Q8U1ZHWm9vbUFuZFBhbjo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1pvb21B
bmRQYW46OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHWm9vbUFuZFBh
bjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVE
T01PYmplY3Q8U1ZHWm9vbUFuZFBhbj4ocDEsc3RhdGljX2Nhc3Q8U1ZHWm9vbUFuZFBhbjo6UHJp
dmF0ZSAqPihpbXBsKSk7CiB9CkBAIC02NDYwLDEyICs2NDYwLDEyIEBAIGJvb2wgU1ZHWm9vbUV2
ZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVl
IFNWR1pvb21FdmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkda
b29tRXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
Omxvb2t1cEdldFZhbHVlPFNWR1pvb21FdmVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMp
OwogfQogCi1WYWx1ZSBTVkdab29tRXZlbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHWm9vbUV2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIGlmKEtET006OlVJRXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIEtET006OlVJRXZlbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwpAQCAtNjQ3NywxMCArNjQ3NywxMCBAQCBib29sIFNWR1pvb21FdmVudDo6cHV0KFBVVF9N
RVRIT0RfQVJHUykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdab29tRXZlbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdab29tRXZlbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEt
PmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBLRE9NOjpV
SUV2ZW50IEtTVkc6OkVjbWFJbnRlcmZhY2U6OmluaGVyaXRlZFVJRXZlbnRDYXN0KGNvbnN0IE9i
amVjdEltcCAqcDEpCkBAIC02NDk3LDcgKzY0OTcsNyBAQCBPYmplY3RJbXAgKlNWR1pvb21FdmVu
dDo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkda
b29tRXZlbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1pvb21FdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9
CiAKLVZhbHVlIFNWR1pvb21FdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTVkdab29tRXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1pvb21FdmVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZH
Wm9vbUV2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KSW5kZXg6IGtzdmcyL2RvbS9TVkdBRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR0FFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR0FFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FFbGVtZW50LmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FFbGVtZW50
LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjMxIC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQUVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQUVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBRWxl
bWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHQUVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0FFbGVtZW50LmgJOSBKdWwgMjAwNSAw
Njo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBRWxlbWVudC5oCTggQXVnIDIwMDUg
MDg6MjQ6MzEgLTAwMDAKQEAgLTY1LDcgKzY1LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9H
RVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
CX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5nbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmdsZS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmdsZS5jcHAK
LS0tIGtzdmcyL2RvbS9TVkdBbmdsZS5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdBbmdsZS5jcHAJOCBBdWcgMjAwNSAwODoyNDozMSAtMDAwMApAQCAt
NDksNyArNDksNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJP
VE9UWVBFKCJTVkdBbmdsZSIsIFNWR0FuZ2xlUHJvdG8sIFNWR0FuZ2xlUHJvdG9GdW5jKQogCi1W
YWx1ZSBTVkdBbmdsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmdsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzEsNyAr
NzEsNyBAQCBWYWx1ZSBTVkdBbmdsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAJcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR0FuZ2xlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZH
QW5nbGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03OSwxMiArNzksMTIg
QEAgdm9pZCBTVkdBbmdsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdAogCXsKIAkJY2FzZSBT
VkdBbmdsZUNvbnN0YW50czo6VmFsdWU6CiAJCXsKLQkJCXNldFZhbHVlKHZhbHVlLnRvTnVtYmVy
KGV4ZWMpKTsKKwkJCXNldFZhbHVlKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlicmVhazsK
IAkJfQogCQljYXNlIFNWR0FuZ2xlQ29uc3RhbnRzOjpWYWx1ZUluU3BlY2lmaWVkVW5pdHM6CiAJ
CXsKLQkJCXNldFZhbHVlSW5TcGVjaWZpZWRVbml0cyh2YWx1ZS50b051bWJlcihleGVjKSk7CisJ
CQlzZXRWYWx1ZUluU3BlY2lmaWVkVW5pdHModmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJy
ZWFrOwogCQl9CiAJCWNhc2UgU1ZHQW5nbGVDb25zdGFudHM6OlZhbHVlQXNTdHJpbmc6CkBAIC05
OSw3ICs5OSw3IEBAIHZvaWQgU1ZHQW5nbGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXQKIAlL
RE9NX0xFQVZFX1NBRkUoS0RPTTo6RE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBTVkdBbmdsZVBy
b3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKK1ZhbHVlSW1wICpTVkdBbmdsZVByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNL
X1RISVMoU1ZHQW5nbGUpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC0xMDgsMTMgKzEwOCwxMyBAQCBW
YWx1ZSBTVkdBbmdsZVByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgCiAJewogCQljYXNlIFNWR0Fu
Z2xlQ29uc3RhbnRzOjpDb252ZXJ0VG9TcGVjaWZpZWRVbml0czoKIAkJewotCQkJdW5zaWduZWQg
c2hvcnQgdW5pdFR5cGUgPSBhcmdzWzBdLnRvVUludDE2KGV4ZWMpOworCQkJdW5zaWduZWQgc2hv
cnQgdW5pdFR5cGUgPSBhcmdzWzBdLT50b1VJbnQxNihleGVjKTsKIAkJCW9iai5jb252ZXJ0VG9T
cGVjaWZpZWRVbml0cyh1bml0VHlwZSk7CiAJCX0KIAkJY2FzZSBTVkdBbmdsZUNvbnN0YW50czo6
TmV3VmFsdWVTcGVjaWZpZWRVbml0czoKIAkJewotCQkJdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUg
PSBhcmdzWzBdLnRvVUludDE2KGV4ZWMpOwotCQkJZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRz
ID0gYXJnc1sxXS50b051bWJlcihleGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0g
YXJnc1swXS0+dG9VSW50MTYoZXhlYyk7CisJCQlmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMg
PSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKIAkJCW9iai5uZXdWYWx1ZVNwZWNpZmllZFVuaXRz
KHVuaXRUeXBlLCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4
OiBrc3ZnMi9kb20vU1ZHQW5nbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5nbGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuZ2xlLmgKLS0tIGtzdmcyL2RvbS9TVkdBbmds
ZS5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5nbGUu
aAk4IEF1ZyAyMDA1IDA4OjI0OjMxIC0wMDAwCkBAIC03Miw4ICs3Miw4IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJCUtET01fUFVUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6
VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIH07CkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0
ZUNvbG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQu
Y3BwCTggQXVnIDIwMDUgMDg6MjQ6MzEgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcy
L2RvbS9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVD
b2xvckVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAk5IEp1
bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVDb2xvckVs
ZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjMxIC0wMDAwCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVz
cGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisr
KyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MzEgLTAw
MDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1W
YWx1ZSBTVkdBbmltYXRlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlRWxlbWVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVFbGVtZW50
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdBbmltYXRlRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQuaAk5IEp1
bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVFbGVtZW50
LmgJOCBBdWcgMjAwNSAwODoyNDozMSAtMDAwMApAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2Ug
S1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAk5
IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjMyIC0wMDAwCkBAIC0zNyw3ICszNyw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAotLS0ga3N2ZzIv
ZG9tL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCTggQXVnIDIw
MDUgMDg6MjQ6MzIgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRBbmdsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVk
QW5nbGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHQW5pbWF0ZWRBbmdsZS5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZEFuZ2xl
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1h
dGVkQW5nbGUuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MzIgLTAwMDAKQEAgLTM5LDcgKzM5LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZEFuZ2xl
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKlNWR0FuaW1hdGVkQW5nbGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdBbmltYXRlZEFuZ2xlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkQW5nbGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQW5nbGUuaAotLS0ga3N2
ZzIvZG9tL1NWR0FuaW1hdGVkQW5nbGUuaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQW5nbGUuaAk4IEF1ZyAyMDA1IDA4OjI0OjMyIC0wMDAw
CkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0
IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZh
bHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRCb29sZWFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRCb29sZWFuLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQm9vbGVhbi5jcHAKLS0tIGtzdmcyL2RvbS9TVkdB
bmltYXRlZEJvb2xlYW4uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHQW5pbWF0ZWRCb29sZWFuLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjMyIC0wMDAwCkBA
IC00Miw3ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUg
U1ZHQW5pbWF0ZWRCb29sZWFuOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkQm9vbGVhbjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NB
RkUKIApAQCAtNjAsNyArNjAsNyBAQCBWYWx1ZSBTVkdBbmltYXRlZEJvb2xlYW46OmdldFZhbHVl
UHJvcGVyCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR0FuaW1hdGVkQm9vbGVh
bjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR0FuaW1hdGVkQm9vbGVhbjo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBTVkdBbmltYXRlZEJvb2xl
YW46OnB1dFZhbHVlUHJvcGVydAogCQljYXNlIFNWR0FuaW1hdGVkQm9vbGVhbkNvbnN0YW50czo6
QmFzZVZhbDoKIAkJewogCQkJaWYoaW1wbCkKLQkJCQlpbXBsLT5zZXRCYXNlVmFsKHZhbHVlLnRv
Qm9vbGVhbihleGVjKSk7CisJCQkJaW1wbC0+c2V0QmFzZVZhbCh2YWx1ZS0+dG9Cb29sZWFuKGV4
ZWMpKTsKIAogCQkJYnJlYWs7CiAJCX0KSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZEJvb2xl
YW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRCb29sZWFuLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZEJvb2xlYW4uaAotLS0ga3N2ZzIvZG9tL1NWR0Fu
aW1hdGVkQm9vbGVhbi5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZWRCb29sZWFuLmgJOCBBdWcgMjAwNSAwODoyNDozMiAtMDAwMApAQCAtNTUs
OCArNTUsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9Q
VVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9Owog
fTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZEVu
dW1lcmF0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbi5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjMyIC0w
MDAwCkBAIC00Miw3ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAot
VmFsdWUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZEVudW1lcmF0aW9u
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewog
CUtET01fRU5URVJfU0FGRQogCkBAIC02MCw3ICs2MCw3IEBAIFZhbHVlIFNWR0FuaW1hdGVkRW51
bWVyYXRpb246OmdldFZhbHVlUHIKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR0FuaW1hdGVkRW51bWVy
YXRpb246OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02OSw3ICs2OSw3IEBA
IHZvaWQgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6cHV0VmFsdWVQcm8KIAkJY2FzZSBTVkdBbmlt
YXRlZEVudW1lcmF0aW9uQ29uc3RhbnRzOjpCYXNlVmFsOgogCQl7CiAJCQlpZihpbXBsKQotCQkJ
CWltcGwtPnNldEJhc2VWYWwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KHZhbHVlLnRvTnVt
YmVyKGV4ZWMpKSk7CisJCQkJaW1wbC0+c2V0QmFzZVZhbChzdGF0aWNfY2FzdDx1bnNpZ25lZCBz
aG9ydD4odmFsdWUtPnRvTnVtYmVyKGV4ZWMpKSk7CiAKIAkJCWJyZWFrOwogCQl9CkluZGV4OiBr
c3ZnMi9kb20vU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmlt
YXRlZEVudW1lcmF0aW9uLmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmgJ
OSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZEVu
dW1lcmF0aW9uLmgJOCBBdWcgMjAwNSAwODoyNDozMiAtMDAwMApAQCAtNTUsOCArNTUsOCBAQCBu
YW1lc3BhY2UgS1NWRwogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDog
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRl
ZEludGVnZXIuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcAk5IEp1bCAy
MDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkSW50ZWdlci5j
cHAJOCBBdWcgMjAwNSAwODoyNDozMiAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVkSW50ZWdlcjo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpT
VkdBbmltYXRlZEludGVnZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTU5LDcgKzU5LDcgQEAgVmFs
dWUgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpnZXRWYWx1ZVByb3BlcgogCXJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotdm9pZCBTVkdBbmltYXRlZEludGVnZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdB
bmltYXRlZEludGVnZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02OCw3
ICs2OCw3IEBAIHZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpwdXRWYWx1ZVByb3BlcnQKIAkJY2Fz
ZSBTVkdBbmltYXRlZEludGVnZXJDb25zdGFudHM6OkJhc2VWYWw6CiAJCXsKIAkJCWlmKGltcGwp
Ci0JCQkJaW1wbC0+c2V0QmFzZVZhbChzdGF0aWNfY2FzdDxsb25nPih2YWx1ZS50b051bWJlcihl
eGVjKSkpOworCQkJCWltcGwtPnNldEJhc2VWYWwoc3RhdGljX2Nhc3Q8bG9uZz4odmFsdWUtPnRv
TnVtYmVyKGV4ZWMpKSk7CiAKIAkJCWJyZWFrOwogCQl9CkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZWRJbnRlZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkSW50ZWdlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRJbnRlZ2VyLmgKLS0tIGtzdmcy
L2RvbS9TVkdBbmltYXRlZEludGVnZXIuaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkSW50ZWdlci5oCTggQXVnIDIwMDUgMDg6MjQ6MzIgLTAw
MDAKQEAgLTUzLDggKzUzLDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9CQVNFQ0xBU1NfR0VU
CiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGlu
dCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1h
dGVkTGVuZ3RoLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVk
TGVuZ3RoLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R0FuaW1hdGVkTGVuZ3RoLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjMyIC0wMDAwCkBAIC0zOSw3ICsz
OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0
ZWRMZW5ndGg6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRMZW5ndGg6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6
IGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5n
dGguaAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoLmgJOSBKdWwgMjAwNSAwNjo1NDo1
MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aC5oCTggQXVnIDIwMDUg
MDg6MjQ6MzIgLTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6
IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZh
bHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmlt
YXRlZExlbmd0aExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aExpc3QuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0
LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAJOSBKdWwgMjAwNSAw
Njo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aExpc3QuY3Bw
CTggQXVnIDIwMDUgMDg6MjQ6MzIgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZExlbmd0aExpc3Q6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aExpc3QuaAk5IEp1bCAyMDA1IDA2
OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5oCTgg
QXVnIDIwMDUgMDg6MjQ6MzIgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEtTVkcK
IAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdBbmltYXRlZE51bWJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyLmNw
cAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUx
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyLmNwcAk4IEF1ZyAyMDA1
IDA4OjI0OjMyIC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwog
QGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZWROdW1iZXI6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWROdW1i
ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYxLDcgKzYxLDcgQEAgVmFsdWUgU1ZHQW5pbWF0ZWRO
dW1iZXI6OmdldFZhbHVlUHJvcGVydAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBT
VkdBbmltYXRlZE51bWJlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR0FuaW1hdGVkTnVtYmVyOjpw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFs
dWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1h
dGVkTnVtYmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlci5oCi0tLSBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWROdW1iZXIuaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyLmgJOCBBdWcgMjAwNSAwODoyNDozMiAtMDAwMApAQCAt
NTUsOCArNTUsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RP
TV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIp
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9
OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVk
TnVtYmVyTGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZWROdW1iZXJMaXN0LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyTGlzdC5jcHAJOCBBdWcgMjAwNSAwODoyNDozMiAtMDAw
MApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZh
bHVlIFNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZE51bWJlckxpc3Q6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RP
TV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlckxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5p
bWF0ZWROdW1iZXJMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlckxpc3QuaAotLS0ga3N2ZzIvZG9tL1NWR0Fu
aW1hdGVkTnVtYmVyTGlzdC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgJOCBBdWcgMjAwNSAwODoyNDozMyAtMDAwMApA
QCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBz
ZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdB
bmltYXRlZFBhdGhEYXRhLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuY3BwCi0tLSBrc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRQYXRoRGF0YS5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdBbmltYXRlZFBhdGhEYXRhLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjMzIC0wMDAw
CkBAIC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFs
dWUgU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFBhdGhEYXRhOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5U
RVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQYXRoRGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZFBh
dGhEYXRhLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdBbmltYXRlZFBhdGhEYXRhLmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFBhdGhE
YXRhLmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmlt
YXRlZFBhdGhEYXRhLmgJOCBBdWcgMjAwNSAwODoyNDozMyAtMDAwMApAQCAtNTYsNyArNTYsNyBA
QCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01f
QkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQb2ludHMuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRQb2ludHMuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQb2ludHMuY3BwCTkg
SnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQb2lu
dHMuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MzMgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZFBvaW50czo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1w
ICpTVkdBbmltYXRlZFBvaW50czo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NW
R0FuaW1hdGVkUG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkUG9pbnRzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZFBvaW50cy5oCi0tLSBrc3Zn
Mi9kb20vU1ZHQW5pbWF0ZWRQb2ludHMuaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUG9pbnRzLmgJOCBBdWcgMjAwNSAwODoyNDozMyAtMDAw
MApAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlw
dCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUHJlc2VydmVB
c3BlY3RSYXRpby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZFByZXNl
cnZlQXNwZWN0UmF0aW8uY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJOCBBdWcgMjAwNSAwODoyNDozMyAtMDAw
MApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZh
bHVlIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFByZXNl
cnZlQXNwZWN0UmF0aW86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUHJlc2Vy
dmVBc3BlY3RSYXRpby5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJOCBBdWcgMjAwNSAwODoyNDozMyAt
MDAwMApAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNj
cmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUmVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R0FuaW1hdGVkUmVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZFJlY3QuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0
ZWRSZWN0LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R0FuaW1hdGVkUmVjdC5jcHAJOCBBdWcgMjAwNSAwODoyNDozMyAtMDAwMApAQCAtMzksNyArMzks
NyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVk
UmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpTVkdBbmltYXRlZFJlY3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcy
L2RvbS9TVkdBbmltYXRlZFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRSZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZFJlY3QuaAotLS0ga3N2
ZzIvZG9tL1NWR0FuaW1hdGVkUmVjdC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisr
KyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRSZWN0LmgJOCBBdWcgMjAwNSAwODoyNDozMyAtMDAwMApA
QCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBz
ZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkU3RyaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5p
bWF0ZWRTdHJpbmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRTdHJpbmcuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0
ZWRTdHJpbmcuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRTdHJpbmcuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MzMgLTAwMDAKQEAgLTQyLDcg
KzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmlt
YXRlZFN0cmluZzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFN0cmluZzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAt
NjAsNyArNjAsNyBAQCBWYWx1ZSBTVkdBbmltYXRlZFN0cmluZzo6Z2V0VmFsdWVQcm9wZXJ0CiAJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR0FuaW1hdGVkU3RyaW5nOjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUs
IGludCkKK3ZvaWQgU1ZHQW5pbWF0ZWRTdHJpbmc6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJf
U0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRTdHJpbmcu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0FuaW1hdGVkU3RyaW5nLmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRTdHJpbmcu
aAk4IEF1ZyAyMDA1IDA4OjI0OjMzIC0wMDAwCkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJ
dm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6
OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1h
dGVkVHJhbnNmb3JtTGlzdC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFRyYW5zZm9ybUxp
c3QuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjMzIC0wMDAwCkBAIC00MSw3
ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VO
VEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmlt
YXRlZFRyYW5zZm9ybUxpc3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oCi0tLSBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaAk4IEF1ZyAyMDA1IDA4OjI0
OjMzIC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBF
Y21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKLS0tIGtz
dmcyL2RvbS9TVkdBbmltYXRpb25FbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDg6
MjQ6MzMgLTAwMDAKQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtT
VkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHQW5pbWF0aW9uRWxlbWVudCIsIFNWR0FuaW1hdGlv
bkVsZW1lbnRQcm90bywgU1ZHQW5pbWF0aW9uRWxlbWVudFByb3RvRnVuYykKIAotVmFsdWUgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRpb25FbGVtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FG
RQogCkBAIC02MSw5ICs2MSw5IEBAIFZhbHVlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldFZhbHVl
UHJvcGUKIH0KIAogCi1WYWx1ZSBTVkdBbmltYXRpb25FbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICYpCitWYWx1ZUltcCAq
U1ZHQW5pbWF0aW9uRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmKQogewotCVNWR0FuaW1hdGlvbkVsZW1lbnQgb2Jq
KGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkp
KTsKKwlTVkdBbmltYXRpb25FbGVtZW50IG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlLRE9N
X0VOVEVSX1NBRkUKIAogCXN3aXRjaChpZCkKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRpb25F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIv
ZG9tL1NWR0FuaW1hdGlvbkVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAotLS0ga3N2ZzIvZG9t
L1NWR0FuaW1hdGlvbkVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjMzIC0wMDAw
CkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9S
V0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRl
eDoga3N2ZzIvZG9tL1NWR0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdDaXJjbGVFbGVtZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0NpcmNsZUVs
ZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQ2lyY2xlRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAw
Njo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdDaXJjbGVFbGVtZW50LmNwcAk4IEF1
ZyAyMDA1IDA4OjI0OjM0IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBL
U1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQ2lyY2xlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdDaXJjbGVF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQ2lyY2xlRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9T
VkdDaXJjbGVFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdDaXJjbGVFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdDaXJjbGVF
bGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdD
aXJjbGVFbGVtZW50LmgJOCBBdWcgMjAwNSAwODoyNDozNCAtMDAwMApAQCAtNjUsNyArNjUsNyBA
QCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdD
bGlwUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAot
LS0ga3N2ZzIvZG9tL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCTggQXVnIDIwMDUg
MDg6MjQ6MzQgLTAwMDAKQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBA
ZW5kCiAqLwogCi1WYWx1ZSBTVkdDbGlwUGF0aEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ2xpcFBhdGhFbGVt
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQ2xpcFBhdGhFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R0NsaXBQYXRoRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHQ2xpcFBhdGhFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdDbGlw
UGF0aEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9t
L1NWR0NsaXBQYXRoRWxlbWVudC5oCTggQXVnIDIwMDUgMDg6MjQ6MzQgLTAwMDAKQEAgLTYzLDcg
KzYzLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdDb2xvci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdDb2xvci5jcHAKLS0tIGtzdmcyL2RvbS9TVkdDb2xvci5j
cHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdDb2xvci5j
cHAJOCBBdWcgMjAwNSAwODoyNDozNCAtMDAwMApAQCAtNDksNyArNDksNyBAQCB1c2luZyBuYW1l
c3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdDb2xvciIsIFNWR0Nv
bG9yUHJvdG8sIFNWR0NvbG9yUHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdDb2xvcjo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdD
b2xvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjgsNyArNjgsNyBAQCBWYWx1ZSBTVkdDb2xvcjo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1
ZSBTVkdDb2xvclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdDb2xvclByb3RvRnVuYzo6Y2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsK
IAlLRE9NX0NIRUNLX1RISVMoU1ZHQ29sb3IpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC05MCw3ICs5
MCw3IEBAIFZhbHVlIFNWR0NvbG9yUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAKIAkJfQogCQlj
YXNlIFNWR0NvbG9yQ29uc3RhbnRzOjpTZXRDb2xvcjoKIAkJewotCQkJdW5zaWduZWQgc2hvcnQg
Y29sb3JUeXBlID0gYXJnc1swXS50b1VJbnQxNihleGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IGNv
bG9yVHlwZSA9IGFyZ3NbMF0tPnRvVUludDE2KGV4ZWMpOwogCQkJS0RPTTo6RE9NU3RyaW5nIHJn
YkNvbG9yID0gS0RPTTo6dG9ET01TdHJpbmcoZXhlYywgYXJnc1sxXSk7CiAJCQlLRE9NOjpET01T
dHJpbmcgaWNjQ29sb3IgPSBLRE9NOjp0b0RPTVN0cmluZyhleGVjLCBhcmdzWzJdKTsKIAkJCW9i
ai5zZXRDb2xvcihjb2xvclR5cGUsIHJnYkNvbG9yLCBpY2NDb2xvcik7CkluZGV4OiBrc3ZnMi9k
b20vU1ZHQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHQ29sb3IuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR0NvbG9yLmgKLS0tIGtzdmcyL2RvbS9TVkdDb2xvci5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQ29sb3IuaAk4IEF1ZyAy
MDA1IDA4OjI0OjM0IC0wMDAwCkBAIC02Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtE
T01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisr
KyBrc3ZnMi9kb20vU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwCTggQXVn
IDIwMDUgMDg6MjQ6MzQgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtT
Vkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVu
dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NB
RkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0Nv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgJOCBBdWcgMjAwNSAwODoyNDozNCAtMDAw
MApAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZP
UldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0RlZnNFbGVtZW50LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0RlZnNFbGVtZW50
LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0RlZnNFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUy
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0RlZnNFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4
OjI0OjM0IC0wMDAwCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHRGVmc0VsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRGVmc0VsZW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9F
TlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
RGVmc0VsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0RlZnNFbGVtZW50LmgJOSBKdWwgMjAwNSAw
Njo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5oCTggQXVnIDIw
MDUgMDg6MjQ6MzQgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRGVzY0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdEZXNjRWxlbWVu
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdEZXNjRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdEZXNjRWxlbWVudC5jcHAJOSBK
dWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdEZXNjRWxlbWVudC5j
cHAJOCBBdWcgMjAwNSAwODoyNDozNCAtMDAwMApAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0Rlc2NFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0Rl
c2NFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRGVzY0VsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHRGVzY0VsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdEZXNjRWxlbWVu
dC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRGVzY0Vs
ZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjM0IC0wMDAwCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVz
cGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0RvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHRG9jdW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHRG9jdW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRG9jdW1lbnQuY3Bw
CTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRG9jdW1lbnQu
Y3BwCTggQXVnIDIwMDUgMDg6MjQ6MzQgLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdEb2N1bWVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdEb2N1
bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDoga3N2ZzIvZG9tL1NWR0RvY3VtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0RvY3Vt
ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdEb2N1bWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRG9jdW1lbnQuaAk5IEp1bCAyMDA1IDA2
OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0RvY3VtZW50LmgJOCBBdWcgMjAwNSAw
ODoyNDozNSAtMDAwMApAQCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dF
VAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga3N2ZzIvZG9tL1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0VsZW1lbnQuY3BwCi0t
LSBrc3ZnMi9kb20vU1ZHRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjM1IC0wMDAwCkBA
IC00OSw3ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUg
U1ZHRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03MSw3ICs3
MSw3IEBAIFZhbHVlIFNWR0VsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1MKIAlyZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHRWxlbWVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNW
R0VsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZh
bHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdFbGVtZW50
LmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdFbGVtZW50
LmgJOCBBdWcgMjAwNSAwODoyNDozNSAtMDAwMApAQCAtNTgsOCArNTgsOCBAQCBuYW1lc3BhY2Ug
S1NWRwogCQlLRE9NX1BVVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6
OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUlt
cCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChTVkdFbGVtZW50
KQpJbmRleDoga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZS5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdFbGVtZW50SW5zdGFuY2UuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlLmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0VsZW1lbnRJ
bnN0YW5jZS5jcHAJOCBBdWcgMjAwNSAwODoyNDozNSAtMDAwMApAQCAtNDksNyArNDksNyBAQCB1
c2luZyBuYW1lc3BhY2UgS0RPTTsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0VsZW1lbnRJbnN0YW5j
ZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpTVkdFbGVtZW50SW5zdGFuY2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcy
L2RvbS9TVkdFbGVtZW50SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2Uu
aAotLS0ga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZS5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlLmgJOCBBdWcgMjAwNSAw
ODoyNDozNSAtMDAwMApAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0JB
U0VDTEFTU19HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZh
bHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5jcHAKLS0tIGtz
dmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuY3BwCTggQXVnIDIw
MDUgMDg6MjQ6MzUgLTAwMDAKQEAgLTQ4LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7
CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHRWxlbWVudEluc3RhbmNlTGlzdCIsIFNW
R0VsZW1lbnRJbnN0YW5jZUxpc3RQcm90bywgU1ZHRWxlbWVudEluc3RhbmNlTGlzdFByb3RvRnVu
YykKIAotVmFsdWUgU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50SW5zdGFu
Y2VMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02NCw3ICs2NCw3IEBAIFZhbHVlIFNWR0VsZW1l
bnRJbnN0YW5jZUxpc3Q6OmdldFZhbHVlUHIKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZh
bHVlIFNWR0VsZW1lbnRJbnN0YW5jZUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHRWxlbWVu
dEluc3RhbmNlTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAq
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoU1ZHRWxlbWVu
dEluc3RhbmNlTGlzdCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTczLDcgKzczLDcgQEAgVmFsdWUg
U1ZHRWxlbWVudEluc3RhbmNlTGlzdFByb3RvRnVuYzo6YwogCXsKIAkJY2FzZSBTVkdFbGVtZW50
SW5zdGFuY2VMaXN0Q29uc3RhbnRzOjpJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4
ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdz
WzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR0VsZW1l
bnRJbnN0YW5jZT4oZXhlYywgb2JqLml0ZW0oaW5kZXgpKTsKIAkJfQogCQlkZWZhdWx0OgpJbmRl
eDoga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
RWxlbWVudEluc3RhbmNlTGlzdC5oCi0tLSBrc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlTGlz
dC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRWxlbWVu
dEluc3RhbmNlTGlzdC5oCTggQXVnIDIwMDUgMDg6MjQ6MzUgLTAwMDAKQEAgLTU1LDcgKzU1LDcg
QEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9N
X0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07
CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdFbGxpcHNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0VsbGlwc2VFbGVtZW50LmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0VsbGlwc2VFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0VsbGlwc2VFbGVtZW50LmNwcAk5
IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0VsbGlwc2VFbGVt
ZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjM1IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHRWxsaXBzZUVsZW1lbnQ6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHRWxsaXBzZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9T
VkdFbGxpcHNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdFbGxpcHNlRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRWxsaXBzZUVsZW1lbnQuaAotLS0ga3N2
ZzIvZG9tL1NWR0VsbGlwc2VFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdFbGxpcHNlRWxlbWVudC5oCTggQXVnIDIwMDUgMDg6MjQ6MzUgLTAw
MDAKQEAgLTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9G
T1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRXhjZXB0aW9uLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0V4Y2VwdGlvbi5jcHAK
LS0tIGtzdmcyL2RvbS9TVkdFeGNlcHRpb24uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHRXhjZXB0aW9uLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjM1IC0w
MDAwCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAot
VmFsdWUgU1ZHRXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtz
dmcyL2RvbS9TVkdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHRXhjZXB0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdFeGNlcHRpb24uaAotLS0ga3N2ZzIvZG9t
L1NWR0V4Y2VwdGlvbi5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHRXhjZXB0aW9uLmgJOCBBdWcgMjAwNSAwODoyNDozNSAtMDAwMApAQCAtNTQsNyArNTQs
NyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtE
T01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4
OiBrc3ZnMi9kb20vU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCTgg
QXVnIDIwMDUgMDg6MjQ6MzUgLTAwMDAKQEAgLTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6
IGtzdmcyL2RvbS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAotLS0ga3N2ZzIvZG9tL1NWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAk4IEF1ZyAyMDA1IDA4
OjI0OjM1IC0wMDAwCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAv
LyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVCbGVu
ZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdGRUJsZW5kRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUJsZW5kRWxlbWVudC5jcHAKLS0tIGtzdmcy
L2RvbS9TVkdGRUJsZW5kRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdGRUJsZW5kRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDozNSAt
MDAwMApAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsNCiBAZW5kDQogKi8N
CiANCi1WYWx1ZSBTVkdGRUJsZW5kRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QNCitWYWx1ZUltcCAqU1ZHRkVCbGVuZEVsZW1lbnQ6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0DQogew0KIAlL
RE9NX0VOVEVSX1NBRkUNCiANCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVCbGVuZEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVC
bGVuZEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR0ZFQmxlbmRFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRUJsZW5kRWxl
bWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVC
bGVuZEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjM2IC0wMDAwCkBAIC01OCw3ICs1OCw3IEBA
IG5hbWVzcGFjZSBLU1ZHDQogCQlLRE9NX0dFVA0KIAkJS0RPTV9GT1JXQVJEUFVUDQogDQotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7DQorCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ow0KIAl9Ow0KIH07DQogDQpJbmRleDoga3N2ZzIv
ZG9tL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MzYgLTAwMDAKQEAgLTQ4LDcg
KzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdGRUNv
bG9yTWF0cml4RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFQ29sb3JN
YXRyaXhFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgJOCBBdWcgMjAwNSAwODoyNDozNiAtMDAw
MApAQCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZP
UldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFQ29tcG9uZW50
VHJhbnNmZXJFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAotLS0ga3N2
ZzIvZG9tL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0
OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50
LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjM2IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBLU1ZHOw0KIEBlbmQNCiAqLw0KIA0KLVZhbHVlIFNWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdA0KK1ZhbHVlSW1wICpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QNCiB7DQogCUtET01fRU5U
RVJfU0FGRQ0KIA0KSW5kZXg6IGtzdmcyL2RvbS9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9T
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQu
aAotLS0ga3N2ZzIvZG9tL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgJOSBKdWwgMjAw
NSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5oCTggQXVnIDIwMDUgMDg6MjQ6MzYgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgbmFt
ZXNwYWNlIEtTVkcNCiAJCUtET01fR0VUDQogCQlLRE9NX0ZPUldBUkRQVVQNCiANCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsNCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7DQogCX07DQogfTsNCiANCkluZGV4OiBrc3ZnMi9kb20v
U1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCTkgSnVs
IDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVDb21wb3NpdGVFbGVt
ZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjM2IC0wMDAwCkBAIC01Miw3ICs1Miw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHRkVDb21wb3NpdGVFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2
ZzIvZG9tL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFQ29tcG9z
aXRlRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgJOSBKdWwg
MjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUNvbXBvc2l0ZUVsZW1l
bnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjM2IC0wMDAwCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFj
ZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZFRmxvb2RFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9k
b20vU1ZHRkVGbG9vZEVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20v
U1ZHRkVGbG9vZEVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MzYgLTAwMDAK
QEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7DQogQGVuZA0KICovDQogDQot
VmFsdWUgU1ZHRkVGbG9vZEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0DQorVmFsdWVJbXAgKlNWR0ZFRmxvb2RFbGVtZW50OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdA0KIHsNCiAJS0RPTV9F
TlRFUl9TQUZFDQogDQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFRmxvb2RFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFRmxvb2RF
bGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdGRUZsb29kRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRkVGbG9vZEVsZW1lbnQu
aAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFRmxvb2RF
bGVtZW50LmgJOCBBdWcgMjAwNSAwODoyNDozNiAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBuYW1l
c3BhY2UgS1NWRw0KIAkJS0RPTV9HRVQNCiAJCUtET01fRk9SV0FSRFBVVA0KIA0KLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0Ow0KKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsNCiAJfTsNCiB9Ow0KIA0KSW5kZXg6IGtzdmcyL2RvbS9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MzYgLTAwMDAKQEAgLTUxLDcg
KzUxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQ
RSgiU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50IiwgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50UHJv
dG8sIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudFByb3RvRnVuYykKIAotVmFsdWUgU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApAQCAtNzEsMTcgKzcxLDE3IEBAIFZhbHVlIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dDo6Z2V0VmFsdWUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCiB7Ci0JU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50IG9iaihjYXN0KGV4
ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7CisJU1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50IG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlLRE9NX0VO
VEVSX1NBRkUKIAogCXN3aXRjaChpZCkKIAl7CiAJCWNhc2UgU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50Q29uc3RhbnRzOjpTZXRTdGREZXZpYXRpb246CiAJCXsKLQkJCWZsb2F0IHN0ZERldmlhdGlv
blggPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOwotCQkJZmxvYXQgc3RkRGV2aWF0aW9uWSA9IGFy
Z3NbMV0udG9OdW1iZXIoZXhlYyk7CisJCQlmbG9hdCBzdGREZXZpYXRpb25YID0gYXJnc1swXS0+
dG9OdW1iZXIoZXhlYyk7CisJCQlmbG9hdCBzdGREZXZpYXRpb25ZID0gYXJnc1sxXS0+dG9OdW1i
ZXIoZXhlYyk7CiAJCQlvYmouc2V0U3RkRGV2aWF0aW9uKHN0ZERldmlhdGlvblgsIHN0ZERldmlh
dGlvblkpOwogCiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva3N2ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAk5IEp1bCAy
MDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudC5oCTggQXVnIDIwMDUgMDg6MjQ6MzYgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNw
YWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcy
L2RvbS9TVkdGRUltYWdlRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdGRUltYWdlRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDozNiAtMDAw
MApAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZh
bHVlIFNWR0ZFSW1hZ2VFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFSW1hZ2VFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVJbWFnZUVsZW1lbnQu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0ZFSW1hZ2VFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVJbWFnZUVsZW1lbnQu
aAk4IEF1ZyAyMDA1IDA4OjI0OjM3IC0wMDAwCkBAIC02Miw3ICs2Miw3IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHRkVNZXJnZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZH
RkVNZXJnZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6MzcgLTAwMDAKQEAg
LTQwLDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7DQogQGVuZA0KICovDQogDQotVmFs
dWUgU1ZHRkVNZXJnZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0DQorVmFsdWVJbXAgKlNWR0ZFTWVyZ2VFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdA0KIHsNCiAJS0RPTV9FTlRF
Ul9TQUZFDQogDQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFTWVyZ2VFbGVt
ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdGRU1lcmdlRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRkVNZXJnZUVsZW1lbnQuaAk5
IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VFbGVt
ZW50LmgJOCBBdWcgMjAwNSAwODoyNDozNyAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3Bh
Y2UgS1NWRw0KIAkJS0RPTV9HRVQNCiAJCUtET01fRk9SV0FSRFBVVA0KIA0KLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Ow0KKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsNCiAJfTsNCiB9Ow0KIA0KSW5kZXg6IGtzdmcyL2RvbS9TVkdG
RU1lcmdlTm9kZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVNZXJnZU5vZGVFbGVt
ZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAJOSBKdWwgMjAw
NSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRU1lcmdlTm9kZUVsZW1lbnQu
Y3BwCTggQXVnIDIwMDUgMDg6MjQ6MzcgLTAwMDAKQEAgLTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCQpJbmRleDoga3N2ZzIv
ZG9tL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VOb2Rl
RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgJOSBKdWwgMjAw
NSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRU1lcmdlTm9kZUVsZW1lbnQu
aAk4IEF1ZyAyMDA1IDA4OjI0OjM3IC0wMDAwCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZFT2Zmc2V0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20v
U1ZHRkVPZmZzZXRFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDozNyAtMDAw
MApAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZh
bHVlIFNWR0ZFT2Zmc2V0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdGRU9mZnNldEVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRU9mZnNldEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVPZmZzZXRFbGVt
ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdGRU9mZnNldEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0ZFT2Zmc2V0RWxlbWVudC5o
CTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVPZmZzZXRF
bGVtZW50LmgJOCBBdWcgMjAwNSAwODoyNDozNyAtMDAwMApAQCAtNjAsNyArNjAsNyBAQCBuYW1l
c3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRVRpbGVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHRkVUaWxlRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRVRpbGVFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9t
L1NWR0ZFVGlsZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHRkVUaWxlRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDozNyAtMDAwMApA
QCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsNCiBAZW5kDQogKi8NCiANCi1W
YWx1ZSBTVkdGRVRpbGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdA0KK1ZhbHVlSW1wICpTVkdGRVRpbGVFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdA0KIHsNCiAJS0RPTV9FTlRF
Ul9TQUZFDQogDQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFVGlsZUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVUaWxlRWxlbWVu
dC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHRkVUaWxlRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRkVUaWxlRWxlbWVudC5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVUaWxlRWxlbWVudC5o
CTggQXVnIDIwMDUgMDg6MjQ6MzcgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEtT
VkcNCiAJCUtET01fR0VUDQogCQlLRE9NX0ZPUldBUkRQVVQNCiANCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsNCisJ
CUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7DQogCX07DQogfTsNCiANCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
Y3BwCTggQXVnIDIwMDUgMDg6MjQ6MzcgLTAwMDAKQEAgLTUxLDcgKzUxLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcy
L2RvbS9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAk5IEp1
bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjM3IC0wMDAwCkBAIC02Miw3ICs2Miw3IEBAIG5hbWVz
cGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZpbHRlckVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcy
L2RvbS9TVkdGaWx0ZXJFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZpbHRlckVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20v
U1ZHRmlsdGVyRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdGaWx0ZXJFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjM3IC0wMDAwCkBA
IC02MSw3ICs2MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9Q
Uk9UT1RZUEUoIlNWR0ZpbHRlckVsZW1lbnQiLCBTVkdGaWx0ZXJFbGVtZW50UHJvdG8sIFNWR0Zp
bHRlckVsZW1lbnRQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR0ZpbHRlckVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZH
RmlsdGVyRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtOTEsMTcgKzkxLDE3IEBAIFZhbHVl
IFNWR0ZpbHRlckVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkKIAlyZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CiAKLVZhbHVlIFNWR0ZpbHRlckVsZW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHRmls
dGVyRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLQlTVkdGaWx0ZXJFbGVtZW50IG9iaihjYXN0KGV4
ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7CisJU1ZH
RmlsdGVyRWxlbWVudCBvYmooY2FzdChleGVjLCB0aGlzT2JqKSk7CiAJS0RPTV9FTlRFUl9TQUZF
CiAKIAlzd2l0Y2goaWQpCiAJewogCQljYXNlIFNWR0ZpbHRlckVsZW1lbnRDb25zdGFudHM6OlNl
dEZpbHRlclJlczoKIAkJewotCQkJdW5zaWduZWQgbG9uZyBmaWx0ZXJSZXNYID0gYXJnc1swXS50
b1VJbnQzMihleGVjKTs7Ci0JCQl1bnNpZ25lZCBsb25nIGZpbHRlclJlc1kgPSBhcmdzWzFdLnRv
VUludDMyKGV4ZWMpOzsKKwkJCXVuc2lnbmVkIGxvbmcgZmlsdGVyUmVzWCA9IGFyZ3NbMF0tPnRv
VUludDMyKGV4ZWMpOzsKKwkJCXVuc2lnbmVkIGxvbmcgZmlsdGVyUmVzWSA9IGFyZ3NbMV0tPnRv
VUludDMyKGV4ZWMpOzsKIAkJCW9iai5zZXRGaWx0ZXJSZXMoZmlsdGVyUmVzWCwgZmlsdGVyUmVz
WSk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KSW5kZXg6IGtzdmcyL2RvbS9TVkdGaWx0
ZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR0ZpbHRlckVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZpbHRlckVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NW
R0ZpbHRlckVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIv
ZG9tL1NWR0ZpbHRlckVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjM3IC0wMDAwCkBAIC03Niw3
ICs3Niw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIv
ZG9tL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
Y3BwCi0tLSBrc3ZnMi9kb20vU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJOCBBdWcgMjAwNSAwODoyNDozOCAtMDAwMApA
QCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVl
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAotLS0g
a3N2ZzIvZG9tL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCTkgSnVsIDIw
MDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmgJOCBBdWcgMjAwNSAwODoyNDozOCAtMDAwMApAQCAtNjAsNyArNjAs
NyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtE
T01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4
OiBrc3ZnMi9kb20vU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRml0VG9WaWV3Qm94LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZpdFRvVmlld0Jv
eC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGaXRUb1ZpZXdCb3guY3BwCTkgSnVsIDIwMDUgMDY6NTQ6
NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRml0VG9WaWV3Qm94LmNwcAk4IEF1ZyAyMDA1
IDA4OjI0OjM4IC0wMDAwCkBAIC0zOCw3ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwog
QGVuZAogKi8KIAotVmFsdWUgU1ZHRml0VG9WaWV3Qm94OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpdFRvVmlld0JveDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlL
RE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZpdFRvVmlld0JveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGaXRUb1Zp
ZXdCb3guaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR0ZpdFRvVmlld0JveC5oCi0tLSBrc3ZnMi9kb20vU1ZHRml0VG9WaWV3Qm94LmgJOSBK
dWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGaXRUb1ZpZXdCb3gu
aAk4IEF1ZyAyMDA1IDA4OjI0OjM4IC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VU
CiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3Zn
Mi9kb20vU1ZHR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdHRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdHRWxlbWVudC5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdHRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdHRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDozOCAtMDAwMApAQCAtMzYsNyAr
MzYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0dFbGVt
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKlNWR0dFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHR0VsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga3N2ZzIvZG9tL1NWR0dFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdHRWxlbWVu
dC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHR0VsZW1l
bnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjM4IC0wMDAwCkBAIC01OCw3ICs1OCw3IEBAIG5hbWVzcGFj
ZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0dyYWRpZW50RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIv
ZG9tL1NWR0dyYWRpZW50RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9k
b20vU1ZHR3JhZGllbnRFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR0dyYWRpZW50RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDozOCAt
MDAwMApAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAK
LVZhbHVlIFNWR0dyYWRpZW50RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdHcmFkaWVudEVsZW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9F
TlRFUl9TQUZFCiAJCkluZGV4OiBrc3ZnMi9kb20vU1ZHR3JhZGllbnRFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0dyYWRpZW50
RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHR3JhZGllbnRFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdHcmFkaWVudEVsZW1l
bnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0dyYWRp
ZW50RWxlbWVudC5oCTggQXVnIDIwMDUgMDg6MjQ6MzggLTAwMDAKQEAgLTYxLDcgKzYxLDcgQEAg
bmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHSW1h
Z2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHSW1hZ2VFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ltYWdlRWxlbWVudC5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdJbWFnZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHSW1hZ2VFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjM4IC0wMDAwCkBA
IC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUg
U1ZHSW1hZ2VFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0ltYWdlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR0ltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdJbWFnZUVsZW1lbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ltYWdlRWxlbWVu
dC5oCi0tLSBrc3ZnMi9kb20vU1ZHSW1hZ2VFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MyAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdJbWFnZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0
OjM4IC0wMDAwCkBAIC03Miw3ICs3Miw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJ
CUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9Owog
fTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0xhbmdTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xhbmdTcGFjZS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdMYW5nU3Bh
Y2UuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHTGFuZ1NwYWNlLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0xhbmdTcGFjZS5jcHAJOCBBdWcgMjAwNSAwODoy
NDozOCAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQK
ICovCiAKLVZhbHVlIFNWR0xhbmdTcGFjZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdMYW5nU3BhY2U6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9T
QUZFCiAKQEAgLTYwLDcgKzYwLDcgQEAgVmFsdWUgU1ZHTGFuZ1NwYWNlOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdMYW5nU3BhY2U6OnB1
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2
YWx1ZSwgaW50KQordm9pZCBTVkdMYW5nU3BhY2U6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJf
U0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHTGFuZ1NwYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xhbmdTcGFjZS5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTGFuZ1NwYWNl
LmgKLS0tIGtzdmcyL2RvbS9TVkdMYW5nU3BhY2UuaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR0xhbmdTcGFjZS5oCTggQXVnIDIwMDUgMDg6MjQ6MzggLTAw
MDAKQEAgLTYyLDggKzYyLDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9CQVNFQ0xBU1NfR0VU
CiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGlu
dCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdMZW5ndGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdMZW5ndGguY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTGVu
Z3RoLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0xlbmd0aC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdMZW5ndGguY3BwCTggQXVnIDIwMDUgMDg6MjQ6Mzkg
LTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1Q
TEVNRU5UX1BST1RPVFlQRSgiU1ZHTGVuZ3RoIiwgU1ZHTGVuZ3RoUHJvdG8sIFNWR0xlbmd0aFBy
b3RvRnVuYykKIAotVmFsdWUgU1ZHTGVuZ3RoOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0xlbmd0aDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NB
RkUKIApAQCAtNzYsMjAgKzc2LDIwIEBAIFZhbHVlIFNWR0xlbmd0aDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3QKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHTGVuZ3RoOjpwdXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFs
dWUsIGludCkKK3ZvaWQgU1ZHTGVuZ3RoOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IAkKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR0xlbmd0aENvbnN0YW50czo6VmFsdWU6
Ci0JCQlzZXRWYWx1ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRWYWx1ZSh2YWx1ZS0+
dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCWNhc2UgU1ZHTGVuZ3RoQ29uc3RhbnRzOjpW
YWx1ZUFzU3RyaW5nOgogCQkJc2V0VmFsdWVBc1N0cmluZyhLRE9NOjp0b0RPTVN0cmluZyhleGVj
LCB2YWx1ZSkpOwogCQkJYnJlYWs7CiAJCWNhc2UgU1ZHTGVuZ3RoQ29uc3RhbnRzOjpWYWx1ZUlu
U3BlY2lmaWVkVW5pdHM6Ci0JCQlzZXRWYWx1ZUluU3BlY2lmaWVkVW5pdHModmFsdWUudG9OdW1i
ZXIoZXhlYykpOworCQkJc2V0VmFsdWVJblNwZWNpZmllZFVuaXRzKHZhbHVlLT50b051bWJlcihl
eGVjKSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWtkV2FybmluZygpIDw8ICJVbmhhbmRs
ZWQgdG9rZW4gaW4gIiA8PCBrX2Z1bmNpbmZvIDw8ICIgOiAiIDw8IHRva2VuIDw8IGVuZGw7CkBA
IC05OCw3ICs5OCw3IEBAIHZvaWQgU1ZHTGVuZ3RoOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEK
IAlLRE9NX0xFQVZFX1NBRkUoS0RPTTo6RE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBTVkdMZW5n
dGhQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHTGVuZ3RoUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01f
Q0hFQ0tfVEhJUyhTVkdMZW5ndGgpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC0xMDcsMTQgKzEwNywx
NCBAQCBWYWx1ZSBTVkdMZW5ndGhQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlCiAJewogCQljYXNl
IFNWR0xlbmd0aENvbnN0YW50czo6TmV3VmFsdWVTcGVjaWZpZWRVbml0czoKIAkJewotCQkJdW5z
aWduZWQgc2hvcnQgdW5pdFR5cGUgPSBhcmdzWzBdLnRvVUludDE2KGV4ZWMpOwotCQkJZmxvYXQg
dmFsdWVJblNwZWNpZmllZFVuaXRzID0gYXJnc1sxXS50b051bWJlcihleGVjKTsKKwkJCXVuc2ln
bmVkIHNob3J0IHVuaXRUeXBlID0gYXJnc1swXS0+dG9VSW50MTYoZXhlYyk7CisJCQlmbG9hdCB2
YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKIAkJCW9iai5u
ZXdWYWx1ZVNwZWNpZmllZFVuaXRzKHVuaXRUeXBlLCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMpOwog
CQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWNhc2UgU1ZHTGVuZ3RoQ29uc3RhbnRzOjpD
b252ZXJ0VG9TcGVjaWZpZWRVbml0czoKIAkJewotCQkJdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUg
PSBhcmdzWzBdLnRvVUludDE2KGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUgPSBh
cmdzWzBdLT50b1VJbnQxNihleGVjKTsKIAkJCW9iai5jb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1
bml0VHlwZSk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KSW5kZXg6IGtzdmcyL2RvbS9T
VkdMZW5ndGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHTGVuZ3RoLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdMZW5ndGguaAotLS0ga3N2ZzIvZG9tL1NWR0xlbmd0aC5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTGVuZ3RoLmgJOCBBdWcg
MjAwNSAwODoyNDozOSAtMDAwMApAQCAtNzEsOCArNzEsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlL
RE9NX1BVVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2
YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0xlbmd0aExpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdM
ZW5ndGhMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR0xlbmd0aExpc3QuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHTGVuZ3RoTGlzdC5j
cHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdMZW5ndGhM
aXN0LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjM5IC0wMDAwCkBAIC01Niw3ICs1Niw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR0xlbmd0aExp
c3QiLCBTVkdMZW5ndGhMaXN0UHJvdG8sIFNWR0xlbmd0aExpc3RQcm90b0Z1bmMpCiAKLVZhbHVl
IFNWR0xlbmd0aExpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGVuZ3RoTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAt
NzIsNyArNzIsNyBAQCBWYWx1ZSBTVkdMZW5ndGhMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4CiAJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdMZW5ndGhMaXN0UHJvdG9GdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQor
VmFsdWVJbXAgKlNWR0xlbmd0aExpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElT
KFNWR0xlbmd0aExpc3QpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC05MSwyNCArOTEsMjQgQEAgVmFs
dWUgU1ZHTGVuZ3RoTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjUwogCQl9CiAJCWNhc2UgU1ZHTGVu
Z3RoTGlzdENvbnN0YW50czo6R2V0SXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9
IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sw
XS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdMZW5ndGg+
KGV4ZWMsIG9iai5nZXRJdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdMZW5ndGhMaXN0Q29u
c3RhbnRzOjpJbnNlcnRJdGVtQmVmb3JlOgogCQl7CiAJCQlTVkdMZW5ndGggbmV3SXRlbSA9IEtE
T006OmVjbWFfY2FzdDxTVkdMZW5ndGg+KGV4ZWMsIGFyZ3NbMF0sICZ0b1NWR0xlbmd0aCk7Ci0J
CQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2ln
bmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9N
OjpzYWZlX2NhY2hlPFNWR0xlbmd0aD4oZXhlYywgb2JqLmluc2VydEl0ZW1CZWZvcmUobmV3SXRl
bSwgaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR0xlbmd0aExpc3RDb25zdGFudHM6OlJlcGxhY2VJ
dGVtOgogCQl7CiAJCQlTVkdMZW5ndGggbmV3SXRlbSA9IEtET006OmVjbWFfY2FzdDxTVkdMZW5n
dGg+KGV4ZWMsIGFyZ3NbMF0sICZ0b1NWR0xlbmd0aCk7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4
ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdz
WzFdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR0xlbmd0
aD4oZXhlYywgb2JqLnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJY2FzZSBT
VkdMZW5ndGhMaXN0Q29uc3RhbnRzOjpSZW1vdmVJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25n
IGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXgg
PSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNW
R0xlbmd0aD4oZXhlYywgb2JqLnJlbW92ZUl0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR0xl
bmd0aExpc3RDb25zdGFudHM6OkFwcGVuZEl0ZW06CkluZGV4OiBrc3ZnMi9kb20vU1ZHTGVuZ3Ro
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdMZW5ndGhMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdMZW5ndGhMaXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdMZW5ndGhMaXN0
LmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdMZW5ndGhM
aXN0LmgJOCBBdWcgMjAwNSAwODoyNDozOSAtMDAwMApAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3Bh
Y2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNT
X0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a3N2ZzIvZG9tL1NWR0xpbmVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTGluZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTGluZUVsZW1lbnQuY3Bw
Ci0tLSBrc3ZnMi9kb20vU1ZHTGluZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAw
MDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTGluZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6
MzkgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAq
LwogCi1WYWx1ZSBTVkdMaW5lRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdMaW5lRWxlbWVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0xpbmVFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xpbmVFbGVtZW50Lmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdMaW5l
RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHTGluZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0
OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0xpbmVFbGVtZW50LmgJOCBBdWcgMjAwNSAw
ODoyNDozOSAtMDAwMApAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dF
VAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdMaW5l
YXJHcmFkaWVudEVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrc3ZnMi9kb20vU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAotLS0ga3N2ZzIv
ZG9tL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCTggQXVnIDIw
MDUgMDg6MjQ6MzkgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7
CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGlu
ZWFyR3JhZGllbnRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCQpJbmRleDoga3N2ZzIvZG9tL1NW
R0xpbmVhckdyYWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0xpbmVhckdyYWRp
ZW50RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgJOSBK
dWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjM5IC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5h
bWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0xvY2F0
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIv
ZG9tL1NWR0xvY2F0YWJsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2RvbS9TVkdMb2NhdGFibGUuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHTG9jYXRh
YmxlLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0xv
Y2F0YWJsZS5jcHAJOCBBdWcgMjAwNSAwODoyNDozOSAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCB1
c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdMb2Nh
dGFibGUiLCBTVkdMb2NhdGFibGVQcm90bywgU1ZHTG9jYXRhYmxlUHJvdG9GdW5jKQogCi1WYWx1
ZSBTVkdMb2NhdGFibGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHTG9jYXRhYmxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03
MSw5ICs3MSw5IEBAIFZhbHVlIFNWR0xvY2F0YWJsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAly
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR0xvY2F0YWJsZVByb3RvRnVuYzo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1Zh
bHVlSW1wICpTVkdMb2NhdGFibGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0JU1ZHTG9jYXRhYmxlIG9iaihj
YXN0KGV4ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7
CisJU1ZHTG9jYXRhYmxlIG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlLRE9NX0VOVEVSX1NB
RkUKIAogCXN3aXRjaChpZCkKSW5kZXg6IGtzdmcyL2RvbS9TVkdMb2NhdGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTG9jYXRhYmxl
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdMb2NhdGFibGUuaAotLS0ga3N2ZzIvZG9tL1NWR0xvY2F0YWJsZS5oCTkgSnVsIDIwMDUgMDY6
NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTG9jYXRhYmxlLmgJOCBBdWcgMjAwNSAw
ODoyNDozOSAtMDAwMApAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzog
Ly8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR01hcmtl
ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdNYXJrZXJFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR01hcmtlckVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9k
b20vU1ZHTWFya2VyRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdNYXJrZXJFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjM5IC0wMDAw
CkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVO
VF9QUk9UT1RZUEUoIlNWR01hcmtlckVsZW1lbnQiLCBTVkdNYXJrZXJFbGVtZW50UHJvdG8sIFNW
R01hcmtlckVsZW1lbnRQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR01hcmtlckVsZW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
U1ZHTWFya2VyRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAkKQEAgLTczLDkgKzczLDkgQEAgVmFs
dWUgU1ZHTWFya2VyRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eQogCXJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotVmFsdWUgU1ZHTWFya2VyRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdN
YXJrZXJFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotCVNWR01hcmtlckVsZW1lbnQgb2JqKGNhc3Qo
ZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsKKwlT
VkdNYXJrZXJFbGVtZW50IG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlLRE9NX0VOVEVSX1NB
RkUKIAogCXN3aXRjaChpZCkKSW5kZXg6IGtzdmcyL2RvbS9TVkdNYXJrZXJFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR01hcmtl
ckVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR01hcmtlckVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR01hcmtlckVsZW1lbnQu
aAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR01hcmtlckVs
ZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjM5IC0wMDAwCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVz
cGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR01hdHJpeC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R01hdHJpeC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdNYXRyaXguY3BwCi0tLSBrc3ZnMi9kb20vU1ZHTWF0cml4LmNwcAk5IEp1bCAy
MDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR01hdHJpeC5jcHAJOCBBdWcg
MjAwNSAwODoyNDo0MCAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NW
RzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdNYXRyaXgiLCBTVkdNYXRyaXhQcm90
bywgU1ZHTWF0cml4UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdNYXRyaXg6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHTWF0cml4
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewog
CUtET01fRU5URVJfU0FGRQogCkBAIC04NCw3ICs4NCw3IEBAIFZhbHVlIFNWR01hdHJpeDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3QKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZH
TWF0cml4OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHTWF0cml4OjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApAQCAtOTIsMzIgKzkyLDMyIEBAIHZvaWQgU1ZHTWF0cml4OjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGEKIAl7CiAJCWNhc2UgU1ZHTWF0cml4Q29uc3RhbnRzOjpBOgogCQl7
Ci0JCQlzZXRBKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldEEodmFsdWUtPnRvTnVtYmVy
KGV4ZWMpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgU1ZHTWF0cml4Q29uc3RhbnRzOjpCOgog
CQl7Ci0JCQlzZXRCKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldEIodmFsdWUtPnRvTnVt
YmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgU1ZHTWF0cml4Q29uc3RhbnRzOjpD
OgogCQl7Ci0JCQlzZXRDKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldEModmFsdWUtPnRv
TnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgU1ZHTWF0cml4Q29uc3RhbnRz
OjpEOgogCQl7Ci0JCQlzZXREKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldEQodmFsdWUt
PnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgU1ZHTWF0cml4Q29uc3Rh
bnRzOjpFOgogCQl7Ci0JCQlzZXRFKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldEUodmFs
dWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgU1ZHTWF0cml4Q29u
c3RhbnRzOjpGOgogCQl7Ci0JCQlzZXRGKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldEYo
dmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWRlZmF1bHQ6CkBAIC0x
MjcsNyArMTI3LDcgQEAgdm9pZCBTVkdNYXRyaXg6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YQog
CUtET01fTEVBVkVfU0FGRShLRE9NOjpET01FeGNlcHRpb24pCiB9CiAKLVZhbHVlIFNWR01hdHJp
eFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdNYXRyaXhQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9D
SEVDS19USElTKFNWR01hdHJpeCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTEzOCw4ICsxMzgsOCBA
QCBWYWx1ZSBTVkdNYXRyaXhQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlCiAJCQlyZXR1cm4gS0RP
TTo6c2FmZV9jYWNoZTxTVkdNYXRyaXg+KGV4ZWMsIG9iai5pbnZlcnNlKCkpOwogCQljYXNlIFNW
R01hdHJpeENvbnN0YW50czo6VHJhbnNsYXRlOgogCQl7Ci0JCQlkb3VibGUgeCA9IGFyZ3NbMF0u
dG9OdW1iZXIoZXhlYyk7Ci0JCQlkb3VibGUgeSA9IGFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7CisJ
CQlkb3VibGUgeCA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHkgPSBhcmdz
WzFdLT50b051bWJlcihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR01hdHJp
eD4oZXhlYywgb2JqLnRyYW5zbGF0ZSh4LCB5KSk7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25z
dGFudHM6Ok11bHRpcGx5OgpAQCAtMTQ5LDI0ICsxNDksMjQgQEAgVmFsdWUgU1ZHTWF0cml4UHJv
dG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZQogCQl9CiAJCWNhc2UgU1ZHTWF0cml4Q29uc3RhbnRzOjpT
Y2FsZToKIAkJewotCQkJZG91YmxlIHNjYWxlRmFjdG9yID0gYXJnc1swXS50b051bWJlcihleGVj
KTsKKwkJCWRvdWJsZSBzY2FsZUZhY3RvciA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJ
cmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTWF0cml4PihleGVjLCBvYmouc2NhbGUoc2NhbGVG
YWN0b3IpKTsKIAkJfQogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6Um90YXRlOgogCQl7Ci0J
CQlkb3VibGUgYW5nbGUgPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIGFuZ2xl
ID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxT
VkdNYXRyaXg+KGV4ZWMsIG9iai5yb3RhdGUoYW5nbGUpKTsKIAkJfQogCQljYXNlIFNWR01hdHJp
eENvbnN0YW50czo6Um90YXRlRnJvbVZlY3RvcjoKIAkJewotCQkJZG91YmxlIHggPSBhcmdzWzBd
LnRvTnVtYmVyKGV4ZWMpOwotCQkJZG91YmxlIHkgPSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOwor
CQkJZG91YmxlIHggPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSB5ID0gYXJn
c1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdNYXRy
aXg+KGV4ZWMsIG9iai5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpKTsKIAkJfQogCQljYXNlIFNWR01h
dHJpeENvbnN0YW50czo6U2NhbGVOb25Vbmlmb3JtOgogCQl7Ci0JCQlkb3VibGUgc2NhbGVGYWN0
b3JYID0gYXJnc1swXS50b051bWJlcihleGVjKTsKLQkJCWRvdWJsZSBzY2FsZUZhY3RvclkgPSBh
cmdzWzFdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHNjYWxlRmFjdG9yWCA9IGFyZ3NbMF0t
PnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHNjYWxlRmFjdG9yWSA9IGFyZ3NbMV0tPnRvTnVt
YmVyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTWF0cml4PihleGVjLCBv
Ymouc2NhbGVOb25Vbmlmb3JtKHNjYWxlRmFjdG9yWCwgc2NhbGVGYWN0b3JZKSk7CiAJCX0KIAkJ
Y2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OkZsaXBYOgpAQCAtMTc1LDEyICsxNzUsMTIgQEAgVmFs
dWUgU1ZHTWF0cml4UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZQogCQkJcmV0dXJuIEtET006OnNh
ZmVfY2FjaGU8U1ZHTWF0cml4PihleGVjLCBvYmouZmxpcFkoKSk7CiAJCWNhc2UgU1ZHTWF0cml4
Q29uc3RhbnRzOjpTa2V3WDoKIAkJewotCQkJZG91YmxlIGFuZ2xlID0gYXJnc1swXS50b051bWJl
cihleGVjKTsKKwkJCWRvdWJsZSBhbmdsZSA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJ
cmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTWF0cml4PihleGVjLCBvYmouc2tld1goYW5nbGUp
KTsKIAkJfQogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6U2tld1k6CiAJCXsKLQkJCWRvdWJs
ZSBhbmdsZSA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgYW5nbGUgPSBhcmdz
WzBdLT50b051bWJlcihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR01hdHJp
eD4oZXhlYywgb2JqLnNrZXdZKGFuZ2xlKSk7CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcy
L2RvbS9TVkdNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHTWF0cml4LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdNYXRyaXguaAotLS0ga3N2ZzIvZG9tL1NWR01hdHJpeC5o
CTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTWF0cml4LmgJ
OCBBdWcgMjAwNSAwODoyNDo0MCAtMDAwMApAQCAtODMsOCArODMsOCBAQCBuYW1lc3BhY2UgS1NW
RwogCQlLRE9NX1BVVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZh
bHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAq
dmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChTVkdNYXRyaXgpCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHTnVtYmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTnVtYmVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR051bWJlci5jcHAKLS0tIGtzdmcy
L2RvbS9TVkdOdW1iZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHTnVtYmVyLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQwIC0wMDAwCkBAIC00Miw3ICs0
Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHTnVtYmVy
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKlNWR051bWJlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTgsNyArNTgsNyBAQCBWYWx1
ZSBTVkdOdW1iZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0CiAJcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi12b2lkIFNWR051bWJlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR051bWJlcjo6cHV0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVl
LCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBTVkdO
dW1iZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXsKIAkJY2FzZSBTVkdOdW1iZXJDb25z
dGFudHM6OlZhbHVlOgogCQl7Ci0JCQlzZXRWYWx1ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJ
CQlzZXRWYWx1ZSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJZGVm
YXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdOdW1iZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTnVtYmVyLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdOdW1iZXIuaAotLS0ga3N2
ZzIvZG9tL1NWR051bWJlci5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHTnVtYmVyLmgJOCBBdWcgMjAwNSAwODoyNDo0MCAtMDAwMApAQCAtNTYsOCArNTYs
OCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX1BVVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZh
bHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJS0RPTV9ERUZJTkVf
Q0FTVChTVkdOdW1iZXIpCkluZGV4OiBrc3ZnMi9kb20vU1ZHTnVtYmVyTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR051bWJlckxp
c3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHTnVtYmVyTGlzdC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdOdW1iZXJMaXN0LmNwcAk5IEp1
bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR051bWJlckxpc3QuY3Bw
CTggQXVnIDIwMDUgMDg6MjQ6NDAgLTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHTnVtYmVyTGlzdCIsIFNW
R051bWJlckxpc3RQcm90bywgU1ZHTnVtYmVyTGlzdFByb3RvRnVuYykKIAotVmFsdWUgU1ZHTnVt
YmVyTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKK1ZhbHVlSW1wICpTVkdOdW1iZXJMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03MCw3ICs3
MCw3IEBAIFZhbHVlIFNWR051bWJlckxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR051bWJlckxpc3RQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUlt
cCAqU1ZHTnVtYmVyTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdElt
cCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoU1ZHTnVt
YmVyTGlzdCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTg5LDI0ICs4OSwyNCBAQCBWYWx1ZSBTVkdO
dW1iZXJMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTCiAJCX0KIAkJY2FzZSBTVkdOdW1iZXJMaXN0
Q29uc3RhbnRzOjpHZXRJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sw
XS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJ
bnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR051bWJlcj4oZXhlYywg
b2JqLmdldEl0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR051bWJlckxpc3RDb25zdGFudHM6
Okluc2VydEl0ZW1CZWZvcmU6CiAJCXsKIAkJCVNWR051bWJlciBuZXdJdGVtID0gS0RPTTo6ZWNt
YV9jYXN0PFNWR051bWJlcj4oZXhlYywgYXJnc1swXSwgJnRvU1ZHTnVtYmVyKTsKLQkJCXVuc2ln
bmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMV0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVf
Y2FjaGU8U1ZHTnVtYmVyPihleGVjLCBvYmouaW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRl
eCkpOwogCQl9CiAJCWNhc2UgU1ZHTnVtYmVyTGlzdENvbnN0YW50czo6UmVwbGFjZUl0ZW06CiAJ
CXsKIAkJCVNWR051bWJlciBuZXdJdGVtID0gS0RPTTo6ZWNtYV9jYXN0PFNWR051bWJlcj4oZXhl
YywgYXJnc1swXSwgJnRvU1ZHTnVtYmVyKTsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdz
WzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0tPnRv
VUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTnVtYmVyPihleGVj
LCBvYmoucmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR051bWJl
ckxpc3RDb25zdGFudHM6OlJlbW92ZUl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgg
PSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3Nb
MF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTnVtYmVy
PihleGVjLCBvYmoucmVtb3ZlSXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHTnVtYmVyTGlz
dENvbnN0YW50czo6QXBwZW5kSXRlbToKSW5kZXg6IGtzdmcyL2RvbS9TVkdOdW1iZXJMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR051
bWJlckxpc3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR051bWJlckxpc3QuaAotLS0ga3N2ZzIvZG9tL1NWR051bWJlckxpc3QuaAk5IEp1
bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR051bWJlckxpc3QuaAk4
IEF1ZyAyMDA1IDA4OjI0OjQwIC0wMDAwCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHUGFpbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdQYWludC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYWludC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYWludC5j
cHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYWludC5j
cHAJOCBBdWcgMjAwNSAwODoyNDo0MCAtMDAwMApAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdQYWludCIsIFNWR1Bh
aW50UHJvdG8sIFNWR1BhaW50UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdQYWludDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQ
YWludDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjEsNyArNjEsNyBAQCBWYWx1ZSBTVkdQYWludDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1
ZSBTVkdQYWludFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdQYWludFByb3RvRnVuYzo6Y2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsK
IAlLRE9NX0NIRUNLX1RISVMoU1ZHUGFpbnQpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03Niw3ICs3
Niw3IEBAIFZhbHVlIFNWR1BhaW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAKIAkJfQogCQlj
YXNlIFNWR1BhaW50Q29uc3RhbnRzOjpTZXRQYWludDoKIAkJewotCQkJdW5zaWduZWQgc2hvcnQg
cGFpbnRUeXBlID0gYXJnc1swXS50b1VJbnQxNihleGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IHBh
aW50VHlwZSA9IGFyZ3NbMF0tPnRvVUludDE2KGV4ZWMpOwogCQkJS0RPTTo6RE9NU3RyaW5nIHVy
aSA9IEtET006OnRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMV0pOwogCQkJS0RPTTo6RE9NU3RyaW5n
IHJnYlBhaW50ID0gS0RPTTo6dG9ET01TdHJpbmcoZXhlYywgYXJnc1syXSk7CiAJCQlLRE9NOjpE
T01TdHJpbmcgaWNjUGFpbnQgPSBLRE9NOjp0b0RPTVN0cmluZyhleGVjLCBhcmdzWzNdKTsKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdQYWludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYWludC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGFpbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1Bh
aW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYWlu
dC5oCTggQXVnIDIwMDUgMDg6MjQ6NDAgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNl
IEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlL
SlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9T
VkdQYXRoRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdQYXRoRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoRWxl
bWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQ
YXRoRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDo0MSAtMDAwMApAQCAtNzUsNyArNzUsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdQ
YXRoRWxlbWVudCIsIFNWR1BhdGhFbGVtZW50UHJvdG8sIFNWR1BhdGhFbGVtZW50UHJvdG9GdW5j
KQogCi1WYWx1ZSBTVkdQYXRoRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoRWxlbWVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIAkKQEAgLTkxLDkgKzkxLDkgQEAgVmFsdWUgU1ZHUGF0aEVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHUGF0aEVsZW1l
bnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHUGF0aEVsZW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0J
U1ZHUGF0aEVsZW1lbnQgb2JqKGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAg
Kj4odGhpc09iai5pbXAoKSkpKTsKKwlTVkdQYXRoRWxlbWVudCBvYmooY2FzdChleGVjLCB0aGlz
T2JqKSk7CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0Y2goaWQpCkBAIC0xMDEsNDcgKzEwMSw0
NyBAQCBWYWx1ZSBTVkdQYXRoRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjCiAJCWNhc2UgU1ZH
UGF0aEVsZW1lbnRDb25zdGFudHM6OkdldFRvdGFsTGVuZ3RoOgogCQkJcmV0dXJuIE51bWJlcihv
YmouZ2V0VG90YWxMZW5ndGgoKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6Okdl
dFBvaW50QXRMZW5ndGg6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQb2ludD4oZXhl
Yywgb2JqLmdldFBvaW50QXRMZW5ndGgoYXJnc1swXS50b051bWJlcihleGVjKSkpOworCQkJcmV0
dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUG9pbnQ+KGV4ZWMsIG9iai5nZXRQb2ludEF0TGVuZ3Ro
KGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFu
dHM6OkdldFBhdGhTZWdBdExlbmd0aDoKLQkJCXJldHVybiBOdW1iZXIob2JqLmdldFBhdGhTZWdB
dExlbmd0aChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gTnVtYmVyKG9iai5n
ZXRQYXRoU2VnQXRMZW5ndGgoYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQ
YXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0Nsb3NlUGF0aDoKIAkJCXJldHVy
biBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWc+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2Vn
Q2xvc2VQYXRoKCkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQ
YXRoU2VnTW92ZXRvQWJzOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ01v
dmV0b0Ficz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdNb3ZldG9BYnMoYXJnc1swXS50b051
bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNh
ZmVfY2FjaGU8U1ZHUGF0aFNlZ01vdmV0b0Ficz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdN
b3ZldG9BYnMoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMp
KSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdNb3Zl
dG9SZWw6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnTW92ZXRvUmVsPihl
eGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b1JlbChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMp
LCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxT
VkdQYXRoU2VnTW92ZXRvUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b1JlbChh
cmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2Fz
ZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0FiczoKLQkJ
CXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9BYnM+KGV4ZWMsIG9iai5j
cmVhdGVTVkdQYXRoU2VnTGluZXRvQWJzKGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0u
dG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdM
aW5ldG9BYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnTGluZXRvQWJzKGFyZ3NbMF0tPnRv
TnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhF
bGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnTGluZXRvUmVsOgotCQkJcmV0dXJuIEtE
T006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b1JlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1Bh
dGhTZWdMaW5ldG9SZWwoYXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJlcihl
eGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b1JlbD4o
ZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9SZWwoYXJnc1swXS0+dG9OdW1iZXIoZXhl
YyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25z
dGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6Ci0JCQlyZXR1cm4gS0RPTTo6
c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzPihleGVjLCBvYmouY3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY0FicyhhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRv
TnVtYmVyKGV4ZWMpLCBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLnRvTnVtYmVyKGV4
ZWMpLCBhcmdzWzRdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzVdLnRvTnVtYmVyKGV4ZWMpKSk7CisJ
CQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzPihleGVj
LCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyhhcmdzWzBdLT50b051bWJlcihl
eGVjKSwgYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpLCBh
cmdzWzNdLT50b051bWJlcihleGVjKSwgYXJnc1s0XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNV0t
PnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0
ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxT
VkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1JlbChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMp
LCBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzRd
LnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzVdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RP
TTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsPihleGVjLCBvYmouY3JlYXRl
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbChhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sx
XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLT50b051
bWJlcihleGVjKSwgYXJnc1s0XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNV0tPnRvTnVtYmVyKGV4
ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljQWJzOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY0FicyhhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMp
LCBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQly
ZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficz4oZXhl
Yywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKGFyZ3NbMF0tPnRvTnVt
YmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhl
YyksIGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25z
dGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOgotCQkJcmV0dXJuIEtE
T006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw+KGV4ZWMsIG9iai5j
cmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMp
LCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNd
LnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1JlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljUmVsKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVj
KSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJ
CWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdBcmNBYnM6Ci0J
CQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQXJjQWJzPihleGVjLCBvYmouY3Jl
YXRlU1ZHUGF0aFNlZ0FyY0FicyhhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVt
YmVyKGV4ZWMpLCBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMp
LCBhcmdzWzRdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzVdLnRvQm9vbGVhbihleGVjKSwgYXJnc1s2
XS50b0Jvb2xlYW4oZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhT
ZWdBcmNBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQXJjQWJzKGFyZ3NbMF0tPnRvTnVt
YmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhl
YyksIGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzRdLT50b051bWJlcihleGVjKSwgYXJn
c1s1XS0+dG9Cb29sZWFuKGV4ZWMpLCBhcmdzWzZdLT50b0Jvb2xlYW4oZXhlYykpKTsKIAkJY2Fz
ZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbDoKLQkJCXJl
dHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdBcmNSZWw+KGV4ZWMsIG9iai5jcmVhdGVT
VkdQYXRoU2VnQXJjUmVsKGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIo
ZXhlYyksIGFyZ3NbMl0udG9OdW1iZXIoZXhlYyksIGFyZ3NbM10udG9OdW1iZXIoZXhlYyksIGFy
Z3NbNF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbNV0udG9Cb29sZWFuKGV4ZWMpLCBhcmdzWzZdLnRv
Qm9vbGVhbihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0Fy
Y1JlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdBcmNSZWwoYXJnc1swXS0+dG9OdW1iZXIo
ZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLT50b051bWJlcihleGVjKSwg
YXJnc1szXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzVd
LT50b0Jvb2xlYW4oZXhlYyksIGFyZ3NbNl0tPnRvQm9vbGVhbihleGVjKSkpOwogCQljYXNlIFNW
R1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFi
czoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFs
QWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMoYXJnc1sw
XS50b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9y
aXpvbnRhbEFicyhhcmdzWzBdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVt
ZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDoKLQkJCXJl
dHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsPihleGVj
LCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwoYXJnc1swXS50b051bWJl
cihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWxSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJl
bChhcmdzWzBdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3Rh
bnRzOjpDcmVhdGVTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6Ci0JCQlyZXR1cm4gS0RPTTo6
c2FmZV9jYWNoZTxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM+KGV4ZWMsIG9iai5jcmVhdGVT
VkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMoYXJnc1swXS50b051bWJlcihleGVjKSkpOworCQkJ
cmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzPihleGVj
LCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKGFyZ3NbMF0tPnRvTnVtYmVy
KGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhT
ZWdMaW5ldG9WZXJ0aWNhbFJlbDoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhT
ZWdMaW5ldG9WZXJ0aWNhbFJlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0
aWNhbFJlbChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9j
YWNoZTxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRo
U2VnTGluZXRvVmVydGljYWxSZWwoYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2FzZSBT
VkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aEFiczoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJz
KGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0u
dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10udG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9N
OjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM+KGV4ZWMsIG9iai5j
cmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKGFyZ3NbMF0tPnRvTnVtYmVyKGV4
ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksIGFy
Z3NbM10tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6
OkNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6Ci0JCQlyZXR1cm4gS0RPTTo6
c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsPihleGVjLCBvYmouY3Jl
YXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMp
LCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNd
LnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1Ntb290aFJlbChhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9OdW1iZXIo
ZXhlYyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLT50b051bWJlcihleGVjKSkp
OwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1Ntb290aEFiczoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMoYXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50
b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1Ntb290aEFicyhhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9O
dW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9j
YWNoZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbD4oZXhlYywgb2JqLmNyZWF0
ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKGFyZ3NbMF0udG9OdW1iZXIoZXhl
YyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hl
PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsPihleGVjLCBvYmouY3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyks
IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWRlZmF1bHQ6CiAJCQlrZFdhcm5pbmcoKSA8
PCAiVW5oYW5kbGVkIGZ1bmN0aW9uIGlkIGluICIgPDwga19mdW5jaW5mbyA8PCAiIDogIiA8PCBp
ZCA8PCBlbmRsOwogCX0KSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoRWxlbWVu
dC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHUGF0aEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmgJOSBKdWwgMjAw
NSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoRWxlbWVudC5oCTggQXVn
IDIwMDUgMDg6MjQ6NDEgLTAwMDAKQEAgLTEwNyw3ICsxMDcsNyBAQCBuYW1lc3BhY2UgS1NWRwog
CQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZy5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdQYXRoU2VnLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWcuY3BwCTkgSnVsIDIwMDUgMDY6
NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZy5jcHAJOCBBdWcgMjAwNSAw
ODoyNDo0MSAtMDAwMApAQCAtMzUsNyArMzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBl
bmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWc6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWcuaAotLS0ga3N2ZzIvZG9t
L1NWR1BhdGhTZWcuaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9t
L1NWR1BhdGhTZWcuaAk4IEF1ZyAyMDA1IDA4OjI0OjQxIC0wMDAwCkBAIC01Niw3ICs1Niw3IEBA
IG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX0NBU1QKIAotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoU1ZH
UGF0aFNlZykKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnQXJjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0FyYy5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQ
YXRoU2VnQXJjLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0FyYy5jcHAJOCBBdWcg
MjAwNSAwODoyNDo0MSAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NW
RzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdBcmNBYnM6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQXJjQWJz
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dp
dGNoKHRva2VuKQogCXsKQEAgLTYyLDM4ICs2MiwzOCBAQCBWYWx1ZSBTVkdQYXRoU2VnQXJjQWJz
OjpnZXRWYWx1ZVByb3BlcnR5CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1Bh
dGhTZWdBcmNBYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnQXJjQWJzOjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGlu
dCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdBcmNDb25zdGFudHM6
Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+
dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0Nv
bnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZ
KHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRo
U2VnQXJjQ29uc3RhbnRzOjpSMToKIAkJewotCQkJc2V0UjEodmFsdWUudG9OdW1iZXIoZXhlYykp
OworCQkJc2V0UjEodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlj
YXNlIFNWR1BhdGhTZWdBcmNDb25zdGFudHM6OlIyOgogCQl7Ci0JCQlzZXRSMih2YWx1ZS50b051
bWJlcihleGVjKSk7CisJCQlzZXRSMih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJu
OwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6TGFyZ2VBcmNGbGFnOgogCQl7
Ci0JCQlzZXRMYXJnZUFyY0ZsYWcodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKwkJCXNldExhcmdl
QXJjRmxhZyh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNl
IFNWR1BhdGhTZWdBcmNDb25zdGFudHM6OlN3ZWVwRmxhZzoKIAkJewotCQkJc2V0U3dlZXBGbGFn
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisJCQlzZXRTd2VlcEZsYWcodmFsdWUtPnRvQm9vbGVh
bihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTI0OCw3ICsyNDgsNyBA
QCBib29sIFNWR1BhdGhTZWdBcmNBYnM6OnN3ZWVwRmxhZygpIGNvbnN0CiBAZW5kCiAqLwogCi1W
YWx1ZSBTVkdQYXRoU2VnQXJjUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0FyY1JlbDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBA
IC0yNzEsMzggKzI3MSwzOCBAQCBWYWx1ZSBTVkdQYXRoU2VnQXJjUmVsOjpnZXRWYWx1ZVByb3Bl
cnR5CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdBcmNSZWw6OnB1
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2
YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnQXJjUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2go
dG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdBcmNDb25zdGFudHM6Olg6CiAJCXsKLQkJCXNl
dFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykp
OwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6WToKIAkJ
ewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJl
cihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQXJjQ29uc3RhbnRz
OjpSMToKIAkJewotCQkJc2V0UjEodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0UjEodmFs
dWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdB
cmNDb25zdGFudHM6OlIyOgogCQl7Ci0JCQlzZXRSMih2YWx1ZS50b051bWJlcihleGVjKSk7CisJ
CQlzZXRSMih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2Ug
U1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6TGFyZ2VBcmNGbGFnOgogCQl7Ci0JCQlzZXRMYXJnZUFy
Y0ZsYWcodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKwkJCXNldExhcmdlQXJjRmxhZyh2YWx1ZS0+
dG9Cb29sZWFuKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdBcmND
b25zdGFudHM6OlN3ZWVwRmxhZzoKIAkJewotCQkJc2V0U3dlZXBGbGFnKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7CisJCQlzZXRTd2VlcEZsYWcodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7CiAJCQly
ZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnQXJjLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1Bh
dGhTZWdBcmMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR1BhdGhTZWdBcmMuaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuaAk5IEp1
bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuaAk4
IEF1ZyAyMDA1IDA4OjI0OjQxIC0wMDAwCkBAIC02OSw4ICs2OSw4IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1
ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZh
bHVlLCBpbnQgYXR0cik7CiAJfTsKIAogCWNsYXNzIFNWR1BhdGhTZWdBcmNSZWxJbXBsOwpAQCAt
MTE1LDggKzExNSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpYy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWMuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5jcHAJOCBBdWcgMjAwNSAwODoyNDo0MSAtMDAwMApA
QCAtMzgsNyArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVl
IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNo
KHRva2VuKQogCXsKQEAgLTYxLDM4ICs2MSwzOCBAQCBWYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1
YmljQWJzOjpnZXRWYWx1CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNBYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1
YmljQWJzOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1
ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNDb25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1iZXIo
ZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9
CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WToKIAkJewotCQkJc2V0
WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7
CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29uc3RhbnRz
OjpYMToKIAkJewotCQkJc2V0WDEodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WDEodmFs
dWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNDb25zdGFudHM6OlkxOgogCQl7Ci0JCQlzZXRZMSh2YWx1ZS50b051bWJlcihl
eGVjKSk7CisJCQlzZXRZMSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9
CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WDI6CiAJCXsKLQkJCXNl
dFgyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgyKHZhbHVlLT50b051bWJlcihleGVj
KSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29uc3Rh
bnRzOjpZMjoKIAkJewotCQkJc2V0WTIodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WTIo
dmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpAQCAt
MjMyLDcgKzIzMiw3IEBAIGZsb2F0IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OnkyKCkgY28K
IEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTI1NSwzOCArMjU1LDM4IEBAIFZhbHVl
IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OmdldFZhbHUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6cHV0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lk
IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0b2tlbikK
IAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WDoKIAkJewotCQkJ
c2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVj
KSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29uc3Rh
bnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFs
dWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNDb25zdGFudHM6OlgxOgogCQl7Ci0JCQlzZXRYMSh2YWx1ZS50b051bWJlcihl
eGVjKSk7CisJCQlzZXRYMSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9
CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WTE6CiAJCXsKLQkJCXNl
dFkxKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkxKHZhbHVlLT50b051bWJlcihleGVj
KSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29uc3Rh
bnRzOjpYMjoKIAkJewotCQkJc2V0WDIodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WDIo
dmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNDb25zdGFudHM6OlkyOgogCQl7Ci0JCQlzZXRZMih2YWx1ZS50b051bWJl
cihleGVjKSk7CisJCQlzZXRZMih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwog
CQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQ
YXRoU2VnQ3VydmV0b0N1YmljLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgKLS0tIGtzdmcyL2RvbS9T
VkdQYXRoU2VnQ3VydmV0b0N1YmljLmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgJOCBBdWcgMjAwNSAwODoyNDo0MSAt
MDAwMApAQCAtNjYsOCArNjYsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9N
X1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07
CiAKIAljbGFzcyBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsSW1wbDsKQEAgLTEwOSw4ICsxMDks
OCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3Zn
Mi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGguY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguY3BwCTggQXVnIDIw
MDUgMDg6MjQ6NDIgLTAwMDAKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7
CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC01NSwyOCArNTUs
MjggQEAgVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6ZwogCXJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAm
dmFsdWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6cHV0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBp
bnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
U21vb3RoQ29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsK
KwkJCXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNl
IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhDb25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFko
dmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwog
CQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aENvbnN0
YW50czo6WDI6CiAJCXsKLQkJCXNldFgyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgy
KHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRo
U2VnQ3VydmV0b0N1YmljU21vb3RoQ29uc3RhbnRzOjpZMjoKIAkJewotCQkJc2V0WTIodmFsdWUu
dG9OdW1iZXIoZXhlYykpOworCQkJc2V0WTIodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJl
dHVybjsKIAkJfQogCQlkZWZhdWx0OgpAQCAtMTg2LDcgKzE4Niw3IEBAIGZsb2F0IFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OnkKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNo
KHRva2VuKQogCXsKQEAgLTIwNSwyOCArMjA1LDI4IEBAIFZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhSZWw6OmcKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0b2tlbikKIAl7CiAJ
CWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aENvbnN0YW50czo6WDoKIAkJewotCQkJ
c2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVj
KSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3Ro
Q29uc3RhbnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNl
dFkodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhDb25zdGFudHM6OlgyOgogCQl7Ci0JCQlzZXRYMih2YWx1
ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYMih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJ
cmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aENvbnN0YW50
czo6WTI6CiAJCXsKLQkJCXNldFkyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkyKHZh
bHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6
IGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNTbW9vdGguaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguaAotLS0ga3N2ZzIvZG9tL1NWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguaAk4IEF1ZyAyMDA1IDA4
OjI0OjQyIC0wMDAwCkBAIC02MCw4ICs2MCw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VU
CiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGlu
dCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cik7CiAJfTsKIAogCWNsYXNzIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWxJbXBsOwpA
QCAtOTcsOCArOTcsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9Owog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpYy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5jcHAJOCBBdWcg
MjAwNSAwODoyNDo0MiAtMDAwMApAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NW
RzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUsMjggKzU1LDI4
IEBAIFZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpnZXQKIAlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1
ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6cHV0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7
CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Nv
bnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRY
KHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY0NvbnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051
bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47
CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0NvbnN0YW50czo6WDE6CiAJ
CXsKLQkJCXNldFgxKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgxKHZhbHVlLT50b051
bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY0NvbnN0YW50czo6WTE6CiAJCXsKLQkJCXNldFkxKHZhbHVlLnRvTnVtYmVyKGV4ZWMp
KTsKKwkJCXNldFkxKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJ
ZGVmYXVsdDoKQEAgLTE4Niw3ICsxODYsNyBAQCBmbG9hdCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY0Ficzo6eTEoCiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1JlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTIw
NSwyOCArMjA1LDI4IEBAIFZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpnZXQK
IAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZh
bHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY0NvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVj
KSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJ
Y2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0NvbnN0YW50czo6WToKIAkJewotCQkJc2V0
WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7
CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0NvbnN0
YW50czo6WDE6CiAJCXsKLQkJCXNldFgxKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgx
KHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY0NvbnN0YW50czo6WTE6CiAJCXsKLQkJCXNldFkxKHZhbHVlLnRv
TnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkxKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1
cm47CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcy
L2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMu
aAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgJOSBKdWwgMjAwNSAw
Njo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Yy5oCTggQXVnIDIwMDUgMDg6MjQ6NDIgLTAwMDAKQEAgLTYwLDggKzYwLDggQEAgbmFtZXNwYWNl
IEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6
OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUlt
cCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJY2xhc3MgU1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNSZWxJbXBsOwpAQCAtOTcsOCArOTcsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dF
VAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBp
bnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0
dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1Ntb290aC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY1Ntb290aC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5jcHAJOCBBdWcgMjAwNSAwODoyNDo0
MiAtMDAwMApAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICov
CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNDksMTggKzQ5LDE4
IEBAIFZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWIKIAlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
ICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZh
bHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1Ntb290aENvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJl
cihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJ
CX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aENvbnN0YW50czo6WToK
IAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051
bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTEzOSw3ICsxMzks
NyBAQCBmbG9hdCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiCiBAZW5kCiAqLwog
Ci1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTE1NCwxOCArMTU0LDE4
IEBAIFZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmUKIAlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
ICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZh
bHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1Ntb290aENvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJl
cihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJ
CX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aENvbnN0YW50czo6WToK
IAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051
bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1Ntb290aC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguaAotLS0ga3N2ZzIvZG9tL1NW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5oCTgg
QXVnIDIwMDUgMDg6MjQ6NDIgLTAwMDAKQEAgLTU0LDggKzU0LDggQEAgbmFtZXNwYWNlIEtTVkcK
IAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVl
ICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFs
dWUsIGludCBhdHRyKTsKIAl9OwogCiAJY2xhc3MgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhSZWxJbXBsOwpAQCAtODUsOCArODUsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dF
VAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBp
bnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0
dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0by5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhT
ZWdMaW5ldG8uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0by5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlu
ZXRvLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1Bh
dGhTZWdMaW5ldG8uY3BwCTggQXVnIDIwMDUgMDg6MjQ6NDIgLTAwMDAKQEAgLTM0LDcgKzM0LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2VnTGlu
ZXRvQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC00OSwxOCArNDks
MTggQEAgVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6Z2V0VmFsdWVQcm9wZQogCXJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTGluZXRvQWJzOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkK
K3ZvaWQgU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQog
CXsKIAkJY2FzZSBTVkdQYXRoU2VnTGluZXRvQ29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZh
bHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJ
CXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdMaW5ldG9Db25zdGFudHM6Olk6CiAJCXsK
LQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIo
ZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkBAIC0xNDAsNyArMTQwLDcgQEAg
ZmxvYXQgU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6eSgpIGNvbnN0CiBAZW5kCiAqLwogCi1WYWx1ZSBT
VkdQYXRoU2VnTGluZXRvUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBA
IC0xNTUsMTggKzE1NSwxOCBAQCBWYWx1ZSBTVkdQYXRoU2VnTGluZXRvUmVsOjpnZXRWYWx1ZVBy
b3BlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaW5ldG9SZWw6
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
ICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnTGluZXRvUmVsOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlz
d2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdMaW5ldG9Db25zdGFudHM6Olg6CiAJ
CXsKLQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1i
ZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0xpbmV0b0NvbnN0
YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZh
bHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6
IGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG8uaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG8u
aAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG8uaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG8uaAk4IEF1ZyAyMDA1IDA4OjI0
OjQyIC0wMDAwCkBAIC01NCw4ICs1NCw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJ
CUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBh
dHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7
CiAJfTsKIAogCWNsYXNzIFNWR1BhdGhTZWdMaW5ldG9SZWxJbXBsOwpAQCAtODUsOCArODUsOCBA
QCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
LQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJ
CXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBL
SlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlu
ZXRvSG9yaXpvbnRhbC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5jcHAJOCBBdWcgMjAwNSAwODoyNDo0MiAt
MDAwMApAQCAtMzMsNyArMzMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAK
LVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWxBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNDYsMTMgKzQ2LDEzIEBAIFZhbHVlIFNWR1Bh
dGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpnZXQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LXZvaWQgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBT
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2Vu
KQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbENvbnN0YW50czo6WDoKIAkJ
ewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJl
cihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTExNiw3ICsxMTYsNyBA
QCBmbG9hdCBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6eCgpCiBAZW5kCiAqLwogCi1W
YWx1ZSBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9Ib3Jp
em9udGFsUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTEyOSwxMyArMTI5LDEzIEBAIFZhbHVlIFNWR1Bh
dGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpnZXQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LXZvaWQgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBT
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2Vu
KQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbENvbnN0YW50czo6WDoKIAkJ
ewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJl
cihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9T
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWwuaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9u
dGFsLmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRo
U2VnTGluZXRvSG9yaXpvbnRhbC5oCTggQXVnIDIwMDUgMDg6MjQ6NDMgLTAwMDAKQEAgLTUxLDgg
KzUxLDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJY2xhc3MgU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWxJbXBsOwpAQCAtNzksOCArNzksOCBAQCBuYW1lc3Bh
Y2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBw
dXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtK
Uzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuY3Bw
CTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQzIC0wMDAwCkBAIC0zMyw3ICszMyw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQog
CXsKQEAgLTQ2LDEzICs0NiwxMyBAQCBWYWx1ZSBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6
OmdldFZhCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbEFiczo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFi
czo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAg
KnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWxDb25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhl
YykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJ
CWRlZmF1bHQ6CkBAIC0xMTcsNyArMTE3LDcgQEAgZmxvYXQgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsQWJzOjp5KCkgYwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2Fs
UmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTEzMCwx
MyArMTMwLDEzIEBAIFZhbHVlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6Z2V0VmEKIAly
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVs
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGlu
dCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bENvbnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlz
ZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoK
SW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b1Zl
cnRpY2FsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgJOCBBdWcgMjAwNSAwODoyNDo0MyAtMDAwMApA
QCAtNTEsOCArNTEsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAlj
bGFzcyBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWxJbXBsOwpAQCAtNzksOCArNzksOCBAQCBu
YW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJ
dm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6
OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHUGF0aFNlZ0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnTGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlzdC5jcHAKLS0tIGtzdmcy
L2RvbS9TVkdQYXRoU2VnTGlzdC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlzdC5jcHAJOCBBdWcgMjAwNSAwODoyNDo0MyAtMDAwMApA
QCAtNTAsNyArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0RPTTsKIAogS1NWR19JTVBMRU1FTlRf
UFJPVE9UWVBFKCJTVkdQYXRoU2VnTGlzdCIsIFNWR1BhdGhTZWdMaXN0UHJvdG8sIFNWR1BhdGhT
ZWdMaXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdQYXRoU2VnTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2Vn
TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjYsNyArNjYsNyBAQCBWYWx1ZSBTVkdQYXRoU2Vn
TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1
ZSBTVkdQYXRoU2VnTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGlzdFByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoU1ZHUGF0aFNlZ0xpc3QpCiAJS0RPTV9FTlRF
Ul9TQUZFCkBAIC04NSwyNCArODUsMjQgQEAgVmFsdWUgU1ZHUGF0aFNlZ0xpc3RQcm90b0Z1bmM6
OmNhbGwoRXhlYwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0xpc3RDb25zdGFudHM6OkdldEl0ZW06
CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOwor
CQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0
dXJuIGdldFNWR1BhdGhTZWcoZXhlYywgb2JqLmdldEl0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNl
IFNWR1BhdGhTZWdMaXN0Q29uc3RhbnRzOjpJbnNlcnRJdGVtQmVmb3JlOgogCQl7CiAJCQlTVkdQ
YXRoU2VnIG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZHUGF0aFNlZz4oZXhlYywgYXJnc1sw
XSwgJnRvU1ZHUGF0aFNlZyk7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJ
bnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihl
eGVjKTsKIAkJCXJldHVybiBnZXRTVkdQYXRoU2VnKGV4ZWMsIG9iai5pbnNlcnRJdGVtQmVmb3Jl
KG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnTGlzdENvbnN0YW50czo6
UmVwbGFjZUl0ZW06CiAJCXsKIAkJCVNWR1BhdGhTZWcgbmV3SXRlbSA9IEtET006OmVjbWFfY2Fz
dDxTVkdQYXRoU2VnPihleGVjLCBhcmdzWzBdLCAmdG9TVkdQYXRoU2VnKTsKLQkJCXVuc2lnbmVk
IGxvbmcgaW5kZXggPSBhcmdzWzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBp
bmRleCA9IGFyZ3NbMV0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldFNWR1BhdGhTZWco
ZXhlYywgb2JqLnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdQ
YXRoU2VnTGlzdENvbnN0YW50czo6UmVtb3ZlSXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBp
bmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0g
YXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gZ2V0U1ZHUGF0aFNlZyhleGVjLCBv
YmoucmVtb3ZlSXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0xpc3RDb25zdGFu
dHM6OkFwcGVuZEl0ZW06CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0xp
c3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR1BhdGhTZWdMaXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlzdC5oCTkgSnVsIDIw
MDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpc3QuaAk4IEF1
ZyAyMDA1IDA4OjI0OjQzIC0wMDAwCkBAIC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJ
cHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJ
S0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHUGF0aFNlZ01vdmV0by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdNb3ZldG8uY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ01vdmV0by5jcHAKLS0t
IGtzdmcyL2RvbS9TVkdQYXRoU2VnTW92ZXRvLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdNb3ZldG8uY3BwCTggQXVnIDIwMDUgMDg6MjQ6
NDMgLTAwMDAKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAq
LwogCi1WYWx1ZSBTVkdQYXRoU2VnTW92ZXRvQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ01vdmV0b0Ficzo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0
b2tlbikKIAl7CkBAIC00OSwxOCArNDksMTggQEAgVmFsdWUgU1ZHUGF0aFNlZ01vdmV0b0Ficzo6
Z2V0VmFsdWVQcm9wZQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2Vn
TW92ZXRvQWJzOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ01vdmV0b0Ficzo6cHV0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBp
bnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnTW92ZXRvQ29uc3Rh
bnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgodmFs
dWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdN
b3ZldG9Db25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOwor
CQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1
bHQ6CkBAIC0xMzksNyArMTM5LDcgQEAgZmxvYXQgU1ZHUGF0aFNlZ01vdmV0b0Ficzo6eSgpIGNv
bnN0CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2VnTW92ZXRvUmVsOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ01v
dmV0b1JlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAog
ewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC0xNTQsMTggKzE1NCwxOCBAQCBWYWx1ZSBTVkdQYXRo
U2VnTW92ZXRvUmVsOjpnZXRWYWx1ZVByb3BlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12
b2lkIFNWR1BhdGhTZWdNb3ZldG9SZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnTW92
ZXRvUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1
ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhT
ZWdNb3ZldG9Db25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykp
OworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNh
c2UgU1ZHUGF0aFNlZ01vdmV0b0NvbnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051
bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47
CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnTW92ZXRvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhT
ZWdNb3ZldG8uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR1BhdGhTZWdNb3ZldG8uaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdNb3ZldG8u
aAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdN
b3ZldG8uaAk4IEF1ZyAyMDA1IDA4OjI0OjQzIC0wMDAwCkBAIC01NCw4ICs1NCw4IEBAIG5hbWVz
cGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lk
IHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
S0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBw
dXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFs
dWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIAogCWNsYXNzIFNWR1BhdGhTZWdNb3ZldG9S
ZWxJbXBsOwpAQCAtODUsOCArODUsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlL
RE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0
cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwog
CX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0dGVybkVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXR0ZXJuRWxl
bWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXR0ZXJuRWxlbWVu
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXR0
ZXJuRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDo0MyAtMDAwMApAQCAtNTIsNyArNTIsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdHRlcm5FbGVt
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKlNWR1BhdHRlcm5FbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCQpJbmRleDoga3N2
ZzIvZG9tL1NWR1BhdHRlcm5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdHRlcm5FbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXR0ZXJuRWxlbWVudC5o
Ci0tLSBrc3ZnMi9kb20vU1ZHUGF0dGVybkVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdHRlcm5FbGVtZW50LmgJOCBBdWcgMjAwNSAwODoy
NDo0MyAtMDAwMApAQCAtNzQsNyArNzQsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAog
CQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BvaW50LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BvaW50LmNwcAotLS0g
a3N2ZzIvZG9tL1NWR1BvaW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR1BvaW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQzIC0wMDAwCkBAIC00OSw3
ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZ
UEUoIlNWR1BvaW50IiwgU1ZHUG9pbnRQcm90bywgU1ZHUG9pbnRQcm90b0Z1bmMpCiAKLVZhbHVl
IFNWR1BvaW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKlNWR1BvaW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02NywxNyArNjcs
MTcgQEAgVmFsdWUgU1ZHUG9pbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQb2ludDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1Bv
aW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUlt
cCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAogCXN3aXRjaCh0b2tlbikKIAl7
CiAJCWNhc2UgU1ZHUG9pbnRDb25zdGFudHM6Olg6Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4
ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQljYXNl
IFNWR1BvaW50Q29uc3RhbnRzOjpZOgotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJ
CQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJ
CWtkV2FybmluZygpIDw8ICJVbmhhbmRsZWQgdG9rZW4gaW4gIiA8PCBrX2Z1bmNpbmZvIDw8ICIg
OiAiIDw8IHRva2VuIDw8IGVuZGw7CkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgU1ZHUG9pbnQ6OnB1
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXQKIAlLRE9NX0xFQVZFX1NBRkUoS0RPTTo6RE9NRXhjZXB0
aW9uKQogfQogCi1WYWx1ZSBTVkdQb2ludFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdQb2ludFBy
b3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoU1ZHUG9pbnQpCiAJS0RPTV9FTlRFUl9T
QUZFCkluZGV4OiBrc3ZnMi9kb20vU1ZHUG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUG9pbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BvaW50LmgKLS0tIGtzdmcyL2Rv
bS9TVkdQb2ludC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHUG9pbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjQzIC0wMDAwCkBAIC02Miw4ICs2Miw4IEBAIG5h
bWVzcGFjZSBLU1ZHCiAJCUtET01fUFVUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJ
dm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6
OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKFNW
R1BvaW50KQpJbmRleDoga3N2ZzIvZG9tL1NWR1BvaW50TGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BvaW50TGlzdC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQb2lu
dExpc3QuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmNwcAk5IEp1bCAyMDA1IDA2OjU0
OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BvaW50TGlzdC5jcHAJOCBBdWcgMjAwNSAw
ODoyNDo0NCAtMDAwMApAQCAtNTQsNyArNTQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAog
S1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdQb2ludExpc3QiLCBTVkdQb2ludExpc3RQcm90
bywgU1ZHUG9pbnRMaXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdQb2ludExpc3Q6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UG9pbnRMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03MCw3ICs3MCw3IEBAIFZhbHVlIFNWR1Bv
aW50TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LVZhbHVlIFNWR1BvaW50TGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdQb2ludExpc3RQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR1BvaW50TGlzdCkKIAlLRE9NX0VOVEVS
X1NBRkUKQEAgLTg5LDI0ICs4OSwyNCBAQCBWYWx1ZSBTVkdQb2ludExpc3RQcm90b0Z1bmM6OmNh
bGwoRXhlY1N0CiAJCX0KIAkJY2FzZSBTVkdQb2ludExpc3RDb25zdGFudHM6OkdldEl0ZW06CiAJ
CXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJ
dW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJu
IEtET006OnNhZmVfY2FjaGU8U1ZHUG9pbnQ+KGV4ZWMsIG9iai5nZXRJdGVtKGluZGV4KSk7CiAJ
CX0KIAkJY2FzZSBTVkdQb2ludExpc3RDb25zdGFudHM6Okluc2VydEl0ZW1CZWZvcmU6CiAJCXsK
IAkJCVNWR1BvaW50IG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZHUG9pbnQ+KGV4ZWMsIGFy
Z3NbMF0sICZ0b1NWR1BvaW50KTsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLnRv
VUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0tPnRvVUludDMy
KGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUG9pbnQ+KGV4ZWMsIG9iai5p
bnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdQb2ludExp
c3RDb25zdGFudHM6OlJlcGxhY2VJdGVtOgogCQl7CiAJCQlTVkdQb2ludCBuZXdJdGVtID0gS0RP
TTo6ZWNtYV9jYXN0PFNWR1BvaW50PihleGVjLCBhcmdzWzBdLCAmdG9TVkdQb2ludCk7Ci0JCQl1
bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVk
IGxvbmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpz
YWZlX2NhY2hlPFNWR1BvaW50PihleGVjLCBvYmoucmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgp
KTsKIAkJfQogCQljYXNlIFNWR1BvaW50TGlzdENvbnN0YW50czo6UmVtb3ZlSXRlbToKIAkJewot
CQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNp
Z25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RP
TTo6c2FmZV9jYWNoZTxTVkdQb2ludD4oZXhlYywgb2JqLnJlbW92ZUl0ZW0oaW5kZXgpKTsKIAkJ
fQogCQljYXNlIFNWR1BvaW50TGlzdENvbnN0YW50czo6QXBwZW5kSXRlbToKSW5kZXg6IGtzdmcy
L2RvbS9TVkdQb2ludExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQb2ludExpc3QuaAotLS0ga3N2ZzIvZG9tL1NW
R1BvaW50TGlzdC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHUG9pbnRMaXN0LmgJOCBBdWcgMjAwNSAwODoyNDo0NCAtMDAwMApAQCAtNjIsNyArNjIsNyBA
QCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01f
QkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga3N2ZzIvZG9tL1NWR1BvbHlnb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUG9seWdvbkVsZW1lbnQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
UG9seWdvbkVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUG9seWdvbkVsZW1lbnQuY3BwCTkg
SnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUG9seWdvbkVsZW1l
bnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6NDQgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLUtKUzo6VmFsdWUgU1ZHUG9seWdvbkVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K0tKUzo6VmFsdWVJbXAgKlNWR1BvbHlnb25FbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdQb2x5Z29uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQb2x5Z29uRWxlbWVudC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUG9seWdv
bkVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1BvbHlnb25FbGVtZW50LmgJOSBKdWwgMjAwNSAw
Njo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQb2x5Z29uRWxlbWVudC5oCTggQXVn
IDIwMDUgMDg6MjQ6NDQgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJ
S0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUG9seWxpbmVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUG9s
eWxpbmVFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQb2x5
bGluZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHUG9seWxpbmVFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ0IC0wMDAwCkBAIC0z
Niw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZH
UG9seWxpbmVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BvbHlsaW5lRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IApJbmRleDoga3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQb2x5bGluZUVsZW1lbnQuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1Bv
bHlsaW5lRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHUG9seWxpbmVFbGVtZW50LmgJOSBKdWwg
MjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQb2x5bGluZUVsZW1lbnQu
aAk4IEF1ZyAyMDA1IDA4OjI0OjQ0IC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1ByZXNlcnZlQXNwZWN0
UmF0aW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcy
L2RvbS9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCi0t
LSBrc3ZnMi9kb20vU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1
NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAk4IEF1
ZyAyMDA1IDA4OjI0OjQ0IC0wMDAwCkBAIC00MCw3ICs0MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBL
U1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC01OCwxNyArNTgsMTcgQEAg
VmFsdWUgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0VmFsdWVQcgogCXJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotdm9pZCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3Zv
aWQgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZF
CiAKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9Db25z
dGFudHM6OkFsaWduOgotCQkJc2V0QWxpZ24odmFsdWUudG9VSW50MzIoZXhlYykpOworCQkJc2V0
QWxpZ24odmFsdWUtPnRvVUludDMyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQljYXNlIFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9Db25zdGFudHM6Ok1lZXRPclNsaWNlOgotCQkJc2V0TWVldE9yU2xpY2Uo
dmFsdWUudG9VSW50MzIoZXhlYykpOworCQkJc2V0TWVldE9yU2xpY2UodmFsdWUtPnRvVUludDMy
KGV4ZWMpKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJa2RXYXJuaW5nKCkgPDwgIlVuaGFu
ZGxlZCB0b2tlbiBpbiAiIDw8IGtfZnVuY2luZm8gPDwgIiA6ICIgPDwgdG9rZW4gPDwgZW5kbDsK
SW5kZXg6IGtzdmcyL2RvbS9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1ByZXNlcnZlQXNwZWN0UmF0
aW8uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAotLS0ga3N2ZzIvZG9tL1NWR1ByZXNlcnZlQXNwZWN0
UmF0aW8uaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1By
ZXNlcnZlQXNwZWN0UmF0aW8uaAk4IEF1ZyAyMDA1IDA4OjI0OjQ0IC0wMDAwCkBAIC01Nyw4ICs1
Nyw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9Owog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisr
KyBrc3ZnMi9kb20vU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0
OjQ0IC0wMDAwCkBAIC00NCw3ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAog
Ki8KIAotVmFsdWUgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1JhZGlhbEdyYWRp
ZW50RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR1JhZGlhbEdy
YWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dC5oCi0tLSBrc3ZnMi9kb20vU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgJOSBKdWwgMjAwNSAw
Njo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQu
aAk4IEF1ZyAyMDA1IDA4OjI0OjQ0IC0wMDAwCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1JlY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdSZWN0LmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R1JlY3QuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUmVjdC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdSZWN0LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ0IC0w
MDAwCkBAIC00NCw3ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAot
VmFsdWUgU1ZHUmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpTVkdSZWN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02Niw3ICs2
Niw3IEBAIFZhbHVlIFNWR1JlY3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXQKIAlyZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUmVjdDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1Jl
Y3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCQpAQCAtNzQsMjIgKzc0LDIyIEBA
IHZvaWQgU1ZHUmVjdDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUKIAl7CiAJCWNhc2UgU1ZH
UmVjdENvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJ
CQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlicmVhazsKIAkJfQogCQljYXNlIFNW
R1JlY3RDb25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOwor
CQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBT
VkdSZWN0Q29uc3RhbnRzOjpXaWR0aDoKIAkJewotCQkJc2V0V2lkdGgodmFsdWUudG9OdW1iZXIo
ZXhlYykpOworCQkJc2V0V2lkdGgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwog
CQl9CiAJCWNhc2UgU1ZHUmVjdENvbnN0YW50czo6SGVpZ2h0OgogCQl7Ci0JCQlzZXRIZWlnaHQo
dmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0SGVpZ2h0KHZhbHVlLT50b051bWJlcihleGVj
KSk7CiAJCQlicmVhazsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga3N2ZzIvZG9tL1NWR1JlY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
UmVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHUmVjdC5oCi0tLSBrc3ZnMi9kb20vU1ZHUmVjdC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUmVjdC5oCTggQXVnIDIwMDUgMDg6MjQ6NDQgLTAw
MDAKQEAgLTY1LDggKzY1LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9QVVQKIAkJS0RPTV9D
QVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsK
IAogCUtET01fREVGSU5FX0NBU1QoU1ZHUmVjdCkKSW5kZXg6IGtzdmcyL2RvbS9TVkdSZWN0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIv
ZG9tL1NWR1JlY3RFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga3N2ZzIvZG9tL1NWR1JlY3RFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1Jl
Y3RFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9t
L1NWR1JlY3RFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ1IC0wMDAwCkBAIC01MCw3ICs1
MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUmVjdEVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUmVjdEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcy
L2RvbS9TVkdSZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdSZWN0RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUmVjdEVsZW1lbnQuaAotLS0ga3N2ZzIv
ZG9tL1NWR1JlY3RFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdSZWN0RWxlbWVudC5oCTggQXVnIDIwMDUgMDg6MjQ6NDUgLTAwMDAKQEAgLTcw
LDcgKzcwLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVU
CiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3Zn
Mi9kb20vU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR1NWR0VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU1ZHRWxlbWVudC5jcHAKLS0tIGtz
dmcyL2RvbS9TVkdTVkdFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR1NWR0VsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6NDUgLTAwMDAK
QEAgLTkxLDcgKzkxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5U
X1BST1RPVFlQRSgiU1ZHU1ZHRWxlbWVudCIsIFNWR1NWR0VsZW1lbnRQcm90bywgU1ZHU1ZHRWxl
bWVudFByb3RvRnVuYykKIAotVmFsdWUgU1ZHU1ZHRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdTVkdFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewog
CUtET01fRU5URVJfU0FGRQogCQpAQCAtMTM0LDcgKzEzNCw3IEBAIFZhbHVlIFNWR1NWR0VsZW1l
bnQ6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQg
U1ZHU1ZHRWxlbWVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1NWR0VsZW1lbnQ6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50
KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBTVkdTVkdF
bGVtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZQogCQl9CiAJCWNhc2UgU1ZHU1ZHRWxlbWVudENv
bnN0YW50czo6Q3VycmVudFNjYWxlOgogCQl7Ci0JCQlzZXRDdXJyZW50U2NhbGUodmFsdWUudG9O
dW1iZXIoZXhlYykpOworCQkJc2V0Q3VycmVudFNjYWxlKHZhbHVlLT50b051bWJlcihleGVjKSk7
CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTE2Miw5ICsxNjIsOSBAQCB2b2lkIFNW
R1NWR0VsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlCiAJS0RPTV9MRUFWRV9TQUZFKFNWR0V4
Y2VwdGlvbikKIH0KIAotVmFsdWUgU1ZHU1ZHRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpT
VkdTVkdFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotCVNWR1NWR0VsZW1lbnQgb2JqKGNhc3QoZXhl
Yywgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsKKwlTVkdT
VkdFbGVtZW50IG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlLRE9NX0VOVEVSX1NBRkUKIAog
CXN3aXRjaChpZCkKQEAgLTE5MCwxMyArMTkwLDEzIEBAIFZhbHVlIFNWR1NWR0VsZW1lbnRQcm90
b0Z1bmM6OmNhbGwoRXhlY1MKIAkJfQogCQljYXNlIFNWR1NWR0VsZW1lbnRDb25zdGFudHM6OlN1
c3BlbmRSZWRyYXc6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgbWF4X3dhaXRfbWlsbGlzZWNvbmRz
ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTs7CisJCQl1bnNpZ25lZCBsb25nIG1heF93YWl0X21p
bGxpc2Vjb25kcyA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOzsKIAkJCW9iai5zdXNwZW5kUmVk
cmF3KG1heF93YWl0X21pbGxpc2Vjb25kcyk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0K
IAkJY2FzZSBTVkdTVkdFbGVtZW50Q29uc3RhbnRzOjpVbnN1c3BlbmRSZWRyYXc6CiAJCXsKLQkJ
CXVuc2lnbmVkIGxvbmcgc3VzcGVuZF9oYW5kbGVfaWQgPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMp
OzsKKwkJCXVuc2lnbmVkIGxvbmcgc3VzcGVuZF9oYW5kbGVfaWQgPSBhcmdzWzBdLT50b1VJbnQz
MihleGVjKTs7CiAJCQlvYmoudW5zdXNwZW5kUmVkcmF3KHN1c3BlbmRfaGFuZGxlX2lkKTsKIAkJ
CXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpAQCAtMjI4LDcgKzIyOCw3IEBAIFZhbHVlIFNWR1NW
R0VsZW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1MKIAkJfQogCQljYXNlIFNWR1NWR0VsZW1lbnRD
b25zdGFudHM6OlNldEN1cnJlbnRUaW1lOgogCQl7Ci0JCQlvYmouc2V0Q3VycmVudFRpbWUoYXJn
c1swXS50b051bWJlcihleGVjKSk7CisJCQlvYmouc2V0Q3VycmVudFRpbWUoYXJnc1swXS0+dG9O
dW1iZXIoZXhlYykpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWNhc2UgU1ZHU1ZH
RWxlbWVudENvbnN0YW50czo6R2V0SW50ZXJzZWN0aW9uTGlzdDoKSW5kZXg6IGtzdmcyL2RvbS9T
VkdTVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR1NWR0VsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1NWR0VsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1NW
R0VsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R1NWR0VsZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjQ1IC0wMDAwCkBAIC0xMjksOCArMTI5LDgg
QEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
CQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
S0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIv
ZG9tL1NWR1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTY3JpcHRFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1NjcmlwdEVsZW1lbnQuY3Bw
Ci0tLSBrc3ZnMi9kb20vU1ZHU2NyaXB0RWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTY3JpcHRFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4
OjI0OjQ1IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHU2NyaXB0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdTY3JpcHRFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtE
T01fRU5URVJfU0FGRQogCQpAQCAtNTgsNyArNTgsNyBAQCBWYWx1ZSBTVkdTY3JpcHRFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5CiAvLyBUaGUgcWRvbSB3YXkuLi4KICNkZWZpbmUgaW1wbCAoc3Rh
dGljX2Nhc3Q8U1ZHU2NyaXB0RWxlbWVudEltcGwgKj4oRXZlbnRUYXJnZXQ6OmQpKQogCi12b2lk
IFNWR1NjcmlwdEVsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdTY3JpcHRFbGVtZW50Ojpw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFs
dWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR1Njcmlw
dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHU2NyaXB0RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU2NyaXB0RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZH
U2NyaXB0RWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHU2NyaXB0RWxlbWVudC5oCTggQXVnIDIwMDUgMDg6MjQ6NDUgLTAwMDAKQEAgLTU2LDgg
KzU2LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDog
a3N2ZzIvZG9tL1NWR1NldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTZXRFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1NldEVsZW1lbnQuY3BwCi0t
LSBrc3ZnMi9kb20vU1ZHU2V0RWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkx
LjEKKysrIGtzdmcyL2RvbS9TVkdTZXRFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ1IC0w
MDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAot
VmFsdWUgU1ZHU2V0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdTZXRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHU2V0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTZXRFbGVtZW50LmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTZXRFbGVtZW50LmgK
LS0tIGtzdmcyL2RvbS9TVkdTZXRFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkx
LjEKKysrIGtzdmcyL2RvbS9TVkdTZXRFbGVtZW50LmgJOCBBdWcgMjAwNSAwODoyNDo0NSAtMDAw
MApAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZP
UldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdTdG9wRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1N0b3BFbGVtZW50LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1N0b3BFbGVtZW50
LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1N0b3BFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1N0b3BFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4
OjI0OjQ1IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHU3RvcEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3RvcEVsZW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9F
TlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTdG9wRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTdG9wRWxlbWVudC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
U3RvcEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1N0b3BFbGVtZW50LmgJOSBKdWwgMjAwNSAw
Njo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTdG9wRWxlbWVudC5oCTggQXVnIDIw
MDUgMDg6MjQ6NDYgLTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHU3RyaW5nTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1N0cmluZ0xpc3Qu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHU3RyaW5nTGlzdC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdTdHJpbmdMaXN0LmNwcAk5IEp1bCAy
MDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1N0cmluZ0xpc3QuY3BwCTgg
QXVnIDIwMDUgMDg6MjQ6NDYgLTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHU3RyaW5nTGlzdCIsIFNWR1N0
cmluZ0xpc3RQcm90bywgU1ZHU3RyaW5nTGlzdFByb3RvRnVuYykKIAotVmFsdWUgU1ZHU3RyaW5n
TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpTVkdTdHJpbmdMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03MCw3ICs3MCw3
IEBAIFZhbHVlIFNWR1N0cmluZ0xpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR1N0cmluZ0xpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAq
U1ZHU3RyaW5nTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAq
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoU1ZHU3RyaW5n
TGlzdCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTg5LDI0ICs4OSwyNCBAQCBWYWx1ZSBTVkdTdHJp
bmdMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTCiAJCX0KIAkJY2FzZSBTVkdTdHJpbmdMaXN0Q29u
c3RhbnRzOjpHZXRJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50
b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQz
MihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpnZXRET01TdHJpbmcob2JqLmdldEl0ZW0oaW5kZXgp
KTsKIAkJfQogCQljYXNlIFNWR1N0cmluZ0xpc3RDb25zdGFudHM6Okluc2VydEl0ZW1CZWZvcmU6
CiAJCXsKIAkJCUtET006OkRPTVN0cmluZyBuZXdJdGVtID0gS0RPTTo6dG9ET01TdHJpbmcoZXhl
YywgYXJnc1swXSk7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihl
eGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsK
IAkJCXJldHVybiBLRE9NOjpnZXRET01TdHJpbmcob2JqLmluc2VydEl0ZW1CZWZvcmUobmV3SXRl
bSwgaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR1N0cmluZ0xpc3RDb25zdGFudHM6OlJlcGxhY2VJ
dGVtOgogCQl7CiAJCQlLRE9NOjpET01TdHJpbmcgbmV3SXRlbSA9IEtET006OnRvRE9NU3RyaW5n
KGV4ZWMsIGFyZ3NbMF0pOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50
MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhl
Yyk7CiAJCQlyZXR1cm4gS0RPTTo6Z2V0RE9NU3RyaW5nKG9iai5yZXBsYWNlSXRlbShuZXdJdGVt
LCBpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHU3RyaW5nTGlzdENvbnN0YW50czo6UmVtb3ZlSXRl
bToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7
CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQly
ZXR1cm4gS0RPTTo6Z2V0RE9NU3RyaW5nKG9iai5yZW1vdmVJdGVtKGluZGV4KSk7CiAJCX0KIAkJ
Y2FzZSBTVkdTdHJpbmdMaXN0Q29uc3RhbnRzOjpBcHBlbmRJdGVtOgpJbmRleDoga3N2ZzIvZG9t
L1NWR1N0cmluZ0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHU3RyaW5nTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU3RyaW5nTGlzdC5oCi0tLSBrc3ZnMi9kb20vU1ZH
U3RyaW5nTGlzdC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHU3RyaW5nTGlzdC5oCTggQXVnIDIwMDUgMDg6MjQ6NDYgLTAwMDAKQEAgLTY2LDcgKzY2LDcg
QEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9N
X0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07
CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTdHlsYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1N0eWxhYmxlLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1N0eWxhYmxlLmNw
cAotLS0ga3N2ZzIvZG9tL1NWR1N0eWxhYmxlLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR1N0eWxhYmxlLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ2IC0w
MDAwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExF
TUVOVF9QUk9UT1RZUEUoIlNWR1N0eWxhYmxlIiwgU1ZHU3R5bGFibGVQcm90bywgU1ZHU3R5bGFi
bGVQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR1N0eWxhYmxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1N0eWxhYmxlOjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01f
RU5URVJfU0FGRQogCkBAIC02OSw5ICs2OSw5IEBAIFZhbHVlIFNWR1N0eWxhYmxlOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWMKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR1N0eWxh
YmxlUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1N0eWxhYmxlUHJvdG9GdW5jOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotCVNW
R1N0eWxhYmxlIG9iaihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRo
aXNPYmouaW1wKCkpKSk7CisJU1ZHU3R5bGFibGUgb2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwog
CUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKGlkKQpJbmRleDoga3N2ZzIvZG9tL1NWR1N0eWxh
YmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR1N0eWxhYmxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdTdHlsYWJsZS5oCi0tLSBrc3ZnMi9kb20vU1ZHU3R5bGFibGUuaAk5IEp1
bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1N0eWxhYmxlLmgJOCBB
dWcgMjAwNSAwODoyNDo0NiAtMDAwMApAQCAtNjQsNyArNjQsNyBAQCBuYW1lc3BhY2UgS1NWRwog
CXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9t
L1NWR1N0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva3N2ZzIvZG9tL1NWR1N0eWxlRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTdHlsZUVsZW1lbnQuY3BwCi0tLSBr
c3ZnMi9kb20vU1ZHU3R5bGVFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR1N0eWxlRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDo0NiAt
MDAwMApAQCAtNDMsNyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAK
LVZhbHVlIFNWR1N0eWxlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdTdHlsZUVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9T
QUZFCiAJCkBAIC02NSw3ICs2NSw3IEBAIFZhbHVlIFNWR1N0eWxlRWxlbWVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eSgKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHU3R5bGVFbGVtZW50
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHU3R5bGVFbGVtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR1N0eWxlRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTdHlsZUVsZW1l
bnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR1N0eWxlRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHU3R5bGVFbGVtZW50LmgJOSBKdWwg
MjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTdHlsZUVsZW1lbnQuaAk4
IEF1ZyAyMDA1IDA4OjI0OjQ2IC0wMDAwCkBAIC02Niw4ICs2Niw4IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1
ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZh
bHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTd2l0Y2hFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9k
b20vU1ZHU3dpdGNoRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTd2l0Y2hFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NW
R1N3aXRjaEVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHU3dpdGNoRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDo0NiAtMDAwMApAQCAt
MzgsNyArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNW
R1N3aXRjaEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3dpdGNoRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR1N3aXRjaEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHU3dpdGNoRWxlbWVudC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU3dpdGNoRWxl
bWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHU3dpdGNoRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6
NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHU3dpdGNoRWxlbWVudC5oCTggQXVnIDIwMDUg
MDg6MjQ6NDYgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9H
RVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
CX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHU3ltYm9sRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1N5bWJvbEVsZW1l
bnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHU3ltYm9sRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdTeW1ib2xFbGVtZW50LmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1N5bWJvbEVs
ZW1lbnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6NDYgLTAwMDAKQEAgLTM2LDcgKzM2LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdTeW1ib2xFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1N5bWJvbEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9T
VkdTeW1ib2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR1N5bWJvbEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1N5bWJvbEVsZW1lbnQuaAotLS0ga3N2ZzIv
ZG9tL1NWR1N5bWJvbEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR1N5bWJvbEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjQ2IC0wMDAwCkBA
IC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FS
RFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUU3BhbkVsZW1lbnQu
Y3BwCi0tLSBrc3ZnMi9kb20vU1ZHVFNwYW5FbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAw
ODoyNDo0NiAtMDAwMApAQCAtNDMsNyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBl
bmQKICovCiAKLVZhbHVlIFNWR1RTcGFuRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdUU3BhbkVsZW1lbnQ6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RP
TV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdUU3BhbkVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVFNwYW5FbGVt
ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdUU3BhbkVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVudC5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVFNwYW5FbGVtZW50LmgJ
OCBBdWcgMjAwNSAwODoyNDo0NiAtMDAwMApAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgS1NW
RwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdUZXN0cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1Rlc3RzLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R1Rlc3RzLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1Rlc3RzLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1Rlc3RzLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ3
IC0wMDAwCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lN
UExFTUVOVF9QUk9UT1RZUEUoIlNWR1Rlc3RzIiwgU1ZHVGVzdHNQcm90bywgU1ZHVGVzdHNQcm90
b0Z1bmMpCiAKLVZhbHVlIFNWR1Rlc3RzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1Rlc3RzOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQog
CkBAIC02Niw5ICs2Niw5IEBAIFZhbHVlIFNWR1Rlc3RzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR1Rlc3RzUHJvdG9GdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQor
VmFsdWVJbXAgKlNWR1Rlc3RzUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotCVNWR1Rlc3RzIG9iaihjYXN0KGV4
ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7CisJU1ZH
VGVzdHMgb2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwogCUtET01fRU5URVJfU0FGRQogCiAJc3dp
dGNoKGlkKQpJbmRleDoga3N2ZzIvZG9tL1NWR1Rlc3RzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1Rlc3RzLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUZXN0cy5oCi0tLSBrc3Zn
Mi9kb20vU1ZHVGVzdHMuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIv
ZG9tL1NWR1Rlc3RzLmgJOCBBdWcgMjAwNSAwODoyNDo0NyAtMDAwMApAQCAtNTgsNyArNTgsNyBA
QCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01f
QkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga3N2ZzIvZG9tL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RleHRDb250ZW50RWxl
bWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHVGV4dENvbnRl
bnRFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9t
L1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwODoyNDo0NyAtMDAwMApAQCAt
NjIsNyArNjIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJP
VE9UWVBFKCJTVkdUZXh0Q29udGVudEVsZW1lbnQiLCBTVkdUZXh0Q29udGVudEVsZW1lbnRQcm90
bywgU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBA
IC04MCw5ICs4MCw5IEBAIFZhbHVlIFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0VmFsdWVQcm8K
IAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR1RleHRDb250ZW50RWxlbWVudFBy
b3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKK1ZhbHVlSW1wICpTVkdUZXh0Q29udGVudEVsZW1lbnRQcm90b0Z1bmM6OmNhbGwo
RXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7
Ci0JU1ZHVGV4dENvbnRlbnRFbGVtZW50IG9iaihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0PEtKUzo6
T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7CisJU1ZHVGV4dENvbnRlbnRFbGVtZW50IG9i
aihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlLRE9NX0VOVEVSX1NBRkUKIAogCXN3aXRjaChpZCkK
QEAgLTk3LDE3ICs5NywxNyBAQCBWYWx1ZSBTVkdUZXh0Q29udGVudEVsZW1lbnRQcm90b0Z1bmM6
OmNhCiAJCX0KIAkJY2FzZSBTVkdUZXh0Q29udGVudEVsZW1lbnRDb25zdGFudHM6OkdldFN1YlN0
cmluZ0xlbmd0aDoKIAkJewotCQkJcmV0dXJuIE51bWJlcihvYmouZ2V0U3ViU3RyaW5nTGVuZ3Ro
KGFyZ3NbMF0udG9VSW50MzIoZXhlYyksIGFyZ3NbMV0udG9VSW50MzIoZXhlYykpKTsKKwkJCXJl
dHVybiBOdW1iZXIob2JqLmdldFN1YlN0cmluZ0xlbmd0aChhcmdzWzBdLT50b1VJbnQzMihleGVj
KSwgYXJnc1sxXS0+dG9VSW50MzIoZXhlYykpKTsKIAkJfQogCQljYXNlIFNWR1RleHRDb250ZW50
RWxlbWVudENvbnN0YW50czo6R2V0U3RhcnRQb3NpdGlvbk9mQ2hhcjoKLQkJCXJldHVybiBLRE9N
OjpzYWZlX2NhY2hlPFNWR1BvaW50PihleGVjLCBvYmouZ2V0U3RhcnRQb3NpdGlvbk9mQ2hhcihh
cmdzWzBdLnRvVUludDMyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQ
b2ludD4oZXhlYywgb2JqLmdldFN0YXJ0UG9zaXRpb25PZkNoYXIoYXJnc1swXS0+dG9VSW50MzIo
ZXhlYykpKTsKIAkJY2FzZSBTVkdUZXh0Q29udGVudEVsZW1lbnRDb25zdGFudHM6OkdldEVuZFBv
c2l0aW9uT2ZDaGFyOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUG9pbnQ+KGV4ZWMs
IG9iai5nZXRTdGFydFBvc2l0aW9uT2ZDaGFyKGFyZ3NbMF0udG9VSW50MzIoZXhlYykpKTsKKwkJ
CXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BvaW50PihleGVjLCBvYmouZ2V0U3RhcnRQb3Np
dGlvbk9mQ2hhcihhcmdzWzBdLT50b1VJbnQzMihleGVjKSkpOwogCQljYXNlIFNWR1RleHRDb250
ZW50RWxlbWVudENvbnN0YW50czo6R2V0RXh0ZW50T2ZDaGFyOgotCQkJcmV0dXJuIEtET006OnNh
ZmVfY2FjaGU8U1ZHUmVjdD4oZXhlYywgb2JqLmdldEV4dGVudE9mQ2hhcihhcmdzWzBdLnRvVUlu
dDMyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdSZWN0PihleGVjLCBv
YmouZ2V0RXh0ZW50T2ZDaGFyKGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZH
VGV4dENvbnRlbnRFbGVtZW50Q29uc3RhbnRzOjpHZXRSb3RhdGlvbk9mQ2hhcjoKIAkJewotCQkJ
cmV0dXJuIE51bWJlcihvYmouZ2V0Um90YXRpb25PZkNoYXIoYXJnc1swXS50b1VJbnQzMihleGVj
KSkpOworCQkJcmV0dXJuIE51bWJlcihvYmouZ2V0Um90YXRpb25PZkNoYXIoYXJnc1swXS0+dG9V
SW50MzIoZXhlYykpKTsKIAkJfQogCQljYXNlIFNWR1RleHRDb250ZW50RWxlbWVudENvbnN0YW50
czo6R2V0Q2hhck51bUF0UG9zaXRpb246CiAJCXsKQEAgLTExNiw3ICsxMTYsNyBAQCBWYWx1ZSBT
VkdUZXh0Q29udGVudEVsZW1lbnRQcm90b0Z1bmM6OmNhCiAJCX0KIAkJY2FzZSBTVkdUZXh0Q29u
dGVudEVsZW1lbnRDb25zdGFudHM6OlNlbGVjdFN1YlN0cmluZzoKIAkJewotCQkJb2JqLnNlbGVj
dFN1YlN0cmluZyhhcmdzWzBdLnRvVUludDMyKGV4ZWMpLCBhcmdzWzFdLnRvVUludDMyKGV4ZWMp
KTsKKwkJCW9iai5zZWxlY3RTdWJTdHJpbmcoYXJnc1swXS0+dG9VSW50MzIoZXhlYyksIGFyZ3Nb
MV0tPnRvVUludDMyKGV4ZWMpKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQogCQlkZWZh
dWx0OgpJbmRleDoga3N2ZzIvZG9tL1NWR1RleHRDb250ZW50RWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUZXh0Q29udGVudEVs
ZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR1RleHRDb250ZW50RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHVGV4dENvbnRlbnRF
bGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdU
ZXh0Q29udGVudEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjQ3IC0wMDAwCkBAIC03Niw3ICs3
Niw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9t
L1NWR1RleHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9kb20vU1ZHVGV4dEVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGV4dEVsZW1lbnQuY3BwCi0tLSBrc3Zn
Mi9kb20vU1ZHVGV4dEVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisr
KyBrc3ZnMi9kb20vU1ZHVGV4dEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6NDcgLTAwMDAK
QEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1
ZSBTVkdUZXh0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdUZXh0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR1RleHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RleHRFbGVtZW50LmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUZXh0RWxlbWVudC5o
Ci0tLSBrc3ZnMi9kb20vU1ZHVGV4dEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR1RleHRFbGVtZW50LmgJOCBBdWcgMjAwNSAwODoyNDo0NyAt
MDAwMApAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9N
X0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAw
ODoyNDo0NyAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBl
bmQKICovCiAKLVZhbHVlIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oCTkg
SnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudC5oCTggQXVnIDIwMDUgMDg6MjQ6NDcgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAg
bmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVGl0
bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHVGl0bGVFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RpdGxlRWxlbWVudC5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdUaXRsZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHVGl0bGVFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ3IC0wMDAwCkBA
IC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUg
U1ZHVGl0bGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1RpdGxlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR1RpdGxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUaXRsZUVsZW1lbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RpdGxlRWxlbWVu
dC5oCi0tLSBrc3ZnMi9kb20vU1ZHVGl0bGVFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUaXRsZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0
OjQ3IC0wMDAwCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJ
CUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9Owog
fTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RyYW5zZm9ybS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUcmFuc2Zv
cm0uY3BwCi0tLSBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybS5jcHAJOCBBdWcgMjAwNSAwODoy
NDo0NyAtMDAwMApAQCAtNTIsNyArNTIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NW
R19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdUcmFuc2Zvcm0iLCBTVkdUcmFuc2Zvcm1Qcm90bywg
U1ZHVHJhbnNmb3JtUHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm06OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHVHJh
bnNmb3JtOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03Miw3ICs3Miw3IEBAIFZhbHVlIFNWR1RyYW5z
Zm9ybTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZh
bHVlIFNWR1RyYW5zZm9ybVByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm1Qcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR1RyYW5zZm9ybSkKIAlLRE9NX0VOVEVSX1NB
RkUKQEAgLTg3LDM1ICs4NywzNSBAQCBWYWx1ZSBTVkdUcmFuc2Zvcm1Qcm90b0Z1bmM6OmNhbGwo
RXhlY1N0CiAJCX0KIAkJY2FzZSBTVkdUcmFuc2Zvcm1Db25zdGFudHM6OlNldFRyYW5zbGF0ZToK
IAkJewotCQkJZG91YmxlIHggPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOwotCQkJZG91YmxlIHkg
PSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHggPSBhcmdzWzBdLT50b051bWJl
cihleGVjKTsKKwkJCWRvdWJsZSB5ID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlvYmou
c2V0VHJhbnNsYXRlKHgsIHkpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWNhc2Ug
U1ZHVHJhbnNmb3JtQ29uc3RhbnRzOjpTZXRTY2FsZToKIAkJewotCQkJZG91YmxlIHN4ID0gYXJn
c1swXS50b051bWJlcihleGVjKTsKLQkJCWRvdWJsZSBzeSA9IGFyZ3NbMV0udG9OdW1iZXIoZXhl
Yyk7CisJCQlkb3VibGUgc3ggPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSBz
eSA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJb2JqLnNldFNjYWxlKHN4LCBzeSk7CiAJ
CQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBTVkdUcmFuc2Zvcm1Db25zdGFudHM6
OlNldFJvdGF0ZToKIAkJewotCQkJZG91YmxlIGFuZ2xlID0gYXJnc1swXS50b051bWJlcihleGVj
KTsKLQkJCWRvdWJsZSBjeCA9IGFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7Ci0JCQlkb3VibGUgY3kg
PSBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIGFuZ2xlID0gYXJnc1swXS0+dG9O
dW1iZXIoZXhlYyk7CisJCQlkb3VibGUgY3ggPSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKKwkJ
CWRvdWJsZSBjeSA9IGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJb2JqLnNldFJvdGF0ZShh
bmdsZSwgY3gsIGN5KTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQogCQljYXNlIFNWR1Ry
YW5zZm9ybUNvbnN0YW50czo6U2V0U2tld1g6CiAJCXsKLQkJCWRvdWJsZSBhbmdsZSA9IGFyZ3Nb
MF0udG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgYW5nbGUgPSBhcmdzWzBdLT50b051bWJlcihl
eGVjKTsKIAkJCW9iai5zZXRTa2V3WChhbmdsZSk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJ
CX0KIAkJY2FzZSBTVkdUcmFuc2Zvcm1Db25zdGFudHM6OlNldFNrZXdZOgogCQl7Ci0JCQlkb3Vi
bGUgYW5nbGUgPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIGFuZ2xlID0gYXJn
c1swXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlvYmouc2V0U2tld1koYW5nbGUpOwogCQkJcmV0dXJu
IFVuZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RyYW5zZm9y
bS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHVHJhbnNmb3JtLmgKLS0tIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm0uaAk5IEp1bCAyMDA1IDA2
OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybS5oCTggQXVnIDIwMDUg
MDg6MjQ6NDcgLTAwMDAKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9C
QVNFQ0xBU1NfR0VUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybUxpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUcmFuc2Zv
cm1MaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR1RyYW5zZm9ybUxpc3QuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtTGlz
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUcmFu
c2Zvcm1MaXN0LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ4IC0wMDAwCkBAIC01OCw3ICs1OCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR1Ry
YW5zZm9ybUxpc3QiLCBTVkdUcmFuc2Zvcm1MaXN0UHJvdG8sIFNWR1RyYW5zZm9ybUxpc3RQcm90
b0Z1bmMpCiAKLVZhbHVlIFNWR1RyYW5zZm9ybUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHVHJhbnNmb3JtTGlzdDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlL
RE9NX0VOVEVSX1NBRkUKIApAQCAtNzQsNyArNzQsNyBAQCBWYWx1ZSBTVkdUcmFuc2Zvcm1MaXN0
OjpnZXRWYWx1ZVByb3BlcnR5CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdU
cmFuc2Zvcm1MaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybUxpc3RQcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR1RyYW5zZm9ybUxpc3QpCiAJS0RPTV9FTlRF
Ul9TQUZFCkBAIC05MywyNCArOTMsMjQgQEAgVmFsdWUgU1ZHVHJhbnNmb3JtTGlzdFByb3RvRnVu
Yzo6Y2FsbChFeAogCQl9CiAJCWNhc2UgU1ZHVHJhbnNmb3JtTGlzdENvbnN0YW50czo6R2V0SXRl
bToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7
CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQly
ZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdUcmFuc2Zvcm0+KGV4ZWMsIG9iai5nZXRJdGVtKGlu
ZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdUcmFuc2Zvcm1MaXN0Q29uc3RhbnRzOjpJbnNlcnRJdGVt
QmVmb3JlOgogCQl7CiAJCQlTVkdUcmFuc2Zvcm0gbmV3SXRlbSA9IEtET006OmVjbWFfY2FzdDxT
VkdUcmFuc2Zvcm0+KGV4ZWMsIGFyZ3NbMF0sICZ0b1NWR1RyYW5zZm9ybSk7Ci0JCQl1bnNpZ25l
ZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcg
aW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2Nh
Y2hlPFNWR1RyYW5zZm9ybT4oZXhlYywgb2JqLmluc2VydEl0ZW1CZWZvcmUobmV3SXRlbSwgaW5k
ZXgpKTsKIAkJfQogCQljYXNlIFNWR1RyYW5zZm9ybUxpc3RDb25zdGFudHM6OlJlcGxhY2VJdGVt
OgogCQl7CiAJCQlTVkdUcmFuc2Zvcm0gbmV3SXRlbSA9IEtET006OmVjbWFfY2FzdDxTVkdUcmFu
c2Zvcm0+KGV4ZWMsIGFyZ3NbMF0sICZ0b1NWR1RyYW5zZm9ybSk7Ci0JCQl1bnNpZ25lZCBsb25n
IGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXgg
PSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNW
R1RyYW5zZm9ybT4oZXhlYywgb2JqLnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0K
IAkJY2FzZSBTVkdUcmFuc2Zvcm1MaXN0Q29uc3RhbnRzOjpSZW1vdmVJdGVtOgogCQl7Ci0JCQl1
bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVk
IGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpz
YWZlX2NhY2hlPFNWR1RyYW5zZm9ybT4oZXhlYywgb2JqLnJlbW92ZUl0ZW0oaW5kZXgpKTsKIAkJ
fQogCQljYXNlIFNWR1RyYW5zZm9ybUxpc3RDb25zdGFudHM6OkFwcGVuZEl0ZW06CkluZGV4OiBr
c3ZnMi9kb20vU1ZHVHJhbnNmb3JtTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUcmFuc2Zvcm1MaXN0LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1MaXN0LmgK
LS0tIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1MaXN0LmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1MaXN0LmgJOCBBdWcgMjAwNSAwODoyNDo0
OCAtMDAwMApAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNt
YVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybWFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdUcmFuc2Zvcm1hYmxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybWFibGUuY3BwCi0tLSBrc3ZnMi9kb20vU1ZH
VHJhbnNmb3JtYWJsZS5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdUcmFuc2Zvcm1hYmxlLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ4IC0wMDAwCkBAIC00
MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZH
VHJhbnNmb3JtYWJsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm1hYmxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUcmFuc2Zvcm1hYmxlLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1h
YmxlLmgKLS0tIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1hYmxlLmgJOSBKdWwgMjAwNSAwNjo1NDo1
NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1hYmxlLmgJOCBBdWcgMjAwNSAw
ODoyNDo0OCAtMDAwMApAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzog
Ly8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVVJJUmVmZXJlbmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
VVJJUmVmZXJlbmNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR1VSSVJlZmVyZW5jZS5jcHAKLS0tIGtzdmcyL2RvbS9TVkdVUklSZWZl
cmVuY2UuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
VVJJUmVmZXJlbmNlLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ4IC0wMDAwCkBAIC0zNiw3ICszNiw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHVVJJUmVmZXJl
bmNlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKlNWR1VSSVJlZmVyZW5jZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIv
ZG9tL1NWR1VSSVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdVUklSZWZlcmVuY2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1VSSVJlZmVyZW5jZS5oCi0tLSBrc3Zn
Mi9kb20vU1ZHVVJJUmVmZXJlbmNlLmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdVUklSZWZlcmVuY2UuaAk4IEF1ZyAyMDA1IDA4OjI0OjQ4IC0wMDAwCkBA
IC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNl
Y3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1VzZUVsZW1l
bnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHVXNlRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdVc2VFbGVtZW50LmNwcAk5IEp1
bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1VzZUVsZW1lbnQuY3Bw
CTggQXVnIDIwMDUgMDg6MjQ6NDggLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtTVkc7CiAKIC8vIFRPRE86IGluc3RhbmNlUm9vdAkJU1ZHVXNlRWxlbWVudENvbnN0YW50
czo6SW5zdGFuY2VSb290CURvbnREZWxldGV8UmVhZE9ubHkKIAotVmFsdWUgU1ZHVXNlRWxlbWVu
dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpTVkdVc2VFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHVXNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdVc2VFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdVc2VFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdV
c2VFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9T
VkdVc2VFbGVtZW50LmgJOCBBdWcgMjAwNSAwODoyNDo0OCAtMDAwMApAQCAtNzMsNyArNzMsNyBA
QCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdW
aWV3RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR1ZpZXdFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1ZpZXdFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9t
L1NWR1ZpZXdFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR1ZpZXdFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ4IC0wMDAwCkBAIC0z
OSw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZH
Vmlld0VsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqU1ZHVmlld0VsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkluZGV4
OiBrc3ZnMi9kb20vU1ZHVmlld0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVmlld0VsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1ZpZXdFbGVtZW50LmgKLS0t
IGtzdmcyL2RvbS9TVkdWaWV3RWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHVmlld0VsZW1lbnQuaAk4IEF1ZyAyMDA1IDA4OjI0OjQ4IC0wMDAw
CkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9S
V0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRl
eDoga3N2ZzIvZG9tL1NWR1pvb21BbmRQYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdab29tQW5kUGFuLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1pvb21BbmRQYW4uY3Bw
Ci0tLSBrc3ZnMi9kb20vU1ZHWm9vbUFuZFBhbi5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdab29tQW5kUGFuLmNwcAk4IEF1ZyAyMDA1IDA4OjI0OjQ4
IC0wMDAwCkBAIC0zNSw3ICszNSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8K
IAotVmFsdWUgU1ZHWm9vbUFuZFBhbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdab29tQW5kUGFuOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FG
RQogCkBAIC01MSw3ICs1MSw3IEBAIFZhbHVlIFNWR1pvb21BbmRQYW46OmdldFZhbHVlUHJvcGVy
dHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHWm9vbUFuZFBhbjo6cHV0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZh
bHVlLCBpbnQpCit2b2lkIFNWR1pvb21BbmRQYW46OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJf
U0FGRQogCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgU1ZHWm9vbUFuZFBhbjo6cHV0VmFsdWVQcm9w
ZXJ0eShFeGUKIAl7CiAJCWNhc2UgU1ZHWm9vbUFuZFBhbkNvbnN0YW50czo6Wm9vbUFuZFBhbjoK
IAkJewotCQkJc2V0Wm9vbUFuZFBhbih2YWx1ZS50b1VJbnQxNihleGVjKSk7CisJCQlzZXRab29t
QW5kUGFuKHZhbHVlLT50b1VJbnQxNihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVs
dDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdab29tQW5kUGFuLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1pvb21BbmRQYW4uaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1pvb21BbmRQYW4u
aAotLS0ga3N2ZzIvZG9tL1NWR1pvb21BbmRQYW4uaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR1pvb21BbmRQYW4uaAk4IEF1ZyAyMDA1IDA4OjI0OjQ4IC0w
MDAwCkBAIC01NSw4ICs1NSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fQkFTRUNMQVNTX0dF
VAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBp
bnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0
dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9lY21hL0VjbWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2VjbWEvRWNtYS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2VjbWEvRWNtYS5jcHAKLS0t
IGtzdmcyL2VjbWEvRWNtYS5jcHAJOSBKdWwgMjAwNSAwNjo1NToyNyAtMDAwMAkxLjEKKysrIGtz
dmcyL2VjbWEvRWNtYS5jcHAJOCBBdWcgMjAwNSAwODoyNDo0OSAtMDAwMApAQCAtNDAzLDcgKzQw
Myw3IEBAIEtKUzo6T2JqZWN0SW1wICpFY21hOjppbmhlcml0ZWRHZXRET01DU1MKIAlyZXR1cm4g
MDsKIH0KIAotS0pTOjpWYWx1ZSBLU1ZHOjpnZXRTVkdQYXRoU2VnKEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBTVkdQYXRoU2VnIHMpCitLSlM6OlZhbHVlSW1wICpLU1ZHOjpnZXRTVkdQYXRoU2VnKEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBTVkdQYXRoU2VnIHMpCiB7CiAJaWYocyA9PSBTVkdQYXRoU2Vn
OjpudWxsKQogCQlyZXR1cm4gS0pTOjpOdWxsKCk7CkBAIC00MTUsNyArNDE1LDcgQEAgS0pTOjpW
YWx1ZSBLU1ZHOjpnZXRTVkdQYXRoU2VnKEtKUzo6RXhlYwogCS8vIFJldXNlIGV4aXN0aW5nIGJy
aWRnZSwgaWYgcG9zc2libGUKIAlLSlM6Ok9iamVjdEltcCAqcmVxdWVzdCA9IGludGVycHJldGVy
LT5nZXRET01PYmplY3Qocy5oYW5kbGUoKSk7CiAJaWYocmVxdWVzdCkKLQkJcmV0dXJuIEtKUzo6
VmFsdWUocmVxdWVzdCk7CisJCXJldHVybiByZXF1ZXN0OwogCQogCUtKUzo6T2JqZWN0SW1wICpy
ZXQgPSAwOwogCXVuc2lnbmVkIHNob3J0IHR5cGUgPSBzLnBhdGhTZWdUeXBlKCk7CkBAIC01MjIs
NyArNTIyLDcgQEAgS0pTOjpWYWx1ZSBLU1ZHOjpnZXRTVkdQYXRoU2VnKEtKUzo6RXhlYwogCX0K
IAogCWludGVycHJldGVyLT5wdXRET01PYmplY3Qocy5oYW5kbGUoKSwgcmV0KTsKLQlyZXR1cm4g
S0pTOjpWYWx1ZShyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIApJbmRleDoga3N2ZzIvZWNtYS9F
Y21hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZWNt
YS9FY21hLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2VjbWEvRWNtYS5oCi0tLSBrc3ZnMi9lY21hL0VjbWEuaAk5IEp1bCAyMDA1IDA2OjU1OjI4IC0w
MDAwCTEuMQorKysga3N2ZzIvZWNtYS9FY21hLmgJOCBBdWcgMjAwNSAwODoyNDo0OSAtMDAwMApA
QCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgS1NWRwogCiAJLy8gSGVscGVycwogCWNsYXNzIFNW
R1BhdGhTZWc7Ci0JS0pTOjpWYWx1ZSBnZXRTVkdQYXRoU2VnKEtKUzo6RXhlY1N0YXRlICpleGVj
LCBTVkdQYXRoU2VnIHMpOworCUtKUzo6VmFsdWVJbXAgKmdldFNWR1BhdGhTZWcoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIFNWR1BhdGhTZWcgcyk7CiB9OwogCiAjZW5kaWYKSW5kZXg6IGtzdmcyL2Vj
bWEvR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9lY21hL0dsb2JhbE9iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2VjbWEvR2xvYmFsT2JqZWN0LmNwcAotLS0ga3N2ZzIv
ZWNtYS9HbG9iYWxPYmplY3QuY3BwCTkgSnVsIDIwMDUgMDY6NTU6MjggLTAwMDAJMS4xCisrKyBr
c3ZnMi9lY21hL0dsb2JhbE9iamVjdC5jcHAJOCBBdWcgMjAwNSAwODoyNDo0OSAtMDAwMApAQCAt
NjIsMTIgKzYyLDEyIEBAIHZvaWQgR2xvYmFsT2JqZWN0OjphZnRlclRpbWVvdXQoKSBjb25zdAog
CQlkb2MoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CiB9CiAKLUtKUzo6VmFsdWUgR2xvYmFsT2JqZWN0
OjpnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcCkgY29u
c3QKK0tKUzo6VmFsdWVJbXAgKkdsb2JhbE9iamVjdDo6Z2V0KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnApIGNvbnN0CiB7CiAJa2REZWJ1ZygyNjAwNCkgPDwg
IktTVkc6Okdsb2JhbE9iamVjdCAoIiA8PCB0aGlzIDw8ICIpOjpnZXQgIiA8PCBwLnFzdHJpbmco
KSA8PCBlbmRsOwogCi0JS0pTOjpWYWx1ZSByZXQgPSBLRE9NOjpHbG9iYWxPYmplY3Q6OmdldChl
eGVjLCBwKTsKLQlpZihyZXQudHlwZSgpICE9IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwlLSlM6OlZh
bHVlSW1wICpyZXQgPSBLRE9NOjpHbG9iYWxPYmplY3Q6OmdldChleGVjLCBwKTsKKwlpZihyZXQt
PnR5cGUoKSAhPSBLSlM6OlVuZGVmaW5lZFR5cGUpCiAJCXJldHVybiByZXQ7CiAKIAljb25zdCBL
SlM6Okhhc2hFbnRyeSAqZW50cnkgPSBLSlM6Okxvb2t1cDo6ZmluZEVudHJ5KCZHbG9iYWxPYmpl
Y3Q6OnNfaGFzaFRhYmxlLCBwKTsKSW5kZXg6IGtzdmcyL2VjbWEvR2xvYmFsT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZWNtYS9HbG9iYWxP
YmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZWNtYS9HbG9iYWxPYmplY3QuaAotLS0ga3N2ZzIvZWNtYS9HbG9iYWxPYmplY3QuaAk5IEp1bCAy
MDA1IDA2OjU1OjI4IC0wMDAwCTEuMQorKysga3N2ZzIvZWNtYS9HbG9iYWxPYmplY3QuaAk4IEF1
ZyAyMDA1IDA4OjI0OjQ5IC0wMDAwCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJ
CXZpcnR1YWwgfkdsb2JhbE9iamVjdCgpOwogCiAJCXZpcnR1YWwgdm9pZCBhZnRlclRpbWVvdXQo
KSBjb25zdDsKLQkJdmlydHVhbCBLSlM6OlZhbHVlIGdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworCQl2aXJ0dWFsIEtK
Uzo6VmFsdWVJbXAgKmdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OwogCiAJCS8vIEVjbWFTY3JpcHQgc3BlY2lmaWMgc3R1
ZmYgLSBvbmx5IG5lZWRlZCBmb3IgR2xvYmFsT2JqZWN0CiAJCS8vIFlvdSB3b24ndCBmaW5kIGl0
IGluICJnZW5lcmFsIiBrZG9tIGVjbWEgY29kZS4uLgpJbmRleDoga3N2ZzIvZXZlbnRzL1NWR0V2
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9l
dmVudHMvU1ZHRXZlbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9ldmVudHMvU1ZHRXZlbnQuY3BwCi0tLSBrc3ZnMi9ldmVudHMvU1ZHRXZlbnQu
Y3BwCTkgSnVsIDIwMDUgMDY6NTU6MjkgLTAwMDAJMS4xCisrKyBrc3ZnMi9ldmVudHMvU1ZHRXZl
bnQuY3BwCTggQXVnIDIwMDUgMDg6MjQ6NDkgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdFdmVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdFdmVu
dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsK
IAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZXZlbnRzL1NWR0V2ZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZXZlbnRzL1NWR0V2ZW50
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2V2ZW50
cy9TVkdFdmVudC5oCi0tLSBrc3ZnMi9ldmVudHMvU1ZHRXZlbnQuaAk5IEp1bCAyMDA1IDA2OjU1
OjI5IC0wMDAwCTEuMQorKysga3N2ZzIvZXZlbnRzL1NWR0V2ZW50LmgJOCBBdWcgMjAwNSAwODoy
NDo0OSAtMDAwMApAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAog
CQlLRE9NX0ZPUldBUkRQVVQKIAkJCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9
OwogfTsKIApJbmRleDoga3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2V2ZW50
cy9TVkdab29tRXZlbnQuY3BwCi0tLSBrc3ZnMi9ldmVudHMvU1ZHWm9vbUV2ZW50LmNwcAk5IEp1
bCAyMDA1IDA2OjU1OjI5IC0wMDAwCTEuMQorKysga3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5j
cHAJOCBBdWcgMjAwNSAwODoyNDo0OSAtMDAwMApAQCAtNDMsNyArNDMsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1pvb21FdmVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdab29t
RXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9ldmVudHMv
U1ZHWm9vbUV2ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuaAotLS0ga3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVu
dC5oCTkgSnVsIDIwMDUgMDY6NTU6MjkgLTAwMDAJMS4xCisrKyBrc3ZnMi9ldmVudHMvU1ZHWm9v
bUV2ZW50LmgJOCBBdWcgMjAwNSAwODoyNDo0OSAtMDAwMApAQCAtNjAsNyArNjAsNyBAQCBuYW1l
c3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2ltcGwvU1ZHU2NyaXB0
RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2ltcGwvU1ZHU2NyaXB0RWxlbWVudEltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9pbXBsL1NWR1NjcmlwdEVsZW1lbnRJbXBsLmNw
cAotLS0ga3N2ZzIvaW1wbC9TVkdTY3JpcHRFbGVtZW50SW1wbC5jcHAJOSBKdWwgMjAwNSAwNjo1
NTo0MSAtMDAwMAkxLjEKKysrIGtzdmcyL2ltcGwvU1ZHU2NyaXB0RWxlbWVudEltcGwuY3BwCTgg
QXVnIDIwMDUgMDg6MjQ6NTAgLTAwMDAKQEAgLTg5LDE0ICs4OSwxNCBAQCB2b2lkIFNWR1Njcmlw
dEVsZW1lbnRJbXBsOjpleGVjdXRlU2NyaXB0CiAJaWYoY29tcC5jb21wbFR5cGUoKSA9PSBLSlM6
OlRocm93KQogCXsKIAkJS0pTOjpFeGVjU3RhdGUgKmV4ZWMgPSBlY21hRW5naW5lLT5nbG9iYWxF
eGVjKCk7Ci0JCUtKUzo6VmFsdWUgZXhWYWwgPSBjb21wLnZhbHVlKCk7CisJCUtKUzo6VmFsdWVJ
bXAgKmV4VmFsID0gY29tcC52YWx1ZSgpOwogCiAJCWludCBsaW5lbm8gPSAtMTsKLQkJaWYoZXhW
YWwudHlwZSgpID09IEtKUzo6T2JqZWN0VHlwZSkKKwkJaWYoZXhWYWwtPmlzT2JqZWN0KCkpCiAJ
CXsKLQkJCUtKUzo6VmFsdWUgbGluZVZhbCA9IEtKUzo6T2JqZWN0OjpkeW5hbWljQ2FzdChleFZh
bCkuZ2V0KGV4ZWMsICJsaW5lIik7Ci0JCQlpZihsaW5lVmFsLnR5cGUoKSA9PSBLSlM6Ok51bWJl
clR5cGUpCi0JCQkJbGluZW5vID0gaW50KGxpbmVWYWwudG9OdW1iZXIoZXhlYykpOworCQkJS0pT
OjpWYWx1ZUltcCAqbGluZVZhbCA9IHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KGV4VmFs
KS0+Z2V0KGV4ZWMsICJsaW5lIik7CisJCQlpZihsaW5lVmFsLT50eXBlKCkgPT0gS0pTOjpOdW1i
ZXJUeXBlKQorCQkJCWxpbmVubyA9IGludChsaW5lVmFsLT50b051bWJlcihleGVjKSk7CiAJCX0K
IAogCQkvLyBGaXJlIEVSUk9SX0VWRU5UIHVwb24gZXJyb3JzLi4uCkBAIC0xMTIsMTAgKzExMiwx
MCBAQCB2b2lkIFNWR1NjcmlwdEVsZW1lbnRJbXBsOjpleGVjdXRlU2NyaXB0CiAJCQlldmVudC0+
ZGVyZWYoKTsKIAkJfQogCi0JCWtkRGVidWcoKSA8PCAiW1NWR1NjcmlwdEVsZW1lbnRdIEV2YWx1
YXRpb24gZXJyb3IsIGxpbmUgIiA8PCAobGluZW5vICE9IC0xID8gUVN0cmluZzo6bnVtYmVyKGxp
bmVubykgOiBRU3RyaW5nOjpmcm9tTGF0aW4xKCJOL0EiKSkgIDw8ICIgIiA8PCBleFZhbC50b1N0
cmluZyhleGVjKS5xc3RyaW5nKCkgPDwgZW5kbDsKKwkJa2REZWJ1ZygpIDw8ICJbU1ZHU2NyaXB0
RWxlbWVudF0gRXZhbHVhdGlvbiBlcnJvciwgbGluZSAiIDw8IChsaW5lbm8gIT0gLTEgPyBRU3Ry
aW5nOjpudW1iZXIobGluZW5vKSA6IFFTdHJpbmc6OmZyb21MYXRpbjEoIk4vQSIpKSAgPDwgIiAi
IDw8IGV4VmFsLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkgPDwgZW5kbDsKIAl9CiAJZWxzZSBp
Zihjb21wLmNvbXBsVHlwZSgpID09IEtKUzo6UmV0dXJuVmFsdWUpCi0JCWtkRGVidWcoKSA8PCAi
W1NWR1NjcmlwdEVsZW1lbnRdIFJldHVybiB2YWx1ZTogIiA8PCBjb21wLnZhbHVlKCkudG9TdHJp
bmcoZWNtYUVuZ2luZS0+Z2xvYmFsRXhlYygpKS5xc3RyaW5nKCkgPDwgZW5kbDsKKwkJa2REZWJ1
ZygpIDw8ICJbU1ZHU2NyaXB0RWxlbWVudF0gUmV0dXJuIHZhbHVlOiAiIDw8IGNvbXAudmFsdWUo
KS0+dG9TdHJpbmcoZWNtYUVuZ2luZS0+Z2xvYmFsRXhlYygpKS5xc3RyaW5nKCkgPDwgZW5kbDsK
IAllbHNlIGlmKGNvbXAuY29tcGxUeXBlKCkgPT0gS0pTOjpOb3JtYWwpCiAJCWtkRGVidWcoKSA8
PCAiW1NWR1NjcmlwdEVsZW1lbnRdIEV2YWx1YXRlZCBlY21hIHNjcmlwdCEiIDw8IGVuZGw7CiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3277</attachid>
            <date>2005-08-08 02:22:37 -0700</date>
            <delta_ts>2005-08-08 11:24:24 -0700</delta_ts>
            <desc>Should be a complete fix.</desc>
            <filename>startofkdomfix.patch</filename>
            <type>text/plain</type>
            <size>655428</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtkb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9BdHRyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS9BdHRyLmNwcAotLS0ga2RvbS9BdHRyLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjIz
IC0wMDAwCTEuMQorKysga2RvbS9BdHRyLmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjM3IC0wMDAwCkBA
IC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBB
dHRyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKkF0dHI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY5LDcgKzY5LDcgQEAgVmFsdWUg
QXR0cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKgogCXJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotdm9pZCBBdHRyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgQXR0cjo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20vQXR0ci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vQXR0ci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0F0dHIuaAotLS0ga2RvbS9BdHRyLmgJOSBKdWwgMjAw
NSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vQXR0ci5oCTggQXVnIDIwMDUgMDk6MDI6Mzcg
LTAwMDAKQEAgLTE1MCw4ICsxNTAsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX1BVVAogCQlL
RE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0
dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsK
IAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChBdHRyKQpJbmRleDoga2RvbS9DaGFyYWN0ZXJEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0NoYXJh
Y3RlckRhdGEuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
ZG9tL0NoYXJhY3RlckRhdGEuY3BwCi0tLSBrZG9tL0NoYXJhY3RlckRhdGEuY3BwCTkgSnVsIDIw
MDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9tL0NoYXJhY3RlckRhdGEuY3BwCTggQXVnIDIw
MDUgMDk6MDI6MzcgLTAwMDAKQEAgLTQ3LDcgKzQ3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsK
IAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDaGFyYWN0ZXJEYXRhIiwgQ2hhcmFjdGVyRGF0
YVByb3RvLCBDaGFyYWN0ZXJEYXRhUHJvdG9GdW5jKQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkNoYXJhY3RlckRhdGE6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkBAIC02NSw3ICs2NSw3IEBAIFZh
bHVlIENoYXJhY3RlckRhdGE6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLXZvaWQgQ2hhcmFjdGVyRGF0YTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENoYXJhY3Rl
ckRhdGE6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC04NCw3ICs4NCw3IEBA
IHZvaWQgQ2hhcmFjdGVyRGF0YTo6cHV0VmFsdWVQcm9wZXJ0eShFeGUKIAlLRE9NX0xFQVZFX1NB
RkUoRE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhUHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKkNoYXJhY3RlckRhdGFQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKENo
YXJhY3RlckRhdGEpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC05OSw4ICs5OSw4IEBAIFZhbHVlIENo
YXJhY3RlckRhdGFQcm90b0Z1bmM6OmNhbGwoRXhlY1MKIAkJfQogCQljYXNlIENoYXJhY3RlckRh
dGFDb25zdGFudHM6OlN1YnN0cmluZ0RhdGE6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0
ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKLQkJCXVuc2lnbmVkIGxvbmcgY291bnQgPSBhcmdz
WzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBhcmdzWzBdLT50
b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgY291bnQgPSBhcmdzWzFdLT50b1VJbnQz
MihleGVjKTsKIAkJCXJldHVybiBnZXRET01TdHJpbmcob2JqLnN1YnN0cmluZ0RhdGEob2Zmc2V0
LCBjb3VudCkpOwogCQl9CiAJCWNhc2UgQ2hhcmFjdGVyRGF0YUNvbnN0YW50czo6QXBwZW5kRGF0
YToKQEAgLTExMSwyMiArMTExLDIyIEBAIFZhbHVlIENoYXJhY3RlckRhdGFQcm90b0Z1bmM6OmNh
bGwoRXhlY1MKIAkJfQogCQljYXNlIENoYXJhY3RlckRhdGFDb25zdGFudHM6Okluc2VydERhdGE6
CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsK
KwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlE
T01TdHJpbmcgYXJnID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1sxXSk7CiAJCQlvYmouaW5zZXJ0
RGF0YShvZmZzZXQsIGFyZyk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBD
aGFyYWN0ZXJEYXRhQ29uc3RhbnRzOjpEZWxldGVEYXRhOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25n
IG9mZnNldCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7Ci0JCQl1bnNpZ25lZCBsb25nIGNvdW50
ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJn
c1swXS0+dG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGNvdW50ID0gYXJnc1sxXS0+
dG9VSW50MzIoZXhlYyk7CiAJCQlvYmouZGVsZXRlRGF0YShvZmZzZXQsIGNvdW50KTsKIAkJCXJl
dHVybiBVbmRlZmluZWQoKTsKIAkJfQogCQljYXNlIENoYXJhY3RlckRhdGFDb25zdGFudHM6OlJl
cGxhY2VEYXRhOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0udG9VSW50
MzIoZXhlYyk7Ci0JCQl1bnNpZ25lZCBsb25nIGNvdW50ID0gYXJnc1sxXS50b1VJbnQzMihleGVj
KTsKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CisJ
CQl1bnNpZ25lZCBsb25nIGNvdW50ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlET01T
dHJpbmcgYXJnID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1syXSk7CiAJCQlvYmoucmVwbGFjZURh
dGEob2Zmc2V0LCBjb3VudCwgYXJnKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKSW5kZXg6IGtk
b20vQ2hhcmFjdGVyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vQ2hhcmFjdGVyRGF0YS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrZG9tL0NoYXJhY3RlckRhdGEuaAotLS0ga2RvbS9DaGFyYWN0ZXJEYXRhLmgJ
OSBKdWwgMjAwNSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vQ2hhcmFjdGVyRGF0YS5oCTgg
QXVnIDIwMDUgMDk6MDI6MzcgLTAwMDAKQEAgLTE0MCw4ICsxNDAsOCBAQCBuYW1lc3BhY2UgS0RP
TQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFs
dWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2
YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrZG9tL0RPTUNvbmZpZ3VyYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NQ29u
ZmlndXJhdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtkb20vRE9NQ29uZmlndXJhdGlvbi5jcHAKLS0tIGtkb20vRE9NQ29uZmlndXJhdGlvbi5jcHAJ
OSBKdWwgMjAwNSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vRE9NQ29uZmlndXJhdGlvbi5j
cHAJOCBBdWcgMjAwNSAwOTowMjozOCAtMDAwMApAQCAtNDcsNyArNDcsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkRPTUNvbmZpZ3VyYXRpb24i
LCBET01Db25maWd1cmF0aW9uUHJvdG8sIERPTUNvbmZpZ3VyYXRpb25Qcm90b0Z1bmMpCiAKLVZh
bHVlIERPTUNvbmZpZ3VyYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NQ29uZmlndXJhdGlvbjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NB
RkUKIApAQCAtNjMsNyArNjMsNyBAQCBWYWx1ZSBET01Db25maWd1cmF0aW9uOjpnZXRWYWx1ZVBy
b3BlcnR5CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBET01Db25maWd1cmF0aW9u
UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTUNvbmZpZ3VyYXRpb25Qcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJ
S0RPTV9DSEVDS19USElTKERPTUNvbmZpZ3VyYXRpb24pCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03
Myw3ICs3Myw3IEBAIFZhbHVlIERPTUNvbmZpZ3VyYXRpb25Qcm90b0Z1bmM6OmNhbGwoRXgKIAkJ
Y2FzZSBET01Db25maWd1cmF0aW9uQ29uc3RhbnRzOjpTZXRQYXJhbWV0ZXI6CiAJCXsKIAkJCURP
TVN0cmluZyBuYW1lID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIHZhbHVl
ID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIHZhbHVlID0gYXJnc1sxXS0+dG9C
b29sZWFuKGV4ZWMpOwogLy8JCQlET01Vc2VyRGF0YSB2YWx1ZSA9IGVjbWFfY2FzdDxET01Vc2Vy
RGF0YT4oZXhlYywgYXJnc1sxXSwgJnRvRE9NVXNlckRhdGEpOwogCQkJb2JqLnNldFBhcmFtZXRl
cihuYW1lLCB2YWx1ZSk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CkluZGV4OiBrZG9tL0RPTUNv
bmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL0RPTUNvbmZpZ3VyYXRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga2RvbS9ET01Db25maWd1cmF0aW9uLmgKLS0tIGtkb20vRE9NQ29uZmlndXJhdGlv
bi5oCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9tL0RPTUNvbmZpZ3VyYXRp
b24uaAk4IEF1ZyAyMDA1IDA5OjAyOjM4IC0wMDAwCkBAIC0xNjMsNyArMTYzLDcgQEAgbmFtZXNw
YWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFT
U19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6
IGtkb20vRE9NRXJyb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vRE9NRXJyb3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrZG9tL0RPTUVycm9yLmNwcAotLS0ga2RvbS9ET01FcnJvci5jcHAJOSBKdWwgMjAw
NSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vRE9NRXJyb3IuY3BwCTggQXVnIDIwMDUgMDk6
MDI6MzggLTAwMDAKQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQK
ICovCiAKLVZhbHVlIERPTUVycm9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUVycm9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCklu
ZGV4OiBrZG9tL0RPTUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9ET01FcnJvci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrZG9tL0RPTUVycm9yLmgKLS0tIGtkb20vRE9NRXJyb3IuaAk5IEp1bCAyMDA1IDA2
OjUzOjIzIC0wMDAwCTEuMQorKysga2RvbS9ET01FcnJvci5oCTggQXVnIDIwMDUgMDk6MDI6Mzgg
LTAwMDAKQEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNt
YVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChET01FcnJvcikKSW5kZXg6
IGtkb20vRE9NRXJyb3JIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL0RPTUVycm9ySGFuZGxlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9NRXJyb3JIYW5kbGVyLmNwcAotLS0ga2RvbS9E
T01FcnJvckhhbmRsZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9t
L0RPTUVycm9ySGFuZGxlci5jcHAJOCBBdWcgMjAwNSAwOTowMjozOCAtMDAwMApAQCAtNDYsNyAr
NDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUo
IkRPTUVycm9ySGFuZGxlciIsIERPTUVycm9ySGFuZGxlclByb3RvLCBET01FcnJvckhhbmRsZXJQ
cm90b0Z1bmMpCiAKLVZhbHVlIERPTUVycm9ySGFuZGxlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpET01FcnJvckhhbmRsZXI6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYwLDcgKzYwLDcgQEAgVmFsdWUgRE9NRXJyb3JIYW5kbGVy
OjpnZXRWYWx1ZVByb3BlcnR5KAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgRE9N
RXJyb3JIYW5kbGVyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTUVycm9ySGFuZGxlclByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoRE9NRXJyb3JIYW5kbGVyKQogCUtET01fRU5URVJf
U0FGRQpJbmRleDoga2RvbS9ET01FcnJvckhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTUVycm9ySGFuZGxlci5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUVycm9ySGFuZGxlci5oCi0tLSBr
ZG9tL0RPTUVycm9ySGFuZGxlci5oCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBr
ZG9tL0RPTUVycm9ySGFuZGxlci5oCTggQXVnIDIwMDUgMDk6MDI6MzggLTAwMDAKQEAgLTU1LDcg
KzU1LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgog
CQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtkb20vRE9NRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTUV4Y2VwdGlvbi5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9NRXhjZXB0aW9uLmNwcAotLS0g
a2RvbS9ET01FeGNlcHRpb24uY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBr
ZG9tL0RPTUV4Y2VwdGlvbi5jcHAJOCBBdWcgMjAwNSAwOTowMjozOCAtMDAwMApAQCAtMzQsNyAr
MzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgRE9NRXhjZXB0
aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqRE9NRXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtkb20vRE9NRXhjZXB0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ET01FeGNl
cHRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9E
T01FeGNlcHRpb24uaAotLS0ga2RvbS9ET01FeGNlcHRpb24uaAk5IEp1bCAyMDA1IDA2OjUzOjI0
IC0wMDAwCTEuMQorKysga2RvbS9ET01FeGNlcHRpb24uaAk4IEF1ZyAyMDA1IDA5OjAyOjM4IC0w
MDAwCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2Ny
aXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NSW1wbGVtZW50YXRpb24uY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUltcGxl
bWVudGF0aW9uLmNwcAotLS0ga2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJOSBKdWwgMjAwNSAw
Njo1MzoyNCAtMDAwMAkxLjEKKysrIGtkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCTggQXVnIDIw
MDUgMDk6MDI6MzggLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsK
IAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJET01JbXBsZW1lbnRhdGlvbiIsIERPTUltcGxl
bWVudGF0aW9uUHJvdG8sIERPTUltcGxlbWVudGF0aW9uUHJvdG9GdW5jKQogCi1WYWx1ZSBET01J
bXBsZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpET01JbXBsZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApA
QCAtNzQsNyArNzQsNyBAQCBWYWx1ZSBET01JbXBsZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0
CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBET01JbXBsZW1lbnRhdGlvblByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKK1ZhbHVlSW1wICpET01JbXBsZW1lbnRhdGlvblByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9N
X0NIRUNLX1RISVMoRE9NSW1wbGVtZW50YXRpb24pCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC0xMjMs
NyArMTIzLDcgQEAgVmFsdWUgRE9NSW1wbGVtZW50YXRpb25Qcm90b0Z1bmM6OmNhbGwoRQogCQl9
CiAJCWNhc2UgRE9NSW1wbGVtZW50YXRpb25Db25zdGFudHM6OkNyZWF0ZUxTUGFyc2VyOgogCQl7
Ci0JCQl1bnNpZ25lZCBzaG9ydCBtb2RlID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVu
c2lnbmVkIHNob3J0IG1vZGUgPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCURPTVN0cmlu
ZyBzY2hlbWFUeXBlID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1sxXSk7CiAJCQlyZXR1cm4gc2Fm
ZV9jYWNoZTxMU1BhcnNlcj4oZXhlYywgb2JqLmNyZWF0ZUxTUGFyc2VyKG1vZGUsIHNjaGVtYVR5
cGUpKTsKIAkJfQpJbmRleDoga2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NSW1wbGVtZW50YXRpb24uaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01JbXBsZW1lbnRh
dGlvbi5oCi0tLSBrZG9tL0RPTUltcGxlbWVudGF0aW9uLmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAt
MDAwMAkxLjEKKysrIGtkb20vRE9NSW1wbGVtZW50YXRpb24uaAk4IEF1ZyAyMDA1IDA5OjAyOjM4
IC0wMDAwCkBAIC0xNTQsNyArMTU0LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVj
bWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ET01Mb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTUxvY2F0b3IuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUxvY2F0b3IuY3BwCi0t
LSBrZG9tL0RPTUxvY2F0b3IuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBr
ZG9tL0RPTUxvY2F0b3IuY3BwCTggQXVnIDIwMDUgMDk6MDI6MzggLTAwMDAKQEAgLTQyLDcgKzQy
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIERPTUxvY2F0b3I6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqRE9NTG9jYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9ET01Mb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ET01Mb2Nh
dG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9N
TG9jYXRvci5oCi0tLSBrZG9tL0RPTUxvY2F0b3IuaAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAw
CTEuMQorKysga2RvbS9ET01Mb2NhdG9yLmgJOCBBdWcgMjAwNSAwOTowMjozOCAtMDAwMApAQCAt
OTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0
aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ET01TdHJpbmdMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTVN0cmluZ0xpc3QuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTVN0cmluZ0xpc3Qu
Y3BwCi0tLSBrZG9tL0RPTVN0cmluZ0xpc3QuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJ
MS4xCisrKyBrZG9tL0RPTVN0cmluZ0xpc3QuY3BwCTggQXVnIDIwMDUgMDk6MDI6MzkgLTAwMDAK
QEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRf
UFJPVE9UWVBFKCJET01TdHJpbmdMaXN0IiwgRE9NU3RyaW5nTGlzdFByb3RvLCBET01TdHJpbmdM
aXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBET01TdHJpbmdMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTVN0cmluZ0xpc3Q6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYwLDcgKzYwLDcgQEAgVmFsdWUgRE9NU3RyaW5nTGlzdDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgRE9N
U3RyaW5nTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01TdHJpbmdMaXN0UHJvdG9GdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQogewogCUtET01fQ0hFQ0tfVEhJUyhET01TdHJpbmdMaXN0KQogCUtET01fRU5URVJfU0FGRQpA
QCAtNjksNyArNjksNyBAQCBWYWx1ZSBET01TdHJpbmdMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNT
CiAJewogCQljYXNlIERPTVN0cmluZ0xpc3RDb25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2ln
bmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTVN0cmlu
ZyhvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgRE9NU3RyaW5nTGlzdENvbnN0YW50czo6
Q29udGFpbnM6CkluZGV4OiBrZG9tL0RPTVN0cmluZ0xpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTVN0cmluZ0xpc3QuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01TdHJpbmdMaXN0LmgKLS0tIGtk
b20vRE9NU3RyaW5nTGlzdC5oCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9t
L0RPTVN0cmluZ0xpc3QuaAk4IEF1ZyAyMDA1IDA5OjAyOjM5IC0wMDAwCkBAIC04Nyw3ICs4Nyw3
IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RP
TV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrZG9tL0RPTVVzZXJEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTVVzZXJEYXRhLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01Vc2VyRGF0YS5jcHAKLS0tIGtkb20vRE9N
VXNlckRhdGEuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9tL0RPTVVz
ZXJEYXRhLmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjM5IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBET01Vc2VyRGF0YTo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpE
T01Vc2VyRGF0YTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9ET01Vc2VyRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NVXNlckRhdGEu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01Vc2Vy
RGF0YS5oCi0tLSBrZG9tL0RPTVVzZXJEYXRhLmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAtMDAwMAkx
LjEKKysrIGtkb20vRE9NVXNlckRhdGEuaAk4IEF1ZyAyMDA1IDA5OjAyOjM5IC0wMDAwCkBAIC01
Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9N
X0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIAogCUtET01fREVG
SU5FX0NBU1QoRE9NVXNlckRhdGEpCkluZGV4OiBrZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RvY3VtZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9Eb2N1bWVudC5jcHAKLS0t
IGtkb20vRG9jdW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9t
L0RvY3VtZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjM5IC0wMDAwCkBAIC05NCw3ICs5NCw3IEBA
IG5hbWVzcGFjZSBLRE9NCiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiRG9jdW1lbnQiLCBE
b2N1bWVudFByb3RvLCBEb2N1bWVudFByb3RvRnVuYykKIAotVmFsdWUgRG9jdW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
RG9jdW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTEyOCwyMCArMTI4LDIwIEBAIFZhbHVlIERv
Y3VtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9
OwogCi12b2lkIERvY3VtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgRG9jdW1lbnQ6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50
KQogewogCUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBEb2N1
bWVudENvbnN0YW50czo6WG1sU3RhbmRhbG9uZToKLQkJCXNldFhtbFN0YW5kYWxvbmUodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsKKwkJCXNldFhtbFN0YW5kYWxvbmUodmFsdWUtPnRvQm9vbGVhbihl
eGVjKSk7CiAJCQlicmVhazsKIAkJY2FzZSBEb2N1bWVudENvbnN0YW50czo6WG1sVmVyc2lvbjoK
IAkJCXNldFhtbFZlcnNpb24odG9ET01TdHJpbmcoZXhlYywgdmFsdWUpKTsKIAkJCWJyZWFrOwog
CQljYXNlIERvY3VtZW50Q29uc3RhbnRzOjpTdHJpY3RFcnJvckNoZWNraW5nOgotCQkJc2V0U3Ry
aWN0RXJyb3JDaGVja2luZyh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworCQkJc2V0U3RyaWN0RXJy
b3JDaGVja2luZyh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQljYXNlIERv
Y3VtZW50Q29uc3RhbnRzOjpEb2N1bWVudFVSSToKIAkJCXNldERvY3VtZW50VVJJKHRvRE9NU3Ry
aW5nKGV4ZWMsIHZhbHVlKSk7CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBEb2N1bWVudDo6cHV0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdAogCUtET01fTEVBVkVfU0FGRShET01FeGNlcHRpb24pCiB9
CiAKLVZhbHVlIERvY3VtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRvY3VtZW50UHJvdG9GdW5j
OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhEb2N1bWVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAg
LTIwNiw3ICsyMDYsNyBAQCBWYWx1ZSBEb2N1bWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
CiAJCWNhc2UgRG9jdW1lbnRDb25zdGFudHM6OkltcG9ydE5vZGU6CiAJCXsKIAkJCU5vZGUgaW1w
b3J0ZWROb2RlID0gZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFyZ3NbMF0sICZ0b05vZGUpOwotCQkJ
Ym9vbCBkZWVwID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGRlZXAgPSBhcmdz
WzFdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBvYmouaW1w
b3J0Tm9kZShpbXBvcnRlZE5vZGUsIGRlZXApKTsKIAkJfQogCQljYXNlIERvY3VtZW50Q29uc3Rh
bnRzOjpOb3JtYWxpemVEb2N1bWVudDoKSW5kZXg6IGtkb20vRG9jdW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RvY3VtZW50LmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vRG9jdW1lbnQuaAotLS0ga2Rv
bS9Eb2N1bWVudC5oCTcgQXVnIDIwMDUgMDY6MTc6NDMgLTAwMDAJMS4yCisrKyBrZG9tL0RvY3Vt
ZW50LmgJOCBBdWcgMjAwNSAwOTowMjozOSAtMDAwMApAQCAtNDE3LDggKzQxNyw4IEBAIG5hbWVz
cGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lk
IHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
S0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsJCQorCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lk
IHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsJCQogCX07CiB9CiAKSW5kZXg6IGtkb20vRG9jdW1l
bnRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9t
L0RvY3VtZW50VHlwZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vRG9jdW1lbnRUeXBlLmNwcAotLS0ga2RvbS9Eb2N1bWVudFR5cGUuY3BwCTkgSnVs
IDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9tL0RvY3VtZW50VHlwZS5jcHAJOCBBdWcg
MjAwNSAwOTowMjo0MCAtMDAwMApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pT
OwogQGVuZAogKi8KIAotVmFsdWUgRG9jdW1lbnRUeXBlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50VHlwZTo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9Eb2N1bWVudFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RvY3VtZW50VHlwZS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RvY3VtZW50VHlwZS5oCi0tLSBr
ZG9tL0RvY3VtZW50VHlwZS5oCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9t
L0RvY3VtZW50VHlwZS5oCTggQXVnIDIwMDUgMDk6MDI6NDAgLTAwMDAKQEAgLTExNyw3ICsxMTcs
NyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0ZPUldBUkRQVVQKIAkJS0RPTV9DQVNUCiAKLQkJ
S0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKERv
Y3VtZW50VHlwZSkKSW5kZXg6IGtkb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9FbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9FbGVtZW50LmNwcAotLS0ga2RvbS9FbGVtZW50
LmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAwCTEuMQorKysga2RvbS9FbGVtZW50LmNwcAk4
IEF1ZyAyMDA1IDA5OjAyOjQwIC0wMDAwCkBAIC02Nyw3ICs2Nyw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiRWxlbWVudCIsIEVsZW1lbnRQcm90
bywgRWxlbWVudFByb3RvRnVuYykKIAotVmFsdWUgRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpFbGVtZW50OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01f
RU5URVJfU0FGRQogCkBAIC04NSw3ICs4NSw3IEBAIFZhbHVlIEVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEVsZW1lbnRQ
cm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCitWYWx1ZUltcCAqRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNL
X1RISVMoRWxlbWVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTE4Miw3ICsxODIsNyBAQCBWYWx1
ZSBFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqCiAJCWNhc2UgRWxlbWVudENvbnN0
YW50czo6U2V0SWRBdHRyaWJ1dGU6CiAJCXsKIAkJCURPTVN0cmluZyBuYW1lID0gdG9ET01TdHJp
bmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIGlzSWQgPSBhcmdzWzFdLnRvQm9vbGVhbihleGVj
KTsKKwkJCWJvb2wgaXNJZCA9IGFyZ3NbMV0tPnRvQm9vbGVhbihleGVjKTsKIAkJCW9iai5zZXRJ
ZEF0dHJpYnV0ZShuYW1lLCBpc0lkKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpAQCAt
MTkwLDE0ICsxOTAsMTQgQEAgVmFsdWUgRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KgogCQl7CiAJCQlET01TdHJpbmcgbmFtZXNwYWNlVVJJID0gdG9ET01TdHJpbmcoZXhlYywgYXJn
c1swXSk7CiAJCQlET01TdHJpbmcgbG9jYWxOYW1lID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1sx
XSk7Ci0JCQlib29sIGlzSWQgPSBhcmdzWzJdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgaXNJ
ZCA9IGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKTsKIAkJCW9iai5zZXRJZEF0dHJpYnV0ZU5TKG5h
bWVzcGFjZVVSSSwgbG9jYWxOYW1lLCBpc0lkKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJ
fQogCQljYXNlIEVsZW1lbnRDb25zdGFudHM6OlNldElkQXR0cmlidXRlTm9kZToKIAkJewogCQkJ
QXR0ciBpZEF0dHIgPSBlY21hX2Nhc3Q8QXR0cj4oZXhlYywgYXJnc1swXSwgJnRvQXR0cik7Ci0J
CQlib29sIGlzSWQgPSBhcmdzWzFdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgaXNJZCA9IGFy
Z3NbMV0tPnRvQm9vbGVhbihleGVjKTsKIAkJCW9iai5zZXRJZEF0dHJpYnV0ZU5vZGUoaWRBdHRy
LCBpc0lkKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpJbmRleDoga2RvbS9FbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9FbGVtZW50
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRWxlbWVu
dC5oCi0tLSBrZG9tL0VsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAwCTEuMQorKysg
a2RvbS9FbGVtZW50LmgJOCBBdWcgMjAwNSAwOTowMjo0MCAtMDAwMApAQCAtMTAyLDcgKzEwMiw3
IEBAIG5hbWVzcGFjZSBLRE9NCiAJCSAqIHNldEF0dHJpYnV0ZU5TIG1ldGhvZC4KIAkJICoKIAkJ
ICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBjcmVhdGUgb3IgYWx0
ZXIuCi0JCSAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBzZXQgaW4gc3RyaW5nIGZvcm0uCisJCSAq
IEBwYXJhbSB2YWx1ZSBWYWx1ZUltcCAqdG8gc2V0IGluIHN0cmluZyBmb3JtLgogCQkgKi8KIAkJ
dm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgRE9NU3RyaW5nICZuYW1lLCBjb25zdCBET01TdHJpbmcg
JnZhbHVlKTsKIApAQCAtMzQ4LDcgKzM0OCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VU
CiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9
OwogfTsKIApJbmRleDoga2RvbS9FbnRpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vRW50aXR5LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga2RvbS9FbnRpdHkuY3BwCi0tLSBrZG9tL0VudGl0eS5jcHAJOSBK
dWwgMjAwNSAwNjo1MzoyNCAtMDAwMAkxLjEKKysrIGtkb20vRW50aXR5LmNwcAk4IEF1ZyAyMDA1
IDA5OjAyOjQwIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBA
ZW5kCiAqLwogCi1WYWx1ZSBFbnRpdHk6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRW50aXR5OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCklu
ZGV4OiBrZG9tL0VudGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vRW50aXR5LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vRW50aXR5LmgKLS0tIGtkb20vRW50aXR5LmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAt
MDAwMAkxLjEKKysrIGtkb20vRW50aXR5LmgJOCBBdWcgMjAwNSAwOTowMjo0MCAtMDAwMApAQCAt
MTIxLDcgKzEyMSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FS
RFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a2RvbS9OYW1lZE5vZGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20vTmFtZWROb2RlTWFwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga2RvbS9OYW1lZE5vZGVNYXAuY3BwCi0tLSBrZG9tL05hbWVkTm9kZU1h
cC5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20vTmFtZWROb2RlTWFw
LmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjQxIC0wMDAwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiTmFtZWROb2RlTWFwIiwg
TmFtZWROb2RlTWFwUHJvdG8sIE5hbWVkTm9kZU1hcFByb3RvRnVuYykKIAotVmFsdWUgTmFtZWRO
b2RlTWFwOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKk5hbWVkTm9kZU1hcDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjcsNyArNjcs
NyBAQCBWYWx1ZSBOYW1lZE5vZGVNYXA6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBOYW1lZE5vZGVNYXBQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAq
TmFtZWROb2RlTWFwUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhOYW1lZE5vZGVN
YXApCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC05MSw3ICs5MSw3IEBAIFZhbHVlIE5hbWVkTm9kZU1h
cFByb3RvRnVuYzo6Y2FsbChFeGVjU3QKIAkJfQogCQljYXNlIE5hbWVkTm9kZU1hcENvbnN0YW50
czo6SXRlbToKIAkJewotCQkJaW50IGluZGV4ID0gYXJnc1swXS50b0ludDMyKGV4ZWMpOworCQkJ
aW50IGluZGV4ID0gYXJnc1swXS0+dG9JbnQzMihleGVjKTsKIAkJCXJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIG9iai5pdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBOYW1lZE5vZGVNYXBDb25zdGFu
dHM6OkdldE5hbWVkSXRlbU5TOgpJbmRleDoga2RvbS9OYW1lZE5vZGVNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL05hbWVkTm9kZU1hcC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL05hbWVkTm9kZU1hcC5o
Ci0tLSBrZG9tL05hbWVkTm9kZU1hcC5oCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4xCisr
KyBrZG9tL05hbWVkTm9kZU1hcC5oCTggQXVnIDIwMDUgMDk6MDI6NDEgLTAwMDAKQEAgLTE3MSw4
ICsxNzEsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9G
T1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBh
dHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7
CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9Ob2RlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga2RvbS9Ob2RlLmNwcAotLS0ga2RvbS9Ob2RlLmNwcAk5IEp1bCAy
MDA1IDA2OjUzOjI1IC0wMDAwCTEuMQorKysga2RvbS9Ob2RlLmNwcAk4IEF1ZyAyMDA1IDA5OjAy
OjQxIC0wMDAwCkBAIC04MSw3ICs4MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01f
SU1QTEVNRU5UX1BST1RPVFlQRSgiTm9kZSIsIE5vZGVQcm90bywgTm9kZVByb3RvRnVuYykKIAot
VmFsdWUgTm9kZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpOb2RlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC0xMjcsNyArMTI3LDcg
QEAgVmFsdWUgTm9kZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKgogCXJldHVybiBVbmRl
ZmluZWQoKTsKIH07CiAKLXZvaWQgTm9kZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIE5vZGU6OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwg
aW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBOb2Rl
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZQogCUtET01fTEVBVkVfU0FGRShET01FeGNl
cHRpb24pCiB9CiAKLVZhbHVlIE5vZGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqTm9kZVByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoTm9kZSkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTE4
MiwxMyArMTgyLDEzIEBAIFZhbHVlIE5vZGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGUK
IAkJCXJldHVybiBLSlM6OkJvb2xlYW4ob2JqLmhhc0NoaWxkTm9kZXMoKSk7CiAJCWNhc2UgTm9k
ZUNvbnN0YW50czo6Q2xvbmVOb2RlOgogCQl7Ci0JCQlib29sIGRlZXAgPSBhcmdzWzBdLnRvQm9v
bGVhbihleGVjKTsKKwkJCWJvb2wgZGVlcCA9IGFyZ3NbMF0tPnRvQm9vbGVhbihleGVjKTsKIAkJ
CXJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG9iai5jbG9uZU5vZGUoZGVlcCkpOwogCQl9CiAJCWNh
c2UgTm9kZUNvbnN0YW50czo6Tm9ybWFsaXplOgogCQl7CiAJCQlvYmoubm9ybWFsaXplKCk7Ci0J
CQlyZXR1cm4gVmFsdWUoKTsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAJCWNhc2UgTm9kZUNvbnN0
YW50czo6SXNTdXBwb3J0ZWQ6CiAJCXsKSW5kZXg6IGtkb20vTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vTm9kZS5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL05vZGUuaAotLS0ga2RvbS9Ob2RlLmgJNyBB
dWcgMjAwNSAwNjoxNzo0MyAtMDAwMAkxLjIKKysrIGtkb20vTm9kZS5oCTggQXVnIDIwMDUgMDk6
MDI6NDEgLTAwMDAKQEAgLTQ4MCw4ICs0ODAsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX1BV
VAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwg
aW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBh
dHRyKTsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChOb2RlKQpJbmRleDoga2RvbS9Ob2RlTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9Ob2Rl
TGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
Tm9kZUxpc3QuY3BwCi0tLSBrZG9tL05vZGVMaXN0LmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI1IC0w
MDAwCTEuMQorKysga2RvbS9Ob2RlTGlzdC5jcHAJOCBBdWcgMjAwNSAwOTowMjo0MSAtMDAwMApA
QCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9Q
Uk9UT1RZUEUoIk5vZGVMaXN0IiwgTm9kZUxpc3RQcm90bywgTm9kZUxpc3RQcm90b0Z1bmMpCiAK
LVZhbHVlIE5vZGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKk5vZGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02MCw3
ICs2MCw3IEBAIFZhbHVlIE5vZGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIE5vZGVMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAg
Kk5vZGVMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhOb2RlTGlzdCkKIAlL
RE9NX0VOVEVSX1NBRkUKQEAgLTY5LDcgKzY5LDcgQEAgVmFsdWUgTm9kZUxpc3RQcm90b0Z1bmM6
OmNhbGwoRXhlY1N0YXRlIAogCXsKIAkJY2FzZSBOb2RlTGlzdENvbnN0YW50czo6SXRlbToKIAkJ
ewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1
bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4g
Z2V0RE9NTm9kZShleGVjLCBvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4
OiBrZG9tL05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva2RvbS9Ob2RlTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrZG9tL05vZGVMaXN0LmgKLS0tIGtkb20vTm9kZUxpc3QuaAk5IEp1bCAyMDA1IDA2OjUz
OjI1IC0wMDAwCTEuMQorKysga2RvbS9Ob2RlTGlzdC5oCTggQXVnIDIwMDUgMDk6MDI6NDIgLTAw
MDAKQEAgLTc4LDcgKzc4LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3Jp
cHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vTm90YXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vTm90YXRpb24uY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL05vdGF0aW9uLmNwcAotLS0g
a2RvbS9Ob3RhdGlvbi5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20v
Tm90YXRpb24uY3BwCTggQXVnIDIwMDUgMDk6MDI6NDIgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIE5vdGF0aW9uOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk5v
dGF0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL05vdGF0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9Ob3RhdGlvbi5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL05vdGF0aW9uLmgKLS0tIGtk
b20vTm90YXRpb24uaAk5IEp1bCAyMDA1IDA2OjUzOjI1IC0wMDAwCTEuMQorKysga2RvbS9Ob3Rh
dGlvbi5oCTggQXVnIDIwMDUgMDk6MDI6NDIgLTAwMDAKQEAgLTgxLDcgKzgxLDcgQEAgbmFtZXNw
YWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKLS0tIGtkb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI1IC0wMDAwCTEuMQorKysga2Rv
bS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCTggQXVnIDIwMDUgMDk6MDI6NDIgLTAwMDAKQEAg
LTM4LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKQEAgLTU2LDcgKzU2LDcgQEAgVmFsdWUgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpn
ZXRWYWx1ZVBybwogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwg
aW50KQogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vUHJv
Y2Vzc2luZ0luc3RydWN0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKLS0tIGtkb20vUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmgJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmgJOCBBdWcgMjAwNSAwOTowMjo0MiAtMDAwMApAQCAtODEsOCArODEs
OCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrZG9t
L1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
VGV4dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
VGV4dC5jcHAKLS0tIGtkb20vVGV4dC5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEK
KysrIGtkb20vVGV4dC5jcHAJOCBBdWcgMjAwNSAwOTowMjo0MiAtMDAwMApAQCAtNDMsNyArNDMs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIlRl
eHQiLCBUZXh0UHJvdG8sIFRleHRQcm90b0Z1bmMpCiAKLVZhbHVlIFRleHQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqVGV4dDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlL
RE9NX0VOVEVSX1NBRkUKIApAQCAtNjEsNyArNjEsNyBAQCBWYWx1ZSBUZXh0OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBUZXh0
UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQorVmFsdWVJbXAgKlRleHRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19U
SElTKFRleHQpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03MCw3ICs3MCw3IEBAIFZhbHVlIFRleHRQ
cm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGUKIAl7CiAJCWNhc2UgVGV4dENvbnN0YW50czo6
U3BsaXRUZXh0OgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0udG9VSW50
MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4
ZWMpOwogCQkJcmV0dXJuIGdldERPTU5vZGUoZXhlYywgb2JqLnNwbGl0VGV4dChvZmZzZXQpKTsK
IAkJfQogCQljYXNlIFRleHRDb25zdGFudHM6OlJlcGxhY2VXaG9sZVRleHQ6CkluZGV4OiBrZG9t
L1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL1Rl
eHQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9UZXh0
LmgKLS0tIGtkb20vVGV4dC5oCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4xCisrKyBrZG9t
L1RleHQuaAk4IEF1ZyAyMDA1IDA5OjAyOjQyIC0wMDAwCkBAIC0xMjEsNyArMTIxLDcgQEAgbmFt
ZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL1R5cGVJbmZvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL1R5cGVJbmZvLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9UeXBlSW5m
by5jcHAKLS0tIGtkb20vVHlwZUluZm8uY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4x
CisrKyBrZG9tL1R5cGVJbmZvLmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjQyIC0wMDAwCkBAIC00NCw3
ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQ
RSgiVHlwZUluZm8iLCBUeXBlSW5mb1Byb3RvLCBUeXBlSW5mb1Byb3RvRnVuYykKIAotVmFsdWUg
VHlwZUluZm86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqVHlwZUluZm86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTU4LDcgKzU4LDcg
QEAgVmFsdWUgVHlwZUluZm86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotVmFsdWUgVHlwZUluZm9Qcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqVHlwZUlu
Zm9Qcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFR5cGVJbmZvKQogCUtET01fRU5U
RVJfU0FGRQpAQCAtNjksNyArNjksNyBAQCBWYWx1ZSBUeXBlSW5mb1Byb3RvRnVuYzo6Y2FsbChF
eGVjU3RhdGUgCiAJCXsKIAkJCWNvbnN0IERPTVN0cmluZyB0eXBlTmFtZXNwYWNlQXJnID0gdG9E
T01TdHJpbmcoZXhlYywgYXJnc1swXSk7CiAJCQljb25zdCBET01TdHJpbmcgdHlwZU5hbWVBcmcg
PSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzFdKTsKLQkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgZGVy
aXZhdGlvbk1ldGhvZCA9IGFyZ3NbMl0udG9VSW50MzIoZXhlYyk7CisJCQljb25zdCB1bnNpZ25l
ZCBsb25nIGRlcml2YXRpb25NZXRob2QgPSBhcmdzWzJdLT50b1VJbnQzMihleGVjKTsKIAogCQkJ
cmV0dXJuIEtKUzo6Qm9vbGVhbihvYmouaXNEZXJpdmVkRnJvbSh0eXBlTmFtZXNwYWNlQXJnLAog
CQkJCQkJCQkJCQkJICB0eXBlTmFtZUFyZywgZGVyaXZhdGlvbk1ldGhvZCkpOwpJbmRleDoga2Rv
bS9UeXBlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vVHlwZUluZm8uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a2RvbS9UeXBlSW5mby5oCi0tLSBrZG9tL1R5cGVJbmZvLmgJOSBKdWwgMjAwNSAwNjo1MzoyNSAt
MDAwMAkxLjEKKysrIGtkb20vVHlwZUluZm8uaAk4IEF1ZyAyMDA1IDA5OjAyOjQyIC0wMDAwCkBA
IC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNl
Y3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiAKIH07CkluZGV4OiBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTQ2hhcnNldFJ1
bGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nz
cy9DU1NDaGFyc2V0UnVsZS5jcHAKLS0tIGtkb20vY3NzL0NTU0NoYXJzZXRSdWxlLmNwcAkyOSBK
dWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtkb20vY3NzL0NTU0NoYXJzZXRSdWxlLmNw
cAk4IEF1ZyAyMDA1IDA5OjAyOjQyIC0wMDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBDU1NDaGFyc2V0UnVsZTo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkNTU0NoYXJzZXRS
dWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
c3dpdGNoKHRva2VuKQogCXsKQEAgLTUwLDcgKzUwLDcgQEAgVmFsdWUgQ1NTQ2hhcnNldFJ1bGU6
OmdldFZhbHVlUHJvcGVydHkoRQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBDU1ND
aGFyc2V0UnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENTU0NoYXJzZXRSdWxlOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9jc3MvQ1NTQ2hhcnNldFJ1bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NDaGFy
c2V0UnVsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9t
L2Nzcy9DU1NDaGFyc2V0UnVsZS5oCi0tLSBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5oCTkgSnVs
IDIwMDUgMDY6NTM6NDAgLTAwMDAJMS4xCisrKyBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5oCTgg
QXVnIDIwMDUgMDk6MDI6NDIgLTAwMDAKQEAgLTUzLDggKzUzLDggQEAgbmFtZXNwYWNlIEtET00K
IAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVl
ICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2
YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3NzL0NTU0ZvbnRGYWNl
UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9j
c3MvQ1NTRm9udEZhY2VSdWxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAg
LXUgLXIxLjIga2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAotLS0ga2RvbS9jc3MvQ1NTRm9u
dEZhY2VSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtkb20vY3Nz
L0NTU0ZvbnRGYWNlUnVsZS5jcHAJOCBBdWcgMjAwNSAwOTowMjo0MiAtMDAwMApAQCAtMzcsNyAr
MzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgQ1NTRm9udEZh
Y2VSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKkNTU0ZvbnRGYWNlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDoga2Rv
bS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCi0tLSBrZG9t
L2Nzcy9DU1NGb250RmFjZVJ1bGUuaAk5IEp1bCAyMDA1IDA2OjUzOjQwIC0wMDAwCTEuMQorKysg
a2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgJOCBBdWcgMjAwNSAwOTowMjo0MiAtMDAwMApAQCAt
NTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9jc3Mv
Q1NTSW1wb3J0UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva2RvbS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpk
aWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCi0tLSBrZG9tL2Nzcy9D
U1NJbXBvcnRSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtkb20v
Y3NzL0NTU0ltcG9ydFJ1bGUuY3BwCTggQXVnIDIwMDUgMDk6MDI6NDIgLTAwMDAKQEAgLTM5LDcg
KzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIENTU0ltcG9y
dFJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqQ1NTSW1wb3J0UnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDoga2RvbS9j
c3MvQ1NTSW1wb3J0UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vY3NzL0NTU0ltcG9ydFJ1bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvQ1NTSW1wb3J0UnVsZS5oCi0tLSBrZG9tL2Nzcy9DU1NJ
bXBvcnRSdWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MCAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NT
U0ltcG9ydFJ1bGUuaAk4IEF1ZyAyMDA1IDA5OjAyOjQyIC0wMDAwCkBAIC01Niw3ICs1Niw3IEBA
IG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NNZWRpYVJ1bGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NT
U01lZGlhUnVsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4y
IGtkb20vY3NzL0NTU01lZGlhUnVsZS5jcHAKLS0tIGtkb20vY3NzL0NTU01lZGlhUnVsZS5jcHAJ
MjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NNZWRpYVJ1bGUu
Y3BwCTggQXVnIDIwMDUgMDk6MDI6NDMgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDU1NNZWRpYVJ1bGUiLCBD
U1NNZWRpYVJ1bGVQcm90bywgQ1NTTWVkaWFSdWxlUHJvdG9GdW5jKQogCi1WYWx1ZSBDU1NNZWRp
YVJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqQ1NTTWVkaWFSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC02MCw3ICs2MCw3
IEBAIFZhbHVlIENTU01lZGlhUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLVZhbHVlIENTU01lZGlhUnVsZVByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpD
U1NNZWRpYVJ1bGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKENTU01lZGlhUnVs
ZSkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTcwLDEyICs3MCwxMiBAQCBWYWx1ZSBDU1NNZWRpYVJ1
bGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0CiAJCWNhc2UgQ1NTTWVkaWFSdWxlQ29uc3RhbnRzOjpJ
bnNlcnRSdWxlOgogCQl7CiAJCQlET01TdHJpbmcgcnVsZSA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFy
Z3NbMF0pOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50MzIoZXhlYyk7
CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJCQly
ZXR1cm4gTnVtYmVyKG9iai5pbnNlcnRSdWxlKHJ1bGUsIGluZGV4KSk7CiAJCX0KIAkJY2FzZSBD
U1NNZWRpYVJ1bGVDb25zdGFudHM6OkRlbGV0ZVJ1bGU6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcg
aW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9
IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJb2JqLmRlbGV0ZVJ1bGUoaW5kZXgpOwogCQkJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrZG9tL2Nzcy9DU1NNZWRpYVJ1bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NNZWRp
YVJ1bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9j
c3MvQ1NTTWVkaWFSdWxlLmgKLS0tIGtkb20vY3NzL0NTU01lZGlhUnVsZS5oCTkgSnVsIDIwMDUg
MDY6NTM6NDAgLTAwMDAJMS4xCisrKyBrZG9tL2Nzcy9DU1NNZWRpYVJ1bGUuaAk4IEF1ZyAyMDA1
IDA5OjAyOjQzIC0wMDAwCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01f
R0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NQYWdlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTUGFnZVJ1bGUuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9DU1NQYWdlUnVsZS5jcHAK
LS0tIGtkb20vY3NzL0NTU1BhZ2VSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkx
LjIKKysrIGtkb20vY3NzL0NTU1BhZ2VSdWxlLmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjQzIC0wMDAw
CkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1
ZSBDU1NQYWdlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpDU1NQYWdlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTQs
NyArNTQsNyBAQCBWYWx1ZSBDU1NQYWdlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjCiAJcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIENTU1BhZ2VSdWxlOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3Zv
aWQgQ1NTUGFnZVJ1bGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBr
ZG9tL2Nzcy9DU1NQYWdlUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20vY3NzL0NTU1BhZ2VSdWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL0NTU1BhZ2VSdWxlLmgKLS0tIGtkb20vY3NzL0NTU1Bh
Z2VSdWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1Bh
Z2VSdWxlLmgJOCBBdWcgMjAwNSAwOTowMjo0MyAtMDAwMApAQCAtNTYsOCArNTYsOCBAQCBuYW1l
c3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9p
ZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CQkKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9p
ZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6
VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CQkKIAl9OwogfTsKIApJbmRleDoga2RvbS9jc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20vY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCi0t
LSBrZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAw
MDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJOCBBdWcgMjAwNSAwOTow
Mjo0MyAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9N
X0lNUExFTUVOVF9QUk9UT1RZUEUoIkNTU1ByaW1pdGl2ZVZhbHVlIiwgQ1NTUHJpbWl0aXZlVmFs
dWVQcm90bywgQ1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmMpCiAKLVZhbHVlIENTU1ByaW1pdGl2
ZVZhbHVlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqQ1NTUHJpbWl0aXZlVmFsdWU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNjYsNyArNjYsNyBA
QCBWYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0VmFsdWVQcm9wZXJ0CiAJcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1WYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZVByb3RvRnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1w
ICpDU1NQcmltaXRpdmVWYWx1ZVByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoQ1NT
UHJpbWl0aXZlVmFsdWUpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03NSwxOSArNzUsMTkgQEAgVmFs
dWUgQ1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmM6OmNhbGwoRQogCXsKIAkJY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZUNvbnN0YW50czo6U2V0RmxvYXRWYWx1ZToKIAkJewotCQkJdW5zaWduZWQgc2hv
cnQgdW5pdFR5cGUgPSBhcmdzWzBdLnRvVUludDE2KGV4ZWMpOwotCQkJZmxvYXQgZmxvYXRWYWx1
ZSA9IGFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9
IGFyZ3NbMF0tPnRvVUludDE2KGV4ZWMpOworCQkJZmxvYXQgZmxvYXRWYWx1ZSA9IGFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpOwogCQkJb2JqLnNldEZsb2F0VmFsdWUodW5pdFR5cGUsIGZsb2F0VmFs
dWUpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWVDb25zdGFudHM6OkdldEZsb2F0VmFsdWU6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IHVuaXRU
eXBlID0gYXJnc1swXS50b1VJbnQxNihleGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IHVuaXRUeXBl
ID0gYXJnc1swXS0+dG9VSW50MTYoZXhlYyk7CiAJCQlyZXR1cm4gTnVtYmVyKG9iai5nZXRGbG9h
dFZhbHVlKHVuaXRUeXBlKSk7CiAJCX0KIAkJY2FzZSBDU1NQcmltaXRpdmVWYWx1ZUNvbnN0YW50
czo6U2V0U3RyaW5nVmFsdWU6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IHN0cmluZ1R5cGUgPSBh
cmdzWzBdLnRvVUludDE2KGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgc3RyaW5nVHlwZSA9IGFy
Z3NbMF0tPnRvVUludDE2KGV4ZWMpOwogCQkJRE9NU3RyaW5nIHN0cmluZ1ZhbHVlID0gdG9ET01T
dHJpbmcoZXhlYywgYXJnc1sxXSk7CiAJCQlvYmouc2V0U3RyaW5nVmFsdWUoc3RyaW5nVHlwZSwg
c3RyaW5nVmFsdWUpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwpJbmRleDoga2RvbS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCi0tLSBrZG9tL2Nz
cy9DU1NQcmltaXRpdmVWYWx1ZS5oCTkgSnVsIDIwMDUgMDY6NTM6NDEgLTAwMDAJMS4xCisrKyBr
ZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCTggQXVnIDIwMDUgMDk6MDI6NDMgLTAwMDAKQEAg
LTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3Nz
L0NTU1J1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vY3NzL0NTU1J1bGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAt
cjEuMiBrZG9tL2Nzcy9DU1NSdWxlLmNwcAotLS0ga2RvbS9jc3MvQ1NTUnVsZS5jcHAJMjkgSnVs
IDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NSdWxlLmNwcAk4IEF1ZyAy
MDA1IDA5OjAyOjQzIC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7
CiBAZW5kCiAqLwogCi1WYWx1ZSBDU1NSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkNTU1J1bGU6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQog
CXsKQEAgLTYyLDcgKzYyLDcgQEAgVmFsdWUgQ1NTUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBDU1NSdWxlOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGlu
dCkKK3ZvaWQgQ1NTUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6
IGtkb20vY3NzL0NTU1J1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rZG9tL2Nzcy9DU1NSdWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtkb20vY3NzL0NTU1J1bGUuaAotLS0ga2RvbS9jc3MvQ1NTUnVsZS5oCTkgSnVs
IDIwMDUgMDY6NTM6NDEgLTAwMDAJMS4xCisrKyBrZG9tL2Nzcy9DU1NSdWxlLmgJOCBBdWcgMjAw
NSAwOTowMjo0MyAtMDAwMApAQCAtNjIsOCArNjIsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9N
X0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZh
bHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIAogLy8gdGVtcGxhdGUgZm9yIGVhc2luZyBhc3Np
Z25pbmcgb2YgQ1NTUnVsZXMgdG8gZGVyaXZlZCBjbGFzc2VzLgpJbmRleDoga2RvbS9jc3MvQ1NT
UnVsZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vY3NzL0NTU1J1bGVMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAg
LXUgLXIxLjIga2RvbS9jc3MvQ1NTUnVsZUxpc3QuY3BwCi0tLSBrZG9tL2Nzcy9DU1NSdWxlTGlz
dC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NSdWxl
TGlzdC5jcHAJOCBBdWcgMjAwNSAwOTowMjo0MyAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkNTU1J1bGVMaXN0
IiwgQ1NTUnVsZUxpc3RQcm90bywgQ1NTUnVsZUxpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIENTU1J1
bGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqQ1NTUnVsZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0
b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUsNyArNTUsNyBAQCBWYWx1
ZSBDU1NSdWxlTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjCiAJcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1WYWx1ZSBDU1NSdWxlTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpDU1NSdWxlTGlz
dFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoQ1NTUnVsZUxpc3QpCiAKQEAgLTYz
LDcgKzYzLDcgQEAgVmFsdWUgQ1NTUnVsZUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YQogCXsK
IAkJY2FzZSBDU1NSdWxlTGlzdENvbnN0YW50czo6SXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4
ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NQ1NTUnVsZShleGVj
LCBvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrZG9tL2Nzcy9DU1NS
dWxlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
Y3NzL0NTU1J1bGVMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vY3NzL0NTU1J1bGVMaXN0LmgKLS0tIGtkb20vY3NzL0NTU1J1bGVMaXN0LmgJOSBK
dWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1J1bGVMaXN0LmgJOCBB
dWcgMjAwNSAwOTowMjo0MyAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgS0RPTQog
CXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
CmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKLS0tIGtk
b20vY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCTI5IEp1bCAyMDA1IDA2OjExOjE2IC0wMDAw
CTEuMgorKysga2RvbS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJOCBBdWcgMjAwNSAwOTow
Mjo0MyAtMDAwMApAQCAtNTIsNyArNTIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9N
X0lNUExFTUVOVF9QUk9UT1RZUEUoIkNTU1N0eWxlRGVjbGFyYXRpb24iLCBDU1NTdHlsZURlY2xh
cmF0aW9uUHJvdG8sIENTU1N0eWxlRGVjbGFyYXRpb25Qcm90b0Z1bmMpCiAKLVZhbHVlIENTU1N0
eWxlRGVjbGFyYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJ
ewpAQCAtNjksNyArNjksNyBAQCBWYWx1ZSBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRWYWx1ZVBy
b3BlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIENTU1N0eWxlRGVjbGFyYXRpb246
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
ICZ2YWx1ZSwgaW50KQordm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlL
RE9NX0VOVEVSX1NBRkUKIApAQCAtODUsNyArODUsNyBAQCB2b2lkIENTU1N0eWxlRGVjbGFyYXRp
b246OnB1dFZhbHVlUHJvcGVyCiAJS0RPTV9MRUFWRV9TQUZFKERPTUV4Y2VwdGlvbikKIH0KIAot
VmFsdWUgQ1NTU3R5bGVEZWNsYXJhdGlvblByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpDU1NTdHlsZURl
Y2xhcmF0aW9uUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhDU1NTdHlsZURlY2xh
cmF0aW9uKQogCUtET01fRU5URVJfU0FGRQpAQCAtMTIyLDcgKzEyMiw3IEBAIFZhbHVlIENTU1N0
eWxlRGVjbGFyYXRpb25Qcm90b0Z1bmM6OmNhbGwKIAkJfQogCQljYXNlIENTU1N0eWxlRGVjbGFy
YXRpb25Db25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdz
WzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRv
VUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTVN0cmluZyhvYmouaXRlbShpbmRleCkpOwog
CQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrZG9tL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
ZG9tL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKLS0tIGtkb20vY3NzL0NTU1N0eWxlRGVjbGFy
YXRpb24uaAk5IEp1bCAyMDA1IDA2OjUzOjQxIC0wMDAwCTEuMQorKysga2RvbS9jc3MvQ1NTU3R5
bGVEZWNsYXJhdGlvbi5oCTggQXVnIDIwMDUgMDk6MDI6NDMgLTAwMDAKQEAgLTcyLDggKzcyLDgg
QEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIH07CiAKSW5kZXg6IGtk
b20vY3NzL0NTU1N0eWxlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9jc3MvQ1NTU3R5bGVSdWxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAotLS0ga2RvbS9j
c3MvQ1NTU3R5bGVSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtk
b20vY3NzL0NTU1N0eWxlUnVsZS5jcHAJOCBBdWcgMjAwNSAwOTowMjo0MyAtMDAwMApAQCAtNDAs
NyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgQ1NTU3R5
bGVSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKkNTU1N0eWxlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUsNyArNTUs
NyBAQCBWYWx1ZSBDU1NTdHlsZVJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi12b2lkIENTU1N0eWxlUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENT
U1N0eWxlUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
VmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20v
Y3NzL0NTU1N0eWxlUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vY3NzL0NTU1N0eWxlUnVsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9DU1NTdHlsZVJ1bGUuaAotLS0ga2RvbS9jc3MvQ1NTU3R5
bGVSdWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1N0
eWxlUnVsZS5oCTggQXVnIDIwMDUgMDk6MDI6NDMgLTAwMDAKQEAgLTU1LDggKzU1LDggQEAgbmFt
ZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6
OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3Nz
L0NTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vY3NzL0NTU1N0eWxlU2hlZXQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIK
ZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAotLS0ga2RvbS9jc3Mv
Q1NTU3R5bGVTaGVldC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9t
L2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjQ0IC0wMDAwCkBAIC00Nyw3
ICs0Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQ
RSgiQ1NTU3R5bGVTaGVldCIsIENTU1N0eWxlU2hlZXRQcm90bywgQ1NTU3R5bGVTaGVldFByb3Rv
RnVuYykKIAotVmFsdWUgQ1NTU3R5bGVTaGVldDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZVNoZWV0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0
b2tlbikKIAl7CkBAIC02Miw3ICs2Miw3IEBAIFZhbHVlIENTU1N0eWxlU2hlZXQ6OmdldFZhbHVl
UHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIENTU1N0eWxlU2hl
ZXRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqQ1NTU3R5bGVTaGVldFByb3RvRnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlL
RE9NX0NIRUNLX1RISVMoQ1NTU3R5bGVTaGVldCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTcyLDcg
KzcyLDcgQEAgVmFsdWUgQ1NTU3R5bGVTaGVldFByb3RvRnVuYzo6Y2FsbChFeGVjUwogCQljYXNl
IENTU1N0eWxlU2hlZXRDb25zdGFudHM6Okluc2VydFJ1bGU6CiAJCXsKIAkJCURPTVN0cmluZyBy
dWxlID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4
ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdz
WzFdLT50b1VJbnQzMihleGVjKTsKIAkJCW9iai5pbnNlcnRSdWxlKHJ1bGUsIGluZGV4KTsKIAkJ
CXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpJbmRleDoga2RvbS9jc3MvQ1NTU3R5bGVTaGVldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1N0
eWxlU2hlZXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2Rv
bS9jc3MvQ1NTU3R5bGVTaGVldC5oCi0tLSBrZG9tL2Nzcy9DU1NTdHlsZVNoZWV0LmgJOSBKdWwg
MjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1N0eWxlU2hlZXQuaAk4IEF1
ZyAyMDA1IDA5OjAyOjQ0IC0wMDAwCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJ
CUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
CX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTVmFsdWUuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9DU1NWYWx1ZS5jcHAKLS0t
IGtkb20vY3NzL0NTU1ZhbHVlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysr
IGtkb20vY3NzL0NTU1ZhbHVlLmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjQ0IC0wMDAwCkBAIC0zOCw3
ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBDU1NWYWx1
ZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkNTU1ZhbHVlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTUzLDcgKzUzLDcgQEAgVmFsdWUgQ1NTVmFs
dWU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
dm9pZCBDU1NWYWx1ZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENTU1ZhbHVlOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsK
IAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9jc3MvQ1NTVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NWYWx1ZS5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9DU1NWYWx1ZS5o
Ci0tLSBrZG9tL2Nzcy9DU1NWYWx1ZS5oCTkgSnVsIDIwMDUgMDY6NTM6NDIgLTAwMDAJMS4xCisr
KyBrZG9tL2Nzcy9DU1NWYWx1ZS5oCTggQXVnIDIwMDUgMDk6MDI6NDQgLTAwMDAKQEAgLTYyLDgg
KzYyLDggQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fUFVU
CiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsJCQor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsJCQogCX07
CiAKIC8vIHRlbXBsYXRlIGZvciBlYXNpbmcgYXNzaWduaW5nIG9mIENTU1ZhbHVlcyB0byBkZXJp
dmVkIGNsYXNzZXMuCkluZGV4OiBrZG9tL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1ZhbHVlTGlzdC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0NTU1Zh
bHVlTGlzdC5jcHAKLS0tIGtkb20vY3NzL0NTU1ZhbHVlTGlzdC5jcHAJMjkgSnVsIDIwMDUgMDY6
MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCTggQXVnIDIwMDUg
MDk6MDI6NDQgLTAwMDAKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAog
S0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDU1NWYWx1ZUxpc3QiLCBDU1NWYWx1ZUxpc3RQcm90
bywgQ1NTVmFsdWVMaXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBDU1NWYWx1ZUxpc3Q6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpDU1NWYWx1
ZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsK
IAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTMsNyArNTMsNyBAQCBWYWx1ZSBDU1NWYWx1ZUxpc3Q6
OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBD
U1NWYWx1ZUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqQ1NTVmFsdWVMaXN0UHJvdG9GdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQogewogCUtET01fQ0hFQ0tfVEhJUyhDU1NWYWx1ZUxpc3QpCiAKQEAgLTYxLDcgKzYxLDcgQEAg
VmFsdWUgQ1NTVmFsdWVMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdAogCXsKIAkJY2FzZSBDU1NW
YWx1ZUxpc3RDb25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBh
cmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0t
PnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTUNTU1ZhbHVlKGV4ZWMsIG9iai5pdGVt
KGluZGV4KSk7CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtkb20vY3NzL0NTU1ZhbHVlTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1Zh
bHVlTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9t
L2Nzcy9DU1NWYWx1ZUxpc3QuaAotLS0ga2RvbS9jc3MvQ1NTVmFsdWVMaXN0LmgJOSBKdWwgMjAw
NSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1ZhbHVlTGlzdC5oCTggQXVnIDIw
MDUgMDk6MDI6NDQgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEtET00KIAkJS0RP
TV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IH07CiAKSW5kZXg6IGtkb20vY3NzL0NvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NvdW50ZXIuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9Db3VudGVyLmNwcAotLS0ga2RvbS9j
c3MvQ291bnRlci5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nz
cy9Db3VudGVyLmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjQ0IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBDb3VudGVyOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqQ291bnRl
cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3
aXRjaCh0b2tlbikKIAl7CkluZGV4OiBrZG9tL2Nzcy9Db3VudGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ291bnRlci5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9Db3VudGVyLmgKLS0tIGtk
b20vY3NzL0NvdW50ZXIuaAk5IEp1bCAyMDA1IDA2OjUzOjQyIC0wMDAwCTEuMQorKysga2RvbS9j
c3MvQ291bnRlci5oCTggQXVnIDIwMDUgMDk6MDI6NDQgLTAwMDAKQEAgLTU2LDcgKzU2LDcgQEAg
bmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dF
VAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2Rv
bS9jc3MvRG9jdW1lbnRTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0RvY3VtZW50U3R5bGUuY3BwCi0tLSBrZG9t
L2Nzcy9Eb2N1bWVudFN0eWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysr
IGtkb20vY3NzL0RvY3VtZW50U3R5bGUuY3BwCTggQXVnIDIwMDUgMDk6MDI6NDQgLTAwMDAKQEAg
LTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIERv
Y3VtZW50U3R5bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRTdHlsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDog
a2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tkb20vY3NzL0RvY3VtZW50U3R5bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5oCi0tLSBrZG9tL2Nz
cy9Eb2N1bWVudFN0eWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20v
Y3NzL0RvY3VtZW50U3R5bGUuaAk4IEF1ZyAyMDA1IDA5OjAyOjQ0IC0wMDAwCkBAIC01NCw3ICs1
NCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJ
S0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07
CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9NZWRpYUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL01lZGlhTGlzdC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL01lZGlhTGlzdC5jcHAKLS0t
IGtkb20vY3NzL01lZGlhTGlzdC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisr
KyBrZG9tL2Nzcy9NZWRpYUxpc3QuY3BwCTggQXVnIDIwMDUgMDk6MDI6NDQgLTAwMDAKQEAgLTQ2
LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9U
WVBFKCJNZWRpYUxpc3QiLCBNZWRpYUxpc3RQcm90bywgTWVkaWFMaXN0UHJvdG9GdW5jKQogCi1W
YWx1ZSBNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNjEsNyArNjEsNyBA
QCBWYWx1ZSBNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0CiAJcmV0dXJuIFVuZGVm
aW5lZCgpOwogfTsKIAotdm9pZCBNZWRpYUxpc3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBNZWRpYUxp
c3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03Nyw3ICs3Nyw3IEBAIHZv
aWQgTWVkaWFMaXN0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlLRE9NX0xFQVZFX1NBRkUo
RE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBNZWRpYUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAq
TWVkaWFMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhNZWRpYUxpc3QpCiAJ
S0RPTV9FTlRFUl9TQUZFCkBAIC04Niw3ICs4Niw3IEBAIFZhbHVlIE1lZGlhTGlzdFByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUKIAl7CiAJCWNhc2UgTWVkaWFMaXN0Q29uc3RhbnRzOjpJdGVtOgog
CQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJ
CXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVy
biBnZXRET01TdHJpbmcob2JqLml0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIE1lZGlhTGlzdENv
bnN0YW50czo6RGVsZXRlTWVkaXVtOgpJbmRleDoga2RvbS9jc3MvTWVkaWFMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvTWVkaWFMaXN0Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL01lZGlh
TGlzdC5oCi0tLSBrZG9tL2Nzcy9NZWRpYUxpc3QuaAk5IEp1bCAyMDA1IDA2OjUzOjQyIC0wMDAw
CTEuMQorKysga2RvbS9jc3MvTWVkaWFMaXN0LmgJOCBBdWcgMjAwNSAwOTowMjo0NCAtMDAwMApA
QCAtNjEsOCArNjEsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CQkKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CQkKIAl9Owog
fTsKIApJbmRleDoga2RvbS9jc3MvUkdCQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL1JHQkNvbG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvUkdCQ29sb3IuY3BwCi0tLSBrZG9t
L2Nzcy9SR0JDb2xvci5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9t
L2Nzcy9SR0JDb2xvci5jcHAJOCBBdWcgMjAwNSAwOTowMjo0NCAtMDAwMApAQCAtNDIsNyArNDIs
NyBAQCBuYW1lc3BhY2UgS0RPTQogQGVuZAogKi8KIAotVmFsdWUgUkdCQ29sb3I6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqUkdC
Q29sb3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtkb20vY3NzL1JHQkNvbG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvUkdCQ29sb3IuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvUkdCQ29s
b3IuaAotLS0ga2RvbS9jc3MvUkdCQ29sb3IuaAk5IEp1bCAyMDA1IDA2OjUzOjQyIC0wMDAwCTEu
MQorKysga2RvbS9jc3MvUkdCQ29sb3IuaAk4IEF1ZyAyMDA1IDA5OjAyOjQ0IC0wMDAwCkBAIC01
OCw3ICs1OCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rp
b24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07
CiAKSW5kZXg6IGtkb20vY3NzL1JlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tkb20vY3NzL1JlY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIK
ZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9SZWN0LmNwcAotLS0ga2RvbS9jc3MvUmVjdC5jcHAJ
MjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9SZWN0LmNwcAk4IEF1
ZyAyMDA1IDA5OjAyOjQ0IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBLRE9NCiBA
ZW5kCiAqLwogCi1LSlM6OlZhbHVlIFJlY3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitLSlM6OlZhbHVlSW1wICpSZWN0OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikK
IAl7CkluZGV4OiBrZG9tL2Nzcy9SZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva2RvbS9jc3MvUmVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9SZWN0LmgKLS0tIGtkb20vY3NzL1JlY3QuaAk5IEp1bCAy
MDA1IDA2OjUzOjQyIC0wMDAwCTEuMQorKysga2RvbS9jc3MvUmVjdC5oCTggQXVnIDIwMDUgMDk6
MDI6NDQgLTAwMDAKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8v
IEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9jc3MvU3R5bGVTaGVldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvU3R5bGVTaGVldC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL1N0
eWxlU2hlZXQuY3BwCi0tLSBrZG9tL2Nzcy9TdHlsZVNoZWV0LmNwcAkyOSBKdWwgMjAwNSAwNjox
MToxNiAtMDAwMAkxLjIKKysrIGtkb20vY3NzL1N0eWxlU2hlZXQuY3BwCTggQXVnIDIwMDUgMDk6
MDI6NDUgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQK
ICovCiAKLVZhbHVlIFN0eWxlU2hlZXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU3R5bGVTaGVldDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJ
ewpAQCAtNjgsMTIgKzY4LDEyIEBAIFZhbHVlIFN0eWxlU2hlZXQ6OmdldFZhbHVlUHJvcGVydHko
RXhlY1MKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9OwogCi12b2lkIFN0eWxlU2hlZXQ6OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1
ZSwgaW50KQordm9pZCBTdHlsZVNoZWV0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJ
ewogCQljYXNlIFN0eWxlU2hlZXRDb25zdGFudHM6OkRpc2FibGVkOgotCQkJc2V0RGlzYWJsZWQo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKwkJCXNldERpc2FibGVkKHZhbHVlLT50b0Jvb2xlYW4o
ZXhlYykpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlrZFdhcm5pbmcoKSA8PCAiVW5oYW5k
bGVkIHRva2VuIGluICIgPDwga19mdW5jaW5mbyA8PCAiIDogIiA8PCB0b2tlbiA8PCBlbmRsOwpJ
bmRleDoga2RvbS9jc3MvU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tkb20vY3NzL1N0eWxlU2hlZXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvU3R5bGVTaGVldC5oCi0tLSBrZG9tL2Nzcy9T
dHlsZVNoZWV0LmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20vY3NzL1N0
eWxlU2hlZXQuaAk4IEF1ZyAyMDA1IDA5OjAyOjQ1IC0wMDAwCkBAIC02Nyw4ICs2Nyw4IEBAIG5h
bWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CQkKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CQkKIAl9OwogfTsKIApJbmRl
eDoga2RvbS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvU3R5bGVTaGVldExpc3QuY3Bw
Ci0tLSBrZG9tL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAw
MDAJMS4yCisrKyBrZG9tL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJOCBBdWcgMjAwNSAwOTowMjo0
NSAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lN
UExFTUVOVF9QUk9UT1RZUEUoIlN0eWxlU2hlZXRMaXN0IiwgU3R5bGVTaGVldExpc3RQcm90bywg
U3R5bGVTaGVldExpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIFN0eWxlU2hlZXRMaXN0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU3R5bGVT
aGVldExpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QK
IHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUsNyArNTUsNyBAQCBWYWx1ZSBTdHlsZVNoZWV0
TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1
ZSBTdHlsZVNoZWV0TGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTdHlsZVNoZWV0TGlzdFByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoU3R5bGVTaGVldExpc3QpCiAKQEAgLTYzLDcg
KzYzLDcgQEAgVmFsdWUgU3R5bGVTaGVldExpc3RQcm90b0Z1bmM6OmNhbGwoRXhlYwogCXsKIAkJ
Y2FzZSBTdHlsZVNoZWV0TGlzdENvbnN0YW50czo6SXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4
ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gc2FmZV9jYWNoZTxTdHlsZVNo
ZWV0PihleGVjLCBvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrZG9t
L2Nzcy9TdHlsZVNoZWV0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmgKLS0tIGtkb20vY3Nz
L1N0eWxlU2hlZXRMaXN0LmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20v
Y3NzL1N0eWxlU2hlZXRMaXN0LmgJOCBBdWcgMjAwNSAwOTowMjo0NSAtMDAwMApAQCAtNTUsNyAr
NTUsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJ
CUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCklu
ZGV4OiBrZG9tL2RhdGEvZ2VuZXJhdGVkZGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9kYXRhL2dlbmVyYXRlZGRhdGEuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2RhdGEvZ2VuZXJhdGVkZGF0YS5j
cHAKLS0tIGtkb20vZGF0YS9nZW5lcmF0ZWRkYXRhLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjU3IC0w
MDAwCTEuMQorKysga2RvbS9kYXRhL2dlbmVyYXRlZGRhdGEuY3BwCTggQXVnIDIwMDUgMDk6MDI6
NDggLTAwMDAKQEAgLTI4OCw3ICsyODgsNyBAQCBib29sIEFic3RyYWN0Vmlldzo6aGFzUHJvcGVy
dHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBBYnN0cmFjdFZpZXc6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQWJzdHJhY3RWaWV3OjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxBYnN0
cmFjdFZpZXc+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTMwMywxNiArMzAz
LDE2IEBAIEFic3RyYWN0VmlldyBLRE9NOjp0b0Fic3RyYWN0VmlldyhLSlM6OkUKICAgICByZXR1
cm4gQWJzdHJhY3RWaWV3OjpudWxsOwogfQogCi1WYWx1ZSBBYnN0cmFjdFZpZXc6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQWJzdHJhY3RWaWV3OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9V
TlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1P
YmplY3QgQWJzdHJhY3RWaWV3Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVj
dEltcCAqQWJzdHJhY3RWaWV3Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBl
KCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4g
TlVMTDsKIH0KIAogT2JqZWN0SW1wICpBYnN0cmFjdFZpZXc6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtMzIwLDcgKzMyMCw3IEBAIE9iamVjdEltcCAqQWJzdHJhY3RWaWV3Ojpicmlk
Z2UoRXhlY1N0YXQKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxBYnN0cmFjdFZpZXc+KHAxLHN0
YXRpY19jYXN0PEFic3RyYWN0Vmlldzo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEFic3Ry
YWN0Vmlldzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpBYnN0cmFjdFZp
ZXc6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2Jq
ZWN0PEFic3RyYWN0Vmlldz4ocDEsc3RhdGljX2Nhc3Q8QWJzdHJhY3RWaWV3OjpQcml2YXRlICo+
KGQpKTsKIH0KQEAgLTMzMyw3ICszMzMsNyBAQCBib29sIEF0dHI6Omhhc1Byb3BlcnR5KEV4ZWNT
dGF0ZSAqcDEsY29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBBdHRyOjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkF0dHI6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPEF0dHI+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KQEAgLTM0Niw3ICszNDYsNyBAQCBBdHRyIEtET006OnRvQXR0cihL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgCiAgICAgcmV0dXJuIEF0dHI6Om51bGw7CiB9CiAKLVZhbHVl
IEF0dHI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQXR0
cjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihOb2RlOjpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBOb2RlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKQEAgLTM2NiwxMCArMzY2LDEwIEBAIGJvb2wgQXR0cjo6cHV0SW5QYXJl
bnRzKFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBBdHRy
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQXR0cjo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQXR0
cjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNzcsNyArMzc3LDcgQEAgT2JqZWN0
SW1wICpBdHRyOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgYwogICAgIHJldHVybiBuZXcgRE9NUldC
cmlkZ2U8QXR0cj4ocDEsc3RhdGljX2Nhc3Q8QXR0cjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZh
bHVlIEF0dHI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqQXR0cjo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8QXR0
cj4ocDEsc3RhdGljX2Nhc3Q8QXR0cjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zOTAsMTIgKzM5
MCwxMiBAQCBib29sIENTU0NoYXJzZXRSdWxlOjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDU1NDaGFyc2V0UnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpDU1NDaGFyc2V0UnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Q1NTQ2hhcnNldFJ1bGU+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgQ1NTQ2hhcnNldFJ1bGU6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTQ2hhcnNldFJ1bGU6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoQ1NTUnVsZTo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gQ1NTUnVsZTo6Z2V0KHAxLHAyLHAzKTsKICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00MTUsMTAgKzQxNSwxMCBAQCBib29sIENTU0NoYXJzZXRS
dWxlOjpwdXRJblBhcmVudHMoUFVUX01FCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
Q1NTQ2hhcnNldFJ1bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpDU1NDaGFyc2V0UnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgp
OwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTQ2hhcnNldFJ1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtNDI2LDcgKzQyNiw3IEBAIE9iamVjdEltcCAqQ1NTQ2hhcnNldFJ1bGU6OmJy
aWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU0NoYXJzZXRSdWxlPihw
MSxzdGF0aWNfY2FzdDxDU1NDaGFyc2V0UnVsZTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVl
IENTU0NoYXJzZXRSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNT
U0NoYXJzZXRSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBj
YWNoZURPTU9iamVjdDxDU1NDaGFyc2V0UnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1
bGU6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNDM5LDEyICs0MzksMTIgQEAgYm9vbCBDU1NGb250
RmFjZVJ1bGU6Omhhc1Byb3BlcnR5KEV4ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgQ1NTRm9udEZhY2VSdWxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KkNTU0ZvbnRGYWNlUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1
cm4gbG9va3VwR2V0VmFsdWU8Q1NTRm9udEZhY2VSdWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CiAKLVZhbHVlIENTU0ZvbnRGYWNlUnVsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NGb250RmFjZVJ1bGU6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoQ1NTUnVsZTo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gQ1NTUnVsZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CkBAIC00NjQsMTAgKzQ2NCwxMCBAQCBib29sIENTU0ZvbnRGYWNlUnVsZTo6cHV0SW5QYXJl
bnRzKFBVVF9NCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgQ1NTRm9udEZhY2VSdWxl
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTRm9udEZhY2VS
dWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpDU1NGb250RmFjZVJ1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
NDc1LDcgKzQ3NSw3IEBAIE9iamVjdEltcCAqQ1NTRm9udEZhY2VSdWxlOjpicmlkZ2UoRXhlY1MK
ICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU0ZvbnRGYWNlUnVsZT4ocDEsc3RhdGljX2Nh
c3Q8Q1NTRm9udEZhY2VSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTRm9udEZh
Y2VSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU0ZvbnRGYWNl
UnVsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01P
YmplY3Q8Q1NTRm9udEZhY2VSdWxlPihwMSxzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGU6OlBy
aXZhdGUgKj4oZCkpOwogfQpAQCAtNDg4LDEyICs0ODgsMTIgQEAgYm9vbCBDU1NJbXBvcnRSdWxl
OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgQ1NT
SW1wb3J0UnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NJbXBv
cnRSdWxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBH
ZXRWYWx1ZTxDU1NJbXBvcnRSdWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAK
LVZhbHVlIENTU0ltcG9ydFJ1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqQ1NTSW1wb3J0UnVsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICBpZihDU1NSdWxlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBDU1NS
dWxlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTUxMywxMCAr
NTEzLDEwIEBAIGJvb2wgQ1NTSW1wb3J0UnVsZTo6cHV0SW5QYXJlbnRzKFBVVF9NRVQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBDU1NJbXBvcnRSdWxlOjpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTSW1wb3J0UnVsZTo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTSW1wb3J0UnVs
ZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01MjQsNyArNTI0LDcgQEAgT2JqZWN0
SW1wICpDU1NJbXBvcnRSdWxlOjpicmlkZ2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcgRE9NUldC
cmlkZ2U8Q1NTSW1wb3J0UnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZTo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIENTU0ltcG9ydFJ1bGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqQ1NTSW1wb3J0UnVsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTSW1wb3J0UnVsZT4ocDEsc3RhdGlj
X2Nhc3Q8Q1NTSW1wb3J0UnVsZTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01MzMsMTMgKzUzMywx
MyBAQCBib29sIENTU01lZGlhUnVsZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiB7CiAgICAgY29u
c3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkNTU01lZGlhUnVsZTo6c19oYXNo
VGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IENT
U01lZGlhUnVsZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDU1NNZWRpYVJ1bGVQcm90
bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRy
dWU7CiAgICAgaWYoQ1NTUnVsZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENTU01lZGlhUnVsZTo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NNZWRpYVJ1bGU6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxDU1NNZWRpYVJ1bGVQcm90b0Z1bmMsQ1NT
TWVkaWFSdWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC01NjIsMTAgKzU2
MiwxMCBAQCBDU1NNZWRpYVJ1bGUgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpCiAJUV9VTlVT
RUQocDEpOyByZXR1cm4gQ1NTTWVkaWFSdWxlOjpudWxsOwogfQogCi1WYWx1ZSBDU1NNZWRpYVJ1
bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTTWVk
aWFSdWxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVj
dCBwcm90byA9IENTU01lZGlhUnVsZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAq
cHJvdG8gPSBDU1NNZWRpYVJ1bGVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKENTU1J1bGU6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENTU1J1bGU6OmdldChwMSxwMixwMyk7CiAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtNTg0LDEwICs1ODQsMTAgQEAgYm9vbCBDU1NNZWRp
YVJ1bGU6OnB1dEluUGFyZW50cyhQVVRfTUVUSAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2Jq
ZWN0IENTU01lZGlhUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJ
bXAgKkNTU01lZGlhUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBDU1NNZWRpYVJ1bGVQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9i
amVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0
SW1wICpDU1NNZWRpYVJ1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTk1LDcg
KzU5NSw3IEBAIE9iamVjdEltcCAqQ1NTTWVkaWFSdWxlOjpicmlkZ2UoRXhlY1N0YXQKICAgICBy
ZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU01lZGlhUnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTTWVk
aWFSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTTWVkaWFSdWxlOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU01lZGlhUnVsZTo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTTWVkaWFSdWxl
PihwMSxzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGU6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNjA4
LDEyICs2MDgsMTIgQEAgYm9vbCBDU1NQYWdlUnVsZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlIAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgQ1NTUGFnZVJ1bGU6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTUGFnZVJ1bGU6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPENTU1BhZ2VSdWxlPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIENTU1BhZ2VSdWxlOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1BhZ2VSdWxlOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKENTU1J1bGU6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIENTU1J1bGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwpAQCAtNjMzLDEwICs2MzMsMTAgQEAgYm9vbCBDU1NQYWdlUnVsZTo6cHV0SW5Q
YXJlbnRzKFBVVF9NRVRITwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IENTU1BhZ2VS
dWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTUGFnZVJ1
bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
cDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKkNTU1BhZ2VSdWxlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTY0NCw3
ICs2NDQsNyBAQCBPYmplY3RJbXAgKkNTU1BhZ2VSdWxlOjpicmlkZ2UoRXhlY1N0YXRlCiAgICAg
cmV0dXJuIG5ldyBET01SV0JyaWRnZTxDU1NQYWdlUnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTUGFn
ZVJ1bGU6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NQYWdlUnVsZTo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpDU1NQYWdlUnVsZTo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTUGFnZVJ1bGU+KHAx
LHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTY1MywxMyAr
NjUzLDEzIEBAIGJvb2wgQ1NTUHJpbWl0aXZlVmFsdWU6Omhhc1Byb3BlcnR5KEV4ZWMKIHsKICAg
ICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmQ1NTUHJpbWl0aXZlVmFs
dWU6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3Qg
cHJvdG8gPSBDU1NQcmltaXRpdmVWYWx1ZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBD
U1NQcmltaXRpdmVWYWx1ZVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihDU1NWYWx1ZTo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENTU1ByaW1p
dGl2ZVZhbHVlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1ByaW1p
dGl2ZVZhbHVlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29r
dXBHZXQ8Q1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmMsQ1NTUHJpbWl0aXZlVmFsdWU+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTY4MiwxMCArNjgyLDEwIEBAIENTU1ByaW1p
dGl2ZVZhbHVlIEtET006OkVjbWFJbnRlcmZhY2U6OmkKIAlRX1VOVVNFRChwMSk7IHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6bnVsbDsKIH0KIAotVmFsdWUgQ1NTUHJpbWl0aXZlVmFsdWU6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTUHJpbWl0aXZl
VmFsdWU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0
IHByb3RvID0gQ1NTUHJpbWl0aXZlVmFsdWVQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gQ1NTUHJpbWl0aXZlVmFsdWVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJv
dG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlm
KENTU1ZhbHVlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBDU1NWYWx1ZTo6Z2V0KHAxLHAy
LHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC03MDQsMTAgKzcwNCwxMCBAQCBi
b29sIENTU1ByaW1pdGl2ZVZhbHVlOjpwdXRJblBhcmVudHMoUFVUCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1PYmplY3QgQ1NTUHJpbWl0aXZlVmFsdWU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpDU1NQcmltaXRpdmVWYWx1ZTo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZVByb3Rv
OjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkNTU1ByaW1pdGl2ZVZhbHVlOjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTcxNSw3ICs3MTUsNyBAQCBPYmplY3RJbXAgKkNTU1By
aW1pdGl2ZVZhbHVlOjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxDU1NQ
cmltaXRpdmVWYWx1ZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlByaXZhdGUg
Kj4oZCkpOwogfQogCi1WYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK1ZhbHVlSW1wICpDU1NQcmltaXRpdmVWYWx1ZTo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHAxLHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTcyOCwxMiArNzI4LDEyIEBAIGJvb2wgQ1NTUnVsZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpw
MSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENTU1J1bGU6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Q1NTUnVsZT4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBDU1NSdWxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1J1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VE
KHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC03NTAsMTAgKzc1MCwxMCBAQCBib29s
IENTU1J1bGU6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgQ1NTUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmpl
Y3RJbXAgKkNTU1J1bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKkNTU1J1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtNzYxLDcgKzc2MSw3IEBAIE9iamVjdEltcCAqQ1NTUnVsZTo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU1J1bGU+KHAxLHN0YXRpY19jYXN0PENT
U1J1bGU6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NSdWxlOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU1J1bGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU1J1bGU+KHAxLHN0YXRpY19jYXN0
PENTU1J1bGU6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNzcwLDE1ICs3NzAsMTUgQEAgYm9vbCBD
U1NSdWxlTGlzdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlIAogewogICAgIGNvbnN0IEhhc2hFbnRy
eSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZDU1NSdWxlTGlzdDo6c19oYXNoVGFibGUscDIpOwog
ICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IENTU1J1bGVMaXN0UHJv
dG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRy
dWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IENTU1J1bGVMaXN0UHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGJvb2wg
b2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsKICAgICBpZihv
ayAmJiBpIDwgbGVuZ3RoKCkpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgQ1NTUnVsZUxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
Q1NTUnVsZUxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgYm9vbCBvazsK
ICAgICB1bnNpZ25lZCBpbnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwpAQCAtODA0LDE4ICs4
MDQsMTggQEAgQ1NTUnVsZUxpc3QgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdAogCVFfVU5V
U0VEKHAxKTsgcmV0dXJuIENTU1J1bGVMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBDU1NSdWxlTGlz
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NSdWxl
TGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3Qg
cHJvdG8gPSBDU1NSdWxlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBDU1NSdWxlTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwog
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IENTU1J1bGVMaXN0Ojpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTUnVsZUxpc3Q6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gQ1NTUnVsZUxpc3RQ
cm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpDU1NSdWxlTGlzdDo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC04MjMsNyArODIzLDcgQEAgT2JqZWN0SW1wICpDU1NSdWxl
TGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPENTU1J1bGVM
aXN0PihwMSxzdGF0aWNfY2FzdDxDU1NSdWxlTGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZh
bHVlIENTU1J1bGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNT
U1J1bGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNo
ZURPTU9iamVjdDxDU1NSdWxlTGlzdD4ocDEsc3RhdGljX2Nhc3Q8Q1NTUnVsZUxpc3Q6OlByaXZh
dGUgKj4oZCkpOwogfQpAQCAtODMyLDE1ICs4MzIsMTUgQEAgYm9vbCBDU1NTdHlsZURlY2xhcmF0
aW9uOjpoYXNQcm9wZXJ0eShFeAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZDU1NTdHlsZURlY2xhcmF0aW9uOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYo
ZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gQ1NTU3R5bGVEZWNsYXJhdGlvblBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0
cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDU1NTdHlsZURlY2xhcmF0aW9uUHJvdG86OnNl
bGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwog
ICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsK
ICAgICBpZihvayAmJiBpIDwgbGVuZ3RoKCkpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5
SW5kZXgoJm9rKTsKQEAgLTg2NiwxMCArODY2LDEwIEBAIENTU1N0eWxlRGVjbGFyYXRpb24gS0RP
TTo6RWNtYUludGVyZmFjZToKIAlRX1VOVVNFRChwMSk7IHJldHVybiBDU1NTdHlsZURlY2xhcmF0
aW9uOjpudWxsOwogfQogCi1WYWx1ZSBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1N0eWxlRGVjbGFyYXRpb246Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0g
Q1NTU3R5bGVEZWNsYXJhdGlvblByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBDU1NTdHlsZURlY2xhcmF0aW9uUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNF
RChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtODg1LDEwICs4ODUsMTAgQEAg
Ym9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjpwdXRJblBhcmVudHMoUAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotT2JqZWN0IENTU1N0eWxlRGVjbGFyYXRpb246OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpDU1NTdHlsZURlY2xhcmF0aW9uOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIENTU1N0eWxlRGVjbGFyYXRp
b25Qcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpDU1NTdHlsZURlY2xhcmF0aW9u
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTg5Niw3ICs4OTYsNyBAQCBPYmplY3RJ
bXAgKkNTU1N0eWxlRGVjbGFyYXRpb246OmJyaWRnZShFCiAgICAgcmV0dXJuIG5ldyBET01SV0Jy
aWRnZTxDU1NTdHlsZURlY2xhcmF0aW9uPihwMSxzdGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0
aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZURlY2xhcmF0aW9uOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxD
U1NTdHlsZURlY2xhcmF0aW9uPihwMSxzdGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0aW9uOjpQ
cml2YXRlICo+KGQpKTsKIH0KQEAgLTkwOSwxMiArOTA5LDEyIEBAIGJvb2wgQ1NTU3R5bGVSdWxl
OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENT
U1N0eWxlUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHls
ZVJ1bGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdl
dFZhbHVlPENTU1N0eWxlUnVsZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1W
YWx1ZSBDU1NTdHlsZVJ1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqQ1NTU3R5bGVSdWxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIGlmKENTU1J1bGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENTU1J1bGU6
OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtOTM0LDEwICs5MzQs
MTAgQEAgYm9vbCBDU1NTdHlsZVJ1bGU6OnB1dEluUGFyZW50cyhQVVRfTUVUSAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotT2JqZWN0IENTU1N0eWxlUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKkNTU1N0eWxlUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRp
bk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwo
KSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTU3R5bGVSdWxlOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTk0NSw3ICs5NDUsNyBAQCBPYmplY3RJbXAgKkNT
U1N0eWxlUnVsZTo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxD
U1NTdHlsZVJ1bGU+KHAxLHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZTo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIENTU1N0eWxlUnVsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1Zh
bHVlSW1wICpDU1NTdHlsZVJ1bGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU1N0eWxlUnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTk1NCwxMyArOTU0LDEzIEBAIGJvb2wgQ1NT
U3R5bGVTaGVldDo6aGFzUHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkg
KmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmQ1NTU3R5bGVTaGVldDo6c19oYXNoVGFibGUscDIpOwog
ICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IENTU1N0eWxlU2hlZXRQ
cm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gQ1NTU3R5bGVTaGVldFByb3RvOjpzZWxmKHAx
KTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBp
ZihTdHlsZVNoZWV0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotVmFsdWUgQ1NTU3R5bGVTaGVldDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZVNoZWV0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBsb29rdXBHZXQ8Q1NTU3R5bGVTaGVldFByb3RvRnVuYyxDU1NTdHls
ZVNoZWV0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC05ODMsMTAgKzk4Mywx
MCBAQCBDU1NTdHlsZVNoZWV0IEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVyCiAJUV9VTlVTRUQo
cDEpOyByZXR1cm4gQ1NTU3R5bGVTaGVldDo6bnVsbDsKIH0KIAotVmFsdWUgQ1NTU3R5bGVTaGVl
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHls
ZVNoZWV0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVj
dCBwcm90byA9IENTU1N0eWxlU2hlZXRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gQ1NTU3R5bGVTaGVldFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoU3R5bGVT
aGVldDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU3R5bGVTaGVldDo6Z2V0KHAxLHAyLHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0xMDA1LDEwICsxMDA1LDEwIEBAIGJv
b2wgQ1NTU3R5bGVTaGVldDo6cHV0SW5QYXJlbnRzKFBVVF9NRVQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU9iamVjdCBDU1NTdHlsZVNoZWV0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqQ1NTU3R5bGVTaGVldDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBDU1NTdHlsZVNoZWV0UHJvdG86OnNlbGYocDEpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqQ1NTU3R5bGVTaGVldDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CkBAIC0xMDE2LDcgKzEwMTYsNyBAQCBPYmplY3RJbXAgKkNTU1N0eWxlU2hlZXQ6OmJyaWRn
ZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxDU1NTdHlsZVNoZWV0PihwMSxz
dGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NT
U3R5bGVTaGVldDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHls
ZVNoZWV0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURP
TU9iamVjdDxDU1NTdHlsZVNoZWV0PihwMSxzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0OjpQcml2
YXRlICo+KGQpKTsKIH0KQEAgLTEwMjksMTIgKzEwMjksMTIgQEAgYm9vbCBDU1NWYWx1ZTo6aGFz
UHJvcGVydHkoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgQ1NT
VmFsdWU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTVmFsdWU6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPENT
U1ZhbHVlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIENTU1ZhbHVl
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1ZhbHVl
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAx
KTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpA
QCAtMTA1MSwxMCArMTA1MSwxMCBAQCBib29sIENTU1ZhbHVlOjpwdXRJblBhcmVudHMoUFVUX01F
VEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgQ1NTVmFsdWU6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpDU1NWYWx1ZTo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTVmFsdWU6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTA2Miw3ICsxMDYyLDcgQEAgT2JqZWN0
SW1wICpDU1NWYWx1ZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgRE9NUldC
cmlkZ2U8Q1NTVmFsdWU+KHAxLHN0YXRpY19jYXN0PENTU1ZhbHVlOjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgQ1NTVmFsdWU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqQ1NTVmFsdWU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNh
Y2hlRE9NT2JqZWN0PENTU1ZhbHVlPihwMSxzdGF0aWNfY2FzdDxDU1NWYWx1ZTo6UHJpdmF0ZSAq
PihkKSk7CiB9CkBAIC0xMDcxLDggKzEwNzEsOCBAQCBib29sIENTU1ZhbHVlTGlzdDo6aGFzUHJv
cGVydHkoRXhlY1N0YXRlCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5k
RW50cnkoJkNTU1ZhbHVlTGlzdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0
cnVlOwotICAgIE9iamVjdCBwcm90byA9IENTU1ZhbHVlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAg
ICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdElt
cCAqcHJvdG8gPSBDU1NWYWx1ZUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoQ1NTVmFsdWU6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBpbnQg
aSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwpAQCAtMTA4MCw3ICsxMDgwLDcgQEAgYm9vbCBDU1NW
YWx1ZUxpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgQ1NTVmFsdWVMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KkNTU1ZhbHVlTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBib29sIG9r
OwogICAgIHVuc2lnbmVkIGludCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7CkBAIC0xMTA2LDEw
ICsxMTA2LDEwIEBAIENTU1ZhbHVlTGlzdCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcmkKIAlR
X1VOVVNFRChwMSk7IHJldHVybiBDU1NWYWx1ZUxpc3Q6Om51bGw7CiB9CiAKLVZhbHVlIENTU1Zh
bHVlTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpD
U1NWYWx1ZUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAg
T2JqZWN0IHByb3RvID0gQ1NTVmFsdWVMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3Rv
Lmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IENTU1ZhbHVlTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoQ1NT
VmFsdWU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENTU1ZhbHVlOjpnZXQocDEscDIscDMp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAgLTExMjgsMTAgKzExMjgsMTAgQEAgYm9v
bCBDU1NWYWx1ZUxpc3Q6OnB1dEluUGFyZW50cyhQVVRfTUVUSAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotT2JqZWN0IENTU1ZhbHVlTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKkNTU1ZhbHVlTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBDU1NWYWx1ZUxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpDU1NWYWx1ZUxpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtMTEzOSw3ICsxMTM5LDcgQEAgT2JqZWN0SW1wICpDU1NWYWx1ZUxpc3Q6OmJyaWRnZShFeGVj
U3RhdAogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8Q1NTVmFsdWVMaXN0PihwMSxzdGF0aWNf
Y2FzdDxDU1NWYWx1ZUxpc3Q6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NWYWx1ZUxp
c3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqQ1NTVmFsdWVMaXN0Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxD
U1NWYWx1ZUxpc3Q+KHAxLHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdDo6UHJpdmF0ZSAqPihkKSk7
CiB9CkBAIC0xMTQ4LDEzICsxMTQ4LDEzIEBAIGJvb2wgQ2hhcmFjdGVyRGF0YTo6aGFzUHJvcGVy
dHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRy
eSgmQ2hhcmFjdGVyRGF0YTo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVl
OwotICAgIE9iamVjdCBwcm90byA9IENoYXJhY3RlckRhdGFQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gQ2hhcmFjdGVyRGF0YVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihOb2RlOjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgQ2hhcmFj
dGVyRGF0YTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDaGFyYWN0ZXJE
YXRhOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8
Q2hhcmFjdGVyRGF0YVByb3RvRnVuYyxDaGFyYWN0ZXJEYXRhPihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CkBAIC0xMTgzLDEwICsxMTgzLDEwIEBAIENoYXJhY3RlckRhdGEgS0RPTTo6
RWNtYUludGVyZmFjZTo6aW5oZXIKIAlRX1VOVVNFRChwMSk7IHJldHVybiBDaGFyYWN0ZXJEYXRh
OjpudWxsOwogfQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNoYXJhY3RlckRhdGE6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gQ2hhcmFjdGVyRGF0YVBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDaGFyYWN0ZXJEYXRhUHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihOb2RlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBOb2RlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAgLTEy
MDUsMTAgKzEyMDUsMTAgQEAgYm9vbCBDaGFyYWN0ZXJEYXRhOjpwdXRJblBhcmVudHMoUFVUX01F
VAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IENoYXJhY3RlckRhdGE6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpDaGFyYWN0ZXJEYXRhOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIENoYXJhY3RlckRh
dGFQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpDaGFyYWN0ZXJEYXRhOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTEyMTYsNyArMTIxNiw3IEBAIE9iamVjdEltcCAq
Q2hhcmFjdGVyRGF0YTo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdl
PENoYXJhY3RlckRhdGE+KHAxLHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGE6OlByaXZhdGUgKj4o
ZCkpOwogfQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKkNoYXJhY3RlckRhdGE6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENoYXJhY3RlckRhdGE+KHAxLHN0YXRpY19jYXN0
PENoYXJhY3RlckRhdGE6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTIyOSwyMSArMTIyOSwyMSBA
QCBib29sIENvdW50ZXI6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEsCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBDb3VudGVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKkNvdW50ZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGxvb2t1cEdldFZhbHVlPENvdW50ZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0K
IAotVmFsdWUgQ291bnRlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpDb3VudGVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgQ291bnRlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKkNvdW50ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmpl
Y3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkNvdW50ZXI6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtMTI1MSw3ICsxMjUxLDcgQEAgT2JqZWN0SW1wICpDb3VudGVyOjpi
cmlkZ2UoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPENvdW50ZXI+KHAx
LHN0YXRpY19jYXN0PENvdW50ZXI6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDb3VudGVy
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNvdW50ZXI6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENvdW50ZXI+
KHAxLHN0YXRpY19jYXN0PENvdW50ZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTI2MCwxMiAr
MTI2MCwxMiBAQCBib29sIERPTUNvbmZpZ3VyYXRpb246Omhhc1Byb3BlcnR5KEV4ZWNTCiB7CiAg
ICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkRPTUNvbmZpZ3VyYXRp
b246OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3Qg
cHJvdG8gPSBET01Db25maWd1cmF0aW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERP
TUNvbmZpZ3VyYXRpb25Qcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBET01D
b25maWd1cmF0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRPTUNv
bmZpZ3VyYXRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxv
b2t1cEdldDxET01Db25maWd1cmF0aW9uUHJvdG9GdW5jLERPTUNvbmZpZ3VyYXRpb24+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTEyODgsMTggKzEyODgsMTggQEAgRE9NQ29u
ZmlndXJhdGlvbiBLRE9NOjpFY21hSW50ZXJmYWNlOjppbgogCVFfVU5VU0VEKHAxKTsgcmV0dXJu
IERPTUNvbmZpZ3VyYXRpb246Om51bGw7CiB9CiAKLVZhbHVlIERPTUNvbmZpZ3VyYXRpb246Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NQ29uZmlndXJh
dGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3Qg
cHJvdG8gPSBET01Db25maWd1cmF0aW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1w
ICpwcm90byA9IERPTUNvbmZpZ3VyYXRpb25Qcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5V
U0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBET01Db25maWd1
cmF0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqRE9NQ29u
ZmlndXJhdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBET01Db25maWd1cmF0aW9uUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqRE9NQ29uZmlndXJhdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMzA3
LDcgKzEzMDcsNyBAQCBPYmplY3RJbXAgKkRPTUNvbmZpZ3VyYXRpb246OmJyaWRnZShFeGVjCiAg
ICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8RE9NQ29uZmlndXJhdGlvbj4ocDEsc3RhdGljX2Nhc3Q8
RE9NQ29uZmlndXJhdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERPTUNvbmZpZ3Vy
YXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRE9NQ29uZmlndXJh
dGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01P
YmplY3Q8RE9NQ29uZmlndXJhdGlvbj4ocDEsc3RhdGljX2Nhc3Q8RE9NQ29uZmlndXJhdGlvbjo6
UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xMzIwLDcgKzEzMjAsNyBAQCBib29sIERPTUVycm9yOjpo
YXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBE
T01FcnJvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01FcnJvcjo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8
RE9NRXJyb3I+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTEzMzMsMTYgKzEz
MzMsMTYgQEAgRE9NRXJyb3IgS0RPTTo6dG9ET01FcnJvcihLSlM6OkV4ZWNTdGF0ZQogICAgIHJl
dHVybiBET01FcnJvcjo6bnVsbDsKIH0KIAotVmFsdWUgRE9NRXJyb3I6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NRXJyb3I6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7
IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBET01F
cnJvcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRPTUVycm9y
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAx
LT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9i
amVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0
SW1wICpET01FcnJvcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMzUwLDcgKzEz
NTAsNyBAQCBPYmplY3RJbXAgKkRPTUVycm9yOjpicmlkZ2UoRXhlY1N0YXRlICpwCiAgICAgcmV0
dXJuIG5ldyBET01CcmlkZ2U8RE9NRXJyb3I+KHAxLHN0YXRpY19jYXN0PERPTUVycm9yOjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRE9NRXJyb3I6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqRE9NRXJyb3I6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERPTUVycm9yPihwMSxzdGF0aWNfY2FzdDxET01FcnJv
cjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xMzU5LDEyICsxMzU5LDEyIEBAIGJvb2wgRE9NRXJy
b3JIYW5kbGVyOjpoYXNQcm9wZXJ0eShFeGVjU3QKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUg
PSBMb29rdXA6OmZpbmRFbnRyeSgmRE9NRXJyb3JIYW5kbGVyOjpzX2hhc2hUYWJsZSxwMik7CiAg
ICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gRE9NRXJyb3JIYW5kbGVy
UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERPTUVycm9ySGFuZGxlclByb3RvOjpzZWxm
KHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERPTUVycm9ySGFuZGxlcjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01FcnJvckhhbmRsZXI6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxET01FcnJvckhhbmRsZXJQcm90
b0Z1bmMsRE9NRXJyb3JIYW5kbGVyPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBA
IC0xMzg3LDE4ICsxMzg3LDE4IEBAIERPTUVycm9ySGFuZGxlciBLRE9NOjpFY21hSW50ZXJmYWNl
OjppbmgKIAlRX1VOVVNFRChwMSk7IHJldHVybiBET01FcnJvckhhbmRsZXI6Om51bGw7CiB9CiAK
LVZhbHVlIERPTUVycm9ySGFuZGxlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpET01FcnJvckhhbmRsZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gRE9NRXJyb3JIYW5kbGVyUHJvdG86OnNl
bGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdl
dChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERPTUVycm9ySGFuZGxlclByb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8t
PmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotT2JqZWN0IERPTUVycm9ySGFuZGxlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitPYmplY3RJbXAgKkRPTUVycm9ySGFuZGxlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBET01FcnJvckhhbmRsZXJQcm90bzo6c2VsZihw
MSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4g
TlVMTDsKIH0KIAogT2JqZWN0SW1wICpET01FcnJvckhhbmRsZXI6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtMTQwNiw3ICsxNDA2LDcgQEAgT2JqZWN0SW1wICpET01FcnJvckhhbmRs
ZXI6OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERPTUVycm9ySGFuZGxl
cj4ocDEsc3RhdGljX2Nhc3Q8RE9NRXJyb3JIYW5kbGVyOjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgRE9NRXJyb3JIYW5kbGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKkRPTUVycm9ySGFuZGxlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gY2FjaGVET01PYmplY3Q8RE9NRXJyb3JIYW5kbGVyPihwMSxzdGF0aWNfY2FzdDxET01F
cnJvckhhbmRsZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTQxOSwyMSArMTQxOSwyMSBAQCBi
b29sIERPTUV4Y2VwdGlvbjo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBET01FeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqRE9NRXhjZXB0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBsb29rdXBHZXRWYWx1ZTxET01FeGNlcHRpb24+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KIAotVmFsdWUgRE9NRXhjZXB0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRPTUV4Y2VwdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9V
TlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IERPTUV4Y2Vw
dGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRPTUV4Y2Vw
dGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVy
biBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVy
biBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9i
amVjdEltcCAqRE9NRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE0
NDEsNyArMTQ0MSw3IEBAIE9iamVjdEltcCAqRE9NRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0YXQK
ICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxET01FeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PERP
TUV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERPTUV4Y2VwdGlvbjo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpET01FeGNlcHRpb246OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERPTUV4Y2Vw
dGlvbj4ocDEsc3RhdGljX2Nhc3Q8RE9NRXhjZXB0aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTE0NTAsMTIgKzE0NTAsMTIgQEAgYm9vbCBET01JbXBsZW1lbnRhdGlvbjo6aGFzUHJvcGVydHko
RXhlYwogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZET01J
bXBsZW1lbnRhdGlvbjo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwot
ICAgIE9iamVjdCBwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJvdG86OnNlbGYocDEpOwotICAg
IGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1w
ICpwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgRE9NSW1wbGVtZW50YXRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqRE9NSW1wbGVtZW50YXRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGxvb2t1cEdldDxET01JbXBsZW1lbnRhdGlvblByb3RvRnVuYyxET01JbXBs
ZW1lbnRhdGlvbj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMTQ3OCwxOCAr
MTQ3OCwxOCBAQCBET01JbXBsZW1lbnRhdGlvbiBLRE9NOjpFY21hSW50ZXJmYWNlOjppCiAJUV9V
TlVTRUQocDEpOyByZXR1cm4gRE9NSW1wbGVtZW50YXRpb246Om51bGw7CiB9CiAKLVZhbHVlIERP
TUltcGxlbWVudGF0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKkRPTUltcGxlbWVudGF0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewotICAgIE9iamVjdCBwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChw
MSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJvdG86OnNl
bGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+
Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgRE9NSW1wbGVtZW50YXRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorT2JqZWN0SW1wICpET01JbXBsZW1lbnRhdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBET01JbXBsZW1lbnRhdGlvblByb3RvOjpz
ZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkRPTUltcGxlbWVudGF0aW9uOjpicmlkZ2UoRXhl
Y1N0YXRlICpwMSkgY29uc3QKQEAgLTE0OTcsNyArMTQ5Nyw3IEBAIE9iamVjdEltcCAqRE9NSW1w
bGVtZW50YXRpb246OmJyaWRnZShFeGUKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxET01JbXBs
ZW1lbnRhdGlvbj4ocDEsc3RhdGljX2Nhc3Q8RE9NSW1wbGVtZW50YXRpb246OlByaXZhdGUgKj4o
ZCkpOwogfQogCi1WYWx1ZSBET01JbXBsZW1lbnRhdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK1ZhbHVlSW1wICpET01JbXBsZW1lbnRhdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8RE9NSW1wbGVtZW50YXRpb24+KHAx
LHN0YXRpY19jYXN0PERPTUltcGxlbWVudGF0aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE1
MTAsMjEgKzE1MTAsMjEgQEAgYm9vbCBET01Mb2NhdG9yOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUg
KgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRE9NTG9jYXRvcjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01Mb2NhdG9yOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxET01Mb2NhdG9yPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIERPTUxvY2F0b3I6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NTG9jYXRvcjo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VE
KHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0
IERPTUxvY2F0b3I6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpE
T01Mb2NhdG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpET01Mb2NhdG9yOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTE1MzIsNyArMTUzMiw3IEBAIE9iamVjdEltcCAqRE9NTG9jYXRvcjo6YnJpZGdlKEV4ZWNTdGF0
ZSAKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxET01Mb2NhdG9yPihwMSxzdGF0aWNfY2FzdDxE
T01Mb2NhdG9yOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRE9NTG9jYXRvcjo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpET01Mb2NhdG9yOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxET01Mb2NhdG9yPihw
MSxzdGF0aWNfY2FzdDxET01Mb2NhdG9yOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE1NDEsMTIg
KzE1NDEsMTIgQEAgYm9vbCBET01TdHJpbmdMaXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogewog
ICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZET01TdHJpbmdMaXN0
OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHBy
b3RvID0gRE9NU3RyaW5nTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBET01TdHJp
bmdMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRE9NU3RyaW5nTGlz
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01TdHJpbmdMaXN0Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8RE9NU3Ry
aW5nTGlzdFByb3RvRnVuYyxET01TdHJpbmdMaXN0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CkBAIC0xNTY5LDE4ICsxNTY5LDE4IEBAIERPTVN0cmluZ0xpc3QgS0RPTTo6RWNtYUlu
dGVyZmFjZTo6aW5oZXIKIAlRX1VOVVNFRChwMSk7IHJldHVybiBET01TdHJpbmdMaXN0OjpudWxs
OwogfQogCi1WYWx1ZSBET01TdHJpbmdMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKkRPTVN0cmluZ0xpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gRE9NU3RyaW5nTGlzdFByb3RvOjpz
ZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5n
ZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBET01TdHJpbmdMaXN0UHJvdG86OnNl
bGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+
Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgRE9NU3RyaW5nTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKkRPTVN0cmluZ0xpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gRE9NU3RyaW5nTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKkRPTVN0cmluZ0xpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtMTU4OCw3ICsxNTg4LDcgQEAgT2JqZWN0SW1wICpET01TdHJpbmdMaXN0OjpicmlkZ2Uo
RXhlY1N0YQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERPTVN0cmluZ0xpc3Q+KHAxLHN0YXRp
Y19jYXN0PERPTVN0cmluZ0xpc3Q6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBET01TdHJp
bmdMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkRPTVN0cmluZ0xp
c3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2Jq
ZWN0PERPTVN0cmluZ0xpc3Q+KHAxLHN0YXRpY19jYXN0PERPTVN0cmluZ0xpc3Q6OlByaXZhdGUg
Kj4oZCkpOwogfQpAQCAtMTYwMSw3ICsxNjAxLDcgQEAgYm9vbCBET01Vc2VyRGF0YTo6aGFzUHJv
cGVydHkoRXhlY1N0YXRlIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRE9NVXNlckRh
dGE6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NVXNlckRhdGE6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPERP
TVVzZXJEYXRhPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0xNjE0LDE2ICsx
NjE0LDE2IEBAIERPTVVzZXJEYXRhIEtET006OnRvRE9NVXNlckRhdGEoS0pTOjpFeGUKICAgICBy
ZXR1cm4gRE9NVXNlckRhdGE6Om51bGw7CiB9CiAKLVZhbHVlIERPTVVzZXJEYXRhOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRPTVVzZXJEYXRhOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9V
TlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1P
YmplY3QgRE9NVXNlckRhdGE6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpET01Vc2VyRGF0YTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgp
OwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiB9CiAKIE9iamVjdEltcCAqRE9NVXNlckRhdGE6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBj
b25zdApAQCAtMTYzMSw3ICsxNjMxLDcgQEAgT2JqZWN0SW1wICpET01Vc2VyRGF0YTo6YnJpZGdl
KEV4ZWNTdGF0ZQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERPTVVzZXJEYXRhPihwMSxzdGF0
aWNfY2FzdDxET01Vc2VyRGF0YTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERPTVVzZXJE
YXRhOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkRPTVVzZXJEYXRhOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxE
T01Vc2VyRGF0YT4ocDEsc3RhdGljX2Nhc3Q8RE9NVXNlckRhdGE6OlByaXZhdGUgKj4oZCkpOwog
fQpAQCAtMTY0MCw4ICsxNjQwLDggQEAgYm9vbCBEb2N1bWVudDo6aGFzUHJvcGVydHkoRXhlY1N0
YXRlICpwMQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZE
b2N1bWVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9i
amVjdCBwcm90byA9IERvY3VtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERvY3Vt
ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOwogICAgIGlmKERvY3VtZW50RXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CiAgICAgaWYoRG9jdW1lbnRSYW5nZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gdHJ1ZTsKICAgICBpZihEb2N1bWVudFN0eWxlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biB0cnVlOwpAQCAtMTY1Miw3ICsxNjUyLDcgQEAgYm9vbCBEb2N1bWVudDo6aGFzUHJvcGVydHko
RXhlY1N0YXRlICpwMQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRG9jdW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnQ6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxEb2N1bWVudFByb3RvRnVu
YyxEb2N1bWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMTY3NSwxMCAr
MTY3NSwxMCBAQCBEb2N1bWVudCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRECiAJUV9V
TlVTRUQocDEpOyByZXR1cm4gRG9jdW1lbnQ6Om51bGw7CiB9CiAKLVZhbHVlIERvY3VtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9
IERvY3VtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERvY3Vt
ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihEb2N1bWVudEV2ZW50OjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBEb2N1bWVudEV2ZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKERv
Y3VtZW50UmFuZ2U6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIERvY3VtZW50UmFuZ2U6Omdl
dChwMSxwMixwMyk7CiAgICAgaWYoRG9jdW1lbnRTdHlsZTo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gRG9jdW1lbnRTdHlsZTo6Z2V0KHAxLHAyLHAzKTsKQEAgLTE3MDMsMTAgKzE3MDMsMTAg
QEAgYm9vbCBEb2N1bWVudDo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0RfQQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotT2JqZWN0IERvY3VtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqRG9jdW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIGlmKHAxKSByZXR1cm4gRG9jdW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpEb2N1bWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNzE0LDcg
KzE3MTQsNyBAQCBPYmplY3RJbXAgKkRvY3VtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwCiAgICAg
cmV0dXJuIG5ldyBET01SV0JyaWRnZTxEb2N1bWVudD4ocDEsc3RhdGljX2Nhc3Q8RG9jdW1lbnQ6
OlByaXZhdGUgKj4oS0RPTTo6RXZlbnRUYXJnZXQ6OmQpKTsKIH0KIAotVmFsdWUgRG9jdW1lbnQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnQ6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERvY3VtZW50
PihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudDo6UHJpdmF0ZSAqPihLRE9NOjpFdmVudFRhcmdldDo6
ZCkpOwogfQpAQCAtMTcyMywxMiArMTcyMywxMiBAQCBib29sIERvY3VtZW50RXZlbnQ6Omhhc1By
b3BlcnR5KEV4ZWNTdGF0CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5k
RW50cnkoJkRvY3VtZW50RXZlbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4g
dHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBEb2N1bWVudEV2ZW50UHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IERvY3VtZW50RXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBEb2N1bWVudEV2ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKkRvY3VtZW50RXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGxvb2t1cEdldDxEb2N1bWVudEV2ZW50UHJvdG9GdW5jLERvY3VtZW50RXZlbnQ+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTE3NTMsMTggKzE3NTMsMTggQEAgRG9jdW1l
bnRFdmVudCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcgogCVFfVU5VU0VEKHAxKTsgcmV0dXJu
IERvY3VtZW50RXZlbnQ6Om51bGw7CiB9CiAKLVZhbHVlIERvY3VtZW50RXZlbnQ6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRFdmVudDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBE
b2N1bWVudEV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERv
Y3VtZW50RXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBEb2N1bWVudEV2ZW50Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqRG9jdW1lbnRFdmVudDo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBEb2N1bWVudEV2ZW50
UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRG9jdW1lbnRFdmVudDo6YnJpZGdl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNzcyLDcgKzE3NzIsNyBAQCBPYmplY3RJbXAgKkRv
Y3VtZW50RXZlbnQ6OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8RG9j
dW1lbnRFdmVudD4ocDEsc3RhdGljX2Nhc3Q8RG9jdW1lbnRFdmVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIERvY3VtZW50RXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqRG9jdW1lbnRFdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gY2FjaGVET01PYmplY3Q8RG9jdW1lbnRFdmVudD4ocDEsc3RhdGljX2Nhc3Q8RG9j
dW1lbnRFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNzgxLDEyICsxNzgxLDEyIEBAIGJv
b2wgRG9jdW1lbnRSYW5nZTo6aGFzUHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNo
RW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmRG9jdW1lbnRSYW5nZTo6c19oYXNoVGFibGUs
cDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IERvY3VtZW50
UmFuZ2VQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRSYW5nZVByb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERvY3VtZW50UmFuZ2U6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRSYW5nZTo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PERvY3VtZW50UmFuZ2VQcm90b0Z1
bmMsRG9jdW1lbnRSYW5nZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMTgx
MSwxOCArMTgxMSwxOCBAQCBEb2N1bWVudFJhbmdlIEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVy
CiAJUV9VTlVTRUQocDEpOyByZXR1cm4gRG9jdW1lbnRSYW5nZTo6bnVsbDsKIH0KIAotVmFsdWUg
RG9jdW1lbnRSYW5nZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpEb2N1bWVudFJhbmdlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewotICAgIE9iamVjdCBwcm90byA9IERvY3VtZW50UmFuZ2VQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAg
ICBPYmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRSYW5nZVByb3RvOjpzZWxmKHAxKTsKKyAgICBp
Zihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAg
ICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IERv
Y3VtZW50UmFuZ2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpE
b2N1bWVudFJhbmdlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIERvY3VtZW50UmFuZ2VQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVj
dDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1w
ICpEb2N1bWVudFJhbmdlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE4MzAsNyAr
MTgzMCw3IEBAIE9iamVjdEltcCAqRG9jdW1lbnRSYW5nZTo6YnJpZGdlKEV4ZWNTdGEKICAgICBy
ZXR1cm4gbmV3IERPTUJyaWRnZTxEb2N1bWVudFJhbmdlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVu
dFJhbmdlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRG9jdW1lbnRSYW5nZTo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFJhbmdlOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxEb2N1bWVudFJh
bmdlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudFJhbmdlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTE4NDMsMjEgKzE4NDMsMjEgQEAgYm9vbCBEb2N1bWVudFN0eWxlOjpoYXNQcm9wZXJ0eShFeGVj
U3RhdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRG9jdW1lbnRTdHlsZTo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFN0eWxlOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxEb2N1bWVudFN0
eWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIERvY3VtZW50U3R5
bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1l
bnRTdHlsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VO
VVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotT2JqZWN0IERvY3VtZW50U3R5bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpEb2N1bWVudFN0eWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGlu
T2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpEb2N1bWVudFN0eWxlOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE4NjUsNyArMTg2NSw3IEBAIE9iamVjdEltcCAq
RG9jdW1lbnRTdHlsZTo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxE
b2N1bWVudFN0eWxlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudFN0eWxlOjpQcml2YXRlICo+KGQp
KTsKIH0KIAotVmFsdWUgRG9jdW1lbnRTdHlsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K1ZhbHVlSW1wICpEb2N1bWVudFN0eWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxEb2N1bWVudFN0eWxlPihwMSxzdGF0aWNfY2FzdDxE
b2N1bWVudFN0eWxlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE4NzQsMTIgKzE4NzQsMTIgQEAg
Ym9vbCBEb2N1bWVudFRyYXZlcnNhbDo6aGFzUHJvcGVydHkoRXhlYwogewogICAgIGNvbnN0IEhh
c2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZEb2N1bWVudFRyYXZlcnNhbDo6c19oYXNo
VGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IERv
Y3VtZW50VHJhdmVyc2FsUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERvY3VtZW50VHJh
dmVyc2FsUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRG9jdW1lbnRUcmF2
ZXJzYWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRUcmF2
ZXJzYWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdl
dDxEb2N1bWVudFRyYXZlcnNhbFByb3RvRnVuYyxEb2N1bWVudFRyYXZlcnNhbD4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMTkwNCwxOCArMTkwNCwxOCBAQCBEb2N1bWVudFRy
YXZlcnNhbCBLRE9NOjpFY21hSW50ZXJmYWNlOjppCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gRG9j
dW1lbnRUcmF2ZXJzYWw6Om51bGw7CiB9CiAKLVZhbHVlIERvY3VtZW50VHJhdmVyc2FsOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50VHJhdmVy
c2FsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBw
cm90byA9IERvY3VtZW50VHJhdmVyc2FsUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1w
ICpwcm90byA9IERvY3VtZW50VHJhdmVyc2FsUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VO
VVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgRG9jdW1lbnRU
cmF2ZXJzYWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpEb2N1
bWVudFRyYXZlcnNhbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYo
cDEpIHJldHVybiBEb2N1bWVudFRyYXZlcnNhbFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKkRvY3VtZW50VHJhdmVyc2FsOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTE5MjMsNyArMTkyMyw3IEBAIE9iamVjdEltcCAqRG9jdW1lbnRUcmF2ZXJzYWw6OmJyaWRnZShF
eGUKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxEb2N1bWVudFRyYXZlcnNhbD4ocDEsc3RhdGlj
X2Nhc3Q8RG9jdW1lbnRUcmF2ZXJzYWw6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBEb2N1
bWVudFRyYXZlcnNhbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpEb2N1
bWVudFRyYXZlcnNhbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
Y2FjaGVET01PYmplY3Q8RG9jdW1lbnRUcmF2ZXJzYWw+KHAxLHN0YXRpY19jYXN0PERvY3VtZW50
VHJhdmVyc2FsOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE5MzYsNyArMTkzNiw3IEBAIGJvb2wg
RG9jdW1lbnRUeXBlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIERvY3VtZW50VHlwZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpEb2N1bWVudFR5cGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGxvb2t1cEdldFZhbHVlPERvY3VtZW50VHlwZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQpAQCAtMTk0OSw3ICsxOTQ5LDcgQEAgRG9jdW1lbnRUeXBlIEtET006OnRvRG9jdW1l
bnRUeXBlKEtKUzo6RQogICAgIHJldHVybiBEb2N1bWVudFR5cGU6Om51bGw7CiB9CiAKLVZhbHVl
IERvY3VtZW50VHlwZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpEb2N1bWVudFR5cGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgaWYoTm9kZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gTm9kZTo6Z2V0KHAxLHAy
LHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xOTY0LDEwICsxOTY0LDEwIEBAIGJv
b2wgRG9jdW1lbnRUeXBlOjpwdXQoUFVUX01FVEhPRF9BUkdTKQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotT2JqZWN0IERvY3VtZW50VHlwZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKkRvY3VtZW50VHlwZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRG9jdW1lbnRUeXBlOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTE5NzUsNyArMTk3NSw3IEBAIE9iamVjdEltcCAqRG9jdW1lbnRU
eXBlOjpicmlkZ2UoRXhlY1N0YXQKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPERvY3VtZW50
VHlwZT4ocDEsc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlOjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgRG9jdW1lbnRUeXBlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KkRvY3VtZW50VHlwZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
Y2FjaGVET01PYmplY3Q8RG9jdW1lbnRUeXBlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudFR5cGU6
OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTk4OCwyMSArMTk4OCwyMSBAQCBib29sIERvY3VtZW50
Vmlldzo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBEb2N1bWVudFZpZXc6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9j
dW1lbnRWaWV3OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29r
dXBHZXRWYWx1ZTxEb2N1bWVudFZpZXc+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0K
IAotVmFsdWUgRG9jdW1lbnRWaWV3OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKkRvY3VtZW50Vmlldzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwog
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IERvY3VtZW50Vmlldzo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRvY3VtZW50Vmlldzo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRG9j
dW1lbnRWaWV3OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIwMTAsNyArMjAxMCw3
IEBAIE9iamVjdEltcCAqRG9jdW1lbnRWaWV3OjpicmlkZ2UoRXhlY1N0YXQKICAgICByZXR1cm4g
bmV3IERPTUJyaWRnZTxEb2N1bWVudFZpZXc+KHAxLHN0YXRpY19jYXN0PERvY3VtZW50Vmlldzo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERvY3VtZW50Vmlldzo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFZpZXc6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERvY3VtZW50Vmlldz4ocDEsc3Rh
dGljX2Nhc3Q8RG9jdW1lbnRWaWV3OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIwMTksMTMgKzIw
MTksMTMgQEAgYm9vbCBFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLAogewogICAg
IGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZFbGVtZW50OjpzX2hhc2hU
YWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gRWxl
bWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBFbGVtZW50UHJvdG86OnNlbGYocDEp
OworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlm
KE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxv
b2t1cEdldDxFbGVtZW50UHJvdG9GdW5jLEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KQEAgLTIwNDgsMTAgKzIwNDgsMTAgQEAgRWxlbWVudCBLRE9NOjpFY21hSW50ZXJm
YWNlOjppbmhlcml0ZWRFbAogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIEVsZW1lbnQ6Om51bGw7CiB9
CiAKLVZhbHVlIEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
LSAgICBPYmplY3QgcHJvdG8gPSBFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3Rv
Lmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IEVsZW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKE5vZGU6Omhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQpAQCAtMjA2NSwxMCArMjA2NSwxMCBAQCBib29sIEVsZW1lbnQ6OnB1
dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgRWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkVsZW1lbnQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gRWxlbWVu
dFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkp
OworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkVsZW1lbnQ6OmJyaWRnZShFeGVj
U3RhdGUgKnAxKSBjb25zdApAQCAtMjA3Niw3ICsyMDc2LDcgQEAgT2JqZWN0SW1wICpFbGVtZW50
OjpicmlkZ2UoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8RWxlbWVu
dD4ocDEsc3RhdGljX2Nhc3Q8RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEVs
ZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRWxlbWVudDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8RWxl
bWVudD4ocDEsc3RhdGljX2Nhc3Q8RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yMDg5
LDEyICsyMDg5LDEyIEBAIGJvb2wgRW50aXR5OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLGMK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIEVudGl0eTo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpFbnRpdHk6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPEVudGl0eT4ocDEscDIsJnNfaGFzaFRhYmxlLHRo
aXMscDMpOwogfQogCi1WYWx1ZSBFbnRpdHk6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqRW50aXR5OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIGlmKE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6Omdl
dChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMjEwOSwxMCArMjEwOSwx
MCBAQCBib29sIEVudGl0eTo6cHV0KFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU9iamVjdCBFbnRpdHk6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpFbnRpdHk6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKkVudGl0eTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC0yMTIwLDcgKzIxMjAsNyBAQCBPYmplY3RJbXAgKkVudGl0eTo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxFbnRpdHk+KHAxLHN0YXRpY19jYXN0PEVu
dGl0eTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEVudGl0eTo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpFbnRpdHk6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PEVudGl0eT4ocDEsc3RhdGljX2Nhc3Q8RW50
aXR5OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIxMjksMTIgKzIxMjksMTIgQEAgYm9vbCBFdmVu
dDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMSxjbwogewogICAgIGNvbnN0IEhhc2hFbnRyeSAq
ZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZFdmVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUp
IHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IEV2ZW50UHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IEV2ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
RXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRXZlbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxFdmVudFByb3Rv
RnVuYyxFdmVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjE3MCwxOCAr
MjE3MCwxOCBAQCBFdmVudCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRFdmVuCiAJUV9V
TlVTRUQocDEpOyByZXR1cm4gRXZlbnQ6Om51bGw7CiB9CiAKLVZhbHVlIEV2ZW50OjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IEV2ZW50UHJv
dG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHBy
b3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IEV2ZW50UHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1PYmplY3QgRXZlbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpFdmVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBFdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkV2ZW50Ojpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIxODksNyArMjE4OSw3IEBAIE9iamVjdEltcCAq
RXZlbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSAKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxF
dmVudD4ocDEsc3RhdGljX2Nhc3Q8RXZlbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBF
dmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpFdmVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8RXZlbnQ+
KHAxLHN0YXRpY19jYXN0PEV2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIyMDIsMjEgKzIy
MDIsMjEgQEAgYm9vbCBFdmVudEV4Y2VwdGlvbjo6aGFzUHJvcGVydHkoRXhlY1N0YQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRXZlbnRFeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqRXZlbnRFeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPEV2ZW50RXhjZXB0aW9uPihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIEV2ZW50RXhjZXB0aW9uOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50RXhjZXB0aW9u
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAx
KTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgRXZlbnRFeGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpFdmVudEV4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRXZlbnRFeGNlcHRpb246OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjIyNCw3ICsyMjI0LDcgQEAgT2JqZWN0SW1wICpFdmVu
dEV4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPEV2ZW50
RXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxFdmVudEV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIEV2ZW50RXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKkV2ZW50RXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxFdmVudEV4Y2VwdGlvbj4ocDEsc3RhdGljX2Nhc3Q8
RXZlbnRFeGNlcHRpb246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjIzMywxMiArMjIzMywxMiBA
QCBib29sIEV2ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgCiB7CiAgICAgY29uc3Qg
SGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkV2ZW50VGFyZ2V0OjpzX2hhc2hUYWJs
ZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gRXZlbnRU
YXJnZXRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRXZlbnRUYXJnZXRQcm90bzo6c2Vs
ZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBFdmVudFRhcmdldDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpFdmVudFRhcmdldDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PEV2ZW50VGFyZ2V0UHJvdG9GdW5jLEV2ZW50
VGFyZ2V0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0yMjkzLDEwICsyMjkz
LDEwIEBAIEV2ZW50VGFyZ2V0IEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVyaXQKIAlRX1VOVVNF
RChwMSk7IHJldHVybiBFdmVudFRhcmdldDo6bnVsbDsKIH0KIAotVmFsdWUgRXZlbnRUYXJnZXQ6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRXZlbnRUYXJn
ZXQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gRXZlbnRUYXJnZXRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3Rv
ID0gRXZlbnRUYXJnZXRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0yMzA3LDEwICsyMzA3LDEwIEBAIGJvb2wgRXZl
bnRUYXJnZXQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1P
YmplY3QgRXZlbnRUYXJnZXQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpFdmVudFRhcmdldDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBFdmVudFRhcmdldFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKkV2ZW50VGFyZ2V0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIzMTgsNyAr
MjMxOCw3IEBAIE9iamVjdEltcCAqRXZlbnRUYXJnZXQ6OmJyaWRnZShFeGVjU3RhdGUKICAgICBy
ZXR1cm4gbmV3IERPTVJXQnJpZGdlPEV2ZW50VGFyZ2V0PihwMSxzdGF0aWNfY2FzdDxFdmVudFRh
cmdldDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEV2ZW50VGFyZ2V0OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50VGFyZ2V0OjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxFdmVudFRhcmdldD4ocDEs
c3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjMyNywxMyAr
MjMyNywxMyBAQCBib29sIEtleWJvYXJkRXZlbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiB7CiAg
ICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJktleWJvYXJkRXZlbnQ6
OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJv
dG8gPSBLZXlib2FyZEV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IEtleWJvYXJk
RXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIHRydWU7CiAgICAgaWYoVUlFdmVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIEtleWJvYXJkRXZlbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqS2V5Ym9hcmRFdmVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PEtleWJvYXJkRXZlbnRQ
cm90b0Z1bmMsS2V5Ym9hcmRFdmVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpA
QCAtMjM1NiwxOCArMjM1NiwxOCBAQCBLZXlib2FyZEV2ZW50IEtET006OkVjbWFJbnRlcmZhY2U6
OmluaGVyCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gS2V5Ym9hcmRFdmVudDo6bnVsbDsKIH0KIAot
VmFsdWUgS2V5Ym9hcmRFdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpLZXlib2FyZEV2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewotICAgIE9iamVjdCBwcm90byA9IEtleWJvYXJkRXZlbnRQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAy
KTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gS2V5Ym9hcmRFdmVudFByb3RvOjpzZWxmKHAxKTsK
KyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxw
Mik7CiAgICAgaWYoVUlFdmVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gVUlFdmVudDo6
Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBLZXli
b2FyZEV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqS2V5
Ym9hcmRFdmVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBLZXlib2FyZEV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
S2V5Ym9hcmRFdmVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMzc1LDcgKzIz
NzUsNyBAQCBPYmplY3RJbXAgKktleWJvYXJkRXZlbnQ6OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0
dXJuIG5ldyBET01CcmlkZ2U8S2V5Ym9hcmRFdmVudD4ocDEsc3RhdGljX2Nhc3Q8S2V5Ym9hcmRF
dmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEtleWJvYXJkRXZlbnQ6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqS2V5Ym9hcmRFdmVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8S2V5Ym9hcmRFdmVu
dD4ocDEsc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0y
Mzg4LDIxICsyMzg4LDIxIEBAIGJvb2wgTFNFeGNlcHRpb246Omhhc1Byb3BlcnR5KEV4ZWNTdGF0
ZSAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIExTRXhjZXB0aW9uOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTRXhjZXB0aW9uOjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxMU0V4Y2VwdGlvbj4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBMU0V4Y2VwdGlvbjo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU0V4Y2VwdGlvbjo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFf
VU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
T2JqZWN0IExTRXhjZXB0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVj
dEltcCAqTFNFeGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUo
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKkxTRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkg
Y29uc3QKQEAgLTI0MTAsNyArMjQxMCw3IEBAIE9iamVjdEltcCAqTFNFeGNlcHRpb246OmJyaWRn
ZShFeGVjU3RhdGUKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxMU0V4Y2VwdGlvbj4ocDEsc3Rh
dGljX2Nhc3Q8TFNFeGNlcHRpb246OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBMU0V4Y2Vw
dGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpMU0V4Y2VwdGlvbjo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8
TFNFeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PExTRXhjZXB0aW9uOjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTI0MjMsNyArMjQyMyw3IEBAIGJvb2wgTFNJbnB1dDo6aGFzUHJvcGVydHkoRXhlY1N0
YXRlICpwMSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIExTSW5wdXQ6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNJbnB1dDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8TFNJbnB1dD4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjQzNiw3ICsyNDM2LDcgQEAgTFNJbnB1dCBLRE9N
Ojp0b0xTSW5wdXQoS0pTOjpFeGVjU3RhdGUgKgogICAgIHJldHVybiBMU0lucHV0OjpudWxsOwog
fQogCi1WYWx1ZSBMU0lucHV0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKkxTSW5wdXQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CkBAIC0yNDUzLDEwICsyNDUzLDEwIEBAIGJvb2wgTFNJbnB1dDo6cHV0
SW5QYXJlbnRzKFBVVF9NRVRIT0RfQVIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBM
U0lucHV0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqTFNJbnB1
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBw
MS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqTFNJbnB1dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNDY0LDcgKzI0
NjQsNyBAQCBPYmplY3RJbXAgKkxTSW5wdXQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxCiAgICAgcmV0
dXJuIG5ldyBET01SV0JyaWRnZTxMU0lucHV0PihwMSxzdGF0aWNfY2FzdDxMU0lucHV0OjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgTFNJbnB1dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpMU0lucHV0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBjYWNoZURPTU9iamVjdDxMU0lucHV0PihwMSxzdGF0aWNfY2FzdDxMU0lucHV0OjpQ
cml2YXRlICo+KGQpKTsKIH0KQEAgLTI0NzcsNyArMjQ3Nyw3IEBAIGJvb2wgTFNPdXRwdXQ6Omhh
c1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIExT
T3V0cHV0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTT3V0cHV0Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxM
U091dHB1dD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjQ5MCw3ICsyNDkw
LDcgQEAgTFNPdXRwdXQgS0RPTTo6dG9MU091dHB1dChLSlM6OkV4ZWNTdGF0ZQogICAgIHJldHVy
biBMU091dHB1dDo6bnVsbDsKIH0KIAotVmFsdWUgTFNPdXRwdXQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNPdXRwdXQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFf
VU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0yNTA3LDEwICsyNTA3LDEw
IEBAIGJvb2wgTFNPdXRwdXQ6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0EKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU9iamVjdCBMU091dHB1dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitPYmplY3RJbXAgKkxTT3V0cHV0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJv
dG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICBy
ZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpMU091dHB1dDo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CkBAIC0yNTE4LDcgKzI1MTgsNyBAQCBPYmplY3RJbXAgKkxTT3V0cHV0Ojpicmlk
Z2UoRXhlY1N0YXRlICpwCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxMU091dHB1dD4ocDEs
c3RhdGljX2Nhc3Q8TFNPdXRwdXQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBMU091dHB1
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpMU091dHB1dDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8TFNPdXRw
dXQ+KHAxLHN0YXRpY19jYXN0PExTT3V0cHV0OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI1Mjcs
MTMgKzI1MjcsMTMgQEAgYm9vbCBMU1BhcnNlcjo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMQog
ewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZMU1BhcnNlcjo6
c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90
byA9IExTUGFyc2VyUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IExTUGFyc2VyUHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVl
OwogICAgIGlmKEV2ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTFNQYXJzZXI6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqTFNQYXJzZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxMU1BhcnNlclByb3RvRnVuYyxMU1BhcnNlcj4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjU1NiwxMCArMjU1NiwxMCBAQCBMU1Bh
cnNlciBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRMCiAJUV9VTlVTRUQocDEpOyByZXR1
cm4gTFNQYXJzZXI6Om51bGw7CiB9CiAKLVZhbHVlIExTUGFyc2VyOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTUGFyc2VyOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IExTUGFyc2VyUHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3Rv
LmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IExTUGFyc2VyUHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBpZihFdmVudFRhcmdldDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
RXZlbnRUYXJnZXQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpA
QCAtMjU3OCwxMCArMjU3OCwxMCBAQCBib29sIExTUGFyc2VyOjpwdXRJblBhcmVudHMoUFVUX01F
VEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTFNQYXJzZXI6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpMU1BhcnNlcjo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBMU1BhcnNlclByb3RvOjpz
ZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkxTUGFyc2VyOjpicmlkZ2UoRXhlY1N0YXRlICpw
MSkgY29uc3QKQEAgLTI1ODksNyArMjU4OSw3IEBAIE9iamVjdEltcCAqTFNQYXJzZXI6OmJyaWRn
ZShFeGVjU3RhdGUgKnAKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPExTUGFyc2VyPihwMSxz
dGF0aWNfY2FzdDxMU1BhcnNlcjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIExTUGFyc2Vy
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkxTUGFyc2VyOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxMU1BhcnNl
cj4ocDEsc3RhdGljX2Nhc3Q8TFNQYXJzZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjU5OCwx
MiArMjU5OCwxMiBAQCBib29sIExTUGFyc2VyRmlsdGVyOjpoYXNQcm9wZXJ0eShFeGVjU3RhCiB7
CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkxTUGFyc2VyRmls
dGVyOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0
IHByb3RvID0gTFNQYXJzZXJGaWx0ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTFNQ
YXJzZXJGaWx0ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBMU1BhcnNl
ckZpbHRlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU1BhcnNlckZp
bHRlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0
PExTUGFyc2VyRmlsdGVyUHJvdG9GdW5jLExTUGFyc2VyRmlsdGVyPihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CkBAIC0yNjI2LDE4ICsyNjI2LDE4IEBAIExTUGFyc2VyRmlsdGVyIEtE
T006OkVjbWFJbnRlcmZhY2U6OmluaGUKIAlRX1VOVVNFRChwMSk7IHJldHVybiBMU1BhcnNlckZp
bHRlcjo6bnVsbDsKIH0KIAotVmFsdWUgTFNQYXJzZXJGaWx0ZXI6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNQYXJzZXJGaWx0ZXI6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTFNQYXJzZXJG
aWx0ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTFNQYXJzZXJG
aWx0ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBMU1BhcnNlckZpbHRlcjo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkxTUGFyc2VyRmlsdGVyOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIExTUGFyc2VyRmlsdGVyUHJv
dG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTFNQYXJzZXJGaWx0ZXI6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjY0NSw3ICsyNjQ1LDcgQEAgT2JqZWN0SW1wICpMU1Bh
cnNlckZpbHRlcjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPExTUGFy
c2VyRmlsdGVyPihwMSxzdGF0aWNfY2FzdDxMU1BhcnNlckZpbHRlcjo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIExTUGFyc2VyRmlsdGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKkxTUGFyc2VyRmlsdGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxMU1BhcnNlckZpbHRlcj4ocDEsc3RhdGljX2Nhc3Q8
TFNQYXJzZXJGaWx0ZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjY1NCwxMiArMjY1NCwxMiBA
QCBib29sIExTUmVzb3VyY2VSZXNvbHZlcjo6aGFzUHJvcGVydHkoRXhlCiB7CiAgICAgY29uc3Qg
SGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkxTUmVzb3VyY2VSZXNvbHZlcjo6c19o
YXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9
IExTUmVzb3VyY2VSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBMU1Jlc291
cmNlUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBMU1Jlc291
cmNlUmVzb2x2ZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNSZXNv
dXJjZVJlc29sdmVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBs
b29rdXBHZXQ8TFNSZXNvdXJjZVJlc29sdmVyUHJvdG9GdW5jLExTUmVzb3VyY2VSZXNvbHZlcj4o
cDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjY4MiwxOCArMjY4MiwxOCBAQCBM
U1Jlc291cmNlUmVzb2x2ZXIgS0RPTTo6RWNtYUludGVyZmFjZTo6CiAJUV9VTlVTRUQocDEpOyBy
ZXR1cm4gTFNSZXNvdXJjZVJlc29sdmVyOjpudWxsOwogfQogCi1WYWx1ZSBMU1Jlc291cmNlUmVz
b2x2ZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNS
ZXNvdXJjZVJlc29sdmVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewot
ICAgIE9iamVjdCBwcm90byA9IExTUmVzb3VyY2VSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKLSAg
ICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOwor
ICAgIE9iamVjdEltcCAqcHJvdG8gPSBMU1Jlc291cmNlUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7
CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEs
cDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9i
amVjdCBMU1Jlc291cmNlUmVzb2x2ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpMU1Jlc291cmNlUmVzb2x2ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTFNSZXNvdXJjZVJlc29sdmVyUHJvdG86OnNlbGYo
cDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTFNSZXNvdXJjZVJlc29sdmVyOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTI3MDEsNyArMjcwMSw3IEBAIE9iamVjdEltcCAqTFNSZXNvdXJj
ZVJlc29sdmVyOjpicmlkZ2UoRXgKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxMU1Jlc291cmNl
UmVzb2x2ZXI+KHAxLHN0YXRpY19jYXN0PExTUmVzb3VyY2VSZXNvbHZlcjo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIExTUmVzb3VyY2VSZXNvbHZlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK1ZhbHVlSW1wICpMU1Jlc291cmNlUmVzb2x2ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PExTUmVzb3VyY2VSZXNvbHZlcj4o
cDEsc3RhdGljX2Nhc3Q8TFNSZXNvdXJjZVJlc29sdmVyOjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTI3MTAsMTIgKzI3MTAsMTIgQEAgYm9vbCBMU1NlcmlhbGl6ZXI6Omhhc1Byb3BlcnR5KEV4ZWNT
dGF0ZQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZMU1Nl
cmlhbGl6ZXI6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBP
YmplY3QgcHJvdG8gPSBMU1NlcmlhbGl6ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0g
TFNTZXJpYWxpemVyUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTFNTZXJp
YWxpemVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTU2VyaWFsaXpl
cjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PExT
U2VyaWFsaXplclByb3RvRnVuYyxMU1NlcmlhbGl6ZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KQEAgLTI3MzgsMTAgKzI3MzgsMTAgQEAgTFNTZXJpYWxpemVyIEtET006OkVjbWFJ
bnRlcmZhY2U6OmluaGVyaQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIExTU2VyaWFsaXplcjo6bnVs
bDsKIH0KIAotVmFsdWUgTFNTZXJpYWxpemVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKkxTU2VyaWFsaXplcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBMU1NlcmlhbGl6ZXJQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0
KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTFNTZXJpYWxpemVyUHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpA
QCAtMjc1NywxMCArMjc1NywxMCBAQCBib29sIExTU2VyaWFsaXplcjo6cHV0SW5QYXJlbnRzKFBV
VF9NRVRICiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTFNTZXJpYWxpemVyOjpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqTFNTZXJpYWxpemVyOjpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIExTU2VyaWFs
aXplclByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxs
KCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkxTU2VyaWFsaXplcjo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNzY4LDcgKzI3NjgsNyBAQCBPYmplY3RJbXAg
KkxTU2VyaWFsaXplcjo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRn
ZTxMU1NlcmlhbGl6ZXI+KHAxLHN0YXRpY19jYXN0PExTU2VyaWFsaXplcjo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIExTU2VyaWFsaXplcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K1ZhbHVlSW1wICpMU1NlcmlhbGl6ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PExTU2VyaWFsaXplcj4ocDEsc3RhdGljX2Nhc3Q8TFNT
ZXJpYWxpemVyOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI3ODEsMjEgKzI3ODEsMjEgQEAgYm9v
bCBMU1NlcmlhbGl6ZXJGaWx0ZXI6Omhhc1Byb3BlcnR5KEV4ZQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgTFNTZXJpYWxpemVyRmlsdGVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKkxTU2VyaWFsaXplckZpbHRlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8TFNTZXJpYWxpemVyRmlsdGVyPihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIExTU2VyaWFsaXplckZpbHRlcjo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU1NlcmlhbGl6
ZXJGaWx0ZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9V
TlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLU9iamVjdCBMU1NlcmlhbGl6ZXJGaWx0ZXI6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpMU1NlcmlhbGl6ZXJGaWx0ZXI6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkxTU2VyaWFs
aXplckZpbHRlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yODAzLDcgKzI4MDMs
NyBAQCBPYmplY3RJbXAgKkxTU2VyaWFsaXplckZpbHRlcjo6YnJpZGdlKEV4CiAgICAgcmV0dXJu
IG5ldyBET01CcmlkZ2U8TFNTZXJpYWxpemVyRmlsdGVyPihwMSxzdGF0aWNfY2FzdDxMU1Nlcmlh
bGl6ZXJGaWx0ZXI6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBMU1NlcmlhbGl6ZXJGaWx0
ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqTFNTZXJpYWxpemVyRmls
dGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9i
amVjdDxMU1NlcmlhbGl6ZXJGaWx0ZXI+KHAxLHN0YXRpY19jYXN0PExTU2VyaWFsaXplckZpbHRl
cjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yODEyLDE1ICsyODEyLDE1IEBAIGJvb2wgTWVkaWFM
aXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUg
PSBMb29rdXA6OmZpbmRFbnRyeSgmTWVkaWFMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYo
ZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTWVkaWFMaXN0UHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IE1lZGlhTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90
by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBib29sIG9rOwogICAgIHVu
c2lnbmVkIGludCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7CiAgICAgaWYob2sgJiYgaSA8IGxl
bmd0aCgpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIE1lZGlh
TGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpNZWRpYUxpc3Q6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBp
bnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwpAQCAtMjg0NiwxMCArMjg0NiwxMCBAQCBNZWRp
YUxpc3QgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdGVkCiAJUV9VTlVTRUQocDEpOyByZXR1
cm4gTWVkaWFMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBNZWRpYUxpc3Q6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTWVkaWFMaXN0OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IE1lZGlhTGlzdFBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBNZWRpYUxpc3RQcm90bzo6
c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3Rv
LT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CkBAIC0yODY1LDEwICsyODY1LDEwIEBAIGJvb2wgTWVkaWFMaXN0OjpwdXRJblBhcmVudHMo
UFVUX01FVEhPRF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBNZWRpYUxpc3Q6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpNZWRpYUxpc3Q6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTWVkaWFMaXN0
UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTWVkaWFMaXN0OjpicmlkZ2UoRXhl
Y1N0YXRlICpwMSkgY29uc3QKQEAgLTI4NzYsNyArMjg3Niw3IEBAIE9iamVjdEltcCAqTWVkaWFM
aXN0OjpicmlkZ2UoRXhlY1N0YXRlICoKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPE1lZGlh
TGlzdD4ocDEsc3RhdGljX2Nhc3Q8TWVkaWFMaXN0OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFs
dWUgTWVkaWFMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKk1lZGlh
TGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01P
YmplY3Q8TWVkaWFMaXN0PihwMSxzdGF0aWNfY2FzdDxNZWRpYUxpc3Q6OlByaXZhdGUgKj4oZCkp
OwogfQpAQCAtMjg4NSwxMyArMjg4NSwxMyBAQCBib29sIE1vdXNlRXZlbnQ6Omhhc1Byb3BlcnR5
KEV4ZWNTdGF0ZSAqCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50
cnkoJk1vdXNlRXZlbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsK
LSAgICBPYmplY3QgcHJvdG8gPSBNb3VzZUV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHBy
b3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90
byA9IE1vdXNlRXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoVUlFdmVudDo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIE1vdXNlRXZlbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTW91c2VFdmVudDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PE1vdXNlRXZlbnRQ
cm90b0Z1bmMsTW91c2VFdmVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAt
MjkxNCwxOCArMjkxNCwxOCBAQCBNb3VzZUV2ZW50IEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVy
aXRlCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gTW91c2VFdmVudDo6bnVsbDsKIH0KIAotVmFsdWUg
TW91c2VFdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpNb3VzZUV2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAg
IE9iamVjdCBwcm90byA9IE1vdXNlRXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gTW91c2VFdmVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoVUlFdmVu
dDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gVUlFdmVudDo6Z2V0KHAxLHAyLHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBNb3VzZUV2ZW50Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqTW91c2VFdmVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBNb3VzZUV2ZW50UHJvdG86
OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTW91c2VFdmVudDo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC0yOTMzLDcgKzI5MzMsNyBAQCBPYmplY3RJbXAgKk1vdXNlRXZlbnQ6
OmJyaWRnZShFeGVjU3RhdGUgCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8TW91c2VFdmVudD4o
cDEsc3RhdGljX2Nhc3Q8TW91c2VFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIE1v
dXNlRXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqTW91c2VFdmVu
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmpl
Y3Q8TW91c2VFdmVudD4ocDEsc3RhdGljX2Nhc3Q8TW91c2VFdmVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CkBAIC0yOTQyLDEzICsyOTQyLDEzIEBAIGJvb2wgTXV0YXRpb25FdmVudDo6aGFzUHJvcGVy
dHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRy
eSgmTXV0YXRpb25FdmVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVl
OwotICAgIE9iamVjdCBwcm90byA9IE11dGF0aW9uRXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gTXV0YXRpb25FdmVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihFdmVudDo6aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIE11dGF0
aW9uRXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTXV0YXRpb25F
dmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0
PE11dGF0aW9uRXZlbnRQcm90b0Z1bmMsTXV0YXRpb25FdmVudD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQpAQCAtMjk3MSwxOCArMjk3MSwxOCBAQCBNdXRhdGlvbkV2ZW50IEtET006
OkVjbWFJbnRlcmZhY2U6OmluaGVyCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gTXV0YXRpb25FdmVu
dDo6bnVsbDsKIH0KIAotVmFsdWUgTXV0YXRpb25FdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpNdXRhdGlvbkV2ZW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IE11dGF0aW9uRXZlbnRQ
cm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTXV0YXRpb25FdmVudFBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoRXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIEV2ZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
T2JqZWN0IE11dGF0aW9uRXZlbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpNdXRhdGlvbkV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICBpZihwMSkgcmV0dXJuIE11dGF0aW9uRXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpNdXRhdGlvbkV2ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTI5OTAsNyArMjk5MCw3IEBAIE9iamVjdEltcCAqTXV0YXRpb25FdmVudDo6YnJpZGdlKEV4ZWNT
dGEKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxNdXRhdGlvbkV2ZW50PihwMSxzdGF0aWNfY2Fz
dDxNdXRhdGlvbkV2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgTXV0YXRpb25FdmVu
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpNdXRhdGlvbkV2ZW50Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxN
dXRhdGlvbkV2ZW50PihwMSxzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50OjpQcml2YXRlICo+KGQp
KTsKIH0KQEAgLTI5OTksMTUgKzI5OTksMTUgQEAgYm9vbCBOYW1lZE5vZGVNYXA6Omhhc1Byb3Bl
cnR5KEV4ZWNTdGF0ZQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVu
dHJ5KCZOYW1lZE5vZGVNYXA6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1
ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBOYW1lZE5vZGVNYXBQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gTmFtZWROb2RlTWFwUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQg
aW50IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsKICAgICBpZihvayAmJiBpIDwgbGVuZ3RoKCkp
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTmFtZWROb2RlTWFw
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKk5hbWVkTm9kZU1hcDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGlu
dCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7CkBAIC0zMDMzLDEwICszMDMzLDEwIEBAIE5hbWVk
Tm9kZU1hcCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcmkKIAlRX1VOVVNFRChwMSk7IHJldHVy
biBOYW1lZE5vZGVNYXA6Om51bGw7CiB9CiAKLVZhbHVlIE5hbWVkTm9kZU1hcDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOYW1lZE5vZGVNYXA6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTmFt
ZWROb2RlTWFwUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IE5hbWVk
Tm9kZU1hcFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKIH0KQEAgLTMwNDcsMTAgKzMwNDcsMTAgQEAgYm9vbCBOYW1lZE5vZGVN
YXA6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
TmFtZWROb2RlTWFwOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAq
TmFtZWROb2RlTWFwOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIE5hbWVkTm9kZU1hcFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0
OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAg
Kk5hbWVkTm9kZU1hcDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zMDU4LDcgKzMw
NTgsNyBAQCBPYmplY3RJbXAgKk5hbWVkTm9kZU1hcDo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0
dXJuIG5ldyBET01SV0JyaWRnZTxOYW1lZE5vZGVNYXA+KHAxLHN0YXRpY19jYXN0PE5hbWVkTm9k
ZU1hcDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIE5hbWVkTm9kZU1hcDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpOYW1lZE5vZGVNYXA6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PE5hbWVkTm9kZU1hcD4o
cDEsc3RhdGljX2Nhc3Q8TmFtZWROb2RlTWFwOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTMwNjcs
MTMgKzMwNjcsMTMgQEAgYm9vbCBOb2RlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLGNvbgog
ewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZOb2RlOjpzX2hh
c2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0g
Tm9kZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBOb2RlUHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKEV2
ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotVmFsdWUgTm9kZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpOb2RlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29r
dXBHZXQ8Tm9kZVByb3RvRnVuYyxOb2RlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CkBAIC0zMTI5LDEwICszMTI5LDEwIEBAIE5vZGUgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJp
dGVkTm9kZUMKIAlRX1VOVVNFRChwMSk7IHJldHVybiBOb2RlOjpudWxsOwogfQogCi1WYWx1ZSBO
b2RlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKk5vZGU6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3Rv
ID0gTm9kZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBOb2RlUHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihFdmVudFRhcmdldDo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gRXZlbnRUYXJnZXQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQpAQCAtMzE1MSwxMCArMzE1MSwxMCBAQCBib29sIE5vZGU6OnB1dEluUGFyZW50cyhQ
VVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTm9kZTo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKk5vZGU6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTm9kZVByb3RvOjpzZWxm
KHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVy
biBOVUxMOwogfQogCiBPYmplY3RJbXAgKk5vZGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtMzE2Miw3ICszMTYyLDcgQEAgT2JqZWN0SW1wICpOb2RlOjpicmlkZ2UoRXhlY1N0YXRl
ICpwMSkgYwogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8Tm9kZT4ocDEsc3RhdGljX2Nhc3Q8
Tm9kZTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIE5vZGU6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqTm9kZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Tm9kZT4ocDEsc3RhdGljX2Nhc3Q8Tm9kZTo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC0zMTcxLDEyICszMTcxLDEyIEBAIGJvb2wgTm9kZUl0ZXJhdG9y
OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29r
dXA6OmZpbmRFbnRyeSgmTm9kZUl0ZXJhdG9yOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkg
cmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTm9kZUl0ZXJhdG9yUHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IE5vZGVJdGVyYXRvclByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihw
cm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIE5vZGVJdGVyYXRvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpOb2RlSXRlcmF0b3I6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGxvb2t1cEdldDxOb2RlSXRlcmF0b3JQcm90b0Z1bmMsTm9kZUl0ZXJhdG9yPihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zMTk5LDE4ICszMTk5LDE4IEBAIE5vZGVJ
dGVyYXRvciBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcmkKIAlRX1VOVVNFRChwMSk7IHJldHVy
biBOb2RlSXRlcmF0b3I6Om51bGw7CiB9CiAKLVZhbHVlIE5vZGVJdGVyYXRvcjo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOb2RlSXRlcmF0b3I6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTm9k
ZUl0ZXJhdG9yUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IE5vZGVJ
dGVyYXRvclByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IE5vZGVJdGVyYXRvcjo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKk5vZGVJdGVyYXRvcjo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBOb2RlSXRlcmF0b3JQcm90bzo6
c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICBy
ZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpOb2RlSXRlcmF0b3I6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtMzIxOCw3ICszMjE4LDcgQEAgT2JqZWN0SW1wICpOb2RlSXRlcmF0
b3I6OmJyaWRnZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPE5vZGVJdGVyYXRv
cj4ocDEsc3RhdGljX2Nhc3Q8Tm9kZUl0ZXJhdG9yOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFs
dWUgTm9kZUl0ZXJhdG9yOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKk5v
ZGVJdGVyYXRvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2Fj
aGVET01PYmplY3Q8Tm9kZUl0ZXJhdG9yPihwMSxzdGF0aWNfY2FzdDxOb2RlSXRlcmF0b3I6OlBy
aXZhdGUgKj4oZCkpOwogfQpAQCAtMzIyNywxNSArMzIyNywxNSBAQCBib29sIE5vZGVMaXN0Ojpo
YXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9v
a3VwOjpmaW5kRW50cnkoJk5vZGVMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0
dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTm9kZUxpc3RQcm90bzo6c2VsZihwMSk7Ci0g
ICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gTm9kZUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBp
bnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwogICAgIGlmKG9rICYmIGkgPCBsZW5ndGgoKSkg
cmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBOb2RlTGlzdDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOb2RlTGlzdDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGludCBpID0gcDIu
dG9BcnJheUluZGV4KCZvayk7CkBAIC0zMjYxLDE4ICszMjYxLDE4IEBAIE5vZGVMaXN0IEtET006
OkVjbWFJbnRlcmZhY2U6OmluaGVyaXRlZE4KIAlRX1VOVVNFRChwMSk7IHJldHVybiBOb2RlTGlz
dDo6bnVsbDsKIH0KIAotVmFsdWUgTm9kZUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqTm9kZUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTm9kZUxpc3RQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAy
KTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTm9kZUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAg
aWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwog
ICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBO
b2RlTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKk5vZGVM
aXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IE5vZGVMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTm9kZUxpc3Q6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzI4MCw3ICszMjgwLDcgQEAgT2JqZWN0SW1w
ICpOb2RlTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdl
PE5vZGVMaXN0PihwMSxzdGF0aWNfY2FzdDxOb2RlTGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAK
LVZhbHVlIE5vZGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKk5v
ZGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURP
TU9iamVjdDxOb2RlTGlzdD4ocDEsc3RhdGljX2Nhc3Q8Tm9kZUxpc3Q6OlByaXZhdGUgKj4oZCkp
OwogfQpAQCAtMzI5MywxMiArMzI5MywxMiBAQCBib29sIE5vdGF0aW9uOjpoYXNQcm9wZXJ0eShF
eGVjU3RhdGUgKnAxCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBOb3RhdGlvbjo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOb3RhdGlvbjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Tm90YXRpb24+KHAx
LHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgTm90YXRpb246OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTm90YXRpb246OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoTm9kZTo6aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gTm9kZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CkBAIC0zMzEzLDEwICszMzEzLDEwIEBAIGJvb2wgTm90YXRpb246OnB1dChQVVRfTUVUSE9E
X0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTm90YXRpb246OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpOb3RhdGlvbjo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTm90YXRpb246
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzMyNCw3ICszMzI0LDcgQEAgT2JqZWN0
SW1wICpOb3RhdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgRE9NUldC
cmlkZ2U8Tm90YXRpb24+KHAxLHN0YXRpY19jYXN0PE5vdGF0aW9uOjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgTm90YXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqTm90YXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNh
Y2hlRE9NT2JqZWN0PE5vdGF0aW9uPihwMSxzdGF0aWNfY2FzdDxOb3RhdGlvbjo6UHJpdmF0ZSAq
PihkKSk7CiB9CkBAIC0zMzM3LDEyICszMzM3LDEyIEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0
aW9uOjpoYXNQcm9wZXJ0eSgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGxvb2t1cEdldFZhbHVlPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqUHJvY2Vzc2luZ0luc3RydWN0
aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKE5vZGU6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzM2MiwxMCArMzM2MiwxMCBAQCBib29sIFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjo6cHV0SW5QYXJlbnRzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzM3Myw3ICszMzczLDcgQEAgT2JqZWN0
SW1wICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmJyaWRnZQogICAgIHJldHVybiBuZXcgRE9NUldC
cmlkZ2U8UHJvY2Vzc2luZ0luc3RydWN0aW9uPihwMSxzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURP
TU9iamVjdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KHAxLHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zMzg2LDIxICszMzg2LDIxIEBAIGJv
b2wgS0RPTTo6UkdCQ29sb3I6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIEtET006OlJHQkNvbG9yOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKktET006OlJHQkNvbG9yOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxLRE9NOjpSR0JDb2xvcj4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBLRE9NOjpSR0JDb2xvcjo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpLRE9NOjpSR0JDb2xvcjo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VE
KHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0
IEtET006OlJHQkNvbG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqS0RPTTo6UkdCQ29sb3I6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUo
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKktET006OlJHQkNvbG9yOjpicmlkZ2UoRXhlY1N0YXRlICpw
MSkgY29uc3QKQEAgLTM0MDgsNyArMzQwOCw3IEBAIE9iamVjdEltcCAqS0RPTTo6UkdCQ29sb3I6
OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxLRE9NOjpSR0JDb2xvcj4o
cDEsc3RhdGljX2Nhc3Q8S0RPTTo6UkdCQ29sb3I6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1
ZSBLRE9NOjpSR0JDb2xvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpL
RE9NOjpSR0JDb2xvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
Y2FjaGVET01PYmplY3Q8S0RPTTo6UkdCQ29sb3I+KHAxLHN0YXRpY19jYXN0PEtET006OlJHQkNv
bG9yOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM0MTcsMTIgKzM0MTcsMTIgQEAgYm9vbCBSYW5n
ZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMSxjbwogewogICAgIGNvbnN0IEhhc2hFbnRyeSAq
ZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZSYW5nZTo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUp
IHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFJhbmdlUHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IFJhbmdlUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
UmFuZ2U6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqUmFuZ2U6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxSYW5nZVByb3Rv
RnVuYyxSYW5nZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzQ1MCwxOCAr
MzQ1MCwxOCBAQCBSYW5nZSBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRSYW5nCiAJUV9V
TlVTRUQocDEpOyByZXR1cm4gUmFuZ2U6Om51bGw7CiB9CiAKLVZhbHVlIFJhbmdlOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlJhbmdlOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFJhbmdlUHJv
dG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHBy
b3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFJhbmdlUHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1PYmplY3QgUmFuZ2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpSYW5nZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBSYW5nZVByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlJhbmdlOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM0NjksNyArMzQ2OSw3IEBAIE9iamVjdEltcCAq
UmFuZ2U6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSAKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxS
YW5nZT4ocDEsc3RhdGljX2Nhc3Q8UmFuZ2U6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBS
YW5nZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpSYW5nZTo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8UmFuZ2U+
KHAxLHN0YXRpY19jYXN0PFJhbmdlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM0ODIsMjEgKzM0
ODIsMjEgQEAgYm9vbCBSYW5nZUV4Y2VwdGlvbjo6aGFzUHJvcGVydHkoRXhlY1N0YQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgUmFuZ2VFeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqUmFuZ2VFeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPFJhbmdlRXhjZXB0aW9uPihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFJhbmdlRXhjZXB0aW9uOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlJhbmdlRXhjZXB0aW9u
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAx
KTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgUmFuZ2VFeGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpSYW5nZUV4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqUmFuZ2VFeGNlcHRpb246OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzUwNCw3ICszNTA0LDcgQEAgT2JqZWN0SW1wICpSYW5n
ZUV4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPFJhbmdl
RXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxSYW5nZUV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIFJhbmdlRXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlJhbmdlRXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxSYW5nZUV4Y2VwdGlvbj4ocDEsc3RhdGljX2Nhc3Q8
UmFuZ2VFeGNlcHRpb246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzUxNywyMSArMzUxNywyMSBA
QCBib29sIEtET006OlJlY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBLRE9NOjpSZWN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKktET006OlJlY3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGxvb2t1cEdldFZhbHVlPFJlY3Q+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KIAotVmFsdWUgS0RPTTo6UmVjdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpLRE9NOjpSZWN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgS0RPTTo6UmVjdDo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKktET006OlJlY3Q6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKktET006OlJl
Y3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzUzOSw3ICszNTM5LDcgQEAgT2Jq
ZWN0SW1wICpLRE9NOjpSZWN0OjpicmlkZ2UoRXhlY1N0YXRlIAogICAgIHJldHVybiBuZXcgRE9N
QnJpZGdlPEtET006OlJlY3Q+KHAxLHN0YXRpY19jYXN0PEtET006OlJlY3Q6OlByaXZhdGUgKj4o
ZCkpOwogfQogCi1WYWx1ZSBLRE9NOjpSZWN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKktET006OlJlY3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGNhY2hlRE9NT2JqZWN0PEtET006OlJlY3Q+KHAxLHN0YXRpY19jYXN0PEtET006OlJl
Y3Q6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzU1MiwxMiArMzU1MiwxMiBAQCBib29sIFN0eWxl
U2hlZXQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
YWx1ZSBTdHlsZVNoZWV0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlN0
eWxlU2hlZXQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1
cEdldFZhbHVlPFN0eWxlU2hlZXQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAot
VmFsdWUgU3R5bGVTaGVldDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTdHlsZVNoZWV0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzU3NCwxMCArMzU3NCwxMCBAQCBib29sIFN0eWxlU2hlZXQ6
OnB1dEluUGFyZW50cyhQVVRfTUVUSE9ECiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
U3R5bGVTaGVldDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlN0
eWxlU2hlZXQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlN0eWxlU2hlZXQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
MzU4NSw3ICszNTg1LDcgQEAgT2JqZWN0SW1wICpTdHlsZVNoZWV0OjpicmlkZ2UoRXhlY1N0YXRl
IAogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8U3R5bGVTaGVldD4ocDEsc3RhdGljX2Nhc3Q8
U3R5bGVTaGVldDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFN0eWxlU2hlZXQ6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU3R5bGVTaGVldDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8U3R5bGVTaGVldD4o
cDEsc3RhdGljX2Nhc3Q8U3R5bGVTaGVldDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zNTk0LDE1
ICszNTk0LDE1IEBAIGJvb2wgU3R5bGVTaGVldExpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKIHsK
ICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU3R5bGVTaGVldExp
c3Q6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3Qg
cHJvdG8gPSBTdHlsZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTdHls
ZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGludCBpID0gcDIu
dG9BcnJheUluZGV4KCZvayk7CiAgICAgaWYob2sgJiYgaSA8IGxlbmd0aCgpKSByZXR1cm4gdHJ1
ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFN0eWxlU2hlZXRMaXN0OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlN0eWxlU2hlZXRMaXN0OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBw
Mi50b0FycmF5SW5kZXgoJm9rKTsKQEAgLTM2MjgsMTggKzM2MjgsMTggQEAgU3R5bGVTaGVldExp
c3QgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIFN0eWxl
U2hlZXRMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBTdHlsZVNoZWV0TGlzdDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTdHlsZVNoZWV0TGlzdDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTdHls
ZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTdHls
ZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFN0eWxlU2hlZXRMaXN0Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU3R5bGVTaGVldExpc3Q6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU3R5bGVTaGVldExp
c3RQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTdHlsZVNoZWV0TGlzdDo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNjQ3LDcgKzM2NDcsNyBAQCBPYmplY3RJbXAg
KlN0eWxlU2hlZXRMaXN0OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8
U3R5bGVTaGVldExpc3Q+KHAxLHN0YXRpY19jYXN0PFN0eWxlU2hlZXRMaXN0OjpQcml2YXRlICo+
KGQpKTsKIH0KIAotVmFsdWUgU3R5bGVTaGVldExpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqU3R5bGVTaGVldExpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFN0eWxlU2hlZXRMaXN0PihwMSxzdGF0aWNf
Y2FzdDxTdHlsZVNoZWV0TGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zNjU2LDEzICszNjU2
LDEzIEBAIGJvb2wgVGV4dDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMSxjb24KIHsKICAgICBj
b25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmVGV4dDo6c19oYXNoVGFibGUs
cDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFRleHRQcm90
bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1
ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gVGV4dFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihw
cm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihDaGFyYWN0ZXJE
YXRhOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgVGV4dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpU
ZXh0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8
VGV4dFByb3RvRnVuYyxUZXh0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0z
Njg3LDEwICszNjg3LDEwIEBAIFRleHQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdGVkVGV4
dEMKIAlRX1VOVVNFRChwMSk7IHJldHVybiBUZXh0OjpudWxsOwogfQogCi1WYWx1ZSBUZXh0Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlRleHQ6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gVGV4
dFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBUZXh0UHJvdG86OnNl
bGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+
Z2V0KHAxLHAyKTsKICAgICBpZihDaGFyYWN0ZXJEYXRhOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBDaGFyYWN0ZXJEYXRhOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQo
KTsKIH0KQEAgLTM3MDQsMTAgKzM3MDQsMTAgQEAgYm9vbCBUZXh0OjpwdXQoUFVUX01FVEhPRF9B
UkdTKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFRleHQ6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpUZXh0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFRleHRQcm90bzo6c2VsZihwMSk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpUZXh0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM3MTUs
NyArMzcxNSw3IEBAIE9iamVjdEltcCAqVGV4dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGMKICAg
ICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPFRleHQ+KHAxLHN0YXRpY19jYXN0PFRleHQ6OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBUZXh0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlRleHQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGNhY2hlRE9NT2JqZWN0PFRleHQ+KHAxLHN0YXRpY19jYXN0PFRleHQ6OlByaXZhdGUgKj4oZCkp
OwogfQpAQCAtMzcyNCwxMiArMzcyNCwxMiBAQCBib29sIFRyZWVXYWxrZXI6Omhhc1Byb3BlcnR5
KEV4ZWNTdGF0ZSAqCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50
cnkoJlRyZWVXYWxrZXI6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsK
LSAgICBPYmplY3QgcHJvdG8gPSBUcmVlV2Fsa2VyUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHBy
b3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90
byA9IFRyZWVXYWxrZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBUcmVl
V2Fsa2VyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlRyZWVXYWxrZXI6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxUcmVl
V2Fsa2VyUHJvdG9GdW5jLFRyZWVXYWxrZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KQEAgLTM3NTIsMTAgKzM3NTIsMTAgQEAgVHJlZVdhbGtlciBLRE9NOjpFY21hSW50ZXJmYWNl
Ojppbmhlcml0ZQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIFRyZWVXYWxrZXI6Om51bGw7CiB9CiAK
LVZhbHVlIFRyZWVXYWxrZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqVHJlZVdhbGtlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKLSAgICBPYmplY3QgcHJvdG8gPSBUcmVlV2Fsa2VyUHJvdG86OnNlbGYocDEpOwotICAgIGlm
KHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IFRyZWVXYWxrZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJv
dG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFf
VU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0zNzcxLDEwICszNzcx
LDEwIEBAIGJvb2wgVHJlZVdhbGtlcjo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0QKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBUcmVlV2Fsa2VyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqVHJlZVdhbGtlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBUcmVlV2Fsa2VyUHJvdG86OnNlbGYocDEpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqVHJlZVdhbGtlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CkBAIC0zNzgyLDcgKzM3ODIsNyBAQCBPYmplY3RJbXAgKlRyZWVXYWxrZXI6OmJyaWRnZShFeGVj
U3RhdGUgCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxUcmVlV2Fsa2VyPihwMSxzdGF0aWNf
Y2FzdDxUcmVlV2Fsa2VyOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgVHJlZVdhbGtlcjo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpUcmVlV2Fsa2VyOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxUcmVlV2Fs
a2VyPihwMSxzdGF0aWNfY2FzdDxUcmVlV2Fsa2VyOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM3
OTEsMTIgKzM3OTEsMTIgQEAgYm9vbCBUeXBlSW5mbzo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpw
MQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZUeXBlSW5m
bzo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBw
cm90byA9IFR5cGVJbmZvUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFR5cGVJbmZvUHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0
cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgVHlwZUluZm86OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqVHlwZUluZm86OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxUeXBlSW5mb1Byb3RvRnVuYyxUeXBlSW5m
bz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzgxOSwxOCArMzgxOSwxOCBA
QCBUeXBlSW5mbyBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRUCiAJUV9VTlVTRUQocDEp
OyByZXR1cm4gVHlwZUluZm86Om51bGw7CiB9CiAKLVZhbHVlIFR5cGVJbmZvOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlR5cGVJbmZvOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFR5cGVJbmZv
UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFR5cGVJbmZvUHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90
by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1PYmplY3QgVHlwZUluZm86OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpUeXBlSW5mbzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBUeXBlSW5mb1Byb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlR5cGVJbmZvOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM4MzgsNyArMzgz
OCw3IEBAIE9iamVjdEltcCAqVHlwZUluZm86OmJyaWRnZShFeGVjU3RhdGUgKnAKICAgICByZXR1
cm4gbmV3IERPTUJyaWRnZTxUeXBlSW5mbz4ocDEsc3RhdGljX2Nhc3Q8VHlwZUluZm86OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBUeXBlSW5mbzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpUeXBlSW5mbzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gY2FjaGVET01PYmplY3Q8VHlwZUluZm8+KHAxLHN0YXRpY19jYXN0PFR5cGVJbmZv
OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM4NDcsMTMgKzM4NDcsMTMgQEAgYm9vbCBVSUV2ZW50
OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9
IExvb2t1cDo6ZmluZEVudHJ5KCZVSUV2ZW50OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkg
cmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gVUlFdmVudFByb3RvOjpzZWxmKHAxKTsK
LSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVj
dEltcCAqcHJvdG8gPSBVSUV2ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKEV2ZW50OjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgVUlFdmVu
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpVSUV2ZW50OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8VUlFdmVudFByb3Rv
RnVuYyxVSUV2ZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zODgwLDE4
ICszODgwLDE4IEBAIFVJRXZlbnQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdGVkVUkKIAlR
X1VOVVNFRChwMSk7IHJldHVybiBVSUV2ZW50OjpudWxsOwogfQogCi1WYWx1ZSBVSUV2ZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlVJRXZlbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0g
VUlFdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBVSUV2ZW50
UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihFdmVudDo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gRXZlbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1PYmplY3QgVUlFdmVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJ
bXAgKlVJRXZlbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gVUlFdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlVJRXZl
bnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzg5OSw3ICszODk5LDcgQEAgT2Jq
ZWN0SW1wICpVSUV2ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBuZXcgRE9N
QnJpZGdlPFVJRXZlbnQ+KHAxLHN0YXRpY19jYXN0PFVJRXZlbnQ6OlByaXZhdGUgKj4oZCkpOwog
fQogCi1WYWx1ZSBVSUV2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KlVJRXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hl
RE9NT2JqZWN0PFVJRXZlbnQ+KHAxLHN0YXRpY19jYXN0PFVJRXZlbnQ6OlByaXZhdGUgKj4oZCkp
OwogfQpAQCAtMzkwOCwxMiArMzkwOCwxMiBAQCBib29sIFhQYXRoRXZhbHVhdG9yOjpoYXNQcm9w
ZXJ0eShFeGVjU3RhCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50
cnkoJlhQYXRoRXZhbHVhdG9yOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRy
dWU7Ci0gICAgT2JqZWN0IHByb3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7Ci0g
ICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBYUGF0aEV2YWx1YXRvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpYUGF0aEV2YWx1YXRvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBy
ZXR1cm4gbG9va3VwR2V0PFhQYXRoRXZhbHVhdG9yUHJvdG9GdW5jLFhQYXRoRXZhbHVhdG9yPihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zOTM4LDE4ICszOTM4LDE4IEBAIFhQ
YXRoRXZhbHVhdG9yIEtET006OkVjbWFJbnRlcmZhY2U6OmluaGUKIAlRX1VOVVNFRChwMSk7IHJl
dHVybiBYUGF0aEV2YWx1YXRvcjo6bnVsbDsKIH0KIAotVmFsdWUgWFBhdGhFdmFsdWF0b3I6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhFdmFsdWF0
b3I6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnBy
b3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBYUGF0aEV2YWx1YXRvcjo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlhQYXRoRXZhbHVhdG9y
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFhQ
YXRoRXZhbHVhdG9yUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqWFBhdGhFdmFs
dWF0b3I6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzk1Nyw3ICszOTU3LDcgQEAg
T2JqZWN0SW1wICpYUGF0aEV2YWx1YXRvcjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcg
RE9NQnJpZGdlPFhQYXRoRXZhbHVhdG9yPihwMSxzdGF0aWNfY2FzdDxYUGF0aEV2YWx1YXRvcjo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFhQYXRoRXZhbHVhdG9yOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoRXZhbHVhdG9yOjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxYUGF0aEV2YWx1YXRvcj4o
cDEsc3RhdGljX2Nhc3Q8WFBhdGhFdmFsdWF0b3I6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzk3
MCwyMSArMzk3MCwyMSBAQCBib29sIFhQYXRoRXhjZXB0aW9uOjpoYXNQcm9wZXJ0eShFeGVjU3Rh
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBYUGF0aEV4Y2VwdGlvbjo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpYUGF0aEV4Y2VwdGlvbjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8WFBhdGhFeGNlcHRp
b24+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgWFBhdGhFeGNlcHRp
b246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhF
eGNlcHRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9V
TlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLU9iamVjdCBYUGF0aEV4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKlhQYXRoRXhjZXB0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWls
dGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVs
bCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpYUGF0aEV4Y2VwdGlvbjo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zOTkyLDcgKzM5OTIsNyBAQCBPYmplY3RJ
bXAgKlhQYXRoRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBET01Ccmlk
Z2U8WFBhdGhFeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PFhQYXRoRXhjZXB0aW9uOjpQcml2YXRl
ICo+KGQpKTsKIH0KIAotVmFsdWUgWFBhdGhFeGNlcHRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqWFBhdGhFeGNlcHRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFhQYXRoRXhjZXB0aW9uPihwMSxzdGF0
aWNfY2FzdDxYUGF0aEV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC00MDAxLDEyICs0
MDAxLDEyIEBAIGJvb2wgWFBhdGhFeHByZXNzaW9uOjpoYXNQcm9wZXJ0eShFeGVjU3QKIHsKICAg
ICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmWFBhdGhFeHByZXNzaW9u
OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHBy
b3RvID0gWFBhdGhFeHByZXNzaW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFhQYXRo
RXhwcmVzc2lvblByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFhQYXRoRXhw
cmVzc2lvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpYUGF0aEV4cHJl
c3Npb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdl
dDxYUGF0aEV4cHJlc3Npb25Qcm90b0Z1bmMsWFBhdGhFeHByZXNzaW9uPihwMSxwMiwmc19oYXNo
VGFibGUsdGhpcyxwMyk7CiB9CkBAIC00MDI5LDE4ICs0MDI5LDE4IEBAIFhQYXRoRXhwcmVzc2lv
biBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmgKIAlRX1VOVVNFRChwMSk7IHJldHVybiBYUGF0aEV4
cHJlc3Npb246Om51bGw7CiB9CiAKLVZhbHVlIFhQYXRoRXhwcmVzc2lvbjo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpYUGF0aEV4cHJlc3Npb246OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gWFBh
dGhFeHByZXNzaW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFhQ
YXRoRXhwcmVzc2lvblByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFhQYXRoRXhwcmVzc2lvbjo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlhQYXRoRXhwcmVzc2lvbjo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBYUGF0aEV4
cHJlc3Npb25Qcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpYUGF0aEV4cHJlc3Np
b246OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDA0OCw3ICs0MDQ4LDcgQEAgT2Jq
ZWN0SW1wICpYUGF0aEV4cHJlc3Npb246OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcgRE9N
QnJpZGdlPFhQYXRoRXhwcmVzc2lvbj4ocDEsc3RhdGljX2Nhc3Q8WFBhdGhFeHByZXNzaW9uOjpQ
cml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgWFBhdGhFeHByZXNzaW9uOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoRXhwcmVzc2lvbjo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8WFBhdGhFeHByZXNzaW9u
PihwMSxzdGF0aWNfY2FzdDxYUGF0aEV4cHJlc3Npb246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAt
NDA1NywxMiArNDA1NywxMiBAQCBib29sIFhQYXRoTlNSZXNvbHZlcjo6aGFzUHJvcGVydHkoRXhl
Y1N0CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlhQYXRo
TlNSZXNvbHZlcjo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAg
IE9iamVjdCBwcm90byA9IFhQYXRoTlNSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihw
cm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBYUGF0aE5TUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBYUGF0aE5TUmVzb2x2ZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
WFBhdGhOU1Jlc29sdmVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBsb29rdXBHZXQ8WFBhdGhOU1Jlc29sdmVyUHJvdG9GdW5jLFhQYXRoTlNSZXNvbHZlcj4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNDA5MCwxOCArNDA5MCwxOCBAQCBYUGF0
aE5TUmVzb2x2ZXIgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oCiAJUV9VTlVTRUQocDEpOyByZXR1
cm4gWFBhdGhOU1Jlc29sdmVyOjpudWxsOwogfQogCi1WYWx1ZSBYUGF0aE5TUmVzb2x2ZXI6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhOU1Jlc29s
dmVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBw
cm90byA9IFhQYXRoTlNSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAq
cHJvdG8gPSBYUGF0aE5TUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VE
KHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBYUGF0aE5TUmVzb2x2
ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpYUGF0aE5TUmVz
b2x2ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gWFBhdGhOU1Jlc29sdmVyUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqWFBh
dGhOU1Jlc29sdmVyOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQxMDksNyArNDEw
OSw3IEBAIE9iamVjdEltcCAqWFBhdGhOU1Jlc29sdmVyOjpicmlkZ2UoRXhlY1MKICAgICByZXR1
cm4gbmV3IERPTUJyaWRnZTxYUGF0aE5TUmVzb2x2ZXI+KHAxLHN0YXRpY19jYXN0PFhQYXRoTlNS
ZXNvbHZlcjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFhQYXRoTlNSZXNvbHZlcjo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpYUGF0aE5TUmVzb2x2ZXI6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFhQYXRo
TlNSZXNvbHZlcj4ocDEsc3RhdGljX2Nhc3Q8WFBhdGhOU1Jlc29sdmVyOjpQcml2YXRlICo+KGQp
KTsKIH0KQEAgLTQxMjIsMTIgKzQxMjIsMTIgQEAgYm9vbCBYUGF0aE5hbWVzcGFjZTo6aGFzUHJv
cGVydHkoRXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgWFBhdGhOYW1lc3Bh
Y2U6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhOYW1lc3BhY2U6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVl
PFhQYXRoTmFtZXNwYWNlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVl
IFhQYXRoTmFtZXNwYWNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlhQYXRoTmFtZXNwYWNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIGlmKE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6OmdldChw
MSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDE0MiwxMCArNDE0MiwxMCBA
QCBib29sIFhQYXRoTmFtZXNwYWNlOjpwdXQoUFVUX01FVEhPRF9BUkdTCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1PYmplY3QgWFBhdGhOYW1lc3BhY2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpYUGF0aE5hbWVzcGFjZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRp
bk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwo
KSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqWFBhdGhOYW1lc3BhY2U6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDE1Myw3ICs0MTUzLDcgQEAgT2JqZWN0SW1w
ICpYUGF0aE5hbWVzcGFjZTo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9NUldCcmlk
Z2U8WFBhdGhOYW1lc3BhY2U+KHAxLHN0YXRpY19jYXN0PFhQYXRoTmFtZXNwYWNlOjpQcml2YXRl
ICo+KGQpKTsKIH0KIAotVmFsdWUgWFBhdGhOYW1lc3BhY2U6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqWFBhdGhOYW1lc3BhY2U6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFhQYXRoTmFtZXNwYWNlPihwMSxzdGF0
aWNfY2FzdDxYUGF0aE5hbWVzcGFjZTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC00MTYyLDEyICs0
MTYyLDEyIEBAIGJvb2wgWFBhdGhSZXN1bHQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAKIHsKICAg
ICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmWFBhdGhSZXN1bHQ6OnNf
aGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8g
PSBYUGF0aFJlc3VsdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBYUGF0aFJlc3VsdFBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFhQYXRoUmVzdWx0OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoUmVzdWx0OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8WFBhdGhSZXN1bHRQcm90b0Z1
bmMsWFBhdGhSZXN1bHQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTQxOTAs
MTggKzQxOTAsMTggQEAgWFBhdGhSZXN1bHQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdAog
CVFfVU5VU0VEKHAxKTsgcmV0dXJuIFhQYXRoUmVzdWx0OjpudWxsOwogfQogCi1WYWx1ZSBYUGF0
aFJlc3VsdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpY
UGF0aFJlc3VsdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBP
YmplY3QgcHJvdG8gPSBYUGF0aFJlc3VsdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdElt
cCAqcHJvdG8gPSBYUGF0aFJlc3VsdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQo
cDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFhQYXRoUmVzdWx0Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqWFBhdGhSZXN1bHQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gWFBhdGhS
ZXN1bHRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVs
bCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpYUGF0aFJlc3VsdDo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00MjA5LDcgKzQyMDksNyBAQCBPYmplY3RJbXAg
KlhQYXRoUmVzdWx0OjpicmlkZ2UoRXhlY1N0YXRlCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8
WFBhdGhSZXN1bHQ+KHAxLHN0YXRpY19jYXN0PFhQYXRoUmVzdWx0OjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgWFBhdGhSZXN1bHQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1
ZUltcCAqWFBhdGhSZXN1bHQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGNhY2hlRE9NT2JqZWN0PFhQYXRoUmVzdWx0PihwMSxzdGF0aWNfY2FzdDxYUGF0aFJlc3Vs
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CkluZGV4OiBrZG9tL2VjbWEvRE9NQnJpZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL0RPTUJyaWRnZS5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2VjbWEvRE9N
QnJpZGdlLmgKLS0tIGtkb20vZWNtYS9ET01CcmlkZ2UuaAk5IEp1bCAyMDA1IDA2OjUzOjU4IC0w
MDAwCTEuMQorKysga2RvbS9lY21hL0RPTUJyaWRnZS5oCTggQXVnIDIwMDUgMDk6MDI6NDggLTAw
MDAKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEtKUwogewotCWNsYXNzIFZhbHVlOwor
CWNsYXNzIFZhbHVlSW1wOwogCWNsYXNzIFVTdHJpbmc7CiAJY2xhc3MgRXhlY1N0YXRlOwogfTsK
QEAgLTYxLDIwICs2MSwyMCBAQCBuYW1lc3BhY2UgS0RPTQogCiAJCXR5cGVuYW1lIFQ6OlByaXZh
dGUgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGw7IH0KIAotCQl2aXJ0dWFsIEtKUzo6VmFs
dWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSkgY29uc3QKKwkJdmlydHVhbCBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAogCQl7
CiAJCQlrZERlYnVnKDI2MDA0KSA8PCAiRE9NQnJpZGdlOjpnZXQoKSwgIiA8PCBwcm9wZXJ0eU5h
bWUucXN0cmluZygpIDw8ICIgTmFtZTogIiA8PCBjbGFzc0luZm8oKS0+Y2xhc3NOYW1lIDw8ICIg
T2JqZWN0OiAiIDw8IHRoaXMtPm1faW1wbCA8PCBlbmRsOwogCiAJCQkvLyBMb29rIGZvciBzdGFu
ZGFyZCBwcm9wZXJ0aWVzIChlLmcuIHRob3NlIGluIHRoZSBoYXNodGFibGVzKQogCQkJVCBvYmoo
bV9pbXBsKTsKLQkJCUtKUzo6VmFsdWUgdmFsID0gb2JqLmdldChleGVjLCBwcm9wZXJ0eU5hbWUs
IHRoaXMpOworCQkJS0pTOjpWYWx1ZUltcCAqdmFsID0gb2JqLmdldChleGVjLCBwcm9wZXJ0eU5h
bWUsIHRoaXMpOwogCi0JCQlpZih2YWwudHlwZSgpICE9IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJ
CWlmKHZhbC0+dHlwZSgpICE9IEtKUzo6VW5kZWZpbmVkVHlwZSkKIAkJCQlyZXR1cm4gdmFsOwog
CiAJCQkvLyBOb3QgZm91bmQgLT4gZm9yd2FyZCB0byBPYmplY3RJbXAuCiAJCQl2YWwgPSBLSlM6
Ok9iamVjdEltcDo6Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0JCQlpZih2YWwudHlwZSgpID09
IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJCWlmKHZhbC0+dHlwZSgpID09IEtKUzo6VW5kZWZpbmVk
VHlwZSkKIAkJCQlrZERlYnVnKDI2MDA0KSA8PCAiV0FSTklORzogIiA8PCBwcm9wZXJ0eU5hbWUu
cXN0cmluZygpIDw8ICIgbm90IGZvdW5kIGluLi4uIE5hbWU6ICIgPDwgY2xhc3NJbmZvKCktPmNs
YXNzTmFtZSA8PCAiIE9iamVjdDogIiA8PCBtX2ltcGwgPDwgIiBvbiBsaW5lIDogIiA8PCBleGVj
LT5jb250ZXh0KCkuY3VyU3RtdEZpcnN0TGluZSgpIDw8IGVuZGw7CiAKIAkJCXJldHVybiB2YWw7
CkBAIC0xMDUsNyArMTA1LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6CiAJCURPTVJXQnJp
ZGdlKEtKUzo6RXhlY1N0YXRlICpleGVjLCB0eXBlbmFtZSBUOjpQcml2YXRlICppbXBsKSA6IERP
TUJyaWRnZTxUPihleGVjLCBpbXBsKSB7IH0KIAotCQl2aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3Qg
S0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKQorCQl2aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgS0pTOjpW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogCQl7CiAvLwkJCWlmKCEoYXR0ciAmIEtKUzo6SW50
ZXJuYWwpKQogCQkJa2REZWJ1ZygyNjAwNCkgPDwgIkRPTVJXQnJpZGdlOjpwdXQoKSwgIiA8PCBw
cm9wZXJ0eU5hbWUucXN0cmluZygpIDw8ICIgTmFtZTogIiA8PCB0aGlzLT5jbGFzc0luZm8oKS0+
Y2xhc3NOYW1lIDw8ICIgT2JqZWN0OiAiIDw8IHRoaXMtPm1faW1wbCA8PCBlbmRsOwpAQCAtMTI5
LDE5ICsxMjksMTkgQEAgbmFtZXNwYWNlIEtET00KIAogCQlUICppbXBsKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsOyB9CiAKLQkJdmlydHVhbCBLSlM6OlZhbHVlIGdldChLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CisJCXZpcnR1
YWwgS0pTOjpWYWx1ZUltcCAqZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6Oklk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKIAkJewogCQkJa2REZWJ1ZygyNjAwNCkgPDwg
IkRPTUJyaWRnZUN0b3I6OmdldCgpLCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgIiBO
YW1lOiAiIDw8IGNsYXNzSW5mbygpLT5jbGFzc05hbWUgPDwgIiBPYmplY3Q6ICIgPDwgdGhpcy0+
bV9pbXBsIDw8IGVuZGw7CiAKIAkJCS8vIExvb2sgZm9yIHN0YW5kYXJkIHByb3BlcnRpZXMgKGUu
Zy4gdGhvc2UgaW4gdGhlIGhhc2h0YWJsZXMpCi0JCQlLSlM6OlZhbHVlIHZhbCA9IG1faW1wbC0+
Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcyk7CisJCQlLSlM6OlZhbHVlSW1wICp2YWwgPSBt
X2ltcGwtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMpOwogCi0JCQlpZih2YWwudHlwZSgp
ICE9IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJCWlmKHZhbC0+dHlwZSgpICE9IEtKUzo6VW5kZWZp
bmVkVHlwZSkKIAkJCQlyZXR1cm4gdmFsOwogCiAJCQkvLyBOb3QgZm91bmQgLT4gZm9yd2FyZCB0
byBPYmplY3RJbXAuCiAJCQl2YWwgPSBLSlM6Ok9iamVjdEltcDo6Z2V0KGV4ZWMsIHByb3BlcnR5
TmFtZSk7Ci0JCQlpZih2YWwudHlwZSgpID09IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJCWlmKHZh
bC0+dHlwZSgpID09IEtKUzo6VW5kZWZpbmVkVHlwZSkKIAkJCQlrZERlYnVnKDI2MDA0KSA8PCAi
V0FSTklORzogIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8ICIgbm90IGZvdW5kIGluLi4u
IE5hbWU6ICIgPDwgY2xhc3NJbmZvKCktPmNsYXNzTmFtZSA8PCAiIE9iamVjdDogIiA8PCBtX2lt
cGwgPDwgIiBvbiBsaW5lIDogIiA8PCBleGVjLT5jb250ZXh0KCkuY3VyU3RtdEZpcnN0TGluZSgp
IDw8IGVuZGw7CiAKIAkJCXJldHVybiB2YWw7CkluZGV4OiBrZG9tL2VjbWEvRE9NTG9va3VwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL0RPTUxv
b2t1cC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBrZG9tL2Vj
bWEvRE9NTG9va3VwLmgKLS0tIGtkb20vZWNtYS9ET01Mb29rdXAuaAk3IEF1ZyAyMDA1IDA2OjE3
OjQ0IC0wMDAwCTEuNAorKysga2RvbS9lY21hL0RPTUxvb2t1cC5oCTggQXVnIDIwMDUgMDk6MDI6
NDggLTAwMDAKQEAgLTQ0LDEyICs0NCwxMiBAQCBwdWJsaWM6IFwKICAgICBib29sIGhhc1Byb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSkgY29uc3Q7IFwKICAgICBcCiAgICAgLyogZ2V0KCkgbWV0aG9kLCBjYWxsZWQgYnkgRE9N
QnJpZGdlOjpnZXQgKi8gXAotICAgIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpPYmplY3RJ
bXAqIGJyaWRnZSkgY29uc3Q7IFwKKyAgICBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6
Ok9iamVjdEltcCogYnJpZGdlKSBjb25zdDsgXAogICAgIFwKICAgICAvKiBDYWxsZWQgYnkgbG9v
a3VwR2V0KCkuIEF1dG8tZ2VuZXJhdGVkLiBGb3J3YXJkcyB0byB0aGUgcGFyZW50IHdoaWNoIGhh
cyB0aGUgZ2l2ZW4gcHJvcGVydHkuICovIFwKLSAgICBLSlM6OlZhbHVlIGdldEluUGFyZW50cyhL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IGNvbnN0IEtKUzo6T2JqZWN0SW1wKiBicmlkZ2UpIGNvbnN0OyBcCisgICAgS0pTOjpWYWx1ZUlt
cCAqZ2V0SW5QYXJlbnRzKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpPYmplY3RJbXAqIGJyaWRnZSkgY29uc3Q7IFwK
ICAgICBcCi0gICAgS0pTOjpPYmplY3QgcHJvdG90eXBlKEtKUzo6RXhlY1N0YXRlICpleGVjKSBj
b25zdDtcCisgICAgS0pTOjpPYmplY3RJbXAgKnByb3RvdHlwZShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YykgY29uc3Q7XAogCVwKIAlLSlM6Ok9iamVjdEltcCAqYnJpZGdlKEtKUzo6RXhlY1N0YXRlICop
IGNvbnN0OyBcCiAgICAgXApAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6IFwKICAqLwogI2RlZmlu
ZSBLRE9NX0dFVCBcCiAgICAgS0RPTV9HRVRfQ09NTU9OIFwKLSAgICBLSlM6OlZhbHVlIGNhY2hl
KEtKUzo6RXhlY1N0YXRlICpleGVjKSBjb25zdDsgCisgICAgS0pTOjpWYWx1ZUltcCAqY2FjaGUo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OyAKIAogLyoqCiAgKiBTYW1lIGFzIEtET01fR0VU
LCBidXQgZm9yIGJhc2UgY2xhc3NlcyhrYWx5cHR1cyBoZWxwcyBmaW5kaW5nIHRoZW0pLiBUaGUg
CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzogXAogICovCiAjZGVmaW5lIEtET01fQkFTRUNMQVNT
X0dFVCBcCiAgICAgS0RPTV9HRVRfQ09NTU9OIFwKLSAgICB2aXJ0dWFsIEtKUzo6VmFsdWUgY2Fj
aGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OyAKKyAgICB2aXJ0dWFsIEtKUzo6VmFsdWVJ
bXAgKmNhY2hlKEtKUzo6RXhlY1N0YXRlICpleGVjKSBjb25zdDsgCiAKIC8qKgogICogRm9yIHJl
YWQtd3JpdGUgY2xhc3NlcyBvbmx5LCBpLmUuIHRob3NlIHdoaWNoIHN1cHBvcnQgcHV0KCkuCkBA
IC03OSwxMSArNzksMTEgQEAgcHVibGljOiBcCiAgICAgXAogICAgIC8qIHB1dCgpIG1ldGhvZCwg
Y2FsbGVkIGJ5IERPTUJyaWRnZTo6cHV0ICovIFwKICAgICBib29sIHB1dChLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFwKLQkJCSBjb25z
dCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOyBcCisJCQkgS0pTOjpWYWx1ZUltcCAqdmFs
dWUsIGludCBhdHRyKTsgXAogCVwKICAgICAvKiBDYWxsZWQgYnkgbG9va3VwUHV0LiBBdXRvLWdl
bmVyYXRlZC4gTG9va3MgaW4gaGFzaHRhYmxlLCBmb3J3YXJkcyB0byBwYXJlbnRzLiAqLyBcCiAg
ICAgYm9vbCBwdXRJblBhcmVudHMoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBcCi0JCQkJCSAgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUs
IGludCBhdHRyKTsKKwkJCQkJICBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCiAv
KioKICAqIEZvciBjbGFzc2VzIHdoaWNoIGluaGVyaXQgYSByZWFkLXdyaXRlIGNsYXNzLCAKQEAg
LTkyLDcgKzkyLDcgQEAgcHVibGljOiBcCiAjZGVmaW5lIEtET01fRk9SV0FSRFBVVCBcCiAgICAg
XAogICAgIC8qIHB1dCgpIG1ldGhvZCwgY2FsbGVkIGJ5IERPTUJyaWRnZTo6cHV0ICovIFwKLSAg
ICBib29sIHB1dChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisgICAgYm9v
bCBwdXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCiAvKioKICAqIFVzZWQg
aW4gZ2VuZXJhdGVkYXRhLmNwcApAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzogXAogICogQHBh
cmFtIHA0IGF0dHIKICAqIEBpbnRlcm5hbAogICovCi0jZGVmaW5lIFBVVF9NRVRIT0RfQVJHUyBL
SlM6OkV4ZWNTdGF0ZSAqcDEsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcDIsIGNvbnN0IEtKUzo6
VmFsdWUgJnAzLCBpbnQgcDQKKyNkZWZpbmUgUFVUX01FVEhPRF9BUkdTIEtKUzo6RXhlY1N0YXRl
ICpwMSwgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwMiwgS0pTOjpWYWx1ZUltcCAqcDMsIGludCBw
NAogCiBuYW1lc3BhY2UgS0RPTQogewpAQCAtMTM3LDcgKzEzNyw3IEBAIG5hbWVzcGFjZSBLRE9N
CiAJICogQHBhcmFtIHRoaXNPYmogInRoaXMiCiAJICovCiAJdGVtcGxhdGU8Y2xhc3MgRnVuY0lt
cCwgY2xhc3MgVGhpc0ltcD4KLQlpbmxpbmUgS0pTOjpWYWx1ZSBsb29rdXBHZXQoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsCisJaW5saW5lIEtKUzo6VmFsdWVJbXAgKmxvb2t1cEdldChLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywKIAkJCQkJCQkJY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
CiAJCQkJCQkJCWNvbnN0IEtKUzo6SGFzaFRhYmxlICp0YWJsZSwKIAkJCQkJCQkJY29uc3QgVGhp
c0ltcCAqdGhpc09iaiwgLy8gdGhlICdpbXBsJyBvYmplY3QKQEAgLTE2NCw3ICsxNjQsNyBAQCBu
YW1lc3BhY2UgS0RPTQogCSAqIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiBsb29rdXBHZXQgcmVtb3Zl
cyB0aGUgbmVlZCBmb3IgYSBGdW5jSW1wIGNsYXNzLgogCSAqLwogCXRlbXBsYXRlIDxjbGFzcyBU
aGlzSW1wPgotCWlubGluZSBLSlM6OlZhbHVlIGxvb2t1cEdldFZhbHVlKEtKUzo6RXhlY1N0YXRl
ICpleGVjLAorCWlubGluZSBLSlM6OlZhbHVlSW1wICpsb29rdXBHZXRWYWx1ZShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywKIAkJCQkJCQkJCSBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSwKIAkJCQkJCQkJCSBjb25zdCBLSlM6Okhhc2hUYWJsZSAqdGFibGUsCiAJCQkJCQkJCQkgY29u
c3QgVGhpc0ltcCAqdGhpc09iaiwgLy8gdGhlICdpbXBsJyBvYmplY3QKQEAgLTE5Myw3ICsxOTMs
NyBAQCBuYW1lc3BhY2UgS0RPTQogCXRlbXBsYXRlIDxjbGFzcyBUaGlzSW1wPgogCWlubGluZSBi
b29sIGxvb2t1cFB1dChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywKIAkJCQkJCSAgY29uc3QgS0pTOjpJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0JCQkJCQkgIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVl
LAorCQkJCQkJICBLSlM6OlZhbHVlSW1wICp2YWx1ZSwKIAkJCQkJCSAgaW50IGF0dHIsCiAJCQkJ
CQkgIGNvbnN0IEtKUzo6SGFzaFRhYmxlICp0YWJsZSwKIAkJCQkJCSAgVGhpc0ltcCAqdGhpc09i
aikKQEAgLTIyMSw3ICsyMjEsNyBAQCBuYW1lc3BhY2UgS0RPTQogCiAvLyBVc2VmdWwgbWFjcm9z
IGZvciBkZWFsaW5nIHdpdGggZWNtYSBjb25zdHJ1Y3RvcnMgKGVudW0gdHlwZXMsIGZvciBleGFt
cGxlKQogI2RlZmluZSBFQ01BX0lNUExFTUVOVF9DT05TVFJVQ1RPUihTcGFjZSwgQ2xhc3NOYW1l
LCBDbGFzcykgXAotIEtKUzo6VmFsdWUgQ2xhc3NOYW1lOjpnZXQoS0pTOjpFeGVjU3RhdGUgKiwg
Y29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6T2JqZWN0SW1w
ICopIGNvbnN0IHsgXAorIEtKUzo6VmFsdWVJbXAgKkNsYXNzTmFtZTo6Z2V0KEtKUzo6RXhlY1N0
YXRlICosIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6Ok9i
amVjdEltcCAqKSBjb25zdCB7IFwKICBjb25zdCBLSlM6Okhhc2hFbnRyeSAqZW50cnkgPSBLSlM6
Okxvb2t1cDo6ZmluZEVudHJ5KCZzX2hhc2hUYWJsZSwgcHJvcGVydHlOYW1lKTsgXAogIGlmKGVu
dHJ5KSBcCiAgICByZXR1cm4gS0pTOjpOdW1iZXIoZW50cnktPnZhbHVlKTsgXApAQCAtMjMwLDEy
ICsyMzAsMTEgQEAgbmFtZXNwYWNlIEtET00KICBib29sIENsYXNzTmFtZTo6aGFzUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNv
bnN0IHsgXAogICByZXR1cm4gS0pTOjpMb29rdXA6OmZpbmRFbnRyeSgmc19oYXNoVGFibGUsIHBy
b3BlcnR5TmFtZSk7IFwKICB9IFwKLSBLSlM6Ok9iamVjdCBDbGFzc05hbWU6OnByb3RvdHlwZShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgeyBcCi0gIGlmKGV4ZWMpIHJldHVybiBleGVjLT5p
bnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7IFwKLSAgcmV0dXJuIEtKUzo6
T2JqZWN0OjpkeW5hbWljQ2FzdChLSlM6Ok51bGwoKSk7IFwKKyBLSlM6Ok9iamVjdEltcCAqQ2xh
c3NOYW1lOjpwcm90b3R5cGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0IHsgXAorICByZXR1
cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOyBcCiAgfSBc
CiAgY29uc3QgS0pTOjpDbGFzc0luZm8gQ2xhc3NOYW1lOjpzX2NsYXNzSW5mbyA9IHsgQ2xhc3Mg
IkNvbnN0cnVjdG9yIiwgMCwgJnNfaGFzaFRhYmxlLCAwIH07IFwKLSBLSlM6OlZhbHVlIFNwYWNl
OjpnZXQjI0NsYXNzTmFtZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYykgeyBcCisgS0pTOjpWYWx1ZUlt
cCAqU3BhY2U6OmdldCMjQ2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlICpleGVjKSB7IFwKICAgcmV0
dXJuIEtET006OmNhY2hlR2xvYmFsQnJpZGdlPENsYXNzTmFtZT4oZXhlYywgIltbIiBDbGFzcyAi
LmNvbnN0cnVjdG9yXV0iKTsgXAogIH0KICAKQEAgLTI0NSwxMyArMjQ0LDEzIEBAIG5hbWVzcGFj
ZSBLRE9NCiAgIGNsYXNzIENsYXNzTmFtZSA6IHB1YmxpYyBLSlM6Ok9iamVjdEltcCB7IFwKICAg
cHVibGljOiBcCiAgICAgQ2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlICpleGVjKSA6IEtKUzo6T2Jq
ZWN0SW1wKCkge30gXAotICAgIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBj
b25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpPYmplY3RJbXAg
Km9iaikgY29uc3Q7IFwKKyAgICBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6Ok9iamVj
dEltcCAqb2JqKSBjb25zdDsgXAogICAgIGJvb2wgaGFzUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsgXAotICAg
IEtKUzo6T2JqZWN0IHByb3RvdHlwZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7IFwKKyAg
ICBLSlM6Ok9iamVjdEltcCAqcHJvdG90eXBlKEtKUzo6RXhlY1N0YXRlICpleGVjKSBjb25zdDsg
XAogICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBzX2NsYXNzSW5mbzsgXAogICAgIHN0
YXRpYyBjb25zdCBzdHJ1Y3QgS0pTOjpIYXNoVGFibGUgc19oYXNoVGFibGU7IFwKICAgfTsgXAot
ICBLSlM6OlZhbHVlIGdldCMjQ2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlICpleGVjKTsgXAorICBL
SlM6OlZhbHVlSW1wICpnZXQjI0NsYXNzTmFtZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYyk7IFwKICAg
fQogCiAvLyBTYW1lIGFzIGtqcycgREVGSU5FX1BST1RPVFlQRSwgYnV0IHdpdGggYSBwb2ludGVy
IHRvIHRoZSBoYXNodGFibGUgdG9vLCBhbmQgbm8gQ2xhc3NOYW1lIGhlcmUKQEAgLTI2MCwxMiAr
MjU5LDEyIEBAIG5hbWVzcGFjZSBLRE9NCiAgIG5hbWVzcGFjZSBTcGFjZSB7IFwKICAgY2xhc3Mg
Q2xhc3NQcm90byA6IHB1YmxpYyBLSlM6Ok9iamVjdEltcCB7IFwKICAgcHVibGljOiBcCi0gICAg
c3RhdGljIEtKUzo6T2JqZWN0IHNlbGYoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpOyBcCisgICAgc3Rh
dGljIEtKUzo6T2JqZWN0SW1wICpzZWxmKEtKUzo6RXhlY1N0YXRlICpleGVjKTsgXAogICAgIENs
YXNzUHJvdG8oIEtKUzo6RXhlY1N0YXRlICpleGVjICkgXAogICAgICAgOiBLSlM6Ok9iamVjdElt
cCggZXhlYy0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpICkge30gXAog
ICAgIHZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9IFwKICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gaW5mbzsgXAot
ICAgIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7IFwKKyAgICBLSlM6OlZhbHVlSW1wICpnZXQoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBj
b25zdDsgXAogICAgIGJvb2wgaGFzUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsgXAogICAgIFwKICAgICBzdGF0
aWMgY29uc3Qgc3RydWN0IEtKUzo6SGFzaFRhYmxlIHNfaGFzaFRhYmxlOyBcCkBAIC0yNzUsOSAr
Mjc0LDkgQEAgbmFtZXNwYWNlIEtET00KIC8vIHNhbWUgYXMgSU1QTEVNRU5UX1BST1RPVFlQRSBi
dXQgaW4gdGhlIEtET00gbmFtZXNwYWNlLCBhbmQgd2l0aCBDbGFzc05hbWUgaGVyZQogLy8gc28g
dGhhdCBLRE9NX0RFRklORV9QUk9UT1RZUEUgY2FuIGJlIHB1dCBpbiBhIGhlYWRlciBmaWxlICgn
aW5mbycgZGVmaW5lZCBoZXJlKQogI2RlZmluZSBFQ01BX0lNUExFTUVOVF9QUk9UT1RZUEUoU3Bh
Y2UsQ2xhc3NOYW1lLENsYXNzUHJvdG8sQ2xhc3NGdW5jKSBcCi0gICAgS0pTOjpWYWx1ZSBTcGFj
ZTo6Q2xhc3NQcm90bzo6Z2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QgXAorICAgIEtKUzo6VmFsdWVJbXAgKlNwYWNlOjpD
bGFzc1Byb3RvOjpnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lKSBjb25zdCBcCiAgICAgeyBcCi0gICAgICAgIC8qIEtKUzo6VmFsdWUg
cmVzdWx0OyBcCisgICAgICAgIC8qIEtKUzo6VmFsdWVJbXAgKnJlc3VsdDsgXAogICAgICAgICBp
ZiAoS0pTOjpsb29rdXBHZXRPd25GdW5jdGlvbjxDbGFzc0Z1bmMsS0pTOjpPYmplY3RJbXA+KGV4
ZWMsIHByb3BlcnR5TmFtZSwgJnNfaGFzaFRhYmxlLCB0aGlzLCByZXN1bHQpKSBcCiAgICAgICAg
IHJldHVybiByZXN1bHQ7ICAqLyBcCiAgICAgICAgIHJldHVybiBLSlM6OlVuZGVmaW5lZCgpOyBc
CkBAIC0yODcsNyArMjg2LDcgQEAgbmFtZXNwYWNlIEtET00KICAgICB7IC8qc3R1cGlkIGJ1dCB3
ZSBuZWVkIHRoaXMgdG8gaGF2ZSBhIGNvbW1vbiBtYWNybyBmb3IgdGhlIGRlY2xhcmF0aW9uKi8g
XAogICAgICAgcmV0dXJuIEtKUzo6T2JqZWN0SW1wOjpoYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0
eU5hbWUpOyBcCiAgICAgfSBcCi0gICAgS0pTOjpPYmplY3QgU3BhY2U6OkNsYXNzUHJvdG86OnNl
bGYoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIFwKKyAgICBLSlM6Ok9iamVjdEltcCAqU3BhY2U6OkNs
YXNzUHJvdG86OnNlbGYoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIFwKICAgICB7IFwKICAgICAgIHJl
dHVybiBLSlM6OmNhY2hlR2xvYmFsT2JqZWN0PENsYXNzUHJvdG8+KCBleGVjLCAiW1siIENsYXNz
TmFtZSAiLnByb3RvdHlwZV1dIiApOyBcCiAgICAgfSBcCkBAIC0yOTksNyArMjk4LDYgQEAgbmFt
ZXNwYWNlIEtET00KICAgcHVibGljOiBcCiAgICAgQ2xhc3NGdW5jKEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgaSwgaW50IGxlbikgXAogICAgICAgIDogS0pTOjpPYmplY3RJbXAoIC8qcHJvdG8/
ICovICksIGlkKGkpIHsgXAotICAgICAgIEtKUzo6VmFsdWUgcHJvdGVjdCh0aGlzKTsgXAogICAg
ICAgIHB1dChleGVjLCAibGVuZ3RoIiwgS0pTOjpOdW1iZXIobGVuKSwgS0pTOjpEb250RGVsZXRl
IHwgS0pTOjpSZWFkT25seSB8IEtKUzo6RG9udEVudW0pOyBcCiAgICAgfSBcCiAgICAgLyoqIFVz
ZWQgYnkgY2FsbCgpIHRvIGNoZWNrIHRoZSB0eXBlIG9mIHRoaXNPYmouIEdlbmVyYXRlZCBjb2Rl
ICovIFwKQEAgLTMwOCw3ICszMDYsNyBAQCBuYW1lc3BhY2UgS0RPTQogICAgIHZpcnR1YWwgYm9v
bCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gXAogCVwKICAgICAvKiog
WW91IG5lZWQgdG8gaW1wbGVtZW50IHRoYXQgb25lICovIFwKLSAgICB2aXJ0dWFsIEtKUzo6VmFs
dWUgY2FsbChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpPYmplY3QgJnRoaXNPYmosIGNvbnN0
IEtKUzo6TGlzdCAmYXJncyk7IFwKKyAgICB2aXJ0dWFsIEtKUzo6VmFsdWVJbXAgKmNhbGwoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBLSlM6Okxp
c3QgJmFyZ3MpOyBcCiAJXAogICBwcml2YXRlOiBcCiAgICAgaW50IGlkOyBcCkBAIC0zMTksMTAg
KzMxNywxMCBAQCBuYW1lc3BhY2UgS0RPTQogCiAvLyBUbyBiZSB1c2VkIHdoZW4gY2FzdGluZyB0
aGUgdHlwZSBvZiBhbiBhcmd1bWVudAogI2RlZmluZSBLRE9NX0NIRUNLKENsYXNzTmFtZSwgdGhl
T2JqKSBcCi0gICAgQ2xhc3NOYW1lIG9iaiA9IGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpP
YmplY3RJbXAgKj4odGhlT2JqLmltcCgpKSk7IFwKKyAgICBDbGFzc05hbWUgb2JqID0gY2FzdChl
eGVjLCB0aGVPYmopOyBcCiAgICAgaWYob2JqID09IENsYXNzTmFtZTo6bnVsbCkgeyBcCi0JICAg
IGtkRGVidWcoMjYwMDQpIDw8IGtfZnVuY2luZm8gPDwgIiBXcm9uZyBvYmplY3QgdHlwZTogZXhw
ZWN0ZWQgIiA8PCBDbGFzc05hbWU6OnNfY2xhc3NJbmZvLmNsYXNzTmFtZSA8PCAiIGdvdCAiIDw8
IHRoaXNPYmouY2xhc3NJbmZvKCktPmNsYXNzTmFtZSA8PCBlbmRsOyBcCi0gICAgICAgIE9iamVj
dCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsgXAorCSAgICBrZERlYnVnKDI2
MDA0KSA8PCBrX2Z1bmNpbmZvIDw8ICIgV3Jvbmcgb2JqZWN0IHR5cGU6IGV4cGVjdGVkICIgPDwg
Q2xhc3NOYW1lOjpzX2NsYXNzSW5mby5jbGFzc05hbWUgPDwgIiBnb3QgIiA8PCB0aGlzT2JqLT5j
bGFzc0luZm8oKS0+Y2xhc3NOYW1lIDw8IGVuZGw7IFwKKyAgICAgICAgT2JqZWN0SW1wICplcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsgXAogICAgICAgCWV4ZWMtPnNldEV4Y2Vw
dGlvbihlcnIpOyBcCiAJICAgIHJldHVybiBlcnI7IFwKICAgICB9CkBAIC0zMzUsOCArMzMzLDgg
QEAgbmFtZXNwYWNlIEtET00KIC8vIEhlbHBlcnMgdG8gaGlkZSBleGNlcHRpb24gc3R1ZmYuLi4K
IC8vIHVzZWQgd2l0aGluIGdldC9wdXRWYWx1ZVByb3ByZXR5CiAjZGVmaW5lIEtET01fRU5URVJf
U0FGRSB0cnkgewotI2RlZmluZSBLRE9NX0xFQVZFX1NBRkUoRXhjZXB0aW9uKSB9IGNhdGNoKEV4
Y2VwdGlvbjo6UHJpdmF0ZSAqZSkgeyBLSlM6Ok9iamVjdCBlcnIgPSBLSlM6OkVycm9yOjpjcmVh
dGUoZXhlYywgS0pTOjpHZW5lcmFsRXJyb3IsIFFTdHJpbmc6OmZyb21MYXRpbjEoIiUxICUyIiku
YXJnKFFTdHJpbmc6OmZyb21MYXRpbjEoRXhjZXB0aW9uKGUpLnNfY2xhc3NJbmZvLmNsYXNzTmFt
ZSkpLmFyZyhRU3RyaW5nOjpudW1iZXIoZS0+Y29kZSgpKSkubGF0aW4xKCkpOyBlcnIucHV0KGV4
ZWMsICJjb2RlIiwgS0pTOjpOdW1iZXIoZS0+Y29kZSgpKSk7IGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOyB9Ci0jZGVmaW5lIEtET01fTEVBVkVfQ0FMTF9TQUZFKEV4Y2VwdGlvbikgfSBjYXRjaChF
eGNlcHRpb246OlByaXZhdGUgKmUpIHsgS0pTOjpPYmplY3QgZXJyID0gS0pTOjpFcnJvcjo6Y3Jl
YXRlKGV4ZWMsIEtKUzo6R2VuZXJhbEVycm9yLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIlMSAlMiIp
LmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKEV4Y2VwdGlvbihlKS5zX2NsYXNzSW5mby5jbGFzc05h
bWUpKS5hcmcoUVN0cmluZzo6bnVtYmVyKGUtPmNvZGUoKSkpLmxhdGluMSgpKTsgZXJyLnB1dChl
eGVjLCAiY29kZSIsIEtKUzo6TnVtYmVyKGUtPmNvZGUoKSkpOyBleGVjLT5zZXRFeGNlcHRpb24o
ZXJyKTsgcmV0dXJuIGVycjsgfQorI2RlZmluZSBLRE9NX0xFQVZFX1NBRkUoRXhjZXB0aW9uKSB9
IGNhdGNoKEV4Y2VwdGlvbjo6UHJpdmF0ZSAqZSkgeyBLSlM6Ok9iamVjdEltcCAqZXJyID0gS0pT
OjpFcnJvcjo6Y3JlYXRlKGV4ZWMsIEtKUzo6R2VuZXJhbEVycm9yLCBRU3RyaW5nOjpmcm9tTGF0
aW4xKCIlMSAlMiIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKEV4Y2VwdGlvbihlKS5zX2NsYXNz
SW5mby5jbGFzc05hbWUpKS5hcmcoUVN0cmluZzo6bnVtYmVyKGUtPmNvZGUoKSkpLmxhdGluMSgp
KTsgZXJyLT5wdXQoZXhlYywgImNvZGUiLCBLSlM6Ok51bWJlcihlLT5jb2RlKCkpKTsgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7IH0KKyNkZWZpbmUgS0RPTV9MRUFWRV9DQUxMX1NBRkUoRXhjZXB0
aW9uKSB9IGNhdGNoKEV4Y2VwdGlvbjo6UHJpdmF0ZSAqZSkgeyBLSlM6Ok9iamVjdEltcCAqZXJy
ID0gS0pTOjpFcnJvcjo6Y3JlYXRlKGV4ZWMsIEtKUzo6R2VuZXJhbEVycm9yLCBRU3RyaW5nOjpm
cm9tTGF0aW4xKCIlMSAlMiIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKEV4Y2VwdGlvbihlKS5z
X2NsYXNzSW5mby5jbGFzc05hbWUpKS5hcmcoUVN0cmluZzo6bnVtYmVyKGUtPmNvZGUoKSkpLmxh
dGluMSgpKTsgZXJyLT5wdXQoZXhlYywgImNvZGUiLCBLSlM6Ok51bWJlcihlLT5jb2RlKCkpKTsg
ZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7IHJldHVybiBlcnI7IH0KIAogLy8gSnVzdCBhIG1hcmtl
ciBmb3Iga2FseXB0dXMKICNkZWZpbmUgS0RPTV9DQVNUIDsKSW5kZXg6IGtkb20vZWNtYS9FY21h
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2VjbWEv
RWNtYS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
ZWNtYS9FY21hLmNwcAotLS0ga2RvbS9lY21hL0VjbWEuY3BwCTkgSnVsIDIwMDUgMDY6NTM6NTgg
LTAwMDAJMS4xCisrKyBrZG9tL2VjbWEvRWNtYS5jcHAJOCBBdWcgMjAwNSAwOTowMjo0OSAtMDAw
MApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgRWNtYTo6c2V0dXAoQ0RGSW50ZXJmYWNlICppbnRl
cmZhY2UKIAlkLT5lY21hSW50ZXJmYWNlID0gaW50ZXJmYWNlLT5lY21hSW50ZXJmYWNlKCk7CiAK
IAkvLyBDcmVhdGUgY29kZSBpbnRlcnByZXRlcgotCUtKUzo6T2JqZWN0IGtqc0dsb2JhbE9iamVj
dChkLT5nbG9iYWxPYmplY3QpOworCUtKUzo6T2JqZWN0SW1wICpranNHbG9iYWxPYmplY3QoZC0+
Z2xvYmFsT2JqZWN0KTsKIAlkLT5pbnRlcnByZXRlciA9IG5ldyBTY3JpcHRJbnRlcnByZXRlcihr
anNHbG9iYWxPYmplY3QsIGQtPmRvY3VtZW50KTsKIAogCS8vIFNldCBvYmplY3QgcHJvdG90eXBl
IGZvciBnbG9iYWwgb2JqZWN0CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBFY21hOjpzZXR1cERv
Y3VtZW50KERvY3VtZW50SW1wbCAqZAogCWRvY3VtZW50LT5kZXJlZigpOyAvLyAnZG9jT2JqJyBp
cyBoZWxkIGluIG1lbW9yeSB1bnRpbCB0aGUgZWNtYSBlbmdpbmUgaXMgZGVzdHJ1Y3RlZC4uLgog
fQogCi1LSlM6OkNvbXBsZXRpb24gRWNtYTo6ZXZhbHVhdGUoY29uc3QgS0pTOjpVU3RyaW5nICZj
b2RlLCBjb25zdCBLSlM6OlZhbHVlICZ0aGlzVikKK0tKUzo6Q29tcGxldGlvbiBFY21hOjpldmFs
dWF0ZShjb25zdCBLSlM6OlVTdHJpbmcgJmNvZGUsIEtKUzo6VmFsdWVJbXAgKnRoaXNWKQogewog
I2lmZGVmIEtKU19WRVJCT1NFCiAJa2REZWJ1Zyg2MDcwKSA8PCAiRWNtYTo6ZXZhbHVhdGUgIiA8
PCBjb2RlLnFzdHJpbmcoKSA8PCBlbmRsOwpAQCAtMTYyLDcgKzE2Miw3IEBAIEtKUzo6Q29tcGxl
dGlvbiBFY21hOjpldmFsdWF0ZShjb25zdCBLSlMKIAlyZXR1cm4gZC0+aW50ZXJwcmV0ZXItPmV2
YWx1YXRlKGNvZGUsIHRoaXNWKTsKIH0KIAotS0pTOjpPYmplY3QgRWNtYTo6Z2xvYmFsT2JqZWN0
KCkgY29uc3QKK0tKUzo6T2JqZWN0SW1wICpFY21hOjpnbG9iYWxPYmplY3QoKSBjb25zdAogewog
CXJldHVybiBkLT5pbnRlcnByZXRlci0+Z2xvYmFsT2JqZWN0KCk7CiB9CkBAIC0xODIsNTcgKzE4
Miw1NiBAQCBTY3JpcHRJbnRlcnByZXRlciAqRWNtYTo6aW50ZXJwcmV0ZXIoKSBjCiAJcmV0dXJu
IGQtPmludGVycHJldGVyOwogfQogCi1LSlM6Ok9iamVjdCBFY21hOjplY21hTGlzdGVuZXJUb09i
amVjdChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmbGlzdGVuZXIpCitL
SlM6Ok9iamVjdEltcCAqRWNtYTo6ZWNtYUxpc3RlbmVyVG9PYmplY3QoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIEtKUzo6VmFsdWVJbXAgKmxpc3RlbmVyKQogewotCUtKUzo6T2JqZWN0IGxpc3RlbmVy
T2JqZWN0ID0gS0pTOjpPYmplY3Q6OmR5bmFtaWNDYXN0KGxpc3RlbmVyKTsKLQlpZighbGlzdGVu
ZXJPYmplY3QuaXNWYWxpZCgpKQotCQlyZXR1cm4gS0pTOjpPYmplY3QoKTsKKwlpZighbGlzdGVu
ZXItPmlzT2JqZWN0KCkpCisJCXJldHVybiBOVUxMOworICAgICAgICBLSlM6Ok9iamVjdEltcCAq
bGlzdGVuZXJPYmplY3QgPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihsaXN0ZW5lcik7
CiAJCiAJLy8gJ2xpc3RlbmVyJyBtYXkgYmUgYSBzaW1wbGUgZWNtYSBmdW5jdGlvbi4uLgotCWlm
KGxpc3RlbmVyT2JqZWN0LmltcGxlbWVudHNDYWxsKCkpCisJaWYobGlzdGVuZXJPYmplY3QtPmlt
cGxlbWVudHNDYWxsKCkpCiAJCXJldHVybiBsaXN0ZW5lck9iamVjdDsKIAogCS8vICdsaXN0ZW5l
cicgcHJvYmFibHkgaXMgYW4gRXZlbnRMaXN0ZW5lciwKIAkvLyBvYmplY3QgY29udGFpbmluZyBh
ICdoYW5kbGVFdmVudCcgZnVuY3Rpb24uLi4KLQlLSlM6OlZhbHVlIGhhbmRsZUV2ZW50VmFsdWUg
PSBsaXN0ZW5lck9iamVjdC5nZXQoZXhlYywgS0pTOjpJZGVudGlmaWVyKCJoYW5kbGVFdmVudCIp
KTsKLQlLSlM6Ok9iamVjdCBoYW5kbGVFdmVudE9iamVjdCA9IEtKUzo6T2JqZWN0OjpkeW5hbWlj
Q2FzdChoYW5kbGVFdmVudFZhbHVlKTsKKwlLSlM6OlZhbHVlSW1wICpoYW5kbGVFdmVudFZhbHVl
ID0gbGlzdGVuZXJPYmplY3QtPmdldChleGVjLCBLSlM6OklkZW50aWZpZXIoImhhbmRsZUV2ZW50
IikpOworCWlmKCFoYW5kbGVFdmVudFZhbHVlLT5pc09iamVjdCgpKQorCQlyZXR1cm4gTlVMTDsK
KyAgICAgICAgS0pTOjpPYmplY3RJbXAgKmhhbmRsZUV2ZW50T2JqZWN0ID0gc3RhdGljX2Nhc3Q8
S0pTOjpPYmplY3RJbXAqPihoYW5kbGVFdmVudFZhbHVlKTsKIAotCWlmKCFoYW5kbGVFdmVudE9i
amVjdC5pc1ZhbGlkKCkpCi0JCXJldHVybiBLSlM6Ok9iamVjdCgpOwotCi0JaWYoaGFuZGxlRXZl
bnRPYmplY3QuaW1wbGVtZW50c0NhbGwoKSkKKwlpZihoYW5kbGVFdmVudE9iamVjdC0+aW1wbGVt
ZW50c0NhbGwoKSkKIAkJcmV0dXJuIGhhbmRsZUV2ZW50T2JqZWN0OwogCiAJa2RFcnJvcigpIDw8
IGtfZnVuY2luZm8gPDwgIiBTcGVjaWZpZWQgbGlzdGVuZXIgaXMgbmVpdGhlciBhIGZ1bmN0aW9u
IG5vciBhbiBvYmplY3QhIiA8PCBlbmRsOwotCXJldHVybiBLSlM6Ok9iamVjdCgpOworCXJldHVy
biBOVUxMOwogfQogCi1FdmVudExpc3RlbmVySW1wbCAqRWNtYTo6ZmluZEV2ZW50TGlzdGVuZXIo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6VmFsdWUgJmxpc3RlbmVyKQorRXZlbnRM
aXN0ZW5lckltcGwgKkVjbWE6OmZpbmRFdmVudExpc3RlbmVyKEtKUzo6RXhlY1N0YXRlICpleGVj
LCBLSlM6OlZhbHVlSW1wICpsaXN0ZW5lcikKIHsKIAlpZighZCkKIAkJcmV0dXJuIDA7CiAJCi0J
S0pTOjpPYmplY3QgbGlzdGVuZXJPYmplY3QgPSBlY21hTGlzdGVuZXJUb09iamVjdChleGVjLCBs
aXN0ZW5lcik7Ci0JaWYoIWxpc3RlbmVyT2JqZWN0LmlzVmFsaWQoKSkKKwlLSlM6Ok9iamVjdElt
cCAqbGlzdGVuZXJPYmplY3QgPSBlY21hTGlzdGVuZXJUb09iamVjdChleGVjLCBsaXN0ZW5lcik7
CisJaWYoIWxpc3RlbmVyT2JqZWN0KQogCQlyZXR1cm4gMDsKIAkKLQlyZXR1cm4gZC0+ZXZlbnRM
aXN0ZW5lcnNbc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4obGlzdGVuZXJPYmplY3QuaW1w
KCkpXTsKKwlyZXR1cm4gZC0+ZXZlbnRMaXN0ZW5lcnNbc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJ
bXAgKj4obGlzdGVuZXJPYmplY3QpXTsKIH0KIAotRXZlbnRMaXN0ZW5lckltcGwgKkVjbWE6OmNy
ZWF0ZUV2ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6VmFsdWUg
Jmxpc3RlbmVyKQorRXZlbnRMaXN0ZW5lckltcGwgKkVjbWE6OmNyZWF0ZUV2ZW50TGlzdGVuZXIo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWVJbXAgKmxpc3RlbmVyKQogewogCUV2ZW50
TGlzdGVuZXJJbXBsICpleGlzdGluZyA9IGZpbmRFdmVudExpc3RlbmVyKGV4ZWMsIGxpc3RlbmVy
KTsKIAlpZihleGlzdGluZykKIAkJcmV0dXJuIGV4aXN0aW5nOwogCQotCUtKUzo6T2JqZWN0IGxp
c3RlbmVyT2JqZWN0ID0gZWNtYUxpc3RlbmVyVG9PYmplY3QoZXhlYywgbGlzdGVuZXIpOwotCWlm
KCFsaXN0ZW5lck9iamVjdC5pc1ZhbGlkKCkpCisJS0pTOjpPYmplY3RJbXAgKmxpc3RlbmVyT2Jq
ZWN0ID0gZWNtYUxpc3RlbmVyVG9PYmplY3QoZXhlYywgbGlzdGVuZXIpOworCWlmKCFsaXN0ZW5l
ck9iamVjdCkKIAkJcmV0dXJuIDA7CiAKIAlFdmVudExpc3RlbmVySW1wbCAqaSA9IG5ldyBFdmVu
dExpc3RlbmVySW1wbCgpOwogCWktPmluaXRMaXN0ZW5lcihkLT5kb2N1bWVudCwgdHJ1ZSwgbGlz
dGVuZXJPYmplY3QsIGxpc3RlbmVyLCBET01TdHJpbmcoKSk7CiAKLQlhZGRFdmVudExpc3RlbmVy
KGksIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KGxpc3RlbmVyT2JqZWN0LmltcCgpKSk7
CisJYWRkRXZlbnRMaXN0ZW5lcihpLCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihsaXN0
ZW5lck9iamVjdCkpOwogCXJldHVybiBpOwogfQogCkBAIC0yNTAsMzEgKzI0OSwzMSBAQCBFdmVu
dExpc3RlbmVySW1wbCAqRWNtYTo6Y3JlYXRlRXZlbnRMaXN0CiAJCQlyZXR1cm4gY3VycmVudDsK
IAl9CiAJCi0Jc3RhdGljIEtKUzo6U3RyaW5nIGV2ZW50U3RyaW5nKCJldmVudCIpOworCXN0YXRp
YyBLSlM6OlN0cmluZ0luc3RhbmNlSW1wIGV2ZW50U3RyaW5nKCJldmVudCIpOwogCi0JS0pTOjpP
YmplY3QgY29uc3RyID0gZC0+aW50ZXJwcmV0ZXItPmJ1aWx0aW5GdW5jdGlvbigpOworCUtKUzo6
T2JqZWN0SW1wICpjb25zdHIgPSBkLT5pbnRlcnByZXRlci0+YnVpbHRpbkZ1bmN0aW9uKCk7CiAJ
S0pTOjpFeGVjU3RhdGUgKmV4ZWMgPSBkLT5pbnRlcnByZXRlci0+Z2xvYmFsRXhlYygpOwogCQog
CUtKUzo6TGlzdCBhcmdzOwogCWFyZ3MuYXBwZW5kKGV2ZW50U3RyaW5nKTsKLQlhcmdzLmFwcGVu
ZChLSlM6OlN0cmluZyhqc0NvZGUuc3RyaW5nKCkpKTsKKwlhcmdzLmFwcGVuZChLSlM6OlN0cmlu
Z0luc3RhbmNlSW1wKGpzQ29kZS5zdHJpbmcoKSkpOwogCi0JS0pTOjpPYmplY3Qgb2JqID0gY29u
c3RyLmNvbnN0cnVjdChleGVjLCBhcmdzKTsKKwlLSlM6Ok9iamVjdEltcCAqb2JqID0gY29uc3Ry
LT5jb25zdHJ1Y3QoZXhlYywgYXJncyk7CiAJaWYoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAJewog
CQlleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogCiAJCS8vIGZhaWxlZCB0byBwYXJzZSwgc28gbGV0
J3MganVzdCBtYWtlIHRoaXMgbGlzdGVuZXIgYSBuby1vcAotCQlvYmogPSBLSlM6Ok9iamVjdCgp
OworCQlvYmogPSBOVUxMOwogCX0KIAogCS8vIFNhZmV0eSBmaXJzdC4uCiAJRXZlbnRMaXN0ZW5l
ckltcGwgKmkgPSAwOwotCWlmKCFvYmouaXNOdWxsKCkgJiYgb2JqLmltcCgpKQorCWlmKG9iaikK
IAl7CiAJCWkgPSBuZXcgRXZlbnRMaXN0ZW5lckltcGwoKTsKIAkJaS0+aW5pdExpc3RlbmVyKGQt
PmRvY3VtZW50LCB0cnVlLCBvYmosIG9iaiwgaW50ZXJuYWxUeXBlKTsKLQkJYWRkRXZlbnRMaXN0
ZW5lcihpLCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihvYmouaW1wKCkpKTsKKwkJYWRk
RXZlbnRMaXN0ZW5lcihpLCBvYmopOwogCX0KIAllbHNlCiAJCWtkRXJyb3IoKSA8PCAiVW5hYmxl
IHRvIGNyZWF0ZSBldmVudCBsaXN0ZW5lciBvYmplY3QgZm9yIGV2ZW50IHR5cGUgXCIiIDw8IHR5
cGUgPDwgIlwiIiA8PCBlbmRsOwpAQCAtMzI2LDcgKzMyNSw3IEBAIEtKUzo6T2JqZWN0SW1wICpF
Y21hOjppbmhlcml0ZWRHZXRET01DU1MKIH0KIAogLy8gSGVscGVycyBpbiBuYW1lc3BhY2UgJ0tE
T00nCi1LSlM6OlZhbHVlIEtET006OmdldERPTU5vZGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIE5v
ZGUgbikKK0tKUzo6VmFsdWVJbXAgKktET006OmdldERPTU5vZGUoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIE5vZGUgbikKIHsKIAlLSlM6Ok9iamVjdEltcCAqcmV0ID0gMDsKIAlpZihuID09IE5vZGU6
Om51bGwpCkBAIC0zNTQsMTIgKzM1MywxMiBAQCBLSlM6OlZhbHVlIEtET006OmdldERPTU5vZGUo
S0pTOjpFeGVjU3RhCiAJaWYocmVxdWVzdCkKIAl7CiAJCWlmKHRvcFJlcXVlc3QgJiYgdG9wUmVx
dWVzdCAhPSByZXF1ZXN0KQotCQkJcmV0dXJuIEtKUzo6VmFsdWUodG9wUmVxdWVzdCk7CisJCQl0
b3BSZXF1ZXN0OwogCQkKLQkJcmV0dXJuIEtKUzo6VmFsdWUocmVxdWVzdCk7CisJCXJldHVybiBy
ZXF1ZXN0OwogCX0KIAllbHNlIGlmKHRvcFJlcXVlc3QpCi0JCXJldHVybiBLSlM6OlZhbHVlKHRv
cFJlcXVlc3QpOworCQlyZXR1cm4gdG9wUmVxdWVzdDsKIAkKIAlzd2l0Y2gobi5ub2RlVHlwZSgp
KQogCXsKQEAgLTQwNCwxMCArNDAzLDEwIEBAIEtKUzo6VmFsdWUgS0RPTTo6Z2V0RE9NTm9kZShL
SlM6OkV4ZWNTdGEKIAl9CiAKIAlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KG4uaGFuZGxlKCks
IHJldCk7Ci0JcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCi1LSlM6
OlZhbHVlIEtET006OmdldERPTUV2ZW50KEtKUzo6RXhlY1N0YXRlICpleGVjLCBFdmVudCBlKQor
S0pTOjpWYWx1ZUltcCAqS0RPTTo6Z2V0RE9NRXZlbnQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEV2
ZW50IGUpCiB7CiAJS0pTOjpPYmplY3RJbXAgKnJldCA9IDA7CiAJaWYoZSA9PSBFdmVudDo6bnVs
bCkKQEAgLTQxOCw3ICs0MTcsNyBAQCBLSlM6OlZhbHVlIEtET006OmdldERPTUV2ZW50KEtKUzo6
RXhlY1N0CiAJLy8gUmV1c2UgZXhpc3RpbmcgYnJpZGdlLCBpZiBwb3NzaWJsZQogCUtKUzo6T2Jq
ZWN0SW1wICpyZXF1ZXN0ID0gaW50ZXJwcmV0ZXItPmdldERPTU9iamVjdChlLmhhbmRsZSgpKTsK
IAlpZihyZXF1ZXN0KQotCQlyZXR1cm4gS0pTOjpWYWx1ZShyZXF1ZXN0KTsKKwkJcmV0dXJuIHJl
cXVlc3Q7CiAKIAkvLyBUcnkgaGFyZCB0byBhc2sgYW55IERPTS9TVkcvSFRNTC93aGF0ZXZlciBp
bXBsZW1lbnRhdGlvbgogCS8vIHdoaWNoIG1heSByZXNpZGUgb24gdG9wIG9mIEtET00sIGhvdyB0
byBjb252ZXJ0IHRoZSBjdXJyZW50CkBAIC00MzMsNyArNDMyLDcgQEAgS0pTOjpWYWx1ZSBLRE9N
OjpnZXRET01FdmVudChLSlM6OkV4ZWNTdAogCQlpZihyZXQpCiAJCXsKIAkJCWludGVycHJldGVy
LT5wdXRET01PYmplY3QoZS5oYW5kbGUoKSwgcmV0KTsKLQkJCXJldHVybiBLSlM6OlZhbHVlKHJl
dCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC00NTMsMTAgKzQ1MiwxMCBAQCBLSlM6
OlZhbHVlIEtET006OmdldERPTUV2ZW50KEtKUzo6RXhlY1N0CiAJS0pTOjpJbnRlcnByZXRlcjo6
dW5sb2NrKCk7CiAKIAlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KGUuaGFuZGxlKCksIHJldCk7
Ci0JcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCi1LSlM6OlZhbHVl
IEtET006OmdldERPTUNTU1J1bGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIENTU1J1bGUgYykKK0tK
Uzo6VmFsdWVJbXAgKktET006OmdldERPTUNTU1J1bGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIENT
U1J1bGUgYykKIHsKIAlLSlM6Ok9iamVjdEltcCAqcmV0ID0gMDsKIAlpZihjID09IENTU1J1bGU6
Om51bGwpCkBAIC00NjcsNyArNDY2LDcgQEAgS0pTOjpWYWx1ZSBLRE9NOjpnZXRET01DU1NSdWxl
KEtKUzo6RXhlYwogCS8vIFJldXNlIGV4aXN0aW5nIGJyaWRnZSwgaWYgcG9zc2libGUKIAlLSlM6
Ok9iamVjdEltcCAqcmVxdWVzdCA9IGludGVycHJldGVyLT5nZXRET01PYmplY3QoYy5oYW5kbGUo
KSk7CiAJaWYocmVxdWVzdCkKLQkJcmV0dXJuIEtKUzo6VmFsdWUocmVxdWVzdCk7CisJCXJldHVy
biByZXF1ZXN0OwogCiAJLy8gVHJ5IGhhcmQgdG8gYXNrIGFueSBET00vU1ZHL0hUTUwvd2hhdGV2
ZXIgaW1wbGVtZW50YXRpb24KIAkvLyB3aGljaCBtYXkgcmVzaWRlIG9uIHRvcCBvZiBLRE9NLCBo
b3cgdG8gY29udmVydCB0aGUgY3VycmVudApAQCAtNDgwLDcgKzQ3OSw3IEBAIEtKUzo6VmFsdWUg
S0RPTTo6Z2V0RE9NQ1NTUnVsZShLSlM6OkV4ZWMKIAkJaWYocmV0KQogCQl7CiAJCQlpbnRlcnBy
ZXRlci0+cHV0RE9NT2JqZWN0KGMuaGFuZGxlKCksIHJldCk7Ci0JCQlyZXR1cm4gS0pTOjpWYWx1
ZShyZXQpOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApAQCAtNTA0LDEwICs1MDMsMTAgQEAg
S0pTOjpWYWx1ZSBLRE9NOjpnZXRET01DU1NSdWxlKEtKUzo6RXhlYwogCQlyZXQgPSBjLmJyaWRn
ZShleGVjKTsKIAkKIAlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KGMuaGFuZGxlKCksIHJldCk7
Ci0JcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCi1LSlM6OlZhbHVl
IEtET006OmdldERPTUNTU1ZhbHVlKEtKUzo6RXhlY1N0YXRlICpleGVjLCBDU1NWYWx1ZSBjKQor
S0pTOjpWYWx1ZUltcCAqS0RPTTo6Z2V0RE9NQ1NTVmFsdWUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IENTU1ZhbHVlIGMpCiB7CiAJS0pTOjpPYmplY3RJbXAgKnJldCA9IDA7CiAJaWYoYyA9PSBDU1NW
YWx1ZTo6bnVsbCkKQEAgLTUxOCw3ICs1MTcsNyBAQCBLSlM6OlZhbHVlIEtET006OmdldERPTUNT
U1ZhbHVlKEtKUzo6RXhlCiAJLy8gUmV1c2UgZXhpc3RpbmcgYnJpZGdlLCBpZiBwb3NzaWJsZQog
CUtKUzo6T2JqZWN0SW1wICpyZXF1ZXN0ID0gaW50ZXJwcmV0ZXItPmdldERPTU9iamVjdChjLmhh
bmRsZSgpKTsKIAlpZihyZXF1ZXN0KQotCQlyZXR1cm4gS0pTOjpWYWx1ZShyZXF1ZXN0KTsKKwkJ
cmV0dXJuIHJlcXVlc3Q7CiAKIAkvLyBUcnkgaGFyZCB0byBhc2sgYW55IERPTS9TVkcvSFRNTC93
aGF0ZXZlciBpbXBsZW1lbnRhdGlvbgogCS8vIHdoaWNoIG1heSByZXNpZGUgb24gdG9wIG9mIEtE
T00sIGhvdyB0byBjb252ZXJ0IHRoZSBjdXJyZW50CkBAIC01MzEsNyArNTMwLDcgQEAgS0pTOjpW
YWx1ZSBLRE9NOjpnZXRET01DU1NWYWx1ZShLSlM6OkV4ZQogCQlpZihyZXQpCiAJCXsKIAkJCWlu
dGVycHJldGVyLT5wdXRET01PYmplY3QoYy5oYW5kbGUoKSwgcmV0KTsKLQkJCXJldHVybiBLSlM6
OlZhbHVlKHJldCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC01NDUsMTQgKzU0NCwx
NCBAQCBLSlM6OlZhbHVlIEtET006OmdldERPTUNTU1ZhbHVlKEtKUzo6RXhlCiAJCXJldCA9IGMu
YnJpZGdlKGV4ZWMpOwogCQogCWludGVycHJldGVyLT5wdXRET01PYmplY3QoYy5oYW5kbGUoKSwg
cmV0KTsKLQlyZXR1cm4gS0pTOjpWYWx1ZShyZXQpOworCXJldHVybiByZXQ7CiB9CiAKLURPTVN0
cmluZyBLRE9NOjp0b0RPTVN0cmluZyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpW
YWx1ZSAmdmFsKQorRE9NU3RyaW5nIEtET006OnRvRE9NU3RyaW5nKEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBLSlM6OlZhbHVlSW1wICp2YWwpCiB7CiAJLy8gV2UgaGF2ZSB0byBkaXN0aW5ndWlzaCBi
ZXR3ZWVuIG51bGwgYW5kIGVtcHR5IHN0cmluZ3MhCiAJLy8gVmVyeSBpbXBvcnRhbnQgdG8gZ2V0
IHRoZSBkb20gdGVzdCBzdWl0ZSBydW5uaW5nIGNvcnJlY3RseSA6KQotCVFTdHJpbmcgc3RyaW5n
ID0gdmFsLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKwlRU3RyaW5nIHN0cmluZyA9IHZhbC0+
dG9TdHJpbmcoZXhlYykucXN0cmluZygpOwogCWlmKHN0cmluZyA9PSAibnVsbCIpCiAJCXJldHVy
biBET01TdHJpbmcoKTsKIAllbHNlIGlmKHN0cmluZy5pc0VtcHR5KCkpCkBAIC01NjEsNyArNTYw
LDcgQEAgRE9NU3RyaW5nIEtET006OnRvRE9NU3RyaW5nKEtKUzo6RXhlY1N0YQogCXJldHVybiBE
T01TdHJpbmcoc3RyaW5nKTsKIH0KIAotS0pTOjpWYWx1ZSBLRE9NOjpnZXRET01TdHJpbmcoY29u
c3QgRE9NU3RyaW5nICZzdHIpCitLSlM6OlZhbHVlSW1wICpLRE9NOjpnZXRET01TdHJpbmcoY29u
c3QgRE9NU3RyaW5nICZzdHIpCiB7CiAJaWYoc3RyLmlzTnVsbCgpICYmIHN0ci5pc0VtcHR5KCkp
CiAJCXJldHVybiBLSlM6Ok51bGwoKTsKQEAgLTU2OSwyMCArNTY4LDIwIEBAIEtKUzo6VmFsdWUg
S0RPTTo6Z2V0RE9NU3RyaW5nKGNvbnN0IERPTVMKIAlyZXR1cm4gS0pTOjpTdHJpbmcoc3RyLnN0
cmluZygpKTsKIH0KIAotUVZhcmlhbnQgS0RPTTo6dG9WYXJpYW50KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBjb25zdCBLSlM6OlZhbHVlICZ2YWwpCitRVmFyaWFudCBLRE9NOjp0b1ZhcmlhbnQoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWVJbXAgKnZhbCkKIHsKIAlRVmFyaWFudCByZXM7
CiAKLQlzd2l0Y2godmFsLnR5cGUoKSkKKwlzd2l0Y2godmFsLT50eXBlKCkpCiAJewogCQljYXNl
IEtKUzo6Qm9vbGVhblR5cGU6Ci0JCQlyZXMgPSBRVmFyaWFudCh2YWwudG9Cb29sZWFuKGV4ZWMp
LCAwKTsKKwkJCXJlcyA9IFFWYXJpYW50KHZhbC0+dG9Cb29sZWFuKGV4ZWMpLCAwKTsKIAkJCWJy
ZWFrOwogCQljYXNlIEtKUzo6TnVtYmVyVHlwZToKLQkJCXJlcyA9IFFWYXJpYW50KHZhbC50b051
bWJlcihleGVjKSk7CisJCQlyZXMgPSBRVmFyaWFudCh2YWwtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJ
CWJyZWFrOwogCQljYXNlIEtKUzo6U3RyaW5nVHlwZToKLQkJCXJlcyA9IFFWYXJpYW50KHZhbC50
b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOworCQkJcmVzID0gUVZhcmlhbnQodmFsLT50b1N0cmlu
ZyhleGVjKS5xc3RyaW5nKCkpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvLyBldmVyeXRo
aW5nIGVsc2Ugd2lsbCBiZSAnaW52YWxpZCcKSW5kZXg6IGtkb20vZWNtYS9FY21hLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL0VjbWEuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9lY21hL0VjbWEuaAot
LS0ga2RvbS9lY21hL0VjbWEuaAk5IEp1bCAyMDA1IDA2OjUzOjU4IC0wMDAwCTEuMQorKysga2Rv
bS9lY21hL0VjbWEuaAk4IEF1ZyAyMDA1IDA5OjAyOjQ5IC0wMDAwCkBAIC02MiwyMCArNjIsMjAg
QEAgbmFtZXNwYWNlIEtET00KIAogCQl2b2lkIHNldHVwKENERkludGVyZmFjZSAqaW50ZXJmYWNl
KTsKIAotCQlLSlM6OkNvbXBsZXRpb24gZXZhbHVhdGUoY29uc3QgS0pTOjpVU3RyaW5nICZjb2Rl
LCBjb25zdCBLSlM6OlZhbHVlICZ0aGlzVik7CisJCUtKUzo6Q29tcGxldGlvbiBldmFsdWF0ZShj
b25zdCBLSlM6OlVTdHJpbmcgJmNvZGUsIEtKUzo6VmFsdWVJbXAgKnRoaXNWKTsKIAotCQlLSlM6
Ok9iamVjdCBnbG9iYWxPYmplY3QoKSBjb25zdDsKKwkJS0pTOjpPYmplY3RJbXAgKmdsb2JhbE9i
amVjdCgpIGNvbnN0OwogCQlLSlM6OkV4ZWNTdGF0ZSAqZ2xvYmFsRXhlYygpIGNvbnN0OwogCQkK
IAkJRWNtYUludGVyZmFjZSAqaW50ZXJmYWNlKCkgY29uc3Q7CiAJCVNjcmlwdEludGVycHJldGVy
ICppbnRlcnByZXRlcigpIGNvbnN0OwogCiAJCS8vIEludGVybmFsLCB1c2VkIHRvIGhhbmRsZSBl
dmVudCBsaXN0ZW5lcnMKLQkJS0pTOjpPYmplY3QgZWNtYUxpc3RlbmVyVG9PYmplY3QoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6VmFsdWUgJmxpc3RlbmVyKTsKKwkJS0pTOjpPYmpl
Y3RJbXAgKmVjbWFMaXN0ZW5lclRvT2JqZWN0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6OlZh
bHVlSW1wICpsaXN0ZW5lcik7CiAKIAkJRXZlbnRMaXN0ZW5lckltcGwgKmNyZWF0ZUV2ZW50TGlz
dGVuZXIoY29uc3QgRE9NU3RyaW5nICZ0eXBlLCBjb25zdCBET01TdHJpbmcgJmpzQ29kZSk7Ci0J
CUV2ZW50TGlzdGVuZXJJbXBsICpjcmVhdGVFdmVudExpc3RlbmVyKEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBjb25zdCBLSlM6OlZhbHVlICZsaXN0ZW5lcik7Ci0JCUV2ZW50TGlzdGVuZXJJbXBsICpm
aW5kRXZlbnRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAm
bGlzdGVuZXIpOworCQlFdmVudExpc3RlbmVySW1wbCAqY3JlYXRlRXZlbnRMaXN0ZW5lcihLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAqbGlzdGVuZXIpOworCQlFdmVudExpc3Rl
bmVySW1wbCAqZmluZEV2ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6VmFs
dWVJbXAgKmxpc3RlbmVyKTsKIAogCQl2b2lkIGFkZEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5l
ckltcGwgKmxpc3RlbmVyLCBLSlM6Ok9iamVjdEltcCAqaW1wKTsKIAkJdm9pZCByZW1vdmVFdmVu
dExpc3RlbmVyKEtKUzo6T2JqZWN0SW1wICppbXApOwpAQCAtMTAyLDMzICsxMDIsMzIgQEAgbmFt
ZXNwYWNlIEtET00KIAl9OwogCiAJLy8gSGVscGVycwotCUtKUzo6VmFsdWUgZ2V0RE9NTm9kZShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgTm9kZSBuKTsKLQlLSlM6OlZhbHVlIGdldERPTUV2ZW50KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBFdmVudCBlKTsKLQlLSlM6OlZhbHVlIGdldERPTUNTU1J1bGUo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIENTU1J1bGUgYyk7Ci0JS0pTOjpWYWx1ZSBnZXRET01DU1NW
YWx1ZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgQ1NTVmFsdWUgYyk7CisJS0pTOjpWYWx1ZUltcCAq
Z2V0RE9NTm9kZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgTm9kZSBuKTsKKwlLSlM6OlZhbHVlSW1w
ICpnZXRET01FdmVudChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgRXZlbnQgZSk7CisJS0pTOjpWYWx1
ZUltcCAqZ2V0RE9NQ1NTUnVsZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgQ1NTUnVsZSBjKTsKKwlL
SlM6OlZhbHVlSW1wICpnZXRET01DU1NWYWx1ZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgQ1NTVmFs
dWUgYyk7CiAKLQlLSlM6OlZhbHVlIGdldERPTVN0cmluZyhjb25zdCBET01TdHJpbmcgJnN0cik7
CisJS0pTOjpWYWx1ZUltcCAqZ2V0RE9NU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmc3RyKTsKIAot
CURPTVN0cmluZyB0b0RPTVN0cmluZyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpW
YWx1ZSAmdmFsKTsKLQlRVmFyaWFudCB0b1ZhcmlhbnQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IEtKUzo6VmFsdWUgJnZhbCk7CisJRE9NU3RyaW5nIHRvRE9NU3RyaW5nKEtKUzo6RXhlY1N0
YXRlICpleGVjLCBLSlM6OlZhbHVlSW1wICp2YWwpOworCVFWYXJpYW50IHRvVmFyaWFudChLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAqdmFsKTsKIAogCS8vIENvbnZlcnQgYmV0
d2VlbiBlY21hIHZhbHVlcyBhbmQgcmVhbCBrZG9tIG9iamVjdHMKIAkvLyBFeGFtcGxlOiBOb2Rl
IG15Tm9kZSA9IGVjbWFfY2FzdDxOb2RlPihleGVjLCBhcmdzWzBdLCAmdG9Ob2RlKTsKIAkvLyAg
ICAgICAgICBBdHRyIG15QXR0ciA9IGVjbWFfY2FzdDxBdHRyPihleGVjLCBhcmdzWzFdLCAmdG9B
dHRyKTsKIAl0ZW1wbGF0ZTxjbGFzcyBUPgotCVQgZWNtYV9jYXN0KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBjb25zdCBLSlM6OlZhbHVlICZ2YWwsIFQgKGNvbnZGdW5jUHRyKShLSlM6OkV4ZWNTdGF0
ZSAqLCBjb25zdCBLSlM6Ok9iamVjdEltcCAqKSkKKwlUIGVjbWFfY2FzdChLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAqdmFsLCBUIChjb252RnVuY1B0cikoS0pTOjpFeGVjU3Rh
dGUgKiwgY29uc3QgS0pTOjpPYmplY3RJbXAgKikpCiAJewotCQlLSlM6Ok9iamVjdCBvYmogPSBL
SlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QodmFsKTsKLQkJaWYob2JqLmlzTnVsbCgpKQorCQlpZigh
dmFsLT5pc09iamVjdCgpKQogCQkJcmV0dXJuIFQ6Om51bGw7CiAKLQkJcmV0dXJuIGNvbnZGdW5j
UHRyKGV4ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KG9iai5pbXAoKSkpOworCQly
ZXR1cm4gY29udkZ1bmNQdHIoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odmFs
KSk7CiAJfQogCiAJLy8gQ29udmVydCBiZXR3ZWVuIHJlYWwga2RvbSBvYmplY3RzIGFuZCBlY21h
IHZhbHVlcwogCS8vIEV4YW1wbGU6IHJldHVybiBzYWZlX2NhY2hlPEF0dHI+KGV4ZWMsIG15QXR0
cik7CiAJdGVtcGxhdGU8Y2xhc3MgVD4KLQlLSlM6OlZhbHVlIHNhZmVfY2FjaGUoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIFQgb2JqKQorCUtKUzo6VmFsdWVJbXAgKnNhZmVfY2FjaGUoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIFQgb2JqKQogCXsKIAkJaWYob2JqICE9IFQ6Om51bGwpCiAJCQlyZXR1cm4g
b2JqLmNhY2hlKGV4ZWMpOwpJbmRleDoga2RvbS9lY21hL0dsb2JhbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL0dsb2JhbE9iamVj
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vZWNt
YS9HbG9iYWxPYmplY3QuY3BwCi0tLSBrZG9tL2VjbWEvR2xvYmFsT2JqZWN0LmNwcAk3IEF1ZyAy
MDA1IDA2OjE3OjQ0IC0wMDAwCTEuMgorKysga2RvbS9lY21hL0dsb2JhbE9iamVjdC5jcHAJOCBB
dWcgMjAwNSAwOTowMjo0OSAtMDAwMApAQCAtOTksNyArOTksNyBAQCBHbG9iYWxPYmplY3Q6On5H
bG9iYWxPYmplY3QoKQogCiBHbG9iYWxPYmplY3QgKkdsb2JhbE9iamVjdDo6cmV0cmlldmVBY3Rp
dmUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0JS0pTOjpWYWx1ZUltcCAqaW1wID0gZXhlYy0+
aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCkuaW1wKCk7CisJS0pTOjpWYWx1ZUltcCAqaW1w
ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCk7CiAJUV9BU1NFUlQoaW1wKTsK
IAogCXJldHVybiBzdGF0aWNfY2FzdDxHbG9iYWxPYmplY3QgKj4oaW1wKTsKQEAgLTExOCw3ICsx
MTgsNyBAQCBib29sIEdsb2JhbE9iamVjdDo6aGFzUHJvcGVydHkoS0pTOjpFeGVjCiAJcmV0dXJu
IHRydWU7IC8vIFNlZSBLSlM6OldpbmRvdzo6aGFzUHJvcGVydHkKIH0KIAotS0pTOjpWYWx1ZSBH
bG9iYWxPYmplY3Q6OmdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlm
aWVyICZwKSBjb25zdAorS0pTOjpWYWx1ZUltcCAqR2xvYmFsT2JqZWN0OjpnZXQoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcCkgY29uc3QKIHsKIAlrZERlYnVn
KDI2MDA0KSA8PCAiR2xvYmFsT2JqZWN0ICgiIDw8IHRoaXMgPDwgIik6OmdldCAiIDw8IHAucXN0
cmluZygpIDw8IGVuZGw7CiAKQEAgLTEzMyw4ICsxMzMsOCBAQCBLSlM6OlZhbHVlIEdsb2JhbE9i
amVjdDo6Z2V0KEtKUzo6RXhlY1N0CiAJfQogCiAJLy8gTG9vayBmb3Igb3ZlcnJpZGVzIGZpcnN0
Ci0JS0pTOjpWYWx1ZSB2YWwgPSBLSlM6Ok9iamVjdEltcDo6Z2V0KGV4ZWMsIHApOwotCWlmKCF2
YWwuaXNBKEtKUzo6VW5kZWZpbmVkVHlwZSkpCisJS0pTOjpWYWx1ZUltcCAqdmFsID0gS0pTOjpP
YmplY3RJbXA6OmdldChleGVjLCBwKTsKKwlpZih2YWwtPnR5cGUoKSAhPSBLSlM6OlVuZGVmaW5l
ZFR5cGUpCiAJCXJldHVybiBpc1NhZmVTY3JpcHQoZXhlYykgPyB2YWwgOiBLSlM6OlVuZGVmaW5l
ZCgpOwogCiAJLy8gTm90IHRoZSByaWdodCB3YXkgaW4gdGhlIGxvbmcgcnVuLiBTaG91bGQgdXNl
IHJldHJpZXZlKG1fZG9jKS4uLgpAQCAtMTQ2LDEyICsxNDYsMTIgQEAgS0pTOjpWYWx1ZSBHbG9i
YWxPYmplY3Q6OmdldChLSlM6OkV4ZWNTdAogCQlzd2l0Y2goZW50cnktPnZhbHVlKQogCQl7CiAJ
CQljYXNlIEdsb2JhbE9iamVjdENvbnN0YW50czo6V2luZG93OgotCQkJCXJldHVybiBLSlM6OlZh
bHVlKGNvbnN0X2Nhc3Q8R2xvYmFsT2JqZWN0ICo+KHRoaXMpKTsKKwkJCQlyZXR1cm4gY29uc3Rf
Y2FzdDxHbG9iYWxPYmplY3QgKj4odGhpcyk7CiAJCQljYXNlIEdsb2JhbE9iamVjdENvbnN0YW50
czo6RXZ0OgogCQkJCXJldHVybiBnZXRET01FdmVudChleGVjLCBFdmVudChpbnRlcnByZXRlci0+
Y3VycmVudEV2ZW50KCkpKTsKIAkJCWNhc2UgR2xvYmFsT2JqZWN0Q29uc3RhbnRzOjpEb2N1bWVu
dDoKIAkJCQkvLyBzcGVjaWFsIGNhc2UsIEVjbWE6OnNldHVwIGNyZWF0ZWQgaXQsIHNvIHdlIGRv
bid0IG5lZWQgdG8gZG8gaXQKLQkJCQlyZXR1cm4gS0pTOjpWYWx1ZShpbnRlcnByZXRlci0+Z2V0
RE9NT2JqZWN0KGQtPmRvY3VtZW50KSk7CisJCQkJcmV0dXJuIGludGVycHJldGVyLT5nZXRET01P
YmplY3QoZC0+ZG9jdW1lbnQpOwogCQkJY2FzZSBHbG9iYWxPYmplY3RDb25zdGFudHM6OlNldFRp
bWVvdXQ6CiAJCQljYXNlIEdsb2JhbE9iamVjdENvbnN0YW50czo6Q2xlYXJUaW1lb3V0OgogCQkJ
Y2FzZSBHbG9iYWxPYmplY3RDb25zdGFudHM6OlNldEludGVydmFsOgpAQCAtMTk0LDcgKzE5NCw3
IEBAIEtKUzo6VmFsdWUgR2xvYmFsT2JqZWN0OjpnZXQoS0pTOjpFeGVjU3QKIAlyZXR1cm4gS0pT
OjpVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBHbG9iYWxPYmplY3Q6OnB1dChLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6
VmFsdWUgJnZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgR2xvYmFsT2JqZWN0OjpwdXQoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBLSlM6OlZh
bHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAJLy8gSWYgd2UgYXJlIGNhbGxlZCBieSBhbiBp
bnRlcm5hbCBLSlMgY2FsbCwgdGhlbiBkaXJlY3RseSBqdW1wIHRvIE9iamVjdEltcCAtPiBzYXZl
cyB0aW1lCiAJLy8gQWxzbyBhcHBsaWVzIGlmIHdlIGhhdmUgYSBsb2NhbCBvdmVycmlkZSAoZS5n
LiAidmFyIGxvY2F0aW9uIikKQEAgLTI2OCwxOCArMjY4LDE4IEBAIGNvbnN0IEtKUzo6Q2xhc3NJ
bmZvICpHbG9iYWxPYmplY3Q6OmNsYXMKIH0KIAogLy8gRWNtYVNjcmlwdCBmdW5jdGlvbiBoYW5k
bGluZwotS0pTOjpWYWx1ZSBHbG9iYWxPYmplY3RGdW5jOjpjYWxsKEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBLSlM6Ok9iamVjdCAmdGhpc09iaiwgY29uc3QgS0pTOjpMaXN0ICZhcmdzKQorS0pTOjpW
YWx1ZUltcCAqR2xvYmFsT2JqZWN0RnVuYzo6Y2FsbChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pT
OjpPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IEtKUzo6TGlzdCAmYXJncykKIHsKLQlpZighdGhp
c09iai5pbmhlcml0cygmR2xvYmFsT2JqZWN0OjpzX2NsYXNzSW5mbykpCisJaWYoIXRoaXNPYmot
PmluaGVyaXRzKCZHbG9iYWxPYmplY3Q6OnNfY2xhc3NJbmZvKSkKIAl7Ci0JCUtKUzo6T2JqZWN0
IGVyciA9IEtKUzo6RXJyb3I6OmNyZWF0ZShleGVjLCBLSlM6OlR5cGVFcnJvcik7CisJCUtKUzo6
T2JqZWN0SW1wICplcnIgPSBLSlM6OkVycm9yOjpjcmVhdGUoZXhlYywgS0pTOjpUeXBlRXJyb3Ip
OwogCQlleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJCi0JR2xv
YmFsT2JqZWN0ICpnbG9iYWwgPSBzdGF0aWNfY2FzdDxHbG9iYWxPYmplY3QgKj4odGhpc09iai5p
bXAoKSk7Ci0JS0pTOjpWYWx1ZSB2ID0gYXJnc1swXTsKLQlLSlM6OlVTdHJpbmcgcyA9IHYudG9T
dHJpbmcoZXhlYyk7CisJR2xvYmFsT2JqZWN0ICpnbG9iYWwgPSBzdGF0aWNfY2FzdDxHbG9iYWxP
YmplY3QgKj4odGhpc09iaik7CisJS0pTOjpWYWx1ZUltcCAqdiA9IGFyZ3NbMF07CisJS0pTOjpV
U3RyaW5nIHMgPSB2LT50b1N0cmluZyhleGVjKTsKIAlRU3RyaW5nIHN0ciA9IHMucXN0cmluZygp
OwogCiAJc3dpdGNoKGlkKQpAQCAtMzA1LDcgKzMwNSw3IEBAIEtKUzo6VmFsdWUgR2xvYmFsT2Jq
ZWN0RnVuYzo6Y2FsbChLSlM6OkUKIAkJCXJldHVybiBLSlM6OlVuZGVmaW5lZCgpOwogCQljYXNl
IEdsb2JhbE9iamVjdENvbnN0YW50czo6Q2xlYXJUaW1lb3V0OgogCQljYXNlIEdsb2JhbE9iamVj
dENvbnN0YW50czo6Q2xlYXJJbnRlcnZhbDoKLQkJCWdsb2JhbC0+Y2xlYXJUaW1lb3V0KHYudG9J
bnQzMihleGVjKSk7CisJCQlnbG9iYWwtPmNsZWFyVGltZW91dCh2LT50b0ludDMyKGV4ZWMpKTsK
IAkJCXJldHVybiBLSlM6OlVuZGVmaW5lZCgpOwogCQljYXNlIEdsb2JhbE9iamVjdENvbnN0YW50
czo6UHJpbnROb2RlOgogCQl7CkBAIC0zMzYsMTYgKzMzNiwxNiBAQCBLSlM6OlZhbHVlIEdsb2Jh
bE9iamVjdEZ1bmM6OmNhbGwoS0pTOjpFCiAJCX0KIAkJY2FzZSBHbG9iYWxPYmplY3RDb25zdGFu
dHM6OlNldEludGVydmFsOgogCQl7Ci0JCQlpZihhcmdzLnNpemUoKSA+PSAyICYmIHYuaXNBKEtK
Uzo6U3RyaW5nVHlwZSkpCisJCQlpZihhcmdzLnNpemUoKSA+PSAyICYmIHYtPmlzU3RyaW5nKCkp
CiAJCQl7Ci0JCQkJaW50IGkgPSBhcmdzWzFdLnRvSW50MzIoZXhlYyk7Ci0JCQkJaW50IHIgPSBn
bG9iYWwtPmluc3RhbGxUaW1lb3V0KHMsIGFyZ3NbaV0udG9JbnQzMihleGVjKSwgZmFsc2UpOwor
CQkJCWludCBpID0gYXJnc1sxXS0+dG9JbnQzMihleGVjKTsKKwkJCQlpbnQgciA9IGdsb2JhbC0+
aW5zdGFsbFRpbWVvdXQocywgYXJnc1tpXS0+dG9JbnQzMihleGVjKSwgZmFsc2UpOwogCQkJCXJl
dHVybiBLSlM6Ok51bWJlcihyKTsKIAkJCX0KLQkJCWVsc2UgaWYoYXJncy5zaXplKCkgPj0gMiAm
JiAhS0pTOjpPYmplY3Q6OmR5bmFtaWNDYXN0KHYpLmlzTnVsbCgpICYmIEtKUzo6T2JqZWN0Ojpk
eW5hbWljQ2FzdCh2KS5pbXBsZW1lbnRzQ2FsbCgpKQorCQkJZWxzZSBpZihhcmdzLnNpemUoKSA+
PSAyICYmIHYtPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odikt
PmltcGxlbWVudHNDYWxsKCkpCiAJCQl7Ci0JCQkJS0pTOjpWYWx1ZSBmdW5jID0gYXJnc1swXTsK
LQkJCQlpbnQgaSA9IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKwkJCQlLSlM6OlZhbHVlSW1wICpm
dW5jID0gYXJnc1swXTsKKwkJCQlpbnQgaSA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyk7CiAJCQkJ
aW50IHIgPSBnbG9iYWwtPmluc3RhbGxUaW1lb3V0KHMsIGksIGZhbHNlKTsKIAkJCQlyZXR1cm4g
S0pTOjpOdW1iZXIocik7CiAJCQl9CkBAIC0zNTQsMTYgKzM1NCwxNiBAQCBLSlM6OlZhbHVlIEds
b2JhbE9iamVjdEZ1bmM6OmNhbGwoS0pTOjpFCiAJCX0KIAkJY2FzZSBHbG9iYWxPYmplY3RDb25z
dGFudHM6OlNldFRpbWVvdXQ6CiAJCXsKLQkJCWlmKGFyZ3Muc2l6ZSgpID09IDIgJiYgdi5pc0Eo
S0pTOjpTdHJpbmdUeXBlKSkKKwkJCWlmKGFyZ3Muc2l6ZSgpID09IDIgJiYgdi0+aXNTdHJpbmco
KSkKIAkJCXsKLQkJCQlpbnQgaSA9IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKwkJCQlpbnQgaSA9
IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyk7CiAJCQkJaW50IHIgPSBnbG9iYWwtPmluc3RhbGxUaW1l
b3V0KHMsIGksIHRydWUgLypzaW5nbGUgc2hvdCovKTsKIAkJCQlyZXR1cm4gS0pTOjpOdW1iZXIo
cik7CiAJCQl9Ci0JCQllbHNlIGlmKGFyZ3Muc2l6ZSgpID49IDIgJiYgdi5pc0EoS0pTOjpPYmpl
Y3RUeXBlKSAmJiBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QodikuaW1wbGVtZW50c0NhbGwoKSkK
KwkJCWVsc2UgaWYoYXJncy5zaXplKCkgPj0gMiAmJiB2LT5pc09iamVjdCgpICYmIHN0YXRpY19j
YXN0PEtKUzo6T2JqZWN0SW1wICo+KHYpLT5pbXBsZW1lbnRzQ2FsbCgpKQogCQkJewotCQkJCUtK
Uzo6VmFsdWUgZnVuYyA9IGFyZ3NbMF07Ci0JCQkJaW50IGkgPSBhcmdzWzFdLnRvSW50MzIoZXhl
Yyk7CisJCQkJS0pTOjpWYWx1ZUltcCAqZnVuYyA9IGFyZ3NbMF07CisJCQkJaW50IGkgPSBhcmdz
WzFdLT50b0ludDMyKGV4ZWMpOwogCQkJCWludCByID0gZ2xvYmFsLT5pbnN0YWxsVGltZW91dChz
LCBpLCBmYWxzZSk7CiAJCQkJcmV0dXJuIEtKUzo6TnVtYmVyKHIpOwogCQkJfQpAQCAtMzkyLDcg
KzM5Miw3IEBAIHZvaWQgR2xvYmFsT2JqZWN0OjpjbGVhclRpbWVvdXQoaW50IHRpbWUKIH0KIAog
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTY2hlZHVsZWRBY3Rpb24gLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCi1TY2hlZHVsZWRBY3Rpb246OlNjaGVkdWxlZEFjdGlvbihLSlM6Ok9iamVjdCBmdW5j
LCBLSlM6Okxpc3QgYXJncywgYm9vbCBzaW5nbGVTaG90KQorU2NoZWR1bGVkQWN0aW9uOjpTY2hl
ZHVsZWRBY3Rpb24oS0pTOjpPYmplY3RJbXAgKmZ1bmMsIEtKUzo6TGlzdCBhcmdzLCBib29sIHNp
bmdsZVNob3QpCiB7CiAJbV9mdW5jID0gZnVuYzsKIAltX2FyZ3MgPSBhcmdzOwpAQCAtNDI0LDEw
ICs0MjQsMTAgQEAgdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoR2xvYmFsT2JqZQogCQlp
ZihtX2Z1bmMuaW1wbGVtZW50c0NhbGwoKSkKIAkJewogCQkJS0pTOjpFeGVjU3RhdGUgKmV4ZWMg
PSBpbnRlcnByZXRlci0+Z2xvYmFsRXhlYygpOwotCQkJUV9BU1NFUlQoZ2xvYmFsID09IGludGVy
cHJldGVyLT5nbG9iYWxPYmplY3QoKS5pbXAoKSk7CisJCQlRX0FTU0VSVChnbG9iYWwgPT0gaW50
ZXJwcmV0ZXItPmdsb2JhbE9iamVjdCgpKTsKIAkJCQotCQkJS0pTOjpPYmplY3Qgb2JqKGdsb2Jh
bCk7Ci0JCQltX2Z1bmMuY2FsbChleGVjLCBvYmosIG1fYXJncyk7IC8vIG5vdGUgdGhhdCBjYWxs
KCkgY3JlYXRlcyBpdHMgb3duIGV4ZWN1dGlvbiBzdGF0ZSBmb3IgdGhlIGZ1bmMgY2FsbAorCQkJ
S0pTOjpPYmplY3RJbXAgKm9iaihnbG9iYWwpOworCQkJbV9mdW5jLT5jYWxsKGV4ZWMsIG9iaiwg
bV9hcmdzKTsgLy8gbm90ZSB0aGF0IGNhbGwoKSBjcmVhdGVzIGl0cyBvd24gZXhlY3V0aW9uIHN0
YXRlIGZvciB0aGUgZnVuYyBjYWxsCiAJCX0KIAl9CiAJZWxzZQpAQCAtNDY3LDkgKzQ2Nyw5IEBA
IGludCBHbG9iYWxRT2JqZWN0OjppbnN0YWxsVGltZW91dChjb25zdCAKIAlyZXR1cm4gaWQ7CiB9
CiAKLWludCBHbG9iYWxRT2JqZWN0OjppbnN0YWxsVGltZW91dChjb25zdCBLSlM6OlZhbHVlICZm
dW5jLCBLSlM6Okxpc3QgYXJncywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKK2ludCBHbG9iYWxR
T2JqZWN0OjppbnN0YWxsVGltZW91dChLSlM6OlZhbHVlSW1wICpmdW5jLCBLSlM6Okxpc3QgYXJn
cywgaW50IHQsIGJvb2wgc2luZ2xlU2hvdCkKIHsKLQlLSlM6Ok9iamVjdCBvYmpGdW5jID0gS0pT
OjpPYmplY3Q6OmR5bmFtaWNDYXN0KGZ1bmMpOworCUtKUzo6T2JqZWN0SW1wICpvYmpGdW5jID0g
c3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4oZnVuYyk7CiAJaWYodCA8IDEwKSB0ID0gMTA7
CiAJaW50IGlkID0gc3RhcnRUaW1lcih0KTsKIAlzY2hlZHVsZWRBY3Rpb25zLmluc2VydChpZCwg
bmV3IFNjaGVkdWxlZEFjdGlvbihvYmpGdW5jLCBhcmdzLCBzaW5nbGVTaG90KSk7CkluZGV4OiBr
ZG9tL2VjbWEvR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9lY21hL0dsb2JhbE9iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2VjbWEvR2xvYmFsT2JqZWN0LmgKLS0tIGtkb20vZWNt
YS9HbG9iYWxPYmplY3QuaAk5IEp1bCAyMDA1IDA2OjUzOjU5IC0wMDAwCTEuMQorKysga2RvbS9l
Y21hL0dsb2JhbE9iamVjdC5oCTggQXVnIDIwMDUgMDk6MDI6NDkgLTAwMDAKQEAgLTM2LDggKzM2
LDggQEAgbmFtZXNwYWNlIEtET00KIAkJR2xvYmFsT2JqZWN0KERvY3VtZW50SW1wbCAqZG9jKTsK
IAkJdmlydHVhbCB+R2xvYmFsT2JqZWN0KCk7CiAKLQkJdmlydHVhbCBLSlM6OlZhbHVlIGdldChL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUp
IGNvbnN0OwotCQl2aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBL
SlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGlu
dCBhdHRyID0gS0pTOjpOb25lKTsKKwkJdmlydHVhbCBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25z
dDsKKwkJdmlydHVhbCB2b2lkIHB1dChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0ciA9
IEtKUzo6Tm9uZSk7CiAJCXZpcnR1YWwgYm9vbCBoYXNQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwKSBjb25zdDsKIAogCQkvLyBSZXR1cm5zIGEg
cG9pbnRlciB0byB0aGUgR2xvYmFsIE9iamVjdCBpbiB0aGlzIEVjbWFTY3JpcHQgQ29udGV4dApA
QCAtNzEsNyArNzEsNyBAQCBuYW1lc3BhY2UgS0RPTQogCWNsYXNzIFNjaGVkdWxlZEFjdGlvbgog
CXsKIAlwdWJsaWM6Ci0JCVNjaGVkdWxlZEFjdGlvbihLSlM6Ok9iamVjdCBmdW5jLCBLSlM6Okxp
c3QgYXJncywgYm9vbCBzaW5nbGVTaG90KTsKKwkJU2NoZWR1bGVkQWN0aW9uKEtKUzo6T2JqZWN0
SW1wICpmdW5jLCBLSlM6Okxpc3QgYXJncywgYm9vbCBzaW5nbGVTaG90KTsKIAkJU2NoZWR1bGVk
QWN0aW9uKGNvbnN0IFFTdHJpbmcgJmNvZGUsIGJvb2wgc2luZ2xlU2hvdCk7CiAJCX5TY2hlZHVs
ZWRBY3Rpb24oKTsKIAkKQEAgLTgwLDcgKzgwLDcgQEAgbmFtZXNwYWNlIEtET00KIAlwcml2YXRl
OgogCQlmcmllbmQgY2xhc3MgR2xvYmFsUU9iamVjdDsKIAotCQlLSlM6Ok9iamVjdCBtX2Z1bmM7
CisJCUtKUzo6T2JqZWN0SW1wICptX2Z1bmM7CiAJCUtKUzo6TGlzdCBtX2FyZ3M7CiAJCVFTdHJp
bmcgbV9jb2RlOwogCQlib29sIG1faXNGdW5jdGlvbjsKQEAgLTk1LDcgKzk1LDcgQEAgbmFtZXNw
YWNlIEtET00KIAkJfkdsb2JhbFFPYmplY3QoKTsKIAogCQlpbnQgaW5zdGFsbFRpbWVvdXQoY29u
c3QgS0pTOjpVU3RyaW5nICZoYW5kbGVyLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKLQkJaW50
IGluc3RhbGxUaW1lb3V0KGNvbnN0IEtKUzo6VmFsdWUgJmZ1bmMsIEtKUzo6TGlzdCBhcmdzLCBp
bnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKKwkJaW50IGluc3RhbGxUaW1lb3V0KEtKUzo6VmFsdWVJ
bXAgKmZ1bmMsIEtKUzo6TGlzdCBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KTsKIAkJdm9p
ZCBjbGVhclRpbWVvdXQoaW50IHRpbWVySWQsIGJvb2wgZGVsQWN0aW9uID0gdHJ1ZSk7CiAJCQog
CXB1YmxpYyBzbG90czoKSW5kZXg6IGtkb20vZWNtYS9TY3JpcHRJbnRlcnByZXRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL1NjcmlwdElu
dGVycHJldGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a2RvbS9lY21hL1NjcmlwdEludGVycHJldGVyLmNwcAotLS0ga2RvbS9lY21hL1NjcmlwdEludGVy
cHJldGVyLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjU5IC0wMDAwCTEuMQorKysga2RvbS9lY21hL1Nj
cmlwdEludGVycHJldGVyLmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjQ5IC0wMDAwCkBAIC00Niw3ICs0
Niw3IEBAIHB1YmxpYzoKIAlRUHRyRGljdDxLSlM6Ok9iamVjdEltcD4gZG9tT2JqZWN0czsKIH07
CiAKLVNjcmlwdEludGVycHJldGVyOjpTY3JpcHRJbnRlcnByZXRlcihjb25zdCBLSlM6Ok9iamVj
dCAmZ2xvYmFsLCBEb2N1bWVudEltcGwgKmRvYykgOiBLSlM6OkludGVycHJldGVyKGdsb2JhbCks
IGQobmV3IFByaXZhdGUoZG9jKSkKK1NjcmlwdEludGVycHJldGVyOjpTY3JpcHRJbnRlcnByZXRl
cihLSlM6Ok9iamVjdEltcCAqZ2xvYmFsLCBEb2N1bWVudEltcGwgKmRvYykgOiBLSlM6OkludGVy
cHJldGVyKGdsb2JhbCksIGQobmV3IFByaXZhdGUoZG9jKSkKIHsKIAlpZighc19pbnRlcnByZXRl
ckxpc3QpCiAJCXNfaW50ZXJwcmV0ZXJMaXN0ID0gbmV3IEludGVycHJldGVyTGlzdCgpOwpJbmRl
eDoga2RvbS9lY21hL1NjcmlwdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL1NjcmlwdEludGVycHJldGVyLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZWNtYS9TY3JpcHRJbnRlcnBy
ZXRlci5oCi0tLSBrZG9tL2VjbWEvU2NyaXB0SW50ZXJwcmV0ZXIuaAk5IEp1bCAyMDA1IDA2OjUz
OjU5IC0wMDAwCTEuMQorKysga2RvbS9lY21hL1NjcmlwdEludGVycHJldGVyLmgJOCBBdWcgMjAw
NSAwOTowMjo0OSAtMDAwMApAQCAtMjcsOCArMjcsOCBAQAogCiBuYW1lc3BhY2UgS0pTCiB7Ci0J
Y2xhc3MgVmFsdWU7Ci0JY2xhc3MgT2JqZWN0OworCWNsYXNzIFZhbHVlSW1wOworCWNsYXNzIE9i
amVjdEltcDsKIAljbGFzcyBJbnRlcnByZXRlcjsKIH07CiAKQEAgLTQwLDcgKzQwLDcgQEAgbmFt
ZXNwYWNlIEtET00KIAljbGFzcyBTY3JpcHRJbnRlcnByZXRlciA6IHB1YmxpYyBLSlM6OkludGVy
cHJldGVyCiAJewogCXB1YmxpYzoKLQkJU2NyaXB0SW50ZXJwcmV0ZXIoY29uc3QgS0pTOjpPYmpl
Y3QgJmdsb2JhbCwgRG9jdW1lbnRJbXBsICpkb2MpOworCQlTY3JpcHRJbnRlcnByZXRlcihLSlM6
Ok9iamVjdEltcCAqZ2xvYmFsLCBEb2N1bWVudEltcGwgKmRvYyk7CiAJCXZpcnR1YWwgflNjcmlw
dEludGVycHJldGVyKCk7CiAKIAkJRG9jdW1lbnRJbXBsICpkb2N1bWVudCgpIGNvbnN0OwpAQCAt
NjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgS0RPTQogCiAJLy8gTG9va3VwIG9yIGNyZWF0ZSBKUyBv
YmplY3QgYXJvdW5kIGFuIGV4aXN0aW5nICJET00gT2JqZWN0IgogCXRlbXBsYXRlPGNsYXNzIERP
TU9iaj4KLQlpbmxpbmUgS0pTOjpWYWx1ZSBjYWNoZURPTU9iamVjdChLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgdHlwZW5hbWUgRE9NT2JqOjpQcml2YXRlICpkb21PYmopCisJaW5saW5lIEtKUzo6VmFs
dWVJbXAgKmNhY2hlRE9NT2JqZWN0KEtKUzo6RXhlY1N0YXRlICpleGVjLCB0eXBlbmFtZSBET01P
Ymo6OlByaXZhdGUgKmRvbU9iaikKIAl7CiAJCUtKUzo6T2JqZWN0SW1wICpyZXQgPSAwOwogCQlp
ZighZG9tT2JqKQpAQCAtNzQsMTIgKzc0LDEyIEBAIG5hbWVzcGFjZSBLRE9NCiAKIAkJU2NyaXB0
SW50ZXJwcmV0ZXIgKmludGVycHJldGVyID0gc3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJwcmV0ZXIg
Kj4oZXhlYy0+aW50ZXJwcmV0ZXIoKSk7CiAJCWlmKChyZXQgPSBpbnRlcnByZXRlci0+Z2V0RE9N
T2JqZWN0KGRvbU9iaikpKQotCQkJcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwkJCXJldHVybiBy
ZXQ7CiAJCWVsc2UKIAkJewogCQkJcmV0ID0gRE9NT2JqKGRvbU9iaikuYnJpZGdlKGV4ZWMpOwog
CQkJaW50ZXJwcmV0ZXItPnB1dERPTU9iamVjdChkb21PYmosIHJldCk7Ci0JCQlyZXR1cm4gS0pT
OjpWYWx1ZShyZXQpOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApAQCAtODcsMTYgKzg3LDE2
IEBAIG5hbWVzcGFjZSBLRE9NCiAJLy8gKFZlcnkgbXVjaCBsaWtlIEtKUzo6Y2FjaGVHbG9iYWxP
YmplY3QsIHdoaWNoIGlzIGZvciBhIHNpbmdsZXRvbiBPYmplY3RJbXApCiAJLy8gVGhpcyBvbmUg
aXMgX29ubHlfIHVzZWQgZm9yIENvbnN0cnVjdG9yIG9iamVjdHMuCiAJdGVtcGxhdGUgPGNsYXNz
IENsYXNzQ3Rvcj4KLQlpbmxpbmUgS0pTOjpPYmplY3QgY2FjaGVHbG9iYWxCcmlkZ2UoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKQorCWlu
bGluZSBLSlM6Ok9iamVjdEltcCAqY2FjaGVHbG9iYWxCcmlkZ2UoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKQogCXsKLQkJS0pTOjpWYWx1
ZUltcCAqb2JqID0gc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAqPihleGVjLT5pbnRlcnByZXRl
cigpLT5nbG9iYWxPYmplY3QoKS5pbXAoKSktPmdldERpcmVjdChwcm9wZXJ0eU5hbWUpOworCQlL
SlM6OlZhbHVlSW1wICpvYmogPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCo+KGV4ZWMtPmlu
dGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpKS0+Z2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7CiAJ
CWlmKG9iaikKLQkJCXJldHVybiBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QoS0pTOjpWYWx1ZShv
YmopKTsKKwkJCXJldHVybiBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCo+KG9iaik7CiAJCWVs
c2UKIAkJewogCQkJQ2xhc3NDdG9yICpjdG9yID0gbmV3IENsYXNzQ3RvcihleGVjKTsgLy8gY3Jl
YXRlIHRoZSBDbGFzc0N0b3IgaW5zdGFuY2UKLQkJCUtKUzo6T2JqZWN0IG5ld09iamVjdChuZXcg
RE9NQnJpZGdlQ3RvcjxDbGFzc0N0b3I+KGV4ZWMsIGN0b3IpKTsgLy8gY3JlYXRlIHRoZSBicmlk
Z2UgYXJvdW5kIGl0Ci0JCQlleGVjLT5pbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKS5wdXQo
ZXhlYywgcHJvcGVydHlOYW1lLCBuZXdPYmplY3QsIEtKUzo6SW50ZXJuYWwpOworCQkJS0pTOjpP
YmplY3RJbXAgKm5ld09iamVjdChuZXcgRE9NQnJpZGdlQ3RvcjxDbGFzc0N0b3I+KGV4ZWMsIGN0
b3IpKTsgLy8gY3JlYXRlIHRoZSBicmlkZ2UgYXJvdW5kIGl0CisJCQlleGVjLT5pbnRlcnByZXRl
cigpLT5nbG9iYWxPYmplY3QoKS0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgbmV3T2JqZWN0LCBL
SlM6OkludGVybmFsKTsKIAkJCXJldHVybiBuZXdPYmplY3Q7CiAJCX0KIAl9CkluZGV4OiBrZG9t
L2V2ZW50cy9Eb2N1bWVudEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9Eb2N1bWVudEV2ZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvRG9jdW1lbnRFdmVudC5jcHAK
LS0tIGtkb20vZXZlbnRzL0RvY3VtZW50RXZlbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MDAgLTAw
MDAJMS4xCisrKyBrZG9tL2V2ZW50cy9Eb2N1bWVudEV2ZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAy
OjQ5IC0wMDAwCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01f
SU1QTEVNRU5UX1BST1RPVFlQRSgiRG9jdW1lbnRFdmVudCIsIERvY3VtZW50RXZlbnRQcm90bywg
RG9jdW1lbnRFdmVudFByb3RvRnVuYykKIAotVmFsdWUgRG9jdW1lbnRFdmVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpEb2N1
bWVudEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02Miw5ICs2Miw5IEBAIFZhbHVlIERvY3Vt
ZW50RXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9Owog
Ci1WYWx1ZSBEb2N1bWVudEV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRvY3VtZW50RXZlbnRQ
cm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCiB7Ci0JRG9jdW1lbnRFdmVudCBvYmooY2FzdChleGVjLCBzdGF0aWNfY2Fz
dDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOworCURvY3VtZW50RXZlbnQgb2Jq
KGNhc3QoZXhlYywgdGhpc09iaikpOwogCVFfQVNTRVJUKG9iai5kICE9IDApOwogCiAJS0RPTV9F
TlRFUl9TQUZFCkluZGV4OiBrZG9tL2V2ZW50cy9Eb2N1bWVudEV2ZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvRG9jdW1lbnRFdmVudC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9E
b2N1bWVudEV2ZW50LmgKLS0tIGtkb20vZXZlbnRzL0RvY3VtZW50RXZlbnQuaAk5IEp1bCAyMDA1
IDA2OjU0OjAwIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvRG9jdW1lbnRFdmVudC5oCTggQXVn
IDIwMDUgMDk6MDI6NDkgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEtET00KIAlw
dWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vZXZlbnRz
L0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9t
L2V2ZW50cy9FdmVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vZXZlbnRzL0V2ZW50LmNwcAotLS0ga2RvbS9ldmVudHMvRXZlbnQuY3BwCTkgSnVs
IDIwMDUgMDY6NTQ6MDAgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9FdmVudC5jcHAJOCBBdWcg
MjAwNSAwOTowMjo1MCAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pT
OwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkV2ZW50IiwgRXZlbnRQcm90bywgRXZlbnRQ
cm90b0Z1bmMpCiAKLVZhbHVlIEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBA
IC04NSw3ICs4NSw3IEBAIFZhbHVlIEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAK
IAkJCQkJcmV0dXJuIG9iai5jYWNoZShleGVjKTsKIAkJCX0KIAkJCQotCQkJcmV0dXJuIFZhbHVl
KCk7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQljYXNlIEV2ZW50Q29uc3RhbnRzOjpFdmVudFBo
YXNlOgogCQkJcmV0dXJuIE51bWJlcihldmVudFBoYXNlKCkpOwpAQCAtMTAzLDcgKzEwMyw3IEBA
IFZhbHVlIEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAKIAlyZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLVZhbHVlIEV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkV2ZW50UHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhFdmVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAg
LTEyMyw4ICsxMjMsOCBAQCBWYWx1ZSBFdmVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4
CiAJCWNhc2UgRXZlbnRDb25zdGFudHM6OkluaXRFdmVudDoKIAkJewogCQkJRE9NU3RyaW5nIGV2
ZW50VHlwZUFyZyA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMF0pOwotCQkJYm9vbCBjYW5CdWJi
bGVBcmcgPSBhcmdzWzFdLnRvQm9vbGVhbihleGVjKTsKLQkJCWJvb2wgY2FuY2VsYWJsZUFyZyA9
IGFyZ3NbMl0udG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBjYW5CdWJibGVBcmcgPSBhcmdzWzFd
LT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGNhbmNlbGFibGVBcmcgPSBhcmdzWzJdLT50b0Jv
b2xlYW4oZXhlYyk7CiAJCQlvYmouaW5pdEV2ZW50KGV2ZW50VHlwZUFyZywgY2FuQnViYmxlQXJn
LCBjYW5jZWxhYmxlQXJnKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpJbmRleDoga2Rv
bS9ldmVudHMvRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rZG9tL2V2ZW50cy9FdmVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrZG9tL2V2ZW50cy9FdmVudC5oCi0tLSBrZG9tL2V2ZW50cy9FdmVudC5oCTkgSnVs
IDIwMDUgMDY6NTQ6MDAgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9FdmVudC5oCTggQXVnIDIw
MDUgMDk6MDI6NTAgLTAwMDAKQEAgLTc1LDcgKzc1LDcgQEAgbmFtZXNwYWNlIEtET00KIAkJS0RP
TV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChFdmVudCkKSW5kZXg6IGtkb20vZXZlbnRz
L0V2ZW50RXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rZG9tL2V2ZW50cy9FdmVudEV4Y2VwdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL0V2ZW50RXhjZXB0aW9uLmNwcAotLS0g
a2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MDAgLTAwMDAJ
MS4xCisrKyBrZG9tL2V2ZW50cy9FdmVudEV4Y2VwdGlvbi5jcHAJOCBBdWcgMjAwNSAwOTowMjo1
MCAtMDAwMApAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8K
IAotVmFsdWUgRXZlbnRFeGNlcHRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpFdmVudEV4Y2VwdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7Cklu
ZGV4OiBrZG9tL2V2ZW50cy9FdmVudEV4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vZXZlbnRzL0V2ZW50RXhjZXB0aW9uLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL0V2ZW50RXhjZXB0
aW9uLmgKLS0tIGtkb20vZXZlbnRzL0V2ZW50RXhjZXB0aW9uLmgJOSBKdWwgMjAwNSAwNjo1NDow
MCAtMDAwMAkxLjEKKysrIGtkb20vZXZlbnRzL0V2ZW50RXhjZXB0aW9uLmgJOCBBdWcgMjAwNSAw
OTowMjo1MCAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzog
Ly8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2V2ZW50cy9FdmVudFRhcmdldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvRXZl
bnRUYXJnZXQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
ZG9tL2V2ZW50cy9FdmVudFRhcmdldC5jcHAKLS0tIGtkb20vZXZlbnRzL0V2ZW50VGFyZ2V0LmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjAwIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvRXZlbnRUYXJn
ZXQuY3BwCTggQXVnIDIwMDUgMDk6MDI6NTAgLTAwMDAKQEAgLTU2LDcgKzU2LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJFdmVudFRhcmdldCIs
IEV2ZW50VGFyZ2V0UHJvdG8sIEV2ZW50VGFyZ2V0UHJvdG9GdW5jKQogCi1WYWx1ZSBFdmVudFRh
cmdldDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpFdmVudFRhcmdldDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzAsNyArNzAsNyBA
QCBWYWx1ZSBFdmVudFRhcmdldDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjCiAJcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1WYWx1ZSBFdmVudFRhcmdldFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpFdmVu
dFRhcmdldFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoRXZlbnRUYXJnZXQpCiAJ
S0RPTV9FTlRFUl9TQUZFCkBAIC0xMTEsNyArMTExLDcgQEAgVmFsdWUgRXZlbnRUYXJnZXRQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YQogCQkJCX0KIAkJCX0KIAotCQkJYm9vbCB1c2VDYXB0dXJlID0g
YXJnc1syXS50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLT50
b0Jvb2xlYW4oZXhlYyk7CiAKIAkJCS8vIGNyZWF0ZUV2ZW50TGlzdGVuZXIgYXV0b21hdGljYWxs
eSByZXVzZXMgZXhpc3RpbmcgbGlzdGVuZXJzLCBpZiBwb3NzaWJsZS4uLgogCQkJaWYoaWQgPT0g
RXZlbnRUYXJnZXRDb25zdGFudHM6OkFkZEV2ZW50TGlzdGVuZXIpCkluZGV4OiBrZG9tL2V2ZW50
cy9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tkb20vZXZlbnRzL0V2ZW50VGFyZ2V0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZm
IC1wIC11IC1yMS4yIGtkb20vZXZlbnRzL0V2ZW50VGFyZ2V0LmgKLS0tIGtkb20vZXZlbnRzL0V2
ZW50VGFyZ2V0LmgJNyBBdWcgMjAwNSAwNjoxNzo0NCAtMDAwMAkxLjIKKysrIGtkb20vZXZlbnRz
L0V2ZW50VGFyZ2V0LmgJOCBBdWcgMjAwNSAwOTowMjo1MCAtMDAwMApAQCAtNjMsNyArNjMsNyBA
QCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9GT1JXQVJEUFVU
CiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9CiAKSW5kZXg6IGtkb20v
ZXZlbnRzL0tleWJvYXJkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tkb20vZXZlbnRzL0tleWJvYXJkRXZlbnQuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9LZXlib2FyZEV2ZW50LmNwcAot
LS0ga2RvbS9ldmVudHMvS2V5Ym9hcmRFdmVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDowMCAtMDAw
MAkxLjEKKysrIGtkb20vZXZlbnRzL0tleWJvYXJkRXZlbnQuY3BwCTggQXVnIDIwMDUgMDk6MDI6
NTAgLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9J
TVBMRU1FTlRfUFJPVE9UWVBFKCJLZXlib2FyZEV2ZW50IiwgS2V5Ym9hcmRFdmVudFByb3RvLCBL
ZXlib2FyZEV2ZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBLZXlib2FyZEV2ZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKktleWJv
YXJkRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcyLDcgKzcyLDcgQEAgVmFsdWUgS2V5Ym9h
cmRFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
VmFsdWUgS2V5Ym9hcmRFdmVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpLZXlib2FyZEV2ZW50UHJv
dG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhLZXlib2FyZEV2ZW50KQogCUtET01fRU5U
RVJfU0FGRQpAQCAtODcsMTUgKzg3LDE1IEBAIFZhbHVlIEtleWJvYXJkRXZlbnRQcm90b0Z1bmM6
OmNhbGwoRXhlY1MKIAkJY2FzZSBLZXlib2FyZEV2ZW50Q29uc3RhbnRzOjpJbml0S2V5Ym9hcmRF
dmVudDoKIAkJewogCQkJRE9NU3RyaW5nIHR5cGVBcmcgPSB0b0RPTVN0cmluZyhleGVjLCBhcmdz
WzBdKTsKLQkJCWJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7Ci0J
CQlib29sIGNhbmNlbGFibGVBcmcgPSBhcmdzWzJdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wg
Y2FuQnViYmxlQXJnID0gYXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBjYW5jZWxh
YmxlQXJnID0gYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpOwogCQkJQWJzdHJhY3RWaWV3IHZpZXdB
cmcgPSBlY21hX2Nhc3Q8QWJzdHJhY3RWaWV3PihleGVjLCBhcmdzWzNdLCAmdG9BYnN0cmFjdFZp
ZXcpOwogCQkJRE9NU3RyaW5nIGtleUlkZW50aWZpZXJBcmcgPSB0b0RPTVN0cmluZyhleGVjLCBh
cmdzWzRdKTsKLQkJCWxvbmcga2V5TG9jYXRpb25BcmcgPSBhcmdzWzVdLnRvSW50MzIoZXhlYyk7
Ci0JCQlib29sIGN0cmxLZXlBcmcgPSBhcmdzWzZdLnRvQm9vbGVhbihleGVjKTsKLQkJCWJvb2wg
YWx0S2V5QXJnID0gYXJnc1s3XS50b0Jvb2xlYW4oZXhlYyk7Ci0JCQlib29sIHNoaWZ0S2V5QXJn
ID0gYXJnc1s4XS50b0Jvb2xlYW4oZXhlYyk7Ci0JCQlib29sIG1ldGFLZXlBcmcgPSBhcmdzWzld
LnRvQm9vbGVhbihleGVjKTsKKwkJCWxvbmcga2V5TG9jYXRpb25BcmcgPSBhcmdzWzVdLT50b0lu
dDMyKGV4ZWMpOworCQkJYm9vbCBjdHJsS2V5QXJnID0gYXJnc1s2XS0+dG9Cb29sZWFuKGV4ZWMp
OworCQkJYm9vbCBhbHRLZXlBcmcgPSBhcmdzWzddLT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29s
IHNoaWZ0S2V5QXJnID0gYXJnc1s4XS0+dG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBtZXRhS2V5
QXJnID0gYXJnc1s5XS0+dG9Cb29sZWFuKGV4ZWMpOwogCiAJCQlvYmouaW5pdEtleWJvYXJkRXZl
bnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBrZXlJZGVu
dGlmaWVyQXJnLCBrZXlMb2NhdGlvbkFyZywgY3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlmdEtl
eUFyZywgbWV0YUtleUFyZyk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CkluZGV4OiBrZG9tL2V2
ZW50cy9LZXlib2FyZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9ldmVudHMvS2V5Ym9hcmRFdmVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9LZXlib2FyZEV2ZW50LmgKLS0tIGtkb20v
ZXZlbnRzL0tleWJvYXJkRXZlbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjAwIC0wMDAwCTEuMQorKysg
a2RvbS9ldmVudHMvS2V5Ym9hcmRFdmVudC5oCTggQXVnIDIwMDUgMDk6MDI6NTAgLTAwMDAKQEAg
LTkzLDcgKzkzLDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2Vj
dGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9Owog
fTsKIApJbmRleDoga2RvbS9ldmVudHMvTW91c2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvTW91c2VFdmVudC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL01vdXNlRXZl
bnQuY3BwCi0tLSBrZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjAw
IC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvTW91c2VFdmVudC5jcHAJOCBBdWcgMjAwNSAwOTow
Mjo1MCAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9N
X0lNUExFTUVOVF9QUk9UT1RZUEUoIk1vdXNlRXZlbnQiLCBNb3VzZUV2ZW50UHJvdG8sIE1vdXNl
RXZlbnRQcm90b0Z1bmMpCiAKLVZhbHVlIE1vdXNlRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqTW91c2VFdmVudDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApAQCAtOTMsNyArOTMsNyBAQCBWYWx1ZSBNb3VzZUV2ZW50OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBNb3VzZUV2
ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKk1vdXNlRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RP
TV9DSEVDS19USElTKE1vdXNlRXZlbnQpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC0xMDMsMTkgKzEw
MywxOSBAQCBWYWx1ZSBNb3VzZUV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0CiAJCWNhc2Ug
TW91c2VFdmVudENvbnN0YW50czo6SW5pdE1vdXNlRXZlbnQ6CiAJCXsKIAkJCURPTVN0cmluZyB0
eXBlQXJnID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIGNhbkJ1YmJsZUFy
ZyA9IGFyZ3NbMV0udG9Cb29sZWFuKGV4ZWMpOwotCQkJYm9vbCBjYW5jZWxhYmxlQXJnID0gYXJn
c1syXS50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGNhbkJ1YmJsZUFyZyA9IGFyZ3NbMV0tPnRv
Qm9vbGVhbihleGVjKTsKKwkJCWJvb2wgY2FuY2VsYWJsZUFyZyA9IGFyZ3NbMl0tPnRvQm9vbGVh
bihleGVjKTsKIAkJCUFic3RyYWN0VmlldyB2aWV3QXJnID0gZWNtYV9jYXN0PEFic3RyYWN0Vmll
dz4oZXhlYywgYXJnc1szXSwgJnRvQWJzdHJhY3RWaWV3KTsKLQkJCWxvbmcgZGV0YWlsQXJnID0g
YXJnc1s0XS50b0ludDMyKGV4ZWMpOwotCQkJbG9uZyBzY3JlZW5YQXJnID0gYXJnc1s1XS50b0lu
dDMyKGV4ZWMpOwotCQkJbG9uZyBzY3JlZW5ZQXJnID0gYXJnc1s2XS50b0ludDMyKGV4ZWMpOwot
CQkJbG9uZyBjbGllbnRYQXJnID0gYXJnc1s3XS50b0ludDMyKGV4ZWMpOwotCQkJbG9uZyBjbGll
bnRZQXJnID0gYXJnc1s4XS50b0ludDMyKGV4ZWMpOwotCQkJYm9vbCBjdHJsS2V5QXJnID0gYXJn
c1s5XS50b0Jvb2xlYW4oZXhlYyk7Ci0JCQlib29sIGFsdEtleUFyZyA9IGFyZ3NbMTBdLnRvQm9v
bGVhbihleGVjKTsKLQkJCWJvb2wgc2hpZnRLZXlBcmcgPSBhcmdzWzExXS50b0Jvb2xlYW4oZXhl
Yyk7Ci0JCQlib29sIG1ldGFLZXlBcmcgPSBhcmdzWzEyXS50b0Jvb2xlYW4oZXhlYyk7Ci0JCQl1
bnNpZ25lZCBzaG9ydCBidXR0b25BcmcgPSBhcmdzWzEzXS50b1VJbnQxNihleGVjKTsKKwkJCWxv
bmcgZGV0YWlsQXJnID0gYXJnc1s0XS0+dG9JbnQzMihleGVjKTsKKwkJCWxvbmcgc2NyZWVuWEFy
ZyA9IGFyZ3NbNV0tPnRvSW50MzIoZXhlYyk7CisJCQlsb25nIHNjcmVlbllBcmcgPSBhcmdzWzZd
LT50b0ludDMyKGV4ZWMpOworCQkJbG9uZyBjbGllbnRYQXJnID0gYXJnc1s3XS0+dG9JbnQzMihl
eGVjKTsKKwkJCWxvbmcgY2xpZW50WUFyZyA9IGFyZ3NbOF0tPnRvSW50MzIoZXhlYyk7CisJCQli
b29sIGN0cmxLZXlBcmcgPSBhcmdzWzldLT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGFsdEtl
eUFyZyA9IGFyZ3NbMTBdLT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIHNoaWZ0S2V5QXJnID0g
YXJnc1sxMV0tPnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgbWV0YUtleUFyZyA9IGFyZ3NbMTJd
LT50b0Jvb2xlYW4oZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcgPSBhcmdzWzEz
XS0+dG9VSW50MTYoZXhlYyk7CiAJCQlOb2RlIHJlbGF0ZWRUYXJnZXRBcmcgPSBlY21hX2Nhc3Q8
Tm9kZT4oZXhlYywgYXJnc1sxNF0sICZ0b05vZGUpOwogCiAJCQlvYmouaW5pdE1vdXNlRXZlbnQo
dHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcs
IHNjcmVlblhBcmcsIHNjcmVlbllBcmcsIGNsaWVudFhBcmcsIGNsaWVudFlBcmcsIGN0cmxLZXlB
cmcsIGFsdEtleUFyZywgc2hpZnRLZXlBcmcsIG1ldGFLZXlBcmcsIGJ1dHRvbkFyZywgcmVsYXRl
ZFRhcmdldEFyZyk7CkluZGV4OiBrZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvTW91c2VFdmVudC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9Nb3Vz
ZUV2ZW50LmgKLS0tIGtkb20vZXZlbnRzL01vdXNlRXZlbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjAw
IC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvTW91c2VFdmVudC5oCTggQXVnIDIwMDUgMDk6MDI6
NTAgLTAwMDAKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVj
bWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ldmVudHMvTXV0YXRpb25FdmVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvTXV0YXRp
b25FdmVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtk
b20vZXZlbnRzL011dGF0aW9uRXZlbnQuY3BwCi0tLSBrZG9tL2V2ZW50cy9NdXRhdGlvbkV2ZW50
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjAxIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvTXV0YXRp
b25FdmVudC5jcHAJOCBBdWcgMjAwNSAwOTowMjo1MCAtMDAwMApAQCAtNDksNyArNDksNyBAQCB1
c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIk11dGF0aW9u
RXZlbnQiLCBNdXRhdGlvbkV2ZW50UHJvdG8sIE11dGF0aW9uRXZlbnRQcm90b0Z1bmMpCiAKLVZh
bHVlIE11dGF0aW9uRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqTXV0YXRpb25FdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApA
QCAtNzMsNyArNzMsNyBAQCBWYWx1ZSBNdXRhdGlvbkV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4
CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBNdXRhdGlvbkV2ZW50UHJvdG9GdW5j
OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQorVmFsdWVJbXAgKk11dGF0aW9uRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19U
SElTKE11dGF0aW9uRXZlbnQpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC04MywxMyArODMsMTMgQEAg
VmFsdWUgTXV0YXRpb25FdmVudFByb3RvRnVuYzo6Y2FsbChFeGVjUwogCQljYXNlIE11dGF0aW9u
RXZlbnRDb25zdGFudHM6OkluaXRNdXRhdGlvbkV2ZW50OgogCQl7CiAJCQlET01TdHJpbmcgdHlw
ZUFyZyA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMF0pOwotCQkJYm9vbCBjYW5CdWJibGVBcmcg
PSBhcmdzWzFdLnRvQm9vbGVhbihleGVjKTsKLQkJCWJvb2wgY2FuY2VsYWJsZUFyZyA9IGFyZ3Nb
Ml0udG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBjYW5CdWJibGVBcmcgPSBhcmdzWzFdLT50b0Jv
b2xlYW4oZXhlYyk7CisJCQlib29sIGNhbmNlbGFibGVBcmcgPSBhcmdzWzJdLT50b0Jvb2xlYW4o
ZXhlYyk7CiAJCQlOb2RlIHJlbGF0ZWROb2RlQXJnID0gZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFy
Z3NbM10sICZ0b05vZGUpOwogCQkJRE9NU3RyaW5nIHByZXZWYWx1ZUFyZyA9IHRvRE9NU3RyaW5n
KGV4ZWMsIGFyZ3NbNF0pOwogCQkJRE9NU3RyaW5nIG5ld1ZhbHVlQXJnID0gdG9ET01TdHJpbmco
ZXhlYywgYXJnc1s1XSk7CiAJCQlET01TdHJpbmcgYXR0ck5hbWVBcmcgPSB0b0RPTVN0cmluZyhl
eGVjLCBhcmdzWzZdKTsKLQkJCXVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcgPSBhcmdzWzdd
LnRvVUludDE2KGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyA9IGFyZ3Nb
N10tPnRvVUludDE2KGV4ZWMpOwogCiAJCQlvYmouaW5pdE11dGF0aW9uRXZlbnQodHlwZUFyZywg
Y2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCByZWxhdGVkTm9kZUFyZywgcHJldlZhbHVlQXJn
LCBuZXdWYWx1ZUFyZywgYXR0ck5hbWVBcmcsIGF0dHJDaGFuZ2VBcmcpOwogCQkJcmV0dXJuIFVu
ZGVmaW5lZCgpOwpJbmRleDoga2RvbS9ldmVudHMvTXV0YXRpb25FdmVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vZXZlbnRzL011dGF0aW9uRXZlbnQu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMv
TXV0YXRpb25FdmVudC5oCi0tLSBrZG9tL2V2ZW50cy9NdXRhdGlvbkV2ZW50LmgJOSBKdWwgMjAw
NSAwNjo1NDowMSAtMDAwMAkxLjEKKysrIGtkb20vZXZlbnRzL011dGF0aW9uRXZlbnQuaAk4IEF1
ZyAyMDA1IDA5OjAyOjUwIC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJ
cHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vZXZlbnRzL1VJRXZlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vZXZlbnRz
L1VJRXZlbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
ZG9tL2V2ZW50cy9VSUV2ZW50LmNwcAotLS0ga2RvbS9ldmVudHMvVUlFdmVudC5jcHAJOSBKdWwg
MjAwNSAwNjo1NDowMSAtMDAwMAkxLjEKKysrIGtkb20vZXZlbnRzL1VJRXZlbnQuY3BwCTggQXVn
IDIwMDUgMDk6MDI6NTEgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtK
UzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJVSUV2ZW50IiwgVUlFdmVudFByb3RvLCBV
SUV2ZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBVSUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlVJRXZlbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKQEAgLTY1LDcgKzY1LDcgQEAgVmFsdWUgVUlFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgVUlFdmVudFByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKK1ZhbHVlSW1wICpVSUV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJ
UyhVSUV2ZW50KQogCUtET01fRU5URVJfU0FGRQpAQCAtNzUsMTAgKzc1LDEwIEBAIFZhbHVlIFVJ
RXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICoKIAkJY2FzZSBVSUV2ZW50Q29uc3RhbnRz
OjpJbml0VUlFdmVudDoKIAkJewogCQkJRE9NU3RyaW5nIHR5cGVBcmcgPSB0b0RPTVN0cmluZyhl
eGVjLCBhcmdzWzBdKTsKLQkJCWJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS50b0Jvb2xlYW4o
ZXhlYyk7Ci0JCQlib29sIGNhbmNlbGFibGVBcmcgPSBhcmdzWzJdLnRvQm9vbGVhbihleGVjKTsK
KwkJCWJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMpOworCQkJYm9v
bCBjYW5jZWxhYmxlQXJnID0gYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpOwogCQkJQWJzdHJhY3RW
aWV3IHZpZXdBcmcgPSBlY21hX2Nhc3Q8QWJzdHJhY3RWaWV3PihleGVjLCBhcmdzWzNdLCAmdG9B
YnN0cmFjdFZpZXcpOwotCQkJbG9uZyBkZXRhaWxBcmcgPSBhcmdzWzRdLnRvSW50MzIoZXhlYyk7
CisJCQlsb25nIGRldGFpbEFyZyA9IGFyZ3NbNF0tPnRvSW50MzIoZXhlYyk7CiAJCQlvYmouaW5p
dFVJRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBk
ZXRhaWxBcmcpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrZG9tL2V2ZW50
cy9VSUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2Rv
bS9ldmVudHMvVUlFdmVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrZG9tL2V2ZW50cy9VSUV2ZW50LmgKLS0tIGtkb20vZXZlbnRzL1VJRXZlbnQuaAk5IEp1
bCAyMDA1IDA2OjU0OjAxIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvVUlFdmVudC5oCTggQXVn
IDIwMDUgMDk6MDI6NTEgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtET00KIAlw
dWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ldmVudHMvaW1wbC9FdmVu
dExpc3RlbmVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva2RvbS9ldmVudHMvaW1wbC9FdmVudExpc3RlbmVySW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL2ltcGwvRXZlbnRMaXN0ZW5l
ckltcGwuY3BwCi0tLSBrZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlzdGVuZXJJbXBsLmNwcAk5IEp1
bCAyMDA1IDA2OjU0OjAzIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvaW1wbC9FdmVudExpc3Rl
bmVySW1wbC5jcHAJOCBBdWcgMjAwNSAwOTowMjo1MSAtMDAwMApAQCAtMzMsMTQgKzMzLDE0IEBA
IEV2ZW50TGlzdGVuZXJJbXBsOjpFdmVudExpc3RlbmVySW1wbCgpIDoKIAltX2RvYyA9IDA7CiAJ
bV9lY21hRXZlbnRMaXN0ZW5lciA9IGZhbHNlOwogCi0JbV9saXN0ZW5lciA9IEtKUzo6T2JqZWN0
KCk7Ci0JbV9jb21wYXJlTGlzdGVuZXIgPSBLSlM6OlZhbHVlKCk7CisJbV9saXN0ZW5lciA9IE5V
TEw7CisJbV9jb21wYXJlTGlzdGVuZXIgPSBOVUxMOwogfQogCiBFdmVudExpc3RlbmVySW1wbDo6
fkV2ZW50TGlzdGVuZXJJbXBsKCkKIHsKIAlpZihtX2RvYyAmJiBtX2RvYy0+ZWNtYUVuZ2luZSgp
ICYmIG1fZWNtYUV2ZW50TGlzdGVuZXIpCi0JCW1fZG9jLT5lY21hRW5naW5lKCktPnJlbW92ZUV2
ZW50TGlzdGVuZXIoc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4obV9jb21wYXJlTGlzdGVu
ZXIuaW1wKCkpKTsKKwkJbV9kb2MtPmVjbWFFbmdpbmUoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihz
dGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihtX2NvbXBhcmVMaXN0ZW5lcikpOwogfQogCiB2
b2lkIEV2ZW50TGlzdGVuZXJJbXBsOjpoYW5kbGVFdmVudChFdmVudEltcGwgKmV2dCkKQEAgLTUy
LDcgKzUyLDcgQEAgdm9pZCBFdmVudExpc3RlbmVySW1wbDo6aGFuZGxlRXZlbnQoRXZlbgogCiAJ
S0pTOjpJbnRlcnByZXRlcjo6bG9jaygpOwogCUVjbWEgKmVjbWFFbmdpbmUgPSBtX2RvYy0+ZWNt
YUVuZ2luZSgpOwotCWlmKGVjbWFFbmdpbmUgJiYgbV9saXN0ZW5lci5pbXBsZW1lbnRzQ2FsbCgp
KQorCWlmKGVjbWFFbmdpbmUgJiYgbV9saXN0ZW5lci0+aW1wbGVtZW50c0NhbGwoKSkKIAl7CiAJ
CVNjcmlwdEludGVycHJldGVyICppbnRlcnByZXRlciA9IGVjbWFFbmdpbmUtPmludGVycHJldGVy
KCk7CiAJCUtKUzo6RXhlY1N0YXRlICpleGVjID0gZWNtYUVuZ2luZS0+Z2xvYmFsRXhlYygpOwpA
QCAtNjcsOCArNjcsOCBAQCB2b2lkIEV2ZW50TGlzdGVuZXJJbXBsOjpoYW5kbGVFdmVudChFdmVu
CiAJCWludGVycHJldGVyLT5zZXRDdXJyZW50RXZlbnQoZXZ0KTsKIAogCQkvLyBDYWxsIGl0IQot
CQlLSlM6Ok9iamVjdCB0aGlzT2JqID0gS0pTOjpPYmplY3Q6OmR5bmFtaWNDYXN0KHNhZmVfY2Fj
aGU8RXZlbnRUYXJnZXQ+KGV4ZWMsIGV2dE9iai5jdXJyZW50VGFyZ2V0KCkpKTsKLQkJS0pTOjpW
YWx1ZSByZXRWYWwgPSBtX2xpc3RlbmVyLmNhbGwoZXhlYywgdGhpc09iaiwgYXJncyk7CisJCUtK
Uzo6T2JqZWN0SW1wICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4oc2Fm
ZV9jYWNoZTxFdmVudFRhcmdldD4oZXhlYywgZXZ0T2JqLmN1cnJlbnRUYXJnZXQoKSkpOworCQlL
SlM6OlZhbHVlSW1wICpyZXRWYWwgPSBtX2xpc3RlbmVyLT5jYWxsKGV4ZWMsIHRoaXNPYmosIGFy
Z3MpOwogCiAJCS8vIFJlc2V0IGN1cnJlbnQgZXZlbnQgYWZ0ZXIgcHJvY2Vzc2luZwogCQlpbnRl
cnByZXRlci0+c2V0Q3VycmVudEV2ZW50KDApOwpAQCAtOTQsMTggKzk0LDE4IEBAIERPTVN0cmlu
ZyBFdmVudExpc3RlbmVySW1wbDo6aW50ZXJuYWxUeXAKIAlyZXR1cm4gbV9pbnRlcm5hbFR5cGU7
CiB9CiAKLUtKUzo6VmFsdWUgRXZlbnRMaXN0ZW5lckltcGw6OmVjbWFMaXN0ZW5lcigpIGNvbnN0
CitLSlM6OlZhbHVlSW1wICpFdmVudExpc3RlbmVySW1wbDo6ZWNtYUxpc3RlbmVyKCkgY29uc3QK
IHsKIAlpZighbV9lY21hRXZlbnRMaXN0ZW5lcikKLQkJcmV0dXJuIEtKUzo6VmFsdWUoKTsKKwkJ
cmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gbV9jb21wYXJlTGlzdGVuZXI7CiB9CiAKLXZvaWQgRXZl
bnRMaXN0ZW5lckltcGw6OmluaXRMaXN0ZW5lcihEb2N1bWVudEltcGwgKmRvYywgYm9vbCBlY21h
RXZlbnRMaXN0ZW5lciwgS0pTOjpPYmplY3QgbGlzdGVuZXIsIEtKUzo6VmFsdWUgY29tcGFyZUxp
c3RlbmVyLCBjb25zdCBET01TdHJpbmcgJmludGVybmFsVHlwZSkKK3ZvaWQgRXZlbnRMaXN0ZW5l
ckltcGw6OmluaXRMaXN0ZW5lcihEb2N1bWVudEltcGwgKmRvYywgYm9vbCBlY21hRXZlbnRMaXN0
ZW5lciwgS0pTOjpPYmplY3RJbXAgKmxpc3RlbmVyLCBLSlM6OlZhbHVlSW1wICpjb21wYXJlTGlz
dGVuZXIsIGNvbnN0IERPTVN0cmluZyAmaW50ZXJuYWxUeXBlKQogewotCWlmKCFsaXN0ZW5lci5p
c1ZhbGlkKCkgfHwgIWxpc3RlbmVyLmltcGxlbWVudHNDYWxsKCkpCi0JCWtkRXJyb3IoKSA8PCAi
RWNtYVNjcmlwdCBsaXN0ZW5lciBvYmplY3QgIiA8PCBsaXN0ZW5lci5pbXAoKSA8PCAiIGlzIG5v
dCB2YWxpZCBvciBkb2Vzbid0IGltcGxlbWVudCBhIGNhbGwhIiA8PCBlbmRsOworCWlmKCFsaXN0
ZW5lciB8fCAhbGlzdGVuZXItPmltcGxlbWVudHNDYWxsKCkpCisJCWtkRXJyb3IoKSA8PCAiRWNt
YVNjcmlwdCBsaXN0ZW5lciBvYmplY3QgIiA8PCBsaXN0ZW5lciA8PCAiIGlzIG5vdCB2YWxpZCBv
ciBkb2Vzbid0IGltcGxlbWVudCBhIGNhbGwhIiA8PCBlbmRsOwogCiAJbV9kb2MgPSBkb2M7CiAJ
bV9saXN0ZW5lciA9IGxpc3RlbmVyOwpJbmRleDoga2RvbS9ldmVudHMvaW1wbC9FdmVudExpc3Rl
bmVySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
ZXZlbnRzL2ltcGwvRXZlbnRMaXN0ZW5lckltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvaW1wbC9FdmVudExpc3RlbmVySW1wbC5oCi0t
LSBrZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlzdGVuZXJJbXBsLmgJOSBKdWwgMjAwNSAwNjo1NDow
MyAtMDAwMAkxLjEKKysrIGtkb20vZXZlbnRzL2ltcGwvRXZlbnRMaXN0ZW5lckltcGwuaAk4IEF1
ZyAyMDA1IDA5OjAyOjUxIC0wMDAwCkBAIC0zOCwxMCArMzgsMTAgQEAgbmFtZXNwYWNlIEtET00K
IAkJdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50SW1wbCAqZXZ0KTsKIAkJCiAJCURPTVN0
cmluZyBpbnRlcm5hbFR5cGUoKSBjb25zdDsKLQkJS0pTOjpWYWx1ZSBlY21hTGlzdGVuZXIoKSBj
b25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZWNtYUxpc3RlbmVyKCkgY29uc3Q7CiAKIAkJLy8gSW50
ZXJuYWwKLQkJdm9pZCBpbml0TGlzdGVuZXIoRG9jdW1lbnRJbXBsICpkb2MsIGJvb2wgZWNtYUV2
ZW50TGlzdGVuZXIsIEtKUzo6T2JqZWN0IGxpc3RlbmVyLCBLSlM6OlZhbHVlIGNvbXBhcmVMaXN0
ZW5lciwgY29uc3QgRE9NU3RyaW5nICZpbnRlcm5hbFR5cGUpOworCQl2b2lkIGluaXRMaXN0ZW5l
cihEb2N1bWVudEltcGwgKmRvYywgYm9vbCBlY21hRXZlbnRMaXN0ZW5lciwgS0pTOjpPYmplY3RJ
bXAgKmxpc3RlbmVyLCBLSlM6OlZhbHVlSW1wICpjb21wYXJlTGlzdGVuZXIsIGNvbnN0IERPTVN0
cmluZyAmaW50ZXJuYWxUeXBlKTsKIAogCXByaXZhdGU6CiAJCURvY3VtZW50SW1wbCAqbV9kb2M7
CkBAIC00OSw4ICs0OSw4IEBAIG5hbWVzcGFjZSBLRE9NCiAJCWJvb2wgbV9lY21hRXZlbnRMaXN0
ZW5lcjsKIAkJRE9NU3RyaW5nIG1faW50ZXJuYWxUeXBlOwogCi0JCUtKUzo6T2JqZWN0IG1fbGlz
dGVuZXI7Ci0JCUtKUzo6VmFsdWUgbV9jb21wYXJlTGlzdGVuZXI7CisJCUtKUzo6T2JqZWN0SW1w
ICptX2xpc3RlbmVyOworCQlLSlM6OlZhbHVlSW1wICptX2NvbXBhcmVMaXN0ZW5lcjsKIAl9Owog
fTsKIApJbmRleDoga2RvbS9pbXBsL0RPTVVzZXJEYXRhSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vaW1wbC9ET01Vc2VyRGF0YUltcGwuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9pbXBsL0RPTVVzZXJE
YXRhSW1wbC5oCi0tLSBrZG9tL2ltcGwvRE9NVXNlckRhdGFJbXBsLmgJOSBKdWwgMjAwNSAwNjo1
NDowNiAtMDAwMAkxLjEKKysrIGtkb20vaW1wbC9ET01Vc2VyRGF0YUltcGwuaAk4IEF1ZyAyMDA1
IDA5OjAyOjUxIC0wMDAwCkBAIC03NCwyMCArNzQsMjAgQEAgbmFtZXNwYWNlIEtET00KIAogCQlE
T01Vc2VyRGF0YUltcGwgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGw7IH0KIAotCQl2aXJ0
dWFsIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKKwkJdmlydHVhbCBLSlM6OlZhbHVlSW1wICpnZXQo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdAogCQl7CiAJCQlrZERlYnVnKDI2MDA0KSA8PCAiRE9NQnJpZGdlOjpnZXQoKSwgIiA8
PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8ICIgTmFtZTogIiA8PCBjbGFzc0luZm8oKS0+Y2xh
c3NOYW1lIDw8ICIgT2JqZWN0OiAiIDw8IHRoaXMtPm1faW1wbCA8PCBlbmRsOwogCiAJCQkvLyBM
b29rIGZvciBzdGFuZGFyZCBwcm9wZXJ0aWVzIChlLmcuIHRob3NlIGluIHRoZSBoYXNodGFibGVz
KQogCQkJRE9NVXNlckRhdGEgb2JqKG1faW1wbCk7Ci0JCQlLSlM6OlZhbHVlIHZhbCA9IG9iai5n
ZXQoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzKTsKKwkJCUtKUzo6VmFsdWVJbXAgKnZhbCA9IG9i
ai5nZXQoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzKTsKIAotCQkJaWYodmFsLnR5cGUoKSAhPSBL
SlM6OlVuZGVmaW5lZFR5cGUpCisJCQlpZih2YWwtPnR5cGUoKSAhPSBLSlM6OlVuZGVmaW5lZFR5
cGUpCiAJCQkJcmV0dXJuIHZhbDsKIAogCQkJLy8gTm90IGZvdW5kIC0+IGZvcndhcmQgdG8gT2Jq
ZWN0SW1wLgogCQkJdmFsID0gS0pTOjpPYmplY3RJbXA6OmdldChleGVjLCBwcm9wZXJ0eU5hbWUp
OwotCQkJaWYodmFsLnR5cGUoKSA9PSBLSlM6OlVuZGVmaW5lZFR5cGUpCisJCQlpZih2YWwtPnR5
cGUoKSA9PSBLSlM6OlVuZGVmaW5lZFR5cGUpCiAJCQkJa2REZWJ1ZygyNjAwNCkgPDwgIldBUk5J
Tkc6ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIG5vdCBmb3VuZCBpbi4uLiBOYW1l
OiAiIDw8IGNsYXNzSW5mbygpLT5jbGFzc05hbWUgPDwgIiBPYmplY3Q6ICIgPDwgbV9pbXBsIDw8
ICIgb24gbGluZSA6ICIgPDwgZXhlYy0+Y29udGV4dCgpLmN1clN0bXRGaXJzdExpbmUoKSA8PCBl
bmRsOwogCiAJCQlyZXR1cm4gdmFsOwpAQCAtMTA1LDcgKzEwNSw3IEBAIG5hbWVzcGFjZSBLRE9N
CiAJCX0KIAogCQl2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmRE9NVXNlckRhdGE6OnNfY2xhc3NJbmZvOyB9Ci0JCXZpcnR1YWwgS0pTOjpW
YWx1ZSB0b1ByaW1pdGl2ZShLSlM6OkV4ZWNTdGF0ZSAqLCBLSlM6OlR5cGUgPSBLSlM6OlVuZGVm
aW5lZFR5cGUpIGNvbnN0CisJCXZpcnR1YWwgS0pTOjpWYWx1ZUltcCAqdG9QcmltaXRpdmUoS0pT
OjpFeGVjU3RhdGUgKiwgS0pTOjpUeXBlID0gS0pTOjpVbmRlZmluZWRUeXBlKSBjb25zdAogCQl7
CiAJCQlrZERlYnVnKCkgPDwga19mdW5jaW5mbyA8PCBlbmRsOwogCQkJaWYobV9pbXBsICYmICgq
KChib29sICopKG1faW1wbC0+dXNlckRhdGEoKSkpKSkKSW5kZXg6IGtkb20vbHMvTFNFeGNlcHRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vbHMv
TFNFeGNlcHRpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrZG9tL2xzL0xTRXhjZXB0aW9uLmNwcAotLS0ga2RvbS9scy9MU0V4Y2VwdGlvbi5jcHAJOSBK
dWwgMjAwNSAwNjo1NDoxNCAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNFeGNlcHRpb24uY3BwCTgg
QXVnIDIwMDUgMDk6MDI6NTEgLTAwMDAKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIExTRXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqTFNFeGNlcHRpb246OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9r
ZW4pCiAJewpJbmRleDoga2RvbS9scy9MU0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vbHMvTFNFeGNlcHRpb24uaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU0V4Y2VwdGlvbi5oCi0tLSBr
ZG9tL2xzL0xTRXhjZXB0aW9uLmgJOSBKdWwgMjAwNSAwNjo1NDoxNCAtMDAwMAkxLjEKKysrIGtk
b20vbHMvTFNFeGNlcHRpb24uaAk4IEF1ZyAyMDA1IDA5OjAyOjUxIC0wMDAwCkBAIC02Miw3ICs2
Miw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJ
S0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtkb20vbHMvTFNJbnB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9scy9MU0lucHV0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU0lucHV0LmNwcAotLS0ga2RvbS9scy9MU0lucHV0LmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjE0IC0wMDAwCTEuMQorKysga2RvbS9scy9MU0lucHV0LmNwcAk4
IEF1ZyAyMDA1IDA5OjAyOjUxIC0wMDAwCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBMU0lucHV0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkxTSW5wdXQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAjaWZuZGVmIEFQ
UExFX0NPTVBJTEVfSEFDSwogCUtET01fRU5URVJfU0FGRQpAQCAtODAsNyArODAsNyBAQCBWYWx1
ZSBMU0lucHV0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0CiAJcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi12b2lkIExTSW5wdXQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBMU0lucHV0OjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGlu
dCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9scy9MU0lucHV0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU0lucHV0Lmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vbHMvTFNJbnB1dC5o
Ci0tLSBrZG9tL2xzL0xTSW5wdXQuaAk5IEp1bCAyMDA1IDA2OjU0OjE0IC0wMDAwCTEuMQorKysg
a2RvbS9scy9MU0lucHV0LmgJOCBBdWcgMjAwNSAwOTowMjo1MSAtMDAwMApAQCAtMTU5LDggKzE1
OSw4IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fUFVUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAlLRE9NX0RFRklO
RV9DQVNUKExTSW5wdXQpCkluZGV4OiBrZG9tL2xzL0xTT3V0cHV0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTT3V0cHV0LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU091dHB1dC5jcHAK
LS0tIGtkb20vbHMvTFNPdXRwdXQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MTQgLTAwMDAJMS4xCisr
KyBrZG9tL2xzL0xTT3V0cHV0LmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjUxIC0wMDAwCkBAIC00MCw3
ICs0MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBMU091dHB1
dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpMU091dHB1dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTgsNyArNTgsNyBAQCBWYWx1
ZSBMU091dHB1dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAJcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi12b2lkIExTT3V0cHV0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgTFNPdXRwdXQ6OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwg
aW50KQogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL2xzL0xTT3V0cHV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU091dHB1dC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTT3V0
cHV0LmgKLS0tIGtkb20vbHMvTFNPdXRwdXQuaAk5IEp1bCAyMDA1IDA2OjU0OjE0IC0wMDAwCTEu
MQorKysga2RvbS9scy9MU091dHB1dC5oCTggQXVnIDIwMDUgMDk6MDI6NTEgLTAwMDAKQEAgLTg1
LDggKzg1LDggQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9QVVQKIAkJS0RPTV9DQVNUCiAKLQkJ
S0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIAogCUtET01f
REVGSU5FX0NBU1QoTFNPdXRwdXQpCkluZGV4OiBrZG9tL2xzL0xTUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTUGFyc2VyLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU1BhcnNl
ci5jcHAKLS0tIGtkb20vbHMvTFNQYXJzZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MTQgLTAwMDAJ
MS4xCisrKyBrZG9tL2xzL0xTUGFyc2VyLmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjUyIC0wMDAwCkBA
IC01OCw3ICs1OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BS
T1RPVFlQRSgiTFNQYXJzZXIiLCBMU1BhcnNlclByb3RvLCBMU1BhcnNlclByb3RvRnVuYykKIAot
VmFsdWUgTFNQYXJzZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqTFNQYXJzZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTgwLDcg
KzgwLDcgQEAgVmFsdWUgTFNQYXJzZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBMU1BhcnNlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJiAvKiB2YWx1ZSAqLywgaW50KQor
dm9pZCBMU1BhcnNlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKiAvKiB2YWx1ZSAqLywgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBA
IC05NSw3ICs5NSw3IEBAIHZvaWQgTFNQYXJzZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXQK
IAlLRE9NX0xFQVZFX1NBRkUoRE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBMU1BhcnNlclByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKK1ZhbHVlSW1wICpMU1BhcnNlclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RI
SVMoTFNQYXJzZXIpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC0xMTcsNyArMTE3LDcgQEAgVmFsdWUg
TFNQYXJzZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlIAogCQl7CiAJCQlMU0lucHV0IGlucHV0
ID0gZWNtYV9jYXN0PExTSW5wdXQ+KGV4ZWMsIGFyZ3NbMF0sICZ0b0xTSW5wdXQpOwogCQkJTm9k
ZSBjb250ZXh0QXJnID0gZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFyZ3NbMV0sICZ0b05vZGUpOwot
CQkJdW5zaWduZWQgc2hvcnQgYWN0aW9uID0gYXJnc1syXS50b1VJbnQzMihleGVjKTsKKwkJCXVu
c2lnbmVkIHNob3J0IGFjdGlvbiA9IGFyZ3NbMl0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJu
IGdldERPTU5vZGUoZXhlYywgb2JqLnBhcnNlV2l0aENvbnRleHQoaW5wdXQsIGNvbnRleHRBcmcs
IGFjdGlvbikpOwogCQl9CiAJCWNhc2UgTFNQYXJzZXJDb25zdGFudHM6OkFib3J0OgpJbmRleDog
a2RvbS9scy9MU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vbHMvTFNQYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga2RvbS9scy9MU1BhcnNlci5oCi0tLSBrZG9tL2xzL0xTUGFyc2VyLmgJOSBKdWwg
MjAwNSAwNjo1NDoxNCAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNQYXJzZXIuaAk4IEF1ZyAyMDA1
IDA5OjAyOjUyIC0wMDAwCkBAIC0xNTIsOCArMTUyLDggQEAgbmFtZXNwYWNlIEtET00KIAkJS0RP
TV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpW
YWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAg
KnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vbHMvTFNQYXJzZXJGaWx0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vbHMv
TFNQYXJzZXJGaWx0ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrZG9tL2xzL0xTUGFyc2VyRmlsdGVyLmNwcAotLS0ga2RvbS9scy9MU1BhcnNlckZpbHRl
ci5jcHAJOSBKdWwgMjAwNSAwNjo1NDoxNSAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNQYXJzZXJG
aWx0ZXIuY3BwCTggQXVnIDIwMDUgMDk6MDI6NTIgLTAwMDAKQEAgLTQ4LDcgKzQ4LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJMU1BhcnNlckZp
bHRlciIsIExTUGFyc2VyRmlsdGVyUHJvdG8sIExTUGFyc2VyRmlsdGVyUHJvdG9GdW5jKQogCi1W
YWx1ZSBMU1BhcnNlckZpbHRlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpMU1BhcnNlckZpbHRlcjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IApAQCAtNjQsNyArNjQsNyBAQCBWYWx1ZSBMU1BhcnNlckZpbHRlcjo6Z2V0VmFsdWVQcm9wZXJ0
eShFCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBMU1BhcnNlckZpbHRlclByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKK1ZhbHVlSW1wICpMU1BhcnNlckZpbHRlclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NI
RUNLX1RISVMoTFNQYXJzZXJGaWx0ZXIpCiAJS0RPTV9FTlRFUl9TQUZFCkluZGV4OiBrZG9tL2xz
L0xTUGFyc2VyRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva2RvbS9scy9MU1BhcnNlckZpbHRlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTUGFyc2VyRmlsdGVyLmgKLS0tIGtkb20vbHMvTFNQYXJz
ZXJGaWx0ZXIuaAk5IEp1bCAyMDA1IDA2OjU0OjE1IC0wMDAwCTEuMQorKysga2RvbS9scy9MU1Bh
cnNlckZpbHRlci5oCTggQXVnIDIwMDUgMDk6MDI6NTIgLTAwMDAKQEAgLTE0MSw3ICsxNDEsNyBA
QCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01f
QkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga2RvbS9scy9MU1Jlc291cmNlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU1Jlc291
cmNlUmVzb2x2ZXIuY3BwCi0tLSBrZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5jcHAJOSBKdWwg
MjAwNSAwNjo1NDoxNSAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyLmNw
cAk4IEF1ZyAyMDA1IDA5OjAyOjUyIC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiTFNSZXNvdXJjZVJlc29sdmVy
IiwgTFNSZXNvdXJjZVJlc29sdmVyUHJvdG8sIExTUmVzb3VyY2VSZXNvbHZlclByb3RvRnVuYykK
IAotVmFsdWUgTFNSZXNvdXJjZVJlc29sdmVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkxTUmVzb3VyY2VSZXNvbHZlcjo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApAQCAtNTksNyArNTksNyBAQCBWYWx1ZSBMU1Jlc291cmNlUmVzb2x2ZXI6
OmdldFZhbHVlUHJvcGVyCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBMU1Jlc291
cmNlUmVzb2x2ZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqTFNSZXNvdXJjZVJlc29sdmVyUHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhMU1Jlc291cmNlUmVzb2x2ZXIpCiAJS0RPTV9F
TlRFUl9TQUZFCkluZGV4OiBrZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vbHMvTFNSZXNvdXJjZVJlc29sdmVy
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vbHMvTFNS
ZXNvdXJjZVJlc29sdmVyLmgKLS0tIGtkb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyLmgJOSBKdWwg
MjAwNSAwNjo1NDoxNSAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyLmgJ
OCBBdWcgMjAwNSAwOTowMjo1MiAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgS0RP
TQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9s
cy9MU1NlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vbHMvTFNTZXJpYWxpemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU1NlcmlhbGl6ZXIuY3BwCi0tLSBrZG9tL2xzL0xTU2Vy
aWFsaXplci5jcHAJOSBKdWwgMjAwNSAwNjo1NDoxNSAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNT
ZXJpYWxpemVyLmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjUyIC0wMDAwCkBAIC01Myw3ICs1Myw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiTFNTZXJp
YWxpemVyIiwgTFNTZXJpYWxpemVyUHJvdG8sIExTU2VyaWFsaXplclByb3RvRnVuYykKIAotVmFs
dWUgTFNTZXJpYWxpemVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKkxTU2VyaWFsaXplcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAt
NzMsNyArNzMsNyBAQCBWYWx1ZSBMU1NlcmlhbGl6ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIExTU2VyaWFsaXplcjo6cHV0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQp
Cit2b2lkIExTU2VyaWFsaXplcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBMU1NlcmlhbGl6ZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlYwog
CUtET01fTEVBVkVfU0FGRShMU0V4Y2VwdGlvbikKIH0KIAotVmFsdWUgTFNTZXJpYWxpemVyUHJv
dG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQorVmFsdWVJbXAgKkxTU2VyaWFsaXplclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NI
RUNLX1RISVMoTFNTZXJpYWxpemVyKQogCUtET01fRU5URVJfU0FGRQpJbmRleDoga2RvbS9scy9M
U1NlcmlhbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL2xzL0xTU2VyaWFsaXplci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrZG9tL2xzL0xTU2VyaWFsaXplci5oCi0tLSBrZG9tL2xzL0xTU2VyaWFsaXplci5o
CTkgSnVsIDIwMDUgMDY6NTQ6MTUgLTAwMDAJMS4xCisrKyBrZG9tL2xzL0xTU2VyaWFsaXplci5o
CTggQXVnIDIwMDUgMDk6MDI6NTIgLTAwMDAKQEAgLTEzOSw4ICsxMzksOCBAQCBuYW1lc3BhY2Ug
S0RPTQogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0J
CXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2
b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pT
OjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga2RvbS9scy9M
U1NlcmlhbGl6ZXJGaWx0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20vbHMvTFNTZXJpYWxpemVyRmlsdGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU1NlcmlhbGl6ZXJGaWx0ZXIuY3BwCi0t
LSBrZG9tL2xzL0xTU2VyaWFsaXplckZpbHRlci5jcHAJOSBKdWwgMjAwNSAwNjo1NDoxNSAtMDAw
MAkxLjEKKysrIGtkb20vbHMvTFNTZXJpYWxpemVyRmlsdGVyLmNwcAk4IEF1ZyAyMDA1IDA5OjAy
OjUyIC0wMDAwCkBAIC0zOCw3ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAq
LwogCi1WYWx1ZSBMU1NlcmlhbGl6ZXJGaWx0ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqTFNTZXJpYWxpemVyRmlsdGVyOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtE
T01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL2xzL0xTU2VyaWFsaXplckZpbHRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vbHMvTFNTZXJpYWxpemVy
RmlsdGVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
bHMvTFNTZXJpYWxpemVyRmlsdGVyLmgKLS0tIGtkb20vbHMvTFNTZXJpYWxpemVyRmlsdGVyLmgJ
OSBKdWwgMjAwNSAwNjo1NDoxNSAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNTZXJpYWxpemVyRmls
dGVyLmgJOCBBdWcgMjAwNSAwOTowMjo1MiAtMDAwMApAQCAtNzIsNyArNzIsNyBAQCBuYW1lc3Bh
Y2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNT
X0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a2RvbS9yYW5nZS9Eb2N1bWVudFJhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rZG9tL3JhbmdlL0RvY3VtZW50UmFuZ2UuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3JhbmdlL0RvY3VtZW50UmFuZ2UuY3Bw
Ci0tLSBrZG9tL3JhbmdlL0RvY3VtZW50UmFuZ2UuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MjAgLTAw
MDAJMS4xCisrKyBrZG9tL3JhbmdlL0RvY3VtZW50UmFuZ2UuY3BwCTggQXVnIDIwMDUgMDk6MDI6
NTMgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtET007CiAKIEtET01f
SU1QTEVNRU5UX1BST1RPVFlQRSgiRG9jdW1lbnRSYW5nZSIsIERvY3VtZW50UmFuZ2VQcm90bywg
RG9jdW1lbnRSYW5nZVByb3RvRnVuYykKIAotS0pTOjpWYWx1ZSBEb2N1bWVudFJhbmdlOjpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitLSlM6
OlZhbHVlSW1wICpEb2N1bWVudFJhbmdlOjpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTU2LDkg
KzU2LDkgQEAgS0pTOjpWYWx1ZSBEb2N1bWVudFJhbmdlOjpnZXRWYWx1ZVByb3BlcgogCXJldHVy
biBLSlM6OlVuZGVmaW5lZCgpOwogfQogCi1LSlM6OlZhbHVlIERvY3VtZW50UmFuZ2VQcm90b0Z1
bmM6OmNhbGwoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6T2JqZWN0ICZ0aGlzT2JqLCBjb25z
dCBLSlM6Okxpc3QgJikKK0tKUzo6VmFsdWVJbXAgKkRvY3VtZW50UmFuZ2VQcm90b0Z1bmM6OmNh
bGwoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBL
SlM6Okxpc3QgJikKIHsKLQlEb2N1bWVudFJhbmdlIG9iaihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0
PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7CisJRG9jdW1lbnRSYW5nZSBvYmoo
Y2FzdChleGVjLCB0aGlzT2JqKSk7CiAJUV9BU1NFUlQob2JqLmQgIT0gMCk7CiAKIAlLRE9NX0VO
VEVSX1NBRkUKSW5kZXg6IGtkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3JhbmdlL0RvY3Vt
ZW50UmFuZ2UuaAotLS0ga2RvbS9yYW5nZS9Eb2N1bWVudFJhbmdlLmgJOSBKdWwgMjAwNSAwNjo1
NDoyMCAtMDAwMAkxLjEKKysrIGtkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5oCTggQXVnIDIwMDUg
MDk6MDI6NTMgLTAwMDAKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6
IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZh
bHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vcmFuZ2UvUmFuZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vcmFuZ2Uv
UmFuZ2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9t
L3JhbmdlL1JhbmdlLmNwcAotLS0ga2RvbS9yYW5nZS9SYW5nZS5jcHAJOSBKdWwgMjAwNSAwNjo1
NDoyMCAtMDAwMAkxLjEKKysrIGtkb20vcmFuZ2UvUmFuZ2UuY3BwCTggQXVnIDIwMDUgMDk6MDI6
NTMgLTAwMDAKQEAgLTczLDcgKzczLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtET007CiAKIEtET01f
SU1QTEVNRU5UX1BST1RPVFlQRSgiUmFuZ2UiLCBSYW5nZVByb3RvLCBSYW5nZVByb3RvRnVuYykK
IAotVmFsdWUgUmFuZ2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqUmFuZ2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTk5LDcgKzk5
LDcgQEAgVmFsdWUgUmFuZ2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlIAogCXJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotVmFsdWUgUmFuZ2VQcm90b0Z1bmM6OmNhbGwoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIEtKUzo6T2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJ
bXAgKlJhbmdlUHJvdG9GdW5jOjpjYWxsKEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6Ok9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoUmFu
Z2UpCiAJCkBAIC0xMTIsMTQgKzExMiwxNCBAQCBWYWx1ZSBSYW5nZVByb3RvRnVuYzo6Y2FsbChL
SlM6OkV4ZWNTdGF0CiAJCWNhc2UgUmFuZ2VDb25zdGFudHM6OlNldEVuZDoKIAkJewogCQkJTm9k
ZSBwYXJlbnQgPSBlY21hX2Nhc3Q8Tm9kZT4oZXhlYywgYXJnc1swXSwgJnRvTm9kZSk7Ci0JCQlp
bnQgb2Zmc2V0ID0gYXJnc1sxXS50b0ludDMyKGV4ZWMpOworCQkJaW50IG9mZnNldCA9IGFyZ3Nb
MV0tPnRvSW50MzIoZXhlYyk7CiAJCQlvYmouc2V0RW5kKHBhcmVudCwgb2Zmc2V0KTsKIAkJCXJl
dHVybiBVbmRlZmluZWQoKTsKIAkJfQogCQljYXNlIFJhbmdlQ29uc3RhbnRzOjpTZXRTdGFydDoK
IAkJewogCQkJTm9kZSBwYXJlbnQgPSBlY21hX2Nhc3Q8Tm9kZT4oZXhlYywgYXJnc1swXSwgJnRv
Tm9kZSk7Ci0JCQlpbnQgb2Zmc2V0ID0gYXJnc1sxXS50b0ludDMyKGV4ZWMpOworCQkJaW50IG9m
ZnNldCA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyk7CiAJCQlvYmouc2V0U3RhcnQocGFyZW50LCBv
ZmZzZXQpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CQpAQCAtMTQ5LDcgKzE0OSw3IEBA
IFZhbHVlIFJhbmdlUHJvdG9GdW5jOjpjYWxsKEtKUzo6RXhlY1N0YXQKIAkJfQogCQljYXNlIFJh
bmdlQ29uc3RhbnRzOjpDb2xsYXBzZToKIAkJewotCQkJb2JqLmNvbGxhcHNlKCBhcmdzWzBdLnRv
Qm9vbGVhbihleGVjKSApOworCQkJb2JqLmNvbGxhcHNlKCBhcmdzWzBdLT50b0Jvb2xlYW4oZXhl
YykgKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQogIAkJY2FzZSBSYW5nZUNvbnN0YW50
czo6U2VsZWN0Tm9kZToKQEAgLTE2Niw3ICsxNjYsNyBAQCBWYWx1ZSBSYW5nZVByb3RvRnVuYzo6
Y2FsbChLSlM6OkV4ZWNTdGF0CiAJCX0KICAJCWNhc2UgUmFuZ2VDb25zdGFudHM6OkNvbXBhcmVC
b3VuZGFyeVBvaW50czoKIAkJewotCQkJaW50IGhvdyA9IGFyZ3NbMF0udG9JbnQzMihleGVjKTsK
KwkJCWludCBob3cgPSBhcmdzWzBdLT50b0ludDMyKGV4ZWMpOwogCQkJUmFuZ2Ugc291cmNlUmFu
Z2UgPSBlY21hX2Nhc3Q8UmFuZ2U+KGV4ZWMsIGFyZ3NbMV0sICZ0b1JhbmdlKTsKIAkJCXJldHVy
biBOdW1iZXIob2JqLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzdGF0aWNfY2FzdDxDb21wYXJlSG93
Pihob3cpICxzb3VyY2VSYW5nZSkpOwogCQl9CkluZGV4OiBrZG9tL3JhbmdlL1JhbmdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9yYW5nZS9SYW5nZS5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3JhbmdlL1Jh
bmdlLmgKLS0tIGtkb20vcmFuZ2UvUmFuZ2UuaAk5IEp1bCAyMDA1IDA2OjU0OjIwIC0wMDAwCTEu
MQorKysga2RvbS9yYW5nZS9SYW5nZS5oCTggQXVnIDIwMDUgMDk6MDI6NTMgLTAwMDAKQEAgLTQy
Nyw3ICs0MjcsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RP
TV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4
OiBrZG9tL3JhbmdlL1JhbmdlRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3JhbmdlL1JhbmdlRXhjZXB0aW9uLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9yYW5nZS9SYW5nZUV4Y2VwdGlv
bi5jcHAKLS0tIGtkb20vcmFuZ2UvUmFuZ2VFeGNlcHRpb24uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6
MjAgLTAwMDAJMS4xCisrKyBrZG9tL3JhbmdlL1JhbmdlRXhjZXB0aW9uLmNwcAk4IEF1ZyAyMDA1
IDA5OjAyOjUzIC0wMDAwCkBAIC0zNSw3ICszNSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLRE9NOwog
QGVuZAogKi8KIAotS0pTOjpWYWx1ZSBSYW5nZUV4Y2VwdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitLSlM6OlZhbHVlSW1wICpSYW5nZUV4
Y2VwdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtkb20vcmFuZ2UvUmFuZ2VFeGNlcHRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3Jhbmdl
L1JhbmdlRXhjZXB0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vcmFuZ2UvUmFuZ2VFeGNlcHRpb24uaAotLS0ga2RvbS9yYW5nZS9SYW5nZUV4Y2Vw
dGlvbi5oCTkgSnVsIDIwMDUgMDY6NTQ6MjAgLTAwMDAJMS4xCisrKyBrZG9tL3JhbmdlL1Jhbmdl
RXhjZXB0aW9uLmgJOCBBdWcgMjAwNSAwOTowMjo1MyAtMDAwMApAQCAtNjQsNyArNjQsNyBAQCBu
YW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VU
CiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9CiAKSW5kZXg6IGtkb20v
dHJhdmVyc2FsL0RvY3VtZW50VHJhdmVyc2FsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3RyYXZlcnNhbC9Eb2N1bWVudFRyYXZlcnNhbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vdHJhdmVyc2FsL0Rv
Y3VtZW50VHJhdmVyc2FsLmNwcAotLS0ga2RvbS90cmF2ZXJzYWwvRG9jdW1lbnRUcmF2ZXJzYWwu
Y3BwCTkgSnVsIDIwMDUgMDY6NTQ6MjMgLTAwMDAJMS4xCisrKyBrZG9tL3RyYXZlcnNhbC9Eb2N1
bWVudFRyYXZlcnNhbC5jcHAJOCBBdWcgMjAwNSAwOTowMjo1MyAtMDAwMApAQCAtNDcsNyArNDcs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkRv
Y3VtZW50VHJhdmVyc2FsIiwgRG9jdW1lbnRUcmF2ZXJzYWxQcm90bywgRG9jdW1lbnRUcmF2ZXJz
YWxQcm90b0Z1bmMpCiAKLVZhbHVlIERvY3VtZW50VHJhdmVyc2FsOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50VHJh
dmVyc2FsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02MSw5ICs2MSw5IEBAIFZhbHVlIERvY3VtZW50
VHJhdmVyc2FsOjpnZXRWYWx1ZVByb3BlcnQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZh
bHVlIERvY3VtZW50VHJhdmVyc2FsUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRvY3VtZW50VHJhdmVy
c2FsUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKQogewotCURvY3VtZW50VHJhdmVyc2FsIG9iaihjYXN0KGV4ZWMsIHN0
YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7CisJRG9jdW1lbnRU
cmF2ZXJzYWwgb2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwogCVFfQVNTRVJUKG9iai5kICE9IDAp
OwogCUtET01fRU5URVJfU0FGRQogCkBAIC03MiwxNSArNzIsMTUgQEAgVmFsdWUgRG9jdW1lbnRU
cmF2ZXJzYWxQcm90b0Z1bmM6OmNhbGwoRQogCQljYXNlIERvY3VtZW50VHJhdmVyc2FsQ29uc3Rh
bnRzOjpDcmVhdGVOb2RlSXRlcmF0b3I6CiAJCXsKIAkJCU5vZGUgcm9vdCA9IGVjbWFfY2FzdDxO
b2RlPihleGVjLCBhcmdzWzBdLCAmdG9Ob2RlKTsKLQkJCXVuc2lnbmVkIHNob3J0IHdoYXRUb1No
b3cgPSBhcmdzWzFdLnRvVUludDE2KGV4ZWMpOwotCQkJYm9vbCBlbnRpdHlSZWZlcmVuY2VFeHBh
bnNpb24gPSBhcmdzWzNdLnRvQm9vbGVhbihleGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IHdoYXRU
b1Nob3cgPSBhcmdzWzFdLT50b1VJbnQxNihleGVjKTsKKwkJCWJvb2wgZW50aXR5UmVmZXJlbmNl
RXhwYW5zaW9uID0gYXJnc1szXS0+dG9Cb29sZWFuKGV4ZWMpOwogCQkJcmV0dXJuIG9iai5jcmVh
dGVOb2RlSXRlcmF0b3Iocm9vdCwgd2hhdFRvU2hvdywgTm9kZUZpbHRlcjo6bnVsbCwgZW50aXR5
UmVmZXJlbmNlRXhwYW5zaW9uKS5jYWNoZShleGVjKTsKIAkJfQogCQljYXNlIERvY3VtZW50VHJh
dmVyc2FsQ29uc3RhbnRzOjpDcmVhdGVUcmVlV2Fsa2VyOgogCQl7CiAJCQlOb2RlIHJvb3QgPSBl
Y21hX2Nhc3Q8Tm9kZT4oZXhlYywgYXJnc1swXSwgJnRvTm9kZSk7Ci0JCQl1bnNpZ25lZCBzaG9y
dCB3aGF0VG9TaG93ID0gYXJnc1sxXS50b1VJbnQxNihleGVjKTsKLQkJCWJvb2wgZW50aXR5UmVm
ZXJlbmNlRXhwYW5zaW9uID0gYXJnc1szXS50b0Jvb2xlYW4oZXhlYyk7CisJCQl1bnNpZ25lZCBz
aG9ydCB3aGF0VG9TaG93ID0gYXJnc1sxXS0+dG9VSW50MTYoZXhlYyk7CisJCQlib29sIGVudGl0
eVJlZmVyZW5jZUV4cGFuc2lvbiA9IGFyZ3NbM10tPnRvQm9vbGVhbihleGVjKTsKIAkJCXJldHVy
biBvYmouY3JlYXRlVHJlZVdhbGtlcihyb290LCB3aGF0VG9TaG93LCBOb2RlRmlsdGVyOjpudWxs
LCBlbnRpdHlSZWZlcmVuY2VFeHBhbnNpb24pLmNhY2hlKGV4ZWMpOwogCQl9CiAJCWRlZmF1bHQ6
CkluZGV4OiBrZG9tL3RyYXZlcnNhbC9Eb2N1bWVudFRyYXZlcnNhbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vdHJhdmVyc2FsL0RvY3VtZW50VHJhdmVy
c2FsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vdHJh
dmVyc2FsL0RvY3VtZW50VHJhdmVyc2FsLmgKLS0tIGtkb20vdHJhdmVyc2FsL0RvY3VtZW50VHJh
dmVyc2FsLmgJOSBKdWwgMjAwNSAwNjo1NDoyMyAtMDAwMAkxLjEKKysrIGtkb20vdHJhdmVyc2Fs
L0RvY3VtZW50VHJhdmVyc2FsLmgJOCBBdWcgMjAwNSAwOTowMjo1MyAtMDAwMApAQCAtMTEzLDcg
KzExMyw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24K
IAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
CX07CiB9OwogCkluZGV4OiBrZG9tL3RyYXZlcnNhbC9Ob2RlSXRlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vdHJhdmVyc2FsL05vZGVJdGVy
YXRvci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
dHJhdmVyc2FsL05vZGVJdGVyYXRvci5jcHAKLS0tIGtkb20vdHJhdmVyc2FsL05vZGVJdGVyYXRv
ci5jcHAJOSBKdWwgMjAwNSAwNjo1NDoyMyAtMDAwMAkxLjEKKysrIGtkb20vdHJhdmVyc2FsL05v
ZGVJdGVyYXRvci5jcHAJOCBBdWcgMjAwNSAwOTowMjo1NCAtMDAwMApAQCAtNTAsNyArNTAsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIk5vZGVJ
dGVyYXRvciIsIE5vZGVJdGVyYXRvclByb3RvLCBOb2RlSXRlcmF0b3JQcm90b0Z1bmMpCiAKLVZh
bHVlIE5vZGVJdGVyYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpOb2RlSXRlcmF0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAg
LTcyLDcgKzcyLDcgQEAgVmFsdWUgTm9kZUl0ZXJhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQog
CXJldHVybiBVbmRlZmluZWQoKTsKIH07CiAKLVZhbHVlIE5vZGVJdGVyYXRvclByb3RvRnVuYzo6
Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmKQorVmFs
dWVJbXAgKk5vZGVJdGVyYXRvclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmKQogewogCUtET01fQ0hFQ0tfVEhJUyhOb2RlSXRl
cmF0b3IpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC04NSw3ICs4NSw3IEBAIFZhbHVlIE5vZGVJdGVy
YXRvclByb3RvRnVuYzo6Y2FsbChFeGVjU3QKIAkJCXJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG9i
ai5wcmV2aW91c05vZGUoKSk7CiAJCWNhc2UgTm9kZUl0ZXJhdG9yQ29uc3RhbnRzOjpEZXRhY2g6
CiAJCQlvYmouZGV0YWNoKCk7Ci0JCQlyZXR1cm4gVmFsdWUoKTsKKwkJCXJldHVybiBOVUxMOwog
CQlkZWZhdWx0OgogCQkJa2RXYXJuaW5nKCkgPDwgIlVuaGFuZGxlZCBmdW5jdGlvbiBpZCBpbiAi
IDw8IGtfZnVuY2luZm8gPDwgIiA6ICIgPDwgaWQgPDwgZW5kbDsKIAl9CkluZGV4OiBrZG9tL3Ry
YXZlcnNhbC9Ob2RlSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rZG9tL3RyYXZlcnNhbC9Ob2RlSXRlcmF0b3IuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmgKLS0t
IGtkb20vdHJhdmVyc2FsL05vZGVJdGVyYXRvci5oCTkgSnVsIDIwMDUgMDY6NTQ6MjMgLTAwMDAJ
MS4xCisrKyBrZG9tL3RyYXZlcnNhbC9Ob2RlSXRlcmF0b3IuaAk4IEF1ZyAyMDA1IDA5OjAyOjU0
IC0wMDAwCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21h
U2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vdHJhdmVyc2FsL1RyZWVXYWxrZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vdHJhdmVyc2FsL1RyZWVX
YWxrZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9t
L3RyYXZlcnNhbC9UcmVlV2Fsa2VyLmNwcAotLS0ga2RvbS90cmF2ZXJzYWwvVHJlZVdhbGtlci5j
cHAJOSBKdWwgMjAwNSAwNjo1NDoyMyAtMDAwMAkxLjEKKysrIGtkb20vdHJhdmVyc2FsL1RyZWVX
YWxrZXIuY3BwCTggQXVnIDIwMDUgMDk6MDI6NTQgLTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJUcmVlV2Fsa2Vy
IiwgVHJlZVdhbGtlclByb3RvLCBUcmVlV2Fsa2VyUHJvdG9GdW5jKQogCi1WYWx1ZSBUcmVlV2Fs
a2VyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKlRyZWVXYWxrZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTc4LDcgKzc4LDcgQEAg
VmFsdWUgVHJlZVdhbGtlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjUwogCXJldHVybiBVbmRlZmlu
ZWQoKTsKIH07CiAKLXZvaWQgVHJlZVdhbGtlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJiwgaW50KQordm9pZCBUcmVlV2Fsa2VyOjpw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqLCBp
bnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBUcmVlV2Fs
a2VyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdAogCUtET01fTEVBVkVfU0FGRShET01FeGNlcHRp
b24pCiB9CiAKLVZhbHVlIFRyZWVXYWxrZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJikKK1ZhbHVlSW1wICpUcmVlV2Fsa2VyUHJv
dG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICYpCiB7CiAJS0RPTV9DSEVDS19USElTKFRyZWVXYWxrZXIpCiAJS0RPTV9FTlRFUl9TQUZF
CkluZGV4OiBrZG9tL3RyYXZlcnNhbC9UcmVlV2Fsa2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS90cmF2ZXJzYWwvVHJlZVdhbGtlci5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3RyYXZlcnNhbC9UcmVlV2Fs
a2VyLmgKLS0tIGtkb20vdHJhdmVyc2FsL1RyZWVXYWxrZXIuaAk5IEp1bCAyMDA1IDA2OjU0OjIz
IC0wMDAwCTEuMQorKysga2RvbS90cmF2ZXJzYWwvVHJlZVdhbGtlci5oCTggQXVnIDIwMDUgMDk6
MDI6NTQgLTAwMDAKQEAgLTcwLDggKzcwLDggQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9HRVQK
IAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50
IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0
dHIpOwkJCiAJfTsKIH07CiAKSW5kZXg6IGtkb20vdmlld3MvQWJzdHJhY3RWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3ZpZXdzL0Fic3RyYWN0
Vmlldy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
dmlld3MvQWJzdHJhY3RWaWV3LmNwcAotLS0ga2RvbS92aWV3cy9BYnN0cmFjdFZpZXcuY3BwCTkg
SnVsIDIwMDUgMDY6NTQ6MjYgLTAwMDAJMS4xCisrKyBrZG9tL3ZpZXdzL0Fic3RyYWN0Vmlldy5j
cHAJOCBBdWcgMjAwNSAwOTowMjo1NCAtMDAwMApAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgQWJzdHJhY3RWaWV3OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkFic3RyYWN0
Vmlldzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAkvLyBObyBleGNlcHRpb25zIHRocm93biBoZXJlLCBubyBuZWVkIGZvciBLRE9NX0VOVEVS
L0xFQVZFX1NBRkUKIApJbmRleDoga2RvbS92aWV3cy9BYnN0cmFjdFZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3ZpZXdzL0Fic3RyYWN0Vmlldy5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3ZpZXdzL0Fi
c3RyYWN0Vmlldy5oCi0tLSBrZG9tL3ZpZXdzL0Fic3RyYWN0Vmlldy5oCTkgSnVsIDIwMDUgMDY6
NTQ6MjYgLTAwMDAJMS4xCisrKyBrZG9tL3ZpZXdzL0Fic3RyYWN0Vmlldy5oCTggQXVnIDIwMDUg
MDk6MDI6NTQgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9C
QVNFQ0xBU1NfR0VUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChBYnN0cmFjdFZpZXcpCkluZGV4OiBrZG9tL3Zp
ZXdzL0RvY3VtZW50Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS92aWV3cy9Eb2N1bWVudFZpZXcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3ZpZXdzL0RvY3VtZW50Vmlldy5jcHAKLS0tIGtkb20v
dmlld3MvRG9jdW1lbnRWaWV3LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjI2IC0wMDAwCTEuMQorKysg
a2RvbS92aWV3cy9Eb2N1bWVudFZpZXcuY3BwCTggQXVnIDIwMDUgMDk6MDI6NTQgLTAwMDAKQEAg
LTM4LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIERv
Y3VtZW50Vmlldzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFZpZXc6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJLy8gTm8gZXhjZXB0aW9ucyB0aHJvd24gaGVy
ZSwgbm8gbmVlZCBmb3IgS0RPTV9FTlRFUi9MRUFWRV9TQUZFCiAKSW5kZXg6IGtkb20vdmlld3Mv
RG9jdW1lbnRWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a2RvbS92aWV3cy9Eb2N1bWVudFZpZXcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga2RvbS92aWV3cy9Eb2N1bWVudFZpZXcuaAotLS0ga2RvbS92aWV3cy9Eb2N1
bWVudFZpZXcuaAk5IEp1bCAyMDA1IDA2OjU0OjI2IC0wMDAwCTEuMQorKysga2RvbS92aWV3cy9E
b2N1bWVudFZpZXcuaAk4IEF1ZyAyMDA1IDA5OjAyOjU0IC0wMDAwCkBAIC01Miw3ICs1Miw3IEBA
IG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9C
QVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9Owog
CkluZGV4OiBrZG9tL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS94cGF0aC9YUGF0aEV2
YWx1YXRvci5jcHAKLS0tIGtkb20veHBhdGgvWFBhdGhFdmFsdWF0b3IuY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6MjcgLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAk4IEF1
ZyAyMDA1IDA5OjAyOjU0IC0wMDAwCkBAIC01Myw3ICs1Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBL
SlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiWFBhdGhFdmFsdWF0b3IiLCBYUGF0aEV2
YWx1YXRvclByb3RvLCBYUGF0aEV2YWx1YXRvclByb3RvRnVuYykKIAotVmFsdWUgWFBhdGhFdmFs
dWF0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqWFBhdGhFdmFsdWF0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY3LDkgKzY3
LDkgQEAgVmFsdWUgWFBhdGhFdmFsdWF0b3I6OmdldFZhbHVlUHJvcGVydHkoRQogCXJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotVmFsdWUgWFBhdGhFdmFsdWF0b3JQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUlt
cCAqWFBhdGhFdmFsdWF0b3JQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0JWFBhdGhFdmFsdWF0b3Igb2JqKGNh
c3QoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsK
KwlYUGF0aEV2YWx1YXRvciBvYmooY2FzdChleGVjLCB0aGlzT2JqKSk7CiAJUV9BU1NFUlQob2Jq
LmQgIT0gMCk7CiAKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTkzLDcgKzkzLDcgQEAgVmFsdWUgWFBh
dGhFdmFsdWF0b3JQcm90b0Z1bmM6OmNhbGwoRXhlYwogCQkJRE9NU3RyaW5nIGV4cHJlc3Npb24g
PSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzBdKTsKIAkJCU5vZGUgY29udGV4dE5vZGUgPSBlY21h
X2Nhc3Q8Tm9kZT4oZXhlYywgYXJnc1sxXSwgJnRvTm9kZSk7CiAJCQlYUGF0aE5TUmVzb2x2ZXIg
cmVzZXIgPSBlY21hX2Nhc3Q8WFBhdGhOU1Jlc29sdmVyPihleGVjLCBhcmdzWzJdLCAmdG9YUGF0
aE5TUmVzb2x2ZXIpOwotCQkJdW5zaWduZWQgaW50IHR5cGUgPSBhcmdzWzNdLnRvVUludDE2KGV4
ZWMpOworCQkJdW5zaWduZWQgaW50IHR5cGUgPSBhcmdzWzNdLT50b1VJbnQxNihleGVjKTsKIAkJ
CQogCQkJLyogRE9NT2JqZWN0IGlzIGEgcG9zc2libGUgcG9vbGluZyBtZWNoYW5pc20gd2hpY2gg
d2UgY3VycmVudGx5IGRvbid0IHVzZSBhbmQKIAkJCSAqIGhlbmNlIGRvbid0IGtub3cgd2hhdCB0
eXBlIG9mIGNsYXNzIGl0IHNob3VsZCBiZS4gKi8KSW5kZXg6IGtkb20veHBhdGgvWFBhdGhFdmFs
dWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hw
YXRoL1hQYXRoRXZhbHVhdG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtkb20veHBhdGgvWFBhdGhFdmFsdWF0b3IuaAotLS0ga2RvbS94cGF0aC9YUGF0aEV2
YWx1YXRvci5oCTkgSnVsIDIwMDUgMDY6NTQ6MjcgLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQ
YXRoRXZhbHVhdG9yLmgJOCBBdWcgMjAwNSAwOTowMjo1NCAtMDAwMApAQCAtNzEsNyArNzEsNyBA
QCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01f
QkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga2RvbS94cGF0aC9YUGF0aEV4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aEV4Y2VwdGlvbi5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20veHBhdGgvWFBhdGhF
eGNlcHRpb24uY3BwCi0tLSBrZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9uLmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjI3IC0wMDAwCTEuMQorKysga2RvbS94cGF0aC9YUGF0aEV4Y2VwdGlvbi5jcHAJOCBB
dWcgMjAwNSAwOTowMjo1NCAtMDAwMApAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
S0pTOwogQGVuZAogKi8KIAotVmFsdWUgWFBhdGhFeGNlcHRpb246OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpYUGF0aEV4Y2VwdGlvbjo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRj
aCh0b2tlbikKIAl7CkluZGV4OiBrZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aEV4Y2VwdGlv
bi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3hwYXRo
L1hQYXRoRXhjZXB0aW9uLmgKLS0tIGtkb20veHBhdGgvWFBhdGhFeGNlcHRpb24uaAk5IEp1bCAy
MDA1IDA2OjU0OjI4IC0wMDAwCTEuMQorKysga2RvbS94cGF0aC9YUGF0aEV4Y2VwdGlvbi5oCTgg
QXVnIDIwMDUgMDk6MDI6NTQgLTAwMDAKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIEtET00K
IAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20veHBh
dGgvWFBhdGhFeHByZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rZG9tL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20veHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcAot
LS0ga2RvbS94cGF0aC9YUGF0aEV4cHJlc3Npb24uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MjggLTAw
MDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAJOCBBdWcgMjAwNSAwOTow
Mjo1NCAtMDAwMApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9N
X0lNUExFTUVOVF9QUk9UT1RZUEUoIlhQYXRoRXhwcmVzc2lvbiIsIFhQYXRoRXhwcmVzc2lvblBy
b3RvLCBYUGF0aEV4cHJlc3Npb25Qcm90b0Z1bmMpCiAKLVZhbHVlIFhQYXRoRXhwcmVzc2lvbjo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpYUGF0aEV4cHJlc3Npb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYyLDcgKzYyLDcgQEAg
VmFsdWUgWFBhdGhFeHByZXNzaW9uOjpnZXRWYWx1ZVByb3BlcnR5KAogCXJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotVmFsdWUgWFBhdGhFeHByZXNzaW9uUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlhQ
YXRoRXhwcmVzc2lvblByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAq
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoWFBhdGhFeHBy
ZXNzaW9uKQogCUtET01fRU5URVJfU0FGRQpAQCAtNzMsNyArNzMsNyBAQCBWYWx1ZSBYUGF0aEV4
cHJlc3Npb25Qcm90b0Z1bmM6OmNhbGwoRXhlCiAJCWNhc2UgWFBhdGhFeHByZXNzaW9uQ29uc3Rh
bnRzOjpFdmFsdWF0ZToKIAkJewogCQkJTm9kZSBjb250ZXh0Tm9kZSA9ICBlY21hX2Nhc3Q8Tm9k
ZT4oZXhlYywgYXJnc1swXSwgJnRvTm9kZSk7Ci0JCQl1bnNpZ25lZCBpbnQgdHlwZSA9IGFyZ3Nb
M10udG9VSW50MTYoZXhlYyk7CisJCQl1bnNpZ25lZCBpbnQgdHlwZSA9IGFyZ3NbM10tPnRvVUlu
dDE2KGV4ZWMpOwogCQkJLyogRE9NT2JqZWN0IGlzIGEgcG9zc2libGUgcG9vbGluZyBtZWNoYW5p
c20gd2hpY2ggd2UgY3VycmVudGx5IGRvbid0IHVzZSBhbmQKIAkJCSAqIGhlbmNlIGRvbid0IGtu
b3cgd2hhdCB0eXBlIG9mIGNsYXNzIGl0IHNob3VsZCBiZS4gKi8KIAkJCS8vY29uc3QgRE9NT2Jq
ZWN0IHJlc3VsdCA9IGVjbWFfY2FzdDxET01PYmplY3Q+KGV4ZWMsIGFyZ3NbNF0sICZ0b0RPTU9i
amVjdCk7CkluZGV4OiBrZG9tL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20veHBhdGgvWFBhdGhFeHByZXNzaW9uLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20veHBhdGgvWFBh
dGhFeHByZXNzaW9uLmgKLS0tIGtkb20veHBhdGgvWFBhdGhFeHByZXNzaW9uLmgJOSBKdWwgMjAw
NSAwNjo1NDoyOCAtMDAwMAkxLjEKKysrIGtkb20veHBhdGgvWFBhdGhFeHByZXNzaW9uLmgJOCBB
dWcgMjAwNSAwOTowMjo1NCAtMDAwMApAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgS0RPTQog
CXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogCiB9OwpJbmRleDoga2RvbS94cGF0
aC9YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20veHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuY3BwCi0t
LSBrZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJOSBKdWwgMjAwNSAwNjo1NDoyOCAtMDAw
MAkxLjEKKysrIGtkb20veHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcAk4IEF1ZyAyMDA1IDA5OjAy
OjU0IC0wMDAwCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01f
SU1QTEVNRU5UX1BST1RPVFlQRSgiWFBhdGhOU1Jlc29sdmVyIiwgWFBhdGhOU1Jlc29sdmVyUHJv
dG8sIFhQYXRoTlNSZXNvbHZlclByb3RvRnVuYykKIAotS0pTOjpWYWx1ZSBYUGF0aE5TUmVzb2x2
ZXI6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAor
S0pTOjpWYWx1ZUltcCAqWFBhdGhOU1Jlc29sdmVyOjpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTcs
NyArNTcsNyBAQCBLSlM6OlZhbHVlIFhQYXRoTlNSZXNvbHZlcjo6Z2V0VmFsdWVQcm9wCiAJcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBYUGF0aE5TUmVzb2x2ZXJQcm90b0Z1bmM6OmNh
bGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitW
YWx1ZUltcCAqWFBhdGhOU1Jlc29sdmVyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJ
UyhYUGF0aE5TUmVzb2x2ZXIpCiAJS0RPTV9FTlRFUl9TQUZFCkluZGV4OiBrZG9tL3hwYXRoL1hQ
YXRoTlNSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tkb20veHBhdGgvWFBhdGhOU1Jlc29sdmVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtkb20veHBhdGgvWFBhdGhOU1Jlc29sdmVyLmgKLS0tIGtkb20veHBh
dGgvWFBhdGhOU1Jlc29sdmVyLmgJOSBKdWwgMjAwNSAwNjo1NDoyOCAtMDAwMAkxLjEKKysrIGtk
b20veHBhdGgvWFBhdGhOU1Jlc29sdmVyLmgJOCBBdWcgMjAwNSAwOTowMjo1NCAtMDAwMApAQCAt
NjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0JBU0VDTEFTU19HRVQJCQogCQlL
RE9NX0NBU1QKIAkJCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogCiAJS0RP
TV9ERUZJTkVfQ0FTVChYUGF0aE5TUmVzb2x2ZXIpCkluZGV4OiBrZG9tL3hwYXRoL1hQYXRoTmFt
ZXNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9t
L3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga2RvbS94cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHAKLS0tIGtkb20veHBhdGgv
WFBhdGhOYW1lc3BhY2UuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MjggLTAwMDAJMS4xCisrKyBrZG9t
L3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjU0IC0wMDAwCkBAIC0z
OCw3ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1LSlM6OlZhbHVl
IFhQYXRoTmFtZXNwYWNlOjpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitLSlM6OlZhbHVlSW1wICpYUGF0aE5hbWVzcGFjZTo6Z2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01f
RU5URVJfU0FGRQogCkluZGV4OiBrZG9tL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aE5hbWVzcGFj
ZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3hwYXRo
L1hQYXRoTmFtZXNwYWNlLmgKLS0tIGtkb20veHBhdGgvWFBhdGhOYW1lc3BhY2UuaAk5IEp1bCAy
MDA1IDA2OjU0OjI4IC0wMDAwCTEuMQorKysga2RvbS94cGF0aC9YUGF0aE5hbWVzcGFjZS5oCTgg
QXVnIDIwMDUgMDk6MDI6NTUgLTAwMDAKQEAgLTYyLDcgKzYyLDcgQEAgbmFtZXNwYWNlIEtET00K
IAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZh
bHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL3hwYXRoL1hQYXRoUmVzdWx0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hwYXRoL1hQYXRoUmVz
dWx0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS94
cGF0aC9YUGF0aFJlc3VsdC5jcHAKLS0tIGtkb20veHBhdGgvWFBhdGhSZXN1bHQuY3BwCTkgSnVs
IDIwMDUgMDY6NTQ6MjggLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoUmVzdWx0LmNwcAk4
IEF1ZyAyMDA1IDA5OjAyOjU1IC0wMDAwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiWFBhdGhSZXN1bHQiLCBYUGF0aFJl
c3VsdFByb3RvLCBYUGF0aFJlc3VsdFByb3RvRnVuYykKIAotS0pTOjpWYWx1ZSBYUGF0aFJlc3Vs
dDo6Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorS0pTOjpWYWx1ZUltcCAqWFBhdGhSZXN1bHQ6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAlLRE9N
X0VOVEVSX1NBRkUKQEAgLTc5LDcgKzc5LDcgQEAgS0pTOjpWYWx1ZSBYUGF0aFJlc3VsdDo6Z2V0
VmFsdWVQcm9wZXJ0eQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgWFBhdGhSZXN1
bHRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqWFBhdGhSZXN1bHRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RP
TV9DSEVDS19USElTKFhQYXRoUmVzdWx0KQogCUtET01fRU5URVJfU0FGRQpAQCAtOTEsNyArOTEs
NyBAQCBWYWx1ZSBYUGF0aFJlc3VsdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhCiAJCQlyZXR1cm4g
Z2V0RE9NTm9kZShleGVjLCBvYmouaXRlcmF0ZU5leHQoKSk7CiAJCWNhc2UgWFBhdGhSZXN1bHRD
b25zdGFudHM6OlNuYXBzaG90SXRlbToKIAkJewotCQkJY29uc3QgdW5zaWduZWQgbG9uZyBpbmRl
eCA9ICh1bnNpZ25lZCBsb25nKSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJY29uc3QgdW5z
aWduZWQgbG9uZyBpbmRleCA9ICh1bnNpZ25lZCBsb25nKSBhcmdzWzBdLT50b1VJbnQzMihleGVj
KTsKIAkJCXJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG9iai5zbmFwc2hvdEl0ZW0oaW5kZXgpKTsK
IAkJfQogCQlkZWZhdWx0OgpJbmRleDoga2RvbS94cGF0aC9YUGF0aFJlc3VsdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20veHBhdGgvWFBhdGhSZXN1bHQu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS94cGF0aC9Y
UGF0aFJlc3VsdC5oCi0tLSBrZG9tL3hwYXRoL1hQYXRoUmVzdWx0LmgJOSBKdWwgMjAwNSAwNjo1
NDoyOCAtMDAwMAkxLjEKKysrIGtkb20veHBhdGgvWFBhdGhSZXN1bHQuaAk4IEF1ZyAyMDA1IDA5
OjAyOjU1IC0wMDAwCkBAIC04OSw3ICs4OSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAKIAlwdWJsaWM6
IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKFhQYXRoUmVzdWx0
KQpJbmRleDoga3N2ZzIvS1NWR0ZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL0tTVkdGYWN0b3J5LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvS1NWR0ZhY3RvcnkuY3BwCi0tLSBrc3ZnMi9L
U1ZHRmFjdG9yeS5jcHAJOSBKdWwgMjAwNSAwNjo1NDo0NiAtMDAwMAkxLjEKKysrIGtzdmcyL0tT
VkdGYWN0b3J5LmNwcAk4IEF1ZyAyMDA1IDA5OjAyOjU2IC0wMDAwCkBAIC05Nyw5ICs5Nyw5IEBA
IEtQYXJ0czo6UGFydCAqS1NWR0ZhY3Rvcnk6OmNyZWF0ZVBhcnRPYmoKIAlmb3IoUVZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8UVN0cmluZz4gaXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGFyZ3MuZW5k
KCk7ICsraXQpIAogCXsKIAkJaWYocjEuc2VhcmNoKCppdCkgPiAtMSkKLQkJCXdpZHRoID0gcjEu
Y2FwKDMpLnRvVUludCgmZHVtbXkpOworCQkJd2lkdGggPSByMS5jYXAoMyktPnRvVUludCgmZHVt
bXkpOwogCQlpZihyMi5zZWFyY2goKml0KSA+IC0xKQotCQkJaGVpZ2h0ID0gcjIuY2FwKDMpLnRv
VUludCgmZHVtbXkpOworCQkJaGVpZ2h0ID0gcjIuY2FwKDMpLT50b1VJbnQoJmR1bW15KTsKIAl9
CiAJCiAJcmV0dXJuIG5ldyBLU1ZHUGFydChwYXJlbnRXaWRnZXQsIHdpZGdldE5hbWUsIHBhcmVu
dCwgbmFtZSwgd2lkdGgsIGhlaWdodCk7CkluZGV4OiBrc3ZnMi9kYXRhL1NWR0NvbnN0YW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RhdGEvU1ZH
Q29uc3RhbnRzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RhdGEvU1ZHQ29uc3RhbnRzLmgKLS0tIGtzdmcyL2RhdGEvU1ZHQ29uc3RhbnRzLmgJOSBK
dWwgMjAwNSAwNjo1NDo1MCAtMDAwMAkxLjEKKysrIGtzdmcyL2RhdGEvU1ZHQ29uc3RhbnRzLmgJ
OCBBdWcgMjAwNSAwOTowMjo1NiAtMDAwMApAQCAtMTE1LDcgKzExNSw3IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJewogCQl0eXBlZGVmIGVudW0KIAkJewotCQkJVmFsdWUgCisJCQlWYWx1ZQogCQl9IFNW
R051bWJlckNvbnN0YW50c0VudW07CiAJfTsKIApJbmRleDoga3N2ZzIvZGF0YS9nZW5lcmF0ZWRk
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9k
YXRhL2dlbmVyYXRlZGRhdGEuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrc3ZnMi9kYXRhL2dlbmVyYXRlZGRhdGEuY3BwCi0tLSBrc3ZnMi9kYXRhL2dlbmVy
YXRlZGRhdGEuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTAgLTAwMDAJMS4xCisrKyBrc3ZnMi9kYXRh
L2dlbmVyYXRlZGRhdGEuY3BwCTggQXVnIDIwMDUgMDk6MDM6MDIgLTAwMDAKQEAgLTUzNywxMiAr
NTM3LDEyIEBAIGJvb2wgU1ZHQUVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR0FFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdBRWxlbWVudD4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBRWxlbWVudDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBRWxlbWVudDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlm
KFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC01NjcsMTAg
KzU2NywxMCBAQCBib29sIFNWR0FFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUkdTKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0FFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0
aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxs
KCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FFbGVtZW50Ojpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTU3OCw3ICs1NzgsNyBAQCBPYmplY3RJbXAgKlNW
R0FFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0Jy
aWRnZTxTVkdBRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQUVsZW1lbnQ6OlByaXZhdGUgKj4o
ZCkpOwogfQogCi1WYWx1ZSBTVkdBRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K1ZhbHVlSW1wICpTVkdBRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0
PFNWR0FFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTU4NywxMiArNTg3LDEyIEBAIGJv
b2wgU1ZHQW5nbGU6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEKIHsKICAgICBjb25zdCBIYXNo
RW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHQW5nbGU6OnNfaGFzaFRhYmxlLHAyKTsK
ICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdBbmdsZVByb3Rv
OjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVl
OworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdBbmdsZVByb3RvOjpzZWxmKHAxKTsKKyAgICBp
Zihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVZhbHVlIFNWR0FuZ2xlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0FuZ2xlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpsb29rdXBHZXQ8U1ZHQW5nbGVQcm90b0Z1bmMsU1ZHQW5nbGU+KHAxLHAyLCZzX2hh
c2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTYwOSwxMCArNjA5LDEwIEBAIFNWR0FuZ2xlIEtTVkc6
OnRvU1ZHQW5nbGUoS0pTOjpFeGVjU3RhdGUKICAgICByZXR1cm4gU1ZHQW5nbGU6Om51bGw7CiB9
CiAKLVZhbHVlIFNWR0FuZ2xlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR0FuZ2xlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewotICAgIE9iamVjdCBwcm90byA9IFNWR0FuZ2xlUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHBy
b3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2Jq
ZWN0SW1wICpwcm90byA9IFNWR0FuZ2xlUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNF
RChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtNjI4LDEwICs2MjgsMTAgQEAg
Ym9vbCBTVkdBbmdsZTo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0RfQQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotT2JqZWN0IFNWR0FuZ2xlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K09iamVjdEltcCAqU1ZHQW5nbGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIGlmKHAxKSByZXR1cm4gU1ZHQW5nbGVQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9i
amVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0
SW1wICpTVkdBbmdsZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC02MzksNyArNjM5
LDcgQEAgT2JqZWN0SW1wICpTVkdBbmdsZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVy
biBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQW5nbGU+KHAxLHN0YXRpY19jYXN0PFNWR0FuZ2xl
OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5nbGU6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5nbGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0FuZ2xlPihwMSxzdGF0
aWNfY2FzdDxTVkdBbmdsZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC02NTIsMTIgKzY1Miwx
MiBAQCBib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6Omhhc1Byb3BlcnR5CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNW
R0FuaW1hdGVDb2xvckVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAot
VmFsdWUgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldChwMSxwMixw
Myk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNjcyLDEwICs2NzIsMTAgQEAgYm9vbCBT
VkdBbmltYXRlQ29sb3JFbGVtZW50OjpwdXQoUFVUX01FVAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotT2JqZWN0IFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRl
Q29sb3JFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTY4Myw3ICs2ODMs
NyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmJyaWRnCiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdBbmltYXRlQ29sb3JFbGVtZW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUg
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRlQ29sb3JFbGVtZW50
PihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTY5NiwxMiArNjk2LDEyIEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnQ6Omhhc1Byb3Bl
cnR5KEV4ZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVFbGVtZW50
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVFbGVtZW50
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBH
ZXRWYWx1ZTxTVkdBbmltYXRlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBTVkdBbmltYXRlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdBbmltYXRpb25FbGVtZW50OjpoYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBTVkdBbmltYXRpb25FbGVtZW50OjpnZXQocDEscDIscDMpOwog
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTcxNiwxMCArNzE2LDEwIEBAIGJvb2wgU1ZHQW5p
bWF0ZUVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0EKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9i
amVjdCBTVkdBbmltYXRlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitP
YmplY3RJbXAgKlNWR0FuaW1hdGVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0
UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlRWxlbWVudDo6YnJpZGdl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC03MjcsNyArNzI3LDcgQEAgT2JqZWN0SW1wICpTVkdB
bmltYXRlRWxlbWVudDo6YnJpZGdlKEV4ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlk
Z2U8U1ZHQW5pbWF0ZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVFbGVtZW50OjpQ
cml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZUVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0Fu
aW1hdGVFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlRWxlbWVudDo6UHJpdmF0ZSAq
PihkKSk7CiB9CkBAIC03NDAsMTIgKzc0MCwxMiBAQCBib29sIFNWR0FuaW1hdGVUcmFuc2Zvcm1F
bGVtZW50OjpoYXNQcm9wCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gU1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC03NjAsMTAgKzc2MCwxMCBAQCBib29sIFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpwdXQoUFVUCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNzcxLDcgKzc3
MSw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmIKICAgICByZXR1
cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50PihwMSxz
dGF0aWNfY2FzdDxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9
CiAKLVZhbHVlIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNzg0LDIxICs3ODQsMjEgQEAgYm9vbCBT
VkdBbmltYXRlZEFuZ2xlOjpoYXNQcm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHQW5pbWF0ZWRBbmdsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdBbmltYXRlZEFuZ2xlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZEFuZ2xlPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkQW5nbGU6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRBbmds
ZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChw
MSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotT2JqZWN0IFNWR0FuaW1hdGVkQW5nbGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZEFuZ2xlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGlu
T2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlZEFuZ2xlOjpi
cmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTgwNiw3ICs4MDYsNyBAQCBPYmplY3RJbXAg
KlNWR0FuaW1hdGVkQW5nbGU6OmJyaWRnZShFeGVjCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01C
cmlkZ2U8U1ZHQW5pbWF0ZWRBbmdsZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRBbmdsZTo6
UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkQW5nbGU6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRBbmdsZTo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZH
QW5pbWF0ZWRBbmdsZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRBbmdsZTo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CkBAIC04MTksMTIgKzgxOSwxMiBAQCBib29sIFNWR0FuaW1hdGVkQm9vbGVh
bjo6aGFzUHJvcGVydHkoRXhlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmlt
YXRlZEJvb2xlYW46OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5p
bWF0ZWRCb29sZWFuOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZEJvb2xlYW4+KHAxLHAyLCZzX2hhc2hUYWJs
ZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRCb29sZWFuOjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkQm9vbGVhbjo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFf
VU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTg0
MSwxMCArODQxLDEwIEBAIGJvb2wgU1ZHQW5pbWF0ZWRCb29sZWFuOjpwdXRJblBhcmVudHMoUFUK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZEJvb2xlYW46OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZEJvb2xlYW46
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEt
PmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlNWR0FuaW1hdGVkQm9vbGVhbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC04
NTIsNyArODUyLDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRlZEJvb2xlYW46OmJyaWRnZShFeAog
ICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQW5pbWF0ZWRCb29sZWFuPihwMSxz
dGF0aWNfY2FzdDxTVkdBbmltYXRlZEJvb2xlYW46OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1W
YWx1ZSBTVkdBbmltYXRlZEJvb2xlYW46OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHQW5pbWF0ZWRCb29sZWFuOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRlZEJvb2xlYW4+KHAxLHN0
YXRpY19jYXN0PFNWR0FuaW1hdGVkQm9vbGVhbjo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC04
NjUsMTIgKzg2NSwxMiBAQCBib29sIFNWR0FuaW1hdGVkRW51bWVyYXRpb246Omhhc1Byb3BlcnR5
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkRW51bWVyYXRp
b246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1
cEdldFZhbHVlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsg
UV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAt
ODg3LDEwICs4ODcsMTAgQEAgYm9vbCBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpwdXRJblBhcmVu
dAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0FuaW1hdGVkRW51bWVyYXRpb246
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZEVu
dW1lcmF0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpicmlkZ2UoRXhlY1N0YXRlICpw
MSkgY29uc3QKQEAgLTg5OCw3ICs4OTgsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVkRW51bWVy
YXRpb246OmJyaWRnCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdBbmltYXRl
ZEVudW1lcmF0aW9uPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpQcml2
YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9i
amVjdDxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZEVu
dW1lcmF0aW9uOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTkxMSwxMiArOTExLDEyIEBAIGJv
b2wgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpoYXNQcm9wZXJ0eShFeGUKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkSW50ZWdlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZEludGVnZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0FuaW1hdGVkSW50ZWdl
cj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZElu
dGVnZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
QW5pbWF0ZWRJbnRlZ2VyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwpAQCAtOTMzLDEwICs5MzMsMTAgQEAgYm9vbCBTVkdBbmltYXRlZEludGVn
ZXI6OnB1dEluUGFyZW50cyhQVQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0Fu
aW1hdGVkSW50ZWdlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAg
KlNWR0FuaW1hdGVkSW50ZWdlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlw
ZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTk0NCw3ICs5NDQsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVk
SW50ZWdlcjo6YnJpZGdlKEV4CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdB
bmltYXRlZEludGVnZXI+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkSW50ZWdlcjo6UHJpdmF0
ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkSW50ZWdlcjo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZEludGVnZXI6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0Fu
aW1hdGVkSW50ZWdlcj4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRJbnRlZ2VyOjpQcml2YXRl
ICo+KGltcGwpKTsKIH0KQEAgLTk1NywyMSArOTU3LDIxIEBAIGJvb2wgU1ZHQW5pbWF0ZWRMZW5n
dGg6Omhhc1Byb3BlcnR5KEV4ZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0Fu
aW1hdGVkTGVuZ3RoOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0Fu
aW1hdGVkTGVuZ3RoOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZExlbmd0aD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZExlbmd0aDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZExlbmd0aDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5V
U0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2Jq
ZWN0IFNWR0FuaW1hdGVkTGVuZ3RoOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHQW5pbWF0ZWRMZW5ndGg6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkTGVuZ3RoOjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTk3OSw3ICs5NzksNyBAQCBPYmplY3RJbXAgKlNWR0Fu
aW1hdGVkTGVuZ3RoOjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8
U1ZHQW5pbWF0ZWRMZW5ndGg+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkTGVuZ3RoOjpQcml2
YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRMZW5ndGg6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRMZW5ndGg6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0Fu
aW1hdGVkTGVuZ3RoPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZExlbmd0aDo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CkBAIC05OTIsMjEgKzk5MiwyMSBAQCBib29sIFNWR0FuaW1hdGVkTGVuZ3Ro
TGlzdDo6aGFzUHJvcGVydHkoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmlt
YXRlZExlbmd0aExpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
QW5pbWF0ZWRMZW5ndGhMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJl
dHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZExlbmd0aExpc3Q+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVk
TGVuZ3RoTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBR
X1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR0FuaW1hdGVkTGVuZ3RoTGlzdDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkTGVuZ3RoTGlzdDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTEw
MTQsNyArMTAxNCw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OjpicmlkZ2UK
ICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdBbmltYXRlZExlbmd0aExpc3Q+KHAx
LHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkTGVuZ3RoTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9
CiAKLVZhbHVlIFNWR0FuaW1hdGVkTGVuZ3RoTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZExlbmd0aExpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0FuaW1hdGVkTGVu
Z3RoTGlzdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OjpQcml2YXRlICo+
KGltcGwpKTsKIH0KQEAgLTEwMjcsMTIgKzEwMjcsMTIgQEAgYm9vbCBTVkdBbmltYXRlZE51bWJl
cjo6aGFzUHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5p
bWF0ZWROdW1iZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5p
bWF0ZWROdW1iZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006Omxvb2t1cEdldFZhbHVlPFNWR0FuaW1hdGVkTnVtYmVyPihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkTnVtYmVyOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkTnVtYmVyOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVT
RUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMTA0OSwx
MCArMTA0OSwxMCBAQCBib29sIFNWR0FuaW1hdGVkTnVtYmVyOjpwdXRJblBhcmVudHMoUFVUCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZWROdW1iZXI6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZE51bWJlcjo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
U1ZHQW5pbWF0ZWROdW1iZXI6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTA2MCw3
ICsxMDYwLDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRlZE51bWJlcjo6YnJpZGdlKEV4ZQogICAg
IHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQW5pbWF0ZWROdW1iZXI+KHAxLHN0YXRp
Y19jYXN0PFNWR0FuaW1hdGVkTnVtYmVyOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUg
U1ZHQW5pbWF0ZWROdW1iZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHQW5pbWF0ZWROdW1iZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0FuaW1hdGVkTnVtYmVyPihwMSxzdGF0aWNfY2Fz
dDxTVkdBbmltYXRlZE51bWJlcjo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0xMDczLDIxICsx
MDczLDIxIEBAIGJvb2wgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0OjpoYXNQcm9wZXJ0eSgKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZE51bWJlckxpc3Q6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVl
PFNWR0FuaW1hdGVkTnVtYmVyTGlzdD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQog
Ci1WYWx1ZSBTVkdBbmltYXRlZE51bWJlckxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWROdW1iZXJMaXN0OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIp
OyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZH
QW5pbWF0ZWROdW1iZXJMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVj
dEltcCAqU1ZHQW5pbWF0ZWROdW1iZXJMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0
UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlZE51bWJlckxpc3Q6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTA5NSw3ICsxMDk1LDcgQEAgT2JqZWN0SW1w
ICpTVkdBbmltYXRlZE51bWJlckxpc3Q6OmJyaWRnZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9N
QnJpZGdlPFNWR0FuaW1hdGVkTnVtYmVyTGlzdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRO
dW1iZXJMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWROdW1i
ZXJMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVk
TnVtYmVyTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0PihwMSxzdGF0aWNfY2FzdDxT
VkdBbmltYXRlZE51bWJlckxpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMTEwOCwyMSAr
MTEwOCwyMSBAQCBib29sIFNWR0FuaW1hdGVkUGF0aERhdGE6Omhhc1Byb3BlcnR5KEV4CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFBhdGhEYXRhOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUGF0aERhdGE6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNW
R0FuaW1hdGVkUGF0aERhdGE+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFs
dWUgU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFBhdGhEYXRhOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNF
RChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRQ
YXRoRGF0YTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0Fu
aW1hdGVkUGF0aERhdGE6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkUGF0aERhdGE6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtMTEzMCw3ICsxMTMwLDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRlZFBh
dGhEYXRhOjpicmlkZ2UoRQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR0FuaW1h
dGVkUGF0aERhdGE+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUGF0aERhdGE6OlByaXZhdGUg
Kj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFBhdGhEYXRhOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUGF0aERhdGE6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0Fu
aW1hdGVkUGF0aERhdGE+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUGF0aERhdGE6OlByaXZh
dGUgKj4oaW1wbCkpOwogfQpAQCAtMTE0MywyMSArMTE0MywyMSBAQCBib29sIFNWR0FuaW1hdGVk
UG9pbnRzOjpoYXNQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBT
VkdBbmltYXRlZFBvaW50czo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdBbmltYXRlZFBvaW50czo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRQb2ludHM+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRQb2ludHM6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQb2ludHM6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBR
X1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LU9iamVjdCBTVkdBbmltYXRlZFBvaW50czo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkUG9pbnRzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlZFBvaW50czo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMTY1LDcgKzExNjUsNyBAQCBPYmplY3RJbXAg
KlNWR0FuaW1hdGVkUG9pbnRzOjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01C
cmlkZ2U8U1ZHQW5pbWF0ZWRQb2ludHM+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUG9pbnRz
OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRQb2ludHM6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQb2ludHM6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR0FuaW1hdGVkUG9pbnRzPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZFBvaW50czo6UHJp
dmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0xMTc4LDIxICsxMTc4LDIxIEBAIGJvb2wgU1ZHQW5pbWF0
ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpoYXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVl
IFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0Fu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVj
dFJhdGlvOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5V
U0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFz
cGVjdFJhdGlvOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86OmJyaWRnZShFeGVj
U3RhdGUgKnAxKSBjb25zdApAQCAtMTIwMCw3ICsxMjAwLDcgQEAgT2JqZWN0SW1wICpTVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNW
R0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZFByZXNlcnZlQXNw
ZWN0UmF0aW86OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMTIxMywyMSArMTIxMywyMSBAQCBi
b29sIFNWR0FuaW1hdGVkUmVjdDo6aGFzUHJvcGVydHkoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFJlY3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRSZWN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZFJlY3Q+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRSZWN0OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUmVj
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChw
MSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotT2JqZWN0IFNWR0FuaW1hdGVkUmVjdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkUmVjdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9i
amVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRSZWN0Ojpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTEyMzUsNyArMTIzNSw3IEBAIE9iamVjdEltcCAq
U1ZHQW5pbWF0ZWRSZWN0OjpicmlkZ2UoRXhlY1MKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJy
aWRnZTxTVkdBbmltYXRlZFJlY3Q+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUmVjdDo6UHJp
dmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkUmVjdDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFJlY3Q6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0FuaW1h
dGVkUmVjdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRSZWN0OjpQcml2YXRlICo+KGltcGwp
KTsKIH0KQEAgLTEyNDgsMTIgKzEyNDgsMTIgQEAgYm9vbCBTVkdBbmltYXRlZFN0cmluZzo6aGFz
UHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRT
dHJpbmc6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRT
dHJpbmc6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldFZhbHVlPFNWR0FuaW1hdGVkU3RyaW5nPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkU3RyaW5nOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkU3RyaW5nOjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIp
OyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMTI3MCwxMCArMTI3
MCwxMCBAQCBib29sIFNWR0FuaW1hdGVkU3RyaW5nOjpwdXRJblBhcmVudHMoUFVUCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRTdHJpbmc6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZFN0cmluZzo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0
ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5p
bWF0ZWRTdHJpbmc6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTI4MSw3ICsxMjgx
LDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRlZFN0cmluZzo6YnJpZGdlKEV4ZQogICAgIHJldHVy
biBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQW5pbWF0ZWRTdHJpbmc+KHAxLHN0YXRpY19jYXN0
PFNWR0FuaW1hdGVkU3RyaW5nOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5p
bWF0ZWRTdHJpbmc6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006OmNhY2hlRE9NT2JqZWN0PFNWR0FuaW1hdGVkU3RyaW5nPihwMSxzdGF0aWNfY2FzdDxTVkdB
bmltYXRlZFN0cmluZzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0xMjk0LDIxICsxMjk0LDIx
IEBAIGJvb2wgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OjpoYXNQcm9wZXIKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVl
PFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9V
TlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1P
YmplY3QgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRl
ZFRyYW5zZm9ybUxpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTMxNiw3ICsx
MzE2LDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6OmJyaQogICAgIHJl
dHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0K
IAotVmFsdWUgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6
OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMTMyNSwxNSArMTMyNSwxNSBAQCBib29sIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICpl
ID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnNfaGFzaFRhYmxlLHAy
KTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdBbmltYXRp
b25FbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0FuaW1hdGlvbkVsZW1l
bnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR1Rlc3RzOjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRp
b25FbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
Ojpsb29rdXBHZXQ8U1ZHQW5pbWF0aW9uRWxlbWVudFByb3RvRnVuYyxTVkdBbmltYXRpb25FbGVt
ZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0xMzUzLDEwICsxMzUzLDEw
IEBAIFNWR0FuaW1hdGlvbkVsZW1lbnQgU1ZHQW5pbWF0aW9uRWxlbWVudFAKICAgICByZXR1cm4g
U1ZHQW5pbWF0aW9uRWxlbWVudDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmlt
YXRpb25FbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAg
IE9iamVjdCBwcm90byA9IFNWR0FuaW1hdGlvbkVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAg
ICBPYmplY3RJbXAgKnByb3RvID0gU1ZHQW5pbWF0aW9uRWxlbWVudFByb3RvOjpzZWxmKHAxKTsK
KyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxw
Mik7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxl
bWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR1Rlc3RzOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBTVkdUZXN0czo6Z2V0KHAxLHAyLHAzKTsKQEAgLTEzNzIsMTAgKzEzNzIsMTAgQEAgYm9v
bCBTVkdBbmltYXRpb25FbGVtZW50OjpwdXQoUFVUX01FVEhPRAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotT2JqZWN0IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRpb25FbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR0FuaW1hdGlvbkVsZW1lbnRQ
cm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRpb25FbGVtZW50Ojpi
cmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTEzODMsNyArMTM4Myw3IEBAIE9iamVjdElt
cCAqU1ZHQW5pbWF0aW9uRWxlbWVudDo6YnJpZGdlKEUKICAgICByZXR1cm4gbmV3IEtET006OkRP
TVJXQnJpZGdlPFNWR0FuaW1hdGlvbkVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRpb25FbGVtZW50
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGlvbkVsZW1l
bnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hl
RE9NT2JqZWN0PFNWR0FuaW1hdGlvbkVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGlv
bkVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTQwMSwxMiArMTQwMSwxMiBAQCBib29s
IFNWR0NpcmNsZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1WYWx1ZSBTVkdDaXJjbGVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR0NpcmNsZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0NpcmNsZUVsZW1lbnQ+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQ2lyY2xlRWxlbWVudDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdDaXJjbGVFbGVt
ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0Vs
ZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixw
Myk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsK
QEAgLTE0MzAsMTAgKzE0MzAsMTAgQEAgYm9vbCBTVkdDaXJjbGVFbGVtZW50OjpwdXQoUFVUX01F
VEhPRF9BUgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0NpcmNsZUVsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdDaXJjbGVFbGVt
ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpTVkdDaXJjbGVFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTE0NDEsNyArMTQ0MSw3IEBAIE9iamVjdEltcCAqU1ZHQ2lyY2xlRWxlbWVudDo6YnJpZGdlKEV4
ZWMKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0NpcmNsZUVsZW1lbnQ+KHAx
LHN0YXRpY19jYXN0PFNWR0NpcmNsZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1
ZSBTVkdDaXJjbGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KlNWR0NpcmNsZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0NpcmNsZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0
PFNWR0NpcmNsZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTQ1OSwxMiArMTQ1OSwx
MiBAQCBib29sIFNWR0NsaXBQYXRoRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdDbGlwUGF0aEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ2xpcFBhdGhFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdDbGlwUGF0
aEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQ2xp
cFBhdGhFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0NsaXBQYXRoRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdF
bGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OmdldChwMSxwMixwMyk7CkBAIC0xNDg4LDEwICsxNDg4LDEwIEBAIGJvb2wgU1ZHQ2xpcFBh
dGhFbGVtZW50OjpwdXQoUFVUX01FVEhPRF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVj
dCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpTVkdDbGlwUGF0aEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0NsaXBQYXRoRWxlbWVudDo6YnJpZGdl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNDk5LDcgKzE0OTksNyBAQCBPYmplY3RJbXAgKlNW
R0NsaXBQYXRoRWxlbWVudDo6YnJpZGdlKEV4CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0Jy
aWRnZTxTVkdDbGlwUGF0aEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0NsaXBQYXRoRWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0NsaXBQYXRoRWxlbWVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdDbGlwUGF0aEVsZW1lbnQ6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR0NsaXBQYXRoRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVtZW50OjpQ
cml2YXRlICo+KGQpKTsKIH0KQEAgLTE1MDgsMTMgKzE1MDgsMTMgQEAgYm9vbCBTVkdDb2xvcjo6
aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExv
b2t1cDo6ZmluZEVudHJ5KCZTVkdDb2xvcjo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJl
dHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR0NvbG9yUHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IFNWR0NvbG9yUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKEtET006OkNTU1ZhbHVlOjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgU1ZHQ29sb3I6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ29s
b3I6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1
cEdldDxTVkdDb2xvclByb3RvRnVuYyxTVkdDb2xvcj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQpAQCAtMTUyOCwxMCArMTUyOCwxMCBAQCBTVkdDb2xvciBTVkdDb2xvclByb3RvRnVu
Yzo6Y2FzdChLSlM6OkV4CiAgICAgcmV0dXJuIFNWR0NvbG9yOjpudWxsOwogfQogCi1WYWx1ZSBT
VkdDb2xvcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdDb2xvcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmpl
Y3QgcHJvdG8gPSBTVkdDb2xvclByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBTVkdDb2xvclByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoS0RPTTo6Q1NTVmFsdWU6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIEtET006OkNTU1ZhbHVlOjpnZXQocDEscDIscDMp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAgLTE1NDUsMTAgKzE1NDUsMTAgQEAgYm9v
bCBTVkdDb2xvcjo6cHV0KFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LU9iamVjdCBTVkdDb2xvcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJ
bXAgKlNWR0NvbG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIFNWR0NvbG9yUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZH
Q29sb3I6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTU1Niw3ICsxNTU2LDcgQEAg
T2JqZWN0SW1wICpTVkdDb2xvcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcg
S0RPTTo6RE9NUldCcmlkZ2U8U1ZHQ29sb3I+KHAxLHN0YXRpY19jYXN0PFNWR0NvbG9yOjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHQ29sb3I6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHQ29sb3I6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0NvbG9yPihwMSxzdGF0aWNfY2FzdDxT
VkdDb2xvcjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNTY5LDEyICsxNTY5LDEyIEBAIGJvb2wg
U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjps
b29rdXBHZXRWYWx1ZTxTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudD4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKQEAgLTE1ODksMTAgKzE1ODksMTAgQEAgYm9vbCBTVkdDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uRWxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0NvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVy
cHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0Ojpk
eW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkg
Y29uc3QKQEAgLTE2MDAsNyArMTYwMCw3IEBAIE9iamVjdEltcCAqU1ZHQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbkUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0NvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0NvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTYxOCwx
MiArMTYxOCwxMiBAQCBib29sIFNWR0RlZnNFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdEZWZzRWxlbWVudDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdEZWZzRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRGVmc0Vs
ZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRGVmc0Vs
ZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
RGVmc0VsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
aWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0
KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEs
cDIscDMpOwpAQCAtMTY0NywxMCArMTY0NywxMCBAQCBib29sIFNWR0RlZnNFbGVtZW50OjpwdXQo
UFVUX01FVEhPRF9BUkdTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRGVmc0Vs
ZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdEZWZz
RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJl
dHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAK
IE9iamVjdEltcCAqU1ZHRGVmc0VsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtMTY1OCw3ICsxNjU4LDcgQEAgT2JqZWN0SW1wICpTVkdEZWZzRWxlbWVudDo6YnJpZGdlKEV4
ZWNTdAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRGVmc0VsZW1lbnQ+KHAx
LHN0YXRpY19jYXN0PFNWR0RlZnNFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUg
U1ZHRGVmc0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
RGVmc0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006OmNhY2hlRE9NT2JqZWN0PFNWR0RlZnNFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdEZWZz
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNjczLDEyICsxNjczLDEyIEBAIGJvb2wg
U1ZHRGVzY0VsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIFNWR0Rlc2NFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0Rlc2NFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdEZXNjRWxlbWVudD4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdEZXNjRWxlbWVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdEZXNjRWxlbWVudDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlm
KFNWR0xhbmdTcGFjZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHTGFuZ1NwYWNlOjpn
ZXQocDEscDIscDMpOwpAQCAtMTY5OSwxMCArMTY5OSwxMCBAQCBib29sIFNWR0Rlc2NFbGVtZW50
OjpwdXQoUFVUX01FVEhPRF9BUkdTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZH
RGVzY0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpT
VkdEZXNjRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYo
cDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqU1ZHRGVzY0VsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBj
b25zdApAQCAtMTcxMCw3ICsxNzEwLDcgQEAgT2JqZWN0SW1wICpTVkdEZXNjRWxlbWVudDo6YnJp
ZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRGVzY0VsZW1l
bnQ+KHAxLHN0YXRpY19jYXN0PFNWR0Rlc2NFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgU1ZHRGVzY0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHRGVzY0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0Rlc2NFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxT
VkdEZXNjRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNzIzLDEyICsxNzIzLDEyIEBA
IGJvb2wgU1ZHRG9jdW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVZhbHVlIFNWR0RvY3VtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR0RvY3VtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdEb2N1bWVudD4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdEb2N1bWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdEb2N1bWVudDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihLRE9NOjpEb2N1bWVudDo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gS0RPTTo6RG9jdW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwpAQCAtMTc0OCwxMCArMTc0OCwxMCBAQCBib29sIFNWR0RvY3VtZW50
OjpwdXRJblBhcmVudHMoUFVUX01FVEhPCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
U1ZHRG9jdW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpT
VkdEb2N1bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIEtET006OkRvY3VtZW50IEtTVkc6OkVjbWFJbnRlcmZhY2U6OmluaGVyaXRlZERvY3VtZW50
Q2FzdChjb25zdCBPYmplY3RJbXAgKnAxKQpAQCAtMTc3NCw3ICsxNzc0LDcgQEAgT2JqZWN0SW1w
ICpTVkdEb2N1bWVudDo6YnJpZGdlKEV4ZWNTdGF0ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9N
UldCcmlkZ2U8U1ZHRG9jdW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0RvY3VtZW50OjpQcml2YXRl
ICo+KEtET006OkV2ZW50VGFyZ2V0OjpkKSk7CiB9CiAKLVZhbHVlIFNWR0RvY3VtZW50OjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0RvY3VtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdE
b2N1bWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQ6OlByaXZhdGUgKj4oS0RPTTo6RXZl
bnRUYXJnZXQ6OmQpKTsKIH0KQEAgLTE3ODcsNyArMTc4Nyw3IEBAIGJvb2wgU1ZHRWxlbWVudDo6
aGFzUHJvcGVydHkoRXhlY1N0YXRlICoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R0VsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxlbWVu
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0VmFsdWU8U1ZHRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAt
MTkwNyw3ICsxOTA3LDcgQEAgU1ZHRWxlbWVudCBLU1ZHOjp0b1NWR0VsZW1lbnQoS0pTOjpFeGVj
UwogICAgIHJldHVybiBTVkdFbGVtZW50OjpudWxsOwogfQogCi1WYWx1ZSBTVkdFbGVtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0VsZW1lbnQ6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoS0RPTTo6RWxl
bWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gS0RPTTo6RWxlbWVudDo6Z2V0KHAxLHAy
LHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xOTI3LDEwICsxOTI3LDEwIEBAIGJv
b2wgU1ZHRWxlbWVudDo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU9iamVjdCBTVkdFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K09iamVjdEltcCAqU1ZHRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3Rv
dHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0
dXJuIE5VTEw7CiB9CiAKIEtET006OkVsZW1lbnQgS1NWRzo6RWNtYUludGVyZmFjZTo6aW5oZXJp
dGVkRWxlbWVudENhc3QoY29uc3QgT2JqZWN0SW1wICpwMSkKQEAgLTE5NDcsNyArMTk0Nyw3IEBA
IE9iamVjdEltcCAqU1ZHRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAKICAgICByZXR1cm4gbmV3
IEtET006OkRPTVJXQnJpZGdlPFNWR0VsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0VsZW1lbnQ6
OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0VsZW1lbnQ+KHAxLHN0
YXRpY19jYXN0PFNWR0VsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTk2MCwxMiArMTk2
MCwxMiBAQCBib29sIFNWR0VsZW1lbnRJbnN0YW5jZTo6aGFzUHJvcGVydHkoRXhlCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdFbGVtZW50SW5zdGFuY2U6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxlbWVudEluc3RhbmNlOjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdFbGVt
ZW50SW5zdGFuY2U+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZH
RWxlbWVudEluc3RhbmNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICBpZihLRE9NOjpFdmVudFRhcmdldDo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gS0RPTTo6RXZlbnRUYXJnZXQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwpAQCAtMTk4MCwxMCArMTk4MCwxMCBAQCBib29sIFNWR0VsZW1lbnRJbnN0YW5jZTo6
cHV0KFBVVF9NRVRIT0RfCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRWxlbWVu
dEluc3RhbmNlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZH
RWxlbWVudEluc3RhbmNlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpTVkdFbGVtZW50SW5zdGFuY2U6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtMTk5MSw3ICsxOTkxLDcgQEAgT2JqZWN0SW1wICpTVkdFbGVtZW50SW5z
dGFuY2U6OmJyaWRnZShFeAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRWxl
bWVudEluc3RhbmNlPihwMSxzdGF0aWNfY2FzdDxTVkdFbGVtZW50SW5zdGFuY2U6OlByaXZhdGUg
Kj4oZCkpOwogfQogCi1WYWx1ZSBTVkdFbGVtZW50SW5zdGFuY2U6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxlbWVudEluc3RhbmNlOjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdFbGVtZW50
SW5zdGFuY2U+KHAxLHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJbnN0YW5jZTo6UHJpdmF0ZSAqPihk
KSk7CiB9CkBAIC0yMDAwLDEyICsyMDAwLDEyIEBAIGJvb2wgU1ZHRWxlbWVudEluc3RhbmNlTGlz
dDo6aGFzUHJvcGVydHkKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRF
bnRyeSgmU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUp
IHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR0VsZW1lbnRJbnN0YW5jZUxpc3RQ
cm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHRWxlbWVudEluc3RhbmNlTGlzdFByb3Rv
OjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1
ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxlbWVudEluc3RhbmNl
TGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9v
a3VwR2V0PFNWR0VsZW1lbnRJbnN0YW5jZUxpc3RQcm90b0Z1bmMsU1ZHRWxlbWVudEluc3RhbmNl
TGlzdD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjAxNywxOCArMjAxNywx
OCBAQCBTVkdFbGVtZW50SW5zdGFuY2VMaXN0IFNWR0VsZW1lbnRJbnN0YW5jCiAgICAgcmV0dXJu
IFNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6Om51bGw7CiB9CiAKLVZhbHVlIFNWR0VsZW1lbnRJbnN0
YW5jZUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdFbGVtZW50SW5zdGFuY2VMaXN0UHJvdG86OnNl
bGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdl
dChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0VsZW1lbnRJbnN0YW5jZUxpc3RQ
cm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLU9iamVjdCBTVkdFbGVtZW50SW5zdGFuY2VMaXN0Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdFbGVt
ZW50SW5zdGFuY2VMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRWxl
bWVudEluc3RhbmNlTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMDM2LDcg
KzIwMzYsNyBAQCBPYmplY3RJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6OmJyaWRnCiAgICAg
cmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHRWxlbWVudEluc3RhbmNlTGlzdD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAK
LVZhbHVlIFNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRWxlbWVudEluc3Rh
bmNlTGlzdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CkBAIC0yMDU0LDEyICsyMDU0LDEyIEBAIGJvb2wgU1ZHRWxsaXBzZUVsZW1l
bnQ6Omhhc1Byb3BlcnR5KEV4ZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0Vs
bGlwc2VFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0Vs
bGlwc2VFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdFbGxpcHNlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdFbGxpcHNlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGxpcHNlRWxlbWVudDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlm
KFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC0yMDgzLDEw
ICsyMDgzLDEwIEBAIGJvb2wgU1ZHRWxsaXBzZUVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0EKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdFbGxpcHNlRWxlbWVudDo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0VsbGlwc2VFbGVtZW50Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRl
cnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6
ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpT
VkdFbGxpcHNlRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMDk0LDcg
KzIwOTQsNyBAQCBPYmplY3RJbXAgKlNWR0VsbGlwc2VFbGVtZW50OjpicmlkZ2UoRXhlCiAgICAg
cmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdFbGxpcHNlRWxlbWVudD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHRWxsaXBzZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdF
bGxpcHNlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdF
bGxpcHNlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRWxsaXBzZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNW
R0VsbGlwc2VFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIxMDcsMTIgKzIxMDcsMTIg
QEAgYm9vbCBTVkdFdmVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotVmFsdWUgU1ZHRXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHRXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0V2ZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CiAKLVZhbHVlIFNWR0V2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR0V2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKEtET006OkV2ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBLRE9NOjpFdmVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBA
IC0yMTI0LDEwICsyMTI0LDEwIEBAIGJvb2wgU1ZHRXZlbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1Mp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRXZlbnQ6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdFdmVudDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVp
bHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51
bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRXZlbnQ6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjEzNSw3ICsyMTM1LDcgQEAgT2JqZWN0SW1wICpT
VkdFdmVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldC
cmlkZ2U8U1ZHRXZlbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0V2ZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgU1ZHRXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHRXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006OmNhY2hlRE9NT2JqZWN0PFNWR0V2ZW50PihwMSxzdGF0aWNfY2FzdDxTVkdFdmVudDo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC0yMTQ4LDIxICsyMTQ4LDIxIEBAIGJvb2wgU1ZHRXhjZXB0aW9u
OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R0V4Y2VwdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdFeGNl
cHRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldFZhbHVlPFNWR0V4Y2VwdGlvbj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBTVkdFeGNlcHRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHRXhjZXB0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHRXhjZXB0aW9uOjpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRXhjZXB0aW9uOjpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRl
cnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6
ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpT
VkdFeGNlcHRpb246OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjE3MCw3ICsyMTcw
LDcgQEAgT2JqZWN0SW1wICpTVkdFeGNlcHRpb246OmJyaWRnZShFeGVjU3RhdAogICAgIHJldHVy
biBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR0V4Y2VwdGlvbj4ocDEsc3RhdGljX2Nhc3Q8U1ZHRXhj
ZXB0aW9uOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHRXhjZXB0aW9uOjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0V4Y2VwdGlvbjo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZH
RXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxTVkdFeGNlcHRpb246OlByaXZhdGUgKj4oaW1wbCkp
OwogfQpAQCAtMjE4MywyMSArMjE4MywyMSBAQCBib29sIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6Omhhc1ByCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBR
X1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitP
YmplY3RJbXAgKlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1
aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjIwNSw3ICsy
MjA1LDcgQEAgT2JqZWN0SW1wICpTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOgogICAgIHJl
dHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ+KHAx
LHN0YXRpY19jYXN0PFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OlByaXZhdGUgKj4oaW1w
bCkpOwogfQogCi1WYWx1ZSBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9N
T2JqZWN0PFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ+KHAxLHN0YXRpY19jYXN0PFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMjIxOSwx
MiArMjIxOSwxMiBAQCBib29sIFNWR0ZFQmxlbmRFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdGRUJsZW5kRWxlbWVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUJsZW5kRWxlbWVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
RkVCbGVuZEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUg
U1ZHRkVCbGVuZEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHRkVCbGVuZEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAyLHAzKTsKQEAgLTIyNDAsMTAgKzIyNDAs
MTAgQEAgYm9vbCBTVkdGRUJsZW5kRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFQmxlbmRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRkVCbGVuZEVsZW1lbnQ6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ZFQmxl
bmRFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIyNTEsNyArMjI1MSw3
IEBAIE9iamVjdEltcCAqU1ZHRkVCbGVuZEVsZW1lbnQ6OmJyaWRnZShFeGUKICAgICByZXR1cm4g
bmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZFQmxlbmRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxT
VkdGRUJsZW5kRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0ZFQmxlbmRF
bGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFQmxlbmRF
bGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpj
YWNoZURPTU9iamVjdDxTVkdGRUJsZW5kRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVCbGVu
ZEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjI2NSwxMiArMjI2NSwxMiBAQCBib29s
IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpoYXNQcm9wZXJ0CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1WYWx1ZSBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUg
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAyLHAzKTsKQEAgLTIy
ODYsMTAgKzIyODYsMTAgQEAgYm9vbCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cHV0KFBVVF9N
RQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRl
ICpwMSkgY29uc3QKQEAgLTIyOTcsNyArMjI5Nyw3IEBAIE9iamVjdEltcCAqU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQ6OmJyaWQKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUNvbG9yTWF0cml4RWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNo
ZURPTU9iamVjdDxTVkdGRUNvbG9yTWF0cml4RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjMxMSwxMiArMjMxMSwx
MiBAQCBib29sIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpoYXNQCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9v
a3VwR2V0VmFsdWU8U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxl
bWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAyLHAzKTsKQEAgLTIzMzIsMTAgKzIzMzIsMTAgQEAg
Ym9vbCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6cHV0KAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotT2JqZWN0IFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRl
ICpwMSkgY29uc3QKQEAgLTIzNDMsNyArMjM0Myw3IEBAIE9iamVjdEltcCAqU1ZHRkVDb21wb25l
bnRUcmFuc2ZlckVsZW1lbnQKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUNvbXBvbmVudFRy
YW5zZmVyRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0ZFQ29tcG9uZW50
VHJhbnNmZXJFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OlBy
aXZhdGUgKj4oZCkpOwogfQpAQCAtMjM1NywxMiArMjM1NywxMiBAQCBib29sIFNWR0ZFQ29tcG9z
aXRlRWxlbWVudDo6aGFzUHJvcGVydHkoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ+KHAx
LHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRkVDb21wb3NpdGVFbGVt
ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50
OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpnZXQocDEscDIscDMpOwpAQCAtMjM3OCwxMCArMjM3OCwxMCBAQCBib29s
IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6cHV0KFBVVF9NRVRICiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgU1ZHRkVDb21wb3NpdGVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqU1ZHRkVDb21wb3NpdGVFbGVtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjM4OSw3ICsyMzg5
LDcgQEAgT2JqZWN0SW1wICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmJyaWRnZQogICAgIHJldHVy
biBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVDb21wb3NpdGVFbGVtZW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ+KHAx
LHN0YXRpY19jYXN0PFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBA
IC0yNDAzLDEyICsyNDAzLDEyIEBAIGJvb2wgU1ZHRkVGbG9vZEVsZW1lbnQ6Omhhc1Byb3BlcnR5
KEV4ZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZFRmxvb2RFbGVtZW50Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFRmxvb2RFbGVtZW50Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRW
YWx1ZTxTVkdGRUZsb29kRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQog
Ci1WYWx1ZSBTVkdGRUZsb29kRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpTVkdGRUZsb29kRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpnZXQocDEscDIscDMpOwpAQCAtMjQyNCwx
MCArMjQyNCwxMCBAQCBib29sIFNWR0ZFRmxvb2RFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRkVGbG9vZEVsZW1lbnQ6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGRUZsb29kRWxlbWVudDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
U1ZHRkVGbG9vZEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjQzNSw3
ICsyNDM1LDcgQEAgT2JqZWN0SW1wICpTVkdGRUZsb29kRWxlbWVudDo6YnJpZGdlKEV4ZQogICAg
IHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVGbG9vZEVsZW1lbnQ+KHAxLHN0YXRp
Y19jYXN0PFNWR0ZFRmxvb2RFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZH
RkVGbG9vZEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
RkVGbG9vZEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZFRmxvb2RFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxT
VkdGRUZsb29kRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yNDQ0LDE0ICsyNDQ0LDE0
IEBAIGJvb2wgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpoYXNQcm9wZXIKIHsKICAgICBjb25z
dCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0
IHByb3RvID0gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlm
KHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpw
cm90byA9IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihw
cm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdFbGVtZW50
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldDxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnRQcm90b0Z1bmMsU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0yNDYzLDEwICsy
NDYzLDEwIEBAIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudCBTVkdGRUdhdXNzaWFuQmwKICAgICBy
ZXR1cm4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpudWxsOwogfQogCi1WYWx1ZSBTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAg
aWYoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldChwMSxw
MixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMjQ4MSwxMCArMjQ4MSwxMCBAQCBi
b29sIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6cHV0KFBVVF9NCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1PYmplY3QgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNDky
LDcgKzI0OTIsNyBAQCBPYmplY3RJbXAgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6YnJpCiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ+
KHAxLHN0YXRpY19jYXN0PFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI1MDksMTIgKzI1MDksMTIgQEAgYm9vbCBTVkdG
RUltYWdlRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgU1ZHRkVJbWFnZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRkVJbWFnZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0ZFSW1hZ2VFbGVtZW50PihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0ZFSW1hZ2VFbGVtZW50OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFSW1hZ2VFbGVt
ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0Vs
ZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixw
Myk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsK
QEAgLTI1MzcsMTAgKzI1MzcsMTAgQEAgYm9vbCBTVkdGRUltYWdlRWxlbWVudDo6cHV0KFBVVF9N
RVRIT0RfQQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFSW1hZ2VFbGVtZW50
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRkVJbWFnZUVs
ZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlNWR0ZFSW1hZ2VFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QK
QEAgLTI1NDgsNyArMjU0OCw3IEBAIE9iamVjdEltcCAqU1ZHRkVJbWFnZUVsZW1lbnQ6OmJyaWRn
ZShFeGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZFSW1hZ2VFbGVtZW50
PihwMSxzdGF0aWNfY2FzdDxTVkdGRUltYWdlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAK
LVZhbHVlIFNWR0ZFSW1hZ2VFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKlNWR0ZFSW1hZ2VFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdGRUltYWdlRWxlbWVudD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHRkVJbWFnZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjU2Miwx
MiArMjU2MiwxMiBAQCBib29sIFNWR0ZFTWVyZ2VFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdGRU1lcmdlRWxlbWVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRU1lcmdlRWxlbWVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
RkVNZXJnZUVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUg
U1ZHRkVNZXJnZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHRkVNZXJnZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAyLHAzKTsKQEAgLTI1ODMsMTAgKzI1ODMs
MTAgQEAgYm9vbCBTVkdGRU1lcmdlRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFTWVyZ2VFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRkVNZXJnZUVsZW1lbnQ6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ZFTWVy
Z2VFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI1OTQsNyArMjU5NCw3
IEBAIE9iamVjdEltcCAqU1ZHRkVNZXJnZUVsZW1lbnQ6OmJyaWRnZShFeGUKICAgICByZXR1cm4g
bmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZFTWVyZ2VFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxT
VkdGRU1lcmdlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0ZFTWVyZ2VF
bGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFTWVyZ2VF
bGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpj
YWNoZURPTU9iamVjdDxTVkdGRU1lcmdlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVNZXJn
ZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjYwNywxMiArMjYwNywxMiBAQCBib29s
IFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6aGFzUHJvcGVydHkoCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1WYWx1ZSBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGRU1lcmdlTm9k
ZUVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRkVN
ZXJnZU5vZGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAg
LTI2MjcsMTAgKzI2MjcsMTAgQEAgYm9vbCBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OnB1dChQVVRf
TUVUSAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFTWVyZ2VOb2RlRWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0ZFTWVyZ2VO
b2RlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIE9iamVjdEltcCAqU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpw
MSkgY29uc3QKQEAgLTI2MzgsNyArMjYzOCw3IEBAIE9iamVjdEltcCAqU1ZHRkVNZXJnZU5vZGVF
bGVtZW50OjpicmlkZ2UKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZFTWVy
Z2VOb2RlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8
U1ZHRkVNZXJnZU5vZGVFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRU1lcmdlTm9kZUVsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjY1MiwxMiArMjY1MiwxMiBAQCBib29sIFNWR0ZF
T2Zmc2V0RWxlbWVudDo6aGFzUHJvcGVydHkoRXhlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
YWx1ZSBTVkdGRU9mZnNldEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRkVPZmZzZXRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGRU9mZnNldEVsZW1lbnQ+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRkVPZmZzZXRFbGVtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFT2Zmc2V0
RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihT
VkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEs
cDIscDMpOwogICAgIGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpnZXQocDEscDIscDMpOwpAQCAtMjY3MywxMCArMjY3MywxMCBAQCBib29sIFNWR0ZFT2Zm
c2V0RWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmpl
Y3QgU1ZHRkVPZmZzZXRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHRkVPZmZzZXRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0
UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdGRU9mZnNldEVsZW1lbnQ6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjY4NCw3ICsyNjg0LDcgQEAgT2JqZWN0SW1wICpT
VkdGRU9mZnNldEVsZW1lbnQ6OmJyaWRnZShFeAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldC
cmlkZ2U8U1ZHRkVPZmZzZXRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRU9mZnNldEVsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdGRU9mZnNldEVsZW1lbnQ6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVPZmZzZXRFbGVtZW50OjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVj
dDxTVkdGRU9mZnNldEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFT2Zmc2V0RWxlbWVudDo6
UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yNjk4LDEyICsyNjk4LDEyIEBAIGJvb2wgU1ZHRkVUaWxl
RWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVl
IFNWR0ZFVGlsZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHRkVUaWxlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRkVUaWxlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdGRVRpbGVFbGVtZW50OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFVGlsZUVsZW1lbnQ6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBp
ZihTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAy
LHAzKTsKQEAgLTI3MTksMTAgKzI3MTksMTAgQEAgYm9vbCBTVkdGRVRpbGVFbGVtZW50OjpwdXQo
UFVUX01FVEhPRF9BUgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFVGlsZUVs
ZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGRVRp
bGVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdGRVRpbGVFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTI3MzAsNyArMjczMCw3IEBAIE9iamVjdEltcCAqU1ZHRkVUaWxlRWxlbWVudDo6YnJp
ZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZFVGlsZUVsZW1l
bnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFVGlsZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQog
Ci1WYWx1ZSBTVkdGRVRpbGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKlNWR0ZFVGlsZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZFVGlsZUVsZW1lbnQ+KHAxLHN0YXRp
Y19jYXN0PFNWR0ZFVGlsZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjc0NCwxMiAr
Mjc0NCwxMiBAQCBib29sIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6Omhhc1Byb3BlcnR5CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZh
bHVlPFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KIAotVmFsdWUgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYo
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldChwMSxwMixw
Myk7CkBAIC0yNzY1LDEwICsyNzY1LDEwIEBAIGJvb2wgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6
cHV0KFBVVF9NRVQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlw
ZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNzc2LDcgKzI3NzYsNyBAQCBPYmplY3RJbXAgKlNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6OmJyaWRnCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRn
ZTxTVkdGRVR1cmJ1bGVuY2VFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRVR1cmJ1bGVuY2VF
bGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdGRVR1cmJ1bGVuY2VF
bGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpj
YWNoZURPTU9iamVjdDxTVkdGRVR1cmJ1bGVuY2VFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI3ODUsOCArMjc4NSw4
IEBAIGJvb2wgU1ZHRmlsdGVyRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1MKIHsKICAgICBjb25z
dCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHRmlsdGVyRWxlbWVudDo6c19o
YXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9
IFNWR0ZpbHRlckVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHRmlsdGVy
RWxlbWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiB0cnVlOwpAQCAtMjc5NSw3ICsyNzk1LDcgQEAgYm9vbCBTVkdGaWx0
ZXJFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgU1ZHRmlsdGVyRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdGaWx0ZXJFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJl
dHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHRmlsdGVyRWxlbWVudFByb3RvRnVuYyxTVkdGaWx0ZXJF
bGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0yODA3LDEwICsyODA3
LDEwIEBAIFNWR0ZpbHRlckVsZW1lbnQgU1ZHRmlsdGVyRWxlbWVudFByb3RvRnUKICAgICByZXR1
cm4gU1ZHRmlsdGVyRWxlbWVudDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHRmlsdGVyRWxlbWVudDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGaWx0ZXJF
bGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVj
dCBwcm90byA9IFNWR0ZpbHRlckVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gU1ZHRmlsdGVyRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90
by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYo
U1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAx
LHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIs
cDMpOwogICAgIGlmKFNWR0xhbmdTcGFjZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZH
TGFuZ1NwYWNlOjpnZXQocDEscDIscDMpOwpAQCAtMjgzMiwxMCArMjgzMiwxMCBAQCBib29sIFNW
R0ZpbHRlckVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1PYmplY3QgU1ZHRmlsdGVyRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR0ZpbHRlckVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHRmlsdGVyRWxlbWVudFByb3RvOjpzZWxmKHAx
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ZpbHRlckVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtMjg0Myw3ICsyODQzLDcgQEAgT2JqZWN0SW1wICpTVkdGaWx0ZXJFbGVt
ZW50OjpicmlkZ2UoRXhlYwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRmls
dGVyRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIFNWR0ZpbHRlckVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHRmlsdGVyRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRmlsdGVyRWxlbWVudD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0y
ODU2LDIxICsyODU2LDIxIEBAIGJvb2wgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1W
YWx1ZSBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IGlmKFNWR1N0eWxhYmxlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdTdHlsYWJsZTo6
Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEt
PmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC0yODc4LDcgKzI4NzgsNyBAQCBPYmplY3RJbXAgKlNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihwMSxzdGF0aWNfY2FzdDxTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1
ZSBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURP
TU9iamVjdDxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KHAxLHN0YXRpY19j
YXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6UHJpdmF0ZSAqPihpbXBs
KSk7CiB9CkBAIC0yODkxLDIxICsyODkxLDIxIEBAIGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpoYXNQ
cm9wZXJ0eShFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZpdFRvVmll
d0JveDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGaXRUb1ZpZXdC
b3g6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1
cEdldFZhbHVlPFNWR0ZpdFRvVmlld0JveD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBTVkdGaXRUb1ZpZXdCb3g6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHRml0VG9WaWV3Qm94OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNF
RChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHRml0VG9WaWV3
Qm94Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRml0VG9W
aWV3Qm94Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpTVkdGaXRUb1ZpZXdCb3g6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtMjkxMyw3ICsyOTEzLDcgQEAgT2JqZWN0SW1wICpTVkdGaXRUb1ZpZXdCb3g6OmJyaWRnZShF
eGVjUwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR0ZpdFRvVmlld0JveD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHRml0VG9WaWV3Qm94OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFs
dWUgU1ZHRml0VG9WaWV3Qm94OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KlNWR0ZpdFRvVmlld0JveDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRml0VG9WaWV3Qm94PihwMSxzdGF0aWNfY2FzdDxT
VkdGaXRUb1ZpZXdCb3g6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMjkzMSwxMiArMjkzMSwx
MiBAQCBib29sIFNWR0dFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdHRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdHRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHR0VsZW1lbnQ+KHAxLHAyLCZzX2hh
c2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHR0VsZW1lbnQ6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHR0VsZW1lbnQ6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtMjk2MCwxMCArMjk2
MCwxMCBAQCBib29sIFNWR0dFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUkdTKQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0dFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqU1ZHR0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5P
YmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkp
OworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0dFbGVtZW50OjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI5NzEsNyArMjk3MSw3IEBAIE9iamVjdEltcCAqU1ZH
R0VsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJp
ZGdlPFNWR0dFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdHRWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIFNWR0dFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlNWR0dFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdHRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHR0VsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjk4NywxMiArMjk4NywxMiBAQCBi
b29sIFNWR0dyYWRpZW50RWxlbWVudDo6aGFzUHJvcGVydHkoRXhlCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBTVkdHcmFkaWVudEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHR3JhZGllbnRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdHcmFkaWVudEVsZW1l
bnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHR3JhZGllbnRF
bGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R0dyYWRpZW50RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50
OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omdl
dChwMSxwMixwMyk7CkBAIC0zMDEwLDEwICszMDEwLDEwIEBAIGJvb2wgU1ZHR3JhZGllbnRFbGVt
ZW50OjpwdXQoUFVUX01FVEhPRF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdH
cmFkaWVudEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpTVkdHcmFkaWVudEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5
cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVy
biBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0dyYWRpZW50RWxlbWVudDo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC0zMDIxLDcgKzMwMjEsNyBAQCBPYmplY3RJbXAgKlNWR0dyYWRp
ZW50RWxlbWVudDo6YnJpZGdlKEV4CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxT
VkdHcmFkaWVudEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0dyYWRpZW50RWxlbWVudDo6UHJp
dmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0dyYWRpZW50RWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdHcmFkaWVudEVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0dy
YWRpZW50RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHR3JhZGllbnRFbGVtZW50OjpQcml2YXRl
ICo+KGQpKTsKIH0KQEAgLTMwNDAsMTIgKzMwNDAsMTIgQEAgYm9vbCBTVkdJbWFnZUVsZW1lbnQ6
Omhhc1Byb3BlcnR5KEV4ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHSW1h
Z2VFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ltYWdl
RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6
bG9va3VwR2V0VmFsdWU8U1ZHSW1hZ2VFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CiAKLVZhbHVlIFNWR0ltYWdlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdJbWFnZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtMzA3MCwxMCArMzA3MCwxMCBA
QCBib29sIFNWR0ltYWdlRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVJHCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1PYmplY3QgU1ZHSW1hZ2VFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqU1ZHSW1hZ2VFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWls
dGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVs
bCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdJbWFnZUVsZW1lbnQ6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzA4MSw3ICszMDgxLDcgQEAgT2JqZWN0
SW1wICpTVkdJbWFnZUVsZW1lbnQ6OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NUldCcmlkZ2U8U1ZHSW1hZ2VFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdJbWFnZUVsZW1lbnQ6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHSW1hZ2VFbGVtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdJ
bWFnZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CkBAIC0zMDk0LDEyICszMDk0LDEyIEBAIGJvb2wgU1ZHTGFuZ1NwYWNlOjpoYXNQcm9w
ZXJ0eShFeGVjU3RhdGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0xhbmdTcGFj
ZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdMYW5nU3BhY2U6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZh
bHVlPFNWR0xhbmdTcGFjZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1
ZSBTVkdMYW5nU3BhY2U6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHTGFuZ1NwYWNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzExNiwxMCArMzExNiwxMCBAQCBib29sIFNWR0xhbmdTcGFj
ZTo6cHV0SW5QYXJlbnRzKFBVVF9NRVRICiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
U1ZHTGFuZ1NwYWNlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAq
U1ZHTGFuZ1NwYWNlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpTVkdMYW5nU3BhY2U6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtMzEyNyw3ICszMTI3LDcgQEAgT2JqZWN0SW1wICpTVkdMYW5nU3BhY2U6OmJyaWRnZShF
eGVjU3RhdAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHTGFuZ1NwYWNlPihw
MSxzdGF0aWNfY2FzdDxTVkdMYW5nU3BhY2U6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1
ZSBTVkdMYW5nU3BhY2U6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
TGFuZ1NwYWNlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
OjpjYWNoZURPTU9iamVjdDxTVkdMYW5nU3BhY2U+KHAxLHN0YXRpY19jYXN0PFNWR0xhbmdTcGFj
ZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0zMTM2LDEyICszMTM2LDEyIEBAIGJvb2wgU1ZH
TGVuZ3RoOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAKIHsKICAgICBjb25zdCBIYXNoRW50cnkg
KmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHTGVuZ3RoOjpzX2hhc2hUYWJsZSxwMik7CiAgICAg
aWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHTGVuZ3RoUHJvdG86OnNl
bGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7Cisg
ICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0xlbmd0aFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihw
cm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIFNWR0xlbmd0aDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdMZW5ndGg6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006Omxvb2t1cEdldDxTVkdMZW5ndGhQcm90b0Z1bmMsU1ZHTGVuZ3RoPihwMSxwMiwmc19o
YXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zMTU4LDEwICszMTU4LDEwIEBAIFNWR0xlbmd0aCBL
U1ZHOjp0b1NWR0xlbmd0aChLSlM6OkV4ZWNTdGEKICAgICByZXR1cm4gU1ZHTGVuZ3RoOjpudWxs
OwogfQogCi1WYWx1ZSBTVkdMZW5ndGg6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHTGVuZ3RoOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR0xlbmd0aFByb3RvOjpzZWxmKHAxKTsKLSAg
ICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOwor
ICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdMZW5ndGhQcm90bzo6c2VsZihwMSk7CisgICAgaWYo
cHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAg
IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0zMTc3LDEwICsz
MTc3LDEwIEBAIGJvb2wgU1ZHTGVuZ3RoOjpwdXRJblBhcmVudHMoUFVUX01FVEhPRF8KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdMZW5ndGg6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdMZW5ndGg6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHTGVuZ3RoUHJvdG86OnNlbGYocDEpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqU1ZHTGVuZ3RoOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QK
QEAgLTMxODgsNyArMzE4OCw3IEBAIE9iamVjdEltcCAqU1ZHTGVuZ3RoOjpicmlkZ2UoRXhlY1N0
YXRlICoKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0xlbmd0aD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHTGVuZ3RoOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHTGVu
Z3RoOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0xlbmd0aDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmpl
Y3Q8U1ZHTGVuZ3RoPihwMSxzdGF0aWNfY2FzdDxTVkdMZW5ndGg6OlByaXZhdGUgKj4oaW1wbCkp
OwogfQpAQCAtMzE5NywxMiArMzE5NywxMiBAQCBib29sIFNWR0xlbmd0aExpc3Q6Omhhc1Byb3Bl
cnR5KEV4ZWNTdGF0CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50
cnkoJlNWR0xlbmd0aExpc3Q6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1
ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdMZW5ndGhMaXN0UHJvdG86OnNlbGYocDEpOwotICAg
IGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1w
ICpwcm90byA9IFNWR0xlbmd0aExpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
YWx1ZSBTVkdMZW5ndGhMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR0xlbmd0aExpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006Omxvb2t1cEdldDxTVkdMZW5ndGhMaXN0UHJvdG9GdW5jLFNWR0xlbmd0aExpc3Q+KHAx
LHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTMyMTQsMTggKzMyMTQsMTggQEAgU1ZH
TGVuZ3RoTGlzdCBTVkdMZW5ndGhMaXN0UHJvdG9GdW5jOjpjYQogICAgIHJldHVybiBTVkdMZW5n
dGhMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBTVkdMZW5ndGhMaXN0OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0xlbmd0aExpc3Q6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHTGVuZ3Ro
TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdMZW5ndGhM
aXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHTGVuZ3RoTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0xlbmd0aExpc3Q6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHTGVuZ3RoTGlzdFByb3RvOjpz
ZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0xlbmd0aExpc3Q6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtMzIzMyw3ICszMjMzLDcgQEAgT2JqZWN0SW1wICpTVkdMZW5ndGhM
aXN0OjpicmlkZ2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR0xl
bmd0aExpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR0xlbmd0aExpc3Q6OlByaXZhdGUgKj4oaW1wbCkp
OwogfQogCi1WYWx1ZSBTVkdMZW5ndGhMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlNWR0xlbmd0aExpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0xlbmd0aExpc3Q+KHAxLHN0YXRpY19j
YXN0PFNWR0xlbmd0aExpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMzI1MSwxMiArMzI1
MSwxMiBAQCBib29sIFNWR0xpbmVFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdMaW5lRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdMaW5lRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHTGluZUVsZW1lbnQ+
KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHTGluZUVsZW1lbnQ6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGluZUVs
ZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZH
RWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAy
LHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMp
OwpAQCAtMzI4MCwxMCArMzI4MCwxMCBAQCBib29sIFNWR0xpbmVFbGVtZW50OjpwdXQoUFVUX01F
VEhPRF9BUkdTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHTGluZUVsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdMaW5lRWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBw
MS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqU1ZHTGluZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzI5
MSw3ICszMjkxLDcgQEAgT2JqZWN0SW1wICpTVkdMaW5lRWxlbWVudDo6YnJpZGdlKEV4ZWNTdAog
ICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHTGluZUVsZW1lbnQ+KHAxLHN0YXRp
Y19jYXN0PFNWR0xpbmVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHTGlu
ZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGluZUVs
ZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNh
Y2hlRE9NT2JqZWN0PFNWR0xpbmVFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdMaW5lRWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zMzA0LDEyICszMzA0LDEyIEBAIGJvb2wgU1ZHTGlu
ZWFyR3JhZGllbnRFbGVtZW50OjpoYXNQcm9wZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0xpbmVhckdyYWRp
ZW50RWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdM
aW5lYXJHcmFkaWVudEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0dyYWRpZW50RWxlbWVudDo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gU1ZHR3JhZGllbnRFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTMzMjQsMTAgKzMzMjQsMTAgQEAgYm9vbCBTVkdMaW5l
YXJHcmFkaWVudEVsZW1lbnQ6OnB1dChQVVRfTQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2Jq
ZWN0IFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitPYmplY3RJbXAgKlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTMzMzUsNyArMzMz
NSw3IEBAIE9iamVjdEltcCAqU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpicmkKICAgICByZXR1
cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0xpbmVhckdyYWRpZW50RWxlbWVudD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OlBy
aXZhdGUgKj4oZCkpOwogfQpAQCAtMzM0NCwxMiArMzM0NCwxMiBAQCBib29sIFNWR0xvY2F0YWJs
ZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9v
a3VwOjpmaW5kRW50cnkoJlNWR0xvY2F0YWJsZTo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUp
IHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR0xvY2F0YWJsZVByb3RvOjpzZWxm
KHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAg
IE9iamVjdEltcCAqcHJvdG8gPSBTVkdMb2NhdGFibGVQcm90bzo6c2VsZihwMSk7CisgICAgaWYo
cHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBTVkdMb2NhdGFibGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHTG9jYXRhYmxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHTG9jYXRhYmxlUHJvdG9GdW5jLFNWR0xvY2F0YWJs
ZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzM5NSwxOCArMzM5NSwxOCBA
QCBTVkdMb2NhdGFibGUgU1ZHTG9jYXRhYmxlUHJvdG9GdW5jOjpjYXN0CiAgICAgcmV0dXJuIFNW
R0xvY2F0YWJsZTo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHTG9jYXRhYmxlOjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0xvY2F0YWJsZTo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdMb2Nh
dGFibGVQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHTG9jYXRh
YmxlUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHTG9jYXRhYmxlOjpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHTG9jYXRhYmxlOjpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR0xvY2F0YWJsZVByb3RvOjpzZWxm
KHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVy
biBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0xvY2F0YWJsZTo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CkBAIC0zNDE0LDcgKzM0MTQsNyBAQCBPYmplY3RJbXAgKlNWR0xvY2F0YWJsZTo6
YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHTG9jYXRh
YmxlPihwMSxzdGF0aWNfY2FzdDxTVkdMb2NhdGFibGU6OlByaXZhdGUgKj4oaW1wbCkpOwogfQog
Ci1WYWx1ZSBTVkdMb2NhdGFibGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHTG9jYXRhYmxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdMb2NhdGFibGU+KHAxLHN0YXRpY19jYXN0PFNWR0xv
Y2F0YWJsZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0zNDIzLDggKzM0MjMsOCBAQCBib29s
IFNWR01hcmtlckVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTCiB7CiAgICAgY29uc3QgSGFzaEVu
dHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR01hcmtlckVsZW1lbnQ6OnNfaGFzaFRhYmxl
LHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdNYXJr
ZXJFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR01hcmtlckVsZW1lbnRQ
cm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHRydWU7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1
ZTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0ZpdFRvVmlld0JveDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKQEAgLTM0MzMsNyArMzQzMyw3IEBAIGJvb2wgU1ZHTWFya2VyRWxl
bWVudDo6aGFzUHJvcGVydHkoRXhlY1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R01hcmtlckVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
TWFya2VyRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6bG9va3VwR2V0PFNWR01hcmtlckVsZW1lbnRQcm90b0Z1bmMsU1ZHTWFya2VyRWxlbWVu
dD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzQ0NSwxMCArMzQ0NSwxMCBA
QCBTVkdNYXJrZXJFbGVtZW50IFNWR01hcmtlckVsZW1lbnRQcm90b0Z1CiAgICAgcmV0dXJuIFNW
R01hcmtlckVsZW1lbnQ6Om51bGw7CiB9CiAKLVZhbHVlIFNWR01hcmtlckVsZW1lbnQ6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTWFya2VyRWxlbWVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJv
dG8gPSBTVkdNYXJrZXJFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpw
cm90byA9IFNWR01hcmtlckVsZW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKFNWR0Vs
ZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixw
Myk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsK
ICAgICBpZihTVkdGaXRUb1ZpZXdCb3g6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0Zp
dFRvVmlld0JveDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTM0NzAsMTAgKzM0NzAsMTAgQEAgYm9vbCBT
VkdNYXJrZXJFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotT2JqZWN0IFNWR01hcmtlckVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpTVkdNYXJrZXJFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR01hcmtlckVsZW1lbnRQcm90bzo6c2VsZihw
MSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4g
TlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdNYXJrZXJFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRl
ICpwMSkgY29uc3QKQEAgLTM0ODEsNyArMzQ4MSw3IEBAIE9iamVjdEltcCAqU1ZHTWFya2VyRWxl
bWVudDo6YnJpZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR01h
cmtlckVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQ6OlByaXZhdGUgKj4o
ZCkpOwogfQogCi1WYWx1ZSBTVkdNYXJrZXJFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKlNWR01hcmtlckVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR01hcmtlckVsZW1lbnQ+
KHAxLHN0YXRpY19jYXN0PFNWR01hcmtlckVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAt
MzQ5MCwxMiArMzQ5MCwxMiBAQCBib29sIFNWR01hdHJpeDo6aGFzUHJvcGVydHkoRXhlY1N0YXRl
ICpwCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR01h
dHJpeDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVj
dCBwcm90byA9IFNWR01hdHJpeFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdNYXRy
aXhQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdNYXRyaXg6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTWF0cml4OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHTWF0cml4UHJv
dG9GdW5jLFNWR01hdHJpeD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzUx
MiwxMCArMzUxMiwxMCBAQCBTVkdNYXRyaXggS1NWRzo6dG9TVkdNYXRyaXgoS0pTOjpFeGVjU3Rh
CiAgICAgcmV0dXJuIFNWR01hdHJpeDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHTWF0cml4OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR01hdHJpeDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBT
VkdNYXRyaXhQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHTWF0
cml4UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQpAQCAtMzUzMSwxMCArMzUzMSwxMCBAQCBib29sIFNWR01hdHJpeDo6cHV0
SW5QYXJlbnRzKFBVVF9NRVRIT0RfCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZH
TWF0cml4Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHTWF0
cml4Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IFNWR01hdHJpeFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR01hdHJpeDo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNTQyLDcgKzM1NDIsNyBAQCBPYmplY3RJ
bXAgKlNWR01hdHJpeDo6YnJpZGdlKEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpE
T01SV0JyaWRnZTxTVkdNYXRyaXg+KHAxLHN0YXRpY19jYXN0PFNWR01hdHJpeDo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR01hdHJpeDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpTVkdNYXRyaXg6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR01hdHJpeD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHTWF0cml4OjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTM1NTUsNyArMzU1NSw3IEBAIGJv
b2wgU1ZHTnVtYmVyOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIFNWR051bWJlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdOdW1iZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006Omxvb2t1cEdldFZhbHVlPFNWR051bWJlcj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQpAQCAtMzU2Nyw3ICszNTY3LDcgQEAgU1ZHTnVtYmVyIEtTVkc6OnRvU1ZHTnVtYmVy
KEtKUzo6RXhlY1N0YQogICAgIHJldHVybiBTVkdOdW1iZXI6Om51bGw7CiB9CiAKLVZhbHVlIFNW
R051bWJlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdOdW1iZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9V
TlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CkBAIC0zNTg0LDEwICszNTg0LDEwIEBAIGJvb2wgU1ZHTnVtYmVyOjpwdXRJblBhcmVu
dHMoUFVUX01FVEhPRF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdOdW1iZXI6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdOdW1iZXI6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmlu
dGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0
OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAg
KlNWR051bWJlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNTk1LDcgKzM1OTUs
NyBAQCBPYmplY3RJbXAgKlNWR051bWJlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdOdW1iZXI+KHAxLHN0YXRpY19jYXN0PFNWR051bWJl
cjo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR051bWJlcjo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdOdW1iZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR051bWJlcj4ocDEs
c3RhdGljX2Nhc3Q8U1ZHTnVtYmVyOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTM2MDQsMTIg
KzM2MDQsMTIgQEAgYm9vbCBTVkdOdW1iZXJMaXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogewog
ICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdOdW1iZXJMaXN0
OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHBy
b3RvID0gU1ZHTnVtYmVyTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdOdW1i
ZXJMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHTnVtYmVyTGlz
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdOdW1iZXJMaXN0Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8
U1ZHTnVtYmVyTGlzdFByb3RvRnVuYyxTVkdOdW1iZXJMaXN0PihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CkBAIC0zNjIxLDE4ICszNjIxLDE4IEBAIFNWR051bWJlckxpc3QgU1ZHTnVt
YmVyTGlzdFByb3RvRnVuYzo6Y2EKICAgICByZXR1cm4gU1ZHTnVtYmVyTGlzdDo6bnVsbDsKIH0K
IAotVmFsdWUgU1ZHTnVtYmVyTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdOdW1iZXJMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR051bWJlckxpc3RQcm90bzo6c2VsZihw
MSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAx
LHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHTnVtYmVyTGlzdFByb3RvOjpzZWxmKHAx
KTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChw
MSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
T2JqZWN0IFNWR051bWJlckxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpTVkdOdW1iZXJMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICBpZihwMSkgcmV0dXJuIFNWR051bWJlckxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpTVkdOdW1iZXJMaXN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTM2NDAsNyArMzY0MCw3IEBAIE9iamVjdEltcCAqU1ZHTnVtYmVyTGlzdDo6YnJpZGdlKEV4ZWNT
dGEKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdOdW1iZXJMaXN0PihwMSxzdGF0
aWNfY2FzdDxTVkdOdW1iZXJMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZH
TnVtYmVyTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdOdW1i
ZXJMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpj
YWNoZURPTU9iamVjdDxTVkdOdW1iZXJMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdOdW1iZXJMaXN0
OjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTM2NDksMTMgKzM2NDksMTMgQEAgYm9vbCBTVkdQ
YWludDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAq
ZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdQYWludDo6c19oYXNoVGFibGUscDIpOwogICAgIGlm
KGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR1BhaW50UHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IFNWR1BhaW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0NvbG9yOjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgU1ZHUGFpbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGFp
bnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1
cEdldDxTVkdQYWludFByb3RvRnVuYyxTVkdQYWludD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQpAQCAtMzY2NywxMCArMzY2NywxMCBAQCBTVkdQYWludCBTVkdQYWludFByb3RvRnVu
Yzo6Y2FzdChLSlM6OkV4CiAgICAgcmV0dXJuIFNWR1BhaW50OjpudWxsOwogfQogCi1WYWx1ZSBT
VkdQYWludDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdQYWludDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmpl
Y3QgcHJvdG8gPSBTVkdQYWludFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBTVkdQYWludFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoU1ZHQ29sb3I6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0NvbG9yOjpnZXQocDEscDIscDMpOwogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKIH0KQEAgLTM2ODQsMTAgKzM2ODQsMTAgQEAgYm9vbCBTVkdQYWludDo6
cHV0KFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQ
YWludDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhaW50
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNW
R1BhaW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51
bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGFpbnQ6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzY5NSw3ICszNjk1LDcgQEAgT2JqZWN0SW1wICpT
VkdQYWludDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldC
cmlkZ2U8U1ZHUGFpbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1BhaW50OjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgU1ZHUGFpbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUGFpbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006OmNhY2hlRE9NT2JqZWN0PFNWR1BhaW50PihwMSxzdGF0aWNfY2FzdDxTVkdQYWludDo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC0zNzA0LDggKzM3MDQsOCBAQCBib29sIFNWR1BhdGhFbGVtZW50
OjpoYXNQcm9wZXJ0eShFeGVjU3RhCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3Vw
OjpmaW5kRW50cnkoJlNWR1BhdGhFbGVtZW50OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkg
cmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHUGF0aEVsZW1lbnRQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAg
ICBPYmplY3RJbXAgKnByb3RvID0gU1ZHUGF0aEVsZW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAg
aWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHQW5p
bWF0ZWRQYXRoRGF0YTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihT
VkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CkBAIC0zNzE2LDcgKzM3MTYsNyBAQCBib29sIFNWR1BhdGhFbGVtZW50OjpoYXNQcm9wZXJ0eShF
eGVjU3RhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoRWxlbWVudDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoRWxlbWVudDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR1Bh
dGhFbGVtZW50UHJvdG9GdW5jLFNWR1BhdGhFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CkBAIC0zNzI4LDEwICszNzI4LDEwIEBAIFNWR1BhdGhFbGVtZW50IFNWR1BhdGhF
bGVtZW50UHJvdG9GdW5jOjoKICAgICByZXR1cm4gU1ZHUGF0aEVsZW1lbnQ6Om51bGw7CiB9CiAK
LVZhbHVlIFNWR1BhdGhFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BhdGhFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR1BhdGhFbGVtZW50UHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChw
MSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1BhdGhFbGVtZW50UHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBpZihTVkdBbmltYXRlZFBhdGhEYXRhOjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBTVkdBbmltYXRlZFBhdGhEYXRhOjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0Vs
ZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixw
Myk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsK
QEAgLTM3NTUsMTAgKzM3NTUsMTAgQEAgYm9vbCBTVkdQYXRoRWxlbWVudDo6cHV0KFBVVF9NRVRI
T0RfQVJHUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhFbGVtZW50Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aEVsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZH
UGF0aEVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoRWxl
bWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNzY2LDcgKzM3NjYsNyBAQCBP
YmplY3RJbXAgKlNWR1BhdGhFbGVtZW50OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBL
RE9NOjpET01SV0JyaWRnZTxTVkdQYXRoRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aEVs
ZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoRWxlbWVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoRWxlbWVudDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZH
UGF0aEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhFbGVtZW50OjpQcml2YXRlICo+KGQp
KTsKIH0KQEAgLTM3NzksNyArMzc3OSw3IEBAIGJvb2wgU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHko
RXhlY1N0YXRlICoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWc6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZzo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
UGF0aFNlZz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzgyOSwxNiArMzgy
OSwxNiBAQCBTVkdQYXRoU2VnIEtTVkc6OnRvU1ZHUGF0aFNlZyhLSlM6OkV4ZWNTCiAgICAgcmV0
dXJuIFNWR1BhdGhTZWc6Om51bGw7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWc6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZzo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VE
KHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0
IFNWR1BhdGhTZWc6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpT
VkdQYXRoU2VnOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdQYXRoU2VnOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTM4NDYsNyArMzg0Niw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZzo6YnJpZGdlKEV4ZWNTdGF0
ZSAKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdQYXRoU2VnPihwMSxzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNl
Zzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnOjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVj
dDxTVkdQYXRoU2VnPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnOjpQcml2YXRlICo+KGltcGwp
KTsKIH0KQEAgLTM4NTksMTIgKzM4NTksMTIgQEAgYm9vbCBTVkdQYXRoU2VnQXJjQWJzOjpoYXNQ
cm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0Fy
Y0Ficzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQXJj
QWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29r
dXBHZXRWYWx1ZTxTVkdQYXRoU2VnQXJjQWJzPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7
CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdBcmNBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0FyY0Ficzo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKQEAgLTM4ODEsMTAgKzM4ODEsMTAgQEAgYm9vbCBTVkdQYXRoU2VnQXJjQWJzOjpwdXRJ
blBhcmVudHMoUFVUXwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdB
cmNBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRo
U2VnQXJjQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdQYXRoU2VnQXJjQWJzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTM4OTIsNyArMzg5Miw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0FyY0Ficzo6YnJp
ZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdBcmNB
YnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdBcmNBYnM6OlByaXZhdGUgKj4oaW1wbCkpOwog
fQogCi1WYWx1ZSBTVkdQYXRoU2VnQXJjQWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlNWR1BhdGhTZWdBcmNBYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdBcmNBYnM+KHAxLHN0
YXRpY19jYXN0PFNWR1BhdGhTZWdBcmNBYnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMzkw
NSwxMiArMzkwNSwxMiBAQCBib29sIFNWR1BhdGhTZWdBcmNSZWw6Omhhc1Byb3BlcnR5KEV4ZWNT
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQXJjUmVsOjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdBcmNSZWw6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNW
R1BhdGhTZWdBcmNSZWw+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUg
U1ZHUGF0aFNlZ0FyY1JlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdQYXRoU2VnQXJjUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNW
R1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzky
NywxMCArMzkyNywxMCBAQCBib29sIFNWR1BhdGhTZWdBcmNSZWw6OnB1dEluUGFyZW50cyhQVVRf
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0FyY1JlbDo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdBcmNSZWw6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmlu
dGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0
OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAg
KlNWR1BhdGhTZWdBcmNSZWw6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzkzOCw3
ICszOTM4LDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnQXJjUmVsOjpicmlkZ2UoRXhlYwogICAg
IHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ0FyY1JlbD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ0FyY1JlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNW
R1BhdGhTZWdBcmNSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UGF0aFNlZ0FyY1JlbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0FyY1JlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ0FyY1JlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0zOTUxLDEyICszOTUxLDEy
IEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6aGFzUHJvcGUKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFs
dWU8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMp
OwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNl
Zzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0zOTczLDEwICszOTczLDEwIEBAIGJvb2wgU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6cHV0SW5QYXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LU9iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0
ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY0Ficzo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zOTg0
LDcgKzM5ODQsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OmJyCiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJz
PihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpQcml2YXRlICo+KGlt
cGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVj
dDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTM5OTcsMTIgKzM5OTcsMTIg
QEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpoYXNQcm9wZQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1
ZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7
CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2Vn
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwog
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQwMTksMTAgKzQwMTksMTAgQEAgYm9vbCBTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljUmVsOjpwdXRJblBhcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
T2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRl
cigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRo
U2VnQ3VydmV0b0N1YmljUmVsOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQwMzAs
NyArNDAzMCw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6YnIKICAg
ICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw+
KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OlByaXZhdGUgKj4oaW1w
bCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNSZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDA0MywxMiArNDA0MywxMiBA
QCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OmhhCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGhBYnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldFZhbHVlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM+KHAxLHAyLCZzX2hh
c2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aEFiczo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IFNWR1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAt
NDA2NSwxMCArNDA2NSwxMCBAQCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6
OnB1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aEFiczo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmpl
Y3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhBYnM6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDA3Niw3ICs0MDc2LDcg
QEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQQogICAgIHJldHVybiBu
ZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicz4ocDEs
c3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6UHJpdmF0ZSAqPihp
bXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aEFiczo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6
Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicz4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6UHJpdmF0ZSAqPihpbXBsKSk7
CiB9CkBAIC00MDg5LDEyICs0MDg5LDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aFJlbDo6aGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNTbW9vdGhSZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1Ntb290aFJlbD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBT
VkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00MTExLDEwICs0MTExLDEwIEBAIGJvb2wgU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6cHUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9i
amVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+
aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CkBAIC00MTIyLDcgKzQxMjIsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhSCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1
YmljU21vb3RoUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1Ntb290aFJlbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQxMzUsMTIgKzQxMzUsMTIgQEAgYm9v
bCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6aGFzUAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZh
bHVlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzPihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljQWJzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6Omdl
dChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDE1NywxMCArNDE1Nywx
MCBAQCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpwdXRJCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY0Ficzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OmJyaWRnZShFeGVj
U3RhdGUgKnAxKSBjb25zdApAQCAtNDE2OCw3ICs0MTY4LDcgQEAgT2JqZWN0SW1wICpTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY0FicwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y0Ficzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00MTgxLDEyICs0MTgxLDEyIEBAIGJvb2wg
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6Omhhc1AKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1
ZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1JlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBp
ZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQo
cDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQyMDMsMTAgKzQyMDMsMTAg
QEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6cHV0SQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTQyMTQsNyArNDIxNCw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNSZWwKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1JlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1JlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNS
ZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDIyNywxMiArNDIyNywxMiBAQCBib29sIFNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290
aEFiczo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9v
a3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CkBAIC00MjQ5LDEwICs0MjQ5LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNTbW9vdGhBYnMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnBy
ZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHlu
YW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CkBAIC00MjYwLDcgKzQyNjAsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljU21vCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aEFicz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNTbW9vdGhBYnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQy
NzMsMTIgKzQyNzMsMTIgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJl
bAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhSZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljU21vb3RoUmVsPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVl
IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21v
b3RoUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNW
R1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6OmdldChwMSxw
MixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDI5NSwxMCArNDI5NSwxMCBAQCBi
b29sIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1Ntb290aFJlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgp
OwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDMwNiw3ICs0MzA2LDcgQEAgT2JqZWN0
SW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1NtbwogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw+KHAxLHN0YXRp
Y19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpQcml2YXRlICo+KGlt
cGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNTbW9vdGhSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVs
PihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6UHJp
dmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00MzE5LDEyICs0MzE5LDEyIEBAIGJvb2wgU1ZHUGF0aFNl
Z0xpbmV0b0Ficzo6aGFzUHJvcGVydHkoRXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVl
IFNWR1BhdGhTZWdMaW5ldG9BYnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0xpbmV0b0Ficz4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvQWJzOjpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdM
aW5ldG9BYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYo
U1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAx
LHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00MzQxLDEwICs0MzQxLDEwIEBA
IGJvb2wgU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6cHV0SW5QYXJlbnRzKFAKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnTGluZXRvQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNl
Z0xpbmV0b0Ficzo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00MzUyLDcgKzQzNTIs
NyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9BYnM6OmJyaWRnZShFCiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnTGluZXRvQWJzPihwMSxzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnTGluZXRvQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZH
UGF0aFNlZ0xpbmV0b0Ficzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpT
VkdQYXRoU2VnTGluZXRvQWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJl
dHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2VnTGluZXRvQWJzPihwMSxzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnTGluZXRvQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQzNjUs
MTIgKzQzNjUsMTIgQEAgYm9vbCBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6aGFzUAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxB
YnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0
b0hvcml6b250YWxBYnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006Omxvb2t1cEdldFZhbHVlPFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzPihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9Ib3Jp
em9udGFsQWJzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIFNWR1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpA
QCAtNDM4NywxMCArNDM4NywxMCBAQCBib29sIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJz
OjpwdXRJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWxBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpT
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWxBYnM6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDM5OCw3ICs0Mzk4LDcgQEAg
T2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicwogICAgIHJldHVybiBuZXcg
S0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM+KHAxLHN0YXRp
Y19jYXN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpQcml2YXRlICo+KGltcGwpKTsK
IH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2Jq
ZWN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnTGluZXRvSG9yaXpvbnRhbEFiczo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00NDExLDEy
ICs0NDExLDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6Omhhc1AKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVs
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsUmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbD4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvSG9yaXpv
bnRhbFJlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAg
LTQ0MzMsMTAgKzQ0MzMsMTAgQEAgYm9vbCBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6
cHV0SQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9Ib3Jp
em9udGFsUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFs
UmVsOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQ0NDQsNyArNDQ0NCw3IEBAIE9i
amVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwKICAgICByZXR1cm4gbmV3IEtE
T006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsPihwMSxzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9
CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVj
dDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxSZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDQ1NywxMiAr
NDQ1NywxMiBAQCBib29sIFNWR1BhdGhTZWdMaW5ldG9SZWw6Omhhc1Byb3BlcnR5KEV4CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvUmVsOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9SZWw6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNW
R1BhdGhTZWdMaW5ldG9SZWw+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFs
dWUgU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIFNWR1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwpAQCAtNDQ3OSwxMCArNDQ3OSwxMCBAQCBib29sIFNWR1BhdGhTZWdMaW5ldG9SZWw6OnB1dElu
UGFyZW50cyhQCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0xpbmV0
b1JlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhT
ZWdMaW5ldG9SZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9SZWw6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtNDQ5MCw3ICs0NDkwLDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRv
UmVsOjpicmlkZ2UoRQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNl
Z0xpbmV0b1JlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1JlbDo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9SZWw6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0
aFNlZ0xpbmV0b1JlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1JlbDo6UHJpdmF0
ZSAqPihpbXBsKSk7CiB9CkBAIC00NTAzLDEyICs0NTAzLDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsQWJzOjpoYXNQcm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbEFicz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBT
VkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwpAQCAtNDUyNSwxMCArNDUyNSwxMCBAQCBib29sIFNWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbEFiczo6cHV0SW5QCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K09iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWxBYnM6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDUzNiw3ICs0
NTM2LDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OgogICAgIHJl
dHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzPihw
MSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OlByaXZhdGUgKj4oaW1w
bCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9i
amVjdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdMaW5ldG9WZXJ0aWNhbEFiczo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00NTQ5LDEyICs0
NTQ5LDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpoYXNQcm8KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvVmVydGlj
YWxSZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldFZhbHVlPFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbD4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6
OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDU3MSwxMCArNDU3
MSwxMCBAQCBib29sIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6cHV0SW5QCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b1Zl
cnRpY2FsUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtNDU4Miw3ICs0NTgyLDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2Vn
TGluZXRvVmVydGljYWxSZWw6OgogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRv
VmVydGljYWxSZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWxSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxS
ZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CkBAIC00NTkxLDEyICs0NTkxLDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0xpc3Q6
Omhhc1Byb3BlcnR5KEV4ZWNTdGEKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6
OmZpbmRFbnRyeSgmU1ZHUGF0aFNlZ0xpc3Q6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSBy
ZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdQYXRoU2VnTGlzdFByb3RvOjpzZWxm
KHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAg
IE9iamVjdEltcCAqcHJvdG8gPSBTVkdQYXRoU2VnTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBp
Zihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHUGF0aFNlZ0xpc3RQcm90b0Z1bmMsU1ZH
UGF0aFNlZ0xpc3Q+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTQ2MDgsMTgg
KzQ2MDgsMTggQEAgU1ZHUGF0aFNlZ0xpc3QgU1ZHUGF0aFNlZ0xpc3RQcm90b0Z1bmM6OgogICAg
IHJldHVybiBTVkdQYXRoU2VnTGlzdDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpc3Q6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNl
Z0xpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0
IHByb3RvID0gU1ZHUGF0aFNlZ0xpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gU1ZHUGF0aFNlZ0xpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VE
KHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnTGlz
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdM
aXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IFNWR1BhdGhTZWdMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0
aFNlZ0xpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDYyNyw3ICs0NjI3LDcg
QEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnTGlzdDo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBu
ZXcgS0RPTTo6RE9NQnJpZGdlPFNWR1BhdGhTZWdMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaXN0Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaXN0OjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVj
dDxTVkdQYXRoU2VnTGlzdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpc3Q6OlByaXZhdGUg
Kj4oaW1wbCkpOwogfQpAQCAtNDY0MCwxMiArNDY0MCwxMiBAQCBib29sIFNWR1BhdGhTZWdNb3Zl
dG9BYnM6Omhhc1Byb3BlcnR5KEV4CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQ
YXRoU2VnTW92ZXRvQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R1BhdGhTZWdNb3ZldG9BYnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1BhdGhTZWdNb3ZldG9BYnM+KHAxLHAyLCZzX2hh
c2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ01vdmV0b0Ficzo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTW92ZXRv
QWJzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR1Bh
dGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6OmdldChwMSxwMixw
Myk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDY2MiwxMCArNDY2MiwxMCBAQCBib29s
IFNWR1BhdGhTZWdNb3ZldG9BYnM6OnB1dEluUGFyZW50cyhQCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgU1ZHUGF0aFNlZ01vdmV0b0Ficzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdNb3ZldG9BYnM6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1
aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdNb3Zl
dG9BYnM6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDY3Myw3ICs0NjczLDcgQEAg
T2JqZWN0SW1wICpTVkdQYXRoU2VnTW92ZXRvQWJzOjpicmlkZ2UoRQogICAgIHJldHVybiBuZXcg
S0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ01vdmV0b0Ficz4ocDEsc3RhdGljX2Nhc3Q8U1ZH
UGF0aFNlZ01vdmV0b0Ficzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhT
ZWdNb3ZldG9BYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0
aFNlZ01vdmV0b0Ficzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ01vdmV0b0Ficz4ocDEsc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ01vdmV0b0Ficzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00Njg2LDEyICs0
Njg2LDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ01vdmV0b1JlbDo6aGFzUHJvcGVydHkoRXgKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdNb3ZldG9SZWw6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ01vdmV0b1JlbDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
UGF0aFNlZ01vdmV0b1JlbD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1
ZSBTVkdQYXRoU2VnTW92ZXRvUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BhdGhTZWdNb3ZldG9SZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CkBAIC00NzA4LDEwICs0NzA4LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ01vdmV0b1JlbDo6cHV0SW5Q
YXJlbnRzKFAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnTW92ZXRv
UmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNl
Z01vdmV0b1JlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ01vdmV0b1JlbDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CkBAIC00NzE5LDcgKzQ3MTksNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdNb3ZldG9S
ZWw6OmJyaWRnZShFCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2Vn
TW92ZXRvUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRvUmVsOjpQcml2YXRlICo+
KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ01vdmV0b1JlbDo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTW92ZXRvUmVsOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRo
U2VnTW92ZXRvUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRvUmVsOjpQcml2YXRl
ICo+KGltcGwpKTsKIH0KQEAgLTQ3MzgsMTIgKzQ3MzgsMTIgQEAgYm9vbCBTVkdQYXR0ZXJuRWxl
bWVudDo6aGFzUHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZH
UGF0dGVybkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UGF0dGVybkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006Omxvb2t1cEdldFZhbHVlPFNWR1BhdHRlcm5FbGVtZW50PihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdHRlcm5FbGVtZW50OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdHRlcm5FbGVtZW50OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAg
aWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTQ3Njgs
MTAgKzQ3NjgsMTAgQEAgYm9vbCBTVkdQYXR0ZXJuRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdHRlcm5FbGVtZW50Ojpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0dGVybkVsZW1lbnQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmlu
dGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0
OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAg
KlNWR1BhdHRlcm5FbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQ3Nzks
NyArNDc3OSw3IEBAIE9iamVjdEltcCAqU1ZHUGF0dGVybkVsZW1lbnQ6OmJyaWRnZShFeGUKICAg
ICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdHRlcm5FbGVtZW50PihwMSxzdGF0
aWNfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNW
R1BhdHRlcm5FbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNW
R1BhdHRlcm5FbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXR0ZXJuRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHUGF0dGVybkVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNDc4OCwxMiArNDc4OCwx
MiBAQCBib29sIFNWR1BvaW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiB7CiAgICAgY29u
c3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR1BvaW50OjpzX2hhc2hUYWJs
ZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHUG9p
bnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHUG9pbnRQcm90bzo6c2VsZihwMSk7
CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQb2ludDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdQb2ludDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR1BvaW50UHJvdG9GdW5jLFNWR1BvaW50PihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC00ODEwLDEwICs0ODEwLDEwIEBAIFNWR1Bv
aW50IEtTVkc6OnRvU1ZHUG9pbnQoS0pTOjpFeGVjU3RhdGUKICAgICByZXR1cm4gU1ZHUG9pbnQ6
Om51bGw7CiB9CiAKLVZhbHVlIFNWR1BvaW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR1BvaW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR1BvaW50UHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1BvaW50UHJvdG86OnNlbGYocDEpOworICAgIGlm
KHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAg
ICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtNDgyOSwxMCAr
NDgyOSwxMCBAQCBib29sIFNWR1BvaW50OjpwdXRJblBhcmVudHMoUFVUX01FVEhPRF9BCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUG9pbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQb2ludDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdQb2ludFByb3RvOjpzZWxmKHAxKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKlNWR1BvaW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTQ4NDAsNyArNDg0MCw3IEBAIE9iamVjdEltcCAqU1ZHUG9pbnQ6OmJyaWRnZShFeGVjU3RhdGUg
KnAKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BvaW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdQb2ludDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BvaW50Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BvaW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQ
b2ludD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUG9pbnQ6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAt
NDg0OSwxMiArNDg0OSwxMiBAQCBib29sIFNWR1BvaW50TGlzdDo6aGFzUHJvcGVydHkoRXhlY1N0
YXRlCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR1Bv
aW50TGlzdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9i
amVjdCBwcm90byA9IFNWR1BvaW50TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBT
VkdQb2ludExpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQb2lu
dExpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9pbnRMaXN0
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBH
ZXQ8U1ZHUG9pbnRMaXN0UHJvdG9GdW5jLFNWR1BvaW50TGlzdD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQpAQCAtNDg2NiwxOCArNDg2NiwxOCBAQCBTVkdQb2ludExpc3QgU1ZHUG9p
bnRMaXN0UHJvdG9GdW5jOjpjYXN0CiAgICAgcmV0dXJuIFNWR1BvaW50TGlzdDo6bnVsbDsKIH0K
IAotVmFsdWUgU1ZHUG9pbnRMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BvaW50TGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdQb2ludExpc3RQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAy
KTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHUG9pbnRMaXN0UHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAy
KTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmpl
Y3QgU1ZHUG9pbnRMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqU1ZHUG9pbnRMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIFNWR1BvaW50TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlNWR1BvaW50TGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00ODg1LDcg
KzQ4ODUsNyBAQCBPYmplY3RJbXAgKlNWR1BvaW50TGlzdDo6YnJpZGdlKEV4ZWNTdGF0CiAgICAg
cmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHUG9pbnRMaXN0PihwMSxzdGF0aWNfY2FzdDxT
VkdQb2ludExpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQb2ludExpc3Q6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9pbnRMaXN0OjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVj
dDxTVkdQb2ludExpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR1BvaW50TGlzdDo6UHJpdmF0ZSAqPihp
bXBsKSk7CiB9CkBAIC00OTA0LDEyICs0OTA0LDEyIEBAIGJvb2wgU1ZHUG9seWdvbkVsZW1lbnQ6
Omhhc1Byb3BlcnR5KEV4ZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BvbHln
b25FbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BvbHln
b25FbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
Ojpsb29rdXBHZXRWYWx1ZTxTVkdQb2x5Z29uRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRo
aXMscDMpOwogfQogCi1WYWx1ZSBTVkdQb2x5Z29uRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQb2x5Z29uRWxlbWVudDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdBbmltYXRlZFBvaW50czo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHQW5pbWF0ZWRQb2ludHM6OmdldChwMSxwMixw
Myk7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxl
bWVudDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTQ5MzQsMTAgKzQ5MzQsMTAgQEAgYm9vbCBTVkdQb2x5
Z29uRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2Jq
ZWN0IFNWR1BvbHlnb25FbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHUG9seWdvbkVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BvbHlnb25FbGVtZW50OjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQ5NDUsNyArNDk0NSw3IEBAIE9iamVjdEltcCAqU1ZH
UG9seWdvbkVsZW1lbnQ6OmJyaWRnZShFeGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJp
ZGdlPFNWR1BvbHlnb25FbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdQb2x5Z29uRWxlbWVudDo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1BvbHlnb25FbGVtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BvbHlnb25FbGVtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQ
b2x5Z29uRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUG9seWdvbkVsZW1lbnQ6OlByaXZhdGUg
Kj4oZCkpOwogfQpAQCAtNDk2NCwxMiArNDk2NCwxMiBAQCBib29sIFNWR1BvbHlsaW5lRWxlbWVu
dDo6aGFzUHJvcGVydHkoRXhlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQb2x5
bGluZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9s
eWxpbmVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQb2x5bGluZUVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJs
ZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUG9seWxpbmVFbGVtZW50OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BvbHlsaW5lRWxlbWVudDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdBbmltYXRlZFBv
aW50czo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHQW5pbWF0ZWRQb2ludHM6OmdldChw
MSxwMixwMyk7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTQ5OTQsMTAgKzQ5OTQsMTAgQEAgYm9vbCBT
VkdQb2x5bGluZUVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EXwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotT2JqZWN0IFNWR1BvbHlsaW5lRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitPYmplY3RJbXAgKlNWR1BvbHlsaW5lRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRp
bk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwo
KSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUG9seWxpbmVFbGVtZW50
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTUwMDUsNyArNTAwNSw3IEBAIE9iamVj
dEltcCAqU1ZHUG9seWxpbmVFbGVtZW50OjpicmlkZ2UoRXgKICAgICByZXR1cm4gbmV3IEtET006
OkRPTVJXQnJpZGdlPFNWR1BvbHlsaW5lRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUG9seWxp
bmVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHUG9seWxpbmVFbGVtZW50
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BvbHlsaW5lRWxlbWVu
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVE
T01PYmplY3Q8U1ZHUG9seWxpbmVFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdQb2x5bGluZUVs
ZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNTAxOCwxMiArNTAxOCwxMiBAQCBib29sIFNW
R1ByZXNlcnZlQXNwZWN0UmF0aW86Omhhc1Byb3BlcnR5CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpbzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChw
Myk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNTA0MCwxMCArNTA0MCwxMCBAQCBib29s
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnB1dEluUGFyZW50CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1ByZXNl
cnZlQXNwZWN0UmF0aW86OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTA1MSw3ICs1
MDUxLDcgQEAgT2JqZWN0SW1wICpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpicmlkZwogICAgIHJl
dHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUHJlc2VydmVBc3BlY3RSYXRpbz4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAK
LVZhbHVlIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpbz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CkBAIC01MDY0LDEyICs1MDY0LDEyIEBAIGJvb2wgU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50OjpoYXNQcm9wZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdSYWRpYWxHcmFk
aWVudEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKFNWR0dyYWRpZW50RWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gU1ZHR3JhZGllbnRFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBV
bmRlZmluZWQoKTsKQEAgLTUwODQsMTAgKzUwODQsMTAgQEAgYm9vbCBTVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQ6OnB1dChQVVRfTQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmpl
Y3RJbXAgKlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9i
amVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUmFkaWFsR3JhZGllbnRFbGVt
ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTUwOTUsNyArNTA5NSw3IEBAIE9i
amVjdEltcCAqU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpicmkKICAgICByZXR1cm4gbmV3IEtE
T006OkRPTVJXQnJpZGdlPFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUmFkaWFsR3JhZGllbnRFbGVt
ZW50PihwMSxzdGF0aWNfY2FzdDxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OlByaXZhdGUgKj4o
ZCkpOwogfQpAQCAtNTEwOCw3ICs1MTA4LDcgQEAgYm9vbCBTVkdSZWN0OjpoYXNQcm9wZXJ0eShF
eGVjU3RhdGUgKnAxLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUmVjdDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdSZWN0OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdSZWN0
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC01MTIwLDcgKzUxMjAsNyBAQCBT
VkdSZWN0IEtTVkc6OnRvU1ZHUmVjdChLSlM6OkV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIFNWR1Jl
Y3Q6Om51bGw7CiB9CiAKLVZhbHVlIFNWR1JlY3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUmVjdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTUxMzcsMTAgKzUxMzcsMTAgQEAgYm9vbCBT
VkdSZWN0OjpwdXRJblBhcmVudHMoUFVUX01FVEhPRF9BUgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotT2JqZWN0IFNWR1JlY3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpTVkdSZWN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpTVkdSZWN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTUxNDgsNyArNTE0OCw3IEBAIE9iamVjdEltcCAqU1ZHUmVjdDo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1JlY3Q+KHAxLHN0YXRpY19j
YXN0PFNWR1JlY3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdSZWN0OjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1JlY3Q6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1JlY3Q+
KHAxLHN0YXRpY19jYXN0PFNWR1JlY3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNTE2Niwx
MiArNTE2NiwxMiBAQCBib29sIFNWR1JlY3RFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdSZWN0RWxlbWVudDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdSZWN0RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUmVjdEVs
ZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUmVjdEVs
ZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UmVjdEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
aWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0
KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEs
cDIscDMpOwpAQCAtNTE5NSwxMCArNTE5NSwxMCBAQCBib29sIFNWR1JlY3RFbGVtZW50OjpwdXQo
UFVUX01FVEhPRF9BUkdTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUmVjdEVs
ZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdSZWN0
RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJl
dHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAK
IE9iamVjdEltcCAqU1ZHUmVjdEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtNTIwNiw3ICs1MjA2LDcgQEAgT2JqZWN0SW1wICpTVkdSZWN0RWxlbWVudDo6YnJpZGdlKEV4
ZWNTdAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUmVjdEVsZW1lbnQ+KHAx
LHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUg
U1ZHUmVjdEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UmVjdEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006OmNhY2hlRE9NT2JqZWN0PFNWR1JlY3RFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdSZWN0
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01MjE1LDggKzUyMTUsOCBAQCBib29sIFNW
R1NWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5
ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR1NWR0VsZW1lbnQ6OnNfaGFzaFRhYmxlLHAyKTsK
ICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdTVkdFbGVtZW50
UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1NWR0VsZW1lbnRQcm90bzo6c2VsZihw
MSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAg
aWYoS0RPTTo6RG9jdW1lbnRFdmVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
ICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAg
IGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CkBAIC01MjI5LDcgKzUyMjksNyBAQCBib29sIFNWR1NWR0VsZW1lbnQ6Omhhc1By
b3BlcnR5KEV4ZWNTdGF0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdTVkdFbGVt
ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1NWR0VsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdl
dDxTVkdTVkdFbGVtZW50UHJvdG9GdW5jLFNWR1NWR0VsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJs
ZSx0aGlzLHAzKTsKIH0KQEAgLTUyNDEsMTAgKzUyNDEsMTAgQEAgU1ZHU1ZHRWxlbWVudCBTVkdT
VkdFbGVtZW50UHJvdG9GdW5jOjpjYQogICAgIHJldHVybiBTVkdTVkdFbGVtZW50OjpudWxsOwog
fQogCi1WYWx1ZSBTVkdTVkdFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKlNWR1NWR0VsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHU1ZHRWxlbWVudFByb3RvOjpzZWxm
KHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQo
cDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdTVkdFbGVtZW50UHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBpZihLRE9NOjpEb2N1bWVudEV2ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBLRE9NOjpEb2N1bWVudEV2ZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0Vs
ZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixw
Myk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsK
QEAgLTUyNzksMTAgKzUyNzksMTAgQEAgYm9vbCBTVkdTVkdFbGVtZW50OjpwdXRJblBhcmVudHMo
UFVUX01FVAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1NWR0VsZW1lbnQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdTVkdFbGVtZW50Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR1NW
R0VsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdTVkdFbGVtZW50
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTUyOTAsNyArNTI5MCw3IEBAIE9iamVj
dEltcCAqU1ZHU1ZHRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IEtET006
OkRPTVJXQnJpZGdlPFNWR1NWR0VsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQ6
OlByaXZhdGUgKj4oS0RPTTo6RXZlbnRUYXJnZXQ6OmQpKTsKIH0KIAotVmFsdWUgU1ZHU1ZHRWxl
bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdTVkdFbGVtZW50
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURP
TU9iamVjdDxTVkdTVkdFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdTVkdFbGVtZW50OjpQcml2
YXRlICo+KEtET006OkV2ZW50VGFyZ2V0OjpkKSk7CiB9CkBAIC01MzA1LDEyICs1MzA1LDEyIEBA
IGJvb2wgU1ZHU2NyaXB0RWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1MKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVZhbHVlIFNWR1NjcmlwdEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHU2NyaXB0RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHU2NyaXB0RWxlbWVudD4o
cDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdTY3JpcHRFbGVtZW50
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1Njcmlw
dEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYo
U1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAx
LHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIs
cDMpOwpAQCAtNTMzMiwxMCArNTMzMiwxMCBAQCBib29sIFNWR1NjcmlwdEVsZW1lbnQ6OnB1dElu
UGFyZW50cyhQVVRfCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHU2NyaXB0RWxl
bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1Njcmlw
dEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlNWR1NjcmlwdEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtNTM0Myw3ICs1MzQzLDcgQEAgT2JqZWN0SW1wICpTVkdTY3JpcHRFbGVtZW50Ojpicmlk
Z2UoRXhlYwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHU2NyaXB0RWxlbWVu
dD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU2NyaXB0RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAK
LVZhbHVlIFNWR1NjcmlwdEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHU2NyaXB0RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHU2NyaXB0RWxlbWVudD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHU2NyaXB0RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01MzU2LDEyICs1
MzU2LDEyIEBAIGJvb2wgU1ZHU2V0RWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1NldEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU2V0RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHU2V0RWxlbWVudD4o
cDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdTZXRFbGVtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1NldEVsZW1l
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHQW5p
bWF0aW9uRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHQW5pbWF0aW9uRWxl
bWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC01Mzc2LDEw
ICs1Mzc2LDEwIEBAIGJvb2wgU1ZHU2V0RWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVJHUykKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdTZXRFbGVtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHU2V0RWxlbWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHU2V0RWxl
bWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01Mzg3LDcgKzUzODcsNyBAQCBP
YmplY3RJbXAgKlNWR1NldEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBL
RE9NOjpET01SV0JyaWRnZTxTVkdTZXRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdTZXRFbGVt
ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHU2V0RWxlbWVudDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdTZXRFbGVtZW50OjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdTZXRF
bGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdTZXRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0K
QEAgLTU0MDEsMTIgKzU0MDEsMTIgQEAgYm9vbCBTVkdTdG9wRWxlbWVudDo6aGFzUHJvcGVydHko
RXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHU3RvcEVsZW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3RvcEVsZW1lbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVl
PFNWR1N0b3BFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVl
IFNWR1N0b3BFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR1N0b3BFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0Vs
ZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHU3R5bGFibGU6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIFNWR1N0eWxhYmxlOjpnZXQocDEscDIscDMpOwpAQCAtNTQyMiwxMCArNTQy
MiwxMCBAQCBib29sIFNWR1N0b3BFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUkdTCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHU3RvcEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdTdG9wRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHU3RvcEVsZW1l
bnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTQzMyw3ICs1NDMzLDcgQEAgT2Jq
ZWN0SW1wICpTVkdTdG9wRWxlbWVudDo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgS0RP
TTo6RE9NUldCcmlkZ2U8U1ZHU3RvcEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1N0b3BFbGVt
ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHU3RvcEVsZW1lbnQ6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3RvcEVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1N0
b3BFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdTdG9wRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CkBAIC01NDQyLDEyICs1NDQyLDEyIEBAIGJvb2wgU1ZHU3RyaW5nTGlzdDo6aGFzUHJvcGVy
dHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRy
eSgmU1ZHU3RyaW5nTGlzdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVl
OwotICAgIE9iamVjdCBwcm90byA9IFNWR1N0cmluZ0xpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gU1ZHU3RyaW5nTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR1N0cmluZ0xpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHU3RyaW5nTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6bG9va3VwR2V0PFNWR1N0cmluZ0xpc3RQcm90b0Z1bmMsU1ZHU3RyaW5nTGlzdD4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNTQ1OSwxOCArNTQ1OSwxOCBAQCBTVkdT
dHJpbmdMaXN0IFNWR1N0cmluZ0xpc3RQcm90b0Z1bmM6OmNhCiAgICAgcmV0dXJuIFNWR1N0cmlu
Z0xpc3Q6Om51bGw7CiB9CiAKLVZhbHVlIFNWR1N0cmluZ0xpc3Q6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3RyaW5nTGlzdDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdTdHJpbmdM
aXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1N0cmluZ0xp
c3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdTdHJpbmdMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHU3RyaW5nTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdTdHJpbmdMaXN0UHJvdG86OnNl
bGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0
dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHU3RyaW5nTGlzdDo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC01NDc4LDcgKzU0NzgsNyBAQCBPYmplY3RJbXAgKlNWR1N0cmluZ0xp
c3Q6OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHU3Ry
aW5nTGlzdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3RyaW5nTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7
CiB9CiAKLVZhbHVlIFNWR1N0cmluZ0xpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHU3RyaW5nTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHU3RyaW5nTGlzdD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHU3RyaW5nTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC01NDg3LDEyICs1NDg3
LDEyIEBAIGJvb2wgU1ZHU3R5bGFibGU6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAKIHsKICAgICBj
b25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHU3R5bGFibGU6OnNfaGFz
aFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBT
VkdTdHlsYWJsZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdTdHlsYWJsZVByb3Rv
OjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1
ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1N0eWxhYmxlOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1N0eWxhYmxlOjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHU3R5bGFibGVQcm90
b0Z1bmMsU1ZHU3R5bGFibGU+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTU1
ODYsMTggKzU1ODYsMTggQEAgU1ZHU3R5bGFibGUgU1ZHU3R5bGFibGVQcm90b0Z1bmM6OmNhc3Qo
SwogICAgIHJldHVybiBTVkdTdHlsYWJsZTo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHU3R5bGFibGU6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3R5bGFi
bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gU1ZHU3R5bGFibGVQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3Rv
ID0gU1ZHU3R5bGFibGVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdTdHlsYWJsZTo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1N0eWxhYmxlOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR1N0eWxhYmxlUHJv
dG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHU3R5bGFibGU6OmJyaWRnZShFeGVj
U3RhdGUgKnAxKSBjb25zdApAQCAtNTYwNSw3ICs1NjA1LDcgQEAgT2JqZWN0SW1wICpTVkdTdHls
YWJsZTo6YnJpZGdlKEV4ZWNTdGF0ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNW
R1N0eWxhYmxlPihwMSxzdGF0aWNfY2FzdDxTVkdTdHlsYWJsZTo6UHJpdmF0ZSAqPihpbXBsKSk7
CiB9CiAKLVZhbHVlIFNWR1N0eWxhYmxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKlNWR1N0eWxhYmxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJl
dHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdTdHlsYWJsZT4ocDEsc3RhdGljX2Nhc3Q8U1ZH
U3R5bGFibGU6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNTYxOCwxMiArNTYxOCwxMiBAQCBi
b29sIFNWR1N0eWxlRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBTVkdTdHlsZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHU3R5bGVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdTdHlsZUVsZW1lbnQ+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHU3R5bGVFbGVtZW50OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1N0eWxlRWxlbWVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVt
ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTU2NDMsMTAgKzU2NDMsMTAgQEAgYm9vbCBT
VkdTdHlsZUVsZW1lbnQ6OnB1dEluUGFyZW50cyhQVVRfTQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotT2JqZWN0IFNWR1N0eWxlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR1N0eWxlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHU3R5bGVFbGVtZW50OjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTU2NTQsNyArNTY1NCw3IEBAIE9iamVjdEltcCAqU1ZH
U3R5bGVFbGVtZW50OjpicmlkZ2UoRXhlY1MKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJp
ZGdlPFNWR1N0eWxlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3R5bGVFbGVtZW50OjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHU3R5bGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1N0eWxlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHU3R5bGVFbGVt
ZW50PihwMSxzdGF0aWNfY2FzdDxTVkdTdHlsZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpA
QCAtNTY3MiwxMiArNTY3MiwxMiBAQCBib29sIFNWR1N3aXRjaEVsZW1lbnQ6Omhhc1Byb3BlcnR5
KEV4ZWNTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdTd2l0Y2hFbGVtZW50Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1N3aXRjaEVsZW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZh
bHVlPFNWR1N3aXRjaEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAot
VmFsdWUgU1ZHU3dpdGNoRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdTd2l0Y2hFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTU3MDEsMTAgKzU3MDEsMTAgQEAgYm9vbCBT
VkdTd2l0Y2hFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotT2JqZWN0IFNWR1N3aXRjaEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpTVkdTd2l0Y2hFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdTd2l0Y2hFbGVtZW50Ojpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTU3MTIsNyArNTcxMiw3IEBAIE9iamVjdEltcCAq
U1ZHU3dpdGNoRWxlbWVudDo6YnJpZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJX
QnJpZGdlPFNWR1N3aXRjaEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1N3aXRjaEVsZW1lbnQ6
OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdTd2l0Y2hFbGVtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1N3aXRjaEVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1N3
aXRjaEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1N3aXRjaEVsZW1lbnQ6OlByaXZhdGUgKj4o
ZCkpOwogfQpAQCAtNTcyOSwxMiArNTcyOSwxMiBAQCBib29sIFNWR1N5bWJvbEVsZW1lbnQ6Omhh
c1Byb3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdTeW1ib2xF
bGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1N5bWJvbEVs
ZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldFZhbHVlPFNWR1N5bWJvbEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAz
KTsKIH0KIAotVmFsdWUgU1ZHU3ltYm9sRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdTeW1ib2xFbGVtZW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTU3NTcsMTAgKzU3NTcsMTAg
QEAgYm9vbCBTVkdTeW1ib2xFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotT2JqZWN0IFNWR1N5bWJvbEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdTeW1ib2xFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdTeW1ib2xFbGVt
ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTU3NjgsNyArNTc2OCw3IEBAIE9i
amVjdEltcCAqU1ZHU3ltYm9sRWxlbWVudDo6YnJpZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3IEtE
T006OkRPTVJXQnJpZGdlPFNWR1N5bWJvbEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1N5bWJv
bEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdTeW1ib2xFbGVtZW50Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1N5bWJvbEVsZW1lbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2Jq
ZWN0PFNWR1N5bWJvbEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1N5bWJvbEVsZW1lbnQ6OlBy
aXZhdGUgKj4oZCkpOwogfQpAQCAtNTc4MSwxMiArNTc4MSwxMiBAQCBib29sIFNWR1RTcGFuRWxl
bWVudDo6aGFzUHJvcGVydHkoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBT
VkdUU3BhbkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
VFNwYW5FbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdUU3BhbkVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHVFNwYW5FbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1RTcGFuRWxlbWVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTU4MDEsMTAgKzU4
MDEsMTAgQEAgYm9vbCBTVkdUU3BhbkVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSRwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1RTcGFuRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1RTcGFuRWxlbWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHVFNwYW5F
bGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTU4MTIsNyArNTgxMiw3IEBA
IE9iamVjdEltcCAqU1ZHVFNwYW5FbGVtZW50OjpicmlkZ2UoRXhlY1MKICAgICByZXR1cm4gbmV3
IEtET006OkRPTVJXQnJpZGdlPFNWR1RTcGFuRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVFNw
YW5FbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHVFNwYW5FbGVtZW50Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1RTcGFuRWxlbWVudDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmpl
Y3Q8U1ZHVFNwYW5FbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdUU3BhbkVsZW1lbnQ6OlByaXZh
dGUgKj4oZCkpOwogfQpAQCAtNTgyMSwxMiArNTgyMSwxMiBAQCBib29sIFNWR1Rlc3RzOjpoYXNQ
cm9wZXJ0eShFeGVjU3RhdGUgKnAxCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3Vw
OjpmaW5kRW50cnkoJlNWR1Rlc3RzOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJu
IHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHVGVzdHNQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gU1ZHVGVzdHNQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBT
VkdUZXN0czo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUZXN0czo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0
PFNWR1Rlc3RzUHJvdG9GdW5jLFNWR1Rlc3RzPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7
CiB9CkBAIC01ODg4LDE4ICs1ODg4LDE4IEBAIFNWR1Rlc3RzIFNWR1Rlc3RzUHJvdG9GdW5jOjpj
YXN0KEtKUzo6RXgKICAgICByZXR1cm4gU1ZHVGVzdHM6Om51bGw7CiB9CiAKLVZhbHVlIFNWR1Rl
c3RzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1Rl
c3RzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBw
cm90byA9IFNWR1Rlc3RzUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9
IFNWR1Rlc3RzUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHVGVzdHM6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdUZXN0czo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdUZXN0c1Byb3RvOjpzZWxmKHAxKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKlNWR1Rlc3RzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QK
QEAgLTU5MDcsNyArNTkwNyw3IEBAIE9iamVjdEltcCAqU1ZHVGVzdHM6OmJyaWRnZShFeGVjU3Rh
dGUgKnAKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdUZXN0cz4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHVGVzdHM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdUZXN0czo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdUZXN0czo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZH
VGVzdHM+KHAxLHN0YXRpY19jYXN0PFNWR1Rlc3RzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAg
LTU5MTYsOCArNTkxNiw4IEBAIGJvb2wgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpoYXNQcm9wZXJ0
eSgKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHVGV4
dENvbnRlbnRFbGVtZW50OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7
Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG86OnNlbGYocDEp
OwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2Jq
ZWN0SW1wICpwcm90byA9IFNWR1RleHRDb250ZW50RWxlbWVudFByb3RvOjpzZWxmKHAxKTsKKyAg
ICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdF
bGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAg
ICAgaWYoU1ZHTGFuZ1NwYWNlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwpAQCAt
NTkyNiw3ICs1OTI2LDcgQEAgYm9vbCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6Omhhc1Byb3BlcnR5
KAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1RleHRDb250ZW50RWxlbWVu
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0PFNWR1RleHRDb250ZW50RWxlbWVudFByb3RvRnVuYyxTVkdUZXh0Q29udGVudEVsZW1lbnQ+
KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTU5NDQsMTAgKzU5NDQsMTAgQEAg
U1ZHVGV4dENvbnRlbnRFbGVtZW50IFNWR1RleHRDb250ZW50RWxlbQogICAgIHJldHVybiBTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6Om51bGw7CiB9CiAKLVZhbHVlIFNWR1RleHRDb250ZW50RWxlbWVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0g
ICAgT2JqZWN0IHByb3RvID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1RleHRDb250ZW50RWxlbWVudFByb3RvOjpzZWxm
KHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdl
dChwMSxwMik7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0xhbmdTcGFjZTo6aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gU1ZHTGFuZ1NwYWNlOjpnZXQocDEscDIscDMpOwpAQCAtNTk2OSwxMCAr
NTk2OSwxMCBAQCBib29sIFNWR1RleHRDb250ZW50RWxlbWVudDo6cHV0KFBVVF9NRVRICiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNW
R1RleHRDb250ZW50RWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0Ojpk
eW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNW
R1RleHRDb250ZW50RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01OTgw
LDcgKzU5ODAsNyBAQCBPYmplY3RJbXAgKlNWR1RleHRDb250ZW50RWxlbWVudDo6YnJpZGdlCiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdUZXh0Q29udGVudEVsZW1lbnQ+KHAx
LHN0YXRpY19jYXN0PFNWR1RleHRDb250ZW50RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAK
LVZhbHVlIFNWR1RleHRDb250ZW50RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K1ZhbHVlSW1wICpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1RleHRDb250ZW50RWxl
bWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpQcml2YXRlICo+KGQp
KTsKIH0KQEAgLTU5OTQsMTIgKzU5OTQsMTIgQEAgYm9vbCBTVkdUZXh0RWxlbWVudDo6aGFzUHJv
cGVydHkoRXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHVGV4dEVsZW1l
bnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGV4dEVsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdl
dFZhbHVlPFNWR1RleHRFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAK
LVZhbHVlIFNWR1RleHRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1RleHRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6Omhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmdldChwMSxwMixwMyk7
CiAgICAgaWYoU1ZHVHJhbnNmb3JtYWJsZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZH
VHJhbnNmb3JtYWJsZTo6Z2V0KHAxLHAyLHAzKTsKQEAgLTYwMTUsMTAgKzYwMTUsMTAgQEAgYm9v
bCBTVkdUZXh0RWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVJHUwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotT2JqZWN0IFNWR1RleHRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqU1ZHVGV4dEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmpl
Y3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1RleHRFbGVtZW50OjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTYwMjYsNyArNjAyNiw3IEBAIE9iamVjdEltcCAqU1ZH
VGV4dEVsZW1lbnQ6OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJp
ZGdlPFNWR1RleHRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdUZXh0RWxlbWVudDo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1RleHRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKlNWR1RleHRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdUZXh0RWxlbWVudD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHVGV4dEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNjAz
OSwxMiArNjAzOSwxMiBAQCBib29sIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6Omhhc1Byb3Bl
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
Omxvb2t1cEdldFZhbHVlPFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IGlmKFNWR1RleHRDb250ZW50RWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZH
VGV4dENvbnRlbnRFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQo
KTsKQEAgLTYwNTksMTAgKzYwNTksMTAgQEAgYm9vbCBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
OjpwdXQoUFVUXwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1RleHRQb3NpdGlv
bmluZ0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJv
dG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICBy
ZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Ojpi
cmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTYwNzAsNyArNjA3MCw3IEBAIE9iamVjdElt
cCAqU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6YnIKICAgICByZXR1cm4gbmV3IEtET006OkRP
TVJXQnJpZGdlPFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQ+KHAxLHN0YXRpY19jYXN0PFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OlByaXZhdGUgKj4o
ZCkpOwogfQpAQCAtNjA4NSwxMiArNjA4NSwxMiBAQCBib29sIFNWR1RpdGxlRWxlbWVudDo6aGFz
UHJvcGVydHkoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdUaXRsZUVs
ZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGl0bGVFbGVt
ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29r
dXBHZXRWYWx1ZTxTVkdUaXRsZUVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KIAotVmFsdWUgU1ZHVGl0bGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR1RpdGxlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0xhbmdTcGFjZTo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHTGFuZ1NwYWNlOjpnZXQocDEscDIscDMpOwpA
QCAtNjExMSwxMCArNjExMSwxMCBAQCBib29sIFNWR1RpdGxlRWxlbWVudDo6cHV0KFBVVF9NRVRI
T0RfQVJHCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHVGl0bGVFbGVtZW50Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHVGl0bGVFbGVtZW50
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAx
LT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9i
amVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0
SW1wICpTVkdUaXRsZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNjEy
Miw3ICs2MTIyLDcgQEAgT2JqZWN0SW1wICpTVkdUaXRsZUVsZW1lbnQ6OmJyaWRnZShFeGVjUwog
ICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHVGl0bGVFbGVtZW50PihwMSxzdGF0
aWNfY2FzdDxTVkdUaXRsZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdU
aXRsZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGl0
bGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
OjpjYWNoZURPTU9iamVjdDxTVkdUaXRsZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1RpdGxl
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC02MTMxLDEyICs2MTMxLDEyIEBAIGJvb2wg
U1ZHVHJhbnNmb3JtOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKIHsKICAgICBjb25zdCBIYXNoRW50
cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHVHJhbnNmb3JtOjpzX2hhc2hUYWJsZSxwMik7
CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHVHJhbnNmb3Jt
UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1RyYW5zZm9ybVByb3RvOjpzZWxmKHAx
KTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1RyYW5zZm9ybTo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm06OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdUcmFuc2Zvcm1Qcm90b0Z1bmMs
U1ZHVHJhbnNmb3JtPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC02MTUzLDE4
ICs2MTUzLDE4IEBAIFNWR1RyYW5zZm9ybSBLU1ZHOjp0b1NWR1RyYW5zZm9ybShLSlM6OkUKICAg
ICByZXR1cm4gU1ZHVHJhbnNmb3JtOjpudWxsOwogfQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm06Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVHJhbnNmb3Jt
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90
byA9IFNWR1RyYW5zZm9ybVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8g
PSBTVkdUcmFuc2Zvcm1Qcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdUcmFuc2Zvcm06OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdUcmFuc2Zvcm06OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHVHJhbnNmb3Jt
UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHVHJhbnNmb3JtOjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTYxNzIsNyArNjE3Miw3IEBAIE9iamVjdEltcCAqU1ZH
VHJhbnNmb3JtOjpicmlkZ2UoRXhlY1N0YXQKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRn
ZTxTVkdUcmFuc2Zvcm0+KHAxLHN0YXRpY19jYXN0PFNWR1RyYW5zZm9ybTo6UHJpdmF0ZSAqPihp
bXBsKSk7CiB9CiAKLVZhbHVlIFNWR1RyYW5zZm9ybTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm06OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1RyYW5zZm9ybT4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHVHJhbnNmb3JtOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTYxODEsMTIgKzYx
ODEsMTIgQEAgYm9vbCBTVkdUcmFuc2Zvcm1MaXN0OjpoYXNQcm9wZXJ0eShFeGVjUwogewogICAg
IGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdUcmFuc2Zvcm1MaXN0
OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHBy
b3RvID0gU1ZHVHJhbnNmb3JtTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdU
cmFuc2Zvcm1MaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHVHJh
bnNmb3JtTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFu
c2Zvcm1MaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
Ojpsb29rdXBHZXQ8U1ZHVHJhbnNmb3JtTGlzdFByb3RvRnVuYyxTVkdUcmFuc2Zvcm1MaXN0Pihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC02MTk4LDE4ICs2MTk4LDE4IEBAIFNW
R1RyYW5zZm9ybUxpc3QgU1ZHVHJhbnNmb3JtTGlzdFByb3RvRnUKICAgICByZXR1cm4gU1ZHVHJh
bnNmb3JtTGlzdDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHVHJhbnNmb3JtTGlzdDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm1MaXN0Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9
IFNWR1RyYW5zZm9ybUxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3Rv
ID0gU1ZHVHJhbnNmb3JtTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR1RyYW5zZm9ybUxpc3Q6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdUcmFuc2Zvcm1M
aXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IFNWR1RyYW5zZm9ybUxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHlu
YW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdU
cmFuc2Zvcm1MaXN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTYyMTcsNyArNjIx
Nyw3IEBAIE9iamVjdEltcCAqU1ZHVHJhbnNmb3JtTGlzdDo6YnJpZGdlKEV4ZWMKICAgICByZXR1
cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdUcmFuc2Zvcm1MaXN0PihwMSxzdGF0aWNfY2FzdDxT
VkdUcmFuc2Zvcm1MaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHVHJhbnNm
b3JtTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zv
cm1MaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpj
YWNoZURPTU9iamVjdDxTVkdUcmFuc2Zvcm1MaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdUcmFuc2Zv
cm1MaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTYyMzAsMjEgKzYyMzAsMjEgQEAgYm9v
bCBTVkdUcmFuc2Zvcm1hYmxlOjpoYXNQcm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm1hYmxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdUcmFuc2Zvcm1hYmxlPihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1RyYW5zZm9ybWFibGU6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVHJhbnNmb3Jt
YWJsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdM
b2NhdGFibGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0xvY2F0YWJsZTo6Z2V0KHAx
LHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdUcmFuc2Zv
cm1hYmxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHVHJh
bnNmb3JtYWJsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIE9iamVjdEltcCAqU1ZHVHJhbnNmb3JtYWJsZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CkBAIC02MjUyLDcgKzYyNTIsNyBAQCBPYmplY3RJbXAgKlNWR1RyYW5zZm9ybWFibGU6OmJy
aWRnZShFeGVjCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHVHJhbnNmb3JtYWJs
ZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHVHJhbnNmb3JtYWJsZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9
CiAKLVZhbHVlIFNWR1RyYW5zZm9ybWFibGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHVHJhbnNmb3JtYWJsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHVHJhbnNmb3JtYWJsZT4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHVHJhbnNmb3JtYWJsZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC02MjY1
LDIxICs2MjY1LDIxIEBAIGJvb2wgU1ZHVVJJUmVmZXJlbmNlOjpoYXNQcm9wZXJ0eShFeGVjU3QK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1VSSVJlZmVyZW5jZTo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdVUklSZWZlcmVuY2U6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1VS
SVJlZmVyZW5jZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdV
UklSZWZlcmVuY2U6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHVVJJUmVmZXJlbmNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHVVJJUmVmZXJlbmNlOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHVVJJUmVmZXJlbmNlOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnBy
ZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHlu
YW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdV
UklSZWZlcmVuY2U6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNjI4Nyw3ICs2Mjg3
LDcgQEAgT2JqZWN0SW1wICpTVkdVUklSZWZlcmVuY2U6OmJyaWRnZShFeGVjUwogICAgIHJldHVy
biBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR1VSSVJlZmVyZW5jZT4ocDEsc3RhdGljX2Nhc3Q8U1ZH
VVJJUmVmZXJlbmNlOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHVVJJUmVmZXJl
bmNlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1VSSVJlZmVyZW5j
ZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVE
T01PYmplY3Q8U1ZHVVJJUmVmZXJlbmNlPihwMSxzdGF0aWNfY2FzdDxTVkdVUklSZWZlcmVuY2U6
OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNjMwNiwxMiArNjMwNiwxMiBAQCBib29sIFNWR1Vz
ZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
YWx1ZSBTVkdVc2VFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR1VzZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006Omxvb2t1cEdldFZhbHVlPFNWR1VzZUVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHVXNlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdVc2VFbGVtZW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTYzMzYsMTAgKzYzMzYsMTAg
QEAgYm9vbCBTVkdVc2VFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUkdTKQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotT2JqZWN0IFNWR1VzZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdVc2VFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGlu
T2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdVc2VFbGVtZW50Ojpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTYzNDcsNyArNjM0Nyw3IEBAIE9iamVjdEltcCAq
U1ZHVXNlRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJX
QnJpZGdlPFNWR1VzZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1VzZUVsZW1lbnQ6OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdVc2VFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKlNWR1VzZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1VzZUVsZW1lbnQ+KHAx
LHN0YXRpY19jYXN0PFNWR1VzZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNjM2Mywx
MiArNjM2MywxMiBAQCBib29sIFNWR1ZpZXdFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdWaWV3RWxlbWVudDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdWaWV3RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHVmlld0Vs
ZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHVmlld0Vs
ZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
Vmlld0VsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
aWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0
KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEs
cDIscDMpOwpAQCAtNjM5MCwxMCArNjM5MCwxMCBAQCBib29sIFNWR1ZpZXdFbGVtZW50OjpwdXQo
UFVUX01FVEhPRF9BUkdTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHVmlld0Vs
ZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdWaWV3
RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJl
dHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAK
IE9iamVjdEltcCAqU1ZHVmlld0VsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtNjQwMSw3ICs2NDAxLDcgQEAgT2JqZWN0SW1wICpTVkdWaWV3RWxlbWVudDo6YnJpZGdlKEV4
ZWNTdAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHVmlld0VsZW1lbnQ+KHAx
LHN0YXRpY19jYXN0PFNWR1ZpZXdFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUg
U1ZHVmlld0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
Vmlld0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006OmNhY2hlRE9NT2JqZWN0PFNWR1ZpZXdFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdWaWV3
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC02NDE0LDEyICs2NDE0LDEyIEBAIGJvb2wg
U1ZHWm9vbUFuZFBhbjo6aGFzUHJvcGVydHkoRXhlY1N0YXQKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIFNWR1pvb21BbmRQYW46OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHWm9vbUFuZFBhbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHWm9vbUFuZFBhbj4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdab29tQW5kUGFuOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1pvb21BbmRQYW46OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChw
Mik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC02NDM2LDEwICs2
NDM2LDEwIEBAIGJvb2wgU1ZHWm9vbUFuZFBhbjo6cHV0SW5QYXJlbnRzKFBVVF9NRVQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdab29tQW5kUGFuOjpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHWm9vbUFuZFBhbjo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHWm9vbUFuZFBh
bjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC02NDQ3LDcgKzY0NDcsNyBAQCBPYmpl
Y3RJbXAgKlNWR1pvb21BbmRQYW46OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBLRE9N
OjpET01SV0JyaWRnZTxTVkdab29tQW5kUGFuPihwMSxzdGF0aWNfY2FzdDxTVkdab29tQW5kUGFu
OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHWm9vbUFuZFBhbjo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdab29tQW5kUGFuOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdab29t
QW5kUGFuPihwMSxzdGF0aWNfY2FzdDxTVkdab29tQW5kUGFuOjpQcml2YXRlICo+KGltcGwpKTsK
IH0KQEAgLTY0NjAsMTIgKzY0NjAsMTIgQEAgYm9vbCBTVkdab29tRXZlbnQ6Omhhc1Byb3BlcnR5
KEV4ZWNTdGF0ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHWm9vbUV2ZW50Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1pvb21FdmVudDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8
U1ZHWm9vbUV2ZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNW
R1pvb21FdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdab29tRXZlbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgaWYoS0RPTTo6VUlFdmVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gS0RPTTo6VUlF
dmVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC02NDc3LDEw
ICs2NDc3LDEwIEBAIGJvb2wgU1ZHWm9vbUV2ZW50OjpwdXQoUFVUX01FVEhPRF9BUkdTKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1pvb21FdmVudDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1pvb21FdmVudDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIEtET006OlVJRXZlbnQgS1NWRzo6RWNt
YUludGVyZmFjZTo6aW5oZXJpdGVkVUlFdmVudENhc3QoY29uc3QgT2JqZWN0SW1wICpwMSkKQEAg
LTY0OTcsNyArNjQ5Nyw3IEBAIE9iamVjdEltcCAqU1ZHWm9vbUV2ZW50OjpicmlkZ2UoRXhlY1N0
YXQKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1pvb21FdmVudD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHWm9vbUV2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHWm9v
bUV2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1pvb21FdmVu
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVE
T01PYmplY3Q8U1ZHWm9vbUV2ZW50PihwMSxzdGF0aWNfY2FzdDxTVkdab29tRXZlbnQ6OlByaXZh
dGUgKj4oZCkpOwogfQpJbmRleDoga3N2ZzIvZG9tL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQUVsZW1lbnQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
QUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6
NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQUVsZW1lbnQuY3BwCTggQXVnIDIwMDUg
MDk6MDM6MDIgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBA
ZW5kCiAqLwogCi1WYWx1ZSBTVkdBRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBRWxlbWVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FFbGVtZW50LmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBRWxlbWVudC5o
Ci0tLSBrc3ZnMi9kb20vU1ZHQUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR0FFbGVtZW50LmgJOCBBdWcgMjAwNSAwOTowMzowMiAtMDAwMApA
QCAtNjUsNyArNjUsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldB
UkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6
IGtzdmcyL2RvbS9TVkdBbmdsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuZ2xlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuZ2xlLmNwcAotLS0ga3N2ZzIvZG9tL1NW
R0FuZ2xlLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R0FuZ2xlLmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjAyIC0wMDAwCkBAIC00OSw3ICs0OSw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR0FuZ2xl
IiwgU1ZHQW5nbGVQcm90bywgU1ZHQW5nbGVQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR0FuZ2xlOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0FuZ2xlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03MSw3ICs3MSw3IEBAIFZhbHVlIFNW
R0FuZ2xlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9
CiAKLXZvaWQgU1ZHQW5nbGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdBbmdsZTo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQp
CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTc5LDEyICs3OSwxMiBAQCB2b2lkIFNWR0FuZ2xl
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0CiAJewogCQljYXNlIFNWR0FuZ2xlQ29uc3RhbnRz
OjpWYWx1ZToKIAkJewotCQkJc2V0VmFsdWUodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0
VmFsdWUodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgU1ZH
QW5nbGVDb25zdGFudHM6OlZhbHVlSW5TcGVjaWZpZWRVbml0czoKIAkJewotCQkJc2V0VmFsdWVJ
blNwZWNpZmllZFVuaXRzKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFZhbHVlSW5TcGVj
aWZpZWRVbml0cyh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2Fz
ZSBTVkdBbmdsZUNvbnN0YW50czo6VmFsdWVBc1N0cmluZzoKQEAgLTk5LDcgKzk5LDcgQEAgdm9p
ZCBTVkdBbmdsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdAogCUtET01fTEVBVkVfU0FGRShL
RE9NOjpET01FeGNlcHRpb24pCiB9CiAKLVZhbHVlIFNWR0FuZ2xlUHJvdG9GdW5jOjpjYWxsKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJ
bXAgKlNWR0FuZ2xlUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhTVkdBbmdsZSkK
IAlLRE9NX0VOVEVSX1NBRkUKQEAgLTEwOCwxMyArMTA4LDEzIEBAIFZhbHVlIFNWR0FuZ2xlUHJv
dG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAKIAl7CiAJCWNhc2UgU1ZHQW5nbGVDb25zdGFudHM6OkNv
bnZlcnRUb1NwZWNpZmllZFVuaXRzOgogCQl7Ci0JCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9
IGFyZ3NbMF0udG9VSW50MTYoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFy
Z3NbMF0tPnRvVUludDE2KGV4ZWMpOwogCQkJb2JqLmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHVu
aXRUeXBlKTsKIAkJfQogCQljYXNlIFNWR0FuZ2xlQ29uc3RhbnRzOjpOZXdWYWx1ZVNwZWNpZmll
ZFVuaXRzOgogCQl7Ci0JCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFyZ3NbMF0udG9VSW50
MTYoZXhlYyk7Ci0JCQlmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSBhcmdzWzFdLnRvTnVt
YmVyKGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUgPSBhcmdzWzBdLT50b1VJbnQx
NihleGVjKTsKKwkJCWZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IGFyZ3NbMV0tPnRvTnVt
YmVyKGV4ZWMpOwogCQkJb2JqLm5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5pdFR5cGUsIHZhbHVl
SW5TcGVjaWZpZWRVbml0cyk7CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdB
bmdsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdBbmdsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHQW5nbGUuaAotLS0ga3N2ZzIvZG9tL1NWR0FuZ2xlLmgJOSBKdWwgMjAwNSAw
Njo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmdsZS5oCTggQXVnIDIwMDUgMDk6
MDM6MDIgLTAwMDAKQEAgLTcyLDggKzcyLDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9QVVQK
IAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGlu
dCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cik7CiAJfTsKIAogfTsKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAotLS0ga3N2ZzIv
ZG9tL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAw
OTowMzowMiAtMDAwMApAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBl
bmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZUNv
bG9yRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVD
b2xvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCi0t
LSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCTggQXVnIDIw
MDUgMDk6MDM6MDIgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRl
RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdBbmltYXRlRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlRWxl
bWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdB
bmltYXRlRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwOTowMzowMiAtMDAwMApAQCAtMzcsNyArMzcs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKlNWR0FuaW1hdGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBr
c3ZnMi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVFbGVtZW50
LmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA5
OjAzOjAyIC0wMDAwCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VU
CiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9
OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCi0tLSBr
c3ZnMi9kb20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6
NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3Bw
CTggQXVnIDIwMDUgMDk6MDM6MDIgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDog
a3N2ZzIvZG9tL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVt
ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIv
ZG9tL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJOCBBdWcgMjAwNSAwOTowMzowMiAtMDAw
MApAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZP
UldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZEFuZ2xlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRBbmdsZS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRl
ZEFuZ2xlLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQW5nbGUuY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRBbmdsZS5jcHAJOCBB
dWcgMjAwNSAwOTowMzowMiAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2Ug
S1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVkQW5nbGU6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0
ZWRBbmdsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQW5n
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRBbmdsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRBbmdsZS5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0
ZWRBbmdsZS5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRBbmdsZS5oCTggQXVnIDIwMDUgMDk6MDM6MDIgLTAwMDAKQEAgLTU0LDcgKzU0LDcg
QEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9N
X0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07
CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZEJvb2xlYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZEJvb2xlYW4u
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRCb29sZWFuLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQm9vbGVhbi5j
cHAJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRl
ZEJvb2xlYW4uY3BwCTggQXVnIDIwMDUgMDk6MDM6MDMgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZEJvb2xl
YW46OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqU1ZHQW5pbWF0ZWRCb29sZWFuOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02MCw3ICs2
MCw3IEBAIFZhbHVlIFNWR0FuaW1hdGVkQm9vbGVhbjo6Z2V0VmFsdWVQcm9wZXIKIAlyZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0ZWRCb29sZWFuOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkK
K3ZvaWQgU1ZHQW5pbWF0ZWRCb29sZWFuOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IApAQCAtNjksNyArNjksNyBAQCB2b2lkIFNWR0FuaW1hdGVkQm9vbGVhbjo6cHV0VmFsdWVQcm9w
ZXJ0CiAJCWNhc2UgU1ZHQW5pbWF0ZWRCb29sZWFuQ29uc3RhbnRzOjpCYXNlVmFsOgogCQl7CiAJ
CQlpZihpbXBsKQotCQkJCWltcGwtPnNldEJhc2VWYWwodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsK
KwkJCQlpbXBsLT5zZXRCYXNlVmFsKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOwogCiAJCQlicmVh
azsKIAkJfQpJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQm9vbGVhbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZEJvb2xl
YW4uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR0FuaW1hdGVkQm9vbGVhbi5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRCb29sZWFuLmgJ
OSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZEJv
b2xlYW4uaAk4IEF1ZyAyMDA1IDA5OjAzOjAzIC0wMDAwCkBAIC01NSw4ICs1NSw4IEBAIG5hbWVz
cGFjZSBLU1ZHCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3Zn
Mi9kb20vU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbi5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZEVudW1lcmF0aW9u
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1h
dGVkRW51bWVyYXRpb24uY3BwCTggQXVnIDIwMDUgMDk6MDM6MDMgLTAwMDAKQEAgLTQyLDcgKzQy
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkRW51bWVyYXRpb246OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZF
CiAKQEAgLTYwLDcgKzYwLDcgQEAgVmFsdWUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Z2V0VmFs
dWVQcgogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdBbmltYXRlZEVudW1lcmF0
aW9uOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQp
CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uOjpwdXRWYWx1ZVBybwogCQljYXNlIFNWR0FuaW1hdGVkRW51bWVyYXRpb25D
b25zdGFudHM6OkJhc2VWYWw6CiAJCXsKIAkJCWlmKGltcGwpCi0JCQkJaW1wbC0+c2V0QmFzZVZh
bChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4odmFsdWUudG9OdW1iZXIoZXhlYykpKTsKKwkJ
CQlpbXBsLT5zZXRCYXNlVmFsKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih2YWx1ZS0+dG9O
dW1iZXIoZXhlYykpKTsKIAogCQkJYnJlYWs7CiAJCX0KSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmlt
YXRlZEVudW1lcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24u
aAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uaAk5IEp1bCAyMDA1IDA2OjU0
OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uaAk4IEF1
ZyAyMDA1IDA5OjAzOjAzIC0wMDAwCkBAIC01NSw4ICs1NSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJ
CUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBw
dXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtK
Uzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZWRJbnRlZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAKLS0t
IGtzdmcyL2RvbS9TVkdBbmltYXRlZEludGVnZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAw
MDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcAk4IEF1ZyAyMDA1IDA5
OjAzOjAzIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkSW50ZWdl
cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsK
IAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTksNyArNTksNyBAQCBWYWx1ZSBTVkdBbmltYXRlZElu
dGVnZXI6OmdldFZhbHVlUHJvcGVyCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNW
R0FuaW1hdGVkSW50ZWdlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR0FuaW1hdGVkSW50ZWdlcjo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZh
bHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBT
VkdBbmltYXRlZEludGVnZXI6OnB1dFZhbHVlUHJvcGVydAogCQljYXNlIFNWR0FuaW1hdGVkSW50
ZWdlckNvbnN0YW50czo6QmFzZVZhbDoKIAkJewogCQkJaWYoaW1wbCkKLQkJCQlpbXBsLT5zZXRC
YXNlVmFsKHN0YXRpY19jYXN0PGxvbmc+KHZhbHVlLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQkJaW1w
bC0+c2V0QmFzZVZhbChzdGF0aWNfY2FzdDxsb25nPih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpKTsK
IAogCQkJYnJlYWs7CiAJCX0KSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZEludGVnZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5p
bWF0ZWRJbnRlZ2VyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdBbmltYXRlZEludGVnZXIuaAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVk
SW50ZWdlci5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRJbnRlZ2VyLmgJOCBBdWcgMjAwNSAwOTowMzowMyAtMDAwMApAQCAtNTMsOCArNTMs
OCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGguY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZWRMZW5ndGguY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGguY3BwCTkgSnVs
IDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGgu
Y3BwCTggQXVnIDIwMDUgMDk6MDM6MDMgLTAwMDAKQEAgLTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZExlbmd0aDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpT
VkdBbmltYXRlZExlbmd0aDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0Fu
aW1hdGVkTGVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aC5oCi0tLSBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZWRMZW5ndGguaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoLmgJOCBBdWcgMjAwNSAwOTowMzowMyAtMDAwMApA
QCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBz
ZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aExpc3QuY3BwCi0tLSBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAJOCBBdWcgMjAwNSAwOTow
MzowMyAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQK
ICovCiAKLVZhbHVlIFNWR0FuaW1hdGVkTGVuZ3RoTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZExlbmd0
aExpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0
aExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9k
b20vU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aExpc3QuaAotLS0ga3N2ZzIv
ZG9tL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgJOCBBdWcgMjAwNSAwOTowMzow
MyAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNt
YVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVt
YmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9k
b20vU1ZHQW5pbWF0ZWROdW1iZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXIuY3BwCi0tLSBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWROdW1iZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXIuY3BwCTggQXVnIDIwMDUgMDk6MDM6MDMgLTAwMDAK
QEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1
ZSBTVkdBbmltYXRlZE51bWJlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZE51bWJlcjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NB
RkUKIApAQCAtNjEsNyArNjEsNyBAQCBWYWx1ZSBTVkdBbmltYXRlZE51bWJlcjo6Z2V0VmFsdWVQ
cm9wZXJ0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR0FuaW1hdGVkTnVtYmVy
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHQW5pbWF0ZWROdW1iZXI6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtE
T01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0
ZWROdW1iZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyLmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJl
ci5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0
ZWROdW1iZXIuaAk4IEF1ZyAyMDA1IDA5OjAzOjAzIC0wMDAwCkBAIC01NSw4ICs1NSw4IEBAIG5h
bWVzcGFjZSBLU1ZHCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBr
c3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0Fu
aW1hdGVkTnVtYmVyTGlzdC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlckxpc3Qu
Y3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0
ZWROdW1iZXJMaXN0LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjAzIC0wMDAwCkBAIC00MSw3ICs0MSw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZWRO
dW1iZXJMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlckxpc3Qu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0FuaW1hdGVkTnVtYmVyTGlzdC5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXJMaXN0
LmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRl
ZE51bWJlckxpc3QuaAk4IEF1ZyAyMDA1IDA5OjAzOjAzIC0wMDAwCkBAIC01NSw3ICs1NSw3IEBA
IG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9C
QVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9Owog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQYXRoRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRQYXRoRGF0YS5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFBhdGhEYXRh
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1h
dGVkUGF0aERhdGEuY3BwCTggQXVnIDIwMDUgMDk6MDM6MDMgLTAwMDAKQEAgLTQzLDcgKzQzLDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZFBh
dGhEYXRhOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUGF0aERhdGE6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6
IGtzdmcyL2RvbS9TVkdBbmltYXRlZFBhdGhEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVk
UGF0aERhdGEuaAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuaAk5IEp1bCAyMDA1
IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuaAk4
IEF1ZyAyMDA1IDA5OjAzOjAzIC0wMDAwCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZWRQb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZFBvaW50cy5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZFBvaW50cy5j
cHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFBvaW50cy5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1
MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFBvaW50cy5jcHAJOCBBdWcgMjAw
NSAwOTowMzowNCAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsK
IEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVkUG9pbnRzOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUG9p
bnRzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQb2ludHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRQb2ludHMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUG9pbnRzLmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRl
ZFBvaW50cy5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRQb2ludHMuaAk4IEF1ZyAyMDA1IDA5OjAzOjA0IC0wMDAwCkBAIC01NCw3ICs1NCw3
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RP
TV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5j
cHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCTkgSnVs
IDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2
ZUFzcGVjdFJhdGlvLmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjA0IC0wMDAwCkBAIC0zOSw3ICszOSw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlL
RE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUHJlc2VydmVBc3Bl
Y3RSYXRpby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcy
L2RvbS9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUHJlc2VydmVBc3Bl
Y3RSYXRpby5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJ
OSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFBy
ZXNlcnZlQXNwZWN0UmF0aW8uaAk4IEF1ZyAyMDA1IDA5OjAzOjA0IC0wMDAwCkBAIC01NCw3ICs1
NCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJ
S0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07
CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRSZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRSZWN0LmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0FuaW1hdGVkUmVjdC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFJlY3QuY3BwCTkgSnVs
IDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRSZWN0LmNw
cAk4IEF1ZyAyMDA1IDA5OjAzOjA0IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZWRSZWN0OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0Fu
aW1hdGVkUmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVk
UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdBbmltYXRlZFJlY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUmVjdC5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0
ZWRSZWN0LmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdB
bmltYXRlZFJlY3QuaAk4IEF1ZyAyMDA1IDA5OjAzOjA0IC0wMDAwCkBAIC01NCw3ICs1NCw3IEBA
IG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9C
QVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9Owog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdB
bmltYXRlZFN0cmluZy5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5jcHAJOSBK
dWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmlu
Zy5jcHAJOCBBdWcgMjAwNSAwOTowMzowNCAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBu
YW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVkU3RyaW5nOjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAg
KlNWR0FuaW1hdGVkU3RyaW5nOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02MCw3ICs2MCw3IEBAIFZh
bHVlIFNWR0FuaW1hdGVkU3RyaW5nOjpnZXRWYWx1ZVByb3BlcnQKIAlyZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0ZWRTdHJpbmc6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdB
bmltYXRlZFN0cmluZzo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtz
dmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRTdHJpbmcu
aAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkU3RyaW5nLmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5oCTggQXVnIDIwMDUgMDk6
MDM6MDQgLTAwMDAKQEAgLTU2LDggKzU2LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9CQVNF
Q0xBU1NfR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAm
dmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVl
LCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAJOSBKdWwgMjAw
NSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFRyYW5zZm9ybUxp
c3QuY3BwCTggQXVnIDIwMDUgMDk6MDM6MDQgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZFRyYW5zZm9ybUxp
c3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4
OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlz
dC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3QuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oCTggQXVnIDIwMDUgMDk6MDM6MDQgLTAwMDAKQEAgLTU1
LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlv
bgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdBbmltYXRpb25FbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1h
dGlvbkVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwOTowMzowNCAtMDAwMApAQCAt
NDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJP
VE9UWVBFKCJTVkdBbmltYXRpb25FbGVtZW50IiwgU1ZHQW5pbWF0aW9uRWxlbWVudFByb3RvLCBT
VkdBbmltYXRpb25FbGVtZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdBbmltYXRpb25FbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYxLDkgKzYx
LDkgQEAgVmFsdWUgU1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0VmFsdWVQcm9wZQogfQogCiAKLVZh
bHVlIFNWR0FuaW1hdGlvbkVsZW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJikKK1ZhbHVlSW1wICpTVkdBbmltYXRpb25FbGVt
ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBj
b25zdCBMaXN0ICYpCiB7Ci0JU1ZHQW5pbWF0aW9uRWxlbWVudCBvYmooY2FzdChleGVjLCBzdGF0
aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOworCVNWR0FuaW1hdGlv
bkVsZW1lbnQgb2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwogCUtET01fRU5URVJfU0FGRQogCiAJ
c3dpdGNoKGlkKQpJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGlvbkVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0aW9u
RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHQW5pbWF0aW9uRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0aW9uRWxl
bWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5p
bWF0aW9uRWxlbWVudC5oCTggQXVnIDIwMDUgMDk6MDM6MDQgLTAwMDAKQEAgLTYwLDcgKzYwLDcg
QEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pT
OjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZH
Q2lyY2xlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR0NpcmNsZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQ2lyY2xlRWxlbWVudC5jcHAKLS0tIGtz
dmcyL2RvbS9TVkdDaXJjbGVFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR0NpcmNsZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MDQg
LTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwog
Ci1WYWx1ZSBTVkdDaXJjbGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0NpcmNsZUVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdDaXJjbGVFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0NpcmNsZUVsZW1lbnQu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0NpcmNsZUVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0NpcmNsZUVsZW1lbnQuaAk5IEp1bCAy
MDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0NpcmNsZUVsZW1lbnQuaAk4
IEF1ZyAyMDA1IDA5OjAzOjA0IC0wMDAwCkBAIC02NSw3ICs2NSw3IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0NsaXBQYXRoRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R0NsaXBQYXRoRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2RvbS9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZH
Q2xpcFBhdGhFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwOTowMzowNCAtMDAwMApA
QCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVl
IFNWR0NsaXBQYXRoRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdDbGlwUGF0aEVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9T
QUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdDbGlwUGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQ2xpcFBhdGhFbGVtZW50
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdDbGlwUGF0aEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0NsaXBQYXRoRWxlbWVudC5oCTkg
SnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQ2xpcFBhdGhFbGVt
ZW50LmgJOCBBdWcgMjAwNSAwOTowMzowNCAtMDAwMApAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3Bh
Y2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJ
CUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdDb2xvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0Nv
bG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR0NvbG9yLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0NvbG9yLmNwcAk5IEp1bCAyMDA1IDA2
OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0NvbG9yLmNwcAk4IEF1ZyAyMDA1IDA5
OjAzOjA1IC0wMDAwCkBAIC00OSw3ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBL
U1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR0NvbG9yIiwgU1ZHQ29sb3JQcm90bywgU1ZHQ29s
b3JQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR0NvbG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0NvbG9yOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkBAIC02OCw3ICs2OCw3IEBAIFZhbHVlIFNWR0NvbG9yOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR0NvbG9yUHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQorVmFsdWVJbXAgKlNWR0NvbG9yUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJ
UyhTVkdDb2xvcikKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTkwLDcgKzkwLDcgQEAgVmFsdWUgU1ZH
Q29sb3JQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlIAogCQl9CiAJCWNhc2UgU1ZHQ29sb3JDb25z
dGFudHM6OlNldENvbG9yOgogCQl7Ci0JCQl1bnNpZ25lZCBzaG9ydCBjb2xvclR5cGUgPSBhcmdz
WzBdLnRvVUludDE2KGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgY29sb3JUeXBlID0gYXJnc1sw
XS0+dG9VSW50MTYoZXhlYyk7CiAJCQlLRE9NOjpET01TdHJpbmcgcmdiQ29sb3IgPSBLRE9NOjp0
b0RPTVN0cmluZyhleGVjLCBhcmdzWzFdKTsKIAkJCUtET006OkRPTVN0cmluZyBpY2NDb2xvciA9
IEtET006OnRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMl0pOwogCQkJb2JqLnNldENvbG9yKGNvbG9y
VHlwZSwgcmdiQ29sb3IsIGljY0NvbG9yKTsKSW5kZXg6IGtzdmcyL2RvbS9TVkdDb2xvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdDb2xv
ci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHQ29sb3IuaAotLS0ga3N2ZzIvZG9tL1NWR0NvbG9yLmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdDb2xvci5oCTggQXVnIDIwMDUgMDk6MDM6MDUgLTAw
MDAKQEAgLTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9G
T1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxl
bWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwOTowMzowNSAt
MDAwMApAQCAtNTIsNyArNTIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAK
LVZhbHVlIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0NvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3Zn
Mi9kb20vU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbkVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgKLS0t
IGtzdmcyL2RvbS9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oCTkgSnVsIDIw
MDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbkVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA5OjAzOjA1IC0wMDAwCkBAIC02MSw3ICs2MSw3
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NW
R0RlZnNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHRGVmc0VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRGVmc0VsZW1lbnQuY3BwCi0tLSBrc3ZnMi9k
b20vU1ZHRGVmc0VsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHRGVmc0VsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MDUgLTAwMDAKQEAg
LTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBT
VkdEZWZzRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpTVkdEZWZzRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRl
eDoga3N2ZzIvZG9tL1NWR0RlZnNFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0RlZnNFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5oCi0t
LSBrc3ZnMi9kb20vU1ZHRGVmc0VsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR0RlZnNFbGVtZW50LmgJOCBBdWcgMjAwNSAwOTowMzowNSAtMDAw
MApAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZP
UldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdEZXNjRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50
LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUy
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA5
OjAzOjA1IC0wMDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHRGVzY0VsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRGVzY0VsZW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9F
TlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdEZXNjRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdEZXNjRWxlbWVudC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
RGVzY0VsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50LmgJOSBKdWwgMjAwNSAw
Njo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdEZXNjRWxlbWVudC5oCTggQXVnIDIw
MDUgMDk6MDM6MDUgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdEb2N1bWVudC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdE
b2N1bWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdEb2N1bWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1
NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdEb2N1bWVudC5jcHAJOCBBdWcgMjAwNSAw
OTowMzowNSAtMDAwMApAQCAtNTAsNyArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBl
bmQKICovCiAKLVZhbHVlIFNWR0RvY3VtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0RvY3VtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tl
bikKIAl7CkluZGV4OiBrc3ZnMi9kb20vU1ZHRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRG9jdW1lbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0RvY3VtZW50LmgK
LS0tIGtzdmcyL2RvbS9TVkdEb2N1bWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHRG9jdW1lbnQuaAk4IEF1ZyAyMDA1IDA5OjAzOjA1IC0wMDAwCkBA
IC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR0VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdF
bGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R0VsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MDUgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdFbGVtZW50OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAg
KlNWR0VsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcxLDcgKzcxLDcgQEAgVmFsdWUgU1ZH
RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjUwogCXJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotdm9pZCBTVkdFbGVtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHRWxlbWVudDo6cHV0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBp
bnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0Vs
ZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR0VsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0VsZW1lbnQuaAk5IEp1bCAyMDA1IDA2
OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0VsZW1lbnQuaAk4IEF1ZyAyMDA1IDA5
OjAzOjA1IC0wMDAwCkBAIC01OCw4ICs1OCw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fUFVU
CiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBp
bnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0
dHIpOwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKFNWR0VsZW1lbnQpCkluZGV4OiBrc3ZnMi9k
b20vU1ZHRWxlbWVudEluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5j
ZS5jcHAKLS0tIGtzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCTkgSnVsIDIwMDUgMDY6
NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlLmNwcAk4IEF1
ZyAyMDA1IDA5OjAzOjA1IC0wMDAwCkBAIC00OSw3ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBL
RE9NOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHRWxlbWVudEluc3RhbmNlOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0VsZW1l
bnRJbnN0YW5jZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0VsZW1lbnRJ
bnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcy
L2RvbS9TVkdFbGVtZW50SW5zdGFuY2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZS5oCi0tLSBrc3ZnMi9kb20v
U1ZHRWxlbWVudEluc3RhbmNlLmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2UuaAk4IEF1ZyAyMDA1IDA5OjAzOjA1IC0wMDAwCkBA
IC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlL
RE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07
CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRWxlbWVudEluc3Rh
bmNlTGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0VsZW1l
bnRJbnN0YW5jZUxpc3QuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5jcHAJOCBBdWcgMjAwNSAwOTowMzowNiAtMDAw
MApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1F
TlRfUFJPVE9UWVBFKCJTVkdFbGVtZW50SW5zdGFuY2VMaXN0IiwgU1ZHRWxlbWVudEluc3RhbmNl
TGlzdFByb3RvLCBTVkdFbGVtZW50SW5zdGFuY2VMaXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdF
bGVtZW50SW5zdGFuY2VMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKQEAgLTY0LDcgKzY0LDcgQEAgVmFsdWUgU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6
Z2V0VmFsdWVQcgogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHRWxlbWVudElu
c3RhbmNlTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdFbGVtZW50SW5zdGFuY2VMaXN0UHJv
dG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhTVkdFbGVtZW50SW5zdGFuY2VMaXN0KQog
CUtET01fRU5URVJfU0FGRQpAQCAtNzMsNyArNzMsNyBAQCBWYWx1ZSBTVkdFbGVtZW50SW5zdGFu
Y2VMaXN0UHJvdG9GdW5jOjpjCiAJewogCQljYXNlIFNWR0VsZW1lbnRJbnN0YW5jZUxpc3RDb25z
dGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUlu
dDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4
ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHRWxlbWVudEluc3RhbmNlPihleGVj
LCBvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZH
RWxlbWVudEluc3RhbmNlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2VM
aXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmgJOSBKdWwgMjAwNSAw
Njo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmgJ
OCBBdWcgMjAwNSAwOTowMzowNiAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgS1NW
RwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIv
ZG9tL1NWR0VsbGlwc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRWxsaXBzZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRWxsaXBzZUVsZW1lbnQu
Y3BwCi0tLSBrc3ZnMi9kb20vU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6
NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCTggQXVnIDIw
MDUgMDk6MDM6MDYgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7
CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdFbGxpcHNlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGxpcHNlRWxl
bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0VsbGlwc2VFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R0VsbGlwc2VFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdFbGxpcHNlRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRWxsaXBz
ZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R0VsbGlwc2VFbGVtZW50LmgJOCBBdWcgMjAwNSAwOTowMzowNiAtMDAwMApAQCAtNjYsNyArNjYs
NyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9T
VkdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdFeGNlcHRpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRXhjZXB0aW9uLmNwcAotLS0ga3N2ZzIvZG9tL1NW
R0V4Y2VwdGlvbi5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdFeGNlcHRpb24uY3BwCTggQXVnIDIwMDUgMDk6MDM6MDYgLTAwMDAKQEAgLTM0LDcgKzM0
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdFeGNlcHRp
b246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpTVkdFeGNlcHRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tl
bikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDoga3N2ZzIvZG9tL1NWR0V4Y2Vw
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdFeGNlcHRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR0V4Y2VwdGlvbi5oCi0tLSBrc3ZnMi9kb20vU1ZHRXhjZXB0aW9uLmgJ
OSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdFeGNlcHRpb24u
aAk4IEF1ZyAyMDA1IDA5OjAzOjA2IC0wMDAwCkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5jcHAJOCBBdWcgMjAwNSAwOTowMzow
NiAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICov
CiAKLVZhbHVlIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZC5oCi0tLSBrc3ZnMi9kb20vU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oCTggQXVnIDIwMDUgMDk6MDM6MDYgLTAwMDAKQEAg
LTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2Vj
dGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRUJsZW5kRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFQmxl
bmRFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZFQmxlbmRF
bGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R0ZFQmxlbmRFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjA2IC0wMDAwCkBAIC00Niw3ICs0
Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOw0KIEBlbmQNCiAqLw0KIA0KLVZhbHVlIFNWR0ZF
QmxlbmRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdA0KK1ZhbHVlSW1wICpTVkdGRUJsZW5kRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QNCiB7DQogCUtET01fRU5URVJfU0FGRQ0K
IA0KSW5kZXg6IGtzdmcyL2RvbS9TVkdGRUJsZW5kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRUJsZW5kRWxlbWVudC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVC
bGVuZEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0ZFQmxlbmRFbGVtZW50LmgJOSBKdWwgMjAw
NSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUJsZW5kRWxlbWVudC5oCTgg
QXVnIDIwMDUgMDk6MDM6MDYgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIEtTVkcN
CiAJCUtET01fR0VUDQogCQlLRE9NX0ZPUldBUkRQVVQNCiANCi0JCUtKUzo6VmFsdWUgZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsNCisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7DQogCX07DQogfTsNCiANCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAJOSBKdWwgMjAw
NSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5jcHAJOCBBdWcgMjAwNSAwOTowMzowNiAtMDAwMApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBu
YW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBr
c3ZnMi9kb20vU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA5OjAzOjA2IC0wMDAwCkBAIC01OSw3ICs1OSw3
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisr
KyBrc3ZnMi9kb20vU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCTggQXVnIDIwMDUg
MDk6MDM6MDYgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7DQog
QGVuZA0KICovDQogDQotVmFsdWUgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0DQorVmFsdWVJbXAg
KlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdA0KIHsNCiAJS0RPTV9FTlRFUl9TQUZFDQogDQpJbmRl
eDoga3N2ZzIvZG9tL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20v
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgJOCBBdWcg
MjAwNSAwOTowMzowNiAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgS1NWRw0KIAkJ
S0RPTV9HRVQNCiAJCUtET01fRk9SV0FSRFBVVA0KIA0KLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ow0KKwkJS0pTOjpW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsNCiAJfTsNCiB9Ow0KIA0KSW5kZXg6IGtzdmcyL2RvbS9TVkdGRUNvbXBvc2l0ZUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcy
L2RvbS9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAotLS0g
a3N2ZzIvZG9tL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCTggQXVnIDIw
MDUgMDk6MDM6MDYgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7
CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKLS0t
IGtzdmcyL2RvbS9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCTggQXVnIDIwMDUg
MDk6MDM6MDcgLTAwMDAKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9H
RVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
CX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRUZsb29kRWxl
bWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdGRUZsb29kRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGRUZsb29kRWxlbWVu
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUZs
b29kRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwOTowMzowNyAtMDAwMApAQCAtNDIsNyArNDIsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS1NWRzsNCiBAZW5kDQogKi8NCiANCi1WYWx1ZSBTVkdGRUZsb29k
RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QNCitWYWx1ZUltcCAqU1ZHRkVGbG9vZEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0DQogew0KIAlLRE9NX0VOVEVSX1NBRkUNCiANCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHRkVGbG9vZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVGbG9vZEVsZW1lbnQuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFRmxvb2RF
bGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRUZsb29kRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6
NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVGbG9vZEVsZW1lbnQuaAk4IEF1ZyAy
MDA1IDA5OjAzOjA3IC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBLU1ZHDQogCQlL
RE9NX0dFVA0KIAkJS0RPTV9GT1JXQVJEUFVUDQogDQotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7DQorCQlLSlM6OlZh
bHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Ow0KIAl9Ow0KIH07DQogDQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
Y3BwCi0tLSBrc3ZnMi9kb20vU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5jcHAJOCBBdWcgMjAwNSAwOTowMzowNyAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBu
YW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQiLCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnRQcm90bywgU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03MSwx
NyArNzEsMTcgQEAgVmFsdWUgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpnZXRWYWx1ZQogCXJl
dHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50UHJv
dG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQorVmFsdWVJbXAgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudFByb3RvRnVuYzo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykK
IHsKLQlTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQgb2JqKGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8
S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsKKwlTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQgb2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwogCUtET01fRU5URVJfU0FGRQogCiAJc3dp
dGNoKGlkKQogCXsKIAkJY2FzZSBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnRDb25zdGFudHM6OlNl
dFN0ZERldmlhdGlvbjoKIAkJewotCQkJZmxvYXQgc3RkRGV2aWF0aW9uWCA9IGFyZ3NbMF0udG9O
dW1iZXIoZXhlYyk7Ci0JCQlmbG9hdCBzdGREZXZpYXRpb25ZID0gYXJnc1sxXS50b051bWJlcihl
eGVjKTsKKwkJCWZsb2F0IHN0ZERldmlhdGlvblggPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsK
KwkJCWZsb2F0IHN0ZERldmlhdGlvblkgPSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKIAkJCW9i
ai5zZXRTdGREZXZpYXRpb24oc3RkRGV2aWF0aW9uWCwgc3RkRGV2aWF0aW9uWSk7CiAKIAkJCXJl
dHVybiBVbmRlZmluZWQoKTsKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAotLS0ga3N2
ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAw
MDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgJOCBBdWcgMjAw
NSAwOTowMzowNyAtMDAwMApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9N
X0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFSW1hZ2VF
bGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZFSW1hZ2VFbGVt
ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZF
SW1hZ2VFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjA3IC0wMDAwCkBAIC00NSw3ICs0NSw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHRkVJbWFnZUVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqU1ZHRkVJbWFnZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtz
dmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVJbWFnZUVsZW1lbnQu
aAotLS0ga3N2ZzIvZG9tL1NWR0ZFSW1hZ2VFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MyAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5oCTggQXVnIDIwMDUgMDk6
MDM6MDcgLTAwMDAKQEAgLTYyLDcgKzYyLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQK
IAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07
CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRU1lcmdlRWxlbWVu
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdGRU1lcmdlRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGRU1lcmdlRWxlbWVudC5j
cHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRU1lcmdl
RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwOTowMzowNyAtMDAwMApAQCAtNDAsNyArNDAsNyBAQCB1
c2luZyBuYW1lc3BhY2UgS1NWRzsNCiBAZW5kDQogKi8NCiANCi1WYWx1ZSBTVkdGRU1lcmdlRWxl
bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QN
CitWYWx1ZUltcCAqU1ZHRkVNZXJnZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0DQogew0KIAlLRE9NX0VOVEVSX1NBRkUNCiANCkluZGV4
OiBrc3ZnMi9kb20vU1ZHRkVNZXJnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVNZXJnZUVsZW1lbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VFbGVt
ZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRU1lcmdlRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6
NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVNZXJnZUVsZW1lbnQuaAk4IEF1ZyAyMDA1
IDA5OjAzOjA3IC0wMDAwCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBLU1ZHDQogCQlLRE9N
X0dFVA0KIAkJS0RPTV9GT1JXQVJEUFVUDQogDQotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7DQorCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0Ow0KIAl9Ow0KIH07DQogDQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VOb2RlRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCi0tLSBrc3Zn
Mi9kb20vU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAw
OTowMzowNyAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBl
bmQKICovCiAKLVZhbHVlIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdGRU1lcmdlTm9k
ZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVNZXJnZU5v
ZGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgKLS0tIGtz
dmcyL2RvbS9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oCTggQXVnIDIwMDUgMDk6
MDM6MDcgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQK
IAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07
CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVPZmZzZXRFbGVt
ZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGRU9mZnNldEVsZW1l
bnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVP
ZmZzZXRFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjA3IC0wMDAwCkBAIC00Niw3ICs0Niw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHRkVPZmZzZXRF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDog
a3N2ZzIvZG9tL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRU9mZnNldEVsZW1lbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRkVPZmZzZXRFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1
NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRU9mZnNldEVsZW1lbnQuaAk4IEF1ZyAy
MDA1IDA5OjAzOjA3IC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtE
T01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRVRpbGVF
bGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRkVUaWxlRWxlbWVu
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRVRp
bGVFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjA3IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLU1ZHOw0KIEBlbmQNCiAqLw0KIA0KLVZhbHVlIFNWR0ZFVGlsZUVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
DQorVmFsdWVJbXAgKlNWR0ZFVGlsZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0DQogew0KIAlLRE9NX0VOVEVSX1NBRkUNCiANCkluZGV4
OiBrc3ZnMi9kb20vU1ZHRkVUaWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRVRpbGVFbGVtZW50LmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRVRpbGVFbGVtZW50
LmgKLS0tIGtzdmcyL2RvbS9TVkdGRVRpbGVFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MyAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRVRpbGVFbGVtZW50LmgJOCBBdWcgMjAwNSAwOTow
MzowNyAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgS1NWRw0KIAkJS0RPTV9HRVQN
CiAJCUtET01fRk9SV0FSRFBVVA0KIA0KLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ow0KKwkJS0pTOjpWYWx1ZUltcCAq
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsN
CiAJfTsNCiB9Ow0KIA0KSW5kZXg6IGtzdmcyL2RvbS9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
RkVUdXJidWxlbmNlRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAotLS0ga3N2ZzIv
ZG9tL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAw
OTowMzowOCAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBl
bmQKICovCiAKLVZhbHVlIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVUdXJidWxl
bmNlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCi0t
LSBrc3ZnMi9kb20vU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTMg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCTggQXVnIDIw
MDUgMDk6MDM6MDggLTAwMDAKQEAgLTYyLDcgKzYyLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRmlsdGVyRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZpbHRlckVs
ZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHRmlsdGVyRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGaWx0ZXJFbGVtZW50
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZpbHRl
ckVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MDggLTAwMDAKQEAgLTYxLDcgKzYxLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHRmls
dGVyRWxlbWVudCIsIFNWR0ZpbHRlckVsZW1lbnRQcm90bywgU1ZHRmlsdGVyRWxlbWVudFByb3Rv
RnVuYykKIAotVmFsdWUgU1ZHRmlsdGVyRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdGaWx0ZXJFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtE
T01fRU5URVJfU0FGRQogCkBAIC05MSwxNyArOTEsMTcgQEAgVmFsdWUgU1ZHRmlsdGVyRWxlbWVu
dDo6Z2V0VmFsdWVQcm9wZXJ0eQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZH
RmlsdGVyRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdGaWx0ZXJFbGVtZW50UHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewotCVNWR0ZpbHRlckVsZW1lbnQgb2JqKGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8
S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsKKwlTVkdGaWx0ZXJFbGVtZW50IG9i
aihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlLRE9NX0VOVEVSX1NBRkUKIAogCXN3aXRjaChpZCkK
IAl7CiAJCWNhc2UgU1ZHRmlsdGVyRWxlbWVudENvbnN0YW50czo6U2V0RmlsdGVyUmVzOgogCQl7
Ci0JCQl1bnNpZ25lZCBsb25nIGZpbHRlclJlc1ggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOzsK
LQkJCXVuc2lnbmVkIGxvbmcgZmlsdGVyUmVzWSA9IGFyZ3NbMV0udG9VSW50MzIoZXhlYyk7Owor
CQkJdW5zaWduZWQgbG9uZyBmaWx0ZXJSZXNYID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7Owor
CQkJdW5zaWduZWQgbG9uZyBmaWx0ZXJSZXNZID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7Owog
CQkJb2JqLnNldEZpbHRlclJlcyhmaWx0ZXJSZXNYLCBmaWx0ZXJSZXNZKTsKIAkJCXJldHVybiBV
bmRlZmluZWQoKTsKIAkJfQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZpbHRlckVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRmlsdGVy
RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHRmlsdGVyRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRmlsdGVyRWxlbWVudC5o
CTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRmlsdGVyRWxl
bWVudC5oCTggQXVnIDIwMDUgMDk6MDM6MDggLTAwMDAKQEAgLTc2LDcgKzc2LDcgQEAgbmFtZXNw
YWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCTkgSnVsIDIwMDUgMDY6
NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjA4IC0wMDAwCkBAIC00Niw3ICs0Niw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCi0tLSBrc3ZnMi9kb20vU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aAk4IEF1ZyAyMDA1IDA5OjAzOjA4IC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdG
aXRUb1ZpZXdCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdGaXRUb1ZpZXdCb3guY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRml0VG9WaWV3Qm94LmNwcAotLS0ga3N2ZzIv
ZG9tL1NWR0ZpdFRvVmlld0JveC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdGaXRUb1ZpZXdCb3guY3BwCTggQXVnIDIwMDUgMDk6MDM6MDggLTAwMDAK
QEAgLTM4LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1
ZSBTVkdGaXRUb1ZpZXdCb3g6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRml0VG9WaWV3Qm94OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZpdFRvVmlld0JveC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRml0VG9WaWV3
Qm94LmgKLS0tIGtzdmcyL2RvbS9TVkdGaXRUb1ZpZXdCb3guaAk5IEp1bCAyMDA1IDA2OjU0OjUz
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZpdFRvVmlld0JveC5oCTggQXVnIDIwMDUgMDk6
MDM6MDggLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8v
IEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdHRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR0dFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR0dFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0dFbGVtZW50LmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0dFbGVtZW50
LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjA4IC0wMDAwCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHR0VsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHR0Vs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdHRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdHRWxl
bWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHR0VsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0dFbGVtZW50LmgJOSBKdWwgMjAwNSAw
Njo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdHRWxlbWVudC5oCTggQXVnIDIwMDUg
MDk6MDM6MDggLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9H
RVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
CX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHR3JhZGllbnRF
bGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdHcmFkaWVudEVs
ZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
R3JhZGllbnRFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjA4IC0wMDAwCkBAIC00Niw3ICs0
Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHR3JhZGll
bnRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKlNWR0dyYWRpZW50RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAkKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHR3JhZGllbnRFbGVtZW50LmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdHcmFkaWVu
dEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0dyYWRpZW50RWxlbWVudC5oCTkgSnVsIDIwMDUg
MDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHR3JhZGllbnRFbGVtZW50LmgJOCBB
dWcgMjAwNSAwOTowMzowOCAtMDAwMApAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgS1NWRwog
CQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdJbWFnZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdJbWFn
ZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHSW1hZ2VFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ltYWdlRWxlbWVu
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdJbWFn
ZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MDggLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdJbWFnZUVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHSW1hZ2VFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR0ltYWdlRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHSW1hZ2VFbGVtZW50LmgKLS0tIGtzdmcyL2Rv
bS9TVkdJbWFnZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR0ltYWdlRWxlbWVudC5oCTggQXVnIDIwMDUgMDk6MDM6MDkgLTAwMDAKQEAgLTcy
LDcgKzcyLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVU
CiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3Zn
Mi9kb20vU1ZHTGFuZ1NwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHTGFuZ1NwYWNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0xhbmdTcGFjZS5jcHAKLS0tIGtzdmcy
L2RvbS9TVkdMYW5nU3BhY2UuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHTGFuZ1NwYWNlLmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjA5IC0wMDAwCkBAIC00
Miw3ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZH
TGFuZ1NwYWNlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKlNWR0xhbmdTcGFjZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjAsNyAr
NjAsNyBAQCBWYWx1ZSBTVkdMYW5nU3BhY2U6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR0xhbmdTcGFjZTo6cHV0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lk
IFNWR0xhbmdTcGFjZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtz
dmcyL2RvbS9TVkdMYW5nU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHTGFuZ1NwYWNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdMYW5nU3BhY2UuaAotLS0ga3N2ZzIvZG9t
L1NWR0xhbmdTcGFjZS5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHTGFuZ1NwYWNlLmgJOCBBdWcgMjAwNSAwOTowMzowOSAtMDAwMApAQCAtNjIsOCArNjIs
OCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR0xlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xlbmd0aC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdMZW5ndGguY3BwCi0tLSBrc3Zn
Mi9kb20vU1ZHTGVuZ3RoLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR0xlbmd0aC5jcHAJOCBBdWcgMjAwNSAwOTowMzowOSAtMDAwMApAQCAtNTQsNyAr
NTQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBF
KCJTVkdMZW5ndGgiLCBTVkdMZW5ndGhQcm90bywgU1ZHTGVuZ3RoUHJvdG9GdW5jKQogCi1WYWx1
ZSBTVkdMZW5ndGg6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqU1ZHTGVuZ3RoOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03NiwyMCAr
NzYsMjAgQEAgVmFsdWUgU1ZHTGVuZ3RoOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdAogCXJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdMZW5ndGg6OnB1dFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBT
VkdMZW5ndGg6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZh
bHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCQogCXN3aXRjaCh0b2tl
bikKIAl7CiAJCWNhc2UgU1ZHTGVuZ3RoQ29uc3RhbnRzOjpWYWx1ZToKLQkJCXNldFZhbHVlKHZh
bHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFZhbHVlKHZhbHVlLT50b051bWJlcihleGVjKSk7
CiAJCQlicmVhazsKIAkJY2FzZSBTVkdMZW5ndGhDb25zdGFudHM6OlZhbHVlQXNTdHJpbmc6CiAJ
CQlzZXRWYWx1ZUFzU3RyaW5nKEtET006OnRvRE9NU3RyaW5nKGV4ZWMsIHZhbHVlKSk7CiAJCQli
cmVhazsKIAkJY2FzZSBTVkdMZW5ndGhDb25zdGFudHM6OlZhbHVlSW5TcGVjaWZpZWRVbml0czoK
LQkJCXNldFZhbHVlSW5TcGVjaWZpZWRVbml0cyh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlz
ZXRWYWx1ZUluU3BlY2lmaWVkVW5pdHModmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFr
OwogCQlkZWZhdWx0OgogCQkJa2RXYXJuaW5nKCkgPDwgIlVuaGFuZGxlZCB0b2tlbiBpbiAiIDw8
IGtfZnVuY2luZm8gPDwgIiA6ICIgPDwgdG9rZW4gPDwgZW5kbDsKQEAgLTk4LDcgKzk4LDcgQEAg
dm9pZCBTVkdMZW5ndGg6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCUtET01fTEVBVkVfU0FG
RShLRE9NOjpET01FeGNlcHRpb24pCiB9CiAKLVZhbHVlIFNWR0xlbmd0aFByb3RvRnVuYzo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1Zh
bHVlSW1wICpTVkdMZW5ndGhQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR0xl
bmd0aCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTEwNywxNCArMTA3LDE0IEBAIFZhbHVlIFNWR0xl
bmd0aFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUKIAl7CiAJCWNhc2UgU1ZHTGVuZ3RoQ29uc3Rh
bnRzOjpOZXdWYWx1ZVNwZWNpZmllZFVuaXRzOgogCQl7Ci0JCQl1bnNpZ25lZCBzaG9ydCB1bml0
VHlwZSA9IGFyZ3NbMF0udG9VSW50MTYoZXhlYyk7Ci0JCQlmbG9hdCB2YWx1ZUluU3BlY2lmaWVk
VW5pdHMgPSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgdW5pdFR5
cGUgPSBhcmdzWzBdLT50b1VJbnQxNihleGVjKTsKKwkJCWZsb2F0IHZhbHVlSW5TcGVjaWZpZWRV
bml0cyA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJb2JqLm5ld1ZhbHVlU3BlY2lmaWVk
VW5pdHModW5pdFR5cGUsIHZhbHVlSW5TcGVjaWZpZWRVbml0cyk7CiAJCQlyZXR1cm4gVW5kZWZp
bmVkKCk7CiAJCX0KIAkJY2FzZSBTVkdMZW5ndGhDb25zdGFudHM6OkNvbnZlcnRUb1NwZWNpZmll
ZFVuaXRzOgogCQl7Ci0JCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFyZ3NbMF0udG9VSW50
MTYoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFyZ3NbMF0tPnRvVUludDE2
KGV4ZWMpOwogCQkJb2JqLmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHVuaXRUeXBlKTsKIAkJCXJl
dHVybiBVbmRlZmluZWQoKTsKIAkJfQpJbmRleDoga3N2ZzIvZG9tL1NWR0xlbmd0aC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdMZW5ndGgu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0xlbmd0aC5oCi0tLSBrc3ZnMi9kb20vU1ZHTGVuZ3RoLmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdMZW5ndGguaAk4IEF1ZyAyMDA1IDA5OjAzOjA5IC0w
MDAwCkBAIC03MSw4ICs3MSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fUFVUCiAJCUtET01f
Q0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07
CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xlbmd0aExpc3QuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTGVu
Z3RoTGlzdC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdMZW5ndGhMaXN0LmNwcAk5IEp1bCAyMDA1IDA2
OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0xlbmd0aExpc3QuY3BwCTggQXVnIDIw
MDUgMDk6MDM6MDkgLTAwMDAKQEAgLTU2LDcgKzU2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7
CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHTGVuZ3RoTGlzdCIsIFNWR0xlbmd0aExp
c3RQcm90bywgU1ZHTGVuZ3RoTGlzdFByb3RvRnVuYykKIAotVmFsdWUgU1ZHTGVuZ3RoTGlzdDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpTVkdMZW5ndGhMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03Miw3ICs3Miw3IEBAIFZh
bHVlIFNWR0xlbmd0aExpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLVZhbHVlIFNWR0xlbmd0aExpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHTGVu
Z3RoTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoU1ZHTGVuZ3RoTGlzdCkK
IAlLRE9NX0VOVEVSX1NBRkUKQEAgLTkxLDI0ICs5MSwyNCBAQCBWYWx1ZSBTVkdMZW5ndGhMaXN0
UHJvdG9GdW5jOjpjYWxsKEV4ZWNTCiAJCX0KIAkJY2FzZSBTVkdMZW5ndGhMaXN0Q29uc3RhbnRz
OjpHZXRJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQz
MihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVj
KTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR0xlbmd0aD4oZXhlYywgb2JqLmdldEl0
ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR0xlbmd0aExpc3RDb25zdGFudHM6Okluc2VydEl0
ZW1CZWZvcmU6CiAJCXsKIAkJCVNWR0xlbmd0aCBuZXdJdGVtID0gS0RPTTo6ZWNtYV9jYXN0PFNW
R0xlbmd0aD4oZXhlYywgYXJnc1swXSwgJnRvU1ZHTGVuZ3RoKTsKLQkJCXVuc2lnbmVkIGxvbmcg
aW5kZXggPSBhcmdzWzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9
IGFyZ3NbMV0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZH
TGVuZ3RoPihleGVjLCBvYmouaW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRleCkpOwogCQl9
CiAJCWNhc2UgU1ZHTGVuZ3RoTGlzdENvbnN0YW50czo6UmVwbGFjZUl0ZW06CiAJCXsKIAkJCVNW
R0xlbmd0aCBuZXdJdGVtID0gS0RPTTo6ZWNtYV9jYXN0PFNWR0xlbmd0aD4oZXhlYywgYXJnc1sw
XSwgJnRvU1ZHTGVuZ3RoKTsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLnRvVUlu
dDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0tPnRvVUludDMyKGV4
ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTGVuZ3RoPihleGVjLCBvYmoucmVw
bGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR0xlbmd0aExpc3RDb25z
dGFudHM6OlJlbW92ZUl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBd
LnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUlu
dDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTGVuZ3RoPihleGVjLCBv
YmoucmVtb3ZlSXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHTGVuZ3RoTGlzdENvbnN0YW50
czo6QXBwZW5kSXRlbToKSW5kZXg6IGtzdmcyL2RvbS9TVkdMZW5ndGhMaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xlbmd0aExpc3Qu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0xlbmd0aExpc3QuaAotLS0ga3N2ZzIvZG9tL1NWR0xlbmd0aExpc3QuaAk5IEp1bCAyMDA1IDA2
OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0xlbmd0aExpc3QuaAk4IEF1ZyAyMDA1
IDA5OjAzOjA5IC0wMDAwCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGlj
OiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHTGlu
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdMaW5lRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdMaW5lRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9T
VkdMaW5lRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdMaW5lRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwOTowMzowOSAtMDAwMApAQCAtNDIs
NyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0xp
bmVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKlNWR0xpbmVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBr
c3ZnMi9kb20vU1ZHTGluZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTGluZUVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0xpbmVFbGVtZW50LmgKLS0tIGtz
dmcyL2RvbS9TVkdMaW5lRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisr
KyBrc3ZnMi9kb20vU1ZHTGluZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA5OjAzOjA5IC0wMDAwCkBA
IC02Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FS
RFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a3N2ZzIvZG9tL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xpbmVhckdyYWRpZW50RWxlbWVu
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIv
ZG9tL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwOTowMzowOSAtMDAw
MApAQCAtNDMsNyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZh
bHVlIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdMaW5lYXJHcmFkaWVudEVsZW1l
bnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkluZGV4OiBrc3ZnMi9kb20vU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIv
ZG9tL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgKLS0t
IGtzdmcyL2RvbS9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU0
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCTggQXVn
IDIwMDUgMDk6MDM6MDkgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJ
S0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHTG9jYXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTG9jYXRhYmxl
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR0xvY2F0YWJsZS5jcHAKLS0tIGtzdmcyL2RvbS9TVkdMb2NhdGFibGUuY3BwCTkgSnVsIDIw
MDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTG9jYXRhYmxlLmNwcAk4IEF1
ZyAyMDA1IDA5OjAzOjA5IC0wMDAwCkBAIC01Myw3ICs1Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBL
U1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR0xvY2F0YWJsZSIsIFNWR0xvY2F0
YWJsZVByb3RvLCBTVkdMb2NhdGFibGVQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR0xvY2F0YWJsZTo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpTVkdMb2NhdGFibGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcxLDkgKzcxLDkgQEAgVmFs
dWUgU1ZHTG9jYXRhYmxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQogCXJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotVmFsdWUgU1ZHTG9jYXRhYmxlUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR0xvY2F0
YWJsZVByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwg
Y29uc3QgTGlzdCAmYXJncykKIHsKLQlTVkdMb2NhdGFibGUgb2JqKGNhc3QoZXhlYywgc3RhdGlj
X2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsKKwlTVkdMb2NhdGFibGUg
b2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwogCUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKGlk
KQpJbmRleDoga3N2ZzIvZG9tL1NWR0xvY2F0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdMb2NhdGFibGUuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0xvY2F0YWJsZS5oCi0t
LSBrc3ZnMi9kb20vU1ZHTG9jYXRhYmxlLmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdMb2NhdGFibGUuaAk4IEF1ZyAyMDA1IDA5OjAzOjEwIC0wMDAwCkBA
IC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNl
Y3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHTWFya2VyRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR01hcmtl
ckVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHTWFya2VyRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdNYXJrZXJFbGVt
ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR01h
cmtlckVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTAgLTAwMDAKQEAgLTUxLDcgKzUxLDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZH
TWFya2VyRWxlbWVudCIsIFNWR01hcmtlckVsZW1lbnRQcm90bywgU1ZHTWFya2VyRWxlbWVudFBy
b3RvRnVuYykKIAotVmFsdWUgU1ZHTWFya2VyRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdNYXJrZXJFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewog
CUtET01fRU5URVJfU0FGRQogCQpAQCAtNzMsOSArNzMsOSBAQCBWYWx1ZSBTVkdNYXJrZXJFbGVt
ZW50OjpnZXRWYWx1ZVByb3BlcnR5CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBT
VkdNYXJrZXJFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR01hcmtlckVsZW1lbnRQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCiB7Ci0JU1ZHTWFya2VyRWxlbWVudCBvYmooY2FzdChleGVjLCBzdGF0aWNfY2Fz
dDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOworCVNWR01hcmtlckVsZW1lbnQg
b2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwogCUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKGlk
KQpJbmRleDoga3N2ZzIvZG9tL1NWR01hcmtlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTWFya2VyRWxlbWVudC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTWFya2Vy
RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHTWFya2VyRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6
NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTWFya2VyRWxlbWVudC5oCTggQXVnIDIw
MDUgMDk6MDM6MTAgLTAwMDAKQEAgLTczLDcgKzczLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHTWF0cml4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTWF0cml4LmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR01hdHJp
eC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdNYXRyaXguY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAw
MDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTWF0cml4LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjEwIC0w
MDAwCkBAIC01OCw3ICs1OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExF
TUVOVF9QUk9UT1RZUEUoIlNWR01hdHJpeCIsIFNWR01hdHJpeFByb3RvLCBTVkdNYXRyaXhQcm90
b0Z1bmMpCiAKLVZhbHVlIFNWR01hdHJpeDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdNYXRyaXg6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZF
CiAKQEAgLTg0LDcgKzg0LDcgQEAgVmFsdWUgU1ZHTWF0cml4OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdNYXRyaXg6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwg
aW50KQordm9pZCBTVkdNYXRyaXg6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBA
IC05MiwzMiArOTIsMzIgQEAgdm9pZCBTVkdNYXRyaXg6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YQogCXsKIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OkE6CiAJCXsKLQkJCXNldEEodmFsdWUu
dG9OdW1iZXIoZXhlYykpOworCQkJc2V0QSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJl
YWs7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OkI6CiAJCXsKLQkJCXNldEIodmFs
dWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0Qih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJ
YnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OkM6CiAJCXsKLQkJCXNldEMo
dmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0Qyh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwog
CQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OkQ6CiAJCXsKLQkJCXNl
dEQodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0RCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykp
OwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OkU6CiAJCXsKLQkJ
CXNldEUodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0RSh2YWx1ZS0+dG9OdW1iZXIoZXhl
YykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OkY6CiAJCXsK
LQkJCXNldEYodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0Rih2YWx1ZS0+dG9OdW1iZXIo
ZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTEyNyw3ICsxMjcsNyBAQCB2
b2lkIFNWR01hdHJpeDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAJS0RPTV9MRUFWRV9TQUZF
KEtET006OkRPTUV4Y2VwdGlvbikKIH0KIAotVmFsdWUgU1ZHTWF0cml4UHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKlNWR01hdHJpeFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdElt
cCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoU1ZHTWF0
cml4KQogCUtET01fRU5URVJfU0FGRQpAQCAtMTM4LDggKzEzOCw4IEBAIFZhbHVlIFNWR01hdHJp
eFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNW
R01hdHJpeD4oZXhlYywgb2JqLmludmVyc2UoKSk7CiAJCWNhc2UgU1ZHTWF0cml4Q29uc3RhbnRz
OjpUcmFuc2xhdGU6CiAJCXsKLQkJCWRvdWJsZSB4ID0gYXJnc1swXS50b051bWJlcihleGVjKTsK
LQkJCWRvdWJsZSB5ID0gYXJnc1sxXS50b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSB4ID0gYXJn
c1swXS0+dG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgeSA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4
ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTWF0cml4PihleGVjLCBvYmoudHJh
bnNsYXRlKHgsIHkpKTsKIAkJfQogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6TXVsdGlwbHk6
CkBAIC0xNDksMjQgKzE0OSwyNCBAQCBWYWx1ZSBTVkdNYXRyaXhQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlCiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OlNjYWxlOgogCQl7Ci0JCQlk
b3VibGUgc2NhbGVGYWN0b3IgPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHNj
YWxlRmFjdG9yID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2Fm
ZV9jYWNoZTxTVkdNYXRyaXg+KGV4ZWMsIG9iai5zY2FsZShzY2FsZUZhY3RvcikpOwogCQl9CiAJ
CWNhc2UgU1ZHTWF0cml4Q29uc3RhbnRzOjpSb3RhdGU6CiAJCXsKLQkJCWRvdWJsZSBhbmdsZSA9
IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgYW5nbGUgPSBhcmdzWzBdLT50b051
bWJlcihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR01hdHJpeD4oZXhlYywg
b2JqLnJvdGF0ZShhbmdsZSkpOwogCQl9CiAJCWNhc2UgU1ZHTWF0cml4Q29uc3RhbnRzOjpSb3Rh
dGVGcm9tVmVjdG9yOgogCQl7Ci0JCQlkb3VibGUgeCA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7
Ci0JCQlkb3VibGUgeSA9IGFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgeCA9IGFy
Z3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHkgPSBhcmdzWzFdLT50b051bWJlcihl
eGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR01hdHJpeD4oZXhlYywgb2JqLnJv
dGF0ZUZyb21WZWN0b3IoeCwgeSkpOwogCQl9CiAJCWNhc2UgU1ZHTWF0cml4Q29uc3RhbnRzOjpT
Y2FsZU5vblVuaWZvcm06CiAJCXsKLQkJCWRvdWJsZSBzY2FsZUZhY3RvclggPSBhcmdzWzBdLnRv
TnVtYmVyKGV4ZWMpOwotCQkJZG91YmxlIHNjYWxlRmFjdG9yWSA9IGFyZ3NbMV0udG9OdW1iZXIo
ZXhlYyk7CisJCQlkb3VibGUgc2NhbGVGYWN0b3JYID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7
CisJCQlkb3VibGUgc2NhbGVGYWN0b3JZID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQly
ZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdNYXRyaXg+KGV4ZWMsIG9iai5zY2FsZU5vblVuaWZv
cm0oc2NhbGVGYWN0b3JYLCBzY2FsZUZhY3RvclkpKTsKIAkJfQogCQljYXNlIFNWR01hdHJpeENv
bnN0YW50czo6RmxpcFg6CkBAIC0xNzUsMTIgKzE3NSwxMiBAQCBWYWx1ZSBTVkdNYXRyaXhQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlCiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdNYXRy
aXg+KGV4ZWMsIG9iai5mbGlwWSgpKTsKIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OlNrZXdY
OgogCQl7Ci0JCQlkb3VibGUgYW5nbGUgPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91
YmxlIGFuZ2xlID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2Fm
ZV9jYWNoZTxTVkdNYXRyaXg+KGV4ZWMsIG9iai5za2V3WChhbmdsZSkpOwogCQl9CiAJCWNhc2Ug
U1ZHTWF0cml4Q29uc3RhbnRzOjpTa2V3WToKIAkJewotCQkJZG91YmxlIGFuZ2xlID0gYXJnc1sw
XS50b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSBhbmdsZSA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4
ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTWF0cml4PihleGVjLCBvYmouc2tl
d1koYW5nbGUpKTsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga3N2ZzIvZG9tL1NWR01hdHJpeC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdN
YXRyaXguaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR01hdHJpeC5oCi0tLSBrc3ZnMi9kb20vU1ZHTWF0cml4LmgJOSBKdWwgMjAwNSAwNjo1
NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdNYXRyaXguaAk4IEF1ZyAyMDA1IDA5OjAz
OjEwIC0wMDAwCkBAIC04Myw4ICs4Myw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fUFVUCiAJ
CUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQg
YXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIp
OwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKFNWR01hdHJpeCkKSW5kZXg6IGtzdmcyL2RvbS9T
VkdOdW1iZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdOdW1iZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrc3ZnMi9kb20vU1ZHTnVtYmVyLmNwcAotLS0ga3N2ZzIvZG9tL1NWR051bWJlci5j
cHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdOdW1iZXIu
Y3BwCTggQXVnIDIwMDUgMDk6MDM6MTAgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdOdW1iZXI6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHTnVtYmVy
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewog
CUtET01fRU5URVJfU0FGRQogCkBAIC01OCw3ICs1OCw3IEBAIFZhbHVlIFNWR051bWJlcjo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3QKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZH
TnVtYmVyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHTnVtYmVyOjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApAQCAtNjYsNyArNjYsNyBAQCB2b2lkIFNWR051bWJlcjo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhCiAJewogCQljYXNlIFNWR051bWJlckNvbnN0YW50czo6VmFsdWU6CiAJ
CXsKLQkJCXNldFZhbHVlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFZhbHVlKHZhbHVl
LT50b051bWJlcihleGVjKSk7CiAJCQlicmVhazsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga3N2
ZzIvZG9tL1NWR051bWJlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdOdW1iZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR051bWJlci5oCi0tLSBrc3ZnMi9kb20vU1ZHTnVtYmVy
LmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdOdW1iZXIu
aAk4IEF1ZyAyMDA1IDA5OjAzOjEwIC0wMDAwCkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJCUtET01fUFVUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6
VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKFNWR051bWJlcikK
SW5kZXg6IGtzdmcyL2RvbS9TVkdOdW1iZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTnVtYmVyTGlzdC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdOdW1iZXJMaXN0
LmNwcAotLS0ga3N2ZzIvZG9tL1NWR051bWJlckxpc3QuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTnVtYmVyTGlzdC5jcHAJOCBBdWcgMjAwNSAwOTow
MzoxMCAtMDAwMApAQCAtNTQsNyArNTQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NW
R19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdOdW1iZXJMaXN0IiwgU1ZHTnVtYmVyTGlzdFByb3Rv
LCBTVkdOdW1iZXJMaXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdOdW1iZXJMaXN0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNW
R051bWJlckxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcwLDcgKzcwLDcgQEAgVmFsdWUgU1ZH
TnVtYmVyTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotVmFsdWUgU1ZHTnVtYmVyTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdOdW1iZXJMaXN0
UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhTVkdOdW1iZXJMaXN0KQogCUtET01f
RU5URVJfU0FGRQpAQCAtODksMjQgKzg5LDI0IEBAIFZhbHVlIFNWR051bWJlckxpc3RQcm90b0Z1
bmM6OmNhbGwoRXhlY1MKIAkJfQogCQljYXNlIFNWR051bWJlckxpc3RDb25zdGFudHM6OkdldEl0
ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMp
OworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJ
cmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTnVtYmVyPihleGVjLCBvYmouZ2V0SXRlbShpbmRl
eCkpOwogCQl9CiAJCWNhc2UgU1ZHTnVtYmVyTGlzdENvbnN0YW50czo6SW5zZXJ0SXRlbUJlZm9y
ZToKIAkJewogCQkJU1ZHTnVtYmVyIG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZHTnVtYmVy
PihleGVjLCBhcmdzWzBdLCAmdG9TVkdOdW1iZXIpOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9
IGFyZ3NbMV0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sx
XS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdOdW1iZXI+
KGV4ZWMsIG9iai5pbnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJY2Fz
ZSBTVkdOdW1iZXJMaXN0Q29uc3RhbnRzOjpSZXBsYWNlSXRlbToKIAkJewogCQkJU1ZHTnVtYmVy
IG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZHTnVtYmVyPihleGVjLCBhcmdzWzBdLCAmdG9T
VkdOdW1iZXIpOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50MzIoZXhl
Yyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJ
CQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdOdW1iZXI+KGV4ZWMsIG9iai5yZXBsYWNlSXRl
bShuZXdJdGVtLCBpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHTnVtYmVyTGlzdENvbnN0YW50czo6
UmVtb3ZlSXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50
MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhl
Yyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdOdW1iZXI+KGV4ZWMsIG9iai5yZW1v
dmVJdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdOdW1iZXJMaXN0Q29uc3RhbnRzOjpBcHBl
bmRJdGVtOgpJbmRleDoga3N2ZzIvZG9tL1NWR051bWJlckxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTnVtYmVyTGlzdC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTnVtYmVy
TGlzdC5oCi0tLSBrc3ZnMi9kb20vU1ZHTnVtYmVyTGlzdC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTnVtYmVyTGlzdC5oCTggQXVnIDIwMDUgMDk6MDM6
MTAgLTAwMDAKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVj
bWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJ
CUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYWludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1Bh
aW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR1BhaW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhaW50LmNwcAk5IEp1bCAyMDA1IDA2
OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhaW50LmNwcAk4IEF1ZyAyMDA1IDA5
OjAzOjEwIC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBL
U1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR1BhaW50IiwgU1ZHUGFpbnRQcm90bywgU1ZHUGFp
bnRQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR1BhaW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhaW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkBAIC02MSw3ICs2MSw3IEBAIFZhbHVlIFNWR1BhaW50OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR1BhaW50UHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQorVmFsdWVJbXAgKlNWR1BhaW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJ
UyhTVkdQYWludCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTc2LDcgKzc2LDcgQEAgVmFsdWUgU1ZH
UGFpbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlIAogCQl9CiAJCWNhc2UgU1ZHUGFpbnRDb25z
dGFudHM6OlNldFBhaW50OgogCQl7Ci0JCQl1bnNpZ25lZCBzaG9ydCBwYWludFR5cGUgPSBhcmdz
WzBdLnRvVUludDE2KGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgcGFpbnRUeXBlID0gYXJnc1sw
XS0+dG9VSW50MTYoZXhlYyk7CiAJCQlLRE9NOjpET01TdHJpbmcgdXJpID0gS0RPTTo6dG9ET01T
dHJpbmcoZXhlYywgYXJnc1sxXSk7CiAJCQlLRE9NOjpET01TdHJpbmcgcmdiUGFpbnQgPSBLRE9N
Ojp0b0RPTVN0cmluZyhleGVjLCBhcmdzWzJdKTsKIAkJCUtET006OkRPTVN0cmluZyBpY2NQYWlu
dCA9IEtET006OnRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbM10pOwpJbmRleDoga3N2ZzIvZG9tL1NW
R1BhaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIv
ZG9tL1NWR1BhaW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdQYWludC5oCi0tLSBrc3ZnMi9kb20vU1ZHUGFpbnQuaAk5IEp1bCAyMDA1
IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhaW50LmgJOCBBdWcgMjAwNSAw
OTowMzoxMCAtMDAwMApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dF
VAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R1BhdGhFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmNwcAk5IEp1bCAy
MDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmNwcAk4
IEF1ZyAyMDA1IDA5OjAzOjExIC0wMDAwCkBAIC03NSw3ICs3NSw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR1BhdGhFbGVtZW50IiwgU1ZH
UGF0aEVsZW1lbnRQcm90bywgU1ZHUGF0aEVsZW1lbnRQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR1Bh
dGhFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKlNWR1BhdGhFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCQpAQCAtOTEs
OSArOTEsOSBAQCBWYWx1ZSBTVkdQYXRoRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFCiAJcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdQYXRoRWxlbWVudFByb3RvRnVuYzo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1Zh
bHVlSW1wICpTVkdQYXRoRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLQlTVkdQYXRoRWxlbWVudCBv
YmooY2FzdChleGVjLCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgp
KSkpOworCVNWR1BhdGhFbGVtZW50IG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlLRE9NX0VO
VEVSX1NBRkUKIAogCXN3aXRjaChpZCkKQEAgLTEwMSw0NyArMTAxLDQ3IEBAIFZhbHVlIFNWR1Bh
dGhFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWMKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0
YW50czo6R2V0VG90YWxMZW5ndGg6CiAJCQlyZXR1cm4gTnVtYmVyKG9iai5nZXRUb3RhbExlbmd0
aCgpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6R2V0UG9pbnRBdExlbmd0aDoK
LQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BvaW50PihleGVjLCBvYmouZ2V0UG9pbnRB
dExlbmd0aChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9j
YWNoZTxTVkdQb2ludD4oZXhlYywgb2JqLmdldFBvaW50QXRMZW5ndGgoYXJnc1swXS0+dG9OdW1i
ZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6R2V0UGF0aFNlZ0F0
TGVuZ3RoOgotCQkJcmV0dXJuIE51bWJlcihvYmouZ2V0UGF0aFNlZ0F0TGVuZ3RoKGFyZ3NbMF0u
dG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBOdW1iZXIob2JqLmdldFBhdGhTZWdBdExlbmd0
aChhcmdzWzBdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3Rh
bnRzOjpDcmVhdGVTVkdQYXRoU2VnQ2xvc2VQYXRoOgogCQkJcmV0dXJuIEtET006OnNhZmVfY2Fj
aGU8U1ZHUGF0aFNlZz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDbG9zZVBhdGgoKSk7CiAJ
CWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdNb3ZldG9BYnM6
Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnTW92ZXRvQWJzPihleGVjLCBv
YmouY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0FicyhhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdz
WzFdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRo
U2VnTW92ZXRvQWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0FicyhhcmdzWzBd
LT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQ
YXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ01vdmV0b1JlbDoKLQkJCXJldHVy
biBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdNb3ZldG9SZWw+KGV4ZWMsIG9iai5jcmVhdGVT
VkdQYXRoU2VnTW92ZXRvUmVsKGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1i
ZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdNb3ZldG9S
ZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnTW92ZXRvUmVsKGFyZ3NbMF0tPnRvTnVtYmVy
KGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50
Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnTGluZXRvQWJzOgotCQkJcmV0dXJuIEtET006OnNh
ZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b0Ficz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdM
aW5ldG9BYnMoYXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJlcihleGVjKSkp
OworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b0Ficz4oZXhlYywg
b2JqLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9BYnMoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFy
Z3NbMV0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6
OkNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9SZWw6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxT
VkdQYXRoU2VnTGluZXRvUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1JlbChh
cmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1
cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnTGluZXRvUmVsPihleGVjLCBvYmouY3JlYXRl
U1ZHUGF0aFNlZ0xpbmV0b1JlbChhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9O
dW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY0FiczoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1
YmljQWJzKGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYyksIGFy
Z3NbMl0udG9OdW1iZXIoZXhlYyksIGFyZ3NbM10udG9OdW1iZXIoZXhlYyksIGFyZ3NbNF0udG9O
dW1iZXIoZXhlYyksIGFyZ3NbNV0udG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpz
YWZlX2NhY2hlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljQWJzKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50
b051bWJlcihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRvTnVtYmVy
KGV4ZWMpLCBhcmdzWzRdLT50b051bWJlcihleGVjKSwgYXJnc1s1XS0+dG9OdW1iZXIoZXhlYykp
KTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1JlbDoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKGFyZ3Nb
MF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0udG9OdW1i
ZXIoZXhlYyksIGFyZ3NbM10udG9OdW1iZXIoZXhlYyksIGFyZ3NbNF0udG9OdW1iZXIoZXhlYyks
IGFyZ3NbNV0udG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0
b0N1YmljUmVsKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVj
KSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpLCBhcmdz
WzRdLT50b051bWJlcihleGVjKSwgYXJnc1s1XS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2FzZSBT
VkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNB
YnM6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y0Ficz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKGFyZ3Nb
MF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0udG9OdW1i
ZXIoZXhlYyksIGFyZ3NbM10udG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZl
X2NhY2hlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzPihleGVjLCBvYmouY3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3Nb
MV0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLT50b051bWJlcihleGVjKSwgYXJnc1szXS0+dG9O
dW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxT
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljUmVsKGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1i
ZXIoZXhlYyksIGFyZ3NbMl0udG9OdW1iZXIoZXhlYyksIGFyZ3NbM10udG9OdW1iZXIoZXhlYykp
KTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
UmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwoYXJnc1sw
XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLT50b051
bWJlcihleGVjKSwgYXJnc1szXS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxl
bWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0FyY0FiczoKLQkJCXJldHVybiBLRE9NOjpz
YWZlX2NhY2hlPFNWR1BhdGhTZWdBcmNBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQXJj
QWJzKGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYyksIGFyZ3Nb
Ml0udG9OdW1iZXIoZXhlYyksIGFyZ3NbM10udG9OdW1iZXIoZXhlYyksIGFyZ3NbNF0udG9OdW1i
ZXIoZXhlYyksIGFyZ3NbNV0udG9Cb29sZWFuKGV4ZWMpLCBhcmdzWzZdLnRvQm9vbGVhbihleGVj
KSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0FyY0Ficz4oZXhlYywg
b2JqLmNyZWF0ZVNWR1BhdGhTZWdBcmNBYnMoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3Nb
MV0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLT50b051bWJlcihleGVjKSwgYXJnc1szXS0+dG9O
dW1iZXIoZXhlYyksIGFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzVdLT50b0Jvb2xlYW4o
ZXhlYyksIGFyZ3NbNl0tPnRvQm9vbGVhbihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50
Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnQXJjUmVsOgotCQkJcmV0dXJuIEtET006OnNhZmVf
Y2FjaGU8U1ZHUGF0aFNlZ0FyY1JlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdBcmNSZWwo
YXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJlcihleGVjKSwgYXJnc1syXS50
b051bWJlcihleGVjKSwgYXJnc1szXS50b051bWJlcihleGVjKSwgYXJnc1s0XS50b051bWJlcihl
eGVjKSwgYXJnc1s1XS50b0Jvb2xlYW4oZXhlYyksIGFyZ3NbNl0udG9Cb29sZWFuKGV4ZWMpKSk7
CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQXJjUmVsPihleGVjLCBvYmou
Y3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbChhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+
dG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLT50b051bWJl
cihleGVjKSwgYXJnc1s0XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNV0tPnRvQm9vbGVhbihleGVj
KSwgYXJnc1s2XS0+dG9Cb29sZWFuKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25z
dGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOgotCQkJcmV0dXJuIEtE
T006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM+KGV4ZWMsIG9iai5j
cmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyhhcmdzWzBdLnRvTnVtYmVyKGV4ZWMp
KSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRh
bEFicz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzKGFyZ3Nb
MF0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNy
ZWF0ZVNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOgotCQkJcmV0dXJuIEtET006OnNhZmVf
Y2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQ
YXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQly
ZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbD4oZXhl
Yywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKGFyZ3NbMF0tPnRvTnVt
YmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1Bh
dGhTZWdMaW5ldG9WZXJ0aWNhbEFiczoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1Bh
dGhTZWdMaW5ldG9WZXJ0aWNhbEFicz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbEFicyhhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2Fm
ZV9jYWNoZTxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxBYnMoYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2Fz
ZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2Fs
UmVsOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2Fs
UmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKGFyZ3NbMF0u
dG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbFJlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bFJlbChhcmdzWzBdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29u
c3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOgotCQkJcmV0dXJu
IEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicz4oZXhlYywg
b2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMoYXJnc1swXS50b051bWJl
cihleGVjKSwgYXJnc1sxXS50b051bWJlcihleGVjKSwgYXJnc1syXS50b051bWJlcihleGVjKSwg
YXJnc1szXS50b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGhBYnMoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRv
TnVtYmVyKGV4ZWMpLCBhcmdzWzJdLT50b051bWJlcihleGVjKSwgYXJnc1szXS0+dG9OdW1iZXIo
ZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aFJlbDoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljU21vb3RoUmVsKGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1i
ZXIoZXhlYyksIGFyZ3NbMl0udG9OdW1iZXIoZXhlYyksIGFyZ3NbM10udG9OdW1iZXIoZXhlYykp
KTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGhSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKGFy
Z3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSwgYXJnc1syXS0+
dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0
aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3Ro
QWJzOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Nt
b290aEFicyhhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpKSk7
CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Nt
b290aEFicz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3Ro
QWJzKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSkpOwog
CQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1Ntb290aFJlbDoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNTbW9vdGhSZWwoYXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051
bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNTbW9vdGhSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1Ntb290aFJlbChhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9OdW1i
ZXIoZXhlYykpKTsKIAkJZGVmYXVsdDoKIAkJCWtkV2FybmluZygpIDw8ICJVbmhhbmRsZWQgZnVu
Y3Rpb24gaWQgaW4gIiA8PCBrX2Z1bmNpbmZvIDw8ICIgOiAiIDw8IGlkIDw8IGVuZGw7CiAJfQpJ
bmRleDoga3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoRWxlbWVudC5o
Ci0tLSBrc3ZnMi9kb20vU1ZHUGF0aEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmgJOCBBdWcgMjAwNSAwOTowMzoxMSAt
MDAwMApAQCAtMTA3LDcgKzEwNyw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtE
T01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWcuY3BwCi0t
LSBrc3ZnMi9kb20vU1ZHUGF0aFNlZy5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnLmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjExIC0wMDAwCkBA
IC0zNSw3ICszNSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUg
U1ZHUGF0aFNlZzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BhdGhTZWc6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDoga3N2ZzIvZG9tL1NW
R1BhdGhTZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHUGF0aFNlZy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZy5oCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZy5oCTkg
SnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZy5oCTgg
QXVnIDIwMDUgMDk6MDM6MTEgLTAwMDAKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIEtTVkcK
IAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChTVkdQYXRoU2VnKQpJbmRleDog
a3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnQXJjLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuY3BwCi0t
LSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0FyYy5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkx
LjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnQXJjLmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjExIC0w
MDAwCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAot
VmFsdWUgU1ZHUGF0aFNlZ0FyY0Ficzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdBcmNBYnM6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpA
QCAtNjIsMzggKzYyLDM4IEBAIFZhbHVlIFNWR1BhdGhTZWdBcmNBYnM6OmdldFZhbHVlUHJvcGVy
dHkKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0FyY0Ficzo6cHV0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZh
bHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdBcmNBYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0
b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6WDoKIAkJewotCQkJc2V0
WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7
CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQXJjQ29uc3RhbnRzOjpZOgogCQl7
Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVtYmVy
KGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdBcmNDb25zdGFudHM6
OlIxOgogCQl7Ci0JCQlzZXRSMSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRSMSh2YWx1
ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0Fy
Y0NvbnN0YW50czo6UjI6CiAJCXsKLQkJCXNldFIyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJ
CXNldFIyKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBT
VkdQYXRoU2VnQXJjQ29uc3RhbnRzOjpMYXJnZUFyY0ZsYWc6CiAJCXsKLQkJCXNldExhcmdlQXJj
RmxhZyh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworCQkJc2V0TGFyZ2VBcmNGbGFnKHZhbHVlLT50
b0Jvb2xlYW4oZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0Nv
bnN0YW50czo6U3dlZXBGbGFnOgogCQl7Ci0JCQlzZXRTd2VlcEZsYWcodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsKKwkJCXNldFN3ZWVwRmxhZyh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKIAkJCXJl
dHVybjsKIAkJfQogCQlkZWZhdWx0OgpAQCAtMjQ4LDcgKzI0OCw3IEBAIGJvb2wgU1ZHUGF0aFNl
Z0FyY0Ficzo6c3dlZXBGbGFnKCkgY29uc3QKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdB
cmNSZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpTVkdQYXRoU2VnQXJjUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTI3MSwzOCArMjcxLDM4
IEBAIFZhbHVlIFNWR1BhdGhTZWdBcmNSZWw6OmdldFZhbHVlUHJvcGVydHkKIAlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0FyY1JlbDo6cHV0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lk
IFNWR1BhdGhTZWdBcmNSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0b2tlbikKIAl7CiAJCWNh
c2UgU1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJl
cihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJ
CX0KIAkJY2FzZSBTVkdQYXRoU2VnQXJjQ29uc3RhbnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZhbHVl
LnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJl
dHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdBcmNDb25zdGFudHM6OlIxOgogCQl7Ci0JCQlz
ZXRSMSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRSMSh2YWx1ZS0+dG9OdW1iZXIoZXhl
YykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6UjI6
CiAJCXsKLQkJCXNldFIyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFIyKHZhbHVlLT50
b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQXJjQ29u
c3RhbnRzOjpMYXJnZUFyY0ZsYWc6CiAJCXsKLQkJCXNldExhcmdlQXJjRmxhZyh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOworCQkJc2V0TGFyZ2VBcmNGbGFnKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykp
OwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6U3dlZXBG
bGFnOgogCQl7Ci0JCQlzZXRTd2VlcEZsYWcodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKwkJCXNl
dFN3ZWVwRmxhZyh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlk
ZWZhdWx0OgpJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0FyYy5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNl
Z0FyYy5oCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0FyYy5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0FyYy5oCTggQXVnIDIwMDUgMDk6MDM6
MTEgLTAwMDAKQEAgLTY5LDggKzY5LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJ
S0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0
dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsK
IAl9OwogCiAJY2xhc3MgU1ZHUGF0aFNlZ0FyY1JlbEltcGw7CkBAIC0xMTUsOCArMTE1LDggQEAg
bmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0J
CXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2
b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pT
OjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9t
L1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWMuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5jcHAJ
OSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljLmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjExIC0wMDAwCkBAIC0zOCw3ICszOCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY0Ficzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAt
NjEsMzggKzYxLDM4IEBAIFZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OmdldFZhbHUK
IAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Fi
czo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50
KQogewogCXN3aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Nv
bnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRY
KHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRo
U2VnQ3VydmV0b0N1YmljQ29uc3RhbnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVy
KGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJ
fQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNDb25zdGFudHM6OlgxOgogCQl7Ci0JCQlz
ZXRYMSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYMSh2YWx1ZS0+dG9OdW1iZXIoZXhl
YykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0NvbnN0
YW50czo6WTE6CiAJCXsKLQkJCXNldFkxKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkx
KHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRo
U2VnQ3VydmV0b0N1YmljQ29uc3RhbnRzOjpYMjoKIAkJewotCQkJc2V0WDIodmFsdWUudG9OdW1i
ZXIoZXhlYykpOworCQkJc2V0WDIodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsK
IAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNDb25zdGFudHM6OlkyOgogCQl7Ci0J
CQlzZXRZMih2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZMih2YWx1ZS0+dG9OdW1iZXIo
ZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkBAIC0yMzIsNyArMjMyLDcgQEAg
ZmxvYXQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6eTIoKSBjbwogQGVuZAogKi8KIAotVmFs
dWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0
Y2godG9rZW4pCiAJewpAQCAtMjU1LDM4ICsyNTUsMzggQEAgVmFsdWUgU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1JlbDo6Z2V0VmFsdQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1JlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
VmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljQ29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVt
YmVyKGV4ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsK
IAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNDb25zdGFudHM6Olk6CiAJCXsKLQkJ
CXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhl
YykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0NvbnN0
YW50czo6WDE6CiAJCXsKLQkJCXNldFgxKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgx
KHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRo
U2VnQ3VydmV0b0N1YmljQ29uc3RhbnRzOjpZMToKIAkJewotCQkJc2V0WTEodmFsdWUudG9OdW1i
ZXIoZXhlYykpOworCQkJc2V0WTEodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsK
IAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNDb25zdGFudHM6OlgyOgogCQl7Ci0J
CQlzZXRYMih2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYMih2YWx1ZS0+dG9OdW1iZXIo
ZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Nv
bnN0YW50czo6WTI6CiAJCXsKLQkJCXNldFkyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNl
dFkyKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoK
SW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWMuaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWMuaAk4IEF1ZyAyMDA1IDA5OjAzOjEyIC0wMDAwCkBAIC02Niw4ICs2
Niw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIAogCWNsYXNzIFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNSZWxJbXBsOwpAQCAtMTA5LDggKzEwOSw4IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpW
YWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAg
KnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNTbW9vdGguY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5jcHAJOCBBdWcgMjAwNSAwOTowMzoxMiAtMDAw
MApAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZh
bHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1
YmljU21vb3RoQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTU1LDI4ICs1NSwyOCBAQCBWYWx1ZSBTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpnCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci12b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9p
ZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2go
dG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhDb25zdGFudHM6
Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+
dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1Ntb290aENvbnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihl
eGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0K
IAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQ29uc3RhbnRzOjpYMjoKIAkJewot
CQkJc2V0WDIodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WDIodmFsdWUtPnRvTnVtYmVy
KGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhDb25zdGFudHM6OlkyOgogCQl7Ci0JCQlzZXRZMih2YWx1ZS50b051bWJlcihleGVjKSk7
CisJCQlzZXRZMih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRl
ZmF1bHQ6CkBAIC0xODYsNyArMTg2LDcgQEAgZmxvYXQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aEFiczo6eQogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aFJlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAt
MjA1LDI4ICsyMDUsMjggQEAgVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6
ZwogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
U21vb3RoUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aFJlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJ
bXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoQ29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVt
YmVyKGV4ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsK
IAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhDb25zdGFudHM6Olk6CiAJ
CXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1i
ZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aENvbnN0YW50czo6WDI6CiAJCXsKLQkJCXNldFgyKHZhbHVlLnRvTnVtYmVyKGV4ZWMp
KTsKKwkJCXNldFgyKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJ
Y2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQ29uc3RhbnRzOjpZMjoKIAkJewotCQkJ
c2V0WTIodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WTIodmFsdWUtPnRvTnVtYmVyKGV4
ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga3N2ZzIvZG9tL1NWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aC5oCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oCTggQXVnIDIwMDUgMDk6MDM6MTIgLTAwMDAKQEAg
LTYwLDggKzYwLDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJY2xh
c3MgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbEltcGw7CkBAIC05Nyw4ICs5Nyw4IEBA
IG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owot
CQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
dm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtK
Uzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIv
ZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjEyIC0w
MDAwCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAot
VmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY0Ficzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25z
dAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC01NSwyOCArNTUsMjggQEAgVmFsdWUgU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OmdldAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
dm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6cHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4p
CiAJewogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQ29uc3RhbnRzOjpYOgogCQl7
Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRvTnVtYmVy
KGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljQ29uc3RhbnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJ
CXNldFkodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQ29uc3RhbnRzOjpYMToKIAkJewotCQkJc2V0WDEodmFs
dWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WDEodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJ
CXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQ29uc3RhbnRz
OjpZMToKIAkJewotCQkJc2V0WTEodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WTEodmFs
dWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpAQCAtMTg2
LDcgKzE4Niw3IEBAIGZsb2F0IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjp5MSgKIEBl
bmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNSZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0
b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtMjA1LDI4ICsyMDUsMjggQEAg
VmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OmdldAogCXJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBp
bnQpCit2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlz
d2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQ29uc3Rh
bnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgodmFs
dWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljQ29uc3RhbnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVy
KGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJ
fQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQ29uc3RhbnRzOjpYMToKIAkJewot
CQkJc2V0WDEodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WDEodmFsdWUtPnRvTnVtYmVy
KGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljQ29uc3RhbnRzOjpZMToKIAkJewotCQkJc2V0WTEodmFsdWUudG9OdW1iZXIoZXhlYykpOwor
CQkJc2V0WTEodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZh
dWx0OgpJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5oCi0tLSBrc3ZnMi9kb20v
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgJOCBBdWcgMjAwNSAw
OTowMzoxMiAtMDAwMApAQCAtNjAsOCArNjAsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dF
VAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBp
bnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0
dHIpOwogCX07CiAKIAljbGFzcyBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbEltcGw7CkBA
IC05Nyw4ICs5Nyw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3Ro
LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmNwcAk5
IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljU21vb3RoLmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjEyIC0wMDAwCkBAIC0zNCw3
ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1Ntb290aEFiczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25z
dAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC00OSwxOCArNDksMTggQEAgVmFsdWUgU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYgogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
dm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2
b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlz
d2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3Ro
Q29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNl
dFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQ29uc3RhbnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZh
bHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJ
CXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpAQCAtMTM5LDcgKzEzOSw3IEBAIGZsb2F0IFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWIKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhSZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QK
IHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtMTU0LDE4ICsxNTQsMTggQEAgVmFsdWUgU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
dm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2
b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlz
d2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3Ro
Q29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNl
dFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQ29uc3RhbnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZh
bHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJ
CXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljU21vb3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1Ntb290aC5oCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNTbW9vdGguaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIv
ZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmgJOCBBdWcgMjAwNSAwOTowMzox
MiAtMDAwMApAQCAtNTQsOCArNTQsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlL
RE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0
cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwog
CX07CiAKIAljbGFzcyBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbEltcGw7CkBA
IC04NSw4ICs4NSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0by5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRo
U2VnTGluZXRvLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG8uY3BwCTkgSnVsIDIw
MDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0by5jcHAJ
OCBBdWcgMjAwNSAwOTowMzoxMiAtMDAwMApAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9BYnM6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRo
U2VnTGluZXRvQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTQ5LDE4ICs0OSwxOCBAQCBWYWx1ZSBTVkdQ
YXRoU2VnTGluZXRvQWJzOjpnZXRWYWx1ZVByb3BlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci12b2lkIFNWR1BhdGhTZWdMaW5ldG9BYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2Vn
TGluZXRvQWJzOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBW
YWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1Bh
dGhTZWdMaW5ldG9Db25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhl
YykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJ
CWNhc2UgU1ZHUGF0aFNlZ0xpbmV0b0NvbnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1ZS50
b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1
cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTE0MCw3ICsxNDAsNyBAQCBmbG9hdCBTVkdQYXRoU2Vn
TGluZXRvQWJzOjp5KCkgY29uc3QKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9S
ZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpTVkdQYXRoU2VnTGluZXRvUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTE1NSwxOCArMTU1LDE4
IEBAIFZhbHVlIFNWR1BhdGhTZWdMaW5ldG9SZWw6OmdldFZhbHVlUHJvcGUKIAlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2
b2lkIFNWR1BhdGhTZWdMaW5ldG9SZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0b2tlbikKIAl7
CiAJCWNhc2UgU1ZHUGF0aFNlZ0xpbmV0b0NvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1
ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQly
ZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnTGluZXRvQ29uc3RhbnRzOjpZOgogCQl7Ci0J
CQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVtYmVyKGV4
ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga3N2ZzIvZG9tL1NWR1Bh
dGhTZWdMaW5ldG8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0by5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0by5oCi0tLSBrc3ZnMi9kb20v
U1ZHUGF0aFNlZ0xpbmV0by5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHUGF0aFNlZ0xpbmV0by5oCTggQXVnIDIwMDUgMDk6MDM6MTIgLTAwMDAKQEAgLTU0
LDggKzU0LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZh
bHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJY2xhc3Mg
U1ZHUGF0aFNlZ0xpbmV0b1JlbEltcGw7CkBAIC04NSw4ICs4NSw4IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1
ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZh
bHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlu
ZXRvSG9yaXpvbnRhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsLmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdM
aW5ldG9Ib3Jpem9udGFsLmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjEyIC0wMDAwCkBAIC0zMyw3ICsz
Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0
b2tlbikKIAl7CkBAIC00NiwxMyArNDYsMTMgQEAgVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxBYnM6OmdldAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbEFiczo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsQWJzOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNW
R1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQ29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVl
LnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJl
dHVybjsKIAkJfQogCQlkZWZhdWx0OgpAQCAtMTE2LDcgKzExNiw3IEBAIGZsb2F0IFNWR1BhdGhT
ZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjp4KCkKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdM
aW5ldG9Ib3Jpem9udGFsUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9r
ZW4pCiAJewpAQCAtMTI5LDEzICsxMjksMTMgQEAgVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxSZWw6OmdldAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbFJlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNW
R1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQ29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVl
LnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJl
dHVybjsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9I
b3Jpem9udGFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRh
bC5oCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaAk5IEp1bCAyMDA1
IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9u
dGFsLmgJOCBBdWcgMjAwNSAwOTowMzoxMyAtMDAwMApAQCAtNTEsOCArNTEsOCBAQCBuYW1lc3Bh
Y2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBw
dXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtK
Uzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAljbGFzcyBTVkdQYXRoU2VnTGluZXRvSG9y
aXpvbnRhbFJlbEltcGw7CkBAIC03OSw4ICs3OSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01f
R0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUs
IGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQg
YXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvVmVydGlj
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmNwcAot
LS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5jcHAJOSBKdWwgMjAwNSAwNjo1
NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuY3Bw
CTggQXVnIDIwMDUgMDk6MDM6MTMgLTAwMDAKQEAgLTMzLDcgKzMzLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1w
ICpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNDYsMTMgKzQ2
LDEzIEBAIFZhbHVlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6Z2V0VmEKIAlyZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpwdXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFs
dWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsK
IAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbENvbnN0
YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZh
bHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTEx
Nyw3ICsxMTcsNyBAQCBmbG9hdCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OnkoKSBjCiBA
ZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2Vn
TGluZXRvVmVydGljYWxSZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tl
bikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtMTMwLDEzICsxMzAsMTMgQEAgVmFs
dWUgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpnZXRWYQogCXJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6OnB1dFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQor
dm9pZCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0
b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQ29uc3RhbnRzOjpZOgog
CQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVt
YmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga3N2ZzIvZG9t
L1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbC5oCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgJ
OSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWwuaAk4IEF1ZyAyMDA1IDA5OjAzOjEzIC0wMDAwCkBAIC01MSw4ICs1MSw4IEBA
IG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owot
CQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
dm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtK
Uzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIAogCWNsYXNzIFNWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbFJlbEltcGw7CkBAIC03OSw4ICs3OSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJ
CUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAm
dmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVl
LCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R1BhdGhTZWdMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaXN0LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdM
aXN0LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1Bh
dGhTZWdMaXN0LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjEzIC0wMDAwCkBAIC01MCw3ICs1MCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLRE9NOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR1Bh
dGhTZWdMaXN0IiwgU1ZHUGF0aFNlZ0xpc3RQcm90bywgU1ZHUGF0aFNlZ0xpc3RQcm90b0Z1bmMp
CiAKLVZhbHVlIFNWR1BhdGhTZWdMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaXN0OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkBAIC02Niw3ICs2Niw3IEBAIFZhbHVlIFNWR1BhdGhTZWdMaXN0OjpnZXRWYWx1ZVBy
b3BlcnR5KEUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaXN0
UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtE
T01fQ0hFQ0tfVEhJUyhTVkdQYXRoU2VnTGlzdCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTg1LDI0
ICs4NSwyNCBAQCBWYWx1ZSBTVkdQYXRoU2VnTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjCiAJCX0K
IAkJY2FzZSBTVkdQYXRoU2VnTGlzdENvbnN0YW50czo6R2V0SXRlbToKIAkJewotCQkJdW5zaWdu
ZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25n
IGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gZ2V0U1ZHUGF0aFNl
ZyhleGVjLCBvYmouZ2V0SXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0xpc3RD
b25zdGFudHM6Okluc2VydEl0ZW1CZWZvcmU6CiAJCXsKIAkJCVNWR1BhdGhTZWcgbmV3SXRlbSA9
IEtET006OmVjbWFfY2FzdDxTVkdQYXRoU2VnPihleGVjLCBhcmdzWzBdLCAmdG9TVkdQYXRoU2Vn
KTsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLnRvVUludDMyKGV4ZWMpOworCQkJ
dW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJu
IGdldFNWR1BhdGhTZWcoZXhlYywgb2JqLmluc2VydEl0ZW1CZWZvcmUobmV3SXRlbSwgaW5kZXgp
KTsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdMaXN0Q29uc3RhbnRzOjpSZXBsYWNlSXRlbToKIAkJ
ewogCQkJU1ZHUGF0aFNlZyBuZXdJdGVtID0gS0RPTTo6ZWNtYV9jYXN0PFNWR1BhdGhTZWc+KGV4
ZWMsIGFyZ3NbMF0sICZ0b1NWR1BhdGhTZWcpOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFy
Z3NbMV0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+
dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gZ2V0U1ZHUGF0aFNlZyhleGVjLCBvYmoucmVwbGFj
ZUl0ZW0obmV3SXRlbSwgaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdMaXN0Q29uc3Rh
bnRzOjpSZW1vdmVJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50
b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQz
MihleGVjKTsKIAkJCXJldHVybiBnZXRTVkdQYXRoU2VnKGV4ZWMsIG9iai5yZW1vdmVJdGVtKGlu
ZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnTGlzdENvbnN0YW50czo6QXBwZW5kSXRlbToK
SW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnTGlzdC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpc3Qu
aAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaXN0LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlzdC5oCTggQXVnIDIwMDUgMDk6MDM6MTMg
LTAwMDAKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFT
Y3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnTW92ZXRv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHUGF0aFNlZ01vdmV0by5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnTW92ZXRvLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1Bh
dGhTZWdNb3ZldG8uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHUGF0aFNlZ01vdmV0by5jcHAJOCBBdWcgMjAwNSAwOTowMzoxMyAtMDAwMApAQCAtMzQs
NyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1Bh
dGhTZWdNb3ZldG9BYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTW92ZXRvQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTQ5
LDE4ICs0OSwxOCBAQCBWYWx1ZSBTVkdQYXRoU2VnTW92ZXRvQWJzOjpnZXRWYWx1ZVByb3BlCiAJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdNb3ZldG9BYnM6OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1
ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnTW92ZXRvQWJzOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2go
dG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdNb3ZldG9Db25zdGFudHM6Olg6CiAJCXsKLQkJ
CXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhl
YykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ01vdmV0b0NvbnN0YW50czo6
WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50
b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTEzOSw3ICsx
MzksNyBAQCBmbG9hdCBTVkdQYXRoU2VnTW92ZXRvQWJzOjp5KCkgY29uc3QKIEBlbmQKICovCiAK
LVZhbHVlIFNWR1BhdGhTZWdNb3ZldG9SZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTW92ZXRvUmVsOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2Vu
KQogCXsKQEAgLTE1NCwxOCArMTU0LDE4IEBAIFZhbHVlIFNWR1BhdGhTZWdNb3ZldG9SZWw6Omdl
dFZhbHVlUHJvcGUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ01v
dmV0b1JlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdNb3ZldG9SZWw6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50
KQogewogCXN3aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ01vdmV0b0NvbnN0YW50
czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVl
LT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnTW92
ZXRvQ29uc3RhbnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJ
CXNldFkodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0
OgpJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdNb3ZldG8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ01vdmV0by5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNl
Z01vdmV0by5oCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ01vdmV0by5oCTkgSnVsIDIwMDUgMDY6
NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ01vdmV0by5oCTggQXVnIDIw
MDUgMDk6MDM6MTMgLTAwMDAKQEAgLTU0LDggKzU0LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1
ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGlu
dCBhdHRyKTsKIAl9OwogCiAJY2xhc3MgU1ZHUGF0aFNlZ01vdmV0b1JlbEltcGw7CkBAIC04NSw4
ICs4NSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pT
OjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6
IGtzdmcyL2RvbS9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdHRlcm5FbGVtZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdHRlcm5F
bGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdHRlcm5FbGVtZW50LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdHRlcm5FbGVtZW50LmNwcAk4
IEF1ZyAyMDA1IDA5OjAzOjEzIC0wMDAwCkBAIC01Miw3ICs1Miw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0dGVybkVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0
dGVybkVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0dGVy
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHUGF0dGVybkVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdHRlcm5FbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9T
VkdQYXR0ZXJuRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHUGF0dGVybkVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA5OjAzOjEzIC0wMDAwCkBAIC03
NCw3ICs3NCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBV
VAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2
ZzIvZG9tL1NWR1BvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9kb20vU1ZHUG9pbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUG9pbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUG9p
bnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUG9p
bnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTMgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHUG9pbnQiLCBT
VkdQb2ludFByb3RvLCBTVkdQb2ludFByb3RvRnVuYykKIAotVmFsdWUgU1ZHUG9pbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
U1ZHUG9pbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY3LDE3ICs2NywxNyBAQCBWYWx1ZSBTVkdQ
b2ludDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci12b2lkIFNWR1BvaW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUG9pbnQ6OnB1dFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQog
ewogCUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQb2lu
dENvbnN0YW50czo6WDoKLQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2
YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCWNhc2UgU1ZHUG9pbnRDb25zdGFu
dHM6Olk6Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRv
TnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJa2RXYXJuaW5nKCkgPDwg
IlVuaGFuZGxlZCB0b2tlbiBpbiAiIDw8IGtfZnVuY2luZm8gPDwgIiA6ICIgPDwgdG9rZW4gPDwg
ZW5kbDsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBTVkdQb2ludDo6cHV0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdAogCUtET01fTEVBVkVfU0FGRShLRE9NOjpET01FeGNlcHRpb24pCiB9CiAKLVZhbHVl
IFNWR1BvaW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2Jq
LCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1BvaW50UHJvdG9GdW5jOjpjYWxsKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewog
CUtET01fQ0hFQ0tfVEhJUyhTVkdQb2ludCkKIAlLRE9NX0VOVEVSX1NBRkUKSW5kZXg6IGtzdmcy
L2RvbS9TVkdQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdQb2ludC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrc3ZnMi9kb20vU1ZHUG9pbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1BvaW50LmgJOSBK
dWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQb2ludC5oCTggQXVn
IDIwMDUgMDk6MDM6MTMgLTAwMDAKQEAgLTYyLDggKzYyLDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJ
S0RPTV9QVVQKIAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAm
dmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVl
LCBpbnQgYXR0cik7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoU1ZHUG9pbnQpCkluZGV4OiBr
c3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BvaW50TGlzdC5jcHAKLS0tIGtz
dmcyL2RvbS9TVkdQb2ludExpc3QuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisr
KyBrc3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjE0IC0wMDAwCkBA
IC01NCw3ICs1NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9Q
Uk9UT1RZUEUoIlNWR1BvaW50TGlzdCIsIFNWR1BvaW50TGlzdFByb3RvLCBTVkdQb2ludExpc3RQ
cm90b0Z1bmMpCiAKLVZhbHVlIFNWR1BvaW50TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQb2ludExpc3Q6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9F
TlRFUl9TQUZFCiAKQEAgLTcwLDcgKzcwLDcgQEAgVmFsdWUgU1ZHUG9pbnRMaXN0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHUG9pbnRM
aXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1BvaW50TGlzdFByb3RvRnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlL
RE9NX0NIRUNLX1RISVMoU1ZHUG9pbnRMaXN0KQogCUtET01fRU5URVJfU0FGRQpAQCAtODksMjQg
Kzg5LDI0IEBAIFZhbHVlIFNWR1BvaW50TGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3QKIAkJfQog
CQljYXNlIFNWR1BvaW50TGlzdENvbnN0YW50czo6R2V0SXRlbToKIAkJewotCQkJdW5zaWduZWQg
bG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGlu
ZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNo
ZTxTVkdQb2ludD4oZXhlYywgb2JqLmdldEl0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR1Bv
aW50TGlzdENvbnN0YW50czo6SW5zZXJ0SXRlbUJlZm9yZToKIAkJewogCQkJU1ZHUG9pbnQgbmV3
SXRlbSA9IEtET006OmVjbWFfY2FzdDxTVkdQb2ludD4oZXhlYywgYXJnc1swXSwgJnRvU1ZHUG9p
bnQpOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50MzIoZXhlYyk7CisJ
CQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1
cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQb2ludD4oZXhlYywgb2JqLmluc2VydEl0ZW1CZWZvcmUo
bmV3SXRlbSwgaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR1BvaW50TGlzdENvbnN0YW50czo6UmVw
bGFjZUl0ZW06CiAJCXsKIAkJCVNWR1BvaW50IG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZH
UG9pbnQ+KGV4ZWMsIGFyZ3NbMF0sICZ0b1NWR1BvaW50KTsKLQkJCXVuc2lnbmVkIGxvbmcgaW5k
ZXggPSBhcmdzWzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFy
Z3NbMV0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUG9p
bnQ+KGV4ZWMsIG9iai5yZXBsYWNlSXRlbShuZXdJdGVtLCBpbmRleCkpOwogCQl9CiAJCWNhc2Ug
U1ZHUG9pbnRMaXN0Q29uc3RhbnRzOjpSZW1vdmVJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25n
IGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXgg
PSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNW
R1BvaW50PihleGVjLCBvYmoucmVtb3ZlSXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHUG9p
bnRMaXN0Q29uc3RhbnRzOjpBcHBlbmRJdGVtOgpJbmRleDoga3N2ZzIvZG9tL1NWR1BvaW50TGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9T
VkdQb2ludExpc3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR1BvaW50TGlzdC5oCi0tLSBrc3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmgJOSBK
dWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQb2ludExpc3QuaAk4
IEF1ZyAyMDA1IDA5OjAzOjE0IC0wMDAwCkBAIC02Miw3ICs2Miw3IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHUG9seWdvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQb2x5Z29uRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQb2x5Z29uRWxlbWVudC5j
cHAKLS0tIGtzdmcyL2RvbS9TVkdQb2x5Z29uRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1
NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQb2x5Z29uRWxlbWVudC5jcHAJOCBBdWcgMjAw
NSAwOTowMzoxNCAtMDAwMApAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwog
QGVuZAogKi8KIAotS0pTOjpWYWx1ZSBTVkdQb2x5Z29uRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorS0pTOjpWYWx1ZUltcCAq
U1ZHUG9seWdvbkVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9t
L1NWR1BvbHlnb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva3N2ZzIvZG9tL1NWR1BvbHlnb25FbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQb2x5Z29uRWxlbWVudC5oCi0tLSBr
c3ZnMi9kb20vU1ZHUG9seWdvbkVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR1BvbHlnb25FbGVtZW50LmgJOCBBdWcgMjAwNSAwOTowMzoxNCAt
MDAwMApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9N
X0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQb2x5bGluZUVsZW1lbnQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
UG9seWxpbmVFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAJ
OSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQb2x5bGluZUVs
ZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTQgLTAwMDAKQEAgLTM2LDcgKzM2LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQb2x5bGluZUVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHUG9seWxpbmVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHUG9seWxpbmVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUG9seWxpbmVFbGVtZW50LmgK
LS0tIGtzdmcyL2RvbS9TVkdQb2x5bGluZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxlbWVudC5oCTggQXVnIDIwMDUgMDk6
MDM6MTQgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQK
IAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07
CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1ByZXNlcnZl
QXNwZWN0UmF0aW8uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCTggQXVnIDIwMDUgMDk6MDM6MTQg
LTAwMDAKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwog
Ci1WYWx1ZSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1ByZXNlcnZlQXNwZWN0UmF0
aW86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTU4LDE3ICs1OCwxNyBAQCBWYWx1ZSBTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvOjpnZXRWYWx1ZVByCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lk
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBW
YWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAogCXN3aXRjaCh0b2tl
bikKIAl7CiAJCWNhc2UgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb0NvbnN0YW50czo6QWxpZ246Ci0J
CQlzZXRBbGlnbih2YWx1ZS50b1VJbnQzMihleGVjKSk7CisJCQlzZXRBbGlnbih2YWx1ZS0+dG9V
SW50MzIoZXhlYykpOwogCQkJYnJlYWs7CiAJCWNhc2UgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb0Nv
bnN0YW50czo6TWVldE9yU2xpY2U6Ci0JCQlzZXRNZWV0T3JTbGljZSh2YWx1ZS50b1VJbnQzMihl
eGVjKSk7CisJCQlzZXRNZWV0T3JTbGljZSh2YWx1ZS0+dG9VSW50MzIoZXhlYykpOwogCQkJYnJl
YWs7CiAJCWRlZmF1bHQ6CiAJCQlrZFdhcm5pbmcoKSA8PCAiVW5oYW5kbGVkIHRva2VuIGluICIg
PDwga19mdW5jaW5mbyA8PCAiIDogIiA8PCB0b2tlbiA8PCBlbmRsOwpJbmRleDoga3N2ZzIvZG9t
L1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpby5oCi0tLSBrc3ZnMi9kb20vU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCTkgSnVsIDIw
MDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by5oCTggQXVnIDIwMDUgMDk6MDM6MTQgLTAwMDAKQEAgLTU3LDggKzU3LDggQEAgbmFtZXNwYWNl
IEtTVkcKIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owot
CQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
dm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtK
Uzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1JhZGlhbEdyYWRpZW50RWxl
bWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTQgLTAwMDAKQEAgLTQ0
LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01f
RU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrc3ZnMi9kb20vU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgKLS0tIGtzdmcyL2Rv
bS9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCTggQXVnIDIwMDUgMDk6
MDM6MTQgLTAwMDAKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQK
IAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07
CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1JlY3QuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUmVjdC5jcHAKLS0tIGtz
dmcyL2RvbS9TVkdSZWN0LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR1JlY3QuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTQgLTAwMDAKQEAgLTQ0LDcgKzQ0
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdSZWN0Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1JlY3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY2LDcgKzY2LDcgQEAgVmFsdWUgU1ZH
UmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotdm9pZCBTVkdSZWN0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUmVjdDo6cHV0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7
CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkBAIC03NCwyMiArNzQsMjIgQEAgdm9pZCBTVkdSZWN0Ojpw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZQogCXsKIAkJY2FzZSBTVkdSZWN0Q29uc3RhbnRzOjpY
OgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRv
TnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgU1ZHUmVjdENvbnN0YW50czo6
WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50
b051bWJlcihleGVjKSk7CiAJCQlicmVhazsKIAkJfQogCQljYXNlIFNWR1JlY3RDb25zdGFudHM6
OldpZHRoOgogCQl7Ci0JCQlzZXRXaWR0aCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRX
aWR0aCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdS
ZWN0Q29uc3RhbnRzOjpIZWlnaHQ6CiAJCXsKLQkJCXNldEhlaWdodCh2YWx1ZS50b051bWJlcihl
eGVjKSk7CisJCQlzZXRIZWlnaHQodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwog
CQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHUmVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdSZWN0LmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdSZWN0LmgKLS0t
IGtzdmcyL2RvbS9TVkdSZWN0LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdSZWN0LmgJOCBBdWcgMjAwNSAwOTowMzoxNCAtMDAwMApAQCAtNjUsOCArNjUs
OCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX1BVVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZh
bHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJS0RPTV9ERUZJTkVf
Q0FTVChTVkdSZWN0KQpJbmRleDoga3N2ZzIvZG9tL1NWR1JlY3RFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUmVjdEVsZW1l
bnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHUmVjdEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUmVjdEVsZW1lbnQuY3BwCTkg
SnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUmVjdEVsZW1lbnQu
Y3BwCTggQXVnIDIwMDUgMDk6MDM6MTQgLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdSZWN0RWxlbWVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdS
ZWN0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR1JlY3RFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR1JlY3RFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdSZWN0RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHUmVjdEVsZW1l
bnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1JlY3RF
bGVtZW50LmgJOCBBdWcgMjAwNSAwOTowMzoxNCAtMDAwMApAQCAtNzAsNyArNzAsNyBAQCBuYW1l
c3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTVkdFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9k
b20vU1ZHU1ZHRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2RvbS9TVkdTVkdFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1NWR0Vs
ZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
U1ZHRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwOTowMzoxNSAtMDAwMApAQCAtOTEsNyArOTEsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdT
VkdFbGVtZW50IiwgU1ZHU1ZHRWxlbWVudFByb3RvLCBTVkdTVkdFbGVtZW50UHJvdG9GdW5jKQog
Ci1WYWx1ZSBTVkdTVkdFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1NWR0VsZW1lbnQ6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZF
CiAJCkBAIC0xMzQsNyArMTM0LDcgQEAgVmFsdWUgU1ZHU1ZHRWxlbWVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdTVkdFbGVtZW50Ojpw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAm
dmFsdWUsIGludCkKK3ZvaWQgU1ZHU1ZHRWxlbWVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnB1dFZhbHVl
UHJvcGVydHkoRXhlCiAJCX0KIAkJY2FzZSBTVkdTVkdFbGVtZW50Q29uc3RhbnRzOjpDdXJyZW50
U2NhbGU6CiAJCXsKLQkJCXNldEN1cnJlbnRTY2FsZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJ
CQlzZXRDdXJyZW50U2NhbGUodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJ
fQogCQlkZWZhdWx0OgpAQCAtMTYyLDkgKzE2Miw5IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6cHV0
VmFsdWVQcm9wZXJ0eShFeGUKIAlLRE9NX0xFQVZFX1NBRkUoU1ZHRXhjZXB0aW9uKQogfQogCi1W
YWx1ZSBTVkdTVkdFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1NWR0VsZW1lbnRQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCiB7Ci0JU1ZHU1ZHRWxlbWVudCBvYmooY2FzdChleGVjLCBzdGF0aWNfY2FzdDxL
SlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOworCVNWR1NWR0VsZW1lbnQgb2JqKGNh
c3QoZXhlYywgdGhpc09iaikpOwogCUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKGlkKQpAQCAt
MTkwLDEzICsxOTAsMTMgQEAgVmFsdWUgU1ZHU1ZHRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVj
UwogCQl9CiAJCWNhc2UgU1ZHU1ZHRWxlbWVudENvbnN0YW50czo6U3VzcGVuZFJlZHJhdzoKIAkJ
ewotCQkJdW5zaWduZWQgbG9uZyBtYXhfd2FpdF9taWxsaXNlY29uZHMgPSBhcmdzWzBdLnRvVUlu
dDMyKGV4ZWMpOzsKKwkJCXVuc2lnbmVkIGxvbmcgbWF4X3dhaXRfbWlsbGlzZWNvbmRzID0gYXJn
c1swXS0+dG9VSW50MzIoZXhlYyk7OwogCQkJb2JqLnN1c3BlbmRSZWRyYXcobWF4X3dhaXRfbWls
bGlzZWNvbmRzKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQogCQljYXNlIFNWR1NWR0Vs
ZW1lbnRDb25zdGFudHM6OlVuc3VzcGVuZFJlZHJhdzoKIAkJewotCQkJdW5zaWduZWQgbG9uZyBz
dXNwZW5kX2hhbmRsZV9pZCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7OworCQkJdW5zaWduZWQg
bG9uZyBzdXNwZW5kX2hhbmRsZV9pZCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOzsKIAkJCW9i
ai51bnN1c3BlbmRSZWRyYXcoc3VzcGVuZF9oYW5kbGVfaWQpOwogCQkJcmV0dXJuIFVuZGVmaW5l
ZCgpOwogCQl9CkBAIC0yMjgsNyArMjI4LDcgQEAgVmFsdWUgU1ZHU1ZHRWxlbWVudFByb3RvRnVu
Yzo6Y2FsbChFeGVjUwogCQl9CiAJCWNhc2UgU1ZHU1ZHRWxlbWVudENvbnN0YW50czo6U2V0Q3Vy
cmVudFRpbWU6CiAJCXsKLQkJCW9iai5zZXRDdXJyZW50VGltZShhcmdzWzBdLnRvTnVtYmVyKGV4
ZWMpKTsKKwkJCW9iai5zZXRDdXJyZW50VGltZShhcmdzWzBdLT50b051bWJlcihleGVjKSk7CiAJ
CQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBTVkdTVkdFbGVtZW50Q29uc3RhbnRz
OjpHZXRJbnRlcnNlY3Rpb25MaXN0OgpJbmRleDoga3N2ZzIvZG9tL1NWR1NWR0VsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHU1ZH
RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHU1ZHRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHU1ZHRWxlbWVudC5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHU1ZHRWxlbWVudC5oCTgg
QXVnIDIwMDUgMDk6MDM6MTUgLTAwMDAKQEAgLTEyOSw4ICsxMjksOCBAQCBuYW1lc3BhY2UgS1NW
RwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFs
dWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2
YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHU2NyaXB0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIv
ZG9tL1NWR1NjcmlwdEVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU2NyaXB0RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9T
VkdTY3JpcHRFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR1NjcmlwdEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTUgLTAwMDAKQEAg
LTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBT
VkdTY3JpcHRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1NjcmlwdEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJ
CkBAIC01OCw3ICs1OCw3IEBAIFZhbHVlIFNWR1NjcmlwdEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVy
dHkKIC8vIFRoZSBxZG9tIHdheS4uLgogI2RlZmluZSBpbXBsIChzdGF0aWNfY2FzdDxTVkdTY3Jp
cHRFbGVtZW50SW1wbCAqPihFdmVudFRhcmdldDo6ZCkpCiAKLXZvaWQgU1ZHU2NyaXB0RWxlbWVu
dDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1NjcmlwdEVsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtE
T01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHU2NyaXB0RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTY3JpcHRF
bGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdTY3JpcHRFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdTY3JpcHRFbGVtZW50LmgJ
OSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTY3JpcHRFbGVt
ZW50LmgJOCBBdWcgMjAwNSAwOTowMzoxNSAtMDAwMApAQCAtNTYsOCArNTYsOCBAQCBuYW1lc3Bh
Y2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBw
dXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtK
Uzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHU2V0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR1NldEVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU2V0RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdT
ZXRFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9t
L1NWR1NldEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTUgLTAwMDAKQEAgLTM3LDcgKzM3
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdTZXRFbGVt
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKlNWR1NldEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdTZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR1NldEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1NldEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NW
R1NldEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9t
L1NWR1NldEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA5OjAzOjE1IC0wMDAwCkBAIC00OSw3ICs0OSw3
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NW
R1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHU3RvcEVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU3RvcEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9k
b20vU1ZHU3RvcEVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHU3RvcEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTUgLTAwMDAKQEAg
LTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBT
VkdTdG9wRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpTVkdTdG9wRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRl
eDoga3N2ZzIvZG9tL1NWR1N0b3BFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1N0b3BFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTdG9wRWxlbWVudC5oCi0t
LSBrc3ZnMi9kb20vU1ZHU3RvcEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR1N0b3BFbGVtZW50LmgJOCBBdWcgMjAwNSAwOTowMzoxNSAtMDAw
MApAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZP
UldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdTdHJpbmdMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHU3RyaW5nTGlzdC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTdHJpbmdMaXN0LmNw
cAotLS0ga3N2ZzIvZG9tL1NWR1N0cmluZ0xpc3QuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAw
MDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHU3RyaW5nTGlzdC5jcHAJOCBBdWcgMjAwNSAwOTowMzox
NiAtMDAwMApAQCAtNTQsNyArNTQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19J
TVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdTdHJpbmdMaXN0IiwgU1ZHU3RyaW5nTGlzdFByb3RvLCBT
VkdTdHJpbmdMaXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdTdHJpbmdMaXN0OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1N0
cmluZ0xpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcwLDcgKzcwLDcgQEAgVmFsdWUgU1ZHU3Ry
aW5nTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
VmFsdWUgU1ZHU3RyaW5nTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdTdHJpbmdMaXN0UHJv
dG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhTVkdTdHJpbmdMaXN0KQogCUtET01fRU5U
RVJfU0FGRQpAQCAtODksMjQgKzg5LDI0IEBAIFZhbHVlIFNWR1N0cmluZ0xpc3RQcm90b0Z1bmM6
OmNhbGwoRXhlY1MKIAkJfQogCQljYXNlIFNWR1N0cmluZ0xpc3RDb25zdGFudHM6OkdldEl0ZW06
CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOwor
CQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0
dXJuIEtET006OmdldERPTVN0cmluZyhvYmouZ2V0SXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2Ug
U1ZHU3RyaW5nTGlzdENvbnN0YW50czo6SW5zZXJ0SXRlbUJlZm9yZToKIAkJewogCQkJS0RPTTo6
RE9NU3RyaW5nIG5ld0l0ZW0gPSBLRE9NOjp0b0RPTVN0cmluZyhleGVjLCBhcmdzWzBdKTsKLQkJ
CXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWdu
ZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006
OmdldERPTVN0cmluZyhvYmouaW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRleCkpOwogCQl9
CiAJCWNhc2UgU1ZHU3RyaW5nTGlzdENvbnN0YW50czo6UmVwbGFjZUl0ZW06CiAJCXsKIAkJCUtE
T006OkRPTVN0cmluZyBuZXdJdGVtID0gS0RPTTo6dG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7
Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVu
c2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBL
RE9NOjpnZXRET01TdHJpbmcob2JqLnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0K
IAkJY2FzZSBTVkdTdHJpbmdMaXN0Q29uc3RhbnRzOjpSZW1vdmVJdGVtOgogCQl7Ci0JCQl1bnNp
Z25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxv
bmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpnZXRE
T01TdHJpbmcob2JqLnJlbW92ZUl0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR1N0cmluZ0xp
c3RDb25zdGFudHM6OkFwcGVuZEl0ZW06CkluZGV4OiBrc3ZnMi9kb20vU1ZHU3RyaW5nTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdT
dHJpbmdMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdTdHJpbmdMaXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdTdHJpbmdMaXN0LmgJOSBK
dWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTdHJpbmdMaXN0LmgJ
OCBBdWcgMjAwNSAwOTowMzoxNiAtMDAwMApAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgS1NW
RwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIv
ZG9tL1NWR1N0eWxhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9kb20vU1ZHU3R5bGFibGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU3R5bGFibGUuY3BwCi0tLSBrc3ZnMi9kb20v
U1ZHU3R5bGFibGUuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHU3R5bGFibGUuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTYgLTAwMDAKQEAgLTUxLDcgKzUx
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgi
U1ZHU3R5bGFibGUiLCBTVkdTdHlsYWJsZVByb3RvLCBTVkdTdHlsYWJsZVByb3RvRnVuYykKIAot
VmFsdWUgU1ZHU3R5bGFibGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3R5bGFibGU6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAg
LTY5LDkgKzY5LDkgQEAgVmFsdWUgU1ZHU3R5bGFibGU6OmdldFZhbHVlUHJvcGVydHkoRXhlYwog
CXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHU3R5bGFibGVQcm90b0Z1bmM6OmNh
bGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitW
YWx1ZUltcCAqU1ZHU3R5bGFibGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0JU1ZHU3R5bGFibGUgb2JqKGNh
c3QoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsK
KwlTVkdTdHlsYWJsZSBvYmooY2FzdChleGVjLCB0aGlzT2JqKSk7CiAJS0RPTV9FTlRFUl9TQUZF
CiAKIAlzd2l0Y2goaWQpCkluZGV4OiBrc3ZnMi9kb20vU1ZHU3R5bGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHU3R5bGFibGUuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1N0
eWxhYmxlLmgKLS0tIGtzdmcyL2RvbS9TVkdTdHlsYWJsZS5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHU3R5bGFibGUuaAk4IEF1ZyAyMDA1IDA5OjAzOjE2
IC0wMDAwCkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21h
U2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlL
SlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHU3R5bGVFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHU3R5bGVFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR1N0eWxlRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdTdHls
ZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHU3R5bGVFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjE2IC0wMDAwCkBAIC00Myw3ICs0
Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHU3R5bGVF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKlNWR1N0eWxlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAkKQEAgLTY1LDcg
KzY1LDcgQEAgVmFsdWUgU1ZHU3R5bGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KAogCXJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnB1dFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQor
dm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHU3R5bGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1N0eWxlRWxlbWVudC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU3R5bGVFbGVtZW50
LmgKLS0tIGtzdmcyL2RvbS9TVkdTdHlsZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1N0eWxlRWxlbWVudC5oCTggQXVnIDIwMDUgMDk6MDM6
MTYgLTAwMDAKQEAgLTY2LDggKzY2LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJ
S0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0
dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsK
IAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1N3aXRjaEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTd2l0Y2hFbGVt
ZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR1N3aXRjaEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHU3dpdGNoRWxlbWVudC5j
cHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTd2l0Y2hF
bGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjE2IC0wMDAwCkBAIC0zOCw3ICszOCw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHU3dpdGNoRWxlbWVudDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpTVkdTd2l0Y2hFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHU3dpdGNoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdTd2l0Y2hFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTd2l0Y2hFbGVtZW50LmgKLS0tIGtzdmcy
L2RvbS9TVkdTd2l0Y2hFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdTd2l0Y2hFbGVtZW50LmgJOCBBdWcgMjAwNSAwOTowMzoxNiAtMDAwMApA
QCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldB
UkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6
IGtzdmcyL2RvbS9TVkdTeW1ib2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHU3ltYm9sRWxlbWVudC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTeW1ib2xFbGVt
ZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1N5bWJvbEVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6
NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHU3ltYm9sRWxlbWVudC5jcHAJOCBBdWcg
MjAwNSAwOTowMzoxNiAtMDAwMApAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NW
RzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1N5bWJvbEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3ltYm9sRWxl
bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR1N5bWJvbEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
U3ltYm9sRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHU3ltYm9sRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHU3ltYm9sRWxl
bWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHU3lt
Ym9sRWxlbWVudC5oCTggQXVnIDIwMDUgMDk6MDM6MTYgLTAwMDAKQEAgLTU2LDcgKzU2LDcgQEAg
bmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVFNw
YW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHVFNwYW5FbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVudC5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdUU3BhbkVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHVFNwYW5FbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjE2IC0wMDAwCkBA
IC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUg
U1ZHVFNwYW5FbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1RTcGFuRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUU3BhbkVsZW1lbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVu
dC5oCi0tLSBrc3ZnMi9kb20vU1ZHVFNwYW5FbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUU3BhbkVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA5OjAz
OjE2IC0wMDAwCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJ
CUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9Owog
fTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1Rlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVGVzdHMuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGVzdHMuY3BwCi0tLSBr
c3ZnMi9kb20vU1ZHVGVzdHMuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHVGVzdHMuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTYgLTAwMDAKQEAgLTQ2LDcg
KzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQ
RSgiU1ZHVGVzdHMiLCBTVkdUZXN0c1Byb3RvLCBTVkdUZXN0c1Byb3RvRnVuYykKIAotVmFsdWUg
U1ZHVGVzdHM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqU1ZHVGVzdHM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY2LDkgKzY2LDkg
QEAgVmFsdWUgU1ZHVGVzdHM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHVGVzdHNQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHVGVz
dHNQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCiB7Ci0JU1ZHVGVzdHMgb2JqKGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8
S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsKKwlTVkdUZXN0cyBvYmooY2FzdChl
eGVjLCB0aGlzT2JqKSk7CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0Y2goaWQpCkluZGV4OiBr
c3ZnMi9kb20vU1ZHVGVzdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9kb20vU1ZHVGVzdHMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1Rlc3RzLmgKLS0tIGtzdmcyL2RvbS9TVkdUZXN0cy5o
CTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVGVzdHMuaAk4
IEF1ZyAyMDA1IDA5OjAzOjE2IC0wMDAwCkBAIC01OCw3ICs1OCw3IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RleHRDb250
ZW50RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCTkg
SnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVGV4dENvbnRlbnRF
bGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjE3IC0wMDAwCkBAIC02Miw3ICs2Miw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR1RleHRD
b250ZW50RWxlbWVudCIsIFNWR1RleHRDb250ZW50RWxlbWVudFByb3RvLCBTVkdUZXh0Q29udGVu
dEVsZW1lbnRQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpT
VkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTgwLDkgKzgwLDkgQEAg
VmFsdWUgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRWYWx1ZVBybwogCXJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotVmFsdWUgU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4
ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJ
bXAgKlNWR1RleHRDb250ZW50RWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLQlTVkdUZXh0Q29udGVu
dEVsZW1lbnQgb2JqKGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odGhp
c09iai5pbXAoKSkpKTsKKwlTVkdUZXh0Q29udGVudEVsZW1lbnQgb2JqKGNhc3QoZXhlYywgdGhp
c09iaikpOwogCUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKGlkKQpAQCAtOTcsMTcgKzk3LDE3
IEBAIFZhbHVlIFNWR1RleHRDb250ZW50RWxlbWVudFByb3RvRnVuYzo6Y2EKIAkJfQogCQljYXNl
IFNWR1RleHRDb250ZW50RWxlbWVudENvbnN0YW50czo6R2V0U3ViU3RyaW5nTGVuZ3RoOgogCQl7
Ci0JCQlyZXR1cm4gTnVtYmVyKG9iai5nZXRTdWJTdHJpbmdMZW5ndGgoYXJnc1swXS50b1VJbnQz
MihleGVjKSwgYXJnc1sxXS50b1VJbnQzMihleGVjKSkpOworCQkJcmV0dXJuIE51bWJlcihvYmou
Z2V0U3ViU3RyaW5nTGVuZ3RoKGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpLCBhcmdzWzFdLT50b1VJ
bnQzMihleGVjKSkpOwogCQl9CiAJCWNhc2UgU1ZHVGV4dENvbnRlbnRFbGVtZW50Q29uc3RhbnRz
OjpHZXRTdGFydFBvc2l0aW9uT2ZDaGFyOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZH
UG9pbnQ+KGV4ZWMsIG9iai5nZXRTdGFydFBvc2l0aW9uT2ZDaGFyKGFyZ3NbMF0udG9VSW50MzIo
ZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BvaW50PihleGVjLCBvYmou
Z2V0U3RhcnRQb3NpdGlvbk9mQ2hhcihhcmdzWzBdLT50b1VJbnQzMihleGVjKSkpOwogCQljYXNl
IFNWR1RleHRDb250ZW50RWxlbWVudENvbnN0YW50czo6R2V0RW5kUG9zaXRpb25PZkNoYXI6Ci0J
CQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQb2ludD4oZXhlYywgb2JqLmdldFN0YXJ0UG9z
aXRpb25PZkNoYXIoYXJnc1swXS50b1VJbnQzMihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNh
ZmVfY2FjaGU8U1ZHUG9pbnQ+KGV4ZWMsIG9iai5nZXRTdGFydFBvc2l0aW9uT2ZDaGFyKGFyZ3Nb
MF0tPnRvVUludDMyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHVGV4dENvbnRlbnRFbGVtZW50Q29uc3Rh
bnRzOjpHZXRFeHRlbnRPZkNoYXI6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdSZWN0
PihleGVjLCBvYmouZ2V0RXh0ZW50T2ZDaGFyKGFyZ3NbMF0udG9VSW50MzIoZXhlYykpKTsKKwkJ
CXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1JlY3Q+KGV4ZWMsIG9iai5nZXRFeHRlbnRPZkNo
YXIoYXJnc1swXS0+dG9VSW50MzIoZXhlYykpKTsKIAkJY2FzZSBTVkdUZXh0Q29udGVudEVsZW1l
bnRDb25zdGFudHM6OkdldFJvdGF0aW9uT2ZDaGFyOgogCQl7Ci0JCQlyZXR1cm4gTnVtYmVyKG9i
ai5nZXRSb3RhdGlvbk9mQ2hhcihhcmdzWzBdLnRvVUludDMyKGV4ZWMpKSk7CisJCQlyZXR1cm4g
TnVtYmVyKG9iai5nZXRSb3RhdGlvbk9mQ2hhcihhcmdzWzBdLT50b1VJbnQzMihleGVjKSkpOwog
CQl9CiAJCWNhc2UgU1ZHVGV4dENvbnRlbnRFbGVtZW50Q29uc3RhbnRzOjpHZXRDaGFyTnVtQXRQ
b3NpdGlvbjoKIAkJewpAQCAtMTE2LDcgKzExNiw3IEBAIFZhbHVlIFNWR1RleHRDb250ZW50RWxl
bWVudFByb3RvRnVuYzo6Y2EKIAkJfQogCQljYXNlIFNWR1RleHRDb250ZW50RWxlbWVudENvbnN0
YW50czo6U2VsZWN0U3ViU3RyaW5nOgogCQl7Ci0JCQlvYmouc2VsZWN0U3ViU3RyaW5nKGFyZ3Nb
MF0udG9VSW50MzIoZXhlYyksIGFyZ3NbMV0udG9VSW50MzIoZXhlYykpOworCQkJb2JqLnNlbGVj
dFN1YlN0cmluZyhhcmdzWzBdLT50b1VJbnQzMihleGVjKSwgYXJnc1sxXS0+dG9VSW50MzIoZXhl
YykpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3Zn
Mi9kb20vU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RleHRDb250ZW50RWxlbWVudC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGV4dENvbnRl
bnRFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAk5IEp1bCAy
MDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1RleHRDb250ZW50RWxlbWVu
dC5oCTggQXVnIDIwMDUgMDk6MDM6MTcgLTAwMDAKQEAgLTc2LDcgKzc2LDcgQEAgbmFtZXNwYWNl
IEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlL
SlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVGV4dEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9T
VkdUZXh0RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdUZXh0RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdUZXh0RWxl
bWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdU
ZXh0RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwOTowMzoxNyAtMDAwMApAQCAtNDMsNyArNDMsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1RleHRFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKlNWR1RleHRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHVGV4dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHVGV4dEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RleHRFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9T
VkdUZXh0RWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHVGV4dEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDA5OjAzOjE3IC0wMDAwCkBAIC01MSw3ICs1
MSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9t
L1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHVGV4dFBvc2l0aW9uaW5n
RWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjE3IC0wMDAwCkBA
IC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUg
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewog
CUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVGV4dFBvc2l0aW9uaW5nRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgKLS0t
IGtzdmcyL2RvbS9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1
NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgJOCBB
dWcgMjAwNSAwOTowMzoxNyAtMDAwMApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS1NWRwog
CQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdUaXRsZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUaXRs
ZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHVGl0bGVFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1RpdGxlRWxlbWVu
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUaXRs
ZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTcgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdUaXRsZUVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHVGl0bGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHVGl0bGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR1RpdGxlRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGl0bGVFbGVtZW50LmgKLS0tIGtzdmcyL2Rv
bS9TVkdUaXRsZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR1RpdGxlRWxlbWVudC5oCTggQXVnIDIwMDUgMDk6MDM6MTcgLTAwMDAKQEAgLTUz
LDcgKzUzLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVU
CiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3Zn
Mi9kb20vU1ZHVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybS5jcHAKLS0tIGtzdmcy
L2RvbS9TVkdUcmFuc2Zvcm0uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjE3IC0wMDAwCkBAIC01
Miw3ICs1Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9U
T1RZUEUoIlNWR1RyYW5zZm9ybSIsIFNWR1RyYW5zZm9ybVByb3RvLCBTVkdUcmFuc2Zvcm1Qcm90
b0Z1bmMpCiAKLVZhbHVlIFNWR1RyYW5zZm9ybTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm06OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKQEAgLTcyLDcgKzcyLDcgQEAgVmFsdWUgU1ZHVHJhbnNmb3JtOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHVHJhbnNmb3Jt
UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybVByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9N
X0NIRUNLX1RISVMoU1ZHVHJhbnNmb3JtKQogCUtET01fRU5URVJfU0FGRQpAQCAtODcsMzUgKzg3
LDM1IEBAIFZhbHVlIFNWR1RyYW5zZm9ybVByb3RvRnVuYzo6Y2FsbChFeGVjU3QKIAkJfQogCQlj
YXNlIFNWR1RyYW5zZm9ybUNvbnN0YW50czo6U2V0VHJhbnNsYXRlOgogCQl7Ci0JCQlkb3VibGUg
eCA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0JCQlkb3VibGUgeSA9IGFyZ3NbMV0udG9OdW1i
ZXIoZXhlYyk7CisJCQlkb3VibGUgeCA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworCQkJZG91
YmxlIHkgPSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKIAkJCW9iai5zZXRUcmFuc2xhdGUoeCwg
eSk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBTVkdUcmFuc2Zvcm1Db25z
dGFudHM6OlNldFNjYWxlOgogCQl7Ci0JCQlkb3VibGUgc3ggPSBhcmdzWzBdLnRvTnVtYmVyKGV4
ZWMpOwotCQkJZG91YmxlIHN5ID0gYXJnc1sxXS50b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSBz
eCA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHN5ID0gYXJnc1sxXS0+dG9O
dW1iZXIoZXhlYyk7CiAJCQlvYmouc2V0U2NhbGUoc3gsIHN5KTsKIAkJCXJldHVybiBVbmRlZmlu
ZWQoKTsKIAkJfQogCQljYXNlIFNWR1RyYW5zZm9ybUNvbnN0YW50czo6U2V0Um90YXRlOgogCQl7
Ci0JCQlkb3VibGUgYW5nbGUgPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOwotCQkJZG91YmxlIGN4
ID0gYXJnc1sxXS50b051bWJlcihleGVjKTsKLQkJCWRvdWJsZSBjeSA9IGFyZ3NbMl0udG9OdW1i
ZXIoZXhlYyk7CisJCQlkb3VibGUgYW5nbGUgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKKwkJ
CWRvdWJsZSBjeCA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIGN5ID0gYXJn
c1syXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlvYmouc2V0Um90YXRlKGFuZ2xlLCBjeCwgY3kpOwog
CQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWNhc2UgU1ZHVHJhbnNmb3JtQ29uc3RhbnRz
OjpTZXRTa2V3WDoKIAkJewotCQkJZG91YmxlIGFuZ2xlID0gYXJnc1swXS50b051bWJlcihleGVj
KTsKKwkJCWRvdWJsZSBhbmdsZSA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJb2JqLnNl
dFNrZXdYKGFuZ2xlKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQogCQljYXNlIFNWR1Ry
YW5zZm9ybUNvbnN0YW50czo6U2V0U2tld1k6CiAJCXsKLQkJCWRvdWJsZSBhbmdsZSA9IGFyZ3Nb
MF0udG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgYW5nbGUgPSBhcmdzWzBdLT50b051bWJlcihl
eGVjKTsKIAkJCW9iai5zZXRTa2V3WShhbmdsZSk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJ
CX0KSW5kZXg6IGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm0uaAot
LS0ga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybS5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmgJOCBBdWcgMjAwNSAwOTowMzoxNyAtMDAwMApA
QCAtNjQsNyArNjQsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJ
S0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RyYW5zZm9ybUxpc3QuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVHJhbnNm
b3JtTGlzdC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1MaXN0LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybUxpc3QuY3BwCTgg
QXVnIDIwMDUgMDk6MDM6MTcgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHVHJhbnNmb3JtTGlzdCIsIFNW
R1RyYW5zZm9ybUxpc3RQcm90bywgU1ZHVHJhbnNmb3JtTGlzdFByb3RvRnVuYykKIAotVmFsdWUg
U1ZHVHJhbnNmb3JtTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm1MaXN0OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQog
CkBAIC03NCw3ICs3NCw3IEBAIFZhbHVlIFNWR1RyYW5zZm9ybUxpc3Q6OmdldFZhbHVlUHJvcGVy
dHkKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR1RyYW5zZm9ybUxpc3RQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCitWYWx1ZUltcCAqU1ZHVHJhbnNmb3JtTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9N
X0NIRUNLX1RISVMoU1ZHVHJhbnNmb3JtTGlzdCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTkzLDI0
ICs5MywyNCBAQCBWYWx1ZSBTVkdUcmFuc2Zvcm1MaXN0UHJvdG9GdW5jOjpjYWxsKEV4CiAJCX0K
IAkJY2FzZSBTVkdUcmFuc2Zvcm1MaXN0Q29uc3RhbnRzOjpHZXRJdGVtOgogCQl7Ci0JCQl1bnNp
Z25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxv
bmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZl
X2NhY2hlPFNWR1RyYW5zZm9ybT4oZXhlYywgb2JqLmdldEl0ZW0oaW5kZXgpKTsKIAkJfQogCQlj
YXNlIFNWR1RyYW5zZm9ybUxpc3RDb25zdGFudHM6Okluc2VydEl0ZW1CZWZvcmU6CiAJCXsKIAkJ
CVNWR1RyYW5zZm9ybSBuZXdJdGVtID0gS0RPTTo6ZWNtYV9jYXN0PFNWR1RyYW5zZm9ybT4oZXhl
YywgYXJnc1swXSwgJnRvU1ZHVHJhbnNmb3JtKTsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBh
cmdzWzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0t
PnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHVHJhbnNmb3Jt
PihleGVjLCBvYmouaW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRleCkpOwogCQl9CiAJCWNh
c2UgU1ZHVHJhbnNmb3JtTGlzdENvbnN0YW50czo6UmVwbGFjZUl0ZW06CiAJCXsKIAkJCVNWR1Ry
YW5zZm9ybSBuZXdJdGVtID0gS0RPTTo6ZWNtYV9jYXN0PFNWR1RyYW5zZm9ybT4oZXhlYywgYXJn
c1swXSwgJnRvU1ZHVHJhbnNmb3JtKTsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFd
LnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0tPnRvVUlu
dDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHVHJhbnNmb3JtPihleGVj
LCBvYmoucmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR1RyYW5z
Zm9ybUxpc3RDb25zdGFudHM6OlJlbW92ZUl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5k
ZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFy
Z3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHVHJh
bnNmb3JtPihleGVjLCBvYmoucmVtb3ZlSXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHVHJh
bnNmb3JtTGlzdENvbnN0YW50czo6QXBwZW5kSXRlbToKSW5kZXg6IGtzdmcyL2RvbS9TVkdUcmFu
c2Zvcm1MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR1RyYW5zZm9ybUxpc3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybUxpc3QuaAotLS0ga3N2ZzIvZG9tL1NW
R1RyYW5zZm9ybUxpc3QuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIv
ZG9tL1NWR1RyYW5zZm9ybUxpc3QuaAk4IEF1ZyAyMDA1IDA5OjAzOjE3IC0wMDAwCkBAIC02Niw3
ICs2Niw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24K
IAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
CX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RyYW5zZm9ybWFi
bGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHVHJhbnNmb3JtYWJsZS5jcHAKLS0tIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1hYmxlLmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1RyYW5zZm9y
bWFibGUuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTcgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdUcmFuc2Zvcm1hYmxlOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1RyYW5zZm9ybWFibGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9T
VkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR1RyYW5zZm9ybWFibGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybWFibGUuaAotLS0ga3N2ZzIv
ZG9tL1NWR1RyYW5zZm9ybWFibGUuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR1RyYW5zZm9ybWFibGUuaAk4IEF1ZyAyMDA1IDA5OjAzOjE3IC0wMDAwCkBA
IC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNl
Y3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdVUklSZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdVUklSZWZlcmVuY2UuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
VVJJUmVmZXJlbmNlLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1VSSVJlZmVyZW5jZS5jcHAJOSBKdWwg
MjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdVUklSZWZlcmVuY2UuY3Bw
CTggQXVnIDIwMDUgMDk6MDM6MTggLTAwMDAKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdVUklSZWZlcmVuY2U6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHVVJJ
UmVmZXJlbmNlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVVJJUmVmZXJl
bmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR1VSSVJlZmVyZW5jZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHVVJJUmVmZXJlbmNlLmgKLS0tIGtzdmcyL2RvbS9TVkdVUklSZWZl
cmVuY2UuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1VS
SVJlZmVyZW5jZS5oCTggQXVnIDIwMDUgMDk6MDM6MTggLTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAg
bmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JB
U0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVXNlRWxlbWVudC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdVc2VFbGVtZW50
LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1VzZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVXNlRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAwOTow
MzoxOCAtMDAwMApAQCAtNTAsNyArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogLy8g
VE9ETzogaW5zdGFuY2VSb290CQlTVkdVc2VFbGVtZW50Q29uc3RhbnRzOjpJbnN0YW5jZVJvb3QJ
RG9udERlbGV0ZXxSZWFkT25seQogCi1WYWx1ZSBTVkdVc2VFbGVtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1VzZUVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdVc2VFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1Vz
ZUVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR1VzZUVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1VzZUVsZW1lbnQuaAk5IEp1
bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1VzZUVsZW1lbnQuaAk4
IEF1ZyAyMDA1IDA5OjAzOjE4IC0wMDAwCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1ZpZXdFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVmll
d0VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHVmlld0VsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHVmlld0VsZW1lbnQu
Y3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVmlld0Vs
ZW1lbnQuY3BwCTggQXVnIDIwMDUgMDk6MDM6MTggLTAwMDAKQEAgLTM5LDcgKzM5LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdWaWV3RWxlbWVudDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1w
ICpTVkdWaWV3RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAkKSW5kZXg6IGtzdmcyL2RvbS9TVkdW
aWV3RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdWaWV3RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVmlld0VsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1Zp
ZXdFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9T
VkdWaWV3RWxlbWVudC5oCTggQXVnIDIwMDUgMDk6MDM6MTggLTAwMDAKQEAgLTU5LDcgKzU5LDcg
QEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pT
OjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZH
Wm9vbUFuZFBhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR1pvb21BbmRQYW4uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHWm9vbUFuZFBhbi5jcHAKLS0tIGtzdmcyL2RvbS9T
Vkdab29tQW5kUGFuLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIv
ZG9tL1NWR1pvb21BbmRQYW4uY3BwCTggQXVnIDIwMDUgMDk6MDM6MTggLTAwMDAKQEAgLTM1LDcg
KzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdab29t
QW5kUGFuOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKlNWR1pvb21BbmRQYW46OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTUxLDcgKzUx
LDcgQEAgVmFsdWUgU1ZHWm9vbUFuZFBhbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogCXJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdab29tQW5kUGFuOjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQg
U1ZHWm9vbUFuZFBhbjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTU5LDcg
KzU5LDcgQEAgdm9pZCBTVkdab29tQW5kUGFuOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZQogCXsKIAkJ
Y2FzZSBTVkdab29tQW5kUGFuQ29uc3RhbnRzOjpab29tQW5kUGFuOgogCQl7Ci0JCQlzZXRab29t
QW5kUGFuKHZhbHVlLnRvVUludDE2KGV4ZWMpKTsKKwkJCXNldFpvb21BbmRQYW4odmFsdWUtPnRv
VUludDE2KGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga3N2ZzIv
ZG9tL1NWR1pvb21BbmRQYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9kb20vU1ZHWm9vbUFuZFBhbi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHWm9vbUFuZFBhbi5oCi0tLSBrc3ZnMi9kb20v
U1ZHWm9vbUFuZFBhbi5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHWm9vbUFuZFBhbi5oCTggQXVnIDIwMDUgMDk6MDM6MTggLTAwMDAKQEAgLTU1LDggKzU1
LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fUFVUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAK
SW5kZXg6IGtzdmcyL2VjbWEvRWNtYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZWNtYS9FY21hLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZWNtYS9FY21hLmNwcAotLS0ga3N2ZzIvZWNtYS9FY21h
LmNwcAk5IEp1bCAyMDA1IDA2OjU1OjI3IC0wMDAwCTEuMQorKysga3N2ZzIvZWNtYS9FY21hLmNw
cAk4IEF1ZyAyMDA1IDA5OjAzOjE4IC0wMDAwCkBAIC00MDMsNyArNDAzLDcgQEAgS0pTOjpPYmpl
Y3RJbXAgKkVjbWE6OmluaGVyaXRlZEdldERPTUNTUwogCXJldHVybiAwOwogfQogCi1LSlM6OlZh
bHVlIEtTVkc6OmdldFNWR1BhdGhTZWcoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIFNWR1BhdGhTZWcg
cykKK0tKUzo6VmFsdWVJbXAgKktTVkc6OmdldFNWR1BhdGhTZWcoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIFNWR1BhdGhTZWcgcykKIHsKIAlpZihzID09IFNWR1BhdGhTZWc6Om51bGwpCiAJCXJldHVy
biBLSlM6Ok51bGwoKTsKQEAgLTQxNSw3ICs0MTUsNyBAQCBLSlM6OlZhbHVlIEtTVkc6OmdldFNW
R1BhdGhTZWcoS0pTOjpFeGVjCiAJLy8gUmV1c2UgZXhpc3RpbmcgYnJpZGdlLCBpZiBwb3NzaWJs
ZQogCUtKUzo6T2JqZWN0SW1wICpyZXF1ZXN0ID0gaW50ZXJwcmV0ZXItPmdldERPTU9iamVjdChz
LmhhbmRsZSgpKTsKIAlpZihyZXF1ZXN0KQotCQlyZXR1cm4gS0pTOjpWYWx1ZShyZXF1ZXN0KTsK
KwkJcmV0dXJuIHJlcXVlc3Q7CiAJCiAJS0pTOjpPYmplY3RJbXAgKnJldCA9IDA7CiAJdW5zaWdu
ZWQgc2hvcnQgdHlwZSA9IHMucGF0aFNlZ1R5cGUoKTsKQEAgLTUyMiw3ICs1MjIsNyBAQCBLSlM6
OlZhbHVlIEtTVkc6OmdldFNWR1BhdGhTZWcoS0pTOjpFeGVjCiAJfQogCiAJaW50ZXJwcmV0ZXIt
PnB1dERPTU9iamVjdChzLmhhbmRsZSgpLCByZXQpOwotCXJldHVybiBLSlM6OlZhbHVlKHJldCk7
CisJcmV0dXJuIHJldDsKIH0KIAogCkluZGV4OiBrc3ZnMi9lY21hL0VjbWEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9lY21hL0VjbWEuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZWNtYS9FY21hLmgKLS0t
IGtzdmcyL2VjbWEvRWNtYS5oCTkgSnVsIDIwMDUgMDY6NTU6MjggLTAwMDAJMS4xCisrKyBrc3Zn
Mi9lY21hL0VjbWEuaAk4IEF1ZyAyMDA1IDA5OjAzOjE4IC0wMDAwCkBAIC01MCw3ICs1MCw3IEBA
IG5hbWVzcGFjZSBLU1ZHCiAKIAkvLyBIZWxwZXJzCiAJY2xhc3MgU1ZHUGF0aFNlZzsKLQlLSlM6
OlZhbHVlIGdldFNWR1BhdGhTZWcoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIFNWR1BhdGhTZWcgcyk7
CisJS0pTOjpWYWx1ZUltcCAqZ2V0U1ZHUGF0aFNlZyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgU1ZH
UGF0aFNlZyBzKTsKIH07CiAKICNlbmRpZgpJbmRleDoga3N2ZzIvZWNtYS9HbG9iYWxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2VjbWEv
R2xvYmFsT2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZWNtYS9HbG9iYWxPYmplY3QuY3BwCi0tLSBrc3ZnMi9lY21hL0dsb2JhbE9iamVj
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NToyOCAtMDAwMAkxLjEKKysrIGtzdmcyL2VjbWEvR2xvYmFs
T2JqZWN0LmNwcAk4IEF1ZyAyMDA1IDA5OjAzOjE4IC0wMDAwCkBAIC02MiwxMiArNjIsMTIgQEAg
dm9pZCBHbG9iYWxPYmplY3Q6OmFmdGVyVGltZW91dCgpIGNvbnN0CiAJCWRvYygpLT51cGRhdGVS
ZW5kZXJpbmcoKTsKIH0KIAotS0pTOjpWYWx1ZSBHbG9iYWxPYmplY3Q6OmdldChLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwKSBjb25zdAorS0pTOjpWYWx1ZUlt
cCAqR2xvYmFsT2JqZWN0OjpnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRl
bnRpZmllciAmcCkgY29uc3QKIHsKIAlrZERlYnVnKDI2MDA0KSA8PCAiS1NWRzo6R2xvYmFsT2Jq
ZWN0ICgiIDw8IHRoaXMgPDwgIik6OmdldCAiIDw8IHAucXN0cmluZygpIDw8IGVuZGw7CiAKLQlL
SlM6OlZhbHVlIHJldCA9IEtET006Okdsb2JhbE9iamVjdDo6Z2V0KGV4ZWMsIHApOwotCWlmKHJl
dC50eXBlKCkgIT0gS0pTOjpVbmRlZmluZWRUeXBlKQorCUtKUzo6VmFsdWVJbXAgKnJldCA9IEtE
T006Okdsb2JhbE9iamVjdDo6Z2V0KGV4ZWMsIHApOworCWlmKHJldC0+dHlwZSgpICE9IEtKUzo6
VW5kZWZpbmVkVHlwZSkKIAkJcmV0dXJuIHJldDsKIAogCWNvbnN0IEtKUzo6SGFzaEVudHJ5ICpl
bnRyeSA9IEtKUzo6TG9va3VwOjpmaW5kRW50cnkoJkdsb2JhbE9iamVjdDo6c19oYXNoVGFibGUs
IHApOwpJbmRleDoga3N2ZzIvZWNtYS9HbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9lY21hL0dsb2JhbE9iamVjdC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9lY21hL0dsb2JhbE9iamVj
dC5oCi0tLSBrc3ZnMi9lY21hL0dsb2JhbE9iamVjdC5oCTkgSnVsIDIwMDUgMDY6NTU6MjggLTAw
MDAJMS4xCisrKyBrc3ZnMi9lY21hL0dsb2JhbE9iamVjdC5oCTggQXVnIDIwMDUgMDk6MDM6MTgg
LTAwMDAKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJdmlydHVhbCB+R2xvYmFs
T2JqZWN0KCk7CiAKIAkJdmlydHVhbCB2b2lkIGFmdGVyVGltZW91dCgpIGNvbnN0OwotCQl2aXJ0
dWFsIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CisJCXZpcnR1YWwgS0pTOjpWYWx1ZUltcCAqZ2V0
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSkgY29uc3Q7CiAKIAkJLy8gRWNtYVNjcmlwdCBzcGVjaWZpYyBzdHVmZiAtIG9ubHkgbmVlZGVk
IGZvciBHbG9iYWxPYmplY3QKIAkJLy8gWW91IHdvbid0IGZpbmQgaXQgaW4gImdlbmVyYWwiIGtk
b20gZWNtYSBjb2RlLi4uCkluZGV4OiBrc3ZnMi9ldmVudHMvU1ZHRXZlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2V2ZW50cy9TVkdFdmVudC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2V2ZW50
cy9TVkdFdmVudC5jcHAKLS0tIGtzdmcyL2V2ZW50cy9TVkdFdmVudC5jcHAJOSBKdWwgMjAwNSAw
Njo1NToyOSAtMDAwMAkxLjEKKysrIGtzdmcyL2V2ZW50cy9TVkdFdmVudC5jcHAJOCBBdWcgMjAw
NSAwOTowMzoxOCAtMDAwMApAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsK
IEBlbmQKICovCiAKLVZhbHVlIFNWR0V2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0V2ZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FG
RQogCkluZGV4OiBrc3ZnMi9ldmVudHMvU1ZHRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9ldmVudHMvU1ZHRXZlbnQuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZXZlbnRzL1NWR0V2ZW50LmgKLS0t
IGtzdmcyL2V2ZW50cy9TVkdFdmVudC5oCTkgSnVsIDIwMDUgMDY6NTU6MjkgLTAwMDAJMS4xCisr
KyBrc3ZnMi9ldmVudHMvU1ZHRXZlbnQuaAk4IEF1ZyAyMDA1IDA5OjAzOjE4IC0wMDAwCkBAIC01
MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBV
VAogCQkKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBr
c3ZnMi9ldmVudHMvU1ZHWm9vbUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9ldmVudHMvU1ZHWm9vbUV2ZW50LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5j
cHAKLS0tIGtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTU6Mjkg
LTAwMDAJMS4xCisrKyBrc3ZnMi9ldmVudHMvU1ZHWm9vbUV2ZW50LmNwcAk4IEF1ZyAyMDA1IDA5
OjAzOjE5IC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHWm9vbUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1pvb21FdmVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApJbmRleDoga3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZXZlbnRzL1NW
R1pvb21FdmVudC5oCi0tLSBrc3ZnMi9ldmVudHMvU1ZHWm9vbUV2ZW50LmgJOSBKdWwgMjAwNSAw
Njo1NToyOSAtMDAwMAkxLjEKKysrIGtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuaAk4IEF1ZyAy
MDA1IDA5OjAzOjE5IC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtE
T01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvaW1wbC9TVkdTY3JpcHRFbGVtZW50SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvaW1wbC9TVkdT
Y3JpcHRFbGVtZW50SW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2ltcGwvU1ZHU2NyaXB0RWxlbWVudEltcGwuY3BwCi0tLSBrc3ZnMi9pbXBs
L1NWR1NjcmlwdEVsZW1lbnRJbXBsLmNwcAk5IEp1bCAyMDA1IDA2OjU1OjQxIC0wMDAwCTEuMQor
Kysga3N2ZzIvaW1wbC9TVkdTY3JpcHRFbGVtZW50SW1wbC5jcHAJOCBBdWcgMjAwNSAwOTowMzoy
MCAtMDAwMApAQCAtODksMTQgKzg5LDE0IEBAIHZvaWQgU1ZHU2NyaXB0RWxlbWVudEltcGw6OmV4
ZWN1dGVTY3JpcHQKIAlpZihjb21wLmNvbXBsVHlwZSgpID09IEtKUzo6VGhyb3cpCiAJewogCQlL
SlM6OkV4ZWNTdGF0ZSAqZXhlYyA9IGVjbWFFbmdpbmUtPmdsb2JhbEV4ZWMoKTsKLQkJS0pTOjpW
YWx1ZSBleFZhbCA9IGNvbXAudmFsdWUoKTsKKwkJS0pTOjpWYWx1ZUltcCAqZXhWYWwgPSBjb21w
LnZhbHVlKCk7CiAKIAkJaW50IGxpbmVubyA9IC0xOwotCQlpZihleFZhbC50eXBlKCkgPT0gS0pT
OjpPYmplY3RUeXBlKQorCQlpZihleFZhbC0+aXNPYmplY3QoKSkKIAkJewotCQkJS0pTOjpWYWx1
ZSBsaW5lVmFsID0gS0pTOjpPYmplY3Q6OmR5bmFtaWNDYXN0KGV4VmFsKS5nZXQoZXhlYywgImxp
bmUiKTsKLQkJCWlmKGxpbmVWYWwudHlwZSgpID09IEtKUzo6TnVtYmVyVHlwZSkKLQkJCQlsaW5l
bm8gPSBpbnQobGluZVZhbC50b051bWJlcihleGVjKSk7CisJCQlLSlM6OlZhbHVlSW1wICpsaW5l
VmFsID0gc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4oZXhWYWwpLT5nZXQoZXhlYywgImxp
bmUiKTsKKwkJCWlmKGxpbmVWYWwtPnR5cGUoKSA9PSBLSlM6Ok51bWJlclR5cGUpCisJCQkJbGlu
ZW5vID0gaW50KGxpbmVWYWwtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJfQogCiAJCS8vIEZpcmUgRVJS
T1JfRVZFTlQgdXBvbiBlcnJvcnMuLi4KQEAgLTExMiwxMCArMTEyLDEwIEBAIHZvaWQgU1ZHU2Ny
aXB0RWxlbWVudEltcGw6OmV4ZWN1dGVTY3JpcHQKIAkJCWV2ZW50LT5kZXJlZigpOwogCQl9CiAK
LQkJa2REZWJ1ZygpIDw8ICJbU1ZHU2NyaXB0RWxlbWVudF0gRXZhbHVhdGlvbiBlcnJvciwgbGlu
ZSAiIDw8IChsaW5lbm8gIT0gLTEgPyBRU3RyaW5nOjpudW1iZXIobGluZW5vKSA6IFFTdHJpbmc6
OmZyb21MYXRpbjEoIk4vQSIpKSAgPDwgIiAiIDw8IGV4VmFsLnRvU3RyaW5nKGV4ZWMpLnFzdHJp
bmcoKSA8PCBlbmRsOworCQlrZERlYnVnKCkgPDwgIltTVkdTY3JpcHRFbGVtZW50XSBFdmFsdWF0
aW9uIGVycm9yLCBsaW5lICIgPDwgKGxpbmVubyAhPSAtMSA/IFFTdHJpbmc6Om51bWJlcihsaW5l
bm8pIDogUVN0cmluZzo6ZnJvbUxhdGluMSgiTi9BIikpICA8PCAiICIgPDwgZXhWYWwtPnRvU3Ry
aW5nKGV4ZWMpLnFzdHJpbmcoKSA8PCBlbmRsOwogCX0KIAllbHNlIGlmKGNvbXAuY29tcGxUeXBl
KCkgPT0gS0pTOjpSZXR1cm5WYWx1ZSkKLQkJa2REZWJ1ZygpIDw8ICJbU1ZHU2NyaXB0RWxlbWVu
dF0gUmV0dXJuIHZhbHVlOiAiIDw8IGNvbXAudmFsdWUoKS50b1N0cmluZyhlY21hRW5naW5lLT5n
bG9iYWxFeGVjKCkpLnFzdHJpbmcoKSA8PCBlbmRsOworCQlrZERlYnVnKCkgPDwgIltTVkdTY3Jp
cHRFbGVtZW50XSBSZXR1cm4gdmFsdWU6ICIgPDwgY29tcC52YWx1ZSgpLT50b1N0cmluZyhlY21h
RW5naW5lLT5nbG9iYWxFeGVjKCkpLnFzdHJpbmcoKSA8PCBlbmRsOwogCWVsc2UgaWYoY29tcC5j
b21wbFR5cGUoKSA9PSBLSlM6Ok5vcm1hbCkKIAkJa2REZWJ1ZygpIDw8ICJbU1ZHU2NyaXB0RWxl
bWVudF0gRXZhbHVhdGVkIGVjbWEgc2NyaXB0ISIgPDwgZW5kbDsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3281</attachid>
            <date>2005-08-08 11:24:24 -0700</date>
            <delta_ts>2005-08-08 13:13:34 -0700</delta_ts>
            <desc>Final patch.</desc>
            <filename>kdomfix.patch</filename>
            <type>text/plain</type>
            <size>655598</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtkb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9BdHRyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS9BdHRyLmNwcAotLS0ga2RvbS9BdHRyLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjIz
IC0wMDAwCTEuMQorKysga2RvbS9BdHRyLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjE2IC0wMDAwCkBA
IC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBB
dHRyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKkF0dHI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY5LDcgKzY5LDcgQEAgVmFsdWUg
QXR0cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKgogCXJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotdm9pZCBBdHRyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgQXR0cjo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20vQXR0ci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vQXR0ci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0F0dHIuaAotLS0ga2RvbS9BdHRyLmgJOSBKdWwgMjAw
NSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vQXR0ci5oCTggQXVnIDIwMDUgMTg6MDI6MTcg
LTAwMDAKQEAgLTE1MCw4ICsxNTAsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX1BVVAogCQlL
RE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0
dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsK
IAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChBdHRyKQpJbmRleDoga2RvbS9DaGFyYWN0ZXJEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0NoYXJh
Y3RlckRhdGEuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
ZG9tL0NoYXJhY3RlckRhdGEuY3BwCi0tLSBrZG9tL0NoYXJhY3RlckRhdGEuY3BwCTkgSnVsIDIw
MDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9tL0NoYXJhY3RlckRhdGEuY3BwCTggQXVnIDIw
MDUgMTg6MDI6MTcgLTAwMDAKQEAgLTQ3LDcgKzQ3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsK
IAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDaGFyYWN0ZXJEYXRhIiwgQ2hhcmFjdGVyRGF0
YVByb3RvLCBDaGFyYWN0ZXJEYXRhUHJvdG9GdW5jKQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkNoYXJhY3RlckRhdGE6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkBAIC02NSw3ICs2NSw3IEBAIFZh
bHVlIENoYXJhY3RlckRhdGE6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLXZvaWQgQ2hhcmFjdGVyRGF0YTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENoYXJhY3Rl
ckRhdGE6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC04NCw3ICs4NCw3IEBA
IHZvaWQgQ2hhcmFjdGVyRGF0YTo6cHV0VmFsdWVQcm9wZXJ0eShFeGUKIAlLRE9NX0xFQVZFX1NB
RkUoRE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhUHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKkNoYXJhY3RlckRhdGFQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKENo
YXJhY3RlckRhdGEpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC05OSw4ICs5OSw4IEBAIFZhbHVlIENo
YXJhY3RlckRhdGFQcm90b0Z1bmM6OmNhbGwoRXhlY1MKIAkJfQogCQljYXNlIENoYXJhY3RlckRh
dGFDb25zdGFudHM6OlN1YnN0cmluZ0RhdGE6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0
ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKLQkJCXVuc2lnbmVkIGxvbmcgY291bnQgPSBhcmdz
WzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBhcmdzWzBdLT50
b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgY291bnQgPSBhcmdzWzFdLT50b1VJbnQz
MihleGVjKTsKIAkJCXJldHVybiBnZXRET01TdHJpbmcob2JqLnN1YnN0cmluZ0RhdGEob2Zmc2V0
LCBjb3VudCkpOwogCQl9CiAJCWNhc2UgQ2hhcmFjdGVyRGF0YUNvbnN0YW50czo6QXBwZW5kRGF0
YToKQEAgLTExMSwyMiArMTExLDIyIEBAIFZhbHVlIENoYXJhY3RlckRhdGFQcm90b0Z1bmM6OmNh
bGwoRXhlY1MKIAkJfQogCQljYXNlIENoYXJhY3RlckRhdGFDb25zdGFudHM6Okluc2VydERhdGE6
CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsK
KwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlE
T01TdHJpbmcgYXJnID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1sxXSk7CiAJCQlvYmouaW5zZXJ0
RGF0YShvZmZzZXQsIGFyZyk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBD
aGFyYWN0ZXJEYXRhQ29uc3RhbnRzOjpEZWxldGVEYXRhOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25n
IG9mZnNldCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7Ci0JCQl1bnNpZ25lZCBsb25nIGNvdW50
ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJn
c1swXS0+dG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGNvdW50ID0gYXJnc1sxXS0+
dG9VSW50MzIoZXhlYyk7CiAJCQlvYmouZGVsZXRlRGF0YShvZmZzZXQsIGNvdW50KTsKIAkJCXJl
dHVybiBVbmRlZmluZWQoKTsKIAkJfQogCQljYXNlIENoYXJhY3RlckRhdGFDb25zdGFudHM6OlJl
cGxhY2VEYXRhOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0udG9VSW50
MzIoZXhlYyk7Ci0JCQl1bnNpZ25lZCBsb25nIGNvdW50ID0gYXJnc1sxXS50b1VJbnQzMihleGVj
KTsKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CisJ
CQl1bnNpZ25lZCBsb25nIGNvdW50ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlET01T
dHJpbmcgYXJnID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1syXSk7CiAJCQlvYmoucmVwbGFjZURh
dGEob2Zmc2V0LCBjb3VudCwgYXJnKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKSW5kZXg6IGtk
b20vQ2hhcmFjdGVyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vQ2hhcmFjdGVyRGF0YS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrZG9tL0NoYXJhY3RlckRhdGEuaAotLS0ga2RvbS9DaGFyYWN0ZXJEYXRhLmgJ
OSBKdWwgMjAwNSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vQ2hhcmFjdGVyRGF0YS5oCTgg
QXVnIDIwMDUgMTg6MDI6MTcgLTAwMDAKQEAgLTE0MCw4ICsxNDAsOCBAQCBuYW1lc3BhY2UgS0RP
TQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFs
dWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2
YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrZG9tL0RPTUNvbmZpZ3VyYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NQ29u
ZmlndXJhdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtkb20vRE9NQ29uZmlndXJhdGlvbi5jcHAKLS0tIGtkb20vRE9NQ29uZmlndXJhdGlvbi5jcHAJ
OSBKdWwgMjAwNSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vRE9NQ29uZmlndXJhdGlvbi5j
cHAJOCBBdWcgMjAwNSAxODowMjoxNyAtMDAwMApAQCAtNDcsNyArNDcsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkRPTUNvbmZpZ3VyYXRpb24i
LCBET01Db25maWd1cmF0aW9uUHJvdG8sIERPTUNvbmZpZ3VyYXRpb25Qcm90b0Z1bmMpCiAKLVZh
bHVlIERPTUNvbmZpZ3VyYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NQ29uZmlndXJhdGlvbjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NB
RkUKIApAQCAtNjMsNyArNjMsNyBAQCBWYWx1ZSBET01Db25maWd1cmF0aW9uOjpnZXRWYWx1ZVBy
b3BlcnR5CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBET01Db25maWd1cmF0aW9u
UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTUNvbmZpZ3VyYXRpb25Qcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJ
S0RPTV9DSEVDS19USElTKERPTUNvbmZpZ3VyYXRpb24pCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03
Myw3ICs3Myw3IEBAIFZhbHVlIERPTUNvbmZpZ3VyYXRpb25Qcm90b0Z1bmM6OmNhbGwoRXgKIAkJ
Y2FzZSBET01Db25maWd1cmF0aW9uQ29uc3RhbnRzOjpTZXRQYXJhbWV0ZXI6CiAJCXsKIAkJCURP
TVN0cmluZyBuYW1lID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIHZhbHVl
ID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIHZhbHVlID0gYXJnc1sxXS0+dG9C
b29sZWFuKGV4ZWMpOwogLy8JCQlET01Vc2VyRGF0YSB2YWx1ZSA9IGVjbWFfY2FzdDxET01Vc2Vy
RGF0YT4oZXhlYywgYXJnc1sxXSwgJnRvRE9NVXNlckRhdGEpOwogCQkJb2JqLnNldFBhcmFtZXRl
cihuYW1lLCB2YWx1ZSk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CkluZGV4OiBrZG9tL0RPTUNv
bmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL0RPTUNvbmZpZ3VyYXRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga2RvbS9ET01Db25maWd1cmF0aW9uLmgKLS0tIGtkb20vRE9NQ29uZmlndXJhdGlv
bi5oCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9tL0RPTUNvbmZpZ3VyYXRp
b24uaAk4IEF1ZyAyMDA1IDE4OjAyOjE3IC0wMDAwCkBAIC0xNjMsNyArMTYzLDcgQEAgbmFtZXNw
YWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFT
U19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6
IGtkb20vRE9NRXJyb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vRE9NRXJyb3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrZG9tL0RPTUVycm9yLmNwcAotLS0ga2RvbS9ET01FcnJvci5jcHAJOSBKdWwgMjAw
NSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vRE9NRXJyb3IuY3BwCTggQXVnIDIwMDUgMTg6
MDI6MTcgLTAwMDAKQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQK
ICovCiAKLVZhbHVlIERPTUVycm9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUVycm9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCklu
ZGV4OiBrZG9tL0RPTUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9ET01FcnJvci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrZG9tL0RPTUVycm9yLmgKLS0tIGtkb20vRE9NRXJyb3IuaAk5IEp1bCAyMDA1IDA2
OjUzOjIzIC0wMDAwCTEuMQorKysga2RvbS9ET01FcnJvci5oCTggQXVnIDIwMDUgMTg6MDI6MTcg
LTAwMDAKQEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNt
YVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChET01FcnJvcikKSW5kZXg6
IGtkb20vRE9NRXJyb3JIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL0RPTUVycm9ySGFuZGxlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9NRXJyb3JIYW5kbGVyLmNwcAotLS0ga2RvbS9E
T01FcnJvckhhbmRsZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9t
L0RPTUVycm9ySGFuZGxlci5jcHAJOCBBdWcgMjAwNSAxODowMjoxNyAtMDAwMApAQCAtNDYsNyAr
NDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUo
IkRPTUVycm9ySGFuZGxlciIsIERPTUVycm9ySGFuZGxlclByb3RvLCBET01FcnJvckhhbmRsZXJQ
cm90b0Z1bmMpCiAKLVZhbHVlIERPTUVycm9ySGFuZGxlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpET01FcnJvckhhbmRsZXI6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYwLDcgKzYwLDcgQEAgVmFsdWUgRE9NRXJyb3JIYW5kbGVy
OjpnZXRWYWx1ZVByb3BlcnR5KAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgRE9N
RXJyb3JIYW5kbGVyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRPTUVycm9ySGFuZGxlclByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoRE9NRXJyb3JIYW5kbGVyKQogCUtET01fRU5URVJf
U0FGRQpJbmRleDoga2RvbS9ET01FcnJvckhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTUVycm9ySGFuZGxlci5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUVycm9ySGFuZGxlci5oCi0tLSBr
ZG9tL0RPTUVycm9ySGFuZGxlci5oCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBr
ZG9tL0RPTUVycm9ySGFuZGxlci5oCTggQXVnIDIwMDUgMTg6MDI6MTcgLTAwMDAKQEAgLTU1LDcg
KzU1LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgog
CQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtkb20vRE9NRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTUV4Y2VwdGlvbi5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9NRXhjZXB0aW9uLmNwcAotLS0g
a2RvbS9ET01FeGNlcHRpb24uY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBr
ZG9tL0RPTUV4Y2VwdGlvbi5jcHAJOCBBdWcgMjAwNSAxODowMjoxOCAtMDAwMApAQCAtMzQsNyAr
MzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgRE9NRXhjZXB0
aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqRE9NRXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtkb20vRE9NRXhjZXB0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ET01FeGNl
cHRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9E
T01FeGNlcHRpb24uaAotLS0ga2RvbS9ET01FeGNlcHRpb24uaAk5IEp1bCAyMDA1IDA2OjUzOjI0
IC0wMDAwCTEuMQorKysga2RvbS9ET01FeGNlcHRpb24uaAk4IEF1ZyAyMDA1IDE4OjAyOjE4IC0w
MDAwCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2Ny
aXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NSW1wbGVtZW50YXRpb24uY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUltcGxl
bWVudGF0aW9uLmNwcAotLS0ga2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJOSBKdWwgMjAwNSAw
Njo1MzoyNCAtMDAwMAkxLjEKKysrIGtkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCTggQXVnIDIw
MDUgMTg6MDI6MTggLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsK
IAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJET01JbXBsZW1lbnRhdGlvbiIsIERPTUltcGxl
bWVudGF0aW9uUHJvdG8sIERPTUltcGxlbWVudGF0aW9uUHJvdG9GdW5jKQogCi1WYWx1ZSBET01J
bXBsZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpET01JbXBsZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApA
QCAtNzQsNyArNzQsNyBAQCBWYWx1ZSBET01JbXBsZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0
CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBET01JbXBsZW1lbnRhdGlvblByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKK1ZhbHVlSW1wICpET01JbXBsZW1lbnRhdGlvblByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9N
X0NIRUNLX1RISVMoRE9NSW1wbGVtZW50YXRpb24pCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC0xMjMs
NyArMTIzLDcgQEAgVmFsdWUgRE9NSW1wbGVtZW50YXRpb25Qcm90b0Z1bmM6OmNhbGwoRQogCQl9
CiAJCWNhc2UgRE9NSW1wbGVtZW50YXRpb25Db25zdGFudHM6OkNyZWF0ZUxTUGFyc2VyOgogCQl7
Ci0JCQl1bnNpZ25lZCBzaG9ydCBtb2RlID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVu
c2lnbmVkIHNob3J0IG1vZGUgPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCURPTVN0cmlu
ZyBzY2hlbWFUeXBlID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1sxXSk7CiAJCQlyZXR1cm4gc2Fm
ZV9jYWNoZTxMU1BhcnNlcj4oZXhlYywgb2JqLmNyZWF0ZUxTUGFyc2VyKG1vZGUsIHNjaGVtYVR5
cGUpKTsKIAkJfQpJbmRleDoga2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NSW1wbGVtZW50YXRpb24uaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01JbXBsZW1lbnRh
dGlvbi5oCi0tLSBrZG9tL0RPTUltcGxlbWVudGF0aW9uLmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAt
MDAwMAkxLjEKKysrIGtkb20vRE9NSW1wbGVtZW50YXRpb24uaAk4IEF1ZyAyMDA1IDE4OjAyOjE4
IC0wMDAwCkBAIC0xNTQsNyArMTU0LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVj
bWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ET01Mb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTUxvY2F0b3IuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUxvY2F0b3IuY3BwCi0t
LSBrZG9tL0RPTUxvY2F0b3IuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBr
ZG9tL0RPTUxvY2F0b3IuY3BwCTggQXVnIDIwMDUgMTg6MDI6MTggLTAwMDAKQEAgLTQyLDcgKzQy
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIERPTUxvY2F0b3I6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqRE9NTG9jYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9ET01Mb2NhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ET01Mb2Nh
dG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9N
TG9jYXRvci5oCi0tLSBrZG9tL0RPTUxvY2F0b3IuaAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAw
CTEuMQorKysga2RvbS9ET01Mb2NhdG9yLmgJOCBBdWcgMjAwNSAxODowMjoxOCAtMDAwMApAQCAt
OTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0
aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ET01TdHJpbmdMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTVN0cmluZ0xpc3QuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTVN0cmluZ0xpc3Qu
Y3BwCi0tLSBrZG9tL0RPTVN0cmluZ0xpc3QuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJ
MS4xCisrKyBrZG9tL0RPTVN0cmluZ0xpc3QuY3BwCTggQXVnIDIwMDUgMTg6MDI6MTggLTAwMDAK
QEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRf
UFJPVE9UWVBFKCJET01TdHJpbmdMaXN0IiwgRE9NU3RyaW5nTGlzdFByb3RvLCBET01TdHJpbmdM
aXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBET01TdHJpbmdMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTVN0cmluZ0xpc3Q6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYwLDcgKzYwLDcgQEAgVmFsdWUgRE9NU3RyaW5nTGlzdDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgRE9N
U3RyaW5nTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01TdHJpbmdMaXN0UHJvdG9GdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQogewogCUtET01fQ0hFQ0tfVEhJUyhET01TdHJpbmdMaXN0KQogCUtET01fRU5URVJfU0FGRQpA
QCAtNjksNyArNjksNyBAQCBWYWx1ZSBET01TdHJpbmdMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNT
CiAJewogCQljYXNlIERPTVN0cmluZ0xpc3RDb25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2ln
bmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTVN0cmlu
ZyhvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgRE9NU3RyaW5nTGlzdENvbnN0YW50czo6
Q29udGFpbnM6CkluZGV4OiBrZG9tL0RPTVN0cmluZ0xpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTVN0cmluZ0xpc3QuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01TdHJpbmdMaXN0LmgKLS0tIGtk
b20vRE9NU3RyaW5nTGlzdC5oCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9t
L0RPTVN0cmluZ0xpc3QuaAk4IEF1ZyAyMDA1IDE4OjAyOjE4IC0wMDAwCkBAIC04Nyw3ICs4Nyw3
IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RP
TV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrZG9tL0RPTVVzZXJEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTVVzZXJEYXRhLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01Vc2VyRGF0YS5jcHAKLS0tIGtkb20vRE9N
VXNlckRhdGEuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9tL0RPTVVz
ZXJEYXRhLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjE4IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBET01Vc2VyRGF0YTo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpE
T01Vc2VyRGF0YTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9ET01Vc2VyRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NVXNlckRhdGEu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01Vc2Vy
RGF0YS5oCi0tLSBrZG9tL0RPTVVzZXJEYXRhLmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAtMDAwMAkx
LjEKKysrIGtkb20vRE9NVXNlckRhdGEuaAk4IEF1ZyAyMDA1IDE4OjAyOjE4IC0wMDAwCkBAIC01
Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9N
X0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIAogCUtET01fREVG
SU5FX0NBU1QoRE9NVXNlckRhdGEpCkluZGV4OiBrZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RvY3VtZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9Eb2N1bWVudC5jcHAKLS0t
IGtkb20vRG9jdW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9t
L0RvY3VtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjE5IC0wMDAwCkBAIC05NCw3ICs5NCw3IEBA
IG5hbWVzcGFjZSBLRE9NCiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiRG9jdW1lbnQiLCBE
b2N1bWVudFByb3RvLCBEb2N1bWVudFByb3RvRnVuYykKIAotVmFsdWUgRG9jdW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
RG9jdW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTEyOCwyMCArMTI4LDIwIEBAIFZhbHVlIERv
Y3VtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9
OwogCi12b2lkIERvY3VtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgRG9jdW1lbnQ6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50
KQogewogCUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBEb2N1
bWVudENvbnN0YW50czo6WG1sU3RhbmRhbG9uZToKLQkJCXNldFhtbFN0YW5kYWxvbmUodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsKKwkJCXNldFhtbFN0YW5kYWxvbmUodmFsdWUtPnRvQm9vbGVhbihl
eGVjKSk7CiAJCQlicmVhazsKIAkJY2FzZSBEb2N1bWVudENvbnN0YW50czo6WG1sVmVyc2lvbjoK
IAkJCXNldFhtbFZlcnNpb24odG9ET01TdHJpbmcoZXhlYywgdmFsdWUpKTsKIAkJCWJyZWFrOwog
CQljYXNlIERvY3VtZW50Q29uc3RhbnRzOjpTdHJpY3RFcnJvckNoZWNraW5nOgotCQkJc2V0U3Ry
aWN0RXJyb3JDaGVja2luZyh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworCQkJc2V0U3RyaWN0RXJy
b3JDaGVja2luZyh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQljYXNlIERv
Y3VtZW50Q29uc3RhbnRzOjpEb2N1bWVudFVSSToKIAkJCXNldERvY3VtZW50VVJJKHRvRE9NU3Ry
aW5nKGV4ZWMsIHZhbHVlKSk7CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBEb2N1bWVudDo6cHV0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdAogCUtET01fTEVBVkVfU0FGRShET01FeGNlcHRpb24pCiB9
CiAKLVZhbHVlIERvY3VtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkRvY3VtZW50UHJvdG9GdW5j
OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhEb2N1bWVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAg
LTIwNiw3ICsyMDYsNyBAQCBWYWx1ZSBEb2N1bWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
CiAJCWNhc2UgRG9jdW1lbnRDb25zdGFudHM6OkltcG9ydE5vZGU6CiAJCXsKIAkJCU5vZGUgaW1w
b3J0ZWROb2RlID0gZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFyZ3NbMF0sICZ0b05vZGUpOwotCQkJ
Ym9vbCBkZWVwID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGRlZXAgPSBhcmdz
WzFdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBvYmouaW1w
b3J0Tm9kZShpbXBvcnRlZE5vZGUsIGRlZXApKTsKIAkJfQogCQljYXNlIERvY3VtZW50Q29uc3Rh
bnRzOjpOb3JtYWxpemVEb2N1bWVudDoKSW5kZXg6IGtkb20vRG9jdW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RvY3VtZW50LmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vRG9jdW1lbnQuaAotLS0ga2Rv
bS9Eb2N1bWVudC5oCTcgQXVnIDIwMDUgMDY6MTc6NDMgLTAwMDAJMS4yCisrKyBrZG9tL0RvY3Vt
ZW50LmgJOCBBdWcgMjAwNSAxODowMjoxOSAtMDAwMApAQCAtNDE3LDggKzQxNyw4IEBAIG5hbWVz
cGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lk
IHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
S0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsJCQorCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lk
IHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsJCQogCX07CiB9CiAKSW5kZXg6IGtkb20vRG9jdW1l
bnRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9t
L0RvY3VtZW50VHlwZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vRG9jdW1lbnRUeXBlLmNwcAotLS0ga2RvbS9Eb2N1bWVudFR5cGUuY3BwCTkgSnVs
IDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9tL0RvY3VtZW50VHlwZS5jcHAJOCBBdWcg
MjAwNSAxODowMjoxOSAtMDAwMApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pT
OwogQGVuZAogKi8KIAotVmFsdWUgRG9jdW1lbnRUeXBlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50VHlwZTo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9Eb2N1bWVudFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RvY3VtZW50VHlwZS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RvY3VtZW50VHlwZS5oCi0tLSBr
ZG9tL0RvY3VtZW50VHlwZS5oCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9t
L0RvY3VtZW50VHlwZS5oCTggQXVnIDIwMDUgMTg6MDI6MTkgLTAwMDAKQEAgLTExNyw3ICsxMTcs
NyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0ZPUldBUkRQVVQKIAkJS0RPTV9DQVNUCiAKLQkJ
S0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKERv
Y3VtZW50VHlwZSkKSW5kZXg6IGtkb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9FbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9FbGVtZW50LmNwcAotLS0ga2RvbS9FbGVtZW50
LmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAwCTEuMQorKysga2RvbS9FbGVtZW50LmNwcAk4
IEF1ZyAyMDA1IDE4OjAyOjIwIC0wMDAwCkBAIC02Nyw3ICs2Nyw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiRWxlbWVudCIsIEVsZW1lbnRQcm90
bywgRWxlbWVudFByb3RvRnVuYykKIAotVmFsdWUgRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpFbGVtZW50OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01f
RU5URVJfU0FGRQogCkBAIC04NSw3ICs4NSw3IEBAIFZhbHVlIEVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEVsZW1lbnRQ
cm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCitWYWx1ZUltcCAqRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNL
X1RISVMoRWxlbWVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTE4Miw3ICsxODIsNyBAQCBWYWx1
ZSBFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqCiAJCWNhc2UgRWxlbWVudENvbnN0
YW50czo6U2V0SWRBdHRyaWJ1dGU6CiAJCXsKIAkJCURPTVN0cmluZyBuYW1lID0gdG9ET01TdHJp
bmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIGlzSWQgPSBhcmdzWzFdLnRvQm9vbGVhbihleGVj
KTsKKwkJCWJvb2wgaXNJZCA9IGFyZ3NbMV0tPnRvQm9vbGVhbihleGVjKTsKIAkJCW9iai5zZXRJ
ZEF0dHJpYnV0ZShuYW1lLCBpc0lkKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpAQCAt
MTkwLDE0ICsxOTAsMTQgQEAgVmFsdWUgRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUg
KgogCQl7CiAJCQlET01TdHJpbmcgbmFtZXNwYWNlVVJJID0gdG9ET01TdHJpbmcoZXhlYywgYXJn
c1swXSk7CiAJCQlET01TdHJpbmcgbG9jYWxOYW1lID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1sx
XSk7Ci0JCQlib29sIGlzSWQgPSBhcmdzWzJdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgaXNJ
ZCA9IGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKTsKIAkJCW9iai5zZXRJZEF0dHJpYnV0ZU5TKG5h
bWVzcGFjZVVSSSwgbG9jYWxOYW1lLCBpc0lkKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJ
fQogCQljYXNlIEVsZW1lbnRDb25zdGFudHM6OlNldElkQXR0cmlidXRlTm9kZToKIAkJewogCQkJ
QXR0ciBpZEF0dHIgPSBlY21hX2Nhc3Q8QXR0cj4oZXhlYywgYXJnc1swXSwgJnRvQXR0cik7Ci0J
CQlib29sIGlzSWQgPSBhcmdzWzFdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgaXNJZCA9IGFy
Z3NbMV0tPnRvQm9vbGVhbihleGVjKTsKIAkJCW9iai5zZXRJZEF0dHJpYnV0ZU5vZGUoaWRBdHRy
LCBpc0lkKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpJbmRleDoga2RvbS9FbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9FbGVtZW50
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRWxlbWVu
dC5oCi0tLSBrZG9tL0VsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAwCTEuMQorKysg
a2RvbS9FbGVtZW50LmgJOCBBdWcgMjAwNSAxODowMjoyMCAtMDAwMApAQCAtMTAyLDcgKzEwMiw3
IEBAIG5hbWVzcGFjZSBLRE9NCiAJCSAqIHNldEF0dHJpYnV0ZU5TIG1ldGhvZC4KIAkJICoKIAkJ
ICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBjcmVhdGUgb3IgYWx0
ZXIuCi0JCSAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBzZXQgaW4gc3RyaW5nIGZvcm0uCisJCSAq
IEBwYXJhbSB2YWx1ZSBWYWx1ZUltcCAqdG8gc2V0IGluIHN0cmluZyBmb3JtLgogCQkgKi8KIAkJ
dm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgRE9NU3RyaW5nICZuYW1lLCBjb25zdCBET01TdHJpbmcg
JnZhbHVlKTsKIApAQCAtMzQ4LDcgKzM0OCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VU
CiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9
OwogfTsKIApJbmRleDoga2RvbS9FbnRpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vRW50aXR5LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga2RvbS9FbnRpdHkuY3BwCi0tLSBrZG9tL0VudGl0eS5jcHAJOSBK
dWwgMjAwNSAwNjo1MzoyNCAtMDAwMAkxLjEKKysrIGtkb20vRW50aXR5LmNwcAk4IEF1ZyAyMDA1
IDE4OjAyOjIwIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBA
ZW5kCiAqLwogCi1WYWx1ZSBFbnRpdHk6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRW50aXR5OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCklu
ZGV4OiBrZG9tL0VudGl0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vRW50aXR5LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vRW50aXR5LmgKLS0tIGtkb20vRW50aXR5LmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAt
MDAwMAkxLjEKKysrIGtkb20vRW50aXR5LmgJOCBBdWcgMjAwNSAxODowMjoyMCAtMDAwMApAQCAt
MTIxLDcgKzEyMSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FS
RFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a2RvbS9OYW1lZE5vZGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20vTmFtZWROb2RlTWFwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga2RvbS9OYW1lZE5vZGVNYXAuY3BwCi0tLSBrZG9tL05hbWVkTm9kZU1h
cC5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20vTmFtZWROb2RlTWFw
LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjIwIC0wMDAwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiTmFtZWROb2RlTWFwIiwg
TmFtZWROb2RlTWFwUHJvdG8sIE5hbWVkTm9kZU1hcFByb3RvRnVuYykKIAotVmFsdWUgTmFtZWRO
b2RlTWFwOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKk5hbWVkTm9kZU1hcDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjcsNyArNjcs
NyBAQCBWYWx1ZSBOYW1lZE5vZGVNYXA6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBOYW1lZE5vZGVNYXBQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAq
TmFtZWROb2RlTWFwUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhOYW1lZE5vZGVN
YXApCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC05MSw3ICs5MSw3IEBAIFZhbHVlIE5hbWVkTm9kZU1h
cFByb3RvRnVuYzo6Y2FsbChFeGVjU3QKIAkJfQogCQljYXNlIE5hbWVkTm9kZU1hcENvbnN0YW50
czo6SXRlbToKIAkJewotCQkJaW50IGluZGV4ID0gYXJnc1swXS50b0ludDMyKGV4ZWMpOworCQkJ
aW50IGluZGV4ID0gYXJnc1swXS0+dG9JbnQzMihleGVjKTsKIAkJCXJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIG9iai5pdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBOYW1lZE5vZGVNYXBDb25zdGFu
dHM6OkdldE5hbWVkSXRlbU5TOgpJbmRleDoga2RvbS9OYW1lZE5vZGVNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL05hbWVkTm9kZU1hcC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL05hbWVkTm9kZU1hcC5o
Ci0tLSBrZG9tL05hbWVkTm9kZU1hcC5oCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4xCisr
KyBrZG9tL05hbWVkTm9kZU1hcC5oCTggQXVnIDIwMDUgMTg6MDI6MjEgLTAwMDAKQEAgLTE3MSw4
ICsxNzEsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9G
T1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBh
dHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7
CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9Ob2RlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga2RvbS9Ob2RlLmNwcAotLS0ga2RvbS9Ob2RlLmNwcAk5IEp1bCAy
MDA1IDA2OjUzOjI1IC0wMDAwCTEuMQorKysga2RvbS9Ob2RlLmNwcAk4IEF1ZyAyMDA1IDE4OjAy
OjIxIC0wMDAwCkBAIC04MSw3ICs4MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01f
SU1QTEVNRU5UX1BST1RPVFlQRSgiTm9kZSIsIE5vZGVQcm90bywgTm9kZVByb3RvRnVuYykKIAot
VmFsdWUgTm9kZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpOb2RlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC0xMjcsNyArMTI3LDcg
QEAgVmFsdWUgTm9kZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKgogCXJldHVybiBVbmRl
ZmluZWQoKTsKIH07CiAKLXZvaWQgTm9kZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIE5vZGU6OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwg
aW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC0xNDksNyArMTQ5LDcgQEAgdm9pZCBOb2Rl
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZQogCUtET01fTEVBVkVfU0FGRShET01FeGNl
cHRpb24pCiB9CiAKLVZhbHVlIE5vZGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqTm9kZVByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoTm9kZSkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTE4
MiwxMyArMTgyLDEzIEBAIFZhbHVlIE5vZGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGUK
IAkJCXJldHVybiBLSlM6OkJvb2xlYW4ob2JqLmhhc0NoaWxkTm9kZXMoKSk7CiAJCWNhc2UgTm9k
ZUNvbnN0YW50czo6Q2xvbmVOb2RlOgogCQl7Ci0JCQlib29sIGRlZXAgPSBhcmdzWzBdLnRvQm9v
bGVhbihleGVjKTsKKwkJCWJvb2wgZGVlcCA9IGFyZ3NbMF0tPnRvQm9vbGVhbihleGVjKTsKIAkJ
CXJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG9iai5jbG9uZU5vZGUoZGVlcCkpOwogCQl9CiAJCWNh
c2UgTm9kZUNvbnN0YW50czo6Tm9ybWFsaXplOgogCQl7CiAJCQlvYmoubm9ybWFsaXplKCk7Ci0J
CQlyZXR1cm4gVmFsdWUoKTsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAJCWNhc2UgTm9kZUNvbnN0
YW50czo6SXNTdXBwb3J0ZWQ6CiAJCXsKSW5kZXg6IGtkb20vTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vTm9kZS5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL05vZGUuaAotLS0ga2RvbS9Ob2RlLmgJNyBB
dWcgMjAwNSAwNjoxNzo0MyAtMDAwMAkxLjIKKysrIGtkb20vTm9kZS5oCTggQXVnIDIwMDUgMTg6
MDI6MjEgLTAwMDAKQEAgLTQ4MCw4ICs0ODAsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX1BV
VAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwg
aW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBh
dHRyKTsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChOb2RlKQpJbmRleDoga2RvbS9Ob2RlTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9Ob2Rl
TGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
Tm9kZUxpc3QuY3BwCi0tLSBrZG9tL05vZGVMaXN0LmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI1IC0w
MDAwCTEuMQorKysga2RvbS9Ob2RlTGlzdC5jcHAJOCBBdWcgMjAwNSAxODowMjoyMSAtMDAwMApA
QCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9Q
Uk9UT1RZUEUoIk5vZGVMaXN0IiwgTm9kZUxpc3RQcm90bywgTm9kZUxpc3RQcm90b0Z1bmMpCiAK
LVZhbHVlIE5vZGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKk5vZGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02MCw3
ICs2MCw3IEBAIFZhbHVlIE5vZGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIE5vZGVMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAg
Kk5vZGVMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhOb2RlTGlzdCkKIAlL
RE9NX0VOVEVSX1NBRkUKQEAgLTY5LDcgKzY5LDcgQEAgVmFsdWUgTm9kZUxpc3RQcm90b0Z1bmM6
OmNhbGwoRXhlY1N0YXRlIAogCXsKIAkJY2FzZSBOb2RlTGlzdENvbnN0YW50czo6SXRlbToKIAkJ
ewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1
bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4g
Z2V0RE9NTm9kZShleGVjLCBvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4
OiBrZG9tL05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva2RvbS9Ob2RlTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrZG9tL05vZGVMaXN0LmgKLS0tIGtkb20vTm9kZUxpc3QuaAk5IEp1bCAyMDA1IDA2OjUz
OjI1IC0wMDAwCTEuMQorKysga2RvbS9Ob2RlTGlzdC5oCTggQXVnIDIwMDUgMTg6MDI6MjEgLTAw
MDAKQEAgLTc4LDcgKzc4LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3Jp
cHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vTm90YXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vTm90YXRpb24uY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL05vdGF0aW9uLmNwcAotLS0g
a2RvbS9Ob3RhdGlvbi5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20v
Tm90YXRpb24uY3BwCTggQXVnIDIwMDUgMTg6MDI6MjIgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIE5vdGF0aW9uOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk5v
dGF0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL05vdGF0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9Ob3RhdGlvbi5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL05vdGF0aW9uLmgKLS0tIGtk
b20vTm90YXRpb24uaAk5IEp1bCAyMDA1IDA2OjUzOjI1IC0wMDAwCTEuMQorKysga2RvbS9Ob3Rh
dGlvbi5oCTggQXVnIDIwMDUgMTg6MDI6MjIgLTAwMDAKQEAgLTgxLDcgKzgxLDcgQEAgbmFtZXNw
YWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKLS0tIGtkb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI1IC0wMDAwCTEuMQorKysga2Rv
bS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCTggQXVnIDIwMDUgMTg6MDI6MjIgLTAwMDAKQEAg
LTM4LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKQEAgLTU2LDcgKzU2LDcgQEAgVmFsdWUgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpn
ZXRWYWx1ZVBybwogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwg
aW50KQogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vUHJv
Y2Vzc2luZ0luc3RydWN0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKLS0tIGtkb20vUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmgJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmgJOCBBdWcgMjAwNSAxODowMjoyMiAtMDAwMApAQCAtODEsOCArODEs
OCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrZG9t
L1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
VGV4dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
VGV4dC5jcHAKLS0tIGtkb20vVGV4dC5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEK
KysrIGtkb20vVGV4dC5jcHAJOCBBdWcgMjAwNSAxODowMjoyMiAtMDAwMApAQCAtNDMsNyArNDMs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIlRl
eHQiLCBUZXh0UHJvdG8sIFRleHRQcm90b0Z1bmMpCiAKLVZhbHVlIFRleHQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqVGV4dDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlL
RE9NX0VOVEVSX1NBRkUKIApAQCAtNjEsNyArNjEsNyBAQCBWYWx1ZSBUZXh0OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBUZXh0
UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQorVmFsdWVJbXAgKlRleHRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19U
SElTKFRleHQpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03MCw3ICs3MCw3IEBAIFZhbHVlIFRleHRQ
cm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGUKIAl7CiAJCWNhc2UgVGV4dENvbnN0YW50czo6
U3BsaXRUZXh0OgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0udG9VSW50
MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4
ZWMpOwogCQkJcmV0dXJuIGdldERPTU5vZGUoZXhlYywgb2JqLnNwbGl0VGV4dChvZmZzZXQpKTsK
IAkJfQogCQljYXNlIFRleHRDb25zdGFudHM6OlJlcGxhY2VXaG9sZVRleHQ6CkluZGV4OiBrZG9t
L1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL1Rl
eHQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9UZXh0
LmgKLS0tIGtkb20vVGV4dC5oCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4xCisrKyBrZG9t
L1RleHQuaAk4IEF1ZyAyMDA1IDE4OjAyOjIyIC0wMDAwCkBAIC0xMjEsNyArMTIxLDcgQEAgbmFt
ZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL1R5cGVJbmZvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL1R5cGVJbmZvLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9UeXBlSW5m
by5jcHAKLS0tIGtkb20vVHlwZUluZm8uY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4x
CisrKyBrZG9tL1R5cGVJbmZvLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjIyIC0wMDAwCkBAIC00NCw3
ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQ
RSgiVHlwZUluZm8iLCBUeXBlSW5mb1Byb3RvLCBUeXBlSW5mb1Byb3RvRnVuYykKIAotVmFsdWUg
VHlwZUluZm86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqVHlwZUluZm86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTU4LDcgKzU4LDcg
QEAgVmFsdWUgVHlwZUluZm86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotVmFsdWUgVHlwZUluZm9Qcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpl
eGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqVHlwZUlu
Zm9Qcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFR5cGVJbmZvKQogCUtET01fRU5U
RVJfU0FGRQpAQCAtNjksNyArNjksNyBAQCBWYWx1ZSBUeXBlSW5mb1Byb3RvRnVuYzo6Y2FsbChF
eGVjU3RhdGUgCiAJCXsKIAkJCWNvbnN0IERPTVN0cmluZyB0eXBlTmFtZXNwYWNlQXJnID0gdG9E
T01TdHJpbmcoZXhlYywgYXJnc1swXSk7CiAJCQljb25zdCBET01TdHJpbmcgdHlwZU5hbWVBcmcg
PSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzFdKTsKLQkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgZGVy
aXZhdGlvbk1ldGhvZCA9IGFyZ3NbMl0udG9VSW50MzIoZXhlYyk7CisJCQljb25zdCB1bnNpZ25l
ZCBsb25nIGRlcml2YXRpb25NZXRob2QgPSBhcmdzWzJdLT50b1VJbnQzMihleGVjKTsKIAogCQkJ
cmV0dXJuIEtKUzo6Qm9vbGVhbihvYmouaXNEZXJpdmVkRnJvbSh0eXBlTmFtZXNwYWNlQXJnLAog
CQkJCQkJCQkJCQkJICB0eXBlTmFtZUFyZywgZGVyaXZhdGlvbk1ldGhvZCkpOwpJbmRleDoga2Rv
bS9UeXBlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vVHlwZUluZm8uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a2RvbS9UeXBlSW5mby5oCi0tLSBrZG9tL1R5cGVJbmZvLmgJOSBKdWwgMjAwNSAwNjo1MzoyNSAt
MDAwMAkxLjEKKysrIGtkb20vVHlwZUluZm8uaAk4IEF1ZyAyMDA1IDE4OjAyOjIyIC0wMDAwCkBA
IC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNl
Y3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiAKIH07CkluZGV4OiBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTQ2hhcnNldFJ1
bGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nz
cy9DU1NDaGFyc2V0UnVsZS5jcHAKLS0tIGtkb20vY3NzL0NTU0NoYXJzZXRSdWxlLmNwcAkyOSBK
dWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtkb20vY3NzL0NTU0NoYXJzZXRSdWxlLmNw
cAk4IEF1ZyAyMDA1IDE4OjAyOjIyIC0wMDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBDU1NDaGFyc2V0UnVsZTo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkNTU0NoYXJzZXRS
dWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
c3dpdGNoKHRva2VuKQogCXsKQEAgLTUwLDcgKzUwLDcgQEAgVmFsdWUgQ1NTQ2hhcnNldFJ1bGU6
OmdldFZhbHVlUHJvcGVydHkoRQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBDU1ND
aGFyc2V0UnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENTU0NoYXJzZXRSdWxlOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9jc3MvQ1NTQ2hhcnNldFJ1bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NDaGFy
c2V0UnVsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9t
L2Nzcy9DU1NDaGFyc2V0UnVsZS5oCi0tLSBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5oCTkgSnVs
IDIwMDUgMDY6NTM6NDAgLTAwMDAJMS4xCisrKyBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5oCTgg
QXVnIDIwMDUgMTg6MDI6MjIgLTAwMDAKQEAgLTUzLDggKzUzLDggQEAgbmFtZXNwYWNlIEtET00K
IAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVl
ICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2
YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3NzL0NTU0ZvbnRGYWNl
UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9j
c3MvQ1NTRm9udEZhY2VSdWxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAg
LXUgLXIxLjIga2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAotLS0ga2RvbS9jc3MvQ1NTRm9u
dEZhY2VSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtkb20vY3Nz
L0NTU0ZvbnRGYWNlUnVsZS5jcHAJOCBBdWcgMjAwNSAxODowMjoyMiAtMDAwMApAQCAtMzcsNyAr
MzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgQ1NTRm9udEZh
Y2VSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKkNTU0ZvbnRGYWNlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDoga2Rv
bS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCi0tLSBrZG9t
L2Nzcy9DU1NGb250RmFjZVJ1bGUuaAk5IEp1bCAyMDA1IDA2OjUzOjQwIC0wMDAwCTEuMQorKysg
a2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgJOCBBdWcgMjAwNSAxODowMjoyMiAtMDAwMApAQCAt
NTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9jc3Mv
Q1NTSW1wb3J0UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva2RvbS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpk
aWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCi0tLSBrZG9tL2Nzcy9D
U1NJbXBvcnRSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtkb20v
Y3NzL0NTU0ltcG9ydFJ1bGUuY3BwCTggQXVnIDIwMDUgMTg6MDI6MjIgLTAwMDAKQEAgLTM5LDcg
KzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIENTU0ltcG9y
dFJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqQ1NTSW1wb3J0UnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDoga2RvbS9j
c3MvQ1NTSW1wb3J0UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vY3NzL0NTU0ltcG9ydFJ1bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvQ1NTSW1wb3J0UnVsZS5oCi0tLSBrZG9tL2Nzcy9DU1NJ
bXBvcnRSdWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MCAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NT
U0ltcG9ydFJ1bGUuaAk4IEF1ZyAyMDA1IDE4OjAyOjIyIC0wMDAwCkBAIC01Niw3ICs1Niw3IEBA
IG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NNZWRpYVJ1bGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NT
U01lZGlhUnVsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4y
IGtkb20vY3NzL0NTU01lZGlhUnVsZS5jcHAKLS0tIGtkb20vY3NzL0NTU01lZGlhUnVsZS5jcHAJ
MjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NNZWRpYVJ1bGUu
Y3BwCTggQXVnIDIwMDUgMTg6MDI6MjMgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDU1NNZWRpYVJ1bGUiLCBD
U1NNZWRpYVJ1bGVQcm90bywgQ1NTTWVkaWFSdWxlUHJvdG9GdW5jKQogCi1WYWx1ZSBDU1NNZWRp
YVJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqQ1NTTWVkaWFSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC02MCw3ICs2MCw3
IEBAIFZhbHVlIENTU01lZGlhUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLVZhbHVlIENTU01lZGlhUnVsZVByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpD
U1NNZWRpYVJ1bGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKENTU01lZGlhUnVs
ZSkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTcwLDEyICs3MCwxMiBAQCBWYWx1ZSBDU1NNZWRpYVJ1
bGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0CiAJCWNhc2UgQ1NTTWVkaWFSdWxlQ29uc3RhbnRzOjpJ
bnNlcnRSdWxlOgogCQl7CiAJCQlET01TdHJpbmcgcnVsZSA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFy
Z3NbMF0pOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50MzIoZXhlYyk7
CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJCQly
ZXR1cm4gTnVtYmVyKG9iai5pbnNlcnRSdWxlKHJ1bGUsIGluZGV4KSk7CiAJCX0KIAkJY2FzZSBD
U1NNZWRpYVJ1bGVDb25zdGFudHM6OkRlbGV0ZVJ1bGU6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcg
aW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9
IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJb2JqLmRlbGV0ZVJ1bGUoaW5kZXgpOwogCQkJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrZG9tL2Nzcy9DU1NNZWRpYVJ1bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NNZWRp
YVJ1bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9j
c3MvQ1NTTWVkaWFSdWxlLmgKLS0tIGtkb20vY3NzL0NTU01lZGlhUnVsZS5oCTkgSnVsIDIwMDUg
MDY6NTM6NDAgLTAwMDAJMS4xCisrKyBrZG9tL2Nzcy9DU1NNZWRpYVJ1bGUuaAk4IEF1ZyAyMDA1
IDE4OjAyOjIzIC0wMDAwCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01f
R0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NQYWdlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTUGFnZVJ1bGUuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9DU1NQYWdlUnVsZS5jcHAK
LS0tIGtkb20vY3NzL0NTU1BhZ2VSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkx
LjIKKysrIGtkb20vY3NzL0NTU1BhZ2VSdWxlLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjIzIC0wMDAw
CkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1
ZSBDU1NQYWdlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpDU1NQYWdlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTQs
NyArNTQsNyBAQCBWYWx1ZSBDU1NQYWdlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjCiAJcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIENTU1BhZ2VSdWxlOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3Zv
aWQgQ1NTUGFnZVJ1bGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBr
ZG9tL2Nzcy9DU1NQYWdlUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20vY3NzL0NTU1BhZ2VSdWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL0NTU1BhZ2VSdWxlLmgKLS0tIGtkb20vY3NzL0NTU1Bh
Z2VSdWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1Bh
Z2VSdWxlLmgJOCBBdWcgMjAwNSAxODowMjoyMyAtMDAwMApAQCAtNTYsOCArNTYsOCBAQCBuYW1l
c3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9p
ZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CQkKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9p
ZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6
VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CQkKIAl9OwogfTsKIApJbmRleDoga2RvbS9jc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20vY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCi0t
LSBrZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAw
MDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJOCBBdWcgMjAwNSAxODow
MjoyMyAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9N
X0lNUExFTUVOVF9QUk9UT1RZUEUoIkNTU1ByaW1pdGl2ZVZhbHVlIiwgQ1NTUHJpbWl0aXZlVmFs
dWVQcm90bywgQ1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmMpCiAKLVZhbHVlIENTU1ByaW1pdGl2
ZVZhbHVlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqQ1NTUHJpbWl0aXZlVmFsdWU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNjYsNyArNjYsNyBA
QCBWYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0VmFsdWVQcm9wZXJ0CiAJcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1WYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZVByb3RvRnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1w
ICpDU1NQcmltaXRpdmVWYWx1ZVByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoQ1NT
UHJpbWl0aXZlVmFsdWUpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03NSwxOSArNzUsMTkgQEAgVmFs
dWUgQ1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmM6OmNhbGwoRQogCXsKIAkJY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZUNvbnN0YW50czo6U2V0RmxvYXRWYWx1ZToKIAkJewotCQkJdW5zaWduZWQgc2hv
cnQgdW5pdFR5cGUgPSBhcmdzWzBdLnRvVUludDE2KGV4ZWMpOwotCQkJZmxvYXQgZmxvYXRWYWx1
ZSA9IGFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9
IGFyZ3NbMF0tPnRvVUludDE2KGV4ZWMpOworCQkJZmxvYXQgZmxvYXRWYWx1ZSA9IGFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpOwogCQkJb2JqLnNldEZsb2F0VmFsdWUodW5pdFR5cGUsIGZsb2F0VmFs
dWUpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWVDb25zdGFudHM6OkdldEZsb2F0VmFsdWU6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IHVuaXRU
eXBlID0gYXJnc1swXS50b1VJbnQxNihleGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IHVuaXRUeXBl
ID0gYXJnc1swXS0+dG9VSW50MTYoZXhlYyk7CiAJCQlyZXR1cm4gTnVtYmVyKG9iai5nZXRGbG9h
dFZhbHVlKHVuaXRUeXBlKSk7CiAJCX0KIAkJY2FzZSBDU1NQcmltaXRpdmVWYWx1ZUNvbnN0YW50
czo6U2V0U3RyaW5nVmFsdWU6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IHN0cmluZ1R5cGUgPSBh
cmdzWzBdLnRvVUludDE2KGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgc3RyaW5nVHlwZSA9IGFy
Z3NbMF0tPnRvVUludDE2KGV4ZWMpOwogCQkJRE9NU3RyaW5nIHN0cmluZ1ZhbHVlID0gdG9ET01T
dHJpbmcoZXhlYywgYXJnc1sxXSk7CiAJCQlvYmouc2V0U3RyaW5nVmFsdWUoc3RyaW5nVHlwZSwg
c3RyaW5nVmFsdWUpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwpJbmRleDoga2RvbS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCi0tLSBrZG9tL2Nz
cy9DU1NQcmltaXRpdmVWYWx1ZS5oCTkgSnVsIDIwMDUgMDY6NTM6NDEgLTAwMDAJMS4xCisrKyBr
ZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCTggQXVnIDIwMDUgMTg6MDI6MjMgLTAwMDAKQEAg
LTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3Nz
L0NTU1J1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vY3NzL0NTU1J1bGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAt
cjEuMiBrZG9tL2Nzcy9DU1NSdWxlLmNwcAotLS0ga2RvbS9jc3MvQ1NTUnVsZS5jcHAJMjkgSnVs
IDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NSdWxlLmNwcAk4IEF1ZyAy
MDA1IDE4OjAyOjIzIC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7
CiBAZW5kCiAqLwogCi1WYWx1ZSBDU1NSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkNTU1J1bGU6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQog
CXsKQEAgLTYyLDcgKzYyLDcgQEAgVmFsdWUgQ1NTUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBDU1NSdWxlOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGlu
dCkKK3ZvaWQgQ1NTUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6
IGtkb20vY3NzL0NTU1J1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rZG9tL2Nzcy9DU1NSdWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtkb20vY3NzL0NTU1J1bGUuaAotLS0ga2RvbS9jc3MvQ1NTUnVsZS5oCTkgSnVs
IDIwMDUgMDY6NTM6NDEgLTAwMDAJMS4xCisrKyBrZG9tL2Nzcy9DU1NSdWxlLmgJOCBBdWcgMjAw
NSAxODowMjoyMyAtMDAwMApAQCAtNjIsOCArNjIsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9N
X0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZh
bHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIAogLy8gdGVtcGxhdGUgZm9yIGVhc2luZyBhc3Np
Z25pbmcgb2YgQ1NTUnVsZXMgdG8gZGVyaXZlZCBjbGFzc2VzLgpJbmRleDoga2RvbS9jc3MvQ1NT
UnVsZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vY3NzL0NTU1J1bGVMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAg
LXUgLXIxLjIga2RvbS9jc3MvQ1NTUnVsZUxpc3QuY3BwCi0tLSBrZG9tL2Nzcy9DU1NSdWxlTGlz
dC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NSdWxl
TGlzdC5jcHAJOCBBdWcgMjAwNSAxODowMjoyMyAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkNTU1J1bGVMaXN0
IiwgQ1NTUnVsZUxpc3RQcm90bywgQ1NTUnVsZUxpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIENTU1J1
bGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqQ1NTUnVsZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0
b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUsNyArNTUsNyBAQCBWYWx1
ZSBDU1NSdWxlTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjCiAJcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1WYWx1ZSBDU1NSdWxlTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpDU1NSdWxlTGlz
dFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoQ1NTUnVsZUxpc3QpCiAKQEAgLTYz
LDcgKzYzLDcgQEAgVmFsdWUgQ1NTUnVsZUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YQogCXsK
IAkJY2FzZSBDU1NSdWxlTGlzdENvbnN0YW50czo6SXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4
ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NQ1NTUnVsZShleGVj
LCBvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrZG9tL2Nzcy9DU1NS
dWxlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
Y3NzL0NTU1J1bGVMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vY3NzL0NTU1J1bGVMaXN0LmgKLS0tIGtkb20vY3NzL0NTU1J1bGVMaXN0LmgJOSBK
dWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1J1bGVMaXN0LmgJOCBB
dWcgMjAwNSAxODowMjoyMyAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgS0RPTQog
CXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
CmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKLS0tIGtk
b20vY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCTI5IEp1bCAyMDA1IDA2OjExOjE2IC0wMDAw
CTEuMgorKysga2RvbS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJOCBBdWcgMjAwNSAxODow
MjoyMyAtMDAwMApAQCAtNTIsNyArNTIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9N
X0lNUExFTUVOVF9QUk9UT1RZUEUoIkNTU1N0eWxlRGVjbGFyYXRpb24iLCBDU1NTdHlsZURlY2xh
cmF0aW9uUHJvdG8sIENTU1N0eWxlRGVjbGFyYXRpb25Qcm90b0Z1bmMpCiAKLVZhbHVlIENTU1N0
eWxlRGVjbGFyYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJ
ewpAQCAtNjksNyArNjksNyBAQCBWYWx1ZSBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRWYWx1ZVBy
b3BlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIENTU1N0eWxlRGVjbGFyYXRpb246
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
ICZ2YWx1ZSwgaW50KQordm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlL
RE9NX0VOVEVSX1NBRkUKIApAQCAtODUsNyArODUsNyBAQCB2b2lkIENTU1N0eWxlRGVjbGFyYXRp
b246OnB1dFZhbHVlUHJvcGVyCiAJS0RPTV9MRUFWRV9TQUZFKERPTUV4Y2VwdGlvbikKIH0KIAot
VmFsdWUgQ1NTU3R5bGVEZWNsYXJhdGlvblByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpDU1NTdHlsZURl
Y2xhcmF0aW9uUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhDU1NTdHlsZURlY2xh
cmF0aW9uKQogCUtET01fRU5URVJfU0FGRQpAQCAtMTIyLDcgKzEyMiw3IEBAIFZhbHVlIENTU1N0
eWxlRGVjbGFyYXRpb25Qcm90b0Z1bmM6OmNhbGwKIAkJfQogCQljYXNlIENTU1N0eWxlRGVjbGFy
YXRpb25Db25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdz
WzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRv
VUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTVN0cmluZyhvYmouaXRlbShpbmRleCkpOwog
CQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrZG9tL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
ZG9tL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKLS0tIGtkb20vY3NzL0NTU1N0eWxlRGVjbGFy
YXRpb24uaAk5IEp1bCAyMDA1IDA2OjUzOjQxIC0wMDAwCTEuMQorKysga2RvbS9jc3MvQ1NTU3R5
bGVEZWNsYXJhdGlvbi5oCTggQXVnIDIwMDUgMTg6MDI6MjMgLTAwMDAKQEAgLTcyLDggKzcyLDgg
QEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIH07CiAKSW5kZXg6IGtk
b20vY3NzL0NTU1N0eWxlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9jc3MvQ1NTU3R5bGVSdWxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAotLS0ga2RvbS9j
c3MvQ1NTU3R5bGVSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtk
b20vY3NzL0NTU1N0eWxlUnVsZS5jcHAJOCBBdWcgMjAwNSAxODowMjoyNCAtMDAwMApAQCAtNDAs
NyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgQ1NTU3R5
bGVSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKkNTU1N0eWxlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUsNyArNTUs
NyBAQCBWYWx1ZSBDU1NTdHlsZVJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi12b2lkIENTU1N0eWxlUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENT
U1N0eWxlUnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
VmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20v
Y3NzL0NTU1N0eWxlUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vY3NzL0NTU1N0eWxlUnVsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9DU1NTdHlsZVJ1bGUuaAotLS0ga2RvbS9jc3MvQ1NTU3R5
bGVSdWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1N0
eWxlUnVsZS5oCTggQXVnIDIwMDUgMTg6MDI6MjQgLTAwMDAKQEAgLTU1LDggKzU1LDggQEAgbmFt
ZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6
OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3Nz
L0NTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vY3NzL0NTU1N0eWxlU2hlZXQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIK
ZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAotLS0ga2RvbS9jc3Mv
Q1NTU3R5bGVTaGVldC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9t
L2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjI0IC0wMDAwCkBAIC00Nyw3
ICs0Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQ
RSgiQ1NTU3R5bGVTaGVldCIsIENTU1N0eWxlU2hlZXRQcm90bywgQ1NTU3R5bGVTaGVldFByb3Rv
RnVuYykKIAotVmFsdWUgQ1NTU3R5bGVTaGVldDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZVNoZWV0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0
b2tlbikKIAl7CkBAIC02Miw3ICs2Miw3IEBAIFZhbHVlIENTU1N0eWxlU2hlZXQ6OmdldFZhbHVl
UHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIENTU1N0eWxlU2hl
ZXRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqQ1NTU3R5bGVTaGVldFByb3RvRnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlL
RE9NX0NIRUNLX1RISVMoQ1NTU3R5bGVTaGVldCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTcyLDcg
KzcyLDcgQEAgVmFsdWUgQ1NTU3R5bGVTaGVldFByb3RvRnVuYzo6Y2FsbChFeGVjUwogCQljYXNl
IENTU1N0eWxlU2hlZXRDb25zdGFudHM6Okluc2VydFJ1bGU6CiAJCXsKIAkJCURPTVN0cmluZyBy
dWxlID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4
ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdz
WzFdLT50b1VJbnQzMihleGVjKTsKIAkJCW9iai5pbnNlcnRSdWxlKHJ1bGUsIGluZGV4KTsKIAkJ
CXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpJbmRleDoga2RvbS9jc3MvQ1NTU3R5bGVTaGVldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1N0
eWxlU2hlZXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2Rv
bS9jc3MvQ1NTU3R5bGVTaGVldC5oCi0tLSBrZG9tL2Nzcy9DU1NTdHlsZVNoZWV0LmgJOSBKdWwg
MjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1N0eWxlU2hlZXQuaAk4IEF1
ZyAyMDA1IDE4OjAyOjI0IC0wMDAwCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJ
CUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
CX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTVmFsdWUuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9DU1NWYWx1ZS5jcHAKLS0t
IGtkb20vY3NzL0NTU1ZhbHVlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysr
IGtkb20vY3NzL0NTU1ZhbHVlLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjI0IC0wMDAwCkBAIC0zOCw3
ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBDU1NWYWx1
ZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkNTU1ZhbHVlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTUzLDcgKzUzLDcgQEAgVmFsdWUgQ1NTVmFs
dWU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
dm9pZCBDU1NWYWx1ZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENTU1ZhbHVlOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsK
IAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9jc3MvQ1NTVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NWYWx1ZS5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9DU1NWYWx1ZS5o
Ci0tLSBrZG9tL2Nzcy9DU1NWYWx1ZS5oCTkgSnVsIDIwMDUgMDY6NTM6NDIgLTAwMDAJMS4xCisr
KyBrZG9tL2Nzcy9DU1NWYWx1ZS5oCTggQXVnIDIwMDUgMTg6MDI6MjQgLTAwMDAKQEAgLTYyLDgg
KzYyLDggQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fUFVU
CiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsJCQor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsJCQogCX07
CiAKIC8vIHRlbXBsYXRlIGZvciBlYXNpbmcgYXNzaWduaW5nIG9mIENTU1ZhbHVlcyB0byBkZXJp
dmVkIGNsYXNzZXMuCkluZGV4OiBrZG9tL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1ZhbHVlTGlzdC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0NTU1Zh
bHVlTGlzdC5jcHAKLS0tIGtkb20vY3NzL0NTU1ZhbHVlTGlzdC5jcHAJMjkgSnVsIDIwMDUgMDY6
MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCTggQXVnIDIwMDUg
MTg6MDI6MjQgLTAwMDAKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAog
S0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDU1NWYWx1ZUxpc3QiLCBDU1NWYWx1ZUxpc3RQcm90
bywgQ1NTVmFsdWVMaXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBDU1NWYWx1ZUxpc3Q6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpDU1NWYWx1
ZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsK
IAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTMsNyArNTMsNyBAQCBWYWx1ZSBDU1NWYWx1ZUxpc3Q6
OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBD
U1NWYWx1ZUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqQ1NTVmFsdWVMaXN0UHJvdG9GdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQogewogCUtET01fQ0hFQ0tfVEhJUyhDU1NWYWx1ZUxpc3QpCiAKQEAgLTYxLDcgKzYxLDcgQEAg
VmFsdWUgQ1NTVmFsdWVMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdAogCXsKIAkJY2FzZSBDU1NW
YWx1ZUxpc3RDb25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBh
cmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0t
PnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTUNTU1ZhbHVlKGV4ZWMsIG9iai5pdGVt
KGluZGV4KSk7CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtkb20vY3NzL0NTU1ZhbHVlTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1Zh
bHVlTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9t
L2Nzcy9DU1NWYWx1ZUxpc3QuaAotLS0ga2RvbS9jc3MvQ1NTVmFsdWVMaXN0LmgJOSBKdWwgMjAw
NSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1ZhbHVlTGlzdC5oCTggQXVnIDIw
MDUgMTg6MDI6MjQgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEtET00KIAkJS0RP
TV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IH07CiAKSW5kZXg6IGtkb20vY3NzL0NvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NvdW50ZXIuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9Db3VudGVyLmNwcAotLS0ga2RvbS9j
c3MvQ291bnRlci5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nz
cy9Db3VudGVyLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjI0IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBDb3VudGVyOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqQ291bnRl
cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3
aXRjaCh0b2tlbikKIAl7CkluZGV4OiBrZG9tL2Nzcy9Db3VudGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ291bnRlci5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9Db3VudGVyLmgKLS0tIGtk
b20vY3NzL0NvdW50ZXIuaAk5IEp1bCAyMDA1IDA2OjUzOjQyIC0wMDAwCTEuMQorKysga2RvbS9j
c3MvQ291bnRlci5oCTggQXVnIDIwMDUgMTg6MDI6MjQgLTAwMDAKQEAgLTU2LDcgKzU2LDcgQEAg
bmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dF
VAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2Rv
bS9jc3MvRG9jdW1lbnRTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0RvY3VtZW50U3R5bGUuY3BwCi0tLSBrZG9t
L2Nzcy9Eb2N1bWVudFN0eWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysr
IGtkb20vY3NzL0RvY3VtZW50U3R5bGUuY3BwCTggQXVnIDIwMDUgMTg6MDI6MjQgLTAwMDAKQEAg
LTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIERv
Y3VtZW50U3R5bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRTdHlsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDog
a2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tkb20vY3NzL0RvY3VtZW50U3R5bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5oCi0tLSBrZG9tL2Nz
cy9Eb2N1bWVudFN0eWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20v
Y3NzL0RvY3VtZW50U3R5bGUuaAk4IEF1ZyAyMDA1IDE4OjAyOjI0IC0wMDAwCkBAIC01NCw3ICs1
NCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJ
S0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07
CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9NZWRpYUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL01lZGlhTGlzdC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL01lZGlhTGlzdC5jcHAKLS0t
IGtkb20vY3NzL01lZGlhTGlzdC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisr
KyBrZG9tL2Nzcy9NZWRpYUxpc3QuY3BwCTggQXVnIDIwMDUgMTg6MDI6MjQgLTAwMDAKQEAgLTQ2
LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9U
WVBFKCJNZWRpYUxpc3QiLCBNZWRpYUxpc3RQcm90bywgTWVkaWFMaXN0UHJvdG9GdW5jKQogCi1W
YWx1ZSBNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNjEsNyArNjEsNyBA
QCBWYWx1ZSBNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0CiAJcmV0dXJuIFVuZGVm
aW5lZCgpOwogfTsKIAotdm9pZCBNZWRpYUxpc3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBNZWRpYUxp
c3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1w
ICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03Nyw3ICs3Nyw3IEBAIHZv
aWQgTWVkaWFMaXN0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlLRE9NX0xFQVZFX1NBRkUo
RE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBNZWRpYUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAq
TWVkaWFMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhNZWRpYUxpc3QpCiAJ
S0RPTV9FTlRFUl9TQUZFCkBAIC04Niw3ICs4Niw3IEBAIFZhbHVlIE1lZGlhTGlzdFByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUKIAl7CiAJCWNhc2UgTWVkaWFMaXN0Q29uc3RhbnRzOjpJdGVtOgog
CQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJ
CXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVy
biBnZXRET01TdHJpbmcob2JqLml0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIE1lZGlhTGlzdENv
bnN0YW50czo6RGVsZXRlTWVkaXVtOgpJbmRleDoga2RvbS9jc3MvTWVkaWFMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvTWVkaWFMaXN0Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL01lZGlh
TGlzdC5oCi0tLSBrZG9tL2Nzcy9NZWRpYUxpc3QuaAk5IEp1bCAyMDA1IDA2OjUzOjQyIC0wMDAw
CTEuMQorKysga2RvbS9jc3MvTWVkaWFMaXN0LmgJOCBBdWcgMjAwNSAxODowMjoyNCAtMDAwMApA
QCAtNjEsOCArNjEsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CQkKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CQkKIAl9Owog
fTsKIApJbmRleDoga2RvbS9jc3MvUkdCQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL1JHQkNvbG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvUkdCQ29sb3IuY3BwCi0tLSBrZG9t
L2Nzcy9SR0JDb2xvci5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9t
L2Nzcy9SR0JDb2xvci5jcHAJOCBBdWcgMjAwNSAxODowMjoyNCAtMDAwMApAQCAtNDIsNyArNDIs
NyBAQCBuYW1lc3BhY2UgS0RPTQogQGVuZAogKi8KIAotVmFsdWUgUkdCQ29sb3I6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqUkdC
Q29sb3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtkb20vY3NzL1JHQkNvbG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvUkdCQ29sb3IuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvUkdCQ29s
b3IuaAotLS0ga2RvbS9jc3MvUkdCQ29sb3IuaAk5IEp1bCAyMDA1IDA2OjUzOjQyIC0wMDAwCTEu
MQorKysga2RvbS9jc3MvUkdCQ29sb3IuaAk4IEF1ZyAyMDA1IDE4OjAyOjI0IC0wMDAwCkBAIC01
OCw3ICs1OCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rp
b24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07
CiAKSW5kZXg6IGtkb20vY3NzL1JlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tkb20vY3NzL1JlY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIK
ZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9SZWN0LmNwcAotLS0ga2RvbS9jc3MvUmVjdC5jcHAJ
MjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9SZWN0LmNwcAk4IEF1
ZyAyMDA1IDE4OjAyOjI0IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBLRE9NCiBA
ZW5kCiAqLwogCi1LSlM6OlZhbHVlIFJlY3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitLSlM6OlZhbHVlSW1wICpSZWN0OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikK
IAl7CkluZGV4OiBrZG9tL2Nzcy9SZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva2RvbS9jc3MvUmVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9SZWN0LmgKLS0tIGtkb20vY3NzL1JlY3QuaAk5IEp1bCAy
MDA1IDA2OjUzOjQyIC0wMDAwCTEuMQorKysga2RvbS9jc3MvUmVjdC5oCTggQXVnIDIwMDUgMTg6
MDI6MjUgLTAwMDAKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8v
IEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9jc3MvU3R5bGVTaGVldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvU3R5bGVTaGVldC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL1N0
eWxlU2hlZXQuY3BwCi0tLSBrZG9tL2Nzcy9TdHlsZVNoZWV0LmNwcAkyOSBKdWwgMjAwNSAwNjox
MToxNiAtMDAwMAkxLjIKKysrIGtkb20vY3NzL1N0eWxlU2hlZXQuY3BwCTggQXVnIDIwMDUgMTg6
MDI6MjUgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQK
ICovCiAKLVZhbHVlIFN0eWxlU2hlZXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU3R5bGVTaGVldDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJ
ewpAQCAtNjgsMTIgKzY4LDEyIEBAIFZhbHVlIFN0eWxlU2hlZXQ6OmdldFZhbHVlUHJvcGVydHko
RXhlY1MKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9OwogCi12b2lkIFN0eWxlU2hlZXQ6OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1
ZSwgaW50KQordm9pZCBTdHlsZVNoZWV0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJ
ewogCQljYXNlIFN0eWxlU2hlZXRDb25zdGFudHM6OkRpc2FibGVkOgotCQkJc2V0RGlzYWJsZWQo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKwkJCXNldERpc2FibGVkKHZhbHVlLT50b0Jvb2xlYW4o
ZXhlYykpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlrZFdhcm5pbmcoKSA8PCAiVW5oYW5k
bGVkIHRva2VuIGluICIgPDwga19mdW5jaW5mbyA8PCAiIDogIiA8PCB0b2tlbiA8PCBlbmRsOwpJ
bmRleDoga2RvbS9jc3MvU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tkb20vY3NzL1N0eWxlU2hlZXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvU3R5bGVTaGVldC5oCi0tLSBrZG9tL2Nzcy9T
dHlsZVNoZWV0LmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20vY3NzL1N0
eWxlU2hlZXQuaAk4IEF1ZyAyMDA1IDE4OjAyOjI1IC0wMDAwCkBAIC02Nyw4ICs2Nyw4IEBAIG5h
bWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CQkKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CQkKIAl9OwogfTsKIApJbmRl
eDoga2RvbS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvU3R5bGVTaGVldExpc3QuY3Bw
Ci0tLSBrZG9tL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAw
MDAJMS4yCisrKyBrZG9tL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJOCBBdWcgMjAwNSAxODowMjoy
NSAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lN
UExFTUVOVF9QUk9UT1RZUEUoIlN0eWxlU2hlZXRMaXN0IiwgU3R5bGVTaGVldExpc3RQcm90bywg
U3R5bGVTaGVldExpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIFN0eWxlU2hlZXRMaXN0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU3R5bGVT
aGVldExpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QK
IHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUsNyArNTUsNyBAQCBWYWx1ZSBTdHlsZVNoZWV0
TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1
ZSBTdHlsZVNoZWV0TGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTdHlsZVNoZWV0TGlzdFByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoU3R5bGVTaGVldExpc3QpCiAKQEAgLTYzLDcg
KzYzLDcgQEAgVmFsdWUgU3R5bGVTaGVldExpc3RQcm90b0Z1bmM6OmNhbGwoRXhlYwogCXsKIAkJ
Y2FzZSBTdHlsZVNoZWV0TGlzdENvbnN0YW50czo6SXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4
ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gc2FmZV9jYWNoZTxTdHlsZVNo
ZWV0PihleGVjLCBvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrZG9t
L2Nzcy9TdHlsZVNoZWV0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmgKLS0tIGtkb20vY3Nz
L1N0eWxlU2hlZXRMaXN0LmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20v
Y3NzL1N0eWxlU2hlZXRMaXN0LmgJOCBBdWcgMjAwNSAxODowMjoyNSAtMDAwMApAQCAtNTUsNyAr
NTUsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJ
CUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCklu
ZGV4OiBrZG9tL2RhdGEvZ2VuZXJhdGVkZGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9kYXRhL2dlbmVyYXRlZGRhdGEuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2RhdGEvZ2VuZXJhdGVkZGF0YS5j
cHAKLS0tIGtkb20vZGF0YS9nZW5lcmF0ZWRkYXRhLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjU3IC0w
MDAwCTEuMQorKysga2RvbS9kYXRhL2dlbmVyYXRlZGRhdGEuY3BwCTggQXVnIDIwMDUgMTg6MDI6
MjggLTAwMDAKQEAgLTI4OCw3ICsyODgsNyBAQCBib29sIEFic3RyYWN0Vmlldzo6aGFzUHJvcGVy
dHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBBYnN0cmFjdFZpZXc6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQWJzdHJhY3RWaWV3OjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxBYnN0
cmFjdFZpZXc+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTMwMywxNiArMzAz
LDE2IEBAIEFic3RyYWN0VmlldyBLRE9NOjp0b0Fic3RyYWN0VmlldyhLSlM6OkUKICAgICByZXR1
cm4gQWJzdHJhY3RWaWV3OjpudWxsOwogfQogCi1WYWx1ZSBBYnN0cmFjdFZpZXc6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQWJzdHJhY3RWaWV3OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9V
TlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1P
YmplY3QgQWJzdHJhY3RWaWV3Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVj
dEltcCAqQWJzdHJhY3RWaWV3Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBl
KCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4g
TlVMTDsKIH0KIAogT2JqZWN0SW1wICpBYnN0cmFjdFZpZXc6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtMzIwLDcgKzMyMCw3IEBAIE9iamVjdEltcCAqQWJzdHJhY3RWaWV3Ojpicmlk
Z2UoRXhlY1N0YXQKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxBYnN0cmFjdFZpZXc+KHAxLHN0
YXRpY19jYXN0PEFic3RyYWN0Vmlldzo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEFic3Ry
YWN0Vmlldzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpBYnN0cmFjdFZp
ZXc6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2Jq
ZWN0PEFic3RyYWN0Vmlldz4ocDEsc3RhdGljX2Nhc3Q8QWJzdHJhY3RWaWV3OjpQcml2YXRlICo+
KGQpKTsKIH0KQEAgLTMzMyw3ICszMzMsNyBAQCBib29sIEF0dHI6Omhhc1Byb3BlcnR5KEV4ZWNT
dGF0ZSAqcDEsY29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBBdHRyOjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkF0dHI6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPEF0dHI+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KQEAgLTM0Niw3ICszNDYsNyBAQCBBdHRyIEtET006OnRvQXR0cihL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgCiAgICAgcmV0dXJuIEF0dHI6Om51bGw7CiB9CiAKLVZhbHVl
IEF0dHI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQXR0
cjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihOb2RlOjpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBOb2RlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKQEAgLTM2NiwxMCArMzY2LDEwIEBAIGJvb2wgQXR0cjo6cHV0SW5QYXJl
bnRzKFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBBdHRy
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQXR0cjo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQXR0
cjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNzcsNyArMzc3LDcgQEAgT2JqZWN0
SW1wICpBdHRyOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgYwogICAgIHJldHVybiBuZXcgRE9NUldC
cmlkZ2U8QXR0cj4ocDEsc3RhdGljX2Nhc3Q8QXR0cjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZh
bHVlIEF0dHI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqQXR0cjo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8QXR0
cj4ocDEsc3RhdGljX2Nhc3Q8QXR0cjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zOTAsMTIgKzM5
MCwxMiBAQCBib29sIENTU0NoYXJzZXRSdWxlOjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDU1NDaGFyc2V0UnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpDU1NDaGFyc2V0UnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Q1NTQ2hhcnNldFJ1bGU+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgQ1NTQ2hhcnNldFJ1bGU6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTQ2hhcnNldFJ1bGU6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoQ1NTUnVsZTo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gQ1NTUnVsZTo6Z2V0KHAxLHAyLHAzKTsKICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00MTUsMTAgKzQxNSwxMCBAQCBib29sIENTU0NoYXJzZXRS
dWxlOjpwdXRJblBhcmVudHMoUFVUX01FCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
Q1NTQ2hhcnNldFJ1bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpDU1NDaGFyc2V0UnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgp
OwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTQ2hhcnNldFJ1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtNDI2LDcgKzQyNiw3IEBAIE9iamVjdEltcCAqQ1NTQ2hhcnNldFJ1bGU6OmJy
aWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU0NoYXJzZXRSdWxlPihw
MSxzdGF0aWNfY2FzdDxDU1NDaGFyc2V0UnVsZTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVl
IENTU0NoYXJzZXRSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNT
U0NoYXJzZXRSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBj
YWNoZURPTU9iamVjdDxDU1NDaGFyc2V0UnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1
bGU6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNDM5LDEyICs0MzksMTIgQEAgYm9vbCBDU1NGb250
RmFjZVJ1bGU6Omhhc1Byb3BlcnR5KEV4ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgQ1NTRm9udEZhY2VSdWxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KkNTU0ZvbnRGYWNlUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1
cm4gbG9va3VwR2V0VmFsdWU8Q1NTRm9udEZhY2VSdWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CiAKLVZhbHVlIENTU0ZvbnRGYWNlUnVsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NGb250RmFjZVJ1bGU6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoQ1NTUnVsZTo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gQ1NTUnVsZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CkBAIC00NjQsMTAgKzQ2NCwxMCBAQCBib29sIENTU0ZvbnRGYWNlUnVsZTo6cHV0SW5QYXJl
bnRzKFBVVF9NCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgQ1NTRm9udEZhY2VSdWxl
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTRm9udEZhY2VS
dWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpDU1NGb250RmFjZVJ1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
NDc1LDcgKzQ3NSw3IEBAIE9iamVjdEltcCAqQ1NTRm9udEZhY2VSdWxlOjpicmlkZ2UoRXhlY1MK
ICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU0ZvbnRGYWNlUnVsZT4ocDEsc3RhdGljX2Nh
c3Q8Q1NTRm9udEZhY2VSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTRm9udEZh
Y2VSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU0ZvbnRGYWNl
UnVsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01P
YmplY3Q8Q1NTRm9udEZhY2VSdWxlPihwMSxzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGU6OlBy
aXZhdGUgKj4oZCkpOwogfQpAQCAtNDg4LDEyICs0ODgsMTIgQEAgYm9vbCBDU1NJbXBvcnRSdWxl
OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgQ1NT
SW1wb3J0UnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NJbXBv
cnRSdWxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBH
ZXRWYWx1ZTxDU1NJbXBvcnRSdWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAK
LVZhbHVlIENTU0ltcG9ydFJ1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqQ1NTSW1wb3J0UnVsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICBpZihDU1NSdWxlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBDU1NS
dWxlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTUxMywxMCAr
NTEzLDEwIEBAIGJvb2wgQ1NTSW1wb3J0UnVsZTo6cHV0SW5QYXJlbnRzKFBVVF9NRVQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBDU1NJbXBvcnRSdWxlOjpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTSW1wb3J0UnVsZTo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTSW1wb3J0UnVs
ZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01MjQsNyArNTI0LDcgQEAgT2JqZWN0
SW1wICpDU1NJbXBvcnRSdWxlOjpicmlkZ2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcgRE9NUldC
cmlkZ2U8Q1NTSW1wb3J0UnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZTo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIENTU0ltcG9ydFJ1bGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqQ1NTSW1wb3J0UnVsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTSW1wb3J0UnVsZT4ocDEsc3RhdGlj
X2Nhc3Q8Q1NTSW1wb3J0UnVsZTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01MzMsMTMgKzUzMywx
MyBAQCBib29sIENTU01lZGlhUnVsZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiB7CiAgICAgY29u
c3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkNTU01lZGlhUnVsZTo6c19oYXNo
VGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IENT
U01lZGlhUnVsZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDU1NNZWRpYVJ1bGVQcm90
bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRy
dWU7CiAgICAgaWYoQ1NTUnVsZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENTU01lZGlhUnVsZTo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NNZWRpYVJ1bGU6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxDU1NNZWRpYVJ1bGVQcm90b0Z1bmMsQ1NT
TWVkaWFSdWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC01NjIsMTAgKzU2
MiwxMCBAQCBDU1NNZWRpYVJ1bGUgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpCiAJUV9VTlVT
RUQocDEpOyByZXR1cm4gQ1NTTWVkaWFSdWxlOjpudWxsOwogfQogCi1WYWx1ZSBDU1NNZWRpYVJ1
bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTTWVk
aWFSdWxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVj
dCBwcm90byA9IENTU01lZGlhUnVsZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAq
cHJvdG8gPSBDU1NNZWRpYVJ1bGVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKENTU1J1bGU6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENTU1J1bGU6OmdldChwMSxwMixwMyk7CiAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtNTg0LDEwICs1ODQsMTAgQEAgYm9vbCBDU1NNZWRp
YVJ1bGU6OnB1dEluUGFyZW50cyhQVVRfTUVUSAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2Jq
ZWN0IENTU01lZGlhUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJ
bXAgKkNTU01lZGlhUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBDU1NNZWRpYVJ1bGVQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9i
amVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0
SW1wICpDU1NNZWRpYVJ1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTk1LDcg
KzU5NSw3IEBAIE9iamVjdEltcCAqQ1NTTWVkaWFSdWxlOjpicmlkZ2UoRXhlY1N0YXQKICAgICBy
ZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU01lZGlhUnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTTWVk
aWFSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTTWVkaWFSdWxlOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU01lZGlhUnVsZTo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTTWVkaWFSdWxl
PihwMSxzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGU6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNjA4
LDEyICs2MDgsMTIgQEAgYm9vbCBDU1NQYWdlUnVsZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlIAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgQ1NTUGFnZVJ1bGU6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTUGFnZVJ1bGU6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPENTU1BhZ2VSdWxlPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIENTU1BhZ2VSdWxlOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1BhZ2VSdWxlOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKENTU1J1bGU6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIENTU1J1bGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwpAQCAtNjMzLDEwICs2MzMsMTAgQEAgYm9vbCBDU1NQYWdlUnVsZTo6cHV0SW5Q
YXJlbnRzKFBVVF9NRVRITwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IENTU1BhZ2VS
dWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTUGFnZVJ1
bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
cDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKkNTU1BhZ2VSdWxlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTY0NCw3
ICs2NDQsNyBAQCBPYmplY3RJbXAgKkNTU1BhZ2VSdWxlOjpicmlkZ2UoRXhlY1N0YXRlCiAgICAg
cmV0dXJuIG5ldyBET01SV0JyaWRnZTxDU1NQYWdlUnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTUGFn
ZVJ1bGU6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NQYWdlUnVsZTo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpDU1NQYWdlUnVsZTo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTUGFnZVJ1bGU+KHAx
LHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTY1MywxMyAr
NjUzLDEzIEBAIGJvb2wgQ1NTUHJpbWl0aXZlVmFsdWU6Omhhc1Byb3BlcnR5KEV4ZWMKIHsKICAg
ICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmQ1NTUHJpbWl0aXZlVmFs
dWU6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3Qg
cHJvdG8gPSBDU1NQcmltaXRpdmVWYWx1ZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBD
U1NQcmltaXRpdmVWYWx1ZVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihDU1NWYWx1ZTo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENTU1ByaW1p
dGl2ZVZhbHVlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1ByaW1p
dGl2ZVZhbHVlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29r
dXBHZXQ8Q1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmMsQ1NTUHJpbWl0aXZlVmFsdWU+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTY4MiwxMCArNjgyLDEwIEBAIENTU1ByaW1p
dGl2ZVZhbHVlIEtET006OkVjbWFJbnRlcmZhY2U6OmkKIAlRX1VOVVNFRChwMSk7IHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6bnVsbDsKIH0KIAotVmFsdWUgQ1NTUHJpbWl0aXZlVmFsdWU6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTUHJpbWl0aXZl
VmFsdWU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0
IHByb3RvID0gQ1NTUHJpbWl0aXZlVmFsdWVQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gQ1NTUHJpbWl0aXZlVmFsdWVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJv
dG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlm
KENTU1ZhbHVlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBDU1NWYWx1ZTo6Z2V0KHAxLHAy
LHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC03MDQsMTAgKzcwNCwxMCBAQCBi
b29sIENTU1ByaW1pdGl2ZVZhbHVlOjpwdXRJblBhcmVudHMoUFVUCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1PYmplY3QgQ1NTUHJpbWl0aXZlVmFsdWU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpDU1NQcmltaXRpdmVWYWx1ZTo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZVByb3Rv
OjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkNTU1ByaW1pdGl2ZVZhbHVlOjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTcxNSw3ICs3MTUsNyBAQCBPYmplY3RJbXAgKkNTU1By
aW1pdGl2ZVZhbHVlOjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxDU1NQ
cmltaXRpdmVWYWx1ZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlByaXZhdGUg
Kj4oZCkpOwogfQogCi1WYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK1ZhbHVlSW1wICpDU1NQcmltaXRpdmVWYWx1ZTo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHAxLHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTcyOCwxMiArNzI4LDEyIEBAIGJvb2wgQ1NTUnVsZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpw
MSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENTU1J1bGU6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Q1NTUnVsZT4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBDU1NSdWxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1J1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VE
KHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC03NTAsMTAgKzc1MCwxMCBAQCBib29s
IENTU1J1bGU6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgQ1NTUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmpl
Y3RJbXAgKkNTU1J1bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKkNTU1J1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtNzYxLDcgKzc2MSw3IEBAIE9iamVjdEltcCAqQ1NTUnVsZTo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU1J1bGU+KHAxLHN0YXRpY19jYXN0PENT
U1J1bGU6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NSdWxlOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU1J1bGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU1J1bGU+KHAxLHN0YXRpY19jYXN0
PENTU1J1bGU6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNzcwLDE1ICs3NzAsMTUgQEAgYm9vbCBD
U1NSdWxlTGlzdDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlIAogewogICAgIGNvbnN0IEhhc2hFbnRy
eSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZDU1NSdWxlTGlzdDo6c19oYXNoVGFibGUscDIpOwog
ICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IENTU1J1bGVMaXN0UHJv
dG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRy
dWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IENTU1J1bGVMaXN0UHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGJvb2wg
b2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsKICAgICBpZihv
ayAmJiBpIDwgbGVuZ3RoKCkpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgQ1NTUnVsZUxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
Q1NTUnVsZUxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgYm9vbCBvazsK
ICAgICB1bnNpZ25lZCBpbnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwpAQCAtODA0LDE4ICs4
MDQsMTggQEAgQ1NTUnVsZUxpc3QgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdAogCVFfVU5V
U0VEKHAxKTsgcmV0dXJuIENTU1J1bGVMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBDU1NSdWxlTGlz
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NSdWxl
TGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3Qg
cHJvdG8gPSBDU1NSdWxlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBDU1NSdWxlTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwog
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IENTU1J1bGVMaXN0Ojpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTUnVsZUxpc3Q6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gQ1NTUnVsZUxpc3RQ
cm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpDU1NSdWxlTGlzdDo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC04MjMsNyArODIzLDcgQEAgT2JqZWN0SW1wICpDU1NSdWxl
TGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPENTU1J1bGVM
aXN0PihwMSxzdGF0aWNfY2FzdDxDU1NSdWxlTGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZh
bHVlIENTU1J1bGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNT
U1J1bGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNo
ZURPTU9iamVjdDxDU1NSdWxlTGlzdD4ocDEsc3RhdGljX2Nhc3Q8Q1NTUnVsZUxpc3Q6OlByaXZh
dGUgKj4oZCkpOwogfQpAQCAtODMyLDE1ICs4MzIsMTUgQEAgYm9vbCBDU1NTdHlsZURlY2xhcmF0
aW9uOjpoYXNQcm9wZXJ0eShFeAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZDU1NTdHlsZURlY2xhcmF0aW9uOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYo
ZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gQ1NTU3R5bGVEZWNsYXJhdGlvblBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0
cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDU1NTdHlsZURlY2xhcmF0aW9uUHJvdG86OnNl
bGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwog
ICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsK
ICAgICBpZihvayAmJiBpIDwgbGVuZ3RoKCkpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5
SW5kZXgoJm9rKTsKQEAgLTg2NiwxMCArODY2LDEwIEBAIENTU1N0eWxlRGVjbGFyYXRpb24gS0RP
TTo6RWNtYUludGVyZmFjZToKIAlRX1VOVVNFRChwMSk7IHJldHVybiBDU1NTdHlsZURlY2xhcmF0
aW9uOjpudWxsOwogfQogCi1WYWx1ZSBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1N0eWxlRGVjbGFyYXRpb246Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0g
Q1NTU3R5bGVEZWNsYXJhdGlvblByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBDU1NTdHlsZURlY2xhcmF0aW9uUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNF
RChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtODg1LDEwICs4ODUsMTAgQEAg
Ym9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjpwdXRJblBhcmVudHMoUAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotT2JqZWN0IENTU1N0eWxlRGVjbGFyYXRpb246OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpDU1NTdHlsZURlY2xhcmF0aW9uOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIENTU1N0eWxlRGVjbGFyYXRp
b25Qcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpDU1NTdHlsZURlY2xhcmF0aW9u
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTg5Niw3ICs4OTYsNyBAQCBPYmplY3RJ
bXAgKkNTU1N0eWxlRGVjbGFyYXRpb246OmJyaWRnZShFCiAgICAgcmV0dXJuIG5ldyBET01SV0Jy
aWRnZTxDU1NTdHlsZURlY2xhcmF0aW9uPihwMSxzdGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0
aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZURlY2xhcmF0aW9uOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxD
U1NTdHlsZURlY2xhcmF0aW9uPihwMSxzdGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0aW9uOjpQ
cml2YXRlICo+KGQpKTsKIH0KQEAgLTkwOSwxMiArOTA5LDEyIEBAIGJvb2wgQ1NTU3R5bGVSdWxl
OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENT
U1N0eWxlUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHls
ZVJ1bGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdl
dFZhbHVlPENTU1N0eWxlUnVsZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1W
YWx1ZSBDU1NTdHlsZVJ1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqQ1NTU3R5bGVSdWxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIGlmKENTU1J1bGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENTU1J1bGU6
OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtOTM0LDEwICs5MzQs
MTAgQEAgYm9vbCBDU1NTdHlsZVJ1bGU6OnB1dEluUGFyZW50cyhQVVRfTUVUSAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotT2JqZWN0IENTU1N0eWxlUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKkNTU1N0eWxlUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRp
bk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwo
KSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTU3R5bGVSdWxlOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTk0NSw3ICs5NDUsNyBAQCBPYmplY3RJbXAgKkNT
U1N0eWxlUnVsZTo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxD
U1NTdHlsZVJ1bGU+KHAxLHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZTo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIENTU1N0eWxlUnVsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1Zh
bHVlSW1wICpDU1NTdHlsZVJ1bGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU1N0eWxlUnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTk1NCwxMyArOTU0LDEzIEBAIGJvb2wgQ1NT
U3R5bGVTaGVldDo6aGFzUHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkg
KmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmQ1NTU3R5bGVTaGVldDo6c19oYXNoVGFibGUscDIpOwog
ICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IENTU1N0eWxlU2hlZXRQ
cm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gQ1NTU3R5bGVTaGVldFByb3RvOjpzZWxmKHAx
KTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBp
ZihTdHlsZVNoZWV0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotVmFsdWUgQ1NTU3R5bGVTaGVldDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZVNoZWV0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBsb29rdXBHZXQ8Q1NTU3R5bGVTaGVldFByb3RvRnVuYyxDU1NTdHls
ZVNoZWV0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC05ODMsMTAgKzk4Mywx
MCBAQCBDU1NTdHlsZVNoZWV0IEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVyCiAJUV9VTlVTRUQo
cDEpOyByZXR1cm4gQ1NTU3R5bGVTaGVldDo6bnVsbDsKIH0KIAotVmFsdWUgQ1NTU3R5bGVTaGVl
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHls
ZVNoZWV0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVj
dCBwcm90byA9IENTU1N0eWxlU2hlZXRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gQ1NTU3R5bGVTaGVldFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoU3R5bGVT
aGVldDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU3R5bGVTaGVldDo6Z2V0KHAxLHAyLHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0xMDA1LDEwICsxMDA1LDEwIEBAIGJv
b2wgQ1NTU3R5bGVTaGVldDo6cHV0SW5QYXJlbnRzKFBVVF9NRVQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU9iamVjdCBDU1NTdHlsZVNoZWV0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqQ1NTU3R5bGVTaGVldDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBDU1NTdHlsZVNoZWV0UHJvdG86OnNlbGYocDEpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqQ1NTU3R5bGVTaGVldDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CkBAIC0xMDE2LDcgKzEwMTYsNyBAQCBPYmplY3RJbXAgKkNTU1N0eWxlU2hlZXQ6OmJyaWRn
ZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxDU1NTdHlsZVNoZWV0PihwMSxz
dGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NT
U3R5bGVTaGVldDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHls
ZVNoZWV0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURP
TU9iamVjdDxDU1NTdHlsZVNoZWV0PihwMSxzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0OjpQcml2
YXRlICo+KGQpKTsKIH0KQEAgLTEwMjksMTIgKzEwMjksMTIgQEAgYm9vbCBDU1NWYWx1ZTo6aGFz
UHJvcGVydHkoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgQ1NT
VmFsdWU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTVmFsdWU6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPENT
U1ZhbHVlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIENTU1ZhbHVl
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1ZhbHVl
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAx
KTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpA
QCAtMTA1MSwxMCArMTA1MSwxMCBAQCBib29sIENTU1ZhbHVlOjpwdXRJblBhcmVudHMoUFVUX01F
VEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgQ1NTVmFsdWU6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpDU1NWYWx1ZTo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTVmFsdWU6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTA2Miw3ICsxMDYyLDcgQEAgT2JqZWN0
SW1wICpDU1NWYWx1ZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgRE9NUldC
cmlkZ2U8Q1NTVmFsdWU+KHAxLHN0YXRpY19jYXN0PENTU1ZhbHVlOjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgQ1NTVmFsdWU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqQ1NTVmFsdWU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNh
Y2hlRE9NT2JqZWN0PENTU1ZhbHVlPihwMSxzdGF0aWNfY2FzdDxDU1NWYWx1ZTo6UHJpdmF0ZSAq
PihkKSk7CiB9CkBAIC0xMDcxLDggKzEwNzEsOCBAQCBib29sIENTU1ZhbHVlTGlzdDo6aGFzUHJv
cGVydHkoRXhlY1N0YXRlCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5k
RW50cnkoJkNTU1ZhbHVlTGlzdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0
cnVlOwotICAgIE9iamVjdCBwcm90byA9IENTU1ZhbHVlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAg
ICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdElt
cCAqcHJvdG8gPSBDU1NWYWx1ZUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoQ1NTVmFsdWU6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBpbnQg
aSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwpAQCAtMTA4MCw3ICsxMDgwLDcgQEAgYm9vbCBDU1NW
YWx1ZUxpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgQ1NTVmFsdWVMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KkNTU1ZhbHVlTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBib29sIG9r
OwogICAgIHVuc2lnbmVkIGludCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7CkBAIC0xMTA2LDEw
ICsxMTA2LDEwIEBAIENTU1ZhbHVlTGlzdCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcmkKIAlR
X1VOVVNFRChwMSk7IHJldHVybiBDU1NWYWx1ZUxpc3Q6Om51bGw7CiB9CiAKLVZhbHVlIENTU1Zh
bHVlTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpD
U1NWYWx1ZUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAg
T2JqZWN0IHByb3RvID0gQ1NTVmFsdWVMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3Rv
Lmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IENTU1ZhbHVlTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoQ1NT
VmFsdWU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENTU1ZhbHVlOjpnZXQocDEscDIscDMp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAgLTExMjgsMTAgKzExMjgsMTAgQEAgYm9v
bCBDU1NWYWx1ZUxpc3Q6OnB1dEluUGFyZW50cyhQVVRfTUVUSAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotT2JqZWN0IENTU1ZhbHVlTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKkNTU1ZhbHVlTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBDU1NWYWx1ZUxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpDU1NWYWx1ZUxpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtMTEzOSw3ICsxMTM5LDcgQEAgT2JqZWN0SW1wICpDU1NWYWx1ZUxpc3Q6OmJyaWRnZShFeGVj
U3RhdAogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8Q1NTVmFsdWVMaXN0PihwMSxzdGF0aWNf
Y2FzdDxDU1NWYWx1ZUxpc3Q6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NWYWx1ZUxp
c3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqQ1NTVmFsdWVMaXN0Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxD
U1NWYWx1ZUxpc3Q+KHAxLHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdDo6UHJpdmF0ZSAqPihkKSk7
CiB9CkBAIC0xMTQ4LDEzICsxMTQ4LDEzIEBAIGJvb2wgQ2hhcmFjdGVyRGF0YTo6aGFzUHJvcGVy
dHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRy
eSgmQ2hhcmFjdGVyRGF0YTo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVl
OwotICAgIE9iamVjdCBwcm90byA9IENoYXJhY3RlckRhdGFQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gQ2hhcmFjdGVyRGF0YVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihOb2RlOjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgQ2hhcmFj
dGVyRGF0YTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDaGFyYWN0ZXJE
YXRhOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8
Q2hhcmFjdGVyRGF0YVByb3RvRnVuYyxDaGFyYWN0ZXJEYXRhPihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CkBAIC0xMTgzLDEwICsxMTgzLDEwIEBAIENoYXJhY3RlckRhdGEgS0RPTTo6
RWNtYUludGVyZmFjZTo6aW5oZXIKIAlRX1VOVVNFRChwMSk7IHJldHVybiBDaGFyYWN0ZXJEYXRh
OjpudWxsOwogfQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNoYXJhY3RlckRhdGE6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gQ2hhcmFjdGVyRGF0YVBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDaGFyYWN0ZXJEYXRhUHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihOb2RlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBOb2RlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAgLTEy
MDUsMTAgKzEyMDUsMTAgQEAgYm9vbCBDaGFyYWN0ZXJEYXRhOjpwdXRJblBhcmVudHMoUFVUX01F
VAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IENoYXJhY3RlckRhdGE6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpDaGFyYWN0ZXJEYXRhOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIENoYXJhY3RlckRh
dGFQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpDaGFyYWN0ZXJEYXRhOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTEyMTYsNyArMTIxNiw3IEBAIE9iamVjdEltcCAq
Q2hhcmFjdGVyRGF0YTo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdl
PENoYXJhY3RlckRhdGE+KHAxLHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGE6OlByaXZhdGUgKj4o
ZCkpOwogfQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKkNoYXJhY3RlckRhdGE6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENoYXJhY3RlckRhdGE+KHAxLHN0YXRpY19jYXN0
PENoYXJhY3RlckRhdGE6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTIyOSwyMSArMTIyOSwyMSBA
QCBib29sIENvdW50ZXI6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEsCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBDb3VudGVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKkNvdW50ZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGxvb2t1cEdldFZhbHVlPENvdW50ZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0K
IAotVmFsdWUgQ291bnRlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpDb3VudGVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgQ291bnRlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKkNvdW50ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmpl
Y3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkNvdW50ZXI6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtMTI1MSw3ICsxMjUxLDcgQEAgT2JqZWN0SW1wICpDb3VudGVyOjpi
cmlkZ2UoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPENvdW50ZXI+KHAx
LHN0YXRpY19jYXN0PENvdW50ZXI6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDb3VudGVy
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNvdW50ZXI6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENvdW50ZXI+
KHAxLHN0YXRpY19jYXN0PENvdW50ZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTI2MCwxMiAr
MTI2MCwxMiBAQCBib29sIERPTUNvbmZpZ3VyYXRpb246Omhhc1Byb3BlcnR5KEV4ZWNTCiB7CiAg
ICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkRPTUNvbmZpZ3VyYXRp
b246OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3Qg
cHJvdG8gPSBET01Db25maWd1cmF0aW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERP
TUNvbmZpZ3VyYXRpb25Qcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBET01D
b25maWd1cmF0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRPTUNv
bmZpZ3VyYXRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxv
b2t1cEdldDxET01Db25maWd1cmF0aW9uUHJvdG9GdW5jLERPTUNvbmZpZ3VyYXRpb24+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTEyODgsMTggKzEyODgsMTggQEAgRE9NQ29u
ZmlndXJhdGlvbiBLRE9NOjpFY21hSW50ZXJmYWNlOjppbgogCVFfVU5VU0VEKHAxKTsgcmV0dXJu
IERPTUNvbmZpZ3VyYXRpb246Om51bGw7CiB9CiAKLVZhbHVlIERPTUNvbmZpZ3VyYXRpb246Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NQ29uZmlndXJh
dGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3Qg
cHJvdG8gPSBET01Db25maWd1cmF0aW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1w
ICpwcm90byA9IERPTUNvbmZpZ3VyYXRpb25Qcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5V
U0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBET01Db25maWd1
cmF0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqRE9NQ29u
ZmlndXJhdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBET01Db25maWd1cmF0aW9uUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqRE9NQ29uZmlndXJhdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMzA3
LDcgKzEzMDcsNyBAQCBPYmplY3RJbXAgKkRPTUNvbmZpZ3VyYXRpb246OmJyaWRnZShFeGVjCiAg
ICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8RE9NQ29uZmlndXJhdGlvbj4ocDEsc3RhdGljX2Nhc3Q8
RE9NQ29uZmlndXJhdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERPTUNvbmZpZ3Vy
YXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRE9NQ29uZmlndXJh
dGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01P
YmplY3Q8RE9NQ29uZmlndXJhdGlvbj4ocDEsc3RhdGljX2Nhc3Q8RE9NQ29uZmlndXJhdGlvbjo6
UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xMzIwLDcgKzEzMjAsNyBAQCBib29sIERPTUVycm9yOjpo
YXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBE
T01FcnJvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01FcnJvcjo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8
RE9NRXJyb3I+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTEzMzMsMTYgKzEz
MzMsMTYgQEAgRE9NRXJyb3IgS0RPTTo6dG9ET01FcnJvcihLSlM6OkV4ZWNTdGF0ZQogICAgIHJl
dHVybiBET01FcnJvcjo6bnVsbDsKIH0KIAotVmFsdWUgRE9NRXJyb3I6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NRXJyb3I6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7
IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBET01F
cnJvcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRPTUVycm9y
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAx
LT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9i
amVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0
SW1wICpET01FcnJvcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMzUwLDcgKzEz
NTAsNyBAQCBPYmplY3RJbXAgKkRPTUVycm9yOjpicmlkZ2UoRXhlY1N0YXRlICpwCiAgICAgcmV0
dXJuIG5ldyBET01CcmlkZ2U8RE9NRXJyb3I+KHAxLHN0YXRpY19jYXN0PERPTUVycm9yOjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRE9NRXJyb3I6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqRE9NRXJyb3I6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERPTUVycm9yPihwMSxzdGF0aWNfY2FzdDxET01FcnJv
cjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xMzU5LDEyICsxMzU5LDEyIEBAIGJvb2wgRE9NRXJy
b3JIYW5kbGVyOjpoYXNQcm9wZXJ0eShFeGVjU3QKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUg
PSBMb29rdXA6OmZpbmRFbnRyeSgmRE9NRXJyb3JIYW5kbGVyOjpzX2hhc2hUYWJsZSxwMik7CiAg
ICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gRE9NRXJyb3JIYW5kbGVy
UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERPTUVycm9ySGFuZGxlclByb3RvOjpzZWxm
KHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERPTUVycm9ySGFuZGxlcjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01FcnJvckhhbmRsZXI6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxET01FcnJvckhhbmRsZXJQcm90
b0Z1bmMsRE9NRXJyb3JIYW5kbGVyPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBA
IC0xMzg3LDE4ICsxMzg3LDE4IEBAIERPTUVycm9ySGFuZGxlciBLRE9NOjpFY21hSW50ZXJmYWNl
OjppbmgKIAlRX1VOVVNFRChwMSk7IHJldHVybiBET01FcnJvckhhbmRsZXI6Om51bGw7CiB9CiAK
LVZhbHVlIERPTUVycm9ySGFuZGxlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpET01FcnJvckhhbmRsZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gRE9NRXJyb3JIYW5kbGVyUHJvdG86OnNl
bGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdl
dChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERPTUVycm9ySGFuZGxlclByb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8t
PmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotT2JqZWN0IERPTUVycm9ySGFuZGxlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitPYmplY3RJbXAgKkRPTUVycm9ySGFuZGxlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBET01FcnJvckhhbmRsZXJQcm90bzo6c2VsZihw
MSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4g
TlVMTDsKIH0KIAogT2JqZWN0SW1wICpET01FcnJvckhhbmRsZXI6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtMTQwNiw3ICsxNDA2LDcgQEAgT2JqZWN0SW1wICpET01FcnJvckhhbmRs
ZXI6OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERPTUVycm9ySGFuZGxl
cj4ocDEsc3RhdGljX2Nhc3Q8RE9NRXJyb3JIYW5kbGVyOjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgRE9NRXJyb3JIYW5kbGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKkRPTUVycm9ySGFuZGxlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gY2FjaGVET01PYmplY3Q8RE9NRXJyb3JIYW5kbGVyPihwMSxzdGF0aWNfY2FzdDxET01F
cnJvckhhbmRsZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTQxOSwyMSArMTQxOSwyMSBAQCBi
b29sIERPTUV4Y2VwdGlvbjo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBET01FeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqRE9NRXhjZXB0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBsb29rdXBHZXRWYWx1ZTxET01FeGNlcHRpb24+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KIAotVmFsdWUgRE9NRXhjZXB0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRPTUV4Y2VwdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9V
TlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IERPTUV4Y2Vw
dGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRPTUV4Y2Vw
dGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVy
biBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVy
biBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9i
amVjdEltcCAqRE9NRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE0
NDEsNyArMTQ0MSw3IEBAIE9iamVjdEltcCAqRE9NRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0YXQK
ICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxET01FeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PERP
TUV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERPTUV4Y2VwdGlvbjo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpET01FeGNlcHRpb246OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERPTUV4Y2Vw
dGlvbj4ocDEsc3RhdGljX2Nhc3Q8RE9NRXhjZXB0aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTE0NTAsMTIgKzE0NTAsMTIgQEAgYm9vbCBET01JbXBsZW1lbnRhdGlvbjo6aGFzUHJvcGVydHko
RXhlYwogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZET01J
bXBsZW1lbnRhdGlvbjo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwot
ICAgIE9iamVjdCBwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJvdG86OnNlbGYocDEpOwotICAg
IGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1w
ICpwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgRE9NSW1wbGVtZW50YXRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqRE9NSW1wbGVtZW50YXRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGxvb2t1cEdldDxET01JbXBsZW1lbnRhdGlvblByb3RvRnVuYyxET01JbXBs
ZW1lbnRhdGlvbj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMTQ3OCwxOCAr
MTQ3OCwxOCBAQCBET01JbXBsZW1lbnRhdGlvbiBLRE9NOjpFY21hSW50ZXJmYWNlOjppCiAJUV9V
TlVTRUQocDEpOyByZXR1cm4gRE9NSW1wbGVtZW50YXRpb246Om51bGw7CiB9CiAKLVZhbHVlIERP
TUltcGxlbWVudGF0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKkRPTUltcGxlbWVudGF0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewotICAgIE9iamVjdCBwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChw
MSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERPTUltcGxlbWVudGF0aW9uUHJvdG86OnNl
bGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+
Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgRE9NSW1wbGVtZW50YXRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorT2JqZWN0SW1wICpET01JbXBsZW1lbnRhdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBET01JbXBsZW1lbnRhdGlvblByb3RvOjpz
ZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkRPTUltcGxlbWVudGF0aW9uOjpicmlkZ2UoRXhl
Y1N0YXRlICpwMSkgY29uc3QKQEAgLTE0OTcsNyArMTQ5Nyw3IEBAIE9iamVjdEltcCAqRE9NSW1w
bGVtZW50YXRpb246OmJyaWRnZShFeGUKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxET01JbXBs
ZW1lbnRhdGlvbj4ocDEsc3RhdGljX2Nhc3Q8RE9NSW1wbGVtZW50YXRpb246OlByaXZhdGUgKj4o
ZCkpOwogfQogCi1WYWx1ZSBET01JbXBsZW1lbnRhdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK1ZhbHVlSW1wICpET01JbXBsZW1lbnRhdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8RE9NSW1wbGVtZW50YXRpb24+KHAx
LHN0YXRpY19jYXN0PERPTUltcGxlbWVudGF0aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE1
MTAsMjEgKzE1MTAsMjEgQEAgYm9vbCBET01Mb2NhdG9yOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUg
KgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRE9NTG9jYXRvcjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01Mb2NhdG9yOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxET01Mb2NhdG9yPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIERPTUxvY2F0b3I6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NTG9jYXRvcjo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VE
KHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0
IERPTUxvY2F0b3I6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpE
T01Mb2NhdG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpET01Mb2NhdG9yOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTE1MzIsNyArMTUzMiw3IEBAIE9iamVjdEltcCAqRE9NTG9jYXRvcjo6YnJpZGdlKEV4ZWNTdGF0
ZSAKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxET01Mb2NhdG9yPihwMSxzdGF0aWNfY2FzdDxE
T01Mb2NhdG9yOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRE9NTG9jYXRvcjo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpET01Mb2NhdG9yOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxET01Mb2NhdG9yPihw
MSxzdGF0aWNfY2FzdDxET01Mb2NhdG9yOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE1NDEsMTIg
KzE1NDEsMTIgQEAgYm9vbCBET01TdHJpbmdMaXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogewog
ICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZET01TdHJpbmdMaXN0
OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHBy
b3RvID0gRE9NU3RyaW5nTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBET01TdHJp
bmdMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRE9NU3RyaW5nTGlz
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01TdHJpbmdMaXN0Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8RE9NU3Ry
aW5nTGlzdFByb3RvRnVuYyxET01TdHJpbmdMaXN0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CkBAIC0xNTY5LDE4ICsxNTY5LDE4IEBAIERPTVN0cmluZ0xpc3QgS0RPTTo6RWNtYUlu
dGVyZmFjZTo6aW5oZXIKIAlRX1VOVVNFRChwMSk7IHJldHVybiBET01TdHJpbmdMaXN0OjpudWxs
OwogfQogCi1WYWx1ZSBET01TdHJpbmdMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKkRPTVN0cmluZ0xpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gRE9NU3RyaW5nTGlzdFByb3RvOjpz
ZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5n
ZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBET01TdHJpbmdMaXN0UHJvdG86OnNl
bGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+
Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgRE9NU3RyaW5nTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKkRPTVN0cmluZ0xpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gRE9NU3RyaW5nTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKkRPTVN0cmluZ0xpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtMTU4OCw3ICsxNTg4LDcgQEAgT2JqZWN0SW1wICpET01TdHJpbmdMaXN0OjpicmlkZ2Uo
RXhlY1N0YQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERPTVN0cmluZ0xpc3Q+KHAxLHN0YXRp
Y19jYXN0PERPTVN0cmluZ0xpc3Q6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBET01TdHJp
bmdMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkRPTVN0cmluZ0xp
c3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2Jq
ZWN0PERPTVN0cmluZ0xpc3Q+KHAxLHN0YXRpY19jYXN0PERPTVN0cmluZ0xpc3Q6OlByaXZhdGUg
Kj4oZCkpOwogfQpAQCAtMTYwMSw3ICsxNjAxLDcgQEAgYm9vbCBET01Vc2VyRGF0YTo6aGFzUHJv
cGVydHkoRXhlY1N0YXRlIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRE9NVXNlckRh
dGE6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NVXNlckRhdGE6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPERP
TVVzZXJEYXRhPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0xNjE0LDE2ICsx
NjE0LDE2IEBAIERPTVVzZXJEYXRhIEtET006OnRvRE9NVXNlckRhdGEoS0pTOjpFeGUKICAgICBy
ZXR1cm4gRE9NVXNlckRhdGE6Om51bGw7CiB9CiAKLVZhbHVlIERPTVVzZXJEYXRhOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRPTVVzZXJEYXRhOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9V
TlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1P
YmplY3QgRE9NVXNlckRhdGE6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpET01Vc2VyRGF0YTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgp
OwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiB9CiAKIE9iamVjdEltcCAqRE9NVXNlckRhdGE6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBj
b25zdApAQCAtMTYzMSw3ICsxNjMxLDcgQEAgT2JqZWN0SW1wICpET01Vc2VyRGF0YTo6YnJpZGdl
KEV4ZWNTdGF0ZQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERPTVVzZXJEYXRhPihwMSxzdGF0
aWNfY2FzdDxET01Vc2VyRGF0YTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERPTVVzZXJE
YXRhOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkRPTVVzZXJEYXRhOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxE
T01Vc2VyRGF0YT4ocDEsc3RhdGljX2Nhc3Q8RE9NVXNlckRhdGE6OlByaXZhdGUgKj4oZCkpOwog
fQpAQCAtMTY0MCw4ICsxNjQwLDggQEAgYm9vbCBEb2N1bWVudDo6aGFzUHJvcGVydHkoRXhlY1N0
YXRlICpwMQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZE
b2N1bWVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9i
amVjdCBwcm90byA9IERvY3VtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERvY3Vt
ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOwogICAgIGlmKERvY3VtZW50RXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CiAgICAgaWYoRG9jdW1lbnRSYW5nZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gdHJ1ZTsKICAgICBpZihEb2N1bWVudFN0eWxlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biB0cnVlOwpAQCAtMTY1Miw3ICsxNjUyLDcgQEAgYm9vbCBEb2N1bWVudDo6aGFzUHJvcGVydHko
RXhlY1N0YXRlICpwMQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRG9jdW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnQ6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxEb2N1bWVudFByb3RvRnVu
YyxEb2N1bWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMTY3NSwxMCAr
MTY3NSwxMCBAQCBEb2N1bWVudCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRECiAJUV9V
TlVTRUQocDEpOyByZXR1cm4gRG9jdW1lbnQ6Om51bGw7CiB9CiAKLVZhbHVlIERvY3VtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9
IERvY3VtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERvY3Vt
ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihEb2N1bWVudEV2ZW50OjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBEb2N1bWVudEV2ZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKERv
Y3VtZW50UmFuZ2U6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIERvY3VtZW50UmFuZ2U6Omdl
dChwMSxwMixwMyk7CiAgICAgaWYoRG9jdW1lbnRTdHlsZTo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gRG9jdW1lbnRTdHlsZTo6Z2V0KHAxLHAyLHAzKTsKQEAgLTE3MDMsMTAgKzE3MDMsMTAg
QEAgYm9vbCBEb2N1bWVudDo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0RfQQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotT2JqZWN0IERvY3VtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqRG9jdW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIGlmKHAxKSByZXR1cm4gRG9jdW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpEb2N1bWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNzE0LDcg
KzE3MTQsNyBAQCBPYmplY3RJbXAgKkRvY3VtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwCiAgICAg
cmV0dXJuIG5ldyBET01SV0JyaWRnZTxEb2N1bWVudD4ocDEsc3RhdGljX2Nhc3Q8RG9jdW1lbnQ6
OlByaXZhdGUgKj4oS0RPTTo6RXZlbnRUYXJnZXQ6OmQpKTsKIH0KIAotVmFsdWUgRG9jdW1lbnQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnQ6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERvY3VtZW50
PihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudDo6UHJpdmF0ZSAqPihLRE9NOjpFdmVudFRhcmdldDo6
ZCkpOwogfQpAQCAtMTcyMywxMiArMTcyMywxMiBAQCBib29sIERvY3VtZW50RXZlbnQ6Omhhc1By
b3BlcnR5KEV4ZWNTdGF0CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5k
RW50cnkoJkRvY3VtZW50RXZlbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4g
dHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBEb2N1bWVudEV2ZW50UHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IERvY3VtZW50RXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBEb2N1bWVudEV2ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKkRvY3VtZW50RXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGxvb2t1cEdldDxEb2N1bWVudEV2ZW50UHJvdG9GdW5jLERvY3VtZW50RXZlbnQ+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTE3NTMsMTggKzE3NTMsMTggQEAgRG9jdW1l
bnRFdmVudCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcgogCVFfVU5VU0VEKHAxKTsgcmV0dXJu
IERvY3VtZW50RXZlbnQ6Om51bGw7CiB9CiAKLVZhbHVlIERvY3VtZW50RXZlbnQ6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRFdmVudDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBE
b2N1bWVudEV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERv
Y3VtZW50RXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBEb2N1bWVudEV2ZW50Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqRG9jdW1lbnRFdmVudDo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBEb2N1bWVudEV2ZW50
UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRG9jdW1lbnRFdmVudDo6YnJpZGdl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNzcyLDcgKzE3NzIsNyBAQCBPYmplY3RJbXAgKkRv
Y3VtZW50RXZlbnQ6OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8RG9j
dW1lbnRFdmVudD4ocDEsc3RhdGljX2Nhc3Q8RG9jdW1lbnRFdmVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIERvY3VtZW50RXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqRG9jdW1lbnRFdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gY2FjaGVET01PYmplY3Q8RG9jdW1lbnRFdmVudD4ocDEsc3RhdGljX2Nhc3Q8RG9j
dW1lbnRFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNzgxLDEyICsxNzgxLDEyIEBAIGJv
b2wgRG9jdW1lbnRSYW5nZTo6aGFzUHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNo
RW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmRG9jdW1lbnRSYW5nZTo6c19oYXNoVGFibGUs
cDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IERvY3VtZW50
UmFuZ2VQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRSYW5nZVByb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERvY3VtZW50UmFuZ2U6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRSYW5nZTo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PERvY3VtZW50UmFuZ2VQcm90b0Z1
bmMsRG9jdW1lbnRSYW5nZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMTgx
MSwxOCArMTgxMSwxOCBAQCBEb2N1bWVudFJhbmdlIEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVy
CiAJUV9VTlVTRUQocDEpOyByZXR1cm4gRG9jdW1lbnRSYW5nZTo6bnVsbDsKIH0KIAotVmFsdWUg
RG9jdW1lbnRSYW5nZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpEb2N1bWVudFJhbmdlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewotICAgIE9iamVjdCBwcm90byA9IERvY3VtZW50UmFuZ2VQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAg
ICBPYmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRSYW5nZVByb3RvOjpzZWxmKHAxKTsKKyAgICBp
Zihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAg
ICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IERv
Y3VtZW50UmFuZ2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpE
b2N1bWVudFJhbmdlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIERvY3VtZW50UmFuZ2VQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVj
dDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1w
ICpEb2N1bWVudFJhbmdlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE4MzAsNyAr
MTgzMCw3IEBAIE9iamVjdEltcCAqRG9jdW1lbnRSYW5nZTo6YnJpZGdlKEV4ZWNTdGEKICAgICBy
ZXR1cm4gbmV3IERPTUJyaWRnZTxEb2N1bWVudFJhbmdlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVu
dFJhbmdlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRG9jdW1lbnRSYW5nZTo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFJhbmdlOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxEb2N1bWVudFJh
bmdlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudFJhbmdlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTE4NDMsMjEgKzE4NDMsMjEgQEAgYm9vbCBEb2N1bWVudFN0eWxlOjpoYXNQcm9wZXJ0eShFeGVj
U3RhdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRG9jdW1lbnRTdHlsZTo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFN0eWxlOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxEb2N1bWVudFN0
eWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIERvY3VtZW50U3R5
bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1l
bnRTdHlsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VO
VVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotT2JqZWN0IERvY3VtZW50U3R5bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpEb2N1bWVudFN0eWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGlu
T2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpEb2N1bWVudFN0eWxlOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE4NjUsNyArMTg2NSw3IEBAIE9iamVjdEltcCAq
RG9jdW1lbnRTdHlsZTo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxE
b2N1bWVudFN0eWxlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudFN0eWxlOjpQcml2YXRlICo+KGQp
KTsKIH0KIAotVmFsdWUgRG9jdW1lbnRTdHlsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K1ZhbHVlSW1wICpEb2N1bWVudFN0eWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxEb2N1bWVudFN0eWxlPihwMSxzdGF0aWNfY2FzdDxE
b2N1bWVudFN0eWxlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE4NzQsMTIgKzE4NzQsMTIgQEAg
Ym9vbCBEb2N1bWVudFRyYXZlcnNhbDo6aGFzUHJvcGVydHkoRXhlYwogewogICAgIGNvbnN0IEhh
c2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZEb2N1bWVudFRyYXZlcnNhbDo6c19oYXNo
VGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IERv
Y3VtZW50VHJhdmVyc2FsUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IERvY3VtZW50VHJh
dmVyc2FsUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRG9jdW1lbnRUcmF2
ZXJzYWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRUcmF2
ZXJzYWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdl
dDxEb2N1bWVudFRyYXZlcnNhbFByb3RvRnVuYyxEb2N1bWVudFRyYXZlcnNhbD4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMTkwNCwxOCArMTkwNCwxOCBAQCBEb2N1bWVudFRy
YXZlcnNhbCBLRE9NOjpFY21hSW50ZXJmYWNlOjppCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gRG9j
dW1lbnRUcmF2ZXJzYWw6Om51bGw7CiB9CiAKLVZhbHVlIERvY3VtZW50VHJhdmVyc2FsOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50VHJhdmVy
c2FsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBw
cm90byA9IERvY3VtZW50VHJhdmVyc2FsUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1w
ICpwcm90byA9IERvY3VtZW50VHJhdmVyc2FsUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VO
VVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgRG9jdW1lbnRU
cmF2ZXJzYWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpEb2N1
bWVudFRyYXZlcnNhbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYo
cDEpIHJldHVybiBEb2N1bWVudFRyYXZlcnNhbFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKkRvY3VtZW50VHJhdmVyc2FsOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTE5MjMsNyArMTkyMyw3IEBAIE9iamVjdEltcCAqRG9jdW1lbnRUcmF2ZXJzYWw6OmJyaWRnZShF
eGUKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxEb2N1bWVudFRyYXZlcnNhbD4ocDEsc3RhdGlj
X2Nhc3Q8RG9jdW1lbnRUcmF2ZXJzYWw6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBEb2N1
bWVudFRyYXZlcnNhbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpEb2N1
bWVudFRyYXZlcnNhbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
Y2FjaGVET01PYmplY3Q8RG9jdW1lbnRUcmF2ZXJzYWw+KHAxLHN0YXRpY19jYXN0PERvY3VtZW50
VHJhdmVyc2FsOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE5MzYsNyArMTkzNiw3IEBAIGJvb2wg
RG9jdW1lbnRUeXBlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIERvY3VtZW50VHlwZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpEb2N1bWVudFR5cGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGxvb2t1cEdldFZhbHVlPERvY3VtZW50VHlwZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQpAQCAtMTk0OSw3ICsxOTQ5LDcgQEAgRG9jdW1lbnRUeXBlIEtET006OnRvRG9jdW1l
bnRUeXBlKEtKUzo6RQogICAgIHJldHVybiBEb2N1bWVudFR5cGU6Om51bGw7CiB9CiAKLVZhbHVl
IERvY3VtZW50VHlwZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpEb2N1bWVudFR5cGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgaWYoTm9kZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gTm9kZTo6Z2V0KHAxLHAy
LHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xOTY0LDEwICsxOTY0LDEwIEBAIGJv
b2wgRG9jdW1lbnRUeXBlOjpwdXQoUFVUX01FVEhPRF9BUkdTKQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotT2JqZWN0IERvY3VtZW50VHlwZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKkRvY3VtZW50VHlwZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRG9jdW1lbnRUeXBlOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTE5NzUsNyArMTk3NSw3IEBAIE9iamVjdEltcCAqRG9jdW1lbnRU
eXBlOjpicmlkZ2UoRXhlY1N0YXQKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPERvY3VtZW50
VHlwZT4ocDEsc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlOjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgRG9jdW1lbnRUeXBlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KkRvY3VtZW50VHlwZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
Y2FjaGVET01PYmplY3Q8RG9jdW1lbnRUeXBlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudFR5cGU6
OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTk4OCwyMSArMTk4OCwyMSBAQCBib29sIERvY3VtZW50
Vmlldzo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBEb2N1bWVudFZpZXc6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9j
dW1lbnRWaWV3OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29r
dXBHZXRWYWx1ZTxEb2N1bWVudFZpZXc+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0K
IAotVmFsdWUgRG9jdW1lbnRWaWV3OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKkRvY3VtZW50Vmlldzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwog
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IERvY3VtZW50Vmlldzo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRvY3VtZW50Vmlldzo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRG9j
dW1lbnRWaWV3OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIwMTAsNyArMjAxMCw3
IEBAIE9iamVjdEltcCAqRG9jdW1lbnRWaWV3OjpicmlkZ2UoRXhlY1N0YXQKICAgICByZXR1cm4g
bmV3IERPTUJyaWRnZTxEb2N1bWVudFZpZXc+KHAxLHN0YXRpY19jYXN0PERvY3VtZW50Vmlldzo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERvY3VtZW50Vmlldzo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFZpZXc6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERvY3VtZW50Vmlldz4ocDEsc3Rh
dGljX2Nhc3Q8RG9jdW1lbnRWaWV3OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIwMTksMTMgKzIw
MTksMTMgQEAgYm9vbCBFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLAogewogICAg
IGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZFbGVtZW50OjpzX2hhc2hU
YWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gRWxl
bWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBFbGVtZW50UHJvdG86OnNlbGYocDEp
OworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlm
KE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxv
b2t1cEdldDxFbGVtZW50UHJvdG9GdW5jLEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KQEAgLTIwNDgsMTAgKzIwNDgsMTAgQEAgRWxlbWVudCBLRE9NOjpFY21hSW50ZXJm
YWNlOjppbmhlcml0ZWRFbAogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIEVsZW1lbnQ6Om51bGw7CiB9
CiAKLVZhbHVlIEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
LSAgICBPYmplY3QgcHJvdG8gPSBFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3Rv
Lmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IEVsZW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKE5vZGU6Omhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQpAQCAtMjA2NSwxMCArMjA2NSwxMCBAQCBib29sIEVsZW1lbnQ6OnB1
dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgRWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkVsZW1lbnQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gRWxlbWVu
dFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkp
OworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkVsZW1lbnQ6OmJyaWRnZShFeGVj
U3RhdGUgKnAxKSBjb25zdApAQCAtMjA3Niw3ICsyMDc2LDcgQEAgT2JqZWN0SW1wICpFbGVtZW50
OjpicmlkZ2UoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8RWxlbWVu
dD4ocDEsc3RhdGljX2Nhc3Q8RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEVs
ZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRWxlbWVudDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8RWxl
bWVudD4ocDEsc3RhdGljX2Nhc3Q8RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yMDg5
LDEyICsyMDg5LDEyIEBAIGJvb2wgRW50aXR5OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLGMK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIEVudGl0eTo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpFbnRpdHk6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPEVudGl0eT4ocDEscDIsJnNfaGFzaFRhYmxlLHRo
aXMscDMpOwogfQogCi1WYWx1ZSBFbnRpdHk6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqRW50aXR5OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIGlmKE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6Omdl
dChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMjEwOSwxMCArMjEwOSwx
MCBAQCBib29sIEVudGl0eTo6cHV0KFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU9iamVjdCBFbnRpdHk6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpFbnRpdHk6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKkVudGl0eTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC0yMTIwLDcgKzIxMjAsNyBAQCBPYmplY3RJbXAgKkVudGl0eTo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxFbnRpdHk+KHAxLHN0YXRpY19jYXN0PEVu
dGl0eTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEVudGl0eTo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpFbnRpdHk6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PEVudGl0eT4ocDEsc3RhdGljX2Nhc3Q8RW50
aXR5OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIxMjksMTIgKzIxMjksMTIgQEAgYm9vbCBFdmVu
dDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMSxjbwogewogICAgIGNvbnN0IEhhc2hFbnRyeSAq
ZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZFdmVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUp
IHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IEV2ZW50UHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IEV2ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
RXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRXZlbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxFdmVudFByb3Rv
RnVuYyxFdmVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjE3MCwxOCAr
MjE3MCwxOCBAQCBFdmVudCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRFdmVuCiAJUV9V
TlVTRUQocDEpOyByZXR1cm4gRXZlbnQ6Om51bGw7CiB9CiAKLVZhbHVlIEV2ZW50OjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IEV2ZW50UHJv
dG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHBy
b3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IEV2ZW50UHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1PYmplY3QgRXZlbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpFdmVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBFdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkV2ZW50Ojpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIxODksNyArMjE4OSw3IEBAIE9iamVjdEltcCAq
RXZlbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSAKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxF
dmVudD4ocDEsc3RhdGljX2Nhc3Q8RXZlbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBF
dmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpFdmVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8RXZlbnQ+
KHAxLHN0YXRpY19jYXN0PEV2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIyMDIsMjEgKzIy
MDIsMjEgQEAgYm9vbCBFdmVudEV4Y2VwdGlvbjo6aGFzUHJvcGVydHkoRXhlY1N0YQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRXZlbnRFeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqRXZlbnRFeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPEV2ZW50RXhjZXB0aW9uPihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIEV2ZW50RXhjZXB0aW9uOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50RXhjZXB0aW9u
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAx
KTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgRXZlbnRFeGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpFdmVudEV4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRXZlbnRFeGNlcHRpb246OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjIyNCw3ICsyMjI0LDcgQEAgT2JqZWN0SW1wICpFdmVu
dEV4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPEV2ZW50
RXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxFdmVudEV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIEV2ZW50RXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKkV2ZW50RXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxFdmVudEV4Y2VwdGlvbj4ocDEsc3RhdGljX2Nhc3Q8
RXZlbnRFeGNlcHRpb246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjIzMywxMiArMjIzMywxMiBA
QCBib29sIEV2ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgCiB7CiAgICAgY29uc3Qg
SGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkV2ZW50VGFyZ2V0OjpzX2hhc2hUYWJs
ZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gRXZlbnRU
YXJnZXRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRXZlbnRUYXJnZXRQcm90bzo6c2Vs
ZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBFdmVudFRhcmdldDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpFdmVudFRhcmdldDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PEV2ZW50VGFyZ2V0UHJvdG9GdW5jLEV2ZW50
VGFyZ2V0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0yMjkzLDEwICsyMjkz
LDEwIEBAIEV2ZW50VGFyZ2V0IEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVyaXQKIAlRX1VOVVNF
RChwMSk7IHJldHVybiBFdmVudFRhcmdldDo6bnVsbDsKIH0KIAotVmFsdWUgRXZlbnRUYXJnZXQ6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRXZlbnRUYXJn
ZXQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gRXZlbnRUYXJnZXRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3Rv
ID0gRXZlbnRUYXJnZXRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0yMzA3LDEwICsyMzA3LDEwIEBAIGJvb2wgRXZl
bnRUYXJnZXQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1P
YmplY3QgRXZlbnRUYXJnZXQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpFdmVudFRhcmdldDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBFdmVudFRhcmdldFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKkV2ZW50VGFyZ2V0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIzMTgsNyAr
MjMxOCw3IEBAIE9iamVjdEltcCAqRXZlbnRUYXJnZXQ6OmJyaWRnZShFeGVjU3RhdGUKICAgICBy
ZXR1cm4gbmV3IERPTVJXQnJpZGdlPEV2ZW50VGFyZ2V0PihwMSxzdGF0aWNfY2FzdDxFdmVudFRh
cmdldDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEV2ZW50VGFyZ2V0OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50VGFyZ2V0OjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxFdmVudFRhcmdldD4ocDEs
c3RhdGljX2Nhc3Q8RXZlbnRUYXJnZXQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjMyNywxMyAr
MjMyNywxMyBAQCBib29sIEtleWJvYXJkRXZlbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiB7CiAg
ICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJktleWJvYXJkRXZlbnQ6
OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJv
dG8gPSBLZXlib2FyZEV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IEtleWJvYXJk
RXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIHRydWU7CiAgICAgaWYoVUlFdmVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIEtleWJvYXJkRXZlbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqS2V5Ym9hcmRFdmVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PEtleWJvYXJkRXZlbnRQ
cm90b0Z1bmMsS2V5Ym9hcmRFdmVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpA
QCAtMjM1NiwxOCArMjM1NiwxOCBAQCBLZXlib2FyZEV2ZW50IEtET006OkVjbWFJbnRlcmZhY2U6
OmluaGVyCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gS2V5Ym9hcmRFdmVudDo6bnVsbDsKIH0KIAot
VmFsdWUgS2V5Ym9hcmRFdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpLZXlib2FyZEV2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewotICAgIE9iamVjdCBwcm90byA9IEtleWJvYXJkRXZlbnRQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAy
KTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gS2V5Ym9hcmRFdmVudFByb3RvOjpzZWxmKHAxKTsK
KyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxw
Mik7CiAgICAgaWYoVUlFdmVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gVUlFdmVudDo6
Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBLZXli
b2FyZEV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqS2V5
Ym9hcmRFdmVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBLZXlib2FyZEV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
S2V5Ym9hcmRFdmVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMzc1LDcgKzIz
NzUsNyBAQCBPYmplY3RJbXAgKktleWJvYXJkRXZlbnQ6OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0
dXJuIG5ldyBET01CcmlkZ2U8S2V5Ym9hcmRFdmVudD4ocDEsc3RhdGljX2Nhc3Q8S2V5Ym9hcmRF
dmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEtleWJvYXJkRXZlbnQ6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqS2V5Ym9hcmRFdmVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8S2V5Ym9hcmRFdmVu
dD4ocDEsc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0y
Mzg4LDIxICsyMzg4LDIxIEBAIGJvb2wgTFNFeGNlcHRpb246Omhhc1Byb3BlcnR5KEV4ZWNTdGF0
ZSAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIExTRXhjZXB0aW9uOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTRXhjZXB0aW9uOjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxMU0V4Y2VwdGlvbj4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBMU0V4Y2VwdGlvbjo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU0V4Y2VwdGlvbjo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFf
VU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
T2JqZWN0IExTRXhjZXB0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVj
dEltcCAqTFNFeGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUo
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKkxTRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkg
Y29uc3QKQEAgLTI0MTAsNyArMjQxMCw3IEBAIE9iamVjdEltcCAqTFNFeGNlcHRpb246OmJyaWRn
ZShFeGVjU3RhdGUKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxMU0V4Y2VwdGlvbj4ocDEsc3Rh
dGljX2Nhc3Q8TFNFeGNlcHRpb246OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBMU0V4Y2Vw
dGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpMU0V4Y2VwdGlvbjo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8
TFNFeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PExTRXhjZXB0aW9uOjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTI0MjMsNyArMjQyMyw3IEBAIGJvb2wgTFNJbnB1dDo6aGFzUHJvcGVydHkoRXhlY1N0
YXRlICpwMSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIExTSW5wdXQ6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNJbnB1dDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8TFNJbnB1dD4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjQzNiw3ICsyNDM2LDcgQEAgTFNJbnB1dCBLRE9N
Ojp0b0xTSW5wdXQoS0pTOjpFeGVjU3RhdGUgKgogICAgIHJldHVybiBMU0lucHV0OjpudWxsOwog
fQogCi1WYWx1ZSBMU0lucHV0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKkxTSW5wdXQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CkBAIC0yNDUzLDEwICsyNDUzLDEwIEBAIGJvb2wgTFNJbnB1dDo6cHV0
SW5QYXJlbnRzKFBVVF9NRVRIT0RfQVIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBM
U0lucHV0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqTFNJbnB1
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBw
MS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqTFNJbnB1dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNDY0LDcgKzI0
NjQsNyBAQCBPYmplY3RJbXAgKkxTSW5wdXQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxCiAgICAgcmV0
dXJuIG5ldyBET01SV0JyaWRnZTxMU0lucHV0PihwMSxzdGF0aWNfY2FzdDxMU0lucHV0OjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgTFNJbnB1dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpMU0lucHV0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBjYWNoZURPTU9iamVjdDxMU0lucHV0PihwMSxzdGF0aWNfY2FzdDxMU0lucHV0OjpQ
cml2YXRlICo+KGQpKTsKIH0KQEAgLTI0NzcsNyArMjQ3Nyw3IEBAIGJvb2wgTFNPdXRwdXQ6Omhh
c1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIExT
T3V0cHV0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTT3V0cHV0Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxM
U091dHB1dD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjQ5MCw3ICsyNDkw
LDcgQEAgTFNPdXRwdXQgS0RPTTo6dG9MU091dHB1dChLSlM6OkV4ZWNTdGF0ZQogICAgIHJldHVy
biBMU091dHB1dDo6bnVsbDsKIH0KIAotVmFsdWUgTFNPdXRwdXQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNPdXRwdXQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFf
VU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0yNTA3LDEwICsyNTA3LDEw
IEBAIGJvb2wgTFNPdXRwdXQ6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0EKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU9iamVjdCBMU091dHB1dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitPYmplY3RJbXAgKkxTT3V0cHV0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJv
dG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICBy
ZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpMU091dHB1dDo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CkBAIC0yNTE4LDcgKzI1MTgsNyBAQCBPYmplY3RJbXAgKkxTT3V0cHV0Ojpicmlk
Z2UoRXhlY1N0YXRlICpwCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxMU091dHB1dD4ocDEs
c3RhdGljX2Nhc3Q8TFNPdXRwdXQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBMU091dHB1
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpMU091dHB1dDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8TFNPdXRw
dXQ+KHAxLHN0YXRpY19jYXN0PExTT3V0cHV0OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI1Mjcs
MTMgKzI1MjcsMTMgQEAgYm9vbCBMU1BhcnNlcjo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMQog
ewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZMU1BhcnNlcjo6
c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90
byA9IExTUGFyc2VyUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IExTUGFyc2VyUHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVl
OwogICAgIGlmKEV2ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTFNQYXJzZXI6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqTFNQYXJzZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxMU1BhcnNlclByb3RvRnVuYyxMU1BhcnNlcj4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjU1NiwxMCArMjU1NiwxMCBAQCBMU1Bh
cnNlciBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRMCiAJUV9VTlVTRUQocDEpOyByZXR1
cm4gTFNQYXJzZXI6Om51bGw7CiB9CiAKLVZhbHVlIExTUGFyc2VyOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTUGFyc2VyOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IExTUGFyc2VyUHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3Rv
LmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IExTUGFyc2VyUHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBpZihFdmVudFRhcmdldDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
RXZlbnRUYXJnZXQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpA
QCAtMjU3OCwxMCArMjU3OCwxMCBAQCBib29sIExTUGFyc2VyOjpwdXRJblBhcmVudHMoUFVUX01F
VEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTFNQYXJzZXI6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpMU1BhcnNlcjo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBMU1BhcnNlclByb3RvOjpz
ZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkxTUGFyc2VyOjpicmlkZ2UoRXhlY1N0YXRlICpw
MSkgY29uc3QKQEAgLTI1ODksNyArMjU4OSw3IEBAIE9iamVjdEltcCAqTFNQYXJzZXI6OmJyaWRn
ZShFeGVjU3RhdGUgKnAKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPExTUGFyc2VyPihwMSxz
dGF0aWNfY2FzdDxMU1BhcnNlcjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIExTUGFyc2Vy
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkxTUGFyc2VyOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxMU1BhcnNl
cj4ocDEsc3RhdGljX2Nhc3Q8TFNQYXJzZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjU5OCwx
MiArMjU5OCwxMiBAQCBib29sIExTUGFyc2VyRmlsdGVyOjpoYXNQcm9wZXJ0eShFeGVjU3RhCiB7
CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkxTUGFyc2VyRmls
dGVyOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0
IHByb3RvID0gTFNQYXJzZXJGaWx0ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTFNQ
YXJzZXJGaWx0ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBMU1BhcnNl
ckZpbHRlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU1BhcnNlckZp
bHRlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0
PExTUGFyc2VyRmlsdGVyUHJvdG9GdW5jLExTUGFyc2VyRmlsdGVyPihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CkBAIC0yNjI2LDE4ICsyNjI2LDE4IEBAIExTUGFyc2VyRmlsdGVyIEtE
T006OkVjbWFJbnRlcmZhY2U6OmluaGUKIAlRX1VOVVNFRChwMSk7IHJldHVybiBMU1BhcnNlckZp
bHRlcjo6bnVsbDsKIH0KIAotVmFsdWUgTFNQYXJzZXJGaWx0ZXI6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNQYXJzZXJGaWx0ZXI6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTFNQYXJzZXJG
aWx0ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTFNQYXJzZXJG
aWx0ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBMU1BhcnNlckZpbHRlcjo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkxTUGFyc2VyRmlsdGVyOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIExTUGFyc2VyRmlsdGVyUHJv
dG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTFNQYXJzZXJGaWx0ZXI6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjY0NSw3ICsyNjQ1LDcgQEAgT2JqZWN0SW1wICpMU1Bh
cnNlckZpbHRlcjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPExTUGFy
c2VyRmlsdGVyPihwMSxzdGF0aWNfY2FzdDxMU1BhcnNlckZpbHRlcjo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIExTUGFyc2VyRmlsdGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKkxTUGFyc2VyRmlsdGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxMU1BhcnNlckZpbHRlcj4ocDEsc3RhdGljX2Nhc3Q8
TFNQYXJzZXJGaWx0ZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjY1NCwxMiArMjY1NCwxMiBA
QCBib29sIExTUmVzb3VyY2VSZXNvbHZlcjo6aGFzUHJvcGVydHkoRXhlCiB7CiAgICAgY29uc3Qg
SGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkxTUmVzb3VyY2VSZXNvbHZlcjo6c19o
YXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9
IExTUmVzb3VyY2VSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBMU1Jlc291
cmNlUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBMU1Jlc291
cmNlUmVzb2x2ZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNSZXNv
dXJjZVJlc29sdmVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBs
b29rdXBHZXQ8TFNSZXNvdXJjZVJlc29sdmVyUHJvdG9GdW5jLExTUmVzb3VyY2VSZXNvbHZlcj4o
cDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjY4MiwxOCArMjY4MiwxOCBAQCBM
U1Jlc291cmNlUmVzb2x2ZXIgS0RPTTo6RWNtYUludGVyZmFjZTo6CiAJUV9VTlVTRUQocDEpOyBy
ZXR1cm4gTFNSZXNvdXJjZVJlc29sdmVyOjpudWxsOwogfQogCi1WYWx1ZSBMU1Jlc291cmNlUmVz
b2x2ZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNS
ZXNvdXJjZVJlc29sdmVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewot
ICAgIE9iamVjdCBwcm90byA9IExTUmVzb3VyY2VSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKLSAg
ICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOwor
ICAgIE9iamVjdEltcCAqcHJvdG8gPSBMU1Jlc291cmNlUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7
CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEs
cDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9i
amVjdCBMU1Jlc291cmNlUmVzb2x2ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpMU1Jlc291cmNlUmVzb2x2ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTFNSZXNvdXJjZVJlc29sdmVyUHJvdG86OnNlbGYo
cDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTFNSZXNvdXJjZVJlc29sdmVyOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTI3MDEsNyArMjcwMSw3IEBAIE9iamVjdEltcCAqTFNSZXNvdXJj
ZVJlc29sdmVyOjpicmlkZ2UoRXgKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxMU1Jlc291cmNl
UmVzb2x2ZXI+KHAxLHN0YXRpY19jYXN0PExTUmVzb3VyY2VSZXNvbHZlcjo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIExTUmVzb3VyY2VSZXNvbHZlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK1ZhbHVlSW1wICpMU1Jlc291cmNlUmVzb2x2ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PExTUmVzb3VyY2VSZXNvbHZlcj4o
cDEsc3RhdGljX2Nhc3Q8TFNSZXNvdXJjZVJlc29sdmVyOjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTI3MTAsMTIgKzI3MTAsMTIgQEAgYm9vbCBMU1NlcmlhbGl6ZXI6Omhhc1Byb3BlcnR5KEV4ZWNT
dGF0ZQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZMU1Nl
cmlhbGl6ZXI6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBP
YmplY3QgcHJvdG8gPSBMU1NlcmlhbGl6ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0g
TFNTZXJpYWxpemVyUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTFNTZXJp
YWxpemVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkxTU2VyaWFsaXpl
cjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PExT
U2VyaWFsaXplclByb3RvRnVuYyxMU1NlcmlhbGl6ZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KQEAgLTI3MzgsMTAgKzI3MzgsMTAgQEAgTFNTZXJpYWxpemVyIEtET006OkVjbWFJ
bnRlcmZhY2U6OmluaGVyaQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIExTU2VyaWFsaXplcjo6bnVs
bDsKIH0KIAotVmFsdWUgTFNTZXJpYWxpemVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKkxTU2VyaWFsaXplcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBMU1NlcmlhbGl6ZXJQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0
KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTFNTZXJpYWxpemVyUHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpA
QCAtMjc1NywxMCArMjc1NywxMCBAQCBib29sIExTU2VyaWFsaXplcjo6cHV0SW5QYXJlbnRzKFBV
VF9NRVRICiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTFNTZXJpYWxpemVyOjpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqTFNTZXJpYWxpemVyOjpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIExTU2VyaWFs
aXplclByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxs
KCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkxTU2VyaWFsaXplcjo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNzY4LDcgKzI3NjgsNyBAQCBPYmplY3RJbXAg
KkxTU2VyaWFsaXplcjo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRn
ZTxMU1NlcmlhbGl6ZXI+KHAxLHN0YXRpY19jYXN0PExTU2VyaWFsaXplcjo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIExTU2VyaWFsaXplcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K1ZhbHVlSW1wICpMU1NlcmlhbGl6ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PExTU2VyaWFsaXplcj4ocDEsc3RhdGljX2Nhc3Q8TFNT
ZXJpYWxpemVyOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI3ODEsMjEgKzI3ODEsMjEgQEAgYm9v
bCBMU1NlcmlhbGl6ZXJGaWx0ZXI6Omhhc1Byb3BlcnR5KEV4ZQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgTFNTZXJpYWxpemVyRmlsdGVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKkxTU2VyaWFsaXplckZpbHRlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8TFNTZXJpYWxpemVyRmlsdGVyPihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIExTU2VyaWFsaXplckZpbHRlcjo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU1NlcmlhbGl6
ZXJGaWx0ZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9V
TlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLU9iamVjdCBMU1NlcmlhbGl6ZXJGaWx0ZXI6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpMU1NlcmlhbGl6ZXJGaWx0ZXI6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkxTU2VyaWFs
aXplckZpbHRlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yODAzLDcgKzI4MDMs
NyBAQCBPYmplY3RJbXAgKkxTU2VyaWFsaXplckZpbHRlcjo6YnJpZGdlKEV4CiAgICAgcmV0dXJu
IG5ldyBET01CcmlkZ2U8TFNTZXJpYWxpemVyRmlsdGVyPihwMSxzdGF0aWNfY2FzdDxMU1Nlcmlh
bGl6ZXJGaWx0ZXI6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBMU1NlcmlhbGl6ZXJGaWx0
ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqTFNTZXJpYWxpemVyRmls
dGVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9i
amVjdDxMU1NlcmlhbGl6ZXJGaWx0ZXI+KHAxLHN0YXRpY19jYXN0PExTU2VyaWFsaXplckZpbHRl
cjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yODEyLDE1ICsyODEyLDE1IEBAIGJvb2wgTWVkaWFM
aXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUg
PSBMb29rdXA6OmZpbmRFbnRyeSgmTWVkaWFMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYo
ZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTWVkaWFMaXN0UHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IE1lZGlhTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90
by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBib29sIG9rOwogICAgIHVu
c2lnbmVkIGludCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7CiAgICAgaWYob2sgJiYgaSA8IGxl
bmd0aCgpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIE1lZGlh
TGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpNZWRpYUxpc3Q6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBp
bnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwpAQCAtMjg0NiwxMCArMjg0NiwxMCBAQCBNZWRp
YUxpc3QgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdGVkCiAJUV9VTlVTRUQocDEpOyByZXR1
cm4gTWVkaWFMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBNZWRpYUxpc3Q6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTWVkaWFMaXN0OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IE1lZGlhTGlzdFBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBNZWRpYUxpc3RQcm90bzo6
c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3Rv
LT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CkBAIC0yODY1LDEwICsyODY1LDEwIEBAIGJvb2wgTWVkaWFMaXN0OjpwdXRJblBhcmVudHMo
UFVUX01FVEhPRF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBNZWRpYUxpc3Q6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpNZWRpYUxpc3Q6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTWVkaWFMaXN0
UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTWVkaWFMaXN0OjpicmlkZ2UoRXhl
Y1N0YXRlICpwMSkgY29uc3QKQEAgLTI4NzYsNyArMjg3Niw3IEBAIE9iamVjdEltcCAqTWVkaWFM
aXN0OjpicmlkZ2UoRXhlY1N0YXRlICoKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPE1lZGlh
TGlzdD4ocDEsc3RhdGljX2Nhc3Q8TWVkaWFMaXN0OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFs
dWUgTWVkaWFMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKk1lZGlh
TGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01P
YmplY3Q8TWVkaWFMaXN0PihwMSxzdGF0aWNfY2FzdDxNZWRpYUxpc3Q6OlByaXZhdGUgKj4oZCkp
OwogfQpAQCAtMjg4NSwxMyArMjg4NSwxMyBAQCBib29sIE1vdXNlRXZlbnQ6Omhhc1Byb3BlcnR5
KEV4ZWNTdGF0ZSAqCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50
cnkoJk1vdXNlRXZlbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsK
LSAgICBPYmplY3QgcHJvdG8gPSBNb3VzZUV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHBy
b3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90
byA9IE1vdXNlRXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoVUlFdmVudDo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIE1vdXNlRXZlbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTW91c2VFdmVudDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PE1vdXNlRXZlbnRQ
cm90b0Z1bmMsTW91c2VFdmVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAt
MjkxNCwxOCArMjkxNCwxOCBAQCBNb3VzZUV2ZW50IEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVy
aXRlCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gTW91c2VFdmVudDo6bnVsbDsKIH0KIAotVmFsdWUg
TW91c2VFdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpNb3VzZUV2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAg
IE9iamVjdCBwcm90byA9IE1vdXNlRXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gTW91c2VFdmVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoVUlFdmVu
dDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gVUlFdmVudDo6Z2V0KHAxLHAyLHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBNb3VzZUV2ZW50Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqTW91c2VFdmVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBNb3VzZUV2ZW50UHJvdG86
OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTW91c2VFdmVudDo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC0yOTMzLDcgKzI5MzMsNyBAQCBPYmplY3RJbXAgKk1vdXNlRXZlbnQ6
OmJyaWRnZShFeGVjU3RhdGUgCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8TW91c2VFdmVudD4o
cDEsc3RhdGljX2Nhc3Q8TW91c2VFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIE1v
dXNlRXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqTW91c2VFdmVu
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmpl
Y3Q8TW91c2VFdmVudD4ocDEsc3RhdGljX2Nhc3Q8TW91c2VFdmVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CkBAIC0yOTQyLDEzICsyOTQyLDEzIEBAIGJvb2wgTXV0YXRpb25FdmVudDo6aGFzUHJvcGVy
dHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRy
eSgmTXV0YXRpb25FdmVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVl
OwotICAgIE9iamVjdCBwcm90byA9IE11dGF0aW9uRXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gTXV0YXRpb25FdmVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihFdmVudDo6aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIE11dGF0
aW9uRXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTXV0YXRpb25F
dmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0
PE11dGF0aW9uRXZlbnRQcm90b0Z1bmMsTXV0YXRpb25FdmVudD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQpAQCAtMjk3MSwxOCArMjk3MSwxOCBAQCBNdXRhdGlvbkV2ZW50IEtET006
OkVjbWFJbnRlcmZhY2U6OmluaGVyCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gTXV0YXRpb25FdmVu
dDo6bnVsbDsKIH0KIAotVmFsdWUgTXV0YXRpb25FdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpNdXRhdGlvbkV2ZW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IE11dGF0aW9uRXZlbnRQ
cm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTXV0YXRpb25FdmVudFBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoRXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIEV2ZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
T2JqZWN0IE11dGF0aW9uRXZlbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpNdXRhdGlvbkV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICBpZihwMSkgcmV0dXJuIE11dGF0aW9uRXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpNdXRhdGlvbkV2ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTI5OTAsNyArMjk5MCw3IEBAIE9iamVjdEltcCAqTXV0YXRpb25FdmVudDo6YnJpZGdlKEV4ZWNT
dGEKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxNdXRhdGlvbkV2ZW50PihwMSxzdGF0aWNfY2Fz
dDxNdXRhdGlvbkV2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgTXV0YXRpb25FdmVu
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpNdXRhdGlvbkV2ZW50Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxN
dXRhdGlvbkV2ZW50PihwMSxzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50OjpQcml2YXRlICo+KGQp
KTsKIH0KQEAgLTI5OTksMTUgKzI5OTksMTUgQEAgYm9vbCBOYW1lZE5vZGVNYXA6Omhhc1Byb3Bl
cnR5KEV4ZWNTdGF0ZQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVu
dHJ5KCZOYW1lZE5vZGVNYXA6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1
ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBOYW1lZE5vZGVNYXBQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gTmFtZWROb2RlTWFwUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQg
aW50IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsKICAgICBpZihvayAmJiBpIDwgbGVuZ3RoKCkp
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTmFtZWROb2RlTWFw
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKk5hbWVkTm9kZU1hcDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGlu
dCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7CkBAIC0zMDMzLDEwICszMDMzLDEwIEBAIE5hbWVk
Tm9kZU1hcCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcmkKIAlRX1VOVVNFRChwMSk7IHJldHVy
biBOYW1lZE5vZGVNYXA6Om51bGw7CiB9CiAKLVZhbHVlIE5hbWVkTm9kZU1hcDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOYW1lZE5vZGVNYXA6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTmFt
ZWROb2RlTWFwUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IE5hbWVk
Tm9kZU1hcFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKIH0KQEAgLTMwNDcsMTAgKzMwNDcsMTAgQEAgYm9vbCBOYW1lZE5vZGVN
YXA6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
TmFtZWROb2RlTWFwOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAq
TmFtZWROb2RlTWFwOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIE5hbWVkTm9kZU1hcFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0
OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAg
Kk5hbWVkTm9kZU1hcDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zMDU4LDcgKzMw
NTgsNyBAQCBPYmplY3RJbXAgKk5hbWVkTm9kZU1hcDo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0
dXJuIG5ldyBET01SV0JyaWRnZTxOYW1lZE5vZGVNYXA+KHAxLHN0YXRpY19jYXN0PE5hbWVkTm9k
ZU1hcDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIE5hbWVkTm9kZU1hcDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpOYW1lZE5vZGVNYXA6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PE5hbWVkTm9kZU1hcD4o
cDEsc3RhdGljX2Nhc3Q8TmFtZWROb2RlTWFwOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTMwNjcs
MTMgKzMwNjcsMTMgQEAgYm9vbCBOb2RlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLGNvbgog
ewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZOb2RlOjpzX2hh
c2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0g
Tm9kZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBOb2RlUHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKEV2
ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotVmFsdWUgTm9kZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpOb2RlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29r
dXBHZXQ8Tm9kZVByb3RvRnVuYyxOb2RlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CkBAIC0zMTI5LDEwICszMTI5LDEwIEBAIE5vZGUgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJp
dGVkTm9kZUMKIAlRX1VOVVNFRChwMSk7IHJldHVybiBOb2RlOjpudWxsOwogfQogCi1WYWx1ZSBO
b2RlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKk5vZGU6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3Rv
ID0gTm9kZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBOb2RlUHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihFdmVudFRhcmdldDo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gRXZlbnRUYXJnZXQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQpAQCAtMzE1MSwxMCArMzE1MSwxMCBAQCBib29sIE5vZGU6OnB1dEluUGFyZW50cyhQ
VVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTm9kZTo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKk5vZGU6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTm9kZVByb3RvOjpzZWxm
KHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVy
biBOVUxMOwogfQogCiBPYmplY3RJbXAgKk5vZGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtMzE2Miw3ICszMTYyLDcgQEAgT2JqZWN0SW1wICpOb2RlOjpicmlkZ2UoRXhlY1N0YXRl
ICpwMSkgYwogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8Tm9kZT4ocDEsc3RhdGljX2Nhc3Q8
Tm9kZTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIE5vZGU6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqTm9kZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Tm9kZT4ocDEsc3RhdGljX2Nhc3Q8Tm9kZTo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC0zMTcxLDEyICszMTcxLDEyIEBAIGJvb2wgTm9kZUl0ZXJhdG9y
OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29r
dXA6OmZpbmRFbnRyeSgmTm9kZUl0ZXJhdG9yOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkg
cmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTm9kZUl0ZXJhdG9yUHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IE5vZGVJdGVyYXRvclByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihw
cm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIE5vZGVJdGVyYXRvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpOb2RlSXRlcmF0b3I6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGxvb2t1cEdldDxOb2RlSXRlcmF0b3JQcm90b0Z1bmMsTm9kZUl0ZXJhdG9yPihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zMTk5LDE4ICszMTk5LDE4IEBAIE5vZGVJ
dGVyYXRvciBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcmkKIAlRX1VOVVNFRChwMSk7IHJldHVy
biBOb2RlSXRlcmF0b3I6Om51bGw7CiB9CiAKLVZhbHVlIE5vZGVJdGVyYXRvcjo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOb2RlSXRlcmF0b3I6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTm9k
ZUl0ZXJhdG9yUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IE5vZGVJ
dGVyYXRvclByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IE5vZGVJdGVyYXRvcjo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKk5vZGVJdGVyYXRvcjo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBOb2RlSXRlcmF0b3JQcm90bzo6
c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICBy
ZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpOb2RlSXRlcmF0b3I6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtMzIxOCw3ICszMjE4LDcgQEAgT2JqZWN0SW1wICpOb2RlSXRlcmF0
b3I6OmJyaWRnZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPE5vZGVJdGVyYXRv
cj4ocDEsc3RhdGljX2Nhc3Q8Tm9kZUl0ZXJhdG9yOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFs
dWUgTm9kZUl0ZXJhdG9yOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKk5v
ZGVJdGVyYXRvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2Fj
aGVET01PYmplY3Q8Tm9kZUl0ZXJhdG9yPihwMSxzdGF0aWNfY2FzdDxOb2RlSXRlcmF0b3I6OlBy
aXZhdGUgKj4oZCkpOwogfQpAQCAtMzIyNywxNSArMzIyNywxNSBAQCBib29sIE5vZGVMaXN0Ojpo
YXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9v
a3VwOjpmaW5kRW50cnkoJk5vZGVMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0
dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTm9kZUxpc3RQcm90bzo6c2VsZihwMSk7Ci0g
ICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gTm9kZUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBp
bnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwogICAgIGlmKG9rICYmIGkgPCBsZW5ndGgoKSkg
cmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBOb2RlTGlzdDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOb2RlTGlzdDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGludCBpID0gcDIu
dG9BcnJheUluZGV4KCZvayk7CkBAIC0zMjYxLDE4ICszMjYxLDE4IEBAIE5vZGVMaXN0IEtET006
OkVjbWFJbnRlcmZhY2U6OmluaGVyaXRlZE4KIAlRX1VOVVNFRChwMSk7IHJldHVybiBOb2RlTGlz
dDo6bnVsbDsKIH0KIAotVmFsdWUgTm9kZUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqTm9kZUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTm9kZUxpc3RQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAy
KTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTm9kZUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAg
aWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwog
ICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBO
b2RlTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKk5vZGVM
aXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IE5vZGVMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTm9kZUxpc3Q6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzI4MCw3ICszMjgwLDcgQEAgT2JqZWN0SW1w
ICpOb2RlTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdl
PE5vZGVMaXN0PihwMSxzdGF0aWNfY2FzdDxOb2RlTGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAK
LVZhbHVlIE5vZGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKk5v
ZGVMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURP
TU9iamVjdDxOb2RlTGlzdD4ocDEsc3RhdGljX2Nhc3Q8Tm9kZUxpc3Q6OlByaXZhdGUgKj4oZCkp
OwogfQpAQCAtMzI5MywxMiArMzI5MywxMiBAQCBib29sIE5vdGF0aW9uOjpoYXNQcm9wZXJ0eShF
eGVjU3RhdGUgKnAxCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBOb3RhdGlvbjo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOb3RhdGlvbjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Tm90YXRpb24+KHAx
LHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgTm90YXRpb246OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTm90YXRpb246OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoTm9kZTo6aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gTm9kZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CkBAIC0zMzEzLDEwICszMzEzLDEwIEBAIGJvb2wgTm90YXRpb246OnB1dChQVVRfTUVUSE9E
X0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgTm90YXRpb246OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpOb3RhdGlvbjo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTm90YXRpb246
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzMyNCw3ICszMzI0LDcgQEAgT2JqZWN0
SW1wICpOb3RhdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgRE9NUldC
cmlkZ2U8Tm90YXRpb24+KHAxLHN0YXRpY19jYXN0PE5vdGF0aW9uOjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgTm90YXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqTm90YXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNh
Y2hlRE9NT2JqZWN0PE5vdGF0aW9uPihwMSxzdGF0aWNfY2FzdDxOb3RhdGlvbjo6UHJpdmF0ZSAq
PihkKSk7CiB9CkBAIC0zMzM3LDEyICszMzM3LDEyIEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0
aW9uOjpoYXNQcm9wZXJ0eSgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGxvb2t1cEdldFZhbHVlPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqUHJvY2Vzc2luZ0luc3RydWN0
aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKE5vZGU6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzM2MiwxMCArMzM2MiwxMCBAQCBib29sIFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjo6cHV0SW5QYXJlbnRzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzM3Myw3ICszMzczLDcgQEAgT2JqZWN0
SW1wICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmJyaWRnZQogICAgIHJldHVybiBuZXcgRE9NUldC
cmlkZ2U8UHJvY2Vzc2luZ0luc3RydWN0aW9uPihwMSxzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURP
TU9iamVjdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+KHAxLHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zMzg2LDIxICszMzg2LDIxIEBAIGJv
b2wgS0RPTTo6UkdCQ29sb3I6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIEtET006OlJHQkNvbG9yOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKktET006OlJHQkNvbG9yOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxLRE9NOjpSR0JDb2xvcj4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBLRE9NOjpSR0JDb2xvcjo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpLRE9NOjpSR0JDb2xvcjo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VE
KHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0
IEtET006OlJHQkNvbG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqS0RPTTo6UkdCQ29sb3I6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUo
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKktET006OlJHQkNvbG9yOjpicmlkZ2UoRXhlY1N0YXRlICpw
MSkgY29uc3QKQEAgLTM0MDgsNyArMzQwOCw3IEBAIE9iamVjdEltcCAqS0RPTTo6UkdCQ29sb3I6
OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxLRE9NOjpSR0JDb2xvcj4o
cDEsc3RhdGljX2Nhc3Q8S0RPTTo6UkdCQ29sb3I6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1
ZSBLRE9NOjpSR0JDb2xvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpL
RE9NOjpSR0JDb2xvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
Y2FjaGVET01PYmplY3Q8S0RPTTo6UkdCQ29sb3I+KHAxLHN0YXRpY19jYXN0PEtET006OlJHQkNv
bG9yOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM0MTcsMTIgKzM0MTcsMTIgQEAgYm9vbCBSYW5n
ZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMSxjbwogewogICAgIGNvbnN0IEhhc2hFbnRyeSAq
ZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZSYW5nZTo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUp
IHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFJhbmdlUHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IFJhbmdlUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
UmFuZ2U6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqUmFuZ2U6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxSYW5nZVByb3Rv
RnVuYyxSYW5nZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzQ1MCwxOCAr
MzQ1MCwxOCBAQCBSYW5nZSBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRSYW5nCiAJUV9V
TlVTRUQocDEpOyByZXR1cm4gUmFuZ2U6Om51bGw7CiB9CiAKLVZhbHVlIFJhbmdlOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlJhbmdlOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFJhbmdlUHJv
dG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHBy
b3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFJhbmdlUHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1PYmplY3QgUmFuZ2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpSYW5nZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBSYW5nZVByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlJhbmdlOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM0NjksNyArMzQ2OSw3IEBAIE9iamVjdEltcCAq
UmFuZ2U6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSAKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxS
YW5nZT4ocDEsc3RhdGljX2Nhc3Q8UmFuZ2U6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBS
YW5nZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpSYW5nZTo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8UmFuZ2U+
KHAxLHN0YXRpY19jYXN0PFJhbmdlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM0ODIsMjEgKzM0
ODIsMjEgQEAgYm9vbCBSYW5nZUV4Y2VwdGlvbjo6aGFzUHJvcGVydHkoRXhlY1N0YQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgUmFuZ2VFeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqUmFuZ2VFeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPFJhbmdlRXhjZXB0aW9uPihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFJhbmdlRXhjZXB0aW9uOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlJhbmdlRXhjZXB0aW9u
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAx
KTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgUmFuZ2VFeGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpSYW5nZUV4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqUmFuZ2VFeGNlcHRpb246OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzUwNCw3ICszNTA0LDcgQEAgT2JqZWN0SW1wICpSYW5n
ZUV4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPFJhbmdl
RXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxSYW5nZUV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIFJhbmdlRXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlJhbmdlRXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxSYW5nZUV4Y2VwdGlvbj4ocDEsc3RhdGljX2Nhc3Q8
UmFuZ2VFeGNlcHRpb246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzUxNywyMSArMzUxNywyMSBA
QCBib29sIEtET006OlJlY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBLRE9NOjpSZWN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKktET006OlJlY3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGxvb2t1cEdldFZhbHVlPFJlY3Q+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KIAotVmFsdWUgS0RPTTo6UmVjdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpLRE9NOjpSZWN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgS0RPTTo6UmVjdDo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKktET006OlJlY3Q6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKktET006OlJl
Y3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzUzOSw3ICszNTM5LDcgQEAgT2Jq
ZWN0SW1wICpLRE9NOjpSZWN0OjpicmlkZ2UoRXhlY1N0YXRlIAogICAgIHJldHVybiBuZXcgRE9N
QnJpZGdlPEtET006OlJlY3Q+KHAxLHN0YXRpY19jYXN0PEtET006OlJlY3Q6OlByaXZhdGUgKj4o
ZCkpOwogfQogCi1WYWx1ZSBLRE9NOjpSZWN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKktET006OlJlY3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGNhY2hlRE9NT2JqZWN0PEtET006OlJlY3Q+KHAxLHN0YXRpY19jYXN0PEtET006OlJl
Y3Q6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzU1MiwxMiArMzU1MiwxMiBAQCBib29sIFN0eWxl
U2hlZXQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
YWx1ZSBTdHlsZVNoZWV0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlN0
eWxlU2hlZXQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1
cEdldFZhbHVlPFN0eWxlU2hlZXQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAot
VmFsdWUgU3R5bGVTaGVldDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTdHlsZVNoZWV0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzU3NCwxMCArMzU3NCwxMCBAQCBib29sIFN0eWxlU2hlZXQ6
OnB1dEluUGFyZW50cyhQVVRfTUVUSE9ECiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
U3R5bGVTaGVldDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlN0
eWxlU2hlZXQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlN0eWxlU2hlZXQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
MzU4NSw3ICszNTg1LDcgQEAgT2JqZWN0SW1wICpTdHlsZVNoZWV0OjpicmlkZ2UoRXhlY1N0YXRl
IAogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8U3R5bGVTaGVldD4ocDEsc3RhdGljX2Nhc3Q8
U3R5bGVTaGVldDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFN0eWxlU2hlZXQ6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU3R5bGVTaGVldDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8U3R5bGVTaGVldD4o
cDEsc3RhdGljX2Nhc3Q8U3R5bGVTaGVldDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zNTk0LDE1
ICszNTk0LDE1IEBAIGJvb2wgU3R5bGVTaGVldExpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKIHsK
ICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU3R5bGVTaGVldExp
c3Q6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3Qg
cHJvdG8gPSBTdHlsZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTdHls
ZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGludCBpID0gcDIu
dG9BcnJheUluZGV4KCZvayk7CiAgICAgaWYob2sgJiYgaSA8IGxlbmd0aCgpKSByZXR1cm4gdHJ1
ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFN0eWxlU2hlZXRMaXN0OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlN0eWxlU2hlZXRMaXN0OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBw
Mi50b0FycmF5SW5kZXgoJm9rKTsKQEAgLTM2MjgsMTggKzM2MjgsMTggQEAgU3R5bGVTaGVldExp
c3QgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIFN0eWxl
U2hlZXRMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBTdHlsZVNoZWV0TGlzdDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTdHlsZVNoZWV0TGlzdDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTdHls
ZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTdHls
ZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFN0eWxlU2hlZXRMaXN0Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU3R5bGVTaGVldExpc3Q6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU3R5bGVTaGVldExp
c3RQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTdHlsZVNoZWV0TGlzdDo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNjQ3LDcgKzM2NDcsNyBAQCBPYmplY3RJbXAg
KlN0eWxlU2hlZXRMaXN0OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8
U3R5bGVTaGVldExpc3Q+KHAxLHN0YXRpY19jYXN0PFN0eWxlU2hlZXRMaXN0OjpQcml2YXRlICo+
KGQpKTsKIH0KIAotVmFsdWUgU3R5bGVTaGVldExpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqU3R5bGVTaGVldExpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFN0eWxlU2hlZXRMaXN0PihwMSxzdGF0aWNf
Y2FzdDxTdHlsZVNoZWV0TGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zNjU2LDEzICszNjU2
LDEzIEBAIGJvb2wgVGV4dDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMSxjb24KIHsKICAgICBj
b25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmVGV4dDo6c19oYXNoVGFibGUs
cDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFRleHRQcm90
bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1
ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gVGV4dFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihw
cm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihDaGFyYWN0ZXJE
YXRhOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgVGV4dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpU
ZXh0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8
VGV4dFByb3RvRnVuYyxUZXh0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0z
Njg3LDEwICszNjg3LDEwIEBAIFRleHQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdGVkVGV4
dEMKIAlRX1VOVVNFRChwMSk7IHJldHVybiBUZXh0OjpudWxsOwogfQogCi1WYWx1ZSBUZXh0Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlRleHQ6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gVGV4
dFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBUZXh0UHJvdG86OnNl
bGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+
Z2V0KHAxLHAyKTsKICAgICBpZihDaGFyYWN0ZXJEYXRhOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBDaGFyYWN0ZXJEYXRhOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQo
KTsKIH0KQEAgLTM3MDQsMTAgKzM3MDQsMTAgQEAgYm9vbCBUZXh0OjpwdXQoUFVUX01FVEhPRF9B
UkdTKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFRleHQ6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpUZXh0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFRleHRQcm90bzo6c2VsZihwMSk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpUZXh0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM3MTUs
NyArMzcxNSw3IEBAIE9iamVjdEltcCAqVGV4dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGMKICAg
ICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPFRleHQ+KHAxLHN0YXRpY19jYXN0PFRleHQ6OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBUZXh0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlRleHQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGNhY2hlRE9NT2JqZWN0PFRleHQ+KHAxLHN0YXRpY19jYXN0PFRleHQ6OlByaXZhdGUgKj4oZCkp
OwogfQpAQCAtMzcyNCwxMiArMzcyNCwxMiBAQCBib29sIFRyZWVXYWxrZXI6Omhhc1Byb3BlcnR5
KEV4ZWNTdGF0ZSAqCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50
cnkoJlRyZWVXYWxrZXI6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsK
LSAgICBPYmplY3QgcHJvdG8gPSBUcmVlV2Fsa2VyUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHBy
b3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90
byA9IFRyZWVXYWxrZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBUcmVl
V2Fsa2VyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlRyZWVXYWxrZXI6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxUcmVl
V2Fsa2VyUHJvdG9GdW5jLFRyZWVXYWxrZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KQEAgLTM3NTIsMTAgKzM3NTIsMTAgQEAgVHJlZVdhbGtlciBLRE9NOjpFY21hSW50ZXJmYWNl
Ojppbmhlcml0ZQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIFRyZWVXYWxrZXI6Om51bGw7CiB9CiAK
LVZhbHVlIFRyZWVXYWxrZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqVHJlZVdhbGtlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKLSAgICBPYmplY3QgcHJvdG8gPSBUcmVlV2Fsa2VyUHJvdG86OnNlbGYocDEpOwotICAgIGlm
KHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IFRyZWVXYWxrZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJv
dG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFf
VU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0zNzcxLDEwICszNzcx
LDEwIEBAIGJvb2wgVHJlZVdhbGtlcjo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0QKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBUcmVlV2Fsa2VyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqVHJlZVdhbGtlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBUcmVlV2Fsa2VyUHJvdG86OnNlbGYocDEpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqVHJlZVdhbGtlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CkBAIC0zNzgyLDcgKzM3ODIsNyBAQCBPYmplY3RJbXAgKlRyZWVXYWxrZXI6OmJyaWRnZShFeGVj
U3RhdGUgCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxUcmVlV2Fsa2VyPihwMSxzdGF0aWNf
Y2FzdDxUcmVlV2Fsa2VyOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgVHJlZVdhbGtlcjo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpUcmVlV2Fsa2VyOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxUcmVlV2Fs
a2VyPihwMSxzdGF0aWNfY2FzdDxUcmVlV2Fsa2VyOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM3
OTEsMTIgKzM3OTEsMTIgQEAgYm9vbCBUeXBlSW5mbzo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpw
MQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZUeXBlSW5m
bzo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBw
cm90byA9IFR5cGVJbmZvUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFR5cGVJbmZvUHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0
cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgVHlwZUluZm86OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqVHlwZUluZm86OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxUeXBlSW5mb1Byb3RvRnVuYyxUeXBlSW5m
bz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzgxOSwxOCArMzgxOSwxOCBA
QCBUeXBlSW5mbyBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRUCiAJUV9VTlVTRUQocDEp
OyByZXR1cm4gVHlwZUluZm86Om51bGw7CiB9CiAKLVZhbHVlIFR5cGVJbmZvOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlR5cGVJbmZvOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFR5cGVJbmZv
UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFR5cGVJbmZvUHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90
by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1PYmplY3QgVHlwZUluZm86OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpUeXBlSW5mbzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBUeXBlSW5mb1Byb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlR5cGVJbmZvOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM4MzgsNyArMzgz
OCw3IEBAIE9iamVjdEltcCAqVHlwZUluZm86OmJyaWRnZShFeGVjU3RhdGUgKnAKICAgICByZXR1
cm4gbmV3IERPTUJyaWRnZTxUeXBlSW5mbz4ocDEsc3RhdGljX2Nhc3Q8VHlwZUluZm86OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBUeXBlSW5mbzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpUeXBlSW5mbzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gY2FjaGVET01PYmplY3Q8VHlwZUluZm8+KHAxLHN0YXRpY19jYXN0PFR5cGVJbmZv
OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM4NDcsMTMgKzM4NDcsMTMgQEAgYm9vbCBVSUV2ZW50
OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9
IExvb2t1cDo6ZmluZEVudHJ5KCZVSUV2ZW50OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkg
cmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gVUlFdmVudFByb3RvOjpzZWxmKHAxKTsK
LSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVj
dEltcCAqcHJvdG8gPSBVSUV2ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKEV2ZW50OjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgVUlFdmVu
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpVSUV2ZW50OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8VUlFdmVudFByb3Rv
RnVuYyxVSUV2ZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zODgwLDE4
ICszODgwLDE4IEBAIFVJRXZlbnQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdGVkVUkKIAlR
X1VOVVNFRChwMSk7IHJldHVybiBVSUV2ZW50OjpudWxsOwogfQogCi1WYWx1ZSBVSUV2ZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlVJRXZlbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0g
VUlFdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBVSUV2ZW50
UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihFdmVudDo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gRXZlbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1PYmplY3QgVUlFdmVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJ
bXAgKlVJRXZlbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gVUlFdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlVJRXZl
bnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzg5OSw3ICszODk5LDcgQEAgT2Jq
ZWN0SW1wICpVSUV2ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBuZXcgRE9N
QnJpZGdlPFVJRXZlbnQ+KHAxLHN0YXRpY19jYXN0PFVJRXZlbnQ6OlByaXZhdGUgKj4oZCkpOwog
fQogCi1WYWx1ZSBVSUV2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KlVJRXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hl
RE9NT2JqZWN0PFVJRXZlbnQ+KHAxLHN0YXRpY19jYXN0PFVJRXZlbnQ6OlByaXZhdGUgKj4oZCkp
OwogfQpAQCAtMzkwOCwxMiArMzkwOCwxMiBAQCBib29sIFhQYXRoRXZhbHVhdG9yOjpoYXNQcm9w
ZXJ0eShFeGVjU3RhCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50
cnkoJlhQYXRoRXZhbHVhdG9yOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRy
dWU7Ci0gICAgT2JqZWN0IHByb3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7Ci0g
ICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBYUGF0aEV2YWx1YXRvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpYUGF0aEV2YWx1YXRvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBy
ZXR1cm4gbG9va3VwR2V0PFhQYXRoRXZhbHVhdG9yUHJvdG9GdW5jLFhQYXRoRXZhbHVhdG9yPihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zOTM4LDE4ICszOTM4LDE4IEBAIFhQ
YXRoRXZhbHVhdG9yIEtET006OkVjbWFJbnRlcmZhY2U6OmluaGUKIAlRX1VOVVNFRChwMSk7IHJl
dHVybiBYUGF0aEV2YWx1YXRvcjo6bnVsbDsKIH0KIAotVmFsdWUgWFBhdGhFdmFsdWF0b3I6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhFdmFsdWF0
b3I6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnBy
b3RvID0gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBYUGF0aEV2YWx1YXRvcjo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlhQYXRoRXZhbHVhdG9y
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFhQ
YXRoRXZhbHVhdG9yUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqWFBhdGhFdmFs
dWF0b3I6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzk1Nyw3ICszOTU3LDcgQEAg
T2JqZWN0SW1wICpYUGF0aEV2YWx1YXRvcjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcg
RE9NQnJpZGdlPFhQYXRoRXZhbHVhdG9yPihwMSxzdGF0aWNfY2FzdDxYUGF0aEV2YWx1YXRvcjo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFhQYXRoRXZhbHVhdG9yOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoRXZhbHVhdG9yOjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxYUGF0aEV2YWx1YXRvcj4o
cDEsc3RhdGljX2Nhc3Q8WFBhdGhFdmFsdWF0b3I6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzk3
MCwyMSArMzk3MCwyMSBAQCBib29sIFhQYXRoRXhjZXB0aW9uOjpoYXNQcm9wZXJ0eShFeGVjU3Rh
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBYUGF0aEV4Y2VwdGlvbjo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpYUGF0aEV4Y2VwdGlvbjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8WFBhdGhFeGNlcHRp
b24+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgWFBhdGhFeGNlcHRp
b246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhF
eGNlcHRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9V
TlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLU9iamVjdCBYUGF0aEV4Y2VwdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKlhQYXRoRXhjZXB0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWls
dGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVs
bCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpYUGF0aEV4Y2VwdGlvbjo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zOTkyLDcgKzM5OTIsNyBAQCBPYmplY3RJ
bXAgKlhQYXRoRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBET01Ccmlk
Z2U8WFBhdGhFeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PFhQYXRoRXhjZXB0aW9uOjpQcml2YXRl
ICo+KGQpKTsKIH0KIAotVmFsdWUgWFBhdGhFeGNlcHRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqWFBhdGhFeGNlcHRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFhQYXRoRXhjZXB0aW9uPihwMSxzdGF0
aWNfY2FzdDxYUGF0aEV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC00MDAxLDEyICs0
MDAxLDEyIEBAIGJvb2wgWFBhdGhFeHByZXNzaW9uOjpoYXNQcm9wZXJ0eShFeGVjU3QKIHsKICAg
ICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmWFBhdGhFeHByZXNzaW9u
OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHBy
b3RvID0gWFBhdGhFeHByZXNzaW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFhQYXRo
RXhwcmVzc2lvblByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFhQYXRoRXhw
cmVzc2lvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpYUGF0aEV4cHJl
c3Npb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdl
dDxYUGF0aEV4cHJlc3Npb25Qcm90b0Z1bmMsWFBhdGhFeHByZXNzaW9uPihwMSxwMiwmc19oYXNo
VGFibGUsdGhpcyxwMyk7CiB9CkBAIC00MDI5LDE4ICs0MDI5LDE4IEBAIFhQYXRoRXhwcmVzc2lv
biBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmgKIAlRX1VOVVNFRChwMSk7IHJldHVybiBYUGF0aEV4
cHJlc3Npb246Om51bGw7CiB9CiAKLVZhbHVlIFhQYXRoRXhwcmVzc2lvbjo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpYUGF0aEV4cHJlc3Npb246OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gWFBh
dGhFeHByZXNzaW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFhQ
YXRoRXhwcmVzc2lvblByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFhQYXRoRXhwcmVzc2lvbjo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlhQYXRoRXhwcmVzc2lvbjo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBYUGF0aEV4
cHJlc3Npb25Qcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpYUGF0aEV4cHJlc3Np
b246OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDA0OCw3ICs0MDQ4LDcgQEAgT2Jq
ZWN0SW1wICpYUGF0aEV4cHJlc3Npb246OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcgRE9N
QnJpZGdlPFhQYXRoRXhwcmVzc2lvbj4ocDEsc3RhdGljX2Nhc3Q8WFBhdGhFeHByZXNzaW9uOjpQ
cml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgWFBhdGhFeHByZXNzaW9uOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoRXhwcmVzc2lvbjo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8WFBhdGhFeHByZXNzaW9u
PihwMSxzdGF0aWNfY2FzdDxYUGF0aEV4cHJlc3Npb246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAt
NDA1NywxMiArNDA1NywxMiBAQCBib29sIFhQYXRoTlNSZXNvbHZlcjo6aGFzUHJvcGVydHkoRXhl
Y1N0CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlhQYXRo
TlNSZXNvbHZlcjo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAg
IE9iamVjdCBwcm90byA9IFhQYXRoTlNSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihw
cm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBYUGF0aE5TUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBYUGF0aE5TUmVzb2x2ZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
WFBhdGhOU1Jlc29sdmVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBsb29rdXBHZXQ8WFBhdGhOU1Jlc29sdmVyUHJvdG9GdW5jLFhQYXRoTlNSZXNvbHZlcj4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNDA5MCwxOCArNDA5MCwxOCBAQCBYUGF0
aE5TUmVzb2x2ZXIgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oCiAJUV9VTlVTRUQocDEpOyByZXR1
cm4gWFBhdGhOU1Jlc29sdmVyOjpudWxsOwogfQogCi1WYWx1ZSBYUGF0aE5TUmVzb2x2ZXI6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhOU1Jlc29s
dmVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBw
cm90byA9IFhQYXRoTlNSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAq
cHJvdG8gPSBYUGF0aE5TUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VE
KHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBYUGF0aE5TUmVzb2x2
ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpYUGF0aE5TUmVz
b2x2ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gWFBhdGhOU1Jlc29sdmVyUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqWFBh
dGhOU1Jlc29sdmVyOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQxMDksNyArNDEw
OSw3IEBAIE9iamVjdEltcCAqWFBhdGhOU1Jlc29sdmVyOjpicmlkZ2UoRXhlY1MKICAgICByZXR1
cm4gbmV3IERPTUJyaWRnZTxYUGF0aE5TUmVzb2x2ZXI+KHAxLHN0YXRpY19jYXN0PFhQYXRoTlNS
ZXNvbHZlcjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFhQYXRoTlNSZXNvbHZlcjo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpYUGF0aE5TUmVzb2x2ZXI6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFhQYXRo
TlNSZXNvbHZlcj4ocDEsc3RhdGljX2Nhc3Q8WFBhdGhOU1Jlc29sdmVyOjpQcml2YXRlICo+KGQp
KTsKIH0KQEAgLTQxMjIsMTIgKzQxMjIsMTIgQEAgYm9vbCBYUGF0aE5hbWVzcGFjZTo6aGFzUHJv
cGVydHkoRXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgWFBhdGhOYW1lc3Bh
Y2U6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhOYW1lc3BhY2U6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVl
PFhQYXRoTmFtZXNwYWNlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVl
IFhQYXRoTmFtZXNwYWNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlhQYXRoTmFtZXNwYWNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIGlmKE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6OmdldChw
MSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDE0MiwxMCArNDE0MiwxMCBA
QCBib29sIFhQYXRoTmFtZXNwYWNlOjpwdXQoUFVUX01FVEhPRF9BUkdTCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1PYmplY3QgWFBhdGhOYW1lc3BhY2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpYUGF0aE5hbWVzcGFjZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRp
bk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwo
KSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqWFBhdGhOYW1lc3BhY2U6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDE1Myw3ICs0MTUzLDcgQEAgT2JqZWN0SW1w
ICpYUGF0aE5hbWVzcGFjZTo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgRE9NUldCcmlk
Z2U8WFBhdGhOYW1lc3BhY2U+KHAxLHN0YXRpY19jYXN0PFhQYXRoTmFtZXNwYWNlOjpQcml2YXRl
ICo+KGQpKTsKIH0KIAotVmFsdWUgWFBhdGhOYW1lc3BhY2U6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqWFBhdGhOYW1lc3BhY2U6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFhQYXRoTmFtZXNwYWNlPihwMSxzdGF0
aWNfY2FzdDxYUGF0aE5hbWVzcGFjZTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC00MTYyLDEyICs0
MTYyLDEyIEBAIGJvb2wgWFBhdGhSZXN1bHQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAKIHsKICAg
ICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmWFBhdGhSZXN1bHQ6OnNf
aGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8g
PSBYUGF0aFJlc3VsdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBYUGF0aFJlc3VsdFBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFhQYXRoUmVzdWx0OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoUmVzdWx0OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8WFBhdGhSZXN1bHRQcm90b0Z1
bmMsWFBhdGhSZXN1bHQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTQxOTAs
MTggKzQxOTAsMTggQEAgWFBhdGhSZXN1bHQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdAog
CVFfVU5VU0VEKHAxKTsgcmV0dXJuIFhQYXRoUmVzdWx0OjpudWxsOwogfQogCi1WYWx1ZSBYUGF0
aFJlc3VsdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpY
UGF0aFJlc3VsdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBP
YmplY3QgcHJvdG8gPSBYUGF0aFJlc3VsdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdElt
cCAqcHJvdG8gPSBYUGF0aFJlc3VsdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQo
cDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFhQYXRoUmVzdWx0Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqWFBhdGhSZXN1bHQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gWFBhdGhS
ZXN1bHRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVs
bCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpYUGF0aFJlc3VsdDo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00MjA5LDcgKzQyMDksNyBAQCBPYmplY3RJbXAg
KlhQYXRoUmVzdWx0OjpicmlkZ2UoRXhlY1N0YXRlCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8
WFBhdGhSZXN1bHQ+KHAxLHN0YXRpY19jYXN0PFhQYXRoUmVzdWx0OjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgWFBhdGhSZXN1bHQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1
ZUltcCAqWFBhdGhSZXN1bHQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGNhY2hlRE9NT2JqZWN0PFhQYXRoUmVzdWx0PihwMSxzdGF0aWNfY2FzdDxYUGF0aFJlc3Vs
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CkluZGV4OiBrZG9tL2VjbWEvRE9NQnJpZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL0RPTUJyaWRnZS5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2VjbWEvRE9N
QnJpZGdlLmgKLS0tIGtkb20vZWNtYS9ET01CcmlkZ2UuaAk5IEp1bCAyMDA1IDA2OjUzOjU4IC0w
MDAwCTEuMQorKysga2RvbS9lY21hL0RPTUJyaWRnZS5oCTggQXVnIDIwMDUgMTg6MDI6MjggLTAw
MDAKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEtKUwogewotCWNsYXNzIFZhbHVlOwor
CWNsYXNzIFZhbHVlSW1wOwogCWNsYXNzIFVTdHJpbmc7CiAJY2xhc3MgRXhlY1N0YXRlOwogfTsK
QEAgLTYxLDIwICs2MSwyMCBAQCBuYW1lc3BhY2UgS0RPTQogCiAJCXR5cGVuYW1lIFQ6OlByaXZh
dGUgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGw7IH0KIAotCQl2aXJ0dWFsIEtKUzo6VmFs
dWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSkgY29uc3QKKwkJdmlydHVhbCBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAogCQl7
CiAJCQlrZERlYnVnKDI2MDA0KSA8PCAiRE9NQnJpZGdlOjpnZXQoKSwgIiA8PCBwcm9wZXJ0eU5h
bWUucXN0cmluZygpIDw8ICIgTmFtZTogIiA8PCBjbGFzc0luZm8oKS0+Y2xhc3NOYW1lIDw8ICIg
T2JqZWN0OiAiIDw8IHRoaXMtPm1faW1wbCA8PCBlbmRsOwogCiAJCQkvLyBMb29rIGZvciBzdGFu
ZGFyZCBwcm9wZXJ0aWVzIChlLmcuIHRob3NlIGluIHRoZSBoYXNodGFibGVzKQogCQkJVCBvYmoo
bV9pbXBsKTsKLQkJCUtKUzo6VmFsdWUgdmFsID0gb2JqLmdldChleGVjLCBwcm9wZXJ0eU5hbWUs
IHRoaXMpOworCQkJS0pTOjpWYWx1ZUltcCAqdmFsID0gb2JqLmdldChleGVjLCBwcm9wZXJ0eU5h
bWUsIHRoaXMpOwogCi0JCQlpZih2YWwudHlwZSgpICE9IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJ
CWlmKHZhbC0+dHlwZSgpICE9IEtKUzo6VW5kZWZpbmVkVHlwZSkKIAkJCQlyZXR1cm4gdmFsOwog
CiAJCQkvLyBOb3QgZm91bmQgLT4gZm9yd2FyZCB0byBPYmplY3RJbXAuCiAJCQl2YWwgPSBLSlM6
Ok9iamVjdEltcDo6Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0JCQlpZih2YWwudHlwZSgpID09
IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJCWlmKHZhbC0+dHlwZSgpID09IEtKUzo6VW5kZWZpbmVk
VHlwZSkKIAkJCQlrZERlYnVnKDI2MDA0KSA8PCAiV0FSTklORzogIiA8PCBwcm9wZXJ0eU5hbWUu
cXN0cmluZygpIDw8ICIgbm90IGZvdW5kIGluLi4uIE5hbWU6ICIgPDwgY2xhc3NJbmZvKCktPmNs
YXNzTmFtZSA8PCAiIE9iamVjdDogIiA8PCBtX2ltcGwgPDwgIiBvbiBsaW5lIDogIiA8PCBleGVj
LT5jb250ZXh0KCkuY3VyU3RtdEZpcnN0TGluZSgpIDw8IGVuZGw7CiAKIAkJCXJldHVybiB2YWw7
CkBAIC0xMDUsNyArMTA1LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6CiAJCURPTVJXQnJp
ZGdlKEtKUzo6RXhlY1N0YXRlICpleGVjLCB0eXBlbmFtZSBUOjpQcml2YXRlICppbXBsKSA6IERP
TUJyaWRnZTxUPihleGVjLCBpbXBsKSB7IH0KIAotCQl2aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3Qg
S0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKQorCQl2aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgS0pTOjpW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKQogCQl7CiAvLwkJCWlmKCEoYXR0ciAmIEtKUzo6SW50
ZXJuYWwpKQogCQkJa2REZWJ1ZygyNjAwNCkgPDwgIkRPTVJXQnJpZGdlOjpwdXQoKSwgIiA8PCBw
cm9wZXJ0eU5hbWUucXN0cmluZygpIDw8ICIgTmFtZTogIiA8PCB0aGlzLT5jbGFzc0luZm8oKS0+
Y2xhc3NOYW1lIDw8ICIgT2JqZWN0OiAiIDw8IHRoaXMtPm1faW1wbCA8PCBlbmRsOwpAQCAtMTI5
LDE5ICsxMjksMTkgQEAgbmFtZXNwYWNlIEtET00KIAogCQlUICppbXBsKCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsOyB9CiAKLQkJdmlydHVhbCBLSlM6OlZhbHVlIGdldChLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CisJCXZpcnR1
YWwgS0pTOjpWYWx1ZUltcCAqZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6Oklk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKIAkJewogCQkJa2REZWJ1ZygyNjAwNCkgPDwg
IkRPTUJyaWRnZUN0b3I6OmdldCgpLCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgIiBO
YW1lOiAiIDw8IGNsYXNzSW5mbygpLT5jbGFzc05hbWUgPDwgIiBPYmplY3Q6ICIgPDwgdGhpcy0+
bV9pbXBsIDw8IGVuZGw7CiAKIAkJCS8vIExvb2sgZm9yIHN0YW5kYXJkIHByb3BlcnRpZXMgKGUu
Zy4gdGhvc2UgaW4gdGhlIGhhc2h0YWJsZXMpCi0JCQlLSlM6OlZhbHVlIHZhbCA9IG1faW1wbC0+
Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcyk7CisJCQlLSlM6OlZhbHVlSW1wICp2YWwgPSBt
X2ltcGwtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMpOwogCi0JCQlpZih2YWwudHlwZSgp
ICE9IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJCWlmKHZhbC0+dHlwZSgpICE9IEtKUzo6VW5kZWZp
bmVkVHlwZSkKIAkJCQlyZXR1cm4gdmFsOwogCiAJCQkvLyBOb3QgZm91bmQgLT4gZm9yd2FyZCB0
byBPYmplY3RJbXAuCiAJCQl2YWwgPSBLSlM6Ok9iamVjdEltcDo6Z2V0KGV4ZWMsIHByb3BlcnR5
TmFtZSk7Ci0JCQlpZih2YWwudHlwZSgpID09IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJCWlmKHZh
bC0+dHlwZSgpID09IEtKUzo6VW5kZWZpbmVkVHlwZSkKIAkJCQlrZERlYnVnKDI2MDA0KSA8PCAi
V0FSTklORzogIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8ICIgbm90IGZvdW5kIGluLi4u
IE5hbWU6ICIgPDwgY2xhc3NJbmZvKCktPmNsYXNzTmFtZSA8PCAiIE9iamVjdDogIiA8PCBtX2lt
cGwgPDwgIiBvbiBsaW5lIDogIiA8PCBleGVjLT5jb250ZXh0KCkuY3VyU3RtdEZpcnN0TGluZSgp
IDw8IGVuZGw7CiAKIAkJCXJldHVybiB2YWw7CkluZGV4OiBrZG9tL2VjbWEvRE9NTG9va3VwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL0RPTUxv
b2t1cC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtcCAtdSAtcjEuNCBrZG9tL2Vj
bWEvRE9NTG9va3VwLmgKLS0tIGtkb20vZWNtYS9ET01Mb29rdXAuaAk3IEF1ZyAyMDA1IDA2OjE3
OjQ0IC0wMDAwCTEuNAorKysga2RvbS9lY21hL0RPTUxvb2t1cC5oCTggQXVnIDIwMDUgMTg6MDI6
MjkgLTAwMDAKQEAgLTQ0LDEyICs0NCwxMiBAQCBwdWJsaWM6IFwKICAgICBib29sIGhhc1Byb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSkgY29uc3Q7IFwKICAgICBcCiAgICAgLyogZ2V0KCkgbWV0aG9kLCBjYWxsZWQgYnkgRE9N
QnJpZGdlOjpnZXQgKi8gXAotICAgIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpPYmplY3RJ
bXAqIGJyaWRnZSkgY29uc3Q7IFwKKyAgICBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6
Ok9iamVjdEltcCogYnJpZGdlKSBjb25zdDsgXAogICAgIFwKICAgICAvKiBDYWxsZWQgYnkgbG9v
a3VwR2V0KCkuIEF1dG8tZ2VuZXJhdGVkLiBGb3J3YXJkcyB0byB0aGUgcGFyZW50IHdoaWNoIGhh
cyB0aGUgZ2l2ZW4gcHJvcGVydHkuICovIFwKLSAgICBLSlM6OlZhbHVlIGdldEluUGFyZW50cyhL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IGNvbnN0IEtKUzo6T2JqZWN0SW1wKiBicmlkZ2UpIGNvbnN0OyBcCisgICAgS0pTOjpWYWx1ZUlt
cCAqZ2V0SW5QYXJlbnRzKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpPYmplY3RJbXAqIGJyaWRnZSkgY29uc3Q7IFwK
ICAgICBcCi0gICAgS0pTOjpPYmplY3QgcHJvdG90eXBlKEtKUzo6RXhlY1N0YXRlICpleGVjKSBj
b25zdDtcCisgICAgS0pTOjpPYmplY3RJbXAgKnByb3RvdHlwZShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YykgY29uc3Q7XAogCVwKIAlLSlM6Ok9iamVjdEltcCAqYnJpZGdlKEtKUzo6RXhlY1N0YXRlICop
IGNvbnN0OyBcCiAgICAgXApAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6IFwKICAqLwogI2RlZmlu
ZSBLRE9NX0dFVCBcCiAgICAgS0RPTV9HRVRfQ09NTU9OIFwKLSAgICBLSlM6OlZhbHVlIGNhY2hl
KEtKUzo6RXhlY1N0YXRlICpleGVjKSBjb25zdDsgCisgICAgS0pTOjpWYWx1ZUltcCAqY2FjaGUo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OyAKIAogLyoqCiAgKiBTYW1lIGFzIEtET01fR0VU
LCBidXQgZm9yIGJhc2UgY2xhc3NlcyhrYWx5cHR1cyBoZWxwcyBmaW5kaW5nIHRoZW0pLiBUaGUg
CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzogXAogICovCiAjZGVmaW5lIEtET01fQkFTRUNMQVNT
X0dFVCBcCiAgICAgS0RPTV9HRVRfQ09NTU9OIFwKLSAgICB2aXJ0dWFsIEtKUzo6VmFsdWUgY2Fj
aGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OyAKKyAgICB2aXJ0dWFsIEtKUzo6VmFsdWVJ
bXAgKmNhY2hlKEtKUzo6RXhlY1N0YXRlICpleGVjKSBjb25zdDsgCiAKIC8qKgogICogRm9yIHJl
YWQtd3JpdGUgY2xhc3NlcyBvbmx5LCBpLmUuIHRob3NlIHdoaWNoIHN1cHBvcnQgcHV0KCkuCkBA
IC03OSwxMSArNzksMTEgQEAgcHVibGljOiBcCiAgICAgXAogICAgIC8qIHB1dCgpIG1ldGhvZCwg
Y2FsbGVkIGJ5IERPTUJyaWRnZTo6cHV0ICovIFwKICAgICBib29sIHB1dChLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFwKLQkJCSBjb25z
dCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOyBcCisJCQkgS0pTOjpWYWx1ZUltcCAqdmFs
dWUsIGludCBhdHRyKTsgXAogCVwKICAgICAvKiBDYWxsZWQgYnkgbG9va3VwUHV0LiBBdXRvLWdl
bmVyYXRlZC4gTG9va3MgaW4gaGFzaHRhYmxlLCBmb3J3YXJkcyB0byBwYXJlbnRzLiAqLyBcCiAg
ICAgYm9vbCBwdXRJblBhcmVudHMoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBcCi0JCQkJCSAgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUs
IGludCBhdHRyKTsKKwkJCQkJICBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCiAv
KioKICAqIEZvciBjbGFzc2VzIHdoaWNoIGluaGVyaXQgYSByZWFkLXdyaXRlIGNsYXNzLCAKQEAg
LTkyLDcgKzkyLDcgQEAgcHVibGljOiBcCiAjZGVmaW5lIEtET01fRk9SV0FSRFBVVCBcCiAgICAg
XAogICAgIC8qIHB1dCgpIG1ldGhvZCwgY2FsbGVkIGJ5IERPTUJyaWRnZTo6cHV0ICovIFwKLSAg
ICBib29sIHB1dChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisgICAgYm9v
bCBwdXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCiAvKioKICAqIFVzZWQg
aW4gZ2VuZXJhdGVkYXRhLmNwcApAQCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzogXAogICogQHBh
cmFtIHA0IGF0dHIKICAqIEBpbnRlcm5hbAogICovCi0jZGVmaW5lIFBVVF9NRVRIT0RfQVJHUyBL
SlM6OkV4ZWNTdGF0ZSAqcDEsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcDIsIGNvbnN0IEtKUzo6
VmFsdWUgJnAzLCBpbnQgcDQKKyNkZWZpbmUgUFVUX01FVEhPRF9BUkdTIEtKUzo6RXhlY1N0YXRl
ICpwMSwgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwMiwgS0pTOjpWYWx1ZUltcCAqcDMsIGludCBw
NAogCiBuYW1lc3BhY2UgS0RPTQogewpAQCAtMTM3LDcgKzEzNyw3IEBAIG5hbWVzcGFjZSBLRE9N
CiAJICogQHBhcmFtIHRoaXNPYmogInRoaXMiCiAJICovCiAJdGVtcGxhdGU8Y2xhc3MgRnVuY0lt
cCwgY2xhc3MgVGhpc0ltcD4KLQlpbmxpbmUgS0pTOjpWYWx1ZSBsb29rdXBHZXQoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsCisJaW5saW5lIEtKUzo6VmFsdWVJbXAgKmxvb2t1cEdldChLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywKIAkJCQkJCQkJY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
CiAJCQkJCQkJCWNvbnN0IEtKUzo6SGFzaFRhYmxlICp0YWJsZSwKIAkJCQkJCQkJY29uc3QgVGhp
c0ltcCAqdGhpc09iaiwgLy8gdGhlICdpbXBsJyBvYmplY3QKQEAgLTE2NCw3ICsxNjQsNyBAQCBu
YW1lc3BhY2UgS0RPTQogCSAqIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiBsb29rdXBHZXQgcmVtb3Zl
cyB0aGUgbmVlZCBmb3IgYSBGdW5jSW1wIGNsYXNzLgogCSAqLwogCXRlbXBsYXRlIDxjbGFzcyBU
aGlzSW1wPgotCWlubGluZSBLSlM6OlZhbHVlIGxvb2t1cEdldFZhbHVlKEtKUzo6RXhlY1N0YXRl
ICpleGVjLAorCWlubGluZSBLSlM6OlZhbHVlSW1wICpsb29rdXBHZXRWYWx1ZShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywKIAkJCQkJCQkJCSBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSwKIAkJCQkJCQkJCSBjb25zdCBLSlM6Okhhc2hUYWJsZSAqdGFibGUsCiAJCQkJCQkJCQkgY29u
c3QgVGhpc0ltcCAqdGhpc09iaiwgLy8gdGhlICdpbXBsJyBvYmplY3QKQEAgLTE5Myw3ICsxOTMs
NyBAQCBuYW1lc3BhY2UgS0RPTQogCXRlbXBsYXRlIDxjbGFzcyBUaGlzSW1wPgogCWlubGluZSBi
b29sIGxvb2t1cFB1dChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywKIAkJCQkJCSAgY29uc3QgS0pTOjpJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCi0JCQkJCQkgIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVl
LAorCQkJCQkJICBLSlM6OlZhbHVlSW1wICp2YWx1ZSwKIAkJCQkJCSAgaW50IGF0dHIsCiAJCQkJ
CQkgIGNvbnN0IEtKUzo6SGFzaFRhYmxlICp0YWJsZSwKIAkJCQkJCSAgVGhpc0ltcCAqdGhpc09i
aikKQEAgLTIyMSw3ICsyMjEsNyBAQCBuYW1lc3BhY2UgS0RPTQogCiAvLyBVc2VmdWwgbWFjcm9z
IGZvciBkZWFsaW5nIHdpdGggZWNtYSBjb25zdHJ1Y3RvcnMgKGVudW0gdHlwZXMsIGZvciBleGFt
cGxlKQogI2RlZmluZSBFQ01BX0lNUExFTUVOVF9DT05TVFJVQ1RPUihTcGFjZSwgQ2xhc3NOYW1l
LCBDbGFzcykgXAotIEtKUzo6VmFsdWUgQ2xhc3NOYW1lOjpnZXQoS0pTOjpFeGVjU3RhdGUgKiwg
Y29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6T2JqZWN0SW1w
ICopIGNvbnN0IHsgXAorIEtKUzo6VmFsdWVJbXAgKkNsYXNzTmFtZTo6Z2V0KEtKUzo6RXhlY1N0
YXRlICosIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6Ok9i
amVjdEltcCAqKSBjb25zdCB7IFwKICBjb25zdCBLSlM6Okhhc2hFbnRyeSAqZW50cnkgPSBLSlM6
Okxvb2t1cDo6ZmluZEVudHJ5KCZzX2hhc2hUYWJsZSwgcHJvcGVydHlOYW1lKTsgXAogIGlmKGVu
dHJ5KSBcCiAgICByZXR1cm4gS0pTOjpOdW1iZXIoZW50cnktPnZhbHVlKTsgXApAQCAtMjMwLDEy
ICsyMzAsMTEgQEAgbmFtZXNwYWNlIEtET00KICBib29sIENsYXNzTmFtZTo6aGFzUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKiwgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNv
bnN0IHsgXAogICByZXR1cm4gS0pTOjpMb29rdXA6OmZpbmRFbnRyeSgmc19oYXNoVGFibGUsIHBy
b3BlcnR5TmFtZSk7IFwKICB9IFwKLSBLSlM6Ok9iamVjdCBDbGFzc05hbWU6OnByb3RvdHlwZShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYykgY29uc3QgeyBcCi0gIGlmKGV4ZWMpIHJldHVybiBleGVjLT5p
bnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7IFwKLSAgcmV0dXJuIEtKUzo6
T2JqZWN0OjpkeW5hbWljQ2FzdChLSlM6Ok51bGwoKSk7IFwKKyBLSlM6Ok9iamVjdEltcCAqQ2xh
c3NOYW1lOjpwcm90b3R5cGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0IHsgXAorICByZXR1
cm4gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOyBcCiAgfSBc
CiAgY29uc3QgS0pTOjpDbGFzc0luZm8gQ2xhc3NOYW1lOjpzX2NsYXNzSW5mbyA9IHsgQ2xhc3Mg
IkNvbnN0cnVjdG9yIiwgMCwgJnNfaGFzaFRhYmxlLCAwIH07IFwKLSBLSlM6OlZhbHVlIFNwYWNl
OjpnZXQjI0NsYXNzTmFtZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYykgeyBcCisgS0pTOjpWYWx1ZUlt
cCAqU3BhY2U6OmdldCMjQ2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlICpleGVjKSB7IFwKICAgcmV0
dXJuIEtET006OmNhY2hlR2xvYmFsQnJpZGdlPENsYXNzTmFtZT4oZXhlYywgIltbIiBDbGFzcyAi
LmNvbnN0cnVjdG9yXV0iKTsgXAogIH0KICAKQEAgLTI0NSwxMyArMjQ0LDEzIEBAIG5hbWVzcGFj
ZSBLRE9NCiAgIGNsYXNzIENsYXNzTmFtZSA6IHB1YmxpYyBLSlM6Ok9iamVjdEltcCB7IFwKICAg
cHVibGljOiBcCiAgICAgQ2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlICpleGVjKSA6IEtKUzo6T2Jq
ZWN0SW1wKCkge30gXAotICAgIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBj
b25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpPYmplY3RJbXAg
Km9iaikgY29uc3Q7IFwKKyAgICBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6Ok9iamVj
dEltcCAqb2JqKSBjb25zdDsgXAogICAgIGJvb2wgaGFzUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsgXAotICAg
IEtKUzo6T2JqZWN0IHByb3RvdHlwZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7IFwKKyAg
ICBLSlM6Ok9iamVjdEltcCAqcHJvdG90eXBlKEtKUzo6RXhlY1N0YXRlICpleGVjKSBjb25zdDsg
XAogICAgIHN0YXRpYyBjb25zdCBLSlM6OkNsYXNzSW5mbyBzX2NsYXNzSW5mbzsgXAogICAgIHN0
YXRpYyBjb25zdCBzdHJ1Y3QgS0pTOjpIYXNoVGFibGUgc19oYXNoVGFibGU7IFwKICAgfTsgXAot
ICBLSlM6OlZhbHVlIGdldCMjQ2xhc3NOYW1lKEtKUzo6RXhlY1N0YXRlICpleGVjKTsgXAorICBL
SlM6OlZhbHVlSW1wICpnZXQjI0NsYXNzTmFtZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYyk7IFwKICAg
fQogCiAvLyBTYW1lIGFzIGtqcycgREVGSU5FX1BST1RPVFlQRSwgYnV0IHdpdGggYSBwb2ludGVy
IHRvIHRoZSBoYXNodGFibGUgdG9vLCBhbmQgbm8gQ2xhc3NOYW1lIGhlcmUKQEAgLTI2MCwxMiAr
MjU5LDEyIEBAIG5hbWVzcGFjZSBLRE9NCiAgIG5hbWVzcGFjZSBTcGFjZSB7IFwKICAgY2xhc3Mg
Q2xhc3NQcm90byA6IHB1YmxpYyBLSlM6Ok9iamVjdEltcCB7IFwKICAgcHVibGljOiBcCi0gICAg
c3RhdGljIEtKUzo6T2JqZWN0IHNlbGYoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpOyBcCisgICAgc3Rh
dGljIEtKUzo6T2JqZWN0SW1wICpzZWxmKEtKUzo6RXhlY1N0YXRlICpleGVjKTsgXAogICAgIENs
YXNzUHJvdG8oIEtKUzo6RXhlY1N0YXRlICpleGVjICkgXAogICAgICAgOiBLSlM6Ok9iamVjdElt
cCggZXhlYy0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpICkge30gXAog
ICAgIHZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9IFwKICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gaW5mbzsgXAot
ICAgIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7IFwKKyAgICBLSlM6OlZhbHVlSW1wICpnZXQoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBj
b25zdDsgXAogICAgIGJvb2wgaGFzUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsgXAogICAgIFwKICAgICBzdGF0
aWMgY29uc3Qgc3RydWN0IEtKUzo6SGFzaFRhYmxlIHNfaGFzaFRhYmxlOyBcCkBAIC0yNzUsOSAr
Mjc0LDkgQEAgbmFtZXNwYWNlIEtET00KIC8vIHNhbWUgYXMgSU1QTEVNRU5UX1BST1RPVFlQRSBi
dXQgaW4gdGhlIEtET00gbmFtZXNwYWNlLCBhbmQgd2l0aCBDbGFzc05hbWUgaGVyZQogLy8gc28g
dGhhdCBLRE9NX0RFRklORV9QUk9UT1RZUEUgY2FuIGJlIHB1dCBpbiBhIGhlYWRlciBmaWxlICgn
aW5mbycgZGVmaW5lZCBoZXJlKQogI2RlZmluZSBFQ01BX0lNUExFTUVOVF9QUk9UT1RZUEUoU3Bh
Y2UsQ2xhc3NOYW1lLENsYXNzUHJvdG8sQ2xhc3NGdW5jKSBcCi0gICAgS0pTOjpWYWx1ZSBTcGFj
ZTo6Q2xhc3NQcm90bzo6Z2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QgXAorICAgIEtKUzo6VmFsdWVJbXAgKlNwYWNlOjpD
bGFzc1Byb3RvOjpnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lKSBjb25zdCBcCiAgICAgeyBcCi0gICAgICAgIC8qIEtKUzo6VmFsdWUg
cmVzdWx0OyBcCisgICAgICAgIC8qIEtKUzo6VmFsdWVJbXAgKnJlc3VsdDsgXAogICAgICAgICBp
ZiAoS0pTOjpsb29rdXBHZXRPd25GdW5jdGlvbjxDbGFzc0Z1bmMsS0pTOjpPYmplY3RJbXA+KGV4
ZWMsIHByb3BlcnR5TmFtZSwgJnNfaGFzaFRhYmxlLCB0aGlzLCByZXN1bHQpKSBcCiAgICAgICAg
IHJldHVybiByZXN1bHQ7ICAqLyBcCiAgICAgICAgIHJldHVybiBLSlM6OlVuZGVmaW5lZCgpOyBc
CkBAIC0yODcsNyArMjg2LDcgQEAgbmFtZXNwYWNlIEtET00KICAgICB7IC8qc3R1cGlkIGJ1dCB3
ZSBuZWVkIHRoaXMgdG8gaGF2ZSBhIGNvbW1vbiBtYWNybyBmb3IgdGhlIGRlY2xhcmF0aW9uKi8g
XAogICAgICAgcmV0dXJuIEtKUzo6T2JqZWN0SW1wOjpoYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0
eU5hbWUpOyBcCiAgICAgfSBcCi0gICAgS0pTOjpPYmplY3QgU3BhY2U6OkNsYXNzUHJvdG86OnNl
bGYoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIFwKKyAgICBLSlM6Ok9iamVjdEltcCAqU3BhY2U6OkNs
YXNzUHJvdG86OnNlbGYoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIFwKICAgICB7IFwKICAgICAgIHJl
dHVybiBLSlM6OmNhY2hlR2xvYmFsT2JqZWN0PENsYXNzUHJvdG8+KCBleGVjLCAiW1siIENsYXNz
TmFtZSAiLnByb3RvdHlwZV1dIiApOyBcCiAgICAgfSBcCkBAIC0yOTksNyArMjk4LDYgQEAgbmFt
ZXNwYWNlIEtET00KICAgcHVibGljOiBcCiAgICAgQ2xhc3NGdW5jKEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgaSwgaW50IGxlbikgXAogICAgICAgIDogS0pTOjpPYmplY3RJbXAoIC8qcHJvdG8/
ICovICksIGlkKGkpIHsgXAotICAgICAgIEtKUzo6VmFsdWUgcHJvdGVjdCh0aGlzKTsgXAogICAg
ICAgIHB1dChleGVjLCAibGVuZ3RoIiwgS0pTOjpOdW1iZXIobGVuKSwgS0pTOjpEb250RGVsZXRl
IHwgS0pTOjpSZWFkT25seSB8IEtKUzo6RG9udEVudW0pOyBcCiAgICAgfSBcCiAgICAgLyoqIFVz
ZWQgYnkgY2FsbCgpIHRvIGNoZWNrIHRoZSB0eXBlIG9mIHRoaXNPYmouIEdlbmVyYXRlZCBjb2Rl
ICovIFwKQEAgLTMwOCw3ICszMDYsNyBAQCBuYW1lc3BhY2UgS0RPTQogICAgIHZpcnR1YWwgYm9v
bCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gXAogCVwKICAgICAvKiog
WW91IG5lZWQgdG8gaW1wbGVtZW50IHRoYXQgb25lICovIFwKLSAgICB2aXJ0dWFsIEtKUzo6VmFs
dWUgY2FsbChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpPYmplY3QgJnRoaXNPYmosIGNvbnN0
IEtKUzo6TGlzdCAmYXJncyk7IFwKKyAgICB2aXJ0dWFsIEtKUzo6VmFsdWVJbXAgKmNhbGwoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBLSlM6Okxp
c3QgJmFyZ3MpOyBcCiAJXAogICBwcml2YXRlOiBcCiAgICAgaW50IGlkOyBcCkBAIC0zMTksMTAg
KzMxNywxMCBAQCBuYW1lc3BhY2UgS0RPTQogCiAvLyBUbyBiZSB1c2VkIHdoZW4gY2FzdGluZyB0
aGUgdHlwZSBvZiBhbiBhcmd1bWVudAogI2RlZmluZSBLRE9NX0NIRUNLKENsYXNzTmFtZSwgdGhl
T2JqKSBcCi0gICAgQ2xhc3NOYW1lIG9iaiA9IGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpP
YmplY3RJbXAgKj4odGhlT2JqLmltcCgpKSk7IFwKKyAgICBDbGFzc05hbWUgb2JqID0gY2FzdChl
eGVjLCB0aGVPYmopOyBcCiAgICAgaWYob2JqID09IENsYXNzTmFtZTo6bnVsbCkgeyBcCi0JICAg
IGtkRGVidWcoMjYwMDQpIDw8IGtfZnVuY2luZm8gPDwgIiBXcm9uZyBvYmplY3QgdHlwZTogZXhw
ZWN0ZWQgIiA8PCBDbGFzc05hbWU6OnNfY2xhc3NJbmZvLmNsYXNzTmFtZSA8PCAiIGdvdCAiIDw8
IHRoaXNPYmouY2xhc3NJbmZvKCktPmNsYXNzTmFtZSA8PCBlbmRsOyBcCi0gICAgICAgIE9iamVj
dCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsgXAorCSAgICBrZERlYnVnKDI2
MDA0KSA8PCBrX2Z1bmNpbmZvIDw8ICIgV3Jvbmcgb2JqZWN0IHR5cGU6IGV4cGVjdGVkICIgPDwg
Q2xhc3NOYW1lOjpzX2NsYXNzSW5mby5jbGFzc05hbWUgPDwgIiBnb3QgIiA8PCB0aGlzT2JqLT5j
bGFzc0luZm8oKS0+Y2xhc3NOYW1lIDw8IGVuZGw7IFwKKyAgICAgICAgT2JqZWN0SW1wICplcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsgXAogICAgICAgCWV4ZWMtPnNldEV4Y2Vw
dGlvbihlcnIpOyBcCiAJICAgIHJldHVybiBlcnI7IFwKICAgICB9CkBAIC0zMzUsOCArMzMzLDgg
QEAgbmFtZXNwYWNlIEtET00KIC8vIEhlbHBlcnMgdG8gaGlkZSBleGNlcHRpb24gc3R1ZmYuLi4K
IC8vIHVzZWQgd2l0aGluIGdldC9wdXRWYWx1ZVByb3ByZXR5CiAjZGVmaW5lIEtET01fRU5URVJf
U0FGRSB0cnkgewotI2RlZmluZSBLRE9NX0xFQVZFX1NBRkUoRXhjZXB0aW9uKSB9IGNhdGNoKEV4
Y2VwdGlvbjo6UHJpdmF0ZSAqZSkgeyBLSlM6Ok9iamVjdCBlcnIgPSBLSlM6OkVycm9yOjpjcmVh
dGUoZXhlYywgS0pTOjpHZW5lcmFsRXJyb3IsIFFTdHJpbmc6OmZyb21MYXRpbjEoIiUxICUyIiku
YXJnKFFTdHJpbmc6OmZyb21MYXRpbjEoRXhjZXB0aW9uKGUpLnNfY2xhc3NJbmZvLmNsYXNzTmFt
ZSkpLmFyZyhRU3RyaW5nOjpudW1iZXIoZS0+Y29kZSgpKSkubGF0aW4xKCkpOyBlcnIucHV0KGV4
ZWMsICJjb2RlIiwgS0pTOjpOdW1iZXIoZS0+Y29kZSgpKSk7IGV4ZWMtPnNldEV4Y2VwdGlvbihl
cnIpOyB9Ci0jZGVmaW5lIEtET01fTEVBVkVfQ0FMTF9TQUZFKEV4Y2VwdGlvbikgfSBjYXRjaChF
eGNlcHRpb246OlByaXZhdGUgKmUpIHsgS0pTOjpPYmplY3QgZXJyID0gS0pTOjpFcnJvcjo6Y3Jl
YXRlKGV4ZWMsIEtKUzo6R2VuZXJhbEVycm9yLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIlMSAlMiIp
LmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKEV4Y2VwdGlvbihlKS5zX2NsYXNzSW5mby5jbGFzc05h
bWUpKS5hcmcoUVN0cmluZzo6bnVtYmVyKGUtPmNvZGUoKSkpLmxhdGluMSgpKTsgZXJyLnB1dChl
eGVjLCAiY29kZSIsIEtKUzo6TnVtYmVyKGUtPmNvZGUoKSkpOyBleGVjLT5zZXRFeGNlcHRpb24o
ZXJyKTsgcmV0dXJuIGVycjsgfQorI2RlZmluZSBLRE9NX0xFQVZFX1NBRkUoRXhjZXB0aW9uKSB9
IGNhdGNoKEV4Y2VwdGlvbjo6UHJpdmF0ZSAqZSkgeyBLSlM6Ok9iamVjdEltcCAqZXJyID0gS0pT
OjpFcnJvcjo6Y3JlYXRlKGV4ZWMsIEtKUzo6R2VuZXJhbEVycm9yLCBRU3RyaW5nOjpmcm9tTGF0
aW4xKCIlMSAlMiIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKEV4Y2VwdGlvbihlKS5zX2NsYXNz
SW5mby5jbGFzc05hbWUpKS5hcmcoUVN0cmluZzo6bnVtYmVyKGUtPmNvZGUoKSkpLmxhdGluMSgp
KTsgZXJyLT5wdXQoZXhlYywgImNvZGUiLCBLSlM6Ok51bWJlcihlLT5jb2RlKCkpKTsgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7IH0KKyNkZWZpbmUgS0RPTV9MRUFWRV9DQUxMX1NBRkUoRXhjZXB0
aW9uKSB9IGNhdGNoKEV4Y2VwdGlvbjo6UHJpdmF0ZSAqZSkgeyBLSlM6Ok9iamVjdEltcCAqZXJy
ID0gS0pTOjpFcnJvcjo6Y3JlYXRlKGV4ZWMsIEtKUzo6R2VuZXJhbEVycm9yLCBRU3RyaW5nOjpm
cm9tTGF0aW4xKCIlMSAlMiIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKEV4Y2VwdGlvbihlKS5z
X2NsYXNzSW5mby5jbGFzc05hbWUpKS5hcmcoUVN0cmluZzo6bnVtYmVyKGUtPmNvZGUoKSkpLmxh
dGluMSgpKTsgZXJyLT5wdXQoZXhlYywgImNvZGUiLCBLSlM6Ok51bWJlcihlLT5jb2RlKCkpKTsg
ZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7IHJldHVybiBlcnI7IH0KIAogLy8gSnVzdCBhIG1hcmtl
ciBmb3Iga2FseXB0dXMKICNkZWZpbmUgS0RPTV9DQVNUIDsKSW5kZXg6IGtkb20vZWNtYS9FY21h
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2VjbWEv
RWNtYS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
ZWNtYS9FY21hLmNwcAotLS0ga2RvbS9lY21hL0VjbWEuY3BwCTkgSnVsIDIwMDUgMDY6NTM6NTgg
LTAwMDAJMS4xCisrKyBrZG9tL2VjbWEvRWNtYS5jcHAJOCBBdWcgMjAwNSAxODowMjoyOSAtMDAw
MApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8a2pzL2ludGVycHJldGVyLmg+CiAjaW5j
bHVkZSA8a2pzL3Njb3BlX2NoYWluLmg+CisjaW5jbHVkZSA8a2pzL3Byb3RlY3QuaD4KIAogI2lu
Y2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC0xMjksNyArMTMwLDcgQEAgdm9p
ZCBFY21hOjpzZXR1cChDREZJbnRlcmZhY2UgKmludGVyZmFjZQogCWQtPmVjbWFJbnRlcmZhY2Ug
PSBpbnRlcmZhY2UtPmVjbWFJbnRlcmZhY2UoKTsKIAogCS8vIENyZWF0ZSBjb2RlIGludGVycHJl
dGVyCi0JS0pTOjpPYmplY3Qga2pzR2xvYmFsT2JqZWN0KGQtPmdsb2JhbE9iamVjdCk7CisJS0pT
OjpPYmplY3RJbXAgKmtqc0dsb2JhbE9iamVjdChkLT5nbG9iYWxPYmplY3QpOwogCWQtPmludGVy
cHJldGVyID0gbmV3IFNjcmlwdEludGVycHJldGVyKGtqc0dsb2JhbE9iamVjdCwgZC0+ZG9jdW1l
bnQpOwogCiAJLy8gU2V0IG9iamVjdCBwcm90b3R5cGUgZm9yIGdsb2JhbCBvYmplY3QKQEAgLTE1
Myw3ICsxNTQsNyBAQCB2b2lkIEVjbWE6OnNldHVwRG9jdW1lbnQoRG9jdW1lbnRJbXBsICpkCiAJ
ZG9jdW1lbnQtPmRlcmVmKCk7IC8vICdkb2NPYmonIGlzIGhlbGQgaW4gbWVtb3J5IHVudGlsIHRo
ZSBlY21hIGVuZ2luZSBpcyBkZXN0cnVjdGVkLi4uCiB9CiAKLUtKUzo6Q29tcGxldGlvbiBFY21h
OjpldmFsdWF0ZShjb25zdCBLSlM6OlVTdHJpbmcgJmNvZGUsIGNvbnN0IEtKUzo6VmFsdWUgJnRo
aXNWKQorS0pTOjpDb21wbGV0aW9uIEVjbWE6OmV2YWx1YXRlKGNvbnN0IEtKUzo6VVN0cmluZyAm
Y29kZSwgS0pTOjpWYWx1ZUltcCAqdGhpc1YpCiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKIAlrZERl
YnVnKDYwNzApIDw8ICJFY21hOjpldmFsdWF0ZSAiIDw8IGNvZGUucXN0cmluZygpIDw8IGVuZGw7
CkBAIC0xNjIsNyArMTYzLDcgQEAgS0pTOjpDb21wbGV0aW9uIEVjbWE6OmV2YWx1YXRlKGNvbnN0
IEtKUwogCXJldHVybiBkLT5pbnRlcnByZXRlci0+ZXZhbHVhdGUoY29kZSwgdGhpc1YpOwogfQog
Ci1LSlM6Ok9iamVjdCBFY21hOjpnbG9iYWxPYmplY3QoKSBjb25zdAorS0pTOjpPYmplY3RJbXAg
KkVjbWE6Omdsb2JhbE9iamVjdCgpIGNvbnN0CiB7CiAJcmV0dXJuIGQtPmludGVycHJldGVyLT5n
bG9iYWxPYmplY3QoKTsKIH0KQEAgLTE4Miw1NyArMTgzLDU2IEBAIFNjcmlwdEludGVycHJldGVy
ICpFY21hOjppbnRlcnByZXRlcigpIGMKIAlyZXR1cm4gZC0+aW50ZXJwcmV0ZXI7CiB9CiAKLUtK
Uzo6T2JqZWN0IEVjbWE6OmVjbWFMaXN0ZW5lclRvT2JqZWN0KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBjb25zdCBLSlM6OlZhbHVlICZsaXN0ZW5lcikKK0tKUzo6T2JqZWN0SW1wICpFY21hOjplY21h
TGlzdGVuZXJUb09iamVjdChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAqbGlz
dGVuZXIpCiB7Ci0JS0pTOjpPYmplY3QgbGlzdGVuZXJPYmplY3QgPSBLSlM6Ok9iamVjdDo6ZHlu
YW1pY0Nhc3QobGlzdGVuZXIpOwotCWlmKCFsaXN0ZW5lck9iamVjdC5pc1ZhbGlkKCkpCi0JCXJl
dHVybiBLSlM6Ok9iamVjdCgpOworCWlmKCFsaXN0ZW5lci0+aXNPYmplY3QoKSkKKwkJcmV0dXJu
IE5VTEw7CisgICAgICAgIEtKUzo6T2JqZWN0SW1wICpsaXN0ZW5lck9iamVjdCA9IHN0YXRpY19j
YXN0PEtKUzo6T2JqZWN0SW1wICo+KGxpc3RlbmVyKTsKIAkKIAkvLyAnbGlzdGVuZXInIG1heSBi
ZSBhIHNpbXBsZSBlY21hIGZ1bmN0aW9uLi4uCi0JaWYobGlzdGVuZXJPYmplY3QuaW1wbGVtZW50
c0NhbGwoKSkKKwlpZihsaXN0ZW5lck9iamVjdC0+aW1wbGVtZW50c0NhbGwoKSkKIAkJcmV0dXJu
IGxpc3RlbmVyT2JqZWN0OwogCiAJLy8gJ2xpc3RlbmVyJyBwcm9iYWJseSBpcyBhbiBFdmVudExp
c3RlbmVyLAogCS8vIG9iamVjdCBjb250YWluaW5nIGEgJ2hhbmRsZUV2ZW50JyBmdW5jdGlvbi4u
LgotCUtKUzo6VmFsdWUgaGFuZGxlRXZlbnRWYWx1ZSA9IGxpc3RlbmVyT2JqZWN0LmdldChleGVj
LCBLSlM6OklkZW50aWZpZXIoImhhbmRsZUV2ZW50IikpOwotCUtKUzo6T2JqZWN0IGhhbmRsZUV2
ZW50T2JqZWN0ID0gS0pTOjpPYmplY3Q6OmR5bmFtaWNDYXN0KGhhbmRsZUV2ZW50VmFsdWUpOwor
CUtKUzo6VmFsdWVJbXAgKmhhbmRsZUV2ZW50VmFsdWUgPSBsaXN0ZW5lck9iamVjdC0+Z2V0KGV4
ZWMsIEtKUzo6SWRlbnRpZmllcigiaGFuZGxlRXZlbnQiKSk7CisJaWYoIWhhbmRsZUV2ZW50VmFs
dWUtPmlzT2JqZWN0KCkpCisJCXJldHVybiBOVUxMOworICAgICAgICBLSlM6Ok9iamVjdEltcCAq
aGFuZGxlRXZlbnRPYmplY3QgPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCo+KGhhbmRsZUV2
ZW50VmFsdWUpOwogCi0JaWYoIWhhbmRsZUV2ZW50T2JqZWN0LmlzVmFsaWQoKSkKLQkJcmV0dXJu
IEtKUzo6T2JqZWN0KCk7Ci0KLQlpZihoYW5kbGVFdmVudE9iamVjdC5pbXBsZW1lbnRzQ2FsbCgp
KQorCWlmKGhhbmRsZUV2ZW50T2JqZWN0LT5pbXBsZW1lbnRzQ2FsbCgpKQogCQlyZXR1cm4gaGFu
ZGxlRXZlbnRPYmplY3Q7CiAKIAlrZEVycm9yKCkgPDwga19mdW5jaW5mbyA8PCAiIFNwZWNpZmll
ZCBsaXN0ZW5lciBpcyBuZWl0aGVyIGEgZnVuY3Rpb24gbm9yIGFuIG9iamVjdCEiIDw8IGVuZGw7
Ci0JcmV0dXJuIEtKUzo6T2JqZWN0KCk7CisJcmV0dXJuIE5VTEw7CiB9CiAKLUV2ZW50TGlzdGVu
ZXJJbXBsICpFY21hOjpmaW5kRXZlbnRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgS0pTOjpWYWx1ZSAmbGlzdGVuZXIpCitFdmVudExpc3RlbmVySW1wbCAqRWNtYTo6ZmluZEV2
ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWVJbXAgKmxpc3RlbmVy
KQogewogCWlmKCFkKQogCQlyZXR1cm4gMDsKIAkKLQlLSlM6Ok9iamVjdCBsaXN0ZW5lck9iamVj
dCA9IGVjbWFMaXN0ZW5lclRvT2JqZWN0KGV4ZWMsIGxpc3RlbmVyKTsKLQlpZighbGlzdGVuZXJP
YmplY3QuaXNWYWxpZCgpKQorCUtKUzo6T2JqZWN0SW1wICpsaXN0ZW5lck9iamVjdCA9IGVjbWFM
aXN0ZW5lclRvT2JqZWN0KGV4ZWMsIGxpc3RlbmVyKTsKKwlpZighbGlzdGVuZXJPYmplY3QpCiAJ
CXJldHVybiAwOwogCQotCXJldHVybiBkLT5ldmVudExpc3RlbmVyc1tzdGF0aWNfY2FzdDxLSlM6
Ok9iamVjdEltcCAqPihsaXN0ZW5lck9iamVjdC5pbXAoKSldOworCXJldHVybiBkLT5ldmVudExp
c3RlbmVyc1tzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihsaXN0ZW5lck9iamVjdCldOwog
fQogCi1FdmVudExpc3RlbmVySW1wbCAqRWNtYTo6Y3JlYXRlRXZlbnRMaXN0ZW5lcihLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmbGlzdGVuZXIpCitFdmVudExpc3RlbmVy
SW1wbCAqRWNtYTo6Y3JlYXRlRXZlbnRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pT
OjpWYWx1ZUltcCAqbGlzdGVuZXIpCiB7CiAJRXZlbnRMaXN0ZW5lckltcGwgKmV4aXN0aW5nID0g
ZmluZEV2ZW50TGlzdGVuZXIoZXhlYywgbGlzdGVuZXIpOwogCWlmKGV4aXN0aW5nKQogCQlyZXR1
cm4gZXhpc3Rpbmc7CiAJCi0JS0pTOjpPYmplY3QgbGlzdGVuZXJPYmplY3QgPSBlY21hTGlzdGVu
ZXJUb09iamVjdChleGVjLCBsaXN0ZW5lcik7Ci0JaWYoIWxpc3RlbmVyT2JqZWN0LmlzVmFsaWQo
KSkKKwlLSlM6Ok9iamVjdEltcCAqbGlzdGVuZXJPYmplY3QgPSBlY21hTGlzdGVuZXJUb09iamVj
dChleGVjLCBsaXN0ZW5lcik7CisJaWYoIWxpc3RlbmVyT2JqZWN0KQogCQlyZXR1cm4gMDsKIAog
CUV2ZW50TGlzdGVuZXJJbXBsICppID0gbmV3IEV2ZW50TGlzdGVuZXJJbXBsKCk7CiAJaS0+aW5p
dExpc3RlbmVyKGQtPmRvY3VtZW50LCB0cnVlLCBsaXN0ZW5lck9iamVjdCwgbGlzdGVuZXIsIERP
TVN0cmluZygpKTsKIAotCWFkZEV2ZW50TGlzdGVuZXIoaSwgc3RhdGljX2Nhc3Q8S0pTOjpPYmpl
Y3RJbXAgKj4obGlzdGVuZXJPYmplY3QuaW1wKCkpKTsKKwlhZGRFdmVudExpc3RlbmVyKGksIHN0
YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KGxpc3RlbmVyT2JqZWN0KSk7CiAJcmV0dXJuIGk7
CiB9CiAKQEAgLTI1MCwzMSArMjUwLDMxIEBAIEV2ZW50TGlzdGVuZXJJbXBsICpFY21hOjpjcmVh
dGVFdmVudExpc3QKIAkJCXJldHVybiBjdXJyZW50OwogCX0KIAkKLQlzdGF0aWMgS0pTOjpTdHJp
bmcgZXZlbnRTdHJpbmcoImV2ZW50Iik7CisJc3RhdGljIEtKUzo6UHJvdGVjdGVkVmFsdWUgZXZl
bnRTdHJpbmcgPSBLSlM6OlN0cmluZygiZXZlbnQiKTsKIAotCUtKUzo6T2JqZWN0IGNvbnN0ciA9
IGQtPmludGVycHJldGVyLT5idWlsdGluRnVuY3Rpb24oKTsKKwlLSlM6Ok9iamVjdEltcCAqY29u
c3RyID0gZC0+aW50ZXJwcmV0ZXItPmJ1aWx0aW5GdW5jdGlvbigpOwogCUtKUzo6RXhlY1N0YXRl
ICpleGVjID0gZC0+aW50ZXJwcmV0ZXItPmdsb2JhbEV4ZWMoKTsKIAkKIAlLSlM6Okxpc3QgYXJn
czsKIAlhcmdzLmFwcGVuZChldmVudFN0cmluZyk7CiAJYXJncy5hcHBlbmQoS0pTOjpTdHJpbmco
anNDb2RlLnN0cmluZygpKSk7CiAKLQlLSlM6Ok9iamVjdCBvYmogPSBjb25zdHIuY29uc3RydWN0
KGV4ZWMsIGFyZ3MpOworCUtKUzo6T2JqZWN0SW1wICpvYmogPSBjb25zdHItPmNvbnN0cnVjdChl
eGVjLCBhcmdzKTsKIAlpZihleGVjLT5oYWRFeGNlcHRpb24oKSkKIAl7CiAJCWV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CiAKIAkJLy8gZmFpbGVkIHRvIHBhcnNlLCBzbyBsZXQncyBqdXN0IG1ha2Ug
dGhpcyBsaXN0ZW5lciBhIG5vLW9wCi0JCW9iaiA9IEtKUzo6T2JqZWN0KCk7CisJCW9iaiA9IE5V
TEw7CiAJfQogCiAJLy8gU2FmZXR5IGZpcnN0Li4KIAlFdmVudExpc3RlbmVySW1wbCAqaSA9IDA7
Ci0JaWYoIW9iai5pc051bGwoKSAmJiBvYmouaW1wKCkpCisJaWYob2JqKQogCXsKIAkJaSA9IG5l
dyBFdmVudExpc3RlbmVySW1wbCgpOwogCQlpLT5pbml0TGlzdGVuZXIoZC0+ZG9jdW1lbnQsIHRy
dWUsIG9iaiwgb2JqLCBpbnRlcm5hbFR5cGUpOwotCQlhZGRFdmVudExpc3RlbmVyKGksIHN0YXRp
Y19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KG9iai5pbXAoKSkpOworCQlhZGRFdmVudExpc3RlbmVy
KGksIG9iaik7CiAJfQogCWVsc2UKIAkJa2RFcnJvcigpIDw8ICJVbmFibGUgdG8gY3JlYXRlIGV2
ZW50IGxpc3RlbmVyIG9iamVjdCBmb3IgZXZlbnQgdHlwZSBcIiIgPDwgdHlwZSA8PCAiXCIiIDw8
IGVuZGw7CkBAIC0zMjYsNyArMzI2LDcgQEAgS0pTOjpPYmplY3RJbXAgKkVjbWE6OmluaGVyaXRl
ZEdldERPTUNTUwogfQogCiAvLyBIZWxwZXJzIGluIG5hbWVzcGFjZSAnS0RPTScKLUtKUzo6VmFs
dWUgS0RPTTo6Z2V0RE9NTm9kZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgTm9kZSBuKQorS0pTOjpW
YWx1ZUltcCAqS0RPTTo6Z2V0RE9NTm9kZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgTm9kZSBuKQog
ewogCUtKUzo6T2JqZWN0SW1wICpyZXQgPSAwOwogCWlmKG4gPT0gTm9kZTo6bnVsbCkKQEAgLTM1
NCwxMiArMzU0LDEyIEBAIEtKUzo6VmFsdWUgS0RPTTo6Z2V0RE9NTm9kZShLSlM6OkV4ZWNTdGEK
IAlpZihyZXF1ZXN0KQogCXsKIAkJaWYodG9wUmVxdWVzdCAmJiB0b3BSZXF1ZXN0ICE9IHJlcXVl
c3QpCi0JCQlyZXR1cm4gS0pTOjpWYWx1ZSh0b3BSZXF1ZXN0KTsKKwkJCXJldHVybiB0b3BSZXF1
ZXN0OwogCQkKLQkJcmV0dXJuIEtKUzo6VmFsdWUocmVxdWVzdCk7CisJCXJldHVybiByZXF1ZXN0
OwogCX0KIAllbHNlIGlmKHRvcFJlcXVlc3QpCi0JCXJldHVybiBLSlM6OlZhbHVlKHRvcFJlcXVl
c3QpOworCQlyZXR1cm4gdG9wUmVxdWVzdDsKIAkKIAlzd2l0Y2gobi5ub2RlVHlwZSgpKQogCXsK
QEAgLTQwNCwxMCArNDA0LDEwIEBAIEtKUzo6VmFsdWUgS0RPTTo6Z2V0RE9NTm9kZShLSlM6OkV4
ZWNTdGEKIAl9CiAKIAlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KG4uaGFuZGxlKCksIHJldCk7
Ci0JcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCi1LSlM6OlZhbHVl
IEtET006OmdldERPTUV2ZW50KEtKUzo6RXhlY1N0YXRlICpleGVjLCBFdmVudCBlKQorS0pTOjpW
YWx1ZUltcCAqS0RPTTo6Z2V0RE9NRXZlbnQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEV2ZW50IGUp
CiB7CiAJS0pTOjpPYmplY3RJbXAgKnJldCA9IDA7CiAJaWYoZSA9PSBFdmVudDo6bnVsbCkKQEAg
LTQxOCw3ICs0MTgsNyBAQCBLSlM6OlZhbHVlIEtET006OmdldERPTUV2ZW50KEtKUzo6RXhlY1N0
CiAJLy8gUmV1c2UgZXhpc3RpbmcgYnJpZGdlLCBpZiBwb3NzaWJsZQogCUtKUzo6T2JqZWN0SW1w
ICpyZXF1ZXN0ID0gaW50ZXJwcmV0ZXItPmdldERPTU9iamVjdChlLmhhbmRsZSgpKTsKIAlpZihy
ZXF1ZXN0KQotCQlyZXR1cm4gS0pTOjpWYWx1ZShyZXF1ZXN0KTsKKwkJcmV0dXJuIHJlcXVlc3Q7
CiAKIAkvLyBUcnkgaGFyZCB0byBhc2sgYW55IERPTS9TVkcvSFRNTC93aGF0ZXZlciBpbXBsZW1l
bnRhdGlvbgogCS8vIHdoaWNoIG1heSByZXNpZGUgb24gdG9wIG9mIEtET00sIGhvdyB0byBjb252
ZXJ0IHRoZSBjdXJyZW50CkBAIC00MzMsNyArNDMzLDcgQEAgS0pTOjpWYWx1ZSBLRE9NOjpnZXRE
T01FdmVudChLSlM6OkV4ZWNTdAogCQlpZihyZXQpCiAJCXsKIAkJCWludGVycHJldGVyLT5wdXRE
T01PYmplY3QoZS5oYW5kbGUoKSwgcmV0KTsKLQkJCXJldHVybiBLSlM6OlZhbHVlKHJldCk7CisJ
CQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC00NTMsMTAgKzQ1MywxMCBAQCBLSlM6OlZhbHVl
IEtET006OmdldERPTUV2ZW50KEtKUzo6RXhlY1N0CiAJS0pTOjpJbnRlcnByZXRlcjo6dW5sb2Nr
KCk7CiAKIAlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KGUuaGFuZGxlKCksIHJldCk7Ci0JcmV0
dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCi1LSlM6OlZhbHVlIEtET006
OmdldERPTUNTU1J1bGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIENTU1J1bGUgYykKK0tKUzo6VmFs
dWVJbXAgKktET006OmdldERPTUNTU1J1bGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIENTU1J1bGUg
YykKIHsKIAlLSlM6Ok9iamVjdEltcCAqcmV0ID0gMDsKIAlpZihjID09IENTU1J1bGU6Om51bGwp
CkBAIC00NjcsNyArNDY3LDcgQEAgS0pTOjpWYWx1ZSBLRE9NOjpnZXRET01DU1NSdWxlKEtKUzo6
RXhlYwogCS8vIFJldXNlIGV4aXN0aW5nIGJyaWRnZSwgaWYgcG9zc2libGUKIAlLSlM6Ok9iamVj
dEltcCAqcmVxdWVzdCA9IGludGVycHJldGVyLT5nZXRET01PYmplY3QoYy5oYW5kbGUoKSk7CiAJ
aWYocmVxdWVzdCkKLQkJcmV0dXJuIEtKUzo6VmFsdWUocmVxdWVzdCk7CisJCXJldHVybiByZXF1
ZXN0OwogCiAJLy8gVHJ5IGhhcmQgdG8gYXNrIGFueSBET00vU1ZHL0hUTUwvd2hhdGV2ZXIgaW1w
bGVtZW50YXRpb24KIAkvLyB3aGljaCBtYXkgcmVzaWRlIG9uIHRvcCBvZiBLRE9NLCBob3cgdG8g
Y29udmVydCB0aGUgY3VycmVudApAQCAtNDgwLDcgKzQ4MCw3IEBAIEtKUzo6VmFsdWUgS0RPTTo6
Z2V0RE9NQ1NTUnVsZShLSlM6OkV4ZWMKIAkJaWYocmV0KQogCQl7CiAJCQlpbnRlcnByZXRlci0+
cHV0RE9NT2JqZWN0KGMuaGFuZGxlKCksIHJldCk7Ci0JCQlyZXR1cm4gS0pTOjpWYWx1ZShyZXQp
OworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApAQCAtNTA0LDEwICs1MDQsMTAgQEAgS0pTOjpW
YWx1ZSBLRE9NOjpnZXRET01DU1NSdWxlKEtKUzo6RXhlYwogCQlyZXQgPSBjLmJyaWRnZShleGVj
KTsKIAkKIAlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KGMuaGFuZGxlKCksIHJldCk7Ci0JcmV0
dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCi1LSlM6OlZhbHVlIEtET006
OmdldERPTUNTU1ZhbHVlKEtKUzo6RXhlY1N0YXRlICpleGVjLCBDU1NWYWx1ZSBjKQorS0pTOjpW
YWx1ZUltcCAqS0RPTTo6Z2V0RE9NQ1NTVmFsdWUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIENTU1Zh
bHVlIGMpCiB7CiAJS0pTOjpPYmplY3RJbXAgKnJldCA9IDA7CiAJaWYoYyA9PSBDU1NWYWx1ZTo6
bnVsbCkKQEAgLTUxOCw3ICs1MTgsNyBAQCBLSlM6OlZhbHVlIEtET006OmdldERPTUNTU1ZhbHVl
KEtKUzo6RXhlCiAJLy8gUmV1c2UgZXhpc3RpbmcgYnJpZGdlLCBpZiBwb3NzaWJsZQogCUtKUzo6
T2JqZWN0SW1wICpyZXF1ZXN0ID0gaW50ZXJwcmV0ZXItPmdldERPTU9iamVjdChjLmhhbmRsZSgp
KTsKIAlpZihyZXF1ZXN0KQotCQlyZXR1cm4gS0pTOjpWYWx1ZShyZXF1ZXN0KTsKKwkJcmV0dXJu
IHJlcXVlc3Q7CiAKIAkvLyBUcnkgaGFyZCB0byBhc2sgYW55IERPTS9TVkcvSFRNTC93aGF0ZXZl
ciBpbXBsZW1lbnRhdGlvbgogCS8vIHdoaWNoIG1heSByZXNpZGUgb24gdG9wIG9mIEtET00sIGhv
dyB0byBjb252ZXJ0IHRoZSBjdXJyZW50CkBAIC01MzEsNyArNTMxLDcgQEAgS0pTOjpWYWx1ZSBL
RE9NOjpnZXRET01DU1NWYWx1ZShLSlM6OkV4ZQogCQlpZihyZXQpCiAJCXsKIAkJCWludGVycHJl
dGVyLT5wdXRET01PYmplY3QoYy5oYW5kbGUoKSwgcmV0KTsKLQkJCXJldHVybiBLSlM6OlZhbHVl
KHJldCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC01NDUsMTQgKzU0NSwxNCBAQCBL
SlM6OlZhbHVlIEtET006OmdldERPTUNTU1ZhbHVlKEtKUzo6RXhlCiAJCXJldCA9IGMuYnJpZGdl
KGV4ZWMpOwogCQogCWludGVycHJldGVyLT5wdXRET01PYmplY3QoYy5oYW5kbGUoKSwgcmV0KTsK
LQlyZXR1cm4gS0pTOjpWYWx1ZShyZXQpOworCXJldHVybiByZXQ7CiB9CiAKLURPTVN0cmluZyBL
RE9NOjp0b0RPTVN0cmluZyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAm
dmFsKQorRE9NU3RyaW5nIEtET006OnRvRE9NU3RyaW5nKEtKUzo6RXhlY1N0YXRlICpleGVjLCBL
SlM6OlZhbHVlSW1wICp2YWwpCiB7CiAJLy8gV2UgaGF2ZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVu
IG51bGwgYW5kIGVtcHR5IHN0cmluZ3MhCiAJLy8gVmVyeSBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBk
b20gdGVzdCBzdWl0ZSBydW5uaW5nIGNvcnJlY3RseSA6KQotCVFTdHJpbmcgc3RyaW5nID0gdmFs
LnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKwlRU3RyaW5nIHN0cmluZyA9IHZhbC0+dG9TdHJp
bmcoZXhlYykucXN0cmluZygpOwogCWlmKHN0cmluZyA9PSAibnVsbCIpCiAJCXJldHVybiBET01T
dHJpbmcoKTsKIAllbHNlIGlmKHN0cmluZy5pc0VtcHR5KCkpCkBAIC01NjEsNyArNTYxLDcgQEAg
RE9NU3RyaW5nIEtET006OnRvRE9NU3RyaW5nKEtKUzo6RXhlY1N0YQogCXJldHVybiBET01TdHJp
bmcoc3RyaW5nKTsKIH0KIAotS0pTOjpWYWx1ZSBLRE9NOjpnZXRET01TdHJpbmcoY29uc3QgRE9N
U3RyaW5nICZzdHIpCitLSlM6OlZhbHVlSW1wICpLRE9NOjpnZXRET01TdHJpbmcoY29uc3QgRE9N
U3RyaW5nICZzdHIpCiB7CiAJaWYoc3RyLmlzTnVsbCgpICYmIHN0ci5pc0VtcHR5KCkpCiAJCXJl
dHVybiBLSlM6Ok51bGwoKTsKQEAgLTU2OSwyMCArNTY5LDIwIEBAIEtKUzo6VmFsdWUgS0RPTTo6
Z2V0RE9NU3RyaW5nKGNvbnN0IERPTVMKIAlyZXR1cm4gS0pTOjpTdHJpbmcoc3RyLnN0cmluZygp
KTsKIH0KIAotUVZhcmlhbnQgS0RPTTo6dG9WYXJpYW50KEtKUzo6RXhlY1N0YXRlICpleGVjLCBj
b25zdCBLSlM6OlZhbHVlICZ2YWwpCitRVmFyaWFudCBLRE9NOjp0b1ZhcmlhbnQoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWVJbXAgKnZhbCkKIHsKIAlRVmFyaWFudCByZXM7CiAKLQlz
d2l0Y2godmFsLnR5cGUoKSkKKwlzd2l0Y2godmFsLT50eXBlKCkpCiAJewogCQljYXNlIEtKUzo6
Qm9vbGVhblR5cGU6Ci0JCQlyZXMgPSBRVmFyaWFudCh2YWwudG9Cb29sZWFuKGV4ZWMpLCAwKTsK
KwkJCXJlcyA9IFFWYXJpYW50KHZhbC0+dG9Cb29sZWFuKGV4ZWMpLCAwKTsKIAkJCWJyZWFrOwog
CQljYXNlIEtKUzo6TnVtYmVyVHlwZToKLQkJCXJlcyA9IFFWYXJpYW50KHZhbC50b051bWJlcihl
eGVjKSk7CisJCQlyZXMgPSBRVmFyaWFudCh2YWwtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFr
OwogCQljYXNlIEtKUzo6U3RyaW5nVHlwZToKLQkJCXJlcyA9IFFWYXJpYW50KHZhbC50b1N0cmlu
ZyhleGVjKS5xc3RyaW5nKCkpOworCQkJcmVzID0gUVZhcmlhbnQodmFsLT50b1N0cmluZyhleGVj
KS5xc3RyaW5nKCkpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvLyBldmVyeXRoaW5nIGVs
c2Ugd2lsbCBiZSAnaW52YWxpZCcKSW5kZXg6IGtkb20vZWNtYS9FY21hLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL0VjbWEuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9lY21hL0VjbWEuaAotLS0ga2Rv
bS9lY21hL0VjbWEuaAk5IEp1bCAyMDA1IDA2OjUzOjU4IC0wMDAwCTEuMQorKysga2RvbS9lY21h
L0VjbWEuaAk4IEF1ZyAyMDA1IDE4OjAyOjI5IC0wMDAwCkBAIC02MiwyMCArNjIsMjAgQEAgbmFt
ZXNwYWNlIEtET00KIAogCQl2b2lkIHNldHVwKENERkludGVyZmFjZSAqaW50ZXJmYWNlKTsKIAot
CQlLSlM6OkNvbXBsZXRpb24gZXZhbHVhdGUoY29uc3QgS0pTOjpVU3RyaW5nICZjb2RlLCBjb25z
dCBLSlM6OlZhbHVlICZ0aGlzVik7CisJCUtKUzo6Q29tcGxldGlvbiBldmFsdWF0ZShjb25zdCBL
SlM6OlVTdHJpbmcgJmNvZGUsIEtKUzo6VmFsdWVJbXAgKnRoaXNWKTsKIAotCQlLSlM6Ok9iamVj
dCBnbG9iYWxPYmplY3QoKSBjb25zdDsKKwkJS0pTOjpPYmplY3RJbXAgKmdsb2JhbE9iamVjdCgp
IGNvbnN0OwogCQlLSlM6OkV4ZWNTdGF0ZSAqZ2xvYmFsRXhlYygpIGNvbnN0OwogCQkKIAkJRWNt
YUludGVyZmFjZSAqaW50ZXJmYWNlKCkgY29uc3Q7CiAJCVNjcmlwdEludGVycHJldGVyICppbnRl
cnByZXRlcigpIGNvbnN0OwogCiAJCS8vIEludGVybmFsLCB1c2VkIHRvIGhhbmRsZSBldmVudCBs
aXN0ZW5lcnMKLQkJS0pTOjpPYmplY3QgZWNtYUxpc3RlbmVyVG9PYmplY3QoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IEtKUzo6VmFsdWUgJmxpc3RlbmVyKTsKKwkJS0pTOjpPYmplY3RJbXAg
KmVjbWFMaXN0ZW5lclRvT2JqZWN0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6OlZhbHVlSW1w
ICpsaXN0ZW5lcik7CiAKIAkJRXZlbnRMaXN0ZW5lckltcGwgKmNyZWF0ZUV2ZW50TGlzdGVuZXIo
Y29uc3QgRE9NU3RyaW5nICZ0eXBlLCBjb25zdCBET01TdHJpbmcgJmpzQ29kZSk7Ci0JCUV2ZW50
TGlzdGVuZXJJbXBsICpjcmVhdGVFdmVudExpc3RlbmVyKEtKUzo6RXhlY1N0YXRlICpleGVjLCBj
b25zdCBLSlM6OlZhbHVlICZsaXN0ZW5lcik7Ci0JCUV2ZW50TGlzdGVuZXJJbXBsICpmaW5kRXZl
bnRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmbGlzdGVu
ZXIpOworCQlFdmVudExpc3RlbmVySW1wbCAqY3JlYXRlRXZlbnRMaXN0ZW5lcihLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAqbGlzdGVuZXIpOworCQlFdmVudExpc3RlbmVySW1w
bCAqZmluZEV2ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWVJbXAg
Kmxpc3RlbmVyKTsKIAogCQl2b2lkIGFkZEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lckltcGwg
Kmxpc3RlbmVyLCBLSlM6Ok9iamVjdEltcCAqaW1wKTsKIAkJdm9pZCByZW1vdmVFdmVudExpc3Rl
bmVyKEtKUzo6T2JqZWN0SW1wICppbXApOwpAQCAtMTAyLDMzICsxMDIsMzIgQEAgbmFtZXNwYWNl
IEtET00KIAl9OwogCiAJLy8gSGVscGVycwotCUtKUzo6VmFsdWUgZ2V0RE9NTm9kZShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgTm9kZSBuKTsKLQlLSlM6OlZhbHVlIGdldERPTUV2ZW50KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBFdmVudCBlKTsKLQlLSlM6OlZhbHVlIGdldERPTUNTU1J1bGUoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIENTU1J1bGUgYyk7Ci0JS0pTOjpWYWx1ZSBnZXRET01DU1NWYWx1ZShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgQ1NTVmFsdWUgYyk7CisJS0pTOjpWYWx1ZUltcCAqZ2V0RE9N
Tm9kZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgTm9kZSBuKTsKKwlLSlM6OlZhbHVlSW1wICpnZXRE
T01FdmVudChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgRXZlbnQgZSk7CisJS0pTOjpWYWx1ZUltcCAq
Z2V0RE9NQ1NTUnVsZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgQ1NTUnVsZSBjKTsKKwlLSlM6OlZh
bHVlSW1wICpnZXRET01DU1NWYWx1ZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgQ1NTVmFsdWUgYyk7
CiAKLQlLSlM6OlZhbHVlIGdldERPTVN0cmluZyhjb25zdCBET01TdHJpbmcgJnN0cik7CisJS0pT
OjpWYWx1ZUltcCAqZ2V0RE9NU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmc3RyKTsKIAotCURPTVN0
cmluZyB0b0RPTVN0cmluZyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAm
dmFsKTsKLQlRVmFyaWFudCB0b1ZhcmlhbnQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtK
Uzo6VmFsdWUgJnZhbCk7CisJRE9NU3RyaW5nIHRvRE9NU3RyaW5nKEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBLSlM6OlZhbHVlSW1wICp2YWwpOworCVFWYXJpYW50IHRvVmFyaWFudChLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAqdmFsKTsKIAogCS8vIENvbnZlcnQgYmV0d2VlbiBl
Y21hIHZhbHVlcyBhbmQgcmVhbCBrZG9tIG9iamVjdHMKIAkvLyBFeGFtcGxlOiBOb2RlIG15Tm9k
ZSA9IGVjbWFfY2FzdDxOb2RlPihleGVjLCBhcmdzWzBdLCAmdG9Ob2RlKTsKIAkvLyAgICAgICAg
ICBBdHRyIG15QXR0ciA9IGVjbWFfY2FzdDxBdHRyPihleGVjLCBhcmdzWzFdLCAmdG9BdHRyKTsK
IAl0ZW1wbGF0ZTxjbGFzcyBUPgotCVQgZWNtYV9jYXN0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBj
b25zdCBLSlM6OlZhbHVlICZ2YWwsIFQgKGNvbnZGdW5jUHRyKShLSlM6OkV4ZWNTdGF0ZSAqLCBj
b25zdCBLSlM6Ok9iamVjdEltcCAqKSkKKwlUIGVjbWFfY2FzdChLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgS0pTOjpWYWx1ZUltcCAqdmFsLCBUIChjb252RnVuY1B0cikoS0pTOjpFeGVjU3RhdGUgKiwg
Y29uc3QgS0pTOjpPYmplY3RJbXAgKikpCiAJewotCQlLSlM6Ok9iamVjdCBvYmogPSBLSlM6Ok9i
amVjdDo6ZHluYW1pY0Nhc3QodmFsKTsKLQkJaWYob2JqLmlzTnVsbCgpKQorCQlpZighdmFsLT5p
c09iamVjdCgpKQogCQkJcmV0dXJuIFQ6Om51bGw7CiAKLQkJcmV0dXJuIGNvbnZGdW5jUHRyKGV4
ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KG9iai5pbXAoKSkpOworCQlyZXR1cm4g
Y29udkZ1bmNQdHIoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odmFsKSk7CiAJ
fQogCiAJLy8gQ29udmVydCBiZXR3ZWVuIHJlYWwga2RvbSBvYmplY3RzIGFuZCBlY21hIHZhbHVl
cwogCS8vIEV4YW1wbGU6IHJldHVybiBzYWZlX2NhY2hlPEF0dHI+KGV4ZWMsIG15QXR0cik7CiAJ
dGVtcGxhdGU8Y2xhc3MgVD4KLQlLSlM6OlZhbHVlIHNhZmVfY2FjaGUoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIFQgb2JqKQorCUtKUzo6VmFsdWVJbXAgKnNhZmVfY2FjaGUoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIFQgb2JqKQogCXsKIAkJaWYob2JqICE9IFQ6Om51bGwpCiAJCQlyZXR1cm4gb2JqLmNh
Y2hlKGV4ZWMpOwpJbmRleDoga2RvbS9lY21hL0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9lY21hL0dsb2JhbE9iamVjdC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vZWNtYS9HbG9i
YWxPYmplY3QuY3BwCi0tLSBrZG9tL2VjbWEvR2xvYmFsT2JqZWN0LmNwcAk3IEF1ZyAyMDA1IDA2
OjE3OjQ0IC0wMDAwCTEuMgorKysga2RvbS9lY21hL0dsb2JhbE9iamVjdC5jcHAJOCBBdWcgMjAw
NSAxODowMjozMCAtMDAwMApAQCAtOTksNyArOTksNyBAQCBHbG9iYWxPYmplY3Q6On5HbG9iYWxP
YmplY3QoKQogCiBHbG9iYWxPYmplY3QgKkdsb2JhbE9iamVjdDo6cmV0cmlldmVBY3RpdmUoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0JS0pTOjpWYWx1ZUltcCAqaW1wID0gZXhlYy0+aW50ZXJw
cmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCkuaW1wKCk7CisJS0pTOjpWYWx1ZUltcCAqaW1wID0gZXhl
Yy0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCk7CiAJUV9BU1NFUlQoaW1wKTsKIAogCXJl
dHVybiBzdGF0aWNfY2FzdDxHbG9iYWxPYmplY3QgKj4oaW1wKTsKQEAgLTExOCw3ICsxMTgsNyBA
QCBib29sIEdsb2JhbE9iamVjdDo6aGFzUHJvcGVydHkoS0pTOjpFeGVjCiAJcmV0dXJuIHRydWU7
IC8vIFNlZSBLSlM6OldpbmRvdzo6aGFzUHJvcGVydHkKIH0KIAotS0pTOjpWYWx1ZSBHbG9iYWxP
YmplY3Q6OmdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZw
KSBjb25zdAorS0pTOjpWYWx1ZUltcCAqR2xvYmFsT2JqZWN0OjpnZXQoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcCkgY29uc3QKIHsKIAlrZERlYnVnKDI2MDA0
KSA8PCAiR2xvYmFsT2JqZWN0ICgiIDw8IHRoaXMgPDwgIik6OmdldCAiIDw8IHAucXN0cmluZygp
IDw8IGVuZGw7CiAKQEAgLTEzMyw4ICsxMzMsOCBAQCBLSlM6OlZhbHVlIEdsb2JhbE9iamVjdDo6
Z2V0KEtKUzo6RXhlY1N0CiAJfQogCiAJLy8gTG9vayBmb3Igb3ZlcnJpZGVzIGZpcnN0Ci0JS0pT
OjpWYWx1ZSB2YWwgPSBLSlM6Ok9iamVjdEltcDo6Z2V0KGV4ZWMsIHApOwotCWlmKCF2YWwuaXNB
KEtKUzo6VW5kZWZpbmVkVHlwZSkpCisJS0pTOjpWYWx1ZUltcCAqdmFsID0gS0pTOjpPYmplY3RJ
bXA6OmdldChleGVjLCBwKTsKKwlpZih2YWwtPnR5cGUoKSAhPSBLSlM6OlVuZGVmaW5lZFR5cGUp
CiAJCXJldHVybiBpc1NhZmVTY3JpcHQoZXhlYykgPyB2YWwgOiBLSlM6OlVuZGVmaW5lZCgpOwog
CiAJLy8gTm90IHRoZSByaWdodCB3YXkgaW4gdGhlIGxvbmcgcnVuLiBTaG91bGQgdXNlIHJldHJp
ZXZlKG1fZG9jKS4uLgpAQCAtMTQ2LDEyICsxNDYsMTIgQEAgS0pTOjpWYWx1ZSBHbG9iYWxPYmpl
Y3Q6OmdldChLSlM6OkV4ZWNTdAogCQlzd2l0Y2goZW50cnktPnZhbHVlKQogCQl7CiAJCQljYXNl
IEdsb2JhbE9iamVjdENvbnN0YW50czo6V2luZG93OgotCQkJCXJldHVybiBLSlM6OlZhbHVlKGNv
bnN0X2Nhc3Q8R2xvYmFsT2JqZWN0ICo+KHRoaXMpKTsKKwkJCQlyZXR1cm4gY29uc3RfY2FzdDxH
bG9iYWxPYmplY3QgKj4odGhpcyk7CiAJCQljYXNlIEdsb2JhbE9iamVjdENvbnN0YW50czo6RXZ0
OgogCQkJCXJldHVybiBnZXRET01FdmVudChleGVjLCBFdmVudChpbnRlcnByZXRlci0+Y3VycmVu
dEV2ZW50KCkpKTsKIAkJCWNhc2UgR2xvYmFsT2JqZWN0Q29uc3RhbnRzOjpEb2N1bWVudDoKIAkJ
CQkvLyBzcGVjaWFsIGNhc2UsIEVjbWE6OnNldHVwIGNyZWF0ZWQgaXQsIHNvIHdlIGRvbid0IG5l
ZWQgdG8gZG8gaXQKLQkJCQlyZXR1cm4gS0pTOjpWYWx1ZShpbnRlcnByZXRlci0+Z2V0RE9NT2Jq
ZWN0KGQtPmRvY3VtZW50KSk7CisJCQkJcmV0dXJuIGludGVycHJldGVyLT5nZXRET01PYmplY3Qo
ZC0+ZG9jdW1lbnQpOwogCQkJY2FzZSBHbG9iYWxPYmplY3RDb25zdGFudHM6OlNldFRpbWVvdXQ6
CiAJCQljYXNlIEdsb2JhbE9iamVjdENvbnN0YW50czo6Q2xlYXJUaW1lb3V0OgogCQkJY2FzZSBH
bG9iYWxPYmplY3RDb25zdGFudHM6OlNldEludGVydmFsOgpAQCAtMTk0LDcgKzE5NCw3IEBAIEtK
Uzo6VmFsdWUgR2xvYmFsT2JqZWN0OjpnZXQoS0pTOjpFeGVjU3QKIAlyZXR1cm4gS0pTOjpVbmRl
ZmluZWQoKTsKIH0KIAotdm9pZCBHbG9iYWxPYmplY3Q6OnB1dChLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6VmFsdWUg
JnZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgR2xvYmFsT2JqZWN0OjpwdXQoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBLSlM6OlZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAJLy8gSWYgd2UgYXJlIGNhbGxlZCBieSBhbiBpbnRlcm5h
bCBLSlMgY2FsbCwgdGhlbiBkaXJlY3RseSBqdW1wIHRvIE9iamVjdEltcCAtPiBzYXZlcyB0aW1l
CiAJLy8gQWxzbyBhcHBsaWVzIGlmIHdlIGhhdmUgYSBsb2NhbCBvdmVycmlkZSAoZS5nLiAidmFy
IGxvY2F0aW9uIikKQEAgLTI2OCwxOCArMjY4LDE4IEBAIGNvbnN0IEtKUzo6Q2xhc3NJbmZvICpH
bG9iYWxPYmplY3Q6OmNsYXMKIH0KIAogLy8gRWNtYVNjcmlwdCBmdW5jdGlvbiBoYW5kbGluZwot
S0pTOjpWYWx1ZSBHbG9iYWxPYmplY3RGdW5jOjpjYWxsKEtKUzo6RXhlY1N0YXRlICpleGVjLCBL
SlM6Ok9iamVjdCAmdGhpc09iaiwgY29uc3QgS0pTOjpMaXN0ICZhcmdzKQorS0pTOjpWYWx1ZUlt
cCAqR2xvYmFsT2JqZWN0RnVuYzo6Y2FsbChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpPYmpl
Y3RJbXAgKnRoaXNPYmosIGNvbnN0IEtKUzo6TGlzdCAmYXJncykKIHsKLQlpZighdGhpc09iai5p
bmhlcml0cygmR2xvYmFsT2JqZWN0OjpzX2NsYXNzSW5mbykpCisJaWYoIXRoaXNPYmotPmluaGVy
aXRzKCZHbG9iYWxPYmplY3Q6OnNfY2xhc3NJbmZvKSkKIAl7Ci0JCUtKUzo6T2JqZWN0IGVyciA9
IEtKUzo6RXJyb3I6OmNyZWF0ZShleGVjLCBLSlM6OlR5cGVFcnJvcik7CisJCUtKUzo6T2JqZWN0
SW1wICplcnIgPSBLSlM6OkVycm9yOjpjcmVhdGUoZXhlYywgS0pTOjpUeXBlRXJyb3IpOwogCQll
eGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJCi0JR2xvYmFsT2Jq
ZWN0ICpnbG9iYWwgPSBzdGF0aWNfY2FzdDxHbG9iYWxPYmplY3QgKj4odGhpc09iai5pbXAoKSk7
Ci0JS0pTOjpWYWx1ZSB2ID0gYXJnc1swXTsKLQlLSlM6OlVTdHJpbmcgcyA9IHYudG9TdHJpbmco
ZXhlYyk7CisJR2xvYmFsT2JqZWN0ICpnbG9iYWwgPSBzdGF0aWNfY2FzdDxHbG9iYWxPYmplY3Qg
Kj4odGhpc09iaik7CisJS0pTOjpWYWx1ZUltcCAqdiA9IGFyZ3NbMF07CisJS0pTOjpVU3RyaW5n
IHMgPSB2LT50b1N0cmluZyhleGVjKTsKIAlRU3RyaW5nIHN0ciA9IHMucXN0cmluZygpOwogCiAJ
c3dpdGNoKGlkKQpAQCAtMzA1LDcgKzMwNSw3IEBAIEtKUzo6VmFsdWUgR2xvYmFsT2JqZWN0RnVu
Yzo6Y2FsbChLSlM6OkUKIAkJCXJldHVybiBLSlM6OlVuZGVmaW5lZCgpOwogCQljYXNlIEdsb2Jh
bE9iamVjdENvbnN0YW50czo6Q2xlYXJUaW1lb3V0OgogCQljYXNlIEdsb2JhbE9iamVjdENvbnN0
YW50czo6Q2xlYXJJbnRlcnZhbDoKLQkJCWdsb2JhbC0+Y2xlYXJUaW1lb3V0KHYudG9JbnQzMihl
eGVjKSk7CisJCQlnbG9iYWwtPmNsZWFyVGltZW91dCh2LT50b0ludDMyKGV4ZWMpKTsKIAkJCXJl
dHVybiBLSlM6OlVuZGVmaW5lZCgpOwogCQljYXNlIEdsb2JhbE9iamVjdENvbnN0YW50czo6UHJp
bnROb2RlOgogCQl7CkBAIC0zMzYsMTYgKzMzNiwxNSBAQCBLSlM6OlZhbHVlIEdsb2JhbE9iamVj
dEZ1bmM6OmNhbGwoS0pTOjpFCiAJCX0KIAkJY2FzZSBHbG9iYWxPYmplY3RDb25zdGFudHM6OlNl
dEludGVydmFsOgogCQl7Ci0JCQlpZihhcmdzLnNpemUoKSA+PSAyICYmIHYuaXNBKEtKUzo6U3Ry
aW5nVHlwZSkpCisJCQlpZihhcmdzLnNpemUoKSA+PSAyICYmIHYtPmlzU3RyaW5nKCkpCiAJCQl7
Ci0JCQkJaW50IGkgPSBhcmdzWzFdLnRvSW50MzIoZXhlYyk7Ci0JCQkJaW50IHIgPSBnbG9iYWwt
Pmluc3RhbGxUaW1lb3V0KHMsIGFyZ3NbaV0udG9JbnQzMihleGVjKSwgZmFsc2UpOworCQkJCWlu
dCBpID0gYXJnc1sxXS0+dG9JbnQzMihleGVjKTsKKwkJCQlpbnQgciA9IGdsb2JhbC0+aW5zdGFs
bFRpbWVvdXQocywgYXJnc1tpXS0+dG9JbnQzMihleGVjKSwgZmFsc2UpOwogCQkJCXJldHVybiBL
SlM6Ok51bWJlcihyKTsKIAkJCX0KLQkJCWVsc2UgaWYoYXJncy5zaXplKCkgPj0gMiAmJiAhS0pT
OjpPYmplY3Q6OmR5bmFtaWNDYXN0KHYpLmlzTnVsbCgpICYmIEtKUzo6T2JqZWN0OjpkeW5hbWlj
Q2FzdCh2KS5pbXBsZW1lbnRzQ2FsbCgpKQorCQkJZWxzZSBpZihhcmdzLnNpemUoKSA+PSAyICYm
IHYtPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odiktPmltcGxl
bWVudHNDYWxsKCkpCiAJCQl7Ci0JCQkJS0pTOjpWYWx1ZSBmdW5jID0gYXJnc1swXTsKLQkJCQlp
bnQgaSA9IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKwkJCQlpbnQgaSA9IGFyZ3NbMV0tPnRvSW50
MzIoZXhlYyk7CiAJCQkJaW50IHIgPSBnbG9iYWwtPmluc3RhbGxUaW1lb3V0KHMsIGksIGZhbHNl
KTsKIAkJCQlyZXR1cm4gS0pTOjpOdW1iZXIocik7CiAJCQl9CkBAIC0zNTQsMTYgKzM1MywxNSBA
QCBLSlM6OlZhbHVlIEdsb2JhbE9iamVjdEZ1bmM6OmNhbGwoS0pTOjpFCiAJCX0KIAkJY2FzZSBH
bG9iYWxPYmplY3RDb25zdGFudHM6OlNldFRpbWVvdXQ6CiAJCXsKLQkJCWlmKGFyZ3Muc2l6ZSgp
ID09IDIgJiYgdi5pc0EoS0pTOjpTdHJpbmdUeXBlKSkKKwkJCWlmKGFyZ3Muc2l6ZSgpID09IDIg
JiYgdi0+aXNTdHJpbmcoKSkKIAkJCXsKLQkJCQlpbnQgaSA9IGFyZ3NbMV0udG9JbnQzMihleGVj
KTsKKwkJCQlpbnQgaSA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYyk7CiAJCQkJaW50IHIgPSBnbG9i
YWwtPmluc3RhbGxUaW1lb3V0KHMsIGksIHRydWUgLypzaW5nbGUgc2hvdCovKTsKIAkJCQlyZXR1
cm4gS0pTOjpOdW1iZXIocik7CiAJCQl9Ci0JCQllbHNlIGlmKGFyZ3Muc2l6ZSgpID49IDIgJiYg
di5pc0EoS0pTOjpPYmplY3RUeXBlKSAmJiBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QodikuaW1w
bGVtZW50c0NhbGwoKSkKKwkJCWVsc2UgaWYoYXJncy5zaXplKCkgPj0gMiAmJiB2LT5pc09iamVj
dCgpICYmIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHYpLT5pbXBsZW1lbnRzQ2FsbCgp
KQogCQkJewotCQkJCUtKUzo6VmFsdWUgZnVuYyA9IGFyZ3NbMF07Ci0JCQkJaW50IGkgPSBhcmdz
WzFdLnRvSW50MzIoZXhlYyk7CisJCQkJaW50IGkgPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMpOwog
CQkJCWludCByID0gZ2xvYmFsLT5pbnN0YWxsVGltZW91dChzLCBpLCBmYWxzZSk7CiAJCQkJcmV0
dXJuIEtKUzo6TnVtYmVyKHIpOwogCQkJfQpAQCAtMzkyLDcgKzM5MCw3IEBAIHZvaWQgR2xvYmFs
T2JqZWN0OjpjbGVhclRpbWVvdXQoaW50IHRpbWUKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LyBTY2hlZHVsZWRBY3Rpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1TY2hlZHVsZWRBY3Rp
b246OlNjaGVkdWxlZEFjdGlvbihLSlM6Ok9iamVjdCBmdW5jLCBLSlM6Okxpc3QgYXJncywgYm9v
bCBzaW5nbGVTaG90KQorU2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24oS0pTOjpPYmpl
Y3RJbXAgKmZ1bmMsIEtKUzo6TGlzdCBhcmdzLCBib29sIHNpbmdsZVNob3QpCiB7CiAJbV9mdW5j
ID0gZnVuYzsKIAltX2FyZ3MgPSBhcmdzOwpAQCAtNDIxLDEzICs0MTksMTMgQEAgdm9pZCBTY2hl
ZHVsZWRBY3Rpb246OmV4ZWN1dGUoR2xvYmFsT2JqZQogCVNjcmlwdEludGVycHJldGVyICppbnRl
cnByZXRlciA9IGdsb2JhbC0+ZG9jKCktPmVjbWFFbmdpbmUoKS0+aW50ZXJwcmV0ZXIoKTsKIAlp
ZihtX2lzRnVuY3Rpb24pCiAJewotCQlpZihtX2Z1bmMuaW1wbGVtZW50c0NhbGwoKSkKKwkJaWYo
bV9mdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQogCQl7CiAJCQlLSlM6OkV4ZWNTdGF0ZSAqZXhlYyA9
IGludGVycHJldGVyLT5nbG9iYWxFeGVjKCk7Ci0JCQlRX0FTU0VSVChnbG9iYWwgPT0gaW50ZXJw
cmV0ZXItPmdsb2JhbE9iamVjdCgpLmltcCgpKTsKKwkJCVFfQVNTRVJUKGdsb2JhbCA9PSBpbnRl
cnByZXRlci0+Z2xvYmFsT2JqZWN0KCkpOwogCQkJCi0JCQlLSlM6Ok9iamVjdCBvYmooZ2xvYmFs
KTsKLQkJCW1fZnVuYy5jYWxsKGV4ZWMsIG9iaiwgbV9hcmdzKTsgLy8gbm90ZSB0aGF0IGNhbGwo
KSBjcmVhdGVzIGl0cyBvd24gZXhlY3V0aW9uIHN0YXRlIGZvciB0aGUgZnVuYyBjYWxsCisJCQlL
SlM6Ok9iamVjdEltcCAqb2JqKGdsb2JhbCk7CisJCQltX2Z1bmMtPmNhbGwoZXhlYywgb2JqLCBt
X2FyZ3MpOyAvLyBub3RlIHRoYXQgY2FsbCgpIGNyZWF0ZXMgaXRzIG93biBleGVjdXRpb24gc3Rh
dGUgZm9yIHRoZSBmdW5jIGNhbGwKIAkJfQogCX0KIAllbHNlCkBAIC00NjcsOSArNDY1LDkgQEAg
aW50IEdsb2JhbFFPYmplY3Q6Omluc3RhbGxUaW1lb3V0KGNvbnN0IAogCXJldHVybiBpZDsKIH0K
IAotaW50IEdsb2JhbFFPYmplY3Q6Omluc3RhbGxUaW1lb3V0KGNvbnN0IEtKUzo6VmFsdWUgJmZ1
bmMsIEtKUzo6TGlzdCBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQoraW50IEdsb2JhbFFP
YmplY3Q6Omluc3RhbGxUaW1lb3V0KEtKUzo6VmFsdWVJbXAgKmZ1bmMsIEtKUzo6TGlzdCBhcmdz
LCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQogewotCUtKUzo6T2JqZWN0IG9iakZ1bmMgPSBLSlM6
Ok9iamVjdDo6ZHluYW1pY0Nhc3QoZnVuYyk7CisJS0pTOjpPYmplY3RJbXAgKm9iakZ1bmMgPSBz
dGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihmdW5jKTsKIAlpZih0IDwgMTApIHQgPSAxMDsK
IAlpbnQgaWQgPSBzdGFydFRpbWVyKHQpOwogCXNjaGVkdWxlZEFjdGlvbnMuaW5zZXJ0KGlkLCBu
ZXcgU2NoZWR1bGVkQWN0aW9uKG9iakZ1bmMsIGFyZ3MsIHNpbmdsZVNob3QpKTsKSW5kZXg6IGtk
b20vZWNtYS9HbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rZG9tL2VjbWEvR2xvYmFsT2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZWNtYS9HbG9iYWxPYmplY3QuaAotLS0ga2RvbS9lY21h
L0dsb2JhbE9iamVjdC5oCTkgSnVsIDIwMDUgMDY6NTM6NTkgLTAwMDAJMS4xCisrKyBrZG9tL2Vj
bWEvR2xvYmFsT2JqZWN0LmgJOCBBdWcgMjAwNSAxODowMjozMCAtMDAwMApAQCAtMzYsOCArMzYs
OCBAQCBuYW1lc3BhY2UgS0RPTQogCQlHbG9iYWxPYmplY3QoRG9jdW1lbnRJbXBsICpkb2MpOwog
CQl2aXJ0dWFsIH5HbG9iYWxPYmplY3QoKTsKIAotCQl2aXJ0dWFsIEtKUzo6VmFsdWUgZ2V0KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkg
Y29uc3Q7Ci0JCXZpcnR1YWwgdm9pZCBwdXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtK
Uzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50
IGF0dHIgPSBLSlM6Ok5vbmUpOworCQl2aXJ0dWFsIEtKUzo6VmFsdWVJbXAgKmdldChLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0
OworCQl2aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6Oklk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0g
S0pTOjpOb25lKTsKIAkJdmlydHVhbCBib29sIGhhc1Byb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnApIGNvbnN0OwogCiAJCS8vIFJldHVybnMgYSBw
b2ludGVyIHRvIHRoZSBHbG9iYWwgT2JqZWN0IGluIHRoaXMgRWNtYVNjcmlwdCBDb250ZXh0CkBA
IC03MSw3ICs3MSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJY2xhc3MgU2NoZWR1bGVkQWN0aW9uCiAJ
ewogCXB1YmxpYzoKLQkJU2NoZWR1bGVkQWN0aW9uKEtKUzo6T2JqZWN0IGZ1bmMsIEtKUzo6TGlz
dCBhcmdzLCBib29sIHNpbmdsZVNob3QpOworCQlTY2hlZHVsZWRBY3Rpb24oS0pTOjpPYmplY3RJ
bXAgKmZ1bmMsIEtKUzo6TGlzdCBhcmdzLCBib29sIHNpbmdsZVNob3QpOwogCQlTY2hlZHVsZWRB
Y3Rpb24oY29uc3QgUVN0cmluZyAmY29kZSwgYm9vbCBzaW5nbGVTaG90KTsKIAkJflNjaGVkdWxl
ZEFjdGlvbigpOwogCQpAQCAtODAsNyArODAsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXByaXZhdGU6
CiAJCWZyaWVuZCBjbGFzcyBHbG9iYWxRT2JqZWN0OwogCi0JCUtKUzo6T2JqZWN0IG1fZnVuYzsK
KwkJS0pTOjpPYmplY3RJbXAgKm1fZnVuYzsKIAkJS0pTOjpMaXN0IG1fYXJnczsKIAkJUVN0cmlu
ZyBtX2NvZGU7CiAJCWJvb2wgbV9pc0Z1bmN0aW9uOwpAQCAtOTUsNyArOTUsNyBAQCBuYW1lc3Bh
Y2UgS0RPTQogCQl+R2xvYmFsUU9iamVjdCgpOwogCiAJCWludCBpbnN0YWxsVGltZW91dChjb25z
dCBLSlM6OlVTdHJpbmcgJmhhbmRsZXIsIGludCB0LCBib29sIHNpbmdsZVNob3QpOwotCQlpbnQg
aW5zdGFsbFRpbWVvdXQoY29uc3QgS0pTOjpWYWx1ZSAmZnVuYywgS0pTOjpMaXN0IGFyZ3MsIGlu
dCB0LCBib29sIHNpbmdsZVNob3QpOworCQlpbnQgaW5zdGFsbFRpbWVvdXQoS0pTOjpWYWx1ZUlt
cCAqZnVuYywgS0pTOjpMaXN0IGFyZ3MsIGludCB0LCBib29sIHNpbmdsZVNob3QpOwogCQl2b2lk
IGNsZWFyVGltZW91dChpbnQgdGltZXJJZCwgYm9vbCBkZWxBY3Rpb24gPSB0cnVlKTsKIAkJCiAJ
cHVibGljIHNsb3RzOgpJbmRleDoga2RvbS9lY21hL1NjcmlwdEludGVycHJldGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2VjbWEvU2NyaXB0SW50
ZXJwcmV0ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
ZG9tL2VjbWEvU2NyaXB0SW50ZXJwcmV0ZXIuY3BwCi0tLSBrZG9tL2VjbWEvU2NyaXB0SW50ZXJw
cmV0ZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTM6NTkgLTAwMDAJMS4xCisrKyBrZG9tL2VjbWEvU2Ny
aXB0SW50ZXJwcmV0ZXIuY3BwCTggQXVnIDIwMDUgMTg6MDI6MzAgLTAwMDAKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogCVFQdHJEaWN0PEtKUzo6T2JqZWN0SW1wPiBkb21PYmplY3RzOwogfTsK
IAotU2NyaXB0SW50ZXJwcmV0ZXI6OlNjcmlwdEludGVycHJldGVyKGNvbnN0IEtKUzo6T2JqZWN0
ICZnbG9iYWwsIERvY3VtZW50SW1wbCAqZG9jKSA6IEtKUzo6SW50ZXJwcmV0ZXIoZ2xvYmFsKSwg
ZChuZXcgUHJpdmF0ZShkb2MpKQorU2NyaXB0SW50ZXJwcmV0ZXI6OlNjcmlwdEludGVycHJldGVy
KEtKUzo6T2JqZWN0SW1wICpnbG9iYWwsIERvY3VtZW50SW1wbCAqZG9jKSA6IEtKUzo6SW50ZXJw
cmV0ZXIoZ2xvYmFsKSwgZChuZXcgUHJpdmF0ZShkb2MpKQogewogCWlmKCFzX2ludGVycHJldGVy
TGlzdCkKIAkJc19pbnRlcnByZXRlckxpc3QgPSBuZXcgSW50ZXJwcmV0ZXJMaXN0KCk7CkluZGV4
OiBrZG9tL2VjbWEvU2NyaXB0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2VjbWEvU2NyaXB0SW50ZXJwcmV0ZXIuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9lY21hL1NjcmlwdEludGVycHJl
dGVyLmgKLS0tIGtkb20vZWNtYS9TY3JpcHRJbnRlcnByZXRlci5oCTkgSnVsIDIwMDUgMDY6NTM6
NTkgLTAwMDAJMS4xCisrKyBrZG9tL2VjbWEvU2NyaXB0SW50ZXJwcmV0ZXIuaAk4IEF1ZyAyMDA1
IDE4OjAyOjMwIC0wMDAwCkBAIC0yNyw4ICsyNyw4IEBACiAKIG5hbWVzcGFjZSBLSlMKIHsKLQlj
bGFzcyBWYWx1ZTsKLQljbGFzcyBPYmplY3Q7CisJY2xhc3MgVmFsdWVJbXA7CisJY2xhc3MgT2Jq
ZWN0SW1wOwogCWNsYXNzIEludGVycHJldGVyOwogfTsKIApAQCAtNDAsNyArNDAsNyBAQCBuYW1l
c3BhY2UgS0RPTQogCWNsYXNzIFNjcmlwdEludGVycHJldGVyIDogcHVibGljIEtKUzo6SW50ZXJw
cmV0ZXIKIAl7CiAJcHVibGljOgotCQlTY3JpcHRJbnRlcnByZXRlcihjb25zdCBLSlM6Ok9iamVj
dCAmZ2xvYmFsLCBEb2N1bWVudEltcGwgKmRvYyk7CisJCVNjcmlwdEludGVycHJldGVyKEtKUzo6
T2JqZWN0SW1wICpnbG9iYWwsIERvY3VtZW50SW1wbCAqZG9jKTsKIAkJdmlydHVhbCB+U2NyaXB0
SW50ZXJwcmV0ZXIoKTsKIAogCQlEb2N1bWVudEltcGwgKmRvY3VtZW50KCkgY29uc3Q7CkBAIC02
Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBLRE9NCiAKIAkvLyBMb29rdXAgb3IgY3JlYXRlIEpTIG9i
amVjdCBhcm91bmQgYW4gZXhpc3RpbmcgIkRPTSBPYmplY3QiCiAJdGVtcGxhdGU8Y2xhc3MgRE9N
T2JqPgotCWlubGluZSBLSlM6OlZhbHVlIGNhY2hlRE9NT2JqZWN0KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCB0eXBlbmFtZSBET01PYmo6OlByaXZhdGUgKmRvbU9iaikKKwlpbmxpbmUgS0pTOjpWYWx1
ZUltcCAqY2FjaGVET01PYmplY3QoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIHR5cGVuYW1lIERPTU9i
ajo6UHJpdmF0ZSAqZG9tT2JqKQogCXsKIAkJS0pTOjpPYmplY3RJbXAgKnJldCA9IDA7CiAJCWlm
KCFkb21PYmopCkBAIC03NCwxMiArNzQsMTIgQEAgbmFtZXNwYWNlIEtET00KIAogCQlTY3JpcHRJ
bnRlcnByZXRlciAqaW50ZXJwcmV0ZXIgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlciAq
PihleGVjLT5pbnRlcnByZXRlcigpKTsKIAkJaWYoKHJldCA9IGludGVycHJldGVyLT5nZXRET01P
YmplY3QoZG9tT2JqKSkpCi0JCQlyZXR1cm4gS0pTOjpWYWx1ZShyZXQpOworCQkJcmV0dXJuIHJl
dDsKIAkJZWxzZQogCQl7CiAJCQlyZXQgPSBET01PYmooZG9tT2JqKS5icmlkZ2UoZXhlYyk7CiAJ
CQlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KGRvbU9iaiwgcmV0KTsKLQkJCXJldHVybiBLSlM6
OlZhbHVlKHJldCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC04NywxNiArODcsMTYg
QEAgbmFtZXNwYWNlIEtET00KIAkvLyAoVmVyeSBtdWNoIGxpa2UgS0pTOjpjYWNoZUdsb2JhbE9i
amVjdCwgd2hpY2ggaXMgZm9yIGEgc2luZ2xldG9uIE9iamVjdEltcCkKIAkvLyBUaGlzIG9uZSBp
cyBfb25seV8gdXNlZCBmb3IgQ29uc3RydWN0b3Igb2JqZWN0cy4KIAl0ZW1wbGF0ZSA8Y2xhc3Mg
Q2xhc3NDdG9yPgotCWlubGluZSBLSlM6Ok9iamVjdCBjYWNoZUdsb2JhbEJyaWRnZShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCisJaW5s
aW5lIEtKUzo6T2JqZWN0SW1wICpjYWNoZUdsb2JhbEJyaWRnZShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCiAJewotCQlLSlM6OlZhbHVl
SW1wICpvYmogPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCo+KGV4ZWMtPmludGVycHJldGVy
KCktPmdsb2JhbE9iamVjdCgpLmltcCgpKS0+Z2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7CisJCUtK
Uzo6VmFsdWVJbXAgKm9iaiA9IHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wKj4oZXhlYy0+aW50
ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCkpLT5nZXREaXJlY3QocHJvcGVydHlOYW1lKTsKIAkJ
aWYob2JqKQotCQkJcmV0dXJuIEtKUzo6T2JqZWN0OjpkeW5hbWljQ2FzdChLSlM6OlZhbHVlKG9i
aikpOworCQkJcmV0dXJuIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wKj4ob2JqKTsKIAkJZWxz
ZQogCQl7CiAJCQlDbGFzc0N0b3IgKmN0b3IgPSBuZXcgQ2xhc3NDdG9yKGV4ZWMpOyAvLyBjcmVh
dGUgdGhlIENsYXNzQ3RvciBpbnN0YW5jZQotCQkJS0pTOjpPYmplY3QgbmV3T2JqZWN0KG5ldyBE
T01CcmlkZ2VDdG9yPENsYXNzQ3Rvcj4oZXhlYywgY3RvcikpOyAvLyBjcmVhdGUgdGhlIGJyaWRn
ZSBhcm91bmQgaXQKLQkJCWV4ZWMtPmludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpLnB1dChl
eGVjLCBwcm9wZXJ0eU5hbWUsIG5ld09iamVjdCwgS0pTOjpJbnRlcm5hbCk7CisJCQlLSlM6Ok9i
amVjdEltcCAqbmV3T2JqZWN0KG5ldyBET01CcmlkZ2VDdG9yPENsYXNzQ3Rvcj4oZXhlYywgY3Rv
cikpOyAvLyBjcmVhdGUgdGhlIGJyaWRnZSBhcm91bmQgaXQKKwkJCWV4ZWMtPmludGVycHJldGVy
KCktPmdsb2JhbE9iamVjdCgpLT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCBuZXdPYmplY3QsIEtK
Uzo6SW50ZXJuYWwpOwogCQkJcmV0dXJuIG5ld09iamVjdDsKIAkJfQogCX0KSW5kZXg6IGtkb20v
ZXZlbnRzL0RvY3VtZW50RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tkb20vZXZlbnRzL0RvY3VtZW50RXZlbnQuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9Eb2N1bWVudEV2ZW50LmNwcAot
LS0ga2RvbS9ldmVudHMvRG9jdW1lbnRFdmVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDowMCAtMDAw
MAkxLjEKKysrIGtkb20vZXZlbnRzL0RvY3VtZW50RXZlbnQuY3BwCTggQXVnIDIwMDUgMTg6MDI6
MzAgLTAwMDAKQEAgLTQ4LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9J
TVBMRU1FTlRfUFJPVE9UWVBFKCJEb2N1bWVudEV2ZW50IiwgRG9jdW1lbnRFdmVudFByb3RvLCBE
b2N1bWVudEV2ZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBEb2N1bWVudEV2ZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRvY3Vt
ZW50RXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYyLDkgKzYyLDkgQEAgVmFsdWUgRG9jdW1l
bnRFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogCXJldHVybiBVbmRlZmluZWQoKTsKIH07CiAK
LVZhbHVlIERvY3VtZW50RXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRG9jdW1lbnRFdmVudFBy
b3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKLQlEb2N1bWVudEV2ZW50IG9iaihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0
PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7CisJRG9jdW1lbnRFdmVudCBvYmoo
Y2FzdChleGVjLCB0aGlzT2JqKSk7CiAJUV9BU1NFUlQob2JqLmQgIT0gMCk7CiAKIAlLRE9NX0VO
VEVSX1NBRkUKSW5kZXg6IGtkb20vZXZlbnRzL0RvY3VtZW50RXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9Eb2N1bWVudEV2ZW50Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL0Rv
Y3VtZW50RXZlbnQuaAotLS0ga2RvbS9ldmVudHMvRG9jdW1lbnRFdmVudC5oCTkgSnVsIDIwMDUg
MDY6NTQ6MDAgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9Eb2N1bWVudEV2ZW50LmgJOCBBdWcg
MjAwNSAxODowMjozMCAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1
YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ldmVudHMv
RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
ZXZlbnRzL0V2ZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga2RvbS9ldmVudHMvRXZlbnQuY3BwCi0tLSBrZG9tL2V2ZW50cy9FdmVudC5jcHAJOSBKdWwg
MjAwNSAwNjo1NDowMCAtMDAwMAkxLjEKKysrIGtkb20vZXZlbnRzL0V2ZW50LmNwcAk4IEF1ZyAy
MDA1IDE4OjAyOjMwIC0wMDAwCkBAIC01Niw3ICs1Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7
CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiRXZlbnQiLCBFdmVudFByb3RvLCBFdmVudFBy
b3RvRnVuYykKIAotVmFsdWUgRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAg
LTg1LDcgKzg1LDcgQEAgVmFsdWUgRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlIAog
CQkJCQlyZXR1cm4gb2JqLmNhY2hlKGV4ZWMpOwogCQkJfQogCQkJCi0JCQlyZXR1cm4gVmFsdWUo
KTsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAJCWNhc2UgRXZlbnRDb25zdGFudHM6OkV2ZW50UGhh
c2U6CiAJCQlyZXR1cm4gTnVtYmVyKGV2ZW50UGhhc2UoKSk7CkBAIC0xMDMsNyArMTAzLDcgQEAg
VmFsdWUgRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlIAogCXJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotVmFsdWUgRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRXZlbnRQcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKEV2ZW50KQogCUtET01fRU5URVJfU0FGRQpAQCAt
MTIzLDggKzEyMyw4IEBAIFZhbHVlIEV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXgK
IAkJY2FzZSBFdmVudENvbnN0YW50czo6SW5pdEV2ZW50OgogCQl7CiAJCQlET01TdHJpbmcgZXZl
bnRUeXBlQXJnID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIGNhbkJ1YmJs
ZUFyZyA9IGFyZ3NbMV0udG9Cb29sZWFuKGV4ZWMpOwotCQkJYm9vbCBjYW5jZWxhYmxlQXJnID0g
YXJnc1syXS50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGNhbkJ1YmJsZUFyZyA9IGFyZ3NbMV0t
PnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgY2FuY2VsYWJsZUFyZyA9IGFyZ3NbMl0tPnRvQm9v
bGVhbihleGVjKTsKIAkJCW9iai5pbml0RXZlbnQoZXZlbnRUeXBlQXJnLCBjYW5CdWJibGVBcmcs
IGNhbmNlbGFibGVBcmcpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrZG9t
L2V2ZW50cy9FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tkb20vZXZlbnRzL0V2ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtkb20vZXZlbnRzL0V2ZW50LmgKLS0tIGtkb20vZXZlbnRzL0V2ZW50LmgJOSBKdWwg
MjAwNSAwNjo1NDowMCAtMDAwMAkxLjEKKysrIGtkb20vZXZlbnRzL0V2ZW50LmgJOCBBdWcgMjAw
NSAxODowMjozMCAtMDAwMApAQCAtNzUsNyArNzUsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9N
X0JBU0VDTEFTU19HRVQKIAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKEV2ZW50KQpJbmRleDoga2RvbS9ldmVudHMv
RXZlbnRFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vZXZlbnRzL0V2ZW50RXhjZXB0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uY3BwCi0tLSBr
ZG9tL2V2ZW50cy9FdmVudEV4Y2VwdGlvbi5jcHAJOSBKdWwgMjAwNSAwNjo1NDowMCAtMDAwMAkx
LjEKKysrIGtkb20vZXZlbnRzL0V2ZW50RXhjZXB0aW9uLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjMw
IC0wMDAwCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwog
Ci1WYWx1ZSBFdmVudEV4Y2VwdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50RXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5k
ZXg6IGtkb20vZXZlbnRzL0V2ZW50RXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvRXZlbnRFeGNlcHRp
b24uaAotLS0ga2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uaAk5IEp1bCAyMDA1IDA2OjU0OjAw
IC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uaAk4IEF1ZyAyMDA1IDE4
OjAyOjMwIC0wMDAwCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAv
LyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vZXZlbnRzL0V2ZW50VGFyZ2V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9FdmVu
dFRhcmdldC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtk
b20vZXZlbnRzL0V2ZW50VGFyZ2V0LmNwcAotLS0ga2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuY3Bw
CTkgSnVsIDIwMDUgMDY6NTQ6MDAgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9FdmVudFRhcmdl
dC5jcHAJOCBBdWcgMjAwNSAxODowMjozMCAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCB1c2luZyBu
YW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkV2ZW50VGFyZ2V0Iiwg
RXZlbnRUYXJnZXRQcm90bywgRXZlbnRUYXJnZXRQcm90b0Z1bmMpCiAKLVZhbHVlIEV2ZW50VGFy
Z2V0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKkV2ZW50VGFyZ2V0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03MCw3ICs3MCw3IEBA
IFZhbHVlIEV2ZW50VGFyZ2V0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWMKIAlyZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLVZhbHVlIEV2ZW50VGFyZ2V0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkV2ZW50
VGFyZ2V0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2Jq
LCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhFdmVudFRhcmdldCkKIAlL
RE9NX0VOVEVSX1NBRkUKQEAgLTExMSw3ICsxMTEsNyBAQCBWYWx1ZSBFdmVudFRhcmdldFByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhCiAJCQkJfQogCQkJfQogCi0JCQlib29sIHVzZUNhcHR1cmUgPSBh
cmdzWzJdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPnRv
Qm9vbGVhbihleGVjKTsKIAogCQkJLy8gY3JlYXRlRXZlbnRMaXN0ZW5lciBhdXRvbWF0aWNhbGx5
IHJldXNlcyBleGlzdGluZyBsaXN0ZW5lcnMsIGlmIHBvc3NpYmxlLi4uCiAJCQlpZihpZCA9PSBF
dmVudFRhcmdldENvbnN0YW50czo6QWRkRXZlbnRMaXN0ZW5lcikKSW5kZXg6IGtkb20vZXZlbnRz
L0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYg
LXAgLXUgLXIxLjIga2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuaAotLS0ga2RvbS9ldmVudHMvRXZl
bnRUYXJnZXQuaAk3IEF1ZyAyMDA1IDA2OjE3OjQ0IC0wMDAwCTEuMgorKysga2RvbS9ldmVudHMv
RXZlbnRUYXJnZXQuaAk4IEF1ZyAyMDA1IDE4OjAyOjMwIC0wMDAwCkBAIC02Myw3ICs2Myw3IEBA
IG5hbWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQK
IAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH0KIApJbmRleDoga2RvbS9l
dmVudHMvS2V5Ym9hcmRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9ldmVudHMvS2V5Ym9hcmRFdmVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL0tleWJvYXJkRXZlbnQuY3BwCi0t
LSBrZG9tL2V2ZW50cy9LZXlib2FyZEV2ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjAwIC0wMDAw
CTEuMQorKysga2RvbS9ldmVudHMvS2V5Ym9hcmRFdmVudC5jcHAJOCBBdWcgMjAwNSAxODowMjoz
MSAtMDAwMApAQCAtNTAsNyArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lN
UExFTUVOVF9QUk9UT1RZUEUoIktleWJvYXJkRXZlbnQiLCBLZXlib2FyZEV2ZW50UHJvdG8sIEtl
eWJvYXJkRXZlbnRQcm90b0Z1bmMpCiAKLVZhbHVlIEtleWJvYXJkRXZlbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqS2V5Ym9h
cmRFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzIsNyArNzIsNyBAQCBWYWx1ZSBLZXlib2Fy
ZEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1W
YWx1ZSBLZXlib2FyZEV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKktleWJvYXJkRXZlbnRQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKEtleWJvYXJkRXZlbnQpCiAJS0RPTV9FTlRF
Ul9TQUZFCkBAIC04NywxNSArODcsMTUgQEAgVmFsdWUgS2V5Ym9hcmRFdmVudFByb3RvRnVuYzo6
Y2FsbChFeGVjUwogCQljYXNlIEtleWJvYXJkRXZlbnRDb25zdGFudHM6OkluaXRLZXlib2FyZEV2
ZW50OgogCQl7CiAJCQlET01TdHJpbmcgdHlwZUFyZyA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3Nb
MF0pOwotCQkJYm9vbCBjYW5CdWJibGVBcmcgPSBhcmdzWzFdLnRvQm9vbGVhbihleGVjKTsKLQkJ
CWJvb2wgY2FuY2VsYWJsZUFyZyA9IGFyZ3NbMl0udG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBj
YW5CdWJibGVBcmcgPSBhcmdzWzFdLT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGNhbmNlbGFi
bGVBcmcgPSBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlBYnN0cmFjdFZpZXcgdmlld0Fy
ZyA9IGVjbWFfY2FzdDxBYnN0cmFjdFZpZXc+KGV4ZWMsIGFyZ3NbM10sICZ0b0Fic3RyYWN0Vmll
dyk7CiAJCQlET01TdHJpbmcga2V5SWRlbnRpZmllckFyZyA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFy
Z3NbNF0pOwotCQkJbG9uZyBrZXlMb2NhdGlvbkFyZyA9IGFyZ3NbNV0udG9JbnQzMihleGVjKTsK
LQkJCWJvb2wgY3RybEtleUFyZyA9IGFyZ3NbNl0udG9Cb29sZWFuKGV4ZWMpOwotCQkJYm9vbCBh
bHRLZXlBcmcgPSBhcmdzWzddLnRvQm9vbGVhbihleGVjKTsKLQkJCWJvb2wgc2hpZnRLZXlBcmcg
PSBhcmdzWzhdLnRvQm9vbGVhbihleGVjKTsKLQkJCWJvb2wgbWV0YUtleUFyZyA9IGFyZ3NbOV0u
dG9Cb29sZWFuKGV4ZWMpOworCQkJbG9uZyBrZXlMb2NhdGlvbkFyZyA9IGFyZ3NbNV0tPnRvSW50
MzIoZXhlYyk7CisJCQlib29sIGN0cmxLZXlBcmcgPSBhcmdzWzZdLT50b0Jvb2xlYW4oZXhlYyk7
CisJCQlib29sIGFsdEtleUFyZyA9IGFyZ3NbN10tPnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wg
c2hpZnRLZXlBcmcgPSBhcmdzWzhdLT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIG1ldGFLZXlB
cmcgPSBhcmdzWzldLT50b0Jvb2xlYW4oZXhlYyk7CiAKIAkJCW9iai5pbml0S2V5Ym9hcmRFdmVu
dCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGtleUlkZW50
aWZpZXJBcmcsIGtleUxvY2F0aW9uQXJnLCBjdHJsS2V5QXJnLCBhbHRLZXlBcmcsIHNoaWZ0S2V5
QXJnLCBtZXRhS2V5QXJnKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKSW5kZXg6IGtkb20vZXZl
bnRzL0tleWJvYXJkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rZG9tL2V2ZW50cy9LZXlib2FyZEV2ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL0tleWJvYXJkRXZlbnQuaAotLS0ga2RvbS9l
dmVudHMvS2V5Ym9hcmRFdmVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6MDAgLTAwMDAJMS4xCisrKyBr
ZG9tL2V2ZW50cy9LZXlib2FyZEV2ZW50LmgJOCBBdWcgMjAwNSAxODowMjozMSAtMDAwMApAQCAt
OTMsNyArOTMsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0
aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvTW91c2VFdmVu
dC5jcHAKLS0tIGtkb20vZXZlbnRzL01vdXNlRXZlbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MDAg
LTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAy
OjMxIC0wMDAwCkBAIC01Myw3ICs1Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01f
SU1QTEVNRU5UX1BST1RPVFlQRSgiTW91c2VFdmVudCIsIE1vdXNlRXZlbnRQcm90bywgTW91c2VF
dmVudFByb3RvRnVuYykKIAotVmFsdWUgTW91c2VFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpNb3VzZUV2ZW50OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01f
RU5URVJfU0FGRQogCkBAIC05Myw3ICs5Myw3IEBAIFZhbHVlIE1vdXNlRXZlbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1MKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIE1vdXNlRXZl
bnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqTW91c2VFdmVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9N
X0NIRUNLX1RISVMoTW91c2VFdmVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTEwMywxOSArMTAz
LDE5IEBAIFZhbHVlIE1vdXNlRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXQKIAkJY2FzZSBN
b3VzZUV2ZW50Q29uc3RhbnRzOjpJbml0TW91c2VFdmVudDoKIAkJewogCQkJRE9NU3RyaW5nIHR5
cGVBcmcgPSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzBdKTsKLQkJCWJvb2wgY2FuQnViYmxlQXJn
ID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7Ci0JCQlib29sIGNhbmNlbGFibGVBcmcgPSBhcmdz
WzJdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS0+dG9C
b29sZWFuKGV4ZWMpOworCQkJYm9vbCBjYW5jZWxhYmxlQXJnID0gYXJnc1syXS0+dG9Cb29sZWFu
KGV4ZWMpOwogCQkJQWJzdHJhY3RWaWV3IHZpZXdBcmcgPSBlY21hX2Nhc3Q8QWJzdHJhY3RWaWV3
PihleGVjLCBhcmdzWzNdLCAmdG9BYnN0cmFjdFZpZXcpOwotCQkJbG9uZyBkZXRhaWxBcmcgPSBh
cmdzWzRdLnRvSW50MzIoZXhlYyk7Ci0JCQlsb25nIHNjcmVlblhBcmcgPSBhcmdzWzVdLnRvSW50
MzIoZXhlYyk7Ci0JCQlsb25nIHNjcmVlbllBcmcgPSBhcmdzWzZdLnRvSW50MzIoZXhlYyk7Ci0J
CQlsb25nIGNsaWVudFhBcmcgPSBhcmdzWzddLnRvSW50MzIoZXhlYyk7Ci0JCQlsb25nIGNsaWVu
dFlBcmcgPSBhcmdzWzhdLnRvSW50MzIoZXhlYyk7Ci0JCQlib29sIGN0cmxLZXlBcmcgPSBhcmdz
WzldLnRvQm9vbGVhbihleGVjKTsKLQkJCWJvb2wgYWx0S2V5QXJnID0gYXJnc1sxMF0udG9Cb29s
ZWFuKGV4ZWMpOwotCQkJYm9vbCBzaGlmdEtleUFyZyA9IGFyZ3NbMTFdLnRvQm9vbGVhbihleGVj
KTsKLQkJCWJvb2wgbWV0YUtleUFyZyA9IGFyZ3NbMTJdLnRvQm9vbGVhbihleGVjKTsKLQkJCXVu
c2lnbmVkIHNob3J0IGJ1dHRvbkFyZyA9IGFyZ3NbMTNdLnRvVUludDE2KGV4ZWMpOworCQkJbG9u
ZyBkZXRhaWxBcmcgPSBhcmdzWzRdLT50b0ludDMyKGV4ZWMpOworCQkJbG9uZyBzY3JlZW5YQXJn
ID0gYXJnc1s1XS0+dG9JbnQzMihleGVjKTsKKwkJCWxvbmcgc2NyZWVuWUFyZyA9IGFyZ3NbNl0t
PnRvSW50MzIoZXhlYyk7CisJCQlsb25nIGNsaWVudFhBcmcgPSBhcmdzWzddLT50b0ludDMyKGV4
ZWMpOworCQkJbG9uZyBjbGllbnRZQXJnID0gYXJnc1s4XS0+dG9JbnQzMihleGVjKTsKKwkJCWJv
b2wgY3RybEtleUFyZyA9IGFyZ3NbOV0tPnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgYWx0S2V5
QXJnID0gYXJnc1sxMF0tPnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgc2hpZnRLZXlBcmcgPSBh
cmdzWzExXS0+dG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBtZXRhS2V5QXJnID0gYXJnc1sxMl0t
PnRvQm9vbGVhbihleGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IGJ1dHRvbkFyZyA9IGFyZ3NbMTNd
LT50b1VJbnQxNihleGVjKTsKIAkJCU5vZGUgcmVsYXRlZFRhcmdldEFyZyA9IGVjbWFfY2FzdDxO
b2RlPihleGVjLCBhcmdzWzE0XSwgJnRvTm9kZSk7CiAKIAkJCW9iai5pbml0TW91c2VFdmVudCh0
eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZywg
c2NyZWVuWEFyZywgc2NyZWVuWUFyZywgY2xpZW50WEFyZywgY2xpZW50WUFyZywgY3RybEtleUFy
ZywgYWx0S2V5QXJnLCBzaGlmdEtleUFyZywgbWV0YUtleUFyZywgYnV0dG9uQXJnLCByZWxhdGVk
VGFyZ2V0QXJnKTsKSW5kZXg6IGtkb20vZXZlbnRzL01vdXNlRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9Nb3VzZUV2ZW50Lmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL01vdXNl
RXZlbnQuaAotLS0ga2RvbS9ldmVudHMvTW91c2VFdmVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6MDAg
LTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmgJOCBBdWcgMjAwNSAxODowMjoz
MSAtMDAwMApAQCAtNjQsNyArNjQsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNt
YVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2V2ZW50cy9NdXRhdGlvbkV2ZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9NdXRhdGlv
bkV2ZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2Rv
bS9ldmVudHMvTXV0YXRpb25FdmVudC5jcHAKLS0tIGtkb20vZXZlbnRzL011dGF0aW9uRXZlbnQu
Y3BwCTkgSnVsIDIwMDUgMDY6NTQ6MDEgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9NdXRhdGlv
bkV2ZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjMxIC0wMDAwCkBAIC00OSw3ICs0OSw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiTXV0YXRpb25F
dmVudCIsIE11dGF0aW9uRXZlbnRQcm90bywgTXV0YXRpb25FdmVudFByb3RvRnVuYykKIAotVmFs
dWUgTXV0YXRpb25FdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpNdXRhdGlvbkV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBA
IC03Myw3ICs3Myw3IEBAIFZhbHVlIE11dGF0aW9uRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXgK
IAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIE11dGF0aW9uRXZlbnRQcm90b0Z1bmM6
OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CitWYWx1ZUltcCAqTXV0YXRpb25FdmVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RI
SVMoTXV0YXRpb25FdmVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTgzLDEzICs4MywxMyBAQCBW
YWx1ZSBNdXRhdGlvbkV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTCiAJCWNhc2UgTXV0YXRpb25F
dmVudENvbnN0YW50czo6SW5pdE11dGF0aW9uRXZlbnQ6CiAJCXsKIAkJCURPTVN0cmluZyB0eXBl
QXJnID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIGNhbkJ1YmJsZUFyZyA9
IGFyZ3NbMV0udG9Cb29sZWFuKGV4ZWMpOwotCQkJYm9vbCBjYW5jZWxhYmxlQXJnID0gYXJnc1sy
XS50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGNhbkJ1YmJsZUFyZyA9IGFyZ3NbMV0tPnRvQm9v
bGVhbihleGVjKTsKKwkJCWJvb2wgY2FuY2VsYWJsZUFyZyA9IGFyZ3NbMl0tPnRvQm9vbGVhbihl
eGVjKTsKIAkJCU5vZGUgcmVsYXRlZE5vZGVBcmcgPSBlY21hX2Nhc3Q8Tm9kZT4oZXhlYywgYXJn
c1szXSwgJnRvTm9kZSk7CiAJCQlET01TdHJpbmcgcHJldlZhbHVlQXJnID0gdG9ET01TdHJpbmco
ZXhlYywgYXJnc1s0XSk7CiAJCQlET01TdHJpbmcgbmV3VmFsdWVBcmcgPSB0b0RPTVN0cmluZyhl
eGVjLCBhcmdzWzVdKTsKIAkJCURPTVN0cmluZyBhdHRyTmFtZUFyZyA9IHRvRE9NU3RyaW5nKGV4
ZWMsIGFyZ3NbNl0pOwotCQkJdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyA9IGFyZ3NbN10u
dG9VSW50MTYoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnID0gYXJnc1s3
XS0+dG9VSW50MTYoZXhlYyk7CiAKIAkJCW9iai5pbml0TXV0YXRpb25FdmVudCh0eXBlQXJnLCBj
YW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHJlbGF0ZWROb2RlQXJnLCBwcmV2VmFsdWVBcmcs
IG5ld1ZhbHVlQXJnLCBhdHRyTmFtZUFyZywgYXR0ckNoYW5nZUFyZyk7CiAJCQlyZXR1cm4gVW5k
ZWZpbmVkKCk7CkluZGV4OiBrZG9tL2V2ZW50cy9NdXRhdGlvbkV2ZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvTXV0YXRpb25FdmVudC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9N
dXRhdGlvbkV2ZW50LmgKLS0tIGtkb20vZXZlbnRzL011dGF0aW9uRXZlbnQuaAk5IEp1bCAyMDA1
IDA2OjU0OjAxIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvTXV0YXRpb25FdmVudC5oCTggQXVn
IDIwMDUgMTg6MDI6MzEgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtET00KIAlw
dWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ldmVudHMvVUlFdmVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMv
VUlFdmVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtk
b20vZXZlbnRzL1VJRXZlbnQuY3BwCi0tLSBrZG9tL2V2ZW50cy9VSUV2ZW50LmNwcAk5IEp1bCAy
MDA1IDA2OjU0OjAxIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvVUlFdmVudC5jcHAJOCBBdWcg
MjAwNSAxODowMjozMSAtMDAwMApAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pT
OwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIlVJRXZlbnQiLCBVSUV2ZW50UHJvdG8sIFVJ
RXZlbnRQcm90b0Z1bmMpCiAKLVZhbHVlIFVJRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqVUlFdmVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApAQCAtNjUsNyArNjUsNyBAQCBWYWx1ZSBVSUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBVSUV2ZW50UHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQorVmFsdWVJbXAgKlVJRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElT
KFVJRXZlbnQpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03NSwxMCArNzUsMTAgQEAgVmFsdWUgVUlF
dmVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKgogCQljYXNlIFVJRXZlbnRDb25zdGFudHM6
OkluaXRVSUV2ZW50OgogCQl7CiAJCQlET01TdHJpbmcgdHlwZUFyZyA9IHRvRE9NU3RyaW5nKGV4
ZWMsIGFyZ3NbMF0pOwotCQkJYm9vbCBjYW5CdWJibGVBcmcgPSBhcmdzWzFdLnRvQm9vbGVhbihl
eGVjKTsKLQkJCWJvb2wgY2FuY2VsYWJsZUFyZyA9IGFyZ3NbMl0udG9Cb29sZWFuKGV4ZWMpOwor
CQkJYm9vbCBjYW5CdWJibGVBcmcgPSBhcmdzWzFdLT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29s
IGNhbmNlbGFibGVBcmcgPSBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlBYnN0cmFjdFZp
ZXcgdmlld0FyZyA9IGVjbWFfY2FzdDxBYnN0cmFjdFZpZXc+KGV4ZWMsIGFyZ3NbM10sICZ0b0Fi
c3RyYWN0Vmlldyk7Ci0JCQlsb25nIGRldGFpbEFyZyA9IGFyZ3NbNF0udG9JbnQzMihleGVjKTsK
KwkJCWxvbmcgZGV0YWlsQXJnID0gYXJnc1s0XS0+dG9JbnQzMihleGVjKTsKIAkJCW9iai5pbml0
VUlFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRl
dGFpbEFyZyk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KSW5kZXg6IGtkb20vZXZlbnRz
L1VJRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9t
L2V2ZW50cy9VSUV2ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vZXZlbnRzL1VJRXZlbnQuaAotLS0ga2RvbS9ldmVudHMvVUlFdmVudC5oCTkgSnVs
IDIwMDUgMDY6NTQ6MDEgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9VSUV2ZW50LmgJOCBBdWcg
MjAwNSAxODowMjozMSAtMDAwMApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1
YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2V2ZW50cy9pbXBsL0V2ZW50
TGlzdGVuZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlzdGVuZXJJbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvaW1wbC9FdmVudExpc3RlbmVy
SW1wbC5jcHAKLS0tIGtkb20vZXZlbnRzL2ltcGwvRXZlbnRMaXN0ZW5lckltcGwuY3BwCTkgSnVs
IDIwMDUgMDY6NTQ6MDMgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlzdGVu
ZXJJbXBsLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjMxIC0wMDAwCkBAIC0zMywxNCArMzMsMTQgQEAg
RXZlbnRMaXN0ZW5lckltcGw6OkV2ZW50TGlzdGVuZXJJbXBsKCkgOgogCW1fZG9jID0gMDsKIAlt
X2VjbWFFdmVudExpc3RlbmVyID0gZmFsc2U7CiAKLQltX2xpc3RlbmVyID0gS0pTOjpPYmplY3Qo
KTsKLQltX2NvbXBhcmVMaXN0ZW5lciA9IEtKUzo6VmFsdWUoKTsKKwltX2xpc3RlbmVyID0gTlVM
TDsKKwltX2NvbXBhcmVMaXN0ZW5lciA9IE5VTEw7CiB9CiAKIEV2ZW50TGlzdGVuZXJJbXBsOjp+
RXZlbnRMaXN0ZW5lckltcGwoKQogewogCWlmKG1fZG9jICYmIG1fZG9jLT5lY21hRW5naW5lKCkg
JiYgbV9lY21hRXZlbnRMaXN0ZW5lcikKLQkJbV9kb2MtPmVjbWFFbmdpbmUoKS0+cmVtb3ZlRXZl
bnRMaXN0ZW5lcihzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihtX2NvbXBhcmVMaXN0ZW5l
ci5pbXAoKSkpOworCQltX2RvYy0+ZWNtYUVuZ2luZSgpLT5yZW1vdmVFdmVudExpc3RlbmVyKHN0
YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KG1fY29tcGFyZUxpc3RlbmVyKSk7CiB9CiAKIHZv
aWQgRXZlbnRMaXN0ZW5lckltcGw6OmhhbmRsZUV2ZW50KEV2ZW50SW1wbCAqZXZ0KQpAQCAtNTIs
NyArNTIsNyBAQCB2b2lkIEV2ZW50TGlzdGVuZXJJbXBsOjpoYW5kbGVFdmVudChFdmVuCiAKIAlL
SlM6OkludGVycHJldGVyOjpsb2NrKCk7CiAJRWNtYSAqZWNtYUVuZ2luZSA9IG1fZG9jLT5lY21h
RW5naW5lKCk7Ci0JaWYoZWNtYUVuZ2luZSAmJiBtX2xpc3RlbmVyLmltcGxlbWVudHNDYWxsKCkp
CisJaWYoZWNtYUVuZ2luZSAmJiBtX2xpc3RlbmVyLT5pbXBsZW1lbnRzQ2FsbCgpKQogCXsKIAkJ
U2NyaXB0SW50ZXJwcmV0ZXIgKmludGVycHJldGVyID0gZWNtYUVuZ2luZS0+aW50ZXJwcmV0ZXIo
KTsKIAkJS0pTOjpFeGVjU3RhdGUgKmV4ZWMgPSBlY21hRW5naW5lLT5nbG9iYWxFeGVjKCk7CkBA
IC02Nyw4ICs2Nyw4IEBAIHZvaWQgRXZlbnRMaXN0ZW5lckltcGw6OmhhbmRsZUV2ZW50KEV2ZW4K
IAkJaW50ZXJwcmV0ZXItPnNldEN1cnJlbnRFdmVudChldnQpOwogCiAJCS8vIENhbGwgaXQhCi0J
CUtKUzo6T2JqZWN0IHRoaXNPYmogPSBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3Qoc2FmZV9jYWNo
ZTxFdmVudFRhcmdldD4oZXhlYywgZXZ0T2JqLmN1cnJlbnRUYXJnZXQoKSkpOwotCQlLSlM6OlZh
bHVlIHJldFZhbCA9IG1fbGlzdGVuZXIuY2FsbChleGVjLCB0aGlzT2JqLCBhcmdzKTsKKwkJS0pT
OjpPYmplY3RJbXAgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihzYWZl
X2NhY2hlPEV2ZW50VGFyZ2V0PihleGVjLCBldnRPYmouY3VycmVudFRhcmdldCgpKSk7CisJCUtK
Uzo6VmFsdWVJbXAgKnJldFZhbCA9IG1fbGlzdGVuZXItPmNhbGwoZXhlYywgdGhpc09iaiwgYXJn
cyk7CiAKIAkJLy8gUmVzZXQgY3VycmVudCBldmVudCBhZnRlciBwcm9jZXNzaW5nCiAJCWludGVy
cHJldGVyLT5zZXRDdXJyZW50RXZlbnQoMCk7CkBAIC05NCwxOCArOTQsMTggQEAgRE9NU3RyaW5n
IEV2ZW50TGlzdGVuZXJJbXBsOjppbnRlcm5hbFR5cAogCXJldHVybiBtX2ludGVybmFsVHlwZTsK
IH0KIAotS0pTOjpWYWx1ZSBFdmVudExpc3RlbmVySW1wbDo6ZWNtYUxpc3RlbmVyKCkgY29uc3QK
K0tKUzo6VmFsdWVJbXAgKkV2ZW50TGlzdGVuZXJJbXBsOjplY21hTGlzdGVuZXIoKSBjb25zdAog
ewogCWlmKCFtX2VjbWFFdmVudExpc3RlbmVyKQotCQlyZXR1cm4gS0pTOjpWYWx1ZSgpOworCQly
ZXR1cm4gTlVMTDsKIAogCXJldHVybiBtX2NvbXBhcmVMaXN0ZW5lcjsKIH0KIAotdm9pZCBFdmVu
dExpc3RlbmVySW1wbDo6aW5pdExpc3RlbmVyKERvY3VtZW50SW1wbCAqZG9jLCBib29sIGVjbWFF
dmVudExpc3RlbmVyLCBLSlM6Ok9iamVjdCBsaXN0ZW5lciwgS0pTOjpWYWx1ZSBjb21wYXJlTGlz
dGVuZXIsIGNvbnN0IERPTVN0cmluZyAmaW50ZXJuYWxUeXBlKQordm9pZCBFdmVudExpc3RlbmVy
SW1wbDo6aW5pdExpc3RlbmVyKERvY3VtZW50SW1wbCAqZG9jLCBib29sIGVjbWFFdmVudExpc3Rl
bmVyLCBLSlM6Ok9iamVjdEltcCAqbGlzdGVuZXIsIEtKUzo6VmFsdWVJbXAgKmNvbXBhcmVMaXN0
ZW5lciwgY29uc3QgRE9NU3RyaW5nICZpbnRlcm5hbFR5cGUpCiB7Ci0JaWYoIWxpc3RlbmVyLmlz
VmFsaWQoKSB8fCAhbGlzdGVuZXIuaW1wbGVtZW50c0NhbGwoKSkKLQkJa2RFcnJvcigpIDw8ICJF
Y21hU2NyaXB0IGxpc3RlbmVyIG9iamVjdCAiIDw8IGxpc3RlbmVyLmltcCgpIDw8ICIgaXMgbm90
IHZhbGlkIG9yIGRvZXNuJ3QgaW1wbGVtZW50IGEgY2FsbCEiIDw8IGVuZGw7CisJaWYoIWxpc3Rl
bmVyIHx8ICFsaXN0ZW5lci0+aW1wbGVtZW50c0NhbGwoKSkKKwkJa2RFcnJvcigpIDw8ICJFY21h
U2NyaXB0IGxpc3RlbmVyIG9iamVjdCAiIDw8IGxpc3RlbmVyIDw8ICIgaXMgbm90IHZhbGlkIG9y
IGRvZXNuJ3QgaW1wbGVtZW50IGEgY2FsbCEiIDw8IGVuZGw7CiAKIAltX2RvYyA9IGRvYzsKIAlt
X2xpc3RlbmVyID0gbGlzdGVuZXI7CkluZGV4OiBrZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlzdGVu
ZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9l
dmVudHMvaW1wbC9FdmVudExpc3RlbmVySW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlzdGVuZXJJbXBsLmgKLS0t
IGtkb20vZXZlbnRzL2ltcGwvRXZlbnRMaXN0ZW5lckltcGwuaAk5IEp1bCAyMDA1IDA2OjU0OjAz
IC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvaW1wbC9FdmVudExpc3RlbmVySW1wbC5oCTggQXVn
IDIwMDUgMTg6MDI6MzEgLTAwMDAKQEAgLTM4LDEwICszOCwxMCBAQCBuYW1lc3BhY2UgS0RPTQog
CQl2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnRJbXBsICpldnQpOwogCQkKIAkJRE9NU3Ry
aW5nIGludGVybmFsVHlwZSgpIGNvbnN0OwotCQlLSlM6OlZhbHVlIGVjbWFMaXN0ZW5lcigpIGNv
bnN0OworCQlLSlM6OlZhbHVlSW1wICplY21hTGlzdGVuZXIoKSBjb25zdDsKIAogCQkvLyBJbnRl
cm5hbAotCQl2b2lkIGluaXRMaXN0ZW5lcihEb2N1bWVudEltcGwgKmRvYywgYm9vbCBlY21hRXZl
bnRMaXN0ZW5lciwgS0pTOjpPYmplY3QgbGlzdGVuZXIsIEtKUzo6VmFsdWUgY29tcGFyZUxpc3Rl
bmVyLCBjb25zdCBET01TdHJpbmcgJmludGVybmFsVHlwZSk7CisJCXZvaWQgaW5pdExpc3RlbmVy
KERvY3VtZW50SW1wbCAqZG9jLCBib29sIGVjbWFFdmVudExpc3RlbmVyLCBLSlM6Ok9iamVjdElt
cCAqbGlzdGVuZXIsIEtKUzo6VmFsdWVJbXAgKmNvbXBhcmVMaXN0ZW5lciwgY29uc3QgRE9NU3Ry
aW5nICZpbnRlcm5hbFR5cGUpOwogCiAJcHJpdmF0ZToKIAkJRG9jdW1lbnRJbXBsICptX2RvYzsK
QEAgLTQ5LDggKzQ5LDggQEAgbmFtZXNwYWNlIEtET00KIAkJYm9vbCBtX2VjbWFFdmVudExpc3Rl
bmVyOwogCQlET01TdHJpbmcgbV9pbnRlcm5hbFR5cGU7CiAKLQkJS0pTOjpPYmplY3QgbV9saXN0
ZW5lcjsKLQkJS0pTOjpWYWx1ZSBtX2NvbXBhcmVMaXN0ZW5lcjsKKwkJS0pTOjpPYmplY3RJbXAg
Km1fbGlzdGVuZXI7CisJCUtKUzo6VmFsdWVJbXAgKm1fY29tcGFyZUxpc3RlbmVyOwogCX07CiB9
OwogCkluZGV4OiBrZG9tL2ltcGwvRE9NVXNlckRhdGFJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9pbXBsL0RPTVVzZXJEYXRhSW1wbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2ltcGwvRE9NVXNlckRh
dGFJbXBsLmgKLS0tIGtkb20vaW1wbC9ET01Vc2VyRGF0YUltcGwuaAk5IEp1bCAyMDA1IDA2OjU0
OjA2IC0wMDAwCTEuMQorKysga2RvbS9pbXBsL0RPTVVzZXJEYXRhSW1wbC5oCTggQXVnIDIwMDUg
MTg6MDI6MzIgLTAwMDAKQEAgLTc0LDIwICs3NCwyMCBAQCBuYW1lc3BhY2UgS0RPTQogCiAJCURP
TVVzZXJEYXRhSW1wbCAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbDsgfQogCi0JCXZpcnR1
YWwgS0pTOjpWYWx1ZSBnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorCQl2aXJ0dWFsIEtKUzo6VmFsdWVJbXAgKmdldChL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUp
IGNvbnN0CiAJCXsKIAkJCWtkRGVidWcoMjYwMDQpIDw8ICJET01CcmlkZ2U6OmdldCgpLCAiIDw8
IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgIiBOYW1lOiAiIDw8IGNsYXNzSW5mbygpLT5jbGFz
c05hbWUgPDwgIiBPYmplY3Q6ICIgPDwgdGhpcy0+bV9pbXBsIDw8IGVuZGw7CiAKIAkJCS8vIExv
b2sgZm9yIHN0YW5kYXJkIHByb3BlcnRpZXMgKGUuZy4gdGhvc2UgaW4gdGhlIGhhc2h0YWJsZXMp
CiAJCQlET01Vc2VyRGF0YSBvYmoobV9pbXBsKTsKLQkJCUtKUzo6VmFsdWUgdmFsID0gb2JqLmdl
dChleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMpOworCQkJS0pTOjpWYWx1ZUltcCAqdmFsID0gb2Jq
LmdldChleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMpOwogCi0JCQlpZih2YWwudHlwZSgpICE9IEtK
Uzo6VW5kZWZpbmVkVHlwZSkKKwkJCWlmKHZhbC0+dHlwZSgpICE9IEtKUzo6VW5kZWZpbmVkVHlw
ZSkKIAkJCQlyZXR1cm4gdmFsOwogCiAJCQkvLyBOb3QgZm91bmQgLT4gZm9yd2FyZCB0byBPYmpl
Y3RJbXAuCiAJCQl2YWwgPSBLSlM6Ok9iamVjdEltcDo6Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7
Ci0JCQlpZih2YWwudHlwZSgpID09IEtKUzo6VW5kZWZpbmVkVHlwZSkKKwkJCWlmKHZhbC0+dHlw
ZSgpID09IEtKUzo6VW5kZWZpbmVkVHlwZSkKIAkJCQlrZERlYnVnKDI2MDA0KSA8PCAiV0FSTklO
RzogIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8ICIgbm90IGZvdW5kIGluLi4uIE5hbWU6
ICIgPDwgY2xhc3NJbmZvKCktPmNsYXNzTmFtZSA8PCAiIE9iamVjdDogIiA8PCBtX2ltcGwgPDwg
IiBvbiBsaW5lIDogIiA8PCBleGVjLT5jb250ZXh0KCkuY3VyU3RtdEZpcnN0TGluZSgpIDw8IGVu
ZGw7CiAKIAkJCXJldHVybiB2YWw7CkBAIC0xMDUsNyArMTA1LDcgQEAgbmFtZXNwYWNlIEtET00K
IAkJfQogCiAJCXZpcnR1YWwgY29uc3QgS0pTOjpDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZET01Vc2VyRGF0YTo6c19jbGFzc0luZm87IH0KLQkJdmlydHVhbCBLSlM6OlZh
bHVlIHRvUHJpbWl0aXZlKEtKUzo6RXhlY1N0YXRlICosIEtKUzo6VHlwZSA9IEtKUzo6VW5kZWZp
bmVkVHlwZSkgY29uc3QKKwkJdmlydHVhbCBLSlM6OlZhbHVlSW1wICp0b1ByaW1pdGl2ZShLSlM6
OkV4ZWNTdGF0ZSAqLCBLSlM6OlR5cGUgPSBLSlM6OlVuZGVmaW5lZFR5cGUpIGNvbnN0CiAJCXsK
IAkJCWtkRGVidWcoKSA8PCBrX2Z1bmNpbmZvIDw8IGVuZGw7CiAJCQlpZihtX2ltcGwgJiYgKCoo
KGJvb2wgKikobV9pbXBsLT51c2VyRGF0YSgpKSkpKQpJbmRleDoga2RvbS9scy9MU0V4Y2VwdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9M
U0V4Y2VwdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtkb20vbHMvTFNFeGNlcHRpb24uY3BwCi0tLSBrZG9tL2xzL0xTRXhjZXB0aW9uLmNwcAk5IEp1
bCAyMDA1IDA2OjU0OjE0IC0wMDAwCTEuMQorKysga2RvbS9scy9MU0V4Y2VwdGlvbi5jcHAJOCBB
dWcgMjAwNSAxODowMjozMiAtMDAwMApAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
S0pTOwogQGVuZAogKi8KIAotVmFsdWUgTFNFeGNlcHRpb246OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpMU0V4Y2VwdGlvbjo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tl
bikKIAl7CkluZGV4OiBrZG9tL2xzL0xTRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU0V4Y2VwdGlvbi5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTRXhjZXB0aW9uLmgKLS0tIGtk
b20vbHMvTFNFeGNlcHRpb24uaAk5IEp1bCAyMDA1IDA2OjU0OjE0IC0wMDAwCTEuMQorKysga2Rv
bS9scy9MU0V4Y2VwdGlvbi5oCTggQXVnIDIwMDUgMTg6MDI6MzIgLTAwMDAKQEAgLTYyLDcgKzYy
LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlL
RE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRl
eDoga2RvbS9scy9MU0lucHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rZG9tL2xzL0xTSW5wdXQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTSW5wdXQuY3BwCi0tLSBrZG9tL2xzL0xTSW5wdXQuY3Bw
CTkgSnVsIDIwMDUgMDY6NTQ6MTQgLTAwMDAJMS4xCisrKyBrZG9tL2xzL0xTSW5wdXQuY3BwCTgg
QXVnIDIwMDUgMTg6MDI6MzIgLTAwMDAKQEAgLTQ4LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIExTSW5wdXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqTFNJbnB1dDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICNpZm5kZWYgQVBQ
TEVfQ09NUElMRV9IQUNLCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC04MCw3ICs4MCw3IEBAIFZhbHVl
IExTSW5wdXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CiAKLXZvaWQgTFNJbnB1dDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIExTSW5wdXQ6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50
KQogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL2xzL0xTSW5wdXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTSW5wdXQuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU0lucHV0LmgK
LS0tIGtkb20vbHMvTFNJbnB1dC5oCTkgSnVsIDIwMDUgMDY6NTQ6MTQgLTAwMDAJMS4xCisrKyBr
ZG9tL2xzL0xTSW5wdXQuaAk4IEF1ZyAyMDA1IDE4OjAyOjMyIC0wMDAwCkBAIC0xNTksOCArMTU5
LDggQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9QVVQKIAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIAogCUtET01fREVGSU5F
X0NBU1QoTFNJbnB1dCkKSW5kZXg6IGtkb20vbHMvTFNPdXRwdXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vbHMvTFNPdXRwdXQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTT3V0cHV0LmNwcAot
LS0ga2RvbS9scy9MU091dHB1dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDoxNCAtMDAwMAkxLjEKKysr
IGtkb20vbHMvTFNPdXRwdXQuY3BwCTggQXVnIDIwMDUgMTg6MDI6MzIgLTAwMDAKQEAgLTQwLDcg
KzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIExTT3V0cHV0
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKkxTT3V0cHV0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC01OCw3ICs1OCw3IEBAIFZhbHVl
IExTT3V0cHV0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CiAKLXZvaWQgTFNPdXRwdXQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBMU091dHB1dDo6cHV0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBp
bnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20vbHMvTFNPdXRwdXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTT3V0cHV0Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vbHMvTFNPdXRw
dXQuaAotLS0ga2RvbS9scy9MU091dHB1dC5oCTkgSnVsIDIwMDUgMDY6NTQ6MTQgLTAwMDAJMS4x
CisrKyBrZG9tL2xzL0xTT3V0cHV0LmgJOCBBdWcgMjAwNSAxODowMjozMiAtMDAwMApAQCAtODUs
OCArODUsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX1BVVAogCQlLRE9NX0NBU1QKIAotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZh
bHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJS0RPTV9E
RUZJTkVfQ0FTVChMU091dHB1dCkKSW5kZXg6IGtkb20vbHMvTFNQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vbHMvTFNQYXJzZXIuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTUGFyc2Vy
LmNwcAotLS0ga2RvbS9scy9MU1BhcnNlci5jcHAJOSBKdWwgMjAwNSAwNjo1NDoxNCAtMDAwMAkx
LjEKKysrIGtkb20vbHMvTFNQYXJzZXIuY3BwCTggQXVnIDIwMDUgMTg6MDI6MzIgLTAwMDAKQEAg
LTU4LDcgKzU4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJP
VE9UWVBFKCJMU1BhcnNlciIsIExTUGFyc2VyUHJvdG8sIExTUGFyc2VyUHJvdG9GdW5jKQogCi1W
YWx1ZSBMU1BhcnNlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpMU1BhcnNlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtODAsNyAr
ODAsNyBAQCBWYWx1ZSBMU1BhcnNlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAJcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi12b2lkIExTUGFyc2VyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmIC8qIHZhbHVlICovLCBpbnQpCit2
b2lkIExTUGFyc2VyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqIC8qIHZhbHVlICovLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAg
LTk1LDcgKzk1LDcgQEAgdm9pZCBMU1BhcnNlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdAog
CUtET01fTEVBVkVfU0FGRShET01FeGNlcHRpb24pCiB9CiAKLVZhbHVlIExTUGFyc2VyUHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQorVmFsdWVJbXAgKkxTUGFyc2VyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJ
UyhMU1BhcnNlcikKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTExNyw3ICsxMTcsNyBAQCBWYWx1ZSBM
U1BhcnNlclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgCiAJCXsKIAkJCUxTSW5wdXQgaW5wdXQg
PSBlY21hX2Nhc3Q8TFNJbnB1dD4oZXhlYywgYXJnc1swXSwgJnRvTFNJbnB1dCk7CiAJCQlOb2Rl
IGNvbnRleHRBcmcgPSBlY21hX2Nhc3Q8Tm9kZT4oZXhlYywgYXJnc1sxXSwgJnRvTm9kZSk7Ci0J
CQl1bnNpZ25lZCBzaG9ydCBhY3Rpb24gPSBhcmdzWzJdLnRvVUludDMyKGV4ZWMpOworCQkJdW5z
aWduZWQgc2hvcnQgYWN0aW9uID0gYXJnc1syXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4g
Z2V0RE9NTm9kZShleGVjLCBvYmoucGFyc2VXaXRoQ29udGV4dChpbnB1dCwgY29udGV4dEFyZywg
YWN0aW9uKSk7CiAJCX0KIAkJY2FzZSBMU1BhcnNlckNvbnN0YW50czo6QWJvcnQ6CkluZGV4OiBr
ZG9tL2xzL0xTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva2RvbS9scy9MU1BhcnNlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrZG9tL2xzL0xTUGFyc2VyLmgKLS0tIGtkb20vbHMvTFNQYXJzZXIuaAk5IEp1bCAy
MDA1IDA2OjU0OjE0IC0wMDAwCTEuMQorKysga2RvbS9scy9MU1BhcnNlci5oCTggQXVnIDIwMDUg
MTg6MDI6MzIgLTAwMDAKQEAgLTE1Miw4ICsxNTIsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9N
X0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZh
bHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAq
dmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga2RvbS9scy9MU1BhcnNlckZpbHRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9M
U1BhcnNlckZpbHRlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vbHMvTFNQYXJzZXJGaWx0ZXIuY3BwCi0tLSBrZG9tL2xzL0xTUGFyc2VyRmlsdGVy
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjE1IC0wMDAwCTEuMQorKysga2RvbS9scy9MU1BhcnNlckZp
bHRlci5jcHAJOCBBdWcgMjAwNSAxODowMjozMyAtMDAwMApAQCAtNDgsNyArNDgsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkxTUGFyc2VyRmls
dGVyIiwgTFNQYXJzZXJGaWx0ZXJQcm90bywgTFNQYXJzZXJGaWx0ZXJQcm90b0Z1bmMpCiAKLVZh
bHVlIExTUGFyc2VyRmlsdGVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkxTUGFyc2VyRmlsdGVyOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQog
CkBAIC02NCw3ICs2NCw3IEBAIFZhbHVlIExTUGFyc2VyRmlsdGVyOjpnZXRWYWx1ZVByb3BlcnR5
KEUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIExTUGFyc2VyRmlsdGVyUHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQorVmFsdWVJbXAgKkxTUGFyc2VyRmlsdGVyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hF
Q0tfVEhJUyhMU1BhcnNlckZpbHRlcikKIAlLRE9NX0VOVEVSX1NBRkUKSW5kZXg6IGtkb20vbHMv
TFNQYXJzZXJGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rZG9tL2xzL0xTUGFyc2VyRmlsdGVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtkb20vbHMvTFNQYXJzZXJGaWx0ZXIuaAotLS0ga2RvbS9scy9MU1BhcnNl
ckZpbHRlci5oCTkgSnVsIDIwMDUgMDY6NTQ6MTUgLTAwMDAJMS4xCisrKyBrZG9tL2xzL0xTUGFy
c2VyRmlsdGVyLmgJOCBBdWcgMjAwNSAxODowMjozMyAtMDAwMApAQCAtMTQxLDcgKzE0MSw3IEBA
IG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9C
QVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9Owog
CkluZGV4OiBrZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU1Jlc291cmNlUmVzb2x2ZXIuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTUmVzb3Vy
Y2VSZXNvbHZlci5jcHAKLS0tIGtkb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyLmNwcAk5IEp1bCAy
MDA1IDA2OjU0OjE1IC0wMDAwCTEuMQorKysga2RvbS9scy9MU1Jlc291cmNlUmVzb2x2ZXIuY3Bw
CTggQXVnIDIwMDUgMTg6MDI6MzMgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJMU1Jlc291cmNlUmVzb2x2ZXIi
LCBMU1Jlc291cmNlUmVzb2x2ZXJQcm90bywgTFNSZXNvdXJjZVJlc29sdmVyUHJvdG9GdW5jKQog
Ci1WYWx1ZSBMU1Jlc291cmNlUmVzb2x2ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqTFNSZXNvdXJjZVJlc29sdmVyOjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01f
RU5URVJfU0FGRQogCkBAIC01OSw3ICs1OSw3IEBAIFZhbHVlIExTUmVzb3VyY2VSZXNvbHZlcjo6
Z2V0VmFsdWVQcm9wZXIKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIExTUmVzb3Vy
Y2VSZXNvbHZlclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpMU1Jlc291cmNlUmVzb2x2ZXJQcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKExTUmVzb3VyY2VSZXNvbHZlcikKIAlLRE9NX0VO
VEVSX1NBRkUKSW5kZXg6IGtkb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU1Jlc291cmNlUmVzb2x2ZXIu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU1Jl
c291cmNlUmVzb2x2ZXIuaAotLS0ga2RvbS9scy9MU1Jlc291cmNlUmVzb2x2ZXIuaAk5IEp1bCAy
MDA1IDA2OjU0OjE1IC0wMDAwCTEuMQorKysga2RvbS9scy9MU1Jlc291cmNlUmVzb2x2ZXIuaAk4
IEF1ZyAyMDA1IDE4OjAyOjMzIC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBLRE9N
CiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2xz
L0xTU2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva2RvbS9scy9MU1NlcmlhbGl6ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTU2VyaWFsaXplci5jcHAKLS0tIGtkb20vbHMvTFNTZXJp
YWxpemVyLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjE1IC0wMDAwCTEuMQorKysga2RvbS9scy9MU1Nl
cmlhbGl6ZXIuY3BwCTggQXVnIDIwMDUgMTg6MDI6MzMgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJMU1Nlcmlh
bGl6ZXIiLCBMU1NlcmlhbGl6ZXJQcm90bywgTFNTZXJpYWxpemVyUHJvdG9GdW5jKQogCi1WYWx1
ZSBMU1NlcmlhbGl6ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqTFNTZXJpYWxpemVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03
Myw3ICs3Myw3IEBAIFZhbHVlIExTU2VyaWFsaXplcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAly
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgTFNTZXJpYWxpemVyOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkK
K3ZvaWQgTFNTZXJpYWxpemVyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAt
OTEsNyArOTEsNyBAQCB2b2lkIExTU2VyaWFsaXplcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjCiAJ
S0RPTV9MRUFWRV9TQUZFKExTRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBMU1NlcmlhbGl6ZXJQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCitWYWx1ZUltcCAqTFNTZXJpYWxpemVyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hF
Q0tfVEhJUyhMU1NlcmlhbGl6ZXIpCiAJS0RPTV9FTlRFUl9TQUZFCkluZGV4OiBrZG9tL2xzL0xT
U2VyaWFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vbHMvTFNTZXJpYWxpemVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtkb20vbHMvTFNTZXJpYWxpemVyLmgKLS0tIGtkb20vbHMvTFNTZXJpYWxpemVyLmgJ
OSBKdWwgMjAwNSAwNjo1NDoxNSAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNTZXJpYWxpemVyLmgJ
OCBBdWcgMjAwNSAxODowMjozMyAtMDAwMApAQCAtMTM5LDggKzEzOSw4IEBAIG5hbWVzcGFjZSBL
RE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJ
dm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6
OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrZG9tL2xzL0xT
U2VyaWFsaXplckZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9scy9MU1NlcmlhbGl6ZXJGaWx0ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTU2VyaWFsaXplckZpbHRlci5jcHAKLS0t
IGtkb20vbHMvTFNTZXJpYWxpemVyRmlsdGVyLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjE1IC0wMDAw
CTEuMQorKysga2RvbS9scy9MU1NlcmlhbGl6ZXJGaWx0ZXIuY3BwCTggQXVnIDIwMDUgMTg6MDI6
MzMgLTAwMDAKQEAgLTM4LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICov
CiAKLVZhbHVlIExTU2VyaWFsaXplckZpbHRlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpMU1NlcmlhbGl6ZXJGaWx0ZXI6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RP
TV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20vbHMvTFNTZXJpYWxpemVyRmlsdGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU1NlcmlhbGl6ZXJG
aWx0ZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9s
cy9MU1NlcmlhbGl6ZXJGaWx0ZXIuaAotLS0ga2RvbS9scy9MU1NlcmlhbGl6ZXJGaWx0ZXIuaAk5
IEp1bCAyMDA1IDA2OjU0OjE1IC0wMDAwCTEuMQorKysga2RvbS9scy9MU1NlcmlhbGl6ZXJGaWx0
ZXIuaAk4IEF1ZyAyMDA1IDE4OjAyOjMzIC0wMDAwCkBAIC03Miw3ICs3Miw3IEBAIG5hbWVzcGFj
ZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1Nf
R0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBr
ZG9tL3JhbmdlL0RvY3VtZW50UmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5jcHAK
LS0tIGtkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5jcHAJOSBKdWwgMjAwNSAwNjo1NDoyMCAtMDAw
MAkxLjEKKysrIGtkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5jcHAJOCBBdWcgMjAwNSAxODowMjoz
MyAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0RPTTsKIAogS0RPTV9J
TVBMRU1FTlRfUFJPVE9UWVBFKCJEb2N1bWVudFJhbmdlIiwgRG9jdW1lbnRSYW5nZVByb3RvLCBE
b2N1bWVudFJhbmdlUHJvdG9GdW5jKQogCi1LSlM6OlZhbHVlIERvY3VtZW50UmFuZ2U6OmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK0tKUzo6
VmFsdWVJbXAgKkRvY3VtZW50UmFuZ2U6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTYsOSAr
NTYsOSBAQCBLSlM6OlZhbHVlIERvY3VtZW50UmFuZ2U6OmdldFZhbHVlUHJvcGVyCiAJcmV0dXJu
IEtKUzo6VW5kZWZpbmVkKCk7CiB9CiAKLUtKUzo6VmFsdWUgRG9jdW1lbnRSYW5nZVByb3RvRnVu
Yzo6Y2FsbChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpPYmplY3QgJnRoaXNPYmosIGNvbnN0
IEtKUzo6TGlzdCAmKQorS0pTOjpWYWx1ZUltcCAqRG9jdW1lbnRSYW5nZVByb3RvRnVuYzo6Y2Fs
bChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IEtK
Uzo6TGlzdCAmKQogewotCURvY3VtZW50UmFuZ2Ugb2JqKGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8
S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsKKwlEb2N1bWVudFJhbmdlIG9iaihj
YXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlRX0FTU0VSVChvYmouZCAhPSAwKTsKIAogCUtET01fRU5U
RVJfU0FGRQpJbmRleDoga2RvbS9yYW5nZS9Eb2N1bWVudFJhbmdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9yYW5nZS9Eb2N1bWVudFJhbmdlLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vcmFuZ2UvRG9jdW1l
bnRSYW5nZS5oCi0tLSBrZG9tL3JhbmdlL0RvY3VtZW50UmFuZ2UuaAk5IEp1bCAyMDA1IDA2OjU0
OjIwIC0wMDAwCTEuMQorKysga2RvbS9yYW5nZS9Eb2N1bWVudFJhbmdlLmgJOCBBdWcgMjAwNSAx
ODowMjozMyAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzog
Ly8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9yYW5nZS9SYW5nZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9yYW5nZS9S
YW5nZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
cmFuZ2UvUmFuZ2UuY3BwCi0tLSBrZG9tL3JhbmdlL1JhbmdlLmNwcAk5IEp1bCAyMDA1IDA2OjU0
OjIwIC0wMDAwCTEuMQorKysga2RvbS9yYW5nZS9SYW5nZS5jcHAJOCBBdWcgMjAwNSAxODowMjoz
NCAtMDAwMApAQCAtNzMsNyArNzMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0RPTTsKIAogS0RPTV9J
TVBMRU1FTlRfUFJPVE9UWVBFKCJSYW5nZSIsIFJhbmdlUHJvdG8sIFJhbmdlUHJvdG9GdW5jKQog
Ci1WYWx1ZSBSYW5nZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpSYW5nZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtOTksNyArOTks
NyBAQCBWYWx1ZSBSYW5nZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgCiAJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBSYW5nZVByb3RvRnVuYzo6Y2FsbChLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgS0pTOjpPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUlt
cCAqUmFuZ2VQcm90b0Z1bmM6OmNhbGwoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6T2JqZWN0
SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhSYW5n
ZSkKIAkKQEAgLTExMiwxNCArMTEyLDE0IEBAIFZhbHVlIFJhbmdlUHJvdG9GdW5jOjpjYWxsKEtK
Uzo6RXhlY1N0YXQKIAkJY2FzZSBSYW5nZUNvbnN0YW50czo6U2V0RW5kOgogCQl7CiAJCQlOb2Rl
IHBhcmVudCA9IGVjbWFfY2FzdDxOb2RlPihleGVjLCBhcmdzWzBdLCAmdG9Ob2RlKTsKLQkJCWlu
dCBvZmZzZXQgPSBhcmdzWzFdLnRvSW50MzIoZXhlYyk7CisJCQlpbnQgb2Zmc2V0ID0gYXJnc1sx
XS0+dG9JbnQzMihleGVjKTsKIAkJCW9iai5zZXRFbmQocGFyZW50LCBvZmZzZXQpOwogCQkJcmV0
dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWNhc2UgUmFuZ2VDb25zdGFudHM6OlNldFN0YXJ0Ogog
CQl7CiAJCQlOb2RlIHBhcmVudCA9IGVjbWFfY2FzdDxOb2RlPihleGVjLCBhcmdzWzBdLCAmdG9O
b2RlKTsKLQkJCWludCBvZmZzZXQgPSBhcmdzWzFdLnRvSW50MzIoZXhlYyk7CisJCQlpbnQgb2Zm
c2V0ID0gYXJnc1sxXS0+dG9JbnQzMihleGVjKTsKIAkJCW9iai5zZXRTdGFydChwYXJlbnQsIG9m
ZnNldCk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0JCkBAIC0xNDksNyArMTQ5LDcgQEAg
VmFsdWUgUmFuZ2VQcm90b0Z1bmM6OmNhbGwoS0pTOjpFeGVjU3RhdAogCQl9CiAJCWNhc2UgUmFu
Z2VDb25zdGFudHM6OkNvbGxhcHNlOgogCQl7Ci0JCQlvYmouY29sbGFwc2UoIGFyZ3NbMF0udG9C
b29sZWFuKGV4ZWMpICk7CisJCQlvYmouY29sbGFwc2UoIGFyZ3NbMF0tPnRvQm9vbGVhbihleGVj
KSApOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAgCQljYXNlIFJhbmdlQ29uc3RhbnRz
OjpTZWxlY3ROb2RlOgpAQCAtMTY2LDcgKzE2Niw3IEBAIFZhbHVlIFJhbmdlUHJvdG9GdW5jOjpj
YWxsKEtKUzo6RXhlY1N0YXQKIAkJfQogIAkJY2FzZSBSYW5nZUNvbnN0YW50czo6Q29tcGFyZUJv
dW5kYXJ5UG9pbnRzOgogCQl7Ci0JCQlpbnQgaG93ID0gYXJnc1swXS50b0ludDMyKGV4ZWMpOwor
CQkJaW50IGhvdyA9IGFyZ3NbMF0tPnRvSW50MzIoZXhlYyk7CiAJCQlSYW5nZSBzb3VyY2VSYW5n
ZSA9IGVjbWFfY2FzdDxSYW5nZT4oZXhlYywgYXJnc1sxXSwgJnRvUmFuZ2UpOwogCQkJcmV0dXJu
IE51bWJlcihvYmouY29tcGFyZUJvdW5kYXJ5UG9pbnRzKHN0YXRpY19jYXN0PENvbXBhcmVIb3c+
KGhvdykgLHNvdXJjZVJhbmdlKSk7CiAJCX0KSW5kZXg6IGtkb20vcmFuZ2UvUmFuZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3JhbmdlL1JhbmdlLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vcmFuZ2UvUmFu
Z2UuaAotLS0ga2RvbS9yYW5nZS9SYW5nZS5oCTkgSnVsIDIwMDUgMDY6NTQ6MjAgLTAwMDAJMS4x
CisrKyBrZG9tL3JhbmdlL1JhbmdlLmgJOCBBdWcgMjAwNSAxODowMjozNCAtMDAwMApAQCAtNDI3
LDcgKzQyNyw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9N
X0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6
IGtkb20vcmFuZ2UvUmFuZ2VFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vcmFuZ2UvUmFuZ2VFeGNlcHRpb24uY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3JhbmdlL1JhbmdlRXhjZXB0aW9u
LmNwcAotLS0ga2RvbS9yYW5nZS9SYW5nZUV4Y2VwdGlvbi5jcHAJOSBKdWwgMjAwNSAwNjo1NDoy
MCAtMDAwMAkxLjEKKysrIGtkb20vcmFuZ2UvUmFuZ2VFeGNlcHRpb24uY3BwCTggQXVnIDIwMDUg
MTg6MDI6MzQgLTAwMDAKQEAgLTM1LDcgKzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtET007CiBA
ZW5kCiAqLwogCi1LSlM6OlZhbHVlIFJhbmdlRXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK0tKUzo6VmFsdWVJbXAgKlJhbmdlRXhj
ZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDoga2RvbS9yYW5nZS9SYW5nZUV4Y2VwdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vcmFuZ2Uv
UmFuZ2VFeGNlcHRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga2RvbS9yYW5nZS9SYW5nZUV4Y2VwdGlvbi5oCi0tLSBrZG9tL3JhbmdlL1JhbmdlRXhjZXB0
aW9uLmgJOSBKdWwgMjAwNSAwNjo1NDoyMCAtMDAwMAkxLjEKKysrIGtkb20vcmFuZ2UvUmFuZ2VF
eGNlcHRpb24uaAk4IEF1ZyAyMDA1IDE4OjAyOjM0IC0wMDAwCkBAIC02NCw3ICs2NCw3IEBAIG5h
bWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQK
IAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH0KIApJbmRleDoga2RvbS90
cmF2ZXJzYWwvRG9jdW1lbnRUcmF2ZXJzYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vdHJhdmVyc2FsL0RvY3VtZW50VHJhdmVyc2FsLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS90cmF2ZXJzYWwvRG9j
dW1lbnRUcmF2ZXJzYWwuY3BwCi0tLSBrZG9tL3RyYXZlcnNhbC9Eb2N1bWVudFRyYXZlcnNhbC5j
cHAJOSBKdWwgMjAwNSAwNjo1NDoyMyAtMDAwMAkxLjEKKysrIGtkb20vdHJhdmVyc2FsL0RvY3Vt
ZW50VHJhdmVyc2FsLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjM0IC0wMDAwCkBAIC00Nyw3ICs0Nyw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiRG9j
dW1lbnRUcmF2ZXJzYWwiLCBEb2N1bWVudFRyYXZlcnNhbFByb3RvLCBEb2N1bWVudFRyYXZlcnNh
bFByb3RvRnVuYykKIAotVmFsdWUgRG9jdW1lbnRUcmF2ZXJzYWw6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRUcmF2
ZXJzYWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYxLDkgKzYxLDkgQEAgVmFsdWUgRG9jdW1lbnRU
cmF2ZXJzYWw6OmdldFZhbHVlUHJvcGVydAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFs
dWUgRG9jdW1lbnRUcmF2ZXJzYWxQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRG9jdW1lbnRUcmF2ZXJz
YWxQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCiB7Ci0JRG9jdW1lbnRUcmF2ZXJzYWwgb2JqKGNhc3QoZXhlYywgc3Rh
dGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsKKwlEb2N1bWVudFRy
YXZlcnNhbCBvYmooY2FzdChleGVjLCB0aGlzT2JqKSk7CiAJUV9BU1NFUlQob2JqLmQgIT0gMCk7
CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcyLDE1ICs3MiwxNSBAQCBWYWx1ZSBEb2N1bWVudFRy
YXZlcnNhbFByb3RvRnVuYzo6Y2FsbChFCiAJCWNhc2UgRG9jdW1lbnRUcmF2ZXJzYWxDb25zdGFu
dHM6OkNyZWF0ZU5vZGVJdGVyYXRvcjoKIAkJewogCQkJTm9kZSByb290ID0gZWNtYV9jYXN0PE5v
ZGU+KGV4ZWMsIGFyZ3NbMF0sICZ0b05vZGUpOwotCQkJdW5zaWduZWQgc2hvcnQgd2hhdFRvU2hv
dyA9IGFyZ3NbMV0udG9VSW50MTYoZXhlYyk7Ci0JCQlib29sIGVudGl0eVJlZmVyZW5jZUV4cGFu
c2lvbiA9IGFyZ3NbM10udG9Cb29sZWFuKGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgd2hhdFRv
U2hvdyA9IGFyZ3NbMV0tPnRvVUludDE2KGV4ZWMpOworCQkJYm9vbCBlbnRpdHlSZWZlcmVuY2VF
eHBhbnNpb24gPSBhcmdzWzNdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlyZXR1cm4gb2JqLmNyZWF0
ZU5vZGVJdGVyYXRvcihyb290LCB3aGF0VG9TaG93LCBOb2RlRmlsdGVyOjpudWxsLCBlbnRpdHlS
ZWZlcmVuY2VFeHBhbnNpb24pLmNhY2hlKGV4ZWMpOwogCQl9CiAJCWNhc2UgRG9jdW1lbnRUcmF2
ZXJzYWxDb25zdGFudHM6OkNyZWF0ZVRyZWVXYWxrZXI6CiAJCXsKIAkJCU5vZGUgcm9vdCA9IGVj
bWFfY2FzdDxOb2RlPihleGVjLCBhcmdzWzBdLCAmdG9Ob2RlKTsKLQkJCXVuc2lnbmVkIHNob3J0
IHdoYXRUb1Nob3cgPSBhcmdzWzFdLnRvVUludDE2KGV4ZWMpOwotCQkJYm9vbCBlbnRpdHlSZWZl
cmVuY2VFeHBhbnNpb24gPSBhcmdzWzNdLnRvQm9vbGVhbihleGVjKTsKKwkJCXVuc2lnbmVkIHNo
b3J0IHdoYXRUb1Nob3cgPSBhcmdzWzFdLT50b1VJbnQxNihleGVjKTsKKwkJCWJvb2wgZW50aXR5
UmVmZXJlbmNlRXhwYW5zaW9uID0gYXJnc1szXS0+dG9Cb29sZWFuKGV4ZWMpOwogCQkJcmV0dXJu
IG9iai5jcmVhdGVUcmVlV2Fsa2VyKHJvb3QsIHdoYXRUb1Nob3csIE5vZGVGaWx0ZXI6Om51bGws
IGVudGl0eVJlZmVyZW5jZUV4cGFuc2lvbikuY2FjaGUoZXhlYyk7CiAJCX0KIAkJZGVmYXVsdDoK
SW5kZXg6IGtkb20vdHJhdmVyc2FsL0RvY3VtZW50VHJhdmVyc2FsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS90cmF2ZXJzYWwvRG9jdW1lbnRUcmF2ZXJz
YWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS90cmF2
ZXJzYWwvRG9jdW1lbnRUcmF2ZXJzYWwuaAotLS0ga2RvbS90cmF2ZXJzYWwvRG9jdW1lbnRUcmF2
ZXJzYWwuaAk5IEp1bCAyMDA1IDA2OjU0OjIzIC0wMDAwCTEuMQorKysga2RvbS90cmF2ZXJzYWwv
RG9jdW1lbnRUcmF2ZXJzYWwuaAk4IEF1ZyAyMDA1IDE4OjAyOjM0IC0wMDAwCkBAIC0xMTMsNyAr
MTEzLDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgog
CQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtkb20vdHJhdmVyc2FsL05vZGVJdGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJh
dG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS90
cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmNwcAotLS0ga2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJhdG9y
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjIzIC0wMDAwCTEuMQorKysga2RvbS90cmF2ZXJzYWwvTm9k
ZUl0ZXJhdG9yLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjM0IC0wMDAwCkBAIC01MCw3ICs1MCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiTm9kZUl0
ZXJhdG9yIiwgTm9kZUl0ZXJhdG9yUHJvdG8sIE5vZGVJdGVyYXRvclByb3RvRnVuYykKIAotVmFs
dWUgTm9kZUl0ZXJhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKk5vZGVJdGVyYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAt
NzIsNyArNzIsNyBAQCBWYWx1ZSBOb2RlSXRlcmF0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogfTsKIAotVmFsdWUgTm9kZUl0ZXJhdG9yUHJvdG9GdW5jOjpj
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICYpCitWYWx1
ZUltcCAqTm9kZUl0ZXJhdG9yUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICYpCiB7CiAJS0RPTV9DSEVDS19USElTKE5vZGVJdGVy
YXRvcikKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTg1LDcgKzg1LDcgQEAgVmFsdWUgTm9kZUl0ZXJh
dG9yUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdAogCQkJcmV0dXJuIGdldERPTU5vZGUoZXhlYywgb2Jq
LnByZXZpb3VzTm9kZSgpKTsKIAkJY2FzZSBOb2RlSXRlcmF0b3JDb25zdGFudHM6OkRldGFjaDoK
IAkJCW9iai5kZXRhY2goKTsKLQkJCXJldHVybiBWYWx1ZSgpOworCQkJcmV0dXJuIE5VTEw7CiAJ
CWRlZmF1bHQ6CiAJCQlrZFdhcm5pbmcoKSA8PCAiVW5oYW5kbGVkIGZ1bmN0aW9uIGlkIGluICIg
PDwga19mdW5jaW5mbyA8PCAiIDogIiA8PCBpZCA8PCBlbmRsOwogCX0KSW5kZXg6IGtkb20vdHJh
dmVyc2FsL05vZGVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20vdHJhdmVyc2FsL05vZGVJdGVyYXRvci5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3RyYXZlcnNhbC9Ob2RlSXRlcmF0b3IuaAotLS0g
a2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmgJOSBKdWwgMjAwNSAwNjo1NDoyMyAtMDAwMAkx
LjEKKysrIGtkb20vdHJhdmVyc2FsL05vZGVJdGVyYXRvci5oCTggQXVnIDIwMDUgMTg6MDI6MzQg
LTAwMDAKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFT
Y3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga2RvbS90cmF2ZXJzYWwvVHJlZVdhbGtlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS90cmF2ZXJzYWwvVHJlZVdh
bGtlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
dHJhdmVyc2FsL1RyZWVXYWxrZXIuY3BwCi0tLSBrZG9tL3RyYXZlcnNhbC9UcmVlV2Fsa2VyLmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjIzIC0wMDAwCTEuMQorKysga2RvbS90cmF2ZXJzYWwvVHJlZVdh
bGtlci5jcHAJOCBBdWcgMjAwNSAxODowMjozNSAtMDAwMApAQCAtNTQsNyArNTQsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIlRyZWVXYWxrZXIi
LCBUcmVlV2Fsa2VyUHJvdG8sIFRyZWVXYWxrZXJQcm90b0Z1bmMpCiAKLVZhbHVlIFRyZWVXYWxr
ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqVHJlZVdhbGtlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzgsNyArNzgsNyBAQCBW
YWx1ZSBUcmVlV2Fsa2VyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAJcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfTsKIAotdm9pZCBUcmVlV2Fsa2VyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmLCBpbnQpCit2b2lkIFRyZWVXYWxrZXI6OnB1
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICosIGlu
dCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFRyZWVXYWxr
ZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0CiAJS0RPTV9MRUFWRV9TQUZFKERPTUV4Y2VwdGlv
bikKIH0KIAotVmFsdWUgVHJlZVdhbGtlclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmKQorVmFsdWVJbXAgKlRyZWVXYWxrZXJQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QgJikKIHsKIAlLRE9NX0NIRUNLX1RISVMoVHJlZVdhbGtlcikKIAlLRE9NX0VOVEVSX1NBRkUK
SW5kZXg6IGtkb20vdHJhdmVyc2FsL1RyZWVXYWxrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3RyYXZlcnNhbC9UcmVlV2Fsa2VyLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vdHJhdmVyc2FsL1RyZWVXYWxr
ZXIuaAotLS0ga2RvbS90cmF2ZXJzYWwvVHJlZVdhbGtlci5oCTkgSnVsIDIwMDUgMDY6NTQ6MjMg
LTAwMDAJMS4xCisrKyBrZG9tL3RyYXZlcnNhbC9UcmVlV2Fsa2VyLmgJOCBBdWcgMjAwNSAxODow
MjozNSAtMDAwMApAQCAtNzAsOCArNzAsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAog
CQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQg
YXR0cik7CQkKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cik7CQkKIAl9OwogfTsKIApJbmRleDoga2RvbS92aWV3cy9BYnN0cmFjdFZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vdmlld3MvQWJzdHJhY3RW
aWV3LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS92
aWV3cy9BYnN0cmFjdFZpZXcuY3BwCi0tLSBrZG9tL3ZpZXdzL0Fic3RyYWN0Vmlldy5jcHAJOSBK
dWwgMjAwNSAwNjo1NDoyNiAtMDAwMAkxLjEKKysrIGtkb20vdmlld3MvQWJzdHJhY3RWaWV3LmNw
cAk4IEF1ZyAyMDA1IDE4OjAyOjM1IC0wMDAwCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBBYnN0cmFjdFZpZXc6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqQWJzdHJhY3RW
aWV3OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogCS8vIE5vIGV4Y2VwdGlvbnMgdGhyb3duIGhlcmUsIG5vIG5lZWQgZm9yIEtET01fRU5URVIv
TEVBVkVfU0FGRQogCkluZGV4OiBrZG9tL3ZpZXdzL0Fic3RyYWN0Vmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vdmlld3MvQWJzdHJhY3RWaWV3Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vdmlld3MvQWJz
dHJhY3RWaWV3LmgKLS0tIGtkb20vdmlld3MvQWJzdHJhY3RWaWV3LmgJOSBKdWwgMjAwNSAwNjo1
NDoyNiAtMDAwMAkxLjEKKysrIGtkb20vdmlld3MvQWJzdHJhY3RWaWV3LmgJOCBBdWcgMjAwNSAx
ODowMjozNSAtMDAwMApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0JB
U0VDTEFTU19HRVQKIAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKEFic3RyYWN0VmlldykKSW5kZXg6IGtkb20vdmll
d3MvRG9jdW1lbnRWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rZG9tL3ZpZXdzL0RvY3VtZW50Vmlldy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtkb20vdmlld3MvRG9jdW1lbnRWaWV3LmNwcAotLS0ga2RvbS92
aWV3cy9Eb2N1bWVudFZpZXcuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MjYgLTAwMDAJMS4xCisrKyBr
ZG9tL3ZpZXdzL0RvY3VtZW50Vmlldy5jcHAJOCBBdWcgMjAwNSAxODowMjozNSAtMDAwMApAQCAt
MzgsNyArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgRG9j
dW1lbnRWaWV3OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKkRvY3VtZW50Vmlldzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAkvLyBObyBleGNlcHRpb25zIHRocm93biBoZXJl
LCBubyBuZWVkIGZvciBLRE9NX0VOVEVSL0xFQVZFX1NBRkUKIApJbmRleDoga2RvbS92aWV3cy9E
b2N1bWVudFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL3ZpZXdzL0RvY3VtZW50Vmlldy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrZG9tL3ZpZXdzL0RvY3VtZW50Vmlldy5oCi0tLSBrZG9tL3ZpZXdzL0RvY3Vt
ZW50Vmlldy5oCTkgSnVsIDIwMDUgMDY6NTQ6MjYgLTAwMDAJMS4xCisrKyBrZG9tL3ZpZXdzL0Rv
Y3VtZW50Vmlldy5oCTggQXVnIDIwMDUgMTg6MDI6MzUgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAg
bmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JB
U0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAK
SW5kZXg6IGtkb20veHBhdGgvWFBhdGhFdmFsdWF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20veHBhdGgvWFBhdGhFdmFsdWF0b3IuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3hwYXRoL1hQYXRoRXZh
bHVhdG9yLmNwcAotLS0ga2RvbS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAJOSBKdWwgMjAwNSAw
Njo1NDoyNyAtMDAwMAkxLjEKKysrIGtkb20veHBhdGgvWFBhdGhFdmFsdWF0b3IuY3BwCTggQXVn
IDIwMDUgMTg6MDI6MzUgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtK
UzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJYUGF0aEV2YWx1YXRvciIsIFhQYXRoRXZh
bHVhdG9yUHJvdG8sIFhQYXRoRXZhbHVhdG9yUHJvdG9GdW5jKQogCi1WYWx1ZSBYUGF0aEV2YWx1
YXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpYUGF0aEV2YWx1YXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjcsOSArNjcs
OSBAQCBWYWx1ZSBYUGF0aEV2YWx1YXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFCiAJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBYUGF0aEV2YWx1YXRvclByb3RvRnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1w
ICpYUGF0aEV2YWx1YXRvclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdElt
cCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLQlYUGF0aEV2YWx1YXRvciBvYmooY2Fz
dChleGVjLCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOwor
CVhQYXRoRXZhbHVhdG9yIG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlRX0FTU0VSVChvYmou
ZCAhPSAwKTsKIAogCUtET01fRU5URVJfU0FGRQpAQCAtOTMsNyArOTMsNyBAQCBWYWx1ZSBYUGF0
aEV2YWx1YXRvclByb3RvRnVuYzo6Y2FsbChFeGVjCiAJCQlET01TdHJpbmcgZXhwcmVzc2lvbiA9
IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMF0pOwogCQkJTm9kZSBjb250ZXh0Tm9kZSA9IGVjbWFf
Y2FzdDxOb2RlPihleGVjLCBhcmdzWzFdLCAmdG9Ob2RlKTsKIAkJCVhQYXRoTlNSZXNvbHZlciBy
ZXNlciA9IGVjbWFfY2FzdDxYUGF0aE5TUmVzb2x2ZXI+KGV4ZWMsIGFyZ3NbMl0sICZ0b1hQYXRo
TlNSZXNvbHZlcik7Ci0JCQl1bnNpZ25lZCBpbnQgdHlwZSA9IGFyZ3NbM10udG9VSW50MTYoZXhl
Yyk7CisJCQl1bnNpZ25lZCBpbnQgdHlwZSA9IGFyZ3NbM10tPnRvVUludDE2KGV4ZWMpOwogCQkJ
CiAJCQkvKiBET01PYmplY3QgaXMgYSBwb3NzaWJsZSBwb29saW5nIG1lY2hhbmlzbSB3aGljaCB3
ZSBjdXJyZW50bHkgZG9uJ3QgdXNlIGFuZAogCQkJICogaGVuY2UgZG9uJ3Qga25vdyB3aGF0IHR5
cGUgb2YgY2xhc3MgaXQgc2hvdWxkIGJlLiAqLwpJbmRleDoga2RvbS94cGF0aC9YUGF0aEV2YWx1
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20veHBh
dGgvWFBhdGhFdmFsdWF0b3IuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS94cGF0aC9YUGF0aEV2YWx1YXRvci5oCi0tLSBrZG9tL3hwYXRoL1hQYXRoRXZh
bHVhdG9yLmgJOSBKdWwgMjAwNSAwNjo1NDoyNyAtMDAwMAkxLjEKKysrIGtkb20veHBhdGgvWFBh
dGhFdmFsdWF0b3IuaAk4IEF1ZyAyMDA1IDE4OjAyOjM1IC0wMDAwCkBAIC03MSw3ICs3MSw3IEBA
IG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9C
QVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9Owog
CkluZGV4OiBrZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9uLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS94cGF0aC9YUGF0aEV4
Y2VwdGlvbi5jcHAKLS0tIGtkb20veHBhdGgvWFBhdGhFeGNlcHRpb24uY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6MjcgLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9uLmNwcAk4IEF1
ZyAyMDA1IDE4OjAyOjM1IC0wMDAwCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBL
SlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBYUGF0aEV4Y2VwdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoRXhjZXB0aW9uOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNo
KHRva2VuKQogCXsKSW5kZXg6IGtkb20veHBhdGgvWFBhdGhFeGNlcHRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9u
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20veHBhdGgv
WFBhdGhFeGNlcHRpb24uaAotLS0ga2RvbS94cGF0aC9YUGF0aEV4Y2VwdGlvbi5oCTkgSnVsIDIw
MDUgMDY6NTQ6MjggLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9uLmgJOCBB
dWcgMjAwNSAxODowMjozNSAtMDAwMApAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgS0RPTQog
CXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS94cGF0
aC9YUGF0aEV4cHJlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tkb20veHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS94cGF0aC9YUGF0aEV4cHJlc3Npb24uY3BwCi0t
LSBrZG9tL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAJOSBKdWwgMjAwNSAwNjo1NDoyOCAtMDAw
MAkxLjEKKysrIGtkb20veHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcAk4IEF1ZyAyMDA1IDE4OjAy
OjM1IC0wMDAwCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01f
SU1QTEVNRU5UX1BST1RPVFlQRSgiWFBhdGhFeHByZXNzaW9uIiwgWFBhdGhFeHByZXNzaW9uUHJv
dG8sIFhQYXRoRXhwcmVzc2lvblByb3RvRnVuYykKIAotVmFsdWUgWFBhdGhFeHByZXNzaW9uOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlhQYXRoRXhwcmVzc2lvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjIsNyArNjIsNyBAQCBW
YWx1ZSBYUGF0aEV4cHJlc3Npb246OmdldFZhbHVlUHJvcGVydHkoCiAJcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1WYWx1ZSBYUGF0aEV4cHJlc3Npb25Qcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqWFBh
dGhFeHByZXNzaW9uUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhYUGF0aEV4cHJl
c3Npb24pCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03Myw3ICs3Myw3IEBAIFZhbHVlIFhQYXRoRXhw
cmVzc2lvblByb3RvRnVuYzo6Y2FsbChFeGUKIAkJY2FzZSBYUGF0aEV4cHJlc3Npb25Db25zdGFu
dHM6OkV2YWx1YXRlOgogCQl7CiAJCQlOb2RlIGNvbnRleHROb2RlID0gIGVjbWFfY2FzdDxOb2Rl
PihleGVjLCBhcmdzWzBdLCAmdG9Ob2RlKTsKLQkJCXVuc2lnbmVkIGludCB0eXBlID0gYXJnc1sz
XS50b1VJbnQxNihleGVjKTsKKwkJCXVuc2lnbmVkIGludCB0eXBlID0gYXJnc1szXS0+dG9VSW50
MTYoZXhlYyk7CiAJCQkvKiBET01PYmplY3QgaXMgYSBwb3NzaWJsZSBwb29saW5nIG1lY2hhbmlz
bSB3aGljaCB3ZSBjdXJyZW50bHkgZG9uJ3QgdXNlIGFuZAogCQkJICogaGVuY2UgZG9uJ3Qga25v
dyB3aGF0IHR5cGUgb2YgY2xhc3MgaXQgc2hvdWxkIGJlLiAqLwogCQkJLy9jb25zdCBET01PYmpl
Y3QgcmVzdWx0ID0gZWNtYV9jYXN0PERPTU9iamVjdD4oZXhlYywgYXJnc1s0XSwgJnRvRE9NT2Jq
ZWN0KTsKSW5kZXg6IGtkb20veHBhdGgvWFBhdGhFeHByZXNzaW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aEV4cHJlc3Npb24uaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS94cGF0aC9YUGF0
aEV4cHJlc3Npb24uaAotLS0ga2RvbS94cGF0aC9YUGF0aEV4cHJlc3Npb24uaAk5IEp1bCAyMDA1
IDA2OjU0OjI4IC0wMDAwCTEuMQorKysga2RvbS94cGF0aC9YUGF0aEV4cHJlc3Npb24uaAk4IEF1
ZyAyMDA1IDE4OjAyOjM1IC0wMDAwCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJ
cHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJ
S0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiAKIH07CkluZGV4OiBrZG9tL3hwYXRo
L1hQYXRoTlNSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAKLS0t
IGtkb20veHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjI4IC0wMDAw
CTEuMQorKysga2RvbS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuY3BwCTggQXVnIDIwMDUgMTg6MDI6
MzUgLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9J
TVBMRU1FTlRfUFJPVE9UWVBFKCJYUGF0aE5TUmVzb2x2ZXIiLCBYUGF0aE5TUmVzb2x2ZXJQcm90
bywgWFBhdGhOU1Jlc29sdmVyUHJvdG9GdW5jKQogCi1LSlM6OlZhbHVlIFhQYXRoTlNSZXNvbHZl
cjo6Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitL
SlM6OlZhbHVlSW1wICpYUGF0aE5TUmVzb2x2ZXI6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC01Nyw3
ICs1Nyw3IEBAIEtKUzo6VmFsdWUgWFBhdGhOU1Jlc29sdmVyOjpnZXRWYWx1ZVByb3AKIAlyZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFhQYXRoTlNSZXNvbHZlclByb3RvRnVuYzo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1Zh
bHVlSW1wICpYUGF0aE5TUmVzb2x2ZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElT
KFhQYXRoTlNSZXNvbHZlcikKIAlLRE9NX0VOVEVSX1NBRkUKSW5kZXg6IGtkb20veHBhdGgvWFBh
dGhOU1Jlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a2RvbS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga2RvbS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaAotLS0ga2RvbS94cGF0
aC9YUGF0aE5TUmVzb2x2ZXIuaAk5IEp1bCAyMDA1IDA2OjU0OjI4IC0wMDAwCTEuMQorKysga2Rv
bS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaAk4IEF1ZyAyMDA1IDE4OjAyOjM1IC0wMDAwCkBAIC02
MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAkJCiAJCUtE
T01fQ0FTVAogCQkKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiAKIAlLRE9N
X0RFRklORV9DQVNUKFhQYXRoTlNSZXNvbHZlcikKSW5kZXg6IGtkb20veHBhdGgvWFBhdGhOYW1l
c3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
eHBhdGgvWFBhdGhOYW1lc3BhY2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrZG9tL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcAotLS0ga2RvbS94cGF0aC9Y
UGF0aE5hbWVzcGFjZS5jcHAJOSBKdWwgMjAwNSAwNjo1NDoyOCAtMDAwMAkxLjEKKysrIGtkb20v
eHBhdGgvWFBhdGhOYW1lc3BhY2UuY3BwCTggQXVnIDIwMDUgMTg6MDI6MzUgLTAwMDAKQEAgLTM4
LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLUtKUzo6VmFsdWUg
WFBhdGhOYW1lc3BhY2U6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK0tKUzo6VmFsdWVJbXAgKlhQYXRoTmFtZXNwYWNlOjpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9F
TlRFUl9TQUZFCiAKSW5kZXg6IGtkb20veHBhdGgvWFBhdGhOYW1lc3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hwYXRoL1hQYXRoTmFtZXNwYWNl
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20veHBhdGgv
WFBhdGhOYW1lc3BhY2UuaAotLS0ga2RvbS94cGF0aC9YUGF0aE5hbWVzcGFjZS5oCTkgSnVsIDIw
MDUgMDY6NTQ6MjggLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmgJOCBB
dWcgMjAwNSAxODowMjozNiAtMDAwMApAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgS0RPTQog
CQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20veHBhdGgvWFBhdGhSZXN1bHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20veHBhdGgvWFBhdGhSZXN1
bHQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3hw
YXRoL1hQYXRoUmVzdWx0LmNwcAotLS0ga2RvbS94cGF0aC9YUGF0aFJlc3VsdC5jcHAJOSBKdWwg
MjAwNSAwNjo1NDoyOCAtMDAwMAkxLjEKKysrIGtkb20veHBhdGgvWFBhdGhSZXN1bHQuY3BwCTgg
QXVnIDIwMDUgMTg6MDI6MzYgLTAwMDAKQEAgLTUxLDcgKzUxLDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJYUGF0aFJlc3VsdCIsIFhQYXRoUmVz
dWx0UHJvdG8sIFhQYXRoUmVzdWx0UHJvdG9GdW5jKQogCi1LSlM6OlZhbHVlIFhQYXRoUmVzdWx0
OjpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitLSlM6OlZhbHVlSW1wICpYUGF0aFJlc3VsdDo6Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCUtET01f
RU5URVJfU0FGRQpAQCAtNzksNyArNzksNyBAQCBLSlM6OlZhbHVlIFhQYXRoUmVzdWx0OjpnZXRW
YWx1ZVByb3BlcnR5CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBYUGF0aFJlc3Vs
dFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKK1ZhbHVlSW1wICpYUGF0aFJlc3VsdFByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9N
X0NIRUNLX1RISVMoWFBhdGhSZXN1bHQpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC05MSw3ICs5MSw3
IEBAIFZhbHVlIFhQYXRoUmVzdWx0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGEKIAkJCXJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsIG9iai5pdGVyYXRlTmV4dCgpKTsKIAkJY2FzZSBYUGF0aFJlc3VsdENv
bnN0YW50czo6U25hcHNob3RJdGVtOgogCQl7Ci0JCQljb25zdCB1bnNpZ25lZCBsb25nIGluZGV4
ID0gKHVuc2lnbmVkIGxvbmcpIGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQljb25zdCB1bnNp
Z25lZCBsb25nIGluZGV4ID0gKHVuc2lnbmVkIGxvbmcpIGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMp
OwogCQkJcmV0dXJuIGdldERPTU5vZGUoZXhlYywgb2JqLnNuYXBzaG90SXRlbShpbmRleCkpOwog
CQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrZG9tL3hwYXRoL1hQYXRoUmVzdWx0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aFJlc3VsdC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3hwYXRoL1hQ
YXRoUmVzdWx0LmgKLS0tIGtkb20veHBhdGgvWFBhdGhSZXN1bHQuaAk5IEp1bCAyMDA1IDA2OjU0
OjI4IC0wMDAwCTEuMQorKysga2RvbS94cGF0aC9YUGF0aFJlc3VsdC5oCTggQXVnIDIwMDUgMTg6
MDI6MzYgLTAwMDAKQEAgLTg5LDcgKzg5LDcgQEAgbmFtZXNwYWNlIEtET00KIAogCXB1YmxpYzog
Ly8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoWFBhdGhSZXN1bHQp
CkluZGV4OiBrc3ZnMi9LU1ZHRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvS1NWR0ZhY3RvcnkuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9LU1ZHRmFjdG9yeS5jcHAKLS0tIGtzdmcyL0tT
VkdGYWN0b3J5LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjQ2IC0wMDAwCTEuMQorKysga3N2ZzIvS1NW
R0ZhY3RvcnkuY3BwCTggQXVnIDIwMDUgMTg6MDI6MzcgLTAwMDAKQEAgLTk3LDkgKzk3LDkgQEAg
S1BhcnRzOjpQYXJ0ICpLU1ZHRmFjdG9yeTo6Y3JlYXRlUGFydE9iagogCWZvcihRVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcjxRU3RyaW5nPiBpdCA9IGFyZ3MuYmVnaW4oKTsgaXQgIT0gYXJncy5lbmQo
KTsgKytpdCkgCiAJewogCQlpZihyMS5zZWFyY2goKml0KSA+IC0xKQotCQkJd2lkdGggPSByMS5j
YXAoMykudG9VSW50KCZkdW1teSk7CisJCQl3aWR0aCA9IHIxLmNhcCgzKS0+dG9VSW50KCZkdW1t
eSk7CiAJCWlmKHIyLnNlYXJjaCgqaXQpID4gLTEpCi0JCQloZWlnaHQgPSByMi5jYXAoMykudG9V
SW50KCZkdW1teSk7CisJCQloZWlnaHQgPSByMi5jYXAoMyktPnRvVUludCgmZHVtbXkpOwogCX0K
IAkKIAlyZXR1cm4gbmV3IEtTVkdQYXJ0KHBhcmVudFdpZGdldCwgd2lkZ2V0TmFtZSwgcGFyZW50
LCBuYW1lLCB3aWR0aCwgaGVpZ2h0KTsKSW5kZXg6IGtzdmcyL2RhdGEvU1ZHQ29uc3RhbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZGF0YS9TVkdD
b25zdGFudHMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZGF0YS9TVkdDb25zdGFudHMuaAotLS0ga3N2ZzIvZGF0YS9TVkdDb25zdGFudHMuaAk5IEp1
bCAyMDA1IDA2OjU0OjUwIC0wMDAwCTEuMQorKysga3N2ZzIvZGF0YS9TVkdDb25zdGFudHMuaAk4
IEF1ZyAyMDA1IDE4OjAyOjM3IC0wMDAwCkBAIC0xMTUsNyArMTE1LDcgQEAgbmFtZXNwYWNlIEtT
VkcKIAl7CiAJCXR5cGVkZWYgZW51bQogCQl7Ci0JCQlWYWx1ZSAKKwkJCVZhbHVlCiAJCX0gU1ZH
TnVtYmVyQ29uc3RhbnRzRW51bTsKIAl9OwogCkluZGV4OiBrc3ZnMi9kYXRhL2dlbmVyYXRlZGRh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rh
dGEvZ2VuZXJhdGVkZGF0YS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2RhdGEvZ2VuZXJhdGVkZGF0YS5jcHAKLS0tIGtzdmcyL2RhdGEvZ2VuZXJh
dGVkZGF0YS5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MCAtMDAwMAkxLjEKKysrIGtzdmcyL2RhdGEv
Z2VuZXJhdGVkZGF0YS5jcHAJOCBBdWcgMjAwNSAxODowMjo0MyAtMDAwMApAQCAtNTM3LDEyICs1
MzcsMTIgQEAgYm9vbCBTVkdBRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlIAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHQUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0FFbGVtZW50PihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FFbGVtZW50OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FFbGVtZW50OjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTU2NywxMCAr
NTY3LDEwIEBAIGJvb2wgU1ZHQUVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRp
bk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwo
KSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQUVsZW1lbnQ6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTc4LDcgKzU3OCw3IEBAIE9iamVjdEltcCAqU1ZH
QUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJp
ZGdlPFNWR0FFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdBRWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIFNWR0FFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlNWR0FFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdBRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHQUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNTg3LDEyICs1ODcsMTIgQEAgYm9v
bCBTVkdBbmdsZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMQogewogICAgIGNvbnN0IEhhc2hF
bnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdBbmdsZTo6c19oYXNoVGFibGUscDIpOwog
ICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR0FuZ2xlUHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0FuZ2xlUHJvdG86OnNlbGYocDEpOworICAgIGlm
KHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgU1ZHQW5nbGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHQW5nbGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006Omxvb2t1cEdldDxTVkdBbmdsZVByb3RvRnVuYyxTVkdBbmdsZT4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNjA5LDEwICs2MDksMTAgQEAgU1ZHQW5nbGUgS1NWRzo6
dG9TVkdBbmdsZShLSlM6OkV4ZWNTdGF0ZQogICAgIHJldHVybiBTVkdBbmdsZTo6bnVsbDsKIH0K
IAotVmFsdWUgU1ZHQW5nbGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHQW5nbGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHQW5nbGVQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJv
dG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmpl
Y3RJbXAgKnByb3RvID0gU1ZHQW5nbGVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VE
KHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC02MjgsMTAgKzYyOCwxMCBAQCBi
b29sIFNWR0FuZ2xlOjpwdXRJblBhcmVudHMoUFVUX01FVEhPRF9BCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1PYmplY3QgU1ZHQW5nbGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpTVkdBbmdsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBTVkdBbmdsZVByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlNWR0FuZ2xlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTYzOSw3ICs2Mzks
NyBAQCBPYmplY3RJbXAgKlNWR0FuZ2xlOjpicmlkZ2UoRXhlY1N0YXRlICpwCiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdBbmdsZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5nbGU6
OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmdsZTo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmdsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5nbGU+KHAxLHN0YXRp
Y19jYXN0PFNWR0FuZ2xlOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTY1MiwxMiArNjUyLDEy
IEBAIGJvb2wgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6aGFzUHJvcGVydHkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1W
YWx1ZSBTVkdBbmltYXRlQ29sb3JFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0KHAxLHAyLHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC02NzIsMTAgKzY3MiwxMCBAQCBib29sIFNW
R0FuaW1hdGVDb2xvckVsZW1lbnQ6OnB1dChQVVRfTUVUCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1PYmplY3QgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCkt
PmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVD
b2xvckVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNjgzLDcgKzY4Myw3
IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6YnJpZGcKICAgICByZXR1cm4g
bmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ+KHAxLHN0YXRpY19j
YXN0PFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBT
VkdBbmltYXRlQ29sb3JFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ+
KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwog
fQpAQCAtNjk2LDEyICs2OTYsMTIgQEAgYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6aGFzUHJvcGVy
dHkoRXhlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZUVsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZUVsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdl
dFZhbHVlPFNWR0FuaW1hdGVFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR0FuaW1hdGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNzE2LDEwICs3MTYsMTAgQEAgYm9vbCBTVkdBbmlt
YXRlRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2Jq
ZWN0IFNWR0FuaW1hdGVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHQW5pbWF0ZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVFbGVtZW50OjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTcyNyw3ICs3MjcsNyBAQCBPYmplY3RJbXAgKlNWR0Fu
aW1hdGVFbGVtZW50OjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRn
ZTxTVkdBbmltYXRlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZUVsZW1lbnQ6OlBy
aXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlRWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlRWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5p
bWF0ZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVFbGVtZW50OjpQcml2YXRlICo+
KGQpKTsKIH0KQEAgLTc0MCwxMiArNzQwLDEyIEBAIGJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQ6Omhhc1Byb3AKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICBpZihTVkdBbmltYXRpb25FbGVtZW50OjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBTVkdBbmltYXRpb25FbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKQEAgLTc2MCwxMCArNzYwLDEwIEBAIGJvb2wgU1ZHQW5pbWF0ZVRy
YW5zZm9ybUVsZW1lbnQ6OnB1dChQVVQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBT
VkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC03NzEsNyArNzcx
LDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6YgogICAgIHJldHVy
biBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ+KHAxLHN0
YXRpY19jYXN0PFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0K
IAotVmFsdWUgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC03ODQsMjEgKzc4NCwyMSBAQCBib29sIFNW
R0FuaW1hdGVkQW5nbGU6Omhhc1Byb3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBTVkdBbmltYXRlZEFuZ2xlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0FuaW1hdGVkQW5nbGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0FuaW1hdGVkQW5nbGU+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRBbmdsZTo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZEFuZ2xl
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAx
KTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRBbmdsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkQW5nbGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5P
YmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkp
OworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkQW5nbGU6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtODA2LDcgKzgwNiw3IEBAIE9iamVjdEltcCAq
U1ZHQW5pbWF0ZWRBbmdsZTo6YnJpZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJy
aWRnZTxTVkdBbmltYXRlZEFuZ2xlPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZEFuZ2xlOjpQ
cml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRBbmdsZTo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZEFuZ2xlOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdB
bmltYXRlZEFuZ2xlPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZEFuZ2xlOjpQcml2YXRlICo+
KGltcGwpKTsKIH0KQEAgLTgxOSwxMiArODE5LDEyIEBAIGJvb2wgU1ZHQW5pbWF0ZWRCb29sZWFu
OjpoYXNQcm9wZXJ0eShFeGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1h
dGVkQm9vbGVhbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmlt
YXRlZEJvb2xlYW46OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006Omxvb2t1cEdldFZhbHVlPFNWR0FuaW1hdGVkQm9vbGVhbj4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZEJvb2xlYW46OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRCb29sZWFuOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9V
TlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtODQx
LDEwICs4NDEsMTAgQEAgYm9vbCBTVkdBbmltYXRlZEJvb2xlYW46OnB1dEluUGFyZW50cyhQVQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0FuaW1hdGVkQm9vbGVhbjo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkQm9vbGVhbjo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+
aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqU1ZHQW5pbWF0ZWRCb29sZWFuOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTg1
Miw3ICs4NTIsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVkQm9vbGVhbjo6YnJpZGdlKEV4CiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdBbmltYXRlZEJvb2xlYW4+KHAxLHN0
YXRpY19jYXN0PFNWR0FuaW1hdGVkQm9vbGVhbjo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZh
bHVlIFNWR0FuaW1hdGVkQm9vbGVhbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTVkdBbmltYXRlZEJvb2xlYW46OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0FuaW1hdGVkQm9vbGVhbj4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHQW5pbWF0ZWRCb29sZWFuOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTg2
NSwxMiArODY1LDEyIEBAIGJvb2wgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6aGFzUHJvcGVydHkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkRW51bWVyYXRpb246Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0VmFsdWU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkRW51bWVyYXRpb246Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBR
X1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC04
ODcsMTAgKzg4NywxMCBAQCBib29sIFNWR0FuaW1hdGVkRW51bWVyYXRpb246OnB1dEluUGFyZW50
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkRW51
bWVyYXRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkRW51bWVyYXRpb246OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtODk4LDcgKzg5OCw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbjo6YnJpZGcKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0FuaW1hdGVk
RW51bWVyYXRpb24+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkRW51bWVyYXRpb246OlByaXZh
dGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2Jq
ZWN0PFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkRW51
bWVyYXRpb246OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtOTExLDEyICs5MTEsMTIgQEAgYm9v
bCBTVkdBbmltYXRlZEludGVnZXI6Omhhc1Byb3BlcnR5KEV4ZQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkSW50ZWdlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRJbnRlZ2Vy
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkSW50
ZWdlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdB
bmltYXRlZEludGVnZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CkBAIC05MzMsMTAgKzkzMywxMCBAQCBib29sIFNWR0FuaW1hdGVkSW50ZWdl
cjo6cHV0SW5QYXJlbnRzKFBVCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQW5p
bWF0ZWRJbnRlZ2VyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAq
U1ZHQW5pbWF0ZWRJbnRlZ2VyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBl
KCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4g
TlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlZEludGVnZXI6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtOTQ0LDcgKzk0NCw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRJ
bnRlZ2VyOjpicmlkZ2UoRXgKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0Fu
aW1hdGVkSW50ZWdlcj4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRJbnRlZ2VyOjpQcml2YXRl
ICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkSW50ZWdlcjo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5p
bWF0ZWRJbnRlZ2VyPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZEludGVnZXI6OlByaXZhdGUg
Kj4oaW1wbCkpOwogfQpAQCAtOTU3LDIxICs5NTcsMjEgQEAgYm9vbCBTVkdBbmltYXRlZExlbmd0
aDo6aGFzUHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5p
bWF0ZWRMZW5ndGg6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5p
bWF0ZWRMZW5ndGg6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006Omxvb2t1cEdldFZhbHVlPFNWR0FuaW1hdGVkTGVuZ3RoPihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkTGVuZ3RoOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkTGVuZ3RoOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVT
RUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmpl
Y3QgU1ZHQW5pbWF0ZWRMZW5ndGg6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpTVkdBbmltYXRlZExlbmd0aDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRMZW5ndGg6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtOTc5LDcgKzk3OSw3IEBAIE9iamVjdEltcCAqU1ZHQW5p
bWF0ZWRMZW5ndGg6OmJyaWRnZShFeGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxT
VkdBbmltYXRlZExlbmd0aD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRMZW5ndGg6OlByaXZh
dGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZExlbmd0aDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZExlbmd0aDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5p
bWF0ZWRMZW5ndGg+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkTGVuZ3RoOjpQcml2YXRlICo+
KGltcGwpKTsKIH0KQEAgLTk5MiwyMSArOTkyLDIxIEBAIGJvb2wgU1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0OjpoYXNQcm9wZXJ0eSgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1h
dGVkTGVuZ3RoTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdB
bmltYXRlZExlbmd0aExpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZExlbmd0aExpc3Q6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRM
ZW5ndGhMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFf
VU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRl
cnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6
ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpT
VkdBbmltYXRlZExlbmd0aExpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTAx
NCw3ICsxMDE0LDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRlZExlbmd0aExpc3Q6OmJyaWRnZQog
ICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0K
IAotVmFsdWUgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkTGVuZ3RoTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWRMZW5n
dGhMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZExlbmd0aExpc3Q6OlByaXZhdGUgKj4o
aW1wbCkpOwogfQpAQCAtMTAyNywxMiArMTAyNywxMiBAQCBib29sIFNWR0FuaW1hdGVkTnVtYmVy
OjpoYXNQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmlt
YXRlZE51bWJlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmlt
YXRlZE51bWJlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWROdW1iZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWROdW1iZXI6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWROdW1iZXI6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNF
RChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xMDQ5LDEw
ICsxMDQ5LDEwIEBAIGJvb2wgU1ZHQW5pbWF0ZWROdW1iZXI6OnB1dEluUGFyZW50cyhQVVQKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZE51bWJlcjo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkTnVtYmVyOjpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRl
cnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6
ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpT
VkdBbmltYXRlZE51bWJlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMDYwLDcg
KzEwNjAsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVkTnVtYmVyOjpicmlkZ2UoRXhlCiAgICAg
cmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdBbmltYXRlZE51bWJlcj4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHQW5pbWF0ZWROdW1iZXI6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBT
VkdBbmltYXRlZE51bWJlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpT
VkdBbmltYXRlZE51bWJlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWROdW1iZXI+KHAxLHN0YXRpY19jYXN0
PFNWR0FuaW1hdGVkTnVtYmVyOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTEwNzMsMjEgKzEw
NzMsMjEgQEAgYm9vbCBTVkdBbmltYXRlZE51bWJlckxpc3Q6Omhhc1Byb3BlcnR5KAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8
U1ZHQW5pbWF0ZWROdW1iZXJMaXN0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAK
LVZhbHVlIFNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZE51bWJlckxpc3Q6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7
IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdB
bmltYXRlZE51bWJlckxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpTVkdBbmltYXRlZE51bWJlckxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMDk1LDcgKzEwOTUsNyBAQCBPYmplY3RJbXAg
KlNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6YnJpZGdlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01C
cmlkZ2U8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZE51
bWJlckxpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZE51bWJl
ckxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRO
dW1iZXJMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
OjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRlZE51bWJlckxpc3Q+KHAxLHN0YXRpY19jYXN0PFNW
R0FuaW1hdGVkTnVtYmVyTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0xMTA4LDIxICsx
MTA4LDIxIEBAIGJvb2wgU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6aGFzUHJvcGVydHkoRXgKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkUGF0aERhdGE6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
QW5pbWF0ZWRQYXRoRGF0YT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1
ZSBTVkdBbmltYXRlZFBhdGhEYXRhOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUGF0aERhdGE6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VE
KHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZFBh
dGhEYXRhOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5p
bWF0ZWRQYXRoRGF0YTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYo
cDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CkBAIC0xMTMwLDcgKzExMzAsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVkUGF0
aERhdGE6OmJyaWRnZShFCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHQW5pbWF0
ZWRQYXRoRGF0YT4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRQYXRoRGF0YTo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkUGF0aERhdGE6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5p
bWF0ZWRQYXRoRGF0YT4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRQYXRoRGF0YTo6UHJpdmF0
ZSAqPihpbXBsKSk7CiB9CkBAIC0xMTQzLDIxICsxMTQzLDIxIEBAIGJvb2wgU1ZHQW5pbWF0ZWRQ
b2ludHM6Omhhc1Byb3BlcnR5KEV4ZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R0FuaW1hdGVkUG9pbnRzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R0FuaW1hdGVkUG9pbnRzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdBbmltYXRlZFBvaW50cz4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFBvaW50czo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFBvaW50czo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFf
VU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
T2JqZWN0IFNWR0FuaW1hdGVkUG9pbnRzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K09iamVjdEltcCAqU1ZHQW5pbWF0ZWRQb2ludHM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmpl
Y3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkUG9pbnRzOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTExNjUsNyArMTE2NSw3IEBAIE9iamVjdEltcCAq
U1ZHQW5pbWF0ZWRQb2ludHM6OmJyaWRnZShFeGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJy
aWRnZTxTVkdBbmltYXRlZFBvaW50cz4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRQb2ludHM6
OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFBvaW50czo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFBvaW50czo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8
U1ZHQW5pbWF0ZWRQb2ludHM+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUG9pbnRzOjpQcml2
YXRlICo+KGltcGwpKTsKIH0KQEAgLTExNzgsMjEgKzExNzgsMjEgQEAgYm9vbCBTVkdBbmltYXRl
ZFByZXNlcnZlQXNwZWN0UmF0aW86OmhhcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0
UmF0aW86OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVT
RUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZFByZXNlcnZlQXNw
ZWN0UmF0aW86OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC0xMjAwLDcgKzEyMDAsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1h
dGVkUHJlc2VydmVBc3BlY3RSYXRpCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZH
QW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZFBy
ZXNlcnZlQXNwZWN0UmF0aW86OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW86OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRlZFBy
ZXNlcnZlQXNwZWN0UmF0aW8+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkUHJlc2VydmVBc3Bl
Y3RSYXRpbzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0xMjEzLDIxICsxMjEzLDIxIEBAIGJv
b2wgU1ZHQW5pbWF0ZWRSZWN0OjpoYXNQcm9wZXJ0eShFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkUmVjdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdBbmltYXRlZFJlY3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0FuaW1hdGVkUmVjdD4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFJlY3Q6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRSZWN0
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAx
KTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRSZWN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZWRSZWN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlZFJlY3Q6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTIzNSw3ICsxMjM1LDcgQEAgT2JqZWN0SW1wICpT
VkdBbmltYXRlZFJlY3Q6OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJp
ZGdlPFNWR0FuaW1hdGVkUmVjdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRSZWN0OjpQcml2
YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRSZWN0OjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUmVjdDo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0
ZWRSZWN0PihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZFJlY3Q6OlByaXZhdGUgKj4oaW1wbCkp
OwogfQpAQCAtMTI0OCwxMiArMTI0OCwxMiBAQCBib29sIFNWR0FuaW1hdGVkU3RyaW5nOjpoYXNQ
cm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFN0
cmluZzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFN0
cmluZzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9v
a3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRTdHJpbmc+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAz
KTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRTdHJpbmc6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRTdHJpbmc6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7
IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xMjcwLDEwICsxMjcw
LDEwIEBAIGJvb2wgU1ZHQW5pbWF0ZWRTdHJpbmc6OnB1dEluUGFyZW50cyhQVVQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZFN0cmluZzo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkU3RyaW5nOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRl
cigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmlt
YXRlZFN0cmluZzo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMjgxLDcgKzEyODEs
NyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVkU3RyaW5nOjpicmlkZ2UoRXhlCiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdBbmltYXRlZFN0cmluZz4ocDEsc3RhdGljX2Nhc3Q8
U1ZHQW5pbWF0ZWRTdHJpbmc6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmlt
YXRlZFN0cmluZzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmlt
YXRlZFN0cmluZzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWRTdHJpbmc+KHAxLHN0YXRpY19jYXN0PFNWR0Fu
aW1hdGVkU3RyaW5nOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTEyOTQsMjEgKzEyOTQsMjEg
QEAgYm9vbCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6Omhhc1Byb3BlcgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VO
VVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9i
amVjdCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCkt
PmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVk
VHJhbnNmb3JtTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMzE2LDcgKzEz
MTYsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6YnJpCiAgICAgcmV0
dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PihwMSxzdGF0
aWNfY2FzdDxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQog
Ci1WYWx1ZSBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRl
ZFRyYW5zZm9ybUxpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6
UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0xMzI1LDE1ICsxMzI1LDE1IEBAIGJvb2wgU1ZHQW5p
bWF0aW9uRWxlbWVudDo6aGFzUHJvcGVydHkoRXgKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUg
PSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHQW5pbWF0aW9uRWxlbWVudDo6c19oYXNoVGFibGUscDIp
OwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR0FuaW1hdGlv
bkVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHQW5pbWF0aW9uRWxlbWVu
dFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gdHJ1ZTsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0
cnVlOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHVGVzdHM6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRpb25F
bGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGlv
bkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
Omxvb2t1cEdldDxTVkdBbmltYXRpb25FbGVtZW50UHJvdG9GdW5jLFNWR0FuaW1hdGlvbkVsZW1l
bnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTEzNTMsMTAgKzEzNTMsMTAg
QEAgU1ZHQW5pbWF0aW9uRWxlbWVudCBTVkdBbmltYXRpb25FbGVtZW50UAogICAgIHJldHVybiBT
VkdBbmltYXRpb25FbGVtZW50OjpudWxsOwogfQogCi1WYWx1ZSBTVkdBbmltYXRpb25FbGVtZW50
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1h
dGlvbkVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAg
T2JqZWN0IHByb3RvID0gU1ZHQW5pbWF0aW9uRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBp
Zihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAg
IE9iamVjdEltcCAqcHJvdG8gPSBTVkdBbmltYXRpb25FbGVtZW50UHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAy
KTsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVt
ZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHVGVzdHM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIFNWR1Rlc3RzOjpnZXQocDEscDIscDMpOwpAQCAtMTM3MiwxMCArMTM3MiwxMCBAQCBib29s
IFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnB1dChQVVRfTUVUSE9ECiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgU1ZHQW5pbWF0aW9uRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGlvbkVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHQW5pbWF0aW9uRWxlbWVudFBy
b3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTM4Myw3ICsxMzgzLDcgQEAgT2JqZWN0SW1w
ICpTVkdBbmltYXRpb25FbGVtZW50OjpicmlkZ2UoRQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9N
UldCcmlkZ2U8U1ZHQW5pbWF0aW9uRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0aW9u
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0aW9uRWxlbWVu
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVE
T01PYmplY3Q8U1ZHQW5pbWF0aW9uRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0aW9u
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNDAxLDEyICsxNDAxLDEyIEBAIGJvb2wg
U1ZHQ2lyY2xlRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1MKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIFNWR0NpcmNsZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHQ2lyY2xlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQ2lyY2xlRWxlbWVudD4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdDaXJjbGVFbGVtZW50OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0NpcmNsZUVsZW1l
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxl
bWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAz
KTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpA
QCAtMTQzMCwxMCArMTQzMCwxMCBAQCBib29sIFNWR0NpcmNsZUVsZW1lbnQ6OnB1dChQVVRfTUVU
SE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQ2lyY2xlRWxlbWVudDo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0NpcmNsZUVsZW1l
bnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
cDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKlNWR0NpcmNsZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
MTQ0MSw3ICsxNDQxLDcgQEAgT2JqZWN0SW1wICpTVkdDaXJjbGVFbGVtZW50OjpicmlkZ2UoRXhl
YwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQ2lyY2xlRWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHQ2lyY2xlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVl
IFNWR0NpcmNsZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHQ2lyY2xlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQ2lyY2xlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHQ2lyY2xlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNDU5LDEyICsxNDU5LDEy
IEBAIGJvb2wgU1ZHQ2xpcFBhdGhFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGUKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0NsaXBQYXRoRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdDbGlwUGF0aEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0NsaXBQYXRo
RWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdDbGlw
UGF0aEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHQ2xpcFBhdGhFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0Vs
ZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTE0ODgsMTAgKzE0ODgsMTAgQEAgYm9vbCBTVkdDbGlwUGF0
aEVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EXwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0
IFNWR0NsaXBQYXRoRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmpl
Y3RJbXAgKlNWR0NsaXBQYXRoRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQ2xpcFBhdGhFbGVtZW50OjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE0OTksNyArMTQ5OSw3IEBAIE9iamVjdEltcCAqU1ZH
Q2xpcFBhdGhFbGVtZW50OjpicmlkZ2UoRXgKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJp
ZGdlPFNWR0NsaXBQYXRoRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVtZW50
OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHQ2xpcFBhdGhFbGVtZW50OjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0NsaXBQYXRoRWxlbWVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8
U1ZHQ2xpcFBhdGhFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQ6OlBy
aXZhdGUgKj4oZCkpOwogfQpAQCAtMTUwOCwxMyArMTUwOCwxMyBAQCBib29sIFNWR0NvbG9yOjpo
YXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9v
a3VwOjpmaW5kRW50cnkoJlNWR0NvbG9yOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0
dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHQ29sb3JQcm90bzo6c2VsZihwMSk7Ci0g
ICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gU1ZHQ29sb3JQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoS0RPTTo6Q1NTVmFsdWU6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBTVkdDb2xvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdDb2xv
cjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0PFNWR0NvbG9yUHJvdG9GdW5jLFNWR0NvbG9yPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CkBAIC0xNTI4LDEwICsxNTI4LDEwIEBAIFNWR0NvbG9yIFNWR0NvbG9yUHJvdG9GdW5j
OjpjYXN0KEtKUzo6RXgKICAgICByZXR1cm4gU1ZHQ29sb3I6Om51bGw7CiB9CiAKLVZhbHVlIFNW
R0NvbG9yOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R0NvbG9yOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVj
dCBwcm90byA9IFNWR0NvbG9yUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90
byA9IFNWR0NvbG9yUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihLRE9NOjpDU1NWYWx1ZTo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gS0RPTTo6Q1NTVmFsdWU6OmdldChwMSxwMixwMyk7
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtMTU0NSwxMCArMTU0NSwxMCBAQCBib29s
IFNWR0NvbG9yOjpwdXQoUFVUX01FVEhPRF9BUkdTKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
T2JqZWN0IFNWR0NvbG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqU1ZHQ29sb3I6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gU1ZHQ29sb3JQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHlu
YW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdD
b2xvcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCBP
YmplY3RJbXAgKlNWR0NvbG9yOjpicmlkZ2UoRXhlY1N0YXRlICpwCiAgICAgcmV0dXJuIG5ldyBL
RE9NOjpET01SV0JyaWRnZTxTVkdDb2xvcj4ocDEsc3RhdGljX2Nhc3Q8U1ZHQ29sb3I6OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdDb2xvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpTVkdDb2xvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQ29sb3I+KHAxLHN0YXRpY19jYXN0PFNW
R0NvbG9yOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE1NjksMTIgKzE1NjksMTIgQEAgYm9vbCBT
VkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldFZhbHVlPFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50PihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb25FbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwpAQCAtMTU4OSwxMCArMTU4OSwxMCBAQCBib29sIFNWR0NvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb25FbGVtZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZH
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBj
b25zdApAQCAtMTYwMCw3ICsxNjAwLDcgQEAgT2JqZWN0SW1wICpTVkdDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uRQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0NvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb25FbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0Nv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNjE4LDEy
ICsxNjE4LDEyIEBAIGJvb2wgU1ZHRGVmc0VsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0RlZnNFbGVtZW50OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0RlZnNFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdEZWZzRWxl
bWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdEZWZzRWxl
bWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdE
ZWZzRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBp
ZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQo
cDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxw
MixwMyk7CkBAIC0xNjQ3LDEwICsxNjQ3LDEwIEBAIGJvb2wgU1ZHRGVmc0VsZW1lbnQ6OnB1dChQ
VVRfTUVUSE9EX0FSR1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdEZWZzRWxl
bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0RlZnNF
bGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpTVkdEZWZzRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC0xNjU4LDcgKzE2NTgsNyBAQCBPYmplY3RJbXAgKlNWR0RlZnNFbGVtZW50OjpicmlkZ2UoRXhl
Y1N0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdEZWZzRWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHRGVmc0VsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBT
VkdEZWZzRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdE
ZWZzRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHRGVmc0VsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0RlZnNF
bGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE2NzMsMTIgKzE2NzMsMTIgQEAgYm9vbCBT
VkdEZXNjRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHRGVzY0VsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRGVzY0VsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0Rlc2NFbGVtZW50PihwMSxwMiwmc19oYXNo
VGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0Rlc2NFbGVtZW50OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0Rlc2NFbGVtZW50OjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYo
U1ZHTGFuZ1NwYWNlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdMYW5nU3BhY2U6Omdl
dChwMSxwMixwMyk7CkBAIC0xNjk5LDEwICsxNjk5LDEwIEBAIGJvb2wgU1ZHRGVzY0VsZW1lbnQ6
OnB1dChQVVRfTUVUSE9EX0FSR1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdE
ZXNjRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNW
R0Rlc2NFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpTVkdEZXNjRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CkBAIC0xNzEwLDcgKzE3MTAsNyBAQCBPYmplY3RJbXAgKlNWR0Rlc2NFbGVtZW50Ojpicmlk
Z2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdEZXNjRWxlbWVu
dD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRGVzY0VsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1W
YWx1ZSBTVkdEZXNjRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpTVkdEZXNjRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRGVzY0VsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNW
R0Rlc2NFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTE3MjMsMTIgKzE3MjMsMTIgQEAg
Ym9vbCBTVkdEb2N1bWVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlIAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgU1ZHRG9jdW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHRG9jdW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0RvY3VtZW50PihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0RvY3VtZW50OjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0RvY3VtZW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKEtET006OkRvY3VtZW50OjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBLRE9NOjpEb2N1bWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CkBAIC0xNzQ4LDEwICsxNzQ4LDEwIEBAIGJvb2wgU1ZHRG9jdW1lbnQ6
OnB1dEluUGFyZW50cyhQVVRfTUVUSE8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBT
VkdEb2N1bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNW
R0RvY3VtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogS0RPTTo6RG9jdW1lbnQgS1NWRzo6RWNtYUludGVyZmFjZTo6aW5oZXJpdGVkRG9jdW1lbnRD
YXN0KGNvbnN0IE9iamVjdEltcCAqcDEpCkBAIC0xNzc0LDcgKzE3NzQsNyBAQCBPYmplY3RJbXAg
KlNWR0RvY3VtZW50OjpicmlkZ2UoRXhlY1N0YXRlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01S
V0JyaWRnZTxTVkdEb2N1bWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQ6OlByaXZhdGUg
Kj4oS0RPTTo6RXZlbnRUYXJnZXQ6OmQpKTsKIH0KIAotVmFsdWUgU1ZHRG9jdW1lbnQ6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRG9jdW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0Rv
Y3VtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdEb2N1bWVudDo6UHJpdmF0ZSAqPihLRE9NOjpFdmVu
dFRhcmdldDo6ZCkpOwogfQpAQCAtMTc4Nyw3ICsxNzg3LDcgQEAgYm9vbCBTVkdFbGVtZW50Ojpo
YXNQcm9wZXJ0eShFeGVjU3RhdGUgKgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZH
RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBH
ZXRWYWx1ZTxTVkdFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0x
OTA3LDcgKzE5MDcsNyBAQCBTVkdFbGVtZW50IEtTVkc6OnRvU1ZHRWxlbWVudChLSlM6OkV4ZWNT
CiAgICAgcmV0dXJuIFNWR0VsZW1lbnQ6Om51bGw7CiB9CiAKLVZhbHVlIFNWR0VsZW1lbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxlbWVudDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihLRE9NOjpFbGVt
ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBLRE9NOjpFbGVtZW50OjpnZXQocDEscDIs
cDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTE5MjcsMTAgKzE5MjcsMTAgQEAgYm9v
bCBTVkdFbGVtZW50OjpwdXRJblBhcmVudHMoUFVUX01FVEhPRAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotT2JqZWN0IFNWR0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpTVkdFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90
eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1
cm4gTlVMTDsKIH0KIAogS0RPTTo6RWxlbWVudCBLU1ZHOjpFY21hSW50ZXJmYWNlOjppbmhlcml0
ZWRFbGVtZW50Q2FzdChjb25zdCBPYmplY3RJbXAgKnAxKQpAQCAtMTk0Nyw3ICsxOTQ3LDcgQEAg
T2JqZWN0SW1wICpTVkdFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlIAogICAgIHJldHVybiBuZXcg
S0RPTTo6RE9NUldCcmlkZ2U8U1ZHRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudDo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRWxlbWVudD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xOTYwLDEyICsxOTYw
LDEyIEBAIGJvb2wgU1ZHRWxlbWVudEluc3RhbmNlOjpoYXNQcm9wZXJ0eShFeGUKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0VsZW1lbnRJbnN0YW5jZTo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50SW5zdGFuY2U6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0VsZW1l
bnRJbnN0YW5jZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdF
bGVtZW50SW5zdGFuY2U6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRWxlbWVudEluc3RhbmNlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIGlmKEtET006OkV2ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBLRE9NOjpFdmVudFRhcmdldDo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CkBAIC0xOTgwLDEwICsxOTgwLDEwIEBAIGJvb2wgU1ZHRWxlbWVudEluc3RhbmNlOjpw
dXQoUFVUX01FVEhPRF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdFbGVtZW50
SW5zdGFuY2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdF
bGVtZW50SW5zdGFuY2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZTo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CkBAIC0xOTkxLDcgKzE5OTEsNyBAQCBPYmplY3RJbXAgKlNWR0VsZW1lbnRJbnN0
YW5jZTo6YnJpZGdlKEV4CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdFbGVt
ZW50SW5zdGFuY2U+KHAxLHN0YXRpY19jYXN0PFNWR0VsZW1lbnRJbnN0YW5jZTo6UHJpdmF0ZSAq
PihkKSk7CiB9CiAKLVZhbHVlIFNWR0VsZW1lbnRJbnN0YW5jZTo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50SW5zdGFuY2U6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0VsZW1lbnRJ
bnN0YW5jZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudEluc3RhbmNlOjpQcml2YXRlICo+KGQp
KTsKIH0KQEAgLTIwMDAsMTIgKzIwMDAsMTIgQEAgYm9vbCBTVkdFbGVtZW50SW5zdGFuY2VMaXN0
OjpoYXNQcm9wZXJ0eQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVu
dHJ5KCZTVkdFbGVtZW50SW5zdGFuY2VMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkg
cmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHRWxlbWVudEluc3RhbmNlTGlzdFBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0
cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdFbGVtZW50SW5zdGFuY2VMaXN0UHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVl
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50SW5zdGFuY2VM
aXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29r
dXBHZXQ8U1ZHRWxlbWVudEluc3RhbmNlTGlzdFByb3RvRnVuYyxTVkdFbGVtZW50SW5zdGFuY2VM
aXN0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0yMDE3LDE4ICsyMDE3LDE4
IEBAIFNWR0VsZW1lbnRJbnN0YW5jZUxpc3QgU1ZHRWxlbWVudEluc3RhbmMKICAgICByZXR1cm4g
U1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHRWxlbWVudEluc3Rh
bmNlTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdFbGVtZW50SW5zdGFuY2VMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewotICAgIE9iamVjdCBwcm90byA9IFNWR0VsZW1lbnRJbnN0YW5jZUxpc3RQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0
KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHRWxlbWVudEluc3RhbmNlTGlzdFBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotT2JqZWN0IFNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdFbGVtZW50SW5zdGFuY2VMaXN0Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR0VsZW1l
bnRJbnN0YW5jZUxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdFbGVt
ZW50SW5zdGFuY2VMaXN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIwMzYsNyAr
MjAzNiw3IEBAIE9iamVjdEltcCAqU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6YnJpZGcKICAgICBy
ZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdFbGVtZW50SW5zdGFuY2VMaXN0PihwMSxzdGF0
aWNfY2FzdDxTVkdFbGVtZW50SW5zdGFuY2VMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAot
VmFsdWUgU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K1ZhbHVlSW1wICpTVkdFbGVtZW50SW5zdGFuY2VMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdFbGVtZW50SW5zdGFu
Y2VMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdFbGVtZW50SW5zdGFuY2VMaXN0OjpQcml2YXRlICo+
KGltcGwpKTsKIH0KQEAgLTIwNTQsMTIgKzIwNTQsMTIgQEAgYm9vbCBTVkdFbGxpcHNlRWxlbWVu
dDo6aGFzUHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRWxs
aXBzZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxs
aXBzZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006Omxvb2t1cEdldFZhbHVlPFNWR0VsbGlwc2VFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0VsbGlwc2VFbGVtZW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0VsbGlwc2VFbGVtZW50OjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTIwODMsMTAg
KzIwODMsMTAgQEAgYm9vbCBTVkdFbGxpcHNlRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0VsbGlwc2VFbGVtZW50Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRWxsaXBzZUVsZW1lbnQ6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVy
cHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0Ojpk
eW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNW
R0VsbGlwc2VFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIwOTQsNyAr
MjA5NCw3IEBAIE9iamVjdEltcCAqU1ZHRWxsaXBzZUVsZW1lbnQ6OmJyaWRnZShFeGUKICAgICBy
ZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0VsbGlwc2VFbGVtZW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdFbGxpcHNlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0Vs
bGlwc2VFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0Vs
bGlwc2VFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpjYWNoZURPTU9iamVjdDxTVkdFbGxpcHNlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZH
RWxsaXBzZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjEwNywxMiArMjEwNywxMiBA
QCBib29sIFNWR0V2ZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBTVkdFdmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdFdmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRXZlbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KIAotVmFsdWUgU1ZHRXZlbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHRXZlbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgaWYoS0RPTTo6RXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IEtET006OkV2ZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAg
LTIxMjQsMTAgKzIxMjQsMTAgQEAgYm9vbCBTVkdFdmVudDo6cHV0KFBVVF9NRVRIT0RfQVJHUykK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdFdmVudDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0V2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWls
dGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVs
bCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdFdmVudDo6YnJpZGdl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMTM1LDcgKzIxMzUsNyBAQCBPYmplY3RJbXAgKlNW
R0V2ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0Jy
aWRnZTxTVkdFdmVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRXZlbnQ6OlByaXZhdGUgKj4oZCkpOwog
fQogCi1WYWx1ZSBTVkdFdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpTVkdFdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHRXZlbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0V2ZW50OjpQcml2
YXRlICo+KGQpKTsKIH0KQEAgLTIxNDgsMjEgKzIxNDgsMjEgQEAgYm9vbCBTVkdFeGNlcHRpb246
Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZH
RXhjZXB0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0V4Y2Vw
dGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9v
a3VwR2V0VmFsdWU8U1ZHRXhjZXB0aW9uPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR0V4Y2VwdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdFeGNlcHRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdFeGNlcHRpb246OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdFeGNlcHRpb246OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVy
cHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0Ojpk
eW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNW
R0V4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMTcwLDcgKzIxNzAs
NyBAQCBPYmplY3RJbXAgKlNWR0V4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHRXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxTVkdFeGNl
cHRpb246OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdFeGNlcHRpb246OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRXhjZXB0aW9uOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdF
eGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PFNWR0V4Y2VwdGlvbjo6UHJpdmF0ZSAqPihpbXBsKSk7
CiB9CkBAIC0yMTgzLDIxICsyMTgzLDIxIEBAIGJvb2wgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aGFzUHIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFf
VU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVp
bHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51
bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMjA1LDcgKzIy
MDUsNyBAQCBPYmplY3RJbXAgKlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6CiAgICAgcmV0
dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6UHJpdmF0ZSAqPihpbXBs
KSk7CiB9CiAKLVZhbHVlIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01P
YmplY3Q8U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0yMjE5LDEy
ICsyMjE5LDEyIEBAIGJvb2wgU1ZHRkVCbGVuZEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWMKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZFQmxlbmRFbGVtZW50OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFQmxlbmRFbGVtZW50OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdG
RUJsZW5kRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBT
VkdGRUJsZW5kRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdGRUJsZW5kRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBT
VkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpnZXQocDEscDIscDMpOwpAQCAtMjI0MCwxMCArMjI0MCwx
MCBAQCBib29sIFNWR0ZFQmxlbmRFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRkVCbGVuZEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGRUJsZW5kRWxlbWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVCbGVu
ZEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjI1MSw3ICsyMjUxLDcg
QEAgT2JqZWN0SW1wICpTVkdGRUJsZW5kRWxlbWVudDo6YnJpZGdlKEV4ZQogICAgIHJldHVybiBu
ZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVCbGVuZEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNW
R0ZFQmxlbmRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVCbGVuZEVs
ZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVCbGVuZEVs
ZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNh
Y2hlRE9NT2JqZWN0PFNWR0ZFQmxlbmRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUJsZW5k
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yMjY1LDEyICsyMjY1LDEyIEBAIGJvb2wg
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6Omhhc1Byb3BlcnQKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGRUNvbG9y
TWF0cml4RWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBT
VkdGRUNvbG9yTWF0cml4RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpnZXQocDEscDIscDMpOwpAQCAtMjI4
NiwxMCArMjI4NiwxMCBAQCBib29sIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpwdXQoUFVUX01F
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGRUNvbG9yTWF0
cml4RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIE9iamVjdEltcCAqU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtMjI5Nyw3ICsyMjk3LDcgQEAgT2JqZWN0SW1wICpTVkdGRUNvbG9yTWF0
cml4RWxlbWVudDo6YnJpZAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hl
RE9NT2JqZWN0PFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUNv
bG9yTWF0cml4RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yMzExLDEyICsyMzExLDEy
IEBAIGJvb2wgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6Omhhc1AKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVt
ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29r
dXBHZXRWYWx1ZTxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudD4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUNvbXBv
bmVudFRyYW5zZmVyRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVt
ZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpnZXQocDEscDIscDMpOwpAQCAtMjMzMiwxMCArMjMzMiwxMCBAQCBi
b29sIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwdXQoCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1PYmplY3QgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVy
biBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVy
biBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9i
amVjdEltcCAqU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtMjM0Myw3ICsyMzQzLDcgQEAgT2JqZWN0SW1wICpTVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFQ29tcG9uZW50VHJh
bnNmZXJFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC0yMzU3LDEyICsyMzU3LDEyIEBAIGJvb2wgU1ZHRkVDb21wb3Np
dGVFbGVtZW50OjpoYXNQcm9wZXJ0eSgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0ZFQ29tcG9zaXRlRWxlbWVudD4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVD
b21wb3NpdGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6
OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OmdldChwMSxwMixwMyk7CkBAIC0yMzc4LDEwICsyMzc4LDEwIEBAIGJvb2wg
U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwdXQoUFVUX01FVEgKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU9iamVjdCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCkt
PmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ZFQ29tcG9z
aXRlRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMzg5LDcgKzIzODks
NyBAQCBPYmplY3RJbXAgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnJpZGdlCiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ+KHAxLHN0YXRpY19j
YXN0PFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZFQ29tcG9zaXRlRWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTI0MDMsMTIgKzI0MDMsMTIgQEAgYm9vbCBTVkdGRUZsb29kRWxlbWVudDo6aGFzUHJvcGVydHko
RXhlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRkVGbG9vZEVsZW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVGbG9vZEVsZW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZh
bHVlPFNWR0ZFRmxvb2RFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAK
LVZhbHVlIFNWR0ZFRmxvb2RFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKlNWR0ZFRmxvb2RFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldChwMSxwMixwMyk7CkBAIC0yNDI0LDEw
ICsyNDI0LDEwIEBAIGJvb2wgU1ZHRkVGbG9vZEVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0EKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdGRUZsb29kRWxlbWVudDo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0ZFRmxvb2RFbGVtZW50Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRl
cnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6
ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpT
VkdGRUZsb29kRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNDM1LDcg
KzI0MzUsNyBAQCBPYmplY3RJbXAgKlNWR0ZFRmxvb2RFbGVtZW50OjpicmlkZ2UoRXhlCiAgICAg
cmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdGRUZsb29kRWxlbWVudD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHRkVGbG9vZEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdG
RUZsb29kRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdG
RUZsb29kRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVGbG9vZEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNW
R0ZFRmxvb2RFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI0NDQsMTQgKzI0NDQsMTQg
QEAgYm9vbCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6Omhhc1Byb3BlcgogewogICAgIGNvbnN0
IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3Qg
cHJvdG8gPSBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYo
cHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnBy
b3RvID0gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHBy
b3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0VsZW1lbnQ6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9v
a3VwR2V0PFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudFByb3RvRnVuYyxTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTI0NjMsMTAgKzI0
NjMsMTAgQEAgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50IFNWR0ZFR2F1c3NpYW5CbAogICAgIHJl
dHVybiBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6Om51bGw7CiB9CiAKLVZhbHVlIFNWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBp
ZihTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAy
LHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0yNDgxLDEwICsyNDgxLDEwIEBAIGJv
b2wgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpwdXQoUFVUX00KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU9iamVjdCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI0OTIs
NyArMjQ5Miw3IEBAIE9iamVjdEltcCAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpicmkKICAg
ICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUdhdXNzaWFuQmx1ckVsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjUwOSwxMiArMjUwOSwxMiBAQCBib29sIFNWR0ZF
SW1hZ2VFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
YWx1ZSBTVkdGRUltYWdlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdGRUltYWdlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRkVJbWFnZUVsZW1lbnQ+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRkVJbWFnZUVsZW1lbnQ6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVJbWFnZUVsZW1l
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxl
bWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAz
KTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpA
QCAtMjUzNywxMCArMjUzNywxMCBAQCBib29sIFNWR0ZFSW1hZ2VFbGVtZW50OjpwdXQoUFVUX01F
VEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRkVJbWFnZUVsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGRUltYWdlRWxl
bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVy
biBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVy
biBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9i
amVjdEltcCAqU1ZHRkVJbWFnZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtMjU0OCw3ICsyNTQ4LDcgQEAgT2JqZWN0SW1wICpTVkdGRUltYWdlRWxlbWVudDo6YnJpZGdl
KEV4ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVJbWFnZUVsZW1lbnQ+
KHAxLHN0YXRpY19jYXN0PFNWR0ZFSW1hZ2VFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgU1ZHRkVJbWFnZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRkVJbWFnZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZFSW1hZ2VFbGVtZW50PihwMSxzdGF0
aWNfY2FzdDxTVkdGRUltYWdlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yNTYyLDEy
ICsyNTYyLDEyIEBAIGJvb2wgU1ZHRkVNZXJnZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWMKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZFTWVyZ2VFbGVtZW50OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFTWVyZ2VFbGVtZW50OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdG
RU1lcmdlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBT
VkdGRU1lcmdlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdGRU1lcmdlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBT
VkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpnZXQocDEscDIscDMpOwpAQCAtMjU4MywxMCArMjU4Mywx
MCBAQCBib29sIFNWR0ZFTWVyZ2VFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRkVNZXJnZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGRU1lcmdlRWxlbWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVNZXJn
ZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjU5NCw3ICsyNTk0LDcg
QEAgT2JqZWN0SW1wICpTVkdGRU1lcmdlRWxlbWVudDo6YnJpZGdlKEV4ZQogICAgIHJldHVybiBu
ZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVNZXJnZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNW
R0ZFTWVyZ2VFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVNZXJnZUVs
ZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVNZXJnZUVs
ZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNh
Y2hlRE9NT2JqZWN0PFNWR0ZFTWVyZ2VFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRU1lcmdl
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yNjA3LDEyICsyNjA3LDEyIEBAIGJvb2wg
U1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpoYXNQcm9wZXJ0eSgKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVZhbHVlIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0ZFTWVyZ2VOb2Rl
RWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdGRU1l
cmdlTm9kZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAt
MjYyNywxMCArMjYyNywxMCBAQCBib29sIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6cHV0KFBVVF9N
RVRICiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRkVNZXJnZU5vZGVFbGVtZW50
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRkVNZXJnZU5v
ZGVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtMjYzOCw3ICsyNjM4LDcgQEAgT2JqZWN0SW1wICpTVkdGRU1lcmdlTm9kZUVs
ZW1lbnQ6OmJyaWRnZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVNZXJn
ZU5vZGVFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxT
VkdGRU1lcmdlTm9kZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFTWVyZ2VOb2RlRWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yNjUyLDEyICsyNjUyLDEyIEBAIGJvb2wgU1ZHRkVP
ZmZzZXRFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR0ZFT2Zmc2V0RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdGRU9mZnNldEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0ZFT2Zmc2V0RWxlbWVudD4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdGRU9mZnNldEVsZW1lbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVPZmZzZXRF
bGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNW
R0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxw
MixwMyk7CiAgICAgaWYoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OmdldChwMSxwMixwMyk7CkBAIC0yNjczLDEwICsyNjczLDEwIEBAIGJvb2wgU1ZHRkVPZmZz
ZXRFbGVtZW50OjpwdXQoUFVUX01FVEhPRF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVj
dCBTVkdGRU9mZnNldEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpTVkdGRU9mZnNldEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnJpZGdl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNjg0LDcgKzI2ODQsNyBAQCBPYmplY3RJbXAgKlNW
R0ZFT2Zmc2V0RWxlbWVudDo6YnJpZGdlKEV4CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0Jy
aWRnZTxTVkdGRU9mZnNldEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFT2Zmc2V0RWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0ZFT2Zmc2V0RWxlbWVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdGRU9mZnNldEVsZW1lbnQ6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR0ZFT2Zmc2V0RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVPZmZzZXRFbGVtZW50OjpQ
cml2YXRlICo+KGQpKTsKIH0KQEAgLTI2OTgsMTIgKzI2OTgsMTIgQEAgYm9vbCBTVkdGRVRpbGVF
bGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
U1ZHRkVUaWxlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdGRVRpbGVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGRVRpbGVFbGVtZW50PihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0ZFVGlsZUVsZW1lbnQ6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVUaWxlRWxlbWVudDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlm
KFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpnZXQocDEscDIs
cDMpOwpAQCAtMjcxOSwxMCArMjcxOSwxMCBAQCBib29sIFNWR0ZFVGlsZUVsZW1lbnQ6OnB1dChQ
VVRfTUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRkVUaWxlRWxl
bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0ZFVGls
ZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlNWR0ZFVGlsZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtMjczMCw3ICsyNzMwLDcgQEAgT2JqZWN0SW1wICpTVkdGRVRpbGVFbGVtZW50Ojpicmlk
Z2UoRXhlYwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVUaWxlRWxlbWVu
dD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVUaWxlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAK
LVZhbHVlIFNWR0ZFVGlsZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRkVUaWxlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVUaWxlRWxlbWVudD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHRkVUaWxlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yNzQ0LDEyICsy
NzQ0LDEyIEBAIGJvb2wgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6aGFzUHJvcGVydHkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFs
dWU8U1ZHRkVUdXJidWxlbmNlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAyLHAz
KTsKQEAgLTI3NjUsMTAgKzI3NjUsMTAgQEAgYm9vbCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Ojpw
dXQoUFVUX01FVAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBl
KCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4g
TlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpicmlkZ2UoRXhl
Y1N0YXRlICpwMSkgY29uc3QKQEAgLTI3NzYsNyArMjc3Niw3IEBAIE9iamVjdEltcCAqU1ZHRkVU
dXJidWxlbmNlRWxlbWVudDo6YnJpZGcKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdl
PFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNh
Y2hlRE9NT2JqZWN0PFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZF
VHVyYnVsZW5jZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjc4NSw4ICsyNzg1LDgg
QEAgYm9vbCBTVkdGaWx0ZXJFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjUwogewogICAgIGNvbnN0
IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdGaWx0ZXJFbGVtZW50OjpzX2hh
c2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0g
U1ZHRmlsdGVyRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdGaWx0ZXJF
bGVtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdMYW5nU3BhY2U6Omhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CkBAIC0yNzk1LDcgKzI3OTUsNyBAQCBib29sIFNWR0ZpbHRl
ckVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBTVkdGaWx0ZXJFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR0ZpbHRlckVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006Omxvb2t1cEdldDxTVkdGaWx0ZXJFbGVtZW50UHJvdG9GdW5jLFNWR0ZpbHRlckVs
ZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTI4MDcsMTAgKzI4MDcs
MTAgQEAgU1ZHRmlsdGVyRWxlbWVudCBTVkdGaWx0ZXJFbGVtZW50UHJvdG9GdQogICAgIHJldHVy
biBTVkdGaWx0ZXJFbGVtZW50OjpudWxsOwogfQogCi1WYWx1ZSBTVkdGaWx0ZXJFbGVtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpbHRlckVs
ZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0
IHByb3RvID0gU1ZHRmlsdGVyRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdElt
cCAqcHJvdG8gPSBTVkdGaWx0ZXJFbGVtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihT
VkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEs
cDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixw
Myk7CiAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdM
YW5nU3BhY2U6OmdldChwMSxwMixwMyk7CkBAIC0yODMyLDEwICsyODMyLDEwIEBAIGJvb2wgU1ZH
RmlsdGVyRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LU9iamVjdCBTVkdGaWx0ZXJFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K09iamVjdEltcCAqU1ZHRmlsdGVyRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdGaWx0ZXJFbGVtZW50UHJvdG86OnNlbGYocDEp
OwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRmlsdGVyRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CkBAIC0yODQzLDcgKzI4NDMsNyBAQCBPYmplY3RJbXAgKlNWR0ZpbHRlckVsZW1l
bnQ6OmJyaWRnZShFeGVjCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdGaWx0
ZXJFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50OjpQcml2YXRlICo+KGQp
KTsKIH0KIAotVmFsdWUgU1ZHRmlsdGVyRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpTVkdGaWx0ZXJFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdGaWx0ZXJFbGVtZW50Pihw
MSxzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI4
NTYsMjEgKzI4NTYsMjEgQEAgYm9vbCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZh
bHVlIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
aWYoU1ZHU3R5bGFibGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1N0eWxhYmxlOjpn
ZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+
aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpicmlkZ2UoRXhlY1N0YXRl
ICpwMSkgY29uc3QKQEAgLTI4NzgsNyArMjg3OCw3IEBAIE9iamVjdEltcCAqU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHQKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KHAxLHN0YXRpY19jYXN0PFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVl
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK1ZhbHVlSW1wICpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9N
T2JqZWN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4ocDEsc3RhdGljX2Nh
c3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpQcml2YXRlICo+KGltcGwp
KTsKIH0KQEAgLTI4OTEsMjEgKzI4OTEsMjEgQEAgYm9vbCBTVkdGaXRUb1ZpZXdCb3g6Omhhc1By
b3BlcnR5KEV4ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRml0VG9WaWV3
Qm94OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpdFRvVmlld0Jv
eDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0VmFsdWU8U1ZHRml0VG9WaWV3Qm94PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR0ZpdFRvVmlld0JveDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpTVkdGaXRUb1ZpZXdCb3g6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VE
KHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdGaXRUb1ZpZXdC
b3g6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGaXRUb1Zp
ZXdCb3g6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlNWR0ZpdFRvVmlld0JveDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC0yOTEzLDcgKzI5MTMsNyBAQCBPYmplY3RJbXAgKlNWR0ZpdFRvVmlld0JveDo6YnJpZGdlKEV4
ZWNTCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHRml0VG9WaWV3Qm94PihwMSxz
dGF0aWNfY2FzdDxTVkdGaXRUb1ZpZXdCb3g6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1
ZSBTVkdGaXRUb1ZpZXdCb3g6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHRml0VG9WaWV3Qm94OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdGaXRUb1ZpZXdCb3g+KHAxLHN0YXRpY19jYXN0PFNW
R0ZpdFRvVmlld0JveDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0yOTMxLDEyICsyOTMxLDEy
IEBAIGJvb2wgU1ZHR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0dFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR0dFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdHRWxlbWVudD4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdHRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdHRWxlbWVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC0yOTYwLDEwICsyOTYw
LDEwIEBAIGJvb2wgU1ZHR0VsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1PYmplY3QgU1ZHR0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdHRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9i
amVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHR0VsZW1lbnQ6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjk3MSw3ICsyOTcxLDcgQEAgT2JqZWN0SW1wICpTVkdH
RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlk
Z2U8U1ZHR0VsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0dFbGVtZW50OjpQcml2YXRlICo+KGQp
KTsKIH0KIAotVmFsdWUgU1ZHR0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHR0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0dFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxT
VkdHRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yOTg3LDEyICsyOTg3LDEyIEBAIGJv
b2wgU1ZHR3JhZGllbnRFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGUKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIFNWR0dyYWRpZW50RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdHcmFkaWVudEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0dyYWRpZW50RWxlbWVu
dD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdHcmFkaWVudEVs
ZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
R3JhZGllbnRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6
OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0
KHAxLHAyLHAzKTsKQEAgLTMwMTAsMTAgKzMwMTAsMTAgQEAgYm9vbCBTVkdHcmFkaWVudEVsZW1l
bnQ6OnB1dChQVVRfTUVUSE9EXwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0dy
YWRpZW50RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAg
KlNWR0dyYWRpZW50RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlw
ZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHR3JhZGllbnRFbGVtZW50OjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTMwMjEsNyArMzAyMSw3IEBAIE9iamVjdEltcCAqU1ZHR3JhZGll
bnRFbGVtZW50OjpicmlkZ2UoRXgKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNW
R0dyYWRpZW50RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHR3JhZGllbnRFbGVtZW50OjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHR3JhZGllbnRFbGVtZW50OjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0dyYWRpZW50RWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHR3Jh
ZGllbnRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdHcmFkaWVudEVsZW1lbnQ6OlByaXZhdGUg
Kj4oZCkpOwogfQpAQCAtMzA0MCwxMiArMzA0MCwxMiBAQCBib29sIFNWR0ltYWdlRWxlbWVudDo6
aGFzUHJvcGVydHkoRXhlY1N0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdJbWFn
ZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHSW1hZ2VF
bGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjps
b29rdXBHZXRWYWx1ZTxTVkdJbWFnZUVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAz
KTsKIH0KIAotVmFsdWUgU1ZHSW1hZ2VFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ltYWdlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC0zMDcwLDEwICszMDcwLDEwIEBA
IGJvb2wgU1ZHSW1hZ2VFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUkcKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLU9iamVjdCBTVkdJbWFnZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdJbWFnZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0
aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxs
KCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ltYWdlRWxlbWVudDo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zMDgxLDcgKzMwODEsNyBAQCBPYmplY3RJ
bXAgKlNWR0ltYWdlRWxlbWVudDo6YnJpZGdlKEV4ZWNTCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpE
T01SV0JyaWRnZTxTVkdJbWFnZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0ltYWdlRWxlbWVudDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdJbWFnZUVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0lt
YWdlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50OjpQcml2YXRlICo+KGQp
KTsKIH0KQEAgLTMwOTQsMTIgKzMwOTQsMTIgQEAgYm9vbCBTVkdMYW5nU3BhY2U6Omhhc1Byb3Bl
cnR5KEV4ZWNTdGF0ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHTGFuZ1NwYWNl
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0xhbmdTcGFjZTo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFs
dWU8U1ZHTGFuZ1NwYWNlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVl
IFNWR0xhbmdTcGFjZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdMYW5nU3BhY2U6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CkBAIC0zMTE2LDEwICszMTE2LDEwIEBAIGJvb2wgU1ZHTGFuZ1NwYWNl
OjpwdXRJblBhcmVudHMoUFVUX01FVEgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBT
VkdMYW5nU3BhY2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpT
VkdMYW5nU3BhY2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKlNWR0xhbmdTcGFjZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CkBAIC0zMTI3LDcgKzMxMjcsNyBAQCBPYmplY3RJbXAgKlNWR0xhbmdTcGFjZTo6YnJpZGdlKEV4
ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdMYW5nU3BhY2U+KHAx
LHN0YXRpY19jYXN0PFNWR0xhbmdTcGFjZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVl
IFNWR0xhbmdTcGFjZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdM
YW5nU3BhY2U6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
OmNhY2hlRE9NT2JqZWN0PFNWR0xhbmdTcGFjZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHTGFuZ1NwYWNl
OjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTMxMzYsMTIgKzMxMzYsMTIgQEAgYm9vbCBTVkdM
ZW5ndGg6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAq
ZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdMZW5ndGg6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBp
ZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdMZW5ndGhQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAg
ICBPYmplY3RJbXAgKnByb3RvID0gU1ZHTGVuZ3RoUHJvdG86OnNlbGYocDEpOworICAgIGlmKHBy
b3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgU1ZHTGVuZ3RoOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0xlbmd0aDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6bG9va3VwR2V0PFNWR0xlbmd0aFByb3RvRnVuYyxTVkdMZW5ndGg+KHAxLHAyLCZzX2hh
c2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTMxNTgsMTAgKzMxNTgsMTAgQEAgU1ZHTGVuZ3RoIEtT
Vkc6OnRvU1ZHTGVuZ3RoKEtKUzo6RXhlY1N0YQogICAgIHJldHVybiBTVkdMZW5ndGg6Om51bGw7
CiB9CiAKLVZhbHVlIFNWR0xlbmd0aDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdMZW5ndGg6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHTGVuZ3RoUHJvdG86OnNlbGYocDEpOwotICAg
IGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7Cisg
ICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0xlbmd0aFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihw
cm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAg
UV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAgLTMxNzcsMTAgKzMx
NzcsMTAgQEAgYm9vbCBTVkdMZW5ndGg6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EXwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0xlbmd0aDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0xlbmd0aDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdMZW5ndGhQcm90bzo6c2VsZihwMSk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpTVkdMZW5ndGg6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtMzE4OCw3ICszMTg4LDcgQEAgT2JqZWN0SW1wICpTVkdMZW5ndGg6OmJyaWRnZShFeGVjU3Rh
dGUgKgogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHTGVuZ3RoPihwMSxzdGF0
aWNfY2FzdDxTVkdMZW5ndGg6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdMZW5n
dGg6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGVuZ3RoOjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVj
dDxTVkdMZW5ndGg+KHAxLHN0YXRpY19jYXN0PFNWR0xlbmd0aDo6UHJpdmF0ZSAqPihpbXBsKSk7
CiB9CkBAIC0zMTk3LDEyICszMTk3LDEyIEBAIGJvb2wgU1ZHTGVuZ3RoTGlzdDo6aGFzUHJvcGVy
dHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRy
eSgmU1ZHTGVuZ3RoTGlzdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVl
OwotICAgIE9iamVjdCBwcm90byA9IFNWR0xlbmd0aExpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gU1ZHTGVuZ3RoTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR0xlbmd0aExpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHTGVuZ3RoTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6bG9va3VwR2V0PFNWR0xlbmd0aExpc3RQcm90b0Z1bmMsU1ZHTGVuZ3RoTGlzdD4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzIxNCwxOCArMzIxNCwxOCBAQCBTVkdM
ZW5ndGhMaXN0IFNWR0xlbmd0aExpc3RQcm90b0Z1bmM6OmNhCiAgICAgcmV0dXJuIFNWR0xlbmd0
aExpc3Q6Om51bGw7CiB9CiAKLVZhbHVlIFNWR0xlbmd0aExpc3Q6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGVuZ3RoTGlzdDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdMZW5ndGhM
aXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0xlbmd0aExp
c3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdMZW5ndGhMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHTGVuZ3RoTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdMZW5ndGhMaXN0UHJvdG86OnNl
bGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0
dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHTGVuZ3RoTGlzdDo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC0zMjMzLDcgKzMyMzMsNyBAQCBPYmplY3RJbXAgKlNWR0xlbmd0aExp
c3Q6OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHTGVu
Z3RoTGlzdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHTGVuZ3RoTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7
CiB9CiAKLVZhbHVlIFNWR0xlbmd0aExpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHTGVuZ3RoTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHTGVuZ3RoTGlzdD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHTGVuZ3RoTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0zMjUxLDEyICszMjUx
LDEyIEBAIGJvb2wgU1ZHTGluZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0xpbmVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR0xpbmVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdMaW5lRWxlbWVudD4o
cDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdMaW5lRWxlbWVudDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdMaW5lRWxl
bWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdF
bGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIs
cDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7
CkBAIC0zMjgwLDEwICszMjgwLDEwIEBAIGJvb2wgU1ZHTGluZUVsZW1lbnQ6OnB1dChQVVRfTUVU
SE9EX0FSR1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdMaW5lRWxlbWVudDo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0xpbmVFbGVtZW50
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAx
LT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9i
amVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0
SW1wICpTVkdMaW5lRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zMjkx
LDcgKzMyOTEsNyBAQCBPYmplY3RJbXAgKlNWR0xpbmVFbGVtZW50OjpicmlkZ2UoRXhlY1N0CiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdMaW5lRWxlbWVudD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHTGluZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdMaW5l
RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdMaW5lRWxl
bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2Fj
aGVET01PYmplY3Q8U1ZHTGluZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0xpbmVFbGVtZW50
OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTMzMDQsMTIgKzMzMDQsMTIgQEAgYm9vbCBTVkdMaW5l
YXJHcmFkaWVudEVsZW1lbnQ6Omhhc1Byb3BlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0xp
bmVhckdyYWRpZW50RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHR3JhZGllbnRFbGVtZW50OjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdHcmFkaWVudEVsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzMyNCwxMCArMzMyNCwxMCBAQCBib29sIFNWR0xpbmVh
ckdyYWRpZW50RWxlbWVudDo6cHV0KFBVVF9NCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmpl
Y3QgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdMaW5lYXJHcmFk
aWVudEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzMzNSw3ICszMzM1
LDcgQEAgT2JqZWN0SW1wICpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmJyaQogICAgIHJldHVy
biBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50PihwMSxzdGF0
aWNfY2FzdDxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1W
YWx1ZSBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdMaW5lYXJHcmFk
aWVudEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC0zMzQ0LDEyICszMzQ0LDEyIEBAIGJvb2wgU1ZHTG9jYXRhYmxl
OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29r
dXA6OmZpbmRFbnRyeSgmU1ZHTG9jYXRhYmxlOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkg
cmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHTG9jYXRhYmxlUHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IFNWR0xvY2F0YWJsZVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihw
cm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIFNWR0xvY2F0YWJsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdMb2NhdGFibGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdMb2NhdGFibGVQcm90b0Z1bmMsU1ZHTG9jYXRhYmxl
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zMzk1LDE4ICszMzk1LDE4IEBA
IFNWR0xvY2F0YWJsZSBTVkdMb2NhdGFibGVQcm90b0Z1bmM6OmNhc3QKICAgICByZXR1cm4gU1ZH
TG9jYXRhYmxlOjpudWxsOwogfQogCi1WYWx1ZSBTVkdMb2NhdGFibGU6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTG9jYXRhYmxlOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR0xvY2F0
YWJsZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdMb2NhdGFi
bGVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdMb2NhdGFibGU6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdMb2NhdGFibGU6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHTG9jYXRhYmxlUHJvdG86OnNlbGYo
cDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHTG9jYXRhYmxlOjpicmlkZ2UoRXhlY1N0YXRlICpw
MSkgY29uc3QKQEAgLTM0MTQsNyArMzQxNCw3IEBAIE9iamVjdEltcCAqU1ZHTG9jYXRhYmxlOjpi
cmlkZ2UoRXhlY1N0YXQKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdMb2NhdGFi
bGU+KHAxLHN0YXRpY19jYXN0PFNWR0xvY2F0YWJsZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAK
LVZhbHVlIFNWR0xvY2F0YWJsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpTVkdMb2NhdGFibGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0xvY2F0YWJsZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHTG9j
YXRhYmxlOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTM0MjMsOCArMzQyMyw4IEBAIGJvb2wg
U1ZHTWFya2VyRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1MKIHsKICAgICBjb25zdCBIYXNoRW50
cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHTWFya2VyRWxlbWVudDo6c19oYXNoVGFibGUs
cDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR01hcmtl
ckVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHTWFya2VyRWxlbWVudFBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVl
OwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRml0VG9WaWV3Qm94OjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOwpAQCAtMzQzMyw3ICszNDMzLDcgQEAgYm9vbCBTVkdNYXJrZXJFbGVt
ZW50OjpoYXNQcm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZH
TWFya2VyRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdN
YXJrZXJFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXQ8U1ZHTWFya2VyRWxlbWVudFByb3RvRnVuYyxTVkdNYXJrZXJFbGVtZW50
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zNDQ1LDEwICszNDQ1LDEwIEBA
IFNWR01hcmtlckVsZW1lbnQgU1ZHTWFya2VyRWxlbWVudFByb3RvRnUKICAgICByZXR1cm4gU1ZH
TWFya2VyRWxlbWVudDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHTWFya2VyRWxlbWVudDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdNYXJrZXJFbGVtZW50
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90
byA9IFNWR01hcmtlckVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnBy
b3RvID0gU1ZHTWFya2VyRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoU1ZHRWxl
bWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAz
KTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwog
ICAgIGlmKFNWR0ZpdFRvVmlld0JveDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRml0
VG9WaWV3Qm94OjpnZXQocDEscDIscDMpOwpAQCAtMzQ3MCwxMCArMzQ3MCwxMCBAQCBib29sIFNW
R01hcmtlckVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1PYmplY3QgU1ZHTWFya2VyRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR01hcmtlckVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHTWFya2VyRWxlbWVudFByb3RvOjpzZWxmKHAx
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKlNWR01hcmtlckVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtMzQ4MSw3ICszNDgxLDcgQEAgT2JqZWN0SW1wICpTVkdNYXJrZXJFbGVt
ZW50OjpicmlkZ2UoRXhlYwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHTWFy
a2VyRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHTWFya2VyRWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CiAKLVZhbHVlIFNWR01hcmtlckVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHTWFya2VyRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHTWFya2VyRWxlbWVudD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHTWFya2VyRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0z
NDkwLDEyICszNDkwLDEyIEBAIGJvb2wgU1ZHTWF0cml4OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUg
KnAKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHTWF0
cml4OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0
IHByb3RvID0gU1ZHTWF0cml4UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR01hdHJp
eFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR01hdHJpeDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdNYXRyaXg6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdNYXRyaXhQcm90
b0Z1bmMsU1ZHTWF0cml4PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zNTEy
LDEwICszNTEyLDEwIEBAIFNWR01hdHJpeCBLU1ZHOjp0b1NWR01hdHJpeChLSlM6OkV4ZWNTdGEK
ICAgICByZXR1cm4gU1ZHTWF0cml4OjpudWxsOwogfQogCi1WYWx1ZSBTVkdNYXRyaXg6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTWF0cml4OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNW
R01hdHJpeFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdNYXRy
aXhQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CkBAIC0zNTMxLDEwICszNTMxLDEwIEBAIGJvb2wgU1ZHTWF0cml4OjpwdXRJ
blBhcmVudHMoUFVUX01FVEhPRF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdN
YXRyaXg6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdNYXRy
aXg6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
U1ZHTWF0cml4UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHTWF0cml4Ojpi
cmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM1NDIsNyArMzU0Miw3IEBAIE9iamVjdElt
cCAqU1ZHTWF0cml4OjpicmlkZ2UoRXhlY1N0YXRlICoKICAgICByZXR1cm4gbmV3IEtET006OkRP
TVJXQnJpZGdlPFNWR01hdHJpeD4ocDEsc3RhdGljX2Nhc3Q8U1ZHTWF0cml4OjpQcml2YXRlICo+
KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHTWF0cml4OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR01hdHJpeDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHTWF0cml4PihwMSxzdGF0aWNfY2FzdDxT
VkdNYXRyaXg6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMzU1NSw3ICszNTU1LDcgQEAgYm9v
bCBTVkdOdW1iZXI6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgU1ZHTnVtYmVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR051bWJlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHTnVtYmVyPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CkBAIC0zNTY3LDcgKzM1NjcsNyBAQCBTVkdOdW1iZXIgS1NWRzo6dG9TVkdOdW1iZXIo
S0pTOjpFeGVjU3RhCiAgICAgcmV0dXJuIFNWR051bWJlcjo6bnVsbDsKIH0KIAotVmFsdWUgU1ZH
TnVtYmVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R051bWJlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VO
VVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKQEAgLTM1ODQsMTAgKzM1ODQsMTAgQEAgYm9vbCBTVkdOdW1iZXI6OnB1dEluUGFyZW50
cyhQVVRfTUVUSE9EXwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR051bWJlcjo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR051bWJlcjo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
U1ZHTnVtYmVyOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM1OTUsNyArMzU5NSw3
IEBAIE9iamVjdEltcCAqU1ZHTnVtYmVyOjpicmlkZ2UoRXhlY1N0YXRlICoKICAgICByZXR1cm4g
bmV3IEtET006OkRPTVJXQnJpZGdlPFNWR051bWJlcj4ocDEsc3RhdGljX2Nhc3Q8U1ZHTnVtYmVy
OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHTnVtYmVyOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR051bWJlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHTnVtYmVyPihwMSxz
dGF0aWNfY2FzdDxTVkdOdW1iZXI6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMzYwNCwxMiAr
MzYwNCwxMiBAQCBib29sIFNWR051bWJlckxpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiB7CiAg
ICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR051bWJlckxpc3Q6
OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJv
dG8gPSBTVkdOdW1iZXJMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR051bWJl
ckxpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdOdW1iZXJMaXN0
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR051bWJlckxpc3Q6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxT
VkdOdW1iZXJMaXN0UHJvdG9GdW5jLFNWR051bWJlckxpc3Q+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KQEAgLTM2MjEsMTggKzM2MjEsMTggQEAgU1ZHTnVtYmVyTGlzdCBTVkdOdW1i
ZXJMaXN0UHJvdG9GdW5jOjpjYQogICAgIHJldHVybiBTVkdOdW1iZXJMaXN0OjpudWxsOwogfQog
Ci1WYWx1ZSBTVkdOdW1iZXJMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR051bWJlckxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHTnVtYmVyTGlzdFByb3RvOjpzZWxmKHAx
KTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEs
cDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdOdW1iZXJMaXN0UHJvdG86OnNlbGYocDEp
OworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAx
LHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1P
YmplY3QgU1ZHTnVtYmVyTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmpl
Y3RJbXAgKlNWR051bWJlckxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIGlmKHAxKSByZXR1cm4gU1ZHTnVtYmVyTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlNWR051bWJlckxpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
MzY0MCw3ICszNjQwLDcgQEAgT2JqZWN0SW1wICpTVkdOdW1iZXJMaXN0OjpicmlkZ2UoRXhlY1N0
YQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR051bWJlckxpc3Q+KHAxLHN0YXRp
Y19jYXN0PFNWR051bWJlckxpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdO
dW1iZXJMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR051bWJl
ckxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNh
Y2hlRE9NT2JqZWN0PFNWR051bWJlckxpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR051bWJlckxpc3Q6
OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMzY0OSwxMyArMzY0OSwxMyBAQCBib29sIFNWR1Bh
aW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICpl
ID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR1BhaW50OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYo
ZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHUGFpbnRQcm90bzo6c2VsZihw
MSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBP
YmplY3RJbXAgKnByb3RvID0gU1ZHUGFpbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHQ29sb3I6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBTVkdQYWludDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYWlu
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0PFNWR1BhaW50UHJvdG9GdW5jLFNWR1BhaW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CkBAIC0zNjY3LDEwICszNjY3LDEwIEBAIFNWR1BhaW50IFNWR1BhaW50UHJvdG9GdW5j
OjpjYXN0KEtKUzo6RXgKICAgICByZXR1cm4gU1ZHUGFpbnQ6Om51bGw7CiB9CiAKLVZhbHVlIFNW
R1BhaW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R1BhaW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVj
dCBwcm90byA9IFNWR1BhaW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90
byA9IFNWR1BhaW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihTVkdDb2xvcjo6aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gU1ZHQ29sb3I6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQpAQCAtMzY4NCwxMCArMzY4NCwxMCBAQCBib29sIFNWR1BhaW50Ojpw
dXQoUFVUX01FVEhPRF9BUkdTKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1Bh
aW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGFpbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZH
UGFpbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVs
bCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYWludDo6YnJpZGdl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNjk1LDcgKzM2OTUsNyBAQCBPYmplY3RJbXAgKlNW
R1BhaW50OjpicmlkZ2UoRXhlY1N0YXRlICpwCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0Jy
aWRnZTxTVkdQYWludD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGFpbnQ6OlByaXZhdGUgKj4oZCkpOwog
fQogCi1WYWx1ZSBTVkdQYWludDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpTVkdQYWludDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHUGFpbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1BhaW50OjpQcml2
YXRlICo+KGQpKTsKIH0KQEAgLTM3MDQsOCArMzcwNCw4IEBAIGJvb2wgU1ZHUGF0aEVsZW1lbnQ6
Omhhc1Byb3BlcnR5KEV4ZWNTdGEKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6
OmZpbmRFbnRyeSgmU1ZHUGF0aEVsZW1lbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSBy
ZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdQYXRoRWxlbWVudFByb3RvOjpzZWxm
KHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAg
IE9iamVjdEltcCAqcHJvdG8gPSBTVkdQYXRoRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBp
Zihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdBbmlt
YXRlZFBhdGhEYXRhOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNW
R0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
QEAgLTM3MTYsNyArMzcxNiw3IEBAIGJvb2wgU1ZHUGF0aEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4
ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhFbGVtZW50OjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhFbGVtZW50OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHUGF0
aEVsZW1lbnRQcm90b0Z1bmMsU1ZHUGF0aEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KQEAgLTM3MjgsMTAgKzM3MjgsMTAgQEAgU1ZHUGF0aEVsZW1lbnQgU1ZHUGF0aEVs
ZW1lbnRQcm90b0Z1bmM6OgogICAgIHJldHVybiBTVkdQYXRoRWxlbWVudDo6bnVsbDsKIH0KIAot
VmFsdWUgU1ZHUGF0aEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUGF0aEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHUGF0aEVsZW1lbnRQcm90bzo6c2VsZihw
MSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAx
LHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHUGF0aEVsZW1lbnRQcm90bzo6c2VsZihw
MSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQo
cDEscDIpOwogICAgIGlmKFNWR0FuaW1hdGVkUGF0aERhdGE6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIFNWR0FuaW1hdGVkUGF0aERhdGE6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRWxl
bWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAz
KTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpA
QCAtMzc1NSwxMCArMzc1NSwxMCBAQCBib29sIFNWR1BhdGhFbGVtZW50OjpwdXQoUFVUX01FVEhP
RF9BUkdTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aEVsZW1lbnQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoRWxlbWVudDo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdQ
YXRoRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhFbGVt
ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM3NjYsNyArMzc2Niw3IEBAIE9i
amVjdEltcCAqU1ZHUGF0aEVsZW1lbnQ6OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IEtE
T006OkRPTVJXQnJpZGdlPFNWR1BhdGhFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoRWxl
bWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhFbGVtZW50OjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhFbGVtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQ
YXRoRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkp
OwogfQpAQCAtMzc3OSw3ICszNzc5LDcgQEAgYm9vbCBTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShF
eGVjU3RhdGUgKgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZzo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQ
YXRoU2VnPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zODI5LDE2ICszODI5
LDE2IEBAIFNWR1BhdGhTZWcgS1NWRzo6dG9TVkdQYXRoU2VnKEtKUzo6RXhlY1MKICAgICByZXR1
cm4gU1ZHUGF0aFNlZzo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZzo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQo
cDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3Qg
U1ZHUGF0aFNlZzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNW
R1BhdGhTZWc6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlNWR1BhdGhTZWc6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
Mzg0Niw3ICszODQ2LDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnOjpicmlkZ2UoRXhlY1N0YXRl
IAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR1BhdGhTZWc+KHAxLHN0YXRpY19j
YXN0PFNWR1BhdGhTZWc6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2Vn
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWc6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR1BhdGhTZWc+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWc6OlByaXZhdGUgKj4oaW1wbCkp
OwogfQpAQCAtMzg1OSwxMiArMzg1OSwxMiBAQCBib29sIFNWR1BhdGhTZWdBcmNBYnM6Omhhc1By
b3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQXJj
QWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdBcmNB
YnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1
cEdldFZhbHVlPFNWR1BhdGhTZWdBcmNBYnM+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0FyY0Ficzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQXJjQWJzOjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIFNWR1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwpAQCAtMzg4MSwxMCArMzg4MSwxMCBAQCBib29sIFNWR1BhdGhTZWdBcmNBYnM6OnB1dElu
UGFyZW50cyhQVVRfCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0Fy
Y0Ficzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhT
ZWdBcmNBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlNWR1BhdGhTZWdBcmNBYnM6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtMzg5Miw3ICszODkyLDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnQXJjQWJzOjpicmlk
Z2UoRXhlYwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ0FyY0Fi
cz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0FyY0Ficzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9
CiAKLVZhbHVlIFNWR1BhdGhTZWdBcmNBYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHUGF0aFNlZ0FyY0Ficzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0FyY0Ficz4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ0FyY0Ficzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0zOTA1
LDEyICszOTA1LDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0FyY1JlbDo6aGFzUHJvcGVydHkoRXhlY1MK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdBcmNSZWw6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0FyY1JlbDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
UGF0aFNlZ0FyY1JlbD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBT
VkdQYXRoU2VnQXJjUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR1BhdGhTZWdBcmNSZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZH
UGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0zOTI3
LDEwICszOTI3LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0FyY1JlbDo6cHV0SW5QYXJlbnRzKFBVVF8K
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnQXJjUmVsOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0FyY1JlbDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
U1ZHUGF0aFNlZ0FyY1JlbDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zOTM4LDcg
KzM5MzgsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdBcmNSZWw6OmJyaWRnZShFeGVjCiAgICAg
cmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnQXJjUmVsPihwMSxzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnQXJjUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZH
UGF0aFNlZ0FyY1JlbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQ
YXRoU2VnQXJjUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2VnQXJjUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnQXJjUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTM5NTEsMTIgKzM5NTEsMTIg
QEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpoYXNQcm9wZQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1
ZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7
CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2Vn
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwog
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTM5NzMsMTAgKzM5NzMsMTAgQEAgYm9vbCBTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljQWJzOjpwdXRJblBhcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
T2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRl
cigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRo
U2VnQ3VydmV0b0N1YmljQWJzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM5ODQs
NyArMzk4NCw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6YnIKICAg
ICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM+
KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OlByaXZhdGUgKj4oaW1w
bCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNBYnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMzk5NywxMiArMzk5NywxMiBA
QCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6Omhhc1Byb3BlCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVl
PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDAxOSwxMCArNDAxOSwxMCBAQCBib29sIFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OnB1dEluUGFyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1P
YmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNSZWw6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDAzMCw3
ICs0MDMwLDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpicgogICAg
IHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6UHJpdmF0ZSAqPihpbXBs
KSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1JlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00MDQzLDEyICs0MDQzLDEyIEBA
IGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6aGEKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aEFiczo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9v
a3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicz4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3Ro
QWJzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00
MDY1LDEwICs0MDY1LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6
cHUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
U21vb3RoQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aEFiczo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00MDc2LDcgKzQwNzYsNyBA
QCBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBCiAgICAgcmV0dXJuIG5l
dyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzPihwMSxz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpQcml2YXRlICo+KGlt
cGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoQWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpj
YWNoZURPTU9iamVjdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzPihwMSxzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpQcml2YXRlICo+KGltcGwpKTsK
IH0KQEAgLTQwODksMTIgKzQwODksMTIgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoUmVsOjpoYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1Ntb290aFJlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnQ3VydmV0b0N1
YmljU21vb3RoUmVsPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQxMTEsMTAgKzQxMTEsMTAgQEAgYm9vbCBTVkdQYXRo
U2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpwdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2Jq
ZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5p
bnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVj
dDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1w
ICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkg
Y29uc3QKQEAgLTQxMjIsNyArNDEyMiw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1Ntb290aFIKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGhSZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNTbW9vdGhSZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljU21vb3RoUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNTbW9vdGhSZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGhSZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDEzNSwxMiArNDEzNSwxMiBAQCBib29s
IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpoYXNQCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFs
dWU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
aWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0
KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00MTU3LDEwICs0MTU3LDEw
IEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OnB1dEkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC00MTY4LDcgKzQxNjgsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljQWJzCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxT
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNBYnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNBYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
QWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQxODEsMTIgKzQxODEsMTIgQEAgYm9vbCBT
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6aGFzUAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVl
PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlm
KFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6OmdldChw
MSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDIwMywxMCArNDIwMywxMCBA
QCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpwdXRJCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY1JlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJl
dHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAK
IE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtNDIxNCw3ICs0MjE0LDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1JlbAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Jl
bDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00MjI3LDEyICs0MjI3LDEyIEBAIGJvb2wgU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3Ro
QWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29r
dXBHZXRWYWx1ZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicz4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1Ntb290aEFiczo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKQEAgLTQyNDksMTAgKzQyNDksMTAgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY1Ntb290aEFicwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K09iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJl
dGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTQyNjAsNyArNDI2MCw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNTbW8KICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljU21vb3RoQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1Ntb290aEFiczo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDI3
MywxMiArNDI3MywxMiBAQCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVs
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1Ntb290aFJlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNTbW9vdGhSZWw+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUg
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9v
dGhSZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZH
UGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAy
LHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00Mjk1LDEwICs0Mjk1LDEwIEBAIGJv
b2wgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljU21vb3RoUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00MzA2LDcgKzQzMDYsNyBAQCBPYmplY3RJ
bXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpE
T01SV0JyaWRnZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OlByaXZhdGUgKj4oaW1w
bCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY1Ntb290aFJlbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw+
KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpQcml2
YXRlICo+KGltcGwpKTsKIH0KQEAgLTQzMTksMTIgKzQzMTksMTIgQEAgYm9vbCBTVkdQYXRoU2Vn
TGluZXRvQWJzOjpoYXNQcm9wZXJ0eShFeAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
U1ZHUGF0aFNlZ0xpbmV0b0Ficzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdQYXRoU2VnTGluZXRvQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnTGluZXRvQWJzPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9BYnM6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xp
bmV0b0Ficzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihT
VkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEs
cDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQzNDEsMTAgKzQzNDEsMTAgQEAg
Ym9vbCBTVkdQYXRoU2VnTGluZXRvQWJzOjpwdXRJblBhcmVudHMoUAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9BYnM6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvQWJzOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2Vn
TGluZXRvQWJzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQzNTIsNyArNDM1Miw3
IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6YnJpZGdlKEUKICAgICByZXR1cm4g
bmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdMaW5ldG9BYnM+KHAxLHN0YXRpY19jYXN0
PFNWR1BhdGhTZWdMaW5ldG9BYnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQ
YXRoU2VnTGluZXRvQWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNW
R1BhdGhTZWdMaW5ldG9BYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdMaW5ldG9BYnM+KHAxLHN0YXRpY19j
YXN0PFNWR1BhdGhTZWdMaW5ldG9BYnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDM2NSwx
MiArNDM2NSwxMiBAQCBib29sIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpoYXNQCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFi
czo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRv
SG9yaXpvbnRhbEFiczo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBA
IC00Mzg3LDEwICs0Mzg3LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6
OnB1dEkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnTGluZXRvSG9y
aXpvbnRhbEFiczo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNW
R1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0
UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRh
bEFiczo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00Mzk4LDcgKzQzOTgsNyBAQCBP
YmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzCiAgICAgcmV0dXJuIG5ldyBL
RE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicz4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OlByaXZhdGUgKj4oaW1wbCkpOwog
fQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmpl
Y3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQ0MTEsMTIg
KzQ0MTEsMTIgQEAgYm9vbCBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6aGFzUAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWxSZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006Omxvb2t1cEdldFZhbHVlPFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9u
dGFsUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IFNWR1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAt
NDQzMywxMCArNDQzMywxMCBAQCBib29sIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpw
dXRJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQ
YXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxS
ZWw6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDQ0NCw3ICs0NDQ0LDcgQEAgT2Jq
ZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbAogICAgIHJldHVybiBuZXcgS0RP
TTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw+KHAxLHN0YXRpY19j
YXN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0K
IAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbFJlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00NDU3LDEyICs0
NDU3LDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6aGFzUHJvcGVydHkoRXgKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9SZWw6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
UGF0aFNlZ0xpbmV0b1JlbD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1
ZSBTVkdQYXRoU2VnTGluZXRvUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9SZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CkBAIC00NDc5LDEwICs0NDc5LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6cHV0SW5Q
YXJlbnRzKFAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnTGluZXRv
UmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNl
Z0xpbmV0b1JlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CkBAIC00NDkwLDcgKzQ0OTAsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9S
ZWw6OmJyaWRnZShFCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2Vn
TGluZXRvUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvUmVsOjpQcml2YXRlICo+
KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvUmVsOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRo
U2VnTGluZXRvUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvUmVsOjpQcml2YXRl
ICo+KGltcGwpKTsKIH0KQEAgLTQ1MDMsMTIgKzQ1MDMsMTIgQEAgYm9vbCBTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWxBYnM6Omhhc1BybwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0xpbmV0
b1ZlcnRpY2FsQWJzPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNW
R1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CkBAIC00NTI1LDEwICs0NTI1LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0xpbmV0
b1ZlcnRpY2FsQWJzOjpwdXRJblAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1
aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbEFiczo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00NTM2LDcgKzQ1
MzYsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6CiAgICAgcmV0
dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM+KHAx
LHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6UHJpdmF0ZSAqPihpbXBs
KSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2Jq
ZWN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNl
Z0xpbmV0b1ZlcnRpY2FsQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQ1NDksMTIgKzQ1
NDksMTIgQEAgYm9vbCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6Omhhc1BybwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bFJlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9v
a3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsPihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWxSZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6
Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00NTcxLDEwICs0NTcx
LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpwdXRJblAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvVmVy
dGljYWxSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC00NTgyLDcgKzQ1ODIsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbFJlbDo6CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxSZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbFJlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbFJlbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJl
bD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpQcml2YXRlICo+
KGltcGwpKTsKIH0KQEAgLTQ1OTEsMTIgKzQ1OTEsMTIgQEAgYm9vbCBTVkdQYXRoU2VnTGlzdDo6
aGFzUHJvcGVydHkoRXhlY1N0YQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZTVkdQYXRoU2VnTGlzdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJl
dHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR1BhdGhTZWdMaXN0UHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAg
T2JqZWN0SW1wICpwcm90byA9IFNWR1BhdGhTZWdMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlm
KHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdQYXRoU2VnTGlzdFByb3RvRnVuYyxTVkdQ
YXRoU2VnTGlzdD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNDYwOCwxOCAr
NDYwOCwxOCBAQCBTVkdQYXRoU2VnTGlzdCBTVkdQYXRoU2VnTGlzdFByb3RvRnVuYzo6CiAgICAg
cmV0dXJuIFNWR1BhdGhTZWdMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGlzdDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2Vn
TGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3Qg
cHJvdG8gPSBTVkdQYXRoU2VnTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAq
cHJvdG8gPSBTVkdQYXRoU2VnTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQo
cDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdMaXN0
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0xp
c3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
U1ZHUGF0aFNlZ0xpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRo
U2VnTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00NjI3LDcgKzQ2MjcsNyBA
QCBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaXN0OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5l
dyBLRE9NOjpET01CcmlkZ2U8U1ZHUGF0aFNlZ0xpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpc3Q6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpc3Q6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR1BhdGhTZWdMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGlzdDo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CkBAIC00NjQwLDEyICs0NjQwLDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ01vdmV0
b0Ficzo6aGFzUHJvcGVydHkoRXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1Bh
dGhTZWdNb3ZldG9BYnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UGF0aFNlZ01vdmV0b0Ficzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ01vdmV0b0Ficz4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTW92ZXRvQWJzOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdNb3ZldG9B
YnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0
aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00NjYyLDEwICs0NjYyLDEwIEBAIGJvb2wg
U1ZHUGF0aFNlZ01vdmV0b0Ficzo6cHV0SW5QYXJlbnRzKFAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU9iamVjdCBTVkdQYXRoU2VnTW92ZXRvQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ01vdmV0b0Ficzo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVp
bHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51
bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ01vdmV0
b0Ficzo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00NjczLDcgKzQ2NzMsNyBAQCBP
YmplY3RJbXAgKlNWR1BhdGhTZWdNb3ZldG9BYnM6OmJyaWRnZShFCiAgICAgcmV0dXJuIG5ldyBL
RE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnTW92ZXRvQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnTW92ZXRvQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNl
Z01vdmV0b0Ficzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRo
U2VnTW92ZXRvQWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2VnTW92ZXRvQWJzPihwMSxzdGF0aWNfY2FzdDxT
VkdQYXRoU2VnTW92ZXRvQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQ2ODYsMTIgKzQ2
ODYsMTIgQEAgYm9vbCBTVkdQYXRoU2VnTW92ZXRvUmVsOjpoYXNQcm9wZXJ0eShFeAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ01vdmV0b1JlbDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTW92ZXRvUmVsOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQ
YXRoU2VnTW92ZXRvUmVsPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVl
IFNWR1BhdGhTZWdNb3ZldG9SZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ01vdmV0b1JlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
QEAgLTQ3MDgsMTAgKzQ3MDgsMTAgQEAgYm9vbCBTVkdQYXRoU2VnTW92ZXRvUmVsOjpwdXRJblBh
cmVudHMoUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdNb3ZldG9S
ZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2Vn
TW92ZXRvUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdQYXRoU2VnTW92ZXRvUmVsOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkg
Y29uc3QKQEAgLTQ3MTksNyArNDcxOSw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ01vdmV0b1Jl
bDo6YnJpZGdlKEUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdN
b3ZldG9SZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3ZldG9SZWw6OlByaXZhdGUgKj4o
aW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTW92ZXRvUmVsOjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdNb3ZldG9SZWw6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhT
ZWdNb3ZldG9SZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3ZldG9SZWw6OlByaXZhdGUg
Kj4oaW1wbCkpOwogfQpAQCAtNDczOCwxMiArNDczOCwxMiBAQCBib29sIFNWR1BhdHRlcm5FbGVt
ZW50OjpoYXNQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQ
YXR0ZXJuRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQ
YXR0ZXJuRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0dGVybkVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJs
ZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0dGVybkVsZW1lbnQ6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0dGVybkVsZW1lbnQ6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBp
ZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtNDc2OCwx
MCArNDc2OCwxMCBAQCBib29sIFNWR1BhdHRlcm5FbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0dGVybkVsZW1lbnQ6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXR0ZXJuRWxlbWVudDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
U1ZHUGF0dGVybkVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDc3OSw3
ICs0Nzc5LDcgQEAgT2JqZWN0SW1wICpTVkdQYXR0ZXJuRWxlbWVudDo6YnJpZGdlKEV4ZQogICAg
IHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0dGVybkVsZW1lbnQ+KHAxLHN0YXRp
Y19jYXN0PFNWR1BhdHRlcm5FbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZH
UGF0dGVybkVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UGF0dGVybkVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdHRlcm5FbGVtZW50PihwMSxzdGF0aWNfY2FzdDxT
VkdQYXR0ZXJuRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC00Nzg4LDEyICs0Nzg4LDEy
IEBAIGJvb2wgU1ZHUG9pbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEKIHsKICAgICBjb25z
dCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHUG9pbnQ6OnNfaGFzaFRhYmxl
LHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdQb2lu
dFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdQb2ludFByb3RvOjpzZWxmKHAxKTsK
KyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BvaW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BvaW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHUG9pbnRQcm90b0Z1bmMsU1ZHUG9pbnQ+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTQ4MTAsMTAgKzQ4MTAsMTAgQEAgU1ZHUG9p
bnQgS1NWRzo6dG9TVkdQb2ludChLSlM6OkV4ZWNTdGF0ZQogICAgIHJldHVybiBTVkdQb2ludDo6
bnVsbDsKIH0KIAotVmFsdWUgU1ZHUG9pbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9pbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHUG9pbnRQcm90bzo6c2VsZihwMSk7Ci0g
ICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsK
KyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHUG9pbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYo
cHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAg
IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC00ODI5LDEwICs0
ODI5LDEwIEBAIGJvb2wgU1ZHUG9pbnQ6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0EKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQb2ludDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BvaW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR1BvaW50UHJvdG86OnNlbGYocDEpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIE9iamVjdEltcCAqU1ZHUG9pbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
NDg0MCw3ICs0ODQwLDcgQEAgT2JqZWN0SW1wICpTVkdQb2ludDo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUG9pbnQ+KHAxLHN0YXRpY19j
YXN0PFNWR1BvaW50OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUG9pbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9pbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1Bv
aW50PihwMSxzdGF0aWNfY2FzdDxTVkdQb2ludDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00
ODQ5LDEyICs0ODQ5LDEyIEBAIGJvb2wgU1ZHUG9pbnRMaXN0OjpoYXNQcm9wZXJ0eShFeGVjU3Rh
dGUKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHUG9p
bnRMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2Jq
ZWN0IHByb3RvID0gU1ZHUG9pbnRMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNW
R1BvaW50TGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BvaW50
TGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQb2ludExpc3Q6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdl
dDxTVkdQb2ludExpc3RQcm90b0Z1bmMsU1ZHUG9pbnRMaXN0PihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CkBAIC00ODY2LDE4ICs0ODY2LDE4IEBAIFNWR1BvaW50TGlzdCBTVkdQb2lu
dExpc3RQcm90b0Z1bmM6OmNhc3QKICAgICByZXR1cm4gU1ZHUG9pbnRMaXN0OjpudWxsOwogfQog
Ci1WYWx1ZSBTVkdQb2ludExpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUG9pbnRMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR1BvaW50TGlzdFByb3RvOjpzZWxmKHAxKTsK
LSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIp
OworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdQb2ludExpc3RQcm90bzo6c2VsZihwMSk7Cisg
ICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIp
OwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVj
dCBTVkdQb2ludExpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpTVkdQb2ludExpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gU1ZHUG9pbnRMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqU1ZHUG9pbnRMaXN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQ4ODUsNyAr
NDg4NSw3IEBAIE9iamVjdEltcCAqU1ZHUG9pbnRMaXN0OjpicmlkZ2UoRXhlY1N0YXQKICAgICBy
ZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdQb2ludExpc3Q+KHAxLHN0YXRpY19jYXN0PFNW
R1BvaW50TGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BvaW50TGlzdDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQb2ludExpc3Q6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR1BvaW50TGlzdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUG9pbnRMaXN0OjpQcml2YXRlICo+KGlt
cGwpKTsKIH0KQEAgLTQ5MDQsMTIgKzQ5MDQsMTIgQEAgYm9vbCBTVkdQb2x5Z29uRWxlbWVudDo6
aGFzUHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUG9seWdv
bkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9seWdv
bkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
Omxvb2t1cEdldFZhbHVlPFNWR1BvbHlnb25FbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BvbHlnb25FbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BvbHlnb25FbGVtZW50OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0FuaW1hdGVkUG9pbnRzOjpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdBbmltYXRlZFBvaW50czo6Z2V0KHAxLHAyLHAz
KTsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVt
ZW50OjpnZXQocDEscDIscDMpOwpAQCAtNDkzNCwxMCArNDkzNCwxMCBAQCBib29sIFNWR1BvbHln
b25FbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmpl
Y3QgU1ZHUG9seWdvbkVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpTVkdQb2x5Z29uRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUG9seWdvbkVsZW1lbnQ6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDk0NSw3ICs0OTQ1LDcgQEAgT2JqZWN0SW1wICpTVkdQ
b2x5Z29uRWxlbWVudDo6YnJpZGdlKEV4ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlk
Z2U8U1ZHUG9seWdvbkVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1BvbHlnb25FbGVtZW50OjpQ
cml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHUG9seWdvbkVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9seWdvbkVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1Bv
bHlnb25FbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdQb2x5Z29uRWxlbWVudDo6UHJpdmF0ZSAq
PihkKSk7CiB9CkBAIC00OTY0LDEyICs0OTY0LDEyIEBAIGJvb2wgU1ZHUG9seWxpbmVFbGVtZW50
OjpoYXNQcm9wZXJ0eShFeGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BvbHls
aW5lRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQb2x5
bGluZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006Omxvb2t1cEdldFZhbHVlPFNWR1BvbHlsaW5lRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQb2x5bGluZUVsZW1lbnQ6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9seWxpbmVFbGVtZW50OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0FuaW1hdGVkUG9p
bnRzOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdBbmltYXRlZFBvaW50czo6Z2V0KHAx
LHAyLHAzKTsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBT
VkdFbGVtZW50OjpnZXQocDEscDIscDMpOwpAQCAtNDk5NCwxMCArNDk5NCwxMCBAQCBib29sIFNW
R1BvbHlsaW5lRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1PYmplY3QgU1ZHUG9seWxpbmVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqU1ZHUG9seWxpbmVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGlu
T2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQb2x5bGluZUVsZW1lbnQ6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTAwNSw3ICs1MDA1LDcgQEAgT2JqZWN0
SW1wICpTVkdQb2x5bGluZUVsZW1lbnQ6OmJyaWRnZShFeAogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NUldCcmlkZ2U8U1ZHUG9seWxpbmVFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdQb2x5bGlu
ZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdQb2x5bGluZUVsZW1lbnQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9seWxpbmVFbGVtZW50
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURP
TU9iamVjdDxTVkdQb2x5bGluZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1BvbHlsaW5lRWxl
bWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01MDE4LDEyICs1MDE4LDEyIEBAIGJvb2wgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpbzo6aGFzUHJvcGVydHkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LVZhbHVlIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpbz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC01MDQwLDEwICs1MDQwLDEwIEBAIGJvb2wg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6cHV0SW5QYXJlbnQKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU9iamVjdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbzo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01MDUxLDcgKzUw
NTEsNyBAQCBPYmplY3RJbXAgKlNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmJyaWRnCiAgICAgcmV0
dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvPihwMSxzdGF0
aWNfY2FzdDxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAot
VmFsdWUgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K1ZhbHVlSW1wICpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvPihwMSxzdGF0aWNfY2FzdDxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpQcml2YXRlICo+
KGltcGwpKTsKIH0KQEAgLTUwNjQsMTIgKzUwNjQsMTIgQEAgYm9vbCBTVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQ6Omhhc1Byb3BlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1JhZGlhbEdyYWRp
ZW50RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgaWYoU1ZHR3JhZGllbnRFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBTVkdHcmFkaWVudEVsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwpAQCAtNTA4NCwxMCArNTA4NCwxMCBAQCBib29sIFNWR1JhZGlhbEdyYWRpZW50
RWxlbWVudDo6cHV0KFBVVF9NCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVj
dEltcCAqU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTA5NSw3ICs1MDk1LDcgQEAgT2Jq
ZWN0SW1wICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJyaQogICAgIHJldHVybiBuZXcgS0RP
TTo6RE9NUldCcmlkZ2U8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQ+KHAxLHN0YXRpY19jYXN0PFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CkBAIC01MTA4LDcgKzUxMDgsNyBAQCBib29sIFNWR1JlY3Q6Omhhc1Byb3BlcnR5KEV4
ZWNTdGF0ZSAqcDEsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdSZWN0OjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1JlY3Q6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1JlY3Q+
KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTUxMjAsNyArNTEyMCw3IEBAIFNW
R1JlY3QgS1NWRzo6dG9TVkdSZWN0KEtKUzo6RXhlY1N0YXRlICoKICAgICByZXR1cm4gU1ZHUmVj
dDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHUmVjdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdSZWN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNTEzNywxMCArNTEzNywxMCBAQCBib29sIFNW
R1JlY3Q6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1PYmplY3QgU1ZHUmVjdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJ
bXAgKlNWR1JlY3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKlNWR1JlY3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
NTE0OCw3ICs1MTQ4LDcgQEAgT2JqZWN0SW1wICpTVkdSZWN0OjpicmlkZ2UoRXhlY1N0YXRlICpw
MQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUmVjdD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHUmVjdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1JlY3Q6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUmVjdDo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUmVjdD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHUmVjdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC01MTY2LDEy
ICs1MTY2LDEyIEBAIGJvb2wgU1ZHUmVjdEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1JlY3RFbGVtZW50OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1JlY3RFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdSZWN0RWxl
bWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdSZWN0RWxl
bWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdS
ZWN0RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBp
ZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQo
cDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxw
MixwMyk7CkBAIC01MTk1LDEwICs1MTk1LDEwIEBAIGJvb2wgU1ZHUmVjdEVsZW1lbnQ6OnB1dChQ
VVRfTUVUSE9EX0FSR1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdSZWN0RWxl
bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1JlY3RF
bGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpTVkdSZWN0RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC01MjA2LDcgKzUyMDYsNyBAQCBPYmplY3RJbXAgKlNWR1JlY3RFbGVtZW50OjpicmlkZ2UoRXhl
Y1N0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdSZWN0RWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHUmVjdEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBT
VkdSZWN0RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdS
ZWN0RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHUmVjdEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1JlY3RF
bGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTUyMTUsOCArNTIxNSw4IEBAIGJvb2wgU1ZH
U1ZHRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkg
KmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHU1ZHRWxlbWVudDo6c19oYXNoVGFibGUscDIpOwog
ICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR1NWR0VsZW1lbnRQ
cm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHU1ZHRWxlbWVudFByb3RvOjpzZWxmKHAx
KTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBp
ZihLRE9NOjpEb2N1bWVudEV2ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwog
ICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAg
aWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gdHJ1ZTsKQEAgLTUyMjksNyArNTIyOSw3IEBAIGJvb2wgU1ZHU1ZHRWxlbWVudDo6aGFzUHJv
cGVydHkoRXhlY1N0YXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1NWR0VsZW1l
bnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU1ZHRWxlbWVudDo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0
PFNWR1NWR0VsZW1lbnRQcm90b0Z1bmMsU1ZHU1ZHRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQpAQCAtNTI0MSwxMCArNTI0MSwxMCBAQCBTVkdTVkdFbGVtZW50IFNWR1NW
R0VsZW1lbnRQcm90b0Z1bmM6OmNhCiAgICAgcmV0dXJuIFNWR1NWR0VsZW1lbnQ6Om51bGw7CiB9
CiAKLVZhbHVlIFNWR1NWR0VsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHU1ZHRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdTVkdFbGVtZW50UHJvdG86OnNlbGYo
cDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChw
MSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1NWR0VsZW1lbnRQcm90bzo6c2VsZihw
MSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQo
cDEscDIpOwogICAgIGlmKEtET006OkRvY3VtZW50RXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIEtET006OkRvY3VtZW50RXZlbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRWxl
bWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAz
KTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpA
QCAtNTI3OSwxMCArNTI3OSwxMCBAQCBib29sIFNWR1NWR0VsZW1lbnQ6OnB1dEluUGFyZW50cyhQ
VVRfTUVUCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHU1ZHRWxlbWVudDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1NWR0VsZW1lbnQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHU1ZH
RWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1NWR0VsZW1lbnQ6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTI5MCw3ICs1MjkwLDcgQEAgT2JqZWN0
SW1wICpTVkdTVkdFbGVtZW50OjpicmlkZ2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NUldCcmlkZ2U8U1ZHU1ZHRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudDo6
UHJpdmF0ZSAqPihLRE9NOjpFdmVudFRhcmdldDo6ZCkpOwogfQogCi1WYWx1ZSBTVkdTVkdFbGVt
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1NWR0VsZW1lbnQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9N
T2JqZWN0PFNWR1NWR0VsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQ6OlByaXZh
dGUgKj4oS0RPTTo6RXZlbnRUYXJnZXQ6OmQpKTsKIH0KQEAgLTUzMDUsMTIgKzUzMDUsMTIgQEAg
Ym9vbCBTVkdTY3JpcHRFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgU1ZHU2NyaXB0RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdTY3JpcHRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdTY3JpcHRFbGVtZW50Pihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1NjcmlwdEVsZW1lbnQ6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU2NyaXB0
RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihT
VkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEs
cDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixw
Myk7CkBAIC01MzMyLDEwICs1MzMyLDEwIEBAIGJvb2wgU1ZHU2NyaXB0RWxlbWVudDo6cHV0SW5Q
YXJlbnRzKFBVVF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdTY3JpcHRFbGVt
ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHU2NyaXB0
RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJl
dHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAK
IE9iamVjdEltcCAqU1ZHU2NyaXB0RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CkBAIC01MzQzLDcgKzUzNDMsNyBAQCBPYmplY3RJbXAgKlNWR1NjcmlwdEVsZW1lbnQ6OmJyaWRn
ZShFeGVjCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdTY3JpcHRFbGVtZW50
PihwMSxzdGF0aWNfY2FzdDxTVkdTY3JpcHRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgU1ZHU2NyaXB0RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTVkdTY3JpcHRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdTY3JpcHRFbGVtZW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdTY3JpcHRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTUzNTYsMTIgKzUz
NTYsMTIgQEAgYm9vbCBTVkdTZXRFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHU2V0RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdTZXRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdTZXRFbGVtZW50Pihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1NldEVsZW1lbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU2V0RWxlbWVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdBbmlt
YXRpb25FbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdBbmltYXRpb25FbGVt
ZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTUzNzYsMTAg
KzUzNzYsMTAgQEAgYm9vbCBTVkdTZXRFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUkdTKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1NldEVsZW1lbnQ6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdTZXRFbGVtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdTZXRFbGVt
ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTUzODcsNyArNTM4Nyw3IEBAIE9i
amVjdEltcCAqU1ZHU2V0RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IEtE
T006OkRPTVJXQnJpZGdlPFNWR1NldEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1NldEVsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdTZXRFbGVtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1NldEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1NldEVs
ZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1NldEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpA
QCAtNTQwMSwxMiArNTQwMSwxMiBAQCBib29sIFNWR1N0b3BFbGVtZW50OjpoYXNQcm9wZXJ0eShF
eGVjU3RhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdTdG9wRWxlbWVudDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdTdG9wRWxlbWVudDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8
U1ZHU3RvcEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUg
U1ZHU3RvcEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHU3RvcEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxl
bWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdTdHlsYWJsZTo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHU3R5bGFibGU6OmdldChwMSxwMixwMyk7CkBAIC01NDIyLDEwICs1NDIy
LDEwIEBAIGJvb2wgU1ZHU3RvcEVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdTdG9wRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1N0b3BFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdTdG9wRWxlbWVu
dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01NDMzLDcgKzU0MzMsNyBAQCBPYmpl
Y3RJbXAgKlNWR1N0b3BFbGVtZW50OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBLRE9N
OjpET01SV0JyaWRnZTxTVkdTdG9wRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3RvcEVsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdTdG9wRWxlbWVudDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdTdG9wRWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHU3Rv
cEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1N0b3BFbGVtZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTU0NDIsMTIgKzU0NDIsMTIgQEAgYm9vbCBTVkdTdHJpbmdMaXN0OjpoYXNQcm9wZXJ0
eShFeGVjU3RhdAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5
KCZTVkdTdHJpbmdMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7
Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHU3RyaW5nTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBp
Zihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAq
cHJvdG8gPSBTVkdTdHJpbmdMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgU1ZHU3RyaW5nTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdTdHJpbmdMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpsb29rdXBHZXQ8U1ZHU3RyaW5nTGlzdFByb3RvRnVuYyxTVkdTdHJpbmdMaXN0PihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC01NDU5LDE4ICs1NDU5LDE4IEBAIFNWR1N0
cmluZ0xpc3QgU1ZHU3RyaW5nTGlzdFByb3RvRnVuYzo6Y2EKICAgICByZXR1cm4gU1ZHU3RyaW5n
TGlzdDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHU3RyaW5nTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdTdHJpbmdMaXN0OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR1N0cmluZ0xp
c3RQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHU3RyaW5nTGlz
dFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR1N0cmluZ0xpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdTdHJpbmdMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR1N0cmluZ0xpc3RQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1
cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdTdHJpbmdMaXN0OjpicmlkZ2UoRXhlY1N0YXRl
ICpwMSkgY29uc3QKQEAgLTU0NzgsNyArNTQ3OCw3IEBAIE9iamVjdEltcCAqU1ZHU3RyaW5nTGlz
dDo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdTdHJp
bmdMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdTdHJpbmdMaXN0OjpQcml2YXRlICo+KGltcGwpKTsK
IH0KIAotVmFsdWUgU1ZHU3RyaW5nTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1Zh
bHVlSW1wICpTVkdTdHJpbmdMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdTdHJpbmdMaXN0PihwMSxzdGF0aWNfY2Fz
dDxTVkdTdHJpbmdMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTU0ODcsMTIgKzU0ODcs
MTIgQEAgYm9vbCBTVkdTdHlsYWJsZTo6aGFzUHJvcGVydHkoRXhlY1N0YXRlIAogewogICAgIGNv
bnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdTdHlsYWJsZTo6c19oYXNo
VGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNW
R1N0eWxhYmxlUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1N0eWxhYmxlUHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVl
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHU3R5bGFibGU6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3R5bGFibGU6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdTdHlsYWJsZVByb3Rv
RnVuYyxTVkdTdHlsYWJsZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNTU4
NiwxOCArNTU4NiwxOCBAQCBTVkdTdHlsYWJsZSBTVkdTdHlsYWJsZVByb3RvRnVuYzo6Y2FzdChL
CiAgICAgcmV0dXJuIFNWR1N0eWxhYmxlOjpudWxsOwogfQogCi1WYWx1ZSBTVkdTdHlsYWJsZTo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdTdHlsYWJs
ZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJv
dG8gPSBTVkdTdHlsYWJsZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8g
PSBTVkdTdHlsYWJsZVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR1N0eWxhYmxlOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHU3R5bGFibGU6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHU3R5bGFibGVQcm90
bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdTdHlsYWJsZTo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC01NjA1LDcgKzU2MDUsNyBAQCBPYmplY3RJbXAgKlNWR1N0eWxh
YmxlOjpicmlkZ2UoRXhlY1N0YXRlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZH
U3R5bGFibGU+KHAxLHN0YXRpY19jYXN0PFNWR1N0eWxhYmxlOjpQcml2YXRlICo+KGltcGwpKTsK
IH0KIAotVmFsdWUgU1ZHU3R5bGFibGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHU3R5bGFibGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1N0eWxhYmxlPihwMSxzdGF0aWNfY2FzdDxTVkdT
dHlsYWJsZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC01NjE4LDEyICs1NjE4LDEyIEBAIGJv
b2wgU1ZHU3R5bGVFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIFNWR1N0eWxlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdTdHlsZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1N0eWxlRWxlbWVudD4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdTdHlsZUVsZW1lbnQ6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3R5bGVFbGVtZW50
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1l
bnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNTY0MywxMCArNTY0MywxMCBAQCBib29sIFNW
R1N0eWxlRWxlbWVudDo6cHV0SW5QYXJlbnRzKFBVVF9NCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1PYmplY3QgU1ZHU3R5bGVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K09iamVjdEltcCAqU1ZHU3R5bGVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0
UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdTdHlsZUVsZW1lbnQ6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTY1NCw3ICs1NjU0LDcgQEAgT2JqZWN0SW1wICpTVkdT
dHlsZUVsZW1lbnQ6OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlk
Z2U8U1ZHU3R5bGVFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdTdHlsZUVsZW1lbnQ6OlByaXZh
dGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdTdHlsZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3R5bGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdTdHlsZUVsZW1l
bnQ+KHAxLHN0YXRpY19jYXN0PFNWR1N0eWxlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBA
IC01NjcyLDEyICs1NjcyLDEyIEBAIGJvb2wgU1ZHU3dpdGNoRWxlbWVudDo6aGFzUHJvcGVydHko
RXhlY1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1N3aXRjaEVsZW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3dpdGNoRWxlbWVudDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFs
dWU8U1ZHU3dpdGNoRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1W
YWx1ZSBTVkdTd2l0Y2hFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1N3aXRjaEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtNTcwMSwxMCArNTcwMSwxMCBAQCBib29sIFNW
R1N3aXRjaEVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1PYmplY3QgU1ZHU3dpdGNoRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR1N3aXRjaEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmpl
Y3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1N3aXRjaEVsZW1lbnQ6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTcxMiw3ICs1NzEyLDcgQEAgT2JqZWN0SW1wICpT
VkdTd2l0Y2hFbGVtZW50OjpicmlkZ2UoRXhlYwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldC
cmlkZ2U8U1ZHU3dpdGNoRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3dpdGNoRWxlbWVudDo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1N3aXRjaEVsZW1lbnQ6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3dpdGNoRWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHU3dp
dGNoRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3dpdGNoRWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CkBAIC01NzI5LDEyICs1NzI5LDEyIEBAIGJvb2wgU1ZHU3ltYm9sRWxlbWVudDo6aGFz
UHJvcGVydHkoRXhlY1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1N5bWJvbEVs
ZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3ltYm9sRWxl
bWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9v
a3VwR2V0VmFsdWU8U1ZHU3ltYm9sRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMp
OwogfQogCi1WYWx1ZSBTVkdTeW1ib2xFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1N5bWJvbEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtNTc1NywxMCArNTc1NywxMCBA
QCBib29sIFNWR1N5bWJvbEVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1PYmplY3QgU1ZHU3ltYm9sRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1N5bWJvbEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1
aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1N5bWJvbEVsZW1l
bnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTc2OCw3ICs1NzY4LDcgQEAgT2Jq
ZWN0SW1wICpTVkdTeW1ib2xFbGVtZW50OjpicmlkZ2UoRXhlYwogICAgIHJldHVybiBuZXcgS0RP
TTo6RE9NUldCcmlkZ2U8U1ZHU3ltYm9sRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3ltYm9s
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1N5bWJvbEVsZW1lbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3ltYm9sRWxlbWVudDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmpl
Y3Q8U1ZHU3ltYm9sRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3ltYm9sRWxlbWVudDo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC01NzgxLDEyICs1NzgxLDEyIEBAIGJvb2wgU1ZHVFNwYW5FbGVt
ZW50OjpoYXNQcm9wZXJ0eShFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R1RTcGFuRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdU
U3BhbkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006Omxvb2t1cEdldFZhbHVlPFNWR1RTcGFuRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRo
aXMscDMpOwogfQogCi1WYWx1ZSBTVkdUU3BhbkVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVFNwYW5FbGVtZW50OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6
OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNTgwMSwxMCArNTgw
MSwxMCBAQCBib29sIFNWR1RTcGFuRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVJHCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHVFNwYW5FbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHVFNwYW5FbGVtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdUU3BhbkVs
ZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTgxMiw3ICs1ODEyLDcgQEAg
T2JqZWN0SW1wICpTVkdUU3BhbkVsZW1lbnQ6OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcg
S0RPTTo6RE9NUldCcmlkZ2U8U1ZHVFNwYW5FbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdUU3Bh
bkVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdUU3BhbkVsZW1lbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVFNwYW5FbGVtZW50OjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVj
dDxTVkdUU3BhbkVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1RTcGFuRWxlbWVudDo6UHJpdmF0
ZSAqPihkKSk7CiB9CkBAIC01ODIxLDEyICs1ODIxLDEyIEBAIGJvb2wgU1ZHVGVzdHM6Omhhc1By
b3BlcnR5KEV4ZWNTdGF0ZSAqcDEKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6
OmZpbmRFbnRyeSgmU1ZHVGVzdHM6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4g
dHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdUZXN0c1Byb3RvOjpzZWxmKHAxKTsKLSAgICBp
Zihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAq
cHJvdG8gPSBTVkdUZXN0c1Byb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R1Rlc3RzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1Rlc3RzOjpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8
U1ZHVGVzdHNQcm90b0Z1bmMsU1ZHVGVzdHM+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KQEAgLTU4ODgsMTggKzU4ODgsMTggQEAgU1ZHVGVzdHMgU1ZHVGVzdHNQcm90b0Z1bmM6OmNh
c3QoS0pTOjpFeAogICAgIHJldHVybiBTVkdUZXN0czo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHVGVz
dHM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGVz
dHM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gU1ZHVGVzdHNQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0g
U1ZHVGVzdHNQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdUZXN0czo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1Rlc3RzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR1Rlc3RzUHJvdG86OnNlbGYocDEpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqU1ZHVGVzdHM6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtNTkwNyw3ICs1OTA3LDcgQEAgT2JqZWN0SW1wICpTVkdUZXN0czo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR1Rlc3RzPihwMSxzdGF0aWNf
Y2FzdDxTVkdUZXN0czo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1Rlc3RzOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1Rlc3RzOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdU
ZXN0cz4ocDEsc3RhdGljX2Nhc3Q8U1ZHVGVzdHM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAt
NTkxNiw4ICs1OTE2LDggQEAgYm9vbCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6Omhhc1Byb3BlcnR5
KAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsK
LSAgICBPYmplY3QgcHJvdG8gPSBTVkdUZXh0Q29udGVudEVsZW1lbnRQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmpl
Y3RJbXAgKnByb3RvID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG86OnNlbGYocDEpOworICAg
IGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0Vs
ZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAg
ICBpZihTVkdMYW5nU3BhY2U6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CkBAIC01
OTI2LDcgKzU5MjYsNyBAQCBib29sIFNWR1RleHRDb250ZW50RWxlbWVudDo6aGFzUHJvcGVydHko
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBH
ZXQ8U1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG9GdW5jLFNWR1RleHRDb250ZW50RWxlbWVudD4o
cDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNTk0NCwxMCArNTk0NCwxMCBAQCBT
VkdUZXh0Q29udGVudEVsZW1lbnQgU1ZHVGV4dENvbnRlbnRFbGVtCiAgICAgcmV0dXJuIFNWR1Rl
eHRDb250ZW50RWxlbWVudDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1RleHRD
b250ZW50RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAg
ICBPYmplY3QgcHJvdG8gPSBTVkdUZXh0Q29udGVudEVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0g
ICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsK
KyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBT
VkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBTVkdMYW5nU3BhY2U6OmdldChwMSxwMixwMyk7CkBAIC01OTY5LDEwICs1
OTY5LDEwIEBAIGJvb2wgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwdXQoUFVUX01FVEgKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdUZXh0Q29udGVudEVsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZH
VGV4dENvbnRlbnRFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZH
VGV4dENvbnRlbnRFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTU5ODAs
NyArNTk4MCw3IEBAIE9iamVjdEltcCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpicmlkZ2UKICAg
ICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1RleHRDb250ZW50RWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlNWR1RleHRDb250ZW50RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHVGV4dENvbnRlbnRFbGVt
ZW50PihwMSxzdGF0aWNfY2FzdDxTVkdUZXh0Q29udGVudEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkp
OwogfQpAQCAtNTk5NCwxMiArNTk5NCwxMiBAQCBib29sIFNWR1RleHRFbGVtZW50OjpoYXNQcm9w
ZXJ0eShFeGVjU3RhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdUZXh0RWxlbWVu
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUZXh0RWxlbWVudDo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0
VmFsdWU8U1ZHVGV4dEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAot
VmFsdWUgU1ZHVGV4dEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHVGV4dEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgaWYoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsK
ICAgICBpZihTVkdUcmFuc2Zvcm1hYmxlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdU
cmFuc2Zvcm1hYmxlOjpnZXQocDEscDIscDMpOwpAQCAtNjAxNSwxMCArNjAxNSwxMCBAQCBib29s
IFNWR1RleHRFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUkdTCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgU1ZHVGV4dEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpTVkdUZXh0RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHVGV4dEVsZW1lbnQ6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNjAyNiw3ICs2MDI2LDcgQEAgT2JqZWN0SW1wICpTVkdU
ZXh0RWxlbWVudDo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlk
Z2U8U1ZHVGV4dEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50OjpQcml2YXRl
ICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHVGV4dEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHVGV4dEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1RleHRFbGVtZW50Pihw
MSxzdGF0aWNfY2FzdDxTVkdUZXh0RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC02MDM5
LDEyICs2MDM5LDEyIEBAIGJvb2wgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6aGFzUHJvcGUK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGV4dFBvc2l0aW9uaW5n
RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6
bG9va3VwR2V0VmFsdWU8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudD4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1RleHRQb3NpdGlv
bmluZ0VsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
aWYoU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwpAQCAtNjA1OSwxMCArNjA1OSwxMCBAQCBib29sIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6
OnB1dChQVVRfCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90
b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNjA3MCw3ICs2MDcwLDcgQEAgT2JqZWN0SW1w
ICpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpicgogICAgIHJldHVybiBuZXcgS0RPTTo6RE9N
UldCcmlkZ2U8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1RleHRQ
b3NpdGlvbmluZ0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVu
dD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CkBAIC02MDg1LDEyICs2MDg1LDEyIEBAIGJvb2wgU1ZHVGl0bGVFbGVtZW50OjpoYXNQ
cm9wZXJ0eShFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1RpdGxlRWxl
bWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUaXRsZUVsZW1l
bnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1
cEdldFZhbHVlPFNWR1RpdGxlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBTVkdUaXRsZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHVGl0bGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdMYW5nU3BhY2U6OmdldChwMSxwMixwMyk7CkBA
IC02MTExLDEwICs2MTExLDEwIEBAIGJvb2wgU1ZHVGl0bGVFbGVtZW50OjpwdXQoUFVUX01FVEhP
RF9BUkcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdUaXRsZUVsZW1lbnQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdUaXRsZUVsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEt
PmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlNWR1RpdGxlRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC02MTIy
LDcgKzYxMjIsNyBAQCBPYmplY3RJbXAgKlNWR1RpdGxlRWxlbWVudDo6YnJpZGdlKEV4ZWNTCiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdUaXRsZUVsZW1lbnQ+KHAxLHN0YXRp
Y19jYXN0PFNWR1RpdGxlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1Rp
dGxlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdUaXRs
ZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
OmNhY2hlRE9NT2JqZWN0PFNWR1RpdGxlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVGl0bGVF
bGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTYxMzEsMTIgKzYxMzEsMTIgQEAgYm9vbCBT
VkdUcmFuc2Zvcm06Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZQogewogICAgIGNvbnN0IEhhc2hFbnRy
eSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdUcmFuc2Zvcm06OnNfaGFzaFRhYmxlLHAyKTsK
ICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdUcmFuc2Zvcm1Q
cm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHVHJhbnNmb3JtUHJvdG86OnNlbGYocDEp
OworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHVHJhbnNmb3JtOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR1RyYW5zZm9ybVByb3RvRnVuYyxT
VkdUcmFuc2Zvcm0+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTYxNTMsMTgg
KzYxNTMsMTggQEAgU1ZHVHJhbnNmb3JtIEtTVkc6OnRvU1ZHVHJhbnNmb3JtKEtKUzo6RQogICAg
IHJldHVybiBTVkdUcmFuc2Zvcm06Om51bGw7CiB9CiAKLVZhbHVlIFNWR1RyYW5zZm9ybTo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm06
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3Rv
ID0gU1ZHVHJhbnNmb3JtUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9
IFNWR1RyYW5zZm9ybVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR1RyYW5zZm9ybTo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1RyYW5zZm9ybTo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdUcmFuc2Zvcm1Q
cm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdUcmFuc2Zvcm06OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNjE3Miw3ICs2MTcyLDcgQEAgT2JqZWN0SW1wICpTVkdU
cmFuc2Zvcm06OmJyaWRnZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdl
PFNWR1RyYW5zZm9ybT4ocDEsc3RhdGljX2Nhc3Q8U1ZHVHJhbnNmb3JtOjpQcml2YXRlICo+KGlt
cGwpKTsKIH0KIAotVmFsdWUgU1ZHVHJhbnNmb3JtOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHVHJhbnNmb3JtPihwMSxzdGF0aWNf
Y2FzdDxTVkdUcmFuc2Zvcm06OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNjE4MSwxMiArNjE4
MSwxMiBAQCBib29sIFNWR1RyYW5zZm9ybUxpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTCiB7CiAgICAg
Y29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR1RyYW5zZm9ybUxpc3Q6
OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJv
dG8gPSBTVkdUcmFuc2Zvcm1MaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1Ry
YW5zZm9ybUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdUcmFu
c2Zvcm1MaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1RyYW5z
Zm9ybUxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
Omxvb2t1cEdldDxTVkdUcmFuc2Zvcm1MaXN0UHJvdG9GdW5jLFNWR1RyYW5zZm9ybUxpc3Q+KHAx
LHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTYxOTgsMTggKzYxOTgsMTggQEAgU1ZH
VHJhbnNmb3JtTGlzdCBTVkdUcmFuc2Zvcm1MaXN0UHJvdG9GdQogICAgIHJldHVybiBTVkdUcmFu
c2Zvcm1MaXN0OjpudWxsOwogfQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybUxpc3Q6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0g
U1ZHVHJhbnNmb3JtTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8g
PSBTVkdUcmFuc2Zvcm1MaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHVHJhbnNmb3JtTGlzdDo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1RyYW5zZm9ybUxp
c3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
U1ZHVHJhbnNmb3JtTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1Ry
YW5zZm9ybUxpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNjIxNyw3ICs2MjE3
LDcgQEAgT2JqZWN0SW1wICpTVkdUcmFuc2Zvcm1MaXN0OjpicmlkZ2UoRXhlYwogICAgIHJldHVy
biBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR1RyYW5zZm9ybUxpc3Q+KHAxLHN0YXRpY19jYXN0PFNW
R1RyYW5zZm9ybUxpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdUcmFuc2Zv
cm1MaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1RyYW5zZm9y
bUxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNh
Y2hlRE9NT2JqZWN0PFNWR1RyYW5zZm9ybUxpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR1RyYW5zZm9y
bUxpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNjIzMCwyMSArNjIzMCwyMSBAQCBib29s
IFNWR1RyYW5zZm9ybWFibGU6Omhhc1Byb3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm1hYmxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR1RyYW5zZm9ybWFibGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1RyYW5zZm9ybWFibGU+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm1h
YmxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0xv
Y2F0YWJsZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHTG9jYXRhYmxlOjpnZXQocDEs
cDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR1RyYW5zZm9y
bWFibGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdUcmFu
c2Zvcm1hYmxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdUcmFuc2Zvcm1hYmxlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTYyNTIsNyArNjI1Miw3IEBAIE9iamVjdEltcCAqU1ZHVHJhbnNmb3JtYWJsZTo6YnJp
ZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdUcmFuc2Zvcm1hYmxl
PihwMSxzdGF0aWNfY2FzdDxTVkdUcmFuc2Zvcm1hYmxlOjpQcml2YXRlICo+KGltcGwpKTsKIH0K
IAotVmFsdWUgU1ZHVHJhbnNmb3JtYWJsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1Zh
bHVlSW1wICpTVkdUcmFuc2Zvcm1hYmxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdUcmFuc2Zvcm1hYmxlPihwMSxzdGF0
aWNfY2FzdDxTVkdUcmFuc2Zvcm1hYmxlOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTYyNjUs
MjEgKzYyNjUsMjEgQEAgYm9vbCBTVkdVUklSZWZlcmVuY2U6Omhhc1Byb3BlcnR5KEV4ZWNTdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHVVJJUmVmZXJlbmNlOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1VSSVJlZmVyZW5jZTo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHVVJJ
UmVmZXJlbmNlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1VS
SVJlZmVyZW5jZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdVUklSZWZlcmVuY2U6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdVUklSZWZlcmVuY2U6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdVUklSZWZlcmVuY2U6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJl
dGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1VS
SVJlZmVyZW5jZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC02Mjg3LDcgKzYyODcs
NyBAQCBPYmplY3RJbXAgKlNWR1VSSVJlZmVyZW5jZTo6YnJpZGdlKEV4ZWNTCiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHVVJJUmVmZXJlbmNlPihwMSxzdGF0aWNfY2FzdDxTVkdV
UklSZWZlcmVuY2U6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdVUklSZWZlcmVu
Y2U6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVVJJUmVmZXJlbmNl
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURP
TU9iamVjdDxTVkdVUklSZWZlcmVuY2U+KHAxLHN0YXRpY19jYXN0PFNWR1VSSVJlZmVyZW5jZTo6
UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC02MzA2LDEyICs2MzA2LDEyIEBAIGJvb2wgU1ZHVXNl
RWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR1VzZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHVXNlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4g
S0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHVXNlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRo
aXMscDMpOwogfQogCi1WYWx1ZSBTVkdVc2VFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1VzZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtNjMzNiwxMCArNjMzNiwxMCBA
QCBib29sIFNWR1VzZUVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1PYmplY3QgU1ZHVXNlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR1VzZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5P
YmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkp
OworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1VzZUVsZW1lbnQ6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNjM0Nyw3ICs2MzQ3LDcgQEAgT2JqZWN0SW1wICpT
VkdVc2VFbGVtZW50OjpicmlkZ2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldC
cmlkZ2U8U1ZHVXNlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVXNlRWxlbWVudDo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1VzZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHVXNlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHVXNlRWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHVXNlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC02MzYzLDEy
ICs2MzYzLDEyIEBAIGJvb2wgU1ZHVmlld0VsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1ZpZXdFbGVtZW50OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1ZpZXdFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdWaWV3RWxl
bWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdWaWV3RWxl
bWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdW
aWV3RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBp
ZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQo
cDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxw
MixwMyk7CkBAIC02MzkwLDEwICs2MzkwLDEwIEBAIGJvb2wgU1ZHVmlld0VsZW1lbnQ6OnB1dChQ
VVRfTUVUSE9EX0FSR1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdWaWV3RWxl
bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1ZpZXdF
bGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpTVkdWaWV3RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC02NDAxLDcgKzY0MDEsNyBAQCBPYmplY3RJbXAgKlNWR1ZpZXdFbGVtZW50OjpicmlkZ2UoRXhl
Y1N0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdWaWV3RWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHVmlld0VsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBT
VkdWaWV3RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdW
aWV3RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHVmlld0VsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1ZpZXdF
bGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTY0MTQsMTIgKzY0MTQsMTIgQEAgYm9vbCBT
Vkdab29tQW5kUGFuOjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHWm9vbUFuZFBhbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdab29tQW5kUGFuOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJl
dHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdab29tQW5kUGFuPihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1pvb21BbmRQYW46OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHWm9vbUFuZFBhbjo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAy
KTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTY0MzYsMTAgKzY0
MzYsMTAgQEAgYm9vbCBTVkdab29tQW5kUGFuOjpwdXRJblBhcmVudHMoUFVUX01FVAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1pvb21BbmRQYW46OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdab29tQW5kUGFuOjpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdab29tQW5kUGFu
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTY0NDcsNyArNjQ0Nyw3IEBAIE9iamVj
dEltcCAqU1ZHWm9vbUFuZFBhbjo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IEtET006
OkRPTVJXQnJpZGdlPFNWR1pvb21BbmRQYW4+KHAxLHN0YXRpY19jYXN0PFNWR1pvb21BbmRQYW46
OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdab29tQW5kUGFuOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1pvb21BbmRQYW46OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1pvb21B
bmRQYW4+KHAxLHN0YXRpY19jYXN0PFNWR1pvb21BbmRQYW46OlByaXZhdGUgKj4oaW1wbCkpOwog
fQpAQCAtNjQ2MCwxMiArNjQ2MCwxMiBAQCBib29sIFNWR1pvb21FdmVudDo6aGFzUHJvcGVydHko
RXhlY1N0YXRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdab29tRXZlbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHWm9vbUV2ZW50OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxT
Vkdab29tRXZlbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZH
Wm9vbUV2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR1pvb21FdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICBpZihLRE9NOjpVSUV2ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBLRE9NOjpVSUV2
ZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTY0NzcsMTAg
KzY0NzcsMTAgQEAgYm9vbCBTVkdab29tRXZlbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHWm9vbUV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHWm9vbUV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogS0RPTTo6VUlFdmVudCBLU1ZHOjpFY21h
SW50ZXJmYWNlOjppbmhlcml0ZWRVSUV2ZW50Q2FzdChjb25zdCBPYmplY3RJbXAgKnAxKQpAQCAt
NjQ5Nyw3ICs2NDk3LDcgQEAgT2JqZWN0SW1wICpTVkdab29tRXZlbnQ6OmJyaWRnZShFeGVjU3Rh
dAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHWm9vbUV2ZW50PihwMSxzdGF0
aWNfY2FzdDxTVkdab29tRXZlbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdab29t
RXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHWm9vbUV2ZW50
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURP
TU9iamVjdDxTVkdab29tRXZlbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1pvb21FdmVudDo6UHJpdmF0
ZSAqPihkKSk7CiB9CkluZGV4OiBrc3ZnMi9kb20vU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBRWxlbWVudC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdB
RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1
NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAx
ODowMjo0NCAtMDAwMApAQCAtNDMsNyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBl
bmQKICovCiAKLVZhbHVlIFNWR0FFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQUVsZW1lbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FFbGVtZW50LmgK
LS0tIGtzdmcyL2RvbS9TVkdBRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHQUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE4OjAyOjQ0IC0wMDAwCkBA
IC02NSw3ICs2NSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FS
RFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a3N2ZzIvZG9tL1NWR0FuZ2xlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5nbGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5nbGUuY3BwCi0tLSBrc3ZnMi9kb20vU1ZH
QW5nbGUuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
QW5nbGUuY3BwCTggQXVnIDIwMDUgMTg6MDI6NDQgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHQW5nbGUi
LCBTVkdBbmdsZVByb3RvLCBTVkdBbmdsZVByb3RvRnVuYykKIAotVmFsdWUgU1ZHQW5nbGU6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHQW5nbGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcxLDcgKzcxLDcgQEAgVmFsdWUgU1ZH
QW5nbGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotdm9pZCBTVkdBbmdsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR0FuZ2xlOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzksMTIgKzc5LDEyIEBAIHZvaWQgU1ZHQW5nbGU6
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXQKIAl7CiAJCWNhc2UgU1ZHQW5nbGVDb25zdGFudHM6
OlZhbHVlOgogCQl7Ci0JCQlzZXRWYWx1ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRW
YWx1ZSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdB
bmdsZUNvbnN0YW50czo6VmFsdWVJblNwZWNpZmllZFVuaXRzOgogCQl7Ci0JCQlzZXRWYWx1ZUlu
U3BlY2lmaWVkVW5pdHModmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0VmFsdWVJblNwZWNp
ZmllZFVuaXRzKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlicmVhazsKIAkJfQogCQljYXNl
IFNWR0FuZ2xlQ29uc3RhbnRzOjpWYWx1ZUFzU3RyaW5nOgpAQCAtOTksNyArOTksNyBAQCB2b2lk
IFNWR0FuZ2xlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0CiAJS0RPTV9MRUFWRV9TQUZFKEtE
T006OkRPTUV4Y2VwdGlvbikKIH0KIAotVmFsdWUgU1ZHQW5nbGVQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUlt
cCAqU1ZHQW5nbGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR0FuZ2xlKQog
CUtET01fRU5URVJfU0FGRQpAQCAtMTA4LDEzICsxMDgsMTMgQEAgVmFsdWUgU1ZHQW5nbGVQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlIAogCXsKIAkJY2FzZSBTVkdBbmdsZUNvbnN0YW50czo6Q29u
dmVydFRvU3BlY2lmaWVkVW5pdHM6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0g
YXJnc1swXS50b1VJbnQxNihleGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0gYXJn
c1swXS0+dG9VSW50MTYoZXhlYyk7CiAJCQlvYmouY29udmVydFRvU3BlY2lmaWVkVW5pdHModW5p
dFR5cGUpOwogCQl9CiAJCWNhc2UgU1ZHQW5nbGVDb25zdGFudHM6Ok5ld1ZhbHVlU3BlY2lmaWVk
VW5pdHM6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0gYXJnc1swXS50b1VJbnQx
NihleGVjKTsKLQkJCWZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IGFyZ3NbMV0udG9OdW1i
ZXIoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFyZ3NbMF0tPnRvVUludDE2
KGV4ZWMpOworCQkJZmxvYXQgdmFsdWVJblNwZWNpZmllZFVuaXRzID0gYXJnc1sxXS0+dG9OdW1i
ZXIoZXhlYyk7CiAJCQlvYmoubmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bml0VHlwZSwgdmFsdWVJ
blNwZWNpZmllZFVuaXRzKTsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga3N2ZzIvZG9tL1NWR0Fu
Z2xlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR0FuZ2xlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdBbmdsZS5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5nbGUuaAk5IEp1bCAyMDA1IDA2
OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuZ2xlLmgJOCBBdWcgMjAwNSAxODow
Mjo0NCAtMDAwMApAQCAtNzIsOCArNzIsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX1BVVAog
CQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50
IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRy
KTsKIAl9OwogCiB9OwpJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdB
bmltYXRlQ29sb3JFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkx
LjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4
OjAyOjQ0IC0wMDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlQ29s
b3JFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUNv
bG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgKLS0t
IGtzdmcyL2RvbS9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgJOCBBdWcgMjAw
NSAxODowMjo0NCAtMDAwMApAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9N
X0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVF
bGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR0FuaW1hdGVFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVFbGVt
ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0Fu
aW1hdGVFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjQ0IC0wMDAwCkBAIC0zNyw3ICszNyw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZUVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtz
dmcyL2RvbS9TVkdBbmltYXRlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlRWxlbWVudC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQu
aAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlRWxlbWVudC5oCTggQXVnIDIwMDUgMTg6
MDI6NDQgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQK
IAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07
CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKLS0tIGtz
dmcyL2RvbS9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1
MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJ
OCBBdWcgMjAwNSAxODowMjo0NCAtMDAwMApAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBr
c3ZnMi9kb20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE4OjAyOjQ0IC0wMDAw
CkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9S
V0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRl
eDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQW5nbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZEFuZ2xlLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVk
QW5nbGUuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRBbmdsZS5jcHAJOSBKdWwgMjAwNSAw
Njo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZEFuZ2xlLmNwcAk4IEF1
ZyAyMDA1IDE4OjAyOjQ0IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBL
U1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZWRBbmdsZTo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRl
ZEFuZ2xlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRBbmds
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9T
VkdBbmltYXRlZEFuZ2xlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZEFuZ2xlLmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRl
ZEFuZ2xlLmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdB
bmltYXRlZEFuZ2xlLmgJOCBBdWcgMjAwNSAxODowMjo0NCAtMDAwMApAQCAtNTQsNyArNTQsNyBA
QCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01f
QkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQm9vbGVhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkQm9vbGVhbi5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdBbmltYXRlZEJvb2xlYW4uY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRCb29sZWFuLmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVk
Qm9vbGVhbi5jcHAJOCBBdWcgMjAwNSAxODowMjo0NCAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1
c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVkQm9vbGVh
bjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpTVkdBbmltYXRlZEJvb2xlYW46OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYwLDcgKzYw
LDcgQEAgVmFsdWUgU1ZHQW5pbWF0ZWRCb29sZWFuOjpnZXRWYWx1ZVByb3BlcgogCXJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdBbmltYXRlZEJvb2xlYW46OnB1dFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQor
dm9pZCBTVkdBbmltYXRlZEJvb2xlYW46OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQog
CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZWRCb29sZWFuOjpwdXRWYWx1ZVByb3Bl
cnQKIAkJY2FzZSBTVkdBbmltYXRlZEJvb2xlYW5Db25zdGFudHM6OkJhc2VWYWw6CiAJCXsKIAkJ
CWlmKGltcGwpCi0JCQkJaW1wbC0+c2V0QmFzZVZhbCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwor
CQkJCWltcGwtPnNldEJhc2VWYWwodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7CiAKIAkJCWJyZWFr
OwogCQl9CkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRCb29sZWFuLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkQm9vbGVh
bi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRCb29sZWFuLmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZEJvb2xlYW4uaAk5
IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQm9v
bGVhbi5oCTggQXVnIDIwMDUgMTg6MDI6NDQgLTAwMDAKQEAgLTU1LDggKzU1LDggQEAgbmFtZXNw
YWNlIEtTVkcKIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAq
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcy
L2RvbS9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmlt
YXRlZEVudW1lcmF0aW9uLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24u
Y3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbi5jcHAJOCBBdWcgMjAwNSAxODowMjo0NCAtMDAwMApAQCAtNDIsNyArNDIs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVk
RW51bWVyYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IApAQCAtNjAsNyArNjAsNyBAQCBWYWx1ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpnZXRWYWx1
ZVByCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR0FuaW1hdGVkRW51bWVyYXRp
b246OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjksNyArNjksNyBAQCB2b2lkIFNWR0FuaW1hdGVk
RW51bWVyYXRpb246OnB1dFZhbHVlUHJvCiAJCWNhc2UgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbkNv
bnN0YW50czo6QmFzZVZhbDoKIAkJewogCQkJaWYoaW1wbCkKLQkJCQlpbXBsLT5zZXRCYXNlVmFs
KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih2YWx1ZS50b051bWJlcihleGVjKSkpOworCQkJ
CWltcGwtPnNldEJhc2VWYWwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KHZhbHVlLT50b051
bWJlcihleGVjKSkpOwogCiAJCQlicmVhazsKIAkJfQpJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1h
dGVkRW51bWVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5o
Ci0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oCTkgSnVsIDIwMDUgMDY6NTQ6
NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oCTggQXVn
IDIwMDUgMTg6MDI6NDQgLTAwMDAKQEAgLTU1LDggKzU1LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJ
S0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pT
OjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJ
bXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmlt
YXRlZEludGVnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdBbmltYXRlZEludGVnZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcAotLS0g
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZEludGVnZXIuY3BwCTggQXVnIDIwMDUgMTg6
MDI6NDUgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5k
CiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZEludGVnZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRJbnRlZ2Vy
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewog
CUtET01fRU5URVJfU0FGRQogCkBAIC01OSw3ICs1OSw3IEBAIFZhbHVlIFNWR0FuaW1hdGVkSW50
ZWdlcjo6Z2V0VmFsdWVQcm9wZXIKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZH
QW5pbWF0ZWRJbnRlZ2VyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFs
dWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFNW
R0FuaW1hdGVkSW50ZWdlcjo6cHV0VmFsdWVQcm9wZXJ0CiAJCWNhc2UgU1ZHQW5pbWF0ZWRJbnRl
Z2VyQ29uc3RhbnRzOjpCYXNlVmFsOgogCQl7CiAJCQlpZihpbXBsKQotCQkJCWltcGwtPnNldEJh
c2VWYWwoc3RhdGljX2Nhc3Q8bG9uZz4odmFsdWUudG9OdW1iZXIoZXhlYykpKTsKKwkJCQlpbXBs
LT5zZXRCYXNlVmFsKHN0YXRpY19jYXN0PGxvbmc+KHZhbHVlLT50b051bWJlcihleGVjKSkpOwog
CiAJCQlicmVhazsKIAkJfQpJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkSW50ZWdlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmlt
YXRlZEludGVnZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkSW50ZWdlci5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRJ
bnRlZ2VyLmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdB
bmltYXRlZEludGVnZXIuaAk4IEF1ZyAyMDA1IDE4OjAyOjQ1IC0wMDAwCkBAIC01Myw4ICs1Myw4
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmlt
YXRlZExlbmd0aC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aC5jcHAJOSBKdWwg
MjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aC5j
cHAJOCBBdWcgMjAwNSAxODowMjo0NSAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1l
c3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVkTGVuZ3RoOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNW
R0FuaW1hdGVkTGVuZ3RoOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZWRMZW5ndGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGguaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoLmgKLS0tIGtzdmcyL2Rv
bS9TVkdBbmltYXRlZExlbmd0aC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGguaAk4IEF1ZyAyMDA1IDE4OjAyOjQ1IC0wMDAwCkBA
IC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNl
Y3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRMZW5ndGhMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdBbmltYXRlZExlbmd0aExpc3QuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmNwcAk4IEF1ZyAyMDA1IDE4OjAy
OjQ1IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAog
Ki8KIAotVmFsdWUgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkTGVuZ3Ro
TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3Ro
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdBbmltYXRlZExlbmd0aExpc3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5oCi0tLSBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aExpc3QuaAk4IEF1ZyAyMDA1IDE4OjAyOjQ1
IC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21h
U2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlL
SlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1i
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdBbmltYXRlZE51bWJlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlci5jcHAKLS0tIGtzdmcyL2RvbS9T
VkdBbmltYXRlZE51bWJlci5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdBbmltYXRlZE51bWJlci5jcHAJOCBBdWcgMjAwNSAxODowMjo0NSAtMDAwMApA
QCAtNDMsNyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVl
IFNWR0FuaW1hdGVkTnVtYmVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkTnVtYmVyOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FG
RQogCkBAIC02MSw3ICs2MSw3IEBAIFZhbHVlIFNWR0FuaW1hdGVkTnVtYmVyOjpnZXRWYWx1ZVBy
b3BlcnQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHQW5pbWF0ZWROdW1iZXI6
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
ICZ2YWx1ZSwgaW50KQordm9pZCBTVkdBbmltYXRlZE51bWJlcjo6cHV0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RP
TV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRl
ZE51bWJlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHQW5pbWF0ZWROdW1iZXIuaAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVy
LmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRl
ZE51bWJlci5oCTggQXVnIDIwMDUgMTg6MDI6NDUgLTAwMDAKQEAgLTU1LDggKzU1LDggQEAgbmFt
ZXNwYWNlIEtTVkcKIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtz
dmcyL2RvbS9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZWROdW1iZXJMaXN0LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyTGlzdC5j
cHAJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRl
ZE51bWJlckxpc3QuY3BwCTggQXVnIDIwMDUgMTg6MDI6NDUgLTAwMDAKQEAgLTQxLDcgKzQxLDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZE51
bWJlckxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWROdW1iZXJMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyTGlzdC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
QW5pbWF0ZWROdW1iZXJMaXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlckxpc3Qu
aAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVk
TnVtYmVyTGlzdC5oCTggQXVnIDIwMDUgMTg6MDI6NDUgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAg
bmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JB
U0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZFBhdGhEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQYXRoRGF0YS5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdBbmltYXRlZFBhdGhEYXRhLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEu
Y3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0
ZWRQYXRoRGF0YS5jcHAJOCBBdWcgMjAwNSAxODowMjo0NSAtMDAwMApAQCAtNDMsNyArNDMsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVkUGF0
aERhdGE6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDog
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQYXRoRGF0YS5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQ
YXRoRGF0YS5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQYXRoRGF0YS5oCTkgSnVsIDIwMDUg
MDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQYXRoRGF0YS5oCTgg
QXVnIDIwMDUgMTg6MDI6NDUgLTAwMDAKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIEtTVkcK
IAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdBbmltYXRlZFBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkUG9pbnRzLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUG9pbnRzLmNw
cAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUG9pbnRzLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUx
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUG9pbnRzLmNwcAk4IEF1ZyAyMDA1
IDE4OjAyOjQ1IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwog
QGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZWRQb2ludHM6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQb2lu
dHM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZFBvaW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdB
bmltYXRlZFBvaW50cy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQb2ludHMuaAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVk
UG9pbnRzLmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdB
bmltYXRlZFBvaW50cy5oCTggQXVnIDIwMDUgMTg6MDI6NDUgLTAwMDAKQEAgLTU0LDcgKzU0LDcg
QEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9N
X0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07
CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNw
cAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJOSBKdWwg
MjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFByZXNlcnZl
QXNwZWN0UmF0aW8uY3BwCTggQXVnIDIwMDUgMTg6MDI6NDUgLTAwMDAKQEAgLTM5LDcgKzM5LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZFBy
ZXNlcnZlQXNwZWN0UmF0aW86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtE
T01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIv
ZG9tL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaAk5
IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUHJl
c2VydmVBc3BlY3RSYXRpby5oCTggQXVnIDIwMDUgMTg6MDI6NDUgLTAwMDAKQEAgLTU0LDcgKzU0
LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlL
RE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZFJlY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZFJlY3QuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRSZWN0LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUmVjdC5jcHAJOSBKdWwg
MjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFJlY3QuY3Bw
CTggQXVnIDIwMDUgMTg6MDI6NDUgLTAwMDAKQEAgLTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZFJlY3Q6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5p
bWF0ZWRSZWN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRS
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR0FuaW1hdGVkUmVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRSZWN0LmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRl
ZFJlY3QuaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0Fu
aW1hdGVkUmVjdC5oCTggQXVnIDIwMDUgMTg6MDI6NDYgLTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAg
bmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JB
U0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkU3RyaW5nLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0Fu
aW1hdGVkU3RyaW5nLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkU3RyaW5nLmNwcAk5IEp1
bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkU3RyaW5n
LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjQ2IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZWRTdHJpbmc6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
U1ZHQW5pbWF0ZWRTdHJpbmc6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYwLDcgKzYwLDcgQEAgVmFs
dWUgU1ZHQW5pbWF0ZWRTdHJpbmc6OmdldFZhbHVlUHJvcGVydAogCXJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotdm9pZCBTVkdBbmltYXRlZFN0cmluZzo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR0Fu
aW1hdGVkU3RyaW5nOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2
ZzIvZG9tL1NWR0FuaW1hdGVkU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkU3RyaW5nLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5o
Ci0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRTdHJpbmcuaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkU3RyaW5nLmgJOCBBdWcgMjAwNSAxODow
Mjo0NiAtMDAwMApAQCAtNTYsOCArNTYsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0JBU0VD
TEFTU19HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2
YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkVHJhbnNm
b3JtTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Qu
Y3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlz
dC5jcHAJOCBBdWcgMjAwNSAxODowMjo0NiAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBu
YW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlz
dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6
IGtzdmcyL2RvbS9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkVHJhbnNm
b3JtTGlzdC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgJOCBBdWcgMjAwNSAxODowMjo0NiAtMDAwMApAQCAtNTUs
NyArNTUsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9u
CiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAq
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
IAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRp
b25FbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdBbmltYXRpb25FbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjQ2IC0wMDAwCkBAIC00
NCw3ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9U
T1RZUEUoIlNWR0FuaW1hdGlvbkVsZW1lbnQiLCBTVkdBbmltYXRpb25FbGVtZW50UHJvdG8sIFNW
R0FuaW1hdGlvbkVsZW1lbnRQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjEsOSArNjEs
OSBAQCBWYWx1ZSBTVkdBbmltYXRpb25FbGVtZW50OjpnZXRWYWx1ZVByb3BlCiB9CiAKIAotVmFs
dWUgU1ZHQW5pbWF0aW9uRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmKQorVmFsdWVJbXAgKlNWR0FuaW1hdGlvbkVsZW1l
bnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJikKIHsKLQlTVkdBbmltYXRpb25FbGVtZW50IG9iaihjYXN0KGV4ZWMsIHN0YXRp
Y19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7CisJU1ZHQW5pbWF0aW9u
RWxlbWVudCBvYmooY2FzdChleGVjLCB0aGlzT2JqKSk7CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlz
d2l0Y2goaWQpCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0aW9uRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRpb25F
bGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdBbmltYXRpb25FbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRpb25FbGVt
ZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmlt
YXRpb25FbGVtZW50LmgJOCBBdWcgMjAwNSAxODowMjo0NiAtMDAwMApAQCAtNjAsNyArNjAsNyBA
QCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdD
aXJjbGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHQ2lyY2xlRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdDaXJjbGVFbGVtZW50LmNwcAotLS0ga3N2
ZzIvZG9tL1NWR0NpcmNsZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHQ2lyY2xlRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxODowMjo0NiAt
MDAwMApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAK
LVZhbHVlIFNWR0NpcmNsZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ2lyY2xlRWxlbWVudDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0NpcmNsZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQ2lyY2xlRWxlbWVudC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
Q2lyY2xlRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHQ2lyY2xlRWxlbWVudC5oCTkgSnVsIDIw
MDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQ2lyY2xlRWxlbWVudC5oCTgg
QXVnIDIwMDUgMTg6MDI6NDYgLTAwMDAKQEAgLTY1LDcgKzY1LDcgQEAgbmFtZXNwYWNlIEtTVkcK
IAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZh
bHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQ2xpcFBhdGhFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
Q2xpcFBhdGhFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdD
bGlwUGF0aEVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjQ2IC0wMDAwCkBA
IC00NCw3ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUg
U1ZHQ2xpcFBhdGhFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0NsaXBQYXRoRWxlbWVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NB
RkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0NsaXBQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdDbGlwUGF0aEVsZW1lbnQu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0NsaXBQYXRoRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHQ2xpcFBhdGhFbGVtZW50LmgJOSBK
dWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdDbGlwUGF0aEVsZW1l
bnQuaAk4IEF1ZyAyMDA1IDE4OjAyOjQ2IC0wMDAwCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFj
ZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0NvbG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQ29s
b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHQ29sb3IuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQ29sb3IuY3BwCTkgSnVsIDIwMDUgMDY6
NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQ29sb3IuY3BwCTggQXVnIDIwMDUgMTg6
MDI6NDYgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtT
VkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHQ29sb3IiLCBTVkdDb2xvclByb3RvLCBTVkdDb2xv
clByb3RvRnVuYykKIAotVmFsdWUgU1ZHQ29sb3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ29sb3I6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9T
QUZFCiAKQEAgLTY4LDcgKzY4LDcgQEAgVmFsdWUgU1ZHQ29sb3I6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHQ29sb3JQcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpCitWYWx1ZUltcCAqU1ZHQ29sb3JQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElT
KFNWR0NvbG9yKQogCUtET01fRU5URVJfU0FGRQpAQCAtOTAsNyArOTAsNyBAQCBWYWx1ZSBTVkdD
b2xvclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgCiAJCX0KIAkJY2FzZSBTVkdDb2xvckNvbnN0
YW50czo6U2V0Q29sb3I6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IGNvbG9yVHlwZSA9IGFyZ3Nb
MF0udG9VSW50MTYoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCBjb2xvclR5cGUgPSBhcmdzWzBd
LT50b1VJbnQxNihleGVjKTsKIAkJCUtET006OkRPTVN0cmluZyByZ2JDb2xvciA9IEtET006OnRv
RE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMV0pOwogCQkJS0RPTTo6RE9NU3RyaW5nIGljY0NvbG9yID0g
S0RPTTo6dG9ET01TdHJpbmcoZXhlYywgYXJnc1syXSk7CiAJCQlvYmouc2V0Q29sb3IoY29sb3JU
eXBlLCByZ2JDb2xvciwgaWNjQ29sb3IpOwpJbmRleDoga3N2ZzIvZG9tL1NWR0NvbG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0NvbG9y
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdDb2xvci5oCi0tLSBrc3ZnMi9kb20vU1ZHQ29sb3IuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0NvbG9yLmgJOCBBdWcgMjAwNSAxODowMjo0NiAtMDAw
MApAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZP
UldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0NvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVt
ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0Nv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjQ3IC0w
MDAwCkBAIC01Miw3ICs1Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAot
VmFsdWUgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcy
L2RvbS9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAotLS0g
a3N2ZzIvZG9tL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgJOSBKdWwgMjAw
NSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uRWxlbWVudC5oCTggQXVnIDIwMDUgMTg6MDI6NDcgLTAwMDAKQEAgLTYxLDcgKzYxLDcg
QEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pT
OjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZH
RGVmc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdEZWZzRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdEZWZzRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxODowMjo0NyAtMDAwMApAQCAt
MzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNW
R0RlZnNFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAorVmFsdWVJbXAgKlNWR0RlZnNFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4
OiBrc3ZnMi9kb20vU1ZHRGVmc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRGVmc0VsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0RlZnNFbGVtZW50LmgKLS0t
IGtzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHRGVmc0VsZW1lbnQuaAk4IEF1ZyAyMDA1IDE4OjAyOjQ3IC0wMDAw
CkBAIC01OCw3ICs1OCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9S
V0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRl
eDoga3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRGVzY0VsZW1lbnQuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRGVzY0VsZW1lbnQu
Y3BwCi0tLSBrc3ZnMi9kb20vU1ZHRGVzY0VsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRGVzY0VsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTg6
MDI6NDcgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5k
CiAqLwogCi1WYWx1ZSBTVkdEZXNjRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdEZXNjRWxlbWVudDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VO
VEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdE
ZXNjRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRGVzY0VsZW1lbnQuaAk5IEp1bCAyMDA1IDA2
OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50LmgJOCBBdWcgMjAw
NSAxODowMjo0NyAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9N
X0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdEb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0RvY3VtZW50LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0Rv
Y3VtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0RvY3VtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0
OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0RvY3VtZW50LmNwcAk4IEF1ZyAyMDA1IDE4
OjAyOjQ3IC0wMDAwCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHRG9jdW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRG9jdW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2Vu
KQogCXsKSW5kZXg6IGtzdmcyL2RvbS9TVkdEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdEb2N1bWVudC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRG9jdW1lbnQuaAot
LS0ga3N2ZzIvZG9tL1NWR0RvY3VtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdEb2N1bWVudC5oCTggQXVnIDIwMDUgMTg6MDI6NDcgLTAwMDAKQEAg
LTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0Vs
ZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxODowMjo0NyAtMDAwMApAQCAtNDksNyArNDksNyBAQCB1
c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0VsZW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
U1ZHRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzEsNyArNzEsNyBAQCBWYWx1ZSBTVkdF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci12b2lkIFNWR0VsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdFbGVtZW50OjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGlu
dCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0VsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRWxl
bWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6
NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRWxlbWVudC5oCTggQXVnIDIwMDUgMTg6
MDI6NDcgLTAwMDAKQEAgLTU4LDggKzU4LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9QVVQK
IAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGlu
dCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cik7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoU1ZHRWxlbWVudCkKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2UuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNl
LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAJOSBKdWwgMjAwNSAwNjo1
NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCTggQXVn
IDIwMDUgMTg6MDI6NDcgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtE
T007CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdFbGVtZW50SW5zdGFuY2U6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxlbWVu
dEluc3RhbmNlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRWxlbWVudElu
c3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIv
ZG9tL1NWR0VsZW1lbnRJbnN0YW5jZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlLmgKLS0tIGtzdmcyL2RvbS9T
VkdFbGVtZW50SW5zdGFuY2UuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZS5oCTggQXVnIDIwMDUgMTg6MDI6NDcgLTAwMDAKQEAg
LTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtE
T01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFu
Y2VMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRWxlbWVu
dEluc3RhbmNlTGlzdC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjQ3IC0wMDAw
CkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVO
VF9QUk9UT1RZUEUoIlNWR0VsZW1lbnRJbnN0YW5jZUxpc3QiLCBTVkdFbGVtZW50SW5zdGFuY2VM
aXN0UHJvdG8sIFNWR0VsZW1lbnRJbnN0YW5jZUxpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR0Vs
ZW1lbnRJbnN0YW5jZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApAQCAtNjQsNyArNjQsNyBAQCBWYWx1ZSBTVkdFbGVtZW50SW5zdGFuY2VMaXN0Ojpn
ZXRWYWx1ZVByCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdFbGVtZW50SW5z
dGFuY2VMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2Jq
LCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZUxpc3RQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR0VsZW1lbnRJbnN0YW5jZUxpc3QpCiAJ
S0RPTV9FTlRFUl9TQUZFCkBAIC03Myw3ICs3Myw3IEBAIFZhbHVlIFNWR0VsZW1lbnRJbnN0YW5j
ZUxpc3RQcm90b0Z1bmM6OmMKIAl7CiAJCWNhc2UgU1ZHRWxlbWVudEluc3RhbmNlTGlzdENvbnN0
YW50czo6SXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50
MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhl
Yyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdFbGVtZW50SW5zdGFuY2U+KGV4ZWMs
IG9iai5pdGVtKGluZGV4KSk7CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdF
bGVtZW50SW5zdGFuY2VMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZUxp
c3QuaAotLS0ga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaAk5IEp1bCAyMDA1IDA2
OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuaAk4
IEF1ZyAyMDA1IDE4OjAyOjQ3IC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdFbGxpcHNlRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdFbGxpcHNlRWxlbWVudC5j
cHAKLS0tIGtzdmcyL2RvbS9TVkdFbGxpcHNlRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1
MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdFbGxpcHNlRWxlbWVudC5jcHAJOCBBdWcgMjAw
NSAxODowMjo0OCAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsK
IEBlbmQKICovCiAKLVZhbHVlIFNWR0VsbGlwc2VFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0VsbGlwc2VFbGVt
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRWxsaXBzZUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
RWxsaXBzZUVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR0VsbGlwc2VFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdFbGxpcHNl
RWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
RWxsaXBzZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE4OjAyOjQ4IC0wMDAwCkBAIC02Niw3ICs2Niw3
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NW
R0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR0V4Y2VwdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdFeGNlcHRpb24uY3BwCi0tLSBrc3ZnMi9kb20vU1ZH
RXhjZXB0aW9uLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9t
L1NWR0V4Y2VwdGlvbi5jcHAJOCBBdWcgMjAwNSAxODowMjo0OCAtMDAwMApAQCAtMzQsNyArMzQs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0V4Y2VwdGlv
bjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0V4Y2VwdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2Vu
KSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkluZGV4OiBrc3ZnMi9kb20vU1ZHRXhjZXB0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR0V4Y2VwdGlvbi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHRXhjZXB0aW9uLmgKLS0tIGtzdmcyL2RvbS9TVkdFeGNlcHRpb24uaAk5
IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0V4Y2VwdGlvbi5o
CTggQXVnIDIwMDUgMTg6MDI6NDggLTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIEtT
VkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjQ4
IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8K
IAotVmFsdWUgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkLmgKLS0tIGtzdmcyL2RvbS9TVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkLmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgJOCBBdWcgMjAwNSAxODowMjo0OCAtMDAwMApAQCAt
NTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0
aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVCbGVu
ZEVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
RkVCbGVuZEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTg6MDI6NDggLTAwMDAKQEAgLTQ2LDcgKzQ2
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7DQogQGVuZA0KICovDQogDQotVmFsdWUgU1ZHRkVC
bGVuZEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0DQorVmFsdWVJbXAgKlNWR0ZFQmxlbmRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdA0KIHsNCiAJS0RPTV9FTlRFUl9TQUZFDQog
DQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFQmxlbmRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFQmxlbmRFbGVtZW50Lmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUJs
ZW5kRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRkVCbGVuZEVsZW1lbnQuaAk5IEp1bCAyMDA1
IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFQmxlbmRFbGVtZW50LmgJOCBB
dWcgMjAwNSAxODowMjo0OCAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgS1NWRw0K
IAkJS0RPTV9HRVQNCiAJCUtET01fRk9SV0FSRFBVVA0KIA0KLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ow0KKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsNCiAJfTsNCiB9Ow0KIA0KSW5kZXg6IGtzdmcyL2RvbS9TVkdGRUNvbG9yTWF0
cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjQ4IC0wMDAwCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtz
dmcyL2RvbS9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
LmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5oCTggQXVnIDIwMDUgMTg6MDI6NDggLTAwMDAKQEAgLTU5LDcgKzU5LDcg
QEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pT
OjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGRUNvbXBv
bmVudFRyYW5zZmVyRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAx
ODowMjo0OCAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsNCiBA
ZW5kDQogKi8NCiANCi1WYWx1ZSBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QNCitWYWx1ZUltcCAq
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0DQogew0KIAlLRE9NX0VOVEVSX1NBRkUNCiANCkluZGV4
OiBrc3ZnMi9kb20vU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9T
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAk4IEF1ZyAy
MDA1IDE4OjAyOjQ4IC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBLU1ZHDQogCQlL
RE9NX0dFVA0KIAkJS0RPTV9GT1JXQVJEUFVUDQogDQotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7DQorCQlLSlM6OlZh
bHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Ow0KIAl9Ow0KIH07DQogDQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFQ29tcG9zaXRlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIv
ZG9tL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCi0tLSBr
c3ZnMi9kb20vU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAJOCBBdWcgMjAw
NSAxODowMjo0OCAtMDAwMApAQCAtNTIsNyArNTIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsK
IEBlbmQKICovCiAKLVZhbHVlIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUNvbXBv
c2l0ZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRUNvbXBv
c2l0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAotLS0g
a3N2ZzIvZG9tL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAw
MDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgJOCBBdWcgMjAwNSAx
ODowMjo0OSAtMDAwMApAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dF
VAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRUZsb29kRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFRmxvb2RFbGVt
ZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZFRmxvb2RFbGVtZW50
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFRmxv
b2RFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjQ5IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLU1ZHOw0KIEBlbmQNCiAqLw0KIA0KLVZhbHVlIFNWR0ZFRmxvb2RF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dA0KK1ZhbHVlSW1wICpTVkdGRUZsb29kRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QNCiB7DQogCUtET01fRU5URVJfU0FGRQ0KIA0KSW5k
ZXg6IGtzdmcyL2RvbS9TVkdGRUZsb29kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRUZsb29kRWxlbWVudC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVGbG9vZEVs
ZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0ZFRmxvb2RFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1
NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUZsb29kRWxlbWVudC5oCTggQXVnIDIw
MDUgMTg6MDI6NDkgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEtTVkcNCiAJCUtE
T01fR0VUDQogCQlLRE9NX0ZPUldBUkRQVVQNCiANCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsNCisJCUtKUzo6VmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7DQogCX07DQogfTsNCiANCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5j
cHAKLS0tIGtzdmcyL2RvbS9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjQ5IC0wMDAwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudCIsIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudFByb3RvLCBTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnRQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcxLDE3
ICs3MSwxNyBAQCBWYWx1ZSBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmdldFZhbHVlCiAJcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnRQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCitWYWx1ZUltcCAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50UHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQog
ewotCVNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudCBvYmooY2FzdChleGVjLCBzdGF0aWNfY2FzdDxL
SlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOworCVNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudCBvYmooY2FzdChleGVjLCB0aGlzT2JqKSk7CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0
Y2goaWQpCiAJewogCQljYXNlIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudENvbnN0YW50czo6U2V0
U3RkRGV2aWF0aW9uOgogCQl7Ci0JCQlmbG9hdCBzdGREZXZpYXRpb25YID0gYXJnc1swXS50b051
bWJlcihleGVjKTsKLQkJCWZsb2F0IHN0ZERldmlhdGlvblkgPSBhcmdzWzFdLnRvTnVtYmVyKGV4
ZWMpOworCQkJZmxvYXQgc3RkRGV2aWF0aW9uWCA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOwor
CQkJZmxvYXQgc3RkRGV2aWF0aW9uWSA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJb2Jq
LnNldFN0ZERldmlhdGlvbihzdGREZXZpYXRpb25YLCBzdGREZXZpYXRpb25ZKTsKIAogCQkJcmV0
dXJuIFVuZGVmaW5lZCgpOwpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCi0tLSBrc3Zn
Mi9kb20vU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAk4IEF1ZyAyMDA1
IDE4OjAyOjQ5IC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01f
R0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAq
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
IAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVJ
bWFnZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTg6MDI6NDkgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdGRUltYWdlRWxl
bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpTVkdGRUltYWdlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2
ZzIvZG9tL1NWR0ZFSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFSW1hZ2VFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5o
Ci0tLSBrc3ZnMi9kb20vU1ZHRkVJbWFnZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFSW1hZ2VFbGVtZW50LmgJOCBBdWcgMjAwNSAxODow
Mjo0OSAtMDAwMApAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAog
CQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRU1lcmdlRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFTWVyZ2VFbGVtZW50
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VFbGVtZW50LmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VF
bGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjQ5IC0wMDAwCkBAIC00MCw3ICs0MCw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBLU1ZHOw0KIEBlbmQNCiAqLw0KIA0KLVZhbHVlIFNWR0ZFTWVyZ2VFbGVt
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdA0K
K1ZhbHVlSW1wICpTVkdGRU1lcmdlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QNCiB7DQogCUtET01fRU5URVJfU0FGRQ0KIA0KSW5kZXg6
IGtzdmcyL2RvbS9TVkdGRU1lcmdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRU1lcmdlRWxlbWVudC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVNZXJnZUVsZW1l
bnQuaAotLS0ga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1
MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRU1lcmdlRWxlbWVudC5oCTggQXVnIDIwMDUg
MTg6MDI6NDkgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEtTVkcNCiAJCUtET01f
R0VUDQogCQlLRE9NX0ZPUldBUkRQVVQNCiANCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsNCisJCUtKUzo6VmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7DQogCX07DQogfTsNCiANCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVNZXJnZU5vZGVFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAKLS0tIGtzdmcy
L2RvbS9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4
OjAyOjQ5IC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFTWVyZ2VOb2Rl
RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAkKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRU1lcmdlTm9k
ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuaAotLS0ga3N2
ZzIvZG9tL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgJOCBBdWcgMjAwNSAxODow
Mjo0OSAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAog
CQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRU9mZnNldEVsZW1l
bnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZFT2Zmc2V0RWxlbWVu
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRU9m
ZnNldEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTg6MDI6NDkgLTAwMDAKQEAgLTQ2LDcgKzQ2LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdGRU9mZnNldEVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqU1ZHRkVPZmZzZXRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBr
c3ZnMi9kb20vU1ZHRkVPZmZzZXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFT2Zmc2V0RWxlbWVudC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVPZmZzZXRFbGVt
ZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRU9mZnNldEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0
OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCTggQXVnIDIw
MDUgMTg6MDI6NDkgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVUaWxlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFVGlsZUVs
ZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHRkVUaWxlRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGRVRpbGVFbGVtZW50
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFVGls
ZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTg6MDI6NDkgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7DQogQGVuZA0KICovDQogDQotVmFsdWUgU1ZHRkVUaWxlRWxl
bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QN
CitWYWx1ZUltcCAqU1ZHRkVUaWxlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QNCiB7DQogCUtET01fRU5URVJfU0FGRQ0KIA0KSW5kZXg6
IGtzdmcyL2RvbS9TVkdGRVRpbGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFVGlsZUVsZW1lbnQuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFVGlsZUVsZW1lbnQu
aAotLS0ga3N2ZzIvZG9tL1NWR0ZFVGlsZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFVGlsZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE4OjAy
OjUwIC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBLU1ZHDQogCQlLRE9NX0dFVA0K
IAkJS0RPTV9GT1JXQVJEUFVUDQogDQotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7DQorCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ow0K
IAl9Ow0KIH07DQogDQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdG
RVR1cmJ1bGVuY2VFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9k
b20vU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkx
LjEKKysrIGtzdmcyL2RvbS9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4
OjAyOjUwIC0wMDAwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVUdXJidWxl
bmNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKLS0t
IGtzdmcyL2RvbS9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MyAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgJOCBBdWcgMjAw
NSAxODowMjo1MCAtMDAwMApAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9N
X0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGaWx0ZXJFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRmlsdGVyRWxl
bWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdGaWx0ZXJFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZpbHRlckVsZW1lbnQu
Y3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRmlsdGVy
RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxODowMjo1MCAtMDAwMApAQCAtNjEsNyArNjEsNyBAQCB1
c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdGaWx0
ZXJFbGVtZW50IiwgU1ZHRmlsdGVyRWxlbWVudFByb3RvLCBTVkdGaWx0ZXJFbGVtZW50UHJvdG9G
dW5jKQogCi1WYWx1ZSBTVkdGaWx0ZXJFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpbHRlckVsZW1lbnQ6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RP
TV9FTlRFUl9TQUZFCiAKQEAgLTkxLDE3ICs5MSwxNyBAQCBWYWx1ZSBTVkdGaWx0ZXJFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdG
aWx0ZXJFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR0ZpbHRlckVsZW1lbnRQcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCiB7Ci0JU1ZHRmlsdGVyRWxlbWVudCBvYmooY2FzdChleGVjLCBzdGF0aWNfY2FzdDxL
SlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOworCVNWR0ZpbHRlckVsZW1lbnQgb2Jq
KGNhc3QoZXhlYywgdGhpc09iaikpOwogCUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKGlkKQog
CXsKIAkJY2FzZSBTVkdGaWx0ZXJFbGVtZW50Q29uc3RhbnRzOjpTZXRGaWx0ZXJSZXM6CiAJCXsK
LQkJCXVuc2lnbmVkIGxvbmcgZmlsdGVyUmVzWCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7Owot
CQkJdW5zaWduZWQgbG9uZyBmaWx0ZXJSZXNZID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTs7CisJ
CQl1bnNpZ25lZCBsb25nIGZpbHRlclJlc1ggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTs7CisJ
CQl1bnNpZ25lZCBsb25nIGZpbHRlclJlc1kgPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTs7CiAJ
CQlvYmouc2V0RmlsdGVyUmVzKGZpbHRlclJlc1gsIGZpbHRlclJlc1kpOwogCQkJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrc3ZnMi9kb20vU1ZHRmlsdGVyRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGaWx0ZXJF
bGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdGaWx0ZXJFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGaWx0ZXJFbGVtZW50LmgJ
OSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGaWx0ZXJFbGVt
ZW50LmgJOCBBdWcgMjAwNSAxODowMjo1MCAtMDAwMApAQCAtNzYsNyArNzYsNyBAQCBuYW1lc3Bh
Y2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJ
CUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAotLS0ga3N2ZzIvZG9t
L1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJOSBKdWwgMjAwNSAwNjo1
NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTAgLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKLS0tIGtzdmcyL2RvbS9TVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5o
CTggQXVnIDIwMDUgMTg6MDI6NTAgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtT
VkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0Zp
dFRvVmlld0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR0ZpdFRvVmlld0JveC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGaXRUb1ZpZXdCb3guY3BwCi0tLSBrc3ZnMi9k
b20vU1ZHRml0VG9WaWV3Qm94LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR0ZpdFRvVmlld0JveC5jcHAJOCBBdWcgMjAwNSAxODowMjo1MCAtMDAwMApA
QCAtMzgsNyArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVl
IFNWR0ZpdFRvVmlld0JveDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdGaXRUb1ZpZXdCb3g6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdGaXRUb1ZpZXdCb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRml0VG9WaWV3Qm94LmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGaXRUb1ZpZXdC
b3guaAotLS0ga3N2ZzIvZG9tL1NWR0ZpdFRvVmlld0JveC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTMg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRml0VG9WaWV3Qm94LmgJOCBBdWcgMjAwNSAxODow
Mjo1MCAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8g
RWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0dFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHR0VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHR0VsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHR0VsZW1lbnQuY3Bw
CTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHR0VsZW1lbnQu
Y3BwCTggQXVnIDIwMDUgMTg6MDI6NTAgLTAwMDAKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdHRWxlbWVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdHRWxl
bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0dFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0dFbGVt
ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdHRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHR0VsZW1lbnQuaAk5IEp1bCAyMDA1IDA2
OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0dFbGVtZW50LmgJOCBBdWcgMjAwNSAx
ODowMjo1MCAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dF
VAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdHcmFkaWVudEVs
ZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHR3JhZGllbnRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0dyYWRpZW50RWxl
bWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdH
cmFkaWVudEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTAgLTAwMDAKQEAgLTQ2LDcgKzQ2
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdHcmFkaWVu
dEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqU1ZHR3JhZGllbnRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCQpJbmRl
eDoga3N2ZzIvZG9tL1NWR0dyYWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdHcmFkaWVudEVsZW1lbnQuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0dyYWRpZW50
RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHR3JhZGllbnRFbGVtZW50LmgJOSBKdWwgMjAwNSAw
Njo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdHcmFkaWVudEVsZW1lbnQuaAk4IEF1
ZyAyMDA1IDE4OjAyOjUxIC0wMDAwCkBAIC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJ
CUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ltYWdlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ltYWdl
RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdJbWFnZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHSW1hZ2VFbGVtZW50
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ltYWdl
RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxODowMjo1MSAtMDAwMApAQCAtNTAsNyArNTAsNyBAQCB1
c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0ltYWdlRWxlbWVudDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpTVkdJbWFnZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9T
VkdJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHSW1hZ2VFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdJbWFnZUVsZW1lbnQuaAotLS0ga3N2ZzIvZG9t
L1NWR0ltYWdlRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHSW1hZ2VFbGVtZW50LmgJOCBBdWcgMjAwNSAxODowMjo1MSAtMDAwMApAQCAtNzIs
NyArNzIsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQK
IAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcy
L2RvbS9TVkdMYW5nU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdMYW5nU3BhY2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTGFuZ1NwYWNlLmNwcAotLS0ga3N2ZzIv
ZG9tL1NWR0xhbmdTcGFjZS5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdMYW5nU3BhY2UuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTEgLTAwMDAKQEAgLTQy
LDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdM
YW5nU3BhY2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqU1ZHTGFuZ1NwYWNlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02MCw3ICs2
MCw3IEBAIFZhbHVlIFNWR0xhbmdTcGFjZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAlyZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHTGFuZ1NwYWNlOjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQg
U1ZHTGFuZ1NwYWNlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2
ZzIvZG9tL1NWR0xhbmdTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdMYW5nU3BhY2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0xhbmdTcGFjZS5oCi0tLSBrc3ZnMi9kb20v
U1ZHTGFuZ1NwYWNlLmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdMYW5nU3BhY2UuaAk4IEF1ZyAyMDA1IDE4OjAyOjUxIC0wMDAwCkBAIC02Miw4ICs2Miw4
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHTGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTGVuZ3RoLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0xlbmd0aC5jcHAKLS0tIGtzdmcy
L2RvbS9TVkdMZW5ndGguY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHTGVuZ3RoLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjUxIC0wMDAwCkBAIC01NCw3ICs1
NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUo
IlNWR0xlbmd0aCIsIFNWR0xlbmd0aFByb3RvLCBTVkdMZW5ndGhQcm90b0Z1bmMpCiAKLVZhbHVl
IFNWR0xlbmd0aDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpTVkdMZW5ndGg6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTc2LDIwICs3
NiwyMCBAQCBWYWx1ZSBTVkdMZW5ndGg6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0CiAJcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR0xlbmd0aDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNW
R0xlbmd0aDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFs
dWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJCiAJc3dpdGNoKHRva2Vu
KQogCXsKIAkJY2FzZSBTVkdMZW5ndGhDb25zdGFudHM6OlZhbHVlOgotCQkJc2V0VmFsdWUodmFs
dWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0VmFsdWUodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsK
IAkJCWJyZWFrOwogCQljYXNlIFNWR0xlbmd0aENvbnN0YW50czo6VmFsdWVBc1N0cmluZzoKIAkJ
CXNldFZhbHVlQXNTdHJpbmcoS0RPTTo6dG9ET01TdHJpbmcoZXhlYywgdmFsdWUpKTsKIAkJCWJy
ZWFrOwogCQljYXNlIFNWR0xlbmd0aENvbnN0YW50czo6VmFsdWVJblNwZWNpZmllZFVuaXRzOgot
CQkJc2V0VmFsdWVJblNwZWNpZmllZFVuaXRzKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNl
dFZhbHVlSW5TcGVjaWZpZWRVbml0cyh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7
CiAJCWRlZmF1bHQ6CiAJCQlrZFdhcm5pbmcoKSA8PCAiVW5oYW5kbGVkIHRva2VuIGluICIgPDwg
a19mdW5jaW5mbyA8PCAiIDogIiA8PCB0b2tlbiA8PCBlbmRsOwpAQCAtOTgsNyArOTgsNyBAQCB2
b2lkIFNWR0xlbmd0aDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAJS0RPTV9MRUFWRV9TQUZF
KEtET006OkRPTUV4Y2VwdGlvbikKIH0KIAotVmFsdWUgU1ZHTGVuZ3RoUHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKlNWR0xlbmd0aFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdElt
cCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoU1ZHTGVu
Z3RoKQogCUtET01fRU5URVJfU0FGRQpAQCAtMTA3LDE0ICsxMDcsMTQgQEAgVmFsdWUgU1ZHTGVu
Z3RoUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZQogCXsKIAkJY2FzZSBTVkdMZW5ndGhDb25zdGFu
dHM6Ok5ld1ZhbHVlU3BlY2lmaWVkVW5pdHM6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IHVuaXRU
eXBlID0gYXJnc1swXS50b1VJbnQxNihleGVjKTsKLQkJCWZsb2F0IHZhbHVlSW5TcGVjaWZpZWRV
bml0cyA9IGFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlw
ZSA9IGFyZ3NbMF0tPnRvVUludDE2KGV4ZWMpOworCQkJZmxvYXQgdmFsdWVJblNwZWNpZmllZFVu
aXRzID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlvYmoubmV3VmFsdWVTcGVjaWZpZWRV
bml0cyh1bml0VHlwZSwgdmFsdWVJblNwZWNpZmllZFVuaXRzKTsKIAkJCXJldHVybiBVbmRlZmlu
ZWQoKTsKIAkJfQogCQljYXNlIFNWR0xlbmd0aENvbnN0YW50czo6Q29udmVydFRvU3BlY2lmaWVk
VW5pdHM6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0gYXJnc1swXS50b1VJbnQx
NihleGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0gYXJnc1swXS0+dG9VSW50MTYo
ZXhlYyk7CiAJCQlvYmouY29udmVydFRvU3BlY2lmaWVkVW5pdHModW5pdFR5cGUpOwogCQkJcmV0
dXJuIFVuZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrc3ZnMi9kb20vU1ZHTGVuZ3RoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xlbmd0aC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
TGVuZ3RoLmgKLS0tIGtzdmcyL2RvbS9TVkdMZW5ndGguaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0xlbmd0aC5oCTggQXVnIDIwMDUgMTg6MDI6NTEgLTAw
MDAKQEAgLTcxLDggKzcxLDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9QVVQKIAkJS0RPTV9D
QVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsK
IH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdMZW5ndGhMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTGVuZ3RoTGlzdC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdMZW5n
dGhMaXN0LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0xlbmd0aExpc3QuY3BwCTkgSnVsIDIwMDUgMDY6
NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTGVuZ3RoTGlzdC5jcHAJOCBBdWcgMjAw
NSAxODowMjo1MSAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsK
IAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdMZW5ndGhMaXN0IiwgU1ZHTGVuZ3RoTGlz
dFByb3RvLCBTVkdMZW5ndGhMaXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdMZW5ndGhMaXN0Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0xlbmd0aExpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcyLDcgKzcyLDcgQEAgVmFs
dWUgU1ZHTGVuZ3RoTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogCXJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotVmFsdWUgU1ZHTGVuZ3RoTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdMZW5n
dGhMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2Jq
LCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhTVkdMZW5ndGhMaXN0KQog
CUtET01fRU5URVJfU0FGRQpAQCAtOTEsMjQgKzkxLDI0IEBAIFZhbHVlIFNWR0xlbmd0aExpc3RQ
cm90b0Z1bmM6OmNhbGwoRXhlY1MKIAkJfQogCQljYXNlIFNWR0xlbmd0aExpc3RDb25zdGFudHM6
OkdldEl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMy
KGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMp
OwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTGVuZ3RoPihleGVjLCBvYmouZ2V0SXRl
bShpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHTGVuZ3RoTGlzdENvbnN0YW50czo6SW5zZXJ0SXRl
bUJlZm9yZToKIAkJewogCQkJU1ZHTGVuZ3RoIG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZH
TGVuZ3RoPihleGVjLCBhcmdzWzBdLCAmdG9TVkdMZW5ndGgpOwotCQkJdW5zaWduZWQgbG9uZyBp
bmRleCA9IGFyZ3NbMV0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0g
YXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdM
ZW5ndGg+KGV4ZWMsIG9iai5pbnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0K
IAkJY2FzZSBTVkdMZW5ndGhMaXN0Q29uc3RhbnRzOjpSZXBsYWNlSXRlbToKIAkJewogCQkJU1ZH
TGVuZ3RoIG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZHTGVuZ3RoPihleGVjLCBhcmdzWzBd
LCAmdG9TVkdMZW5ndGgpOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50
MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhl
Yyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdMZW5ndGg+KGV4ZWMsIG9iai5yZXBs
YWNlSXRlbShuZXdJdGVtLCBpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHTGVuZ3RoTGlzdENvbnN0
YW50czo6UmVtb3ZlSXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0u
dG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50
MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdMZW5ndGg+KGV4ZWMsIG9i
ai5yZW1vdmVJdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdMZW5ndGhMaXN0Q29uc3RhbnRz
OjpBcHBlbmRJdGVtOgpJbmRleDoga3N2ZzIvZG9tL1NWR0xlbmd0aExpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTGVuZ3RoTGlzdC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
TGVuZ3RoTGlzdC5oCi0tLSBrc3ZnMi9kb20vU1ZHTGVuZ3RoTGlzdC5oCTkgSnVsIDIwMDUgMDY6
NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTGVuZ3RoTGlzdC5oCTggQXVnIDIwMDUg
MTg6MDI6NTEgLTAwMDAKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6
IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZh
bHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdMaW5l
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR0xpbmVFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0xpbmVFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NW
R0xpbmVFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIv
ZG9tL1NWR0xpbmVFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjUxIC0wMDAwCkBAIC00Miw3
ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHTGlu
ZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqU1ZHTGluZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtz
dmcyL2RvbS9TVkdMaW5lRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdMaW5lRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTGluZUVsZW1lbnQuaAotLS0ga3N2
ZzIvZG9tL1NWR0xpbmVFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdMaW5lRWxlbWVudC5oCTggQXVnIDIwMDUgMTg6MDI6NTEgLTAwMDAKQEAg
LTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJE
UFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBr
c3ZnMi9kb20vU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdMaW5lYXJHcmFk
aWVudEVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjUyIC0wMDAw
CkBAIC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFs
dWUgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0xpbmVhckdyYWRpZW50RWxlbWVu
dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsK
IAlLRE9NX0VOVEVSX1NBRkUKIAkKSW5kZXg6IGtzdmcyL2RvbS9TVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9k
b20vU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAotLS0g
a3N2ZzIvZG9tL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgJOCBBdWcg
MjAwNSAxODowMjo1MiAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlL
RE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdMb2NhdGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdMb2NhdGFibGUu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHTG9jYXRhYmxlLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0xvY2F0YWJsZS5jcHAJOSBKdWwgMjAw
NSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdMb2NhdGFibGUuY3BwCTggQXVn
IDIwMDUgMTg6MDI6NTIgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtT
Vkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHTG9jYXRhYmxlIiwgU1ZHTG9jYXRh
YmxlUHJvdG8sIFNWR0xvY2F0YWJsZVByb3RvRnVuYykKIAotVmFsdWUgU1ZHTG9jYXRhYmxlOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0xvY2F0YWJsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzEsOSArNzEsOSBAQCBWYWx1
ZSBTVkdMb2NhdGFibGU6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1WYWx1ZSBTVkdMb2NhdGFibGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHTG9jYXRh
YmxlUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKQogewotCVNWR0xvY2F0YWJsZSBvYmooY2FzdChleGVjLCBzdGF0aWNf
Y2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOworCVNWR0xvY2F0YWJsZSBv
YmooY2FzdChleGVjLCB0aGlzT2JqKSk7CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0Y2goaWQp
CkluZGV4OiBrc3ZnMi9kb20vU1ZHTG9jYXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xvY2F0YWJsZS5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTG9jYXRhYmxlLmgKLS0t
IGtzdmcyL2RvbS9TVkdMb2NhdGFibGUuaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR0xvY2F0YWJsZS5oCTggQXVnIDIwMDUgMTg6MDI6NTIgLTAwMDAKQEAg
LTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2Vj
dGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdNYXJrZXJFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTWFya2Vy
RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdNYXJrZXJFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR01hcmtlckVsZW1l
bnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTWFy
a2VyRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxODowMjo1MiAtMDAwMApAQCAtNTEsNyArNTEsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdN
YXJrZXJFbGVtZW50IiwgU1ZHTWFya2VyRWxlbWVudFByb3RvLCBTVkdNYXJrZXJFbGVtZW50UHJv
dG9GdW5jKQogCi1WYWx1ZSBTVkdNYXJrZXJFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR01hcmtlckVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAJCkBAIC03Myw5ICs3Myw5IEBAIFZhbHVlIFNWR01hcmtlckVsZW1l
bnQ6OmdldFZhbHVlUHJvcGVydHkKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNW
R01hcmtlckVsZW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHTWFya2VyRWxlbWVudFByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKIHsKLQlTVkdNYXJrZXJFbGVtZW50IG9iaihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0
PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7CisJU1ZHTWFya2VyRWxlbWVudCBv
YmooY2FzdChleGVjLCB0aGlzT2JqKSk7CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0Y2goaWQp
CkluZGV4OiBrc3ZnMi9kb20vU1ZHTWFya2VyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdNYXJrZXJFbGVtZW50LmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdNYXJrZXJF
bGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdNYXJrZXJFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1
NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdNYXJrZXJFbGVtZW50LmgJOCBBdWcgMjAw
NSAxODowMjo1MiAtMDAwMApAQCAtNzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9N
X0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdNYXRyaXguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdNYXRyaXguY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTWF0cml4
LmNwcAotLS0ga3N2ZzIvZG9tL1NWR01hdHJpeC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdNYXRyaXguY3BwCTggQXVnIDIwMDUgMTg6MDI6NTIgLTAw
MDAKQEAgLTU4LDcgKzU4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVN
RU5UX1BST1RPVFlQRSgiU1ZHTWF0cml4IiwgU1ZHTWF0cml4UHJvdG8sIFNWR01hdHJpeFByb3Rv
RnVuYykKIAotVmFsdWUgU1ZHTWF0cml4OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR01hdHJpeDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IApAQCAtODQsNyArODQsNyBAQCBWYWx1ZSBTVkdNYXRyaXg6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR01hdHJpeDo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBp
bnQpCit2b2lkIFNWR01hdHJpeDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAg
LTkyLDMyICs5MiwzMiBAQCB2b2lkIFNWR01hdHJpeDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
CiAJewogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6QToKIAkJewotCQkJc2V0QSh2YWx1ZS50
b051bWJlcihleGVjKSk7CisJCQlzZXRBKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlicmVh
azsKIAkJfQogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6QjoKIAkJewotCQkJc2V0Qih2YWx1
ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRCKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQli
cmVhazsKIAkJfQogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6QzoKIAkJewotCQkJc2V0Qyh2
YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRDKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJ
CQlicmVhazsKIAkJfQogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6RDoKIAkJewotCQkJc2V0
RCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXREKHZhbHVlLT50b051bWJlcihleGVjKSk7
CiAJCQlicmVhazsKIAkJfQogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6RToKIAkJewotCQkJ
c2V0RSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRFKHZhbHVlLT50b051bWJlcihleGVj
KSk7CiAJCQlicmVhazsKIAkJfQogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6RjoKIAkJewot
CQkJc2V0Rih2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRGKHZhbHVlLT50b051bWJlcihl
eGVjKSk7CiAJCQlicmVhazsKIAkJfQogCQlkZWZhdWx0OgpAQCAtMTI3LDcgKzEyNyw3IEBAIHZv
aWQgU1ZHTWF0cml4OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlLRE9NX0xFQVZFX1NBRkUo
S0RPTTo6RE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBTVkdNYXRyaXhQcm90b0Z1bmM6OmNhbGwo
RXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1
ZUltcCAqU1ZHTWF0cml4UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1w
ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhTVkdNYXRy
aXgpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC0xMzgsOCArMTM4LDggQEAgVmFsdWUgU1ZHTWF0cml4
UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZQogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZH
TWF0cml4PihleGVjLCBvYmouaW52ZXJzZSgpKTsKIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6
OlRyYW5zbGF0ZToKIAkJewotCQkJZG91YmxlIHggPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOwot
CQkJZG91YmxlIHkgPSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHggPSBhcmdz
WzBdLT50b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSB5ID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhl
Yyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdNYXRyaXg+KGV4ZWMsIG9iai50cmFu
c2xhdGUoeCwgeSkpOwogCQl9CiAJCWNhc2UgU1ZHTWF0cml4Q29uc3RhbnRzOjpNdWx0aXBseToK
QEAgLTE0OSwyNCArMTQ5LDI0IEBAIFZhbHVlIFNWR01hdHJpeFByb3RvRnVuYzo6Y2FsbChFeGVj
U3RhdGUKIAkJfQogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6U2NhbGU6CiAJCXsKLQkJCWRv
dWJsZSBzY2FsZUZhY3RvciA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgc2Nh
bGVGYWN0b3IgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZl
X2NhY2hlPFNWR01hdHJpeD4oZXhlYywgb2JqLnNjYWxlKHNjYWxlRmFjdG9yKSk7CiAJCX0KIAkJ
Y2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OlJvdGF0ZToKIAkJewotCQkJZG91YmxlIGFuZ2xlID0g
YXJnc1swXS50b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSBhbmdsZSA9IGFyZ3NbMF0tPnRvTnVt
YmVyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTWF0cml4PihleGVjLCBv
Ymoucm90YXRlKGFuZ2xlKSk7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OlJvdGF0
ZUZyb21WZWN0b3I6CiAJCXsKLQkJCWRvdWJsZSB4ID0gYXJnc1swXS50b051bWJlcihleGVjKTsK
LQkJCWRvdWJsZSB5ID0gYXJnc1sxXS50b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSB4ID0gYXJn
c1swXS0+dG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgeSA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4
ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTWF0cml4PihleGVjLCBvYmoucm90
YXRlRnJvbVZlY3Rvcih4LCB5KSk7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OlNj
YWxlTm9uVW5pZm9ybToKIAkJewotCQkJZG91YmxlIHNjYWxlRmFjdG9yWCA9IGFyZ3NbMF0udG9O
dW1iZXIoZXhlYyk7Ci0JCQlkb3VibGUgc2NhbGVGYWN0b3JZID0gYXJnc1sxXS50b051bWJlcihl
eGVjKTsKKwkJCWRvdWJsZSBzY2FsZUZhY3RvclggPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsK
KwkJCWRvdWJsZSBzY2FsZUZhY3RvclkgPSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKIAkJCXJl
dHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR01hdHJpeD4oZXhlYywgb2JqLnNjYWxlTm9uVW5pZm9y
bShzY2FsZUZhY3RvclgsIHNjYWxlRmFjdG9yWSkpOwogCQl9CiAJCWNhc2UgU1ZHTWF0cml4Q29u
c3RhbnRzOjpGbGlwWDoKQEAgLTE3NSwxMiArMTc1LDEyIEBAIFZhbHVlIFNWR01hdHJpeFByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR01hdHJp
eD4oZXhlYywgb2JqLmZsaXBZKCkpOwogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6U2tld1g6
CiAJCXsKLQkJCWRvdWJsZSBhbmdsZSA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisJCQlkb3Vi
bGUgYW5nbGUgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZl
X2NhY2hlPFNWR01hdHJpeD4oZXhlYywgb2JqLnNrZXdYKGFuZ2xlKSk7CiAJCX0KIAkJY2FzZSBT
VkdNYXRyaXhDb25zdGFudHM6OlNrZXdZOgogCQl7Ci0JCQlkb3VibGUgYW5nbGUgPSBhcmdzWzBd
LnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIGFuZ2xlID0gYXJnc1swXS0+dG9OdW1iZXIoZXhl
Yyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdNYXRyaXg+KGV4ZWMsIG9iai5za2V3
WShhbmdsZSkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHTWF0cml4LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR01h
dHJpeC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHTWF0cml4LmgKLS0tIGtzdmcyL2RvbS9TVkdNYXRyaXguaAk5IEp1bCAyMDA1IDA2OjU0
OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR01hdHJpeC5oCTggQXVnIDIwMDUgMTg6MDI6
NTIgLTAwMDAKQEAgLTgzLDggKzgzLDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9QVVQKIAkJ
S0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBh
dHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7
CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoU1ZHTWF0cml4KQpJbmRleDoga3N2ZzIvZG9tL1NW
R051bWJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR051bWJlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2RvbS9TVkdOdW1iZXIuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHTnVtYmVyLmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR051bWJlci5j
cHAJOCBBdWcgMjAwNSAxODowMjo1MiAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR051bWJlcjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdOdW1iZXI6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKQEAgLTU4LDcgKzU4LDcgQEAgVmFsdWUgU1ZHTnVtYmVyOjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdO
dW1iZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdOdW1iZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01f
RU5URVJfU0FGRQogCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgU1ZHTnVtYmVyOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGEKIAl7CiAJCWNhc2UgU1ZHTnVtYmVyQ29uc3RhbnRzOjpWYWx1ZToKIAkJ
ewotCQkJc2V0VmFsdWUodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0VmFsdWUodmFsdWUt
PnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3Zn
Mi9kb20vU1ZHTnVtYmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR051bWJlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTnVtYmVyLmgKLS0tIGtzdmcyL2RvbS9TVkdOdW1iZXIu
aAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR051bWJlci5o
CTggQXVnIDIwMDUgMTg6MDI6NTIgLTAwMDAKQEAgLTU2LDggKzU2LDggQEAgbmFtZXNwYWNlIEtT
VkcKIAkJS0RPTV9QVVQKIAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpW
YWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAg
KnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoU1ZHTnVtYmVyKQpJ
bmRleDoga3N2ZzIvZG9tL1NWR051bWJlckxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdOdW1iZXJMaXN0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR051bWJlckxpc3Qu
Y3BwCi0tLSBrc3ZnMi9kb20vU1ZHTnVtYmVyTGlzdC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdOdW1iZXJMaXN0LmNwcAk4IEF1ZyAyMDA1IDE4OjAy
OjUyIC0wMDAwCkBAIC01NCw3ICs1NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZH
X0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR051bWJlckxpc3QiLCBTVkdOdW1iZXJMaXN0UHJvdG8s
IFNWR051bWJlckxpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR051bWJlckxpc3Q6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZH
TnVtYmVyTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzAsNyArNzAsNyBAQCBWYWx1ZSBTVkdO
dW1iZXJMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1WYWx1ZSBTVkdOdW1iZXJMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR051bWJlckxpc3RQ
cm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR051bWJlckxpc3QpCiAJS0RPTV9F
TlRFUl9TQUZFCkBAIC04OSwyNCArODksMjQgQEAgVmFsdWUgU1ZHTnVtYmVyTGlzdFByb3RvRnVu
Yzo6Y2FsbChFeGVjUwogCQl9CiAJCWNhc2UgU1ZHTnVtYmVyTGlzdENvbnN0YW50czo6R2V0SXRl
bToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7
CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQly
ZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdOdW1iZXI+KGV4ZWMsIG9iai5nZXRJdGVtKGluZGV4
KSk7CiAJCX0KIAkJY2FzZSBTVkdOdW1iZXJMaXN0Q29uc3RhbnRzOjpJbnNlcnRJdGVtQmVmb3Jl
OgogCQl7CiAJCQlTVkdOdW1iZXIgbmV3SXRlbSA9IEtET006OmVjbWFfY2FzdDxTVkdOdW1iZXI+
KGV4ZWMsIGFyZ3NbMF0sICZ0b1NWR051bWJlcik7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0g
YXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFd
LT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR051bWJlcj4o
ZXhlYywgb2JqLmluc2VydEl0ZW1CZWZvcmUobmV3SXRlbSwgaW5kZXgpKTsKIAkJfQogCQljYXNl
IFNWR051bWJlckxpc3RDb25zdGFudHM6OlJlcGxhY2VJdGVtOgogCQl7CiAJCQlTVkdOdW1iZXIg
bmV3SXRlbSA9IEtET006OmVjbWFfY2FzdDxTVkdOdW1iZXI+KGV4ZWMsIGFyZ3NbMF0sICZ0b1NW
R051bWJlcik7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVj
KTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJ
CXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR051bWJlcj4oZXhlYywgb2JqLnJlcGxhY2VJdGVt
KG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdOdW1iZXJMaXN0Q29uc3RhbnRzOjpS
ZW1vdmVJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQz
MihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVj
KTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR051bWJlcj4oZXhlYywgb2JqLnJlbW92
ZUl0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR051bWJlckxpc3RDb25zdGFudHM6OkFwcGVu
ZEl0ZW06CkluZGV4OiBrc3ZnMi9kb20vU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdOdW1iZXJMaXN0LmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdOdW1iZXJM
aXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdOdW1iZXJMaXN0LmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdOdW1iZXJMaXN0LmgJOCBBdWcgMjAwNSAxODowMjo1
MyAtMDAwMApAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNt
YVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1BhaW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGFp
bnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHUGFpbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGFpbnQuY3BwCTkgSnVsIDIwMDUgMDY6
NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGFpbnQuY3BwCTggQXVnIDIwMDUgMTg6
MDI6NTMgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtT
VkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHUGFpbnQiLCBTVkdQYWludFByb3RvLCBTVkdQYWlu
dFByb3RvRnVuYykKIAotVmFsdWUgU1ZHUGFpbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGFpbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9T
QUZFCiAKQEAgLTYxLDcgKzYxLDcgQEAgVmFsdWUgU1ZHUGFpbnQ6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHUGFpbnRQcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpCitWYWx1ZUltcCAqU1ZHUGFpbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElT
KFNWR1BhaW50KQogCUtET01fRU5URVJfU0FGRQpAQCAtNzYsNyArNzYsNyBAQCBWYWx1ZSBTVkdQ
YWludFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgCiAJCX0KIAkJY2FzZSBTVkdQYWludENvbnN0
YW50czo6U2V0UGFpbnQ6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IHBhaW50VHlwZSA9IGFyZ3Nb
MF0udG9VSW50MTYoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCBwYWludFR5cGUgPSBhcmdzWzBd
LT50b1VJbnQxNihleGVjKTsKIAkJCUtET006OkRPTVN0cmluZyB1cmkgPSBLRE9NOjp0b0RPTVN0
cmluZyhleGVjLCBhcmdzWzFdKTsKIAkJCUtET006OkRPTVN0cmluZyByZ2JQYWludCA9IEtET006
OnRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMl0pOwogCQkJS0RPTTo6RE9NU3RyaW5nIGljY1BhaW50
ID0gS0RPTTo6dG9ET01TdHJpbmcoZXhlYywgYXJnc1szXSk7CkluZGV4OiBrc3ZnMi9kb20vU1ZH
UGFpbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9k
b20vU1ZHUGFpbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR1BhaW50LmgKLS0tIGtzdmcyL2RvbS9TVkdQYWludC5oCTkgSnVsIDIwMDUg
MDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGFpbnQuaAk4IEF1ZyAyMDA1IDE4
OjAyOjUzIC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VU
CiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9
OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aEVsZW1lbnQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
UGF0aEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aEVsZW1lbnQuY3BwCTkgSnVsIDIw
MDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aEVsZW1lbnQuY3BwCTgg
QXVnIDIwMDUgMTg6MDI6NTMgLTAwMDAKQEAgLTc1LDcgKzc1LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHUGF0aEVsZW1lbnQiLCBTVkdQ
YXRoRWxlbWVudFByb3RvLCBTVkdQYXRoRWxlbWVudFByb3RvRnVuYykKIAotVmFsdWUgU1ZHUGF0
aEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CitWYWx1ZUltcCAqU1ZHUGF0aEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkBAIC05MSw5
ICs5MSw5IEBAIFZhbHVlIFNWR1BhdGhFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEUKIAlyZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR1BhdGhFbGVtZW50UHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKlNWR1BhdGhFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotCVNWR1BhdGhFbGVtZW50IG9i
aihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkp
KSk7CisJU1ZHUGF0aEVsZW1lbnQgb2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwogCUtET01fRU5U
RVJfU0FGRQogCiAJc3dpdGNoKGlkKQpAQCAtMTAxLDQ3ICsxMDEsNDcgQEAgVmFsdWUgU1ZHUGF0
aEVsZW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhlYwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3Rh
bnRzOjpHZXRUb3RhbExlbmd0aDoKIAkJCXJldHVybiBOdW1iZXIob2JqLmdldFRvdGFsTGVuZ3Ro
KCkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpHZXRQb2ludEF0TGVuZ3RoOgot
CQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUG9pbnQ+KGV4ZWMsIG9iai5nZXRQb2ludEF0
TGVuZ3RoKGFyZ3NbMF0udG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2Nh
Y2hlPFNWR1BvaW50PihleGVjLCBvYmouZ2V0UG9pbnRBdExlbmd0aChhcmdzWzBdLT50b051bWJl
cihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpHZXRQYXRoU2VnQXRM
ZW5ndGg6Ci0JCQlyZXR1cm4gTnVtYmVyKG9iai5nZXRQYXRoU2VnQXRMZW5ndGgoYXJnc1swXS50
b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIE51bWJlcihvYmouZ2V0UGF0aFNlZ0F0TGVuZ3Ro
KGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFu
dHM6OkNyZWF0ZVNWR1BhdGhTZWdDbG9zZVBhdGg6CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNo
ZTxTVkdQYXRoU2VnPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0Nsb3NlUGF0aCgpKTsKIAkJ
Y2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0FiczoK
LQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdNb3ZldG9BYnM+KGV4ZWMsIG9i
ai5jcmVhdGVTVkdQYXRoU2VnTW92ZXRvQWJzKGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3Nb
MV0udG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhT
ZWdNb3ZldG9BYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnTW92ZXRvQWJzKGFyZ3NbMF0t
PnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1Bh
dGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnTW92ZXRvUmVsOgotCQkJcmV0dXJu
IEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ01vdmV0b1JlbD4oZXhlYywgb2JqLmNyZWF0ZVNW
R1BhdGhTZWdNb3ZldG9SZWwoYXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJl
cihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ01vdmV0b1Jl
bD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdNb3ZldG9SZWwoYXJnc1swXS0+dG9OdW1iZXIo
ZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRD
b25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9BYnM6Ci0JCQlyZXR1cm4gS0RPTTo6c2Fm
ZV9jYWNoZTxTVkdQYXRoU2VnTGluZXRvQWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0xp
bmV0b0FicyhhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpKSk7
CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnTGluZXRvQWJzPihleGVjLCBv
YmouY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0FicyhhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJn
c1sxXS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6
Q3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1JlbDoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNW
R1BhdGhTZWdMaW5ldG9SZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnTGluZXRvUmVsKGFy
Z3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVy
biBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9SZWw+KGV4ZWMsIG9iai5jcmVhdGVT
VkdQYXRoU2VnTGluZXRvUmVsKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051
bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljQWJzOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY0Ficz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNBYnMoYXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJlcihleGVjKSwgYXJn
c1syXS50b051bWJlcihleGVjKSwgYXJnc1szXS50b051bWJlcihleGVjKSwgYXJnc1s0XS50b051
bWJlcihleGVjKSwgYXJnc1s1XS50b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNh
ZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficz4oZXhlYywgb2JqLmNyZWF0ZVNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNBYnMoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRv
TnVtYmVyKGV4ZWMpLCBhcmdzWzJdLT50b051bWJlcihleGVjKSwgYXJnc1szXS0+dG9OdW1iZXIo
ZXhlYyksIGFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzVdLT50b051bWJlcihleGVjKSkp
OwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnQ3VydmV0
b0N1YmljUmVsOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1JlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwoYXJnc1sw
XS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJlcihleGVjKSwgYXJnc1syXS50b051bWJl
cihleGVjKSwgYXJnc1szXS50b051bWJlcihleGVjKSwgYXJnc1s0XS50b051bWJlcihleGVjKSwg
YXJnc1s1XS50b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1JlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNSZWwoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMp
LCBhcmdzWzJdLT50b051bWJlcihleGVjKSwgYXJnc1szXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3Nb
NF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzVdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNW
R1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Fi
czoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
QWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMoYXJnc1sw
XS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJlcihleGVjKSwgYXJnc1syXS50b051bWJl
cihleGVjKSwgYXJnc1szXS50b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVf
Y2FjaGU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY0FicyhhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sx
XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLT50b051
bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNSZWwoYXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJl
cihleGVjKSwgYXJnc1syXS50b051bWJlcihleGVjKSwgYXJnc1szXS50b051bWJlcihleGVjKSkp
OworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNS
ZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbChhcmdzWzBd
LT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0tPnRvTnVt
YmVyKGV4ZWMpLCBhcmdzWzNdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVt
ZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnQXJjQWJzOgotCQkJcmV0dXJuIEtET006OnNh
ZmVfY2FjaGU8U1ZHUGF0aFNlZ0FyY0Ficz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdBcmNB
YnMoYXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJlcihleGVjKSwgYXJnc1sy
XS50b051bWJlcihleGVjKSwgYXJnc1szXS50b051bWJlcihleGVjKSwgYXJnc1s0XS50b051bWJl
cihleGVjKSwgYXJnc1s1XS50b0Jvb2xlYW4oZXhlYyksIGFyZ3NbNl0udG9Cb29sZWFuKGV4ZWMp
KSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQXJjQWJzPihleGVjLCBv
YmouY3JlYXRlU1ZHUGF0aFNlZ0FyY0FicyhhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sx
XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLT50b051
bWJlcihleGVjKSwgYXJnc1s0XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNV0tPnRvQm9vbGVhbihl
eGVjKSwgYXJnc1s2XS0+dG9Cb29sZWFuKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRD
b25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdBcmNSZWw6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9j
YWNoZTxTVkdQYXRoU2VnQXJjUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbChh
cmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLnRv
TnVtYmVyKGV4ZWMpLCBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzRdLnRvTnVtYmVyKGV4
ZWMpLCBhcmdzWzVdLnRvQm9vbGVhbihleGVjKSwgYXJnc1s2XS50b0Jvb2xlYW4oZXhlYykpKTsK
KwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdBcmNSZWw+KGV4ZWMsIG9iai5j
cmVhdGVTVkdQYXRoU2VnQXJjUmVsKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50
b051bWJlcihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRvTnVtYmVy
KGV4ZWMpLCBhcmdzWzRdLT50b051bWJlcihleGVjKSwgYXJnc1s1XS0+dG9Cb29sZWFuKGV4ZWMp
LCBhcmdzWzZdLT50b0Jvb2xlYW4oZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0
YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6Ci0JCQlyZXR1cm4gS0RP
TTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicz4oZXhlYywgb2JqLmNy
ZWF0ZVNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzKGFyZ3NbMF0udG9OdW1iZXIoZXhlYykp
KTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFs
QWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMoYXJnc1sw
XS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3Jl
YXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9j
YWNoZTxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1Bh
dGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKGFyZ3NbMF0udG9OdW1iZXIoZXhlYykpKTsKKwkJCXJl
dHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsPihleGVj
LCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwoYXJnc1swXS0+dG9OdW1i
ZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1Zl
cnRpY2FsQWJzKGFyZ3NbMF0udG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZl
X2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicz4oZXhlYywgb2JqLmNyZWF0ZVNWR1Bh
dGhTZWdMaW5ldG9WZXJ0aWNhbEFicyhhcmdzWzBdLT50b051bWJlcihleGVjKSkpOwogCQljYXNl
IFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnTGluZXRvVmVydGljYWxS
ZWw6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxS
ZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwoYXJnc1swXS50
b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2Fs
UmVsKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25z
dGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6Ci0JCQlyZXR1cm4g
S0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzPihleGVjLCBv
YmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicyhhcmdzWzBdLnRvTnVtYmVy
KGV4ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpLCBh
cmdzWzNdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1Ntb290aEFicyhhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9O
dW1iZXIoZXhlYyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLT50b051bWJlcihl
eGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoUmVsOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNTbW9vdGhSZWwoYXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJl
cihleGVjKSwgYXJnc1syXS50b051bWJlcihleGVjKSwgYXJnc1szXS50b051bWJlcihleGVjKSkp
OworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aFJlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwoYXJn
c1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLT50
b051bWJlcihleGVjKSwgYXJnc1szXS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRo
RWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhB
YnM6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1Ntb290aEFicz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21v
b3RoQWJzKGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYykpKTsK
KwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21v
b3RoQWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhB
YnMoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJ
CWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljU21vb3RoUmVsOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1Ntb290aFJlbChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVt
YmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY1Ntb290aFJlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljU21vb3RoUmVsKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJl
cihleGVjKSkpOwogCQlkZWZhdWx0OgogCQkJa2RXYXJuaW5nKCkgPDwgIlVuaGFuZGxlZCBmdW5j
dGlvbiBpZCBpbiAiIDw8IGtfZnVuY2luZm8gPDwgIiA6ICIgPDwgaWQgPDwgZW5kbDsKIAl9Cklu
ZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aEVsZW1lbnQuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmgK
LS0tIGtzdmcyL2RvbS9TVkdQYXRoRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE4OjAyOjUzIC0w
MDAwCkBAIC0xMDcsNyArMTA3LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RP
TV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9Owog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWcuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZy5jcHAKLS0t
IGtzdmcyL2RvbS9TVkdQYXRoU2VnLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR1BhdGhTZWcuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTMgLTAwMDAKQEAg
LTM1LDcgKzM1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBT
VkdQYXRoU2VnOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUGF0aFNlZzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50
IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkluZGV4OiBrc3ZnMi9kb20vU1ZH
UGF0aFNlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcy
L2RvbS9TVkdQYXRoU2VnLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnLmgKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnLmgJOSBK
dWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnLmgJOCBB
dWcgMjAwNSAxODowMjo1MyAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgS1NWRwog
CQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKFNWR1BhdGhTZWcpCkluZGV4OiBr
c3ZnMi9kb20vU1ZHUGF0aFNlZ0FyYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0FyYy5jcHAKLS0t
IGtzdmcyL2RvbS9TVkdQYXRoU2VnQXJjLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTQgLTAw
MDAKQEAgLTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1W
YWx1ZSBTVkdQYXRoU2VnQXJjQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0FyY0Ficzo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBA
IC02MiwzOCArNjIsMzggQEAgVmFsdWUgU1ZHUGF0aFNlZ0FyY0Ficzo6Z2V0VmFsdWVQcm9wZXJ0
eQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnQXJjQWJzOjpwdXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFs
dWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ0FyY0Ficzo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRv
a2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQXJjQ29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRY
KHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsK
IAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdBcmNDb25zdGFudHM6Olk6CiAJCXsK
LQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIo
ZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6
UjE6CiAJCXsKLQkJCXNldFIxKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFIxKHZhbHVl
LT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQXJj
Q29uc3RhbnRzOjpSMjoKIAkJewotCQkJc2V0UjIodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJ
c2V0UjIodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNW
R1BhdGhTZWdBcmNDb25zdGFudHM6OkxhcmdlQXJjRmxhZzoKIAkJewotCQkJc2V0TGFyZ2VBcmNG
bGFnKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisJCQlzZXRMYXJnZUFyY0ZsYWcodmFsdWUtPnRv
Qm9vbGVhbihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQXJjQ29u
c3RhbnRzOjpTd2VlcEZsYWc6CiAJCXsKLQkJCXNldFN3ZWVwRmxhZyh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOworCQkJc2V0U3dlZXBGbGFnKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOwogCQkJcmV0
dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkBAIC0yNDgsNyArMjQ4LDcgQEAgYm9vbCBTVkdQYXRoU2Vn
QXJjQWJzOjpzd2VlcEZsYWcoKSBjb25zdAogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ0Fy
Y1JlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKlNWR1BhdGhTZWdBcmNSZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtMjcxLDM4ICsyNzEsMzgg
QEAgVmFsdWUgU1ZHUGF0aFNlZ0FyY1JlbDo6Z2V0VmFsdWVQcm9wZXJ0eQogCXJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnQXJjUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQg
U1ZHUGF0aFNlZ0FyY1JlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2Fz
ZSBTVkdQYXRoU2VnQXJjQ29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVy
KGV4ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJ
fQogCQljYXNlIFNWR1BhdGhTZWdBcmNDb25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUu
dG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0
dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6UjE6CiAJCXsKLQkJCXNl
dFIxKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFIxKHZhbHVlLT50b051bWJlcihleGVj
KSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQXJjQ29uc3RhbnRzOjpSMjoK
IAkJewotCQkJc2V0UjIodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0UjIodmFsdWUtPnRv
TnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdBcmNDb25z
dGFudHM6OkxhcmdlQXJjRmxhZzoKIAkJewotCQkJc2V0TGFyZ2VBcmNGbGFnKHZhbHVlLnRvQm9v
bGVhbihleGVjKSk7CisJCQlzZXRMYXJnZUFyY0ZsYWcodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7
CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQXJjQ29uc3RhbnRzOjpTd2VlcEZs
YWc6CiAJCXsKLQkJCXNldFN3ZWVwRmxhZyh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworCQkJc2V0
U3dlZXBGbGFnKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRl
ZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0FyYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnQXJjLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2Vn
QXJjLmgKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnQXJjLmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnQXJjLmgJOCBBdWcgMjAwNSAxODowMjo1
NCAtMDAwMApAQCAtNjksOCArNjksOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlL
RE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0
cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwog
CX07CiAKIAljbGFzcyBTVkdQYXRoU2VnQXJjUmVsSW1wbDsKQEAgLTExNSw4ICsxMTUsOCBAQCBu
YW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJ
dm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6
OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpYy5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmNwcAk5
IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWMuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTQgLTAwMDAKQEAgLTM4LDcgKzM4LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0
b0N1YmljQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC02
MSwzOCArNjEsMzggQEAgVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6Z2V0VmFsdQog
CXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJz
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQp
CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29u
c3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgo
dmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNDb25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIo
ZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9
CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WDE6CiAJCXsKLQkJCXNl
dFgxKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgxKHZhbHVlLT50b051bWJlcihleGVj
KSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29uc3Rh
bnRzOjpZMToKIAkJewotCQkJc2V0WTEodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WTEo
dmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNDb25zdGFudHM6OlgyOgogCQl7Ci0JCQlzZXRYMih2YWx1ZS50b051bWJl
cihleGVjKSk7CisJCQlzZXRYMih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwog
CQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WTI6CiAJCXsKLQkJ
CXNldFkyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkyKHZhbHVlLT50b051bWJlcihl
eGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTIzMiw3ICsyMzIsNyBAQCBm
bG9hdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjp5MigpIGNvCiBAZW5kCiAqLwogCi1WYWx1
ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRj
aCh0b2tlbikKIAl7CkBAIC0yNTUsMzggKzI1NSwzOCBAQCBWYWx1ZSBTVkdQYXRoU2VnQ3VydmV0
b0N1YmljUmVsOjpnZXRWYWx1CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnQ3VydmV0
b0N1YmljUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBW
YWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNDb25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1i
ZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwog
CQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WToKIAkJewotCQkJ
c2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVj
KSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29uc3Rh
bnRzOjpYMToKIAkJewotCQkJc2V0WDEodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WDEo
dmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNDb25zdGFudHM6OlkxOgogCQl7Ci0JCQlzZXRZMSh2YWx1ZS50b051bWJl
cihleGVjKSk7CisJCQlzZXRZMSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwog
CQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WDI6CiAJCXsKLQkJ
CXNldFgyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgyKHZhbHVlLT50b051bWJlcihl
eGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29u
c3RhbnRzOjpZMjoKIAkJewotCQkJc2V0WTIodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0
WTIodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpJ
bmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Yy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpYy5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpYy5oCTggQXVnIDIwMDUgMTg6MDI6NTQgLTAwMDAKQEAgLTY2LDggKzY2
LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZh
bHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJY2xhc3MgU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1JlbEltcGw7CkBAIC0xMDksOCArMTA5LDggQEAgbmFtZXNwYWNlIEtT
VkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZh
bHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAq
dmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGguY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9T
VkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjU0IC0wMDAw
CkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFs
dWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNTbW9vdGhBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUsMjggKzU1LDI4IEBAIFZhbHVlIFNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OmcKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6cHV0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lk
IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0
b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aENvbnN0YW50czo6
WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50
b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0
b0N1YmljU21vb3RoQ29uc3RhbnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4
ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQog
CQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhDb25zdGFudHM6OlgyOgogCQl7Ci0J
CQlzZXRYMih2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYMih2YWx1ZS0+dG9OdW1iZXIo
ZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Nt
b290aENvbnN0YW50czo6WTI6CiAJCXsKLQkJCXNldFkyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsK
KwkJCXNldFkyKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVm
YXVsdDoKQEAgLTE4Niw3ICsxODYsNyBAQCBmbG9hdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoQWJzOjp5CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3Ro
UmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC0y
MDUsMjggKzIwNSwyOCBAQCBWYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpn
CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3Ro
UmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUlt
cCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGhDb25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1i
ZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwog
CQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aENvbnN0YW50czo6WToKIAkJ
ewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJl
cihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
U21vb3RoQ29uc3RhbnRzOjpYMjoKIAkJewotCQkJc2V0WDIodmFsdWUudG9OdW1iZXIoZXhlYykp
OworCQkJc2V0WDIodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlj
YXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhDb25zdGFudHM6OlkyOgogCQl7Ci0JCQlz
ZXRZMih2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZMih2YWx1ZS0+dG9OdW1iZXIoZXhl
YykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoLmgKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
U21vb3RoLmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgJOCBBdWcgMjAwNSAxODowMjo1NCAtMDAwMApAQCAt
NjAsOCArNjAsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAljbGFz
cyBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsSW1wbDsKQEAgLTk3LDggKzk3LDggQEAg
bmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0J
CXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2
b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pT
OjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9t
L1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWMuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTQgLTAw
MDAKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1W
YWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTU1LDI4ICs1NSwyOCBAQCBWYWx1ZSBTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6Z2V0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12
b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0b2tlbikK
IAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNDb25zdGFudHM6Olg6CiAJCXsK
LQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIo
ZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNDb25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJ
c2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNDb25zdGFudHM6OlgxOgogCQl7Ci0JCQlzZXRYMSh2YWx1
ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYMSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJ
cmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNDb25zdGFudHM6
OlkxOgogCQl7Ci0JCQlzZXRZMSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZMSh2YWx1
ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkBAIC0xODYs
NyArMTg2LDcgQEAgZmxvYXQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OnkxKAogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1JlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRv
a2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC0yMDUsMjggKzIwNSwyOCBAQCBW
YWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6Z2V0CiAJcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGlu
dCkKK3ZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3
aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNDb25zdGFu
dHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1
ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNDb25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIo
ZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9
CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNDb25zdGFudHM6OlgxOgogCQl7Ci0J
CQlzZXRYMSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYMSh2YWx1ZS0+dG9OdW1iZXIo
ZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNDb25zdGFudHM6OlkxOgogCQl7Ci0JCQlzZXRZMSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJ
CQlzZXRZMSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1
bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgKLS0tIGtzdmcyL2RvbS9T
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaAk4IEF1ZyAyMDA1IDE4
OjAyOjU0IC0wMDAwCkBAIC02MCw4ICs2MCw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VU
CiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGlu
dCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cik7CiAJfTsKIAogCWNsYXNzIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsSW1wbDsKQEAg
LTk3LDggKzk3LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNTbW9vdGguY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGgu
Y3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguY3BwCTkg
SnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNTbW9vdGguY3BwCTggQXVnIDIwMDUgMTg6MDI6NTUgLTAwMDAKQEAgLTM0LDcg
KzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
U21vb3RoQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTQ5LDE4ICs0OSwxOCBAQCBWYWx1ZSBTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12
b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3Zv
aWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3
aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhD
b25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0
WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhDb25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFs
dWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJ
cmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkBAIC0xMzksNyArMTM5LDcgQEAgZmxvYXQgU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYgogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Nt
b290aFJlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAog
ewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC0xNTQsMTggKzE1NCwxOCBAQCBWYWx1ZSBTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12
b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3Zv
aWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3
aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhD
b25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0
WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhDb25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFs
dWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJ
cmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNTbW9vdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljU21vb3RoLmgKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY1Ntb290aC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguaAk4IEF1ZyAyMDA1IDE4OjAyOjU1
IC0wMDAwCkBAIC01NCw4ICs1NCw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtE
T01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRy
KTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJ
fTsKIAogCWNsYXNzIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsSW1wbDsKQEAg
LTg1LDggKzg1LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhT
ZWdMaW5ldG8uY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0by5jcHAJOSBKdWwgMjAw
NSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvLmNwcAk4
IEF1ZyAyMDA1IDE4OjAyOjU1IC0wMDAwCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhT
ZWdMaW5ldG9BYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNDksMTggKzQ5LDE4IEBAIFZhbHVlIFNWR1Bh
dGhTZWdMaW5ldG9BYnM6OmdldFZhbHVlUHJvcGUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LXZvaWQgU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdM
aW5ldG9BYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZh
bHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0
aFNlZ0xpbmV0b0NvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVj
KSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJ
Y2FzZSBTVkdQYXRoU2VnTGluZXRvQ29uc3RhbnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRv
TnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVy
bjsKIAkJfQogCQlkZWZhdWx0OgpAQCAtMTQwLDcgKzE0MCw3IEBAIGZsb2F0IFNWR1BhdGhTZWdM
aW5ldG9BYnM6OnkoKSBjb25zdAogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b1Jl
bDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1BhdGhTZWdMaW5ldG9SZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtMTU1LDE4ICsxNTUsMTgg
QEAgVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6Z2V0VmFsdWVQcm9wZQogCXJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTGluZXRvUmVsOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3Zv
aWQgU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsK
IAkJY2FzZSBTVkdQYXRoU2VnTGluZXRvQ29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVl
LnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJl
dHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdMaW5ldG9Db25zdGFudHM6Olk6CiAJCXsKLQkJ
CXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhl
YykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0
aFNlZ0xpbmV0by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvLmgKLS0tIGtzdmcyL2RvbS9T
VkdQYXRoU2VnTGluZXRvLmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdQYXRoU2VnTGluZXRvLmgJOCBBdWcgMjAwNSAxODowMjo1NSAtMDAwMApAQCAtNTQs
OCArNTQsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAljbGFzcyBT
VkdQYXRoU2VnTGluZXRvUmVsSW1wbDsKQEAgLTg1LDggKzg1LDggQEAgbmFtZXNwYWNlIEtTVkcK
IAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVl
ICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFs
dWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5l
dG9Ib3Jpem9udGFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWwuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuY3Bw
CTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xp
bmV0b0hvcml6b250YWwuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTUgLTAwMDAKQEAgLTMzLDcgKzMz
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbEFiczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRv
a2VuKQogCXsKQEAgLTQ2LDEzICs0NiwxMyBAQCBWYWx1ZSBTVkdQYXRoU2VnTGluZXRvSG9yaXpv
bnRhbEFiczo6Z2V0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdM
aW5ldG9Ib3Jpem9udGFsQWJzOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWxBYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxDb25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUu
dG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0
dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkBAIC0xMTYsNyArMTE2LDcgQEAgZmxvYXQgU1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxBYnM6OngoKQogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ0xp
bmV0b0hvcml6b250YWxSZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tl
bikKIAl7CkBAIC0xMjksMTMgKzEyOSwxMyBAQCBWYWx1ZSBTVkdQYXRoU2VnTGluZXRvSG9yaXpv
bnRhbFJlbDo6Z2V0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdM
aW5ldG9Ib3Jpem9udGFsUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWxSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxDb25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUu
dG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0
dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFs
LmgKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oCTkgSnVsIDIwMDUg
MDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWwuaAk4IEF1ZyAyMDA1IDE4OjAyOjU1IC0wMDAwCkBAIC01MSw4ICs1MSw4IEBAIG5hbWVzcGFj
ZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pT
OjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJ
bXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIAogCWNsYXNzIFNWR1BhdGhTZWdMaW5ldG9Ib3Jp
em9udGFsUmVsSW1wbDsKQEAgLTc5LDggKzc5LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9H
RVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwg
aW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBh
dHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuY3BwCi0t
LSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmNwcAk5IEp1bCAyMDA1IDA2OjU0
OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5jcHAJ
OCBBdWcgMjAwNSAxODowMjo1NSAtMDAwMApAQCAtMzMsNyArMzMsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAg
KlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC00NiwxMyArNDYs
MTMgQEAgVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpnZXRWYQogCXJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1
ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OnB1dFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewog
CXN3aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQ29uc3Rh
bnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFs
dWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpAQCAtMTE3
LDcgKzExNyw3IEBAIGZsb2F0IFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6eSgpIGMKIEBl
bmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbFJlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2Vu
KSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC0xMzAsMTMgKzEzMCwxMyBAQCBWYWx1
ZSBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6OmdldFZhCiAJcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi12b2lkIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2
b2lkIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRv
a2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxDb25zdGFudHM6Olk6CiAJ
CXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1i
ZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20v
U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsLmgKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaAk5
IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5l
dG9WZXJ0aWNhbC5oCTggQXVnIDIwMDUgMTg6MDI6NTUgLTAwMDAKQEAgLTUxLDggKzUxLDggQEAg
bmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0J
CXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2
b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pT
OjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJY2xhc3MgU1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsUmVsSW1wbDsKQEAgLTc5LDggKzc5LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJ
S0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2
YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
UGF0aFNlZ0xpc3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpc3QuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xp
c3QuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0
aFNlZ0xpc3QuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTUgLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtET007CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHUGF0
aFNlZ0xpc3QiLCBTVkdQYXRoU2VnTGlzdFByb3RvLCBTVkdQYXRoU2VnTGlzdFByb3RvRnVuYykK
IAotVmFsdWUgU1ZHUGF0aFNlZ0xpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpc3Q6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9T
QUZFCiAKQEAgLTY2LDcgKzY2LDcgQEAgVmFsdWUgU1ZHUGF0aFNlZ0xpc3Q6OmdldFZhbHVlUHJv
cGVydHkoRQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpc3RQ
cm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RP
TV9DSEVDS19USElTKFNWR1BhdGhTZWdMaXN0KQogCUtET01fRU5URVJfU0FGRQpAQCAtODUsMjQg
Kzg1LDI0IEBAIFZhbHVlIFNWR1BhdGhTZWdMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWMKIAkJfQog
CQljYXNlIFNWR1BhdGhTZWdMaXN0Q29uc3RhbnRzOjpHZXRJdGVtOgogCQl7Ci0JCQl1bnNpZ25l
ZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcg
aW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBnZXRTVkdQYXRoU2Vn
KGV4ZWMsIG9iai5nZXRJdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnTGlzdENv
bnN0YW50czo6SW5zZXJ0SXRlbUJlZm9yZToKIAkJewogCQkJU1ZHUGF0aFNlZyBuZXdJdGVtID0g
S0RPTTo6ZWNtYV9jYXN0PFNWR1BhdGhTZWc+KGV4ZWMsIGFyZ3NbMF0sICZ0b1NWR1BhdGhTZWcp
OwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50MzIoZXhlYyk7CisJCQl1
bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4g
Z2V0U1ZHUGF0aFNlZyhleGVjLCBvYmouaW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRleCkp
OwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0xpc3RDb25zdGFudHM6OlJlcGxhY2VJdGVtOgogCQl7
CiAJCQlTVkdQYXRoU2VnIG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZHUGF0aFNlZz4oZXhl
YywgYXJnc1swXSwgJnRvU1ZHUGF0aFNlZyk7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJn
c1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLT50
b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBnZXRTVkdQYXRoU2VnKGV4ZWMsIG9iai5yZXBsYWNl
SXRlbShuZXdJdGVtLCBpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0xpc3RDb25zdGFu
dHM6OlJlbW92ZUl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRv
VUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMy
KGV4ZWMpOwogCQkJcmV0dXJuIGdldFNWR1BhdGhTZWcoZXhlYywgb2JqLnJlbW92ZUl0ZW0oaW5k
ZXgpKTsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdMaXN0Q29uc3RhbnRzOjpBcHBlbmRJdGVtOgpJ
bmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdMaXN0LmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlzdC5o
Ci0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpc3QuaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaXN0LmgJOCBBdWcgMjAwNSAxODowMjo1NSAt
MDAwMApAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNj
cmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdNb3ZldG8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9T
VkdQYXRoU2VnTW92ZXRvLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdNb3ZldG8uY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGF0
aFNlZ01vdmV0by5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdQYXRoU2VnTW92ZXRvLmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjU2IC0wMDAwCkBAIC0zNCw3
ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0
aFNlZ01vdmV0b0Ficzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdNb3ZldG9BYnM6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNDks
MTggKzQ5LDE4IEBAIFZhbHVlIFNWR1BhdGhTZWdNb3ZldG9BYnM6OmdldFZhbHVlUHJvcGUKIAly
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ01vdmV0b0Ficzo6cHV0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVl
LCBpbnQpCit2b2lkIFNWR1BhdGhTZWdNb3ZldG9BYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0
b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ01vdmV0b0NvbnN0YW50czo6WDoKIAkJewotCQkJ
c2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVj
KSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnTW92ZXRvQ29uc3RhbnRzOjpZ
OgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRv
TnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpAQCAtMTM5LDcgKzEz
OSw3IEBAIGZsb2F0IFNWR1BhdGhTZWdNb3ZldG9BYnM6OnkoKSBjb25zdAogQGVuZAogKi8KIAot
VmFsdWUgU1ZHUGF0aFNlZ01vdmV0b1JlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdNb3ZldG9SZWw6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4p
CiAJewpAQCAtMTU0LDE4ICsxNTQsMTggQEAgVmFsdWUgU1ZHUGF0aFNlZ01vdmV0b1JlbDo6Z2V0
VmFsdWVQcm9wZQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQYXRoU2VnTW92
ZXRvUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ01vdmV0b1JlbDo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQp
CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnTW92ZXRvQ29uc3RhbnRz
OjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgodmFsdWUt
PnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdNb3Zl
dG9Db25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJ
c2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6
CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ01vdmV0by5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnTW92ZXRvLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2Vn
TW92ZXRvLmgKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnTW92ZXRvLmgJOSBKdWwgMjAwNSAwNjo1
NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnTW92ZXRvLmgJOCBBdWcgMjAw
NSAxODowMjo1NiAtMDAwMApAQCAtNTQsOCArNTQsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9N
X0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVl
LCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50
IGF0dHIpOwogCX07CiAKIAljbGFzcyBTVkdQYXRoU2VnTW92ZXRvUmVsSW1wbDsKQEAgLTg1LDgg
Kzg1LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDog
a3N2ZzIvZG9tL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0dGVybkVsZW1lbnQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0dGVybkVs
ZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGF0dGVybkVsZW1lbnQuY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0dGVybkVsZW1lbnQuY3BwCTgg
QXVnIDIwMDUgMTg6MDI6NTYgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXR0ZXJuRWxlbWVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXR0
ZXJuRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAkKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXR0ZXJu
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcy
L2RvbS9TVkdQYXR0ZXJuRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0dGVybkVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NW
R1BhdHRlcm5FbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdQYXR0ZXJuRWxlbWVudC5oCTggQXVnIDIwMDUgMTg6MDI6NTYgLTAwMDAKQEAgLTc0
LDcgKzc0LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVU
CiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3Zn
Mi9kb20vU1ZHUG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdQb2ludC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQb2ludC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQb2lu
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQb2lu
dC5jcHAJOCBBdWcgMjAwNSAxODowMjo1NiAtMDAwMApAQCAtNDksNyArNDksNyBAQCB1c2luZyBu
YW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdQb2ludCIsIFNW
R1BvaW50UHJvdG8sIFNWR1BvaW50UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdQb2ludDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpT
VkdQb2ludDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjcsMTcgKzY3LDE3IEBAIFZhbHVlIFNWR1Bv
aW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LXZvaWQgU1ZHUG9pbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQb2ludDo6cHV0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7
CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BvaW50
Q29uc3RhbnRzOjpYOgotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZh
bHVlLT50b051bWJlcihleGVjKSk7CiAJCQlicmVhazsKIAkJY2FzZSBTVkdQb2ludENvbnN0YW50
czo6WToKLQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9O
dW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlrZFdhcm5pbmcoKSA8PCAi
VW5oYW5kbGVkIHRva2VuIGluICIgPDwga19mdW5jaW5mbyA8PCAiIDogIiA8PCB0b2tlbiA8PCBl
bmRsOwpAQCAtODYsNyArODYsNyBAQCB2b2lkIFNWR1BvaW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0CiAJS0RPTV9MRUFWRV9TQUZFKEtET006OkRPTUV4Y2VwdGlvbikKIH0KIAotVmFsdWUg
U1ZHUG9pbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHUG9pbnRQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJ
S0RPTV9DSEVDS19USElTKFNWR1BvaW50KQogCUtET01fRU5URVJfU0FGRQpJbmRleDoga3N2ZzIv
ZG9tL1NWR1BvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR1BvaW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2RvbS9TVkdQb2ludC5oCi0tLSBrc3ZnMi9kb20vU1ZHUG9pbnQuaAk5IEp1
bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BvaW50LmgJOCBBdWcg
MjAwNSAxODowMjo1NiAtMDAwMApAQCAtNjIsOCArNjIsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlL
RE9NX1BVVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2
YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUs
IGludCBhdHRyKTsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChTVkdQb2ludCkKSW5kZXg6IGtz
dmcyL2RvbS9TVkdQb2ludExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQb2ludExpc3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmNwcAotLS0ga3N2
ZzIvZG9tL1NWR1BvaW50TGlzdC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdQb2ludExpc3QuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTYgLTAwMDAKQEAg
LTU0LDcgKzU0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BS
T1RPVFlQRSgiU1ZHUG9pbnRMaXN0IiwgU1ZHUG9pbnRMaXN0UHJvdG8sIFNWR1BvaW50TGlzdFBy
b3RvRnVuYykKIAotVmFsdWUgU1ZHUG9pbnRMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BvaW50TGlzdDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VO
VEVSX1NBRkUKIApAQCAtNzAsNyArNzAsNyBAQCBWYWx1ZSBTVkdQb2ludExpc3Q6OmdldFZhbHVl
UHJvcGVydHkoRXhlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdQb2ludExp
c3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHUG9pbnRMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtE
T01fQ0hFQ0tfVEhJUyhTVkdQb2ludExpc3QpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC04OSwyNCAr
ODksMjQgQEAgVmFsdWUgU1ZHUG9pbnRMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdAogCQl9CiAJ
CWNhc2UgU1ZHUG9pbnRMaXN0Q29uc3RhbnRzOjpHZXRJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBs
b25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5k
ZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hl
PFNWR1BvaW50PihleGVjLCBvYmouZ2V0SXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHUG9p
bnRMaXN0Q29uc3RhbnRzOjpJbnNlcnRJdGVtQmVmb3JlOgogCQl7CiAJCQlTVkdQb2ludCBuZXdJ
dGVtID0gS0RPTTo6ZWNtYV9jYXN0PFNWR1BvaW50PihleGVjLCBhcmdzWzBdLCAmdG9TVkdQb2lu
dCk7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJ
CXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVy
biBLRE9NOjpzYWZlX2NhY2hlPFNWR1BvaW50PihleGVjLCBvYmouaW5zZXJ0SXRlbUJlZm9yZShu
ZXdJdGVtLCBpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHUG9pbnRMaXN0Q29uc3RhbnRzOjpSZXBs
YWNlSXRlbToKIAkJewogCQkJU1ZHUG9pbnQgbmV3SXRlbSA9IEtET006OmVjbWFfY2FzdDxTVkdQ
b2ludD4oZXhlYywgYXJnc1swXSwgJnRvU1ZHUG9pbnQpOwotCQkJdW5zaWduZWQgbG9uZyBpbmRl
eCA9IGFyZ3NbMV0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJn
c1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQb2lu
dD4oZXhlYywgb2JqLnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJY2FzZSBT
VkdQb2ludExpc3RDb25zdGFudHM6OlJlbW92ZUl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcg
aW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9
IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZH
UG9pbnQ+KGV4ZWMsIG9iai5yZW1vdmVJdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdQb2lu
dExpc3RDb25zdGFudHM6OkFwcGVuZEl0ZW06CkluZGV4OiBrc3ZnMi9kb20vU1ZHUG9pbnRMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R1BvaW50TGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdQb2ludExpc3QuaAk5IEp1
bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BvaW50TGlzdC5oCTgg
QXVnIDIwMDUgMTg6MDI6NTYgLTAwMDAKQEAgLTYyLDcgKzYyLDcgQEAgbmFtZXNwYWNlIEtTVkcK
IAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdQb2x5Z29uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BvbHlnb25FbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BvbHlnb25FbGVtZW50LmNw
cAotLS0ga3N2ZzIvZG9tL1NWR1BvbHlnb25FbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BvbHlnb25FbGVtZW50LmNwcAk4IEF1ZyAyMDA1
IDE4OjAyOjU2IC0wMDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBA
ZW5kCiAqLwogCi1LSlM6OlZhbHVlIFNWR1BvbHlnb25FbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitLSlM6OlZhbHVlSW1wICpT
VkdQb2x5Z29uRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHUG9seWdvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9kb20vU1ZHUG9seWdvbkVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BvbHlnb25FbGVtZW50LmgKLS0tIGtz
dmcyL2RvbS9TVkdQb2x5Z29uRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHUG9seWdvbkVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE4OjAyOjU2IC0w
MDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01f
Rk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQ
b2x5bGluZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUG9seWxpbmVFbGVtZW50LmNwcAk5
IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxl
bWVudC5jcHAJOCBBdWcgMjAwNSAxODowMjo1NiAtMDAwMApAQCAtMzYsNyArMzYsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BvbHlsaW5lRWxlbWVudDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpTVkdQb2x5bGluZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdQb2x5bGluZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHUG9seWxpbmVFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQb2x5bGluZUVsZW1lbnQuaAot
LS0ga3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAw
MDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUG9seWxpbmVFbGVtZW50LmgJOCBBdWcgMjAwNSAxODow
Mjo1NiAtMDAwMApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAog
CQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUHJlc2VydmVB
c3BlY3RSYXRpby5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1By
ZXNlcnZlQXNwZWN0UmF0aW8uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJOCBBdWcgMjAwNSAxODowMjo1NyAt
MDAwMApAQCAtNDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAK
LVZhbHVlIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUHJlc2VydmVBc3BlY3RSYXRp
bzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsK
IAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTgsMTcgKzU4LDE3IEBAIFZhbHVlIFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW86OmdldFZhbHVlUHIKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQg
U1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW86OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZh
bHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKHRva2Vu
KQogCXsKIAkJY2FzZSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvQ29uc3RhbnRzOjpBbGlnbjoKLQkJ
CXNldEFsaWduKHZhbHVlLnRvVUludDMyKGV4ZWMpKTsKKwkJCXNldEFsaWduKHZhbHVlLT50b1VJ
bnQzMihleGVjKSk7CiAJCQlicmVhazsKIAkJY2FzZSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvQ29u
c3RhbnRzOjpNZWV0T3JTbGljZToKLQkJCXNldE1lZXRPclNsaWNlKHZhbHVlLnRvVUludDMyKGV4
ZWMpKTsKKwkJCXNldE1lZXRPclNsaWNlKHZhbHVlLT50b1VJbnQzMihleGVjKSk7CiAJCQlicmVh
azsKIAkJZGVmYXVsdDoKIAkJCWtkV2FybmluZygpIDw8ICJVbmhhbmRsZWQgdG9rZW4gaW4gIiA8
PCBrX2Z1bmNpbmZvIDw8ICIgOiAiIDw8IHRva2VuIDw8IGVuZGw7CkluZGV4OiBrc3ZnMi9kb20v
U1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmgKLS0tIGtzdmcyL2RvbS9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJOSBKdWwgMjAw
NSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
LmgJOCBBdWcgMjAwNSAxODowMjo1NyAtMDAwMApAQCAtNTcsOCArNTcsOCBAQCBuYW1lc3BhY2Ug
S1NWRwogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0J
CXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2
b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pT
OjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9t
L1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdSYWRp
YWxHcmFkaWVudEVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUmFkaWFsR3JhZGllbnRFbGVt
ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxODowMjo1NyAtMDAwMApAQCAtNDQs
NyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9F
TlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2RvbS9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9t
L1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgJOCBBdWcgMjAwNSAxODow
Mjo1NyAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAog
CQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUmVjdC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdSZWN0LmNwcAotLS0ga3N2
ZzIvZG9tL1NWR1JlY3QuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHUmVjdC5jcHAJOCBBdWcgMjAwNSAxODowMjo1NyAtMDAwMApAQCAtNDQsNyArNDQs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1JlY3Q6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjYsNyArNjYsNyBAQCBWYWx1ZSBTVkdS
ZWN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci12b2lkIFNWR1JlY3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdSZWN0OjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsK
IAlLRE9NX0VOVEVSX1NBRkUKIAkKQEAgLTc0LDIyICs3NCwyMiBAQCB2b2lkIFNWR1JlY3Q6OnB1
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlCiAJewogCQljYXNlIFNWR1JlY3RDb25zdGFudHM6Olg6
CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9O
dW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdSZWN0Q29uc3RhbnRzOjpZ
OgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRv
TnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgU1ZHUmVjdENvbnN0YW50czo6
V2lkdGg6CiAJCXsKLQkJCXNldFdpZHRoKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFdp
ZHRoKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlicmVhazsKIAkJfQogCQljYXNlIFNWR1Jl
Y3RDb25zdGFudHM6OkhlaWdodDoKIAkJewotCQkJc2V0SGVpZ2h0KHZhbHVlLnRvTnVtYmVyKGV4
ZWMpKTsKKwkJCXNldEhlaWdodCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJ
CX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdSZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1JlY3QuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1JlY3QuaAotLS0g
a3N2ZzIvZG9tL1NWR1JlY3QuaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR1JlY3QuaAk4IEF1ZyAyMDA1IDE4OjAyOjU3IC0wMDAwCkBAIC02NSw4ICs2NSw4
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fUFVUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAlLRE9NX0RFRklORV9D
QVNUKFNWR1JlY3QpCkluZGV4OiBrc3ZnMi9kb20vU1ZHUmVjdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdSZWN0RWxlbWVu
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdSZWN0RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdSZWN0RWxlbWVudC5jcHAJOSBK
dWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdSZWN0RWxlbWVudC5j
cHAJOCBBdWcgMjAwNSAxODowMjo1NyAtMDAwMApAQCAtNTAsNyArNTAsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1JlY3RFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1Jl
Y3RFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUmVjdEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHUmVjdEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR1JlY3RFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdSZWN0RWxlbWVu
dC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUmVjdEVs
ZW1lbnQuaAk4IEF1ZyAyMDA1IDE4OjAyOjU3IC0wMDAwCkBAIC03MCw3ICs3MCw3IEBAIG5hbWVz
cGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1NWR0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdTVkdFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR1NWR0VsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHU1ZHRWxl
bWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdT
VkdFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjU4IC0wMDAwCkBAIC05MSw3ICs5MSw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR1NW
R0VsZW1lbnQiLCBTVkdTVkdFbGVtZW50UHJvdG8sIFNWR1NWR0VsZW1lbnRQcm90b0Z1bmMpCiAK
LVZhbHVlIFNWR1NWR0VsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHU1ZHRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IAkKQEAgLTEzNCw3ICsxMzQsNyBAQCBWYWx1ZSBTVkdTVkdFbGVtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1NWR0VsZW1lbnQ6OnB1
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2
YWx1ZSwgaW50KQordm9pZCBTVkdTVkdFbGVtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGUKIAkJfQogCQljYXNlIFNWR1NWR0VsZW1lbnRDb25zdGFudHM6OkN1cnJlbnRT
Y2FsZToKIAkJewotCQkJc2V0Q3VycmVudFNjYWxlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJ
CXNldEN1cnJlbnRTY2FsZSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9
CiAJCWRlZmF1bHQ6CkBAIC0xNjIsOSArMTYyLDkgQEAgdm9pZCBTVkdTVkdFbGVtZW50OjpwdXRW
YWx1ZVByb3BlcnR5KEV4ZQogCUtET01fTEVBVkVfU0FGRShTVkdFeGNlcHRpb24pCiB9CiAKLVZh
bHVlIFNWR1NWR0VsZW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3Qg
JnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHU1ZHRWxlbWVudFByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKIHsKLQlTVkdTVkdFbGVtZW50IG9iaihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0PEtK
Uzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7CisJU1ZHU1ZHRWxlbWVudCBvYmooY2Fz
dChleGVjLCB0aGlzT2JqKSk7CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0Y2goaWQpCkBAIC0x
OTAsMTMgKzE5MCwxMyBAQCBWYWx1ZSBTVkdTVkdFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNT
CiAJCX0KIAkJY2FzZSBTVkdTVkdFbGVtZW50Q29uc3RhbnRzOjpTdXNwZW5kUmVkcmF3OgogCQl7
Ci0JCQl1bnNpZ25lZCBsb25nIG1heF93YWl0X21pbGxpc2Vjb25kcyA9IGFyZ3NbMF0udG9VSW50
MzIoZXhlYyk7OworCQkJdW5zaWduZWQgbG9uZyBtYXhfd2FpdF9taWxsaXNlY29uZHMgPSBhcmdz
WzBdLT50b1VJbnQzMihleGVjKTs7CiAJCQlvYmouc3VzcGVuZFJlZHJhdyhtYXhfd2FpdF9taWxs
aXNlY29uZHMpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWNhc2UgU1ZHU1ZHRWxl
bWVudENvbnN0YW50czo6VW5zdXNwZW5kUmVkcmF3OgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIHN1
c3BlbmRfaGFuZGxlX2lkID0gYXJnc1swXS50b1VJbnQzMihleGVjKTs7CisJCQl1bnNpZ25lZCBs
b25nIHN1c3BlbmRfaGFuZGxlX2lkID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7OwogCQkJb2Jq
LnVuc3VzcGVuZFJlZHJhdyhzdXNwZW5kX2hhbmRsZV9pZCk7CiAJCQlyZXR1cm4gVW5kZWZpbmVk
KCk7CiAJCX0KQEAgLTIyOCw3ICsyMjgsNyBAQCBWYWx1ZSBTVkdTVkdFbGVtZW50UHJvdG9GdW5j
OjpjYWxsKEV4ZWNTCiAJCX0KIAkJY2FzZSBTVkdTVkdFbGVtZW50Q29uc3RhbnRzOjpTZXRDdXJy
ZW50VGltZToKIAkJewotCQkJb2JqLnNldEN1cnJlbnRUaW1lKGFyZ3NbMF0udG9OdW1iZXIoZXhl
YykpOworCQkJb2JqLnNldEN1cnJlbnRUaW1lKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKTsKIAkJ
CXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQogCQljYXNlIFNWR1NWR0VsZW1lbnRDb25zdGFudHM6
OkdldEludGVyc2VjdGlvbkxpc3Q6CkluZGV4OiBrc3ZnMi9kb20vU1ZHU1ZHRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTVkdF
bGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdTVkdFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdTVkdFbGVtZW50LmgJOSBKdWwg
MjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTVkdFbGVtZW50LmgJOCBB
dWcgMjAwNSAxODowMjo1OCAtMDAwMApAQCAtMTI5LDggKzEyOSw4IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1
ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZh
bHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTY3JpcHRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9k
b20vU1ZHU2NyaXB0RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTY3JpcHRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NW
R1NjcmlwdEVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHU2NyaXB0RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxODowMjo1OCAtMDAwMApAQCAt
MzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNW
R1NjcmlwdEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHU2NyaXB0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAkK
QEAgLTU4LDcgKzU4LDcgQEAgVmFsdWUgU1ZHU2NyaXB0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0
eQogLy8gVGhlIHFkb20gd2F5Li4uCiAjZGVmaW5lIGltcGwgKHN0YXRpY19jYXN0PFNWR1Njcmlw
dEVsZW1lbnRJbXBsICo+KEV2ZW50VGFyZ2V0OjpkKSkKIAotdm9pZCBTVkdTY3JpcHRFbGVtZW50
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6cHV0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RP
TV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTY3JpcHRFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1NjcmlwdEVs
ZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR1NjcmlwdEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1NjcmlwdEVsZW1lbnQuaAk5
IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1NjcmlwdEVsZW1l
bnQuaAk4IEF1ZyAyMDA1IDE4OjAyOjU4IC0wMDAwCkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFj
ZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pT
OjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJ
bXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTZXRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHU2V0RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTZXRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1Nl
dEVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHU2V0RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxODowMjo1OCAtMDAwMApAQCAtMzcsNyArMzcs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1NldEVsZW1l
bnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqU1ZHU2V0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9t
L1NWR1NldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHU2V0RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU2V0RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZH
U2V0RWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHU2V0RWxlbWVudC5oCTggQXVnIDIwMDUgMTg6MDI6NTggLTAwMDAKQEAgLTQ5LDcgKzQ5LDcg
QEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pT
OjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZH
U3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdTdG9wRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTdG9wRWxlbWVudC5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdTdG9wRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdTdG9wRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxODowMjo1OCAtMDAwMApAQCAt
MzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNW
R1N0b3BFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAorVmFsdWVJbXAgKlNWR1N0b3BFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4
OiBrc3ZnMi9kb20vU1ZHU3RvcEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHU3RvcEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1N0b3BFbGVtZW50LmgKLS0t
IGtzdmcyL2RvbS9TVkdTdG9wRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHU3RvcEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE4OjAyOjU4IC0wMDAw
CkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9S
V0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRl
eDoga3N2ZzIvZG9tL1NWR1N0cmluZ0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTdHJpbmdMaXN0LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1N0cmluZ0xpc3QuY3Bw
Ci0tLSBrc3ZnMi9kb20vU1ZHU3RyaW5nTGlzdC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTdHJpbmdMaXN0LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjU4
IC0wMDAwCkBAIC01NCw3ICs1NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lN
UExFTUVOVF9QUk9UT1RZUEUoIlNWR1N0cmluZ0xpc3QiLCBTVkdTdHJpbmdMaXN0UHJvdG8sIFNW
R1N0cmluZ0xpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR1N0cmluZ0xpc3Q6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3Ry
aW5nTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzAsNyArNzAsNyBAQCBWYWx1ZSBTVkdTdHJp
bmdMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1W
YWx1ZSBTVkdTdHJpbmdMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1N0cmluZ0xpc3RQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR1N0cmluZ0xpc3QpCiAJS0RPTV9FTlRF
Ul9TQUZFCkBAIC04OSwyNCArODksMjQgQEAgVmFsdWUgU1ZHU3RyaW5nTGlzdFByb3RvRnVuYzo6
Y2FsbChFeGVjUwogCQl9CiAJCWNhc2UgU1ZHU3RyaW5nTGlzdENvbnN0YW50czo6R2V0SXRlbToK
IAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJ
CQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1
cm4gS0RPTTo6Z2V0RE9NU3RyaW5nKG9iai5nZXRJdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBT
VkdTdHJpbmdMaXN0Q29uc3RhbnRzOjpJbnNlcnRJdGVtQmVmb3JlOgogCQl7CiAJCQlLRE9NOjpE
T01TdHJpbmcgbmV3SXRlbSA9IEtET006OnRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMF0pOwotCQkJ
dW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25l
ZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6
Z2V0RE9NU3RyaW5nKG9iai5pbnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0K
IAkJY2FzZSBTVkdTdHJpbmdMaXN0Q29uc3RhbnRzOjpSZXBsYWNlSXRlbToKIAkJewogCQkJS0RP
TTo6RE9NU3RyaW5nIG5ld0l0ZW0gPSBLRE9NOjp0b0RPTVN0cmluZyhleGVjLCBhcmdzWzBdKTsK
LQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5z
aWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtE
T006OmdldERPTVN0cmluZyhvYmoucmVwbGFjZUl0ZW0obmV3SXRlbSwgaW5kZXgpKTsKIAkJfQog
CQljYXNlIFNWR1N0cmluZ0xpc3RDb25zdGFudHM6OlJlbW92ZUl0ZW06CiAJCXsKLQkJCXVuc2ln
bmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OmdldERP
TVN0cmluZyhvYmoucmVtb3ZlSXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHU3RyaW5nTGlz
dENvbnN0YW50czo6QXBwZW5kSXRlbToKSW5kZXg6IGtzdmcyL2RvbS9TVkdTdHJpbmdMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1N0
cmluZ0xpc3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR1N0cmluZ0xpc3QuaAotLS0ga3N2ZzIvZG9tL1NWR1N0cmluZ0xpc3QuaAk5IEp1
bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1N0cmluZ0xpc3QuaAk4
IEF1ZyAyMDA1IDE4OjAyOjU4IC0wMDAwCkBAIC02Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHU3R5bGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdTdHlsYWJsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTdHlsYWJsZS5jcHAKLS0tIGtzdmcyL2RvbS9T
VkdTdHlsYWJsZS5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdTdHlsYWJsZS5jcHAJOCBBdWcgMjAwNSAxODowMjo1OCAtMDAwMApAQCAtNTEsNyArNTEs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJT
VkdTdHlsYWJsZSIsIFNWR1N0eWxhYmxlUHJvdG8sIFNWR1N0eWxhYmxlUHJvdG9GdW5jKQogCi1W
YWx1ZSBTVkdTdHlsYWJsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdTdHlsYWJsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAt
NjksOSArNjksOSBAQCBWYWx1ZSBTVkdTdHlsYWJsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjCiAJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdTdHlsYWJsZVByb3RvRnVuYzo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1Zh
bHVlSW1wICpTVkdTdHlsYWJsZVByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLQlTVkdTdHlsYWJsZSBvYmooY2Fz
dChleGVjLCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOwor
CVNWR1N0eWxhYmxlIG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlLRE9NX0VOVEVSX1NBRkUK
IAogCXN3aXRjaChpZCkKSW5kZXg6IGtzdmcyL2RvbS9TVkdTdHlsYWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTdHlsYWJsZS5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU3R5
bGFibGUuaAotLS0ga3N2ZzIvZG9tL1NWR1N0eWxhYmxlLmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTdHlsYWJsZS5oCTggQXVnIDIwMDUgMTg6MDI6NTgg
LTAwMDAKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFT
Y3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTdHlsZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9T
VkdTdHlsZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHU3R5bGVFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1N0eWxl
RWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9T
VkdTdHlsZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTggLTAwMDAKQEAgLTQzLDcgKzQz
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdTdHlsZUVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqU1ZHU3R5bGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCQpAQCAtNjUsNyAr
NjUsNyBAQCBWYWx1ZSBTVkdTdHlsZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoCiAJcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1N0eWxlRWxlbWVudDo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2
b2lkIFNWR1N0eWxlRWxlbWVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdTdHlsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHU3R5bGVFbGVtZW50LmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTdHlsZUVsZW1lbnQu
aAotLS0ga3N2ZzIvZG9tL1NWR1N0eWxlRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAw
MDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHU3R5bGVFbGVtZW50LmgJOCBBdWcgMjAwNSAxODowMjo1
OSAtMDAwMApAQCAtNjYsOCArNjYsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlL
RE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0
cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwog
CX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHU3dpdGNoRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1N3aXRjaEVsZW1l
bnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHU3dpdGNoRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdTd2l0Y2hFbGVtZW50LmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1N3aXRjaEVs
ZW1lbnQuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTkgLTAwMDAKQEAgLTM4LDcgKzM4LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdTd2l0Y2hFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1N3aXRjaEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9T
VkdTd2l0Y2hFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR1N3aXRjaEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1N3aXRjaEVsZW1lbnQuaAotLS0ga3N2ZzIv
ZG9tL1NWR1N3aXRjaEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR1N3aXRjaEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE4OjAyOjU5IC0wMDAwCkBA
IC01OCw3ICs1OCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FS
RFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a3N2ZzIvZG9tL1NWR1N5bWJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTeW1ib2xFbGVtZW50LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1N5bWJvbEVsZW1l
bnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHU3ltYm9sRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1
NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTeW1ib2xFbGVtZW50LmNwcAk4IEF1ZyAy
MDA1IDE4OjAyOjU5IC0wMDAwCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZH
OwogQGVuZAogKi8KIAotVmFsdWUgU1ZHU3ltYm9sRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdTeW1ib2xFbGVt
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHU3ltYm9sRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdT
eW1ib2xFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdTeW1ib2xFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdTeW1ib2xFbGVt
ZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTeW1i
b2xFbGVtZW50LmgJOCBBdWcgMjAwNSAxODowMjo1OSAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCBu
YW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZh
bHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdUU3Bh
bkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdUU3BhbkVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVFNwYW5FbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9t
L1NWR1RTcGFuRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdUU3BhbkVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTkgLTAwMDAKQEAg
LTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBT
VkdUU3BhbkVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHVFNwYW5FbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHVFNwYW5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVudC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVFNwYW5FbGVtZW50
LmgKLS0tIGtzdmcyL2RvbS9TVkdUU3BhbkVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVudC5oCTggQXVnIDIwMDUgMTg6MDI6
NTkgLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJ
S0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUZXN0cy5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUZXN0cy5jcHAKLS0tIGtz
dmcyL2RvbS9TVkdUZXN0cy5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdUZXN0cy5jcHAJOCBBdWcgMjAwNSAxODowMjo1OSAtMDAwMApAQCAtNDYsNyAr
NDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBF
KCJTVkdUZXN0cyIsIFNWR1Rlc3RzUHJvdG8sIFNWR1Rlc3RzUHJvdG9GdW5jKQogCi1WYWx1ZSBT
VkdUZXN0czo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKK1ZhbHVlSW1wICpTVkdUZXN0czo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjYsOSArNjYsOSBA
QCBWYWx1ZSBTVkdUZXN0czo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAJcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1WYWx1ZSBTVkdUZXN0c1Byb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdUZXN0
c1Byb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncykKIHsKLQlTVkdUZXN0cyBvYmooY2FzdChleGVjLCBzdGF0aWNfY2FzdDxL
SlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOworCVNWR1Rlc3RzIG9iaihjYXN0KGV4
ZWMsIHRoaXNPYmopKTsKIAlLRE9NX0VOVEVSX1NBRkUKIAogCXN3aXRjaChpZCkKSW5kZXg6IGtz
dmcyL2RvbS9TVkdUZXN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdUZXN0cy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGVzdHMuaAotLS0ga3N2ZzIvZG9tL1NWR1Rlc3RzLmgJ
OSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUZXN0cy5oCTgg
QXVnIDIwMDUgMTg6MDI6NTkgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIEtTVkcK
IAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGV4dENvbnRl
bnRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJOSBK
dWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUZXh0Q29udGVudEVs
ZW1lbnQuY3BwCTggQXVnIDIwMDUgMTg6MDI6NTkgLTAwMDAKQEAgLTYyLDcgKzYyLDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHVGV4dENv
bnRlbnRFbGVtZW50IiwgU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG8sIFNWR1RleHRDb250ZW50
RWxlbWVudFByb3RvRnVuYykKIAotVmFsdWUgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNW
R1RleHRDb250ZW50RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtODAsOSArODAsOSBAQCBW
YWx1ZSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFZhbHVlUHJvCiAJcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1WYWx1ZSBTVkdUZXh0Q29udGVudEVsZW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUlt
cCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotCVNWR1RleHRDb250ZW50
RWxlbWVudCBvYmooY2FzdChleGVjLCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlz
T2JqLmltcCgpKSkpOworCVNWR1RleHRDb250ZW50RWxlbWVudCBvYmooY2FzdChleGVjLCB0aGlz
T2JqKSk7CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0Y2goaWQpCkBAIC05NywxNyArOTcsMTcg
QEAgVmFsdWUgU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG9GdW5jOjpjYQogCQl9CiAJCWNhc2Ug
U1ZHVGV4dENvbnRlbnRFbGVtZW50Q29uc3RhbnRzOjpHZXRTdWJTdHJpbmdMZW5ndGg6CiAJCXsK
LQkJCXJldHVybiBOdW1iZXIob2JqLmdldFN1YlN0cmluZ0xlbmd0aChhcmdzWzBdLnRvVUludDMy
KGV4ZWMpLCBhcmdzWzFdLnRvVUludDMyKGV4ZWMpKSk7CisJCQlyZXR1cm4gTnVtYmVyKG9iai5n
ZXRTdWJTdHJpbmdMZW5ndGgoYXJnc1swXS0+dG9VSW50MzIoZXhlYyksIGFyZ3NbMV0tPnRvVUlu
dDMyKGV4ZWMpKSk7CiAJCX0KIAkJY2FzZSBTVkdUZXh0Q29udGVudEVsZW1lbnRDb25zdGFudHM6
OkdldFN0YXJ0UG9zaXRpb25PZkNoYXI6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQ
b2ludD4oZXhlYywgb2JqLmdldFN0YXJ0UG9zaXRpb25PZkNoYXIoYXJnc1swXS50b1VJbnQzMihl
eGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUG9pbnQ+KGV4ZWMsIG9iai5n
ZXRTdGFydFBvc2l0aW9uT2ZDaGFyKGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpKSk7CiAJCWNhc2Ug
U1ZHVGV4dENvbnRlbnRFbGVtZW50Q29uc3RhbnRzOjpHZXRFbmRQb3NpdGlvbk9mQ2hhcjoKLQkJ
CXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BvaW50PihleGVjLCBvYmouZ2V0U3RhcnRQb3Np
dGlvbk9mQ2hhcihhcmdzWzBdLnRvVUludDMyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2Fm
ZV9jYWNoZTxTVkdQb2ludD4oZXhlYywgb2JqLmdldFN0YXJ0UG9zaXRpb25PZkNoYXIoYXJnc1sw
XS0+dG9VSW50MzIoZXhlYykpKTsKIAkJY2FzZSBTVkdUZXh0Q29udGVudEVsZW1lbnRDb25zdGFu
dHM6OkdldEV4dGVudE9mQ2hhcjoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1JlY3Q+
KGV4ZWMsIG9iai5nZXRFeHRlbnRPZkNoYXIoYXJnc1swXS50b1VJbnQzMihleGVjKSkpOworCQkJ
cmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUmVjdD4oZXhlYywgb2JqLmdldEV4dGVudE9mQ2hh
cihhcmdzWzBdLT50b1VJbnQzMihleGVjKSkpOwogCQljYXNlIFNWR1RleHRDb250ZW50RWxlbWVu
dENvbnN0YW50czo6R2V0Um90YXRpb25PZkNoYXI6CiAJCXsKLQkJCXJldHVybiBOdW1iZXIob2Jq
LmdldFJvdGF0aW9uT2ZDaGFyKGFyZ3NbMF0udG9VSW50MzIoZXhlYykpKTsKKwkJCXJldHVybiBO
dW1iZXIob2JqLmdldFJvdGF0aW9uT2ZDaGFyKGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpKSk7CiAJ
CX0KIAkJY2FzZSBTVkdUZXh0Q29udGVudEVsZW1lbnRDb25zdGFudHM6OkdldENoYXJOdW1BdFBv
c2l0aW9uOgogCQl7CkBAIC0xMTYsNyArMTE2LDcgQEAgVmFsdWUgU1ZHVGV4dENvbnRlbnRFbGVt
ZW50UHJvdG9GdW5jOjpjYQogCQl9CiAJCWNhc2UgU1ZHVGV4dENvbnRlbnRFbGVtZW50Q29uc3Rh
bnRzOjpTZWxlY3RTdWJTdHJpbmc6CiAJCXsKLQkJCW9iai5zZWxlY3RTdWJTdHJpbmcoYXJnc1sw
XS50b1VJbnQzMihleGVjKSwgYXJnc1sxXS50b1VJbnQzMihleGVjKSk7CisJCQlvYmouc2VsZWN0
U3ViU3RyaW5nKGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpLCBhcmdzWzFdLT50b1VJbnQzMihleGVj
KSk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcy
L2RvbS9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUZXh0Q29udGVu
dEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1RleHRDb250ZW50RWxlbWVudC5oCTkgSnVsIDIw
MDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVGV4dENvbnRlbnRFbGVtZW50
LmgJOCBBdWcgMjAwNSAxODowMjo1OSAtMDAwMApAQCAtNzYsNyArNzYsNyBAQCBuYW1lc3BhY2Ug
S1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdUZXh0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R1RleHRFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR1RleHRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1RleHRFbGVt
ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1Rl
eHRFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAyOjU5IC0wMDAwCkBAIC00Myw3ICs0Myw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHVGV4dEVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHVGV4dEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9T
VkdUZXh0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdUZXh0RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGV4dEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NW
R1RleHRFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdUZXh0RWxlbWVudC5oCTggQXVnIDIwMDUgMTg6MDI6NTkgLTAwMDAKQEAgLTUxLDcgKzUx
LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJ
S0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTg6MDM6MDAgLTAwMDAKQEAg
LTUxLDcgKzUxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAotLS0g
a3N2ZzIvZG9tL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU2
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAk4IEF1
ZyAyMDA1IDE4OjAzOjAwIC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJ
CUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1RpdGxlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RpdGxl
RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdUaXRsZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHVGl0bGVFbGVtZW50
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1RpdGxl
RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxODowMzowMCAtMDAwMApAQCAtMzcsNyArMzcsNyBAQCB1
c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1RpdGxlRWxlbWVudDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpTVkdUaXRsZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9T
VkdUaXRsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHVGl0bGVFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUaXRsZUVsZW1lbnQuaAotLS0ga3N2ZzIvZG9t
L1NWR1RpdGxlRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHVGl0bGVFbGVtZW50LmgJOCBBdWcgMjAwNSAxODowMzowMCAtMDAwMApAQCAtNTMs
NyArNTMsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQK
IAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcy
L2RvbS9TVkdUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdUcmFuc2Zvcm0uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmNwcAotLS0ga3N2ZzIv
ZG9tL1NWR1RyYW5zZm9ybS5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdUcmFuc2Zvcm0uY3BwCTggQXVnIDIwMDUgMTg6MDM6MDAgLTAwMDAKQEAgLTUy
LDcgKzUyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RP
VFlQRSgiU1ZHVHJhbnNmb3JtIiwgU1ZHVHJhbnNmb3JtUHJvdG8sIFNWR1RyYW5zZm9ybVByb3Rv
RnVuYykKIAotVmFsdWUgU1ZHVHJhbnNmb3JtOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybTo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApAQCAtNzIsNyArNzIsNyBAQCBWYWx1ZSBTVkdUcmFuc2Zvcm06OmdldFZhbHVlUHJv
cGVydHkoRXhlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm1Q
cm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHVHJhbnNmb3JtUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01f
Q0hFQ0tfVEhJUyhTVkdUcmFuc2Zvcm0pCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC04NywzNSArODcs
MzUgQEAgVmFsdWUgU1ZHVHJhbnNmb3JtUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdAogCQl9CiAJCWNh
c2UgU1ZHVHJhbnNmb3JtQ29uc3RhbnRzOjpTZXRUcmFuc2xhdGU6CiAJCXsKLQkJCWRvdWJsZSB4
ID0gYXJnc1swXS50b051bWJlcihleGVjKTsKLQkJCWRvdWJsZSB5ID0gYXJnc1sxXS50b051bWJl
cihleGVjKTsKKwkJCWRvdWJsZSB4ID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisJCQlkb3Vi
bGUgeSA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJb2JqLnNldFRyYW5zbGF0ZSh4LCB5
KTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQogCQljYXNlIFNWR1RyYW5zZm9ybUNvbnN0
YW50czo6U2V0U2NhbGU6CiAJCXsKLQkJCWRvdWJsZSBzeCA9IGFyZ3NbMF0udG9OdW1iZXIoZXhl
Yyk7Ci0JCQlkb3VibGUgc3kgPSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHN4
ID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgc3kgPSBhcmdzWzFdLT50b051
bWJlcihleGVjKTsKIAkJCW9iai5zZXRTY2FsZShzeCwgc3kpOwogCQkJcmV0dXJuIFVuZGVmaW5l
ZCgpOwogCQl9CiAJCWNhc2UgU1ZHVHJhbnNmb3JtQ29uc3RhbnRzOjpTZXRSb3RhdGU6CiAJCXsK
LQkJCWRvdWJsZSBhbmdsZSA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0JCQlkb3VibGUgY3gg
PSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOwotCQkJZG91YmxlIGN5ID0gYXJnc1syXS50b051bWJl
cihleGVjKTsKKwkJCWRvdWJsZSBhbmdsZSA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworCQkJ
ZG91YmxlIGN4ID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgY3kgPSBhcmdz
WzJdLT50b051bWJlcihleGVjKTsKIAkJCW9iai5zZXRSb3RhdGUoYW5nbGUsIGN4LCBjeSk7CiAJ
CQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBTVkdUcmFuc2Zvcm1Db25zdGFudHM6
OlNldFNrZXdYOgogCQl7Ci0JCQlkb3VibGUgYW5nbGUgPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMp
OworCQkJZG91YmxlIGFuZ2xlID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlvYmouc2V0
U2tld1goYW5nbGUpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWNhc2UgU1ZHVHJh
bnNmb3JtQ29uc3RhbnRzOjpTZXRTa2V3WToKIAkJewotCQkJZG91YmxlIGFuZ2xlID0gYXJnc1sw
XS50b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSBhbmdsZSA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4
ZWMpOwogCQkJb2JqLnNldFNrZXdZKGFuZ2xlKTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJ
fQpJbmRleDoga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUcmFuc2Zvcm0uaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybS5oCi0t
LSBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm0uaAk4IEF1ZyAyMDA1IDE4OjAzOjAwIC0wMDAwCkBA
IC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlL
RE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVHJhbnNmb3JtTGlzdC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUcmFuc2Zv
cm1MaXN0LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybUxpc3QuY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtTGlzdC5jcHAJOCBB
dWcgMjAwNSAxODowMzowMCAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
S1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdUcmFuc2Zvcm1MaXN0IiwgU1ZH
VHJhbnNmb3JtTGlzdFByb3RvLCBTVkdUcmFuc2Zvcm1MaXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBT
VkdUcmFuc2Zvcm1MaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybUxpc3Q6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAK
QEAgLTc0LDcgKzc0LDcgQEAgVmFsdWUgU1ZHVHJhbnNmb3JtTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0
eQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHVHJhbnNmb3JtTGlzdFByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm1MaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01f
Q0hFQ0tfVEhJUyhTVkdUcmFuc2Zvcm1MaXN0KQogCUtET01fRU5URVJfU0FGRQpAQCAtOTMsMjQg
KzkzLDI0IEBAIFZhbHVlIFNWR1RyYW5zZm9ybUxpc3RQcm90b0Z1bmM6OmNhbGwoRXgKIAkJfQog
CQljYXNlIFNWR1RyYW5zZm9ybUxpc3RDb25zdGFudHM6OkdldEl0ZW06CiAJCXsKLQkJCXVuc2ln
bmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVf
Y2FjaGU8U1ZHVHJhbnNmb3JtPihleGVjLCBvYmouZ2V0SXRlbShpbmRleCkpOwogCQl9CiAJCWNh
c2UgU1ZHVHJhbnNmb3JtTGlzdENvbnN0YW50czo6SW5zZXJ0SXRlbUJlZm9yZToKIAkJewogCQkJ
U1ZHVHJhbnNmb3JtIG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZHVHJhbnNmb3JtPihleGVj
LCBhcmdzWzBdLCAmdG9TVkdUcmFuc2Zvcm0pOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFy
Z3NbMV0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+
dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdUcmFuc2Zvcm0+
KGV4ZWMsIG9iai5pbnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJY2Fz
ZSBTVkdUcmFuc2Zvcm1MaXN0Q29uc3RhbnRzOjpSZXBsYWNlSXRlbToKIAkJewogCQkJU1ZHVHJh
bnNmb3JtIG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZHVHJhbnNmb3JtPihleGVjLCBhcmdz
WzBdLCAmdG9TVkdUcmFuc2Zvcm0pOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0u
dG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50
MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdUcmFuc2Zvcm0+KGV4ZWMs
IG9iai5yZXBsYWNlSXRlbShuZXdJdGVtLCBpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHVHJhbnNm
b3JtTGlzdENvbnN0YW50czo6UmVtb3ZlSXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRl
eCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJn
c1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdUcmFu
c2Zvcm0+KGV4ZWMsIG9iai5yZW1vdmVJdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdUcmFu
c2Zvcm1MaXN0Q29uc3RhbnRzOjpBcHBlbmRJdGVtOgpJbmRleDoga3N2ZzIvZG9tL1NWR1RyYW5z
Zm9ybUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHVHJhbnNmb3JtTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtTGlzdC5oCi0tLSBrc3ZnMi9kb20vU1ZH
VHJhbnNmb3JtTGlzdC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHVHJhbnNmb3JtTGlzdC5oCTggQXVnIDIwMDUgMTg6MDM6MDAgLTAwMDAKQEAgLTY2LDcg
KzY2LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgog
CQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1hYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVHJhbnNmb3JtYWJs
ZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdUcmFuc2Zvcm1hYmxlLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybWFibGUuY3Bw
CTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVHJhbnNmb3Jt
YWJsZS5jcHAJOCBBdWcgMjAwNSAxODowMzowMCAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1RyYW5zZm9ybWFibGU6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NW
R1RyYW5zZm9ybWFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHVHJhbnNmb3JtYWJsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtYWJsZS5oCi0tLSBrc3ZnMi9k
b20vU1ZHVHJhbnNmb3JtYWJsZS5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHVHJhbnNmb3JtYWJsZS5oCTggQXVnIDIwMDUgMTg6MDM6MDAgLTAwMDAKQEAg
LTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2Vj
dGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9Owog
fTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1VSSVJlZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1VSSVJlZmVyZW5jZS5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdV
UklSZWZlcmVuY2UuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHVVJJUmVmZXJlbmNlLmNwcAk5IEp1bCAy
MDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1VSSVJlZmVyZW5jZS5jcHAJ
OCBBdWcgMjAwNSAxODowMzowMCAtMDAwMApAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1VSSVJlZmVyZW5jZTo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdVUklS
ZWZlcmVuY2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdVUklSZWZlcmVu
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHVVJJUmVmZXJlbmNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdVUklSZWZlcmVuY2UuaAotLS0ga3N2ZzIvZG9tL1NWR1VSSVJlZmVy
ZW5jZS5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVVJJ
UmVmZXJlbmNlLmgJOCBBdWcgMjAwNSAxODowMzowMCAtMDAwMApAQCAtNTQsNyArNTQsNyBAQCBu
YW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFT
RUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJ
bmRleDoga3N2ZzIvZG9tL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdVc2VFbGVtZW50LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1VzZUVsZW1lbnQu
Y3BwCi0tLSBrc3ZnMi9kb20vU1ZHVXNlRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdVc2VFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE4OjAz
OjAwIC0wMDAwCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiAvLyBU
T0RPOiBpbnN0YW5jZVJvb3QJCVNWR1VzZUVsZW1lbnRDb25zdGFudHM6Okluc3RhbmNlUm9vdAlE
b250RGVsZXRlfFJlYWRPbmx5CiAKLVZhbHVlIFNWR1VzZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHVXNlRWxl
bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR1VzZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVXNl
RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHVXNlRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHVXNlRWxlbWVudC5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVXNlRWxlbWVudC5oCTgg
QXVnIDIwMDUgMTg6MDM6MDEgLTAwMDAKQEAgLTczLDcgKzczLDcgQEAgbmFtZXNwYWNlIEtTVkcK
IAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZh
bHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVmlld0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdWaWV3
RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdWaWV3RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdWaWV3RWxlbWVudC5j
cHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdWaWV3RWxl
bWVudC5jcHAJOCBBdWcgMjAwNSAxODowMzowMSAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1ZpZXdFbGVtZW50OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAg
KlNWR1ZpZXdFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCQpJbmRleDoga3N2ZzIvZG9tL1NWR1Zp
ZXdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR1ZpZXdFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdWaWV3RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHVmll
d0VsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R1ZpZXdFbGVtZW50LmgJOCBBdWcgMjAwNSAxODowMzowMSAtMDAwMApAQCAtNTksNyArNTksNyBA
QCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkda
b29tQW5kUGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHWm9vbUFuZFBhbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdab29tQW5kUGFuLmNwcAotLS0ga3N2ZzIvZG9tL1NW
R1pvb21BbmRQYW4uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHWm9vbUFuZFBhbi5jcHAJOCBBdWcgMjAwNSAxODowMzowMSAtMDAwMApAQCAtMzUsNyAr
MzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1pvb21B
bmRQYW46OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqU1ZHWm9vbUFuZFBhbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTEsNyArNTEs
NyBAQCBWYWx1ZSBTVkdab29tQW5kUGFuOjpnZXRWYWx1ZVByb3BlcnR5KEV4CiAJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1pvb21BbmRQYW46OnB1dFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBT
Vkdab29tQW5kUGFuOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTksNyAr
NTksNyBAQCB2b2lkIFNWR1pvb21BbmRQYW46OnB1dFZhbHVlUHJvcGVydHkoRXhlCiAJewogCQlj
YXNlIFNWR1pvb21BbmRQYW5Db25zdGFudHM6Olpvb21BbmRQYW46CiAJCXsKLQkJCXNldFpvb21B
bmRQYW4odmFsdWUudG9VSW50MTYoZXhlYykpOworCQkJc2V0Wm9vbUFuZFBhbih2YWx1ZS0+dG9V
SW50MTYoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9k
b20vU1ZHWm9vbUFuZFBhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdab29tQW5kUGFuLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdab29tQW5kUGFuLmgKLS0tIGtzdmcyL2RvbS9T
Vkdab29tQW5kUGFuLmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdab29tQW5kUGFuLmgJOCBBdWcgMjAwNSAxODowMzowMSAtMDAwMApAQCAtNTUsOCArNTUs
OCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJ
bmRleDoga3N2ZzIvZWNtYS9FY21hLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rc3ZnMi9lY21hL0VjbWEuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9lY21hL0VjbWEuY3BwCi0tLSBrc3ZnMi9lY21hL0VjbWEu
Y3BwCTkgSnVsIDIwMDUgMDY6NTU6MjcgLTAwMDAJMS4xCisrKyBrc3ZnMi9lY21hL0VjbWEuY3Bw
CTggQXVnIDIwMDUgMTg6MDM6MDEgLTAwMDAKQEAgLTQwMyw3ICs0MDMsNyBAQCBLSlM6Ok9iamVj
dEltcCAqRWNtYTo6aW5oZXJpdGVkR2V0RE9NQ1NTCiAJcmV0dXJuIDA7CiB9CiAKLUtKUzo6VmFs
dWUgS1NWRzo6Z2V0U1ZHUGF0aFNlZyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgU1ZHUGF0aFNlZyBz
KQorS0pTOjpWYWx1ZUltcCAqS1NWRzo6Z2V0U1ZHUGF0aFNlZyhLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgU1ZHUGF0aFNlZyBzKQogewogCWlmKHMgPT0gU1ZHUGF0aFNlZzo6bnVsbCkKIAkJcmV0dXJu
IEtKUzo6TnVsbCgpOwpAQCAtNDE1LDcgKzQxNSw3IEBAIEtKUzo6VmFsdWUgS1NWRzo6Z2V0U1ZH
UGF0aFNlZyhLSlM6OkV4ZWMKIAkvLyBSZXVzZSBleGlzdGluZyBicmlkZ2UsIGlmIHBvc3NpYmxl
CiAJS0pTOjpPYmplY3RJbXAgKnJlcXVlc3QgPSBpbnRlcnByZXRlci0+Z2V0RE9NT2JqZWN0KHMu
aGFuZGxlKCkpOwogCWlmKHJlcXVlc3QpCi0JCXJldHVybiBLSlM6OlZhbHVlKHJlcXVlc3QpOwor
CQlyZXR1cm4gcmVxdWVzdDsKIAkKIAlLSlM6Ok9iamVjdEltcCAqcmV0ID0gMDsKIAl1bnNpZ25l
ZCBzaG9ydCB0eXBlID0gcy5wYXRoU2VnVHlwZSgpOwpAQCAtNTIyLDcgKzUyMiw3IEBAIEtKUzo6
VmFsdWUgS1NWRzo6Z2V0U1ZHUGF0aFNlZyhLSlM6OkV4ZWMKIAl9CiAKIAlpbnRlcnByZXRlci0+
cHV0RE9NT2JqZWN0KHMuaGFuZGxlKCksIHJldCk7Ci0JcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsK
KwlyZXR1cm4gcmV0OwogfQogCiAKSW5kZXg6IGtzdmcyL2VjbWEvRWNtYS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2VjbWEvRWNtYS5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9lY21hL0VjbWEuaAotLS0g
a3N2ZzIvZWNtYS9FY21hLmgJOSBKdWwgMjAwNSAwNjo1NToyOCAtMDAwMAkxLjEKKysrIGtzdmcy
L2VjbWEvRWNtYS5oCTggQXVnIDIwMDUgMTg6MDM6MDEgLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAg
bmFtZXNwYWNlIEtTVkcKIAogCS8vIEhlbHBlcnMKIAljbGFzcyBTVkdQYXRoU2VnOwotCUtKUzo6
VmFsdWUgZ2V0U1ZHUGF0aFNlZyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgU1ZHUGF0aFNlZyBzKTsK
KwlLSlM6OlZhbHVlSW1wICpnZXRTVkdQYXRoU2VnKEtKUzo6RXhlY1N0YXRlICpleGVjLCBTVkdQ
YXRoU2VnIHMpOwogfTsKIAogI2VuZGlmCkluZGV4OiBrc3ZnMi9lY21hL0dsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZWNtYS9H
bG9iYWxPYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9lY21hL0dsb2JhbE9iamVjdC5jcHAKLS0tIGtzdmcyL2VjbWEvR2xvYmFsT2JqZWN0
LmNwcAk5IEp1bCAyMDA1IDA2OjU1OjI4IC0wMDAwCTEuMQorKysga3N2ZzIvZWNtYS9HbG9iYWxP
YmplY3QuY3BwCTggQXVnIDIwMDUgMTg6MDM6MDEgLTAwMDAKQEAgLTYyLDEyICs2MiwxMiBAQCB2
b2lkIEdsb2JhbE9iamVjdDo6YWZ0ZXJUaW1lb3V0KCkgY29uc3QKIAkJZG9jKCktPnVwZGF0ZVJl
bmRlcmluZygpOwogfQogCi1LSlM6OlZhbHVlIEdsb2JhbE9iamVjdDo6Z2V0KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnApIGNvbnN0CitLSlM6OlZhbHVlSW1w
ICpHbG9iYWxPYmplY3Q6OmdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVu
dGlmaWVyICZwKSBjb25zdAogewogCWtkRGVidWcoMjYwMDQpIDw8ICJLU1ZHOjpHbG9iYWxPYmpl
Y3QgKCIgPDwgdGhpcyA8PCAiKTo6Z2V0ICIgPDwgcC5xc3RyaW5nKCkgPDwgZW5kbDsKIAotCUtK
Uzo6VmFsdWUgcmV0ID0gS0RPTTo6R2xvYmFsT2JqZWN0OjpnZXQoZXhlYywgcCk7Ci0JaWYocmV0
LnR5cGUoKSAhPSBLSlM6OlVuZGVmaW5lZFR5cGUpCisJS0pTOjpWYWx1ZUltcCAqcmV0ID0gS0RP
TTo6R2xvYmFsT2JqZWN0OjpnZXQoZXhlYywgcCk7CisJaWYocmV0LT50eXBlKCkgIT0gS0pTOjpV
bmRlZmluZWRUeXBlKQogCQlyZXR1cm4gcmV0OwogCiAJY29uc3QgS0pTOjpIYXNoRW50cnkgKmVu
dHJ5ID0gS0pTOjpMb29rdXA6OmZpbmRFbnRyeSgmR2xvYmFsT2JqZWN0OjpzX2hhc2hUYWJsZSwg
cCk7CkluZGV4OiBrc3ZnMi9lY21hL0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2VjbWEvR2xvYmFsT2JqZWN0LmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2VjbWEvR2xvYmFsT2JqZWN0
LmgKLS0tIGtzdmcyL2VjbWEvR2xvYmFsT2JqZWN0LmgJOSBKdWwgMjAwNSAwNjo1NToyOCAtMDAw
MAkxLjEKKysrIGtzdmcyL2VjbWEvR2xvYmFsT2JqZWN0LmgJOCBBdWcgMjAwNSAxODowMzowMSAt
MDAwMApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQl2aXJ0dWFsIH5HbG9iYWxP
YmplY3QoKTsKIAogCQl2aXJ0dWFsIHZvaWQgYWZ0ZXJUaW1lb3V0KCkgY29uc3Q7Ci0JCXZpcnR1
YWwgS0pTOjpWYWx1ZSBnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKKwkJdmlydHVhbCBLSlM6OlZhbHVlSW1wICpnZXQo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdDsKIAogCQkvLyBFY21hU2NyaXB0IHNwZWNpZmljIHN0dWZmIC0gb25seSBuZWVkZWQg
Zm9yIEdsb2JhbE9iamVjdAogCQkvLyBZb3Ugd29uJ3QgZmluZCBpdCBpbiAiZ2VuZXJhbCIga2Rv
bSBlY21hIGNvZGUuLi4KSW5kZXg6IGtzdmcyL2V2ZW50cy9TVkdFdmVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZXZlbnRzL1NWR0V2ZW50LmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZXZlbnRz
L1NWR0V2ZW50LmNwcAotLS0ga3N2ZzIvZXZlbnRzL1NWR0V2ZW50LmNwcAk5IEp1bCAyMDA1IDA2
OjU1OjI5IC0wMDAwCTEuMQorKysga3N2ZzIvZXZlbnRzL1NWR0V2ZW50LmNwcAk4IEF1ZyAyMDA1
IDE4OjAzOjAxIC0wMDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwog
QGVuZAogKi8KIAotVmFsdWUgU1ZHRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRXZlbnQ6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZF
CiAKSW5kZXg6IGtzdmcyL2V2ZW50cy9TVkdFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2V2ZW50cy9TVkdFdmVudC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9ldmVudHMvU1ZHRXZlbnQuaAotLS0g
a3N2ZzIvZXZlbnRzL1NWR0V2ZW50LmgJOSBKdWwgMjAwNSAwNjo1NToyOSAtMDAwMAkxLjEKKysr
IGtzdmcyL2V2ZW50cy9TVkdFdmVudC5oCTggQXVnIDIwMDUgMTg6MDM6MDEgLTAwMDAKQEAgLTUw
LDcgKzUwLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVU
CiAJCQotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtz
dmcyL2V2ZW50cy9TVkdab29tRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9ldmVudHMvU1ZHWm9vbUV2ZW50LmNw
cAotLS0ga3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NToyOSAt
MDAwMAkxLjEKKysrIGtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuY3BwCTggQXVnIDIwMDUgMTg6
MDM6MDEgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5k
CiAqLwogCi1WYWx1ZSBTVkdab29tRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHWm9vbUV2ZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkluZGV4OiBrc3ZnMi9ldmVudHMvU1ZHWm9vbUV2ZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9ldmVudHMvU1ZH
Wm9vbUV2ZW50LmgKLS0tIGtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuaAk5IEp1bCAyMDA1IDA2
OjU1OjI5IC0wMDAwCTEuMQorKysga3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5oCTggQXVnIDIw
MDUgMTg6MDM6MDEgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9pbXBsL1NWR1NjcmlwdEVsZW1lbnRJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9pbXBsL1NWR1Nj
cmlwdEVsZW1lbnRJbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvaW1wbC9TVkdTY3JpcHRFbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcyL2ltcGwv
U1ZHU2NyaXB0RWxlbWVudEltcGwuY3BwCTkgSnVsIDIwMDUgMDY6NTU6NDEgLTAwMDAJMS4xCisr
KyBrc3ZnMi9pbXBsL1NWR1NjcmlwdEVsZW1lbnRJbXBsLmNwcAk4IEF1ZyAyMDA1IDE4OjAzOjAy
IC0wMDAwCkBAIC04OSwxNCArODksMTQgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50SW1wbDo6ZXhl
Y3V0ZVNjcmlwdAogCWlmKGNvbXAuY29tcGxUeXBlKCkgPT0gS0pTOjpUaHJvdykKIAl7CiAJCUtK
Uzo6RXhlY1N0YXRlICpleGVjID0gZWNtYUVuZ2luZS0+Z2xvYmFsRXhlYygpOwotCQlLSlM6OlZh
bHVlIGV4VmFsID0gY29tcC52YWx1ZSgpOworCQlLSlM6OlZhbHVlSW1wICpleFZhbCA9IGNvbXAu
dmFsdWUoKTsKIAogCQlpbnQgbGluZW5vID0gLTE7Ci0JCWlmKGV4VmFsLnR5cGUoKSA9PSBLSlM6
Ok9iamVjdFR5cGUpCisJCWlmKGV4VmFsLT5pc09iamVjdCgpKQogCQl7Ci0JCQlLSlM6OlZhbHVl
IGxpbmVWYWwgPSBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QoZXhWYWwpLmdldChleGVjLCAibGlu
ZSIpOwotCQkJaWYobGluZVZhbC50eXBlKCkgPT0gS0pTOjpOdW1iZXJUeXBlKQotCQkJCWxpbmVu
byA9IGludChsaW5lVmFsLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCUtKUzo6VmFsdWVJbXAgKmxpbmVW
YWwgPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihleFZhbCktPmdldChleGVjLCAibGlu
ZSIpOworCQkJaWYobGluZVZhbC0+dHlwZSgpID09IEtKUzo6TnVtYmVyVHlwZSkKKwkJCQlsaW5l
bm8gPSBpbnQobGluZVZhbC0+dG9OdW1iZXIoZXhlYykpOwogCQl9CiAKIAkJLy8gRmlyZSBFUlJP
Ul9FVkVOVCB1cG9uIGVycm9ycy4uLgpAQCAtMTEyLDEwICsxMTIsMTAgQEAgdm9pZCBTVkdTY3Jp
cHRFbGVtZW50SW1wbDo6ZXhlY3V0ZVNjcmlwdAogCQkJZXZlbnQtPmRlcmVmKCk7CiAJCX0KIAot
CQlrZERlYnVnKCkgPDwgIltTVkdTY3JpcHRFbGVtZW50XSBFdmFsdWF0aW9uIGVycm9yLCBsaW5l
ICIgPDwgKGxpbmVubyAhPSAtMSA/IFFTdHJpbmc6Om51bWJlcihsaW5lbm8pIDogUVN0cmluZzo6
ZnJvbUxhdGluMSgiTi9BIikpICA8PCAiICIgPDwgZXhWYWwudG9TdHJpbmcoZXhlYykucXN0cmlu
ZygpIDw8IGVuZGw7CisJCWtkRGVidWcoKSA8PCAiW1NWR1NjcmlwdEVsZW1lbnRdIEV2YWx1YXRp
b24gZXJyb3IsIGxpbmUgIiA8PCAobGluZW5vICE9IC0xID8gUVN0cmluZzo6bnVtYmVyKGxpbmVu
bykgOiBRU3RyaW5nOjpmcm9tTGF0aW4xKCJOL0EiKSkgIDw8ICIgIiA8PCBleFZhbC0+dG9TdHJp
bmcoZXhlYykucXN0cmluZygpIDw8IGVuZGw7CiAJfQogCWVsc2UgaWYoY29tcC5jb21wbFR5cGUo
KSA9PSBLSlM6OlJldHVyblZhbHVlKQotCQlrZERlYnVnKCkgPDwgIltTVkdTY3JpcHRFbGVtZW50
XSBSZXR1cm4gdmFsdWU6ICIgPDwgY29tcC52YWx1ZSgpLnRvU3RyaW5nKGVjbWFFbmdpbmUtPmds
b2JhbEV4ZWMoKSkucXN0cmluZygpIDw8IGVuZGw7CisJCWtkRGVidWcoKSA8PCAiW1NWR1Njcmlw
dEVsZW1lbnRdIFJldHVybiB2YWx1ZTogIiA8PCBjb21wLnZhbHVlKCktPnRvU3RyaW5nKGVjbWFF
bmdpbmUtPmdsb2JhbEV4ZWMoKSkucXN0cmluZygpIDw8IGVuZGw7CiAJZWxzZSBpZihjb21wLmNv
bXBsVHlwZSgpID09IEtKUzo6Tm9ybWFsKQogCQlrZERlYnVnKCkgPDwgIltTVkdTY3JpcHRFbGVt
ZW50XSBFdmFsdWF0ZWQgZWNtYSBzY3JpcHQhIiA8PCBlbmRsOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3283</attachid>
            <date>2005-08-08 13:12:09 -0700</date>
            <delta_ts>2005-08-08 13:23:37 -0700</delta_ts>
            <desc>Adding call -&gt; callFunction() change per darin&apos;s suggestion.</desc>
            <filename>kdomfix.patch</filename>
            <type>text/plain</type>
            <size>656726</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtkb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9BdHRyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS9BdHRyLmNwcAotLS0ga2RvbS9BdHRyLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjIz
IC0wMDAwCTEuMQorKysga2RvbS9BdHRyLmNwcAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBA
IC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBB
dHRyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKkF0dHI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY5LDcgKzY5LDcgQEAgVmFsdWUg
QXR0cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKgogCXJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotdm9pZCBBdHRyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgQXR0cjo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20vQXR0ci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vQXR0ci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0F0dHIuaAotLS0ga2RvbS9BdHRyLmgJOSBKdWwgMjAw
NSAwNjo1MzoyMyAtMDAwMAkxLjEKKysrIGtkb20vQXR0ci5oCTggQXVnIDIwMDUgMTk6NTQ6NTkg
LTAwMDAKQEAgLTE1MCw4ICsxNTAsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX1BVVAogCQlL
RE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0
dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsK
IAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChBdHRyKQpJbmRleDoga2RvbS9DaGFyYWN0ZXJEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0NoYXJh
Y3RlckRhdGEuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
ZG9tL0NoYXJhY3RlckRhdGEuY3BwCi0tLSBrZG9tL0NoYXJhY3RlckRhdGEuY3BwCTkgSnVsIDIw
MDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9tL0NoYXJhY3RlckRhdGEuY3BwCTggQXVnIDIw
MDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTQ3LDcgKzQ3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsK
IAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDaGFyYWN0ZXJEYXRhIiwgQ2hhcmFjdGVyRGF0
YVByb3RvLCBDaGFyYWN0ZXJEYXRhUHJvdG9GdW5jKQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkNoYXJhY3RlckRhdGE6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkBAIC02NSw3ICs2NSw3IEBAIFZh
bHVlIENoYXJhY3RlckRhdGE6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLXZvaWQgQ2hhcmFjdGVyRGF0YTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENoYXJhY3Rl
ckRhdGE6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC04NCw3ICs4NCw3IEBA
IHZvaWQgQ2hhcmFjdGVyRGF0YTo6cHV0VmFsdWVQcm9wZXJ0eShFeGUKIAlLRE9NX0xFQVZFX1NB
RkUoRE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhUHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKkNoYXJhY3RlckRhdGFQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hF
Q0tfVEhJUyhDaGFyYWN0ZXJEYXRhKQogCUtET01fRU5URVJfU0FGRQpAQCAtOTksOCArOTksOCBA
QCBWYWx1ZSBDaGFyYWN0ZXJEYXRhUHJvdG9GdW5jOjpjYWxsKEV4ZWNTCiAJCX0KIAkJY2FzZSBD
aGFyYWN0ZXJEYXRhQ29uc3RhbnRzOjpTdWJzdHJpbmdEYXRhOgogCQl7Ci0JCQl1bnNpZ25lZCBs
b25nIG9mZnNldCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7Ci0JCQl1bnNpZ25lZCBsb25nIGNv
dW50ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0g
YXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGNvdW50ID0gYXJnc1sx
XS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NU3RyaW5nKG9iai5zdWJzdHJpbmdE
YXRhKG9mZnNldCwgY291bnQpKTsKIAkJfQogCQljYXNlIENoYXJhY3RlckRhdGFDb25zdGFudHM6
OkFwcGVuZERhdGE6CkBAIC0xMTEsMjIgKzExMSwyMiBAQCBWYWx1ZSBDaGFyYWN0ZXJEYXRhUHJv
dG9GdW5jOjpjYWxsKEV4ZWNTCiAJCX0KIAkJY2FzZSBDaGFyYWN0ZXJEYXRhQ29uc3RhbnRzOjpJ
bnNlcnREYXRhOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0udG9VSW50
MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4
ZWMpOwogCQkJRE9NU3RyaW5nIGFyZyA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMV0pOwogCQkJ
b2JqLmluc2VydERhdGEob2Zmc2V0LCBhcmcpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9
CiAJCWNhc2UgQ2hhcmFjdGVyRGF0YUNvbnN0YW50czo6RGVsZXRlRGF0YToKIAkJewotCQkJdW5z
aWduZWQgbG9uZyBvZmZzZXQgPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOwotCQkJdW5zaWduZWQg
bG9uZyBjb3VudCA9IGFyZ3NbMV0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIG9m
ZnNldCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBjb3VudCA9
IGFyZ3NbMV0tPnRvVUludDMyKGV4ZWMpOwogCQkJb2JqLmRlbGV0ZURhdGEob2Zmc2V0LCBjb3Vu
dCk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBDaGFyYWN0ZXJEYXRhQ29u
c3RhbnRzOjpSZXBsYWNlRGF0YToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBhcmdz
WzBdLnRvVUludDMyKGV4ZWMpOwotCQkJdW5zaWduZWQgbG9uZyBjb3VudCA9IGFyZ3NbMV0udG9V
SW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFyZ3NbMF0tPnRvVUludDMy
KGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBjb3VudCA9IGFyZ3NbMV0tPnRvVUludDMyKGV4ZWMp
OwogCQkJRE9NU3RyaW5nIGFyZyA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMl0pOwogCQkJb2Jq
LnJlcGxhY2VEYXRhKG9mZnNldCwgY291bnQsIGFyZyk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7
CkluZGV4OiBrZG9tL0NoYXJhY3RlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rZG9tL0NoYXJhY3RlckRhdGEuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9DaGFyYWN0ZXJEYXRhLmgKLS0tIGtkb20vQ2hhcmFj
dGVyRGF0YS5oCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9tL0NoYXJhY3Rl
ckRhdGEuaAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC0xNDAsOCArMTQwLDggQEAgbmFt
ZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lk
IHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpW
YWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ET01Db25m
aWd1cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL0RPTUNvbmZpZ3VyYXRpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrZG9tL0RPTUNvbmZpZ3VyYXRpb24uY3BwCi0tLSBrZG9tL0RPTUNvbmZpZ3Vy
YXRpb24uY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9tL0RPTUNvbmZp
Z3VyYXRpb24uY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTQ3LDcgKzQ3LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJET01Db25m
aWd1cmF0aW9uIiwgRE9NQ29uZmlndXJhdGlvblByb3RvLCBET01Db25maWd1cmF0aW9uUHJvdG9G
dW5jKQogCi1WYWx1ZSBET01Db25maWd1cmF0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUNvbmZpZ3VyYXRpb246Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RP
TV9FTlRFUl9TQUZFCiAKQEAgLTYzLDcgKzYzLDcgQEAgVmFsdWUgRE9NQ29uZmlndXJhdGlvbjo6
Z2V0VmFsdWVQcm9wZXJ0eQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgRE9NQ29u
ZmlndXJhdGlvblByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01Db25maWd1cmF0aW9uUHJvdG9GdW5j
OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoRE9NQ29uZmlndXJhdGlvbikKIAlL
RE9NX0VOVEVSX1NBRkUKQEAgLTczLDcgKzczLDcgQEAgVmFsdWUgRE9NQ29uZmlndXJhdGlvblBy
b3RvRnVuYzo6Y2FsbChFeAogCQljYXNlIERPTUNvbmZpZ3VyYXRpb25Db25zdGFudHM6OlNldFBh
cmFtZXRlcjoKIAkJewogCQkJRE9NU3RyaW5nIG5hbWUgPSB0b0RPTVN0cmluZyhleGVjLCBhcmdz
WzBdKTsKLQkJCWJvb2wgdmFsdWUgPSBhcmdzWzFdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wg
dmFsdWUgPSBhcmdzWzFdLT50b0Jvb2xlYW4oZXhlYyk7CiAvLwkJCURPTVVzZXJEYXRhIHZhbHVl
ID0gZWNtYV9jYXN0PERPTVVzZXJEYXRhPihleGVjLCBhcmdzWzFdLCAmdG9ET01Vc2VyRGF0YSk7
CiAJCQlvYmouc2V0UGFyYW1ldGVyKG5hbWUsIHZhbHVlKTsKIAkJCXJldHVybiBVbmRlZmluZWQo
KTsKSW5kZXg6IGtkb20vRE9NQ29uZmlndXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NQ29uZmlndXJhdGlvbi5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUNvbmZpZ3VyYXRpb24uaAotLS0g
a2RvbS9ET01Db25maWd1cmF0aW9uLmgJOSBKdWwgMjAwNSAwNjo1MzoyMyAtMDAwMAkxLjEKKysr
IGtkb20vRE9NQ29uZmlndXJhdGlvbi5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTE2
Myw3ICsxNjMsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0
aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ET01FcnJvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ET01FcnJvci5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9NRXJyb3IuY3BwCi0tLSBrZG9tL0RP
TUVycm9yLmNwcAk5IEp1bCAyMDA1IDA2OjUzOjIzIC0wMDAwCTEuMQorKysga2RvbS9ET01FcnJv
ci5jcHAJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNDQsNyArNDQsNyBAQCB1c2luZyBu
YW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgRE9NRXJyb3I6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NRXJyb3I6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20vRE9NRXJyb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RPTUVycm9yLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9NRXJyb3IuaAotLS0ga2RvbS9ET01F
cnJvci5oCTkgSnVsIDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9tL0RPTUVycm9yLmgJ
OCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtMTA1LDcgKzEwNSw3IEBAIG5hbWVzcGFjZSBL
RE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VU
CiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiAKIAlLRE9NX0RFRklORV9D
QVNUKERPTUVycm9yKQpJbmRleDoga2RvbS9ET01FcnJvckhhbmRsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NRXJyb3JIYW5kbGVyLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01FcnJvckhh
bmRsZXIuY3BwCi0tLSBrZG9tL0RPTUVycm9ySGFuZGxlci5jcHAJOSBKdWwgMjAwNSAwNjo1Mzoy
MyAtMDAwMAkxLjEKKysrIGtkb20vRE9NRXJyb3JIYW5kbGVyLmNwcAk4IEF1ZyAyMDA1IDE5OjU0
OjU5IC0wMDAwCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01f
SU1QTEVNRU5UX1BST1RPVFlQRSgiRE9NRXJyb3JIYW5kbGVyIiwgRE9NRXJyb3JIYW5kbGVyUHJv
dG8sIERPTUVycm9ySGFuZGxlclByb3RvRnVuYykKIAotVmFsdWUgRE9NRXJyb3JIYW5kbGVyOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKkRPTUVycm9ySGFuZGxlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjAsNyArNjAsNyBAQCBW
YWx1ZSBET01FcnJvckhhbmRsZXI6OmdldFZhbHVlUHJvcGVydHkoCiAJcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1WYWx1ZSBET01FcnJvckhhbmRsZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRE9N
RXJyb3JIYW5kbGVyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMo
RE9NRXJyb3JIYW5kbGVyKQogCUtET01fRU5URVJfU0FGRQpJbmRleDoga2RvbS9ET01FcnJvckhh
bmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RP
TUVycm9ySGFuZGxlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrZG9tL0RPTUVycm9ySGFuZGxlci5oCi0tLSBrZG9tL0RPTUVycm9ySGFuZGxlci5oCTkgSnVs
IDIwMDUgMDY6NTM6MjMgLTAwMDAJMS4xCisrKyBrZG9tL0RPTUVycm9ySGFuZGxlci5oCTggQXVn
IDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEtET00KIAlw
dWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vRE9NRXhj
ZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9t
L0RPTUV4Y2VwdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vRE9NRXhjZXB0aW9uLmNwcAotLS0ga2RvbS9ET01FeGNlcHRpb24uY3BwCTkgSnVs
IDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9tL0RPTUV4Y2VwdGlvbi5jcHAJOCBBdWcg
MjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pT
OwogQGVuZAogKi8KIAotVmFsdWUgRE9NRXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRE9NRXhjZXB0aW9uOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2Vu
KQogCXsKSW5kZXg6IGtkb20vRE9NRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9ET01FeGNlcHRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01FeGNlcHRpb24uaAotLS0ga2RvbS9ET01F
eGNlcHRpb24uaAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAwCTEuMQorKysga2RvbS9ET01FeGNl
cHRpb24uaAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVz
cGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vRE9N
SW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAotLS0ga2RvbS9ET01J
bXBsZW1lbnRhdGlvbi5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNCAtMDAwMAkxLjEKKysrIGtkb20v
RE9NSW1wbGVtZW50YXRpb24uY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTYwLDcg
KzYwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBF
KCJET01JbXBsZW1lbnRhdGlvbiIsIERPTUltcGxlbWVudGF0aW9uUHJvdG8sIERPTUltcGxlbWVu
dGF0aW9uUHJvdG9GdW5jKQogCi1WYWx1ZSBET01JbXBsZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpET01JbXBs
ZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzQsNyArNzQsNyBAQCBWYWx1ZSBET01J
bXBsZW1lbnRhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1WYWx1ZSBET01JbXBsZW1lbnRhdGlvblByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpET01JbXBsZW1l
bnRhdGlvblByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJ
bXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKERPTUlt
cGxlbWVudGF0aW9uKQogCUtET01fRU5URVJfU0FGRQpAQCAtMTIzLDcgKzEyMyw3IEBAIFZhbHVl
IERPTUltcGxlbWVudGF0aW9uUHJvdG9GdW5jOjpjYWxsKEUKIAkJfQogCQljYXNlIERPTUltcGxl
bWVudGF0aW9uQ29uc3RhbnRzOjpDcmVhdGVMU1BhcnNlcjoKIAkJewotCQkJdW5zaWduZWQgc2hv
cnQgbW9kZSA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCBtb2Rl
ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlET01TdHJpbmcgc2NoZW1hVHlwZSA9IHRv
RE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMV0pOwogCQkJcmV0dXJuIHNhZmVfY2FjaGU8TFNQYXJzZXI+
KGV4ZWMsIG9iai5jcmVhdGVMU1BhcnNlcihtb2RlLCBzY2hlbWFUeXBlKSk7CiAJCX0KSW5kZXg6
IGtkb20vRE9NSW1wbGVtZW50YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL0RPTUltcGxlbWVudGF0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRE9NSW1wbGVtZW50YXRpb24uaAotLS0ga2RvbS9E
T01JbXBsZW1lbnRhdGlvbi5oCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9t
L0RPTUltcGxlbWVudGF0aW9uLmgJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtMTU0LDcg
KzE1NCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24K
IAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAK
SW5kZXg6IGtkb20vRE9NTG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva2RvbS9ET01Mb2NhdG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01Mb2NhdG9yLmNwcAotLS0ga2RvbS9ET01Mb2NhdG9y
LmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAwCTEuMQorKysga2RvbS9ET01Mb2NhdG9yLmNw
cAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBET01Mb2NhdG9yOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTUxvY2F0b3I6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20vRE9NTG9jYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NTG9jYXRvci5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTUxvY2F0b3IuaAotLS0ga2Rv
bS9ET01Mb2NhdG9yLmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAtMDAwMAkxLjEKKysrIGtkb20vRE9N
TG9jYXRvci5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTk3LDcgKzk3LDcgQEAgbmFt
ZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VD
TEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtkb20vRE9NU3RyaW5nTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva2RvbS9ET01TdHJpbmdMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ET01TdHJpbmdMaXN0LmNwcAotLS0ga2RvbS9ET01T
dHJpbmdMaXN0LmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAwCTEuMQorKysga2RvbS9ET01T
dHJpbmdMaXN0LmNwcAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC00NCw3ICs0NCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiRE9NU3Ry
aW5nTGlzdCIsIERPTVN0cmluZ0xpc3RQcm90bywgRE9NU3RyaW5nTGlzdFByb3RvRnVuYykKIAot
VmFsdWUgRE9NU3RyaW5nTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpET01TdHJpbmdMaXN0OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQog
CkBAIC02MCw3ICs2MCw3IEBAIFZhbHVlIERPTVN0cmluZ0xpc3Q6OmdldFZhbHVlUHJvcGVydHko
RXgKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIERPTVN0cmluZ0xpc3RQcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpCitWYWx1ZUltcCAqRE9NU3RyaW5nTGlzdFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJ
S0RPTV9DSEVDS19USElTKERPTVN0cmluZ0xpc3QpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC02OSw3
ICs2OSw3IEBAIFZhbHVlIERPTVN0cmluZ0xpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1MKIAl7CiAJ
CWNhc2UgRE9NU3RyaW5nTGlzdENvbnN0YW50czo6SXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4
ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NU3RyaW5nKG9iai5p
dGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBET01TdHJpbmdMaXN0Q29uc3RhbnRzOjpDb250YWlu
czoKSW5kZXg6IGtkb20vRE9NU3RyaW5nTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vRE9NU3RyaW5nTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTVN0cmluZ0xpc3QuaAotLS0ga2RvbS9ET01T
dHJpbmdMaXN0LmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAtMDAwMAkxLjEKKysrIGtkb20vRE9NU3Ry
aW5nTGlzdC5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTg3LDcgKzg3LDcgQEAgbmFt
ZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VD
TEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtkb20vRE9NVXNlckRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tkb20vRE9NVXNlckRhdGEuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTVVzZXJEYXRhLmNwcAotLS0ga2RvbS9ET01Vc2VyRGF0
YS5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNCAtMDAwMAkxLjEKKysrIGtkb20vRE9NVXNlckRhdGEu
Y3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIERPTVVzZXJEYXRhOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRPTVVzZXJE
YXRhOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL0RPTVVzZXJEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ET01Vc2VyRGF0YS5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RPTVVzZXJEYXRhLmgK
LS0tIGtkb20vRE9NVXNlckRhdGEuaAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAwCTEuMQorKysg
a2RvbS9ET01Vc2VyRGF0YS5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTUyLDcgKzUy
LDcgQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fQ0FTVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FT
VChET01Vc2VyRGF0YSkKSW5kZXg6IGtkb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vRG9jdW1lbnQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RvY3VtZW50LmNwcAotLS0ga2RvbS9E
b2N1bWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNCAtMDAwMAkxLjEKKysrIGtkb20vRG9jdW1l
bnQuY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTk0LDcgKzk0LDcgQEAgbmFtZXNw
YWNlIEtET00KIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJEb2N1bWVudCIsIERvY3VtZW50
UHJvdG8sIERvY3VtZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBEb2N1bWVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVu
dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsK
IAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtMTI4LDIwICsxMjgsMjAgQEAgVmFsdWUgRG9jdW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVybiBVbmRlZmluZWQoKTsKIH07CiAKLXZv
aWQgRG9jdW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIERvY3VtZW50Q29u
c3RhbnRzOjpYbWxTdGFuZGFsb25lOgotCQkJc2V0WG1sU3RhbmRhbG9uZSh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOworCQkJc2V0WG1sU3RhbmRhbG9uZSh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsK
IAkJCWJyZWFrOwogCQljYXNlIERvY3VtZW50Q29uc3RhbnRzOjpYbWxWZXJzaW9uOgogCQkJc2V0
WG1sVmVyc2lvbih0b0RPTVN0cmluZyhleGVjLCB2YWx1ZSkpOwogCQkJYnJlYWs7CiAJCWNhc2Ug
RG9jdW1lbnRDb25zdGFudHM6OlN0cmljdEVycm9yQ2hlY2tpbmc6Ci0JCQlzZXRTdHJpY3RFcnJv
ckNoZWNraW5nKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisJCQlzZXRTdHJpY3RFcnJvckNoZWNr
aW5nKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOwogCQkJYnJlYWs7CiAJCWNhc2UgRG9jdW1lbnRD
b25zdGFudHM6OkRvY3VtZW50VVJJOgogCQkJc2V0RG9jdW1lbnRVUkkodG9ET01TdHJpbmcoZXhl
YywgdmFsdWUpKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIERvY3VtZW50OjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0CiAJS0RPTV9MRUFWRV9TQUZFKERPTUV4Y2VwdGlvbikKIH0KIAotVmFs
dWUgRG9jdW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRG9jdW1lbnRQcm90b0Z1bmM6OmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhEb2N1bWVudCkKIAlLRE9NX0VOVEVSX1NBRkUK
QEAgLTIwNiw3ICsyMDYsNyBAQCBWYWx1ZSBEb2N1bWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgCiAJCWNhc2UgRG9jdW1lbnRDb25zdGFudHM6OkltcG9ydE5vZGU6CiAJCXsKIAkJCU5vZGUg
aW1wb3J0ZWROb2RlID0gZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFyZ3NbMF0sICZ0b05vZGUpOwot
CQkJYm9vbCBkZWVwID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGRlZXAgPSBh
cmdzWzFdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBvYmou
aW1wb3J0Tm9kZShpbXBvcnRlZE5vZGUsIGRlZXApKTsKIAkJfQogCQljYXNlIERvY3VtZW50Q29u
c3RhbnRzOjpOb3JtYWxpemVEb2N1bWVudDoKSW5kZXg6IGtkb20vRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RvY3VtZW50LmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vRG9jdW1lbnQuaAotLS0g
a2RvbS9Eb2N1bWVudC5oCTcgQXVnIDIwMDUgMDY6MTc6NDMgLTAwMDAJMS4yCisrKyBrZG9tL0Rv
Y3VtZW50LmgJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNDE3LDggKzQxNyw4IEBAIG5h
bWVzcGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2
b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsJCQorCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2
b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pT
OjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsJCQogCX07CiB9CiAKSW5kZXg6IGtkb20vRG9j
dW1lbnRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL0RvY3VtZW50VHlwZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtkb20vRG9jdW1lbnRUeXBlLmNwcAotLS0ga2RvbS9Eb2N1bWVudFR5cGUuY3BwCTkg
SnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9tL0RvY3VtZW50VHlwZS5jcHAJOCBB
dWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
S0pTOwogQGVuZAogKi8KIAotVmFsdWUgRG9jdW1lbnRUeXBlOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50VHlwZTo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlL
RE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9Eb2N1bWVudFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0RvY3VtZW50VHlwZS5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0RvY3VtZW50VHlwZS5oCi0t
LSBrZG9tL0RvY3VtZW50VHlwZS5oCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBr
ZG9tL0RvY3VtZW50VHlwZS5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTExNyw3ICsx
MTcsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0ZPUldBUkRQVVQKIAkJS0RPTV9DQVNUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNU
KERvY3VtZW50VHlwZSkKSW5kZXg6IGtkb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9FbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9FbGVtZW50LmNwcAotLS0ga2RvbS9FbGVt
ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI0IC0wMDAwCTEuMQorKysga2RvbS9FbGVtZW50LmNw
cAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC02Nyw3ICs2Nyw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiRWxlbWVudCIsIEVsZW1lbnRQ
cm90bywgRWxlbWVudFByb3RvRnVuYykKIAotVmFsdWUgRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtE
T01fRU5URVJfU0FGRQogCkBAIC04NSw3ICs4NSw3IEBAIFZhbHVlIEVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEVsZW1l
bnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRWxlbWVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24o
RXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7
CiAJS0RPTV9DSEVDS19USElTKEVsZW1lbnQpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC0xODIsNyAr
MTgyLDcgQEAgVmFsdWUgRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKgogCQljYXNl
IEVsZW1lbnRDb25zdGFudHM6OlNldElkQXR0cmlidXRlOgogCQl7CiAJCQlET01TdHJpbmcgbmFt
ZSA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMF0pOwotCQkJYm9vbCBpc0lkID0gYXJnc1sxXS50
b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGlzSWQgPSBhcmdzWzFdLT50b0Jvb2xlYW4oZXhlYyk7
CiAJCQlvYmouc2V0SWRBdHRyaWJ1dGUobmFtZSwgaXNJZCk7CiAJCQlyZXR1cm4gVW5kZWZpbmVk
KCk7CiAJCX0KQEAgLTE5MCwxNCArMTkwLDE0IEBAIFZhbHVlIEVsZW1lbnRQcm90b0Z1bmM6OmNh
bGwoRXhlY1N0YXRlICoKIAkJewogCQkJRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHRvRE9NU3Ry
aW5nKGV4ZWMsIGFyZ3NbMF0pOwogCQkJRE9NU3RyaW5nIGxvY2FsTmFtZSA9IHRvRE9NU3RyaW5n
KGV4ZWMsIGFyZ3NbMV0pOwotCQkJYm9vbCBpc0lkID0gYXJnc1syXS50b0Jvb2xlYW4oZXhlYyk7
CisJCQlib29sIGlzSWQgPSBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlvYmouc2V0SWRB
dHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgaXNJZCk7CiAJCQlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBFbGVtZW50Q29uc3RhbnRzOjpTZXRJZEF0dHJpYnV0ZU5v
ZGU6CiAJCXsKIAkJCUF0dHIgaWRBdHRyID0gZWNtYV9jYXN0PEF0dHI+KGV4ZWMsIGFyZ3NbMF0s
ICZ0b0F0dHIpOwotCQkJYm9vbCBpc0lkID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7CisJCQli
b29sIGlzSWQgPSBhcmdzWzFdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlvYmouc2V0SWRBdHRyaWJ1
dGVOb2RlKGlkQXR0ciwgaXNJZCk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KSW5kZXg6
IGtkb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tkb20vRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrZG9tL0VsZW1lbnQuaAotLS0ga2RvbS9FbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1MzoyNCAt
MDAwMAkxLjEKKysrIGtkb20vRWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAg
LTEwMiw3ICsxMDIsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQkgKiBzZXRBdHRyaWJ1dGVOUyBtZXRo
b2QuCiAJCSAqCiAJCSAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8g
Y3JlYXRlIG9yIGFsdGVyLgotCQkgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gc2V0IGluIHN0cmlu
ZyBmb3JtLgorCQkgKiBAcGFyYW0gdmFsdWUgVmFsdWVJbXAgKnRvIHNldCBpbiBzdHJpbmcgZm9y
bS4KIAkJICovCiAJCXZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IERPTVN0cmluZyAmbmFtZSwgY29u
c3QgRE9NU3RyaW5nICZ2YWx1ZSk7CiAKQEAgLTM0OCw3ICszNDgsNyBAQCBuYW1lc3BhY2UgS0RP
TQogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vRW50aXR5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0VudGl0eS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vRW50aXR5LmNwcAotLS0ga2RvbS9F
bnRpdHkuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9tL0VudGl0eS5j
cHAJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgRW50aXR5OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkVudGl0eTo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VO
VEVSX1NBRkUKIApJbmRleDoga2RvbS9FbnRpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL0VudGl0eS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrZG9tL0VudGl0eS5oCi0tLSBrZG9tL0VudGl0eS5oCTkgSnVsIDIw
MDUgMDY6NTM6MjQgLTAwMDAJMS4xCisrKyBrZG9tL0VudGl0eS5oCTggQXVnIDIwMDUgMTk6NTQ6
NTkgLTAwMDAKQEAgLTEyMSw3ICsxMjEsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAog
CQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IH07CiAKSW5kZXg6IGtkb20vTmFtZWROb2RlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL05hbWVkTm9kZU1hcC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vTmFtZWROb2RlTWFwLmNwcAotLS0ga2Rv
bS9OYW1lZE5vZGVNYXAuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4xCisrKyBrZG9t
L05hbWVkTm9kZU1hcC5jcHAJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNTEsNyArNTEs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIk5h
bWVkTm9kZU1hcCIsIE5hbWVkTm9kZU1hcFByb3RvLCBOYW1lZE5vZGVNYXBQcm90b0Z1bmMpCiAK
LVZhbHVlIE5hbWVkTm9kZU1hcDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpOYW1lZE5vZGVNYXA6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAK
QEAgLTY3LDcgKzY3LDcgQEAgVmFsdWUgTmFtZWROb2RlTWFwOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgTmFtZWROb2RlTWFwUHJvdG9GdW5j
OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQorVmFsdWVJbXAgKk5hbWVkTm9kZU1hcFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0
YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RP
TV9DSEVDS19USElTKE5hbWVkTm9kZU1hcCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTkxLDcgKzkx
LDcgQEAgVmFsdWUgTmFtZWROb2RlTWFwUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdAogCQl9CiAJCWNh
c2UgTmFtZWROb2RlTWFwQ29uc3RhbnRzOjpJdGVtOgogCQl7Ci0JCQlpbnQgaW5kZXggPSBhcmdz
WzBdLnRvSW50MzIoZXhlYyk7CisJCQlpbnQgaW5kZXggPSBhcmdzWzBdLT50b0ludDMyKGV4ZWMp
OwogCQkJcmV0dXJuIGdldERPTU5vZGUoZXhlYywgb2JqLml0ZW0oaW5kZXgpKTsKIAkJfQogCQlj
YXNlIE5hbWVkTm9kZU1hcENvbnN0YW50czo6R2V0TmFtZWRJdGVtTlM6CkluZGV4OiBrZG9tL05h
bWVkTm9kZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vTmFtZWROb2RlTWFwLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vTmFtZWROb2RlTWFwLmgKLS0tIGtkb20vTmFtZWROb2RlTWFwLmgJOSBKdWwgMjAw
NSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20vTmFtZWROb2RlTWFwLmgJOCBBdWcgMjAwNSAx
OTo1NDo1OSAtMDAwMApAQCAtMTcxLDggKzE3MSw4IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01f
QkFTRUNMQVNTX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQg
cHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBL
SlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1
ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga2RvbS9Ob2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL05vZGUuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL05vZGUuY3BwCi0t
LSBrZG9tL05vZGUuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4xCisrKyBrZG9tL05v
ZGUuY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTgxLDcgKzgxLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJOb2RlIiwgTm9kZVBy
b3RvLCBOb2RlUHJvdG9GdW5jKQogCi1WYWx1ZSBOb2RlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk5vZGU6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9T
QUZFCiAKQEAgLTEyNyw3ICsxMjcsNyBAQCBWYWx1ZSBOb2RlOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfTsKIAotdm9pZCBOb2RlOjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUs
IGludCkKK3ZvaWQgTm9kZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTE0
OSw3ICsxNDksNyBAQCB2b2lkIE5vZGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICplCiAJ
S0RPTV9MRUFWRV9TQUZFKERPTUV4Y2VwdGlvbikKIH0KIAotVmFsdWUgTm9kZVByb3RvRnVuYzo6
Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykK
K1ZhbHVlSW1wICpOb2RlUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RI
SVMoTm9kZSkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTE4MiwxMyArMTgyLDEzIEBAIFZhbHVlIE5v
ZGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGUKIAkJCXJldHVybiBLSlM6OkJvb2xlYW4o
b2JqLmhhc0NoaWxkTm9kZXMoKSk7CiAJCWNhc2UgTm9kZUNvbnN0YW50czo6Q2xvbmVOb2RlOgog
CQl7Ci0JCQlib29sIGRlZXAgPSBhcmdzWzBdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgZGVl
cCA9IGFyZ3NbMF0tPnRvQm9vbGVhbihleGVjKTsKIAkJCXJldHVybiBnZXRET01Ob2RlKGV4ZWMs
IG9iai5jbG9uZU5vZGUoZGVlcCkpOwogCQl9CiAJCWNhc2UgTm9kZUNvbnN0YW50czo6Tm9ybWFs
aXplOgogCQl7CiAJCQlvYmoubm9ybWFsaXplKCk7Ci0JCQlyZXR1cm4gVmFsdWUoKTsKKwkJCXJl
dHVybiBOVUxMOwogCQl9CiAJCWNhc2UgTm9kZUNvbnN0YW50czo6SXNTdXBwb3J0ZWQ6CiAJCXsK
SW5kZXg6IGtkb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vTm9kZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEu
MiBrZG9tL05vZGUuaAotLS0ga2RvbS9Ob2RlLmgJNyBBdWcgMjAwNSAwNjoxNzo0MyAtMDAwMAkx
LjIKKysrIGtkb20vTm9kZS5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTQ4MCw4ICs0
ODAsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX1BVVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJS0RPTV9ERUZJ
TkVfQ0FTVChOb2RlKQpJbmRleDoga2RvbS9Ob2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9Ob2RlTGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vTm9kZUxpc3QuY3BwCi0tLSBrZG9tL05v
ZGVMaXN0LmNwcAk5IEp1bCAyMDA1IDA2OjUzOjI1IC0wMDAwCTEuMQorKysga2RvbS9Ob2RlTGlz
dC5jcHAJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNDQsNyArNDQsNyBAQCB1c2luZyBu
YW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIk5vZGVMaXN0IiwgTm9k
ZUxpc3RQcm90bywgTm9kZUxpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIE5vZGVMaXN0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk5v
ZGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02MCw3ICs2MCw3IEBAIFZhbHVlIE5vZGVMaXN0
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZh
bHVlIE5vZGVMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKk5vZGVMaXN0UHJvdG9GdW5jOjpjYWxs
QXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlz
dCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoTm9kZUxpc3QpCiAJS0RPTV9FTlRFUl9TQUZF
CkBAIC02OSw3ICs2OSw3IEBAIFZhbHVlIE5vZGVMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0
ZSAKIAl7CiAJCWNhc2UgTm9kZUxpc3RDb25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2lnbmVk
IGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBp
bmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTU5vZGUoZXhl
Yywgb2JqLml0ZW0oaW5kZXgpKTsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga2RvbS9Ob2RlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vTm9kZUxp
c3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9Ob2Rl
TGlzdC5oCi0tLSBrZG9tL05vZGVMaXN0LmgJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEK
KysrIGtkb20vTm9kZUxpc3QuaAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC03OCw3ICs3
OCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJ
S0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07
CiB9OwogCkluZGV4OiBrZG9tL05vdGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL05vdGF0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9Ob3RhdGlvbi5jcHAKLS0tIGtkb20vTm90YXRpb24u
Y3BwCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4xCisrKyBrZG9tL05vdGF0aW9uLmNwcAk4
IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBOb3RhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpOb3RhdGlvbjo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VO
VEVSX1NBRkUKIApJbmRleDoga2RvbS9Ob3RhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vTm90YXRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9Ob3RhdGlvbi5oCi0tLSBrZG9tL05vdGF0aW9uLmgJ
OSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20vTm90YXRpb24uaAk4IEF1ZyAy
MDA1IDE5OjU0OjU5IC0wMDAwCkBAIC04MSw3ICs4MSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtE
T01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2Rv
bS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCi0tLSBrZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlv
bi5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20vUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmNwcAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC0zOCw3ICszOCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC01
Niw3ICs1Niw3IEBAIFZhbHVlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0VmFsdWVQcm8KIAly
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwdXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFs
dWUsIGludCkKK3ZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL1By
b2Nlc3NpbmdJbnN0cnVjdGlvbi5oCi0tLSBrZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCTkg
SnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4xCisrKyBrZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlv
bi5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTgxLDggKzgxLDggQEAgbmFtZXNwYWNl
IEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6
OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUlt
cCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga2RvbS9UZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL1RleHQuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL1RleHQuY3BwCi0tLSBr
ZG9tL1RleHQuY3BwCTkgSnVsIDIwMDUgMDY6NTM6MjUgLTAwMDAJMS4xCisrKyBrZG9tL1RleHQu
Y3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJUZXh0IiwgVGV4dFByb3Rv
LCBUZXh0UHJvdG9GdW5jKQogCi1WYWx1ZSBUZXh0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlRleHQ6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZF
CiAKQEAgLTYxLDcgKzYxLDcgQEAgVmFsdWUgVGV4dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKgogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgVGV4dFByb3RvRnVuYzo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1Zh
bHVlSW1wICpUZXh0UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMo
VGV4dCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTcwLDcgKzcwLDcgQEAgVmFsdWUgVGV4dFByb3Rv
RnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZQogCXsKIAkJY2FzZSBUZXh0Q29uc3RhbnRzOjpTcGxp
dFRleHQ6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJnc1swXS50b1VJbnQzMihl
eGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7
CiAJCQlyZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBvYmouc3BsaXRUZXh0KG9mZnNldCkpOwogCQl9
CiAJCWNhc2UgVGV4dENvbnN0YW50czo6UmVwbGFjZVdob2xlVGV4dDoKSW5kZXg6IGtkb20vVGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vVGV4dC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL1RleHQuaAot
LS0ga2RvbS9UZXh0LmgJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysrIGtkb20vVGV4
dC5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTEyMSw3ICsxMjEsNyBAQCBuYW1lc3Bh
Y2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJ
CUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vVHlwZUluZm8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vVHlwZUluZm8uY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL1R5cGVJbmZvLmNw
cAotLS0ga2RvbS9UeXBlSW5mby5jcHAJOSBKdWwgMjAwNSAwNjo1MzoyNSAtMDAwMAkxLjEKKysr
IGtkb20vVHlwZUluZm8uY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTQ0LDcgKzQ0
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJU
eXBlSW5mbyIsIFR5cGVJbmZvUHJvdG8sIFR5cGVJbmZvUHJvdG9GdW5jKQogCi1WYWx1ZSBUeXBl
SW5mbzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpUeXBlSW5mbzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTgsNyArNTgsNyBAQCBW
YWx1ZSBUeXBlSW5mbzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAJcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1WYWx1ZSBUeXBlSW5mb1Byb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpUeXBlSW5mb1By
b3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFR5cGVJbmZvKQogCUtE
T01fRU5URVJfU0FGRQpAQCAtNjksNyArNjksNyBAQCBWYWx1ZSBUeXBlSW5mb1Byb3RvRnVuYzo6
Y2FsbChFeGVjU3RhdGUgCiAJCXsKIAkJCWNvbnN0IERPTVN0cmluZyB0eXBlTmFtZXNwYWNlQXJn
ID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7CiAJCQljb25zdCBET01TdHJpbmcgdHlwZU5h
bWVBcmcgPSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzFdKTsKLQkJCWNvbnN0IHVuc2lnbmVkIGxv
bmcgZGVyaXZhdGlvbk1ldGhvZCA9IGFyZ3NbMl0udG9VSW50MzIoZXhlYyk7CisJCQljb25zdCB1
bnNpZ25lZCBsb25nIGRlcml2YXRpb25NZXRob2QgPSBhcmdzWzJdLT50b1VJbnQzMihleGVjKTsK
IAogCQkJcmV0dXJuIEtKUzo6Qm9vbGVhbihvYmouaXNEZXJpdmVkRnJvbSh0eXBlTmFtZXNwYWNl
QXJnLAogCQkJCQkJCQkJCQkJICB0eXBlTmFtZUFyZywgZGVyaXZhdGlvbk1ldGhvZCkpOwpJbmRl
eDoga2RvbS9UeXBlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vVHlwZUluZm8uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS9UeXBlSW5mby5oCi0tLSBrZG9tL1R5cGVJbmZvLmgJOSBKdWwgMjAwNSAwNjo1
MzoyNSAtMDAwMAkxLjEKKysrIGtkb20vVHlwZUluZm8uaAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0w
MDAwCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2Ny
aXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwogCX07CiAKIH07CkluZGV4OiBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTQ2hh
cnNldFJ1bGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBr
ZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5jcHAKLS0tIGtkb20vY3NzL0NTU0NoYXJzZXRSdWxlLmNw
cAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtkb20vY3NzL0NTU0NoYXJzZXRS
dWxlLmNwcAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBDU1NDaGFyc2V0UnVsZTo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkNTU0No
YXJzZXRSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTUwLDcgKzUwLDcgQEAgVmFsdWUgQ1NTQ2hhcnNl
dFJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9p
ZCBDU1NDaGFyc2V0UnVsZTo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIENTU0NoYXJzZXRSdWxlOjpwdXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUs
IGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9jc3MvQ1NTQ2hhcnNldFJ1
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9D
U1NDaGFyc2V0UnVsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5oCi0tLSBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVsZS5o
CTkgSnVsIDIwMDUgMDY6NTM6NDAgLTAwMDAJMS4xCisrKyBrZG9tL2Nzcy9DU1NDaGFyc2V0UnVs
ZS5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTUzLDggKzUzLDggQEAgbmFtZXNwYWNl
IEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6
OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3NzL0NTU0Zv
bnRGYWNlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRp
ZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAotLS0ga2RvbS9jc3Mv
Q1NTRm9udEZhY2VSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtk
b20vY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAt
MzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgQ1NT
Rm9udEZhY2VSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAorVmFsdWVJbXAgKkNTU0ZvbnRGYWNlUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRl
eDoga2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCi0t
LSBrZG9tL2Nzcy9DU1NGb250RmFjZVJ1bGUuaAk5IEp1bCAyMDA1IDA2OjUzOjQwIC0wMDAwCTEu
MQorKysga2RvbS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAw
MApAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BV
VAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2Rv
bS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCi0tLSBrZG9t
L2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysr
IGtkb20vY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAg
LTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIENT
U0ltcG9ydFJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqQ1NTSW1wb3J0UnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDog
a2RvbS9jc3MvQ1NTSW1wb3J0UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tkb20vY3NzL0NTU0ltcG9ydFJ1bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvQ1NTSW1wb3J0UnVsZS5oCi0tLSBrZG9tL2Nz
cy9DU1NJbXBvcnRSdWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MCAtMDAwMAkxLjEKKysrIGtkb20v
Y3NzL0NTU0ltcG9ydFJ1bGUuaAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC01Niw3ICs1
Niw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NNZWRp
YVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
Y3NzL0NTU01lZGlhUnVsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11
IC1yMS4yIGtkb20vY3NzL0NTU01lZGlhUnVsZS5jcHAKLS0tIGtkb20vY3NzL0NTU01lZGlhUnVs
ZS5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NNZWRp
YVJ1bGUuY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDU1NNZWRpYVJ1
bGUiLCBDU1NNZWRpYVJ1bGVQcm90bywgQ1NTTWVkaWFSdWxlUHJvdG9GdW5jKQogCi1WYWx1ZSBD
U1NNZWRpYVJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqQ1NTTWVkaWFSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC02MCw3
ICs2MCw3IEBAIFZhbHVlIENTU01lZGlhUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAlyZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIENTU01lZGlhUnVsZVByb3RvRnVuYzo6Y2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVl
SW1wICpDU1NNZWRpYVJ1bGVQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tf
VEhJUyhDU1NNZWRpYVJ1bGUpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03MCwxMiArNzAsMTIgQEAg
VmFsdWUgQ1NTTWVkaWFSdWxlUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdAogCQljYXNlIENTU01lZGlh
UnVsZUNvbnN0YW50czo6SW5zZXJ0UnVsZToKIAkJewogCQkJRE9NU3RyaW5nIHJ1bGUgPSB0b0RP
TVN0cmluZyhleGVjLCBhcmdzWzBdKTsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFd
LnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0tPnRvVUlu
dDMyKGV4ZWMpOwogCQkJcmV0dXJuIE51bWJlcihvYmouaW5zZXJ0UnVsZShydWxlLCBpbmRleCkp
OwogCQl9CiAJCWNhc2UgQ1NTTWVkaWFSdWxlQ29uc3RhbnRzOjpEZWxldGVSdWxlOgogCQl7Ci0J
CQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2ln
bmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCW9iai5kZWxldGVS
dWxlKGluZGV4KTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQpJbmRleDoga2RvbS9jc3Mv
Q1NTTWVkaWFSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a2RvbS9jc3MvQ1NTTWVkaWFSdWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtkb20vY3NzL0NTU01lZGlhUnVsZS5oCi0tLSBrZG9tL2Nzcy9DU1NNZWRpYVJ1
bGUuaAk5IEp1bCAyMDA1IDA2OjUzOjQwIC0wMDAwCTEuMQorKysga2RvbS9jc3MvQ1NTTWVkaWFS
dWxlLmgJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3Bh
Y2UgS0RPTQogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9jc3MvQ1NTUGFnZVJ1bGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1BhZ2VSdWxl
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3Mv
Q1NTUGFnZVJ1bGUuY3BwCi0tLSBrZG9tL2Nzcy9DU1NQYWdlUnVsZS5jcHAJMjkgSnVsIDIwMDUg
MDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NQYWdlUnVsZS5jcHAJOCBBdWcgMjAw
NSAxOTo1NDo1OSAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwog
QGVuZAogKi8KIAotVmFsdWUgQ1NTUGFnZVJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqQ1NTUGFnZVJ1bGU6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRv
a2VuKQogCXsKQEAgLTU0LDcgKzU0LDcgQEAgVmFsdWUgQ1NTUGFnZVJ1bGU6OmdldFZhbHVlUHJv
cGVydHkoRXhlYwogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBDU1NQYWdlUnVsZTo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUg
JnZhbHVlLCBpbnQpCit2b2lkIENTU1BhZ2VSdWxlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApJbmRleDoga2RvbS9jc3MvQ1NTUGFnZVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NQYWdlUnVsZS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9DU1NQYWdlUnVsZS5oCi0t
LSBrZG9tL2Nzcy9DU1NQYWdlUnVsZS5oCTkgSnVsIDIwMDUgMDY6NTM6NDEgLTAwMDAJMS4xCisr
KyBrZG9tL2Nzcy9DU1NQYWdlUnVsZS5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTU2
LDggKzU2LDggQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsKIH07CiAK
SW5kZXg6IGtkb20vY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmNwcAotLS0ga2RvbS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCTI5IEp1bCAy
MDA1IDA2OjExOjE2IC0wMDAwCTEuMgorKysga2RvbS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3Bw
CTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJDU1NQcmltaXRpdmVWYWx1ZSIs
IENTU1ByaW1pdGl2ZVZhbHVlUHJvdG8sIENTU1ByaW1pdGl2ZVZhbHVlUHJvdG9GdW5jKQogCi1W
YWx1ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkNTU1ByaW1pdGl2ZVZhbHVlOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsK
QEAgLTY2LDcgKzY2LDcgQEAgVmFsdWUgQ1NTUHJpbWl0aXZlVmFsdWU6OmdldFZhbHVlUHJvcGVy
dAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgQ1NTUHJpbWl0aXZlVmFsdWVQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCitWYWx1ZUltcCAqQ1NTUHJpbWl0aXZlVmFsdWVQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQogewogCUtET01fQ0hFQ0tfVEhJUyhDU1NQcmltaXRpdmVWYWx1ZSkKIAlLRE9NX0VOVEVSX1NB
RkUKQEAgLTc1LDE5ICs3NSwxOSBAQCBWYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZVByb3RvRnVuYzo6
Y2FsbChFCiAJewogCQljYXNlIENTU1ByaW1pdGl2ZVZhbHVlQ29uc3RhbnRzOjpTZXRGbG9hdFZh
bHVlOgogCQl7Ci0JCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFyZ3NbMF0udG9VSW50MTYo
ZXhlYyk7Ci0JCQlmbG9hdCBmbG9hdFZhbHVlID0gYXJnc1sxXS50b051bWJlcihleGVjKTsKKwkJ
CXVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0gYXJnc1swXS0+dG9VSW50MTYoZXhlYyk7CisJCQlm
bG9hdCBmbG9hdFZhbHVlID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlvYmouc2V0Rmxv
YXRWYWx1ZSh1bml0VHlwZSwgZmxvYXRWYWx1ZSk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJ
CX0KIAkJY2FzZSBDU1NQcmltaXRpdmVWYWx1ZUNvbnN0YW50czo6R2V0RmxvYXRWYWx1ZToKIAkJ
ewotCQkJdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUgPSBhcmdzWzBdLnRvVUludDE2KGV4ZWMpOwor
CQkJdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUgPSBhcmdzWzBdLT50b1VJbnQxNihleGVjKTsKIAkJ
CXJldHVybiBOdW1iZXIob2JqLmdldEZsb2F0VmFsdWUodW5pdFR5cGUpKTsKIAkJfQogCQljYXNl
IENTU1ByaW1pdGl2ZVZhbHVlQ29uc3RhbnRzOjpTZXRTdHJpbmdWYWx1ZToKIAkJewotCQkJdW5z
aWduZWQgc2hvcnQgc3RyaW5nVHlwZSA9IGFyZ3NbMF0udG9VSW50MTYoZXhlYyk7CisJCQl1bnNp
Z25lZCBzaG9ydCBzdHJpbmdUeXBlID0gYXJnc1swXS0+dG9VSW50MTYoZXhlYyk7CiAJCQlET01T
dHJpbmcgc3RyaW5nVmFsdWUgPSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzFdKTsKIAkJCW9iai5z
ZXRTdHJpbmdWYWx1ZShzdHJpbmdUeXBlLCBzdHJpbmdWYWx1ZSk7CiAJCQlyZXR1cm4gVW5kZWZp
bmVkKCk7CkluZGV4OiBrZG9tL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmgKLS0tIGtkb20vY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJOSBKdWwgMjAw
NSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJOCBB
dWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgS0RPTQog
CQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAq
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
IAl9OwogfTsKIApJbmRleDoga2RvbS9jc3MvQ1NTUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTUnVsZS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0NTU1J1bGUuY3BwCi0tLSBr
ZG9tL2Nzcy9DU1NSdWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAwMAkxLjIKKysrIGtk
b20vY3NzL0NTU1J1bGUuY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTQzLDcgKzQz
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIENTU1J1bGU6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqQ1NTUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNjIsNyArNjIsNyBAQCBWYWx1ZSBDU1NS
dWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci12b2lkIENTU1J1bGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBDU1NSdWxlOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsK
IAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9jc3MvQ1NTUnVsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1J1bGUuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvQ1NTUnVsZS5oCi0t
LSBrZG9tL2Nzcy9DU1NSdWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtk
b20vY3NzL0NTU1J1bGUuaAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC02Miw4ICs2Miw4
IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CQkKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CQkKIAl9OwogCiAv
LyB0ZW1wbGF0ZSBmb3IgZWFzaW5nIGFzc2lnbmluZyBvZiBDU1NSdWxlcyB0byBkZXJpdmVkIGNs
YXNzZXMuCkluZGV4OiBrZG9tL2Nzcy9DU1NSdWxlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTUnVsZUxpc3QuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9DU1NSdWxlTGlzdC5j
cHAKLS0tIGtkb20vY3NzL0NTU1J1bGVMaXN0LmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAw
MAkxLjIKKysrIGtkb20vY3NzL0NTU1J1bGVMaXN0LmNwcAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0w
MDAwCkBAIC00Miw3ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVN
RU5UX1BST1RPVFlQRSgiQ1NTUnVsZUxpc3QiLCBDU1NSdWxlTGlzdFByb3RvLCBDU1NSdWxlTGlz
dFByb3RvRnVuYykKIAotVmFsdWUgQ1NTUnVsZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpDU1NSdWxlTGlzdDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikK
IAl7CkBAIC01NSw3ICs1NSw3IEBAIFZhbHVlIENTU1J1bGVMaXN0OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWMKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIENTU1J1bGVMaXN0UHJvdG9G
dW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQorVmFsdWVJbXAgKkNTU1J1bGVMaXN0UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlL
RE9NX0NIRUNLX1RISVMoQ1NTUnVsZUxpc3QpCiAKQEAgLTYzLDcgKzYzLDcgQEAgVmFsdWUgQ1NT
UnVsZUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YQogCXsKIAkJY2FzZSBDU1NSdWxlTGlzdENv
bnN0YW50czo6SXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9V
SW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIo
ZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NQ1NTUnVsZShleGVjLCBvYmouaXRlbShpbmRleCkpOwog
CQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrZG9tL2Nzcy9DU1NSdWxlTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1J1bGVMaXN0Lmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL0NTU1J1bGVM
aXN0LmgKLS0tIGtkb20vY3NzL0NTU1J1bGVMaXN0LmgJOSBKdWwgMjAwNSAwNjo1Mzo0MSAtMDAw
MAkxLjEKKysrIGtkb20vY3NzL0NTU1J1bGVMaXN0LmgJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAw
MApAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlw
dCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owog
CX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NTdHlsZURlY2xh
cmF0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2Rv
bS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKLS0tIGtkb20vY3NzL0NTU1N0eWxlRGVjbGFy
YXRpb24uY3BwCTI5IEp1bCAyMDA1IDA2OjExOjE2IC0wMDAwCTEuMgorKysga2RvbS9jc3MvQ1NT
U3R5bGVEZWNsYXJhdGlvbi5jcHAJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNTIsNyAr
NTIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUo
IkNTU1N0eWxlRGVjbGFyYXRpb24iLCBDU1NTdHlsZURlY2xhcmF0aW9uUHJvdG8sIENTU1N0eWxl
RGVjbGFyYXRpb25Qcm90b0Z1bmMpCiAKLVZhbHVlIENTU1N0eWxlRGVjbGFyYXRpb246OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNjksNyArNjksNyBAQCBW
YWx1ZSBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRWYWx1ZVByb3BlCiAJcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi12b2lkIENTU1N0eWxlRGVjbGFyYXRpb246OnB1dFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBD
U1NTdHlsZURlY2xhcmF0aW9uOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAt
ODUsNyArODUsNyBAQCB2b2lkIENTU1N0eWxlRGVjbGFyYXRpb246OnB1dFZhbHVlUHJvcGVyCiAJ
S0RPTV9MRUFWRV9TQUZFKERPTUV4Y2VwdGlvbikKIH0KIAotVmFsdWUgQ1NTU3R5bGVEZWNsYXJh
dGlvblByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29u
c3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpDU1NTdHlsZURlY2xhcmF0aW9uUHJvdG9GdW5jOjpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoQ1NTU3R5bGVEZWNsYXJhdGlvbikKIAlL
RE9NX0VOVEVSX1NBRkUKQEAgLTEyMiw3ICsxMjIsNyBAQCBWYWx1ZSBDU1NTdHlsZURlY2xhcmF0
aW9uUHJvdG9GdW5jOjpjYWxsCiAJCX0KIAkJY2FzZSBDU1NTdHlsZURlY2xhcmF0aW9uQ29uc3Rh
bnRzOjpJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQz
MihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVj
KTsKIAkJCXJldHVybiBnZXRET01TdHJpbmcob2JqLml0ZW0oaW5kZXgpKTsKIAkJfQogCQlkZWZh
dWx0OgpJbmRleDoga2RvbS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24u
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvQ1NT
U3R5bGVEZWNsYXJhdGlvbi5oCi0tLSBrZG9tL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgJOSBK
dWwgMjAwNSAwNjo1Mzo0MSAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1N0eWxlRGVjbGFyYXRp
b24uaAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC03Miw4ICs3Miw4IEBAIG5hbWVzcGFj
ZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pT
OjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsJCQorCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1
ZUltcCAqdmFsdWUsIGludCBhdHRyKTsJCQogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NT
dHlsZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vY3NzL0NTU1N0eWxlUnVsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1w
IC11IC1yMS4yIGtkb20vY3NzL0NTU1N0eWxlUnVsZS5jcHAKLS0tIGtkb20vY3NzL0NTU1N0eWxl
UnVsZS5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9DU1NT
dHlsZVJ1bGUuY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTQwLDcgKzQwLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIENTU1N0eWxlUnVsZTo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1w
ICpDU1NTdHlsZVJ1bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTU1LDcgKzU1LDcgQEAgVmFsdWUg
Q1NTU3R5bGVSdWxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQogCXJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotdm9pZCBDU1NTdHlsZVJ1bGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBDU1NTdHlsZVJ1bGU6
OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2
YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL2Nzcy9DU1NTdHls
ZVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nz
cy9DU1NTdHlsZVJ1bGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga2RvbS9jc3MvQ1NTU3R5bGVSdWxlLmgKLS0tIGtkb20vY3NzL0NTU1N0eWxlUnVsZS5oCTkg
SnVsIDIwMDUgMDY6NTM6NDEgLTAwMDAJMS4xCisrKyBrZG9tL2Nzcy9DU1NTdHlsZVJ1bGUuaAk4
IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC01NSw4ICs1NSw4IEBAIG5hbWVzcGFjZSBLRE9N
CiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1
ZSAmdmFsdWUsIGludCBhdHRyKTsJCQorCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAq
dmFsdWUsIGludCBhdHRyKTsJCQogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9DU1NTdHlsZVNo
ZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nz
cy9DU1NTdHlsZVNoZWV0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUg
LXIxLjIga2RvbS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKLS0tIGtkb20vY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwCTI5IEp1bCAyMDA1IDA2OjExOjE2IC0wMDAwCTEuMgorKysga2RvbS9jc3MvQ1NTU3R5
bGVTaGVldC5jcHAJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNDcsNyArNDcsNyBAQCB1
c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkNTU1N0eWxl
U2hlZXQiLCBDU1NTdHlsZVNoZWV0UHJvdG8sIENTU1N0eWxlU2hlZXRQcm90b0Z1bmMpCiAKLVZh
bHVlIENTU1N0eWxlU2hlZXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqQ1NTU3R5bGVTaGVldDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpA
QCAtNjIsNyArNjIsNyBAQCBWYWx1ZSBDU1NTdHlsZVNoZWV0OjpnZXRWYWx1ZVByb3BlcnR5KEV4
CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBDU1NTdHlsZVNoZWV0UHJvdG9GdW5j
OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQorVmFsdWVJbXAgKkNTU1N0eWxlU2hlZXRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtE
T01fQ0hFQ0tfVEhJUyhDU1NTdHlsZVNoZWV0KQogCUtET01fRU5URVJfU0FGRQpAQCAtNzIsNyAr
NzIsNyBAQCBWYWx1ZSBDU1NTdHlsZVNoZWV0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTCiAJCWNhc2Ug
Q1NTU3R5bGVTaGVldENvbnN0YW50czo6SW5zZXJ0UnVsZToKIAkJewogCQkJRE9NU3RyaW5nIHJ1
bGUgPSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzBdKTsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgg
PSBhcmdzWzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3Nb
MV0tPnRvVUludDMyKGV4ZWMpOwogCQkJb2JqLmluc2VydFJ1bGUocnVsZSwgaW5kZXgpOwogCQkJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrZG9tL2Nzcy9DU1NTdHlsZVNoZWV0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTU3R5
bGVTaGVldC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9t
L2Nzcy9DU1NTdHlsZVNoZWV0LmgKLS0tIGtkb20vY3NzL0NTU1N0eWxlU2hlZXQuaAk5IEp1bCAy
MDA1IDA2OjUzOjQxIC0wMDAwCTEuMQorKysga2RvbS9jc3MvQ1NTU3R5bGVTaGVldC5oCTggQXVn
IDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEtET00KIAkJ
S0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtkb20vY3NzL0NTU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9DU1NWYWx1ZS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0NTU1ZhbHVlLmNwcAotLS0g
a2RvbS9jc3MvQ1NTVmFsdWUuY3BwCTI5IEp1bCAyMDA1IDA2OjExOjE2IC0wMDAwCTEuMgorKysg
a2RvbS9jc3MvQ1NTVmFsdWUuY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTM4LDcg
KzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLVZhbHVlIENTU1ZhbHVl
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqQ1NTVmFsdWU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTMsNyArNTMsNyBAQCBWYWx1ZSBDU1NWYWx1
ZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12
b2lkIENTU1ZhbHVlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgQ1NTVmFsdWU6OnB1dFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewog
CUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrZG9tL2Nzcy9DU1NWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NTU1ZhbHVlLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL0NTU1ZhbHVlLmgK
LS0tIGtkb20vY3NzL0NTU1ZhbHVlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysr
IGtkb20vY3NzL0NTU1ZhbHVlLmgJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNjIsOCAr
NjIsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQK
IAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwkJCisJ
CUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwkJCiAJfTsK
IAogLy8gdGVtcGxhdGUgZm9yIGVhc2luZyBhc3NpZ25pbmcgb2YgQ1NTVmFsdWVzIHRvIGRlcml2
ZWQgY2xhc3Nlcy4KSW5kZXg6IGtkb20vY3NzL0NTU1ZhbHVlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ1NTVmFsdWVMaXN0LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvQ1NTVmFs
dWVMaXN0LmNwcAotLS0ga2RvbS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAkyOSBKdWwgMjAwNSAwNjox
MToxNiAtMDAwMAkxLjIKKysrIGtkb20vY3NzL0NTU1ZhbHVlTGlzdC5jcHAJOCBBdWcgMjAwNSAx
OTo1NDo1OSAtMDAwMApAQCAtNDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBL
RE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkNTU1ZhbHVlTGlzdCIsIENTU1ZhbHVlTGlzdFByb3Rv
LCBDU1NWYWx1ZUxpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIENTU1ZhbHVlTGlzdDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkNTU1ZhbHVl
TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAogewog
CXN3aXRjaCh0b2tlbikKIAl7CkBAIC01Myw3ICs1Myw3IEBAIFZhbHVlIENTU1ZhbHVlTGlzdDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIENT
U1ZhbHVlTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpDU1NWYWx1ZUxpc3RQcm90b0Z1bmM6OmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhDU1NWYWx1ZUxpc3QpCiAKQEAgLTYxLDcg
KzYxLDcgQEAgVmFsdWUgQ1NTVmFsdWVMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdAogCXsKIAkJ
Y2FzZSBDU1NWYWx1ZUxpc3RDb25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcg
aW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9
IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTUNTU1ZhbHVlKGV4ZWMs
IG9iai5pdGVtKGluZGV4KSk7CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtkb20vY3NzL0NTU1Zh
bHVlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
Y3NzL0NTU1ZhbHVlTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrZG9tL2Nzcy9DU1NWYWx1ZUxpc3QuaAotLS0ga2RvbS9jc3MvQ1NTVmFsdWVMaXN0LmgJ
OSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20vY3NzL0NTU1ZhbHVlTGlzdC5o
CTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEtE
T00KIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3NzL0NvdW50ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0NvdW50ZXIuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAtdSAtcjEuMiBrZG9tL2Nzcy9Db3VudGVyLmNwcAot
LS0ga2RvbS9jc3MvQ291bnRlci5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisr
KyBrZG9tL2Nzcy9Db3VudGVyLmNwcAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC0zOSw3
ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBDb3VudGVy
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqQ291bnRlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25z
dAogewogCXN3aXRjaCh0b2tlbikKIAl7CkluZGV4OiBrZG9tL2Nzcy9Db3VudGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvQ291bnRlci5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Nzcy9Db3VudGVy
LmgKLS0tIGtkb20vY3NzL0NvdW50ZXIuaAk5IEp1bCAyMDA1IDA2OjUzOjQyIC0wMDAwCTEuMQor
Kysga2RvbS9jc3MvQ291bnRlci5oCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTU2LDcg
KzU2LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgog
CQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJ
bmRleDoga2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL0RvY3VtZW50U3R5bGUuY3Bw
Ci0tLSBrZG9tL2Nzcy9Eb2N1bWVudFN0eWxlLmNwcAkyOSBKdWwgMjAwNSAwNjoxMToxNiAtMDAw
MAkxLjIKKysrIGtkb20vY3NzL0RvY3VtZW50U3R5bGUuY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkg
LTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAK
LVZhbHVlIERvY3VtZW50U3R5bGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRTdHlsZTo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJ
ewpJbmRleDoga2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL0RvY3VtZW50U3R5bGUuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvRG9jdW1lbnRTdHlsZS5oCi0t
LSBrZG9tL2Nzcy9Eb2N1bWVudFN0eWxlLmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEK
KysrIGtkb20vY3NzL0RvY3VtZW50U3R5bGUuaAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBA
IC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNl
Y3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVl
SW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9NZWRpYUxpc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL01lZGlhTGlzdC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL01lZGlhTGlz
dC5jcHAKLS0tIGtkb20vY3NzL01lZGlhTGlzdC5jcHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAw
MDAJMS4yCisrKyBrZG9tL2Nzcy9NZWRpYUxpc3QuY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAw
MDAKQEAgLTQ2LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1F
TlRfUFJPVE9UWVBFKCJNZWRpYUxpc3QiLCBNZWRpYUxpc3RQcm90bywgTWVkaWFMaXN0UHJvdG9G
dW5jKQogCi1WYWx1ZSBNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNjEs
NyArNjEsNyBAQCBWYWx1ZSBNZWRpYUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0CiAJcmV0
dXJuIFVuZGVmaW5lZCgpOwogfTsKIAotdm9pZCBNZWRpYUxpc3Q6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9p
ZCBNZWRpYUxpc3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03Nyw3ICs3
Nyw3IEBAIHZvaWQgTWVkaWFMaXN0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlLRE9NX0xF
QVZFX1NBRkUoRE9NRXhjZXB0aW9uKQogfQogCi1WYWx1ZSBNZWRpYUxpc3RQcm90b0Z1bmM6OmNh
bGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitW
YWx1ZUltcCAqTWVkaWFMaXN0UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4
ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNL
X1RISVMoTWVkaWFMaXN0KQogCUtET01fRU5URVJfU0FGRQpAQCAtODYsNyArODYsNyBAQCBWYWx1
ZSBNZWRpYUxpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlCiAJewogCQljYXNlIE1lZGlhTGlz
dENvbnN0YW50czo6SXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0u
dG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50
MzIoZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NU3RyaW5nKG9iai5pdGVtKGluZGV4KSk7CiAJCX0K
IAkJY2FzZSBNZWRpYUxpc3RDb25zdGFudHM6OkRlbGV0ZU1lZGl1bToKSW5kZXg6IGtkb20vY3Nz
L01lZGlhTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vY3NzL01lZGlhTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrZG9tL2Nzcy9NZWRpYUxpc3QuaAotLS0ga2RvbS9jc3MvTWVkaWFMaXN0LmgJOSBKdWwg
MjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20vY3NzL01lZGlhTGlzdC5oCTggQXVnIDIw
MDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTYxLDggKzYxLDggQEAgbmFtZXNwYWNlIEtET00KIAkJS0RP
TV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1
ZSwgaW50IGF0dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwg
aW50IGF0dHIpOwkJCiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3NzL1JHQkNvbG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9SR0JDb2xvci5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3NzL1JH
QkNvbG9yLmNwcAotLS0ga2RvbS9jc3MvUkdCQ29sb3IuY3BwCTI5IEp1bCAyMDA1IDA2OjExOjE2
IC0wMDAwCTEuMgorKysga2RvbS9jc3MvUkdCQ29sb3IuY3BwCTggQXVnIDIwMDUgMTk6NTQ6NTkg
LTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEtET00KIEBlbmQKICovCiAKLVZhbHVl
IFJHQkNvbG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAorVmFsdWVJbXAgKlJHQkNvbG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkluZGV4OiBrZG9tL2Nz
cy9SR0JDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vY3NzL1JHQkNvbG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vY3NzL1JHQkNvbG9yLmgKLS0tIGtkb20vY3NzL1JHQkNvbG9yLmgJOSBKdWwgMjAw
NSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20vY3NzL1JHQkNvbG9yLmgJOCBBdWcgMjAwNSAx
OTo1NDo1OSAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzog
Ly8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2Nzcy9SZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9SZWN0LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9jc3MvUmVjdC5jcHAKLS0t
IGtkb20vY3NzL1JlY3QuY3BwCTI5IEp1bCAyMDA1IDA2OjExOjE2IC0wMDAwCTEuMgorKysga2Rv
bS9jc3MvUmVjdC5jcHAJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNDEsNyArNDEsNyBA
QCBuYW1lc3BhY2UgS0RPTQogQGVuZAogKi8KIAotS0pTOjpWYWx1ZSBSZWN0OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorS0pTOjpWYWx1ZUltcCAq
UmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDoga2RvbS9jc3MvUmVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vY3NzL1JlY3QuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3MvUmVjdC5oCi0tLSBrZG9t
L2Nzcy9SZWN0LmgJOSBKdWwgMjAwNSAwNjo1Mzo0MiAtMDAwMAkxLjEKKysrIGtkb20vY3NzL1Jl
Y3QuaAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFj
ZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3NzL1N0
eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vY3NzL1N0eWxlU2hlZXQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtcCAt
dSAtcjEuMiBrZG9tL2Nzcy9TdHlsZVNoZWV0LmNwcAotLS0ga2RvbS9jc3MvU3R5bGVTaGVldC5j
cHAJMjkgSnVsIDIwMDUgMDY6MTE6MTYgLTAwMDAJMS4yCisrKyBrZG9tL2Nzcy9TdHlsZVNoZWV0
LmNwcAk4IEF1ZyAyMDA1IDE5OjU0OjU5IC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBTdHlsZVNoZWV0OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlN0eWxlU2hl
ZXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTY4LDEyICs2OCwxMiBAQCBWYWx1ZSBTdHlsZVNoZWV0
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfTsKIAotdm9p
ZCBTdHlsZVNoZWV0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU3R5bGVTaGVldDo6cHV0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7
CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTdHlsZVNoZWV0Q29uc3RhbnRzOjpEaXNhYmxl
ZDoKLQkJCXNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisJCQlzZXREaXNhYmxl
ZCh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJa2RX
YXJuaW5nKCkgPDwgIlVuaGFuZGxlZCB0b2tlbiBpbiAiIDw8IGtfZnVuY2luZm8gPDwgIiA6ICIg
PDwgdG9rZW4gPDwgZW5kbDsKSW5kZXg6IGtkb20vY3NzL1N0eWxlU2hlZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9TdHlsZVNoZWV0Lmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vY3NzL1N0eWxlU2hl
ZXQuaAotLS0ga2RvbS9jc3MvU3R5bGVTaGVldC5oCTkgSnVsIDIwMDUgMDY6NTM6NDIgLTAwMDAJ
MS4xCisrKyBrZG9tL2Nzcy9TdHlsZVNoZWV0LmgJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApA
QCAtNjcsOCArNjcsOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJ
S0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0
dHIpOwkJCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIp
OwkJCiAJfTsKIH07CiAKSW5kZXg6IGtkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2Nzcy9TdHlsZVNoZWV0TGlz
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIGtkb20vY3Nz
L1N0eWxlU2hlZXRMaXN0LmNwcAotLS0ga2RvbS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCTI5IEp1
bCAyMDA1IDA2OjExOjE2IC0wMDAwCTEuMgorKysga2RvbS9jc3MvU3R5bGVTaGVldExpc3QuY3Bw
CTggQXVnIDIwMDUgMTk6NTQ6NTkgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJTdHlsZVNoZWV0TGlzdCIsIFN0
eWxlU2hlZXRMaXN0UHJvdG8sIFN0eWxlU2hlZXRMaXN0UHJvdG9GdW5jKQogCi1WYWx1ZSBTdHls
ZVNoZWV0TGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKlN0eWxlU2hlZXRMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTU1LDcgKzU1LDcg
QEAgVmFsdWUgU3R5bGVTaGVldExpc3Q6OmdldFZhbHVlUHJvcGVydHkoRQogCXJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotVmFsdWUgU3R5bGVTaGVldExpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAq
U3R5bGVTaGVldExpc3RQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJ
UyhTdHlsZVNoZWV0TGlzdCkKIApAQCAtNjMsNyArNjMsNyBAQCBWYWx1ZSBTdHlsZVNoZWV0TGlz
dFByb3RvRnVuYzo6Y2FsbChFeGVjCiAJewogCQljYXNlIFN0eWxlU2hlZXRMaXN0Q29uc3RhbnRz
OjpJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihl
eGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsK
IAkJCXJldHVybiBzYWZlX2NhY2hlPFN0eWxlU2hlZXQ+KGV4ZWMsIG9iai5pdGVtKGluZGV4KSk7
CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtkb20vY3NzL1N0eWxlU2hlZXRMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9jc3MvU3R5bGVTaGVldExp
c3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9jc3Mv
U3R5bGVTaGVldExpc3QuaAotLS0ga2RvbS9jc3MvU3R5bGVTaGVldExpc3QuaAk5IEp1bCAyMDA1
IDA2OjUzOjQyIC0wMDAwCTEuMQorKysga2RvbS9jc3MvU3R5bGVTaGVldExpc3QuaAk4IEF1ZyAy
MDA1IDE5OjU0OjU5IC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVi
bGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJ
CUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vZGF0YS9nZW5lcmF0ZWRkYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2RhdGEv
Z2VuZXJhdGVkZGF0YS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vZGF0YS9nZW5lcmF0ZWRkYXRhLmNwcAotLS0ga2RvbS9kYXRhL2dlbmVyYXRlZGRh
dGEuY3BwCTkgSnVsIDIwMDUgMDY6NTM6NTcgLTAwMDAJMS4xCisrKyBrZG9tL2RhdGEvZ2VuZXJh
dGVkZGF0YS5jcHAJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtMjg4LDcgKzI4OCw3IEBA
IGJvb2wgQWJzdHJhY3RWaWV3OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVZhbHVlIEFic3RyYWN0Vmlldzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpBYnN0cmFjdFZpZXc6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPEFic3RyYWN0Vmlldz4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQpAQCAtMzAzLDE2ICszMDMsMTYgQEAgQWJzdHJhY3RWaWV3IEtET006OnRv
QWJzdHJhY3RWaWV3KEtKUzo6RQogICAgIHJldHVybiBBYnN0cmFjdFZpZXc6Om51bGw7CiB9CiAK
LVZhbHVlIEFic3RyYWN0Vmlldzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpBYnN0cmFjdFZpZXc6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBBYnN0cmFjdFZpZXc6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpBYnN0cmFjdFZpZXc6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJl
dGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkFic3Ry
YWN0Vmlldzo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zMjAsNyArMzIwLDcgQEAg
T2JqZWN0SW1wICpBYnN0cmFjdFZpZXc6OmJyaWRnZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcg
RE9NQnJpZGdlPEFic3RyYWN0Vmlldz4ocDEsc3RhdGljX2Nhc3Q8QWJzdHJhY3RWaWV3OjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQWJzdHJhY3RWaWV3OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKkFic3RyYWN0Vmlldzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8QWJzdHJhY3RWaWV3PihwMSxzdGF0aWNf
Y2FzdDxBYnN0cmFjdFZpZXc6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzMzLDcgKzMzMyw3IEBA
IGJvb2wgQXR0cjo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMSxjb24KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVZhbHVlIEF0dHI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqQXR0cjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3Vw
R2V0VmFsdWU8QXR0cj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzQ2LDcg
KzM0Niw3IEBAIEF0dHIgS0RPTTo6dG9BdHRyKEtKUzo6RXhlY1N0YXRlICpleGVjLCAKICAgICBy
ZXR1cm4gQXR0cjo6bnVsbDsKIH0KIAotVmFsdWUgQXR0cjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpBdHRyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIGlmKE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5v
ZGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzY2LDEwICsz
NjYsMTAgQEAgYm9vbCBBdHRyOjpwdXRJblBhcmVudHMoUFVUX01FVEhPRF9BUkdTKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IEF0dHI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorT2JqZWN0SW1wICpBdHRyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90
eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1
cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpBdHRyOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTM3Nyw3ICszNzcsNyBAQCBPYmplY3RJbXAgKkF0dHI6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxBdHRyPihwMSxzdGF0aWNfY2FzdDxB
dHRyOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQXR0cjo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK1ZhbHVlSW1wICpBdHRyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxBdHRyPihwMSxzdGF0aWNfY2FzdDxBdHRyOjpQcml2
YXRlICo+KGQpKTsKIH0KQEAgLTM5MCwxMiArMzkwLDEyIEBAIGJvb2wgQ1NTQ2hhcnNldFJ1bGU6
Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENTU0No
YXJzZXRSdWxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU0NoYXJz
ZXRSdWxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBH
ZXRWYWx1ZTxDU1NDaGFyc2V0UnVsZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQog
Ci1WYWx1ZSBDU1NDaGFyc2V0UnVsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpDU1NDaGFyc2V0UnVsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICBpZihDU1NSdWxlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBD
U1NSdWxlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQxNSwx
MCArNDE1LDEwIEBAIGJvb2wgQ1NTQ2hhcnNldFJ1bGU6OnB1dEluUGFyZW50cyhQVVRfTUUKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBDU1NDaGFyc2V0UnVsZTo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkNTU0NoYXJzZXRSdWxlOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRl
cigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpDU1NDaGFy
c2V0UnVsZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00MjYsNyArNDI2LDcgQEAg
T2JqZWN0SW1wICpDU1NDaGFyc2V0UnVsZTo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBuZXcg
RE9NUldCcmlkZ2U8Q1NTQ2hhcnNldFJ1bGU+KHAxLHN0YXRpY19jYXN0PENTU0NoYXJzZXRSdWxl
OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTQ2hhcnNldFJ1bGU6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqQ1NTQ2hhcnNldFJ1bGU6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU0NoYXJzZXRSdWxl
PihwMSxzdGF0aWNfY2FzdDxDU1NDaGFyc2V0UnVsZTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC00
MzksMTIgKzQzOSwxMiBAQCBib29sIENTU0ZvbnRGYWNlUnVsZTo6aGFzUHJvcGVydHkoRXhlY1N0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDU1NGb250RmFjZVJ1bGU6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTRm9udEZhY2VSdWxlOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxDU1NGb250RmFj
ZVJ1bGU+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgQ1NTRm9udEZh
Y2VSdWxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNT
U0ZvbnRGYWNlUnVsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICBpZihDU1NSdWxlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBDU1NSdWxlOjpnZXQocDEs
cDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQ2NCwxMCArNDY0LDEwIEBAIGJv
b2wgQ1NTRm9udEZhY2VSdWxlOjpwdXRJblBhcmVudHMoUFVUX00KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU9iamVjdCBDU1NGb250RmFjZVJ1bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorT2JqZWN0SW1wICpDU1NGb250RmFjZVJ1bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5P
YmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkp
OworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkNTU0ZvbnRGYWNlUnVsZTo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00NzUsNyArNDc1LDcgQEAgT2JqZWN0SW1wICpD
U1NGb250RmFjZVJ1bGU6OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8
Q1NTRm9udEZhY2VSdWxlPihwMSxzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGU6OlByaXZhdGUg
Kj4oZCkpOwogfQogCi1WYWx1ZSBDU1NGb250RmFjZVJ1bGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqQ1NTRm9udEZhY2VSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxDU1NGb250RmFjZVJ1bGU+KHAxLHN0
YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC00ODgsMTIg
KzQ4OCwxMiBAQCBib29sIENTU0ltcG9ydFJ1bGU6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDU1NJbXBvcnRSdWxlOjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU0ltcG9ydFJ1bGU6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPENTU0ltcG9ydFJ1bGU+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgQ1NTSW1wb3J0UnVsZTo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NJbXBvcnRSdWxlOjpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKENTU1J1bGU6Omhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENTU1J1bGU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwpAQCAtNTEzLDEwICs1MTMsMTAgQEAgYm9vbCBDU1NJbXBvcnRSdWxl
OjpwdXRJblBhcmVudHMoUFVUX01FVAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IENT
U0ltcG9ydFJ1bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpD
U1NJbXBvcnRSdWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpDU1NJbXBvcnRSdWxlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTUyNCw3ICs1MjQsNyBAQCBPYmplY3RJbXAgKkNTU0ltcG9ydFJ1bGU6OmJyaWRnZShF
eGVjU3RhCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxDU1NJbXBvcnRSdWxlPihwMSxzdGF0
aWNfY2FzdDxDU1NJbXBvcnRSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTSW1w
b3J0UnVsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpDU1NJbXBvcnRS
dWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9i
amVjdDxDU1NJbXBvcnRSdWxlPihwMSxzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlOjpQcml2YXRl
ICo+KGQpKTsKIH0KQEAgLTUzMywxMyArNTMzLDEzIEBAIGJvb2wgQ1NTTWVkaWFSdWxlOjpoYXNQ
cm9wZXJ0eShFeGVjU3RhdGUKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZp
bmRFbnRyeSgmQ1NTTWVkaWFSdWxlOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJu
IHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gQ1NTTWVkaWFSdWxlUHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IENTU01lZGlhUnVsZVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihDU1NSdWxlOjpoYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
Q1NTTWVkaWFSdWxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU01l
ZGlhUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3Vw
R2V0PENTU01lZGlhUnVsZVByb3RvRnVuYyxDU1NNZWRpYVJ1bGU+KHAxLHAyLCZzX2hhc2hUYWJs
ZSx0aGlzLHAzKTsKIH0KQEAgLTU2MiwxMCArNTYyLDEwIEBAIENTU01lZGlhUnVsZSBLRE9NOjpF
Y21hSW50ZXJmYWNlOjppbmhlcmkKIAlRX1VOVVNFRChwMSk7IHJldHVybiBDU1NNZWRpYVJ1bGU6
Om51bGw7CiB9CiAKLVZhbHVlIENTU01lZGlhUnVsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NNZWRpYVJ1bGU6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gQ1NTTWVkaWFSdWxlUHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3Rv
LmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IENTU01lZGlhUnVsZVByb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8t
PmdldChwMSxwMik7CiAgICAgaWYoQ1NTUnVsZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
Q1NTUnVsZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC01
ODQsMTAgKzU4NCwxMCBAQCBib29sIENTU01lZGlhUnVsZTo6cHV0SW5QYXJlbnRzKFBVVF9NRVRI
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgQ1NTTWVkaWFSdWxlOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTTWVkaWFSdWxlOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIENTU01lZGlhUnVsZVBy
b3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkNTU01lZGlhUnVsZTo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01OTUsNyArNTk1LDcgQEAgT2JqZWN0SW1wICpDU1NNZWRp
YVJ1bGU6OmJyaWRnZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8Q1NTTWVk
aWFSdWxlPihwMSxzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGU6OlByaXZhdGUgKj4oZCkpOwogfQog
Ci1WYWx1ZSBDU1NNZWRpYVJ1bGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqQ1NTTWVkaWFSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVy
biBjYWNoZURPTU9iamVjdDxDU1NNZWRpYVJ1bGU+KHAxLHN0YXRpY19jYXN0PENTU01lZGlhUnVs
ZTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC02MDgsMTIgKzYwOCwxMiBAQCBib29sIENTU1BhZ2VS
dWxlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBDU1NQYWdlUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NQ
YWdlUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3Vw
R2V0VmFsdWU8Q1NTUGFnZVJ1bGU+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAot
VmFsdWUgQ1NTUGFnZVJ1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqQ1NTUGFnZVJ1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgaWYoQ1NTUnVsZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gQ1NTUnVsZTo6
Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC02MzMsMTAgKzYzMywx
MCBAQCBib29sIENTU1BhZ2VSdWxlOjpwdXRJblBhcmVudHMoUFVUX01FVEhPCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1PYmplY3QgQ1NTUGFnZVJ1bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpDU1NQYWdlUnVsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9i
amVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTUGFnZVJ1bGU6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNjQ0LDcgKzY0NCw3IEBAIE9iamVjdEltcCAqQ1NTUGFn
ZVJ1bGU6OmJyaWRnZShFeGVjU3RhdGUKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU1Bh
Z2VSdWxlPihwMSxzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAK
LVZhbHVlIENTU1BhZ2VSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KkNTU1BhZ2VSdWxlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBj
YWNoZURPTU9iamVjdDxDU1NQYWdlUnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGU6OlBy
aXZhdGUgKj4oZCkpOwogfQpAQCAtNjUzLDEzICs2NTMsMTMgQEAgYm9vbCBDU1NQcmltaXRpdmVW
YWx1ZTo6aGFzUHJvcGVydHkoRXhlYwogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1
cDo6ZmluZEVudHJ5KCZDU1NQcmltaXRpdmVWYWx1ZTo6c19oYXNoVGFibGUscDIpOwogICAgIGlm
KGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IENTU1ByaW1pdGl2ZVZhbHVlUHJv
dG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRy
dWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IENTU1ByaW1pdGl2ZVZhbHVlUHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAg
IGlmKENTU1ZhbHVlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotVmFsdWUgQ1NTUHJpbWl0aXZlVmFsdWU6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTUHJpbWl0aXZlVmFsdWU6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxDU1NQcmltaXRpdmVWYWx1ZVByb3Rv
RnVuYyxDU1NQcmltaXRpdmVWYWx1ZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpA
QCAtNjgyLDEwICs2ODIsMTAgQEAgQ1NTUHJpbWl0aXZlVmFsdWUgS0RPTTo6RWNtYUludGVyZmFj
ZTo6aQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpudWxsOwogfQog
Ci1WYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBDU1NQcmltaXRpdmVWYWx1ZVBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDU1NQcmltaXRpdmVWYWx1
ZVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoQ1NTVmFsdWU6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIENTU1ZhbHVlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQo
KTsKIH0KQEAgLTcwNCwxMCArNzA0LDEwIEBAIGJvb2wgQ1NTUHJpbWl0aXZlVmFsdWU6OnB1dElu
UGFyZW50cyhQVVQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBDU1NQcmltaXRpdmVW
YWx1ZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkNTU1ByaW1p
dGl2ZVZhbHVlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqQ1NTUHJpbWl0aXZlVmFsdWU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNzE1
LDcgKzcxNSw3IEBAIE9iamVjdEltcCAqQ1NTUHJpbWl0aXZlVmFsdWU6OmJyaWRnZShFeGUKICAg
ICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU1ByaW1pdGl2ZVZhbHVlPihwMSxzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIENTU1ByaW1p
dGl2ZVZhbHVlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU1ByaW1p
dGl2ZVZhbHVlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNo
ZURPTU9iamVjdDxDU1NQcmltaXRpdmVWYWx1ZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNzI4LDEyICs3MjgsMTIgQEAgYm9vbCBDU1NS
dWxlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgQ1NTUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NS
dWxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRW
YWx1ZTxDU1NSdWxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIENT
U1J1bGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NT
UnVsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNF
RChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQo
KTsKQEAgLTc1MCwxMCArNzUwLDEwIEBAIGJvb2wgQ1NTUnVsZTo6cHV0SW5QYXJlbnRzKFBVVF9N
RVRIT0RfQVIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBDU1NSdWxlOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTUnVsZTo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqQ1NTUnVsZTo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC03NjEsNyArNzYxLDcgQEAgT2JqZWN0SW1w
ICpDU1NSdWxlOjpicmlkZ2UoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBuZXcgRE9NUldCcmlk
Z2U8Q1NTUnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTUnVsZTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAK
LVZhbHVlIENTU1J1bGU6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqQ1NT
UnVsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01P
YmplY3Q8Q1NTUnVsZT4ocDEsc3RhdGljX2Nhc3Q8Q1NTUnVsZTo6UHJpdmF0ZSAqPihkKSk7CiB9
CkBAIC03NzAsMTUgKzc3MCwxNSBAQCBib29sIENTU1J1bGVMaXN0OjpoYXNQcm9wZXJ0eShFeGVj
U3RhdGUgCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkNT
U1J1bGVMaXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAg
T2JqZWN0IHByb3RvID0gQ1NTUnVsZUxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0g
Q1NTUnVsZUxpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBpbnQgaSA9IHAy
LnRvQXJyYXlJbmRleCgmb2spOwogICAgIGlmKG9rICYmIGkgPCBsZW5ndGgoKSkgcmV0dXJuIHRy
dWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDU1NSdWxlTGlzdDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NSdWxlTGlzdDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGludCBpID0gcDIudG9B
cnJheUluZGV4KCZvayk7CkBAIC04MDQsMTggKzgwNCwxOCBAQCBDU1NSdWxlTGlzdCBLRE9NOjpF
Y21hSW50ZXJmYWNlOjppbmhlcml0CiAJUV9VTlVTRUQocDEpOyByZXR1cm4gQ1NTUnVsZUxpc3Q6
Om51bGw7CiB9CiAKLVZhbHVlIENTU1J1bGVMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1J1bGVMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IENTU1J1bGVMaXN0UHJvdG86OnNl
bGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdl
dChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IENTU1J1bGVMaXN0UHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1PYmplY3QgQ1NTUnVsZUxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpDU1NSdWxlTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBDU1NSdWxlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKkNTU1J1bGVMaXN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTgyMyw3
ICs4MjMsNyBAQCBPYmplY3RJbXAgKkNTU1J1bGVMaXN0OjpicmlkZ2UoRXhlY1N0YXRlCiAgICAg
cmV0dXJuIG5ldyBET01CcmlkZ2U8Q1NTUnVsZUxpc3Q+KHAxLHN0YXRpY19jYXN0PENTU1J1bGVM
aXN0OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTUnVsZUxpc3Q6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqQ1NTUnVsZUxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU1J1bGVMaXN0PihwMSxz
dGF0aWNfY2FzdDxDU1NSdWxlTGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC04MzIsMTUgKzgz
MiwxNSBAQCBib29sIENTU1N0eWxlRGVjbGFyYXRpb246Omhhc1Byb3BlcnR5KEV4CiB7CiAgICAg
Y29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkNTU1N0eWxlRGVjbGFyYXRp
b246OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3Qg
cHJvdG8gPSBDU1NTdHlsZURlY2xhcmF0aW9uUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3Rv
Lmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9
IENTU1N0eWxlRGVjbGFyYXRpb25Qcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBp
bnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwogICAgIGlmKG9rICYmIGkgPCBsZW5ndGgoKSkg
cmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDU1NTdHlsZURlY2xh
cmF0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1N0eWxlRGVj
bGFyYXRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgYm9vbCBvazsKICAg
ICB1bnNpZ25lZCBpbnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwpAQCAtODY2LDEwICs4NjYs
MTAgQEAgQ1NTU3R5bGVEZWNsYXJhdGlvbiBLRE9NOjpFY21hSW50ZXJmYWNlOgogCVFfVU5VU0VE
KHAxKTsgcmV0dXJuIENTU1N0eWxlRGVjbGFyYXRpb246Om51bGw7CiB9CiAKLVZhbHVlIENTU1N0
eWxlRGVjbGFyYXRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBDU1NTdHlsZURlY2xhcmF0aW9uUHJvdG86OnNl
bGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdl
dChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IENTU1N0eWxlRGVjbGFyYXRpb25Qcm90
bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHBy
b3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CkBAIC04ODUsMTAgKzg4NSwxMCBAQCBib29sIENTU1N0eWxlRGVjbGFyYXRpb246OnB1
dEluUGFyZW50cyhQCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkNTU1N0
eWxlRGVjbGFyYXRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gQ1NTU3R5bGVEZWNsYXJhdGlvblByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKkNTU1N0eWxlRGVjbGFyYXRpb246OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtODk2LDcgKzg5Niw3IEBAIE9iamVjdEltcCAqQ1NTU3R5bGVEZWNsYXJhdGlvbjo6YnJp
ZGdlKEUKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU1N0eWxlRGVjbGFyYXRpb24+KHAx
LHN0YXRpY19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb246OlByaXZhdGUgKj4oZCkpOwogfQogCi1W
YWx1ZSBDU1NTdHlsZURlY2xhcmF0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKkNTU1N0eWxlRGVjbGFyYXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU1N0eWxlRGVjbGFyYXRpb24+KHAxLHN0YXRp
Y19jYXN0PENTU1N0eWxlRGVjbGFyYXRpb246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtOTA5LDEy
ICs5MDksMTIgQEAgYm9vbCBDU1NTdHlsZVJ1bGU6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgQ1NTU3R5bGVSdWxlOjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1N0eWxlUnVsZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Q1NTU3R5bGVSdWxlPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIENTU1N0eWxlUnVsZTo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpDU1NTdHlsZVJ1bGU6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoQ1NTUnVsZTo6aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gQ1NTUnVsZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CkBAIC05MzQsMTAgKzkzNCwxMCBAQCBib29sIENTU1N0eWxlUnVsZTo6cHV0
SW5QYXJlbnRzKFBVVF9NRVRICiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgQ1NTU3R5
bGVSdWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTU3R5
bGVSdWxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpDU1NTdHlsZVJ1bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
OTQ1LDcgKzk0NSw3IEBAIE9iamVjdEltcCAqQ1NTU3R5bGVSdWxlOjpicmlkZ2UoRXhlY1N0YXQK
ICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPENTU1N0eWxlUnVsZT4ocDEsc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVSdWxlOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgQ1NTU3R5bGVSdWxlOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU1N0eWxlUnVsZTo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTU3R5
bGVSdWxlPihwMSxzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGU6OlByaXZhdGUgKj4oZCkpOwogfQpA
QCAtOTU0LDEzICs5NTQsMTMgQEAgYm9vbCBDU1NTdHlsZVNoZWV0OjpoYXNQcm9wZXJ0eShFeGVj
U3RhdAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZDU1NT
dHlsZVNoZWV0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAg
T2JqZWN0IHByb3RvID0gQ1NTU3R5bGVTaGVldFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90
by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8g
PSBDU1NTdHlsZVNoZWV0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFN0eWxlU2hlZXQ6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDU1NTdHls
ZVNoZWV0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1N0eWxlU2hl
ZXQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxD
U1NTdHlsZVNoZWV0UHJvdG9GdW5jLENTU1N0eWxlU2hlZXQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KQEAgLTk4MywxMCArOTgzLDEwIEBAIENTU1N0eWxlU2hlZXQgS0RPTTo6RWNt
YUludGVyZmFjZTo6aW5oZXIKIAlRX1VOVVNFRChwMSk7IHJldHVybiBDU1NTdHlsZVNoZWV0Ojpu
dWxsOwogfQogCi1WYWx1ZSBDU1NTdHlsZVNoZWV0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1N0eWxlU2hlZXQ6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gQ1NTU3R5bGVTaGVldFByb3Rv
OjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90
by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDU1NTdHlsZVNoZWV0UHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90
by0+Z2V0KHAxLHAyKTsKICAgICBpZihTdHlsZVNoZWV0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBTdHlsZVNoZWV0OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KQEAgLTEwMDUsMTAgKzEwMDUsMTAgQEAgYm9vbCBDU1NTdHlsZVNoZWV0OjpwdXRJblBhcmVu
dHMoUFVUX01FVAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IENTU1N0eWxlU2hlZXQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpDU1NTdHlsZVNoZWV0
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIENT
U1N0eWxlU2hlZXRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpDU1NTdHlsZVNo
ZWV0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTEwMTYsNyArMTAxNiw3IEBAIE9i
amVjdEltcCAqQ1NTU3R5bGVTaGVldDo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IERP
TVJXQnJpZGdlPENTU1N0eWxlU2hlZXQ+KHAxLHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQ6OlBy
aXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NTdHlsZVNoZWV0OjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorVmFsdWVJbXAgKkNTU1N0eWxlU2hlZXQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU1N0eWxlU2hlZXQ+KHAxLHN0
YXRpY19jYXN0PENTU1N0eWxlU2hlZXQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTAyOSwxMiAr
MTAyOSwxMiBAQCBib29sIENTU1ZhbHVlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDU1NWYWx1ZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpDU1NWYWx1ZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Q1NTVmFsdWU+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KIAotVmFsdWUgQ1NTVmFsdWU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTVmFsdWU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xMDUxLDEwICsxMDUxLDEwIEBAIGJvb2wg
Q1NTVmFsdWU6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0EKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU9iamVjdCBDU1NWYWx1ZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmpl
Y3RJbXAgKkNTU1ZhbHVlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpDU1NWYWx1ZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CkBAIC0xMDYyLDcgKzEwNjIsNyBAQCBPYmplY3RJbXAgKkNTU1ZhbHVlOjpicmlkZ2UoRXhlY1N0
YXRlICpwCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxDU1NWYWx1ZT4ocDEsc3RhdGljX2Nh
c3Q8Q1NTVmFsdWU6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBDU1NWYWx1ZTo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpDU1NWYWx1ZTo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Q1NTVmFsdWU+KHAxLHN0
YXRpY19jYXN0PENTU1ZhbHVlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTEwNzEsOCArMTA3MSw4
IEBAIGJvb2wgQ1NTVmFsdWVMaXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKIHsKICAgICBjb25z
dCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmQ1NTVmFsdWVMaXN0OjpzX2hhc2hU
YWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gQ1NT
VmFsdWVMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IENTU1ZhbHVlTGlzdFByb3Rv
OjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1
ZTsKICAgICBpZihDU1NWYWx1ZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAg
ICBib29sIG9rOwogICAgIHVuc2lnbmVkIGludCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7CkBA
IC0xMDgwLDcgKzEwODAsNyBAQCBib29sIENTU1ZhbHVlTGlzdDo6aGFzUHJvcGVydHkoRXhlY1N0
YXRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDU1NWYWx1ZUxpc3Q6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ1NTVmFsdWVMaXN0OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50
b0FycmF5SW5kZXgoJm9rKTsKQEAgLTExMDYsMTAgKzExMDYsMTAgQEAgQ1NTVmFsdWVMaXN0IEtE
T006OkVjbWFJbnRlcmZhY2U6OmluaGVyaQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIENTU1ZhbHVl
TGlzdDo6bnVsbDsKIH0KIAotVmFsdWUgQ1NTVmFsdWVMaXN0OjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNTU1ZhbHVlTGlzdDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBDU1NWYWx1ZUxpc3RQ
cm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gQ1NTVmFsdWVMaXN0UHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihDU1NWYWx1ZTo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gQ1NTVmFsdWU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQpAQCAtMTEyOCwxMCArMTEyOCwxMCBAQCBib29sIENTU1ZhbHVlTGlzdDo6cHV0SW5QYXJlbnRz
KFBVVF9NRVRICiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgQ1NTVmFsdWVMaXN0Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ1NTVmFsdWVMaXN0Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIENTU1Zh
bHVlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkNTU1ZhbHVlTGlzdDo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMTM5LDcgKzExMzksNyBAQCBPYmplY3RJ
bXAgKkNTU1ZhbHVlTGlzdDo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBET01SV0Jy
aWRnZTxDU1NWYWx1ZUxpc3Q+KHAxLHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdDo6UHJpdmF0ZSAq
PihkKSk7CiB9CiAKLVZhbHVlIENTU1ZhbHVlTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpDU1NWYWx1ZUxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PENTU1ZhbHVlTGlzdD4ocDEsc3RhdGljX2Nhc3Q8
Q1NTVmFsdWVMaXN0OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTExNDgsMTMgKzExNDgsMTMgQEAg
Ym9vbCBDaGFyYWN0ZXJEYXRhOjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogewogICAgIGNvbnN0IEhh
c2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZDaGFyYWN0ZXJEYXRhOjpzX2hhc2hUYWJs
ZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gQ2hhcmFj
dGVyRGF0YVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBDaGFyYWN0ZXJEYXRhUHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVl
OwogICAgIGlmKE5vZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBDaGFyYWN0ZXJEYXRhOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKkNoYXJhY3RlckRhdGE6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxDaGFyYWN0ZXJEYXRhUHJvdG9GdW5jLENoYXJh
Y3RlckRhdGE+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTExODMsMTAgKzEx
ODMsMTAgQEAgQ2hhcmFjdGVyRGF0YSBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcgogCVFfVU5V
U0VEKHAxKTsgcmV0dXJuIENoYXJhY3RlckRhdGE6Om51bGw7CiB9CiAKLVZhbHVlIENoYXJhY3Rl
ckRhdGE6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ2hh
cmFjdGVyRGF0YTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBP
YmplY3QgcHJvdG8gPSBDaGFyYWN0ZXJEYXRhUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3Rv
Lmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IENoYXJhY3RlckRhdGFQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKE5v
ZGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIE5vZGU6OmdldChwMSxwMixwMyk7CiAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtMTIwNSwxMCArMTIwNSwxMCBAQCBib29sIENoYXJh
Y3RlckRhdGE6OnB1dEluUGFyZW50cyhQVVRfTUVUCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1P
YmplY3QgQ2hhcmFjdGVyRGF0YTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmpl
Y3RJbXAgKkNoYXJhY3RlckRhdGE6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIGlmKHAxKSByZXR1cm4gQ2hhcmFjdGVyRGF0YVByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKkNoYXJhY3RlckRhdGE6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
MTIxNiw3ICsxMjE2LDcgQEAgT2JqZWN0SW1wICpDaGFyYWN0ZXJEYXRhOjpicmlkZ2UoRXhlY1N0
YQogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8Q2hhcmFjdGVyRGF0YT4ocDEsc3RhdGljX2Nh
c3Q8Q2hhcmFjdGVyRGF0YTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIENoYXJhY3RlckRh
dGE6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqQ2hhcmFjdGVyRGF0YTo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8
Q2hhcmFjdGVyRGF0YT4ocDEsc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YTo6UHJpdmF0ZSAqPihk
KSk7CiB9CkBAIC0xMjI5LDIxICsxMjI5LDIxIEBAIGJvb2wgQ291bnRlcjo6aGFzUHJvcGVydHko
RXhlY1N0YXRlICpwMSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIENvdW50ZXI6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqQ291bnRlcjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8Q291bnRlcj4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBDb3VudGVyOjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkNvdW50ZXI6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChw
Mik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBD
b3VudGVyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqQ291bnRl
cjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBw
MS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqQ291bnRlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMjUxLDcgKzEy
NTEsNyBAQCBPYmplY3RJbXAgKkNvdW50ZXI6OmJyaWRnZShFeGVjU3RhdGUgKnAxCiAgICAgcmV0
dXJuIG5ldyBET01CcmlkZ2U8Q291bnRlcj4ocDEsc3RhdGljX2Nhc3Q8Q291bnRlcjo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIENvdW50ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqQ291bnRlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gY2FjaGVET01PYmplY3Q8Q291bnRlcj4ocDEsc3RhdGljX2Nhc3Q8Q291bnRlcjo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC0xMjYwLDEyICsxMjYwLDEyIEBAIGJvb2wgRE9NQ29uZmlndXJh
dGlvbjo6aGFzUHJvcGVydHkoRXhlY1MKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29r
dXA6OmZpbmRFbnRyeSgmRE9NQ29uZmlndXJhdGlvbjo6c19oYXNoVGFibGUscDIpOwogICAgIGlm
KGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IERPTUNvbmZpZ3VyYXRpb25Qcm90
bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1
ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRE9NQ29uZmlndXJhdGlvblByb3RvOjpzZWxmKHAx
KTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERPTUNvbmZpZ3VyYXRpb246OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NQ29uZmlndXJhdGlvbjo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PERPTUNvbmZpZ3VyYXRpb25Qcm90
b0Z1bmMsRE9NQ29uZmlndXJhdGlvbj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpA
QCAtMTI4OCwxOCArMTI4OCwxOCBAQCBET01Db25maWd1cmF0aW9uIEtET006OkVjbWFJbnRlcmZh
Y2U6OmluCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gRE9NQ29uZmlndXJhdGlvbjo6bnVsbDsKIH0K
IAotVmFsdWUgRE9NQ29uZmlndXJhdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpET01Db25maWd1cmF0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IERPTUNvbmZpZ3VyYXRpb25Qcm90
bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJv
dG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRE9NQ29uZmlndXJhdGlvblBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotT2JqZWN0IERPTUNvbmZpZ3VyYXRpb246OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpET01Db25maWd1cmF0aW9uOjpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIERPTUNvbmZpZ3VyYXRpb25Qcm90
bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpET01Db25maWd1cmF0aW9uOjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTEzMDcsNyArMTMwNyw3IEBAIE9iamVjdEltcCAqRE9N
Q29uZmlndXJhdGlvbjo6YnJpZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxET01D
b25maWd1cmF0aW9uPihwMSxzdGF0aWNfY2FzdDxET01Db25maWd1cmF0aW9uOjpQcml2YXRlICo+
KGQpKTsKIH0KIAotVmFsdWUgRE9NQ29uZmlndXJhdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK1ZhbHVlSW1wICpET01Db25maWd1cmF0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxET01Db25maWd1cmF0aW9uPihwMSxz
dGF0aWNfY2FzdDxET01Db25maWd1cmF0aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTEzMjAs
NyArMTMyMCw3IEBAIGJvb2wgRE9NRXJyb3I6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERPTUVycm9yOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKkRPTUVycm9yOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIHJldHVybiBsb29rdXBHZXRWYWx1ZTxET01FcnJvcj4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQpAQCAtMTMzMywxNiArMTMzMywxNiBAQCBET01FcnJvciBLRE9NOjp0b0RP
TUVycm9yKEtKUzo6RXhlY1N0YXRlCiAgICAgcmV0dXJuIERPTUVycm9yOjpudWxsOwogfQogCi1W
YWx1ZSBET01FcnJvcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpET01FcnJvcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IERPTUVycm9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqRE9NRXJyb3I6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmpl
Y3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOwor
ICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkRPTUVycm9yOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTEzNTAsNyArMTM1MCw3IEBAIE9iamVjdEltcCAqRE9NRXJyb3I6
OmJyaWRnZShFeGVjU3RhdGUgKnAKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxET01FcnJvcj4o
cDEsc3RhdGljX2Nhc3Q8RE9NRXJyb3I6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBET01F
cnJvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpET01FcnJvcjo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8RE9N
RXJyb3I+KHAxLHN0YXRpY19jYXN0PERPTUVycm9yOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTEz
NTksMTIgKzEzNTksMTIgQEAgYm9vbCBET01FcnJvckhhbmRsZXI6Omhhc1Byb3BlcnR5KEV4ZWNT
dAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZET01FcnJv
ckhhbmRsZXI6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBP
YmplY3QgcHJvdG8gPSBET01FcnJvckhhbmRsZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJv
dG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3Rv
ID0gRE9NRXJyb3JIYW5kbGVyUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
RE9NRXJyb3JIYW5kbGVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRP
TUVycm9ySGFuZGxlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4g
bG9va3VwR2V0PERPTUVycm9ySGFuZGxlclByb3RvRnVuYyxET01FcnJvckhhbmRsZXI+KHAxLHAy
LCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTEzODcsMTggKzEzODcsMTggQEAgRE9NRXJy
b3JIYW5kbGVyIEtET006OkVjbWFJbnRlcmZhY2U6OmluaAogCVFfVU5VU0VEKHAxKTsgcmV0dXJu
IERPTUVycm9ySGFuZGxlcjo6bnVsbDsKIH0KIAotVmFsdWUgRE9NRXJyb3JIYW5kbGVyOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRPTUVycm9ySGFuZGxl
cjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJv
dG8gPSBET01FcnJvckhhbmRsZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnBy
b3RvID0gRE9NRXJyb3JIYW5kbGVyUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChw
Myk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgRE9NRXJyb3JIYW5kbGVy
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqRE9NRXJyb3JIYW5k
bGVyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IERPTUVycm9ySGFuZGxlclByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkRPTUVy
cm9ySGFuZGxlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNDA2LDcgKzE0MDYs
NyBAQCBPYmplY3RJbXAgKkRPTUVycm9ySGFuZGxlcjo6YnJpZGdlKEV4ZWNTCiAgICAgcmV0dXJu
IG5ldyBET01CcmlkZ2U8RE9NRXJyb3JIYW5kbGVyPihwMSxzdGF0aWNfY2FzdDxET01FcnJvckhh
bmRsZXI6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBET01FcnJvckhhbmRsZXI6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRE9NRXJyb3JIYW5kbGVyOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxET01FcnJv
ckhhbmRsZXI+KHAxLHN0YXRpY19jYXN0PERPTUVycm9ySGFuZGxlcjo6UHJpdmF0ZSAqPihkKSk7
CiB9CkBAIC0xNDE5LDIxICsxNDE5LDIxIEBAIGJvb2wgRE9NRXhjZXB0aW9uOjpoYXNQcm9wZXJ0
eShFeGVjU3RhdGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERPTUV4Y2VwdGlvbjo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01FeGNlcHRpb246OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPERPTUV4
Y2VwdGlvbj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBET01FeGNl
cHRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9N
RXhjZXB0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFf
VU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1PYmplY3QgRE9NRXhjZXB0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqRE9NRXhjZXB0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGlu
T2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpET01FeGNlcHRpb246OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTQ0MSw3ICsxNDQxLDcgQEAgT2JqZWN0SW1wICpE
T01FeGNlcHRpb246OmJyaWRnZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERP
TUV4Y2VwdGlvbj4ocDEsc3RhdGljX2Nhc3Q8RE9NRXhjZXB0aW9uOjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgRE9NRXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKkRPTUV4Y2VwdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gY2FjaGVET01PYmplY3Q8RE9NRXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxET01FeGNl
cHRpb246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTQ1MCwxMiArMTQ1MCwxMiBAQCBib29sIERP
TUltcGxlbWVudGF0aW9uOjpoYXNQcm9wZXJ0eShFeGVjCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5
ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkRPTUltcGxlbWVudGF0aW9uOjpzX2hhc2hUYWJsZSxw
Mik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gRE9NSW1wbGVt
ZW50YXRpb25Qcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRE9NSW1wbGVtZW50YXRpb25Q
cm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBET01JbXBsZW1lbnRhdGlvbjo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpET01JbXBsZW1lbnRhdGlvbjo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PERPTUlt
cGxlbWVudGF0aW9uUHJvdG9GdW5jLERPTUltcGxlbWVudGF0aW9uPihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CkBAIC0xNDc4LDE4ICsxNDc4LDE4IEBAIERPTUltcGxlbWVudGF0aW9u
IEtET006OkVjbWFJbnRlcmZhY2U6OmkKIAlRX1VOVVNFRChwMSk7IHJldHVybiBET01JbXBsZW1l
bnRhdGlvbjo6bnVsbDsKIH0KIAotVmFsdWUgRE9NSW1wbGVtZW50YXRpb246OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NSW1wbGVtZW50YXRpb246Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0g
RE9NSW1wbGVtZW50YXRpb25Qcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3Rv
ID0gRE9NSW1wbGVtZW50YXRpb25Qcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBET01JbXBsZW1lbnRhdGlv
bjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRPTUltcGxlbWVu
dGF0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIERPTUltcGxlbWVudGF0aW9uUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
RE9NSW1wbGVtZW50YXRpb246OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTQ5Nyw3
ICsxNDk3LDcgQEAgT2JqZWN0SW1wICpET01JbXBsZW1lbnRhdGlvbjo6YnJpZGdlKEV4ZQogICAg
IHJldHVybiBuZXcgRE9NQnJpZGdlPERPTUltcGxlbWVudGF0aW9uPihwMSxzdGF0aWNfY2FzdDxE
T01JbXBsZW1lbnRhdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERPTUltcGxlbWVu
dGF0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkRPTUltcGxlbWVu
dGF0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURP
TU9iamVjdDxET01JbXBsZW1lbnRhdGlvbj4ocDEsc3RhdGljX2Nhc3Q8RE9NSW1wbGVtZW50YXRp
b246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTUxMCwyMSArMTUxMCwyMSBAQCBib29sIERPTUxv
Y2F0b3I6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
YWx1ZSBET01Mb2NhdG9yOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRP
TUxvY2F0b3I6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1
cEdldFZhbHVlPERPTUxvY2F0b3I+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAot
VmFsdWUgRE9NTG9jYXRvcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpET01Mb2NhdG9yOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgRE9NTG9jYXRvcjo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRPTUxvY2F0b3I6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1
aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkRPTUxvY2F0b3I6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTUzMiw3ICsxNTMyLDcgQEAgT2JqZWN0SW1w
ICpET01Mb2NhdG9yOjpicmlkZ2UoRXhlY1N0YXRlIAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdl
PERPTUxvY2F0b3I+KHAxLHN0YXRpY19jYXN0PERPTUxvY2F0b3I6OlByaXZhdGUgKj4oZCkpOwog
fQogCi1WYWx1ZSBET01Mb2NhdG9yOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKkRPTUxvY2F0b3I6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGNhY2hlRE9NT2JqZWN0PERPTUxvY2F0b3I+KHAxLHN0YXRpY19jYXN0PERPTUxvY2F0b3I6OlBy
aXZhdGUgKj4oZCkpOwogfQpAQCAtMTU0MSwxMiArMTU0MSwxMiBAQCBib29sIERPTVN0cmluZ0xp
c3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9v
a3VwOjpmaW5kRW50cnkoJkRPTVN0cmluZ0xpc3Q6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihl
KSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBET01TdHJpbmdMaXN0UHJvdG86OnNl
bGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7Cisg
ICAgT2JqZWN0SW1wICpwcm90byA9IERPTVN0cmluZ0xpc3RQcm90bzo6c2VsZihwMSk7CisgICAg
aWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBET01TdHJpbmdMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKkRPTVN0cmluZ0xpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGxvb2t1cEdldDxET01TdHJpbmdMaXN0UHJvdG9GdW5jLERPTVN0cmluZ0xp
c3Q+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTE1NjksMTggKzE1NjksMTgg
QEAgRE9NU3RyaW5nTGlzdCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcgogCVFfVU5VU0VEKHAx
KTsgcmV0dXJuIERPTVN0cmluZ0xpc3Q6Om51bGw7CiB9CiAKLVZhbHVlIERPTVN0cmluZ0xpc3Q6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRE9NU3RyaW5n
TGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3Qg
cHJvdG8gPSBET01TdHJpbmdMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpw
cm90byA9IERPTVN0cmluZ0xpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBET01TdHJpbmdMaXN0Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqRE9NU3RyaW5nTGlzdDo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBET01T
dHJpbmdMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRE9NU3RyaW5nTGlz
dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNTg4LDcgKzE1ODgsNyBAQCBPYmpl
Y3RJbXAgKkRPTVN0cmluZ0xpc3Q6OmJyaWRnZShFeGVjU3RhCiAgICAgcmV0dXJuIG5ldyBET01C
cmlkZ2U8RE9NU3RyaW5nTGlzdD4ocDEsc3RhdGljX2Nhc3Q8RE9NU3RyaW5nTGlzdDo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERPTVN0cmluZ0xpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqRE9NU3RyaW5nTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8RE9NU3RyaW5nTGlzdD4ocDEsc3RhdGlj
X2Nhc3Q8RE9NU3RyaW5nTGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNjAxLDcgKzE2MDEs
NyBAQCBib29sIERPTVVzZXJEYXRhOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBET01Vc2VyRGF0YTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpET01Vc2VyRGF0YTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8RE9NVXNlckRhdGE+KHAxLHAyLCZzX2hhc2hUYWJs
ZSx0aGlzLHAzKTsKIH0KQEAgLTE2MTQsMTYgKzE2MTQsMTYgQEAgRE9NVXNlckRhdGEgS0RPTTo6
dG9ET01Vc2VyRGF0YShLSlM6OkV4ZQogICAgIHJldHVybiBET01Vc2VyRGF0YTo6bnVsbDsKIH0K
IAotVmFsdWUgRE9NVXNlckRhdGE6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqRE9NVXNlckRhdGE6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBET01Vc2VyRGF0YTo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRPTVVzZXJEYXRhOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRl
cigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpET01Vc2Vy
RGF0YTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNjMxLDcgKzE2MzEsNyBAQCBP
YmplY3RJbXAgKkRPTVVzZXJEYXRhOjpicmlkZ2UoRXhlY1N0YXRlCiAgICAgcmV0dXJuIG5ldyBE
T01CcmlkZ2U8RE9NVXNlckRhdGE+KHAxLHN0YXRpY19jYXN0PERPTVVzZXJEYXRhOjpQcml2YXRl
ICo+KGQpKTsKIH0KIAotVmFsdWUgRE9NVXNlckRhdGE6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqRE9NVXNlckRhdGE6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERPTVVzZXJEYXRhPihwMSxzdGF0aWNfY2FzdDxE
T01Vc2VyRGF0YTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNjQwLDggKzE2NDAsOCBAQCBib29s
IERvY3VtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiB7CiAgICAgY29uc3QgSGFzaEVu
dHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkRvY3VtZW50OjpzX2hhc2hUYWJsZSxwMik7CiAg
ICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gRG9jdW1lbnRQcm90bzo6
c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
KyAgICBPYmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYo
cHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoRG9jdW1lbnRF
dmVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihEb2N1bWVudFJh
bmdlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKERvY3VtZW50U3R5
bGU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CkBAIC0xNjUyLDcgKzE2NTIsNyBA
QCBib29sIERvY3VtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBEb2N1bWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpEb2N1bWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1
cm4gbG9va3VwR2V0PERvY3VtZW50UHJvdG9GdW5jLERvY3VtZW50PihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CkBAIC0xNjc1LDEwICsxNjc1LDEwIEBAIERvY3VtZW50IEtET006OkVj
bWFJbnRlcmZhY2U6OmluaGVyaXRlZEQKIAlRX1VOVVNFRChwMSk7IHJldHVybiBEb2N1bWVudDo6
bnVsbDsKIH0KIAotVmFsdWUgRG9jdW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gRG9jdW1lbnRQcm90bzo6c2VsZihwMSk7Ci0g
ICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsK
KyAgICBPYmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYo
cHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAg
IGlmKERvY3VtZW50RXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIERvY3VtZW50RXZl
bnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoRG9jdW1lbnRSYW5nZTo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gRG9jdW1lbnRSYW5nZTo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihEb2N1bWVu
dFN0eWxlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBEb2N1bWVudFN0eWxlOjpnZXQocDEs
cDIscDMpOwpAQCAtMTcwMywxMCArMTcwMywxMCBAQCBib29sIERvY3VtZW50OjpwdXRJblBhcmVu
dHMoUFVUX01FVEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgRG9jdW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpEb2N1bWVudDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBEb2N1bWVu
dFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkp
OworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkRvY3VtZW50OjpicmlkZ2UoRXhl
Y1N0YXRlICpwMSkgY29uc3QKQEAgLTE3MTQsNyArMTcxNCw3IEBAIE9iamVjdEltcCAqRG9jdW1l
bnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPERvY3Vt
ZW50PihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudDo6UHJpdmF0ZSAqPihLRE9NOjpFdmVudFRhcmdl
dDo6ZCkpOwogfQogCi1WYWx1ZSBEb2N1bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K1ZhbHVlSW1wICpEb2N1bWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gY2FjaGVET01PYmplY3Q8RG9jdW1lbnQ+KHAxLHN0YXRpY19jYXN0PERvY3VtZW50OjpQ
cml2YXRlICo+KEtET006OkV2ZW50VGFyZ2V0OjpkKSk7CiB9CkBAIC0xNzIzLDEyICsxNzIzLDEy
IEBAIGJvb2wgRG9jdW1lbnRFdmVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25z
dCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmRG9jdW1lbnRFdmVudDo6c19oYXNo
VGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IERv
Y3VtZW50RXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRFdmVudFBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERvY3VtZW50RXZlbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRFdmVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PERvY3VtZW50RXZlbnRQ
cm90b0Z1bmMsRG9jdW1lbnRFdmVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpA
QCAtMTc1MywxOCArMTc1MywxOCBAQCBEb2N1bWVudEV2ZW50IEtET006OkVjbWFJbnRlcmZhY2U6
OmluaGVyCiAJUV9VTlVTRUQocDEpOyByZXR1cm4gRG9jdW1lbnRFdmVudDo6bnVsbDsKIH0KIAot
VmFsdWUgRG9jdW1lbnRFdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpEb2N1bWVudEV2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewotICAgIE9iamVjdCBwcm90byA9IERvY3VtZW50RXZlbnRQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAy
KTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRFdmVudFByb3RvOjpzZWxmKHAxKTsK
KyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxw
Mik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2Jq
ZWN0IERvY3VtZW50RXZlbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpEb2N1bWVudEV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICBpZihwMSkgcmV0dXJuIERvY3VtZW50RXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpEb2N1bWVudEV2ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTE3
NzIsNyArMTc3Miw3IEBAIE9iamVjdEltcCAqRG9jdW1lbnRFdmVudDo6YnJpZGdlKEV4ZWNTdGEK
ICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxEb2N1bWVudEV2ZW50PihwMSxzdGF0aWNfY2FzdDxE
b2N1bWVudEV2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRG9jdW1lbnRFdmVudDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudEV2ZW50OjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxEb2N1
bWVudEV2ZW50PihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudEV2ZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTE3ODEsMTIgKzE3ODEsMTIgQEAgYm9vbCBEb2N1bWVudFJhbmdlOjpoYXNQcm9wZXJ0
eShFeGVjU3RhdAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5
KCZEb2N1bWVudFJhbmdlOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7
Ci0gICAgT2JqZWN0IHByb3RvID0gRG9jdW1lbnRSYW5nZVByb3RvOjpzZWxmKHAxKTsKLSAgICBp
Zihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAq
cHJvdG8gPSBEb2N1bWVudFJhbmdlUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgRG9jdW1lbnRSYW5nZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpE
b2N1bWVudFJhbmdlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBs
b29rdXBHZXQ8RG9jdW1lbnRSYW5nZVByb3RvRnVuYyxEb2N1bWVudFJhbmdlPihwMSxwMiwmc19o
YXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0xODExLDE4ICsxODExLDE4IEBAIERvY3VtZW50UmFu
Z2UgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXIKIAlRX1VOVVNFRChwMSk7IHJldHVybiBEb2N1
bWVudFJhbmdlOjpudWxsOwogfQogCi1WYWx1ZSBEb2N1bWVudFJhbmdlOjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50UmFuZ2U6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gRG9jdW1l
bnRSYW5nZVByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBEb2N1bWVu
dFJhbmdlUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgRG9jdW1lbnRSYW5nZTo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRvY3VtZW50UmFuZ2U6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gRG9jdW1lbnRSYW5nZVByb3Rv
OjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKkRvY3VtZW50UmFuZ2U6OmJyaWRnZShFeGVj
U3RhdGUgKnAxKSBjb25zdApAQCAtMTgzMCw3ICsxODMwLDcgQEAgT2JqZWN0SW1wICpEb2N1bWVu
dFJhbmdlOjpicmlkZ2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERvY3VtZW50
UmFuZ2U+KHAxLHN0YXRpY19jYXN0PERvY3VtZW50UmFuZ2U6OlByaXZhdGUgKj4oZCkpOwogfQog
Ci1WYWx1ZSBEb2N1bWVudFJhbmdlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKkRvY3VtZW50UmFuZ2U6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGNhY2hlRE9NT2JqZWN0PERvY3VtZW50UmFuZ2U+KHAxLHN0YXRpY19jYXN0PERvY3VtZW50
UmFuZ2U6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTg0MywyMSArMTg0MywyMSBAQCBib29sIERv
Y3VtZW50U3R5bGU6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBEb2N1bWVudFN0eWxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKkRvY3VtZW50U3R5bGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGxvb2t1cEdldFZhbHVlPERvY3VtZW50U3R5bGU+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KIAotVmFsdWUgRG9jdW1lbnRTdHlsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFN0eWxlOjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VO
VVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgRG9jdW1lbnRT
dHlsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRvY3VtZW50
U3R5bGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKkRvY3VtZW50U3R5bGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
MTg2NSw3ICsxODY1LDcgQEAgT2JqZWN0SW1wICpEb2N1bWVudFN0eWxlOjpicmlkZ2UoRXhlY1N0
YQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERvY3VtZW50U3R5bGU+KHAxLHN0YXRpY19jYXN0
PERvY3VtZW50U3R5bGU6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBEb2N1bWVudFN0eWxl
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50U3R5bGU6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PERv
Y3VtZW50U3R5bGU+KHAxLHN0YXRpY19jYXN0PERvY3VtZW50U3R5bGU6OlByaXZhdGUgKj4oZCkp
OwogfQpAQCAtMTg3NCwxMiArMTg3NCwxMiBAQCBib29sIERvY3VtZW50VHJhdmVyc2FsOjpoYXNQ
cm9wZXJ0eShFeGVjCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50
cnkoJkRvY3VtZW50VHJhdmVyc2FsOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJu
IHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gRG9jdW1lbnRUcmF2ZXJzYWxQcm90bzo6c2VsZihw
MSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBP
YmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRUcmF2ZXJzYWxQcm90bzo6c2VsZihwMSk7CisgICAg
aWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBEb2N1bWVudFRyYXZlcnNhbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFRyYXZlcnNhbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PERvY3VtZW50VHJhdmVyc2FsUHJvdG9GdW5j
LERvY3VtZW50VHJhdmVyc2FsPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0x
OTA0LDE4ICsxOTA0LDE4IEBAIERvY3VtZW50VHJhdmVyc2FsIEtET006OkVjbWFJbnRlcmZhY2U6
OmkKIAlRX1VOVVNFRChwMSk7IHJldHVybiBEb2N1bWVudFRyYXZlcnNhbDo6bnVsbDsKIH0KIAot
VmFsdWUgRG9jdW1lbnRUcmF2ZXJzYWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqRG9jdW1lbnRUcmF2ZXJzYWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gRG9jdW1lbnRUcmF2ZXJzYWxQcm90
bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJv
dG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRG9jdW1lbnRUcmF2ZXJzYWxQ
cm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLU9iamVjdCBEb2N1bWVudFRyYXZlcnNhbDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkRvY3VtZW50VHJhdmVyc2FsOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIERvY3VtZW50VHJhdmVyc2Fs
UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRG9jdW1lbnRUcmF2ZXJzYWw6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTkyMyw3ICsxOTIzLDcgQEAgT2JqZWN0SW1w
ICpEb2N1bWVudFRyYXZlcnNhbDo6YnJpZGdlKEV4ZQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdl
PERvY3VtZW50VHJhdmVyc2FsPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudFRyYXZlcnNhbDo6UHJp
dmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIERvY3VtZW50VHJhdmVyc2FsOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50VHJhdmVyc2FsOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxEb2N1bWVudFRyYXZl
cnNhbD4ocDEsc3RhdGljX2Nhc3Q8RG9jdW1lbnRUcmF2ZXJzYWw6OlByaXZhdGUgKj4oZCkpOwog
fQpAQCAtMTkzNiw3ICsxOTM2LDcgQEAgYm9vbCBEb2N1bWVudFR5cGU6Omhhc1Byb3BlcnR5KEV4
ZWNTdGF0ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgRG9jdW1lbnRUeXBlOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50VHlwZTo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8RG9jdW1lbnRU
eXBlPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0xOTQ5LDcgKzE5NDksNyBA
QCBEb2N1bWVudFR5cGUgS0RPTTo6dG9Eb2N1bWVudFR5cGUoS0pTOjpFCiAgICAgcmV0dXJuIERv
Y3VtZW50VHlwZTo6bnVsbDsKIH0KIAotVmFsdWUgRG9jdW1lbnRUeXBlOjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50VHlwZTo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihOb2RlOjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBOb2RlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQo
KTsKQEAgLTE5NjQsMTAgKzE5NjQsMTAgQEAgYm9vbCBEb2N1bWVudFR5cGU6OnB1dChQVVRfTUVU
SE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgRG9jdW1lbnRUeXBlOjpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqRG9jdW1lbnRUeXBlOjpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5p
bnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVj
dDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1w
ICpEb2N1bWVudFR5cGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTk3NSw3ICsx
OTc1LDcgQEAgT2JqZWN0SW1wICpEb2N1bWVudFR5cGU6OmJyaWRnZShFeGVjU3RhdAogICAgIHJl
dHVybiBuZXcgRE9NUldCcmlkZ2U8RG9jdW1lbnRUeXBlPihwMSxzdGF0aWNfY2FzdDxEb2N1bWVu
dFR5cGU6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBEb2N1bWVudFR5cGU6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRUeXBlOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxEb2N1bWVudFR5cGU+
KHAxLHN0YXRpY19jYXN0PERvY3VtZW50VHlwZTo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xOTg4
LDIxICsxOTg4LDIxIEBAIGJvb2wgRG9jdW1lbnRWaWV3OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIERvY3VtZW50Vmlldzo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpEb2N1bWVudFZpZXc6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPERvY3VtZW50Vmlldz4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBEb2N1bWVudFZpZXc6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRG9jdW1lbnRWaWV3Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsg
UV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQog
Ci1PYmplY3QgRG9jdW1lbnRWaWV3Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqRG9jdW1lbnRWaWV3Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90
eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1
cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpEb2N1bWVudFZpZXc6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtMjAxMCw3ICsyMDEwLDcgQEAgT2JqZWN0SW1wICpEb2N1bWVudFZpZXc6
OmJyaWRnZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPERvY3VtZW50Vmlldz4o
cDEsc3RhdGljX2Nhc3Q8RG9jdW1lbnRWaWV3OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUg
RG9jdW1lbnRWaWV3OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkRvY3Vt
ZW50Vmlldzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVE
T01PYmplY3Q8RG9jdW1lbnRWaWV3PihwMSxzdGF0aWNfY2FzdDxEb2N1bWVudFZpZXc6OlByaXZh
dGUgKj4oZCkpOwogfQpAQCAtMjAxOSwxMyArMjAxOSwxMyBAQCBib29sIEVsZW1lbnQ6Omhhc1By
b3BlcnR5KEV4ZWNTdGF0ZSAqcDEsCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3Vw
OjpmaW5kRW50cnkoJkVsZW1lbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4g
dHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlm
KHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpw
cm90byA9IEVsZW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoTm9kZTo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIEVsZW1lbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PEVsZW1lbnRQcm90b0Z1bmMsRWxl
bWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjA0OCwxMCArMjA0OCwx
MCBAQCBFbGVtZW50IEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVyaXRlZEVsCiAJUV9VTlVTRUQo
cDEpOyByZXR1cm4gRWxlbWVudDo6bnVsbDsKIH0KIAotVmFsdWUgRWxlbWVudDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpFbGVtZW50OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IEVsZW1lbnRQ
cm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRWxlbWVudFByb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8t
PmdldChwMSxwMik7CiAgICAgaWYoTm9kZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gTm9k
ZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0yMDY1LDEw
ICsyMDY1LDEwIEBAIGJvb2wgRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK09iamVjdEltcCAqRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVy
biBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9i
amVjdEltcCAqRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMDc2LDcg
KzIwNzYsNyBAQCBPYmplY3RJbXAgKkVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxCiAgICAg
cmV0dXJuIG5ldyBET01SV0JyaWRnZTxFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxFbGVtZW50OjpQ
cml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKK1ZhbHVlSW1wICpFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxFbGVtZW50
OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIwODksMTIgKzIwODksMTIgQEAgYm9vbCBFbnRpdHk6
Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEsYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgRW50aXR5OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkVudGl0eTo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8
RW50aXR5PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIEVudGl0eTo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpFbnRpdHk6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoTm9kZTo6aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gTm9kZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CkBAIC0yMTA5LDEwICsyMTA5LDEwIEBAIGJvb2wgRW50aXR5OjpwdXQoUFVUX01F
VEhPRF9BUkdTKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IEVudGl0eTo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkVudGl0eTo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRW50aXR5Ojpi
cmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIxMjAsNyArMjEyMCw3IEBAIE9iamVjdElt
cCAqRW50aXR5OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkKICAgICByZXR1cm4gbmV3IERPTVJXQnJp
ZGdlPEVudGl0eT4ocDEsc3RhdGljX2Nhc3Q8RW50aXR5OjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgRW50aXR5OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkVudGl0
eTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmpl
Y3Q8RW50aXR5PihwMSxzdGF0aWNfY2FzdDxFbnRpdHk6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAt
MjEyOSwxMiArMjEyOSwxMiBAQCBib29sIEV2ZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAx
LGNvCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkV2ZW50
OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHBy
b3RvID0gRXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gRXZlbnRQcm90bzo6c2Vs
ZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBFdmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpFdmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICByZXR1cm4gbG9va3VwR2V0PEV2ZW50UHJvdG9GdW5jLEV2ZW50PihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CkBAIC0yMTcwLDE4ICsyMTcwLDE4IEBAIEV2ZW50IEtET006OkVjbWFJ
bnRlcmZhY2U6OmluaGVyaXRlZEV2ZW4KIAlRX1VOVVNFRChwMSk7IHJldHVybiBFdmVudDo6bnVs
bDsKIH0KIAotVmFsdWUgRXZlbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqRXZlbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
Ci0gICAgT2JqZWN0IHByb3RvID0gRXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gRXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBFdmVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIEV2ZW50UHJvdG86OnNlbGYocDEpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqRXZlbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
MjE4OSw3ICsyMTg5LDcgQEAgT2JqZWN0SW1wICpFdmVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEp
IAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPEV2ZW50PihwMSxzdGF0aWNfY2FzdDxFdmVudDo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEV2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKkV2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBjYWNoZURPTU9iamVjdDxFdmVudD4ocDEsc3RhdGljX2Nhc3Q8RXZlbnQ6OlByaXZh
dGUgKj4oZCkpOwogfQpAQCAtMjIwMiwyMSArMjIwMiwyMSBAQCBib29sIEV2ZW50RXhjZXB0aW9u
OjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBFdmVu
dEV4Y2VwdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpFdmVudEV4
Y2VwdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3Vw
R2V0VmFsdWU8RXZlbnRFeGNlcHRpb24+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0K
IAotVmFsdWUgRXZlbnRFeGNlcHRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqRXZlbnRFeGNlcHRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBFdmVudEV4Y2VwdGlvbjo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkV2ZW50RXhjZXB0aW9u
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAx
LT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9i
amVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0
SW1wICpFdmVudEV4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMjI0
LDcgKzIyMjQsNyBAQCBPYmplY3RJbXAgKkV2ZW50RXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0CiAg
ICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8RXZlbnRFeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PEV2
ZW50RXhjZXB0aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgRXZlbnRFeGNlcHRpb246
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqRXZlbnRFeGNlcHRpb246OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PEV2
ZW50RXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxFdmVudEV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihk
KSk7CiB9CkBAIC0yMjMzLDEyICsyMjMzLDEyIEBAIGJvb2wgRXZlbnRUYXJnZXQ6Omhhc1Byb3Bl
cnR5KEV4ZWNTdGF0ZSAKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRF
bnRyeSgmRXZlbnRUYXJnZXQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1
ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBFdmVudFRhcmdldFByb3RvOjpzZWxmKHAxKTsKLSAgICBp
Zihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAq
cHJvdG8gPSBFdmVudFRhcmdldFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVl
IEV2ZW50VGFyZ2V0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50
VGFyZ2V0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBH
ZXQ8RXZlbnRUYXJnZXRQcm90b0Z1bmMsRXZlbnRUYXJnZXQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KQEAgLTIyOTMsMTAgKzIyOTMsMTAgQEAgRXZlbnRUYXJnZXQgS0RPTTo6RWNt
YUludGVyZmFjZTo6aW5oZXJpdAogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIEV2ZW50VGFyZ2V0Ojpu
dWxsOwogfQogCi1WYWx1ZSBFdmVudFRhcmdldDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpFdmVudFRhcmdldDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBFdmVudFRhcmdldFByb3RvOjpzZWxm
KHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQo
cDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBFdmVudFRhcmdldFByb3RvOjpzZWxmKHAx
KTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChw
MSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAg
LTIzMDcsMTAgKzIzMDcsMTAgQEAgYm9vbCBFdmVudFRhcmdldDo6cHV0KFBVVF9NRVRIT0RfQVJH
UykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBFdmVudFRhcmdldDo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkV2ZW50VGFyZ2V0Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIEV2ZW50VGFyZ2V0UHJv
dG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqRXZlbnRUYXJnZXQ6OmJyaWRnZShFeGVj
U3RhdGUgKnAxKSBjb25zdApAQCAtMjMxOCw3ICsyMzE4LDcgQEAgT2JqZWN0SW1wICpFdmVudFRh
cmdldDo6YnJpZGdlKEV4ZWNTdGF0ZQogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8RXZlbnRU
YXJnZXQ+KHAxLHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0OjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgRXZlbnRUYXJnZXQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAq
RXZlbnRUYXJnZXQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNh
Y2hlRE9NT2JqZWN0PEV2ZW50VGFyZ2V0PihwMSxzdGF0aWNfY2FzdDxFdmVudFRhcmdldDo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC0yMzI3LDEzICsyMzI3LDEzIEBAIGJvb2wgS2V5Ym9hcmRFdmVu
dDo6aGFzUHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29r
dXA6OmZpbmRFbnRyeSgmS2V5Ym9hcmRFdmVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUp
IHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IEtleWJvYXJkRXZlbnRQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAg
ICBPYmplY3RJbXAgKnByb3RvID0gS2V5Ym9hcmRFdmVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBp
Zihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihVSUV2ZW50
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgS2V5Ym9hcmRFdmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpLZXlib2FyZEV2ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJl
dHVybiBsb29rdXBHZXQ8S2V5Ym9hcmRFdmVudFByb3RvRnVuYyxLZXlib2FyZEV2ZW50PihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0yMzU2LDE4ICsyMzU2LDE4IEBAIEtleWJv
YXJkRXZlbnQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXIKIAlRX1VOVVNFRChwMSk7IHJldHVy
biBLZXlib2FyZEV2ZW50OjpudWxsOwogfQogCi1WYWx1ZSBLZXlib2FyZEV2ZW50OjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKktleWJvYXJkRXZlbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0g
S2V5Ym9hcmRFdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBL
ZXlib2FyZEV2ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihVSUV2ZW50OjpoYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBVSUV2ZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IEtleWJvYXJkRXZlbnQ6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpLZXlib2FyZEV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIEtleWJvYXJkRXZlbnRQcm90bzo6
c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICBy
ZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpLZXlib2FyZEV2ZW50OjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTIzNzUsNyArMjM3NSw3IEBAIE9iamVjdEltcCAqS2V5Ym9hcmRF
dmVudDo6YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxLZXlib2FyZEV2
ZW50PihwMSxzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgS2V5Ym9hcmRFdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpLZXlib2FyZEV2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVy
biBjYWNoZURPTU9iamVjdDxLZXlib2FyZEV2ZW50PihwMSxzdGF0aWNfY2FzdDxLZXlib2FyZEV2
ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIzODgsMjEgKzIzODgsMjEgQEAgYm9vbCBMU0V4
Y2VwdGlvbjo6aGFzUHJvcGVydHkoRXhlY1N0YXRlIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgTFNFeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
TFNFeGNlcHRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxv
b2t1cEdldFZhbHVlPExTRXhjZXB0aW9uPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIExTRXhjZXB0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKkxTRXhjZXB0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgTFNFeGNlcHRpb246OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpMU0V4Y2VwdGlvbjo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0
ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTFNFeGNl
cHRpb246OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjQxMCw3ICsyNDEwLDcgQEAg
T2JqZWN0SW1wICpMU0V4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZQogICAgIHJldHVybiBuZXcg
RE9NQnJpZGdlPExTRXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxMU0V4Y2VwdGlvbjo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIExTRXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKkxTRXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxMU0V4Y2VwdGlvbj4ocDEsc3RhdGljX2Nhc3Q8
TFNFeGNlcHRpb246OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjQyMyw3ICsyNDIzLDcgQEAgYm9v
bCBMU0lucHV0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxLAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgTFNJbnB1dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpMU0lucHV0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29r
dXBHZXRWYWx1ZTxMU0lucHV0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0y
NDM2LDcgKzI0MzYsNyBAQCBMU0lucHV0IEtET006OnRvTFNJbnB1dChLSlM6OkV4ZWNTdGF0ZSAq
CiAgICAgcmV0dXJuIExTSW5wdXQ6Om51bGw7CiB9CiAKLVZhbHVlIExTSW5wdXQ6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNJbnB1dDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VE
KHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTI0NTMsMTAg
KzI0NTMsMTAgQEAgYm9vbCBMU0lucHV0OjpwdXRJblBhcmVudHMoUFVUX01FVEhPRF9BUgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IExTSW5wdXQ6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpMU0lucHV0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpMU0lucHV0OjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTI0NjQsNyArMjQ2NCw3IEBAIE9iamVjdEltcCAqTFNJbnB1dDo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcDEKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPExTSW5wdXQ+
KHAxLHN0YXRpY19jYXN0PExTSW5wdXQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBMU0lu
cHV0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkxTSW5wdXQ6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PExTSW5w
dXQ+KHAxLHN0YXRpY19jYXN0PExTSW5wdXQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjQ3Nyw3
ICsyNDc3LDcgQEAgYm9vbCBMU091dHB1dDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpwMQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTFNPdXRwdXQ6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqTFNPdXRwdXQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPExTT3V0cHV0PihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CkBAIC0yNDkwLDcgKzI0OTAsNyBAQCBMU091dHB1dCBLRE9NOjp0b0xTT3V0
cHV0KEtKUzo6RXhlY1N0YXRlCiAgICAgcmV0dXJuIExTT3V0cHV0OjpudWxsOwogfQogCi1WYWx1
ZSBMU091dHB1dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpMU091dHB1dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBR
X1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKQEAgLTI1MDcsMTAgKzI1MDcsMTAgQEAgYm9vbCBMU091dHB1dDo6cHV0SW5QYXJl
bnRzKFBVVF9NRVRIT0RfQQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IExTT3V0cHV0
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqTFNPdXRwdXQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmlu
dGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0
OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAg
KkxTT3V0cHV0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI1MTgsNyArMjUxOCw3
IEBAIE9iamVjdEltcCAqTFNPdXRwdXQ6OmJyaWRnZShFeGVjU3RhdGUgKnAKICAgICByZXR1cm4g
bmV3IERPTVJXQnJpZGdlPExTT3V0cHV0PihwMSxzdGF0aWNfY2FzdDxMU091dHB1dDo6UHJpdmF0
ZSAqPihkKSk7CiB9CiAKLVZhbHVlIExTT3V0cHV0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKkxTT3V0cHV0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBjYWNoZURPTU9iamVjdDxMU091dHB1dD4ocDEsc3RhdGljX2Nhc3Q8TFNPdXRwdXQ6
OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjUyNywxMyArMjUyNywxMyBAQCBib29sIExTUGFyc2Vy
OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0g
TG9va3VwOjpmaW5kRW50cnkoJkxTUGFyc2VyOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkg
cmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTFNQYXJzZXJQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmpl
Y3RJbXAgKnByb3RvID0gTFNQYXJzZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoRXZlbnRUYXJnZXQ6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1
ZSBMU1BhcnNlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU1BhcnNl
cjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PExT
UGFyc2VyUHJvdG9GdW5jLExTUGFyc2VyPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CkBAIC0yNTU2LDEwICsyNTU2LDEwIEBAIExTUGFyc2VyIEtET006OkVjbWFJbnRlcmZhY2U6Omlu
aGVyaXRlZEwKIAlRX1VOVVNFRChwMSk7IHJldHVybiBMU1BhcnNlcjo6bnVsbDsKIH0KIAotVmFs
dWUgTFNQYXJzZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqTFNQYXJzZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAg
T2JqZWN0IHByb3RvID0gTFNQYXJzZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gTFNQYXJzZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKEV2ZW50VGFyZ2V0
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBFdmVudFRhcmdldDo6Z2V0KHAxLHAyLHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0yNTc4LDEwICsyNTc4LDEwIEBAIGJvb2wg
TFNQYXJzZXI6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0EKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU9iamVjdCBMU1BhcnNlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmpl
Y3RJbXAgKkxTUGFyc2VyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIExTUGFyc2VyUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
TFNQYXJzZXI6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjU4OSw3ICsyNTg5LDcg
QEAgT2JqZWN0SW1wICpMU1BhcnNlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBu
ZXcgRE9NUldCcmlkZ2U8TFNQYXJzZXI+KHAxLHN0YXRpY19jYXN0PExTUGFyc2VyOjpQcml2YXRl
ICo+KGQpKTsKIH0KIAotVmFsdWUgTFNQYXJzZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqTFNQYXJzZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGNhY2hlRE9NT2JqZWN0PExTUGFyc2VyPihwMSxzdGF0aWNfY2FzdDxMU1BhcnNlcjo6
UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yNTk4LDEyICsyNTk4LDEyIEBAIGJvb2wgTFNQYXJzZXJG
aWx0ZXI6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBM
b29rdXA6OmZpbmRFbnRyeSgmTFNQYXJzZXJGaWx0ZXI6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBp
ZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBMU1BhcnNlckZpbHRlclByb3Rv
OjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVl
OworICAgIE9iamVjdEltcCAqcHJvdG8gPSBMU1BhcnNlckZpbHRlclByb3RvOjpzZWxmKHAxKTsK
KyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVZhbHVlIExTUGFyc2VyRmlsdGVyOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKkxTUGFyc2VyRmlsdGVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8TFNQYXJzZXJGaWx0ZXJQcm90b0Z1bmMsTFNQ
YXJzZXJGaWx0ZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTI2MjYsMTgg
KzI2MjYsMTggQEAgTFNQYXJzZXJGaWx0ZXIgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZQogCVFf
VU5VU0VEKHAxKTsgcmV0dXJuIExTUGFyc2VyRmlsdGVyOjpudWxsOwogfQogCi1WYWx1ZSBMU1Bh
cnNlckZpbHRlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpMU1BhcnNlckZpbHRlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
LSAgICBPYmplY3QgcHJvdG8gPSBMU1BhcnNlckZpbHRlclByb3RvOjpzZWxmKHAxKTsKLSAgICBp
Zihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAg
IE9iamVjdEltcCAqcHJvdG8gPSBMU1BhcnNlckZpbHRlclByb3RvOjpzZWxmKHAxKTsKKyAgICBp
Zihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAg
ICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IExT
UGFyc2VyRmlsdGVyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAq
TFNQYXJzZXJGaWx0ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gTFNQYXJzZXJGaWx0ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9i
amVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0
SW1wICpMU1BhcnNlckZpbHRlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNjQ1
LDcgKzI2NDUsNyBAQCBPYmplY3RJbXAgKkxTUGFyc2VyRmlsdGVyOjpicmlkZ2UoRXhlY1N0CiAg
ICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8TFNQYXJzZXJGaWx0ZXI+KHAxLHN0YXRpY19jYXN0PExT
UGFyc2VyRmlsdGVyOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgTFNQYXJzZXJGaWx0ZXI6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqTFNQYXJzZXJGaWx0ZXI6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PExT
UGFyc2VyRmlsdGVyPihwMSxzdGF0aWNfY2FzdDxMU1BhcnNlckZpbHRlcjo6UHJpdmF0ZSAqPihk
KSk7CiB9CkBAIC0yNjU0LDEyICsyNjU0LDEyIEBAIGJvb2wgTFNSZXNvdXJjZVJlc29sdmVyOjpo
YXNQcm9wZXJ0eShFeGUKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRF
bnRyeSgmTFNSZXNvdXJjZVJlc29sdmVyOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0
dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTFNSZXNvdXJjZVJlc29sdmVyUHJvdG86OnNl
bGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7Cisg
ICAgT2JqZWN0SW1wICpwcm90byA9IExTUmVzb3VyY2VSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsK
KyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVZhbHVlIExTUmVzb3VyY2VSZXNvbHZlcjo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU1Jlc291cmNlUmVzb2x2ZXI6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxMU1Jlc291cmNlUmVzb2x2ZXJQ
cm90b0Z1bmMsTFNSZXNvdXJjZVJlc29sdmVyPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7
CiB9CkBAIC0yNjgyLDE4ICsyNjgyLDE4IEBAIExTUmVzb3VyY2VSZXNvbHZlciBLRE9NOjpFY21h
SW50ZXJmYWNlOjoKIAlRX1VOVVNFRChwMSk7IHJldHVybiBMU1Jlc291cmNlUmVzb2x2ZXI6Om51
bGw7CiB9CiAKLVZhbHVlIExTUmVzb3VyY2VSZXNvbHZlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpMU1Jlc291cmNlUmVzb2x2ZXI6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTFNSZXNvdXJj
ZVJlc29sdmVyUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IExTUmVz
b3VyY2VSZXNvbHZlclByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IExTUmVzb3VyY2VSZXNvbHZlcjo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkxTUmVzb3VyY2VSZXNvbHZl
cjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBM
U1Jlc291cmNlUmVzb2x2ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHlu
YW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpMU1Jl
c291cmNlUmVzb2x2ZXI6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjcwMSw3ICsy
NzAxLDcgQEAgT2JqZWN0SW1wICpMU1Jlc291cmNlUmVzb2x2ZXI6OmJyaWRnZShFeAogICAgIHJl
dHVybiBuZXcgRE9NQnJpZGdlPExTUmVzb3VyY2VSZXNvbHZlcj4ocDEsc3RhdGljX2Nhc3Q8TFNS
ZXNvdXJjZVJlc29sdmVyOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgTFNSZXNvdXJjZVJl
c29sdmVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkxTUmVzb3VyY2VS
ZXNvbHZlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVE
T01PYmplY3Q8TFNSZXNvdXJjZVJlc29sdmVyPihwMSxzdGF0aWNfY2FzdDxMU1Jlc291cmNlUmVz
b2x2ZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjcxMCwxMiArMjcxMCwxMiBAQCBib29sIExT
U2VyaWFsaXplcjo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5
ICplID0gTG9va3VwOjpmaW5kRW50cnkoJkxTU2VyaWFsaXplcjo6c19oYXNoVGFibGUscDIpOwog
ICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IExTU2VyaWFsaXplclBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0
cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBMU1NlcmlhbGl6ZXJQcm90bzo6c2VsZihwMSk7
CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBMU1NlcmlhbGl6ZXI6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqTFNTZXJpYWxpemVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBsb29rdXBHZXQ8TFNTZXJpYWxpemVyUHJvdG9GdW5jLExTU2VyaWFs
aXplcj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMjczOCwxMCArMjczOCwx
MCBAQCBMU1NlcmlhbGl6ZXIgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpCiAJUV9VTlVTRUQo
cDEpOyByZXR1cm4gTFNTZXJpYWxpemVyOjpudWxsOwogfQogCi1WYWx1ZSBMU1NlcmlhbGl6ZXI6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNTZXJpYWxp
emVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBw
cm90byA9IExTU2VyaWFsaXplclByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBMU1NlcmlhbGl6ZXJQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0yNzU3LDEwICsyNzU3LDEwIEBAIGJvb2wg
TFNTZXJpYWxpemVyOjpwdXRJblBhcmVudHMoUFVUX01FVEgKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU9iamVjdCBMU1NlcmlhbGl6ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpMU1NlcmlhbGl6ZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIGlmKHAxKSByZXR1cm4gTFNTZXJpYWxpemVyUHJvdG86OnNlbGYocDEpOwotICAgIHJl
dHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAK
IE9iamVjdEltcCAqTFNTZXJpYWxpemVyOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTI3NjgsNyArMjc2OCw3IEBAIE9iamVjdEltcCAqTFNTZXJpYWxpemVyOjpicmlkZ2UoRXhlY1N0
YXQKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPExTU2VyaWFsaXplcj4ocDEsc3RhdGljX2Nh
c3Q8TFNTZXJpYWxpemVyOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgTFNTZXJpYWxpemVy
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKkxTU2VyaWFsaXplcjo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8TFNT
ZXJpYWxpemVyPihwMSxzdGF0aWNfY2FzdDxMU1NlcmlhbGl6ZXI6OlByaXZhdGUgKj4oZCkpOwog
fQpAQCAtMjc4MSwyMSArMjc4MSwyMSBAQCBib29sIExTU2VyaWFsaXplckZpbHRlcjo6aGFzUHJv
cGVydHkoRXhlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBMU1NlcmlhbGl6ZXJGaWx0
ZXI6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTFNTZXJpYWxpemVyRmls
dGVyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXRW
YWx1ZTxMU1NlcmlhbGl6ZXJGaWx0ZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0K
IAotVmFsdWUgTFNTZXJpYWxpemVyRmlsdGVyOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKkxTU2VyaWFsaXplckZpbHRlcjo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9V
TlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IExTU2VyaWFs
aXplckZpbHRlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKkxT
U2VyaWFsaXplckZpbHRlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgp
OwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiB9CiAKIE9iamVjdEltcCAqTFNTZXJpYWxpemVyRmlsdGVyOjpicmlkZ2UoRXhlY1N0YXRl
ICpwMSkgY29uc3QKQEAgLTI4MDMsNyArMjgwMyw3IEBAIE9iamVjdEltcCAqTFNTZXJpYWxpemVy
RmlsdGVyOjpicmlkZ2UoRXgKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxMU1NlcmlhbGl6ZXJG
aWx0ZXI+KHAxLHN0YXRpY19jYXN0PExTU2VyaWFsaXplckZpbHRlcjo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIExTU2VyaWFsaXplckZpbHRlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpMU1NlcmlhbGl6ZXJGaWx0ZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PExTU2VyaWFsaXplckZpbHRlcj4ocDEs
c3RhdGljX2Nhc3Q8TFNTZXJpYWxpemVyRmlsdGVyOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI4
MTIsMTUgKzI4MTIsMTUgQEAgYm9vbCBNZWRpYUxpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAq
cAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZNZWRpYUxp
c3Q6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3Qg
cHJvdG8gPSBNZWRpYUxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTWVkaWFMaXN0
UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biB0cnVlOwogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5SW5k
ZXgoJm9rKTsKICAgICBpZihvayAmJiBpIDwgbGVuZ3RoKCkpIHJldHVybiB0cnVlOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTWVkaWFMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKk1lZGlhTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGludCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7
CkBAIC0yODQ2LDEwICsyODQ2LDEwIEBAIE1lZGlhTGlzdCBLRE9NOjpFY21hSW50ZXJmYWNlOjpp
bmhlcml0ZWQKIAlRX1VOVVNFRChwMSk7IHJldHVybiBNZWRpYUxpc3Q6Om51bGw7CiB9CiAKLVZh
bHVlIE1lZGlhTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpNZWRpYUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0g
ICAgT2JqZWN0IHByb3RvID0gTWVkaWFMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3Rv
Lmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0
SW1wICpwcm90byA9IE1lZGlhTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQo
cDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KQEAgLTI4NjUsMTAgKzI4NjUsMTAgQEAg
Ym9vbCBNZWRpYUxpc3Q6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EXwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotT2JqZWN0IE1lZGlhTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKk1lZGlhTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgaWYocDEpIHJldHVybiBNZWRpYUxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpNZWRpYUxpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjg3Niw3
ICsyODc2LDcgQEAgT2JqZWN0SW1wICpNZWRpYUxpc3Q6OmJyaWRnZShFeGVjU3RhdGUgKgogICAg
IHJldHVybiBuZXcgRE9NUldCcmlkZ2U8TWVkaWFMaXN0PihwMSxzdGF0aWNfY2FzdDxNZWRpYUxp
c3Q6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBNZWRpYUxpc3Q6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqTWVkaWFMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxNZWRpYUxpc3Q+KHAxLHN0YXRpY19j
YXN0PE1lZGlhTGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yODg1LDEzICsyODg1LDEzIEBA
IGJvb2wgTW91c2VFdmVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICoKIHsKICAgICBjb25zdCBI
YXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmTW91c2VFdmVudDo6c19oYXNoVGFibGUs
cDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IE1vdXNlRXZl
bnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTW91c2VFdmVudFByb3RvOjpzZWxmKHAx
KTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBp
ZihVSUV2ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotVmFsdWUgTW91c2VFdmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpNb3VzZUV2ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBsb29rdXBHZXQ8TW91c2VFdmVudFByb3RvRnVuYyxNb3VzZUV2ZW50PihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0yOTE0LDE4ICsyOTE0LDE4IEBAIE1vdXNlRXZl
bnQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdGUKIAlRX1VOVVNFRChwMSk7IHJldHVybiBN
b3VzZUV2ZW50OjpudWxsOwogfQogCi1WYWx1ZSBNb3VzZUV2ZW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKk1vdXNlRXZlbnQ6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gTW91c2VFdmVudFBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBNb3VzZUV2ZW50UHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90
by0+Z2V0KHAxLHAyKTsKICAgICBpZihVSUV2ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBVSUV2ZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
T2JqZWN0IE1vdXNlRXZlbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpNb3VzZUV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIE1vdXNlRXZlbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVj
dDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1w
ICpNb3VzZUV2ZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI5MzMsNyArMjkz
Myw3IEBAIE9iamVjdEltcCAqTW91c2VFdmVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAKICAgICByZXR1
cm4gbmV3IERPTUJyaWRnZTxNb3VzZUV2ZW50PihwMSxzdGF0aWNfY2FzdDxNb3VzZUV2ZW50OjpQ
cml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgTW91c2VFdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK1ZhbHVlSW1wICpNb3VzZUV2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxNb3VzZUV2ZW50PihwMSxzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI5NDIsMTMgKzI5NDIsMTMgQEAg
Ym9vbCBNdXRhdGlvbkV2ZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogewogICAgIGNvbnN0IEhh
c2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZNdXRhdGlvbkV2ZW50OjpzX2hhc2hUYWJs
ZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gTXV0YXRp
b25FdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBNdXRhdGlvbkV2ZW50UHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVl
OwogICAgIGlmKEV2ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTXV0YXRpb25FdmVudDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpNdXRhdGlvbkV2ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8TXV0YXRpb25FdmVudFByb3RvRnVuYyxNdXRh
dGlvbkV2ZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0yOTcxLDE4ICsy
OTcxLDE4IEBAIE11dGF0aW9uRXZlbnQgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXIKIAlRX1VO
VVNFRChwMSk7IHJldHVybiBNdXRhdGlvbkV2ZW50OjpudWxsOwogfQogCi1WYWx1ZSBNdXRhdGlv
bkV2ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKk11
dGF0aW9uRXZlbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAg
T2JqZWN0IHByb3RvID0gTXV0YXRpb25FdmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90
by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVj
dEltcCAqcHJvdG8gPSBNdXRhdGlvbkV2ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihF
dmVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gRXZlbnQ6OmdldChwMSxwMixwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgTXV0YXRpb25FdmVudDo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKk11dGF0aW9uRXZlbnQ6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTXV0YXRpb25F
dmVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxs
KCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKk11dGF0aW9uRXZlbnQ6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjk5MCw3ICsyOTkwLDcgQEAgT2JqZWN0SW1w
ICpNdXRhdGlvbkV2ZW50OjpicmlkZ2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcgRE9NQnJpZGdl
PE11dGF0aW9uRXZlbnQ+KHAxLHN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnQ6OlByaXZhdGUgKj4o
ZCkpOwogfQogCi1WYWx1ZSBNdXRhdGlvbkV2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKk11dGF0aW9uRXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PE11dGF0aW9uRXZlbnQ+KHAxLHN0YXRpY19jYXN0
PE11dGF0aW9uRXZlbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMjk5OSwxNSArMjk5OSwxNSBA
QCBib29sIE5hbWVkTm9kZU1hcDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiB7CiAgICAgY29uc3Qg
SGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJk5hbWVkTm9kZU1hcDo6c19oYXNoVGFi
bGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IE5hbWVk
Tm9kZU1hcFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBOYW1lZE5vZGVNYXBQcm90bzo6
c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CiAgICAgYm9vbCBvazsKICAgICB1bnNpZ25lZCBpbnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2sp
OwogICAgIGlmKG9rICYmIGkgPCBsZW5ndGgoKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBOYW1lZE5vZGVNYXA6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqTmFtZWROb2RlTWFwOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsK
QEAgLTMwMzMsMTAgKzMwMzMsMTAgQEAgTmFtZWROb2RlTWFwIEtET006OkVjbWFJbnRlcmZhY2U6
OmluaGVyaQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIE5hbWVkTm9kZU1hcDo6bnVsbDsKIH0KIAot
VmFsdWUgTmFtZWROb2RlTWFwOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKk5hbWVkTm9kZU1hcDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBOYW1lZE5vZGVNYXBQcm90bzo6c2VsZihwMSk7Ci0g
ICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsK
KyAgICBPYmplY3RJbXAgKnByb3RvID0gTmFtZWROb2RlTWFwUHJvdG86OnNlbGYocDEpOworICAg
IGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsK
ICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtMzA0Nywx
MCArMzA0NywxMCBAQCBib29sIE5hbWVkTm9kZU1hcDo6cHV0KFBVVF9NRVRIT0RfQVJHUykKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBOYW1lZE5vZGVNYXA6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpOYW1lZE5vZGVNYXA6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTmFtZWROb2RlTWFwUHJvdG86
OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTmFtZWROb2RlTWFwOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTMwNTgsNyArMzA1OCw3IEBAIE9iamVjdEltcCAqTmFtZWROb2Rl
TWFwOjpicmlkZ2UoRXhlY1N0YXQKICAgICByZXR1cm4gbmV3IERPTVJXQnJpZGdlPE5hbWVkTm9k
ZU1hcD4ocDEsc3RhdGljX2Nhc3Q8TmFtZWROb2RlTWFwOjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgTmFtZWROb2RlTWFwOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
Kk5hbWVkTm9kZU1hcDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4g
Y2FjaGVET01PYmplY3Q8TmFtZWROb2RlTWFwPihwMSxzdGF0aWNfY2FzdDxOYW1lZE5vZGVNYXA6
OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzA2NywxMyArMzA2NywxMyBAQCBib29sIE5vZGU6Omhh
c1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEsY29uCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0g
TG9va3VwOjpmaW5kRW50cnkoJk5vZGU6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1
cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBOb2RlUHJvdG86OnNlbGYocDEpOwotICAgIGlm
KHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpw
cm90byA9IE5vZGVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoRXZlbnRUYXJnZXQ6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBOb2RlOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKk5vZGU6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxOb2RlUHJvdG9GdW5jLE5vZGU+KHAx
LHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTMxMjksMTAgKzMxMjksMTAgQEAgTm9k
ZSBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWROb2RlQwogCVFfVU5VU0VEKHAxKTsgcmV0
dXJuIE5vZGU6Om51bGw7CiB9CiAKLVZhbHVlIE5vZGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqTm9kZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBOb2RlUHJvdG86OnNlbGYocDEpOwotICAg
IGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7Cisg
ICAgT2JqZWN0SW1wICpwcm90byA9IE5vZGVQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKEV2
ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBFdmVudFRhcmdldDo6Z2V0KHAx
LHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0zMTUxLDEwICszMTUxLDEw
IEBAIGJvb2wgTm9kZTo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU9iamVjdCBOb2RlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K09iamVjdEltcCAqTm9kZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBOb2RlUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqTm9k
ZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zMTYyLDcgKzMxNjIsNyBAQCBPYmpl
Y3RJbXAgKk5vZGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjCiAgICAgcmV0dXJuIG5ldyBET01S
V0JyaWRnZTxOb2RlPihwMSxzdGF0aWNfY2FzdDxOb2RlOjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgTm9kZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpOb2RlOjpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxO
b2RlPihwMSxzdGF0aWNfY2FzdDxOb2RlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTMxNzEsMTIg
KzMxNzEsMTIgQEAgYm9vbCBOb2RlSXRlcmF0b3I6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZQogewog
ICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZOb2RlSXRlcmF0b3I6
OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJv
dG8gPSBOb2RlSXRlcmF0b3JQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gTm9kZUl0ZXJh
dG9yUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgTm9kZUl0ZXJhdG9yOjpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKk5vZGVJdGVyYXRvcjo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PE5vZGVJdGVyYXRv
clByb3RvRnVuYyxOb2RlSXRlcmF0b3I+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0K
QEAgLTMxOTksMTggKzMxOTksMTggQEAgTm9kZUl0ZXJhdG9yIEtET006OkVjbWFJbnRlcmZhY2U6
OmluaGVyaQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIE5vZGVJdGVyYXRvcjo6bnVsbDsKIH0KIAot
VmFsdWUgTm9kZUl0ZXJhdG9yOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKk5vZGVJdGVyYXRvcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBOb2RlSXRlcmF0b3JQcm90bzo6c2VsZihwMSk7Ci0g
ICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsK
KyAgICBPYmplY3RJbXAgKnByb3RvID0gTm9kZUl0ZXJhdG9yUHJvdG86OnNlbGYocDEpOworICAg
IGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsK
ICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3Qg
Tm9kZUl0ZXJhdG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAq
Tm9kZUl0ZXJhdG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIE5vZGVJdGVyYXRvclByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0
OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAg
Kk5vZGVJdGVyYXRvcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zMjE4LDcgKzMy
MTgsNyBAQCBPYmplY3RJbXAgKk5vZGVJdGVyYXRvcjo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0
dXJuIG5ldyBET01CcmlkZ2U8Tm9kZUl0ZXJhdG9yPihwMSxzdGF0aWNfY2FzdDxOb2RlSXRlcmF0
b3I6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBOb2RlSXRlcmF0b3I6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqTm9kZUl0ZXJhdG9yOjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxOb2RlSXRlcmF0b3I+KHAx
LHN0YXRpY19jYXN0PE5vZGVJdGVyYXRvcjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zMjI3LDE1
ICszMjI3LDE1IEBAIGJvb2wgTm9kZUxpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEKIHsK
ICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmTm9kZUxpc3Q6OnNf
aGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8g
PSBOb2RlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBOb2RlTGlzdFByb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
ICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGludCBpID0gcDIudG9BcnJheUluZGV4KCZvayk7
CiAgICAgaWYob2sgJiYgaSA8IGxlbmd0aCgpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVZhbHVlIE5vZGVMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKk5vZGVMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGJvb2wg
b2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsKQEAgLTMyNjEs
MTggKzMyNjEsMTggQEAgTm9kZUxpc3QgS0RPTTo6RWNtYUludGVyZmFjZTo6aW5oZXJpdGVkTgog
CVFfVU5VU0VEKHAxKTsgcmV0dXJuIE5vZGVMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBOb2RlTGlz
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpOb2RlTGlz
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJv
dG8gPSBOb2RlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBO
b2RlTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IE5vZGVMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqTm9kZUxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gTm9kZUxpc3RQcm90bzo6c2VsZihwMSk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpOb2RlTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC0zMjgwLDcgKzMyODAsNyBAQCBPYmplY3RJbXAgKk5vZGVMaXN0OjpicmlkZ2UoRXhlY1N0YXRl
ICpwCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8Tm9kZUxpc3Q+KHAxLHN0YXRpY19jYXN0PE5v
ZGVMaXN0OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgTm9kZUxpc3Q6OmNhY2hlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqTm9kZUxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PE5vZGVMaXN0PihwMSxzdGF0aWNf
Y2FzdDxOb2RlTGlzdDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zMjkzLDEyICszMjkzLDEyIEBA
IGJvb2wgTm90YXRpb246Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVZhbHVlIE5vdGF0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKk5vdGF0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBsb29rdXBHZXRWYWx1ZTxOb3RhdGlvbj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBOb3RhdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpOb3RhdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICBpZihOb2RlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBOb2RlOjpnZXQocDEs
cDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTMzMTMsMTAgKzMzMTMsMTAgQEAg
Ym9vbCBOb3RhdGlvbjo6cHV0KFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU9iamVjdCBOb3RhdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmpl
Y3RJbXAgKk5vdGF0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpOb3RhdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CkBAIC0zMzI0LDcgKzMzMjQsNyBAQCBPYmplY3RJbXAgKk5vdGF0aW9uOjpicmlkZ2UoRXhlY1N0
YXRlICpwCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxOb3RhdGlvbj4ocDEsc3RhdGljX2Nh
c3Q8Tm90YXRpb246OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBOb3RhdGlvbjo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpOb3RhdGlvbjo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8Tm90YXRpb24+KHAxLHN0
YXRpY19jYXN0PE5vdGF0aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTMzMzcsMTIgKzMzMzcs
MTIgQEAgYm9vbCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Omhhc1Byb3BlcnR5KAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotVmFsdWUgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8UHJvY2Vzc2lu
Z0luc3RydWN0aW9uPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoTm9kZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
Tm9kZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0zMzYyLDEw
ICszMzYyLDEwIEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwdXRJblBhcmVudHMKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
cDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CkBAIC0zMzczLDcgKzMzNzMsNyBAQCBPYmplY3RJbXAgKlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6
YnJpZGdlCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+
KHAxLHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6UHJpdmF0ZSAqPihkKSk7CiB9
CiAKLVZhbHVlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFByb2Nlc3NpbmdJbnN0cnVjdGlv
bj4ocDEsc3RhdGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTMzODYsMjEgKzMzODYsMjEgQEAgYm9vbCBLRE9NOjpSR0JDb2xvcjo6aGFzUHJvcGVy
dHkoRXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgS0RPTTo6UkdCQ29sb3I6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqS0RPTTo6UkdCQ29sb3I6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPEtE
T006OlJHQkNvbG9yPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIEtE
T006OlJHQkNvbG9yOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKktET006OlJHQkNvbG9yOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgS0RPTTo6UkdCQ29sb3I6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpLRE9NOjpSR0JDb2xvcjo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0
ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqS0RPTTo6
UkdCQ29sb3I6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzQwOCw3ICszNDA4LDcg
QEAgT2JqZWN0SW1wICpLRE9NOjpSR0JDb2xvcjo6YnJpZGdlKEV4ZWNTdAogICAgIHJldHVybiBu
ZXcgRE9NQnJpZGdlPEtET006OlJHQkNvbG9yPihwMSxzdGF0aWNfY2FzdDxLRE9NOjpSR0JDb2xv
cjo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEtET006OlJHQkNvbG9yOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKktET006OlJHQkNvbG9yOjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxLRE9NOjpSR0JDb2xv
cj4ocDEsc3RhdGljX2Nhc3Q8S0RPTTo6UkdCQ29sb3I6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAt
MzQxNywxMiArMzQxNywxMiBAQCBib29sIFJhbmdlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAx
LGNvCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlJhbmdl
OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHBy
b3RvID0gUmFuZ2VQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gUmFuZ2VQcm90bzo6c2Vs
ZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBSYW5nZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpSYW5nZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICByZXR1cm4gbG9va3VwR2V0PFJhbmdlUHJvdG9GdW5jLFJhbmdlPihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CkBAIC0zNDUwLDE4ICszNDUwLDE4IEBAIFJhbmdlIEtET006OkVjbWFJ
bnRlcmZhY2U6OmluaGVyaXRlZFJhbmcKIAlRX1VOVVNFRChwMSk7IHJldHVybiBSYW5nZTo6bnVs
bDsKIH0KIAotVmFsdWUgUmFuZ2U6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqUmFuZ2U6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
Ci0gICAgT2JqZWN0IHByb3RvID0gUmFuZ2VQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8u
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJ
bXAgKnByb3RvID0gUmFuZ2VQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBSYW5nZTo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlJhbmdlOjpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFJhbmdlUHJvdG86OnNlbGYocDEpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqUmFuZ2U6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
MzQ2OSw3ICszNDY5LDcgQEAgT2JqZWN0SW1wICpSYW5nZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEp
IAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPFJhbmdlPihwMSxzdGF0aWNfY2FzdDxSYW5nZTo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFJhbmdlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKlJhbmdlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBjYWNoZURPTU9iamVjdDxSYW5nZT4ocDEsc3RhdGljX2Nhc3Q8UmFuZ2U6OlByaXZh
dGUgKj4oZCkpOwogfQpAQCAtMzQ4MiwyMSArMzQ4MiwyMSBAQCBib29sIFJhbmdlRXhjZXB0aW9u
OjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBSYW5n
ZUV4Y2VwdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpSYW5nZUV4
Y2VwdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3Vw
R2V0VmFsdWU8UmFuZ2VFeGNlcHRpb24+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0K
IAotVmFsdWUgUmFuZ2VFeGNlcHRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqUmFuZ2VFeGNlcHRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBSYW5nZUV4Y2VwdGlvbjo6
cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlJhbmdlRXhjZXB0aW9u
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAx
LT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9i
amVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0
SW1wICpSYW5nZUV4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNTA0
LDcgKzM1MDQsNyBAQCBPYmplY3RJbXAgKlJhbmdlRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0CiAg
ICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8UmFuZ2VFeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PFJh
bmdlRXhjZXB0aW9uOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgUmFuZ2VFeGNlcHRpb246
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqUmFuZ2VFeGNlcHRpb246OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhY2hlRE9NT2JqZWN0PFJh
bmdlRXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxSYW5nZUV4Y2VwdGlvbjo6UHJpdmF0ZSAqPihk
KSk7CiB9CkBAIC0zNTE3LDIxICszNTE3LDIxIEBAIGJvb2wgS0RPTTo6UmVjdDo6aGFzUHJvcGVy
dHkoRXhlY1N0YXRlICoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIEtET006OlJlY3Q6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqS0RPTTo6UmVjdDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8UmVjdD4o
cDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBLRE9NOjpSZWN0OjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKktET006OlJlY3Q6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBR
X1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LU9iamVjdCBLRE9NOjpSZWN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVj
dEltcCAqS0RPTTo6UmVjdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
aWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgp
OwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiB9CiAKIE9iamVjdEltcCAqS0RPTTo6UmVjdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CkBAIC0zNTM5LDcgKzM1MzksNyBAQCBPYmplY3RJbXAgKktET006OlJlY3Q6OmJyaWRnZShF
eGVjU3RhdGUgCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8S0RPTTo6UmVjdD4ocDEsc3RhdGlj
X2Nhc3Q8S0RPTTo6UmVjdDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIEtET006OlJlY3Q6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqS0RPTTo6UmVjdDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8S0RPTTo6
UmVjdD4ocDEsc3RhdGljX2Nhc3Q8S0RPTTo6UmVjdDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0z
NTUyLDEyICszNTUyLDEyIEBAIGJvb2wgU3R5bGVTaGVldDo6aGFzUHJvcGVydHkoRXhlY1N0YXRl
ICoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFN0eWxlU2hlZXQ6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU3R5bGVTaGVldDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8U3R5bGVTaGVldD4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTdHlsZVNoZWV0OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlN0eWxlU2hlZXQ6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNF
RChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0zNTc0LDEw
ICszNTc0LDEwIEBAIGJvb2wgU3R5bGVTaGVldDo6cHV0SW5QYXJlbnRzKFBVVF9NRVRIT0QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTdHlsZVNoZWV0Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU3R5bGVTaGVldDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVp
bHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51
bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU3R5bGVTaGVldDo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zNTg1LDcgKzM1ODUsNyBAQCBPYmplY3RJbXAg
KlN0eWxlU2hlZXQ6OmJyaWRnZShFeGVjU3RhdGUgCiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRn
ZTxTdHlsZVNoZWV0PihwMSxzdGF0aWNfY2FzdDxTdHlsZVNoZWV0OjpQcml2YXRlICo+KGQpKTsK
IH0KIAotVmFsdWUgU3R5bGVTaGVldDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTdHlsZVNoZWV0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVy
biBjYWNoZURPTU9iamVjdDxTdHlsZVNoZWV0PihwMSxzdGF0aWNfY2FzdDxTdHlsZVNoZWV0OjpQ
cml2YXRlICo+KGQpKTsKIH0KQEAgLTM1OTQsMTUgKzM1OTQsMTUgQEAgYm9vbCBTdHlsZVNoZWV0
TGlzdDo6aGFzUHJvcGVydHkoRXhlY1N0YQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExv
b2t1cDo6ZmluZEVudHJ5KCZTdHlsZVNoZWV0TGlzdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlm
KGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFN0eWxlU2hlZXRMaXN0UHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IFN0eWxlU2hlZXRMaXN0UHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGJvb2wg
b2s7CiAgICAgdW5zaWduZWQgaW50IGkgPSBwMi50b0FycmF5SW5kZXgoJm9rKTsKICAgICBpZihv
ayAmJiBpIDwgbGVuZ3RoKCkpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgU3R5bGVTaGVldExpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU3R5bGVTaGVldExpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgYm9v
bCBvazsKICAgICB1bnNpZ25lZCBpbnQgaSA9IHAyLnRvQXJyYXlJbmRleCgmb2spOwpAQCAtMzYy
OCwxOCArMzYyOCwxOCBAQCBTdHlsZVNoZWV0TGlzdCBLRE9NOjpFY21hSW50ZXJmYWNlOjppbmhl
CiAJUV9VTlVTRUQocDEpOyByZXR1cm4gU3R5bGVTaGVldExpc3Q6Om51bGw7CiB9CiAKLVZhbHVl
IFN0eWxlU2hlZXRMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlN0eWxlU2hlZXRMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewotICAgIE9iamVjdCBwcm90byA9IFN0eWxlU2hlZXRMaXN0UHJvdG86OnNlbGYocDEpOwot
ICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IFN0eWxlU2hlZXRMaXN0UHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAy
KTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmpl
Y3QgU3R5bGVTaGVldExpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpTdHlsZVNoZWV0TGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBTdHlsZVNoZWV0TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlN0eWxlU2hlZXRMaXN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTM2NDcsNyArMzY0Nyw3IEBAIE9iamVjdEltcCAqU3R5bGVTaGVldExpc3Q6OmJyaWRnZShFeGVj
U3QKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxTdHlsZVNoZWV0TGlzdD4ocDEsc3RhdGljX2Nh
c3Q8U3R5bGVTaGVldExpc3Q6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTdHlsZVNoZWV0
TGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTdHlsZVNoZWV0TGlz
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmpl
Y3Q8U3R5bGVTaGVldExpc3Q+KHAxLHN0YXRpY19jYXN0PFN0eWxlU2hlZXRMaXN0OjpQcml2YXRl
ICo+KGQpKTsKIH0KQEAgLTM2NTYsMTMgKzM2NTYsMTMgQEAgYm9vbCBUZXh0OjpoYXNQcm9wZXJ0
eShFeGVjU3RhdGUgKnAxLGNvbgogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZUZXh0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7
Ci0gICAgT2JqZWN0IHByb3RvID0gVGV4dFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5o
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBU
ZXh0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiB0cnVlOwogICAgIGlmKENoYXJhY3RlckRhdGE6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBUZXh0OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlRleHQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxUZXh0UHJvdG9GdW5jLFRleHQ+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTM2ODcsMTAgKzM2ODcsMTAgQEAgVGV4dCBLRE9N
OjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRUZXh0QwogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIFRl
eHQ6Om51bGw7CiB9CiAKLVZhbHVlIFRleHQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqVGV4dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBUZXh0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHBy
b3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2Jq
ZWN0SW1wICpwcm90byA9IFRleHRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKENoYXJhY3Rl
ckRhdGE6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIENoYXJhY3RlckRhdGE6OmdldChwMSxw
MixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtMzcwNCwxMCArMzcwNCwxMCBA
QCBib29sIFRleHQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1PYmplY3QgVGV4dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAg
KlRleHQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gVGV4dFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlRleHQ6OmJyaWRnZShF
eGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzcxNSw3ICszNzE1LDcgQEAgT2JqZWN0SW1wICpUZXh0
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgYwogICAgIHJldHVybiBuZXcgRE9NUldCcmlkZ2U8VGV4
dD4ocDEsc3RhdGljX2Nhc3Q8VGV4dDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFRleHQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqVGV4dDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8VGV4dD4ocDEsc3Rh
dGljX2Nhc3Q8VGV4dDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zNzI0LDEyICszNzI0LDEyIEBA
IGJvb2wgVHJlZVdhbGtlcjo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICoKIHsKICAgICBjb25zdCBI
YXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmVHJlZVdhbGtlcjo6c19oYXNoVGFibGUs
cDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFRyZWVXYWxr
ZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gVHJlZVdhbGtlclByb3RvOjpzZWxmKHAx
KTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFRyZWVXYWxrZXI6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqVHJlZVdhbGtlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gbG9va3VwR2V0PFRyZWVXYWxrZXJQcm90b0Z1bmMsVHJlZVdhbGtlcj4o
cDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtMzc1MiwxMCArMzc1MiwxMCBAQCBU
cmVlV2Fsa2VyIEtET006OkVjbWFJbnRlcmZhY2U6OmluaGVyaXRlCiAJUV9VTlVTRUQocDEpOyBy
ZXR1cm4gVHJlZVdhbGtlcjo6bnVsbDsKIH0KIAotVmFsdWUgVHJlZVdhbGtlcjo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpUcmVlV2Fsa2VyOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFRyZWVX
YWxrZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gVHJlZVdhbGtl
clByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKIH0KQEAgLTM3NzEsMTAgKzM3NzEsMTAgQEAgYm9vbCBUcmVlV2Fsa2VyOjpwdXRJ
blBhcmVudHMoUFVUX01FVEhPRAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFRyZWVX
YWxrZXI6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpUcmVlV2Fs
a2VyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IFRyZWVXYWxrZXJQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpUcmVlV2Fsa2Vy
OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM3ODIsNyArMzc4Miw3IEBAIE9iamVj
dEltcCAqVHJlZVdhbGtlcjo6YnJpZGdlKEV4ZWNTdGF0ZSAKICAgICByZXR1cm4gbmV3IERPTVJX
QnJpZGdlPFRyZWVXYWxrZXI+KHAxLHN0YXRpY19jYXN0PFRyZWVXYWxrZXI6OlByaXZhdGUgKj4o
ZCkpOwogfQogCi1WYWx1ZSBUcmVlV2Fsa2VyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
VmFsdWVJbXAgKlRyZWVXYWxrZXI6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGNhY2hlRE9NT2JqZWN0PFRyZWVXYWxrZXI+KHAxLHN0YXRpY19jYXN0PFRyZWVXYWxr
ZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzc5MSwxMiArMzc5MSwxMiBAQCBib29sIFR5cGVJ
bmZvOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAxCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICpl
ID0gTG9va3VwOjpmaW5kRW50cnkoJlR5cGVJbmZvOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYo
ZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gVHlwZUluZm9Qcm90bzo6c2VsZihw
MSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBP
YmplY3RJbXAgKnByb3RvID0gVHlwZUluZm9Qcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8t
Pmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBUeXBlSW5mbzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpU
eXBlSW5mbzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gbG9va3Vw
R2V0PFR5cGVJbmZvUHJvdG9GdW5jLFR5cGVJbmZvPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CkBAIC0zODE5LDE4ICszODE5LDE4IEBAIFR5cGVJbmZvIEtET006OkVjbWFJbnRlcmZh
Y2U6OmluaGVyaXRlZFQKIAlRX1VOVVNFRChwMSk7IHJldHVybiBUeXBlSW5mbzo6bnVsbDsKIH0K
IAotVmFsdWUgVHlwZUluZm86OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqVHlwZUluZm86OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
Ci0gICAgT2JqZWN0IHByb3RvID0gVHlwZUluZm9Qcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJv
dG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmpl
Y3RJbXAgKnByb3RvID0gVHlwZUluZm9Qcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhh
c1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VE
KHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBUeXBlSW5mbzo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlR5cGVJbmZvOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFR5cGVJbmZvUHJv
dG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqVHlwZUluZm86OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtMzgzOCw3ICszODM4LDcgQEAgT2JqZWN0SW1wICpUeXBlSW5mbzo6
YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPFR5cGVJbmZvPihw
MSxzdGF0aWNfY2FzdDxUeXBlSW5mbzo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFR5cGVJ
bmZvOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlR5cGVJbmZvOjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBjYWNoZURPTU9iamVjdDxUeXBl
SW5mbz4ocDEsc3RhdGljX2Nhc3Q8VHlwZUluZm86OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzg0
NywxMyArMzg0NywxMyBAQCBib29sIFVJRXZlbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEs
CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlVJRXZlbnQ6
OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJv
dG8gPSBVSUV2ZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFVJRXZlbnRQcm90bzo6
c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CiAgICAgaWYoRXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBVSUV2ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlVJRXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGxvb2t1cEdldDxVSUV2ZW50UHJvdG9GdW5jLFVJRXZlbnQ+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KQEAgLTM4ODAsMTggKzM4ODAsMTggQEAgVUlFdmVudCBLRE9NOjpF
Y21hSW50ZXJmYWNlOjppbmhlcml0ZWRVSQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIFVJRXZlbnQ6
Om51bGw7CiB9CiAKLVZhbHVlIFVJRXZlbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqVUlFdmVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBVSUV2ZW50UHJvdG86OnNlbGYocDEpOwotICAg
IGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7Cisg
ICAgT2JqZWN0SW1wICpwcm90byA9IFVJRXZlbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJv
dG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlm
KEV2ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBFdmVudDo6Z2V0KHAxLHAyLHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBVSUV2ZW50Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqVUlFdmVudDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBVSUV2ZW50UHJvdG86OnNlbGYo
cDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqVUlFdmVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CkBAIC0zODk5LDcgKzM4OTksNyBAQCBPYmplY3RJbXAgKlVJRXZlbnQ6OmJyaWRnZShFeGVj
U3RhdGUgKnAxCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8VUlFdmVudD4ocDEsc3RhdGljX2Nh
c3Q8VUlFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFVJRXZlbnQ6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqVUlFdmVudDo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8VUlFdmVudD4ocDEsc3RhdGlj
X2Nhc3Q8VUlFdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zOTA4LDEyICszOTA4LDEyIEBA
IGJvb2wgWFBhdGhFdmFsdWF0b3I6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKIHsKICAgICBjb25zdCBI
YXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmWFBhdGhFdmFsdWF0b3I6OnNfaGFzaFRh
YmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBYUGF0
aEV2YWx1YXRvclByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBYUGF0aEV2YWx1YXRvclBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFhQYXRoRXZhbHVhdG9yOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoRXZhbHVhdG9yOjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBsb29rdXBHZXQ8WFBhdGhFdmFsdWF0
b3JQcm90b0Z1bmMsWFBhdGhFdmFsdWF0b3I+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KQEAgLTM5MzgsMTggKzM5MzgsMTggQEAgWFBhdGhFdmFsdWF0b3IgS0RPTTo6RWNtYUludGVy
ZmFjZTo6aW5oZQogCVFfVU5VU0VEKHAxKTsgcmV0dXJuIFhQYXRoRXZhbHVhdG9yOjpudWxsOwog
fQogCi1WYWx1ZSBYUGF0aEV2YWx1YXRvcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpYUGF0aEV2YWx1YXRvcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBYUGF0aEV2YWx1YXRvclByb3RvOjpz
ZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5n
ZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBYUGF0aEV2YWx1YXRvclByb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8t
PmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotT2JqZWN0IFhQYXRoRXZhbHVhdG9yOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK09iamVjdEltcCAqWFBhdGhFdmFsdWF0b3I6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gWFBhdGhFdmFsdWF0b3JQcm90bzo6c2VsZihwMSk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpYUGF0aEV2YWx1YXRvcjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CkBAIC0zOTU3LDcgKzM5NTcsNyBAQCBPYmplY3RJbXAgKlhQYXRoRXZhbHVhdG9yOjpi
cmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8WFBhdGhFdmFsdWF0b3I+KHAx
LHN0YXRpY19jYXN0PFhQYXRoRXZhbHVhdG9yOjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUg
WFBhdGhFdmFsdWF0b3I6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqWFBh
dGhFdmFsdWF0b3I6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNh
Y2hlRE9NT2JqZWN0PFhQYXRoRXZhbHVhdG9yPihwMSxzdGF0aWNfY2FzdDxYUGF0aEV2YWx1YXRv
cjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zOTcwLDIxICszOTcwLDIxIEBAIGJvb2wgWFBhdGhF
eGNlcHRpb246Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFhQYXRoRXhjZXB0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlhQYXRoRXhjZXB0aW9uOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBsb29rdXBHZXRWYWx1ZTxYUGF0aEV4Y2VwdGlvbj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQogCi1WYWx1ZSBYUGF0aEV4Y2VwdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpYUGF0aEV4Y2VwdGlvbjo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9V
TlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFhQYXRoRXhj
ZXB0aW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqWFBhdGhF
eGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlhQYXRoRXhjZXB0aW9uOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QK
QEAgLTM5OTIsNyArMzk5Miw3IEBAIE9iamVjdEltcCAqWFBhdGhFeGNlcHRpb246OmJyaWRnZShF
eGVjU3QKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxYUGF0aEV4Y2VwdGlvbj4ocDEsc3RhdGlj
X2Nhc3Q8WFBhdGhFeGNlcHRpb246OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBYUGF0aEV4
Y2VwdGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpYUGF0aEV4Y2Vw
dGlvbjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01P
YmplY3Q8WFBhdGhFeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0PFhQYXRoRXhjZXB0aW9uOjpQcml2
YXRlICo+KGQpKTsKIH0KQEAgLTQwMDEsMTIgKzQwMDEsMTIgQEAgYm9vbCBYUGF0aEV4cHJlc3Np
b246Omhhc1Byb3BlcnR5KEV4ZWNTdAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1
cDo6ZmluZEVudHJ5KCZYUGF0aEV4cHJlc3Npb246OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihl
KSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBYUGF0aEV4cHJlc3Npb25Qcm90bzo6
c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
KyAgICBPYmplY3RJbXAgKnByb3RvID0gWFBhdGhFeHByZXNzaW9uUHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotVmFsdWUgWFBhdGhFeHByZXNzaW9uOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlhQYXRoRXhwcmVzc2lvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gbG9va3VwR2V0PFhQYXRoRXhwcmVzc2lvblByb3RvRnVuYyxY
UGF0aEV4cHJlc3Npb24+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTQwMjks
MTggKzQwMjksMTggQEAgWFBhdGhFeHByZXNzaW9uIEtET006OkVjbWFJbnRlcmZhY2U6OmluaAog
CVFfVU5VU0VEKHAxKTsgcmV0dXJuIFhQYXRoRXhwcmVzc2lvbjo6bnVsbDsKIH0KIAotVmFsdWUg
WFBhdGhFeHByZXNzaW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlhQYXRoRXhwcmVzc2lvbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBYUGF0aEV4cHJlc3Npb25Qcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAy
KTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gWFBhdGhFeHByZXNzaW9uUHJvdG86OnNlbGYocDEp
OworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAx
LHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1P
YmplY3QgWFBhdGhFeHByZXNzaW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqWFBhdGhFeHByZXNzaW9uOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICBpZihwMSkgcmV0dXJuIFhQYXRoRXhwcmVzc2lvblByb3RvOjpzZWxmKHAxKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKlhQYXRoRXhwcmVzc2lvbjo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CkBAIC00MDQ4LDcgKzQwNDgsNyBAQCBPYmplY3RJbXAgKlhQYXRoRXhwcmVzc2lvbjo6YnJp
ZGdlKEV4ZWNTCiAgICAgcmV0dXJuIG5ldyBET01CcmlkZ2U8WFBhdGhFeHByZXNzaW9uPihwMSxz
dGF0aWNfY2FzdDxYUGF0aEV4cHJlc3Npb246OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBY
UGF0aEV4cHJlc3Npb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqWFBh
dGhFeHByZXNzaW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBj
YWNoZURPTU9iamVjdDxYUGF0aEV4cHJlc3Npb24+KHAxLHN0YXRpY19jYXN0PFhQYXRoRXhwcmVz
c2lvbjo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC00MDU3LDEyICs0MDU3LDEyIEBAIGJvb2wgWFBh
dGhOU1Jlc29sdmVyOjpoYXNQcm9wZXJ0eShFeGVjU3QKIHsKICAgICBjb25zdCBIYXNoRW50cnkg
KmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmWFBhdGhOU1Jlc29sdmVyOjpzX2hhc2hUYWJsZSxwMik7
CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gWFBhdGhOU1Jlc29s
dmVyUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFhQYXRoTlNSZXNvbHZlclByb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFhQYXRoTlNSZXNvbHZlcjo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpYUGF0aE5TUmVzb2x2ZXI6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGxvb2t1cEdldDxYUGF0aE5TUmVzb2x2ZXJQ
cm90b0Z1bmMsWFBhdGhOU1Jlc29sdmVyPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CkBAIC00MDkwLDE4ICs0MDkwLDE4IEBAIFhQYXRoTlNSZXNvbHZlciBLRE9NOjpFY21hSW50ZXJm
YWNlOjppbmgKIAlRX1VOVVNFRChwMSk7IHJldHVybiBYUGF0aE5TUmVzb2x2ZXI6Om51bGw7CiB9
CiAKLVZhbHVlIFhQYXRoTlNSZXNvbHZlcjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpYUGF0aE5TUmVzb2x2ZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gWFBhdGhOU1Jlc29sdmVyUHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3Rv
LmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFhQYXRoTlNSZXNvbHZlclByb3Rv
OjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJv
dG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotT2JqZWN0IFhQYXRoTlNSZXNvbHZlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlhQYXRoTlNSZXNvbHZlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBYUGF0aE5TUmVzb2x2ZXJQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1
cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpYUGF0aE5TUmVzb2x2ZXI6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtNDEwOSw3ICs0MTA5LDcgQEAgT2JqZWN0SW1wICpYUGF0aE5TUmVz
b2x2ZXI6OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcgRE9NQnJpZGdlPFhQYXRoTlNSZXNv
bHZlcj4ocDEsc3RhdGljX2Nhc3Q8WFBhdGhOU1Jlc29sdmVyOjpQcml2YXRlICo+KGQpKTsKIH0K
IAotVmFsdWUgWFBhdGhOU1Jlc29sdmVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKlhQYXRoTlNSZXNvbHZlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICByZXR1cm4gY2FjaGVET01PYmplY3Q8WFBhdGhOU1Jlc29sdmVyPihwMSxzdGF0aWNfY2FzdDxY
UGF0aE5TUmVzb2x2ZXI6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNDEyMiwxMiArNDEyMiwxMiBA
QCBib29sIFhQYXRoTmFtZXNwYWNlOjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBYUGF0aE5hbWVzcGFjZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpYUGF0aE5hbWVzcGFjZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8WFBhdGhOYW1lc3BhY2U+KHAxLHAyLCZzX2hh
c2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgWFBhdGhOYW1lc3BhY2U6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqWFBhdGhOYW1lc3BhY2U6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoTm9kZTo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gTm9kZTo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CkBAIC00MTQyLDEwICs0MTQyLDEwIEBAIGJvb2wgWFBhdGhOYW1lc3BhY2U6OnB1dChQ
VVRfTUVUSE9EX0FSR1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBYUGF0aE5hbWVz
cGFjZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlhQYXRoTmFt
ZXNwYWNlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpYUGF0aE5hbWVzcGFjZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC00MTUzLDcgKzQxNTMsNyBAQCBPYmplY3RJbXAgKlhQYXRoTmFtZXNwYWNlOjpicmlkZ2UoRXhl
Y1N0CiAgICAgcmV0dXJuIG5ldyBET01SV0JyaWRnZTxYUGF0aE5hbWVzcGFjZT4ocDEsc3RhdGlj
X2Nhc3Q8WFBhdGhOYW1lc3BhY2U6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBYUGF0aE5h
bWVzcGFjZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpYUGF0aE5hbWVz
cGFjZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01P
YmplY3Q8WFBhdGhOYW1lc3BhY2U+KHAxLHN0YXRpY19jYXN0PFhQYXRoTmFtZXNwYWNlOjpQcml2
YXRlICo+KGQpKTsKIH0KQEAgLTQxNjIsMTIgKzQxNjIsMTIgQEAgYm9vbCBYUGF0aFJlc3VsdDo6
aGFzUHJvcGVydHkoRXhlY1N0YXRlIAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1
cDo6ZmluZEVudHJ5KCZYUGF0aFJlc3VsdDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJl
dHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFhQYXRoUmVzdWx0UHJvdG86OnNlbGYocDEp
OwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2Jq
ZWN0SW1wICpwcm90byA9IFhQYXRoUmVzdWx0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgWFBhdGhSZXN1bHQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqWFBhdGhSZXN1bHQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGxvb2t1cEdldDxYUGF0aFJlc3VsdFByb3RvRnVuYyxYUGF0aFJlc3VsdD4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNDE5MCwxOCArNDE5MCwxOCBAQCBYUGF0aFJlc3VsdCBL
RE9NOjpFY21hSW50ZXJmYWNlOjppbmhlcml0CiAJUV9VTlVTRUQocDEpOyByZXR1cm4gWFBhdGhS
ZXN1bHQ6Om51bGw7CiB9CiAKLVZhbHVlIFhQYXRoUmVzdWx0OjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoUmVzdWx0OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFhQYXRoUmVzdWx0UHJv
dG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHBy
b3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFhQYXRoUmVzdWx0UHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90
by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1PYmplY3QgWFBhdGhSZXN1bHQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpYUGF0aFJlc3VsdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBYUGF0aFJlc3VsdFByb3RvOjpzZWxmKHAxKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlhQYXRoUmVzdWx0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTQyMDksNyArNDIwOSw3IEBAIE9iamVjdEltcCAqWFBhdGhSZXN1bHQ6OmJyaWRnZShFeGVjU3Rh
dGUKICAgICByZXR1cm4gbmV3IERPTUJyaWRnZTxYUGF0aFJlc3VsdD4ocDEsc3RhdGljX2Nhc3Q8
WFBhdGhSZXN1bHQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBYUGF0aFJlc3VsdDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpYUGF0aFJlc3VsdDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gY2FjaGVET01PYmplY3Q8WFBhdGhSZXN1
bHQ+KHAxLHN0YXRpY19jYXN0PFhQYXRoUmVzdWx0OjpQcml2YXRlICo+KGQpKTsKIH0KSW5kZXg6
IGtkb20vZWNtYS9ET01CcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rZG9tL2VjbWEvRE9NQnJpZGdlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtkb20vZWNtYS9ET01CcmlkZ2UuaAotLS0ga2RvbS9lY21hL0RPTUJy
aWRnZS5oCTkgSnVsIDIwMDUgMDY6NTM6NTggLTAwMDAJMS4xCisrKyBrZG9tL2VjbWEvRE9NQnJp
ZGdlLmgJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1l
c3BhY2UgS0pTCiB7Ci0JY2xhc3MgVmFsdWU7CisJY2xhc3MgVmFsdWVJbXA7CiAJY2xhc3MgVVN0
cmluZzsKIAljbGFzcyBFeGVjU3RhdGU7CiB9OwpAQCAtNjEsMjAgKzYxLDIwIEBAIG5hbWVzcGFj
ZSBLRE9NCiAKIAkJdHlwZW5hbWUgVDo6UHJpdmF0ZSAqaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW1wbDsgfQogCi0JCXZpcnR1YWwgS0pTOjpWYWx1ZSBnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorCQl2aXJ0dWFsIEtK
Uzo6VmFsdWVJbXAgKmdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CiAJCXsKIAkJCWtkRGVidWcoMjYwMDQpIDw8ICJET01C
cmlkZ2U6OmdldCgpLCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgIiBOYW1lOiAiIDw8
IGNsYXNzSW5mbygpLT5jbGFzc05hbWUgPDwgIiBPYmplY3Q6ICIgPDwgdGhpcy0+bV9pbXBsIDw8
IGVuZGw7CiAKIAkJCS8vIExvb2sgZm9yIHN0YW5kYXJkIHByb3BlcnRpZXMgKGUuZy4gdGhvc2Ug
aW4gdGhlIGhhc2h0YWJsZXMpCiAJCQlUIG9iaihtX2ltcGwpOwotCQkJS0pTOjpWYWx1ZSB2YWwg
PSBvYmouZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcyk7CisJCQlLSlM6OlZhbHVlSW1wICp2
YWwgPSBvYmouZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcyk7CiAKLQkJCWlmKHZhbC50eXBl
KCkgIT0gS0pTOjpVbmRlZmluZWRUeXBlKQorCQkJaWYodmFsLT50eXBlKCkgIT0gS0pTOjpVbmRl
ZmluZWRUeXBlKQogCQkJCXJldHVybiB2YWw7CiAKIAkJCS8vIE5vdCBmb3VuZCAtPiBmb3J3YXJk
IHRvIE9iamVjdEltcC4KIAkJCXZhbCA9IEtKUzo6T2JqZWN0SW1wOjpnZXQoZXhlYywgcHJvcGVy
dHlOYW1lKTsKLQkJCWlmKHZhbC50eXBlKCkgPT0gS0pTOjpVbmRlZmluZWRUeXBlKQorCQkJaWYo
dmFsLT50eXBlKCkgPT0gS0pTOjpVbmRlZmluZWRUeXBlKQogCQkJCWtkRGVidWcoMjYwMDQpIDw8
ICJXQVJOSU5HOiAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgIiBub3QgZm91bmQgaW4u
Li4gTmFtZTogIiA8PCBjbGFzc0luZm8oKS0+Y2xhc3NOYW1lIDw8ICIgT2JqZWN0OiAiIDw8IG1f
aW1wbCA8PCAiIG9uIGxpbmUgOiAiIDw8IGV4ZWMtPmNvbnRleHQoKS5jdXJTdG10Rmlyc3RMaW5l
KCkgPDwgZW5kbDsKIAogCQkJcmV0dXJuIHZhbDsKQEAgLTEwNSw3ICsxMDUsNyBAQCBuYW1lc3Bh
Y2UgS0RPTQogCXB1YmxpYzoKIAkJRE9NUldCcmlkZ2UoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIHR5
cGVuYW1lIFQ6OlByaXZhdGUgKmltcGwpIDogRE9NQnJpZGdlPFQ+KGV4ZWMsIGltcGwpIHsgfQog
Ci0JCXZpcnR1YWwgdm9pZCBwdXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIp
CisJCXZpcnR1YWwgdm9pZCBwdXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiAJ
CXsKIC8vCQkJaWYoIShhdHRyICYgS0pTOjpJbnRlcm5hbCkpCiAJCQlrZERlYnVnKDI2MDA0KSA8
PCAiRE9NUldCcmlkZ2U6OnB1dCgpLCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgIiBO
YW1lOiAiIDw8IHRoaXMtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUgPDwgIiBPYmplY3Q6ICIgPDwg
dGhpcy0+bV9pbXBsIDw8IGVuZGw7CkBAIC0xMjksMTkgKzEyOSwxOSBAQCBuYW1lc3BhY2UgS0RP
TQogCiAJCVQgKmltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGw7IH0KIAotCQl2aXJ0dWFsIEtK
Uzo6VmFsdWUgZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIg
JnByb3BlcnR5TmFtZSkgY29uc3QKKwkJdmlydHVhbCBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25z
dAogCQl7CiAJCQlrZERlYnVnKDI2MDA0KSA8PCAiRE9NQnJpZGdlQ3Rvcjo6Z2V0KCksICIgPDwg
cHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIE5hbWU6ICIgPDwgY2xhc3NJbmZvKCktPmNsYXNz
TmFtZSA8PCAiIE9iamVjdDogIiA8PCB0aGlzLT5tX2ltcGwgPDwgZW5kbDsKIAogCQkJLy8gTG9v
ayBmb3Igc3RhbmRhcmQgcHJvcGVydGllcyAoZS5nLiB0aG9zZSBpbiB0aGUgaGFzaHRhYmxlcykK
LQkJCUtKUzo6VmFsdWUgdmFsID0gbV9pbXBsLT5nZXQoZXhlYywgcHJvcGVydHlOYW1lLCB0aGlz
KTsKKwkJCUtKUzo6VmFsdWVJbXAgKnZhbCA9IG1faW1wbC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdGhpcyk7CiAKLQkJCWlmKHZhbC50eXBlKCkgIT0gS0pTOjpVbmRlZmluZWRUeXBlKQorCQkJ
aWYodmFsLT50eXBlKCkgIT0gS0pTOjpVbmRlZmluZWRUeXBlKQogCQkJCXJldHVybiB2YWw7CiAK
IAkJCS8vIE5vdCBmb3VuZCAtPiBmb3J3YXJkIHRvIE9iamVjdEltcC4KIAkJCXZhbCA9IEtKUzo6
T2JqZWN0SW1wOjpnZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKLQkJCWlmKHZhbC50eXBlKCkgPT0g
S0pTOjpVbmRlZmluZWRUeXBlKQorCQkJaWYodmFsLT50eXBlKCkgPT0gS0pTOjpVbmRlZmluZWRU
eXBlKQogCQkJCWtkRGVidWcoMjYwMDQpIDw8ICJXQVJOSU5HOiAiIDw8IHByb3BlcnR5TmFtZS5x
c3RyaW5nKCkgPDwgIiBub3QgZm91bmQgaW4uLi4gTmFtZTogIiA8PCBjbGFzc0luZm8oKS0+Y2xh
c3NOYW1lIDw8ICIgT2JqZWN0OiAiIDw8IG1faW1wbCA8PCAiIG9uIGxpbmUgOiAiIDw8IGV4ZWMt
PmNvbnRleHQoKS5jdXJTdG10Rmlyc3RMaW5lKCkgPDwgZW5kbDsKIAogCQkJcmV0dXJuIHZhbDsK
SW5kZXg6IGtkb20vZWNtYS9ET01Mb29rdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rZG9tL2VjbWEvRE9NTG9va3VwLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNApkaWZmIC1wIC11IC1yMS40IGtkb20vZWNtYS9ET01Mb29rdXAuaAotLS0ga2RvbS9lY21h
L0RPTUxvb2t1cC5oCTcgQXVnIDIwMDUgMDY6MTc6NDQgLTAwMDAJMS40CisrKyBrZG9tL2VjbWEv
RE9NTG9va3VwLmgJOCBBdWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtNDQsMTIgKzQ0LDEyIEBA
IHB1YmxpYzogXAogICAgIGJvb2wgaGFzUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsgXAogICAgIFwKICAgICAv
KiBnZXQoKSBtZXRob2QsIGNhbGxlZCBieSBET01CcmlkZ2U6OmdldCAqLyBcCi0gICAgS0pTOjpW
YWx1ZSBnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJv
cGVydHlOYW1lLCBjb25zdCBLSlM6Ok9iamVjdEltcCogYnJpZGdlKSBjb25zdDsgXAorICAgIEtK
Uzo6VmFsdWVJbXAgKmdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6T2JqZWN0SW1wKiBicmlkZ2UpIGNvbnN0OyBc
CiAgICAgXAogICAgIC8qIENhbGxlZCBieSBsb29rdXBHZXQoKS4gQXV0by1nZW5lcmF0ZWQuIEZv
cndhcmRzIHRvIHRoZSBwYXJlbnQgd2hpY2ggaGFzIHRoZSBnaXZlbiBwcm9wZXJ0eS4gKi8gXAot
ICAgIEtKUzo6VmFsdWUgZ2V0SW5QYXJlbnRzKEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBL
SlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpPYmplY3RJbXAqIGJyaWRn
ZSkgY29uc3Q7IFwKKyAgICBLSlM6OlZhbHVlSW1wICpnZXRJblBhcmVudHMoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6
Ok9iamVjdEltcCogYnJpZGdlKSBjb25zdDsgXAogICAgIFwKLSAgICBLSlM6Ok9iamVjdCBwcm90
b3R5cGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0O1wKKyAgICBLSlM6Ok9iamVjdEltcCAq
cHJvdG90eXBlKEtKUzo6RXhlY1N0YXRlICpleGVjKSBjb25zdDtcCiAJXAogCUtKUzo6T2JqZWN0
SW1wICpicmlkZ2UoS0pTOjpFeGVjU3RhdGUgKikgY29uc3Q7IFwKICAgICBcCkBAIC02Miw3ICs2
Miw3IEBAIHB1YmxpYzogXAogICovCiAjZGVmaW5lIEtET01fR0VUIFwKICAgICBLRE9NX0dFVF9D
T01NT04gXAotICAgIEtKUzo6VmFsdWUgY2FjaGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0
OyAKKyAgICBLSlM6OlZhbHVlSW1wICpjYWNoZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7
IAogCiAvKioKICAqIFNhbWUgYXMgS0RPTV9HRVQsIGJ1dCBmb3IgYmFzZSBjbGFzc2VzKGthbHlw
dHVzIGhlbHBzIGZpbmRpbmcgdGhlbSkuIFRoZSAKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOiBc
CiAgKi8KICNkZWZpbmUgS0RPTV9CQVNFQ0xBU1NfR0VUIFwKICAgICBLRE9NX0dFVF9DT01NT04g
XAotICAgIHZpcnR1YWwgS0pTOjpWYWx1ZSBjYWNoZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYykgY29u
c3Q7IAorICAgIHZpcnR1YWwgS0pTOjpWYWx1ZUltcCAqY2FjaGUoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMpIGNvbnN0OyAKIAogLyoqCiAgKiBGb3IgcmVhZC13cml0ZSBjbGFzc2VzIG9ubHksIGkuZS4g
dGhvc2Ugd2hpY2ggc3VwcG9ydCBwdXQoKS4KQEAgLTc5LDExICs3OSwxMSBAQCBwdWJsaWM6IFwK
ICAgICBcCiAgICAgLyogcHV0KCkgbWV0aG9kLCBjYWxsZWQgYnkgRE9NQnJpZGdlOjpwdXQgKi8g
XAogICAgIGJvb2wgcHV0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgXAotCQkJIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0
cik7IFwKKwkJCSBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOyBcCiAJXAogICAgIC8q
IENhbGxlZCBieSBsb29rdXBQdXQuIEF1dG8tZ2VuZXJhdGVkLiBMb29rcyBpbiBoYXNodGFibGUs
IGZvcndhcmRzIHRvIHBhcmVudHMuICovIFwKICAgICBib29sIHB1dEluUGFyZW50cyhLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFwKLQkJ
CQkJICBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQkJCQkgIEtKUzo6VmFs
dWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAKIC8qKgogICogRm9yIGNsYXNzZXMgd2hpY2ggaW5o
ZXJpdCBhIHJlYWQtd3JpdGUgY2xhc3MsIApAQCAtOTIsNyArOTIsNyBAQCBwdWJsaWM6IFwKICNk
ZWZpbmUgS0RPTV9GT1JXQVJEUFVUIFwKICAgICBcCiAgICAgLyogcHV0KCkgbWV0aG9kLCBjYWxs
ZWQgYnkgRE9NQnJpZGdlOjpwdXQgKi8gXAotICAgIGJvb2wgcHV0KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgS0pTOjpWYWx1
ZSAmdmFsdWUsIGludCBhdHRyKTsKKyAgICBib29sIHB1dChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIEtKUzo6VmFsdWVJbXAgKnZhbHVl
LCBpbnQgYXR0cik7CiAKIC8qKgogICogVXNlZCBpbiBnZW5lcmF0ZWRhdGEuY3BwCkBAIC0xMTMs
NyArMTEzLDcgQEAgcHVibGljOiBcCiAgKiBAcGFyYW0gcDQgYXR0cgogICogQGludGVybmFsCiAg
Ki8KLSNkZWZpbmUgUFVUX01FVEhPRF9BUkdTIEtKUzo6RXhlY1N0YXRlICpwMSwgY29uc3QgS0pT
OjpJZGVudGlmaWVyICZwMiwgY29uc3QgS0pTOjpWYWx1ZSAmcDMsIGludCBwNAorI2RlZmluZSBQ
VVRfTUVUSE9EX0FSR1MgS0pTOjpFeGVjU3RhdGUgKnAxLCBjb25zdCBLSlM6OklkZW50aWZpZXIg
JnAyLCBLSlM6OlZhbHVlSW1wICpwMywgaW50IHA0CiAKIG5hbWVzcGFjZSBLRE9NCiB7CkBAIC0x
MzcsNyArMTM3LDcgQEAgbmFtZXNwYWNlIEtET00KIAkgKiBAcGFyYW0gdGhpc09iaiAidGhpcyIK
IAkgKi8KIAl0ZW1wbGF0ZTxjbGFzcyBGdW5jSW1wLCBjbGFzcyBUaGlzSW1wPgotCWlubGluZSBL
SlM6OlZhbHVlIGxvb2t1cEdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywKKwlpbmxpbmUgS0pTOjpW
YWx1ZUltcCAqbG9va3VwR2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLAogCQkJCQkJCQljb25zdCBL
SlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwKIAkJCQkJCQkJY29uc3QgS0pTOjpIYXNoVGFi
bGUgKnRhYmxlLAogCQkJCQkJCQljb25zdCBUaGlzSW1wICp0aGlzT2JqLCAvLyB0aGUgJ2ltcGwn
IG9iamVjdApAQCAtMTY0LDcgKzE2NCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJICogVXNpbmcgdGhp
cyBpbnN0ZWFkIG9mIGxvb2t1cEdldCByZW1vdmVzIHRoZSBuZWVkIGZvciBhIEZ1bmNJbXAgY2xh
c3MuCiAJICovCiAJdGVtcGxhdGUgPGNsYXNzIFRoaXNJbXA+Ci0JaW5saW5lIEtKUzo6VmFsdWUg
bG9va3VwR2V0VmFsdWUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsCisJaW5saW5lIEtKUzo6VmFsdWVJ
bXAgKmxvb2t1cEdldFZhbHVlKEtKUzo6RXhlY1N0YXRlICpleGVjLAogCQkJCQkJCQkJIGNvbnN0
IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAogCQkJCQkJCQkJIGNvbnN0IEtKUzo6SGFz
aFRhYmxlICp0YWJsZSwKIAkJCQkJCQkJCSBjb25zdCBUaGlzSW1wICp0aGlzT2JqLCAvLyB0aGUg
J2ltcGwnIG9iamVjdApAQCAtMTkzLDcgKzE5Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJdGVtcGxh
dGUgPGNsYXNzIFRoaXNJbXA+CiAJaW5saW5lIGJvb2wgbG9va3VwUHV0KEtKUzo6RXhlY1N0YXRl
ICpleGVjLAogCQkJCQkJICBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwKLQkJ
CQkJCSAgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsCisJCQkJCQkgIEtKUzo6VmFsdWVJbXAgKnZh
bHVlLAogCQkJCQkJICBpbnQgYXR0ciwKIAkJCQkJCSAgY29uc3QgS0pTOjpIYXNoVGFibGUgKnRh
YmxlLAogCQkJCQkJICBUaGlzSW1wICp0aGlzT2JqKQpAQCAtMjIxLDcgKzIyMSw3IEBAIG5hbWVz
cGFjZSBLRE9NCiAKIC8vIFVzZWZ1bCBtYWNyb3MgZm9yIGRlYWxpbmcgd2l0aCBlY21hIGNvbnN0
cnVjdG9ycyAoZW51bSB0eXBlcywgZm9yIGV4YW1wbGUpCiAjZGVmaW5lIEVDTUFfSU1QTEVNRU5U
X0NPTlNUUlVDVE9SKFNwYWNlLCBDbGFzc05hbWUsIENsYXNzKSBcCi0gS0pTOjpWYWx1ZSBDbGFz
c05hbWU6OmdldChLSlM6OkV4ZWNTdGF0ZSAqLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgY29uc3QgS0pTOjpPYmplY3RJbXAgKikgY29uc3QgeyBcCisgS0pTOjpWYWx1ZUlt
cCAqQ2xhc3NOYW1lOjpnZXQoS0pTOjpFeGVjU3RhdGUgKiwgY29uc3QgS0pTOjpJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6T2JqZWN0SW1wICopIGNvbnN0IHsgXAogIGNvbnN0
IEtKUzo6SGFzaEVudHJ5ICplbnRyeSA9IEtKUzo6TG9va3VwOjpmaW5kRW50cnkoJnNfaGFzaFRh
YmxlLCBwcm9wZXJ0eU5hbWUpOyBcCiAgaWYoZW50cnkpIFwKICAgIHJldHVybiBLSlM6Ok51bWJl
cihlbnRyeS0+dmFsdWUpOyBcCkBAIC0yMzAsMTIgKzIzMCwxMSBAQCBuYW1lc3BhY2UgS0RPTQog
IGJvb2wgQ2xhc3NOYW1lOjpoYXNQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqLCBjb25zdCBLSlM6
OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QgeyBcCiAgIHJldHVybiBLSlM6Okxvb2t1
cDo6ZmluZEVudHJ5KCZzX2hhc2hUYWJsZSwgcHJvcGVydHlOYW1lKTsgXAogIH0gXAotIEtKUzo6
T2JqZWN0IENsYXNzTmFtZTo6cHJvdG90eXBlKEtKUzo6RXhlY1N0YXRlICpleGVjKSBjb25zdCB7
IFwKLSAgaWYoZXhlYykgcmV0dXJuIGV4ZWMtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsgXAotICByZXR1cm4gS0pTOjpPYmplY3Q6OmR5bmFtaWNDYXN0KEtKUzo6TnVs
bCgpKTsgXAorIEtKUzo6T2JqZWN0SW1wICpDbGFzc05hbWU6OnByb3RvdHlwZShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYykgY29uc3QgeyBcCisgIHJldHVybiBleGVjLT5pbnRlcnByZXRlcigpLT5idWls
dGluT2JqZWN0UHJvdG90eXBlKCk7IFwKICB9IFwKICBjb25zdCBLSlM6OkNsYXNzSW5mbyBDbGFz
c05hbWU6OnNfY2xhc3NJbmZvID0geyBDbGFzcyAiQ29uc3RydWN0b3IiLCAwLCAmc19oYXNoVGFi
bGUsIDAgfTsgXAotIEtKUzo6VmFsdWUgU3BhY2U6OmdldCMjQ2xhc3NOYW1lKEtKUzo6RXhlY1N0
YXRlICpleGVjKSB7IFwKKyBLSlM6OlZhbHVlSW1wICpTcGFjZTo6Z2V0IyNDbGFzc05hbWUoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMpIHsgXAogICByZXR1cm4gS0RPTTo6Y2FjaGVHbG9iYWxCcmlkZ2U8
Q2xhc3NOYW1lPihleGVjLCAiW1siIENsYXNzICIuY29uc3RydWN0b3JdXSIpOyBcCiAgfQogIApA
QCAtMjQ1LDEzICsyNDQsMTMgQEAgbmFtZXNwYWNlIEtET00KICAgY2xhc3MgQ2xhc3NOYW1lIDog
cHVibGljIEtKUzo6T2JqZWN0SW1wIHsgXAogICBwdWJsaWM6IFwKICAgICBDbGFzc05hbWUoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMpIDogS0pTOjpPYmplY3RJbXAoKSB7fSBcCi0gICAgS0pTOjpWYWx1
ZSBnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lLCBjb25zdCBLSlM6Ok9iamVjdEltcCAqb2JqKSBjb25zdDsgXAorICAgIEtKUzo6VmFs
dWVJbXAgKmdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUsIGNvbnN0IEtKUzo6T2JqZWN0SW1wICpvYmopIGNvbnN0OyBcCiAgICAgYm9v
bCBoYXNQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUpIGNvbnN0OyBcCi0gICAgS0pTOjpPYmplY3QgcHJvdG90eXBlKEtKUzo6
RXhlY1N0YXRlICpleGVjKSBjb25zdDsgXAorICAgIEtKUzo6T2JqZWN0SW1wICpwcm90b3R5cGUo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OyBcCiAgICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xh
c3NJbmZvIHNfY2xhc3NJbmZvOyBcCiAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBLSlM6Okhhc2hU
YWJsZSBzX2hhc2hUYWJsZTsgXAogICB9OyBcCi0gIEtKUzo6VmFsdWUgZ2V0IyNDbGFzc05hbWUo
S0pTOjpFeGVjU3RhdGUgKmV4ZWMpOyBcCisgIEtKUzo6VmFsdWVJbXAgKmdldCMjQ2xhc3NOYW1l
KEtKUzo6RXhlY1N0YXRlICpleGVjKTsgXAogICB9CiAKIC8vIFNhbWUgYXMga2pzJyBERUZJTkVf
UFJPVE9UWVBFLCBidXQgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIGhhc2h0YWJsZSB0b28sIGFuZCBu
byBDbGFzc05hbWUgaGVyZQpAQCAtMjYwLDEyICsyNTksMTIgQEAgbmFtZXNwYWNlIEtET00KICAg
bmFtZXNwYWNlIFNwYWNlIHsgXAogICBjbGFzcyBDbGFzc1Byb3RvIDogcHVibGljIEtKUzo6T2Jq
ZWN0SW1wIHsgXAogICBwdWJsaWM6IFwKLSAgICBzdGF0aWMgS0pTOjpPYmplY3Qgc2VsZihLSlM6
OkV4ZWNTdGF0ZSAqZXhlYyk7IFwKKyAgICBzdGF0aWMgS0pTOjpPYmplY3RJbXAgKnNlbGYoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMpOyBcCiAgICAgQ2xhc3NQcm90byggS0pTOjpFeGVjU3RhdGUgKmV4
ZWMgKSBcCiAgICAgICA6IEtKUzo6T2JqZWN0SW1wKCBleGVjLT5pbnRlcnByZXRlcigpLT5idWls
dGluT2JqZWN0UHJvdG90eXBlKCkgKSB7fSBcCiAgICAgdmlydHVhbCBjb25zdCBLSlM6OkNsYXNz
SW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0gXAogICAgIHN0YXRpYyBj
b25zdCBLSlM6OkNsYXNzSW5mbyBpbmZvOyBcCi0gICAgS0pTOjpWYWx1ZSBnZXQoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsg
XAorICAgIEtKUzo6VmFsdWVJbXAgKmdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pT
OjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OyBcCiAgICAgYm9vbCBoYXNQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUpIGNvbnN0OyBcCiAgICAgXAogICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgS0pTOjpIYXNoVGFi
bGUgc19oYXNoVGFibGU7IFwKQEAgLTI3NSw5ICsyNzQsOSBAQCBuYW1lc3BhY2UgS0RPTQogLy8g
c2FtZSBhcyBJTVBMRU1FTlRfUFJPVE9UWVBFIGJ1dCBpbiB0aGUgS0RPTSBuYW1lc3BhY2UsIGFu
ZCB3aXRoIENsYXNzTmFtZSBoZXJlCiAvLyBzbyB0aGF0IEtET01fREVGSU5FX1BST1RPVFlQRSBj
YW4gYmUgcHV0IGluIGEgaGVhZGVyIGZpbGUgKCdpbmZvJyBkZWZpbmVkIGhlcmUpCiAjZGVmaW5l
IEVDTUFfSU1QTEVNRU5UX1BST1RPVFlQRShTcGFjZSxDbGFzc05hbWUsQ2xhc3NQcm90byxDbGFz
c0Z1bmMpIFwKLSAgICBLSlM6OlZhbHVlIFNwYWNlOjpDbGFzc1Byb3RvOjpnZXQoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdCBc
CisgICAgS0pTOjpWYWx1ZUltcCAqU3BhY2U6OkNsYXNzUHJvdG86OmdldChLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0IFwKICAg
ICB7IFwKLSAgICAgICAgLyogS0pTOjpWYWx1ZSByZXN1bHQ7IFwKKyAgICAgICAgLyogS0pTOjpW
YWx1ZUltcCAqcmVzdWx0OyBcCiAgICAgICAgIGlmIChLSlM6Omxvb2t1cEdldE93bkZ1bmN0aW9u
PENsYXNzRnVuYyxLSlM6Ok9iamVjdEltcD4oZXhlYywgcHJvcGVydHlOYW1lLCAmc19oYXNoVGFi
bGUsIHRoaXMsIHJlc3VsdCkpIFwKICAgICAgICAgcmV0dXJuIHJlc3VsdDsgICovIFwKICAgICAg
ICAgcmV0dXJuIEtKUzo6VW5kZWZpbmVkKCk7IFwKQEAgLTI4Nyw3ICsyODYsNyBAQCBuYW1lc3Bh
Y2UgS0RPTQogICAgIHsgLypzdHVwaWQgYnV0IHdlIG5lZWQgdGhpcyB0byBoYXZlIGEgY29tbW9u
IG1hY3JvIGZvciB0aGUgZGVjbGFyYXRpb24qLyBcCiAgICAgICByZXR1cm4gS0pTOjpPYmplY3RJ
bXA6Omhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7IFwKICAgICB9IFwKLSAgICBLSlM6
Ok9iamVjdCBTcGFjZTo6Q2xhc3NQcm90bzo6c2VsZihLSlM6OkV4ZWNTdGF0ZSAqZXhlYykgXAor
ICAgIEtKUzo6T2JqZWN0SW1wICpTcGFjZTo6Q2xhc3NQcm90bzo6c2VsZihLSlM6OkV4ZWNTdGF0
ZSAqZXhlYykgXAogICAgIHsgXAogICAgICAgcmV0dXJuIEtKUzo6Y2FjaGVHbG9iYWxPYmplY3Q8
Q2xhc3NQcm90bz4oIGV4ZWMsICJbWyIgQ2xhc3NOYW1lICIucHJvdG90eXBlXV0iICk7IFwKICAg
ICB9IFwKQEAgLTI5OSwxNiArMjk4LDE1IEBAIG5hbWVzcGFjZSBLRE9NCiAgIHB1YmxpYzogXAog
ICAgIENsYXNzRnVuYyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IGksIGludCBsZW4pIFwKICAg
ICAgICA6IEtKUzo6T2JqZWN0SW1wKCAvKnByb3RvPyAqLyApLCBpZChpKSB7IFwKLSAgICAgICBL
SlM6OlZhbHVlIHByb3RlY3QodGhpcyk7IFwKICAgICAgICBwdXQoZXhlYywgImxlbmd0aCIsIEtK
Uzo6TnVtYmVyKGxlbiksIEtKUzo6RG9udERlbGV0ZSB8IEtKUzo6UmVhZE9ubHkgfCBLSlM6OkRv
bnRFbnVtKTsgXAogICAgIH0gXAotICAgIC8qKiBVc2VkIGJ5IGNhbGwoKSB0byBjaGVjayB0aGUg
dHlwZSBvZiB0aGlzT2JqLiBHZW5lcmF0ZWQgY29kZSAqLyBcCisgICAgLyoqIFVzZWQgYnkgY2Fs
bEFzRnVuY3Rpb24oKSB0byBjaGVjayB0aGUgdHlwZSBvZiB0aGlzT2JqLiBHZW5lcmF0ZWQgY29k
ZSAqLyBcCiAgICAgQ2xhc3MgY2FzdChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpP
YmplY3RJbXAgKmJyaWRnZSkgY29uc3Q7IFwKICAgICBcCiAgICAgdmlydHVhbCBib29sIGltcGxl
bWVudHNDYWxsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfSBcCiAJXAogICAgIC8qKiBZb3UgbmVl
ZCB0byBpbXBsZW1lbnQgdGhhdCBvbmUgKi8gXAotICAgIHZpcnR1YWwgS0pTOjpWYWx1ZSBjYWxs
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6Ok9iamVjdCAmdGhpc09iaiwgY29uc3QgS0pTOjpM
aXN0ICZhcmdzKTsgXAorICAgIHZpcnR1YWwgS0pTOjpWYWx1ZUltcCAqY2FsbEFzRnVuY3Rpb24o
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBLSlM6
Okxpc3QgJmFyZ3MpOyBcCiAJXAogICBwcml2YXRlOiBcCiAgICAgaW50IGlkOyBcCkBAIC0zMTks
MTUgKzMxNywxNSBAQCBuYW1lc3BhY2UgS0RPTQogCiAvLyBUbyBiZSB1c2VkIHdoZW4gY2FzdGlu
ZyB0aGUgdHlwZSBvZiBhbiBhcmd1bWVudAogI2RlZmluZSBLRE9NX0NIRUNLKENsYXNzTmFtZSwg
dGhlT2JqKSBcCi0gICAgQ2xhc3NOYW1lIG9iaiA9IGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8S0pT
OjpPYmplY3RJbXAgKj4odGhlT2JqLmltcCgpKSk7IFwKKyAgICBDbGFzc05hbWUgb2JqID0gY2Fz
dChleGVjLCB0aGVPYmopOyBcCiAgICAgaWYob2JqID09IENsYXNzTmFtZTo6bnVsbCkgeyBcCi0J
ICAgIGtkRGVidWcoMjYwMDQpIDw8IGtfZnVuY2luZm8gPDwgIiBXcm9uZyBvYmplY3QgdHlwZTog
ZXhwZWN0ZWQgIiA8PCBDbGFzc05hbWU6OnNfY2xhc3NJbmZvLmNsYXNzTmFtZSA8PCAiIGdvdCAi
IDw8IHRoaXNPYmouY2xhc3NJbmZvKCktPmNsYXNzTmFtZSA8PCBlbmRsOyBcCi0gICAgICAgIE9i
amVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsgXAorCSAgICBrZERlYnVn
KDI2MDA0KSA8PCBrX2Z1bmNpbmZvIDw8ICIgV3Jvbmcgb2JqZWN0IHR5cGU6IGV4cGVjdGVkICIg
PDwgQ2xhc3NOYW1lOjpzX2NsYXNzSW5mby5jbGFzc05hbWUgPDwgIiBnb3QgIiA8PCB0aGlzT2Jq
LT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lIDw8IGVuZGw7IFwKKyAgICAgICAgT2JqZWN0SW1wICpl
cnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsgXAogICAgICAgCWV4ZWMtPnNldEV4
Y2VwdGlvbihlcnIpOyBcCiAJICAgIHJldHVybiBlcnI7IFwKICAgICB9CiAKLS8vIFRvIGJlIHVz
ZWQgaW4gYWxsIGNhbGwoKSBpbXBsZW1lbnRhdGlvbnMhCisvLyBUbyBiZSB1c2VkIGluIGFsbCBj
YWxsQXNGdW5jdGlvbigpIGltcGxlbWVudGF0aW9ucyEKIC8vIENhbid0IHVzZSBpZiAoIXRoaXNP
YmouaW5oZXJpdHMoJkNsYXNzTmFtZTo6c19jbGFzc0luZm8pIHNpbmNlIHdlIGRvbid0CiAvLyB1
c2UgdGhlIChzaW5nbGUtcGFyZW50KSBpbmhlcml0YW5jZSBvZiBDbGFzc0luZm8uLi4KICNkZWZp
bmUgS0RPTV9DSEVDS19USElTKENsYXNzTmFtZSkgS0RPTV9DSEVDSyhDbGFzc05hbWUsIHRoaXNP
YmopCkBAIC0zMzUsOCArMzMzLDggQEAgbmFtZXNwYWNlIEtET00KIC8vIEhlbHBlcnMgdG8gaGlk
ZSBleGNlcHRpb24gc3R1ZmYuLi4KIC8vIHVzZWQgd2l0aGluIGdldC9wdXRWYWx1ZVByb3ByZXR5
CiAjZGVmaW5lIEtET01fRU5URVJfU0FGRSB0cnkgewotI2RlZmluZSBLRE9NX0xFQVZFX1NBRkUo
RXhjZXB0aW9uKSB9IGNhdGNoKEV4Y2VwdGlvbjo6UHJpdmF0ZSAqZSkgeyBLSlM6Ok9iamVjdCBl
cnIgPSBLSlM6OkVycm9yOjpjcmVhdGUoZXhlYywgS0pTOjpHZW5lcmFsRXJyb3IsIFFTdHJpbmc6
OmZyb21MYXRpbjEoIiUxICUyIikuYXJnKFFTdHJpbmc6OmZyb21MYXRpbjEoRXhjZXB0aW9uKGUp
LnNfY2xhc3NJbmZvLmNsYXNzTmFtZSkpLmFyZyhRU3RyaW5nOjpudW1iZXIoZS0+Y29kZSgpKSku
bGF0aW4xKCkpOyBlcnIucHV0KGV4ZWMsICJjb2RlIiwgS0pTOjpOdW1iZXIoZS0+Y29kZSgpKSk7
IGV4ZWMtPnNldEV4Y2VwdGlvbihlcnIpOyB9Ci0jZGVmaW5lIEtET01fTEVBVkVfQ0FMTF9TQUZF
KEV4Y2VwdGlvbikgfSBjYXRjaChFeGNlcHRpb246OlByaXZhdGUgKmUpIHsgS0pTOjpPYmplY3Qg
ZXJyID0gS0pTOjpFcnJvcjo6Y3JlYXRlKGV4ZWMsIEtKUzo6R2VuZXJhbEVycm9yLCBRU3RyaW5n
Ojpmcm9tTGF0aW4xKCIlMSAlMiIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKEV4Y2VwdGlvbihl
KS5zX2NsYXNzSW5mby5jbGFzc05hbWUpKS5hcmcoUVN0cmluZzo6bnVtYmVyKGUtPmNvZGUoKSkp
LmxhdGluMSgpKTsgZXJyLnB1dChleGVjLCAiY29kZSIsIEtKUzo6TnVtYmVyKGUtPmNvZGUoKSkp
OyBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsgcmV0dXJuIGVycjsgfQorI2RlZmluZSBLRE9NX0xF
QVZFX1NBRkUoRXhjZXB0aW9uKSB9IGNhdGNoKEV4Y2VwdGlvbjo6UHJpdmF0ZSAqZSkgeyBLSlM6
Ok9iamVjdEltcCAqZXJyID0gS0pTOjpFcnJvcjo6Y3JlYXRlKGV4ZWMsIEtKUzo6R2VuZXJhbEVy
cm9yLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIlMSAlMiIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4x
KEV4Y2VwdGlvbihlKS5zX2NsYXNzSW5mby5jbGFzc05hbWUpKS5hcmcoUVN0cmluZzo6bnVtYmVy
KGUtPmNvZGUoKSkpLmxhdGluMSgpKTsgZXJyLT5wdXQoZXhlYywgImNvZGUiLCBLSlM6Ok51bWJl
cihlLT5jb2RlKCkpKTsgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7IH0KKyNkZWZpbmUgS0RPTV9M
RUFWRV9DQUxMX1NBRkUoRXhjZXB0aW9uKSB9IGNhdGNoKEV4Y2VwdGlvbjo6UHJpdmF0ZSAqZSkg
eyBLSlM6Ok9iamVjdEltcCAqZXJyID0gS0pTOjpFcnJvcjo6Y3JlYXRlKGV4ZWMsIEtKUzo6R2Vu
ZXJhbEVycm9yLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIlMSAlMiIpLmFyZyhRU3RyaW5nOjpmcm9t
TGF0aW4xKEV4Y2VwdGlvbihlKS5zX2NsYXNzSW5mby5jbGFzc05hbWUpKS5hcmcoUVN0cmluZzo6
bnVtYmVyKGUtPmNvZGUoKSkpLmxhdGluMSgpKTsgZXJyLT5wdXQoZXhlYywgImNvZGUiLCBLSlM6
Ok51bWJlcihlLT5jb2RlKCkpKTsgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7IHJldHVybiBlcnI7
IH0KIAogLy8gSnVzdCBhIG1hcmtlciBmb3Iga2FseXB0dXMKICNkZWZpbmUgS0RPTV9DQVNUIDsK
SW5kZXg6IGtkb20vZWNtYS9FY21hLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL2VjbWEvRWNtYS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtkb20vZWNtYS9FY21hLmNwcAotLS0ga2RvbS9lY21hL0VjbWEuY3Bw
CTkgSnVsIDIwMDUgMDY6NTM6NTggLTAwMDAJMS4xCisrKyBrZG9tL2VjbWEvRWNtYS5jcHAJOCBB
dWcgMjAwNSAxOTo1NDo1OSAtMDAwMApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSA8a2pz
L2ludGVycHJldGVyLmg+CiAjaW5jbHVkZSA8a2pzL3Njb3BlX2NoYWluLmg+CisjaW5jbHVkZSA8
a2pzL3Byb3RlY3QuaD4KIAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBA
IC0xMjksNyArMTMwLDcgQEAgdm9pZCBFY21hOjpzZXR1cChDREZJbnRlcmZhY2UgKmludGVyZmFj
ZQogCWQtPmVjbWFJbnRlcmZhY2UgPSBpbnRlcmZhY2UtPmVjbWFJbnRlcmZhY2UoKTsKIAogCS8v
IENyZWF0ZSBjb2RlIGludGVycHJldGVyCi0JS0pTOjpPYmplY3Qga2pzR2xvYmFsT2JqZWN0KGQt
Pmdsb2JhbE9iamVjdCk7CisJS0pTOjpPYmplY3RJbXAgKmtqc0dsb2JhbE9iamVjdChkLT5nbG9i
YWxPYmplY3QpOwogCWQtPmludGVycHJldGVyID0gbmV3IFNjcmlwdEludGVycHJldGVyKGtqc0ds
b2JhbE9iamVjdCwgZC0+ZG9jdW1lbnQpOwogCiAJLy8gU2V0IG9iamVjdCBwcm90b3R5cGUgZm9y
IGdsb2JhbCBvYmplY3QKQEAgLTE1Myw3ICsxNTQsNyBAQCB2b2lkIEVjbWE6OnNldHVwRG9jdW1l
bnQoRG9jdW1lbnRJbXBsICpkCiAJZG9jdW1lbnQtPmRlcmVmKCk7IC8vICdkb2NPYmonIGlzIGhl
bGQgaW4gbWVtb3J5IHVudGlsIHRoZSBlY21hIGVuZ2luZSBpcyBkZXN0cnVjdGVkLi4uCiB9CiAK
LUtKUzo6Q29tcGxldGlvbiBFY21hOjpldmFsdWF0ZShjb25zdCBLSlM6OlVTdHJpbmcgJmNvZGUs
IGNvbnN0IEtKUzo6VmFsdWUgJnRoaXNWKQorS0pTOjpDb21wbGV0aW9uIEVjbWE6OmV2YWx1YXRl
KGNvbnN0IEtKUzo6VVN0cmluZyAmY29kZSwgS0pTOjpWYWx1ZUltcCAqdGhpc1YpCiB7CiAjaWZk
ZWYgS0pTX1ZFUkJPU0UKIAlrZERlYnVnKDYwNzApIDw8ICJFY21hOjpldmFsdWF0ZSAiIDw8IGNv
ZGUucXN0cmluZygpIDw8IGVuZGw7CkBAIC0xNjIsNyArMTYzLDcgQEAgS0pTOjpDb21wbGV0aW9u
IEVjbWE6OmV2YWx1YXRlKGNvbnN0IEtKUwogCXJldHVybiBkLT5pbnRlcnByZXRlci0+ZXZhbHVh
dGUoY29kZSwgdGhpc1YpOwogfQogCi1LSlM6Ok9iamVjdCBFY21hOjpnbG9iYWxPYmplY3QoKSBj
b25zdAorS0pTOjpPYmplY3RJbXAgKkVjbWE6Omdsb2JhbE9iamVjdCgpIGNvbnN0CiB7CiAJcmV0
dXJuIGQtPmludGVycHJldGVyLT5nbG9iYWxPYmplY3QoKTsKIH0KQEAgLTE4Miw1NyArMTgzLDU2
IEBAIFNjcmlwdEludGVycHJldGVyICpFY21hOjppbnRlcnByZXRlcigpIGMKIAlyZXR1cm4gZC0+
aW50ZXJwcmV0ZXI7CiB9CiAKLUtKUzo6T2JqZWN0IEVjbWE6OmVjbWFMaXN0ZW5lclRvT2JqZWN0
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OlZhbHVlICZsaXN0ZW5lcikKK0tKUzo6
T2JqZWN0SW1wICpFY21hOjplY21hTGlzdGVuZXJUb09iamVjdChLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgS0pTOjpWYWx1ZUltcCAqbGlzdGVuZXIpCiB7Ci0JS0pTOjpPYmplY3QgbGlzdGVuZXJPYmpl
Y3QgPSBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QobGlzdGVuZXIpOwotCWlmKCFsaXN0ZW5lck9i
amVjdC5pc1ZhbGlkKCkpCi0JCXJldHVybiBLSlM6Ok9iamVjdCgpOworCWlmKCFsaXN0ZW5lci0+
aXNPYmplY3QoKSkKKwkJcmV0dXJuIE5VTEw7CisgICAgICAgIEtKUzo6T2JqZWN0SW1wICpsaXN0
ZW5lck9iamVjdCA9IHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KGxpc3RlbmVyKTsKIAkK
IAkvLyAnbGlzdGVuZXInIG1heSBiZSBhIHNpbXBsZSBlY21hIGZ1bmN0aW9uLi4uCi0JaWYobGlz
dGVuZXJPYmplY3QuaW1wbGVtZW50c0NhbGwoKSkKKwlpZihsaXN0ZW5lck9iamVjdC0+aW1wbGVt
ZW50c0NhbGwoKSkKIAkJcmV0dXJuIGxpc3RlbmVyT2JqZWN0OwogCiAJLy8gJ2xpc3RlbmVyJyBw
cm9iYWJseSBpcyBhbiBFdmVudExpc3RlbmVyLAogCS8vIG9iamVjdCBjb250YWluaW5nIGEgJ2hh
bmRsZUV2ZW50JyBmdW5jdGlvbi4uLgotCUtKUzo6VmFsdWUgaGFuZGxlRXZlbnRWYWx1ZSA9IGxp
c3RlbmVyT2JqZWN0LmdldChleGVjLCBLSlM6OklkZW50aWZpZXIoImhhbmRsZUV2ZW50IikpOwot
CUtKUzo6T2JqZWN0IGhhbmRsZUV2ZW50T2JqZWN0ID0gS0pTOjpPYmplY3Q6OmR5bmFtaWNDYXN0
KGhhbmRsZUV2ZW50VmFsdWUpOworCUtKUzo6VmFsdWVJbXAgKmhhbmRsZUV2ZW50VmFsdWUgPSBs
aXN0ZW5lck9iamVjdC0+Z2V0KGV4ZWMsIEtKUzo6SWRlbnRpZmllcigiaGFuZGxlRXZlbnQiKSk7
CisJaWYoIWhhbmRsZUV2ZW50VmFsdWUtPmlzT2JqZWN0KCkpCisJCXJldHVybiBOVUxMOworICAg
ICAgICBLSlM6Ok9iamVjdEltcCAqaGFuZGxlRXZlbnRPYmplY3QgPSBzdGF0aWNfY2FzdDxLSlM6
Ok9iamVjdEltcCo+KGhhbmRsZUV2ZW50VmFsdWUpOwogCi0JaWYoIWhhbmRsZUV2ZW50T2JqZWN0
LmlzVmFsaWQoKSkKLQkJcmV0dXJuIEtKUzo6T2JqZWN0KCk7Ci0KLQlpZihoYW5kbGVFdmVudE9i
amVjdC5pbXBsZW1lbnRzQ2FsbCgpKQorCWlmKGhhbmRsZUV2ZW50T2JqZWN0LT5pbXBsZW1lbnRz
Q2FsbCgpKQogCQlyZXR1cm4gaGFuZGxlRXZlbnRPYmplY3Q7CiAKIAlrZEVycm9yKCkgPDwga19m
dW5jaW5mbyA8PCAiIFNwZWNpZmllZCBsaXN0ZW5lciBpcyBuZWl0aGVyIGEgZnVuY3Rpb24gbm9y
IGFuIG9iamVjdCEiIDw8IGVuZGw7Ci0JcmV0dXJuIEtKUzo6T2JqZWN0KCk7CisJcmV0dXJuIE5V
TEw7CiB9CiAKLUV2ZW50TGlzdGVuZXJJbXBsICpFY21hOjpmaW5kRXZlbnRMaXN0ZW5lcihLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmbGlzdGVuZXIpCitFdmVudExpc3Rl
bmVySW1wbCAqRWNtYTo6ZmluZEV2ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtK
Uzo6VmFsdWVJbXAgKmxpc3RlbmVyKQogewogCWlmKCFkKQogCQlyZXR1cm4gMDsKIAkKLQlLSlM6
Ok9iamVjdCBsaXN0ZW5lck9iamVjdCA9IGVjbWFMaXN0ZW5lclRvT2JqZWN0KGV4ZWMsIGxpc3Rl
bmVyKTsKLQlpZighbGlzdGVuZXJPYmplY3QuaXNWYWxpZCgpKQorCUtKUzo6T2JqZWN0SW1wICps
aXN0ZW5lck9iamVjdCA9IGVjbWFMaXN0ZW5lclRvT2JqZWN0KGV4ZWMsIGxpc3RlbmVyKTsKKwlp
ZighbGlzdGVuZXJPYmplY3QpCiAJCXJldHVybiAwOwogCQotCXJldHVybiBkLT5ldmVudExpc3Rl
bmVyc1tzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihsaXN0ZW5lck9iamVjdC5pbXAoKSld
OworCXJldHVybiBkLT5ldmVudExpc3RlbmVyc1tzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAq
PihsaXN0ZW5lck9iamVjdCldOwogfQogCi1FdmVudExpc3RlbmVySW1wbCAqRWNtYTo6Y3JlYXRl
RXZlbnRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpWYWx1ZSAmbGlz
dGVuZXIpCitFdmVudExpc3RlbmVySW1wbCAqRWNtYTo6Y3JlYXRlRXZlbnRMaXN0ZW5lcihLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAqbGlzdGVuZXIpCiB7CiAJRXZlbnRMaXN0
ZW5lckltcGwgKmV4aXN0aW5nID0gZmluZEV2ZW50TGlzdGVuZXIoZXhlYywgbGlzdGVuZXIpOwog
CWlmKGV4aXN0aW5nKQogCQlyZXR1cm4gZXhpc3Rpbmc7CiAJCi0JS0pTOjpPYmplY3QgbGlzdGVu
ZXJPYmplY3QgPSBlY21hTGlzdGVuZXJUb09iamVjdChleGVjLCBsaXN0ZW5lcik7Ci0JaWYoIWxp
c3RlbmVyT2JqZWN0LmlzVmFsaWQoKSkKKwlLSlM6Ok9iamVjdEltcCAqbGlzdGVuZXJPYmplY3Qg
PSBlY21hTGlzdGVuZXJUb09iamVjdChleGVjLCBsaXN0ZW5lcik7CisJaWYoIWxpc3RlbmVyT2Jq
ZWN0KQogCQlyZXR1cm4gMDsKIAogCUV2ZW50TGlzdGVuZXJJbXBsICppID0gbmV3IEV2ZW50TGlz
dGVuZXJJbXBsKCk7CiAJaS0+aW5pdExpc3RlbmVyKGQtPmRvY3VtZW50LCB0cnVlLCBsaXN0ZW5l
ck9iamVjdCwgbGlzdGVuZXIsIERPTVN0cmluZygpKTsKIAotCWFkZEV2ZW50TGlzdGVuZXIoaSwg
c3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4obGlzdGVuZXJPYmplY3QuaW1wKCkpKTsKKwlh
ZGRFdmVudExpc3RlbmVyKGksIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KGxpc3RlbmVy
T2JqZWN0KSk7CiAJcmV0dXJuIGk7CiB9CiAKQEAgLTI1MCwzMSArMjUwLDMxIEBAIEV2ZW50TGlz
dGVuZXJJbXBsICpFY21hOjpjcmVhdGVFdmVudExpc3QKIAkJCXJldHVybiBjdXJyZW50OwogCX0K
IAkKLQlzdGF0aWMgS0pTOjpTdHJpbmcgZXZlbnRTdHJpbmcoImV2ZW50Iik7CisJc3RhdGljIEtK
Uzo6UHJvdGVjdGVkVmFsdWUgZXZlbnRTdHJpbmcgPSBLSlM6OlN0cmluZygiZXZlbnQiKTsKIAot
CUtKUzo6T2JqZWN0IGNvbnN0ciA9IGQtPmludGVycHJldGVyLT5idWlsdGluRnVuY3Rpb24oKTsK
KwlLSlM6Ok9iamVjdEltcCAqY29uc3RyID0gZC0+aW50ZXJwcmV0ZXItPmJ1aWx0aW5GdW5jdGlv
bigpOwogCUtKUzo6RXhlY1N0YXRlICpleGVjID0gZC0+aW50ZXJwcmV0ZXItPmdsb2JhbEV4ZWMo
KTsKIAkKIAlLSlM6Okxpc3QgYXJnczsKIAlhcmdzLmFwcGVuZChldmVudFN0cmluZyk7CiAJYXJn
cy5hcHBlbmQoS0pTOjpTdHJpbmcoanNDb2RlLnN0cmluZygpKSk7CiAKLQlLSlM6Ok9iamVjdCBv
YmogPSBjb25zdHIuY29uc3RydWN0KGV4ZWMsIGFyZ3MpOworCUtKUzo6T2JqZWN0SW1wICpvYmog
PSBjb25zdHItPmNvbnN0cnVjdChleGVjLCBhcmdzKTsKIAlpZihleGVjLT5oYWRFeGNlcHRpb24o
KSkKIAl7CiAJCWV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAKIAkJLy8gZmFpbGVkIHRvIHBhcnNl
LCBzbyBsZXQncyBqdXN0IG1ha2UgdGhpcyBsaXN0ZW5lciBhIG5vLW9wCi0JCW9iaiA9IEtKUzo6
T2JqZWN0KCk7CisJCW9iaiA9IE5VTEw7CiAJfQogCiAJLy8gU2FmZXR5IGZpcnN0Li4KIAlFdmVu
dExpc3RlbmVySW1wbCAqaSA9IDA7Ci0JaWYoIW9iai5pc051bGwoKSAmJiBvYmouaW1wKCkpCisJ
aWYob2JqKQogCXsKIAkJaSA9IG5ldyBFdmVudExpc3RlbmVySW1wbCgpOwogCQlpLT5pbml0TGlz
dGVuZXIoZC0+ZG9jdW1lbnQsIHRydWUsIG9iaiwgb2JqLCBpbnRlcm5hbFR5cGUpOwotCQlhZGRF
dmVudExpc3RlbmVyKGksIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KG9iai5pbXAoKSkp
OworCQlhZGRFdmVudExpc3RlbmVyKGksIG9iaik7CiAJfQogCWVsc2UKIAkJa2RFcnJvcigpIDw8
ICJVbmFibGUgdG8gY3JlYXRlIGV2ZW50IGxpc3RlbmVyIG9iamVjdCBmb3IgZXZlbnQgdHlwZSBc
IiIgPDwgdHlwZSA8PCAiXCIiIDw8IGVuZGw7CkBAIC0zMjYsNyArMzI2LDcgQEAgS0pTOjpPYmpl
Y3RJbXAgKkVjbWE6OmluaGVyaXRlZEdldERPTUNTUwogfQogCiAvLyBIZWxwZXJzIGluIG5hbWVz
cGFjZSAnS0RPTScKLUtKUzo6VmFsdWUgS0RPTTo6Z2V0RE9NTm9kZShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgTm9kZSBuKQorS0pTOjpWYWx1ZUltcCAqS0RPTTo6Z2V0RE9NTm9kZShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgTm9kZSBuKQogewogCUtKUzo6T2JqZWN0SW1wICpyZXQgPSAwOwogCWlmKG4g
PT0gTm9kZTo6bnVsbCkKQEAgLTM1NCwxMiArMzU0LDEyIEBAIEtKUzo6VmFsdWUgS0RPTTo6Z2V0
RE9NTm9kZShLSlM6OkV4ZWNTdGEKIAlpZihyZXF1ZXN0KQogCXsKIAkJaWYodG9wUmVxdWVzdCAm
JiB0b3BSZXF1ZXN0ICE9IHJlcXVlc3QpCi0JCQlyZXR1cm4gS0pTOjpWYWx1ZSh0b3BSZXF1ZXN0
KTsKKwkJCXJldHVybiB0b3BSZXF1ZXN0OwogCQkKLQkJcmV0dXJuIEtKUzo6VmFsdWUocmVxdWVz
dCk7CisJCXJldHVybiByZXF1ZXN0OwogCX0KIAllbHNlIGlmKHRvcFJlcXVlc3QpCi0JCXJldHVy
biBLSlM6OlZhbHVlKHRvcFJlcXVlc3QpOworCQlyZXR1cm4gdG9wUmVxdWVzdDsKIAkKIAlzd2l0
Y2gobi5ub2RlVHlwZSgpKQogCXsKQEAgLTQwNCwxMCArNDA0LDEwIEBAIEtKUzo6VmFsdWUgS0RP
TTo6Z2V0RE9NTm9kZShLSlM6OkV4ZWNTdGEKIAl9CiAKIAlpbnRlcnByZXRlci0+cHV0RE9NT2Jq
ZWN0KG4uaGFuZGxlKCksIHJldCk7Ci0JcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4g
cmV0OwogfQogCi1LSlM6OlZhbHVlIEtET006OmdldERPTUV2ZW50KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBFdmVudCBlKQorS0pTOjpWYWx1ZUltcCAqS0RPTTo6Z2V0RE9NRXZlbnQoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIEV2ZW50IGUpCiB7CiAJS0pTOjpPYmplY3RJbXAgKnJldCA9IDA7CiAJaWYo
ZSA9PSBFdmVudDo6bnVsbCkKQEAgLTQxOCw3ICs0MTgsNyBAQCBLSlM6OlZhbHVlIEtET006Omdl
dERPTUV2ZW50KEtKUzo6RXhlY1N0CiAJLy8gUmV1c2UgZXhpc3RpbmcgYnJpZGdlLCBpZiBwb3Nz
aWJsZQogCUtKUzo6T2JqZWN0SW1wICpyZXF1ZXN0ID0gaW50ZXJwcmV0ZXItPmdldERPTU9iamVj
dChlLmhhbmRsZSgpKTsKIAlpZihyZXF1ZXN0KQotCQlyZXR1cm4gS0pTOjpWYWx1ZShyZXF1ZXN0
KTsKKwkJcmV0dXJuIHJlcXVlc3Q7CiAKIAkvLyBUcnkgaGFyZCB0byBhc2sgYW55IERPTS9TVkcv
SFRNTC93aGF0ZXZlciBpbXBsZW1lbnRhdGlvbgogCS8vIHdoaWNoIG1heSByZXNpZGUgb24gdG9w
IG9mIEtET00sIGhvdyB0byBjb252ZXJ0IHRoZSBjdXJyZW50CkBAIC00MzMsNyArNDMzLDcgQEAg
S0pTOjpWYWx1ZSBLRE9NOjpnZXRET01FdmVudChLSlM6OkV4ZWNTdAogCQlpZihyZXQpCiAJCXsK
IAkJCWludGVycHJldGVyLT5wdXRET01PYmplY3QoZS5oYW5kbGUoKSwgcmV0KTsKLQkJCXJldHVy
biBLSlM6OlZhbHVlKHJldCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC00NTMsMTAg
KzQ1MywxMCBAQCBLSlM6OlZhbHVlIEtET006OmdldERPTUV2ZW50KEtKUzo6RXhlY1N0CiAJS0pT
OjpJbnRlcnByZXRlcjo6dW5sb2NrKCk7CiAKIAlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KGUu
aGFuZGxlKCksIHJldCk7Ci0JcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4gcmV0Owog
fQogCi1LSlM6OlZhbHVlIEtET006OmdldERPTUNTU1J1bGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IENTU1J1bGUgYykKK0tKUzo6VmFsdWVJbXAgKktET006OmdldERPTUNTU1J1bGUoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIENTU1J1bGUgYykKIHsKIAlLSlM6Ok9iamVjdEltcCAqcmV0ID0gMDsKIAlp
ZihjID09IENTU1J1bGU6Om51bGwpCkBAIC00NjcsNyArNDY3LDcgQEAgS0pTOjpWYWx1ZSBLRE9N
OjpnZXRET01DU1NSdWxlKEtKUzo6RXhlYwogCS8vIFJldXNlIGV4aXN0aW5nIGJyaWRnZSwgaWYg
cG9zc2libGUKIAlLSlM6Ok9iamVjdEltcCAqcmVxdWVzdCA9IGludGVycHJldGVyLT5nZXRET01P
YmplY3QoYy5oYW5kbGUoKSk7CiAJaWYocmVxdWVzdCkKLQkJcmV0dXJuIEtKUzo6VmFsdWUocmVx
dWVzdCk7CisJCXJldHVybiByZXF1ZXN0OwogCiAJLy8gVHJ5IGhhcmQgdG8gYXNrIGFueSBET00v
U1ZHL0hUTUwvd2hhdGV2ZXIgaW1wbGVtZW50YXRpb24KIAkvLyB3aGljaCBtYXkgcmVzaWRlIG9u
IHRvcCBvZiBLRE9NLCBob3cgdG8gY29udmVydCB0aGUgY3VycmVudApAQCAtNDgwLDcgKzQ4MCw3
IEBAIEtKUzo6VmFsdWUgS0RPTTo6Z2V0RE9NQ1NTUnVsZShLSlM6OkV4ZWMKIAkJaWYocmV0KQog
CQl7CiAJCQlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KGMuaGFuZGxlKCksIHJldCk7Ci0JCQly
ZXR1cm4gS0pTOjpWYWx1ZShyZXQpOworCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApAQCAtNTA0
LDEwICs1MDQsMTAgQEAgS0pTOjpWYWx1ZSBLRE9NOjpnZXRET01DU1NSdWxlKEtKUzo6RXhlYwog
CQlyZXQgPSBjLmJyaWRnZShleGVjKTsKIAkKIAlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0KGMu
aGFuZGxlKCksIHJldCk7Ci0JcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4gcmV0Owog
fQogCi1LSlM6OlZhbHVlIEtET006OmdldERPTUNTU1ZhbHVlKEtKUzo6RXhlY1N0YXRlICpleGVj
LCBDU1NWYWx1ZSBjKQorS0pTOjpWYWx1ZUltcCAqS0RPTTo6Z2V0RE9NQ1NTVmFsdWUoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIENTU1ZhbHVlIGMpCiB7CiAJS0pTOjpPYmplY3RJbXAgKnJldCA9IDA7
CiAJaWYoYyA9PSBDU1NWYWx1ZTo6bnVsbCkKQEAgLTUxOCw3ICs1MTgsNyBAQCBLSlM6OlZhbHVl
IEtET006OmdldERPTUNTU1ZhbHVlKEtKUzo6RXhlCiAJLy8gUmV1c2UgZXhpc3RpbmcgYnJpZGdl
LCBpZiBwb3NzaWJsZQogCUtKUzo6T2JqZWN0SW1wICpyZXF1ZXN0ID0gaW50ZXJwcmV0ZXItPmdl
dERPTU9iamVjdChjLmhhbmRsZSgpKTsKIAlpZihyZXF1ZXN0KQotCQlyZXR1cm4gS0pTOjpWYWx1
ZShyZXF1ZXN0KTsKKwkJcmV0dXJuIHJlcXVlc3Q7CiAKIAkvLyBUcnkgaGFyZCB0byBhc2sgYW55
IERPTS9TVkcvSFRNTC93aGF0ZXZlciBpbXBsZW1lbnRhdGlvbgogCS8vIHdoaWNoIG1heSByZXNp
ZGUgb24gdG9wIG9mIEtET00sIGhvdyB0byBjb252ZXJ0IHRoZSBjdXJyZW50CkBAIC01MzEsNyAr
NTMxLDcgQEAgS0pTOjpWYWx1ZSBLRE9NOjpnZXRET01DU1NWYWx1ZShLSlM6OkV4ZQogCQlpZihy
ZXQpCiAJCXsKIAkJCWludGVycHJldGVyLT5wdXRET01PYmplY3QoYy5oYW5kbGUoKSwgcmV0KTsK
LQkJCXJldHVybiBLSlM6OlZhbHVlKHJldCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBA
IC01NDUsMTQgKzU0NSwxNCBAQCBLSlM6OlZhbHVlIEtET006OmdldERPTUNTU1ZhbHVlKEtKUzo6
RXhlCiAJCXJldCA9IGMuYnJpZGdlKGV4ZWMpOwogCQogCWludGVycHJldGVyLT5wdXRET01PYmpl
Y3QoYy5oYW5kbGUoKSwgcmV0KTsKLQlyZXR1cm4gS0pTOjpWYWx1ZShyZXQpOworCXJldHVybiBy
ZXQ7CiB9CiAKLURPTVN0cmluZyBLRE9NOjp0b0RPTVN0cmluZyhLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgS0pTOjpWYWx1ZSAmdmFsKQorRE9NU3RyaW5nIEtET006OnRvRE9NU3RyaW5nKEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBLSlM6OlZhbHVlSW1wICp2YWwpCiB7CiAJLy8gV2UgaGF2ZSB0
byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG51bGwgYW5kIGVtcHR5IHN0cmluZ3MhCiAJLy8gVmVyeSBp
bXBvcnRhbnQgdG8gZ2V0IHRoZSBkb20gdGVzdCBzdWl0ZSBydW5uaW5nIGNvcnJlY3RseSA6KQot
CVFTdHJpbmcgc3RyaW5nID0gdmFsLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKwlRU3RyaW5n
IHN0cmluZyA9IHZhbC0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpOwogCWlmKHN0cmluZyA9PSAi
bnVsbCIpCiAJCXJldHVybiBET01TdHJpbmcoKTsKIAllbHNlIGlmKHN0cmluZy5pc0VtcHR5KCkp
CkBAIC01NjEsNyArNTYxLDcgQEAgRE9NU3RyaW5nIEtET006OnRvRE9NU3RyaW5nKEtKUzo6RXhl
Y1N0YQogCXJldHVybiBET01TdHJpbmcoc3RyaW5nKTsKIH0KIAotS0pTOjpWYWx1ZSBLRE9NOjpn
ZXRET01TdHJpbmcoY29uc3QgRE9NU3RyaW5nICZzdHIpCitLSlM6OlZhbHVlSW1wICpLRE9NOjpn
ZXRET01TdHJpbmcoY29uc3QgRE9NU3RyaW5nICZzdHIpCiB7CiAJaWYoc3RyLmlzTnVsbCgpICYm
IHN0ci5pc0VtcHR5KCkpCiAJCXJldHVybiBLSlM6Ok51bGwoKTsKQEAgLTU2OSwyMCArNTY5LDIw
IEBAIEtKUzo6VmFsdWUgS0RPTTo6Z2V0RE9NU3RyaW5nKGNvbnN0IERPTVMKIAlyZXR1cm4gS0pT
OjpTdHJpbmcoc3RyLnN0cmluZygpKTsKIH0KIAotUVZhcmlhbnQgS0RPTTo6dG9WYXJpYW50KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OlZhbHVlICZ2YWwpCitRVmFyaWFudCBLRE9N
Ojp0b1ZhcmlhbnQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6VmFsdWVJbXAgKnZhbCkKIHsK
IAlRVmFyaWFudCByZXM7CiAKLQlzd2l0Y2godmFsLnR5cGUoKSkKKwlzd2l0Y2godmFsLT50eXBl
KCkpCiAJewogCQljYXNlIEtKUzo6Qm9vbGVhblR5cGU6Ci0JCQlyZXMgPSBRVmFyaWFudCh2YWwu
dG9Cb29sZWFuKGV4ZWMpLCAwKTsKKwkJCXJlcyA9IFFWYXJpYW50KHZhbC0+dG9Cb29sZWFuKGV4
ZWMpLCAwKTsKIAkJCWJyZWFrOwogCQljYXNlIEtKUzo6TnVtYmVyVHlwZToKLQkJCXJlcyA9IFFW
YXJpYW50KHZhbC50b051bWJlcihleGVjKSk7CisJCQlyZXMgPSBRVmFyaWFudCh2YWwtPnRvTnVt
YmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQljYXNlIEtKUzo6U3RyaW5nVHlwZToKLQkJCXJlcyA9
IFFWYXJpYW50KHZhbC50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOworCQkJcmVzID0gUVZhcmlh
bnQodmFsLT50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6
CiAJCQkvLyBldmVyeXRoaW5nIGVsc2Ugd2lsbCBiZSAnaW52YWxpZCcKSW5kZXg6IGtkb20vZWNt
YS9FY21hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9l
Y21hL0VjbWEuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2Rv
bS9lY21hL0VjbWEuaAotLS0ga2RvbS9lY21hL0VjbWEuaAk5IEp1bCAyMDA1IDA2OjUzOjU4IC0w
MDAwCTEuMQorKysga2RvbS9lY21hL0VjbWEuaAk4IEF1ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBA
IC02MiwyMCArNjIsMjAgQEAgbmFtZXNwYWNlIEtET00KIAogCQl2b2lkIHNldHVwKENERkludGVy
ZmFjZSAqaW50ZXJmYWNlKTsKIAotCQlLSlM6OkNvbXBsZXRpb24gZXZhbHVhdGUoY29uc3QgS0pT
OjpVU3RyaW5nICZjb2RlLCBjb25zdCBLSlM6OlZhbHVlICZ0aGlzVik7CisJCUtKUzo6Q29tcGxl
dGlvbiBldmFsdWF0ZShjb25zdCBLSlM6OlVTdHJpbmcgJmNvZGUsIEtKUzo6VmFsdWVJbXAgKnRo
aXNWKTsKIAotCQlLSlM6Ok9iamVjdCBnbG9iYWxPYmplY3QoKSBjb25zdDsKKwkJS0pTOjpPYmpl
Y3RJbXAgKmdsb2JhbE9iamVjdCgpIGNvbnN0OwogCQlLSlM6OkV4ZWNTdGF0ZSAqZ2xvYmFsRXhl
YygpIGNvbnN0OwogCQkKIAkJRWNtYUludGVyZmFjZSAqaW50ZXJmYWNlKCkgY29uc3Q7CiAJCVNj
cmlwdEludGVycHJldGVyICppbnRlcnByZXRlcigpIGNvbnN0OwogCiAJCS8vIEludGVybmFsLCB1
c2VkIHRvIGhhbmRsZSBldmVudCBsaXN0ZW5lcnMKLQkJS0pTOjpPYmplY3QgZWNtYUxpc3RlbmVy
VG9PYmplY3QoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6VmFsdWUgJmxpc3RlbmVy
KTsKKwkJS0pTOjpPYmplY3RJbXAgKmVjbWFMaXN0ZW5lclRvT2JqZWN0KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBLSlM6OlZhbHVlSW1wICpsaXN0ZW5lcik7CiAKIAkJRXZlbnRMaXN0ZW5lckltcGwg
KmNyZWF0ZUV2ZW50TGlzdGVuZXIoY29uc3QgRE9NU3RyaW5nICZ0eXBlLCBjb25zdCBET01TdHJp
bmcgJmpzQ29kZSk7Ci0JCUV2ZW50TGlzdGVuZXJJbXBsICpjcmVhdGVFdmVudExpc3RlbmVyKEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OlZhbHVlICZsaXN0ZW5lcik7Ci0JCUV2ZW50
TGlzdGVuZXJJbXBsICpmaW5kRXZlbnRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgS0pTOjpWYWx1ZSAmbGlzdGVuZXIpOworCQlFdmVudExpc3RlbmVySW1wbCAqY3JlYXRlRXZl
bnRMaXN0ZW5lcihLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAqbGlzdGVuZXIp
OworCQlFdmVudExpc3RlbmVySW1wbCAqZmluZEV2ZW50TGlzdGVuZXIoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIEtKUzo6VmFsdWVJbXAgKmxpc3RlbmVyKTsKIAogCQl2b2lkIGFkZEV2ZW50TGlzdGVu
ZXIoRXZlbnRMaXN0ZW5lckltcGwgKmxpc3RlbmVyLCBLSlM6Ok9iamVjdEltcCAqaW1wKTsKIAkJ
dm9pZCByZW1vdmVFdmVudExpc3RlbmVyKEtKUzo6T2JqZWN0SW1wICppbXApOwpAQCAtMTAyLDMz
ICsxMDIsMzIgQEAgbmFtZXNwYWNlIEtET00KIAl9OwogCiAJLy8gSGVscGVycwotCUtKUzo6VmFs
dWUgZ2V0RE9NTm9kZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgTm9kZSBuKTsKLQlLSlM6OlZhbHVl
IGdldERPTUV2ZW50KEtKUzo6RXhlY1N0YXRlICpleGVjLCBFdmVudCBlKTsKLQlLSlM6OlZhbHVl
IGdldERPTUNTU1J1bGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIENTU1J1bGUgYyk7Ci0JS0pTOjpW
YWx1ZSBnZXRET01DU1NWYWx1ZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgQ1NTVmFsdWUgYyk7CisJ
S0pTOjpWYWx1ZUltcCAqZ2V0RE9NTm9kZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgTm9kZSBuKTsK
KwlLSlM6OlZhbHVlSW1wICpnZXRET01FdmVudChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgRXZlbnQg
ZSk7CisJS0pTOjpWYWx1ZUltcCAqZ2V0RE9NQ1NTUnVsZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
Q1NTUnVsZSBjKTsKKwlLSlM6OlZhbHVlSW1wICpnZXRET01DU1NWYWx1ZShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgQ1NTVmFsdWUgYyk7CiAKLQlLSlM6OlZhbHVlIGdldERPTVN0cmluZyhjb25zdCBE
T01TdHJpbmcgJnN0cik7CisJS0pTOjpWYWx1ZUltcCAqZ2V0RE9NU3RyaW5nKGNvbnN0IERPTVN0
cmluZyAmc3RyKTsKIAotCURPTVN0cmluZyB0b0RPTVN0cmluZyhLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgS0pTOjpWYWx1ZSAmdmFsKTsKLQlRVmFyaWFudCB0b1ZhcmlhbnQoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6VmFsdWUgJnZhbCk7CisJRE9NU3RyaW5nIHRvRE9NU3Ry
aW5nKEtKUzo6RXhlY1N0YXRlICpleGVjLCBLSlM6OlZhbHVlSW1wICp2YWwpOworCVFWYXJpYW50
IHRvVmFyaWFudChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAqdmFsKTsKIAog
CS8vIENvbnZlcnQgYmV0d2VlbiBlY21hIHZhbHVlcyBhbmQgcmVhbCBrZG9tIG9iamVjdHMKIAkv
LyBFeGFtcGxlOiBOb2RlIG15Tm9kZSA9IGVjbWFfY2FzdDxOb2RlPihleGVjLCBhcmdzWzBdLCAm
dG9Ob2RlKTsKIAkvLyAgICAgICAgICBBdHRyIG15QXR0ciA9IGVjbWFfY2FzdDxBdHRyPihleGVj
LCBhcmdzWzFdLCAmdG9BdHRyKTsKIAl0ZW1wbGF0ZTxjbGFzcyBUPgotCVQgZWNtYV9jYXN0KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OlZhbHVlICZ2YWwsIFQgKGNvbnZGdW5jUHRy
KShLSlM6OkV4ZWNTdGF0ZSAqLCBjb25zdCBLSlM6Ok9iamVjdEltcCAqKSkKKwlUIGVjbWFfY2Fz
dChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpWYWx1ZUltcCAqdmFsLCBUIChjb252RnVuY1B0
cikoS0pTOjpFeGVjU3RhdGUgKiwgY29uc3QgS0pTOjpPYmplY3RJbXAgKikpCiAJewotCQlLSlM6
Ok9iamVjdCBvYmogPSBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QodmFsKTsKLQkJaWYob2JqLmlz
TnVsbCgpKQorCQlpZighdmFsLT5pc09iamVjdCgpKQogCQkJcmV0dXJuIFQ6Om51bGw7CiAKLQkJ
cmV0dXJuIGNvbnZGdW5jUHRyKGV4ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KG9i
ai5pbXAoKSkpOworCQlyZXR1cm4gY29udkZ1bmNQdHIoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpP
YmplY3RJbXAgKj4odmFsKSk7CiAJfQogCiAJLy8gQ29udmVydCBiZXR3ZWVuIHJlYWwga2RvbSBv
YmplY3RzIGFuZCBlY21hIHZhbHVlcwogCS8vIEV4YW1wbGU6IHJldHVybiBzYWZlX2NhY2hlPEF0
dHI+KGV4ZWMsIG15QXR0cik7CiAJdGVtcGxhdGU8Y2xhc3MgVD4KLQlLSlM6OlZhbHVlIHNhZmVf
Y2FjaGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIFQgb2JqKQorCUtKUzo6VmFsdWVJbXAgKnNhZmVf
Y2FjaGUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIFQgb2JqKQogCXsKIAkJaWYob2JqICE9IFQ6Om51
bGwpCiAJCQlyZXR1cm4gb2JqLmNhY2hlKGV4ZWMpOwpJbmRleDoga2RvbS9lY21hL0dsb2JhbE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9l
Y21hL0dsb2JhbE9iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11
IC1yMS4yIGtkb20vZWNtYS9HbG9iYWxPYmplY3QuY3BwCi0tLSBrZG9tL2VjbWEvR2xvYmFsT2Jq
ZWN0LmNwcAk3IEF1ZyAyMDA1IDA2OjE3OjQ0IC0wMDAwCTEuMgorKysga2RvbS9lY21hL0dsb2Jh
bE9iamVjdC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtOTksNyArOTksNyBAQCBH
bG9iYWxPYmplY3Q6On5HbG9iYWxPYmplY3QoKQogCiBHbG9iYWxPYmplY3QgKkdsb2JhbE9iamVj
dDo6cmV0cmlldmVBY3RpdmUoS0pTOjpFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0JS0pTOjpWYWx1ZUlt
cCAqaW1wID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCkuaW1wKCk7CisJS0pT
OjpWYWx1ZUltcCAqaW1wID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsT2JqZWN0KCk7CiAJ
UV9BU1NFUlQoaW1wKTsKIAogCXJldHVybiBzdGF0aWNfY2FzdDxHbG9iYWxPYmplY3QgKj4oaW1w
KTsKQEAgLTExOCw3ICsxMTgsNyBAQCBib29sIEdsb2JhbE9iamVjdDo6aGFzUHJvcGVydHkoS0pT
OjpFeGVjCiAJcmV0dXJuIHRydWU7IC8vIFNlZSBLSlM6OldpbmRvdzo6aGFzUHJvcGVydHkKIH0K
IAotS0pTOjpWYWx1ZSBHbG9iYWxPYmplY3Q6OmdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgS0pTOjpJZGVudGlmaWVyICZwKSBjb25zdAorS0pTOjpWYWx1ZUltcCAqR2xvYmFsT2JqZWN0
OjpnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcCkgY29u
c3QKIHsKIAlrZERlYnVnKDI2MDA0KSA8PCAiR2xvYmFsT2JqZWN0ICgiIDw8IHRoaXMgPDwgIik6
OmdldCAiIDw8IHAucXN0cmluZygpIDw8IGVuZGw7CiAKQEAgLTEzMyw4ICsxMzMsOCBAQCBLSlM6
OlZhbHVlIEdsb2JhbE9iamVjdDo6Z2V0KEtKUzo6RXhlY1N0CiAJfQogCiAJLy8gTG9vayBmb3Ig
b3ZlcnJpZGVzIGZpcnN0Ci0JS0pTOjpWYWx1ZSB2YWwgPSBLSlM6Ok9iamVjdEltcDo6Z2V0KGV4
ZWMsIHApOwotCWlmKCF2YWwuaXNBKEtKUzo6VW5kZWZpbmVkVHlwZSkpCisJS0pTOjpWYWx1ZUlt
cCAqdmFsID0gS0pTOjpPYmplY3RJbXA6OmdldChleGVjLCBwKTsKKwlpZih2YWwtPnR5cGUoKSAh
PSBLSlM6OlVuZGVmaW5lZFR5cGUpCiAJCXJldHVybiBpc1NhZmVTY3JpcHQoZXhlYykgPyB2YWwg
OiBLSlM6OlVuZGVmaW5lZCgpOwogCiAJLy8gTm90IHRoZSByaWdodCB3YXkgaW4gdGhlIGxvbmcg
cnVuLiBTaG91bGQgdXNlIHJldHJpZXZlKG1fZG9jKS4uLgpAQCAtMTQ2LDEyICsxNDYsMTIgQEAg
S0pTOjpWYWx1ZSBHbG9iYWxPYmplY3Q6OmdldChLSlM6OkV4ZWNTdAogCQlzd2l0Y2goZW50cnkt
PnZhbHVlKQogCQl7CiAJCQljYXNlIEdsb2JhbE9iamVjdENvbnN0YW50czo6V2luZG93OgotCQkJ
CXJldHVybiBLSlM6OlZhbHVlKGNvbnN0X2Nhc3Q8R2xvYmFsT2JqZWN0ICo+KHRoaXMpKTsKKwkJ
CQlyZXR1cm4gY29uc3RfY2FzdDxHbG9iYWxPYmplY3QgKj4odGhpcyk7CiAJCQljYXNlIEdsb2Jh
bE9iamVjdENvbnN0YW50czo6RXZ0OgogCQkJCXJldHVybiBnZXRET01FdmVudChleGVjLCBFdmVu
dChpbnRlcnByZXRlci0+Y3VycmVudEV2ZW50KCkpKTsKIAkJCWNhc2UgR2xvYmFsT2JqZWN0Q29u
c3RhbnRzOjpEb2N1bWVudDoKIAkJCQkvLyBzcGVjaWFsIGNhc2UsIEVjbWE6OnNldHVwIGNyZWF0
ZWQgaXQsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gaXQKLQkJCQlyZXR1cm4gS0pTOjpWYWx1ZShp
bnRlcnByZXRlci0+Z2V0RE9NT2JqZWN0KGQtPmRvY3VtZW50KSk7CisJCQkJcmV0dXJuIGludGVy
cHJldGVyLT5nZXRET01PYmplY3QoZC0+ZG9jdW1lbnQpOwogCQkJY2FzZSBHbG9iYWxPYmplY3RD
b25zdGFudHM6OlNldFRpbWVvdXQ6CiAJCQljYXNlIEdsb2JhbE9iamVjdENvbnN0YW50czo6Q2xl
YXJUaW1lb3V0OgogCQkJY2FzZSBHbG9iYWxPYmplY3RDb25zdGFudHM6OlNldEludGVydmFsOgpA
QCAtMTk0LDcgKzE5NCw3IEBAIEtKUzo6VmFsdWUgR2xvYmFsT2JqZWN0OjpnZXQoS0pTOjpFeGVj
U3QKIAlyZXR1cm4gS0pTOjpVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBHbG9iYWxPYmplY3Q6OnB1
dChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUsIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cikKK3ZvaWQgR2xvYmFsT2JqZWN0
OjpwdXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpCiB7CiAJLy8gSWYgd2UgYXJl
IGNhbGxlZCBieSBhbiBpbnRlcm5hbCBLSlMgY2FsbCwgdGhlbiBkaXJlY3RseSBqdW1wIHRvIE9i
amVjdEltcCAtPiBzYXZlcyB0aW1lCiAJLy8gQWxzbyBhcHBsaWVzIGlmIHdlIGhhdmUgYSBsb2Nh
bCBvdmVycmlkZSAoZS5nLiAidmFyIGxvY2F0aW9uIikKQEAgLTI2OCwxOCArMjY4LDE4IEBAIGNv
bnN0IEtKUzo6Q2xhc3NJbmZvICpHbG9iYWxPYmplY3Q6OmNsYXMKIH0KIAogLy8gRWNtYVNjcmlw
dCBmdW5jdGlvbiBoYW5kbGluZwotS0pTOjpWYWx1ZSBHbG9iYWxPYmplY3RGdW5jOjpjYWxsKEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBLSlM6Ok9iamVjdCAmdGhpc09iaiwgY29uc3QgS0pTOjpMaXN0
ICZhcmdzKQorS0pTOjpWYWx1ZUltcCAqR2xvYmFsT2JqZWN0RnVuYzo6Y2FsbEFzRnVuY3Rpb24o
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBLSlM6
Okxpc3QgJmFyZ3MpCiB7Ci0JaWYoIXRoaXNPYmouaW5oZXJpdHMoJkdsb2JhbE9iamVjdDo6c19j
bGFzc0luZm8pKQorCWlmKCF0aGlzT2JqLT5pbmhlcml0cygmR2xvYmFsT2JqZWN0OjpzX2NsYXNz
SW5mbykpCiAJewotCQlLSlM6Ok9iamVjdCBlcnIgPSBLSlM6OkVycm9yOjpjcmVhdGUoZXhlYywg
S0pTOjpUeXBlRXJyb3IpOworCQlLSlM6Ok9iamVjdEltcCAqZXJyID0gS0pTOjpFcnJvcjo6Y3Jl
YXRlKGV4ZWMsIEtKUzo6VHlwZUVycm9yKTsKIAkJZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CiAJ
CXJldHVybiBlcnI7CiAJfQogCQotCUdsb2JhbE9iamVjdCAqZ2xvYmFsID0gc3RhdGljX2Nhc3Q8
R2xvYmFsT2JqZWN0ICo+KHRoaXNPYmouaW1wKCkpOwotCUtKUzo6VmFsdWUgdiA9IGFyZ3NbMF07
Ci0JS0pTOjpVU3RyaW5nIHMgPSB2LnRvU3RyaW5nKGV4ZWMpOworCUdsb2JhbE9iamVjdCAqZ2xv
YmFsID0gc3RhdGljX2Nhc3Q8R2xvYmFsT2JqZWN0ICo+KHRoaXNPYmopOworCUtKUzo6VmFsdWVJ
bXAgKnYgPSBhcmdzWzBdOworCUtKUzo6VVN0cmluZyBzID0gdi0+dG9TdHJpbmcoZXhlYyk7CiAJ
UVN0cmluZyBzdHIgPSBzLnFzdHJpbmcoKTsKIAogCXN3aXRjaChpZCkKQEAgLTMwNSw3ICszMDUs
NyBAQCBLSlM6OlZhbHVlIEdsb2JhbE9iamVjdEZ1bmM6OmNhbGwoS0pTOjpFCiAJCQlyZXR1cm4g
S0pTOjpVbmRlZmluZWQoKTsKIAkJY2FzZSBHbG9iYWxPYmplY3RDb25zdGFudHM6OkNsZWFyVGlt
ZW91dDoKIAkJY2FzZSBHbG9iYWxPYmplY3RDb25zdGFudHM6OkNsZWFySW50ZXJ2YWw6Ci0JCQln
bG9iYWwtPmNsZWFyVGltZW91dCh2LnRvSW50MzIoZXhlYykpOworCQkJZ2xvYmFsLT5jbGVhclRp
bWVvdXQodi0+dG9JbnQzMihleGVjKSk7CiAJCQlyZXR1cm4gS0pTOjpVbmRlZmluZWQoKTsKIAkJ
Y2FzZSBHbG9iYWxPYmplY3RDb25zdGFudHM6OlByaW50Tm9kZToKIAkJewpAQCAtMzM2LDE2ICsz
MzYsMTUgQEAgS0pTOjpWYWx1ZSBHbG9iYWxPYmplY3RGdW5jOjpjYWxsKEtKUzo6RQogCQl9CiAJ
CWNhc2UgR2xvYmFsT2JqZWN0Q29uc3RhbnRzOjpTZXRJbnRlcnZhbDoKIAkJewotCQkJaWYoYXJn
cy5zaXplKCkgPj0gMiAmJiB2LmlzQShLSlM6OlN0cmluZ1R5cGUpKQorCQkJaWYoYXJncy5zaXpl
KCkgPj0gMiAmJiB2LT5pc1N0cmluZygpKQogCQkJewotCQkJCWludCBpID0gYXJnc1sxXS50b0lu
dDMyKGV4ZWMpOwotCQkJCWludCByID0gZ2xvYmFsLT5pbnN0YWxsVGltZW91dChzLCBhcmdzW2ld
LnRvSW50MzIoZXhlYyksIGZhbHNlKTsKKwkJCQlpbnQgaSA9IGFyZ3NbMV0tPnRvSW50MzIoZXhl
Yyk7CisJCQkJaW50IHIgPSBnbG9iYWwtPmluc3RhbGxUaW1lb3V0KHMsIGFyZ3NbaV0tPnRvSW50
MzIoZXhlYyksIGZhbHNlKTsKIAkJCQlyZXR1cm4gS0pTOjpOdW1iZXIocik7CiAJCQl9Ci0JCQll
bHNlIGlmKGFyZ3Muc2l6ZSgpID49IDIgJiYgIUtKUzo6T2JqZWN0OjpkeW5hbWljQ2FzdCh2KS5p
c051bGwoKSAmJiBLSlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QodikuaW1wbGVtZW50c0NhbGwoKSkK
KwkJCWVsc2UgaWYoYXJncy5zaXplKCkgPj0gMiAmJiB2LT5pc09iamVjdCgpICYmIHN0YXRpY19j
YXN0PEtKUzo6T2JqZWN0SW1wICo+KHYpLT5pbXBsZW1lbnRzQ2FsbCgpKQogCQkJewotCQkJCUtK
Uzo6VmFsdWUgZnVuYyA9IGFyZ3NbMF07Ci0JCQkJaW50IGkgPSBhcmdzWzFdLnRvSW50MzIoZXhl
Yyk7CisJCQkJaW50IGkgPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMpOwogCQkJCWludCByID0gZ2xv
YmFsLT5pbnN0YWxsVGltZW91dChzLCBpLCBmYWxzZSk7CiAJCQkJcmV0dXJuIEtKUzo6TnVtYmVy
KHIpOwogCQkJfQpAQCAtMzU0LDE2ICszNTMsMTUgQEAgS0pTOjpWYWx1ZSBHbG9iYWxPYmplY3RG
dW5jOjpjYWxsKEtKUzo6RQogCQl9CiAJCWNhc2UgR2xvYmFsT2JqZWN0Q29uc3RhbnRzOjpTZXRU
aW1lb3V0OgogCQl7Ci0JCQlpZihhcmdzLnNpemUoKSA9PSAyICYmIHYuaXNBKEtKUzo6U3RyaW5n
VHlwZSkpCisJCQlpZihhcmdzLnNpemUoKSA9PSAyICYmIHYtPmlzU3RyaW5nKCkpCiAJCQl7Ci0J
CQkJaW50IGkgPSBhcmdzWzFdLnRvSW50MzIoZXhlYyk7CisJCQkJaW50IGkgPSBhcmdzWzFdLT50
b0ludDMyKGV4ZWMpOwogCQkJCWludCByID0gZ2xvYmFsLT5pbnN0YWxsVGltZW91dChzLCBpLCB0
cnVlIC8qc2luZ2xlIHNob3QqLyk7CiAJCQkJcmV0dXJuIEtKUzo6TnVtYmVyKHIpOwogCQkJfQot
CQkJZWxzZSBpZihhcmdzLnNpemUoKSA+PSAyICYmIHYuaXNBKEtKUzo6T2JqZWN0VHlwZSkgJiYg
S0pTOjpPYmplY3Q6OmR5bmFtaWNDYXN0KHYpLmltcGxlbWVudHNDYWxsKCkpCisJCQllbHNlIGlm
KGFyZ3Muc2l6ZSgpID49IDIgJiYgdi0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxLSlM6Ok9i
amVjdEltcCAqPih2KS0+aW1wbGVtZW50c0NhbGwoKSkKIAkJCXsKLQkJCQlLSlM6OlZhbHVlIGZ1
bmMgPSBhcmdzWzBdOwotCQkJCWludCBpID0gYXJnc1sxXS50b0ludDMyKGV4ZWMpOworCQkJCWlu
dCBpID0gYXJnc1sxXS0+dG9JbnQzMihleGVjKTsKIAkJCQlpbnQgciA9IGdsb2JhbC0+aW5zdGFs
bFRpbWVvdXQocywgaSwgZmFsc2UpOwogCQkJCXJldHVybiBLSlM6Ok51bWJlcihyKTsKIAkJCX0K
QEAgLTM5Miw3ICszOTAsNyBAQCB2b2lkIEdsb2JhbE9iamVjdDo6Y2xlYXJUaW1lb3V0KGludCB0
aW1lCiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU2NoZWR1bGVkQWN0aW9uIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotU2NoZWR1bGVkQWN0aW9uOjpTY2hlZHVsZWRBY3Rpb24oS0pTOjpP
YmplY3QgZnVuYywgS0pTOjpMaXN0IGFyZ3MsIGJvb2wgc2luZ2xlU2hvdCkKK1NjaGVkdWxlZEFj
dGlvbjo6U2NoZWR1bGVkQWN0aW9uKEtKUzo6T2JqZWN0SW1wICpmdW5jLCBLSlM6Okxpc3QgYXJn
cywgYm9vbCBzaW5nbGVTaG90KQogewogCW1fZnVuYyA9IGZ1bmM7CiAJbV9hcmdzID0gYXJnczsK
QEAgLTQyMSwxMyArNDE5LDEzIEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKEdsb2Jh
bE9iamUKIAlTY3JpcHRJbnRlcnByZXRlciAqaW50ZXJwcmV0ZXIgPSBnbG9iYWwtPmRvYygpLT5l
Y21hRW5naW5lKCktPmludGVycHJldGVyKCk7CiAJaWYobV9pc0Z1bmN0aW9uKQogCXsKLQkJaWYo
bV9mdW5jLmltcGxlbWVudHNDYWxsKCkpCisJCWlmKG1fZnVuYy0+aW1wbGVtZW50c0NhbGwoKSkK
IAkJewogCQkJS0pTOjpFeGVjU3RhdGUgKmV4ZWMgPSBpbnRlcnByZXRlci0+Z2xvYmFsRXhlYygp
OwotCQkJUV9BU1NFUlQoZ2xvYmFsID09IGludGVycHJldGVyLT5nbG9iYWxPYmplY3QoKS5pbXAo
KSk7CisJCQlRX0FTU0VSVChnbG9iYWwgPT0gaW50ZXJwcmV0ZXItPmdsb2JhbE9iamVjdCgpKTsK
IAkJCQotCQkJS0pTOjpPYmplY3Qgb2JqKGdsb2JhbCk7Ci0JCQltX2Z1bmMuY2FsbChleGVjLCBv
YmosIG1fYXJncyk7IC8vIG5vdGUgdGhhdCBjYWxsKCkgY3JlYXRlcyBpdHMgb3duIGV4ZWN1dGlv
biBzdGF0ZSBmb3IgdGhlIGZ1bmMgY2FsbAorCQkJS0pTOjpPYmplY3RJbXAgKm9iaihnbG9iYWwp
OworCQkJbV9mdW5jLT5jYWxsQXNGdW5jdGlvbihleGVjLCBvYmosIG1fYXJncyk7IC8vIG5vdGUg
dGhhdCBjYWxsQXNGdW5jdGlvbigpIGNyZWF0ZXMgaXRzIG93biBleGVjdXRpb24gc3RhdGUgZm9y
IHRoZSBmdW5jIGNhbGwKIAkJfQogCX0KIAllbHNlCkBAIC00NjcsOSArNDY1LDkgQEAgaW50IEds
b2JhbFFPYmplY3Q6Omluc3RhbGxUaW1lb3V0KGNvbnN0IAogCXJldHVybiBpZDsKIH0KIAotaW50
IEdsb2JhbFFPYmplY3Q6Omluc3RhbGxUaW1lb3V0KGNvbnN0IEtKUzo6VmFsdWUgJmZ1bmMsIEtK
Uzo6TGlzdCBhcmdzLCBpbnQgdCwgYm9vbCBzaW5nbGVTaG90KQoraW50IEdsb2JhbFFPYmplY3Q6
Omluc3RhbGxUaW1lb3V0KEtKUzo6VmFsdWVJbXAgKmZ1bmMsIEtKUzo6TGlzdCBhcmdzLCBpbnQg
dCwgYm9vbCBzaW5nbGVTaG90KQogewotCUtKUzo6T2JqZWN0IG9iakZ1bmMgPSBLSlM6Ok9iamVj
dDo6ZHluYW1pY0Nhc3QoZnVuYyk7CisJS0pTOjpPYmplY3RJbXAgKm9iakZ1bmMgPSBzdGF0aWNf
Y2FzdDxLSlM6Ok9iamVjdEltcCAqPihmdW5jKTsKIAlpZih0IDwgMTApIHQgPSAxMDsKIAlpbnQg
aWQgPSBzdGFydFRpbWVyKHQpOwogCXNjaGVkdWxlZEFjdGlvbnMuaW5zZXJ0KGlkLCBuZXcgU2No
ZWR1bGVkQWN0aW9uKG9iakZ1bmMsIGFyZ3MsIHNpbmdsZVNob3QpKTsKSW5kZXg6IGtkb20vZWNt
YS9HbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rZG9tL2VjbWEvR2xvYmFsT2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtkb20vZWNtYS9HbG9iYWxPYmplY3QuaAotLS0ga2RvbS9lY21hL0dsb2Jh
bE9iamVjdC5oCTkgSnVsIDIwMDUgMDY6NTM6NTkgLTAwMDAJMS4xCisrKyBrZG9tL2VjbWEvR2xv
YmFsT2JqZWN0LmgJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtMzYsOCArMzYsOCBAQCBu
YW1lc3BhY2UgS0RPTQogCQlHbG9iYWxPYmplY3QoRG9jdW1lbnRJbXBsICpkb2MpOwogCQl2aXJ0
dWFsIH5HbG9iYWxPYmplY3QoKTsKIAotCQl2aXJ0dWFsIEtKUzo6VmFsdWUgZ2V0KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7
Ci0JCXZpcnR1YWwgdm9pZCBwdXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIg
PSBLSlM6Ok5vbmUpOworCQl2aXJ0dWFsIEtKUzo6VmFsdWVJbXAgKmdldChLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworCQl2
aXJ0dWFsIHZvaWQgcHV0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyID0gS0pTOjpO
b25lKTsKIAkJdmlydHVhbCBib29sIGhhc1Byb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBj
b25zdCBLSlM6OklkZW50aWZpZXIgJnApIGNvbnN0OwogCiAJCS8vIFJldHVybnMgYSBwb2ludGVy
IHRvIHRoZSBHbG9iYWwgT2JqZWN0IGluIHRoaXMgRWNtYVNjcmlwdCBDb250ZXh0CkBAIC03MSw3
ICs3MSw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJY2xhc3MgU2NoZWR1bGVkQWN0aW9uCiAJewogCXB1
YmxpYzoKLQkJU2NoZWR1bGVkQWN0aW9uKEtKUzo6T2JqZWN0IGZ1bmMsIEtKUzo6TGlzdCBhcmdz
LCBib29sIHNpbmdsZVNob3QpOworCQlTY2hlZHVsZWRBY3Rpb24oS0pTOjpPYmplY3RJbXAgKmZ1
bmMsIEtKUzo6TGlzdCBhcmdzLCBib29sIHNpbmdsZVNob3QpOwogCQlTY2hlZHVsZWRBY3Rpb24o
Y29uc3QgUVN0cmluZyAmY29kZSwgYm9vbCBzaW5nbGVTaG90KTsKIAkJflNjaGVkdWxlZEFjdGlv
bigpOwogCQpAQCAtODAsNyArODAsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXByaXZhdGU6CiAJCWZy
aWVuZCBjbGFzcyBHbG9iYWxRT2JqZWN0OwogCi0JCUtKUzo6T2JqZWN0IG1fZnVuYzsKKwkJS0pT
OjpPYmplY3RJbXAgKm1fZnVuYzsKIAkJS0pTOjpMaXN0IG1fYXJnczsKIAkJUVN0cmluZyBtX2Nv
ZGU7CiAJCWJvb2wgbV9pc0Z1bmN0aW9uOwpAQCAtOTUsNyArOTUsNyBAQCBuYW1lc3BhY2UgS0RP
TQogCQl+R2xvYmFsUU9iamVjdCgpOwogCiAJCWludCBpbnN0YWxsVGltZW91dChjb25zdCBLSlM6
OlVTdHJpbmcgJmhhbmRsZXIsIGludCB0LCBib29sIHNpbmdsZVNob3QpOwotCQlpbnQgaW5zdGFs
bFRpbWVvdXQoY29uc3QgS0pTOjpWYWx1ZSAmZnVuYywgS0pTOjpMaXN0IGFyZ3MsIGludCB0LCBi
b29sIHNpbmdsZVNob3QpOworCQlpbnQgaW5zdGFsbFRpbWVvdXQoS0pTOjpWYWx1ZUltcCAqZnVu
YywgS0pTOjpMaXN0IGFyZ3MsIGludCB0LCBib29sIHNpbmdsZVNob3QpOwogCQl2b2lkIGNsZWFy
VGltZW91dChpbnQgdGltZXJJZCwgYm9vbCBkZWxBY3Rpb24gPSB0cnVlKTsKIAkJCiAJcHVibGlj
IHNsb3RzOgpJbmRleDoga2RvbS9lY21hL1NjcmlwdEludGVycHJldGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2VjbWEvU2NyaXB0SW50ZXJwcmV0
ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2Vj
bWEvU2NyaXB0SW50ZXJwcmV0ZXIuY3BwCi0tLSBrZG9tL2VjbWEvU2NyaXB0SW50ZXJwcmV0ZXIu
Y3BwCTkgSnVsIDIwMDUgMDY6NTM6NTkgLTAwMDAJMS4xCisrKyBrZG9tL2VjbWEvU2NyaXB0SW50
ZXJwcmV0ZXIuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDAgLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAg
cHVibGljOgogCVFQdHJEaWN0PEtKUzo6T2JqZWN0SW1wPiBkb21PYmplY3RzOwogfTsKIAotU2Ny
aXB0SW50ZXJwcmV0ZXI6OlNjcmlwdEludGVycHJldGVyKGNvbnN0IEtKUzo6T2JqZWN0ICZnbG9i
YWwsIERvY3VtZW50SW1wbCAqZG9jKSA6IEtKUzo6SW50ZXJwcmV0ZXIoZ2xvYmFsKSwgZChuZXcg
UHJpdmF0ZShkb2MpKQorU2NyaXB0SW50ZXJwcmV0ZXI6OlNjcmlwdEludGVycHJldGVyKEtKUzo6
T2JqZWN0SW1wICpnbG9iYWwsIERvY3VtZW50SW1wbCAqZG9jKSA6IEtKUzo6SW50ZXJwcmV0ZXIo
Z2xvYmFsKSwgZChuZXcgUHJpdmF0ZShkb2MpKQogewogCWlmKCFzX2ludGVycHJldGVyTGlzdCkK
IAkJc19pbnRlcnByZXRlckxpc3QgPSBuZXcgSW50ZXJwcmV0ZXJMaXN0KCk7CkluZGV4OiBrZG9t
L2VjbWEvU2NyaXB0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL2VjbWEvU2NyaXB0SW50ZXJwcmV0ZXIuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9lY21hL1NjcmlwdEludGVycHJldGVyLmgK
LS0tIGtkb20vZWNtYS9TY3JpcHRJbnRlcnByZXRlci5oCTkgSnVsIDIwMDUgMDY6NTM6NTkgLTAw
MDAJMS4xCisrKyBrZG9tL2VjbWEvU2NyaXB0SW50ZXJwcmV0ZXIuaAk4IEF1ZyAyMDA1IDE5OjU1
OjAwIC0wMDAwCkBAIC0yNyw4ICsyNyw4IEBACiAKIG5hbWVzcGFjZSBLSlMKIHsKLQljbGFzcyBW
YWx1ZTsKLQljbGFzcyBPYmplY3Q7CisJY2xhc3MgVmFsdWVJbXA7CisJY2xhc3MgT2JqZWN0SW1w
OwogCWNsYXNzIEludGVycHJldGVyOwogfTsKIApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
S0RPTQogCWNsYXNzIFNjcmlwdEludGVycHJldGVyIDogcHVibGljIEtKUzo6SW50ZXJwcmV0ZXIK
IAl7CiAJcHVibGljOgotCQlTY3JpcHRJbnRlcnByZXRlcihjb25zdCBLSlM6Ok9iamVjdCAmZ2xv
YmFsLCBEb2N1bWVudEltcGwgKmRvYyk7CisJCVNjcmlwdEludGVycHJldGVyKEtKUzo6T2JqZWN0
SW1wICpnbG9iYWwsIERvY3VtZW50SW1wbCAqZG9jKTsKIAkJdmlydHVhbCB+U2NyaXB0SW50ZXJw
cmV0ZXIoKTsKIAogCQlEb2N1bWVudEltcGwgKmRvY3VtZW50KCkgY29uc3Q7CkBAIC02Niw3ICs2
Niw3IEBAIG5hbWVzcGFjZSBLRE9NCiAKIAkvLyBMb29rdXAgb3IgY3JlYXRlIEpTIG9iamVjdCBh
cm91bmQgYW4gZXhpc3RpbmcgIkRPTSBPYmplY3QiCiAJdGVtcGxhdGU8Y2xhc3MgRE9NT2JqPgot
CWlubGluZSBLSlM6OlZhbHVlIGNhY2hlRE9NT2JqZWN0KEtKUzo6RXhlY1N0YXRlICpleGVjLCB0
eXBlbmFtZSBET01PYmo6OlByaXZhdGUgKmRvbU9iaikKKwlpbmxpbmUgS0pTOjpWYWx1ZUltcCAq
Y2FjaGVET01PYmplY3QoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIHR5cGVuYW1lIERPTU9iajo6UHJp
dmF0ZSAqZG9tT2JqKQogCXsKIAkJS0pTOjpPYmplY3RJbXAgKnJldCA9IDA7CiAJCWlmKCFkb21P
YmopCkBAIC03NCwxMiArNzQsMTIgQEAgbmFtZXNwYWNlIEtET00KIAogCQlTY3JpcHRJbnRlcnBy
ZXRlciAqaW50ZXJwcmV0ZXIgPSBzdGF0aWNfY2FzdDxTY3JpcHRJbnRlcnByZXRlciAqPihleGVj
LT5pbnRlcnByZXRlcigpKTsKIAkJaWYoKHJldCA9IGludGVycHJldGVyLT5nZXRET01PYmplY3Qo
ZG9tT2JqKSkpCi0JCQlyZXR1cm4gS0pTOjpWYWx1ZShyZXQpOworCQkJcmV0dXJuIHJldDsKIAkJ
ZWxzZQogCQl7CiAJCQlyZXQgPSBET01PYmooZG9tT2JqKS5icmlkZ2UoZXhlYyk7CiAJCQlpbnRl
cnByZXRlci0+cHV0RE9NT2JqZWN0KGRvbU9iaiwgcmV0KTsKLQkJCXJldHVybiBLSlM6OlZhbHVl
KHJldCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC04NywxNiArODcsMTYgQEAgbmFt
ZXNwYWNlIEtET00KIAkvLyAoVmVyeSBtdWNoIGxpa2UgS0pTOjpjYWNoZUdsb2JhbE9iamVjdCwg
d2hpY2ggaXMgZm9yIGEgc2luZ2xldG9uIE9iamVjdEltcCkKIAkvLyBUaGlzIG9uZSBpcyBfb25s
eV8gdXNlZCBmb3IgQ29uc3RydWN0b3Igb2JqZWN0cy4KIAl0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3ND
dG9yPgotCWlubGluZSBLSlM6Ok9iamVjdCBjYWNoZUdsb2JhbEJyaWRnZShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCisJaW5saW5lIEtK
Uzo6T2JqZWN0SW1wICpjYWNoZUdsb2JhbEJyaWRnZShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpCiAJewotCQlLSlM6OlZhbHVlSW1wICpv
YmogPSBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCo+KGV4ZWMtPmludGVycHJldGVyKCktPmds
b2JhbE9iamVjdCgpLmltcCgpKS0+Z2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7CisJCUtKUzo6VmFs
dWVJbXAgKm9iaiA9IHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wKj4oZXhlYy0+aW50ZXJwcmV0
ZXIoKS0+Z2xvYmFsT2JqZWN0KCkpLT5nZXREaXJlY3QocHJvcGVydHlOYW1lKTsKIAkJaWYob2Jq
KQotCQkJcmV0dXJuIEtKUzo6T2JqZWN0OjpkeW5hbWljQ2FzdChLSlM6OlZhbHVlKG9iaikpOwor
CQkJcmV0dXJuIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wKj4ob2JqKTsKIAkJZWxzZQogCQl7
CiAJCQlDbGFzc0N0b3IgKmN0b3IgPSBuZXcgQ2xhc3NDdG9yKGV4ZWMpOyAvLyBjcmVhdGUgdGhl
IENsYXNzQ3RvciBpbnN0YW5jZQotCQkJS0pTOjpPYmplY3QgbmV3T2JqZWN0KG5ldyBET01Ccmlk
Z2VDdG9yPENsYXNzQ3Rvcj4oZXhlYywgY3RvcikpOyAvLyBjcmVhdGUgdGhlIGJyaWRnZSBhcm91
bmQgaXQKLQkJCWV4ZWMtPmludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpLnB1dChleGVjLCBw
cm9wZXJ0eU5hbWUsIG5ld09iamVjdCwgS0pTOjpJbnRlcm5hbCk7CisJCQlLSlM6Ok9iamVjdElt
cCAqbmV3T2JqZWN0KG5ldyBET01CcmlkZ2VDdG9yPENsYXNzQ3Rvcj4oZXhlYywgY3RvcikpOyAv
LyBjcmVhdGUgdGhlIGJyaWRnZSBhcm91bmQgaXQKKwkJCWV4ZWMtPmludGVycHJldGVyKCktPmds
b2JhbE9iamVjdCgpLT5wdXQoZXhlYywgcHJvcGVydHlOYW1lLCBuZXdPYmplY3QsIEtKUzo6SW50
ZXJuYWwpOwogCQkJcmV0dXJuIG5ld09iamVjdDsKIAkJfQogCX0KSW5kZXg6IGtkb20vZXZlbnRz
L0RvY3VtZW50RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vZXZlbnRzL0RvY3VtZW50RXZlbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9Eb2N1bWVudEV2ZW50LmNwcAotLS0ga2Rv
bS9ldmVudHMvRG9jdW1lbnRFdmVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDowMCAtMDAwMAkxLjEK
KysrIGtkb20vZXZlbnRzL0RvY3VtZW50RXZlbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDAgLTAw
MDAKQEAgLTQ4LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBMRU1F
TlRfUFJPVE9UWVBFKCJEb2N1bWVudEV2ZW50IiwgRG9jdW1lbnRFdmVudFByb3RvLCBEb2N1bWVu
dEV2ZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBEb2N1bWVudEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkRvY3VtZW50RXZl
bnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYyLDkgKzYyLDkgQEAgVmFsdWUgRG9jdW1lbnRFdmVu
dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogCXJldHVybiBVbmRlZmluZWQoKTsKIH07CiAKLVZhbHVl
IERvY3VtZW50RXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqRG9jdW1lbnRFdmVudFByb3RvRnVu
Yzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCiB7Ci0JRG9jdW1lbnRFdmVudCBvYmooY2FzdChleGVjLCBzdGF0aWNf
Y2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOworCURvY3VtZW50RXZlbnQg
b2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwogCVFfQVNTRVJUKG9iai5kICE9IDApOwogCiAJS0RP
TV9FTlRFUl9TQUZFCkluZGV4OiBrZG9tL2V2ZW50cy9Eb2N1bWVudEV2ZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvRG9jdW1lbnRFdmVu
dC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50
cy9Eb2N1bWVudEV2ZW50LmgKLS0tIGtkb20vZXZlbnRzL0RvY3VtZW50RXZlbnQuaAk5IEp1bCAy
MDA1IDA2OjU0OjAwIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvRG9jdW1lbnRFdmVudC5oCTgg
QXVnIDIwMDUgMTk6NTU6MDAgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEtET00K
IAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vZXZl
bnRzL0V2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
ZG9tL2V2ZW50cy9FdmVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtkb20vZXZlbnRzL0V2ZW50LmNwcAotLS0ga2RvbS9ldmVudHMvRXZlbnQuY3BwCTkg
SnVsIDIwMDUgMDY6NTQ6MDAgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9FdmVudC5jcHAJOCBB
dWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
S0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkV2ZW50IiwgRXZlbnRQcm90bywgRXZl
bnRQcm90b0Z1bmMpCiAKLVZhbHVlIEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQog
CkBAIC04NSw3ICs4NSw3IEBAIFZhbHVlIEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAKIAkJCQkJcmV0dXJuIG9iai5jYWNoZShleGVjKTsKIAkJCX0KIAkJCQotCQkJcmV0dXJuIFZh
bHVlKCk7CisJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQljYXNlIEV2ZW50Q29uc3RhbnRzOjpFdmVu
dFBoYXNlOgogCQkJcmV0dXJuIE51bWJlcihldmVudFBoYXNlKCkpOwpAQCAtMTAzLDcgKzEwMyw3
IEBAIFZhbHVlIEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAKIAlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhl
YywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkV2ZW50UHJv
dG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09i
aiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoRXZlbnQpCiAJS0RPTV9F
TlRFUl9TQUZFCkBAIC0xMjMsOCArMTIzLDggQEAgVmFsdWUgRXZlbnRQcm90b0Z1bmM6OmNhbGwo
RXhlY1N0YXRlICpleAogCQljYXNlIEV2ZW50Q29uc3RhbnRzOjpJbml0RXZlbnQ6CiAJCXsKIAkJ
CURPTVN0cmluZyBldmVudFR5cGVBcmcgPSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzBdKTsKLQkJ
CWJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7Ci0JCQlib29sIGNh
bmNlbGFibGVBcmcgPSBhcmdzWzJdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgY2FuQnViYmxl
QXJnID0gYXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBjYW5jZWxhYmxlQXJnID0g
YXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpOwogCQkJb2JqLmluaXRFdmVudChldmVudFR5cGVBcmcs
IGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZyk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJ
CX0KSW5kZXg6IGtkb20vZXZlbnRzL0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvRXZlbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvRXZlbnQuaAotLS0ga2RvbS9ldmVudHMv
RXZlbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjAwIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvRXZl
bnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBAIC03NSw3ICs3NSw3IEBAIG5hbWVzcGFj
ZSBLRE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoRXZlbnQpCkluZGV4
OiBrZG9tL2V2ZW50cy9FdmVudEV4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9FdmVudEV4Y2Vw
dGlvbi5jcHAKLS0tIGtkb20vZXZlbnRzL0V2ZW50RXhjZXB0aW9uLmNwcAk5IEp1bCAyMDA1IDA2
OjU0OjAwIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uY3BwCTggQXVn
IDIwMDUgMTk6NTU6MDAgLTAwMDAKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtK
UzsKIEBlbmQKICovCiAKLVZhbHVlIEV2ZW50RXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRXZlbnRFeGNlcHRpb246Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2go
dG9rZW4pCiAJewpJbmRleDoga2RvbS9ldmVudHMvRXZlbnRFeGNlcHRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9FdmVudEV4Y2VwdGlv
bi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50
cy9FdmVudEV4Y2VwdGlvbi5oCi0tLSBrZG9tL2V2ZW50cy9FdmVudEV4Y2VwdGlvbi5oCTkgSnVs
IDIwMDUgMDY6NTQ6MDAgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9FdmVudEV4Y2VwdGlvbi5o
CTggQXVnIDIwMDUgMTk6NTU6MDAgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEtE
T00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ldmVudHMvRXZl
bnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vZXZlbnRzL0V2ZW50VGFyZ2V0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuY3BwCi0tLSBrZG9tL2V2ZW50cy9F
dmVudFRhcmdldC5jcHAJOSBKdWwgMjAwNSAwNjo1NDowMCAtMDAwMAkxLjEKKysrIGtkb20vZXZl
bnRzL0V2ZW50VGFyZ2V0LmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBAIC01Niw3ICs1
Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgi
RXZlbnRUYXJnZXQiLCBFdmVudFRhcmdldFByb3RvLCBFdmVudFRhcmdldFByb3RvRnVuYykKIAot
VmFsdWUgRXZlbnRUYXJnZXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqRXZlbnRUYXJnZXQ6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAg
LTcwLDcgKzcwLDcgQEAgVmFsdWUgRXZlbnRUYXJnZXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlYwog
CXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgRXZlbnRUYXJnZXRQcm90b0Z1bmM6OmNh
bGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitW
YWx1ZUltcCAqRXZlbnRUYXJnZXRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hF
Q0tfVEhJUyhFdmVudFRhcmdldCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTExMSw3ICsxMTEsNyBA
QCBWYWx1ZSBFdmVudFRhcmdldFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhCiAJCQkJfQogCQkJfQog
Ci0JCQlib29sIHVzZUNhcHR1cmUgPSBhcmdzWzJdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wg
dXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPnRvQm9vbGVhbihleGVjKTsKIAogCQkJLy8gY3JlYXRlRXZl
bnRMaXN0ZW5lciBhdXRvbWF0aWNhbGx5IHJldXNlcyBleGlzdGluZyBsaXN0ZW5lcnMsIGlmIHBv
c3NpYmxlLi4uCiAJCQlpZihpZCA9PSBFdmVudFRhcmdldENvbnN0YW50czo6QWRkRXZlbnRMaXN0
ZW5lcikKSW5kZXg6IGtkb20vZXZlbnRzL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIxLjIga2RvbS9ldmVudHMvRXZlbnRUYXJn
ZXQuaAotLS0ga2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuaAk3IEF1ZyAyMDA1IDA2OjE3OjQ0IC0w
MDAwCTEuMgorKysga2RvbS9ldmVudHMvRXZlbnRUYXJnZXQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAw
IC0wMDAwCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNT
X0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAg
KmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CiAJfTsKIH0KIApJbmRleDoga2RvbS9ldmVudHMvS2V5Ym9hcmRFdmVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvS2V5Ym9hcmRFdmVu
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZl
bnRzL0tleWJvYXJkRXZlbnQuY3BwCi0tLSBrZG9tL2V2ZW50cy9LZXlib2FyZEV2ZW50LmNwcAk5
IEp1bCAyMDA1IDA2OjU0OjAwIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvS2V5Ym9hcmRFdmVu
dC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtNTAsNyArNTAsNyBAQCB1c2luZyBu
YW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIktleWJvYXJkRXZlbnQi
LCBLZXlib2FyZEV2ZW50UHJvdG8sIEtleWJvYXJkRXZlbnRQcm90b0Z1bmMpCiAKLVZhbHVlIEtl
eWJvYXJkRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqS2V5Ym9hcmRFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzIs
NyArNzIsNyBAQCBWYWx1ZSBLZXlib2FyZEV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4CiAJcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBLZXlib2FyZEV2ZW50UHJvdG9GdW5jOjpjYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFs
dWVJbXAgKktleWJvYXJkRXZlbnRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hF
Q0tfVEhJUyhLZXlib2FyZEV2ZW50KQogCUtET01fRU5URVJfU0FGRQpAQCAtODcsMTUgKzg3LDE1
IEBAIFZhbHVlIEtleWJvYXJkRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1MKIAkJY2FzZSBLZXli
b2FyZEV2ZW50Q29uc3RhbnRzOjpJbml0S2V5Ym9hcmRFdmVudDoKIAkJewogCQkJRE9NU3RyaW5n
IHR5cGVBcmcgPSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzBdKTsKLQkJCWJvb2wgY2FuQnViYmxl
QXJnID0gYXJnc1sxXS50b0Jvb2xlYW4oZXhlYyk7Ci0JCQlib29sIGNhbmNlbGFibGVBcmcgPSBh
cmdzWzJdLnRvQm9vbGVhbihleGVjKTsKKwkJCWJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS0+
dG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBjYW5jZWxhYmxlQXJnID0gYXJnc1syXS0+dG9Cb29s
ZWFuKGV4ZWMpOwogCQkJQWJzdHJhY3RWaWV3IHZpZXdBcmcgPSBlY21hX2Nhc3Q8QWJzdHJhY3RW
aWV3PihleGVjLCBhcmdzWzNdLCAmdG9BYnN0cmFjdFZpZXcpOwogCQkJRE9NU3RyaW5nIGtleUlk
ZW50aWZpZXJBcmcgPSB0b0RPTVN0cmluZyhleGVjLCBhcmdzWzRdKTsKLQkJCWxvbmcga2V5TG9j
YXRpb25BcmcgPSBhcmdzWzVdLnRvSW50MzIoZXhlYyk7Ci0JCQlib29sIGN0cmxLZXlBcmcgPSBh
cmdzWzZdLnRvQm9vbGVhbihleGVjKTsKLQkJCWJvb2wgYWx0S2V5QXJnID0gYXJnc1s3XS50b0Jv
b2xlYW4oZXhlYyk7Ci0JCQlib29sIHNoaWZ0S2V5QXJnID0gYXJnc1s4XS50b0Jvb2xlYW4oZXhl
Yyk7Ci0JCQlib29sIG1ldGFLZXlBcmcgPSBhcmdzWzldLnRvQm9vbGVhbihleGVjKTsKKwkJCWxv
bmcga2V5TG9jYXRpb25BcmcgPSBhcmdzWzVdLT50b0ludDMyKGV4ZWMpOworCQkJYm9vbCBjdHJs
S2V5QXJnID0gYXJnc1s2XS0+dG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBhbHRLZXlBcmcgPSBh
cmdzWzddLT50b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIHNoaWZ0S2V5QXJnID0gYXJnc1s4XS0+
dG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBtZXRhS2V5QXJnID0gYXJnc1s5XS0+dG9Cb29sZWFu
KGV4ZWMpOwogCiAJCQlvYmouaW5pdEtleWJvYXJkRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJn
LCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBrZXlJZGVudGlmaWVyQXJnLCBrZXlMb2NhdGlvbkFy
ZywgY3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlmdEtleUFyZywgbWV0YUtleUFyZyk7CiAJCQly
ZXR1cm4gVW5kZWZpbmVkKCk7CkluZGV4OiBrZG9tL2V2ZW50cy9LZXlib2FyZEV2ZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvS2V5Ym9h
cmRFdmVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9t
L2V2ZW50cy9LZXlib2FyZEV2ZW50LmgKLS0tIGtkb20vZXZlbnRzL0tleWJvYXJkRXZlbnQuaAk5
IEp1bCAyMDA1IDA2OjU0OjAwIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvS2V5Ym9hcmRFdmVu
dC5oCTggQXVnIDIwMDUgMTk6NTU6MDAgLTAwMDAKQEAgLTkzLDcgKzkzLDcgQEAgbmFtZXNwYWNl
IEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ldmVudHMv
TW91c2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a2RvbS9ldmVudHMvTW91c2VFdmVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL01vdXNlRXZlbnQuY3BwCi0tLSBrZG9tL2V2ZW50cy9N
b3VzZUV2ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjAwIC0wMDAwCTEuMQorKysga2RvbS9ldmVu
dHMvTW91c2VFdmVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtNTMsNyArNTMs
NyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIk1v
dXNlRXZlbnQiLCBNb3VzZUV2ZW50UHJvdG8sIE1vdXNlRXZlbnRQcm90b0Z1bmMpCiAKLVZhbHVl
IE1vdXNlRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqTW91c2VFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtOTMsNyAr
OTMsNyBAQCBWYWx1ZSBNb3VzZUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAJcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBNb3VzZUV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNT
dGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAg
Kk1vdXNlRXZlbnRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhN
b3VzZUV2ZW50KQogCUtET01fRU5URVJfU0FGRQpAQCAtMTAzLDE5ICsxMDMsMTkgQEAgVmFsdWUg
TW91c2VFdmVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdAogCQljYXNlIE1vdXNlRXZlbnRDb25z
dGFudHM6OkluaXRNb3VzZUV2ZW50OgogCQl7CiAJCQlET01TdHJpbmcgdHlwZUFyZyA9IHRvRE9N
U3RyaW5nKGV4ZWMsIGFyZ3NbMF0pOwotCQkJYm9vbCBjYW5CdWJibGVBcmcgPSBhcmdzWzFdLnRv
Qm9vbGVhbihleGVjKTsKLQkJCWJvb2wgY2FuY2VsYWJsZUFyZyA9IGFyZ3NbMl0udG9Cb29sZWFu
KGV4ZWMpOworCQkJYm9vbCBjYW5CdWJibGVBcmcgPSBhcmdzWzFdLT50b0Jvb2xlYW4oZXhlYyk7
CisJCQlib29sIGNhbmNlbGFibGVBcmcgPSBhcmdzWzJdLT50b0Jvb2xlYW4oZXhlYyk7CiAJCQlB
YnN0cmFjdFZpZXcgdmlld0FyZyA9IGVjbWFfY2FzdDxBYnN0cmFjdFZpZXc+KGV4ZWMsIGFyZ3Nb
M10sICZ0b0Fic3RyYWN0Vmlldyk7Ci0JCQlsb25nIGRldGFpbEFyZyA9IGFyZ3NbNF0udG9JbnQz
MihleGVjKTsKLQkJCWxvbmcgc2NyZWVuWEFyZyA9IGFyZ3NbNV0udG9JbnQzMihleGVjKTsKLQkJ
CWxvbmcgc2NyZWVuWUFyZyA9IGFyZ3NbNl0udG9JbnQzMihleGVjKTsKLQkJCWxvbmcgY2xpZW50
WEFyZyA9IGFyZ3NbN10udG9JbnQzMihleGVjKTsKLQkJCWxvbmcgY2xpZW50WUFyZyA9IGFyZ3Nb
OF0udG9JbnQzMihleGVjKTsKLQkJCWJvb2wgY3RybEtleUFyZyA9IGFyZ3NbOV0udG9Cb29sZWFu
KGV4ZWMpOwotCQkJYm9vbCBhbHRLZXlBcmcgPSBhcmdzWzEwXS50b0Jvb2xlYW4oZXhlYyk7Ci0J
CQlib29sIHNoaWZ0S2V5QXJnID0gYXJnc1sxMV0udG9Cb29sZWFuKGV4ZWMpOwotCQkJYm9vbCBt
ZXRhS2V5QXJnID0gYXJnc1sxMl0udG9Cb29sZWFuKGV4ZWMpOwotCQkJdW5zaWduZWQgc2hvcnQg
YnV0dG9uQXJnID0gYXJnc1sxM10udG9VSW50MTYoZXhlYyk7CisJCQlsb25nIGRldGFpbEFyZyA9
IGFyZ3NbNF0tPnRvSW50MzIoZXhlYyk7CisJCQlsb25nIHNjcmVlblhBcmcgPSBhcmdzWzVdLT50
b0ludDMyKGV4ZWMpOworCQkJbG9uZyBzY3JlZW5ZQXJnID0gYXJnc1s2XS0+dG9JbnQzMihleGVj
KTsKKwkJCWxvbmcgY2xpZW50WEFyZyA9IGFyZ3NbN10tPnRvSW50MzIoZXhlYyk7CisJCQlsb25n
IGNsaWVudFlBcmcgPSBhcmdzWzhdLT50b0ludDMyKGV4ZWMpOworCQkJYm9vbCBjdHJsS2V5QXJn
ID0gYXJnc1s5XS0+dG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBhbHRLZXlBcmcgPSBhcmdzWzEw
XS0+dG9Cb29sZWFuKGV4ZWMpOworCQkJYm9vbCBzaGlmdEtleUFyZyA9IGFyZ3NbMTFdLT50b0Jv
b2xlYW4oZXhlYyk7CisJCQlib29sIG1ldGFLZXlBcmcgPSBhcmdzWzEyXS0+dG9Cb29sZWFuKGV4
ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgYnV0dG9uQXJnID0gYXJnc1sxM10tPnRvVUludDE2KGV4
ZWMpOwogCQkJTm9kZSByZWxhdGVkVGFyZ2V0QXJnID0gZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFy
Z3NbMTRdLCAmdG9Ob2RlKTsKIAogCQkJb2JqLmluaXRNb3VzZUV2ZW50KHR5cGVBcmcsIGNhbkJ1
YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgZGV0YWlsQXJnLCBzY3JlZW5YQXJnLCBz
Y3JlZW5ZQXJnLCBjbGllbnRYQXJnLCBjbGllbnRZQXJnLCBjdHJsS2V5QXJnLCBhbHRLZXlBcmcs
IHNoaWZ0S2V5QXJnLCBtZXRhS2V5QXJnLCBidXR0b25BcmcsIHJlbGF0ZWRUYXJnZXRBcmcpOwpJ
bmRleDoga2RvbS9ldmVudHMvTW91c2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tkb20vZXZlbnRzL01vdXNlRXZlbnQuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9ldmVudHMvTW91c2VFdmVudC5oCi0tLSBr
ZG9tL2V2ZW50cy9Nb3VzZUV2ZW50LmgJOSBKdWwgMjAwNSAwNjo1NDowMCAtMDAwMAkxLjEKKysr
IGtkb20vZXZlbnRzL01vdXNlRXZlbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBAIC02
NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rp
b24KIAkJS0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07
CiAKSW5kZXg6IGtkb20vZXZlbnRzL011dGF0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vZXZlbnRzL011dGF0aW9uRXZlbnQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9NdXRh
dGlvbkV2ZW50LmNwcAotLS0ga2RvbS9ldmVudHMvTXV0YXRpb25FdmVudC5jcHAJOSBKdWwgMjAw
NSAwNjo1NDowMSAtMDAwMAkxLjEKKysrIGtkb20vZXZlbnRzL011dGF0aW9uRXZlbnQuY3BwCTgg
QXVnIDIwMDUgMTk6NTU6MDAgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtKUzsKIAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJNdXRhdGlvbkV2ZW50IiwgTXV0YXRp
b25FdmVudFByb3RvLCBNdXRhdGlvbkV2ZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBNdXRhdGlvbkV2
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKk11dGF0aW9uRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTczLDcgKzczLDcg
QEAgVmFsdWUgTXV0YXRpb25FdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogCXJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotVmFsdWUgTXV0YXRpb25FdmVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpN
dXRhdGlvbkV2ZW50UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMo
TXV0YXRpb25FdmVudCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTgzLDEzICs4MywxMyBAQCBWYWx1
ZSBNdXRhdGlvbkV2ZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTCiAJCWNhc2UgTXV0YXRpb25FdmVu
dENvbnN0YW50czo6SW5pdE11dGF0aW9uRXZlbnQ6CiAJCXsKIAkJCURPTVN0cmluZyB0eXBlQXJn
ID0gdG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQlib29sIGNhbkJ1YmJsZUFyZyA9IGFy
Z3NbMV0udG9Cb29sZWFuKGV4ZWMpOwotCQkJYm9vbCBjYW5jZWxhYmxlQXJnID0gYXJnc1syXS50
b0Jvb2xlYW4oZXhlYyk7CisJCQlib29sIGNhbkJ1YmJsZUFyZyA9IGFyZ3NbMV0tPnRvQm9vbGVh
bihleGVjKTsKKwkJCWJvb2wgY2FuY2VsYWJsZUFyZyA9IGFyZ3NbMl0tPnRvQm9vbGVhbihleGVj
KTsKIAkJCU5vZGUgcmVsYXRlZE5vZGVBcmcgPSBlY21hX2Nhc3Q8Tm9kZT4oZXhlYywgYXJnc1sz
XSwgJnRvTm9kZSk7CiAJCQlET01TdHJpbmcgcHJldlZhbHVlQXJnID0gdG9ET01TdHJpbmcoZXhl
YywgYXJnc1s0XSk7CiAJCQlET01TdHJpbmcgbmV3VmFsdWVBcmcgPSB0b0RPTVN0cmluZyhleGVj
LCBhcmdzWzVdKTsKIAkJCURPTVN0cmluZyBhdHRyTmFtZUFyZyA9IHRvRE9NU3RyaW5nKGV4ZWMs
IGFyZ3NbNl0pOwotCQkJdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyA9IGFyZ3NbN10udG9V
SW50MTYoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnID0gYXJnc1s3XS0+
dG9VSW50MTYoZXhlYyk7CiAKIAkJCW9iai5pbml0TXV0YXRpb25FdmVudCh0eXBlQXJnLCBjYW5C
dWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHJlbGF0ZWROb2RlQXJnLCBwcmV2VmFsdWVBcmcsIG5l
d1ZhbHVlQXJnLCBhdHRyTmFtZUFyZywgYXR0ckNoYW5nZUFyZyk7CiAJCQlyZXR1cm4gVW5kZWZp
bmVkKCk7CkluZGV4OiBrZG9tL2V2ZW50cy9NdXRhdGlvbkV2ZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvTXV0YXRpb25FdmVudC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9NdXRh
dGlvbkV2ZW50LmgKLS0tIGtkb20vZXZlbnRzL011dGF0aW9uRXZlbnQuaAk5IEp1bCAyMDA1IDA2
OjU0OjAxIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvTXV0YXRpb25FdmVudC5oCTggQXVnIDIw
MDUgMTk6NTU6MDAgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJs
aWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ldmVudHMvVUlFdmVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9ldmVudHMvVUlF
dmVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
ZXZlbnRzL1VJRXZlbnQuY3BwCi0tLSBrZG9tL2V2ZW50cy9VSUV2ZW50LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjAxIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvVUlFdmVudC5jcHAJOCBBdWcgMjAw
NSAxOTo1NTowMCAtMDAwMApAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwog
CiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIlVJRXZlbnQiLCBVSUV2ZW50UHJvdG8sIFVJRXZl
bnRQcm90b0Z1bmMpCiAKLVZhbHVlIFVJRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqVUlFdmVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NB
RkUKIApAQCAtNjUsNyArNjUsNyBAQCBWYWx1ZSBVSUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBVSUV2ZW50UHJvdG9GdW5j
OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQorVmFsdWVJbXAgKlVJRXZlbnRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hF
Q0tfVEhJUyhVSUV2ZW50KQogCUtET01fRU5URVJfU0FGRQpAQCAtNzUsMTAgKzc1LDEwIEBAIFZh
bHVlIFVJRXZlbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICoKIAkJY2FzZSBVSUV2ZW50Q29u
c3RhbnRzOjpJbml0VUlFdmVudDoKIAkJewogCQkJRE9NU3RyaW5nIHR5cGVBcmcgPSB0b0RPTVN0
cmluZyhleGVjLCBhcmdzWzBdKTsKLQkJCWJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS50b0Jv
b2xlYW4oZXhlYyk7Ci0JCQlib29sIGNhbmNlbGFibGVBcmcgPSBhcmdzWzJdLnRvQm9vbGVhbihl
eGVjKTsKKwkJCWJvb2wgY2FuQnViYmxlQXJnID0gYXJnc1sxXS0+dG9Cb29sZWFuKGV4ZWMpOwor
CQkJYm9vbCBjYW5jZWxhYmxlQXJnID0gYXJnc1syXS0+dG9Cb29sZWFuKGV4ZWMpOwogCQkJQWJz
dHJhY3RWaWV3IHZpZXdBcmcgPSBlY21hX2Nhc3Q8QWJzdHJhY3RWaWV3PihleGVjLCBhcmdzWzNd
LCAmdG9BYnN0cmFjdFZpZXcpOwotCQkJbG9uZyBkZXRhaWxBcmcgPSBhcmdzWzRdLnRvSW50MzIo
ZXhlYyk7CisJCQlsb25nIGRldGFpbEFyZyA9IGFyZ3NbNF0tPnRvSW50MzIoZXhlYyk7CiAJCQlv
YmouaW5pdFVJRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3
QXJnLCBkZXRhaWxBcmcpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrZG9t
L2V2ZW50cy9VSUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva2RvbS9ldmVudHMvVUlFdmVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrZG9tL2V2ZW50cy9VSUV2ZW50LmgKLS0tIGtkb20vZXZlbnRzL1VJRXZlbnQu
aAk5IEp1bCAyMDA1IDA2OjU0OjAxIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvVUlFdmVudC5o
CTggQXVnIDIwMDUgMTk6NTU6MDAgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtE
T00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9ldmVudHMvaW1w
bC9FdmVudExpc3RlbmVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9ldmVudHMvaW1wbC9FdmVudExpc3RlbmVySW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL2ltcGwvRXZlbnRM
aXN0ZW5lckltcGwuY3BwCi0tLSBrZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlzdGVuZXJJbXBsLmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjAzIC0wMDAwCTEuMQorKysga2RvbS9ldmVudHMvaW1wbC9FdmVu
dExpc3RlbmVySW1wbC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtMzMsMTQgKzMz
LDE0IEBAIEV2ZW50TGlzdGVuZXJJbXBsOjpFdmVudExpc3RlbmVySW1wbCgpIDoKIAltX2RvYyA9
IDA7CiAJbV9lY21hRXZlbnRMaXN0ZW5lciA9IGZhbHNlOwogCi0JbV9saXN0ZW5lciA9IEtKUzo6
T2JqZWN0KCk7Ci0JbV9jb21wYXJlTGlzdGVuZXIgPSBLSlM6OlZhbHVlKCk7CisJbV9saXN0ZW5l
ciA9IE5VTEw7CisJbV9jb21wYXJlTGlzdGVuZXIgPSBOVUxMOwogfQogCiBFdmVudExpc3RlbmVy
SW1wbDo6fkV2ZW50TGlzdGVuZXJJbXBsKCkKIHsKIAlpZihtX2RvYyAmJiBtX2RvYy0+ZWNtYUVu
Z2luZSgpICYmIG1fZWNtYUV2ZW50TGlzdGVuZXIpCi0JCW1fZG9jLT5lY21hRW5naW5lKCktPnJl
bW92ZUV2ZW50TGlzdGVuZXIoc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4obV9jb21wYXJl
TGlzdGVuZXIuaW1wKCkpKTsKKwkJbV9kb2MtPmVjbWFFbmdpbmUoKS0+cmVtb3ZlRXZlbnRMaXN0
ZW5lcihzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPihtX2NvbXBhcmVMaXN0ZW5lcikpOwog
fQogCiB2b2lkIEV2ZW50TGlzdGVuZXJJbXBsOjpoYW5kbGVFdmVudChFdmVudEltcGwgKmV2dCkK
QEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBFdmVudExpc3RlbmVySW1wbDo6aGFuZGxlRXZlbnQoRXZl
bgogCiAJS0pTOjpJbnRlcnByZXRlcjo6bG9jaygpOwogCUVjbWEgKmVjbWFFbmdpbmUgPSBtX2Rv
Yy0+ZWNtYUVuZ2luZSgpOwotCWlmKGVjbWFFbmdpbmUgJiYgbV9saXN0ZW5lci5pbXBsZW1lbnRz
Q2FsbCgpKQorCWlmKGVjbWFFbmdpbmUgJiYgbV9saXN0ZW5lci0+aW1wbGVtZW50c0NhbGwoKSkK
IAl7CiAJCVNjcmlwdEludGVycHJldGVyICppbnRlcnByZXRlciA9IGVjbWFFbmdpbmUtPmludGVy
cHJldGVyKCk7CiAJCUtKUzo6RXhlY1N0YXRlICpleGVjID0gZWNtYUVuZ2luZS0+Z2xvYmFsRXhl
YygpOwpAQCAtNjcsOCArNjcsOCBAQCB2b2lkIEV2ZW50TGlzdGVuZXJJbXBsOjpoYW5kbGVFdmVu
dChFdmVuCiAJCWludGVycHJldGVyLT5zZXRDdXJyZW50RXZlbnQoZXZ0KTsKIAogCQkvLyBDYWxs
IGl0IQotCQlLSlM6Ok9iamVjdCB0aGlzT2JqID0gS0pTOjpPYmplY3Q6OmR5bmFtaWNDYXN0KHNh
ZmVfY2FjaGU8RXZlbnRUYXJnZXQ+KGV4ZWMsIGV2dE9iai5jdXJyZW50VGFyZ2V0KCkpKTsKLQkJ
S0pTOjpWYWx1ZSByZXRWYWwgPSBtX2xpc3RlbmVyLmNhbGwoZXhlYywgdGhpc09iaiwgYXJncyk7
CisJCUtKUzo6T2JqZWN0SW1wICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAg
Kj4oc2FmZV9jYWNoZTxFdmVudFRhcmdldD4oZXhlYywgZXZ0T2JqLmN1cnJlbnRUYXJnZXQoKSkp
OworCQlLSlM6OlZhbHVlSW1wICpyZXRWYWwgPSBtX2xpc3RlbmVyLT5jYWxsQXNGdW5jdGlvbihl
eGVjLCB0aGlzT2JqLCBhcmdzKTsKIAogCQkvLyBSZXNldCBjdXJyZW50IGV2ZW50IGFmdGVyIHBy
b2Nlc3NpbmcKIAkJaW50ZXJwcmV0ZXItPnNldEN1cnJlbnRFdmVudCgwKTsKQEAgLTk0LDE4ICs5
NCwxOCBAQCBET01TdHJpbmcgRXZlbnRMaXN0ZW5lckltcGw6OmludGVybmFsVHlwCiAJcmV0dXJu
IG1faW50ZXJuYWxUeXBlOwogfQogCi1LSlM6OlZhbHVlIEV2ZW50TGlzdGVuZXJJbXBsOjplY21h
TGlzdGVuZXIoKSBjb25zdAorS0pTOjpWYWx1ZUltcCAqRXZlbnRMaXN0ZW5lckltcGw6OmVjbWFM
aXN0ZW5lcigpIGNvbnN0CiB7CiAJaWYoIW1fZWNtYUV2ZW50TGlzdGVuZXIpCi0JCXJldHVybiBL
SlM6OlZhbHVlKCk7CisJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIG1fY29tcGFyZUxpc3RlbmVy
OwogfQogCi12b2lkIEV2ZW50TGlzdGVuZXJJbXBsOjppbml0TGlzdGVuZXIoRG9jdW1lbnRJbXBs
ICpkb2MsIGJvb2wgZWNtYUV2ZW50TGlzdGVuZXIsIEtKUzo6T2JqZWN0IGxpc3RlbmVyLCBLSlM6
OlZhbHVlIGNvbXBhcmVMaXN0ZW5lciwgY29uc3QgRE9NU3RyaW5nICZpbnRlcm5hbFR5cGUpCit2
b2lkIEV2ZW50TGlzdGVuZXJJbXBsOjppbml0TGlzdGVuZXIoRG9jdW1lbnRJbXBsICpkb2MsIGJv
b2wgZWNtYUV2ZW50TGlzdGVuZXIsIEtKUzo6T2JqZWN0SW1wICpsaXN0ZW5lciwgS0pTOjpWYWx1
ZUltcCAqY29tcGFyZUxpc3RlbmVyLCBjb25zdCBET01TdHJpbmcgJmludGVybmFsVHlwZSkKIHsK
LQlpZighbGlzdGVuZXIuaXNWYWxpZCgpIHx8ICFsaXN0ZW5lci5pbXBsZW1lbnRzQ2FsbCgpKQot
CQlrZEVycm9yKCkgPDwgIkVjbWFTY3JpcHQgbGlzdGVuZXIgb2JqZWN0ICIgPDwgbGlzdGVuZXIu
aW1wKCkgPDwgIiBpcyBub3QgdmFsaWQgb3IgZG9lc24ndCBpbXBsZW1lbnQgYSBjYWxsISIgPDwg
ZW5kbDsKKwlpZighbGlzdGVuZXIgfHwgIWxpc3RlbmVyLT5pbXBsZW1lbnRzQ2FsbCgpKQorCQlr
ZEVycm9yKCkgPDwgIkVjbWFTY3JpcHQgbGlzdGVuZXIgb2JqZWN0ICIgPDwgbGlzdGVuZXIgPDwg
IiBpcyBub3QgdmFsaWQgb3IgZG9lc24ndCBpbXBsZW1lbnQgYSBjYWxsISIgPDwgZW5kbDsKIAog
CW1fZG9jID0gZG9jOwogCW1fbGlzdGVuZXIgPSBsaXN0ZW5lcjsKSW5kZXg6IGtkb20vZXZlbnRz
L2ltcGwvRXZlbnRMaXN0ZW5lckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
U1ZHU3VwcG9ydC9rZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlzdGVuZXJJbXBsLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vZXZlbnRzL2ltcGwvRXZlbnRM
aXN0ZW5lckltcGwuaAotLS0ga2RvbS9ldmVudHMvaW1wbC9FdmVudExpc3RlbmVySW1wbC5oCTkg
SnVsIDIwMDUgMDY6NTQ6MDMgLTAwMDAJMS4xCisrKyBrZG9tL2V2ZW50cy9pbXBsL0V2ZW50TGlz
dGVuZXJJbXBsLmgJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtMzgsMTAgKzM4LDEwIEBA
IG5hbWVzcGFjZSBLRE9NCiAJCXZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudEltcGwgKmV2
dCk7CiAJCQogCQlET01TdHJpbmcgaW50ZXJuYWxUeXBlKCkgY29uc3Q7Ci0JCUtKUzo6VmFsdWUg
ZWNtYUxpc3RlbmVyKCkgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmVjbWFMaXN0ZW5lcigpIGNv
bnN0OwogCiAJCS8vIEludGVybmFsCi0JCXZvaWQgaW5pdExpc3RlbmVyKERvY3VtZW50SW1wbCAq
ZG9jLCBib29sIGVjbWFFdmVudExpc3RlbmVyLCBLSlM6Ok9iamVjdCBsaXN0ZW5lciwgS0pTOjpW
YWx1ZSBjb21wYXJlTGlzdGVuZXIsIGNvbnN0IERPTVN0cmluZyAmaW50ZXJuYWxUeXBlKTsKKwkJ
dm9pZCBpbml0TGlzdGVuZXIoRG9jdW1lbnRJbXBsICpkb2MsIGJvb2wgZWNtYUV2ZW50TGlzdGVu
ZXIsIEtKUzo6T2JqZWN0SW1wICpsaXN0ZW5lciwgS0pTOjpWYWx1ZUltcCAqY29tcGFyZUxpc3Rl
bmVyLCBjb25zdCBET01TdHJpbmcgJmludGVybmFsVHlwZSk7CiAKIAlwcml2YXRlOgogCQlEb2N1
bWVudEltcGwgKm1fZG9jOwpAQCAtNDksOCArNDksOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlib29s
IG1fZWNtYUV2ZW50TGlzdGVuZXI7CiAJCURPTVN0cmluZyBtX2ludGVybmFsVHlwZTsKIAotCQlL
SlM6Ok9iamVjdCBtX2xpc3RlbmVyOwotCQlLSlM6OlZhbHVlIG1fY29tcGFyZUxpc3RlbmVyOwor
CQlLSlM6Ok9iamVjdEltcCAqbV9saXN0ZW5lcjsKKwkJS0pTOjpWYWx1ZUltcCAqbV9jb21wYXJl
TGlzdGVuZXI7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vaW1wbC9ET01Vc2VyRGF0YUltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2ltcGwvRE9NVXNl
ckRhdGFJbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtk
b20vaW1wbC9ET01Vc2VyRGF0YUltcGwuaAotLS0ga2RvbS9pbXBsL0RPTVVzZXJEYXRhSW1wbC5o
CTkgSnVsIDIwMDUgMDY6NTQ6MDYgLTAwMDAJMS4xCisrKyBrZG9tL2ltcGwvRE9NVXNlckRhdGFJ
bXBsLmgJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtNzQsMjAgKzc0LDIwIEBAIG5hbWVz
cGFjZSBLRE9NCiAKIAkJRE9NVXNlckRhdGFJbXBsICppbXBsKCkgY29uc3QgeyByZXR1cm4gbV9p
bXBsOyB9CiAKLQkJdmlydHVhbCBLSlM6OlZhbHVlIGdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgS0pTOjpJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CisJCXZpcnR1YWwgS0pT
OjpWYWx1ZUltcCAqZ2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBjb25zdCBLSlM6OklkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKIAkJewogCQkJa2REZWJ1ZygyNjAwNCkgPDwgIkRPTUJy
aWRnZTo6Z2V0KCksICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIE5hbWU6ICIgPDwg
Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSA8PCAiIE9iamVjdDogIiA8PCB0aGlzLT5tX2ltcGwgPDwg
ZW5kbDsKIAogCQkJLy8gTG9vayBmb3Igc3RhbmRhcmQgcHJvcGVydGllcyAoZS5nLiB0aG9zZSBp
biB0aGUgaGFzaHRhYmxlcykKIAkJCURPTVVzZXJEYXRhIG9iaihtX2ltcGwpOwotCQkJS0pTOjpW
YWx1ZSB2YWwgPSBvYmouZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcyk7CisJCQlLSlM6OlZh
bHVlSW1wICp2YWwgPSBvYmouZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcyk7CiAKLQkJCWlm
KHZhbC50eXBlKCkgIT0gS0pTOjpVbmRlZmluZWRUeXBlKQorCQkJaWYodmFsLT50eXBlKCkgIT0g
S0pTOjpVbmRlZmluZWRUeXBlKQogCQkJCXJldHVybiB2YWw7CiAKIAkJCS8vIE5vdCBmb3VuZCAt
PiBmb3J3YXJkIHRvIE9iamVjdEltcC4KIAkJCXZhbCA9IEtKUzo6T2JqZWN0SW1wOjpnZXQoZXhl
YywgcHJvcGVydHlOYW1lKTsKLQkJCWlmKHZhbC50eXBlKCkgPT0gS0pTOjpVbmRlZmluZWRUeXBl
KQorCQkJaWYodmFsLT50eXBlKCkgPT0gS0pTOjpVbmRlZmluZWRUeXBlKQogCQkJCWtkRGVidWco
MjYwMDQpIDw8ICJXQVJOSU5HOiAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgIiBub3Qg
Zm91bmQgaW4uLi4gTmFtZTogIiA8PCBjbGFzc0luZm8oKS0+Y2xhc3NOYW1lIDw8ICIgT2JqZWN0
OiAiIDw8IG1faW1wbCA8PCAiIG9uIGxpbmUgOiAiIDw8IGV4ZWMtPmNvbnRleHQoKS5jdXJTdG10
Rmlyc3RMaW5lKCkgPDwgZW5kbDsKIAogCQkJcmV0dXJuIHZhbDsKQEAgLTEwNSw3ICsxMDUsNyBA
QCBuYW1lc3BhY2UgS0RPTQogCQl9CiAKIAkJdmlydHVhbCBjb25zdCBLSlM6OkNsYXNzSW5mbyAq
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJkRPTVVzZXJEYXRhOjpzX2NsYXNzSW5mbzsgfQot
CQl2aXJ0dWFsIEtKUzo6VmFsdWUgdG9QcmltaXRpdmUoS0pTOjpFeGVjU3RhdGUgKiwgS0pTOjpU
eXBlID0gS0pTOjpVbmRlZmluZWRUeXBlKSBjb25zdAorCQl2aXJ0dWFsIEtKUzo6VmFsdWVJbXAg
KnRvUHJpbWl0aXZlKEtKUzo6RXhlY1N0YXRlICosIEtKUzo6VHlwZSA9IEtKUzo6VW5kZWZpbmVk
VHlwZSkgY29uc3QKIAkJewogCQkJa2REZWJ1ZygpIDw8IGtfZnVuY2luZm8gPDwgZW5kbDsKIAkJ
CWlmKG1faW1wbCAmJiAoKigoYm9vbCAqKShtX2ltcGwtPnVzZXJEYXRhKCkpKSkpCkluZGV4OiBr
ZG9tL2xzL0xTRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rZG9tL2xzL0xTRXhjZXB0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU0V4Y2VwdGlvbi5jcHAKLS0tIGtkb20vbHMvTFNF
eGNlcHRpb24uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6MTQgLTAwMDAJMS4xCisrKyBrZG9tL2xzL0xT
RXhjZXB0aW9uLmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBAIC0zNCw3ICszNCw3IEBA
IHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBMU0V4Y2VwdGlvbjo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkxT
RXhjZXB0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtkb20vbHMvTFNFeGNlcHRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTRXhjZXB0aW9u
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vbHMvTFNF
eGNlcHRpb24uaAotLS0ga2RvbS9scy9MU0V4Y2VwdGlvbi5oCTkgSnVsIDIwMDUgMDY6NTQ6MTQg
LTAwMDAJMS4xCisrKyBrZG9tL2xzL0xTRXhjZXB0aW9uLmgJOCBBdWcgMjAwNSAxOTo1NTowMCAt
MDAwMApAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNj
cmlwdCBzZWN0aW9uCiAJCUtET01fR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrZG9tL2xzL0xTSW5wdXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vbHMvTFNJbnB1dC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vbHMvTFNJbnB1dC5jcHAKLS0tIGtk
b20vbHMvTFNJbnB1dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDoxNCAtMDAwMAkxLjEKKysrIGtkb20v
bHMvTFNJbnB1dC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtNDgsNyArNDgsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8KIAotVmFsdWUgTFNJbnB1dDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpM
U0lucHV0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogI2lmbmRlZiBBUFBMRV9DT01QSUxFX0hBQ0sKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTgw
LDcgKzgwLDcgQEAgVmFsdWUgTFNJbnB1dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdAogCXJl
dHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBMU0lucHV0OjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQg
TFNJbnB1dDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFs
dWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20vbHMv
TFNJbnB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
bHMvTFNJbnB1dC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
ZG9tL2xzL0xTSW5wdXQuaAotLS0ga2RvbS9scy9MU0lucHV0LmgJOSBKdWwgMjAwNSAwNjo1NDox
NCAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNJbnB1dC5oCTggQXVnIDIwMDUgMTk6NTU6MDAgLTAw
MDAKQEAgLTE1OSw4ICsxNTksOCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX1BVVAogCQlLRE9N
X0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIp
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9
OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChMU0lucHV0KQpJbmRleDoga2RvbS9scy9MU091dHB1dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU091
dHB1dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
bHMvTFNPdXRwdXQuY3BwCi0tLSBrZG9tL2xzL0xTT3V0cHV0LmNwcAk5IEp1bCAyMDA1IDA2OjU0
OjE0IC0wMDAwCTEuMQorKysga2RvbS9scy9MU091dHB1dC5jcHAJOCBBdWcgMjAwNSAxOTo1NTow
MCAtMDAwMApAQCAtNDAsNyArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogQGVuZAogKi8K
IAotVmFsdWUgTFNPdXRwdXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqTFNPdXRwdXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTU4
LDcgKzU4LDcgQEAgVmFsdWUgTFNPdXRwdXQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJl
dHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBMU091dHB1dDo6cHV0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lk
IExTT3V0cHV0OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBW
YWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS9s
cy9MU091dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vbHMvTFNPdXRwdXQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga2RvbS9scy9MU091dHB1dC5oCi0tLSBrZG9tL2xzL0xTT3V0cHV0LmgJOSBKdWwgMjAwNSAw
Njo1NDoxNCAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNPdXRwdXQuaAk4IEF1ZyAyMDA1IDE5OjU1
OjAwIC0wMDAwCkBAIC04NSw4ICs4NSw4IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fUFVUCiAJ
CUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQg
YXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIp
OwogCX07CiAKIAlLRE9NX0RFRklORV9DQVNUKExTT3V0cHV0KQpJbmRleDoga2RvbS9scy9MU1Bh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9s
cy9MU1BhcnNlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtkb20vbHMvTFNQYXJzZXIuY3BwCi0tLSBrZG9tL2xzL0xTUGFyc2VyLmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjE0IC0wMDAwCTEuMQorKysga2RvbS9scy9MU1BhcnNlci5jcHAJOCBBdWcgMjAwNSAx
OTo1NTowMCAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBL
RE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkxTUGFyc2VyIiwgTFNQYXJzZXJQcm90bywgTFNQYXJz
ZXJQcm90b0Z1bmMpCiAKLVZhbHVlIExTUGFyc2VyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkxTUGFyc2VyOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkBAIC04MCw3ICs4MCw3IEBAIFZhbHVlIExTUGFyc2VyOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgTFNQYXJzZXI6OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICYgLyog
dmFsdWUgKi8sIGludCkKK3ZvaWQgTFNQYXJzZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICogLyogdmFsdWUgKi8sIGludCkKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApAQCAtOTUsNyArOTUsNyBAQCB2b2lkIExTUGFyc2VyOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0CiAJS0RPTV9MRUFWRV9TQUZFKERPTUV4Y2VwdGlvbikKIH0KIAotVmFs
dWUgTFNQYXJzZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqTFNQYXJzZXJQcm90b0Z1bmM6OmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhMU1BhcnNlcikKIAlLRE9NX0VOVEVSX1NBRkUK
QEAgLTExNyw3ICsxMTcsNyBAQCBWYWx1ZSBMU1BhcnNlclByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgCiAJCXsKIAkJCUxTSW5wdXQgaW5wdXQgPSBlY21hX2Nhc3Q8TFNJbnB1dD4oZXhlYywgYXJn
c1swXSwgJnRvTFNJbnB1dCk7CiAJCQlOb2RlIGNvbnRleHRBcmcgPSBlY21hX2Nhc3Q8Tm9kZT4o
ZXhlYywgYXJnc1sxXSwgJnRvTm9kZSk7Ci0JCQl1bnNpZ25lZCBzaG9ydCBhY3Rpb24gPSBhcmdz
WzJdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgYWN0aW9uID0gYXJnc1syXS0+
dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBvYmoucGFyc2VXaXRo
Q29udGV4dChpbnB1dCwgY29udGV4dEFyZywgYWN0aW9uKSk7CiAJCX0KIAkJY2FzZSBMU1BhcnNl
ckNvbnN0YW50czo6QWJvcnQ6CkluZGV4OiBrZG9tL2xzL0xTUGFyc2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU1BhcnNlci5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTUGFyc2VyLmgKLS0t
IGtkb20vbHMvTFNQYXJzZXIuaAk5IEp1bCAyMDA1IDA2OjU0OjE0IC0wMDAwCTEuMQorKysga2Rv
bS9scy9MU1BhcnNlci5oCTggQXVnIDIwMDUgMTk6NTU6MDAgLTAwMDAKQEAgLTE1Miw4ICsxNTIs
OCBAQCBuYW1lc3BhY2UgS0RPTQogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJ
bmRleDoga2RvbS9scy9MU1BhcnNlckZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU1BhcnNlckZpbHRlci5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vbHMvTFNQYXJzZXJGaWx0ZXIuY3Bw
Ci0tLSBrZG9tL2xzL0xTUGFyc2VyRmlsdGVyLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjE1IC0wMDAw
CTEuMQorKysga2RvbS9scy9MU1BhcnNlckZpbHRlci5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMCAt
MDAwMApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExF
TUVOVF9QUk9UT1RZUEUoIkxTUGFyc2VyRmlsdGVyIiwgTFNQYXJzZXJGaWx0ZXJQcm90bywgTFNQ
YXJzZXJGaWx0ZXJQcm90b0Z1bmMpCiAKLVZhbHVlIExTUGFyc2VyRmlsdGVyOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKkxTUGFy
c2VyRmlsdGVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02NCw3ICs2NCw3IEBAIFZhbHVlIExTUGFy
c2VyRmlsdGVyOjpnZXRWYWx1ZVByb3BlcnR5KEUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LVZhbHVlIExTUGFyc2VyRmlsdGVyUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKkxTUGFyc2VyRmlsdGVy
UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoTFNQYXJzZXJGaWx0
ZXIpCiAJS0RPTV9FTlRFUl9TQUZFCkluZGV4OiBrZG9tL2xzL0xTUGFyc2VyRmlsdGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU1BhcnNlckZp
bHRlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xz
L0xTUGFyc2VyRmlsdGVyLmgKLS0tIGtkb20vbHMvTFNQYXJzZXJGaWx0ZXIuaAk5IEp1bCAyMDA1
IDA2OjU0OjE1IC0wMDAwCTEuMQorKysga2RvbS9scy9MU1BhcnNlckZpbHRlci5oCTggQXVnIDIw
MDUgMTk6NTU6MDAgLTAwMDAKQEAgLTE0MSw3ICsxNDEsNyBAQCBuYW1lc3BhY2UgS0RPTQogCXB1
YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9scy9MU1Jl
c291cmNlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tkb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9scy9MU1Jlc291cmNlUmVzb2x2ZXIuY3BwCi0tLSBr
ZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5jcHAJOSBKdWwgMjAwNSAwNjo1NDoxNSAtMDAwMAkx
LjEKKysrIGtkb20vbHMvTFNSZXNvdXJjZVJlc29sdmVyLmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAw
IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtET01fSU1Q
TEVNRU5UX1BST1RPVFlQRSgiTFNSZXNvdXJjZVJlc29sdmVyIiwgTFNSZXNvdXJjZVJlc29sdmVy
UHJvdG8sIExTUmVzb3VyY2VSZXNvbHZlclByb3RvRnVuYykKIAotVmFsdWUgTFNSZXNvdXJjZVJl
c29sdmVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKkxTUmVzb3VyY2VSZXNvbHZlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTks
NyArNTksNyBAQCBWYWx1ZSBMU1Jlc291cmNlUmVzb2x2ZXI6OmdldFZhbHVlUHJvcGVyCiAJcmV0
dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBMU1Jlc291cmNlUmVzb2x2ZXJQcm90b0Z1bmM6
OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CitWYWx1ZUltcCAqTFNSZXNvdXJjZVJlc29sdmVyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsK
IAlLRE9NX0NIRUNLX1RISVMoTFNSZXNvdXJjZVJlc29sdmVyKQogCUtET01fRU5URVJfU0FGRQpJ
bmRleDoga2RvbS9scy9MU1Jlc291cmNlUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTUmVzb3VyY2VSZXNv
bHZlci5oCi0tLSBrZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5oCTkgSnVsIDIwMDUgMDY6NTQ6
MTUgLTAwMDAJMS4xCisrKyBrZG9tL2xzL0xTUmVzb3VyY2VSZXNvbHZlci5oCTggQXVnIDIwMDUg
MTk6NTU6MDAgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6
IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZh
bHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vbHMvTFNTZXJpYWxp
emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL2xz
L0xTU2VyaWFsaXplci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vbHMvTFNTZXJpYWxpemVyLmNwcAotLS0ga2RvbS9scy9MU1NlcmlhbGl6ZXIuY3Bw
CTkgSnVsIDIwMDUgMDY6NTQ6MTUgLTAwMDAJMS4xCisrKyBrZG9tL2xzL0xTU2VyaWFsaXplci5j
cHAJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIkxTU2VyaWFsaXplciIsIExT
U2VyaWFsaXplclByb3RvLCBMU1NlcmlhbGl6ZXJQcm90b0Z1bmMpCiAKLVZhbHVlIExTU2VyaWFs
aXplcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpMU1NlcmlhbGl6ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTczLDcgKzczLDcg
QEAgVmFsdWUgTFNTZXJpYWxpemVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQogCXJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotdm9pZCBMU1NlcmlhbGl6ZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBMU1Nl
cmlhbGl6ZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZh
bHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC05MSw3ICs5MSw3
IEBAIHZvaWQgTFNTZXJpYWxpemVyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWMKIAlLRE9NX0xFQVZF
X1NBRkUoTFNFeGNlcHRpb24pCiB9CiAKLVZhbHVlIExTU2VyaWFsaXplclByb3RvRnVuYzo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1Zh
bHVlSW1wICpMU1NlcmlhbGl6ZXJQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hF
Q0tfVEhJUyhMU1NlcmlhbGl6ZXIpCiAJS0RPTV9FTlRFUl9TQUZFCkluZGV4OiBrZG9tL2xzL0xT
U2VyaWFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vbHMvTFNTZXJpYWxpemVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtkb20vbHMvTFNTZXJpYWxpemVyLmgKLS0tIGtkb20vbHMvTFNTZXJpYWxpemVyLmgJ
OSBKdWwgMjAwNSAwNjo1NDoxNSAtMDAwMAkxLjEKKysrIGtkb20vbHMvTFNTZXJpYWxpemVyLmgJ
OCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtMTM5LDggKzEzOSw4IEBAIG5hbWVzcGFjZSBL
RE9NCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJ
dm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZv
aWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6
OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrZG9tL2xzL0xT
U2VyaWFsaXplckZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS9scy9MU1NlcmlhbGl6ZXJGaWx0ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL2xzL0xTU2VyaWFsaXplckZpbHRlci5jcHAKLS0t
IGtkb20vbHMvTFNTZXJpYWxpemVyRmlsdGVyLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjE1IC0wMDAw
CTEuMQorKysga2RvbS9scy9MU1NlcmlhbGl6ZXJGaWx0ZXIuY3BwCTggQXVnIDIwMDUgMTk6NTU6
MDAgLTAwMDAKQEAgLTM4LDcgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICov
CiAKLVZhbHVlIExTU2VyaWFsaXplckZpbHRlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpMU1NlcmlhbGl6ZXJGaWx0ZXI6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RP
TV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtkb20vbHMvTFNTZXJpYWxpemVyRmlsdGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9scy9MU1NlcmlhbGl6ZXJG
aWx0ZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS9s
cy9MU1NlcmlhbGl6ZXJGaWx0ZXIuaAotLS0ga2RvbS9scy9MU1NlcmlhbGl6ZXJGaWx0ZXIuaAk5
IEp1bCAyMDA1IDA2OjU0OjE1IC0wMDAwCTEuMQorKysga2RvbS9scy9MU1NlcmlhbGl6ZXJGaWx0
ZXIuaAk4IEF1ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBAIC03Miw3ICs3Miw3IEBAIG5hbWVzcGFj
ZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1Nf
R0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBr
ZG9tL3JhbmdlL0RvY3VtZW50UmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5jcHAK
LS0tIGtkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5jcHAJOSBKdWwgMjAwNSAwNjo1NDoyMCAtMDAw
MAkxLjEKKysrIGtkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5jcHAJOCBBdWcgMjAwNSAxOTo1NTow
MCAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0RPTTsKIAogS0RPTV9J
TVBMRU1FTlRfUFJPVE9UWVBFKCJEb2N1bWVudFJhbmdlIiwgRG9jdW1lbnRSYW5nZVByb3RvLCBE
b2N1bWVudFJhbmdlUHJvdG9GdW5jKQogCi1LSlM6OlZhbHVlIERvY3VtZW50UmFuZ2U6OmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK0tKUzo6
VmFsdWVJbXAgKkRvY3VtZW50UmFuZ2U6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTYsOSAr
NTYsOSBAQCBLSlM6OlZhbHVlIERvY3VtZW50UmFuZ2U6OmdldFZhbHVlUHJvcGVyCiAJcmV0dXJu
IEtKUzo6VW5kZWZpbmVkKCk7CiB9CiAKLUtKUzo6VmFsdWUgRG9jdW1lbnRSYW5nZVByb3RvRnVu
Yzo6Y2FsbChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgS0pTOjpPYmplY3QgJnRoaXNPYmosIGNvbnN0
IEtKUzo6TGlzdCAmKQorS0pTOjpWYWx1ZUltcCAqRG9jdW1lbnRSYW5nZVByb3RvRnVuYzo6Y2Fs
bEFzRnVuY3Rpb24oS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6T2JqZWN0SW1wICp0aGlzT2Jq
LCBjb25zdCBLSlM6Okxpc3QgJikKIHsKLQlEb2N1bWVudFJhbmdlIG9iaihjYXN0KGV4ZWMsIHN0
YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkpKSk7CisJRG9jdW1lbnRS
YW5nZSBvYmooY2FzdChleGVjLCB0aGlzT2JqKSk7CiAJUV9BU1NFUlQob2JqLmQgIT0gMCk7CiAK
IAlLRE9NX0VOVEVSX1NBRkUKSW5kZXg6IGtkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vcmFuZ2UvRG9jdW1lbnRS
YW5nZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3Jh
bmdlL0RvY3VtZW50UmFuZ2UuaAotLS0ga2RvbS9yYW5nZS9Eb2N1bWVudFJhbmdlLmgJOSBKdWwg
MjAwNSAwNjo1NDoyMCAtMDAwMAkxLjEKKysrIGtkb20vcmFuZ2UvRG9jdW1lbnRSYW5nZS5oCTgg
QXVnIDIwMDUgMTk6NTU6MDAgLTAwMDAKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIEtET00K
IAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vcmFu
Z2UvUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vcmFuZ2UvUmFuZ2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrZG9tL3JhbmdlL1JhbmdlLmNwcAotLS0ga2RvbS9yYW5nZS9SYW5nZS5jcHAJOSBKdWwg
MjAwNSAwNjo1NDoyMCAtMDAwMAkxLjEKKysrIGtkb20vcmFuZ2UvUmFuZ2UuY3BwCTggQXVnIDIw
MDUgMTk6NTU6MDAgLTAwMDAKQEAgLTczLDcgKzczLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtET007
CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiUmFuZ2UiLCBSYW5nZVByb3RvLCBSYW5nZVBy
b3RvRnVuYykKIAotVmFsdWUgUmFuZ2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqUmFuZ2U6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAg
LTk5LDcgKzk5LDcgQEAgVmFsdWUgUmFuZ2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlIAog
CXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgUmFuZ2VQcm90b0Z1bmM6OmNhbGwoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIEtKUzo6T2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KQorVmFsdWVJbXAgKlJhbmdlUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgS0pTOjpPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJ
S0RPTV9DSEVDS19USElTKFJhbmdlKQogCQpAQCAtMTEyLDE0ICsxMTIsMTQgQEAgVmFsdWUgUmFu
Z2VQcm90b0Z1bmM6OmNhbGwoS0pTOjpFeGVjU3RhdAogCQljYXNlIFJhbmdlQ29uc3RhbnRzOjpT
ZXRFbmQ6CiAJCXsKIAkJCU5vZGUgcGFyZW50ID0gZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFyZ3Nb
MF0sICZ0b05vZGUpOwotCQkJaW50IG9mZnNldCA9IGFyZ3NbMV0udG9JbnQzMihleGVjKTsKKwkJ
CWludCBvZmZzZXQgPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMpOwogCQkJb2JqLnNldEVuZChwYXJl
bnQsIG9mZnNldCk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBSYW5nZUNv
bnN0YW50czo6U2V0U3RhcnQ6CiAJCXsKIAkJCU5vZGUgcGFyZW50ID0gZWNtYV9jYXN0PE5vZGU+
KGV4ZWMsIGFyZ3NbMF0sICZ0b05vZGUpOwotCQkJaW50IG9mZnNldCA9IGFyZ3NbMV0udG9JbnQz
MihleGVjKTsKKwkJCWludCBvZmZzZXQgPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMpOwogCQkJb2Jq
LnNldFN0YXJ0KHBhcmVudCwgb2Zmc2V0KTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsKIAkJfQkK
QEAgLTE0OSw3ICsxNDksNyBAQCBWYWx1ZSBSYW5nZVByb3RvRnVuYzo6Y2FsbChLSlM6OkV4ZWNT
dGF0CiAJCX0KIAkJY2FzZSBSYW5nZUNvbnN0YW50czo6Q29sbGFwc2U6CiAJCXsKLQkJCW9iai5j
b2xsYXBzZSggYXJnc1swXS50b0Jvb2xlYW4oZXhlYykgKTsKKwkJCW9iai5jb2xsYXBzZSggYXJn
c1swXS0+dG9Cb29sZWFuKGV4ZWMpICk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KICAJ
CWNhc2UgUmFuZ2VDb25zdGFudHM6OlNlbGVjdE5vZGU6CkBAIC0xNjYsNyArMTY2LDcgQEAgVmFs
dWUgUmFuZ2VQcm90b0Z1bmM6OmNhbGwoS0pTOjpFeGVjU3RhdAogCQl9CiAgCQljYXNlIFJhbmdl
Q29uc3RhbnRzOjpDb21wYXJlQm91bmRhcnlQb2ludHM6CiAJCXsKLQkJCWludCBob3cgPSBhcmdz
WzBdLnRvSW50MzIoZXhlYyk7CisJCQlpbnQgaG93ID0gYXJnc1swXS0+dG9JbnQzMihleGVjKTsK
IAkJCVJhbmdlIHNvdXJjZVJhbmdlID0gZWNtYV9jYXN0PFJhbmdlPihleGVjLCBhcmdzWzFdLCAm
dG9SYW5nZSk7CiAJCQlyZXR1cm4gTnVtYmVyKG9iai5jb21wYXJlQm91bmRhcnlQb2ludHMoc3Rh
dGljX2Nhc3Q8Q29tcGFyZUhvdz4oaG93KSAsc291cmNlUmFuZ2UpKTsKIAkJfQpJbmRleDoga2Rv
bS9yYW5nZS9SYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tkb20vcmFuZ2UvUmFuZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS9yYW5nZS9SYW5nZS5oCi0tLSBrZG9tL3JhbmdlL1JhbmdlLmgJOSBKdWwgMjAw
NSAwNjo1NDoyMCAtMDAwMAkxLjEKKysrIGtkb20vcmFuZ2UvUmFuZ2UuaAk4IEF1ZyAyMDA1IDE5
OjU1OjAwIC0wMDAwCkBAIC00MjcsNyArNDI3LDcgQEAgbmFtZXNwYWNlIEtET00KIAkJS0RPTV9C
QVNFQ0xBU1NfR0VUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga2RvbS9yYW5nZS9SYW5nZUV4Y2VwdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS9yYW5nZS9SYW5nZUV4Y2Vw
dGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20v
cmFuZ2UvUmFuZ2VFeGNlcHRpb24uY3BwCi0tLSBrZG9tL3JhbmdlL1JhbmdlRXhjZXB0aW9uLmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjIwIC0wMDAwCTEuMQorKysga2RvbS9yYW5nZS9SYW5nZUV4Y2Vw
dGlvbi5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtMzUsNyArMzUsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS0RPTTsKIEBlbmQKICovCiAKLUtKUzo6VmFsdWUgUmFuZ2VFeGNlcHRpb246
OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorS0pT
OjpWYWx1ZUltcCAqUmFuZ2VFeGNlcHRpb246OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKiwgaW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkluZGV4OiBrZG9t
L3JhbmdlL1JhbmdlRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS9yYW5nZS9SYW5nZUV4Y2VwdGlvbi5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3JhbmdlL1JhbmdlRXhjZXB0aW9uLmgKLS0tIGtk
b20vcmFuZ2UvUmFuZ2VFeGNlcHRpb24uaAk5IEp1bCAyMDA1IDA2OjU0OjIwIC0wMDAwCTEuMQor
Kysga2RvbS9yYW5nZS9SYW5nZUV4Y2VwdGlvbi5oCTggQXVnIDIwMDUgMTk6NTU6MDAgLTAwMDAK
QEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIEtET00KIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQg
c2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9
OwogfQogCkluZGV4OiBrZG9tL3RyYXZlcnNhbC9Eb2N1bWVudFRyYXZlcnNhbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS90cmF2ZXJzYWwvRG9jdW1l
bnRUcmF2ZXJzYWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrZG9tL3RyYXZlcnNhbC9Eb2N1bWVudFRyYXZlcnNhbC5jcHAKLS0tIGtkb20vdHJhdmVyc2Fs
L0RvY3VtZW50VHJhdmVyc2FsLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjIzIC0wMDAwCTEuMQorKysg
a2RvbS90cmF2ZXJzYWwvRG9jdW1lbnRUcmF2ZXJzYWwuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDAg
LTAwMDAKQEAgLTQ3LDcgKzQ3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogS0RPTV9JTVBM
RU1FTlRfUFJPVE9UWVBFKCJEb2N1bWVudFRyYXZlcnNhbCIsIERvY3VtZW50VHJhdmVyc2FsUHJv
dG8sIERvY3VtZW50VHJhdmVyc2FsUHJvdG9GdW5jKQogCi1WYWx1ZSBEb2N1bWVudFRyYXZlcnNh
bDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpEb2N1bWVudFRyYXZlcnNhbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjEsOSArNjEs
OSBAQCBWYWx1ZSBEb2N1bWVudFRyYXZlcnNhbDo6Z2V0VmFsdWVQcm9wZXJ0CiAJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBEb2N1bWVudFRyYXZlcnNhbFByb3RvRnVuYzo6Y2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVl
SW1wICpEb2N1bWVudFRyYXZlcnNhbFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRl
ICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0JRG9jdW1l
bnRUcmF2ZXJzYWwgb2JqKGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4o
dGhpc09iai5pbXAoKSkpKTsKKwlEb2N1bWVudFRyYXZlcnNhbCBvYmooY2FzdChleGVjLCB0aGlz
T2JqKSk7CiAJUV9BU1NFUlQob2JqLmQgIT0gMCk7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcy
LDE1ICs3MiwxNSBAQCBWYWx1ZSBEb2N1bWVudFRyYXZlcnNhbFByb3RvRnVuYzo6Y2FsbChFCiAJ
CWNhc2UgRG9jdW1lbnRUcmF2ZXJzYWxDb25zdGFudHM6OkNyZWF0ZU5vZGVJdGVyYXRvcjoKIAkJ
ewogCQkJTm9kZSByb290ID0gZWNtYV9jYXN0PE5vZGU+KGV4ZWMsIGFyZ3NbMF0sICZ0b05vZGUp
OwotCQkJdW5zaWduZWQgc2hvcnQgd2hhdFRvU2hvdyA9IGFyZ3NbMV0udG9VSW50MTYoZXhlYyk7
Ci0JCQlib29sIGVudGl0eVJlZmVyZW5jZUV4cGFuc2lvbiA9IGFyZ3NbM10udG9Cb29sZWFuKGV4
ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgd2hhdFRvU2hvdyA9IGFyZ3NbMV0tPnRvVUludDE2KGV4
ZWMpOworCQkJYm9vbCBlbnRpdHlSZWZlcmVuY2VFeHBhbnNpb24gPSBhcmdzWzNdLT50b0Jvb2xl
YW4oZXhlYyk7CiAJCQlyZXR1cm4gb2JqLmNyZWF0ZU5vZGVJdGVyYXRvcihyb290LCB3aGF0VG9T
aG93LCBOb2RlRmlsdGVyOjpudWxsLCBlbnRpdHlSZWZlcmVuY2VFeHBhbnNpb24pLmNhY2hlKGV4
ZWMpOwogCQl9CiAJCWNhc2UgRG9jdW1lbnRUcmF2ZXJzYWxDb25zdGFudHM6OkNyZWF0ZVRyZWVX
YWxrZXI6CiAJCXsKIAkJCU5vZGUgcm9vdCA9IGVjbWFfY2FzdDxOb2RlPihleGVjLCBhcmdzWzBd
LCAmdG9Ob2RlKTsKLQkJCXVuc2lnbmVkIHNob3J0IHdoYXRUb1Nob3cgPSBhcmdzWzFdLnRvVUlu
dDE2KGV4ZWMpOwotCQkJYm9vbCBlbnRpdHlSZWZlcmVuY2VFeHBhbnNpb24gPSBhcmdzWzNdLnRv
Qm9vbGVhbihleGVjKTsKKwkJCXVuc2lnbmVkIHNob3J0IHdoYXRUb1Nob3cgPSBhcmdzWzFdLT50
b1VJbnQxNihleGVjKTsKKwkJCWJvb2wgZW50aXR5UmVmZXJlbmNlRXhwYW5zaW9uID0gYXJnc1sz
XS0+dG9Cb29sZWFuKGV4ZWMpOwogCQkJcmV0dXJuIG9iai5jcmVhdGVUcmVlV2Fsa2VyKHJvb3Qs
IHdoYXRUb1Nob3csIE5vZGVGaWx0ZXI6Om51bGwsIGVudGl0eVJlZmVyZW5jZUV4cGFuc2lvbiku
Y2FjaGUoZXhlYyk7CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtkb20vdHJhdmVyc2FsL0RvY3Vt
ZW50VHJhdmVyc2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a2RvbS90cmF2ZXJzYWwvRG9jdW1lbnRUcmF2ZXJzYWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS90cmF2ZXJzYWwvRG9jdW1lbnRUcmF2ZXJzYWwuaAot
LS0ga2RvbS90cmF2ZXJzYWwvRG9jdW1lbnRUcmF2ZXJzYWwuaAk5IEp1bCAyMDA1IDA2OjU0OjIz
IC0wMDAwCTEuMQorKysga2RvbS90cmF2ZXJzYWwvRG9jdW1lbnRUcmF2ZXJzYWwuaAk4IEF1ZyAy
MDA1IDE5OjU1OjAwIC0wMDAwCkBAIC0xMTMsNyArMTEzLDcgQEAgbmFtZXNwYWNlIEtET00KIAlw
dWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtkb20vdHJhdmVy
c2FsL05vZGVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1
cHBvcnQva2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmNwcAot
LS0ga2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjIzIC0w
MDAwCTEuMQorKysga2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmNwcAk4IEF1ZyAyMDA1IDE5
OjU1OjAwIC0wMDAwCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtE
T01fSU1QTEVNRU5UX1BST1RPVFlQRSgiTm9kZUl0ZXJhdG9yIiwgTm9kZUl0ZXJhdG9yUHJvdG8s
IE5vZGVJdGVyYXRvclByb3RvRnVuYykKIAotVmFsdWUgTm9kZUl0ZXJhdG9yOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKk5vZGVJ
dGVyYXRvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzIsNyArNzIsNyBAQCBWYWx1ZSBOb2RlSXRl
cmF0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfTsKIAot
VmFsdWUgTm9kZUl0ZXJhdG9yUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0
ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICYpCitWYWx1ZUltcCAqTm9kZUl0ZXJhdG9yUHJvdG9GdW5j
OjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29u
c3QgTGlzdCAmKQogewogCUtET01fQ0hFQ0tfVEhJUyhOb2RlSXRlcmF0b3IpCiAJS0RPTV9FTlRF
Ul9TQUZFCkBAIC04NSw3ICs4NSw3IEBAIFZhbHVlIE5vZGVJdGVyYXRvclByb3RvRnVuYzo6Y2Fs
bChFeGVjU3QKIAkJCXJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG9iai5wcmV2aW91c05vZGUoKSk7
CiAJCWNhc2UgTm9kZUl0ZXJhdG9yQ29uc3RhbnRzOjpEZXRhY2g6CiAJCQlvYmouZGV0YWNoKCk7
Ci0JCQlyZXR1cm4gVmFsdWUoKTsKKwkJCXJldHVybiBOVUxMOwogCQlkZWZhdWx0OgogCQkJa2RX
YXJuaW5nKCkgPDwgIlVuaGFuZGxlZCBmdW5jdGlvbiBpZCBpbiAiIDw8IGtfZnVuY2luZm8gPDwg
IiA6ICIgPDwgaWQgPDwgZW5kbDsKIAl9CkluZGV4OiBrZG9tL3RyYXZlcnNhbC9Ob2RlSXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3RyYXZl
cnNhbC9Ob2RlSXRlcmF0b3IuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga2RvbS90cmF2ZXJzYWwvTm9kZUl0ZXJhdG9yLmgKLS0tIGtkb20vdHJhdmVyc2FsL05v
ZGVJdGVyYXRvci5oCTkgSnVsIDIwMDUgMDY6NTQ6MjMgLTAwMDAJMS4xCisrKyBrZG9tL3RyYXZl
cnNhbC9Ob2RlSXRlcmF0b3IuaAk4IEF1ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBAIC02Myw3ICs2
Myw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJ
S0RPTV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtkb20vdHJhdmVyc2FsL1RyZWVXYWxrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vdHJhdmVyc2FsL1RyZWVXYWxrZXIuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3RyYXZlcnNhbC9UcmVlV2Fs
a2VyLmNwcAotLS0ga2RvbS90cmF2ZXJzYWwvVHJlZVdhbGtlci5jcHAJOSBKdWwgMjAwNSAwNjo1
NDoyMyAtMDAwMAkxLjEKKysrIGtkb20vdHJhdmVyc2FsL1RyZWVXYWxrZXIuY3BwCTggQXVnIDIw
MDUgMTk6NTU6MDAgLTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsK
IAogS0RPTV9JTVBMRU1FTlRfUFJPVE9UWVBFKCJUcmVlV2Fsa2VyIiwgVHJlZVdhbGtlclByb3Rv
LCBUcmVlV2Fsa2VyUHJvdG9GdW5jKQogCi1WYWx1ZSBUcmVlV2Fsa2VyOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlRyZWVXYWxr
ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTc4LDcgKzc4LDcgQEAgVmFsdWUgVHJlZVdhbGtlcjo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjUwogCXJldHVybiBVbmRlZmluZWQoKTsKIH07CiAKLXZvaWQg
VHJlZVdhbGtlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUgJiwgaW50KQordm9pZCBUcmVlV2Fsa2VyOjpwdXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqLCBpbnQpCiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBUcmVlV2Fsa2VyOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdAogCUtET01fTEVBVkVfU0FGRShET01FeGNlcHRpb24pCiB9CiAKLVZhbHVlIFRy
ZWVXYWxrZXJQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmos
IGNvbnN0IExpc3QgJikKK1ZhbHVlSW1wICpUcmVlV2Fsa2VyUHJvdG9GdW5jOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmKQog
ewogCUtET01fQ0hFQ0tfVEhJUyhUcmVlV2Fsa2VyKQogCUtET01fRU5URVJfU0FGRQpJbmRleDog
a2RvbS90cmF2ZXJzYWwvVHJlZVdhbGtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tkb20vdHJhdmVyc2FsL1RyZWVXYWxrZXIuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS90cmF2ZXJzYWwvVHJlZVdhbGtlci5oCi0t
LSBrZG9tL3RyYXZlcnNhbC9UcmVlV2Fsa2VyLmgJOSBKdWwgMjAwNSAwNjo1NDoyMyAtMDAwMAkx
LjEKKysrIGtkb20vdHJhdmVyc2FsL1RyZWVXYWxrZXIuaAk4IEF1ZyAyMDA1IDE5OjU1OjAwIC0w
MDAwCkBAIC03MCw4ICs3MCw4IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01f
UFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsJ
CQorCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsJCQog
CX07CiB9OwogCkluZGV4OiBrZG9tL3ZpZXdzL0Fic3RyYWN0Vmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS92aWV3cy9BYnN0cmFjdFZpZXcuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3ZpZXdzL0Fi
c3RyYWN0Vmlldy5jcHAKLS0tIGtkb20vdmlld3MvQWJzdHJhY3RWaWV3LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjI2IC0wMDAwCTEuMQorKysga2RvbS92aWV3cy9BYnN0cmFjdFZpZXcuY3BwCTggQXVn
IDIwMDUgMTk6NTU6MDAgLTAwMDAKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtK
UzsKIEBlbmQKICovCiAKLVZhbHVlIEFic3RyYWN0Vmlldzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpBYnN0cmFjdFZpZXc6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJLy8g
Tm8gZXhjZXB0aW9ucyB0aHJvd24gaGVyZSwgbm8gbmVlZCBmb3IgS0RPTV9FTlRFUi9MRUFWRV9T
QUZFCiAKSW5kZXg6IGtkb20vdmlld3MvQWJzdHJhY3RWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva2RvbS92aWV3cy9BYnN0cmFjdFZpZXcuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS92aWV3cy9BYnN0cmFjdFZp
ZXcuaAotLS0ga2RvbS92aWV3cy9BYnN0cmFjdFZpZXcuaAk5IEp1bCAyMDA1IDA2OjU0OjI2IC0w
MDAwCTEuMQorKysga2RvbS92aWV3cy9BYnN0cmFjdFZpZXcuaAk4IEF1ZyAyMDA1IDE5OjU1OjAw
IC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fQkFTRUNMQVNT
X0dFVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IAogCUtET01fREVGSU5FX0NBU1QoQWJzdHJhY3RWaWV3KQpJbmRleDoga2RvbS92aWV3cy9Eb2N1
bWVudFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20vdmlld3MvRG9jdW1lbnRWaWV3LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga2RvbS92aWV3cy9Eb2N1bWVudFZpZXcuY3BwCi0tLSBrZG9tL3ZpZXdzL0Rv
Y3VtZW50Vmlldy5jcHAJOSBKdWwgMjAwNSAwNjo1NDoyNiAtMDAwMAkxLjEKKysrIGtkb20vdmll
d3MvRG9jdW1lbnRWaWV3LmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBAIC0zOCw3ICsz
OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBEb2N1bWVudFZp
ZXc6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqRG9jdW1lbnRWaWV3OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCS8vIE5vIGV4Y2VwdGlvbnMgdGhyb3duIGhlcmUsIG5vIG5l
ZWQgZm9yIEtET01fRU5URVIvTEVBVkVfU0FGRQogCkluZGV4OiBrZG9tL3ZpZXdzL0RvY3VtZW50
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20vdmll
d3MvRG9jdW1lbnRWaWV3LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtkb20vdmlld3MvRG9jdW1lbnRWaWV3LmgKLS0tIGtkb20vdmlld3MvRG9jdW1lbnRWaWV3
LmgJOSBKdWwgMjAwNSAwNjo1NDoyNiAtMDAwMAkxLjEKKysrIGtkb20vdmlld3MvRG9jdW1lbnRW
aWV3LmgJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3Bh
Y2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNT
X0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a2RvbS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20veHBhdGgvWFBhdGhFdmFsdWF0b3Iu
Y3BwCi0tLSBrZG9tL3hwYXRoL1hQYXRoRXZhbHVhdG9yLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjI3
IC0wMDAwCTEuMQorKysga2RvbS94cGF0aC9YUGF0aEV2YWx1YXRvci5jcHAJOCBBdWcgMjAwNSAx
OTo1NTowMCAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBL
RE9NX0lNUExFTUVOVF9QUk9UT1RZUEUoIlhQYXRoRXZhbHVhdG9yIiwgWFBhdGhFdmFsdWF0b3JQ
cm90bywgWFBhdGhFdmFsdWF0b3JQcm90b0Z1bmMpCiAKLVZhbHVlIFhQYXRoRXZhbHVhdG9yOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlhQYXRoRXZhbHVhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02Nyw5ICs2Nyw5IEBAIFZh
bHVlIFhQYXRoRXZhbHVhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEUKIAlyZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLVZhbHVlIFhQYXRoRXZhbHVhdG9yUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlhQYXRo
RXZhbHVhdG9yUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVj
dEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLQlYUGF0aEV2YWx1YXRvciBvYmoo
Y2FzdChleGVjLCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkp
OworCVhQYXRoRXZhbHVhdG9yIG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlRX0FTU0VSVChv
YmouZCAhPSAwKTsKIAogCUtET01fRU5URVJfU0FGRQpAQCAtOTMsNyArOTMsNyBAQCBWYWx1ZSBY
UGF0aEV2YWx1YXRvclByb3RvRnVuYzo6Y2FsbChFeGVjCiAJCQlET01TdHJpbmcgZXhwcmVzc2lv
biA9IHRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMF0pOwogCQkJTm9kZSBjb250ZXh0Tm9kZSA9IGVj
bWFfY2FzdDxOb2RlPihleGVjLCBhcmdzWzFdLCAmdG9Ob2RlKTsKIAkJCVhQYXRoTlNSZXNvbHZl
ciByZXNlciA9IGVjbWFfY2FzdDxYUGF0aE5TUmVzb2x2ZXI+KGV4ZWMsIGFyZ3NbMl0sICZ0b1hQ
YXRoTlNSZXNvbHZlcik7Ci0JCQl1bnNpZ25lZCBpbnQgdHlwZSA9IGFyZ3NbM10udG9VSW50MTYo
ZXhlYyk7CisJCQl1bnNpZ25lZCBpbnQgdHlwZSA9IGFyZ3NbM10tPnRvVUludDE2KGV4ZWMpOwog
CQkJCiAJCQkvKiBET01PYmplY3QgaXMgYSBwb3NzaWJsZSBwb29saW5nIG1lY2hhbmlzbSB3aGlj
aCB3ZSBjdXJyZW50bHkgZG9uJ3QgdXNlIGFuZAogCQkJICogaGVuY2UgZG9uJ3Qga25vdyB3aGF0
IHR5cGUgb2YgY2xhc3MgaXQgc2hvdWxkIGJlLiAqLwpJbmRleDoga2RvbS94cGF0aC9YUGF0aEV2
YWx1YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20v
eHBhdGgvWFBhdGhFdmFsdWF0b3IuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga2RvbS94cGF0aC9YUGF0aEV2YWx1YXRvci5oCi0tLSBrZG9tL3hwYXRoL1hQYXRo
RXZhbHVhdG9yLmgJOSBKdWwgMjAwNSAwNjo1NDoyNyAtMDAwMAkxLjEKKysrIGtkb20veHBhdGgv
WFBhdGhFdmFsdWF0b3IuaAk4IEF1ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBAIC03MSw3ICs3MSw3
IEBAIG5hbWVzcGFjZSBLRE9NCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RP
TV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9uLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS94cGF0aC9YUGF0
aEV4Y2VwdGlvbi5jcHAKLS0tIGtkb20veHBhdGgvWFBhdGhFeGNlcHRpb24uY3BwCTkgSnVsIDIw
MDUgMDY6NTQ6MjcgLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9uLmNwcAk4
IEF1ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLSlM7CiBAZW5kCiAqLwogCi1WYWx1ZSBYUGF0aEV4Y2VwdGlvbjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlhQYXRoRXhjZXB0aW9u
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dp
dGNoKHRva2VuKQogCXsKSW5kZXg6IGtkb20veHBhdGgvWFBhdGhFeGNlcHRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hwYXRoL1hQYXRoRXhjZXB0
aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20veHBh
dGgvWFBhdGhFeGNlcHRpb24uaAotLS0ga2RvbS94cGF0aC9YUGF0aEV4Y2VwdGlvbi5oCTkgSnVs
IDIwMDUgMDY6NTQ6MjggLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoRXhjZXB0aW9uLmgJ
OCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgS0RP
TQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS94
cGF0aC9YUGF0aEV4cHJlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tkb20veHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS94cGF0aC9YUGF0aEV4cHJlc3Npb24uY3Bw
Ci0tLSBrZG9tL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5jcHAJOSBKdWwgMjAwNSAwNjo1NDoyOCAt
MDAwMAkxLjEKKysrIGtkb20veHBhdGgvWFBhdGhFeHByZXNzaW9uLmNwcAk4IEF1ZyAyMDA1IDE5
OjU1OjAwIC0wMDAwCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIEtE
T01fSU1QTEVNRU5UX1BST1RPVFlQRSgiWFBhdGhFeHByZXNzaW9uIiwgWFBhdGhFeHByZXNzaW9u
UHJvdG8sIFhQYXRoRXhwcmVzc2lvblByb3RvRnVuYykKIAotVmFsdWUgWFBhdGhFeHByZXNzaW9u
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKlhQYXRoRXhwcmVzc2lvbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjIsNyArNjIsNyBA
QCBWYWx1ZSBYUGF0aEV4cHJlc3Npb246OmdldFZhbHVlUHJvcGVydHkoCiAJcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1WYWx1ZSBYUGF0aEV4cHJlc3Npb25Qcm90b0Z1bmM6OmNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAq
WFBhdGhFeHByZXNzaW9uUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RI
SVMoWFBhdGhFeHByZXNzaW9uKQogCUtET01fRU5URVJfU0FGRQpAQCAtNzMsNyArNzMsNyBAQCBW
YWx1ZSBYUGF0aEV4cHJlc3Npb25Qcm90b0Z1bmM6OmNhbGwoRXhlCiAJCWNhc2UgWFBhdGhFeHBy
ZXNzaW9uQ29uc3RhbnRzOjpFdmFsdWF0ZToKIAkJewogCQkJTm9kZSBjb250ZXh0Tm9kZSA9ICBl
Y21hX2Nhc3Q8Tm9kZT4oZXhlYywgYXJnc1swXSwgJnRvTm9kZSk7Ci0JCQl1bnNpZ25lZCBpbnQg
dHlwZSA9IGFyZ3NbM10udG9VSW50MTYoZXhlYyk7CisJCQl1bnNpZ25lZCBpbnQgdHlwZSA9IGFy
Z3NbM10tPnRvVUludDE2KGV4ZWMpOwogCQkJLyogRE9NT2JqZWN0IGlzIGEgcG9zc2libGUgcG9v
bGluZyBtZWNoYW5pc20gd2hpY2ggd2UgY3VycmVudGx5IGRvbid0IHVzZSBhbmQKIAkJCSAqIGhl
bmNlIGRvbid0IGtub3cgd2hhdCB0eXBlIG9mIGNsYXNzIGl0IHNob3VsZCBiZS4gKi8KIAkJCS8v
Y29uc3QgRE9NT2JqZWN0IHJlc3VsdCA9IGVjbWFfY2FzdDxET01PYmplY3Q+KGV4ZWMsIGFyZ3Nb
NF0sICZ0b0RPTU9iamVjdCk7CkluZGV4OiBrZG9tL3hwYXRoL1hQYXRoRXhwcmVzc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tkb20veHBhdGgvWFBhdGhF
eHByZXNzaW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtk
b20veHBhdGgvWFBhdGhFeHByZXNzaW9uLmgKLS0tIGtkb20veHBhdGgvWFBhdGhFeHByZXNzaW9u
LmgJOSBKdWwgMjAwNSAwNjo1NDoyOCAtMDAwMAkxLjEKKysrIGtkb20veHBhdGgvWFBhdGhFeHBy
ZXNzaW9uLmgJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtNjMsNyArNjMsNyBAQCBuYW1l
c3BhY2UgS0RPTQogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNM
QVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogCiB9OwpJbmRl
eDoga2RvbS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tkb20veHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga2RvbS94cGF0aC9YUGF0aE5TUmVz
b2x2ZXIuY3BwCi0tLSBrZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5jcHAJOSBKdWwgMjAwNSAw
Njo1NDoyOCAtMDAwMAkxLjEKKysrIGtkb20veHBhdGgvWFBhdGhOU1Jlc29sdmVyLmNwcAk4IEF1
ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBL
SlM7CiAKIEtET01fSU1QTEVNRU5UX1BST1RPVFlQRSgiWFBhdGhOU1Jlc29sdmVyIiwgWFBhdGhO
U1Jlc29sdmVyUHJvdG8sIFhQYXRoTlNSZXNvbHZlclByb3RvRnVuYykKIAotS0pTOjpWYWx1ZSBY
UGF0aE5TUmVzb2x2ZXI6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKiwgaW50IHRv
a2VuKSBjb25zdAorS0pTOjpWYWx1ZUltcCAqWFBhdGhOU1Jlc29sdmVyOjpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4p
CiAJewpAQCAtNTcsNyArNTcsNyBAQCBLSlM6OlZhbHVlIFhQYXRoTlNSZXNvbHZlcjo6Z2V0VmFs
dWVQcm9wCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBYUGF0aE5TUmVzb2x2ZXJQ
cm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExp
c3QgJmFyZ3MpCitWYWx1ZUltcCAqWFBhdGhOU1Jlc29sdmVyUHJvdG9GdW5jOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKIHsKIAlLRE9NX0NIRUNLX1RISVMoWFBhdGhOU1Jlc29sdmVyKQogCUtET01fRU5URVJfU0FG
RQpJbmRleDoga2RvbS94cGF0aC9YUGF0aE5TUmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3hwYXRoL1hQYXRoTlNS
ZXNvbHZlci5oCi0tLSBrZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCTkgSnVsIDIwMDUgMDY6
NTQ6MjggLTAwMDAJMS4xCisrKyBrZG9tL3hwYXRoL1hQYXRoTlNSZXNvbHZlci5oCTggQXVnIDIw
MDUgMTk6NTU6MDAgLTAwMDAKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIEtET00KIAkJS0RP
TV9CQVNFQ0xBU1NfR0VUCQkKIAkJS0RPTV9DQVNUCiAJCQotCQlLSlM6OlZhbHVlIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6
VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoWFBhdGhOU1Jlc29sdmVyKQpJbmRl
eDoga2RvbS94cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtkb20veHBhdGgvWFBhdGhOYW1lc3Bh
Y2UuY3BwCi0tLSBrZG9tL3hwYXRoL1hQYXRoTmFtZXNwYWNlLmNwcAk5IEp1bCAyMDA1IDA2OjU0
OjI4IC0wMDAwCTEuMQorKysga2RvbS94cGF0aC9YUGF0aE5hbWVzcGFjZS5jcHAJOCBBdWcgMjAw
NSAxOTo1NTowMCAtMDAwMApAQCAtMzgsNyArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwog
QGVuZAogKi8KIAotS0pTOjpWYWx1ZSBYUGF0aE5hbWVzcGFjZTo6Z2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorS0pTOjpWYWx1ZUltcCAqWFBh
dGhOYW1lc3BhY2U6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga2RvbS94cGF0aC9YUGF0
aE5hbWVzcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tk
b20veHBhdGgvWFBhdGhOYW1lc3BhY2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga2RvbS94cGF0aC9YUGF0aE5hbWVzcGFjZS5oCi0tLSBrZG9tL3hwYXRoL1hQ
YXRoTmFtZXNwYWNlLmgJOSBKdWwgMjAwNSAwNjo1NDoyOCAtMDAwMAkxLjEKKysrIGtkb20veHBh
dGgvWFBhdGhOYW1lc3BhY2UuaAk4IEF1ZyAyMDA1IDE5OjU1OjAwIC0wMDAwCkBAIC02Miw3ICs2
Miw3IEBAIG5hbWVzcGFjZSBLRE9NCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0J
CUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga2RvbS94cGF0
aC9YUGF0aFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva2RvbS94cGF0aC9YUGF0aFJlc3VsdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtkb20veHBhdGgvWFBhdGhSZXN1bHQuY3BwCi0tLSBrZG9tL3hwYXRo
L1hQYXRoUmVzdWx0LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjI4IC0wMDAwCTEuMQorKysga2RvbS94
cGF0aC9YUGF0aFJlc3VsdC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMCAtMDAwMApAQCAtNTEsNyAr
NTEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBLRE9NX0lNUExFTUVOVF9QUk9UT1RZUEUo
IlhQYXRoUmVzdWx0IiwgWFBhdGhSZXN1bHRQcm90bywgWFBhdGhSZXN1bHRQcm90b0Z1bmMpCiAK
LUtKUzo6VmFsdWUgWFBhdGhSZXN1bHQ6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK0tKUzo6VmFsdWVJbXAgKlhQYXRoUmVzdWx0OjpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC03OSw3ICs3OSw3IEBAIEtKUzo6
VmFsdWUgWFBhdGhSZXN1bHQ6OmdldFZhbHVlUHJvcGVydHkKIAlyZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CiAKLVZhbHVlIFhQYXRoUmVzdWx0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlhQYXRoUmVzdWx0
UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhp
c09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKIAlLRE9NX0NIRUNLX1RISVMoWFBhdGhSZXN1bHQp
CiAJS0RPTV9FTlRFUl9TQUZFCkBAIC05MSw3ICs5MSw3IEBAIFZhbHVlIFhQYXRoUmVzdWx0UHJv
dG9GdW5jOjpjYWxsKEV4ZWNTdGEKIAkJCXJldHVybiBnZXRET01Ob2RlKGV4ZWMsIG9iai5pdGVy
YXRlTmV4dCgpKTsKIAkJY2FzZSBYUGF0aFJlc3VsdENvbnN0YW50czo6U25hcHNob3RJdGVtOgog
CQl7Ci0JCQljb25zdCB1bnNpZ25lZCBsb25nIGluZGV4ID0gKHVuc2lnbmVkIGxvbmcpIGFyZ3Nb
MF0udG9VSW50MzIoZXhlYyk7CisJCQljb25zdCB1bnNpZ25lZCBsb25nIGluZGV4ID0gKHVuc2ln
bmVkIGxvbmcpIGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldERPTU5vZGUo
ZXhlYywgb2JqLnNuYXBzaG90SXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBr
ZG9tL3hwYXRoL1hQYXRoUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva2RvbS94cGF0aC9YUGF0aFJlc3VsdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtcCAtdSAtcjEuMSBrZG9tL3hwYXRoL1hQYXRoUmVzdWx0LmgKLS0tIGtkb20veHBh
dGgvWFBhdGhSZXN1bHQuaAk5IEp1bCAyMDA1IDA2OjU0OjI4IC0wMDAwCTEuMQorKysga2RvbS94
cGF0aC9YUGF0aFJlc3VsdC5oCTggQXVnIDIwMDUgMTk6NTU6MDAgLTAwMDAKQEAgLTg5LDcgKzg5
LDcgQEAgbmFtZXNwYWNlIEtET00KIAogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJ
CUtET01fQkFTRUNMQVNTX0dFVAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IAogCUtET01fREVGSU5FX0NBU1QoWFBhdGhSZXN1bHQpCkluZGV4OiBrc3ZnMi9LU1ZHRmFjdG9y
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvS1NW
R0ZhY3RvcnkuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9LU1ZHRmFjdG9yeS5jcHAKLS0tIGtzdmcyL0tTVkdGYWN0b3J5LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjQ2IC0wMDAwCTEuMQorKysga3N2ZzIvS1NWR0ZhY3RvcnkuY3BwCTggQXVnIDIwMDUg
MTk6NTU6MDAgLTAwMDAKQEAgLTk3LDkgKzk3LDkgQEAgS1BhcnRzOjpQYXJ0ICpLU1ZHRmFjdG9y
eTo6Y3JlYXRlUGFydE9iagogCWZvcihRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxRU3RyaW5nPiBp
dCA9IGFyZ3MuYmVnaW4oKTsgaXQgIT0gYXJncy5lbmQoKTsgKytpdCkgCiAJewogCQlpZihyMS5z
ZWFyY2goKml0KSA+IC0xKQotCQkJd2lkdGggPSByMS5jYXAoMykudG9VSW50KCZkdW1teSk7CisJ
CQl3aWR0aCA9IHIxLmNhcCgzKS0+dG9VSW50KCZkdW1teSk7CiAJCWlmKHIyLnNlYXJjaCgqaXQp
ID4gLTEpCi0JCQloZWlnaHQgPSByMi5jYXAoMykudG9VSW50KCZkdW1teSk7CisJCQloZWlnaHQg
PSByMi5jYXAoMyktPnRvVUludCgmZHVtbXkpOwogCX0KIAkKIAlyZXR1cm4gbmV3IEtTVkdQYXJ0
KHBhcmVudFdpZGdldCwgd2lkZ2V0TmFtZSwgcGFyZW50LCBuYW1lLCB3aWR0aCwgaGVpZ2h0KTsK
SW5kZXg6IGtzdmcyL2RhdGEvU1ZHQ29uc3RhbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZGF0YS9TVkdDb25zdGFudHMuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZGF0YS9TVkdDb25zdGFudHMuaAot
LS0ga3N2ZzIvZGF0YS9TVkdDb25zdGFudHMuaAk5IEp1bCAyMDA1IDA2OjU0OjUwIC0wMDAwCTEu
MQorKysga3N2ZzIvZGF0YS9TVkdDb25zdGFudHMuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAw
CkBAIC0xMTUsNyArMTE1LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAl7CiAJCXR5cGVkZWYgZW51bQog
CQl7Ci0JCQlWYWx1ZSAKKwkJCVZhbHVlCiAJCX0gU1ZHTnVtYmVyQ29uc3RhbnRzRW51bTsKIAl9
OwogCkluZGV4OiBrc3ZnMi9kYXRhL2dlbmVyYXRlZGRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RhdGEvZ2VuZXJhdGVkZGF0YS5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RhdGEvZ2VuZXJh
dGVkZGF0YS5jcHAKLS0tIGtzdmcyL2RhdGEvZ2VuZXJhdGVkZGF0YS5jcHAJOSBKdWwgMjAwNSAw
Njo1NDo1MCAtMDAwMAkxLjEKKysrIGtzdmcyL2RhdGEvZ2VuZXJhdGVkZGF0YS5jcHAJOCBBdWcg
MjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTM3LDEyICs1MzcsMTIgQEAgYm9vbCBTVkdBRWxlbWVu
dDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
U1ZHQUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQUVs
ZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxv
b2t1cEdldFZhbHVlPFNWR0FFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR0FFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR0FFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNW
R0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTU2NywxMCArNTY3LDEwIEBAIGJvb2wgU1ZHQUVsZW1l
bnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
U1ZHQUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpT
VkdBRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEp
IHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAg
IHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9
CiAKIE9iamVjdEltcCAqU1ZHQUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtNTc4LDcgKzU3OCw3IEBAIE9iamVjdEltcCAqU1ZHQUVsZW1lbnQ6OmJyaWRnZShFeGVjU3Rh
dGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0FFbGVtZW50PihwMSxzdGF0
aWNfY2FzdDxTVkdBRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0FFbGVt
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FFbGVtZW50Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9i
amVjdDxTVkdBRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQUVsZW1lbnQ6OlByaXZhdGUgKj4o
ZCkpOwogfQpAQCAtNTg3LDEyICs1ODcsMTIgQEAgYm9vbCBTVkdBbmdsZTo6aGFzUHJvcGVydHko
RXhlY1N0YXRlICpwMQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVu
dHJ5KCZTVkdBbmdsZTo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwot
ICAgIE9iamVjdCBwcm90byA9IFNWR0FuZ2xlUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3Rv
Lmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9
IFNWR0FuZ2xlUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5nbGU6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5nbGU6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdBbmds
ZVByb3RvRnVuYyxTVkdBbmdsZT4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAt
NjA5LDEwICs2MDksMTAgQEAgU1ZHQW5nbGUgS1NWRzo6dG9TVkdBbmdsZShLSlM6OkV4ZWNTdGF0
ZQogICAgIHJldHVybiBTVkdBbmdsZTo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHQW5nbGU6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5nbGU6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZH
QW5nbGVQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHQW5nbGVQ
cm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CkBAIC02MjgsMTAgKzYyOCwxMCBAQCBib29sIFNWR0FuZ2xlOjpwdXRJblBhcmVu
dHMoUFVUX01FVEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQW5nbGU6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmdsZTo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdBbmds
ZVByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkp
OworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuZ2xlOjpicmlkZ2UoRXhl
Y1N0YXRlICpwMSkgY29uc3QKQEAgLTYzOSw3ICs2MzksNyBAQCBPYmplY3RJbXAgKlNWR0FuZ2xl
OjpicmlkZ2UoRXhlY1N0YXRlICpwCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxT
VkdBbmdsZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5nbGU6OlByaXZhdGUgKj4oaW1wbCkpOwogfQog
Ci1WYWx1ZSBTVkdBbmdsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpT
VkdBbmdsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6
Y2FjaGVET01PYmplY3Q8U1ZHQW5nbGU+KHAxLHN0YXRpY19jYXN0PFNWR0FuZ2xlOjpQcml2YXRl
ICo+KGltcGwpKTsKIH0KQEAgLTY1MiwxMiArNjUyLDEyIEBAIGJvb2wgU1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudDo6aGFzUHJvcGVydHkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudD4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlQ29sb3JFbGVt
ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgaWYoU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHQW5pbWF0aW9uRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CkBAIC02NzIsMTAgKzY3MiwxMCBAQCBib29sIFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OnB1
dChQVVRfTUVUCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZUNvbG9y
RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0Fu
aW1hdGVDb2xvckVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUo
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmJyaWRnZShFeGVj
U3RhdGUgKnAxKSBjb25zdApAQCAtNjgzLDcgKzY4Myw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0
ZUNvbG9yRWxlbWVudDo6YnJpZGcKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNW
R0FuaW1hdGVDb2xvckVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVDb2xvckVsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlQ29sb3JFbGVtZW50Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVDb2xvckVsZW1l
bnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hl
RE9NT2JqZWN0PFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1h
dGVDb2xvckVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNjk2LDEyICs2OTYsMTIgQEAg
Ym9vbCBTVkdBbmltYXRlRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0FuaW1hdGVFbGVtZW50
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVFbGVt
ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0Fu
aW1hdGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IGlmKFNWR0FuaW1hdGlvbkVsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpA
QCAtNzE2LDEwICs3MTYsMTAgQEAgYm9vbCBTVkdBbmltYXRlRWxlbWVudDo6cHV0KFBVVF9NRVRI
T0RfQQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0FuaW1hdGVFbGVtZW50Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZUVsZW1l
bnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
cDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKlNWR0FuaW1hdGVFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTcyNyw3ICs3MjcsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVFbGVtZW50OjpicmlkZ2UoRXhl
CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdBbmltYXRlRWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1
ZSBTVkdBbmltYXRlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpTVkdBbmltYXRlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZUVsZW1lbnQ+KHAxLHN0YXRpY19j
YXN0PFNWR0FuaW1hdGVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTc0MCwxMiArNzQw
LDEyIEBAIGJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6Omhhc1Byb3AKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBH
ZXRWYWx1ZTxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRo
aXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlVHJhbnNmb3Jt
RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihT
VkdBbmltYXRpb25FbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdBbmltYXRp
b25FbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTc2
MCwxMCArNzYwLDEwIEBAIGJvb2wgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OnB1dChQVVQK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC03NzEsNyArNzcxLDcgQEAgT2JqZWN0SW1wICpTVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudDo6YgogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8
U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Pihw
MSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CkBAIC03ODQsMjEgKzc4NCwyMSBAQCBib29sIFNWR0FuaW1hdGVkQW5nbGU6Omhhc1Byb3Bl
cnR5KEV4ZWNTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZEFuZ2xl
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkQW5nbGU6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdl
dFZhbHVlPFNWR0FuaW1hdGVkQW5nbGU+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0K
IAotVmFsdWUgU1ZHQW5pbWF0ZWRBbmdsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZEFuZ2xlOjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNF
RChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRB
bmdsZTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1h
dGVkQW5nbGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkQW5nbGU6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtODA2LDcgKzgwNiw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRBbmdsZTo6YnJpZGdl
KEV4ZWMKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdBbmltYXRlZEFuZ2xlPihw
MSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZEFuZ2xlOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAot
VmFsdWUgU1ZHQW5pbWF0ZWRBbmdsZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTVkdBbmltYXRlZEFuZ2xlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRlZEFuZ2xlPihwMSxzdGF0aWNf
Y2FzdDxTVkdBbmltYXRlZEFuZ2xlOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTgxOSwxMiAr
ODE5LDEyIEBAIGJvb2wgU1ZHQW5pbWF0ZWRCb29sZWFuOjpoYXNQcm9wZXJ0eShFeGUKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkQm9vbGVhbjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZEJvb2xlYW46OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0Fu
aW1hdGVkQm9vbGVhbj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBT
VkdBbmltYXRlZEJvb2xlYW46OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHQW5pbWF0ZWRCb29sZWFuOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtODQxLDEwICs4NDEsMTAgQEAgYm9vbCBTVkdB
bmltYXRlZEJvb2xlYW46OnB1dEluUGFyZW50cyhQVQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
T2JqZWN0IFNWR0FuaW1hdGVkQm9vbGVhbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkQm9vbGVhbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9i
amVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRCb29sZWFuOjpi
cmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTg1Miw3ICs4NTIsNyBAQCBPYmplY3RJbXAg
KlNWR0FuaW1hdGVkQm9vbGVhbjo6YnJpZGdlKEV4CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01S
V0JyaWRnZTxTVkdBbmltYXRlZEJvb2xlYW4+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkQm9v
bGVhbjo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkQm9vbGVhbjo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZEJvb2xlYW46
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9N
T2JqZWN0PFNWR0FuaW1hdGVkQm9vbGVhbj4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRCb29s
ZWFuOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTg2NSwxMiArODY1LDEyIEBAIGJvb2wgU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbjo6aGFzUHJvcGVydHkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LVZhbHVlIFNWR0FuaW1hdGVkRW51bWVyYXRpb246OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbj4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmlt
YXRlZEVudW1lcmF0aW9uOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0FuaW1hdGVkRW51bWVyYXRpb246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC04ODcsMTAgKzg4NywxMCBAQCBib29sIFNW
R0FuaW1hdGVkRW51bWVyYXRpb246OnB1dEluUGFyZW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1PYmplY3QgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR0FuaW1hdGVkRW51bWVyYXRpb246OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCkt
PmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVk
RW51bWVyYXRpb246OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtODk4LDcgKzg5OCw3
IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6YnJpZGcKICAgICByZXR1cm4g
bmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KHAxLHN0YXRpY19j
YXN0PFNWR0FuaW1hdGVkRW51bWVyYXRpb246OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1
ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKlNWR0FuaW1hdGVkRW51bWVyYXRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0FuaW1hdGVkRW51bWVyYXRp
b24+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkRW51bWVyYXRpb246OlByaXZhdGUgKj4oaW1w
bCkpOwogfQpAQCAtOTExLDEyICs5MTEsMTIgQEAgYm9vbCBTVkdBbmltYXRlZEludGVnZXI6Omhh
c1Byb3BlcnR5KEV4ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRJ
bnRlZ2VyOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVk
SW50ZWdlcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6
bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkSW50ZWdlcjo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZEludGVnZXI6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNF
RChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC05MzMsMTAg
KzkzMywxMCBAQCBib29sIFNWR0FuaW1hdGVkSW50ZWdlcjo6cHV0SW5QYXJlbnRzKFBVCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRl
cnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6
ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpT
VkdBbmltYXRlZEludGVnZXI6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtOTQ0LDcg
Kzk0NCw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRJbnRlZ2VyOjpicmlkZ2UoRXgKICAgICBy
ZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0FuaW1hdGVkSW50ZWdlcj4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHQW5pbWF0ZWRJbnRlZ2VyOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUg
U1ZHQW5pbWF0ZWRJbnRlZ2VyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KlNWR0FuaW1hdGVkSW50ZWdlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihwMSxzdGF0aWNf
Y2FzdDxTVkdBbmltYXRlZEludGVnZXI6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtOTU3LDIx
ICs5NTcsMjEgQEAgYm9vbCBTVkdBbmltYXRlZExlbmd0aDo6aGFzUHJvcGVydHkoRXhlYwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRMZW5ndGg6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRMZW5ndGg6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0Fu
aW1hdGVkTGVuZ3RoPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNW
R0FuaW1hdGVkTGVuZ3RoOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0FuaW1hdGVkTGVuZ3RoOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRMZW5ndGg6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZExlbmd0
aDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBw
MS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqU1ZHQW5pbWF0ZWRMZW5ndGg6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
OTc5LDcgKzk3OSw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRMZW5ndGg6OmJyaWRnZShFeGUK
ICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdBbmltYXRlZExlbmd0aD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHQW5pbWF0ZWRMZW5ndGg6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1
ZSBTVkdBbmltYXRlZExlbmd0aDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpTVkdBbmltYXRlZExlbmd0aDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWRMZW5ndGg+KHAxLHN0YXRpY19j
YXN0PFNWR0FuaW1hdGVkTGVuZ3RoOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTk5MiwyMSAr
OTkyLDIxIEBAIGJvb2wgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OjpoYXNQcm9wZXJ0eSgKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkTGVuZ3RoTGlzdDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZExlbmd0aExpc3Q6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVl
PFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQog
Ci1WYWx1ZSBTVkdBbmltYXRlZExlbmd0aExpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIp
OyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZH
QW5pbWF0ZWRMZW5ndGhMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVj
dEltcCAqU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0
UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlZExlbmd0aExpc3Q6OmJy
aWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTAxNCw3ICsxMDE0LDcgQEAgT2JqZWN0SW1w
ICpTVkdBbmltYXRlZExlbmd0aExpc3Q6OmJyaWRnZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9N
QnJpZGdlPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRM
ZW5ndGhMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRMZW5n
dGhMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVk
TGVuZ3RoTGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0PihwMSxzdGF0aWNfY2FzdDxT
VkdBbmltYXRlZExlbmd0aExpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMTAyNywxMiAr
MTAyNywxMiBAQCBib29sIFNWR0FuaW1hdGVkTnVtYmVyOjpoYXNQcm9wZXJ0eShFeGVjCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZE51bWJlcjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZE51bWJlcjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5p
bWF0ZWROdW1iZXI+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZH
QW5pbWF0ZWROdW1iZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHQW5pbWF0ZWROdW1iZXI6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xMDQ5LDEwICsxMDQ5LDEwIEBAIGJvb2wgU1ZHQW5p
bWF0ZWROdW1iZXI6OnB1dEluUGFyZW50cyhQVVQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9i
amVjdCBTVkdBbmltYXRlZE51bWJlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitP
YmplY3RJbXAgKlNWR0FuaW1hdGVkTnVtYmVyOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0
UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlZE51bWJlcjo6YnJpZGdl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMDYwLDcgKzEwNjAsNyBAQCBPYmplY3RJbXAgKlNW
R0FuaW1hdGVkTnVtYmVyOjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0Jy
aWRnZTxTVkdBbmltYXRlZE51bWJlcj4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWROdW1iZXI6
OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZE51bWJlcjo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZE51bWJlcjo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8
U1ZHQW5pbWF0ZWROdW1iZXI+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkTnVtYmVyOjpQcml2
YXRlICo+KGltcGwpKTsKIH0KQEAgLTEwNzMsMjEgKzEwNzMsMjEgQEAgYm9vbCBTVkdBbmltYXRl
ZE51bWJlckxpc3Q6Omhhc1Byb3BlcnR5KAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
U1ZHQW5pbWF0ZWROdW1iZXJMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0Pihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkTnVtYmVy
TGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdB
bmltYXRlZE51bWJlckxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZE51bWJlckxpc3Q6OnByb3Rv
dHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmltYXRlZE51bWJlckxp
c3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
cDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKlNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CkBAIC0xMDk1LDcgKzEwOTUsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6
YnJpZGdlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHQW5pbWF0ZWROdW1iZXJM
aXN0PihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZE51bWJlckxpc3Q6OlByaXZhdGUgKj4oaW1w
bCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZE51bWJlckxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWROdW1iZXJMaXN0OjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdBbmlt
YXRlZE51bWJlckxpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6UHJp
dmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0xMTA4LDIxICsxMTA4LDIxIEBAIGJvb2wgU1ZHQW5pbWF0
ZWRQYXRoRGF0YTo6aGFzUHJvcGVydHkoRXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVl
IFNWR0FuaW1hdGVkUGF0aERhdGE6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRQYXRoRGF0YT4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFBhdGhEYXRhOjpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVk
UGF0aERhdGE6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9V
TlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZFBhdGhEYXRhOjpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZWRQYXRoRGF0YTo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0
ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQW5p
bWF0ZWRQYXRoRGF0YTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMTMwLDcgKzEx
MzAsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVkUGF0aERhdGE6OmJyaWRnZShFCiAgICAgcmV0
dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHQW5pbWF0ZWRQYXRoRGF0YT4ocDEsc3RhdGljX2Nh
c3Q8U1ZHQW5pbWF0ZWRQYXRoRGF0YTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNW
R0FuaW1hdGVkUGF0aERhdGE6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHQW5pbWF0ZWRQYXRoRGF0YTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWRQYXRoRGF0YT4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHQW5pbWF0ZWRQYXRoRGF0YTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0xMTQz
LDIxICsxMTQzLDIxIEBAIGJvb2wgU1ZHQW5pbWF0ZWRQb2ludHM6Omhhc1Byb3BlcnR5KEV4ZWMK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkUG9pbnRzOjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUG9pbnRzOjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxT
VkdBbmltYXRlZFBvaW50cz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1
ZSBTVkdBbmltYXRlZFBvaW50czo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdBbmltYXRlZFBvaW50czo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMp
OwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR0FuaW1hdGVkUG9pbnRz
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0ZWRQ
b2ludHM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlNWR0FuaW1hdGVkUG9pbnRzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QK
QEAgLTExNjUsNyArMTE2NSw3IEBAIE9iamVjdEltcCAqU1ZHQW5pbWF0ZWRQb2ludHM6OmJyaWRn
ZShFeGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdBbmltYXRlZFBvaW50cz4o
cDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRQb2ludHM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQog
Ci1WYWx1ZSBTVkdBbmltYXRlZFBvaW50czo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1Zh
bHVlSW1wICpTVkdBbmltYXRlZFBvaW50czo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWRQb2ludHM+KHAxLHN0
YXRpY19jYXN0PFNWR0FuaW1hdGVkUG9pbnRzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTEx
NzgsMjEgKzExNzgsMjEgQEAgYm9vbCBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86Omhh
cwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVj
dFJhdGlvOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVk
UHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlv
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkUHJl
c2VydmVBc3BlY3RSYXRpbzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFf
VU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW86OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCkt
PmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVk
UHJlc2VydmVBc3BlY3RSYXRpbzo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMjAw
LDcgKzEyMDAsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpCiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJh
dGlvPihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86OlByaXZh
dGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRQcmVzZXJ2
ZUFzcGVjdFJhdGlvOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+KHAxLHN0
YXRpY19jYXN0PFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6UHJpdmF0ZSAqPihpbXBs
KSk7CiB9CkBAIC0xMjEzLDIxICsxMjEzLDIxIEBAIGJvb2wgU1ZHQW5pbWF0ZWRSZWN0OjpoYXNQ
cm9wZXJ0eShFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVk
UmVjdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFJl
Y3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1
cEdldFZhbHVlPFNWR0FuaW1hdGVkUmVjdD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBTVkdBbmltYXRlZFJlY3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRSZWN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNF
RChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0ZWRS
ZWN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQW5pbWF0
ZWRSZWN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpTVkdBbmltYXRlZFJlY3Q6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtMTIzNSw3ICsxMjM1LDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRlZFJlY3Q6OmJyaWRnZShF
eGVjUwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR0FuaW1hdGVkUmVjdD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRSZWN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFs
dWUgU1ZHQW5pbWF0ZWRSZWN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KlNWR0FuaW1hdGVkUmVjdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0ZWRSZWN0PihwMSxzdGF0aWNfY2FzdDxT
VkdBbmltYXRlZFJlY3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMTI0OCwxMiArMTI0OCwx
MiBAQCBib29sIFNWR0FuaW1hdGVkU3RyaW5nOjpoYXNQcm9wZXJ0eShFeGVjCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFN0cmluZzo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFN0cmluZzo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRT
dHJpbmc+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHQW5pbWF0
ZWRTdHJpbmc6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHQW5pbWF0ZWRTdHJpbmc6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CkBAIC0xMjcwLDEwICsxMjcwLDEwIEBAIGJvb2wgU1ZHQW5pbWF0ZWRT
dHJpbmc6OnB1dEluUGFyZW50cyhQVVQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBT
VkdBbmltYXRlZFN0cmluZzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJ
bXAgKlNWR0FuaW1hdGVkU3RyaW5nOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90
eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1
cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdBbmltYXRlZFN0cmluZzo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC0xMjgxLDcgKzEyODEsNyBAQCBPYmplY3RJbXAgKlNWR0FuaW1h
dGVkU3RyaW5nOjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxT
VkdBbmltYXRlZFN0cmluZz4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0ZWRTdHJpbmc6OlByaXZh
dGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFN0cmluZzo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZFN0cmluZzo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5p
bWF0ZWRTdHJpbmc+KHAxLHN0YXRpY19jYXN0PFNWR0FuaW1hdGVkU3RyaW5nOjpQcml2YXRlICo+
KGltcGwpKTsKIH0KQEAgLTEyOTQsMjEgKzEyOTQsMjEgQEAgYm9vbCBTVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3Q6Omhhc1Byb3BlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGVkVHJh
bnNmb3JtTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdBbmltYXRlZFRyYW5zZm9y
bUxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdBbmlt
YXRlZFRyYW5zZm9ybUxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUo
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xMzE2LDcgKzEzMTYsNyBAQCBPYmplY3RJbXAgKlNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdDo6YnJpCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8
U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KHAxLHN0YXRp
Y19jYXN0PFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBA
IC0xMzI1LDE1ICsxMzI1LDE1IEBAIGJvb2wgU1ZHQW5pbWF0aW9uRWxlbWVudDo6aGFzUHJvcGVy
dHkoRXgKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZH
QW5pbWF0aW9uRWxlbWVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVl
OwotICAgIE9iamVjdCBwcm90byA9IFNWR0FuaW1hdGlvbkVsZW1lbnRQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmpl
Y3RJbXAgKnByb3RvID0gU1ZHQW5pbWF0aW9uRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBp
Zihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdFbGVt
ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAg
aWYoU1ZHVGVzdHM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdBbmltYXRpb25FbGVtZW50OjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdBbmltYXRpb25F
bGVtZW50UHJvdG9GdW5jLFNWR0FuaW1hdGlvbkVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0
aGlzLHAzKTsKIH0KQEAgLTEzNTMsMTAgKzEzNTMsMTAgQEAgU1ZHQW5pbWF0aW9uRWxlbWVudCBT
VkdBbmltYXRpb25FbGVtZW50UAogICAgIHJldHVybiBTVkdBbmltYXRpb25FbGVtZW50OjpudWxs
OwogfQogCi1WYWx1ZSBTVkdBbmltYXRpb25FbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHQW5pbWF0
aW9uRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdB
bmltYXRpb25FbGVtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihTVkdFbGVtZW50Ojpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAg
IGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYo
U1ZHVGVzdHM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1Rlc3RzOjpnZXQocDEscDIs
cDMpOwpAQCAtMTM3MiwxMCArMTM3MiwxMCBAQCBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OnB1
dChQVVRfTUVUSE9ECiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0Fu
aW1hdGlvbkVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gU1ZHQW5pbWF0aW9uRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlNWR0FuaW1hdGlvbkVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtMTM4Myw3ICsxMzgzLDcgQEAgT2JqZWN0SW1wICpTVkdBbmltYXRpb25FbGVtZW50Ojpi
cmlkZ2UoRQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQW5pbWF0aW9uRWxl
bWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0aW9uRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0aW9uRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQW5pbWF0aW9uRWxl
bWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQW5pbWF0aW9uRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CkBAIC0xNDAxLDEyICsxNDAxLDEyIEBAIGJvb2wgU1ZHQ2lyY2xlRWxlbWVudDo6aGFzUHJv
cGVydHkoRXhlY1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0NpcmNsZUVsZW1l
bnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ2lyY2xlRWxlbWVu
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0VmFsdWU8U1ZHQ2lyY2xlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBTVkdDaXJjbGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR0NpcmNsZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtMTQzMCwxMCArMTQzMCwxMCBAQCBi
b29sIFNWR0NpcmNsZUVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1PYmplY3QgU1ZHQ2lyY2xlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR0NpcmNsZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0
aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxs
KCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0NpcmNsZUVsZW1lbnQ6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTQ0MSw3ICsxNDQxLDcgQEAgT2JqZWN0
SW1wICpTVkdDaXJjbGVFbGVtZW50OjpicmlkZ2UoRXhlYwogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NUldCcmlkZ2U8U1ZHQ2lyY2xlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQ2lyY2xlRWxl
bWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0NpcmNsZUVsZW1lbnQ6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ2lyY2xlRWxlbWVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8
U1ZHQ2lyY2xlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHQ2lyY2xlRWxlbWVudDo6UHJpdmF0
ZSAqPihkKSk7CiB9CkBAIC0xNDU5LDEyICsxNDU5LDEyIEBAIGJvb2wgU1ZHQ2xpcFBhdGhFbGVt
ZW50OjpoYXNQcm9wZXJ0eShFeGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0Ns
aXBQYXRoRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdD
bGlwUGF0aEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006Omxvb2t1cEdldFZhbHVlPFNWR0NsaXBQYXRoRWxlbWVudD4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdDbGlwUGF0aEVsZW1lbnQ6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ2xpcFBhdGhFbGVtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAg
ICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSBy
ZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTE0
ODgsMTAgKzE0ODgsMTAgQEAgYm9vbCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnB1dChQVVRfTUVUSE9E
XwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0NsaXBQYXRoRWxlbWVudDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0NsaXBQYXRoRWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBw
MS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqU1ZHQ2xpcFBhdGhFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAg
LTE0OTksNyArMTQ5OSw3IEBAIE9iamVjdEltcCAqU1ZHQ2xpcFBhdGhFbGVtZW50OjpicmlkZ2Uo
RXgKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0NsaXBQYXRoRWxlbWVudD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHQ2xpcFBhdGhFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgU1ZHQ2xpcFBhdGhFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKlNWR0NsaXBQYXRoRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHQ2xpcFBhdGhFbGVtZW50PihwMSxz
dGF0aWNfY2FzdDxTVkdDbGlwUGF0aEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMTUw
OCwxMyArMTUwOCwxMyBAQCBib29sIFNWR0NvbG9yOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAx
CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNWR0NvbG9y
OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHBy
b3RvID0gU1ZHQ29sb3JQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHQ29sb3JQcm90
bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRy
dWU7CiAgICAgaWYoS0RPTTo6Q1NTVmFsdWU6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRy
dWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdDb2xvcjo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdDb2xvcjo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR0NvbG9yUHJvdG9GdW5jLFNW
R0NvbG9yPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0xNTI4LDEwICsxNTI4
LDEwIEBAIFNWR0NvbG9yIFNWR0NvbG9yUHJvdG9GdW5jOjpjYXN0KEtKUzo6RXgKICAgICByZXR1
cm4gU1ZHQ29sb3I6Om51bGw7CiB9CiAKLVZhbHVlIFNWR0NvbG9yOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0NvbG9yOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR0NvbG9yUHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3Rv
LmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0NvbG9yUHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBpZihLRE9NOjpDU1NWYWx1ZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1
cm4gS0RPTTo6Q1NTVmFsdWU6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQpAQCAtMTU0NSwxMCArMTU0NSwxMCBAQCBib29sIFNWR0NvbG9yOjpwdXQoUFVUX01FVEhP
RF9BUkdTKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0NvbG9yOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHQ29sb3I6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHQ29sb3JQcm90bzo6
c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICBy
ZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdDb2xvcjo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CkBAIC0xNTU2LDcgKzE1NTYsNyBAQCBPYmplY3RJbXAgKlNWR0NvbG9yOjpicmlk
Z2UoRXhlY1N0YXRlICpwCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdDb2xv
cj4ocDEsc3RhdGljX2Nhc3Q8U1ZHQ29sb3I6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBT
VkdDb2xvcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdDb2xvcjo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01P
YmplY3Q8U1ZHQ29sb3I+KHAxLHN0YXRpY19jYXN0PFNWR0NvbG9yOjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTE1NjksMTIgKzE1NjksMTIgQEAgYm9vbCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uRWxlbWVudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0NvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpnZXRJblBhcmVu
dHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0NvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb25FbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6
OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMTU4OSwxMCArMTU4
OSwxMCBAQCBib29sIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1l
bnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFBy
b3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMTYwMCw3ICsxNjAwLDcg
QEAgT2JqZWN0SW1wICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRQogICAgIHJldHVybiBu
ZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ+
KHAxLHN0YXRpY19jYXN0PFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpQcml2
YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1l
bnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0xNjE4LDEyICsxNjE4LDEyIEBAIGJvb2wgU1ZHRGVm
c0VsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR0RlZnNFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR0RlZnNFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdEZWZzRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdEZWZzRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdEZWZzRWxlbWVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC0xNjQ3LDEwICsxNjQ3
LDEwIEBAIGJvb2wgU1ZHRGVmc0VsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdEZWZzRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0RlZnNFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdEZWZzRWxlbWVu
dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNjU4LDcgKzE2NTgsNyBAQCBPYmpl
Y3RJbXAgKlNWR0RlZnNFbGVtZW50OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBLRE9N
OjpET01SV0JyaWRnZTxTVkdEZWZzRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRGVmc0VsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdEZWZzRWxlbWVudDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdEZWZzRWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRGVm
c0VsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0RlZnNFbGVtZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTE2NzMsMTIgKzE2NzMsMTIgQEAgYm9vbCBTVkdEZXNjRWxlbWVudDo6aGFzUHJvcGVy
dHkoRXhlY1N0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRGVzY0VsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRGVzY0VsZW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZh
bHVlPFNWR0Rlc2NFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZh
bHVlIFNWR0Rlc2NFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR0Rlc2NFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNW
R0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdMYW5nU3BhY2U6OmdldChwMSxwMixwMyk7CkBAIC0xNjk5LDEw
ICsxNjk5LDEwIEBAIGJvb2wgU1ZHRGVzY0VsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdEZXNjRWxlbWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0Rlc2NFbGVtZW50Ojpwcm90b3R5cGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRl
cigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdEZXNj
RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xNzEwLDcgKzE3MTAsNyBA
QCBPYmplY3RJbXAgKlNWR0Rlc2NFbGVtZW50OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5l
dyBLRE9NOjpET01SV0JyaWRnZTxTVkdEZXNjRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRGVz
Y0VsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdEZXNjRWxlbWVudDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdEZXNjRWxlbWVudDo6Y2FjaGUo
RXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8
U1ZHRGVzY0VsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0Rlc2NFbGVtZW50OjpQcml2YXRlICo+
KGQpKTsKIH0KQEAgLTE3MjMsMTIgKzE3MjMsMTIgQEAgYm9vbCBTVkdEb2N1bWVudDo6aGFzUHJv
cGVydHkoRXhlY1N0YXRlIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRG9jdW1l
bnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRG9jdW1lbnQ6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZh
bHVlPFNWR0RvY3VtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVl
IFNWR0RvY3VtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0RvY3VtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIGlmKEtET006OkRvY3VtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBLRE9NOjpE
b2N1bWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xNzQ4
LDEwICsxNzQ4LDEwIEBAIGJvb2wgU1ZHRG9jdW1lbnQ6OnB1dEluUGFyZW50cyhQVVRfTUVUSE8K
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdEb2N1bWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0RvY3VtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogS0RPTTo6RG9jdW1lbnQgS1NWRzo6
RWNtYUludGVyZmFjZTo6aW5oZXJpdGVkRG9jdW1lbnRDYXN0KGNvbnN0IE9iamVjdEltcCAqcDEp
CkBAIC0xNzc0LDcgKzE3NzQsNyBAQCBPYmplY3RJbXAgKlNWR0RvY3VtZW50OjpicmlkZ2UoRXhl
Y1N0YXRlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdEb2N1bWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQ6OlByaXZhdGUgKj4oS0RPTTo6RXZlbnRUYXJnZXQ6OmQp
KTsKIH0KIAotVmFsdWUgU1ZHRG9jdW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHRG9jdW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0RvY3VtZW50PihwMSxzdGF0aWNfY2FzdDxT
VkdEb2N1bWVudDo6UHJpdmF0ZSAqPihLRE9NOjpFdmVudFRhcmdldDo6ZCkpOwogfQpAQCAtMTc4
Nyw3ICsxNzg3LDcgQEAgYm9vbCBTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKgog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdFbGVtZW50PihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0xOTA3LDcgKzE5MDcsNyBAQCBTVkdFbGVt
ZW50IEtTVkc6OnRvU1ZHRWxlbWVudChLSlM6OkV4ZWNTCiAgICAgcmV0dXJuIFNWR0VsZW1lbnQ6
Om51bGw7CiB9CiAKLVZhbHVlIFNWR0VsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICBpZihLRE9NOjpFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBLRE9NOjpFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKQEAgLTE5MjcsMTAgKzE5MjcsMTAgQEAgYm9vbCBTVkdFbGVtZW50OjpwdXRJblBhcmVu
dHMoUFVUX01FVEhPRAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0VsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdFbGVtZW50Ojpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5p
bnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVj
dDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogS0RPTTo6RWxl
bWVudCBLU1ZHOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRFbGVtZW50Q2FzdChjb25zdCBPYmpl
Y3RJbXAgKnAxKQpAQCAtMTk0Nyw3ICsxOTQ3LDcgQEAgT2JqZWN0SW1wICpTVkdFbGVtZW50Ojpi
cmlkZ2UoRXhlY1N0YXRlIAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRWxl
bWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZh
bHVlIFNWR0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6
Y2FjaGVET01PYmplY3Q8U1ZHRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudDo6UHJp
dmF0ZSAqPihkKSk7CiB9CkBAIC0xOTYwLDEyICsxOTYwLDEyIEBAIGJvb2wgU1ZHRWxlbWVudElu
c3RhbmNlOjpoYXNQcm9wZXJ0eShFeGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R0VsZW1lbnRJbnN0YW5jZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdFbGVtZW50SW5zdGFuY2U6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0VsZW1lbnRJbnN0YW5jZT4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdFbGVtZW50SW5zdGFuY2U6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxlbWVudEluc3RhbmNl
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKEtET006OkV2
ZW50VGFyZ2V0OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBLRE9NOjpFdmVudFRhcmdldDo6
Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0xOTgwLDEwICsxOTgw
LDEwIEBAIGJvb2wgU1ZHRWxlbWVudEluc3RhbmNlOjpwdXQoUFVUX01FVEhPRF8KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdFbGVtZW50SW5zdGFuY2U6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdFbGVtZW50SW5zdGFuY2U6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJl
dGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5h
bWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0Vs
ZW1lbnRJbnN0YW5jZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0xOTkxLDcgKzE5
OTEsNyBAQCBPYmplY3RJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZTo6YnJpZGdlKEV4CiAgICAgcmV0
dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdFbGVtZW50SW5zdGFuY2U+KHAxLHN0YXRpY19j
YXN0PFNWR0VsZW1lbnRJbnN0YW5jZTo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdF
bGVtZW50SW5zdGFuY2U6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0VsZW1lbnRJbnN0YW5jZT4ocDEsc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudEluc3RhbmNlOjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIwMDAsMTIgKzIwMDAs
MTIgQEAgYm9vbCBTVkdFbGVtZW50SW5zdGFuY2VMaXN0OjpoYXNQcm9wZXJ0eQogewogICAgIGNv
bnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdFbGVtZW50SW5zdGFuY2VM
aXN0OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0
IHByb3RvID0gU1ZHRWxlbWVudEluc3RhbmNlTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihw
cm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBTVkdFbGVtZW50SW5zdGFuY2VMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50SW5zdGFuY2VMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHRWxlbWVudEluc3RhbmNl
TGlzdFByb3RvRnVuYyxTVkdFbGVtZW50SW5zdGFuY2VMaXN0PihwMSxwMiwmc19oYXNoVGFibGUs
dGhpcyxwMyk7CiB9CkBAIC0yMDE3LDE4ICsyMDE3LDE4IEBAIFNWR0VsZW1lbnRJbnN0YW5jZUxp
c3QgU1ZHRWxlbWVudEluc3RhbmMKICAgICByZXR1cm4gU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6
bnVsbDsKIH0KIAotVmFsdWUgU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50SW5zdGFuY2VMaXN0Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9
IFNWR0VsZW1lbnRJbnN0YW5jZUxpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAg
KnByb3RvID0gU1ZHRWxlbWVudEluc3RhbmNlTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihw
cm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAg
UV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR0Vs
ZW1lbnRJbnN0YW5jZUxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpTVkdFbGVtZW50SW5zdGFuY2VMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIFNWR0VsZW1lbnRJbnN0YW5jZUxpc3RQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1
cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdFbGVtZW50SW5zdGFuY2VMaXN0OjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIwMzYsNyArMjAzNiw3IEBAIE9iamVjdEltcCAqU1ZH
RWxlbWVudEluc3RhbmNlTGlzdDo6YnJpZGcKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRn
ZTxTVkdFbGVtZW50SW5zdGFuY2VMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdFbGVtZW50SW5zdGFu
Y2VMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHRWxlbWVudEluc3RhbmNl
TGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdFbGVtZW50SW5z
dGFuY2VMaXN0OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
OjpjYWNoZURPTU9iamVjdDxTVkdFbGVtZW50SW5zdGFuY2VMaXN0PihwMSxzdGF0aWNfY2FzdDxT
VkdFbGVtZW50SW5zdGFuY2VMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTIwNTQsMTIg
KzIwNTQsMTIgQEAgYm9vbCBTVkdFbGxpcHNlRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlYwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRWxsaXBzZUVsZW1lbnQ6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxsaXBzZUVsZW1lbnQ6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0Vs
bGlwc2VFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNW
R0VsbGlwc2VFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0VsbGlwc2VFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNW
R0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTIwODMsMTAgKzIwODMsMTAgQEAgYm9vbCBTVkdFbGxp
cHNlRWxlbWVudDo6cHV0KFBVVF9NRVRIT0RfQQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2Jq
ZWN0IFNWR0VsbGlwc2VFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHRWxsaXBzZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0VsbGlwc2VFbGVtZW50OjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTIwOTQsNyArMjA5NCw3IEBAIE9iamVjdEltcCAqU1ZH
RWxsaXBzZUVsZW1lbnQ6OmJyaWRnZShFeGUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJp
ZGdlPFNWR0VsbGlwc2VFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdFbGxpcHNlRWxlbWVudDo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0VsbGlwc2VFbGVtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0VsbGlwc2VFbGVtZW50OjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdF
bGxpcHNlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRWxsaXBzZUVsZW1lbnQ6OlByaXZhdGUg
Kj4oZCkpOwogfQpAQCAtMjEwNywxMiArMjEwNywxMiBAQCBib29sIFNWR0V2ZW50OjpoYXNQcm9w
ZXJ0eShFeGVjU3RhdGUgKnAxCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdFdmVu
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdFdmVudDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8
U1ZHRXZlbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHRXZl
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRXZl
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoS0RPTTo6
RXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIEtET006OkV2ZW50OjpnZXQocDEscDIs
cDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTIxMjQsMTAgKzIxMjQsMTAgQEAgYm9v
bCBTVkdFdmVudDo6cHV0KFBVVF9NRVRIT0RfQVJHUykKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LU9iamVjdCBTVkdFdmVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJ
bXAgKlNWR0V2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpTVkdFdmVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC0yMTM1LDcgKzIxMzUsNyBAQCBPYmplY3RJbXAgKlNWR0V2ZW50OjpicmlkZ2UoRXhlY1N0YXRl
ICpwCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdFdmVudD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHRXZlbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdFdmVudDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdFdmVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRXZl
bnQ+KHAxLHN0YXRpY19jYXN0PFNWR0V2ZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTIxNDgs
MjEgKzIxNDgsMjEgQEAgYm9vbCBTVkdFeGNlcHRpb246Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRXhjZXB0aW9uOjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0V4Y2VwdGlvbjo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRXhjZXB0aW9u
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0V4Y2VwdGlvbjo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdFeGNlcHRp
b246OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQo
cDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CiAKLU9iamVjdCBTVkdFeGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpTVkdFeGNlcHRpb246OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQ
cm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAg
IHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0V4Y2VwdGlvbjo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC0yMTcwLDcgKzIxNzAsNyBAQCBPYmplY3RJbXAgKlNWR0V4Y2Vw
dGlvbjo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZH
RXhjZXB0aW9uPihwMSxzdGF0aWNfY2FzdDxTVkdFeGNlcHRpb246OlByaXZhdGUgKj4oaW1wbCkp
OwogfQogCi1WYWx1ZSBTVkdFeGNlcHRpb246OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHRXhjZXB0aW9uOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdFeGNlcHRpb24+KHAxLHN0YXRpY19jYXN0
PFNWR0V4Y2VwdGlvbjo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0yMTgzLDIxICsyMTgzLDIx
IEBAIGJvb2wgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHIKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0VmFsdWU8U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXRJ
blBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgUV9VTlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpw
cm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYo
cDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yMjA1LDcgKzIyMDUsNyBAQCBPYmplY3RJbXAgKlNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0yMjE5LDEyICsyMjE5LDEyIEBAIGJvb2wgU1ZHRkVC
bGVuZEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR0ZFQmxlbmRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0ZFQmxlbmRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGRUJsZW5kRWxlbWVudD4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdGRUJsZW5kRWxlbWVudDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUJsZW5kRWxlbWVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVt
ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMp
OwogICAgIGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpn
ZXQocDEscDIscDMpOwpAQCAtMjI0MCwxMCArMjI0MCwxMCBAQCBib29sIFNWR0ZFQmxlbmRFbGVt
ZW50OjpwdXQoUFVUX01FVEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZH
RkVCbGVuZEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpTVkdGRUJsZW5kRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlw
ZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVCbGVuZEVsZW1lbnQ6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtMjI1MSw3ICsyMjUxLDcgQEAgT2JqZWN0SW1wICpTVkdGRUJsZW5k
RWxlbWVudDo6YnJpZGdlKEV4ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZH
RkVCbGVuZEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFQmxlbmRFbGVtZW50OjpQcml2YXRl
ICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVCbGVuZEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVCbGVuZEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZFQmxlbmRF
bGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUJsZW5kRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CkBAIC0yMjY1LDEyICsyMjY1LDEyIEBAIGJvb2wgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6
Omhhc1Byb3BlcnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGRUNvbG9yTWF0cml4RWxlbWVudD4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUNvbG9y
TWF0cml4RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50Ojpn
ZXQocDEscDIscDMpOwogICAgIGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpnZXQocDEscDIscDMpOwpAQCAtMjI4NiwxMCArMjI4NiwxMCBAQCBib29sIFNW
R0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpwdXQoUFVUX01FCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1PYmplY3QgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjI5Nyw3ICsy
Mjk3LDcgQEAgT2JqZWN0SW1wICpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6YnJpZAogICAgIHJl
dHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ+KHAxLHN0
YXRpY19jYXN0PFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAot
VmFsdWUgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6UHJpdmF0
ZSAqPihkKSk7CiB9CkBAIC0yMzExLDEyICsyMzExLDEyIEBAIGJvb2wgU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQ6Omhhc1AKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFs
dWVJbXAgKlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1
ZSBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50Ojpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAg
IGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpnZXQocDEs
cDIscDMpOwpAQCAtMjMzMiwxMCArMjMzMiwxMCBAQCBib29sIFNWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50OjpwdXQoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVp
bHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51
bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjM0Myw3ICsy
MzQzLDcgQEAgT2JqZWN0SW1wICpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudAogICAgIHJl
dHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ+
KHAxLHN0YXRpY19jYXN0PFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpQcml2YXRlICo+
KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hl
RE9NT2JqZWN0PFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxT
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yMzU3
LDEyICsyMzU3LDEyIEBAIGJvb2wgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpoYXNQcm9wZXJ0eSgK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdl
dFZhbHVlPFNWR0ZFQ29tcG9zaXRlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMp
OwogfQogCi1WYWx1ZSBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYo
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldChwMSxwMixw
Myk7CkBAIC0yMzc4LDEwICsyMzc4LDEwIEBAIGJvb2wgU1ZHRkVDb21wb3NpdGVFbGVtZW50Ojpw
dXQoUFVUX01FVEgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUo
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC0yMzg5LDcgKzIzODksNyBAQCBPYmplY3RJbXAgKlNWR0ZFQ29t
cG9zaXRlRWxlbWVudDo6YnJpZGdlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFQ29tcG9zaXRlRWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9N
T2JqZWN0PFNWR0ZFQ29tcG9zaXRlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVDb21wb3Np
dGVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI0MDMsMTIgKzI0MDMsMTIgQEAgYm9v
bCBTVkdGRUZsb29kRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlYwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotVmFsdWUgU1ZHRkVGbG9vZEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHRkVGbG9vZEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR0ZFRmxvb2RFbGVtZW50Pihw
MSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0ZFRmxvb2RFbGVtZW50
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFRmxv
b2RFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlm
KFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChw
MSxwMixwMyk7CiAgICAgaWYoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OmdldChwMSxwMixwMyk7CkBAIC0yNDI0LDEwICsyNDI0LDEwIEBAIGJvb2wgU1ZHRkVG
bG9vZEVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0EKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9i
amVjdCBTVkdGRUZsb29kRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitP
YmplY3RJbXAgKlNWR0ZFRmxvb2RFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0
UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAg
ICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdGRUZsb29kRWxlbWVudDo6YnJpZGdl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yNDM1LDcgKzI0MzUsNyBAQCBPYmplY3RJbXAgKlNW
R0ZFRmxvb2RFbGVtZW50OjpicmlkZ2UoRXhlCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0Jy
aWRnZTxTVkdGRUZsb29kRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVGbG9vZEVsZW1lbnQ6
OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdGRUZsb29kRWxlbWVudDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUZsb29kRWxlbWVudDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZH
RkVGbG9vZEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFRmxvb2RFbGVtZW50OjpQcml2YXRl
ICo+KGQpKTsKIH0KQEAgLTI0NDQsMTQgKzI0NDQsMTQgQEAgYm9vbCBTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQ6Omhhc1Byb3BlcgogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAg
ICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHRkVHYXVzc2lhbkJsdXJF
bGVtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CiAgICAgaWYoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudFByb3RvRnVuYyxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hU
YWJsZSx0aGlzLHAzKTsKIH0KQEAgLTI0NjMsMTAgKzI0NjMsMTAgQEAgU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50IFNWR0ZFR2F1c3NpYW5CbAogICAgIHJldHVybiBTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQ6Om51bGw7CiB9CiAKLVZhbHVlIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2Jq
ZWN0IHByb3RvID0gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAg
IGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7Cisg
ICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudFByb3RvOjpzZWxm
KHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdl
dChwMSxwMik7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CkBAIC0yNDgxLDEwICsyNDgxLDEwIEBAIGJvb2wgU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpwdXQoUFVUX00KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50UHJvdG86OnNl
bGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0
dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Ojpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI0OTIsNyArMjQ5Miw3IEBAIE9iamVjdEltcCAq
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpicmkKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJX
QnJpZGdlPFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50PihwMSxz
dGF0aWNfY2FzdDxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpA
QCAtMjUwOSwxMiArMjUwOSwxMiBAQCBib29sIFNWR0ZFSW1hZ2VFbGVtZW50OjpoYXNQcm9wZXJ0
eShFeGVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdGRUltYWdlRWxlbWVudDo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRUltYWdlRWxlbWVudDo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0
VmFsdWU8U1ZHRkVJbWFnZUVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0K
IAotVmFsdWUgU1ZHRkVJbWFnZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVJbWFnZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtMjUzNywxMCArMjUzNywxMCBAQCBi
b29sIFNWR0ZFSW1hZ2VFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1PYmplY3QgU1ZHRkVJbWFnZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorT2JqZWN0SW1wICpTVkdGRUltYWdlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVp
bHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51
bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVJbWFnZUVsZW1l
bnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjU0OCw3ICsyNTQ4LDcgQEAgT2Jq
ZWN0SW1wICpTVkdGRUltYWdlRWxlbWVudDo6YnJpZGdlKEV4ZQogICAgIHJldHVybiBuZXcgS0RP
TTo6RE9NUldCcmlkZ2U8U1ZHRkVJbWFnZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFSW1h
Z2VFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVJbWFnZUVsZW1lbnQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVJbWFnZUVsZW1lbnQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9N
T2JqZWN0PFNWR0ZFSW1hZ2VFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRUltYWdlRWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yNTYyLDEyICsyNTYyLDEyIEBAIGJvb2wgU1ZHRkVN
ZXJnZUVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR0ZFTWVyZ2VFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0ZFTWVyZ2VFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdGRU1lcmdlRWxlbWVudD4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdGRU1lcmdlRWxlbWVudDo6Z2V0SW5Q
YXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRU1lcmdlRWxlbWVu
dDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVt
ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMp
OwogICAgIGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpn
ZXQocDEscDIscDMpOwpAQCAtMjU4MywxMCArMjU4MywxMCBAQCBib29sIFNWR0ZFTWVyZ2VFbGVt
ZW50OjpwdXQoUFVUX01FVEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZH
RkVNZXJnZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpTVkdGRU1lcmdlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlw
ZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRkVNZXJnZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3Rh
dGUgKnAxKSBjb25zdApAQCAtMjU5NCw3ICsyNTk0LDcgQEAgT2JqZWN0SW1wICpTVkdGRU1lcmdl
RWxlbWVudDo6YnJpZGdlKEV4ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZH
RkVNZXJnZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFTWVyZ2VFbGVtZW50OjpQcml2YXRl
ICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRkVNZXJnZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVNZXJnZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZFTWVyZ2VF
bGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGRU1lcmdlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CkBAIC0yNjA3LDEyICsyNjA3LDEyIEBAIGJvb2wgU1ZHRkVNZXJnZU5vZGVFbGVtZW50Ojpo
YXNQcm9wZXJ0eSgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZFTWVyZ2VOb2Rl
RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRU1lcmdl
Tm9kZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtE
T006Omxvb2t1cEdldFZhbHVlPFNWR0ZFTWVyZ2VOb2RlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVNZXJnZU5vZGVFbGVt
ZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0Vs
ZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixw
Myk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMjYyNywxMCArMjYyNywxMCBAQCBib29s
IFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6cHV0KFBVVF9NRVRICiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgU1ZHRkVNZXJnZU5vZGVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqU1ZHRkVNZXJnZU5vZGVFbGVtZW50Ojpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdGRU1lcmdl
Tm9kZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjYzOCw3ICsyNjM4
LDcgQEAgT2JqZWN0SW1wICpTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OmJyaWRnZQogICAgIHJldHVy
biBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVNZXJnZU5vZGVFbGVtZW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBT
VkdGRU1lcmdlTm9kZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ+KHAx
LHN0YXRpY19jYXN0PFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBA
IC0yNjUyLDEyICsyNjUyLDEyIEBAIGJvb2wgU1ZHRkVPZmZzZXRFbGVtZW50OjpoYXNQcm9wZXJ0
eShFeGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0ZFT2Zmc2V0RWxlbWVudDo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRU9mZnNldEVsZW1lbnQ6
OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdl
dFZhbHVlPFNWR0ZFT2Zmc2V0RWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBTVkdGRU9mZnNldEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVPZmZzZXRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldChwMSxwMixwMyk7CkBAIC0y
NjczLDEwICsyNjczLDEwIEBAIGJvb2wgU1ZHRkVPZmZzZXRFbGVtZW50OjpwdXQoUFVUX01FVEhP
RF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdGRU9mZnNldEVsZW1lbnQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGRU9mZnNldEVsZW1l
bnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4g
cDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4g
T2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmpl
Y3RJbXAgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC0yNjg0LDcgKzI2ODQsNyBAQCBPYmplY3RJbXAgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6YnJpZGdl
KEV4CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdGRU9mZnNldEVsZW1lbnQ+
KHAxLHN0YXRpY19jYXN0PFNWR0ZFT2Zmc2V0RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAK
LVZhbHVlIFNWR0ZFT2Zmc2V0RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1Zh
bHVlSW1wICpTVkdGRU9mZnNldEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZFT2Zmc2V0RWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHRkVPZmZzZXRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI2
OTgsMTIgKzI2OTgsMTIgQEAgYm9vbCBTVkdGRVRpbGVFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVj
UwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRkVUaWxlRWxlbWVudDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGRVRpbGVFbGVtZW50OjpnZXQoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxT
VkdGRVRpbGVFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVl
IFNWR0ZFVGlsZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHRkVUaWxlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBT
VkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpnZXQocDEscDIscDMpOwpAQCAtMjcxOSwxMCArMjcxOSwx
MCBAQCBib29sIFNWR0ZFVGlsZUVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1PYmplY3QgU1ZHRkVUaWxlRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0ZFVGlsZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCkt
PmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ZFVGlsZUVs
ZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMjczMCw3ICsyNzMwLDcgQEAg
T2JqZWN0SW1wICpTVkdGRVRpbGVFbGVtZW50OjpicmlkZ2UoRXhlYwogICAgIHJldHVybiBuZXcg
S0RPTTo6RE9NUldCcmlkZ2U8U1ZHRkVUaWxlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVU
aWxlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR0ZFVGlsZUVsZW1lbnQ6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVUaWxlRWxlbWVudDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01P
YmplY3Q8U1ZHRkVUaWxlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHRkVUaWxlRWxlbWVudDo6
UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0yNzQ0LDEyICsyNzQ0LDEyIEBAIGJvb2wgU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudDo6aGFzUHJvcGVydHkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVl
IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRkVUdXJidWxlbmNlRWxlbWVu
dD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZH
RWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6Z2V0KHAxLHAyLHAzKTsKQEAgLTI3NjUsMTAgKzI3NjUsMTAg
QEAgYm9vbCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpwdXQoUFVUX01FVAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotT2JqZWN0IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRl
cnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6
ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpT
VkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI3
NzYsNyArMjc3Niw3IEBAIE9iamVjdEltcCAqU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YnJpZGcK
ICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ+
KHAxLHN0YXRpY19jYXN0PFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwog
fQogCi1WYWx1ZSBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OlByaXZh
dGUgKj4oZCkpOwogfQpAQCAtMjc4NSw4ICsyNzg1LDggQEAgYm9vbCBTVkdGaWx0ZXJFbGVtZW50
OjpoYXNQcm9wZXJ0eShFeGVjUwogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZTVkdGaWx0ZXJFbGVtZW50OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkg
cmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHRmlsdGVyRWxlbWVudFByb3RvOjpz
ZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwor
ICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdGaWx0ZXJFbGVtZW50UHJvdG86OnNlbGYocDEpOwor
ICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNW
R0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
ICAgICBpZihTVkdMYW5nU3BhY2U6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CkBA
IC0yNzk1LDcgKzI3OTUsNyBAQCBib29sIFNWR0ZpbHRlckVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4
ZWNTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdGaWx0ZXJFbGVtZW50OjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpbHRlckVsZW1lbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdG
aWx0ZXJFbGVtZW50UHJvdG9GdW5jLFNWR0ZpbHRlckVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJs
ZSx0aGlzLHAzKTsKIH0KQEAgLTI4MDcsMTAgKzI4MDcsMTAgQEAgU1ZHRmlsdGVyRWxlbWVudCBT
VkdGaWx0ZXJFbGVtZW50UHJvdG9GdQogICAgIHJldHVybiBTVkdGaWx0ZXJFbGVtZW50OjpudWxs
OwogfQogCi1WYWx1ZSBTVkdGaWx0ZXJFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpbHRlckVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHRmlsdGVyRWxlbWVu
dFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdGaWx0ZXJFbGVt
ZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHTGFuZ1NwYWNl
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdMYW5nU3BhY2U6OmdldChwMSxwMixwMyk7
CkBAIC0yODMyLDEwICsyODMyLDEwIEBAIGJvb2wgU1ZHRmlsdGVyRWxlbWVudDo6cHV0KFBVVF9N
RVRIT0RfQVIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdGaWx0ZXJFbGVtZW50
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHRmlsdGVyRWxl
bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVy
biBTVkdGaWx0ZXJFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5
bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZH
RmlsdGVyRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yODQzLDcgKzI4
NDMsNyBAQCBPYmplY3RJbXAgKlNWR0ZpbHRlckVsZW1lbnQ6OmJyaWRnZShFeGVjCiAgICAgcmV0
dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdGaWx0ZXJFbGVtZW50PihwMSxzdGF0aWNfY2Fz
dDxTVkdGaWx0ZXJFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHRmlsdGVy
RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdGaWx0ZXJF
bGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpj
YWNoZURPTU9iamVjdDxTVkdGaWx0ZXJFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdGaWx0ZXJF
bGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTI4NTYsMjEgKzI4NTYsMjEgQEAgYm9vbCBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6
bG9va3VwR2V0VmFsdWU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihwMSxw
Miwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHU3R5bGFibGU6Omhhc1Byb3Bl
cnR5KHAxLHAyKSkgcmV0dXJuIFNWR1N0eWxhYmxlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlczo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9i
amVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTI4NzgsNyAr
Mjg3OCw3IEBAIE9iamVjdEltcCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHQKICAgICBy
ZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM+KHAxLHN0YXRpY19jYXN0PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcz4ocDEsc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTI4OTEsMjEgKzI4OTEs
MjEgQEAgYm9vbCBTVkdGaXRUb1ZpZXdCb3g6Omhhc1Byb3BlcnR5KEV4ZWNTdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHRml0VG9WaWV3Qm94OjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR0ZpdFRvVmlld0JveDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHRml0VG9WaWV3Qm94
PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0ZpdFRvVmlld0Jv
eDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdGaXRU
b1ZpZXdCb3g6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9V
TlVTRUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLU9iamVjdCBTVkdGaXRUb1ZpZXdCb3g6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdGaXRUb1ZpZXdCb3g6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1
aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0ZpdFRvVmlld0Jv
eDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0yOTEzLDcgKzI5MTMsNyBAQCBPYmpl
Y3RJbXAgKlNWR0ZpdFRvVmlld0JveDo6YnJpZGdlKEV4ZWNTCiAgICAgcmV0dXJuIG5ldyBLRE9N
OjpET01CcmlkZ2U8U1ZHRml0VG9WaWV3Qm94PihwMSxzdGF0aWNfY2FzdDxTVkdGaXRUb1ZpZXdC
b3g6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdGaXRUb1ZpZXdCb3g6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHRml0VG9WaWV3Qm94OjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxT
VkdGaXRUb1ZpZXdCb3g+KHAxLHN0YXRpY19jYXN0PFNWR0ZpdFRvVmlld0JveDo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CkBAIC0yOTMxLDEyICsyOTMxLDEyIEBAIGJvb2wgU1ZHR0VsZW1lbnQ6Omhh
c1Byb3BlcnR5KEV4ZWNTdGF0ZSAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0dF
bGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0dFbGVtZW50
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBH
ZXRWYWx1ZTxTVkdHRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1W
YWx1ZSBTVkdHRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdHRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVt
ZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6
OmdldChwMSxwMixwMyk7CkBAIC0yOTYwLDEwICsyOTYwLDEwIEBAIGJvb2wgU1ZHR0VsZW1lbnQ6
OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZH
R0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdH
RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJl
dHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAK
IE9iamVjdEltcCAqU1ZHR0VsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
Mjk3MSw3ICsyOTcxLDcgQEAgT2JqZWN0SW1wICpTVkdHRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0
ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHR0VsZW1lbnQ+KHAxLHN0YXRp
Y19jYXN0PFNWR0dFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHR0VsZW1l
bnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHR0VsZW1lbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2Jq
ZWN0PFNWR0dFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdHRWxlbWVudDo6UHJpdmF0ZSAqPihk
KSk7CiB9CkBAIC0yOTg3LDEyICsyOTg3LDEyIEBAIGJvb2wgU1ZHR3JhZGllbnRFbGVtZW50Ojpo
YXNQcm9wZXJ0eShFeGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0dyYWRpZW50
RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdHcmFkaWVu
dEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
Omxvb2t1cEdldFZhbHVlPFNWR0dyYWRpZW50RWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRo
aXMscDMpOwogfQogCi1WYWx1ZSBTVkdHcmFkaWVudEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHR3JhZGllbnRFbGVtZW50OjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0KHAxLHAyLHAzKTsKQEAgLTMwMTAsMTAg
KzMwMTAsMTAgQEAgYm9vbCBTVkdHcmFkaWVudEVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EXwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR0dyYWRpZW50RWxlbWVudDo6cHJvdG90eXBl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR0dyYWRpZW50RWxlbWVudDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50
ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
U1ZHR3JhZGllbnRFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTMwMjEs
NyArMzAyMSw3IEBAIE9iamVjdEltcCAqU1ZHR3JhZGllbnRFbGVtZW50OjpicmlkZ2UoRXgKICAg
ICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR0dyYWRpZW50RWxlbWVudD4ocDEsc3Rh
dGljX2Nhc3Q8U1ZHR3JhZGllbnRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUg
U1ZHR3JhZGllbnRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KlNWR0dyYWRpZW50RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHR3JhZGllbnRFbGVtZW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdHcmFkaWVudEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzA0MCwxMiAr
MzA0MCwxMiBAQCBib29sIFNWR0ltYWdlRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdJbWFnZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHSW1hZ2VFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdJbWFnZUVs
ZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHSW1hZ2VF
bGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R0ltYWdlRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50Ojpn
ZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChw
MSxwMixwMyk7CkBAIC0zMDcwLDEwICszMDcwLDEwIEBAIGJvb2wgU1ZHSW1hZ2VFbGVtZW50Ojpw
dXQoUFVUX01FVEhPRF9BUkcKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdJbWFn
ZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdJ
bWFnZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAg
ICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwog
fQogCiBPYmplY3RJbXAgKlNWR0ltYWdlRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CkBAIC0zMDgxLDcgKzMwODEsNyBAQCBPYmplY3RJbXAgKlNWR0ltYWdlRWxlbWVudDo6YnJp
ZGdlKEV4ZWNTCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdJbWFnZUVsZW1l
bnQ+KHAxLHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAK
LVZhbHVlIFNWR0ltYWdlRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTVkdJbWFnZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0ltYWdlRWxlbWVudD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHSW1hZ2VFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTMwOTQsMTIgKzMwOTQs
MTIgQEAgYm9vbCBTVkdMYW5nU3BhY2U6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHTGFuZ1NwYWNlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKlNWR0xhbmdTcGFjZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHTGFuZ1NwYWNlPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0xhbmdTcGFjZTo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdMYW5nU3BhY2U6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VO
VVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0zMTE2
LDEwICszMTE2LDEwIEBAIGJvb2wgU1ZHTGFuZ1NwYWNlOjpwdXRJblBhcmVudHMoUFVUX01FVEgK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdMYW5nU3BhY2U6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdMYW5nU3BhY2U6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR0xhbmdT
cGFjZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zMTI3LDcgKzMxMjcsNyBAQCBP
YmplY3RJbXAgKlNWR0xhbmdTcGFjZTo6YnJpZGdlKEV4ZWNTdGF0CiAgICAgcmV0dXJuIG5ldyBL
RE9NOjpET01SV0JyaWRnZTxTVkdMYW5nU3BhY2U+KHAxLHN0YXRpY19jYXN0PFNWR0xhbmdTcGFj
ZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0xhbmdTcGFjZTo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdMYW5nU3BhY2U6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR0xhbmdT
cGFjZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHTGFuZ1NwYWNlOjpQcml2YXRlICo+KGltcGwpKTsKIH0K
QEAgLTMxMzYsMTIgKzMxMzYsMTIgQEAgYm9vbCBTVkdMZW5ndGg6Omhhc1Byb3BlcnR5KEV4ZWNT
dGF0ZSAqcAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZT
VkdMZW5ndGg6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBP
YmplY3QgcHJvdG8gPSBTVkdMZW5ndGhQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZH
TGVuZ3RoUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHTGVuZ3RoOjpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0xlbmd0aDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR0xlbmd0
aFByb3RvRnVuYyxTVkdMZW5ndGg+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAg
LTMxNTgsMTAgKzMxNTgsMTAgQEAgU1ZHTGVuZ3RoIEtTVkc6OnRvU1ZHTGVuZ3RoKEtKUzo6RXhl
Y1N0YQogICAgIHJldHVybiBTVkdMZW5ndGg6Om51bGw7CiB9CiAKLVZhbHVlIFNWR0xlbmd0aDo6
Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdMZW5ndGg6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3Rv
ID0gU1ZHTGVuZ3RoUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNW
R0xlbmd0aFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVy
biBVbmRlZmluZWQoKTsKIH0KQEAgLTMxNzcsMTAgKzMxNzcsMTAgQEAgYm9vbCBTVkdMZW5ndGg6
OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EXwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0
IFNWR0xlbmd0aDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNW
R0xlbmd0aDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJl
dHVybiBTVkdMZW5ndGhQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1p
Y0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdMZW5n
dGg6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzE4OCw3ICszMTg4LDcgQEAgT2Jq
ZWN0SW1wICpTVkdMZW5ndGg6OmJyaWRnZShFeGVjU3RhdGUgKgogICAgIHJldHVybiBuZXcgS0RP
TTo6RE9NUldCcmlkZ2U8U1ZHTGVuZ3RoPihwMSxzdGF0aWNfY2FzdDxTVkdMZW5ndGg6OlByaXZh
dGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdMZW5ndGg6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHTGVuZ3RoOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdMZW5ndGg+KHAxLHN0YXRpY19j
YXN0PFNWR0xlbmd0aDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0zMTk3LDEyICszMTk3LDEy
IEBAIGJvb2wgU1ZHTGVuZ3RoTGlzdDo6aGFzUHJvcGVydHkoRXhlY1N0YXQKIHsKICAgICBjb25z
dCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHTGVuZ3RoTGlzdDo6c19oYXNo
VGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNW
R0xlbmd0aExpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHTGVuZ3RoTGlzdFBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0xlbmd0aExpc3Q6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGVuZ3RoTGlzdDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR0xlbmd0
aExpc3RQcm90b0Z1bmMsU1ZHTGVuZ3RoTGlzdD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMp
OwogfQpAQCAtMzIxNCwxOCArMzIxNCwxOCBAQCBTVkdMZW5ndGhMaXN0IFNWR0xlbmd0aExpc3RQ
cm90b0Z1bmM6OmNhCiAgICAgcmV0dXJuIFNWR0xlbmd0aExpc3Q6Om51bGw7CiB9CiAKLVZhbHVl
IFNWR0xlbmd0aExpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHTGVuZ3RoTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdMZW5ndGhMaXN0UHJvdG86OnNlbGYocDEpOwotICAg
IGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7Cisg
ICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0xlbmd0aExpc3RQcm90bzo6c2VsZihwMSk7CisgICAg
aWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwog
ICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBT
VkdMZW5ndGhMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAq
U1ZHTGVuZ3RoTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYo
cDEpIHJldHVybiBTVkdMZW5ndGhMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmpl
Y3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdElt
cCAqU1ZHTGVuZ3RoTGlzdDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zMjMzLDcg
KzMyMzMsNyBAQCBPYmplY3RJbXAgKlNWR0xlbmd0aExpc3Q6OmJyaWRnZShFeGVjU3RhCiAgICAg
cmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHTGVuZ3RoTGlzdD4ocDEsc3RhdGljX2Nhc3Q8
U1ZHTGVuZ3RoTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0xlbmd0aExp
c3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGVuZ3RoTGlzdDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01P
YmplY3Q8U1ZHTGVuZ3RoTGlzdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHTGVuZ3RoTGlzdDo6UHJpdmF0
ZSAqPihpbXBsKSk7CiB9CkBAIC0zMjUxLDEyICszMjUxLDEyIEBAIGJvb2wgU1ZHTGluZUVsZW1l
bnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R0xpbmVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0xp
bmVFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
Ojpsb29rdXBHZXRWYWx1ZTxTVkdMaW5lRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQogCi1WYWx1ZSBTVkdMaW5lRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdMaW5lRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC0zMjgwLDEwICszMjgwLDEwIEBA
IGJvb2wgU1ZHTGluZUVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLU9iamVjdCBTVkdMaW5lRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR0xpbmVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGlu
T2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgp
KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdMaW5lRWxlbWVudDo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zMjkxLDcgKzMyOTEsNyBAQCBPYmplY3RJbXAg
KlNWR0xpbmVFbGVtZW50OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01S
V0JyaWRnZTxTVkdMaW5lRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHTGluZUVsZW1lbnQ6OlBy
aXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdMaW5lRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdMaW5lRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHTGluZUVsZW1l
bnQ+KHAxLHN0YXRpY19jYXN0PFNWR0xpbmVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAg
LTMzMDQsMTIgKzMzMDQsMTIgQEAgYm9vbCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6Omhhc1By
b3BlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR0xpbmVhckdyYWRp
ZW50RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6bG9va3VwR2V0VmFsdWU8U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50PihwMSxwMiwmc19oYXNo
VGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6Z2V0
SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdMaW5lYXJHcmFk
aWVudEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAg
aWYoU1ZHR3JhZGllbnRFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdHcmFk
aWVudEVsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAt
MzMyNCwxMCArMzMyNCwxMCBAQCBib29sIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6cHV0KFBV
VF9NCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmJyaWRnZShFeGVj
U3RhdGUgKnAxKSBjb25zdApAQCAtMzMzNSw3ICszMzM1LDcgQEAgT2JqZWN0SW1wICpTVkdMaW5l
YXJHcmFkaWVudEVsZW1lbnQ6OmJyaQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8
U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpjYWNoZURPTU9iamVjdDxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ+KHAxLHN0YXRpY19j
YXN0PFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zMzQ0
LDEyICszMzQ0LDEyIEBAIGJvb2wgU1ZHTG9jYXRhYmxlOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUK
IHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHTG9jYXRh
YmxlOjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0
IHByb3RvID0gU1ZHTG9jYXRhYmxlUHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR0xv
Y2F0YWJsZVByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR0xvY2F0YWJs
ZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdMb2NhdGFibGU6Omdl
dChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxT
VkdMb2NhdGFibGVQcm90b0Z1bmMsU1ZHTG9jYXRhYmxlPihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CkBAIC0zMzk1LDE4ICszMzk1LDE4IEBAIFNWR0xvY2F0YWJsZSBTVkdMb2NhdGFi
bGVQcm90b0Z1bmM6OmNhc3QKICAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpudWxsOwogfQogCi1W
YWx1ZSBTVkdMb2NhdGFibGU6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHTG9jYXRhYmxlOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewotICAgIE9iamVjdCBwcm90byA9IFNWR0xvY2F0YWJsZVByb3RvOjpzZWxmKHAxKTsKLSAg
ICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOwor
ICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdMb2NhdGFibGVQcm90bzo6c2VsZihwMSk7CisgICAg
aWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwog
ICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBT
VkdMb2NhdGFibGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpT
VkdMb2NhdGFibGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAx
KSByZXR1cm4gU1ZHTG9jYXRhYmxlUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6
OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAq
U1ZHTG9jYXRhYmxlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM0MTQsNyArMzQx
NCw3IEBAIE9iamVjdEltcCAqU1ZHTG9jYXRhYmxlOjpicmlkZ2UoRXhlY1N0YXQKICAgICByZXR1
cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdMb2NhdGFibGU+KHAxLHN0YXRpY19jYXN0PFNWR0xv
Y2F0YWJsZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR0xvY2F0YWJsZTo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdMb2NhdGFibGU6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNW
R0xvY2F0YWJsZT4ocDEsc3RhdGljX2Nhc3Q8U1ZHTG9jYXRhYmxlOjpQcml2YXRlICo+KGltcGwp
KTsKIH0KQEAgLTM0MjMsOCArMzQyMyw4IEBAIGJvb2wgU1ZHTWFya2VyRWxlbWVudDo6aGFzUHJv
cGVydHkoRXhlY1MKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRy
eSgmU1ZHTWFya2VyRWxlbWVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0
cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR01hcmtlckVsZW1lbnRQcm90bzo6c2VsZihwMSk7
Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmpl
Y3RJbXAgKnByb3RvID0gU1ZHTWFya2VyRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihw
cm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdFbGVtZW50
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYo
U1ZHRml0VG9WaWV3Qm94OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwpAQCAtMzQz
Myw3ICszNDMzLDcgQEAgYm9vbCBTVkdNYXJrZXJFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjUwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHTWFya2VyRWxlbWVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdNYXJrZXJFbGVtZW50OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHTWFya2Vy
RWxlbWVudFByb3RvRnVuYyxTVkdNYXJrZXJFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CkBAIC0zNDQ1LDEwICszNDQ1LDEwIEBAIFNWR01hcmtlckVsZW1lbnQgU1ZHTWFy
a2VyRWxlbWVudFByb3RvRnUKICAgICByZXR1cm4gU1ZHTWFya2VyRWxlbWVudDo6bnVsbDsKIH0K
IAotVmFsdWUgU1ZHTWFya2VyRWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpTVkdNYXJrZXJFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR01hcmtlckVsZW1lbnRQcm90
bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJv
dG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHTWFya2VyRWxlbWVudFBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8tPmdldChwMSxwMik7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0ZpdFRvVmlld0JveDo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRml0VG9WaWV3Qm94OjpnZXQocDEscDIscDMp
OwpAQCAtMzQ3MCwxMCArMzQ3MCwxMCBAQCBib29sIFNWR01hcmtlckVsZW1lbnQ6OnB1dChQVVRf
TUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHTWFya2VyRWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR01hcmtlckVs
ZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gU1ZHTWFya2VyRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0Ojpk
eW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNW
R01hcmtlckVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzQ4MSw3ICsz
NDgxLDcgQEAgT2JqZWN0SW1wICpTVkdNYXJrZXJFbGVtZW50OjpicmlkZ2UoRXhlYwogICAgIHJl
dHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHTWFya2VyRWxlbWVudD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHTWFya2VyRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR01hcmtl
ckVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHTWFya2Vy
RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6
Y2FjaGVET01PYmplY3Q8U1ZHTWFya2VyRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHTWFya2Vy
RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC0zNDkwLDEyICszNDkwLDEyIEBAIGJvb2wg
U1ZHTWF0cml4OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKnAKIHsKICAgICBjb25zdCBIYXNoRW50
cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHTWF0cml4OjpzX2hhc2hUYWJsZSxwMik7CiAg
ICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHTWF0cml4UHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR01hdHJpeFByb3RvOjpzZWxmKHAxKTsKKyAgICBp
Zihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVZhbHVlIFNWR01hdHJpeDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1Zh
bHVlSW1wICpTVkdNYXRyaXg6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006Omxvb2t1cEdldDxTVkdNYXRyaXhQcm90b0Z1bmMsU1ZHTWF0cml4PihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zNTEyLDEwICszNTEyLDEwIEBAIFNWR01hdHJp
eCBLU1ZHOjp0b1NWR01hdHJpeChLSlM6OkV4ZWNTdGEKICAgICByZXR1cm4gU1ZHTWF0cml4Ojpu
dWxsOwogfQogCi1WYWx1ZSBTVkdNYXRyaXg6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHTWF0cml4OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR01hdHJpeFByb3RvOjpzZWxmKHAxKTsK
LSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIp
OworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdNYXRyaXhQcm90bzo6c2VsZihwMSk7CisgICAg
aWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwog
ICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC0zNTMxLDEw
ICszNTMxLDEwIEBAIGJvb2wgU1ZHTWF0cml4OjpwdXRJblBhcmVudHMoUFVUX01FVEhPRF8KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdNYXRyaXg6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdNYXRyaXg6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHTWF0cml4UHJvdG86OnNlbGYocDEp
OwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5V
TEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHTWF0cml4OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29u
c3QKQEAgLTM1NDIsNyArMzU0Miw3IEBAIE9iamVjdEltcCAqU1ZHTWF0cml4OjpicmlkZ2UoRXhl
Y1N0YXRlICoKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR01hdHJpeD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHTWF0cml4OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZH
TWF0cml4OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR01hdHJpeDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01P
YmplY3Q8U1ZHTWF0cml4PihwMSxzdGF0aWNfY2FzdDxTVkdNYXRyaXg6OlByaXZhdGUgKj4oaW1w
bCkpOwogfQpAQCAtMzU1NSw3ICszNTU1LDcgQEAgYm9vbCBTVkdOdW1iZXI6Omhhc1Byb3BlcnR5
KEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHTnVtYmVyOjpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR051bWJlcjo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
TnVtYmVyPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zNTY3LDcgKzM1Njcs
NyBAQCBTVkdOdW1iZXIgS1NWRzo6dG9TVkdOdW1iZXIoS0pTOjpFeGVjU3RhCiAgICAgcmV0dXJu
IFNWR051bWJlcjo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHTnVtYmVyOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR051bWJlcjo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsg
UV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTM1ODQsMTAgKzM1ODQs
MTAgQEAgYm9vbCBTVkdOdW1iZXI6OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EXwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR051bWJlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR051bWJlcjo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHTnVtYmVyOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTM1OTUsNyArMzU5NSw3IEBAIE9iamVjdEltcCAqU1ZHTnVtYmVy
OjpicmlkZ2UoRXhlY1N0YXRlICoKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNW
R051bWJlcj4ocDEsc3RhdGljX2Nhc3Q8U1ZHTnVtYmVyOjpQcml2YXRlICo+KGltcGwpKTsKIH0K
IAotVmFsdWUgU1ZHTnVtYmVyOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KlNWR051bWJlcjo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHTnVtYmVyPihwMSxzdGF0aWNfY2FzdDxTVkdOdW1iZXI6OlBy
aXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMzYwNCwxMiArMzYwNCwxMiBAQCBib29sIFNWR051bWJl
ckxpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0CiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0g
TG9va3VwOjpmaW5kRW50cnkoJlNWR051bWJlckxpc3Q6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBp
ZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdOdW1iZXJMaXN0UHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7
CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR051bWJlckxpc3RQcm90bzo6c2VsZihwMSk7Cisg
ICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdOdW1iZXJMaXN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKlNWR051bWJlckxpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdOdW1iZXJMaXN0UHJvdG9GdW5jLFNW
R051bWJlckxpc3Q+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTM2MjEsMTgg
KzM2MjEsMTggQEAgU1ZHTnVtYmVyTGlzdCBTVkdOdW1iZXJMaXN0UHJvdG9GdW5jOjpjYQogICAg
IHJldHVybiBTVkdOdW1iZXJMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBTVkdOdW1iZXJMaXN0Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR051bWJlckxp
c3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gU1ZHTnVtYmVyTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJv
dG8gPSBTVkdOdW1iZXJMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7
CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHTnVtYmVyTGlzdDo6cHJv
dG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR051bWJlckxpc3Q6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHTnVt
YmVyTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChO
dWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR051bWJlckxpc3Q6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzY0MCw3ICszNjQwLDcgQEAgT2JqZWN0
SW1wICpTVkdOdW1iZXJMaXN0OjpicmlkZ2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NQnJpZGdlPFNWR051bWJlckxpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR051bWJlckxpc3Q6OlBy
aXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdOdW1iZXJMaXN0OjpjYWNoZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR051bWJlckxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR051bWJlckxp
c3Q+KHAxLHN0YXRpY19jYXN0PFNWR051bWJlckxpc3Q6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpA
QCAtMzY0OSwxMyArMzY0OSwxMyBAQCBib29sIFNWR1BhaW50OjpoYXNQcm9wZXJ0eShFeGVjU3Rh
dGUgKnAxCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9va3VwOjpmaW5kRW50cnkoJlNW
R1BhaW50OjpzX2hhc2hUYWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2Jq
ZWN0IHByb3RvID0gU1ZHUGFpbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHUGFp
bnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIHRydWU7CiAgICAgaWYoU1ZHQ29sb3I6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRy
dWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYWludDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYWludDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR1BhaW50UHJvdG9GdW5jLFNW
R1BhaW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC0zNjY3LDEwICszNjY3
LDEwIEBAIFNWR1BhaW50IFNWR1BhaW50UHJvdG9GdW5jOjpjYXN0KEtKUzo6RXgKICAgICByZXR1
cm4gU1ZHUGFpbnQ6Om51bGw7CiB9CiAKLVZhbHVlIFNWR1BhaW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhaW50OjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90byA9IFNWR1BhaW50UHJvdG86
OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3Rv
LmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1BhaW50UHJvdG86OnNlbGYo
cDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0
KHAxLHAyKTsKICAgICBpZihTVkdDb2xvcjo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZH
Q29sb3I6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtMzY4
NCwxMCArMzY4NCwxMCBAQCBib29sIFNWR1BhaW50OjpwdXQoUFVUX01FVEhPRF9BUkdTKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhaW50Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGFpbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHUGFpbnRQcm90bzo6c2VsZihwMSk7Ci0g
ICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsK
IH0KIAogT2JqZWN0SW1wICpTVkdQYWludDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBA
IC0zNjk1LDcgKzM2OTUsNyBAQCBPYmplY3RJbXAgKlNWR1BhaW50OjpicmlkZ2UoRXhlY1N0YXRl
ICpwCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYWludD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHUGFpbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdQYWludDo6Y2Fj
aGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYWludDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGFp
bnQ+KHAxLHN0YXRpY19jYXN0PFNWR1BhaW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTM3MDQs
OCArMzcwNCw4IEBAIGJvb2wgU1ZHUGF0aEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKIHsK
ICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHUGF0aEVsZW1l
bnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3Qg
cHJvdG8gPSBTVkdQYXRoRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdQ
YXRoRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdBbmltYXRlZFBhdGhEYXRhOjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAx
LHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKQEAgLTM3MTYsNyArMzcxNiw3IEBAIGJv
b2wgU1ZHUGF0aEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIFNWR1BhdGhFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR1BhdGhFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHUGF0aEVsZW1lbnRQcm90b0Z1bmMsU1ZHUGF0
aEVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTM3MjgsMTAgKzM3
MjgsMTAgQEAgU1ZHUGF0aEVsZW1lbnQgU1ZHUGF0aEVsZW1lbnRQcm90b0Z1bmM6OgogICAgIHJl
dHVybiBTVkdQYXRoRWxlbWVudDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHUGF0aEVsZW1lbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aEVsZW1l
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gU1ZHUGF0aEVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnBy
b3RvID0gU1ZHUGF0aEVsZW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKFNWR0FuaW1h
dGVkUGF0aERhdGE6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0FuaW1hdGVkUGF0aERh
dGE6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtMzc1NSwxMCArMzc1NSwxMCBAQCBi
b29sIFNWR1BhdGhFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUkdTCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1PYmplY3QgU1ZHUGF0aEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorT2JqZWN0SW1wICpTVkdQYXRoRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBTVkdQYXRoRWxlbWVudFByb3RvOjpzZWxmKHAx
KTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBO
VUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpw
MSkgY29uc3QKQEAgLTM3NjYsNyArMzc2Niw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aEVsZW1lbnQ6
OmJyaWRnZShFeGVjU3QKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhF
bGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9
CiAKLVZhbHVlIFNWR1BhdGhFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFs
dWVJbXAgKlNWR1BhdGhFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoRWxlbWVudD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHUGF0aEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtMzc3OSw3ICszNzc5LDcg
QEAgYm9vbCBTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdQYXRoU2VnOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnPihwMSxwMiwmc19oYXNoVGFi
bGUsdGhpcyxwMyk7CiB9CkBAIC0zODI5LDE2ICszODI5LDE2IEBAIFNWR1BhdGhTZWcgS1NWRzo6
dG9TVkdQYXRoU2VnKEtKUzo6RXhlY1MKICAgICByZXR1cm4gU1ZHUGF0aFNlZzo6bnVsbDsKIH0K
IAotVmFsdWUgU1ZHUGF0aFNlZzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdQYXRoU2VnOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIFFfVU5VU0VEKHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZzo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWc6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCkt
PmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWc6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzg0Niw3ICszODQ2LDcgQEAgT2JqZWN0
SW1wICpTVkdQYXRoU2VnOjpicmlkZ2UoRXhlY1N0YXRlIAogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NQnJpZGdlPFNWR1BhdGhTZWc+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWc6OlByaXZhdGUg
Kj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWc6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWc+KHAxLHN0YXRpY19j
YXN0PFNWR1BhdGhTZWc6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtMzg1OSwxMiArMzg1OSwx
MiBAQCBib29sIFNWR1BhdGhTZWdBcmNBYnM6Omhhc1Byb3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQXJjQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdBcmNBYnM6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1BhdGhTZWdBcmNB
YnM+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0Fy
Y0Ficzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQ
YXRoU2VnQXJjQWJzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6Omdl
dChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzg4MSwxMCArMzg4MSwx
MCBAQCBib29sIFNWR1BhdGhTZWdBcmNBYnM6OnB1dEluUGFyZW50cyhQVVRfCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0FyY0Ficzo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdBcmNBYnM6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCkt
PmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdB
cmNBYnM6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtMzg5Miw3ICszODkyLDcgQEAg
T2JqZWN0SW1wICpTVkdQYXRoU2VnQXJjQWJzOjpicmlkZ2UoRXhlYwogICAgIHJldHVybiBuZXcg
S0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ0FyY0Ficz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0
aFNlZ0FyY0Ficzo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdBcmNB
YnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0FyY0Fi
czo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVE
T01PYmplY3Q8U1ZHUGF0aFNlZ0FyY0Ficz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0FyY0Fi
czo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC0zOTA1LDEyICszOTA1LDEyIEBAIGJvb2wgU1ZH
UGF0aFNlZ0FyY1JlbDo6aGFzUHJvcGVydHkoRXhlY1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LVZhbHVlIFNWR1BhdGhTZWdBcmNSZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHUGF0aFNlZ0FyY1JlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0FyY1JlbD4ocDEscDIsJnNf
aGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQXJjUmVsOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdBcmNSZWw6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNl
Zzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsK
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0zOTI3LDEwICszOTI3LDEwIEBAIGJvb2wgU1ZH
UGF0aFNlZ0FyY1JlbDo6cHV0SW5QYXJlbnRzKFBVVF8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LU9iamVjdCBTVkdQYXRoU2VnQXJjUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K09iamVjdEltcCAqU1ZHUGF0aFNlZ0FyY1JlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0FyY1JlbDo6YnJpZGdl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC0zOTM4LDcgKzM5MzgsNyBAQCBPYmplY3RJbXAgKlNW
R1BhdGhTZWdBcmNSZWw6OmJyaWRnZShFeGVjCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0Jy
aWRnZTxTVkdQYXRoU2VnQXJjUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQXJjUmVsOjpQ
cml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0FyY1JlbDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQXJjUmVsOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQ
YXRoU2VnQXJjUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQXJjUmVsOjpQcml2YXRlICo+
KGltcGwpKTsKIH0KQEAgLTM5NTEsMTIgKzM5NTEsMTIgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0
b0N1YmljQWJzOjpoYXNQcm9wZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY0Ficzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
QWJzPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJl
dHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsK
QEAgLTM5NzMsMTAgKzM5NzMsMTAgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpw
dXRJblBhcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90
eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1
cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTM5ODQsNyArMzk4NCw3IEBAIE9iamVjdEltcCAq
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficzo6YnIKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJX
QnJpZGdlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNBYnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRo
U2VnQ3VydmV0b0N1YmljQWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAg
KlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNB
YnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OlByaXZhdGUgKj4o
aW1wbCkpOwogfQpAQCAtMzk5NywxMiArMzk5NywxMiBAQCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRv
Q3ViaWNSZWw6Omhhc1Byb3BlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRo
U2VnQ3VydmV0b0N1YmljUmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNS
ZWw+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1JlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0
dXJuIFNWR1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpA
QCAtNDAxOSwxMCArNDAxOSwxMCBAQCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OnB1
dEluUGFyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1JlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1Bh
dGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5
cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVy
biBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDAzMCw3ICs0MDMwLDcgQEAgT2JqZWN0SW1wICpT
VkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsOjpicgogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldC
cmlkZ2U8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1JlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAq
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Jl
bD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6UHJpdmF0ZSAqPihp
bXBsKSk7CiB9CkBAIC00MDQzLDEyICs0MDQzLDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1Ntb290aEFiczo6aGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1Ntb290aEFicz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1W
YWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhB
YnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0
aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAz
KTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00MDY1LDEwICs0MDY1LDEwIEBAIGJvb2wg
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6cHUKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU9iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aEFiczo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVy
biBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVy
biBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9i
amVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC00MDc2LDcgKzQwNzYsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdD
dXJ2ZXRvQ3ViaWNTbW9vdGhBCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3Vy
dmV0b0N1YmljU21vb3RoQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1Zh
bHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1
YmljU21vb3RoQWJzOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQwODksMTIgKzQwODksMTIg
QEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpoYQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoUmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjps
b29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsPihwMSxwMiwmc19o
YXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGhSZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAg
LTQxMTEsMTAgKzQxMTEsMTAgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVs
OjpwdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNTbW9vdGhSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpT
VkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkg
Y29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2Jq
ZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsK
KyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
U21vb3RoUmVsOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQxMjIsNyArNDEyMiw3
IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFIKICAgICByZXR1cm4g
bmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw+KHAx
LHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OlByaXZhdGUgKj4o
aW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpjYWNo
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw+KHAxLHN0YXRp
Y19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6OlByaXZhdGUgKj4oaW1wbCkp
OwogfQpAQCAtNDEzNSwxMiArNDEzNSwxMiBAQCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljQWJzOjpoYXNQCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY0Ficzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpT
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNBYnM+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CkBAIC00MTU3LDEwICs0MTU3LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNBYnM6OnB1dEkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY0Ficzo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00MTY4
LDcgKzQxNjgsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzCiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y0Ficz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OlByaXZh
dGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1
YWRyYXRpY0Ficzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM+KHAxLHN0YXRp
Y19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpQcml2YXRlICo+KGltcGwpKTsK
IH0KQEAgLTQxODEsMTIgKzQxODEsMTIgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1JlbDo6aGFzUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNSZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljUmVsPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR1BhdGhTZWc6Omhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwpAQCAtNDIwMywxMCArNDIwMywxMCBAQCBib29sIFNWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljUmVsOjpwdXRJCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUGF0
aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNSZWw6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDIxNCw3
ICs0MjE0LDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbAogICAg
IHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNS
ZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpQcml2YXRl
ICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsPihwMSxzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9
CkBAIC00MjI3LDEyICs0MjI3LDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhBYnMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljU21vb3RoQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpnZXQoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aEFicz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQog
Ci1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY1Ntb290aEFiczo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpn
ZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQyNDksMTAgKzQyNDks
MTAgQEAgYm9vbCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJz
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0N1
cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90
b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21v
b3RoQWJzOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQyNjAsNyArNDI2MCw3IEBA
IE9iamVjdEltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW8KICAgICByZXR1cm4gbmV3
IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzPihw
MSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6UHJpdmF0
ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3Ro
QWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Nt
b290aEFicz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhB
YnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDI3MywxMiArNDI3MywxMiBAQCBib29sIFNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290
aFJlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9v
a3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhSZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OmdldEluUGFyZW50cyhHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CkBAIC00Mjk1LDEwICs0Mjk1LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNTbW9vdGhSZWwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpwcm90b3R5
cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnBy
ZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHlu
YW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CkBAIC00MzA2LDcgKzQzMDYsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljU21vCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aFJlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNTbW9vdGhSZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
K1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZH
UGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQz
MTksMTIgKzQzMTksMTIgQEAgYm9vbCBTVkdQYXRoU2VnTGluZXRvQWJzOjpoYXNQcm9wZXJ0eShF
eAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6Z2V0
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvQWJzOjpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRW
YWx1ZTxTVkdQYXRoU2VnTGluZXRvQWJzPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9BYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0Ficzo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKQEAgLTQzNDEsMTAgKzQzNDEsMTAgQEAgYm9vbCBTVkdQYXRoU2VnTGluZXRvQWJz
OjpwdXRJblBhcmVudHMoUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhT
ZWdMaW5ldG9BYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpT
VkdQYXRoU2VnTGluZXRvQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBl
KCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4g
TlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvQWJzOjpicmlkZ2UoRXhlY1N0
YXRlICpwMSkgY29uc3QKQEAgLTQzNTIsNyArNDM1Miw3IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNl
Z0xpbmV0b0Ficzo6YnJpZGdlKEUKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNW
R1BhdGhTZWdMaW5ldG9BYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9BYnM6OlBy
aXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvQWJzOjpjYWNoZShF
eGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9BYnM6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR1BhdGhTZWdMaW5ldG9BYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9BYnM6
OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDM2NSwxMiArNDM2NSwxMiBAQCBib29sIFNWR1Bh
dGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpoYXNQCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1W
YWx1ZSBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OmdldEluUGFyZW50cyhH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWxBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZH
UGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAy
LHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00Mzg3LDEwICs0Mzg3LDEwIEBAIGJv
b2wgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6OnB1dEkKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFs
QWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CkBAIC00Mzk4LDcgKzQzOTgsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5l
dG9Ib3Jpem9udGFsQWJzCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRo
U2VnTGluZXRvSG9yaXpvbnRhbEFicz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWxBYnM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGlu
ZXRvSG9yaXpvbnRhbEFiczo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpT
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6
b250YWxBYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpQ
cml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQ0MTEsMTIgKzQ0MTEsMTIgQEAgYm9vbCBTVkdQYXRo
U2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6aGFzUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFs
dWUgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1Bh
dGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9
CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpnZXRJblBhcmVudHMoR0VU
X01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFs
UmVsOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR1Bh
dGhTZWc6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR1BhdGhTZWc6OmdldChwMSxwMixw
Myk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNDQzMywxMCArNDQzMywxMCBAQCBib29s
IFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpwdXRJCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1PYmplY3QgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJl
bDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBw
MS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtNDQ0NCw3ICs0NDQ0LDcgQEAgT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRv
SG9yaXpvbnRhbFJlbAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxSZWw+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jp
em9udGFsUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0
b0hvcml6b250YWxSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9u
dGFsUmVsPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDo6UHJp
dmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00NDU3LDEyICs0NDU3LDEyIEBAIGJvb2wgU1ZHUGF0aFNl
Z0xpbmV0b1JlbDo6aGFzUHJvcGVydHkoRXgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVl
IFNWR1BhdGhTZWdMaW5ldG9SZWw6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAg
ICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0xpbmV0b1JlbD4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvUmVsOjpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdM
aW5ldG9SZWw6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYo
U1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAx
LHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00NDc5LDEwICs0NDc5LDEwIEBA
IGJvb2wgU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6cHV0SW5QYXJlbnRzKFAKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnTGluZXRvUmVsOjpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIo
KS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNl
Z0xpbmV0b1JlbDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00NDkwLDcgKzQ0OTAs
NyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9SZWw6OmJyaWRnZShFCiAgICAgcmV0dXJu
IG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnTGluZXRvUmVsPihwMSxzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnTGluZXRvUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZH
UGF0aFNlZ0xpbmV0b1JlbDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpT
VkdQYXRoU2VnTGluZXRvUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJl
dHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQYXRoU2VnTGluZXRvUmVsPihwMSxzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnTGluZXRvUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQ1MDMs
MTIgKzQ1MDMsMTIgQEAgYm9vbCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6Omhhc1Bybwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJz
OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbEFiczo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzPihwMSxwMiwmc19o
YXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFi
czo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRo
U2VnTGluZXRvVmVydGljYWxBYnM6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0
aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC00NTI1LDEw
ICs0NTI1LDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpwdXRJblAKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWxBYnM6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00NTM2LDcgKzQ1MzYsNyBAQCBPYmplY3RJbXAgKlNWR1Bh
dGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRn
ZTxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbEFiczo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhT
ZWdMaW5ldG9WZXJ0aWNhbEFiczo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1w
ICpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0
aWNhbEFicz4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpQcml2
YXRlICo+KGltcGwpKTsKIH0KQEAgLTQ1NDksMTIgKzQ1NDksMTIgQEAgYm9vbCBTVkdQYXRoU2Vn
TGluZXRvVmVydGljYWxSZWw6Omhhc1BybwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsUmVsPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVl
IFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CkBAIC00NTcxLDEwICs0NTcxLDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsUmVsOjpwdXRJblAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBT
VkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorT2JqZWN0SW1wICpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6OnByb3RvdHlwZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCkt
PmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2Fz
dChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1BhdGhTZWdM
aW5ldG9WZXJ0aWNhbFJlbDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC00NTgyLDcg
KzQ1ODIsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6CiAgICAg
cmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw+
KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6UHJpdmF0ZSAqPihp
bXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9N
T2JqZWN0PFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUGF0
aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQ1OTEsMTIg
KzQ1OTEsMTIgQEAgYm9vbCBTVkdQYXRoU2VnTGlzdDo6aGFzUHJvcGVydHkoRXhlY1N0YQogewog
ICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdQYXRoU2VnTGlz
dDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwotICAgIE9iamVjdCBw
cm90byA9IFNWR1BhdGhTZWdMaXN0UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1Bh
dGhTZWdMaXN0UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNl
Z0xpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xp
c3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1
cEdldDxTVkdQYXRoU2VnTGlzdFByb3RvRnVuYyxTVkdQYXRoU2VnTGlzdD4ocDEscDIsJnNfaGFz
aFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNDYwOCwxOCArNDYwOCwxOCBAQCBTVkdQYXRoU2VnTGlz
dCBTVkdQYXRoU2VnTGlzdFByb3RvRnVuYzo6CiAgICAgcmV0dXJuIFNWR1BhdGhTZWdMaXN0Ojpu
dWxsOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdQYXRoU2VnTGlzdFBy
b3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBw
cm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdQYXRoU2VnTGlzdFBy
b3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
cHJvdG8tPmdldChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpw
MSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0aFNlZ0xpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHUGF0aFNlZ0xpc3RQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1
cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2VnTGlzdDo6YnJpZGdlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CkBAIC00NjI3LDcgKzQ2MjcsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdM
aXN0OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHUGF0
aFNlZ0xpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaXN0OjpQcml2YXRlICo+KGltcGwp
KTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdMaXN0PihwMSxzdGF0
aWNfY2FzdDxTVkdQYXRoU2VnTGlzdDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00NjQwLDEy
ICs0NjQwLDEyIEBAIGJvb2wgU1ZHUGF0aFNlZ01vdmV0b0Ficzo6aGFzUHJvcGVydHkoRXgKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdNb3ZldG9BYnM6OmdldChHRVRf
TUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ01vdmV0b0Ficzo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8
U1ZHUGF0aFNlZ01vdmV0b0Ficz4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1W
YWx1ZSBTVkdQYXRoU2VnTW92ZXRvQWJzOjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdNb3ZldG9BYnM6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHUGF0aFNlZzo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gU1ZHUGF0aFNlZzo6Z2V0KHAxLHAyLHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CkBAIC00NjYyLDEwICs0NjYyLDEwIEBAIGJvb2wgU1ZHUGF0aFNlZ01vdmV0b0Ficzo6cHV0
SW5QYXJlbnRzKFAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQYXRoU2VnTW92
ZXRvQWJzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUGF0
aFNlZ01vdmV0b0Ficzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYo
cDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwot
ICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0aFNlZ01vdmV0b0Ficzo6YnJpZGdlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CkBAIC00NjczLDcgKzQ2NzMsNyBAQCBPYmplY3RJbXAgKlNWR1BhdGhTZWdNb3Zl
dG9BYnM6OmJyaWRnZShFCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdQYXRo
U2VnTW92ZXRvQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRvQWJzOjpQcml2YXRl
ICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUGF0aFNlZ01vdmV0b0Ficzo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTW92ZXRvQWJzOjpjYWNoZShFeGVj
U3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQ
YXRoU2VnTW92ZXRvQWJzPihwMSxzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRvQWJzOjpQcml2
YXRlICo+KGltcGwpKTsKIH0KQEAgLTQ2ODYsMTIgKzQ2ODYsMTIgQEAgYm9vbCBTVkdQYXRoU2Vn
TW92ZXRvUmVsOjpoYXNQcm9wZXJ0eShFeAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
U1ZHUGF0aFNlZ01vdmV0b1JlbDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1w
ICpTVkdQYXRoU2VnTW92ZXRvUmVsOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdQYXRoU2VnTW92ZXRvUmVsPihwMSxwMiwm
c19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1BhdGhTZWdNb3ZldG9SZWw6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ01v
dmV0b1JlbDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihT
VkdQYXRoU2VnOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdQYXRoU2VnOjpnZXQocDEs
cDIscDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTQ3MDgsMTAgKzQ3MDgsMTAgQEAg
Ym9vbCBTVkdQYXRoU2VnTW92ZXRvUmVsOjpwdXRJblBhcmVudHMoUAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotT2JqZWN0IFNWR1BhdGhTZWdNb3ZldG9SZWw6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQYXRoU2VnTW92ZXRvUmVsOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdQYXRoU2Vn
TW92ZXRvUmVsOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQ3MTksNyArNDcxOSw3
IEBAIE9iamVjdEltcCAqU1ZHUGF0aFNlZ01vdmV0b1JlbDo6YnJpZGdlKEUKICAgICByZXR1cm4g
bmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1BhdGhTZWdNb3ZldG9SZWw+KHAxLHN0YXRpY19jYXN0
PFNWR1BhdGhTZWdNb3ZldG9SZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdQ
YXRoU2VnTW92ZXRvUmVsOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNW
R1BhdGhTZWdNb3ZldG9SZWw6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BhdGhTZWdNb3ZldG9SZWw+KHAxLHN0YXRpY19j
YXN0PFNWR1BhdGhTZWdNb3ZldG9SZWw6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNDczOCwx
MiArNDczOCwxMiBAQCBib29sIFNWR1BhdHRlcm5FbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdQYXR0ZXJuRWxlbWVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXR0ZXJuRWxlbWVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
UGF0dGVybkVsZW1lbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUg
U1ZHUGF0dGVybkVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHUGF0dGVybkVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4g
U1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtNDc2OCwxMCArNDc2OCwxMCBAQCBib29sIFNWR1Bh
dHRlcm5FbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1P
YmplY3QgU1ZHUGF0dGVybkVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpTVkdQYXR0ZXJuRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVj
dFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7Cisg
ICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUGF0dGVybkVsZW1lbnQ6OmJyaWRn
ZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDc3OSw3ICs0Nzc5LDcgQEAgT2JqZWN0SW1wICpT
VkdQYXR0ZXJuRWxlbWVudDo6YnJpZGdlKEV4ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldC
cmlkZ2U8U1ZHUGF0dGVybkVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1BhdHRlcm5FbGVtZW50
OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHUGF0dGVybkVsZW1lbnQ6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0dGVybkVsZW1lbnQ6OmNhY2hlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNW
R1BhdHRlcm5FbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudDo6UHJpdmF0
ZSAqPihkKSk7CiB9CkBAIC00Nzg4LDEyICs0Nzg4LDEyIEBAIGJvb2wgU1ZHUG9pbnQ6Omhhc1By
b3BlcnR5KEV4ZWNTdGF0ZSAqcDEKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6
OmZpbmRFbnRyeSgmU1ZHUG9pbnQ6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4g
dHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdQb2ludFByb3RvOjpzZWxmKHAxKTsKLSAgICBp
Zihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAq
cHJvdG8gPSBTVkdQb2ludFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNW
R1BvaW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1BvaW50Ojpn
ZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8
U1ZHUG9pbnRQcm90b0Z1bmMsU1ZHUG9pbnQ+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KQEAgLTQ4MTAsMTAgKzQ4MTAsMTAgQEAgU1ZHUG9pbnQgS1NWRzo6dG9TVkdQb2ludChLSlM6
OkV4ZWNTdGF0ZQogICAgIHJldHVybiBTVkdQb2ludDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHUG9p
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9p
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHBy
b3RvID0gU1ZHUG9pbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0g
U1ZHUG9pbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC00ODI5LDEwICs0ODI5LDEwIEBAIGJvb2wgU1ZHUG9pbnQ6
OnB1dEluUGFyZW50cyhQVVRfTUVUSE9EX0EKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVj
dCBTVkdQb2ludDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNW
R1BvaW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIFNWR1BvaW50UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWND
YXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUG9pbnQ6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNDg0MCw3ICs0ODQwLDcgQEAgT2JqZWN0
SW1wICpTVkdQb2ludDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NUldCcmlkZ2U8U1ZHUG9pbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1BvaW50OjpQcml2YXRlICo+
KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUG9pbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHUG9pbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BvaW50PihwMSxzdGF0aWNfY2FzdDxTVkdQ
b2ludDo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC00ODQ5LDEyICs0ODQ5LDEyIEBAIGJvb2wg
U1ZHUG9pbnRMaXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUKIHsKICAgICBjb25zdCBIYXNoRW50
cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHUG9pbnRMaXN0OjpzX2hhc2hUYWJsZSxwMik7
CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHUG9pbnRMaXN0
UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJu
IHRydWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1BvaW50TGlzdFByb3RvOjpzZWxmKHAx
KTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BvaW50TGlzdDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdQb2ludExpc3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdQb2ludExpc3RQcm90b0Z1bmMs
U1ZHUG9pbnRMaXN0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CkBAIC00ODY2LDE4
ICs0ODY2LDE4IEBAIFNWR1BvaW50TGlzdCBTVkdQb2ludExpc3RQcm90b0Z1bmM6OmNhc3QKICAg
ICByZXR1cm4gU1ZHUG9pbnRMaXN0OjpudWxsOwogfQogCi1WYWx1ZSBTVkdQb2ludExpc3Q6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9pbnRMaXN0
OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewotICAgIE9iamVjdCBwcm90
byA9IFNWR1BvaW50TGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBwcm90by5nZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8g
PSBTVkdQb2ludExpc3RQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5
KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9iamVjdCBTVkdQb2ludExpc3Q6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQb2ludExpc3Q6OnByb3RvdHlw
ZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHUG9pbnRMaXN0
UHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7
CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUG9pbnRMaXN0OjpicmlkZ2Uo
RXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTQ4ODUsNyArNDg4NSw3IEBAIE9iamVjdEltcCAqU1ZH
UG9pbnRMaXN0OjpicmlkZ2UoRXhlY1N0YXQKICAgICByZXR1cm4gbmV3IEtET006OkRPTUJyaWRn
ZTxTVkdQb2ludExpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR1BvaW50TGlzdDo6UHJpdmF0ZSAqPihp
bXBsKSk7CiB9CiAKLVZhbHVlIFNWR1BvaW50TGlzdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29u
c3QKK1ZhbHVlSW1wICpTVkdQb2ludExpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BvaW50TGlzdD4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHUG9pbnRMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTQ5MDQsMTIgKzQ5
MDQsMTIgQEAgYm9vbCBTVkdQb2x5Z29uRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlYwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUG9seWdvbkVsZW1lbnQ6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUG9seWdvbkVsZW1lbnQ6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1BvbHln
b25FbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1Bv
bHlnb25FbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1BvbHlnb25FbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIGlmKFNWR0FuaW1hdGVkUG9pbnRzOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBTVkdBbmltYXRlZFBvaW50czo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFbGVtZW50Ojpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwpAQCAt
NDkzNCwxMCArNDkzNCwxMCBAQCBib29sIFNWR1BvbHlnb25FbGVtZW50OjpwdXQoUFVUX01FVEhP
RF9BCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUG9seWdvbkVsZW1lbnQ6OnBy
b3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdQb2x5Z29uRWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBw
MS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBP
YmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVj
dEltcCAqU1ZHUG9seWdvbkVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
NDk0NSw3ICs0OTQ1LDcgQEAgT2JqZWN0SW1wICpTVkdQb2x5Z29uRWxlbWVudDo6YnJpZGdlKEV4
ZQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUG9seWdvbkVsZW1lbnQ+KHAx
LHN0YXRpY19jYXN0PFNWR1BvbHlnb25FbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFs
dWUgU1ZHUG9seWdvbkVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUG9seWdvbkVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1BvbHlnb25FbGVtZW50PihwMSxzdGF0aWNf
Y2FzdDxTVkdQb2x5Z29uRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC00OTY0LDEyICs0
OTY0LDEyIEBAIGJvb2wgU1ZHUG9seWxpbmVFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGUKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1BvbHlsaW5lRWxlbWVudDo6Z2V0KEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdQb2x5bGluZUVsZW1lbnQ6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1Bv
bHlsaW5lRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBT
VkdQb2x5bGluZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHUG9seWxpbmVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAogewogICAgIGlmKFNWR0FuaW1hdGVkUG9pbnRzOjpoYXNQcm9wZXJ0eShwMSxwMikp
IHJldHVybiBTVkdBbmltYXRlZFBvaW50czo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFbGVt
ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMp
OwpAQCAtNDk5NCwxMCArNDk5NCwxMCBAQCBib29sIFNWR1BvbHlsaW5lRWxlbWVudDo6cHV0KFBV
VF9NRVRIT0RfCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUG9seWxpbmVFbGVt
ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUG9seWxp
bmVFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAg
cmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0K
IAogT2JqZWN0SW1wICpTVkdQb2x5bGluZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBj
b25zdApAQCAtNTAwNSw3ICs1MDA1LDcgQEAgT2JqZWN0SW1wICpTVkdQb2x5bGluZUVsZW1lbnQ6
OmJyaWRnZShFeAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUG9seWxpbmVF
bGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdQb2x5bGluZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkp
OwogfQogCi1WYWx1ZSBTVkdQb2x5bGluZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHUG9seWxpbmVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdQb2x5bGluZUVsZW1l
bnQ+KHAxLHN0YXRpY19jYXN0PFNWR1BvbHlsaW5lRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9
CkBAIC01MDE4LDEyICs1MDE4LDEyIEBAIGJvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6aGFz
UHJvcGVydHkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW86OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUHJlc2VydmVB
c3BlY3RSYXRpbzo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RP
TTo6bG9va3VwR2V0VmFsdWU8U1ZHUHJlc2VydmVBc3BlY3RSYXRpbz4ocDEscDIsJnNfaGFzaFRh
YmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXRJblBh
cmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW86OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVT
RUQocDEpOyBRX1VOVVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CkBAIC01MDQwLDEwICs1MDQwLDEwIEBAIGJvb2wgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6
cHV0SW5QYXJlbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZH
UHJlc2VydmVBc3BlY3RSYXRpbzo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAg
ICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlw
ZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJu
IE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6YnJpZGdlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01MDUxLDcgKzUwNTEsNyBAQCBPYmplY3RJbXAgKlNWR1By
ZXNlcnZlQXNwZWN0UmF0aW86OmJyaWRnCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRn
ZTxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvPihwMSxzdGF0aWNfY2FzdDxTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbzo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
OjpjYWNoZURPTU9iamVjdDxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvPihwMSxzdGF0aWNfY2FzdDxT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTUwNjQsMTIg
KzUwNjQsMTIgQEAgYm9vbCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6Omhhc1Byb3BlcgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3Vw
R2V0VmFsdWU8U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhp
cyxwMyk7CiB9CiAKLVZhbHVlIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHR3Jh
ZGllbnRFbGVtZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdHcmFkaWVudEVsZW1l
bnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNTA4NCwxMCAr
NTA4NCwxMCBAQCBib29sIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6cHV0KFBVVF9NCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojpwcm90
b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0
dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtNTA5NSw3ICs1MDk1LDcgQEAgT2JqZWN0SW1wICpTVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQ6OmJyaQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6
OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmNh
Y2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHUmFkaWFsR3JhZGllbnRFbGVt
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNo
ZURPTU9iamVjdDxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01MTA4LDcgKzUxMDgs
NyBAQCBib29sIFNWR1JlY3Q6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEsCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdSZWN0OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAor
VmFsdWVJbXAgKlNWR1JlY3Q6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1JlY3Q+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlz
LHAzKTsKIH0KQEAgLTUxMjAsNyArNTEyMCw3IEBAIFNWR1JlY3QgS1NWRzo6dG9TVkdSZWN0KEtK
Uzo6RXhlY1N0YXRlICoKICAgICByZXR1cm4gU1ZHUmVjdDo6bnVsbDsKIH0KIAotVmFsdWUgU1ZH
UmVjdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdS
ZWN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIFFfVU5VU0VE
KHAxKTsgUV9VTlVTRUQocDIpOyBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwpAQCAtNTEzNywxMCArNTEzNywxMCBAQCBib29sIFNWR1JlY3Q6OnB1dEluUGFyZW50cyhQVVRf
TUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHUmVjdDo6cHJvdG90
eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1JlY3Q6OnByb3RvdHlwZShF
eGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVy
KCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWlj
Q2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1JlY3Q6
OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTE0OCw3ICs1MTQ4LDcgQEAgT2JqZWN0
SW1wICpTVkdSZWN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMQogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NUldCcmlkZ2U8U1ZHUmVjdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUmVjdDo6UHJpdmF0ZSAqPihp
bXBsKSk7CiB9CiAKLVZhbHVlIFNWR1JlY3Q6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitW
YWx1ZUltcCAqU1ZHUmVjdDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1
cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUmVjdD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUmVjdDo6
UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBAIC01MTY2LDEyICs1MTY2LDEyIEBAIGJvb2wgU1ZHUmVj
dEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR1JlY3RFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR1JlY3RFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdSZWN0RWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdSZWN0RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdSZWN0RWxlbWVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC01MTk1LDEwICs1MTk1
LDEwIEBAIGJvb2wgU1ZHUmVjdEVsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdSZWN0RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1JlY3RFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdSZWN0RWxlbWVu
dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01MjA2LDcgKzUyMDYsNyBAQCBPYmpl
Y3RJbXAgKlNWR1JlY3RFbGVtZW50OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBLRE9N
OjpET01SV0JyaWRnZTxTVkdSZWN0RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHUmVjdEVsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdSZWN0RWxlbWVudDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdSZWN0RWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHUmVj
dEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1JlY3RFbGVtZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTUyMTUsOCArNTIxNSw4IEBAIGJvb2wgU1ZHU1ZHRWxlbWVudDo6aGFzUHJvcGVydHko
RXhlY1N0YXQKIHsKICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgm
U1ZHU1ZHRWxlbWVudDo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJldHVybiB0cnVlOwot
ICAgIE9iamVjdCBwcm90byA9IFNWR1NWR0VsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYo
cHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnBy
b3RvID0gU1ZHU1ZHRWxlbWVudFByb3RvOjpzZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJv
cGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihLRE9NOjpEb2N1bWVudEV2ZW50Ojpo
YXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKQEAgLTUyMjksNyArNTIy
OSw3IEBAIGJvb2wgU1ZHU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1NWR0VsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHU1ZHRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0PFNWR1NWR0VsZW1lbnRQcm90b0Z1bmMs
U1ZHU1ZHRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNTI0MSwx
MCArNTI0MSwxMCBAQCBTVkdTVkdFbGVtZW50IFNWR1NWR0VsZW1lbnRQcm90b0Z1bmM6OmNhCiAg
ICAgcmV0dXJuIFNWR1NWR0VsZW1lbnQ6Om51bGw7CiB9CiAKLVZhbHVlIFNWR1NWR0VsZW1lbnQ6
OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU1ZHRWxl
bWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3Qg
cHJvdG8gPSBTVkdTVkdFbGVtZW50UHJvdG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdldChwMSxwMik7CisgICAgT2JqZWN0SW1wICpw
cm90byA9IFNWR1NWR0VsZW1lbnRQcm90bzo6c2VsZihwMSk7CisgICAgaWYocHJvdG8tPmhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEscDIpOwogICAgIGlmKEtET006OkRv
Y3VtZW50RXZlbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIEtET006OkRvY3VtZW50RXZl
bnQ6OmdldChwMSxwMixwMyk7CiAgICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIp
KSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMpOwpAQCAtNTI3OSwxMCArNTI3OSwxMCBAQCBi
b29sIFNWR1NWR0VsZW1lbnQ6OnB1dEluUGFyZW50cyhQVVRfTUVUCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1PYmplY3QgU1ZHU1ZHRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CitPYmplY3RJbXAgKlNWR1NWR0VsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHU1ZHRWxlbWVudFByb3RvOjpzZWxmKHAxKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKlNWR1NWR0VsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBj
b25zdApAQCAtNTI5MCw3ICs1MjkwLDcgQEAgT2JqZWN0SW1wICpTVkdTVkdFbGVtZW50Ojpicmlk
Z2UoRXhlY1N0YQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHU1ZHRWxlbWVu
dD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU1ZHRWxlbWVudDo6UHJpdmF0ZSAqPihLRE9NOjpFdmVudFRh
cmdldDo6ZCkpOwogfQogCi1WYWx1ZSBTVkdTVkdFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAx
KSBjb25zdAorVmFsdWVJbXAgKlNWR1NWR0VsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1NWR0VsZW1lbnQ+KHAx
LHN0YXRpY19jYXN0PFNWR1NWR0VsZW1lbnQ6OlByaXZhdGUgKj4oS0RPTTo6RXZlbnRUYXJnZXQ6
OmQpKTsKIH0KQEAgLTUzMDUsMTIgKzUzMDUsMTIgQEAgYm9vbCBTVkdTY3JpcHRFbGVtZW50Ojpo
YXNQcm9wZXJ0eShFeGVjUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHU2NyaXB0
RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdTY3JpcHRF
bGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjps
b29rdXBHZXRWYWx1ZTxTVkdTY3JpcHRFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CiAKLVZhbHVlIFNWR1NjcmlwdEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU2NyaXB0RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC01MzMyLDEwICs1MzMyLDEw
IEBAIGJvb2wgU1ZHU2NyaXB0RWxlbWVudDo6cHV0SW5QYXJlbnRzKFBVVF8KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdTY3JpcHRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRl
ICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHU2NyaXB0RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVybiBwMS0+aW50ZXJwcmV0ZXIoKS0+
YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0
KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHU2NyaXB0RWxl
bWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01MzQzLDcgKzUzNDMsNyBAQCBP
YmplY3RJbXAgKlNWR1NjcmlwdEVsZW1lbnQ6OmJyaWRnZShFeGVjCiAgICAgcmV0dXJuIG5ldyBL
RE9NOjpET01SV0JyaWRnZTxTVkdTY3JpcHRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdTY3Jp
cHRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHU2NyaXB0RWxlbWVudDo6
Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdTY3JpcHRFbGVtZW50Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9i
amVjdDxTVkdTY3JpcHRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdTY3JpcHRFbGVtZW50OjpQ
cml2YXRlICo+KGQpKTsKIH0KQEAgLTUzNTYsMTIgKzUzNTYsMTIgQEAgYm9vbCBTVkdTZXRFbGVt
ZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
U1ZHU2V0RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdT
ZXRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9N
Ojpsb29rdXBHZXRWYWx1ZTxTVkdTZXRFbGVtZW50PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxw
Myk7CiB9CiAKLVZhbHVlIFNWR1NldEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU2V0RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdBbmltYXRpb25FbGVtZW50OjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdBbmltYXRpb25FbGVtZW50OjpnZXQocDEscDIscDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTUzNzYsMTAgKzUzNzYsMTAgQEAgYm9vbCBTVkdTZXRF
bGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUkdTKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2Jq
ZWN0IFNWR1NldEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0
SW1wICpTVkdTZXRFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBl
KCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4g
TlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdTZXRFbGVtZW50OjpicmlkZ2UoRXhlY1N0YXRlICpw
MSkgY29uc3QKQEAgLTUzODcsNyArNTM4Nyw3IEBAIE9iamVjdEltcCAqU1ZHU2V0RWxlbWVudDo6
YnJpZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1NldEVs
ZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1NldEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQog
Ci1WYWx1ZSBTVkdTZXRFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1NldEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1NldEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNW
R1NldEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNTQwMSwxMiArNTQwMSwxMiBAQCBi
b29sIFNWR1N0b3BFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1WYWx1ZSBTVkdTdG9wRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
K1ZhbHVlSW1wICpTVkdTdG9wRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsK
ICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHU3RvcEVsZW1lbnQ+KHAxLHAyLCZz
X2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHU3RvcEVsZW1lbnQ6OmdldEluUGFy
ZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3RvcEVsZW1lbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHRWxlbWVudDo6
aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAg
ICBpZihTVkdTdHlsYWJsZTo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHU3R5bGFibGU6
OmdldChwMSxwMixwMyk7CkBAIC01NDIyLDEwICs1NDIyLDEwIEBAIGJvb2wgU1ZHU3RvcEVsZW1l
bnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBT
VkdTdG9wRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAg
KlNWR1N0b3BFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpTVkdTdG9wRWxlbWVudDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CkBAIC01NDMzLDcgKzU0MzMsNyBAQCBPYmplY3RJbXAgKlNWR1N0b3BFbGVtZW50Ojpi
cmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01SV0JyaWRnZTxTVkdTdG9wRWxl
bWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3RvcEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQog
Ci1WYWx1ZSBTVkdTdG9wRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVl
SW1wICpTVkdTdG9wRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHU3RvcEVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0
PFNWR1N0b3BFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KQEAgLTU0NDIsMTIgKzU0NDIsMTIg
QEAgYm9vbCBTVkdTdHJpbmdMaXN0OjpoYXNQcm9wZXJ0eShFeGVjU3RhdAogewogICAgIGNvbnN0
IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdTdHJpbmdMaXN0OjpzX2hhc2hU
YWJsZSxwMik7CiAgICAgaWYoZSkgcmV0dXJuIHRydWU7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZH
U3RyaW5nTGlzdFByb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdTdHJpbmdMaXN0UHJv
dG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0
cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHU3RyaW5nTGlzdDo6Z2V0KEdF
VF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdTdHJpbmdMaXN0OjpnZXQoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHU3RyaW5n
TGlzdFByb3RvRnVuYyxTVkdTdHJpbmdMaXN0PihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7
CiB9CkBAIC01NDU5LDE4ICs1NDU5LDE4IEBAIFNWR1N0cmluZ0xpc3QgU1ZHU3RyaW5nTGlzdFBy
b3RvRnVuYzo6Y2EKICAgICByZXR1cm4gU1ZHU3RyaW5nTGlzdDo6bnVsbDsKIH0KIAotVmFsdWUg
U1ZHU3RyaW5nTGlzdDo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVl
SW1wICpTVkdTdHJpbmdMaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewotICAgIE9iamVjdCBwcm90byA9IFNWR1N0cmluZ0xpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAg
aWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAg
ICBPYmplY3RJbXAgKnByb3RvID0gU1ZHU3RyaW5nTGlzdFByb3RvOjpzZWxmKHAxKTsKKyAgICBp
Zihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdldChwMSxwMik7CiAg
ICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotT2JqZWN0IFNW
R1N0cmluZ0xpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpT
VkdTdHJpbmdMaXN0Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihw
MSkgcmV0dXJuIFNWR1N0cmluZ0xpc3RQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJuIE9iamVj
dDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1w
ICpTVkdTdHJpbmdMaXN0OjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTU0NzgsNyAr
NTQ3OCw3IEBAIE9iamVjdEltcCAqU1ZHU3RyaW5nTGlzdDo6YnJpZGdlKEV4ZWNTdGEKICAgICBy
ZXR1cm4gbmV3IEtET006OkRPTUJyaWRnZTxTVkdTdHJpbmdMaXN0PihwMSxzdGF0aWNfY2FzdDxT
VkdTdHJpbmdMaXN0OjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHU3RyaW5nTGlz
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdTdHJpbmdMaXN0Ojpj
YWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9i
amVjdDxTVkdTdHJpbmdMaXN0PihwMSxzdGF0aWNfY2FzdDxTVkdTdHJpbmdMaXN0OjpQcml2YXRl
ICo+KGltcGwpKTsKIH0KQEAgLTU0ODcsMTIgKzU0ODcsMTIgQEAgYm9vbCBTVkdTdHlsYWJsZTo6
aGFzUHJvcGVydHkoRXhlY1N0YXRlIAogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1
cDo6ZmluZEVudHJ5KCZTVkdTdHlsYWJsZTo6c19oYXNoVGFibGUscDIpOwogICAgIGlmKGUpIHJl
dHVybiB0cnVlOwotICAgIE9iamVjdCBwcm90byA9IFNWR1N0eWxhYmxlUHJvdG86OnNlbGYocDEp
OwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CisgICAgT2Jq
ZWN0SW1wICpwcm90byA9IFNWR1N0eWxhYmxlUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3Rv
LT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotVmFsdWUgU1ZHU3R5bGFibGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHU3R5bGFibGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEtET006Omxvb2t1cEdldDxTVkdTdHlsYWJsZVByb3RvRnVuYyxTVkdTdHlsYWJsZT4ocDEscDIs
JnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQpAQCAtNTU4NiwxOCArNTU4NiwxOCBAQCBTVkdTdHls
YWJsZSBTVkdTdHlsYWJsZVByb3RvRnVuYzo6Y2FzdChLCiAgICAgcmV0dXJuIFNWR1N0eWxhYmxl
OjpudWxsOwogfQogCi1WYWx1ZSBTVkdTdHlsYWJsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdTdHlsYWJsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRI
T0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdTdHlsYWJsZVByb3RvOjpz
ZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5n
ZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdTdHlsYWJsZVByb3RvOjpzZWxm
KHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdl
dChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotT2JqZWN0IFNWR1N0eWxhYmxlOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09i
amVjdEltcCAqU1ZHU3R5bGFibGU6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewog
ICAgIGlmKHAxKSByZXR1cm4gU1ZHU3R5bGFibGVQcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpTVkdTdHlsYWJsZTo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC01NjA1
LDcgKzU2MDUsNyBAQCBPYmplY3RJbXAgKlNWR1N0eWxhYmxlOjpicmlkZ2UoRXhlY1N0YXRlCiAg
ICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZHU3R5bGFibGU+KHAxLHN0YXRpY19jYXN0
PFNWR1N0eWxhYmxlOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHU3R5bGFibGU6
OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3R5bGFibGU6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0
PFNWR1N0eWxhYmxlPihwMSxzdGF0aWNfY2FzdDxTVkdTdHlsYWJsZTo6UHJpdmF0ZSAqPihpbXBs
KSk7CiB9CkBAIC01NjE4LDEyICs1NjE4LDEyIEBAIGJvb2wgU1ZHU3R5bGVFbGVtZW50OjpoYXNQ
cm9wZXJ0eShFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1N0eWxlRWxl
bWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdTdHlsZUVsZW1l
bnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1
cEdldFZhbHVlPFNWR1N0eWxlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwog
fQogCi1WYWx1ZSBTVkdTdHlsZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHU3R5bGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIFNWR0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwpAQCAtNTY0MywxMCArNTY0MywxMCBAQCBib29sIFNWR1N0eWxlRWxlbWVudDo6cHV0SW5QYXJl
bnRzKFBVVF9NCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHU3R5bGVFbGVtZW50
Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdEltcCAqU1ZHU3R5bGVFbGVt
ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJu
IHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJu
IE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2Jq
ZWN0SW1wICpTVkdTdHlsZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
NTY1NCw3ICs1NjU0LDcgQEAgT2JqZWN0SW1wICpTVkdTdHlsZUVsZW1lbnQ6OmJyaWRnZShFeGVj
UwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHU3R5bGVFbGVtZW50PihwMSxz
dGF0aWNfY2FzdDxTVkdTdHlsZUVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBT
VkdTdHlsZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZH
U3R5bGVFbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBL
RE9NOjpjYWNoZURPTU9iamVjdDxTVkdTdHlsZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1N0
eWxlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01NjcyLDEyICs1NjcyLDEyIEBAIGJv
b2wgU1ZHU3dpdGNoRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1MKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVZhbHVlIFNWR1N3aXRjaEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHU3dpdGNoRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHU3dpdGNoRWxlbWVudD4ocDEs
cDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdTd2l0Y2hFbGVtZW50Ojpn
ZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1N3aXRjaEVs
ZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZH
RWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6Z2V0KHAxLHAy
LHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQocDEscDIscDMp
OwpAQCAtNTcwMSwxMCArNTcwMSwxMCBAQCBib29sIFNWR1N3aXRjaEVsZW1lbnQ6OnB1dChQVVRf
TUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHU3dpdGNoRWxlbWVu
dDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1N3aXRjaEVs
ZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1
cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1
cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBP
YmplY3RJbXAgKlNWR1N3aXRjaEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtNTcxMiw3ICs1NzEyLDcgQEAgT2JqZWN0SW1wICpTVkdTd2l0Y2hFbGVtZW50OjpicmlkZ2Uo
RXhlYwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHU3dpdGNoRWxlbWVudD4o
cDEsc3RhdGljX2Nhc3Q8U1ZHU3dpdGNoRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZh
bHVlIFNWR1N3aXRjaEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHU3dpdGNoRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHU3dpdGNoRWxlbWVudD4ocDEsc3RhdGljX2Nh
c3Q8U1ZHU3dpdGNoRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01NzI5LDEyICs1NzI5
LDEyIEBAIGJvb2wgU1ZHU3ltYm9sRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1MKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1N5bWJvbEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3ltYm9sRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHU3ltYm9sRWxl
bWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdTeW1ib2xF
bGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNW
R1N5bWJvbEVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6
Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQo
cDEscDIscDMpOwpAQCAtNTc1NywxMCArNTc1NywxMCBAQCBib29sIFNWR1N5bWJvbEVsZW1lbnQ6
OnB1dChQVVRfTUVUSE9EX0FSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHU3lt
Ym9sRWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNW
R1N5bWJvbEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlm
KHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsK
LSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxM
OwogfQogCiBPYmplY3RJbXAgKlNWR1N5bWJvbEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAx
KSBjb25zdApAQCAtNTc2OCw3ICs1NzY4LDcgQEAgT2JqZWN0SW1wICpTVkdTeW1ib2xFbGVtZW50
OjpicmlkZ2UoRXhlYwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHU3ltYm9s
RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHU3ltYm9sRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7
CiB9CiAKLVZhbHVlIFNWR1N5bWJvbEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHU3ltYm9sRWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QK
IHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHU3ltYm9sRWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHU3ltYm9sRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01Nzgx
LDEyICs1NzgxLDEyIEBAIGJvb2wgU1ZHVFNwYW5FbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3QK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1RTcGFuRWxlbWVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdUU3BhbkVsZW1lbnQ6OmdldChHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1RT
cGFuRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdU
U3BhbkVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHVFNwYW5FbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAog
ewogICAgIGlmKFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkg
cmV0dXJuIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmdldChwMSxwMixwMyk7CiAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwpAQCAtNTgwMSwxMCArNTgwMSwxMCBAQCBib29sIFNWR1RTcGFuRWxl
bWVudDo6cHV0KFBVVF9NRVRIT0RfQVJHCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3Qg
U1ZHVFNwYW5FbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqU1ZHVFNwYW5FbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAg
ICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBl
KCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4g
TlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdUU3BhbkVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUg
KnAxKSBjb25zdApAQCAtNTgxMiw3ICs1ODEyLDcgQEAgT2JqZWN0SW1wICpTVkdUU3BhbkVsZW1l
bnQ6OmJyaWRnZShFeGVjUwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHVFNw
YW5FbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdUU3BhbkVsZW1lbnQ6OlByaXZhdGUgKj4oZCkp
OwogfQogCi1WYWx1ZSBTVkdUU3BhbkVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHVFNwYW5FbGVtZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdUU3BhbkVsZW1lbnQ+KHAxLHN0
YXRpY19jYXN0PFNWR1RTcGFuRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC01ODIxLDEy
ICs1ODIxLDEyIEBAIGJvb2wgU1ZHVGVzdHM6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqcDEKIHsK
ICAgICBjb25zdCBIYXNoRW50cnkgKmUgPSBMb29rdXA6OmZpbmRFbnRyeSgmU1ZHVGVzdHM6OnNf
aGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8g
PSBTVkdUZXN0c1Byb3RvOjpzZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxw
MikpIHJldHVybiB0cnVlOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdUZXN0c1Byb3RvOjpz
ZWxmKHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1Rlc3RzOjpnZXQoR0VUX01FVEhPRF9B
UkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1Rlc3RzOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHVGVzdHNQcm90b0Z1bmMsU1ZHVGVz
dHM+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTU4ODgsMTggKzU4ODgsMTgg
QEAgU1ZHVGVzdHMgU1ZHVGVzdHNQcm90b0Z1bmM6OmNhc3QoS0pTOjpFeAogICAgIHJldHVybiBT
VkdUZXN0czo6bnVsbDsKIH0KIAotVmFsdWUgU1ZHVGVzdHM6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGVzdHM6OmdldEluUGFyZW50cyhHRVRfTUVU
SE9EX0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHVGVzdHNQcm90bzo6c2Vs
ZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0
KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHVGVzdHNQcm90bzo6c2VsZihwMSk7
CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLT5nZXQocDEs
cDIpOwogICAgIFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9i
amVjdCBTVkdUZXN0czo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAg
KlNWR1Rlc3RzOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkg
cmV0dXJuIFNWR1Rlc3RzUHJvdG86OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFt
aWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHVGVz
dHM6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAtNTkwNyw3ICs1OTA3LDcgQEAgT2Jq
ZWN0SW1wICpTVkdUZXN0czo6YnJpZGdlKEV4ZWNTdGF0ZSAqcAogICAgIHJldHVybiBuZXcgS0RP
TTo6RE9NQnJpZGdlPFNWR1Rlc3RzPihwMSxzdGF0aWNfY2FzdDxTVkdUZXN0czo6UHJpdmF0ZSAq
PihpbXBsKSk7CiB9CiAKLVZhbHVlIFNWR1Rlc3RzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25z
dAorVmFsdWVJbXAgKlNWR1Rlc3RzOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAg
IHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdUZXN0cz4ocDEsc3RhdGljX2Nhc3Q8U1ZH
VGVzdHM6OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNTkxNiw4ICs1OTE2LDggQEAgYm9vbCBT
VkdUZXh0Q29udGVudEVsZW1lbnQ6Omhhc1Byb3BlcnR5KAogewogICAgIGNvbnN0IEhhc2hFbnRy
eSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5KCZTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNfaGFzaFRh
YmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdU
ZXh0Q29udGVudEVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVy
dHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0gU1ZHVGV4dENv
bnRlbnRFbGVtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShw
MSxwMikpIHJldHVybiB0cnVlOwogICAgIGlmKFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIHRydWU7CiAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aGFz
UHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKICAgICBpZihTVkdMYW5nU3BhY2U6Omhhc1By
b3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CkBAIC01OTI2LDcgKzU5MjYsNyBAQCBib29sIFNW
R1RleHRDb250ZW50RWxlbWVudDo6aGFzUHJvcGVydHkoCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1WYWx1ZSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXQ8U1ZHVGV4dENvbnRlbnRFbGVtZW50
UHJvdG9GdW5jLFNWR1RleHRDb250ZW50RWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMs
cDMpOwogfQpAQCAtNTk0NCwxMCArNTk0NCwxMCBAQCBTVkdUZXh0Q29udGVudEVsZW1lbnQgU1ZH
VGV4dENvbnRlbnRFbGVtCiAgICAgcmV0dXJuIFNWR1RleHRDb250ZW50RWxlbWVudDo6bnVsbDsK
IH0KIAotVmFsdWUgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdUZXh0
Q29udGVudEVsZW1lbnRQcm90bzo6c2VsZihwMSk7Ci0gICAgaWYocHJvdG8uaGFzUHJvcGVydHko
cDEscDIpKSByZXR1cm4gcHJvdG8uZ2V0KHAxLHAyKTsKKyAgICBPYmplY3RJbXAgKnByb3RvID0g
U1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by0+Z2V0KHAxLHAyKTsKICAgICBpZihTVkdFbGVt
ZW50OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMp
OwogICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAy
KSkgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CiAg
ICAgaWYoU1ZHTGFuZ1NwYWNlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdMYW5nU3Bh
Y2U6OmdldChwMSxwMixwMyk7CkBAIC01OTY5LDEwICs1OTY5LDEwIEBAIGJvb2wgU1ZHVGV4dENv
bnRlbnRFbGVtZW50OjpwdXQoUFVUX01FVEgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVj
dCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAor
T2JqZWN0SW1wICpTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG86
OnNlbGYocDEpOwotICAgIHJldHVybiBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAg
cmV0dXJuIE5VTEw7CiB9CiAKIE9iamVjdEltcCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpicmlk
Z2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTU5ODAsNyArNTk4MCw3IEBAIE9iamVjdEltcCAq
U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpicmlkZ2UKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJX
QnJpZGdlPFNWR1RleHRDb250ZW50RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVGV4dENvbnRl
bnRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZHVGV4dENvbnRlbnRFbGVt
ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1RleHRDb250ZW50
RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6
Y2FjaGVET01PYmplY3Q8U1ZHVGV4dENvbnRlbnRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdU
ZXh0Q29udGVudEVsZW1lbnQ6OlByaXZhdGUgKj4oZCkpOwogfQpAQCAtNTk5NCwxMiArNTk5NCwx
MiBAQCBib29sIFNWR1RleHRFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1WYWx1ZSBTVkdUZXh0RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykg
Y29uc3QKK1ZhbHVlSW1wICpTVkdUZXh0RWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29u
c3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHVGV4dEVsZW1lbnQ+KHAx
LHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHVGV4dEVsZW1lbnQ6Omdl
dEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGV4dEVsZW1l
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudDo6Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdUcmFuc2Zvcm1hYmxl
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpnZXQocDEscDIs
cDMpOwpAQCAtNjAxNSwxMCArNjAxNSwxMCBAQCBib29sIFNWR1RleHRFbGVtZW50OjpwdXQoUFVU
X01FVEhPRF9BUkdTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHVGV4dEVsZW1l
bnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdUZXh0RWxl
bWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgaWYocDEpIHJldHVy
biBwMS0+aW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpOwotICAgIHJldHVy
biBPYmplY3Q6OmR5bmFtaWNDYXN0KE51bGwoKSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIE9i
amVjdEltcCAqU1ZHVGV4dEVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
NjAyNiw3ICs2MDI2LDcgQEAgT2JqZWN0SW1wICpTVkdUZXh0RWxlbWVudDo6YnJpZGdlKEV4ZWNT
dAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHVGV4dEVsZW1lbnQ+KHAxLHN0
YXRpY19jYXN0PFNWR1RleHRFbGVtZW50OjpQcml2YXRlICo+KGQpKTsKIH0KIAotVmFsdWUgU1ZH
VGV4dEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGV4
dEVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006
OmNhY2hlRE9NT2JqZWN0PFNWR1RleHRFbGVtZW50PihwMSxzdGF0aWNfY2FzdDxTVkdUZXh0RWxl
bWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC02MDM5LDEyICs2MDM5LDEyIEBAIGJvb2wgU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6aGFzUHJvcGUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LVZhbHVlIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNv
bnN0CitWYWx1ZUltcCAqU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0Rf
QVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1
ZSBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdT
KSBjb25zdAorVmFsdWVJbXAgKlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmdldEluUGFyZW50
cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgaWYoU1ZHVGV4dENvbnRlbnRFbGVtZW50
OjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldChw
MSxwMixwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtNjA1OSwxMCArNjA1OSwxMCBA
QCBib29sIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnB1dChQVVRfCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1PYmplY3QgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cHJvdG90eXBlKEV4
ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6
OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEt
PmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2Jq
ZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJ
bXAgKlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25z
dApAQCAtNjA3MCw3ICs2MDcwLDcgQEAgT2JqZWN0SW1wICpTVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50OjpicgogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6UHJp
dmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmNhY2hl
KEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVu
dDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVE
T01PYmplY3Q8U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC02MDg1LDEyICs2MDg1
LDEyIEBAIGJvb2wgU1ZHVGl0bGVFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3QKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1RpdGxlRWxlbWVudDo6Z2V0KEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdUaXRsZUVsZW1lbnQ6OmdldChHRVRfTUVUSE9EX0FSR1Mp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldFZhbHVlPFNWR1RpdGxlRWxlbWVu
dD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdUaXRsZUVsZW1l
bnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGl0
bGVFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIGlm
KFNWR0VsZW1lbnQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0VsZW1lbnQ6OmdldChw
MSxwMixwMyk7CiAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpoYXNQcm9wZXJ0eShwMSxwMikpIHJldHVy
biBTVkdMYW5nU3BhY2U6OmdldChwMSxwMixwMyk7CkBAIC02MTExLDEwICs2MTExLDEwIEBAIGJv
b2wgU1ZHVGl0bGVFbGVtZW50OjpwdXQoUFVUX01FVEhPRF9BUkcKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU9iamVjdCBTVkdUaXRsZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBj
b25zdAorT2JqZWN0SW1wICpTVkdUaXRsZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAx
KSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5P
YmplY3RQcm90b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkp
OworICAgIHJldHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1RpdGxlRWxlbWVudDo6YnJp
ZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC02MTIyLDcgKzYxMjIsNyBAQCBPYmplY3RJbXAg
KlNWR1RpdGxlRWxlbWVudDo6YnJpZGdlKEV4ZWNTCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01S
V0JyaWRnZTxTVkdUaXRsZUVsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1RpdGxlRWxlbWVudDo6
UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNWR1RpdGxlRWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdUaXRsZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1RpdGxl
RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVGl0bGVFbGVtZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTYxMzEsMTIgKzYxMzEsMTIgQEAgYm9vbCBTVkdUcmFuc2Zvcm06Omhhc1Byb3BlcnR5
KEV4ZWNTdGF0ZQogewogICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IExvb2t1cDo6ZmluZEVudHJ5
KCZTVkdUcmFuc2Zvcm06OnNfaGFzaFRhYmxlLHAyKTsKICAgICBpZihlKSByZXR1cm4gdHJ1ZTsK
LSAgICBPYmplY3QgcHJvdG8gPSBTVkdUcmFuc2Zvcm1Qcm90bzo6c2VsZihwMSk7Ci0gICAgaWYo
cHJvdG8uaGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gdHJ1ZTsKKyAgICBPYmplY3RJbXAgKnBy
b3RvID0gU1ZHVHJhbnNmb3JtUHJvdG86OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9w
ZXJ0eShwMSxwMikpIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUg
U1ZHVHJhbnNmb3JtOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1Ry
YW5zZm9ybTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6
bG9va3VwR2V0PFNWR1RyYW5zZm9ybVByb3RvRnVuYyxTVkdUcmFuc2Zvcm0+KHAxLHAyLCZzX2hh
c2hUYWJsZSx0aGlzLHAzKTsKIH0KQEAgLTYxNTMsMTggKzYxNTMsMTggQEAgU1ZHVHJhbnNmb3Jt
IEtTVkc6OnRvU1ZHVHJhbnNmb3JtKEtKUzo6RQogICAgIHJldHVybiBTVkdUcmFuc2Zvcm06Om51
bGw7CiB9CiAKLVZhbHVlIFNWR1RyYW5zZm9ybTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm06OmdldEluUGFyZW50cyhHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHVHJhbnNmb3JtUHJvdG86OnNl
bGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHByb3RvLmdl
dChwMSxwMik7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1RyYW5zZm9ybVByb3RvOjpzZWxm
KHAxKTsKKyAgICBpZihwcm90by0+aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gcHJvdG8tPmdl
dChwMSxwMik7CiAgICAgUV9VTlVTRUQocDMpOwogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotT2JqZWN0IFNWR1RyYW5zZm9ybTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitP
YmplY3RJbXAgKlNWR1RyYW5zZm9ybTo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7
CiAgICAgaWYocDEpIHJldHVybiBTVkdUcmFuc2Zvcm1Qcm90bzo6c2VsZihwMSk7Ci0gICAgcmV0
dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAog
T2JqZWN0SW1wICpTVkdUcmFuc2Zvcm06OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApAQCAt
NjE3Miw3ICs2MTcyLDcgQEAgT2JqZWN0SW1wICpTVkdUcmFuc2Zvcm06OmJyaWRnZShFeGVjU3Rh
dAogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNWR1RyYW5zZm9ybT4ocDEsc3RhdGlj
X2Nhc3Q8U1ZHVHJhbnNmb3JtOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHVHJh
bnNmb3JtOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1RyYW5zZm9y
bTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVE
T01PYmplY3Q8U1ZHVHJhbnNmb3JtPihwMSxzdGF0aWNfY2FzdDxTVkdUcmFuc2Zvcm06OlByaXZh
dGUgKj4oaW1wbCkpOwogfQpAQCAtNjE4MSwxMiArNjE4MSwxMiBAQCBib29sIFNWR1RyYW5zZm9y
bUxpc3Q6Omhhc1Byb3BlcnR5KEV4ZWNTCiB7CiAgICAgY29uc3QgSGFzaEVudHJ5ICplID0gTG9v
a3VwOjpmaW5kRW50cnkoJlNWR1RyYW5zZm9ybUxpc3Q6OnNfaGFzaFRhYmxlLHAyKTsKICAgICBp
ZihlKSByZXR1cm4gdHJ1ZTsKLSAgICBPYmplY3QgcHJvdG8gPSBTVkdUcmFuc2Zvcm1MaXN0UHJv
dG86OnNlbGYocDEpOwotICAgIGlmKHByb3RvLmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRy
dWU7CisgICAgT2JqZWN0SW1wICpwcm90byA9IFNWR1RyYW5zZm9ybUxpc3RQcm90bzo6c2VsZihw
MSk7CisgICAgaWYocHJvdG8tPmhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIHRydWU7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm1MaXN0OjpnZXQoR0VUX01FVEhP
RF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybUxpc3Q6OmdldChHRVRfTUVUSE9E
X0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1cEdldDxTVkdUcmFuc2Zvcm1M
aXN0UHJvdG9GdW5jLFNWR1RyYW5zZm9ybUxpc3Q+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAz
KTsKIH0KQEAgLTYxOTgsMTggKzYxOTgsMTggQEAgU1ZHVHJhbnNmb3JtTGlzdCBTVkdUcmFuc2Zv
cm1MaXN0UHJvdG9GdQogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1MaXN0OjpudWxsOwogfQogCi1W
YWx1ZSBTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25z
dAorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybUxpc3Q6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FS
R1MpIGNvbnN0CiB7Ci0gICAgT2JqZWN0IHByb3RvID0gU1ZHVHJhbnNmb3JtTGlzdFByb3RvOjpz
ZWxmKHAxKTsKLSAgICBpZihwcm90by5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90by5n
ZXQocDEscDIpOworICAgIE9iamVjdEltcCAqcHJvdG8gPSBTVkdUcmFuc2Zvcm1MaXN0UHJvdG86
OnNlbGYocDEpOworICAgIGlmKHByb3RvLT5oYXNQcm9wZXJ0eShwMSxwMikpIHJldHVybiBwcm90
by0+Z2V0KHAxLHAyKTsKICAgICBRX1VOVVNFRChwMyk7CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1PYmplY3QgU1ZHVHJhbnNmb3JtTGlzdDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitPYmplY3RJbXAgKlNWR1RyYW5zZm9ybUxpc3Q6OnByb3RvdHlwZShFeGVjU3RhdGUg
KnAxKSBjb25zdAogewogICAgIGlmKHAxKSByZXR1cm4gU1ZHVHJhbnNmb3JtTGlzdFByb3RvOjpz
ZWxmKHAxKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1RyYW5zZm9ybUxpc3Q6OmJyaWRnZShFeGVj
U3RhdGUgKnAxKSBjb25zdApAQCAtNjIxNyw3ICs2MjE3LDcgQEAgT2JqZWN0SW1wICpTVkdUcmFu
c2Zvcm1MaXN0OjpicmlkZ2UoRXhlYwogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NQnJpZGdlPFNW
R1RyYW5zZm9ybUxpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR1RyYW5zZm9ybUxpc3Q6OlByaXZhdGUg
Kj4oaW1wbCkpOwogfQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm1MaXN0OjpjYWNoZShFeGVjU3RhdGUg
KnAxKSBjb25zdAorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybUxpc3Q6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1RyYW5zZm9y
bUxpc3Q+KHAxLHN0YXRpY19jYXN0PFNWR1RyYW5zZm9ybUxpc3Q6OlByaXZhdGUgKj4oaW1wbCkp
OwogfQpAQCAtNjIzMCwyMSArNjIzMCwyMSBAQCBib29sIFNWR1RyYW5zZm9ybWFibGU6Omhhc1By
b3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm1h
YmxlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1RyYW5zZm9ybWFi
bGU6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEtET006Omxvb2t1
cEdldFZhbHVlPFNWR1RyYW5zZm9ybWFibGU+KHAxLHAyLCZzX2hhc2hUYWJsZSx0aGlzLHAzKTsK
IH0KIAotVmFsdWUgU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJH
UykgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm1hYmxlOjpnZXRJblBhcmVudHMoR0VUX01F
VEhPRF9BUkdTKSBjb25zdAogewogICAgIGlmKFNWR0xvY2F0YWJsZTo6aGFzUHJvcGVydHkocDEs
cDIpKSByZXR1cm4gU1ZHTG9jYXRhYmxlOjpnZXQocDEscDIscDMpOwogICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKIH0KIAotT2JqZWN0IFNWR1RyYW5zZm9ybWFibGU6OnByb3RvdHlwZShFeGVjU3Rh
dGUgKnAxKSBjb25zdAorT2JqZWN0SW1wICpTVkdUcmFuc2Zvcm1hYmxlOjpwcm90b3R5cGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nh
c3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdUcmFuc2Zv
cm1hYmxlOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkgY29uc3QKQEAgLTYyNTIsNyArNjI1Miw3IEBA
IE9iamVjdEltcCAqU1ZHVHJhbnNmb3JtYWJsZTo6YnJpZGdlKEV4ZWMKICAgICByZXR1cm4gbmV3
IEtET006OkRPTUJyaWRnZTxTVkdUcmFuc2Zvcm1hYmxlPihwMSxzdGF0aWNfY2FzdDxTVkdUcmFu
c2Zvcm1hYmxlOjpQcml2YXRlICo+KGltcGwpKTsKIH0KIAotVmFsdWUgU1ZHVHJhbnNmb3JtYWJs
ZTo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdUcmFuc2Zvcm1hYmxl
OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURP
TU9iamVjdDxTVkdUcmFuc2Zvcm1hYmxlPihwMSxzdGF0aWNfY2FzdDxTVkdUcmFuc2Zvcm1hYmxl
OjpQcml2YXRlICo+KGltcGwpKTsKIH0KQEAgLTYyNjUsMjEgKzYyNjUsMjEgQEAgYm9vbCBTVkdV
UklSZWZlcmVuY2U6Omhhc1Byb3BlcnR5KEV4ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VmFsdWUgU1ZHVVJJUmVmZXJlbmNlOjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1VSSVJlZmVyZW5jZTo6Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBy
ZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZHVVJJUmVmZXJlbmNlPihwMSxwMiwmc19oYXNo
VGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVlIFNWR1VSSVJlZmVyZW5jZTo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdVUklSZWZlcmVuY2U6OmdldElu
UGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAgICAgUV9VTlVTRUQocDEpOyBRX1VO
VVNFRChwMik7IFFfVU5VU0VEKHAzKTsKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLU9i
amVjdCBTVkdVUklSZWZlcmVuY2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2Jq
ZWN0SW1wICpTVkdVUklSZWZlcmVuY2U6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAog
ewogICAgIGlmKHAxKSByZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90
b3R5cGUoKTsKLSAgICByZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJl
dHVybiBOVUxMOwogfQogCiBPYmplY3RJbXAgKlNWR1VSSVJlZmVyZW5jZTo6YnJpZGdlKEV4ZWNT
dGF0ZSAqcDEpIGNvbnN0CkBAIC02Mjg3LDcgKzYyODcsNyBAQCBPYmplY3RJbXAgKlNWR1VSSVJl
ZmVyZW5jZTo6YnJpZGdlKEV4ZWNTCiAgICAgcmV0dXJuIG5ldyBLRE9NOjpET01CcmlkZ2U8U1ZH
VVJJUmVmZXJlbmNlPihwMSxzdGF0aWNfY2FzdDxTVkdVUklSZWZlcmVuY2U6OlByaXZhdGUgKj4o
aW1wbCkpOwogfQogCi1WYWx1ZSBTVkdVUklSZWZlcmVuY2U6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEp
IGNvbnN0CitWYWx1ZUltcCAqU1ZHVVJJUmVmZXJlbmNlOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdVUklSZWZlcmVuY2U+
KHAxLHN0YXRpY19jYXN0PFNWR1VSSVJlZmVyZW5jZTo6UHJpdmF0ZSAqPihpbXBsKSk7CiB9CkBA
IC02MzA2LDEyICs2MzA2LDEyIEBAIGJvb2wgU1ZHVXNlRWxlbWVudDo6aGFzUHJvcGVydHkoRXhl
Y1N0YXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZhbHVlIFNWR1VzZUVsZW1lbnQ6OmdldChH
RVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVXNlRWxlbWVudDo6Z2V0KEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6bG9va3VwR2V0VmFsdWU8U1ZH
VXNlRWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxlLHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdV
c2VFbGVtZW50OjpnZXRJblBhcmVudHMoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR1VzZUVsZW1lbnQ6OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CiB7CiAg
ICAgaWYoU1ZHRWxlbWVudDo6aGFzUHJvcGVydHkocDEscDIpKSByZXR1cm4gU1ZHRWxlbWVudDo6
Z2V0KHAxLHAyLHAzKTsKICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpnZXQo
cDEscDIscDMpOwpAQCAtNjMzNiwxMCArNjMzNiwxMCBAQCBib29sIFNWR1VzZUVsZW1lbnQ6OnB1
dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmplY3QgU1ZHVXNl
RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1Vz
ZUVsZW1lbnQ6OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAogewogICAgIGlmKHAxKSBy
ZXR1cm4gcDEtPmludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKTsKLSAgICBy
ZXR1cm4gT2JqZWN0OjpkeW5hbWljQ2FzdChOdWxsKCkpOworICAgIHJldHVybiBOVUxMOwogfQog
CiBPYmplY3RJbXAgKlNWR1VzZUVsZW1lbnQ6OmJyaWRnZShFeGVjU3RhdGUgKnAxKSBjb25zdApA
QCAtNjM0Nyw3ICs2MzQ3LDcgQEAgT2JqZWN0SW1wICpTVkdVc2VFbGVtZW50OjpicmlkZ2UoRXhl
Y1N0YQogICAgIHJldHVybiBuZXcgS0RPTTo6RE9NUldCcmlkZ2U8U1ZHVXNlRWxlbWVudD4ocDEs
c3RhdGljX2Nhc3Q8U1ZHVXNlRWxlbWVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CiAKLVZhbHVlIFNW
R1VzZUVsZW1lbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHVXNl
RWxlbWVudDo6Y2FjaGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6
Y2FjaGVET01PYmplY3Q8U1ZHVXNlRWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVXNlRWxlbWVu
dDo6UHJpdmF0ZSAqPihkKSk7CiB9CkBAIC02MzYzLDEyICs2MzYzLDEyIEBAIGJvb2wgU1ZHVmll
d0VsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVZh
bHVlIFNWR1ZpZXdFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAg
KlNWR1ZpZXdFbGVtZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVy
biBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdWaWV3RWxlbWVudD4ocDEscDIsJnNfaGFzaFRhYmxl
LHRoaXMscDMpOwogfQogCi1WYWx1ZSBTVkdWaWV3RWxlbWVudDo6Z2V0SW5QYXJlbnRzKEdFVF9N
RVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdWaWV3RWxlbWVudDo6Z2V0SW5QYXJlbnRz
KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihTVkdFbGVtZW50OjpoYXNQcm9wZXJ0
eShwMSxwMikpIHJldHVybiBTVkdFbGVtZW50OjpnZXQocDEscDIscDMpOwogICAgIGlmKFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omhhc1Byb3BlcnR5KHAxLHAyKSkgcmV0dXJuIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmdldChwMSxwMixwMyk7CkBAIC02MzkwLDEwICs2Mzkw
LDEwIEBAIGJvb2wgU1ZHVmlld0VsZW1lbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU9iamVjdCBTVkdWaWV3RWxlbWVudDo6cHJvdG90eXBlKEV4ZWNTdGF0
ZSAqcDEpIGNvbnN0CitPYmplY3RJbXAgKlNWR1ZpZXdFbGVtZW50Ojpwcm90b3R5cGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICBpZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5i
dWlsdGluT2JqZWN0UHJvdG90eXBlKCk7Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3Qo
TnVsbCgpKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogT2JqZWN0SW1wICpTVkdWaWV3RWxlbWVu
dDo6YnJpZGdlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CkBAIC02NDAxLDcgKzY0MDEsNyBAQCBPYmpl
Y3RJbXAgKlNWR1ZpZXdFbGVtZW50OjpicmlkZ2UoRXhlY1N0CiAgICAgcmV0dXJuIG5ldyBLRE9N
OjpET01SV0JyaWRnZTxTVkdWaWV3RWxlbWVudD4ocDEsc3RhdGljX2Nhc3Q8U1ZHVmlld0VsZW1l
bnQ6OlByaXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdWaWV3RWxlbWVudDo6Y2FjaGUoRXhl
Y1N0YXRlICpwMSkgY29uc3QKK1ZhbHVlSW1wICpTVkdWaWV3RWxlbWVudDo6Y2FjaGUoRXhlY1N0
YXRlICpwMSkgY29uc3QKIHsKICAgICByZXR1cm4gS0RPTTo6Y2FjaGVET01PYmplY3Q8U1ZHVmll
d0VsZW1lbnQ+KHAxLHN0YXRpY19jYXN0PFNWR1ZpZXdFbGVtZW50OjpQcml2YXRlICo+KGQpKTsK
IH0KQEAgLTY0MTQsMTIgKzY0MTQsMTIgQEAgYm9vbCBTVkdab29tQW5kUGFuOjpoYXNQcm9wZXJ0
eShFeGVjU3RhdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmFsdWUgU1ZHWm9vbUFuZFBhbjo6
Z2V0KEdFVF9NRVRIT0RfQVJHUykgY29uc3QKK1ZhbHVlSW1wICpTVkdab29tQW5kUGFuOjpnZXQo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAogewogICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1
ZTxTVkdab29tQW5kUGFuPihwMSxwMiwmc19oYXNoVGFibGUsdGhpcyxwMyk7CiB9CiAKLVZhbHVl
IFNWR1pvb21BbmRQYW46OmdldEluUGFyZW50cyhHRVRfTUVUSE9EX0FSR1MpIGNvbnN0CitWYWx1
ZUltcCAqU1ZHWm9vbUFuZFBhbjo6Z2V0SW5QYXJlbnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QK
IHsKICAgICBRX1VOVVNFRChwMSk7IFFfVU5VU0VEKHAyKTsgUV9VTlVTRUQocDMpOwogICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKQEAgLTY0MzYsMTAgKzY0MzYsMTAgQEAgYm9vbCBTVkdab29tQW5k
UGFuOjpwdXRJblBhcmVudHMoUFVUX01FVAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotT2JqZWN0
IFNWR1pvb21BbmRQYW46OnByb3RvdHlwZShFeGVjU3RhdGUgKnAxKSBjb25zdAorT2JqZWN0SW1w
ICpTVkdab29tQW5kUGFuOjpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogT2JqZWN0SW1wICpTVkdab29tQW5kUGFuOjpicmlkZ2UoRXhlY1N0YXRlICpwMSkg
Y29uc3QKQEAgLTY0NDcsNyArNjQ0Nyw3IEBAIE9iamVjdEltcCAqU1ZHWm9vbUFuZFBhbjo6YnJp
ZGdlKEV4ZWNTdGEKICAgICByZXR1cm4gbmV3IEtET006OkRPTVJXQnJpZGdlPFNWR1pvb21BbmRQ
YW4+KHAxLHN0YXRpY19jYXN0PFNWR1pvb21BbmRQYW46OlByaXZhdGUgKj4oaW1wbCkpOwogfQog
Ci1WYWx1ZSBTVkdab29tQW5kUGFuOjpjYWNoZShFeGVjU3RhdGUgKnAxKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1pvb21BbmRQYW46OmNhY2hlKEV4ZWNTdGF0ZSAqcDEpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEtET006OmNhY2hlRE9NT2JqZWN0PFNWR1pvb21BbmRQYW4+KHAxLHN0YXRpY19jYXN0PFNW
R1pvb21BbmRQYW46OlByaXZhdGUgKj4oaW1wbCkpOwogfQpAQCAtNjQ2MCwxMiArNjQ2MCwxMiBA
QCBib29sIFNWR1pvb21FdmVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1WYWx1ZSBTVkdab29tRXZlbnQ6OmdldChHRVRfTUVUSE9EX0FSR1MpIGNvbnN0
CitWYWx1ZUltcCAqU1ZHWm9vbUV2ZW50OjpnZXQoR0VUX01FVEhPRF9BUkdTKSBjb25zdAogewog
ICAgIHJldHVybiBLRE9NOjpsb29rdXBHZXRWYWx1ZTxTVkdab29tRXZlbnQ+KHAxLHAyLCZzX2hh
c2hUYWJsZSx0aGlzLHAzKTsKIH0KIAotVmFsdWUgU1ZHWm9vbUV2ZW50OjpnZXRJblBhcmVudHMo
R0VUX01FVEhPRF9BUkdTKSBjb25zdAorVmFsdWVJbXAgKlNWR1pvb21FdmVudDo6Z2V0SW5QYXJl
bnRzKEdFVF9NRVRIT0RfQVJHUykgY29uc3QKIHsKICAgICBpZihLRE9NOjpVSUV2ZW50OjpoYXNQ
cm9wZXJ0eShwMSxwMikpIHJldHVybiBLRE9NOjpVSUV2ZW50OjpnZXQocDEscDIscDMpOwogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTY0NzcsMTAgKzY0NzcsMTAgQEAgYm9vbCBTVkdab29t
RXZlbnQ6OnB1dChQVVRfTUVUSE9EX0FSR1MpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1PYmpl
Y3QgU1ZHWm9vbUV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKK09iamVjdElt
cCAqU1ZHWm9vbUV2ZW50Ojpwcm90b3R5cGUoRXhlY1N0YXRlICpwMSkgY29uc3QKIHsKICAgICBp
ZihwMSkgcmV0dXJuIHAxLT5pbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCk7
Ci0gICAgcmV0dXJuIE9iamVjdDo6ZHluYW1pY0Nhc3QoTnVsbCgpKTsKKyAgICByZXR1cm4gTlVM
TDsKIH0KIAogS0RPTTo6VUlFdmVudCBLU1ZHOjpFY21hSW50ZXJmYWNlOjppbmhlcml0ZWRVSUV2
ZW50Q2FzdChjb25zdCBPYmplY3RJbXAgKnAxKQpAQCAtNjQ5Nyw3ICs2NDk3LDcgQEAgT2JqZWN0
SW1wICpTVkdab29tRXZlbnQ6OmJyaWRnZShFeGVjU3RhdAogICAgIHJldHVybiBuZXcgS0RPTTo6
RE9NUldCcmlkZ2U8U1ZHWm9vbUV2ZW50PihwMSxzdGF0aWNfY2FzdDxTVkdab29tRXZlbnQ6OlBy
aXZhdGUgKj4oZCkpOwogfQogCi1WYWx1ZSBTVkdab29tRXZlbnQ6OmNhY2hlKEV4ZWNTdGF0ZSAq
cDEpIGNvbnN0CitWYWx1ZUltcCAqU1ZHWm9vbUV2ZW50OjpjYWNoZShFeGVjU3RhdGUgKnAxKSBj
b25zdAogewogICAgIHJldHVybiBLRE9NOjpjYWNoZURPTU9iamVjdDxTVkdab29tRXZlbnQ+KHAx
LHN0YXRpY19jYXN0PFNWR1pvb21FdmVudDo6UHJpdmF0ZSAqPihkKSk7CiB9CkluZGV4OiBrc3Zn
Mi9kb20vU1ZHQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdBRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBRWxlbWVudC5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdBRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdBRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNDMsNyAr
NDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FFbGVt
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKlNWR0FFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20v
U1ZHQUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHQUVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdBRWxlbWVu
dC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQUVsZW1l
bnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC02NSw3ICs2NSw3IEBAIG5hbWVzcGFj
ZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
S0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuZ2xlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5n
bGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHQW5nbGUuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5nbGUuY3BwCTkgSnVsIDIwMDUgMDY6
NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5nbGUuY3BwCTggQXVnIDIwMDUgMTk6
NTU6MDEgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtT
VkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHQW5nbGUiLCBTVkdBbmdsZVByb3RvLCBTVkdBbmds
ZVByb3RvRnVuYykKIAotVmFsdWUgU1ZHQW5nbGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5nbGU6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9T
QUZFCiAKQEAgLTcxLDcgKzcxLDcgQEAgVmFsdWUgU1ZHQW5nbGU6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdBbmdsZTo6cHV0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVl
LCBpbnQpCit2b2lkIFNWR0FuZ2xlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApA
QCAtNzksMTIgKzc5LDEyIEBAIHZvaWQgU1ZHQW5nbGU6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXQKIAl7CiAJCWNhc2UgU1ZHQW5nbGVDb25zdGFudHM6OlZhbHVlOgogCQl7Ci0JCQlzZXRWYWx1
ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRWYWx1ZSh2YWx1ZS0+dG9OdW1iZXIoZXhl
YykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdBbmdsZUNvbnN0YW50czo6VmFsdWVJblNw
ZWNpZmllZFVuaXRzOgogCQl7Ci0JCQlzZXRWYWx1ZUluU3BlY2lmaWVkVW5pdHModmFsdWUudG9O
dW1iZXIoZXhlYykpOworCQkJc2V0VmFsdWVJblNwZWNpZmllZFVuaXRzKHZhbHVlLT50b051bWJl
cihleGVjKSk7CiAJCQlicmVhazsKIAkJfQogCQljYXNlIFNWR0FuZ2xlQ29uc3RhbnRzOjpWYWx1
ZUFzU3RyaW5nOgpAQCAtOTksNyArOTksNyBAQCB2b2lkIFNWR0FuZ2xlOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0CiAJS0RPTV9MRUFWRV9TQUZFKEtET006OkRPTUV4Y2VwdGlvbikKIH0KIAot
VmFsdWUgU1ZHQW5nbGVQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHQW5nbGVQcm90b0Z1bmM6OmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhTVkdBbmdsZSkKIAlLRE9NX0VOVEVSX1NB
RkUKQEAgLTEwOCwxMyArMTA4LDEzIEBAIFZhbHVlIFNWR0FuZ2xlUHJvdG9GdW5jOjpjYWxsKEV4
ZWNTdGF0ZSAKIAl7CiAJCWNhc2UgU1ZHQW5nbGVDb25zdGFudHM6OkNvbnZlcnRUb1NwZWNpZmll
ZFVuaXRzOgogCQl7Ci0JCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFyZ3NbMF0udG9VSW50
MTYoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFyZ3NbMF0tPnRvVUludDE2
KGV4ZWMpOwogCQkJb2JqLmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHVuaXRUeXBlKTsKIAkJfQog
CQljYXNlIFNWR0FuZ2xlQ29uc3RhbnRzOjpOZXdWYWx1ZVNwZWNpZmllZFVuaXRzOgogCQl7Ci0J
CQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFyZ3NbMF0udG9VSW50MTYoZXhlYyk7Ci0JCQlm
bG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOworCQkJ
dW5zaWduZWQgc2hvcnQgdW5pdFR5cGUgPSBhcmdzWzBdLT50b1VJbnQxNihleGVjKTsKKwkJCWZs
b2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJ
b2JqLm5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5pdFR5cGUsIHZhbHVlSW5TcGVjaWZpZWRVbml0
cyk7CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmdsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmdsZS5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5n
bGUuaAotLS0ga3N2ZzIvZG9tL1NWR0FuZ2xlLmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkx
LjEKKysrIGtzdmcyL2RvbS9TVkdBbmdsZS5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAg
LTcyLDggKzcyLDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9QVVQKIAkJS0RPTV9DQVNUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIAogfTsK
SW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZUNvbG9yRWxl
bWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVD
b2xvckVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApA
QCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVl
IFNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5p
bWF0ZUNvbG9yRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZH
QW5pbWF0ZUNvbG9yRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAw
MDAKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9G
T1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlRWxlbWVudC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmlt
YXRlRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlRWxlbWVudC5jcHAJOSBKdWwg
MjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlRWxlbWVudC5j
cHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVFbGVtZW50OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNW
R0FuaW1hdGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVFbGVtZW50LmgKLS0tIGtzdmcyL2Rv
bS9TVkdBbmltYXRlRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBr
c3ZnMi9kb20vU1ZHQW5pbWF0ZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBA
IC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FS
RFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a3N2ZzIvZG9tL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVs
ZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisr
KyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6
NTU6MDEgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5k
CiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRl
VHJhbnNmb3JtRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlVHJh
bnNmb3JtRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQu
aAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVU
cmFuc2Zvcm1FbGVtZW50LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNDksNyArNDks
NyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9T
VkdBbmltYXRlZEFuZ2xlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRBbmdsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZEFuZ2xlLmNwcAotLS0g
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkQW5nbGUuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRBbmdsZS5jcHAJOCBBdWcgMjAwNSAxOTo1NTow
MSAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICov
CiAKLVZhbHVlIFNWR0FuaW1hdGVkQW5nbGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5pbWF0ZWRBbmdsZTo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VO
VEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQW5nbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRBbmds
ZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRBbmdsZS5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRBbmdsZS5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRBbmdsZS5o
CTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIEtT
VkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQK
IAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcy
L2RvbS9TVkdBbmltYXRlZEJvb2xlYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZEJvb2xlYW4uY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRCb29s
ZWFuLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQm9vbGVhbi5jcHAJOSBKdWwgMjAwNSAw
Njo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZEJvb2xlYW4uY3BwCTgg
QXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZEJvb2xlYW46OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5p
bWF0ZWRCb29sZWFuOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02MCw3ICs2MCw3IEBAIFZhbHVlIFNW
R0FuaW1hdGVkQm9vbGVhbjo6Z2V0VmFsdWVQcm9wZXIKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9
CiAKLXZvaWQgU1ZHQW5pbWF0ZWRCb29sZWFuOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHQW5pbWF0
ZWRCb29sZWFuOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBW
YWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjksNyArNjks
NyBAQCB2b2lkIFNWR0FuaW1hdGVkQm9vbGVhbjo6cHV0VmFsdWVQcm9wZXJ0CiAJCWNhc2UgU1ZH
QW5pbWF0ZWRCb29sZWFuQ29uc3RhbnRzOjpCYXNlVmFsOgogCQl7CiAJCQlpZihpbXBsKQotCQkJ
CWltcGwtPnNldEJhc2VWYWwodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKwkJCQlpbXBsLT5zZXRC
YXNlVmFsKHZhbHVlLT50b0Jvb2xlYW4oZXhlYykpOwogCiAJCQlicmVhazsKIAkJfQpJbmRleDog
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkQm9vbGVhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZEJvb2xlYW4uaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkQm9v
bGVhbi5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRCb29sZWFuLmgJOSBKdWwgMjAwNSAwNjo1
NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZEJvb2xlYW4uaAk4IEF1ZyAy
MDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NSw4ICs1NSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtE
T01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6
VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bi5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZEVudW1lcmF0aW9uLmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24u
Y3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR0FuaW1hdGVkRW51bWVyYXRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYwLDcgKzYw
LDcgQEAgVmFsdWUgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6Z2V0VmFsdWVQcgogCXJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGlu
dCkKK3ZvaWQgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBTVkdBbmltYXRlZEVudW1lcmF0aW9uOjpw
dXRWYWx1ZVBybwogCQljYXNlIFNWR0FuaW1hdGVkRW51bWVyYXRpb25Db25zdGFudHM6OkJhc2VW
YWw6CiAJCXsKIAkJCWlmKGltcGwpCi0JCQkJaW1wbC0+c2V0QmFzZVZhbChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydD4odmFsdWUudG9OdW1iZXIoZXhlYykpKTsKKwkJCQlpbXBsLT5zZXRCYXNl
VmFsKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpKTsK
IAogCQkJYnJlYWs7CiAJCX0KSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZEVudW1lcmF0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R0FuaW1hdGVkRW51bWVyYXRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uaAotLS0ga3N2ZzIvZG9t
L1NWR0FuaW1hdGVkRW51bWVyYXRpb24uaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkRW51bWVyYXRpb24uaAk4IEF1ZyAyMDA1IDE5OjU1OjAx
IC0wMDAwCkBAIC01NSw4ICs1NSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fQkFTRUNMQVNT
X0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVl
LCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50
IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRJbnRlZ2VyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkSW50ZWdlci5jcHAKLS0tIGtzdmcyL2RvbS9TVkdB
bmltYXRlZEludGVnZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHQW5pbWF0ZWRJbnRlZ2VyLmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBA
IC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUg
U1ZHQW5pbWF0ZWRJbnRlZ2VyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkSW50ZWdlcjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NB
RkUKIApAQCAtNTksNyArNTksNyBAQCBWYWx1ZSBTVkdBbmltYXRlZEludGVnZXI6OmdldFZhbHVl
UHJvcGVyCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR0FuaW1hdGVkSW50ZWdl
cjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR0FuaW1hdGVkSW50ZWdlcjo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBTVkdBbmltYXRlZEludGVn
ZXI6OnB1dFZhbHVlUHJvcGVydAogCQljYXNlIFNWR0FuaW1hdGVkSW50ZWdlckNvbnN0YW50czo6
QmFzZVZhbDoKIAkJewogCQkJaWYoaW1wbCkKLQkJCQlpbXBsLT5zZXRCYXNlVmFsKHN0YXRpY19j
YXN0PGxvbmc+KHZhbHVlLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQkJaW1wbC0+c2V0QmFzZVZhbChz
dGF0aWNfY2FzdDxsb25nPih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpKTsKIAogCQkJYnJlYWs7CiAJ
CX0KSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZEludGVnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRJbnRlZ2VyLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdB
bmltYXRlZEludGVnZXIuaAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVkSW50ZWdlci5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRJbnRlZ2Vy
LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTMsOCArNTMsOCBAQCBuYW1lc3BhY2Ug
S1NWRwogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0J
CXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2
b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pT
OjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9t
L1NWR0FuaW1hdGVkTGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGguY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGguY3Bw
Ci0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGguY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRMZW5ndGguY3BwCTggQXVnIDIwMDUg
MTk6NTU6MDEgLTAwMDAKQEAgLTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBA
ZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZExlbmd0aDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZExlbmd0
aDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsK
IAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0Fu
aW1hdGVkTGVuZ3RoLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aC5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRM
ZW5ndGguaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0Fu
aW1hdGVkTGVuZ3RoLmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTQsNyArNTQsNyBA
QCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01f
QkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkTGVuZ3Ro
TGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdBbmltYXRlZExlbmd0aExpc3QuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRM
ZW5ndGhMaXN0LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9t
L1NWR0FuaW1hdGVkTGVuZ3RoTGlzdC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAt
NDEsNyArNDEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNW
R0FuaW1hdGVkTGVuZ3RoTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdBbmltYXRlZExlbmd0aExpc3Q6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRF
Ul9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aExpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRM
ZW5ndGhMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdBbmltYXRlZExlbmd0aExpc3QuaAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGVk
TGVuZ3RoTGlzdC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTUs
NyArNTUsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9u
CiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAq
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
IAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRO
dW1iZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHQW5pbWF0ZWROdW1iZXIuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1i
ZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZWROdW1iZXIuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQzLDcgKzQzLDcg
QEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZE51
bWJlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpTVkdBbmltYXRlZE51bWJlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjEsNyAr
NjEsNyBAQCBWYWx1ZSBTVkdBbmltYXRlZE51bWJlcjo6Z2V0VmFsdWVQcm9wZXJ0CiAJcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR0FuaW1hdGVkTnVtYmVyOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkK
K3ZvaWQgU1ZHQW5pbWF0ZWROdW1iZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXIuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1h
dGVkTnVtYmVyLmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlci5oCTkgSnVsIDIwMDUg
MDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXIuaAk4IEF1
ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NSw4ICs1NSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJ
CUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBw
dXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtK
Uzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5p
bWF0ZWROdW1iZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVyTGlz
dC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlckxpc3QuY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNw
cAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAg
KlNWR0FuaW1hdGVkTnVtYmVyTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9t
L1NWR0FuaW1hdGVkTnVtYmVyTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlckxpc3QuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkTnVtYmVy
TGlzdC5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgJOSBKdWwgMjAwNSAw
Njo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZE51bWJlckxpc3QuaAk4
IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZWRQYXRoRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQYXRo
RGF0YS5jcHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFBhdGhEYXRhLmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjUxIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuY3Bw
CTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZFBhdGhEYXRhOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNW
R0FuaW1hdGVkUGF0aERhdGE6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdB
bmltYXRlZFBhdGhEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuaAotLS0g
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuaAk5IEp1bCAyMDA1IDA2OjU0OjUxIC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUGF0aERhdGEuaAk4IEF1ZyAyMDA1IDE5OjU1
OjAxIC0wMDAwCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBF
Y21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQ
b2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcy
L2RvbS9TVkdBbmltYXRlZFBvaW50cy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZFBvaW50cy5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdBbmltYXRlZFBvaW50cy5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdBbmltYXRlZFBvaW50cy5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAw
MApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZh
bHVlIFNWR0FuaW1hdGVkUG9pbnRzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUG9pbnRzOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQb2ludHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQb2ludHMu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0FuaW1hdGVkUG9pbnRzLmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFBvaW50cy5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTEgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQb2ludHMu
aAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBL
U1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VU
CiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3Zn
Mi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFz
cGVjdFJhdGlvLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAKLS0tIGtzdmcyL2Rv
bS9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNw
cAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJh
dGlvOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAor
VmFsdWVJbXAgKlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRl
ZFByZXNlcnZlQXNwZWN0UmF0aW8uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oCi0tLSBr
c3ZnMi9kb20vU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgJOSBKdWwgMjAwNSAwNjo1
NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0
aW8uaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFj
ZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1Nf
R0VUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBr
c3ZnMi9kb20vU1ZHQW5pbWF0ZWRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0ZWRSZWN0LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUmVjdC5j
cHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFJlY3QuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTEg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRSZWN0LmNwcAk4IEF1ZyAyMDA1IDE5
OjU1OjAxIC0wMDAwCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVu
ZAogKi8KIAotVmFsdWUgU1ZHQW5pbWF0ZWRSZWN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkUmVjdDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0FuaW1hdGVkUmVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZFJl
Y3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR0FuaW1hdGVkUmVjdC5oCi0tLSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRSZWN0LmgJOSBKdWwg
MjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFJlY3QuaAk4
IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHQW5pbWF0ZWRTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5j
cHAKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1
MSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5jcHAJOCBBdWcgMjAw
NSAxOTo1NTowMSAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsK
IEBlbmQKICovCiAKLVZhbHVlIFNWR0FuaW1hdGVkU3RyaW5nOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1hdGVkU3Ry
aW5nOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogCUtET01fRU5URVJfU0FGRQogCkBAIC02MCw3ICs2MCw3IEBAIFZhbHVlIFNWR0FuaW1hdGVk
U3RyaW5nOjpnZXRWYWx1ZVByb3BlcnQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQg
U1ZHQW5pbWF0ZWRTdHJpbmc6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdBbmltYXRlZFN0cmluZzo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZh
bHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmlt
YXRlZFN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRTdHJpbmcuaAotLS0ga3N2ZzIvZG9t
L1NWR0FuaW1hdGVkU3RyaW5nLmgJOSBKdWwgMjAwNSAwNjo1NDo1MSAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdBbmltYXRlZFN0cmluZy5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAg
LTU2LDggKzU2LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtE
T01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRy
KTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJ
fTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdBbmlt
YXRlZFRyYW5zZm9ybUxpc3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmNwcAotLS0ga3N2ZzIv
ZG9tL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuY3BwCTggQXVnIDIw
MDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7
CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZH
QW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaAk5IEp1
bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGVkVHJhbnNm
b3JtTGlzdC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgbmFt
ZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VD
TEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdB
bmltYXRpb25FbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3Bw
CTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNDQsNyArNDQsNyBAQCB1
c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdBbmlt
YXRpb25FbGVtZW50IiwgU1ZHQW5pbWF0aW9uRWxlbWVudFByb3RvLCBTVkdBbmltYXRpb25FbGVt
ZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdBbmltYXRpb25FbGVtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0FuaW1h
dGlvbkVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYxLDkgKzYxLDkgQEAgVmFsdWUgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6Z2V0VmFsdWVQcm9wZQogfQogCiAKLVZhbHVlIFNWR0FuaW1hdGlv
bkVsZW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmos
IGNvbnN0IExpc3QgJikKK1ZhbHVlSW1wICpTVkdBbmltYXRpb25FbGVtZW50UHJvdG9GdW5jOjpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmKQogewotCVNWR0FuaW1hdGlvbkVsZW1lbnQgb2JqKGNhc3QoZXhlYywgc3RhdGljX2Nh
c3Q8S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsKKwlTVkdBbmltYXRpb25FbGVt
ZW50IG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlLRE9NX0VOVEVSX1NBRkUKIAogCXN3aXRj
aChpZCkKSW5kZXg6IGtzdmcyL2RvbS9TVkdBbmltYXRpb25FbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0FuaW1hdGlvbkVsZW1l
bnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR0FuaW1hdGlvbkVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0FuaW1hdGlvbkVsZW1lbnQu
aAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0FuaW1hdGlv
bkVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC02MCw3ICs2MCw3IEBAIG5h
bWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdDaXJjbGVFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0NpcmNsZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9k
b20vU1ZHQ2lyY2xlRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdDaXJjbGVFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAw
CkBAIC00MSw3ICs0MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFs
dWUgU1ZHQ2lyY2xlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdDaXJjbGVFbGVtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FG
RQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQ2lyY2xlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdDaXJjbGVFbGVtZW50Lmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdDaXJj
bGVFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdDaXJjbGVFbGVtZW50LmgJOSBKdWwgMjAwNSAw
Njo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdDaXJjbGVFbGVtZW50LmgJOCBBdWcg
MjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNjUsNyArNjUsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlL
RE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdDbGlw
UGF0aEVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0NsaXBQ
YXRoRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQ0
LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdD
bGlwUGF0aEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHQ2xpcFBhdGhFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHQ2xpcFBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0NsaXBQYXRoRWxlbWVudC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQ2xp
cFBhdGhFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdDbGlwUGF0aEVsZW1lbnQuaAk5IEp1bCAy
MDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0NsaXBQYXRoRWxlbWVudC5o
CTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEtT
VkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHQ29sb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdDb2xvci5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdDb2xvci5jcHAKLS0tIGtzdmcyL2RvbS9TVkdDb2xvci5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1
MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdDb2xvci5jcHAJOCBBdWcgMjAwNSAxOTo1NTow
MSAtMDAwMApAQCAtNDksNyArNDksNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19J
TVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdDb2xvciIsIFNWR0NvbG9yUHJvdG8sIFNWR0NvbG9yUHJv
dG9GdW5jKQogCi1WYWx1ZSBTVkdDb2xvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdDb2xvcjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IApAQCAtNjgsNyArNjgsNyBAQCBWYWx1ZSBTVkdDb2xvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdDb2xvclByb3RvRnVuYzo6
Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykK
K1ZhbHVlSW1wICpTVkdDb2xvclByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpl
eGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVD
S19USElTKFNWR0NvbG9yKQogCUtET01fRU5URVJfU0FGRQpAQCAtOTAsNyArOTAsNyBAQCBWYWx1
ZSBTVkdDb2xvclByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgCiAJCX0KIAkJY2FzZSBTVkdDb2xv
ckNvbnN0YW50czo6U2V0Q29sb3I6CiAJCXsKLQkJCXVuc2lnbmVkIHNob3J0IGNvbG9yVHlwZSA9
IGFyZ3NbMF0udG9VSW50MTYoZXhlYyk7CisJCQl1bnNpZ25lZCBzaG9ydCBjb2xvclR5cGUgPSBh
cmdzWzBdLT50b1VJbnQxNihleGVjKTsKIAkJCUtET006OkRPTVN0cmluZyByZ2JDb2xvciA9IEtE
T006OnRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbMV0pOwogCQkJS0RPTTo6RE9NU3RyaW5nIGljY0Nv
bG9yID0gS0RPTTo6dG9ET01TdHJpbmcoZXhlYywgYXJnc1syXSk7CiAJCQlvYmouc2V0Q29sb3Io
Y29sb3JUeXBlLCByZ2JDb2xvciwgaWNjQ29sb3IpOwpJbmRleDoga3N2ZzIvZG9tL1NWR0NvbG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R0NvbG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdDb2xvci5oCi0tLSBrc3ZnMi9kb20vU1ZHQ29sb3IuaAk5IEp1bCAyMDA1IDA2OjU0
OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0NvbG9yLmgJOCBBdWcgMjAwNSAxOTo1NTow
MSAtMDAwMApAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlL
RE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07
CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb25FbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b25FbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9t
L1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE5OjU1
OjAxIC0wMDAwCkBAIC01Miw3ICs1Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAog
Ki8KIAotVmFsdWUgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZH
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6
IGtzdmcyL2RvbS9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQu
aAotLS0ga3N2ZzIvZG9tL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgJOSBK
dWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uRWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTYxLDcg
KzYxLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHRGVmc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5jcHAKLS0tIGtz
dmcyL2RvbS9TVkdEZWZzRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAw
MApAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZh
bHVlIFNWR0RlZnNFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0RlZnNFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHRGVmc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRGVmc0VsZW1lbnQuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0RlZnNFbGVtZW50
LmgKLS0tIGtzdmcyL2RvbS9TVkdEZWZzRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAw
MDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRGVmc0VsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAx
IC0wMDAwCkBAIC01OCw3ICs1OCw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtE
T01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRGVzY0VsZW1lbnQuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRGVzY0Vs
ZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRGVzY0VsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6
NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRGVzY0VsZW1lbnQuY3BwCTggQXVnIDIw
MDUgMTk6NTU6MDEgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7
CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdEZXNjRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdEZXNjRWxlbWVudDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlL
RE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0Rlc2NFbGVt
ZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdEZXNjRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRGVzY0VsZW1lbnQuaAk5IEp1bCAy
MDA1IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0Rlc2NFbGVtZW50LmgJOCBB
dWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgS1NWRwog
CQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdEb2N1bWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0RvY3VtZW50
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9t
L1NWR0RvY3VtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0RvY3VtZW50LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0RvY3VtZW50LmNwcAk4IEF1ZyAy
MDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZH
OwogQGVuZAogKi8KIAotVmFsdWUgU1ZHRG9jdW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRG9jdW1lbnQ6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNo
KHRva2VuKQogCXsKSW5kZXg6IGtzdmcyL2RvbS9TVkdEb2N1bWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdEb2N1bWVudC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRG9jdW1l
bnQuaAotLS0ga3N2ZzIvZG9tL1NWR0RvY3VtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdEb2N1bWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAw
MDAKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9Q
VVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtz
dmcyL2RvbS9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9t
L1NWR0VsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNDksNyArNDks
NyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0VsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzEsNyArNzEsNyBAQCBWYWx1
ZSBTVkdFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAJcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi12b2lkIFNWR0VsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdFbGVtZW50Ojpw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFs
dWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0VsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRWxlbWVudC5oCTkgSnVsIDIw
MDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRWxlbWVudC5oCTggQXVnIDIw
MDUgMTk6NTU6MDEgLTAwMDAKQEAgLTU4LDggKzU4LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9QVVQKIAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFs
dWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBp
bnQgYXR0cik7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoU1ZHRWxlbWVudCkKSW5kZXg6IGtz
dmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2UuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRWxlbWVudElu
c3RhbmNlLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAJOSBKdWwgMjAw
NSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2UuY3Bw
CTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtET007CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdFbGVtZW50SW5zdGFuY2U6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZH
RWxlbWVudEluc3RhbmNlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRWxl
bWVudEluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlLmgKLS0tIGtzdmcy
L2RvbS9TVkdFbGVtZW50SW5zdGFuY2UuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZS5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAw
MDAKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9CQVNFQ0xBU1NfR0VU
CiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9
OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdFbGVtZW50
SW5zdGFuY2VMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR0VsZW1lbnRJbnN0YW5jZUxpc3QuY3BwCi0tLSBrc3ZnMi9kb20vU1ZH
RWxlbWVudEluc3RhbmNlTGlzdC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2VMaXN0LmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAx
IC0wMDAwCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lN
UExFTUVOVF9QUk9UT1RZUEUoIlNWR0VsZW1lbnRJbnN0YW5jZUxpc3QiLCBTVkdFbGVtZW50SW5z
dGFuY2VMaXN0UHJvdG8sIFNWR0VsZW1lbnRJbnN0YW5jZUxpc3RQcm90b0Z1bmMpCiAKLVZhbHVl
IFNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRWxlbWVudEluc3RhbmNlTGlzdDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9N
X0VOVEVSX1NBRkUKIApAQCAtNjQsNyArNjQsNyBAQCBWYWx1ZSBTVkdFbGVtZW50SW5zdGFuY2VM
aXN0OjpnZXRWYWx1ZVByCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdFbGVt
ZW50SW5zdGFuY2VMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR0VsZW1lbnRJbnN0YW5jZUxp
c3RQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhTVkdFbGVtZW50
SW5zdGFuY2VMaXN0KQogCUtET01fRU5URVJfU0FGRQpAQCAtNzMsNyArNzMsNyBAQCBWYWx1ZSBT
VkdFbGVtZW50SW5zdGFuY2VMaXN0UHJvdG9GdW5jOjpjCiAJewogCQljYXNlIFNWR0VsZW1lbnRJ
bnN0YW5jZUxpc3RDb25zdGFudHM6Okl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgg
PSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3Nb
MF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHRWxlbWVu
dEluc3RhbmNlPihleGVjLCBvYmouaXRlbShpbmRleCkpOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4
OiBrc3ZnMi9kb20vU1ZHRWxlbWVudEluc3RhbmNlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2VMaXN0Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdF
bGVtZW50SW5zdGFuY2VMaXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdFbGVtZW50SW5zdGFuY2VMaXN0
LmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdFbGVtZW50
SW5zdGFuY2VMaXN0LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTUsNyArNTUsNyBA
QCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01f
QkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsK
IApJbmRleDoga3N2ZzIvZG9tL1NWR0VsbGlwc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRWxsaXBzZUVsZW1lbnQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZH
RWxsaXBzZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCTkg
SnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdFbGxpcHNlRWxlbWVudDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1w
ICpTVkdFbGxpcHNlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NW
R0VsbGlwc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR0VsbGlwc2VFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdFbGxpcHNlRWxlbWVudC5oCi0tLSBrc3Zn
Mi9kb20vU1ZHRWxsaXBzZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR0VsbGlwc2VFbGVtZW50LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAw
MApAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZP
UldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdFeGNlcHRpb24uY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRXhjZXB0aW9uLmNwcAot
LS0ga3N2ZzIvZG9tL1NWR0V4Y2VwdGlvbi5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkx
LjEKKysrIGtzdmcyL2RvbS9TVkdFeGNlcHRpb24uY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAw
MDAKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1W
YWx1ZSBTVkdFeGNlcHRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tl
bikgY29uc3QKK1ZhbHVlSW1wICpTVkdFeGNlcHRpb246OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpJbmRleDoga3N2
ZzIvZG9tL1NWR0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdFeGNlcHRpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0V4Y2VwdGlvbi5oCi0tLSBrc3ZnMi9kb20v
U1ZHRXhjZXB0aW9uLmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdFeGNlcHRpb24uaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NCw3ICs1NCw3
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJcHVibGljOiAvLyBFY21hU2NyaXB0IHNlY3Rpb24KIAkJS0RP
TV9HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6
IGtzdmcyL2RvbS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAotLS0ga3N2ZzIvZG9t
L1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAw
MDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5jcHAJOCBB
dWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2Ug
S1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDog
a3N2ZzIvZG9tL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oCi0tLSBrc3ZnMi9kb20vU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisr
KyBrc3ZnMi9kb20vU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oCTggQXVnIDIwMDUgMTk6
NTU6MDEgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8v
IEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRUJsZW5k
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR0ZFQmxlbmRFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAotLS0ga3N2ZzIv
ZG9tL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUyIC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0w
MDAwCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOw0KIEBlbmQNCiAqLw0K
IA0KLVZhbHVlIFNWR0ZFQmxlbmRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdA0KK1ZhbHVlSW1wICpTVkdGRUJsZW5kRWxlbWVudDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QNCiB7DQogCUtE
T01fRU5URVJfU0FGRQ0KIA0KSW5kZXg6IGtzdmcyL2RvbS9TVkdGRUJsZW5kRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRUJs
ZW5kRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHRkVCbGVuZEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0ZFQmxlbmRFbGVt
ZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUJs
ZW5kRWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAg
bmFtZXNwYWNlIEtTVkcNCiAJCUtET01fR0VUDQogCQlLRE9NX0ZPUldBUkRQVVQNCiANCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsNCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7DQogCX07DQogfTsNCiANCkluZGV4OiBrc3ZnMi9k
b20vU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUNv
bG9yTWF0cml4RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUNv
bG9yTWF0cml4RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNDgsNyAr
NDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRUNv
bG9yTWF0cml4RWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTIgLTAwMDAJMS4xCisrKyBrc3Zn
Mi9kb20vU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAw
CkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9S
V0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRl
eDoga3N2ZzIvZG9tL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCi0tLSBrc3Zn
Mi9kb20vU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6
NTIgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQu
Y3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7DQogQGVuZA0KICovDQogDQotVmFsdWUgU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0DQorVmFsdWVJbXAgKlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdA0KIHsNCiAJS0RPTV9FTlRF
Ul9TQUZFDQogDQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5o
Ci0tLSBrc3ZnMi9kb20vU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAk5IEp1bCAyMDA1
IDA2OjU0OjUyIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBuYW1l
c3BhY2UgS1NWRw0KIAkJS0RPTV9HRVQNCiAJCUtET01fRk9SV0FSRFBVVA0KIA0KLQkJS0pTOjpW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0Ow0KKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsNCiAJfTsNCiB9Ow0KIA0KSW5kZXg6IGtzdmcyL2RvbS9T
VkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAJOSBKdWwg
MjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUNvbXBvc2l0ZUVsZW1l
bnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3Zn
Mi9kb20vU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVDb21wb3Np
dGVFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAk5IEp1bCAy
MDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFQ29tcG9zaXRlRWxlbWVu
dC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNl
IEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlL
SlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVGbG9vZEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdGRUZsb29kRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUZsb29kRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9T
VkdGRUZsb29kRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdGRUZsb29kRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApA
QCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsNCiBAZW5kDQogKi8NCiANCi1W
YWx1ZSBTVkdGRUZsb29kRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QNCitWYWx1ZUltcCAqU1ZHRkVGbG9vZEVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0DQogew0KIAlLRE9NX0VO
VEVSX1NBRkUNCiANCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVGbG9vZEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVGbG9vZEVs
ZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
ZG9tL1NWR0ZFRmxvb2RFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRUZsb29kRWxlbWVudC5o
CTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVGbG9vZEVs
ZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVz
cGFjZSBLU1ZHDQogCQlLRE9NX0dFVA0KIAkJS0RPTV9GT1JXQVJEUFVUDQogDQotCQlLSlM6OlZh
bHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7DQorCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Ow0KIAl9Ow0KIH07DQogDQpJbmRleDoga3N2ZzIvZG9tL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFR2F1
c3NpYW5CbHVyRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTEsNyAr
NTEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBF
KCJTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQiLCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnRQcm90
bywgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkBAIC03MSwxNyArNzEsMTcgQEAgVmFsdWUgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
OjpnZXRWYWx1ZQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0JU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50IG9i
aihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkp
KSk7CisJU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50IG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsK
IAlLRE9NX0VOVEVSX1NBRkUKIAogCXN3aXRjaChpZCkKIAl7CiAJCWNhc2UgU1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50Q29uc3RhbnRzOjpTZXRTdGREZXZpYXRpb246CiAJCXsKLQkJCWZsb2F0IHN0
ZERldmlhdGlvblggPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOwotCQkJZmxvYXQgc3RkRGV2aWF0
aW9uWSA9IGFyZ3NbMV0udG9OdW1iZXIoZXhlYyk7CisJCQlmbG9hdCBzdGREZXZpYXRpb25YID0g
YXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisJCQlmbG9hdCBzdGREZXZpYXRpb25ZID0gYXJnc1sx
XS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlvYmouc2V0U3RkRGV2aWF0aW9uKHN0ZERldmlhdGlvblgs
IHN0ZERldmlhdGlvblkpOwogCiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CkluZGV4OiBrc3ZnMi9k
b20vU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
aAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTYwLDcgKzYwLDcg
QEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pT
OjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZH
RkVJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5jcHAKLS0t
IGtzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1
NTowMSAtMDAwMApAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQK
ICovCiAKLVZhbHVlIFNWR0ZFSW1hZ2VFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR0ZFSW1hZ2VFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtE
T01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRkVJbWFnZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVJbWFn
ZUVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR0ZFSW1hZ2VFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdGRUltYWdlRWxlbWVu
dC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVJbWFn
ZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC02Miw3ICs2Miw3IEBAIG5h
bWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZFTWVy
Z2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHRkVNZXJnZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCi0tLSBrc3Zn
Mi9kb20vU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEg
LTAwMDAKQEAgLTQwLDcgKzQwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7DQogQGVuZA0KICov
DQogDQotVmFsdWUgU1ZHRkVNZXJnZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0DQorVmFsdWVJbXAgKlNWR0ZFTWVyZ2VFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdA0KIHsNCiAJ
S0RPTV9FTlRFUl9TQUZFDQogDQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZF
TWVyZ2VFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdGRU1lcmdlRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRkVNZXJnZUVs
ZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZF
TWVyZ2VFbGVtZW50LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTMsNyArNTMsNyBA
QCBuYW1lc3BhY2UgS1NWRw0KIAkJS0RPTV9HRVQNCiAJCUtET01fRk9SV0FSRFBVVA0KIA0KLQkJ
S0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Ow0KKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsNCiAJfTsNCiB9Ow0KIA0KSW5kZXg6IGtzdmcy
L2RvbS9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVNZXJn
ZU5vZGVFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAJ
OSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRU1lcmdlTm9k
ZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTM5LDcgKzM5LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdGRU1lcmdlTm9kZUVs
ZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CitWYWx1ZUltcCAqU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCQpJbmRl
eDoga3N2ZzIvZG9tL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZF
TWVyZ2VOb2RlRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgJ
OSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGRU1lcmdlTm9k
ZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01Myw3ICs1Myw3IEBAIG5h
bWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZFT2Zm
c2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCi0tLSBr
c3ZnMi9kb20vU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1
NTowMSAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQK
ICovCiAKLVZhbHVlIFNWR0ZFT2Zmc2V0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdGRU9mZnNldEVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGRU9mZnNldEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVP
ZmZzZXRFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdGRU9mZnNldEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0ZFT2Zmc2V0
RWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
RkVPZmZzZXRFbGVtZW50LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNjAsNyArNjAs
NyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlL
SlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9T
VkdGRVRpbGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3Vw
cG9ydC9rc3ZnMi9kb20vU1ZHRkVUaWxlRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGRVRpbGVFbGVtZW50LmNwcAotLS0g
a3N2ZzIvZG9tL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVUaWxlRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTow
MSAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsNCiBAZW5kDQog
Ki8NCiANCi1WYWx1ZSBTVkdGRVRpbGVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdA0KK1ZhbHVlSW1wICpTVkdGRVRpbGVFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdA0KIHsNCiAJ
S0RPTV9FTlRFUl9TQUZFDQogDQpJbmRleDoga3N2ZzIvZG9tL1NWR0ZFVGlsZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHRkVU
aWxlRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHRkVUaWxlRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHRkVUaWxlRWxlbWVu
dC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHRkVUaWxl
RWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgbmFt
ZXNwYWNlIEtTVkcNCiAJCUtET01fR0VUDQogCQlLRE9NX0ZPUldBUkRQVVQNCiANCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsNCisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7DQogCX07DQogfTsNCiANCkluZGV4OiBrc3ZnMi9kb20v
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRkVUdXJidWxl
bmNlRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAk5
IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTUxLDcgKzUxLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdGRVR1cmJ1bGVuY2VF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC02Miw3ICs2Miw3
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NW
R0ZpbHRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdGaWx0ZXJFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0ZpbHRlckVsZW1lbnQuY3BwCi0tLSBr
c3ZnMi9kb20vU1ZHRmlsdGVyRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkx
LjEKKysrIGtzdmcyL2RvbS9TVkdGaWx0ZXJFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAx
IC0wMDAwCkBAIC02MSw3ICs2MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lN
UExFTUVOVF9QUk9UT1RZUEUoIlNWR0ZpbHRlckVsZW1lbnQiLCBTVkdGaWx0ZXJFbGVtZW50UHJv
dG8sIFNWR0ZpbHRlckVsZW1lbnRQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR0ZpbHRlckVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRmlsdGVyRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtOTEsMTcgKzkxLDE3
IEBAIFZhbHVlIFNWR0ZpbHRlckVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkKIAlyZXR1cm4gVW5k
ZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR0ZpbHRlckVsZW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUlt
cCAqU1ZHRmlsdGVyRWxlbWVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpl
eGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0JU1ZHRmlsdGVy
RWxlbWVudCBvYmooY2FzdChleGVjLCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlz
T2JqLmltcCgpKSkpOworCVNWR0ZpbHRlckVsZW1lbnQgb2JqKGNhc3QoZXhlYywgdGhpc09iaikp
OwogCUtET01fRU5URVJfU0FGRQogCiAJc3dpdGNoKGlkKQogCXsKIAkJY2FzZSBTVkdGaWx0ZXJF
bGVtZW50Q29uc3RhbnRzOjpTZXRGaWx0ZXJSZXM6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgZmls
dGVyUmVzWCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7OwotCQkJdW5zaWduZWQgbG9uZyBmaWx0
ZXJSZXNZID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTs7CisJCQl1bnNpZ25lZCBsb25nIGZpbHRl
clJlc1ggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTs7CisJCQl1bnNpZ25lZCBsb25nIGZpbHRl
clJlc1kgPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTs7CiAJCQlvYmouc2V0RmlsdGVyUmVzKGZp
bHRlclJlc1gsIGZpbHRlclJlc1kpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CkluZGV4
OiBrc3ZnMi9kb20vU1ZHRmlsdGVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdGaWx0ZXJFbGVtZW50LmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGaWx0ZXJFbGVtZW50
LmgKLS0tIGtzdmcyL2RvbS9TVkdGaWx0ZXJFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MyAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdGaWx0ZXJFbGVtZW50LmgJOCBBdWcgMjAwNSAxOTo1
NTowMSAtMDAwMApAQCAtNzYsNyArNzYsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAog
CQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsK
IH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcy5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysrIGtz
dmcyL2RvbS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCTggQXVnIDIw
MDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7
CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FG
RQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzLmgKLS0tIGtzdmcyL2RvbS9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCTggQXVnIDIwMDUgMTk6NTU6MDEg
LTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFT
Y3JpcHQgc2VjdGlvbgogCQlLRE9NX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0ZpdFRvVmlld0JveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ZpdFRvVmll
d0JveC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdGaXRUb1ZpZXdCb3guY3BwCi0tLSBrc3ZnMi9kb20vU1ZHRml0VG9WaWV3Qm94LmNw
cAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ZpdFRvVmll
d0JveC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzgsNyArMzgsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR0ZpdFRvVmlld0JveDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1w
ICpTVkdGaXRUb1ZpZXdCb3g6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdG
aXRUb1ZpZXdCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHRml0VG9WaWV3Qm94LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZm
IC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdGaXRUb1ZpZXdCb3guaAotLS0ga3N2ZzIvZG9tL1NW
R0ZpdFRvVmlld0JveC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHRml0VG9WaWV3Qm94LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTUsNyAr
NTUsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJ
CUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9
OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0dFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHR0VsZW1lbnQuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHR0VsZW1l
bnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHR0VsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTMg
LTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHR0VsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6
MDEgLTAwMDAKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAq
LwogCi1WYWx1ZSBTVkdHRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdHRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IApJbmRleDoga3N2ZzIvZG9tL1NWR0dFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0dFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdHRWxlbWVudC5oCi0tLSBr
c3ZnMi9kb20vU1ZHR0VsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjUzIC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR0dFbGVtZW50LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTgs
NyArNTgsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQK
IAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcy
L2RvbS9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdHcmFkaWVudEVsZW1lbnQuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHR3JhZGllbnRFbGVt
ZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0dyYWRpZW50RWxlbWVudC5jcHAJOSBKdWwgMjAwNSAw
Njo1NDo1MyAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCTgg
QXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdHcmFkaWVudEVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHR3Jh
ZGllbnRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCQpJbmRleDoga3N2ZzIvZG9tL1NWR0dyYWRp
ZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdHcmFkaWVudEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0dyYWRpZW50RWxlbWVudC5oCi0tLSBrc3ZnMi9k
b20vU1ZHR3JhZGllbnRFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1MyAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdHcmFkaWVudEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAw
CkBAIC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9S
V0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRl
eDoga3N2ZzIvZG9tL1NWR0ltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0ltYWdlRWxlbWVudC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdJbWFnZUVsZW1l
bnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHSW1hZ2VFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0
OjUzIC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0ltYWdlRWxlbWVudC5jcHAJOCBBdWcgMjAw
NSAxOTo1NTowMSAtMDAwMApAQCAtNTAsNyArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsK
IEBlbmQKICovCiAKLVZhbHVlIFNWR0ltYWdlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdJbWFnZUVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdJbWFnZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHSW1hZ2VF
bGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdJbWFnZUVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR0ltYWdlRWxlbWVudC5oCTkg
SnVsIDIwMDUgMDY6NTQ6NTMgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHSW1hZ2VFbGVtZW50
LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNzIsNyArNzIsNyBAQCBuYW1lc3BhY2Ug
S1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdMYW5nU3BhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdM
YW5nU3BhY2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHTGFuZ1NwYWNlLmNwcAotLS0ga3N2ZzIvZG9tL1NWR0xhbmdTcGFjZS5jcHAJ
OSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdMYW5nU3BhY2Uu
Y3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdMYW5nU3BhY2U6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGFu
Z1NwYWNlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02MCw3ICs2MCw3IEBAIFZhbHVlIFNWR0xhbmdT
cGFjZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZv
aWQgU1ZHTGFuZ1NwYWNlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHTGFuZ1NwYWNlOjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGlu
dCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR0xhbmdTcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdM
YW5nU3BhY2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2
ZzIvZG9tL1NWR0xhbmdTcGFjZS5oCi0tLSBrc3ZnMi9kb20vU1ZHTGFuZ1NwYWNlLmgJOSBKdWwg
MjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdMYW5nU3BhY2UuaAk4IEF1
ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC02Miw4ICs2Miw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJ
CUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBw
dXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtK
Uzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVl
SW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHTGVu
Z3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9k
b20vU1ZHTGVuZ3RoLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR0xlbmd0aC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdMZW5ndGguY3BwCTkg
SnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTGVuZ3RoLmNwcAk4
IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NCw3ICs1NCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR0xlbmd0aCIsIFNWR0xlbmd0
aFByb3RvLCBTVkdMZW5ndGhQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR0xlbmd0aDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdM
ZW5ndGg6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTc2LDIwICs3NiwyMCBAQCBWYWx1ZSBTVkdMZW5n
dGg6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12
b2lkIFNWR0xlbmd0aDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR0xlbmd0aDo6cHV0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7
CiAJS0RPTV9FTlRFUl9TQUZFCiAJCiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdMZW5n
dGhDb25zdGFudHM6OlZhbHVlOgotCQkJc2V0VmFsdWUodmFsdWUudG9OdW1iZXIoZXhlYykpOwor
CQkJc2V0VmFsdWUodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQljYXNlIFNW
R0xlbmd0aENvbnN0YW50czo6VmFsdWVBc1N0cmluZzoKIAkJCXNldFZhbHVlQXNTdHJpbmcoS0RP
TTo6dG9ET01TdHJpbmcoZXhlYywgdmFsdWUpKTsKIAkJCWJyZWFrOwogCQljYXNlIFNWR0xlbmd0
aENvbnN0YW50czo6VmFsdWVJblNwZWNpZmllZFVuaXRzOgotCQkJc2V0VmFsdWVJblNwZWNpZmll
ZFVuaXRzKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFZhbHVlSW5TcGVjaWZpZWRVbml0
cyh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlrZFdh
cm5pbmcoKSA8PCAiVW5oYW5kbGVkIHRva2VuIGluICIgPDwga19mdW5jaW5mbyA8PCAiIDogIiA8
PCB0b2tlbiA8PCBlbmRsOwpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIFNWR0xlbmd0aDo6cHV0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhCiAJS0RPTV9MRUFWRV9TQUZFKEtET006OkRPTUV4Y2VwdGlvbikK
IH0KIAotVmFsdWUgU1ZHTGVuZ3RoUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR0xlbmd0aFByb3Rv
RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR0xlbmd0aCkKIAlLRE9N
X0VOVEVSX1NBRkUKQEAgLTEwNywxNCArMTA3LDE0IEBAIFZhbHVlIFNWR0xlbmd0aFByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUKIAl7CiAJCWNhc2UgU1ZHTGVuZ3RoQ29uc3RhbnRzOjpOZXdWYWx1
ZVNwZWNpZmllZFVuaXRzOgogCQl7Ci0JCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFyZ3Nb
MF0udG9VSW50MTYoZXhlYyk7Ci0JCQlmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSBhcmdz
WzFdLnRvTnVtYmVyKGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUgPSBhcmdzWzBd
LT50b1VJbnQxNihleGVjKTsKKwkJCWZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cyA9IGFyZ3Nb
MV0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJb2JqLm5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5pdFR5
cGUsIHZhbHVlSW5TcGVjaWZpZWRVbml0cyk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0K
IAkJY2FzZSBTVkdMZW5ndGhDb25zdGFudHM6OkNvbnZlcnRUb1NwZWNpZmllZFVuaXRzOgogCQl7
Ci0JCQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFyZ3NbMF0udG9VSW50MTYoZXhlYyk7CisJ
CQl1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IGFyZ3NbMF0tPnRvVUludDE2KGV4ZWMpOwogCQkJ
b2JqLmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHVuaXRUeXBlKTsKIAkJCXJldHVybiBVbmRlZmlu
ZWQoKTsKIAkJfQpJbmRleDoga3N2ZzIvZG9tL1NWR0xlbmd0aC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdMZW5ndGguaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0xlbmd0aC5oCi0t
LSBrc3ZnMi9kb20vU1ZHTGVuZ3RoLmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdMZW5ndGguaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC03MSw4
ICs3MSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fUFVUCiAJCUtET01fQ0FTVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFs
dWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4
OiBrc3ZnMi9kb20vU1ZHTGVuZ3RoTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xlbmd0aExpc3QuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTGVuZ3RoTGlzdC5jcHAK
LS0tIGtzdmcyL2RvbS9TVkdMZW5ndGhMaXN0LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAw
CTEuMQorKysga3N2ZzIvZG9tL1NWR0xlbmd0aExpc3QuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEg
LTAwMDAKQEAgLTU2LDcgKzU2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1Q
TEVNRU5UX1BST1RPVFlQRSgiU1ZHTGVuZ3RoTGlzdCIsIFNWR0xlbmd0aExpc3RQcm90bywgU1ZH
TGVuZ3RoTGlzdFByb3RvRnVuYykKIAotVmFsdWUgU1ZHTGVuZ3RoTGlzdDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdMZW5n
dGhMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03Miw3ICs3Miw3IEBAIFZhbHVlIFNWR0xlbmd0
aExpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZh
bHVlIFNWR0xlbmd0aExpc3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3Qg
JnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHTGVuZ3RoTGlzdFByb3Rv
RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR0xlbmd0aExpc3QpCiAJ
S0RPTV9FTlRFUl9TQUZFCkBAIC05MSwyNCArOTEsMjQgQEAgVmFsdWUgU1ZHTGVuZ3RoTGlzdFBy
b3RvRnVuYzo6Y2FsbChFeGVjUwogCQl9CiAJCWNhc2UgU1ZHTGVuZ3RoTGlzdENvbnN0YW50czo6
R2V0SXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIo
ZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7
CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdMZW5ndGg+KGV4ZWMsIG9iai5nZXRJdGVt
KGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdMZW5ndGhMaXN0Q29uc3RhbnRzOjpJbnNlcnRJdGVt
QmVmb3JlOgogCQl7CiAJCQlTVkdMZW5ndGggbmV3SXRlbSA9IEtET006OmVjbWFfY2FzdDxTVkdM
ZW5ndGg+KGV4ZWMsIGFyZ3NbMF0sICZ0b1NWR0xlbmd0aCk7Ci0JCQl1bnNpZ25lZCBsb25nIGlu
ZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBh
cmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR0xl
bmd0aD4oZXhlYywgb2JqLmluc2VydEl0ZW1CZWZvcmUobmV3SXRlbSwgaW5kZXgpKTsKIAkJfQog
CQljYXNlIFNWR0xlbmd0aExpc3RDb25zdGFudHM6OlJlcGxhY2VJdGVtOgogCQl7CiAJCQlTVkdM
ZW5ndGggbmV3SXRlbSA9IEtET006OmVjbWFfY2FzdDxTVkdMZW5ndGg+KGV4ZWMsIGFyZ3NbMF0s
ICZ0b1NWR0xlbmd0aCk7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQz
MihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVj
KTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR0xlbmd0aD4oZXhlYywgb2JqLnJlcGxh
Y2VJdGVtKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdMZW5ndGhMaXN0Q29uc3Rh
bnRzOjpSZW1vdmVJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50
b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQz
MihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR0xlbmd0aD4oZXhlYywgb2Jq
LnJlbW92ZUl0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR0xlbmd0aExpc3RDb25zdGFudHM6
OkFwcGVuZEl0ZW06CkluZGV4OiBrc3ZnMi9kb20vU1ZHTGVuZ3RoTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdMZW5ndGhMaXN0Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdM
ZW5ndGhMaXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdMZW5ndGhMaXN0LmgJOSBKdWwgMjAwNSAwNjo1
NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdMZW5ndGhMaXN0LmgJOCBBdWcgMjAwNSAx
OTo1NTowMSAtMDAwMApAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzog
Ly8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0xpbmVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3Zn
Mi9kb20vU1ZHTGluZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTGluZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZH
TGluZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHTGluZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQyLDcg
KzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdMaW5l
RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKK1ZhbHVlSW1wICpTVkdMaW5lRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2
ZzIvZG9tL1NWR0xpbmVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xpbmVFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdMaW5lRWxlbWVudC5oCi0tLSBrc3Zn
Mi9kb20vU1ZHTGluZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR0xpbmVFbGVtZW50LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAt
NjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQ
VVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtz
dmcyL2RvbS9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR0xpbmVhckdyYWRp
ZW50RWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAK
QEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1
ZSBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewog
CUtET01fRU5URVJfU0FGRQogCQpJbmRleDoga3N2ZzIvZG9tL1NWR0xpbmVhckdyYWRpZW50RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCi0tLSBr
c3ZnMi9kb20vU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAk4IEF1ZyAy
MDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtE
T01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUlt
cCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR0xvY2F0YWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xvY2F0YWJsZS5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdMb2NhdGFibGUuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHTG9jYXRhYmxlLmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0xvY2F0YWJsZS5jcHAJOCBBdWcg
MjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTMsNyArNTMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NW
RzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdMb2NhdGFibGUiLCBTVkdMb2NhdGFi
bGVQcm90bywgU1ZHTG9jYXRhYmxlUHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdMb2NhdGFibGU6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHTG9jYXRhYmxlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC03MSw5ICs3MSw5IEBAIFZhbHVl
IFNWR0xvY2F0YWJsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7
CiB9CiAKLVZhbHVlIFNWR0xvY2F0YWJsZVByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMs
IE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdMb2NhdGFi
bGVQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0
aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotCVNWR0xvY2F0YWJsZSBvYmooY2FzdChleGVj
LCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOworCVNWR0xv
Y2F0YWJsZSBvYmooY2FzdChleGVjLCB0aGlzT2JqKSk7CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlz
d2l0Y2goaWQpCkluZGV4OiBrc3ZnMi9kb20vU1ZHTG9jYXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR0xvY2F0YWJsZS5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHTG9jYXRh
YmxlLmgKLS0tIGtzdmcyL2RvbS9TVkdMb2NhdGFibGUuaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0w
MDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR0xvY2F0YWJsZS5oCTggQXVnIDIwMDUgMTk6NTU6MDEg
LTAwMDAKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFT
Y3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdNYXJrZXJFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHTWFya2VyRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11
IC1yMS4xIGtzdmcyL2RvbS9TVkdNYXJrZXJFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR01h
cmtlckVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9k
b20vU1ZHTWFya2VyRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTEs
NyArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9U
WVBFKCJTVkdNYXJrZXJFbGVtZW50IiwgU1ZHTWFya2VyRWxlbWVudFByb3RvLCBTVkdNYXJrZXJF
bGVtZW50UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdNYXJrZXJFbGVtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR01hcmtl
ckVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkBAIC03Myw5ICs3Myw5IEBAIFZhbHVlIFNWR01h
cmtlckVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LVZhbHVlIFNWR01hcmtlckVsZW1lbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHTWFya2VyRWxl
bWVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAg
KnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0JU1ZHTWFya2VyRWxlbWVudCBvYmooY2Fz
dChleGVjLCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOwor
CVNWR01hcmtlckVsZW1lbnQgb2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwogCUtET01fRU5URVJf
U0FGRQogCiAJc3dpdGNoKGlkKQpJbmRleDoga3N2ZzIvZG9tL1NWR01hcmtlckVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTWFy
a2VyRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHTWFya2VyRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHTWFya2VyRWxlbWVu
dC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTWFya2Vy
RWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTczLDcgKzczLDcgQEAgbmFt
ZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHTWF0cml4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHTWF0cml4LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR01hdHJpeC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdNYXRyaXguY3BwCTkgSnVs
IDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHTWF0cml4LmNwcAk4IEF1
ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01OCw3ICs1OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBL
U1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR01hdHJpeCIsIFNWR01hdHJpeFBy
b3RvLCBTVkdNYXRyaXhQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR01hdHJpeDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdNYXRy
aXg6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7
CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTg0LDcgKzg0LDcgQEAgVmFsdWUgU1ZHTWF0cml4Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdAogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBT
VkdNYXRyaXg6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdNYXRyaXg6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtE
T01fRU5URVJfU0FGRQogCkBAIC05MiwzMiArOTIsMzIgQEAgdm9pZCBTVkdNYXRyaXg6OnB1dFZh
bHVlUHJvcGVydHkoRXhlY1N0YQogCXsKIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OkE6CiAJ
CXsKLQkJCXNldEEodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0QSh2YWx1ZS0+dG9OdW1i
ZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OkI6
CiAJCXsKLQkJCXNldEIodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0Qih2YWx1ZS0+dG9O
dW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6
OkM6CiAJCXsKLQkJCXNldEModmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0Qyh2YWx1ZS0+
dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFu
dHM6OkQ6CiAJCXsKLQkJCXNldEQodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0RCh2YWx1
ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25z
dGFudHM6OkU6CiAJCXsKLQkJCXNldEUodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0RSh2
YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhD
b25zdGFudHM6OkY6CiAJCXsKLQkJCXNldEYodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0
Rih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCX0KIAkJZGVmYXVsdDoKQEAg
LTEyNyw3ICsxMjcsNyBAQCB2b2lkIFNWR01hdHJpeDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
CiAJS0RPTV9MRUFWRV9TQUZFKEtET006OkRPTUV4Y2VwdGlvbikKIH0KIAotVmFsdWUgU1ZHTWF0
cml4UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR01hdHJpeFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CiB7CiAJS0RPTV9DSEVDS19USElTKFNWR01hdHJpeCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTEz
OCw4ICsxMzgsOCBAQCBWYWx1ZSBTVkdNYXRyaXhQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlCiAJ
CQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdNYXRyaXg+KGV4ZWMsIG9iai5pbnZlcnNlKCkp
OwogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6VHJhbnNsYXRlOgogCQl7Ci0JCQlkb3VibGUg
eCA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7Ci0JCQlkb3VibGUgeSA9IGFyZ3NbMV0udG9OdW1i
ZXIoZXhlYyk7CisJCQlkb3VibGUgeCA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworCQkJZG91
YmxlIHkgPSBhcmdzWzFdLT50b051bWJlcihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2Nh
Y2hlPFNWR01hdHJpeD4oZXhlYywgb2JqLnRyYW5zbGF0ZSh4LCB5KSk7CiAJCX0KIAkJY2FzZSBT
VkdNYXRyaXhDb25zdGFudHM6Ok11bHRpcGx5OgpAQCAtMTQ5LDI0ICsxNDksMjQgQEAgVmFsdWUg
U1ZHTWF0cml4UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZQogCQl9CiAJCWNhc2UgU1ZHTWF0cml4
Q29uc3RhbnRzOjpTY2FsZToKIAkJewotCQkJZG91YmxlIHNjYWxlRmFjdG9yID0gYXJnc1swXS50
b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSBzY2FsZUZhY3RvciA9IGFyZ3NbMF0tPnRvTnVtYmVy
KGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTWF0cml4PihleGVjLCBvYmou
c2NhbGUoc2NhbGVGYWN0b3IpKTsKIAkJfQogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6Um90
YXRlOgogCQl7Ci0JCQlkb3VibGUgYW5nbGUgPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOworCQkJ
ZG91YmxlIGFuZ2xlID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6
c2FmZV9jYWNoZTxTVkdNYXRyaXg+KGV4ZWMsIG9iai5yb3RhdGUoYW5nbGUpKTsKIAkJfQogCQlj
YXNlIFNWR01hdHJpeENvbnN0YW50czo6Um90YXRlRnJvbVZlY3RvcjoKIAkJewotCQkJZG91Ymxl
IHggPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOwotCQkJZG91YmxlIHkgPSBhcmdzWzFdLnRvTnVt
YmVyKGV4ZWMpOworCQkJZG91YmxlIHggPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKKwkJCWRv
dWJsZSB5ID0gYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9j
YWNoZTxTVkdNYXRyaXg+KGV4ZWMsIG9iai5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpKTsKIAkJfQog
CQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6U2NhbGVOb25Vbmlmb3JtOgogCQl7Ci0JCQlkb3Vi
bGUgc2NhbGVGYWN0b3JYID0gYXJnc1swXS50b051bWJlcihleGVjKTsKLQkJCWRvdWJsZSBzY2Fs
ZUZhY3RvclkgPSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHNjYWxlRmFjdG9y
WCA9IGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHNjYWxlRmFjdG9yWSA9IGFy
Z3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTWF0
cml4PihleGVjLCBvYmouc2NhbGVOb25Vbmlmb3JtKHNjYWxlRmFjdG9yWCwgc2NhbGVGYWN0b3JZ
KSk7CiAJCX0KIAkJY2FzZSBTVkdNYXRyaXhDb25zdGFudHM6OkZsaXBYOgpAQCAtMTc1LDEyICsx
NzUsMTIgQEAgVmFsdWUgU1ZHTWF0cml4UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZQogCQkJcmV0
dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTWF0cml4PihleGVjLCBvYmouZmxpcFkoKSk7CiAJCWNh
c2UgU1ZHTWF0cml4Q29uc3RhbnRzOjpTa2V3WDoKIAkJewotCQkJZG91YmxlIGFuZ2xlID0gYXJn
c1swXS50b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSBhbmdsZSA9IGFyZ3NbMF0tPnRvTnVtYmVy
KGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHTWF0cml4PihleGVjLCBvYmou
c2tld1goYW5nbGUpKTsKIAkJfQogCQljYXNlIFNWR01hdHJpeENvbnN0YW50czo6U2tld1k6CiAJ
CXsKLQkJCWRvdWJsZSBhbmdsZSA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUg
YW5nbGUgPSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZlX2Nh
Y2hlPFNWR01hdHJpeD4oZXhlYywgb2JqLnNrZXdZKGFuZ2xlKSk7CiAJCX0KIAkJZGVmYXVsdDoK
SW5kZXg6IGtzdmcyL2RvbS9TVkdNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTWF0cml4LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdNYXRyaXguaAotLS0ga3N2ZzIvZG9t
L1NWR01hdHJpeC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHTWF0cml4LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtODMsOCArODMsOCBAQCBu
YW1lc3BhY2UgS1NWRwogCQlLRE9NX1BVVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0J
CXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2
b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pT
OjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJS0RPTV9ERUZJTkVfQ0FTVChT
VkdNYXRyaXgpCkluZGV4OiBrc3ZnMi9kb20vU1ZHTnVtYmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTnVtYmVyLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR051bWJlci5j
cHAKLS0tIGtzdmcyL2RvbS9TVkdOdW1iZXIuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHTnVtYmVyLmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAw
CkBAIC00Miw3ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFs
dWUgU1ZHTnVtYmVyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAorVmFsdWVJbXAgKlNWR051bWJlcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTgsNyAr
NTgsNyBAQCBWYWx1ZSBTVkdOdW1iZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0CiAJcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR051bWJlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNW
R051bWJlcjo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFs
dWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY2LDcgKzY2LDcg
QEAgdm9pZCBTVkdOdW1iZXI6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXsKIAkJY2FzZSBT
VkdOdW1iZXJDb25zdGFudHM6OlZhbHVlOgogCQl7Ci0JCQlzZXRWYWx1ZSh2YWx1ZS50b051bWJl
cihleGVjKSk7CisJCQlzZXRWYWx1ZSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7
CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdOdW1iZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHTnVtYmVyLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdOdW1i
ZXIuaAotLS0ga3N2ZzIvZG9tL1NWR051bWJlci5oCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHTnVtYmVyLmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApA
QCAtNTYsOCArNTYsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX1BVVAogCQlLRE9NX0NBU1QK
IAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlL
SlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJ
S0RPTV9ERUZJTkVfQ0FTVChTVkdOdW1iZXIpCkluZGV4OiBrc3ZnMi9kb20vU1ZHTnVtYmVyTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR051bWJlckxpc3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHTnVtYmVyTGlzdC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdOdW1iZXJM
aXN0LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR051
bWJlckxpc3QuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTU0LDcgKzU0LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHTnVt
YmVyTGlzdCIsIFNWR051bWJlckxpc3RQcm90bywgU1ZHTnVtYmVyTGlzdFByb3RvRnVuYykKIAot
VmFsdWUgU1ZHTnVtYmVyTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdOdW1iZXJMaXN0OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQog
CkBAIC03MCw3ICs3MCw3IEBAIFZhbHVlIFNWR051bWJlckxpc3Q6OmdldFZhbHVlUHJvcGVydHko
RXgKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR051bWJlckxpc3RQcm90b0Z1
bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpCitWYWx1ZUltcCAqU1ZHTnVtYmVyTGlzdFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJ
S0RPTV9DSEVDS19USElTKFNWR051bWJlckxpc3QpCiAJS0RPTV9FTlRFUl9TQUZFCkBAIC04OSwy
NCArODksMjQgQEAgVmFsdWUgU1ZHTnVtYmVyTGlzdFByb3RvRnVuYzo6Y2FsbChFeGVjUwogCQl9
CiAJCWNhc2UgU1ZHTnVtYmVyTGlzdENvbnN0YW50czo6R2V0SXRlbToKIAkJewotCQkJdW5zaWdu
ZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25n
IGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9j
YWNoZTxTVkdOdW1iZXI+KGV4ZWMsIG9iai5nZXRJdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBT
VkdOdW1iZXJMaXN0Q29uc3RhbnRzOjpJbnNlcnRJdGVtQmVmb3JlOgogCQl7CiAJCQlTVkdOdW1i
ZXIgbmV3SXRlbSA9IEtET006OmVjbWFfY2FzdDxTVkdOdW1iZXI+KGV4ZWMsIGFyZ3NbMF0sICZ0
b1NWR051bWJlcik7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihl
eGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsK
IAkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR051bWJlcj4oZXhlYywgb2JqLmluc2VydEl0
ZW1CZWZvcmUobmV3SXRlbSwgaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR051bWJlckxpc3RDb25z
dGFudHM6OlJlcGxhY2VJdGVtOgogCQl7CiAJCQlTVkdOdW1iZXIgbmV3SXRlbSA9IEtET006OmVj
bWFfY2FzdDxTVkdOdW1iZXI+KGV4ZWMsIGFyZ3NbMF0sICZ0b1NWR051bWJlcik7Ci0JCQl1bnNp
Z25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxv
bmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpzYWZl
X2NhY2hlPFNWR051bWJlcj4oZXhlYywgb2JqLnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4KSk7
CiAJCX0KIAkJY2FzZSBTVkdOdW1iZXJMaXN0Q29uc3RhbnRzOjpSZW1vdmVJdGVtOgogCQl7Ci0J
CQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2ln
bmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9N
OjpzYWZlX2NhY2hlPFNWR051bWJlcj4oZXhlYywgb2JqLnJlbW92ZUl0ZW0oaW5kZXgpKTsKIAkJ
fQogCQljYXNlIFNWR051bWJlckxpc3RDb25zdGFudHM6OkFwcGVuZEl0ZW06CkluZGV4OiBrc3Zn
Mi9kb20vU1ZHTnVtYmVyTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdOdW1iZXJMaXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdOdW1iZXJMaXN0LmgKLS0tIGtzdmcyL2Rv
bS9TVkdOdW1iZXJMaXN0LmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdOdW1iZXJMaXN0LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNjMsNyAr
NjMsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJ
CUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9
OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1BhaW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGFpbnQuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGFpbnQuY3BwCi0t
LSBrc3ZnMi9kb20vU1ZHUGFpbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisr
KyBrc3ZnMi9kb20vU1ZHUGFpbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQ1
LDcgKzQ1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RP
VFlQRSgiU1ZHUGFpbnQiLCBTVkdQYWludFByb3RvLCBTVkdQYWludFByb3RvRnVuYykKIAotVmFs
dWUgU1ZHUGFpbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqU1ZHUGFpbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTYxLDcgKzYx
LDcgQEAgVmFsdWUgU1ZHUGFpbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YQogCXJldHVybiBV
bmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHUGFpbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZH
UGFpbnRQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1w
ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhTVkdQYWlu
dCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTc2LDcgKzc2LDcgQEAgVmFsdWUgU1ZHUGFpbnRQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlIAogCQl9CiAJCWNhc2UgU1ZHUGFpbnRDb25zdGFudHM6OlNl
dFBhaW50OgogCQl7Ci0JCQl1bnNpZ25lZCBzaG9ydCBwYWludFR5cGUgPSBhcmdzWzBdLnRvVUlu
dDE2KGV4ZWMpOworCQkJdW5zaWduZWQgc2hvcnQgcGFpbnRUeXBlID0gYXJnc1swXS0+dG9VSW50
MTYoZXhlYyk7CiAJCQlLRE9NOjpET01TdHJpbmcgdXJpID0gS0RPTTo6dG9ET01TdHJpbmcoZXhl
YywgYXJnc1sxXSk7CiAJCQlLRE9NOjpET01TdHJpbmcgcmdiUGFpbnQgPSBLRE9NOjp0b0RPTVN0
cmluZyhleGVjLCBhcmdzWzJdKTsKIAkJCUtET006OkRPTVN0cmluZyBpY2NQYWludCA9IEtET006
OnRvRE9NU3RyaW5nKGV4ZWMsIGFyZ3NbM10pOwpJbmRleDoga3N2ZzIvZG9tL1NWR1BhaW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1Bh
aW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdQYWludC5oCi0tLSBrc3ZnMi9kb20vU1ZHUGFpbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU0
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhaW50LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAt
MDAwMApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9N
X0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhFbGVt
ZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0
OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmNwcAk4IEF1ZyAyMDA1
IDE5OjU1OjAxIC0wMDAwCkBAIC03NSw3ICs3NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwog
CiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR1BhdGhFbGVtZW50IiwgU1ZHUGF0aEVsZW1l
bnRQcm90bywgU1ZHUGF0aEVsZW1lbnRQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR1BhdGhFbGVtZW50
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFs
dWVJbXAgKlNWR1BhdGhFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCQpAQCAtOTEsOSArOTEsOSBA
QCBWYWx1ZSBTVkdQYXRoRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFCiAJcmV0dXJuIFVuZGVm
aW5lZCgpOwogfQogCi1WYWx1ZSBTVkdQYXRoRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKK1ZhbHVlSW1wICpT
VkdQYXRoRWxlbWVudFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBP
YmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0JU1ZHUGF0aEVsZW1lbnQg
b2JqKGNhc3QoZXhlYywgc3RhdGljX2Nhc3Q8S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAo
KSkpKTsKKwlTVkdQYXRoRWxlbWVudCBvYmooY2FzdChleGVjLCB0aGlzT2JqKSk7CiAJS0RPTV9F
TlRFUl9TQUZFCiAKIAlzd2l0Y2goaWQpCkBAIC0xMDEsNDcgKzEwMSw0NyBAQCBWYWx1ZSBTVkdQ
YXRoRWxlbWVudFByb3RvRnVuYzo6Y2FsbChFeGVjCiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25z
dGFudHM6OkdldFRvdGFsTGVuZ3RoOgogCQkJcmV0dXJuIE51bWJlcihvYmouZ2V0VG90YWxMZW5n
dGgoKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkdldFBvaW50QXRMZW5ndGg6
Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQb2ludD4oZXhlYywgb2JqLmdldFBvaW50
QXRMZW5ndGgoYXJnc1swXS50b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVf
Y2FjaGU8U1ZHUG9pbnQ+KGV4ZWMsIG9iai5nZXRQb2ludEF0TGVuZ3RoKGFyZ3NbMF0tPnRvTnVt
YmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkdldFBhdGhTZWdB
dExlbmd0aDoKLQkJCXJldHVybiBOdW1iZXIob2JqLmdldFBhdGhTZWdBdExlbmd0aChhcmdzWzBd
LnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gTnVtYmVyKG9iai5nZXRQYXRoU2VnQXRMZW5n
dGgoYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0
YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0Nsb3NlUGF0aDoKIAkJCXJldHVybiBLRE9NOjpzYWZlX2Nh
Y2hlPFNWR1BhdGhTZWc+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ2xvc2VQYXRoKCkpOwog
CQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnTW92ZXRvQWJz
OgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ01vdmV0b0Ficz4oZXhlYywg
b2JqLmNyZWF0ZVNWR1BhdGhTZWdNb3ZldG9BYnMoYXJnc1swXS50b051bWJlcihleGVjKSwgYXJn
c1sxXS50b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0
aFNlZ01vdmV0b0Ficz4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdNb3ZldG9BYnMoYXJnc1sw
XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZH
UGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdNb3ZldG9SZWw6Ci0JCQlyZXR1
cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnTW92ZXRvUmVsPihleGVjLCBvYmouY3JlYXRl
U1ZHUGF0aFNlZ01vdmV0b1JlbChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVt
YmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnTW92ZXRv
UmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b1JlbChhcmdzWzBdLT50b051bWJl
cihleGVjKSwgYXJnc1sxXS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVu
dENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0FiczoKLQkJCXJldHVybiBLRE9NOjpz
YWZlX2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9BYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2Vn
TGluZXRvQWJzKGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYykp
KTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9BYnM+KGV4ZWMs
IG9iai5jcmVhdGVTVkdQYXRoU2VnTGluZXRvQWJzKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBh
cmdzWzFdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRz
OjpDcmVhdGVTVkdQYXRoU2VnTGluZXRvUmVsOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8
U1ZHUGF0aFNlZ0xpbmV0b1JlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9SZWwo
YXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJlcihleGVjKSkpOworCQkJcmV0
dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b1JlbD4oZXhlYywgb2JqLmNyZWF0
ZVNWR1BhdGhTZWdMaW5ldG9SZWwoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRv
TnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljQWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY0FicyhhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpLCBh
cmdzWzJdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzRdLnRv
TnVtYmVyKGV4ZWMpLCBhcmdzWzVdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6
c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzPihleGVjLCBvYmouY3JlYXRlU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY0FicyhhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+
dG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLT50b051bWJl
cihleGVjKSwgYXJnc1s0XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNV0tPnRvTnVtYmVyKGV4ZWMp
KSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNSZWw6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0
b0N1YmljUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbChhcmdz
WzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLnRvTnVt
YmVyKGV4ZWMpLCBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzRdLnRvTnVtYmVyKGV4ZWMp
LCBhcmdzWzVdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxT
VkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY1JlbChhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9OdW1iZXIoZXhl
YyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLT50b051bWJlcihleGVjKSwgYXJn
c1s0XS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNV0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2Ug
U1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
QWJzOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficyhhcmdz
WzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLnRvTnVt
YmVyKGV4ZWMpLCBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2Fm
ZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficz4oZXhlYywgb2JqLmNyZWF0ZVNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdz
WzFdLT50b051bWJlcihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRv
TnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNW
R1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOgotCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8
U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1JlbChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVt
YmVyKGV4ZWMpLCBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMp
KSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRp
Y1JlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKGFyZ3Nb
MF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50b051bWJlcihleGVjKSwgYXJnc1syXS0+dG9O
dW1iZXIoZXhlYyksIGFyZ3NbM10tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVs
ZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdBcmNBYnM6Ci0JCQlyZXR1cm4gS0RPTTo6
c2FmZV9jYWNoZTxTVkdQYXRoU2VnQXJjQWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0Fy
Y0FicyhhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpLCBhcmdz
WzJdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzRdLnRvTnVt
YmVyKGV4ZWMpLCBhcmdzWzVdLnRvQm9vbGVhbihleGVjKSwgYXJnc1s2XS50b0Jvb2xlYW4oZXhl
YykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdBcmNBYnM+KGV4ZWMs
IG9iai5jcmVhdGVTVkdQYXRoU2VnQXJjQWJzKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdz
WzFdLT50b051bWJlcihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRv
TnVtYmVyKGV4ZWMpLCBhcmdzWzRdLT50b051bWJlcihleGVjKSwgYXJnc1s1XS0+dG9Cb29sZWFu
KGV4ZWMpLCBhcmdzWzZdLT50b0Jvb2xlYW4oZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVu
dENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbDoKLQkJCXJldHVybiBLRE9NOjpzYWZl
X2NhY2hlPFNWR1BhdGhTZWdBcmNSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQXJjUmVs
KGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0u
dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10udG9OdW1iZXIoZXhlYyksIGFyZ3NbNF0udG9OdW1iZXIo
ZXhlYyksIGFyZ3NbNV0udG9Cb29sZWFuKGV4ZWMpLCBhcmdzWzZdLnRvQm9vbGVhbihleGVjKSkp
OworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0FyY1JlbD4oZXhlYywgb2Jq
LmNyZWF0ZVNWR1BhdGhTZWdBcmNSZWwoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLT50b051bWJlcihleGVjKSwgYXJnc1szXS0+dG9OdW1i
ZXIoZXhlYyksIGFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzVdLT50b0Jvb2xlYW4oZXhl
YyksIGFyZ3NbNl0tPnRvQm9vbGVhbihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29u
c3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFiczoKLQkJCXJldHVybiBL
RE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzPihleGVjLCBvYmou
Y3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMoYXJnc1swXS50b051bWJlcihleGVj
KSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWxBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyhhcmdz
WzBdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpD
cmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDoKLQkJCXJldHVybiBLRE9NOjpzYWZl
X2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsPihleGVjLCBvYmouY3JlYXRlU1ZH
UGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwoYXJnc1swXS50b051bWJlcihleGVjKSkpOworCQkJ
cmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWw+KGV4
ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbChhcmdzWzBdLT50b051
bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1BhdGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxBYnM6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnTGluZXRv
VmVydGljYWxBYnMoYXJnc1swXS50b051bWJlcihleGVjKSkpOworCQkJcmV0dXJuIEtET006OnNh
ZmVfY2FjaGU8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzPihleGVjLCBvYmouY3JlYXRlU1ZH
UGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKSk7CiAJCWNh
c2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bFJlbDoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bFJlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbChhcmdzWzBd
LnRvTnVtYmVyKGV4ZWMpKSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2Vn
TGluZXRvVmVydGljYWxSZWw+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnTGluZXRvVmVydGlj
YWxSZWwoYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpKTsKIAkJY2FzZSBTVkdQYXRoRWxlbWVudENv
bnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczoKLQkJCXJldHVy
biBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM+KGV4ZWMs
IG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKGFyZ3NbMF0udG9OdW1i
ZXIoZXhlYyksIGFyZ3NbMV0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0udG9OdW1iZXIoZXhlYyks
IGFyZ3NbM10udG9OdW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljU21vb3RoQWJzKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLT50
b051bWJlcihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbM10tPnRvTnVtYmVy
KGV4ZWMpKSk7CiAJCWNhc2UgU1ZHUGF0aEVsZW1lbnRDb25zdGFudHM6OkNyZWF0ZVNWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1Ntb290aFJlbChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzFdLnRvTnVt
YmVyKGV4ZWMpLCBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLnRvTnVtYmVyKGV4ZWMp
KSk7CisJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbChh
cmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0t
PnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzNdLT50b051bWJlcihleGVjKSkpOwogCQljYXNlIFNWR1Bh
dGhFbGVtZW50Q29uc3RhbnRzOjpDcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290
aEFiczoKLQkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJh
dGljU21vb3RoQWJzPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhBYnMoYXJnc1swXS50b051bWJlcihleGVjKSwgYXJnc1sxXS50b051bWJlcihleGVjKSkp
OworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhBYnM+KGV4ZWMsIG9iai5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290
aEFicyhhcmdzWzBdLT50b051bWJlcihleGVjKSwgYXJnc1sxXS0+dG9OdW1iZXIoZXhlYykpKTsK
IAkJY2FzZSBTVkdQYXRoRWxlbWVudENvbnN0YW50czo6Q3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNTbW9vdGhSZWw6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbD4oZXhlYywgb2JqLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljU21vb3RoUmVsKGFyZ3NbMF0udG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0udG9O
dW1iZXIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BhdGhTZWdDdXJ2
ZXRvUXVhZHJhdGljU21vb3RoUmVsPihleGVjLCBvYmouY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNTbW9vdGhSZWwoYXJnc1swXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbMV0tPnRvTnVt
YmVyKGV4ZWMpKSk7CiAJCWRlZmF1bHQ6CiAJCQlrZFdhcm5pbmcoKSA8PCAiVW5oYW5kbGVkIGZ1
bmN0aW9uIGlkIGluICIgPDwga19mdW5jaW5mbyA8PCAiIDogIiA8PCBpZCA8PCBlbmRsOwogCX0K
SW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoRWxlbWVudC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aEVsZW1lbnQu
aAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoRWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEg
LTAwMDAKQEAgLTEwNyw3ICsxMDcsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlL
RE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07
CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnLmNwcAot
LS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWcuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZy5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApA
QCAtMzUsNyArMzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVl
IFNWR1BhdGhTZWc6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBp
bnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKSW5kZXg6IGtzdmcyL2RvbS9T
VkdQYXRoU2VnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR1BhdGhTZWcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWcuaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWcuaAk5
IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWcuaAk4
IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBLU1ZH
CiAJCUtET01fQkFTRUNMQVNTX0dFVAogCQlLRE9NX0NBU1QKIAotCQlLSlM6OlZhbHVlIGdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoU1ZHUGF0aFNlZykKSW5kZXg6
IGtzdmcyL2RvbS9TVkdQYXRoU2VnQXJjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0FyYy5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnQXJjLmNwcAot
LS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0FyYy5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAt
MDAwMApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAK
LVZhbHVlIFNWR1BhdGhTZWdBcmNBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQXJjQWJzOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsK
QEAgLTYyLDM4ICs2MiwzOCBAQCBWYWx1ZSBTVkdQYXRoU2VnQXJjQWJzOjpnZXRWYWx1ZVByb3Bl
cnR5CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdBcmNBYnM6OnB1
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2
YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnQXJjQWJzOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2go
dG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdBcmNDb25zdGFudHM6Olg6CiAJCXsKLQkJCXNl
dFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykp
OwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6WToKIAkJ
ewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJl
cihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQXJjQ29uc3RhbnRz
OjpSMToKIAkJewotCQkJc2V0UjEodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0UjEodmFs
dWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdB
cmNDb25zdGFudHM6OlIyOgogCQl7Ci0JCQlzZXRSMih2YWx1ZS50b051bWJlcihleGVjKSk7CisJ
CQlzZXRSMih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2Ug
U1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6TGFyZ2VBcmNGbGFnOgogCQl7Ci0JCQlzZXRMYXJnZUFy
Y0ZsYWcodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKKwkJCXNldExhcmdlQXJjRmxhZyh2YWx1ZS0+
dG9Cb29sZWFuKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdBcmND
b25zdGFudHM6OlN3ZWVwRmxhZzoKIAkJewotCQkJc2V0U3dlZXBGbGFnKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7CisJCQlzZXRTd2VlcEZsYWcodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7CiAJCQly
ZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTI0OCw3ICsyNDgsNyBAQCBib29sIFNWR1BhdGhT
ZWdBcmNBYnM6OnN3ZWVwRmxhZygpIGNvbnN0CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2Vn
QXJjUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqU1ZHUGF0aFNlZ0FyY1JlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwg
aW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC0yNzEsMzggKzI3MSwz
OCBAQCBWYWx1ZSBTVkdQYXRoU2VnQXJjUmVsOjpnZXRWYWx1ZVByb3BlcnR5CiAJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdBcmNSZWw6OnB1dFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9p
ZCBTVkdQYXRoU2VnQXJjUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJewogCQlj
YXNlIFNWR1BhdGhTZWdBcmNDb25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1i
ZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwog
CQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0NvbnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1
ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQly
ZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQXJjQ29uc3RhbnRzOjpSMToKIAkJewotCQkJ
c2V0UjEodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0UjEodmFsdWUtPnRvTnVtYmVyKGV4
ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdBcmNDb25zdGFudHM6OlIy
OgogCQl7Ci0JCQlzZXRSMih2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRSMih2YWx1ZS0+
dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0FyY0Nv
bnN0YW50czo6TGFyZ2VBcmNGbGFnOgogCQl7Ci0JCQlzZXRMYXJnZUFyY0ZsYWcodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsKKwkJCXNldExhcmdlQXJjRmxhZyh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMp
KTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdBcmNDb25zdGFudHM6OlN3ZWVw
RmxhZzoKIAkJewotCQkJc2V0U3dlZXBGbGFnKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7CisJCQlz
ZXRTd2VlcEZsYWcodmFsdWUtPnRvQm9vbGVhbihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJ
ZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnQXJjLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhT
ZWdBcmMuaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuaAk5IEp1bCAyMDA1IDA2OjU0OjU0
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdBcmMuaAk4IEF1ZyAyMDA1IDE5OjU1
OjAxIC0wMDAwCkBAIC02OSw4ICs2OSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJ
CUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBh
dHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7
CiAJfTsKIAogCWNsYXNzIFNWR1BhdGhTZWdBcmNSZWxJbXBsOwpAQCAtMTE1LDggKzExNSw4IEBA
IG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owot
CQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJ
dm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtK
Uzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2Vn
Q3VydmV0b0N1YmljLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuY3Bw
CTkgSnVsIDIwMDUgMDY6NTQ6NTQgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1
cnZldG9DdWJpYy5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzgsNyArMzgsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAg
LTYxLDM4ICs2MSwzOCBAQCBWYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpnZXRWYWx1
CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNB
YnM6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzOjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGlu
dCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWND
b25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0
WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJl
cihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJ
CX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29uc3RhbnRzOjpYMToKIAkJewotCQkJ
c2V0WDEodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WDEodmFsdWUtPnRvTnVtYmVyKGV4
ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNDb25z
dGFudHM6OlkxOgogCQl7Ci0JCQlzZXRZMSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZ
MSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WDI6CiAJCXsKLQkJCXNldFgyKHZhbHVlLnRvTnVt
YmVyKGV4ZWMpKTsKKwkJCXNldFgyKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47
CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29uc3RhbnRzOjpZMjoKIAkJewot
CQkJc2V0WTIodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WTIodmFsdWUtPnRvTnVtYmVy
KGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpAQCAtMjMyLDcgKzIzMiw3IEBA
IGZsb2F0IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6OnkyKCkgY28KIEBlbmQKICovCiAKLVZh
bHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICosIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVs
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dp
dGNoKHRva2VuKQogCXsKQEAgLTI1NSwzOCArMjU1LDM4IEBAIFZhbHVlIFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNSZWw6OmdldFZhbHUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1JlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051
bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47
CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29uc3RhbnRzOjpZOgogCQl7Ci0J
CQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVtYmVyKGV4
ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNDb25z
dGFudHM6OlgxOgogCQl7Ci0JCQlzZXRYMSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRY
MSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0
aFNlZ0N1cnZldG9DdWJpY0NvbnN0YW50czo6WTE6CiAJCXsKLQkJCXNldFkxKHZhbHVlLnRvTnVt
YmVyKGV4ZWMpKTsKKwkJCXNldFkxKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47
CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQ29uc3RhbnRzOjpYMjoKIAkJewot
CQkJc2V0WDIodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WDIodmFsdWUtPnRvTnVtYmVy
KGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWND
b25zdGFudHM6OlkyOgogCQl7Ci0JCQlzZXRZMih2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlz
ZXRZMih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6
CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1
YmljLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdQYXRoU2VnQ3VydmV0b0N1YmljLmgKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0
b0N1YmljLmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQ
YXRoU2VnQ3VydmV0b0N1YmljLmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNjYsOCAr
NjYsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJ
bXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAljbGFzcyBTVkdQ
YXRoU2VnQ3VydmV0b0N1YmljUmVsSW1wbDsKQEAgLTEwOSw4ICsxMDksOCBAQCBuYW1lc3BhY2Ug
S1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6
VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b0N1
YmljU21vb3RoLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9t
L1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAw
MDAKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1W
YWx1ZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1Ntb290aEFiczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBj
b25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC01NSwyOCArNTUsMjggQEAgVmFsdWUgU1ZH
UGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6ZwogCXJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotdm9pZCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3Zv
aWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFiczo6cHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNo
KHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQ29uc3RhbnRz
OjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgodmFsdWUt
PnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNTbW9vdGhDb25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIo
ZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9
CiAJCWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aENvbnN0YW50czo6WDI6CiAJCXsK
LQkJCXNldFgyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgyKHZhbHVlLT50b051bWJl
cihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
U21vb3RoQ29uc3RhbnRzOjpZMjoKIAkJewotCQkJc2V0WTIodmFsdWUudG9OdW1iZXIoZXhlYykp
OworCQkJc2V0WTIodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlk
ZWZhdWx0OgpAQCAtMTg2LDcgKzE4Niw3IEBAIGZsb2F0IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNT
bW9vdGhBYnM6OnkKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGhSZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlSW1wICpTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAg
LTIwNSwyOCArMjA1LDI4IEBAIFZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6
OmcKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9DdWJp
Y1Ntb290aFJlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGhSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgaW50KQogewogCXN3aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNl
Z0N1cnZldG9DdWJpY1Ntb290aENvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051
bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47
CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQ29uc3RhbnRzOjpZOgog
CQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkodmFsdWUtPnRvTnVt
YmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNTbW9vdGhDb25zdGFudHM6OlgyOgogCQl7Ci0JCQlzZXRYMih2YWx1ZS50b051bWJlcihleGVj
KSk7CisJCQlzZXRYMih2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJ
CWNhc2UgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aENvbnN0YW50czo6WTI6CiAJCXsKLQkJ
CXNldFkyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkyKHZhbHVlLT50b051bWJlcihl
eGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdQ
YXRoU2VnQ3VydmV0b0N1YmljU21vb3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhT
ZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRvQ3Vi
aWNTbW9vdGguaAk5IEp1bCAyMDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGguaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBA
IC02MCw4ICs2MCw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAK
LQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pT
OjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIAogCWNs
YXNzIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWxJbXBsOwpAQCAtOTcsOCArOTcsOCBA
QCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
LQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJ
CXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBL
SlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpYy5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAt
MDAwMApAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAK
LVZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9R
dWFkcmF0aWNBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNTUsMjggKzU1LDI4IEBAIFZhbHVlIFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOjpnZXQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBT
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2Vu
KQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0NvbnN0YW50czo6WDoKIAkJ
ewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJl
cihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY0NvbnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJ
CQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBT
VkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0NvbnN0YW50czo6WDE6CiAJCXsKLQkJCXNldFgxKHZh
bHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgxKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJ
CQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0NvbnN0YW50
czo6WTE6CiAJCXsKLQkJCXNldFkxKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFkxKHZh
bHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTE4
Niw3ICsxODYsNyBAQCBmbG9hdCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficzo6eTEoCiBA
ZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhT
ZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQg
dG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTIwNSwyOCArMjA1LDI4IEBA
IFZhbHVlIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsOjpnZXQKIAlyZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw6OnB1dFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwg
aW50KQordm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJ
c3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0NvbnN0
YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZh
bHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY0NvbnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJl
cihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJ
CX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0NvbnN0YW50czo6WDE6CiAJCXsK
LQkJCXNldFgxKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNldFgxKHZhbHVlLT50b051bWJl
cihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY0NvbnN0YW50czo6WTE6CiAJCXsKLQkJCXNldFkxKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsK
KwkJCXNldFkxKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVm
YXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpYy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWMuaAotLS0ga3N2ZzIvZG9t
L1NWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljLmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkx
LjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpYy5oCTggQXVnIDIwMDUg
MTk6NTU6MDEgLTAwMDAKQEAgLTYwLDggKzYwLDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9H
RVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwg
aW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBh
dHRyKTsKIAl9OwogCiAJY2xhc3MgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWxJbXBsOwpA
QCAtOTcsOCArOTcsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9Owog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpk
aWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290
aC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5jcHAJ
OSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzQs
NyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0
aWNTbW9vdGhBYnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3QKIHsKIAlzd2l0Y2godG9rZW4pCiAJewpAQCAtNDksMTggKzQ5LDE4IEBAIFZhbHVlIFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWIKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6OnB1dFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQor
dm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiczo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJ
c3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290
aENvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlz
ZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aENvbnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2
YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJ
CQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTEzOSw3ICsxMzksNyBAQCBmbG9hdCBTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFiCiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRo
U2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGlj
U21vb3RoUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTE1NCwxOCArMTU0LDE4IEBAIFZhbHVlIFNWR1Bh
dGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAK
LXZvaWQgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw6OnB1dFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQor
dm9pZCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbDo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJ
c3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290
aENvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlz
ZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aENvbnN0YW50czo6WToKIAkJewotCQkJc2V0WSh2
YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJ
CQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNl
Z0N1cnZldG9RdWFkcmF0aWNTbW9vdGguaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdDdXJ2ZXRv
UXVhZHJhdGljU21vb3RoLmgJOSBKdWwgMjAwNSAwNjo1NDo1NCAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aC5oCTggQXVnIDIwMDUgMTk6NTU6
MDEgLTAwMDAKQEAgLTU0LDggKzU0LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJ
S0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0
dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsK
IAl9OwogCiAJY2xhc3MgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWxJbXBsOwpA
QCAtODUsOCArODUsOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9Owog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0by5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG8uY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0
aFNlZ0xpbmV0by5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvLmNwcAk5IEp1bCAy
MDA1IDA2OjU0OjU0IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG8uY3Bw
CTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRvQWJzOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0
aFNlZ0xpbmV0b0Ficzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBj
b25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC00OSwxOCArNDksMTggQEAgVmFsdWUgU1ZH
UGF0aFNlZ0xpbmV0b0Ficzo6Z2V0VmFsdWVQcm9wZQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAotdm9pZCBTVkdQYXRoU2VnTGluZXRvQWJzOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNl
Z0xpbmV0b0Ficzo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
VmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQ
YXRoU2VnTGluZXRvQ29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4
ZWMpKTsKKwkJCXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQog
CQljYXNlIFNWR1BhdGhTZWdMaW5ldG9Db25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUu
dG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0
dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkBAIC0xNDAsNyArMTQwLDcgQEAgZmxvYXQgU1ZHUGF0aFNl
Z0xpbmV0b0Ficzo6eSgpIGNvbnN0CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2VnTGluZXRv
UmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b1JlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwg
aW50IHRva2VuKSBjb25zdAogewogCXN3aXRjaCh0b2tlbikKIAl7CkBAIC0xNTUsMTggKzE1NSwx
OCBAQCBWYWx1ZSBTVkdQYXRoU2VnTGluZXRvUmVsOjpnZXRWYWx1ZVByb3BlCiAJcmV0dXJuIFVu
ZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaW5ldG9SZWw6OnB1dFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQor
dm9pZCBTVkdQYXRoU2VnTGluZXRvUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2godG9rZW4pCiAJ
ewogCQljYXNlIFNWR1BhdGhTZWdMaW5ldG9Db25zdGFudHM6Olg6CiAJCXsKLQkJCXNldFgodmFs
dWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WCh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJ
cmV0dXJuOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0xpbmV0b0NvbnN0YW50czo6WToKIAkJewot
CQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051bWJlcihl
eGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdQ
YXRoU2VnTGluZXRvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQv
a3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG8uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG8uaAotLS0ga3N2ZzIvZG9t
L1NWR1BhdGhTZWdMaW5ldG8uaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2
ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG8uaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01
NCw4ICs1NCw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fUFVUCiAKLQkJ
S0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpW
YWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIAogCWNsYXNz
IFNWR1BhdGhTZWdMaW5ldG9SZWxJbXBsOwpAQCAtODUsOCArODUsOCBAQCBuYW1lc3BhY2UgS1NW
RwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0
eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFs
dWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQ
cm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2
YWx1ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xp
bmV0b0hvcml6b250YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBw
b3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRv
SG9yaXpvbnRhbC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5j
cHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzMsNyAr
MzMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1BhdGhT
ZWdMaW5ldG9Ib3Jpem9udGFsQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQg
dG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2go
dG9rZW4pCiAJewpAQCAtNDYsMTMgKzQ2LDEzIEBAIFZhbHVlIFNWR1BhdGhTZWdMaW5ldG9Ib3Jp
em9udGFsQWJzOjpnZXQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxBYnM6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnTGluZXRv
SG9yaXpvbnRhbEFiczo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBT
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbENvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1
ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQly
ZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTExNiw3ICsxMTYsNyBAQCBmbG9hdCBTVkdQYXRo
U2VnTGluZXRvSG9yaXpvbnRhbEFiczo6eCgpCiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXRoU2Vn
TGluZXRvSG9yaXpvbnRhbFJlbDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRv
a2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsOjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRv
a2VuKQogCXsKQEAgLTEyOSwxMyArMTI5LDEzIEBAIFZhbHVlIFNWR1BhdGhTZWdMaW5ldG9Ib3Jp
em9udGFsUmVsOjpnZXQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxSZWw6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQYXRoU2VnTGluZXRv
SG9yaXpvbnRhbFJlbDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBT
VkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbENvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1
ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQly
ZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRv
SG9yaXpvbnRhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250
YWwuaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsLmgJOSBKdWwgMjAw
NSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvSG9yaXpv
bnRhbC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTUxLDggKzUxLDggQEAgbmFtZXNw
YWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVl
UHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQg
cHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBL
SlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1
ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogCiAJY2xhc3MgU1ZHUGF0aFNlZ0xpbmV0b0hv
cml6b250YWxSZWxJbXBsOwpAQCAtNzksOCArNzksOCBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9N
X0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVl
LCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50
IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9k
b20vU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5jcHAK
LS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuY3BwCTkgSnVsIDIwMDUgMDY6
NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmNw
cAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC0zMyw3ICszMyw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJz
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUlt
cCAqU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTQ2LDEzICs0
NiwxMyBAQCBWYWx1ZSBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6OmdldFZhCiAJcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi12b2lkIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6cHV0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZh
bHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFiczo6cHV0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7
CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxDb25z
dGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0WSh2
YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkBAIC0x
MTcsNyArMTE3LDcgQEAgZmxvYXQgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzOjp5KCkgYwog
QGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUGF0aFNl
Z0xpbmV0b1ZlcnRpY2FsUmVsOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJc3dpdGNoKHRva2VuKQogCXsKQEAgLTEzMCwxMyArMTMwLDEzIEBAIFZh
bHVlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDo6Z2V0VmEKIAlyZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkK
K3ZvaWQgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlzd2l0Y2go
dG9rZW4pCiAJewogCQljYXNlIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbENvbnN0YW50czo6WToK
IAkJewotCQkJc2V0WSh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRZKHZhbHVlLT50b051
bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQYXRoU2Vn
TGluZXRvVmVydGljYWwuaAotLS0ga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5o
CTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xp
bmV0b1ZlcnRpY2FsLmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTEsOCArNTEsOCBA
QCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
LQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJ
CXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBL
SlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAljbGFzcyBTVkdQYXRoU2Vn
TGluZXRvVmVydGljYWxSZWxJbXBsOwpAQCAtNzksOCArNzksOCBAQCBuYW1lc3BhY2UgS1NWRwog
CQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUg
JnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1
ZSwgaW50IGF0dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9T
VkdQYXRoU2VnTGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdQYXRoU2VnTGlzdC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2Vn
TGlzdC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQ
YXRoU2VnTGlzdC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTAsNyArNTAsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS0RPTTsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJTVkdQ
YXRoU2VnTGlzdCIsIFNWR1BhdGhTZWdMaXN0UHJvdG8sIFNWR1BhdGhTZWdMaXN0UHJvdG9GdW5j
KQogCi1WYWx1ZSBTVkdQYXRoU2VnTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGlzdDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVS
X1NBRkUKIApAQCAtNjYsNyArNjYsNyBAQCBWYWx1ZSBTVkdQYXRoU2VnTGlzdDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFCiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdQYXRoU2VnTGlz
dFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKK1ZhbHVlSW1wICpTVkdQYXRoU2VnTGlzdFByb3RvRnVuYzo6Y2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFy
Z3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR1BhdGhTZWdMaXN0KQogCUtET01fRU5URVJfU0FG
RQpAQCAtODUsMjQgKzg1LDI0IEBAIFZhbHVlIFNWR1BhdGhTZWdMaXN0UHJvdG9GdW5jOjpjYWxs
KEV4ZWMKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdMaXN0Q29uc3RhbnRzOjpHZXRJdGVtOgogCQl7
Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVu
c2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBn
ZXRTVkdQYXRoU2VnKGV4ZWMsIG9iai5nZXRJdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdQ
YXRoU2VnTGlzdENvbnN0YW50czo6SW5zZXJ0SXRlbUJlZm9yZToKIAkJewogCQkJU1ZHUGF0aFNl
ZyBuZXdJdGVtID0gS0RPTTo6ZWNtYV9jYXN0PFNWR1BhdGhTZWc+KGV4ZWMsIGFyZ3NbMF0sICZ0
b1NWR1BhdGhTZWcpOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50MzIo
ZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7
CiAJCQlyZXR1cm4gZ2V0U1ZHUGF0aFNlZyhleGVjLCBvYmouaW5zZXJ0SXRlbUJlZm9yZShuZXdJ
dGVtLCBpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNlZ0xpc3RDb25zdGFudHM6OlJlcGxh
Y2VJdGVtOgogCQl7CiAJCQlTVkdQYXRoU2VnIG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZH
UGF0aFNlZz4oZXhlYywgYXJnc1swXSwgJnRvU1ZHUGF0aFNlZyk7Ci0JCQl1bnNpZ25lZCBsb25n
IGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXgg
PSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBnZXRTVkdQYXRoU2VnKGV4ZWMs
IG9iai5yZXBsYWNlSXRlbShuZXdJdGVtLCBpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHUGF0aFNl
Z0xpc3RDb25zdGFudHM6OlJlbW92ZUl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXgg
PSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3Nb
MF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIGdldFNWR1BhdGhTZWcoZXhlYywgb2JqLnJl
bW92ZUl0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR1BhdGhTZWdMaXN0Q29uc3RhbnRzOjpB
cHBlbmRJdGVtOgpJbmRleDoga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1BhdGhTZWdMaXN0Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQ
YXRoU2VnTGlzdC5oCi0tLSBrc3ZnMi9kb20vU1ZHUGF0aFNlZ0xpc3QuaAk5IEp1bCAyMDA1IDA2
OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1BhdGhTZWdMaXN0LmgJOCBBdWcgMjAw
NSAxOTo1NTowMSAtMDAwMApAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1Ymxp
YzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1Bh
dGhTZWdNb3ZldG8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdQYXRoU2VnTW92ZXRvLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BhdGhTZWdNb3ZldG8uY3BwCi0tLSBrc3Zn
Mi9kb20vU1ZHUGF0aFNlZ01vdmV0by5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEK
KysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnTW92ZXRvLmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0w
MDAwCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAot
VmFsdWUgU1ZHUGF0aFNlZ01vdmV0b0Ficzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwg
aW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdNb3ZldG9BYnM6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlzd2l0Y2godG9rZW4p
CiAJewpAQCAtNDksMTggKzQ5LDE4IEBAIFZhbHVlIFNWR1BhdGhTZWdNb3ZldG9BYnM6OmdldFZh
bHVlUHJvcGUKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUGF0aFNlZ01vdmV0
b0Ficzo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1BhdGhTZWdNb3ZldG9BYnM6OnB1dFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQog
ewogCXN3aXRjaCh0b2tlbikKIAl7CiAJCWNhc2UgU1ZHUGF0aFNlZ01vdmV0b0NvbnN0YW50czo6
WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50
b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY2FzZSBTVkdQYXRoU2VnTW92ZXRv
Q29uc3RhbnRzOjpZOgogCQl7Ci0JCQlzZXRZKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCXNl
dFkodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQlkZWZhdWx0OgpA
QCAtMTM5LDcgKzEzOSw3IEBAIGZsb2F0IFNWR1BhdGhTZWdNb3ZldG9BYnM6OnkoKSBjb25zdAog
QGVuZAogKi8KIAotVmFsdWUgU1ZHUGF0aFNlZ01vdmV0b1JlbDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BhdGhTZWdNb3ZldG9S
ZWw6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKIHsKIAlz
d2l0Y2godG9rZW4pCiAJewpAQCAtMTU0LDE4ICsxNTQsMTggQEAgVmFsdWUgU1ZHUGF0aFNlZ01v
dmV0b1JlbDo6Z2V0VmFsdWVQcm9wZQogCXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBT
VkdQYXRoU2VnTW92ZXRvUmVsOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkKK3ZvaWQgU1ZHUGF0aFNlZ01vdmV0b1Jl
bDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAg
KnZhbHVlLCBpbnQpCiB7CiAJc3dpdGNoKHRva2VuKQogCXsKIAkJY2FzZSBTVkdQYXRoU2VnTW92
ZXRvQ29uc3RhbnRzOjpYOgogCQl7Ci0JCQlzZXRYKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKwkJ
CXNldFgodmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybjsKIAkJfQogCQljYXNlIFNW
R1BhdGhTZWdNb3ZldG9Db25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUudG9OdW1iZXIo
ZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJcmV0dXJuOwogCQl9
CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHUGF0aFNlZ01vdmV0by5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQYXRoU2VnTW92
ZXRvLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdQYXRoU2VnTW92ZXRvLmgKLS0tIGtzdmcyL2RvbS9TVkdQYXRoU2VnTW92ZXRvLmgJOSBK
dWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQYXRoU2VnTW92ZXRv
LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTQsOCArNTQsOCBAQCBuYW1lc3BhY2Ug
S1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6
VmFsdWUgJnZhbHVlLCBpbnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFs
dWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1w
ICp2YWx1ZSwgaW50IGF0dHIpOwogCX07CiAKIAljbGFzcyBTVkdQYXRoU2VnTW92ZXRvUmVsSW1w
bDsKQEAgLTg1LDggKzg1LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9Q
VVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3Q7Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOwor
CQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgS0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9Owog
fTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUGF0dGVybkVsZW1lbnQu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20v
U1ZHUGF0dGVybkVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUGF0dGVybkVsZW1lbnQuY3Bw
CTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUGF0dGVybkVs
ZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTUyLDcgKzUyLDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdQYXR0ZXJuRWxlbWVudDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVl
SW1wICpTVkdQYXR0ZXJuRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAkKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdQYXR0ZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdQYXR0ZXJuRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUGF0dGVybkVsZW1lbnQuaAotLS0g
a3N2ZzIvZG9tL1NWR1BhdHRlcm5FbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkx
LjEKKysrIGtzdmcyL2RvbS9TVkdQYXR0ZXJuRWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEg
LTAwMDAKQEAgLTc0LDcgKzc0LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RP
TV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9Owog
CkluZGV4OiBrc3ZnMi9kb20vU1ZHUG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQb2ludC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQb2ludC5jcHAKLS0tIGtzdmcy
L2RvbS9TVkdQb2ludC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdQb2ludC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNDksNyArNDks
NyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIAogS1NWR19JTVBMRU1FTlRfUFJPVE9UWVBFKCJT
VkdQb2ludCIsIFNWR1BvaW50UHJvdG8sIFNWR1BvaW50UHJvdG9GdW5jKQogCi1WYWx1ZSBTVkdQ
b2ludDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpTVkdQb2ludDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNjcsMTcgKzY3LDE3IEBA
IFZhbHVlIFNWR1BvaW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKLXZvaWQgU1ZHUG9pbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdQb2ludDo6
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZh
bHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0Y2godG9rZW4pCiAJewogCQlj
YXNlIFNWR1BvaW50Q29uc3RhbnRzOjpYOgotCQkJc2V0WCh2YWx1ZS50b051bWJlcihleGVjKSk7
CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlicmVhazsKIAkJY2FzZSBTVkdQ
b2ludENvbnN0YW50czo6WToKLQkJCXNldFkodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0
WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlrZFdh
cm5pbmcoKSA8PCAiVW5oYW5kbGVkIHRva2VuIGluICIgPDwga19mdW5jaW5mbyA8PCAiIDogIiA8
PCB0b2tlbiA8PCBlbmRsOwpAQCAtODYsNyArODYsNyBAQCB2b2lkIFNWR1BvaW50OjpwdXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0CiAJS0RPTV9MRUFWRV9TQUZFKEtET006OkRPTUV4Y2VwdGlvbikK
IH0KIAotVmFsdWUgU1ZHUG9pbnRQcm90b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmpl
Y3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUltcCAqU1ZHUG9pbnRQcm90b0Z1
bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBj
b25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhTVkdQb2ludCkKIAlLRE9NX0VO
VEVSX1NBRkUKSW5kZXg6IGtzdmcyL2RvbS9TVkdQb2ludC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQb2ludC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUG9pbnQuaAotLS0ga3N2
ZzIvZG9tL1NWR1BvaW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdQb2ludC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTYyLDggKzYyLDgg
QEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9QVVQKIAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAq
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7CiAJfTsKIAogCUtET01fREVGSU5FX0NB
U1QoU1ZHUG9pbnQpCkluZGV4OiBrc3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R1BvaW50TGlzdC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdQb2ludExpc3QuY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmNwcAk4IEF1ZyAy
MDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NCw3ICs1NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZH
OwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR1BvaW50TGlzdCIsIFNWR1BvaW50TGlz
dFByb3RvLCBTVkdQb2ludExpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR1BvaW50TGlzdDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1w
ICpTVkdQb2ludExpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcwLDcgKzcwLDcgQEAgVmFsdWUg
U1ZHUG9pbnRMaXN0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQogCXJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotVmFsdWUgU1ZHUG9pbnRMaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1BvaW50TGlz
dFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR1BvaW50TGlz
dCkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTg5LDI0ICs4OSwyNCBAQCBWYWx1ZSBTVkdQb2ludExp
c3RQcm90b0Z1bmM6OmNhbGwoRXhlY1N0CiAJCX0KIAkJY2FzZSBTVkdQb2ludExpc3RDb25zdGFu
dHM6OkdldEl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUlu
dDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4
ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUG9pbnQ+KGV4ZWMsIG9iai5nZXRJ
dGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdQb2ludExpc3RDb25zdGFudHM6Okluc2VydEl0
ZW1CZWZvcmU6CiAJCXsKIAkJCVNWR1BvaW50IG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZH
UG9pbnQ+KGV4ZWMsIGFyZ3NbMF0sICZ0b1NWR1BvaW50KTsKLQkJCXVuc2lnbmVkIGxvbmcgaW5k
ZXggPSBhcmdzWzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFy
Z3NbMV0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUG9p
bnQ+KGV4ZWMsIG9iai5pbnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJ
Y2FzZSBTVkdQb2ludExpc3RDb25zdGFudHM6OlJlcGxhY2VJdGVtOgogCQl7CiAJCQlTVkdQb2lu
dCBuZXdJdGVtID0gS0RPTTo6ZWNtYV9jYXN0PFNWR1BvaW50PihleGVjLCBhcmdzWzBdLCAmdG9T
VkdQb2ludCk7Ci0JCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVj
KTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJ
CXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1BvaW50PihleGVjLCBvYmoucmVwbGFjZUl0ZW0o
bmV3SXRlbSwgaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR1BvaW50TGlzdENvbnN0YW50czo6UmVt
b3ZlSXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0udG9VSW50MzIo
ZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7
CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQb2ludD4oZXhlYywgb2JqLnJlbW92ZUl0
ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR1BvaW50TGlzdENvbnN0YW50czo6QXBwZW5kSXRl
bToKSW5kZXg6IGtzdmcyL2RvbS9TVkdQb2ludExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdQb2ludExpc3QuaAot
LS0ga3N2ZzIvZG9tL1NWR1BvaW50TGlzdC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHUG9pbnRMaXN0LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApA
QCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBz
ZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9w
ZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1
ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1BvbHlnb25FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHUG9s
eWdvbkVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHUG9seWdvbkVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUG9seWdv
bkVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHUG9seWdvbkVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTM3LDcg
KzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIEBlbmQKICovCiAKLUtKUzo6VmFsdWUgU1ZH
UG9seWdvbkVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK0tKUzo6VmFsdWVJbXAgKlNWR1BvbHlnb25FbGVtZW50OjpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RP
TV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdQb2x5Z29uRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQb2x5Z29u
RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3Zn
Mi9kb20vU1ZHUG9seWdvbkVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1BvbHlnb25FbGVtZW50
LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQb2x5Z29u
RWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFt
ZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1
ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUG9seWxp
bmVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHUG9seWxpbmVFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
CmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAKLS0tIGtz
dmcyL2RvbS9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJ
MS4xCisrKyBrc3ZnMi9kb20vU1ZHUG9seWxpbmVFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE5OjU1
OjAxIC0wMDAwCkBAIC0zNiw3ICszNiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAog
Ki8KIAotVmFsdWUgU1ZHUG9seWxpbmVFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1BvbHlsaW5lRWxlbWVudDo6
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlL
RE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQb2x5
bGluZUVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEg
a3N2ZzIvZG9tL1NWR1BvbHlsaW5lRWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHUG9seWxpbmVF
bGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQ
b2x5bGluZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC02MCw3ICs2MCw3
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NW
R1ByZXNlcnZlQXNwZWN0UmF0aW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8uY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5jcHAJOSBK
dWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC00MCw3ICs0MCw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K1ZhbHVlSW1wICpTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC01
OCwxNyArNTgsMTcgQEAgVmFsdWUgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6Z2V0VmFsdWVQcgog
CXJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpw
dXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAm
dmFsdWUsIGludCkKK3ZvaWQgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJ
S0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0Y2godG9rZW4pCiAJewogCQljYXNlIFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9Db25zdGFudHM6OkFsaWduOgotCQkJc2V0QWxpZ24odmFsdWUudG9VSW50MzIo
ZXhlYykpOworCQkJc2V0QWxpZ24odmFsdWUtPnRvVUludDMyKGV4ZWMpKTsKIAkJCWJyZWFrOwog
CQljYXNlIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9Db25zdGFudHM6Ok1lZXRPclNsaWNlOgotCQkJ
c2V0TWVldE9yU2xpY2UodmFsdWUudG9VSW50MzIoZXhlYykpOworCQkJc2V0TWVldE9yU2xpY2Uo
dmFsdWUtPnRvVUludDMyKGV4ZWMpKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJa2RXYXJu
aW5nKCkgPDwgIlVuaGFuZGxlZCB0b2tlbiBpbiAiIDw8IGtfZnVuY2luZm8gPDwgIiA6ICIgPDwg
dG9rZW4gPDwgZW5kbDsKSW5kZXg6IGtzdmcyL2RvbS9TVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1By
ZXNlcnZlQXNwZWN0UmF0aW8uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAotLS0ga3N2ZzIvZG9tL1NW
R1ByZXNlcnZlQXNwZWN0UmF0aW8uaAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysg
a3N2ZzIvZG9tL1NWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0w
MDAwCkBAIC01Nyw4ICs1Nyw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fQkFTRUNMQVNTX0dF
VAogCQlLRE9NX1BVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IEtKUzo6VmFsdWUgJnZhbHVlLCBp
bnQgYXR0cik7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBLSlM6OlZhbHVlSW1wICp2YWx1ZSwgaW50IGF0
dHIpOwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKLS0t
IGtzdmcyL2RvbS9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6
NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAk4
IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC00NCw3ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBLU1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAg
KlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIv
ZG9tL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1JhZGlh
bEdyYWRpZW50RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdSYWRpYWxH
cmFkaWVudEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01Niw3ICs1Niw3
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NW
R1JlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcy
L2RvbS9TVkdSZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIx
LjEga3N2ZzIvZG9tL1NWR1JlY3QuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHUmVjdC5jcHAJOSBKdWwg
MjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdSZWN0LmNwcAk4IEF1ZyAy
MDA1IDE5OjU1OjAxIC0wMDAwCkBAIC00NCw3ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZH
OwogQGVuZAogKi8KIAotVmFsdWUgU1ZHUmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdSZWN0OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FG
RQogCkBAIC02Niw3ICs2Niw3IEBAIFZhbHVlIFNWR1JlY3Q6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXQKIAlyZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHUmVjdDo6cHV0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBp
bnQpCit2b2lkIFNWR1JlY3Q6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIFZhbHVlSW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCQpAQCAt
NzQsMjIgKzc0LDIyIEBAIHZvaWQgU1ZHUmVjdDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUK
IAl7CiAJCWNhc2UgU1ZHUmVjdENvbnN0YW50czo6WDoKIAkJewotCQkJc2V0WCh2YWx1ZS50b051
bWJlcihleGVjKSk7CisJCQlzZXRYKHZhbHVlLT50b051bWJlcihleGVjKSk7CiAJCQlicmVhazsK
IAkJfQogCQljYXNlIFNWR1JlY3RDb25zdGFudHM6Olk6CiAJCXsKLQkJCXNldFkodmFsdWUudG9O
dW1iZXIoZXhlYykpOworCQkJc2V0WSh2YWx1ZS0+dG9OdW1iZXIoZXhlYykpOwogCQkJYnJlYWs7
CiAJCX0KIAkJY2FzZSBTVkdSZWN0Q29uc3RhbnRzOjpXaWR0aDoKIAkJewotCQkJc2V0V2lkdGgo
dmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0V2lkdGgodmFsdWUtPnRvTnVtYmVyKGV4ZWMp
KTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgU1ZHUmVjdENvbnN0YW50czo6SGVpZ2h0OgogCQl7
Ci0JCQlzZXRIZWlnaHQodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0SGVpZ2h0KHZhbHVl
LT50b051bWJlcihleGVjKSk7CiAJCQlicmVhazsKIAkJfQogCQlkZWZhdWx0OgpJbmRleDoga3N2
ZzIvZG9tL1NWR1JlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9y
dC9rc3ZnMi9kb20vU1ZHUmVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrc3ZnMi9kb20vU1ZHUmVjdC5oCi0tLSBrc3ZnMi9kb20vU1ZHUmVjdC5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHUmVjdC5oCTggQXVnIDIw
MDUgMTk6NTU6MDEgLTAwMDAKQEAgLTY1LDggKzY1LDggQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9QVVQKIAkJS0RPTV9DQVNUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFs
dWUsIGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBp
bnQgYXR0cik7CiAJfTsKIAogCUtET01fREVGSU5FX0NBU1QoU1ZHUmVjdCkKSW5kZXg6IGtzdmcy
L2RvbS9TVkdSZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NW
R1N1cHBvcnQva3N2ZzIvZG9tL1NWR1JlY3RFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1JlY3RFbGVtZW50LmNwcAotLS0g
a3N2ZzIvZG9tL1NWR1JlY3RFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEu
MQorKysga3N2ZzIvZG9tL1NWR1JlY3RFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0w
MDAwCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAot
VmFsdWUgU1ZHUmVjdEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHUmVjdEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZF
CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdSZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdSZWN0RWxlbWVudC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHUmVjdEVsZW1l
bnQuaAotLS0ga3N2ZzIvZG9tL1NWR1JlY3RFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdSZWN0RWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6
MDEgLTAwMDAKQEAgLTcwLDcgKzcwLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJ
S0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9
OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1NWR0VsZW1lbnQuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU1ZHRWxl
bWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdTVkdFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0
OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1NWR0VsZW1lbnQuY3BwCTggQXVnIDIwMDUg
MTk6NTU6MDEgLTAwMDAKQEAgLTkxLDcgKzkxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAK
IEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHU1ZHRWxlbWVudCIsIFNWR1NWR0VsZW1lbnRQ
cm90bywgU1ZHU1ZHRWxlbWVudFByb3RvRnVuYykKIAotVmFsdWUgU1ZHU1ZHRWxlbWVudDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1w
ICpTVkdTVkdFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCQpAQCAtMTM0LDcgKzEzNCw3IEBAIFZh
bHVlIFNWR1NWR0VsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXgKIAlyZXR1cm4gVW5kZWZpbmVk
KCk7CiB9CiAKLXZvaWQgU1ZHU1ZHRWxlbWVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQpCit2b2lkIFNWR1NWR0Vs
ZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIFZhbHVl
SW1wICp2YWx1ZSwgaW50KQogewogCUtET01fRU5URVJfU0FGRQogCkBAIC0xNTIsNyArMTUyLDcg
QEAgdm9pZCBTVkdTVkdFbGVtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZQogCQl9CiAJCWNhc2Ug
U1ZHU1ZHRWxlbWVudENvbnN0YW50czo6Q3VycmVudFNjYWxlOgogCQl7Ci0JCQlzZXRDdXJyZW50
U2NhbGUodmFsdWUudG9OdW1iZXIoZXhlYykpOworCQkJc2V0Q3VycmVudFNjYWxlKHZhbHVlLT50
b051bWJlcihleGVjKSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJZGVmYXVsdDoKQEAgLTE2Miw5ICsx
NjIsOSBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlCiAJS0RPTV9M
RUFWRV9TQUZFKFNWR0V4Y2VwdGlvbikKIH0KIAotVmFsdWUgU1ZHU1ZHRWxlbWVudFByb3RvRnVu
Yzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKK1ZhbHVlSW1wICpTVkdTVkdFbGVtZW50UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLQlT
VkdTVkdFbGVtZW50IG9iaihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+
KHRoaXNPYmouaW1wKCkpKSk7CisJU1ZHU1ZHRWxlbWVudCBvYmooY2FzdChleGVjLCB0aGlzT2Jq
KSk7CiAJS0RPTV9FTlRFUl9TQUZFCiAKIAlzd2l0Y2goaWQpCkBAIC0xOTAsMTMgKzE5MCwxMyBA
QCBWYWx1ZSBTVkdTVkdFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTCiAJCX0KIAkJY2FzZSBT
VkdTVkdFbGVtZW50Q29uc3RhbnRzOjpTdXNwZW5kUmVkcmF3OgogCQl7Ci0JCQl1bnNpZ25lZCBs
b25nIG1heF93YWl0X21pbGxpc2Vjb25kcyA9IGFyZ3NbMF0udG9VSW50MzIoZXhlYyk7OworCQkJ
dW5zaWduZWQgbG9uZyBtYXhfd2FpdF9taWxsaXNlY29uZHMgPSBhcmdzWzBdLT50b1VJbnQzMihl
eGVjKTs7CiAJCQlvYmouc3VzcGVuZFJlZHJhdyhtYXhfd2FpdF9taWxsaXNlY29uZHMpOwogCQkJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CiAJCWNhc2UgU1ZHU1ZHRWxlbWVudENvbnN0YW50czo6
VW5zdXNwZW5kUmVkcmF3OgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIHN1c3BlbmRfaGFuZGxlX2lk
ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTs7CisJCQl1bnNpZ25lZCBsb25nIHN1c3BlbmRfaGFu
ZGxlX2lkID0gYXJnc1swXS0+dG9VSW50MzIoZXhlYyk7OwogCQkJb2JqLnVuc3VzcGVuZFJlZHJh
dyhzdXNwZW5kX2hhbmRsZV9pZCk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KQEAgLTIy
OCw3ICsyMjgsNyBAQCBWYWx1ZSBTVkdTVkdFbGVtZW50UHJvdG9GdW5jOjpjYWxsKEV4ZWNTCiAJ
CX0KIAkJY2FzZSBTVkdTVkdFbGVtZW50Q29uc3RhbnRzOjpTZXRDdXJyZW50VGltZToKIAkJewot
CQkJb2JqLnNldEN1cnJlbnRUaW1lKGFyZ3NbMF0udG9OdW1iZXIoZXhlYykpOworCQkJb2JqLnNl
dEN1cnJlbnRUaW1lKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKTsKIAkJCXJldHVybiBVbmRlZmlu
ZWQoKTsKIAkJfQogCQljYXNlIFNWR1NWR0VsZW1lbnRDb25zdGFudHM6OkdldEludGVyc2VjdGlv
bkxpc3Q6CkluZGV4OiBrc3ZnMi9kb20vU1ZHU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTVkdFbGVtZW50LmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTVkdFbGVt
ZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdTVkdFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NSAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTVkdFbGVtZW50LmgJOCBBdWcgMjAwNSAxOTo1NTow
MSAtMDAwMApAQCAtMTI5LDggKzEyOSw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJ
CUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGludCBh
dHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0cik7
CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHU2NyaXB0RWxl
bWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdTY3JpcHRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1NjcmlwdEVsZW1lbnQu
Y3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHU2NyaXB0
RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1
c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1NjcmlwdEVsZW1lbnQ6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1
ZUltcCAqU1ZHU2NyaXB0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIAkKQEAgLTU4LDcgKzU4LDcg
QEAgVmFsdWUgU1ZHU2NyaXB0RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eQogLy8gVGhlIHFkb20g
d2F5Li4uCiAjZGVmaW5lIGltcGwgKHN0YXRpY19jYXN0PFNWR1NjcmlwdEVsZW1lbnRJbXBsICo+
KEV2ZW50VGFyZ2V0OjpkKSkKIAotdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpwdXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCkK
K3ZvaWQgU1ZHU2NyaXB0RWxlbWVudDo6cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgVmFsdWVJbXAgKnZhbHVlLCBpbnQpCiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdTY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1NjcmlwdEVsZW1lbnQuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1NjcmlwdEVs
ZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1NjcmlwdEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0
OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1NjcmlwdEVsZW1lbnQuaAk4IEF1ZyAyMDA1
IDE5OjU1OjAxIC0wMDAwCkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01f
R0VUCiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHko
S0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUs
IGludCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQg
YXR0cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTZXRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHU2V0RWxl
bWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcy
L2RvbS9TVkdTZXRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1NldEVsZW1lbnQuY3BwCTkg
SnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHU2V0RWxlbWVudC5j
cHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1l
c3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1NldEVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHU2V0
RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR1NldEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
U2V0RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHU2V0RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHU2V0RWxlbWVudC5oCTkg
SnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHU2V0RWxlbWVudC5o
CTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIEtT
VkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1
ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6
OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHU3RvcEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdT
dG9wRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdTdG9wRWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdTdG9wRWxlbWVu
dC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTdG9w
RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1
c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1N0b3BFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJ
bXAgKlNWR1N0b3BFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZH
U3RvcEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHU3RvcEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1N0b3BFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdT
dG9wRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20v
U1ZHU3RvcEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NCw3ICs1NCw3
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NW
R1N0cmluZ0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2RvbS9TVkdTdHJpbmdMaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1N0cmluZ0xpc3QuY3BwCi0tLSBrc3ZnMi9kb20v
U1ZHU3RyaW5nTGlzdC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcy
L2RvbS9TVkdTdHJpbmdMaXN0LmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01NCw3
ICs1NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZ
UEUoIlNWR1N0cmluZ0xpc3QiLCBTVkdTdHJpbmdMaXN0UHJvdG8sIFNWR1N0cmluZ0xpc3RQcm90
b0Z1bmMpCiAKLVZhbHVlIFNWR1N0cmluZ0xpc3Q6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHU3RyaW5nTGlzdDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VO
VEVSX1NBRkUKIApAQCAtNzAsNyArNzAsNyBAQCBWYWx1ZSBTVkdTdHJpbmdMaXN0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdTdHJpbmdM
aXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1N0cmluZ0xpc3RQcm90b0Z1bmM6OmNhbGxBc0Z1
bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZh
cmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhTVkdTdHJpbmdMaXN0KQogCUtET01fRU5URVJfU0FG
RQpAQCAtODksMjQgKzg5LDI0IEBAIFZhbHVlIFNWR1N0cmluZ0xpc3RQcm90b0Z1bmM6OmNhbGwo
RXhlY1MKIAkJfQogCQljYXNlIFNWR1N0cmluZ0xpc3RDb25zdGFudHM6OkdldEl0ZW06CiAJCXsK
LQkJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5z
aWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtE
T006OmdldERPTVN0cmluZyhvYmouZ2V0SXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHU3Ry
aW5nTGlzdENvbnN0YW50czo6SW5zZXJ0SXRlbUJlZm9yZToKIAkJewogCQkJS0RPTTo6RE9NU3Ry
aW5nIG5ld0l0ZW0gPSBLRE9NOjp0b0RPTVN0cmluZyhleGVjLCBhcmdzWzBdKTsKLQkJCXVuc2ln
bmVkIGxvbmcgaW5kZXggPSBhcmdzWzFdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9u
ZyBpbmRleCA9IGFyZ3NbMV0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OmdldERP
TVN0cmluZyhvYmouaW5zZXJ0SXRlbUJlZm9yZShuZXdJdGVtLCBpbmRleCkpOwogCQl9CiAJCWNh
c2UgU1ZHU3RyaW5nTGlzdENvbnN0YW50czo6UmVwbGFjZUl0ZW06CiAJCXsKIAkJCUtET006OkRP
TVN0cmluZyBuZXdJdGVtID0gS0RPTTo6dG9ET01TdHJpbmcoZXhlYywgYXJnc1swXSk7Ci0JCQl1
bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVk
IGxvbmcgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpn
ZXRET01TdHJpbmcob2JqLnJlcGxhY2VJdGVtKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJY2Fz
ZSBTVkdTdHJpbmdMaXN0Q29uc3RhbnRzOjpSZW1vdmVJdGVtOgogCQl7Ci0JCQl1bnNpZ25lZCBs
b25nIGluZGV4ID0gYXJnc1swXS50b1VJbnQzMihleGVjKTsKKwkJCXVuc2lnbmVkIGxvbmcgaW5k
ZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjKTsKIAkJCXJldHVybiBLRE9NOjpnZXRET01TdHJp
bmcob2JqLnJlbW92ZUl0ZW0oaW5kZXgpKTsKIAkJfQogCQljYXNlIFNWR1N0cmluZ0xpc3RDb25z
dGFudHM6OkFwcGVuZEl0ZW06CkluZGV4OiBrc3ZnMi9kb20vU1ZHU3RyaW5nTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTdHJpbmdM
aXN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdTdHJpbmdMaXN0LmgKLS0tIGtzdmcyL2RvbS9TVkdTdHJpbmdMaXN0LmgJOSBKdWwgMjAw
NSAwNjo1NDo1NSAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTdHJpbmdMaXN0LmgJOCBBdWcg
MjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1
YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NW
R1N0eWxhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9kb20vU1ZHU3R5bGFibGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
cCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU3R5bGFibGUuY3BwCi0tLSBrc3ZnMi9kb20vU1ZHU3R5
bGFibGUuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTUgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
U3R5bGFibGUuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTUxLDcgKzUxLDcgQEAg
dXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RPVFlQRSgiU1ZHU3R5
bGFibGUiLCBTVkdTdHlsYWJsZVByb3RvLCBTVkdTdHlsYWJsZVByb3RvRnVuYykKIAotVmFsdWUg
U1ZHU3R5bGFibGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CitWYWx1ZUltcCAqU1ZHU3R5bGFibGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTY5LDkg
KzY5LDkgQEAgVmFsdWUgU1ZHU3R5bGFibGU6OmdldFZhbHVlUHJvcGVydHkoRXhlYwogCXJldHVy
biBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgU1ZHU3R5bGFibGVQcm90b0Z1bmM6OmNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitWYWx1ZUlt
cCAqU1ZHU3R5bGFibGVQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewotCVNWR1N0eWxhYmxlIG9i
aihjYXN0KGV4ZWMsIHN0YXRpY19jYXN0PEtKUzo6T2JqZWN0SW1wICo+KHRoaXNPYmouaW1wKCkp
KSk7CisJU1ZHU3R5bGFibGUgb2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwogCUtET01fRU5URVJf
U0FGRQogCiAJc3dpdGNoKGlkKQpJbmRleDoga3N2ZzIvZG9tL1NWR1N0eWxhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1N0eWxhYmxl
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9T
VkdTdHlsYWJsZS5oCi0tLSBrc3ZnMi9kb20vU1ZHU3R5bGFibGUuaAk5IEp1bCAyMDA1IDA2OjU0
OjU1IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1N0eWxhYmxlLmgJOCBBdWcgMjAwNSAxOTo1
NTowMSAtMDAwMApAQCAtNjQsNyArNjQsNyBAQCBuYW1lc3BhY2UgS1NWRwogCXB1YmxpYzogLy8g
RWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAogCi0JCUtKUzo6VmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1N0eWxlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIv
ZG9tL1NWR1N0eWxlRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1w
IC11IC1yMS4xIGtzdmcyL2RvbS9TVkdTdHlsZUVsZW1lbnQuY3BwCi0tLSBrc3ZnMi9kb20vU1ZH
U3R5bGVFbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU1IC0wMDAwCTEuMQorKysga3N2ZzIv
ZG9tL1NWR1N0eWxlRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNDMs
NyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1N0
eWxlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK1ZhbHVlSW1wICpTVkdTdHlsZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAJCkBAIC02
NSw3ICs2NSw3IEBAIFZhbHVlIFNWR1N0eWxlRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eSgKIAly
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXZvaWQgU1ZHU3R5bGVFbGVtZW50OjpwdXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGlu
dCkKK3ZvaWQgU1ZHU3R5bGVFbGVtZW50OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBWYWx1ZUltcCAqdmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUK
IApJbmRleDoga3N2ZzIvZG9tL1NWR1N0eWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdTdHlsZUVsZW1lbnQuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1N0eWxlRWxl
bWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHU3R5bGVFbGVtZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1
NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdTdHlsZUVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5
OjU1OjAxIC0wMDAwCkBAIC02Niw4ICs2Niw4IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VU
CiAJCUtET01fUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwotCQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgS0pTOjpWYWx1ZSAmdmFsdWUsIGlu
dCBhdHRyKTsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEtKUzo6VmFsdWVJbXAgKnZhbHVlLCBpbnQgYXR0
cik7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTd2l0Y2hFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHU3dpdGNo
RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdTd2l0Y2hFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1N3aXRjaEVsZW1l
bnQuY3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHU3dp
dGNoRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzgsNyArMzgsNyBA
QCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1N3aXRjaEVsZW1l
bnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitW
YWx1ZUltcCAqU1ZHU3dpdGNoRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIv
ZG9tL1NWR1N3aXRjaEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZH
U3VwcG9ydC9rc3ZnMi9kb20vU1ZHU3dpdGNoRWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU3dpdGNoRWxlbWVudC5oCi0tLSBr
c3ZnMi9kb20vU1ZHU3dpdGNoRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4x
CisrKyBrc3ZnMi9kb20vU1ZHU3dpdGNoRWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAw
MDAKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9G
T1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3Bl
cnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCklu
ZGV4OiBrc3ZnMi9kb20vU1ZHU3ltYm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1N5bWJvbEVsZW1lbnQuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHU3ltYm9s
RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdTeW1ib2xFbGVtZW50LmNwcAk5IEp1bCAyMDA1
IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1N5bWJvbEVsZW1lbnQuY3BwCTgg
QXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1ZSBTVkdTeW1ib2xFbGVtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1N5bWJv
bEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdTeW1ib2xFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9t
L1NWR1N5bWJvbEVsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUg
LXIxLjEga3N2ZzIvZG9tL1NWR1N5bWJvbEVsZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1N5bWJv
bEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NW
R1N5bWJvbEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01Niw3ICs1Niw3
IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VUCiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtK
Uzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NW
R1RTcGFuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBv
cnQva3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUU3BhbkVsZW1lbnQuY3BwCi0tLSBrc3Zn
Mi9kb20vU1ZHVFNwYW5FbGVtZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAw
MApAQCAtNDMsNyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZh
bHVlIFNWR1RTcGFuRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdUU3BhbkVsZW1lbnQ6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZF
CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdUU3BhbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVFNwYW5FbGVtZW50LmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUU3BhbkVs
ZW1lbnQuaAotLS0ga3N2ZzIvZG9tL1NWR1RTcGFuRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6
NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVFNwYW5FbGVtZW50LmgJOCBBdWcgMjAwNSAx
OTo1NTowMSAtMDAwMApAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dF
VAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pT
OjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdl
dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJ
fTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1Rlc3RzLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1Rlc3RzLmNwcAot
LS0ga3N2ZzIvZG9tL1NWR1Rlc3RzLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQor
Kysga3N2ZzIvZG9tL1NWR1Rlc3RzLmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC00
Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVOVF9QUk9U
T1RZUEUoIlNWR1Rlc3RzIiwgU1ZHVGVzdHNQcm90bywgU1ZHVGVzdHNQcm90b0Z1bmMpCiAKLVZh
bHVlIFNWR1Rlc3RzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAorVmFsdWVJbXAgKlNWR1Rlc3RzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkBAIC02Niw5ICs2
Niw5IEBAIFZhbHVlIFNWR1Rlc3RzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGEKIAlyZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIFNWR1Rlc3RzUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0
ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNW
R1Rlc3RzUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdElt
cCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLQlTVkdUZXN0cyBvYmooY2FzdChleGVj
LCBzdGF0aWNfY2FzdDxLSlM6Ok9iamVjdEltcCAqPih0aGlzT2JqLmltcCgpKSkpOworCVNWR1Rl
c3RzIG9iaihjYXN0KGV4ZWMsIHRoaXNPYmopKTsKIAlLRE9NX0VOVEVSX1NBRkUKIAogCXN3aXRj
aChpZCkKSW5kZXg6IGtzdmcyL2RvbS9TVkdUZXN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUZXN0cy5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGVzdHMuaAotLS0ga3N2ZzIv
ZG9tL1NWR1Rlc3RzLmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2Rv
bS9TVkdUZXN0cy5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAg
bmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JB
U0VDTEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAK
SW5kZXg6IGtzdmcyL2RvbS9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUZXh0Q29udGVudEVsZW1l
bnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9k
b20vU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAotLS0ga3N2ZzIvZG9tL1NWR1RleHRDb250ZW50
RWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9T
VkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTYy
LDcgKzYyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiAKIEtTVkdfSU1QTEVNRU5UX1BST1RP
VFlQRSgiU1ZHVGV4dENvbnRlbnRFbGVtZW50IiwgU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG8s
IFNWR1RleHRDb250ZW50RWxlbWVudFByb3RvRnVuYykKIAotVmFsdWUgU1ZHVGV4dENvbnRlbnRF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAorVmFsdWVJbXAgKlNWR1RleHRDb250ZW50RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAt
ODAsOSArODAsOSBAQCBWYWx1ZSBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldFZhbHVlUHJvCiAJ
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBTVkdUZXh0Q29udGVudEVsZW1lbnRQcm90
b0Z1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3Qg
JmFyZ3MpCitWYWx1ZUltcCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50UHJvdG9GdW5jOjpjYWxsQXNG
dW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdEltcCAqdGhpc09iaiwgY29uc3QgTGlzdCAm
YXJncykKIHsKLQlTVkdUZXh0Q29udGVudEVsZW1lbnQgb2JqKGNhc3QoZXhlYywgc3RhdGljX2Nh
c3Q8S0pTOjpPYmplY3RJbXAgKj4odGhpc09iai5pbXAoKSkpKTsKKwlTVkdUZXh0Q29udGVudEVs
ZW1lbnQgb2JqKGNhc3QoZXhlYywgdGhpc09iaikpOwogCUtET01fRU5URVJfU0FGRQogCiAJc3dp
dGNoKGlkKQpAQCAtOTcsMTcgKzk3LDE3IEBAIFZhbHVlIFNWR1RleHRDb250ZW50RWxlbWVudFBy
b3RvRnVuYzo6Y2EKIAkJfQogCQljYXNlIFNWR1RleHRDb250ZW50RWxlbWVudENvbnN0YW50czo6
R2V0U3ViU3RyaW5nTGVuZ3RoOgogCQl7Ci0JCQlyZXR1cm4gTnVtYmVyKG9iai5nZXRTdWJTdHJp
bmdMZW5ndGgoYXJnc1swXS50b1VJbnQzMihleGVjKSwgYXJnc1sxXS50b1VJbnQzMihleGVjKSkp
OworCQkJcmV0dXJuIE51bWJlcihvYmouZ2V0U3ViU3RyaW5nTGVuZ3RoKGFyZ3NbMF0tPnRvVUlu
dDMyKGV4ZWMpLCBhcmdzWzFdLT50b1VJbnQzMihleGVjKSkpOwogCQl9CiAJCWNhc2UgU1ZHVGV4
dENvbnRlbnRFbGVtZW50Q29uc3RhbnRzOjpHZXRTdGFydFBvc2l0aW9uT2ZDaGFyOgotCQkJcmV0
dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUG9pbnQ+KGV4ZWMsIG9iai5nZXRTdGFydFBvc2l0aW9u
T2ZDaGFyKGFyZ3NbMF0udG9VSW50MzIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2Nh
Y2hlPFNWR1BvaW50PihleGVjLCBvYmouZ2V0U3RhcnRQb3NpdGlvbk9mQ2hhcihhcmdzWzBdLT50
b1VJbnQzMihleGVjKSkpOwogCQljYXNlIFNWR1RleHRDb250ZW50RWxlbWVudENvbnN0YW50czo6
R2V0RW5kUG9zaXRpb25PZkNoYXI6Ci0JCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdQb2lu
dD4oZXhlYywgb2JqLmdldFN0YXJ0UG9zaXRpb25PZkNoYXIoYXJnc1swXS50b1VJbnQzMihleGVj
KSkpOworCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHUG9pbnQ+KGV4ZWMsIG9iai5nZXRT
dGFydFBvc2l0aW9uT2ZDaGFyKGFyZ3NbMF0tPnRvVUludDMyKGV4ZWMpKSk7CiAJCWNhc2UgU1ZH
VGV4dENvbnRlbnRFbGVtZW50Q29uc3RhbnRzOjpHZXRFeHRlbnRPZkNoYXI6Ci0JCQlyZXR1cm4g
S0RPTTo6c2FmZV9jYWNoZTxTVkdSZWN0PihleGVjLCBvYmouZ2V0RXh0ZW50T2ZDaGFyKGFyZ3Nb
MF0udG9VSW50MzIoZXhlYykpKTsKKwkJCXJldHVybiBLRE9NOjpzYWZlX2NhY2hlPFNWR1JlY3Q+
KGV4ZWMsIG9iai5nZXRFeHRlbnRPZkNoYXIoYXJnc1swXS0+dG9VSW50MzIoZXhlYykpKTsKIAkJ
Y2FzZSBTVkdUZXh0Q29udGVudEVsZW1lbnRDb25zdGFudHM6OkdldFJvdGF0aW9uT2ZDaGFyOgog
CQl7Ci0JCQlyZXR1cm4gTnVtYmVyKG9iai5nZXRSb3RhdGlvbk9mQ2hhcihhcmdzWzBdLnRvVUlu
dDMyKGV4ZWMpKSk7CisJCQlyZXR1cm4gTnVtYmVyKG9iai5nZXRSb3RhdGlvbk9mQ2hhcihhcmdz
WzBdLT50b1VJbnQzMihleGVjKSkpOwogCQl9CiAJCWNhc2UgU1ZHVGV4dENvbnRlbnRFbGVtZW50
Q29uc3RhbnRzOjpHZXRDaGFyTnVtQXRQb3NpdGlvbjoKIAkJewpAQCAtMTE2LDcgKzExNiw3IEBA
IFZhbHVlIFNWR1RleHRDb250ZW50RWxlbWVudFByb3RvRnVuYzo6Y2EKIAkJfQogCQljYXNlIFNW
R1RleHRDb250ZW50RWxlbWVudENvbnN0YW50czo6U2VsZWN0U3ViU3RyaW5nOgogCQl7Ci0JCQlv
Ymouc2VsZWN0U3ViU3RyaW5nKGFyZ3NbMF0udG9VSW50MzIoZXhlYyksIGFyZ3NbMV0udG9VSW50
MzIoZXhlYykpOworCQkJb2JqLnNlbGVjdFN1YlN0cmluZyhhcmdzWzBdLT50b1VJbnQzMihleGVj
KSwgYXJnc1sxXS0+dG9VSW50MzIoZXhlYykpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9
CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RleHRD
b250ZW50RWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEu
MSBrc3ZnMi9kb20vU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdUZXh0
Q29udGVudEVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIv
ZG9tL1NWR1RleHRDb250ZW50RWxlbWVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAg
LTc2LDcgKzc2LDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJE
UFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVByb3BlcnR5KEtK
Uzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9OwogCkluZGV4OiBr
c3ZnMi9kb20vU1ZHVGV4dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUZXh0RWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUZXh0RWxlbWVudC5jcHAK
LS0tIGtzdmcyL2RvbS9TVkdUZXh0RWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAw
MAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUZXh0RWxlbWVudC5jcHAJOCBBdWcgMjAwNSAxOTo1NTow
MSAtMDAwMApAQCAtNDMsNyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICov
CiAKLVZhbHVlIFNWR1RleHRFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1RleHRFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVGV4dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVGV4dEVsZW1lbnQuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RleHRF
bGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdUZXh0RWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6
NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVGV4dEVsZW1lbnQuaAk4IEF1ZyAyMDA1IDE5
OjU1OjAxIC0wMDAwCkBAIC01MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBLU1ZHCiAJCUtET01fR0VU
CiAJCUtET01fRk9SV0FSRFBVVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6
OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0
VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9
OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAg
LXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuY3BwCi0tLSBrc3Zn
Mi9kb20vU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAt
MDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAk4IEF1
ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBL
U1ZHOwogQGVuZAogKi8KIAotVmFsdWUgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4OiBrc3ZnMi9k
b20vU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Lmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50LmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNjAsNyAr
NjAsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAot
CQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2Rv
bS9TVkdUaXRsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdUaXRsZUVsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGl0bGVFbGVtZW50LmNwcAotLS0g
a3N2ZzIvZG9tL1NWR1RpdGxlRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkx
LjEKKysrIGtzdmcyL2RvbS9TVkdUaXRsZUVsZW1lbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEg
LTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwog
Ci1WYWx1ZSBTVkdUaXRsZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHVGl0bGVFbGVtZW50OjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJf
U0FGRQogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVGl0bGVFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1RpdGxlRWxlbWVudC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVGl0
bGVFbGVtZW50LmgKLS0tIGtzdmcyL2RvbS9TVkdUaXRsZUVsZW1lbnQuaAk5IEp1bCAyMDA1IDA2
OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1RpdGxlRWxlbWVudC5oCTggQXVnIDIw
MDUgMTk6NTU6MDEgLTAwMDAKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RP
TV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1w
ICpnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogCX07CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NW
R1RyYW5zZm9ybS5jcHAKLS0tIGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm0uY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmNwcAk4IEF1ZyAy
MDA1IDE5OjU1OjAxIC0wMDAwCkBAIC01Miw3ICs1Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZH
OwogCiBLU1ZHX0lNUExFTUVOVF9QUk9UT1RZUEUoIlNWR1RyYW5zZm9ybSIsIFNWR1RyYW5zZm9y
bVByb3RvLCBTVkdUcmFuc2Zvcm1Qcm90b0Z1bmMpCiAKLVZhbHVlIFNWR1RyYW5zZm9ybTo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1w
ICpTVkdUcmFuc2Zvcm06OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKQEAgLTcyLDcgKzcyLDcgQEAgVmFsdWUg
U1ZHVHJhbnNmb3JtOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZQogCXJldHVybiBVbmRlZmluZWQoKTsK
IH0KIAotVmFsdWUgU1ZHVHJhbnNmb3JtUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywg
T2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1RyYW5zZm9y
bVByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBPYmplY3RJbXAgKnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7CiAJS0RPTV9DSEVDS19USElTKFNWR1RyYW5zZm9y
bSkKIAlLRE9NX0VOVEVSX1NBRkUKQEAgLTg3LDM1ICs4NywzNSBAQCBWYWx1ZSBTVkdUcmFuc2Zv
cm1Qcm90b0Z1bmM6OmNhbGwoRXhlY1N0CiAJCX0KIAkJY2FzZSBTVkdUcmFuc2Zvcm1Db25zdGFu
dHM6OlNldFRyYW5zbGF0ZToKIAkJewotCQkJZG91YmxlIHggPSBhcmdzWzBdLnRvTnVtYmVyKGV4
ZWMpOwotCQkJZG91YmxlIHkgPSBhcmdzWzFdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIHgg
PSBhcmdzWzBdLT50b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSB5ID0gYXJnc1sxXS0+dG9OdW1i
ZXIoZXhlYyk7CiAJCQlvYmouc2V0VHJhbnNsYXRlKHgsIHkpOwogCQkJcmV0dXJuIFVuZGVmaW5l
ZCgpOwogCQl9CiAJCWNhc2UgU1ZHVHJhbnNmb3JtQ29uc3RhbnRzOjpTZXRTY2FsZToKIAkJewot
CQkJZG91YmxlIHN4ID0gYXJnc1swXS50b051bWJlcihleGVjKTsKLQkJCWRvdWJsZSBzeSA9IGFy
Z3NbMV0udG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgc3ggPSBhcmdzWzBdLT50b051bWJlcihl
eGVjKTsKKwkJCWRvdWJsZSBzeSA9IGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMpOwogCQkJb2JqLnNl
dFNjYWxlKHN4LCBzeSk7CiAJCQlyZXR1cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBTVkdU
cmFuc2Zvcm1Db25zdGFudHM6OlNldFJvdGF0ZToKIAkJewotCQkJZG91YmxlIGFuZ2xlID0gYXJn
c1swXS50b051bWJlcihleGVjKTsKLQkJCWRvdWJsZSBjeCA9IGFyZ3NbMV0udG9OdW1iZXIoZXhl
Yyk7Ci0JCQlkb3VibGUgY3kgPSBhcmdzWzJdLnRvTnVtYmVyKGV4ZWMpOworCQkJZG91YmxlIGFu
Z2xlID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgY3ggPSBhcmdzWzFdLT50
b051bWJlcihleGVjKTsKKwkJCWRvdWJsZSBjeSA9IGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpOwog
CQkJb2JqLnNldFJvdGF0ZShhbmdsZSwgY3gsIGN5KTsKIAkJCXJldHVybiBVbmRlZmluZWQoKTsK
IAkJfQogCQljYXNlIFNWR1RyYW5zZm9ybUNvbnN0YW50czo6U2V0U2tld1g6CiAJCXsKLQkJCWRv
dWJsZSBhbmdsZSA9IGFyZ3NbMF0udG9OdW1iZXIoZXhlYyk7CisJCQlkb3VibGUgYW5nbGUgPSBh
cmdzWzBdLT50b051bWJlcihleGVjKTsKIAkJCW9iai5zZXRTa2V3WChhbmdsZSk7CiAJCQlyZXR1
cm4gVW5kZWZpbmVkKCk7CiAJCX0KIAkJY2FzZSBTVkdUcmFuc2Zvcm1Db25zdGFudHM6OlNldFNr
ZXdZOgogCQl7Ci0JCQlkb3VibGUgYW5nbGUgPSBhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpOworCQkJ
ZG91YmxlIGFuZ2xlID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7CiAJCQlvYmouc2V0U2tld1ko
YW5nbGUpOwogCQkJcmV0dXJuIFVuZGVmaW5lZCgpOwogCQl9CkluZGV4OiBrc3ZnMi9kb20vU1ZH
VHJhbnNmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2
ZzIvZG9tL1NWR1RyYW5zZm9ybS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAt
dSAtcjEuMSBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtLmgKLS0tIGtzdmcyL2RvbS9TVkdUcmFuc2Zv
cm0uaAk5IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1RyYW5z
Zm9ybS5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNw
YWNlIEtTVkcKIAkJS0RPTV9CQVNFQ0xBU1NfR0VUCiAJCUtET01fQ0FTVAogCi0JCUtKUzo6VmFs
dWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIvZG9tL1NWR1RyYW5z
Zm9ybUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tz
dmcyL2RvbS9TVkdUcmFuc2Zvcm1MaXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRp
ZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybUxpc3QuY3BwCi0tLSBrc3ZnMi9k
b20vU1ZHVHJhbnNmb3JtTGlzdC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1MaXN0LmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAw
CkBAIC01OCw3ICs1OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiBLU1ZHX0lNUExFTUVO
VF9QUk9UT1RZUEUoIlNWR1RyYW5zZm9ybUxpc3QiLCBTVkdUcmFuc2Zvcm1MaXN0UHJvdG8sIFNW
R1RyYW5zZm9ybUxpc3RQcm90b0Z1bmMpCiAKLVZhbHVlIFNWR1RyYW5zZm9ybUxpc3Q6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
U1ZHVHJhbnNmb3JtTGlzdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNzQsNyArNzQsNyBAQCBWYWx1
ZSBTVkdUcmFuc2Zvcm1MaXN0OjpnZXRWYWx1ZVByb3BlcnR5CiAJcmV0dXJuIFVuZGVmaW5lZCgp
OwogfQogCi1WYWx1ZSBTVkdUcmFuc2Zvcm1MaXN0UHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorVmFsdWVJbXAgKlNWR1Ry
YW5zZm9ybUxpc3RQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0SW1wICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewogCUtET01fQ0hFQ0tfVEhJUyhT
VkdUcmFuc2Zvcm1MaXN0KQogCUtET01fRU5URVJfU0FGRQpAQCAtOTMsMjQgKzkzLDI0IEBAIFZh
bHVlIFNWR1RyYW5zZm9ybUxpc3RQcm90b0Z1bmM6OmNhbGwoRXgKIAkJfQogCQljYXNlIFNWR1Ry
YW5zZm9ybUxpc3RDb25zdGFudHM6OkdldEl0ZW06CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgaW5k
ZXggPSBhcmdzWzBdLnRvVUludDMyKGV4ZWMpOworCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFy
Z3NbMF0tPnRvVUludDMyKGV4ZWMpOwogCQkJcmV0dXJuIEtET006OnNhZmVfY2FjaGU8U1ZHVHJh
bnNmb3JtPihleGVjLCBvYmouZ2V0SXRlbShpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHVHJhbnNm
b3JtTGlzdENvbnN0YW50czo6SW5zZXJ0SXRlbUJlZm9yZToKIAkJewogCQkJU1ZHVHJhbnNmb3Jt
IG5ld0l0ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZHVHJhbnNmb3JtPihleGVjLCBhcmdzWzBdLCAm
dG9TVkdUcmFuc2Zvcm0pOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50
MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhl
Yyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdUcmFuc2Zvcm0+KGV4ZWMsIG9iai5p
bnNlcnRJdGVtQmVmb3JlKG5ld0l0ZW0sIGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdUcmFuc2Zv
cm1MaXN0Q29uc3RhbnRzOjpSZXBsYWNlSXRlbToKIAkJewogCQkJU1ZHVHJhbnNmb3JtIG5ld0l0
ZW0gPSBLRE9NOjplY21hX2Nhc3Q8U1ZHVHJhbnNmb3JtPihleGVjLCBhcmdzWzBdLCAmdG9TVkdU
cmFuc2Zvcm0pOwotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMV0udG9VSW50MzIoZXhl
Yyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1sxXS0+dG9VSW50MzIoZXhlYyk7CiAJ
CQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdUcmFuc2Zvcm0+KGV4ZWMsIG9iai5yZXBsYWNl
SXRlbShuZXdJdGVtLCBpbmRleCkpOwogCQl9CiAJCWNhc2UgU1ZHVHJhbnNmb3JtTGlzdENvbnN0
YW50czo6UmVtb3ZlSXRlbToKIAkJewotCQkJdW5zaWduZWQgbG9uZyBpbmRleCA9IGFyZ3NbMF0u
dG9VSW50MzIoZXhlYyk7CisJCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gYXJnc1swXS0+dG9VSW50
MzIoZXhlYyk7CiAJCQlyZXR1cm4gS0RPTTo6c2FmZV9jYWNoZTxTVkdUcmFuc2Zvcm0+KGV4ZWMs
IG9iai5yZW1vdmVJdGVtKGluZGV4KSk7CiAJCX0KIAkJY2FzZSBTVkdUcmFuc2Zvcm1MaXN0Q29u
c3RhbnRzOjpBcHBlbmRJdGVtOgpJbmRleDoga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVHJh
bnNmb3JtTGlzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBr
c3ZnMi9kb20vU1ZHVHJhbnNmb3JtTGlzdC5oCi0tLSBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtTGlz
dC5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVHJhbnNm
b3JtTGlzdC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTY2LDcgKzY2LDcgQEAgbmFt
ZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9NX0JBU0VD
TEFTU19HRVQKIAotCQlLSlM6OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVy
dHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5k
ZXg6IGtzdmcyL2RvbS9TVkdUcmFuc2Zvcm1hYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVHJhbnNmb3JtYWJsZS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdUcmFuc2Zv
cm1hYmxlLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybWFibGUuY3BwCTkgSnVsIDIwMDUg
MDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtYWJsZS5jcHAJOCBB
dWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
S1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1RyYW5zZm9ybWFibGU6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHVHJhbnNm
b3JtYWJsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR1RyYW5zZm9ybWFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20v
U1ZHVHJhbnNmb3JtYWJsZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9kb20vU1ZHVHJhbnNmb3JtYWJsZS5oCi0tLSBrc3ZnMi9kb20vU1ZHVHJhbnNm
b3JtYWJsZS5oCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZH
VHJhbnNmb3JtYWJsZS5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTU0LDcgKzU0LDcg
QEAgbmFtZXNwYWNlIEtTVkcKIAlwdWJsaWM6IC8vIEVjbWFTY3JpcHQgc2VjdGlvbgogCQlLRE9N
X0dFVAogCi0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShL
SlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDog
a3N2ZzIvZG9tL1NWR1VSSVJlZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1VSSVJlZmVyZW5jZS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdVUklSZWZlcmVuY2Uu
Y3BwCi0tLSBrc3ZnMi9kb20vU1ZHVVJJUmVmZXJlbmNlLmNwcAk5IEp1bCAyMDA1IDA2OjU0OjU2
IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1VSSVJlZmVyZW5jZS5jcHAJOCBBdWcgMjAwNSAx
OTo1NTowMSAtMDAwMApAQCAtMzYsNyArMzYsNyBAQCB1c2luZyBuYW1lc3BhY2UgS1NWRzsKIEBl
bmQKICovCiAKLVZhbHVlIFNWR1VSSVJlZmVyZW5jZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1ZhbHVlSW1wICpTVkdVUklSZWZlcmVuY2U6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RP
TV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdVUklSZWZlcmVuY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVVJJUmVmZXJl
bmNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2Rv
bS9TVkdVUklSZWZlcmVuY2UuaAotLS0ga3N2ZzIvZG9tL1NWR1VSSVJlZmVyZW5jZS5oCTkgSnVs
IDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVVJJUmVmZXJlbmNlLmgJ
OCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgS1NW
RwogCXB1YmxpYzogLy8gRWNtYVNjcmlwdCBzZWN0aW9uCiAJCUtET01fQkFTRUNMQVNTX0dFVAog
Ci0JCUtKUzo6VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKwkJS0pTOjpWYWx1ZUltcCAqZ2V0VmFsdWVQcm9wZXJ0eShLSlM6OkV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIv
ZG9tL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2RvbS9TVkdVc2VFbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZG9tL1NWR1VzZUVsZW1lbnQuY3BwCi0tLSBrc3Zn
Mi9kb20vU1ZHVXNlRWxlbWVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysr
IGtzdmcyL2RvbS9TVkdVc2VFbGVtZW50LmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBA
IC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogCiAvLyBUT0RPOiBpbnN0YW5j
ZVJvb3QJCVNWR1VzZUVsZW1lbnRDb25zdGFudHM6Okluc3RhbmNlUm9vdAlEb250RGVsZXRlfFJl
YWRPbmx5CiAKLVZhbHVlIFNWR1VzZUVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHVXNlRWxlbWVudDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKIAlLRE9NX0VO
VEVSX1NBRkUKIApJbmRleDoga3N2ZzIvZG9tL1NWR1VzZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZHVXNlRWxlbWVudC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9kb20vU1ZHVXNl
RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHVXNlRWxlbWVudC5oCTkgSnVsIDIwMDUgMDY6NTQ6
NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHVXNlRWxlbWVudC5oCTggQXVnIDIwMDUgMTk6
NTU6MDEgLTAwMDAKQEAgLTczLDcgKzczLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQK
IAkJS0RPTV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRW
YWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07
CiB9OwogCkluZGV4OiBrc3ZnMi9kb20vU1ZHVmlld0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2RvbS9TVkdWaWV3RWxlbWVudC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2RvbS9TVkdW
aWV3RWxlbWVudC5jcHAKLS0tIGtzdmcyL2RvbS9TVkdWaWV3RWxlbWVudC5jcHAJOSBKdWwgMjAw
NSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdWaWV3RWxlbWVudC5jcHAJOCBB
dWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2Ug
S1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1ZpZXdFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAorVmFsdWVJbXAgKlNWR1ZpZXdFbGVt
ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ewogCUtET01fRU5URVJfU0FGRQogCQpJbmRleDoga3N2ZzIvZG9tL1NWR1ZpZXdFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZG9tL1NWR1Zp
ZXdFbGVtZW50LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4xIGtz
dmcyL2RvbS9TVkdWaWV3RWxlbWVudC5oCi0tLSBrc3ZnMi9kb20vU1ZHVmlld0VsZW1lbnQuaAk5
IEp1bCAyMDA1IDA2OjU0OjU2IC0wMDAwCTEuMQorKysga3N2ZzIvZG9tL1NWR1ZpZXdFbGVtZW50
LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2Ug
S1NWRwogCQlLRE9NX0dFVAogCQlLRE9NX0ZPUldBUkRQVVQKIAotCQlLSlM6OlZhbHVlIGdldFZh
bHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisJCUtK
Uzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2RvbS9TVkdab29tQW5kUGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9kb20vU1ZH
Wm9vbUFuZFBhbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGtzdmcyL2RvbS9TVkdab29tQW5kUGFuLmNwcAotLS0ga3N2ZzIvZG9tL1NWR1pvb21BbmRQYW4u
Y3BwCTkgSnVsIDIwMDUgMDY6NTQ6NTYgLTAwMDAJMS4xCisrKyBrc3ZnMi9kb20vU1ZHWm9vbUFu
ZFBhbi5jcHAJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzUsNyArMzUsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgS1NWRzsKIEBlbmQKICovCiAKLVZhbHVlIFNWR1pvb21BbmRQYW46OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZUltcCAq
U1ZHWm9vbUFuZFBhbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3QKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTEsNyArNTEsNyBAQCBWYWx1ZSBT
Vkdab29tQW5kUGFuOjpnZXRWYWx1ZVByb3BlcnR5KEV4CiAJcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi12b2lkIFNWR1pvb21BbmRQYW46OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50KQordm9pZCBTVkdab29tQW5kUGFu
OjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBWYWx1ZUltcCAq
dmFsdWUsIGludCkKIHsKIAlLRE9NX0VOVEVSX1NBRkUKIApAQCAtNTksNyArNTksNyBAQCB2b2lk
IFNWR1pvb21BbmRQYW46OnB1dFZhbHVlUHJvcGVydHkoRXhlCiAJewogCQljYXNlIFNWR1pvb21B
bmRQYW5Db25zdGFudHM6Olpvb21BbmRQYW46CiAJCXsKLQkJCXNldFpvb21BbmRQYW4odmFsdWUu
dG9VSW50MTYoZXhlYykpOworCQkJc2V0Wm9vbUFuZFBhbih2YWx1ZS0+dG9VSW50MTYoZXhlYykp
OwogCQkJcmV0dXJuOwogCQl9CiAJCWRlZmF1bHQ6CkluZGV4OiBrc3ZnMi9kb20vU1ZHWm9vbUFu
ZFBhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2Rv
bS9TVkdab29tQW5kUGFuLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1y
MS4xIGtzdmcyL2RvbS9TVkdab29tQW5kUGFuLmgKLS0tIGtzdmcyL2RvbS9TVkdab29tQW5kUGFu
LmgJOSBKdWwgMjAwNSAwNjo1NDo1NiAtMDAwMAkxLjEKKysrIGtzdmcyL2RvbS9TVkdab29tQW5k
UGFuLmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtNTUsOCArNTUsOCBAQCBuYW1lc3Bh
Y2UgS1NWRwogCQlLRE9NX0JBU0VDTEFTU19HRVQKIAkJS0RPTV9QVVQKIAotCQlLSlM6OlZhbHVl
IGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7
Ci0JCXZvaWQgcHV0VmFsdWVQcm9wZXJ0eShLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBLSlM6OlZhbHVlICZ2YWx1ZSwgaW50IGF0dHIpOworCQlLSlM6OlZhbHVlSW1wICpn
ZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
CQl2b2lkIHB1dFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
S0pTOjpWYWx1ZUltcCAqdmFsdWUsIGludCBhdHRyKTsKIAl9OwogfTsKIApJbmRleDoga3N2ZzIv
ZWNtYS9FY21hLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9r
c3ZnMi9lY21hL0VjbWEuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAt
cjEuMSBrc3ZnMi9lY21hL0VjbWEuY3BwCi0tLSBrc3ZnMi9lY21hL0VjbWEuY3BwCTkgSnVsIDIw
MDUgMDY6NTU6MjcgLTAwMDAJMS4xCisrKyBrc3ZnMi9lY21hL0VjbWEuY3BwCTggQXVnIDIwMDUg
MTk6NTU6MDEgLTAwMDAKQEAgLTQwMyw3ICs0MDMsNyBAQCBLSlM6Ok9iamVjdEltcCAqRWNtYTo6
aW5oZXJpdGVkR2V0RE9NQ1NTCiAJcmV0dXJuIDA7CiB9CiAKLUtKUzo6VmFsdWUgS1NWRzo6Z2V0
U1ZHUGF0aFNlZyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgU1ZHUGF0aFNlZyBzKQorS0pTOjpWYWx1
ZUltcCAqS1NWRzo6Z2V0U1ZHUGF0aFNlZyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgU1ZHUGF0aFNl
ZyBzKQogewogCWlmKHMgPT0gU1ZHUGF0aFNlZzo6bnVsbCkKIAkJcmV0dXJuIEtKUzo6TnVsbCgp
OwpAQCAtNDE1LDcgKzQxNSw3IEBAIEtKUzo6VmFsdWUgS1NWRzo6Z2V0U1ZHUGF0aFNlZyhLSlM6
OkV4ZWMKIAkvLyBSZXVzZSBleGlzdGluZyBicmlkZ2UsIGlmIHBvc3NpYmxlCiAJS0pTOjpPYmpl
Y3RJbXAgKnJlcXVlc3QgPSBpbnRlcnByZXRlci0+Z2V0RE9NT2JqZWN0KHMuaGFuZGxlKCkpOwog
CWlmKHJlcXVlc3QpCi0JCXJldHVybiBLSlM6OlZhbHVlKHJlcXVlc3QpOworCQlyZXR1cm4gcmVx
dWVzdDsKIAkKIAlLSlM6Ok9iamVjdEltcCAqcmV0ID0gMDsKIAl1bnNpZ25lZCBzaG9ydCB0eXBl
ID0gcy5wYXRoU2VnVHlwZSgpOwpAQCAtNTIyLDcgKzUyMiw3IEBAIEtKUzo6VmFsdWUgS1NWRzo6
Z2V0U1ZHUGF0aFNlZyhLSlM6OkV4ZWMKIAl9CiAKIAlpbnRlcnByZXRlci0+cHV0RE9NT2JqZWN0
KHMuaGFuZGxlKCksIHJldCk7Ci0JcmV0dXJuIEtKUzo6VmFsdWUocmV0KTsKKwlyZXR1cm4gcmV0
OwogfQogCiAKSW5kZXg6IGtzdmcyL2VjbWEvRWNtYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9TVkdTdXBwb3J0L2tzdmcyL2VjbWEvRWNtYS5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9lY21hL0VjbWEuaAotLS0ga3N2ZzIvZWNtYS9F
Y21hLmgJOSBKdWwgMjAwNSAwNjo1NToyOCAtMDAwMAkxLjEKKysrIGtzdmcyL2VjbWEvRWNtYS5o
CTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIEtT
VkcKIAogCS8vIEhlbHBlcnMKIAljbGFzcyBTVkdQYXRoU2VnOwotCUtKUzo6VmFsdWUgZ2V0U1ZH
UGF0aFNlZyhLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgU1ZHUGF0aFNlZyBzKTsKKwlLSlM6OlZhbHVl
SW1wICpnZXRTVkdQYXRoU2VnKEtKUzo6RXhlY1N0YXRlICpleGVjLCBTVkdQYXRoU2VnIHMpOwog
fTsKIAogI2VuZGlmCkluZGV4OiBrc3ZnMi9lY21hL0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZWNtYS9HbG9iYWxPYmplY3Qu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9lY21h
L0dsb2JhbE9iamVjdC5jcHAKLS0tIGtzdmcyL2VjbWEvR2xvYmFsT2JqZWN0LmNwcAk5IEp1bCAy
MDA1IDA2OjU1OjI4IC0wMDAwCTEuMQorKysga3N2ZzIvZWNtYS9HbG9iYWxPYmplY3QuY3BwCTgg
QXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTYyLDEyICs2MiwxMiBAQCB2b2lkIEdsb2JhbE9i
amVjdDo6YWZ0ZXJUaW1lb3V0KCkgY29uc3QKIAkJZG9jKCktPnVwZGF0ZVJlbmRlcmluZygpOwog
fQogCi1LSlM6OlZhbHVlIEdsb2JhbE9iamVjdDo6Z2V0KEtKUzo6RXhlY1N0YXRlICpleGVjLCBj
b25zdCBLSlM6OklkZW50aWZpZXIgJnApIGNvbnN0CitLSlM6OlZhbHVlSW1wICpHbG9iYWxPYmpl
Y3Q6OmdldChLSlM6OkV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgS0pTOjpJZGVudGlmaWVyICZwKSBj
b25zdAogewogCWtkRGVidWcoMjYwMDQpIDw8ICJLU1ZHOjpHbG9iYWxPYmplY3QgKCIgPDwgdGhp
cyA8PCAiKTo6Z2V0ICIgPDwgcC5xc3RyaW5nKCkgPDwgZW5kbDsKIAotCUtKUzo6VmFsdWUgcmV0
ID0gS0RPTTo6R2xvYmFsT2JqZWN0OjpnZXQoZXhlYywgcCk7Ci0JaWYocmV0LnR5cGUoKSAhPSBL
SlM6OlVuZGVmaW5lZFR5cGUpCisJS0pTOjpWYWx1ZUltcCAqcmV0ID0gS0RPTTo6R2xvYmFsT2Jq
ZWN0OjpnZXQoZXhlYywgcCk7CisJaWYocmV0LT50eXBlKCkgIT0gS0pTOjpVbmRlZmluZWRUeXBl
KQogCQlyZXR1cm4gcmV0OwogCiAJY29uc3QgS0pTOjpIYXNoRW50cnkgKmVudHJ5ID0gS0pTOjpM
b29rdXA6OmZpbmRFbnRyeSgmR2xvYmFsT2JqZWN0OjpzX2hhc2hUYWJsZSwgcCk7CkluZGV4OiBr
c3ZnMi9lY21hL0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9T
VkdTdXBwb3J0L2tzdmcyL2VjbWEvR2xvYmFsT2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMQpkaWZmIC1wIC11IC1yMS4xIGtzdmcyL2VjbWEvR2xvYmFsT2JqZWN0LmgKLS0tIGtzdmcy
L2VjbWEvR2xvYmFsT2JqZWN0LmgJOSBKdWwgMjAwNSAwNjo1NToyOCAtMDAwMAkxLjEKKysrIGtz
dmcyL2VjbWEvR2xvYmFsT2JqZWN0LmgJOCBBdWcgMjAwNSAxOTo1NTowMSAtMDAwMApAQCAtMzgs
NyArMzgsNyBAQCBuYW1lc3BhY2UgS1NWRwogCQl2aXJ0dWFsIH5HbG9iYWxPYmplY3QoKTsKIAog
CQl2aXJ0dWFsIHZvaWQgYWZ0ZXJUaW1lb3V0KCkgY29uc3Q7Ci0JCXZpcnR1YWwgS0pTOjpWYWx1
ZSBnZXQoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lKSBjb25zdDsKKwkJdmlydHVhbCBLSlM6OlZhbHVlSW1wICpnZXQoS0pTOjpFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IEtKUzo6SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKIAog
CQkvLyBFY21hU2NyaXB0IHNwZWNpZmljIHN0dWZmIC0gb25seSBuZWVkZWQgZm9yIEdsb2JhbE9i
amVjdAogCQkvLyBZb3Ugd29uJ3QgZmluZCBpdCBpbiAiZ2VuZXJhbCIga2RvbSBlY21hIGNvZGUu
Li4KSW5kZXg6IGtzdmcyL2V2ZW50cy9TVkdFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1NWR1N1cHBvcnQva3N2ZzIvZXZlbnRzL1NWR0V2ZW50LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIvZXZlbnRzL1NWR0V2ZW50LmNw
cAotLS0ga3N2ZzIvZXZlbnRzL1NWR0V2ZW50LmNwcAk5IEp1bCAyMDA1IDA2OjU1OjI5IC0wMDAw
CTEuMQorKysga3N2ZzIvZXZlbnRzL1NWR0V2ZW50LmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0w
MDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBLU1ZHOwogQGVuZAogKi8KIAot
VmFsdWUgU1ZHRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAJS0RPTV9FTlRFUl9TQUZFCiAKSW5kZXg6IGtz
dmcyL2V2ZW50cy9TVkdFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdT
dXBwb3J0L2tzdmcyL2V2ZW50cy9TVkdFdmVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9ldmVudHMvU1ZHRXZlbnQuaAotLS0ga3N2ZzIvZXZlbnRz
L1NWR0V2ZW50LmgJOSBKdWwgMjAwNSAwNjo1NToyOSAtMDAwMAkxLjEKKysrIGtzdmcyL2V2ZW50
cy9TVkdFdmVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAg
bmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RPTV9GT1JXQVJEUFVUCiAJCQotCQlLSlM6
OlZhbHVlIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisJCUtKUzo6VmFsdWVJbXAgKmdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAJfTsKIH07CiAKSW5kZXg6IGtzdmcyL2V2ZW50cy9T
Vkdab29tRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9TVkdTdXBwb3J0
L2tzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEK
ZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9ldmVudHMvU1ZHWm9vbUV2ZW50LmNwcAotLS0ga3N2ZzIv
ZXZlbnRzL1NWR1pvb21FdmVudC5jcHAJOSBKdWwgMjAwNSAwNjo1NToyOSAtMDAwMAkxLjEKKysr
IGtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuY3BwCTggQXVnIDIwMDUgMTk6NTU6MDEgLTAwMDAK
QEAgLTQzLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtTVkc7CiBAZW5kCiAqLwogCi1WYWx1
ZSBTVkdab29tRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CitWYWx1ZUltcCAqU1ZHWm9vbUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogewogCUtET01fRU5URVJfU0FGRQogCkluZGV4
OiBrc3ZnMi9ldmVudHMvU1ZHWm9vbUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1NWR1N1cHBvcnQva3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBrc3ZnMi9ldmVudHMvU1ZHWm9vbUV2ZW50LmgK
LS0tIGtzdmcyL2V2ZW50cy9TVkdab29tRXZlbnQuaAk5IEp1bCAyMDA1IDA2OjU1OjI5IC0wMDAw
CTEuMQorKysga3N2ZzIvZXZlbnRzL1NWR1pvb21FdmVudC5oCTggQXVnIDIwMDUgMTk6NTU6MDEg
LTAwMDAKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIEtTVkcKIAkJS0RPTV9HRVQKIAkJS0RP
TV9GT1JXQVJEUFVUCiAKLQkJS0pTOjpWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEtKUzo6RXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworCQlLSlM6OlZhbHVlSW1wICpnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogCX07CiB9Owog
CkluZGV4OiBrc3ZnMi9pbXBsL1NWR1NjcmlwdEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvU1ZHU3VwcG9ydC9rc3ZnMi9pbXBsL1NWR1NjcmlwdEVsZW1lbnRJ
bXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXAgLXUgLXIxLjEga3N2ZzIv
aW1wbC9TVkdTY3JpcHRFbGVtZW50SW1wbC5jcHAKLS0tIGtzdmcyL2ltcGwvU1ZHU2NyaXB0RWxl
bWVudEltcGwuY3BwCTkgSnVsIDIwMDUgMDY6NTU6NDEgLTAwMDAJMS4xCisrKyBrc3ZnMi9pbXBs
L1NWR1NjcmlwdEVsZW1lbnRJbXBsLmNwcAk4IEF1ZyAyMDA1IDE5OjU1OjAxIC0wMDAwCkBAIC04
OSwxNCArODksMTQgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50SW1wbDo6ZXhlY3V0ZVNjcmlwdAog
CWlmKGNvbXAuY29tcGxUeXBlKCkgPT0gS0pTOjpUaHJvdykKIAl7CiAJCUtKUzo6RXhlY1N0YXRl
ICpleGVjID0gZWNtYUVuZ2luZS0+Z2xvYmFsRXhlYygpOwotCQlLSlM6OlZhbHVlIGV4VmFsID0g
Y29tcC52YWx1ZSgpOworCQlLSlM6OlZhbHVlSW1wICpleFZhbCA9IGNvbXAudmFsdWUoKTsKIAog
CQlpbnQgbGluZW5vID0gLTE7Ci0JCWlmKGV4VmFsLnR5cGUoKSA9PSBLSlM6Ok9iamVjdFR5cGUp
CisJCWlmKGV4VmFsLT5pc09iamVjdCgpKQogCQl7Ci0JCQlLSlM6OlZhbHVlIGxpbmVWYWwgPSBL
SlM6Ok9iamVjdDo6ZHluYW1pY0Nhc3QoZXhWYWwpLmdldChleGVjLCAibGluZSIpOwotCQkJaWYo
bGluZVZhbC50eXBlKCkgPT0gS0pTOjpOdW1iZXJUeXBlKQotCQkJCWxpbmVubyA9IGludChsaW5l
VmFsLnRvTnVtYmVyKGV4ZWMpKTsKKwkJCUtKUzo6VmFsdWVJbXAgKmxpbmVWYWwgPSBzdGF0aWNf
Y2FzdDxLSlM6Ok9iamVjdEltcCAqPihleFZhbCktPmdldChleGVjLCAibGluZSIpOworCQkJaWYo
bGluZVZhbC0+dHlwZSgpID09IEtKUzo6TnVtYmVyVHlwZSkKKwkJCQlsaW5lbm8gPSBpbnQobGlu
ZVZhbC0+dG9OdW1iZXIoZXhlYykpOwogCQl9CiAKIAkJLy8gRmlyZSBFUlJPUl9FVkVOVCB1cG9u
IGVycm9ycy4uLgpAQCAtMTEyLDEwICsxMTIsMTAgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50SW1w
bDo6ZXhlY3V0ZVNjcmlwdAogCQkJZXZlbnQtPmRlcmVmKCk7CiAJCX0KIAotCQlrZERlYnVnKCkg
PDwgIltTVkdTY3JpcHRFbGVtZW50XSBFdmFsdWF0aW9uIGVycm9yLCBsaW5lICIgPDwgKGxpbmVu
byAhPSAtMSA/IFFTdHJpbmc6Om51bWJlcihsaW5lbm8pIDogUVN0cmluZzo6ZnJvbUxhdGluMSgi
Ti9BIikpICA8PCAiICIgPDwgZXhWYWwudG9TdHJpbmcoZXhlYykucXN0cmluZygpIDw8IGVuZGw7
CisJCWtkRGVidWcoKSA8PCAiW1NWR1NjcmlwdEVsZW1lbnRdIEV2YWx1YXRpb24gZXJyb3IsIGxp
bmUgIiA8PCAobGluZW5vICE9IC0xID8gUVN0cmluZzo6bnVtYmVyKGxpbmVubykgOiBRU3RyaW5n
Ojpmcm9tTGF0aW4xKCJOL0EiKSkgIDw8ICIgIiA8PCBleFZhbC0+dG9TdHJpbmcoZXhlYykucXN0
cmluZygpIDw8IGVuZGw7CiAJfQogCWVsc2UgaWYoY29tcC5jb21wbFR5cGUoKSA9PSBLSlM6OlJl
dHVyblZhbHVlKQotCQlrZERlYnVnKCkgPDwgIltTVkdTY3JpcHRFbGVtZW50XSBSZXR1cm4gdmFs
dWU6ICIgPDwgY29tcC52YWx1ZSgpLnRvU3RyaW5nKGVjbWFFbmdpbmUtPmdsb2JhbEV4ZWMoKSku
cXN0cmluZygpIDw8IGVuZGw7CisJCWtkRGVidWcoKSA8PCAiW1NWR1NjcmlwdEVsZW1lbnRdIFJl
dHVybiB2YWx1ZTogIiA8PCBjb21wLnZhbHVlKCktPnRvU3RyaW5nKGVjbWFFbmdpbmUtPmdsb2Jh
bEV4ZWMoKSkucXN0cmluZygpIDw8IGVuZGw7CiAJZWxzZSBpZihjb21wLmNvbXBsVHlwZSgpID09
IEtKUzo6Tm9ybWFsKQogCQlrZERlYnVnKCkgPDwgIltTVkdTY3JpcHRFbGVtZW50XSBFdmFsdWF0
ZWQgZWNtYSBzY3JpcHQhIiA8PCBlbmRsOwogfQo=
</data>
<flag name="review"
          id="335"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>