<?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>19434</bug_id>
          
          <creation_ts>2008-06-08 09:30:42 -0700</creation_ts>
          <short_desc>speed up SunSpider by avoiding some string boxing</short_desc>
          <delta_ts>2008-06-12 21:55:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>82613</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-08 09:30:42 -0700</bug_when>
    <thetext>I have some speedups for SunSpider that total a bit over 1%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82614</commentid>
    <comment_count>1</comment_count>
      <attachid>21573</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-08 09:31:03 -0700</bug_when>
    <thetext>Created attachment 21573
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83009</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-06-11 12:53:01 -0700</bug_when>
    <thetext>Any chance of breaking this up into the logically separate changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83011</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-11 12:55:47 -0700</bug_when>
    <thetext>Sure, I&apos;ll do that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83025</commentid>
    <comment_count>4</comment_count>
      <attachid>21645</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-11 14:47:08 -0700</bug_when>
    <thetext>Created attachment 21645
patch for part 1 (breaking up as per Maciej&apos;s request)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83031</commentid>
    <comment_count>5</comment_count>
      <attachid>21645</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-06-11 15:02:16 -0700</bug_when>
    <thetext>Comment on attachment 21645
patch for part 1 (breaking up as per Maciej&apos;s request)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83032</commentid>
    <comment_count>6</comment_count>
      <attachid>21645</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-11 15:02:47 -0700</bug_when>
    <thetext>Comment on attachment 21645
patch for part 1 (breaking up as per Maciej&apos;s request)

Landed this as r34499.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83033</commentid>
    <comment_count>7</comment_count>
      <attachid>21646</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-11 15:13:13 -0700</bug_when>
    <thetext>Created attachment 21646
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83036</commentid>
    <comment_count>8</comment_count>
      <attachid>21648</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-11 15:22:44 -0700</bug_when>
    <thetext>Created attachment 21648
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83123</commentid>
    <comment_count>9</comment_count>
      <attachid>21648</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-06-12 11:42:45 -0700</bug_when>
    <thetext>Comment on attachment 21648
patch

r=me

It would be great to avoid the boxing for methods too, as discussed previously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83155</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-12 21:55:18 -0700</bug_when>
    <thetext>Committed revision 34518.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21573</attachid>
            <date>2008-06-08 09:31:03 -0700</date>
            <delta_ts>2008-06-11 14:47:08 -0700</delta_ts>
            <desc>patch</desc>
            <filename>PropStrSpeedupPatch.txt</filename>
            <type>text/plain</type>
            <size>50024</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0NDM5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEyIEBACisyMDA4LTA2LTA4ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIGEgZmV3IHNwZWVkdXBzIHRoYXQgdG90YWwgMS4wMTJ4IHNwZWVk
