<?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>91788</bug_id>
          
          <creation_ts>2012-07-19 14:51:28 -0700</creation_ts>
          <short_desc>Property storage should grow in reverse address direction, to support butterflies</short_desc>
          <delta_ts>2012-07-24 12:19:21 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>91796</dependson>
    
    <dependson>92086</dependson>
    
    <dependson>92088</dependson>
          <blocked>91933</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>oliver</cc>
    
    <cc>paroga</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>673932</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-19 14:51:28 -0700</bug_when>
    <thetext>This will allow us to implement butterfly objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673963</commentid>
    <comment_count>1</comment_count>
      <attachid>153360</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-19 15:14:37 -0700</bug_when>
    <thetext>Created attachment 153360
it starts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674096</commentid>
    <comment_count>2</comment_count>
      <attachid>153386</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-19 20:43:49 -0700</bug_when>
    <thetext>Created attachment 153386
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674164</commentid>
    <comment_count>3</comment_count>
      <attachid>153409</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-19 22:11:50 -0700</bug_when>
    <thetext>Created attachment 153409
it does more things than before

And now, it can even reallocate storage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675274</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-21 14:55:43 -0700</bug_when>
    <thetext>I initially wanted to reverse both the direction of storage and the direction of PropertyOffsets in one patch, &apos;cause that seemed more sensible.  But when it came to debugging (both performance and soundness), I found that the fact that I had conflated these two changes made life totally miserable.  I&apos;m now making only one of the changes (direction of storage) and making it so that if you have to do an out-of-line uncached access, there&apos;s some negation that needs to happen.  We can make the other change later if we feel like it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675275</commentid>
    <comment_count>5</comment_count>
      <attachid>153679</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-21 14:59:57 -0700</bug_when>
    <thetext>Created attachment 153679
almost done

Backing up, and putting up for EWS though I suspect the results won&apos;t be pretty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675276</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-21 15:01:18 -0700</bug_when>
    <thetext>Zoltan: this might require some ARM changes because our compact offset patching (for get_by_id) may want to patch in a negative offset.  Note that the patch doesn&apos;t yet have the right 32-bit code, so it doesn&apos;t make sense to start porting yet.  But I figured I&apos;d give you a heads up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676216</commentid>
    <comment_count>7</comment_count>
      <attachid>153912</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-23 17:29:07 -0700</bug_when>
    <thetext>Created attachment 153912
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676236</commentid>
    <comment_count>8</comment_count>
      <attachid>153912</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-07-23 17:42:21 -0700</bug_when>
    <thetext>Comment on attachment 153912
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676319</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-23 19:13:53 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/123417</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676584</commentid>
    <comment_count>10</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-07-24 02:51:26 -0700</bug_when>
    <thetext>&gt; Zoltan: this might require some ARM changes because our compact offset patching (for get_by_id) may want to patch in a negative offset.  Note that the patch doesn&apos;t yet have the right 32-bit code, so it doesn&apos;t make sense to start porting yet.  But I figured I&apos;d give you a heads up.

Thanks, I will fix it soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677100</commentid>
    <comment_count>11</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2012-07-24 12:19:21 -0700</bug_when>
    <thetext>Landed windows build fix in http://trac.webkit.org/changeset/123503</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153360</attachid>
            <date>2012-07-19 15:14:37 -0700</date>
            <delta_ts>2012-07-19 20:43:49 -0700</delta_ts>
            <desc>it starts</desc>
            <filename>butterflies_patch_1.diff</filename>
            <type>text/plain</type>
            <size>19716</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzMTQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDEyLTA3LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHJvcGVydHkgc3RvcmFnZSBhbmQgb2Zmc2V0cyBzaG91bGQgYmUgcmV2ZXJzZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNzg4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4g
IEkndmUgcHV0IGluIG1vc3Qgb2YgdGhlIHNjYWZmb2xkaW5nLCBidXQgdGhlcmUncyBzdGlsbAor
ICAgICAgICBtb3JlIG1hZ2ljIHRoYXQgbmVlZHMgdG8gYmUgZG9uZS4KKworICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVH
ZXREaXJlY3RPZmZzZXQpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0Rm9yTG9jYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvUHJvcGVydHlPZmZzZXQuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OmNo
ZWNrT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6aXNJbmxpbmVPZmZzZXQpOgorICAgICAgICAoSlND
Ojppc091dE9mTGluZU9mZnNldCk6CisgICAgICAgIChKU0M6Om9mZnNldEluT3V0T2ZMaW5lU3Rv
cmFnZSk6CisgICAgICAgIChKU0M6Om9mZnNldEluUmVzcGVjdGl2ZVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpudW1iZXJPZklubGluZVNsb3RzRm9yTGFzdE9mZnNldEluS25vd25GaW5hbE9iamVj
dCk6CisgICAgICAgIChKU0M6Om51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6bnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQpOgorICAgICAgICAoSlND
OjpuZXh0UHJvcGVydHlPZmZzZXRGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aW5saW5lU2l6ZUZvcktub3duRmluYWxPYmplY3Qp
OgorICAgICAgICAoU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaXJzdFZh
bGlkT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpsYXN0VmFsaWRPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmlzVmFsaWRPZmZzZXQpOgorCiAyMDEyLTA3LTE5ICBN
YXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWcgZml4ZXMgYW5kIGVu
aGFuY2VtZW50cyBmb3IgT2ZmbGluZUFTTSBhbm5vdGF0aW9uIHN5c3RlbS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMTIzMDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5MywxMiArMzg5MywxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6
b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoR2xvYmFsUmVzb2x2ZUluZm8sIG9mZnNldCkpLCByZXNvbHZlSW5mb0dQUik7CiAj
aWYgREZHX0VOQUJMRShKSVRfQVNTRVJUKQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc091
dE9mTGluZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWws
IHJlc29sdmVJbmZvR1BSLCBUcnVzdGVkSW1tMzIoaW5saW5lU3RvcmFnZUNhcGFjaXR5KSk7Cisg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzT3V0T2ZMaW5lID0gbV9qaXQuYnJhbmNoMzIoSklU
Q29tcGlsZXI6Okxlc3NUaGFuLCByZXNvbHZlSW5mb0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAg
ICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogICAgICAgICBpc091dE9mTGluZS5saW5rKCZtX2pp
dCk7CiAjZW5kaWYKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgo
cmVzdWx0UGF5bG9hZEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykgLSBp
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1Zh
bHVlKSkpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkgLSBpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgKiBzdGF0aWNfY2FzdDxwdHJkaWZm
X3Q+KHNpemVvZihKU1ZhbHVlKSkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0UGF5bG9hZEdQUiwgcmVzb2x2ZUlu
Zm9HUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCByZXNvbHZl
SW5mb0dQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKIAog
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTIzMDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg4MiwxMiArMzg4Miwx
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8v
IEZhc3QgY2FzZQogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVz
b2x2ZUluZm9HUFIsIE9CSkVDVF9PRkZTRVRPRihHbG9iYWxSZXNvbHZlSW5mbywgb2Zmc2V0KSks
IHJlc29sdmVJbmZvR1BSKTsKICNpZiBERkdfRU5BQkxFKEpJVF9BU1NFUlQpCi0gICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzT3V0T2ZMaW5lID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6
OkdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzb2x2ZUluZm9HUFIsIFRydXN0ZWRJbW0zMihpbmxpbmVT
dG9yYWdlQ2FwYWNpdHkpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPdXRPZkxpbmUg
PSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6TGVzc1RoYW4sIHJlc29sdmVJbmZvR1BSLCBU
cnVzdGVkSW1tMzIoMCkpOwogICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAgICAgICAgIGlz
T3V0T2ZMaW5lLmxpbmsoJm1faml0KTsKICNlbmRpZgorICAgICAgICBtX2ppdC5zaWduRXh0ZW5k
MzJUb1B0cihyZXNvbHZlSW5mb0dQUiwgcmVzb2x2ZUluZm9HUFIpOwogICAgICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNPYmplY3Q6Om9m
ZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJ
VENvbXBpbGVyOjpTY2FsZVB0ciwgLWlubGluZVN0b3JhZ2VDYXBhY2l0eSAqIHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BS
LCBKSVRDb21waWxlcjo6U2NhbGVQdHIpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAJKHJldmlzaW9uIDEyMzAyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTYsMjIgKzEwMTYs
MjIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgIEFTU0VS
VChzaXplb2YoSlNWYWx1ZSkgPT0gOCk7CiAgICAgCiAgICAgaWYgKGZpbmFsT2JqZWN0TW9kZSA9
PSBNYXlCZUZpbmFsKSB7Ci0gICAgICAgIEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihMZXNzVGhh
biwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoaW5saW5lU3RvcmFnZUNhcGFjaXR5KSk7CisgICAgICAg
IEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1
c3RlZEltbTMyKDApKTsKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpv
ZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIGJhc2UpOwogICAgICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAgICAgICAgIGlzSW5saW5lLmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tUHRyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIGlubGluZVN0b3Jh
Z2VDYXBhY2l0eSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBiYXNlKTsKKyAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW1QdHIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgYmFz
ZSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9IGVsc2UgewogI2lmICFBU1NFUlRf
RElTQUJMRUQKLSAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFu
T3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoaW5saW5lU3RvcmFnZUNhcGFjaXR5KSk7Cisg
ICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihMZXNzVGhhbiwgb2Zmc2V0LCBUcnVz
dGVkSW1tMzIoMCkpOwogICAgICAgICBicmVha3BvaW50KCk7CiAgICAgICAgIGlzT3V0T2ZMaW5l
LmxpbmsodGhpcyk7CiAjZW5kaWYKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2Jq
ZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIGJhc2UpOwogICAgIH0KLSAgICBsb2Fk
MzIoQmFzZUluZGV4KGJhc2UsIG9mZnNldCwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpIC0gaW5saW5lU3RvcmFnZUNhcGFjaXR5ICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdFBheWxvYWQpOwotICAgIGxvYWQzMihCYXNlSW5kZXgo
YmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSAtIGlubGluZVN0b3JhZ2VDYXBhY2l0eSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
LCByZXN1bHRUYWcpOworICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQ
YXlsb2FkKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KGJhc2UsIG9mZnNldCwgVGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMjMwMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDIxICsxNTcs
MjIgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0ZQogICAgIEFTU0VS
VChzaXplb2YoSlNWYWx1ZSkgPT0gOCk7CiAgICAgCiAgICAgaWYgKGZpbmFsT2JqZWN0TW9kZSA9
PSBNYXlCZUZpbmFsKSB7Ci0gICAgICAgIEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihMZXNzVGhh
biwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoaW5saW5lU3RvcmFnZUNhcGFjaXR5KSk7CisgICAgICAg
IEp1bXAgaXNJbmxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1
c3RlZEltbTMyKDApKTsKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0Ojpv
ZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2gpOwogICAgICAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CiAgICAgICAgIGlzSW5saW5lLmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgaW5saW5lU3Rv
cmFnZUNhcGFjaXR5ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGJhc2UsIHNjcmF0Y2gpOwor
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSksIGJhc2UsIHNjcmF0Y2gpOwogICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgfSBl
bHNlIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGlubGluZVN0
b3JhZ2VDYXBhY2l0eSkpOworICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoTGVz
c1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgYnJlYWtwb2ludCgpOwog
ICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwogI2VuZGlmCiAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBzY3Jh
dGNoKTsKICAgICB9Ci0gICAgbG9hZFB0cihCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBTY2Fs
ZVB0ciwgLWlubGluZVN0b3JhZ2VDYXBhY2l0eSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKEpTVmFsdWUpKSksIHJlc3VsdCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBv
ZmZzZXQpOworICAgIGxvYWRQdHIoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgU2NhbGVQdHIp
LCByZXN1bHQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAx
MjMwMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtOTIwLDIxICs5MjAsMjEgQEAgX2xsaW50X29w
X2lzX3N0cmluZzoKIAogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25O
b3RGaW5hbChwcm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQot
ICAgIGFzc2VydChtYWNybyAob2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFn
ZUNhcGFjaXR5LCBvayBlbmQpCisgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlsdCBwcm9wZXJ0eU9m
ZnNldCwgMCwgb2sgZW5kKQogICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vb
b2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKLSAgICBsb2FkaSBUYWdPZmZzZXQg
LSA4ICogSW5saW5lU3RvcmFnZUNhcGFjaXR5W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zm
c2V0LCA4XSwgdGFnCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNldCAtIDggKiBJbmxpbmVTdG9yYWdl
Q2FwYWNpdHlbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCisg
ICAgbG9hZGkgVGFnT2Zmc2V0W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwg
dGFnCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9m
ZnNldCwgOF0sIHBheWxvYWQKIGVuZAogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zm
c2V0KHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBheWxvYWQpCi0gICAg
YmlsdCBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCAuaXNJbmxpbmUKKyAg
ICBiaWd0ZXEgcHJvcGVydHlPZmZzZXQsIDAsIC5pc0lubGluZQogICAgIGxvYWRwIEpTT2JqZWN0
OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UK
ICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lu
bGluZVN0b3JhZ2UgKyBJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgKiA4LCBvYmplY3RBbmRTdG9yYWdl
CisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UsIG9iamVjdEFuZFN0b3Jh
Z2UKIC5yZWFkeToKLSAgICBsb2FkaSBUYWdPZmZzZXQgLSA4ICogSW5saW5lU3RvcmFnZUNhcGFj
aXR5W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCi0gICAgbG9hZGkg
UGF5bG9hZE9mZnNldCAtIDggKiBJbmxpbmVTdG9yYWdlQ2FwYWNpdHlbb2JqZWN0QW5kU3RvcmFn
ZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCisgICAgbG9hZGkgVGFnT2Zmc2V0W29iamVj
dEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9hZE9m
ZnNldFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKIGVuZAog
CiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNp
b24gMTIzMDI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTc3OSwxOSArNzc5LDIxIEBAIF9sbGludF9v
cF9pc19zdHJpbmc6CiAKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldEtub3du
Tm90RmluYWwocHJvcGVydHlPZmZzZXQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQotICAgIGFz
c2VydChtYWNybyAob2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFj
aXR5LCBvayBlbmQpCisgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlsdCBwcm9wZXJ0eU9mZnNldCwg
MCwgb2sgZW5kKQorICAgIHN4aTJwIHByb3BlcnR5T2Zmc2V0LCBwcm9wZXJ0eU9mZnNldAogICAg
IGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9i
amVjdEFuZFN0b3JhZ2UKLSAgICBsb2FkcCAtOCAqIElubGluZVN0b3JhZ2VDYXBhY2l0eVtvYmpl
Y3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHZhbHVlCisgICAgbG9hZHAgW29iamVj
dEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdmFsdWUKIGVuZAogCiBtYWNybyBsb2Fk
UHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdl
LCB2YWx1ZSkKLSAgICBiaWx0IHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHks
IC5pc0lubGluZQorICAgIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldCwgMCwgLmlzSW5saW5lCiAgICAg
bG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2Jq
ZWN0QW5kU3RvcmFnZQogICAgIGptcCAucmVhZHkKIC5pc0lubGluZToKLSAgICBhZGRwIEpTRmlu
YWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSArIElubGluZVN0b3JhZ2VDYXBhY2l0eSAqIDgsIG9i
amVjdEFuZFN0b3JhZ2UKKyAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSwg
b2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRwIC04ICogSW5saW5lU3RvcmFnZUNh
cGFjaXR5W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdmFsdWUKKyAgICBz
eGkycCBwcm9wZXJ0eU9mZnNldCwgcHJvcGVydHlPZmZzZXQKKyAgICBsb2FkcCBbb2JqZWN0QW5k
U3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB2YWx1ZQogZW5kCiAKIG1hY3JvIHJlc29sdmVH
bG9iYWwoc2l6ZSwgc2xvdykKQEAgLTExNjIsNyArMTE2NCw3IEBAIF9sbGludF9vcF9nZXRfYnlf
cG5hbWU6CiAgICAgc3ViaSAxLCB0MwogICAgIGJpYWVxIHQzLCBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yOjptX251bUNhY2hlYWJsZVNsb3RzW3QxXSwgLm9wR2V0QnlQbmFtZVNsb3cKICAgICBhZGRp
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6Om1fb2Zmc2V0QmFzZVt0MV0sIHQzCi0gICAgbG9hZFBy
b3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MywgdDAsIHQwKQorICAgIGxvYWRQcm9wZXJ0eUF0VmFy
aWFibGVPZmZzZXRLbm93bk5vdEZpbmFsKHQzLCB0MCwgdDApCiAgICAgbG9hZGlzIDhbUEIsIFBD
LCA4XSwgdDEKICAgICBzdG9yZXAgdDAsIFtjZnIsIHQxLCA4XQogICAgIGRpc3BhdGNoKDcpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEy
MzAyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyNyw3ICsyMjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IGlmIChvZmZzZXRJbklubGluZVN0b3JhZ2UgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGlubGluZVN0
b3JhZ2VDYXBhY2l0eSkpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2V0SW5JbmxpbmVT
dG9yYWdlOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvY2F0
aW9uIC0gb3V0T2ZMaW5lU3RvcmFnZSgpICsgZmlyc3RPdXRPZkxpbmVPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gbG9jYXRpb24gLSBvdXRPZkxpbmVTdG9yYWdlKCk7CiAgICAgICAg
ICAgICB2YWxpZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUo
KSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEy
MzAyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB0eXBl
ZGVmIGludCBQcm9wZXJ0eU9mZnNldDsKIAotc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0IGlu
dmFsaWRPZmZzZXQgPSAtMTsKKy8vIFByb3BlcnR5IG9mZnNldHMsIHdoZXJlIEsgPSBpbmxpbmVT
dG9yYWdlQ2FwYWNpdHk6CisvLyAgICAgICAgb2Zmc2V0ID4gIEsgICAgICAgICBlcnJvciEgeW91
IHNob3VsZCBub3Qgc2VlIHRoaXMgdmFsdWUuCisvLyAgICAgICAgb2Zmc2V0ID0gIEsgICAgICAg
ICBpbnZhbGlkIG9mZnNldCAocHJvcGVydHkgbm90IGZvdW5kKQorLy8gICAwIDw9IG9mZnNldCA8
ICBLICAgICAgICAgaW5saW5lIHN0b3JhZ2UKKy8vICAgICAgICBvZmZzZXQgPCAgMCAgICAgICAg
IG91dC1vZi1saW5lIHN0b3JhZ2UKKy8vCisvLyBBc3N1bWluZyA2NC1iaXQgYW5kIGEgZmluYWwg
b2JqZWN0LCBwcm9wZXJ0eSBvZmZzZXRzIHByb2NlZWQgYXMgZm9sbG93czoKKy8vIDQgICAgIG5v
dCBhbiBvZmZzZXQKKy8vIDMgICAgIGZpcnN0IGlubGluZSBzbG90CisvLyAyICAgICBzZWNvbmQg
aW5saW5lIHNsb3QKKy8vIDEgICAgIHRoaXJkIGlubGluZSBzbG90CisvLyAwICAgICBmb3VydGgg
aW5saW5lIHNsb3QKKy8vIC0xICAgIGZpcnN0IG91dC1vZi1saW5lIHNsb3QsIGZpZnRoIHNsb3Qg
b3ZlcmFsbAorLy8gLTIgICAgc2Vjb25kIG91dC1vZi1saW5lIHNsb3QsIHNpeHRoIHNsb3Qgb3Zl
cmFsbAorLy8gLi4uIGFuZCBzbyBvbi4KKy8vCisvLyBUaGUgcmF0aW9uYWxlIGlzIGFzIGZvbGxv
d3M6CisvLyAtIFRoZXJlIGlzIGEgc2ltcGxlIGxpbmVhciBwcm9ncmVzc2lvbiBvZiBwcm9wZXJ0
eSBvZmZzZXRzLCB3aGljaCBtYWtlcworLy8gICBpdCBjaGVhcCBhbmQgZWFzeSB0byBpbXBsZW1l
bnQgcHJvcGVydHkgZW51bWVyYXRpb24uCisvLyAtIEdpdmVuIGFuIG9mZnNldCBhbmQgYSBwb2lu
dGVyIHRvIHRoZSBwcm9wZXJ0eSBzdG9yYWdlLCBpdCBpcyBlYXN5IHRvCisvLyAgIGxvb2t1cCB0
aGUgcHJvcGVydHkgd2l0aG91dCB0b28gbXVjaCBhcml0aG1ldGljLgorLy8gLSBJdCBhbGxvd3Mg
Zm9yIGEgZnV0dXJlIHdoZXJlIGlubGluZSBzdG9yYWdlIGNhcGFjaXR5IHZhcmllcywgYnkKKy8v
ICAganVzdCBjaGFuZ2luZyB3aGF0IHRoZSBmaXJzdCBvZmZzZXQgdXNlZCBmb3IgaW5saW5lIHN0
b3JhZ2UgaXMuCisKK3N0YXRpYyBjb25zdCBQcm9wZXJ0eU9mZnNldCBpbnZhbGlkT2Zmc2V0ID0g
SU5MSU5FX1NUT1JBR0VfQ0FQQUNJVFk7CiBzdGF0aWMgY29uc3QgUHJvcGVydHlPZmZzZXQgaW5s
aW5lU3RvcmFnZUNhcGFjaXR5ID0gSU5MSU5FX1NUT1JBR0VfQ0FQQUNJVFk7Ci1zdGF0aWMgY29u
c3QgUHJvcGVydHlPZmZzZXQgZmlyc3RPdXRPZkxpbmVPZmZzZXQgPSBpbmxpbmVTdG9yYWdlQ2Fw
YWNpdHk7CiAKIC8vIERlY2xhcmUgYWxsIG9mIHRoZSBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IHRl
bmQgdG8gZG8gZm9yd2FyZCBjYWxscy4KIGlubGluZSB2b2lkIGNoZWNrT2Zmc2V0KFByb3BlcnR5
T2Zmc2V0KTsKQEAgLTY0LDE0ICs4NywxNCBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgZmlyc3RQ
cm9wZXJ0eU9mZnNlCiBpbmxpbmUgdm9pZCBjaGVja09mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgQVNTRVJUKG9mZnNldCA+PSBp
bnZhbGlkT2Zmc2V0KTsKKyAgICBBU1NFUlQob2Zmc2V0IDw9IGlubGluZVN0b3JhZ2VDYXBhY2l0
eSk7CiB9CiAKIGlubGluZSB2b2lkIGNoZWNrT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
SlNUeXBlIHR5cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAgICAgVU5VU0VEX1BB
UkFNKHR5cGUpOwotICAgIEFTU0VSVChvZmZzZXQgPj0gaW52YWxpZE9mZnNldCk7CisgICAgQVNT
RVJUKG9mZnNldCA8PSBpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpOwogICAgIEFTU0VSVChvZmZzZXQg
PT0gaW52YWxpZE9mZnNldAogICAgICAgICAgICB8fCB0eXBlID09IEZpbmFsT2JqZWN0VHlwZQog
ICAgICAgICAgICB8fCBpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKQEAgLTk4LDEzICsxMjEs
MTMgQEAgaW5saW5lIGJvb2wgaXNWYWxpZE9mZnNldChQcm9wZXJ0eU9mZnNldAogaW5saW5lIGJv
b2wgaXNJbmxpbmVPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGNoZWNrT2Zm
c2V0KG9mZnNldCk7Ci0gICAgcmV0dXJuIG9mZnNldCA8IGlubGluZVN0b3JhZ2VDYXBhY2l0eTsK
KyAgICByZXR1cm4gb2Zmc2V0ID49IDA7CiB9CiAKIGlubGluZSBib29sIGlzT3V0T2ZMaW5lT2Zm
c2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBjaGVja09mZnNldChvZmZzZXQpOwot
ICAgIHJldHVybiAhaXNJbmxpbmVPZmZzZXQob2Zmc2V0KTsKKyAgICByZXR1cm4gb2Zmc2V0IDwg
MDsKIH0KIAogaW5saW5lIHNpemVfdCBvZmZzZXRJbklubGluZVN0b3JhZ2UoUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQpAQCAtMTE4LDI5ICsxNDEsMzggQEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbk91
dE9mTGluZVN0b3JhZ2UoUAogewogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNT
RVJUKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNldCkpOwotICAgIHJldHVybiBvZmZzZXQgLSBmaXJz
dE91dE9mTGluZU9mZnNldDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KG9mZnNldCkpOwogfQogCiBpbmxpbmUgc2l6ZV90IG9mZnNldEluUmVz
cGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewotICAgIGlmIChpc0lubGlu
ZU9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9m
ZnNldCk7Ci0gICAgcmV0dXJuIG9mZnNldEluT3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpOworICAg
IHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4o
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQpKTsKK30KKworaW5saW5lIHNpemVfdCBudW1i
ZXJPZklubGluZVNsb3RzRm9yTGFzdE9mZnNldEluS25vd25GaW5hbE9iamVjdChQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCit7CisgICAgaWYgKG9mZnNldCA8PSAwKQorICAgICAgICByZXR1cm4gaW5s
aW5lU3RvcmFnZUNhcGFjaXR5OworICAgIHJldHVybiBpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSBv
ZmZzZXQ7CiB9CiAKIGlubGluZSBzaXplX3QgbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RP
ZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGNoZWNrT2Zmc2V0KG9mZnNldCk7
Ci0gICAgaWYgKG9mZnNldCA8IGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KQorICAgIGlmIChvZmZzZXQg
Pj0gMCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG9mZnNldCAtIGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0ICsgMTsKKyAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0
KTsKIH0KIAogaW5saW5lIHNpemVfdCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIEpTVHlwZSB0eXBlKQogewogICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwg
dHlwZSk7Ci0gICAgaWYgKHR5cGUgPT0gRmluYWxPYmplY3RUeXBlKQotICAgICAgICByZXR1cm4g
b2Zmc2V0ICsgMTsKKyAgICBpZiAodHlwZSA9PSBGaW5hbE9iamVjdFR5cGUpIHsKKyAgICAgICAg
aW50IHJlc3VsdCA9IGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIG9mZnNldDsKKyAgICAgICAgQVNT
RVJUKHJlc3VsdCA+PSAwKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgcmV0
dXJuIG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG9mZnNldCk7CiB9CiAKQEAg
LTE0OCw4ICsxODAsOCBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgbmV4dFByb3BlcnR5T2Zmc2V0
CiB7CiAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCB0eXBlKTsKICAgICBpZiAodHlwZSAhPSBGaW5h
bE9iamVjdFR5cGUgJiYgb2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCi0gICAgICAgIHJldHVybiBm
aXJzdE91dE9mTGluZU9mZnNldDsKLSAgICByZXR1cm4gb2Zmc2V0ICsgMTsKKyAgICAgICAgcmV0
dXJuIC0xOworICAgIHJldHVybiBvZmZzZXQgLSAxOwogfQogCiBpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgZmlyc3RQcm9wZXJ0eU9mZnNldEZvcihKU1R5cGUgdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjMwMjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjA2LDEyICsyMDYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IEFTU0VSVChtX3R5cGVJbmZvLnR5cGUoKSA9PSBGaW5hbE9iamVjdFR5cGUpOwogICAgICAgICAg
ICAgdW5zaWduZWQgcmVzdWx0OwotICAgICAgICAgICAgaWYgKG1fcHJvcGVydHlUYWJsZSkKKyAg
ICAgICAgICAgIGlmIChtX3Byb3BlcnR5VGFibGUpIHsKICAgICAgICAgICAgICAgICByZXN1bHQg
PSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtX29mZnNldCArIDE7Ci0gICAgICAgICAgICBp
ZiAocmVzdWx0ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZVN0b3JhZ2VDYXBhY2l0eSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZVN0b3JhZ2VDYXBhY2l0eTsKKyAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZVN0b3JhZ2VD
YXBhY2l0eSkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlubGluZVN0b3JhZ2VDYXBh
Y2l0eTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bWJl
ck9mSW5saW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaW5saW5lU2l6ZSgpIGNvbnN0
CkBAIC0yMzIsMjYgKzIzMiwyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVy
biBtX291dE9mTGluZUNhcGFjaXR5ICsgaW5saW5lQ2FwYWNpdHkoKTsKICAgICAgICAgfQogCisg
ICAgICAgIC8vIE9mZnNldHMgcHJvY2VlZCBpbiB0aGUgbmVnYXRpdmUgZGlyZWN0aW9uLiBIZW5j
ZSwgd2Ugd2lsbCBhbHdheXMKKyAgICAgICAgLy8gaGF2ZTogZmlyc3RWYWx1ZU9mZnNldCgpID49
IGxhc3RWYWxpZE9mZnNldCgpLgogICAgICAgICBQcm9wZXJ0eU9mZnNldCBmaXJzdFZhbGlkT2Zm
c2V0KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGhhc0lubGluZVN0b3JhZ2Uo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBpbmxpbmVT
dG9yYWdlQ2FwYWNpdHk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZVN0b3JhZ2VDYXBh
Y2l0eSAtIDE7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgUHJv
cGVydHlPZmZzZXQgbGFzdFZhbGlkT2Zmc2V0KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKG1fcHJvcGVydHlUYWJsZSkgewotICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IHNpemUgPSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKKyAgICAgICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCByZXN1bHQgPSAtbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0
eVN0b3JhZ2VTaXplKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFoYXNJbmxpbmVTdG9yYWdlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgKz0gaW5saW5lU3RvcmFnZUNhcGFjaXR5OwotICAg
ICAgICAgICAgICAgIHJldHVybiBzaXplIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ICs9IGlubGluZVN0b3JhZ2VDYXBhY2l0eTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgICAgICB9
CiAgICAgICAgIGJvb2wgaXNWYWxpZE9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIGNvbnN0
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBvZmZzZXQgPj0gZmlyc3RWYWxpZE9mZnNl
dCgpCi0gICAgICAgICAgICAgICAgJiYgb2Zmc2V0IDw9IGxhc3RWYWxpZE9mZnNldCgpOworICAg
ICAgICAgICAgcmV0dXJuIG9mZnNldCA8PSBmaXJzdFZhbGlkT2Zmc2V0KCkKKyAgICAgICAgICAg
ICAgICAmJiBvZmZzZXQgPj0gbGFzdFZhbGlkT2Zmc2V0KCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBnZXQoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153386</attachid>
            <date>2012-07-19 20:43:49 -0700</date>
            <delta_ts>2012-07-19 22:11:50 -0700</delta_ts>
            <desc>more</desc>
            <filename>butterflies_patch_2.diff</filename>
            <type>text/plain</type>
            <size>35887</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzMTY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEyLTA3LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHJvcGVydHkgc3RvcmFnZSBhbmQgb2Zmc2V0cyBzaG91bGQgYmUgcmV2ZXJzZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNzg4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4g
