<?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>118749</bug_id>
          
          <creation_ts>2013-07-16 14:51:05 -0700</creation_ts>
          <short_desc>fourthTier: DFG should do a high-level LICM before going to FTL</short_desc>
          <delta_ts>2013-07-22 22:39:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>118750</dependson>
    
    <dependson>118774</dependson>
    
    <dependson>118778</dependson>
    
    <dependson>118835</dependson>
    
    <dependson>118866</dependson>
    
    <dependson>118880</dependson>
    
    <dependson>118910</dependson>
    
    <dependson>118946</dependson>
    
    <dependson>118956</dependson>
    
    <dependson>118957</dependson>
          <blocked>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>909018</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-16 14:51:05 -0700</bug_when>
    <thetext>Fun!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909141</commentid>
    <comment_count>1</comment_count>
      <attachid>206847</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-16 21:31:50 -0700</bug_when>
    <thetext>Created attachment 206847
WRONG PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910394</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 18:48:19 -0700</bug_when>
    <thetext>Some notes:

- We cannot hoist, or sink, anything that has effects. This means that the easiest way of indicating that something cannot be hoisted is to claim that it side-effects some miscellaneous thing.

- Whenever we hoist, we must replace the original node with a Phantom.

- We cannot hoist forward-exiting nodes without some additional effort.  I believe that what it comes down to is that forward-exiting generally have their NodeExitsForward cleared upon hoist, except for forward-exiting nodes that take bogus state as their input.  Those are substantially harder. :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910549</commentid>
    <comment_count>3</comment_count>
      <attachid>207215</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-21 15:29:25 -0700</bug_when>
    <thetext>Created attachment 207215
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910558</commentid>
    <comment_count>4</comment_count>
      <attachid>207218</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-21 16:20:56 -0700</bug_when>
    <thetext>Created attachment 207218
it might work

But I can&apos;t test it because the prerequisites haven&apos;t landed yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910579</commentid>
    <comment_count>5</comment_count>
      <attachid>207218</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-21 20:37:00 -0700</bug_when>
    <thetext>Comment on attachment 207218
it might work

I didn&apos;t mean to set r?, since I haven&apos;t even compiled this yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910590</commentid>
    <comment_count>6</comment_count>
      <attachid>207225</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-21 21:57:03 -0700</bug_when>
    <thetext>Created attachment 207225
it just motioned some loop-invariant code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910592</commentid>
    <comment_count>7</comment_count>
      <attachid>207225</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-21 22:04:50 -0700</bug_when>
    <thetext>Comment on attachment 207225
it just motioned some loop-invariant code

Once again, I didn&apos;t mean to r?.  I haven&apos;t fully tested it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910593</commentid>
    <comment_count>8</comment_count>
      <attachid>207226</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-21 22:12:44 -0700</bug_when>
    <thetext>Created attachment 207226
fixed some stuff

I totally forgot about updating the state-at-tail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910756</commentid>
    <comment_count>9</comment_count>
      <attachid>207259</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-22 11:45:48 -0700</bug_when>
    <thetext>Created attachment 207259
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910759</commentid>
    <comment_count>10</comment_count>
      <attachid>207260</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-22 11:47:14 -0700</bug_when>
    <thetext>Created attachment 207260
the patch

Fix changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910846</commentid>
    <comment_count>11</comment_count>
      <attachid>207286</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-22 15:22:05 -0700</bug_when>
    <thetext>Created attachment 207286
the patch

Lifted the inner-most loop restriction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910907</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-22 22:39:03 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/153033</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206847</attachid>
            <date>2013-07-16 21:31:50 -0700</date>
            <delta_ts>2013-07-17 11:39:03 -0700</delta_ts>
            <desc>WRONG PATCH</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13443</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNzU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDEzLTA3LTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogUmF0aW9uYWxpemUgTm9kZTo6cmVwbGFjZW1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODc3NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgLSBDbGVhcmluZyBvZiBy
ZXBsYWNlbWVudHMgaXMgbm93IGRvbmUgaW4gR3JhcGg6OmNsZWFyUmVwbGFjZW1lbnRzKCkuCisg
ICAgICAgIAorICAgICAgICAtIE5ldyBub2RlcyBub3cgaGF2ZSByZXBsYWNlbWVudCBzZXQgdG8g
MC4KKyAgICAgICAgCisgICAgICAgIC0gTm9kZTo6cmVwbGFjZW1lbnQgaXMgbm93IHBhcnQgb2Yg
YSAnbWlzYycgdW5pb24uIEknbGwgYmUgcHV0dGluZyBhdCBsZWFzdAorICAgICAgICAgIG9uZSBv
dGhlciBmaWVsZCBpbnRvIHRoYXQgdW5pb24gYXMgcGFydCBvZiBMSUNNIHdvcmsgKHNlZQorICAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3NDkpLgor
CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BT
UmV0aHJlYWRpbmdQaGFzZTo6ZnJlZVVubmVjZXNzYXJ5Tm9kZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6ZUdldExvY2FsRm9yKToKKyAgICAg
ICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpy
dW4pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1CbG9ja0NTRSk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmNsZWFyUmVwbGFjZW1lbnRzKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6cGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UpOgorICAgICAgICAo
R3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6Tm9kZSk6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorCiAyMDEzLTA3LTE2ICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogTmF0
dXJhbExvb3BzIHNob3VsZCBiZSBhYmxlIHRvIHF1aWNrbHkgYW5zd2VyIHF1ZXN0aW9ucyBsaWtl
ICJ3aGF0IGxvb3BzIG93biB0aGlzIGJhc2ljIGJsb2NrIgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNTI3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5n
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIGNsZWFySXNMb2FkZWRGcm9tKCk7CiAgICAgICAgIGZyZWVVbm5lY2Vzc2Fy
eU5vZGVzKCk7CisgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKICAgICAgICAg
Y2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxMb2Nh
bE9wZXJhbmQ+KCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5kPigpOwpA
QCAtMTAyLDcgKzEwMyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gMDsgLy8gUmVzZXQgdGhlIHJlcGxhY2VtZW50IHNpbmNl
IHRoZSBuZXh0IHBoYXNlIHdpbGwgdXNlIGl0LgogICAgICAgICAgICAgICAgIGJsb2NrLT5hdCh0
b0luZGV4KyspID0gbm9kZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJsb2NrLT5yZXNp
emUodG9JbmRleCk7CkBAIC0xOTgsMTIgKzE5OCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpID09IEdldExvY2FsKSB7CiAgICAgICAg
ICAgICAgICAgLy8gUmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIEdldExvY2FsIHdpdGgg
b3RoZXJOb2RlLgotICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gb3RoZXJOb2Rl
OworICAgICAgICAgICAgICAgIG5vZGUtPm1pc2MucmVwbGFjZW1lbnQgPSBvdGhlck5vZGU7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBBU1NFUlQob3RoZXJOb2RlLT5vcCgpID09IFNldExvY2FsKTsKLSAgICAgICAgICAg
IG5vZGUtPnJlcGxhY2VtZW50ID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICBub2RlLT5taXNjLnJlcGxhY2VtZW50ID0gb3RoZXJOb2RlLT5jaGlsZDEoKS5ub2RlKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTUyNzU0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDYgKzUyLDggQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkID0g
ZmFsc2U7CiAgICAgICAgIAorICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7Cisg
ICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KQogICAgICAgICAgICAgcGVyZm9y
bUJsb2NrQ1NFKG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCkpOwogICAgICAgICAKQEAgLTEwMDMs
NyArMTAwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9t
Q2hpbGRyZW4obV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAogICAgICAgICAvLyBBdCB0aGlzIHBv
aW50IHdlIHdpbGwgZWxpbWluYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9kZS4KLSAgICAg
ICAgbV9jdXJyZW50Tm9kZS0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKKyAgICAgICAgbV9j
dXJyZW50Tm9kZS0+bWlzYy5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OwogICAgICAgICAKICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgCkBAIC0xMzkzLDEyICsxMzk1LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBMYXN0Tm9kZVR5cGU7
ICsraSkKICAgICAgICAgICAgIG1fbGFzdFNlZW5baV0gPSBVSU5UX01BWDsKICAgICAgICAgCi0g
ICAgICAgIC8vIEFsbCBQaGlzIG5lZWQgdG8gYWxyZWFkeSBiZSBtYXJrZWQgYXMgcmVsZXZhbnQg
dG8gT1NSLCBhbmQgaGF2ZSB0aGVpcgotICAgICAgICAvLyByZXBsYWNlbWVudHMgY2xlYXJlZCwg
c28gd2UgZG9uJ3QgZ2V0IGNvbmZ1c2VkIHdoaWxlIGRvaW5nIHN1YnN0aXR1dGlvbnMgb24KLSAg
ICAgICAgLy8gR2V0TG9jYWwncy4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJs
b2NrLT5waGlzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoYmxvY2stPnBoaXNb
aV0tPmZsYWdzKCkgJiBOb2RlUmVsZXZhbnRUb09TUik7Ci0gICAgICAgICAgICBibG9jay0+cGhp
c1tpXS0+cmVwbGFjZW1lbnQgPSAwOworICAgICAgICAvLyBBbGwgUGhpcyBuZWVkIHRvIGFscmVh
ZHkgYmUgbWFya2VkIGFzIHJlbGV2YW50IHRvIE9TUi4KKyAgICAgICAgaWYgKCFBU1NFUlRfRElT
QUJMRUQpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+cGhp
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPnBoaXNbaV0tPmZs
YWdzKCkgJiBOb2RlUmVsZXZhbnRUb09TUik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIE1ha2UgYWxsIG9mIG15IFNldExvY2FsIGFuZCBHZXRMb2NhbCBub2RlcyByZWxldmFudCB0
byBPU1IsIGFuZCBkbyBzb21lIG90aGVyCkBAIC0xNDA2LDggKzE0MDYsNiBAQCBwcml2YXRlOgog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IDA7Ci0gICAgICAgICAgICAKICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6IC8vIEZJWE1FOiBUaGUgR2V0TG9jYWwgY2FzZSBpcyBvbmx5
IG5lY2Vzc2FyeSB1bnRpbCB3ZSBkbyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA2NzA3LgpAQCAtMTQyNyw3ICsxNDI1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYg
KCFBU1NFUlRfRElTQUJMRUQgJiYgY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKSB7CiAgICAg
ICAgICAgICAvLyBOb2JvZHkgc2hvdWxkIGhhdmUgcmVwbGFjZW1lbnRzIHNldC4KICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKCFibG9jay0+YXQoaSktPnJlcGxhY2VtZW50KTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoIWJsb2NrLT5hdChpKS0+bWlzYy5yZXBsYWNlbWVudCk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTUyNzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMyw2ICs1MzMsMTkgQEAgdm9pZCBHcmFwaDo6Z2V0Qmxv
Y2tzSW5EZXB0aEZpcnN0T3JkZXIoVgogICAgICAgICAgICAgYWRkRm9yRGVwdGhGaXJzdFNvcnQo
cmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2stPnN1Y2Nlc3NvcihpKSk7CiAgICAgfQogfQor
Cit2b2lkIEdyYXBoOjpjbGVhclJlcGxhY2VtZW50cygpCit7CisgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBudW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAodW5zaWduZWQgcGhp
SW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgYmxv
Y2stPnBoaXNbcGhpSW5kZXhdLT5taXNjLnJlcGxhY2VtZW50ID0gMDsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAg
ICAgICBibG9jay0+YXQobm9kZUluZGV4KS0+bWlzYy5yZXBsYWNlbWVudCA9IDA7CisgICAgfQor
fQogICAgIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTI3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICAvLyBDaGVjayBp
ZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCi0gICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0g
Y2hpbGQtPnJlcGxhY2VtZW50OworICAgICAgICBOb2RlKiByZXBsYWNlbWVudCA9IGNoaWxkLT5t
aXNjLnJlcGxhY2VtZW50OwogICAgICAgICBpZiAoIXJlcGxhY2VtZW50KQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgICAgIAog
ICAgICAgICAvLyBUaGVyZSBpcyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0
IHRoZSByZXBsYWNlbWVudCBkb2VzIG5vdAogICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQu
Ci0gICAgICAgIEFTU0VSVCghY2hpbGQtPnJlcGxhY2VtZW50KTsKKyAgICAgICAgQVNTRVJUKCFj
aGlsZC0+bWlzYy5yZXBsYWNlbWVudCk7CiAgICAgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5F
X0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFy
YW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKQEAgLTY0Niw2ICs2NDYsOCBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdm9pZCBpbnZhbGlkYXRlQ0ZHKCk7CiAgICAgCisgICAgdm9pZCBj
bGVhclJlcGxhY2VtZW50cygpOworICAgIAogICAgIHZvaWQgZ2V0QmxvY2tzSW5EZXB0aEZpcnN0
T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KTsKICAgICAKICAgICBQcm9maWxlcjo6
Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9uLmdl
dCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTUy
NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2Nyw2ICsxNjcsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9yZWZDb3Vu
dCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7CisgICAgICAgIG1p
c2MucmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CiAg
ICAgfQogICAgIApAQCAtMTc4LDYgKzE3OSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBt
X3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgIHsKKyAg
ICAgICAgbWlzYy5yZXBsYWNlbWVudCA9IDA7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdz
KG9wKTsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAg
fQpAQCAtMTkxLDYgKzE5Myw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ByZWRpY3Rp
b24oU3BlY05vbmUpCiAgICAgICAgICwgbV9vcEluZm8oaW1tLm1fdmFsdWUpCiAgICAgeworICAg
ICAgICBtaXNjLnJlcGxhY2VtZW50ID0gMDsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mo
b3ApOwogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICB9
CkBAIC0yMDUsNiArMjA4LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fb3BJbmZvKGlt
bTEubV92YWx1ZSkKICAgICAgICAgLCBtX29wSW5mbzIoaW1tMi5tX3ZhbHVlKQogICAgIHsKKyAg
ICAgICAgbWlzYy5yZXBsYWNlbWVudCA9IDA7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdz
KG9wKTsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAg
fQpAQCAtMjE5LDYgKzIyMyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX29wSW5mbyhp
bW0xLm1fdmFsdWUpCiAgICAgICAgICwgbV9vcEluZm8yKGltbTIubV92YWx1ZSkKICAgICB7Cisg
ICAgICAgIG1pc2MucmVwbGFjZW1lbnQgPSAwOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFn
cyhvcCk7CiAgICAgICAgIEFTU0VSVChtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpOwogICAgIH0K
QEAgLTEzOTEsNyArMTM5Niw5IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgLy8gRmllbGRzIHVz
ZWQgYnkgdmFyaW91cyBhbmFseXNlcy4KICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAgIE5v
ZGUqIHJlcGxhY2VtZW50OworICAgIHVuaW9uIHsKKyAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQ7
CisgICAgfSBtaXNjOwogfTsKIAogaW5saW5lIGJvb2wgbm9kZUNvbXBhcmF0b3IoTm9kZSogYSwg
Tm9kZSogYikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1Mjc1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTk0LDE1ICsxOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGRvIGEgcmVwbGFjZW1lbnQgZm9y
ICgzKS4KICAgICAgICAgCiAgICAgICAgIC8vIENsZWFyIGFsbCByZXBsYWNlbWVudHMsIHNpbmNl
IG90aGVyIHBoYXNlcyBtYXkgaGF2ZSB1c2VkIHRoZW0uCi0gICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwot
ICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUlu
ZGV4LS07KQotICAgICAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+cmVwbGFjZW1l
bnQgPSAwOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6
ZSgpOyBub2RlSW5kZXgtLTspCi0gICAgICAgICAgICAgICAgYmxvY2stPmF0KG5vZGVJbmRleCkt
PnJlcGxhY2VtZW50ID0gMDsKLSAgICAgICAgfQorICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFj
ZW1lbnRzKCk7CiAgICAgICAgIAogICAgICAgICAvLyBGb3IgYWxsIG9mIHRoZSBvbGQgQ1BTIFBo
aXMsIGZpZ3VyZSBvdXQgd2hhdCB0aGV5IGNvcnJlc3BvbmQgdG8gaW4gU1NBLgogICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKQEAgLTIxNyw3ICsyMDksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAiLCBhbmQgaXRzIHJlcGxhY2VtZW50IGluICIsICpibG9jaywgIiwgIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChwaGktPmxvY2Fs
KCkpLCAiXG4iKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGhpLT5yZXBs
YWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChwaGktPmxvY2FsKCkpOwor
ICAgICAgICAgICAgICAgIHBoaS0+bWlzYy5yZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQub3BlcmFuZChwaGktPmxvY2FsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIApAQCAtMjMyLDggKzIyNCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKICAgICAgICAgICAgICAgICBpZiAo
IW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHdo
aWxlIChub2RlLT5yZXBsYWNlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUt
PnJlcGxhY2VtZW50OworICAgICAgICAgICAgICAgIHdoaWxlIChub2RlLT5taXNjLnJlcGxhY2Vt
ZW50KQorICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+bWlzYy5yZXBsYWNlbWVudDsK
ICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMjc1LDExICsyNjcsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgewotICAgICAg
ICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+cmVwbGFjZW1lbnQgPQorICAgICAgICAg
ICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+bWlzYy5yZXBsYWNlbWVudCA9CiAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChibG9jay0+cGhpc1tw
aGlJbmRleF0tPmxvY2FsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCi0gICAgICAgICAg
ICAgICAgQVNTRVJUKCFibG9jay0+YXQobm9kZUluZGV4KS0+cmVwbGFjZW1lbnQpOworICAgICAg
ICAgICAgICAgIEFTU0VSVCghYmxvY2stPmF0KG5vZGVJbmRleCktPm1pc2MucmVwbGFjZW1lbnQp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwpAQCAtMjkzLDcgKzI4NSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU11
c3RHZW5lcmF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnQpOwotICAgICAgICAgICAg
ICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsgLy8gT25s
eSBmb3IgVXBzaWxvbnMuCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1pc2MucmVwbGFjZW1l
bnQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7IC8vIE9ubHkgZm9yIFVwc2lsb25zLgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIApAQCAtMzA3LDcgKzI5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1pc2Mu
cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIApAQCAtMzE1LDcgKzMwNyw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyBvbmx5IGZvciBVcHNpbG9ucy4gQW4gVXBzaWxvbiB3aWxsIG9ubHkgcmVmZXIg
dG8gYSBGbHVzaCBpZgogICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSB3ZXJlIG5vIFNldExv
Y2FscyBvciBHZXRMb2NhbHMgaW4gdGhlIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICBub2Rl
LT5yZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2Nh
bCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWlzYy5yZXBsYWNlbWVudCA9IGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAg
LTMyNyw3ICszMTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZl
cnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IGZvciBV
cHNpbG9ucy4gQW4gVXBzaWxvbiB3aWxsIG9ubHkgcmVmZXIgdG8gYQogICAgICAgICAgICAgICAg
ICAgICAvLyBQaGFudG9tTG9jYWwgaWYgdGhlcmUgd2VyZSBubyBTZXRMb2NhbHMgb3IgR2V0TG9j
YWxzIGluIHRoZSBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQg
PSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAg
ICAgICAgICAgICAgICAgICBub2RlLT5taXNjLnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207215</attachid>
            <date>2013-07-21 15:29:25 -0700</date>
            <delta_ts>2013-07-21 16:20:56 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>12682</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQXRU
YWlsQWJzdHJhY3RTdGF0ZTo6QXRUYWlsQWJzdHJhY3RTdGF0ZShHcmFwaCYgZ3JhcGgpCisgICAg
OiBtX2dyYXBoKGdyYXBoKQorICAgICwgbV9ibG9jaygwKQoreworfQorCitBdFRhaWxBYnN0cmFj
dFN0YXRlOjp+QXRUYWlsQWJzdHJhY3RTdGF0ZSgpIHsgfQorCit2b2lkIEF0VGFpbEFic3RyYWN0
U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIG1fYmxvY2stPnNz
YS0+dmFsdWVzQXRUYWlsLmFkZChub2RlLCBBYnN0cmFjdFZhbHVlKCkpOworfQorCitBYnN0cmFj
dFZhbHVlJiBBdFRhaWxBYnN0cmFjdFN0YXRlOjpmb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAg
SGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Jsb2NrLT5z
c2EtPnZhbHVlc0F0VGFpbC5maW5kKG5vZGUpOworICAgIEFTU0VSVChpdGVyICE9IG1fYmxvY2st
PnNzYS0+dmFsdWVzQXRUYWlsLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlci0+dmFsdWU7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3Ry
YWN0U3RhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXRUYWlsQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdB
dFRhaWxBYnN0cmFjdFN0YXRlX2gKKyNkZWZpbmUgREZHQXRUYWlsQWJzdHJhY3RTdGF0ZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNp
bmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7IAor
CitjbGFzcyBBdFRhaWxBYnN0cmFjdFN0YXRlIHsKK3B1YmxpYzoKKyAgICBBdFRhaWxBYnN0cmFj
dFN0YXRlKEdyYXBoJiBncmFwaCk7CisgICAgCisgICAgfkF0VGFpbEFic3RyYWN0U3RhdGUoKTsK
KyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVUbyhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7Cisg
ICAgICAgIG1fYmxvY2sgPSBibG9jazsKKyAgICB9CisgICAgCisgICAgdm9pZCBjcmVhdGVWYWx1
ZUZvck5vZGUoTm9kZSopOworICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZSopOworICAg
IEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKSB7IHJldHVybiBmb3JOb2RlKGVkZ2Uu
bm9kZSgpKTsgfQorICAgIE9wZXJhbmRzPEFic3RyYWN0dmFsdWU+JiB2YXJpYWJsZXMoKSB7IHJl
dHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWw7IH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBibG9j
aygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQoKSB7
IHJldHVybiBtX2Jsb2NrLT5jZmFEaWRGaW5pc2g7IH0KKyAgICAKKyAgICB2b2lkIHNldERpZENs
b2JiZXIoYm9vbCkgeyB9CisgICAgdm9pZCBzZXRJc1ZhbGlkKGJvb2wgaXNWYWxpZCkgeyBtX2Js
b2NrLT5jZmFEaWRGaW5pc2ggPSBpc1ZhbGlkOyB9CisgICAgdm9pZCBzZXRCcmFuY2hEaXJlY3Rp
b24oQnJhbmNoRGlyZWN0aW9uKSB7IH0KKyAgICB2b2lkIHNldEZvdW5kQ29uc3RhbnRzKGJvb2wp
IHsgfQorICAgIGJvb2wgaGF2ZVN0cnVjdHVyZXMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9IC8v
IEl0J3MgYWx3YXlzIHNhZmUgdG8gcmV0dXJuIHRydWUuCisgICAgdm9pZCBzZXRIYXZlU3RydWN0
dXJlcyhib29sKSB7IH0KKworcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBCYXNp
Y0Jsb2NrKiBtX2Jsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBdFRhaWxBYnN0cmFjdFN0YXRl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHTElDTVBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0F0
VGFpbEFic3RyYWN0U3RhdGUuaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgor
I2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1
ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAi
REZHU2FmZVRvRXhlY3V0ZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgTG9vcERhdGEg
eworICAgIExvb3BEYXRhKCkKKyAgICAgICAgOiBwcmVIZWFkZXIoMCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIENsb2JiZXJTZXQgd3JpdGVzOworICAgIEJhc2ljQmxvY2sqIHByZUhlYWRlcjsK
K307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitjbGFzcyBMSUNNUGhhc2UgOiBwdWJs
aWMgUGhhc2UgeworcHVibGljOgorICAgIExJQ01QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAg
IDogUGhhc2UoZ3JhcGgsICJMSUNNIikKKyAgICAgICAgLCBtX3N0YXRlKGdyYXBoKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9y
cy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAgIG1fZ3JhcGgubV9uYXR1cmFs
TG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgbV9k
YXRhLnJlc2l6ZShtX2dyYXBoLm1fbmF0dXJhbExvb3BzLm51bUxvb3BzKCkpOworICAgICAgICAK
KyAgICAgICAgLy8gRmlndXJlIG91dCB0aGUgc2V0IG9mIHRoaW5ncyBlYWNoIGxvb3Agd3JpdGVz
IHRvLCBub3QgaW5jbHVkaW5nIGJsb2NrcyB0aGF0CisgICAgICAgIC8vIGJlbG9uZyB0byBpbm5l
ciBsb29wcy4gV2UgZml4IHRoaXMgbGF0ZXIuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gbV9ncmFwaG1fbmF0dXJhbExvb3BzLmlubmVyTW9z
dExvb3BPZihibG9jayk7CisgICAgICAgICAgICBpZiAoIWxvb3ApCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBMb29wRGF0YSYgZGF0YSA9IG1fZGF0YVtsb29wLT5pbmRl
eCgpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUo
KTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgICAgIGFkZFdyaXRlcyhtX2dyYXBoLCBibG9j
ay0+YXQobm9kZUluZGV4KSwgZGF0YS53cml0ZXMpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBGb3IgZWFjaCBsb29wOgorICAgICAgICAvLyAtIElkZW50aWZ5IGl0cyBwcmUtaGVh
ZGVyLgorICAgICAgICAvLyAtIE1ha2Ugc3VyZSBpdHMgb3V0ZXIgbG9vcHMga25vdyB3aGF0IGl0
IGNsb2JiZXJzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IG1fZ3JhcGgubV9u
YXR1cmFsTG9vcHMubnVtTG9vcHMoKTsgbG9vcEluZGV4LS07KSB7CisgICAgICAgICAgICBjb25z
dCBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMubG9vcChsb29wSW5k
ZXgpOworICAgICAgICAgICAgTG9vcERhdGEmIGRhdGEgPSBtX2RhdGFbbG9vcC0+aW5kZXgoKV07
CisgICAgICAgICAgICBmb3IgKAorICAgICAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBv
dXRlckxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmlubmVyTW9zdE91dGVyTG9vcChsb29w
KTsKKyAgICAgICAgICAgICAgICBvdXRlckxvb3A7CisgICAgICAgICAgICAgICAgb3V0ZXJMb29w
ID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5pbm5lck1vc3RPdXRlckxvb3Aob3V0ZXJMb29wKSkK
KyAgICAgICAgICAgICAgICBtX2RhdGFbb3V0ZXJMb29wLT5pbmRleF0ud3JpdGVzLmFkZEFsbChk
YXRhLndyaXRlcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGhlYWRl
ciA9IGxvb3AuaGVhZGVyKCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVIZWFkZXIgPSAw
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaGVhZGVyLT5wcmVkZWNlc3NvcnMuc2l6
ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBo
ZWFkZXItPnByZWRlY2Vzc29yc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Rv
bWluYXRvcnMuZG9taW5hdGVzKGhlYWRlciwgcHJlZGVjZXNzb3IpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcHJlSGVhZGVy
IHx8IHByZUhlYWRlciA9PSBwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgcHJlSGVhZGVy
ID0gcHJlZGVjZXNzb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhLnByZUhlYWRl
ciA9IHByZUhlYWRlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2FsayBhbGwg
YmFzaWMgYmxvY2tzIHRoYXQgYmVsb25nIHRvIGxvb3BzLCBsb29raW5nIGZvciBob2lzdGluZwor
ICAgICAgICAvLyBvcHBvcnR1bml0aWVzLiBXZSB3YW50IHRvIGhvaXN0IHRvIHRoZSBvdXRlci1t
b3N0IGxvb3AuIEhvaXN0aW5nIGlzIHZhbGlkCisgICAgICAgIC8vIGlmOgorICAgICAgICAvLyAt
IFRoZSBub2RlIGRvZXNuJ3Qgd3JpdGUgYW55dGhpbmcuCisgICAgICAgIC8vIC0gVGhlIG5vZGUg
ZG9lc24ndCByZWFkIGFueXRoaW5nIHRoYXQgdGhlIGxvb3Agd3JpdGVzLgorICAgICAgICAvLyAt
IFRoZSBwcmVIZWFkZXIncyBzdGF0ZSBhdCB0YWlsIG1ha2VzIHRoZSBub2RlIHNhZmUgdG8gZXhl
Y3V0ZS4KKyAgICAgICAgLy8gLSBUaGUgbG9vcCdzIGNoaWxkcmVuIGFsbCBiZWxvbmcgdG8gbm9k
ZXMgdGhhdCBzdHJpY3RseSBkb21pbmF0ZSB0aGUgbG9vcCBoZWFkZXIuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEZvciBtYXhpbXVtIHByb2ZpdCwgd2Ugd2FsayBibG9ja3MgaW4gREZTIG9yZGVy
IHRvIGVuc3VyZSB0aGF0IHdlIGdlbmVyYWxseQorICAgICAgICAvLyB0ZW5kIHRvIGhvaXN0IGRv
bWluYXRvcnMgYmVmb3JlIGRvbWluYXRlZXMuCisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXRUYWlsQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwor
ICAgIFZlY3RvcjxMb29wRGF0YT4gbV9kYXRhOworfTsKKworYm9vbCBwZXJmb3JtTElDTShHcmFw
aCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBMSUNN
IFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPExJQ01QaGFzZT4oZ3JhcGgpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHTElDTVBoYXNlX2gKKyNkZWZpbmUgREZHTElDTVBoYXNl
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIERv
ZXMgbG9vcC1pbnZhcmlhbnQgY29kZSBtb3Rpb24sIG9yIExJQ00gZm9yIHNob3J0LiBUaGlzIG9u
bHkgaG9pc3RzIGNvZGUKKy8vIGFuZCBuZXZlciBzaW5rcyBhbnl0aGluZy4gQSBub2RlIGlzIGhv
aXN0ZWQgaWYgaXQgZG9lcyBubyB3cml0ZXMsIGFuZCBpZgorLy8gaXRzIHJlYWRzIGRvbid0IG92
ZXJsYXAgdGhlIGxvb3AncyB3cml0ZXMuCisKK2Jvb2wgcGVyZm9ybUxJQ00oR3JhcGgmKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdMSUNNUGhhc2VfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207218</attachid>
            <date>2013-07-21 16:20:56 -0700</date>
            <delta_ts>2013-07-21 21:57:03 -0700</delta_ts>
            <desc>it might work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23084</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDEzLTA3LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBkbyBhIGhpZ2gtbGV2ZWwgTElDTSBiZWZvcmUgZ29pbmcg