IG9uIHN0YW5kYWxvbmUgU3VuU3BpZGVyCisKKyAgICAgICAgQWRkZWQgYSBuZXcgUHJvcGVydHlN
YXAgZnVuY3Rpb24gZm9yIHRoZSBjb21tb24gY2FzZSBvZiBwdXQsIHJlbW92aW5nIGEgYnJhbmNo
CisgICAgICAgIGFuZCBhZGRpbmcgZXhwbGljaXQgcHJlZGljdGlvbiBmb3IgYSBjb3VwbGUgb3Ro
ZXJzLgorCisgICAgICAgIEFkZGVkIHNvbWUgYnJhbmNoIHByZWRpY3Rpb24gdG8gc29tZSBvdGhl
ciBob3QgZnVuY3Rpb25zLgorCisgICAgICAgIE9wdGltaXplZCBjb2RlIHBhdGggZm9yIGdldHRp
bmcgYnVpbHQtaW4gcHJvcGVydGllcyBmcm9tIHN0cmluZ3MgLS0gYXZvaWQKKyAgICAgICAgYm94
aW5nIHdpdGggYSBzdHJpbmcgb2JqZWN0IGluIHRoYXQgY2FzZS4gV2UgY2FuIG1ha2UgZnVydGhl
ciBjaGFuZ2VzIHRvIGF2b2lkCisgICAgICAgIGV2ZW4gbW9yZSBib3hpbmcsIGJ1dCB0aGlzIGNo
YW5nZSBhbG9uZSBpcyBhIHdpbi4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVu
Y3Rpb25zLmg6CisgICAgICAgIChLSlM6OkpTQ2FsbGJhY2tPYmplY3Q6OnN0YXRpY1ZhbHVlR2V0
dGVyKTogVXNlIGlzT2JqZWN0IGluc3RlYWQgb2YgaW5oZXJpdHMKKyAgICAgICAgaW4gYXNzc2Vy
dCwgc2luY2UgdGhlIHR5cGUgb2Ygc2xvdEJhc2UoKSBpcyBub3cgSlNWYWx1ZSwgbm90IEpTT2Jq
ZWN0LgorICAgICAgICAoS0pTOjpKU0NhbGxiYWNrT2JqZWN0OjpzdGF0aWNGdW5jdGlvbkdldHRl
cik6IERpdHRvLgorICAgICAgICAoS0pTOjpKU0NhbGxiYWNrT2JqZWN0OjpjYWxsYmFja0dldHRl
cik6IERpdHRvLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKworICAgICAgICAqIGtq
cy9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoS0pTOjpKU0FjdGl2YXRpb246OnB1dCk6IFVz
ZSB0aGUgbmV3IHB1dFVubGVzc1JlYWRPbmx5IGZ1bmN0aW9uLgorCisgICAgICAgICoga2pzL2Fy
cmF5X2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEtKUzo6QXJyYXlJbnN0YW5jZTo6cHV0KTogR290
IHJpZCBvZiBhbiB1bm5lZWRlZCBsb2NhbCB2YXJpYWJsZS4gQWRkZWQKKyAgICAgICAgZXhwbGlj
aXQgYnJhbmNoIHByZWRpY3Rpb24gdG8gc29tZSBicmFuY2hlcyB0aGF0IHdlcmUgbWlzcHJlZGlj
dGVkLgorCisgICAgICAgICoga2pzL2NvbGxlY3Rvci5jcHA6CisgICAgICAgIChLSlM6OkNvbGxl
Y3Rvcjo6aGVhcEFsbG9jYXRlKTogQWRkIHByZWRpY3Rpb24gZm9yIGEgYnJhbmNoIGluIHRoZSBm
YXN0CisgICAgICAgIGNhc2Ugb2YgYWxsb2NhdGlvbi4KKworICAgICAgICAqIGtqcy9pbnRlcm5h
bC5jcHA6CisgICAgICAgIChLSlM6OlN0cmluZ0ltcDo6Z2V0UHJpbWl0aXZlTnVtYmVyKTogVXBk
YXRlZCBmb3IgY2hhbmdlIG9mIGRhdGEgbWVtYmVyIG5hbWUuCisgICAgICAgIChLSlM6OlN0cmlu
Z0ltcDo6dG9Cb29sZWFuKTogRGl0dG8uCisgICAgICAgIChLSlM6OlN0cmluZ0ltcDo6dG9OdW1i
ZXIpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6U3RyaW5nSW1wOjp0b1N0cmluZyk6IERpdHRvLgor
ICAgICAgICAoS0pTOjpTdHJpbmdJbnN0YW5jZTo6Y3JlYXRlKTogQWRkZWQ7IGF2b2lkcyBhIGJp
dCBvZiBjdXQgYW5kIHBhc3RlIGNvZGUuCisgICAgICAgIChLSlM6OlN0cmluZ0ltcDo6dG9PYmpl
Y3QpOiBVc2UgU3RyaW5nSW5zdGFuY2U6OmNyZWF0ZS4KKyAgICAgICAgKEtKUzo6U3RyaW5nSW1w
Ojp0b1RoaXNPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6U3RyaW5nSW1wOjpsZW5ndGhH
ZXR0ZXIpOiBBZGRlZC4gUmVwbGFjZXMgdGhlIGdldHRlciB0aGF0IHVzZWQgdG8gbGl2ZSBpbgor
ICAgICAgICB0aGUgU3RyaW5nSW5zdGFuY2UgY2xhc3MuCisgICAgICAgIChLSlM6OlN0cmluZ0lt
cDo6aW5kZXhHZXR0ZXIpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6U3RyaW5nSW1wOjppbmRleE51
bWVyaWNQcm9wZXJ0eUdldHRlcik6IERpdHRvLgorICAgICAgICAoS0pTOjpTdHJpbmdJbXA6Omdl
dE93blByb3BlcnR5U2xvdCk6IEFkZGVkLiBEZWFscyB3aXRoIGJ1aWx0IGluIHByb3BlcnRpZXMg
b2YKKyAgICAgICAgdGhlIHN0cmluZyBjbGFzcyB3aXRob3V0IGNyZWF0aW5nIGEgU3RyaW5nSW5z
dGFuY2UuCisKKyAgICAgICAgKiBranMvaW50ZXJuYWwuaDoKKyAgICAgICAgKEtKUzo6U3RyaW5n
SW1wOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QpOiBBZGRlZC4gVG8gYmUgdXNlZCBieSBib3RoIHRo
ZSBzdHJpbmcKKyAgICAgICAgYW5kIHN0cmluZyBvYmplY3QgZ2V0T3duUHJvcGVydHlTbG90IGZ1
bmN0aW9uLgorCisgICAgICAgICoga2pzL2xvb2t1cC5oOgorICAgICAgICAoS0pTOjpzdGF0aWNG
dW5jdGlvbkdldHRlcik6IFVwZGF0ZWQgc2luY2Ugc2xvdEJhc2UoKSBpcyBub3cgYSBKU1ZhbHVl
IHJhdGhlcgorICAgICAgICB0aGFuIGEgSlNPYmplY3QuCisKKyAgICAgICAgKiBranMvb2JqZWN0
LmNwcDoKKyAgICAgICAgKEtKUzo6SlNPYmplY3Q6OnB1dCk6IFVzZSBuZXcgcHV0VW5sZXNzUmVh
ZE9ubHkgZnVuY3Rpb24uCisgICAgICAgIChLSlM6OkpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVy
dHlTbG90KTogTWFyayBORVZFUl9JTkxJTkUgdG8gYXZvaWQgYSBQSUMgYnJhbmNoCisgICAgICAg
IGluIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QuCisgICAgICAgIChLSlM6OkVycm9yOjpj
cmVhdGUpOiBHb3QgcmlkIG9mIHRoZSB1bm5lZWRlZCwgdW51c2VkIEVycm9yOjplcnJvck5hbWVz
LgorICAgICAgICBBbHNvIGdvdCByaWQgb2YgdGhlIGFycmF5IG9mIG5hbWVzOyB0aGVyZSB3YXMg
YWxyYWR5IGEgc3dpdGNoIHN0YXRlbWVudCBpbiB0aGUKKyAgICAgICAgZnVuY3Rpb24gYW5kIGl0
J3MgdW5uZWNlc3NhcmlseSBkYW5nZXJvdXMgdG8gaW5kZXggaW50byBhbiBhcnJheSB3aXRob3V0
IGEgcmFuZ2UKKyAgICAgICAgY2hlY2suCisKKyAgICAgICAgKiBranMvb2JqZWN0Lmg6CisgICAg
ICAgIChLSlM6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOiBBZGQgYnJhbmNoIHByZWRp
Y3Rpb24gZm9yIHRoZSBnZXR0ZXIvc2V0dGVyCisgICAgICAgIGNvZGUgcGF0aC4KKworICAgICAg
ICAqIGtqcy9wcm9wZXJ0eV9tYXAuY3BwOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6Z2V0
TG9jYXRpb24pOiBBZGQgYnJhbmNoIHByZWRpY3Rpb24gdGhhdCBhc3N1bWVzIHRoYXQgbW9zdAor
ICAgICAgICBnZXRzIGFyZSBpbiBwcm9wZXJ0eSBtYXBzIHRoYXQgaGF2ZSBzb21lIHByb3BlcnRp
ZXMuCisgICAgICAgIChLSlM6OlByb3BlcnR5TWFwOjpwdXRVbmxlc3NSZWFkT25seSk6IEFkZGVk
LiBBIGNvcHkgb2YgdGhlIHB1dCBmdW5jdGlvbiB0aGF0CisgICAgICAgIHJlbW92ZXMgYnJhbmNo
ZXMgZHVlIHRvIHRoZSBjaGVja1JlYWRPbmx5IGJvb2xlYW4sIGFuZCBoYXMgc29tZSBicmFuY2gg
cHJlZGljdGlvbgorICAgICAgICBmb3IgYnJhbmNoZXMgaW4gdGhlIGhvdCBjb2RlIHBhdGguCisg
ICAgICAgICoga2pzL3Byb3BlcnR5X21hcC5oOiBBZGRlZCBwdXRVbmxlc3NSZWFkT25seS4KKwor
ICAgICAgICAqIGtqcy9wcm9wZXJ0eV9zbG90LmNwcDogUmVtb3ZlZCBub3ctdW51c2VkIHVuZ2V0
dGFibGVHZXR0ZXIuCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIp
OiBVcGRhdGVkIHNpbmNlIHNsb3Quc2xvdEJhc2UoKSBpcyBub3cgYSBKU1ZhbHVlKgorICAgICAg
ICBpbnN0ZWFkIG9mIEpTT2JqZWN0Ki4gc2V0R2V0dGVyU2xvdCBzdGlsbCBndWFyYW50ZWVzIHRo
ZSBiYXNlIGlzIGEgSlNPYmplY3QqLgorICAgICAgICAqIGtqcy9wcm9wZXJ0eV9zbG90Lmg6Cisg
ICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6UHJvcGVydHlTbG90KTogQ2hhbmdlZCBiYXNlIHRv
IEpTVmFsdWUqIGludGVhZCBvZiBKU0NlbGwqLgorICAgICAgICAoS0pTOjpQcm9wZXJ0eVNsb3Q6
OnNldFN0YXRpY0VudHJ5KTogRGl0dG8uCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6c2V0
Q3VzdG9tKTogRGl0dG8uCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6c2V0Q3VzdG9tSW5k
ZXgpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6UHJvcGVydHlTbG90OjpzZXRDdXN0b21OdW1lcmlj
KTogRGl0dG8uCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6c2xvdEJhc2UpOiBNb3ZlZCBp
bmxpbmUgaGVyZSBzaW5jZSBpdCBubyBsb25nZXIgaW52b2x2ZXMgYQorICAgICAgICBkb3duY2Fz
dCB0byBKU09iamVjdCouCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6c2V0QmFzZSk6IENo
YW5nZWQgdG8gSlNWYWx1ZSouCisKKyAgICAgICAgKiBranMvc3RyaW5nX29iamVjdC5jcHA6Cisg
ICAgICAgIChLSlM6OlN0cmluZ0luc3RhbmNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOiBDaGFuZWdk
IHRvIHVzZSBnZXRTdHJpbmdQcm9wZXJ0eVNsb3QKKyAgICAgICAgaW5zdGVhZCBvZiBjb2Rpbmcg
dGhlIHByb3BlcnRpZXMgaGVyZS4gVGhpcyBhbGxvd3Mgc2hhcmluZyB0aGUgY29kZSB3aXRoIFN0
cmluZ0ltcC4KKworICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0Lmg6IFJlbW92ZWQgaW5saW5l
R2V0T3duUHJvcGVydHlTbG90LCBsZW5ndGhHZXR0ZXIsIGFuZCBpbmRleEdldHRlci4KKyAgICAg
ICAgTWFkZSBvbmUgb2YgdGhlIGNvbnN0cnVjdG9ycyBwcm90ZWN0ZWQuCisKKyAgICAgICAgKiBr
anMvdmFsdWUuaDogTWFkZSBnZXRPd25Qcm9wZXJ0eVNsb3QgcHJpdmF0ZSBpbiB0aGUgSlNDZWxs
IGNsYXNzIC0tIHRoaXMgaXMgYmV0dGVyCisgICAgICAgIHNpbmNlIGl0J3Mgbm90IHRoZSByZWFs
IEpTT2JqZWN0IGdldE93blByb3BlcnR5U2xvdCBzZW1hbnRpYyBhbmQgbW9zdCBjYWxsZXJzIHNo
b3VsZG4ndAorICAgICAgICB1c2UgaXQuCisKKyAgICAgICAgKiB3dGYvQWx3YXlzSW5saW5lLmg6
IEFkZGVkIExJS0VMWSB0byBnbyBhbG9uZyB3aXRoIFVOTElLRUxZLgorCisgICAgICAgIC0gYWxz
byBmaXggYSB3YXJuaW5nCisKKyAgICAgICAgKiBWTS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
S0pTOjpDb2RlQmxvY2s6OmR1bXApOiBGaXggdG8gbm90IGFzc3VtZSB0aGF0IHNpemVfdCBhbmQg
dW5zaWduZWQgbG9uZyBhcmUgdGhlCisgICAgICAgIHNhbWUgdHlwZSBieSBjYXN0aW5nIHRvIHVu
c2lnbmVkIGxvbmcuCisKIDIwMDgtMDYtMDcgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1
d2F0ZXJsb28uY2E+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM0NDM4KQorKysgSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAK
K19KU0NoZWNrU2NyaXB0U3ludGF4CitfSlNDbGFzc0NyZWF0ZQorX0pTQ2xhc3NSZWxlYXNlCitf
SlNDbGFzc1JldGFpbgorX0pTQ29udGV4dEdldEdsb2JhbE9iamVjdAorX0pTRXZhbHVhdGVTY3Jp
cHQKK19KU0dhcmJhZ2VDb2xsZWN0CitfSlNHbG9iYWxDb250ZXh0Q3JlYXRlCitfSlNHbG9iYWxD
b250ZXh0UmVsZWFzZQorX0pTR2xvYmFsQ29udGV4dFJldGFpbgorX0pTT2JqZWN0Q2FsbEFzQ29u
c3RydWN0b3IKK19KU09iamVjdENhbGxBc0Z1bmN0aW9uCitfSlNPYmplY3RDb3B5UHJvcGVydHlO
YW1lcworX0pTT2JqZWN0RGVsZXRlUHJvcGVydHkKK19KU09iamVjdEdldFByaXZhdGUKK19KU09i
amVjdEdldFByb3BlcnR5CitfSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgKK19KU09iamVjdEdl
dFByb3RvdHlwZQorX0pTT2JqZWN0SGFzUHJvcGVydHkKK19KU09iamVjdElzQ29uc3RydWN0b3IK
K19KU09iamVjdElzRnVuY3Rpb24KK19KU09iamVjdE1ha2UKK19KU09iamVjdE1ha2VDb25zdHJ1
Y3RvcgorX0pTT2JqZWN0TWFrZUZ1bmN0aW9uCitfSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2Fs
bGJhY2sKK19KU09iamVjdFNldFByaXZhdGUKK19KU09iamVjdFNldFByb3BlcnR5CitfSlNPYmpl
Y3RTZXRQcm9wZXJ0eUF0SW5kZXgKK19KU09iamVjdFNldFByb3RvdHlwZQorX0pTUHJvcGVydHlO
YW1lQWNjdW11bGF0b3JBZGROYW1lCitfSlNQcm9wZXJ0eU5hbWVBcnJheUdldENvdW50CitfSlNQ
cm9wZXJ0eU5hbWVBcnJheUdldE5hbWVBdEluZGV4CitfSlNQcm9wZXJ0eU5hbWVBcnJheVJlbGVh
c2UKK19KU1Byb3BlcnR5TmFtZUFycmF5UmV0YWluCitfSlNTdHJpbmdDb3B5Q0ZTdHJpbmcKK19K
U1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZworX0pTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMK
K19KU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZworX0pTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0
cgorX0pTU3RyaW5nR2V0TGVuZ3RoCitfSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXpl
CitfSlNTdHJpbmdHZXRVVEY4Q1N0cmluZworX0pTU3RyaW5nSXNFcXVhbAorX0pTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcKK19KU1N0cmluZ1JlbGVhc2UKK19KU1N0cmluZ1JldGFpbgorX0pT
VmFsdWVHZXRUeXBlCitfSlNWYWx1ZUlzQm9vbGVhbgorX0pTVmFsdWVJc0VxdWFsCitfSlNWYWx1
ZUlzSW5zdGFuY2VPZkNvbnN0cnVjdG9yCitfSlNWYWx1ZUlzTnVsbAorX0pTVmFsdWVJc051bWJl
cgorX0pTVmFsdWVJc09iamVjdAorX0pTVmFsdWVJc09iamVjdE9mQ2xhc3MKK19KU1ZhbHVlSXNT
dHJpY3RFcXVhbAorX0pTVmFsdWVJc1N0cmluZworX0pTVmFsdWVJc1VuZGVmaW5lZAorX0pTVmFs
dWVNYWtlQm9vbGVhbgorX0pTVmFsdWVNYWtlTnVsbAorX0pTVmFsdWVNYWtlTnVtYmVyCitfSlNW
YWx1ZU1ha2VTdHJpbmcKK19KU1ZhbHVlTWFrZVVuZGVmaW5lZAorX0pTVmFsdWVQcm90ZWN0Citf
SlNWYWx1ZVRvQm9vbGVhbgorX0pTVmFsdWVUb051bWJlcgorX0pTVmFsdWVUb09iamVjdAorX0pT
VmFsdWVUb1N0cmluZ0NvcHkKK19KU1ZhbHVlVW5wcm90ZWN0CitfV1RGTG9nCitfV1RGTG9nVmVy
Ym9zZQorX1dURlJlcG9ydEFyZ3VtZW50QXNzZXJ0aW9uRmFpbHVyZQorX1dURlJlcG9ydEFzc2Vy
dGlvbkZhaWx1cmUKK19XVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UKK19XVEZS
ZXBvcnRFcnJvcgorX1dURlJlcG9ydEZhdGFsRXJyb3IKIF9fWjEyanNSZWdFeHBGcmVlUDhKU1Jl
Z0V4cAogX19aMTVqc1JlZ0V4cENvbXBpbGVQS3RpMjRKU1JlZ0V4cElnbm9yZUNhc2VPcHRpb24y
M0pTUmVnRXhwTXVsdGlsaW5lT3B0aW9uUGpQUEtjCiBfX1oxNWpzUmVnRXhwRXhlY3V0ZVBLOEpT
UmVnRXhwUEt0aWlQaWkKQEAgLTI5LDggKzEwNCw4IEBAIF9fWk4zS0pTMTJQcm9wZXJ0eVNsb3Qx
NXVuZGVmaW5lZEdldHRlckUKIF9fWk4zS0pTMTJSZWdpc3RlckZpbGUxNGFkZEdsb2JhbFNsb3Rz
RW0KIF9fWk4zS0pTMTNBcnJheUluc3RhbmNlNGluZm9FCiBfX1pOM0tKUzEzQ29kZUdlbmVyYXRv
cjIxc2V0RHVtcHNHZW5lcmF0ZWRDb2RlRWIKLV9fWk4zS0pTMTNqc093bmVkU3RyaW5nRVJLTlNf
N1VTdHJpbmdFCiBfX1pOM0tKUzEzU3RhdGVtZW50Tm9kZTZzZXRMb2NFaWkKK19fWk4zS0pTMTNq
c093bmVkU3RyaW5nRVJLTlNfN1VTdHJpbmdFCiBfX1pOM0tKUzE0SlNHbG9iYWxPYmplY3QxMGds
b2JhbEV4ZWNFdgogX19aTjNLSlMxNEpTR2xvYmFsT2JqZWN0MTJkZWZpbmVHZXR0ZXJFUE5TXzlF
eGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUE5TXzhKU09iamVjdEUKIF9fWk4zS0pTMTRKU0ds
b2JhbE9iamVjdDEyZGVmaW5lU2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVy
RVBOU184SlNPYmplY3RFCkBAIC00NCw4ICsxMTksOCBAQCBfX1pOM0tKUzE0SlNHbG9iYWxPYmpl
Y3Q1cmVzZXRFUE5TXzdKU1ZhCiBfX1pOM0tKUzE0SlNHbG9iYWxPYmplY3REMkV2CiBfX1pOM0tK
UzE0U3RyaW5nSW5zdGFuY2UxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJ
ZGVudGlmaWVyRQogX19aTjNLSlMxNFN0cmluZ0luc3RhbmNlMTZnZXRQcm9wZXJ0eU5hbWVzRVBO
U185RXhlY1N0YXRlRVJOU18xN1Byb3BlcnR5TmFtZUFycmF5RQotX19aTjNLSlMxNFN0cmluZ0lu
c3RhbmNlMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFalJOU18xMlByb3BlcnR5
U2xvdEUKIF9fWk4zS0pTMTRTdHJpbmdJbnN0YW5jZTE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185
RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xvdEUKK19fWk4zS0pT
MTRTdHJpbmdJbnN0YW5jZTE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRWpSTlNf
MTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2UzcHV0RVBOU185RXhlY1N0
YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUUKIF9fWk4zS0pTMTRTdHJpbmdJbnN0
YW5jZTRpbmZvRQogX19aTjNLSlMxNFN0cmluZ0luc3RhbmNlQzFFUE5TXzhKU09iamVjdEVSS05T
XzdVU3RyaW5nRQpAQCAtNTYsMjMgKzEzMSwyMyBAQCBfX1pOM0tKUzE2SlNWYXJpYWJsZU9iamVj
dDE2Z2V0UHJvcGVydHlOCiBfX1pOM0tKUzE2UGFyc2VyUmVmQ291bnRlZDNyZWZFdgogX19aTjNL
SlMxNlBhcnNlclJlZkNvdW50ZWQ1ZGVyZWZFdgogX19aTjNLSlMxN1Byb3BlcnR5TmFtZUFycmF5
M2FkZEVQTlNfN1VTdHJpbmczUmVwRQotX19aTjNLSlMxN1Byb3RvdHlwZUZ1bmN0aW9uQzFFUE5T
XzlFeGVjU3RhdGVFaVJLTlNfMTBJZGVudGlmaWVyRVBGUE5TXzdKU1ZhbHVlRVMyX1BOU184SlNP
YmplY3RFUktOU180TGlzdEVFCiBfX1pOM0tKUzE3UHJvdG90eXBlRnVuY3Rpb25DMUVQTlNfOUV4
ZWNTdGF0ZUVQTlNfMTdGdW5jdGlvblByb3RvdHlwZUVpUktOU18xMElkZW50aWZpZXJFUEZQTlNf
N0pTVmFsdWVFUzJfUE5TXzhKU09iamVjdEVSS05TXzRMaXN0RUUKK19fWk4zS0pTMTdQcm90b3R5
cGVGdW5jdGlvbkMxRVBOU185RXhlY1N0YXRlRWlSS05TXzEwSWRlbnRpZmllckVQRlBOU183SlNW
YWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVJLTlNfNExpc3RFRQogX19aTjNLSlMxN1JlZ2lzdGVyRmls
ZVN0YWNrMjBhbGxvY2F0ZVJlZ2lzdGVyRmlsZUVtUFMwXwotX19aTjNLSlMxOWluaXRpYWxpemVU
aHJlYWRpbmdFdgogX19aTjNLSlMxOUludGVybmFsRnVuY3Rpb25JbXAxMWdldENhbGxEYXRhRVJO
U184Q2FsbERhdGFFCiBfX1pOM0tKUzE5SW50ZXJuYWxGdW5jdGlvbkltcDRpbmZvRQogX19aTjNL
SlMxOUludGVybmFsRnVuY3Rpb25JbXBDMkVQTlNfMTdGdW5jdGlvblByb3RvdHlwZUVSS05TXzEw
SWRlbnRpZmllckUKK19fWk4zS0pTMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zS0pTMjNv
YmplY3RQcm90b0Z1bmNUb1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUVQTlNfOEpTT2JqZWN0RVJLTlNf
NExpc3RFCiBfX1pOM0tKUzRMaXN0MTVleHBhbmRBbmRBcHBlbmRFUE5TXzdKU1ZhbHVlRQogX19a
TjNLSlM0TGlzdDdtYXJrU2V0RXYKIF9fWk4zS0pTNWVxdWFsRVBLTlNfN1VTdHJpbmczUmVwRVMz
XwogX19aTjNLSlM2SlNDZWxsMTFnZXRDYWxsRGF0YUVSTlNfOENhbGxEYXRhRQogX19aTjNLSlM2
SlNDZWxsMTZnZXRDb25zdHJ1Y3REYXRhRVJOU18xM0NvbnN0cnVjdERhdGFFCi1fX1pOM0tKUzZK
U0NlbGwxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlT
bG90RQogX19aTjNLSlM2SlNDZWxsMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVF
UktOU18xMElkZW50aWZpZXJFUk5TXzEyUHJvcGVydHlTbG90RQotX19aTjNLSlM2SlNDZWxsM3B1
dEVQTlNfOUV4ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRQorX19aTjNLSlM2SlNDZWxsMThnZXRPd25Q
cm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFalJOU18xMlByb3BlcnR5U2xvdEUKIF9fWk4zS0pT
NkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUE5TXzdKU1ZhbHVl
RQorX19aTjNLSlM2SlNDZWxsM3B1dEVQTlNfOUV4ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRQogX19a
TjNLSlM2SlNDZWxsOWdldE9iamVjdEV2CiBfX1pOM0tKUzZKU0NlbGxud0VtCiBfX1pOM0tKUzZK
U0xvY2sxMkRyb3BBbGxMb2Nrc0MxRXYKQEAgLTgzLDIxICsxNTgsMjEgQEAgX19aTjNLSlM2SlNM
b2NrNnVubG9ja0V2CiBfX1pOM0tKUzZKU0xvY2s5bG9ja0NvdW50RXYKIF9fWk4zS0pTNlBhcnNl
cjVwYXJzZUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRWlOM1dURjEwUGFzc1JlZlB0cklO
U18xNFNvdXJjZVByb3ZpZGVyRUVFUGlTQV9QUzNfCiBfX1pOM0tKUzZzdHJ0b2RFUEtjUFBjCi1f
X1pOM0tKUzdDU3RyaW5nYVNFUktTMF8KIF9fWk4zS0pTN0NTdHJpbmdEMUV2CitfX1pOM0tKUzdD
U3RyaW5nYVNFUktTMF8KIF9fWk4zS0pTN01hY2hpbmUxM2R1bXBDYWxsRnJhbWVFUEtOU185Q29k
ZUJsb2NrRVBOU18xNFNjb3BlQ2hhaW5Ob2RlRVBOU18xMlJlZ2lzdGVyRmlsZUVQS05TXzhSZWdp
c3RlckUKLV9fWk4zS0pTN1Byb2ZpbGU3Zm9yRWFjaEVQRnZQTlNfMTFQcm9maWxlTm9kZUVFCiBf
X1pOM0tKUzdQcm9maWxlMTByZXN0b3JlQWxsRXYKK19fWk4zS0pTN1Byb2ZpbGU3Zm9yRWFjaEVQ
RnZQTlNfMTFQcm9maWxlTm9kZUVFCiBfX1pOM0tKUzdVU3RyaW5nM1JlcDExY29tcHV0ZUhhc2hF
UEt0aQogX19aTjNLSlM3VVN0cmluZzNSZXA0bnVsbEUKIF9fWk4zS0pTN1VTdHJpbmczUmVwN2Rl
c3Ryb3lFdgogX19aTjNLSlM3VVN0cmluZzRmcm9tRWoKIF9fWk4zS0pTN1VTdHJpbmc2YXBwZW5k
RVBLYwogX19aTjNLSlM3VVN0cmluZzZhcHBlbmRFUktTMF8KLV9fWk4zS0pTN1VTdHJpbmdhU0VQ
S2MKIF9fWk4zS0pTN1VTdHJpbmdDMUVQS2MKIF9fWk4zS0pTN1VTdHJpbmdDMUVQS3RpCiBfX1pO
M0tKUzdVU3RyaW5nQzFFUktTMF9TMl8KK19fWk4zS0pTN1VTdHJpbmdhU0VQS2MKIF9fWk4zS0pT
OERlYnVnZ2VyNmF0dGFjaEVQTlNfMTRKU0dsb2JhbE9iamVjdEUKIF9fWk4zS0pTOERlYnVnZ2Vy
NmRldGFjaEVQTlNfMTRKU0dsb2JhbE9iamVjdEUKIF9fWk4zS0pTOERlYnVnZ2VyQzJFdgpAQCAt
MTA5LDI2ICsxODQsMjYgQEAgX19aTjNLSlM4SlNPYmplY3QxMmxvb2t1cEdldHRlckVQTlNfOUV4
ZQogX19aTjNLSlM4SlNPYmplY3QxMmxvb2t1cFNldHRlckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEw
SWRlbnRpZmllckUKIF9fWk4zS0pTOEpTT2JqZWN0MTJyZW1vdmVEaXJlY3RFUktOU18xMElkZW50
aWZpZXJFCiBfX1pOM0tKUzhKU09iamVjdDE0Y2FsbEFzRnVuY3Rpb25FUE5TXzlFeGVjU3RhdGVF
UFMwX1JLTlNfNExpc3RFCi1fX1pOM0tKUzhKU09iamVjdDE0ZGVsZXRlUHJvcGVydHlFUE5TXzlF
eGVjU3RhdGVFagogX19aTjNLSlM4SlNPYmplY3QxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0
YXRlRVJLTlNfMTBJZGVudGlmaWVyRQorX19aTjNLSlM4SlNPYmplY3QxNGRlbGV0ZVByb3BlcnR5
RVBOU185RXhlY1N0YXRlRWoKIF9fWk4zS0pTOEpTT2JqZWN0MTRpbXBsZW1lbnRzQ2FsbEV2CiBf
X1pOM0tKUzhKU09iamVjdDE2Z2V0UHJvcGVydHlOYW1lc0VQTlNfOUV4ZWNTdGF0ZUVSTlNfMTdQ
cm9wZXJ0eU5hbWVBcnJheUUKIF9fWk4zS0pTOEpTT2JqZWN0MTdwdXREaXJlY3RGdW5jdGlvbkVQ
TlNfMTlJbnRlcm5hbEZ1bmN0aW9uSW1wRWkKLV9fWk4zS0pTOEpTT2JqZWN0MTdwdXRXaXRoQXR0
cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRWoKIF9fWk4zS0pTOEpTT2JqZWN0
MTdwdXRXaXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNf
N0pTVmFsdWVFagorX19aTjNLSlM4SlNPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185RXhl
Y1N0YXRlRWpQTlNfN0pTVmFsdWVFagogX19aTjNLSlM4SlNPYmplY3QxOGdldE93blByb3BlcnR5
U2xvdEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjNLSlM4SlNPYmpl
Y3QxOGdldFByaW1pdGl2ZU51bWJlckVQTlNfOUV4ZWNTdGF0ZUVSZFJQTlNfN0pTVmFsdWVFCiBf
X1pOM0tKUzhKU09iamVjdDIyZmlsbEdldHRlclByb3BlcnR5U2xvdEVSTlNfMTJQcm9wZXJ0eVNs
b3RFUFBOU183SlNWYWx1ZUUKLV9fWk4zS0pTOEpTT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVq
UE5TXzdKU1ZhbHVlRQogX19aTjNLSlM4SlNPYmplY3QzcHV0RVBOU185RXhlY1N0YXRlRVJLTlNf
MTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUUKK19fWk4zS0pTOEpTT2JqZWN0M3B1dEVQTlNfOUV4
ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRQogX19aTjNLSlM4SlNPYmplY3Q0bWFya0V2CiBfX1pOM0tK
UzhKU09iamVjdDljb25zdHJ1Y3RFUE5TXzlFeGVjU3RhdGVFUktOU180TGlzdEUKIF9fWk4zS0pT
OEpTT2JqZWN0OWNvbnN0cnVjdEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzRMaXN0RVJLTlNfMTBJZGVu
dGlmaWVyRVJLTlNfN1VTdHJpbmdFaQotX19aTjNLSlM4anNTdHJpbmdFUEtjCi1fX1pOM0tKUzhq
c1N0cmluZ0VSS05TXzdVU3RyaW5nRQogX19aTjNLSlM4UHJvZmlsZXIxM3N0b3BQcm9maWxpbmdF
UE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKIF9fWk4zS0pTOFByb2ZpbGVyMTRzdGFydFBy
b2ZpbGluZ0VQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQogX19aTjNLSlM4UHJvZmlsZXI4
cHJvZmlsZXJFdgorX19aTjNLSlM4anNTdHJpbmdFUEtjCitfX1pOM0tKUzhqc1N0cmluZ0VSS05T
XzdVU3RyaW5nRQogX19aTjNLSlM5Q29sbGVjdG9yMTRhbGxvY2F0ZU51bWJlckVtCiBfX1pOM0tK
UzlDb2xsZWN0b3IxNXJlY29yZEV4dHJhQ29zdEVtCiBfX1pOM0tKUzlDb2xsZWN0b3IxN2dsb2Jh
bE9iamVjdENvdW50RXYKQEAgLTIwNSw4ICsyODAsOCBAQCBfX1pOSzNLSlM3VVN0cmluZzZpczhC
aXRFdgogX19aTkszS0pTN1VTdHJpbmc2c3Vic3RyRWlpCiBfX1pOSzNLSlM3VVN0cmluZzh0b1VJ
bnQzMkVQYgogX19aTkszS0pTN1VTdHJpbmc4dG9VSW50MzJFUGJiCi1fX1pOSzNLSlM4SlNPYmpl
Y3QxMWhhc1Byb3BlcnR5RVBOU185RXhlY1N0YXRlRWoKIF9fWk5LM0tKUzhKU09iamVjdDExaGFz
UHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCitfX1pOSzNLSlM4SlNP
YmplY3QxMWhhc1Byb3BlcnR5RVBOU185RXhlY1N0YXRlRWoKIF9fWk5LM0tKUzhKU09iamVjdDEy
ZGVmYXVsdFZhbHVlRVBOU185RXhlY1N0YXRlRU5TXzZKU1R5cGVFCiBfX1pOSzNLSlM4SlNPYmpl
Y3QxMnRvVGhpc09iamVjdEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0tKUzhKU09iamVjdDE0dG9H
bG9iYWxPYmplY3RFUE5TXzlFeGVjU3RhdGVFCkBAIC0yMjksODIgKzMwNCw3IEBAIF9fWlRWTjNL
SlMxNkpTVmFyaWFibGVPYmplY3RFCiBfX1pUVk4zS0pTMTlJbnRlcm5hbEZ1bmN0aW9uSW1wRQog
X19aVFZOM0tKUzhKU09iamVjdEUKIF9fWlRWTjNLSlM5TnVtYmVySW1wRQotX0pTQ2hlY2tTY3Jp
cHRTeW50YXgKLV9KU0NsYXNzQ3JlYXRlCi1fSlNDbGFzc1JlbGVhc2UKLV9KU0NsYXNzUmV0YWlu
Ci1fSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0CiBfanNjb3JlX2NvbGxlY3Rvcl9pbnRyb3NwZWN0
aW9uCiBfanNjb3JlX2Zhc3RtYWxsb2NfaW50cm9zcGVjdGlvbgotX0pTRXZhbHVhdGVTY3JpcHQK
LV9KU0dhcmJhZ2VDb2xsZWN0Ci1fSlNHbG9iYWxDb250ZXh0Q3JlYXRlCi1fSlNHbG9iYWxDb250
ZXh0UmVsZWFzZQotX0pTR2xvYmFsQ29udGV4dFJldGFpbgotX0pTT2JqZWN0Q2FsbEFzQ29uc3Ry
dWN0b3IKLV9KU09iamVjdENhbGxBc0Z1bmN0aW9uCi1fSlNPYmplY3RDb3B5UHJvcGVydHlOYW1l
cwotX0pTT2JqZWN0RGVsZXRlUHJvcGVydHkKLV9KU09iamVjdEdldFByaXZhdGUKLV9KU09iamVj
dEdldFByb3BlcnR5Ci1fSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgKLV9KU09iamVjdEdldFBy
b3RvdHlwZQotX0pTT2JqZWN0SGFzUHJvcGVydHkKLV9KU09iamVjdElzQ29uc3RydWN0b3IKLV9K
U09iamVjdElzRnVuY3Rpb24KLV9KU09iamVjdE1ha2UKLV9KU09iamVjdE1ha2VDb25zdHJ1Y3Rv
cgotX0pTT2JqZWN0TWFrZUZ1bmN0aW9uCi1fSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJh
Y2sKLV9KU09iamVjdFNldFByaXZhdGUKLV9KU09iamVjdFNldFByb3BlcnR5Ci1fSlNPYmplY3RT
ZXRQcm9wZXJ0eUF0SW5kZXgKLV9KU09iamVjdFNldFByb3RvdHlwZQotX0pTUHJvcGVydHlOYW1l
QWNjdW11bGF0b3JBZGROYW1lCi1fSlNQcm9wZXJ0eU5hbWVBcnJheUdldENvdW50Ci1fSlNQcm9w
ZXJ0eU5hbWVBcnJheUdldE5hbWVBdEluZGV4Ci1fSlNQcm9wZXJ0eU5hbWVBcnJheVJlbGVhc2UK
LV9KU1Byb3BlcnR5TmFtZUFycmF5UmV0YWluCi1fSlNTdHJpbmdDb3B5Q0ZTdHJpbmcKLV9KU1N0
cmluZ0NyZWF0ZVdpdGhDRlN0cmluZwotX0pTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMKLV9K
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZwotX0pTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cgot
X0pTU3RyaW5nR2V0TGVuZ3RoCi1fSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplCi1f
SlNTdHJpbmdHZXRVVEY4Q1N0cmluZwotX0pTU3RyaW5nSXNFcXVhbAotX0pTU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcKLV9KU1N0cmluZ1JlbGVhc2UKLV9KU1N0cmluZ1JldGFpbgotX0pTVmFs
dWVHZXRUeXBlCi1fSlNWYWx1ZUlzQm9vbGVhbgotX0pTVmFsdWVJc0VxdWFsCi1fSlNWYWx1ZUlz
SW5zdGFuY2VPZkNvbnN0cnVjdG9yCi1fSlNWYWx1ZUlzTnVsbAotX0pTVmFsdWVJc051bWJlcgot
X0pTVmFsdWVJc09iamVjdAotX0pTVmFsdWVJc09iamVjdE9mQ2xhc3MKLV9KU1ZhbHVlSXNTdHJp
Y3RFcXVhbAotX0pTVmFsdWVJc1N0cmluZwotX0pTVmFsdWVJc1VuZGVmaW5lZAotX0pTVmFsdWVN
YWtlQm9vbGVhbgotX0pTVmFsdWVNYWtlTnVsbAotX0pTVmFsdWVNYWtlTnVtYmVyCi1fSlNWYWx1
ZU1ha2VTdHJpbmcKLV9KU1ZhbHVlTWFrZVVuZGVmaW5lZAotX0pTVmFsdWVQcm90ZWN0Ci1fSlNW
YWx1ZVRvQm9vbGVhbgotX0pTVmFsdWVUb051bWJlcgotX0pTVmFsdWVUb09iamVjdAotX0pTVmFs
dWVUb1N0cmluZ0NvcHkKLV9KU1ZhbHVlVW5wcm90ZWN0CiBfa0pTQ2xhc3NEZWZpbml0aW9uRW1w
dHkKIF9yZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkKLV9XVEZMb2cKLV9XVEZMb2dWZXJib3Nl
Ci1fV1RGUmVwb3J0QXJndW1lbnRBc3NlcnRpb25GYWlsdXJlCi1fV1RGUmVwb3J0QXNzZXJ0aW9u
RmFpbHVyZQotX1dURlJlcG9ydEFzc2VydGlvbkZhaWx1cmVXaXRoTWVzc2FnZQotX1dURlJlcG9y
dEVycm9yCi1fV1RGUmVwb3J0RmF0YWxFcnJvcgpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9B
UEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAzNDQzOCkKKysrIEphdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzNyw3ICs0MzcsNyBAQCBKU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpjYWNo
ZWRWCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KIEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFz
ZT46OnN0YXRpY1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgQVNTRVJUKHNs
b3Quc2xvdEJhc2UoKS0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q6OmluZm8pKTsKKyAgICBB
U1NFUlQoc2xvdC5zbG90QmFzZSgpLT5pc09iamVjdCgmSlNDYWxsYmFja09iamVjdDo6aW5mbykp
OwogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNr
T2JqZWN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICAKICAgICBKU09iamVjdFJlZiB0aGlzUmVm
ID0gdG9SZWYodGhpc09iaik7CkBAIC00NTgsNyArNDU4LDcgQEAgSlNWYWx1ZSogSlNDYWxsYmFj
a09iamVjdDxCYXNlPjo6c3RhdGljVgogdGVtcGxhdGUgPGNsYXNzIEJhc2U+CiBKU1ZhbHVlKiBK
U0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewotICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCktPmluaGVyaXRzKCZKU0NhbGxiYWNr
T2JqZWN0OjppbmZvKSk7CisgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS0+aXNPYmplY3QoJkpT
Q2FsbGJhY2tPYmplY3Q6OmluZm8pKTsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgCiAg
ICAgLy8gQ2hlY2sgZm9yIGNhY2hlZCBvciBvdmVycmlkZSBwcm9wZXJ0eS4KQEAgLTQ4NCw3ICs0
ODQsNyBAQCBKU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGCiB0ZW1wbGF0
ZSA8Y2xhc3MgQmFzZT4KIEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNhbGxiYWNr
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS0+
aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q6OmluZm8pKTsKKyAgICBBU1NFUlQoc2xvdC5zbG90
QmFzZSgpLT5pc09iamVjdCgmSlNDYWxsYmFja09iamVjdDo6aW5mbykpOwogICAgIEpTQ2FsbGJh
Y2tPYmplY3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oc2xvdC5z
bG90QmFzZSgpKTsKICAgICAKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYodGhpc09i
aik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgSmF2
YVNjcmlwdENvcmUvVk0vQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1
NCwxMCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMpIGNvCiAgICAgICAg
IGlmIChtYWNoaW5lKCkuaXNPcGNvZGUoaXQtPnUub3Bjb2RlKSkKICAgICAgICAgICAgICsraW5z
dHJ1Y3Rpb25Db3VudDsKIAotICAgIHByaW50ZigiJWx1IGluc3RydWN0aW9uczsgJWx1IGJ5dGVz
IGF0ICVwOyAlZCBsb2NhbHMgKCVkIHBhcmFtZXRlcnMpOyAlZCB0ZW1wb3Jhcmllc1xuXG4iLCBp
bnN0cnVjdGlvbkNvdW50LCBpbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9u
KSwgdGhpcywgbnVtTG9jYWxzLCBudW1QYXJhbWV0ZXJzLCBudW1UZW1wb3Jhcmllcyk7CisgICAg
cHJpbnRmKCIlbHUgaW5zdHJ1Y3Rpb25zOyAlbHUgYnl0ZXMgYXQgJXA7ICVkIGxvY2FscyAoJWQg
cGFyYW1ldGVycyk7ICVkIHRlbXBvcmFyaWVzXG5cbiIsCisgICAgICAgIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KGluc3RydWN0aW9uQ291bnQpLAorICAgICAgICBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nPihpbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSksCisg
ICAgICAgIHRoaXMsIG51bUxvY2FscywgbnVtUGFyYW1ldGVycywgbnVtVGVtcG9yYXJpZXMpOwog
ICAgIAogICAgIGZvciAoVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBi
ZWdpbjsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBkdW1wKGV4ZWMsIGJlZ2luLCBpdCk7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAw
LDcgKzEwMCw3IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpwdXQoRXhlY1N0YXRlKiwgY29uc3QKICAg
ICAvLyBwcm9wZXJ0aWVzIGFyZSBub24tc3RhbmRhcmQgZXh0ZW5zaW9ucyB0aGF0IG90aGVyIGlt
cGxlbWVudGF0aW9ucyBkbyBub3QKICAgICAvLyBleHBvc2UgaW4gdGhlIGFjdGl2YXRpb24gb2Jq
ZWN0LgogICAgIEFTU0VSVCghX3Byb3AuaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKTsKLSAg
ICBfcHJvcC5wdXQocHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgdHJ1ZSk7CisgICAgX3Byb3AucHV0
VW5sZXNzUmVhZE9ubHkocHJvcGVydHlOYW1lLCB2YWx1ZSk7CiB9CiAKIC8vIEZJWE1FOiBNYWtl
IHRoaXMgZnVuY3Rpb24gaG9ub3IgUmVhZE9ubHkgKGNvbnN0KSBhbmQgRG9udEVudW0KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUva2pzL2FycmF5X2luc3RhbmNlLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDksMTkgKzIwOSwxNyBAQCB2b2lkIEFycmF5SW5zdGFuY2U6OnB1dChFeGVjU3RhdGUqIGV4ZWMs
CiAKIHZvaWQgQXJyYXlJbnN0YW5jZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZSogdmFsdWUpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbV9sZW5ndGg7Ci0gICAg
aWYgKGkgPj0gbGVuZ3RoKSB7Ci0gICAgICAgIGlmIChpID4gbWF4QXJyYXlJbmRleCkgeworICAg
IGlmIChVTkxJS0VMWShpID49IG1fbGVuZ3RoKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoaSA+
IG1heEFycmF5SW5kZXgpKSB7CiAgICAgICAgICAgICBwdXQoZXhlYywgSWRlbnRpZmllcjo6ZnJv
bShpKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGxl
bmd0aCA9IGkgKyAxOwotICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAgbV9sZW5n
dGggPSBpICsgMTsKICAgICB9CiAKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3Jh
Z2U7CiAKLSAgICBpZiAoaSA8IG1fdmVjdG9yTGVuZ3RoKSB7CisgICAgaWYgKExJS0VMWShpIDwg
bV92ZWN0b3JMZW5ndGgpKSB7CiAgICAgICAgIEpTVmFsdWUqJiB2YWx1ZVNsb3QgPSBzdG9yYWdl
LT5tX3ZlY3RvcltpXTsKICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArPSAh
dmFsdWVTbG90OwogICAgICAgICB2YWx1ZVNsb3QgPSB2YWx1ZTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9jb2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9j
b2xsZWN0b3IuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9jb2xs
ZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIy
Nyw3ICsyMjcsNyBAQCBzY2FuOgogICAgICAgICB0YXJnZXRCbG9jayA9IChCbG9jayopaGVhcC5i
bG9ja3NbaV07CiAgICAgICAgIHRhcmdldEJsb2NrVXNlZENlbGxzID0gdGFyZ2V0QmxvY2stPnVz
ZWRDZWxsczsKICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrVXNlZENlbGxzIDw9IEhlYXBDb25z
dGFudHM8aGVhcFR5cGU+OjpjZWxsc1BlckJsb2NrKTsKLSAgICAgICAgd2hpbGUgKHRhcmdldEJs
b2NrVXNlZENlbGxzID09IEhlYXBDb25zdGFudHM8aGVhcFR5cGU+OjpjZWxsc1BlckJsb2NrKSB7
CisgICAgICAgIHdoaWxlIChVTkxJS0VMWSh0YXJnZXRCbG9ja1VzZWRDZWxscyA9PSBIZWFwQ29u
c3RhbnRzPGhlYXBUeXBlPjo6Y2VsbHNQZXJCbG9jaykpIHsKICAgICAgICAgICAgIGlmICgrK2kg
PT0gdXNlZEJsb2NrcykKICAgICAgICAgICAgICAgICBnb3RvIGNvbGxlY3Q7CiAgICAgICAgICAg
ICB0YXJnZXRCbG9jayA9IChCbG9jayopaGVhcC5ibG9ja3NbaV07CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvaW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9p
bnRlcm5hbC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2ludGVy
bmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMzMgKzU5LDg0IEBAIEpTVmFsdWUqIFN0cmlu
Z0ltcDo6dG9QcmltaXRpdmUoRXhlY1N0YXQKIGJvb2wgU3RyaW5nSW1wOjpnZXRQcmltaXRpdmVO
dW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1ZSkKIHsKICAg
ICB2YWx1ZSA9IHRoaXM7Ci0gICAgbnVtYmVyID0gdmFsLnRvRG91YmxlKCk7CisgICAgbnVtYmVy
ID0gbV92YWx1ZS50b0RvdWJsZSgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTdHJp
bmdJbXA6OnRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QKK2Jvb2wgU3RyaW5nSW1wOjp0b0Jv
b2xlYW4oRXhlY1N0YXRlKikgY29uc3QKIHsKLSAgcmV0dXJuICh2YWwuc2l6ZSgpID4gMCk7Cisg
ICAgcmV0dXJuICFtX3ZhbHVlLmlzRW1wdHkoKTsKIH0KIAotZG91YmxlIFN0cmluZ0ltcDo6dG9O
dW1iZXIoRXhlY1N0YXRlICopIGNvbnN0Citkb3VibGUgU3RyaW5nSW1wOjp0b051bWJlcihFeGVj
U3RhdGUqKSBjb25zdAogewotICByZXR1cm4gdmFsLnRvRG91YmxlKCk7CisgICAgcmV0dXJuIG1f
dmFsdWUudG9Eb3VibGUoKTsKIH0KIAotVVN0cmluZyBTdHJpbmdJbXA6OnRvU3RyaW5nKEV4ZWNT
dGF0ZSAqKSBjb25zdAorVVN0cmluZyBTdHJpbmdJbXA6OnRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNv
bnN0CiB7Ci0gIHJldHVybiB2YWw7CisgICAgcmV0dXJuIG1fdmFsdWU7CiB9CiAKLUpTT2JqZWN0
KiBTdHJpbmdJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK2lubGluZSBTdHJp
bmdJbnN0YW5jZSogU3RyaW5nSW5zdGFuY2U6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cmlu
Z0ltcCogc3RyaW5nKQogewotICAgIHJldHVybiBuZXcgU3RyaW5nSW5zdGFuY2UoZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKSwgY29uc3RfY2FzdDxTdHJpbmdJ
bXAqPih0aGlzKSk7CisgICAgcmV0dXJuIG5ldyBTdHJpbmdJbnN0YW5jZShleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpLCBzdHJpbmcpOworfQorCitKU09iamVj
dCogU3RyaW5nSW1wOjp0b09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFN0cmluZ0luc3RhbmNlOjpjcmVhdGUoZXhlYywgY29uc3RfY2FzdDxTdHJpbmdJbXAqPih0
aGlzKSk7CiB9CiAKIEpTT2JqZWN0KiBTdHJpbmdJbXA6OnRvVGhpc09iamVjdChFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldyBTdHJpbmdJbnN0YW5jZShleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpLCBjb25zdF9jYXN0PFN0cmluZ0lt
cCo+KHRoaXMpKTsKKyAgICByZXR1cm4gU3RyaW5nSW5zdGFuY2U6OmNyZWF0ZShleGVjLCBjb25z
dF9jYXN0PFN0cmluZ0ltcCo+KHRoaXMpKTsKK30KKworSlNWYWx1ZSogU3RyaW5nSW1wOjpsZW5n
dGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4o
c2xvdC5zbG90QmFzZSgpKS0+dmFsdWUoKS5zaXplKCkpOworfQorCitKU1ZhbHVlKiBTdHJpbmdJ
bXA6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRpY19jYXN0PFN0cmlu
Z0ltcCo+KHNsb3Quc2xvdEJhc2UoKSktPnZhbHVlKCkuc3Vic3RyKHNsb3QuaW5kZXgoKSwgMSkp
OworfQorCitKU1ZhbHVlKiBTdHJpbmdJbXA6OmluZGV4TnVtZXJpY1Byb3BlcnR5R2V0dGVyKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRpY19jYXN0PFN0cmluZ0ltcCo+KHNsb3Quc2xvdEJhc2Uo
KSktPnZhbHVlKCkuc3Vic3RyKGluZGV4LCAxKSk7Cit9CisKK2Jvb2wgU3RyaW5nSW1wOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICAvLyBUaGUgc2VtYW50aWNzIGhlcmUg
YXJlIHJlYWxseSBnZXRQcm9wZXJ0eVNsb3QsIG5vdCBnZXRPd25Qcm9wZXJ0eVNsb3QuCisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgSlNWYWx1ZTo6Z2V0Lgor
ICAgIGlmIChnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IFN0cmluZ0luc3Rh
bmNlOjpjcmVhdGUoZXhlYywgdGhpcyk7CisgICAgc2xvdC5zZXRCYXNlKG9iamVjdCk7CisgICAg
aWYgKG9iamVjdC0+SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICBKU1ZhbHVlKiBwcm90byA9IG9iamVjdC0+cHJvdG90eXBlKCk7CisgICAgICAgIGlmICgh
cHJvdG8tPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VW5kZWZpbmVkKCk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBvYmplY3QgPSBzdGF0
aWNfY2FzdDxKU09iamVjdCo+KHByb3RvKTsKKyAgICAgICAgaWYgKG9iamVjdC0+Z2V0T3duUHJv
cGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgU3RyaW5nSW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICAvLyBUaGUgc2VtYW50aWNzIGhlcmUgYXJlIHJlYWxseSBnZXRQcm9wZXJ0eVNsb3Qs
IG5vdCBnZXRPd25Qcm9wZXJ0eVNsb3QuCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25s
eSBiZSBjYWxsZWQgYnkgSlNWYWx1ZTo6Z2V0LgorICAgIGlmIChnZXRTdHJpbmdQcm9wZXJ0eVNs
b3QocHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IFN0cmluZ0ltcDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIElkZW50aWZpZXI6OmZyb20ocHJv
cGVydHlOYW1lKSwgc2xvdCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBOdW1iZXJJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvaW50ZXJuYWwuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
aW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5
cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjQsNDkgKzI0LDcwIEBACiAjaWZuZGVmIElOVEVSTkFMX0gKICNkZWZpbmUgSU5URVJO
QUxfSAogCi0jaW5jbHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVkZSAib2JqZWN0LmgiCi0jaW5jbHVk
ZSAicHJvdGVjdC5oIgotI2luY2x1ZGUgInNjb3BlX2NoYWluLmgiCi0jaW5jbHVkZSAidHlwZXMu
aCIKICNpbmNsdWRlICJ1c3RyaW5nLmgiCiAKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LQotI2RlZmluZSBJMThOX05PT1AocykgcwotCiBuYW1lc3BhY2UgS0pTIHsKIAotICBjbGFzcyBG
dW5jdGlvblByb3RvdHlwZTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUHJpbWl0aXZlIGltcGxzCi0gIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCiAgIGNsYXNzIFN0cmluZ0ltcCA6IHB1YmxpYyBKU0NlbGwgewogICBwdWJsaWM6Ci0g
ICAgU3RyaW5nSW1wKGNvbnN0IFVTdHJpbmcmIHYpIDogdmFsKHYpIHsgQ29sbGVjdG9yOjpyZXBv
cnRFeHRyYU1lbW9yeUNvc3Qodi5jb3N0KCkpOyB9CisgICAgU3RyaW5nSW1wKGNvbnN0IFVTdHJp
bmcmIHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHsgQ29sbGVjdG9yOjpyZXBvcnRFeHRyYU1lbW9y
eUNvc3QodmFsdWUuY29zdCgpKTsgfQogICAgIGVudW0gSGFzT3RoZXJPd25lclR5cGUgeyBIYXNP
dGhlck93bmVyIH07Ci0gICAgU3RyaW5nSW1wKGNvbnN0IFVTdHJpbmcmIHZhbHVlLCBIYXNPdGhl
ck93bmVyVHlwZSkgOiB2YWwodmFsdWUpIHsgfQotICAgIGNvbnN0IFVTdHJpbmcmIHZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gdmFsOyB9CisgICAgU3RyaW5nSW1wKGNvbnN0IFVTdHJpbmcmIHZhbHVl
LCBIYXNPdGhlck93bmVyVHlwZSkgOiBtX3ZhbHVlKHZhbHVlKSB7IH0KKworICAgIGNvbnN0IFVT
dHJpbmcmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgYm9vbCBnZXRT
dHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBib29sIGdldFN0cmluZ1Byb3BlcnR5U2xvdCh1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgIHByaXZhdGU6CiAgICAgdmly
dHVhbCBKU1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZ1R5cGU7IH0KIAogICAgIHZp
cnR1YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgSlNUeXBlIHByZWZlcnJlZCA9
IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51
bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomIHZhbHVlKTsKLSAgICB2
aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7Ci0gICAgdmlydHVh
bCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpT
T2JqZWN0ICp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CisgICAgdmlydHVhbCBkb3VibGUgdG9OdW1i
ZXIoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgdmlydHVhbCBKU09iamVjdCogdG9PYmplY3QoRXhl
Y1N0YXRlKikgY29uc3Q7CiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSop
IGNvbnN0OwogICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUqKSBj
b25zdDsKIAotICAgIFVTdHJpbmcgdmFsOworICAgIC8vIEFjdHVhbGx5IGdldFByb3BlcnR5U2xv
dCwgbm90IGdldE93blByb3BlcnR5U2xvdCAoc2VlIEpTQ2VsbCkuCisgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKwor
ICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdl
dHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7
CisgICAgc3RhdGljIEpTVmFsdWUqIGluZGV4TnVtZXJpY1Byb3BlcnR5R2V0dGVyKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKworICAgIFVTdHJpbmcgbV92YWx1
ZTsKICAgfTsKIAotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRXZhbHVhdGlvbgotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FMV0FZU19J
TkxJTkUgYm9vbCBTdHJpbmdJbXA6OmdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQor
eworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkg
eworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBsZW5ndGhHZXR0ZXIpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGlzU3RyaWN0VUludDMyOworICAgIHVuc2ln
bmVkIGkgPSBwcm9wZXJ0eU5hbWUudG9TdHJpY3RVSW50MzIoJmlzU3RyaWN0VUludDMyKTsKKyAg
ICBpZiAoaXNTdHJpY3RVSW50MzIgJiYgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3ZhbHVl
LnNpemUoKSkpIHsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBpLCBpbmRleEdl
dHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKyAgICAKK0FMV0FZU19JTkxJTkUgYm9vbCBTdHJpbmdJbXA6OmdldFN0cmluZ1Byb3BlcnR5
U2xvdCh1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBp
ZiAocHJvcGVydHlOYW1lIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdmFsdWUuc2l6ZSgpKSkg
eworICAgICAgICBzbG90LnNldEN1c3RvbU51bWVyaWModGhpcywgaW5kZXhOdW1lcmljUHJvcGVy
dHlHZXR0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CiAKIH0gLy8gbmFtZXNwYWNlCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9sb29r
dXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbG9va3VwLmgJKHJldmlzaW9u
IDM0NDM4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw3ICs4Niw4IEBAIG5hbWVzcGFjZSBLSlMgewogICBpbmxpbmUgSlNWYWx1ZSogc3RhdGlj
RnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKICAgewogICAgICAgLy8gTG9vayBmb3Ig
Y2FjaGVkIHZhbHVlIGluIGR5bmFtaWMgbWFwIG9mIHByb3BlcnRpZXMgKGluIEpTT2JqZWN0KQot
ICAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBzbG90LnNsb3RCYXNlKCk7CisgICAgICBBU1NFUlQo
c2xvdC5zbG90QmFzZSgpLT5pc09iamVjdCgpKTsKKyAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8SlNPYmplY3QqPihzbG90LnNsb3RCYXNlKCkpOwogICAgICAgSlNWYWx1ZSog
Y2FjaGVkVmFsID0gdGhpc09iai0+Z2V0RGlyZWN0KHByb3BlcnR5TmFtZSk7CiAgICAgICBpZiAo
Y2FjaGVkVmFsKQogICAgICAgICByZXR1cm4gY2FjaGVkVmFsOwpJbmRleDogSmF2YVNjcmlwdENv
cmUva2pzL29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVj
dC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSwzIEBACi0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIg
LSotCiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVu
QGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5j
b20pCkBAIC0xNjYsNyArMTY1LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhl
YywgY29ucwogICAgIH0KICAgfQogICAKLSAgX3Byb3AucHV0KHByb3BlcnR5TmFtZSwgdmFsdWUs
IDAsIHRydWUpOworICBfcHJvcC5wdXRVbmxlc3NSZWFkT25seShwcm9wZXJ0eU5hbWUsIHZhbHVl
KTsKIH0KIAogdm9pZCBKU09iamVjdDo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSkKQEAgLTIyOSw3ICsyMjgsOCBAQCBib29sIEpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUgCiAgIHJldHVybiBkZWxldGVQcm9wZXJ0eShl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKHByb3BlcnR5TmFtZSkpOwogfQogCi1zdGF0aWMgQUxXQVlT
X0lOTElORSBKU1ZhbHVlICp0cnlHZXRBbmRDYWxsUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBKU09iamVjdCAqb2JqZWN0LCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIHsK
K3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgKnRyeUdldEFuZENhbGxQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGNvbnN0IEpTT2JqZWN0ICpvYmplY3QsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSkKK3sKICAgSlNWYWx1ZSogdiA9IG9iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5
TmFtZSk7CiAgIGlmICh2LT5pc09iamVjdCgpKSB7CiAgICAgICBKU09iamVjdCogbyA9IHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4odik7CkBAIC01MDcsNyArNTA3LDcgQEAgdm9pZCBKU09iamVjdDo6
cHV0RGlyZWN0RnVuY3Rpb24oSW50ZXJuYQogICAgIHB1dERpcmVjdChmdW5jLT5mdW5jdGlvbk5h
bWUoKSwgZnVuYywgYXR0cik7IAogfQogCi12b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSAqKmxvY2F0aW9uKQorTkVWRVJfSU5M
SU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBz
bG90LCBKU1ZhbHVlICoqbG9jYXRpb24pCiB7CiAgICAgR2V0dGVyU2V0dGVySW1wICpncyA9IHN0
YXRpY19jYXN0PEdldHRlclNldHRlckltcCAqPigqbG9jYXRpb24pOwogICAgIEpTT2JqZWN0ICpn
ZXR0ZXJGdW5jID0gZ3MtPmdldEdldHRlcigpOwpAQCAtNTE5LDQ5ICs1MTksNDUgQEAgdm9pZCBK
U09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcgogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gRXJyb3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1jb25zdCBjaGFyICogY29uc3QgZXJyb3JOYW1lc0FycltdID0gewotICBJMThOX05P
T1AoIkVycm9yIiksIC8vIEdlbmVyYWxFcnJvcgotICBJMThOX05PT1AoIkV2YWx1YXRpb24gZXJy
b3IiKSwgLy8gRXZhbEVycm9yCi0gIEkxOE5fTk9PUCgiUmFuZ2UgZXJyb3IiKSwgLy8gUmFuZ2VF
cnJvcgotICBJMThOX05PT1AoIlJlZmVyZW5jZSBlcnJvciIpLCAvLyBSZWZlcmVuY2VFcnJvcgot
ICBJMThOX05PT1AoIlN5bnRheCBlcnJvciIpLCAvLyBTeW50YXhFcnJvcgotICBJMThOX05PT1Ao
IlR5cGUgZXJyb3IiKSwgLy8gVHlwZUVycm9yCi0gIEkxOE5fTk9PUCgiVVJJIGVycm9yIiksIC8v
IFVSSUVycm9yCi19OwotCi1jb25zdCBjaGFyICogY29uc3QgKiBjb25zdCBFcnJvcjo6ZXJyb3JO
YW1lcyA9IGVycm9yTmFtZXNBcnI7Ci0KLUpTT2JqZWN0ICpFcnJvcjo6Y3JlYXRlKEV4ZWNTdGF0
ZSAqZXhlYywgRXJyb3JUeXBlIGVycnR5cGUsIGNvbnN0IFVTdHJpbmcgJm1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVubywgaW50IHNvdXJjZUlkLCBjb25zdCBVU3Ry
aW5nICZzb3VyY2VVUkwpCitKU09iamVjdCogRXJyb3I6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEVycm9yVHlwZSBlcnJ0eXBlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlLAorICAgIGludCBsaW5l
bm8sIGludCBzb3VyY2VJZCwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMKQogewotICBKU09iamVj
dCAqY29uczsKKyAgSlNPYmplY3QqIGNvbnM7CisgIGNvbnN0IGNoYXIqIG5hbWU7CiAgIHN3aXRj
aCAoZXJydHlwZSkgewogICBjYXNlIEV2YWxFcnJvcjoKICAgICBjb25zID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5ldmFsRXJyb3JDb25zdHJ1Y3RvcigpOworICAgIG5hbWUgPSAiRXZh
bHVhdGlvbiBlcnJvciI7CiAgICAgYnJlYWs7CiAgIGNhc2UgUmFuZ2VFcnJvcjoKICAgICBjb25z
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yYW5nZUVycm9yQ29uc3RydWN0b3IoKTsK
KyAgICBuYW1lID0gIlJhbmdlIGVycm9yIjsKICAgICBicmVhazsKICAgY2FzZSBSZWZlcmVuY2VF
cnJvcjoKICAgICBjb25zID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWZlcmVuY2VF
cnJvckNvbnN0cnVjdG9yKCk7CisgICAgbmFtZSA9ICJSZWZlcmVuY2UgZXJyb3IiOwogICAgIGJy
ZWFrOwogICBjYXNlIFN5bnRheEVycm9yOgogICAgIGNvbnMgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnN5bnRheEVycm9yQ29uc3RydWN0b3IoKTsKKyAgICBuYW1lID0gIlN5bnRheCBl
cnJvciI7CiAgICAgYnJlYWs7CiAgIGNhc2UgVHlwZUVycm9yOgogICAgIGNvbnMgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnR5cGVFcnJvckNvbnN0cnVjdG9yKCk7CisgICAgbmFtZSA9
ICJUeXBlIGVycm9yIjsKICAgICBicmVhazsKICAgY2FzZSBVUklFcnJvcjoKICAgICBjb25zID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5VUklFcnJvckNvbnN0cnVjdG9yKCk7CisgICAg
bmFtZSA9ICJVUkkgZXJyb3IiOwogICAgIGJyZWFrOwogICBkZWZhdWx0OgogICAgIGNvbnMgPSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmVycm9yQ29uc3RydWN0b3IoKTsKKyAgICBuYW1l
ID0gIkVycm9yIjsKICAgICBicmVhazsKICAgfQogCiAgIExpc3QgYXJnczsKICAgaWYgKG1lc3Nh
Z2UuaXNFbXB0eSgpKQotICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGVycm9yTmFtZXNbZXJydHlw
ZV0pKTsKKyAgICBhcmdzLmFwcGVuZChqc1N0cmluZyhuYW1lKSk7CiAgIGVsc2UKICAgICBhcmdz
LmFwcGVuZChqc1N0cmluZyhtZXNzYWdlKSk7CiAgIEpTT2JqZWN0ICplcnIgPSBzdGF0aWNfY2Fz
dDxKU09iamVjdCAqPihjb25zLT5jb25zdHJ1Y3QoZXhlYyxhcmdzKSk7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL29i
amVjdC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDggQEAKIC8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAt
Ki0KIC8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKICAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICog
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDc2LDEx
ICs0NzUsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgKi8KICAgICBzdGF0aWMgSlNPYmplY3Qg
KmNyZWF0ZShFeGVjU3RhdGUgKiwgRXJyb3JUeXBlLCBjb25zdCBVU3RyaW5nICZtZXNzYWdlLCBp
bnQgbGluZU51bWJlciwgaW50IHNvdXJjZUlkLCBjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwpOwog
ICAgIHN0YXRpYyBKU09iamVjdCAqY3JlYXRlKEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0
IGNoYXIgKm1lc3NhZ2UpOwotCi0gICAgLyoqCi0gICAgICogQXJyYXkgb2YgZXJyb3IgbmFtZXMg
Y29ycmVzcG9uZGluZyB0byBFcnJvclR5cGUKLSAgICAgKi8KLSAgICBzdGF0aWMgY29uc3QgY2hh
ciAqIGNvbnN0ICogY29uc3QgZXJyb3JOYW1lczsKICAgfTsKIAogSlNPYmplY3QgKnRocm93RXJy
b3IoRXhlY1N0YXRlICosIEVycm9yVHlwZSwgY29uc3QgVVN0cmluZyAmbWVzc2FnZSwgaW50IGxp
bmVOdW1iZXIsIGludCBzb3VyY2VJZCwgY29uc3QgVVN0cmluZyAmc291cmNlVVJMKTsKQEAgLTYx
NCw3ICs2MDgsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIGlmIChKU1ZhbHVlICoqbG9jYXRpb24gPSBnZXREaXJlY3RMb2NhdGlvbihwcm9w
ZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGlmIChfcHJvcC5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
KCkgJiYgbG9jYXRpb25bMF0tPnR5cGUoKSA9PSBHZXR0ZXJTZXR0ZXJUeXBlKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoX3Byb3AuaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKSAmJiBsb2NhdGlv
blswXS0+dHlwZSgpID09IEdldHRlclNldHRlclR5cGUpCiAgICAgICAgICAgICBmaWxsR2V0dGVy
UHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
c2xvdC5zZXRWYWx1ZVNsb3QobG9jYXRpb24pOwpAQCAtNzA3LDE0ICs3MDEsNiBAQCBpbmxpbmUg
dm9pZCBKU1ZhbHVlOjpwdXQoRXhlY1N0YXRlKiBleGVjCiAgICAgYXNDZWxsKCktPnB1dChleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKIH0KIAotaW5saW5lIEpTT2JqZWN0KiBQcm9wZXJ0eVNs
b3Q6OnNsb3RCYXNlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9zbG90QmFzZSk7Ci0gICAgLy8g
SXQncyBiZSBuaWNlIHRvIGFzc2VydCB0aGF0IG1fc2xvdEJhc2UgaXMgYW4gb2JqZWN0IGhlcmUs
IGJ1dCB0aGF0J3MgYSBiaXQKLSAgICAvLyB0b28gc2xvdywgZXZlbiBmb3IgZGVidWcgYnVpbGRz
LgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KG1fc2xvdEJhc2UpOwotfQotCiB9
IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYgLy8gS0pTX09CSkVDVF9ICkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ranMvcHJvcGVydHlfbWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvcHJvcGVydHlfbWFwLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvcHJvcGVydHlfbWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIEpT
VmFsdWUqKiBQcm9wZXJ0eU1hcDo6Z2V0TG9jYXRpb24oY29uc3QKICAgICAKICAgICBVU3RyaW5n
OjpSZXAqIHJlcCA9IG5hbWUuX3VzdHJpbmcucmVwKCk7CiAgICAgCi0gICAgaWYgKCFtX3VzaW5n
VGFibGUpIHsKKyAgICBpZiAoVU5MSUtFTFkoIW1fdXNpbmdUYWJsZSkpIHsKICNpZiBVU0VfU0lO
R0xFX0VOVFJZCiAgICAgICAgIGlmIChyZXAgPT0gbV9zaW5nbGVFbnRyeUtleSkKICAgICAgICAg
ICAgIHJldHVybiAmbV91LnNpbmdsZUVudHJ5VmFsdWU7CkBAIC00ODUsNiArNDg1LDEwOSBAQCB2
b2lkIFByb3BlcnR5TWFwOjpwdXQoY29uc3QgSWRlbnRpZmllciYgCiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwogfQogCit2b2lkIFByb3BlcnR5TWFwOjpwdXRVbmxlc3NSZWFkT25seShjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIW5hbWUuaXNO
dWxsKCkpOworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworCisgICAgVVN0cmluZzo6UmVwKiByZXAgPSBuYW1lLl91c3RyaW5nLnJlcCgpOworICAgIAor
I2lmIFVTRV9TSU5HTEVfRU5UUlkKKyAgICBpZiAoVU5MSUtFTFkoIW1fdXNpbmdUYWJsZSkpIHsK
KyAgICAgICAgaWYgKCFtX3NpbmdsZUVudHJ5S2V5KSB7CisgICAgICAgICAgICByZXAtPnJlZigp
OworICAgICAgICAgICAgbV9zaW5nbGVFbnRyeUtleSA9IHJlcDsKKyAgICAgICAgICAgIG1fdS5z
aW5nbGVFbnRyeVZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICBtX3NpbmdsZUVudHJ5QXR0cmli
dXRlcyA9IDA7CisgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlcCA9PSBtX3NpbmdsZUVudHJ5S2V5ICYm
ICFVTkxJS0VMWShtX3NpbmdsZUVudHJ5QXR0cmlidXRlcyAmIFJlYWRPbmx5KSkgeworICAgICAg
ICAgICAgbV91LnNpbmdsZUVudHJ5VmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCFtX3VzaW5nVGFibGUgfHwgKG1f
dS50YWJsZS0+a2V5Q291bnQgKyBtX3UudGFibGUtPmRlbGV0ZWRTZW50aW5lbENvdW50KSAqIDIg
Pj0gbV91LnRhYmxlLT5zaXplKQorICAgICAgICBleHBhbmQoKTsKKworICAgIC8vIEZJWE1FOiBD
b25zaWRlciBhIGZhc3QgY2FzZSBmb3IgdGFibGVzIHdpdGggbm8gZGVsZXRlZCBzZW50aW5lbHMu
CisKKyAgICB1bnNpZ25lZCBpID0gcmVwLT5jb21wdXRlZEhhc2goKTsKKyAgICB1bnNpZ25lZCBr
ID0gMDsKKyAgICBib29sIGZvdW5kRGVsZXRlZEVsZW1lbnQgPSBmYWxzZTsKKyAgICB1bnNpZ25l
ZCBkZWxldGVkRWxlbWVudEluZGV4ID0gMDsgLy8gaW5pdGlhbGl6ZSB0byBtYWtlIHRoZSBjb21w
aWxlciBoYXBweQorCisjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUworICAgICsrbnVtUHJvYmVz
OworI2VuZGlmCisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4
ID0gbV91LnRhYmxlLT5lbnRyeUluZGljaWVzW2kgJiBtX3UudGFibGUtPnNpemVNYXNrXTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKGVudHJ5SW5kZXggPT0gZW1wdHlFbnRyeUluZGV4KSkKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChMSUtFTFkobV91LnRhYmxlLT5lbnRyaWVzKClb
ZW50cnlJbmRleCAtIDFdLmtleSA9PSByZXApKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
bV91LnRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLmF0dHJpYnV0ZXMgJiBSZWFkT25s
eSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgLy8gUHV0IGEgbmV3IHZh
bHVlIGluIGFuIGV4aXN0aW5nIGhhc2ggdGFibGUgZW50cnkuCisgICAgICAgICAgICBtX3UudGFi
bGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0udmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAg
IC8vIEF0dHJpYnV0ZXMgYXJlIGludGVudGlvbmFsbHkgbm90IHVwZGF0ZWQuCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZW50cnlJbmRleCA9PSBkZWxldGVkU2VudGlu
ZWxJbmRleCkgeworICAgICAgICAgICAgLy8gSWYgd2UgZmluZCBhIGRlbGV0ZWQtZWxlbWVudCBz
ZW50aW5lbCwgcmVtZW1iZXIgaXQgZm9yIHVzZSBsYXRlci4KKyAgICAgICAgICAgIGlmICghZm91
bmREZWxldGVkRWxlbWVudCkgeworICAgICAgICAgICAgICAgIGZvdW5kRGVsZXRlZEVsZW1lbnQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50SW5kZXggPSBpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGsgPT0gMCkgeworICAgICAgICAgICAg
ayA9IDEgfCBkb3VibGVIYXNoKHJlcC0+Y29tcHV0ZWRIYXNoKCkpOworI2lmIERVTVBfUFJPUEVS
VFlNQVBfU1RBVFMKKyAgICAgICAgICAgICsrbnVtQ29sbGlzaW9uczsKKyNlbmRpZgorICAgICAg
ICB9CisKKyAgICAgICAgaSArPSBrOworCisjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUworICAg
ICAgICArK251bVJlaGFzaGVzOworI2VuZGlmCisgICAgfQorCisgICAgLy8gRmlndXJlIG91dCB3
aGljaCBlbnRyeSB0byB1c2UuCisgICAgdW5zaWduZWQgZW50cnlJbmRleCA9IG1fdS50YWJsZS0+
a2V5Q291bnQgKyBtX3UudGFibGUtPmRlbGV0ZWRTZW50aW5lbENvdW50ICsgMjsKKyAgICBpZiAo
Zm91bmREZWxldGVkRWxlbWVudCkgeworICAgICAgICBpID0gZGVsZXRlZEVsZW1lbnRJbmRleDsK
KyAgICAgICAgLS1tX3UudGFibGUtPmRlbGV0ZWRTZW50aW5lbENvdW50OworCisgICAgICAgIC8v
IFNpbmNlIHdlJ3JlIG5vdCBtYWtpbmcgdGhlIHRhYmxlIGJpZ2dlciwgd2UgY2FuJ3QgdXNlIHRo
ZSBlbnRyeSBvbmUgcGFzdAorICAgICAgICAvLyB0aGUgZW5kIHRoYXQgd2Ugd2VyZSBwbGFubmlu
ZyBvbiB1c2luZywgc28gc2VhcmNoIGJhY2t3YXJkcyBmb3IgdGhlIGVtcHR5CisgICAgICAgIC8v
IHNsb3QgdGhhdCB3ZSBjYW4gdXNlLiBXZSBrbm93IGl0IHdpbGwgYmUgdGhlcmUgYmVjYXVzZSB3
ZSBkaWQgYXQgbGVhc3Qgb25lCisgICAgICAgIC8vIGRlbGV0aW9uIGluIHRoZSBwYXN0IHRoYXQg
bGVmdCBhbiBlbnRyeSBlbXB0eS4KKyAgICAgICAgd2hpbGUgKG1fdS50YWJsZS0+ZW50cmllcygp
Wy0tZW50cnlJbmRleCAtIDFdLmtleSkKKyAgICAgICAgICAgIDsKKyAgICB9CisKKworICAgIC8v
IENyZWF0ZSBhIG5ldyBoYXNoIHRhYmxlIGVudHJ5LgorICAgIG1fdS50YWJsZS0+ZW50cnlJbmRp
Y2llc1tpICYgbV91LnRhYmxlLT5zaXplTWFza10gPSBlbnRyeUluZGV4OworCisgICAgLy8gQ3Jl
YXRlIGEgbmV3IGhhc2ggdGFibGUgZW50cnkuCisgICAgcmVwLT5yZWYoKTsKKyAgICBtX3UudGFi
bGUtPmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0ua2V5ID0gcmVwOworICAgIG1fdS50YWJsZS0+
ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS52YWx1ZSA9IHZhbHVlOworICAgIG1fdS50YWJsZS0+
ZW50cmllcygpW2VudHJ5SW5kZXggLSAxXS5hdHRyaWJ1dGVzID0gMDsKKyAgICBtX3UudGFibGUt
PmVudHJpZXMoKVtlbnRyeUluZGV4IC0gMV0uaW5kZXggPSArK21fdS50YWJsZS0+bGFzdEluZGV4
VXNlZDsKKyAgICArK21fdS50YWJsZS0+a2V5Q291bnQ7CisKKyAgICBjaGVja0NvbnNpc3RlbmN5
KCk7Cit9CisKIHZvaWQgUHJvcGVydHlNYXA6Omluc2VydChjb25zdCBFbnRyeSYgZW50cnkpCiB7
CiAgICAgQVNTRVJUKG1fdS50YWJsZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVy
dHlfbWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5o
CShyZXZpc2lvbiAzNDQzOCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
dm9pZCBjbGVhcigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBwdXQoY29uc3QgSWRlbnRpZmll
ciYsIEpTVmFsdWUqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29sIGNoZWNrUmVhZE9ubHkgPSBm
YWxzZSk7CisgICAgICAgIHZvaWQgcHV0VW5sZXNzUmVhZE9ubHkoY29uc3QgSWRlbnRpZmllciYs
IEpTVmFsdWUqKTsKICAgICAgICAgdm9pZCByZW1vdmUoY29uc3QgSWRlbnRpZmllciYpOwogICAg
ICAgICBKU1ZhbHVlKiBnZXQoY29uc3QgSWRlbnRpZmllciYpIGNvbnN0OwogICAgICAgICBKU1Zh
bHVlKiBnZXQoY29uc3QgSWRlbnRpZmllciYsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKSBjb25zdDsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5jcHAJKHJldmlzaW9uIDM0NDM4KQor
KysgSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCwyMiArMzQsMTYgQEAgSlNWYWx1ZSogUHJvcGVydHlTbG90Ojp1bmRlZmluZWRHZXR0ZXIo
RQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBQcm9wZXJ0eVNsb3Q6
OnVuZ2V0dGFibGVHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci19Ci0KIEpTVmFsdWUqIFByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIENhbGxEYXRhIGRhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBzbG90
Lm1fZGF0YS5nZXR0ZXJGdW5jLT5nZXRDYWxsRGF0YShkYXRhKTsKICAgICBpZiAoY2FsbFR5cGUg
PT0gQ2FsbFR5cGVOYXRpdmUpCi0gICAgICAgIHJldHVybiBzbG90Lm1fZGF0YS5nZXR0ZXJGdW5j
LT5jYWxsQXNGdW5jdGlvbihleGVjLCBzbG90LnNsb3RCYXNlKCksIGV4ZWMtPmVtcHR5TGlzdCgp
KTsKKyAgICAgICAgcmV0dXJuIHNsb3QubV9kYXRhLmdldHRlckZ1bmMtPmNhbGxBc0Z1bmN0aW9u
KGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oc2xvdC5zbG90QmFzZSgpKSwgZXhlYy0+ZW1w
dHlMaXN0KCkpOwogICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlwZUpTKTsKICAgICBSZWdp
c3RlckZpbGVTdGFjayogc3RhY2sgPSAmZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5yZWdp
c3RlckZpbGVTdGFjaygpOwogICAgIHN0YWNrLT5wdXNoRnVuY3Rpb25SZWdpc3RlckZpbGUoKTsK
LSAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90Lm1fZGF0YS5nZXR0ZXJGdW5jLT5jYWxsQXNGdW5j
dGlvbihleGVjLCBzbG90LnNsb3RCYXNlKCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICBKU1Zh
bHVlKiByZXN1bHQgPSBzbG90Lm1fZGF0YS5nZXR0ZXJGdW5jLT5jYWxsQXNGdW5jdGlvbihleGVj
LCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHNsb3Quc2xvdEJhc2UoKSksIGV4ZWMtPmVtcHR5TGlz
dCgpKTsKICAgICBzdGFjay0+cG9wRnVuY3Rpb25SZWdpc3RlckZpbGUoKTsKICAgICByZXR1cm4g
cmVzdWx0OyAgICAKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuaAkocmV2aXNp
b24gMzQ0MzgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJCYXNlKCk7CiAg
ICAgfQogCi0gICAgZXhwbGljaXQgUHJvcGVydHlTbG90KEpTQ2VsbCogYmFzZSkKKyAgICBleHBs
aWNpdCBQcm9wZXJ0eVNsb3QoSlNWYWx1ZSogYmFzZSkKICAgICAgICAgOiBtX3Nsb3RCYXNlKGJh
c2UpCiAgICAgewogICAgIH0KQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgICAgICBtX2Rh
dGEudmFsdWVTbG90ID0gdmFsdWVTbG90OwogICAgIH0KIAotICAgIHZvaWQgc2V0U3RhdGljRW50
cnkoSlNDZWxsKiBzbG90QmFzZSwgY29uc3QgSGFzaEVudHJ5KiBzdGF0aWNFbnRyeSwgR2V0VmFs
dWVGdW5jIGdldFZhbHVlKQorICAgIHZvaWQgc2V0U3RhdGljRW50cnkoSlNWYWx1ZSogc2xvdEJh
c2UsIGNvbnN0IEhhc2hFbnRyeSogc3RhdGljRW50cnksIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CiAgICAgICAgIEFTU0VSVChzdGF0aWNF
bnRyeSk7CkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9kYXRhLnN0YXRpY0Vu
dHJ5ID0gc3RhdGljRW50cnk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDdXN0b20oSlNDZWxsKiBz
bG90QmFzZSwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQorICAgIHZvaWQgc2V0Q3VzdG9tKEpTVmFs
dWUqIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCiAgICAgewogICAgICAgICBBU1NF
UlQoc2xvdEJhc2UpOwogICAgICAgICBBU1NFUlQoZ2V0VmFsdWUpOwpAQCAtMTAwLDcgKzEwMCw3
IEBAIHB1YmxpYzoKICAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNlOwogICAgIH0KIAotICAg
IHZvaWQgc2V0Q3VzdG9tSW5kZXgoSlNDZWxsKiBzbG90QmFzZSwgdW5zaWduZWQgaW5kZXgsIEdl
dFZhbHVlRnVuYyBnZXRWYWx1ZSkKKyAgICB2b2lkIHNldEN1c3RvbUluZGV4KEpTVmFsdWUqIHNs
b3RCYXNlLCB1bnNpZ25lZCBpbmRleCwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKICAgICAgICAgQVNTRVJUKGdldFZhbHVlKTsKQEAgLTEw
OSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGF0YS5pbmRleCA9IGluZGV4OwogICAg
IH0KICAgICAKLSAgICB2b2lkIHNldEN1c3RvbU51bWVyaWMoSlNDZWxsKiBzbG90QmFzZSwgR2V0
VmFsdWVOdW1lcmljRnVuYyBnZXRWYWx1ZSkKKyAgICB2b2lkIHNldEN1c3RvbU51bWVyaWMoSlNW
YWx1ZSogc2xvdEJhc2UsIEdldFZhbHVlTnVtZXJpY0Z1bmMgZ2V0VmFsdWUpCiAgICAgewogICAg
ICAgICBBU1NFUlQoc2xvdEJhc2UpOwogICAgICAgICBBU1NFUlQoZ2V0VmFsdWUpOwpAQCAtMTMx
LDkgKzEzMSw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9nZXRWYWx1ZSA9IHVuZGVmaW5lZEdldHRl
cjsKICAgICB9CiAKLSAgICBKU09iamVjdCogc2xvdEJhc2UoKSBjb25zdDsKKyAgICBKU1ZhbHVl
KiBzbG90QmFzZSgpIGNvbnN0IHsgQVNTRVJUKG1fc2xvdEJhc2UpOyByZXR1cm4gbV9zbG90QmFz
ZTsgfQogCi0gICAgdm9pZCBzZXRCYXNlKEpTQ2VsbCogYmFzZSkKKyAgICB2b2lkIHNldEJhc2Uo
SlNWYWx1ZSogYmFzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3Nsb3RCYXNlKTsKICAgICAg
ICAgQVNTRVJUKGJhc2UpOwpAQCAtMTUyLDEyICsxNTIsMTEgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIHN0YXRpYyBKU1ZhbHVlKiB1bmRlZmluZWRHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiB1
bmdldHRhYmxlR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwogICAgIAogICAgIEdl
dFZhbHVlRnVuYyBtX2dldFZhbHVlOwogCi0gICAgSlNDZWxsKiBtX3Nsb3RCYXNlOworICAgIEpT
VmFsdWUqIG1fc2xvdEJhc2U7CiAgICAgdW5pb24gewogICAgICAgICBKU09iamVjdCogZ2V0dGVy
RnVuYzsKICAgICAgICAgSlNWYWx1ZSoqIHZhbHVlU2xvdDsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9zdHJpbmdfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
c3RyaW5nX29iamVjdC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L3N0cmluZ19vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw0NyArNTgsMTcgQEAgU3Ry
aW5nSW5zdGFuY2U6OlN0cmluZ0luc3RhbmNlKEpTT2JqZWN0IAogICBzZXRJbnRlcm5hbFZhbHVl
KGpzU3RyaW5nKHN0cmluZykpOwogfQogCi1KU1ZhbHVlICpTdHJpbmdJbnN0YW5jZTo6bGVuZ3Ro
R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qg
JnNsb3QpCi17Ci0gICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNl
Kj4oc2xvdC5zbG90QmFzZSgpKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpLnNpemUoKSk7Ci19
Ci0KLUpTVmFsdWUqIFN0cmluZ0luc3RhbmNlOjppbmRleEdldHRlcihFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiBq
c1N0cmluZyhzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+KHNsb3Quc2xvdEJhc2UoKSktPmlu
dGVybmFsVmFsdWUoKS0+dmFsdWUoKS5zdWJzdHIoc2xvdC5pbmRleCgpLCAxKSk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlKiBzdHJpbmdJbnN0YW5jZU51bWVyaWNQcm9wZXJ0eUdldHRlcihFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJl
dHVybiBqc1N0cmluZyhzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+KHNsb3Quc2xvdEJhc2Uo
KSktPmludGVybmFsVmFsdWUoKS0+dmFsdWUoKS5zdWJzdHIoaW5kZXgsIDEpKTsKLX0KLQogYm9v
bCBTdHJpbmdJbnN0YW5jZTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGxlbmd0aEdldHRlcik7CisgICAgaWYgKGludGVybmFs
VmFsdWUoKS0+Z2V0U3RyaW5nUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgaXNTdHJpY3RVSW50MzI7
Ci0gICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b1N0cmljdFVJbnQzMigmaXNTdHJpY3RV
SW50MzIpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGludGVybmFsVmFsdWUoKS0+dmFsdWUoKS5z
aXplKCk7Ci0gICAgaWYgKGlzU3RyaWN0VUludDMyICYmIGkgPCBsZW5ndGgpIHsKLSAgICAgICAg
c2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBpLCBpbmRleEdldHRlcik7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICAKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogICAgIAogYm9vbCBTdHJpbmdJbnN0
YW5jZTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW50
ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpLnNpemUoKTsKLSAgICBpZiAocHJvcGVydHlOYW1lIDwgbGVu
Z3RoKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tTnVtZXJpYyh0aGlzLCBzdHJpbmdJbnN0YW5j
ZU51bWVyaWNQcm9wZXJ0eUdldHRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICAKKyAgICBpZiAoaW50ZXJuYWxWYWx1ZSgpLT5nZXRTdHJpbmdQcm9wZXJ0eVNsb3QocHJvcGVy
dHlOYW1lLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7ICAgIAogICAgIHJldHVybiBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIElkZW50aWZpZXI6OmZyb20ocHJvcGVydHlO
YW1lKSwgc2xvdCk7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAkocmV2
aXNpb24gMzQ0MzgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQog
LyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDI3ICszMSwyNSBAQCBuYW1lc3BhY2UgS0pTIHsKIAog
ICBjbGFzcyBTdHJpbmdJbnN0YW5jZSA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewogICBwdWJs
aWM6Ci0gICAgU3RyaW5nSW5zdGFuY2UoSlNPYmplY3QgKnByb3RvKTsKLSAgICBTdHJpbmdJbnN0
YW5jZShKU09iamVjdCAqcHJvdG8sIFN0cmluZ0ltcCopOwotICAgIFN0cmluZ0luc3RhbmNlKEpT
T2JqZWN0ICpwcm90bywgY29uc3QgVVN0cmluZyYpOworICAgIFN0cmluZ0luc3RhbmNlKEpTT2Jq
ZWN0KiBwcm90b3R5cGUpOworICAgIFN0cmluZ0luc3RhbmNlKEpTT2JqZWN0KiBwcm90b3R5cGUs
IGNvbnN0IFVTdHJpbmcmKTsKKworICAgIHN0YXRpYyBTdHJpbmdJbnN0YW5jZSogY3JlYXRlKEV4
ZWNTdGF0ZSosIFN0cmluZ0ltcCopOwogCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOwotICAg
IHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CiAgICAgdmlydHVhbCB2
b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKIAot
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQorICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAogICAg
IFN0cmluZ0ltcCogaW50ZXJuYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0
cmluZ0ltcCo+KEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZSgpKTt9CiAKLSAgcHJpdmF0
ZToKLSAgICBib29sIGlubGluZUdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCwgUHJvcGVydHlTbG90Jik7Ci0KLSAgICBzdGF0aWMgSlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBz
dGF0aWMgSlNWYWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IGNvbnN0IFByb3BlcnR5U2xvdCYpOworICBwcm90ZWN0ZWQ6CisgICAgU3RyaW5nSW5zdGFuY2Uo
SlNPYmplY3QqIHByb3RvdHlwZSwgU3RyaW5nSW1wKik7CiAgIH07CiAKICAgLy8gV2ViQ29yZSB1
c2VzIHRoaXMgdG8gbWFrZSBzdHlsZS5maWx0ZXIgdW5kZXRlY3RhYmxlCkBAIC0xNDMsMTAgKzE0
MSw5IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBTdHJpbmdPYmplY3RGdW5jSW1wIDogcHVi
bGljIEludGVybmFsRnVuY3Rpb25JbXAgewogICBwdWJsaWM6CiAgICAgU3RyaW5nT2JqZWN0RnVu
Y0ltcChFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGNvbnN0IElkZW50aWZpZXImKTsK
LSAgICB2aXJ0dWFsIEpTVmFsdWUgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNP
YmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOworICAgIHZpcnR1YWwgSlNWYWx1ZSog
Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3Qm
IGFyZ3MpOwogICB9OwogCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKLQpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL3ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Zh
bHVlLmgJKHJldmlzaW9uIDM0NDM4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL3ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE0MiwxMSArMTQyLDEyIEBAIHBy
aXZhdGU6CiAKIGNsYXNzIEpTQ2VsbCA6IHB1YmxpYyBKU1ZhbHVlIHsKICAgICBmcmllbmQgY2xh
c3MgQ29sbGVjdG9yOwotICAgIGZyaWVuZCBjbGFzcyBOdW1iZXJJbXA7Ci0gICAgZnJpZW5kIGNs
YXNzIFN0cmluZ0ltcDsKLSAgICBmcmllbmQgY2xhc3MgSlNPYmplY3Q7CiAgICAgZnJpZW5kIGNs
YXNzIEdldHRlclNldHRlckltcDsKKyAgICBmcmllbmQgY2xhc3MgSlNPYmplY3Q7CiAgICAgZnJp
ZW5kIGNsYXNzIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I7CisgICAgZnJpZW5kIGNsYXNzIEpTVmFs
dWU7CisgICAgZnJpZW5kIGNsYXNzIE51bWJlckltcDsKKyAgICBmcmllbmQgY2xhc3MgU3RyaW5n
SW1wOwogcHJpdmF0ZToKICAgICBKU0NlbGwoKTsKICAgICB2aXJ0dWFsIH5KU0NlbGwoKTsKQEAg
LTE5Myw2ICsxOTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKICAgICB2aXJ0dWFsIEpTT2JqZWN0
KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgLy8gQmFz
ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGZvciBub24tb2JqZWN0IGNsYXNzZXMgaW1wbGVtZW50cyBn
ZXRQcm9wZXJ0eVNsb3QuCiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9B
bHdheXNJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQWx3YXlzSW5s
aW5lLmgJKHJldmlzaW9uIDM0NDM4KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0Fsd2F5c0lubGlu
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwzICs0NSwxMSBAQAogI2RlZmluZSBVTkxJS0VMWSh4
KSAoeCkKICNlbmRpZgogI2VuZGlmCisKKyNpZm5kZWYgTElLRUxZCisjaWYgQ09NUElMRVIoR0ND
KQorI2RlZmluZSBMSUtFTFkoeCkgX19idWlsdGluX2V4cGVjdCgoeCksIDEpCisjZWxzZQorI2Rl
ZmluZSBMSUtFTFkoeCkgKHgpCisjZW5kaWYKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21645</attachid>
            <date>2008-06-11 14:47:08 -0700</date>
            <delta_ts>2008-06-11 15:02:47 -0700</delta_ts>
            <desc>patch for part 1 (breaking up as per Maciej&apos;s request)</desc>
            <filename>SpeedupPart1Patch.txt</filename>
            <type>text/plain</type>
            <size>17343</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0NDk4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDgtMDYtMTEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gYSBsaXR0bGUgYml0IG9mIGNsZWFudXAgYW5kIHByZXAgZm9yIHNv