SXQncyBzdGFydGluZyB0byBkbyB0aGluZ3MgYnV0IHN0aWxsIG5lZWRzIG1vcmUgdGhpbmdzLgor
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVz
c09mZnNldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpyZXBhdGNo
Q29tcGFjdCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KToKKyAgICAgICAgKiBkZmcvREZHT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
OjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRyYW5z
aXRpb25TdHViKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUpOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9wbmFtZSk6CisgICAg
ICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjp0cnlDYWNo
ZUdldEJ5SUQpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlv
bik6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eVRhYmxlOjpuZXh0T2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3Bl
cnR5T2Zmc2V0Lmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpjaGVja09mZnNldCk6
CisgICAgICAgIChKU0M6OmlzSW5saW5lT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6aXNPdXRPZkxp
bmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpvZmZzZXRJblJlc3BlY3RpdmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6bnVt
YmVyT2ZJbmxpbmVTbG90c0Zvckxhc3RPZmZzZXRJbktub3duRmluYWxPYmplY3QpOgorICAgICAg
ICAoSlNDOjpudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldCk6CisgICAgICAgIChK
U0M6Om51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6bmV4dFByb3Bl
cnR5T2Zmc2V0Rm9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmlubGluZVNpemVGb3JL
bm93bkZpbmFsT2JqZWN0KToKKyAgICAgICAgKFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Zmlyc3RWYWxpZE9mZnNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bGFz
dFZhbGlkT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc1ZhbGlkT2Zmc2V0KToK
KwogMjAxMi0wNy0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IEZhc3QgcGF0aCBvZiBzdG9yYWdlIHJlc2l6ZSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHByb3Bl
cnR5IHN0b3JhZ2UgcmVhbGxvY2F0aW9uLCBzaW5jZSBpdCBpcyBvbmx5IHVzZWZ1bCBmb3IgYXJy
YXlzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxMjMxNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDEwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFg4NkFzc2Vt
Ymxlcjo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKICAgICB0eXBlZGVmIFg4NkFzc2VtYmxl
cjo6WE1NUmVnaXN0ZXJJRCBYTU1SZWdpc3RlcklEOwogICAgIAotICAgIHN0YXRpYyBjb25zdCBp
bnQgTWF4aW11bUNvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldCA9IDEyNzsKKyAgICBzdGF0
aWMgYm9vbCBpc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChwdHJkaWZmX3QgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gLTEyOCAmJiB2YWx1ZSA8PSAxMjc7Cisg
ICAgfQogCiAgICAgZW51bSBSZWxhdGlvbmFsQ29uZGl0aW9uIHsKICAgICAgICAgRXF1YWwgPSBY
ODZBc3NlbWJsZXI6OkNvbmRpdGlvbkUsCkBAIC00OTQsOCArNDk3LDcgQEAgcHVibGljOgogICAg
IAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJlbENv
bXBhY3QgZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFT
U0VSVCh2YWx1ZSA+PSAwKTsKLSAgICAgICAgQVNTRVJUKHZhbHVlIDwgTWF4aW11bUNvbXBhY3RQ
dHJBbGlnbmVkQWRkcmVzc09mZnNldCk7CisgICAgICAgIEFTU0VSVChpc0NvbXBhY3RQdHJBbGln
bmVkQWRkcmVzc09mZnNldCh2YWx1ZSkpOwogICAgICAgICBBc3NlbWJsZXJUeXBlX1Q6OnJlcGF0
Y2hDb21wYWN0KGRhdGFMYWJlbENvbXBhY3QuZGF0YUxvY2F0aW9uKCksIHZhbHVlKTsKICAgICB9
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDEyMzE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MjQsNyArMTgyNCw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdCh2b2lkKiB3aGVy
ZSwgaW50MzJfdCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZSA+PSAwKTsKKyAg
ICAgICAgQVNTRVJUKHZhbHVlID49IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWluKCkp
OwogICAgICAgICBBU1NFUlQodmFsdWUgPD0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ4X3Q+Ojpt
YXgoKSk7CiAgICAgICAgIHNldEludDgod2hlcmUsIHZhbHVlKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyMzE2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNDgsNyArMTI0OCw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQWxsb2NhdGVQcm8KICAgICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKCFnbG9iYWxEYXRhLmhl
YXAudHJ5QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihK
U1ZhbHVlKSwgJnJlc3VsdCkpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlc3VsdCkgKyBpbml0aWFsT3V0T2ZMaW5l
Q2FwYWNpdHkgKyAxKTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBuZXdTaXplKQpAQCAtMTI1
Nyw3ICsxMjU3LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBybwog
ICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0
b3JhZ2UobmV3U2l6ZSwgJnJlc3VsdCkpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlc3VsdCkgKyBpbml0aWFsT3V0
T2ZMaW5lQ2FwYWNpdHkgKyAxKTsKIH0KIAogZG91YmxlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Rk1vZE9uSW50cyhpbnQzMl90IGEsIGludDMyX3QgYikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTIzMTY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDcgKzMw
MSw4IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKIAogICAgIC8v
IE9wdGltaXplIHNlbGYgYWNjZXNzLgogICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSB7Ci0gICAgICAgIGlmICgoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSAhPSBQcm9wZXJ0
eVNsb3Q6OlZhbHVlKSB8fCAoKHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkp
ID4gKHVuc2lnbmVkKU1hY3JvQXNzZW1ibGVyOjpNYXhpbXVtQ29tcGFjdFB0ckFsaWduZWRBZGRy
ZXNzT2Zmc2V0KSkgeworICAgICAgICBpZiAoKHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgIT0g
UHJvcGVydHlTbG90OjpWYWx1ZSkKKyAgICAgICAgICAgIHx8ICFNYWNyb0Fzc2VtYmxlcjo6aXND
b21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSAqIHNpemVv
ZihKU1ZhbHVlKSkpIHsKICAgICAgICAgICAgIGRmZ1JlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC04MjQsNyArODI1LDcgQEAgc3Rh
dGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAgc3R1YkppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsK
ICAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIHN0
dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9j
YXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0
dWJKaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0
Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+
IG9sZFNpemUpOwpAQCAtODM1LDExICs4MzYsMTEgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5z
aXRpb25TdHViKAogICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNv
cGllZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKICAgICAgICAgICAgIHN0dWJKaXQu
bmVnUHRyKHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9h
ZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3ViUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAg
IHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFs
dWUpKSwgc2NyYXRjaEdQUjEpOwogICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9
IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2
YWlsYWJsZQotICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xk
U2l6ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjMsIG9mZnNldCksIHNj
cmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIy
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgb2Zmc2V0KSk7CisgICAgICAg
ICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAg
ICAgIHN0dWJKaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywg
LShvZmZzZXQgKyAxKSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICBzdHViSml0LnN0
b3JlUHRyKHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwg
LShvZmZzZXQgKyAxKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxMjMxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAxLDEyICsz
OTAxLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpT
T2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdFBheWxvYWRHUFIpOwog
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzb2x2ZUluZm9HUFIs
IE9CSkVDVF9PRkZTRVRPRihHbG9iYWxSZXNvbHZlSW5mbywgb2Zmc2V0KSksIHJlc29sdmVJbmZv
R1BSKTsKICNpZiBERkdfRU5BQkxFKEpJVF9BU1NFUlQpCi0gICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzT3V0T2ZMaW5lID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFu
T3JFcXVhbCwgcmVzb2x2ZUluZm9HUFIsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNp
dHkpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPdXRPZkxpbmUgPSBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6TGVzc1RoYW4sIHJlc29sdmVJbmZvR1BSLCBUcnVzdGVkSW1tMzIo
MCkpOwogICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAgICAgICAgIGlzT3V0T2ZMaW5lLmxp
bmsoJm1faml0KTsKICNlbmRpZgotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkJh
c2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSAtIGlubGluZVN0b3JhZ2VDYXBhY2l0eSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKEpTVmFsdWUpKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHJlc29sdmVJbmZvR1BSLCBKSVRD
b21waWxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSAtIGlubGluZVN0b3JhZ2VDYXBhY2l0eSAqIHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCBy
ZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAg
ICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIs
IHJlc29sdmVJbmZvR1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRH
UFIpOwogCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMjMxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODkwLDEy
ICszODkwLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgLy8gRmFzdCBjYXNlCiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRk
cmVzcyhyZXNvbHZlSW5mb0dQUiwgT0JKRUNUX09GRlNFVE9GKEdsb2JhbFJlc29sdmVJbmZvLCBv
ZmZzZXQpKSwgcmVzb2x2ZUluZm9HUFIpOwogI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPdXRPZkxpbmUgPSBtX2ppdC5icmFuY2gzMihKSVRD
b21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCByZXNvbHZlSW5mb0dQUiwgVHJ1c3RlZEltbTMy
KGlubGluZVN0b3JhZ2VDYXBhY2l0eSkpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc091
dE9mTGluZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpMZXNzVGhhbiwgcmVzb2x2ZUlu
Zm9HUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICAg
ICAgICAgaXNPdXRPZkxpbmUubGluaygmbV9qaXQpOwogI2VuZGlmCisgICAgICAgIG1faml0LnNp
Z25FeHRlbmQzMlRvUHRyKHJlc29sdmVJbmZvR1BSLCByZXNvbHZlSW5mb0dQUik7CiAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09i
amVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCByZXNvbHZlSW5m
b0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRyLCAtaW5saW5lU3RvcmFnZUNhcGFjaXR5ICogc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgcmVzb2x2
ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpTY2FsZVB0ciksIHJlc3VsdEdQUik7CiAgICAgICAgIAog
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxMjMxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1NSw3ICszMTU1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIG1faml0LnN0b3JlUHRy
KHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CiAgICAg
bV9qaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6
QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBz
Y3JhdGNoR1BSKTsKLSAgICBtX2ppdC5zdWJQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihu
ZXdTaXplKSwgc2NyYXRjaEdQUik7CisgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIAogICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMs
IG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2Ny
YXRjaEdQUikpOwpAQCAtMzE4OSwxNCArMzE4OSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVhbGxvY2F0ZVByCiAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsICZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CiAgICAgbV9qaXQubmVnUHRyKHNjcmF0
Y2hHUFIyKTsKICAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygm
Y29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjIpOwotICAg
IG1faml0LnN1YlB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNo
R1BSMik7CisgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9m
KEpTVmFsdWUpKSwgc2NyYXRjaEdQUjIpOwogICAgICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUpKTsKICAgICAvLyBXZSBo
YXZlIHNjcmF0Y2hHUFIyID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIxID0gc2NyYXRjaAotICAg
IGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXpl
b2Yodm9pZCopKSB7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
b2xkU3RvcmFnZUdQUiwgb2Zmc2V0KSwgc2NyYXRjaEdQUjEpOwotICAgICAgICBtX2ppdC5zdG9y
ZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjIsIG9mZnNl
dCkpOworICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CisgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2xkU3RvcmFnZUdQUiwgLShvZmZz
ZXQgKyAxKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQ
UjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIyLCAtKG9mZnNldCArIDEpKSk7CiAg
ICAgfQogICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTIzMTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxNiwy
MiArMTAxNiwyMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAg
ICAgQVNTRVJUKHNpemVvZihKU1ZhbHVlKSA9PSA4KTsKICAgICAKICAgICBpZiAoZmluYWxPYmpl
Y3RNb2RlID09IE1heUJlRmluYWwpIHsKLSAgICAgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMy
KExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsK
KyAgICAgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zm
c2V0LCBUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNP
YmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgYmFzZSk7CiAgICAgICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKICAgICAgICAgaXNJbmxpbmUubGluayh0aGlzKTsKLSAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW1QdHIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgaW5s
aW5lU3RvcmFnZUNhcGFjaXR5ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGJhc2UpOworICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbVB0cihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkpLCBiYXNlKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0gZWxzZSB7CiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNp
dHkpKTsKKyAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZz
ZXQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgIGJyZWFrcG9pbnQoKTsKICAgICAgICAgaXNP
dXRPZkxpbmUubGluayh0aGlzKTsKICNlbmRpZgogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgYmFzZSk7CiAgICAgfQot
ICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkgLSBpbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0UGF5bG9hZCk7Ci0gICAgbG9hZDMyKEJh
c2VJbmRleChiYXNlLCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpIC0gaW5saW5lU3RvcmFnZUNhcGFjaXR5ICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlc3VsdFRhZyk7CisgICAgbG9hZDMyKEJhc2VJbmRleChiYXNlLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSks
IHJlc3VsdFBheWxvYWQpOworICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRh
Zyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9wbmFtZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTA1Niw2ICsxMDU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3BuYW1lKEluc3RydWN0aQogICAgIGxvYWQzMihhZGRyZXNzRm9yKGkpLCByZWdUMyk7
CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9G
KEpTUHJvcGVydHlOYW1lSXRlcmF0b3IsIG1fbnVtQ2FjaGVhYmxlU2xvdHMpKSkpOworICAgIG5l
ZzMyKHJlZ1QzKTsKICAgICBhZGQzMihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvciwgbV9vZmZzZXRCYXNlKSksIHJlZ1QzKTsKICAgICBjb21waWxl
R2V0RGlyZWN0T2Zmc2V0KHJlZ1QyLCByZWdUMSwgcmVnVDAsIHJlZ1QzKTsgICAgCiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkocmV2aXNpb24gMTIzMTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NywyMSArMTU3LDIyIEBAIHZvaWQg
SklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICBBU1NFUlQoc2l6ZW9mKEpT
VmFsdWUpID09IDgpOwogICAgIAogICAgIGlmIChmaW5hbE9iamVjdE1vZGUgPT0gTWF5QmVGaW5h
bCkgewotICAgICAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1RoYW4sIG9mZnNldCwg
VHJ1c3RlZEltbTMyKGlubGluZVN0b3JhZ2VDYXBhY2l0eSkpOworICAgICAgICBKdW1wIGlzSW5s
aW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMigw
KSk7CiAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRP
ZkxpbmVTdG9yYWdlKCkpLCBzY3JhdGNoKTsKICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwog
ICAgICAgICBpc0lubGluZS5saW5rKHRoaXMpOwotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIGlubGluZVN0b3JhZ2VDYXBhY2l0
eSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBiYXNlLCBzY3JhdGNoKTsKKyAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCBiYXNl
LCBzY3JhdGNoKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0gZWxzZSB7CiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNp
dHkpKTsKKyAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZz
ZXQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgIGJyZWFrcG9pbnQoKTsKICAgICAgICAgaXNP
dXRPZkxpbmUubGluayh0aGlzKTsKICNlbmRpZgogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaCk7CiAgICAg
fQotICAgIGxvYWRQdHIoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgU2NhbGVQdHIsIC1pbmxp
bmVTdG9yYWdlQ2FwYWNpdHkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1ZhbHVl
KSkpLCByZXN1bHQpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAg
ICBsb2FkUHRyKEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFNjYWxlUHRyKSwgcmVzdWx0KTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCkBAIC0xOTQsNiArMTk1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3BuYW1lKEluc3RydWN0aQogICAgIGxvYWQzMihhZGRyZXNzRm9yKGkpLCByZWdUMyk7CiAgICAg
c3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IsIG1fbnVtQ2FjaGVhYmxlU2xvdHMpKSkpOworICAgIG5lZzMyKHJl
Z1QzKTsKICAgICBhZGQzMihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvciwgbV9vZmZzZXRCYXNlKSksIHJlZ1QzKTsKICAgICBjb21waWxlR2V0RGly
ZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMCwgcmVnVDMsIHJlZ1QxKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEyMzE2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzIsNyAr
OTMyLDggQEAgTkVWRVJfSU5MSU5FIHZvaWQgSklUVGh1bmtzOjp0cnlDYWNoZUdldAogICAgIGlm
IChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7CiAgICAgICAgIC8vIHNldCB0aGlzIHVw
LCBzbyBkZXJlZlN0cnVjdHVyZXMgY2FuIGRvIGl0J3Mgam9iLgogICAgICAgICBzdHViSW5mby0+
aW5pdEdldEJ5SWRTZWxmKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICBpZiAoKHNsb3QuY2FjaGVkUHJvcGVy
dHlUeXBlKCkgIT0gUHJvcGVydHlTbG90OjpWYWx1ZSkgfHwgKChzbG90LmNhY2hlZE9mZnNldCgp
ICogc2l6ZW9mKEpTVmFsdWUpKSA+ICh1bnNpZ25lZClNYWNyb0Fzc2VtYmxlcjo6TWF4aW11bUNv
bXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldCkpCisgICAgICAgIGlmICgoc2xvdC5jYWNoZWRQ
cm9wZXJ0eVR5cGUoKSAhPSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKQorICAgICAgICAgICAgfHwgIU1h
Y3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChzbG90LmNhY2hl
ZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpKSkKICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhjb2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9v
cF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIEpJVDo6
cGF0Y2hHZXRCeUlkU2VsZihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCksIHJldHVybkFkZHJlc3MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlz
aW9uIDEyMzE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsMjEgKzkyMCwyMSBAQCBfbGxp
bnRfb3BfaXNfc3RyaW5nOgogCiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRL
bm93bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBheWxv
YWQpCi0gICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVT
dG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKKyAgICBhc3NlcnQobWFjcm8gKG9rKSBiaWx0IHByb3Bl
cnR5T2Zmc2V0LCAwLCBvayBlbmQpCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3Rv
cmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRpIFRhZ09m
ZnNldCAtIDggKiBJbmxpbmVTdG9yYWdlQ2FwYWNpdHlbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVy
dHlPZmZzZXQsIDhdLCB0YWcKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0IC0gOCAqIElubGluZVN0
b3JhZ2VDYXBhY2l0eVtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxv
YWQKKyAgICBsb2FkaSBUYWdPZmZzZXRbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQs
IDhdLCB0YWcKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W29iamVjdEFuZFN0b3JhZ2UsIHByb3Bl
cnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAogZW5kCiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFi
bGVPZmZzZXQocHJvcGVydHlPZmZzZXQsIG9iamVjdEFuZFN0b3JhZ2UsIHRhZywgcGF5bG9hZCkK
LSAgICBiaWx0IHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGlu
ZQorICAgIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldCwgMCwgLmlzSW5saW5lCiAgICAgbG9hZHAgSlNP
YmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3Rv
cmFnZQogICAgIGptcCAucmVhZHkKIC5pc0lubGluZToKLSAgICBhZGRwIEpTRmluYWxPYmplY3Q6
Om1faW5saW5lU3RvcmFnZSArIElubGluZVN0b3JhZ2VDYXBhY2l0eSAqIDgsIG9iamVjdEFuZFN0
b3JhZ2UKKyAgICBhZGRwIEpTRmluYWxPYmplY3Q6Om1faW5saW5lU3RvcmFnZSwgb2JqZWN0QW5k
U3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRpIFRhZ09mZnNldCAtIDggKiBJbmxpbmVTdG9yYWdl
Q2FwYWNpdHlbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBs
b2FkaSBQYXlsb2FkT2Zmc2V0IC0gOCAqIElubGluZVN0b3JhZ2VDYXBhY2l0eVtvYmplY3RBbmRT
dG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkaSBUYWdPZmZzZXRb
b2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKKyAgICBsb2FkaSBQYXls
b2FkT2Zmc2V0W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAog
ZW5kCiAKIG1hY3JvIHJlc29sdmVHbG9iYWwoc2l6ZSwgc2xvdykKQEAgLTEzMTgsNiArMTMxOCw3
IEBAIF9sbGludF9vcF9nZXRfYnlfcG5hbWU6CiAgICAgbG9hZGkgW2NmciwgdDAsIDhdLCB0MAog
ICAgIHN1YmkgMSwgdDAKICAgICBiaWFlcSB0MCwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6bV9u
dW1DYWNoZWFibGVTbG90c1t0M10sIC5vcEdldEJ5UG5hbWVTbG93CisgICAgbmVnaSB0MAogICAg
IGFkZGkgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6bV9vZmZzZXRCYXNlW3QzXSwgdDAKICAgICBs
b2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQwLCB0MiwgdDEsIHQzKQogICAgIGxvYWRpIDRb
UENdLCB0MApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDEyMzE2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC03NzksMTkgKzc3OSwyMSBAQCBfbGxpbnRfb3BfaXNfc3RyaW5nOgogCiAKIG1hY3JvIGxv
YWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk5vdEZpbmFsKHByb3BlcnR5T2Zmc2V0LCBv
YmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKLSAgICBhc3NlcnQobWFjcm8gKG9rKSBiaWd0ZXEgcHJv
cGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgb2sgZW5kKQorICAgIGFzc2VydCht
YWNybyAob2spIGJpbHQgcHJvcGVydHlPZmZzZXQsIDAsIG9rIGVuZCkKKyAgICBzeGkycCBwcm9w
ZXJ0eU9mZnNldCwgcHJvcGVydHlPZmZzZXQKICAgICBsb2FkcCBKU09iamVjdDo6bV9vdXRPZkxp
bmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCi0gICAgbG9hZHAg
LTggKiBJbmxpbmVTdG9yYWdlQ2FwYWNpdHlbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZz
ZXQsIDhdLCB2YWx1ZQorICAgIGxvYWRwIFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNl
dCwgOF0sIHZhbHVlCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChw
cm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCi0gICAgYmlsdCBwcm9wZXJ0
eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCAuaXNJbmxpbmUKKyAgICBiaWd0ZXEgcHJv
cGVydHlPZmZzZXQsIDAsIC5pc0lubGluZQogICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGlu
ZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKICAgICBqbXAgLnJl
YWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2Ug
KyBJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgKiA4LCBvYmplY3RBbmRTdG9yYWdlCisgICAgYWRkcCBK
U0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UsIG9iamVjdEFuZFN0b3JhZ2UKIC5yZWFkeToK
LSAgICBsb2FkcCAtOCAqIElubGluZVN0b3JhZ2VDYXBhY2l0eVtvYmplY3RBbmRTdG9yYWdlLCBw
cm9wZXJ0eU9mZnNldCwgOF0sIHZhbHVlCisgICAgc3hpMnAgcHJvcGVydHlPZmZzZXQsIHByb3Bl
cnR5T2Zmc2V0CisgICAgbG9hZHAgW29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4
XSwgdmFsdWUKIGVuZAogCiBtYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCkBAIC0xMTYx
LDggKzExNjMsOSBAQCBfbGxpbnRfb3BfZ2V0X2J5X3BuYW1lOgogICAgIGxvYWRpIFBheWxvYWRP
ZmZzZXRbY2ZyLCB0MywgOF0sIHQzCiAgICAgc3ViaSAxLCB0MwogICAgIGJpYWVxIHQzLCBKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yOjptX251bUNhY2hlYWJsZVNsb3RzW3QxXSwgLm9wR2V0QnlQbmFt
ZVNsb3cKKyAgICBuZWdpIHQzCiAgICAgYWRkaSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjptX29m
ZnNldEJhc2VbdDFdLCB0MwotICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDMsIHQw
LCB0MCkKKyAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbCh0Mywg
dDAsIHQwKQogICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQxCiAgICAgc3RvcmVwIHQwLCBbY2Zy
LCB0MSwgOF0KICAgICBkaXNwYXRjaCg3KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTIzMTY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTks
MTEgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIFByb3Bl
cnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5lU3RvcmFnZSgpOwogICAg
IGlmIChzdG9yYWdlKSB7CiAgICAgICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpOworICAg
ICAgICBzaXplX3QgY2FwYWNpdHkgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKICAgICAgICAgLy8gV2UgaGF2ZSB0aGlzIGV4dHJhIHRlbXAgaGVyZSB0byBz
bGFrZSBHQ0MncyB0aGlyc3QgZm9yIHRoZSBibG9vZCBvZiB0aG9zZSB3aG8gZGVyZWZlcmVuY2Ug
dHlwZS1wdW5uZWQgcG9pbnRlcnMuCi0gICAgICAgIHZvaWQqIHRlbXAgPSBzdG9yYWdlOwotICAg
ICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQoJnRlbXAsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4p
LCBzdG9yYWdlLT5zbG90KCksIHN0b3JhZ2VTaXplKTsKLSAgICAgICAgc3RvcmFnZSA9IHN0YXRp
Y19jYXN0PFByb3BlcnR5U3RvcmFnZT4odGVtcCk7CisgICAgICAgIHZvaWQqIHRlbXAgPSBzdG9y
YWdlIC0gY2FwYWNpdHkgLSAxOworICAgICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQoJnRlbXAs
IGNhcGFjaXR5ICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pLCAoc3RvcmFnZSAt
IHN0b3JhZ2VTaXplIC0gMSktPnNsb3QoKSwgc3RvcmFnZVNpemUpOworICAgICAgICBzdG9yYWdl
ID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKSArIGNhcGFjaXR5ICsgMTsKICAg
ICAgICAgdGhpc09iamVjdC0+bV9vdXRPZkxpbmVTdG9yYWdlLnNldChzdG9yYWdlLCBTdG9yYWdl
QmFycmllcjo6VW5jaGVja2VkKTsKICAgICB9CiAKQEAgLTEyOCwxMCArMTI5LDExIEBAIHZvaWQg
SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBQcm9wZXJ0eVN0b3JhZ2Ug
c3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKICAgICBpZiAoc3RvcmFn
ZSkgewogICAgICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKTsKKyAgICAgICAgc2l6ZV90IGNh
cGFjaXR5ID0gdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAg
ICAgICAgIC8vIFdlIGhhdmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8gc2xha2UgR0NDJ3MgdGhp
cnN0IGZvciB0aGUgYmxvb2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNlIHR5cGUtcHVubmVkIHBv
aW50ZXJzLgotICAgICAgICB2b2lkKiB0ZW1wID0gc3RvcmFnZTsKLSAgICAgICAgdmlzaXRvci5j
b3B5QW5kQXBwZW5kKCZ0ZW1wLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSwgc3RvcmFnZS0+c2xv
dCgpLCBzdG9yYWdlU2l6ZSk7Ci0gICAgICAgIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0
eVN0b3JhZ2U+KHRlbXApOworICAgICAgICB2b2lkKiB0ZW1wID0gc3RvcmFnZSAtIGNhcGFjaXR5
IC0gMTsKKyAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKCZ0ZW1wLCB0aGlzT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KSwgKHN0b3JhZ2UgLSBzdG9yYWdlU2l6ZSAtIDEpLT5zbG90KCksIHN0b3JhZ2VT
aXplKTsKKyAgICAgICAgc3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odGVt
cCkgKyBjYXBhY2l0eSArIDE7CiAgICAgICAgIHRoaXNPYmplY3QtPm1fb3V0T2ZMaW5lU3RvcmFn
ZS5zZXQoc3RvcmFnZSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7CiAgICAgfQogCkBAIC02
MDMsOSArNjA1LDkgQEAgUHJvcGVydHlTdG9yYWdlIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lUwog
ICAgIHZvaWQqIHRlbXAgPSBuZXdQcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKCFnbG9iYWxEYXRh
LmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KSAqIG5ld1NpemUsICZ0ZW1wKSkKICAgICAgICAgQ1JBU0goKTsKLSAgICBuZXdQcm9wZXJ0eVN0
b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXApOworICAgIG5ld1Byb3Bl
cnR5U3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odGVtcCkgKyBuZXdTaXpl
ICsgMTsKICAgICAKLSAgICBtZW1jcHkobmV3UHJvcGVydHlTdG9yYWdlLCBvbGRQcm9wZXJ0eVN0
b3JhZ2UsIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9sZFNpemUpOworICAg
IG1lbWNweShuZXdQcm9wZXJ0eVN0b3JhZ2UgLSBvbGRTaXplIC0gMSwgb2xkUHJvcGVydHlTdG9y
YWdlIC0gb2xkU2l6ZSAtIDEsIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSAqIG9s
ZFNpemUpOwogCiAgICAgQVNTRVJUKG5ld1Byb3BlcnR5U3RvcmFnZSk7CiAgICAgcmV0dXJuIG5l
d1Byb3BlcnR5U3RvcmFnZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkocmV2aXNpb24gMTIzMTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDcgKzIyNyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19j
YXN0PHNpemVfdD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAgICAgICAgICByZXN1
bHQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gbG9jYXRpb24gLSBvdXRPZkxpbmVTdG9yYWdlKCkgKyBmaXJzdE91dE9m
TGluZU9mZnNldDsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2NhdGlvbiAtIG91dE9mTGlu
ZVN0b3JhZ2UoKTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJl
KCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFz
aFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMTIzMTY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDkyLDkgKzQ5Miw5IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBQcm9wZXJ0eVRhYmxlOjpuZXgK
ICAgICAgICAgcmV0dXJuIGdldERlbGV0ZWRPZmZzZXQoKTsKICAgICAKICAgICBpZiAodHlwZSA9
PSBGaW5hbE9iamVjdFR5cGUpCi0gICAgICAgIHJldHVybiBzaXplKCk7CisgICAgICAgIHJldHVy
biBpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAxIC0gc2l6ZSgpOwogICAgIAotICAgIHJldHVybiBz
aXplKCkgKyBmaXJzdE91dE9mTGluZU9mZnNldDsKKyAgICByZXR1cm4gLTEgLSBzaXplKCk7CiB9
CiAKIGlubGluZSBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFByb3BlcnR5VGFibGU6OmNvcHko
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBh
Y2l0eSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlP
ZmZzZXQuaAkocmV2aXNpb24gMTIzMTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsMzIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIHR5cGVkZWYgaW50IFByb3BlcnR5T2Zmc2V0OwogCi1zdGF0aWMgY29u
c3QgUHJvcGVydHlPZmZzZXQgaW52YWxpZE9mZnNldCA9IC0xOworLy8gUHJvcGVydHkgb2Zmc2V0
cywgd2hlcmUgSyA9IGlubGluZVN0b3JhZ2VDYXBhY2l0eToKKy8vICAgICAgICBvZmZzZXQgPiAg
SyAgICAgICAgIGVycm9yISB5b3Ugc2hvdWxkIG5vdCBzZWUgdGhpcyB2YWx1ZS4KKy8vICAgICAg
ICBvZmZzZXQgPSAgSyAgICAgICAgIGludmFsaWQgb2Zmc2V0IChwcm9wZXJ0eSBub3QgZm91bmQp
CisvLyAgIDAgPD0gb2Zmc2V0IDwgIEsgICAgICAgICBpbmxpbmUgc3RvcmFnZQorLy8gICAgICAg
IG9mZnNldCA8ICAwICAgICAgICAgb3V0LW9mLWxpbmUgc3RvcmFnZQorLy8KKy8vIEFzc3VtaW5n
IDY0LWJpdCBhbmQgYSBmaW5hbCBvYmplY3QsIHByb3BlcnR5IG9mZnNldHMgcHJvY2VlZCBhcyBm
b2xsb3dzOgorLy8gNCAgICAgbm90IGFuIG9mZnNldAorLy8gMyAgICAgZmlyc3QgaW5saW5lIHNs
b3QKKy8vIDIgICAgIHNlY29uZCBpbmxpbmUgc2xvdAorLy8gMSAgICAgdGhpcmQgaW5saW5lIHNs
b3QKKy8vIDAgICAgIGZvdXJ0aCBpbmxpbmUgc2xvdAorLy8gLTEgICAgZmlyc3Qgb3V0LW9mLWxp
bmUgc2xvdCwgZmlmdGggc2xvdCBvdmVyYWxsCisvLyAtMiAgICBzZWNvbmQgb3V0LW9mLWxpbmUg
c2xvdCwgc2l4dGggc2xvdCBvdmVyYWxsCisvLyAuLi4gYW5kIHNvIG9uLgorLy8KKy8vIFRoZSBy
YXRpb25hbGUgaXMgYXMgZm9sbG93czoKKy8vIC0gVGhlcmUgaXMgYSBzaW1wbGUgbGluZWFyIHBy
b2dyZXNzaW9uIG9mIHByb3BlcnR5IG9mZnNldHMsIHdoaWNoIG1ha2VzCisvLyAgIGl0IGNoZWFw
IGFuZCBlYXN5IHRvIGltcGxlbWVudCBwcm9wZXJ0eSBlbnVtZXJhdGlvbi4KKy8vIC0gR2l2ZW4g
YW4gb2Zmc2V0IGFuZCBhIHBvaW50ZXIgdG8gdGhlIHByb3BlcnR5IHN0b3JhZ2UsIGl0IGlzIGVh
c3kgdG8KKy8vICAgbG9va3VwIHRoZSBwcm9wZXJ0eSB3aXRob3V0IHRvbyBtdWNoIGFyaXRobWV0
aWMuCisvLyAtIEl0IGFsbG93cyBmb3IgYSBmdXR1cmUgd2hlcmUgaW5saW5lIHN0b3JhZ2UgY2Fw
YWNpdHkgdmFyaWVzLCBieQorLy8gICBqdXN0IGNoYW5naW5nIHdoYXQgdGhlIGZpcnN0IG9mZnNl
dCB1c2VkIGZvciBpbmxpbmUgc3RvcmFnZSBpcy4KKworc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zm
c2V0IGludmFsaWRPZmZzZXQgPSBJTkxJTkVfU1RPUkFHRV9DQVBBQ0lUWTsKIHN0YXRpYyBjb25z
dCBQcm9wZXJ0eU9mZnNldCBpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgPSBJTkxJTkVfU1RPUkFHRV9D
QVBBQ0lUWTsKLXN0YXRpYyBjb25zdCBQcm9wZXJ0eU9mZnNldCBmaXJzdE91dE9mTGluZU9mZnNl
dCA9IGlubGluZVN0b3JhZ2VDYXBhY2l0eTsKIAogLy8gRGVjbGFyZSBhbGwgb2YgdGhlIGZ1bmN0
aW9ucyBiZWNhdXNlIHRoZXkgdGVuZCB0byBkbyBmb3J3YXJkIGNhbGxzLgogaW5saW5lIHZvaWQg
Y2hlY2tPZmZzZXQoUHJvcGVydHlPZmZzZXQpOwpAQCAtNTYsNiArNzksNyBAQCBpbmxpbmUgYm9v
bCBpc091dE9mTGluZU9mZnNldChQcm9wZXJ0eU9mCiBpbmxpbmUgc2l6ZV90IG9mZnNldEluSW5s
aW5lU3RvcmFnZShQcm9wZXJ0eU9mZnNldCk7CiBpbmxpbmUgc2l6ZV90IG9mZnNldEluT3V0T2ZM
aW5lU3RvcmFnZShQcm9wZXJ0eU9mZnNldCk7CiBpbmxpbmUgc2l6ZV90IG9mZnNldEluUmVzcGVj
dGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQpOworaW5saW5lIHNpemVfdCBudW1iZXJPZklubGlu
ZVNsb3RzRm9yTGFzdE9mZnNldEluS25vd25GaW5hbE9iamVjdChQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpOwogaW5saW5lIHNpemVfdCBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldChQ
cm9wZXJ0eU9mZnNldCk7CiBpbmxpbmUgc2l6ZV90IG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0
KFByb3BlcnR5T2Zmc2V0LCBKU1R5cGUpOwogaW5saW5lIFByb3BlcnR5T2Zmc2V0IG5leHRQcm9w
ZXJ0eU9mZnNldEZvcihQcm9wZXJ0eU9mZnNldCwgSlNUeXBlKTsKQEAgLTY0LDE0ICs4OCwxNCBA
QCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgZmlyc3RQcm9wZXJ0eU9mZnNlCiBpbmxpbmUgdm9pZCBj
aGVja09mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG9m
ZnNldCk7Ci0gICAgQVNTRVJUKG9mZnNldCA+PSBpbnZhbGlkT2Zmc2V0KTsKKyAgICBBU1NFUlQo
b2Zmc2V0IDw9IGlubGluZVN0b3JhZ2VDYXBhY2l0eSk7CiB9CiAKIGlubGluZSB2b2lkIGNoZWNr
T2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNUeXBlIHR5cGUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKG9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIEFTU0VSVChvZmZz
ZXQgPj0gaW52YWxpZE9mZnNldCk7CisgICAgQVNTRVJUKG9mZnNldCA8PSBpbmxpbmVTdG9yYWdl
Q2FwYWNpdHkpOwogICAgIEFTU0VSVChvZmZzZXQgPT0gaW52YWxpZE9mZnNldAogICAgICAgICAg
ICB8fCB0eXBlID09IEZpbmFsT2JqZWN0VHlwZQogICAgICAgICAgICB8fCBpc091dE9mTGluZU9m
ZnNldChvZmZzZXQpKTsKQEAgLTk4LDEzICsxMjIsMTMgQEAgaW5saW5lIGJvb2wgaXNWYWxpZE9m
ZnNldChQcm9wZXJ0eU9mZnNldAogaW5saW5lIGJvb2wgaXNJbmxpbmVPZmZzZXQoUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQogewogICAgIGNoZWNrT2Zmc2V0KG9mZnNldCk7Ci0gICAgcmV0dXJuIG9m
ZnNldCA8IGlubGluZVN0b3JhZ2VDYXBhY2l0eTsKKyAgICByZXR1cm4gb2Zmc2V0ID49IDA7CiB9
CiAKIGlubGluZSBib29sIGlzT3V0T2ZMaW5lT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
IHsKICAgICBjaGVja09mZnNldChvZmZzZXQpOwotICAgIHJldHVybiAhaXNJbmxpbmVPZmZzZXQo
b2Zmc2V0KTsKKyAgICByZXR1cm4gb2Zmc2V0IDwgMDsKIH0KIAogaW5saW5lIHNpemVfdCBvZmZz
ZXRJbklubGluZVN0b3JhZ2UoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQpAQCAtMTE4LDI5ICsxNDIs
MzggQEAgaW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoUAogewogICAgIHZh
bGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJUKGlzT3V0T2ZMaW5lT2Zmc2V0KG9mZnNl
dCkpOwotICAgIHJldHVybiBvZmZzZXQgLSBmaXJzdE91dE9mTGluZU9mZnNldDsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCkpOwog
fQogCiBpbmxpbmUgc2l6ZV90IG9mZnNldEluUmVzcGVjdGl2ZVN0b3JhZ2UoUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogewotICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICBy
ZXR1cm4gb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKG9mZnNldCk7Ci0gICAgcmV0dXJuIG9mZnNldElu
T3V0T2ZMaW5lU3RvcmFnZShvZmZzZXQpOworICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZz
ZXQpKTsKK30KKworaW5saW5lIHNpemVfdCBudW1iZXJPZklubGluZVNsb3RzRm9yTGFzdE9mZnNl
dEluS25vd25GaW5hbE9iamVjdChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgaWYgKG9m
ZnNldCA8PSAwKQorICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZUNhcGFjaXR5OworICAgIHJl
dHVybiBpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSBvZmZzZXQ7CiB9CiAKIGlubGluZSBzaXplX3Qg
bnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQogewogICAgIGNoZWNrT2Zmc2V0KG9mZnNldCk7Ci0gICAgaWYgKG9mZnNldCA8IGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KQorICAgIGlmIChvZmZzZXQgPj0gMCkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0ICsgMTsKKyAgICByZXR1cm4g
LXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0KTsKIH0KIAogaW5saW5lIHNpemVfdCBudW1i
ZXJPZlNsb3RzRm9yTGFzdE9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVHlwZSB0eXBl
KQogewogICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgdHlwZSk7Ci0gICAgaWYgKHR5cGUgPT0gRmlu
YWxPYmplY3RUeXBlKQotICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMTsKKyAgICBpZiAodHlwZSA9
PSBGaW5hbE9iamVjdFR5cGUpIHsKKyAgICAgICAgaW50IHJlc3VsdCA9IGlubGluZVN0b3JhZ2VD
YXBhY2l0eSAtIG9mZnNldDsKKyAgICAgICAgQVNTRVJUKHJlc3VsdCA+PSAwKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgcmV0dXJuIG51bWJlck9mT3V0T2ZMaW5lU2xvdHNG
b3JMYXN0T2Zmc2V0KG9mZnNldCk7CiB9CiAKQEAgLTE0OCw4ICsxODEsOCBAQCBpbmxpbmUgUHJv
cGVydHlPZmZzZXQgbmV4dFByb3BlcnR5T2Zmc2V0CiB7CiAgICAgY2hlY2tPZmZzZXQob2Zmc2V0
LCB0eXBlKTsKICAgICBpZiAodHlwZSAhPSBGaW5hbE9iamVjdFR5cGUgJiYgb2Zmc2V0ID09IGlu
dmFsaWRPZmZzZXQpCi0gICAgICAgIHJldHVybiBmaXJzdE91dE9mTGluZU9mZnNldDsKLSAgICBy
ZXR1cm4gb2Zmc2V0ICsgMTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBvZmZzZXQg
LSAxOwogfQogCiBpbmxpbmUgUHJvcGVydHlPZmZzZXQgZmlyc3RQcm9wZXJ0eU9mZnNldEZvcihK
U1R5cGUgdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkocmV2aXNpb24gMTIzMTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNyw3IEBAIFN0cnVj
dHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICAgICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRyYW5zaXRpb24pOwogICAg
ICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1ZhbHVlKGdsb2JhbERhdGEsIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIGRhdGFMb2co
IiVwOiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25bMV06IG9mZnNldCA9ICVkXG4iLCB0cmFuc2l0aW9u
LCBvZmZzZXQpOwogICAgICAgICBpZiAodHJhbnNpdGlvbi0+b3V0T2ZMaW5lU2l6ZSgpID4gdHJh
bnNpdGlvbi0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKICAgICAgICAgICAgIHRyYW5zaXRpb24tPmdy
b3dPdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgICAgICByZXR1cm4gdHJhbnNpdGlvbjsKQEAgLTM1
Myw2ICszNTQsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAg
ICAgfQogCiAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cHV0U3BlY2lmaWNWYWx1ZShnbG9iYWxE
YXRhLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgIGRhdGFM
b2coIiVwOiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25bMl06IG9mZnNldCA9ICVkXG4iLCB0cmFuc2l0
aW9uLCBvZmZzZXQpOwogICAgIGlmICh0cmFuc2l0aW9uLT5vdXRPZkxpbmVTaXplKCkgPiB0cmFu
c2l0aW9uLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQogICAgICAgICB0cmFuc2l0aW9uLT5ncm93T3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHJldmlzaW9uIDEyMzE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsMTIgKzIxNSwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZUluZm8u
dHlwZSgpID09IEZpbmFsT2JqZWN0VHlwZSk7CiAgICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQ7
Ci0gICAgICAgICAgICBpZiAobV9wcm9wZXJ0eVRhYmxlKQorICAgICAgICAgICAgaWYgKG1fcHJv
cGVydHlUYWJsZSkgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fcHJvcGVydHlUYWJsZS0+
cHJvcGVydHlTdG9yYWdlU2l6ZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1fb2Zmc2V0ICsgMTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5saW5lU3RvcmFnZUNhcGFjaXR5OworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gaW5saW5lU3RvcmFnZUNhcGFjaXR5OworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyT2ZJbmxpbmVTbG90c0Zvckxh
c3RPZmZzZXRJbktub3duRmluYWxPYmplY3QobV9vZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCBpbmxpbmVTaXplKCkgY29uc3QK
QEAgLTI0MSwyNiArMjQxLDI4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IG1fb3V0T2ZMaW5lQ2FwYWNpdHkgKyBpbmxpbmVDYXBhY2l0eSgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgLy8gT2Zmc2V0cyBwcm9jZWVkIGluIHRoZSBuZWdhdGl2ZSBkaXJlY3Rpb24uIEhlbmNl
LCB3ZSB3aWxsIGFsd2F5cworICAgICAgICAvLyBoYXZlOiBmaXJzdFZhbHVlT2Zmc2V0KCkgPj0g
bGFzdFZhbGlkT2Zmc2V0KCkuCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IGZpcnN0VmFsaWRPZmZz
ZXQoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaGFzSW5saW5lU3RvcmFnZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgcmV0dXJuIGlubGluZVN0
b3JhZ2VDYXBhY2l0eTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZUNhcGFj
aXR5IC0gMTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBsYXN0VmFsaWRPZmZzZXQoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAobV9wcm9wZXJ0eVRhYmxlKSB7Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQg
c2l6ZSA9IG1fcHJvcGVydHlUYWJsZS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpOwotICAgICAgICAg
ICAgICAgIGlmICghaGFzSW5saW5lU3RvcmFnZSgpKQotICAgICAgICAgICAgICAgICAgICBzaXpl
ICs9IGlubGluZVN0b3JhZ2VDYXBhY2l0eTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZSAt
IDE7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgcmVzdWx0ID0gLW1fcHJvcGVydHlU
YWJsZS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpOworICAgICAgICAgICAgICAgIGlmIChoYXNJbmxp
bmVTdG9yYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbmxpbmVTdG9yYWdl
Q2FwYWNpdHk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBtX29mZnNldDsKICAgICAgICAgfQogICAgICAgICBib29sIGlz
VmFsaWRPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSBjb25zdAogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gb2Zmc2V0ID49IGZpcnN0VmFsaWRPZmZzZXQoKQotICAgICAgICAgICAg
ICAgICYmIG9mZnNldCA8PSBsYXN0VmFsaWRPZmZzZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBv
ZmZzZXQgPD0gZmlyc3RWYWxpZE9mZnNldCgpCisgICAgICAgICAgICAgICAgJiYgb2Zmc2V0ID49
IGxhc3RWYWxpZE9mZnNldCgpOwogICAgICAgICB9CiAKICAgICAgICAgUHJvcGVydHlPZmZzZXQg
Z2V0KEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153409</attachid>
            <date>2012-07-19 22:11:50 -0700</date>
            <delta_ts>2012-07-21 14:59:57 -0700</delta_ts>
            <desc>it does more things than before</desc>
            <filename>butterflies_patch_3.diff</filename>
            <type>text/plain</type>
            <size>38075</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzMTY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEyLTA3LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHJvcGVydHkgc3RvcmFnZSBhbmQgb2Zmc2V0cyBzaG91bGQgYmUgcmV2ZXJzZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxNzg4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV29yayBpbiBwcm9ncmVzcy4g
