<?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>151491</bug_id>
          
          <creation_ts>2015-11-20 05:18:31 -0800</creation_ts>
          <short_desc>Fix coding style of Intl code</short_desc>
          <delta_ts>2015-11-30 14:21:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sukolsak Sakshuwong">sukolsak</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sukolsak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1143627</commentid>
    <comment_count>0</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-11-20 05:18:31 -0800</bug_when>
    <thetext>Fix coding style of Intl code according to Darin&apos;s comments in https://bugs.webkit.org/show_bug.cgi?id=147604

This patch does three things:
1. Rename pointers and references to ExecState from &quot;exec&quot; to &quot;state&quot;.
2. Pass parameters by references instead of pointers if the parameters are required.
3. Remove the word &quot;get&quot; from the names of functions that don&apos;t return values through out arguments.

This should make future Intl patches smaller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143628</commentid>
    <comment_count>1</comment_count>
      <attachid>265950</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-11-20 05:23:22 -0800</bug_when>
    <thetext>Created attachment 265950
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143655</commentid>
    <comment_count>2</comment_count>
      <attachid>265950</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-11-20 09:09:28 -0800</bug_when>
    <thetext>Comment on attachment 265950
Patch

Hmmm, I know Darin said to use &quot;state&quot; instead of &quot;exec&quot; for the ExecState*, but I wonder if we should do that.  Using &quot;exec&quot; to mean &quot;ExecState*&quot; is universally practiced in JSC code.  Changing to use &quot;state&quot; in just some places would actually make it harder to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143870</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-20 15:56:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Hmmm, I know Darin said to use &quot;state&quot; instead of &quot;exec&quot; for the ExecState*,
&gt; but I wonder if we should do that.  Using &quot;exec&quot; to mean &quot;ExecState*&quot; is
&gt; universally practiced in JSC code.  Changing to use &quot;state&quot; in just some
&gt; places would actually make it harder to read.

If you look you will see that we are starting to change &quot;exec&quot; to &quot;state&quot; in much new code, at least in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143884</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-11-20 16:20:37 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Hmmm, I know Darin said to use &quot;state&quot; instead of &quot;exec&quot; for the ExecState*,
&gt; &gt; but I wonder if we should do that.  Using &quot;exec&quot; to mean &quot;ExecState*&quot; is
&gt; &gt; universally practiced in JSC code.  Changing to use &quot;state&quot; in just some
&gt; &gt; places would actually make it harder to read.
&gt; 
&gt; If you look you will see that we are starting to change &quot;exec&quot; to &quot;state&quot; in
&gt; much new code, at least in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143888</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-11-20 16:22:08 -0800</bug_when>
    <thetext>Sigh ... such a rookie mistake (clicked Save before adding comment) ...

