<?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>4124</bug_id>
          
          <creation_ts>2005-07-24 22:46:09 -0700</creation_ts>
          <short_desc>change JavaScript property access to avoid double lookup</short_desc>
          <delta_ts>2005-07-25 20:35:34 -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>JavaScriptCore</component>
          <version>412</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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>15154</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-07-24 22:46:09 -0700</bug_when>
    <thetext>JavaScript variable access currently looks up most variables twice. Related to this is the fact that 
hasOwnProperty and get effectively duplicate some functionality and need to be kept in sync. It would be 
nice to clean this up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15155</commentid>
    <comment_count>1</comment_count>
      <attachid>3077</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-07-24 23:28:54 -0700</bug_when>
    <thetext>Created attachment 3077
property change patch - changes get() to getOwnProperty()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15156</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-07-25 01:30:45 -0700</bug_when>
    <thetext>+      if (!v || v == UndefinedImp::staticUndefined)
+        return false;

Our code seems to disagree about whether to use &quot;X.type() == UndefinedType&quot;, &quot;X.isUndefined()&quot;, or &quot;X== 
UndefinedImp::staticUndefined&quot;. Is there a Good Reason (TM) for this, or should we standardize it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15159</commentid>
    <comment_count>3</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-07-25 02:17:41 -0700</bug_when>
    <thetext>It happens that since the undefined value is unique, then so long as there is an interpreter in existence, all 
three will mean the same thing. However, comparing for == UndefinedImp::staticUndefined is likely faster 
than doing the type check, since it is a simple pointer compare rather than a virtual function call.

So probably the best option would be to make isUndefined use the comparison to staticUndefined, and 
then use the isUndefined call everywhere for the sake of abstraction.

In this case I used the &quot;compare to staticUndefined&quot; technique because it&apos;s what the code already did, and 
not for any real reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15169</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-07-25 10:13:47 -0700</bug_when>
    <thetext>The patch I have sitting in my tree does exactly what Maciej suggests among many other optimizations. It 
changes all checks for Undefined to use isUndefined() and makes it use the fastest idiom (which seems to 
be comparing with the global singleton instance).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15176</commentid>
    <comment_count>5</comment_count>
      <attachid>3077</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-07-25 12:06:30 -0700</bug_when>
    <thetext>Comment on attachment 3077
property change patch - changes get() to getOwnProperty()

Since Value already has a distinct &quot;null&quot; value, why didn&apos;t you use that
instead of adding a new result parameter?

The reason I ask is that once I change Value to ValueImp, it because quite
natural to have NULL mean &quot;I don&apos;t have a property&quot; even though it&apos;s in-band
signalling. The change would be smaller if getOwnProperty simply returned
Value() when there is no property, which is what getDirect does.

I also think this would result in a patch with many fewer lines changed.

Otherwise this patch looks great to me.

By the way, my pending patch is going to get us a bunch *more* speedup on top
of this, so I&apos;m pretty excited about the combination.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15179</commentid>
    <comment_count>6</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-07-25 14:40:31 -0700</bug_when>
    <thetext>I considered and rejected the in-band signalling option, because it wouldn&apos;t fit very well with the eventual 
plan to eliminate hasOwnProperty entirely. In that case you definitely need separate returns for presence 
of a property and its actual value. And this will be even more the case with the eventual property slot 
design. We can make access and simple assignment efficient without property slots but they are still 
needed to make update operations like &quot;++&quot; and &quot;+=&quot; efficient, and these are quite common both in 
benchmarks and in real-world web pages.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15181</commentid>
    <comment_count>7</comment_count>
      <attachid>3077</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-07-25 15:02:17 -0700</bug_when>
    <thetext>Comment on attachment 3077
property change patch - changes get() to getOwnProperty()

Maciej convinced me that as a first step, this use of bool is superior to the
in-band signaling of using Value(), given what we plan next.

I re-reviewed the entire patch. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15187</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-07-25 20:35:34 -0700</bug_when>
    <thetext>Maciej landed this today.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3077</attachid>
            <date>2005-07-24 23:28:54 -0700</date>
            <delta_ts>2005-07-25 15:02:17 -0700</delta_ts>
            <desc>property change patch - changes get() to getOwnProperty()</desc>
            <filename>prop-change.patch.txt</filename>
            <type>text/plain</type>
            <size>208244</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc2
MQpkaWZmIC11IC1wIC1yMS43NjEgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCi0tLSBKYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJMjQgSnVsIDIwMDUgMjI6MDE6MDIgLTAwMDAJMS43NjEKKysrIEph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkyNSBKdWwgMjAwNSAwNjowNDoyNCAtMDAwMApAQCAtMSwz
ICsxLDg0IEBACisyMDA1LTA3LTI0ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwktIGh0dHA6Ly9idWd6
aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEyNAorCShjaGFuZ2UgSmF2YVNj
cmlwdCBwcm9wZXJ0eSBhY2Nlc3MgdG8gYXZvaWQgZG91YmxlIGxvb2t1cCkKKworCS0gMTAlIHNw
ZWVkdXAgb24gSmF2YVNjcmlwdCBpQmVuY2gKKwktIDUlIHNwZWVkdXAgb24gMjRmdW4gQmVuY2hK
UyBiZW5jaG1hcmsKKworCUNoYW5nZWQgYWxsIGdldCBtZXRob2RzIHRvIGdldE93blByb3BlcnR5
IC0gdGhleSBhcmUgbm8gbG9uZ2VyCisJcmVzcG9uc2libGUgZm9yIHByb3RvdHlwZSBsb29rdXAs
IGFuZCBkZXRlcm1pbmUgaWYgdGhlIHByb3BlcnR5CisJd2FzIGZvdW5kIGFzIGEgc2lkZSBlZmVj
dC4gCisKKwlnZXQoKSBpcyBub3cgYSBub252aXJ0dWFsIE9iamVjdEltcCBtZXRob2Qgd2hpY2gg
Y2FsbHMgdGhlIHZpcnR1YWwKKwlnZXRPd25Qcm9wZXJ0eSBhbmQgd2Fsa3MgdGhlIHByb3RvdHlw
ZSBjaGFpbi4gQSBmZXcgc2VsZWN0ZWQKKwltZXRob2RzIHdlcmUgaW5saW5lZC4KKworCUNoYW5n
ZWQgUmVzb2x2ZU5vZGU6OmV2YWx1YXRlIHBsdXMgc29tZSBvdGhlciBwbGFjZXMgdG8gdXNlCisJ
Z2V0UHJvcGVydHkgd2hpY2ggZG9lcyBnZXQoKSBhbmQgaGFzUHJvcGVydHkoKSBpbiBvbmUgbG9v
a3VwLgorCisJQWxzbyBtaXNjZWxsYW5lb3VzIGNvZGUgY2xlYW51cC4KKyAgICAgICAgCisJKiBi
aW5kaW5ncy9vYmpjL29iamNfcnVudGltZS5oOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvb2Jq
Y19ydW50aW1lLm1tOgorICAgICAgICAoT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpPYmpjRmFsbGJh
Y2tPYmplY3RJbXApOgorICAgICAgICAoT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpnZXRPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChS
dW50aW1lQXJyYXlJbXA6OlJ1bnRpbWVBcnJheUltcCk6CisgICAgICAgIChSdW50aW1lQXJyYXlJ
bXA6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9ydW50aW1lX2FycmF5Lmg6
CisgICAgICAgICogYmluZGluZ3MvcnVudGltZV9tZXRob2QuY3BwOgorICAgICAgICAoUnVudGlt
ZU1ldGhvZEltcDo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL3J1bnRpbWVf
bWV0aG9kLmg6CisgICAgICAgICogYmluZGluZ3MvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAg
ICAoUnVudGltZU9iamVjdEltcDo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdz
L3J1bnRpbWVfb2JqZWN0Lmg6CisgICAgICAgICoga2pzL2FycmF5X2luc3RhbmNlLmg6CisgICAg
ICAgICoga2pzL2FycmF5X29iamVjdC5jcHA6CisgICAgICAgIChBcnJheUluc3RhbmNlSW1wOjpn
ZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgIChBcnJheVByb3RvdHlwZUltcDo6Z2V0T3duUHJvcGVy
dHkpOgorICAgICAgICAoQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGwpOgorICAgICAgICAqIGtqcy9h
cnJheV9vYmplY3QuaDoKKyAgICAgICAgKiBranMvZGF0ZV9vYmplY3QuY3BwOgorICAgICAgICAo
RGF0ZVByb3RvdHlwZUltcDo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAqIGtqcy9kYXRlX29i
amVjdC5oOgorICAgICAgICAqIGtqcy9mdW5jdGlvbi5jcHA6CisgICAgICAgIChLSlM6OkZ1bmN0
aW9uSW1wOjpnZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OkFyZ3VtZW50c0ltcDo6Z2V0
T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpBY3RpdmF0aW9uSW1wOjpnZXRPd25Qcm9wZXJ0
eSk6CisgICAgICAgICoga2pzL2Z1bmN0aW9uLmg6CisgICAgICAgICoga2pzL2xvb2t1cC5oOgor
ICAgICAgICAoS0pTOjpsb29rdXBHZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgIChLSlM6Omxvb2t1
cEdldE93bkZ1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6bG9va3VwR2V0T3duVmFsdWUpOgorICAg
ICAgICAqIGtqcy9tYXRoX29iamVjdC5jcHA6CisgICAgICAgIChNYXRoT2JqZWN0SW1wOjpnZXRP
d25Qcm9wZXJ0eSk6CisgICAgICAgIChNYXRoT2JqZWN0SW1wOjpnZXRWYWx1ZVByb3BlcnR5KToK
KyAgICAgICAgKiBranMvbWF0aF9vYmplY3QuaDoKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgor
ICAgICAgICAoUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKiBranMvbnVtYmVyX29i
amVjdC5jcHA6CisgICAgICAgIChOdW1iZXJPYmplY3RJbXA6OmdldE93blByb3BlcnR5KToKKyAg
ICAgICAgKiBranMvbnVtYmVyX29iamVjdC5oOgorICAgICAgICAqIGtqcy9vYmplY3QuY3BwOgor
ICAgICAgICAoS0pTOjpPYmplY3RJbXA6OmdldCk6CisgICAgICAgIChLSlM6Ok9iamVjdEltcDo6
Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpPYmplY3RJbXA6OmdldFByb3BlcnR5KToK
KyAgICAgICAgKiBranMvb2JqZWN0Lmg6CisgICAgICAgIChLSlM6Ok9iamVjdEltcDo6Z2V0UHJv
cGVydHkpOgorICAgICAgICAoS0pTOjpPYmplY3RJbXA6OmdldE93blByb3BlcnR5KToKKyAgICAg
ICAgKiBranMvb2JqZWN0X29iamVjdC5jcHA6CisgICAgICAgIChPYmplY3RQcm90b0Z1bmNJbXA6
OmNhbGwpOgorICAgICAgICAqIGtqcy9yZWdleHBfb2JqZWN0LmNwcDoKKyAgICAgICAgKFJlZ0V4
cE9iamVjdEltcDo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAqIGtqcy9yZWdleHBfb2JqZWN0
Lmg6CisgICAgICAgICoga2pzL3N0cmluZ19vYmplY3QuY3BwOgorICAgICAgICAoU3RyaW5nSW5z
dGFuY2VJbXA6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKFN0cmluZ1Byb3RvdHlwZUltcDo6
Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0Lmg6CisKIDIwMDUt
MDctMjQgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBrZXZpbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRp
bWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9ydW50aW1lX2FycmF5LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRp
ZmYgLXUgLXAgLXIxLjcgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5jcHAK
LS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuY3BwCTMgSnVsIDIwMDUg
MTA6NDc6NTEgLTAwMDAJMS43CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX2Fy
cmF5LmNwcAkyNSBKdWwgMjAwNSAwNjowNDoyNCAtMDAwMApAQCAtMzEsNyArMzEsOCBAQCB1c2lu
ZyBuYW1lc3BhY2UgS0pTOwogCiBjb25zdCBDbGFzc0luZm8gUnVudGltZUFycmF5SW1wOjppbmZv
ID0geyJSdW50aW1lQXJyYXkiLCAmQXJyYXlJbnN0YW5jZUltcDo6aW5mbywgMCwgMH07CiAKLVJ1
bnRpbWVBcnJheUltcDo6UnVudGltZUFycmF5SW1wKEV4ZWNTdGF0ZSAqZXhlYywgQmluZGluZ3M6
OkFycmF5ICphKSA6IEFycmF5SW5zdGFuY2VJbXAgKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigp
LT5idWlsdGluQXJyYXlQcm90b3R5cGUoKS5pbXAoKSwgYS0+Z2V0TGVuZ3RoKCkpCitSdW50aW1l
QXJyYXlJbXA6OlJ1bnRpbWVBcnJheUltcChFeGVjU3RhdGUgKmV4ZWMsIEJpbmRpbmdzOjpBcnJh
eSAqYSkKKyAgICA6IEFycmF5SW5zdGFuY2VJbXAgKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigp
LT5idWlsdGluQXJyYXlQcm90b3R5cGUoKS5pbXAoKSwgYS0+Z2V0TGVuZ3RoKCkpCiB7CiAgICAg
Ly8gQWx3YXlzIHRha2VzIG93bmVyc2hpcCBvZiBjb25jcmV0ZSBhcnJheS4KICAgICBfYXJyYXkg
PSBhOwpAQCAtNDIsMjggKzQzLDM0IEBAIFJ1bnRpbWVBcnJheUltcDo6flJ1bnRpbWVBcnJheUlt
cCgpCiAgICAgZGVsZXRlIF9hcnJheTsKIH0KIAotCi1WYWx1ZSBSdW50aW1lQXJyYXlJbXA6Omdl
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QK
K2Jvb2wgUnVudGltZUFycmF5SW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSAg
ICBpZiAocHJvcGVydHlOYW1lID09IGxlbmd0aFByb3BlcnR5TmFtZSkKLSAgICAgICAgcmV0dXJu
IE51bWJlcihnZXRMZW5ndGgoKSk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBsZW5ndGhQcm9w
ZXJ0eU5hbWUpIHsKKyAgICAgICAgcmVzdWx0ID0gTnVtYmVyKGdldExlbmd0aCgpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIAogICAgIGJvb2wgb2s7CiAgICAgdW5zaWduZWQg
aW5kZXggPSBwcm9wZXJ0eU5hbWUudG9BcnJheUluZGV4KCZvayk7CiAgICAgaWYgKG9rKSB7CiAg
ICAgICAgIGlmIChpbmRleCA+PSBnZXRMZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKLSAgICAgICAgcmV0dXJuIGdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVj
LCBpbmRleCk7CisgICAgICAgICAgICByZXN1bHQgPSAgVW5kZWZpbmVkKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJlc3VsdCA9IGdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVj
LCBpbmRleCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICByZXR1cm4g
T2JqZWN0SW1wOjpnZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gQXJyYXlJbnN0
YW5jZUltcDo6Z2V0T3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCByZXN1bHQpOwogfQog
Ci1WYWx1ZSBSdW50aW1lQXJyYXlJbXA6OmdldChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorYm9vbCBSdW50aW1lQXJyYXlJbXA6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgdW5zaWduZWQgaW5kZXgsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYg
KGluZGV4ID49IGdldExlbmd0aCgpKQotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAg
cmV0dXJuIGdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBpbmRleCk7CisgICAgICAg
IHJlc3VsdCA9IFVuZGVmaW5lZCgpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gZ2V0Q29u
Y3JldGVBcnJheSgpLT52YWx1ZUF0KGV4ZWMsIGluZGV4KTsKKyAgICAKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogdm9pZCBSdW50aW1lQXJyYXlJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0cikK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfYXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJh
eS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBKYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9ydW50aW1lX2FycmF5LmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L3J1bnRpbWVfYXJyYXkuaAkzIEp1bCAyMDA1IDEwOjQ3OjUxIC0wMDAwCTEuOQorKysgSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9hcnJheS5oCTI1IEp1bCAyMDA1IDA2OjA0OjI0IC0w
MDAwCkBAIC0zNyw4ICszNyw4IEBAIHB1YmxpYzoKICAgICBSdW50aW1lQXJyYXlJbXAoRXhlY1N0
YXRlICpleGVjLCBCaW5kaW5nczo6QXJyYXkgKmkpOwogICAgIH5SdW50aW1lQXJyYXlJbXAoKTsK
ICAgICAKLSAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0
YXRlICpleGVjLCB1bnNpZ25lZCBpbmRleCkgY29uc3QgOworICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW5kZXgsIFZhbHVlJiByZXN1bHQpIGNvbnN0IDsK
ICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
Y29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIApJbmRleDogSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhvZC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAtcCAtcjEuMTAgSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvcnVudGltZV9tZXRob2QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9y
dW50aW1lX21ldGhvZC5jcHAJMjkgSmFuIDIwMDUgMDA6MTM6MzUgLTAwMDAJMS4xMAorKysgSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvcnVudGltZV9tZXRob2QuY3BwCTI1IEp1bCAyMDA1IDA2OjA0
OjI0IC0wMDAwCkBAIC00MCwzMCArNDAsMTkgQEAgUnVudGltZU1ldGhvZEltcDo6flJ1bnRpbWVN
ZXRob2RJbXAoKQogewogfQogCi1WYWx1ZSBSdW50aW1lTWV0aG9kSW1wOjpnZXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Citib29sIFJ1bnRp
bWVNZXRob2RJbXA6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewotICAgIC8vIEZpbmQg
dGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBjbG9zZXN0IGNvbnRleHQuCi0gICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBhcmd1bWVudHNQcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgQ29udGV4dEltcCAqY29u
dGV4dCA9IGV4ZWMtPl9jb250ZXh0OwotICAgICAgICB3aGlsZSAoY29udGV4dCkgewotICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmZ1bmN0aW9uKCkgPT0gdGhpcykKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8QWN0aXZhdGlvbkltcCAqPgotICAgICAgICAgICAgICAgICAgICAo
Y29udGV4dC0+YWN0aXZhdGlvbk9iamVjdCgpKS0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC0+Y2FsbGluZ0NvbnRleHQoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIAogICAgIC8vIENvbXB1
dGUgbGVuZ3RoIG9mIHBhcmFtZXRlcnMuCiAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBsZW5ndGhQ
cm9wZXJ0eU5hbWUpIHsKICAgICAgICAgLy8gSWNrISAgVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBv
bmUgbWV0aG9kIHdpdGggdGhpcyBuYW1lLiAgQXJiaXRyYXJpbHkKICAgICAgICAgLy8ganVzdCBw
aWNrIHRoZSBmaXJzdCBtZXRob2QuICBUaGUgZnVuZGFtZW50YWwgcHJvYmxlbSBoZXJlIGlzIHRo
YXQgCiAgICAgICAgIC8vIEphdmFTY3JpcHQgZG9lc24ndCBoYXZlIHRoZSBub3Rpb24gb2YgbWV0
aG9kIG92ZXJsb2FkaW5nIGFuZAogICAgICAgICAvLyBKYXZhIGRvZXMuCi0gICAgICAgIHJldHVy
biBOdW1iZXIoX21ldGhvZExpc3QubWV0aG9kQXQoMCktPm51bVBhcmFtZXRlcnMoKSk7CisgICAg
ICAgIHJlc3VsdCA9IE51bWJlcihfbWV0aG9kTGlzdC5tZXRob2RBdCgwKS0+bnVtUGFyYW1ldGVy
cygpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIEZ1
bmN0aW9uSW1wOjpnZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gRnVuY3Rpb25J
bXA6OmdldE93blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgcmVzdWx0KTsKIH0KIAogYm9v
bCBSdW50aW1lTWV0aG9kSW1wOjppbXBsZW1lbnRzQ2FsbCgpIGNvbnN0CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhvZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21ldGhvZC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEuNCBKYXZhU2NyaXB0Q29yZS9iaW5kaW5n
cy9ydW50aW1lX21ldGhvZC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX21l
dGhvZC5oCTEzIEZlYiAyMDA0IDIyOjM5OjM2IC0wMDAwCTEuNAorKysgSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvcnVudGltZV9tZXRob2QuaAkyNSBKdWwgMjAwNSAwNjowNDoyNCAtMDAwMApAQCAt
MzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+UnVudGltZU1ldGhvZElt
cCgpOwogCi0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWUmIHJlc3VsdCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NhbGwoKSBj
b25zdDsKICAgICB2aXJ0dWFsIFZhbHVlIGNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRo
aXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwpAQCAtNTMsNCArNTMsNCBAQCBwcml2YXRlOgogCiB9
IC8vIG5hbWVzcGFjZSBLSlMKIAotI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQor
I2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX29iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1
bnRpbWVfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNQpkaWZmIC11IC1wIC1y
MS4yNSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX29iamVjdC5jcHAKLS0tIEphdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmNwcAkzIEp1bCAyMDA1IDEwOjQ3OjUx
IC0wMDAwCTEuMjUKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVfb2JqZWN0LmNw
cAkyNSBKdWwgMjAwNSAwNjowNDoyNCAtMDAwMApAQCAtNjAsNDAgKzYwLDM5IEBAIFJ1bnRpbWVP
YmplY3RJbXA6OlJ1bnRpbWVPYmplY3RJbXAoQmluZGkKICAgICBpbnN0YW5jZSA9IGk7CiB9CiAK
LVZhbHVlIFJ1bnRpbWVPYmplY3RJbXA6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK2Jvb2wgUnVudGltZU9iamVjdEltcDo6Z2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgVmFsdWUgcmVzdWx0ID0gVW5kZWZpbmVkKCk7
Ci0KICAgICBpbnN0YW5jZS0+YmVnaW4oKTsKICAgICAKICAgICBDbGFzcyAqYUNsYXNzID0gaW5z
dGFuY2UtPmdldENsYXNzKCk7CiAgICAgCiAgICAgaWYgKGFDbGFzcykgewotICAgICAgICAKICAg
ICAgICAgLy8gU2VlIGlmIHRoZSBpbnN0YW5jZSBoYXZlIGEgZmllbGQgd2l0aCB0aGUgc3BlY2lm
aWVkIG5hbWUuCiAgICAgICAgIEZpZWxkICphRmllbGQgPSBhQ2xhc3MtPmZpZWxkTmFtZWQocHJv
cGVydHlOYW1lLmFzY2lpKCksIGluc3RhbmNlKTsKICAgICAgICAgaWYgKGFGaWVsZCkgewotICAg
ICAgICAgICAgcmVzdWx0ID0gaW5zdGFuY2UtPmdldFZhbHVlT2ZGaWVsZCAoZXhlYywgYUZpZWxk
KTsgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSBpbnN0
YW5jZS0+Z2V0VmFsdWVPZkZpZWxkKGV4ZWMsIGFGaWVsZCk7IAorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBOb3cgY2hlY2sgaWYgYSBt
ZXRob2Qgd2l0aCBzcGVjaWZpZWQgbmFtZSBleGlzdHMsIGlmIHNvIHJldHVybiBhIGZ1bmN0aW9u
IG9iamVjdCBmb3IKICAgICAgICAgICAgIC8vIHRoYXQgbWV0aG9kLgogICAgICAgICAgICAgTWV0
aG9kTGlzdCBtZXRob2RMaXN0ID0gYUNsYXNzLT5tZXRob2RzTmFtZWQocHJvcGVydHlOYW1lLmFz
Y2lpKCksIGluc3RhbmNlKTsKICAgICAgICAgICAgIGlmIChtZXRob2RMaXN0Lmxlbmd0aCgpID4g
MCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IE9iamVjdCAobmV3IFJ1bnRpbWVNZXRob2RJ
bXAoZXhlYywgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gT2JqZWN0KG5ldyBSdW50aW1lTWV0aG9kSW1wKGV4ZWMsIHByb3BlcnR5TmFtZSwgbWV0
aG9kTGlzdCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAJCiAgICAgICAgIGlmIChyZXN1bHQudHlwZSgpID09IFVuZGVmaW5lZFR5cGUp
IHsKICAgICAgICAgICAgIC8vIFRyeSBhIGZhbGxiYWNrIG9iamVjdC4KLSAgICAgICAgICAgIHJl
c3VsdCA9IGFDbGFzcy0+ZmFsbGJhY2tPYmplY3QgKGV4ZWMsIGluc3RhbmNlLCBwcm9wZXJ0eU5h
bWUpOworICAgICAgICAgICAgcmVzdWx0ID0gYUNsYXNzLT5mYWxsYmFja09iamVjdChleGVjLCBp
bnN0YW5jZSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQogICAgICAgICAKICAgICBpbnN0YW5jZS0+ZW5kKCk7CiAKLSAgICAKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIC8vIGRvbid0IGNhbGwgc3VwZXJjbGFzcywgYmVjYXVzZSBydW50
aW1lIG9iamVjdHMgY2FuJ3QgaGF2ZSBjdXN0b20gcHJvcGVydGllcyBvciBhIHByb3RvdHlwZQor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBSdW50aW1lT2JqZWN0SW1wOjpwdXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ydW50aW1lX29iamVjdC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEzCmRpZmYgLXUgLXAgLXIxLjEzIEphdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL3J1bnRpbWVfb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3J1bnRpbWVf
b2JqZWN0LmgJMyBKdWwgMjAwNSAxMDo0Nzo1MSAtMDAwMAkxLjEzCisrKyBKYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9ydW50aW1lX29iamVjdC5oCTI1IEp1bCAyMDA1IDA2OjA0OjI0IC0wMDAwCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZv
KCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KIAotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIgPSBOb25l
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMv
b2JqY19ydW50aW1lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAtcCAtcjEu
MTAgSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUuaAotLS0gSmF2YVNj
cmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUuaAkzIEp1bCAyMDA1IDEwOjQ3OjUy
IC0wMDAwCTEuMTAKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29iamMvb2JqY19ydW50aW1l
LmgJMjUgSnVsIDIwMDUgMDY6MDQ6MjQgLTAwMDAKQEAgLTE2OSw3ICsxNjksNyBAQCBwdWJsaWM6
CiAKICAgICBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9CiAKLSAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9vYmpjL29iamNfcnVudGltZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUubW0sdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtdSAtcCAtcjEuMTYgSmF2YVNjcmlwdENvcmUvYmlu
ZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUubW0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL29i
amMvb2JqY19ydW50aW1lLm1tCTMgSnVsIDIwMDUgMTA6NDc6NTIgLTAwMDAJMS4xNgorKysgSmF2
YVNjcmlwdENvcmUvYmluZGluZ3Mvb2JqYy9vYmpjX3J1bnRpbWUubW0JMjUgSnVsIDIwMDUgMDY6
MDQ6MjQgLTAwMDAKQEAgLTI2MSwxNSArMjYxLDE4IEBAIE9iamNGYWxsYmFja09iamVjdEltcDo6
T2JqY0ZhbGxiYWNrT2JqZWMKICAgICBfaW5zdGFuY2UgPSAwOwogfQogCi1PYmpjRmFsbGJhY2tP
YmplY3RJbXA6Ok9iamNGYWxsYmFja09iamVjdEltcChPYmpjSW5zdGFuY2UgKmksIGNvbnN0IEtK
Uzo6SWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpIDogT2JqZWN0SW1wICgoT2JqZWN0SW1wICopMCkK
K09iamNGYWxsYmFja09iamVjdEltcDo6T2JqY0ZhbGxiYWNrT2JqZWN0SW1wKE9iamNJbnN0YW5j
ZSAqaSwgY29uc3QgS0pTOjpJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKKyAgICA6IE9iamVjdElt
cCAoKE9iamVjdEltcCAqKTApCiB7CiAgICAgX2luc3RhbmNlID0gaTsKICAgICBfaXRlbSA9IHBy
b3BlcnR5TmFtZTsKIH0KIAotVmFsdWUgT2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpnZXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Citib29sIE9i
amNGYWxsYmFja09iamVjdEltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworICAgIC8vIGtlZXAgdGhlIHByb3RvdHlwZSBmcm9tIGdldHRp
bmcgY2FsbGVkIGluc3RlYWQgb2YganVzdCByZXR1cm5pbmcgZmFsc2UKKyAgICByZXN1bHQgPSBV
bmRlZmluZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBPYmpjRmFsbGJhY2tPYmpl
Y3RJbXA6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5jZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfaW5zdGFuY2UuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMwpkaWZmIC11IC1wIC1yMS4xMyBKYXZhU2NyaXB0Q29y
ZS9ranMvYXJyYXlfaW5zdGFuY2UuaAotLS0gSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3Rh
bmNlLmgJMTQgSnVsIDIwMDUgMTg6Mjc6MDEgLTAwMDAJMS4xMworKysgSmF2YVNjcmlwdENvcmUv
a2pzL2FycmF5X2luc3RhbmNlLmgJMjUgSnVsIDIwMDUgMDY6MDQ6MjQgLTAwMDAKQEAgLTMzLDgg
KzMzLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgQXJyYXlJbnN0YW5jZUltcChPYmplY3RJbXAg
KnByb3RvLCBjb25zdCBMaXN0ICZpbml0aWFsVmFsdWVzKTsKICAgICB+QXJyYXlJbnN0YW5jZUlt
cCgpOwogCi0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNT
dGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIGluZGV4LCBWYWx1ZSYgcmVzdWx0KSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7
CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZpcnR1YWwg
Ym9vbCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSkgY29uc3Q7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2Fy
cmF5X29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDUKZGlmZiAtdSAtcCAtcjEu
NDUgSmF2YVNjcmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9hcnJheV9vYmplY3QuY3BwCTIwIEp1bCAyMDA1IDAyOjIzOjU3IC0wMDAwCTEuNDUKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCTI1IEp1bCAyMDA1IDA2OjA0OjI0
IC0wMDAwCkBAIC03MCwzNSArNzAsNDUgQEAgQXJyYXlJbnN0YW5jZUltcDo6fkFycmF5SW5zdGFu
Y2VJbXAoKQogICBmcmVlKHN0b3JhZ2UpOwogfQogCi1WYWx1ZSBBcnJheUluc3RhbmNlSW1wOjpn
ZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0
Citib29sIEFycmF5SW5zdGFuY2VJbXA6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewot
ICBpZiAocHJvcGVydHlOYW1lID09IGxlbmd0aFByb3BlcnR5TmFtZSkKLSAgICByZXR1cm4gTnVt
YmVyKGxlbmd0aCk7CisgIGlmIChwcm9wZXJ0eU5hbWUgPT0gbGVuZ3RoUHJvcGVydHlOYW1lKSB7
CisgICAgcmVzdWx0ID0gTnVtYmVyKGxlbmd0aCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KIAog
ICBib29sIG9rOwogICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgo
Jm9rKTsKICAgaWYgKG9rKSB7CiAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkKLSAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoaW5kZXggPCBzdG9y
YWdlTGVuZ3RoKSB7CiAgICAgICBWYWx1ZUltcCAqdiA9IHN0b3JhZ2VbaW5kZXhdOwotICAgICAg
cmV0dXJuIHYgPyBWYWx1ZSh2KSA6IFVuZGVmaW5lZCgpOworICAgICAgaWYgKCF2IHx8IHYgPT0g
VW5kZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmluZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgcmVzdWx0ID0gVmFsdWUodik7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIH0K
IAotICByZXR1cm4gT2JqZWN0SW1wOjpnZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgcmV0dXJu
IE9iamVjdEltcDo6Z2V0T3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCByZXN1bHQpOwog
fQogCi1WYWx1ZSBBcnJheUluc3RhbmNlSW1wOjpnZXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25l
ZCBpbmRleCkgY29uc3QKK2Jvb2wgQXJyYXlJbnN0YW5jZUltcDo6Z2V0T3duUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbmRleCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKICAg
aWYgKGluZGV4ID49IGxlbmd0aCkKLSAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgcmV0dXJu
IGZhbHNlOwogICBpZiAoaW5kZXggPCBzdG9yYWdlTGVuZ3RoKSB7CiAgICAgVmFsdWVJbXAgKnYg
PSBzdG9yYWdlW2luZGV4XTsKLSAgICByZXR1cm4gdiA/IFZhbHVlKHYpIDogVW5kZWZpbmVkKCk7
CisgICAgaWYgKCF2IHx8IHYgPT0gVW5kZWZpbmVkSW1wOjpzdGF0aWNVbmRlZmluZWQpCisgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBWYWx1ZSh2KTsKKyAgICByZXR1cm4gdHJ1
ZTsKICAgfQogICAKLSAgcmV0dXJuIE9iamVjdEltcDo6Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZy
b20oaW5kZXgpKTsKKyAgcmV0dXJuIE9iamVjdEltcDo6Z2V0T3duUHJvcGVydHkoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShpbmRleCksIHJlc3VsdCk7CiB9CiAKIC8vIFNwZWNpYWwgaW1wbGVtZW50
YXRpb24gb2YgW1tQdXRdXSAtIHNlZSBFQ01BIDE1LjQuNS4xCkBAIC00MTgsMTAgKzQyOCw5IEBA
IEFycmF5UHJvdG90eXBlSW1wOjpBcnJheVByb3RvdHlwZUltcChFeGUKICAgc2V0SW50ZXJuYWxW
YWx1ZShOdWxsKCkpOwogfQogCi1WYWx1ZSBBcnJheVByb3RvdHlwZUltcDo6Z2V0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBBcnJh
eVByb3RvdHlwZUltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0gIC8vZnByaW50
Ziggc3RkZXJyLCAiQXJyYXlQcm90b3R5cGVJbXA6OmdldCglcylcbiIsIHByb3BlcnR5TmFtZS5h
c2NpaSgpICk7Ci0gIHJldHVybiBsb29rdXBHZXRGdW5jdGlvbjxBcnJheVByb3RvRnVuY0ltcCwg
QXJyYXlJbnN0YW5jZUltcD4oIGV4ZWMsIHByb3BlcnR5TmFtZSwgJmFycmF5VGFibGUsIHRoaXMg
KTsKKyAgcmV0dXJuIGxvb2t1cEdldE93bkZ1bmN0aW9uPEFycmF5UHJvdG9GdW5jSW1wLCBBcnJh
eUluc3RhbmNlSW1wPihleGVjLCBwcm9wZXJ0eU5hbWUsICZhcnJheVRhYmxlLCB0aGlzLCByZXN1
bHQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXlQcm90b0Z1
bmNJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDQ0LDYgKzQ1Myw3IEBAIGJv
b2wgQXJyYXlQcm90b0Z1bmNJbXA6OmltcGxlbWVudHNDYWxsKCkKIFZhbHVlIEFycmF5UHJvdG9G
dW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKQogewogICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gdGhpc09iai5nZXQoZXhlYyxsZW5n
dGhQcm9wZXJ0eU5hbWUpLnRvVUludDMyKGV4ZWMpOworICBPYmplY3RJbXAgKnRoaXNJbXAgPSB0
aGlzT2JqLmltcCgpOwogCiAgIFZhbHVlIHJlc3VsdDsKICAgCkBAIC01MDEsOCArNTExLDkgQEAg
VmFsdWUgQXJyYXlQcm90b0Z1bmNJbXA6OmNhbGwoRXhlY1N0YXRlIAogICAgICAgICAvLyBieSBj
aGVja2luZyBmb3IgbiAhPSAwLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsgaWYgdGhpc09iaiBpcyBh
biBlbXB0eSBhcnJheS4KICAgICAgICAgbGVuZ3RoID0gY3VyT2JqLmdldChleGVjLGxlbmd0aFBy
b3BlcnR5TmFtZSkudG9VSW50MzIoZXhlYyk7CiAgICAgICAgIHdoaWxlIChrIDwgbGVuZ3RoKSB7
Ci0gICAgICAgICAgaWYgKGN1ck9iai5oYXNQcm9wZXJ0eShleGVjLGspKQotICAgICAgICAgICAg
YXJyLnB1dChleGVjLCBuLCBjdXJPYmouZ2V0KGV4ZWMsIGspKTsKKyAgICAgICAgICBWYWx1ZSB2
OworICAgICAgICAgIGlmIChjdXJPYmouaW1wKCktPmdldFByb3BlcnR5KGV4ZWMsIGssIHYpKQor
ICAgICAgICAgICAgYXJyLnB1dChleGVjLCBuLCB2KTsKICAgICAgICAgICBuKys7CiAgICAgICAg
ICAgaysrOwogICAgICAgICB9CkBAIC01NDQsMjYgKzU1NSwyMCBAQCBWYWx1ZSBBcnJheVByb3Rv
RnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgCiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBrID0gMDsg
ayA8IG1pZGRsZTsgaysrKSB7CiAgICAgICB1bnNpZ25lZCBsazEgPSBsZW5ndGggLSBrIC0gMTsK
LSAgICAgIFZhbHVlIG9iaiA9IHRoaXNPYmouZ2V0KGV4ZWMsayk7Ci0gICAgICBWYWx1ZSBvYmoy
ID0gdGhpc09iai5nZXQoZXhlYyxsazEpOwotICAgICAgaWYgKHRoaXNPYmouaGFzUHJvcGVydHko
ZXhlYyxsazEpKSB7Ci0gICAgICAgIGlmICh0aGlzT2JqLmhhc1Byb3BlcnR5KGV4ZWMsaykpIHsK
LSAgICAgICAgICB0aGlzT2JqLnB1dChleGVjLCBrLCBvYmoyKTsKLSAgICAgICAgICB0aGlzT2Jq
LnB1dChleGVjLCBsazEsIG9iaik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhpc09i
ai5wdXQoZXhlYywgaywgb2JqMik7Ci0gICAgICAgICAgdGhpc09iai5kZWxldGVQcm9wZXJ0eShl
eGVjLCBsazEpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAodGhpc09i
ai5oYXNQcm9wZXJ0eShleGVjLCBrKSkgewotICAgICAgICAgIHRoaXNPYmouZGVsZXRlUHJvcGVy
dHkoZXhlYywgayk7Ci0gICAgICAgICAgdGhpc09iai5wdXQoZXhlYywgbGsxLCBvYmopOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIHdoeSBkZWxldGUgc29tZXRoaW5nIHRoYXQncyBu
b3QgdGhlcmUgPyBTdHJhbmdlLgotICAgICAgICAgIHRoaXNPYmouZGVsZXRlUHJvcGVydHkoZXhl
Yywgayk7Ci0gICAgICAgICAgdGhpc09iai5kZWxldGVQcm9wZXJ0eShleGVjLCBsazEpOwotICAg
ICAgICB9Ci0gICAgICB9CisgICAgICBWYWx1ZSBvYmo7CisgICAgICBWYWx1ZSBvYmoyOworICAg
ICAgYm9vbCBoYXMyID0gdGhpc0ltcC0+Z2V0UHJvcGVydHkoZXhlYywgbGsxLCBvYmoyKTsKKyAg
ICAgIGJvb2wgaGFzMSA9IHRoaXNJbXAtPmdldFByb3BlcnR5KGV4ZWMsIGssIG9iaik7CisKKyAg
ICAgIGlmIChoYXMyKSAKKyAgICAgICAgdGhpc09iai5wdXQoZXhlYywgaywgb2JqMik7CisgICAg
ICBlbHNlCisgICAgICAgIHRoaXNPYmouZGVsZXRlUHJvcGVydHkoZXhlYywgayk7CisKKyAgICAg
IGlmIChoYXMxKQorICAgICAgICB0aGlzT2JqLnB1dChleGVjLCBsazEsIG9iaik7CisgICAgICBl
bHNlCisgICAgICAgIHRoaXNPYmouZGVsZXRlUHJvcGVydHkoZXhlYywgbGsxKTsKICAgICB9CiAg
ICAgcmVzdWx0ID0gdGhpc09iajsKICAgICBicmVhazsKQEAgLTU3NSwxMCArNTgwLDEwIEBAIFZh
bHVlIEFycmF5UHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAKICAgICB9IGVsc2UgewogICAg
ICAgcmVzdWx0ID0gdGhpc09iai5nZXQoZXhlYywgMCk7CiAgICAgICBmb3IodW5zaWduZWQgaW50
IGsgPSAxOyBrIDwgbGVuZ3RoOyBrKyspIHsKLSAgICAgICAgaWYgKHRoaXNPYmouaGFzUHJvcGVy
dHkoZXhlYywgaykpIHsKLSAgICAgICAgICBWYWx1ZSBvYmogPSB0aGlzT2JqLmdldChleGVjLCBr
KTsKKyAgICAgICAgVmFsdWUgb2JqOworICAgICAgICBpZiAodGhpc0ltcC0+Z2V0UHJvcGVydHko
ZXhlYywgaywgb2JqKSkKICAgICAgICAgICB0aGlzT2JqLnB1dChleGVjLCBrLTEsIG9iaik7Ci0g
ICAgICAgIH0gZWxzZQorICAgICAgICBlbHNlCiAgICAgICAgICAgdGhpc09iai5kZWxldGVQcm9w
ZXJ0eShleGVjLCBrLTEpOwogICAgICAgfQogICAgICAgdGhpc09iai5kZWxldGVQcm9wZXJ0eShl
eGVjLCBsZW5ndGggLSAxKTsKQEAgLTYyMiwxMCArNjI3LDkgQEAgVmFsdWUgQXJyYXlQcm90b0Z1
bmNJbXA6OmNhbGwoRXhlY1N0YXRlIAogICAgIGludCBiID0gc3RhdGljX2Nhc3Q8aW50PihiZWdp
bik7CiAgICAgaW50IGUgPSBzdGF0aWNfY2FzdDxpbnQ+KGVuZCk7CiAgICAgZm9yKGludCBrID0g
YjsgayA8IGU7IGsrKywgbisrKSB7Ci0gICAgICBpZiAodGhpc09iai5oYXNQcm9wZXJ0eShleGVj
LCBrKSkgewotICAgICAgICBWYWx1ZSBvYmogPSB0aGlzT2JqLmdldChleGVjLCBrKTsKKyAgICAg
IFZhbHVlIG9iajsKKyAgICAgIGlmICh0aGlzSW1wLT5nZXRQcm9wZXJ0eShleGVjLCBrLCBvYmop
KQogICAgICAgICByZXNPYmoucHV0KGV4ZWMsIG4sIG9iaik7Ci0gICAgICB9CiAgICAgfQogICAg
IHJlc09iai5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1lLCBOdW1iZXIobiksIERvbnRFbnVt
IHwgRG9udERlbGV0ZSk7CiAgICAgYnJlYWs7CkBAIC02NDUsMTEgKzY0OSwxMSBAQCBWYWx1ZSBB
cnJheVByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgCiAgICAgICAgICAgdXNlU29ydEZ1bmN0
aW9uID0gZmFsc2U7CiAgICAgICB9CiAgICAgCi0gICAgaWYgKHRoaXNPYmouaW1wKCktPmNsYXNz
SW5mbygpID09ICZBcnJheUluc3RhbmNlSW1wOjppbmZvKSB7CisgICAgaWYgKHRoaXNJbXAtPmNs
YXNzSW5mbygpID09ICZBcnJheUluc3RhbmNlSW1wOjppbmZvKSB7CiAgICAgICBpZiAodXNlU29y
dEZ1bmN0aW9uKQotICAgICAgICAoKEFycmF5SW5zdGFuY2VJbXAgKil0aGlzT2JqLmltcCgpKS0+
c29ydChleGVjLCBzb3J0RnVuY3Rpb24pOworICAgICAgICAoKEFycmF5SW5zdGFuY2VJbXAgKil0
aGlzSW1wKS0+c29ydChleGVjLCBzb3J0RnVuY3Rpb24pOwogICAgICAgZWxzZQotICAgICAgICAo
KEFycmF5SW5zdGFuY2VJbXAgKil0aGlzT2JqLmltcCgpKS0+c29ydChleGVjKTsKKyAgICAgICAg
KChBcnJheUluc3RhbmNlSW1wICopdGhpc0ltcCktPnNvcnQoZXhlYyk7CiAgICAgICByZXN1bHQg
PSB0aGlzT2JqOwogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNzE4LDEwICs3MjIsOSBAQCBWYWx1
ZSBBcnJheVByb3RvRnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgCiAKICAgICAvL3ByaW50ZiggIlNw
bGljaW5nIGZyb20gJWQsIGRlbGV0ZUNvdW50PSVkIFxuIiwgYmVnaW4sIGRlbGV0ZUNvdW50ICk7
CiAgICAgZm9yKHVuc2lnbmVkIGludCBrID0gMDsgayA8IGRlbGV0ZUNvdW50OyBrKyspIHsKLSAg
ICAgIGlmICh0aGlzT2JqLmhhc1Byb3BlcnR5KGV4ZWMsaytiZWdpbikpIHsKLSAgICAgICAgVmFs
dWUgb2JqID0gdGhpc09iai5nZXQoZXhlYywgaytiZWdpbik7CisgICAgICBWYWx1ZSBvYmo7Cisg
ICAgICBpZiAodGhpc0ltcC0+Z2V0UHJvcGVydHkoZXhlYywgaytiZWdpbiwgb2JqKSkKICAgICAg
ICAgcmVzT2JqLnB1dChleGVjLCBrLCBvYmopOwotICAgICAgfQogICAgIH0KICAgICByZXNPYmou
cHV0KGV4ZWMsIGxlbmd0aFByb3BlcnR5TmFtZSwgTnVtYmVyKGRlbGV0ZUNvdW50KSwgRG9udEVu
dW0gfCBEb250RGVsZXRlKTsKIApAQCAtNzMyLDEwICs3MzUsOSBAQCBWYWx1ZSBBcnJheVByb3Rv
RnVuY0ltcDo6Y2FsbChFeGVjU3RhdGUgCiAgICAgICB7CiAgICAgICAgIGZvciAoIHVuc2lnbmVk
IGludCBrID0gYmVnaW47IGsgPCBsZW5ndGggLSBkZWxldGVDb3VudDsgKytrICkKICAgICAgICAg
ewotICAgICAgICAgIGlmICh0aGlzT2JqLmhhc1Byb3BlcnR5KGV4ZWMsaytkZWxldGVDb3VudCkp
IHsKLSAgICAgICAgICAgIFZhbHVlIG9iaiA9IHRoaXNPYmouZ2V0KGV4ZWMsIGsrZGVsZXRlQ291
bnQpOworICAgICAgICAgIFZhbHVlIG9iajsKKyAgICAgICAgICBpZiAodGhpc0ltcC0+Z2V0UHJv
cGVydHkoZXhlYywgaytkZWxldGVDb3VudCwgb2JqKSkKICAgICAgICAgICAgIHRoaXNPYmoucHV0
KGV4ZWMsIGsrYWRkaXRpb25hbEFyZ3MsIG9iaik7Ci0gICAgICAgICAgfQogICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHRoaXNPYmouZGVsZXRlUHJvcGVydHkoZXhlYywgaythZGRpdGlvbmFs
QXJncyk7CiAgICAgICAgIH0KQEAgLTc0NiwxMCArNzQ4LDkgQEAgVmFsdWUgQXJyYXlQcm90b0Z1
bmNJbXA6OmNhbGwoRXhlY1N0YXRlIAogICAgICAgewogICAgICAgICBmb3IgKCB1bnNpZ25lZCBp
bnQgayA9IGxlbmd0aCAtIGRlbGV0ZUNvdW50OyAoaW50KWsgPiBiZWdpbjsgLS1rICkKICAgICAg
ICAgewotICAgICAgICAgIGlmICh0aGlzT2JqLmhhc1Byb3BlcnR5KGV4ZWMsaytkZWxldGVDb3Vu
dC0xKSkgewotICAgICAgICAgICAgVmFsdWUgb2JqID0gdGhpc09iai5nZXQoZXhlYywgaytkZWxl
dGVDb3VudC0xKTsKLSAgICAgICAgICAgIHRoaXNPYmoucHV0KGV4ZWMsIGsrYWRkaXRpb25hbEFy
Z3MtMSwgb2JqKTsKLSAgICAgICAgICB9CisgICAgICAgICAgVmFsdWUgb2JqOworICAgICAgICAg
IGlmICh0aGlzSW1wLT5nZXRQcm9wZXJ0eShleGVjLCBrICsgZGVsZXRlQ291bnQgLSAxLCBvYmop
KQorICAgICAgICAgICAgdGhpc09iai5wdXQoZXhlYywgayArIGFkZGl0aW9uYWxBcmdzIC0gMSwg
b2JqKTsKICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzT2JqLmRlbGV0ZVByb3BlcnR5
KGV4ZWMsIGsrYWRkaXRpb25hbEFyZ3MtMSk7CiAgICAgICAgIH0KQEAgLTc2NiwxMiArNzY3LDEx
IEBAIFZhbHVlIEFycmF5UHJvdG9GdW5jSW1wOjpjYWxsKEV4ZWNTdGF0ZSAKICAgICB1bnNpZ25l
ZCBpbnQgbnJBcmdzID0gYXJncy5zaXplKCk7CiAgICAgZm9yICggdW5zaWduZWQgaW50IGsgPSBs
ZW5ndGg7IGsgPiAwOyAtLWsgKQogICAgIHsKLSAgICAgIGlmICh0aGlzT2JqLmhhc1Byb3BlcnR5
KGV4ZWMsay0xKSkgewotICAgICAgICBWYWx1ZSBvYmogPSB0aGlzT2JqLmdldChleGVjLCBrLTEp
OworICAgICAgVmFsdWUgb2JqOworICAgICAgaWYgKHRoaXNJbXAtPmdldFByb3BlcnR5KGV4ZWMs
IGsgLSAxLCBvYmopKQogICAgICAgICB0aGlzT2JqLnB1dChleGVjLCBrK25yQXJncy0xLCBvYmop
OwotICAgICAgfSBlbHNlIHsKKyAgICAgIGVsc2UKICAgICAgICAgdGhpc09iai5kZWxldGVQcm9w
ZXJ0eShleGVjLCBrK25yQXJncy0xKTsKLSAgICAgIH0KICAgICB9CiAgICAgZm9yICggdW5zaWdu
ZWQgaW50IGsgPSAwOyBrIDwgbnJBcmdzOyArK2sgKQogICAgICAgdGhpc09iai5wdXQoZXhlYywg
aywgYXJnc1trXSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmpl
Y3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMwpkaWZmIC11IC1wIC1yMS4xMyBKYXZhU2Ny
aXB0Q29yZS9ranMvYXJyYXlfb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9v
YmplY3QuaAkxNCBKdWwgMjAwNSAxODoyNzowMSAtMDAwMAkxLjEzCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvYXJyYXlfb2JqZWN0LmgJMjUgSnVsIDIwMDUgMDY6MDQ6MjQgLTAwMDAKQEAgLTMxLDcg
KzMxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBBcnJheVByb3RvdHlwZUlt
cChFeGVjU3RhdGUgKmV4ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0UHJvdG90eXBl
SW1wICpvYmpQcm90byk7Ci0gICAgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcCkgY29uc3Q7CisgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7
CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICB9OwpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS40NApkaWZmIC11IC1wIC1yMS40NCBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9v
YmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCTIzIEp1bCAy
MDA1IDAwOjUwOjM2IC0wMDAwCTEuNDQKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVj
dC5jcHAJMjUgSnVsIDIwMDUgMDY6MDQ6MjUgLTAwMDAKQEAgLTQ2Niw5ICs0NjYsOSBAQCBEYXRl
UHJvdG90eXBlSW1wOjpEYXRlUHJvdG90eXBlSW1wKEV4ZWNTCiAgIC8vIFRoZSBjb25zdHJ1Y3Rv
ciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBEYXRlT2JqZWN0SW1wIGhhcyBiZWVuIGJ1aWx0
CiB9CiAKLVZhbHVlIERhdGVQcm90b3R5cGVJbXA6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK2Jvb2wgRGF0ZVByb3RvdHlwZUltcDo6
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0gIHJldHVybiBsb29rdXBHZXRGdW5jdGlv
bjxEYXRlUHJvdG9GdW5jSW1wLCBPYmplY3RJbXA+KCBleGVjLCBwcm9wZXJ0eU5hbWUsICZkYXRl
VGFibGUsIHRoaXMgKTsKKyAgcmV0dXJuIGxvb2t1cEdldE93bkZ1bmN0aW9uPERhdGVQcm90b0Z1
bmNJbXAsIE9iamVjdEltcD4oZXhlYywgcHJvcGVydHlOYW1lLCAmZGF0ZVRhYmxlLCB0aGlzLCBy
ZXN1bHQpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGF0ZVByb3Rv
RnVuY0ltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL2RhdGVfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFT
Y3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRp
ZmYgLXUgLXAgLXIxLjExIEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5oCi0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuaAkxNCBKdWwgMjAwNSAxODoyNzowMiAtMDAwMAkx
LjExCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuaAkyNSBKdWwgMjAwNSAwNjow
NDoyNSAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgRGF0
ZVByb3RvdHlwZUltcCA6IHB1YmxpYyBEYXRlSW5zdGFuY2VJbXAgewogICBwdWJsaWM6CiAgICAg
RGF0ZVByb3RvdHlwZUltcChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdFByb3RvdHlwZUltcCAqb2Jq
ZWN0UHJvdG8pOwotICAgIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnApIGNvbnN0OworICAgIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIGNv
bnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgIH07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvZnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0
Q29yZS9ranMvZnVuY3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ4CmRpZmYgLXUg
LXAgLXIxLjQ4IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5jcHAKLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9mdW5jdGlvbi5jcHAJMTQgSnVsIDIwMDUgMTg6Mjc6MDIgLTAwMDAJMS40OAorKysg
SmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmNwcAkyNSBKdWwgMjAwNSAwNjowNDoyNSAtMDAw
MApAQCAtMjAyLDE4ICsyMDIsMjAgQEAgdm9pZCBGdW5jdGlvbkltcDo6cHJvY2Vzc1ZhckRlY2xz
KEV4ZWNTdAogewogfQogCi1WYWx1ZSBGdW5jdGlvbkltcDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBGdW5jdGlvbkltcDo6
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7CiAgICAgLy8gRmluZCB0aGUgYXJndW1lbnRz
IGZyb20gdGhlIGNsb3Nlc3QgY29udGV4dC4KICAgICBpZiAocHJvcGVydHlOYW1lID09IGFyZ3Vt
ZW50c1Byb3BlcnR5TmFtZSkgewogICAgICAgICBDb250ZXh0SW1wICpjb250ZXh0ID0gZXhlYy0+
X2NvbnRleHQ7CiAgICAgICAgIHdoaWxlIChjb250ZXh0KSB7Ci0gICAgICAgICAgICBpZiAoY29u
dGV4dC0+ZnVuY3Rpb24oKSA9PSB0aGlzKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxBY3RpdmF0aW9uSW1wICo+Ci0gICAgICAgICAgICAgICAgICAgIChjb250ZXh0LT5hY3Rp
dmF0aW9uT2JqZWN0KCkpLT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIGNv
bnRleHQgPSBjb250ZXh0LT5jYWxsaW5nQ29udGV4dCgpOworICAgICAgICAgIGlmIChjb250ZXh0
LT5mdW5jdGlvbigpID09IHRoaXMpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0
PEFjdGl2YXRpb25JbXAgKj4oY29udGV4dC0+YWN0aXZhdGlvbk9iamVjdCgpKS0+Z2V0KGV4ZWMs
IHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICB9Cisg
ICAgICAgICAgY29udGV4dCA9IGNvbnRleHQtPmNhbGxpbmdDb250ZXh0KCk7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIE51bGwoKTsKKyAgICAgICAgcmVzdWx0ID0gTnVsbCgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgLy8gQ29tcHV0ZSBsZW5ndGggb2YgcGFy
YW1ldGVycy4KQEAgLTIyNCwxMCArMjI2LDExIEBAIFZhbHVlIEZ1bmN0aW9uSW1wOjpnZXQoRXhl
Y1N0YXRlICpleGVjLCAKICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgICAgICBwID0gcC0+
bmV4dDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTnVtYmVyKGNvdW50KTsKKyAgICAgICAg
cmVzdWx0ID0gTnVtYmVyKGNvdW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IAotICAgIHJldHVybiBJbnRlcm5hbEZ1bmN0aW9uSW1wOjpnZXQoZXhlYywgcHJvcGVydHlOYW1l
KTsKKyAgICByZXR1cm4gSW50ZXJuYWxGdW5jdGlvbkltcDo6Z2V0T3duUHJvcGVydHkoZXhlYywg
cHJvcGVydHlOYW1lLCByZXN1bHQpOwogfQogCiB2b2lkIEZ1bmN0aW9uSW1wOjpwdXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlICZ2
YWx1ZSwgaW50IGF0dHIpCkBAIC00NDAsMTMgKzQ0MywxNCBAQCB2b2lkIEFyZ3VtZW50c0ltcDo6
bWFyaygpIAogICAgIF9hY3RpdmF0aW9uT2JqZWN0LT5tYXJrKCk7CiB9CiAKLVZhbHVlIEFyZ3Vt
ZW50c0ltcDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlO
YW1lKSBjb25zdAorYm9vbCBBcmd1bWVudHNJbXA6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25z
dAogewogICBpZiAoaW5kZXhUb05hbWVNYXAuaXNNYXBwZWQocHJvcGVydHlOYW1lKSkgewotICAg
IHJldHVybiBfYWN0aXZhdGlvbk9iamVjdC0+Z2V0KGV4ZWMsIGluZGV4VG9OYW1lTWFwW3Byb3Bl
cnR5TmFtZV0pOwotICB9IGVsc2UgewotICAgIHJldHVybiBPYmplY3RJbXA6OmdldChleGVjLCBw
cm9wZXJ0eU5hbWUpOworICAgIHJlc3VsdCA9IF9hY3RpdmF0aW9uT2JqZWN0LT5nZXQoZXhlYywg
aW5kZXhUb05hbWVNYXBbcHJvcGVydHlOYW1lXSk7CisgICAgcmV0dXJuIHRydWU7CiAgIH0KKwor
ICByZXR1cm4gT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHJl
c3VsdCk7CiB9CiAKIHZvaWQgQXJndW1lbnRzSW1wOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlICZ2YWx1ZSwgaW50IGF0dHIp
CkBAIC00ODgsMjAgKzQ5MiwyMiBAQCBBY3RpdmF0aW9uSW1wOjpBY3RpdmF0aW9uSW1wKEZ1bmN0
aW9uSW1wCiAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIHN1cHBvcnQgZW51bWVyYXRpbmcgdGhl
IGFyZ3VtZW50cyBwcm9wZXJ0eT8KIH0KIAotVmFsdWUgQWN0aXZhdGlvbkltcDo6Z2V0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBB
Y3RpdmF0aW9uSW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSAgICBpZiAocHJv
cGVydHlOYW1lID09IGFyZ3VtZW50c1Byb3BlcnR5TmFtZSkgewotICAgICAgICAvLyBjaGVjayBm
b3IgbG9jYWxseSBkZWNsYXJlZCBhcmd1bWVudHMgcHJvcGVydHkKLSAgICAgICAgVmFsdWVJbXAg
KnYgPSBnZXREaXJlY3QocHJvcGVydHlOYW1lKTsKLSAgICAgICAgaWYgKHYpCi0gICAgICAgICAg
ICByZXR1cm4gVmFsdWUodik7CisgICAgLy8gZG8gdGhpcyBmaXJzdCBzbyBwcm9wZXJ0eSBtYXAg
YXJndW1lbnRzIHByb3BlcnR5IHdpbnMgb3ZlciB0aGUgYmVsb3cKKyAgICBpZiAoT2JqZWN0SW1w
OjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHJlc3VsdCkpCisgICAgICAgIHJl
dHVybiB0cnVlOwogCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBhcmd1bWVudHNQcm9wZXJ0eU5h
bWUpIHsKICAgICAgICAgLy8gZGVmYXVsdDogcmV0dXJuIGJ1aWx0aW4gYXJndW1lbnRzIGFycmF5
CiAgICAgICAgIGlmICghX2FyZ3VtZW50c09iamVjdCkKLSAgICAgICAgICAgICAgICBjcmVhdGVB
cmd1bWVudHNPYmplY3QoZXhlYyk7Ci0gICAgICAgIHJldHVybiBWYWx1ZShfYXJndW1lbnRzT2Jq
ZWN0KTsKKyAgICAgICAgICAgIGNyZWF0ZUFyZ3VtZW50c09iamVjdChleGVjKTsKKworICAgICAg
ICByZXN1bHQgPSBWYWx1ZShfYXJndW1lbnRzT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQotICAgIHJldHVybiBPYmplY3RJbXA6OmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwor
CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEFjdGl2YXRpb25JbXA6Omhhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25z
dApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlvbi5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjI2CmRpZmYgLXUgLXAgLXIxLjI2IEphdmFTY3JpcHRDb3JlL2tqcy9mdW5jdGlv
bi5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaAkxNCBKdWwgMjAwNSAxODoyNzow
MiAtMDAwMAkxLjI2CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvZnVuY3Rpb24uaAkyNSBKdWwgMjAw
NSAwNjowNDoyNSAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBG
dW5jdGlvbkltcChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJm4gPSBJZGVudGlm
aWVyOjpudWxsKCkpOwogICAgIHZpcnR1YWwgfkZ1bmN0aW9uSW1wKCk7CiAKLSAgICB2aXJ0dWFs
IFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsK
ICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAg
dmlydHVhbCBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpOwpAQCAt
MTA4LDcgKzEwOCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgQXJndW1lbnRz
SW1wKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rpb25JbXAgKmZ1bmMsIGNvbnN0IExpc3QgJmFyZ3Ms
IEFjdGl2YXRpb25JbXAgKmFjdCk7CiAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKLSAgICB2aXJ0
dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciAmcHJvcGVydHlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmFsdWUgJnZhbHVl
LCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25Qcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CkBAIC0x
MjQsNyArMTI0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBBY3RpdmF0aW9u
SW1wKEZ1bmN0aW9uSW1wICpmdW5jdGlvbiwgY29uc3QgTGlzdCAmYXJndW1lbnRzKTsKIAotICAg
IHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJv
cGVydHlOYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtdSAtcCAtcjEuMTQgSmF2YVNjcmlwdENvcmUva2pzL2xv
b2t1cC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmgJMTkgSnVsIDIwMDUgMjE6MTY6
NDkgLTAwMDAJMS4xNAorKysgSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCTI1IEp1bCAyMDA1
IDA2OjA0OjI1IC0wMDAwCkBAIC0xNjQsMTggKzE2NCwyMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICogQHBhcmFtIHRoaXNPYmogInRoaXMiCiAgICAqLwogICB0ZW1wbGF0ZSA8Y2xhc3MgRnVuY0lt
cCwgY2xhc3MgVGhpc0ltcCwgY2xhc3MgUGFyZW50SW1wPgotICBpbmxpbmUgVmFsdWUgbG9va3Vw
R2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUsIGNvbnN0IFRoaXNJ
bXAqIHRoaXNPYmopCisgIGlubGluZSBib29sIGxvb2t1cEdldE93blByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlLCBjb25zdCBUaGlzSW1w
KiB0aGlzT2JqLCBWYWx1ZSYgcmVzdWx0KQogICB7CiAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRy
eSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwogCiAgICAgaWYgKCFl
bnRyeSkgLy8gbm90IGZvdW5kLCBmb3J3YXJkIHRvIHBhcmVudAotICAgICAgcmV0dXJuIHRoaXNP
YmotPlBhcmVudEltcDo6Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICByZXR1cm4gdGhp
c09iai0+UGFyZW50SW1wOjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHJlc3Vs
dCk7CiAKLSAgICAvL2ZwcmludGYoc3RkZXJyLCAibG9va3VwR2V0OiBmb3VuZCB2YWx1ZT0lZCBh
dHRyPSVkXG4iLCBlbnRyeS0+dmFsdWUsIGVudHJ5LT5hdHRyKTsKICAgICBpZiAoZW50cnktPmF0
dHIgJiBGdW5jdGlvbikKLSAgICAgIHJldHVybiBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPEZ1bmNJ
bXA+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpc09iaiwgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFy
YW1zLCBlbnRyeS0+YXR0cik7Ci0gICAgcmV0dXJuIHRoaXNPYmotPmdldFZhbHVlUHJvcGVydHko
ZXhlYywgZW50cnktPnZhbHVlKTsKKyAgICAgIHJlc3VsdCA9IGxvb2t1cE9yQ3JlYXRlRnVuY3Rp
b248RnVuY0ltcD4oZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzT2JqLCBlbnRyeS0+dmFsdWUsIGVu
dHJ5LT5wYXJhbXMsIGVudHJ5LT5hdHRyKTsKKyAgICBlbHNlIAorICAgICAgcmVzdWx0ID0gdGhp
c09iai0+Z2V0VmFsdWVQcm9wZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOworCisgICAgcmV0dXJu
IHRydWU7CiAgIH0KIAogICAvKioKQEAgLTE4MywxOSArMTg1LDE4IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgKiBVc2luZyB0aGlzIGluc3RlYWQgb2YgbG9va3VwR2V0IHByZXZlbnRzICd0aGlzJyBm
cm9tIGltcGxlbWVudGluZyBhIGR1bW15IGdldFZhbHVlUHJvcGVydHkuCiAgICAqLwogICB0ZW1w
bGF0ZSA8Y2xhc3MgRnVuY0ltcCwgY2xhc3MgUGFyZW50SW1wPgotICBpbmxpbmUgVmFsdWUgbG9v
a3VwR2V0RnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwg
Y29uc3QgT2JqZWN0SW1wKiB0aGlzT2JqKQorICBpbmxpbmUgYm9vbCBsb29rdXBHZXRPd25GdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwg
Y29uc3QgT2JqZWN0SW1wKiB0aGlzT2JqLCBWYWx1ZSYgcmVzdWx0KQogICB7CiAgICAgY29uc3Qg
SGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUp
OwogCiAgICAgaWYgKCFlbnRyeSkgLy8gbm90IGZvdW5kLCBmb3J3YXJkIHRvIHBhcmVudAotICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFBhcmVudEltcCAqPih0aGlzT2JqKS0+UGFyZW50
SW1wOjpnZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBQYXJlbnRJbXAgKj4odGhpc09iaiktPlBhcmVudEltcDo6Z2V0T3duUHJvcGVydHkoZXhl
YywgcHJvcGVydHlOYW1lLCByZXN1bHQpOwogCi0gICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rp
b24pCi0gICAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVGdW5jdGlvbjxGdW5jSW1wPihleGVjLCBw
cm9wZXJ0eU5hbWUsIHRoaXNPYmosIGVudHJ5LT52YWx1ZSwgZW50cnktPnBhcmFtcywgZW50cnkt
PmF0dHIpOworICAgIGFzc2VydChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKTsKIAotICAgIGZwcmlu
dGYoc3RkZXJyLCAiRnVuY3Rpb24gYml0IG5vdCBzZXQhIFNob3VsZG4ndCBoYXBwZW4gaW4gbG9v
a3VwR2V0RnVuY3Rpb24hXG4iICk7Ci0gICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgIHJlc3Vs
dCA9IGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248RnVuY0ltcD4oZXhlYywgcHJvcGVydHlOYW1lLCB0
aGlzT2JqLCBlbnRyeS0+dmFsdWUsIGVudHJ5LT5wYXJhbXMsIGVudHJ5LT5hdHRyKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8qKgpAQCAtMjAzLDE3ICsyMDQsMTggQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAqIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiBsb29rdXBHZXQgcmVtb3ZlcyB0aGUg
bmVlZCBmb3IgYSBGdW5jSW1wIGNsYXNzLgogICAgKi8KICAgdGVtcGxhdGUgPGNsYXNzIFRoaXNJ
bXAsIGNsYXNzIFBhcmVudEltcD4KLSAgaW5saW5lIFZhbHVlIGxvb2t1cEdldFZhbHVlKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSwgY29uc3QgVGhpc0ltcCogdGhp
c09iaikKKyAgaW5saW5lIGJvb2wgbG9va3VwR2V0T3duVmFsdWUoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUsIGNvbnN0IFRoaXNJbXAqIHRoaXNPYmosIFZh
bHVlJiByZXN1bHQpCiAgIHsKICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpm
aW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7CiAKICAgICBpZiAoIWVudHJ5KSAvLyBub3Qg
Zm91bmQsIGZvcndhcmQgdG8gcGFyZW50Ci0gICAgICByZXR1cm4gdGhpc09iai0+UGFyZW50SW1w
OjpnZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgIHJldHVybiB0aGlzT2JqLT5QYXJlbnRJ
bXA6OmdldE93blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgcmVzdWx0KTsKIAotICAgIGlm
IChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKQotICAgICAgZnByaW50ZihzdGRlcnIsICJGdW5jdGlv
biBiaXQgc2V0ISBTaG91bGRuJ3QgaGFwcGVuIGluIGxvb2t1cEdldFZhbHVlISBwcm9wZXJ0eU5h
bWUgd2FzICVzXG4iLCBwcm9wZXJ0eU5hbWUuYXNjaWkoKSApOwotICAgIHJldHVybiB0aGlzT2Jq
LT5nZXRWYWx1ZVByb3BlcnR5KGV4ZWMsIGVudHJ5LT52YWx1ZSk7CisgICAgYXNzZXJ0KCFlbnRy
eS0+YXR0ciAmIEZ1bmN0aW9uKTsKKworICAgIHJlc3VsdCA9IHRoaXNPYmotPmdldFZhbHVlUHJv
cGVydHkoZXhlYywgZW50cnktPnZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKICAgfQogCiAgIC8q
KgpAQCAtMjkzLDE2ICsyOTUsMTUgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzogXAogICAg
IHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5m
bzsgfSBcCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOyBcCi0gICAgVmFsdWUgZ2V0
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsg
XAorICAgIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OyBcCiAgICAgYm9vbCBoYXNP
d25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSkgY29uc3Q7IFwKICAgfTsgXAogICBjb25zdCBDbGFzc0luZm8gQ2xhc3NQcm90bzo6aW5mbyA9
IHsgQ2xhc3NOYW1lLCAwLCAmQ2xhc3NQcm90byMjVGFibGUsIDAgfTsKIAogI2RlZmluZSBJTVBM
RU1FTlRfUFJPVE9UWVBFKENsYXNzUHJvdG8sQ2xhc3NGdW5jKSBcCi0gICAgVmFsdWUgQ2xhc3NQ
cm90bzo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdCBcCisgICAgYm9vbCBDbGFzc1Byb3RvOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29u
c3QgXAogICAgIHsgXAotICAgICAgLypmcHJpbnRmKCBzdGRlcnIsICIlc1Byb3RvOjpnZXQoJXMp
IFtpbiBtYWNybywgbm8gcGFyZW50XVxuIiwgaW5mby5jbGFzc05hbWUsIHByb3BlcnR5TmFtZS5h
c2NpaSgpKTsqLyBcCi0gICAgICByZXR1cm4gbG9va3VwR2V0RnVuY3Rpb248Q2xhc3NGdW5jLE9i
amVjdEltcD4oZXhlYywgcHJvcGVydHlOYW1lLCAmQ2xhc3NQcm90byMjVGFibGUsIHRoaXMgKTsg
XAorICAgICAgcmV0dXJuIGxvb2t1cEdldE93bkZ1bmN0aW9uPENsYXNzRnVuYyxPYmplY3RJbXA+
KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkNsYXNzUHJvdG8jI1RhYmxlLCB0aGlzLCByZXN1bHQpOyBc
CiAgICAgfSBcCiAgICAgYm9vbCBDbGFzc1Byb3RvOjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QgXAogICAgIHsgLypz
dHVwaWQgYnV0IHdlIG5lZWQgdGhpcyB0byBoYXZlIGEgY29tbW9uIG1hY3JvIGZvciB0aGUgZGVj
bGFyYXRpb24qLyBcCkBAIC0zMTAsMTMgKzMxMSwxMSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB9
CiAKICNkZWZpbmUgSU1QTEVNRU5UX1BST1RPVFlQRV9XSVRIX1BBUkVOVChDbGFzc1Byb3RvLENs
YXNzRnVuYyxQYXJlbnRQcm90bykgIFwKLSAgICBWYWx1ZSBDbGFzc1Byb3RvOjpnZXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0IFwKKyAgICBi
b29sIENsYXNzUHJvdG86OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdCBcCiAgICAgeyBcCi0g
ICAgICAvKmZwcmludGYoIHN0ZGVyciwgIiVzUHJvdG86OmdldCglcykgW2luIG1hY3JvXVxuIiwg
aW5mby5jbGFzc05hbWUsIHByb3BlcnR5TmFtZS5hc2NpaSgpKTsqLyBcCi0gICAgICBWYWx1ZSB2
YWwgPSBsb29rdXBHZXRGdW5jdGlvbjxDbGFzc0Z1bmMsT2JqZWN0SW1wPihleGVjLCBwcm9wZXJ0
eU5hbWUsICZDbGFzc1Byb3RvIyNUYWJsZSwgdGhpcyApOyBcCi0gICAgICBpZiAoIHZhbC50eXBl
KCkgIT0gVW5kZWZpbmVkVHlwZSApIHJldHVybiB2YWw7IFwKLSAgICAgIC8qIE5vdCBmb3VuZCAt
PiBmb3J3YXJkIHJlcXVlc3QgdG8gInBhcmVudCIgcHJvdG90eXBlICovIFwKLSAgICAgIHJldHVy
biBQYXJlbnRQcm90bzo6c2VsZihleGVjKS0+Z2V0KCBleGVjLCBwcm9wZXJ0eU5hbWUgKTsgXAor
ICAgICAgaWYgKGxvb2t1cEdldE93bkZ1bmN0aW9uPENsYXNzRnVuYyxPYmplY3RJbXA+KGV4ZWMs
IHByb3BlcnR5TmFtZSwgJkNsYXNzUHJvdG8jI1RhYmxlLCB0aGlzLCByZXN1bHQpKSBcCisgICAg
ICAgICAgcmV0dXJuIHRydWU7IFwKKyAgICAgIHJldHVybiBQYXJlbnRQcm90bzo6c2VsZihleGVj
KS0+Z2V0T3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCByZXN1bHQpOyBcCiAgICAgfSBc
CiAgICAgYm9vbCBDbGFzc1Byb3RvOjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QgXAogICAgIHsgXApJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBKYXZhU2NyaXB0Q29yZS9ranMvbWF0aF9vYmpl
Y3QuY3BwCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbWF0aF9vYmplY3QuY3BwCTE0IEp1bCAyMDA1
IDE4OjI3OjAzIC0wMDAwCTEuMTQKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVjdC5j
cHAJMjUgSnVsIDIwMDUgMDY6MDQ6MjUgLTAwMDAKQEAgLTIxLDcgKzIxLDYgQEAKIAogI2luY2x1
ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPGFzc2VydC5oPgogCiAjaW5jbHVkZSAidmFsdWUuaCIKQEAgLTgxLDkgKzgwLDEwIEBA
IE1hdGhPYmplY3RJbXA6Ok1hdGhPYmplY3RJbXAoRXhlY1N0YXRlICoKIH0KIAogLy8gRUNNQSAx
NS44Ci1WYWx1ZSBNYXRoT2JqZWN0SW1wOjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CisKK2Jvb2wgTWF0aE9iamVjdEltcDo6Z2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0gIHJldHVybiBsb29rdXBHZXQ8TWF0aEZ1bmNJbXAs
IE1hdGhPYmplY3RJbXAsIE9iamVjdEltcD4oIGV4ZWMsIHByb3BlcnR5TmFtZSwgJm1hdGhUYWJs
ZSwgdGhpcyApOworICByZXR1cm4gbG9va3VwR2V0T3duUHJvcGVydHk8TWF0aEZ1bmNJbXAsIE1h
dGhPYmplY3RJbXAsIE9iamVjdEltcD4oZXhlYywgcHJvcGVydHlOYW1lLCAmbWF0aFRhYmxlLCB0
aGlzLCByZXN1bHQpOwogfQogCiBWYWx1ZSBNYXRoT2JqZWN0SW1wOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CkBAIC0xMTUsOCArMTE1LDcgQEAgVmFsdWUg
TWF0aE9iamVjdEltcDo6Z2V0VmFsdWVQcm9wZXJ0eShFeAogICAgIGQgPSBzcXJ0KDIuMCk7CiAg
ICAgYnJlYWs7CiAgIGRlZmF1bHQ6Ci0gICAgZnByaW50Ziggc3RkZXJyLCAiSW50ZXJuYWwgZXJy
b3IgaW4gTWF0aE9iamVjdEltcDogdW5oYW5kbGVkIHRva2VuICVkXG4iLCB0b2tlbiApOwotICAg
IGJyZWFrOworICAgIGFzc2VydCgwKTsKICAgfQogCiAgIHJldHVybiBOdW1iZXIoZCk7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvbWF0aF9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL21hdGhfb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IEphdmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVj
dC5oCi0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbWF0aF9vYmplY3QuaAkxNCBKdWwgMjAwNSAxODoy
NzowMyAtMDAwMAkxLjUKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9tYXRoX29iamVjdC5oCTI1IEp1
bCAyMDA1IDA2OjA0OjI1IC0wMDAwCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICBwdWJsaWM6CiAgICAgTWF0aE9iamVjdEltcChFeGVjU3RhdGUgKmV4ZWMsCiAgICAgICAgICAg
ICAgICAgICBPYmplY3RQcm90b3R5cGVJbXAgKm9ialByb3RvKTsKLSAgICBWYWx1ZSBnZXQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdDsKKyAgICBib29sIGdldE93
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5m
byAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIGluZm87CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjY2CmRpZmYgLXUgLXAgLXIxLjY2IEphdmFTY3JpcHRDb3Jl
L2tqcy9ub2Rlcy5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJMTQgSnVsIDIw
MDUgMTg6Mjc6MDMgLTAwMDAJMS42NgorKysgSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAky
NSBKdWwgMjAwNSAwNjowNDoyNSAtMDAwMApAQCAtMjg0LDcgKzI4NCwyMiBAQCBWYWx1ZSBUaGlz
Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjCiAvLyBFQ01BIDExLjEuMiAmIDEwLjEuNAog
VmFsdWUgUmVzb2x2ZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgcmV0dXJu
IGV2YWx1YXRlUmVmZXJlbmNlKGV4ZWMpLmdldFZhbHVlKGV4ZWMpOworICBTY29wZUNoYWluIGNo
YWluID0gZXhlYy0+Y29udGV4dCgpLmltcCgpLT5zY29wZUNoYWluKCk7CisKKyAgVmFsdWUgcmVz
dWx0OworICB3aGlsZSAoIWNoYWluLmlzRW1wdHkoKSkgeworICAgIE9iamVjdEltcCAqbyA9IGNo
YWluLnRvcCgpOworCisgICAgaWYgKG8tPmdldFByb3BlcnR5KGV4ZWMsIGlkZW50LCByZXN1bHQp
KQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBjaGFpbi5wb3AoKTsKKyAgfQorCisg
IFVTdHJpbmcgbSA9IEkxOE5fTk9PUCgiQ2FuJ3QgZmluZCB2YXJpYWJsZTogIikgKyBpZGVudC51
c3RyaW5nKCk7CisgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsIFJlZmVyZW5jZUVy
cm9yLCBtLmFzY2lpKCkpOworICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKKyAgcmV0dXJuIGVy
cjsKIH0KIAogUmVmZXJlbmNlIFJlc29sdmVOb2RlOjpldmFsdWF0ZVJlZmVyZW5jZShFeGVjU3Rh
dGUgKmV4ZWMpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJfb2Jq
ZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC11IC1wIC1yMS4xNyBKYXZh
U2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9u
dW1iZXJfb2JqZWN0LmNwcAkxNCBKdWwgMjAwNSAxODoyNzowMyAtMDAwMAkxLjE3CisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvbnVtYmVyX29iamVjdC5jcHAJMjUgSnVsIDIwMDUgMDY6MDQ6MjUgLTAw
MDAKQEAgLTQwMiw5ICs0MDIsOSBAQCBOdW1iZXJPYmplY3RJbXA6Ok51bWJlck9iamVjdEltcChF
eGVjU3RhCiAgIHB1dERpcmVjdChsZW5ndGhQcm9wZXJ0eU5hbWUsIE51bWJlckltcDo6b25lKCks
IFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOwogfQogCi1WYWx1ZSBOdW1iZXJPYmplY3RJ
bXA6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkg
Y29uc3QKK2Jvb2wgTnVtYmVyT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QK
IHsKLSAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPE51bWJlck9iamVjdEltcCwgSW50ZXJuYWxGdW5j
dGlvbkltcD4oIGV4ZWMsIHByb3BlcnR5TmFtZSwgJm51bWJlclRhYmxlLCB0aGlzICk7CisgIHJl
dHVybiBsb29rdXBHZXRPd25WYWx1ZTxOdW1iZXJPYmplY3RJbXAsIEludGVybmFsRnVuY3Rpb25J
bXA+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJm51bWJlclRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQog
CiBWYWx1ZSBOdW1iZXJPYmplY3RJbXA6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGlu
dCB0b2tlbikgY29uc3QKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9udW1iZXJf
b2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11IC1wIC1yMS43IEphdmFT
Y3JpcHRDb3JlL2tqcy9udW1iZXJfb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9udW1i
ZXJfb2JqZWN0LmgJMTQgSnVsIDIwMDUgMTg6Mjc6MDMgLTAwMDAJMS43CisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvbnVtYmVyX29iamVjdC5oCTI1IEp1bCAyMDA1IDA2OjA0OjI1IC0wMDAwCkBAIC04
NCw3ICs4NCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRz
Q2FsbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CiAKLSAgICBWYWx1ZSBnZXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdDsKKyAgICBib29sIGdldE93blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBW
YWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAq
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIGluZm87CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNDYKZGlmZiAtdSAtcCAtcjEuNDYgSmF2YVNjcmlwdENvcmUv
a2pzL29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCTE0IEp1bCAy
MDA1IDE4OjI3OjAzIC0wMDAwCTEuNDYKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuY3Bw
CTI1IEp1bCAyMDA1IDA2OjA0OjI1IC0wMDAwCkBAIC0yMDgsMjQgKzIwOCw2NSBAQCBVU3RyaW5n
IE9iamVjdEltcDo6Y2xhc3NOYW1lKCkgY29uc3QKIAogVmFsdWUgT2JqZWN0SW1wOjpnZXQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0g
IFZhbHVlSW1wICppbXAgPSBnZXREaXJlY3QocHJvcGVydHlOYW1lKTsKLSAgaWYgKGltcCkKLSAg
ICByZXR1cm4gVmFsdWUoaW1wKTsKKyAgVmFsdWUgcmVzdWx0OwogCi0gIC8vIG5vbi1zdGFuZGFy
ZCBuZXRzY2FwZSBleHRlbnNpb24KLSAgaWYgKHByb3BlcnR5TmFtZSA9PSBzcGVjaWFsUHJvdG90
eXBlUHJvcGVydHlOYW1lKQotICAgIHJldHVybiBWYWx1ZShfcHJvdG8pOworICBjb25zdCBPYmpl
Y3RJbXAgKmltcCA9IHRoaXM7CiAKLSAgaWYgKF9wcm90by0+ZGlzcGF0Y2hUeXBlKCkgIT0gT2Jq
ZWN0VHlwZSkgewotICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgd2hpbGUgKHRydWUpIHsKKyAg
ICBpZiAoaW1wLT5nZXRPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHJlc3VsdCkpCisg
ICAgICByZXR1cm4gcmVzdWx0OworCisgICAgY29uc3QgVmFsdWVJbXAgKnByb3RvID0gaW1wLT5f
cHJvdG87CisgICAgaWYgKHByb3RvLT5kaXNwYXRjaFR5cGUoKSAhPSBPYmplY3RUeXBlKQorICAg
ICAgYnJlYWs7CisKKyAgICBpbXAgPSBzdGF0aWNfY2FzdDxjb25zdCBPYmplY3RJbXAgKj4ocHJv
dG8pOwogICB9CiAKLSAgcmV0dXJuIHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihfcHJvdG8pLT5n
ZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitib29s
IE9iamVjdEltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0Cit7CisgIHJldHVybiBnZXRPd25Qcm9wZXJ0
eShleGVjLCBJZGVudGlmaWVyOjpmcm9tKHByb3BlcnR5TmFtZSksIHJlc3VsdCk7CiB9CiAKIFZh
bHVlIE9iamVjdEltcDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
KSBjb25zdAogewotICByZXR1cm4gZ2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb20ocHJvcGVydHlO
YW1lKSk7CisgIFZhbHVlIHJlc3VsdDsKKworICBjb25zdCBPYmplY3RJbXAgKmltcCA9IHRoaXM7
CisKKyAgd2hpbGUgKGltcCkgeworICAgIGlmIChpbXAtPmdldE93blByb3BlcnR5KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgcmVzdWx0KSkKKyAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBjb25zdCBW
YWx1ZUltcCAqcHJvdG8gPSBpbXAtPl9wcm90bzsKKyAgICBpZiAocHJvdG8tPmRpc3BhdGNoVHlw
ZSgpICE9IE9iamVjdFR5cGUpCisgICAgICBicmVhazsKKworICAgIGltcCA9IHN0YXRpY19jYXN0
PGNvbnN0IE9iamVjdEltcCAqPihwcm90byk7CisgIH0KKworICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK2Jvb2wgT2JqZWN0SW1wOjpnZXRQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKK3sKKyAgY29uc3QgT2JqZWN0
SW1wICppbXAgPSB0aGlzOworICAKKyAgd2hpbGUgKHRydWUpIHsKKyAgICBpZiAoaW1wLT5nZXRP
d25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHJlc3VsdCkpCisgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICBjb25zdCBWYWx1ZUltcCAqcHJvdG8gPSBpbXAtPl9wcm90bzsKKyAgICAg
IGlmIChwcm90by0+ZGlzcGF0Y2hUeXBlKCkgIT0gT2JqZWN0VHlwZSkKKyAgICAgICAgYnJlYWs7
CisgICAgICAKKyAgICAgIGltcCA9IHN0YXRpY19jYXN0PGNvbnN0IE9iamVjdEltcCAqPihwcm90
byk7CisgIH0KKyAgCisgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gRUNNQSA4LjYuMi4yCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L0phdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4z
OApkaWZmIC11IC1wIC1yMS4zOCBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgKLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9vYmplY3QuaAkxNSBKdWwgMjAwNSAxNjo1ODo1NiAtMDAwMAkxLjM4Cisr
KyBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJMjUgSnVsIDIwMDUgMDY6MDQ6MjUgLTAwMDAK
QEAgLTUwMyw4ICs1MDMsMTQgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICogQHNlZSBPYmplY3Q6
OmdldCgpCiAgICAgICovCiAgICAgLy8gW1tHZXRdXSAtIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkg
YWxsIE9iamVjdHMKLSAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQo
RXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIFZhbHVl
IGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3Q7CisgICAgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
KSBjb25zdDsKKworICAgIGJvb2wgZ2V0UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OworICAgIGJvb2wg
Z2V0UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVl
JiByZXN1bHQpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwogCiAgICAgLyoq
CiAgICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFtbUHV0XV0gaW50ZXJuYWwgcHJvcGVydHkg
KGltcGxlbWVudGVkIGJ5IGFsbApAQCAtNjMyLDYgKzYzOCw0NyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBTY29wZUNoYWluIF9zY29wZTsKICAgfTsKIAorCisgIC8vIGl0IG1heSBzZWVtIGNyYXp5
IHRvIGlubGluZSBhIGZ1bmN0aW9uIHRoaXMgbGFyZ2UgYnV0IGl0IG1ha2VzIGEgYmlnIGRpZmZl
cmVuY2UKKyAgLy8gc2luY2UgdGhpcyBpcyBmdW5jdGlvbiB2ZXJ5IGhvdCBpbiB2YXJpYWJsZSBs
b29rdXAKKyAgaW5saW5lIGJvb2wgT2JqZWN0SW1wOjpnZXRQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QK
KyAgeworICAgIGNvbnN0IE9iamVjdEltcCAqaW1wID0gdGhpczsKKworICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICBpZiAoaW1wLT5nZXRPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHJl
c3VsdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgCisgICAgICBjb25zdCBWYWx1ZUlt
cCAqcHJvdG8gPSBpbXAtPl9wcm90bzsKKyAgICAgIGlmIChwcm90by0+ZGlzcGF0Y2hUeXBlKCkg
IT0gT2JqZWN0VHlwZSkKKyAgICAgICAgYnJlYWs7CisgICAgICAKKyAgICAgIGltcCA9IHN0YXRp
Y19jYXN0PGNvbnN0IE9iamVjdEltcCAqPihwcm90byk7CisgICAgfQorICAgIAorICAgIHJldHVy
biBmYWxzZTsKKyAgfQorCisgIC8vIGl0IG1heSBzZWVtIGNyYXp5IHRvIGlubGluZSBhIGZ1bmN0
aW9uIHRoaXMgbGFyZ2UsIGVzcGVjaWFsbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uLAorICAvLyBidXQg
aXQgbWFrZXMgYSBiaWcgZGlmZmVyZW5jZSB0byBwcm9wZXJ0eSBsb29rdXAgaWYgc3ViY2xhc3Nl
cyBjYW4gaW5saW5lIHRoZWlyCisgIC8vIHN1cGVyY2xhc3MgY2FsbCB0byB0aGlzCisgIGlubGlu
ZSBib29sIE9iamVjdEltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIFZhbHVlICZyZXN1bHQpIGNvbnN0CisgIHsKKyAgICAg
IFZhbHVlSW1wICppbXAgPSBnZXREaXJlY3QocHJvcGVydHlOYW1lKTsKKyAgICAgIGlmIChpbXAp
IHsKKyAgICAgICAgcmVzdWx0ID0gVmFsdWUoaW1wKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICB9CisKKyAgICAgIC8vIG5vbi1zdGFuZGFyZCBuZXRzY2FwZSBleHRlbnNpb24KKyAgICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gc3BlY2lhbFByb3RvdHlwZVByb3BlcnR5TmFtZSkgeworICAg
ICAgICByZXN1bHQgPSBWYWx1ZShfcHJvdG8pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
IH0KKworICAgICAgcmV0dXJuIGZhbHNlOworICB9CisKICAgLyoqCiAgICAqIFR5cGVzIG9mIE5h
dGl2ZSBFcnJvcnMgYXZhaWxhYmxlLiBGb3IgY3VzdG9tIGVycm9ycywgR2VuZXJhbEVycm9yCiAg
ICAqIHNob3VsZCBiZSB1c2VkLgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMv
b2JqZWN0X29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtdSAtcCAt
cjEuMTEgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuY3BwCi0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvb2JqZWN0X29iamVjdC5jcHAJMTQgSnVsIDIwMDUgMTg6Mjc6MDMgLTAwMDAJMS4x
MQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdF9vYmplY3QuY3BwCTI1IEp1bCAyMDA1IDA2
OjA0OjI1IC0wMDAwCkBAIC03MCw3ICs3MCw3IEBAIFZhbHVlIE9iamVjdFByb3RvRnVuY0ltcDo6
Y2FsbChFeGVjU3RhdGUKICAgICAgICAgY2FzZSBWYWx1ZU9mOgogICAgICAgICAgICAgcmV0dXJu
IHRoaXNPYmo7CiAgICAgICAgIGNhc2UgSGFzT3duUHJvcGVydHk6IHsKLSAgICAgICAgICAgIC8v
IFNhbWUgYXMgaGFzUHJvcGVydHkoKSBidXQgd2l0aG91dCBjaGVja2luZyB0aGUgcHJvdG90eXBl
CisgICAgICAgICAgICAvLyBTYW1lIGFzIHRoZSBpbiBvcGVyYXRvciBidXQgd2l0aG91dCBjaGVj
a2luZyB0aGUgcHJvdG90eXBlCiAgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZShh
cmdzWzBdLnRvU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgICAgIGJvb2wgZXhpc3RzID0gdGhpc09i
ai5oYXNPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgcmV0dXJu
IFZhbHVlKGV4aXN0cyA/IEJvb2xlYW5JbXA6OnN0YXRpY1RydWUgOiBCb29sZWFuSW1wOjpzdGF0
aWNGYWxzZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvcmVnZXhwX29iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2Jq
ZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOApkaWZmIC11IC1wIC1yMS4xOCBKYXZh
U2NyaXB0Q29yZS9ranMvcmVnZXhwX29iamVjdC5jcHAKLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9y
ZWdleHBfb2JqZWN0LmNwcAkxNCBKdWwgMjAwNSAxODoyNzowMyAtMDAwMAkxLjE4CisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvcmVnZXhwX29iamVjdC5jcHAJMjUgSnVsIDIwMDUgMDY6MDQ6MjUgLTAw
MDAKQEAgLTIxNiw3ICsyMTYsNyBAQCBPYmplY3QgUmVnRXhwT2JqZWN0SW1wOjphcnJheU9mTWF0
Y2hlcyhFCiAgIHJldHVybiBhcnI7CiB9CiAKLVZhbHVlIFJlZ0V4cE9iamVjdEltcDo6Z2V0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCkgY29uc3QKK2Jvb2wgUmVnRXhwT2Jq
ZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7CiAgIFVTdHJpbmcgcyA9IHAudXN0cmluZygpOwog
ICBpZiAoc1swXSA9PSAnJCcgJiYgbGFzdE92ZWN0b3IpCkBAIC0yMjgsMTIgKzIyOCwxNSBAQCBW
YWx1ZSBSZWdFeHBPYmplY3RJbXA6OmdldChFeGVjU3RhdGUgKmV4CiAgICAgICBpZiAoaSA8IGxh
c3ROclN1YlBhdHRlcm5zICsgMSkKICAgICAgIHsKICAgICAgICAgVVN0cmluZyBzdWJzdHJpbmcg
PSBsYXN0U3RyaW5nLnN1YnN0ciggbGFzdE92ZWN0b3JbMippXSwgbGFzdE92ZWN0b3JbMippKzFd
IC0gbGFzdE92ZWN0b3JbMippXSApOwotICAgICAgICByZXR1cm4gU3RyaW5nKHN1YnN0cmluZyk7
Ci0gICAgICB9Ci0gICAgICByZXR1cm4gU3RyaW5nKCIiKTsKKyAgICAgICAgcmVzdWx0ID0gU3Ry
aW5nKHN1YnN0cmluZyk7CisgICAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nKCIi
KTsKKyAgICAgIAorICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9Ci0gIHJldHVybiBJbnRl
cm5hbEZ1bmN0aW9uSW1wOjpnZXQoZXhlYywgcCk7CisKKyAgcmV0dXJuIEludGVybmFsRnVuY3Rp
b25JbXA6OmdldE93blByb3BlcnR5KGV4ZWMsIHAsIHJlc3VsdCk7CiB9CiAKIGJvb2wgUmVnRXhw
T2JqZWN0SW1wOjppbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9yZWdleHBfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0ph
dmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
OApkaWZmIC11IC1wIC1yMS44IEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmgKLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBfb2JqZWN0LmgJMTQgSnVsIDIwMDUgMTg6Mjc6MDMg
LTAwMDAJMS44CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcmVnZXhwX29iamVjdC5oCTI1IEp1bCAy
MDA1IDA2OjA0OjI1IC0wMDAwCkBAIC03NCw3ICs3NCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgVmFsdWUg
Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7
CiAKLSAgICBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAg
IGludCAqKiByZWdpc3RlclJlZ2V4cCggY29uc3QgUmVnRXhwKiByZSwgY29uc3QgVVN0cmluZyYg
cyApOwogICAgIHZvaWQgc2V0U3ViUGF0dGVybnMoaW50IG51bSkgeyBsYXN0TnJTdWJQYXR0ZXJu
cyA9IG51bTsgfQogICAgIE9iamVjdCBhcnJheU9mTWF0Y2hlcyhFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IFVTdHJpbmcgJnJlc3VsdCkgY29uc3Q7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvc3Ry
aW5nX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRD
b3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZm
IC11IC1wIC1yMS4zOSBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAkxNCBKdWwgMjAwNSAxODoyNzowMyAt
MDAwMAkxLjM5CisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAJMjUgSnVs
IDIwMDUgMDY6MDQ6MjUgLTAwMDAKQEAgLTUwLDEwICs1MCwxMiBAQCBTdHJpbmdJbnN0YW5jZUlt
cDo6U3RyaW5nSW5zdGFuY2VJbXAoT2JqCiAgIHNldEludGVybmFsVmFsdWUoU3RyaW5nKHN0cmlu
ZykpOwogfQogCi1WYWx1ZSBTdHJpbmdJbnN0YW5jZUltcDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBTdHJpbmdJbnN0YW5j
ZUltcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0gIGlmIChwcm9wZXJ0eU5hbWUg
PT0gbGVuZ3RoUHJvcGVydHlOYW1lKQotICAgIHJldHVybiBOdW1iZXIoaW50ZXJuYWxWYWx1ZSgp
LnRvU3RyaW5nKGV4ZWMpLnNpemUoKSk7CisgIGlmIChwcm9wZXJ0eU5hbWUgPT0gbGVuZ3RoUHJv
cGVydHlOYW1lKSB7CisgICAgcmVzdWx0ID0gVmFsdWUoaW50ZXJuYWxWYWx1ZSgpLnRvU3RyaW5n
KGV4ZWMpLnNpemUoKSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KIAogICBib29sIG9rOwogICBj
b25zdCB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoJm9rKTsKQEAg
LTYzLDEwICs2NSwxMSBAQCBWYWx1ZSBTdHJpbmdJbnN0YW5jZUltcDo6Z2V0KEV4ZWNTdGF0ZSAq
CiAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkKICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAg
ICBjb25zdCBVQ2hhciBjID0gc1tpbmRleF07Ci0gICAgcmV0dXJuIFN0cmluZyhVU3RyaW5nKCZj
LCAxKSk7CisgICAgcmVzdWx0ID0gVmFsdWUoVVN0cmluZygmYywgMSkpOworICAgIHJldHVybiB0
cnVlOwogICB9CiAKLSAgcmV0dXJuIE9iamVjdEltcDo6Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7
CisgIHJldHVybiBPYmplY3RJbXA6OmdldE93blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwg
cmVzdWx0KTsKIH0KIAogdm9pZCBTdHJpbmdJbnN0YW5jZUltcDo6cHV0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGlu
dCBhdHRyKQpAQCAtMTUxLDkgKzE1NCw5IEBAIFN0cmluZ1Byb3RvdHlwZUltcDo6U3RyaW5nUHJv
dG90eXBlSW1wKEUKIAogfQogCi1WYWx1ZSBTdHJpbmdQcm90b3R5cGVJbXA6OmdldChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK2Jvb2wgU3Ry
aW5nUHJvdG90eXBlSW1wOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSAgcmV0dXJu
IGxvb2t1cEdldEZ1bmN0aW9uPFN0cmluZ1Byb3RvRnVuY0ltcCwgU3RyaW5nSW5zdGFuY2VJbXA+
KCBleGVjLCBwcm9wZXJ0eU5hbWUsICZzdHJpbmdUYWJsZSwgdGhpcyApOworICByZXR1cm4gbG9v
a3VwR2V0T3duRnVuY3Rpb248U3RyaW5nUHJvdG9GdW5jSW1wLCBTdHJpbmdJbnN0YW5jZUltcD4o
ZXhlYywgcHJvcGVydHlOYW1lLCAmc3RyaW5nVGFibGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdHJpbmdQcm90b0Z1bmNJbXAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMv
c3RyaW5nX29iamVjdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAgLXIx
LjExIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgKLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9zdHJpbmdfb2JqZWN0LmgJMTQgSnVsIDIwMDUgMTg6Mjc6MDMgLTAwMDAJMS4xMQorKysg
SmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAkyNSBKdWwgMjAwNSAwNjowNDoyNSAt
MDAwMApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBTdHJpbmdJbnN0YW5j
ZUltcChPYmplY3RJbXAgKnByb3RvKTsKICAgICBTdHJpbmdJbnN0YW5jZUltcChPYmplY3RJbXAg
KnByb3RvLCBjb25zdCBVU3RyaW5nICZzdHJpbmcpOwogCi0gICAgdmlydHVhbCBWYWx1ZSBnZXQo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSwgY29uc3QgVmFsdWUgJnZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZpcnR1YWwgYm9v
bCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKTsKQEAgLTUxLDcgKzUxLDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBTdHJpbmdQcm90b3R5cGVJbXAoRXhl
Y1N0YXRlICpleGVjLAogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RQcm90b3R5cGVJbXAg
Km9ialByb3RvKTsKLSAgICBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyICZwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNv
bnN0OwogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgfTsKSW5k
ZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL0NoYW5nZUxvZyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NDY1CmRpZmYgLXUgLXAgLXIx
LjQ0NjUgV2ViQ29yZS9DaGFuZ2VMb2cKLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCTI0IEp1bCAyMDA1
IDIyOjQ0OjUxIC0wMDAwCTEuNDQ2NQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJMjUgSnVsIDIwMDUg
MDY6MDQ6MzcgLTAwMDAKQEAgLTEsMyArMSwxMTMgQEAKKzIwMDUtMDctMjQgIE1hY2llaiBTdGFj
aG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworCS0gaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MTI0CisJKGNoYW5nZSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyB0byBhdm9pZCBkb3Vi
bGUgbG9va3VwKQorCisJLSAxMCUgc3BlZWR1cCBvbiBKYXZhU2NyaXB0IGlCZW5jaAorCS0gNSUg
c3BlZWR1cCBvbiAyNGZ1biBCZW5jaEpTIGJlbmNobWFyaworCisJQ2hhbmdlZCBhbGwgZ2V0IG1l
dGhvZHMgdG8gZ2V0T3duUHJvcGVydHkgLSB0aGV5IGFyZSBubyBsb25nZXIgcmVzcG9uc2libGUg
Zm9yCisJcHJvdG90eXBlIGxvb2t1cCwgYW5kIGRldGVybWluZSBpZiB0aGUgcHJvcGVydHkgd2Fz
IGZvdW5kIGFzIGEgc2lkZSBlZmVjdC4KKworCUFsc28gbWlzY2VsbGFuZW91cyBjb2RlIGNsZWFu
dXAuCisJCisgICAgICAgICoga2h0bWwvZWNtYS9ranNfY3NzLmNwcDoKKyAgICAgICAgKEtKUzo6
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpE
T01TdHlsZVNoZWV0OjpnZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OkRPTVN0eWxlU2hl
ZXRMaXN0OjpnZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OkRPTU1lZGlhTGlzdDo6Z2V0
T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpET01DU1NTdHlsZVNoZWV0OjpnZXRPd25Qcm9w
ZXJ0eSk6CisgICAgICAgIChLSlM6OkRPTUNTU1J1bGVMaXN0OjpnZXRPd25Qcm9wZXJ0eSk6Cisg
ICAgICAgIChLSlM6OkRPTUNTU1J1bGU6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6
RE9NQ1NTUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OkNTU1J1bGVDb25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpET01DU1NWYWx1ZTo6Z2V0
T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpDU1NWYWx1ZUNvbnN0cnVjdG9yOjpnZXRPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChLSlM6OkRPTUNTU1ByaW1pdGl2ZVZhbHVlOjpnZXRPd25Qcm9w
ZXJ0eSk6CisgICAgICAgIChLSlM6OkNTU1ByaW1pdGl2ZVZhbHVlQ29uc3RydWN0b3I6OmdldE93
blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6RE9NQ1NTVmFsdWVMaXN0OjpnZXRPd25Qcm9wZXJ0
eSk6CisgICAgICAgIChLSlM6OkRPTVJHQkNvbG9yOjpnZXRPd25Qcm9wZXJ0eSk6CisgICAgICAg
IChLSlM6OkRPTVJlY3Q6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6RE9NQ291bnRl
cjo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX2Nzcy5oOgorICAg
ICAgICAqIGtodG1sL2VjbWEva2pzX2RvbS5jcHA6CisgICAgICAgIChLSlM6OkRPTU5vZGU6Omdl
dE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6RE9NTm9kZUxpc3Q6OmdldE93blByb3BlcnR5
KToKKyAgICAgICAgKEtKUzo6RE9NQXR0cjo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pT
OjpET01Eb2N1bWVudDo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpET01FbGVtZW50
OjpnZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OkRPTURvY3VtZW50VHlwZTo6Z2V0T3du
UHJvcGVydHkpOgorICAgICAgICAoS0pTOjpET01OYW1lZE5vZGVNYXA6OmdldE93blByb3BlcnR5
KToKKyAgICAgICAgKEtKUzo6RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpnZXRPd25Qcm9wZXJ0
eSk6CisgICAgICAgIChLSlM6OkRPTU5vdGF0aW9uOjpnZXRPd25Qcm9wZXJ0eSk6CisgICAgICAg
IChLSlM6OkRPTUVudGl0eTo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpOb2RlQ29u
c3RydWN0b3I6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6RE9NRXhjZXB0aW9uQ29u
c3RydWN0b3I6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6RE9NTmFtZWROb2Rlc0Nv
bGxlY3Rpb246OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6RE9NQ2hhcmFjdGVyRGF0
YTo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX2RvbS5oOgorICAg
ICAgICAqIGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHA6CisgICAgICAgIChLSlM6OkV2ZW50Q29u
c3RydWN0b3I6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6RE9NRXZlbnQ6OmdldE93
blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6RXZlbnRFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Z2V0
T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpET01VSUV2ZW50OjpnZXRPd25Qcm9wZXJ0eSk6
CisgICAgICAgIChLSlM6OkRPTU1vdXNlRXZlbnQ6OmdldE93blByb3BlcnR5KToKKyAgICAgICAg
KEtKUzo6RE9NS2V5Ym9hcmRFdmVudDo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpN
dXRhdGlvbkV2ZW50Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6
RE9NTXV0YXRpb25FdmVudDo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpET01XaGVl
bEV2ZW50OjpnZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OkNsaXBib2FyZDo6Z2V0T3du
UHJvcGVydHkpOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX2V2ZW50cy5oOgorICAgICAgICAq
IGtodG1sL2VjbWEva2pzX2h0bWwuY3BwOgorICAgICAgICAoS0pTOjpIVE1MRG9jdW1lbnQ6Omdl
dE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6S0pTOjpIVE1MRWxlbWVudDo6Z2V0T3duUHJv
cGVydHkpOgorICAgICAgICAoS0pTOjpLSlM6OkhUTUxDb2xsZWN0aW9uOjpnZXRPd25Qcm9wZXJ0
eSk6CisgICAgICAgIChLSlM6OktKUzo6SFRNTFNlbGVjdENvbGxlY3Rpb246OmdldE93blByb3Bl
cnR5KToKKyAgICAgICAgKEtKUzo6SW1hZ2U6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKEtK
Uzo6Q29udGV4dDJEOjpnZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OkdyYWRpZW50Ojpn
ZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OkltYWdlUGF0dGVybjo6Z2V0T3duUHJvcGVy
dHkpOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX2h0bWwuaDoKKyAgICAgICAgKiBraHRtbC9l
Y21hL2tqc19uYXZpZ2F0b3IuY3BwOgorICAgICAgICAoS0pTOjpQbHVnaW46OlBsdWdpbik6Cisg
ICAgICAgIChLSlM6Ok5hdmlnYXRvcjo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpQ
bHVnaW5zOjpnZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgIChLSlM6Ok1pbWVUeXBlczo6Z2V0T3du
UHJvcGVydHkpOgorICAgICAgICAoS0pTOjpQbHVnaW46OmdldE93blByb3BlcnR5KToKKyAgICAg
ICAgKEtKUzo6TWltZVR5cGU6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKiBraHRtbC9lY21h
L2tqc19uYXZpZ2F0b3IuaDoKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19yYW5nZS5jcHA6Cisg
ICAgICAgIChLSlM6OkRPTVJhbmdlOjpnZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgIChLSlM6OlJh
bmdlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKiBraHRtbC9lY21hL2tq
c19yYW5nZS5oOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX3RyYXZlcnNhbC5jcHA6CisgICAg
ICAgIChLSlM6OkRPTU5vZGVJdGVyYXRvcjo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pT
OjpOb2RlRmlsdGVyQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6
RE9NVHJlZVdhbGtlcjo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAqIGtodG1sL2VjbWEva2pz
X3RyYXZlcnNhbC5oOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX3ZpZXdzLmNwcDoKKyAgICAg
ICAgKEtKUzo6RE9NQWJzdHJhY3RWaWV3OjpnZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgICoga2h0
bWwvZWNtYS9ranNfdmlld3MuaDoKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc193aW5kb3cuY3Bw
OgorICAgICAgICAoS0pTOjpTY3JlZW46OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6
V2luZG93Ojp+V2luZG93KToKKyAgICAgICAgKEtKUzo6V2luZG93OjpnZXRPd25Qcm9wZXJ0eSk6
CisgICAgICAgIChLSlM6OldpbmRvdzo6cHV0KToKKyAgICAgICAgKEtKUzo6RnJhbWVBcnJheTo6
Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpMb2NhdGlvbjo6TG9jYXRpb24pOgorICAg
ICAgICAoS0pTOjpMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpMb2Nh
dGlvbjo6cHV0KToKKyAgICAgICAgKEtKUzo6U2VsZWN0aW9uOjpTZWxlY3Rpb24pOgorICAgICAg
ICAoS0pTOjpTZWxlY3Rpb246OmdldE93blByb3BlcnR5KToKKyAgICAgICAgKEtKUzo6QmFySW5m
bzo6Z2V0T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0
eSk6CisgICAgICAgICoga2h0bWwvZWNtYS9ranNfd2luZG93Lmg6CisgICAgICAgICoga2h0bWwv
ZWNtYS94bWxodHRwcmVxdWVzdC5jcHA6CisgICAgICAgIChLSlM6OlhNTEh0dHBSZXF1ZXN0Ojpn
ZXRPd25Qcm9wZXJ0eSk6CisgICAgICAgICoga2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5oOgor
CiAyMDA1LTA3LTI0ICBKdXN0aW4gR2FyY2lhICA8anVzdGluLmdhcmNpYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUGF0Y2ggYnkgQW5kZXJzIENhcmxzc29uIDxhbmRlcnNjYUBtYWMuY29tPgpJbmRl
eDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMzAKZGlmZiAtdSAtcCAtcjEuMzAgV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3Bw
Ci0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5jcHAJMTkgSnVsIDIwMDUgMTk6NTI6NDgg
LTAwMDAJMS4zMAorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwCTI1IEp1bCAyMDA1
IDA2OjA0OjM3IC0wMDAwCkBAIC0xNDMsMzQgKzE0Myw0MiBAQCBib29sIERPTUNTU1N0eWxlRGVj
bGFyYXRpb246Omhhc093blByb3BlCiAgIHJldHVybiBPYmplY3RJbXA6Omhhc093blByb3BlcnR5
KGV4ZWMsIHApOwogfQogCi1WYWx1ZSBET01DU1NTdHlsZURlY2xhcmF0aW9uOjpnZXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Citib29sIERP
TUNTU1N0eWxlRGVjbGFyYXRpb246OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewogI2lm
ZGVmIEtKU19WRVJCT1NFCiAgIGtkRGVidWcoNjA3MCkgPDwgIkRPTUNTU1N0eWxlRGVjbGFyYXRp
b246OmdldCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKICNlbmRpZgogICBj
b25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJkRPTUNTU1N0eWxlRGVj
bGFyYXRpb25UYWJsZSwgcHJvcGVydHlOYW1lKTsKICAgQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwg
JnN0eWxlRGVjbCA9ICptX2ltcGw7Ci0gIGlmIChlbnRyeSkKKyAgaWYgKGVudHJ5KSB7CiAgICAg
c3dpdGNoIChlbnRyeS0+dmFsdWUpIHsKICAgICBjYXNlIENzc1RleHQ6Ci0gICAgICByZXR1cm4g
Z2V0U3RyaW5nT3JOdWxsKHN0eWxlRGVjbC5jc3NUZXh0KCkpOworICAgICAgcmVzdWx0ID0gZ2V0
U3RyaW5nT3JOdWxsKHN0eWxlRGVjbC5jc3NUZXh0KCkpOworICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgY2FzZSBMZW5ndGg6Ci0gICAgICByZXR1cm4gTnVtYmVyKHN0eWxlRGVjbC5sZW5ndGgoKSk7
CisgICAgICByZXN1bHQgPSBWYWx1ZShzdHlsZURlY2wubGVuZ3RoKCkpOworICAgICAgcmV0dXJu
IHRydWU7CiAgICAgY2FzZSBQYXJlbnRSdWxlOgotICAgICAgcmV0dXJuIGdldERPTUNTU1J1bGUo
ZXhlYyxzdHlsZURlY2wucGFyZW50UnVsZSgpKTsKKyAgICAgIHJlc3VsdCA9IGdldERPTUNTU1J1
bGUoZXhlYyxzdHlsZURlY2wucGFyZW50UnVsZSgpKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAg
IGRlZmF1bHQ6Ci0gICAgICBicmVhazsKKyAgICAgIGFzc2VydCgwKTsKICAgICB9CisgIH0KIAog
ICAvLyBMb29rIGluIHRoZSBwcm90b3R5cGUgKGZvciBmdW5jdGlvbnMpIGJlZm9yZSBhc3N1bWlu
ZyBpdCdzIGEgbmFtZQorICAvLyBGSVhNRTogaXMgdGhpcyByZWFsbHkgbmVlZGVkPyBkbyBhbnkg
cHJvcGVydHkgbmFtZXMgY29uZmxpY3Qgd2l0aCBuYW1lcworICAvLyBvZiBmdW5jdGlvbnMgZnJv
bSB0aGUgcHJvdG90eXBlPwogICBPYmplY3QgcHJvdG8gPSBPYmplY3Q6OmR5bmFtaWNDYXN0KHBy
b3RvdHlwZSgpKTsKICAgaWYgKCFwcm90by5pc051bGwoKSAmJiBwcm90by5oYXNQcm9wZXJ0eShl
eGVjLHByb3BlcnR5TmFtZSkpCi0gICAgcmV0dXJuIHByb3RvLmdldChleGVjLHByb3BlcnR5TmFt
ZSk7CisgICAgcmV0dXJuIGZhbHNlOwogCiAgIGJvb2wgb2s7CiAgIGxvbmcgdW5zaWduZWQgaW50
IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICBpZiAob2spCi0gICAgcmV0dXJuIGdl
dFN0cmluZ09yTnVsbChzdHlsZURlY2wuaXRlbSh1KSk7CisgIGlmIChvaykgeworICAgIHJlc3Vs
dCA9IGdldFN0cmluZ09yTnVsbChzdHlsZURlY2wuaXRlbSh1KSk7CisgICAgcmV0dXJuIHRydWU7
CisgIH0KIAogI2lmZGVmIEtKU19WRVJCT1NFCiAgIGtkRGVidWcoNjA3MCkgPDwgIkRPTUNTU1N0
eWxlRGVjbGFyYXRpb246IGNvbnZlcnRpbmcgdG8gY3NzIHByb3BlcnR5IG5hbWU6ICIgPDwgY3Nz
UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkgPDwgZW5kbDsKQEAgLTE4NywxMyArMTk1LDE1IEBA
IFZhbHVlIERPTUNTU1N0eWxlRGVjbGFyYXRpb246OmdldChFeGVjU3QKICAgICBDU1NWYWx1ZUlt
cGwgKnYgPSBzdHlsZURlY2wuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wKTsKICAgICBpZiAodikg
ewogICAgICAgaWYgKHBpeGVsT3JQb3MgJiYgdi0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6
OkNTU19QUklNSVRJVkVfVkFMVUUpCi0gICAgICAgIHJldHVybiBOdW1iZXIoc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWVJbXBsICo+KHYpLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFgpKTsKLSAgICAgIHJldHVybiBnZXRTdHJpbmdPck51bGwodi0+Y3NzVGV4dCgp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZygiIik7CisgICAgICAgIHJlc3VsdCA9IE51bWJl
cihzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZUltcGwgKj4odiktPmdldEZsb2F0VmFsdWUo
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCkpOworICAgICAgZWxzZQorICAgICAgICByZXN1bHQg
PSAgZ2V0U3RyaW5nT3JOdWxsKHYtPmNzc1RleHQoKSk7CisgICAgfSBlbHNlCisgICAgICByZXN1
bHQgPSBTdHJpbmcoIiIpOworICAgIHJldHVybiB0cnVlOwogICB9CiAKLSAgcmV0dXJuIERPTU9i
amVjdDo6Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgIHJldHVybiBET01PYmplY3Q6OmdldE93
blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgcmVzdWx0KTsKIH0KIAogCkBAIC0yOTAsOSAr
MzAwLDkgQEAgRE9NU3R5bGVTaGVldDo6fkRPTVN0eWxlU2hlZXQoKQogICBTY3JpcHRJbnRlcnBy
ZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7CiB9CiAKLVZhbHVlIERPTVN0eWxl
U2hlZXQ6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSkgY29uc3QKK2Jvb2wgRE9NU3R5bGVTaGVldDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0
CiB7Ci0gIHJldHVybiBsb29rdXBHZXRWYWx1ZTxET01TdHlsZVNoZWV0LERPTU9iamVjdD4oZXhl
Yyxwcm9wZXJ0eU5hbWUsJkRPTVN0eWxlU2hlZXRUYWJsZSx0aGlzKTsKKyAgcmV0dXJuIGxvb2t1
cEdldE93blZhbHVlPERPTVN0eWxlU2hlZXQsIERPTU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1l
LCAmRE9NU3R5bGVTaGVldFRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCiBWYWx1ZSBET01TdHls
ZVNoZWV0OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dApAQCAtMzYxLDIyICszNzEsMjcgQEAgRE9NU3R5bGVTaGVldExpc3Q6On5ET01TdHlsZVNoZWV0
TGlzdCgpCiAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBsLmdldCgp
KTsKIH0KIAotVmFsdWUgRE9NU3R5bGVTaGVldExpc3Q6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnApIGNvbnN0Citib29sIERPTVN0eWxlU2hlZXRMaXN0OjpnZXRPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1
bHQpIGNvbnN0CiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKICAga2REZWJ1Zyg2MDcwKSA8PCAiRE9N
U3R5bGVTaGVldExpc3Q6OmdldCAiIDw8IHAucXN0cmluZygpIDw8IGVuZGw7CiAjZW5kaWYKICAg
U3R5bGVTaGVldExpc3RJbXBsICZzdHlsZVNoZWV0TGlzdCA9ICptX2ltcGw7Ci0gIGlmIChwID09
IGxlbmd0aFByb3BlcnR5TmFtZSkKLSAgICByZXR1cm4gTnVtYmVyKHN0eWxlU2hlZXRMaXN0Lmxl
bmd0aCgpKTsKLSAgZWxzZSBpZiAocCA9PSAiaXRlbSIpCi0gICAgcmV0dXJuIGxvb2t1cE9yQ3Jl
YXRlRnVuY3Rpb248RE9NU3R5bGVTaGVldExpc3RGdW5jPihleGVjLHAsdGhpcyxET01TdHlsZVNo
ZWV0TGlzdDo6SXRlbSwxLERvbnREZWxldGV8RnVuY3Rpb24pOworICBpZiAocCA9PSBsZW5ndGhQ
cm9wZXJ0eU5hbWUpIHsKKyAgICByZXN1bHQgPSBOdW1iZXIoc3R5bGVTaGVldExpc3QubGVuZ3Ro
KCkpOworICAgIHJldHVybiB0cnVlOworICB9IGVsc2UgaWYgKHAgPT0gIml0ZW0iKSB7CisgICAg
cmVzdWx0ID0gbG9va3VwT3JDcmVhdGVGdW5jdGlvbjxET01TdHlsZVNoZWV0TGlzdEZ1bmM+KGV4
ZWMsIHAsIHRoaXMsIERPTVN0eWxlU2hlZXRMaXN0OjpJdGVtLCAxLCBEb250RGVsZXRlfEZ1bmN0
aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQogCiAgIC8vIFJldHJpZXZlIHN0eWxlc2hlZXQg
YnkgaW5kZXgKICAgYm9vbCBvazsKICAgbG9uZyB1bnNpZ25lZCBpbnQgdSA9IHAudG9VTG9uZygm
b2spOwotICBpZiAob2spCi0gICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3R5bGVT
aGVldExpc3QuaXRlbSh1KSk7CisgIGlmIChvaykgeworICAgIHJlc3VsdCA9IGdldERPTVN0eWxl
U2hlZXQoZXhlYywgc3R5bGVTaGVldExpc3QuaXRlbSh1KSk7CisgICAgcmV0dXJuIHRydWU7Cisg
IH0KIAogICAvLyBJRSBhbHNvIHN1cHBvcnRzIHJldHJpZXZpbmcgYSBzdHlsZXNoZWV0IGJ5IG5h
bWUsIHVzaW5nIHRoZSBuYW1lL2lkIG9mIHRoZSA8c3R5bGU+IHRhZwogICAvLyAodGhpcyBpcyBj
b25zaXN0ZW50IHdpdGggYWxsIHRoZSBvdGhlciBjb2xsZWN0aW9ucykKQEAgLTQwNSwxMCArNDIw
LDEyIEBAIFZhbHVlIERPTVN0eWxlU2hlZXRMaXN0OjpnZXQoRXhlY1N0YXRlICoKICAgLy8gYW5k
IGRvZXNuJ3QgbG9vayBmb3IgbmFtZSBhdHRyaWJ1dGUgKHNlZSBpbXBsZW1lbnRhdGlvbiBhYm92
ZSkuCiAgIC8vIEJ1dCB1bmljaXR5IG9mIHN0eWxlc2hlZXQgaWRzIGlzIGdvb2QgcHJhY3RpY2Ug
YW55d2F5IDspCiAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0gbV9kb2MtPmdldEVsZW1lbnRCeUlk
KHAuc3RyaW5nKCkpOwotICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxU
YWdzOjpzdHlsZSgpKSkKLSAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdGF0aWNf
Y2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+c2hlZXQoKSk7CisgIGlmIChl
bGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTFRhZ3M6OnN0eWxlKCkpKSB7CisgICAg
cmVzdWx0ID0gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVt
ZW50SW1wbCAqPihlbGVtZW50KS0+c2hlZXQoKSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KIAot
ICByZXR1cm4gRE9NT2JqZWN0OjpnZXQoZXhlYywgcCk7CisgIHJldHVybiBET01PYmplY3Q6Omdl
dE93blByb3BlcnR5KGV4ZWMsIHAsIHJlc3VsdCk7CiB9CiAKIFZhbHVlSW1wICpnZXRET01TdHls
ZVNoZWV0TGlzdChFeGVjU3RhdGUgKmV4ZWMsIFN0eWxlU2hlZXRMaXN0SW1wbCAqc3NsLCBEb2N1
bWVudEltcGwgKmRvYykKQEAgLTQ3MCwyMCArNDg3LDI1IEBAIERPTU1lZGlhTGlzdDo6fkRPTU1l
ZGlhTGlzdCgpCiAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBsLmdl
dCgpKTsKIH0KIAotVmFsdWUgRE9NTWVkaWFMaXN0OjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwKSBjb25zdAorYm9vbCBET01NZWRpYUxpc3Q6OmdldE93blByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29u
c3QKIHsKICAgTWVkaWFMaXN0SW1wbCAmbWVkaWFMaXN0ID0gKm1faW1wbDsKLSAgaWYgKHAgPT0g
Im1lZGlhVGV4dCIpCi0gICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChtZWRpYUxpc3QubWVkaWFU
ZXh0KCkpOwotICBlbHNlIGlmIChwID09IGxlbmd0aFByb3BlcnR5TmFtZSkKLSAgICByZXR1cm4g
TnVtYmVyKG1lZGlhTGlzdC5sZW5ndGgoKSk7CisgIGlmIChwID09ICJtZWRpYVRleHQiKSB7Cisg
ICAgcmVzdWx0ID0gZ2V0U3RyaW5nT3JOdWxsKG1lZGlhTGlzdC5tZWRpYVRleHQoKSk7CisgICAg
cmV0dXJuIHRydWU7CisgIH0gZWxzZSBpZiAocCA9PSBsZW5ndGhQcm9wZXJ0eU5hbWUpIHsKKyAg
ICByZXN1bHQgPSBOdW1iZXIobWVkaWFMaXN0Lmxlbmd0aCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
KyAgfQogCiAgIGJvb2wgb2s7CiAgIGxvbmcgdW5zaWduZWQgaW50IHUgPSBwLnRvVUxvbmcoJm9r
KTsKLSAgaWYgKG9rKQotICAgIHJldHVybiBnZXRTdHJpbmdPck51bGwobWVkaWFMaXN0Lml0ZW0o
dSkpOworICBpZiAob2spIHsKKyAgICByZXN1bHQgPSBnZXRTdHJpbmdPck51bGwobWVkaWFMaXN0
Lml0ZW0odSkpOworICAgIHJldHVybiB0cnVlOworICB9CiAKLSAgcmV0dXJuIERPTU9iamVjdDo6
Z2V0KGV4ZWMsIHApOworICByZXR1cm4gRE9NT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eShleGVjLCBw
LCByZXN1bHQpOwogfQogCiB2b2lkIERPTU1lZGlhTGlzdDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBh
dHRyKQpAQCAtNTU0LDE0ICs1NzYsMTcgQEAgRE9NQ1NTU3R5bGVTaGVldDo6fkRPTUNTU1N0eWxl
U2hlZXQoKQogewogfQogCi1WYWx1ZSBET01DU1NTdHlsZVNoZWV0OjpnZXQoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdAorYm9vbCBET01DU1NTdHlsZVNoZWV0Ojpn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVl
JiByZXN1bHQpIGNvbnN0CiB7CiAgIENTU1N0eWxlU2hlZXRJbXBsICZjc3NTdHlsZVNoZWV0ID0g
KnN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsICo+KGltcGwoKSk7Ci0gIGlmIChwID09ICJv
d25lclJ1bGUiKQotICAgIHJldHVybiBnZXRET01DU1NSdWxlKGV4ZWMsY3NzU3R5bGVTaGVldC5v
d25lclJ1bGUoKSk7Ci0gIGVsc2UgaWYgKHAgPT0gImNzc1J1bGVzIiB8fCBwID09ICJydWxlcyIg
LyogTVNJRSBleHRlbnNpb24gKi8pCi0gICAgcmV0dXJuIGdldERPTUNTU1J1bGVMaXN0KGV4ZWMs
Y3NzU3R5bGVTaGVldC5jc3NSdWxlcygpKTsKLSAgcmV0dXJuIERPTVN0eWxlU2hlZXQ6OmdldChl
eGVjLHApOworICBpZiAocCA9PSAib3duZXJSdWxlIikgeworICAgIHJlc3VsdCA9IGdldERPTUNT
U1J1bGUoZXhlYyxjc3NTdHlsZVNoZWV0Lm93bmVyUnVsZSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
KyAgfSBlbHNlIGlmIChwID09ICJjc3NSdWxlcyIgfHwgcCA9PSAicnVsZXMiIC8qIE1TSUUgZXh0
ZW5zaW9uICovKSB7CisgICAgcmVzdWx0ID0gIGdldERPTUNTU1J1bGVMaXN0KGV4ZWMsY3NzU3R5
bGVTaGVldC5jc3NSdWxlcygpKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICByZXR1cm4gRE9N
U3R5bGVTaGVldDo6Z2V0T3duUHJvcGVydHkoZXhlYywgcCwgcmVzdWx0KTsKIH0KIAogVmFsdWUg
RE9NQ1NTU3R5bGVTaGVldFByb3RvRnVuYzo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKQEAgLTYwNywyMCArNjMyLDI1IEBAIERPTUNTU1J1
bGVMaXN0Ojp+RE9NQ1NTUnVsZUxpc3QoKQogICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9N
T2JqZWN0KG1faW1wbC5nZXQoKSk7CiB9CiAKLVZhbHVlIERPTUNTU1J1bGVMaXN0OjpnZXQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdAorYm9vbCBET01DU1NSdWxl
TGlzdDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
LCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewogICBDU1NSdWxlTGlzdEltcGwgJmNzc1J1bGVMaXN0
ID0gKm1faW1wbDsKLSAgaWYgKHAgPT0gbGVuZ3RoUHJvcGVydHlOYW1lKQotICAgIHJldHVybiBO
dW1iZXIoY3NzUnVsZUxpc3QubGVuZ3RoKCkpOwotICBlbHNlIGlmIChwID09ICJpdGVtIikKLSAg
ICByZXR1cm4gbG9va3VwT3JDcmVhdGVGdW5jdGlvbjxET01DU1NSdWxlTGlzdEZ1bmM+KGV4ZWMs
IHAsIHRoaXMsIERPTUNTU1J1bGVMaXN0OjpJdGVtLCAxLCBEb250RGVsZXRlfEZ1bmN0aW9uKTsK
KyAgaWYgKHAgPT0gbGVuZ3RoUHJvcGVydHlOYW1lKSB7CisgICAgcmVzdWx0ID0gTnVtYmVyKGNz
c1J1bGVMaXN0Lmxlbmd0aCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfSBlbHNlIGlmIChwID09
ICJpdGVtIikgeworICAgIHJlc3VsdCA9IGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248RE9NQ1NTUnVs
ZUxpc3RGdW5jPihleGVjLCBwLCB0aGlzLCBET01DU1NSdWxlTGlzdDo6SXRlbSwgMSwgRG9udERl
bGV0ZXxGdW5jdGlvbik7CisgICAgcmV0dXJuIHRydWU7CisgIH0KIAogICBib29sIG9rOwogICBs
b25nIHVuc2lnbmVkIGludCB1ID0gcC50b1VMb25nKCZvayk7Ci0gIGlmIChvaykKLSAgICByZXR1
cm4gZ2V0RE9NQ1NTUnVsZShleGVjLCBjc3NSdWxlTGlzdC5pdGVtKHUpKTsKKyAgaWYgKG9rKSB7
CisgICAgcmVzdWx0ID0gZ2V0RE9NQ1NTUnVsZShleGVjLCBjc3NSdWxlTGlzdC5pdGVtKHUpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKKyAgfQogCi0gIHJldHVybiBET01PYmplY3Q6OmdldChleGVjLCBw
KTsKKyAgcmV0dXJuIERPTU9iamVjdDo6Z2V0T3duUHJvcGVydHkoZXhlYywgcCwgcmVzdWx0KTsK
IH0KIAogVmFsdWUgRE9NQ1NTUnVsZUxpc3RGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2Jq
ZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQpAQCAtNzE1LDIwICs3NDUsMTcgQEAgY29u
c3QgQ2xhc3NJbmZvKiBET01DU1NSdWxlOjpjbGFzc0luZm8oKQogICBlbmNvZGluZwkJRE9NQ1NT
UnVsZTo6Q2hhcnNldF9FbmNvZGluZwlEb250RGVsZXRlCiBAZW5kCiAqLwotVmFsdWUgRE9NQ1NT
UnVsZTo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdAorYm9vbCBET01DU1NSdWxlOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsK
LSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8ICJET01DU1NSdWxlOjpnZXQg
IiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgY29uc3QgSGFz
aEVudHJ5ICplbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KGNsYXNzSW5mbygpLT5wcm9wSGFzaFRh
YmxlLCBwcm9wZXJ0eU5hbWUpOworICAvLyBmaXJzdCB0cnkgdGhlIHByb3BlcnRpZXMgc3BlY2lm
aWMgdG8gdGhpcyBydWxlIHR5cGUKKyAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6
ZmluZEVudHJ5KGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlLCBwcm9wZXJ0eU5hbWUpOwogICBp
ZiAoZW50cnkpIHsKLSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikKLSAgICAgIHJldHVy
biBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPERPTUNTU1J1bGVGdW5jPihleGVjLCBwcm9wZXJ0eU5h
bWUsIHRoaXMsIGVudHJ5LT52YWx1ZSwgZW50cnktPnBhcmFtcywgZW50cnktPmF0dHIpOwotICAg
IHJldHVybiBnZXRWYWx1ZVByb3BlcnR5KGV4ZWMsIGVudHJ5LT52YWx1ZSk7CisgICAgcmVzdWx0
ID0gZ2V0VmFsdWVQcm9wZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOworICAgIHJldHVybiB0cnVl
OwogICB9Ci0KLSAgLy8gQmFzZSBDU1NSdWxlIHN0dWZmIG9yIHBhcmVudCBjbGFzcyBmb3J3YXJk
LCBhcyB1c3VhbAotICByZXR1cm4gbG9va3VwR2V0PERPTUNTU1J1bGVGdW5jLCBET01DU1NSdWxl
LCBET01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkRPTUNTU1J1bGVUYWJsZSwgdGhpcyk7
CisgIAorICAvLyBub3cgdGhlIHN0dWZmIHRoYXQgYXBwbGllcyB0byBhbGwgcnVsZXMKKyAgcmV0
dXJuIGxvb2t1cEdldE93blByb3BlcnR5PERPTUNTU1J1bGVGdW5jLCBET01DU1NSdWxlLCBET01P
YmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkRPTUNTU1J1bGVUYWJsZSwgdGhpcywgcmVzdWx0
KTsKIH0KIAogVmFsdWUgRE9NQ1NTUnVsZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKQEAgLTc3OSw3ICs4MDYsNyBAQCBWYWx1ZSBET01DU1NSdWxl
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChzdGF0
aWNfY2FzdDxDU1NDaGFyc2V0UnVsZUltcGwgKj4obV9pbXBsLmdldCgpKS0+ZW5jb2RpbmcoKSk7
CiAKICAgZGVmYXVsdDoKLSAgICBrZFdhcm5pbmcoKSA8PCAiRE9NQ1NTUnVsZTo6Z2V0VmFsdWVQ
cm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBlbmRsOworICAgIGFzc2VydCgw
KTsKICAgfQogICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CkBAIC04NjYsOSArODkzLDkgQEAgY29u
c3QgQ2xhc3NJbmZvIENTU1J1bGVDb25zdHJ1Y3Rvcjo6aW5mbwogQGVuZAogKi8KIAotVmFsdWUg
Q1NTUnVsZUNvbnN0cnVjdG9yOjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwKSBjb25zdAorYm9vbCBDU1NSdWxlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsK
LSAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPENTU1J1bGVDb25zdHJ1Y3RvcixET01PYmplY3Q+KGV4
ZWMscCwmQ1NTUnVsZUNvbnN0cnVjdG9yVGFibGUsdGhpcyk7CisgIHJldHVybiBsb29rdXBHZXRP
d25WYWx1ZTxDU1NSdWxlQ29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywgcCwgJkNTU1J1bGVD
b25zdHJ1Y3RvclRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCiBWYWx1ZSBDU1NSdWxlQ29uc3Ry
dWN0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKQEAg
LTkxMiwxNCArOTM5LDE4IEBAIERPTUNTU1ZhbHVlOjp+RE9NQ1NTVmFsdWUoKQogICBTY3JpcHRJ
bnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7CiB9CiAKLVZhbHVlIERP
TUNTU1ZhbHVlOjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBjb25z
dAorYm9vbCBET01DU1NWYWx1ZTo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewogICBDU1NWYWx1ZUltcGwg
JmNzc1ZhbHVlID0gKm1faW1wbDsKLSAgaWYgKHAgPT0gImNzc1RleHQiKQotICAgIHJldHVybiBn
ZXRTdHJpbmdPck51bGwoY3NzVmFsdWUuY3NzVGV4dCgpKTsKLSAgZWxzZSBpZiAocCA9PSAiY3Nz
VmFsdWVUeXBlIik7Ci0gICAgcmV0dXJuIE51bWJlcihjc3NWYWx1ZS5jc3NWYWx1ZVR5cGUoKSk7
Ci0gIHJldHVybiBET01PYmplY3Q6OmdldChleGVjLHApOworICBpZiAocCA9PSAiY3NzVGV4dCIp
IHsKKyAgICByZXN1bHQgPSBnZXRTdHJpbmdPck51bGwoY3NzVmFsdWUuY3NzVGV4dCgpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKKyAgfSBlbHNlIGlmIChwID09ICJjc3NWYWx1ZVR5cGUiKTsgeworICAg
IHJlc3VsdCA9IE51bWJlcihjc3NWYWx1ZS5jc3NWYWx1ZVR5cGUoKSk7CisgICAgcmV0dXJuIHRy
dWU7CisgIH0KKworICByZXR1cm4gRE9NT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwLCBy
ZXN1bHQpOwogfQogCiB2b2lkIERPTUNTU1ZhbHVlOjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIp
CkBAIC05NjIsOSArOTkzLDkgQEAgY29uc3QgQ2xhc3NJbmZvIENTU1ZhbHVlQ29uc3RydWN0b3I6
OmluZgogICBDU1NfQ1VTVE9NCQlDU1NWYWx1ZUNvbnN0cnVjdG9yOjpDU1NfQ1VTVE9NCQkJRG9u
dERlbGV0ZXxSZWFkT25seQogQGVuZAogKi8KLVZhbHVlIENTU1ZhbHVlQ29uc3RydWN0b3I6Omdl
dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnApIGNvbnN0Citib29sIENTU1Zh
bHVlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSAgcmV0dXJuIGxvb2t1cEdldFZh
bHVlPENTU1ZhbHVlQ29uc3RydWN0b3IsRE9NT2JqZWN0PihleGVjLHAsJkNTU1ZhbHVlQ29uc3Ry
dWN0b3JUYWJsZSx0aGlzKTsKKyAgcmV0dXJuIGxvb2t1cEdldE93blZhbHVlPENTU1ZhbHVlQ29u
c3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywgcCwgJkNTU1ZhbHVlQ29uc3RydWN0b3JUYWJsZSwg
dGhpcywgcmVzdWx0KTsKIH0KIAogVmFsdWUgQ1NTVmFsdWVDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdApAQCAtMTAxNCwxMSArMTA0NSwx
NCBAQCBET01DU1NQcmltaXRpdmVWYWx1ZTo6RE9NQ1NTUHJpbWl0aXZlVmFsCiAgIHNldFByb3Rv
dHlwZShET01DU1NQcmltaXRpdmVWYWx1ZVByb3RvOjpzZWxmKGV4ZWMpKTsKIH0KIAotVmFsdWUg
RE9NQ1NTUHJpbWl0aXZlVmFsdWU6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnApIGNvbnN0Citib29sIERPTUNTU1ByaW1pdGl2ZVZhbHVlOjpnZXRPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0
CiB7Ci0gIGlmIChwID09ICJwcmltaXRpdmVUeXBlIikKLSAgICByZXR1cm4gTnVtYmVyKHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqPihpbXBsKCkpLT5wcmltaXRpdmVUeXBlKCkp
OwotICByZXR1cm4gRE9NT2JqZWN0OjpnZXQoZXhlYyxwKTsKKyAgaWYgKHAgPT0gInByaW1pdGl2
ZVR5cGUiKSB7CisgICAgcmVzdWx0ID0gTnVtYmVyKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlSW1wbCAqPihpbXBsKCkpLT5wcmltaXRpdmVUeXBlKCkpOworICAgIHJldHVybiByZXN1bHQ7
CisgIH0KKworICByZXR1cm4gRE9NT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwLCByZXN1
bHQpOwogfQogCiBWYWx1ZSBET01DU1NQcmltaXRpdmVWYWx1ZVByb3RvRnVuYzo6Y2FsbChFeGVj
U3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKQEAgLTEwODcs
OSArMTEyMSw5IEBAIGNvbnN0IENsYXNzSW5mbyBDU1NQcmltaXRpdmVWYWx1ZUNvbnN0cnUKIEBl
bmQKICovCiAKLVZhbHVlIENTU1ByaW1pdGl2ZVZhbHVlQ29uc3RydWN0b3I6OmdldChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnApIGNvbnN0Citib29sIENTU1ByaW1pdGl2ZVZh
bHVlQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSAgcmV0dXJuIGxvb2t1cEdldFZh
bHVlPENTU1ByaW1pdGl2ZVZhbHVlQ29uc3RydWN0b3IsQ1NTVmFsdWVDb25zdHJ1Y3Rvcj4oZXhl
YyxwLCZDU1NQcmltaXRpdmVWYWx1ZUNvbnN0cnVjdG9yVGFibGUsdGhpcyk7CisgIHJldHVybiBs
b29rdXBHZXRPd25WYWx1ZTxDU1NQcmltaXRpdmVWYWx1ZUNvbnN0cnVjdG9yLCBDU1NWYWx1ZUNv
bnN0cnVjdG9yPihleGVjLCBwLCAmQ1NTUHJpbWl0aXZlVmFsdWVDb25zdHJ1Y3RvclRhYmxlLCB0
aGlzLCByZXN1bHQpOwogfQogCiBWYWx1ZSBDU1NQcmltaXRpdmVWYWx1ZUNvbnN0cnVjdG9yOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CkBAIC0xMTIwLDIx
ICsxMTU0LDI2IEBAIERPTUNTU1ZhbHVlTGlzdDo6RE9NQ1NTVmFsdWVMaXN0KEV4ZWNTdGEKIHsg
CiB9CiAKLVZhbHVlIERPTUNTU1ZhbHVlTGlzdDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcCkgY29uc3QKK2Jvb2wgRE9NQ1NTVmFsdWVMaXN0OjpnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNv
bnN0CiB7CiAgIENTU1ZhbHVlTGlzdEltcGwgJnZhbHVlTGlzdCA9ICpzdGF0aWNfY2FzdDxDU1NW
YWx1ZUxpc3RJbXBsICo+KGltcGwoKSk7CiAKLSAgaWYgKHAgPT0gbGVuZ3RoUHJvcGVydHlOYW1l
KQotICAgIHJldHVybiBOdW1iZXIodmFsdWVMaXN0Lmxlbmd0aCgpKTsKLSAgZWxzZSBpZiAocCA9
PSAiaXRlbSIpCi0gICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248RE9NQ1NTVmFsdWVM
aXN0RnVuYz4oZXhlYyxwLHRoaXMsRE9NQ1NTVmFsdWVMaXN0OjpJdGVtLDEsRG9udERlbGV0ZXxG
dW5jdGlvbik7CisgIGlmIChwID09IGxlbmd0aFByb3BlcnR5TmFtZSkgeworICAgIHJlc3VsdCA9
IE51bWJlcih2YWx1ZUxpc3QubGVuZ3RoKCkpOworICAgIHJldHVybiB0cnVlOworICB9IGVsc2Ug
aWYgKHAgPT0gIml0ZW0iKSB7CisgICAgcmVzdWx0ID0gbG9va3VwT3JDcmVhdGVGdW5jdGlvbjxE
T01DU1NWYWx1ZUxpc3RGdW5jPihleGVjLHAsdGhpcyxET01DU1NWYWx1ZUxpc3Q6Okl0ZW0sMSxE
b250RGVsZXRlfEZ1bmN0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQogCiAgIGJvb2wgb2s7
CiAgIGxvbmcgdW5zaWduZWQgaW50IHUgPSBwLnRvVUxvbmcoJm9rKTsKLSAgaWYgKG9rKQotICAg
IHJldHVybiBnZXRET01DU1NWYWx1ZShleGVjLHZhbHVlTGlzdC5pdGVtKHUpKTsKKyAgaWYgKG9r
KSB7CisgICAgcmVzdWx0ID0gZ2V0RE9NQ1NTVmFsdWUoZXhlYyx2YWx1ZUxpc3QuaXRlbSh1KSk7
CisgICAgcmV0dXJuIHRydWU7CisgIH0KIAotICByZXR1cm4gRE9NQ1NTVmFsdWU6OmdldChleGVj
LHApOworICByZXR1cm4gRE9NQ1NTVmFsdWU6OmdldE93blByb3BlcnR5KGV4ZWMsIHAsIHJlc3Vs
dCk7CiB9CiAKIFZhbHVlIERPTUNTU1ZhbHVlTGlzdEZ1bmM6OmNhbGwoRXhlY1N0YXRlICpleGVj
LCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCkBAIC0xMTY5LDExICsxMjA4LDkg
QEAgRE9NUkdCQ29sb3I6On5ET01SR0JDb2xvcigpCiAgIC8vcmdiQ29sb3JzLnJlbW92ZShyZ2JD
b2xvci5oYW5kbGUoKSk7CiB9CiAKLVZhbHVlIERPTVJHQkNvbG9yOjpnZXQoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdAorYm9vbCBET01SR0JDb2xvcjo6Z2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVz
dWx0KSBjb25zdAogewotICByZXR1cm4gbG9va3VwR2V0VmFsdWU8RE9NUkdCQ29sb3IsRE9NT2Jq
ZWN0PihleGVjLCBwLAotCQkJCQkJICAgICAgICZET01SR0JDb2xvclRhYmxlLAotCQkJCQkJICAg
ICAgIHRoaXMpOworICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9NUkdCQ29sb3IsIERPTU9i
amVjdD4oZXhlYywgcCwgJkRPTVJHQkNvbG9yVGFibGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKIFZh
bHVlIERPTVJHQkNvbG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdApAQCAtMTIxNSwxMCArMTI1Miw5IEBAIERPTVJlY3Q6On5ET01SZWN0KCkKICAg
U2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldERPTU9iamVjdChtX3JlY3QuZ2V0KCkpOwogfQogCi1W
YWx1ZSBET01SZWN0OjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBj
b25zdAorYm9vbCBET01SZWN0OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0gIHJldHVybiBsb29rdXBH
ZXRWYWx1ZTxET01SZWN0LERPTU9iamVjdD4oZXhlYywgcCwKLQkJCQkJCSAgICAmRE9NUmVjdFRh
YmxlLCB0aGlzKTsKKyAgcmV0dXJuIGxvb2t1cEdldE93blZhbHVlPERPTVJlY3QsIERPTU9iamVj
dD4oZXhlYywgcCwgJkRPTVJlY3RUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFsdWUgRE9N
UmVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
QEAgLTEyNTksMTAgKzEyOTUsOSBAQCBET01Db3VudGVyOjp+RE9NQ291bnRlcigpCiAgIFNjcmlw
dEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3QobV9jb3VudGVyLmdldCgpKTsKIH0KIAotVmFs
dWUgRE9NQ291bnRlcjo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCkg
Y29uc3QKK2Jvb2wgRE9NQ291bnRlcjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewotICByZXR1cm4gbG9v
a3VwR2V0VmFsdWU8RE9NQ291bnRlcixET01PYmplY3Q+KGV4ZWMsIHAsCi0JCQkJCQkgICAgICAg
JkRPTUNvdW50ZXJUYWJsZSwgdGhpcyk7CisgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01D
b3VudGVyLCBET01PYmplY3Q+KGV4ZWMsIHAsICZET01Db3VudGVyVGFibGUsIHRoaXMsIHJlc3Vs
dCk7CiB9CiAKIFZhbHVlIERPTUNvdW50ZXI6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICos
IGludCB0b2tlbikgY29uc3QKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtdSAtcCAtcjEuMTYgV2ViQ29yZS9raHRt
bC9lY21hL2tqc19jc3MuaAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuaAkxOSBKdWwg
MjAwNSAxOTo1Mjo0OCAtMDAwMAkxLjE2CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5o
CTI1IEp1bCAyMDA1IDA2OjA0OjM3IC0wMDAwCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICBwdWJsaWM6CiAgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbihFeGVjU3RhdGUgKmV4
ZWMsIERPTTo6Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnMpOwogICAgIHZpcnR1YWwgfkRPTUNT
U1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCBib29sIGhhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25z
dDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KQEAgLTY4LDcgKzY4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoK
ICAgICBET01TdHlsZVNoZWV0KEV4ZWNTdGF0ZSAqLCBET006OlN0eWxlU2hlZXRJbXBsICpzcykg
OiBtX2ltcGwoc3MpIHsgfQogICAgIHZpcnR1YWwgfkRPTVN0eWxlU2hlZXQoKTsKLSAgICB2aXJ0
dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25z
dDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9u
ZSk7CiAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQpAQCAtOTAsNyArOTAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBET01TdHls
ZVNoZWV0TGlzdChFeGVjU3RhdGUgKiwgRE9NOjpTdHlsZVNoZWV0TGlzdEltcGwgKnNzbCwgRE9N
OjpEb2N1bWVudEltcGwgKmRvYykKICAgICAgIDogbV9pbXBsKHNzbCksIG1fZG9jKGRvYykgeyB9
CiAgICAgdmlydHVhbCB+RE9NU3R5bGVTaGVldExpc3QoKTsKLSAgICB2aXJ0dWFsIFZhbHVlIGdl
dChFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgLy8gbm8g
cHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4o
RXhlY1N0YXRlKiApIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTEwOSw3ICsxMDksNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIERPTU1lZGlhTGlzdChFeGVjU3RhdGUgKiwg
RE9NOjpNZWRpYUxpc3RJbXBsICptbCk7CiAgICAgdmlydHVhbCB+RE9NTWVkaWFMaXN0KCk7Ci0g
ICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25l
KTsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSogKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CkBAIC0xMjcsNyArMTI3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
IHB1YmxpYzoKICAgICBET01DU1NTdHlsZVNoZWV0KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpDU1NT
dHlsZVNoZWV0SW1wbCAqc3MpOwogICAgIHZpcnR1YWwgfkRPTUNTU1N0eWxlU2hlZXQoKTsKLSAg
ICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciAmcHJv
cGVydHlOYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkg
Y29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gaW5mbzsKQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgcHVibGljOgogICAgIERPTUNTU1J1bGVMaXN0KEV4ZWNTdGF0ZSAqLCBET006OkNTU1J1
bGVMaXN0SW1wbCAqcmwpIDogbV9pbXBsKHJsKSB7IH0KICAgICB2aXJ0dWFsIH5ET01DU1NSdWxl
TGlzdCgpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVu
dGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmly
dHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9
CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtMTU1LDcgKzE1NSw3IEBAIG5h
bWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgRE9NQ1NTUnVsZShFeGVjU3RhdGUgKiwgRE9N
OjpDU1NSdWxlSW1wbCAqcikgOiBtX2ltcGwocikgeyB9CiAgICAgdmlydHVhbCB+RE9NQ1NTUnVs
ZSgpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYg
cmVzdWx0KSBjb25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGlu
dCBhdHRyID0gTm9uZSk7CiAgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyKTsKQEAgLTE3OCw3ICsx
NzgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgQ1NTUnVsZUNvbnN0cnVjdG9yIDogcHVi
bGljIERPTU9iamVjdCB7CiAgIHB1YmxpYzoKICAgICBDU1NSdWxlQ29uc3RydWN0b3IoRXhlY1N0
YXRlICopIHsgfQotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBW
YWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5
CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICZpbmZvOyB9CkBAIC0xOTIsNyArMTkyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoK
ICAgICBET01DU1NWYWx1ZShFeGVjU3RhdGUgKiwgRE9NOjpDU1NWYWx1ZUltcGwgKnYpIDogbV9p
bXBsKHYpIHsgfQogICAgIHZpcnR1YWwgfkRPTUNTU1ZhbHVlKCk7Ci0gICAgdmlydHVhbCBWYWx1
ZSBnZXQoRXhlY1N0YXRlICpleGVjLGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICB2aXJ0dWFs
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC0yMTEsNyArMjExLDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgIGNsYXNzIENTU1ZhbHVlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0
IHsKICAgcHVibGljOgogICAgIENTU1ZhbHVlQ29uc3RydWN0b3IoRXhlY1N0YXRlICopIHsgfQot
ICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyICZw
cm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0
KSBjb25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVh
bCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkBA
IC0yMjQsNyArMjI0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIERPTUNTU1ByaW1pdGl2
ZVZhbHVlIDogcHVibGljIERPTUNTU1ZhbHVlIHsKICAgcHVibGljOgogICAgIERPTUNTU1ByaW1p
dGl2ZVZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpDU1NQcmltaXRpdmVWYWx1ZUltcGwgKnYp
OwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVz
dWx0KSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtMjM2LDcgKzIzNiw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICBjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZUNvbnN0cnVjdG9yIDogcHVibGljIENT
U1ZhbHVlQ29uc3RydWN0b3IgewogICBwdWJsaWM6CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWVDb25z
dHJ1Y3RvcihFeGVjU3RhdGUgKmV4ZWMpIDogQ1NTVmFsdWVDb25zdHJ1Y3RvcihleGVjKSB7IH0K
LSAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3Vs
dCkgY29uc3Q7CiAgICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1
YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQpA
QCAtMjQ4LDcgKzI0OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBET01DU1NWYWx1ZUxp
c3QgOiBwdWJsaWMgRE9NQ1NTVmFsdWUgewogICBwdWJsaWM6CiAgICAgRE9NQ1NTVmFsdWVMaXN0
KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpDU1NWYWx1ZUxpc3RJbXBsICpsKTsKLSAgICB2aXJ0dWFs
IFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAg
ICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gaW5mbzsKQEAgLTI1OSw3ICsyNTksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVi
bGljOgogICAgIERPTVJHQkNvbG9yKHVuc2lnbmVkIGNvbG9yKSA6IG1fY29sb3IoY29sb3IpIHsg
fQogICAgIH5ET01SR0JDb2xvcigpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAq
ZXhlYyxjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBh
bGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CkBAIC0yNzUsNyArMjc1LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgIHB1YmxpYzoKICAgICBET01SZWN0KEV4ZWNTdGF0ZSAqLCBET006OlJlY3RJbXBsICpyKSA6
IG1fcmVjdChyKSB7IH0KICAgICB+RE9NUmVjdCgpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4
ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBWYWx1ZSBnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBu
byBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkBAIC0yOTEsNyArMjkxLDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBET01Db3VudGVyKEV4ZWNTdGF0ZSAqLCBET006OkNv
dW50ZXJJbXBsICpjKSA6IG1fY291bnRlcihjKSB7IH0KICAgICB+RE9NQ291bnRlcigpOwotICAg
IHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyICZwcm9w
ZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBj
b25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkluZGV4
OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS44MQpkaWZmIC11IC1wIC1yMS44MSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAK
LS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcAkxOSBKdWwgMjAwNSAyMjo0MTo0NyAt
MDAwMAkxLjgxCisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAJMjUgSnVsIDIwMDUg
MDY6MDQ6MzcgLTAwMDAKQEAgLTI3MSwxMiArMjcxLDkgQEAgYm9vbCBET01Ob2RlOjp0b0Jvb2xl
YW4oRXhlY1N0YXRlICopIGNvbgogICBzY3JvbGxIZWlnaHQgIERPTU5vZGU6OlNjcm9sbEhlaWdo
dCAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQogQGVuZAogKi8KLVZhbHVlIERPTU5vZGU6
OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3QKK2Jvb2wgRE9NTm9kZTo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0jaWZkZWYg
S0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiRE9NTm9kZTo6Z2V0ICIgPDwgcHJvcGVy
dHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gIHJldHVybiBsb29rdXBHZXRWYWx1
ZTxET01Ob2RlLCBET01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkRPTU5vZGVUYWJsZSwg
dGhpcyk7CisgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01Ob2RlLCBET01PYmplY3Q+KGV4
ZWMsIHByb3BlcnR5TmFtZSwgJkRPTU5vZGVUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFs
dWUgRE9NTm9kZTo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKQEAgLTczMywzOSArNzMwLDM1IEBAIGJvb2wgRE9NTm9kZUxpc3Q6Omhhc093blByb3Bl
cnR5KEV4ZWNTdGEKICAgcmV0dXJuIE9iamVjdEltcDo6aGFzT3duUHJvcGVydHkoZXhlYywgcCk7
CiB9CiAKLVZhbHVlIERPTU5vZGVMaXN0OjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyICZwKSBjb25zdAorYm9vbCBET01Ob2RlTGlzdDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewot
I2lmZGVmIEtKU19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwgIkRPTU5vZGVMaXN0OjpnZXQg
IiA8PCBwLmFzY2lpKCkgPDwgZW5kbDsKLSNlbmRpZgotICBWYWx1ZSByZXN1bHQ7Ci0KICAgTm9k
ZUxpc3RJbXBsICZsaXN0ID0gKm1faW1wbDsKLSAgaWYgKHAgPT0gbGVuZ3RoUHJvcGVydHlOYW1l
KQorICBpZiAocCA9PSBsZW5ndGhQcm9wZXJ0eU5hbWUpIHsKICAgICByZXN1bHQgPSBOdW1iZXIo
bGlzdC5sZW5ndGgoKSk7Ci0gIGVsc2UgaWYgKHAgPT0gIml0ZW0iKSB7CisgICAgcmV0dXJuIHRy
dWU7CisgIH0gZWxzZSBpZiAocCA9PSAiaXRlbSIpIHsKICAgICAvLyBObyBuZWVkIGZvciBhIGNv
bXBsZXRlIGhhc2h0YWJsZSBmb3IgYSBzaW5nbGUgZnVuYywgYnV0IHdlIHN0aWxsIHdhbnQKICAg
ICAvLyB0byB1c2UgdGhlIGNhY2hpbmcgZmVhdHVyZSBvZiBsb29rdXBPckNyZWF0ZUZ1bmN0aW9u
LgogICAgIHJlc3VsdCA9IGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248RE9NTm9kZUxpc3RGdW5jPihl
eGVjLCBwLCB0aGlzLCBET01Ob2RlTGlzdEZ1bmM6Okl0ZW0sIDEsIERvbnREZWxldGV8RnVuY3Rp
b24pOwotICB9Ci0gIGVsc2UgeworICAgIHJldHVybiB0cnVlOworICB9IGVsc2UgewogICAgIC8v
IGFycmF5IGluZGV4ID8KICAgICBib29sIG9rOwogICAgIGxvbmcgdW5zaWduZWQgaW50IGlkeCA9
IHAudG9VTG9uZygmb2spOwogICAgIGlmIChvaykgewogICAgICAgcmVzdWx0ID0gZ2V0RE9NTm9k
ZShleGVjLGxpc3QuaXRlbShpZHgpKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSB7
CiAgICAgICBOb2RlSW1wbCAqbm9kZSA9IGxpc3QuaXRlbUJ5SWQocC5zdHJpbmcoKSk7CiAKICAg
ICAgIGlmIChub2RlKSB7CiAgICAgICAgIHJlc3VsdCA9IGdldERPTU5vZGUoZXhlYywgbm9kZSk7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBPYmplY3RJbXA6OmdldChleGVjLCBw
KTsKLSAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9IAogICAgIH0KICAgfQog
Ci0gIHJldHVybiByZXN1bHQ7CisgIHJldHVybiBET01Ob2RlTGlzdDo6Z2V0T3duUHJvcGVydHko
ZXhlYywgcCwgcmVzdWx0KTsKIH0KIAogLy8gTmVlZCB0byBzdXBwb3J0IGJvdGggZ2V0IGFuZCBj
YWxsLCBzbyB0aGF0IGxpc3RbMF0gYW5kIGxpc3QoMCkgd29yay4KQEAgLTgyMywxMyArODE2LDkg
QEAgRE9NQXR0cjo6RE9NQXR0cihFeGVjU3RhdGUgKmV4ZWMsIEF0dHJJbQogewogfQogCi1WYWx1
ZSBET01BdHRyOjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUpIGNvbnN0Citib29sIERPTUF0dHI6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAog
ewotI2lmZGVmIEtKU19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwgIkRPTUF0dHI6OnB1dCAi
IDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICByZXR1cm4gbG9v
a3VwR2V0VmFsdWU8RE9NQXR0cixET01Ob2RlPihleGVjLCBwcm9wZXJ0eU5hbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZET01BdHRyVGFibGUs
IHRoaXMgKTsKKyAgcmV0dXJuIGxvb2t1cEdldE93blZhbHVlPERPTUF0dHIsIERPTU5vZGU+KGV4
ZWMsIHByb3BlcnR5TmFtZSwgJkRPTUF0dHJUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFs
dWUgRE9NQXR0cjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3QKQEAgLTk0MywxMyArOTMyLDkgQEAgRE9NRG9jdW1lbnQ6On5ET01Eb2N1bWVudCgpCiAg
IFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01PYmplY3Qoc3RhdGljX2Nhc3Q8RG9jdW1lbnRJ
bXBsICo+KG1faW1wbC5nZXQoKSkpOwogfQogCi1WYWx1ZSBET01Eb2N1bWVudDo6Z2V0KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBE
T01Eb2N1bWVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0jaWZkZWYgS0pTX1ZF
UkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiRE9NRG9jdW1lbnQ6OmdldCAiIDw8IHByb3BlcnR5
TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICByZXR1cm4gbG9va3VwR2V0VmFsdWU8
RE9NRG9jdW1lbnQsIERPTU5vZGU+KAotICAgIGV4ZWMsIHByb3BlcnR5TmFtZSwgJkRPTURvY3Vt
ZW50VGFibGUsIHRoaXMpOworICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9NRG9jdW1lbnQs
IERPTU5vZGU+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkRPTURvY3VtZW50VGFibGUsIHRoaXMsIHJl
c3VsdCk7CiB9CiAKIFZhbHVlIERPTURvY3VtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdApAQCAtMTE2MSwzOSArMTE0Niw0MiBAQCBET01FbGVt
ZW50OjpET01FbGVtZW50KEVsZW1lbnRJbXBsICplKQogeyAKIH0KIAotVmFsdWUgRE9NRWxlbWVu
dDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBj
b25zdAorYm9vbCBET01FbGVtZW50OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSNp
ZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8ICJET01FbGVtZW50OjpnZXQgIiA8
PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKICAgRWxlbWVudEltcGwg
JmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4oaW1wbCgpKTsKIAogICBjb25z
dCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJkRPTUVsZW1lbnRUYWJsZSwg
cHJvcGVydHlOYW1lKTsKICAgaWYgKGVudHJ5KQogICB7Ci0gICAgc3dpdGNoKCBlbnRyeS0+dmFs
dWUgKSB7CisgICAgc3dpdGNoIChlbnRyeS0+dmFsdWUpIHsKICAgICBjYXNlIFRhZ05hbWU6Ci0g
ICAgICByZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKGVsZW1lbnQubm9kZU5hbWUoKSk7CisgICAgICBy
ZXN1bHQgPSBnZXRTdHJpbmdPck51bGwoZWxlbWVudC5ub2RlTmFtZSgpKTsKKyAgICAgIGJyZWFr
OwogICAgIGNhc2UgU3R5bGU6Ci0gICAgICByZXR1cm4gZ2V0RE9NQ1NTU3R5bGVEZWNsYXJhdGlv
bihleGVjLGVsZW1lbnQuc3R5bGUoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGtkV2FybmluZygp
IDw8ICJVbmhhbmRsZWQgdG9rZW4gaW4gRE9NRWxlbWVudDo6Z2V0IDogIiA8PCBlbnRyeS0+dmFs
dWUgPDwgZW5kbDsKKyAgICAgIHJlc3VsdCA9IGdldERPTUNTU1N0eWxlRGVjbGFyYXRpb24oZXhl
YyxlbGVtZW50LnN0eWxlKCkpOwogICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGFz
c2VydCgwKTsKICAgICB9CisgICAgcmV0dXJuIHRydWU7CiAgIH0KICAgLy8gV2UgaGF2ZSB0byBj
aGVjayBpbiBET01Ob2RlIGJlZm9yZSBnaXZpbmcgYWNjZXNzIHRvIGF0dHJpYnV0ZXMsIG90aGVy
d2lzZQogICAvLyBvbmxvYWQ9Ii4uLiIgd291bGQgbWFrZSBvbmxvYWQgcmV0dXJuIHRoZSBzdHJp
bmcgKGF0dHJpYnV0ZSB2YWx1ZSkgaW5zdGVhZCBvZgogICAvLyB0aGUgbGlzdGVuZXIgb2JqZWN0
IChmdW5jdGlvbikuCiAgIFZhbHVlSW1wICpwcm90byA9IHByb3RvdHlwZSgpLmltcCgpOwotICBp
ZiAoRE9NTm9kZTo6aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSB8fCAocHJvdG8t
PmRpc3BhdGNoVHlwZSgpID09IE9iamVjdFR5cGUgJiYgc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+
KHByb3RvKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkpCi0gICAgcmV0dXJuIERP
TU5vZGU6OmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOworICBpZiAoRE9NTm9kZTo6aGFzT3duUHJv
cGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKKyAgICByZXR1cm4gRE9NTm9kZTo6Z2V0T3duUHJv
cGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCByZXN1bHQpOworICBpZiAocHJvdG8tPmRpc3BhdGNo
VHlwZSgpID09IE9iamVjdFR5cGUgJiYgc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHByb3RvKS0+
aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKKyAgICByZXR1cm4gZmFsc2U7CiAKLSAg
RE9NOjpET01TdHJpbmcgYXR0ciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCBwcm9wZXJ0eU5hbWUu
c3RyaW5nKCkgKTsKKyAgRE9NOjpET01TdHJpbmcgYXR0ciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRl
KHByb3BlcnR5TmFtZS5zdHJpbmcoKSk7CiAgIC8vIEdpdmUgYWNjZXNzIHRvIGF0dHJpYnV0ZXMK
LSAgaWYgKCAhYXR0ci5pc051bGwoKSApCi0gICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbCggYXR0
ciApOworICBpZiAoIWF0dHIuaXNOdWxsKCkpIHsKKyAgICByZXN1bHQgPSBnZXRTdHJpbmdPck51
bGwoYXR0cik7CisgICAgcmV0dXJuIHRydWU7CisgIH0KIAotICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgIHJldHVybiBmYWxzZTsKIH0KIAogVmFsdWUgRE9NRWxlbWVudFByb3RvRnVuYzo6Y2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKQEAgLTEz
NTMsOSArMTM0MSw5IEBAIGNvbnN0IENsYXNzSW5mbyBET01Eb2N1bWVudFR5cGU6OmluZm8gPSAK
IERPTURvY3VtZW50VHlwZTo6RE9NRG9jdW1lbnRUeXBlKEV4ZWNTdGF0ZSAqZXhlYywgRG9jdW1l
bnRUeXBlSW1wbCAqZHQpCiAgIDogRE9NTm9kZSggLyojIyMgbm8gcHJvdG8geWV0Ki9leGVjLCBk
dCApIHsgfQogCi1WYWx1ZSBET01Eb2N1bWVudFR5cGU6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK2Jvb2wgRE9NRG9jdW1lbnRUeXBl
OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSAgcmV0dXJuIGxvb2t1cEdldFZhbHVl
PERPTURvY3VtZW50VHlwZSwgRE9NTm9kZT4oZXhlYywgcHJvcGVydHlOYW1lLCAmRE9NRG9jdW1l
bnRUeXBlVGFibGUsIHRoaXMpOworICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9NRG9jdW1l
bnRUeXBlLCBET01Ob2RlPihleGVjLCBwcm9wZXJ0eU5hbWUsICZET01Eb2N1bWVudFR5cGVUYWJs
ZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFsdWUgRE9NRG9jdW1lbnRUeXBlOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdApAQCAtMTQyNywyMCArMTQx
NSwyNCBAQCBib29sIERPTU5hbWVkTm9kZU1hcDo6aGFzT3duUHJvcGVydHkoRXhlCiAgIHJldHVy
biBET01PYmplY3Q6Omhhc093blByb3BlcnR5KGV4ZWMsIHApOwogfQogCi1WYWx1ZSBET01OYW1l
ZE5vZGVNYXA6OmdldChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnApIGNvbnN0
Citib29sIERPTU5hbWVkTm9kZU1hcDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewogICBOYW1lZE5vZGVN
YXBJbXBsICZtYXAgPSAqbV9pbXBsOwotICBpZiAocCA9PSBsZW5ndGhQcm9wZXJ0eU5hbWUpCi0g
ICAgcmV0dXJuIE51bWJlcihtYXAubGVuZ3RoKCkpOworICBpZiAocCA9PSBsZW5ndGhQcm9wZXJ0
eU5hbWUpIHsKKyAgICByZXN1bHQgPSBOdW1iZXIobWFwLmxlbmd0aCgpKTsKKyAgICByZXR1cm4g
dHJ1ZTsKKyAgfQogCiAgIC8vIGFycmF5IGluZGV4ID8KICAgYm9vbCBvazsKICAgbG9uZyB1bnNp
Z25lZCBpbnQgaWR4ID0gcC50b1VMb25nKCZvayk7Ci0gIGlmIChvaykKLSAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLG1hcC5pdGVtKGlkeCkpOworICBpZiAob2spIHsKKyAgICByZXN1bHQgPSBn
ZXRET01Ob2RlKGV4ZWMsbWFwLml0ZW0oaWR4KSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KIAog
ICAvLyBBbnl0aGluZyBlbHNlIChpbmNsdWRpbmcgZnVuY3Rpb25zLCBkZWZpbmVkIGluIHRoZSBw
cm90b3R5cGUpCi0gIHJldHVybiBET01PYmplY3Q6OmdldChleGVjLCBwKTsKKyAgcmV0dXJuIERP
TU9iamVjdDo6Z2V0T3duUHJvcGVydHkoZXhlYywgcCwgcmVzdWx0KTsKIH0KIAogVmFsdWUgRE9N
TmFtZWROb2RlTWFwUHJvdG9GdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQpAQCAtMTQ5Miw5ICsxNDg0LDkgQEAgRE9NUHJvY2Vzc2lu
Z0luc3RydWN0aW9uOjpET01Qcm9jZXNzaW5nSQogewogfQogCi1WYWx1ZSBET01Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb246OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSkgY29uc3QKK2Jvb2wgRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpnZXRPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFs
dWUmIHJlc3VsdCkgY29uc3QKIHsKLSAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPERPTVByb2Nlc3Np
bmdJbnN0cnVjdGlvbiwgRE9NTm9kZT4oZXhlYywgcHJvcGVydHlOYW1lLCAmRE9NUHJvY2Vzc2lu
Z0luc3RydWN0aW9uVGFibGUsIHRoaXMpOworICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9N
UHJvY2Vzc2luZ0luc3RydWN0aW9uLCBET01Ob2RlPihleGVjLCBwcm9wZXJ0eU5hbWUsICZET01Q
cm9jZXNzaW5nSW5zdHJ1Y3Rpb25UYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFsdWUgRE9N
UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdApAQCAtMTU0MCw5ICsxNTMyLDkgQEAgRE9NTm90YXRpb246OkRPTU5v
dGF0aW9uKEV4ZWNTdGF0ZSAqZXhlYwogewogfQogCi1WYWx1ZSBET01Ob3RhdGlvbjo6Z2V0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorYm9v
bCBET01Ob3RhdGlvbjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0gIHJldHVybiBs
b29rdXBHZXRWYWx1ZTxET01Ob3RhdGlvbiwgRE9NTm9kZT4oZXhlYywgcHJvcGVydHlOYW1lLCAm
RE9NTm90YXRpb25UYWJsZSwgdGhpcyk7CisgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01O
b3RhdGlvbiwgRE9NTm9kZT4oZXhlYywgcHJvcGVydHlOYW1lLCAmRE9NTm90YXRpb25UYWJsZSwg
dGhpcywgcmVzdWx0KTsKIH0KIAogVmFsdWUgRE9NTm90YXRpb246OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKQEAgLTE1NzUsOSArMTU2Nyw5IEBAIERPTUVu
dGl0eTo6RE9NRW50aXR5KEV4ZWNTdGF0ZSAqZXhlYywgRW4KIHsKIH0KIAotVmFsdWUgRE9NRW50
aXR5OjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUp
IGNvbnN0Citib29sIERPTUVudGl0eTo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0g
IHJldHVybiBsb29rdXBHZXRWYWx1ZTxET01FbnRpdHksIERPTU5vZGU+KGV4ZWMsIHByb3BlcnR5
TmFtZSwgJkRPTUVudGl0eVRhYmxlLCB0aGlzKTsKKyAgcmV0dXJuIGxvb2t1cEdldE93blZhbHVl
PERPTUVudGl0eSwgRE9NTm9kZT4oZXhlYywgcHJvcGVydHlOYW1lLCAmRE9NRW50aXR5VGFibGUs
IHRoaXMsIHJlc3VsdCk7CiB9CiAKIFZhbHVlIERPTUVudGl0eTo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdApAQCAtMTc0OSw5ICsxNzQxLDkgQEAgY29uc3Qg
Q2xhc3NJbmZvIE5vZGVDb25zdHJ1Y3Rvcjo6aW5mbyA9IAogICBOT1RBVElPTl9OT0RFCQlET006
Ok5vZGU6Ok5PVEFUSU9OX05PREUJCURvbnREZWxldGV8UmVhZE9ubHkKIEBlbmQKICovCi1WYWx1
ZSBOb2RlQ29uc3RydWN0b3I6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIg
JnByb3BlcnR5TmFtZSkgY29uc3QKK2Jvb2wgTm9kZUNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUm
IHJlc3VsdCkgY29uc3QKIHsKLSAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPE5vZGVDb25zdHJ1Y3Rv
ciwgRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUsICZOb2RlQ29uc3RydWN0b3JUYWJsZSwg
dGhpcyk7CisgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxOb2RlQ29uc3RydWN0b3IsIERPTU9i
amVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCAmTm9kZUNvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHJl
c3VsdCk7CiB9CiAKIFZhbHVlIE5vZGVDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKiwgaW50IHRva2VuKSBjb25zdApAQCAtMTgyMCw5ICsxODEyLDkgQEAgY29uc3QgQ2xh
c3NJbmZvIERPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yOgogQGVuZAogKi8KIAotVmFsdWUgRE9NRXhj
ZXB0aW9uQ29uc3RydWN0b3I6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIg
JnByb3BlcnR5TmFtZSkgY29uc3QKK2Jvb2wgRE9NRXhjZXB0aW9uQ29uc3RydWN0b3I6OmdldE93
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewotICByZXR1cm4gbG9va3VwR2V0VmFsdWU8RE9NRXhj
ZXB0aW9uQ29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCAmRE9NRXhj
ZXB0aW9uQ29uc3RydWN0b3JUYWJsZSwgdGhpcyk7CisgIHJldHVybiBsb29rdXBHZXRPd25WYWx1
ZTxET01FeGNlcHRpb25Db25zdHJ1Y3RvciwgRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUs
ICZET01FeGNlcHRpb25Db25zdHJ1Y3RvclRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCiBWYWx1
ZSBET01FeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwg
aW50IHRva2VuKSBjb25zdApAQCAtMTg4MywxNSArMTg3NSwxOCBAQCBET01OYW1lZE5vZGVzQ29s
bGVjdGlvbjo6RE9NTmFtZWROb2Rlc0NvCiB7CiB9CiAKLVZhbHVlIERPTU5hbWVkTm9kZXNDb2xs
ZWN0aW9uOjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUpIGNvbnN0Citib29sIERPTU5hbWVkTm9kZXNDb2xsZWN0aW9uOjpnZXRPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJl
c3VsdCkgY29uc3QKIHsKLSAgaWYgKHByb3BlcnR5TmFtZSA9PSBsZW5ndGhQcm9wZXJ0eU5hbWUp
Ci0gICAgcmV0dXJuIE51bWJlcihtX25vZGVzLmNvdW50KCkpOworICBpZiAocHJvcGVydHlOYW1l
ID09IGxlbmd0aFByb3BlcnR5TmFtZSkgeworICAgIHJlc3VsdCA9IE51bWJlcihtX25vZGVzLmNv
dW50KCkpOworICAgIHJldHVybiB0cnVlOworICB9CiAgIC8vIGluZGV4PwogICBib29sIG9rOwog
ICB1bnNpZ25lZCBpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CiAgIGlmIChvayAm
JiB1IDwgbV9ub2Rlcy5jb3VudCgpKSB7Ci0gICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbV9u
b2Rlc1t1XS5nZXQoKSk7CisgICAgcmVzdWx0ID0gZ2V0RE9NTm9kZShleGVjLCBtX25vZGVzW3Vd
LmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKICAgfQogICAvLyBGb3IgSUUgY29tcGF0aWJpbGl0
eSwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGxvb2sgdXAgZWxlbWVudHMgaW4gYQogICAvLyBkb2N1
bWVudC5mb3JtTmFtZS5uYW1lIHJlc3VsdCBieSBpZCBhcyB3ZWxsIGFzIGJlIGluZGV4LgpAQCAt
MTkxMSwxMiArMTkwNiwxMyBAQCBWYWx1ZSBET01OYW1lZE5vZGVzQ29sbGVjdGlvbjo6Z2V0KEV4
ZWNTCiAgICAgICB9CiAKICAgICAgIGlmIChpZEF0dHItPm5vZGVWYWx1ZSgpID09IHByb3BlcnR5
TmFtZS5zdHJpbmcoKSkgewotCXJldHVybiBnZXRET01Ob2RlKGV4ZWMsbm9kZSk7CisJcmVzdWx0
ID0gZ2V0RE9NTm9kZShleGVjLG5vZGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIH0K
ICAgICB9CiAgIH0KIAotICByZXR1cm4gRE9NT2JqZWN0OjpnZXQoZXhlYyxwcm9wZXJ0eU5hbWUp
OworICByZXR1cm4gRE9NT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUs
IHJlc3VsdCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5NTEsMTIgKzE5NDcsOSBA
QCBET01DaGFyYWN0ZXJEYXRhOjpET01DaGFyYWN0ZXJEYXRhKENoYXJhCiB7CiB9CiAKLVZhbHVl
IERPTUNoYXJhY3RlckRhdGE6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIg
JnApIGNvbnN0Citib29sIERPTUNoYXJhY3RlckRhdGE6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSNp
ZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApPDwiRE9NQ2hhcmFjdGVyRGF0YTo6Z2V0
ICI8PHAuc3RyaW5nKCkuc3RyaW5nKCk8PGVuZGw7Ci0jZW5kaWYKLSAgcmV0dXJuIGxvb2t1cEdl
dFZhbHVlPERPTUNoYXJhY3RlckRhdGEsRE9NTm9kZT4oZXhlYyxwLCZET01DaGFyYWN0ZXJEYXRh
VGFibGUsdGhpcyk7CisgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01DaGFyYWN0ZXJEYXRh
LCBET01Ob2RlPihleGVjLCBwLCAmRE9NQ2hhcmFjdGVyRGF0YVRhYmxlLCB0aGlzLCByZXN1bHQp
OwogfQogCiBWYWx1ZSBET01DaGFyYWN0ZXJEYXRhOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0
ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CkBAIC0yMDQ1LDE0ICsyMDM4LDYgQEAgRE9NVGV4dDo6RE9N
VGV4dChFeGVjU3RhdGUgKmV4ZWMsIFRleHRJbQogICBzZXRQcm90b3R5cGUoRE9NVGV4dFByb3Rv
OjpzZWxmKGV4ZWMpKTsKIH0KIAotVmFsdWUgRE9NVGV4dDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcCkgY29uc3QKLXsKLSAgaWYgKHAgPT0gIiIpCi0gICAgcmV0dXJu
IFVuZGVmaW5lZCgpOyAvLyAjIyMgVE9ETwotICBlbHNlCi0gICAgcmV0dXJuIERPTUNoYXJhY3Rl
ckRhdGE6OmdldChleGVjLCBwKTsKLX0KLQogVmFsdWUgRE9NVGV4dFByb3RvRnVuYzo6Y2FsbChF
eGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKICAg
aWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkRPTVRleHQ6OmluZm8pKSB7CkluZGV4OiBXZWJD
b3JlL2todG1sL2VjbWEva2pzX2RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ0CmRp
ZmYgLXUgLXAgLXIxLjQ0IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmgKLS0tIFdlYkNvcmUv
a2h0bWwvZWNtYS9ranNfZG9tLmgJMTkgSnVsIDIwMDUgMjI6NDE6NDcgLTAwMDAJMS40NAorKysg
V2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uaAkyNSBKdWwgMjAwNSAwNjowNDozNyAtMDAwMApA
QCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBET01Ob2RlKEV4ZWNTdGF0ZSAq
ZXhlYywgRE9NOjpOb2RlSW1wbCAqbik7CiAgICAgdmlydHVhbCB+RE9NTm9kZSgpOwogICAgIHZp
cnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0OwotICAgIHZpcnR1YWwgVmFs
dWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAg
IFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZh
bHVlLCBpbnQgYXR0ciA9IE5vbmUpOwpAQCAtOTIsNyArOTIsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBET01Ob2RlTGlzdChFeGVjU3RhdGUgKiwgRE9NOjpOb2RlTGlzdEltcGwgKmwpIDogbV9p
bXBsKGwpIHsgfQogICAgIH5ET01Ob2RlTGlzdCgpOwogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnApIGNvbnN0OwotICAg
IHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJv
cGVydHlOYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQp
IGNvbnN0OwogICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKTsKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0Nh
bGwoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25s
eQpAQCAtMTExLDcgKzExMSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgRE9N
RG9jdW1lbnQoRXhlY1N0YXRlICpleGVjLCBET006OkRvY3VtZW50SW1wbCAqZCk7CiAgICAgfkRP
TURvY3VtZW50KCk7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUm
IHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cik7CkBA
IC0xMzcsNyArMTM3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIERPTUF0dHIgOiBwdWJs
aWMgRE9NTm9kZSB7CiAgIHB1YmxpYzoKICAgICBET01BdHRyKEV4ZWNTdGF0ZSAqZXhlYywgRE9N
OjpBdHRySW1wbCAqYSk7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZh
bHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cik7
CkBAIC0xNTEsNyArMTUxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIERPTUVsZW1lbnQg
OiBwdWJsaWMgRE9NTm9kZSB7CiAgIHB1YmxpYzoKICAgICBET01FbGVtZW50KEV4ZWNTdGF0ZSAq
ZXhlYywgRE9NOjpFbGVtZW50SW1wbCAqZSk7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0g
YWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBj
b25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsK
QEAgLTE4Niw3ICsxODYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgRE9NRG9jdW1lbnRU
eXBlIDogcHVibGljIERPTU5vZGUgewogICBwdWJsaWM6CiAgICAgRE9NRG9jdW1lbnRUeXBlKEV4
ZWNTdGF0ZSAqZXhlYywgRE9NOjpEb2N1bWVudFR5cGVJbXBsICpkdCk7Ci0gICAgdmlydHVhbCBW
YWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAg
ICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQpAQCAtMjAxLDcgKzIw
MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIERPTU5hbWVkTm9kZU1hcChFeGVjU3RhdGUgKiwg
RE9NOjpOYW1lZE5vZGVNYXBJbXBsICptKTsKICAgICB+RE9NTmFtZWROb2RlTWFwKCk7CiAgICAg
dmlydHVhbCBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25s
eQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmaW5mbzsgfQogICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KQEAgLTIxNiw3ICsyMTYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
Y2xhc3MgRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uIDogcHVibGljIERPTU5vZGUgewogICBwdWJs
aWM6CiAgICAgRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsICpwaSk7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgVmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQpAQCAt
MjI3LDcgKzIyNyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBET01Ob3RhdGlvbiA6IHB1
YmxpYyBET01Ob2RlIHsKICAgcHVibGljOgogICAgIERPTU5vdGF0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgRE9NOjpOb3RhdGlvbkltcGwgKm4pOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAgIFZhbHVlIGdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1
dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
KCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KQEAgLTIzOCw3ICsyMzgsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgY2xhc3MgRE9NRW50aXR5IDogcHVibGljIERPTU5vZGUgewogICBwdWJsaWM6CiAg
ICAgRE9NRW50aXR5KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpFbnRpdHlJbXBsICplKTsKLSAgICB2
aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBj
b25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkBAIC0y
NTAsNyArMjUwLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIE5vZGVDb25zdHJ1Y3RvciA6
IHB1YmxpYyBET01PYmplY3QgewogICBwdWJsaWM6CiAgICAgTm9kZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSAqKSB7IH0KLSAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1v
bmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9CkBAIC0yNjEsNyArMjYxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNz
IERPTUV4Y2VwdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CiAgIHB1YmxpYzoK
ICAgICBET01FeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUgKikgeyB9Ci0gICAgdmlydHVh
bCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7
CiAgICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQpAQCAtMjgzLDcg
KzI4Myw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBET01OYW1lZE5vZGVzQ29sbGVjdGlv
biA6IHB1YmxpYyBET01PYmplY3QgewogICBwdWJsaWM6CiAgICAgRE9NTmFtZWROb2Rlc0NvbGxl
Y3Rpb24oRXhlY1N0YXRlICpleGVjLCBjb25zdCBRVmFsdWVMaXN0PCBraHRtbDo6U2hhcmVkUHRy
PERPTTo6Tm9kZUltcGw+ID4mIG5vZGVzICk7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAg
UVZhbHVlTGlzdDwga2h0bWw6OlNoYXJlZFB0cjxET006Ok5vZGVJbXBsPiA+IG1fbm9kZXM7CiAg
IH07CkBAIC0yOTEsNyArMjkxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIERPTUNoYXJh
Y3RlckRhdGEgOiBwdWJsaWMgRE9NTm9kZSB7CiAgIHB1YmxpYzoKICAgICBET01DaGFyYWN0ZXJE
YXRhKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpDaGFyYWN0ZXJEYXRhSW1wbCAqZCk7Ci0gICAgdmly
dHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0
OwogICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwog
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQpAQCAtMzA3LDggKzMwNyw2IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBET01U
ZXh0IDogcHVibGljIERPTUNoYXJhY3RlckRhdGEgewogICBwdWJsaWM6CiAgICAgRE9NVGV4dChF
eGVjU3RhdGUgKmV4ZWMsIERPTTo6VGV4dEltcGwgKnQpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0
KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Owot
ICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7
CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIERPTTo6VGV4
dEltcGwgKnRvVGV4dCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEv
a2pzX2V2ZW50cy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTEKZGlmZiAtdSAtcCAtcjEu
NTEgV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuY3BwCi0tLSBXZWJDb3JlL2todG1sL2Vj
bWEva2pzX2V2ZW50cy5jcHAJMTkgSnVsIDIwMDUgMTk6NTI6NDkgLTAwMDAJMS41MQorKysgV2Vi
Q29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuY3BwCTI1IEp1bCAyMDA1IDA2OjA0OjM3IC0wMDAw
CkBAIC0zNTEsOSArMzUxLDkgQEAgY29uc3QgQ2xhc3NJbmZvIEV2ZW50Q29uc3RydWN0b3I6Omlu
Zm8gPQogQGVuZAogKi8KIAotVmFsdWUgRXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCkgY29uc3QKK2Jvb2wgRXZlbnRDb25zdHJ1Y3Rvcjo6
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdAogewotICByZXR1cm4gbG9va3VwR2V0VmFsdWU8RXZlbnRDb25zdHJ1
Y3RvciwgRE9NT2JqZWN0PihleGVjLHAsJkV2ZW50Q29uc3RydWN0b3JUYWJsZSx0aGlzKTsKKyAg
cmV0dXJuIGxvb2t1cEdldE93blZhbHVlPEV2ZW50Q29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhl
YywgcCwgJkV2ZW50Q29uc3RydWN0b3JUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFsdWUg
RXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2Vu
KSBjb25zdApAQCAtNDE0LDEyICs0MTQsOSBAQCB2b2lkIERPTU1vdXNlRXZlbnQ6Om1hcmsoKQog
ICAgICAgICBjbGlwYm9hcmQtPm1hcmsoKTsKIH0KIAotVmFsdWUgRE9NRXZlbnQ6OmdldChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnApIGNvbnN0Citib29sIERPTUV2ZW50Ojpn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVl
JiByZXN1bHQpIGNvbnN0CiB7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1ZygpIDw8ICJL
SlM6OkRPTUV2ZW50OjpnZXQgIiA8PCBwLnFzdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gIHJl
dHVybiBsb29rdXBHZXRWYWx1ZTxET01FdmVudCxET01PYmplY3Q+KGV4ZWMsIHAsICZET01FdmVu
dFRhYmxlLCB0aGlzICk7CisgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01FdmVudCwgRE9N
T2JqZWN0PihleGVjLCBwLCAmRE9NRXZlbnRUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFs
dWUgRE9NRXZlbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CkBAIC01NjUsOSArNTYyLDkgQEAgY29uc3QgQ2xhc3NJbmZvIEV2ZW50RXhjZXB0aW9u
Q29uc3RydWN0bwogICBVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUiAgICBET006OkV2ZW50RXhj
ZXB0aW9uOjpVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUiBEb250RGVsZXRlfFJlYWRPbmx5CiBA
ZW5kCiAqLwotVmFsdWUgRXZlbnRFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6Z2V0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCkgY29uc3QKK2Jvb2wgRXZlbnRFeGNlcHRpb25Db25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewotICByZXR1cm4gbG9va3VwR2V0VmFsdWU8RXZl
bnRFeGNlcHRpb25Db25zdHJ1Y3RvciwgRE9NT2JqZWN0PihleGVjLHAsJkV2ZW50RXhjZXB0aW9u
Q29uc3RydWN0b3JUYWJsZSx0aGlzKTsKKyAgcmV0dXJuIGxvb2t1cEdldE93blZhbHVlPEV2ZW50
RXhjZXB0aW9uQ29uc3RydWN0b3IsIERPTU9iamVjdD4oZXhlYywgcCwgJkV2ZW50RXhjZXB0aW9u
Q29uc3RydWN0b3JUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFsdWUgRXZlbnRFeGNlcHRp
b25Db25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBj
b25zdApAQCAtNjE0LDkgKzYxMSw5IEBAIERPTVVJRXZlbnQ6On5ET01VSUV2ZW50KCkKIHsKIH0K
IAotVmFsdWUgRE9NVUlFdmVudDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciAmcCkgY29uc3QKK2Jvb2wgRE9NVUlFdmVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewotICByZXR1
cm4gbG9va3VwR2V0VmFsdWU8RE9NVUlFdmVudCxET01FdmVudD4oZXhlYyxwLCZET01VSUV2ZW50
VGFibGUsdGhpcyk7CisgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01VSUV2ZW50LERPTUV2
ZW50PihleGVjLCBwLCAmRE9NVUlFdmVudFRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCiBWYWx1
ZSBET01VSUV2ZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdApAQCAtNzA4LDEyICs3MDUsOSBAQCBET01Nb3VzZUV2ZW50Ojp+RE9NTW91c2VFdmVu
dCgpCiB7CiB9CiAKLVZhbHVlIERPTU1vdXNlRXZlbnQ6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnApIGNvbnN0Citib29sIERPTU1vdXNlRXZlbnQ6OmdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkg
Y29uc3QKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8ICJET01Nb3Vz
ZUV2ZW50OjpnZXQgIiA8PCBwLnFzdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gIHJldHVybiBs
b29rdXBHZXRWYWx1ZTxET01Nb3VzZUV2ZW50LERPTVVJRXZlbnQ+KGV4ZWMscCwmRE9NTW91c2VF
dmVudFRhYmxlLHRoaXMpOworICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9NTW91c2VFdmVu
dCwgRE9NVUlFdmVudD4oZXhlYywgcCwgJkRPTU1vdXNlRXZlbnRUYWJsZSwgdGhpcywgcmVzdWx0
KTsKIH0KIAogc3RhdGljIFFQb2ludCBvZmZzZXRGcm9tVGFyZ2V0KGNvbnN0IE1vdXNlUmVsYXRl
ZEV2ZW50SW1wbCAqZSkKQEAgLTg1OSwxMiArODUzLDkgQEAgY29uc3QgQ2xhc3NJbmZvKiBET01L
ZXlib2FyZEV2ZW50OjpjbGFzcwogICAgIHJldHVybiAmaW5mbzsKIH0KIAotVmFsdWUgRE9NS2V5
Ym9hcmRFdmVudDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCkgY29u
c3QKK2Jvb2wgRE9NS2V5Ym9hcmRFdmVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewotI2lmZGVmIEtK
U19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwgIkRPTUtleWJvYXJkRXZlbnQ6OmdldCAiIDw8
IHAucXN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPERP
TUtleWJvYXJkRXZlbnQsIERPTVVJRXZlbnQ+KGV4ZWMsIHAsICZET01LZXlib2FyZEV2ZW50VGFi
bGUsIHRoaXMpOworICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9NS2V5Ym9hcmRFdmVudCwg
RE9NVUlFdmVudD4oZXhlYywgcCwgJkRPTUtleWJvYXJkRXZlbnRUYWJsZSwgdGhpcywgcmVzdWx0
KTsKIH0KIAogVmFsdWUgRE9NS2V5Ym9hcmRFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKQEAgLTkyNyw5ICs5MTgsOSBAQCBjb25zdCBDbGFz
c0luZm8gTXV0YXRpb25FdmVudENvbnN0cnVjdG9yCiAgIFJFTU9WQUwJRE9NOjpNdXRhdGlvbkV2
ZW50OjpSRU1PVkFMCQlEb250RGVsZXRlfFJlYWRPbmx5CiBAZW5kCiAqLwotVmFsdWUgTXV0YXRp
b25FdmVudENvbnN0cnVjdG9yOjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwKSBjb25zdAorYm9vbCBNdXRhdGlvbkV2ZW50Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29u
c3QKIHsKLSAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPE11dGF0aW9uRXZlbnRDb25zdHJ1Y3RvcixE
T01PYmplY3Q+KGV4ZWMscCwmTXV0YXRpb25FdmVudENvbnN0cnVjdG9yVGFibGUsdGhpcyk7Cisg
IHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxNdXRhdGlvbkV2ZW50Q29uc3RydWN0b3IsRE9NT2Jq
ZWN0PihleGVjLCBwLCAmTXV0YXRpb25FdmVudENvbnN0cnVjdG9yVGFibGUsIHRoaXMsIHJlc3Vs
dCk7CiB9CiAKIFZhbHVlIE11dGF0aW9uRXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdApAQCAtOTcyLDkgKzk2Myw5IEBAIERPTU11
dGF0aW9uRXZlbnQ6On5ET01NdXRhdGlvbkV2ZW50KCkKIHsKIH0KIAotVmFsdWUgRE9NTXV0YXRp
b25FdmVudDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCkgY29uc3QK
K2Jvb2wgRE9NTXV0YXRpb25FdmVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewotICByZXR1cm4gbG9v
a3VwR2V0VmFsdWU8RE9NTXV0YXRpb25FdmVudCxET01FdmVudD4oZXhlYyxwLCZET01NdXRhdGlv
bkV2ZW50VGFibGUsdGhpcyk7CisgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01NdXRhdGlv
bkV2ZW50LCBET01FdmVudD4oZXhlYywgcCwgJkRPTU11dGF0aW9uRXZlbnRUYWJsZSwgdGhpcywg
cmVzdWx0KTsKIH0KIAogVmFsdWUgRE9NTXV0YXRpb25FdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKQEAgLTEwNTEsOSArMTA0Miw5IEBAIERP
TVdoZWVsRXZlbnQ6OkRPTVdoZWVsRXZlbnQoRXhlY1N0YXRlICoKIHsKIH0KIAotVmFsdWUgRE9N
V2hlZWxFdmVudDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCkgY29u
c3QKK2Jvb2wgRE9NV2hlZWxFdmVudDo6Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewotICAgIHJldHVybiBs
b29rdXBHZXRWYWx1ZTxET01XaGVlbEV2ZW50LERPTUV2ZW50PihleGVjLCBwLCAmRE9NV2hlZWxF
dmVudFRhYmxlLCB0aGlzKTsKKyAgICByZXR1cm4gbG9va3VwR2V0T3duVmFsdWU8RE9NV2hlZWxF
dmVudCxET01FdmVudD4oZXhlYywgcCwgJkRPTVdoZWVsRXZlbnRUYWJsZSwgdGhpcywgcmVzdWx0
KTsKIH0KIAogVmFsdWUgRE9NV2hlZWxFdmVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKQEAgLTExNDQsOSArMTEzNSw5IEBAIHN0YXRpYyBWYWx1
ZSBzdHJpbmdPclVuZGVmaW5lZChjb25zdCBET00KICAgICB9CiB9CiAKLVZhbHVlIENsaXBib2Fy
ZDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBj
b25zdAorYm9vbCBDbGlwYm9hcmQ6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewotICAg
IHJldHVybiBsb29rdXBHZXRWYWx1ZTxDbGlwYm9hcmQsRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0
eU5hbWUsICZDbGlwYm9hcmRUYWJsZSwgdGhpcyk7CisgICAgcmV0dXJuIGxvb2t1cEdldE93blZh
bHVlPENsaXBib2FyZCwgRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUsICZDbGlwYm9hcmRU
YWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFsdWUgQ2xpcGJvYXJkOjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdApJbmRleDogV2ViQ29yZS9raHRt
bC9lY21hL2tqc19ldmVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9lY21hL2tqc19ldmVudHMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZm
IC11IC1wIC1yMS4yNyBXZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5oCi0tLSBXZWJDb3Jl
L2todG1sL2VjbWEva2pzX2V2ZW50cy5oCTE5IEp1bCAyMDA1IDE5OjUyOjQ5IC0wMDAwCTEuMjcK
KysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZXZlbnRzLmgJMjUgSnVsIDIwMDUgMDY6MDQ6Mzcg
LTAwMDAKQEAgLTk5LDcgKzk5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEV2ZW50Q29u
c3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKICAgcHVibGljOgogICAgIEV2ZW50Q29uc3Ry
dWN0b3IoRXhlY1N0YXRlICopIHsgfQotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAq
ZXhlYyxjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1
bHQpIGNvbnN0OwogICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0
b2tlbikgY29uc3Q7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQpAQCAt
MTEyLDcgKzExMiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgRE9NRXZlbnQo
RXhlY1N0YXRlICpleGVjLCBET006OkV2ZW50SW1wbCAqZSk7CiAgICAgfkRPTUV2ZW50KCk7Ci0g
ICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLGNvbnN0IElkZW50aWZpZXIgJnAp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
Y29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgVmFsdWUgZ2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
LAogCQkJY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwpAQCAtMTM3LDcgKzEz
Nyw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBFdmVudEV4Y2VwdGlvbkNvbnN0cnVjdG9y
IDogcHVibGljIERPTU9iamVjdCB7CiAgIHB1YmxpYzoKICAgICBFdmVudEV4Y2VwdGlvbkNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSAqKSB7IH0KLSAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUg
KmV4ZWMsY29uc3QgSWRlbnRpZmllciAmcCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVz
dWx0KSBjb25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQg
dG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFs
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KQEAg
LTE1MCw3ICsxNTAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIERPTVVJRXZl
bnQoRXhlY1N0YXRlICpleGVjLCBET006OlVJRXZlbnRJbXBsICp1ZSk7CiAgICAgfkRPTVVJRXZl
bnQoKTsKLSAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRp
ZmllciAmcCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBW
YWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAg
IC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KQEAgLTE2Miw3ICsxNjIsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIERPTU1vdXNlRXZlbnQoRXhlY1N0YXRlICpl
eGVjLCBET006Ok1vdXNlRXZlbnRJbXBsICptZSk7CiAgICAgfkRPTU1vdXNlRXZlbnQoKTsKLSAg
ICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciAmcCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxj
b25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBWYWx1ZSBnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBtYXJrKCk7CiAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQpAQCAtMTc4LDcgKzE3
OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgRE9NS2V5Ym9hcmRFdmVudChF
eGVjU3RhdGUgKmV4ZWMsIERPTTo6S2V5Ym9hcmRFdmVudEltcGwgKmtlKTsKICAgICB+RE9NS2V5
Ym9hcmRFdmVudCgpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciAmcCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29u
c3Q7CiAgICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBj
b25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0OwpAQCAtMTkwLDcgKzE5MCw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICBjbGFzcyBNdXRhdGlvbkV2ZW50Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2Jq
ZWN0IHsKICAgcHVibGljOgogICAgIE11dGF0aW9uRXZlbnRDb25zdHJ1Y3RvcihFeGVjU3RhdGUg
KikgeyB9Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLGNvbnN0IElkZW50
aWZpZXIgJnApIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAg
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKICAg
ICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkBAIC0yMDMsNyArMjAzLDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBET01NdXRhdGlvbkV2ZW50KEV4ZWNTdGF0
ZSAqZXhlYywgRE9NOjpNdXRhdGlvbkV2ZW50SW1wbCAqbWUpOwogICAgIH5ET01NdXRhdGlvbkV2
ZW50KCk7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLGNvbnN0IElkZW50
aWZpZXIgJnApIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3Rh
dGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAg
VmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKICAg
ICAvLyBubyBwdXQgLSBhbGwgcmVhZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkBAIC0yMTUsNyArMjE1LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgY2xhc3MgRE9NV2hlZWxFdmVudCA6IHB1YmxpYyBET01VSUV2
ZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIERPTVdoZWVsRXZlbnQoRXhlY1N0YXRlICosIERP
TTo6V2hlZWxFdmVudEltcGwgKik7Ci0gICAgICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0
ZSAqLCBjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyICZwLCBWYWx1ZSYgcmVz
dWx0KSBjb25zdDsKICAgICAgICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwg
aW50IHRva2VuKSBjb25zdDsKICAgICAgICAgLy8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAg
ICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g
JmluZm87IH0KQEAgLTIyOSw3ICsyMjksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgog
ICAgIENsaXBib2FyZChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6Q2xpcGJvYXJkSW1wbCAqZHMpOwog
ICAgIH5DbGlwYm9hcmQoKTsKLSAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCAvKmF0
dHIqLyk7CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEyOApkaWZmIC11IC1wIC1yMS4xMjggV2ViQ29yZS9raHRtbC9l
Y21hL2tqc19odG1sLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAkyNCBK
dWwgMjAwNSAyMjo0NDo1NSAtMDAwMAkxLjEyOAorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19o
dG1sLmNwcAkyNSBKdWwgMjAwNSAwNjowNDozOCAtMDAwMApAQCAtMjgyLDExICsyODIsOCBAQCBi
b29sIEhUTUxEb2N1bWVudDo6aGFzT3duUHJvcGVydHkoRXhlY1N0CiAgIHJldHVybiBkb2MtPmhh
c05hbWVkSXRlbShuYW1lKSB8fCBkb2MtPmhhc0RvY0V4dHJhTmFtZWRJdGVtKG5hbWUpOwogfQog
Ci1WYWx1ZSBIVE1MRG9jdW1lbnQ6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK2Jvb2wgSFRNTERvY3VtZW50OjpnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUm
IHJlc3VsdCkgY29uc3QKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8
ICJLSlM6OkhUTUxEb2N1bWVudDo6Z2V0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBl
bmRsOwotI2VuZGlmCiAgIEhUTUxEb2N1bWVudEltcGwgJmRvYyA9ICpzdGF0aWNfY2FzdDxIVE1M
RG9jdW1lbnRJbXBsICo+KGltcGwoKSk7CiAgIEhUTUxFbGVtZW50SW1wbCAqYm9keSA9IGRvYy5i
b2R5KCk7CiAKQEAgLTI5OCw2MyArMjk1LDgzIEBAIFZhbHVlIEhUTUxEb2N1bWVudDo6Z2V0KEV4
ZWNTdGF0ZSAqZXhlYywKICAgICBTaGFyZWRQdHI8RE9NOjpIVE1MQ29sbGVjdGlvbkltcGw+IGNv
bGxlY3Rpb24gPSBkb2MuZG9jdW1lbnROYW1lZEl0ZW1zKG5hbWUpOwogICAgIGlmIChjb2xsZWN0
aW9uLT5sZW5ndGgoKSA9PSAxKSB7CiAgICAgICBOb2RlSW1wbCAqbm9kZSA9IGNvbGxlY3Rpb24t
PmZpcnN0SXRlbSgpOwotICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTFRhZ3M6OmlmcmFt
ZSgpKSkgewotICAgICAgICBLSFRNTFBhcnQgKnBhcnQgPSBzdGF0aWNfY2FzdDxET006OkhUTUxJ
RnJhbWVFbGVtZW50SW1wbCAqPihub2RlKS0+Y29udGVudFBhcnQoKTsKLSAgICAgICAgaWYgKHBh
cnQpCi0gICAgICAgICAgcmV0dXJuIFdpbmRvdzo6cmV0cmlldmUocGFydCk7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBub2RlKTsKKyAgICAgIEtIVE1MUGFydCAqcGFy
dDsKKyAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxUYWdzOjppZnJhbWUoKSkgJiYgCisg
ICAgICAgICAgKHBhcnQgPSBzdGF0aWNfY2FzdDxET006OkhUTUxJRnJhbWVFbGVtZW50SW1wbCAq
Pihub2RlKS0+Y29udGVudFBhcnQoKSkpCisgICAgICAgIHJlc3VsdCA9IFdpbmRvdzo6cmV0cmll
dmUocGFydCk7CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IGdldERPTU5vZGUoZXhlYywg
bm9kZSk7CiAgICAgfSBlbHNlIAotICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMs
IGNvbGxlY3Rpb24uZ2V0KCkpOworICAgICAgcmVzdWx0ID0gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgY29sbGVjdGlvbi5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7CiAgIH0KKworICBIVE1MQm9k
eUVsZW1lbnRJbXBsICpib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmhhc1RhZ05hbWUoSFRN
TFRhZ3M6OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5
KSA6IDA7CiAgICAgCiAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRy
eSgmSFRNTERvY3VtZW50VGFibGUsIHByb3BlcnR5TmFtZSk7CiAgIGlmIChlbnRyeSkgewogICAg
IHN3aXRjaCAoZW50cnktPnZhbHVlKSB7CiAgICAgY2FzZSBUaXRsZToKLSAgICAgIHJldHVybiBT
dHJpbmcoZG9jLnRpdGxlKCkpOworICAgICAgcmVzdWx0ID0gU3RyaW5nKGRvYy50aXRsZSgpKTsK
KyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgUmVmZXJyZXI6Ci0gICAgICByZXR1cm4gU3Ry
aW5nKGRvYy5yZWZlcnJlcigpKTsKKyAgICAgIHJlc3VsdCA9IFN0cmluZyhkb2MucmVmZXJyZXIo
KSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIERvbWFpbjoKLSAgICAgIHJldHVybiBT
dHJpbmcoZG9jLmRvbWFpbigpKTsKKyAgICAgIHJlc3VsdCA9IFN0cmluZyhkb2MuZG9tYWluKCkp
OworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBVUkw6Ci0gICAgICByZXR1cm4gU3RyaW5n
KGRvYy5VUkwoKSk7CisgICAgICByZXN1bHQgPSBTdHJpbmcoZG9jLlVSTCgpKTsKKyAgICAgIHJl
dHVybiB0cnVlOwogICAgIGNhc2UgQm9keToKLSAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
IGJvZHkpOworICAgICAgcmVzdWx0ID0gZ2V0RE9NTm9kZShleGVjLCBib2R5KTsKKyAgICAgIHJl
dHVybiB0cnVlOwogICAgIGNhc2UgTG9jYXRpb246CiAgICAgICBpZiAocGFydCkgewogICAgICAg
ICBXaW5kb3cqIHdpbiA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFydCk7Ci0gICAgICAgIGlm
ICh3aW4pCi0gICAgICAgICAgcmV0dXJuIFZhbHVlKHdpbi0+bG9jYXRpb24oKSk7CisgICAgICAg
IGlmICh3aW4pIHsKKyAgICAgICAgICByZXN1bHQgPSBWYWx1ZSh3aW4tPmxvY2F0aW9uKCkpOwor
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgICB9Ci0gICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CisgICAgICByZXN1bHQgPSBVbmRlZmluZWQoKTsKKyAgICAgIHJldHVybiB0
cnVlOwogICAgIGNhc2UgQ29va2llOgotICAgICAgcmV0dXJuIFN0cmluZyhkb2MuY29va2llKCkp
OworICAgICAgcmVzdWx0ID0gU3RyaW5nKGRvYy5jb29raWUoKSk7CisgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBjYXNlIEltYWdlczoKLSAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVj
LCBkb2MuaW1hZ2VzKCkuZ2V0KCkpOworICAgICAgcmVzdWx0ID0gZ2V0SFRNTENvbGxlY3Rpb24o
ZXhlYywgZG9jLmltYWdlcygpLmdldCgpKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2Ug
RW1iZWRzOgotICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5lbWJlZHMo
KS5nZXQoKSk7CisgICAgICByZXN1bHQgPSBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBkb2MuZW1i
ZWRzKCkuZ2V0KCkpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBBcHBsZXRzOgotICAg
ICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5hcHBsZXRzKCkuZ2V0KCkpOwor
ICAgICAgcmVzdWx0ID0gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZG9jLmFwcGxldHMoKS5nZXQo
KSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIExpbmtzOgotICAgICAgcmV0dXJuIGdl
dEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5saW5rcygpLmdldCgpKTsKKyAgICAgIHJlc3VsdCA9
IGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5saW5rcygpLmdldCgpKTsKKyAgICAgIHJldHVy
biB0cnVlOwogICAgIGNhc2UgRm9ybXM6Ci0gICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24o
ZXhlYywgZG9jLmZvcm1zKCkuZ2V0KCkpOworICAgICAgcmVzdWx0ID0gZ2V0SFRNTENvbGxlY3Rp
b24oZXhlYywgZG9jLmZvcm1zKCkuZ2V0KCkpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2Fz
ZSBBbmNob3JzOgotICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGRvYy5hbmNo
b3JzKCkuZ2V0KCkpOworICAgICAgcmVzdWx0ID0gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZG9j
LmFuY2hvcnMoKS5nZXQoKSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFNjcmlwdHM6
IC8vIFRPRE8gKElFLXNwZWNpZmljKQogICAgIHsKICAgICAgIC8vIFRvIGJlIGltcGxlbWVudGVk
LiBNZWFud2hpbGUsIHJldHVybiBhbiBvYmplY3Qgd2l0aCBhIGxlbmd0aCBwcm9wZXJ0eSBzZXQg
dG8gMAogICAgICAga2RXYXJuaW5nKCkgPDwgIktKUzo6SFRNTERvY3VtZW50IGRvY3VtZW50LnNj
cmlwdHMgY2FsbGVkIC0gbm90IGltcGxlbWVudGVkIiA8PCBlbmRsOwotICAgICAgT2JqZWN0IG9i
aiggbmV3IE9iamVjdEltcCgpICk7Ci0gICAgICBvYmoucHV0KCBleGVjLCBsZW5ndGhQcm9wZXJ0
eU5hbWUsIE51bWJlcigwKSApOwotICAgICAgcmV0dXJuIG9iajsKKyAgICAgIE9iamVjdCBvYmoo
bmV3IE9iamVjdEltcCgpKTsKKyAgICAgIG9iai5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlOYW1l
LCBOdW1iZXIoMCkpOworICAgICAgcmVzdWx0ID0gb2JqOworICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIGNhc2UgQWxsOgogICAgICAgLy8gRGlzYWJsZSBkb2N1bWVudC5hbGwgd2hlbiB3
ZSB0cnkgdG8gYmUgTmV0c2NhcGUtY29tcGF0aWJsZQotICAgICAgaWYgKCBleGVjLT5keW5hbWlj
SW50ZXJwcmV0ZXIoKS0+Y29tcGF0TW9kZSgpID09IEludGVycHJldGVyOjpOZXRzY2FwZUNvbXBh
dCApCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIHJldHVybiBnZXRIVE1MQ29s
bGVjdGlvbihleGVjLCBkb2MuYWxsKCkuZ2V0KCkpOworICAgICAgaWYgKGV4ZWMtPmR5bmFtaWNJ
bnRlcnByZXRlcigpLT5jb21wYXRNb2RlKCkgPT0gSW50ZXJwcmV0ZXI6Ok5ldHNjYXBlQ29tcGF0
KQorICAgICAgICByZXN1bHQgPSBVbmRlZmluZWQoKTsKKyAgICAgIHJlc3VsdCA9IGdldEhUTUxD
b2xsZWN0aW9uKGV4ZWMsIGRvYy5hbGwoKS5nZXQoKSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBjYXNlIENsZWFyOgogICAgIGNhc2UgT3BlbjoKICAgICBjYXNlIENsb3NlOgpAQCAtMzYzLDUz
ICszODAsNjIgQEAgVmFsdWUgSFRNTERvY3VtZW50OjpnZXQoRXhlY1N0YXRlICpleGVjLAogICAg
IGNhc2UgR2V0RWxlbWVudHNCeU5hbWU6CiAgICAgY2FzZSBDYXB0dXJlRXZlbnRzOgogICAgIGNh
c2UgUmVsZWFzZUV2ZW50czoKLSAgICAgIHJldHVybiBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPEhU
TUxEb2NGdW5jdGlvbj4oIGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBl
bnRyeS0+cGFyYW1zLCBlbnRyeS0+YXR0ciApOwotICAgIH0KLSAgfQotICAvLyBMb29rIGZvciBv
dmVycmlkZXMKLSAgVmFsdWVJbXAgKnZhbCA9IE9iamVjdEltcDo6Z2V0RGlyZWN0KHByb3BlcnR5
TmFtZSk7Ci0gIGlmICh2YWwpCi0gICAgcmV0dXJuIFZhbHVlKHZhbCk7Ci0KLSAgSFRNTEJvZHlF
bGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1lKEhUTUxU
YWdzOjpib2R5KCkpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgKj4oYm9keSkg
OiAwOwotCi0gIGlmIChlbnRyeSkgewotICAgIHN3aXRjaCAoZW50cnktPnZhbHVlKSB7CisgICAg
ICByZXN1bHQgPSBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPEhUTUxEb2NGdW5jdGlvbj4oIGV4ZWMs
IHByb3BlcnR5TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1zLCBlbnRyeS0+
YXR0ciApOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBCZ0NvbG9yOgotICAgICAgaWYg
KCFib2R5RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgcmV0dXJu
IFN0cmluZyhib2R5RWxlbWVudC0+YmdDb2xvcigpKTsKKyAgICAgIGlmIChib2R5RWxlbWVudCkK
KyAgICAgICAgcmVzdWx0ID0gU3RyaW5nKGJvZHlFbGVtZW50LT5iZ0NvbG9yKCkpOworICAgICAg
ZWxzZQorICAgICAgICByZXN1bHQgPSBVbmRlZmluZWQoKTsKKyAgICAgIHJldHVybiB0cnVlOwog
ICAgIGNhc2UgRmdDb2xvcjoKLSAgICAgIGlmICghYm9keUVsZW1lbnQpCi0gICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKLSAgICAgIHJldHVybiBTdHJpbmcoYm9keUVsZW1lbnQtPnRleHQoKSk7
CisgICAgICBpZiAoYm9keUVsZW1lbnQpCisgICAgICAgIHJlc3VsdCA9IFN0cmluZyhib2R5RWxl
bWVudC0+dGV4dCgpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7
CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIEFsaW5rQ29sb3I6Ci0gICAgICBpZiAoIWJv
ZHlFbGVtZW50KQotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICByZXR1cm4gU3Ry
aW5nKGJvZHlFbGVtZW50LT5hTGluaygpKTsKKyAgICAgIGlmIChib2R5RWxlbWVudCkKKyAgICAg
ICAgcmVzdWx0ID0gU3RyaW5nKGJvZHlFbGVtZW50LT5hTGluaygpKTsKKyAgICAgIGVsc2UKKyAg
ICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNl
IExpbmtDb2xvcjoKLSAgICAgIGlmICghYm9keUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKLSAgICAgIHJldHVybiBTdHJpbmcoYm9keUVsZW1lbnQtPmxpbmsoKSk7CisgICAg
ICBpZiAoYm9keUVsZW1lbnQpCisgICAgICAgIHJlc3VsdCA9IFN0cmluZyhib2R5RWxlbWVudC0+
bGluaygpKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFZsaW5rQ29sb3I6Ci0gICAgICBpZiAoIWJvZHlFbGVt
ZW50KQotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICByZXR1cm4gU3RyaW5nKGJv
ZHlFbGVtZW50LT52TGluaygpKTsKKyAgICAgIGlmIChib2R5RWxlbWVudCkKKyAgICAgICAgcmVz
dWx0ID0gU3RyaW5nKGJvZHlFbGVtZW50LT52TGluaygpKTsKKyAgICAgIGVsc2UKKyAgICAgICAg
cmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIExhc3RN
b2RpZmllZDoKLSAgICAgIHJldHVybiBTdHJpbmcoZG9jLmxhc3RNb2RpZmllZCgpKTsKKyAgICAg
IHJlc3VsdCA9IFN0cmluZyhkb2MubGFzdE1vZGlmaWVkKCkpOworICAgICAgcmV0dXJuIHRydWU7
CiAgICAgY2FzZSBIZWlnaHQ6Ci0gICAgICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250
ZW50c0hlaWdodCgpIDogMCk7CisgICAgICByZXN1bHQgPSBOdW1iZXIodmlldyA/IHZpZXctPmNv
bnRlbnRzSGVpZ2h0KCkgOiAwKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgV2lkdGg6
Ci0gICAgICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1dpZHRoKCkgOiAwKTsK
KyAgICAgIHJlc3VsdCA9IE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNXaWR0aCgpIDogMCk7
CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIERpcjoKLSAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwotICAgICAgcmV0dXJuIFN0cmluZyhib2R5RWxlbWVudC0+ZGlyKCkpOworICAgICAg
aWYgKGJvZHlFbGVtZW50KQorICAgICAgICByZXN1bHQgPSBTdHJpbmcoYm9keUVsZW1lbnQtPmRp
cigpKTsKKyAgICAgIGVsc2UgCisgICAgICAgIHJlc3VsdCA9IFVuZGVmaW5lZCgpOworICAgICAg
cmV0dXJuIHRydWU7CiAgICAgY2FzZSBEZXNpZ25Nb2RlOgotICAgICAgcmV0dXJuIFN0cmluZyhk
b2MuaW5EZXNpZ25Nb2RlKCkgPyAib24iIDogIm9mZiIpOworICAgICAgcmVzdWx0ID0gU3RyaW5n
KGRvYy5pbkRlc2lnbk1vZGUoKSA/ICJvbiIgOiAib2ZmIik7CisgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgYXNzZXJ0KDApOwogICAgIH0KICAgfQogCi0gIHJldHVybiBE
T01Eb2N1bWVudDo6Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgIHJldHVybiBET01Eb2N1bWVu
dDo6Z2V0T3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lLCByZXN1bHQpOwogfQogCiB2b2lk
IEtKUzo6SFRNTERvY3VtZW50OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCkBAIC0xMjc0LDMw
ICsxMzAwLDM2IEBAIEhUTUxFbGVtZW50OjpIVE1MRWxlbWVudChFeGVjU3RhdGUgKmV4ZWMKIHsK
IH0KIAotVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBLSlM6OkhUTUxFbGVtZW50Ojpn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1l
bnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0jaWZkZWYgS0pT
X1ZFUkJPU0UKLSAgICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQg
IiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFn
TmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKKwogICAgIC8vIEZpcnN0IGxvb2sgYXQg
ZHluYW1pYyBwcm9wZXJ0aWVzCiAgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxUYWdz
Ojpmb3JtKCkpKSB7CiAgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNf
Y2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwogICAgICAgICAvLyBDaGVjayBp
ZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCiAgICAg
ICAgIGJvb2wgb2s7CiAgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7
Ci0gICAgICAgIGlmIChvaykKLSAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGZv
cm0uZWxlbWVudHMoKS0+aXRlbSh1KSk7CisgICAgICAgIGlmIChvaykgeworICAgICAgICAgICAg
cmVzdWx0ID0gZ2V0RE9NTm9kZShleGVjLCBmb3JtLmVsZW1lbnRzKCktPml0ZW0odSkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwogICAgICAgICBWYWx1ZUltcCAqbmFt
ZWRJdGVtcyA9IEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS5nZXQoKSkuZ2V0
TmFtZWRJdGVtcyhleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAoIW5hbWVkSXRlbXMt
PmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbmFtZWRJdGVtczsKKyAgICAgICAg
aWYgKCFuYW1lZEl0ZW1zLT5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBu
YW1lZEl0ZW1zOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9CiAg
ICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTFRhZ3M6OnNlbGVjdCgpKSkgewog
ICAgICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKICAgICAgICAgYm9vbCBvazsKICAgICAgICAg
dWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgICAgaWYgKG9rKQotICAg
ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVj
dGlvbigpLT5pdGVtKHUpKTsgLy8gbm90IHNwZWNpZmllZCBieSBET00oPykgYnV0IHN1cHBvcnRl
ZCBpbiBuZXRzY2FwZS9JRQorICAgICAgICBpZiAob2spIHsKKyAgICAgICAgICAgIC8vIG5vdCBz
cGVjaWZpZWQgYnkgRE9NKD8pIGJ1dCBzdXBwb3J0ZWQgaW4gbmV0c2NhcGUvSUUKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGdldERPTU5vZGUoZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlv
bigpLT5pdGVtKHUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAg
fQogICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxUYWdzOjpmcmFtZXNldCgp
KSkgewogICAgICAgICBOb2RlSW1wbCAqZnJhbWUgPSBlbGVtZW50LmNoaWxkcmVuKCktPm5hbWVk
SXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpOwpAQCAtMTMwOCw3ICsxMzQwLDggQEAgVmFsdWUg
S0pTOjpIVE1MRWxlbWVudDo6Z2V0KEV4ZWNTdGF0ZSAqZQogICAgICAgICAgICAgICAgIGlmIChw
YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRy
aWV2ZVdpbmRvdyhwYXJ0KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlKHdpbmRvdyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBWYWx1ZSh3aW5kb3cpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkBAIC0xMzE5LDIyICsxMzUyLDI4IEBAIFZhbHVlIEtKUzo6SFRNTEVs
ZW1lbnQ6OmdldChFeGVjU3RhdGUgKmUKICAgICAgICAgaWYgKGRvYykgewogICAgICAgICAgICAg
S0hUTUxQYXJ0KiBwYXJ0ID0gZG9jLT5wYXJ0KCk7CiAgICAgICAgICAgICBpZiAocGFydCkgewot
ICAgICAgICAgICAgICBXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVXaW5kb3cocGFy
dCk7Ci0JICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3ctPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3Bl
cnR5TmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy0+Z2V0KGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CisgICAgICAgICAgICAgICAgV2luZG93ICp3aW5kb3cgPSBXaW5kb3c6OnJldHJp
ZXZlV2luZG93KHBhcnQpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93LT5o
YXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IHdpbmRvdy0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogI2lmIEFQUExFX0NIQU5HRVMKICAgICBlbHNlIGlmIChlbGVtZW50Lmhh
c0xvY2FsTmFtZShIVE1MVGFnczo6ZW1iZWQoKSkgfHwgZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRN
TFRhZ3M6Om9iamVjdCgpKSB8fAogICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhU
TUxUYWdzOjphcHBsZXQoKSkpIHsKLQlpZiAocHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRp
bWVfb2JqZWN0IikKLQkgICAgcmV0dXJuIGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7
CisgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiKSB7
CisJICAgIHJlc3VsdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRS
dW50aW1lT2JqZWN0KGV4ZWMsJmVsZW1lbnQpOwogCWlmICghcnVudGltZU9iamVjdC5pc051bGwo
KSkgewogCSAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50
aW1lT2JqZWN0LmltcCgpKTsKLQkgICAgaWYgKGltcC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVy
dHlOYW1lKSkKLQkJcmV0dXJuIGltcC0+Z2V0IChleGVjLCBwcm9wZXJ0eU5hbWUpOworCSAgICBp
ZiAoaW1wLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CisJCXJlc3VsdCA9IGlt
cC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CiAJfQogICAgIH0KICNlbmRpZgpAQCAtMTM0MywxMiArMTM4MiwxNCBA
QCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50OjpnZXQoRXhlY1N0YXRlICplCiAgICAgY29uc3QgSGFz
aEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIGlmIChlbnRyeSkgewogICAgICAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPEtKUzo6SFRNTEVsZW1lbnRG
dW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzLCBlbnRyeS0+dmFsdWUsIGVudHJ5LT5w
YXJhbXMsIGVudHJ5LT5hdHRyKTsKLSAgICAgICAgcmV0dXJuIGdldFZhbHVlUHJvcGVydHkoZXhl
YywgZW50cnktPnZhbHVlKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGxvb2t1cE9yQ3JlYXRlRnVu
Y3Rpb248S0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uPihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMs
IGVudHJ5LT52YWx1ZSwgZW50cnktPnBhcmFtcywgZW50cnktPmF0dHIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXN1bHQgPSBnZXRWYWx1ZVByb3BlcnR5KGV4ZWMsIGVudHJ5LT52YWx1
ZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIEJhc2UgSFRNTEVsZW1l
bnQgc3R1ZmYgb3IgcGFyZW50IGNsYXNzIGZvcndhcmQsIGFzIHVzdWFsCi0gICAgcmV0dXJuIGxv
b2t1cEdldDxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24sIEtKUzo6SFRNTEVsZW1lbnQsIERPTUVs
ZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkhUTUxFbGVtZW50VGFibGUsIHRoaXMpOworICAg
IHJldHVybiBsb29rdXBHZXRPd25Qcm9wZXJ0eTxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24sIEtK
Uzo6SFRNTEVsZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkhUTUxFbGVt
ZW50VGFibGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6aW1w
bGVtZW50c0NhbGwoKSBjb25zdApAQCAtMzMxOSwzNyArMzM2MCw0NyBAQCBib29sIEtKUzo6SFRN
TENvbGxlY3Rpb246Omhhc093blByb3BlcnR5CiAgIHJldHVybiBET01PYmplY3Q6Omhhc093blBy
b3BlcnR5KGV4ZWMsIHApOwogfQogCi1WYWx1ZSBLSlM6OkhUTUxDb2xsZWN0aW9uOjpnZXQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Citib29s
IEtKUzo6SFRNTENvbGxlY3Rpb246OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewotI2lm
ZGVmIEtKU19WRVJCT1NFCi0gIGtkRGVidWcoKSA8PCAiS0pTOjpIVE1MQ29sbGVjdGlvbjo6Z2V0
ICIgPDwgcHJvcGVydHlOYW1lLmFzY2lpKCkgPDwgZW5kbDsKLSNlbmRpZgogICBIVE1MQ29sbGVj
dGlvbkltcGwgJmNvbGxlY3Rpb24gPSAqbV9pbXBsOwotICBpZiAocHJvcGVydHlOYW1lID09IGxl
bmd0aFByb3BlcnR5TmFtZSkKLSAgICByZXR1cm4gTnVtYmVyKGNvbGxlY3Rpb24ubGVuZ3RoKCkp
OwotICBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gInNlbGVjdGVkSW5kZXgiKSB7CisgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gbGVuZ3RoUHJvcGVydHlOYW1lKSB7CisgICAgcmVzdWx0ID0gTnVtYmVy
KGNvbGxlY3Rpb24ubGVuZ3RoKCkpOworICAgIHJldHVybiB0cnVlOworICB9IGVsc2UgaWYgKHBy
b3BlcnR5TmFtZSA9PSAic2VsZWN0ZWRJbmRleCIpIHsKKyAgICAvLyBGSVhNRTogc2hvdWxkIHdl
IHJlYWxseSBoYW5kbGUgc2VsZWN0ZWRJbmRleCBoZXJlLCBhcyB3ZWxsIGFzIGluIEhUTUxTZWxl
Y3RDb2xsZWN0aW9uPworCiAgICAgLy8gTk9OLVNUQU5EQVJEIG9wdGlvbnMuc2VsZWN0ZWRJbmRl
eAogICAgIE5vZGVJbXBsICpvcHRpb24gPSBjb2xsZWN0aW9uLml0ZW0oMCk7CiAgICAgaWYgKG9w
dGlvbi0+aGFzVGFnTmFtZShIVE1MVGFnczo6b3B0aW9uKCkpKSB7CiAgICAgICBOb2RlSW1wbCAq
c2VsZWN0ID0gb3B0aW9uOwogICAgICAgd2hpbGUgKChzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5v
ZGUoKSkpCi0gICAgICAgIGlmIChzZWxlY3QtPmhhc1RhZ05hbWUoSFRNTFRhZ3M6OnNlbGVjdCgp
KSkKLQkgIHJldHVybiBOdW1iZXIoc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICo+
KHNlbGVjdCktPnNlbGVjdGVkSW5kZXgoKSk7CisgICAgICAgIGlmIChzZWxlY3QtPmhhc1RhZ05h
bWUoSFRNTFRhZ3M6OnNlbGVjdCgpKSkgeworCSAgcmVzdWx0ID0gIE51bWJlcihzdGF0aWNfY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudEltcGwgKj4oc2VsZWN0KS0+c2VsZWN0ZWRJbmRleCgpKTsKKyAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiAgIH0gZWxzZSB7CiAgICAgLy8gTG9vayBpbiB0aGUgcHJvdG90eXBlIChmb3IgZnVu
Y3Rpb25zKSBiZWZvcmUgYXNzdW1pbmcgaXQncyBhbiBpdGVtJ3MgbmFtZQogICAgIE9iamVjdCBw
cm90byA9IE9iamVjdDo6ZHluYW1pY0Nhc3QocHJvdG90eXBlKCkpOwogICAgIGlmICghcHJvdG8u
aXNOdWxsKCkgJiYgcHJvdG8uaGFzUHJvcGVydHkoZXhlYyxwcm9wZXJ0eU5hbWUpKQotICAgICAg
cmV0dXJuIHByb3RvLmdldChleGVjLHByb3BlcnR5TmFtZSk7CisgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAvLyBuYW1lIG9yIGluZGV4ID8KICAgICBib29sIG9rOwogICAgIHVuc2lnbmVkIGlu
dCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICBpZiAob2spCi0gICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLCBjb2xsZWN0aW9uLml0ZW0odSkpOwotICAgIHJldHVybiBnZXRO
YW1lZEl0ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKG9rKSB7CisgICAgICByZXN1
bHQgPSBnZXRET01Ob2RlKGV4ZWMsIGNvbGxlY3Rpb24uaXRlbSh1KSk7CisgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBWYWx1ZSBpdGVtcyA9IGdldE5hbWVkSXRlbXMoZXhlYywgcHJv
cGVydHlOYW1lKTsKKyAgICBpZiAoIWl0ZW1zLmltcCgpLT5pc1VuZGVmaW5lZCgpKSB7CisgICAg
ICByZXN1bHQgPSBpdGVtczsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgfQorCisgIHJl
dHVybiBET01PYmplY3Q6OmdldE93blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgcmVzdWx0
KTsKIH0KIAogLy8gSFRNTENvbGxlY3Rpb25zIGFyZSBzdHJhbmdlIG9iamVjdHMsIHRoZXkgc3Vw
cG9ydCBib3RoIGdldCBhbmQgY2FsbCwKQEAgLTM0NDcsMTIgKzM0OTgsMTQgQEAgSFRNTFNlbGVj
dENvbGxlY3Rpb246OkhUTUxTZWxlY3RDb2xsZWN0aQogewogfQogCi1WYWx1ZSBLSlM6OkhUTUxT
ZWxlY3RDb2xsZWN0aW9uOjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
KSBjb25zdAorYm9vbCBLSlM6OkhUTUxTZWxlY3RDb2xsZWN0aW9uOjpnZXRPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnAsIFZhbHVlJiByZXN1bHQpIGNvbnN0
CiB7Ci0gIGlmIChwID09ICJzZWxlY3RlZEluZGV4IikKLSAgICByZXR1cm4gTnVtYmVyKG1fZWxl
bWVudC0+c2VsZWN0ZWRJbmRleCgpKTsKKyAgaWYgKHAgPT0gInNlbGVjdGVkSW5kZXgiKSB7Cisg
ICAgcmVzdWx0ID0gTnVtYmVyKG1fZWxlbWVudC0+c2VsZWN0ZWRJbmRleCgpKTsKKyAgICByZXR1
cm4gdHJ1ZTsKKyAgfQogCi0gIHJldHVybiAgSFRNTENvbGxlY3Rpb246OmdldChleGVjLCBwKTsK
KyAgcmV0dXJuIEhUTUxDb2xsZWN0aW9uOjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwLCByZXN1bHQp
OwogfQogCiB2b2lkIEtKUzo6SFRNTFNlbGVjdENvbGxlY3Rpb246OnB1dChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBp
bnQpCkBAIC0zNjIxLDkgKzM2NzQsOSBAQCBjb25zdCBDbGFzc0luZm8gS0pTOjpJbWFnZTo6aW5m
byA9IHsgIkltCiBAZW5kCiAqLwogCi1WYWx1ZSBJbWFnZTo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBJbWFnZTo6Z2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUs
IFZhbHVlICZyZXN1bHQpIGNvbnN0CiB7Ci0gIHJldHVybiBsb29rdXBHZXRWYWx1ZTxJbWFnZSxE
T01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkltYWdlVGFibGUsIHRoaXMpOworICByZXR1
cm4gbG9va3VwR2V0T3duVmFsdWU8SW1hZ2UsRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUs
ICZJbWFnZVRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCiBWYWx1ZSBJbWFnZTo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdApAQCAtNDY0MywxNyArNDY5Niwx
MCBAQCBjb25zdCBDbGFzc0luZm8gQ29udGV4dDJEOjppbmZvID0geyAiQ29uCiBAZW5kCiAqLwog
Ci1WYWx1ZSBDb250ZXh0MkQ6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIg
JnByb3BlcnR5TmFtZSkgY29uc3QKK2Jvb2wgQ29udGV4dDJEOjpnZXRPd25Qcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3Vs
dCkgY29uc3QKIHsKLSAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnBy
b3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxlCi0gICAgY29uc3QgSGFzaEVu
dHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICAg
IGlmIChlbnRyeSkgewotICAgICAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikKLSAgICAg
ICAgICAgIHJldHVybiBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPEtKUzo6Q29udGV4dDJERnVuY3Rp
b24+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1z
LCBlbnRyeS0+YXR0cik7Ci0gICAgICAgIHJldHVybiBnZXRWYWx1ZVByb3BlcnR5KGV4ZWMsIGVu
dHJ5LT52YWx1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPENvbnRleHQy
RCxET01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkNvbnRleHQyRFRhYmxlLCB0aGlzKTsK
KyAgICAvLyBGSVhNRTogZnVuY3Rpb25zIHNob3VsZCBiZSBvbiB0aGUgcHJvdG90eXBlLCBub3Qg
aW4gdGhlIG9iamVjdCBpdHNlbGYKKyAgICByZXR1cm4gbG9va3VwR2V0T3duUHJvcGVydHk8Q29u
dGV4dDJERnVuY3Rpb24sIENvbnRleHQyRCwgRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUs
ICZDb250ZXh0MkRUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFsdWUgQ29udGV4dDJEOjpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0CkBAIC01MjEyLDE3
ICs1MjU4LDkgQEAgR3JhZGllbnQ6OkdyYWRpZW50KGZsb2F0IHgwLCBmbG9hdCB5MCwgZgogICAg
IGNvbW1vbkluaXQoKTsKIH0KIAotVmFsdWUgR3JhZGllbnQ6OmdldChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK2Jvb2wgR3JhZGllbnQ6Omdl
dE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdAogewotICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUg
PSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUK
LSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkodGFibGUsIHBy
b3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICAgIGlmIChlbnRyeS0+YXR0ciAm
IEZ1bmN0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248S0pT
OjpHcmFkaWVudEZ1bmN0aW9uPihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMsIGVudHJ5LT52YWx1
ZSwgZW50cnktPnBhcmFtcywgZW50cnktPmF0dHIpOwotICAgICAgICByZXR1cm4gZ2V0VmFsdWVQ
cm9wZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOwotICAgIH0KLQotICAgIHJldHVybiBsb29rdXBH
ZXRWYWx1ZTxHcmFkaWVudCxET01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkdyYWRpZW50
VGFibGUsIHRoaXMpOworICAgIHJldHVybiBsb29rdXBHZXRPd25Qcm9wZXJ0eTxHcmFkaWVudEZ1
bmN0aW9uLCBHcmFkaWVudCwgRE9NT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUsICZHcmFkaWVu
dFRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCiBWYWx1ZSBHcmFkaWVudDo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdApAQCAtNTQxNiwxNyArNTQ1NCw5IEBA
IENHUGF0dGVyblJlZiBJbWFnZVBhdHRlcm46OmNyZWF0ZVBhdHRlcm4KICAgICByZXR1cm4gQ0dQ
YXR0ZXJuQ3JlYXRlKHRoaXMsIF9ib3VuZHMsIHBhdHRlcm5UcmFuc2Zvcm0sIF9ydywgX3JoLCBr
Q0dQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nLCB0cnVlLCAmcGF0dGVybkNhbGxiYWNrcyk7
CiB9CiAKLVZhbHVlIEltYWdlUGF0dGVybjo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBJbWFnZVBhdHRlcm46OmdldE93blBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBW
YWx1ZSYgcmVzdWx0KSBjb25zdAogewotICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFz
c0luZm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKLSAgICBj
b25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5
TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0
aW9uKQotICAgICAgICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248R3JhZGllbnRG
dW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzLCBlbnRyeS0+dmFsdWUsIGVudHJ5LT5w
YXJhbXMsIGVudHJ5LT5hdHRyKTsKLSAgICAgICAgcmV0dXJuIGdldFZhbHVlUHJvcGVydHkoZXhl
YywgZW50cnktPnZhbHVlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbG9va3VwR2V0VmFsdWU8SW1h
Z2VQYXR0ZXJuLERPTU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCAmSW1hZ2VQYXR0ZXJuVGFi
bGUsIHRoaXMpOworICAgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxJbWFnZVBhdHRlcm4sIERP
TU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCAmSW1hZ2VQYXR0ZXJuVGFibGUsIHRoaXMsIHJl
c3VsdCk7CiB9CiAKIFZhbHVlIEltYWdlUGF0dGVybjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3Rh
dGUgKiwgaW50IHRva2VuKSBjb25zdApJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1s
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNf
aHRtbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUyCmRpZmYgLXUgLXAgLXIxLjUyIFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfaHRtbC5oCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwu
aAkyNCBKdWwgMjAwNSAyMjo0NDo1NSAtMDAwMAkxLjUyCisrKyBXZWJDb3JlL2todG1sL2VjbWEv
a2pzX2h0bWwuaAkyNSBKdWwgMjAwNSAwNjowNDozOCAtMDAwMApAQCAtNDcsNyArNDcsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgSFRNTERvY3VtZW50IDogcHVibGljIERPTURvY3VtZW50
IHsKICAgcHVibGljOgogICAgIEhUTUxEb2N1bWVudChFeGVjU3RhdGUgKmV4ZWMsIERPTTo6SFRN
TERvY3VtZW50SW1wbCAqZCk7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUm
IHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgLyphdHRyKi8p
OwogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CkBAIC02Miw3ICs2Miw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICBjbGFzcyBIVE1MRWxlbWVudCA6IHB1YmxpYyBET01FbGVtZW50IHsKICAg
cHVibGljOgogICAgIEhUTUxFbGVtZW50KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpIVE1MRWxlbWVu
dEltcGwgKmUpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50KTsKQEAgLTI5NSw3
ICsyOTUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEhUTUxDb2xsZWN0aW9u
KEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpIVE1MQ29sbGVjdGlvbkltcGwgKmMpOwogICAgIH5IVE1M
Q29sbGVjdGlvbigpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgVmFsdWUgY2FsbChFeGVjU3Rh
dGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKTsKICAgICB2aXJ0dWFs
IGJvb2wgaW1wbGVtZW50c0NhbGwoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVh
bCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAt
MzEyLDcgKzMxMiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBIVE1MU2VsZWN0Q29sbGVj
dGlvbiA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbiB7CiAgIHB1YmxpYzoKICAgICBIVE1MU2VsZWN0
Q29sbGVjdGlvbihFeGVjU3RhdGUgKmV4ZWMsIERPTTo6SFRNTENvbGxlY3Rpb25JbXBsICpjLCBE
T006OkhUTUxTZWxlY3RFbGVtZW50SW1wbCAqZSk7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICBwcml2YXRlOgogICAgIGto
dG1sOjpTaGFyZWRQdHI8RE9NOjpIVE1MU2VsZWN0RWxlbWVudEltcGw+IG1fZWxlbWVudDsKQEAg
LTM0NCw3ICszNDQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEltYWdlKERP
TTo6RG9jdW1lbnRJbXBsICpkLCBib29sIHdzLCBpbnQgdywgYm9vbCBocywgaW50IGgpOwogICAg
IH5JbWFnZSgpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IC8qYXR0ciovKTsK
QEAgLTM3NCw3ICszNzQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIENvbnRl
eHQyRChET006OkhUTUxFbGVtZW50SW1wbCAqZSk7CiAgICAgfkNvbnRleHQyRCgpOwotICAgIHZp
cnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVy
dHlOYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNv
bnN0OwogICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIgPSBO
b25lKTsKICAgICB2b2lkIHB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IC8qYXR0ciovKTsKQEAgLTQ2Niw3ICs0NjYsNyBA
QCBwcml2YXRlOgogICAgIEdyYWRpZW50KGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEsIGZs
b2F0IHkxKTsKICAgICBHcmFkaWVudChmbG9hdCB4MCwgZmxvYXQgeTAsIGZsb2F0IHIwLCBmbG9h
dCB4MSwgZmxvYXQgeTEsIGZsb2F0IHIxKTsKICAgICB+R3JhZGllbnQoKTsKLSAgICB2aXJ0dWFs
IFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFt
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsK
ICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9uZSk7
CiAgICAgdm9pZCBwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGludCAvKmF0dHIqLyk7CkBAIC01MTIsNyArNTEyLDcgQEAgcHJp
dmF0ZTogICAgCiAgIGNsYXNzIEltYWdlUGF0dGVybiA6IHB1YmxpYyBET01PYmplY3QgewogICBw
dWJsaWM6CiAgICAgSW1hZ2VQYXR0ZXJuKEltYWdlICppLCBpbnQgdHlwZSk7Ci0gICAgdmlydHVh
bCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7
CiAgICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUp
OwogICAgIHZvaWQgcHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgLyphdHRyKi8pOwpJbmRleDogV2ViQ29yZS9raHRtbC9l
Y21hL2tqc19uYXZpZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRvci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MjkKZGlmZiAtdSAtcCAtcjEuMjkgV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3Bw
Ci0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRvci5jcHAJMTkgSnVsIDIwMDUgMTk6
NTI6NDkgLTAwMDAJMS4yOQorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuY3Bw
CTI1IEp1bCAyMDA1IDA2OjA0OjM4IC0wMDAwCkBAIC03NSw3ICs3NSw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgIGNsYXNzIFBsdWdpbnMgOiBwdWJsaWMgUGx1Z2luQmFzZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBQbHVnaW5zKEV4ZWNTdGF0ZSAqZXhlYykgOiBQbHVnaW5CYXNlKGV4ZWMpIHt9
OwotICAgICAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
VmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIGluZm87CiAgICAgcHJpdmF0ZToKQEAgLTg2LDcgKzg2LDcgQEAgbmFtZXNwYWNl
IEtKUyB7CiAgICAgY2xhc3MgTWltZVR5cGVzIDogcHVibGljIFBsdWdpbkJhc2UgewogICAgIHB1
YmxpYzoKICAgICAgICAgTWltZVR5cGVzKEV4ZWNTdGF0ZSAqZXhlYykgOiBQbHVnaW5CYXNlKGV4
ZWMpIHsgfTsKLSAgICAgICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICAgIHByaXZhdGU6CkBAIC05Niw4ICs5Niw4IEBAIG5h
bWVzcGFjZSBLSlMgewogCiAgICAgY2xhc3MgUGx1Z2luIDogcHVibGljIFBsdWdpbkJhc2Ugewog
ICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luKCBFeGVjU3RhdGUgKmV4ZWMsIFBsdWdpbkluZm8g
KmluZm8gKSA6IFBsdWdpbkJhc2UoZXhlYyksIG1faW5mbyhpbmZvKSB7IH0KLSAgICAgICAgdmly
dHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUpIGNvbnN0OworICAgICAgICBQbHVnaW4oRXhlY1N0YXRlICpleGVjLCBQbHVnaW5JbmZv
ICppbmZvKSA6IFBsdWdpbkJhc2UoZXhlYyksIG1faW5mbyhpbmZvKSB7IH0KKyAgICAgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICAgICAgdmlydHVhbCBj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICBwcml2YXRlOgpAQCAtMTA5LDcg
KzEwOSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGNsYXNzIE1pbWVUeXBlIDogcHVibGljIFBs
dWdpbkJhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgTWltZVR5cGUoIEV4ZWNTdGF0ZSAqZXhl
YywgTWltZUNsYXNzSW5mbyAqaW5mbyApIDogUGx1Z2luQmFzZShleGVjKSwgbV9pbmZvKGluZm8p
IHsgfQotICAgICAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIGluZm87CiAgICAgcHJpdmF0ZToKQEAgLTE0NCwxMiArMTQ0LDkgQEAgSU1Q
TEVNRU5UX1BST1RPRlVOQyhOYXZpZ2F0b3JGdW5jKQogTmF2aWdhdG9yOjpOYXZpZ2F0b3IoRXhl
Y1N0YXRlICpleGVjLCBLSFRNTFBhcnQgKnApCiAgIDogT2JqZWN0SW1wKGV4ZWMtPmxleGljYWxJ
bnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCkpLCBtX3BhcnQocCkgeyB9CiAK
LVZhbHVlIE5hdmlnYXRvcjo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBOYXZpZ2F0b3I6OmdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0
KSBjb25zdAogewotI2lmZGVmIEtKU19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwgIk5hdmln
YXRvcjo6Z2V0ICIgPDwgcHJvcGVydHlOYW1lLmFzY2lpKCkgPDwgZW5kbDsKLSNlbmRpZgotICBy
ZXR1cm4gbG9va3VwR2V0PE5hdmlnYXRvckZ1bmMsTmF2aWdhdG9yLE9iamVjdEltcD4oZXhlYyxw
cm9wZXJ0eU5hbWUsJk5hdmlnYXRvclRhYmxlLHRoaXMpOworICByZXR1cm4gbG9va3VwR2V0T3du
UHJvcGVydHk8TmF2aWdhdG9yRnVuYywgTmF2aWdhdG9yLCBPYmplY3RJbXA+KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgJk5hdmlnYXRvclRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCiBWYWx1ZSBOYXZp
Z2F0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CkBAIC0zMzksMTIwICszMzYsMTI2IEBAIHZvaWQgUGx1Z2luQmFzZTo6cmVmcmVzaChib29sIHJl
bG9hZCkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwogSU1QTEVNRU5UX1BST1RPRlVOQyhQbHVnaW5zRnVuYykKIAot
VmFsdWUgUGx1Z2luczo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJv
cGVydHlOYW1lKSBjb25zdAorYm9vbCBQbHVnaW5zOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29u
c3QKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8ICJQbHVnaW5zOjpn
ZXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICBpZiAo
cHJvcGVydHlOYW1lID09ICJyZWZyZXNoIikKLSAgICAgIHJldHVybiBsb29rdXBPckNyZWF0ZUZ1
bmN0aW9uPFBsdWdpbnNGdW5jPihleGVjLHByb3BlcnR5TmFtZSx0aGlzLDAsMCxEb250RGVsZXRl
fEZ1bmN0aW9uKTsKLSAgICBlbHNlIGlmICggcHJvcGVydHlOYW1lID09bGVuZ3RoUHJvcGVydHlO
YW1lICkKLSAgICAgIHJldHVybiBOdW1iZXIocGx1Z2lucy0+Y291bnQoKSk7Ci0gICAgZWxzZSB7
Ci0KKyAgICBpZiAocHJvcGVydHlOYW1lID09ICJyZWZyZXNoIikgeworICAgICAgICByZXN1bHQg
PSBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPFBsdWdpbnNGdW5jPihleGVjLCBwcm9wZXJ0eU5hbWUs
IHRoaXMsIDAsIDAsIERvbnREZWxldGV8RnVuY3Rpb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSBsZW5ndGhQcm9wZXJ0eU5hbWUpIHsKKyAg
ICAgICAgcmVzdWx0ID0gTnVtYmVyKHBsdWdpbnMtPmNvdW50KCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9IGVsc2UgewogICAgICAgICAvLyBwbHVnaW5zWyNdCiAgICAgICAgIGJvb2wg
b2s7CiAgICAgICAgIHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsK
LSAgICAgICAgaWYoIG9rICYmIGk8cGx1Z2lucy0+Y291bnQoKSApCi0gICAgICAgICAgICByZXR1
cm4gVmFsdWUoIG5ldyBQbHVnaW4oIGV4ZWMsIHBsdWdpbnMtPmF0KGkpICkgKTsKKyAgICAgICAg
aWYgKG9rICYmIGkgPCBwbHVnaW5zLT5jb3VudCgpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBW
YWx1ZShuZXcgUGx1Z2luKGV4ZWMsIHBsdWdpbnMtPmF0KGkpKSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIHBsdWdpbltuYW1lXQotICAgICAgICBm
b3IgKCBQbHVnaW5JbmZvICpwbCA9IHBsdWdpbnMtPmZpcnN0KCk7IHBsIT0wOyBwbCA9IHBsdWdp
bnMtPm5leHQoKSApIHsKLSAgICAgICAgICAgIGlmICggcGwtPm5hbWU9PXByb3BlcnR5TmFtZS5x
c3RyaW5nKCkgKQotICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZSggbmV3IFBsdWdpbiggZXhl
YywgcGwgKSApOworICAgICAgICBmb3IgKFBsdWdpbkluZm8gKnBsID0gcGx1Z2lucy0+Zmlyc3Qo
KTsgcGw7IHBsID0gcGx1Z2lucy0+bmV4dCgpKSB7CisgICAgICAgICAgICBpZiAocGwtPm5hbWU9
PXByb3BlcnR5TmFtZS5xc3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBWYWx1
ZShuZXcgUGx1Z2luKGV4ZWMsIHBsKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gUGx1Z2luQmFzZTo6
Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIFBsdWdpbkJhc2U6OmdldE93blBy
b3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgcmVzdWx0KTsKIH0KIAogLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAK
LVZhbHVlIE1pbWVUeXBlczo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBNaW1lVHlwZXM6OmdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0
KSBjb25zdAogewotI2lmZGVmIEtKU19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwgIk1pbWVU
eXBlczo6Z2V0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCi0g
ICAgaWYoIHByb3BlcnR5TmFtZT09bGVuZ3RoUHJvcGVydHlOYW1lICkKLSAgICAgICAgcmV0dXJu
IE51bWJlciggbWltZXMtPmNvdW50KCkgKTsKLSAgICBlbHNlIHsKLQorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gbGVuZ3RoUHJvcGVydHlOYW1lKSB7CisgICAgICAgIHJlc3VsdCA9IE51bWJlciht
aW1lcy0+Y291bnQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSB7CiAgICAg
ICAgIC8vIG1pbWVUeXBlc1sjXQogICAgICAgICBib29sIG9rOwogICAgICAgICB1bnNpZ25lZCBp
bnQgaSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICAgIGlmKCBvayAmJiBpPG1p
bWVzLT5jb3VudCgpICkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZSggbmV3IE1pbWVUeXBlKCBl
eGVjLCBtaW1lcy0+YXQoaSkgKSApOworICAgICAgICBpZiAob2sgJiYgaSA8IG1pbWVzLT5jb3Vu
dCgpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBWYWx1ZShuZXcgTWltZVR5cGUoZXhlYywgbWlt
ZXMtPmF0KGkpKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCiAgICAg
ICAgIC8vIG1pbWVUeXBlc1tuYW1lXQotICAgICAgICAvL2tkRGVidWcoNjA3MCkgPDwgIk1pbWVU
eXBlc1siIDw8IHByb3BlcnR5TmFtZS5hc2NpaSgpIDw8ICJdIiA8PCBlbmRsOwotICAgICAgICBm
b3IgKCBNaW1lQ2xhc3NJbmZvICptPW1pbWVzLT5maXJzdCgpOyBtIT0wOyBtPW1pbWVzLT5uZXh0
KCkgKSB7Ci0gICAgICAgICAgICAvL2tkRGVidWcoNjA3MCkgPDwgIm0tPnR5cGU9IiA8PCBtLT50
eXBlLmFzY2lpKCkgPDwgZW5kbDsKLSAgICAgICAgICAgIGlmICggbS0+dHlwZSA9PSBwcm9wZXJ0
eU5hbWUucXN0cmluZygpICkKLSAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWUoIG5ldyBNaW1l
VHlwZSggZXhlYywgbSApICk7CisgICAgICAgIGZvciAoTWltZUNsYXNzSW5mbyAqbSA9IG1pbWVz
LT5maXJzdCgpOyBtOyBtID0gbWltZXMtPm5leHQoKSkgeworICAgICAgICAgICAgaWYgKG0tPnR5
cGUgPT0gcHJvcGVydHlOYW1lLnFzdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9
IFZhbHVlKG5ldyBNaW1lVHlwZShleGVjLCBtKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gUGx1Z2lu
QmFzZTo6Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIFBsdWdpbkJhc2U6Omdl
dE93blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSwgcmVzdWx0KTsKIH0KIAogCiAvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwogCi1WYWx1ZSBQbHVnaW46OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK2Jvb2wgUGx1Z2luOjpnZXRPd25Qcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUm
IHJlc3VsdCkgY29uc3QKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8
ICJQbHVnaW46OmdldCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRp
ZgotICAgIGlmICggcHJvcGVydHlOYW1lPT0ibmFtZSIgKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCBtX2luZm8tPm5hbWUgKTsKLSAgICBlbHNlIGlmICggcHJvcGVydHlOYW1lID09ICJmaWxlbmFt
ZSIgKQotICAgICAgICByZXR1cm4gU3RyaW5nKCBtX2luZm8tPmZpbGUgKTsKLSAgICBlbHNlIGlm
ICggcHJvcGVydHlOYW1lID09ICJkZXNjcmlwdGlvbiIgKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCBtX2luZm8tPmRlc2MgKTsKLSAgICBlbHNlIGlmICggcHJvcGVydHlOYW1lID09IGxlbmd0aFBy
b3BlcnR5TmFtZSApCi0gICAgICAgIHJldHVybiBOdW1iZXIoIG1faW5mby0+bWltZXMuY291bnQo
KSApOwotICAgIGVsc2UgeworICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRoZSBoYXNodGFibGUg
bWVjaGFuaXNtIGZvciBwcm9wZXJ0aWVzCiAKKyAgICBpZiAocHJvcGVydHlOYW1lID09ICJuYW1l
IikgeworICAgICAgICByZXN1bHQgPSBTdHJpbmcobV9pbmZvLT5uYW1lKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gImZpbGVuYW1lIikgewor
ICAgICAgICByZXN1bHQgPSBTdHJpbmcobV9pbmZvLT5maWxlKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gImRlc2NyaXB0aW9uIikgeworICAg
ICAgICByZXN1bHQgPSBTdHJpbmcobV9pbmZvLT5kZXNjKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gbGVuZ3RoUHJvcGVydHlOYW1lKSB7Cisg
ICAgICAgIHJlc3VsdCA9IE51bWJlcihtX2luZm8tPm1pbWVzLmNvdW50KCkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgewogICAgICAgICAvLyBwbHVnaW5bI10KICAgICAgICAg
Ym9vbCBvazsKICAgICAgICAgdW5zaWduZWQgaW50IGkgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygm
b2spOwotICAgICAgICAvL2tkRGVidWcoNjA3MCkgPDwgIlBsdWdpbjo6Z2V0IHBsdWdpblsiIDw8
IGkgPDwgIl0iIDw8IGVuZGw7Ci0gICAgICAgIGlmKCBvayAmJiBpPG1faW5mby0+bWltZXMuY291
bnQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAicmV0dXJu
aW5nIG1pbWV0eXBlICIgPDwgbV9pbmZvLT5taW1lcy5hdChpKS0+dHlwZSA8PCBlbmRsOwotICAg
ICAgICAgICAgcmV0dXJuIFZhbHVlKG5ldyBNaW1lVHlwZShleGVjLCBtX2luZm8tPm1pbWVzLmF0
KGkpKSk7CisgICAgICAgIGlmIChvayAmJiBpIDwgbV9pbmZvLT5taW1lcy5jb3VudCgpKSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBWYWx1ZShuZXcgTWltZVR5cGUoZXhlYywgbV9pbmZvLT5taW1l
cy5hdChpKSkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIHBsdWdpblsibmFtZSJdCi0gICAgICAgIGZvciAoIE1pbWVDbGFzc0luZm8gKm09bV9p
bmZvLT5taW1lcy5maXJzdCgpOwotICAgICAgICAgICAgICBtIT0wOyBtPW1faW5mby0+bWltZXMu
bmV4dCgpICkgewotICAgICAgICAgICAgaWYgKCBtLT50eXBlPT1wcm9wZXJ0eU5hbWUucXN0cmlu
ZygpICkKLSAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWUobmV3IE1pbWVUeXBlKGV4ZWMsIG0p
KTsKKyAgICAgICAgZm9yIChNaW1lQ2xhc3NJbmZvICptPW1faW5mby0+bWltZXMuZmlyc3QoKTsg
bTsgbSA9IG1faW5mby0+bWltZXMubmV4dCgpKSB7CisgICAgICAgICAgICBpZiAobS0+dHlwZT09
cHJvcGVydHlOYW1lLnFzdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IFZhbHVl
KG5ldyBNaW1lVHlwZShleGVjLCBtKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgfQogCi0gICAgcmV0dXJuIE9iamVjdElt
cDo6Z2V0KGV4ZWMscHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gT2JqZWN0SW1wOjpnZXRPd25Q
cm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUsIHJlc3VsdCk7CiB9CiAKIAogLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwogCi1WYWx1ZSBNaW1lVHlwZTo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorYm9vbCBNaW1lVHlwZTo6Z2V0T3duUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFZh
bHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcw
KSA8PCAiTWltZVR5cGU6OmdldCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsK
LSNlbmRpZgotICAgIGlmICggcHJvcGVydHlOYW1lID09ICJ0eXBlIiApCi0gICAgICAgIHJldHVy
biBTdHJpbmcoIG1faW5mby0+dHlwZSApOwotICAgIGVsc2UgaWYgKCBwcm9wZXJ0eU5hbWUgPT0g
InN1ZmZpeGVzIiApCi0gICAgICAgIHJldHVybiBTdHJpbmcoIG1faW5mby0+c3VmZml4ZXMgKTsK
LSAgICBlbHNlIGlmICggcHJvcGVydHlOYW1lID09ICJkZXNjcmlwdGlvbiIgKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCBtX2luZm8tPmRlc2MgKTsKLSAgICBlbHNlIGlmICggcHJvcGVydHlOYW1l
ID09ICJlbmFibGVkUGx1Z2luIiApCi0gICAgICAgIHJldHVybiBWYWx1ZShuZXcgUGx1Z2luKGV4
ZWMsIG1faW5mby0+cGx1Z2luKSk7CisgICAgLy8gRklYTUU6IHNob3VsZCB1c2UgaGFzaHRhYmxl
IG1lY2hhbmlzbQorCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSAidHlwZSIpIHsKKyAgICAgICAg
cmVzdWx0ID0gU3RyaW5nKG1faW5mby0+dHlwZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0gZWxzZSBpZiAocHJvcGVydHlOYW1lID09ICJzdWZmaXhlcyIpIHsKKyAgICAgICAgcmVzdWx0
ID0gU3RyaW5nKG1faW5mby0+c3VmZml4ZXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
IGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSAiZGVzY3JpcHRpb24iKSB7CisgICAgICAgIHJlc3Vs
dCA9IFN0cmluZyhtX2luZm8tPmRlc2MpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVs
c2UgaWYgKHByb3BlcnR5TmFtZSA9PSAiZW5hYmxlZFBsdWdpbiIpIHsKKyAgICAgICAgcmVzdWx0
ID0gVmFsdWUobmV3IFBsdWdpbihleGVjLCBtX2luZm8tPnBsdWdpbikpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CiAKLSAgICByZXR1cm4gT2JqZWN0SW1wOjpnZXQoZXhlYyxwcm9wZXJ0
eU5hbWUpOworICAgIHJldHVybiBPYmplY3RJbXA6OmdldE93blByb3BlcnR5KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgcmVzdWx0KTsKIH0KIAogCkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX25h
dmlnYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Vj
bWEva2pzX25hdmlnYXRvci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtdSAtcCAt
cjEuNSBXZWJDb3JlL2todG1sL2VjbWEva2pzX25hdmlnYXRvci5oCi0tLSBXZWJDb3JlL2todG1s
L2VjbWEva2pzX25hdmlnYXRvci5oCTE1IERlYyAyMDAyIDA0OjQzOjUzIC0wMDAwCTEuNQorKysg
V2ViQ29yZS9raHRtbC9lY21hL2tqc19uYXZpZ2F0b3IuaAkyNSBKdWwgMjAwNSAwNjowNDozOCAt
MDAwMApAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgTmF2aWdhdG9y
IDogcHVibGljIE9iamVjdEltcCB7CiAgIHB1YmxpYzoKICAgICBOYXZpZ2F0b3IoRXhlY1N0YXRl
ICpleGVjLCBLSFRNTFBhcnQgKnApOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAgIFZhbHVlIGdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNf
cmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Vj
bWEva2pzX3JhbmdlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC11IC1wIC1y
MS4xMSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3JhbmdlLmNwcAotLS0gV2ViQ29yZS9raHRtbC9l
Y21hL2tqc19yYW5nZS5jcHAJMTkgSnVsIDIwMDUgMTk6NTI6NDkgLTAwMDAJMS4xMQorKysgV2Vi
Q29yZS9raHRtbC9lY21hL2tqc19yYW5nZS5jcHAJMjUgSnVsIDIwMDUgMDY6MDQ6MzggLTAwMDAK
QEAgLTgzLDkgKzgzLDkgQEAgRE9NUmFuZ2U6On5ET01SYW5nZSgpCiAgIFNjcmlwdEludGVycHJl
dGVyOjpmb3JnZXRET01PYmplY3QobV9pbXBsLmdldCgpKTsKIH0KIAotVmFsdWUgRE9NUmFuZ2U6
OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnApIGNvbnN0Citib29sIERP
TVJhbmdlOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0gIHJldHVybiBsb29rdXBHZXRWYWx1ZTxET01S
YW5nZSwgRE9NT2JqZWN0PihleGVjLCBwLCAmRE9NUmFuZ2VUYWJsZSwgdGhpcyk7CisgIHJldHVy
biBsb29rdXBHZXRPd25WYWx1ZTxET01SYW5nZSwgRE9NT2JqZWN0PihleGVjLCBwLCAmRE9NUmFu
Z2VUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFsdWUgRE9NUmFuZ2U6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CkBAIC0yMDQsOSArMjA0LDkg
QEAgY29uc3QgQ2xhc3NJbmZvIFJhbmdlQ29uc3RydWN0b3I6OmluZm8gPQogICBFTkRfVE9fU1RB
UlQJCURPTTo6UmFuZ2U6OkVORF9UT19TVEFSVAlEb250RGVsZXRlfFJlYWRPbmx5CiBAZW5kCiAq
LwotVmFsdWUgUmFuZ2VDb25zdHJ1Y3Rvcjo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcCkgY29uc3QKK2Jvb2wgUmFuZ2VDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHko
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25z
dAogewotICByZXR1cm4gbG9va3VwR2V0VmFsdWU8UmFuZ2VDb25zdHJ1Y3RvcixET01PYmplY3Q+
KGV4ZWMsIHAsICZSYW5nZUNvbnN0cnVjdG9yVGFibGUsIHRoaXMpOworICByZXR1cm4gbG9va3Vw
R2V0T3duVmFsdWU8UmFuZ2VDb25zdHJ1Y3RvcixET01PYmplY3Q+KGV4ZWMsIHAsICZSYW5nZUNv
bnN0cnVjdG9yVGFibGUsIHRoaXMsIHJlc3VsdCk7CiB9CiAKIFZhbHVlIFJhbmdlQ29uc3RydWN0
b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3QKSW5kZXg6
IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19yYW5nZS5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjYKZGlmZiAtdSAtcCAtcjEuNiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3JhbmdlLmgKLS0t
IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcmFuZ2UuaAkxOSBKdWwgMjAwNSAxOTo1Mjo0OSAtMDAw
MAkxLjYKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfcmFuZ2UuaAkyNSBKdWwgMjAwNSAwNjow
NDozOCAtMDAwMApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgog
ICAgIERPTVJhbmdlKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpSYW5nZUltcGwgKnIpOwogICAgIH5E
T01SYW5nZSgpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJ
ZGVudGlmaWVyICZwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0Owog
ICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KQEAgLTU0LDcgKzU0
LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIFJhbmdlQ29uc3RydWN0b3IgOiBwdWJsaWMg
RE9NT2JqZWN0IHsKICAgcHVibGljOgogICAgIFJhbmdlQ29uc3RydWN0b3IoRXhlY1N0YXRlICop
IHsgfQotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlm
aWVyICZwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAgIFZh
bHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7CiAgICAg
Ly8gbm8gcHV0IC0gYWxsIHJlYWQtb25seQogICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQpJbmRleDogV2ViQ29yZS9raHRtbC9l
Y21hL2tqc190cmF2ZXJzYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTIKZGlmZiAtdSAtcCAtcjEuMTIgV2ViQ29yZS9raHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3Bw
Ci0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5jcHAJMTkgSnVsIDIwMDUgMTk6
NTI6NDkgLTAwMDAJMS4xMgorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3Bw
CTI1IEp1bCAyMDA1IDA2OjA0OjM4IC0wMDAwCkBAIC02OCw5ICs2OCw5IEBAIERPTU5vZGVJdGVy
YXRvcjo6fkRPTU5vZGVJdGVyYXRvcigpCiAgIFNjcmlwdEludGVycHJldGVyOjpmb3JnZXRET01P
YmplY3QobV9pbXBsLmdldCgpKTsKIH0KIAotVmFsdWUgRE9NTm9kZUl0ZXJhdG9yOjpnZXQoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdAorYm9vbCBET01Ob2RlSXRl
cmF0b3I6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPERPTU5v
ZGVJdGVyYXRvcixET01PYmplY3Q+KGV4ZWMscCwmRE9NTm9kZUl0ZXJhdG9yVGFibGUsdGhpcyk7
CisgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxET01Ob2RlSXRlcmF0b3IsIERPTU9iamVjdD4o
ZXhlYywgcCwgJkRPTU5vZGVJdGVyYXRvclRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCiBWYWx1
ZSBET01Ob2RlSXRlcmF0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0CkBAIC0xNDUsOSArMTQ1LDkgQEAgY29uc3QgQ2xhc3NJbmZvIE5vZGVGaWx0
ZXJDb25zdHJ1Y3Rvcjo6aQogICBTSE9XX05PVEFUSU9OCQlET006Ok5vZGVGaWx0ZXI6OlNIT1df
Tk9UQVRJT04JRG9udERlbGV0ZXxSZWFkT25seQogQGVuZAogKi8KLVZhbHVlIE5vZGVGaWx0ZXJD
b25zdHJ1Y3Rvcjo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCkgY29u
c3QKK2Jvb2wgTm9kZUZpbHRlckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0gIHJl
dHVybiBsb29rdXBHZXRWYWx1ZTxOb2RlRmlsdGVyQ29uc3RydWN0b3IsRE9NT2JqZWN0PihleGVj
LHAsJk5vZGVGaWx0ZXJDb25zdHJ1Y3RvclRhYmxlLHRoaXMpOworICByZXR1cm4gbG9va3VwR2V0
T3duVmFsdWU8Tm9kZUZpbHRlckNvbnN0cnVjdG9yLCBET01PYmplY3Q+KGV4ZWMsIHAsICZOb2Rl
RmlsdGVyQ29uc3RydWN0b3JUYWJsZSwgdGhpcywgcmVzdWx0KTsKIH0KIAogVmFsdWUgTm9kZUZp
bHRlckNvbnN0cnVjdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4p
IGNvbnN0CkBAIC0yNDcsOSArMjQ3LDkgQEAgRE9NVHJlZVdhbGtlcjo6fkRPTVRyZWVXYWxrZXIo
KQogICBTY3JpcHRJbnRlcnByZXRlcjo6Zm9yZ2V0RE9NT2JqZWN0KG1faW1wbC5nZXQoKSk7CiB9
CiAKLVZhbHVlIERPTVRyZWVXYWxrZXI6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnApIGNvbnN0Citib29sIERPTVRyZWVXYWxrZXI6OmdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsK
LSAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPERPTVRyZWVXYWxrZXIsRE9NT2JqZWN0PihleGVjLHAs
JkRPTVRyZWVXYWxrZXJUYWJsZSx0aGlzKTsKKyAgcmV0dXJuIGxvb2t1cEdldE93blZhbHVlPERP
TVRyZWVXYWxrZXIsIERPTU9iamVjdD4oZXhlYywgcCwgJkRPTVRyZWVXYWxrZXJUYWJsZSwgdGhp
cywgcmVzdWx0KTsKIH0KIAogVmFsdWUgRE9NVHJlZVdhbGtlcjo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfdHJhdmVyc2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZm
IC11IC1wIC1yMS43IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmgKLS0tIFdlYkNv
cmUva2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmgJMTkgSnVsIDIwMDUgMTk6NTI6NDkgLTAwMDAJ
MS43CisrKyBXZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5oCTI1IEp1bCAyMDA1IDA2
OjA0OjM4IC0wMDAwCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6
CiAgICAgRE9NTm9kZUl0ZXJhdG9yKEV4ZWNTdGF0ZSAqZXhlYywgRE9NOjpOb2RlSXRlcmF0b3JJ
bXBsICpuaSk7CiAgICAgfkRPTU5vZGVJdGVyYXRvcigpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0
KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLGNvbnN0IElkZW50aWZpZXImIHAs
IFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIC8vIG5vIHB1dCAtIGFsbCByZWFkLW9u
bHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIE5v
ZGVGaWx0ZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01PYmplY3QgewogICBwdWJsaWM6CiAgICAg
Tm9kZUZpbHRlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSAqKSB7IH0KLSAgICB2aXJ0dWFsIFZhbHVl
IGdldChFeGVjU3RhdGUgKmV4ZWMsY29uc3QgSWRlbnRpZmllciAmcCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVy
JiBwLCBWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKICAgICAvLyBubyBwdXQgLSBhbGwgcmVh
ZC1vbmx5CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsg
cmV0dXJuICZpbmZvOyB9CkBAIC03Niw3ICs3Niw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJs
aWM6CiAgICAgRE9NVHJlZVdhbGtlcihFeGVjU3RhdGUgKmV4ZWMsIERPTTo6VHJlZVdhbGtlcklt
cGwgKnR3KTsKICAgICB+RE9NVHJlZVdhbGtlcigpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4
ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLGNvbnN0IElkZW50aWZpZXImIHAsIFZh
bHVlJiByZXN1bHQpIGNvbnN0OwogICAgIFZhbHVlIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CkluZGV4OiBXZWJD
b3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3cy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNgpkaWZmIC11IC1wIC1yMS42IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuY3BwCi0t
LSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmNwcAkxOSBKdWwgMjAwNSAxOTo1Mjo0OSAt
MDAwMAkxLjYKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfdmlld3MuY3BwCTI1IEp1bCAyMDA1
IDA2OjA0OjM4IC0wMDAwCkBAIC01NCwxMyArNTQsMTcgQEAgRE9NQWJzdHJhY3RWaWV3Ojp+RE9N
QWJzdHJhY3RWaWV3KCkKICAgU2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldERPTU9iamVjdChtX2lt
cGwuZ2V0KCkpOwogfQogCi1WYWx1ZSBET01BYnN0cmFjdFZpZXc6OmdldChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXIgJnApIGNvbnN0Citib29sIERPTUFic3RyYWN0Vmlldzo6Z2V0
T3duUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwLCBWYWx1ZSYg
cmVzdWx0KSBjb25zdAogewotICBpZiAocCA9PSAiZG9jdW1lbnQiKQotICAgIHJldHVybiBnZXRE
T01Ob2RlKGV4ZWMsIG1faW1wbC0+ZG9jdW1lbnQoKSk7Ci0gIGVsc2UgaWYgKHAgPT0gImdldENv
bXB1dGVkU3R5bGUiKQotICAgIHJldHVybiBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPERPTUFic3Ry
YWN0Vmlld0Z1bmM+KGV4ZWMscCx0aGlzLERPTUFic3RyYWN0Vmlldzo6R2V0Q29tcHV0ZWRTdHls
ZSwyLERvbnREZWxldGV8RnVuY3Rpb24pOwotICByZXR1cm4gRE9NT2JqZWN0OjpnZXQoZXhlYywg
cCk7CisgICAgaWYgKHAgPT0gImRvY3VtZW50IikgeworICAgICAgICByZXN1bHQgPSBnZXRET01O
b2RlKGV4ZWMsIG1faW1wbC0+ZG9jdW1lbnQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0gZWxzZSBpZiAocCA9PSAiZ2V0Q29tcHV0ZWRTdHlsZSIpIHsKKyAgICAgICAgcmVzdWx0ID0g
bG9va3VwT3JDcmVhdGVGdW5jdGlvbjxET01BYnN0cmFjdFZpZXdGdW5jPihleGVjLCBwLCB0aGlz
LCBET01BYnN0cmFjdFZpZXc6OkdldENvbXB1dGVkU3R5bGUsIDIsIERvbnREZWxldGV8RnVuY3Rp
b24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gRE9NT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwLCByZXN1bHQpOwogfQogCiBWYWx1ZSBET01BYnN0cmFj
dFZpZXdGdW5jOjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBM
aXN0ICZhcmdzKQpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3ZpZXdzLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IFdlYkNvcmUva2h0bWwvZWNt
YS9ranNfdmlld3MuaAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3cy5oCTE5IEp1bCAy
MDA1IDE5OjUyOjQ5IC0wMDAwCTEuNQorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc192aWV3cy5o
CTI1IEp1bCAyMDA1IDA2OjA0OjM4IC0wMDAwCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICBwdWJsaWM6CiAgICAgRE9NQWJzdHJhY3RWaWV3KEV4ZWNTdGF0ZSAqLCBET006OkFi
c3RyYWN0Vmlld0ltcGwgKmF2KSA6IG1faW1wbChhdikgeyB9CiAgICAgfkRPTUFic3RyYWN0Vmll
dygpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYyxjb25zdCBJZGVudGlm
aWVyICZwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0OwogICAgIC8v
IG5vIHB1dCAtIGFsbCByZWFkLW9ubHkKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIGluZm87CkluZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjcKZGlmZiAtdSAtcCAtcjEuMTY3IFdlYkNvcmUv
a2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5k
b3cuY3BwCTIxIEp1bCAyMDA1IDA0OjEwOjUyIC0wMDAwCTEuMTY3CisrKyBXZWJDb3JlL2todG1s
L2VjbWEva2pzX3dpbmRvdy5jcHAJMjUgSnVsIDIwMDUgMDY6MDQ6MzggLTAwMDAKQEAgLTEwNCw3
ICsxMDQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEhpc3RvcnkoRXhlY1N0
YXRlICpleGVjLCBLSFRNTFBhcnQgKnApCiAgICAgICA6IE9iamVjdEltcChleGVjLT5sZXhpY2Fs
SW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpKSwgcGFydChwKSB7IH0KLSAg
ICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0
KSBjb25zdDsKICAgICBWYWx1ZSBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
CkBAIC0xMTgsNyArMTE4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICBGcmFt
ZUFycmF5KEV4ZWNTdGF0ZSAqZXhlYywgS0hUTUxQYXJ0ICpwKQogICAgICAgOiBPYmplY3RJbXAo
ZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5PYmplY3RQcm90b3R5cGUoKSksIHBh
cnQocCkgeyB9Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
VmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNT
dGF0ZSAqZXhlYykgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgUUd1YXJkZWRQdHI8S0hUTUxQYXJ0
PiBwYXJ0OwpAQCAtMTY1LDEyICsxNjUsOSBAQCBjb25zdCBDbGFzc0luZm8gU2NyZWVuOjppbmZv
ID0geyAiU2NyZWVuCiBTY3JlZW46OlNjcmVlbihFeGVjU3RhdGUgKmV4ZWMpCiAgIDogT2JqZWN0
SW1wKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCkp
IHt9CiAKLVZhbHVlIFNjcmVlbjo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmll
ciAmcCkgY29uc3QKK2Jvb2wgU2NyZWVuOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0jaWZkZWYgS0pT
X1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiU2NyZWVuOjpnZXQgIiA8PCBwLnFzdHJpbmco
KSA8PCBlbmRsOwotI2VuZGlmCi0gIHJldHVybiBsb29rdXBHZXRWYWx1ZTxTY3JlZW4sT2JqZWN0
SW1wPihleGVjLHAsJlNjcmVlblRhYmxlLHRoaXMpOworICByZXR1cm4gbG9va3VwR2V0T3duVmFs
dWU8U2NyZWVuLCBPYmplY3RJbXA+KGV4ZWMsIHAsICZTY3JlZW5UYWJsZSwgdGhpcywgcmVzdWx0
KTsKIH0KIAogVmFsdWUgU2NyZWVuOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuKSBjb25zdApAQCAtMzQ3LDcgKzM0NCw2IEBAIFdpbmRvdzo6V2luZG93KEtIVE1M
UGFydCAqcCkKIAogV2luZG93Ojp+V2luZG93KCkKIHsKLSAga2REZWJ1Zyg2MDcwKSA8PCAiV2lu
ZG93Ojp+V2luZG93IHRoaXM9IiA8PCB0aGlzIDw8ICIgcGFydD0iIDw8IG1fcGFydCA8PCBlbmRs
OwogICBkZWxldGUgd2lucTsKIH0KIApAQCAtNjkyLDI0ICs2ODgsMjcgQEAgc3RhdGljIFZhbHVl
SW1wICpzaG93TW9kYWxEaWFsb2coRXhlY1N0YQogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0K
IAotVmFsdWUgV2luZG93OjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZw
KSBjb25zdAorYm9vbCBXaW5kb3c6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSNpZmRlZiBLSlNfVkVS
Qk9TRQotICBrZERlYnVnKDYwNzApIDw8ICJXaW5kb3coIjw8dGhpczw8Iik6OmdldCAiIDw8IHAu
cXN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgaWYgKCBwID09ICJjbG9zZWQiICkKLSAgICBy
ZXR1cm4gQm9vbGVhbihtX3BhcnQuaXNOdWxsKCkpOworICBpZiAocCA9PSAiY2xvc2VkIikgewor
ICAgICAgcmVzdWx0ID0gQm9vbGVhbihtX3BhcnQuaXNOdWxsKCkpOworICAgICAgcmV0dXJuIGZh
bHNlOworICB9CiAKICAgLy8gd2UgZG9uJ3Qgd2FudCBhbnkgcHJvcGVydGllcyBvdGhlciB0aGFu
ICJjbG9zZWQiIG9uIGEgY2xvc2VkIHdpbmRvdwotICBpZiAobV9wYXJ0LmlzTnVsbCgpKQotICAg
IHJldHVybiBVbmRlZmluZWQoKTsKKyAgaWYgKG1fcGFydC5pc051bGwoKSkgeworICAgICAgcmVz
dWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgfQogCiAgIC8vIExvb2sg
Zm9yIG92ZXJyaWRlcyBmaXJzdAogICBWYWx1ZUltcCAqIHZhbCA9IE9iamVjdEltcDo6Z2V0RGly
ZWN0KHApOwogICBpZiAodmFsKSB7Ci0gICAgLy9rZERlYnVnKDYwNzApIDw8ICJXaW5kb3c6Omdl
dCBmb3VuZCBkeW5hbWljIHByb3BlcnR5ICciIDw8IHAuYXNjaWkoKSA8PCAiJyIgPDwgZW5kbDsK
ICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgcmV0dXJuIFZhbHVlKHZhbCk7Cisg
ICAgICByZXN1bHQgPSBWYWx1ZSh2YWwpOworICAgIGVsc2UKKyAgICAgIHJlc3VsdCA9IFVuZGVm
aW5lZCgpOworICAgIHJldHVybiB0cnVlOwogICB9CiAKICAgLy8gQ2hlY2sgZm9yIGNoaWxkIGZy
YW1lcyBieSBuYW1lIGJlZm9yZSBidWlsdC1pbiBwcm9wZXJ0aWVzIHRvCkBAIC03MTgsMTk4ICs3
MTcsMjQ0IEBAIFZhbHVlIFdpbmRvdzo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QKICAgLy8g
YXJlIGluIE1veiBidXQgbm90IElFLiBTaW5jZSB3ZSBoYXZlIHNvbWUgb2YgdGhlc2UsIHdlIGhh
dmUgdG8gZG8KICAgLy8gaXQgdGhlIE1veiB3YXkuCiAgIEtIVE1MUGFydCAqY2hpbGRGcmFtZSA9
IG1fcGFydC0+Y2hpbGRGcmFtZU5hbWVkKHAudXN0cmluZygpLnFzdHJpbmcoKSk7Ci0gIGlmIChj
aGlsZEZyYW1lKSAKLSAgICByZXR1cm4gcmV0cmlldmUoY2hpbGRGcmFtZSk7CisgIGlmIChjaGls
ZEZyYW1lKSB7CisgICAgcmVzdWx0ID0gcmV0cmlldmUoY2hpbGRGcmFtZSk7CisgICAgcmV0dXJu
IHRydWU7CisgIH0KIAogICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50
cnkoJldpbmRvd1RhYmxlLCBwKTsKLSAgaWYgKGVudHJ5KQotICB7Ci0gICAgLy9rZERlYnVnKDYw
NzApIDw8ICJ0b2tlbjogIiA8PCBlbnRyeS0+dmFsdWUgPDwgZW5kbDsKLSAgICBzd2l0Y2goIGVu
dHJ5LT52YWx1ZSApIHsKKyAgaWYgKGVudHJ5KSB7CisgICAgc3dpdGNoKGVudHJ5LT52YWx1ZSkg
ewogICAgIGNhc2UgQ3J5cHRvOgotICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOyAvLyAjIyMKKyAg
ICAgIHJlc3VsdCA9IFVuZGVmaW5lZCgpOyAvLyAjIyMKKyAgICAgIHJldHVybiB0cnVlOwogICAg
IGNhc2UgRGVmYXVsdFN0YXR1czoKLSAgICAgIHJldHVybiBTdHJpbmcoVVN0cmluZyhtX3BhcnQt
PmpzRGVmYXVsdFN0YXR1c0JhclRleHQoKSkpOworICAgICAgcmVzdWx0ID0gU3RyaW5nKFVTdHJp
bmcobV9wYXJ0LT5qc0RlZmF1bHRTdGF0dXNCYXJUZXh0KCkpKTsKKyAgICAgIHJldHVybiB0cnVl
OwogICAgIGNhc2UgU3RhdHVzOgotICAgICAgcmV0dXJuIFN0cmluZyhVU3RyaW5nKG1fcGFydC0+
anNTdGF0dXNCYXJUZXh0KCkpKTsKKyAgICAgIHJlc3VsdCA9IFN0cmluZyhVU3RyaW5nKG1fcGFy
dC0+anNTdGF0dXNCYXJUZXh0KCkpKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgRG9j
dW1lbnQ6Ci0gICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgeworICAgICAgaWYg
KGlzU2FmZVNjcmlwdChleGVjKSkgewogICAgICAgICBpZiAoIW1fcGFydC0+eG1sRG9jSW1wbCgp
KSB7CiAjaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAgIEtXUShtX3BhcnQpLT5jcmVhdGVFbXB0
eURvY3VtZW50KCk7CiAjZW5kaWYKLSAgICAgICAgICBrZERlYnVnKDYwNzApIDw8ICJEb2N1bWVu
dC53cml0ZTogYWRkaW5nIDxIVE1MPjxCT0RZPiB0byBjcmVhdGUgZG9jdW1lbnQiIDw8IGVuZGw7
CiAgICAgICAgICAgbV9wYXJ0LT5iZWdpbigpOwogICAgICAgICAgIG1fcGFydC0+d3JpdGUoIjxI
VE1MPjxCT0RZPiIpOwogICAgICAgICAgIG1fcGFydC0+ZW5kKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbV9wYXJ0LT54bWxEb2NJbXBsKCkpOwotICAgICAg
fQotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIHJlc3Vs
dCA9IGdldERPTU5vZGUoZXhlYywgbV9wYXJ0LT54bWxEb2NJbXBsKCkpOworICAgICAgfSBlbHNl
CisgICAgICAgIHJlc3VsdCA9IFVuZGVmaW5lZCgpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Y2FzZSBOb2RlOgotICAgICAgcmV0dXJuIGdldE5vZGVDb25zdHJ1Y3RvcihleGVjKTsKKyAgICAg
IHJlc3VsdCA9IGdldE5vZGVDb25zdHJ1Y3RvcihleGVjKTsKKyAgICAgIHJldHVybiB0cnVlOwog
ICAgIGNhc2UgUmFuZ2U6Ci0gICAgICByZXR1cm4gZ2V0UmFuZ2VDb25zdHJ1Y3RvcihleGVjKTsK
KyAgICAgIHJlc3VsdCA9IGdldFJhbmdlQ29uc3RydWN0b3IoZXhlYyk7CisgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBjYXNlIE5vZGVGaWx0ZXI6Ci0gICAgICByZXR1cm4gZ2V0Tm9kZUZpbHRlckNv
bnN0cnVjdG9yKGV4ZWMpOworICAgICAgcmVzdWx0ID0gZ2V0Tm9kZUZpbHRlckNvbnN0cnVjdG9y
KGV4ZWMpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBET01FeGNlcHRpb246Ci0gICAg
ICByZXR1cm4gZ2V0RE9NRXhjZXB0aW9uQ29uc3RydWN0b3IoZXhlYyk7CisgICAgICByZXN1bHQg
PSBnZXRET01FeGNlcHRpb25Db25zdHJ1Y3RvcihleGVjKTsKKyAgICAgIHJldHVybiB0cnVlOwog
ICAgIGNhc2UgQ1NTUnVsZToKLSAgICAgIHJldHVybiBnZXRDU1NSdWxlQ29uc3RydWN0b3IoZXhl
Yyk7CisgICAgICByZXN1bHQgPSBnZXRDU1NSdWxlQ29uc3RydWN0b3IoZXhlYyk7CisgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIEV2ZW50Q3RvcjoKLSAgICAgIHJldHVybiBnZXRFdmVudENv
bnN0cnVjdG9yKGV4ZWMpOworICAgICAgcmVzdWx0ID0gZ2V0RXZlbnRDb25zdHJ1Y3RvcihleGVj
KTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgRnJhbWVzOgotICAgICAgcmV0dXJuIFZh
bHVlKGZyYW1lcyA/IGZyYW1lcyA6Ci0gICAgICAgICAgICAgICAgICAgKGNvbnN0X2Nhc3Q8V2lu
ZG93Kj4odGhpcyktPmZyYW1lcyA9IG5ldyBGcmFtZUFycmF5KGV4ZWMsbV9wYXJ0KSkpOworICAg
ICAgcmVzdWx0ID0gVmFsdWUoZnJhbWVzID8gZnJhbWVzIDoKKyAgICAgICAgICAgICAgICAgICAg
IChjb25zdF9jYXN0PFdpbmRvdyo+KHRoaXMpLT5mcmFtZXMgPSBuZXcgRnJhbWVBcnJheShleGVj
LG1fcGFydCkpKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgX0hpc3Rvcnk6Ci0gICAg
ICByZXR1cm4gVmFsdWUoaGlzdG9yeSA/IGhpc3RvcnkgOgotICAgICAgICAgICAgICAgICAgIChj
b25zdF9jYXN0PFdpbmRvdyo+KHRoaXMpLT5oaXN0b3J5ID0gbmV3IEhpc3RvcnkoZXhlYyxtX3Bh
cnQpKSk7Ci0KKyAgICAgIHJlc3VsdCA9IFZhbHVlKGhpc3RvcnkgPyBoaXN0b3J5IDoKKyAgICAg
ICAgICAgICAgICAgICAgIChjb25zdF9jYXN0PFdpbmRvdyo+KHRoaXMpLT5oaXN0b3J5ID0gbmV3
IEhpc3RvcnkoZXhlYyxtX3BhcnQpKSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIEV2
ZW50OgogICAgICAgaWYgKG1fZXZ0KQotICAgICAgICByZXR1cm4gZ2V0RE9NRXZlbnQoZXhlYywg
bV9ldnQpOwotICAgICAgZWxzZSB7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAgICAgICAga2RXYXJu
aW5nKDYwNzApIDw8ICJ3aW5kb3coIiA8PCB0aGlzIDw8ICIsIiA8PCBtX3BhcnQtPm5hbWUoKSA8
PCAiKS5ldmVudCwgbm8gZXZlbnQhIiA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gZ2V0RE9NRXZlbnQoZXhlYywg
bV9ldnQpOworICAgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBVbmRlZmluZWQoKTsKKyAgICAg
IHJldHVybiB0cnVlOwogICAgIGNhc2UgSW5uZXJIZWlnaHQ6Ci0gICAgICBpZiAoIW1fcGFydC0+
dmlldygpKQotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICByZXR1cm4gTnVtYmVy
KG1fcGFydC0+dmlldygpLT52aXNpYmxlSGVpZ2h0KCkpOworICAgICAgaWYgKG1fcGFydC0+dmll
dygpKQorICAgICAgICByZXN1bHQgPSBOdW1iZXIobV9wYXJ0LT52aWV3KCktPnZpc2libGVIZWln
aHQoKSk7CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IFVuZGVmaW5lZCgpOworICAgICAg
cmV0dXJuIHRydWU7CiAgICAgY2FzZSBJbm5lcldpZHRoOgotICAgICAgaWYgKCFtX3BhcnQtPnZp
ZXcoKSkKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgcmV0dXJuIE51bWJlciht
X3BhcnQtPnZpZXcoKS0+dmlzaWJsZVdpZHRoKCkpOworICAgICAgaWYgKG1fcGFydC0+dmlldygp
KQorICAgICAgICByZXN1bHQgPSBOdW1iZXIobV9wYXJ0LT52aWV3KCktPnZpc2libGVXaWR0aCgp
KTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBjYXNlIExlbmd0aDoKLSAgICAgIHJldHVybiBOdW1iZXIobV9wYXJ0LT5m
cmFtZXMoKS5jb3VudCgpKTsKKyAgICAgIHJlc3VsdCA9IE51bWJlcihtX3BhcnQtPmZyYW1lcygp
LmNvdW50KCkpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBfTG9jYXRpb246Ci0gICAg
ICByZXR1cm4gVmFsdWUobG9jYXRpb24oKSk7CisgICAgICByZXN1bHQgPSBWYWx1ZShsb2NhdGlv
bigpKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgTmFtZToKLSAgICAgIHJldHVybiBT
dHJpbmcobV9wYXJ0LT5uYW1lKCkpOworICAgICAgcmVzdWx0ID0gU3RyaW5nKG1fcGFydC0+bmFt
ZSgpKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgX05hdmlnYXRvcjoKICAgICBjYXNl
IENsaWVudEluZm9ybWF0aW9uOiB7CiAgICAgICAvLyBTdG9yZSB0aGUgbmF2aWdhdG9yIGluIHRo
ZSBvYmplY3Qgc28gd2UgZ2V0IHRoZSBzYW1lIG9uZSBlYWNoIHRpbWUuCiAgICAgICBOYXZpZ2F0
b3IgKm4gPSBuZXcgTmF2aWdhdG9yKGV4ZWMsIG1fcGFydCk7CiAgICAgICBjb25zdF9jYXN0PFdp
bmRvdyAqPih0aGlzKS0+cHV0RGlyZWN0KCJuYXZpZ2F0b3IiLCBuLCBEb250RGVsZXRlfFJlYWRP
bmx5KTsKICAgICAgIGNvbnN0X2Nhc3Q8V2luZG93ICo+KHRoaXMpLT5wdXREaXJlY3QoImNsaWVu
dEluZm9ybWF0aW9uIiwgbiwgRG9udERlbGV0ZXxSZWFkT25seSk7Ci0gICAgICByZXR1cm4gVmFs
dWUobik7CisgICAgICByZXN1bHQgPSBWYWx1ZShuKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICNpZmRlZiBRX1dTX1FXUwogICAgIGNhc2UgX0tvbnF1ZXJvcjoKLSAgICAgIHJldHVybiBW
YWx1ZShuZXcgS29ucXVlcm9yKG1fcGFydCkpOworICAgICAgcmVzdWx0ID0gVmFsdWUobmV3IEtv
bnF1ZXJvcihtX3BhcnQpKTsKKyAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgY2FzZSBM
b2NhdGlvbmJhcjoKLSAgICAgIHJldHVybiBWYWx1ZShsb2NhdGlvbmJhcihleGVjKSk7CisgICAg
ICByZXN1bHQgPSBWYWx1ZShsb2NhdGlvbmJhcihleGVjKSk7CisgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBjYXNlIE1lbnViYXI6Ci0gICAgICByZXR1cm4gVmFsdWUobWVudWJhcihleGVjKSk7Cisg
ICAgICByZXN1bHQgPSBWYWx1ZShtZW51YmFyKGV4ZWMpKTsKKyAgICAgIHJldHVybiB0cnVlOwog
ICAgIGNhc2UgT2Zmc2NyZWVuQnVmZmVyaW5nOgotICAgICAgcmV0dXJuIEJvb2xlYW4odHJ1ZSk7
CisgICAgICByZXN1bHQgPSBCb29sZWFuKHRydWUpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Y2FzZSBPcGVuZXI6Ci0gICAgICBpZiAoIW1fcGFydC0+b3BlbmVyKCkpCi0gICAgICAgIHJldHVy
biBOdWxsKCk7ICAgIC8vICMjIyBhIG51bGwgV2luZG93IG1pZ2h0IGJlIGJldHRlciwgYnV0ID09
IG51bGwKLSAgICAgIGVsc2UgICAgICAgICAgICAgICAgLy8gZG9lc24ndCB3b3JrIHlldAotICAg
ICAgICByZXR1cm4gcmV0cmlldmUobV9wYXJ0LT5vcGVuZXIoKSk7CisgICAgICBpZiAobV9wYXJ0
LT5vcGVuZXIoKSkKKyAgICAgICAgcmVzdWx0ID0gcmV0cmlldmUobV9wYXJ0LT5vcGVuZXIoKSk7
CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IE51bGwoKTsKKyAgICAgIHJldHVybiB0cnVl
OwogICAgIGNhc2UgT3V0ZXJIZWlnaHQ6CiAgICAgY2FzZSBPdXRlcldpZHRoOgogICAgIHsKLSAg
ICAgIGlmICghbV9wYXJ0LT52aWV3KCkpCi0gICAgICAgIHJldHVybiBOdW1iZXIoMCk7Ci0gICAg
ICBLV2luOjpJbmZvIGluZiA9IEtXaW46OmluZm8obV9wYXJ0LT52aWV3KCktPnRvcExldmVsV2lk
Z2V0KCktPndpbklkKCkpOwotICAgICAgcmV0dXJuIE51bWJlcihlbnRyeS0+dmFsdWUgPT0gT3V0
ZXJIZWlnaHQgPwotICAgICAgICAgICAgICAgICAgICBpbmYuZ2VvbWV0cnkuaGVpZ2h0KCkgOiBp
bmYuZ2VvbWV0cnkud2lkdGgoKSk7CisgICAgICBpZiAobV9wYXJ0LT52aWV3KCkpIHsKKyAgICAg
ICAgS1dpbjo6SW5mbyBpbmYgPSBLV2luOjppbmZvKG1fcGFydC0+dmlldygpLT50b3BMZXZlbFdp
ZGdldCgpLT53aW5JZCgpKTsKKyAgICAgICAgcmVzdWx0ID0gTnVtYmVyKGVudHJ5LT52YWx1ZSA9
PSBPdXRlckhlaWdodCA/CisgICAgICAgICAgICAgICAgICAgICAgICBpbmYuZ2VvbWV0cnkuaGVp
Z2h0KCkgOiBpbmYuZ2VvbWV0cnkud2lkdGgoKSk7CisgICAgICB9IGVsc2UKKyAgICAgICAgcmVz
dWx0ID0gTnVtYmVyKDApOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgUGFn
ZVhPZmZzZXQ6Ci0gICAgICBpZiAoIW1fcGFydC0+dmlldygpKQotICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Ci0gICAgICB1cGRhdGVMYXlvdXQoKTsKLSAgICAgIHJldHVybiBOdW1iZXIobV9w
YXJ0LT52aWV3KCktPmNvbnRlbnRzWCgpKTsKKyAgICAgIGlmIChtX3BhcnQtPnZpZXcoKSkgewor
ICAgICAgICB1cGRhdGVMYXlvdXQoKTsKKyAgICAgICAgcmVzdWx0ID0gTnVtYmVyKG1fcGFydC0+
dmlldygpLT5jb250ZW50c1goKSk7CisgICAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gVW5k
ZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFBhZ2VZT2Zmc2V0OgotICAg
ICAgaWYgKCFtX3BhcnQtPnZpZXcoKSkKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAg
ICAgdXBkYXRlTGF5b3V0KCk7Ci0gICAgICByZXR1cm4gTnVtYmVyKG1fcGFydC0+dmlldygpLT5j
b250ZW50c1koKSk7CisgICAgICBpZiAobV9wYXJ0LT52aWV3KCkpIHsKKyAgICAgICAgdXBkYXRl
TGF5b3V0KCk7CisgICAgICAgIHJlc3VsdCA9IE51bWJlcihtX3BhcnQtPnZpZXcoKS0+Y29udGVu
dHNZKCkpOworICAgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdCA9IFVuZGVmaW5lZCgpOworICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBQYXJlbnQ6Ci0gICAgICByZXR1cm4gVmFsdWUocmV0
cmlldmUobV9wYXJ0LT5wYXJlbnRQYXJ0KCkgPyBtX3BhcnQtPnBhcmVudFBhcnQoKSA6IChLSFRN
TFBhcnQqKW1fcGFydCkpOworICAgICAgcmVzdWx0ID0gVmFsdWUocmV0cmlldmUobV9wYXJ0LT5w
YXJlbnRQYXJ0KCkgPyBtX3BhcnQtPnBhcmVudFBhcnQoKSA6IChLSFRNTFBhcnQqKW1fcGFydCkp
OworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBQZXJzb25hbGJhcjoKLSAgICAgIHJldHVy
biBWYWx1ZShwZXJzb25hbGJhcihleGVjKSk7CisgICAgICByZXN1bHQgPSBWYWx1ZShwZXJzb25h
bGJhcihleGVjKSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFNjcmVlbkxlZnQ6CiAg
ICAgY2FzZSBTY3JlZW5YOiB7Ci0gICAgICBpZiAoIW1fcGFydC0+dmlldygpKQotICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICBpZiAobV9wYXJ0LT52aWV3KCkpIHsKICNpZiBBUFBM
RV9DSEFOR0VTCi0gICAgICAvLyBXZSB3YW50IHRvIHVzZSBmcmFtZUdlb21ldHJ5IGhlcmUgaW5z
dGVhZCBvZiBtYXBUb0dsb2JhbCBiZWNhdXNlIGl0IGdvZXMgdGhyb3VnaAotICAgICAgLy8gdGhl
IHdpbmRvd0ZyYW1lIG1ldGhvZCBvZiB0aGUgV2ViS2l0J3MgVUkgZGVsZWdhdGUuIEFsc28gd2Ug
ZG9uJ3Qgd2FudCB0byB0cnkKLSAgICAgIC8vIHRvIGRvIGFueXRoaW5nIHJlbGF0aXZlIHRvIHRo
ZSBzY3JlZW4gdGhlIHdpbmRvdyBpcyBvbiwgc28gdGhlIGNvZGUgYmVsb3cgaXMgbm8KLSAgICAg
IC8vIGdvb2Qgb2YgdXMgYW55d2F5LgotICAgICAgcmV0dXJuIE51bWJlcihtX3BhcnQtPnZpZXco
KS0+dG9wTGV2ZWxXaWRnZXQoKS0+ZnJhbWVHZW9tZXRyeSgpLngoKSk7CisgICAgICAgIC8vIFdl
IHdhbnQgdG8gdXNlIGZyYW1lR2VvbWV0cnkgaGVyZSBpbnN0ZWFkIG9mIG1hcFRvR2xvYmFsIGJl
Y2F1c2UgaXQgZ29lcyB0aHJvdWdoCisgICAgICAgIC8vIHRoZSB3aW5kb3dGcmFtZSBtZXRob2Qg
b2YgdGhlIFdlYktpdCdzIFVJIGRlbGVnYXRlLiBBbHNvIHdlIGRvbid0IHdhbnQgdG8gdHJ5Cisg
ICAgICAgIC8vIHRvIGRvIGFueXRoaW5nIHJlbGF0aXZlIHRvIHRoZSBzY3JlZW4gdGhlIHdpbmRv
dyBpcyBvbiwgc28gdGhlIGNvZGUgYmVsb3cgaXMgbm8KKyAgICAgICAgLy8gZ29vZCBvZiB1cyBh
bnl3YXkuCisgICAgICAgIHJlc3VsdCA9IE51bWJlcihtX3BhcnQtPnZpZXcoKS0+dG9wTGV2ZWxX
aWRnZXQoKS0+ZnJhbWVHZW9tZXRyeSgpLngoKSk7CiAjZWxzZQotICAgICAgUVJlY3Qgc2cgPSBR
QXBwbGljYXRpb246OmRlc2t0b3AoKS0+c2NyZWVuR2VvbWV0cnkoUUFwcGxpY2F0aW9uOjpkZXNr
dG9wKCktPnNjcmVlbk51bWJlcihtX3BhcnQtPnZpZXcoKSkpOwotICAgICAgcmV0dXJuIE51bWJl
cihtX3BhcnQtPnZpZXcoKS0+bWFwVG9HbG9iYWwoUVBvaW50KDAsMCkpLngoKSArIHNnLngoKSk7
CisgICAgICAgIFFSZWN0IHNnID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbkdlb21l
dHJ5KFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5zY3JlZW5OdW1iZXIobV9wYXJ0LT52aWV3KCkp
KTsKKyAgICAgICAgcmVzdWx0ID0gTnVtYmVyKG1fcGFydC0+dmlldygpLT5tYXBUb0dsb2JhbChR
UG9pbnQoMCwwKSkueCgpICsgc2cueCgpKTsKICNlbmRpZgorICAgICAgfSBlbHNlCisgICAgICAg
IHJlc3VsdCA9IFVuZGVmaW5lZCgpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNh
c2UgU2NyZWVuVG9wOgogICAgIGNhc2UgU2NyZWVuWTogewotICAgICAgaWYgKCFtX3BhcnQtPnZp
ZXcoKSkKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgaWYgKG1fcGFydC0+dmll
dygpKSB7CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgICAgLy8gU2VlIGNvbW1lbnQgYWJvdmUgaW4g
U2NyZWVuWC4KLSAgICAgIHJldHVybiBOdW1iZXIobV9wYXJ0LT52aWV3KCktPnRvcExldmVsV2lk
Z2V0KCktPmZyYW1lR2VvbWV0cnkoKS55KCkpOworICAgICAgICAvLyBTZWUgY29tbWVudCBhYm92
ZSBpbiBTY3JlZW5YLgorICAgICAgICByZXN1bHQgPSBOdW1iZXIobV9wYXJ0LT52aWV3KCktPnRv
cExldmVsV2lkZ2V0KCktPmZyYW1lR2VvbWV0cnkoKS55KCkpOwogI2Vsc2UKLSAgICAgIFFSZWN0
IHNnID0gUUFwcGxpY2F0aW9uOjpkZXNrdG9wKCktPnNjcmVlbkdlb21ldHJ5KFFBcHBsaWNhdGlv
bjo6ZGVza3RvcCgpLT5zY3JlZW5OdW1iZXIobV9wYXJ0LT52aWV3KCkpKTsKLSAgICAgIHJldHVy
biBOdW1iZXIobV9wYXJ0LT52aWV3KCktPm1hcFRvR2xvYmFsKFFQb2ludCgwLDApKS55KCkgKyBz
Zy55KCkpOworICAgICAgICBRUmVjdCBzZyA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5zY3Jl
ZW5HZW9tZXRyeShRQXBwbGljYXRpb246OmRlc2t0b3AoKS0+c2NyZWVuTnVtYmVyKG1fcGFydC0+
dmlldygpKSk7CisgICAgICAgIHJlc3VsdCA9IE51bWJlcihtX3BhcnQtPnZpZXcoKS0+bWFwVG9H
bG9iYWwoUVBvaW50KDAsMCkpLnkoKSArIHNnLnkoKSk7CiAjZW5kaWYKKyAgICAgIH0gZWxzZSAK
KyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
Ci0gICAgY2FzZSBTY3JvbGxYOiB7Ci0gICAgICBpZiAoIW1fcGFydC0+dmlldygpKQotICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB1cGRhdGVMYXlvdXQoKTsKLSAgICAgIHJldHVy
biBOdW1iZXIobV9wYXJ0LT52aWV3KCktPmNvbnRlbnRzWCgpKTsKLSAgICB9Ci0gICAgY2FzZSBT
Y3JvbGxZOiB7Ci0gICAgICBpZiAoIW1fcGFydC0+dmlldygpKQotICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Ci0gICAgICB1cGRhdGVMYXlvdXQoKTsKLSAgICAgIHJldHVybiBOdW1iZXIobV9w
YXJ0LT52aWV3KCktPmNvbnRlbnRzWSgpKTsKLSAgICB9CisgICAgY2FzZSBTY3JvbGxYOgorICAg
ICAgaWYgKG1fcGFydC0+dmlldygpKSB7CisgICAgICAgIHVwZGF0ZUxheW91dCgpOworICAgICAg
ICByZXN1bHQgPSBOdW1iZXIobV9wYXJ0LT52aWV3KCktPmNvbnRlbnRzWCgpKTsKKyAgICAgIH0g
ZWxzZQorICAgICAgICByZXN1bHQgPSBVbmRlZmluZWQoKTsKKyAgICAgIHJldHVybiB0cnVlOwor
ICAgIGNhc2UgU2Nyb2xsWToKKyAgICAgIGlmIChtX3BhcnQtPnZpZXcoKSkgeworICAgICAgICB1
cGRhdGVMYXlvdXQoKTsKKyAgICAgICAgcmVzdWx0ID0gTnVtYmVyKG1fcGFydC0+dmlldygpLT5j
b250ZW50c1koKSk7CisgICAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7
CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFNjcm9sbGJhcnM6Ci0gICAgICByZXR1cm4g
VmFsdWUoc2Nyb2xsYmFycyhleGVjKSk7CisgICAgICByZXN1bHQgPSBWYWx1ZShzY3JvbGxiYXJz
KGV4ZWMpKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgU3RhdHVzYmFyOgotICAgICAg
cmV0dXJuIFZhbHVlKHN0YXR1c2JhcihleGVjKSk7CisgICAgICByZXN1bHQgPSBWYWx1ZShzdGF0
dXNiYXIoZXhlYykpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBUb29sYmFyOgotICAg
ICAgcmV0dXJuIFZhbHVlKHRvb2xiYXIoZXhlYykpOworICAgICAgcmVzdWx0ID0gVmFsdWUodG9v
bGJhcihleGVjKSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFNlbGY6CiAgICAgY2Fz
ZSBfV2luZG93OgotICAgICAgcmV0dXJuIFZhbHVlKHJldHJpZXZlKG1fcGFydCkpOworICAgICAg
cmVzdWx0ID0gVmFsdWUocmV0cmlldmUobV9wYXJ0KSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBjYXNlIFRvcDogewogICAgICAgS0hUTUxQYXJ0ICpwID0gbV9wYXJ0OwogICAgICAgd2hpbGUg
KHAtPnBhcmVudFBhcnQoKSkKICAgICAgICAgcCA9IHAtPnBhcmVudFBhcnQoKTsKLSAgICAgIHJl
dHVybiBWYWx1ZShyZXRyaWV2ZShwKSk7CisgICAgICByZXN1bHQgPSBWYWx1ZShyZXRyaWV2ZShw
KSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBfU2NyZWVuOgotICAgICAg
cmV0dXJuIFZhbHVlKHNjcmVlbiA/IHNjcmVlbiA6Ci0gICAgICAgICAgICAgICAgICAgKGNvbnN0
X2Nhc3Q8V2luZG93Kj4odGhpcyktPnNjcmVlbiA9IG5ldyBTY3JlZW4oZXhlYykpKTsKKyAgICAg
IHJlc3VsdCA9IFZhbHVlKHNjcmVlbiA/IHNjcmVlbiA6CisgICAgICAgICAgICAgICAgICAgICAo
Y29uc3RfY2FzdDxXaW5kb3cqPih0aGlzKS0+c2NyZWVuID0gbmV3IFNjcmVlbihleGVjKSkpOwor
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBJbWFnZToKLSAgICAgIHJldHVybiBuZXcgSW1h
Z2VDb25zdHJ1Y3RvckltcChleGVjLCBtX3BhcnQtPnhtbERvY0ltcGwoKSk7CisgICAgICAvLyBG
SVhNRTogdGhpcyBwcm9wZXJ0eSAoYW5kIHRoZSBmZXcgYmVsb3cpIHByb2JhYmx5IHNob3VsZG4n
dCBjcmVhdGUgYSBuZXcgb2JqZWN0IGV2ZXJ5CisgICAgICAvLyB0aW1lCisgICAgICByZXN1bHQg
PSBuZXcgSW1hZ2VDb25zdHJ1Y3RvckltcChleGVjLCBtX3BhcnQtPnhtbERvY0ltcGwoKSk7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIE9wdGlvbjoKLSAgICAgIHJldHVybiBuZXcgT3B0
aW9uQ29uc3RydWN0b3JJbXAoZXhlYywgbV9wYXJ0LT54bWxEb2NJbXBsKCkpOworICAgICAgcmVz
dWx0ID0gbmV3IE9wdGlvbkNvbnN0cnVjdG9ySW1wKGV4ZWMsIG1fcGFydC0+eG1sRG9jSW1wbCgp
KTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6Ci0gICAgICBy
ZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJbXAoZXhlYywgbV9wYXJ0LT54bWxE
b2NJbXBsKCkpOworICAgICAgcmVzdWx0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3JJ
bXAoZXhlYywgbV9wYXJ0LT54bWxEb2NJbXBsKCkpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Y2FzZSBYTUxTZXJpYWxpemVyOgotICAgICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyQ29uc3Ry
dWN0b3JJbXAoZXhlYyk7CisgICAgICByZXN1bHQgPSBuZXcgWE1MU2VyaWFsaXplckNvbnN0cnVj
dG9ySW1wKGV4ZWMpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBET01QYXJzZXI6Ci0g
ICAgICByZXR1cm4gbmV3IERPTVBhcnNlckNvbnN0cnVjdG9ySW1wKGV4ZWMsIG1fcGFydC0+eG1s
RG9jSW1wbCgpKTsKKyAgICAgIHJlc3VsdCA9IG5ldyBET01QYXJzZXJDb25zdHJ1Y3RvckltcChl
eGVjLCBtX3BhcnQtPnhtbERvY0ltcGwoKSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNl
IEZvY3VzOgogICAgIGNhc2UgQmx1cjoKICAgICBjYXNlIENsb3NlOgotCXJldHVybiBsb29rdXBP
ckNyZWF0ZUZ1bmN0aW9uPFdpbmRvd0Z1bmM+KGV4ZWMscCx0aGlzLGVudHJ5LT52YWx1ZSxlbnRy
eS0+cGFyYW1zLGVudHJ5LT5hdHRyKTsKKyAgICAgIHJlc3VsdCA9IGxvb2t1cE9yQ3JlYXRlRnVu
Y3Rpb248V2luZG93RnVuYz4oZXhlYyxwLHRoaXMsZW50cnktPnZhbHVlLGVudHJ5LT5wYXJhbXMs
ZW50cnktPmF0dHIpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBTaG93TW9kYWxEaWFs
b2c6CiAgICAgICAgIGlmICghY2FuU2hvd01vZGFsRGlhbG9nKHRoaXMpKQotICAgICAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgLy8g
ZmFsbCB0aHJvdWdoCiAgICAgY2FzZSBBbGVydDoKICAgICBjYXNlIENvbmZpcm06CkBAIC05MzUs
MTUzICs5ODAsMTg1IEBAIFZhbHVlIFdpbmRvdzo6Z2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QK
ICAgICBjYXNlIENsZWFySW50ZXJ2YWw6CiAgICAgY2FzZSBHZXRTZWxlY3Rpb246CiAgICAgICBp
ZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVGdW5j
dGlvbjxXaW5kb3dGdW5jPihleGVjLHAsdGhpcyxlbnRyeS0+dmFsdWUsZW50cnktPnBhcmFtcyxl
bnRyeS0+YXR0cik7CisgICAgICAgIHJlc3VsdCA9IGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248V2lu
ZG93RnVuYz4oZXhlYywgcCwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1zLCBlbnRy
eS0+YXR0cik7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAg
ICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIE9u
YWJvcnQ6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICByZXR1cm4gZ2V0
TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6QUJPUlRfRVZFTlQpOworICAgICAgICByZXN1
bHQgPSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpBQk9SVF9FVkVOVCk7CiAgICAg
ICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgcmVzdWx0ID0gVW5k
ZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIE9uYmx1cjoKICAgICAgIGlm
IChpc1NhZmVTY3JpcHQoZXhlYykpCi0gICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLERP
TTo6RXZlbnRJbXBsOjpCTFVSX0VWRU5UKTsKKyAgICAgICAgcmVzdWx0ID0gZ2V0TGlzdGVuZXIo
ZXhlYyxET006OkV2ZW50SW1wbDo6QkxVUl9FVkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIE9uY2hhbmdlOgogICAgICAgaWYgKGlzU2FmZVNjcmlwdChl
eGVjKSkKLSAgICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OkNI
QU5HRV9FVkVOVCk7CisgICAgICAgIHJlc3VsdCA9IGdldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVu
dEltcGw6OkNIQU5HRV9FVkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBjYXNlIE9uY2xpY2s6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAg
ICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6S0hUTUxfQ0xJQ0tfRVZF
TlQpOworICAgICAgICByZXN1bHQgPSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpL
SFRNTF9DTElDS19FVkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBjYXNlIE9uZGJsY2xpY2s6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAg
ICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6S0hUTUxfREJMQ0xJQ0tf
RVZFTlQpOworICAgICAgICByZXN1bHQgPSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBs
OjpLSFRNTF9EQkxDTElDS19FVkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBjYXNlIE9uZHJhZ2Ryb3A6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQot
ICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6S0hUTUxfRFJB
R0RST1BfRVZFTlQpOworICAgICAgICByZXN1bHQgPSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZl
bnRJbXBsOjpLSFRNTF9EUkFHRFJPUF9FVkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBjYXNlIE9uZXJyb3I6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMp
KQotICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6S0hUTUxf
RVJST1JfRVZFTlQpOworICAgICAgICByZXN1bHQgPSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZl
bnRJbXBsOjpLSFRNTF9FUlJPUl9FVkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4g
dHJ1ZTsKICAgICBjYXNlIE9uZm9jdXM6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQot
ICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6Rk9DVVNfRVZF
TlQpOworICAgICAgICByZXN1bHQgPSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpG
T0NVU19FVkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAg
ICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNl
IE9ua2V5ZG93bjoKICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykpCi0gICAgICAgIHJldHVy
biBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpLRVlET1dOX0VWRU5UKTsKKyAgICAg
ICAgcmVzdWx0ID0gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6S0VZRE9XTl9FVkVO
VCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgcmVz
dWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIE9ua2V5cHJl
c3M6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICByZXR1cm4gZ2V0TGlz
dGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6S0VZUFJFU1NfRVZFTlQpOworICAgICAgICByZXN1
bHQgPSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpLRVlQUkVTU19FVkVOVCk7CiAg
ICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgcmVzdWx0ID0g
VW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIE9ua2V5dXA6CiAgICAg
ICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhl
YyxET006OkV2ZW50SW1wbDo6S0VZVVBfRVZFTlQpOworICAgICAgICByZXN1bHQgPSBnZXRMaXN0
ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpLRVlVUF9FVkVOVCk7CiAgICAgICBlbHNlCi0gICAg
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIE9ubG9hZDoKICAgICAgIGlmIChpc1NhZmVTY3Jp
cHQoZXhlYykpCi0gICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBs
OjpMT0FEX0VWRU5UKTsKKyAgICAgICAgcmVzdWx0ID0gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2
ZW50SW1wbDo6TE9BRF9FVkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBjYXNlIE9ubW91c2Vkb3duOgogICAgICAgaWYgKGlzU2FmZVNjcmlwdChleGVjKSkKLSAg
ICAgICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6Ok1PVVNFRE9XTl9F
VkVOVCk7CisgICAgICAgIHJlc3VsdCA9IGdldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6
Ok1PVVNFRE9XTl9FVkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBjYXNlIE9ubW91c2Vtb3ZlOgogICAgICAgaWYgKGlzU2FmZVNjcmlwdChleGVjKSkKLSAgICAg
ICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6Ok1PVVNFTU9WRV9FVkVO
VCk7CisgICAgICAgIHJlc3VsdCA9IGdldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6Ok1P
VVNFTU9WRV9FVkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBj
YXNlIE9ubW91c2VvdXQ6CiAgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQotICAgICAgICBy
ZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6TU9VU0VPVVRfRVZFTlQpOwor
ICAgICAgICByZXN1bHQgPSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpNT1VTRU9V
VF9FVkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAg
ICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIE9u
bW91c2VvdmVyOgogICAgICAgaWYgKGlzU2FmZVNjcmlwdChleGVjKSkKLSAgICAgICAgcmV0dXJu
IGdldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6Ok1PVVNFT1ZFUl9FVkVOVCk7CisgICAg
ICAgIHJlc3VsdCA9IGdldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6Ok1PVVNFT1ZFUl9F
VkVOVCk7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
cmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIE9ubW91
c2V1cDoKICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykpCi0gICAgICAgIHJldHVybiBnZXRM
aXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpNT1VTRVVQX0VWRU5UKTsKKyAgICAgICAgcmVz
dWx0ID0gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6TU9VU0VVUF9FVkVOVCk7CiAg
ICAgICBlbHNlCi0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgcmVzdWx0ID0g
VW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIE9uV2luZG93TW91c2VX
aGVlbDoKICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykpCi0gICAgICAgIHJldHVybiBnZXRM
aXN0ZW5lcihleGVjLCBET006OkV2ZW50SW1wbDo6TU9VU0VXSEVFTF9FVkVOVCk7CisgICAgICAg
IHJlc3VsdCA9IGdldExpc3RlbmVyKGV4ZWMsIERPTTo6RXZlbnRJbXBsOjpNT1VTRVdIRUVMX0VW
RU5UKTsKICAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICBy
ZXN1bHQgPSBVbmRlZmluZWQoKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgT25tb3Zl
OgogICAgICAgaWYgKGlzU2FmZVNjcmlwdChleGVjKSkKLSAgICAgICAgcmV0dXJuIGdldExpc3Rl
bmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OktIVE1MX01PVkVfRVZFTlQpOworICAgICAgICByZXN1
bHQgPSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpLSFRNTF9NT1ZFX0VWRU5UKTsK
ICAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICByZXN1bHQg
PSBVbmRlZmluZWQoKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgT25yZXNldDoKICAg
ICAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykpCi0gICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihl
eGVjLERPTTo6RXZlbnRJbXBsOjpSRVNFVF9FVkVOVCk7CisgICAgICAgIHJlc3VsdCA9IGdldExp
c3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OlJFU0VUX0VWRU5UKTsKICAgICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICByZXN1bHQgPSBVbmRlZmluZWQoKTsK
KyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgT25yZXNpemU6CiAgICAgICBpZiAoaXNTYWZl
U2NyaXB0KGV4ZWMpKQotICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50
SW1wbDo6UkVTSVpFX0VWRU5UKTsKKyAgICAgICAgcmVzdWx0ID0gZ2V0TGlzdGVuZXIoZXhlYyxE
T006OkV2ZW50SW1wbDo6UkVTSVpFX0VWRU5UKTsKICAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworICAgICAgICByZXN1bHQgPSBVbmRlZmluZWQoKTsKKyAgICAgIHJldHVy
biB0cnVlOwogICAgIGNhc2UgT25zY3JvbGw6Ci0gICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhl
YykpCi0gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6
U0NST0xMX0VWRU5UKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworICAgICAgaWYgKGlzU2FmZVNjcmlwdChleGVjKSkKKyAgICAgICAgcmVzdWx0ID0gZ2V0
TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6U0NST0xMX0VWRU5UKTsKKyAgICAgIGVsc2UK
KyAgICAgICAgcmVzdWx0ID0gVW5kZWZpbmVkKCk7CisgICAgICByZXR1cm4gdHJ1ZTsKICNpZiBB
UFBMRV9DSEFOR0VTCiAgICAgY2FzZSBPbnNlYXJjaDoKLSAgICAgICAgaWYgKGlzU2FmZVNjcmlw
dChleGVjKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJ
bXBsOjpTRUFSQ0hfRVZFTlQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CisgICAgICBpZiAoaXNTYWZlU2NyaXB0KGV4ZWMpKQorICAgICAgICByZXN1bHQg
PSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpTRUFSQ0hfRVZFTlQpOworICAgICAg
ZWxzZQorICAgICAgICByZXN1bHQgPSBVbmRlZmluZWQoKTsKKyAgICAgIHJldHVybiB0cnVlOwog
I2VuZGlmCiAgICAgY2FzZSBPbnNlbGVjdDoKICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykp
Ci0gICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpTRUxFQ1Rf
RVZFTlQpOworICAgICAgICByZXN1bHQgPSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBs
OjpTRUxFQ1RfRVZFTlQpOwogICAgICAgZWxzZQotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgICAgIHJlc3VsdCA9IFVuZGVmaW5lZCgpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Y2FzZSBPbnN1Ym1pdDoKICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykpCi0gICAgICAgIHJl
dHVybiBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpTVUJNSVRfRVZFTlQpOworICAg
ICAgICByZXN1bHQgPSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpTVUJNSVRfRVZF
TlQpOwogICAgICAgZWxzZQotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIHJl
c3VsdCA9IFVuZGVmaW5lZCgpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBPbnVubG9h
ZDoKICAgICAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykpCi0gICAgICAgIHJldHVybiBnZXRMaXN0
ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpVTkxPQURfRVZFTlQpOworICAgICAgICByZXN1bHQg
PSBnZXRMaXN0ZW5lcihleGVjLERPTTo6RXZlbnRJbXBsOjpVTkxPQURfRVZFTlQpOwogICAgICAg
ZWxzZQotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIHJlc3VsdCA9IFVuZGVm
aW5lZCgpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBGcmFtZUVsZW1lbnQ6CiAgICAg
ICBpZiAoRG9jdW1lbnRJbXBsICpkb2MgPSBtX3BhcnQtPnhtbERvY0ltcGwoKSkKICAgICAgICAg
aWYgKEVsZW1lbnRJbXBsICpmZSA9IGRvYy0+b3duZXJFbGVtZW50KCkpCi0gICAgICAgICAgaWYg
KGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsIGZlKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRET01O
b2RlKGV4ZWMsIGZlKTsKLSAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgICBpZiAo
Y2hlY2tOb2RlU2VjdXJpdHkoZXhlYywgZmUpKSB7CisgICAgICAgICAgICByZXN1bHQgPSBnZXRE
T01Ob2RlKGV4ZWMsIGZlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIH0K
KyAgICAgIHJlc3VsdCA9IFVuZGVmaW5lZCgpOworICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICB9CiAKLSAgS0hUTUxQYXJ0ICprcCA9IG1fcGFydC0+ZmluZEZyYW1lKCBwLnFzdHJpbmcoKSAp
OwotICBpZiAoa3ApCi0gICAgcmV0dXJuIFZhbHVlKHJldHJpZXZlKGtwKSk7CisgIEtIVE1MUGFy
dCAqa3AgPSBtX3BhcnQtPmZpbmRGcmFtZShwLnFzdHJpbmcoKSk7CisgIGlmIChrcCkgeworICAg
IHJlc3VsdCA9IFZhbHVlKHJldHJpZXZlKGtwKSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KIAog
ICAvLyBhbGxvdyB3aW5kb3dbMV0gb3IgcGFyZW50WzFdIGV0Yy4gKCM1Njk4MykKICAgYm9vbCBv
azsKQEAgLTEwOTMsNyArMTE3MCw4IEBAIFZhbHVlIFdpbmRvdzo6Z2V0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QKICAgICAgIEtQYXJ0czo6UmVhZE9ubHlQYXJ0KiBmcmFtZSA9IGZyYW1lcy5hdChp
KTsKICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+aW5oZXJpdHMoIktIVE1MUGFydCIpKSB7CiAJ
S0hUTUxQYXJ0ICpraHRtbCA9IHN0YXRpY19jYXN0PEtIVE1MUGFydCo+KGZyYW1lKTsKLQlyZXR1
cm4gV2luZG93OjpyZXRyaWV2ZShraHRtbCk7CisJcmVzdWx0ID0gV2luZG93OjpyZXRyaWV2ZShr
aHRtbCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMTEw
MiwyNiArMTE4MCwyMiBAQCBWYWx1ZSBXaW5kb3c6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0
CiAgIERvY3VtZW50SW1wbCAqZG9jID0gbV9wYXJ0LT54bWxEb2NJbXBsKCk7CiAgIGlmIChpc1Nh
ZmVTY3JpcHQoZXhlYykgJiYgZG9jICYmIGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgIERP
TVN0cmluZyBuYW1lID0gcC5zdHJpbmcoKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTERvY3Vt
ZW50SW1wbCAqPihkb2MpLT5oYXNOYW1lZEl0ZW0obmFtZSkgfHwKLSAgICAgICAgZG9jLT5nZXRF
bGVtZW50QnlJZChuYW1lKSkgeworICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBs
ICo+KGRvYyktPmhhc05hbWVkSXRlbShuYW1lKSB8fCBkb2MtPmdldEVsZW1lbnRCeUlkKG5hbWUp
KSB7CiAgICAgICBTaGFyZWRQdHI8RE9NOjpIVE1MQ29sbGVjdGlvbkltcGw+IGNvbGxlY3Rpb24g
PSBkb2MtPndpbmRvd05hbWVkSXRlbXMobmFtZSk7CiAgICAgICBpZiAoY29sbGVjdGlvbi0+bGVu
Z3RoKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgY29sbGVjdGlvbi0+
Zmlyc3RJdGVtKCkpOworICAgICAgICByZXN1bHQgPSBnZXRET01Ob2RlKGV4ZWMsIGNvbGxlY3Rp
b24tPmZpcnN0SXRlbSgpKTsKICAgICAgIGVsc2UgCi0gICAgICAgIHJldHVybiBnZXRIVE1MQ29s
bGVjdGlvbihleGVjLCBjb2xsZWN0aW9uLmdldCgpKTsKKyAgICAgICAgcmVzdWx0ID0gZ2V0SFRN
TENvbGxlY3Rpb24oZXhlYywgY29sbGVjdGlvbi5nZXQoKSk7CisgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgIH0KIAotICAvLyBUaGlzIGlzbid0IG5lY2Vzc2FyaWx5IGEgYnVnLiBTb21lIGNv
ZGUgdXNlcyBpZighd2luZG93LmJsYWgpIHdpbmRvdy5ibGFoPTEKLSAgLy8gQnV0IGl0IGNhbiBh
bHNvIG1lYW4gc29tZXRoaW5nIGlzbid0IGxvYWRlZCBvciBpbXBsZW1lbnRlZCwgaGVuY2UgdGhl
IFdBUk5JTkcgdG8gaGVscCBncmVwcGluZy4KLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVn
KDYwNzApIDw8ICJXQVJOSU5HOiBXaW5kb3c6OmdldCBwcm9wZXJ0eSBub3QgZm91bmQ6ICIgPDwg
cC5xc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotCi0gIGlmIChpc1NhZmVTY3JpcHQoZXhlYykp
Ci0gICAgcmV0dXJuIE9iamVjdEltcDo6Z2V0KGV4ZWMsIHApOworICBpZiAoIWlzU2FmZVNjcmlw
dChleGVjKSkgeworICAgIHJlc3VsdCA9IFVuZGVmaW5lZCgpOworICAgIHJldHVybiB0cnVlOwor
ICB9CiAKLSAgcmV0dXJuIFVuZGVmaW5lZCgpOworICByZXR1cm4gT2JqZWN0SW1wOjpnZXRPd25Q
cm9wZXJ0eShleGVjLCBwLCByZXN1bHQpOwogfQogCiBib29sIFdpbmRvdzo6aGFzT3duUHJvcGVy
dHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdApAQCAtMTE2Nyw5
ICsxMjQxLDYgQEAgdm9pZCBXaW5kb3c6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogICBj
b25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJldpbmRvd1RhYmxlLCBw
cm9wZXJ0eU5hbWUpOwogICBpZiAoZW50cnkpCiAgIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICAg
IGtkRGVidWcoNjA3MCkgPDwgIldpbmRvdygiPDx0aGlzPDwiKTo6cHV0ICIgPDwgcHJvcGVydHlO
YW1lLnFzdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCiAgICAgc3dpdGNoKCBlbnRyeS0+dmFsdWUg
KSB7CiAgICAgY2FzZSBTdGF0dXM6IHsKICAgICAgIFN0cmluZyBzID0gdmFsdWUudG9TdHJpbmco
ZXhlYyk7CkBAIC0xMzE3LDcgKzEzODgsNiBAQCB2b2lkIFdpbmRvdzo6cHV0KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgCiAgICAgfQogICB9CiAgIGlmIChpc1NhZmVTY3JpcHQoZXhlYykpIHsKLSAg
ICAvL2tkRGVidWcoNjA3MCkgPDwgIldpbmRvdygiPDx0aGlzPDwiKTo6cHV0IHN0b3JpbmcgIiA8
PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpIDw8IGVuZGw7CiAgICAgT2JqZWN0SW1wOjpwdXQoZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cik7CiAgIH0KIH0KQEAgLTIxNzgsMTEgKzIyNDgs
NiBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShXaW5kb3cgKndpCiAgIGludGVycHJl
dGVyLT5zZXRQcm9jZXNzaW5nVGltZXJDYWxsYmFjayhmYWxzZSk7CiB9CiAKLVNjaGVkdWxlZEFj
dGlvbjo6flNjaGVkdWxlZEFjdGlvbigpCi17Ci0gIC8va2REZWJ1Zyg2MDcwKSA8PCAiU2NoZWR1
bGVkQWN0aW9uOjp+U2NoZWR1bGVkQWN0aW9uICIgPDwgdGhpcyA8PCBlbmRsOwotfQotCiAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vIFdpbmRvd1FPYmplY3QgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CiAKIFdpbmRvd1FPYmplY3Q6OldpbmRvd1FPYmplY3QoV2luZG93ICp3KQpAQCAtMjMxNCwyNCAr
MjM3OSwyMyBAQCBib29sIFdpbmRvd1FPYmplY3Q6Omhhc1RpbWVvdXRzKCkKIH0KICNlbmRpZgog
Ci1WYWx1ZSBGcmFtZUFycmF5OjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
ICZwKSBjb25zdAorYm9vbCBGcmFtZUFycmF5OjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0jaWZkZWYg
S0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiRnJhbWVBcnJheTo6Z2V0ICIgPDwgcC5x
c3RyaW5nKCkgPDwgIiBwYXJ0PSIgPDwgKHZvaWQqKXBhcnQgPDwgZW5kbDsKLSNlbmRpZgogICBp
ZiAocGFydC5pc051bGwoKSkKICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAKICAgUVB0ckxpc3Q8
S1BhcnRzOjpSZWFkT25seVBhcnQ+IGZyYW1lcyA9IHBhcnQtPmZyYW1lcygpOwogICB1bnNpZ25l
ZCBpbnQgbGVuID0gZnJhbWVzLmNvdW50KCk7Ci0gIGlmIChwID09IGxlbmd0aFByb3BlcnR5TmFt
ZSkKLSAgICByZXR1cm4gTnVtYmVyKGxlbik7Ci0gIGVsc2UgaWYgKHA9PSAibG9jYXRpb24iKSAv
LyBub24tc3RhbmRhcmQgcHJvcGVydHksIGJ1dCB3b3JrcyBpbiBOUyBhbmQgSUUKLSAgewotICAg
IE9iamVjdCBvYmogPSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBXaW5kb3c6OnJldHJpZXZlKCBwYXJ0
ICkgKTsKLSAgICBpZiAoICFvYmouaXNOdWxsKCkgKQotICAgICAgcmV0dXJuIG9iai5nZXQoIGV4
ZWMsICJsb2NhdGlvbiIgKTsKLSAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgIGlmIChwID09IGxl
bmd0aFByb3BlcnR5TmFtZSkgeworICAgIHJlc3VsdCA9IE51bWJlcihsZW4pOworICAgIHJldHVy
biB0cnVlOworICB9IGVsc2UgaWYgKHA9PSAibG9jYXRpb24iKSB7CisgICAgLy8gbm9uLXN0YW5k
YXJkIHByb3BlcnR5LCBidXQgd29ya3MgaW4gTlMgYW5kIElFCisgICAgT2JqZWN0IG9iaiA9IE9i
amVjdDo6ZHluYW1pY0Nhc3QoV2luZG93OjpyZXRyaWV2ZShwYXJ0KSk7CisgICAgaWYgKCFvYmou
aXNOdWxsKCkpIHsKKyAgICAgIHJlc3VsdCA9IG9iai5nZXQoZXhlYywgImxvY2F0aW9uIik7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgIH0KIAogICAvLyBjaGVjayBmb3IgdGhlIG5hbWUg
b3IgbnVtYmVyCkBAIC0yMzQzLDE1ICsyNDA3LDEzIEBAIFZhbHVlIEZyYW1lQXJyYXk6OmdldChF
eGVjU3RhdGUgKmV4ZWMsIGMKICAgICAgIGZyYW1lID0gZnJhbWVzLmF0KGkpOwogICB9CiAKLSAg
Ly8gd2UgYXJlIHBvdGVudGlhbGx5IGZldGNoaW5nIGEgcmVmZXJlbmNlIHRvIGEgYW5vdGhlciBX
aW5kb3cgb2JqZWN0IGhlcmUuCi0gIC8vIGkuZS4gd2UgbWF5IGJlIGFjY2Vzc2luZyBvYmplY3Rz
IGZyb20gYW5vdGhlciBpbnRlcnByZXRlciBpbnN0YW5jZS4KLSAgLy8gVGhlcmVmb3JlIHdlIGhh
dmUgdG8gYmUgYSBiaXQgY2FyZWZ1bCB3aXRoIG1lbW9yeSBtYW5hZ21lbnQuCiAgIGlmIChmcmFt
ZSAmJiBmcmFtZS0+aW5oZXJpdHMoIktIVE1MUGFydCIpKSB7CiAgICAgS0hUTUxQYXJ0ICpraHRt
bCA9IHN0YXRpY19jYXN0PEtIVE1MUGFydCo+KGZyYW1lKTsKLSAgICByZXR1cm4gV2luZG93Ojpy
ZXRyaWV2ZShraHRtbCk7CisgICAgcmVzdWx0ID0gV2luZG93OjpyZXRyaWV2ZShraHRtbCk7Cisg
ICAgcmV0dXJuIHRydWU7CiAgIH0KIAotICByZXR1cm4gT2JqZWN0SW1wOjpnZXQoZXhlYywgcCk7
CisgIHJldHVybiBPYmplY3RJbXA6OmdldE93blByb3BlcnR5KGV4ZWMsIHAsIHJlc3VsdCk7CiB9
CiAKIFVTdHJpbmcgRnJhbWVBcnJheTo6dG9TdHJpbmcoRXhlY1N0YXRlICopIGNvbnN0CkBAIC0y
MzgyLDg0ICsyNDQ0LDc0IEBAIGNvbnN0IENsYXNzSW5mbyBMb2NhdGlvbjo6aW5mbyA9IHsgIkxv
Y2EKIElNUExFTUVOVF9QUk9UT0ZVTkMoTG9jYXRpb25GdW5jKQogTG9jYXRpb246OkxvY2F0aW9u
KEtIVE1MUGFydCAqcCkgOiBtX3BhcnQocCkKIHsKLSAgLy9rZERlYnVnKDYwNzApIDw8ICJMb2Nh
dGlvbjo6TG9jYXRpb24gIiA8PCB0aGlzIDw8ICIgbV9wYXJ0PSIgPDwgKHZvaWQqKW1fcGFydCA8
PCBlbmRsOwogfQogCi1Mb2NhdGlvbjo6fkxvY2F0aW9uKCkKK2Jvb2wgTG9jYXRpb246OmdldE93
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJl
c3VsdCkgY29uc3QKIHsKLSAgLy9rZERlYnVnKDYwNzApIDw8ICJMb2NhdGlvbjo6fkxvY2F0aW9u
ICIgPDwgdGhpcyA8PCAiIG1fcGFydD0iIDw8ICh2b2lkKiltX3BhcnQgPDwgZW5kbDsKLX0KLQot
VmFsdWUgTG9jYXRpb246OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnAp
IGNvbnN0Ci17Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiTG9jYXRp
b246OmdldCAiIDw8IHAucXN0cmluZygpIDw8ICIgbV9wYXJ0PSIgPDwgKHZvaWQqKW1fcGFydCA8
PCBlbmRsOwotI2VuZGlmCi0KICAgaWYgKG1fcGFydC5pc051bGwoKSkKLSAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwogICAKICAgY29uc3QgV2luZG93KiB3aW5kb3cg
PSBXaW5kb3c6OnJldHJpZXZlV2luZG93KG1fcGFydCk7Ci0gIGlmICghd2luZG93IHx8ICF3aW5k
b3ctPmlzU2FmZVNjcmlwdChleGVjKSkKLSAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgaWYg
KCF3aW5kb3cgfHwgIXdpbmRvdy0+aXNTYWZlU2NyaXB0KGV4ZWMpKSB7CisgICAgICByZXN1bHQg
PSBVbmRlZmluZWQoKTsKKyAgICAgIHJldHVybiB0cnVlOworICB9CiAKICAgS1VSTCB1cmwgPSBt
X3BhcnQtPnVybCgpOwogICBjb25zdCBIYXNoRW50cnkgKmVudHJ5ID0gTG9va3VwOjpmaW5kRW50
cnkoJkxvY2F0aW9uVGFibGUsIHApOwotICBpZiAoZW50cnkpCisgIGlmIChlbnRyeSkgewogICAg
IHN3aXRjaCAoZW50cnktPnZhbHVlKSB7CiAgICAgY2FzZSBIYXNoOgotICAgICAgcmV0dXJuIFN0
cmluZyggdXJsLnJlZigpLmlzTnVsbCgpID8gUVN0cmluZygiIikgOiAiIyIgKyB1cmwucmVmKCkg
KTsKKyAgICAgIHJlc3VsdCA9IFN0cmluZyh1cmwucmVmKCkuaXNOdWxsKCkgPyBRU3RyaW5nKCIi
KSA6ICIjIiArIHVybC5yZWYoKSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIEhvc3Q6
IHsKLSAgICAgIFVTdHJpbmcgc3RyID0gdXJsLmhvc3QoKTsKLSAgICAgIGlmICh1cmwucG9ydCgp
KQotICAgICAgICBzdHIgKz0gIjoiICsgUVN0cmluZzo6bnVtYmVyKChpbnQpdXJsLnBvcnQoKSk7
Ci0gICAgICByZXR1cm4gU3RyaW5nKHN0cik7CiAgICAgICAvLyBOb3RlOiB0aGlzIGlzIHRoZSBJ
RSBzcGVjLiBUaGUgTlMgc3BlYyBzd2FwcyB0aGUgdHdvLCBpdCBzYXlzCiAgICAgICAvLyAiVGhl
IGhvc3RuYW1lIHByb3BlcnR5IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBob3N0IGFuZCBw
b3J0IHByb3BlcnRpZXMsIHNlcGFyYXRlZCBieSBhIGNvbG9uLiIKICAgICAgIC8vIEJsZWguCisg
ICAgICBVU3RyaW5nIHN0ciA9IHVybC5ob3N0KCk7CisgICAgICBpZiAodXJsLnBvcnQoKSkKKyAg
ICAgICAgc3RyICs9ICI6IiArIFFTdHJpbmc6Om51bWJlcigoaW50KXVybC5wb3J0KCkpOworICAg
ICAgcmVzdWx0ID0gU3RyaW5nKHN0cik7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
Y2FzZSBIb3N0bmFtZToKLSAgICAgIHJldHVybiBTdHJpbmcoIHVybC5ob3N0KCkgKTsKKyAgICAg
IHJlc3VsdCA9IFN0cmluZyh1cmwuaG9zdCgpKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNh
c2UgSHJlZjoKICAgICAgIGlmICghdXJsLmhhc1BhdGgoKSkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZyggdXJsLnByZXR0eVVSTCgpKyIvIiApOworICAgICAgICByZXN1bHQgPSBTdHJpbmcodXJsLnBy
ZXR0eVVSTCgpICsgIi8iKTsKICAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFN0cmluZyggdXJs
LnByZXR0eVVSTCgpICk7CisgICAgICAgIHJlc3VsdCA9IFN0cmluZyh1cmwucHJldHR5VVJMKCkp
OworICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBQYXRobmFtZToKLSAgICAgIHJldHVybiBT
dHJpbmcoIHVybC5wYXRoKCkuaXNFbXB0eSgpID8gUVN0cmluZygiLyIpIDogdXJsLnBhdGgoKSAp
OworICAgICAgcmVzdWx0ID0gU3RyaW5nKHVybC5wYXRoKCkuaXNFbXB0eSgpID8gUVN0cmluZygi
LyIpIDogdXJsLnBhdGgoKSk7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFBvcnQ6Ci0g
ICAgICByZXR1cm4gU3RyaW5nKCB1cmwucG9ydCgpID8gUVN0cmluZzo6bnVtYmVyKChpbnQpdXJs
LnBvcnQoKSkgOiBRU3RyaW5nOjpmcm9tTGF0aW4xKCIiKSApOworICAgICAgcmVzdWx0ID0gU3Ry
aW5nKHVybC5wb3J0KCkgPyBRU3RyaW5nOjpudW1iZXIoKGludCl1cmwucG9ydCgpKSA6IFFTdHJp
bmc6OmZyb21MYXRpbjEoIiIpKTsKKyAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgUHJvdG9j
b2w6Ci0gICAgICByZXR1cm4gU3RyaW5nKCB1cmwucHJvdG9jb2woKSsiOiIgKTsKKyAgICAgIHJl
c3VsdCA9IFN0cmluZyh1cmwucHJvdG9jb2woKSsiOiIpOworICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgY2FzZSBTZWFyY2g6Ci0gICAgICByZXR1cm4gU3RyaW5nKCB1cmwucXVlcnkoKSApOwotICAg
IGNhc2UgRXF1YWxFcXVhbDogLy8gW1s9PV1dCi0gICAgICByZXR1cm4gU3RyaW5nKHRvU3RyaW5n
KGV4ZWMpKTsKKyAgICAgIHJlc3VsdCA9IFN0cmluZyh1cmwucXVlcnkoKSk7CisgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBjYXNlIFRvU3RyaW5nOgotICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRl
RnVuY3Rpb248TG9jYXRpb25GdW5jPihleGVjLHAsdGhpcyxlbnRyeS0+dmFsdWUsZW50cnktPnBh
cmFtcyxlbnRyeS0+YXR0cik7Ci0gICAgfQotICAvLyBMb29rIGZvciBvdmVycmlkZXMKLSAgVmFs
dWVJbXAgKiB2YWwgPSBPYmplY3RJbXA6OmdldERpcmVjdChwKTsKLSAgaWYgKHZhbCkKLSAgICBy
ZXR1cm4gVmFsdWUodmFsKTsKLSAgaWYgKGVudHJ5KQotICAgIHN3aXRjaCAoZW50cnktPnZhbHVl
KSB7CisgICAgICByZXN1bHQgPSBTdHJpbmcodG9TdHJpbmcoZXhlYykpOworICAgICAgcmV0dXJu
IHRydWU7CiAgICAgY2FzZSBSZXBsYWNlOgotICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRnVu
Y3Rpb248TG9jYXRpb25GdW5jPihleGVjLHAsdGhpcyxlbnRyeS0+dmFsdWUsZW50cnktPnBhcmFt
cyxlbnRyeS0+YXR0cik7CiAgICAgY2FzZSBSZWxvYWQ6Ci0gICAgICByZXR1cm4gbG9va3VwT3JD
cmVhdGVGdW5jdGlvbjxMb2NhdGlvbkZ1bmM+KGV4ZWMscCx0aGlzLGVudHJ5LT52YWx1ZSxlbnRy
eS0+cGFyYW1zLGVudHJ5LT5hdHRyKTsKICAgICBjYXNlIEFzc2lnbjoKLSAgICAgIHJldHVybiBs
b29rdXBPckNyZWF0ZUZ1bmN0aW9uPExvY2F0aW9uRnVuYz4oZXhlYyxwLHRoaXMsZW50cnktPnZh
bHVlLGVudHJ5LT5wYXJhbXMsZW50cnktPmF0dHIpOworICAgIGNhc2UgRXF1YWxFcXVhbDogLy8g
W1s9PV1dCisgICAgICByZXN1bHQgPSBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPExvY2F0aW9uRnVu
Yz4oZXhlYywgcCwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1zLCBlbnRyeS0+YXR0
cik7CisgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgIH0KIAotICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgIHJldHVybiBPYmplY3RJbXA6OmdldE93blByb3BlcnR5KGV4ZWMsIHAsIHJlc3VsdCk7
CiB9CiAKIHZvaWQgTG9jYXRpb246OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnAsIGNvbnN0IFZhbHVlICZ2LCBpbnQgYXR0cikKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQot
ICBrZERlYnVnKDYwNzApIDw8ICJMb2NhdGlvbjo6cHV0ICIgPDwgcC5xc3RyaW5nKCkgPDwgIiBt
X3BhcnQ9IiA8PCAodm9pZCopbV9wYXJ0IDw8IGVuZGw7Ci0jZW5kaWYKICAgaWYgKG1fcGFydC5p
c051bGwoKSkKICAgICByZXR1cm47CiAKQEAgLTI2MjcsODUgKzI2NzksODEgQEAgY29uc3QgQ2xh
c3NJbmZvIFNlbGVjdGlvbjo6aW5mbyA9IHsgIlNlbAogSU1QTEVNRU5UX1BST1RPRlVOQyhTZWxl
Y3Rpb25GdW5jKQogU2VsZWN0aW9uOjpTZWxlY3Rpb24oS0hUTUxQYXJ0ICpwKSA6IG1fcGFydChw
KQogewotICAvL2tkRGVidWcoNjA3MCkgPDwgIlNlbGVjdGlvbjo6U2VsZWN0aW9uICIgPDwgdGhp
cyA8PCAiIG1fcGFydD0iIDw8ICh2b2lkKiltX3BhcnQgPDwgZW5kbDsKIH0KIAotU2VsZWN0aW9u
Ojp+U2VsZWN0aW9uKCkKK2Jvb2wgU2VsZWN0aW9uOjpnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHAsIFZhbHVlJiByZXN1bHQpIGNvbnN0CiB7Ci0gIC8v
a2REZWJ1Zyg2MDcwKSA8PCAiU2VsZWN0aW9uOjp+U2VsZWN0aW9uICIgPDwgdGhpcyA8PCAiIG1f
cGFydD0iIDw8ICh2b2lkKiltX3BhcnQgPDwgZW5kbDsKLX0KLQotVmFsdWUgU2VsZWN0aW9uOjpn
ZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwKSBjb25zdAotewotI2lmZGVm
IEtKU19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwgIlNlbGVjdGlvbjo6Z2V0ICIgPDwgcC5x
c3RyaW5nKCkgPDwgIiBtX3BhcnQ9IiA8PCAodm9pZCopbV9wYXJ0IDw8IGVuZGw7Ci0jZW5kaWYK
LQogICBpZiAobV9wYXJ0LmlzTnVsbCgpKQotICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiAgIAogICBjb25zdCBXaW5kb3cqIHdpbmRvdyA9IFdpbmRvdzo6cmV0cmll
dmVXaW5kb3cobV9wYXJ0KTsKLSAgaWYgKCF3aW5kb3cgfHwgIXdpbmRvdy0+aXNTYWZlU2NyaXB0
KGV4ZWMpKQotICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICBpZiAoIXdpbmRvdyB8fCAhd2lu
ZG93LT5pc1NhZmVTY3JpcHQoZXhlYykpIHsKKyAgICAgIHJlc3VsdCA9IFVuZGVmaW5lZCgpOwor
ICAgICAgcmV0dXJuIHRydWU7CisgIH0KIAogICBEb2N1bWVudEltcGwgKmRvY2ltcGwgPSBtX3Bh
cnQtPnhtbERvY0ltcGwoKTsKICAgaWYgKGRvY2ltcGwpCiAgICAgZG9jaW1wbC0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKKyAgLy8gRklYTUU6IHNob3VsZCB1c2Ug
bG9va3VwR2V0T3duUHJvcGVydHkgaGVyZS4uLgogICBLVVJMIHVybCA9IG1fcGFydC0+dXJsKCk7
CiAgIGNvbnN0IEhhc2hFbnRyeSAqZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSgmU2VsZWN0aW9u
VGFibGUsIHApOwogICBpZiAoZW50cnkpCiAgICAgc3dpdGNoIChlbnRyeS0+dmFsdWUpIHsKICAg
ICAgICAgY2FzZSBBbmNob3JOb2RlOgogICAgICAgICBjYXNlIEJhc2VOb2RlOgotICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgbV9wYXJ0LT5zZWxlY3Rpb24oKS5iYXNlKCkubm9k
ZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGdldERPTU5vZGUoZXhlYywgbV9wYXJ0LT5zZWxl
Y3Rpb24oKS5iYXNlKCkubm9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBjYXNlIEFuY2hvck9mZnNldDoKICAgICAgICAgY2FzZSBCYXNlT2Zmc2V0OgotICAgICAgICAg
ICAgcmV0dXJuIE51bWJlcihtX3BhcnQtPnNlbGVjdGlvbigpLmJhc2UoKS5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgcmVzdWx0ID0gTnVtYmVyKG1fcGFydC0+c2VsZWN0aW9uKCkuYmFzZSgpLm9m
ZnNldCgpKTsKKyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBGb2N1c05v
ZGU6CiAgICAgICAgIGNhc2UgRXh0ZW50Tm9kZToKLSAgICAgICAgICAgIHJldHVybiBnZXRET01O
b2RlKGV4ZWMsIG1fcGFydC0+c2VsZWN0aW9uKCkuZXh0ZW50KCkubm9kZSgpKTsKKyAgICAgICAg
ICAgICByZXN1bHQgPSBnZXRET01Ob2RlKGV4ZWMsIG1fcGFydC0+c2VsZWN0aW9uKCkuZXh0ZW50
KCkubm9kZSgpKTsKKyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBGb2N1
c09mZnNldDoKICAgICAgICAgY2FzZSBFeHRlbnRPZmZzZXQ6Ci0gICAgICAgICAgICByZXR1cm4g
TnVtYmVyKG1fcGFydC0+c2VsZWN0aW9uKCkuZXh0ZW50KCkub2Zmc2V0KCkpOworICAgICAgICAg
ICAgIHJlc3VsdCA9IE51bWJlcihtX3BhcnQtPnNlbGVjdGlvbigpLmV4dGVudCgpLm9mZnNldCgp
KTsKKyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBJc0NvbGxhcHNlZDoK
LSAgICAgICAgICAgIHJldHVybiBCb29sZWFuKCFtX3BhcnQtPnNlbGVjdGlvbigpLmlzUmFuZ2Uo
KSk7CisgICAgICAgICAgICAgcmVzdWx0ID0gQm9vbGVhbighbV9wYXJ0LT5zZWxlY3Rpb24oKS5p
c1JhbmdlKCkpOworICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIF9UeXBl
OiB7CiAgICAgICAgICAgICBzd2l0Y2ggKG1fcGFydC0+c2VsZWN0aW9uKCkuc3RhdGUoKSkgewot
ICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6Tk9ORToKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygiTm9uZSIpOwotICAgICAgICAgICAgICAgIGNhc2Uga2h0
bWw6OlNlbGVjdGlvbjo6Q0FSRVQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmco
IkNhcmV0Iik7Ci0gICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6U2VsZWN0aW9uOjpSQU5HRToK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiUmFuZ2UiKTsKKyAgICAgICAgICAg
IGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6Tk9ORToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBT
dHJpbmcoIk5vbmUiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
a2h0bWw6OlNlbGVjdGlvbjo6Q0FSRVQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gU3RyaW5n
KCJDYXJldCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBraHRt
bDo6U2VsZWN0aW9uOjpSQU5HRToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBTdHJpbmcoIlJh
bmdlIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGFzc2VydCgwKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRXF1YWxFcXVhbDoKLSAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgcmVzdWx0ID0gbG9v
a3VwT3JDcmVhdGVGdW5jdGlvbjxTZWxlY3Rpb25GdW5jPihleGVjLCBwLCB0aGlzLCBlbnRyeS0+
dmFsdWUsIGVudHJ5LT5wYXJhbXMsIGVudHJ5LT5hdHRyKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBjYXNlIFRvU3RyaW5nOgotICAgICAgICAgIHJldHVybiBsb29rdXBPckNy
ZWF0ZUZ1bmN0aW9uPFNlbGVjdGlvbkZ1bmM+KGV4ZWMscCx0aGlzLGVudHJ5LT52YWx1ZSxlbnRy
eS0+cGFyYW1zLGVudHJ5LT5hdHRyKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZyh0b1N0
cmluZyhleGVjKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBDb2xs
YXBzZToKKyAgICAgICAgY2FzZSBDb2xsYXBzZVRvRW5kOgorICAgICAgICBjYXNlIENvbGxhcHNl
VG9TdGFydDoKKyAgICAgICAgY2FzZSBFbXB0eToKKyAgICAgICAgY2FzZSBTZXRCYXNlQW5kRXh0
ZW50OgorICAgICAgICBjYXNlIFNldFBvc2l0aW9uOgorICAgICAgICBjYXNlIE1vZGlmeToKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248U2VsZWN0aW9uRnVuYz4o
ZXhlYyxwLHRoaXMsZW50cnktPnZhbHVlLGVudHJ5LT5wYXJhbXMsZW50cnktPmF0dHIpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIC8vIExvb2sgZm9yIG92ZXJyaWRlcwot
ICAgIFZhbHVlSW1wICogdmFsID0gT2JqZWN0SW1wOjpnZXREaXJlY3QocCk7Ci0gICAgaWYgKHZh
bCkKLSAgICAgICAgcmV0dXJuIFZhbHVlKHZhbCk7Ci0gICAgaWYgKGVudHJ5KQotICAgICAgICBz
d2l0Y2ggKGVudHJ5LT52YWx1ZSkgewotICAgICAgICAgICAgY2FzZSBDb2xsYXBzZToKLSAgICAg
ICAgICAgIGNhc2UgQ29sbGFwc2VUb0VuZDoKLSAgICAgICAgICAgIGNhc2UgQ29sbGFwc2VUb1N0
YXJ0OgotICAgICAgICAgICAgY2FzZSBFbXB0eToKLSAgICAgICAgICAgIGNhc2UgU2V0QmFzZUFu
ZEV4dGVudDoKLSAgICAgICAgICAgIGNhc2UgU2V0UG9zaXRpb246Ci0gICAgICAgICAgICBjYXNl
IE1vZGlmeToKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVGdW5jdGlvbjxT
ZWxlY3Rpb25GdW5jPihleGVjLHAsdGhpcyxlbnRyeS0+dmFsdWUsZW50cnktPnBhcmFtcyxlbnRy
eS0+YXR0cik7Ci0gICAgICAgIH0KIAotICAgIHJldHVybiBVbmRlZmluZWQoKTsKLX0KLQotdm9p
ZCBTZWxlY3Rpb246OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnAsIGNv
bnN0IFZhbHVlICZ2LCBpbnQgYXR0cikKLXsKKyAgICByZXR1cm4gT2JqZWN0SW1wOjpnZXRPd25Q
cm9wZXJ0eShleGVjLCBwLCByZXN1bHQpOwogfQogCiBWYWx1ZSBTZWxlY3Rpb246OnRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSAqZXhlYywgVHlwZSkgY29uc3QKQEAgLTI4MTAsNTIgKzI4NTgsNDIgQEAg
QmFySW5mbzo6QmFySW5mbyhFeGVjU3RhdGUgKmV4ZWMsIEtIVE1MUAogewogfQogCi1CYXJJbmZv
Ojp+QmFySW5mbygpCi17Ci19Ci0KLVZhbHVlIEJhckluZm86OmdldChFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnApIGNvbnN0Citib29sIEJhckluZm86OmdldE93blByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcCwgVmFsdWUmIHJlc3VsdCkgY29u
c3QKIHsKICAgaWYgKG1fcGFydC5pc051bGwoKSkKLSAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOwogICAKICAgY29uc3QgSGFzaEVudHJ5ICplbnRyeSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZCYXJJbmZvVGFibGUsIHApOwogICBpZiAoZW50cnkgJiYgZW50cnktPnZhbHVl
ID09IFZpc2libGUpIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgTG9jYXRpb25i
YXI6CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgICAgcmV0dXJuIEJvb2xlYW4oS1dRKG1fcGFydCkt
PmxvY2F0aW9uYmFyVmlzaWJsZSgpKTsKLSNlbmRpZgorICAgIGNhc2UgTG9jYXRpb25iYXI6Cisg
ICAgICByZXN1bHQgPSBCb29sZWFuKEtXUShtX3BhcnQpLT5sb2NhdGlvbmJhclZpc2libGUoKSk7
CisgICAgICBicmVhazsKICAgICBjYXNlIE1lbnViYXI6IAotI2lmIEFQUExFX0NIQU5HRVMKLSAg
ICAgIHJldHVybiBCb29sZWFuKEtXUShtX3BhcnQpLT5sb2NhdGlvbmJhclZpc2libGUoKSk7Ci0j
ZW5kaWYKKyAgICAgIHJlc3VsdCA9IEJvb2xlYW4oS1dRKG1fcGFydCktPmxvY2F0aW9uYmFyVmlz
aWJsZSgpKTsKKyAgICAgIGJyZWFrOwogICAgIGNhc2UgUGVyc29uYWxiYXI6Ci0jaWYgQVBQTEVf
Q0hBTkdFUwotICAgICAgcmV0dXJuIEJvb2xlYW4oS1dRKG1fcGFydCktPnBlcnNvbmFsYmFyVmlz
aWJsZSgpKTsKLSNlbmRpZgorICAgICAgcmVzdWx0ID0gQm9vbGVhbihLV1EobV9wYXJ0KS0+cGVy
c29uYWxiYXJWaXNpYmxlKCkpOworICAgICAgYnJlYWs7CiAgICAgY2FzZSBTY3JvbGxiYXJzOiAK
LSNpZiBBUFBMRV9DSEFOR0VTCi0gICAgICByZXR1cm4gQm9vbGVhbihLV1EobV9wYXJ0KS0+c2Ny
b2xsYmFyc1Zpc2libGUoKSk7Ci0jZW5kaWYKKyAgICAgIHJlc3VsdCA9IEJvb2xlYW4oS1dRKG1f
cGFydCktPnNjcm9sbGJhcnNWaXNpYmxlKCkpOworICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdGF0
dXNiYXI6Ci0jaWYgQVBQTEVfQ0hBTkdFUwotICAgICAgcmV0dXJuIEJvb2xlYW4oS1dRKG1fcGFy
dCktPnN0YXR1c2JhclZpc2libGUoKSk7Ci0jZW5kaWYKKyAgICAgIHJlc3VsdCA9ICBCb29sZWFu
KEtXUShtX3BhcnQpLT5zdGF0dXNiYXJWaXNpYmxlKCkpOworICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBUb29sYmFyOgotI2lmIEFQUExFX0NIQU5HRVMKLSAgICAgIHJldHVybiBCb29sZWFuKEtXUSht
X3BhcnQpLT50b29sYmFyVmlzaWJsZSgpKTsKKyAgICAgIHJlc3VsdCA9IEJvb2xlYW4oS1dRKG1f
cGFydCktPnRvb2xiYXJWaXNpYmxlKCkpOworICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBkZWZh
dWx0OgotICAgICAgcmV0dXJuIEJvb2xlYW4oZmFsc2UpOworICAgICAgcmVzdWx0ID0gQm9vbGVh
bihmYWxzZSk7CiAgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOwogICB9CiAgIAotICByZXR1
cm4gVW5kZWZpbmVkKCk7Ci19Ci0KLXZvaWQgQmFySW5mbzo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywg
Y29uc3QgSWRlbnRpZmllciAmcCwgY29uc3QgVmFsdWUgJnYsIGludCBhdHRyKQoteworICByZXR1
cm4gT2JqZWN0SW1wOjpnZXRPd25Qcm9wZXJ0eShleGVjLCBwLCByZXN1bHQpOwogfQogCiAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vIEhpc3RvcnkgT2JqZWN0IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwpAQCAtMjg3MSw5ICsyOTA5LDkgQEAgY29uc3QgQ2xhc3NJbmZvIEhpc3Rvcnk6OmluZm8gPSB7
ICJIaXN0bwogKi8KIElNUExFTUVOVF9QUk9UT0ZVTkMoSGlzdG9yeUZ1bmMpCiAKLVZhbHVlIEhp
c3Rvcnk6OmdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnApIGNvbnN0Citi
b29sIEhpc3Rvcnk6OmdldE93blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcCwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSAgcmV0dXJuIGxvb2t1cEdldDxIaXN0
b3J5RnVuYyxIaXN0b3J5LE9iamVjdEltcD4oZXhlYyxwLCZIaXN0b3J5VGFibGUsdGhpcyk7Cisg
IHJldHVybiBsb29rdXBHZXRPd25Qcm9wZXJ0eTxIaXN0b3J5RnVuYywgSGlzdG9yeSwgT2JqZWN0
SW1wPihleGVjLCBwLCAmSGlzdG9yeVRhYmxlLCB0aGlzLCByZXN1bHQpOwogfQogCiBWYWx1ZSBI
aXN0b3J5OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQ2CmRpZmYgLXUgLXAgLXIxLjQ2IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2lu
ZG93LmgKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmgJMTYgSnVsIDIwMDUgMDY6
MTc6MzEgLTAwMDAJMS40NgorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuaAkyNSBK
dWwgMjAwNSAwNjowNDozOSAtMDAwMApAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICAgIEhlaWdodCwgV2lkdGgsIENvbG9yRGVwdGgsIFBpeGVsRGVwdGgsIEF2YWlsTGVmdCwg
QXZhaWxUb3AsIEF2YWlsSGVpZ2h0LAogICAgICAgQXZhaWxXaWR0aAogICAgIH07Ci0gICAgdmly
dHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29u
c3Q7CiAgICAgVmFsdWUgZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CiAgIHByaXZhdGU6CiAgICAgS0hUTUxWaWV3ICp2aWV3OwpAQCAtOTIsNyArOTIs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBzdGF0aWMgV2luZG93ICpyZXRyaWV2ZUFjdGl2ZShF
eGVjU3RhdGUgKmV4ZWMpOwogICAgIFFHdWFyZGVkUHRyPEtIVE1MUGFydD4gcGFydCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGFydDsgfQogICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7Ci0gICAgdmlydHVh
bCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1
ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CiAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihF
eGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwpAQCAtMTgyLDcgKzE4Miw2IEBAIG5hbWVzcGFjZSBLSlMg
ewogICBwdWJsaWM6CiAgICAgU2NoZWR1bGVkQWN0aW9uKE9iamVjdCBfZnVuYywgTGlzdCBfYXJn
cywgYm9vbCBfc2luZ2xlU2hvdCk7CiAgICAgU2NoZWR1bGVkQWN0aW9uKGNvbnN0IFFTdHJpbmcg
Jl9jb2RlLCBib29sIF9zaW5nbGVTaG90KTsKLSAgICB+U2NoZWR1bGVkQWN0aW9uKCk7CiAgICAg
dm9pZCBleGVjdXRlKFdpbmRvdyAqd2luZG93KTsKIAogICAgIFByb3RlY3RlZE9iamVjdCBmdW5j
OwpAQCAtMjIwLDggKzIxOSw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIExvY2F0aW9u
IDogcHVibGljIE9iamVjdEltcCB7CiAgIHB1YmxpYzoKLSAgICB+TG9jYXRpb24oKTsKLSAgICB2
aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1ZSYgcmVzdWx0KSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRp
ZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7
CiAgICAgdmlydHVhbCBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4ZWMsIFR5cGUgcHJl
ZmVycmVkKSBjb25zdDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlICpl
eGVjKSBjb25zdDsKQEAgLTIzOCw5ICsyMzYsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFz
cyBTZWxlY3Rpb24gOiBwdWJsaWMgT2JqZWN0SW1wIHsKICAgcHVibGljOgotICAgIH5TZWxlY3Rp
b24oKTsKLSAgICB2aXJ0dWFsIFZhbHVlIGdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUgJnZh
bHVlLCBpbnQgYXR0ciA9IE5vbmUpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJl
c3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUgKmV4
ZWMsIFR5cGUgcHJlZmVycmVkKSBjb25zdDsKICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmco
RXhlY1N0YXRlICpleGVjKSBjb25zdDsKICAgICBlbnVtIHsgQW5jaG9yTm9kZSwgQW5jaG9yT2Zm
c2V0LCBGb2N1c05vZGUsIEZvY3VzT2Zmc2V0LCBCYXNlTm9kZSwgQmFzZU9mZnNldCwgRXh0ZW50
Tm9kZSwgRXh0ZW50T2Zmc2V0LCAKQEAgLTI1Nyw5ICsyNTMsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
IAogICBjbGFzcyBCYXJJbmZvIDogcHVibGljIE9iamVjdEltcCB7CiAgIHB1YmxpYzoKLSAgICB+
QmFySW5mbygpOwotICAgIHZpcnR1YWwgVmFsdWUgZ2V0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4
ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1
ZSAmdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBWYWx1
ZSYgcmVzdWx0KSBjb25zdDsKICAgICBlbnVtIHsgVmlzaWJsZSB9OwogICAgIGVudW0gVHlwZSB7
IExvY2F0aW9uYmFyLCBNZW51YmFyLCBQZXJzb25hbGJhciwgU2Nyb2xsYmFycywgU3RhdHVzYmFy
LCBUb29sYmFyIH07CiAgICAgS0hUTUxQYXJ0ICpwYXJ0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJ0
OyB9CkBAIC0yNzcsNyArMjcxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgZnJpZW5kIGNsYXNz
IEtvbnF1ZXJvckZ1bmM7CiAgIHB1YmxpYzoKICAgICBLb25xdWVyb3IoS0hUTUxQYXJ0ICpwKSA6
IHBhcnQocCkgeyB9Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGhhc093blByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcCkgY29uc3Q7CiAgICAgdmlydHVh
bCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7CiAgICAgdmlydHVhbCBj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CkluZGV4
OiBXZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjMyCmRpZmYgLXUgLXAgLXIxLjMyIFdlYkNvcmUva2h0bWwvZWNt
YS94bWxodHRwcmVxdWVzdC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVz
dC5jcHAJMTkgSnVsIDIwMDUgMTk6NTI6NDkgLTAwMDAJMS4zMgorKysgV2ViQ29yZS9raHRtbC9l
Y21hL3htbGh0dHByZXF1ZXN0LmNwcAkyNSBKdWwgMjAwNSAwNjowNDozOSAtMDAwMApAQCAtMTI3
LDkgKzEyNyw5IEBAIGNvbnN0IENsYXNzSW5mbyBYTUxIdHRwUmVxdWVzdDo6aW5mbyA9IHsKIEBl
bmQKICovCiAKLVZhbHVlIFhNTEh0dHBSZXF1ZXN0OjpnZXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Citib29sIFhNTEh0dHBSZXF1ZXN0Ojpn
ZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5
TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3QKIHsKLSAgcmV0dXJuIGxvb2t1cEdldFZhbHVlPFhN
TEh0dHBSZXF1ZXN0LERPTU9iamVjdD4oZXhlYywgcHJvcGVydHlOYW1lLCAmWE1MSHR0cFJlcXVl
c3RUYWJsZSwgdGhpcyk7CisgIHJldHVybiBsb29rdXBHZXRPd25WYWx1ZTxYTUxIdHRwUmVxdWVz
dCxET01PYmplY3Q+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJlhNTEh0dHBSZXF1ZXN0VGFibGUsIHRo
aXMsIHJlc3VsdCk7CiB9CiAKIFZhbHVlIFhNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdApJbmRleDogV2ViQ29yZS9raHRtbC9l
Y21hL3htbGh0dHByZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1
CmRpZmYgLXUgLXAgLXIxLjE1IFdlYkNvcmUva2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5oCi0t
LSBXZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuaAkxOSBKdWwgMjAwNSAxOTo1Mjo0
OSAtMDAwMAkxLjE1CisrKyBXZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuaAkyNSBK
dWwgMjAwNSAwNjowNDozOSAtMDAwMApAQCAtNjUsNyArNjUsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgcHVibGljOgogICAgIFhNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSAqLCBET006OkRvY3VtZW50
SW1wbCAqZCk7CiAgICAgflhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgdmlydHVhbCBWYWx1ZSBnZXQo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgVmFsdWUg
Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0ciA9IE5vbmUpOwogICAgIHZvaWQg
cHV0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBpbnQgLyphdHRyKi8pOwo=
</data>
<flag name="review"
          id="271"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>