SXQncyBzdGFydGluZyB0byBkbyB0aGluZ3MgYnV0IHN0aWxsIG5lZWRzIG1vcmUgdGhpbmdzLgor
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVz
c09mZnNldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpyZXBhdGNo
Q29tcGFjdCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KToKKyAgICAgICAgKiBkZmcvREZHT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
OjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6ZW1pdFB1dFRyYW5z
aXRpb25TdHViKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfcG5hbWUpOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9wbmFtZSk6CisgICAg
ICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjp0cnlDYWNo
ZUdldEJ5SUQpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvZmZzZXRGb3JMb2NhdGlv
bik6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eVRhYmxlOjpuZXh0T2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3Bl
cnR5T2Zmc2V0Lmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpjaGVja09mZnNldCk6
CisgICAgICAgIChKU0M6OmlzSW5saW5lT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6aXNPdXRPZkxp
bmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpvZmZzZXRJblJlc3BlY3RpdmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6bnVt
YmVyT2ZJbmxpbmVTbG90c0Zvckxhc3RPZmZzZXRJbktub3duRmluYWxPYmplY3QpOgorICAgICAg
ICAoSlNDOjpudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldCk6CisgICAgICAgIChK
U0M6Om51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6bmV4dFByb3Bl
cnR5T2Zmc2V0Rm9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmlubGluZVNpemVGb3JL
bm93bkZpbmFsT2JqZWN0KToKKyAgICAgICAgKFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Zmlyc3RWYWxpZE9mZnNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bGFz
dFZhbGlkT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc1ZhbGlkT2Zmc2V0KToK
KwogMjAxMi0wNy0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IEZhc3QgcGF0aCBvZiBzdG9yYWdlIHJlc2l6ZSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHByb3Bl
cnR5IHN0b3JhZ2UgcmVhbGxvY2F0aW9uLCBzaW5jZSBpdCBpcyBvbmx5IHVzZWZ1bCBmb3IgYXJy
YXlzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTIzMTY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAg
c3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZQogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSopOwogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWJ1ZyhFeGVjU3RhdGUqKTsK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVzY3JpYmUoRXhl
Y1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpT
Q1N0YWNrKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25HQyhFeGVjU3RhdGUqKTsKICNpZm5kZWYgTkRFQlVHCkBAIC0xOTEsNiArMTkyLDcg
QEAgcHJvdGVjdGVkOgogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
ICAgICAgICAgCiAgICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJkZWJ1ZyIsIGZ1bmN0
aW9uRGVidWcsIDEpOworICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAiZGVzY3JpYmUi
LCBmdW5jdGlvbkRlc2NyaWJlLCAxKTsKICAgICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwg
InByaW50IiwgZnVuY3Rpb25QcmludCwgMSk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERh
dGEsICJxdWl0IiwgZnVuY3Rpb25RdWl0LCAwKTsKICAgICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFs
RGF0YSwgImdjIiwgZnVuY3Rpb25HQywgMCk7CkBAIC0yOTgsNiArMzAwLDEyIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWIKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1
bmN0aW9uRGVzY3JpYmUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGZwcmludGYoc3RkZXJyLCAi
LS0+ICVzXG4iLCBleGVjLT5hcmd1bWVudCgwKS5kZXNjcmlwdGlvbigpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uSlNDU3RhY2soRXhlY1N0YXRlKiBleGVjKQogewogICAgIFN0cmlu
ZyB0cmFjZSA9ICItLT4gU3RhY2sgdHJhY2U6XG4iOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAko
cmV2aXNpb24gMTIzMTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0NywxMCBAQCBw
dWJsaWM6CiAgICAgdHlwZWRlZiBYODZBc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVy
SUQ7CiAgICAgdHlwZWRlZiBYODZBc3NlbWJsZXI6OlhNTVJlZ2lzdGVySUQgWE1NUmVnaXN0ZXJJ
RDsKICAgICAKLSAgICBzdGF0aWMgY29uc3QgaW50IE1heGltdW1Db21wYWN0UHRyQWxpZ25lZEFk
ZHJlc3NPZmZzZXQgPSAxMjc7CisgICAgc3RhdGljIGJvb2wgaXNDb21wYWN0UHRyQWxpZ25lZEFk
ZHJlc3NPZmZzZXQocHRyZGlmZl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
ID49IC0xMjggJiYgdmFsdWUgPD0gMTI3OworICAgIH0KIAogICAgIGVudW0gUmVsYXRpb25hbENv
bmRpdGlvbiB7CiAgICAgICAgIEVxdWFsID0gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25FLApAQCAt
NDk0LDggKzQ5Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29t
cGFjdChDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IGRhdGFMYWJlbENvbXBhY3QsIGludDMy
X3QgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQodmFsdWUgPj0gMCk7Ci0gICAgICAgIEFT
U0VSVCh2YWx1ZSA8IE1heGltdW1Db21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQpOworICAg
ICAgICBBU1NFUlQoaXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQodmFsdWUpKTsKICAg
ICAgICAgQXNzZW1ibGVyVHlwZV9UOjpyZXBhdGNoQ29tcGFjdChkYXRhTGFiZWxDb21wYWN0LmRh
dGFMb2NhdGlvbigpLCB2YWx1ZSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxMjMxNjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODI0LDcgKzE4MjQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIHZv
aWQgcmVwYXRjaENvbXBhY3Qodm9pZCogd2hlcmUsIGludDMyX3QgdmFsdWUpCiAgICAgewotICAg
ICAgICBBU1NFUlQodmFsdWUgPj0gMCk7CisgICAgICAgIEFTU0VSVCh2YWx1ZSA+PSBzdGQ6Om51
bWVyaWNfbGltaXRzPGludDhfdD46Om1pbigpKTsKICAgICAgICAgQVNTRVJUKHZhbHVlIDw9IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWF4KCkpOwogICAgICAgICBzZXRJbnQ4KHdoZXJl
LCB2YWx1ZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjMxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ4LDcgKzEyNDgsNyBA
QCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiAgICAgdm9pZCogcmVz
dWx0OwogICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFs
T3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSksICZyZXN1bHQpKQogICAgICAgICBD
UkFTSCgpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOworICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PEpTVmFsdWUq
PihyZXN1bHQpICsgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICsgMSk7CiB9CiAKIGNoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBl
eGVjLCBzaXplX3QgbmV3U2l6ZSkKQEAgLTEyNTcsNyArMTI1Nyw3IEBAIGNoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm8KICAgICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKCFn
bG9iYWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKG5ld1NpemUsICZyZXN1bHQpKQogICAg
ICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQp
OworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PEpT
VmFsdWUqPihyZXN1bHQpICsgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICsgMSk7CiB9CiAKIGRv
dWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBpbnQzMl90
IGIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlz
aW9uIDEyMzE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwMSw3ICszMDEsOCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdl
dEJ5SUQoRXhlY1N0YXRlKiBlCiAKICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KICAgICBp
ZiAoc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAoKHNsb3QuY2Fj
aGVkUHJvcGVydHlUeXBlKCkgIT0gUHJvcGVydHlTbG90OjpWYWx1ZSkgfHwgKChzbG90LmNhY2hl
ZE9mZnNldCgpICogc2l6ZW9mKEpTVmFsdWUpKSA+ICh1bnNpZ25lZClNYWNyb0Fzc2VtYmxlcjo6
TWF4aW11bUNvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldCkpIHsKKyAgICAgICAgaWYgKChz
bG90LmNhY2hlZFByb3BlcnR5VHlwZSgpICE9IFByb3BlcnR5U2xvdDo6VmFsdWUpCisgICAgICAg
ICAgICB8fCAhTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0
KHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpKSB7CiAgICAgICAgICAgICBk
ZmdSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtODI0LDcgKzgyNSw3IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1
YigKICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxv
Y2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CiAgICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihz
Y3JhdGNoR1BSMSk7CiAgICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBz
Y3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICBzdHViSml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0
LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNj
cmF0Y2hHUFIxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNpemVfdCBvbGRTaXpl
ID0gb2xkU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwog
ICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKQEAgLTgzNSwxMSArODM2LDEx
IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRUcmFuc2l0aW9uU3R1YigKICAgICAgICAgICAgIHN0dWJK
aXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFp
bmluZyk7CiAgICAgICAgICAgICBzdHViSml0Lm5lZ1B0cihzY3JhdGNoR1BSMSk7CiAgICAgICAg
ICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3Bp
ZWRBbGxvY2F0b3ItPm1fY3VycmVudFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAg
ICAgICBzdHViSml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG5ld1NpemUp
LCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzdHViSml0LmFkZFB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQUjEgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjMgPSBv
bGQgc3RvcmFnZSwgc2NyYXRjaEdQUjIgPSBhdmFpbGFibGUKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7IG9mZnNldCArPSBzaXplb2Yodm9pZCop
KSB7Ci0gICAgICAgICAgICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIzLCBvZmZzZXQpLCBzY3JhdGNoR1BSMik7Ci0gICAgICAgICAgICAgICAg
c3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjEsIG9mZnNldCkpOworICAgICAgICAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0g
MDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplKTsgb2Zmc2V0ICs9IHNp
emVvZih2b2lkKikpIHsKKyAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjMsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICog
MikpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3Jh
dGNoR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0ICsg
c2l6ZW9mKEpTVmFsdWUpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMjMxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAxLDEy
ICszOTAxLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHJlc3VsdFBheWxvYWRHUFIp
OwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzb2x2ZUluZm9H
UFIsIE9CSkVDVF9PRkZTRVRPRihHbG9iYWxSZXNvbHZlSW5mbywgb2Zmc2V0KSksIHJlc29sdmVJ
bmZvR1BSKTsKICNpZiBERkdfRU5BQkxFKEpJVF9BU1NFUlQpCi0gICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGlzT3V0T2ZMaW5lID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJU
aGFuT3JFcXVhbCwgcmVzb2x2ZUluZm9HUFIsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPdXRPZkxpbmUgPSBtX2ppdC5i
cmFuY2gzMihKSVRDb21waWxlcjo6TGVzc1RoYW4sIHJlc29sdmVJbmZvR1BSLCBUcnVzdGVkSW1t
MzIoMCkpOwogICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAgICAgICAgIGlzT3V0T2ZMaW5l
LmxpbmsoJm1faml0KTsKICNlbmRpZgotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSAtIGlubGluZVN0b3JhZ2VDYXBhY2l0eSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKEpTVmFsdWUpKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHJlc29sdmVJbmZvR1BSLCBK
SVRDb21waWxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy5wYXlsb2FkKSAtIGlubGluZVN0b3JhZ2VDYXBhY2l0eSAqIHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3VsdFBheWxvYWRHUFIpOworICAg
ICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BS
LCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSAtIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHJlc29sdmVJbmZv
R1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSAtIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKEpTVmFsdWUpKSksIHJlc3VsdFBheWxvYWRHUFIpOwogCiAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAx
MjMxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODkwLDEyICszODkwLDEzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gRmFzdCBjYXNlCiAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwgT0JKRUNU
X09GRlNFVE9GKEdsb2JhbFJlc29sdmVJbmZvLCBvZmZzZXQpKSwgcmVzb2x2ZUluZm9HUFIpOwog
I2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNP
dXRPZkxpbmUgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6R3JlYXRlclRoYW5PckVxdWFs
LCByZXNvbHZlSW5mb0dQUiwgVHJ1c3RlZEltbTMyKGlubGluZVN0b3JhZ2VDYXBhY2l0eSkpOwor
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc091dE9mTGluZSA9IG1faml0LmJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpMZXNzVGhhbiwgcmVzb2x2ZUluZm9HUFIsIFRydXN0ZWRJbW0zMigwKSk7CiAg
ICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmbV9q
aXQpOwogI2VuZGlmCisgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc29sdmVJbmZv
R1BSLCByZXNvbHZlSW5mb0dQUik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9y
YWdlKCkpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpC
YXNlSW5kZXgocmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRy
LCAtaW5saW5lU3RvcmFnZUNhcGFjaXR5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2Yo
SlNWYWx1ZSkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpTY2Fs
ZVB0ciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3VsdEdQ
Uik7CiAgICAgICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMjMxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1NSw3
ICszMTU1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAg
IG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJl
bWFpbmluZyk7CiAgICAgbV9qaXQubmVnUHRyKHNjcmF0Y2hHUFIpOwogICAgIG1faml0LmFkZFB0
cihKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVu
dFBheWxvYWRFbmQpLCBzY3JhdGNoR1BSKTsKLSAgICBtX2ppdC5zdWJQdHIoSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUik7CisgICAgbV9qaXQuYWRkUHRyKEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7CiAg
ICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICBzbG93UGF0aENhbGwo
c2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRp
YWxDYXBhY2l0eSwgc2NyYXRjaEdQUikpOwpAQCAtMzE4OSwxNCArMzE4OSwxNCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgbV9qaXQuc3RvcmVQdHIoc2Ny
YXRjaEdQUjIsICZjb3BpZWRBbGxvY2F0b3ItPm1fY3VycmVudFJlbWFpbmluZyk7CiAgICAgbV9q
aXQubmVnUHRyKHNjcmF0Y2hHUFIyKTsKICAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OkFi
c29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2Ny
YXRjaEdQUjIpOwotICAgIG1faml0LnN1YlB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKG5l
d1NpemUpLCBzY3JhdGNoR1BSMik7CisgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjIpOwogICAgICAgICAKICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlz
LCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUp
KTsKICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIyID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIx
ID0gc2NyYXRjaAotICAgIGZvciAoc2l6ZV90IG9mZnNldCA9IDA7IG9mZnNldCA8IG9sZFNpemU7
IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3Mob2xkU3RvcmFnZUdQUiwgb2Zmc2V0KSwgc2NyYXRjaEdQUjEpOwotICAg
ICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjIsIG9mZnNldCkpOworICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNl
dCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9p
ZCopKSB7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2xkU3Rv
cmFnZUdQUiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKiAyKSksIHNjcmF0Y2hHUFIxKTsK
KyAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIyLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSAqIDIpKSk7CiAgICAgfQog
ICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkocmV2aXNpb24gMTIzMTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxNiwyMiArMTAx
NiwyMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgQVNT
RVJUKHNpemVvZihKU1ZhbHVlKSA9PSA4KTsKICAgICAKICAgICBpZiAoZmluYWxPYmplY3RNb2Rl
ID09IE1heUJlRmluYWwpIHsKLSAgICAgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NU
aGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKKyAgICAg
ICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoMCkpOwogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6
Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgYmFzZSk7CiAgICAgICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKICAgICAgICAgaXNJbmxpbmUubGluayh0aGlzKTsKLSAgICAgICAgYWRkUHRyKFRy
dXN0ZWRJbW1QdHIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgaW5saW5lU3Rv
cmFnZUNhcGFjaXR5ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGJhc2UpOworICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbVB0cihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBz
aXplb2YoSlNWYWx1ZSkpLCBiYXNlKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0g
ZWxzZSB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0g
YnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVT
dG9yYWdlQ2FwYWNpdHkpKTsKKyAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKExl
c3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgIGJyZWFrcG9pbnQoKTsK
ICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKICNlbmRpZgogICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgYmFz
ZSk7CiAgICAgfQotICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkgLSBpbmxpbmVTdG9y
YWdlQ2FwYWNpdHkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0UGF5bG9hZCk7Ci0g
ICAgbG9hZDMyKEJhc2VJbmRleChiYXNlLCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpIC0gaW5saW5lU3RvcmFnZUNhcGFjaXR5ICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdFRhZyk7CisgICAgbG9hZDMyKEJhc2VJbmRleChi
YXNlLCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy5wYXlsb2FkKSAtIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJl
c3VsdFBheWxvYWQpOworICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSAtIHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3VsdFRhZyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTA1Niw2ICsxMDU2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3Ry
dWN0aQogICAgIGxvYWQzMihhZGRyZXNzRm9yKGkpLCByZWdUMyk7CiAgICAgc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMywgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IsIG1fbnVtQ2FjaGVhYmxlU2xvdHMpKSkpOworICAgIG5lZzMyKHJlZ1QzKTsKICAgICBh
ZGQzMihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ciwgbV9vZmZzZXRCYXNlKSksIHJlZ1QzKTsKICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJl
Z1QyLCByZWdUMSwgcmVnVDAsIHJlZ1QzKTsgICAgCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTIzMTY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1NywyMSArMTU3LDIyIEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGly
ZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICBBU1NFUlQoc2l6ZW9mKEpTVmFsdWUpID09IDgpOwogICAg
IAogICAgIGlmIChmaW5hbE9iamVjdE1vZGUgPT0gTWF5QmVGaW5hbCkgewotICAgICAgICBKdW1w
IGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGlubGlu
ZVN0b3JhZ2VDYXBhY2l0eSkpOworICAgICAgICBKdW1wIGlzSW5saW5lID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCBz
Y3JhdGNoKTsKICAgICAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgICAgICBpc0lubGluZS5s
aW5rKHRoaXMpOwotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSArIGlubGluZVN0b3JhZ2VDYXBhY2l0eSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpLCBiYXNlLCBzY3JhdGNoKTsKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBzaXplb2YoSlNWYWx1ZSkpLCBiYXNl
LCBzY3JhdGNoKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0gZWxzZSB7CiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNp
dHkpKTsKKyAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZz
ZXQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgIGJyZWFrcG9pbnQoKTsKICAgICAgICAgaXNP
dXRPZkxpbmUubGluayh0aGlzKTsKICNlbmRpZgogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgc2NyYXRjaCk7CiAgICAg
fQotICAgIGxvYWRQdHIoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgU2NhbGVQdHIsIC1pbmxp
bmVTdG9yYWdlQ2FwYWNpdHkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1ZhbHVl
KSkpLCByZXN1bHQpOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAg
ICBsb2FkUHRyKEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFNjYWxlUHRyLCAtc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBA
IC0xOTQsNiArMTk1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0
aQogICAgIGxvYWQzMihhZGRyZXNzRm9yKGkpLCByZWdUMyk7CiAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMywgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IsIG1fbnVtQ2FjaGVhYmxlU2xvdHMpKSkpOworICAgIG5lZzMyKHJlZ1QzKTsKICAgICBhZGQz
MihBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciwg
bV9vZmZzZXRCYXNlKSksIHJlZ1QzKTsKICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1Qw
LCByZWdUMCwgcmVnVDMsIHJlZ1QxKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHJldmlzaW9uIDEyMzE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzIsNyArOTMyLDggQEAgTkVWRVJf
SU5MSU5FIHZvaWQgSklUVGh1bmtzOjp0cnlDYWNoZUdldAogICAgIGlmIChzbG90LnNsb3RCYXNl
KCkgPT0gYmFzZVZhbHVlKSB7CiAgICAgICAgIC8vIHNldCB0aGlzIHVwLCBzbyBkZXJlZlN0cnVj
dHVyZXMgY2FuIGRvIGl0J3Mgam9iLgogICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxm
KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHJ1Y3R1cmUpOwotICAgICAgICBpZiAoKHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgIT0gUHJv
cGVydHlTbG90OjpWYWx1ZSkgfHwgKChzbG90LmNhY2hlZE9mZnNldCgpICogc2l6ZW9mKEpTVmFs
dWUpKSA+ICh1bnNpZ25lZClNYWNyb0Fzc2VtYmxlcjo6TWF4aW11bUNvbXBhY3RQdHJBbGlnbmVk
QWRkcmVzc09mZnNldCkpCisgICAgICAgIGlmICgoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSAh
PSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKQorICAgICAgICAgICAgfHwgIU1hY3JvQXNzZW1ibGVyOjpp
c0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChzbG90LmNhY2hlZE9mZnNldCgpICogc2l6
ZW9mKEpTVmFsdWUpKSkKICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhj
b2RlQmxvY2ssIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc2Vs
Zl9mYWlsKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIEpJVDo6cGF0Y2hHZXRCeUlkU2Vs
Zihjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHJl
dHVybkFkZHJlc3MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDEyMzE2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC05MjAsMjEgKzkyMCwyMSBAQCBfbGxpbnRfb3BfaXNfc3RyaW5n
OgogCiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXRLbm93bk5vdEZpbmFsKHBy
b3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB0YWcsIHBheWxvYWQpCi0gICAgYXNzZXJ0
KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHks
IG9rIGVuZCkKKyAgICBhc3NlcnQobWFjcm8gKG9rKSBiaWx0IHByb3BlcnR5T2Zmc2V0LCAwLCBv
ayBlbmQpCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRT
dG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRpIFRhZ09mZnNldCAtIDggKiBJbmxp
bmVTdG9yYWdlQ2FwYWNpdHlbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0
YWcKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0IC0gOCAqIElubGluZVN0b3JhZ2VDYXBhY2l0eVtv
YmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkaSBU
YWdPZmZzZXQgLSA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCisg
ICAgbG9hZGkgUGF5bG9hZE9mZnNldCAtIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZz
ZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNl
dChwcm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQotICAgIGJp
bHQgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5saW5lCisgICAg
YmlndGVxIHByb3BlcnR5T2Zmc2V0LCAwLCAuaXNJbmxpbmUKICAgICBsb2FkcCBKU09iamVjdDo6
bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RBbmRTdG9yYWdlCiAg
ICAgam1wIC5yZWFkeQogLmlzSW5saW5lOgotICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxp
bmVTdG9yYWdlICsgSW5saW5lU3RvcmFnZUNhcGFjaXR5ICogOCwgb2JqZWN0QW5kU3RvcmFnZQor
ICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlICsgOCwgb2JqZWN0QW5kU3Rv
cmFnZQogLnJlYWR5OgotICAgIGxvYWRpIFRhZ09mZnNldCAtIDggKiBJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHlbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBsb2Fk
aSBQYXlsb2FkT2Zmc2V0IC0gOCAqIElubGluZVN0b3JhZ2VDYXBhY2l0eVtvYmplY3RBbmRTdG9y
YWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkaSBUYWdPZmZzZXQgLSA4
W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5
bG9hZE9mZnNldCAtIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXls
b2FkCiBlbmQKIAogbWFjcm8gcmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpAQCAtMTMxOCw2ICsx
MzE4LDcgQEAgX2xsaW50X29wX2dldF9ieV9wbmFtZToKICAgICBsb2FkaSBbY2ZyLCB0MCwgOF0s
IHQwCiAgICAgc3ViaSAxLCB0MAogICAgIGJpYWVxIHQwLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
OjptX251bUNhY2hlYWJsZVNsb3RzW3QzXSwgLm9wR2V0QnlQbmFtZVNsb3cKKyAgICBuZWdpIHQw
CiAgICAgYWRkaSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjptX29mZnNldEJhc2VbdDNdLCB0MAog
ICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDAsIHQyLCB0MSwgdDMpCiAgICAgbG9h
ZGkgNFtQQ10sIHQwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTIzMTY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTc3OSwxOSArNzc5LDIwIEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiAKIAogbWFj
cm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldEtub3duTm90RmluYWwocHJvcGVydHlPZmZz
ZXQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQotICAgIGFzc2VydChtYWNybyAob2spIGJpZ3Rl
cSBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCBvayBlbmQpCisgICAgYXNz
ZXJ0KG1hY3JvIChvaykgYmlsdCBwcm9wZXJ0eU9mZnNldCwgMCwgb2sgZW5kKQogICAgIGxvYWRw
IEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFu
ZFN0b3JhZ2UKLSAgICBsb2FkcCAtOCAqIElubGluZVN0b3JhZ2VDYXBhY2l0eVtvYmplY3RBbmRT
dG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHZhbHVlCisgICAgbG9hZHAgLThbb2JqZWN0QW5k
U3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB2YWx1ZQogZW5kCiAKIG1hY3JvIGxvYWRQcm9w
ZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXQsIG9iamVjdEFuZFN0b3JhZ2UsIHZh
bHVlKQotICAgIGJpbHQgcHJvcGVydHlPZmZzZXQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlz
SW5saW5lCisgICAgYmlndGVxIHByb3BlcnR5T2Zmc2V0LCAwLCAuaXNJbmxpbmUKICAgICBsb2Fk
cCBKU09iamVjdDo6bV9vdXRPZkxpbmVTdG9yYWdlW29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RB
bmRTdG9yYWdlCiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5lOgotICAgIGFkZHAgSlNGaW5hbE9i
amVjdDo6bV9pbmxpbmVTdG9yYWdlICsgSW5saW5lU3RvcmFnZUNhcGFjaXR5ICogOCwgb2JqZWN0
QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlICsgOCwg
b2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRwIC04ICogSW5saW5lU3RvcmFnZUNh
cGFjaXR5W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdmFsdWUKKyAgICBz
eGkycCBwcm9wZXJ0eU9mZnNldCwgcHJvcGVydHlPZmZzZXQKKyAgICBsb2FkcCAtOFtvYmplY3RB
bmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHZhbHVlCiBlbmQKIAogbWFjcm8gcmVzb2x2
ZUdsb2JhbChzaXplLCBzbG93KQpAQCAtODA1LDcgKzgwNiw3IEBAIG1hY3JvIHJlc29sdmVHbG9i
YWwoc2l6ZSwgc2xvdykKICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXSwgdDEKICAg
ICBicG5lcSB0MSwgMjRbUEIsIFBDLCA4XSwgc2xvdwogICAgIGxvYWRpcyAzMltQQiwgUEMsIDhd
LCB0MQotICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQwLCB0MikKKyAgICBs
b2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbCh0MSwgdDAsIHQyKQogICAg
IGxvYWRpcyA4W1BCLCBQQywgOF0sIHQwCiAgICAgc3RvcmVwIHQyLCBbY2ZyLCB0MCwgOF0KICAg
ICBsb2FkcCAoc2l6ZSAtIDEpICogOFtQQiwgUEMsIDhdLCB0MApAQCAtMTE2MSw2ICsxMTYyLDcg
QEAgX2xsaW50X29wX2dldF9ieV9wbmFtZToKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2Nmciwg
dDMsIDhdLCB0MwogICAgIHN1YmkgMSwgdDMKICAgICBiaWFlcSB0MywgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvcjo6bV9udW1DYWNoZWFibGVTbG90c1t0MV0sIC5vcEdldEJ5UG5hbWVTbG93CisgICAg
bmVnaSB0MwogICAgIGFkZGkgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6bV9vZmZzZXRCYXNlW3Qx
XSwgdDMKICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQzLCB0MCwgdDApCiAgICAg
bG9hZGlzIDhbUEIsIFBDLCA4XSwgdDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDEyMzE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTAgKzk5LDEx
IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICBQcm9wZXJ0
eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKICAgICBp
ZiAoc3RvcmFnZSkgewogICAgICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSB0aGlzT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duTm9uRmluYWxPYmplY3QoKTsKKyAgICAg
ICAgc2l6ZV90IGNhcGFjaXR5ID0gdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCk7CiAgICAgICAgIC8vIFdlIGhhdmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8gc2xh
a2UgR0NDJ3MgdGhpcnN0IGZvciB0aGUgYmxvb2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNlIHR5
cGUtcHVubmVkIHBvaW50ZXJzLgotICAgICAgICB2b2lkKiB0ZW1wID0gc3RvcmFnZTsKLSAgICAg
ICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKCZ0ZW1wLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSwg
c3RvcmFnZS0+c2xvdCgpLCBzdG9yYWdlU2l6ZSk7Ci0gICAgICAgIHN0b3JhZ2UgPSBzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXApOworICAgICAgICB2b2lkKiB0ZW1wID0gc3RvcmFn
ZSAtIGNhcGFjaXR5IC0gMTsKKyAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKCZ0ZW1wLCBj
YXBhY2l0eSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSwgKHN0b3JhZ2UgLSBz
dG9yYWdlU2l6ZSAtIDEpLT5zbG90KCksIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgc3RvcmFnZSA9
IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odGVtcCkgKyBjYXBhY2l0eSArIDE7CiAgICAg
ICAgIHRoaXNPYmplY3QtPm1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQoc3RvcmFnZSwgU3RvcmFnZUJh
cnJpZXI6OlVuY2hlY2tlZCk7CiAgICAgfQogCkBAIC0xMjgsMTAgKzEyOSwxMSBAQCB2b2lkIEpT
RmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgUHJvcGVydHlTdG9yYWdlIHN0
b3JhZ2UgPSB0aGlzT2JqZWN0LT5vdXRPZkxpbmVTdG9yYWdlKCk7CiAgICAgaWYgKHN0b3JhZ2Up
IHsKICAgICAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gdGhpc09iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZVNpemVGb3JLbm93bkZpbmFsT2JqZWN0KCk7CisgICAgICAgIHNpemVfdCBjYXBh
Y2l0eSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAg
ICAgICAvLyBXZSBoYXZlIHRoaXMgZXh0cmEgdGVtcCBoZXJlIHRvIHNsYWtlIEdDQydzIHRoaXJz
dCBmb3IgdGhlIGJsb29kIG9mIHRob3NlIHdobyBkZXJlZmVyZW5jZSB0eXBlLXB1bm5lZCBwb2lu
dGVycy4KLSAgICAgICAgdm9pZCogdGVtcCA9IHN0b3JhZ2U7Ci0gICAgICAgIHZpc2l0b3IuY29w
eUFuZEFwcGVuZCgmdGVtcCwgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiksIHN0b3JhZ2UtPnNsb3Qo
KSwgc3RvcmFnZVNpemUpOwotICAgICAgICBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlT
dG9yYWdlPih0ZW1wKTsKKyAgICAgICAgdm9pZCogdGVtcCA9IHN0b3JhZ2UgLSBjYXBhY2l0eSAt
IDE7CisgICAgICAgIHZpc2l0b3IuY29weUFuZEFwcGVuZCgmdGVtcCwgdGhpc09iamVjdC0+c3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiksIChzdG9yYWdlIC0gc3RvcmFnZVNpemUgLSAxKS0+c2xvdCgpLCBzdG9yYWdlU2l6
ZSk7CisgICAgICAgIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXAp
ICsgY2FwYWNpdHkgKyAxOwogICAgICAgICB0aGlzT2JqZWN0LT5tX291dE9mTGluZVN0b3JhZ2Uu
c2V0KHN0b3JhZ2UsIFN0b3JhZ2VCYXJyaWVyOjpVbmNoZWNrZWQpOwogICAgIH0KIApAQCAtNjAz
LDkgKzYwNSw5IEBAIFByb3BlcnR5U3RvcmFnZSBKU09iamVjdDo6Z3Jvd091dE9mTGluZVMKICAg
ICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwogICAgIGlmICghZ2xvYmFsRGF0YS5o
ZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikg
KiBuZXdTaXplLCAmdGVtcCkpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgbmV3UHJvcGVydHlTdG9y
YWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKTsKKyAgICBuZXdQcm9wZXJ0
eVN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXApICsgbmV3U2l6ZSAr
IDE7CiAgICAgCi0gICAgbWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSwgb2xkUHJvcGVydHlTdG9y
YWdlLCBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBvbGRTaXplKTsKKyAgICBt
ZW1jcHkobmV3UHJvcGVydHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIG9sZFByb3BlcnR5U3RvcmFn
ZSAtIG9sZFNpemUgLSAxLCBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBvbGRT
aXplKTsKIAogICAgIEFTU0VSVChuZXdQcm9wZXJ0eVN0b3JhZ2UpOwogICAgIHJldHVybiBuZXdQ
cm9wZXJ0eVN0b3JhZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHJldmlzaW9uIDEyMzE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MywxNCArMTczLDE0IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBj
aGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQgPyBsb2NhdGlvbkZvck9mZnNl
dChvZmZzZXQpIDogMDsKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkT2Zmc2V0KG9mZnNldCkg
PyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpIDogMDsKICAgICAgICAgfQogCiAgICAgICAgIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIGdldERpcmVjdExvY2F0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0
ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNGdW5jdGlvbjsKICAg
ICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZ2xvYmFs
RGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uKTsKLSAgICAg
ICAgICAgIHJldHVybiBvZmZzZXQgIT0gaW52YWxpZE9mZnNldCA/IGxvY2F0aW9uRm9yT2Zmc2V0
KG9mZnNldCkgOiAwOworICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRPZmZzZXQob2Zmc2V0KSA/
IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkgOiAwOwogICAgICAgICB9CiAKICAgICAgICAgYm9v
bCBoYXNJbmxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlKCktPmhhc0lubGlu
ZVN0b3JhZ2UoKTsgfQpAQCAtMjI3LDcgKzIyNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oaW5s
aW5lU3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvZmZzZXRJbklu
bGluZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
bG9jYXRpb24gLSBvdXRPZkxpbmVTdG9yYWdlKCkgKyBmaXJzdE91dE9mTGluZU9mZnNldDsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBsb2NhdGlvbiAtIG91dE9mTGluZVN0b3JhZ2UoKSArIDE7
CiAgICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChyZXN1bHQsIHN0cnVjdHVyZSgpLT50eXBlSW5m
bygpLnR5cGUoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiAxMjMxNjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1NCw3ICsyNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAg
IEpTVmFsdWUgc3RydWN0dXJlT3JVbmRlZmluZWQoKSBjb25zdDsKIAotICAgICAgICBjaGFyKiBk
ZXNjcmlwdGlvbigpIGNvbnN0OworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBjaGFyKiBkZXNj
cmlwdGlvbigpIGNvbnN0OwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBz
eW50aGVzaXplUHJvdG90eXBlKEV4ZWNTdGF0ZSopIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHJl
dmlzaW9uIDEyMzE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
TWFwSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5Miw5ICs0OTIsOSBAQCBpbmxpbmUg
UHJvcGVydHlPZmZzZXQgUHJvcGVydHlUYWJsZTo6bmV4CiAgICAgICAgIHJldHVybiBnZXREZWxl
dGVkT2Zmc2V0KCk7CiAgICAgCiAgICAgaWYgKHR5cGUgPT0gRmluYWxPYmplY3RUeXBlKQotICAg
ICAgICByZXR1cm4gc2l6ZSgpOworICAgICAgICByZXR1cm4gaW5saW5lU3RvcmFnZUNhcGFjaXR5
IC0gMSAtIHNpemUoKTsKICAgICAKLSAgICByZXR1cm4gc2l6ZSgpICsgZmlyc3RPdXRPZkxpbmVP
ZmZzZXQ7CisgICAgcmV0dXJuIC0xIC0gc2l6ZSgpOwogfQogCiBpbmxpbmUgUGFzc093blB0cjxQ
cm9wZXJ0eVRhYmxlPiBQcm9wZXJ0eVRhYmxlOjpjb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHJldmlzaW9uIDEyMzE2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDMyIEBAIG5hbWVzcGFjZSBKU0MgewogCiB0eXBlZGVm
IGludCBQcm9wZXJ0eU9mZnNldDsKIAotc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0IGludmFs
aWRPZmZzZXQgPSAtMTsKKy8vIFByb3BlcnR5IG9mZnNldHMsIHdoZXJlIEsgPSBpbmxpbmVTdG9y
YWdlQ2FwYWNpdHk6CisvLyAgICAgICAgb2Zmc2V0ID4gIEsgICAgICAgICBlcnJvciEgeW91IHNo
b3VsZCBub3Qgc2VlIHRoaXMgdmFsdWUuCisvLyAgICAgICAgb2Zmc2V0ID0gIEsgICAgICAgICBp
bnZhbGlkIG9mZnNldCAocHJvcGVydHkgbm90IGZvdW5kKQorLy8gICAwIDw9IG9mZnNldCA8ICBL
ICAgICAgICAgaW5saW5lIHN0b3JhZ2UKKy8vICAgICAgICBvZmZzZXQgPCAgMCAgICAgICAgIG91
dC1vZi1saW5lIHN0b3JhZ2UKKy8vCisvLyBBc3N1bWluZyA2NC1iaXQgYW5kIGEgZmluYWwgb2Jq
ZWN0LCBwcm9wZXJ0eSBvZmZzZXRzIHByb2NlZWQgYXMgZm9sbG93czoKKy8vIDQgICAgIG5vdCBh
biBvZmZzZXQKKy8vIDMgICAgIGZpcnN0IGlubGluZSBzbG90CisvLyAyICAgICBzZWNvbmQgaW5s
aW5lIHNsb3QKKy8vIDEgICAgIHRoaXJkIGlubGluZSBzbG90CisvLyAwICAgICBmb3VydGggaW5s
aW5lIHNsb3QKKy8vIC0xICAgIGZpcnN0IG91dC1vZi1saW5lIHNsb3QsIGZpZnRoIHNsb3Qgb3Zl
cmFsbAorLy8gLTIgICAgc2Vjb25kIG91dC1vZi1saW5lIHNsb3QsIHNpeHRoIHNsb3Qgb3ZlcmFs
bAorLy8gLi4uIGFuZCBzbyBvbi4KKy8vCisvLyBUaGUgcmF0aW9uYWxlIGlzIGFzIGZvbGxvd3M6
CisvLyAtIFRoZXJlIGlzIGEgc2ltcGxlIGxpbmVhciBwcm9ncmVzc2lvbiBvZiBwcm9wZXJ0eSBv
ZmZzZXRzLCB3aGljaCBtYWtlcworLy8gICBpdCBjaGVhcCBhbmQgZWFzeSB0byBpbXBsZW1lbnQg
cHJvcGVydHkgZW51bWVyYXRpb24uCisvLyAtIEdpdmVuIGFuIG9mZnNldCBhbmQgYSBwb2ludGVy
IHRvIHRoZSBwcm9wZXJ0eSBzdG9yYWdlLCBpdCBpcyBlYXN5IHRvCisvLyAgIGxvb2t1cCB0aGUg
cHJvcGVydHkgd2l0aG91dCB0b28gbXVjaCBhcml0aG1ldGljLgorLy8gLSBJdCBhbGxvd3MgZm9y
IGEgZnV0dXJlIHdoZXJlIGlubGluZSBzdG9yYWdlIGNhcGFjaXR5IHZhcmllcywgYnkKKy8vICAg
anVzdCBjaGFuZ2luZyB3aGF0IHRoZSBmaXJzdCBvZmZzZXQgdXNlZCBmb3IgaW5saW5lIHN0b3Jh
Z2UgaXMuCisKK3N0YXRpYyBjb25zdCBQcm9wZXJ0eU9mZnNldCBpbnZhbGlkT2Zmc2V0ID0gSU5M
SU5FX1NUT1JBR0VfQ0FQQUNJVFk7CiBzdGF0aWMgY29uc3QgUHJvcGVydHlPZmZzZXQgaW5saW5l
U3RvcmFnZUNhcGFjaXR5ID0gSU5MSU5FX1NUT1JBR0VfQ0FQQUNJVFk7Ci1zdGF0aWMgY29uc3Qg
UHJvcGVydHlPZmZzZXQgZmlyc3RPdXRPZkxpbmVPZmZzZXQgPSBpbmxpbmVTdG9yYWdlQ2FwYWNp
dHk7CiAKIC8vIERlY2xhcmUgYWxsIG9mIHRoZSBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IHRlbmQg
dG8gZG8gZm9yd2FyZCBjYWxscy4KIGlubGluZSB2b2lkIGNoZWNrT2Zmc2V0KFByb3BlcnR5T2Zm
c2V0KTsKQEAgLTU2LDYgKzc5LDcgQEAgaW5saW5lIGJvb2wgaXNPdXRPZkxpbmVPZmZzZXQoUHJv
cGVydHlPZgogaW5saW5lIHNpemVfdCBvZmZzZXRJbklubGluZVN0b3JhZ2UoUHJvcGVydHlPZmZz
ZXQpOwogaW5saW5lIHNpemVfdCBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2UoUHJvcGVydHlPZmZz
ZXQpOwogaW5saW5lIHNpemVfdCBvZmZzZXRJblJlc3BlY3RpdmVTdG9yYWdlKFByb3BlcnR5T2Zm
c2V0KTsKK2lubGluZSBzaXplX3QgbnVtYmVyT2ZJbmxpbmVTbG90c0Zvckxhc3RPZmZzZXRJbktu
b3duRmluYWxPYmplY3QoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKIGlubGluZSBzaXplX3QgbnVt
YmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQoUHJvcGVydHlPZmZzZXQpOwogaW5saW5l
IHNpemVfdCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChQcm9wZXJ0eU9mZnNldCwgSlNUeXBl
KTsKIGlubGluZSBQcm9wZXJ0eU9mZnNldCBuZXh0UHJvcGVydHlPZmZzZXRGb3IoUHJvcGVydHlP
ZmZzZXQsIEpTVHlwZSk7CkBAIC02NCwxNCArODgsMTQgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0
IGZpcnN0UHJvcGVydHlPZmZzZQogaW5saW5lIHZvaWQgY2hlY2tPZmZzZXQoUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQogewogICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIEFTU0VSVChvZmZz
ZXQgPj0gaW52YWxpZE9mZnNldCk7CisgICAgQVNTRVJUKG9mZnNldCA8PSBpbmxpbmVTdG9yYWdl
Q2FwYWNpdHkpOwogfQogCiBpbmxpbmUgdm9pZCBjaGVja09mZnNldChQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIEpTVHlwZSB0eXBlKQogewogICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwogICAgIFVO
VVNFRF9QQVJBTSh0eXBlKTsKLSAgICBBU1NFUlQob2Zmc2V0ID49IGludmFsaWRPZmZzZXQpOwor
ICAgIEFTU0VSVChvZmZzZXQgPD0gaW5saW5lU3RvcmFnZUNhcGFjaXR5KTsKICAgICBBU1NFUlQo
b2Zmc2V0ID09IGludmFsaWRPZmZzZXQKICAgICAgICAgICAgfHwgdHlwZSA9PSBGaW5hbE9iamVj
dFR5cGUKICAgICAgICAgICAgfHwgaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7CkBAIC05OCwx
MyArMTIyLDEzIEBAIGlubGluZSBib29sIGlzVmFsaWRPZmZzZXQoUHJvcGVydHlPZmZzZXQKIGlu
bGluZSBib29sIGlzSW5saW5lT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBj
aGVja09mZnNldChvZmZzZXQpOwotICAgIHJldHVybiBvZmZzZXQgPCBpbmxpbmVTdG9yYWdlQ2Fw
YWNpdHk7CisgICAgcmV0dXJuIG9mZnNldCA+PSAwOwogfQogCiBpbmxpbmUgYm9vbCBpc091dE9m
TGluZU9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgY2hlY2tPZmZzZXQob2Zm
c2V0KTsKLSAgICByZXR1cm4gIWlzSW5saW5lT2Zmc2V0KG9mZnNldCk7CisgICAgcmV0dXJuIG9m
ZnNldCA8IDA7CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5JbmxpbmVTdG9yYWdlKFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKQEAgLTExOCwyOSArMTQyLDQwIEBAIGlubGluZSBzaXplX3Qgb2Zm
c2V0SW5PdXRPZkxpbmVTdG9yYWdlKFAKIHsKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwog
ICAgIEFTU0VSVChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKLSAgICByZXR1cm4gb2Zmc2V0
IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQ7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4o
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQpIC0gMSk7CiB9CiAKIGlubGluZSBzaXplX3Qg
b2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CisgICAg
dmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgcmV0dXJuIG9mZnNldEluSW5saW5lU3RvcmFnZShvZmZzZXQpOwogICAgIHJldHVy
biBvZmZzZXRJbk91dE9mTGluZVN0b3JhZ2Uob2Zmc2V0KTsKIH0KIAoraW5saW5lIHNpemVfdCBu
dW1iZXJPZklubGluZVNsb3RzRm9yTGFzdE9mZnNldEluS25vd25GaW5hbE9iamVjdChQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCit7CisgICAgaWYgKG9mZnNldCA8PSAwKQorICAgICAgICByZXR1cm4g
aW5saW5lU3RvcmFnZUNhcGFjaXR5OworICAgIHJldHVybiBpbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
LSBvZmZzZXQ7Cit9CisKIGlubGluZSBzaXplX3QgbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxh
c3RPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGNoZWNrT2Zmc2V0KG9mZnNl
dCk7Ci0gICAgaWYgKG9mZnNldCA8IGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KQorICAgIGlmIChvZmZz
ZXQgPj0gMCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG9mZnNldCAtIGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0ICsgMTsKKyAgICByZXR1cm4gLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zm
c2V0KTsKIH0KIAogaW5saW5lIHNpemVfdCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIEpTVHlwZSB0eXBlKQogewogICAgIGNoZWNrT2Zmc2V0KG9mZnNl
dCwgdHlwZSk7Ci0gICAgaWYgKHR5cGUgPT0gRmluYWxPYmplY3RUeXBlKQotICAgICAgICByZXR1
cm4gb2Zmc2V0ICsgMTsKKyAgICBpZiAodHlwZSA9PSBGaW5hbE9iamVjdFR5cGUpIHsKKyAgICAg
ICAgaW50IHJlc3VsdCA9IGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIG9mZnNldDsKKyAgICAgICAg
QVNTRVJUKHJlc3VsdCA+PSAwKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAg
cmV0dXJuIG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG9mZnNldCk7CiB9CiAK
QEAgLTE0OCw4ICsxODMsOCBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgbmV4dFByb3BlcnR5T2Zm
c2V0CiB7CiAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCB0eXBlKTsKICAgICBpZiAodHlwZSAhPSBG
aW5hbE9iamVjdFR5cGUgJiYgb2Zmc2V0ID09IGludmFsaWRPZmZzZXQpCi0gICAgICAgIHJldHVy
biBmaXJzdE91dE9mTGluZU9mZnNldDsKLSAgICByZXR1cm4gb2Zmc2V0ICsgMTsKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIHJldHVybiBvZmZzZXQgLSAxOwogfQogCiBpbmxpbmUgUHJvcGVydHlP
ZmZzZXQgZmlyc3RQcm9wZXJ0eU9mZnNldEZvcihKU1R5cGUgdHlwZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjMxNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjE1LDEyICsyMTUsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChtX3R5cGVJbmZvLnR5cGUoKSA9PSBGaW5hbE9iamVjdFR5cGUpOwogICAgICAg
ICAgICAgdW5zaWduZWQgcmVzdWx0OwotICAgICAgICAgICAgaWYgKG1fcHJvcGVydHlUYWJsZSkK
KyAgICAgICAgICAgIGlmIChtX3Byb3BlcnR5VGFibGUpIHsKICAgICAgICAgICAgICAgICByZXN1
bHQgPSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtX29mZnNldCArIDE7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZVN0b3JhZ2VDYXBhY2l0
eSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZVN0b3JhZ2VDYXBhY2l0eTsKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlubGluZVN0b3Jh
Z2VDYXBhY2l0eSkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlubGluZVN0b3JhZ2VD
YXBhY2l0eTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51
bWJlck9mSW5saW5lU2xvdHNGb3JMYXN0T2Zmc2V0SW5Lbm93bkZpbmFsT2JqZWN0KG1fb2Zmc2V0
KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgdW5zaWdu
ZWQgaW5saW5lU2l6ZSgpIGNvbnN0CkBAIC0yNDEsMjYgKzI0MSwyOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiBtX291dE9mTGluZUNhcGFjaXR5ICsgaW5saW5lQ2FwYWNp
dHkoKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIE9mZnNldHMgcHJvY2VlZCBpbiB0aGUgbmVn
YXRpdmUgZGlyZWN0aW9uLiBIZW5jZSwgd2Ugd2lsbCBhbHdheXMKKyAgICAgICAgLy8gaGF2ZTog
Zmlyc3RWYWx1ZU9mZnNldCgpID49IGxhc3RWYWxpZE9mZnNldCgpLgogICAgICAgICBQcm9wZXJ0
eU9mZnNldCBmaXJzdFZhbGlkT2Zmc2V0KCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKGhhc0lubGluZVN0b3JhZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgICAgIHJldHVybiBpbmxpbmVTdG9yYWdlQ2FwYWNpdHk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDE7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAg
ICAgICAgIH0KICAgICAgICAgUHJvcGVydHlPZmZzZXQgbGFzdFZhbGlkT2Zmc2V0KCkgY29uc3QK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fcHJvcGVydHlUYWJsZSkgewotICAgICAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IHNpemUgPSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3Rv
cmFnZVNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWhhc0lubGluZVN0b3JhZ2UoKSkKLSAg
ICAgICAgICAgICAgICAgICAgc2l6ZSArPSBpbmxpbmVTdG9yYWdlQ2FwYWNpdHk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHNpemUgLSAxOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IHJlc3VsdCA9IC1tX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaGFzSW5saW5lU3RvcmFnZSgpKQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gaW5saW5lU3RvcmFnZUNhcGFjaXR5OworICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CiAgICAg
ICAgIH0KICAgICAgICAgYm9vbCBpc1ZhbGlkT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkg
Y29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG9mZnNldCA+PSBmaXJzdFZhbGlk
T2Zmc2V0KCkKLSAgICAgICAgICAgICAgICAmJiBvZmZzZXQgPD0gbGFzdFZhbGlkT2Zmc2V0KCk7
CisgICAgICAgICAgICByZXR1cm4gb2Zmc2V0IDw9IGZpcnN0VmFsaWRPZmZzZXQoKQorICAgICAg
ICAgICAgICAgICYmIG9mZnNldCA+PSBsYXN0VmFsaWRPZmZzZXQoKTsKICAgICAgICAgfQogCiAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IGdldChKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153679</attachid>
            <date>2012-07-21 14:59:57 -0700</date>
            <delta_ts>2012-07-23 17:29:07 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>halfbutterflies_patch_1.diff</filename>
            <type>text/plain</type>
            <size>34738</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzMjk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBA
CisyMDEyLTA3LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHJvcGVydHkgc3RvcmFnZSBzaG91bGQgZ3JvdyBpbiByZXZlcnNlIGFkZHJlc3MgZGlyZWN0aW9u
LCB0byBzdXBwb3J0IGJ1dHRlcmZsaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MTc4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuICBDdXJyZW50bHkgb25seSA2NC1iaXQg
d29ya3MsIGFuZCB0aGVyZSBpcyBzb21lIG1hZ2ljCisgICAgICAgIHRoYXQgd2lsbCBoYXZlIHRv
IGJlIGRvbmUgdG8gbWFrZSBBUk12NyB3b3JrIGR1ZSB0byB0aGUgcGF0Y2hpbmcgb2YKKyAgICAg
ICAgbmVnYXRpdmUgb2Zmc2V0cy4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6aXND
b21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbjo6cmVwYXRjaENvbXBhY3QpOgorICAgICAgICAqIGFzc2VtYmxlci9YODZB
c3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpyZXBhdGNoQ29tcGFjdCk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6ZHVtcFN0
cnVjdHVyZSk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oOgorICAgICAgICAo
SlNDOjpHZXRCeUlkU3RhdHVzOjpHZXRCeUlkU3RhdHVzKToKKyAgICAgICAgKiBkZmcvREZHT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBk
ZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToK
KyAgICAgICAgKEpTQzo6REZHOjplbWl0UHV0VHJhbnNpdGlvblN0dWIpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZl
Um9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6Z2VuZXJpY0FkZFBv
aW50ZXIpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3BhY2UuaDoKKyAgICAgICAgKENvcGllZFNw
YWNlKToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oOgorICAgICAg
ICAoSlNDOjpDb3BpZWRTcGFjZTo6cGluSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVHZXREaXJlY3RPZmZzZXQpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVFRodW5rczo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKiBqc2MuY3Bw
OgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5j
dGlvbkRlc2NyaWJlKToKKyAgICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NM
T1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICog
cnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0TG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0Rm9yTG9jYXRpb24pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgorICAgICAgICAoSlNWYWx1ZSk6CisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oOgorICAgICAgICAoSlNDOjpvZmZzZXRJbk91dE9mTGlu
ZVN0b3JhZ2UpOgorCiAyMDEyLTA3LTIxICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFtXSU5dIFVzZSBHZXREYXRlRm9ybWF0IGFuZCBHZXRUaW1lRm9y
bWF0IGluc3RlYWQgb2Ygc3RyZnRpbWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lv
biAxMjMyODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODQsNiArODQsNyBAQCBzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZG
aWxlCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQo
RXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkRlYnVnKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25EZXNjcmliZShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uSlNDU3RhY2soRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSopOwogI2lmbmRlZiBOREVC
VUcKQEAgLTE5MSw2ICsxOTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAKICAgICAgICAgYWRkRnVuY3Rpb24oZ2xvYmFs
RGF0YSwgImRlYnVnIiwgZnVuY3Rpb25EZWJ1ZywgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKGds
b2JhbERhdGEsICJkZXNjcmliZSIsIGZ1bmN0aW9uRGVzY3JpYmUsIDEpOwogICAgICAgICBhZGRG
dW5jdGlvbihnbG9iYWxEYXRhLCAicHJpbnQiLCBmdW5jdGlvblByaW50LCAxKTsKICAgICAgICAg
YWRkRnVuY3Rpb24oZ2xvYmFsRGF0YSwgInF1aXQiLCBmdW5jdGlvblF1aXQsIDApOwogICAgICAg
ICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAiZ2MiLCBmdW5jdGlvbkdDLCAwKTsKQEAgLTI5OCw2
ICszMDAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlYgogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZXNjcmliZShFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgZnByaW50ZihzdGRlcnIsICItLT4gJXNcbiIsIGV4ZWMtPmFyZ3VtZW50KDApLmRlc2NyaXB0
aW9uKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0NTdGFjayhFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgU3RyaW5nIHRyYWNlID0gIi0tPiBTdGFjayB0cmFjZTpcbiI7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxMjMyODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDEwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFg4NkFzc2VtYmxlcjo6RlBS
ZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKICAgICB0eXBlZGVmIFg4NkFzc2VtYmxlcjo6WE1NUmVn
aXN0ZXJJRCBYTU1SZWdpc3RlcklEOwogICAgIAotICAgIHN0YXRpYyBjb25zdCBpbnQgTWF4aW11
bUNvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldCA9IDEyNzsKKyAgICBzdGF0aWMgYm9vbCBp
c0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChwdHJkaWZmX3QgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWUgPj0gLTEyOCAmJiB2YWx1ZSA8PSAxMjc7CisgICAgfQogCiAg
ICAgZW51bSBSZWxhdGlvbmFsQ29uZGl0aW9uIHsKICAgICAgICAgRXF1YWwgPSBYODZBc3NlbWJs
ZXI6OkNvbmRpdGlvbkUsCkBAIC00OTQsOCArNDk3LDcgQEAgcHVibGljOgogICAgIAogICAgIHN0
YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3QgZGF0
YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWx1
ZSA+PSAwKTsKLSAgICAgICAgQVNTRVJUKHZhbHVlIDwgTWF4aW11bUNvbXBhY3RQdHJBbGlnbmVk
QWRkcmVzc09mZnNldCk7CisgICAgICAgIEFTU0VSVChpc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVz
c09mZnNldCh2YWx1ZSkpOwogICAgICAgICBBc3NlbWJsZXJUeXBlX1Q6OnJlcGF0Y2hDb21wYWN0
KGRhdGFMYWJlbENvbXBhY3QuZGF0YUxvY2F0aW9uKCksIHZhbHVlKTsKICAgICB9CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJ
KHJldmlzaW9uIDEyMzI4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2
QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MjksNyArMTgyOSw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdCh2b2lkKiB3aGVyZSwgaW50MzJf
dCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZSA+PSAwKTsKKyAgICAgICAgQVNT
RVJUKHZhbHVlID49IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWluKCkpOwogICAgICAg
ICBBU1NFUlQodmFsdWUgPD0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ4X3Q+OjptYXgoKSk7CiAg
ICAgICAgIHNldEludDgod2hlcmUsIHZhbHVlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTIzMjgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1NSw5ICsyNTUsOSBAQCBzdGF0aWMgdm9pZCBkdW1wU3RydWN0dXJlKGNvbnN0IGNo
YXIqIG5hCiAgICAgCiAgICAgZGF0YUxvZygiJXMgPSAlcCIsIG5hbWUsIHN0cnVjdHVyZSk7CiAg
ICAgCi0gICAgc2l6ZV90IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgaWRlbnQpOwotICAgIGlmIChvZmZzZXQgIT0gbm90Rm91bmQpCi0gICAgICAgIGRhdGFMb2co
IiAob2Zmc2V0ID0gJWx1KSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG9mZnNldCkpOwor
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgaWRlbnQpOworICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAg
ZGF0YUxvZygiIChvZmZzZXQgPSAlZCkiLCBvZmZzZXQpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkocmV2aXNp
b24gMTIzMjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
R2V0QnlJZFN0YXR1cygKICAgICAgICAgU3RhdGUgc3RhdGUsIGJvb2wgd2FzU2VlbkluSklULCBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLAotICAgICAg
ICBzaXplX3Qgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0g
SlNWYWx1ZSgpLCBWZWN0b3I8U3RydWN0dXJlKj4gY2hhaW4gPSBWZWN0b3I8U3RydWN0dXJlKj4o
KSkKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwgSlNWYWx1
ZSBzcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpLCBWZWN0b3I8U3RydWN0dXJlKj4gY2hhaW4gPSBW
ZWN0b3I8U3RydWN0dXJlKj4oKSkKICAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQogICAgICAgICAs
IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAgICAgICAgLCBtX2NoYWluKGNoYWluKQpA
QCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAg
ICAgICAsIG1fd2FzU2VlbkluSklUKHdhc1NlZW5JbkpJVCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VCgoc3RhdGUgPT0gU2ltcGxlKSA9PSAob2Zmc2V0ICE9IG5vdEZvdW5kKSk7CisgICAgICAgIEFT
U0VSVCgoc3RhdGUgPT0gU2ltcGxlKSA9PSAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpKTsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sq
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJZGVudGlmaWVyJik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyMzI4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNDgsNyArMTI0OCw3IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQWxs
b2NhdGVQcm8KICAgICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKCFnbG9iYWxEYXRhLmhlYXAudHJ5
QWxsb2NhdGVTdG9yYWdlKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVl
KSwgJnJlc3VsdCkpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJl
aW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlc3VsdCkgKyBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNp
dHkgKyAxKTsKIH0KIAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZShFeGVjU3RhdGUqIGV4ZWMsIHNpemVfdCBuZXdTaXplKQpAQCAtMTI1Nyw3ICsx
MjU3LDcgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVBybwogICAgIHZv
aWQqIHJlc3VsdDsKICAgICBpZiAoIWdsb2JhbERhdGEuaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
bmV3U2l6ZSwgJnJlc3VsdCkpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlc3VsdCkgKyAxKSArIG5ld1NpemU7CiB9
CiAKIGRvdWJsZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCBhLCBp
bnQzMl90IGIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTIzMjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCB0eXBlZGVmIHZvaWQg
REZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAo
KlZfREZHT3BlcmF0aW9uX1cpKFdhdGNocG9pbnRTZXQqKTsKIHR5cGVkZWYgY2hhciogREZHX09Q
RVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFyKiBE
RkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVMpKEV4ZWNTdGF0ZSosIHNpemVfdCk7Cit0
eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUFMpKEV4ZWNTdGF0
ZSosIHZvaWQqLCBzaXplX3QpOwogCiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJvdmlkZSBjYWxs
YmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28gY29tcGxl
eCB0byBKSVQuCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdS
ZXBhdGNoLmNwcAkocmV2aXNpb24gMTIzMjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDcgKzMwMSw4IEBAIHN0YXRp
YyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKIAogICAgIC8vIE9wdGltaXplIHNl
bGYgYWNjZXNzLgogICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSB7Ci0gICAg
ICAgIGlmICgoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSAhPSBQcm9wZXJ0eVNsb3Q6OlZhbHVl
KSB8fCAoKHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpID4gKHVuc2lnbmVk
KU1hY3JvQXNzZW1ibGVyOjpNYXhpbXVtQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KSkg
eworICAgICAgICBpZiAoKHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgIT0gUHJvcGVydHlTbG90
OjpWYWx1ZSkKKyAgICAgICAgICAgIHx8ICFNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxp
Z25lZEFkZHJlc3NPZmZzZXQob2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpKSkgewogICAgICAgICAgICAgZGZnUmVwYXRjaENhbGwoY29kZUJsb2NrLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTgyNCw3ICs4MjUsNyBAQCBz
dGF0aWMgdm9pZCBlbWl0UHV0VHJhbnNpdGlvblN0dWIoCiAgICAgICAgICAgICBzdHViSml0LnN0
b3JlUHRyKHNjcmF0Y2hHUFIxLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcp
OwogICAgICAgICAgICAgc3R1YkppdC5uZWdQdHIoc2NyYXRjaEdQUjEpOwogICAgICAgICAgICAg
c3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxs
b2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAg
c3R1YkppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2Ny
YXRjaEdQUjEpOworICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG9sZFN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICAgICAgICAgIEFTU0VSVChuZXdTaXpl
ID4gb2xkU2l6ZSk7CkBAIC04MzUsMTEgKzgzNiwxMSBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0VHJh
bnNpdGlvblN0dWIoCiAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCAm
Y29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgICAgICAgICAgc3R1Ykpp
dC5uZWdQdHIoc2NyYXRjaEdQUjEpOwogICAgICAgICAgICAgc3R1YkppdC5hZGRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXls
b2FkRW5kKSwgc2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgc3R1YkppdC5zdWJQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAg
ICAgc3R1YkppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSlNW
YWx1ZSkpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgICAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIx
ID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsIHNjcmF0Y2hHUFIyID0g
YXZhaWxhYmxlCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBv
bGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICAgICAgICAgIHN0dWJK
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywgb2Zmc2V0KSwg
c2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQ
UjIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCBvZmZzZXQpKTsKKyAgICAg
ICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7CisgICAgICAgICAg
ICAgICAgc3R1YkppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIz
LCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSAqIDIpKSwgc2NyYXRjaEdQUjIpOworICAgICAg
ICAgICAgICAgIHN0dWJKaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSkpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTIz
MjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwOSwxMiArMzkwOSwxMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxp
bmVTdG9yYWdlKCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHJlc29sdmVJbmZvR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoR2xvYmFs
UmVzb2x2ZUluZm8sIG9mZnNldCkpLCByZXNvbHZlSW5mb0dQUik7CiAjaWYgREZHX0VOQUJMRShK
SVRfQVNTRVJUKQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc091dE9mTGluZSA9IG1faml0
LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIHJlc29sdmVJbmZvR1BS
LCBUcnVzdGVkSW1tMzIoaW5saW5lU3RvcmFnZUNhcGFjaXR5KSk7CisgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzT3V0T2ZMaW5lID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Okxlc3NU
aGFuLCByZXNvbHZlSW5mb0dQUiwgVHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgbV9qaXQuYnJl
YWtwb2ludCgpOwogICAgICAgICBpc091dE9mTGluZS5saW5rKCZtX2ppdCk7CiAjZW5kaWYKLSAg
ICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0UGF5bG9hZEdQ
UiwgcmVzb2x2ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykgLSBpbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1ZhbHVlKSkpLCByZXN1bHRU
YWdHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1
bHRQYXlsb2FkR1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkgLSBp
bmxpbmVTdG9yYWdlQ2FwYWNpdHkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1Zh
bHVlKSkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjpCYXNlSW5kZXgocmVzdWx0UGF5bG9hZEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJVENvbXBp
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykgLSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1ZhbHVlKSkpLCBy
ZXN1bHRUYWdHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkJhc2VJbmRl
eChyZXN1bHRQYXlsb2FkR1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkgLSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1ZhbHVlKSkpLCByZXN1bHRQYXls
b2FkR1BSKTsKIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTIzMjgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkw
Miw2ICszOTAyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJm1f
aml0KTsKICNlbmRpZgorICAgICAgICBtX2ppdC5uZWczMihyZXNvbHZlSW5mb0dQUik7CisgICAg
ICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc29sdmVJbmZvR1BSLCByZXNvbHZlSW5mb0dQ
Uik7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZ2xvYmFsT2Jq
ZWN0R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZPdXRPZkxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIp
OwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0R1BS
LCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxlUHRyLCAtaW5saW5lU3RvcmFnZUNh
cGFjaXR5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwgcmVzdWx0
R1BSKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTIzMjgzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNTcs
NyArMzE1Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAg
ICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRS
ZW1haW5pbmcpOwogICAgIG1faml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKICAgICBtX2ppdC5hZGRQ
dHIoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJl
bnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUik7Ci0gICAgbV9qaXQuc3ViUHRyKEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIpOworICAgIG1faml0LmFkZFB0cihK
SVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwog
ICAgICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxs
KHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0
aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIpKTsKQEAgLTMxOTEsMTQgKzMxOTEsMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIG1faml0LnN0b3JlUHRyKHNj
cmF0Y2hHUFIyLCAmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgIG1f
aml0Lm5lZ1B0cihzY3JhdGNoR1BSMik7CiAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpB
YnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNj
cmF0Y2hHUFIyKTsKLSAgICBtX2ppdC5zdWJQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihu
ZXdTaXplKSwgc2NyYXRjaEdQUjIpOworICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1
c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIyKTsKICAgICAgICAgCiAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhp
cywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIyLCBuZXdTaXpl
KSk7CiAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BS
MSA9IHNjcmF0Y2gKLSAgICBmb3IgKHNpemVfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXpl
OyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKG9sZFN0b3JhZ2VHUFIsIG9mZnNldCksIHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIyLCBvZmZzZXQpKTsKKyAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZz
ZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZv
aWQqKSkgeworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9sZFN0
b3JhZ2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICogMikpLCBzY3JhdGNoR1BSMSk7
CisgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSMiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKiAyKSkpOwogICAgIH0K
ICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSk7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiAxMjMyODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTExNjEsNiArMTE2MSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHNpemUp
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFBfREZHT3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBvbGQsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKG9sZCwgVHJ1c3RlZEltbVB0cihzaXplKSk7CisgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
KyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzRXhlY1N0YXRlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAxMjMyODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDEwICs2Niw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgogaW5saW5lIHZv
aWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVyKHZvaWQqIHAsIFRpbnlCbG9v
bUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKIHsKICAgICBtYXJrSG9vay5tYXJr
KHApOwotICAgIAotICAgIENvcGllZEJsb2NrKiBibG9jazsKLSAgICBpZiAobV9jb3BpZWRTcGFj
ZS0+Y29udGFpbnMocCwgYmxvY2spKQotICAgICAgICBtX2NvcGllZFNwYWNlLT5waW4oYmxvY2sp
OworCisgICAgbV9jb3BpZWRTcGFjZS0+cGluSWZOZWNlc3NhcnkocCk7CiAgICAgCiAgICAgTWFy
a2VkQmxvY2sqIGNhbmRpZGF0ZSA9IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihwKTsKICAgICBpZiAo
ZmlsdGVyLnJ1bGVPdXQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihjYW5kaWRhdGUpKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCShyZXZpc2lvbiAxMjMy
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnMoQ29w
aWVkQmxvY2sqKTsKICAgICBib29sIGNvbnRhaW5zKHZvaWQqLCBDb3BpZWRCbG9jayomKTsKKyAg
ICAKKyAgICB2b2lkIHBpbklmTmVjZXNzYXJ5KHZvaWQqIHBvaW50ZXIpOwogCiAgICAgc2l6ZV90
IHNpemUoKTsKICAgICBzaXplX3QgY2FwYWNpdHkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lv
biAxMjMyODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGlu
ZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNDIgQEAgaW5saW5lIHZvaWQg
Q29waWVkU3BhY2U6OnBpbihDb3BpZWRCbG9jawogICAgIGJsb2NrLT5tX2lzUGlubmVkID0gdHJ1
ZTsKIH0KIAoraW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnBpbklmTmVjZXNzYXJ5KHZvaWQqIG9w
YXF1ZVBvaW50ZXIpCit7CisgICAgLy8gUG9pbnRlcnMgaW50byB0aGUgY29waWVkIHNwYWNlIGNv
bWUgaW4gdGhlIGZvbGxvd2luZyB2YXJpZXRpZXM6CisgICAgLy8gMSkgIFBvaW50ZXJzIHRvIHRo
ZSBzdGFydCBvZiBhIHNwYW4gb2YgbWVtb3J5LiBUaGlzIGlzIHRoZSBtb3N0CisgICAgLy8gICAg
IG5hdHVyYWwgdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgbW9zdCBjb21tb24uCisgICAgLy8g
MikgIFBvaW50ZXJzIHRvIG9uZSB2YWx1ZS1zaXplZCAoOCBieXRlKSB3b3JkIHBhc3QgdGhlIGVu
ZCBvZgorICAgIC8vICAgICBhIHNwYW4gb2YgbWVtb3J5LiBUaGlzIGN1cnJlbnRseSBvY2N1cnMg
d2l0aCBzZW1pLWJ1dHRlcmZsaWVzCisgICAgLy8gICAgIGFuZCBzaG91bGQgYmUgZml4ZWQgc29v
biwgb25jZSB0aGUgb3RoZXIgaGFsZiBvZiB0aGUKKyAgICAvLyAgICAgYnV0dGVyZmx5IGxhbmRz
LgorICAgIC8vIDMpICBQb2ludGVycyB0byB0aGUgaW5uYXJkcyBhcmlzaW5nIGZyb20gbG9vcCBp
bmR1Y3Rpb24gdmFyaWFibGUKKyAgICAvLyAgICAgb3B0aW1pemF0aW9ucyAoZWl0aGVyIG1hbnVh
bCBvbmVzIG9yIGF1dG9tYXRpYywgYnkgdGhlCisgICAgLy8gICAgIGNvbXBpbGVyKS4KKyAgICAv
LyA0KSAgUG9pbnRlcnMgdG8gdGhlIGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IGluICgxKSBhcmlz
aW5nIGZyb20KKyAgICAvLyAgICAgaW5kdWN0aW9uIHZhcmlhYmxlIG9wdGltaXphdGlvbnMgY29t
YmluZWQgd2l0aCB0aGUKKyAgICAvLyAgICAgR0MtdG8tY29tcGlsZXIgY29udHJhY3QgbGFpZCBv
dXQgaW4gdGhlIEMgc3BlYzogYSBwb2ludGVyIHRvCisgICAgLy8gICAgIHRoZSBlbmQgb2YgYSBz
cGFuIG9mIG1lbW9yeSBtdXN0IGJlIGNvbnNpZGVyZWQgdG8gYmUgYQorICAgIC8vICAgICBwb2lu
dGVyIHRvIHRoYXQgbWVtb3J5LgorICAgIAorICAgIEVuY29kZWRKU1ZhbHVlKiBwb2ludGVyID0g
cmVpbnRlcnByZXRfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KG9wYXF1ZVBvaW50ZXIpOworICAgIENv
cGllZEJsb2NrKiBibG9jazsKKworICAgIC8vIEhhbmRsZSAoMSkgYW5kICgzKS4KKyAgICBpZiAo
Y29udGFpbnMocG9pbnRlciwgYmxvY2spKQorICAgICAgICBwaW4oYmxvY2spOworICAgIAorICAg
IC8vIEhhbmRsZSAoNCkuCisgICAgcG9pbnRlci0tOworICAgIGlmIChjb250YWlucyhwb2ludGVy
LCBibG9jaykpCisgICAgICAgIHBpbihibG9jayk7CisgICAgCisgICAgLy8gSGFuZGxlICgyKQor
ICAgIHBvaW50ZXItLTsKKyAgICBpZiAoY29udGFpbnMocG9pbnRlciwgYmxvY2spKQorICAgICAg
ICBwaW4oYmxvY2spOworfQorCiBpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlp
bmcoKQogewogICAgIERvdWJseUxpbmtlZExpc3Q8SGVhcEJsb2NrPiogdGVtcCA9IG1fZnJvbVNw
YWNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHJldmlzaW9uIDEyMzI4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksOSArMTU5LDEwIEBA
IHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0T2Zmc2V0KFJlZ2lzdGUKICAgICBpZiAoZmluYWxP
YmplY3RNb2RlID09IE1heUJlRmluYWwpIHsKICAgICAgICAgSnVtcCBpc0lubGluZSA9IGJyYW5j
aDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkp
KTsKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9m
TGluZVN0b3JhZ2UoKSksIHNjcmF0Y2gpOworICAgICAgICBuZWczMihvZmZzZXQpOwogICAgICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgICAgIGlzSW5saW5lLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
ICsgaW5saW5lU3RvcmFnZUNhcGFjaXR5ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGJhc2Us
IHNjcmF0Y2gpOworICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSAtIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCBiYXNlLCBzY3JhdGNoKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMp
OwogICAgIH0gZWxzZSB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApAQCAtMTcwLDggKzE3MSwxMCBA
QCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIGlzT3V0
T2ZMaW5lLmxpbmsodGhpcyk7CiAjZW5kaWYKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2gpOworICAgICAg
ICBuZWczMihvZmZzZXQpOwogICAgIH0KLSAgICBsb2FkUHRyKEJhc2VJbmRleChzY3JhdGNoLCBv
ZmZzZXQsIFNjYWxlUHRyLCAtaW5saW5lU3RvcmFnZUNhcGFjaXR5ICogc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwgcmVzdWx0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0
cihvZmZzZXQsIG9mZnNldCk7CisgICAgbG9hZFB0cihCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0
LCBTY2FsZVB0ciwgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwgcmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTIzMjgzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkzMiw3ICs5MzIsOCBAQCBORVZFUl9JTkxJTkUgdm9pZCBKSVRUaHVua3M6OnRyeUNhY2hlR2V0
CiAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKICAgICAgICAgLy8gc2V0
IHRoaXMgdXAsIHNvIGRlcmVmU3RydWN0dXJlcyBjYW4gZG8gaXQncyBqb2IuCiAgICAgICAgIHN0
dWJJbmZvLT5pbml0R2V0QnlJZFNlbGYoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgIGlmICgoc2xvdC5jYWNo
ZWRQcm9wZXJ0eVR5cGUoKSAhPSBQcm9wZXJ0eVNsb3Q6OlZhbHVlKSB8fCAoKHNsb3QuY2FjaGVk
T2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkpID4gKHVuc2lnbmVkKU1hY3JvQXNzZW1ibGVyOjpN
YXhpbXVtQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KSkKKyAgICAgICAgaWYgKChzbG90
LmNhY2hlZFByb3BlcnR5VHlwZSgpICE9IFByb3BlcnR5U2xvdDo6VmFsdWUpCisgICAgICAgICAg
ICB8fCAhTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9m
ZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpCiAgICAg
ICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRy
ZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHViSW5m
bywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCByZXR1cm5BZGRyZXNzKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludENvbW1vbi5oCShyZXZpc2lvbiAxMjMy
ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRDb21tb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQAogLy8gaG93IHRoZSBHQyBhbGxvY2F0ZXMuCiAjZGVm
aW5lIExMSU5UX0FMV0FZU19BTExPQ0FURV9TTE9XIDAKIAorLy8gRGlzYWJsZSBpbmxpbmUgY2Fj
aGluZyBvZiBnZXRfYnlfaWQgYW5kIHB1dF9ieV9pZC4KKyNkZWZpbmUgTExJTlRfQUxXQVlTX0FD
Q0VTU19TTE9XIDAKKwogLy8gRW5hYmxlIE9TUiBpbnRvIHRoZSBKSVQuIERpc2FibGluZyB0aGlz
IHdoaWxlIHRoZSBMTEludCBpcyBlbmFibGVkIGVmZmVjdGl2ZWx5CiAvLyB0dXJucyBvZmYgYWxs
IEpJVCdpbmcsIHNpbmNlIGluIExMSW50J3MgcGFybGFuY2UsIE9TUiBzdWJzdW1lcyBhbnkgZm9y
bSBvZiBKSVQKIC8vIGludm9jYXRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEyMzI4MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4Myw3ICs4ODMsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lk
CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgTExJTlRfT1AoMSkgPSByZXN1bHQ7
CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzQ2VsbCgpCisgICAgaWYgKCFMTElOVF9BTFdBWVNfQUND
RVNTX1NMT1cKKyAgICAgICAgJiYgYmFzZVZhbHVlLmlzQ2VsbCgpCiAgICAgICAgICYmIHNsb3Qu
aXNDYWNoZWFibGUoKQogICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCiAg
ICAgICAgICYmIHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpWYWx1
ZSkgewpAQCAtOTM1LDcgKzkzNiw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9w
dXRfYnlfaWQKICAgICAgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgTExJTlRfT1BfQygz
KS5qc1ZhbHVlKCksIHNsb3QpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIAot
ICAgIGlmIChiYXNlVmFsdWUuaXNDZWxsKCkKKyAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1Nf
U0xPVworICAgICAgICAmJiBiYXNlVmFsdWUuaXNDZWxsKCkKICAgICAgICAgJiYgc2xvdC5pc0Nh
Y2hlYWJsZSgpKSB7CiAgICAgICAgIAogICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZh
bHVlLmFzQ2VsbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDEyMzI4MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC05MjEsMjAgKzkyMSwyMiBAQCBfbGxpbnRfb3BfaXNfc3RyaW5n
OgogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9w
ZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFnZSwgdGFnLCBwYXlsb2FkKQogICAgIGFzc2VydCht
YWNybyAob2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCBv
ayBlbmQpCisgICAgbmVnaSBwcm9wZXJ0eU9mZnNldAogICAgIGxvYWRwIEpTT2JqZWN0OjptX291
dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKLSAgICBs
b2FkaSBUYWdPZmZzZXQgLSA4ICogSW5saW5lU3RvcmFnZUNhcGFjaXR5W29iamVjdEFuZFN0b3Jh
Z2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNldCAtIDgg
KiBJbmxpbmVTdG9yYWdlQ2FwYWNpdHlbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQs
IDhdLCBwYXlsb2FkCisgICAgbG9hZGkgVGFnT2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0
eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZworICAg
IGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29i
amVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgcGF5bG9hZAogZW5kCiAKIG1hY3Jv
IGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQocHJvcGVydHlPZmZzZXQsIG9iamVjdEFuZFN0
b3JhZ2UsIHRhZywgcGF5bG9hZCkKICAgICBiaWx0IHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9y
YWdlQ2FwYWNpdHksIC5pc0lubGluZQogICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0
b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBuZWdpIHByb3Bl
cnR5T2Zmc2V0CiAgICAgam1wIC5yZWFkeQogLmlzSW5saW5lOgotICAgIGFkZHAgSlNGaW5hbE9i
amVjdDo6bV9pbmxpbmVTdG9yYWdlICsgSW5saW5lU3RvcmFnZUNhcGFjaXR5ICogOCwgb2JqZWN0
QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElu
bGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5Ogot
ICAgIGxvYWRpIFRhZ09mZnNldCAtIDggKiBJbmxpbmVTdG9yYWdlQ2FwYWNpdHlbb2JqZWN0QW5k
U3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB0YWcKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0
IC0gOCAqIElubGluZVN0b3JhZ2VDYXBhY2l0eVtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9m
ZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2FkaSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNh
cGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFn
CisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAq
IDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAog
bWFjcm8gcmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9u
IDEyMzI4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC03NzgsMjAgKzc3OCwyMyBAQCBfbGxpbnRfb3Bf
aXNfc3RyaW5nOgogICAgIGRpc3BhdGNoKDMpCiAKIAotbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJp
YWJsZU9mZnNldEtub3duTm90RmluYWwocHJvcGVydHlPZmZzZXQsIG9iamVjdEFuZFN0b3JhZ2Us
IHZhbHVlKQotICAgIGFzc2VydChtYWNybyAob2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldCwgSW5s
aW5lU3RvcmFnZUNhcGFjaXR5LCBvayBlbmQpCittYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxl
T2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgb2JqZWN0QW5kU3Rv
cmFnZSwgdmFsdWUpCisgICAgYXNzZXJ0KG1hY3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0
QXNQb2ludGVyLCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIG9rIGVuZCkKKyAgICBuZWdwIHByb3Bl
cnR5T2Zmc2V0QXNQb2ludGVyCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFn
ZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQotICAgIGxvYWRwIC04ICogSW5s
aW5lU3RvcmFnZUNhcGFjaXR5W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwg
dmFsdWUKKyAgICBsb2FkcCAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFu
ZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCA4XSwgdmFsdWUKIGVuZAogCi1tYWNy
byBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRT
dG9yYWdlLCB2YWx1ZSkKLSAgICBiaWx0IHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHksIC5pc0lubGluZQorbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9w
ZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKKyAgICBiaWx0IHByb3Bl
cnR5T2Zmc2V0QXNJbnQsIElubGluZVN0b3JhZ2VDYXBhY2l0eSwgLmlzSW5saW5lCiAgICAgbG9h
ZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0
QW5kU3RvcmFnZQorICAgIG5lZ2kgcHJvcGVydHlPZmZzZXRBc0ludAorICAgIHN4aTJwIHByb3Bl
cnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zmc2V0QXNJbnQKICAgICBqbXAgLnJlYWR5CiAuaXNJ
bmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgKyBJbmxpbmVT
dG9yYWdlQ2FwYWNpdHkgKiA4LCBvYmplY3RBbmRTdG9yYWdlCisgICAgYWRkcCBKU0ZpbmFsT2Jq
ZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBv
YmplY3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0gICAgbG9hZHAgLTggKiBJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHlbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCB2YWx1ZQorICAgIGxv
YWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJv
cGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCiBlbmQKIAogbWFjcm8gcmVzb2x2ZUdsb2JhbChz
aXplLCBzbG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkocmV2aXNpb24gMTIzMjgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTEgQEAgdm9pZCBKU09i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIFByb3BlcnR5U3RvcmFnZSBzdG9y
YWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5lU3RvcmFnZSgpOwogICAgIGlmIChzdG9yYWdlKSB7
CiAgICAgICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5hbE9iamVjdCgpOworICAgICAgICBzaXplX3QgY2Fw
YWNpdHkgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAg
ICAgICAgLy8gV2UgaGF2ZSB0aGlzIGV4dHJhIHRlbXAgaGVyZSB0byBzbGFrZSBHQ0MncyB0aGly
c3QgZm9yIHRoZSBibG9vZCBvZiB0aG9zZSB3aG8gZGVyZWZlcmVuY2UgdHlwZS1wdW5uZWQgcG9p
bnRlcnMuCi0gICAgICAgIHZvaWQqIHRlbXAgPSBzdG9yYWdlOwotICAgICAgICB2aXNpdG9yLmNv
cHlBbmRBcHBlbmQoJnRlbXAsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pLCBzdG9yYWdlLT5zbG90
KCksIHN0b3JhZ2VTaXplKTsKLSAgICAgICAgc3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5
U3RvcmFnZT4odGVtcCk7CisgICAgICAgIHZvaWQqIHRlbXAgPSBzdG9yYWdlIC0gY2FwYWNpdHkg
LSAxOworICAgICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQoJnRlbXAsIGNhcGFjaXR5ICogc2l6
ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pLCAoc3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0g
MSktPnNsb3QoKSwgc3RvcmFnZVNpemUpOworICAgICAgICBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8
UHJvcGVydHlTdG9yYWdlPih0ZW1wKSArIGNhcGFjaXR5ICsgMTsKICAgICAgICAgdGhpc09iamVj
dC0+bV9vdXRPZkxpbmVTdG9yYWdlLnNldChzdG9yYWdlLCBTdG9yYWdlQmFycmllcjo6VW5jaGVj
a2VkKTsKICAgICB9CiAKQEAgLTEyOCwxMCArMTI5LDExIEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBQcm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNP
YmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsKICAgICBpZiAoc3RvcmFnZSkgewogICAgICAgICBz
aXplX3Qgc3RvcmFnZVNpemUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6
ZUZvcktub3duRmluYWxPYmplY3QoKTsKKyAgICAgICAgc2l6ZV90IGNhcGFjaXR5ID0gdGhpc09i
amVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgICAgIC8vIFdlIGhh
dmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8gc2xha2UgR0NDJ3MgdGhpcnN0IGZvciB0aGUgYmxv
b2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNlIHR5cGUtcHVubmVkIHBvaW50ZXJzLgotICAgICAg
ICB2b2lkKiB0ZW1wID0gc3RvcmFnZTsKLSAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKCZ0
ZW1wLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVv
ZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSwgc3RvcmFnZS0+c2xvdCgpLCBzdG9yYWdlU2l6
ZSk7Ci0gICAgICAgIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXAp
OworICAgICAgICB2b2lkKiB0ZW1wID0gc3RvcmFnZSAtIGNhcGFjaXR5IC0gMTsKKyAgICAgICAg
dmlzaXRvci5jb3B5QW5kQXBwZW5kKCZ0ZW1wLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSwgKHN0
b3JhZ2UgLSBzdG9yYWdlU2l6ZSAtIDEpLT5zbG90KCksIHN0b3JhZ2VTaXplKTsKKyAgICAgICAg
c3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odGVtcCkgKyBjYXBhY2l0eSAr
IDE7CiAgICAgICAgIHRoaXNPYmplY3QtPm1fb3V0T2ZMaW5lU3RvcmFnZS5zZXQoc3RvcmFnZSwg
U3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7CiAgICAgfQogCkBAIC01OTUsNyArNTk3LDcgQEAg
UHJvcGVydHlTdG9yYWdlIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lUwogCiAgICAgLy8gSXQncyBp
bXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9uIG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5j
ZQogICAgIC8vIHdlIG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgotCisg
ICAgCiAgICAgUHJvcGVydHlTdG9yYWdlIG9sZFByb3BlcnR5U3RvcmFnZSA9IG1fb3V0T2ZMaW5l
U3RvcmFnZS5nZXQoKTsKICAgICBQcm9wZXJ0eVN0b3JhZ2UgbmV3UHJvcGVydHlTdG9yYWdlID0g
MDsKIApAQCAtNjAzLDkgKzYwNSw5IEBAIFByb3BlcnR5U3RvcmFnZSBKU09iamVjdDo6Z3Jvd091
dE9mTGluZVMKICAgICB2b2lkKiB0ZW1wID0gbmV3UHJvcGVydHlTdG9yYWdlOwogICAgIGlmICgh
Z2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShzaXplb2YoV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVtcCkpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgbmV3
UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKTsKKyAg
ICBuZXdQcm9wZXJ0eVN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXAp
ICsgbmV3U2l6ZSArIDE7CiAgICAgCi0gICAgbWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSwgb2xk
UHJvcGVydHlTdG9yYWdlLCBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBvbGRT
aXplKTsKKyAgICBtZW1jcHkobmV3UHJvcGVydHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIG9sZFBy
b3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAxLCBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPikgKiBvbGRTaXplKTsKIAogICAgIEFTU0VSVChuZXdQcm9wZXJ0eVN0b3JhZ2UpOwogICAg
IHJldHVybiBuZXdQcm9wZXJ0eVN0b3JhZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDEyMzI4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MywxNCArMTczLDE0
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5
cGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQgPyBsb2Nh
dGlvbkZvck9mZnNldChvZmZzZXQpIDogMDsKKyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkgPyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpIDogMDsKICAgICAgICAgfQog
CiAgICAgICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGdldERpcmVjdExvY2F0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQmIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNG
dW5jdGlvbjsKICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgp
LT5nZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0
aW9uKTsKLSAgICAgICAgICAgIHJldHVybiBvZmZzZXQgIT0gaW52YWxpZE9mZnNldCA/IGxvY2F0
aW9uRm9yT2Zmc2V0KG9mZnNldCkgOiAwOworICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSA/IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkgOiAwOwogICAgICAgICB9CiAK
ICAgICAgICAgYm9vbCBoYXNJbmxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJl
KCktPmhhc0lubGluZVN0b3JhZ2UoKTsgfQpAQCAtMjI3LDcgKzIyNyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgaWYgKG9mZnNldEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0
PHNpemVfdD4oaW5saW5lU3RvcmFnZUNhcGFjaXR5KSkKICAgICAgICAgICAgICAgICByZXN1bHQg
PSBvZmZzZXRJbklubGluZVN0b3JhZ2U7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbG9jYXRpb24gLSBvdXRPZkxpbmVTdG9yYWdlKCkgKyBmaXJzdE91dE9mTGlu
ZU9mZnNldDsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBs
b2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKTsKICAgICAgICAgICAgIHZhbGlk
YXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlLmgJKHJldmlzaW9uIDEyMzI4MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSBzdHJ1Y3R1cmVP
clVuZGVmaW5lZCgpIGNvbnN0OwogCi0gICAgICAgIGNoYXIqIGRlc2NyaXB0aW9uKCkgY29uc3Q7
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGNoYXIqIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHN5bnRoZXNpemVQcm90b3R5cGUo
RXhlY1N0YXRlKikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5T2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkocmV2aXNpb24gMTIzMjgzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4
LDcgKzExOCw3IEBAIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKFAKIHsK
ICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChpc091dE9mTGluZU9mZnNl
dChvZmZzZXQpKTsKLSAgICByZXR1cm4gb2Zmc2V0IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQ7Cisg
ICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSAtIDI7CiB9CiAKIGlubGluZSBzaXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFn
ZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153912</attachid>
            <date>2012-07-23 17:29:07 -0700</date>
            <delta_ts>2012-07-23 17:42:21 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>halfbutterflies_patch_2.diff</filename>
            <type>text/plain</type>
            <size>40525</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIzMzk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDEyLTA3LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHJvcGVydHkgc3RvcmFnZSBzaG91bGQgZ3JvdyBpbiByZXZlcnNlIGFkZHJlc3MgZGlyZWN0aW9u