dG8gRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTg3NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIEltcGxlbWVudHMgTElDTSBob2lzdGluZyBmb3Igbm9kZXMgdGhhdCBuZXZlciB3cml0
ZSBhbnl0aGluZyBhbmQgbmV2ZXIgcmVhZAorICAgICAgICB0aGluZ3MgdGhhdCBhcmUgY2xvYmJl
cmVkIGJ5IHRoZSBsb29wLiBUaGVyZSBhcmUgc29tZSBvdGhlciBwcmVjb25kaXRpb25zIGZvcgor
ICAgICAgICBob2lzdGluZywgc2VlIERGR0xJQ01QaGFzZS5jcHAuCisKKyAgICAgICAgKiBkZmcv
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpBdFRhaWxBYnN0cmFjdFN0YXRlKToK
KyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjp+QXRUYWlsQWJzdHJhY3RT
dGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFs
dWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpmb3JO
b2RlKToKKyAgICAgICAgKiBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKERGRyk6CisgICAgICAgIChBdFRhaWxBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplVG8pOgorICAgICAgICAoSlND
OjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OkF0VGFpbEFic3RyYWN0U3RhdGU6OnZhcmlhYmxlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QXRU
YWlsQWJzdHJhY3RTdGF0ZTo6YmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3Ry
YWN0U3RhdGU6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3Rh
dGU6OnNldERpZENsb2JiZXIpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3Rh
dGU6OnNldElzVmFsaWQpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6
OnNldEJyYW5jaERpcmVjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6c2V0Rm91bmRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3Ry
YWN0U3RhdGU6OmhhdmVTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0
cmFjdFN0YXRlOjpzZXRIYXZlU3RydWN0dXJlcyk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxv
Y2suaDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjppbnNlcnRCZWZvcmVMYXN0KToK
KyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDoKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgICogZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaDogQWRkZWQuCisgICAgICAgIChERkcpOgor
ICAgICAgICAoRWRnZURvbWluYXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZURvbWluYXRl
czo6RWRnZURvbWluYXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZURvbWluYXRlczo6b3Bl
cmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZURvbWluYXRlczo6cmVzdWx0KToKKyAg
ICAgICAgKEpTQzo6REZHOjplZGdlc0RvbWluYXRlKToKKyAgICAgICAgKiBkZmcvREZHTElDTVBo
YXNlLmNwcDogQWRkZWQuCisgICAgICAgIChMSUNNUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkxJQ01QaGFzZTo6TElDTVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpMSUNNUGhhc2U6OnJ1
bik6CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjphdHRlbXB0SG9pc3QpOgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtTElDTSk6CisgICAgICAgICogZGZn
L0RGR0xJQ01QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RG
R1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwp
OgorCiAyMDEzLTA3LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgZm91cnRoVGllcjogZWFjaCBERkcgbm9kZSB0aGF0IHJlbGllcyBvbiBvdGhlciBub2RlcyB0
byBkbyB0aGVpciB0eXBlIGNoZWNrcyBzaG91bGQgYmUgYWJsZSB0byB0ZWxsIHlvdSBpZiB0aG9z
ZSB0eXBlIGNoZWNrcyBoYXBwZW5lZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitBdFRhaWxBYnN0cmFjdFN0YXRlOjpBdFRhaWxBYnN0cmFjdFN0
YXRlKEdyYXBoJiBncmFwaCkKKyAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgLCBtX2Jsb2NrKDAp
Cit7Cit9CisKK0F0VGFpbEFic3RyYWN0U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRlKCkgeyB9
CisKK3ZvaWQgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqIG5v
ZGUpCit7CisgICAgbV9ibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuYWRkKG5vZGUsIEFic3RyYWN0
VmFsdWUoKSk7Cit9CisKK0Fic3RyYWN0VmFsdWUmIEF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5v
ZGUoTm9kZSogbm9kZSkKK3sKKyAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRl
cmF0b3IgaXRlciA9IG1fYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsLmZpbmQobm9kZSk7CisgICAg
QVNTRVJUKGl0ZXIgIT0gbV9ibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuZW5kKCkpOworICAgIHJl
dHVybiBpdGVyLT52YWx1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR0F0VGFpbEFic3RyYWN0U3RhdGVfaAorI2RlZmluZSBERkdB
dFRhaWxBYnN0cmFjdFN0YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVk
ZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsgCisKK2NsYXNzIEF0VGFpbEFic3RyYWN0U3RhdGUgeworcHVi
bGljOgorICAgIEF0VGFpbEFic3RyYWN0U3RhdGUoR3JhcGgmIGdyYXBoKTsKKyAgICAKKyAgICB+
QXRUYWlsQWJzdHJhY3RTdGF0ZSgpOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVRvKEJhc2lj
QmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlKik7CisgICAgQWJzdHJhY3RWYWx1
ZSYgZm9yTm9kZShOb2RlKik7CisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2Up
IHsgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2RlKCkpOyB9CisgICAgT3BlcmFuZHM8QWJzdHJhY3R2
YWx1ZT4mIHZhcmlhYmxlcygpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbDsgfQorICAg
IAorICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAg
IAorICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuIG1fYmxvY2stPmNmYURpZEZpbmlzaDsgfQor
ICAgIAorICAgIHZvaWQgc2V0RGlkQ2xvYmJlcihib29sKSB7IH0KKyAgICB2b2lkIHNldElzVmFs
aWQoYm9vbCBpc1ZhbGlkKSB7IG1fYmxvY2stPmNmYURpZEZpbmlzaCA9IGlzVmFsaWQ7IH0KKyAg
ICB2b2lkIHNldEJyYW5jaERpcmVjdGlvbihCcmFuY2hEaXJlY3Rpb24pIHsgfQorICAgIHZvaWQg
c2V0Rm91bmRDb25zdGFudHMoYm9vbCkgeyB9CisgICAgYm9vbCBoYXZlU3RydWN0dXJlcygpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0gLy8gSXQncyBhbHdheXMgc2FmZSB0byByZXR1cm4gdHJ1ZS4K
KyAgICB2b2lkIHNldEhhdmVTdHJ1Y3R1cmVzKGJvb2wpIHsgfQorCitwcml2YXRlOgorICAgIEdy
YXBoJiBtX2dyYXBoOworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR0F0VGFpbEFic3RyYWN0U3RhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTUyOTUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDEx
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICB2b2lkIGdy
b3coc2l6ZV90IHNpemUpIHsgbV9ub2Rlcy5ncm93KHNpemUpOyB9CiAgICAgCiAgICAgdm9pZCBh
cHBlbmQoTm9kZSogbm9kZSkgeyBtX25vZGVzLmFwcGVuZChub2RlKTsgfQorICAgIHZvaWQgaW5z
ZXJ0QmVmb3JlTGFzdChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgYXBwZW5kKGxhc3QoKSk7
CisgICAgICAgIGF0KHNpemUoKSAtIDIpID0gbm9kZTsKKyAgICB9CiAgICAgCiAgICAgc2l6ZV90
IG51bU5vZGVzKCkgY29uc3QgeyByZXR1cm4gcGhpcy5zaXplKCkgKyBzaXplKCk7IH0KICAgICBO
b2RlKiBub2RlKHNpemVfdCBpKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTUyOTUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw4ICs0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNC
bG9jazo6YXBwZW5kTm9uVGVybWluYWwoR3JhcGgmIGdyYXBoLCBTcGVjdWxhdGVkVHlwZSB0eXBl
IHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKICAgICAgICAgTm9kZSog
cmVzdWx0ID0gZ3JhcGguYWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsg
XAotICAgICAgICBhcHBlbmQobGFzdCgpKTsgXAotICAgICAgICBhdChzaXplKCkgLSAyKSA9IHJl
c3VsdDsgXAorICAgICAgICBpbnNlcnRCZWZvcmVMYXN0KHJlc3VsdCk7IFwKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsgXAogICAgIH0KICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04o
REZHX0RFRklORV9BUFBFTkRfTk9ERSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRWRnZURvbWluYXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRWRnZURvbWluYXRlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdFZGdlRG9taW5hdGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0VkZ2VEb21pbmF0ZXNfaAorI2RlZmluZSBERkdFZGdlRG9taW5hdGVzX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEVk
Z2VEb21pbmF0ZXMgeworcHVibGljOgorICAgIEVkZ2VEb21pbmF0ZXMoR3JhcGgmIGdyYXBoLCBC
YXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1f
YmxvY2soYmxvY2spCisgICAgICAgICwgbV9yZXN1bHQodHJ1ZSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIHZvaWQgb3BlcmF0b3IoKShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
bV9yZXN1bHQgJj0gbV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKG1fYmxvY2ssIGVkZ2Uu
bm9kZSgpLT5taXNjLm93bmVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCByZXN1bHQoKSBjb25z
dCB7IHJldHVybiBtX3Jlc3VsdDsgfQorCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOwor
ICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgYm9vbCBtX3Jlc3VsdDsKK307CisKK2lubGlu
ZSBib29sIGVkZ2VzRG9taW5hdGUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBCYXNpY0Jsb2Nr
KiBibG9jaykKK3sKKyAgICBFZGdlRG9taW5hdGVzIGVkZ2VEb21pbmF0ZXMoZ3JhcGgsIGJsb2Nr
KTsKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgZWRnZXNEb21pbmF0
ZXMpOworICAgIHJldHVybiBlZGdlRG9taW5hdGVzLnJlc3VsdCgpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR0VkZ2VEb21pbmF0ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xJQ01QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMSUNNUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdMSUNNUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0Jhc2lj
QmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgorI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhh
c2UuaCIKKyNpbmNsdWRlICJERkdTYWZlVG9FeGVjdXRlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK25hbWVzcGFjZSB7CisK
K3N0cnVjdCBMb29wRGF0YSB7CisgICAgTG9vcERhdGEoKQorICAgICAgICA6IHByZUhlYWRlcigw
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2xvYmJlclNldCB3cml0ZXM7CisgICAgQmFzaWNC
bG9jayogcHJlSGVhZGVyOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2NsYXNz
IExJQ01QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgTElDTVBoYXNlKEdyYXBo
JiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIkxJQ00iKQorICAgICAgICAsIG1fc3Rh
dGUoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIG1f
Z3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAg
bV9ncmFwaC5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAg
ICAgIAorICAgICAgICBtX2RhdGEucmVzaXplKG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMubnVtTG9v
cHMoKSk7CisgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHRoZSBzZXQgb2YgdGhpbmdz
IGVhY2ggbG9vcCB3cml0ZXMgdG8sIG5vdCBpbmNsdWRpbmcgYmxvY2tzIHRoYXQKKyAgICAgICAg
Ly8gYmVsb25nIHRvIGlubmVyIGxvb3BzLiBXZSBmaXggdGhpcyBsYXRlci4KKyAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX2dyYXBoLm1fbmF0
dXJhbExvb3BzLmlubmVyTW9zdExvb3BPZihibG9jayk7CisgICAgICAgICAgICBpZiAoIWxvb3Ap
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBMb29wRGF0YSYgZGF0YSA9
IG1fZGF0YVtsb29wLT5pbmRleCgpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgICAgIGFkZFdy
aXRlcyhtX2dyYXBoLCBibG9jay0+YXQobm9kZUluZGV4KSwgZGF0YS53cml0ZXMpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBsb29wOgorICAgICAgICAvLyAtIElk
ZW50aWZ5IGl0cyBwcmUtaGVhZGVyLgorICAgICAgICAvLyAtIE1ha2Ugc3VyZSBpdHMgb3V0ZXIg
bG9vcHMga25vdyB3aGF0IGl0IGNsb2JiZXJzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGxvb3BJ
bmRleCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMubnVtTG9vcHMoKTsgbG9vcEluZGV4LS07KSB7
CisgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFs
TG9vcHMubG9vcChsb29wSW5kZXgpOworICAgICAgICAgICAgTG9vcERhdGEmIGRhdGEgPSBtX2Rh
dGFbbG9vcC0+aW5kZXgoKV07CisgICAgICAgICAgICBmb3IgKAorICAgICAgICAgICAgICAgIGNv
bnN0IE5hdHVyYWxMb29wKiBvdXRlckxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmlubmVy
TW9zdE91dGVyTG9vcChsb29wKTsKKyAgICAgICAgICAgICAgICBvdXRlckxvb3A7CisgICAgICAg
ICAgICAgICAgb3V0ZXJMb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5pbm5lck1vc3RPdXRl
ckxvb3AoKm91dGVyTG9vcCkpCisgICAgICAgICAgICAgICAgbV9kYXRhW291dGVyTG9vcC0+aW5k
ZXhdLndyaXRlcy5hZGRBbGwoZGF0YS53cml0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBoZWFkZXIgPSBsb29wLmhlYWRlcigpOworICAgICAgICAgICAgQmFzaWNC
bG9jayogcHJlSGVhZGVyID0gMDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGhlYWRl
ci0+cHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yID0gaGVhZGVyLT5wcmVkZWNlc3NvcnNbaV07CisgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhoZWFkZXIsIHByZWRlY2Vzc29y
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXByZUhlYWRlciB8fCBwcmVIZWFkZXIgPT0gcHJlZGVjZXNzb3IpOworICAgICAg
ICAgICAgICAgIHByZUhlYWRlciA9IHByZWRlY2Vzc29yOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChwcmVIZWFkZXItPmxhc3QoKS0+b3Ao
KSA9PSBKdW1wKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGF0YS5wcmVIZWFkZXIgPSBw
cmVIZWFkZXI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGguaW5pdGlhbGl6
ZU5vZGVPd25lcnMoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdhbGsgYWxsIGJhc2ljIGJsb2Nr
cyB0aGF0IGJlbG9uZyB0byBsb29wcywgbG9va2luZyBmb3IgaG9pc3RpbmcKKyAgICAgICAgLy8g
b3Bwb3J0dW5pdGllcy4gV2Ugd2FudCB0byBob2lzdCB0byB0aGUgb3V0ZXItbW9zdCBsb29wLiBI
b2lzdGluZyBpcyB2YWxpZAorICAgICAgICAvLyBpZjoKKyAgICAgICAgLy8gLSBUaGUgbm9kZSBk
b2Vzbid0IHdyaXRlIGFueXRoaW5nLgorICAgICAgICAvLyAtIFRoZSBub2RlIGRvZXNuJ3QgcmVh
ZCBhbnl0aGluZyB0aGF0IHRoZSBsb29wIHdyaXRlcy4KKyAgICAgICAgLy8gLSBUaGUgcHJlSGVh
ZGVyJ3Mgc3RhdGUgYXQgdGFpbCBtYWtlcyB0aGUgbm9kZSBzYWZlIHRvIGV4ZWN1dGUuCisgICAg
ICAgIC8vIC0gVGhlIGxvb3AncyBjaGlsZHJlbiBhbGwgYmVsb25nIHRvIG5vZGVzIHRoYXQgc3Ry
aWN0bHkgZG9taW5hdGUgdGhlIGxvb3AgaGVhZGVyLgorICAgICAgICAvLworICAgICAgICAvLyBG
b3IgbWF4aW11bSBwcm9maXQsIHdlIHdhbGsgYmxvY2tzIGluIERGUyBvcmRlciB0byBlbnN1cmUg
dGhhdCB3ZSBnZW5lcmFsbHkKKyAgICAgICAgLy8gdGVuZCB0byBob2lzdCBkb21pbmF0b3JzIGJl
Zm9yZSBkb21pbmF0ZWVzLgorICAgICAgICAvLworICAgICAgICAvLyBBbHNvLCB3ZSBuZWVkIHRv
IHJlbWVtYmVyIHRvIGNsZWFyIE5vZGVFeGl0c0ZvcndhcmQgZm9yIGFueSBub2RlcyB3ZSBob2lz
dGVkLgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0Owor
ICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOwor
ICAgICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBsb29wU3RhY2s7CisgICAgICAgIGZv
ciAoCisgICAgICAgICAgICB1bnNpZ25lZCBkZXB0aEZpcnN0SW5kZXggPSAwOworICAgICAgICAg
ICAgZGVwdGhGaXJzdEluZGV4IDwgZGVwdGhGaXJzdC5zaXplKCk7CisgICAgICAgICAgICArK2Rl
cHRoRmlyc3RJbmRleCkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGRlcHRoRmlyc3RbZGVwdGhGaXJzdEluZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IE5h
dHVyYWxMb29wKiBsb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5pbm5lck1vc3RMb29wT2Yo
YmxvY2spOworICAgICAgICAgICAgaWYgKCFsb29wKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgbG9vcFN0YWNrLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGZvciAoCisg
ICAgICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGN1cnJlbnQgPSBsb29wOworICAgICAg
ICAgICAgICAgIGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IG1fZ3JhcGgubV9u
YXR1cmFsTG9vcHMuaW5uZXJNb3N0T3V0ZXJMb29wKCpjdXJyZW50KSkKKyAgICAgICAgICAgICAg
ICBsb29wU3RhY2suYXBwZW5kKGN1cnJlbnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBSZW1lbWJlcjogdGhlIGxvb3Agc3RhY2sgaGFzIHRoZSBpbm5lci1tb3N0IGxvb3AgYXQgaW5k
ZXggMCwgc28gaWYgd2Ugd2FudAorICAgICAgICAgICAgLy8gdG8gYmlhcyBob2lzdGluZyB0byBv
dXRlciBsb29wcyB0aGVuIHdlIG5lZWQgdG8gdXNlIGEgcmV2ZXJzZSBsb29wLgorICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSomIG5v
ZGVSZWYgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWRvZXNX
cml0ZXMobV9ncmFwaCwgbm9kZVJlZikpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3RhY2tJbmRl
eCA9IGxvb3BTdGFjay5zaXplKCk7IHN0YWNrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGF0dGVtcHRIb2lzdChub2RlUmVmLCBsb29wU3RhY2tbc3RhY2tJbmRleF0pKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0SG9pc3QoTm9kZSomIG5vZGVSZWYsIGNvbnN0IE5h
dHVyYWxMb29wKiBsb29wKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVSZWY7Cisg
ICAgICAgIExvb3BEYXRhJiBkYXRhID0gbV9kYXRhW2xvb3AtPmluZGV4KCldOworICAgICAgICAK
KyAgICAgICAgaWYgKCFlZGdlc0RvbWluYXRlKG1fZ3JhcGgsIG5vZGUsIGRhdGEucHJlSGVhZGVy
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZWFk
c092ZXJsYXAobV9ncmFwaCwgbm9kZSwgZGF0YS53cml0ZXMpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplKGRhdGEucHJlSGVh
ZGVyKTsKKyAgICAgICAgaWYgKCFzYWZlVG9FeGVjdXRlKG1fc3RhdGUsIG1fZ3JhcGgsIG5vZGUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZGF0YS5wcmVI
ZWFkZXItPmluc2VydEJlZm9yZUxhc3Qobm9kZSk7CisgICAgICAgIG5vZGUtPm1pc2Mub3duZXIg
PSBkYXRhLnByZUhlYWRlcjsKKyAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlRXhpdHNGb3J3
YXJkKTsKKyAgICAgICAgbm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBkYXRhLnByZUhl
YWRlci0+bGFzdCgpLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldDsKKyAgICAgICAgCisgICAgICAg
IC8vIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IGFsbCBvZiB0aGUgbm9kZXMgd2UgY3VycmVudGx5
IGtub3cgaG93IHRvIGhvaXN0CisgICAgICAgIC8vIGRvbid0IGhhdmUgdmFyLWFyZyBjaGlsZHJl
bi4gVGhhdCBtYXkgY2hhbmdlIGFuZCB0aGVuIHdlIGNhbiBmaXggdGhpcworICAgICAgICAvLyBj
b2RlLiBCdXQgZm9yIG5vdyB3ZSBqdXN0IGFzc2VydCB0aGF0J3MgdGhlIGNhc2UuCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSk7CisgICAg
ICAgIAorICAgICAgICBub2RlUmVmID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQaGFudG9t
LCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZHJlbik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICBBdFRhaWxBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CisgICAgVmVj
dG9yPExvb3BEYXRhPiBtX2RhdGE7Cit9OworCitib29sIHBlcmZvcm1MSUNNKEdyYXBoJiBncmFw
aCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIExJQ00gUGhhc2Ui
KTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TElDTVBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdMSUNNUGhhc2VfaAorI2RlZmluZSBERkdMSUNNUGhhc2VfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gRG9lcyBsb29w
LWludmFyaWFudCBjb2RlIG1vdGlvbiwgb3IgTElDTSBmb3Igc2hvcnQuIFRoaXMgb25seSBob2lz
dHMgY29kZQorLy8gYW5kIG5ldmVyIHNpbmtzIGFueXRoaW5nLiBBIG5vZGUgaXMgaG9pc3RlZCBp
ZiBpdCBkb2VzIG5vIHdyaXRlcywgYW5kIGlmCisvLyBpdHMgcmVhZHMgZG9uJ3Qgb3ZlcmxhcCB0
aGUgbG9vcCdzIHdyaXRlcy4KKworYm9vbCBwZXJmb3JtTElDTShHcmFwaCYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR0xJQ01QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAkocmV2aXNpb24gMTUyOTUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkRGR0Zs
dXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgog
I2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHTElDTVBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHTG9vcFBy
ZUhlYWRlckNyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmgiCkBAIC0yMDgsNiArMjA5LDkgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBs
YW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOwogICAg
ICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtQ0ZBKGRm
Zyk7CisgICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7CisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0Fu
YWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybURD
RShkZmcpOyAvLyBXZSByZWx5IG9uIHRoaXMgdG8gY29udmVydCBkZWFkIFNldExvY2FscyBpbnRv
IHRoZSBhcHByb3ByaWF0ZSBoaW50LCBhbmQgdG8ga2lsbCBkZWFkIGNvZGUgdGhhdCB3b24ndCBi
ZSByZWNvZ25pemVkIGFzIGRlYWQgYnkgTExWTS4KICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5h
bHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207225</attachid>
            <date>2013-07-21 21:57:03 -0700</date>
            <delta_ts>2013-07-21 22:12:44 -0700</delta_ts>
            <desc>it just motioned some loop-invariant code</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40057</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDEzLTA3LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBkbyBhIGhpZ2gtbGV2ZWwgTElDTSBiZWZvcmUgZ29pbmcg