bWUgdXBjb21pbmcgb3B0aW1pemF0aW9ucworCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhw
OiBSZS1zb3J0ZWQgdGhpcyBmaWxlICh3aXRoIHNvcnQgY29tbWFuZCBsaW5lIHRvb2wpLgorICAg
ICAgICAqIFZNL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChLSlM6OkNvZGVCbG9jazo6ZHVtcCk6
IEZpeGVkIHByaW50ZiB0byBhdm9pZCB3YXJuaW5ncyAtLSB0byB1c2UgJWx1IHdlCisgICAgICAg
IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0eXBlIGlzIHVuc2lnbmVkIGxvbmcuCisgICAgICAgICog
a2pzL29iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkVycm9yOjpjcmVhdGUpOiBFbGltaW5hdGVk
IHVudXNlZCBlcnJvciBuYW1lcyBhcnJheSwgYW5kIGFsc28gcHV0CisgICAgICAgIHRoZSBzdHJp
bmdzIGludG8gdGhlIGNvZGUgc2luY2UgdGhlcmUgd2FzIGFscmVhZHkgYSBzd2l0Y2ggc3RhdG1l
bnQuCisgICAgICAgIFRoaXMgYWxzbyBhdm9pZHMgaGF2aW5nIHRvIGNvbnRlbXBsYXRlIGEgaHlw
b3RoZXRpY2FsIGFjY2VzcyBwYXN0IHRoZQorICAgICAgICBlbmQgb2YgdGhlIGFycmF5LgorICAg
ICAgICAqIGtqcy9vYmplY3QuaDogR290IHJpZCBvZiBlcnJvck5hbWVzLgorICAgICAgICAqIGtq
cy9wcm9wZXJ0eV9zbG90LmNwcDogRGVsZXRlZCB1bnVzZWQgdW5nZXR0YWJsZUdldHRlci4KKyAg
ICAgICAgKiBranMvcHJvcGVydHlfc2xvdC5oOiBEaXR0by4KKyAgICAgICAgKiB3dGYvQWx3YXlz
SW5saW5lLmg6IEFkZGVkIExJS0VMWSBhbG9uZ3NpZGUgVU5MSUtFTFkuCisKIDIwMDgtMDYtMTEg
IENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lv
biAzNDQ5NykKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDc4IEBACitfSlNDaGVja1NjcmlwdFN5bnRheAorX0pTQ2xhc3NDcmVh
dGUKK19KU0NsYXNzUmVsZWFzZQorX0pTQ2xhc3NSZXRhaW4KK19KU0NvbnRleHRHZXRHbG9iYWxP
YmplY3QKK19KU0V2YWx1YXRlU2NyaXB0CitfSlNHYXJiYWdlQ29sbGVjdAorX0pTR2xvYmFsQ29u
dGV4dENyZWF0ZQorX0pTR2xvYmFsQ29udGV4dFJlbGVhc2UKK19KU0dsb2JhbENvbnRleHRSZXRh
aW4KK19KU09iamVjdENhbGxBc0NvbnN0cnVjdG9yCitfSlNPYmplY3RDYWxsQXNGdW5jdGlvbgor
X0pTT2JqZWN0Q29weVByb3BlcnR5TmFtZXMKK19KU09iamVjdERlbGV0ZVByb3BlcnR5CitfSlNP
YmplY3RHZXRQcml2YXRlCitfSlNPYmplY3RHZXRQcm9wZXJ0eQorX0pTT2JqZWN0R2V0UHJvcGVy
dHlBdEluZGV4CitfSlNPYmplY3RHZXRQcm90b3R5cGUKK19KU09iamVjdEhhc1Byb3BlcnR5Citf
SlNPYmplY3RJc0NvbnN0cnVjdG9yCitfSlNPYmplY3RJc0Z1bmN0aW9uCitfSlNPYmplY3RNYWtl
CitfSlNPYmplY3RNYWtlQ29uc3RydWN0b3IKK19KU09iamVjdE1ha2VGdW5jdGlvbgorX0pTT2Jq
ZWN0TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrCitfSlNPYmplY3RTZXRQcml2YXRlCitfSlNPYmpl
Y3RTZXRQcm9wZXJ0eQorX0pTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4CitfSlNPYmplY3RTZXRQ
cm90b3R5cGUKK19KU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yQWRkTmFtZQorX0pTUHJvcGVydHlO
YW1lQXJyYXlHZXRDb3VudAorX0pTUHJvcGVydHlOYW1lQXJyYXlHZXROYW1lQXRJbmRleAorX0pT
UHJvcGVydHlOYW1lQXJyYXlSZWxlYXNlCitfSlNQcm9wZXJ0eU5hbWVBcnJheVJldGFpbgorX0pT
U3RyaW5nQ29weUNGU3RyaW5nCitfSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcKK19KU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzCitfSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcKK19K
U1N0cmluZ0dldENoYXJhY3RlcnNQdHIKK19KU1N0cmluZ0dldExlbmd0aAorX0pTU3RyaW5nR2V0
TWF4aW11bVVURjhDU3RyaW5nU2l6ZQorX0pTU3RyaW5nR2V0VVRGOENTdHJpbmcKK19KU1N0cmlu
Z0lzRXF1YWwKK19KU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nCitfSlNTdHJpbmdSZWxlYXNl
CitfSlNTdHJpbmdSZXRhaW4KK19KU1ZhbHVlR2V0VHlwZQorX0pTVmFsdWVJc0Jvb2xlYW4KK19K
U1ZhbHVlSXNFcXVhbAorX0pTVmFsdWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3RvcgorX0pTVmFsdWVJ
c051bGwKK19KU1ZhbHVlSXNOdW1iZXIKK19KU1ZhbHVlSXNPYmplY3QKK19KU1ZhbHVlSXNPYmpl
Y3RPZkNsYXNzCitfSlNWYWx1ZUlzU3RyaWN0RXF1YWwKK19KU1ZhbHVlSXNTdHJpbmcKK19KU1Zh
bHVlSXNVbmRlZmluZWQKK19KU1ZhbHVlTWFrZUJvb2xlYW4KK19KU1ZhbHVlTWFrZU51bGwKK19K
U1ZhbHVlTWFrZU51bWJlcgorX0pTVmFsdWVNYWtlU3RyaW5nCitfSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQKK19KU1ZhbHVlUHJvdGVjdAorX0pTVmFsdWVUb0Jvb2xlYW4KK19KU1ZhbHVlVG9OdW1iZXIK
K19KU1ZhbHVlVG9PYmplY3QKK19KU1ZhbHVlVG9TdHJpbmdDb3B5CitfSlNWYWx1ZVVucHJvdGVj
dAorX1dURkxvZworX1dURkxvZ1ZlcmJvc2UKK19XVEZSZXBvcnRBcmd1bWVudEFzc2VydGlvbkZh
aWx1cmUKK19XVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlCitfV1RGUmVwb3J0QXNzZXJ0aW9uRmFp
bHVyZVdpdGhNZXNzYWdlCitfV1RGUmVwb3J0RXJyb3IKK19XVEZSZXBvcnRGYXRhbEVycm9yCiBf
X1oxMmpzUmVnRXhwRnJlZVA4SlNSZWdFeHAKIF9fWjE1anNSZWdFeHBDb21waWxlUEt0aTI0SlNS
ZWdFeHBJZ25vcmVDYXNlT3B0aW9uMjNKU1JlZ0V4cE11bHRpbGluZU9wdGlvblBqUFBLYwogX19a
MTVqc1JlZ0V4cEV4ZWN1dGVQSzhKU1JlZ0V4cFBLdGlpUGlpCkBAIC0yOSw4ICsxMDQsOCBAQCBf
X1pOM0tKUzEyUHJvcGVydHlTbG90MTV1bmRlZmluZWRHZXR0ZXJFCiBfX1pOM0tKUzEyUmVnaXN0
ZXJGaWxlMTRhZGRHbG9iYWxTbG90c0VtCiBfX1pOM0tKUzEzQXJyYXlJbnN0YW5jZTRpbmZvRQog
X19aTjNLSlMxM0NvZGVHZW5lcmF0b3IyMXNldER1bXBzR2VuZXJhdGVkQ29kZUViCi1fX1pOM0tK
UzEzanNPd25lZFN0cmluZ0VSS05TXzdVU3RyaW5nRQogX19aTjNLSlMxM1N0YXRlbWVudE5vZGU2
c2V0TG9jRWlpCitfX1pOM0tKUzEzanNPd25lZFN0cmluZ0VSS05TXzdVU3RyaW5nRQogX19aTjNL
SlMxNEpTR2xvYmFsT2JqZWN0MTBnbG9iYWxFeGVjRXYKIF9fWk4zS0pTMTRKU0dsb2JhbE9iamVj
dDEyZGVmaW5lR2V0dGVyRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU184SlNP
YmplY3RFCiBfX1pOM0tKUzE0SlNHbG9iYWxPYmplY3QxMmRlZmluZVNldHRlckVQTlNfOUV4ZWNT
dGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfOEpTT2JqZWN0RQpAQCAtNDQsOCArMTE5LDggQEAg
X19aTjNLSlMxNEpTR2xvYmFsT2JqZWN0NXJlc2V0RVBOU183SlNWYQogX19aTjNLSlMxNEpTR2xv
YmFsT2JqZWN0RDJFdgogX19aTjNLSlMxNFN0cmluZ0luc3RhbmNlMTRkZWxldGVQcm9wZXJ0eUVQ
TlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4zS0pTMTRTdHJpbmdJbnN0YW5j
ZTE2Z2V0UHJvcGVydHlOYW1lc0VQTlNfOUV4ZWNTdGF0ZUVSTlNfMTdQcm9wZXJ0eU5hbWVBcnJh
eUUKLV9fWk4zS0pTMTRTdHJpbmdJbnN0YW5jZTE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhl
Y1N0YXRlRWpSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2UxOGdl
dE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQ
cm9wZXJ0eVNsb3RFCitfX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2UxOGdldE93blByb3BlcnR5U2xv
dEVQTlNfOUV4ZWNTdGF0ZUVqUk5TXzEyUHJvcGVydHlTbG90RQogX19aTjNLSlMxNFN0cmluZ0lu
c3RhbmNlM3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVF
CiBfX1pOM0tKUzE0U3RyaW5nSW5zdGFuY2U0aW5mb0UKIF9fWk4zS0pTMTRTdHJpbmdJbnN0YW5j
ZUMxRVBOU184SlNPYmplY3RFUktOU183VVN0cmluZ0UKQEAgLTU2LDIzICsxMzEsMjMgQEAgX19a
TjNLSlMxNkpTVmFyaWFibGVPYmplY3QxNmdldFByb3BlcnR5TgogX19aTjNLSlMxNlBhcnNlclJl
ZkNvdW50ZWQzcmVmRXYKIF9fWk4zS0pTMTZQYXJzZXJSZWZDb3VudGVkNWRlcmVmRXYKIF9fWk4z
S0pTMTdQcm9wZXJ0eU5hbWVBcnJheTNhZGRFUE5TXzdVU3RyaW5nM1JlcEUKLV9fWk4zS0pTMTdQ
cm90b3R5cGVGdW5jdGlvbkMxRVBOU185RXhlY1N0YXRlRWlSS05TXzEwSWRlbnRpZmllckVQRlBO
U183SlNWYWx1ZUVTMl9QTlNfOEpTT2JqZWN0RVJLTlNfNExpc3RFRQogX19aTjNLSlMxN1Byb3Rv
dHlwZUZ1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFUE5TXzE3RnVuY3Rpb25Qcm90b3R5cGVFaVJL
TlNfMTBJZGVudGlmaWVyRVBGUE5TXzdKU1ZhbHVlRVMyX1BOU184SlNPYmplY3RFUktOU180TGlz
dEVFCitfX1pOM0tKUzE3UHJvdG90eXBlRnVuY3Rpb25DMUVQTlNfOUV4ZWNTdGF0ZUVpUktOU18x
MElkZW50aWZpZXJFUEZQTlNfN0pTVmFsdWVFUzJfUE5TXzhKU09iamVjdEVSS05TXzRMaXN0RUUK
IF9fWk4zS0pTMTdSZWdpc3RlckZpbGVTdGFjazIwYWxsb2NhdGVSZWdpc3RlckZpbGVFbVBTMF8K
LV9fWk4zS0pTMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zS0pTMTlJbnRlcm5hbEZ1bmN0
aW9uSW1wMTFnZXRDYWxsRGF0YUVSTlNfOENhbGxEYXRhRQogX19aTjNLSlMxOUludGVybmFsRnVu
Y3Rpb25JbXA0aW5mb0UKIF9fWk4zS0pTMTlJbnRlcm5hbEZ1bmN0aW9uSW1wQzJFUE5TXzE3RnVu
Y3Rpb25Qcm90b3R5cGVFUktOU18xMElkZW50aWZpZXJFCitfX1pOM0tKUzE5aW5pdGlhbGl6ZVRo
cmVhZGluZ0V2CiBfX1pOM0tKUzIzb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmdFUE5TXzlFeGVjU3Rh
dGVFUE5TXzhKU09iamVjdEVSS05TXzRMaXN0RQogX19aTjNLSlM0TGlzdDE1ZXhwYW5kQW5kQXBw
ZW5kRVBOU183SlNWYWx1ZUUKIF9fWk4zS0pTNExpc3Q3bWFya1NldEV2CiBfX1pOM0tKUzVlcXVh
bEVQS05TXzdVU3RyaW5nM1JlcEVTM18KIF9fWk4zS0pTNkpTQ2VsbDExZ2V0Q2FsbERhdGFFUk5T
XzhDYWxsRGF0YUUKIF9fWk4zS0pTNkpTQ2VsbDE2Z2V0Q29uc3RydWN0RGF0YUVSTlNfMTNDb25z
dHJ1Y3REYXRhRQotX19aTjNLSlM2SlNDZWxsMThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVj
U3RhdGVFalJOU18xMlByb3BlcnR5U2xvdEUKIF9fWk4zS0pTNkpTQ2VsbDE4Z2V0T3duUHJvcGVy
dHlTbG90RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xMlByb3BlcnR5U2xv
dEUKLV9fWk4zS0pTNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFalBOU183SlNWYWx1ZUUKK19f
Wk4zS0pTNkpTQ2VsbDE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRWpSTlNfMTJQ
cm9wZXJ0eVNsb3RFCiBfX1pOM0tKUzZKU0NlbGwzcHV0RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJ
ZGVudGlmaWVyRVBOU183SlNWYWx1ZUUKK19fWk4zS0pTNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3Rh
dGVFalBOU183SlNWYWx1ZUUKIF9fWk4zS0pTNkpTQ2VsbDlnZXRPYmplY3RFdgogX19aTjNLSlM2
SlNDZWxsbndFbQogX19aTjNLSlM2SlNMb2NrMTJEcm9wQWxsTG9ja3NDMUV2CkBAIC04MywyMSAr
MTU4LDIxIEBAIF9fWk4zS0pTNkpTTG9jazZ1bmxvY2tFdgogX19aTjNLSlM2SlNMb2NrOWxvY2tD
b3VudEV2CiBfX1pOM0tKUzZQYXJzZXI1cGFyc2VFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmlu
Z0VpTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTRTb3VyY2VQcm92aWRlckVFRVBpU0FfUFMzXwogX19a
TjNLSlM2c3RydG9kRVBLY1BQYwotX19aTjNLSlM3Q1N0cmluZ2FTRVJLUzBfCiBfX1pOM0tKUzdD
U3RyaW5nRDFFdgorX19aTjNLSlM3Q1N0cmluZ2FTRVJLUzBfCiBfX1pOM0tKUzdNYWNoaW5lMTNk
dW1wQ2FsbEZyYW1lRVBLTlNfOUNvZGVCbG9ja0VQTlNfMTRTY29wZUNoYWluTm9kZUVQTlNfMTJS
ZWdpc3RlckZpbGVFUEtOU184UmVnaXN0ZXJFCi1fX1pOM0tKUzdQcm9maWxlN2ZvckVhY2hFUEZ2
UE5TXzExUHJvZmlsZU5vZGVFRQogX19aTjNLSlM3UHJvZmlsZTEwcmVzdG9yZUFsbEV2CitfX1pO
M0tKUzdQcm9maWxlN2ZvckVhY2hFUEZ2UE5TXzExUHJvZmlsZU5vZGVFRQogX19aTjNLSlM3VVN0
cmluZzNSZXAxMWNvbXB1dGVIYXNoRVBLdGkKIF9fWk4zS0pTN1VTdHJpbmczUmVwNG51bGxFCiBf
X1pOM0tKUzdVU3RyaW5nM1JlcDdkZXN0cm95RXYKIF9fWk4zS0pTN1VTdHJpbmc0ZnJvbUVqCiBf
X1pOM0tKUzdVU3RyaW5nNmFwcGVuZEVQS2MKIF9fWk4zS0pTN1VTdHJpbmc2YXBwZW5kRVJLUzBf
Ci1fX1pOM0tKUzdVU3RyaW5nYVNFUEtjCiBfX1pOM0tKUzdVU3RyaW5nQzFFUEtjCiBfX1pOM0tK
UzdVU3RyaW5nQzFFUEt0aQogX19aTjNLSlM3VVN0cmluZ0MxRVJLUzBfUzJfCitfX1pOM0tKUzdV
U3RyaW5nYVNFUEtjCiBfX1pOM0tKUzhEZWJ1Z2dlcjZhdHRhY2hFUE5TXzE0SlNHbG9iYWxPYmpl
Y3RFCiBfX1pOM0tKUzhEZWJ1Z2dlcjZkZXRhY2hFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pO
M0tKUzhEZWJ1Z2dlckMyRXYKQEAgLTEwOSwyNiArMTg0LDI2IEBAIF9fWk4zS0pTOEpTT2JqZWN0
MTJsb29rdXBHZXR0ZXJFUE5TXzlFeGUKIF9fWk4zS0pTOEpTT2JqZWN0MTJsb29rdXBTZXR0ZXJF
UE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0tKUzhKU09iamVjdDEycmVt
b3ZlRGlyZWN0RVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNLSlM4SlNPYmplY3QxNGNhbGxBc0Z1
bmN0aW9uRVBOU185RXhlY1N0YXRlRVBTMF9SS05TXzRMaXN0RQotX19aTjNLSlM4SlNPYmplY3Qx
NGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRlRWoKIF9fWk4zS0pTOEpTT2JqZWN0MTRkZWxl
dGVQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKK19fWk4zS0pTOEpT
T2JqZWN0MTRkZWxldGVQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVqCiBfX1pOM0tKUzhKU09iamVj
dDE0aW1wbGVtZW50c0NhbGxFdgogX19aTjNLSlM4SlNPYmplY3QxNmdldFByb3BlcnR5TmFtZXNF
UE5TXzlFeGVjU3RhdGVFUk5TXzE3UHJvcGVydHlOYW1lQXJyYXlFCiBfX1pOM0tKUzhKU09iamVj
dDE3cHV0RGlyZWN0RnVuY3Rpb25FUE5TXzE5SW50ZXJuYWxGdW5jdGlvbkltcEVpCi1fX1pOM0tK
UzhKU09iamVjdDE3cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVFalBOU183SlNWYWx1
ZUVqCiBfX1pOM0tKUzhKU09iamVjdDE3cHV0V2l0aEF0dHJpYnV0ZXNFUE5TXzlFeGVjU3RhdGVF
UktOU18xMElkZW50aWZpZXJFUE5TXzdKU1ZhbHVlRWoKK19fWk4zS0pTOEpTT2JqZWN0MTdwdXRX
aXRoQXR0cmlidXRlc0VQTlNfOUV4ZWNTdGF0ZUVqUE5TXzdKU1ZhbHVlRWoKIF9fWk4zS0pTOEpT
T2JqZWN0MThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFalJOU18xMlByb3BlcnR5
U2xvdEUKIF9fWk4zS0pTOEpTT2JqZWN0MThnZXRQcmltaXRpdmVOdW1iZXJFUE5TXzlFeGVjU3Rh
dGVFUmRSUE5TXzdKU1ZhbHVlRQogX19aTjNLSlM4SlNPYmplY3QyMmZpbGxHZXR0ZXJQcm9wZXJ0
eVNsb3RFUk5TXzEyUHJvcGVydHlTbG90RVBQTlNfN0pTVmFsdWVFCi1fX1pOM0tKUzhKU09iamVj
dDNwdXRFUE5TXzlFeGVjU3RhdGVFalBOU183SlNWYWx1ZUUKIF9fWk4zS0pTOEpTT2JqZWN0M3B1
dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFCitfX1pOM0tK
UzhKU09iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVFalBOU183SlNWYWx1ZUUKIF9fWk4zS0pTOEpT
T2JqZWN0NG1hcmtFdgogX19aTjNLSlM4SlNPYmplY3Q5Y29uc3RydWN0RVBOU185RXhlY1N0YXRl
RVJLTlNfNExpc3RFCiBfX1pOM0tKUzhKU09iamVjdDljb25zdHJ1Y3RFUE5TXzlFeGVjU3RhdGVF
UktOU180TGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05TXzdVU3RyaW5nRWkKLV9fWk4zS0pTOGpz
U3RyaW5nRVBLYwotX19aTjNLSlM4anNTdHJpbmdFUktOU183VVN0cmluZ0UKIF9fWk4zS0pTOFBy
b2ZpbGVyMTNzdG9wUHJvZmlsaW5nRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCiBfX1pO
M0tKUzhQcm9maWxlcjE0c3RhcnRQcm9maWxpbmdFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmlu
Z0UKIF9fWk4zS0pTOFByb2ZpbGVyOHByb2ZpbGVyRXYKK19fWk4zS0pTOGpzU3RyaW5nRVBLYwor
X19aTjNLSlM4anNTdHJpbmdFUktOU183VVN0cmluZ0UKIF9fWk4zS0pTOUNvbGxlY3RvcjE0YWxs
b2NhdGVOdW1iZXJFbQogX19aTjNLSlM5Q29sbGVjdG9yMTVyZWNvcmRFeHRyYUNvc3RFbQogX19a
TjNLSlM5Q29sbGVjdG9yMTdnbG9iYWxPYmplY3RDb3VudEV2CkBAIC0yMDUsOCArMjgwLDggQEAg
X19aTkszS0pTN1VTdHJpbmc2aXM4Qml0RXYKIF9fWk5LM0tKUzdVU3RyaW5nNnN1YnN0ckVpaQog
X19aTkszS0pTN1VTdHJpbmc4dG9VSW50MzJFUGIKIF9fWk5LM0tKUzdVU3RyaW5nOHRvVUludDMy
RVBiYgotX19aTkszS0pTOEpTT2JqZWN0MTFoYXNQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVqCiBf
X1pOSzNLSlM4SlNPYmplY3QxMWhhc1Byb3BlcnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVu
dGlmaWVyRQorX19aTkszS0pTOEpTT2JqZWN0MTFoYXNQcm9wZXJ0eUVQTlNfOUV4ZWNTdGF0ZUVq
CiBfX1pOSzNLSlM4SlNPYmplY3QxMmRlZmF1bHRWYWx1ZUVQTlNfOUV4ZWNTdGF0ZUVOU182SlNU
eXBlRQogX19aTkszS0pTOEpTT2JqZWN0MTJ0b1RoaXNPYmplY3RFUE5TXzlFeGVjU3RhdGVFCiBf
X1pOSzNLSlM4SlNPYmplY3QxNHRvR2xvYmFsT2JqZWN0RVBOU185RXhlY1N0YXRlRQpAQCAtMjI5
LDgyICszMDQsNyBAQCBfX1pUVk4zS0pTMTZKU1ZhcmlhYmxlT2JqZWN0RQogX19aVFZOM0tKUzE5
SW50ZXJuYWxGdW5jdGlvbkltcEUKIF9fWlRWTjNLSlM4SlNPYmplY3RFCiBfX1pUVk4zS0pTOU51
bWJlckltcEUKLV9KU0NoZWNrU2NyaXB0U3ludGF4Ci1fSlNDbGFzc0NyZWF0ZQotX0pTQ2xhc3NS
ZWxlYXNlCi1fSlNDbGFzc1JldGFpbgotX0pTQ29udGV4dEdldEdsb2JhbE9iamVjdAogX2pzY29y
ZV9jb2xsZWN0b3JfaW50cm9zcGVjdGlvbgogX2pzY29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rp
b24KLV9KU0V2YWx1YXRlU2NyaXB0Ci1fSlNHYXJiYWdlQ29sbGVjdAotX0pTR2xvYmFsQ29udGV4
dENyZWF0ZQotX0pTR2xvYmFsQ29udGV4dFJlbGVhc2UKLV9KU0dsb2JhbENvbnRleHRSZXRhaW4K
LV9KU09iamVjdENhbGxBc0NvbnN0cnVjdG9yCi1fSlNPYmplY3RDYWxsQXNGdW5jdGlvbgotX0pT
T2JqZWN0Q29weVByb3BlcnR5TmFtZXMKLV9KU09iamVjdERlbGV0ZVByb3BlcnR5Ci1fSlNPYmpl
Y3RHZXRQcml2YXRlCi1fSlNPYmplY3RHZXRQcm9wZXJ0eQotX0pTT2JqZWN0R2V0UHJvcGVydHlB
dEluZGV4Ci1fSlNPYmplY3RHZXRQcm90b3R5cGUKLV9KU09iamVjdEhhc1Byb3BlcnR5Ci1fSlNP
YmplY3RJc0NvbnN0cnVjdG9yCi1fSlNPYmplY3RJc0Z1bmN0aW9uCi1fSlNPYmplY3RNYWtlCi1f
SlNPYmplY3RNYWtlQ29uc3RydWN0b3IKLV9KU09iamVjdE1ha2VGdW5jdGlvbgotX0pTT2JqZWN0
TWFrZUZ1bmN0aW9uV2l0aENhbGxiYWNrCi1fSlNPYmplY3RTZXRQcml2YXRlCi1fSlNPYmplY3RT
ZXRQcm9wZXJ0eQotX0pTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4Ci1fSlNPYmplY3RTZXRQcm90
b3R5cGUKLV9KU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yQWRkTmFtZQotX0pTUHJvcGVydHlOYW1l
QXJyYXlHZXRDb3VudAotX0pTUHJvcGVydHlOYW1lQXJyYXlHZXROYW1lQXRJbmRleAotX0pTUHJv
cGVydHlOYW1lQXJyYXlSZWxlYXNlCi1fSlNQcm9wZXJ0eU5hbWVBcnJheVJldGFpbgotX0pTU3Ry
aW5nQ29weUNGU3RyaW5nCi1fSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcKLV9KU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzCi1fSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcKLV9KU1N0
cmluZ0dldENoYXJhY3RlcnNQdHIKLV9KU1N0cmluZ0dldExlbmd0aAotX0pTU3RyaW5nR2V0TWF4
aW11bVVURjhDU3RyaW5nU2l6ZQotX0pTU3RyaW5nR2V0VVRGOENTdHJpbmcKLV9KU1N0cmluZ0lz
RXF1YWwKLV9KU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nCi1fSlNTdHJpbmdSZWxlYXNlCi1f
SlNTdHJpbmdSZXRhaW4KLV9KU1ZhbHVlR2V0VHlwZQotX0pTVmFsdWVJc0Jvb2xlYW4KLV9KU1Zh
bHVlSXNFcXVhbAotX0pTVmFsdWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3RvcgotX0pTVmFsdWVJc051
bGwKLV9KU1ZhbHVlSXNOdW1iZXIKLV9KU1ZhbHVlSXNPYmplY3QKLV9KU1ZhbHVlSXNPYmplY3RP
ZkNsYXNzCi1fSlNWYWx1ZUlzU3RyaWN0RXF1YWwKLV9KU1ZhbHVlSXNTdHJpbmcKLV9KU1ZhbHVl
SXNVbmRlZmluZWQKLV9KU1ZhbHVlTWFrZUJvb2xlYW4KLV9KU1ZhbHVlTWFrZU51bGwKLV9KU1Zh
bHVlTWFrZU51bWJlcgotX0pTVmFsdWVNYWtlU3RyaW5nCi1fSlNWYWx1ZU1ha2VVbmRlZmluZWQK
LV9KU1ZhbHVlUHJvdGVjdAotX0pTVmFsdWVUb0Jvb2xlYW4KLV9KU1ZhbHVlVG9OdW1iZXIKLV9K
U1ZhbHVlVG9PYmplY3QKLV9KU1ZhbHVlVG9TdHJpbmdDb3B5Ci1fSlNWYWx1ZVVucHJvdGVjdAog
X2tKU0NsYXNzRGVmaW5pdGlvbkVtcHR5CiBfcmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5Ci1f
V1RGTG9nCi1fV1RGTG9nVmVyYm9zZQotX1dURlJlcG9ydEFyZ3VtZW50QXNzZXJ0aW9uRmFpbHVy
ZQotX1dURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUKLV9XVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJl
V2l0aE1lc3NhZ2UKLV9XVEZSZXBvcnRFcnJvcgotX1dURlJlcG9ydEZhdGFsRXJyb3IKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvVk0vQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMzQ0OTcpCisrKyBKYXZhU2NyaXB0Q29y
ZS9WTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDEwIEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykgY28KICAgICAgICAgaWYgKG1hY2hp
bmUoKS5pc09wY29kZShpdC0+dS5vcGNvZGUpKQogICAgICAgICAgICAgKytpbnN0cnVjdGlvbkNv
dW50OwogCi0gICAgcHJpbnRmKCIlbHUgaW5zdHJ1Y3Rpb25zOyAlbHUgYnl0ZXMgYXQgJXA7ICVk
IGxvY2FscyAoJWQgcGFyYW1ldGVycyk7ICVkIHRlbXBvcmFyaWVzXG5cbiIsIGluc3RydWN0aW9u
Q291bnQsIGluc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pLCB0aGlzLCBu
dW1Mb2NhbHMsIG51bVBhcmFtZXRlcnMsIG51bVRlbXBvcmFyaWVzKTsKKyAgICBwcmludGYoIiVs
dSBpbnN0cnVjdGlvbnM7ICVsdSBieXRlcyBhdCAlcDsgJWQgbG9jYWxzICglZCBwYXJhbWV0ZXJz
KTsgJWQgdGVtcG9yYXJpZXNcblxuIiwKKyAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
Zz4oaW5zdHJ1Y3Rpb25Db3VudCksCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+
KGluc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKSwKKyAgICAgICAgdGhp
cywgbnVtTG9jYWxzLCBudW1QYXJhbWV0ZXJzLCBudW1UZW1wb3Jhcmllcyk7CiAgICAgCiAgICAg
Zm9yIChWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGJlZ2luOyBpdCAh
PSBlbmQ7ICsraXQpCiAgICAgICAgIGR1bXAoZXhlYywgYmVnaW4sIGl0KTsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2tqcy9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tq
cy9vYmplY3QuY3BwCShyZXZpc2lvbiAzNDQ5NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9vYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTksNDkgKzUxOSw0NSBAQCB2b2lkIEpTT2JqZWN0
OjpmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBFcnJvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LWNvbnN0IGNoYXIgKiBjb25zdCBlcnJvck5hbWVzQXJyW10gPSB7Ci0gIEkxOE5fTk9PUCgiRXJy
b3IiKSwgLy8gR2VuZXJhbEVycm9yCi0gIEkxOE5fTk9PUCgiRXZhbHVhdGlvbiBlcnJvciIpLCAv
LyBFdmFsRXJyb3IKLSAgSTE4Tl9OT09QKCJSYW5nZSBlcnJvciIpLCAvLyBSYW5nZUVycm9yCi0g
IEkxOE5fTk9PUCgiUmVmZXJlbmNlIGVycm9yIiksIC8vIFJlZmVyZW5jZUVycm9yCi0gIEkxOE5f
Tk9PUCgiU3ludGF4IGVycm9yIiksIC8vIFN5bnRheEVycm9yCi0gIEkxOE5fTk9PUCgiVHlwZSBl
cnJvciIpLCAvLyBUeXBlRXJyb3IKLSAgSTE4Tl9OT09QKCJVUkkgZXJyb3IiKSwgLy8gVVJJRXJy
b3IKLX07Ci0KLWNvbnN0IGNoYXIgKiBjb25zdCAqIGNvbnN0IEVycm9yOjplcnJvck5hbWVzID0g
ZXJyb3JOYW1lc0FycjsKLQotSlNPYmplY3QgKkVycm9yOjpjcmVhdGUoRXhlY1N0YXRlICpleGVj
LCBFcnJvclR5cGUgZXJydHlwZSwgY29uc3QgVVN0cmluZyAmbWVzc2FnZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbGluZW5vLCBpbnQgc291cmNlSWQsIGNvbnN0IFVTdHJpbmcgJnNv
dXJjZVVSTCkKK0pTT2JqZWN0KiBFcnJvcjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JU
eXBlIGVycnR5cGUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UsCisgICAgaW50IGxpbmVubywgaW50
IHNvdXJjZUlkLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwpCiB7Ci0gIEpTT2JqZWN0ICpjb25z
OworICBKU09iamVjdCogY29uczsKKyAgY29uc3QgY2hhciogbmFtZTsKICAgc3dpdGNoIChlcnJ0
eXBlKSB7CiAgIGNhc2UgRXZhbEVycm9yOgogICAgIGNvbnMgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmV2YWxFcnJvckNvbnN0cnVjdG9yKCk7CisgICAgbmFtZSA9ICJFdmFsdWF0aW9u
IGVycm9yIjsKICAgICBicmVhazsKICAgY2FzZSBSYW5nZUVycm9yOgogICAgIGNvbnMgPSBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJhbmdlRXJyb3JDb25zdHJ1Y3RvcigpOworICAgIG5h
bWUgPSAiUmFuZ2UgZXJyb3IiOwogICAgIGJyZWFrOwogICBjYXNlIFJlZmVyZW5jZUVycm9yOgog
ICAgIGNvbnMgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZmVyZW5jZUVycm9yQ29u
c3RydWN0b3IoKTsKKyAgICBuYW1lID0gIlJlZmVyZW5jZSBlcnJvciI7CiAgICAgYnJlYWs7CiAg
IGNhc2UgU3ludGF4RXJyb3I6CiAgICAgY29ucyA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+c3ludGF4RXJyb3JDb25zdHJ1Y3RvcigpOworICAgIG5hbWUgPSAiU3ludGF4IGVycm9yIjsK
ICAgICBicmVhazsKICAgY2FzZSBUeXBlRXJyb3I6CiAgICAgY29ucyA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+dHlwZUVycm9yQ29uc3RydWN0b3IoKTsKKyAgICBuYW1lID0gIlR5cGUg
ZXJyb3IiOwogICAgIGJyZWFrOwogICBjYXNlIFVSSUVycm9yOgogICAgIGNvbnMgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPlVSSUVycm9yQ29uc3RydWN0b3IoKTsKKyAgICBuYW1lID0g
IlVSSSBlcnJvciI7CiAgICAgYnJlYWs7CiAgIGRlZmF1bHQ6CiAgICAgY29ucyA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+ZXJyb3JDb25zdHJ1Y3RvcigpOworICAgIG5hbWUgPSAiRXJy
b3IiOwogICAgIGJyZWFrOwogICB9CiAKICAgTGlzdCBhcmdzOwogICBpZiAobWVzc2FnZS5pc0Vt
cHR5KCkpCi0gICAgYXJncy5hcHBlbmQoanNTdHJpbmcoZXJyb3JOYW1lc1tlcnJ0eXBlXSkpOwor
ICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKG5hbWUpKTsKICAgZWxzZQogICAgIGFyZ3MuYXBwZW5k
KGpzU3RyaW5nKG1lc3NhZ2UpKTsKICAgSlNPYmplY3QgKmVyciA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0ICo+KGNvbnMtPmNvbnN0cnVjdChleGVjLGFyZ3MpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0LmgJ
KHJldmlzaW9uIDM0NDk3KQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDkgKzEsOCBAQAogLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQogLyoK
LSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NzYsMTEgKzQ3NSw2
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAqLwogICAgIHN0YXRpYyBKU09iamVjdCAqY3JlYXRl
KEV4ZWNTdGF0ZSAqLCBFcnJvclR5cGUsIGNvbnN0IFVTdHJpbmcgJm1lc3NhZ2UsIGludCBsaW5l
TnVtYmVyLCBpbnQgc291cmNlSWQsIGNvbnN0IFVTdHJpbmcgJnNvdXJjZVVSTCk7CiAgICAgc3Rh
dGljIEpTT2JqZWN0ICpjcmVhdGUoRXhlY1N0YXRlICosIEVycm9yVHlwZSwgY29uc3QgY2hhciAq
bWVzc2FnZSk7Ci0KLSAgICAvKioKLSAgICAgKiBBcnJheSBvZiBlcnJvciBuYW1lcyBjb3JyZXNw
b25kaW5nIHRvIEVycm9yVHlwZQotICAgICAqLwotICAgIHN0YXRpYyBjb25zdCBjaGFyICogY29u
c3QgKiBjb25zdCBlcnJvck5hbWVzOwogICB9OwogCiBKU09iamVjdCAqdGhyb3dFcnJvcihFeGVj
U3RhdGUgKiwgRXJyb3JUeXBlLCBjb25zdCBVU3RyaW5nICZtZXNzYWdlLCBpbnQgbGluZU51bWJl
ciwgaW50IHNvdXJjZUlkLCBjb25zdCBVU3RyaW5nICZzb3VyY2VVUkwpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9wcm9wZXJ0eV9zbG90LmNwcAkocmV2aXNpb24gMzQ0OTcpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvcHJvcGVydHlfc2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEyICszNCw2
IEBAIEpTVmFsdWUqIFByb3BlcnR5U2xvdDo6dW5kZWZpbmVkR2V0dGVyKEUKICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogUHJvcGVydHlTbG90Ojp1bmdldHRhYmxlR2V0
dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKQot
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
fQotCiBKU1ZhbHVlKiBQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBD
YWxsRGF0YSBkYXRhOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5oCShyZXZpc2lv
biAzNDQ5NykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9zbG90LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Miw3ICsxNTIsNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IEpTVmFsdWUqIHVuZGVmaW5lZEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUqIHVuZ2V0dGFibGVHZXR0
ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAgICAgCiAgICAgR2V0VmFsdWVGdW5jIG1f
Z2V0VmFsdWU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvQWx3YXlzSW5saW5lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0Fsd2F5c0lubGluZS5oCShyZXZpc2lvbiAzNDQ5
NykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9BbHdheXNJbmxpbmUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsMyArNDUsMTEgQEAKICNkZWZpbmUgVU5MSUtFTFkoeCkgKHgpCiAjZW5kaWYKICNlbmRp
ZgorCisjaWZuZGVmIExJS0VMWQorI2lmIENPTVBJTEVSKEdDQykKKyNkZWZpbmUgTElLRUxZKHgp
IF9fYnVpbHRpbl9leHBlY3QoKHgpLCAxKQorI2Vsc2UKKyNkZWZpbmUgTElLRUxZKHgpICh4KQor
I2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21646</attachid>
            <date>2008-06-11 15:13:13 -0700</date>
            <delta_ts>2008-06-11 15:22:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>LessStringBoxingPatch.txt</filename>
            <type>text/plain</type>
            <size>23588</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0NDk5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzAgQEAKKzIwMDgtMDYtMTEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gbGVzcyBzdHJpbmcgYm94aW5nCisKKyAgICAgICAgT3B0aW1pemVk