LCB0byBzdXBwb3J0IGJ1dHRlcmZsaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MTc4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5nZXMgcHJvcGVydHkgc3RvcmFnZSB0byBncm93IHRvIHRoZSBs
ZWZ0LCBhbmQgY2hhbmdlcyB0aGUgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyIHRvIHBvaW50Cisg
ICAgICAgIG9uZSA4LWJ5dGUgd29yZCAoaS5lLiBKU1ZhbHVlKSB0byB0aGUgcmlnaHQgb2YgdGhl
IGZpcnN0IHZhbHVlIGluIHRoZSBzdG9yYWdlLgorICAgICAgICAKKyAgICAgICAgQWxzbyBpbXBy
b3ZlZCBkZWJ1ZyBzdXBwb3J0IHNvbWV3aGF0LCBieSBhZGRpbmcgYSBkZXNjcmliZSgpIGZ1bmN0
aW9uIHRvIHRoZSBqc2MgY29tbWFuZC1saW5lLAorICAgICAgICBhbmQgYSBzbG93IG1vZGUgb2Yg
b2JqZWN0IGFjY2VzcyBpbiBMTEludC4KKworICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2Vt
Ymxlci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6cmVwYXRjaENvbXBhY3QpOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChNYWNy
b0Fzc2VtYmxlckFSTXY3KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6aXND
b21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTXY3Ojpsb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAg
ICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uOjppc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpyZXBhdGNoQ29tcGFjdCk6
CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZB
c3NlbWJsZXI6OnJlcGF0Y2hDb21wYWN0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpkdW1wU3RydWN0dXJlKToKKyAgICAgICAgKiBieXRlY29kZS9H
ZXRCeUlkU3RhdHVzLmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OkdldEJ5SWRTdGF0
dXMpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
T3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OmVtaXRQdXRUcmFu
c2l0aW9uU3R1Yik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6Cisg
ICAgICAgICogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHA6CisgICAgICAgIChKU0M6OkNvbnNl
cnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcik6CisgICAgICAgICogaGVhcC9Db3BpZWRT
cGFjZS5oOgorICAgICAgICAoQ29waWVkU3BhY2UpOgorICAgICAgICAqIGhlYXAvQ29waWVkU3Bh
Y2VJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpwaW5JZk5lY2Vz
c2FyeSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldCk6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVHZXREaXJlY3RPZmZzZXQpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVFRodW5rczo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKiBqc2MuY3Bw
OgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5j
dGlvbkRlc2NyaWJlKToKKyAgICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NM
T1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgICog
cnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0TG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6b2Zmc2V0Rm9yTG9jYXRpb24pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgorICAgICAgICAoSlNWYWx1ZSk6CisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oOgorICAgICAgICAoSlNDOjpvZmZzZXRJbk91dE9mTGlu
ZVN0b3JhZ2UpOgorCiAyMDEyLTA3LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgREZHIGlzIHRvbyBhZ2dyZXNzaXZlIGluIHBlcmZvcm1pbmcgdGhlIHNwZWNp
ZmljIHZhbHVlIG9wdGltaXphdGlvbiBvbiBsb2FkcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJ
KHJldmlzaW9uIDEyMzM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBAIHN0YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29u
dGVudHNPZkZpbGUKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25QcmludChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkRlc2NyaWJlKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25KU0NTdGFjayhFeGVjU3RhdGUqKTsKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKik7CiAjaWZu
ZGVmIE5ERUJVRwpAQCAtMTkxLDYgKzE5Miw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgIAogICAgICAgICBhZGRGdW5jdGlv
bihnbG9iYWxEYXRhLCAiZGVidWciLCBmdW5jdGlvbkRlYnVnLCAxKTsKKyAgICAgICAgYWRkRnVu
Y3Rpb24oZ2xvYmFsRGF0YSwgImRlc2NyaWJlIiwgZnVuY3Rpb25EZXNjcmliZSwgMSk7CiAgICAg
ICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJwcmludCIsIGZ1bmN0aW9uUHJpbnQsIDEpOwog
ICAgICAgICBhZGRGdW5jdGlvbihnbG9iYWxEYXRhLCAicXVpdCIsIGZ1bmN0aW9uUXVpdCwgMCk7
CiAgICAgICAgIGFkZEZ1bmN0aW9uKGdsb2JhbERhdGEsICJnYyIsIGZ1bmN0aW9uR0MsIDApOwpA
QCAtMjk4LDYgKzMwMCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RGViCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlc2NyaWJlKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlc1xuIiwgZXhlYy0+YXJndW1lbnQoMCku
ZGVzY3JpcHRpb24oKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKK30KKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkpTQ1N0YWNrKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBTdHJpbmcgdHJhY2UgPSAiLS0+IFN0YWNrIHRyYWNlOlxu
IjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDEyMzM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjA5NSwxMSArMjA5NSwy
NCBAQCBwdWJsaWM6CiAgICAgICAgIHNldEludDMyKHdoZXJlLCB2YWx1ZSk7CiAgICAgfQogICAg
IAotICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KHZvaWQqIHdoZXJlLCBpbnQzMl90IHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KHZvaWQqIHdoZXJlLCBpbnQzMl90
IG9mZnNldCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZSA+PSAwKTsKLSAgICAgICAgQVNT
RVJUKEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDEyKHZhbHVlKS5pc1VJbnQ3KCkpOwotICAg
ICAgICBzZXRVSW50N0ZvckxvYWQod2hlcmUsIEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDEy
KHZhbHVlKSk7CisgICAgICAgIEFTU0VSVChvZmZzZXQgPj0gLTI1NSAmJiBvZmZzZXQgPD0gMjU1
KTsKKworICAgICAgICBib29sIGFkZCA9IHRydWU7CisgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7
CisgICAgICAgICAgICBhZGQgPSBmYWxzZTsKKyAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG9mZnNldCB8PSAoYWRkIDw8IDkpOworICAg
ICAgICBvZmZzZXQgfD0gKDEgPDwgMTApOworICAgICAgICBvZmZzZXQgfD0gKDEgPDwgMTEpOwor
CisgICAgICAgIHVpbnQxNl90KiBsb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3Qq
Pih3aGVyZSk7CisgICAgICAgIGxvY2F0aW9uWzFdICY9IH4oKDEgPDwgMTIpIC0gMSk7CisgICAg
ICAgIGxvY2F0aW9uWzFdIHw9IG9mZnNldDsKKyAgICAgICAgY2FjaGVGbHVzaChsb2NhdGlvbiwg
c2l6ZW9mKHVpbnQxNl90KSAqIDIpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hQ
b2ludGVyKHZvaWQqIHdoZXJlLCB2b2lkKiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lv
biAxMjMzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNdjcuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTAgKzUzLDEyIEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEFSTXY3QXNzZW1ibGVyOjpMaW5rUmVjb3JkIExpbmtSZWNvcmQ7CiAgICAgdHlw
ZWRlZiBBUk12N0Fzc2VtYmxlcjo6SnVtcFR5cGUgSnVtcFR5cGU7CiAgICAgdHlwZWRlZiBBUk12
N0Fzc2VtYmxlcjo6SnVtcExpbmtUeXBlIEp1bXBMaW5rVHlwZTsKLSAgICAvLyBNYWdpYyBudW1i
ZXIgaXMgdGhlIGJpZ2dlc3QgdXNlZnVsIG9mZnNldCB3ZSBjYW4gZ2V0IG9uIEFSTXY3IHdpdGgK
LSAgICAvLyBhIExEUl9pbW1fVDIgZW5jb2RpbmcKLSAgICBzdGF0aWMgY29uc3QgaW50IE1heGlt
dW1Db21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQgPSAxMjQ7Ci0gICAgCisKKyAgICBzdGF0
aWMgYm9vbCBpc0NvbXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldChwdHJkaWZmX3QgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj0gLTI1NSAmJiB2YWx1ZSA8PSAyNTU7Cisg
ICAgfQorCiAgICAgVmVjdG9yPExpbmtSZWNvcmQ+JiBqdW1wc1RvTGluaygpIHsgcmV0dXJuIG1f
YXNzZW1ibGVyLmp1bXBzVG9MaW5rKCk7IH0KICAgICB2b2lkKiB1bmxpbmtlZENvZGUoKSB7IHJl
dHVybiBtX2Fzc2VtYmxlci51bmxpbmtlZENvZGUoKTsgfQogICAgIGJvb2wgY2FuQ29tcGFjdChK
dW1wVHlwZSBqdW1wVHlwZSkgeyByZXR1cm4gbV9hc3NlbWJsZXIuY2FuQ29tcGFjdChqdW1wVHlw
ZSk7IH0KQEAgLTY0MiwyNiArNjQ0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGxhYmVs
OwogICAgIH0KICAgICAKLSAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGJlIGFibGUgdG8gcGxhbnQg
YSBjb21wYWN0IGxvYWQgcmVsYXRpdmUgdG8vZnJvbSBhbnkgYmFzZS9kZXN0IHJlZ2lzdGVyLgog
ICAgIERhdGFMYWJlbENvbXBhY3QgbG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2go
QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBSZWdpc3Rl
cklEIGJhc2UgPSBhZGRyZXNzLmJhc2U7CiAgICAgICAgIAotICAgICAgICBpZiAoYmFzZSA+PSBB
Uk1SZWdpc3RlcnM6OnI4KSB7Ci0gICAgICAgICAgICBtb3ZlKGJhc2UsIGFkZHJlc3NUZW1wUmVn
aXN0ZXIpOwotICAgICAgICAgICAgYmFzZSA9IGFkZHJlc3NUZW1wUmVnaXN0ZXI7Ci0gICAgICAg
IH0KLQogICAgICAgICBEYXRhTGFiZWxDb21wYWN0IGxhYmVsKHRoaXMpOwotICAgICAgICBBU1NF
UlQoYWRkcmVzcy5vZmZzZXQgPj0gMCk7Ci0gICAgICAgIEFTU0VSVChhZGRyZXNzLm9mZnNldCA8
PSBNYXhpbXVtQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KTsKLSAgICAgICAgQVNTRVJU
KEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDEyKGFkZHJlc3Mub2Zmc2V0KS5pc1VJbnQ3KCkp
OwotCi0gICAgICAgIGlmIChkZXN0ID49IEFSTVJlZ2lzdGVyczo6cjgpIHsKLSAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmxkckNvbXBhY3QoYWRkcmVzc1RlbXBSZWdpc3RlciwgYmFzZSwgQVJNVGh1
bWJJbW1lZGlhdGU6Om1ha2VVSW50MTIoYWRkcmVzcy5vZmZzZXQpKTsKLSAgICAgICAgICAgIG1v
dmUoYWRkcmVzc1RlbXBSZWdpc3RlciwgZGVzdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgbV9hc3NlbWJsZXIubGRyQ29tcGFjdChkZXN0LCBiYXNlLCBBUk1UaHVtYkltbWVkaWF0ZTo6
bWFrZVVJbnQxMihhZGRyZXNzLm9mZnNldCkpOworICAgICAgICBBU1NFUlQoaXNDb21wYWN0UHRy
QWxpZ25lZEFkZHJlc3NPZmZzZXQoYWRkcmVzcy5vZmZzZXQpKTsKKworICAgICAgICBtX2Fzc2Vt
Ymxlci5sZHIoZGVzdCwgYmFzZSwgYWRkcmVzcy5vZmZzZXQsIHRydWUsIGZhbHNlKTsKICAgICAg
ICAgcmV0dXJuIGxhYmVsOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNp
b24gMTIzMzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0NywxMCBAQCBwdWJsaWM6
CiAgICAgdHlwZWRlZiBYODZBc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CiAg
ICAgdHlwZWRlZiBYODZBc3NlbWJsZXI6OlhNTVJlZ2lzdGVySUQgWE1NUmVnaXN0ZXJJRDsKICAg
ICAKLSAgICBzdGF0aWMgY29uc3QgaW50IE1heGltdW1Db21wYWN0UHRyQWxpZ25lZEFkZHJlc3NP
ZmZzZXQgPSAxMjc7CisgICAgc3RhdGljIGJvb2wgaXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NP
ZmZzZXQocHRyZGlmZl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID49IC0x
MjggJiYgdmFsdWUgPD0gMTI3OworICAgIH0KIAogICAgIGVudW0gUmVsYXRpb25hbENvbmRpdGlv
biB7CiAgICAgICAgIEVxdWFsID0gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25FLApAQCAtNDk0LDgg
KzQ5Nyw3IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdChD
b2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0IGRhdGFMYWJlbENvbXBhY3QsIGludDMyX3QgdmFs
dWUpCiAgICAgewotICAgICAgICBBU1NFUlQodmFsdWUgPj0gMCk7Ci0gICAgICAgIEFTU0VSVCh2
YWx1ZSA8IE1heGltdW1Db21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQpOworICAgICAgICBB
U1NFUlQoaXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQodmFsdWUpKTsKICAgICAgICAg
QXNzZW1ibGVyVHlwZV9UOjpyZXBhdGNoQ29tcGFjdChkYXRhTGFiZWxDb21wYWN0LmRhdGFMb2Nh
dGlvbigpLCB2YWx1ZSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiAxMjMzOTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODI5LDcgKzE4MjksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIHZvaWQgcmVw
YXRjaENvbXBhY3Qodm9pZCogd2hlcmUsIGludDMyX3QgdmFsdWUpCiAgICAgewotICAgICAgICBB
U1NFUlQodmFsdWUgPj0gMCk7CisgICAgICAgIEFTU0VSVCh2YWx1ZSA+PSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDhfdD46Om1pbigpKTsKICAgICAgICAgQVNTRVJUKHZhbHVlIDw9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50OF90Pjo6bWF4KCkpOwogICAgICAgICBzZXRJbnQ4KHdoZXJlLCB2YWx1
ZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDEyMzM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsOSArMjU1LDkgQEAgc3Rh
dGljIHZvaWQgZHVtcFN0cnVjdHVyZShjb25zdCBjaGFyKiBuYQogICAgIAogICAgIGRhdGFMb2co
IiVzID0gJXAiLCBuYW1lLCBzdHJ1Y3R1cmUpOwogICAgIAotICAgIHNpemVfdCBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldChleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50KTsKLSAgICBpZiAob2Zmc2V0
ICE9IG5vdEZvdW5kKQotICAgICAgICBkYXRhTG9nKCIgKG9mZnNldCA9ICVsdSkiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPihvZmZzZXQpKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldChleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50KTsKKyAgICBpZiAob2Zm
c2V0ICE9IGludmFsaWRPZmZzZXQpCisgICAgICAgIGRhdGFMb2coIiAob2Zmc2V0ID0gJWQpIiwg
b2Zmc2V0KTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHJldmlzaW9uIDEyMzM5OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDcgKzUzLDcgQEAgcHVibGljOgogICAgIAogICAgIEdldEJ5SWRTdGF0dXMoCiAgICAgICAgIFN0
YXRlIHN0YXRlLCBib29sIHdhc1NlZW5JbkpJVCwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgc2l6ZV90IG9mZnNldCA9IGludmFsaWRP
ZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKSwgVmVjdG9yPFN0cnVjdHVy
ZSo+IGNoYWluID0gVmVjdG9yPFN0cnVjdHVyZSo+KCkpCisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IGludmFsaWRPZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUo
KSwgVmVjdG9yPFN0cnVjdHVyZSo+IGNoYWluID0gVmVjdG9yPFN0cnVjdHVyZSo+KCkpCiAgICAg
ICAgIDogbV9zdGF0ZShzdGF0ZSkKICAgICAgICAgLCBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVT
ZXQpCiAgICAgICAgICwgbV9jaGFpbihjaGFpbikKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgog
ICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBtX3dhc1NlZW5JbkpJVCh3YXNT
ZWVuSW5KSVQpCiAgICAgewotICAgICAgICBBU1NFUlQoKHN0YXRlID09IFNpbXBsZSkgPT0gKG9m
ZnNldCAhPSBub3RGb3VuZCkpOworICAgICAgICBBU1NFUlQoKHN0YXRlID09IFNpbXBsZSkgPT0g
KG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBHZXRC
eUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
SWRlbnRpZmllciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAxMjMzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ4LDcgKzEyNDgsNyBAQCBj
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUHJvCiAgICAgdm9pZCogcmVzdWx0
OwogICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShpbml0aWFsT3V0
T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSksICZyZXN1bHQpKQogICAgICAgICBDUkFT
SCgpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOworICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PEpTVmFsdWUqPihy
ZXN1bHQpICsgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICsgMSk7CiB9CiAKIGNoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVj
LCBzaXplX3QgbmV3U2l6ZSkKQEAgLTEyNTcsNyArMTI1Nyw3IEBAIGNoYXIqIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uQWxsb2NhdGVQcm8KICAgICB2b2lkKiByZXN1bHQ7CiAgICAgaWYgKCFnbG9i
YWxEYXRhLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKG5ld1NpemUsICZyZXN1bHQpKQogICAgICAg
ICBDUkFTSCgpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwor
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZWludGVycHJldF9jYXN0PEpTVmFs
dWUqPihyZXN1bHQpICsgMSkgKyBuZXdTaXplOwogfQogCiBkb3VibGUgREZHX09QRVJBVElPTiBv
cGVyYXRpb25GTW9kT25JbnRzKGludDMyX3QgYSwgaW50MzJfdCBiKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDEyMzM5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDYsNiArMTA2LDcgQEAgdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJh
dAogdHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9XKShXYXRjaHBv
aW50U2V0Kik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9F
KShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0
aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwordHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9O
ICgqUF9ERkdPcGVyYXRpb25fRVBTKShFeGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIAogLy8g
VGhlc2Ugcm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0byBDKysgaW1wbGVtZW50
YXRpb25zIG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgogSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEyMzM5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwMSw3ICszMDEsOCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhl
Y1N0YXRlKiBlCiAKICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KICAgICBpZiAoc2xvdC5z
bG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewotICAgICAgICBpZiAoKHNsb3QuY2FjaGVkUHJvcGVy
dHlUeXBlKCkgIT0gUHJvcGVydHlTbG90OjpWYWx1ZSkgfHwgKChzbG90LmNhY2hlZE9mZnNldCgp
ICogc2l6ZW9mKEpTVmFsdWUpKSA+ICh1bnNpZ25lZClNYWNyb0Fzc2VtYmxlcjo6TWF4aW11bUNv
bXBhY3RQdHJBbGlnbmVkQWRkcmVzc09mZnNldCkpIHsKKyAgICAgICAgaWYgKChzbG90LmNhY2hl
ZFByb3BlcnR5VHlwZSgpICE9IFByb3BlcnR5U2xvdDo6VmFsdWUpCisgICAgICAgICAgICB8fCAh
TWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFJl
bGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKICAgICAgICAg
ICAgIGRmZ1JlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CkBAIC04MjQsNyArODI1LDcgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRp
b25TdHViKAogICAgICAgICAgICAgc3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGll
ZEFsbG9jYXRvci0+bV9jdXJyZW50UmVtYWluaW5nKTsKICAgICAgICAgICAgIHN0dWJKaXQubmVn
UHRyKHNjcmF0Y2hHUFIxKTsKICAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVu
ZCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgICAgIHN0dWJKaXQuc3ViUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0
dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUp
KSwgc2NyYXRjaEdQUjEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2l6ZV90IG9s
ZFNpemUgPSBvbGRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1
ZSk7CiAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwpAQCAtODM1LDExICs4
MzYsMTEgQEAgc3RhdGljIHZvaWQgZW1pdFB1dFRyYW5zaXRpb25TdHViKAogICAgICAgICAgICAg
c3R1YkppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgJmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50
UmVtYWluaW5nKTsKICAgICAgICAgICAgIHN0dWJKaXQubmVnUHRyKHNjcmF0Y2hHUFIxKTsKICAg
ICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3Mo
JmNvcGllZEFsbG9jYXRvci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgICAgIHN0dWJKaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobmV3
U2l6ZSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwogICAg
ICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BS
MyA9IG9sZCBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IGF2YWlsYWJsZQotICAgICAgICAgICAgZm9y
IChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsgb2Zmc2V0ICs9IHNpemVvZih2
b2lkKikpIHsKLSAgICAgICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUjMsIG9mZnNldCksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAg
ICAgICBzdHViSml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSMSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZz
ZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQg
Kz0gc2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMywgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1
ZSkgKiAyKSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICBzdHViSml0LnN0b3JlUHRy
KHNjcmF0Y2hHUFIyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZz
ZXQgKyBzaXplb2YoSlNWYWx1ZSkgKiAyKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMjMzOTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTEzLDggKzM5MTMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAgICAgICAgIGlzT3V0T2ZMaW5lLmxp
bmsoJm1faml0KTsKICNlbmRpZgotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkJh
c2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSAtIGlubGluZVN0b3JhZ2VDYXBhY2l0eSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6
ZW9mKEpTVmFsdWUpKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHJlc29sdmVJbmZvR1BSLCBKSVRD
b21waWxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSAtIGlubGluZVN0b3JhZ2VDYXBhY2l0eSAqIHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4oc2l6ZW9mKEpTVmFsdWUpKSksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAg
ICBtX2ppdC5uZWczMihyZXNvbHZlSW5mb0dQUik7CisgICAgICAgIG1faml0LnNpZ25FeHRlbmQz
MlRvUHRyKHJlc29sdmVJbmZvR1BSLCByZXNvbHZlSW5mb0dQUik7CisgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHJlc29sdmVJbmZv
R1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpICsgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICog
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwgcmVzdWx0VGFnR1BSKTsK
KyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0UGF5bG9h
ZEdQUiwgcmVzb2x2ZUluZm9HUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpICsgKGlubGluZVN0
b3JhZ2VDYXBhY2l0eSAtIDIpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSlNWYWx1
ZSkpKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEyMzM5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5MDIsOCArMzkwMiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICAgICAgICAgaXNP
dXRPZkxpbmUubGluaygmbV9qaXQpOwogI2VuZGlmCisgICAgICAgIG1faml0Lm5lZzMyKHJlc29s
dmVJbmZvR1BSKTsKKyAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzb2x2ZUluZm9H
UFIsIHJlc29sdmVJbmZvR1BSKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3Jh
Z2UoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJh
c2VJbmRleChyZXN1bHRHUFIsIHJlc29sdmVJbmZvR1BSLCBKSVRDb21waWxlcjo6U2NhbGVQdHIs
IC1pbmxpbmVTdG9yYWdlQ2FwYWNpdHkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihK
U1ZhbHVlKSkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjpCYXNlSW5kZXgocmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlNjYWxl
UHRyLCAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihKU1ZhbHVlKSkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICBzbG93UGF0aENhbGwoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MTIzMzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNTcsNyArMzE1Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAm
Y29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRSZW1haW5pbmcpOwogICAgIG1faml0Lm5lZ1B0cihz
Y3JhdGNoR1BSKTsKICAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVz
cygmY29waWVkQWxsb2NhdG9yLT5tX2N1cnJlbnRQYXlsb2FkRW5kKSwgc2NyYXRjaEdQUik7Ci0g
ICAgbV9qaXQuc3ViUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0
Y2hHUFIpOworICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVv
ZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIpKTsKQEAg
LTMxOTEsMTQgKzMxOTEsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2Nh
dGVQcgogICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCAmY29waWVkQWxsb2NhdG9yLT5t
X2N1cnJlbnRSZW1haW5pbmcpOwogICAgIG1faml0Lm5lZ1B0cihzY3JhdGNoR1BSMik7CiAgICAg
bV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJmNvcGllZEFsbG9jYXRv
ci0+bV9jdXJyZW50UGF5bG9hZEVuZCksIHNjcmF0Y2hHUFIyKTsKLSAgICBtX2ppdC5zdWJQdHIo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjIpOworICAgIG1f
aml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihKU1ZhbHVlKSksIHNj
cmF0Y2hHUFIyKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAg
IHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UsIHNjcmF0Y2hHUFIyLCBuZXdTaXplKSk7CiAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BS
MiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gKLSAgICBmb3IgKHNpemVfdCBv
ZmZzZXQgPSAwOyBvZmZzZXQgPCBvbGRTaXplOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewot
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9sZFN0b3JhZ2VHUFIs
IG9mZnNldCksIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQ
UjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIyLCBvZmZzZXQpKTsKKyAgICBmb3Ig
KHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9s
ZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgeworICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKG9sZFN0b3JhZ2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpT
VmFsdWUpICogMikpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0
Y2hHUFIxLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMiwgLShvZmZzZXQgKyBzaXpl
b2YoSlNWYWx1ZSkgKiAyKSkpOwogICAgIH0KICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BS
MiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mT3V0T2ZM
aW5lU3RvcmFnZSgpKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMjMzOTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTExNjEs
NiArMTE2MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHNpemUpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFBfREZHT3BlcmF0aW9uX0VQUyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBvbGQsIHNpemVfdCBzaXplKQorICAgIHsKKyAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKG9sZCwgVHJ1c3RlZEltbVB0
cihzaXplKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkK
ICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShy
ZXZpc2lvbiAxMjMzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEwICs2Niw4IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIE1hcmtIb29rPgogaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNB
ZGRQb2ludGVyKHZvaWQqIHAsIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJr
SG9vaykKIHsKICAgICBtYXJrSG9vay5tYXJrKHApOwotICAgIAotICAgIENvcGllZEJsb2NrKiBi
bG9jazsKLSAgICBpZiAobV9jb3BpZWRTcGFjZS0+Y29udGFpbnMocCwgYmxvY2spKQotICAgICAg
ICBtX2NvcGllZFNwYWNlLT5waW4oYmxvY2spOworCisgICAgbV9jb3BpZWRTcGFjZS0+cGluSWZO
ZWNlc3NhcnkocCk7CiAgICAgCiAgICAgTWFya2VkQmxvY2sqIGNhbmRpZGF0ZSA9IE1hcmtlZEJs
b2NrOjpibG9ja0ZvcihwKTsKICAgICBpZiAoZmlsdGVyLnJ1bGVPdXQocmVpbnRlcnByZXRfY2Fz
dDxCaXRzPihjYW5kaWRhdGUpKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29waWVkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3BpZWRTcGFjZS5oCShyZXZpc2lvbiAxMjMzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Db3BpZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgY29udGFpbnMoQ29waWVkQmxvY2sqKTsKICAgICBib29sIGNvbnRhaW5z
KHZvaWQqLCBDb3BpZWRCbG9jayomKTsKKyAgICAKKyAgICB2b2lkIHBpbklmTmVjZXNzYXJ5KHZv
aWQqIHBvaW50ZXIpOwogCiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBzaXplX3QgY2FwYWNpdHko
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlSW5saW5lTWV0
aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNw
YWNlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjMzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3BpZWRTcGFjZUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNiArNTcsNDIgQEAgaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnBpbihDb3BpZWRCbG9jawog
ICAgIGJsb2NrLT5tX2lzUGlubmVkID0gdHJ1ZTsKIH0KIAoraW5saW5lIHZvaWQgQ29waWVkU3Bh
Y2U6OnBpbklmTmVjZXNzYXJ5KHZvaWQqIG9wYXF1ZVBvaW50ZXIpCit7CisgICAgLy8gUG9pbnRl
cnMgaW50byB0aGUgY29waWVkIHNwYWNlIGNvbWUgaW4gdGhlIGZvbGxvd2luZyB2YXJpZXRpZXM6
CisgICAgLy8gMSkgIFBvaW50ZXJzIHRvIHRoZSBzdGFydCBvZiBhIHNwYW4gb2YgbWVtb3J5LiBU
aGlzIGlzIHRoZSBtb3N0CisgICAgLy8gICAgIG5hdHVyYWwgdGhvdWdoIG5vdCBuZWNlc3Nhcmls
eSB0aGUgbW9zdCBjb21tb24uCisgICAgLy8gMikgIFBvaW50ZXJzIHRvIG9uZSB2YWx1ZS1zaXpl
ZCAoOCBieXRlKSB3b3JkIHBhc3QgdGhlIGVuZCBvZgorICAgIC8vICAgICBhIHNwYW4gb2YgbWVt
b3J5LiBUaGlzIGN1cnJlbnRseSBvY2N1cnMgd2l0aCBzZW1pLWJ1dHRlcmZsaWVzCisgICAgLy8g
ICAgIGFuZCBzaG91bGQgYmUgZml4ZWQgc29vbiwgb25jZSB0aGUgb3RoZXIgaGFsZiBvZiB0aGUK
KyAgICAvLyAgICAgYnV0dGVyZmx5IGxhbmRzLgorICAgIC8vIDMpICBQb2ludGVycyB0byB0aGUg
aW5uYXJkcyBhcmlzaW5nIGZyb20gbG9vcCBpbmR1Y3Rpb24gdmFyaWFibGUKKyAgICAvLyAgICAg
b3B0aW1pemF0aW9ucyAoZWl0aGVyIG1hbnVhbCBvbmVzIG9yIGF1dG9tYXRpYywgYnkgdGhlCisg
ICAgLy8gICAgIGNvbXBpbGVyKS4KKyAgICAvLyA0KSAgUG9pbnRlcnMgdG8gdGhlIGVuZCBvZiBh
IHNwYW4gb2YgbWVtb3J5IGluIGFyaXNpbmcgZnJvbQorICAgIC8vICAgICBpbmR1Y3Rpb24gdmFy
aWFibGUgb3B0aW1pemF0aW9ucyBjb21iaW5lZCB3aXRoIHRoZQorICAgIC8vICAgICBHQy10by1j
b21waWxlciBjb250cmFjdCBsYWlkIG91dCBpbiB0aGUgQyBzcGVjOiBhIHBvaW50ZXIgdG8KKyAg
ICAvLyAgICAgdGhlIGVuZCBvZiBhIHNwYW4gb2YgbWVtb3J5IG11c3QgYmUgY29uc2lkZXJlZCB0
byBiZSBhCisgICAgLy8gICAgIHBvaW50ZXIgdG8gdGhhdCBtZW1vcnkuCisgICAgCisgICAgRW5j
b2RlZEpTVmFsdWUqIHBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PEVuY29kZWRKU1ZhbHVlKj4o
b3BhcXVlUG9pbnRlcik7CisgICAgQ29waWVkQmxvY2sqIGJsb2NrOworCisgICAgLy8gSGFuZGxl
ICgxKSBhbmQgKDMpLgorICAgIGlmIChjb250YWlucyhwb2ludGVyLCBibG9jaykpCisgICAgICAg
IHBpbihibG9jayk7CisgICAgCisgICAgLy8gSGFuZGxlICg0KS4gV2UgZG9uJ3QgaGF2ZSB0byBl
eHBsaWNpdGx5IGNoZWNrIGFuZCBwaW4gdGhlIGJsb2NrIHVuZGVyIHRoaXMKKyAgICAvLyBwb2lu
dGVyIGJlY2F1c2UgaXQgY2Fubm90IHBvc3NpYmx5IHBvaW50IHRvIHNvbWV0aGluZyB0aGF0IGNh
c2VzICgxKSBhbmQKKyAgICAvLyAoMykgYWJvdmUgb3IgY2FzZSAoMikgYmVsb3cgd291bGRuJ3Qg
YWxyZWFkeSBjYXRjaC4KKyAgICBwb2ludGVyLS07CisgICAgCisgICAgLy8gSGFuZGxlICgyKQor
ICAgIHBvaW50ZXItLTsKKyAgICBpZiAoY29udGFpbnMocG9pbnRlciwgYmxvY2spKQorICAgICAg
ICBwaW4oYmxvY2spOworfQorCiBpbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlp
bmcoKQogewogICAgIERvdWJseUxpbmtlZExpc3Q8SGVhcEJsb2NrPiogdGVtcCA9IG1fZnJvbVNw
YWNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMjMzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDE4LDkgKzEwMTgsMTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXREaXJlY3RPZmZzZXQoUmVnaXN0
ZQogICAgIGlmIChmaW5hbE9iamVjdE1vZGUgPT0gTWF5QmVGaW5hbCkgewogICAgICAgICBKdW1w
IGlzSW5saW5lID0gYnJhbmNoMzIoTGVzc1RoYW4sIG9mZnNldCwgVHJ1c3RlZEltbTMyKGlubGlu
ZVN0b3JhZ2VDYXBhY2l0eSkpOwogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmpl
Y3Q6Om9mZnNldE9mT3V0T2ZMaW5lU3RvcmFnZSgpKSwgYmFzZSk7CisgICAgICAgIG5lZzMyKG9m
ZnNldCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgaXNJbmxpbmUubGlu
ayh0aGlzKTsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW1QdHIoSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpICsgaW5saW5lU3RvcmFnZUNhcGFjaXR5ICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIGJhc2UpOworICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbVB0cihKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLSAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgYmFzZSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
ICAgICB9IGVsc2UgewogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTEwMjksOSArMTAzMCwxMCBA
QCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVjdE9mZnNldChSZWdpc3RlCiAgICAgICAgIGlzT3V0
T2ZMaW5lLmxpbmsodGhpcyk7CiAjZW5kaWYKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIGJhc2UpOworICAgICAgICBu
ZWczMihvZmZzZXQpOwogICAgIH0KLSAgICBsb2FkMzIoQmFzZUluZGV4KGJhc2UsIG9mZnNldCwg
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpIC0g
aW5saW5lU3RvcmFnZUNhcGFjaXR5ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdFBh
eWxvYWQpOwotICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSAtIGlubGluZVN0b3JhZ2VDYXBh
Y2l0eSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRUYWcpOworICAgIGxvYWQzMihC
YXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCkgKyAoaW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgbG9hZDMyKEJhc2VJbmRl
eChiYXNlLCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpICsgKGlubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlc3VsdFRhZyk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9wbmFt
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDEyMzM5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTksOSArMTU5LDEwIEBAIHZvaWQgSklUOjpjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KFJlZ2lzdGUKICAgICBpZiAoZmluYWxPYmplY3RNb2RlID09IE1heUJlRmluYWwpIHsK
ICAgICAgICAgSnVtcCBpc0lubGluZSA9IGJyYW5jaDMyKExlc3NUaGFuLCBvZmZzZXQsIFRydXN0
ZWRJbW0zMihpbmxpbmVTdG9yYWdlQ2FwYWNpdHkpKTsKICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGluZVN0b3JhZ2UoKSksIHNjcmF0Y2gpOwor
ICAgICAgICBuZWczMihvZmZzZXQpOwogICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAg
ICAgIGlzSW5saW5lLmxpbmsodGhpcyk7Ci0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgaW5saW5lU3RvcmFnZUNhcGFjaXR5ICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIGJhc2UsIHNjcmF0Y2gpOworICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAtIChpbmxpbmVT
dG9yYWdlQ2FwYWNpdHkgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBiYXNlLCBzY3Jh
dGNoKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0gZWxzZSB7CiAjaWYgIUFTU0VS
VF9ESVNBQkxFRApAQCAtMTcwLDggKzE3MSwxMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldERpcmVj
dE9mZnNldChSZWdpc3RlCiAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CiAjZW5kaWYK
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpvZmZzZXRPZk91dE9mTGlu
ZVN0b3JhZ2UoKSksIHNjcmF0Y2gpOworICAgICAgICBuZWczMihvZmZzZXQpOwogICAgIH0KLSAg
ICBsb2FkUHRyKEJhc2VJbmRleChzY3JhdGNoLCBvZmZzZXQsIFNjYWxlUHRyLCAtaW5saW5lU3Rv
cmFnZUNhcGFjaXR5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwg
cmVzdWx0KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7CisgICAgbG9h
ZFB0cihCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBTY2FsZVB0ciwgKGlubGluZVN0b3JhZ2VD
YXBhY2l0eSAtIDIpICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwg
cmVzdWx0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3BuYW1lKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkocmV2aXNpb24gMTIzMzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMiw3ICs5MzIsOCBAQCBORVZFUl9JTkxJ
TkUgdm9pZCBKSVRUaHVua3M6OnRyeUNhY2hlR2V0CiAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlVmFsdWUpIHsKICAgICAgICAgLy8gc2V0IHRoaXMgdXAsIHNvIGRlcmVmU3RydWN0dXJl
cyBjYW4gZG8gaXQncyBqb2IuCiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFNlbGYoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVj
dHVyZSk7Ci0gICAgICAgIGlmICgoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSAhPSBQcm9wZXJ0
eVNsb3Q6OlZhbHVlKSB8fCAoKHNsb3QuY2FjaGVkT2Zmc2V0KCkgKiBzaXplb2YoSlNWYWx1ZSkp
ID4gKHVuc2lnbmVkKU1hY3JvQXNzZW1ibGVyOjpNYXhpbXVtQ29tcGFjdFB0ckFsaWduZWRBZGRy
ZXNzT2Zmc2V0KSkKKyAgICAgICAgaWYgKChzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpICE9IFBy
b3BlcnR5U2xvdDo6VmFsdWUpCisgICAgICAgICAgICB8fCAhTWFjcm9Bc3NlbWJsZXI6OmlzQ29t
cGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFn
ZShzbG90LmNhY2hlZE9mZnNldCgpKSkpCiAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MoY29kZUJsb2NrLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0
X2J5X2lkX3NlbGZfZmFpbCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBKSVQ6OnBhdGNo
R2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpLCByZXR1cm5BZGRyZXNzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludENvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludENvbW1vbi5oCShyZXZpc2lvbiAxMjMzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQAog
Ly8gaG93IHRoZSBHQyBhbGxvY2F0ZXMuCiAjZGVmaW5lIExMSU5UX0FMV0FZU19BTExPQ0FURV9T
TE9XIDAKIAorLy8gRGlzYWJsZSBpbmxpbmUgY2FjaGluZyBvZiBnZXRfYnlfaWQgYW5kIHB1dF9i
eV9pZC4KKyNkZWZpbmUgTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XIDAKKwogLy8gRW5hYmxlIE9T
UiBpbnRvIHRoZSBKSVQuIERpc2FibGluZyB0aGlzIHdoaWxlIHRoZSBMTEludCBpcyBlbmFibGVk
IGVmZmVjdGl2ZWx5CiAvLyB0dXJucyBvZmYgYWxsIEpJVCdpbmcsIHNpbmNlIGluIExMSW50J3Mg
cGFybGFuY2UsIE9TUiBzdWJzdW1lcyBhbnkgZm9ybSBvZiBKSVQKIC8vIGludm9jYXRpb24uCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDEyMzM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4Myw3ICs4ODMsOCBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9O
KCk7CiAgICAgTExJTlRfT1AoMSkgPSByZXN1bHQ7CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzQ2Vs
bCgpCisgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cKKyAgICAgICAgJiYgYmFzZVZh
bHVlLmlzQ2VsbCgpCiAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGUoKQogICAgICAgICAmJiBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCiAgICAgICAgICYmIHNsb3QuY2FjaGVkUHJvcGVy
dHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpWYWx1ZSkgewpAQCAtOTM1LDcgKzkzNiw4IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgYmFzZVZhbHVl
LnB1dChleGVjLCBpZGVudCwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCksIHNsb3QpOwogICAgIExM
SU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIAotICAgIGlmIChiYXNlVmFsdWUuaXNDZWxsKCkK
KyAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVworICAgICAgICAmJiBiYXNlVmFsdWUu
aXNDZWxsKCkKICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZSgpKSB7CiAgICAgICAgIAogICAg
ICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20JKHJldmlzaW9uIDEyMzM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC05MjEsMjAg
KzkyMSwyMiBAQCBfbGxpbnRfb3BfaXNfc3RyaW5nOgogCiBtYWNybyBsb2FkUHJvcGVydHlBdFZh
cmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0eU9mZnNldCwgb2JqZWN0QW5kU3RvcmFn
ZSwgdGFnLCBwYXlsb2FkKQogICAgIGFzc2VydChtYWNybyAob2spIGJpZ3RlcSBwcm9wZXJ0eU9m
ZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCBvayBlbmQpCisgICAgbmVnaSBwcm9wZXJ0eU9m
ZnNldAogICAgIGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3Rv
cmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKLSAgICBsb2FkaSBUYWdPZmZzZXQgLSA4ICogSW5saW5l
U3RvcmFnZUNhcGFjaXR5W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFn
Ci0gICAgbG9hZGkgUGF5bG9hZE9mZnNldCAtIDggKiBJbmxpbmVTdG9yYWdlQ2FwYWNpdHlbb2Jq
ZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhdLCBwYXlsb2FkCisgICAgbG9hZGkgVGFn
T2Zmc2V0ICsgKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdl
LCBwcm9wZXJ0eU9mZnNldCwgOF0sIHRhZworICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyAoSW5s
aW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zm
c2V0LCA4XSwgcGF5bG9hZAogZW5kCiAKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZz
ZXQocHJvcGVydHlPZmZzZXQsIG9iamVjdEFuZFN0b3JhZ2UsIHRhZywgcGF5bG9hZCkKICAgICBi
aWx0IHByb3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGluZQogICAg
IGxvYWRwIEpTT2JqZWN0OjptX291dE9mTGluZVN0b3JhZ2Vbb2JqZWN0QW5kU3RvcmFnZV0sIG9i
amVjdEFuZFN0b3JhZ2UKKyAgICBuZWdpIHByb3BlcnR5T2Zmc2V0CiAgICAgam1wIC5yZWFkeQog
LmlzSW5saW5lOgotICAgIGFkZHAgSlNGaW5hbE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlICsgSW5s
aW5lU3RvcmFnZUNhcGFjaXR5ICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGFkZHAgSlNGaW5h
bE9iamVjdDo6bV9pbmxpbmVTdG9yYWdlIC0gKElubGluZVN0b3JhZ2VDYXBhY2l0eSAtIDIpICog
OCwgb2JqZWN0QW5kU3RvcmFnZQogLnJlYWR5OgotICAgIGxvYWRpIFRhZ09mZnNldCAtIDggKiBJ
bmxpbmVTdG9yYWdlQ2FwYWNpdHlbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXQsIDhd
LCB0YWcKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0IC0gOCAqIElubGluZVN0b3JhZ2VDYXBhY2l0
eVtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBheWxvYWQKKyAgICBsb2Fk
aSBUYWdPZmZzZXQgKyAoSW5saW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0
b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdGFnCisgICAgbG9hZGkgUGF5bG9hZE9mZnNldCAr
IChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVy
dHlPZmZzZXQsIDhdLCBwYXlsb2FkCiBlbmQKIAogbWFjcm8gcmVzb2x2ZUdsb2JhbChzaXplLCBz
bG93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDEyMzM5OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC03NzgsMjAgKzc3OCwyMyBAQCBfbGxpbnRfb3BfaXNfc3RyaW5nOgogICAgIGRpc3BhdGNoKDMp
CiAKIAotbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldEtub3duTm90RmluYWwocHJv
cGVydHlPZmZzZXQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQotICAgIGFzc2VydChtYWNybyAo
b2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldCwgSW5saW5lU3RvcmFnZUNhcGFjaXR5LCBvayBlbmQp
CittYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RGaW5hbChwcm9wZXJ0
eU9mZnNldEFzUG9pbnRlciwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCisgICAgYXNzZXJ0KG1h
Y3JvIChvaykgYmlndGVxIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyLCBJbmxpbmVTdG9yYWdlQ2Fw
YWNpdHksIG9rIGVuZCkKKyAgICBuZWdwIHByb3BlcnR5T2Zmc2V0QXNQb2ludGVyCiAgICAgbG9h
ZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3RvcmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0
QW5kU3RvcmFnZQotICAgIGxvYWRwIC04ICogSW5saW5lU3RvcmFnZUNhcGFjaXR5W29iamVjdEFu
ZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0LCA4XSwgdmFsdWUKKyAgICBsb2FkcCAoSW5saW5lU3Rv
cmFnZUNhcGFjaXR5IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNQ
b2ludGVyLCA4XSwgdmFsdWUKIGVuZAogCi1tYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zm
c2V0KHByb3BlcnR5T2Zmc2V0LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKLSAgICBiaWx0IHBy
b3BlcnR5T2Zmc2V0LCBJbmxpbmVTdG9yYWdlQ2FwYWNpdHksIC5pc0lubGluZQorbWFjcm8gbG9h
ZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRT
dG9yYWdlLCB2YWx1ZSkKKyAgICBiaWx0IHByb3BlcnR5T2Zmc2V0QXNJbnQsIElubGluZVN0b3Jh
Z2VDYXBhY2l0eSwgLmlzSW5saW5lCiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fb3V0T2ZMaW5lU3Rv
cmFnZVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQorICAgIG5lZ2kgcHJvcGVy
dHlPZmZzZXRBc0ludAorICAgIHN4aTJwIHByb3BlcnR5T2Zmc2V0QXNJbnQsIHByb3BlcnR5T2Zm
c2V0QXNJbnQKICAgICBqbXAgLnJlYWR5CiAuaXNJbmxpbmU6Ci0gICAgYWRkcCBKU0ZpbmFsT2Jq
ZWN0OjptX2lubGluZVN0b3JhZ2UgKyBJbmxpbmVTdG9yYWdlQ2FwYWNpdHkgKiA4LCBvYmplY3RB
bmRTdG9yYWdlCisgICAgYWRkcCBKU0ZpbmFsT2JqZWN0OjptX2lubGluZVN0b3JhZ2UgLSAoSW5s
aW5lU3RvcmFnZUNhcGFjaXR5IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdlCiAucmVhZHk6Ci0g
ICAgbG9hZHAgLTggKiBJbmxpbmVTdG9yYWdlQ2FwYWNpdHlbb2JqZWN0QW5kU3RvcmFnZSwgcHJv
cGVydHlPZmZzZXQsIDhdLCB2YWx1ZQorICAgIGxvYWRwIChJbmxpbmVTdG9yYWdlQ2FwYWNpdHkg
LSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVl
CiBlbmQKIAogbWFjcm8gcmVzb2x2ZUdsb2JhbChzaXplLCBzbG93KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTIzMzk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OSwxMCArOTksMTEgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbAogICAgIFByb3BlcnR5U3RvcmFnZSBzdG9yYWdlID0gdGhpc09iamVjdC0+b3V0T2ZMaW5l
U3RvcmFnZSgpOwogICAgIGlmIChzdG9yYWdlKSB7CiAgICAgICAgIHNpemVfdCBzdG9yYWdlU2l6
ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplRm9yS25vd25Ob25GaW5h
bE9iamVjdCgpOworICAgICAgICBzaXplX3QgY2FwYWNpdHkgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICAgICAgLy8gV2UgaGF2ZSB0aGlzIGV4dHJh
IHRlbXAgaGVyZSB0byBzbGFrZSBHQ0MncyB0aGlyc3QgZm9yIHRoZSBibG9vZCBvZiB0aG9zZSB3
aG8gZGVyZWZlcmVuY2UgdHlwZS1wdW5uZWQgcG9pbnRlcnMuCi0gICAgICAgIHZvaWQqIHRlbXAg
PSBzdG9yYWdlOwotICAgICAgICB2aXNpdG9yLmNvcHlBbmRBcHBlbmQoJnRlbXAsIHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4pLCBzdG9yYWdlLT5zbG90KCksIHN0b3JhZ2VTaXplKTsKLSAgICAgICAg
c3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5U3RvcmFnZT4odGVtcCk7CisgICAgICAgIHZv
aWQqIHRlbXAgPSBzdG9yYWdlIC0gY2FwYWNpdHkgLSAxOworICAgICAgICB2aXNpdG9yLmNvcHlB
bmRBcHBlbmQoJnRlbXAsIGNhcGFjaXR5ICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4pLCAoc3RvcmFnZSAtIHN0b3JhZ2VTaXplIC0gMSktPnNsb3QoKSwgc3RvcmFnZVNpemUpOwor
ICAgICAgICBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKSArIGNh
cGFjaXR5ICsgMTsKICAgICAgICAgdGhpc09iamVjdC0+bV9vdXRPZkxpbmVTdG9yYWdlLnNldChz
dG9yYWdlLCBTdG9yYWdlQmFycmllcjo6VW5jaGVja2VkKTsKICAgICB9CiAKQEAgLTEyOCwxMCAr
MTI5LDExIEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBQ
cm9wZXJ0eVN0b3JhZ2Ugc3RvcmFnZSA9IHRoaXNPYmplY3QtPm91dE9mTGluZVN0b3JhZ2UoKTsK
ICAgICBpZiAoc3RvcmFnZSkgewogICAgICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSB0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZUZvcktub3duRmluYWxPYmplY3QoKTsKKyAg
ICAgICAgc2l6ZV90IGNhcGFjaXR5ID0gdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCk7CiAgICAgICAgIC8vIFdlIGhhdmUgdGhpcyBleHRyYSB0ZW1wIGhlcmUgdG8g
c2xha2UgR0NDJ3MgdGhpcnN0IGZvciB0aGUgYmxvb2Qgb2YgdGhvc2Ugd2hvIGRlcmVmZXJlbmNl
IHR5cGUtcHVubmVkIHBvaW50ZXJzLgotICAgICAgICB2b2lkKiB0ZW1wID0gc3RvcmFnZTsKLSAg
ICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKCZ0ZW1wLCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KSwgc3RvcmFnZS0+c2xvdCgpLCBzdG9yYWdlU2l6ZSk7Ci0gICAgICAgIHN0b3JhZ2UgPSBzdGF0
aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXApOworICAgICAgICB2b2lkKiB0ZW1wID0gc3Rv
cmFnZSAtIGNhcGFjaXR5IC0gMTsKKyAgICAgICAgdmlzaXRvci5jb3B5QW5kQXBwZW5kKCZ0ZW1w
LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KSwgKHN0b3JhZ2UgLSBzdG9yYWdlU2l6ZSAtIDEpLT5z
bG90KCksIHN0b3JhZ2VTaXplKTsKKyAgICAgICAgc3RvcmFnZSA9IHN0YXRpY19jYXN0PFByb3Bl
cnR5U3RvcmFnZT4odGVtcCkgKyBjYXBhY2l0eSArIDE7CiAgICAgICAgIHRoaXNPYmplY3QtPm1f
b3V0T2ZMaW5lU3RvcmFnZS5zZXQoc3RvcmFnZSwgU3RvcmFnZUJhcnJpZXI6OlVuY2hlY2tlZCk7
CiAgICAgfQogCkBAIC01OTUsNyArNTk3LDcgQEAgUHJvcGVydHlTdG9yYWdlIEpTT2JqZWN0Ojpn
cm93T3V0T2ZMaW5lUwogCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZ1bmN0aW9u
IG5vdCByZWx5IG9uIHN0cnVjdHVyZSgpLCBzaW5jZQogICAgIC8vIHdlIG1pZ2h0IGJlIGluIHRo
ZSBtaWRkbGUgb2YgYSB0cmFuc2l0aW9uLgotCisgICAgCiAgICAgUHJvcGVydHlTdG9yYWdlIG9s
ZFByb3BlcnR5U3RvcmFnZSA9IG1fb3V0T2ZMaW5lU3RvcmFnZS5nZXQoKTsKICAgICBQcm9wZXJ0
eVN0b3JhZ2UgbmV3UHJvcGVydHlTdG9yYWdlID0gMDsKIApAQCAtNjAzLDkgKzYwNSw5IEBAIFBy
b3BlcnR5U3RvcmFnZSBKU09iamVjdDo6Z3Jvd091dE9mTGluZVMKICAgICB2b2lkKiB0ZW1wID0g
bmV3UHJvcGVydHlTdG9yYWdlOwogICAgIGlmICghZ2xvYmFsRGF0YS5oZWFwLnRyeUFsbG9jYXRl
U3RvcmFnZShzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBuZXdTaXplLCAmdGVt
cCkpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgbmV3UHJvcGVydHlTdG9yYWdlID0gc3RhdGljX2Nh
c3Q8UHJvcGVydHlTdG9yYWdlPih0ZW1wKTsKKyAgICBuZXdQcm9wZXJ0eVN0b3JhZ2UgPSBzdGF0
aWNfY2FzdDxQcm9wZXJ0eVN0b3JhZ2U+KHRlbXApICsgbmV3U2l6ZSArIDE7CiAgICAgCi0gICAg
bWVtY3B5KG5ld1Byb3BlcnR5U3RvcmFnZSwgb2xkUHJvcGVydHlTdG9yYWdlLCBzaXplb2YoV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBvbGRTaXplKTsKKyAgICBtZW1jcHkobmV3UHJvcGVy
dHlTdG9yYWdlIC0gb2xkU2l6ZSAtIDEsIG9sZFByb3BlcnR5U3RvcmFnZSAtIG9sZFNpemUgLSAx
LCBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPikgKiBvbGRTaXplKTsKIAogICAgIEFT
U0VSVChuZXdQcm9wZXJ0eVN0b3JhZ2UpOwogICAgIHJldHVybiBuZXdQcm9wZXJ0eVN0b3JhZ2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9u
IDEyMzM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3MywxNCArMTczLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+Z2V0
KGdsb2JhbERhdGEsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBjaGVja09mZnNldChvZmZz
ZXQsIHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
b2Zmc2V0ICE9IGludmFsaWRPZmZzZXQgPyBsb2NhdGlvbkZvck9mZnNldChvZmZzZXQpIDogMDsK
KyAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkT2Zmc2V0KG9mZnNldCkgPyBsb2NhdGlvbkZvck9m
ZnNldChvZmZzZXQpIDogMDsKICAgICAgICAgfQogCiAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qIGdldERpcmVjdExvY2F0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNGdW5jdGlvbjsKICAgICAgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5nZXQoZ2xvYmFsRGF0YSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uKTsKLSAgICAgICAgICAgIHJldHVybiBv
ZmZzZXQgIT0gaW52YWxpZE9mZnNldCA/IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCkgOiAwOwor
ICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRPZmZzZXQob2Zmc2V0KSA/IGxvY2F0aW9uRm9yT2Zm
c2V0KG9mZnNldCkgOiAwOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBoYXNJbmxpbmVTdG9y
YWdlKCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlKCktPmhhc0lubGluZVN0b3JhZ2UoKTsgfQpA
QCAtMjI3LDcgKzIyNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKG9mZnNl
dEluSW5saW5lU3RvcmFnZSA8IHN0YXRpY19jYXN0PHNpemVfdD4oaW5saW5lU3RvcmFnZUNhcGFj
aXR5KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvZmZzZXRJbklubGluZVN0b3JhZ2U7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9jYXRpb24gLSBvdXRP
ZkxpbmVTdG9yYWdlKCkgKyBmaXJzdE91dE9mTGluZU9mZnNldDsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBvdXRPZkxpbmVTdG9yYWdlKCkgLSBsb2NhdGlvbiArIChpbmxpbmVTdG9yYWdlQ2Fw
YWNpdHkgLSAyKTsKICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KHJlc3VsdCwgc3RydWN0dXJl
KCktPnR5cGVJbmZvKCkudHlwZSgpKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJKHJldmlz
aW9uIDEyMzM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAKICAgICAgICAgSlNWYWx1ZSBzdHJ1Y3R1cmVPclVuZGVmaW5lZCgpIGNvbnN0OwogCi0gICAg
ICAgIGNoYXIqIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IGNoYXIqIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SlNPYmplY3QqIHN5bnRoZXNpemVQcm90b3R5cGUoRXhlY1N0YXRlKikgY29uc3Q7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaAkocmV2
aXNpb24gMTIzMzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlP
ZmZzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIGlubGluZSBzaXplX3Qg
b2Zmc2V0SW5PdXRPZkxpbmVTdG9yYWdlKFAKIHsKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQp
OwogICAgIEFTU0VSVChpc091dE9mTGluZU9mZnNldChvZmZzZXQpKTsKLSAgICByZXR1cm4gb2Zm
c2V0IC0gZmlyc3RPdXRPZkxpbmVPZmZzZXQ7CisgICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KG9mZnNldCAtIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSAtIDI7CiB9CiAKIGlubGluZSBz
aXplX3Qgb2Zmc2V0SW5SZXNwZWN0aXZlU3RvcmFnZShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCg==
</data>
<flag name="review"
          id="162990"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>