(In reply to comment #3)
&gt; If you look you will see that we are starting to change &quot;exec&quot; to &quot;state&quot; in
&gt; much new code, at least in WebCore.

OK.  I&apos;m good with this if this is the new direction we&apos;re taking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143916</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-20 18:30:18 -0800</bug_when>
    <thetext>There might be people who don’t agree with me, but I think it’s a good change that we should eventually do everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143932</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-20 19:48:56 -0800</bug_when>
    <thetext>My vote would be to rename all ExecState to CallFrame.
And we have a natural name for the variable:
(CallFrame* callFrame)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144945</commentid>
    <comment_count>8</comment_count>
      <attachid>265950</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-30 14:21:31 -0800</bug_when>
    <thetext>Comment on attachment 265950
Patch

Clearing flags on attachment: 265950

Committed r192831: &lt;http://trac.webkit.org/changeset/192831&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144946</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-30 14:21:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265950</attachid>
            <date>2015-11-20 05:23:22 -0800</date>
            <delta_ts>2015-11-30 14:21:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151491-20151120052429.patch</filename>
            <type>text/plain</type>
            <size>60980</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMDk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
YjIxZjdhZjhmMzM3YTI4ODdkZmU3OTYyOWNkMWNlNmY3MGI4YzZlLi5iZTUwZWVjOGUzOGNjMWNl
NTI3NWE0YjgxMWUwZTRkNmI0M2YzMTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NSBAQAorMjAxNS0xMS0yMCAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBGaXggY29kaW5nIHN0eWxlIG9mIEludGwgY29kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDkxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2Vz
IHRocmVlIHRoaW5nczoKKyAgICAgICAgMS4gUmVuYW1lIHBvaW50ZXJzIGFuZCByZWZlcmVuY2Vz
IHRvIEV4ZWNTdGF0ZSBmcm9tICJleGVjIiB0byAic3RhdGUiLgorICAgICAgICAyLiBQYXNzIHBh
cmFtZXRlcnMgYnkgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzIGlmIHRoZSBwYXJhbWV0
ZXJzCisgICAgICAgICAgIGFyZSByZXF1aXJlZC4KKyAgICAgICAgMy4gUmVtb3ZlIHRoZSB3b3Jk
ICJnZXQiIGZyb20gdGhlIG5hbWVzIG9mIGZ1bmN0aW9ucyB0aGF0IGRvbid0IHJldHVybgorICAg
ICAgICAgICB2YWx1ZXMgdGhyb3VnaCBvdXQgYXJndW1lbnRzLgorCisgICAgICAgICogcnVudGlt
ZS9JbnRsQ29sbGF0b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0b3JGdW5jQ29tcGFy
ZSk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmluaXRpYWxpemVDb2xsYXRvcik6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdElu
dGxDb2xsYXRvcik6CisgICAgICAgIChKU0M6OmNhbGxJbnRsQ29sbGF0b3IpOgorICAgICAgICAo
SlNDOjpJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQzo6SW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToK
KyAgICAgICAgKiBydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHA6CisgICAgICAgIChKU0M6
OkludGxEYXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZSk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0
cnVjdEludGxEYXRlVGltZUZvcm1hdCk6CisgICAgICAgIChKU0M6OmNhbGxJbnRsRGF0ZVRpbWVG
b3JtYXQpOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcjo6Z2V0
T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToKKyAgICAgICAgKiBydW50aW1lL0ludGxEYXRl
VGltZUZvcm1hdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1h
dFByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SW50bERhdGVU
aW1lRm9ybWF0UHJvdG90eXBlR2V0dGVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bERhdGVU
aW1lRm9ybWF0UHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucyk6CisgICAgICAgICogcnVudGlt
ZS9JbnRsTnVtYmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdEZ1
bmNGb3JtYXROdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SW50bE51bWJlckZvcm1hdCk6Cisg
ICAgICAgIChKU0M6OmNhbGxJbnRsTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bE51
bWJlckZvcm1hdENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
OjpJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToKKyAg
ICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAg
ICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlR2V0dGVyRm9ybWF0KToKKyAgICAg
ICAgKEpTQzo6SW50bE51bWJlckZvcm1hdFByb3RvdHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMpOgor
ICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmludGxCb29s
ZWFuT3B0aW9uKToKKyAgICAgICAgKEpTQzo6aW50bFN0cmluZ09wdGlvbik6CisgICAgICAgIChK
U0M6OnByaXZhdGVVc2VMYW5nVGFnKToKKyAgICAgICAgKEpTQzo6Y2Fub25pY2FsTGFuZ1RhZyk6
CisgICAgICAgIChKU0M6OmdyYW5kZmF0aGVyZWRMYW5nVGFnKToKKyAgICAgICAgKEpTQzo6Y2Fu
b25pY2FsaXplTGFuZ3VhZ2VUYWcpOgorICAgICAgICAoSlNDOjpjYW5vbmljYWxpemVMb2NhbGVM
aXN0KToKKyAgICAgICAgKEpTQzo6bG9va3VwU3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAgIChK
U0M6OmJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVzKToKKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9j
YWxlcyk6CisgICAgICAgIChKU0M6OmdldEludGxCb29sZWFuT3B0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Z2V0SW50bFN0cmluZ09wdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OmdldFByaXZhdGVVc2VMYW5nVGFnKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Z2V0Q2Fub25p
Y2FsTGFuZ1RhZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmdldEdyYW5kZmF0aGVyZWRMYW5n
VGFnKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0ludGxPYmplY3QuaDoKKwogMjAxNS0x
MS0wNSAgTmlrb3MgQW5kcm9uaWtvcyAgPG5pa29zLmFuZHJvbmlrb3Mtd2Via2l0QGNpc3JhLmNh
bm9uLmNvbS5hdT4KIAogICAgICAgICBBZGQgcnVudGltZSBhbmQgY29tcGlsZSB0aW1lIGZsYWdz
IGZvciBlbmFibGluZyBXZWIgQW5pbWF0aW9ucyBBUEkgYW5kIG1vZGVsLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKaW5kZXggOTgxMDhmYzE4NTk4
ZDNlMmM3YWQ4OWUwY2YxZjg4ZDRlNWExMWVjOS4uNzljNTIzYzY1Yjk5YTk2YTkzZDNjNWE2Mjky
NGExZmI1MGJlNjFhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bENvbGxhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
Q29sbGF0b3IuY3BwCkBAIC04NCwyOCArODQsMjggQEAgdm9pZCBJbnRsQ29sbGF0b3I6OnNldEJv
dW5kQ29tcGFyZShWTSYgdm0sIEpTQm91bmRGdW5jdGlvbiogZm9ybWF0KQogICAgIG1fYm91bmRD
b21wYXJlLnNldCh2bSwgdGhpcywgZm9ybWF0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBJbnRsQ29sbGF0b3JGdW5jQ29tcGFyZShFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvckZ1bmNDb21wYXJlKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgLy8gMTAuMy40IENvbGxhdG9yIENvbXBhcmUgRnVuY3Rpb25zIChFQ01B
LTQwMiAyLjApCiAgICAgLy8gMS4gTGV0IGNvbGxhdG9yIGJlIHRoZSB0aGlzIHZhbHVlLgotICAg
IEludGxDb2xsYXRvciogY29sbGF0b3IgPSBqc0R5bmFtaWNDYXN0PEludGxDb2xsYXRvcio+KGV4
ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yID0ganNEeW5hbWlj
Q2FzdDxJbnRsQ29sbGF0b3IqPihzdGF0ZS0+dGhpc1ZhbHVlKCkpOwogCiAgICAgLy8gMi4gQXNz
ZXJ0OiBUeXBlKGNvbGxhdG9yKSBpcyBPYmplY3QgYW5kIGNvbGxhdG9yIGhhcyBhbiBbW2luaXRp
YWxpemVkQ29sbGF0b3JdXSBpbnRlcm5hbCBzbG90IHdob3NlIHZhbHVlIGlzIHRydWUuCiAgICAg
aWYgKCFjb2xsYXRvcikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVF
cnJvcihleGVjKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJy
b3Ioc3RhdGUpKTsKIAogICAgIC8vIDMuIElmIHggaXMgbm90IHByb3ZpZGVkLCBsZXQgeCBiZSB1
bmRlZmluZWQuCiAgICAgLy8gNC4gSWYgeSBpcyBub3QgcHJvdmlkZWQsIGxldCB5IGJlIHVuZGVm
aW5lZC4KICAgICAvLyA1LiBMZXQgWCBiZSBUb1N0cmluZyh4KS4KLSAgICBKU1N0cmluZyogYSA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIEpTU3RyaW5nKiBhID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKTsKICAgICAvLyA2LiBSZXR1cm5JZkFicnVw
dChYKS4KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIC8vIDcuIExldCBZIGJlIFRvU3RyaW5nKHkpLgotICAgIEpTU3RyaW5nKiBiID0g
ZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgSlNTdHJpbmcqIGIgPSBzdGF0
ZS0+YXJndW1lbnQoMSkudG9TdHJpbmcoc3RhdGUpOwogICAgIC8vIDguIFJldHVybklmQWJydXB0
KFkpLgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgLy8gOS4gUmV0dXJuIENvbXBhcmVTdHJpbmdzKGNvbGxhdG9yLCBYLCBZKS4KQEAg
LTExNCw3ICsxMTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRv
ckZ1bmNDb21wYXJlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IENv
bXBhcmVTdHJpbmdzLgogCiAgICAgLy8gUmV0dXJuIHNpbXBsZSBjaGVjayB1bnRpbCBwcm9wZXJs
eSBpbXBsZW1lbnRlZC4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGNvZGVQ
b2ludENvbXBhcmUoYS0+dmFsdWUoZXhlYykuaW1wbCgpLCBiLT52YWx1ZShleGVjKS5pbXBsKCkp
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihjb2RlUG9pbnRDb21wYXJl
KGEtPnZhbHVlKHN0YXRlKS5pbXBsKCksIGItPnZhbHVlKHN0YXRlKS5pbXBsKCkpKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCmluZGV4IDRlMjc1MGEzZjY5MTI0
NGRlNzdlMDUwYWFkMWQ3ZmMyZjYxNjIyNjcuLjE1OTgyNTA5NTA3ZTdhMWZkZWFkYjZmZjRlNDA0
Y2U0N2ExNzU0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAKQEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0
aWMgVmVjdG9yPFN0cmluZz4gc2VhcmNoTG9jYWxlRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGtleSkKICAgICByZXR1cm4ga2V5TG9jYWxlRGF0YTsKIH0KIAotc3RhdGljIEludGxD
b2xsYXRvciogaW5pdGlhbGl6ZUNvbGxhdG9yKEV4ZWNTdGF0ZSogZXhlYywgSW50bENvbGxhdG9y
KiBjb2xsYXRvciwgSlNWYWx1ZSBsb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkKK3N0YXRp
YyBJbnRsQ29sbGF0b3IqIGluaXRpYWxpemVDb2xsYXRvcihFeGVjU3RhdGUmIHN0YXRlLCBJbnRs
Q29sbGF0b3ImIGNvbGxhdG9yLCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1ZhbHVl
KQogewogICAgIC8vIDEwLjEuMSBJbml0aWFsaXplQ29sbGF0b3IgKGNvbGxhdG9yLCBsb2NhbGVz
LCBvcHRpb25zKSAoRUNNQS00MDIgMi4wKQogCkBAIC0xMjgsMzIgKzEyOCwzMiBAQCBzdGF0aWMg
SW50bENvbGxhdG9yKiBpbml0aWFsaXplQ29sbGF0b3IoRXhlY1N0YXRlKiBleGVjLCBJbnRsQ29s
bGF0b3IqIGNvbGxhdG9yLAogICAgIC8vIDIuIFNldCBjb2xsYXRvci5bW2luaXRpYWxpemVkSW50
bE9iamVjdF1dIHRvIHRydWUuCiAKICAgICAvLyAzLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBD
YW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgotICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVl
c3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGV4ZWMsIGxvY2FsZXMpOworICAg
IFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0
KHN0YXRlLCBsb2NhbGVzKTsKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2Nh
bGVzKS4KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIDUuIElmIG9wdGlv
bnMgaXMgdW5kZWZpbmVkLCB0aGVuCiAgICAgSlNPYmplY3QqIG9wdGlvbnM7CiAgICAgaWYgKG9w
dGlvbnNWYWx1ZS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIC8vIGEuIExldCBvcHRpb25zIGJl
IE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCi0gICAgICAgIG9wdGlvbnMgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAgICAgb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KCZzdGF0ZSk7CiAgICAgfSBlbHNlIHsgLy8gNi4gRWxzZQogICAgICAgICAvLyBhLiBM
ZXQgb3B0aW9ucyBiZSBUb09iamVjdChvcHRpb25zKS4KLSAgICAgICAgb3B0aW9ucyA9IG9wdGlv
bnNWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNWYWx1ZS50
b09iamVjdCgmc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4K
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICAv
LyA3LiBMZXQgdSBiZSBHZXRPcHRpb24ob3B0aW9ucywgInVzYWdlIiwgInN0cmluZyIsIMKrInNv
cnQiLCAic2VhcmNoIsK7LCAic29ydCIpLgogICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiB1c2Fn
ZXMoeyBBU0NJSUxpdGVyYWwoInNvcnQiKSwgQVNDSUlMaXRlcmFsKCJzZWFyY2giKSB9KTsKLSAg
ICBTdHJpbmcgdXNhZ2UgPSBnZXRJbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIGV4ZWMt
PnZtKCkucHJvcGVydHlOYW1lcy0+dXNhZ2UsIHVzYWdlcywgInVzYWdlIG11c3QgYmUgZWl0aGVy
IFwic29ydFwiIG9yIFwic2VhcmNoXCIiLCBBU0NJSUxpdGVyYWwoInNvcnQiKSk7CisgICAgU3Ry
aW5nIHVzYWdlID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5w
cm9wZXJ0eU5hbWVzLT51c2FnZSwgdXNhZ2VzLCAidXNhZ2UgbXVzdCBiZSBlaXRoZXIgXCJzb3J0
XCIgb3IgXCJzZWFyY2hcIiIsIEFTQ0lJTGl0ZXJhbCgic29ydCIpKTsKICAgICAvLyA4LiBSZXR1
cm5JZkFicnVwdCh1KS4KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAvLyA5LiBT
ZXQgY29sbGF0b3IuW1t1c2FnZV1dIHRvIHUuCi0gICAgY29sbGF0b3ItPnNldFVzYWdlKHVzYWdl
KTsKKyAgICBjb2xsYXRvci5zZXRVc2FnZSh1c2FnZSk7CiAKICAgICAvLyAxMC4gSWYgdSBpcyAi
c29ydCIsIHRoZW4KICAgICAvLyBhLiBMZXQgbG9jYWxlRGF0YSBiZSB0aGUgdmFsdWUgb2YgJUNv
bGxhdG9yJS5bW3NvcnRMb2NhbGVEYXRhXV07CkBAIC0xNzAsOSArMTcwLDkgQEAgc3RhdGljIElu
dGxDb2xsYXRvciogaW5pdGlhbGl6ZUNvbGxhdG9yKEV4ZWNTdGF0ZSogZXhlYywgSW50bENvbGxh
dG9yKiBjb2xsYXRvciwKIAogICAgIC8vIDEzLiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24ob3B0
aW9ucywgImxvY2FsZU1hdGNoZXIiLCAic3RyaW5nIiwgwqsibG9va3VwIiwgImJlc3QgZml0IsK7
LCAiYmVzdCBmaXQiKS4KICAgICBjb25zdCBIYXNoU2V0PFN0cmluZz4gbWF0Y2hlcnMoeyBBU0NJ
SUxpdGVyYWwoImxvb2t1cCIpLCBBU0NJSUxpdGVyYWwoImJlc3QgZml0IikgfSk7Ci0gICAgU3Ry
aW5nIG1hdGNoZXIgPSBnZXRJbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIGV4ZWMtPnZt
KCkucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgbWF0Y2hlcnMsICJsb2NhbGVNYXRjaGVy
IG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgQVNDSUlMaXRlcmFs
KCJiZXN0IGZpdCIpKTsKKyAgICBTdHJpbmcgbWF0Y2hlciA9IGludGxTdHJpbmdPcHRpb24oc3Rh
dGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgbWF0
Y2hlcnMsICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0
IGZpdFwiIiwgQVNDSUlMaXRlcmFsKCJiZXN0IGZpdCIpKTsKICAgICAvLyAxNC4gUmV0dXJuSWZB
YnJ1cHQobWF0Y2hlcikuCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8gMTUu
IFNldCBvcHQuW1tsb2NhbGVNYXRjaGVyXV0gdG8gbWF0Y2hlci4KICAgICBvcHQuc2V0KEFTQ0lJ
TGl0ZXJhbCgibG9jYWxlTWF0Y2hlciIpLCBtYXRjaGVyKTsKQEAgLTE5MSw4ICsxOTEsOCBAQCBz
dGF0aWMgSW50bENvbGxhdG9yKiBpbml0aWFsaXplQ29sbGF0b3IoRXhlY1N0YXRlKiBleGVjLCBJ
bnRsQ29sbGF0b3IqIGNvbGxhdG9yLAogICAgIHsKICAgICAgICAgU3RyaW5nIG51bWVyaWNTdHJp
bmc7CiAgICAgICAgIGJvb2wgdXNlc0ZhbGxiYWNrOwotICAgICAgICBib29sIG51bWVyaWMgPSBn
ZXRJbnRsQm9vbGVhbk9wdGlvbihleGVjLCBvcHRpb25zLCBleGVjLT52bSgpLnByb3BlcnR5TmFt
ZXMtPm51bWVyaWMsIHVzZXNGYWxsYmFjayk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgYm9vbCBudW1lcmljID0gaW50bEJvb2xlYW5PcHRpb24oc3RhdGUsIG9w
dGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+bnVtZXJpYywgdXNlc0ZhbGxiYWNrKTsK
KyAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIGlmICghdXNlc0ZhbGxiYWNrKQogICAgICAgICAgICAgbnVtZXJpY1N0
cmluZyA9IEFTQ0lJTGl0ZXJhbChudW1lcmljID8gInRydWUiIDogImZhbHNlIik7CkBAIC0yMDAs
OCArMjAwLDggQEAgc3RhdGljIEludGxDb2xsYXRvciogaW5pdGlhbGl6ZUNvbGxhdG9yKEV4ZWNT
dGF0ZSogZXhlYywgSW50bENvbGxhdG9yKiBjb2xsYXRvciwKICAgICB9CiAgICAgewogICAgICAg
ICBjb25zdCBIYXNoU2V0PFN0cmluZz4gY2FzZUZpcnN0cyh7IEFTQ0lJTGl0ZXJhbCgidXBwZXIi
KSwgQVNDSUlMaXRlcmFsKCJsb3dlciIpLCBBU0NJSUxpdGVyYWwoImZhbHNlIikgfSk7Ci0gICAg
ICAgIFN0cmluZyBjYXNlRmlyc3QgPSBnZXRJbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMs
IGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+Y2FzZUZpcnN0LCBjYXNlRmlyc3RzLCAiY2FzZUZp
cnN0IG11c3QgYmUgZWl0aGVyIFwidXBwZXJcIiwgXCJsb3dlclwiLCBvciBcImZhbHNlXCIiLCBT
dHJpbmcoKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgU3Ry
aW5nIGNhc2VGaXJzdCA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHN0YXRlLnZt
KCkucHJvcGVydHlOYW1lcy0+Y2FzZUZpcnN0LCBjYXNlRmlyc3RzLCAiY2FzZUZpcnN0IG11c3Qg
YmUgZWl0aGVyIFwidXBwZXJcIiwgXCJsb3dlclwiLCBvciBcImZhbHNlXCIiLCBTdHJpbmcoKSk7
CisgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICBvcHQuc2V0KEFTQ0lJTGl0ZXJhbCgia2YiKSwgY2FzZUZpcnN0KTsK
ICAgICB9CkBAIC0yMTEsMTEgKzIxMSwxMSBAQCBzdGF0aWMgSW50bENvbGxhdG9yKiBpbml0aWFs
aXplQ29sbGF0b3IoRXhlY1N0YXRlKiBleGVjLCBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yLAogICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+IHJlbGV2YW50RXh0ZW5zaW9uS2V5cyB7IEFTQ0lJTGl0ZXJh
bCgiY28iKSwgQVNDSUlMaXRlcmFsKCJrbiIpIH07CiAKICAgICAvLyAxOC4gTGV0IHIgYmUgUmVz
b2x2ZUxvY2FsZSglQ29sbGF0b3IlLltbYXZhaWxhYmxlTG9jYWxlc11dLCByZXF1ZXN0ZWRMb2Nh
bGVzLCBvcHQsIHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgbG9jYWxlRGF0YSkuCi0gICAgY29uc3Qg
SGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gZXhlYy0+Y2FsbGVlKCktPmdsb2Jh
bE9iamVjdCgpLT5pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7CisgICAgY29uc3QgSGFz
aFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzID0gc3RhdGUuY2FsbGVlKCktPmdsb2JhbE9i
amVjdCgpLT5pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCk7CiAgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gcmVzdWx0ID0gcmVzb2x2ZUxvY2FsZShhdmFpbGFibGVMb2NhbGVzLCByZXF1
ZXN0ZWRMb2NhbGVzLCBvcHQsIHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgbG9jYWxlRGF0YSk7CiAK
ICAgICAvLyAxOS4gU2V0IGNvbGxhdG9yLltbbG9jYWxlXV0gdG8gdGhlIHZhbHVlIG9mIHIuW1ts
b2NhbGVdXS4KLSAgICBjb2xsYXRvci0+c2V0TG9jYWxlKHJlc3VsdC5nZXQoQVNDSUlMaXRlcmFs
KCJsb2NhbGUiKSkpOworICAgIGNvbGxhdG9yLnNldExvY2FsZShyZXN1bHQuZ2V0KEFTQ0lJTGl0
ZXJhbCgibG9jYWxlIikpKTsKIAogICAgIC8vIDIwLiBMZXQgayBiZSAwLgogICAgIC8vIDIxLiBM
ZXQgbGVuVmFsdWUgYmUgR2V0KHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgImxlbmd0aCIpLgpAQCAt
MjM4LDE5ICsyMzgsMTkgQEAgc3RhdGljIEludGxDb2xsYXRvciogaW5pdGlhbGl6ZUNvbGxhdG9y
KEV4ZWNTdGF0ZSogZXhlYywgSW50bENvbGxhdG9yKiBjb2xsYXRvciwKICAgICB7CiAgICAgICAg
IEFTU0VSVChyZWxldmFudEV4dGVuc2lvbktleXNbMF0gPT0gImNvIik7CiAgICAgICAgIGNvbnN0
IFN0cmluZyYgdmFsdWUgPSByZXN1bHQuZ2V0KEFTQ0lJTGl0ZXJhbCgiY28iKSk7Ci0gICAgICAg
IGNvbGxhdG9yLT5zZXRDb2xsYXRpb24odmFsdWUuaXNOdWxsKCkgPyBBU0NJSUxpdGVyYWwoImRl
ZmF1bHQiKSA6IHZhbHVlKTsKKyAgICAgICAgY29sbGF0b3Iuc2V0Q29sbGF0aW9uKHZhbHVlLmlz
TnVsbCgpID8gQVNDSUlMaXRlcmFsKCJkZWZhdWx0IikgOiB2YWx1ZSk7CiAgICAgfQogICAgIHsK
ICAgICAgICAgQVNTRVJUKHJlbGV2YW50RXh0ZW5zaW9uS2V5c1sxXSA9PSAia24iKTsKICAgICAg
ICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IHJlc3VsdC5nZXQoQVNDSUlMaXRlcmFsKCJrbiIpKTsK
LSAgICAgICAgY29sbGF0b3ItPnNldE51bWVyaWModmFsdWUgPT0gInRydWUiKTsKKyAgICAgICAg
Y29sbGF0b3Iuc2V0TnVtZXJpYyh2YWx1ZSA9PSAidHJ1ZSIpOwogICAgIH0KIAogICAgIC8vIDI0
LiBMZXQgcyBiZSBHZXRPcHRpb24ob3B0aW9ucywgInNlbnNpdGl2aXR5IiwgInN0cmluZyIsIMKr
ImJhc2UiLCAiYWNjZW50IiwgImNhc2UiLCAidmFyaWFudCLCuywgdW5kZWZpbmVkKS4KICAgICBj
b25zdCBIYXNoU2V0PFN0cmluZz4gc2Vuc2l0aXZpdGllcyh7IEFTQ0lJTGl0ZXJhbCgiYmFzZSIp
LCBBU0NJSUxpdGVyYWwoImFjY2VudCIpLCBBU0NJSUxpdGVyYWwoImNhc2UiKSwgQVNDSUlMaXRl
cmFsKCJ2YXJpYW50IikgfSk7Ci0gICAgU3RyaW5nIHNlbnNpdGl2aXR5ID0gZ2V0SW50bFN0cmlu
Z09wdGlvbihleGVjLCBvcHRpb25zLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnNlbnNpdGl2
aXR5LCBzZW5zaXRpdml0aWVzLCAic2Vuc2l0aXZpdHkgbXVzdCBiZSBlaXRoZXIgXCJiYXNlXCIs
IFwiYWNjZW50XCIsIFwiY2FzZVwiLCBvciBcInZhcmlhbnRcIiIsIFN0cmluZygpKTsKKyAgICBT
dHJpbmcgc2Vuc2l0aXZpdHkgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBzdGF0
ZS52bSgpLnByb3BlcnR5TmFtZXMtPnNlbnNpdGl2aXR5LCBzZW5zaXRpdml0aWVzLCAic2Vuc2l0
aXZpdHkgbXVzdCBiZSBlaXRoZXIgXCJiYXNlXCIsIFwiYWNjZW50XCIsIFwiY2FzZVwiLCBvciBc
InZhcmlhbnRcIiIsIFN0cmluZygpKTsKICAgICAvLyAyNS4gUmV0dXJuSWZBYnJ1cHQocykuCi0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8gMjYuIElmIHMgaXMgdW5kZWZpbmVk
LCB0aGVuCiAgICAgaWYgKHNlbnNpdGl2aXR5LmlzTnVsbCgpKSB7CkBAIC0yNjcsMjMgKzI2Nywy
MyBAQCBzdGF0aWMgSW50bENvbGxhdG9yKiBpbml0aWFsaXplQ29sbGF0b3IoRXhlY1N0YXRlKiBl
eGVjLCBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yLAogICAgICAgICB9CiAgICAgfQogICAgIC8vIDI3
LiBTZXQgY29sbGF0b3IuW1tzZW5zaXRpdml0eV1dIHRvIHMuCi0gICAgY29sbGF0b3ItPnNldFNl
bnNpdGl2aXR5KHNlbnNpdGl2aXR5KTsKKyAgICBjb2xsYXRvci5zZXRTZW5zaXRpdml0eShzZW5z
aXRpdml0eSk7CiAKICAgICAvLyAyOC4gTGV0IGlwIGJlIEdldE9wdGlvbihvcHRpb25zLCAiaWdu
b3JlUHVuY3R1YXRpb24iLCAiYm9vbGVhbiIsIHVuZGVmaW5lZCwgZmFsc2UpLgogICAgIGJvb2wg
dXNlc0ZhbGxiYWNrOwotICAgIGJvb2wgaWdub3JlUHVuY3R1YXRpb24gPSBnZXRJbnRsQm9vbGVh
bk9wdGlvbihleGVjLCBvcHRpb25zLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmlnbm9yZVB1
bmN0dWF0aW9uLCB1c2VzRmFsbGJhY2spOworICAgIGJvb2wgaWdub3JlUHVuY3R1YXRpb24gPSBp
bnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVz
LT5pZ25vcmVQdW5jdHVhdGlvbiwgdXNlc0ZhbGxiYWNrKTsKICAgICBpZiAodXNlc0ZhbGxiYWNr
KQogICAgICAgICBpZ25vcmVQdW5jdHVhdGlvbiA9IGZhbHNlOwogICAgIC8vIDI5LiBSZXR1cm5J
ZkFicnVwdChpcCkuCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgLy8gMzAuIFNl
dCBjb2xsYXRvci5bW2lnbm9yZVB1bmN0dWF0aW9uXV0gdG8gaXAuCi0gICAgY29sbGF0b3ItPnNl
dElnbm9yZVB1bmN0dWF0aW9uKGlnbm9yZVB1bmN0dWF0aW9uKTsKKyAgICBjb2xsYXRvci5zZXRJ
Z25vcmVQdW5jdHVhdGlvbihpZ25vcmVQdW5jdHVhdGlvbik7CiAKICAgICAvLyAzMS4gU2V0IGNv
bGxhdG9yLltbYm91bmRDb21wYXJlXV0gdG8gdW5kZWZpbmVkLgogICAgIC8vIDMyLiBTZXQgY29s
bGF0b3IuW1tpbml0aWFsaXplZENvbGxhdG9yXV0gdG8gdHJ1ZS4KICAgICAvLyAzMy4gUmV0dXJu
IGNvbGxhdG9yLgotICAgIHJldHVybiBjb2xsYXRvcjsKKyAgICByZXR1cm4gJmNvbGxhdG9yOwog
fQogCiBJbnRsQ29sbGF0b3JDb25zdHJ1Y3RvciogSW50bENvbGxhdG9yQ29uc3RydWN0b3I6OmNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBJbnRsQ29sbGF0b3JQcm90b3R5cGUq
IGNvbGxhdG9yUHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGNvbGxhdG9yU3RydWN0dXJlKQpAQCAtMzEx
LDQ4ICszMTEsNDggQEAgdm9pZCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBJbnRsQ29sbGF0b3JQcm90b3R5cGUqIGNvbGwKICAgICBtX2NvbGxhdG9yU3Ry
dWN0dXJlLnNldCh2bSwgdGhpcywgY29sbGF0b3JTdHJ1Y3R1cmUpOwogfQogCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsQ29sbGF0b3IoRXhlY1N0YXRl
KiBleGVjKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW50
bENvbGxhdG9yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgLy8gMTAuMS4yIEludGwuQ29sbGF0
b3IgKFtsb2NhbGVzIFssIG9wdGlvbnNdXSkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBJZiBO
ZXdUYXJnZXQgaXMgdW5kZWZpbmVkLCBsZXQgbmV3VGFyZ2V0IGJlIHRoZSBhY3RpdmUgZnVuY3Rp
b24gb2JqZWN0LCBlbHNlIGxldCBuZXdUYXJnZXQgYmUgTmV3VGFyZ2V0LgotICAgIEpTVmFsdWUg
bmV3VGFyZ2V0ID0gZXhlYy0+bmV3VGFyZ2V0KCk7CisgICAgSlNWYWx1ZSBuZXdUYXJnZXQgPSBz
dGF0ZS0+bmV3VGFyZ2V0KCk7CiAgICAgaWYgKG5ld1RhcmdldC5pc1VuZGVmaW5lZCgpKQotICAg
ICAgICBuZXdUYXJnZXQgPSBleGVjLT5jYWxsZWUoKTsKKyAgICAgICAgbmV3VGFyZ2V0ID0gc3Rh
dGUtPmNhbGxlZSgpOwogCiAgICAgLy8gMi4gTGV0IGNvbGxhdG9yIGJlIE9yZGluYXJ5Q3JlYXRl
RnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwgJUNvbGxhdG9yUHJvdG90eXBlJSkuCi0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yID0gSW50bENvbGxh
dG9yOjpjcmVhdGUodm0sIGpzQ2FzdDxJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNh
bGxlZSgpKSk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgSW50bENvbGxhdG9yKiBj
b2xsYXRvciA9IEludGxDb2xsYXRvcjo6Y3JlYXRlKHZtLCBqc0Nhc3Q8SW50bENvbGxhdG9yQ29u
c3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpKTsKICAgICBpZiAoY29sbGF0b3IgJiYgIWpzRHlu
YW1pY0Nhc3Q8SW50bENvbGxhdG9yQ29uc3RydWN0b3IqPihuZXdUYXJnZXQpKSB7CiAgICAgICAg
IEpTVmFsdWUgcHJvdG8gPSBhc09iamVjdChuZXdUYXJnZXQpLT5nZXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7Ci0gICAgICAgIGFzT2JqZWN0KGNvbGxhdG9yKS0+c2V0
UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soZXhlYywgcHJvdG8pOworICAgICAgICBhc09iamVjdChj
b2xsYXRvciktPnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKHN0YXRlLCBwcm90byk7CiAgICAg
fQogCiAgICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoY29sbGF0b3IpLgogICAgIEFTU0VSVChjb2xs
YXRvcik7CiAKICAgICAvLyA0LiBSZXR1cm4gSW5pdGlhbGl6ZUNvbGxhdG9yKGNvbGxhdG9yLCBs
b2NhbGVzLCBvcHRpb25zKS4KLSAgICBKU1ZhbHVlIGxvY2FsZXMgPSBleGVjLT5hcmd1bWVudCgw
KTsKLSAgICBKU1ZhbHVlIG9wdGlvbnMgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemVDb2xsYXRvcihleGVjLCBjb2xsYXRvciwgbG9jYWxl
cywgb3B0aW9ucykpOworICAgIEpTVmFsdWUgbG9jYWxlcyA9IHN0YXRlLT5hcmd1bWVudCgwKTsK
KyAgICBKU1ZhbHVlIG9wdGlvbnMgPSBzdGF0ZS0+YXJndW1lbnQoMSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShpbml0aWFsaXplQ29sbGF0b3IoKnN0YXRlLCAqY29sbGF0b3IsIGxvY2Fs
ZXMsIG9wdGlvbnMpKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEludGxDb2xsYXRvcihFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsSW50bENvbGxhdG9yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
Ly8gMTAuMS4yIEludGwuQ29sbGF0b3IgKFtsb2NhbGVzIFssIG9wdGlvbnNdXSkgKEVDTUEtNDAy
IDIuMCkKICAgICAvLyAxLiBJZiBOZXdUYXJnZXQgaXMgdW5kZWZpbmVkLCBsZXQgbmV3VGFyZ2V0
IGJlIHRoZSBhY3RpdmUgZnVuY3Rpb24gb2JqZWN0LCBlbHNlIGxldCBuZXdUYXJnZXQgYmUgTmV3
VGFyZ2V0LgogICAgIC8vIE5ld1RhcmdldCBpcyBhbHdheXMgdW5kZWZpbmVkIHdoZW4gY2FsbGVk
IGFzIGEgZnVuY3Rpb24uCiAKICAgICAvLyAyLiBMZXQgY29sbGF0b3IgYmUgT3JkaW5hcnlDcmVh
dGVGcm9tQ29uc3RydWN0b3IobmV3VGFyZ2V0LCAlQ29sbGF0b3JQcm90b3R5cGUlKS4KLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIEludGxDb2xsYXRvciogY29sbGF0b3IgPSBJbnRsQ29s
bGF0b3I6OmNyZWF0ZSh2bSwganNDYXN0PEludGxDb2xsYXRvckNvbnN0cnVjdG9yKj4oZXhlYy0+
Y2FsbGVlKCkpKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBJbnRsQ29sbGF0b3Iq
IGNvbGxhdG9yID0gSW50bENvbGxhdG9yOjpjcmVhdGUodm0sIGpzQ2FzdDxJbnRsQ29sbGF0b3JD
b25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSkpOwogCiAgICAgLy8gMy4gUmV0dXJuSWZBYnJ1
cHQoY29sbGF0b3IpLgogICAgIEFTU0VSVChjb2xsYXRvcik7CiAKICAgICAvLyA0LiBSZXR1cm4g
SW5pdGlhbGl6ZUNvbGxhdG9yKGNvbGxhdG9yLCBsb2NhbGVzLCBvcHRpb25zKS4KLSAgICBKU1Zh
bHVlIGxvY2FsZXMgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICBKU1ZhbHVlIG9wdGlvbnMgPSBl
eGVjLT5hcmd1bWVudCgxKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemVD
b2xsYXRvcihleGVjLCBjb2xsYXRvciwgbG9jYWxlcywgb3B0aW9ucykpOworICAgIEpTVmFsdWUg
bG9jYWxlcyA9IHN0YXRlLT5hcmd1bWVudCgwKTsKKyAgICBKU1ZhbHVlIG9wdGlvbnMgPSBzdGF0
ZS0+YXJndW1lbnQoMSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXplQ29s
bGF0b3IoKnN0YXRlLCAqY29sbGF0b3IsIGxvY2FsZXMsIG9wdGlvbnMpKTsKIH0KIAogQ29uc3Ry
dWN0VHlwZSBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwq
LCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtMzY3LDI1ICszNjcsMjUgQEAgQ2Fs
bFR5cGUgSW50bENvbGxhdG9yQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxE
YXRhJiBjYWxsRGF0YSkKICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQogCi1ib29sIEludGxD
b2xsYXRvckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCitib29sIEludGxDb2xsYXRvckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlv
blNsb3Q8SW50ZXJuYWxGdW5jdGlvbj4oZXhlYywgY29sbGF0b3JDb25zdHJ1Y3RvclRhYmxlLCBq
c0Nhc3Q8SW50bENvbGxhdG9yQ29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOworICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SW50ZXJuYWxGdW5jdGlvbj4o
c3RhdGUsIGNvbGxhdG9yQ29uc3RydWN0b3JUYWJsZSwganNDYXN0PEludGxDb2xsYXRvckNvbnN0
cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2Nh
bGVzT2YoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRs
Q29sbGF0b3JDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBzdGF0
ZSkKIHsKICAgICAvLyAxMC4yLjIgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YobG9j
YWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCByZXF1ZXN0
ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCi0gICAgVmVjdG9y
PFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCkpOworICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMg
PSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKIAog
ICAgIC8vIDIuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMy4gUmV0
dXJuIFN1cHBvcnRlZExvY2FsZXMoJUNvbGxhdG9yJS5bW2F2YWlsYWJsZUxvY2FsZXNdXSwgcmVx
dWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoZXhlYywgZ2xvYmFsT2JqZWN0LT5pbnRsQ29sbGF0b3JB
dmFpbGFibGVMb2NhbGVzKCksIHJlcXVlc3RlZExvY2FsZXMsIGV4ZWMtPmFyZ3VtZW50KDEpKSk7
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5jYWxsZWUoKS0+Z2xv
YmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVz
KCpzdGF0ZSwgZ2xvYmFsT2JqZWN0LT5pbnRsQ29sbGF0b3JBdmFpbGFibGVMb2NhbGVzKCksIHJl
cXVlc3RlZExvY2FsZXMsIHN0YXRlLT5hcmd1bWVudCgxKSkpOwogfQogCiB2b2lkIEludGxDb2xs
YXRvckNvbnN0cnVjdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0LmNwcAppbmRleCA3ODM5YmFkYzNhZTkwMzliZmFmZDA2ZmMwMWRkODIzY2Y4
ZGZmMjY0Li5kYzViMmFjZTMyNWIwOGI2ZjJmMzdiMjMxMDc2OTIwZTg4ZmNmMDI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5j
cHAKQEAgLTg2LDI4ICs4NiwyOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6c2V0Qm91bmRG
b3JtYXQoVk0mIHZtLCBKU0JvdW5kRnVuY3Rpb24qIGZvcm1hdCkKICAgICBtX2JvdW5kRm9ybWF0
LnNldCh2bSwgdGhpcywgZm9ybWF0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBJbnRsRGF0ZVRpbWVGb3JtYXRGdW5jRm9ybWF0RGF0ZVRpbWUoRXhlY1N0YXRlKiBleGVjKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRGdW5jRm9ybWF0
RGF0ZVRpbWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICAvLyAxMi4zLjQgRGF0ZVRpbWUgRm9y
bWF0IEZ1bmN0aW9ucyAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIExldCBkdGYgYmUgdGhlIHRo
aXMgdmFsdWUuCi0gICAgSW50bERhdGVUaW1lRm9ybWF0KiBmb3JtYXQgPSBqc0R5bmFtaWNDYXN0
PEludGxEYXRlVGltZUZvcm1hdCo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBJbnRsRGF0ZVRp
bWVGb3JtYXQqIGZvcm1hdCA9IGpzRHluYW1pY0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Kj4oc3Rh
dGUtPnRoaXNWYWx1ZSgpKTsKICAgICAvLyAyLiBBc3NlcnQ6IFR5cGUoZHRmKSBpcyBPYmplY3Qg
YW5kIGR0ZiBoYXMgYW4gW1tpbml0aWFsaXplZERhdGVUaW1lRm9ybWF0XV0gaW50ZXJuYWwgc2xv
dCB3aG9zZSB2YWx1ZSBpcyB0cnVlLgogICAgIGlmICghZm9ybWF0KQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihzdGF0ZSkpOwogCi0gICAgSlNWYWx1ZSBkYXRl
ID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgSlNWYWx1ZSBkYXRlID0gc3RhdGUtPmFyZ3VtZW50
KDApOwogICAgIGRvdWJsZSB2YWx1ZTsKIAogICAgIC8vIDMuIElmIGRhdGUgaXMgbm90IHByb3Zp
ZGVkIG9yIGlzIHVuZGVmaW5lZCwgdGhlbgogICAgIGlmIChkYXRlLmlzVW5kZWZpbmVkKCkpIHsK
ICAgICAgICAgLy8gYS4gTGV0IHggYmUgJURhdGVfbm93JSgpLgotICAgICAgICB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShkYXRlTm93KGV4ZWMpKS50b051bWJlcihleGVjKTsKKyAgICAgICAgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZGF0ZU5vdyhzdGF0ZSkpLnRvTnVtYmVyKHN0YXRlKTsKICAg
ICB9IGVsc2UgewogICAgICAgICAvLyA0LiBFbHNlCiAgICAgICAgIC8vIGEuIExldCB4IGJlIFRv
TnVtYmVyKGRhdGUpLgotICAgICAgICB2YWx1ZSA9IGRhdGUudG9OdW1iZXIoZXhlYyk7CisgICAg
ICAgIHZhbHVlID0gZGF0ZS50b051bWJlcihzdGF0ZSk7CiAgICAgICAgIC8vIGIuIFJldHVybklm
QWJydXB0KHgpLgotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTE3LDE1ICsxMTcsMTUgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRGdW5jRm9ybWF0RGF0ZVRp
bWUoRXhlY1N0YXRlKiBleGUKIAogICAgIC8vIDEuIElmIHggaXMgbm90IGEgZmluaXRlIE51bWJl
ciwgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgogICAgIGlmICghc3RkOjppc2Zp
bml0ZSh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dSYW5nZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiZGF0ZSB2YWx1ZSBpcyBub3QgZmluaXRlIGluIERhdGVU
aW1lRm9ybWF0LmZvcm1hdCgpIikpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1JhbmdlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiZGF0ZSB2YWx1ZSBpcyBub3QgZmlu
aXRlIGluIERhdGVUaW1lRm9ybWF0LmZvcm1hdCgpIikpKTsKIAogICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQgMiAtIDkKIAogICAgIC8vIFJldHVybiBuZXcgRGF0ZSh2YWx1ZSkudG9TdHJpbmcoKSB1
bnRpbCBwcm9wZXJseSBpbXBsZW1lbnRlZC4KLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHN0YXRlLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgRGF0ZUlu
c3RhbmNlKiBkID0gRGF0ZUluc3RhbmNlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+ZGF0ZVN0
cnVjdHVyZSgpLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGQp
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoZCku
dG9TdHJpbmcoc3RhdGUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRD
b25zdHJ1Y3Rvci5jcHAKaW5kZXggZjJkYTA1MTc1NGY2ZDJiMjcwNTFjZWEzODRmZTBhN2MzODJk
ZjJmMy4uMWU4OWZhYWFiN2ViODhjN2Y4NjRlMGY1M2YyNTVjYjhhMmM1ZWVjYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGlt
ZUZvcm1hdENvbnN0cnVjdG9yLmNwcApAQCAtODQsMjAgKzg0LDIwIEBAIHZvaWQgSW50bERhdGVU
aW1lRm9ybWF0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSW50bERhdGVUaW1l
Rm9ybWF0UHJvCiAgICAgbV9kYXRlVGltZUZvcm1hdFN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIGRh
dGVUaW1lRm9ybWF0U3RydWN0dXJlKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SW50bERhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0ZSogZXhlYykKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxEYXRlVGltZUZv
cm1hdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIC8vIDEyLjEuMiBJbnRsLkRhdGVUaW1lRm9y
bWF0IChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYg
TmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBiZSB0aGUgYWN0aXZlIGZ1bmN0
aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1RhcmdldC4KLSAgICBKU1ZhbHVl
IG5ld1RhcmdldCA9IGV4ZWMtPm5ld1RhcmdldCgpOworICAgIEpTVmFsdWUgbmV3VGFyZ2V0ID0g
c3RhdGUtPm5ld1RhcmdldCgpOwogICAgIGlmIChuZXdUYXJnZXQuaXNVbmRlZmluZWQoKSkKLSAg
ICAgICAgbmV3VGFyZ2V0ID0gZXhlYy0+Y2FsbGVlKCk7CisgICAgICAgIG5ld1RhcmdldCA9IHN0
YXRlLT5jYWxsZWUoKTsKIAogICAgIC8vIDIuIExldCBkYXRlVGltZUZvcm1hdCBiZSBPcmRpbmFy
eUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVEYXRlVGltZUZvcm1hdFByb3RvdHlw
ZSUpLgotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSW50bERhdGVUaW1lRm9ybWF0KiBk
YXRlVGltZUZvcm1hdCA9IEludGxEYXRlVGltZUZvcm1hdDo6Y3JlYXRlKHZtLCBqc0Nhc3Q8SW50
bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSkpOworICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOworICAgIEludGxEYXRlVGltZUZvcm1hdCogZGF0ZVRpbWVGb3JtYXQg
PSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmNyZWF0ZSh2bSwganNDYXN0PEludGxEYXRlVGltZUZvcm1h
dENvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKSk7CiAgICAgaWYgKGRhdGVUaW1lRm9ybWF0
ICYmICFqc0R5bmFtaWNDYXN0PEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yKj4obmV3VGFy
Z2V0KSkgewogICAgICAgICBKU1ZhbHVlIHByb3RvID0gYXNPYmplY3QobmV3VGFyZ2V0KS0+Z2V0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwotICAgICAgICBhc09iamVj
dChkYXRlVGltZUZvcm1hdCktPnNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKGV4ZWMsIHByb3Rv
KTsKKyAgICAgICAgYXNPYmplY3QoZGF0ZVRpbWVGb3JtYXQpLT5zZXRQcm90b3R5cGVXaXRoQ3lj
bGVDaGVjayhzdGF0ZSwgcHJvdG8pOwogICAgIH0KIAogICAgIC8vIDMuIFJldHVybklmQWJydXB0
KGRhdGVUaW1lRm9ybWF0KS4KQEAgLTEwOSwxNSArMTA5LDE1IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxEYXRlVGltZUZvcm1hdChFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkYXRlVGltZUZvcm1hdCk7CiB9CiAK
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxJbnRsRGF0ZVRpbWVGb3Jt
YXQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEludGxEYXRlVGltZUZvcm1hdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIC8vIDEyLjEu
MiBJbnRsLkRhdGVUaW1lRm9ybWF0IChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAy
LjApCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBi
ZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1Rh
cmdldC4KICAgICAvLyBOZXdUYXJnZXQgaXMgYWx3YXlzIHVuZGVmaW5lZCB3aGVuIGNhbGxlZCBh
cyBhIGZ1bmN0aW9uLgogCiAgICAgLy8gMi4gTGV0IGRhdGVUaW1lRm9ybWF0IGJlIE9yZGluYXJ5
Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwgJURhdGVUaW1lRm9ybWF0UHJvdG90eXBl
JSkuCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIGRh
dGVUaW1lRm9ybWF0ID0gSW50bERhdGVUaW1lRm9ybWF0OjpjcmVhdGUodm0sIGpzQ2FzdDxJbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKSk7CisgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgSW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZvcm1hdCA9
IEludGxEYXRlVGltZUZvcm1hdDo6Y3JlYXRlKHZtLCBqc0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0
Q29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpKTsKIAogICAgIC8vIDMuIFJldHVybklmQWJy
dXB0KGRhdGVUaW1lRm9ybWF0KS4KICAgICBBU1NFUlQoZGF0ZVRpbWVGb3JtYXQpOwpAQCAtMTQw
LDI2ICsxNDAsMjYgQEAgQ2FsbFR5cGUgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6Omdl
dENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKICAgICByZXR1cm4gQ2FsbFR5
cGVIb3N0OwogfQogCi1ib29sIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitib29sIEludGxEYXRlVGltZUZv
cm1hdENvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQogewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SW50ZXJuYWxGdW5jdGlv
bj4oZXhlYywgZGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvclRhYmxlLCBqc0Nhc3Q8SW50bERhdGVU
aW1lRm9ybWF0Q29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAg
IHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SW50ZXJuYWxGdW5jdGlvbj4oc3RhdGUsIGRh
dGVUaW1lRm9ybWF0Q29uc3RydWN0b3JUYWJsZSwganNDYXN0PEludGxEYXRlVGltZUZvcm1hdENv
bnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBw
b3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2Yo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICAvLyAxMi4yLjIgSW50bC5EYXRlVGltZUZvcm1hdC5z
dXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAog
ICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVEYXRlVGltZUZvcm1hdCUuW1thdmFp
bGFibGVMb2NhbGVzXV0uCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gc3RhdGUtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKICAgICBjb25zdCBIYXNoU2V0
PFN0cmluZz4gYXZhaWxhYmxlTG9jYWxlcyA9IGdsb2JhbE9iamVjdC0+aW50bERhdGVUaW1lRm9y
bWF0QXZhaWxhYmxlTG9jYWxlcygpOwogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMg
YmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KLSAgICBWZWN0b3I8U3RyaW5nPiBy
ZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChleGVjLCBleGVjLT5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIFZlY3RvcjxTdHJp
bmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMy4gUmV0
dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywg
b3B0aW9ucykuCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKGV4
ZWMsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIGV4ZWMtPmFyZ3VtZW50KDEp
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdXBwb3J0ZWRMb2NhbGVzKCpzdGF0ZSwg
YXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgc3RhdGUtPmFyZ3VtZW50KDEpKSk7
CiB9CiAgICAgCiB2b2lkIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90
eXBlLmNwcAppbmRleCAwNzliOTI5NWNkYzM2OTliYmUxYTk0ODM5ZGVkNWE4ZTdiZDU5MDE5Li5k
NWU1MjU5ODI0ODBiMWVkNDkxZTZiN2I4ZmIxMmJiOGFmMWFlZTdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFBy
b3RvdHlwZS5jcHAKQEAgLTgxLDMxICs4MSwzMSBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdFBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqKQogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKIH0KIAotYm9vbCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGU6
OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSW50bERh
dGVUaW1lRm9ybWF0UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+
KGV4ZWMsIGRhdGVUaW1lRm9ybWF0UHJvdG90eXBlVGFibGUsIGpzQ2FzdDxJbnRsRGF0ZVRpbWVG
b3JtYXRQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVy
biBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KHN0YXRlLCBkYXRlVGltZUZvcm1hdFBy
b3RvdHlwZVRhYmxlLCBqc0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlKj4ob2JqZWN0
KSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQoRXhlY1N0YXRlKiBleGVj
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5
cGVHZXR0ZXJGb3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICAvLyAxMi4zLjMgSW50bC5E
YXRlVGltZUZvcm1hdC5wcm90b3R5cGUuZm9ybWF0IChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4g
TGV0IGR0ZiBiZSB0aGlzIERhdGVUaW1lRm9ybWF0IG9iamVjdC4KLSAgICBJbnRsRGF0ZVRpbWVG
b3JtYXQqIGR0ZiA9IGpzRHluYW1pY0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Kj4oZXhlYy0+dGhp
c1ZhbHVlKCkpOworICAgIEludGxEYXRlVGltZUZvcm1hdCogZHRmID0ganNEeW5hbWljQ2FzdDxJ
bnRsRGF0ZVRpbWVGb3JtYXQqPihzdGF0ZS0+dGhpc1ZhbHVlKCkpOwogICAgIC8vIDIuIFJldHVy
bklmQWJydXB0KGR0ZikuCiAgICAgaWYgKCFkdGYpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnRsLkRhdGVUaW1lRm9y
bWF0LnByb3RvdHlwZS5mb3JtYXQgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3QgYW4gb2JqZWN0
IGluaXRpYWxpemVkIGFzIGEgRGF0ZVRpbWVGb3JtYXQiKSkpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwoIkludGwuRGF0
ZVRpbWVGb3JtYXQucHJvdG90eXBlLmZvcm1hdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBh
biBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEYXRlVGltZUZvcm1hdCIpKSk7CiAgICAgCiAgICAg
SlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZvcm1hdCA9IGR0Zi0+Ym91bmRGb3JtYXQoKTsKICAgICAv
LyAzLiBJZiB0aGUgW1tib3VuZEZvcm1hdF1dIGludGVybmFsIHNsb3Qgb2YgdGhpcyBEYXRlVGlt
ZUZvcm1hdCBvYmplY3QgaXMgdW5kZWZpbmVkLAogICAgIGlmICghYm91bmRGb3JtYXQpIHsKLSAg
ICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBkdGYtPmdsb2JhbE9iamVj
dCgpOwogICAgICAgICAvLyBhLiBMZXQgRiBiZSBhIG5ldyBidWlsdC1pbiBmdW5jdGlvbiBvYmpl
Y3QgYXMgZGVmaW5lZCBpbiAxMi4zLjQuCiAgICAgICAgIC8vIGIuIFRoZSB2YWx1ZSBvZiBG4oCZ
cyBsZW5ndGggcHJvcGVydHkgaXMgMS4gKE5vdGU6IEbigJlzIGxlbmd0aCBwcm9wZXJ0eSB3YXMg
MCBpbiBFQ01BLTQwMiAxLjApCiAgICAgICAgIEpTRnVuY3Rpb24qIHRhcmdldE9iamVjdCA9IEpT
RnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCBBU0NJSUxpdGVyYWwoImZvcm1h
dCIpLCBJbnRsRGF0ZVRpbWVGb3JtYXRGdW5jRm9ybWF0RGF0ZVRpbWUsIE5vSW50cmluc2ljKTsK
ICAgICAgICAgSlNBcnJheSogYm91bmRBcmdzID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgMCk7CiAgICAgICAgIGlmICghYm91bmRB
cmdzKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYykpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091
dE9mTWVtb3J5RXJyb3Ioc3RhdGUpKTsKICAgICAgICAgCiAgICAgICAgIC8vIGMuIExldCBiZiBi
ZSBCb3VuZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7KS4KICAgICAgICAgYm91bmRG
b3JtYXQgPSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRP
YmplY3QsIGR0ZiwgYm91bmRBcmdzLCAxLCBBU0NJSUxpdGVyYWwoImZvcm1hdCIpKTsKQEAgLTEx
NiwxNyArMTE2LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW1l
Rm9ybWF0UHJvdG90eXBlR2V0dGVyRm9ybWF0KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGJvdW5kRm9ybWF0KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGVGdW5jUmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0
ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW1lRm9ybWF0
UHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIC8v
IDEyLjMuNSBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMoKSAo
RUNNQS00MDIgMi4wKQotICAgIEludGxEYXRlVGltZUZvcm1hdCogZHRmID0ganNEeW5hbWljQ2Fz
dDxJbnRsRGF0ZVRpbWVGb3JtYXQqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgSW50bERhdGVU
aW1lRm9ybWF0KiBkdGYgPSBqc0R5bmFtaWNDYXN0PEludGxEYXRlVGltZUZvcm1hdCo+KHN0YXRl
LT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFkdGYpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnRsLkRhdGVUaW1lRm9y
bWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMgY2FsbGVkIG9uIHZhbHVlIHRoYXQncyBub3Qg
YW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgRGF0ZVRpbWVGb3JtYXQiKSkpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKHN0YXRlLCBBU0NJSUxpdGVyYWwo
IkludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucyBjYWxsZWQgb24g
dmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMgYSBEYXRlVGltZUZvcm1h
dCIpKSk7CiAKICAgICAvLyBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBvYmplY3Qgd2hvc2Ug
cHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBhcmUgc2V0IGFzIGlmIGNvbnN0cnVjdGVkIGJ5IGFu
IG9iamVjdCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVy
dGllcyB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJuYWwgc2xvdCBvZiB0aGlz
IERhdGVUaW1lRm9ybWF0IG9iamVjdCAoc2VlIDEyLjQpOiBsb2NhbGUsIGNhbGVuZGFyLCBudW1i
ZXJpbmdTeXN0ZW0sIHRpbWVab25lLCBob3VyMTIsIHdlZWtkYXksIGVyYSwgeWVhciwgbW9udGgs
IGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGFuZCB0aW1lWm9uZU5hbWUuIFByb3BlcnRpZXMg
d2hvc2UgY29ycmVzcG9uZGluZyBpbnRlcm5hbCBzbG90cyBhcmUgbm90IHByZXNlbnQgYXJlIG5v
dCBhc3NpZ25lZC4KICAgICAvLyBOb3RlOiBJbiB0aGlzIHZlcnNpb24gb2YgdGhlIEVDTUFTY3Jp
cHQgMjAxNSBJbnRlcm5hdGlvbmFsaXphdGlvbiBBUEksIHRoZSB0aW1lWm9uZSBwcm9wZXJ0eSB3
aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHRpbWUgem9uZSBpZiBubyB0aW1lWm9uZSBw
cm9wZXJ0eSB3YXMgcHJvdmlkZWQgaW4gdGhlIG9wdGlvbnMgb2JqZWN0IHByb3ZpZGVkIHRvIHRo
ZSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yLiBUaGUgcHJldmlvdXMgdmVyc2lvbiBs
ZWZ0IHRoZSB0aW1lWm9uZSBwcm9wZXJ0eSB1bmRlZmluZWQgaW4gdGhpcyBjYXNlLgogCi0gICAg
SlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICBKU09i
amVjdCogb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsKIAogICAgIC8vIEZJ
WE1FOiBQb3B1bGF0ZSBvYmplY3QgZnJvbSBpbnRlcm5hbCBzbG90cy4KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAppbmRleCAxMzlk
YzViMTllYTQ4ZWNiNGE0YWUzMTc5MGUzMDllYjRhYzc2YWI5Li44MWEwOTc4ZDFlMzBmM2NjYjNm
YzM2ZGNhNzAwMzRiOTgxZDYzNzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcApAQCAtODQsMjAgKzg0LDIwIEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6c2V0Qm91bmRGb3JtYXQoVk0mIHZtLCBKU0JvdW5kRnVuY3Rpb24qIGZv
cm1hdCkKICAgICBtX2JvdW5kRm9ybWF0LnNldCh2bSwgdGhpcywgZm9ybWF0KTsKIH0KIAotRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1hdE51bWJl
cihFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1i
ZXJGb3JtYXRGdW5jRm9ybWF0TnVtYmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgLy8gMTEu
My40IEZvcm1hdCBOdW1iZXIgRnVuY3Rpb25zIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gTGV0
IG5mIGJlIHRoZSB0aGlzIHZhbHVlLgotICAgIEludGxOdW1iZXJGb3JtYXQqIGZvcm1hdCA9IGpz
RHluYW1pY0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBJ
bnRsTnVtYmVyRm9ybWF0KiBmb3JtYXQgPSBqc0R5bmFtaWNDYXN0PEludGxOdW1iZXJGb3JtYXQq
PihzdGF0ZS0+dGhpc1ZhbHVlKCkpOwogICAgIC8vIDIuIEFzc2VydDogVHlwZShuZikgaXMgT2Jq
ZWN0IGFuZCBuZiBoYXMgYW4gW1tpbml0aWFsaXplZE51bWJlckZvcm1hdF1dIGludGVybmFsIHNs
b3Qgd2hvc2UgdmFsdWUgaXMgdHJ1ZS4KICAgICBpZiAoIWZvcm1hdCkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Ioc3RhdGUpKTsKIAogICAgIC8vIDMuIElmIHZh
bHVlIGlzIG5vdCBwcm92aWRlZCwgbGV0IHZhbHVlIGJlIHVuZGVmaW5lZC4KICAgICAvLyA0LiBM
ZXQgeCBiZSBUb051bWJlcih2YWx1ZSkuCi0gICAgZG91YmxlIHZhbHVlID0gZXhlYy0+YXJndW1l
bnQoMCkudG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIHZhbHVlID0gc3RhdGUtPmFyZ3VtZW50
KDApLnRvTnVtYmVyKHN0YXRlKTsKICAgICAvLyA1LiBSZXR1cm5JZkFicnVwdCh4KS4KLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8v
IDYuIFJldHVybiBGb3JtYXROdW1iZXIobmYsIHgpLgpAQCAtMTA1LDcgKzEwNSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXROdW1iZXIo
RXhlY1N0YXRlKiBleGVjKQogICAgIC8vIDExLjMuNCBGb3JtYXROdW1iZXIgYWJzdHJhY3Qgb3Bl
cmF0aW9uIChFQ01BLTQwMiAyLjApCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBGb3JtYXROdW1i
ZXIuCiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHZhbHVlKS50b1N0cmlu
ZyhleGVjKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih2YWx1ZSkudG9T
dHJpbmcoc3RhdGUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVj
dG9yLmNwcAppbmRleCAwNGM1MGFhYzhkMTUxODI0Y2E5ZWRhMDM2YmMyZmY3NTQ2Y2YyMjczLi5j
ZmU2NTY1MGI4MjhhNTc3Y2RlMjA3M2ZkMTE1OTVjMjhlOGI1N2VjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25z
dHJ1Y3Rvci5jcHAKQEAgLTg0LDIwICs4NCwyMCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eQog
ICAgIG1fbnVtYmVyRm9ybWF0U3RydWN0dXJlLnNldCh2bSwgdGhpcywgbnVtYmVyRm9ybWF0U3Ry
dWN0dXJlKTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SW50bE51bWJlckZvcm1hdChFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsTnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSogc3Rh
dGUpCiB7CiAgICAgLy8gMTEuMS4yIEludGwuTnVtYmVyRm9ybWF0IChbbG9jYWxlcyBbLCBvcHRp
b25zXV0pIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5l
ZCwgbGV0IG5ld1RhcmdldCBiZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQg
bmV3VGFyZ2V0IGJlIE5ld1RhcmdldC4KLSAgICBKU1ZhbHVlIG5ld1RhcmdldCA9IGV4ZWMtPm5l
d1RhcmdldCgpOworICAgIEpTVmFsdWUgbmV3VGFyZ2V0ID0gc3RhdGUtPm5ld1RhcmdldCgpOwog
ICAgIGlmIChuZXdUYXJnZXQuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgbmV3VGFyZ2V0ID0gZXhl
Yy0+Y2FsbGVlKCk7CisgICAgICAgIG5ld1RhcmdldCA9IHN0YXRlLT5jYWxsZWUoKTsKIAogICAg
IC8vIDIuIExldCBudW1iZXJGb3JtYXQgYmUgT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0b3Io
bmV3VGFyZ2V0LCAlTnVtYmVyRm9ybWF0UHJvdG90eXBlJSkuCi0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBJbnRsTnVtYmVyRm9ybWF0KiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9y
bWF0OjpjcmVhdGUodm0sIGpzQ2FzdDxJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IqPihleGVj
LT5jYWxsZWUoKSkpOworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIEludGxOdW1iZXJG
b3JtYXQqIG51bWJlckZvcm1hdCA9IEludGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2bSwganNDYXN0
PEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSkpOwogICAgIGlm
IChudW1iZXJGb3JtYXQgJiYgIWpzRHluYW1pY0Nhc3Q8SW50bE51bWJlckZvcm1hdENvbnN0cnVj
dG9yKj4obmV3VGFyZ2V0KSkgewogICAgICAgICBKU1ZhbHVlIHByb3RvID0gYXNPYmplY3QobmV3
VGFyZ2V0KS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwotICAg
ICAgICBhc09iamVjdChudW1iZXJGb3JtYXQpLT5zZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayhl
eGVjLCBwcm90byk7CisgICAgICAgIGFzT2JqZWN0KG51bWJlckZvcm1hdCktPnNldFByb3RvdHlw
ZVdpdGhDeWNsZUNoZWNrKHN0YXRlLCBwcm90byk7CiAgICAgfQogCiAgICAgLy8gMy4gUmV0dXJu
SWZBYnJ1cHQobnVtYmVyRm9ybWF0KS4KQEAgLTEwOSwxNSArMTA5LDE1IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxOdW1iZXJGb3JtYXQoRXhlY1N0
YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobnVtYmVyRm9ybWF0KTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEludGxOdW1iZXJGb3Jt
YXQoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEludGxOdW1iZXJGb3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICAvLyAxMS4xLjIg
SW50bC5OdW1iZXJGb3JtYXQgKFtsb2NhbGVzIFssIG9wdGlvbnNdXSkgKEVDTUEtNDAyIDIuMCkK
ICAgICAvLyAxLiBJZiBOZXdUYXJnZXQgaXMgdW5kZWZpbmVkLCBsZXQgbmV3VGFyZ2V0IGJlIHRo
ZSBhY3RpdmUgZnVuY3Rpb24gb2JqZWN0LCBlbHNlIGxldCBuZXdUYXJnZXQgYmUgTmV3VGFyZ2V0
LgogICAgIC8vIE5ld1RhcmdldCBpcyBhbHdheXMgdW5kZWZpbmVkIHdoZW4gY2FsbGVkIGFzIGEg
ZnVuY3Rpb24uCiAKICAgICAvLyAyLiBMZXQgbnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRl
RnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwgJU51bWJlckZvcm1hdFByb3RvdHlwZSUpLgotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0
ID0gSW50bE51bWJlckZvcm1hdDo6Y3JlYXRlKHZtLCBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdENv
bnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
KyAgICBJbnRsTnVtYmVyRm9ybWF0KiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0Ojpj
cmVhdGUodm0sIGpzQ2FzdDxJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IqPihzdGF0ZS0+Y2Fs
bGVlKCkpKTsKIAogICAgIC8vIDMuIFJldHVybklmQWJydXB0KG51bWJlckZvcm1hdCkuCiAgICAg
QVNTRVJUKG51bWJlckZvcm1hdCk7CkBAIC0xNDAsMjYgKzE0MCwyNiBAQCBDYWxsVHlwZSBJbnRs
TnVtYmVyRm9ybWF0Q29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBj
YWxsRGF0YSkKICAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwogfQogCi1ib29sIEludGxOdW1iZXJG
b3JtYXRDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQorYm9vbCBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0
aW9uU2xvdDxJbnRlcm5hbEZ1bmN0aW9uPihleGVjLCBudW1iZXJGb3JtYXRDb25zdHJ1Y3RvclRh
YmxlLCBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEludGVybmFs
RnVuY3Rpb24+KHN0YXRlLCBudW1iZXJGb3JtYXRDb25zdHJ1Y3RvclRhYmxlLCBqc0Nhc3Q8SW50
bE51bWJlckZvcm1hdENvbnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBzbG90KTsK
IH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0Q29uc3Ry
dWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRl
ZExvY2FsZXNPZihFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIC8vIDExLjIuMiBJbnRsLk51bWJl
ckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAy
IDIuMCkKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVOdW1iZXJGb3JtYXQl
LltbYXZhaWxhYmxlTG9jYWxlc11dLgotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHN0YXRlLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgY29uc3Qg
SGFzaFNldDxTdHJpbmc+IGF2YWlsYWJsZUxvY2FsZXMgPSBnbG9iYWxPYmplY3QtPmludGxOdW1i
ZXJGb3JtYXRBdmFpbGFibGVMb2NhbGVzKCk7CiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9j
YWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgotICAgIFZlY3RvcjxTdHJp
bmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgVmVjdG9y
PFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoKnN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCkpOworICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAz
LiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2Nh
bGVzLCBvcHRpb25zKS4KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2Fs
ZXMoZXhlYywgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgZXhlYy0+YXJndW1l
bnQoMSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN1cHBvcnRlZExvY2FsZXMoKnN0
YXRlLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBzdGF0ZS0+YXJndW1lbnQo
MSkpKTsKIH0KIAogdm9pZCBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3I6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5j
cHAKaW5kZXggOGEzNDkyMjk0ZWMzODE2YjkxYmIxYzAwNGUyMzlmOWZlYmJkZTRmOS4uZmE4YTBl
YTcyNzQ1ODY5ODhjNjJhN2FhNDA4ZjU1ZDQ1Y2VhY2VjZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5j
cHAKQEAgLTgxLDMwICs4MSwzMCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgU3RydWN0dXJlKikKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiB9CiAKLWJvb2wgSW50bE51bWJlckZvcm1hdFByb3RvdHlwZTo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorYm9vbCBJbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBz
dGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewot
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KGV4ZWMsIG51bWJlckZv
cm1hdFByb3RvdHlwZVRhYmxlLCBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdFByb3RvdHlwZSo+KG9i
amVjdCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9u
U2xvdDxKU09iamVjdD4oc3RhdGUsIG51bWJlckZvcm1hdFByb3RvdHlwZVRhYmxlLCBqc0Nhc3Q8
SW50bE51bWJlckZvcm1hdFByb3RvdHlwZSo+KG9iamVjdCksIHByb3BlcnR5TmFtZSwgc2xvdCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdFByb3Rv
dHlwZUdldHRlckZvcm1hdChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGVHZXR0ZXJGb3JtYXQoRXhlY1N0YXRlKiBz
dGF0ZSkKIHsKICAgICAvLyAxMS4zLjMgSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLmZvcm1h
dCAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIExldCBuZiBiZSB0aGlzIE51bWJlckZvcm1hdCBv
YmplY3QuCi0gICAgSW50bE51bWJlckZvcm1hdCogbmYgPSBqc0R5bmFtaWNDYXN0PEludGxOdW1i
ZXJGb3JtYXQqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgSW50bE51bWJlckZvcm1hdCogbmYg
PSBqc0R5bmFtaWNDYXN0PEludGxOdW1iZXJGb3JtYXQqPihzdGF0ZS0+dGhpc1ZhbHVlKCkpOwog
ICAgIGlmICghbmYpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0
IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIE51
bWJlckZvcm1hdCIpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBl
RXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLmZv
cm1hdCBjYWxsZWQgb24gdmFsdWUgdGhhdCdzIG5vdCBhbiBvYmplY3QgaW5pdGlhbGl6ZWQgYXMg
YSBOdW1iZXJGb3JtYXQiKSkpOwogICAgIAogICAgIEpTQm91bmRGdW5jdGlvbiogYm91bmRGb3Jt
YXQgPSBuZi0+Ym91bmRGb3JtYXQoKTsKICAgICAvLyAyLiBJZiBuZi5bW2JvdW5kRm9ybWF0XV0g
aXMgdW5kZWZpbmVkLAogICAgIGlmICghYm91bmRGb3JtYXQpIHsKLSAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZi0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIC8v
IGEuIExldCBGIGJlIGEgbmV3IGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBhcyBkZWZpbmVkIGlu
IDExLjMuNC4KICAgICAgICAgLy8gYi4gVGhlIHZhbHVlIG9mIEbigJlzIGxlbmd0aCBwcm9wZXJ0
eSBpcyAxLgogICAgICAgICBKU0Z1bmN0aW9uKiB0YXJnZXRPYmplY3QgPSBKU0Z1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSwgSW50bE51
bWJlckZvcm1hdEZ1bmNGb3JtYXROdW1iZXIsIE5vSW50cmluc2ljKTsKICAgICAgICAgSlNBcnJh
eSogYm91bmRBcmdzID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoVW5kZWNpZGVkKSwgMCk7CiAgICAgICAgIGlmICghYm91bmRBcmdzKQotICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYykpOwor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd091dE9mTWVtb3J5RXJyb3Io
c3RhdGUpKTsKIAogICAgICAgICAvLyBjLiBMZXQgYmYgYmUgQm91bmRGdW5jdGlvbkNyZWF0ZShG
LCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAgIGJvdW5kRm9ybWF0ID0gSlNCb3VuZEZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgdGFyZ2V0T2JqZWN0LCBuZiwgYm91bmRBcmdzLCAx
LCBBU0NJSUxpdGVyYWwoImZvcm1hdCIpKTsKQEAgLTExNSwxNiArMTE1LDE2IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1h
dChFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShib3VuZEZvcm1hdCk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdFByb3Rv
dHlwZUZ1bmNSZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlRnVuY1Jlc29sdmVkT3B0aW9u
cyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIC8vIDExLjMuNSBJbnRsLk51bWJlckZvcm1hdC5w
cm90b3R5cGUucmVzb2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKLSAgICBJbnRsTnVtYmVy
Rm9ybWF0KiBuZiA9IGpzRHluYW1pY0Nhc3Q8SW50bE51bWJlckZvcm1hdCo+KGV4ZWMtPnRoaXNW
YWx1ZSgpKTsKKyAgICBJbnRsTnVtYmVyRm9ybWF0KiBuZiA9IGpzRHluYW1pY0Nhc3Q8SW50bE51
bWJlckZvcm1hdCo+KHN0YXRlLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFuZikKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IkludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMgY2FsbGVkIG9uIHZh
bHVlIHRoYXQncyBub3QgYW4gb2JqZWN0IGluaXRpYWxpemVkIGFzIGEgTnVtYmVyRm9ybWF0Iikp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihzdGF0ZSwg
QVNDSUlMaXRlcmFsKCJJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25z
IGNhbGxlZCBvbiB2YWx1ZSB0aGF0J3Mgbm90IGFuIG9iamVjdCBpbml0aWFsaXplZCBhcyBhIE51
bWJlckZvcm1hdCIpKSk7CiAKICAgICAvLyBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBvYmpl
Y3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBhcmUgc2V0IGFzIGlmIGNvbnN0cnVj
dGVkIGJ5IGFuIG9iamVjdCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNoIG9mIHRoZSBmb2xsb3dp
bmcgcHJvcGVydGllcyB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJuYWwgc2xv
dCBvZiB0aGlzIE51bWJlckZvcm1hdCBvYmplY3QgKHNlZSAxMS40KTogbG9jYWxlLCBudW1iZXJp
bmdTeXN0ZW0sIHN0eWxlLCBjdXJyZW5jeSwgY3VycmVuY3lEaXNwbGF5LCBtaW5pbXVtSW50ZWdl
ckRpZ2l0cywgbWluaW11bUZyYWN0aW9uRGlnaXRzLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMsIG1p
bmltdW1TaWduaWZpY2FudERpZ2l0cywgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzLCBhbmQgdXNl
R3JvdXBpbmcuIFByb3BlcnRpZXMgd2hvc2UgY29ycmVzcG9uZGluZyBpbnRlcm5hbCBzbG90cyBh
cmUgbm90IHByZXNlbnQgYXJlIG5vdCBhc3NpZ25lZC4KIAotICAgIEpTT2JqZWN0KiBvcHRpb25z
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7CiAKICAgICAvLyBGSVhNRTogUG9wdWxhdGUgb2Jq
ZWN0IGZyb20gaW50ZXJuYWwgc2xvdHMuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdC5jcHAKaW5kZXggM2VjMjI5N2IwYzk2ODdmMzM5Yjg2ZGFhZDI3MWNiMDVl
YjY4ZTU4MS4uMzhmMDUzMTU0Y2E0ZThmMjdlZGVjMmZlNTdjMThmODIzOWFlYjkzMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKQEAgLTExOSwyMyAr
MTE5LDIzIEBAIHN0YXRpYyBTdHJpbmcgZGVmYXVsdExvY2FsZSgpCiAgICAgcmV0dXJuIEFTQ0lJ
TGl0ZXJhbCgiZW4iKTsKIH0KIAotYm9vbCBnZXRJbnRsQm9vbGVhbk9wdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBib29sJiB1c2Vz
RmFsbGJhY2spCitib29sIGludGxCb29sZWFuT3B0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBib29sJiB1c2VzRmFsbGJhY2spCiB7
CiAgICAgLy8gOS4yLjkgR2V0T3B0aW9uIChvcHRpb25zLCBwcm9wZXJ0eSwgdHlwZSwgdmFsdWVz
LCBmYWxsYmFjaykKICAgICAvLyBGb3IgdHlwZT0iYm9vbGVhbiIuIHZhbHVlcyBpcyBhbHdheXMg
dW5kZWZpbmVkLgogCiAgICAgLy8gMS4gTGV0IG9wdHMgYmUgVG9PYmplY3Qob3B0aW9ucykuCi0g
ICAgSlNPYmplY3QqIG9wdHMgPSBvcHRpb25zLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0
KiBvcHRzID0gb3B0aW9ucy50b09iamVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZB
YnJ1cHQob3B0cykuCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gMy4gTGV0
IHZhbHVlIGJlIEdldChvcHRzLCBwcm9wZXJ0eSkuCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMt
PmdldChleGVjLCBwcm9wZXJ0eSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldCgmc3Rh
dGUsIHByb3BlcnR5KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZp
bmVkLCB0aGVuCkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9vbCBnZXRJbnRsQm9vbGVhbk9wdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnQKIAog
ICAgICAgICAvLyBiLiBJZiB0eXBlIGlzICJib29sZWFuIiwgdGhlbgogICAgICAgICAvLyBpLiBM
ZXQgdmFsdWUgYmUgVG9Cb29sZWFuKHZhbHVlKS4KLSAgICAgICAgYm9vbCBib29sZWFuVmFsdWUg
PSB2YWx1ZS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJvb2wgYm9vbGVhblZhbHVlID0gdmFs
dWUudG9Cb29sZWFuKCZzdGF0ZSk7CiAKICAgICAgICAgLy8gZS4gUmV0dXJuIHZhbHVlLgogICAg
ICAgICB1c2VzRmFsbGJhY2sgPSBmYWxzZTsKQEAgLTE1OCwyMyArMTU4LDIzIEBAIGJvb2wgZ2V0
SW50bEJvb2xlYW5PcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG9wdGlvbnMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TdHJpbmcgZ2V0SW50bFN0
cmluZ09wdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1l
IHByb3BlcnR5LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIHZhbHVlcywgY29uc3QgY2hhciogbm90
Rm91bmQsIFN0cmluZyBmYWxsYmFjaykKK1N0cmluZyBpbnRsU3RyaW5nT3B0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBjb25zdCBI
YXNoU2V0PFN0cmluZz4mIHZhbHVlcywgY29uc3QgY2hhciogbm90Rm91bmQsIFN0cmluZyBmYWxs
YmFjaykKIHsKICAgICAvLyA5LjIuOSBHZXRPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCB0eXBl
LCB2YWx1ZXMsIGZhbGxiYWNrKQogICAgIC8vIEZvciB0eXBlPSJzdHJpbmciLgogCiAgICAgLy8g
MS4gTGV0IG9wdHMgYmUgVG9PYmplY3Qob3B0aW9ucykuCi0gICAgSlNPYmplY3QqIG9wdHMgPSBv
cHRpb25zLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09i
amVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0cykuCi0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgLy8gMy4gTGV0IHZhbHVlIGJlIEdldChvcHRz
LCBwcm9wZXJ0eSkuCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldChleGVjLCBwcm9wZXJ0
eSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldCgmc3RhdGUsIHByb3BlcnR5KTsKIAog
ICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0x
ODQsMjggKzE4NCwyOCBAQCBTdHJpbmcgZ2V0SW50bFN0cmluZ09wdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcgogCiAgICAgICAgIC8vIGMu
IElmIHR5cGUgaXMgInN0cmluZyIsIHRoZW4KICAgICAgICAgLy8gaS4gTGV0IHZhbHVlIGJlIFRv
U3RyaW5nKHZhbHVlKS4KLSAgICAgICAgSlNTdHJpbmcqIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9T
dHJpbmcoZXhlYyk7CisgICAgICAgIEpTU3RyaW5nKiBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3Ry
aW5nKCZzdGF0ZSk7CiAKICAgICAgICAgLy8gaWkuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICAgICAgLy8gZC4g
SWYgdmFsdWVzIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KICAgICAgICAgLy8gaS4gSWYgdmFsdWVz
IGRvZXMgbm90IGNvbnRhaW4gYW4gZWxlbWVudCBlcXVhbCB0byB2YWx1ZSwgdGhyb3cgYSBSYW5n
ZUVycm9yIGV4Y2VwdGlvbi4KLSAgICAgICAgaWYgKCF2YWx1ZXMuaXNFbXB0eSgpICYmICF2YWx1
ZXMuY29udGFpbnMoc3RyaW5nVmFsdWUtPnZhbHVlKGV4ZWMpKSkgewotICAgICAgICAgICAgZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIFN0cmlu
Zyhub3RGb3VuZCkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZXMuaXNFbXB0eSgpICYmICF2YWx1ZXMu
Y29udGFpbnMoc3RyaW5nVmFsdWUtPnZhbHVlKCZzdGF0ZSkpKSB7CisgICAgICAgICAgICBzdGF0
ZS52bSgpLnRocm93RXhjZXB0aW9uKCZzdGF0ZSwgY3JlYXRlUmFuZ2VFcnJvcigmc3RhdGUsIFN0
cmluZyhub3RGb3VuZCkpKTsKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIGUuIFJldHVybiB2YWx1ZS4KLSAgICAgICAgcmV0dXJuIHN0cmluZ1Zh
bHVlLT52YWx1ZShleGVjKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlLT52YWx1ZSgmc3Rh
dGUpOwogICAgIH0KIAogICAgIC8vIDYuIEVsc2UgcmV0dXJuIGZhbGxiYWNrLgogICAgIHJldHVy
biBmYWxsYmFjazsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRQcml2YXRlVXNlTGFuZ1RhZyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFydHMsIHNpemVfdCBzdGFydEluZGV4KQorc3RhdGljIFN0cmlu
ZyBwcml2YXRlVXNlTGFuZ1RhZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFydHMsIHNpemVfdCBz
dGFydEluZGV4KQogewogICAgIHNpemVfdCBudW1QYXJ0cyA9IHBhcnRzLnNpemUoKTsKICAgICBz
aXplX3QgY3VycmVudEluZGV4ID0gc3RhcnRJbmRleDsKQEAgLTI1Miw3ICsyNTIsNyBAQCBzdGF0
aWMgU3RyaW5nIGdldFByaXZhdGVVc2VMYW5nVGFnKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJ0
cywgc2l6ZV90IHN0YXJ0SW5kZQogICAgIHJldHVybiBwcml2YXRldXNlLnRvU3RyaW5nKCk7CiB9
CiAKLXN0YXRpYyBTdHJpbmcgZ2V0Q2Fub25pY2FsTGFuZ1RhZyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFydHMpCitzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbExhbmdUYWcoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcnRzKQogewogICAgIEFTU0VSVCghcGFydHMuaXNFbXB0eSgpKTsKIApAQCAtNDAx
LDcgKzQwMSw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0Q2Fub25pY2FsTGFuZ1RhZyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFydHMpCiAKICAgICAvLyBDaGVjayBmb3IgcHJpdmF0ZXVzZS4KICAgICBp
ZiAoY3VycmVudEluZGV4IDwgbnVtUGFydHMpIHsKLSAgICAgICAgU3RyaW5nIHByaXZhdGV1c2Ug
PSBnZXRQcml2YXRlVXNlTGFuZ1RhZyhwYXJ0cywgY3VycmVudEluZGV4KTsKKyAgICAgICAgU3Ry
aW5nIHByaXZhdGV1c2UgPSBwcml2YXRlVXNlTGFuZ1RhZyhwYXJ0cywgY3VycmVudEluZGV4KTsK
ICAgICAgICAgaWYgKHByaXZhdGV1c2UuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAgICAgICAgIGNhbm9uaWNhbC5hcHBlbmQoJy0nKTsKQEAgLTQxMyw3ICs0MTMsNyBA
QCBzdGF0aWMgU3RyaW5nIGdldENhbm9uaWNhbExhbmdUYWcoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcnRzKQogICAgIHJldHVybiBjYW5vbmljYWwudG9TdHJpbmcoKTsKIH0KIAotc3RhdGljIFN0
cmluZyBnZXRHcmFuZGZhdGhlcmVkTGFuZ1RhZyhjb25zdCBTdHJpbmcmIGxvY2FsZSkKK3N0YXRp
YyBTdHJpbmcgZ3JhbmRmYXRoZXJlZExhbmdUYWcoY29uc3QgU3RyaW5nJiBsb2NhbGUpCiB7CiAg
ICAgLy8gZ3JhbmRmYXRoZXJlZCA9IGlycmVndWxhciAvIHJlZ3VsYXIKICAgICAvLyBGSVhNRTog
Y29udmVydCB0byBhIGNvbXBpbGUgdGltZSBoYXNoIHRhYmxlIGlmIHRoaXMgaXMgY2F1c2luZyBw
ZXJmb3JtYW5jZSBpc3N1ZXMuCkBAIC00NTksNyArNDU5LDcgQEAgc3RhdGljIFN0cmluZyBjYW5v
bmljYWxpemVMYW5ndWFnZVRhZyhjb25zdCBTdHJpbmcmIGxvY2FsZSkKICAgICAvLyBodHRwczov
L3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvYmNwL2JjcDQ3LnR4dAogCiAgICAgLy8gTGFuZ3VhZ2Ut
VGFnID0gbGFuZ3RhZyAvIHByaXZhdGV1c2UgLyBncmFuZGZhdGhlcmVkCi0gICAgU3RyaW5nIGdy
YW5kZmF0aGVyID0gZ2V0R3JhbmRmYXRoZXJlZExhbmdUYWcobG9jYWxlKTsKKyAgICBTdHJpbmcg
Z3JhbmRmYXRoZXIgPSBncmFuZGZhdGhlcmVkTGFuZ1RhZyhsb2NhbGUpOwogICAgIGlmICghZ3Jh
bmRmYXRoZXIuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBncmFuZGZhdGhlcjsKIApAQCAtNDY4
LDExICs0NjgsMTEgQEAgc3RhdGljIFN0cmluZyBjYW5vbmljYWxpemVMYW5ndWFnZVRhZyhjb25z
dCBTdHJpbmcmIGxvY2FsZSkKICAgICBWZWN0b3I8U3RyaW5nPiBwYXJ0czsKICAgICBsb2NhbGUu
c3BsaXQoJy0nLCB0cnVlLCBwYXJ0cyk7CiAgICAgaWYgKCFwYXJ0cy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgU3RyaW5nIGxhbmd0YWcgPSBnZXRDYW5vbmljYWxMYW5nVGFnKHBhcnRzKTsKKyAgICAg
ICAgU3RyaW5nIGxhbmd0YWcgPSBjYW5vbmljYWxMYW5nVGFnKHBhcnRzKTsKICAgICAgICAgaWYg
KCFsYW5ndGFnLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGxhbmd0YWc7CiAKLSAgICAg
ICAgU3RyaW5nIHByaXZhdGV1c2UgPSBnZXRQcml2YXRlVXNlTGFuZ1RhZyhwYXJ0cywgMCk7Cisg
ICAgICAgIFN0cmluZyBwcml2YXRldXNlID0gcHJpdmF0ZVVzZUxhbmdUYWcocGFydHMsIDApOwog
ICAgICAgICBpZiAoIXByaXZhdGV1c2UuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gcHJp
dmF0ZXVzZTsKICAgICB9CkBAIC00ODAsMTEgKzQ4MCwxMSBAQCBzdGF0aWMgU3RyaW5nIGNhbm9u
aWNhbGl6ZUxhbmd1YWdlVGFnKGNvbnN0IFN0cmluZyYgbG9jYWxlKQogICAgIHJldHVybiBTdHJp
bmcoKTsKIH0KIAotVmVjdG9yPFN0cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgbG9jYWxlcykKK1ZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxv
Y2FsZUxpc3QoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBsb2NhbGVzKQogewogICAgIC8vIDku
Mi4xIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QgKGxvY2FsZXMpCi0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2FsbGVlKCkt
Pmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKICAg
ICBWZWN0b3I8U3RyaW5nPiBzZWVuOwogCiAgICAgLy8gMS4gSWYgbG9jYWxlcyBpcyB1bmRlZmlu
ZWQsIHRoZW4gYS4gUmV0dXJuIGEgbmV3IGVtcHR5IExpc3QuCkBAIC01MDQsMjAgKzUwNCwyMCBA
QCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBsb2NhbGVzKQogICAgICAgICBsb2NhbGVzT2JqZWN0ID0gbG9jYWxlc0FycmF5Owog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIDQuIExldCBPIGJlIFRvT2JqZWN0KGFMb2NhbGVzKS4K
LSAgICAgICAgbG9jYWxlc09iamVjdCA9IGxvY2FsZXMudG9PYmplY3QoZXhlYyk7CisgICAgICAg
IGxvY2FsZXNPYmplY3QgPSBsb2NhbGVzLnRvT2JqZWN0KCZzdGF0ZSk7CiAgICAgfQogCiAgICAg
Ly8gNS4gUmV0dXJuSWZBYnJ1cHQoTykuCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJp
bmc+KCk7CiAKICAgICAvLyA2LiBMZXQgbGVuIGJlIFRvTGVuZ3RoKEdldChPLCAibGVuZ3RoIikp
LgotICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBsb2NhbGVzT2JqZWN0LT5nZXQoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgSlNWYWx1ZSBsZW5ndGhQcm9wZXJ0eSA9IGxvY2FsZXNPYmplY3QtPmdldCgmc3RhdGUs
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAotICAgIGRvdWJsZSBsZW5ndGgg
PSBsZW5ndGhQcm9wZXJ0eS50b0xlbmd0aChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgZG91YmxlIGxlbmd0aCA9IGxlbmd0aFByb3BlcnR5LnRvTGVuZ3RoKCZzdGF0
ZSk7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gVmVjdG9y
PFN0cmluZz4oKTsKIAogICAgIC8vIEtlZXAgdHJhY2sgb2YgbG9jYWxlcyB0aGF0IGhhdmUgYmVl
biBhZGRlZCB0byB0aGUgbGlzdC4KQEAgLTUzMCwzOSArNTMwLDM5IEBAIFZlY3RvcjxTdHJpbmc+
IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGxvY2FsZXMp
CiAgICAgICAgIC8vIE5vdCBuZWVkZWQgYmVjYXVzZSBoYXNQcm9wZXJ0eSBhbmQgZ2V0IHRha2Ug
YW4gaW50IGZvciBudW1lcmljIGtleS4KIAogICAgICAgICAvLyBiLiBMZXQga1ByZXNlbnQgYmUg
SGFzUHJvcGVydHkoTywgUGspLgotICAgICAgICBib29sIGtQcmVzZW50ID0gbG9jYWxlc09iamVj
dC0+aGFzUHJvcGVydHkoZXhlYywgayk7CisgICAgICAgIGJvb2wga1ByZXNlbnQgPSBsb2NhbGVz
T2JqZWN0LT5oYXNQcm9wZXJ0eSgmc3RhdGUsIGspOwogCiAgICAgICAgIC8vIGMuIFJldHVybklm
QWJydXB0KGtQcmVzZW50KS4KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gVmVjdG9y
PFN0cmluZz4oKTsKIAogICAgICAgICAvLyBkLiBJZiBrUHJlc2VudCBpcyB0cnVlLCB0aGVuCiAg
ICAgICAgIGlmIChrUHJlc2VudCkgewogICAgICAgICAgICAgLy8gaS4gTGV0IGtWYWx1ZSBiZSBH
ZXQoTywgUGspLgotICAgICAgICAgICAgSlNWYWx1ZSBrVmFsdWUgPSBsb2NhbGVzT2JqZWN0LT5n
ZXQoZXhlYywgayk7CisgICAgICAgICAgICBKU1ZhbHVlIGtWYWx1ZSA9IGxvY2FsZXNPYmplY3Qt
PmdldCgmc3RhdGUsIGspOwogCiAgICAgICAgICAgICAvLyBpaS4gUmV0dXJuSWZBYnJ1cHQoa1Zh
bHVlKS4KLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmVjdG9y
PFN0cmluZz4oKTsKIAogICAgICAgICAgICAgLy8gaWlpLiBJZiBUeXBlKGtWYWx1ZSkgaXMgbm90
IFN0cmluZyBvciBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KICAgICAgICAg
ICAgIGlmICgha1ZhbHVlLmlzU3RyaW5nKCkgJiYgIWtWYWx1ZS5pc09iamVjdCgpKSB7Ci0gICAg
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJsb2NhbGUgdmFs
dWUgbXVzdCBiZSBhIHN0cmluZyBvciBvYmplY3QiKSk7CisgICAgICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBBU0NJSUxpdGVyYWwoImxvY2FsZSB2YWx1ZSBtdXN0IGJlIGEgc3Ry
aW5nIG9yIG9iamVjdCIpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4o
KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gaXYuIExldCB0YWcgYmUgVG9TdHJp
bmcoa1ZhbHVlKS4KLSAgICAgICAgICAgIEpTU3RyaW5nKiB0YWcgPSBrVmFsdWUudG9TdHJpbmco
ZXhlYyk7CisgICAgICAgICAgICBKU1N0cmluZyogdGFnID0ga1ZhbHVlLnRvU3RyaW5nKCZzdGF0
ZSk7CiAKICAgICAgICAgICAgIC8vIHYuIFJldHVybklmQWJydXB0KHRhZykuCi0gICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAg
ICAgICAgICAgIC8vIHZpLiBJZiBJc1N0cnVjdHVyYWxseVZhbGlkTGFuZ3VhZ2VUYWcodGFnKSBp
cyBmYWxzZSwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KICAgICAgICAgICAgIC8vIHZp
aS4gTGV0IGNhbm9uaWNhbGl6ZWRUYWcgYmUgQ2Fub25pY2FsaXplTGFuZ3VhZ2VUYWcodGFnKS4K
LSAgICAgICAgICAgIFN0cmluZyBjYW5vbmljYWxpemVkVGFnID0gY2Fub25pY2FsaXplTGFuZ3Vh
Z2VUYWcodGFnLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICBTdHJpbmcgY2Fub25pY2FsaXpl
ZFRhZyA9IGNhbm9uaWNhbGl6ZUxhbmd1YWdlVGFnKHRhZy0+dmFsdWUoJnN0YXRlKSk7CiAgICAg
ICAgICAgICBpZiAoY2Fub25pY2FsaXplZFRhZy5pc051bGwoKSkgewotICAgICAgICAgICAgICAg
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBT
dHJpbmc6OmZvcm1hdCgiaW52YWxpZCBsYW5ndWFnZSB0YWc6ICVzIiwgdGFnLT52YWx1ZShleGVj
KS51dGY4KCkuZGF0YSgpKSkpOworICAgICAgICAgICAgICAgIHN0YXRlLnZtKCkudGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBjcmVhdGVSYW5nZUVycm9yKCZzdGF0ZSwgU3RyaW5nOjpmb3JtYXQoImlu
dmFsaWQgbGFuZ3VhZ2UgdGFnOiAlcyIsIHRhZy0+dmFsdWUoJnN0YXRlKS51dGY4KCkuZGF0YSgp
KSkpOwogICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogICAgICAgICAg
ICAgfQogCkBAIC04MDEsNyArODAxLDcgQEAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcmVzb2x2
ZUxvY2FsZShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGMKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9jYWxl
cyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxl
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJh
eSogbG9va3VwU3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0
ZWRMb2NhbGVzKQogewogICAgIC8vIDkuMi42IExvb2t1cFN1cHBvcnRlZExvY2FsZXMgKGF2YWls
YWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpCiAKQEAgLTgxMiwxMSArODEyLDExIEBAIHN0
YXRpYyBKU0FycmF5KiBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBhCiAgICAgc2l6ZV90IGxlbiA9IHJlcXVlc3RlZExvY2FsZXMu
c2l6ZSgpOwogCiAgICAgLy8gMy4gTGV0IHN1YnNldCBiZSBhbiBlbXB0eSBMaXN0LgotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4
ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS5jYWxsZWUoKS0+Z2xvYmFs
T2JqZWN0KCk7CiAgICAgSlNBcnJheSogc3Vic2V0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSwgMCk7CiAgICAgaWYgKCFzdWJzZXQp
IHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoJnN0YXRlKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CkBAIC04MzYsNyArODM2LDcgQEAgc3RhdGljIEpTQXJyYXkqIGxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGEKIAogICAgICAgICAv
LyBmLiBJZiBhdmFpbGFibGVMb2NhbGUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbiBhcHBlbmQgbG9j
YWxlIHRvIHRoZSBlbmQgb2Ygc3Vic2V0LgogICAgICAgICBpZiAoIWF2YWlsYWJsZUxvY2FsZS5p
c051bGwoKSkKLSAgICAgICAgICAgIHN1YnNldC0+cHVzaChleGVjLCBqc1N0cmluZyhleGVjLCBs
b2NhbGUpKTsKKyAgICAgICAgICAgIHN1YnNldC0+cHVzaCgmc3RhdGUsIGpzU3RyaW5nKCZzdGF0
ZSwgbG9jYWxlKSk7CiAKICAgICAgICAgLy8gZy4gSW5jcmVtZW50IGsgYnkgMS4KICAgICB9CkBA
IC04NDUsMjYgKzg0NSwyNiBAQCBzdGF0aWMgSlNBcnJheSogbG9va3VwU3VwcG9ydGVkTG9jYWxl
cyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYQogICAgIHJldHVybiBz
dWJzZXQ7CiB9CiAKLXN0YXRpYyBKU0FycmF5KiBiZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHJlcXVlc3RlZExvY2FsZXMpCitzdGF0aWMgSlNBcnJheSogYmVz
dEZpdFN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSGFzaFNldDxTdHJp
bmc+JiBhdmFpbGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9j
YWxlcykKIHsKICAgICAvLyA5LjIuNyBCZXN0Rml0U3VwcG9ydGVkTG9jYWxlcyAoYXZhaWxhYmxl
TG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHNvbWV0
aGluZyBiZXR0ZXIgdGhhbiBsb29rdXAuCi0gICAgcmV0dXJuIGxvb2t1cFN1cHBvcnRlZExvY2Fs
ZXMoZXhlYywgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcyk7CisgICAgcmV0dXJu
IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoc3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3Rl
ZExvY2FsZXMpOwogfQogCi1KU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnMpCitKU1ZhbHVlIHN1cHBv
cnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFp
bGFibGVMb2NhbGVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgSlNW
YWx1ZSBvcHRpb25zKQogewogICAgIC8vIDkuMi44IFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJs
ZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMpCi0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIFN0cmluZyBtYXRjaGVyOwogCiAg
ICAgLy8gMS4gSWYgb3B0aW9ucyBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCiAgICAgaWYgKCFvcHRp
b25zLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgLy8gYS4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0
aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRjaGVyIiwgInN0cmluZyIsIMKrICJsb29rdXAiLCAiYmVz
dCBmaXQiIMK7LCAiYmVzdCBmaXQiKS4KICAgICAgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+IG1h
dGNoZXJzKHsgQVNDSUlMaXRlcmFsKCJsb29rdXAiKSwgQVNDSUlMaXRlcmFsKCJiZXN0IGZpdCIp
IH0pOwotICAgICAgICBtYXRjaGVyID0gZ2V0SW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25z
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCBtYXRjaGVycywgImxvY2FsZU1hdGNo
ZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIiLCBBU0NJSUxpdGVy
YWwoImJlc3QgZml0IikpOworICAgICAgICBtYXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihzdGF0
ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgbWF0Y2hlcnMsICJs
b2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwg
QVNDSUlMaXRlcmFsKCJiZXN0IGZpdCIpKTsKICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQo
bWF0Y2hlcikuCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gMi4gRWxzZSwgbGV0IG1hdGNoZXIgYmUgImJlc3Qg
Zml0Ii4KQEAgLTg3NiwyMyArODc2LDIzIEBAIEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlCiAgICAg
aWYgKG1hdGNoZXIgPT0gImJlc3QgZml0IikgewogICAgICAgICAvLyBhLiBMZXQgTWF0Y2hlck9w
ZXJhdGlvbiBiZSB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9uIEJlc3RGaXRTdXBwb3J0ZWRMb2NhbGVz
LgogICAgICAgICAvLyA1LiBMZXQgc3VwcG9ydGVkTG9jYWxlcyBiZSBNYXRjaGVyT3BlcmF0aW9u
KGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMpLgotICAgICAgICBzdXBwb3J0ZWRM
b2NhbGVzID0gYmVzdEZpdFN1cHBvcnRlZExvY2FsZXMoZXhlYywgYXZhaWxhYmxlTG9jYWxlcywg
cmVxdWVzdGVkTG9jYWxlcyk7CisgICAgICAgIHN1cHBvcnRlZExvY2FsZXMgPSBiZXN0Rml0U3Vw
cG9ydGVkTG9jYWxlcyhzdGF0ZSwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcyk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gNC4gRWxzZQogICAgICAgICAvLyBhLiBMZXQgTWF0
Y2hlck9wZXJhdGlvbiBiZSB0aGUgYWJzdHJhY3Qgb3BlcmF0aW9uIExvb2t1cFN1cHBvcnRlZExv
Y2FsZXMuCiAgICAgICAgIC8vIDUuIExldCBzdXBwb3J0ZWRMb2NhbGVzIGJlIE1hdGNoZXJPcGVy
YXRpb24oYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcykuCi0gICAgICAgIHN1cHBv
cnRlZExvY2FsZXMgPSBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKGV4ZWMsIGF2YWlsYWJsZUxvY2Fs
ZXMsIHJlcXVlc3RlZExvY2FsZXMpOworICAgICAgICBzdXBwb3J0ZWRMb2NhbGVzID0gbG9va3Vw
U3VwcG9ydGVkTG9jYWxlcyhzdGF0ZSwgYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cyk7CiAgICAgfQogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAv
LyA2LiBMZXQgc3Vic2V0IGJlIENyZWF0ZUFycmF5RnJvbUxpc3Qoc3VwcG9ydGVkTG9jYWxlcyku
CiAgICAgLy8gQWxyZWFkeSBhbiBhcnJheS4KIAogICAgIC8vIDcuIExldCBrZXlzIGJlIHN1YnNl
dC5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAgUHJvcGVydHlOYW1lQXJyYXkga2V5cyhleGVj
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICBzdXBwb3J0ZWRMb2NhbGVzLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKHN1cHBvcnRlZExvY2FsZXMsIGV4ZWMsIGtleXMsIEVudW1lcmF0aW9u
TW9kZSgpKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZzdGF0ZSwgUHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5ncyk7CisgICAgc3VwcG9ydGVkTG9jYWxlcy0+Z2V0T3duUHJvcGVydHlOYW1l
cyhzdXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKIAog
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjOwogICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGZh
bHNlKTsKQEAgLTkwNSwxMCArOTA1LDEwIEBAIEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYXZhaWxhYmxlTG9jYWxlCiAgICAg
ICAgIC8vIENyZWF0ZWQgYWJvdmUgZm9yIHJldXNlLgogCiAgICAgICAgIC8vIGIuIExldCBzdGF0
dXMgYmUgRGVmaW5lUHJvcGVydHlPclRocm93KHN1YnNldCwgUCwgZGVzYykuCi0gICAgICAgIHN1
cHBvcnRlZExvY2FsZXMtPmRlZmluZU93blByb3BlcnR5KHN1cHBvcnRlZExvY2FsZXMsIGV4ZWMs
IGtleXNbaV0sIGRlc2MsIHRydWUpOworICAgICAgICBzdXBwb3J0ZWRMb2NhbGVzLT5kZWZpbmVP
d25Qcm9wZXJ0eShzdXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXNbaV0sIGRlc2MsIHRydWUp
OwogCiAgICAgICAgIC8vIGMuIEFzc2VydDogc3RhdHVzIGlzIG5vdCBhYnJ1cHQgY29tcGxldGlv
bi4KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3Qu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuaAppbmRleCBmYTJh
NjM1MGVhYTU0ODU5YzkxNzRkN2Q1Y2EwY2I0YTllYjA2NzVhLi5lNTk3NWJmMGJlYjg0OWY1MmU5
MGRlNzRlZTlkY2FmOWZiYmM1NmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50bE9iamVjdC5oCkBAIC01NywxMSArNTcsMTEgQEAgcHJpdmF0ZToKICAgICBJbnRsT2JqZWN0
KFZNJiwgU3RydWN0dXJlKik7CiB9OwogCi1ib29sIGdldEludGxCb29sZWFuT3B0aW9uKEV4ZWNT
dGF0ZSosIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lLCBib29sJiB1c2VzRmFsbGJhY2sp
OwotU3RyaW5nIGdldEludGxTdHJpbmdPcHRpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSBvcHRpb25z
LCBQcm9wZXJ0eU5hbWUsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgdmFsdWVzLCBjb25zdCBjaGFy
KiBub3RGb3VuZCwgU3RyaW5nIGZhbGxiYWNrKTsKLVZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6
ZUxvY2FsZUxpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSBsb2NhbGVzKTsKK2Jvb2wgaW50bEJvb2xl
YW5PcHRpb24oRXhlY1N0YXRlJiwgSlNWYWx1ZSBvcHRpb25zLCBQcm9wZXJ0eU5hbWUsIGJvb2wm
IHVzZXNGYWxsYmFjayk7CitTdHJpbmcgaW50bFN0cmluZ09wdGlvbihFeGVjU3RhdGUmLCBKU1Zh
bHVlIG9wdGlvbnMsIFByb3BlcnR5TmFtZSwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiB2YWx1ZXMs
IGNvbnN0IGNoYXIqIG5vdEZvdW5kLCBTdHJpbmcgZmFsbGJhY2spOworVmVjdG9yPFN0cmluZz4g
Y2Fub25pY2FsaXplTG9jYWxlTGlzdChFeGVjU3RhdGUmLCBKU1ZhbHVlIGxvY2FsZXMpOwogSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gcmVzb2x2ZUxvY2FsZShjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2NhbGVz
LCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgb3B0aW9ucywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHJlbGV2YW50RXh0ZW5zaW9uS2V5cywgVmVjdG9yPFN0cmluZz4gKCpsb2NhbGVEYXRh
KShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSk7Ci1KU1ZhbHVlIHN1cHBvcnRlZExvY2Fs
ZXMoRXhlY1N0YXRlKiwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhdmFpbGFibGVMb2NhbGVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcmVxdWVzdGVkTG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zKTsK
K0pTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmLCBjb25zdCBIYXNoU2V0PFN0cmlu
Zz4mIGF2YWlsYWJsZUxvY2FsZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXF1ZXN0ZWRMb2Nh
bGVzLCBKU1ZhbHVlIG9wdGlvbnMpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>