IGNvZGUgcGF0aCBmb3IgZ2V0dGluZyBidWlsdC1pbiBwcm9wZXJ0aWVzIGZyb20gc3RyaW5ncyAt
LSBhdm9pZAorICAgICAgICBib3hpbmcgd2l0aCBhIHN0cmluZyBvYmplY3QgaW4gdGhhdCBjYXNl
LiBXZSBjYW4gbWFrZSBmdXJ0aGVyIGNoYW5nZXMgdG8gYXZvaWQKKyAgICAgICAgZXZlbiBtb3Jl
IGJveGluZywgYnV0IHRoaXMgY2hhbmdlIGFsb25lIGlzIGEgd2luLgorCisgICAgICAgICogQVBJ
L0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEtKUzo6SlNDYWxsYmFja09i
amVjdDo6c3RhdGljVmFsdWVHZXR0ZXIpOiBVc2UgaXNPYmplY3QgaW5zdGVhZCBvZiBpbmhlcml0
cworICAgICAgICBpbiBhc3NzZXJ0LCBzaW5jZSB0aGUgdHlwZSBvZiBzbG90QmFzZSgpIGlzIG5v
dyBKU1ZhbHVlLCBub3QgSlNPYmplY3QuCisgICAgICAgIChLSlM6OkpTQ2FsbGJhY2tPYmplY3Q6
OnN0YXRpY0Z1bmN0aW9uR2V0dGVyKTogRGl0dG8uCisgICAgICAgIChLSlM6OkpTQ2FsbGJhY2tP
YmplY3Q6OmNhbGxiYWNrR2V0dGVyKTogRGl0dG8uCisKKyAgICAgICAgKiBranMvaW50ZXJuYWwu
Y3BwOgorICAgICAgICAoS0pTOjpTdHJpbmdJbXA6OmdldFByaW1pdGl2ZU51bWJlcik6IFVwZGF0
ZWQgZm9yIGNoYW5nZSBvZiBkYXRhIG1lbWJlciBuYW1lLgorICAgICAgICAoS0pTOjpTdHJpbmdJ
bXA6OnRvQm9vbGVhbik6IERpdHRvLgorICAgICAgICAoS0pTOjpTdHJpbmdJbXA6OnRvTnVtYmVy
KTogRGl0dG8uCisgICAgICAgIChLSlM6OlN0cmluZ0ltcDo6dG9TdHJpbmcpOiBEaXR0by4KKyAg
ICAgICAgKEtKUzo6U3RyaW5nSW5zdGFuY2U6OmNyZWF0ZSk6IEFkZGVkOyBhdm9pZHMgYSBiaXQg
b2YgY3V0IGFuZCBwYXN0ZSBjb2RlLgorICAgICAgICAoS0pTOjpTdHJpbmdJbXA6OnRvT2JqZWN0
KTogVXNlIFN0cmluZ0luc3RhbmNlOjpjcmVhdGUuCisgICAgICAgIChLSlM6OlN0cmluZ0ltcDo6
dG9UaGlzT2JqZWN0KTogRGl0dG8uCisgICAgICAgIChLSlM6OlN0cmluZ0ltcDo6bGVuZ3RoR2V0
dGVyKTogQWRkZWQuIFJlcGxhY2VzIHRoZSBnZXR0ZXIgdGhhdCB1c2VkIHRvIGxpdmUgaW4KKyAg
ICAgICAgdGhlIFN0cmluZ0luc3RhbmNlIGNsYXNzLgorICAgICAgICAoS0pTOjpTdHJpbmdJbXA6
OmluZGV4R2V0dGVyKTogRGl0dG8uCisgICAgICAgIChLSlM6OlN0cmluZ0ltcDo6aW5kZXhOdW1l
cmljUHJvcGVydHlHZXR0ZXIpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6U3RyaW5nSW1wOjpnZXRP
d25Qcm9wZXJ0eVNsb3QpOiBBZGRlZC4gRGVhbHMgd2l0aCBidWlsdCBpbiBwcm9wZXJ0aWVzIG9m
CisgICAgICAgIHRoZSBzdHJpbmcgY2xhc3Mgd2l0aG91dCBjcmVhdGluZyBhIFN0cmluZ0luc3Rh
bmNlLgorCisgICAgICAgICoga2pzL2ludGVybmFsLmg6CisgICAgICAgIChLSlM6OlN0cmluZ0lt
cDo6Z2V0U3RyaW5nUHJvcGVydHlTbG90KTogQWRkZWQuIFRvIGJlIHVzZWQgYnkgYm90aCB0aGUg
c3RyaW5nCisgICAgICAgIGFuZCBzdHJpbmcgb2JqZWN0IGdldE93blByb3BlcnR5U2xvdCBmdW5j
dGlvbi4KKworICAgICAgICAqIGtqcy9sb29rdXAuaDoKKyAgICAgICAgKEtKUzo6c3RhdGljRnVu
Y3Rpb25HZXR0ZXIpOiBVcGRhdGVkIHNpbmNlIHNsb3RCYXNlKCkgaXMgbm93IGEgSlNWYWx1ZSBy
YXRoZXIKKyAgICAgICAgdGhhbiBhIEpTT2JqZWN0LgorCisgICAgICAgICoga2pzL29iamVjdC5o
OiBSZW1vdmVkIFByb3BlcnR5U2xvdDo6c2xvdEJhc2UoKSBmdW5jdGlvbiwgd2hpY2ggY2FuIG5v
dyBtb3ZlCisgICAgICAgIGJhY2sgaW50byBwcm9wZXJ0eV9zbG90Lmggd2hlcmUgaXQgYmVsb25n
cyBzaW5jZSBpdCBkb2Vzbid0IGhhdmUgdG8gY2FzdCB0bworICAgICAgICBKU09iamVjdCouCisK
KyAgICAgICAgKiBranMvcHJvcGVydHlfc2xvdC5jcHA6CisgICAgICAgIChLSlM6OlByb3BlcnR5
U2xvdDo6ZnVuY3Rpb25HZXR0ZXIpOiBVcGRhdGVkIHNpbmNlIHNsb3Quc2xvdEJhc2UoKSBpcyBu
b3cgYSBKU1ZhbHVlKgorICAgICAgICBpbnN0ZWFkIG9mIEpTT2JqZWN0Ki4gc2V0R2V0dGVyU2xv
dCBzdGlsbCBndWFyYW50ZWVzIHRoZSBiYXNlIGlzIGEgSlNPYmplY3QqLgorICAgICAgICAqIGtq
cy9wcm9wZXJ0eV9zbG90Lmg6CisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6UHJvcGVydHlT
bG90KTogQ2hhbmdlZCBiYXNlIHRvIEpTVmFsdWUqIGludGVhZCBvZiBKU0NlbGwqLgorICAgICAg
ICAoS0pTOjpQcm9wZXJ0eVNsb3Q6OnNldFN0YXRpY0VudHJ5KTogRGl0dG8uCisgICAgICAgIChL
SlM6OlByb3BlcnR5U2xvdDo6c2V0Q3VzdG9tKTogRGl0dG8uCisgICAgICAgIChLSlM6OlByb3Bl
cnR5U2xvdDo6c2V0Q3VzdG9tSW5kZXgpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6UHJvcGVydHlT
bG90OjpzZXRDdXN0b21OdW1lcmljKTogRGl0dG8uCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xv
dDo6c2xvdEJhc2UpOiBNb3ZlZCBpbmxpbmUgaGVyZSBzaW5jZSBpdCBubyBsb25nZXIgaW52b2x2
ZXMgYQorICAgICAgICBkb3duY2FzdCB0byBKU09iamVjdCouCisgICAgICAgIChLSlM6OlByb3Bl
cnR5U2xvdDo6c2V0QmFzZSk6IENoYW5nZWQgdG8gSlNWYWx1ZSouCisKKyAgICAgICAgKiBranMv
c3RyaW5nX29iamVjdC5jcHA6CisgICAgICAgIChLSlM6OlN0cmluZ0luc3RhbmNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOiBDaGFuZ2VkIHRvIHVzZSBnZXRTdHJpbmdQcm9wZXJ0eVNsb3QKKyAgICAg
ICAgaW5zdGVhZCBvZiBjb2RpbmcgdGhlIHByb3BlcnRpZXMgaGVyZS4gVGhpcyBhbGxvd3Mgc2hh
cmluZyB0aGUgY29kZSB3aXRoIFN0cmluZ0ltcC4KKworICAgICAgICAqIGtqcy9zdHJpbmdfb2Jq
ZWN0Lmg6IFJlbW92ZWQgaW5saW5lR2V0T3duUHJvcGVydHlTbG90LCBsZW5ndGhHZXR0ZXIsIGFu
ZCBpbmRleEdldHRlci4KKyAgICAgICAgTWFkZSBvbmUgb2YgdGhlIGNvbnN0cnVjdG9ycyBwcm90
ZWN0ZWQuCisKKyAgICAgICAgKiBranMvdmFsdWUuaDogTWFkZSBnZXRPd25Qcm9wZXJ0eVNsb3Qg
cHJpdmF0ZSBpbiB0aGUgSlNDZWxsIGNsYXNzIC0tIHRoaXMgaXMgYmV0dGVyCisgICAgICAgIHNp
bmNlIGl0J3Mgbm90IHRoZSByZWFsIEpTT2JqZWN0IGdldE93blByb3BlcnR5U2xvdCBzZW1hbnRp
YyBhbmQgbW9zdCBjYWxsZXJzIHNob3VsZG4ndAorICAgICAgICB1c2UgaXQuCisKIDIwMDgtMDYt
MTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hY2llai4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RG
dW5jdGlvbnMuaAkocmV2aXNpb24gMzQ0OTkpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsNyArNDM3LDcgQEAg
SlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNlPjo6Y2FjaGVkVgogdGVtcGxhdGUgPGNsYXNz
IEJhc2U+CiBKU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNWYWx1ZUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCktPmluaGVy
aXRzKCZKU0NhbGxiYWNrT2JqZWN0OjppbmZvKSk7CisgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2Uo
KS0+aXNPYmplY3QoJkpTQ2FsbGJhY2tPYmplY3Q6OmluZm8pKTsKICAgICBKU0NhbGxiYWNrT2Jq
ZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KHNsb3Quc2xvdEJh
c2UoKSk7CiAgICAgCiAgICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHRoaXNPYmopOwpA
QCAtNDU4LDcgKzQ1OCw3IEBAIEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRp
Y1YKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgogSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDxCYXNl
Pjo6c3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBBU1NFUlQo
c2xvdC5zbG90QmFzZSgpLT5pbmhlcml0cygmSlNDYWxsYmFja09iamVjdDo6aW5mbykpOworICAg
IEFTU0VSVChzbG90LnNsb3RCYXNlKCktPmlzT2JqZWN0KCZKU0NhbGxiYWNrT2JqZWN0OjppbmZv
KSk7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTQ2FsbGJh
Y2tPYmplY3QqPihzbG90LnNsb3RCYXNlKCkpOwogICAgIAogICAgIC8vIENoZWNrIGZvciBjYWNo
ZWQgb3Igb3ZlcnJpZGUgcHJvcGVydHkuCkBAIC00ODQsNyArNDg0LDcgQEAgSlNWYWx1ZSogSlND
YWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGljRgogdGVtcGxhdGUgPGNsYXNzIEJhc2U+CiBKU1Zh
bHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpjYWxsYmFja0dldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQogewotICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCktPmluaGVyaXRzKCZKU0NhbGxiYWNr
T2JqZWN0OjppbmZvKSk7CisgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS0+aXNPYmplY3QoJkpT
Q2FsbGJhY2tPYmplY3Q6OmluZm8pKTsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqID0g
c3RhdGljX2Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgCiAg
ICAgSlNPYmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHRoaXNPYmopOwpJbmRleDogSmF2YVNjcmlw
dENvcmUva2pzL2ludGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMv
aW50ZXJuYWwuY3BwCShyZXZpc2lvbiAzNDQ5OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9pbnRl
cm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDMzICs1OSw4NCBAQCBKU1ZhbHVlKiBTdHJp
bmdJbXA6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0CiBib29sIFN0cmluZ0ltcDo6Z2V0UHJpbWl0aXZl
TnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlKiYgdmFsdWUpCiB7CiAg
ICAgdmFsdWUgPSB0aGlzOwotICAgIG51bWJlciA9IHZhbC50b0RvdWJsZSgpOworICAgIG51bWJl
ciA9IG1fdmFsdWUudG9Eb3VibGUoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU3Ry
aW5nSW1wOjp0b0Jvb2xlYW4oRXhlY1N0YXRlICopIGNvbnN0Citib29sIFN0cmluZ0ltcDo6dG9C
b29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0CiB7Ci0gIHJldHVybiAodmFsLnNpemUoKSA+IDApOwor
ICAgIHJldHVybiAhbV92YWx1ZS5pc0VtcHR5KCk7CiB9CiAKLWRvdWJsZSBTdHJpbmdJbXA6OnRv
TnVtYmVyKEV4ZWNTdGF0ZSAqKSBjb25zdAorZG91YmxlIFN0cmluZ0ltcDo6dG9OdW1iZXIoRXhl
Y1N0YXRlKikgY29uc3QKIHsKLSAgcmV0dXJuIHZhbC50b0RvdWJsZSgpOworICAgIHJldHVybiBt
X3ZhbHVlLnRvRG91YmxlKCk7CiB9CiAKLVVTdHJpbmcgU3RyaW5nSW1wOjp0b1N0cmluZyhFeGVj
U3RhdGUgKikgY29uc3QKK1VTdHJpbmcgU3RyaW5nSW1wOjp0b1N0cmluZyhFeGVjU3RhdGUqKSBj
b25zdAogewotICByZXR1cm4gdmFsOworICAgIHJldHVybiBtX3ZhbHVlOwogfQogCi1KU09iamVj
dCogU3RyaW5nSW1wOjp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CitpbmxpbmUgU3Ry
aW5nSW5zdGFuY2UqIFN0cmluZ0luc3RhbmNlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJp
bmdJbXAqIHN0cmluZykKIHsKLSAgICByZXR1cm4gbmV3IFN0cmluZ0luc3RhbmNlKGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBlKCksIGNvbnN0X2Nhc3Q8U3RyaW5n
SW1wKj4odGhpcykpOworICAgIHJldHVybiBuZXcgU3RyaW5nSW5zdGFuY2UoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKSwgc3RyaW5nKTsKK30KKworSlNPYmpl
Y3QqIFN0cmluZ0ltcDo6dG9PYmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJl
dHVybiBTdHJpbmdJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGNvbnN0X2Nhc3Q8U3RyaW5nSW1wKj4o
dGhpcykpOwogfQogCiBKU09iamVjdCogU3RyaW5nSW1wOjp0b1RoaXNPYmplY3QoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAogewotICAgIHJldHVybiBuZXcgU3RyaW5nSW5zdGFuY2UoZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKSwgY29uc3RfY2FzdDxTdHJpbmdJ
bXAqPih0aGlzKSk7CisgICAgcmV0dXJuIFN0cmluZ0luc3RhbmNlOjpjcmVhdGUoZXhlYywgY29u
c3RfY2FzdDxTdHJpbmdJbXAqPih0aGlzKSk7Cit9CisKK0pTVmFsdWUqIFN0cmluZ0ltcDo6bGVu
Z3RoR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGpzTnVtYmVyKHN0YXRpY19jYXN0PFN0cmluZ0ltcCo+
KHNsb3Quc2xvdEJhc2UoKSktPnZhbHVlKCkuc2l6ZSgpKTsKK30KKworSlNWYWx1ZSogU3RyaW5n
SW1wOjppbmRleEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBqc1N0cmluZyhzdGF0aWNfY2FzdDxTdHJp
bmdJbXAqPihzbG90LnNsb3RCYXNlKCkpLT52YWx1ZSgpLnN1YnN0cihzbG90LmluZGV4KCksIDEp
KTsKK30KKworSlNWYWx1ZSogU3RyaW5nSW1wOjppbmRleE51bWVyaWNQcm9wZXJ0eUdldHRlcihF
eGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQorewor
ICAgIHJldHVybiBqc1N0cmluZyhzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPihzbG90LnNsb3RCYXNl
KCkpLT52YWx1ZSgpLnN1YnN0cihpbmRleCwgMSkpOworfQorCitib29sIFN0cmluZ0ltcDo6Z2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgLy8gVGhlIHNlbWFudGljcyBoZXJl
IGFyZSByZWFsbHkgZ2V0UHJvcGVydHlTbG90LCBub3QgZ2V0T3duUHJvcGVydHlTbG90LgorICAg
IC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IEpTVmFsdWU6OmdldC4K
KyAgICBpZiAoZ2V0U3RyaW5nUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBTdHJpbmdJbnN0
YW5jZTo6Y3JlYXRlKGV4ZWMsIHRoaXMpOworICAgIHNsb3Quc2V0QmFzZShvYmplY3QpOworICAg
IGlmIChvYmplY3QtPkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgSlNWYWx1ZSogcHJvdG8gPSBvYmplY3QtPnByb3RvdHlwZSgpOworICAgICAgICBpZiAo
IXByb3RvLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBzbG90LnNldFVuZGVmaW5lZCgpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgb2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNPYmplY3QqPihwcm90byk7CisgICAgICAgIGlmIChvYmplY3QtPmdldE93blBy
b3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorfQorCitib29sIFN0cmluZ0ltcDo6Z2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgLy8gVGhlIHNlbWFudGljcyBoZXJlIGFyZSByZWFsbHkgZ2V0UHJvcGVydHlTbG90
LCBub3QgZ2V0T3duUHJvcGVydHlTbG90LgorICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGJ5IEpTVmFsdWU6OmdldC4KKyAgICBpZiAoZ2V0U3RyaW5nUHJvcGVydHlT
bG90KHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBTdHJpbmdJbXA6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBJZGVudGlmaWVyOjpmcm9tKHBy
b3BlcnR5TmFtZSksIHNsb3QpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gTnVtYmVySW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDog
SmF2YVNjcmlwdENvcmUva2pzL2ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL2ludGVybmFsLmgJKHJldmlzaW9uIDM0NDk5KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L2ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI0LDQ5ICsyNCw3MCBAQAogI2lmbmRlZiBJTlRFUk5BTF9ICiAjZGVmaW5lIElOVEVS
TkFMX0gKIAotI2luY2x1ZGUgIkpTVHlwZS5oIgogI2luY2x1ZGUgIm9iamVjdC5oIgotI2luY2x1
ZGUgInByb3RlY3QuaCIKLSNpbmNsdWRlICJzY29wZV9jaGFpbi5oIgotI2luY2x1ZGUgInR5cGVz
LmgiCiAjaW5jbHVkZSAidXN0cmluZy5oIgogCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
Ci0KLSNkZWZpbmUgSTE4Tl9OT09QKHMpIHMKLQogbmFtZXNwYWNlIEtKUyB7CiAKLSAgY2xhc3Mg
RnVuY3Rpb25Qcm90b3R5cGU7Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFByaW1pdGl2ZSBpbXBscwotICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQogICBjbGFzcyBTdHJpbmdJbXAgOiBwdWJsaWMgSlNDZWxsIHsKICAgcHVibGljOgot
ICAgIFN0cmluZ0ltcChjb25zdCBVU3RyaW5nJiB2KSA6IHZhbCh2KSB7IENvbGxlY3Rvcjo6cmVw
b3J0RXh0cmFNZW1vcnlDb3N0KHYuY29zdCgpKTsgfQorICAgIFN0cmluZ0ltcChjb25zdCBVU3Ry
aW5nJiB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7IENvbGxlY3Rvcjo6cmVwb3J0RXh0cmFNZW1v
cnlDb3N0KHZhbHVlLmNvc3QoKSk7IH0KICAgICBlbnVtIEhhc090aGVyT3duZXJUeXBlIHsgSGFz
T3RoZXJPd25lciB9OwotICAgIFN0cmluZ0ltcChjb25zdCBVU3RyaW5nJiB2YWx1ZSwgSGFzT3Ro
ZXJPd25lclR5cGUpIDogdmFsKHZhbHVlKSB7IH0KLSAgICBjb25zdCBVU3RyaW5nJiB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIHZhbDsgfQorICAgIFN0cmluZ0ltcChjb25zdCBVU3RyaW5nJiB2YWx1
ZSwgSGFzT3RoZXJPd25lclR5cGUpIDogbV92YWx1ZSh2YWx1ZSkgeyB9CisKKyAgICBjb25zdCBV
U3RyaW5nJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIGJvb2wgZ2V0
U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgYm9vbCBnZXRTdHJpbmdQcm9wZXJ0eVNsb3QodW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIAogICBwcml2YXRlOgogICAgIHZp
cnR1YWwgSlNUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBTdHJpbmdUeXBlOyB9CiAKICAgICB2
aXJ0dWFsIEpTVmFsdWUqIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIEpTVHlwZSBwcmVmZXJyZWQg
PSBVbnNwZWNpZmllZFR5cGUpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVO
dW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUqJiB2YWx1ZSk7Ci0gICAg
dmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwotICAgIHZpcnR1
YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3Q7Ci0gICAgdmlydHVhbCBK
U09iamVjdCAqdG9PYmplY3QoRXhlY1N0YXRlICpleGVjKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIHZpcnR1YWwgZG91YmxlIHRvTnVt
YmVyKEV4ZWNTdGF0ZSopIGNvbnN0OworICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvT2JqZWN0KEV4
ZWNTdGF0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUq
KSBjb25zdDsKICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikg
Y29uc3Q7CiAKLSAgICBVU3RyaW5nIHZhbDsKKyAgICAvLyBBY3R1YWxseSBnZXRQcm9wZXJ0eVNs
b3QsIG5vdCBnZXRPd25Qcm9wZXJ0eVNsb3QgKHNlZSBKU0NlbGwpLgorICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisK
KyAgICBzdGF0aWMgSlNWYWx1ZSogbGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgSlNWYWx1ZSogaW5kZXhH
ZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleE51bWVyaWNQcm9wZXJ0eUdldHRlcihFeGVjU3Rh
dGUqLCB1bnNpZ25lZCwgY29uc3QgUHJvcGVydHlTbG90Jik7CisKKyAgICBVU3RyaW5nIG1fdmFs
dWU7CiAgIH07CiAKLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEV2YWx1YXRpb24KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBTFdBWVNf
SU5MSU5FIGJvb2wgU3RyaW5nSW1wOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
IHsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbGVuZ3RoR2V0dGVyKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBpc1N0cmljdFVJbnQzMjsKKyAgICB1bnNp
Z25lZCBpID0gcHJvcGVydHlOYW1lLnRvU3RyaWN0VUludDMyKCZpc1N0cmljdFVJbnQzMik7Cisg
ICAgaWYgKGlzU3RyaWN0VUludDMyICYmIGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV92YWx1
ZS5zaXplKCkpKSB7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhH
ZXR0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisgICAgCitBTFdBWVNfSU5MSU5FIGJvb2wgU3RyaW5nSW1wOjpnZXRTdHJpbmdQcm9wZXJ0
eVNsb3QodW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
aWYgKHByb3BlcnR5TmFtZSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3ZhbHVlLnNpemUoKSkp
IHsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21OdW1lcmljKHRoaXMsIGluZGV4TnVtZXJpY1Byb3Bl
cnR5R2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQogCiB9IC8vIG5hbWVzcGFjZQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbG9v
a3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCShyZXZpc2lv
biAzNDQ5OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9sb29rdXAuaAkod29ya2luZyBjb3B5KQpA
QCAtODYsNyArODYsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgaW5saW5lIEpTVmFsdWUqIHN0YXRp
Y0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgIHsKICAgICAgIC8vIExvb2sgZm9y
IGNhY2hlZCB2YWx1ZSBpbiBkeW5hbWljIG1hcCBvZiBwcm9wZXJ0aWVzIChpbiBKU09iamVjdCkK
LSAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gc2xvdC5zbG90QmFzZSgpOworICAgICAgQVNTRVJU
KHNsb3Quc2xvdEJhc2UoKS0+aXNPYmplY3QoKSk7CisgICAgICBKU09iamVjdCogdGhpc09iaiA9
IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICAgIEpTVmFsdWUq
IGNhY2hlZFZhbCA9IHRoaXNPYmotPmdldERpcmVjdChwcm9wZXJ0eU5hbWUpOwogICAgICAgaWYg
KGNhY2hlZFZhbCkKICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbDsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvb2JqZWN0
LmgJKHJldmlzaW9uIDM0NDk5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MDEsMTQgKzcwMSw2IEBAIGlubGluZSB2b2lkIEpTVmFsdWU6OnB1dChF
eGVjU3RhdGUqIGV4ZWMKICAgICBhc0NlbGwoKS0+cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUpOwogfQogCi1pbmxpbmUgSlNPYmplY3QqIFByb3BlcnR5U2xvdDo6c2xvdEJhc2UoKSBjb25z
dAotewotICAgIEFTU0VSVChtX3Nsb3RCYXNlKTsKLSAgICAvLyBJdCdzIGJlIG5pY2UgdG8gYXNz
ZXJ0IHRoYXQgbV9zbG90QmFzZSBpcyBhbiBvYmplY3QgaGVyZSwgYnV0IHRoYXQncyBhIGJpdAot
ICAgIC8vIHRvbyBzbG93LCBldmVuIGZvciBkZWJ1ZyBidWlsZHMuCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEpTT2JqZWN0Kj4obV9zbG90QmFzZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlCiAKICNl
bmRpZiAvLyBLSlNfT0JKRUNUX0gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9z
bG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfc2xvdC5j
cHAJKHJldmlzaW9uIDM0NDk5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSArMzksMTEgQEAgSlNWYWx1ZSogUHJvcGVydHlT
bG90OjpmdW5jdGlvbkdldHRlcihFeAogICAgIENhbGxEYXRhIGRhdGE7CiAgICAgQ2FsbFR5cGUg
Y2FsbFR5cGUgPSBzbG90Lm1fZGF0YS5nZXR0ZXJGdW5jLT5nZXRDYWxsRGF0YShkYXRhKTsKICAg
ICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOYXRpdmUpCi0gICAgICAgIHJldHVybiBzbG90Lm1f
ZGF0YS5nZXR0ZXJGdW5jLT5jYWxsQXNGdW5jdGlvbihleGVjLCBzbG90LnNsb3RCYXNlKCksIGV4
ZWMtPmVtcHR5TGlzdCgpKTsKKyAgICAgICAgcmV0dXJuIHNsb3QubV9kYXRhLmdldHRlckZ1bmMt
PmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oc2xvdC5zbG90QmFz
ZSgpKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxsVHlw
ZUpTKTsKICAgICBSZWdpc3RlckZpbGVTdGFjayogc3RhY2sgPSAmZXhlYy0+ZHluYW1pY0dsb2Jh
bE9iamVjdCgpLT5yZWdpc3RlckZpbGVTdGFjaygpOwogICAgIHN0YWNrLT5wdXNoRnVuY3Rpb25S
ZWdpc3RlckZpbGUoKTsKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90Lm1fZGF0YS5nZXR0ZXJG
dW5jLT5jYWxsQXNGdW5jdGlvbihleGVjLCBzbG90LnNsb3RCYXNlKCksIGV4ZWMtPmVtcHR5TGlz
dCgpKTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBzbG90Lm1fZGF0YS5nZXR0ZXJGdW5jLT5jYWxs
QXNGdW5jdGlvbihleGVjLCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHNsb3Quc2xvdEJhc2UoKSks
IGV4ZWMtPmVtcHR5TGlzdCgpKTsKICAgICBzdGFjay0+cG9wRnVuY3Rpb25SZWdpc3RlckZpbGUo
KTsKICAgICByZXR1cm4gcmVzdWx0OyAgICAKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9w
cm9wZXJ0eV9zbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5
X3Nsb3QuaAkocmV2aXNpb24gMzQ0OTkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlf
c2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICAgICAg
Y2xlYXJCYXNlKCk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgUHJvcGVydHlTbG90KEpTQ2VsbCog
YmFzZSkKKyAgICBleHBsaWNpdCBQcm9wZXJ0eVNsb3QoSlNWYWx1ZSogYmFzZSkKICAgICAgICAg
OiBtX3Nsb3RCYXNlKGJhc2UpCiAgICAgewogICAgIH0KQEAgLTgyLDcgKzgyLDcgQEAgcHVibGlj
OgogICAgICAgICBtX2RhdGEudmFsdWVTbG90ID0gdmFsdWVTbG90OwogICAgIH0KIAotICAgIHZv
aWQgc2V0U3RhdGljRW50cnkoSlNDZWxsKiBzbG90QmFzZSwgY29uc3QgSGFzaEVudHJ5KiBzdGF0
aWNFbnRyeSwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQorICAgIHZvaWQgc2V0U3RhdGljRW50cnko
SlNWYWx1ZSogc2xvdEJhc2UsIGNvbnN0IEhhc2hFbnRyeSogc3RhdGljRW50cnksIEdldFZhbHVl
RnVuYyBnZXRWYWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CiAgICAgICAg
IEFTU0VSVChzdGF0aWNFbnRyeSk7CkBAIC05Miw3ICs5Miw3IEBAIHB1YmxpYzoKICAgICAgICAg
bV9kYXRhLnN0YXRpY0VudHJ5ID0gc3RhdGljRW50cnk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRD
dXN0b20oSlNDZWxsKiBzbG90QmFzZSwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQorICAgIHZvaWQg
c2V0Q3VzdG9tKEpTVmFsdWUqIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCiAgICAg
ewogICAgICAgICBBU1NFUlQoc2xvdEJhc2UpOwogICAgICAgICBBU1NFUlQoZ2V0VmFsdWUpOwpA
QCAtMTAwLDcgKzEwMCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zbG90QmFzZSA9IHNsb3RCYXNl
OwogICAgIH0KIAotICAgIHZvaWQgc2V0Q3VzdG9tSW5kZXgoSlNDZWxsKiBzbG90QmFzZSwgdW5z
aWduZWQgaW5kZXgsIEdldFZhbHVlRnVuYyBnZXRWYWx1ZSkKKyAgICB2b2lkIHNldEN1c3RvbUlu
ZGV4KEpTVmFsdWUqIHNsb3RCYXNlLCB1bnNpZ25lZCBpbmRleCwgR2V0VmFsdWVGdW5jIGdldFZh
bHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHNsb3RCYXNlKTsKICAgICAgICAgQVNTRVJUKGdl
dFZhbHVlKTsKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGF0YS5pbmRl
eCA9IGluZGV4OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEN1c3RvbU51bWVyaWMoSlNDZWxs
KiBzbG90QmFzZSwgR2V0VmFsdWVOdW1lcmljRnVuYyBnZXRWYWx1ZSkKKyAgICB2b2lkIHNldEN1
c3RvbU51bWVyaWMoSlNWYWx1ZSogc2xvdEJhc2UsIEdldFZhbHVlTnVtZXJpY0Z1bmMgZ2V0VmFs
dWUpCiAgICAgewogICAgICAgICBBU1NFUlQoc2xvdEJhc2UpOwogICAgICAgICBBU1NFUlQoZ2V0
VmFsdWUpOwpAQCAtMTMxLDkgKzEzMSw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9nZXRWYWx1ZSA9
IHVuZGVmaW5lZEdldHRlcjsKICAgICB9CiAKLSAgICBKU09iamVjdCogc2xvdEJhc2UoKSBjb25z
dDsKKyAgICBKU1ZhbHVlKiBzbG90QmFzZSgpIGNvbnN0IHsgQVNTRVJUKG1fc2xvdEJhc2UpOyBy
ZXR1cm4gbV9zbG90QmFzZTsgfQogCi0gICAgdm9pZCBzZXRCYXNlKEpTQ2VsbCogYmFzZSkKKyAg
ICB2b2lkIHNldEJhc2UoSlNWYWx1ZSogYmFzZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3Ns
b3RCYXNlKTsKICAgICAgICAgQVNTRVJUKGJhc2UpOwpAQCAtMTU2LDcgKzE1Niw3IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgR2V0VmFsdWVGdW5jIG1fZ2V0VmFsdWU7CiAKLSAgICBKU0NlbGwqIG1f
c2xvdEJhc2U7CisgICAgSlNWYWx1ZSogbV9zbG90QmFzZTsKICAgICB1bmlvbiB7CiAgICAgICAg
IEpTT2JqZWN0KiBnZXR0ZXJGdW5jOwogICAgICAgICBKU1ZhbHVlKiogdmFsdWVTbG90OwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAkocmV2aXNpb24gMzQ0OTkpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDQ3ICs1OCwxNyBAQCBTdHJpbmdJbnN0YW5jZTo6U3RyaW5nSW5zdGFuY2UoSlNPYmplY3QgCiAg
IHNldEludGVybmFsVmFsdWUoanNTdHJpbmcoc3RyaW5nKSk7CiB9CiAKLUpTVmFsdWUgKlN0cmlu
Z0luc3RhbmNlOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCAmc2xvdCkKLXsKLSAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nh
c3Q8U3RyaW5nSW5zdGFuY2UqPihzbG90LnNsb3RCYXNlKCkpLT5pbnRlcm5hbFZhbHVlKCktPnZh
bHVlKCkuc2l6ZSgpKTsKLX0KLQotSlNWYWx1ZSogU3RyaW5nSW5zdGFuY2U6OmluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNlKj4oc2xv
dC5zbG90QmFzZSgpKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpLnN1YnN0cihzbG90LmluZGV4
KCksIDEpKTsKLX0KLQotc3RhdGljIEpTVmFsdWUqIHN0cmluZ0luc3RhbmNlTnVtZXJpY1Byb3Bl
cnR5R2V0dGVyKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCi17Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRpY19jYXN0PFN0cmluZ0luc3RhbmNl
Kj4oc2xvdC5zbG90QmFzZSgpKS0+aW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpLnN1YnN0cihpbmRl
eCwgMSkpOwotfQotCiBib29sIFN0cmluZ0luc3RhbmNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbGVuZ3RoR2V0dGVyKTsK
KyAgICBpZiAoaW50ZXJuYWxWYWx1ZSgpLT5nZXRTdHJpbmdQcm9wZXJ0eVNsb3QoZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYm9v
bCBpc1N0cmljdFVJbnQzMjsKLSAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvU3RyaWN0
VUludDMyKCZpc1N0cmljdFVJbnQzMik7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaW50ZXJuYWxW
YWx1ZSgpLT52YWx1ZSgpLnNpemUoKTsKLSAgICBpZiAoaXNTdHJpY3RVSW50MzIgJiYgaSA8IGxl
bmd0aCkgewotICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIGksIGluZGV4R2V0dGVy
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAogICAgIHJldHVybiBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAgICAg
CiBib29sIFN0cmluZ0luc3RhbmNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICB1bnNp
Z25lZCBsZW5ndGggPSBpbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkuc2l6ZSgpOwotICAgIGlmIChw
cm9wZXJ0eU5hbWUgPCBsZW5ndGgpIHsKLSAgICAgICAgc2xvdC5zZXRDdXN0b21OdW1lcmljKHRo
aXMsIHN0cmluZ0luc3RhbmNlTnVtZXJpY1Byb3BlcnR5R2V0dGVyKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIAorICAgIGlmIChpbnRlcm5hbFZhbHVlKCktPmdldFN0cmluZ1By
b3BlcnR5U2xvdChwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsgICAg
CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShwcm9wZXJ0eU5hbWUpLCBzbG90KTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL3N0cmluZ19vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc3Ry
aW5nX29iamVjdC5oCShyZXZpc2lvbiAzNDQ5OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJp
bmdfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvLyAtKi0gYy1iYXNp
Yy1vZmZzZXQ6IDIgLSotCiAvKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGli
cmFyaWVzCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsMjcgKzMxLDI1IEBAIG5h
bWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIFN0cmluZ0luc3RhbmNlIDogcHVibGljIEpTV3JhcHBl
ck9iamVjdCB7CiAgIHB1YmxpYzoKLSAgICBTdHJpbmdJbnN0YW5jZShKU09iamVjdCAqcHJvdG8p
OwotICAgIFN0cmluZ0luc3RhbmNlKEpTT2JqZWN0ICpwcm90bywgU3RyaW5nSW1wKik7Ci0gICAg
U3RyaW5nSW5zdGFuY2UoSlNPYmplY3QgKnByb3RvLCBjb25zdCBVU3RyaW5nJik7CisgICAgU3Ry
aW5nSW5zdGFuY2UoSlNPYmplY3QqIHByb3RvdHlwZSk7CisgICAgU3RyaW5nSW5zdGFuY2UoSlNP
YmplY3QqIHByb3RvdHlwZSwgY29uc3QgVVN0cmluZyYpOworCisgICAgc3RhdGljIFN0cmluZ0lu
c3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RyaW5nSW1wKik7CiAKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgcHV0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlKik7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wg
ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYpOwogCi0gICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygp
IGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwogCiAgICAgU3RyaW5nSW1wKiBpbnRlcm5hbFZhbHVlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wKj4oSlNXcmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVl
KCkpO30KIAotICBwcml2YXRlOgotICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eVNsb3QmKTsKLQotICAgIHN0YXRpYyBKU1ZhbHVl
KiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CisgIHByb3RlY3RlZDoKKyAg
ICBTdHJpbmdJbnN0YW5jZShKU09iamVjdCogcHJvdG90eXBlLCBTdHJpbmdJbXAqKTsKICAgfTsK
IAogICAvLyBXZWJDb3JlIHVzZXMgdGhpcyB0byBtYWtlIHN0eWxlLmZpbHRlciB1bmRldGVjdGFi
bGUKQEAgLTE0MywxMCArMTQxLDkgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIFN0cmluZ09i
amVjdEZ1bmNJbXAgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7CiAgIHB1YmxpYzoKICAg
ICBTdHJpbmdPYmplY3RGdW5jSW1wKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90eXBlKiwgY29u
c3QgSWRlbnRpZmllciYpOwotICAgIHZpcnR1YWwgSlNWYWx1ZSAqY2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncyk7CisgICAg
dmlydHVhbCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCogdGhp
c09iaiwgY29uc3QgTGlzdCYgYXJncyk7CiAgIH07CiAKIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRp
ZgotCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvdmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvdmFsdWUuaAkocmV2aXNpb24gMzQ0OTkpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ranMvdmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBD
b3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTQy
LDExICsxNDIsMTIgQEAgcHJpdmF0ZToKIAogY2xhc3MgSlNDZWxsIDogcHVibGljIEpTVmFsdWUg
ewogICAgIGZyaWVuZCBjbGFzcyBDb2xsZWN0b3I7Ci0gICAgZnJpZW5kIGNsYXNzIE51bWJlcklt
cDsKLSAgICBmcmllbmQgY2xhc3MgU3RyaW5nSW1wOwotICAgIGZyaWVuZCBjbGFzcyBKU09iamVj
dDsKICAgICBmcmllbmQgY2xhc3MgR2V0dGVyU2V0dGVySW1wOworICAgIGZyaWVuZCBjbGFzcyBK
U09iamVjdDsKICAgICBmcmllbmQgY2xhc3MgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKKyAgICBm
cmllbmQgY2xhc3MgSlNWYWx1ZTsKKyAgICBmcmllbmQgY2xhc3MgTnVtYmVySW1wOworICAgIGZy
aWVuZCBjbGFzcyBTdHJpbmdJbXA7CiBwcml2YXRlOgogICAgIEpTQ2VsbCgpOwogICAgIHZpcnR1
YWwgfkpTQ2VsbCgpOwpAQCAtMTkzLDYgKzE5NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcHV0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSopOwogICAg
IHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKIAorcHJp
dmF0ZToKICAgICAvLyBCYXNlIGltcGxlbWVudGF0aW9uLCBidXQgZm9yIG5vbi1vYmplY3QgY2xh
c3NlcyBpbXBsZW1lbnRzIGdldFByb3BlcnR5U2xvdC4KICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CiAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21648</attachid>
            <date>2008-06-11 15:22:44 -0700</date>
            <delta_ts>2008-06-12 11:42:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>LessStringBoxingPatch.txt</filename>
            <type>text/plain</type>
            <size>23716</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0NDk5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIwMDgtMDYtMTEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NDM0CisgICAgICAgICAgc3BlZWQgdXAgU3VuU3BpZGVyIGJ5IGF2b2lkaW5nIHNvbWUgc3Ry