dG8gRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTg3NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIEltcGxlbWVudHMgTElDTSBob2lzdGluZyBmb3Igbm9kZXMgdGhhdCBuZXZlciB3cml0
ZSBhbnl0aGluZyBhbmQgbmV2ZXIgcmVhZAorICAgICAgICB0aGluZ3MgdGhhdCBhcmUgY2xvYmJl
cmVkIGJ5IHRoZSBsb29wLiBUaGVyZSBhcmUgc29tZSBvdGhlciBwcmVjb25kaXRpb25zIGZvcgor
ICAgICAgICBob2lzdGluZywgc2VlIERGR0xJQ01QaGFzZS5jcHAuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OkF0VGFpbEFic3RyYWN0U3RhdGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpjcmVhdGVWYWx1ZUZv
ck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUp
OgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmg6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKEF0VGFpbEFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemVUbyk6CisgICAgICAgIChKU0M6OkRG
Rzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXRU
YWlsQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxB
YnN0cmFjdFN0YXRlOjpibG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6
c2V0RGlkQ2xvYmJlcik6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6
c2V0SXNWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6c2V0
QnJhbmNoRGlyZWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRl
OjpzZXRGb3VuZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6aGF2ZVN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0
U3RhdGU6OnNldEhhdmVTdHJ1Y3R1cmVzKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5o
OgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Omluc2VydEJlZm9yZUxhc3QpOgorICAg
ICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oOgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc1dyaXRl
cyk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6
RENFUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6OkRDRVBoYXNlOjpmaXh1cEJsb2NrKToKKyAgICAgICAgKERDRVBoYXNlKToKKyAg
ICAgICAgKiBkZmcvREZHRWRnZURvbWluYXRlcy5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChFZGdlRG9taW5hdGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlRG9taW5hdGVz
OjpFZGdlRG9taW5hdGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlRG9taW5hdGVzOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlRG9taW5hdGVzOjpyZXN1bHQpOgorICAg
ICAgICAoSlNDOjpERkc6OmVkZ2VzRG9taW5hdGUpOgorICAgICAgICAqIGRmZy9ERkdMSUNNUGhh
c2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKExJQ01QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
TElDTVBoYXNlOjpMSUNNUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkxJQ01QaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpMSUNNUGhhc2U6OmF0dGVtcHRIb2lzdCk6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1MSUNNKToKKyAgICAgICAgKiBkZmcv
REZHTElDTVBoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
UGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6
CisKIDIwMTMtMDctMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBmb3VydGhUaWVyOiBERkcgTm9kZXMgc2hvdWxkIGJlIGFibGUgdG8gYWJzdHJhY3RseSB0ZWxs
IHlvdSB3aGF0IHRoZXkgcmVhZCBhbmQgd2hhdCB0aGV5IHdyaXRlCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUyOTU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTM4NCw2ICszODQsMTEgQEAKIAkJMEZFNTA1QTIxNzlCNjBFRDAwQjM1RjhDIC8qIEZU
TEZhaWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNTA1QTAxNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuY3BwICovOyB9OwogCQkwRkU1MDVB
MzE3OUI2MEVEMDBCMzVGOEMgLyogRlRMRmFpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QTExNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU1
MDVBNTE3OUNFM0VDMDBCMzVGOEMgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDVBNDE3OUNFM0VDMDBCMzVGOEMg
LyogREZHQ2xvYmJlcml6ZS5jcHAgKi87IH07CisJCTBGRTUwNUFCMTc5Q0VDMDgwMEIzNUY4QyAv
KiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUE2MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmNwcCAqLzsgfTsKKwkJMEZFNTA1QUMxNzlDRUMwODAwQjM1RjhDIC8qIERG
R0F0VGFpbEFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTUwNUE3MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFj
dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZFNTA1QUQxNzlDRUMwODAwQjM1RjhDIC8qIERGR0VkZ2VEb21pbmF0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUE4MTc5Q0VDMDgw
MEIzNUY4QyAvKiBERkdFZGdlRG9taW5hdGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1QUUxNzlDRUMwODAwQjM1RjhDIC8qIERGR0xJ
Q01QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkU1MDVBOTE3OUNFQzA4MDBCMzVGOEMgLyogREZHTElDTVBoYXNlLmNwcCAqLzsgfTsKKwkJ
MEZFNTA1QUYxNzlDRUMwODAwQjM1RjhDIC8qIERGR0xJQ01QaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QUExNzlDRUMwODAwQjM1RjhD
IC8qIERGR0xJQ01QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi87
IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzRB
MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlh
dGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTQ0Niw2ICsxNDUxLDExIEBACiAJCTBGRTUwNUEwMTc5QjYwRUQwMEIzNUY4QyAvKiBGVExG
YWlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEZhaWwuY3Bw
OyBwYXRoID0gZnRsL0ZUTEZhaWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkU1MDVBMTE3OUI2MEVEMDBCMzVGOEMgLyogRlRMRmFpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExGYWlsLmg7IHBhdGggPSBmdGwvRlRMRmFpbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkU1MDVBNDE3OUNFM0VDMDBCMzVGOEMgLyogREZHQ2xvYmJl
cml6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVy
aXplLmNwcDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFNTA1QTYxNzlDRUMwODAwQjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0
U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXRUYWls
QWJzdHJhY3RTdGF0ZS5jcHA7IHBhdGggPSBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNUE3MTc5Q0VDMDgwMEIzNUY4QyAv
KiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdBdFRhaWxBYnN0cmFj
dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNUE4MTc5Q0VDMDgw
MEIzNUY4QyAvKiBERkdFZGdlRG9taW5hdGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0VkZ2VEb21pbmF0ZXMuaDsgcGF0aCA9IGRmZy9ERkdFZGdlRG9taW5hdGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNUE5MTc5Q0VDMDgwMEIzNUY4QyAv
KiBERkdMSUNNUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHTElDTVBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMSUNNUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkU1MDVBQTE3OUNFQzA4MDBCMzVGOEMgLyogREZHTElDTVBo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xJQ01QaGFzZS5oOyBw
YXRoID0gZGZnL0RGR0xJQ01QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRj
aHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0
aW9ucy5oOyBwYXRoID0gZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTMwMjYsNiArMzAzNiw4IEBACiAJCQkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1
OTdDIC8qIERGR0FycmF5TW9kZS5oICovLAogCQkJCTBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovLAogCQkJCTBGQzA5NzZDMTQ2OEFCNEEwMENGMjQ0
MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLywKKwkJCQkwRkU1MDVBNjE3OUNFQzA4MDBCMzVG
OEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCisJCQkJMEZFNTA1QTcxNzlDRUMw
ODAwQjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjcxNENBMTE2
RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJ
CQkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuaCAqLywKIAkJCQkwRkU1MDU2MjE3OEY1QjA1MDBCMzVGOEMgLyogREZHQmFzaWNCbG9jay5j
cHAgKi8sCkBAIC0zMDc5LDYgKzMwOTEsNyBAQAogCQkJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFD
QiAvKiBERkdEcml2ZXIuaCAqLywKIAkJCQkwRkI0QjUxQjE2QjYyNzcyMDAzRjY5NkIgLyogREZH
RWRnZS5jcHAgKi8sCiAJCQkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAq
LywKKwkJCQkwRkU1MDVBODE3OUNFQzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5oICov
LAogCQkJCTBGRTUwNTkyMTc5QTYwNDUwMEIzNUY4QyAvKiBERkdFZGdlVXNlc1N0cnVjdHVyZS5o
ICovLAogCQkJCTBGREIyQ0QxMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIu
Y3BwICovLAogCQkJCTBGREIyQ0QyMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6
ZXIuaCAqLywKQEAgLTMxMDcsNiArMzEyMCw4IEBACiAJCQkJMEZEQjJDRDYxNzQyRDgwNDAwN0Iz
QzFCIC8qIERGR0pJVEZpbmFsaXplci5oICovLAogCQkJCTBGNDZFNkMyMTc2RjhBNUIwMEUxRjc1
NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi8sCiAJCQkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1
IC8qIERGR0xhenlKU1ZhbHVlLmggKi8sCisJCQkJMEZFNTA1QTkxNzlDRUMwODAwQjM1RjhDIC8q
IERGR0xJQ01QaGFzZS5jcHAgKi8sCisJCQkJMEZFNTA1QUExNzlDRUMwODAwQjM1RjhDIC8qIERG
R0xJQ01QaGFzZS5oICovLAogCQkJCTBGRTUwNTZCMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuY3BwICovLAogCQkJCTBGRTUwNTZDMTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLywKIAkJCQkwRkI0QjUxQzE2QjYyNzcyMDAz
RjY5NkIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwICovLApAQCAtMzU5OCw2ICszNjEzLDcgQEAK
IAkJCQlCQzE4QzQxMDBFMTZGNUNEMDBCMzQ0NjAgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMUYxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk5MEVEMUQzQUUwMEYx
RjY4MSAvKiBJbnN0cnVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1QUMxNzlDRUMw
ODAwQjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkU1MDU5RDE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTM2MDUsNiArMzYyMSw3IEBACiAJCQkJODYwQkQ4MDExNDhF
QTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTMw
RTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDE0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0Q29yZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFNTA1QUYxNzlDRUMwODAwQjM1RjhDIC8qIERGR0xJQ01QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJENDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFy
Z3VtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM4NTEsNiArMzg2OCw3IEBACiAJCQkJMTRERjA0
REExNkIzOTk2RDAwMTZBNTEzIC8qIFN0YXRpY1Byb3BlcnR5QW5hbHlzaXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0Q0E5NThCMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5
emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTY3REI5MzE3NTE5QjRBMDA2QTgxNEYgLyogSlNT
dGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNUFEMTc5Q0VDMDgwMEIzNUY4
QyAvKiBERkdFZGdlRG9taW5hdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzMwQjYxMjEyNTAw
NjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDY2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjgwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ09iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC00Mzg5LDYgKzQ0MDcsNyBAQAogCQkJCTBGRkZDOTVGMTRFRjkwQkIw
MEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5RDMzNzAxNjVEQkI5MDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1QUUxNzlDRUMwODAwQjM1RjhDIC8qIERGR0xJQ01Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDODEwN0VDMzc2MDA0MjdBNDggLyog
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2
MDA0MjdBNDggLyogRXJyb3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
QTEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00NDkyLDYgKzQ1MTEsNyBAQAogCQkJCTE0QkQ1QTMyMEEzRTkxRjYwMEJBRjU5QyAvKiBKU1Zh
bHVlUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYwMDQyN0E0OCAv
KiBKU1ZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjFDMTY3QkFC
RUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZF
NTA1QUIxNzlDRUMwODAwQjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTc0ODJCOTQxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1h
cFJlZlByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAwNjZB
NDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE4MTY3QkFC
RUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJz
dHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQXRUYWlsQWJzdHJhY3RT
dGF0ZTo6QXRUYWlsQWJzdHJhY3RTdGF0ZSgpCisgICAgOiBtX2Jsb2NrKDApCit7Cit9CisKK0F0
VGFpbEFic3RyYWN0U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRlKCkgeyB9CisKK3ZvaWQgQXRU
YWlsQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAg
bV9ibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuYWRkKG5vZGUsIEFic3RyYWN0VmFsdWUoKSk7Cit9
CisKK0Fic3RyYWN0VmFsdWUmIEF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUoTm9kZSogbm9k
ZSkKK3sKKyAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgaXRlciA9
IG1fYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsLmZpbmQobm9kZSk7CisgICAgQVNTRVJUKGl0ZXIg
IT0gbV9ibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuZW5kKCkpOworICAgIHJldHVybiBpdGVyLT52
YWx1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJz
dHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXRUYWlsQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0F0VGFpbEFic3RyYWN0U3RhdGVfaAorI2RlZmluZSBERkdBdFRhaWxBYnN0cmFj
dFN0YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9jay5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsgCisKK2NsYXNzIEF0VGFpbEFic3RyYWN0U3RhdGUgeworcHVibGljOgorICAgIEF0
VGFpbEFic3RyYWN0U3RhdGUoKTsKKyAgICAKKyAgICB+QXRUYWlsQWJzdHJhY3RTdGF0ZSgpOwor
ICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVRvKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAg
ICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNyZWF0ZVZhbHVl
Rm9yTm9kZShOb2RlKik7CisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlKik7CisgICAg
QWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2UpIHsgcmV0dXJuIGZvck5vZGUoZWRnZS5u
b2RlKCkpOyB9CisgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpIHsgcmV0
dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbDsgfQorICAgIAorICAgIEJhc2ljQmxvY2sqIGJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIHsg
cmV0dXJuIG1fYmxvY2stPmNmYURpZEZpbmlzaDsgfQorICAgIAorICAgIHZvaWQgc2V0RGlkQ2xv
YmJlcihib29sKSB7IH0KKyAgICB2b2lkIHNldElzVmFsaWQoYm9vbCBpc1ZhbGlkKSB7IG1fYmxv
Y2stPmNmYURpZEZpbmlzaCA9IGlzVmFsaWQ7IH0KKyAgICB2b2lkIHNldEJyYW5jaERpcmVjdGlv
bihCcmFuY2hEaXJlY3Rpb24pIHsgfQorICAgIHZvaWQgc2V0Rm91bmRDb25zdGFudHMoYm9vbCkg
eyB9CisgICAgYm9vbCBoYXZlU3RydWN0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gLy8g
SXQncyBhbHdheXMgc2FmZSB0byByZXR1cm4gdHJ1ZS4KKyAgICB2b2lkIHNldEhhdmVTdHJ1Y3R1
cmVzKGJvb2wpIHsgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR0F0VGFpbEFic3RyYWN0U3RhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTUyOTU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDYgKzYyLDExIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MK
ICAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUpIHsgbV9ub2Rlcy5ncm93KHNpemUpOyB9CiAgICAg
CiAgICAgdm9pZCBhcHBlbmQoTm9kZSogbm9kZSkgeyBtX25vZGVzLmFwcGVuZChub2RlKTsgfQor
ICAgIHZvaWQgaW5zZXJ0QmVmb3JlTGFzdChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgYXBw
ZW5kKGxhc3QoKSk7CisgICAgICAgIGF0KHNpemUoKSAtIDIpID0gbm9kZTsKKyAgICB9CiAgICAg
CiAgICAgc2l6ZV90IG51bU5vZGVzKCkgY29uc3QgeyByZXR1cm4gcGhpcy5zaXplKCkgKyBzaXpl
KCk7IH0KICAgICBOb2RlKiBub2RlKHNpemVfdCBpKSBjb25zdApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTUy
OTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUg
Tm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9uVGVybWluYWwoR3JhcGgmIGdyYXBoLCBTcGVjdWxh
dGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1zQ29tbWEg
dmFsdWVBcmdzKTsgXAotICAgICAgICBhcHBlbmQobGFzdCgpKTsgXAotICAgICAgICBhdChzaXpl
KCkgLSAyKSA9IHJlc3VsdDsgXAorICAgICAgICBpbnNlcnRCZWZvcmVMYXN0KHJlc3VsdCk7IFwK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAogICAgIH0KICAgICBERkdfVkFSSUFESUNfVEVNUExB
VEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAkocmV2aXNpb24gMTUyOTU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWJv
b2wgZGlkV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKK2Jvb2wgZG9lc1dyaXRlcyhH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiB7CiAgICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsK
ICAgICBDaGVja0Nsb2JiZXJpemUgYWRkV3JpdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTUyOTU5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyMiw3ICs2
MjIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXN1bHQ7CiB9OwogCi1ib29sIGRpZFdyaXRl
cyhHcmFwaCYsIE5vZGUqKTsKK2Jvb2wgZG9lc1dyaXRlcyhHcmFwaCYsIE5vZGUqKTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTUyOTU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAg
Y2xhc3MgRENFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgogICAgIERDRVBoYXNlKEdy
YXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImRlYWQgY29kZSBlbGltaW5hdGlv
biIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCiAgICAgewogICAgIH0KICAgICAK
QEAgLTEwNCw3NSArMTA1LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAg
ICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOwotCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykgewot
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAg
ICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKChub2Rl
LT5vcCgpID09IFNldExvY2FsKSA9PSAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2so
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5
IHRoYXQgVUludDMyVG9OdW1iZXIgaXMgZGVhZCBidXQgaXRzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjaGlsZCBpc24ndDsgaWYgc28gdGhlbiB3ZSBzaG91bGQgTW92SGludCB0aGUgY2hp
bGQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRH
ZW5lcmF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gVUludDMyVG9OdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkgPSBub2RlLT5jaGlsZDEoKS0+Y2hpbGQxKCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhab21iaWVI
aW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2Uo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKE1vdkhpbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoTW92SGludEFuZENoZWNrKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291
bnQoMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAg
ICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTGVhdmUgdGhlbSBhcyBub3Qgc2hvdWxkR2VuZXJhdGUuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2Rl
LT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSB8
fCBlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3Jp
Z2luLCBlZGdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbVVuY2hlY2tlZCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQ
aGFudG9tQ2hpbGRyZW4obm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNv
dW50KDEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OworICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgICAgICAvLyBO
ZWVkIHRvIHByb2Nlc3MgdGhlIGdyYXBoIGluIHJldmVyc2UgREZTIG9yZGVyLCBzbyB0aGF0IHdl
IGdldCB0byB0aGUgdXNlcworICAgICAgICAgICAgLy8gb2YgYSBub2RlIGJlZm9yZSB3ZSBnZXQg
dG8gdGhlIG5vZGUgaXRzZWxmLgorICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0
aEZpcnN0OworICAgICAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihk
ZXB0aEZpcnN0KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRlcHRoRmlyc3Quc2l6
ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgIGZpeHVwQmxvY2soZGVwdGhGaXJzdFtpXSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpCisgICAg
ICAgICAgICAgICAgZml4dXBCbG9jayhtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPSBFeGFjdFJl
ZkNvdW50OwpAQCAtMjA2LDYgKzE0OCw3NSBAQCBwcml2YXRlOgogICAgICAgICBjb3VudE5vZGUo
ZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGZpeHVwQmxvY2soQmFzaWNCbG9j
ayogYmxvY2spCisgICAgeworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsg
aW5kZXhJbkJsb2NrLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGlu
ZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAg
ICAgIGNhc2UgTW92SGludDogeworICAgICAgICAgICAgICAgIEFTU0VSVCgobm9kZS0+b3AoKSA9
PSBTZXRMb2NhbCkgPT0gKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSk7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBVSW50MzJUb051
bWJlciBpcyBkZWFkIGJ1dCBpdHMKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hpbGQgaXNuJ3Q7
IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNoaWxkLgorICAgICAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBVSW50MzJUb051bWJlcikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gbm9kZS0+Y2hpbGQxKCktPmNo
aWxkMSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKFpvbWJpZUhpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnRB
bmRDaGVjayk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBhcyBub3Qgc2hvdWxkR2VuZXJhdGUuCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJz
dENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UgfHwgZWRnZS53aWxsTm90
SGF2ZUNoZWNrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgZWRnZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFu
dG9tVW5jaGVja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0
KCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgZWxpbWluYXRlSXJyZWxl
dmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZD
b3VudCgxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gfQorICAgICAg
ICB9CisKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorICAg
IAogICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihOb2RlKiBub2Rl
KQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6
OlNpemU7ICsraSkgewpAQCAtMjE4LDYgKzIyOSw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAog
ICAgIFZlY3RvcjxOb2RlKiwgMTI4PiBtX3dvcmtsaXN0OworICAgIEluc2VydGlvblNldCBtX2lu
c2VydGlvblNldDsKIH07CiAKIGJvb2wgcGVyZm9ybURDRShHcmFwaCYgZ3JhcGgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZURvbWluYXRlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdFZGdlRG9taW5hdGVzX2gKKyNkZWZpbmUgREZH
RWRnZURvbWluYXRlc19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBFZGdlRG9taW5hdGVzIHsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCitwdWJsaWM6CisgICAgRWRnZURvbWluYXRlcyhH
cmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgp
CisgICAgICAgICwgbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX3Jlc3VsdCh0cnVlKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKE5vZGUqLCBFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBib29sIHJlc3VsdCA9IG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRl
cyhlZGdlLm5vZGUoKS0+bWlzYy5vd25lciwgbV9ibG9jayk7CisgICAgICAgIGlmICh2ZXJib3Nl
KSB7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDaGVja2luZyBpZiAi
LCBlZGdlLCAiIGluICIsICplZGdlLm5vZGUoKS0+bWlzYy5vd25lciwKKyAgICAgICAgICAgICAg
ICAiIGRvbWluYXRlcyAiLCAqbV9ibG9jaywgIjogIiwgcmVzdWx0LCAiXG4iKTsKKyAgICAgICAg
fQorICAgICAgICBtX3Jlc3VsdCAmPSByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVz
dWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KKworcHJpdmF0ZToKKyAgICBHcmFwaCYg
bV9ncmFwaDsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIGJvb2wgbV9yZXN1bHQ7Cit9
OworCitpbmxpbmUgYm9vbCBlZGdlc0RvbWluYXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
QmFzaWNCbG9jayogYmxvY2spCit7CisgICAgRWRnZURvbWluYXRlcyBlZGdlRG9taW5hdGVzKGdy
YXBoLCBibG9jayk7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIGVk
Z2VEb21pbmF0ZXMpOworICAgIHJldHVybiBlZGdlRG9taW5hdGVzLnJlc3VsdCgpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR0VkZ2VEb21pbmF0ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMSUNNUGhhc2UuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUg
IkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgorI2lu
Y2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdFZGdlRG9taW5hdGVzLmgiCisj
aW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNs
dWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1NhZmVUb0V4ZWN1dGUuaCIKKyNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworbmFt
ZXNwYWNlIHsKKworc3RydWN0IExvb3BEYXRhIHsKKyAgICBMb29wRGF0YSgpCisgICAgICAgIDog
cHJlSGVhZGVyKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBDbG9iYmVyU2V0IHdyaXRlczsK
KyAgICBCYXNpY0Jsb2NrKiBwcmVIZWFkZXI7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKKworY2xhc3MgTElDTVBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBMSUNN
UGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiTElDTSIpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9n
cmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0
b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgbV9ncmFwaC5tX25hdHVy
YWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBt
X2RhdGEucmVzaXplKG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMubnVtTG9vcHMoKSk7CisgICAgICAg
IAorICAgICAgICAvLyBGaWd1cmUgb3V0IHRoZSBzZXQgb2YgdGhpbmdzIGVhY2ggbG9vcCB3cml0
ZXMgdG8sIG5vdCBpbmNsdWRpbmcgYmxvY2tzIHRoYXQKKyAgICAgICAgLy8gYmVsb25nIHRvIGlu
bmVyIGxvb3BzLiBXZSBmaXggdGhpcyBsYXRlci4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmlubmVy
TW9zdExvb3BPZihibG9jayk7CisgICAgICAgICAgICBpZiAoIWxvb3ApCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBMb29wRGF0YSYgZGF0YSA9IG1fZGF0YVtsb29wLT5p
bmRleCgpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNp
emUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgICAgIGFkZFdyaXRlcyhtX2dyYXBoLCBi
bG9jay0+YXQobm9kZUluZGV4KSwgZGF0YS53cml0ZXMpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBGb3IgZWFjaCBsb29wOgorICAgICAgICAvLyAtIElkZW50aWZ5IGl0cyBwcmUt
aGVhZGVyLgorICAgICAgICAvLyAtIE1ha2Ugc3VyZSBpdHMgb3V0ZXIgbG9vcHMga25vdyB3aGF0
IGl0IGNsb2JiZXJzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRleCA9IG1fZ3JhcGgu
bV9uYXR1cmFsTG9vcHMubnVtTG9vcHMoKTsgbG9vcEluZGV4LS07KSB7CisgICAgICAgICAgICBj
b25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMubG9vcChsb29w
SW5kZXgpOworICAgICAgICAgICAgTG9vcERhdGEmIGRhdGEgPSBtX2RhdGFbbG9vcC5pbmRleCgp
XTsKKyAgICAgICAgICAgIGZvciAoCisgICAgICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3Aq
IG91dGVyTG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuaW5uZXJNb3N0T3V0ZXJMb29wKGxv
b3ApOworICAgICAgICAgICAgICAgIG91dGVyTG9vcDsKKyAgICAgICAgICAgICAgICBvdXRlckxv
b3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmlubmVyTW9zdE91dGVyTG9vcCgqb3V0ZXJMb29w
KSkKKyAgICAgICAgICAgICAgICBtX2RhdGFbb3V0ZXJMb29wLT5pbmRleCgpXS53cml0ZXMuYWRk
QWxsKGRhdGEud3JpdGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayog
aGVhZGVyID0gbG9vcC5oZWFkZXIoKTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZUhlYWRl
ciA9IDA7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBoZWFkZXItPnByZWRlY2Vzc29y
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nv
ciA9IGhlYWRlci0+cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoaGVhZGVyLCBwcmVkZWNlc3NvcikpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFwcmVI
ZWFkZXIgfHwgcHJlSGVhZGVyID09IHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBwcmVI
ZWFkZXIgPSBwcmVkZWNlc3NvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocHJlSGVhZGVyLT5sYXN0KCktPm9wKCkgPT0gSnVtcCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGEucHJlSGVhZGVyID0gcHJlSGVhZGVyOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmluaXRpYWxpemVOb2RlT3duZXJzKCk7
CisgICAgICAgIAorICAgICAgICAvLyBXYWxrIGFsbCBiYXNpYyBibG9ja3MgdGhhdCBiZWxvbmcg
dG8gbG9vcHMsIGxvb2tpbmcgZm9yIGhvaXN0aW5nCisgICAgICAgIC8vIG9wcG9ydHVuaXRpZXMu
IFdlIHdhbnQgdG8gaG9pc3QgdG8gdGhlIG91dGVyLW1vc3QgbG9vcC4gSG9pc3RpbmcgaXMgdmFs
aWQKKyAgICAgICAgLy8gaWY6CisgICAgICAgIC8vIC0gVGhlIG5vZGUgZG9lc24ndCB3cml0ZSBh
bnl0aGluZy4KKyAgICAgICAgLy8gLSBUaGUgbm9kZSBkb2Vzbid0IHJlYWQgYW55dGhpbmcgdGhh
dCB0aGUgbG9vcCB3cml0ZXMuCisgICAgICAgIC8vIC0gVGhlIHByZUhlYWRlcidzIHN0YXRlIGF0
IHRhaWwgbWFrZXMgdGhlIG5vZGUgc2FmZSB0byBleGVjdXRlLgorICAgICAgICAvLyAtIFRoZSBs
b29wJ3MgY2hpbGRyZW4gYWxsIGJlbG9uZyB0byBub2RlcyB0aGF0IHN0cmljdGx5IGRvbWluYXRl
IHRoZSBsb29wIGhlYWRlci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRm9yIG1heGltdW0gcHJv
Zml0LCB3ZSB3YWxrIGJsb2NrcyBpbiBERlMgb3JkZXIgdG8gZW5zdXJlIHRoYXQgd2UgZ2VuZXJh
bGx5CisgICAgICAgIC8vIHRlbmQgdG8gaG9pc3QgZG9taW5hdG9ycyBiZWZvcmUgZG9taW5hdGVl
cy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWxzbywgd2UgbmVlZCB0byByZW1lbWJlciB0byBj
bGVhciBOb2RlRXhpdHNGb3J3YXJkIGZvciBhbnkgbm9kZXMgd2UgaG9pc3RlZC4KKyAgICAgICAg
CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhGaXJzdDsKKyAgICAgICAgbV9ncmFw
aC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgVmVjdG9y
PGNvbnN0IE5hdHVyYWxMb29wKj4gbG9vcFN0YWNrOworICAgICAgICBmb3IgKAorICAgICAgICAg
ICAgdW5zaWduZWQgZGVwdGhGaXJzdEluZGV4ID0gMDsKKyAgICAgICAgICAgIGRlcHRoRmlyc3RJ
bmRleCA8IGRlcHRoRmlyc3Quc2l6ZSgpOworICAgICAgICAgICAgKytkZXB0aEZpcnN0SW5kZXgp
IHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBkZXB0aEZp
cnN0W2RlcHRoRmlyc3RJbmRleF07CisgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogbG9v
cCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKKyAgICAg
ICAgICAgIGlmICghbG9vcCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGxvb3BTdGFjay5yZXNpemUoMCk7CisgICAgICAgICAgICBmb3IgKAorICAgICAgICAgICAgICAg
IGNvbnN0IE5hdHVyYWxMb29wKiBjdXJyZW50ID0gbG9vcDsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50OworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmlu
bmVyTW9zdE91dGVyTG9vcCgqY3VycmVudCkpCisgICAgICAgICAgICAgICAgbG9vcFN0YWNrLmFw
cGVuZChjdXJyZW50KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUmVtZW1iZXI6IHRo
ZSBsb29wIHN0YWNrIGhhcyB0aGUgaW5uZXItbW9zdCBsb29wIGF0IGluZGV4IDAsIHNvIGlmIHdl
IHdhbnQKKyAgICAgICAgICAgIC8vIHRvIGJpYXMgaG9pc3RpbmcgdG8gb3V0ZXIgbG9vcHMgdGhl
biB3ZSBuZWVkIHRvIHVzZSBhIHJldmVyc2UgbG9vcC4KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqJiBub2RlUmVmID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGRvZXNXcml0ZXMobV9ncmFwaCwg
bm9kZVJlZikpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3RhY2tJbmRleCA9IGxvb3BTdGFjay5z
aXplKCk7IHN0YWNrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGVtcHRI
b2lzdChub2RlUmVmLCBsb29wU3RhY2tbc3RhY2tJbmRleF0pKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBhdHRlbXB0SG9pc3QoTm9kZSomIG5vZGVSZWYsIGNvbnN0IE5hdHVyYWxMb29wKiBsb29w
KQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVSZWY7CisgICAgICAgIExvb3BEYXRh
JiBkYXRhID0gbV9kYXRhW2xvb3AtPmluZGV4KCldOworICAgICAgICAKKyAgICAgICAgaWYgKCFl
ZGdlc0RvbWluYXRlKG1fZ3JhcGgsIG5vZGUsIGRhdGEucHJlSGVhZGVyKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZWFkc092ZXJsYXAobV9ncmFw
aCwgbm9kZSwgZGF0YS53cml0ZXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oZGF0YS5wcmVIZWFkZXIpOworICAgICAg
ICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBkYXRhLnByZUhlYWRlci0+aW5zZXJ0
QmVmb3JlTGFzdChub2RlKTsKKyAgICAgICAgbm9kZS0+bWlzYy5vd25lciA9IGRhdGEucHJlSGVh
ZGVyOworICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVFeGl0c0ZvcndhcmQpOworICAgICAg
ICBub2RlLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IGRhdGEucHJlSGVhZGVyLT5sYXN0KCkt
PmNvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0OworICAgICAgICAKKyAgICAgICAgLy8gSXQganVzdCBz
byBoYXBwZW5zIHRoYXQgYWxsIG9mIHRoZSBub2RlcyB3ZSBjdXJyZW50bHkga25vdyBob3cgdG8g
aG9pc3QKKyAgICAgICAgLy8gZG9uJ3QgaGF2ZSB2YXItYXJnIGNoaWxkcmVuLiBUaGF0IG1heSBj
aGFuZ2UgYW5kIHRoZW4gd2UgY2FuIGZpeCB0aGlzCisgICAgICAgIC8vIGNvZGUuIEJ1dCBmb3Ig
bm93IHdlIGp1c3QgYXNzZXJ0IHRoYXQncyB0aGUgY2FzZS4KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIShub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgCisgICAgICAg
IG5vZGVSZWYgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVP
cmlnaW4sIG5vZGUtPmNoaWxkcmVuKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIEF0VGFpbEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKKyAgICBWZWN0b3I8TG9vcERhdGE+
IG1fZGF0YTsKK307CisKK2Jvb2wgcGVyZm9ybUxJQ00oR3JhcGgmIGdyYXBoKQoreworICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgTElDTSBQaGFzZSIpOworICAgIHJldHVy
biBydW5QaGFzZTxMSUNNUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0xJQ01QaGFzZV9oCisjZGVmaW5lIERGR0xJQ01QaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBEb2VzIGxvb3AtaW52YXJpYW50IGNv
ZGUgbW90aW9uLCBvciBMSUNNIGZvciBzaG9ydC4gVGhpcyBvbmx5IGhvaXN0cyBjb2RlCisvLyBh
bmQgbmV2ZXIgc2lua3MgYW55dGhpbmcuIEEgbm9kZSBpcyBob2lzdGVkIGlmIGl0IGRvZXMgbm8g
d3JpdGVzLCBhbmQgaWYKKy8vIGl0cyByZWFkcyBkb24ndCBvdmVybGFwIHRoZSBsb29wJ3Mgd3Jp
dGVzLgorCitib29sIHBlcmZvcm1MSUNNKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTElDTVBo
YXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lv
biAxNTI5NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiREZHRmx1c2hMaXZlbmVzc0Fu
YWx5c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdGaXh1cFBoYXNlLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJERkdMSUNNUGhhc2UuaCIKICNpbmNsdWRlICJERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaCIKICNpbmNsdWRlICJERkdMb29wUHJlSGVhZGVyQ3JlYXRp
b25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIK
QEAgLTIwOCw2ICsyMDksOSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUlu
VGhyCiAgICAgICAgIHBlcmZvcm1TU0FDb252ZXJzaW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1M
aXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKKyAgICAgICAg
cGVyZm9ybUxJQ00oZGZnKTsKKyAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsK
KyAgICAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRmZyk7IC8vIFdl
IHJlbHkgb24gdGhpcyB0byBjb252ZXJ0IGRlYWQgU2V0TG9jYWxzIGludG8gdGhlIGFwcHJvcHJp
YXRlIGhpbnQsIGFuZCB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29nbml6ZWQg
YXMgZGVhZCBieSBMTFZNLgogICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwog
ICAgICAgICBwZXJmb3JtRmx1c2hMaXZlbmVzc0FuYWx5c2lzKGRmZyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207226</attachid>
            <date>2013-07-21 22:12:44 -0700</date>
            <delta_ts>2013-07-22 11:45:48 -0700</delta_ts>
            <desc>fixed some stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>41006</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDEzLTA3LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBkbyBhIGhpZ2gtbGV2ZWwgTElDTSBiZWZvcmUgZ29pbmcg