aW5nIGJveGluZworCisgICAgICAgIFNwZWVkcyB1cCBTdW5TcGlkZXIgYnkgMS4xJS4KKworICAg
ICAgICBPcHRpbWl6ZWQgY29kZSBwYXRoIGZvciBnZXR0aW5nIGJ1aWx0LWluIHByb3BlcnRpZXMg
ZnJvbSBzdHJpbmdzIC0tIGF2b2lkCisgICAgICAgIGJveGluZyB3aXRoIGEgc3RyaW5nIG9iamVj
dCBpbiB0aGF0IGNhc2UuIFdlIGNhbiBtYWtlIGZ1cnRoZXIgY2hhbmdlcyB0byBhdm9pZAorICAg
ICAgICBldmVuIG1vcmUgYm94aW5nLCBidXQgdGhpcyBjaGFuZ2UgYWxvbmUgaXMgYSB3aW4uCisK
KyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoS0pT
OjpKU0NhbGxiYWNrT2JqZWN0OjpzdGF0aWNWYWx1ZUdldHRlcik6IFVzZSBpc09iamVjdCBpbnN0
ZWFkIG9mIGluaGVyaXRzCisgICAgICAgIGluIGFzc3NlcnQsIHNpbmNlIHRoZSB0eXBlIG9mIHNs
b3RCYXNlKCkgaXMgbm93IEpTVmFsdWUsIG5vdCBKU09iamVjdC4KKyAgICAgICAgKEtKUzo6SlND
YWxsYmFja09iamVjdDo6c3RhdGljRnVuY3Rpb25HZXR0ZXIpOiBEaXR0by4KKyAgICAgICAgKEtK
Uzo6SlNDYWxsYmFja09iamVjdDo6Y2FsbGJhY2tHZXR0ZXIpOiBEaXR0by4KKworICAgICAgICAq
IGtqcy9pbnRlcm5hbC5jcHA6CisgICAgICAgIChLSlM6OlN0cmluZ0ltcDo6Z2V0UHJpbWl0aXZl
TnVtYmVyKTogVXBkYXRlZCBmb3IgY2hhbmdlIG9mIGRhdGEgbWVtYmVyIG5hbWUuCisgICAgICAg
IChLSlM6OlN0cmluZ0ltcDo6dG9Cb29sZWFuKTogRGl0dG8uCisgICAgICAgIChLSlM6OlN0cmlu
Z0ltcDo6dG9OdW1iZXIpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6U3RyaW5nSW1wOjp0b1N0cmlu
Zyk6IERpdHRvLgorICAgICAgICAoS0pTOjpTdHJpbmdJbnN0YW5jZTo6Y3JlYXRlKTogQWRkZWQ7
IGF2b2lkcyBhIGJpdCBvZiBjdXQgYW5kIHBhc3RlIGNvZGUuCisgICAgICAgIChLSlM6OlN0cmlu
Z0ltcDo6dG9PYmplY3QpOiBVc2UgU3RyaW5nSW5zdGFuY2U6OmNyZWF0ZS4KKyAgICAgICAgKEtK
Uzo6U3RyaW5nSW1wOjp0b1RoaXNPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6U3RyaW5n
SW1wOjpsZW5ndGhHZXR0ZXIpOiBBZGRlZC4gUmVwbGFjZXMgdGhlIGdldHRlciB0aGF0IHVzZWQg
dG8gbGl2ZSBpbgorICAgICAgICB0aGUgU3RyaW5nSW5zdGFuY2UgY2xhc3MuCisgICAgICAgIChL
SlM6OlN0cmluZ0ltcDo6aW5kZXhHZXR0ZXIpOiBEaXR0by4KKyAgICAgICAgKEtKUzo6U3RyaW5n
SW1wOjppbmRleE51bWVyaWNQcm9wZXJ0eUdldHRlcik6IERpdHRvLgorICAgICAgICAoS0pTOjpT
dHJpbmdJbXA6OmdldE93blByb3BlcnR5U2xvdCk6IEFkZGVkLiBEZWFscyB3aXRoIGJ1aWx0IGlu
IHByb3BlcnRpZXMgb2YKKyAgICAgICAgdGhlIHN0cmluZyBjbGFzcyB3aXRob3V0IGNyZWF0aW5n
IGEgU3RyaW5nSW5zdGFuY2UuCisKKyAgICAgICAgKiBranMvaW50ZXJuYWwuaDoKKyAgICAgICAg
KEtKUzo6U3RyaW5nSW1wOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QpOiBBZGRlZC4gVG8gYmUgdXNl
ZCBieSBib3RoIHRoZSBzdHJpbmcKKyAgICAgICAgYW5kIHN0cmluZyBvYmplY3QgZ2V0T3duUHJv
cGVydHlTbG90IGZ1bmN0aW9uLgorCisgICAgICAgICoga2pzL2xvb2t1cC5oOgorICAgICAgICAo
S0pTOjpzdGF0aWNGdW5jdGlvbkdldHRlcik6IFVwZGF0ZWQgc2luY2Ugc2xvdEJhc2UoKSBpcyBu
b3cgYSBKU1ZhbHVlIHJhdGhlcgorICAgICAgICB0aGFuIGEgSlNPYmplY3QuCisKKyAgICAgICAg
KiBranMvb2JqZWN0Lmg6IFJlbW92ZWQgUHJvcGVydHlTbG90OjpzbG90QmFzZSgpIGZ1bmN0aW9u
LCB3aGljaCBjYW4gbm93IG1vdmUKKyAgICAgICAgYmFjayBpbnRvIHByb3BlcnR5X3Nsb3QuaCB3
aGVyZSBpdCBiZWxvbmdzIHNpbmNlIGl0IGRvZXNuJ3QgaGF2ZSB0byBjYXN0IHRvCisgICAgICAg
IEpTT2JqZWN0Ki4KKworICAgICAgICAqIGtqcy9wcm9wZXJ0eV9zbG90LmNwcDoKKyAgICAgICAg
KEtKUzo6UHJvcGVydHlTbG90OjpmdW5jdGlvbkdldHRlcik6IFVwZGF0ZWQgc2luY2Ugc2xvdC5z
bG90QmFzZSgpIGlzIG5vdyBhIEpTVmFsdWUqCisgICAgICAgIGluc3RlYWQgb2YgSlNPYmplY3Qq
LiBzZXRHZXR0ZXJTbG90IHN0aWxsIGd1YXJhbnRlZXMgdGhlIGJhc2UgaXMgYSBKU09iamVjdCou
CisgICAgICAgICoga2pzL3Byb3BlcnR5X3Nsb3QuaDoKKyAgICAgICAgKEtKUzo6UHJvcGVydHlT
bG90OjpQcm9wZXJ0eVNsb3QpOiBDaGFuZ2VkIGJhc2UgdG8gSlNWYWx1ZSogaW50ZWFkIG9mIEpT
Q2VsbCouCisgICAgICAgIChLSlM6OlByb3BlcnR5U2xvdDo6c2V0U3RhdGljRW50cnkpOiBEaXR0
by4KKyAgICAgICAgKEtKUzo6UHJvcGVydHlTbG90OjpzZXRDdXN0b20pOiBEaXR0by4KKyAgICAg
ICAgKEtKUzo6UHJvcGVydHlTbG90OjpzZXRDdXN0b21JbmRleCk6IERpdHRvLgorICAgICAgICAo
S0pTOjpQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbU51bWVyaWMpOiBEaXR0by4KKyAgICAgICAgKEtK
Uzo6UHJvcGVydHlTbG90OjpzbG90QmFzZSk6IE1vdmVkIGlubGluZSBoZXJlIHNpbmNlIGl0IG5v
IGxvbmdlciBpbnZvbHZlcyBhCisgICAgICAgIGRvd25jYXN0IHRvIEpTT2JqZWN0Ki4KKyAgICAg
ICAgKEtKUzo6UHJvcGVydHlTbG90OjpzZXRCYXNlKTogQ2hhbmdlZCB0byBKU1ZhbHVlKi4KKwor
ICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6U3RyaW5nSW5z
dGFuY2U6OmdldE93blByb3BlcnR5U2xvdCk6IENoYW5nZWQgdG8gdXNlIGdldFN0cmluZ1Byb3Bl
cnR5U2xvdAorICAgICAgICBpbnN0ZWFkIG9mIGNvZGluZyB0aGUgcHJvcGVydGllcyBoZXJlLiBU
aGlzIGFsbG93cyBzaGFyaW5nIHRoZSBjb2RlIHdpdGggU3RyaW5nSW1wLgorCisgICAgICAgICog
a2pzL3N0cmluZ19vYmplY3QuaDogUmVtb3ZlZCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QsIGxl
bmd0aEdldHRlciwgYW5kIGluZGV4R2V0dGVyLgorICAgICAgICBNYWRlIG9uZSBvZiB0aGUgY29u
c3RydWN0b3JzIHByb3RlY3RlZC4KKworICAgICAgICAqIGtqcy92YWx1ZS5oOiBNYWRlIGdldE93
blByb3BlcnR5U2xvdCBwcml2YXRlIGluIHRoZSBKU0NlbGwgY2xhc3MgLS0gdGhpcyBpcyBiZXR0
ZXIKKyAgICAgICAgc2luY2UgaXQncyBub3QgdGhlIHJlYWwgSlNPYmplY3QgZ2V0T3duUHJvcGVy
dHlTbG90IHNlbWFudGljIGFuZCBtb3N0IGNhbGxlcnMgc2hvdWxkbid0CisgICAgICAgIHVzZSBp
dC4KKwogMjAwOC0wNi0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAzNDQ5OSkKKysrIEphdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
Nyw3ICs0MzcsNyBAQCBKU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpjYWNoZWRWCiB0
ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KIEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0
YXRpY1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgQVNTRVJUKHNsb3Quc2xv
dEJhc2UoKS0+aW5oZXJpdHMoJkpTQ2FsbGJhY2tPYmplY3Q6OmluZm8pKTsKKyAgICBBU1NFUlQo
c2xvdC5zbG90QmFzZSgpLT5pc09iamVjdCgmSlNDYWxsYmFja09iamVjdDo6aW5mbykpOwogICAg
IEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrT2JqZWN0
Kj4oc2xvdC5zbG90QmFzZSgpKTsKICAgICAKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9S
ZWYodGhpc09iaik7CkBAIC00NTgsNyArNDU4LDcgQEAgSlNWYWx1ZSogSlNDYWxsYmFja09iamVj
dDxCYXNlPjo6c3RhdGljVgogdGVtcGxhdGUgPGNsYXNzIEJhc2U+CiBKU1ZhbHVlKiBKU0NhbGxi
YWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQog
ewotICAgIEFTU0VSVChzbG90LnNsb3RCYXNlKCktPmluaGVyaXRzKCZKU0NhbGxiYWNrT2JqZWN0
OjppbmZvKSk7CisgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS0+aXNPYmplY3QoJkpTQ2FsbGJh
Y2tPYmplY3Q6OmluZm8pKTsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqID0gc3RhdGlj
X2Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KHNsb3Quc2xvdEJhc2UoKSk7CiAgICAgCiAgICAgLy8g
Q2hlY2sgZm9yIGNhY2hlZCBvciBvdmVycmlkZSBwcm9wZXJ0eS4KQEAgLTQ4NCw3ICs0ODQsNyBA
QCBKU1ZhbHVlKiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpzdGF0aWNGCiB0ZW1wbGF0ZSA8Y2xh
c3MgQmFzZT4KIEpTVmFsdWUqIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OmNhbGxiYWNrR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS0+aW5oZXJp
dHMoJkpTQ2FsbGJhY2tPYmplY3Q6OmluZm8pKTsKKyAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgp
LT5pc09iamVjdCgmSlNDYWxsYmFja09iamVjdDo6aW5mbykpOwogICAgIEpTQ2FsbGJhY2tPYmpl
Y3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4oc2xvdC5zbG90QmFz
ZSgpKTsKICAgICAKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYodGhpc09iaik7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2tqcy9pbnRlcm5hbC5jcHAJKHJldmlzaW9uIDM0NDk5KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL2ludGVybmFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMzMgKzU5LDg0IEBA
IEpTVmFsdWUqIFN0cmluZ0ltcDo6dG9QcmltaXRpdmUoRXhlY1N0YXQKIGJvb2wgU3RyaW5nSW1w
OjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUq
JiB2YWx1ZSkKIHsKICAgICB2YWx1ZSA9IHRoaXM7Ci0gICAgbnVtYmVyID0gdmFsLnRvRG91Ymxl
KCk7CisgICAgbnVtYmVyID0gbV92YWx1ZS50b0RvdWJsZSgpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBTdHJpbmdJbXA6OnRvQm9vbGVhbihFeGVjU3RhdGUgKikgY29uc3QKK2Jvb2wg
U3RyaW5nSW1wOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QKIHsKLSAgcmV0dXJuICh2YWwu
c2l6ZSgpID4gMCk7CisgICAgcmV0dXJuICFtX3ZhbHVlLmlzRW1wdHkoKTsKIH0KIAotZG91Ymxl
IFN0cmluZ0ltcDo6dG9OdW1iZXIoRXhlY1N0YXRlICopIGNvbnN0Citkb3VibGUgU3RyaW5nSW1w
Ojp0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdAogewotICByZXR1cm4gdmFsLnRvRG91YmxlKCk7
CisgICAgcmV0dXJuIG1fdmFsdWUudG9Eb3VibGUoKTsKIH0KIAotVVN0cmluZyBTdHJpbmdJbXA6
OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqKSBjb25zdAorVVN0cmluZyBTdHJpbmdJbXA6OnRvU3RyaW5n
KEV4ZWNTdGF0ZSopIGNvbnN0CiB7Ci0gIHJldHVybiB2YWw7CisgICAgcmV0dXJuIG1fdmFsdWU7
CiB9CiAKLUpTT2JqZWN0KiBTdHJpbmdJbXA6OnRvT2JqZWN0KEV4ZWNTdGF0ZSAqZXhlYykgY29u
c3QKK2lubGluZSBTdHJpbmdJbnN0YW5jZSogU3RyaW5nSW5zdGFuY2U6OmNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFN0cmluZ0ltcCogc3RyaW5nKQogewotICAgIHJldHVybiBuZXcgU3RyaW5nSW5z
dGFuY2UoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUoKSwgY29u
c3RfY2FzdDxTdHJpbmdJbXAqPih0aGlzKSk7CisgICAgcmV0dXJuIG5ldyBTdHJpbmdJbnN0YW5j
ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpLCBzdHJpbmcp
OworfQorCitKU09iamVjdCogU3RyaW5nSW1wOjp0b09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFN0cmluZ0luc3RhbmNlOjpjcmVhdGUoZXhlYywgY29uc3RfY2Fz
dDxTdHJpbmdJbXAqPih0aGlzKSk7CiB9CiAKIEpTT2JqZWN0KiBTdHJpbmdJbXA6OnRvVGhpc09i
amVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldyBTdHJpbmdJbnN0
YW5jZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpLCBjb25z
dF9jYXN0PFN0cmluZ0ltcCo+KHRoaXMpKTsKKyAgICByZXR1cm4gU3RyaW5nSW5zdGFuY2U6OmNy
ZWF0ZShleGVjLCBjb25zdF9jYXN0PFN0cmluZ0ltcCo+KHRoaXMpKTsKK30KKworSlNWYWx1ZSog
U3RyaW5nSW1wOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nh
c3Q8U3RyaW5nSW1wKj4oc2xvdC5zbG90QmFzZSgpKS0+dmFsdWUoKS5zaXplKCkpOworfQorCitK
U1ZhbHVlKiBTdHJpbmdJbXA6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGpzU3RyaW5nKHN0
YXRpY19jYXN0PFN0cmluZ0ltcCo+KHNsb3Quc2xvdEJhc2UoKSktPnZhbHVlKCkuc3Vic3RyKHNs
b3QuaW5kZXgoKSwgMSkpOworfQorCitKU1ZhbHVlKiBTdHJpbmdJbXA6OmluZGV4TnVtZXJpY1By
b3BlcnR5R2V0dGVyKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRpY19jYXN0PFN0cmluZ0ltcCo+
KHNsb3Quc2xvdEJhc2UoKSktPnZhbHVlKCkuc3Vic3RyKGluZGV4LCAxKSk7Cit9CisKK2Jvb2wg
U3RyaW5nSW1wOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICAvLyBUaGUg
c2VtYW50aWNzIGhlcmUgYXJlIHJlYWxseSBnZXRQcm9wZXJ0eVNsb3QsIG5vdCBnZXRPd25Qcm9w
ZXJ0eVNsb3QuCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkg
SlNWYWx1ZTo6Z2V0LgorICAgIGlmIChnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgSlNPYmplY3QqIG9iamVj
dCA9IFN0cmluZ0luc3RhbmNlOjpjcmVhdGUoZXhlYywgdGhpcyk7CisgICAgc2xvdC5zZXRCYXNl
KG9iamVjdCk7CisgICAgaWYgKG9iamVjdC0+SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICBKU1ZhbHVlKiBwcm90byA9IG9iamVjdC0+cHJvdG90eXBlKCk7
CisgICAgICAgIGlmICghcHJvdG8tPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0
VW5kZWZpbmVkKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHByb3RvKTsKKyAgICAgICAgaWYgKG9i
amVjdC0+Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgU3RyaW5nSW1wOjpnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICAvLyBUaGUgc2VtYW50aWNzIGhlcmUgYXJlIHJlYWxseSBn
ZXRQcm9wZXJ0eVNsb3QsIG5vdCBnZXRPd25Qcm9wZXJ0eVNsb3QuCisgICAgLy8gVGhpcyBmdW5j
dGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgSlNWYWx1ZTo6Z2V0LgorICAgIGlmIChnZXRT
dHJpbmdQcm9wZXJ0eVNsb3QocHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIFN0cmluZ0ltcDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIElkZW50
aWZpZXI6OmZyb20ocHJvcGVydHlOYW1lKSwgc2xvdCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBOdW1iZXJJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuaAkocmV2aXNpb24gMzQ0OTkpCisrKyBKYXZh
U2NyaXB0Q29yZS9ranMvaW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsNDkgKzI0LDcwIEBACiAjaWZuZGVmIElOVEVSTkFMX0gK
ICNkZWZpbmUgSU5URVJOQUxfSAogCi0jaW5jbHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVkZSAib2Jq
ZWN0LmgiCi0jaW5jbHVkZSAicHJvdGVjdC5oIgotI2luY2x1ZGUgInNjb3BlX2NoYWluLmgiCi0j
aW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlICJ1c3RyaW5nLmgiCiAKLSNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KLQotI2RlZmluZSBJMThOX05PT1AocykgcwotCiBuYW1lc3BhY2UgS0pT
IHsKIAotICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZTsKLQotICAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbWl0aXZlIGltcGxzCi0gIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCiAgIGNsYXNzIFN0cmluZ0ltcCA6IHB1YmxpYyBKU0NlbGwg
ewogICBwdWJsaWM6Ci0gICAgU3RyaW5nSW1wKGNvbnN0IFVTdHJpbmcmIHYpIDogdmFsKHYpIHsg
Q29sbGVjdG9yOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3Qodi5jb3N0KCkpOyB9CisgICAgU3RyaW5n
SW1wKGNvbnN0IFVTdHJpbmcmIHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHsgQ29sbGVjdG9yOjpy
ZXBvcnRFeHRyYU1lbW9yeUNvc3QodmFsdWUuY29zdCgpKTsgfQogICAgIGVudW0gSGFzT3RoZXJP
d25lclR5cGUgeyBIYXNPdGhlck93bmVyIH07Ci0gICAgU3RyaW5nSW1wKGNvbnN0IFVTdHJpbmcm
IHZhbHVlLCBIYXNPdGhlck93bmVyVHlwZSkgOiB2YWwodmFsdWUpIHsgfQotICAgIGNvbnN0IFVT
dHJpbmcmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFsOyB9CisgICAgU3RyaW5nSW1wKGNvbnN0
IFVTdHJpbmcmIHZhbHVlLCBIYXNPdGhlck93bmVyVHlwZSkgOiBtX3ZhbHVlKHZhbHVlKSB7IH0K
KworICAgIGNvbnN0IFVTdHJpbmcmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQor
CisgICAgYm9vbCBnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBib29sIGdldFN0cmluZ1By
b3BlcnR5U2xvdCh1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBKU1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZ1R5
cGU7IH0KIAogICAgIHZpcnR1YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgSlNU
eXBlIHByZWZlcnJlZCA9IFVuc3BlY2lmaWVkVHlwZSkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSom
IHZhbHVlKTsKLSAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSAqZXhlYykgY29u
c3Q7Ci0gICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlICpleGVjKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEpTT2JqZWN0ICp0b09iamVjdChFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7CisgICAgdmlydHVh
bCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgdmlydHVhbCBKU09iamVj
dCogdG9PYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3Ry
aW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVj
dChFeGVjU3RhdGUqKSBjb25zdDsKIAotICAgIFVTdHJpbmcgdmFsOworICAgIC8vIEFjdHVhbGx5
IGdldFByb3BlcnR5U2xvdCwgbm90IGdldE93blByb3BlcnR5U2xvdCAoc2VlIEpTQ2VsbCkuCisg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKKworICAgIHN0YXRpYyBKU1ZhbHVlKiBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBK
U1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIEpTVmFsdWUqIGluZGV4TnVtZXJpY1Byb3BlcnR5
R2V0dGVyKEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKworICAg
IFVTdHJpbmcgbV92YWx1ZTsKICAgfTsKIAotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZhbHVhdGlvbgotICAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KK0FMV0FZU19JTkxJTkUgYm9vbCBTdHJpbmdJbXA6OmdldFN0cmluZ1Byb3BlcnR5U2xv
dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBsZW5ndGhHZXR0
ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGlzU3RyaWN0VUlu
dDMyOworICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUudG9TdHJpY3RVSW50MzIoJmlzU3Ry
aWN0VUludDMyKTsKKyAgICBpZiAoaXNTdHJpY3RVSW50MzIgJiYgaSA8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX3ZhbHVlLnNpemUoKSkpIHsKKyAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0
aGlzLCBpLCBpbmRleEdldHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKyAgICAKK0FMV0FZU19JTkxJTkUgYm9vbCBTdHJpbmdJbXA6Omdl
dFN0cmluZ1Byb3BlcnR5U2xvdCh1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBpZiAocHJvcGVydHlOYW1lIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
dmFsdWUuc2l6ZSgpKSkgeworICAgICAgICBzbG90LnNldEN1c3RvbU51bWVyaWModGhpcywgaW5k
ZXhOdW1lcmljUHJvcGVydHlHZXR0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIH0gLy8gbmFtZXNwYWNlCiAKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9sb29rdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbG9v
a3VwLmgJKHJldmlzaW9uIDM0NDk5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2xvb2t1cC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw4IEBAIG5hbWVzcGFjZSBLSlMgewogICBpbmxpbmUg
SlNWYWx1ZSogc3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKICAgewogICAg
ICAgLy8gTG9vayBmb3IgY2FjaGVkIHZhbHVlIGluIGR5bmFtaWMgbWFwIG9mIHByb3BlcnRpZXMg
KGluIEpTT2JqZWN0KQotICAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBzbG90LnNsb3RCYXNlKCk7
CisgICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpLT5pc09iamVjdCgpKTsKKyAgICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihzbG90LnNsb3RCYXNlKCkpOwog
ICAgICAgSlNWYWx1ZSogY2FjaGVkVmFsID0gdGhpc09iai0+Z2V0RGlyZWN0KHByb3BlcnR5TmFt
ZSk7CiAgICAgICBpZiAoY2FjaGVkVmFsKQogICAgICAgICByZXR1cm4gY2FjaGVkVmFsOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9vYmplY3QuaAkocmV2aXNpb24gMzQ0OTkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
b2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwMSwxNCArNzAxLDYgQEAgaW5saW5lIHZvaWQg
SlNWYWx1ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYwogICAgIGFzQ2VsbCgpLT5wdXQoZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSk7CiB9CiAKLWlubGluZSBKU09iamVjdCogUHJvcGVydHlTbG90Ojpz
bG90QmFzZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fc2xvdEJhc2UpOwotICAgIC8vIEl0J3Mg
YmUgbmljZSB0byBhc3NlcnQgdGhhdCBtX3Nsb3RCYXNlIGlzIGFuIG9iamVjdCBoZXJlLCBidXQg
dGhhdCdzIGEgYml0Ci0gICAgLy8gdG9vIHNsb3csIGV2ZW4gZm9yIGRlYnVnIGJ1aWxkcy4KLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihtX3Nsb3RCYXNlKTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UKIAogI2VuZGlmIC8vIEtKU19PQkpFQ1RfSApJbmRleDogSmF2YVNjcmlwdENvcmUv
a2pzL3Byb3BlcnR5X3Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9w
cm9wZXJ0eV9zbG90LmNwcAkocmV2aXNpb24gMzQ0OTkpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
cHJvcGVydHlfc2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDExICszOSwxMSBAQCBKU1Zh
bHVlKiBQcm9wZXJ0eVNsb3Q6OmZ1bmN0aW9uR2V0dGVyKEV4CiAgICAgQ2FsbERhdGEgZGF0YTsK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNsb3QubV9kYXRhLmdldHRlckZ1bmMtPmdldENhbGxE
YXRhKGRhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5hdGl2ZSkKLSAgICAgICAg
cmV0dXJuIHNsb3QubV9kYXRhLmdldHRlckZ1bmMtPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIHNsb3Qu
c2xvdEJhc2UoKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgICAgICByZXR1cm4gc2xvdC5tX2Rh
dGEuZ2V0dGVyRnVuYy0+Y2FsbEFzRnVuY3Rpb24oZXhlYywgc3RhdGljX2Nhc3Q8SlNPYmplY3Qq
PihzbG90LnNsb3RCYXNlKCkpLCBleGVjLT5lbXB0eUxpc3QoKSk7CiAgICAgQVNTRVJUKGNhbGxU
eXBlID09IENhbGxUeXBlSlMpOwogICAgIFJlZ2lzdGVyRmlsZVN0YWNrKiBzdGFjayA9ICZleGVj
LT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnJlZ2lzdGVyRmlsZVN0YWNrKCk7CiAgICAgc3RhY2st
PnB1c2hGdW5jdGlvblJlZ2lzdGVyRmlsZSgpOwotICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3Qu
bV9kYXRhLmdldHRlckZ1bmMtPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIHNsb3Quc2xvdEJhc2UoKSwg
ZXhlYy0+ZW1wdHlMaXN0KCkpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IHNsb3QubV9kYXRhLmdl
dHRlckZ1bmMtPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oc2xv
dC5zbG90QmFzZSgpKSwgZXhlYy0+ZW1wdHlMaXN0KCkpOwogICAgIHN0YWNrLT5wb3BGdW5jdGlv
blJlZ2lzdGVyRmlsZSgpOwogICAgIHJldHVybiByZXN1bHQ7ICAgIAogfQpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL3Byb3BlcnR5X3Nsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvcHJvcGVydHlfc2xvdC5oCShyZXZpc2lvbiAzNDQ5OSkKKysrIEphdmFTY3JpcHRDb3Jl
L2tqcy9wcm9wZXJ0eV9zbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVi
bGljOgogICAgICAgICBjbGVhckJhc2UoKTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBQcm9wZXJ0
eVNsb3QoSlNDZWxsKiBiYXNlKQorICAgIGV4cGxpY2l0IFByb3BlcnR5U2xvdChKU1ZhbHVlKiBi
YXNlKQogICAgICAgICA6IG1fc2xvdEJhc2UoYmFzZSkKICAgICB7CiAgICAgfQpAQCAtODIsNyAr
ODIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGF0YS52YWx1ZVNsb3QgPSB2YWx1ZVNsb3Q7CiAg
ICAgfQogCi0gICAgdm9pZCBzZXRTdGF0aWNFbnRyeShKU0NlbGwqIHNsb3RCYXNlLCBjb25zdCBI
YXNoRW50cnkqIHN0YXRpY0VudHJ5LCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWUpCisgICAgdm9pZCBz
ZXRTdGF0aWNFbnRyeShKU1ZhbHVlKiBzbG90QmFzZSwgY29uc3QgSGFzaEVudHJ5KiBzdGF0aWNF
bnRyeSwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHNsb3RC
YXNlKTsKICAgICAgICAgQVNTRVJUKHN0YXRpY0VudHJ5KTsKQEAgLTkyLDcgKzkyLDcgQEAgcHVi
bGljOgogICAgICAgICBtX2RhdGEuc3RhdGljRW50cnkgPSBzdGF0aWNFbnRyeTsKICAgICB9CiAK
LSAgICB2b2lkIHNldEN1c3RvbShKU0NlbGwqIHNsb3RCYXNlLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFs
dWUpCisgICAgdm9pZCBzZXRDdXN0b20oSlNWYWx1ZSogc2xvdEJhc2UsIEdldFZhbHVlRnVuYyBn
ZXRWYWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CiAgICAgICAgIEFTU0VS
VChnZXRWYWx1ZSk7CkBAIC0xMDAsNyArMTAwLDcgQEAgcHVibGljOgogICAgICAgICBtX3Nsb3RC
YXNlID0gc2xvdEJhc2U7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDdXN0b21JbmRleChKU0NlbGwq
IHNsb3RCYXNlLCB1bnNpZ25lZCBpbmRleCwgR2V0VmFsdWVGdW5jIGdldFZhbHVlKQorICAgIHZv
aWQgc2V0Q3VzdG9tSW5kZXgoSlNWYWx1ZSogc2xvdEJhc2UsIHVuc2lnbmVkIGluZGV4LCBHZXRW
YWx1ZUZ1bmMgZ2V0VmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoc2xvdEJhc2UpOwogICAg
ICAgICBBU1NFUlQoZ2V0VmFsdWUpOwpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9kYXRhLmluZGV4ID0gaW5kZXg7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Q3VzdG9t
TnVtZXJpYyhKU0NlbGwqIHNsb3RCYXNlLCBHZXRWYWx1ZU51bWVyaWNGdW5jIGdldFZhbHVlKQor
ICAgIHZvaWQgc2V0Q3VzdG9tTnVtZXJpYyhKU1ZhbHVlKiBzbG90QmFzZSwgR2V0VmFsdWVOdW1l
cmljRnVuYyBnZXRWYWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzbG90QmFzZSk7CiAgICAg
ICAgIEFTU0VSVChnZXRWYWx1ZSk7CkBAIC0xMzEsOSArMTMxLDkgQEAgcHVibGljOgogICAgICAg
ICBtX2dldFZhbHVlID0gdW5kZWZpbmVkR2V0dGVyOwogICAgIH0KIAotICAgIEpTT2JqZWN0KiBz
bG90QmFzZSgpIGNvbnN0OworICAgIEpTVmFsdWUqIHNsb3RCYXNlKCkgY29uc3QgeyBBU1NFUlQo
bV9zbG90QmFzZSk7IHJldHVybiBtX3Nsb3RCYXNlOyB9CiAKLSAgICB2b2lkIHNldEJhc2UoSlND
ZWxsKiBiYXNlKQorICAgIHZvaWQgc2V0QmFzZShKU1ZhbHVlKiBiYXNlKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fc2xvdEJhc2UpOwogICAgICAgICBBU1NFUlQoYmFzZSk7CkBAIC0xNTYsNyAr
MTU2LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBHZXRWYWx1ZUZ1bmMgbV9nZXRWYWx1ZTsKIAot
ICAgIEpTQ2VsbCogbV9zbG90QmFzZTsKKyAgICBKU1ZhbHVlKiBtX3Nsb3RCYXNlOwogICAgIHVu
aW9uIHsKICAgICAgICAgSlNPYmplY3QqIGdldHRlckZ1bmM7CiAgICAgICAgIEpTVmFsdWUqKiB2
YWx1ZVNsb3Q7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuY3BwCShyZXZpc2lv
biAzNDQ5OSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNDcgKzU4LDE3IEBAIFN0cmluZ0luc3RhbmNlOjpTdHJpbmdJbnN0YW5j
ZShKU09iamVjdCAKICAgc2V0SW50ZXJuYWxWYWx1ZShqc1N0cmluZyhzdHJpbmcpKTsKIH0KIAot
SlNWYWx1ZSAqU3RyaW5nSW5zdGFuY2U6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90ICZzbG90KQotewotICAgIHJldHVybiBqc051
bWJlcihzdGF0aWNfY2FzdDxTdHJpbmdJbnN0YW5jZSo+KHNsb3Quc2xvdEJhc2UoKSktPmludGVy
bmFsVmFsdWUoKS0+dmFsdWUoKS5zaXplKCkpOwotfQotCi1KU1ZhbHVlKiBTdHJpbmdJbnN0YW5j
ZTo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4ganNTdHJpbmcoc3RhdGljX2Nhc3Q8U3RyaW5n
SW5zdGFuY2UqPihzbG90LnNsb3RCYXNlKCkpLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkuc3Vi
c3RyKHNsb3QuaW5kZXgoKSwgMSkpOwotfQotCi1zdGF0aWMgSlNWYWx1ZSogc3RyaW5nSW5zdGFu
Y2VOdW1lcmljUHJvcGVydHlHZXR0ZXIoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4ganNTdHJpbmcoc3RhdGljX2Nhc3Q8
U3RyaW5nSW5zdGFuY2UqPihzbG90LnNsb3RCYXNlKCkpLT5pbnRlcm5hbFZhbHVlKCktPnZhbHVl
KCkuc3Vic3RyKGluZGV4LCAxKSk7Ci19Ci0KIGJvb2wgU3RyaW5nSW5zdGFuY2U6OmdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBs
ZW5ndGhHZXR0ZXIpOworICAgIGlmIChpbnRlcm5hbFZhbHVlKCktPmdldFN0cmluZ1Byb3BlcnR5
U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBib29sIGlzU3RyaWN0VUludDMyOwotICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0
eU5hbWUudG9TdHJpY3RVSW50MzIoJmlzU3RyaWN0VUludDMyKTsKLSAgICB1bnNpZ25lZCBsZW5n
dGggPSBpbnRlcm5hbFZhbHVlKCktPnZhbHVlKCkuc2l6ZSgpOwotICAgIGlmIChpc1N0cmljdFVJ
bnQzMiAmJiBpIDwgbGVuZ3RoKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywg
aSwgaW5kZXhHZXR0ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCiAgICAg
cmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKIH0KICAgICAKIGJvb2wgU3RyaW5nSW5zdGFuY2U6OmdldE93blByb3BlcnR5U2xvdChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQogewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGludGVybmFsVmFsdWUoKS0+dmFsdWUoKS5zaXpl
KCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA8IGxlbmd0aCkgewotICAgICAgICBzbG90LnNldEN1
c3RvbU51bWVyaWModGhpcywgc3RyaW5nSW5zdGFuY2VOdW1lcmljUHJvcGVydHlHZXR0ZXIpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCisgICAgaWYgKGludGVybmFsVmFsdWUo
KS0+Z2V0U3RyaW5nUHJvcGVydHlTbG90KHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJl
dHVybiB0cnVlOyAgICAKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKHByb3BlcnR5TmFtZSksIHNsb3QpOwogfQogCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgJKHJldmlzaW9uIDM0NDk5KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL3N0cmluZ19vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAK
IC8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0KIC8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEtERSBsaWJyYXJpZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zMSwy
NyArMzEsMjUgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgU3RyaW5nSW5zdGFuY2UgOiBw
dWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAgcHVibGljOgotICAgIFN0cmluZ0luc3RhbmNlKEpT
T2JqZWN0ICpwcm90byk7Ci0gICAgU3RyaW5nSW5zdGFuY2UoSlNPYmplY3QgKnByb3RvLCBTdHJp
bmdJbXAqKTsKLSAgICBTdHJpbmdJbnN0YW5jZShKU09iamVjdCAqcHJvdG8sIGNvbnN0IFVTdHJp
bmcmKTsKKyAgICBTdHJpbmdJbnN0YW5jZShKU09iamVjdCogcHJvdG90eXBlKTsKKyAgICBTdHJp
bmdJbnN0YW5jZShKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBVU3RyaW5nJik7CisKKyAgICBz
dGF0aWMgU3RyaW5nSW5zdGFuY2UqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJpbmdJbXAqKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJvcGVy
dHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOworICAg
IHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUpOwogICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5m
byAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKICAgICBTdHJpbmdJbXAqIGludGVybmFsVmFsdWUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTdHJpbmdJbXAqPihKU1dyYXBwZXJPYmplY3Q6
OmludGVybmFsVmFsdWUoKSk7fQogCi0gIHByaXZhdGU6Ci0gICAgYm9vbCBpbmxpbmVHZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQsIFByb3BlcnR5U2xvdCYpOwotCi0gICAg
c3RhdGljIEpTVmFsdWUqIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIEpTVmFsdWUqIGluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKKyAg
cHJvdGVjdGVkOgorICAgIFN0cmluZ0luc3RhbmNlKEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cmlu
Z0ltcCopOwogICB9OwogCiAgIC8vIFdlYkNvcmUgdXNlcyB0aGlzIHRvIG1ha2Ugc3R5bGUuZmls
dGVyIHVuZGV0ZWN0YWJsZQpAQCAtMTQzLDEwICsxNDEsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
Y2xhc3MgU3RyaW5nT2JqZWN0RnVuY0ltcCA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsK
ICAgcHVibGljOgogICAgIFN0cmluZ09iamVjdEZ1bmNJbXAoRXhlY1N0YXRlKiwgRnVuY3Rpb25Q
cm90b3R5cGUqLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgdmlydHVhbCBKU1ZhbHVlICpjYWxs
QXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKTsKICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UKIAogI2VuZGlmCi0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCShyZXZpc2lvbiAzNDQ5OSkKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy92YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0xNDIsMTEgKzE0MiwxMiBAQCBwcml2YXRlOgogCiBjbGFzcyBKU0NlbGwgOiBw
dWJsaWMgSlNWYWx1ZSB7CiAgICAgZnJpZW5kIGNsYXNzIENvbGxlY3RvcjsKLSAgICBmcmllbmQg
Y2xhc3MgTnVtYmVySW1wOwotICAgIGZyaWVuZCBjbGFzcyBTdHJpbmdJbXA7Ci0gICAgZnJpZW5k
IGNsYXNzIEpTT2JqZWN0OwogICAgIGZyaWVuZCBjbGFzcyBHZXR0ZXJTZXR0ZXJJbXA7CisgICAg
ZnJpZW5kIGNsYXNzIEpTT2JqZWN0OwogICAgIGZyaWVuZCBjbGFzcyBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBKU1ZhbHVlOworICAgIGZyaWVuZCBjbGFzcyBOdW1i
ZXJJbXA7CisgICAgZnJpZW5kIGNsYXNzIFN0cmluZ0ltcDsKIHByaXZhdGU6CiAgICAgSlNDZWxs
KCk7CiAgICAgdmlydHVhbCB+SlNDZWxsKCk7CkBAIC0xOTMsNiArMTk0LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlKik7CiAgICAgdmlydHVhbCBKU09iamVjdCogdG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSop
IGNvbnN0OwogCitwcml2YXRlOgogICAgIC8vIEJhc2UgaW1wbGVtZW50YXRpb24sIGJ1dCBmb3Ig
bm9uLW9iamVjdCBjbGFzc2VzIGltcGxlbWVudHMgZ2V0UHJvcGVydHlTbG90LgogICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7Cg==
</data>
<flag name="review"
          id="9488"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>