dG8gRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTg3NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIEltcGxlbWVudHMgTElDTSBob2lzdGluZyBmb3Igbm9kZXMgdGhhdCBuZXZlciB3cml0
ZSBhbnl0aGluZyBhbmQgbmV2ZXIgcmVhZAorICAgICAgICB0aGluZ3MgdGhhdCBhcmUgY2xvYmJl
cmVkIGJ5IHRoZSBsb29wLiBUaGVyZSBhcmUgc29tZSBvdGhlciBwcmVjb25kaXRpb25zIGZvcgor
ICAgICAgICBob2lzdGluZywgc2VlIERGR0xJQ01QaGFzZS5jcHAuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OkF0VGFpbEFic3RyYWN0U3RhdGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpjcmVhdGVWYWx1ZUZv
ck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUp
OgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmg6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKEF0VGFpbEFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemVUbyk6CisgICAgICAgIChKU0M6OkRG
Rzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXRU
YWlsQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxB
YnN0cmFjdFN0YXRlOjpibG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6
c2V0RGlkQ2xvYmJlcik6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6
c2V0SXNWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6c2V0
QnJhbmNoRGlyZWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRl
OjpzZXRGb3VuZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6aGF2ZVN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0
U3RhdGU6OnNldEhhdmVTdHJ1Y3R1cmVzKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5o
OgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Omluc2VydEJlZm9yZUxhc3QpOgorICAg
ICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oOgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc1dyaXRl
cyk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6
RENFUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjpydW4pOgorICAgICAgICAo
SlNDOjpERkc6OkRDRVBoYXNlOjpmaXh1cEJsb2NrKToKKyAgICAgICAgKERDRVBoYXNlKToKKyAg
ICAgICAgKiBkZmcvREZHRWRnZURvbWluYXRlcy5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChFZGdlRG9taW5hdGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlRG9taW5hdGVz
OjpFZGdlRG9taW5hdGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlRG9taW5hdGVzOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlRG9taW5hdGVzOjpyZXN1bHQpOgorICAg
ICAgICAoSlNDOjpERkc6OmVkZ2VzRG9taW5hdGUpOgorICAgICAgICAqIGRmZy9ERkdMSUNNUGhh
c2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKExJQ01QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
TElDTVBoYXNlOjpMSUNNUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkxJQ01QaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpMSUNNUGhhc2U6OmF0dGVtcHRIb2lzdCk6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1MSUNNKToKKyAgICAgICAgKiBkZmcv
REZHTElDTVBoYXNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZH
UGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6
CisKIDIwMTMtMDctMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBmb3VydGhUaWVyOiBERkcgTm9kZXMgc2hvdWxkIGJlIGFibGUgdG8gYWJzdHJhY3RseSB0ZWxs
IHlvdSB3aGF0IHRoZXkgcmVhZCBhbmQgd2hhdCB0aGV5IHdyaXRlCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUyOTU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTM4NCw2ICszODQsMTEgQEAKIAkJMEZFNTA1QTIxNzlCNjBFRDAwQjM1RjhDIC8qIEZU
TEZhaWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNTA1QTAxNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuY3BwICovOyB9OwogCQkwRkU1MDVB
MzE3OUI2MEVEMDBCMzVGOEMgLyogRlRMRmFpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QTExNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU1
MDVBNTE3OUNFM0VDMDBCMzVGOEMgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDVBNDE3OUNFM0VDMDBCMzVGOEMg
LyogREZHQ2xvYmJlcml6ZS5jcHAgKi87IH07CisJCTBGRTUwNUFCMTc5Q0VDMDgwMEIzNUY4QyAv
KiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUE2MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmNwcCAqLzsgfTsKKwkJMEZFNTA1QUMxNzlDRUMwODAwQjM1RjhDIC8qIERG
R0F0VGFpbEFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTUwNUE3MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFj
dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZFNTA1QUQxNzlDRUMwODAwQjM1RjhDIC8qIERGR0VkZ2VEb21pbmF0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUE4MTc5Q0VDMDgw
MEIzNUY4QyAvKiBERkdFZGdlRG9taW5hdGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1QUUxNzlDRUMwODAwQjM1RjhDIC8qIERGR0xJ
Q01QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkU1MDVBOTE3OUNFQzA4MDBCMzVGOEMgLyogREZHTElDTVBoYXNlLmNwcCAqLzsgfTsKKwkJ
MEZFNTA1QUYxNzlDRUMwODAwQjM1RjhDIC8qIERGR0xJQ01QaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QUExNzlDRUMwODAwQjM1RjhD
IC8qIERGR0xJQ01QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi87
IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzRB
MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlh
dGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTQ0Niw2ICsxNDUxLDExIEBACiAJCTBGRTUwNUEwMTc5QjYwRUQwMEIzNUY4QyAvKiBGVExG
YWlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEZhaWwuY3Bw
OyBwYXRoID0gZnRsL0ZUTEZhaWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkU1MDVBMTE3OUI2MEVEMDBCMzVGOEMgLyogRlRMRmFpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExGYWlsLmg7IHBhdGggPSBmdGwvRlRMRmFpbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkU1MDVBNDE3OUNFM0VDMDBCMzVGOEMgLyogREZHQ2xvYmJl
cml6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVy
aXplLmNwcDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyaXplLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFNTA1QTYxNzlDRUMwODAwQjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0
U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXRUYWls
QWJzdHJhY3RTdGF0ZS5jcHA7IHBhdGggPSBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNUE3MTc5Q0VDMDgwMEIzNUY4QyAv
KiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdBdFRhaWxBYnN0cmFj
dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNUE4MTc5Q0VDMDgw
MEIzNUY4QyAvKiBERkdFZGdlRG9taW5hdGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0VkZ2VEb21pbmF0ZXMuaDsgcGF0aCA9IGRmZy9ERkdFZGdlRG9taW5hdGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNUE5MTc5Q0VDMDgwMEIzNUY4QyAv
KiBERkdMSUNNUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHTElDTVBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMSUNNUGhhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkU1MDVBQTE3OUNFQzA4MDBCMzVGOEMgLyogREZHTElDTVBo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xJQ01QaGFzZS5oOyBw
YXRoID0gZGZnL0RGR0xJQ01QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRj
aHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0
aW9ucy5oOyBwYXRoID0gZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTMwMjYsNiArMzAzNiw4IEBACiAJCQkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1
OTdDIC8qIERGR0FycmF5TW9kZS5oICovLAogCQkJCTBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICovLAogCQkJCTBGQzA5NzZDMTQ2OEFCNEEwMENGMjQ0
MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLywKKwkJCQkwRkU1MDVBNjE3OUNFQzA4MDBCMzVG
OEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCisJCQkJMEZFNTA1QTcxNzlDRUMw
ODAwQjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjcxNENBMTE2
RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8sCiAJ
CQkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuaCAqLywKIAkJCQkwRkU1MDU2MjE3OEY1QjA1MDBCMzVGOEMgLyogREZHQmFzaWNCbG9jay5j
cHAgKi8sCkBAIC0zMDc5LDYgKzMwOTEsNyBAQAogCQkJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFD
QiAvKiBERkdEcml2ZXIuaCAqLywKIAkJCQkwRkI0QjUxQjE2QjYyNzcyMDAzRjY5NkIgLyogREZH
RWRnZS5jcHAgKi8sCiAJCQkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAq
LywKKwkJCQkwRkU1MDVBODE3OUNFQzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5oICov
LAogCQkJCTBGRTUwNTkyMTc5QTYwNDUwMEIzNUY4QyAvKiBERkdFZGdlVXNlc1N0cnVjdHVyZS5o
ICovLAogCQkJCTBGREIyQ0QxMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6ZXIu
Y3BwICovLAogCQkJCTBGREIyQ0QyMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGYWlsZWRGaW5hbGl6
ZXIuaCAqLywKQEAgLTMxMDcsNiArMzEyMCw4IEBACiAJCQkJMEZEQjJDRDYxNzQyRDgwNDAwN0Iz
QzFCIC8qIERGR0pJVEZpbmFsaXplci5oICovLAogCQkJCTBGNDZFNkMyMTc2RjhBNUIwMEUxRjc1
NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi8sCiAJCQkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1
IC8qIERGR0xhenlKU1ZhbHVlLmggKi8sCisJCQkJMEZFNTA1QTkxNzlDRUMwODAwQjM1RjhDIC8q
IERGR0xJQ01QaGFzZS5jcHAgKi8sCisJCQkJMEZFNTA1QUExNzlDRUMwODAwQjM1RjhDIC8qIERG
R0xJQ01QaGFzZS5oICovLAogCQkJCTBGRTUwNTZCMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuY3BwICovLAogCQkJCTBGRTUwNTZDMTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCAqLywKIAkJCQkwRkI0QjUxQzE2QjYyNzcyMDAz
RjY5NkIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwICovLApAQCAtMzU5OCw2ICszNjEzLDcgQEAK
IAkJCQlCQzE4QzQxMDBFMTZGNUNEMDBCMzQ0NjAgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMUYxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk5MEVEMUQzQUUwMEYx
RjY4MSAvKiBJbnN0cnVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1QUMxNzlDRUMw
ODAwQjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkU1MDU5RDE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTM2MDUsNiArMzYyMSw3IEBACiAJCQkJODYwQkQ4MDExNDhF
QTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTMw
RTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDE0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0Q29yZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFNTA1QUYxNzlDRUMwODAwQjM1RjhDIC8qIERGR0xJQ01QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJENDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFy
Z3VtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTM4NTEsNiArMzg2OCw3IEBACiAJCQkJMTRERjA0
REExNkIzOTk2RDAwMTZBNTEzIC8qIFN0YXRpY1Byb3BlcnR5QW5hbHlzaXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0Q0E5NThCMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5
emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTY3REI5MzE3NTE5QjRBMDA2QTgxNEYgLyogSlNT
dGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNUFEMTc5Q0VDMDgwMEIzNUY4
QyAvKiBERkdFZGdlRG9taW5hdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzMwQjYxMjEyNTAw
NjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDY2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjgwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ09iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC00Mzg5LDYgKzQ0MDcsNyBAQAogCQkJCTBGRkZDOTVGMTRFRjkwQkIw
MEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5RDMzNzAxNjVEQkI5MDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1QUUxNzlDRUMwODAwQjM1RjhDIC8qIERGR0xJQ01Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDODEwN0VDMzc2MDA0MjdBNDggLyog
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2
MDA0MjdBNDggLyogRXJyb3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
QTEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00NDkyLDYgKzQ1MTEsNyBAQAogCQkJCTE0QkQ1QTMyMEEzRTkxRjYwMEJBRjU5QyAvKiBKU1Zh
bHVlUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYwMDQyN0E0OCAv
KiBKU1ZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjFDMTY3QkFC
RUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZF
NTA1QUIxNzlDRUMwODAwQjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTc0ODJCOTQxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1h
cFJlZlByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAwNjZB
NDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE4MTY3QkFC
RUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJz
dHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQXRUYWlsQWJzdHJhY3RT
dGF0ZTo6QXRUYWlsQWJzdHJhY3RTdGF0ZSgpCisgICAgOiBtX2Jsb2NrKDApCit7Cit9CisKK0F0
VGFpbEFic3RyYWN0U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRlKCkgeyB9CisKK3ZvaWQgQXRU
YWlsQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAg
bV9ibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuYWRkKG5vZGUsIEFic3RyYWN0VmFsdWUoKSk7Cit9
CisKK0Fic3RyYWN0VmFsdWUmIEF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUoTm9kZSogbm9k
ZSkKK3sKKyAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgaXRlciA9
IG1fYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsLmZpbmQobm9kZSk7CisgICAgQVNTRVJUKGl0ZXIg
IT0gbV9ibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuZW5kKCkpOworICAgIHJldHVybiBpdGVyLT52
YWx1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJz
dHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXRUYWlsQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0F0VGFpbEFic3RyYWN0U3RhdGVfaAorI2RlZmluZSBERkdBdFRhaWxBYnN0cmFj
dFN0YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9jay5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsgCisKK2NsYXNzIEF0VGFpbEFic3RyYWN0U3RhdGUgeworcHVibGljOgorICAgIEF0
VGFpbEFic3RyYWN0U3RhdGUoKTsKKyAgICAKKyAgICB+QXRUYWlsQWJzdHJhY3RTdGF0ZSgpOwor
ICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVRvKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAg
ICAgICAgbV9ibG9jayA9IGJsb2NrOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNyZWF0ZVZhbHVl
Rm9yTm9kZShOb2RlKik7CisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlKik7CisgICAg
QWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2UpIHsgcmV0dXJuIGZvck5vZGUoZWRnZS5u
b2RlKCkpOyB9CisgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpIHsgcmV0
dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbDsgfQorICAgIAorICAgIEJhc2ljQmxvY2sqIGJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpIHsg
cmV0dXJuIG1fYmxvY2stPmNmYURpZEZpbmlzaDsgfQorICAgIAorICAgIHZvaWQgc2V0RGlkQ2xv
YmJlcihib29sKSB7IH0KKyAgICB2b2lkIHNldElzVmFsaWQoYm9vbCBpc1ZhbGlkKSB7IG1fYmxv
Y2stPmNmYURpZEZpbmlzaCA9IGlzVmFsaWQ7IH0KKyAgICB2b2lkIHNldEJyYW5jaERpcmVjdGlv
bihCcmFuY2hEaXJlY3Rpb24pIHsgfQorICAgIHZvaWQgc2V0Rm91bmRDb25zdGFudHMoYm9vbCkg
eyB9CisgICAgYm9vbCBoYXZlU3RydWN0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0gLy8g
SXQncyBhbHdheXMgc2FmZSB0byByZXR1cm4gdHJ1ZS4KKyAgICB2b2lkIHNldEhhdmVTdHJ1Y3R1
cmVzKGJvb2wpIHsgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR0F0VGFpbEFic3RyYWN0U3RhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTUyOTU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDYgKzYyLDExIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MK
ICAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUpIHsgbV9ub2Rlcy5ncm93KHNpemUpOyB9CiAgICAg
CiAgICAgdm9pZCBhcHBlbmQoTm9kZSogbm9kZSkgeyBtX25vZGVzLmFwcGVuZChub2RlKTsgfQor
ICAgIHZvaWQgaW5zZXJ0QmVmb3JlTGFzdChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgYXBw
ZW5kKGxhc3QoKSk7CisgICAgICAgIGF0KHNpemUoKSAtIDIpID0gbm9kZTsKKyAgICB9CiAgICAg
CiAgICAgc2l6ZV90IG51bU5vZGVzKCkgY29uc3QgeyByZXR1cm4gcGhpcy5zaXplKCkgKyBzaXpl
KCk7IH0KICAgICBOb2RlKiBub2RlKHNpemVfdCBpKSBjb25zdApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTUy
OTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUg
Tm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9uVGVybWluYWwoR3JhcGgmIGdyYXBoLCBTcGVjdWxh
dGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1zQ29tbWEg
dmFsdWVBcmdzKTsgXAotICAgICAgICBhcHBlbmQobGFzdCgpKTsgXAotICAgICAgICBhdChzaXpl
KCkgLSAyKSA9IHJlc3VsdDsgXAorICAgICAgICBpbnNlcnRCZWZvcmVMYXN0KHJlc3VsdCk7IFwK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsgXAogICAgIH0KICAgICBERkdfVkFSSUFESUNfVEVNUExB
VEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAkocmV2aXNpb24gMTUyOTU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLWJv
b2wgZGlkV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKK2Jvb2wgZG9lc1dyaXRlcyhH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiB7CiAgICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsK
ICAgICBDaGVja0Nsb2JiZXJpemUgYWRkV3JpdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTUyOTU5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyMiw3ICs2
MjIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXN1bHQ7CiB9OwogCi1ib29sIGRpZFdyaXRl
cyhHcmFwaCYsIE5vZGUqKTsKK2Jvb2wgZG9lc1dyaXRlcyhHcmFwaCYsIE5vZGUqKTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTUyOTU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAg
Y2xhc3MgRENFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgogICAgIERDRVBoYXNlKEdy
YXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImRlYWQgY29kZSBlbGltaW5hdGlv
biIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCiAgICAgewogICAgIH0KICAgICAK
QEAgLTEwNCw3NSArMTA1LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAg
ICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOwotCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykgewot
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAg
ICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKChub2Rl
LT5vcCgpID09IFNldExvY2FsKSA9PSAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2so
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5
IHRoYXQgVUludDMyVG9OdW1iZXIgaXMgZGVhZCBidXQgaXRzCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjaGlsZCBpc24ndDsgaWYgc28gdGhlbiB3ZSBzaG91bGQgTW92SGludCB0aGUgY2hp
bGQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRH
ZW5lcmF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCkt
Pm9wKCkgPT0gVUludDMyVG9OdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkgPSBub2RlLT5jaGlsZDEoKS0+Y2hpbGQxKCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhab21iaWVI
aW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2Uo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKE1vdkhpbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoTW92SGludEFuZENoZWNrKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291
bnQoMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAg
ICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTGVhdmUgdGhlbSBhcyBub3Qgc2hvdWxkR2VuZXJhdGUuCi0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2Rl
LT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRnZSB8
fCBlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3Jp
Z2luLCBlZGdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbVVuY2hlY2tlZCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQ
aGFudG9tQ2hpbGRyZW4obm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNv
dW50KDEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OworICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CisgICAgICAgICAgICAvLyBO
ZWVkIHRvIHByb2Nlc3MgdGhlIGdyYXBoIGluIHJldmVyc2UgREZTIG9yZGVyLCBzbyB0aGF0IHdl
IGdldCB0byB0aGUgdXNlcworICAgICAgICAgICAgLy8gb2YgYSBub2RlIGJlZm9yZSB3ZSBnZXQg
dG8gdGhlIG5vZGUgaXRzZWxmLgorICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0
aEZpcnN0OworICAgICAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRlcihk
ZXB0aEZpcnN0KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRlcHRoRmlyc3Quc2l6
ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgIGZpeHVwQmxvY2soZGVwdGhGaXJzdFtpXSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpCisgICAg
ICAgICAgICAgICAgZml4dXBCbG9jayhtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPSBFeGFjdFJl
ZkNvdW50OwpAQCAtMjA2LDYgKzE0OCw3NSBAQCBwcml2YXRlOgogICAgICAgICBjb3VudE5vZGUo
ZWRnZS5ub2RlKCkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGZpeHVwQmxvY2soQmFzaWNCbG9j
ayogYmxvY2spCisgICAgeworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsg
aW5kZXhJbkJsb2NrLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGlu
ZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAg
ICAgIGNhc2UgTW92SGludDogeworICAgICAgICAgICAgICAgIEFTU0VSVCgobm9kZS0+b3AoKSA9
PSBTZXRMb2NhbCkgPT0gKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSk7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBVSW50MzJUb051
bWJlciBpcyBkZWFkIGJ1dCBpdHMKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hpbGQgaXNuJ3Q7
IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNoaWxkLgorICAgICAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBVSW50MzJUb051bWJlcikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gbm9kZS0+Y2hpbGQxKCktPmNo
aWxkMSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3Vs
ZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKFpvbWJpZUhpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnRB
bmRDaGVjayk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gTGVhdmUgdGhlbSBhcyBub3Qgc2hvdWxkR2VuZXJhdGUuCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJz
dENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJ
ZHhdOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UgfHwgZWRnZS53aWxsTm90
SGF2ZUNoZWNrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgZWRnZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFu
dG9tVW5jaGVja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0
KCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgZWxpbWluYXRlSXJyZWxl
dmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZD
b3VudCgxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gfQorICAgICAg
ICB9CisKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorICAg
IAogICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihOb2RlKiBub2Rl
KQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6
OlNpemU7ICsraSkgewpAQCAtMjE4LDYgKzIyOSw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAog
ICAgIFZlY3RvcjxOb2RlKiwgMTI4PiBtX3dvcmtsaXN0OworICAgIEluc2VydGlvblNldCBtX2lu
c2VydGlvblNldDsKIH07CiAKIGJvb2wgcGVyZm9ybURDRShHcmFwaCYgZ3JhcGgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZURvbWluYXRlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdFZGdlRG9taW5hdGVzX2gKKyNkZWZpbmUgREZH
RWRnZURvbWluYXRlc19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBFZGdlRG9taW5hdGVzIHsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCitwdWJsaWM6CisgICAgRWRnZURvbWluYXRlcyhH
cmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgp
CisgICAgICAgICwgbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX3Jlc3VsdCh0cnVlKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKE5vZGUqLCBFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBib29sIHJlc3VsdCA9IG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRl
cyhlZGdlLm5vZGUoKS0+bWlzYy5vd25lciwgbV9ibG9jayk7CisgICAgICAgIGlmICh2ZXJib3Nl
KSB7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDaGVja2luZyBpZiAi
LCBlZGdlLCAiIGluICIsICplZGdlLm5vZGUoKS0+bWlzYy5vd25lciwKKyAgICAgICAgICAgICAg
ICAiIGRvbWluYXRlcyAiLCAqbV9ibG9jaywgIjogIiwgcmVzdWx0LCAiXG4iKTsKKyAgICAgICAg
fQorICAgICAgICBtX3Jlc3VsdCAmPSByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVz
dWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KKworcHJpdmF0ZToKKyAgICBHcmFwaCYg
bV9ncmFwaDsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIGJvb2wgbV9yZXN1bHQ7Cit9
OworCitpbmxpbmUgYm9vbCBlZGdlc0RvbWluYXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
QmFzaWNCbG9jayogYmxvY2spCit7CisgICAgRWRnZURvbWluYXRlcyBlZGdlRG9taW5hdGVzKGdy
YXBoLCBibG9jayk7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIGVk
Z2VEb21pbmF0ZXMpOworICAgIHJldHVybiBlZGdlRG9taW5hdGVzLnJlc3VsdCgpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR0VkZ2VEb21pbmF0ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdMSUNNUGhhc2UuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIKKyNp
bmNsdWRlICJERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9j
a0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCisjaW5jbHVkZSAiREZHQ2xv
YmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0VkZ2VEb21pbmF0ZXMuaCIKKyNpbmNsdWRlICJERkdH
cmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCisjaW5jbHVkZSAiREZHU2FmZVRvRXhlY3V0ZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCituYW1lc3BhY2UgeworCitz
dHJ1Y3QgTG9vcERhdGEgeworICAgIExvb3BEYXRhKCkKKyAgICAgICAgOiBwcmVIZWFkZXIoMCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIENsb2JiZXJTZXQgd3JpdGVzOworICAgIEJhc2ljQmxv
Y2sqIHByZUhlYWRlcjsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitjbGFzcyBM
SUNNUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIExJQ01QaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJMSUNNIikKKyAgICAgICAgLCBtX2ludGVy
cHJldGVyKGdyYXBoLCBtX3N0YXRlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4o
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAg
IAorICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFw
aCk7CisgICAgICAgIG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1f
Z3JhcGgpOworICAgICAgICAKKyAgICAgICAgbV9kYXRhLnJlc2l6ZShtX2dyYXBoLm1fbmF0dXJh
bExvb3BzLm51bUxvb3BzKCkpOworICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB0aGUg
c2V0IG9mIHRoaW5ncyBlYWNoIGxvb3Agd3JpdGVzIHRvLCBub3QgaW5jbHVkaW5nIGJsb2NrcyB0
aGF0CisgICAgICAgIC8vIGJlbG9uZyB0byBpbm5lciBsb29wcy4gV2UgZml4IHRoaXMgbGF0ZXIu
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0g
bV9ncmFwaC5tX25hdHVyYWxMb29wcy5pbm5lck1vc3RMb29wT2YoYmxvY2spOworICAgICAgICAg
ICAgaWYgKCFsb29wKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgTG9v
cERhdGEmIGRhdGEgPSBtX2RhdGFbbG9vcC0+aW5kZXgoKV07CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAg
ICAgICAgICBhZGRXcml0ZXMobV9ncmFwaCwgYmxvY2stPmF0KG5vZGVJbmRleCksIGRhdGEud3Jp
dGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRm9yIGVhY2ggbG9vcDoKKyAg
ICAgICAgLy8gLSBJZGVudGlmeSBpdHMgcHJlLWhlYWRlci4KKyAgICAgICAgLy8gLSBNYWtlIHN1
cmUgaXRzIG91dGVyIGxvb3BzIGtub3cgd2hhdCBpdCBjbG9iYmVycy4KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBsb29wSW5kZXggPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLm51bUxvb3BzKCk7IGxv
b3BJbmRleC0tOykgeworICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2dy
YXBoLm1fbmF0dXJhbExvb3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgICAgIExvb3BEYXRh
JiBkYXRhID0gbV9kYXRhW2xvb3AuaW5kZXgoKV07CisgICAgICAgICAgICBmb3IgKAorICAgICAg
ICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBvdXRlckxvb3AgPSBtX2dyYXBoLm1fbmF0dXJh
bExvb3BzLmlubmVyTW9zdE91dGVyTG9vcChsb29wKTsKKyAgICAgICAgICAgICAgICBvdXRlckxv
b3A7CisgICAgICAgICAgICAgICAgb3V0ZXJMb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5p
bm5lck1vc3RPdXRlckxvb3AoKm91dGVyTG9vcCkpCisgICAgICAgICAgICAgICAgbV9kYXRhW291
dGVyTG9vcC0+aW5kZXgoKV0ud3JpdGVzLmFkZEFsbChkYXRhLndyaXRlcyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGhlYWRlciA9IGxvb3AuaGVhZGVyKCk7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBwcmVIZWFkZXIgPSAwOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gaGVhZGVyLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBoZWFkZXItPnByZWRlY2Vzc29yc1tpXTsK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKGhlYWRl
ciwgcHJlZGVjZXNzb3IpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghcHJlSGVhZGVyIHx8IHByZUhlYWRlciA9PSBwcmVkZWNl
c3Nvcik7CisgICAgICAgICAgICAgICAgcHJlSGVhZGVyID0gcHJlZGVjZXNzb3I7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByZUhlYWRl
ci0+bGFzdCgpLT5vcCgpID09IEp1bXApOworICAgICAgICAgICAgCisgICAgICAgICAgICBkYXRh
LnByZUhlYWRlciA9IHByZUhlYWRlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9n
cmFwaC5pbml0aWFsaXplTm9kZU93bmVycygpOworICAgICAgICAKKyAgICAgICAgLy8gV2FsayBh
bGwgYmFzaWMgYmxvY2tzIHRoYXQgYmVsb25nIHRvIGxvb3BzLCBsb29raW5nIGZvciBob2lzdGlu
ZworICAgICAgICAvLyBvcHBvcnR1bml0aWVzLiBXZSB3YW50IHRvIGhvaXN0IHRvIHRoZSBvdXRl
ci1tb3N0IGxvb3AuIEhvaXN0aW5nIGlzIHZhbGlkCisgICAgICAgIC8vIGlmOgorICAgICAgICAv
LyAtIFRoZSBub2RlIGRvZXNuJ3Qgd3JpdGUgYW55dGhpbmcuCisgICAgICAgIC8vIC0gVGhlIG5v
ZGUgZG9lc24ndCByZWFkIGFueXRoaW5nIHRoYXQgdGhlIGxvb3Agd3JpdGVzLgorICAgICAgICAv
LyAtIFRoZSBwcmVIZWFkZXIncyBzdGF0ZSBhdCB0YWlsIG1ha2VzIHRoZSBub2RlIHNhZmUgdG8g
ZXhlY3V0ZS4KKyAgICAgICAgLy8gLSBUaGUgbG9vcCdzIGNoaWxkcmVuIGFsbCBiZWxvbmcgdG8g
bm9kZXMgdGhhdCBzdHJpY3RseSBkb21pbmF0ZSB0aGUgbG9vcCBoZWFkZXIuCisgICAgICAgIC8v
IC0gVGhlIHByZUhlYWRlcidzIHN0YXRlIGF0IHRhaWwgaXMgc3RpbGwgdmFsaWQuIFRoaXMgaXMg
bW9zdGx5IHRvIHNhdmUgY29tcGlsZQorICAgICAgICAvLyAgIHRpbWUgYW5kIHByZXNlcnZlIHNv
bWUga2luZCBvZiBzYW5pdHksIGlmIHdlIGhvaXN0IHNvbWV0aGluZyB0aGF0IG11c3QgZXhpdC4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gRm9yIG1heGltdW0gcHJvZml0LCB3ZSB3YWxrIGJsb2Nr
cyBpbiBERlMgb3JkZXIgdG8gZW5zdXJlIHRoYXQgd2UgZ2VuZXJhbGx5CisgICAgICAgIC8vIHRl
bmQgdG8gaG9pc3QgZG9taW5hdG9ycyBiZWZvcmUgZG9taW5hdGVlcy4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gQWxzbywgd2UgbmVlZCB0byByZW1lbWJlciB0bzoKKyAgICAgICAgLy8gLSBDbGVh
ciBOb2RlRXhpdHNGb3J3YXJkIGZvciBhbnkgbm9kZXMgd2UgaG9pc3RlZC4KKyAgICAgICAgLy8g
LSBVcGRhdGUgdGhlIHN0YXRlLWF0LXRhaWwgd2l0aCB0aGUgbm9kZSB3ZSBob2lzdGVkLCBzbyBm
dXR1cmUgaG9pc3QgY2FuZGlkYXRlcworICAgICAgICAvLyAgIGtub3cgYWJvdXQgYW55IHR5cGUg
Y2hlY2tzIHdlIGhvaXN0ZWQuCisgICAgICAgIAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+
IGRlcHRoRmlyc3Q7CisgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIo
ZGVwdGhGaXJzdCk7CisgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3BTdGFj
azsKKyAgICAgICAgZm9yICgKKyAgICAgICAgICAgIHVuc2lnbmVkIGRlcHRoRmlyc3RJbmRleCA9
IDA7CisgICAgICAgICAgICBkZXB0aEZpcnN0SW5kZXggPCBkZXB0aEZpcnN0LnNpemUoKTsKKyAg
ICAgICAgICAgICsrZGVwdGhGaXJzdEluZGV4KSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtkZXB0aEZpcnN0SW5kZXhdOworICAgICAg
ICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmlu
bmVyTW9zdExvb3BPZihibG9jayk7CisgICAgICAgICAgICBpZiAoIWxvb3ApCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBsb29wU3RhY2sucmVzaXplKDApOworICAgICAg
ICAgICAgZm9yICgKKyAgICAgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCogY3VycmVudCA9
IGxvb3A7CisgICAgICAgICAgICAgICAgY3VycmVudDsKKyAgICAgICAgICAgICAgICBjdXJyZW50
ID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5pbm5lck1vc3RPdXRlckxvb3AoKmN1cnJlbnQpKQor
ICAgICAgICAgICAgICAgIGxvb3BTdGFjay5hcHBlbmQoY3VycmVudCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFJlbWVtYmVyOiB0aGUgbG9vcCBzdGFjayBoYXMgdGhlIGlubmVyLW1v
c3QgbG9vcCBhdCBpbmRleCAwLCBzbyBpZiB3ZSB3YW50CisgICAgICAgICAgICAvLyB0byBiaWFz
IGhvaXN0aW5nIHRvIG91dGVyIGxvb3BzIHRoZW4gd2UgbmVlZCB0byB1c2UgYSByZXZlcnNlIGxv
b3AuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
MDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICBOb2RlKiYgbm9kZVJlZiA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAg
ICAgIGlmIChkb2VzV3JpdGVzKG1fZ3JhcGgsIG5vZGVSZWYpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHN0YWNrSW5kZXggPSBsb29wU3RhY2suc2l6ZSgpOyBzdGFja0luZGV4LS07KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChhdHRlbXB0SG9pc3Qobm9kZVJlZiwgbG9vcFN0YWNrW3N0YWNr
SW5kZXhdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgYXR0ZW1wdEhvaXN0KE5vZGUqJiBub2Rl
UmVmLCBjb25zdCBOYXR1cmFsTG9vcCogbG9vcCkKKyAgICB7CisgICAgICAgIE5vZGUqIG5vZGUg
PSBub2RlUmVmOworICAgICAgICBMb29wRGF0YSYgZGF0YSA9IG1fZGF0YVtsb29wLT5pbmRleCgp
XTsKKyAgICAgICAgCisgICAgICAgIGlmICghZGF0YS5wcmVIZWFkZXItPmNmYURpZEZpbmlzaCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICghZWRnZXNE
b21pbmF0ZShtX2dyYXBoLCBub2RlLCBkYXRhLnByZUhlYWRlcikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAocmVhZHNPdmVybGFwKG1fZ3JhcGgsIG5v
ZGUsIGRhdGEud3JpdGVzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIG1fc3RhdGUuaW5pdGlhbGl6ZVRvKGRhdGEucHJlSGVhZGVyKTsKKyAgICAgICAgaWYg
KCFzYWZlVG9FeGVjdXRlKG1fc3RhdGUsIG1fZ3JhcGgsIG5vZGUpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZGF0YS5wcmVIZWFkZXItPmluc2VydEJlZm9y
ZUxhc3Qobm9kZSk7CisgICAgICAgIG5vZGUtPm1pc2Mub3duZXIgPSBkYXRhLnByZUhlYWRlcjsK
KyAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKKyAgICAgICAgbm9k
ZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBkYXRhLnByZUhlYWRlci0+bGFzdCgpLT5jb2Rl
T3JpZ2luRm9yRXhpdFRhcmdldDsKKyAgICAgICAgCisgICAgICAgIC8vIFdlJ3JlIGdvb2QgdG8g
Z28gZm9yIGhvaXN0aW5nLCBzbyBtb2RpZnkgdGhlIHN0YXRlIGF0IHRoZSBlbmQgb2YgdGhlIHBy
ZUhlYWRlcgorICAgICAgICAvLyBpbiBwbGFjZSB0byByZWZsZWN0IHRoYXQgd2UgaG9pc3RlZCBz
b21ldGhpbmcsIHNpbmNlIHdlIG1pZ2h0IGhhdmUgaG9pc3RlZCBhCisgICAgICAgIC8vIHR5cGUg
Y2hlY2suCisgICAgICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGRhdGEucHJlSGVhZGVyLT5z
aXplKCkgLSAyOworICAgICAgICBBU1NFUlQoZGF0YS5wcmVIZWFkZXItPmF0KGluZGV4SW5CbG9j
aykgPT0gbm9kZSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2sp
OworICAgICAgICAKKyAgICAgICAgLy8gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQgYWxsIG9mIHRo
ZSBub2RlcyB3ZSBjdXJyZW50bHkga25vdyBob3cgdG8gaG9pc3QKKyAgICAgICAgLy8gZG9uJ3Qg
aGF2ZSB2YXItYXJnIGNoaWxkcmVuLiBUaGF0IG1heSBjaGFuZ2UgYW5kIHRoZW4gd2UgY2FuIGZp
eCB0aGlzCisgICAgICAgIC8vIGNvZGUuIEJ1dCBmb3Igbm93IHdlIGp1c3QgYXNzZXJ0IHRoYXQn
cyB0aGUgY2FzZS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShub2RlLT5mbGFncygpICYgTm9k
ZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgCisgICAgICAgIG5vZGVSZWYgPSBtX2dyYXBoLmFkZE5v
ZGUoU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkcmVuKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIEF0VGFpbEFic3RyYWN0U3Rh
dGUgbV9zdGF0ZTsKKyAgICBBYnN0cmFjdEludGVycHJldGVyPEF0VGFpbEFic3RyYWN0U3RhdGU+
IG1faW50ZXJwcmV0ZXI7CisgICAgVmVjdG9yPExvb3BEYXRhPiBtX2RhdGE7Cit9OworCitib29s
IHBlcmZvcm1MSUNNKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIExJQ00gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TElDTVBoYXNl
PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01Q
aGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBo
YXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01Q
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdMSUNNUGhhc2VfaAorI2Rl
ZmluZSBERkdMSUNNUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBHcmFwaDsKKworLy8gRG9lcyBsb29wLWludmFyaWFudCBjb2RlIG1vdGlvbiwgb3IgTElDTSBm
b3Igc2hvcnQuIFRoaXMgb25seSBob2lzdHMgY29kZQorLy8gYW5kIG5ldmVyIHNpbmtzIGFueXRo
aW5nLiBBIG5vZGUgaXMgaG9pc3RlZCBpZiBpdCBkb2VzIG5vIHdyaXRlcywgYW5kIGlmCisvLyBp
dHMgcmVhZHMgZG9uJ3Qgb3ZlcmxhcCB0aGUgbG9vcCdzIHdyaXRlcy4KKworYm9vbCBwZXJmb3Jt
TElDTShHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xJQ01QaGFzZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTUyOTU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsNyBAQAogI2luY2x1ZGUgIkRGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5j
bHVkZSAiREZHRml4dXBQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5j
bHVkZSAiREZHTElDTVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNl
LmgiCiAjaW5jbHVkZSAiREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCkBAIC0yMDgsNiArMjA5LDkgQEAg
UGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3Jt
U1NBQ29udmVyc2lvbihkZmcpOwogICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcp
OwogICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7Cisg
ICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1DRkEo
ZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOyAvLyBXZSByZWx5IG9uIHRoaXMgdG8gY29u
dmVydCBkZWFkIFNldExvY2FscyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBoaW50LCBhbmQgdG8ga2ls
bCBkZWFkIGNvZGUgdGhhdCB3b24ndCBiZSByZWNvZ25pemVkIGFzIGRlYWQgYnkgTExWTS4KICAg
ICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUZsdXNo
TGl2ZW5lc3NBbmFseXNpcyhkZmcpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207259</attachid>
            <date>2013-07-22 11:45:48 -0700</date>
            <delta_ts>2013-07-22 11:47:14 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48734</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBA
QAorMjAxMy0wNy0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgZG8gYSBoaWdoLWxldmVsIExJQ00gYmVmb3JlIGdvaW5n
IHRvIEZUTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE4NzQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBJbXBsZW1lbnRzIExJQ00gaG9pc3RpbmcgZm9yIG5vZGVzIHRoYXQgbmV2ZXIgd3Jp
dGUgYW55dGhpbmcgYW5kIG5ldmVyIHJlYWQKKyAgICAgICAgdGhpbmdzIHRoYXQgYXJlIGNsb2Ji
ZXJlZCBieSB0aGUgbG9vcC4gVGhlcmUgYXJlIHNvbWUgb3RoZXIgcHJlY29uZGl0aW9ucyBmb3IK
KyAgICAgICAgaG9pc3RpbmcsIHNlZSBERkdMSUNNUGhhc2UuY3BwLgorCisgICAgICAgIEFsc28g
ZGlkIGEgZmV3IGZpeGVzOgorICAgICAgICAKKyAgICAgICAgLSBDbG9iYmVyU2V0OjphZGQgd2Fz
IGZhaWxpbmcgdG8gc3dpdGNoIFN1cGVyIGVudHJpZXMgdG8gRGlyZWN0IGVudHJpZXMgaW4KKyAg
ICAgICAgICBzb21lIGNhc2VzLgorICAgICAgICAKKyAgICAgICAgLSBERkdDbG9iYmVyaXplLmNw
cCBuZWVkZWQgdG8gI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIuCisgICAgICAgIAorICAgICAgICAt
IERDRVBoYXNlIG5lZWRzIHRvIHByb2Nlc3MgdGhlIGdyYXBoIGluIHJldmVyc2UgREZTIG9yZGVy
LCB3aGVuIHdlJ3JlIGluIFNTQS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWFrZXMgdGhlIEZU
TCBhIDkxJSBzcGVlZC11cCBvbiBpbWFnaW5nLWdhdXNzaWFuLWJsdXIuCisKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9E
RkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAg
ICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OkF0VGFpbEFic3RyYWN0U3RhdGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0
YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpjcmVhdGVWYWx1
ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5v
ZGUpOgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmg6IEFkZGVkLgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKEF0VGFpbEFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlND
OjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemVUbyk6CisgICAgICAgIChKU0M6
OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
QXRUYWlsQWJzdHJhY3RTdGF0ZTo6dmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRh
aWxBYnN0cmFjdFN0YXRlOjpibG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJh
Y3RTdGF0ZTo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0
ZTo6c2V0RGlkQ2xvYmJlcik6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0
ZTo6c2V0SXNWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6
c2V0QnJhbmNoRGlyZWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0
YXRlOjpzZXRGb3VuZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJh
Y3RTdGF0ZTo6aGF2ZVN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3Ry
YWN0U3RhdGU6OnNldEhhdmVTdHJ1Y3R1cmVzKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9j
ay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6Omluc2VydEJlZm9yZUxhc3QpOgor
ICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHQ2xvYmJlclNldC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJl
clNldDo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0OjphZGRBbGwpOgorICAg
ICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzV3Jp
dGVzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHRENFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNl
OjpEQ0VQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6RENFUGhhc2U6OnJ1bik6CisgICAgICAg
IChKU0M6OkRGRzo6RENFUGhhc2U6OmZpeHVwQmxvY2spOgorICAgICAgICAoRENFUGhhc2UpOgor
ICAgICAgICAqIGRmZy9ERkdFZGdlRG9taW5hdGVzLmg6IEFkZGVkLgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEVkZ2VEb21pbmF0ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2VEb21pbmF0
ZXM6OkVkZ2VEb21pbmF0ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2VEb21pbmF0ZXM6Om9w
ZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2VEb21pbmF0ZXM6OnJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6ZWRnZXNEb21pbmF0ZSk6CisgICAgICAgICogZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6CisgICAgICAgICogZGZn
L0RGR0xJQ01QaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoTElDTVBoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpMSUNNUGhhc2U6OkxJQ01QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6TElD
TVBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxJQ01QaGFzZTo6YXR0ZW1wdEhvaXN0
KToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybUxJQ00pOgorICAg
ICAgICAqIGRmZy9ERkdMSUNNUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAg
ICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5U
aHJlYWRJbXBsKToKKworMjAxMy0wNy0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpBdFRhaWxB
YnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjp+
QXRUYWlsQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0
cmFjdFN0YXRlOjpmb3JOb2RlKToKKyAgICAgICAgKiBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0
ZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChBdFRhaWxBYnN0cmFjdFN0YXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplVG8p
OgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OnZhcmlhYmxlcyk6CisgICAgICAg
IChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6YmxvY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpERkc6OkF0
VGFpbEFic3RyYWN0U3RhdGU6OnNldERpZENsb2JiZXIpOgorICAgICAgICAoSlNDOjpERkc6OkF0
VGFpbEFic3RyYWN0U3RhdGU6OnNldElzVmFsaWQpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFp
bEFic3RyYWN0U3RhdGU6OnNldEJyYW5jaERpcmVjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
QXRUYWlsQWJzdHJhY3RTdGF0ZTo6c2V0Rm91bmRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmhhdmVTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6
REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpzZXRIYXZlU3RydWN0dXJlcyk6CisgICAgICAgICog
ZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjppbnNl
cnRCZWZvcmVMYXN0KToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDoKKyAg
ICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmRvZXNXcml0ZXMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdEQ0VQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6RENFUGhhc2U6OkRDRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFz
ZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6Zml4dXBCbG9jayk6CisgICAg
ICAgIChEQ0VQaGFzZSk6CisgICAgICAgICogZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaDogQWRkZWQu
CisgICAgICAgIChERkcpOgorICAgICAgICAoRWRnZURvbWluYXRlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6RWRnZURvbWluYXRlczo6RWRnZURvbWluYXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
RWRnZURvbWluYXRlczo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZURvbWlu
YXRlczo6cmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjplZGdlc0RvbWluYXRlKToKKyAgICAg
ICAgKiBkZmcvREZHTElDTVBoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChMSUNNUGhhc2UpOgor
ICAgICAgICAoSlNDOjpERkc6OkxJQ01QaGFzZTo6TElDTVBoYXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpMSUNNUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjphdHRl
bXB0SG9pc3QpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtTElD
TSk6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNv
bXBpbGVJblRocmVhZEltcGwpOgorCiAyMDEzLTA3LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogREZHIE5vZGVzIHNob3VsZCBiZSBhYmxl
IHRvIGFic3RyYWN0bHkgdGVsbCB5b3Ugd2hhdCB0aGV5IHJlYWQgYW5kIHdoYXQgdGhleSB3cml0
ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1Mjk1OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zODQsNiArMzg0LDExIEBACiAJCTBGRTUwNUEyMTc5
QjYwRUQwMEIzNUY4QyAvKiBGVExGYWlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUEwMTc5QjYwRUQwMEIzNUY4QyAvKiBGVExGYWlsLmNw
cCAqLzsgfTsKIAkJMEZFNTA1QTMxNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUExMTc5QjYwRUQw
MEIzNUY4QyAvKiBGVExGYWlsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZFNTA1QTUxNzlDRTNFQzAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1
QTQxNzlDRTNFQzAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUuY3BwICovOyB9OworCQkwRkU1MDVB
QjE3OUNFQzA4MDBCMzVGOEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDVBNjE3OUNFQzA4MDBC
MzVGOEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CisJCTBGRTUwNUFDMTc5
Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDVBNzE3OUNFQzA4MDBCMzVGOEMg
LyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNUFEMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdFZGdl
RG9taW5hdGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkU1MDVBODE3OUNFQzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNUFFMTc5Q0VD
MDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QTkxNzlDRUMwODAwQjM1RjhDIC8qIERGR0xJQ01Q
aGFzZS5jcHAgKi87IH07CisJCTBGRTUwNUFGMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNNUGhh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUw
NUFBMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4NTM0QjE3MjNDREE1MDBCNjE4RjUg
LyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVk
V2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyogREZH
RGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9p
bnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZFQTBBMDgxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwOUZEMTcwNTEzREIwMEJC
NzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NDYsNiArMTQ1MSwxMSBAQAogCQkwRkU1MDVBMDE3OUI2
MEVEMDBCMzVGOEMgLyogRlRMRmFpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExGYWlsLmNwcDsgcGF0aCA9IGZ0bC9GVExGYWlsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1QTExNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRmFpbC5oOyBwYXRoID0gZnRsL0ZU
TEZhaWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1QTQxNzlDRTNFQzAw
QjM1RjhDIC8qIERGR0Nsb2JiZXJpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHQ2xvYmJlcml6ZS5jcHA7IHBhdGggPSBkZmcvREZHQ2xvYmJlcml6ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNUE2MTc5Q0VDMDgwMEIzNUY4QyAv
KiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwOyBwYXRoID0gZGZnL0RGR0F0VGFp
bEFic3RyYWN0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDVB
NzE3OUNFQzA4MDBCMzVGOEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmg7IHBhdGggPSBk
ZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkU1MDVBODE3OUNFQzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlRG9taW5hdGVzLmg7IHBhdGggPSBkZmcv
REZHRWRnZURvbWluYXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDVB
OTE3OUNFQzA4MDBCMzVGOEMgLyogREZHTElDTVBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xJQ01QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTElDTVBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1QUExNzlDRUMwODAw
QjM1RjhDIC8qIERGR0xJQ01QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdMSUNNUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMSUNNUGhhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThG
NSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTEFiYnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDI2LDYgKzMwMzYsOCBAQAogCQkJCTBG
NjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLywKIAkJCQkwRkMwOTc2
QjE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkwRkMw
OTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8sCisJCQkJMEZF
NTA1QTYxNzlDRUMwODAwQjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwICovLAor
CQkJCTBGRTUwNUE3MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgg
Ki8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJCQkJMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhD
IC8qIERGR0Jhc2ljQmxvY2suY3BwICovLApAQCAtMzA3OSw2ICszMDkxLDcgQEAKIAkJCQkwRkQz
QzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8sCiAJCQkJMEZCNEI1MUIxNkI2
Mjc3MjAwM0Y2OTZCIC8qIERGR0VkZ2UuY3BwICovLAogCQkJCTBGNjZFMTY5MTRERjNGMTMwMEI3
QjJFNCAvKiBERkdFZGdlLmggKi8sCisJCQkJMEZFNTA1QTgxNzlDRUMwODAwQjM1RjhDIC8qIERG
R0VkZ2VEb21pbmF0ZXMuaCAqLywKIAkJCQkwRkU1MDU5MjE3OUE2MDQ1MDBCMzVGOEMgLyogREZH
RWRnZVVzZXNTdHJ1Y3R1cmUuaCAqLywKIAkJCQkwRkRCMkNEMTE3NDJEODA0MDA3QjNDMUIgLyog
REZHRmFpbGVkRmluYWxpemVyLmNwcCAqLywKIAkJCQkwRkRCMkNEMjE3NDJEODA0MDA3QjNDMUIg
LyogREZHRmFpbGVkRmluYWxpemVyLmggKi8sCkBAIC0zMTA3LDYgKzMxMjAsOCBAQAogCQkJCTBG
REIyQ0Q2MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjQ2
RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovLAogCQkJCTBGNDZF
NkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oICovLAorCQkJCTBGRTUwNUE5
MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNUFBMTc5
Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuaCAqLywKIAkJCQkwRkU1MDU2QjE3OEY1QjUz
MDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLywKIAkJCQkwRkU1MDU2
QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggKi8sCiAJCQkJ
MEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmNwcCAqLywKQEAg
LTM1OTgsNiArMzYxMyw3IEBACiAJCQkJQkMxOEM0MTAwRTE2RjVDRDAwQjM0NDYwIC8qIEluaXRp
YWxpemVUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTFGMTcwOEIwMDcwMEJC
NzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NjlBMDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRTUwNUFDMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNTA1OUQxNzlCMEY3MjAwQjM1RjhDIC8q
IERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMwMEI4
OTYxOSAvKiBJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjA1LDYgKzM2MjEsNyBA
QAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDEzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNUFGMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNN
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
YXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ5MzAwRUQyMkQ3
MDAwQjg5NjE5IC8qIEpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRDQxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODUxLDYgKzM4
NjgsNyBAQAogCQkJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFu
YWx5c2lzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNENBOTU4QjE2QUI1MERFMDA5MzhBMDYgLyog
U3RhdGljUHJvcGVydHlBbmFseXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2N0RCOTMxNzUx
OUI0QTAwNkE4MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1
MDVBRDE3OUNFQzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtNDM4OSw2ICs0NDA3LDcgQEAKIAkJ
CQkwRkZGQzk1RjE0RUY5MEJCMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzcwMTY1REJCOTAwMDVBRDM4NyAv
KiBEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzcxMDdFQzM3NjAw
NDI3QTQ4IC8qIEVycm9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNUFFMTc5Q0VDMDgw
MEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Qzgx
MDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ3RjM5Q0ExMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNDQ5Miw2ICs0NTExLDcgQEAKIAkJCQkxNEJENUEzMjBBM0U5
MUY2MDBCQUY1OUMgLyogSlNWYWx1ZVJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlE
NzEwN0VDMzc2MDA0MjdBNDggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkUzQzYxQzE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTBGRTUwNUFCMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcx
MiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0
U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0F0VGFpbEFic3RyYWN0U3RhdGU6OkF0VGFp
bEFic3RyYWN0U3RhdGUoKQorICAgIDogbV9ibG9jaygwKQoreworfQorCitBdFRhaWxBYnN0cmFj
dFN0YXRlOjp+QXRUYWlsQWJzdHJhY3RTdGF0ZSgpIHsgfQorCit2b2lkIEF0VGFpbEFic3RyYWN0
U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIG1fYmxvY2stPnNz
YS0+dmFsdWVzQXRUYWlsLmFkZChub2RlLCBBYnN0cmFjdFZhbHVlKCkpOworfQorCitBYnN0cmFj
dFZhbHVlJiBBdFRhaWxBYnN0cmFjdFN0YXRlOjpmb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAg
SGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Jsb2NrLT5z
c2EtPnZhbHVlc0F0VGFpbC5maW5kKG5vZGUpOworICAgIEFTU0VSVChpdGVyICE9IG1fYmxvY2st
PnNzYS0+dmFsdWVzQXRUYWlsLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlci0+dmFsdWU7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3Ry
YWN0U3RhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXRUYWlsQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdB
dFRhaWxBYnN0cmFjdFN0YXRlX2gKKyNkZWZpbmUgREZHQXRUYWlsQWJzdHJhY3RTdGF0ZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNp
bmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7IAor
CitjbGFzcyBBdFRhaWxBYnN0cmFjdFN0YXRlIHsKK3B1YmxpYzoKKyAgICBBdFRhaWxBYnN0cmFj
dFN0YXRlKCk7CisgICAgCisgICAgfkF0VGFpbEFic3RyYWN0U3RhdGUoKTsKKyAgICAKKyAgICB2
b2lkIGluaXRpYWxpemVUbyhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIG1fYmxv
Y2sgPSBibG9jazsKKyAgICB9CisgICAgCisgICAgdm9pZCBjcmVhdGVWYWx1ZUZvck5vZGUoTm9k
ZSopOworICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZSopOworICAgIEFic3RyYWN0VmFs
dWUmIGZvck5vZGUoRWRnZSBlZGdlKSB7IHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgpKTsgfQor
ICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiB2YXJpYWJsZXMoKSB7IHJldHVybiBtX2Jsb2Nr
LT52YWx1ZXNBdFRhaWw7IH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fYmxvY2s7IH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiBtX2Js
b2NrLT5jZmFEaWRGaW5pc2g7IH0KKyAgICAKKyAgICB2b2lkIHNldERpZENsb2JiZXIoYm9vbCkg
eyB9CisgICAgdm9pZCBzZXRJc1ZhbGlkKGJvb2wgaXNWYWxpZCkgeyBtX2Jsb2NrLT5jZmFEaWRG
aW5pc2ggPSBpc1ZhbGlkOyB9CisgICAgdm9pZCBzZXRCcmFuY2hEaXJlY3Rpb24oQnJhbmNoRGly
ZWN0aW9uKSB7IH0KKyAgICB2b2lkIHNldEZvdW5kQ29uc3RhbnRzKGJvb2wpIHsgfQorICAgIGJv
b2wgaGF2ZVN0cnVjdHVyZXMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9IC8vIEl0J3MgYWx3YXlz
IHNhZmUgdG8gcmV0dXJuIHRydWUuCisgICAgdm9pZCBzZXRIYXZlU3RydWN0dXJlcyhib29sKSB7
IH0KKworcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdBdFRhaWxBYnN0cmFjdFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE1Mjk1OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miwx
MSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgdm9pZCBn
cm93KHNpemVfdCBzaXplKSB7IG1fbm9kZXMuZ3JvdyhzaXplKTsgfQogICAgIAogICAgIHZvaWQg
YXBwZW5kKE5vZGUqIG5vZGUpIHsgbV9ub2Rlcy5hcHBlbmQobm9kZSk7IH0KKyAgICB2b2lkIGlu
c2VydEJlZm9yZUxhc3QoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGFwcGVuZChsYXN0KCkp
OworICAgICAgICBhdChzaXplKCkgLSAyKSA9IG5vZGU7CisgICAgfQogICAgIAogICAgIHNpemVf
dCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9CiAgICAg
Tm9kZSogbm9kZShzaXplX3QgaSkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE1Mjk1OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsOCArNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2lj
QmxvY2s6OmFwcGVuZE5vblRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIE5vZGUq
IHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7
IFwKLSAgICAgICAgYXBwZW5kKGxhc3QoKSk7IFwKLSAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSBy
ZXN1bHQ7IFwKKyAgICAgICAgaW5zZXJ0QmVmb3JlTGFzdChyZXN1bHQpOyBcCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7IFwKICAgICB9CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9O
KERGR19ERUZJTkVfQVBQRU5EX05PREUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlclNldC5jcHAJKHJldmlzaW9uIDE1Mjk1OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgQ2xvYmJlclNldDo6fkNsb2JiZXJTZXQoKSB7IH0KIHZvaWQgQ2xvYmJlclNldDo6YWRk
KEFic3RyYWN0SGVhcCBoZWFwKQogewogICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPjo6
QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2xvYmJlcnMuYWRkKGhlYXAsIHRydWUpOwotICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkgeworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAg
ICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB0cnVlOwpAQCAtNjAsNiArNjAsOSBAQCB2b2lk
IENsb2JiZXJTZXQ6OmFkZEFsbChjb25zdCBDbG9iYmVyU2V0CiAgICAgLy8gSWYgdGhlIG90aGVy
IGhlYXAgaGFzIGEgc3VwZXIgaGVhcCwgd2UgbWFrZSBzdXJlIGl0J3MgcHJlc2VudCBidXQgZG9u
J3QKICAgICAvLyBtb2RpZnkgaXRzIHZhbHVlIC0gc28gd2UgaGFkIGl0IGRpcmVjdGx5IGFscmVh
ZHkgdGhlbiB0aGlzIGRvZXNuJ3QgY2hhbmdlLgogICAgIAorICAgIGlmICh0aGlzID09ICZvdGhl
cikKKyAgICAgICAgcmV0dXJuOworICAgIAogICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29s
Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG90aGVyLm1fY2xvYmJlcnMuYmVnaW4oKTsKICAgICBI
YXNoTWFwPEFic3RyYWN0SGVhcCwgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90aGVyLm1f
Y2xvYmJlcnMuZW5kKCk7CiAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAJKHJldmlzaW9uIDE1
Mjk1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCi1ib29sIGRpZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCitib29sIGRvZXNX
cml0ZXMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogewogICAgIE5vT3BDbG9iYmVyaXplIGFk
ZFJlYWQ7CiAgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFdyaXRlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE1Mjk1OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MjIsNyArNjIyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVzdWx0OwogfTsKIAotYm9vbCBk
aWRXcml0ZXMoR3JhcGgmLCBOb2RlKik7Citib29sIGRvZXNXcml0ZXMoR3JhcGgmLCBOb2RlKik7
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE1Mjk1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw3IEBAIGNsYXNzIERDRVBoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAgICBEQ0VQ
aGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJkZWFkIGNvZGUgZWxp
bWluYXRpb24iKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQogICAgIHsKICAgICB9
CiAgICAgCkBAIC0xMDQsNzUgKzEwNSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAg
ICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKLQotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2st
LTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9j
ayk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VCgobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkgPT0gKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVk
Q1BTKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS53aWxsTm90SGF2
ZUNoZWNrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyIHRoZSBwb3Nz
aWJpbGl0eSB0aGF0IFVJbnQzMlRvTnVtYmVyIGlzIGRlYWQgYnV0IGl0cwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY2hpbGQgaXNuJ3Q7IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1vdkhpbnQg
dGhlIGNoaWxkLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+
c2hvdWxkR2VuZXJhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmNo
aWxkMSgpLT5vcCgpID09IFVJbnQzMlRvTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpID0gbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
Wm9tYmllSGludCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkg
PSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhNb3ZIaW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKE1vdkhpbnRBbmRDaGVjayk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dFJlZkNvdW50KDEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4
IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgubV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWVkZ2UgfHwgZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+
Y29kZU9yaWdpbiwgZWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21VbmNoZWNrZWQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbSgpOwotICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVJcnJl
bGV2YW50UGhhbnRvbUNoaWxkcmVuKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRSZWZDb3VudCgxKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfSB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRl
KGJsb2NrKTsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAg
ICAgLy8gTmVlZCB0byBwcm9jZXNzIHRoZSBncmFwaCBpbiByZXZlcnNlIERGUyBvcmRlciwgc28g
dGhhdCB3ZSBnZXQgdG8gdGhlIHVzZXMKKyAgICAgICAgICAgIC8vIG9mIGEgbm9kZSBiZWZvcmUg
d2UgZ2V0IHRvIHRoZSBub2RlIGl0c2VsZi4KKyAgICAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gZGVwdGhGaXJzdDsKKyAgICAgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0
T3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkZXB0aEZp
cnN0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgICAgICBmaXh1cEJsb2NrKGRlcHRoRmlyc3Rb
aV0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4
KQorICAgICAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5ibG9jayhibG9ja0luZGV4KSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID0g
RXhhY3RSZWZDb3VudDsKQEAgLTIwNiw2ICsxNDgsNzUgQEAgcHJpdmF0ZToKICAgICAgICAgY291
bnROb2RlKGVkZ2Uubm9kZSgpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBmaXh1cEJsb2NrKEJh
c2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5z
aXplKCk7IGluZGV4SW5CbG9jay0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Cisg
ICAgICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoKG5vZGUt
Pm9wKCkgPT0gU2V0TG9jYWwpID09IChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykpOwor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS53aWxsTm90SGF2ZUNoZWNrKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgVUlu
dDMyVG9OdW1iZXIgaXMgZGVhZCBidXQgaXRzCisgICAgICAgICAgICAgICAgICAgIC8vIGNoaWxk
IGlzbid0OyBpZiBzbyB0aGVuIHdlIHNob3VsZCBNb3ZIaW50IHRoZSBjaGlsZC4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2VuZXJhdGUoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gVUludDMyVG9OdW1i
ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IG5vZGUtPmNoaWxk
MSgpLT5jaGlsZDEoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgp
LT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhab21iaWVIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoTW92SGludCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhN
b3ZIaW50QW5kQ2hlY2spOworICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFNldEFyZ3Vt
ZW50OiB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BT
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVy
YXRlLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9k
ZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlIHx8IGVkZ2Uu
d2lsbE5vdEhhdmVDaGVjaygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIGVkZ2UpOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUGhhbnRvbVVuY2hlY2tlZCgpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4obm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+
c2V0UmVmQ291bnQoMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IH0K
KyAgICAgICAgfQorCisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAg
IH0KKyAgICAKICAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9k
ZSogbm9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2Vu
Y3lMaXN0OjpTaXplOyArK2kpIHsKQEAgLTIxOCw2ICsyMjksNyBAQCBwcml2YXRlOgogICAgIH0K
ICAgICAKICAgICBWZWN0b3I8Tm9kZSosIDEyOD4gbV93b3JrbGlzdDsKKyAgICBJbnNlcnRpb25T
ZXQgbV9pbnNlcnRpb25TZXQ7CiB9OwogCiBib29sIHBlcmZvcm1EQ0UoR3JhcGgmIGdyYXBoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlRG9taW5hdGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlRG9taW5hdGVzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2VEb21pbmF0ZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRWRnZURvbWluYXRlc19oCisjZGVm
aW5lIERGR0VkZ2VEb21pbmF0ZXNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgRWRnZURvbWluYXRlcyB7CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorcHVibGljOgorICAgIEVkZ2VEb21p
bmF0ZXMoR3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2dyYXBo
KGdyYXBoKQorICAgICAgICAsIG1fYmxvY2soYmxvY2spCisgICAgICAgICwgbV9yZXN1bHQodHJ1
ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3IoKShOb2RlKiwgRWRnZSBl
ZGdlKQorICAgIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBtX2dyYXBoLm1fZG9taW5hdG9ycy5k
b21pbmF0ZXMoZWRnZS5ub2RlKCktPm1pc2Mub3duZXIsIG1fYmxvY2spOworICAgICAgICBpZiAo
dmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAiQ2hlY2tp
bmcgaWYgIiwgZWRnZSwgIiBpbiAiLCAqZWRnZS5ub2RlKCktPm1pc2Mub3duZXIsCisgICAgICAg
ICAgICAgICAgIiBkb21pbmF0ZXMgIiwgKm1fYmxvY2ssICI6ICIsIHJlc3VsdCwgIlxuIik7Cisg
ICAgICAgIH0KKyAgICAgICAgbV9yZXN1bHQgJj0gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBi
b29sIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CisKK3ByaXZhdGU6CisgICAg
R3JhcGgmIG1fZ3JhcGg7CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBib29sIG1fcmVz
dWx0OworfTsKKworaW5saW5lIGJvb2wgZWRnZXNEb21pbmF0ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEVkZ2VEb21pbmF0ZXMgZWRnZURvbWlu
YXRlcyhncmFwaCwgYmxvY2spOworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBu
b2RlLCBlZGdlRG9taW5hdGVzKTsKKyAgICByZXR1cm4gZWRnZURvbWluYXRlcy5yZXN1bHQoKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdFZGdlRG9taW5hdGVzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI5NTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MzgsMTEgKzczOCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ3JlYXRlVGhpczogewotICAgICAgICAg
ICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFs
U2FmZTogewogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPEludDMy
VXNlPihub2RlLT5jaGlsZDEoKSk7CkBAIC03NTgsOCArNzUzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgY2Fz
ZSBHZXRTY29wZToKLSAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKKyAgICAgICAgY2FzZSBH
ZXRTY29wZTogewogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPEtu
b3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTgyMiw3ICs4MTYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrRnVuY3Rp
b246CiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0Ogot
ICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6IHsKKyAgICAgICAgY2FzZSBDaGVja0hhc0lu
c3RhbmNlOgorICAgICAgICBjYXNlIENyZWF0ZVRoaXM6CisgICAgICAgIGNhc2UgR2V0QnV0dGVy
Zmx5OiB7CiAgICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8Q2VsbFVz
ZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEy
MDQsNyArMTIwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAoYXJyYXlNb2Rl
LnVzZXNCdXR0ZXJmbHkoKSkgewogICAgICAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCi0gICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRC
dXR0ZXJmbHksIGNvZGVPcmlnaW4sIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOworICAgICAg
ICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3Jp
Z2luLCBFZGdlKGFycmF5LCBDZWxsVXNlKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTElDTVBoYXNlLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgi
CisjaW5jbHVkZSAiREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0Jhc2lj
QmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgorI2luY2x1ZGUgIkRG
R0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdFZGdlRG9taW5hdGVzLmgiCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQ
aGFzZS5oIgorI2luY2x1ZGUgIkRGR1NhZmVUb0V4ZWN1dGUuaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworbmFtZXNwYWNlIHsK
Kworc3RydWN0IExvb3BEYXRhIHsKKyAgICBMb29wRGF0YSgpCisgICAgICAgIDogcHJlSGVhZGVy
KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBDbG9iYmVyU2V0IHdyaXRlczsKKyAgICBCYXNp
Y0Jsb2NrKiBwcmVIZWFkZXI7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworY2xh
c3MgTElDTVBoYXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CisgICAgCitwdWJsaWM6CisgICAgTElDTVBoYXNlKEdyYXBoJiBncmFwaCkK
KyAgICAgICAgOiBQaGFzZShncmFwaCwgIkxJQ00iKQorICAgICAgICAsIG1faW50ZXJwcmV0ZXIo
Z3JhcGgsIG1fc3RhdGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAg
eworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAg
ICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAg
ICAgICAgbV9ncmFwaC5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7
CisgICAgICAgIAorICAgICAgICBtX2RhdGEucmVzaXplKG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMu
bnVtTG9vcHMoKSk7CisgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHRoZSBzZXQgb2Yg
dGhpbmdzIGVhY2ggbG9vcCB3cml0ZXMgdG8sIG5vdCBpbmNsdWRpbmcgYmxvY2tzIHRoYXQKKyAg
ICAgICAgLy8gYmVsb25nIHRvIGlubmVyIGxvb3BzLiBXZSBmaXggdGhpcyBsYXRlci4KKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX2dyYXBo
Lm1fbmF0dXJhbExvb3BzLmlubmVyTW9zdExvb3BPZihibG9jayk7CisgICAgICAgICAgICBpZiAo
IWxvb3ApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBMb29wRGF0YSYg
ZGF0YSA9IG1fZGF0YVtsb29wLT5pbmRleCgpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
bm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgICAg
IGFkZFdyaXRlcyhtX2dyYXBoLCBibG9jay0+YXQobm9kZUluZGV4KSwgZGF0YS53cml0ZXMpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBsb29wOgorICAgICAgICAv
LyAtIElkZW50aWZ5IGl0cyBwcmUtaGVhZGVyLgorICAgICAgICAvLyAtIE1ha2Ugc3VyZSBpdHMg
b3V0ZXIgbG9vcHMga25vdyB3aGF0IGl0IGNsb2JiZXJzLgorICAgICAgICBmb3IgKHVuc2lnbmVk
IGxvb3BJbmRleCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMubnVtTG9vcHMoKTsgbG9vcEluZGV4
LS07KSB7CisgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fZ3JhcGgubV9u
YXR1cmFsTG9vcHMubG9vcChsb29wSW5kZXgpOworICAgICAgICAgICAgTG9vcERhdGEmIGRhdGEg
PSBtX2RhdGFbbG9vcC5pbmRleCgpXTsKKyAgICAgICAgICAgIGZvciAoCisgICAgICAgICAgICAg
ICAgY29uc3QgTmF0dXJhbExvb3AqIG91dGVyTG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMu
aW5uZXJNb3N0T3V0ZXJMb29wKGxvb3ApOworICAgICAgICAgICAgICAgIG91dGVyTG9vcDsKKyAg
ICAgICAgICAgICAgICBvdXRlckxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmlubmVyTW9z
dE91dGVyTG9vcCgqb3V0ZXJMb29wKSkKKyAgICAgICAgICAgICAgICBtX2RhdGFbb3V0ZXJMb29w
LT5pbmRleCgpXS53cml0ZXMuYWRkQWxsKGRhdGEud3JpdGVzKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgQmFzaWNCbG9jayogaGVhZGVyID0gbG9vcC5oZWFkZXIoKTsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHByZUhlYWRlciA9IDA7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBoZWFkZXItPnByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGhlYWRlci0+cHJlZGVjZXNzb3JzW2ldOworICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoaGVhZGVyLCBwcmVk
ZWNlc3NvcikpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFwcmVIZWFkZXIgfHwgcHJlSGVhZGVyID09IHByZWRlY2Vzc29yKTsK
KyAgICAgICAgICAgICAgICBwcmVIZWFkZXIgPSBwcmVkZWNlc3NvcjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJlSGVhZGVyLT5sYXN0
KCktPm9wKCkgPT0gSnVtcCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGEucHJlSGVh
ZGVyID0gcHJlSGVhZGVyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmlu
aXRpYWxpemVOb2RlT3duZXJzKCk7CisgICAgICAgIAorICAgICAgICAvLyBXYWxrIGFsbCBiYXNp
YyBibG9ja3MgdGhhdCBiZWxvbmcgdG8gbG9vcHMsIGxvb2tpbmcgZm9yIGhvaXN0aW5nIG9wcG9y
dHVuaXRpZXMuCisgICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IGhvaXN0IHRvIHRoZSBpbm5l
ci1tb3N0IGJsb2NrLCBzaW5jZSB0aGF0IHNpbXBsaWZpZXMgQ0ZBCisgICAgICAgIC8vIHJlYXNv
bmluZyAoc2VlIGJlbG93KS4gSG9pc3RpbmcgaXMgdmFsaWQgaWY6CisgICAgICAgIC8vIC0gVGhl
IG5vZGUgZG9lc24ndCB3cml0ZSBhbnl0aGluZy4KKyAgICAgICAgLy8gLSBUaGUgbm9kZSBkb2Vz
bid0IHJlYWQgYW55dGhpbmcgdGhhdCB0aGUgbG9vcCB3cml0ZXMuCisgICAgICAgIC8vIC0gVGhl
IHByZUhlYWRlcidzIHN0YXRlIGF0IHRhaWwgbWFrZXMgdGhlIG5vZGUgc2FmZSB0byBleGVjdXRl
LgorICAgICAgICAvLyAtIFRoZSBsb29wJ3MgY2hpbGRyZW4gYWxsIGJlbG9uZyB0byBub2RlcyB0
aGF0IHN0cmljdGx5IGRvbWluYXRlIHRoZSBsb29wIGhlYWRlci4KKyAgICAgICAgLy8gLSBUaGUg
cHJlSGVhZGVyJ3Mgc3RhdGUgYXQgdGFpbCBpcyBzdGlsbCB2YWxpZC4gVGhpcyBpcyBtb3N0bHkg
dG8gc2F2ZSBjb21waWxlCisgICAgICAgIC8vICAgdGltZSBhbmQgcHJlc2VydmUgc29tZSBraW5k
IG9mIHNhbml0eSwgaWYgd2UgaG9pc3Qgc29tZXRoaW5nIHRoYXQgbXVzdCBleGl0LgorICAgICAg
ICAvLworICAgICAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIHJlbWVtYmVyIHRvOgorICAgICAgICAv
LyAtIENsZWFyIE5vZGVFeGl0c0ZvcndhcmQgZm9yIGFueSBub2RlcyB3ZSBob2lzdGVkLgorICAg
ICAgICAvLyAtIFVwZGF0ZSB0aGUgc3RhdGUtYXQtdGFpbCB3aXRoIHRoZSBub2RlIHdlIGhvaXN0
ZWQsIHNvIGZ1dHVyZSBob2lzdCBjYW5kaWRhdGVzCisgICAgICAgIC8vICAga25vdyBhYm91dCBh
bnkgdHlwZSBjaGVja3Mgd2UgaG9pc3RlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2Ugb25s
eSBob2lzdCB0byBpbm5lci1tb3N0IGxvb3BzLCByaWdodCBub3cuIFRoaXMgaXNuJ3QgYSBzeXN0
ZW1pYyBkZWZpY2llbmN5OworICAgICAgICAvLyByYXRoZXIgaXQncyBhIGtpbmQgb2Ygc3RvcGdh
cCBiZWNhdXNlIG9mIGluYWRlcXVhdGUgd2lyaW5nIHdpdGggdGhlIENGQS4KKyAgICAgICAgLy8g
Q29uc2lkZXIgdGhlIGNhc2Ugd2hlcmUgeW91IGhhdmUgY29kZSBsaWtlOgorICAgICAgICAvLwor
ICAgICAgICAvLyBhID0gLi4uCisgICAgICAgIC8vIGkgPSAuLi4KKyAgICAgICAgLy8gbG9vcCB7
CisgICAgICAgIC8vICAgICBiID0gLi4uCisgICAgICAgIC8vICAgICBsb29wIHsKKyAgICAgICAg
Ly8gICAgICAgICBjID0gYVtpXQorICAgICAgICAvLyAgICAgICAgIGQgPSBjICsgYgorICAgICAg
ICAvLyAgICAgfQorICAgICAgICAvLyB9CisgICAgICAgIC8vCisgICAgICAgIC8vIEluIHRoYXQg
Y2FzZSBhZnRlciB3ZSBob2lzdCBjLCB3ZSB3aWxsIGhhdmU6CisgICAgICAgIC8vCisgICAgICAg
IC8vIGEgPSAuLi4KKyAgICAgICAgLy8gaSA9IC4uLgorICAgICAgICAvLyBjID0gYVtpXQorICAg
ICAgICAvLyBsb29wIHsKKyAgICAgICAgLy8gICAgIGIgPSAuLi4KKyAgICAgICAgLy8gICAgIGxv
b3AgeworICAgICAgICAvLyAgICAgICAgIGQgPSBjICsgYgorICAgICAgICAvLyAgICAgfQorICAg
ICAgICAvLyB9CisgICAgICAgIC8vCisgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlIENGQSBhdCB0
aGUgdGFpbCBvZiB0aGUgb3V0ZXItbW9zdCBsb29wJ3MgcHJlLWhlYWRlciB3aWxsIGtub3cKKyAg
ICAgICAgLy8gYWJvdXQgYiwgYnV0IHRoZSBpbm5lci1tb3N0IGxvb3AncyBwcmUtaGVhZGVyIHdv
bid0LiBUaGlzIHdpbGwgY2F1c2UgdGhlIGhvaXN0CisgICAgICAgIC8vIG9mICdkID0gYyArIGIn
IHRvIGFzc2VydCBiZWNhdXNlIGl0IHdpbGwgYXR0ZW1wdCB0byBob2lzdCBvdXQgb2YgdGhlIGlu
bmVyIGxvb3AKKyAgICAgICAgLy8gYnV0IG5vdCBhbGwgdGhlIHdheSBvdXQgb2YgdGhlIG91dGVy
IGxvb3A7IGl0IHRoZW4gd29uJ3QgZmluZCB0aGUgc3RhdGUgb2YgYyBhdAorICAgICAgICAvLyB0
aGUgcHJlLWhlYWRlciBvZiB0aGUgaW5uZXItbW9zdCBsb29wLiBXZSBnZXQgYXJvdW5kIHRoaXMg
Ynkgb25seSBob2lzdGluZyB0bworICAgICAgICAvLyBpbm5lci1tb3N0IGxvb3BzLiBUaGlzIG91
Z2h0IHRvIGJlIHJlbGF0aXZlbHkgZWFzeSB0byBmaXg7IHdlIGtub3cgdGhhdAorICAgICAgICAv
LyBhbnl0aGluZyB3ZSBob2lzdCBjYW5ub3QgaGF2ZSBpdHMgc3RhdGUgY2xvYmJlcmVkLCBzbyB3
ZSBjb3VsZCBqdXN0IGNvcHkgdGhlCisgICAgICAgIC8vIHN0YXRlIGludG8gdGhlIGlubmVyIGxv
b3BzLiBCdXQgZm9yIG5vdywgd2UganVzdCBkbyB0aGUgY29uc2VydmF0aXZlIHRoaW5nLgorICAg
ICAgICAvLyBOb3RlIHRoYXQgd2UgY291bGQgYWxzbyBiZSBzdXBlci1zbGVhenkgYW5kIGp1c3Qg
cnVuIExJQ00gdG8gZml4cG9pbnQsIGFuZCBnZXQKKyAgICAgICAgLy8gdGhlIGV4YWN0IHNhbWUg
ZWZmZWN0LgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0
OworICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3Qp
OworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICgKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGRlcHRoRmlyc3RJbmRleCA9IDA7CisgICAgICAgICAgICBkZXB0aEZpcnN0
SW5kZXggPCBkZXB0aEZpcnN0LnNpemUoKTsKKyAgICAgICAgICAgICsrZGVwdGhGaXJzdEluZGV4
KSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhG
aXJzdFtkZXB0aEZpcnN0SW5kZXhdOworICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxv
b3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmlubmVyTW9zdExvb3BPZihibG9jayk7CisgICAg
ICAgICAgICBpZiAoIWxvb3ApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygK
KyAgICAgICAgICAgICAgICAgICAgIkF0dGVtcHRpbmcgdG8gaG9pc3Qgb3V0IG9mIGJsb2NrICIs
ICpibG9jaywgIiBpbiAiLCAqbG9vcCwgIiwgd2hpY2ggd3JpdGVzICIsCisgICAgICAgICAgICAg
ICAgICAgIG1fZGF0YVtsb29wLT5pbmRleCgpXS53cml0ZXMsICJcbiIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAg
ICAgTm9kZSomIG5vZGVSZWYgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICBpZiAoZG9lc1dyaXRlcyhtX2dyYXBoLCBub2RlUmVmKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBOb3Qg
aG9pc3RpbmcgIiwgbm9kZVJlZiwgIiBiZWNhdXNlIGl0IHdyaXRlcyB0aGluZ3MuXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBhdHRlbXB0SG9pc3QoYmxvY2ssIG5vZGVSZWYsIGxvb3ApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2hhbmdl
ZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0SG9pc3QoQmFzaWNCbG9jayog
ZnJvbUJsb2NrLCBOb2RlKiYgbm9kZVJlZiwgY29uc3QgTmF0dXJhbExvb3AqIGxvb3ApCisgICAg
eworICAgICAgICBOb2RlKiBub2RlID0gbm9kZVJlZjsKKyAgICAgICAgTG9vcERhdGEmIGRhdGEg
PSBtX2RhdGFbbG9vcC0+aW5kZXgoKV07CisgICAgICAgIAorICAgICAgICBpZiAoIWRhdGEucHJl
SGVhZGVyLT5jZmFEaWRGaW5pc2gpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIENG
QSBpcyBpbnZhbGlkLlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmICghZWRnZXNEb21pbmF0ZShtX2dyYXBoLCBub2RlLCBkYXRh
LnByZUhlYWRlcikpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9k
ZSwgIiBiZWNhdXNlIGl0IGlzbid0IGxvb3AgaW52YXJpYW50LlxuIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChyZWFkc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgZGF0YS53cml0ZXMpKSB7CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAg
ICAgICAgICAgICIgICAgTm90IGhvaXN0aW5nICIsIG5vZGUsCisgICAgICAgICAgICAgICAgICAg
ICIgYmVjYXVzZSBpdCByZWFkcyB0aGluZ3MgdGhhdCB0aGUgbG9vcCB3cml0ZXMuXG4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oZGF0YS5wcmVIZWFkZXIpOworICAgICAg
ICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpIHsKKyAgICAgICAg
ICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAg
ICAgICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0IHNh
ZmUgdG8gZXhlY3V0ZS5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAiICAgIEhvaXN0aW5nICIsIG5vZGUsICIg
ZnJvbSAiLCAqZnJvbUJsb2NrLCAiIHRvICIsICpkYXRhLnByZUhlYWRlciwKKyAgICAgICAgICAg
ICAgICAiXG4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGF0YS5wcmVIZWFkZXIt
Pmluc2VydEJlZm9yZUxhc3Qobm9kZSk7CisgICAgICAgIG5vZGUtPm1pc2Mub3duZXIgPSBkYXRh
LnByZUhlYWRlcjsKKyAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsK
KyAgICAgICAgbm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBkYXRhLnByZUhlYWRlci0+
bGFzdCgpLT5jb2RlT3JpZ2luRm9yRXhpdFRhcmdldDsKKyAgICAgICAgCisgICAgICAgIC8vIE1v
ZGlmeSB0aGUgc3RhdGUgYXQgdGhlIGVuZCBvZiB0aGUgcHJlSGVhZGVyIGluIHBsYWNlIHRvIHJl
ZmxlY3QgdGhhdCB3ZQorICAgICAgICAvLyBob2lzdGVkIHNvbWV0aGluZywgc2luY2Ugd2UgbWln
aHQgaGF2ZSBob2lzdGVkIGEgdHlwZSBjaGVjay4KKyAgICAgICAgdW5zaWduZWQgaW5kZXhJbkJs
b2NrID0gZGF0YS5wcmVIZWFkZXItPnNpemUoKSAtIDI7CisgICAgICAgIEFTU0VSVChkYXRhLnBy
ZUhlYWRlci0+YXQoaW5kZXhJbkJsb2NrKSA9PSBub2RlKTsKKyAgICAgICAgbV9pbnRlcnByZXRl
ci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBJdCBqdXN0IHNv
IGhhcHBlbnMgdGhhdCBhbGwgb2YgdGhlIG5vZGVzIHdlIGN1cnJlbnRseSBrbm93IGhvdyB0byBo
b2lzdAorICAgICAgICAvLyBkb24ndCBoYXZlIHZhci1hcmcgY2hpbGRyZW4uIFRoYXQgbWF5IGNo
YW5nZSBhbmQgdGhlbiB3ZSBjYW4gZml4IHRoaXMKKyAgICAgICAgLy8gY29kZS4gQnV0IGZvciBu
b3cgd2UganVzdCBhc3NlcnQgdGhhdCdzIHRoZSBjYXNlLgorICAgICAgICBSRUxFQVNFX0FTU0VS
VCghKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykpOworICAgICAgICAKKyAgICAgICAg
bm9kZVJlZiA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9y
aWdpbiwgbm9kZS0+Y2hpbGRyZW4pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIEF0VGFpbEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKKyAgICBBYnN0cmFj
dEludGVycHJldGVyPEF0VGFpbEFic3RyYWN0U3RhdGU+IG1faW50ZXJwcmV0ZXI7CisgICAgVmVj
dG9yPExvb3BEYXRhPiBtX2RhdGE7Cit9OworCitib29sIHBlcmZvcm1MSUNNKEdyYXBoJiBncmFw
aCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIExJQ00gUGhhc2Ui
KTsKKyAgICByZXR1cm4gcnVuUGhhc2U8TElDTVBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdMSUNNUGhhc2VfaAorI2RlZmluZSBERkdMSUNNUGhhc2VfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gRG9lcyBsb29w
LWludmFyaWFudCBjb2RlIG1vdGlvbiwgb3IgTElDTSBmb3Igc2hvcnQuIFRoaXMgb25seSBob2lz
dHMgY29kZQorLy8gYW5kIG5ldmVyIHNpbmtzIGFueXRoaW5nLiBBIG5vZGUgaXMgaG9pc3RlZCBp
ZiBpdCBkb2VzIG5vIHdyaXRlcywgYW5kIGlmCisvLyBpdHMgcmVhZHMgZG9uJ3Qgb3ZlcmxhcCB0
aGUgbG9vcCdzIHdyaXRlcy4KKworYm9vbCBwZXJmb3JtTElDTShHcmFwaCYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR0xJQ01QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAkocmV2aXNpb24gMTUyOTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkRGR0Zs
dXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgog
I2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHTElDTVBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHTG9vcFBy
ZUhlYWRlckNyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmgiCkBAIC0yMDgsNiArMjA5LDkgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBs
YW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOwogICAg
ICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtQ0ZBKGRm
Zyk7CisgICAgICAgIHBlcmZvcm1MSUNNKGRmZyk7CisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0Fu
YWx5c2lzKGRmZyk7CisgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybURD
RShkZmcpOyAvLyBXZSByZWx5IG9uIHRoaXMgdG8gY29udmVydCBkZWFkIFNldExvY2FscyBpbnRv
IHRoZSBhcHByb3ByaWF0ZSBoaW50LCBhbmQgdG8ga2lsbCBkZWFkIGNvZGUgdGhhdCB3b24ndCBi
ZSByZWNvZ25pemVkIGFzIGRlYWQgYnkgTExWTS4KICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5h
bHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207260</attachid>
            <date>2013-07-22 11:47:14 -0700</date>
            <delta_ts>2013-07-22 15:22:05 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>46559</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBA
CisyMDEzLTA3LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBkbyBhIGhpZ2gtbGV2ZWwgTElDTSBiZWZvcmUgZ29pbmcg
dG8gRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTg3NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIEltcGxlbWVudHMgTElDTSBob2lzdGluZyBmb3Igbm9kZXMgdGhhdCBuZXZlciB3cml0
ZSBhbnl0aGluZyBhbmQgbmV2ZXIgcmVhZAorICAgICAgICB0aGluZ3MgdGhhdCBhcmUgY2xvYmJl
cmVkIGJ5IHRoZSBsb29wLiBUaGVyZSBhcmUgc29tZSBvdGhlciBwcmVjb25kaXRpb25zIGZvcgor
ICAgICAgICBob2lzdGluZywgc2VlIERGR0xJQ01QaGFzZS5jcHAuCisKKyAgICAgICAgQWxzbyBk
aWQgYSBmZXcgZml4ZXM6CisgICAgICAgIAorICAgICAgICAtIENsb2JiZXJTZXQ6OmFkZCB3YXMg
ZmFpbGluZyB0byBzd2l0Y2ggU3VwZXIgZW50cmllcyB0byBEaXJlY3QgZW50cmllcyBpbgorICAg
ICAgICAgIHNvbWUgY2FzZXMuCisgICAgICAgIAorICAgICAgICAtIERGR0Nsb2JiZXJpemUuY3Bw
IG5lZWRlZCB0byAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIi4KKyAgICAgICAgCisgICAgICAgIC0g
RENFUGhhc2UgbmVlZHMgdG8gcHJvY2VzcyB0aGUgZ3JhcGggaW4gcmV2ZXJzZSBERlMgb3JkZXIs
IHdoZW4gd2UncmUgaW4gU1NBLgorICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyB0aGUgRlRM
IGEgOTElIHNwZWVkLXVwIG9uIGltYWdpbmctZ2F1c3NpYW4tYmx1ci4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RG
R0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6QXRUYWlsQWJzdHJhY3RTdGF0ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6fkF0VGFpbEFic3RyYWN0U3Rh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVl
Rm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9k
ZSk6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAoQXRUYWlsQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZVRvKToKKyAgICAgICAgKEpTQzo6
REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpmb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpB
dFRhaWxBYnN0cmFjdFN0YXRlOjp2YXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFp
bEFic3RyYWN0U3RhdGU6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFj
dFN0YXRlOjppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRl
OjpzZXREaWRDbG9iYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRl
OjpzZXRJc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpz
ZXRCcmFuY2hEaXJlY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3Rh
dGU6OnNldEZvdW5kQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFj
dFN0YXRlOjpoYXZlU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJh
Y3RTdGF0ZTo6c2V0SGF2ZVN0cnVjdHVyZXMpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2Nr
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6aW5zZXJ0QmVmb3JlTGFzdCk6Cisg
ICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdDbG9iYmVyU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVy
U2V0OjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6OmFkZEFsbCk6CisgICAg
ICAgICogZGZnL0RGR0Nsb2JiZXJpemUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNXcml0
ZXMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAqIGRmZy9ERkdEQ0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RENFUGhhc2U6
OkRDRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVuKToKKyAgICAgICAg
KEpTQzo6REZHOjpEQ0VQaGFzZTo6Zml4dXBCbG9jayk6CisgICAgICAgIChEQ0VQaGFzZSk6Cisg
ICAgICAgICogZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaDogQWRkZWQuCisgICAgICAgIChERkcpOgor
ICAgICAgICAoRWRnZURvbWluYXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZURvbWluYXRl
czo6RWRnZURvbWluYXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZURvbWluYXRlczo6b3Bl
cmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZURvbWluYXRlczo6cmVzdWx0KToKKyAg
ICAgICAgKEpTQzo6REZHOjplZGdlc0RvbWluYXRlKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpjaGVja0FycmF5KToKKyAgICAgICAgKiBkZmcv
REZHTElDTVBoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChMSUNNUGhhc2UpOgorICAgICAgICAo
SlNDOjpERkc6OkxJQ01QaGFzZTo6TElDTVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpMSUNN
UGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjphdHRlbXB0SG9pc3Qp
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtTElDTSk6CisgICAg
ICAgICogZGZnL0RGR0xJQ01QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
ICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRo
cmVhZEltcGwpOgorCiAyMDEzLTA3LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgZm91cnRoVGllcjogREZHIE5vZGVzIHNob3VsZCBiZSBhYmxlIHRvIGFic3Ry
YWN0bHkgdGVsbCB5b3Ugd2hhdCB0aGV5IHJlYWQgYW5kIHdoYXQgdGhleSB3cml0ZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1Mjk1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zODQsNiArMzg0LDExIEBACiAJCTBGRTUwNUEyMTc5QjYwRUQwMEIz
NUY4QyAvKiBGVExGYWlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTUwNUEwMTc5QjYwRUQwMEIzNUY4QyAvKiBGVExGYWlsLmNwcCAqLzsgfTsK
IAkJMEZFNTA1QTMxNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUExMTc5QjYwRUQwMEIzNUY4QyAv
KiBGVExGYWlsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZFNTA1QTUxNzlDRTNFQzAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QTQxNzlDRTNF
QzAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUuY3BwICovOyB9OworCQkwRkU1MDVBQjE3OUNFQzA4
MDBCMzVGOEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDVBNjE3OUNFQzA4MDBCMzVGOEMgLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CisJCTBGRTUwNUFDMTc5Q0VDMDgwMEIz
NUY4QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDVBNzE3OUNFQzA4MDBCMzVGOEMgLyogREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGRTUwNUFEMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdFZGdlRG9taW5hdGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDVB
ODE3OUNFQzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNUFFMTc5Q0VDMDgwMEIzNUY4
QyAvKiBERkdMSUNNUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1QTkxNzlDRUMwODAwQjM1RjhDIC8qIERGR0xJQ01QaGFzZS5jcHAg
Ki87IH07CisJCTBGRTUwNUFGMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUFBMTc5Q0VD
MDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVz
aXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdh
dGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBBMDgx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExBYmJyZXZpYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTE0NDYsNiArMTQ1MSwxMSBAQAogCQkwRkU1MDVBMDE3OUI2MEVEMDBCMzVG
OEMgLyogRlRMRmFpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExGYWlsLmNwcDsgcGF0aCA9IGZ0bC9GVExGYWlsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFNTA1QTExNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRmFpbC5oOyBwYXRoID0gZnRsL0ZUTEZhaWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1QTQxNzlDRTNFQzAwQjM1RjhDIC8q
IERGR0Nsb2JiZXJpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQ2xvYmJlcml6ZS5jcHA7IHBhdGggPSBkZmcvREZHQ2xvYmJlcml6ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNUE2MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwOyBwYXRoID0gZGZnL0RGR0F0VGFpbEFic3RyYWN0
U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDVBNzE3OUNFQzA4
MDBCMzVGOEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmg7IHBhdGggPSBkZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDVB
ODE3OUNFQzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdFZGdlRG9taW5hdGVzLmg7IHBhdGggPSBkZmcvREZHRWRnZURv
bWluYXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDVBOTE3OUNFQzA4
MDBCMzVGOEMgLyogREZHTElDTVBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0xJQ01QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTElDTVBoYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1QUExNzlDRUMwODAwQjM1RjhDIC8q
IERGR0xJQ01QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdMSUNN
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMSUNNUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
RGVzaXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAv
KiBGVExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TEFiYnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDI2LDYgKzMwMzYsOCBAQAogCQkJCTBGNjM5NDgyMTVF
NDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLywKIAkJCQkwRkMwOTc2QjE0NjhBQjRB
MDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkwRkMwOTc2QzE0NjhB
QjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8sCisJCQkJMEZFNTA1QTYxNzlD
RUMwODAwQjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwICovLAorCQkJCTBGRTUw
NUE3MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggKi8sCiAJCQkJ
MEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmggKi8sCiAJCQkJMEZFNTA1NjIxNzhGNUIwNTAwQjM1RjhDIC8qIERGR0Jh
c2ljQmxvY2suY3BwICovLApAQCAtMzA3OSw2ICszMDkxLDcgQEAKIAkJCQkwRkQzQzgyMjE0MTE1
RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8sCiAJCQkJMEZCNEI1MUIxNkI2Mjc3MjAwM0Y2
OTZCIC8qIERGR0VkZ2UuY3BwICovLAogCQkJCTBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBE
RkdFZGdlLmggKi8sCisJCQkJMEZFNTA1QTgxNzlDRUMwODAwQjM1RjhDIC8qIERGR0VkZ2VEb21p
bmF0ZXMuaCAqLywKIAkJCQkwRkU1MDU5MjE3OUE2MDQ1MDBCMzVGOEMgLyogREZHRWRnZVVzZXNT
dHJ1Y3R1cmUuaCAqLywKIAkJCQkwRkRCMkNEMTE3NDJEODA0MDA3QjNDMUIgLyogREZHRmFpbGVk
RmluYWxpemVyLmNwcCAqLywKIAkJCQkwRkRCMkNEMjE3NDJEODA0MDA3QjNDMUIgLyogREZHRmFp
bGVkRmluYWxpemVyLmggKi8sCkBAIC0zMTA3LDYgKzMxMjAsOCBAQAogCQkJCTBGREIyQ0Q2MTc0
MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCAqLywKIAkJCQkwRjQ2RTZDMjE3NkY4
QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovLAogCQkJCTBGNDZFNkMzMTc2RjhB
NUIwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oICovLAorCQkJCTBGRTUwNUE5MTc5Q0VDMDgw
MEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNUFBMTc5Q0VDMDgwMEIz
NUY4QyAvKiBERkdMSUNNUGhhc2UuaCAqLywKIAkJCQkwRkU1MDU2QjE3OEY1QjUzMDBCMzVGOEMg
LyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLywKIAkJCQkwRkU1MDU2QzE3OEY1QjUz
MDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggKi8sCiAJCQkJMEZCNEI1MUMx
NkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmNwcCAqLywKQEAgLTM1OTgsNiAr
MzYxMyw3IEBACiAJCQkJQkMxOEM0MTAwRTE2RjVDRDAwQjM0NDYwIC8qIEluaXRpYWxpemVUaHJl
YWRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTFGMTcwOEIwMDcwMEJCNzIyQyAvKiBG
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5OTBF
RDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUw
NUFDMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNTA1OUQxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2Ji
ZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMwMEI4OTYxOSAvKiBJ
bnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjA1LDYgKzM2MjEsNyBAQAogCQkJCTg2
MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDEzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRTUwNUFGMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0
Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ5MzAwRUQyMkQ3MDAwQjg5NjE5
IC8qIEpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRDQxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTEV4aXRBcmd1bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODUxLDYgKzM4NjgsNyBAQAog
CQkJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNENBOTU4QjE2QUI1MERFMDA5MzhBMDYgLyogU3RhdGljUHJv
cGVydHlBbmFseXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2N0RCOTMxNzUxOUI0QTAwNkE4
MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDVBRDE3OUNF
QzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcz
MEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdP
YmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtNDM4OSw2ICs0NDA3LDcgQEAKIAkJCQkwRkZGQzk1
RjE0RUY5MEJCMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzcwMTY1REJCOTAwMDVBRDM4NyAvKiBEaXNhc3Nl
bWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzcxMDdFQzM3NjAwNDI3QTQ4IC8q
IEVycm9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNUFFMTc5Q0VDMDgwMEIzNUY4QyAv
KiBERkdMSUNNUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzgxMDdFQzM3NjAw
NDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5
QzkxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5Q0ExMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNDQ5Miw2ICs0NTExLDcgQEAKIAkJCQkxNEJENUEzMjBBM0U5MUY2MDBCQUY1
OUMgLyogSlNWYWx1ZVJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENzEwN0VDMzc2
MDA0MjdBNDggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUz
QzYxQzE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTUwNUFCMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dl
YWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVF
REU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUz
QzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJh
Y3RTdGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK0F0VGFpbEFic3RyYWN0U3RhdGU6OkF0VGFpbEFic3RyYWN0
U3RhdGUoKQorICAgIDogbV9ibG9jaygwKQoreworfQorCitBdFRhaWxBYnN0cmFjdFN0YXRlOjp+
QXRUYWlsQWJzdHJhY3RTdGF0ZSgpIHsgfQorCit2b2lkIEF0VGFpbEFic3RyYWN0U3RhdGU6OmNy
ZWF0ZVZhbHVlRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIG1fYmxvY2stPnNzYS0+dmFsdWVz
QXRUYWlsLmFkZChub2RlLCBBYnN0cmFjdFZhbHVlKCkpOworfQorCitBYnN0cmFjdFZhbHVlJiBB
dFRhaWxBYnN0cmFjdFN0YXRlOjpmb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgSGFzaE1hcDxO
b2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Jsb2NrLT5zc2EtPnZhbHVl
c0F0VGFpbC5maW5kKG5vZGUpOworICAgIEFTU0VSVChpdGVyICE9IG1fYmxvY2stPnNzYS0+dmFs
dWVzQXRUYWlsLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlci0+dmFsdWU7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJz
dHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBdFRhaWxBYnN0
cmFjdFN0YXRlX2gKKyNkZWZpbmUgREZHQXRUYWlsQWJzdHJhY3RTdGF0ZV9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
QWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJE
RkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7IAorCitjbGFzcyBB
dFRhaWxBYnN0cmFjdFN0YXRlIHsKK3B1YmxpYzoKKyAgICBBdFRhaWxBYnN0cmFjdFN0YXRlKCk7
CisgICAgCisgICAgfkF0VGFpbEFic3RyYWN0U3RhdGUoKTsKKyAgICAKKyAgICB2b2lkIGluaXRp
YWxpemVUbyhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIG1fYmxvY2sgPSBibG9j
azsKKyAgICB9CisgICAgCisgICAgdm9pZCBjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZSopOworICAg
IEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZSopOworICAgIEFic3RyYWN0VmFsdWUmIGZvck5v
ZGUoRWRnZSBlZGdlKSB7IHJldHVybiBmb3JOb2RlKGVkZ2Uubm9kZSgpKTsgfQorICAgIE9wZXJh
bmRzPEFic3RyYWN0VmFsdWU+JiB2YXJpYWJsZXMoKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNB
dFRhaWw7IH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1f
YmxvY2s7IH0KKyAgICAKKyAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiBtX2Jsb2NrLT5jZmFE
aWRGaW5pc2g7IH0KKyAgICAKKyAgICB2b2lkIHNldERpZENsb2JiZXIoYm9vbCkgeyB9CisgICAg
dm9pZCBzZXRJc1ZhbGlkKGJvb2wgaXNWYWxpZCkgeyBtX2Jsb2NrLT5jZmFEaWRGaW5pc2ggPSBp
c1ZhbGlkOyB9CisgICAgdm9pZCBzZXRCcmFuY2hEaXJlY3Rpb24oQnJhbmNoRGlyZWN0aW9uKSB7
IH0KKyAgICB2b2lkIHNldEZvdW5kQ29uc3RhbnRzKGJvb2wpIHsgfQorICAgIGJvb2wgaGF2ZVN0
cnVjdHVyZXMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9IC8vIEl0J3MgYWx3YXlzIHNhZmUgdG8g
cmV0dXJuIHRydWUuCisgICAgdm9pZCBzZXRIYXZlU3RydWN0dXJlcyhib29sKSB7IH0KKworcHJp
dmF0ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBdFRh
aWxBYnN0cmFjdFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE1Mjk1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwxMSBAQCBzdHJ1
Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAgICAgdm9pZCBncm93KHNpemVf
dCBzaXplKSB7IG1fbm9kZXMuZ3JvdyhzaXplKTsgfQogICAgIAogICAgIHZvaWQgYXBwZW5kKE5v
ZGUqIG5vZGUpIHsgbV9ub2Rlcy5hcHBlbmQobm9kZSk7IH0KKyAgICB2b2lkIGluc2VydEJlZm9y
ZUxhc3QoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGFwcGVuZChsYXN0KCkpOworICAgICAg
ICBhdChzaXplKCkgLSAyKSA9IG5vZGU7CisgICAgfQogICAgIAogICAgIHNpemVfdCBudW1Ob2Rl
cygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsgc2l6ZSgpOyB9CiAgICAgTm9kZSogbm9k
ZShzaXplX3QgaSkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE1Mjk1OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsOCArNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgdGVtcGxh
dGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFw
cGVuZE5vblRlcm1pbmFsKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9
IGdyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKLSAgICAg
ICAgYXBwZW5kKGxhc3QoKSk7IFwKLSAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSByZXN1bHQ7IFwK
KyAgICAgICAgaW5zZXJ0QmVmb3JlTGFzdChyZXN1bHQpOyBcCiAgICAgICAgIHJldHVybiByZXN1
bHQ7IFwKICAgICB9CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJ
TkVfQVBQRU5EX05PREUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlclNldC5jcHAJKHJldmlzaW9uIDE1Mjk1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgQ2xv
YmJlclNldDo6fkNsb2JiZXJTZXQoKSB7IH0KIHZvaWQgQ2xvYmJlclNldDo6YWRkKEFic3RyYWN0
SGVhcCBoZWFwKQogewogICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPjo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1fY2xvYmJlcnMuYWRkKGhlYXAsIHRydWUpOwotICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSkgeworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgaWYgKHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSB0cnVlOwpAQCAtNjAsNiArNjAsOSBAQCB2b2lkIENsb2JiZXJT
ZXQ6OmFkZEFsbChjb25zdCBDbG9iYmVyU2V0CiAgICAgLy8gSWYgdGhlIG90aGVyIGhlYXAgaGFz
IGEgc3VwZXIgaGVhcCwgd2UgbWFrZSBzdXJlIGl0J3MgcHJlc2VudCBidXQgZG9uJ3QKICAgICAv
LyBtb2RpZnkgaXRzIHZhbHVlIC0gc28gd2UgaGFkIGl0IGRpcmVjdGx5IGFscmVhZHkgdGhlbiB0
aGlzIGRvZXNuJ3QgY2hhbmdlLgogICAgIAorICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAg
ICAgcmV0dXJuOworICAgIAogICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPjo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG90aGVyLm1fY2xvYmJlcnMuYmVnaW4oKTsKICAgICBIYXNoTWFwPEFi
c3RyYWN0SGVhcCwgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90aGVyLm1fY2xvYmJlcnMu
ZW5kKCk7CiAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAJKHJldmlzaW9uIDE1Mjk1OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDkgKzI4LDExIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29s
IGRpZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCitib29sIGRvZXNXcml0ZXMoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlKQogewogICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CiAg
ICAgQ2hlY2tDbG9iYmVyaXplIGFkZFdyaXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE1Mjk1OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MjIsNyArNjIy
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVzdWx0OwogfTsKIAotYm9vbCBkaWRXcml0ZXMo
R3JhcGgmLCBOb2RlKik7Citib29sIGRvZXNXcml0ZXMoR3JhcGgmLCBOb2RlKik7CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE1Mjk1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIGNs
YXNzIERDRVBoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAgICBEQ0VQaGFzZShHcmFw
aCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJkZWFkIGNvZGUgZWxpbWluYXRpb24i
KQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQogICAgIHsKICAgICB9CiAgICAgCkBA
IC0xMDQsNzUgKzEwNSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAg
aWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKLQotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspIHsKLSAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBNb3ZIaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCgobm9kZS0+
b3AoKSA9PSBTZXRMb2NhbCkgPT0gKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS53aWxsTm90SGF2ZUNoZWNrKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSB0
aGF0IFVJbnQzMlRvTnVtYmVyIGlzIGRlYWQgYnV0IGl0cwotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gY2hpbGQgaXNuJ3Q7IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNoaWxk
LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2Vu
ZXJhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMSgpLT5v
cCgpID09IFVJbnQzMlRvTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMSgpID0gbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoWm9tYmllSGlu
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFn
cyhNb3ZIaW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KE1vdkhpbnRBbmRDaGVjayk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50
KDEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogewotICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+
Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJl
bltjaGlsZElkeF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UgfHwg
ZWRnZS53aWxsTm90SGF2ZUNoZWNrKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdp
biwgZWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21VbmNoZWNrZWQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRSZWZDb3VudCgxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUGhhbnRvbSgpOwotICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhh
bnRvbUNoaWxkcmVuKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3Vu
dCgxKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsK
KyAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgeworICAgICAgICAgICAgLy8gTmVl
ZCB0byBwcm9jZXNzIHRoZSBncmFwaCBpbiByZXZlcnNlIERGUyBvcmRlciwgc28gdGhhdCB3ZSBn
ZXQgdG8gdGhlIHVzZXMKKyAgICAgICAgICAgIC8vIG9mIGEgbm9kZSBiZWZvcmUgd2UgZ2V0IHRv
IHRoZSBub2RlIGl0c2VsZi4KKyAgICAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVwdGhG
aXJzdDsKKyAgICAgICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tzSW5EZXB0aEZpcnN0T3JkZXIoZGVw
dGhGaXJzdCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkZXB0aEZpcnN0LnNpemUo
KTsgaS0tOykKKyAgICAgICAgICAgICAgICBmaXh1cEJsb2NrKGRlcHRoRmlyc3RbaV0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KQorICAgICAg
ICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5ibG9jayhibG9ja0luZGV4KSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID0gRXhhY3RSZWZD
b3VudDsKQEAgLTIwNiw2ICsxNDgsNzUgQEAgcHJpdmF0ZToKICAgICAgICAgY291bnROb2RlKGVk
Z2Uubm9kZSgpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBmaXh1cEJsb2NrKEJhc2ljQmxvY2sq
IGJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGlu
ZGV4SW5CbG9jay0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAg
ICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoKG5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwpID09IChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykpOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS53aWxsTm90SGF2ZUNoZWNrKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gQ29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgVUludDMyVG9OdW1i
ZXIgaXMgZGVhZCBidXQgaXRzCisgICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkIGlzbid0OyBp
ZiBzbyB0aGVuIHdlIHNob3VsZCBNb3ZIaW50IHRoZSBjaGlsZC4KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2VuZXJhdGUoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpCisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IG5vZGUtPmNoaWxkMSgpLT5jaGls
ZDEoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRH
ZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1
bHRGbGFncyhab21iaWVIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MSgpID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoTW92SGludCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50QW5k
Q2hlY2spOworICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RD
aGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlIHx8IGVkZ2Uud2lsbE5vdEhh
dmVDaGVjaygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIGVkZ2UpOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRv
bVVuY2hlY2tlZCgpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgp
OworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgIGVsaW1pbmF0ZUlycmVsZXZh
bnRQaGFudG9tQ2hpbGRyZW4obm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291
bnQoMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IH0KKyAgICAgICAg
fQorCisgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KKyAgICAK
ICAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpT
aXplOyArK2kpIHsKQEAgLTIxOCw2ICsyMjksNyBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAg
ICBWZWN0b3I8Tm9kZSosIDEyOD4gbV93b3JrbGlzdDsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNl
cnRpb25TZXQ7CiB9OwogCiBib29sIHBlcmZvcm1EQ0UoR3JhcGgmIGdyYXBoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlRG9taW5hdGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlRG9taW5hdGVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRWRnZURvbWluYXRlc19oCisjZGVmaW5lIERGR0Vk
Z2VEb21pbmF0ZXNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgRWRnZURvbWluYXRlcyB7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorcHVibGljOgorICAgIEVkZ2VEb21pbmF0ZXMoR3Jh
cGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQor
ICAgICAgICAsIG1fYmxvY2soYmxvY2spCisgICAgICAgICwgbV9yZXN1bHQodHJ1ZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3IoKShOb2RlKiwgRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMo
ZWRnZS5ub2RlKCktPm1pc2Mub3duZXIsIG1fYmxvY2spOworICAgICAgICBpZiAodmVyYm9zZSkg
eworICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAiQ2hlY2tpbmcgaWYgIiwg
ZWRnZSwgIiBpbiAiLCAqZWRnZS5ub2RlKCktPm1pc2Mub3duZXIsCisgICAgICAgICAgICAgICAg
IiBkb21pbmF0ZXMgIiwgKm1fYmxvY2ssICI6ICIsIHJlc3VsdCwgIlxuIik7CisgICAgICAgIH0K
KyAgICAgICAgbV9yZXN1bHQgJj0gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIHJlc3Vs
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CisKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1f
Z3JhcGg7CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBib29sIG1fcmVzdWx0OworfTsK
KworaW5saW5lIGJvb2wgZWRnZXNEb21pbmF0ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEJh
c2ljQmxvY2sqIGJsb2NrKQoreworICAgIEVkZ2VEb21pbmF0ZXMgZWRnZURvbWluYXRlcyhncmFw
aCwgYmxvY2spOworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCBlZGdl
RG9taW5hdGVzKTsKKyAgICByZXR1cm4gZWRnZURvbWluYXRlcy5yZXN1bHQoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdFZGdlRG9taW5hdGVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI5NTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Mzgs
MTEgKzczOCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgQ3JlYXRlVGhpczogewotICAgICAgICAgICAgc2V0VXNl
S2luZEFuZFVuYm94SWZQcm9maXRhYmxlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogewog
ICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPEludDMyVXNlPihub2Rl
LT5jaGlsZDEoKSk7CkBAIC03NTgsOCArNzUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgY2FzZSBHZXRTY29w
ZToKLSAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKKyAgICAgICAgY2FzZSBHZXRTY29wZTog
ewogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPEtub3duQ2VsbFVz
ZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTgy
Miw3ICs4MTYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CiAgICAg
ICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgotICAgICAgICBj
YXNlIENoZWNrSGFzSW5zdGFuY2U6IHsKKyAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgor
ICAgICAgICBjYXNlIENyZWF0ZVRoaXM6CisgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OiB7CiAg
ICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8Q2VsbFVzZT4obm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyMDQsNyArMTIw
MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAoYXJyYXlNb2RlLnVzZXNCdXR0
ZXJmbHkoKSkgewogICAgICAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHks
IGNvZGVPcmlnaW4sIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgICAg
IG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBFZGdl
KGFycmF5LCBDZWxsVXNlKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTElDTVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZHTElDTVBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxp
bmVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJp
emUuaCIKKyNpbmNsdWRlICJERkdFZGdlRG9taW5hdGVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgor
I2luY2x1ZGUgIkRGR1NhZmVUb0V4ZWN1dGUuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworbmFtZXNwYWNlIHsKKworc3RydWN0
IExvb3BEYXRhIHsKKyAgICBMb29wRGF0YSgpCisgICAgICAgIDogcHJlSGVhZGVyKDApCisgICAg
eworICAgIH0KKyAgICAKKyAgICBDbG9iYmVyU2V0IHdyaXRlczsKKyAgICBCYXNpY0Jsb2NrKiBw
cmVIZWFkZXI7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworY2xhc3MgTElDTVBo
YXNlIDogcHVibGljIFBoYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisgICAgCitwdWJsaWM6CisgICAgTElDTVBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAg
OiBQaGFzZShncmFwaCwgIkxJQ00iKQorICAgICAgICAsIG1faW50ZXJwcmV0ZXIoZ3JhcGgsIG1f
c3RhdGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAg
ICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3Jh
cGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgbV9n
cmFwaC5tX25hdHVyYWxMb29wcy5jb21wdXRlSWZOZWNlc3NhcnkobV9ncmFwaCk7CisgICAgICAg
IAorICAgICAgICBtX2RhdGEucmVzaXplKG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMubnVtTG9vcHMo
KSk7CisgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHRoZSBzZXQgb2YgdGhpbmdzIGVh
Y2ggbG9vcCB3cml0ZXMgdG8sIG5vdCBpbmNsdWRpbmcgYmxvY2tzIHRoYXQKKyAgICAgICAgLy8g
YmVsb25nIHRvIGlubmVyIGxvb3BzLiBXZSBmaXggdGhpcyBsYXRlci4KKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07
KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJ
bmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX2dyYXBoLm1fbmF0dXJh
bExvb3BzLmlubmVyTW9zdExvb3BPZihibG9jayk7CisgICAgICAgICAgICBpZiAoIWxvb3ApCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBMb29wRGF0YSYgZGF0YSA9IG1f
ZGF0YVtsb29wLT5pbmRleCgpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgICAgIGFkZFdyaXRl
cyhtX2dyYXBoLCBibG9jay0+YXQobm9kZUluZGV4KSwgZGF0YS53cml0ZXMpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBGb3IgZWFjaCBsb29wOgorICAgICAgICAvLyAtIElkZW50
aWZ5IGl0cyBwcmUtaGVhZGVyLgorICAgICAgICAvLyAtIE1ha2Ugc3VyZSBpdHMgb3V0ZXIgbG9v
cHMga25vdyB3aGF0IGl0IGNsb2JiZXJzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGxvb3BJbmRl
eCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMubnVtTG9vcHMoKTsgbG9vcEluZGV4LS07KSB7Cisg
ICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9v
cHMubG9vcChsb29wSW5kZXgpOworICAgICAgICAgICAgTG9vcERhdGEmIGRhdGEgPSBtX2RhdGFb
bG9vcC5pbmRleCgpXTsKKyAgICAgICAgICAgIGZvciAoCisgICAgICAgICAgICAgICAgY29uc3Qg
TmF0dXJhbExvb3AqIG91dGVyTG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuaW5uZXJNb3N0
T3V0ZXJMb29wKGxvb3ApOworICAgICAgICAgICAgICAgIG91dGVyTG9vcDsKKyAgICAgICAgICAg
ICAgICBvdXRlckxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmlubmVyTW9zdE91dGVyTG9v
cCgqb3V0ZXJMb29wKSkKKyAgICAgICAgICAgICAgICBtX2RhdGFbb3V0ZXJMb29wLT5pbmRleCgp
XS53cml0ZXMuYWRkQWxsKGRhdGEud3JpdGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QmFzaWNCbG9jayogaGVhZGVyID0gbG9vcC5oZWFkZXIoKTsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHByZUhlYWRlciA9IDA7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBoZWFkZXIt
PnByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3NvciA9IGhlYWRlci0+cHJlZGVjZXNzb3JzW2ldOworICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoaGVhZGVyLCBwcmVkZWNlc3Nvcikp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFwcmVIZWFkZXIgfHwgcHJlSGVhZGVyID09IHByZWRlY2Vzc29yKTsKKyAgICAgICAg
ICAgICAgICBwcmVIZWFkZXIgPSBwcmVkZWNlc3NvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocHJlSGVhZGVyLT5sYXN0KCktPm9wKCkg
PT0gSnVtcCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRhdGEucHJlSGVhZGVyID0gcHJl
SGVhZGVyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmluaXRpYWxpemVO
b2RlT3duZXJzKCk7CisgICAgICAgIAorICAgICAgICAvLyBXYWxrIGFsbCBiYXNpYyBibG9ja3Mg
dGhhdCBiZWxvbmcgdG8gbG9vcHMsIGxvb2tpbmcgZm9yIGhvaXN0aW5nIG9wcG9ydHVuaXRpZXMu
CisgICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IGhvaXN0IHRvIHRoZSBpbm5lci1tb3N0IGJs
b2NrLCBzaW5jZSB0aGF0IHNpbXBsaWZpZXMgQ0ZBCisgICAgICAgIC8vIHJlYXNvbmluZyAoc2Vl
IGJlbG93KS4gSG9pc3RpbmcgaXMgdmFsaWQgaWY6CisgICAgICAgIC8vIC0gVGhlIG5vZGUgZG9l
c24ndCB3cml0ZSBhbnl0aGluZy4KKyAgICAgICAgLy8gLSBUaGUgbm9kZSBkb2Vzbid0IHJlYWQg
YW55dGhpbmcgdGhhdCB0aGUgbG9vcCB3cml0ZXMuCisgICAgICAgIC8vIC0gVGhlIHByZUhlYWRl
cidzIHN0YXRlIGF0IHRhaWwgbWFrZXMgdGhlIG5vZGUgc2FmZSB0byBleGVjdXRlLgorICAgICAg
ICAvLyAtIFRoZSBsb29wJ3MgY2hpbGRyZW4gYWxsIGJlbG9uZyB0byBub2RlcyB0aGF0IHN0cmlj
dGx5IGRvbWluYXRlIHRoZSBsb29wIGhlYWRlci4KKyAgICAgICAgLy8gLSBUaGUgcHJlSGVhZGVy
J3Mgc3RhdGUgYXQgdGFpbCBpcyBzdGlsbCB2YWxpZC4gVGhpcyBpcyBtb3N0bHkgdG8gc2F2ZSBj
b21waWxlCisgICAgICAgIC8vICAgdGltZSBhbmQgcHJlc2VydmUgc29tZSBraW5kIG9mIHNhbml0
eSwgaWYgd2UgaG9pc3Qgc29tZXRoaW5nIHRoYXQgbXVzdCBleGl0LgorICAgICAgICAvLworICAg
ICAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIHJlbWVtYmVyIHRvOgorICAgICAgICAvLyAtIENsZWFy
IE5vZGVFeGl0c0ZvcndhcmQgZm9yIGFueSBub2RlcyB3ZSBob2lzdGVkLgorICAgICAgICAvLyAt
IFVwZGF0ZSB0aGUgc3RhdGUtYXQtdGFpbCB3aXRoIHRoZSBub2RlIHdlIGhvaXN0ZWQsIHNvIGZ1
dHVyZSBob2lzdCBjYW5kaWRhdGVzCisgICAgICAgIC8vICAga25vdyBhYm91dCBhbnkgdHlwZSBj
aGVja3Mgd2UgaG9pc3RlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2Ugb25seSBob2lzdCB0
byBpbm5lci1tb3N0IGxvb3BzLCByaWdodCBub3cuIFRoaXMgaXNuJ3QgYSBzeXN0ZW1pYyBkZWZp
Y2llbmN5OworICAgICAgICAvLyByYXRoZXIgaXQncyBhIGtpbmQgb2Ygc3RvcGdhcCBiZWNhdXNl
IG9mIGluYWRlcXVhdGUgd2lyaW5nIHdpdGggdGhlIENGQS4KKyAgICAgICAgLy8gQ29uc2lkZXIg
dGhlIGNhc2Ugd2hlcmUgeW91IGhhdmUgY29kZSBsaWtlOgorICAgICAgICAvLworICAgICAgICAv
LyBhID0gLi4uCisgICAgICAgIC8vIGkgPSAuLi4KKyAgICAgICAgLy8gbG9vcCB7CisgICAgICAg
IC8vICAgICBiID0gLi4uCisgICAgICAgIC8vICAgICBsb29wIHsKKyAgICAgICAgLy8gICAgICAg
ICBjID0gYVtpXQorICAgICAgICAvLyAgICAgICAgIGQgPSBjICsgYgorICAgICAgICAvLyAgICAg
fQorICAgICAgICAvLyB9CisgICAgICAgIC8vCisgICAgICAgIC8vIEluIHRoYXQgY2FzZSBhZnRl
ciB3ZSBob2lzdCBjLCB3ZSB3aWxsIGhhdmU6CisgICAgICAgIC8vCisgICAgICAgIC8vIGEgPSAu
Li4KKyAgICAgICAgLy8gaSA9IC4uLgorICAgICAgICAvLyBjID0gYVtpXQorICAgICAgICAvLyBs
b29wIHsKKyAgICAgICAgLy8gICAgIGIgPSAuLi4KKyAgICAgICAgLy8gICAgIGxvb3AgeworICAg
ICAgICAvLyAgICAgICAgIGQgPSBjICsgYgorICAgICAgICAvLyAgICAgfQorICAgICAgICAvLyB9
CisgICAgICAgIC8vCisgICAgICAgIC8vIEN1cnJlbnRseSwgdGhlIENGQSBhdCB0aGUgdGFpbCBv
ZiB0aGUgb3V0ZXItbW9zdCBsb29wJ3MgcHJlLWhlYWRlciB3aWxsIGtub3cKKyAgICAgICAgLy8g
YWJvdXQgYiwgYnV0IHRoZSBpbm5lci1tb3N0IGxvb3AncyBwcmUtaGVhZGVyIHdvbid0LiBUaGlz
IHdpbGwgY2F1c2UgdGhlIGhvaXN0CisgICAgICAgIC8vIG9mICdkID0gYyArIGInIHRvIGFzc2Vy
dCBiZWNhdXNlIGl0IHdpbGwgYXR0ZW1wdCB0byBob2lzdCBvdXQgb2YgdGhlIGlubmVyIGxvb3AK
KyAgICAgICAgLy8gYnV0IG5vdCBhbGwgdGhlIHdheSBvdXQgb2YgdGhlIG91dGVyIGxvb3A7IGl0
IHRoZW4gd29uJ3QgZmluZCB0aGUgc3RhdGUgb2YgYyBhdAorICAgICAgICAvLyB0aGUgcHJlLWhl
YWRlciBvZiB0aGUgaW5uZXItbW9zdCBsb29wLiBXZSBnZXQgYXJvdW5kIHRoaXMgYnkgb25seSBo
b2lzdGluZyB0bworICAgICAgICAvLyBpbm5lci1tb3N0IGxvb3BzLiBUaGlzIG91Z2h0IHRvIGJl
IHJlbGF0aXZlbHkgZWFzeSB0byBmaXg7IHdlIGtub3cgdGhhdAorICAgICAgICAvLyBhbnl0aGlu
ZyB3ZSBob2lzdCBjYW5ub3QgaGF2ZSBpdHMgc3RhdGUgY2xvYmJlcmVkLCBzbyB3ZSBjb3VsZCBq
dXN0IGNvcHkgdGhlCisgICAgICAgIC8vIHN0YXRlIGludG8gdGhlIGlubmVyIGxvb3BzLiBCdXQg
Zm9yIG5vdywgd2UganVzdCBkbyB0aGUgY29uc2VydmF0aXZlIHRoaW5nLgorICAgICAgICAvLyBO
b3RlIHRoYXQgd2UgY291bGQgYWxzbyBiZSBzdXBlci1zbGVhenkgYW5kIGp1c3QgcnVuIExJQ00g
dG8gZml4cG9pbnQsIGFuZCBnZXQKKyAgICAgICAgLy8gdGhlIGV4YWN0IHNhbWUgZWZmZWN0Lgor
ICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0OworICAgICAg
ICBtX2dyYXBoLmdldEJsb2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAg
ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICgKKyAgICAgICAgICAgIHVuc2ln
bmVkIGRlcHRoRmlyc3RJbmRleCA9IDA7CisgICAgICAgICAgICBkZXB0aEZpcnN0SW5kZXggPCBk
ZXB0aEZpcnN0LnNpemUoKTsKKyAgICAgICAgICAgICsrZGVwdGhGaXJzdEluZGV4KSB7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtkZXB0
aEZpcnN0SW5kZXhdOworICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX2dy
YXBoLm1fbmF0dXJhbExvb3BzLmlubmVyTW9zdExvb3BPZihibG9jayk7CisgICAgICAgICAgICBp
ZiAoIWxvb3ApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAg
ICAgICAgICAgICAgIkF0dGVtcHRpbmcgdG8gaG9pc3Qgb3V0IG9mIGJsb2NrICIsICpibG9jaywg
IiBpbiAiLCAqbG9vcCwgIiwgd2hpY2ggd3JpdGVzICIsCisgICAgICAgICAgICAgICAgICAgIG1f
ZGF0YVtsb29wLT5pbmRleCgpXS53cml0ZXMsICJcbiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSom
IG5vZGVSZWYgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoZG9l
c1dyaXRlcyhtX2dyYXBoLCBub2RlUmVmKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBOb3QgaG9pc3Rpbmcg
Iiwgbm9kZVJlZiwgIiBiZWNhdXNlIGl0IHdyaXRlcyB0aGluZ3MuXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBhdHRlbXB0SG9pc3QoYmxvY2ssIG5vZGVSZWYsIGxvb3ApOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgYm9vbCBhdHRlbXB0SG9pc3QoQmFzaWNCbG9jayogZnJvbUJsb2Nr
LCBOb2RlKiYgbm9kZVJlZiwgY29uc3QgTmF0dXJhbExvb3AqIGxvb3ApCisgICAgeworICAgICAg
ICBOb2RlKiBub2RlID0gbm9kZVJlZjsKKyAgICAgICAgTG9vcERhdGEmIGRhdGEgPSBtX2RhdGFb
bG9vcC0+aW5kZXgoKV07CisgICAgICAgIAorICAgICAgICBpZiAoIWRhdGEucHJlSGVhZGVyLT5j
ZmFEaWRGaW5pc2gpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIENGQSBpcyBpbnZh
bGlkLlxuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmICghZWRnZXNEb21pbmF0ZShtX2dyYXBoLCBub2RlLCBkYXRhLnByZUhlYWRl
cikpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxv
ZygKKyAgICAgICAgICAgICAgICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNh
dXNlIGl0IGlzbid0IGxvb3AgaW52YXJpYW50LlxuIik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZWFk
c092ZXJsYXAobV9ncmFwaCwgbm9kZSwgZGF0YS53cml0ZXMpKSB7CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAg
ICIgICAgTm90IGhvaXN0aW5nICIsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICIgYmVjYXVz
ZSBpdCByZWFkcyB0aGluZ3MgdGhhdCB0aGUgbG9vcCB3cml0ZXMuXG4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oZGF0YS5wcmVIZWFkZXIpOworICAgICAgICBpZiAoIXNh
ZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpIHsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAg
IiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0IHNhZmUgdG8gZXhl
Y3V0ZS5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0
YUxvZygKKyAgICAgICAgICAgICAgICAiICAgIEhvaXN0aW5nICIsIG5vZGUsICIgZnJvbSAiLCAq
ZnJvbUJsb2NrLCAiIHRvICIsICpkYXRhLnByZUhlYWRlciwKKyAgICAgICAgICAgICAgICAiXG4i
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGF0YS5wcmVIZWFkZXItPmluc2VydEJl
Zm9yZUxhc3Qobm9kZSk7CisgICAgICAgIG5vZGUtPm1pc2Mub3duZXIgPSBkYXRhLnByZUhlYWRl
cjsKKyAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKKyAgICAgICAg
bm9kZS0+Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBkYXRhLnByZUhlYWRlci0+bGFzdCgpLT5j
b2RlT3JpZ2luRm9yRXhpdFRhcmdldDsKKyAgICAgICAgCisgICAgICAgIC8vIE1vZGlmeSB0aGUg
c3RhdGUgYXQgdGhlIGVuZCBvZiB0aGUgcHJlSGVhZGVyIGluIHBsYWNlIHRvIHJlZmxlY3QgdGhh
dCB3ZQorICAgICAgICAvLyBob2lzdGVkIHNvbWV0aGluZywgc2luY2Ugd2UgbWlnaHQgaGF2ZSBo
b2lzdGVkIGEgdHlwZSBjaGVjay4KKyAgICAgICAgdW5zaWduZWQgaW5kZXhJbkJsb2NrID0gZGF0
YS5wcmVIZWFkZXItPnNpemUoKSAtIDI7CisgICAgICAgIEFTU0VSVChkYXRhLnByZUhlYWRlci0+
YXQoaW5kZXhJbkJsb2NrKSA9PSBub2RlKTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRl
KGluZGV4SW5CbG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBJdCBqdXN0IHNvIGhhcHBlbnMg
dGhhdCBhbGwgb2YgdGhlIG5vZGVzIHdlIGN1cnJlbnRseSBrbm93IGhvdyB0byBob2lzdAorICAg
ICAgICAvLyBkb24ndCBoYXZlIHZhci1hcmcgY2hpbGRyZW4uIFRoYXQgbWF5IGNoYW5nZSBhbmQg
dGhlbiB3ZSBjYW4gZml4IHRoaXMKKyAgICAgICAgLy8gY29kZS4gQnV0IGZvciBub3cgd2UganVz
dCBhc3NlcnQgdGhhdCdzIHRoZSBjYXNlLgorICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG5vZGUt
PmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykpOworICAgICAgICAKKyAgICAgICAgbm9kZVJlZiA9
IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9k
ZS0+Y2hpbGRyZW4pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIEF0VGFpbEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKKyAgICBBYnN0cmFjdEludGVycHJl
dGVyPEF0VGFpbEFic3RyYWN0U3RhdGU+IG1faW50ZXJwcmV0ZXI7CisgICAgVmVjdG9yPExvb3BE
YXRhPiBtX2RhdGE7Cit9OworCitib29sIHBlcmZvcm1MSUNNKEdyYXBoJiBncmFwaCkKK3sKKyAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIExJQ00gUGhhc2UiKTsKKyAgICBy
ZXR1cm4gcnVuUGhhc2U8TElDTVBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdMSUNNUGhhc2VfaAorI2RlZmluZSBERkdMSUNNUGhhc2VfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gRG9lcyBsb29wLWludmFyaWFu
dCBjb2RlIG1vdGlvbiwgb3IgTElDTSBmb3Igc2hvcnQuIFRoaXMgb25seSBob2lzdHMgY29kZQor
Ly8gYW5kIG5ldmVyIHNpbmtzIGFueXRoaW5nLiBBIG5vZGUgaXMgaG9pc3RlZCBpZiBpdCBkb2Vz
IG5vIHdyaXRlcywgYW5kIGlmCisvLyBpdHMgcmVhZHMgZG9uJ3Qgb3ZlcmxhcCB0aGUgbG9vcCdz
IHdyaXRlcy4KKworYm9vbCBwZXJmb3JtTElDTShHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xJ
Q01QaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2
aXNpb24gMTUyOTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkRGR0ZsdXNoTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgogI2luY2x1ZGUg
IkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHTElDTVBoYXNlLmgiCiAjaW5jbHVkZSAi
REZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHTG9vcFByZUhlYWRlckNy
ZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmgiCkBAIC0yMDgsNiArMjA5LDkgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBp
bGVJblRocgogICAgICAgICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOwogICAgICAgICBwZXJm
b3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwogICAgICAgICBwZXJmb3JtQ0ZBKGRmZyk7CisgICAg
ICAgIHBlcmZvcm1MSUNNKGRmZyk7CisgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRm
Zyk7CisgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOyAv
LyBXZSByZWx5IG9uIHRoaXMgdG8gY29udmVydCBkZWFkIFNldExvY2FscyBpbnRvIHRoZSBhcHBy
b3ByaWF0ZSBoaW50LCBhbmQgdG8ga2lsbCBkZWFkIGNvZGUgdGhhdCB3b24ndCBiZSByZWNvZ25p
emVkIGFzIGRlYWQgYnkgTExWTS4KICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZn
KTsKICAgICAgICAgcGVyZm9ybUZsdXNoTGl2ZW5lc3NBbmFseXNpcyhkZmcpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207286</attachid>
            <date>2013-07-22 15:22:05 -0700</date>
            <delta_ts>2013-07-22 17:56:18 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58749</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzMDA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDEzLTA3LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBkbyBhIGhpZ2gtbGV2ZWwgTElDTSBiZWZvcmUgZ29pbmcg
dG8gRlRMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTg3NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIEltcGxlbWVudHMgTElDTSBob2lzdGluZyBmb3Igbm9kZXMgdGhhdCBuZXZlciB3cml0
ZSBhbnl0aGluZyBhbmQgbmV2ZXIgcmVhZAorICAgICAgICB0aGluZ3MgdGhhdCBhcmUgY2xvYmJl
cmVkIGJ5IHRoZSBsb29wLiBUaGVyZSBhcmUgc29tZSBvdGhlciBwcmVjb25kaXRpb25zIGZvcgor
ICAgICAgICBob2lzdGluZywgc2VlIERGR0xJQ01QaGFzZS5jcHAuCisKKyAgICAgICAgQWxzbyBk
aWQgYSBmZXcgZml4ZXM6CisgICAgICAgIAorICAgICAgICAtIENsb2JiZXJTZXQ6OmFkZCB3YXMg
ZmFpbGluZyB0byBzd2l0Y2ggU3VwZXIgZW50cmllcyB0byBEaXJlY3QgZW50cmllcyBpbgorICAg
ICAgICAgIHNvbWUgY2FzZXMuCisgICAgICAgIAorICAgICAgICAtIERGR0Nsb2JiZXJpemUuY3Bw
IG5lZWRlZCB0byAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIi4KKyAgICAgICAgCisgICAgICAgIC0g
RENFUGhhc2UgbmVlZHMgdG8gcHJvY2VzcyB0aGUgZ3JhcGggaW4gcmV2ZXJzZSBERlMgb3JkZXIs
IHdoZW4gd2UncmUgaW4gU1NBLgorICAgICAgICAKKyAgICAgICAgLSBBYnN0cmFjdEludGVycHJl
dGVyIGNhbiBub3cgZXhlY3V0ZSBhIE5vZGUgd2l0aG91dCBrbm93aW5nIGl0cyBpbmRleEluQmxv
Y2suCisgICAgICAgICAgS25vd2luZyB0aGUgaW5kZXhJbkJsb2NrIGlzIGFuIG9wdGlvbmFsIG9w
dGltaXphdGlvbiB0aGF0IGFsbCBvdGhlciBjbGllbnRzCisgICAgICAgICAgb2YgQUkgc3RpbGwg
b3B0IGludG8sIGJ1dCBMSUNNIGRvZXNuJ3QuCisgICAgICAgIAorICAgICAgICBUaGlzIG1ha2Vz
IHRoZSBGVEwgYSAyLjE5eCBzcGVlZC11cCBvbiBpbWFnaW5nLWdhdXNzaWFuLWJsdXIuCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmg6CisgICAgICAgIChBYnN0cmFjdEludGVy
cHJldGVyKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjo6OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZH
Ojo6OmV4ZWN1dGUpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjo6OmNsb2Ji
ZXJXb3JsZCk6CisgICAgICAgIChKU0M6OkRGRzo6OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAg
ICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6QXRUYWlsQWJzdHJh
Y3RTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6fkF0VGFp
bEFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6
OmNyZWF0ZVZhbHVlRm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoQXRUYWlsQWJzdHJhY3RTdGF0ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZVRvKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpmb3JOb2RlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjp2YXJpYWJsZXMpOgorICAgICAgICAoSlND
OjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpB
dFRhaWxBYnN0cmFjdFN0YXRlOjppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxB
YnN0cmFjdFN0YXRlOjpzZXREaWRDbG9iYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxB
YnN0cmFjdFN0YXRlOjpzZXRJc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0
cmFjdFN0YXRlOjpzZXRCcmFuY2hEaXJlY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFp
bEFic3RyYWN0U3RhdGU6OnNldEZvdW5kQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpB
dFRhaWxBYnN0cmFjdFN0YXRlOjpoYXZlU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
QXRUYWlsQWJzdHJhY3RTdGF0ZTo6c2V0SGF2ZVN0cnVjdHVyZXMpOgorICAgICAgICAqIGRmZy9E
RkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6aW5zZXJ0QmVm
b3JlTGFzdCk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpDbG9iYmVyU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6OmFk
ZEFsbCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmRvZXNXcml0ZXMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAg
IChERkcpOgorICAgICAgICAqIGRmZy9ERkdEQ0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6RENFUGhhc2U6OkRDRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6Zml4dXBCbG9jayk6CisgICAgICAgIChE
Q0VQaGFzZSk6CisgICAgICAgICogZGZnL0RGR0VkZ2VEb21pbmF0ZXMuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAoRWRnZURvbWluYXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
RWRnZURvbWluYXRlczo6RWRnZURvbWluYXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZURv
bWluYXRlczo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZURvbWluYXRlczo6
cmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjplZGdlc0RvbWluYXRlKToKKyAgICAgICAgKiBk
ZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4
dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpjaGVja0FycmF5KToKKyAg
ICAgICAgKiBkZmcvREZHTElDTVBoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChMSUNNUGhhc2Up
OgorICAgICAgICAoSlNDOjpERkc6OkxJQ01QaGFzZTo6TElDTVBoYXNlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpMSUNNUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNlOjph
dHRlbXB0SG9pc3QpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3Jt
TElDTSk6CisgICAgICAgICogZGZnL0RGR0xJQ01QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46
OmNvbXBpbGVJblRocmVhZEltcGwpOgorCiAyMDEzLTA3LTIxICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogREZHIE5vZGVzIHNob3VsZCBiZSBh
YmxlIHRvIGFic3RyYWN0bHkgdGVsbCB5b3Ugd2hhdCB0aGV5IHJlYWQgYW5kIHdoYXQgdGhleSB3
cml0ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1Mjk4NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zODQsNiArMzg0LDExIEBACiAJCTBGRTUwNUEy
MTc5QjYwRUQwMEIzNUY4QyAvKiBGVExGYWlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUEwMTc5QjYwRUQwMEIzNUY4QyAvKiBGVExGYWls
LmNwcCAqLzsgfTsKIAkJMEZFNTA1QTMxNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUExMTc5QjYw
RUQwMEIzNUY4QyAvKiBGVExGYWlsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZFNTA1QTUxNzlDRTNFQzAwQjM1RjhDIC8qIERGR0Nsb2JiZXJp
emUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
NTA1QTQxNzlDRTNFQzAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUuY3BwICovOyB9OworCQkwRkU1
MDVBQjE3OUNFQzA4MDBCMzVGOEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDVBNjE3OUNFQzA4
MDBCMzVGOEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CisJCTBGRTUwNUFD
MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDVBNzE3OUNFQzA4MDBCMzVG
OEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNUFEMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdF
ZGdlRG9taW5hdGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkU1MDVBODE3OUNFQzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNUFFMTc5
Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QTkxNzlDRUMwODAwQjM1RjhDIC8qIERGR0xJ
Q01QaGFzZS5jcHAgKi87IH07CisJCTBGRTUwNUFGMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNN
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTUwNUFBMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4NTM0QjE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyog
REZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZFQTBBMDgxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwOUZEMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NDYsNiArMTQ1MSwxMSBAQAogCQkwRkU1MDVBMDE3
OUI2MEVEMDBCMzVGOEMgLyogRlRMRmFpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExGYWlsLmNwcDsgcGF0aCA9IGZ0bC9GVExGYWlsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1QTExNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRmFpbC5oOyBwYXRoID0gZnRs
L0ZUTEZhaWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1QTQxNzlDRTNF
QzAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHQ2xvYmJlcml6ZS5jcHA7IHBhdGggPSBkZmcvREZHQ2xvYmJlcml6ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNUE2MTc5Q0VDMDgwMEIzNUY4
QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwOyBwYXRoID0gZGZnL0RGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1
MDVBNzE3OUNFQzA4MDBCMzVGOEMgLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmg7IHBhdGgg
PSBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkU1MDVBODE3OUNFQzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlRG9taW5hdGVzLmg7IHBhdGggPSBk
ZmcvREZHRWRnZURvbWluYXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1
MDVBOTE3OUNFQzA4MDBCMzVGOEMgLyogREZHTElDTVBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xJQ01QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTElD
TVBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1QUExNzlDRUMw
ODAwQjM1RjhDIC8qIERGR0xJQ01QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdMSUNNUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMSUNNUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2
MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEZUTEFiYnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDI2LDYgKzMwMzYsOCBAQAogCQkJ
CTBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLywKIAkJCQkwRkMw
OTc2QjE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkw
RkMwOTc2QzE0NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8sCisJCQkJ
MEZFNTA1QTYxNzlDRUMwODAwQjM1RjhDIC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwICov
LAorCQkJCTBGRTUwNUE3MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmggKi8sCiAJCQkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdC
YWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8sCiAJCQkJMEZFNTA1NjIxNzhGNUIwNTAwQjM1
RjhDIC8qIERGR0Jhc2ljQmxvY2suY3BwICovLApAQCAtMzA3OSw2ICszMDkxLDcgQEAKIAkJCQkw
RkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8sCiAJCQkJMEZCNEI1MUIx
NkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0VkZ2UuY3BwICovLAogCQkJCTBGNjZFMTY5MTRERjNGMTMw
MEI3QjJFNCAvKiBERkdFZGdlLmggKi8sCisJCQkJMEZFNTA1QTgxNzlDRUMwODAwQjM1RjhDIC8q
IERGR0VkZ2VEb21pbmF0ZXMuaCAqLywKIAkJCQkwRkU1MDU5MjE3OUE2MDQ1MDBCMzVGOEMgLyog
REZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCAqLywKIAkJCQkwRkRCMkNEMTE3NDJEODA0MDA3QjNDMUIg
LyogREZHRmFpbGVkRmluYWxpemVyLmNwcCAqLywKIAkJCQkwRkRCMkNEMjE3NDJEODA0MDA3QjND
MUIgLyogREZHRmFpbGVkRmluYWxpemVyLmggKi8sCkBAIC0zMTA3LDYgKzMxMjAsOCBAQAogCQkJ
CTBGREIyQ0Q2MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdKSVRGaW5hbGl6ZXIuaCAqLywKIAkJCQkw
RjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovLAogCQkJCTBG
NDZFNkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5oICovLAorCQkJCTBGRTUw
NUE5MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuY3BwICovLAorCQkJCTBGRTUwNUFB
MTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuaCAqLywKIAkJCQkwRkU1MDU2QjE3OEY1
QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCAqLywKIAkJCQkwRkU1
MDU2QzE3OEY1QjUzMDBCMzVGOEMgLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggKi8sCiAJ
CQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmNwcCAqLywK
QEAgLTM1OTgsNiArMzYxMyw3IEBACiAJCQkJQkMxOEM0MTAwRTE2RjVDRDAwQjM0NDYwIC8qIElu
aXRpYWxpemVUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTFGMTcwOEIwMDcw
MEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NjlBMDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRTUwNUFDMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJu
YWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNTA1OUQxNzlCMEY3MjAwQjM1RjhD
IC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMw
MEI4OTYxOSAvKiBJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjA1LDYgKzM2MjEs
NyBAQAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDEzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENv
cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNUFGMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdM
SUNNUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ5MzAwRUQy
MkQ3MDAwQjg5NjE5IC8qIEpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRDQxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODUxLDYg
KzM4NjgsNyBAQAogCQkJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0
eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNENBOTU4QjE2QUI1MERFMDA5MzhBMDYg
LyogU3RhdGljUHJvcGVydHlBbmFseXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2N0RCOTMx
NzUxOUI0QTAwNkE4MTRGIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkU1MDVBRDE3OUNFQzA4MDBCMzVGOEMgLyogREZHRWRnZURvbWluYXRlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5n
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtNDM4OSw2ICs0NDA3LDcgQEAK
IAkJCQkwRkZGQzk1RjE0RUY5MEJCMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2Nh
dGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzcwMTY1REJCOTAwMDVBRDM4
NyAvKiBEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzcxMDdFQzM3
NjAwNDI3QTQ4IC8qIEVycm9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNUFFMTc5Q0VD
MDgwMEIzNUY4QyAvKiBERkdMSUNNUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5
QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0ExMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDQ5Miw2ICs0NTExLDcgQEAKIAkJCQkxNEJENUEzMjBB
M0U5MUY2MDBCQUY1OUMgLyogSlNWYWx1ZVJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlENzEwN0VDMzc2MDA0MjdBNDggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkUzQzYxQzE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSBp
biBTb3VyY2VzICovLAorCQkJCTBGRTUwNUFCMTc5Q0VDMDgwMEIzNUY4QyAvKiBERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNC
MDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTUyOTg3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5
LDYgKzg5LDcgQEAgcHVibGljOgogICAgIC8vIH0gZWxzZQogICAgIC8vICAgICByZXN1bHQgPSB0
cnVlOwogICAgIGJvb2wgZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIGJvb2wg
ZXhlY3V0ZShOb2RlKik7CiAgICAgCiAgICAgLy8gSW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGV4ZWN1
dGlvbiBvZiB0aGUgbm9kZS4gSXQgcmVzZXRzIGFueSBzdGF0ZSBpbiB0aGUgbm9kZSwKICAgICAv
LyB0aGF0IGlzIHByb2dyZXNzaXZlbHkgYnVpbHQgdXAgYnkgZXhlY3V0ZUVkZ2VzKCkgYW5kIGV4
ZWN1dGVFZmZlY3RzKCkuIEluCkBAIC0xMTQsNyArMTE1LDcgQEAgcHVibGljOgogICAgIC8vIEFi
c3RyYWN0bHkgZXhlY3V0ZSB0aGUgZWZmZWN0cyBvZiB0aGUgZ2l2ZW4gbm9kZS4gVGhpcyBjaGFu
Z2VzIHRoZSBhYnN0cmFjdAogICAgIC8vIHN0YXRlIGFzc3VtaW5nIHRoYXQgZWRnZXMgaGF2ZSBh
bHJlYWR5IGJlZW4gZmlsdGVyZWQuCiAgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBp
bmRleEluQmxvY2spOwotICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJs
b2NrLCBOb2RlKik7CisgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGlt
aXQsIE5vZGUqKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNTI5ODcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMo
dW5zaWduZWQgaW5kZXhJbkJsb2NrLCBOb2RlKiBub2RlKQorYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxp
bWl0LCBOb2RlKiBub2RlKQogewogICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKQogICAgICAgICB2
ZXJpZnlFZGdlcyhub2RlKTsKQEAgLTMzMiw3ICszMzIsNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gVmFsdWVBZGQpOwot
ICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgY2xvYmJlckxpbWl0
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjU3RyaW5nIHwgU3BlY0lu
dDMyIHwgU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNzYy
LDcgKzc2Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpT
dHJpbmc6CkBAIC03NzcsNyArNzc3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIC8vIGltcGxpZXMgYW4gaW4tYm91bmRzIGFjY2Vz
cykuIE5vbmUgb2YgdGhpcyBmZWVscyBsaWtlIGl0J3Mgd29ydGggaXQsCiAgICAgICAgICAgICAg
ICAgLy8gc28gd2UncmUgZ29pbmcgd2l0aCBUT1AgZm9yIG5vdy4gVGhlIHNhbWUgdGhpbmcgYXBw
bGllcyB0bwogICAgICAgICAgICAgICAgIC8vIGNsb2JiZXJpbmcgdGhlIHdvcmxkLgotICAgICAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwor
ICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBjbG9iYmVyTGlt
aXQpOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9n
cmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CkBAIC03ODcsMTQgKzc4NywxNCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNEb3VibGUpOwpAQCAtODA1LDcgKzgwNSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OgogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBj
bG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgY2xvYmJlckxpbWl0KTsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKQEAgLTg1MywyNCArODUzLDI0IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0
SXNWYWxpZChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6
R2VuZXJpYzoKLSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGNs
b2JiZXJMaW1pdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50
MzI6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQot
ICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxv
Y2spOworICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBjbG9i
YmVyTGltaXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCi0g
ICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGNsb2Ji
ZXJMaW1pdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBjbG9i
YmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAg
ICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgY2xvYmJlckxpbWl0KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCkpCi0gICAgICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Cisg
ICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGNsb2JiZXJMaW1p
dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtODgwLDEzICs4ODAsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdp
biwgY2xvYmJlckxpbWl0KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNOdW1i
ZXIpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQb3A6CiAg
ICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+
Y29kZU9yaWdpbiwgY2xvYmJlckxpbWl0KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9w
KCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC05NjcsNyArOTY3LDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBUb1ByaW1p
dGl2ZSB3aWxsIGN1cnJlbnRseSBmb3JnZXQgc3RyaW5nIGNvbnN0YW50cy4gQnV0IHRoYXQncyBu
b3QgYSBiaWcKICAgICAgICAgLy8gZGVhbCBzaW5jZSB3ZSBkb24ndCBkbyBhbnkgb3B0aW1pemF0
aW9uIG9uIHRob3NlIGN1cnJlbnRseS4KICAgICAgICAgCi0gICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+Y29kZU9yaWdpbiwgY2xvYmJlckxpbWl0KTsKICAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHR5cGUgPSBzb3VyY2UubV90eXBlOwogICAgICAgICBpZiAodHlwZSAmIH4oU3BlY051
bWJlciB8IFNwZWNTdHJpbmcgfCBTcGVjQm9vbGVhbikpIHsKQEAgLTk5NSw3ICs5OTUsNyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDZWxsVXNlOgogICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAg
ICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBjbG9iYmVyTGltaXQpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTEwNiw3ICsxMTA2LDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5n
dGhTYWZlOgogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1
cmVzIGlmIHRoZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0
YWxsZWQgb24gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KLSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
PmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5j
b2RlT3JpZ2luLCBjbG9iYmVyTGltaXQpOwogICAgICAgICAvLyBXZSBjdXJyZW50bHkgbWFrZSBu
byBndWFyYW50ZWUgYWJvdXQgd2hhdCB0aGlzIHJldHVybnMgYmVjYXVzZSBpdCBkb2VzIG5vdAog
ICAgICAgICAvLyBzcGVjdWxhdGUgdGhhdCB0aGUgbGVuZ3RoIHByb3BlcnR5IGlzIGFjdHVhbGx5
IGEgbGVuZ3RoLgogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKQEAgLTExMjQsNyAr
MTEyNCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBj
bG9iYmVycyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhh
cwogICAgICAgICAvLyBhIGdldHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4K
LSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7Cisg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBjbG9iYmVyTGltaXQpOwogICAg
ICAgICAvLyBBbmQgdGhlIHJlc3VsdCBpcyB1bmtub3duLgogICAgICAgICBmb3JOb2RlKG5vZGUp
Lm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMjAxLDcgKzEyMDEsNyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3Jp
Z2luLCBpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdp
biwgY2xvYmJlckxpbWl0KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMjcwLDcgKzEyNzAsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAg
ICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgogICAgICAgICBpZiAoIWZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSkgewotICAgICAgICAg
ICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAg
ICAgICAgfQpAQCAtMTM0Miw3ICsxMzQyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkuY29udmVyc2lv
bigpID09IEFycmF5OjpDb252ZXJ0CiAgICAgICAgICAgICB8fCBub2RlLT5hcnJheU1vZGUoKS5j
b252ZXJzaW9uKCkgPT0gQXJyYXk6OlJhZ2VDb252ZXJ0KTsKICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKICAgICAgICAgZmlsdGVyQXJy
YXlNb2Rlcyhub2RlLT5jaGlsZDEoKSwgbm9kZS0+YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQ
YXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUp
OwogICAgICAgICBicmVhazsKQEAgLTEzNTQsNyArMTM1NCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIHx8IHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAg
ICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CisgICAgICAgIGNsb2JiZXJTdHJ1
Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKICAgICAg
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgYnJlYWs7CkBAIC0x
NDAxLDIwICsxNDAxLDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1
cmVzKGNsb2JiZXJMaW1pdCk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuc2V0KG1fZ3JhcGgsIHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2lu
LCBpbmRleEluQmxvY2spOworICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
Y2xvYmJlckxpbWl0KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgSW46CiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdoZW4gdGhlIHByb3BlcnR5IGRlZmlu
aXRlbHkgZXhpc3RzIGJhc2VkIG9uIGFic3RyYWN0CiAgICAgICAgIC8vIHZhbHVlIGluZm9ybWF0
aW9uLgotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2Nr
KTsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGNsb2JiZXJMaW1pdCk7
CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCkBAIC0xNDYyLDcgKzE0NjIsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3Ry
dWN0OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSku
bWFrZVRvcCgpOwogICAgICAgICBicmVhazsKIApAQCAtMTUwNiwxMSArMTUwNiwyMSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEFic3RyYWN0U3RhdGVUeXBlPgorYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZShOb2RlKiBub2RlKQoreworICAgIGlmICghc3RhcnRFeGVjdXRp
bmcobm9kZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGV4ZWN1dGVFZGdlcyhu
b2RlKTsKKyAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoVUlOVF9NQVgsIG5vZGUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIHZvaWQgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJXb3JsZCgKLSAgICBjb25zdCBDb2RlT3Jp
Z2luJiBjb2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2spCisgICAgY29uc3QgQ29kZU9y
aWdpbiYgY29kZU9yaWdpbiwgdW5zaWduZWQgY2xvYmJlckxpbWl0KQogewogICAgIGNsb2JiZXJD
YXB0dXJlZFZhcnMoY29kZU9yaWdpbik7Ci0gICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJs
b2NrKTsKKyAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KQEAgLTE1MzcsMTEgKzE1NDcsMTYgQEAgdm9p
ZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGluZGV4SW5CbG9jaykKK3Zv
aWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJTdHJ1Y3R1
cmVzKHVuc2lnbmVkIGNsb2JiZXJMaW1pdCkKIHsKICAgICBpZiAoIW1fc3RhdGUuaGF2ZVN0cnVj
dHVyZXMoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleEluQmxv
Y2sgKyAxOyBpLS07KQorICAgIGlmIChjbG9iYmVyTGltaXQgPj0gbV9zdGF0ZS5ibG9jaygpLT5z
aXplKCkpCisgICAgICAgIGNsb2JiZXJMaW1pdCA9IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpOwor
ICAgIGVsc2UKKyAgICAgICAgY2xvYmJlckxpbWl0Kys7CisgICAgQVNTRVJUKGNsb2JiZXJMaW1p
dCA8PSBtX3N0YXRlLmJsb2NrKCktPnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IGNsb2Ji
ZXJMaW1pdDsgaS0tOykKICAgICAgICAgZm9yTm9kZShtX3N0YXRlLmJsb2NrKCktPmF0KGkpKS5j
bG9iYmVyU3RydWN0dXJlcygpOwogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKICAg
ICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0YXRlLmJsb2NrKCktPnNz
YS0+bGl2ZUF0SGVhZC5iZWdpbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitBdFRhaWxBYnN0
cmFjdFN0YXRlOjpBdFRhaWxBYnN0cmFjdFN0YXRlKCkKKyAgICA6IG1fYmxvY2soMCkKK3sKK30K
KworQXRUYWlsQWJzdHJhY3RTdGF0ZTo6fkF0VGFpbEFic3RyYWN0U3RhdGUoKSB7IH0KKwordm9p
ZCBBdFRhaWxBYnN0cmFjdFN0YXRlOjpjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZSogbm9kZSkKK3sK
KyAgICBtX2Jsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbC5hZGQobm9kZSwgQWJzdHJhY3RWYWx1ZSgp
KTsKK30KKworQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZShOb2Rl
KiBub2RlKQoreworICAgIEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+OjppdGVyYXRvciBp
dGVyID0gbV9ibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuZmluZChub2RlKTsKKyAgICBBU1NFUlQo
aXRlciAhPSBtX2Jsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbC5lbmQoKSk7CisgICAgcmV0dXJuIGl0
ZXItPnZhbHVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHQXRUYWlsQWJzdHJhY3RTdGF0ZV9oCisjZGVmaW5lIERGR0F0VGFpbEFi
c3RyYWN0U3RhdGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJERkdC
YXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeyAKKworY2xhc3MgQXRUYWlsQWJzdHJhY3RTdGF0ZSB7CitwdWJsaWM6Cisg
ICAgQXRUYWlsQWJzdHJhY3RTdGF0ZSgpOworICAgIAorICAgIH5BdFRhaWxBYnN0cmFjdFN0YXRl
KCk7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplVG8oQmFzaWNCbG9jayogYmxvY2spCisgICAg
eworICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgfQorICAgIAorICAgIHZvaWQgY3JlYXRl
VmFsdWVGb3JOb2RlKE5vZGUqKTsKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqKTsK
KyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkgeyByZXR1cm4gZm9yTm9kZShl
ZGdlLm5vZGUoKSk7IH0KKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkg
eyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsOyB9CisgICAgCisgICAgQmFzaWNCbG9jayog
YmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlk
KCkgeyByZXR1cm4gbV9ibG9jay0+Y2ZhRGlkRmluaXNoOyB9CisgICAgCisgICAgdm9pZCBzZXRE
aWRDbG9iYmVyKGJvb2wpIHsgfQorICAgIHZvaWQgc2V0SXNWYWxpZChib29sIGlzVmFsaWQpIHsg
bV9ibG9jay0+Y2ZhRGlkRmluaXNoID0gaXNWYWxpZDsgfQorICAgIHZvaWQgc2V0QnJhbmNoRGly
ZWN0aW9uKEJyYW5jaERpcmVjdGlvbikgeyB9CisgICAgdm9pZCBzZXRGb3VuZENvbnN0YW50cyhi
b29sKSB7IH0KKyAgICBib29sIGhhdmVTdHJ1Y3R1cmVzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fSAvLyBJdCdzIGFsd2F5cyBzYWZlIHRvIHJldHVybiB0cnVlLgorICAgIHZvaWQgc2V0SGF2ZVN0
cnVjdHVyZXMoYm9vbCkgeyB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHQXRUYWlsQWJzdHJhY3RTdGF0ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNTI5ODcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNiArNjIsMTEgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2lj
QmxvYwogICAgIHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSkgeyBtX25vZGVzLmdyb3coc2l6ZSk7IH0K
ICAgICAKICAgICB2b2lkIGFwcGVuZChOb2RlKiBub2RlKSB7IG1fbm9kZXMuYXBwZW5kKG5vZGUp
OyB9CisgICAgdm9pZCBpbnNlcnRCZWZvcmVMYXN0KE5vZGUqIG5vZGUpCisgICAgeworICAgICAg
ICBhcHBlbmQobGFzdCgpKTsKKyAgICAgICAgYXQoc2l6ZSgpIC0gMikgPSBub2RlOworICAgIH0K
ICAgICAKICAgICBzaXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBwaGlzLnNpemUoKSAr
IHNpemUoKTsgfQogICAgIE5vZGUqIG5vZGUoc2l6ZV90IGkpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lv
biAxNTI5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IGlu
bGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBlbmROb25UZXJtaW5hbChHcmFwaCYgZ3JhcGgsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAogICAgIHsg
XAogICAgICAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHR5cGUgdmFsdWVQYXJhbXND
b21tYSB2YWx1ZUFyZ3MpOyBcCi0gICAgICAgIGFwcGVuZChsYXN0KCkpOyBcCi0gICAgICAgIGF0
KHNpemUoKSAtIDIpID0gcmVzdWx0OyBcCisgICAgICAgIGluc2VydEJlZm9yZUxhc3QocmVzdWx0
KTsgXAogICAgICAgICByZXR1cm4gcmVzdWx0OyBcCiAgICAgfQogICAgIERGR19WQVJJQURJQ19U
RU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuY3BwCShyZXZpc2lvbiAxNTI5ODcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw3ICs0MCw3IEBAIENsb2JiZXJTZXQ6On5DbG9iYmVyU2V0KCkgeyB9CiB2b2lk
IENsb2JiZXJTZXQ6OmFkZChBYnN0cmFjdEhlYXAgaGVhcCkKIHsKICAgICBIYXNoTWFwPEFic3Ry
YWN0SGVhcCwgYm9vbD46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2Nsb2JiZXJzLmFkZChoZWFwLCB0
cnVlKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KSB7CiAgICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gdHJ1ZTsKQEAgLTYw
LDYgKzYwLDkgQEAgdm9pZCBDbG9iYmVyU2V0OjphZGRBbGwoY29uc3QgQ2xvYmJlclNldAogICAg
IC8vIElmIHRoZSBvdGhlciBoZWFwIGhhcyBhIHN1cGVyIGhlYXAsIHdlIG1ha2Ugc3VyZSBpdCdz
IHByZXNlbnQgYnV0IGRvbid0CiAgICAgLy8gbW9kaWZ5IGl0cyB2YWx1ZSAtIHNvIHdlIGhhZCBp
dCBkaXJlY3RseSBhbHJlYWR5IHRoZW4gdGhpcyBkb2Vzbid0IGNoYW5nZS4KICAgICAKKyAgICBp
ZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKICAgICBIYXNoTWFwPEFi
c3RyYWN0SGVhcCwgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBvdGhlci5tX2Nsb2JiZXJz
LmJlZ2luKCk7CiAgICAgSGFzaE1hcDxBYnN0cmFjdEhlYXAsIGJvb2w+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBvdGhlci5tX2Nsb2JiZXJzLmVuZCgpOwogICAgIGZvciAoOyBpdGVyICE9IGVuZDsg
KytpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
Y3BwCShyZXZpc2lvbiAxNTI5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMSBAQAogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBkaWRXcml0ZXMoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQorYm9vbCBkb2VzV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKICAgICBO
b09wQ2xvYmJlcml6ZSBhZGRSZWFkOwogICAgIENoZWNrQ2xvYmJlcml6ZSBhZGRXcml0ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAx
NTI5ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29y
a2luZyBjb3B5KQpAQCAtNjIyLDcgKzYyMiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Jlc3Vs
dDsKIH07CiAKLWJvb2wgZGlkV3JpdGVzKEdyYXBoJiwgTm9kZSopOworYm9vbCBkb2VzV3JpdGVz
KEdyYXBoJiwgTm9kZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI5ODcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNiArNDAsNyBAQCBjbGFzcyBEQ0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBw
dWJsaWM6CiAgICAgRENFUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiZGVhZCBjb2RlIGVsaW1pbmF0aW9uIikKKyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFw
aCkKICAgICB7CiAgICAgfQogICAgIApAQCAtMTA0LDc1ICsxMDUsMTYgQEAgcHVibGljOgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2Nr
SW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFwaCk7
Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUo
KTsgaW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIFNldExvY2FsOgotICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDogewotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpID09IChtX2dyYXBoLm1f
Zm9ybSA9PSBUaHJlYWRlZENQUykpOwotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkud2lsbE5vdEhhdmVDaGVjaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBD
b25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBVSW50MzJUb051bWJlciBpcyBkZWFkIGJ1dCBp
dHMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkIGlzbid0OyBpZiBzbyB0aGVuIHdl
IHNob3VsZCBNb3ZIaW50IHRoZSBjaGlsZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQxKCktPnNob3VsZEdlbmVyYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBVSW50MzJUb051bWJlcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IG5vZGUtPmNoaWxkMSgpLT5jaGls
ZDEoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hv
dWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKFpvbWJpZUhpbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBu
b2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhNb3ZIaW50QW5kQ2hlY2spOwotICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBMZWF2ZSB0aGVtIGFzIG5vdCBzaG91bGRHZW5lcmF0
ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RD
aGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVu
KCk7IGNoaWxkSWR4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2Ug
PSBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFlZGdlIHx8IGVkZ2Uud2lsbE5vdEhhdmVDaGVjaygpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUs
IFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIGVkZ2UpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tVW5j
aGVja2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihub2RlKTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0gfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnNl
cnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcHJvY2VzcyB0aGUgZ3JhcGggaW4gcmV2ZXJz
ZSBERlMgb3JkZXIsIHNvIHRoYXQgd2UgZ2V0IHRvIHRoZSB1c2VzCisgICAgICAgICAgICAvLyBv
ZiBhIG5vZGUgYmVmb3JlIHdlIGdldCB0byB0aGUgbm9kZSBpdHNlbGYuCisgICAgICAgICAgICBW
ZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7CisgICAgICAgICAgICBtX2dyYXBoLmdldEJs
b2Nrc0luRGVwdGhGaXJzdE9yZGVyKGRlcHRoRmlyc3QpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZGVwdGhGaXJzdC5zaXplKCk7IGktLTspCisgICAgICAgICAgICAgICAgZml4dXBC
bG9jayhkZXB0aEZpcnN0W2ldKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkKKyAgICAgICAgICAgICAgICBmaXh1cEJsb2NrKG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1f
cmVmQ291bnRTdGF0ZSA9IEV4YWN0UmVmQ291bnQ7CkBAIC0yMDYsNiArMTQ4LDc1IEBAIHByaXZh
dGU6CiAgICAgICAgIGNvdW50Tm9kZShlZGdlLm5vZGUoKSk7CiAgICAgfQogICAgIAorICAgIHZv
aWQgZml4dXBCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleElu
QmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspIHsKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBj
YXNlIFNldExvY2FsOgorICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKChub2RlLT5vcCgpID09IFNldExvY2FsKSA9PSAobV9ncmFwaC5tX2Zvcm0gPT0g
VGhyZWFkZWRDUFMpKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkud2lsbE5v
dEhhdmVDaGVjaygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyIHRoZSBwb3Nz
aWJpbGl0eSB0aGF0IFVJbnQzMlRvTnVtYmVyIGlzIGRlYWQgYnV0IGl0cworICAgICAgICAgICAg
ICAgICAgICAvLyBjaGlsZCBpc24ndDsgaWYgc28gdGhlbiB3ZSBzaG91bGQgTW92SGludCB0aGUg
Y2hpbGQuCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZEdl
bmVyYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMSgpLT5vcCgp
ID09IFVJbnQzMlRvTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkgPSBub2RlLT5jaGlsZDEoKS0+Y2hpbGQxKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoWm9tYmllSGludCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnQpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BB
bmREZWZhdWx0RmxhZ3MoTW92SGludEFuZENoZWNrKTsKKyAgICAgICAgICAgICAgICBub2RlLT5z
ZXRSZWZDb3VudCgxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAg
ICAgY2FzZSBTZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9y
bSA9PSBUaHJlYWRlZENQUykgeworICAgICAgICAgICAgICAgICAgICAvLyBMZWF2ZSB0aGVtIGFz
IG5vdCBzaG91bGRHZW5lcmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgp
OyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7IGNo
aWxkSWR4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghZWRnZSB8fCBlZGdlLndpbGxOb3RIYXZlQ2hlY2soKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2Rl
T3JpZ2luLCBlZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b21VbmNoZWNrZWQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0
UmVmQ291bnQoMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAg
ICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG5vZGUpOworICAgICAg
ICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfSB9CisgICAgICAgIH0KKworICAgICAgICBtX2luc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhh
bnRvbUNoaWxkcmVuKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CkBAIC0yMTgsNiArMjI5LDcgQEAg
cHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgVmVjdG9yPE5vZGUqLCAxMjg+IG1fd29ya2xpc3Q7
CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwogfTsKIAogYm9vbCBwZXJmb3JtRENF
KEdyYXBoJiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZURv
bWluYXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZURvbWluYXRlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdFZGdlRG9taW5hdGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0VkZ2VE
b21pbmF0ZXNfaAorI2RlZmluZSBERkdFZGdlRG9taW5hdGVzX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEVkZ2VEb21pbmF0
ZXMgeworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAgICAKK3B1Ymxp
YzoKKyAgICBFZGdlRG9taW5hdGVzKEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmxvY2spCisg
ICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQorICAgICAg
ICAsIG1fcmVzdWx0KHRydWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJhdG9y
KCkoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9ncmFw
aC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKGVkZ2Uubm9kZSgpLT5taXNjLm93bmVyLCBtX2Jsb2Nr
KTsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAg
ICAgICAgICAgIkNoZWNraW5nIGlmICIsIGVkZ2UsICIgaW4gIiwgKmVkZ2Uubm9kZSgpLT5taXNj
Lm93bmVyLAorICAgICAgICAgICAgICAgICIgZG9taW5hdGVzICIsICptX2Jsb2NrLCAiOiAiLCBy
ZXN1bHQsICJcbiIpOworICAgICAgICB9CisgICAgICAgIG1fcmVzdWx0ICY9IHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgYm9vbCByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdDsgfQor
Citwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7
CisgICAgYm9vbCBtX3Jlc3VsdDsKK307CisKK2lubGluZSBib29sIGVkZ2VzRG9taW5hdGUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBFZGdlRG9t
aW5hdGVzIGVkZ2VEb21pbmF0ZXMoZ3JhcGgsIGJsb2NrKTsKKyAgICBERkdfTk9ERV9ET19UT19D
SElMRFJFTihncmFwaCwgbm9kZSwgZWRnZURvbWluYXRlcyk7CisgICAgcmV0dXJuIGVkZ2VEb21p
bmF0ZXMucmVzdWx0KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRWRnZURvbWluYXRlc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNp
b24gMTUyOTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDExICs3MzgsNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIENyZWF0ZVRo
aXM6IHsKLSAgICAgICAgICAgIHNldFVzZUtpbmRBbmRVbmJveElmUHJvZml0YWJsZTxDZWxsVXNl
Pihub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbFNhZmU6IHsKICAgICAgICAgICAgIHNldFVzZUtpbmRBbmRVbmJveElm
UHJvZml0YWJsZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwpAQCAtNzU4LDggKzc1Myw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICBjYXNlIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6Ci0gICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OiB7
CisgICAgICAgIGNhc2UgR2V0U2NvcGU6IHsKICAgICAgICAgICAgIHNldFVzZUtpbmRBbmRVbmJv
eElmUHJvZml0YWJsZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC04MjIsNyArODE2LDkgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBDaGVja0Z1bmN0aW9uOgogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2Ug
UHV0QnlJZERpcmVjdDoKLSAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOiB7CisgICAgICAg
IGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICAgICAgY2FzZSBDcmVhdGVUaGlzOgorICAgICAg
ICBjYXNlIEdldEJ1dHRlcmZseTogewogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQ
cm9maXRhYmxlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0xMjA0LDcgKzEyMDAsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAg
ICAgaWYgKGFycmF5TW9kZS51c2VzQnV0dGVyZmx5KCkpIHsKICAgICAgICAgICAgIHJldHVybiBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBFZGdlKGFycmF5LCBLbm93bkNl
bGxVc2UpKTsKKyAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1
dHRlcmZseSwgY29kZU9yaWdpbiwgRWRnZShhcnJheSwgQ2VsbFVzZSkpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0xJQ01QaGFz
ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCIKKyNp
bmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQu
aCIKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHRWRnZURvbWluYXRl
cy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdTYWZlVG9FeGVjdXRlLmgiCisj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBMb29wRGF0YSB7CisgICAgTG9vcERhdGEoKQorICAg
ICAgICA6IHByZUhlYWRlcigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2xvYmJlclNldCB3
cml0ZXM7CisgICAgQmFzaWNCbG9jayogcHJlSGVhZGVyOworfTsKKworfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCisKK2NsYXNzIExJQ01QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorcHVibGljOgorICAgIExJQ01QaGFz
ZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJMSUNNIikKKyAgICAgICAg
LCBtX2ludGVycHJldGVyKGdyYXBoLCBtX3N0YXRlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7
CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3Nh
cnkobV9ncmFwaCk7CisgICAgICAgIG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuY29tcHV0ZUlmTmVj
ZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgbV9kYXRhLnJlc2l6ZShtX2dyYXBo
Lm1fbmF0dXJhbExvb3BzLm51bUxvb3BzKCkpOworICAgICAgICAKKyAgICAgICAgLy8gRmlndXJl
IG91dCB0aGUgc2V0IG9mIHRoaW5ncyBlYWNoIGxvb3Agd3JpdGVzIHRvLCBub3QgaW5jbHVkaW5n
IGJsb2NrcyB0aGF0CisgICAgICAgIC8vIGJlbG9uZyB0byBpbm5lciBsb29wcy4gV2UgZml4IHRo
aXMgbGF0ZXIuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5u
dW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29w
KiBsb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5pbm5lck1vc3RMb29wT2YoYmxvY2spOwor
ICAgICAgICAgICAgaWYgKCFsb29wKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgTG9vcERhdGEmIGRhdGEgPSBtX2RhdGFbbG9vcC0+aW5kZXgoKV07CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykK
KyAgICAgICAgICAgICAgICBhZGRXcml0ZXMobV9ncmFwaCwgYmxvY2stPmF0KG5vZGVJbmRleCks
IGRhdGEud3JpdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRm9yIGVhY2gg
bG9vcDoKKyAgICAgICAgLy8gLSBJZGVudGlmeSBpdHMgcHJlLWhlYWRlci4KKyAgICAgICAgLy8g
LSBNYWtlIHN1cmUgaXRzIG91dGVyIGxvb3BzIGtub3cgd2hhdCBpdCBjbG9iYmVycy4KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBsb29wSW5kZXggPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLm51bUxv
b3BzKCk7IGxvb3BJbmRleC0tOykgeworICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3AmIGxv
b3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmxvb3AobG9vcEluZGV4KTsKKyAgICAgICAgICAg
IExvb3BEYXRhJiBkYXRhID0gbV9kYXRhW2xvb3AuaW5kZXgoKV07CisgICAgICAgICAgICBmb3Ig
KAorICAgICAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBvdXRlckxvb3AgPSBtX2dyYXBo
Lm1fbmF0dXJhbExvb3BzLmlubmVyTW9zdE91dGVyTG9vcChsb29wKTsKKyAgICAgICAgICAgICAg
ICBvdXRlckxvb3A7CisgICAgICAgICAgICAgICAgb3V0ZXJMb29wID0gbV9ncmFwaC5tX25hdHVy
YWxMb29wcy5pbm5lck1vc3RPdXRlckxvb3AoKm91dGVyTG9vcCkpCisgICAgICAgICAgICAgICAg
bV9kYXRhW291dGVyTG9vcC0+aW5kZXgoKV0ud3JpdGVzLmFkZEFsbChkYXRhLndyaXRlcyk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGhlYWRlciA9IGxvb3AuaGVhZGVy
KCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVIZWFkZXIgPSAwOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gaGVhZGVyLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBoZWFkZXItPnByZWRlY2Vz
c29yc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5h
dGVzKGhlYWRlciwgcHJlZGVjZXNzb3IpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcHJlSGVhZGVyIHx8IHByZUhlYWRlciA9
PSBwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgcHJlSGVhZGVyID0gcHJlZGVjZXNzb3I7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHByZUhlYWRlci0+bGFzdCgpLT5vcCgpID09IEp1bXApOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBkYXRhLnByZUhlYWRlciA9IHByZUhlYWRlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgbV9ncmFwaC5pbml0aWFsaXplTm9kZU93bmVycygpOworICAgICAgICAKKyAgICAgICAg
Ly8gV2FsayBhbGwgYmFzaWMgYmxvY2tzIHRoYXQgYmVsb25nIHRvIGxvb3BzLCBsb29raW5nIGZv
ciBob2lzdGluZyBvcHBvcnR1bml0aWVzLgorICAgICAgICAvLyBXZSB0cnkgdG8gaG9pc3QgdG8g
dGhlIG91dGVyLW1vc3QgbG9vcCB0aGF0IHBlcm1pdHMgaXQuIEhvaXN0aW5nIGlzIHZhbGlkIGlm
OgorICAgICAgICAvLyAtIFRoZSBub2RlIGRvZXNuJ3Qgd3JpdGUgYW55dGhpbmcuCisgICAgICAg
IC8vIC0gVGhlIG5vZGUgZG9lc24ndCByZWFkIGFueXRoaW5nIHRoYXQgdGhlIGxvb3Agd3JpdGVz
LgorICAgICAgICAvLyAtIFRoZSBwcmVIZWFkZXIncyBzdGF0ZSBhdCB0YWlsIG1ha2VzIHRoZSBu
b2RlIHNhZmUgdG8gZXhlY3V0ZS4KKyAgICAgICAgLy8gLSBUaGUgbG9vcCdzIGNoaWxkcmVuIGFs
bCBiZWxvbmcgdG8gbm9kZXMgdGhhdCBzdHJpY3RseSBkb21pbmF0ZSB0aGUgbG9vcCBoZWFkZXIu
CisgICAgICAgIC8vIC0gVGhlIHByZUhlYWRlcidzIHN0YXRlIGF0IHRhaWwgaXMgc3RpbGwgdmFs
aWQuIFRoaXMgaXMgbW9zdGx5IHRvIHNhdmUgY29tcGlsZQorICAgICAgICAvLyAgIHRpbWUgYW5k
IHByZXNlcnZlIHNvbWUga2luZCBvZiBzYW5pdHksIGlmIHdlIGhvaXN0IHNvbWV0aGluZyB0aGF0
IG11c3QgZXhpdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWxzbywgd2UgbmVlZCB0byByZW1l
bWJlciB0bzoKKyAgICAgICAgLy8gLSBDbGVhciBOb2RlRXhpdHNGb3J3YXJkIGZvciBhbnkgbm9k
ZXMgd2UgaG9pc3RlZC4KKyAgICAgICAgLy8gLSBVcGRhdGUgdGhlIHN0YXRlLWF0LXRhaWwgd2l0
aCB0aGUgbm9kZSB3ZSBob2lzdGVkLCBzbyBmdXR1cmUgaG9pc3QgY2FuZGlkYXRlcworICAgICAg
ICAvLyAgIGtub3cgYWJvdXQgYW55IHR5cGUgY2hlY2tzIHdlIGhvaXN0ZWQuCisgICAgICAgIC8v
CisgICAgICAgIC8vIEZvciBtYXhpbXVtIHByb2ZpdCwgd2Ugd2FsayBibG9ja3MgaW4gREZTIG9y
ZGVyIHRvIGVuc3VyZSB0aGF0IHdlIGdlbmVyYWxseQorICAgICAgICAvLyB0ZW5kIHRvIGhvaXN0
IGRvbWluYXRvcnMgYmVmb3JlIGRvbWluYXRlZXMuCisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gZGVwdGhGaXJzdDsKKyAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJbkRlcHRoRmlyc3RPcmRl
cihkZXB0aEZpcnN0KTsKKyAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gbG9vcFN0
YWNrOworICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICgKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGRlcHRoRmlyc3RJbmRleCA9IDA7CisgICAgICAgICAgICBkZXB0aEZp
cnN0SW5kZXggPCBkZXB0aEZpcnN0LnNpemUoKTsKKyAgICAgICAgICAgICsrZGVwdGhGaXJzdElu
ZGV4KSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVw
dGhGaXJzdFtkZXB0aEZpcnN0SW5kZXhdOworICAgICAgICAgICAgY29uc3QgTmF0dXJhbExvb3Aq
IGxvb3AgPSBtX2dyYXBoLm1fbmF0dXJhbExvb3BzLmlubmVyTW9zdExvb3BPZihibG9jayk7Cisg
ICAgICAgICAgICBpZiAoIWxvb3ApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGxvb3BTdGFjay5yZXNpemUoMCk7CisgICAgICAgICAgICBmb3Ig
KAorICAgICAgICAgICAgICAgIGNvbnN0IE5hdHVyYWxMb29wKiBjdXJyZW50ID0gbG9vcDsKKyAg
ICAgICAgICAgICAgICBjdXJyZW50OworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBtX2dyYXBo
Lm1fbmF0dXJhbExvb3BzLmlubmVyTW9zdE91dGVyTG9vcCgqY3VycmVudCkpCisgICAgICAgICAg
ICAgICAgbG9vcFN0YWNrLmFwcGVuZChjdXJyZW50KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gUmVtZW1iZXI6IHRoZSBsb29wIHN0YWNrIGhhcyB0aGUgaW5uZXItbW9zdCBsb29wIGF0
IGluZGV4IDAsIHNvIGlmIHdlIHdhbnQKKyAgICAgICAgICAgIC8vIHRvIGJpYXMgaG9pc3Rpbmcg
dG8gb3V0ZXIgbG9vcHMgdGhlbiB3ZSBuZWVkIHRvIHVzZSBhIHJldmVyc2UgbG9vcC4KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKAorICAgICAgICAgICAgICAgICAgICAiQXR0ZW1wdGluZyB0byBob2lzdCBvdXQgb2YgYmxv
Y2sgIiwgKmJsb2NrLCAiIGluIGxvb3BzOlxuIik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBzdGFja0luZGV4ID0gbG9vcFN0YWNrLnNpemUoKTsgc3RhY2tJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAg
ICAgIiwgKmxvb3BTdGFja1tzdGFja0luZGV4XSwgIiwgd2hpY2ggd3JpdGVzICIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2RhdGFbbG9vcFN0YWNrW3N0YWNrSW5kZXhdLT5pbmRleCgpXS53
cml0ZXMsICJcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqJiBu
b2RlUmVmID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGRvZXNX
cml0ZXMobV9ncmFwaCwgbm9kZVJlZikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgTm90IGhvaXN0aW5nICIs
IG5vZGVSZWYsICIgYmVjYXVzZSBpdCB3cml0ZXMgdGhpbmdzLlxuIik7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgc3RhY2tJbmRleCA9IGxvb3BTdGFjay5zaXplKCk7IHN0YWNrSW5kZXgtLTsp
CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gYXR0ZW1wdEhvaXN0KGJsb2NrLCBub2Rl
UmVmLCBsb29wU3RhY2tbc3RhY2tJbmRleF0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBhdHRlbXB0SG9pc3QoQmFzaWNCbG9jayogZnJvbUJsb2NrLCBOb2RlKiYgbm9kZVJlZiwg
Y29uc3QgTmF0dXJhbExvb3AqIGxvb3ApCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbm9k
ZVJlZjsKKyAgICAgICAgTG9vcERhdGEmIGRhdGEgPSBtX2RhdGFbbG9vcC0+aW5kZXgoKV07Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWRhdGEucHJlSGVhZGVyLT5jZmFEaWRGaW5pc2gpIHsKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBOb3Qg
aG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIENGQSBpcyBpbnZhbGlkLlxuIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghZWRn
ZXNEb21pbmF0ZShtX2dyYXBoLCBub2RlLCBkYXRhLnByZUhlYWRlcikpIHsKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAg
ICAgICAgIiAgICBOb3QgaG9pc3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0IGxvb3Ag
aW52YXJpYW50LlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZWFkc092ZXJsYXAobV9ncmFwaCwg
bm9kZSwgZGF0YS53cml0ZXMpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICIgICAgTm90IGhvaXN0aW5n
ICIsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICIgYmVjYXVzZSBpdCByZWFkcyB0aGluZ3Mg
dGhhdCB0aGUgbG9vcCB3cml0ZXMuXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9zdGF0ZS5pbml0aWFs
aXplVG8oZGF0YS5wcmVIZWFkZXIpOworICAgICAgICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0
ZSwgbV9ncmFwaCwgbm9kZSkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAg
ICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIiAgICBOb3QgaG9pc3Rpbmcg
Iiwgbm9kZSwgIiBiZWNhdXNlIGl0IGlzbid0IHNhZmUgdG8gZXhlY3V0ZS5cbiIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAg
ICAgICAiICAgIEhvaXN0aW5nICIsIG5vZGUsICIgZnJvbSAiLCAqZnJvbUJsb2NrLCAiIHRvICIs
ICpkYXRhLnByZUhlYWRlciwKKyAgICAgICAgICAgICAgICAiXG4iKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZGF0YS5wcmVIZWFkZXItPmluc2VydEJlZm9yZUxhc3Qobm9kZSk7Cisg
ICAgICAgIG5vZGUtPm1pc2Mub3duZXIgPSBkYXRhLnByZUhlYWRlcjsKKyAgICAgICAgbm9kZS0+
Y2xlYXJGbGFncyhOb2RlRXhpdHNGb3J3YXJkKTsKKyAgICAgICAgbm9kZS0+Y29kZU9yaWdpbkZv
ckV4aXRUYXJnZXQgPSBkYXRhLnByZUhlYWRlci0+bGFzdCgpLT5jb2RlT3JpZ2luRm9yRXhpdFRh
cmdldDsKKyAgICAgICAgCisgICAgICAgIC8vIE1vZGlmeSB0aGUgc3RhdGVzIGF0IHRoZSBlbmQg
b2YgdGhlIHByZUhlYWRlciBvZiB0aGUgbG9vcCB3ZSBob2lzdGVkIHRvLAorICAgICAgICAvLyBh
bmQgYWxsIHByZS1oZWFkZXJzIGluc2lkZSB0aGUgbG9vcC4KKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgY291bGQgYmVjb21lIGEgc2NhbGFiaWxpdHkgYm90dGxlbmVjay4gRm9ydHVuYXRlbHksIG1v
c3QgbG9vcHMKKyAgICAgICAgLy8gYXJlIHNtYWxsIGFuZCBhbnl3YXkgd2UgcmFwaWRseSBza2lw
IG92ZXIgYmFzaWMgYmxvY2tzIGhlcmUuCisgICAgICAgIGZvciAodW5zaWduZWQgYm9keUluZGV4
ID0gbG9vcC0+c2l6ZSgpOyBib2R5SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHN1YkJsb2NrID0gbG9vcC0+YXQoYm9keUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IE5hdHVy
YWxMb29wKiBzdWJMb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5oZWFkZXJPZihzdWJCbG9j
ayk7CisgICAgICAgICAgICBpZiAoIXN1Ykxvb3ApCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWJQcmVIZWFkZXIgPSBtX2RhdGFbc3ViTG9vcC0+
aW5kZXgoKV0ucHJlSGVhZGVyOworICAgICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oc3Vi
UHJlSGVhZGVyKTsKKyAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShub2RlKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQgYWxs
IG9mIHRoZSBub2RlcyB3ZSBjdXJyZW50bHkga25vdyBob3cgdG8gaG9pc3QKKyAgICAgICAgLy8g
ZG9uJ3QgaGF2ZSB2YXItYXJnIGNoaWxkcmVuLiBUaGF0IG1heSBjaGFuZ2UgYW5kIHRoZW4gd2Ug
Y2FuIGZpeCB0aGlzCisgICAgICAgIC8vIGNvZGUuIEJ1dCBmb3Igbm93IHdlIGp1c3QgYXNzZXJ0
IHRoYXQncyB0aGUgY2FzZS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShub2RlLT5mbGFncygp
ICYgTm9kZUhhc1ZhckFyZ3MpKTsKKyAgICAgICAgCisgICAgICAgIG5vZGVSZWYgPSBtX2dyYXBo
LmFkZE5vZGUoU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxk
cmVuKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
dFRhaWxBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CisgICAgQWJzdHJhY3RJbnRlcnByZXRlcjxBdFRh
aWxBYnN0cmFjdFN0YXRlPiBtX2ludGVycHJldGVyOworICAgIFZlY3RvcjxMb29wRGF0YT4gbV9k
YXRhOworfTsKKworYm9vbCBwZXJmb3JtTElDTShHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxp
bmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBMSUNNIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1
blBoYXNlPExJQ01QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMSUNNUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xJQ01QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMSUNNUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
TElDTVBoYXNlX2gKKyNkZWZpbmUgREZHTElDTVBoYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIERvZXMgbG9vcC1pbnZhcmlhbnQgY29kZSBt
b3Rpb24sIG9yIExJQ00gZm9yIHNob3J0LiBUaGlzIG9ubHkgaG9pc3RzIGNvZGUKKy8vIGFuZCBu
ZXZlciBzaW5rcyBhbnl0aGluZy4gQSBub2RlIGlzIGhvaXN0ZWQgaWYgaXQgZG9lcyBubyB3cml0
ZXMsIGFuZCBpZgorLy8gaXRzIHJlYWRzIGRvbid0IG92ZXJsYXAgdGhlIGxvb3AncyB3cml0ZXMu
CisKK2Jvb2wgcGVyZm9ybUxJQ00oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdMSUNNUGhhc2Vf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE1
Mjk4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJERkdGbHVzaExpdmVuZXNzQW5hbHlz
aXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdKSVRD
b21waWxlci5oIgorI2luY2x1ZGUgIkRGR0xJQ01QaGFzZS5oIgogI2luY2x1ZGUgIkRGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBo
YXNlLmgiCiAjaW5jbHVkZSAiREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgpAQCAt
MjA4LDYgKzIwOSw5IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIK
ICAgICAgICAgcGVyZm9ybVNTQUNvbnZlcnNpb24oZGZnKTsKICAgICAgICAgcGVyZm9ybUxpdmVu
ZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOworICAgICAgICBwZXJm
b3JtTElDTShkZmcpOworICAgICAgICBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhkZmcpOworICAg
ICAgICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsgLy8gV2UgcmVs
eSBvbiB0aGlzIHRvIGNvbnZlcnQgZGVhZCBTZXRMb2NhbHMgaW50byB0aGUgYXBwcm9wcmlhdGUg
aGludCwgYW5kIHRvIGtpbGwgZGVhZCBjb2RlIHRoYXQgd29uJ3QgYmUgcmVjb2duaXplZCBhcyBk
ZWFkIGJ5IExMVk0uCiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAg
ICAgIHBlcmZvcm1GbHVzaExpdmVuZXNzQW5hbHlzaXMoZGZnKTsK
</data>
<flag name="review"
          id="229063"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>